h323plus/0000755000175000017500000000000011765231344011115 5ustar markmarkh323plus/Openh323libce.vcb0000644000175000017500001124200010655704647014121 0ustar markmarkMicrosoft C/C++ program database 2.00 JGQ № I J K L M N O P ўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџђџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџE  бѕt  ХE о в щ Л ќќ @ жн\ @ ее $ єєт $ ѓѓЎ $ ђђE  ‚…А  {у  ˆЕ ­ЯŽ  DPВ ЇЊ3 ‰•1 влј ёїџ  Е& њn  љ хш2 отй "ыюХ #3A” %ЁЄ 'SVe} )"03 *: +˜žь  ,Y\s .n}О 1QVg 2_e„  4hk‡ 6€„B 7з 8ЩдY  9зт—  :ѕЄ ?№ќш AƒЦ  De€љ G<bЮ  I 9  JџК@ N2>К@ R!@ SAL!@ T• W@$ Xp$ YКЌ Zdgh ^[a _jvЕ  bны+ cOR8 j1=8 q@L,К0ђєЖFаœ$№œœœ8 v&.  w\_ yАЩ) |’­z  ~†Љ €nƒЄ be-  „Ькй …UYH †hkL ˆ њ ‰er'  Šux Q ‹! PZУ ’ЪЭr ”ХШQ –ПТЉ ™ЙНT ›ЏВз ДЗ8  ŸЊ­ї ЁЅЈŸ› Ђ{Ђј Ѓš|› ЅT Іљ—  Ї]b  Ј(5l  Ќ’˜\ Ў%Ÿ  БнP ДМк;N Ж›ЙS  И8K4@ ИW $ Иггj Л+j Оо№Fd c   Uc63578йž & љ Ц т,ƒйЄ Ь,ƒйй йой•ƒƒєMйєƒй€йƒˆƒ ŽЂує& й€ІКйƒƒЬ,FUƒƒƒУ ч йєƒ^ээййКtbƒт,ƒƒп і Ьi„Uаёi„UЅТi„Uƒƒ?ƒШч йЁ ƒЯййаёƒййšйЬ-,$ƒsƒ?ƒsƒШч йЁ йY ƒY ƒЯƒййšй7 i„ƒƒƒУ ч йУ ƒ^ƒ‚ vАНv€ŽХ. ffЎ ddЙ. hhв ggХ. kkЛ ^^<. #U \Ы[. ЮбE &)в ,6Г ў s ?  гкЇ 9YЭ V ` ЌЛ.  … ЪзЄ ”—(. !‚‹х. "кн/. $šњ & Ѓy. (ІЉR. *Ž‘М .рѕя 0} 3НЧ  6ј Œ 8orб =]cб AflЈ  BKZˆ Eоуh  Iц NHs. S‰2 VƒС [w€R \ЭвЗ _%/  a~‚c c…Š? dx{ѕ eruЈ fА. g“–€ iCo  k™А. lГЖе. nХЪФ pЙМЮ. rПТh t8@ъ v№єэ yыэc {ео  }рщ6 ~25 €ЂЅo ‚œŸж †Ž˜b ˆНР– ŠЗК‹ ŽЊДйƒЬЬњ3=Mƒiƒ^ йЯщ9йkƒyДƒ'ƒЬ=MƒйHййžƒbƒЯлƒƒ”ŸДƒ(йЌƒ—ЊОMƒѓЬMЬ=MƒVƒ ˜ ƒ—ЊОƒ—ЊОдƒVM=M№й=Mй@й‚йййййой•ййњййƒiййКƒƒ/4:КДMЌК4:КДMЌКа! L`‚! ЉО˜! „Ѓ)!о рџЄ! boЧ! 12W! 34i! 7JA!  m!КŽ!К5!К5!КЋ!Г!О!`!`!m!КM!я! SБъ ”ІЬЋъ бЋъ ЕЧжЋъ 8 J ќЋъ ) ; NЌъ ? Q XЌъ Š œ |Ќъ ;MЩЌъ Qc­ъ gy­ъ }aБъ ›­IЌъ “ЅSЌъ ЉЛwЌъ ПбФЌъ еч­ъ ,>­ъ BT7­ъ XjŠ­ъ ЌОн­ъ ТдЎъ иъ=Въ БУўЌъ ю ­ъ 2­ъ ,…­ъ 0Bи­ъ FX§­ъ \n8Ўъ r„Ўъ ˆšœЎъ žАЋЎъ !ДЦPВъ "ѕг­ъ #Ъмј­ъ $рђ3Ўъ %TfˆЎъ &j|—Ўъ '€’ІЎъ (–ЈЕЎъ )ЌОЏъ *Тд/Џъ +иъ>Џъ ,юДВъ - ’Ўъ .ЁЎъ /,АЎъ 00B Џъ 1 В*Џъ 2ЖШ9Џъ 3ЬоuЏъ 4тєЯЏъ 5ј <Аъ 6 ЈАъ 7$6єВъ 8Oa%Џъ 9:L4Џъ :PbpЏъ ;fxЪЏъ <|Ž7Аъ =’ЄЃАъ >ЈК4Бъ ?Оа\Бъ @дцфБъ AъќKВъ BgГъ C@R2Аъ D(žАъ E,>/Бъ F+WБъ G/AпБъ HEWFВъ IWiЏВъ JmжВъ K.!@!bГъ LD!V!kГъ M‹!!pГъ NVhкБъ O/"A"AВъ Pа"т"tГъ Q№Л Q E> R%вn SШx V-] WЗ,Н,& Y,,0 ъ [,Ј,HV ]Ћ,Д,У€ `l,q,•• a“,š,љ~ cu,},ѓe dК$Р$пL fv$‰$S# h™$Ј$Чo jЋ$З$ш2 m`$c$* nŒ$–$р— pg$r$‘ qЪагъ rОС(R uИЛ9O wФЧс^ x7=Д zкG |)і™ ~,4nŸъ ёєЃ– ‚0 „јџЏЋъ …S$Y$'3 ‡$$ŒЉъ ‰.$?$зi ‹B$P$U Žя#ђ#~ $+$ h ‘і#$A4 ’ЋБg* “ŸЂ\F –™œ|e ˜ЅЈ” ™фъb‡ ›ЎН„’ ЪеgT Ÿис1. Ђ›ž` ЃРЧAžъ ЅЂЊЫ~ ІТШбY ЇЖЙЂ< ЊАГ­Аъ ЌМПл/ ­љџЧZ Ўэ№‚žъ БчъДC ГѓіHI Д‚ˆZD Еvyq: Иps] К|(œ Л<B{ М03њg П*-Жy С69ДD ТŒ’§$ У€ƒ:Ђъ Цz}Ш Ш†‰U\ Щ_eYY ЪSVwv ЭMPŽ› ЯY\ЫЖъ аєњџДъ бтёвD дипё< е’ ˜ Љ~ ж}  сb йs z Ab к^ d ˜; лM [ &) о- 4 Ф’ пЧЭuЋъ с“Ђэ\ уЎЙ]Ќъ хМФ}< ш„ё‹ щЅЋъ# ыˆšy ьI#O#7\ ю#$#нЂъ №0#;#/Q ђ>#F#н† ѕ##-E і'#-#Žm ј ##Д" љ!'ёB ћчјvL §М“ џA; дзџS ћ• луЕ/ tzн( dqhw DKвu 06Єt  -Ys ъёL‘ +1Ÿ3 Г5 $(Г5 !Рi   MŸъ   EH   ЖЊъ djЅ* 6Cf= "NW‡x $ZaŒ '%(e (FKы *,2xГъ +чэ†† -ЙЦЧ] /бкWЇъ 1нф=Ўъ 4ЈЋЩQ 5ЩЮL 7ЏЕn— 8ъ-№-бp :Д-У-# <а-л-qh >о-ч-ф{ AŸ-Є-}1 BЦ-Э-ч) DЈ-А-њЈъ E›ЁЪ Gˆp@ I’˜к“ LqtчЁъ M…|t Ox}Ђn Py  О' R/ D š2 TU f 8m Vi v c' Y  ї‘ ZG R #Јъ \ + „7 ]˜(ž(ш• _\(m(?/ a{(ˆ(Cx c‹(•(дЏъ fH(K(/d gp(x(%_ iO(X(оŠ j#p5 m Ћъ oy– p+1` rћ…& tтr v (П› yщьЄa z (8 |№їm }w%}%Š ю$%І 2%U%ќžъ ƒX%t%и” †Ч$Ъ$§Q ‡%/%N ‰Ю$ъ$ёl Šл%с%H Œ™%Ќ%СI ŽЛ%Ъ%a‘ Э%и% 2 “„%‡%рЅъ ”Џ%И%{œ –‹%•%5k —ci"… šRYt œ\`, Ѓœ ŸH_я– Ёr‡ c ЃŠšJ І,0є* ЇboLq Љ4DлЊъ Њ ++7Гъ Ќй*ш*Щ‚ Ўє*џ*Ы4 А+ +K ГЧ*Ъ*šH Ды*ё*Q ЖЮ*е*—] З@F, К/6ЕA М9=;A Нg*m*ПŽ П3*B*X” СN*Y*iM У\*d*pВъ Ц!*$* ЧE*K*[0 Щ(*/*m2 Ъіќ• ЭхьЂ. ЯяѓJh аК*Р*G9 в†*•*“k дЁ*Ќ*–' жЏ*З*zJ йt*w*œB к˜*ž* ъ м{*‚* – н!DS р < то ъ ух'ы'OŒ хT'}'€W чœ'У'К ъ щЦ'т'AАъ ь-'0'v э€'™'a/ я4'P'А& №;(A(pV ђ((ИЂъ є!(,(bP і/(8(" љђ'ѕ'ѓT њ((ІЕъ ќљ'(” §ѓљdŠ тщ™ ь№B'   B Ћ Ф + м ё *q є  RG   V Ч й ЄГъ ” Ї &I  '&'BДъ ˆ&Г&8B е&ќ&э‰ џ&'Оz `&c&n ъ Ж&в&лS g&„&Йg Яе6€ ОХsc "ШЬ}} #ч э Ќm %д л М3 'о ф Ѓƒ *Н Р ‡G +Э б ‹Дъ -Ф Щ Є‰ .А Ж 9v 0 Є F3 2Ї ­ ƒ0 5† ‰ sŽ 6– š C 8 ’ %9 9ф(ъ(бm ;Ж(У(КЎъ =Ю(з('h ?к(с(Ж6 BЅ(Ј(n; CЦ(Ы(8 EЌ(В(\­ъ FBHX I18o\ K;?V5 Lбз>+ N›Њ>& PЗТ­x RХЮЇT Uˆ‹и? V­Д— X—E* YLRќЄъ \8;Ї ^EIЇ `>BDo a+1$ъ b(њ eхь—@ f+1:D hїд& j‚l l (f oфшњ? p ;{ rьѓфs sзнюa tЪдD? wЊБ^ x€ † 6i zB S †‘ |b o œŽ ~r } h3 - 0 С> ‚V _ Ф• „4 > щЖъ …S&Y& | ‡&&Uƒ ‰)&>&’6 ‹A&P&>^ Žш%ы%'G &&&цh ‘я%џ%ay ’ІЌ0% ••œ)Ѓъ —ŸЃіn ˜**фK šц)ѓ)ы> œў)*yƒ ž **ё Ёе)и)ЖЁъ Ђі)ћ)k… Єм)т)ЦE Ѕгйѕi ЈТЩ3Ѕъ ЊЬаЁ} Ћ|)‚)ЫH ­N)[)Пh Џf)o)Љ‘ Бr)y)ЛJ Д=)@)Њ” Е^)c)oІъ ЗD)J)k И‹‘9† Лzп… Н„ˆЩW ОШ)Ю) Ќъ Рš)Ї)Х‰ ТВ)Л)е: ФО)Х)uЁъ Ч‰)Œ)й˜ ШЊ)Џ)Br Ъ)–)Ш™ ЫЏЕѓ& ЮžЅK‚ аЈЌІЃъ бмтY& гЈЗžъ еУЮ–I збйM к–™фГъ лКРС\ нЄXd о‰Л2 р[hЬt тs|В$ ф†ЫM чJMƒd шkpї| ъQWА( ы=CњЂъ э)Ёъ я#.пN ё1:qz єєїEJ ѕ 3‡ їћЃЖъ ј_,e,+K њ,&,ЁЏъ ќ9,J,ўF ўM,\,žb ї+ћ+ЭR ),6,<Љъ џ+ ,”g ‚+ˆ+Ѓ‡ 4+I+pI \+m+“ p++т, ++T8 L+Y+ba "+0+ЁZ ъ+№+b І+Й+sH Щ+и+ˆ™ л+ч+јВъ +“+Єu М+Ц+Ь* —+Ђ+vQ ƒ‰i‹ "ry`Єъ $|€iЖъ %U [ Ъ[ 'B I Ќъ )L R №c ,+ . ‡P -; ? ЯŒ /2 7 Ќ8 0 $ ь 2  @ 4  Въ 7є ї Ёœ 8  Н, :ћ b> ;0)6)fЉъ =))4[ ?)#)H2 A&)-)†> Dё(є(zš E))ЃQ Gј(ў(КЄъ Hgm–… KV]„Їъ M`dбš Nќ/ PтёЗŒ R§З+ T Е@ WагН XєњлВъ ZзоЏ™ [ э1 \ъ o _074Зъ `ГЙЮT cЂk, eЌАk, gЅЉ[{ houХc kZ^5 mhl5 oae3Ÿъ pіќз9 sсхГ1 uяѓГ1 wшь&D xД К NM {Ÿ Ѓ Ёъ }І Њ Ёъ ­ Б WЁъ € 5Š ƒуш)( …)( ‡ыя)( ‰ђі)( ‹љ§ Зъ Œ6.<.Gz Ž..њ!  .).q ’,.3.Œ) •ї-њ-ЮЌъ –..QE ˜ў-.Џъ ™€†ЦL šm}8› !(ћw žu{нV  NQнV ЂZ]нV ЄTWнV ЇGKг0 Љgkг0 Ћnrг0 ­`d&› Ў:@z# Б%)\X Г,0\X Е37Hj Ж„Š$T ЗAЄW К•œ‹y ЛЙП1z МЉЖ4: П‰x4 РKQMЕъ С?BuU Ф8<ўk ЦEH‹ Чms—i ШZjЊъ Ы„ Ьb/h/ ˆ Ю/+/Ym а=/N/I) вQ/_/œU еў./ Іъ ж./:/Eœ и//­ъ йЮ д ­ъ л| • ­ъ нО Ы ­ъ пl x ЮІъ тe h ,— уX ^ §: хФѓЌъ ч : T] щ= U ьf ьЂЅё@ эі œ— яЉРў9 №Ž” ђXg—Іъ єtКj і‚‹Ѕ7 љDH™9 њjq!Y ќLTфœ §УЩ§R џžИ0 ЊЕюЃъ ИР№W }€˜ ъ ЁЇяC „‹X ъ т#ш#Zi v#“#z ­#Ц#†/ Щ#п#’o V#Y#ИВъ –#Њ#GC ]#r#Жъ pv D _fw im9Бъ УЩ ) •Ђ‰a !­ЖщБъ #ЙРа‘ &„‡Ї‚ 'ЅЊ–V )‹‘<­ъ * Wf ,ичZ .ѓўлЋъ 0 е; 3ЦЩŒ= 4ъ№)‚ 6Эд- 7|‚ь} 9FUХ| ;bmnЕъ =pyt- @36M AX_т­ъ C:BŠЊъ D{`k EkxЛ` H5<Зžъ I.•.? KW.f.ЊЉъ Mt..ё[ O‚.Œ.КO RC.F.“Ѕъ Si.q.Y| UJ.S.MЖъ VжмMЗъ WЦг‡ Z—Дъ [sy;l ^biы% `lpp9 aЬЕъ cфѓ№Љъ eџ Ic g _‰ jбе­Š kіќВV mйр˜Зъ n--fo pй,ь,S rњ, -Іš t --€K wФ,Ш,”L xя,ї,E: zЬ,е,'~ {ць_C ~емѓ‚ €пуўœ їU ƒЮ н ГG …щ є zЏъ ‡ї џ ;š ŠМ П a` ‹р ц pЗъ У Ъ l6 Ž # йшHІъ ’єџ' ” O› —ЧЪw{ ˜ыё8Єъ šЮеЗ; ›Џ Е yb œŸ Ќ ‰Ђъ Ÿ † zАъ  #ЫB ЂщјfДъ Єri ІЖ‹ Љзк0F Њћ3| ЌохEЈъ ­k q TŽ ЎT h ƒЕъ Б % +Дъ В  {E Дд у / Жя њ Ьœ И§  Д: ЛС Х о$ Мц ь d< ОЩ а БЈъ Пд к Ѕ{ ТУ Ъ 11 ФЭ б LQ ХФЪD@ Ч‚•‘“ ЩЄГ i ЫЖСм Юmp'Z Я˜Ё O бt~‚~ в`fLU д,;w^ жGR+ иU](‹ л$} м>D$Еъ о!(дk пЏ Е ЏS сu † ‰D у“   ‰ хЃ Ќ Ж_ шb e žv щ‰  Ўъ ыi q Љъ ь’-˜-3- ю>-W-§y №i-~-яZ ђ--7P ѕ&-)-3f іZ-f-+c ј--:-ђƒ љ7 ќ§aA ў зЈъ џ7==L &-_" 04є] КР5" †•јt ЁЌ9a ЏЗЪ‡ twŠj ˜žS} {‚E“ gmaj %8 s GV [ YdНF  Єъ ;D}Ѓъ !cg ,2к| ѕ)ƒn #ЁЈH‰ $pvщŸъ %Emnq (IPѕz )†1Œ1БДъ +L1]1Q- -j1w1 x /z1ƒ1C 291<1kN 3`1g1йy 5@1H1’4 6ЃЉw% 7—š’ :”Д= < ѕx =в/и/ќ. ?†//Ÿ^ A­/Р/н’ CУ/Я/eБъ Fo/s/р' G /Њ/tŒ Iw/‚/їЕъ JА!Ж!$ M€!‡!Жd N""Жd Q§!"Жd S " "W UЄ"­"W VА"Ж"W Xj"r"W [b"f"W ]v"‡"Ёl ^l!r!€X a#!*!P„ dН!С!P„ fЪ!Э!P„ gа!ж!с3 i˜0Љ0с3 jв0и0с3 lЦ0Я0с3 o…0ˆ0с3 qŒ0”0Cˆ sъ!э!Cˆ vн!с!Cˆ w№!і!q yц0ю0q |п0т0q ~ђ01q ,121q  1)1Y[ ‚і"ќ"юo …Х"Ь"”E †ё.ї.З% ˆБ.Ф.н5 Šв.с.a Œф.ю.zY œ. .іE Ч.Я.€ ’Є.­.[B “•›yf ”‚’2 —LSѕm ˜ю є ѕm ›л п ѕm ш ы •N ž%0+0•N Ёп/т/•N Ѓ0"0•N Ѕц/э/•N Їё/0YZ Ј!!ЕP Љ!!!u Ќћ џ - Ў! !кЇъ А90@0кЇъ ВD0S0кЇъ Дm0u0кЇъ З2050кЇъ Иx0~0]Јъ ЙU"["0˜ М$"+"Бo Нѓљжa ПНЬ‚ СйфхЄъ Уч№Ќъ ЦЊ­Я8 ЧЯжЯ) ЩБЙЋъ Ъ–њJ ЭzH_ Я‰H_ ႆЯ+ вms’ еINMъ з_cMъ йX\Mъ лQUMъ нfjyg оMSД† с8<аv уFJаv х?C цдкl“ щПУ9N ыЭб9N эЦЪTВъ южмUK ёРХэ8 ѓШЬэ8 ѕЯг.w і—CЏъ љ†“R ћ”TЋъ ќw}r ўIVшš ajћˆ mtZ+ 8;ѕ4 Y^DT ?E­ъ <BЌM E 59E .2E '+E  $Тn  Ÿъ Yb Yb  u™ ВИЛk Ё] "ЄЈ] $ЋЏоƒ %&,QЊъ &ѓu )юq + #“S ,кр^t .ЄГKw 0РЫ6# 2Юз8 5‘”^• 6ЖНаЃъ 8˜ Ц? 9–N <|чŽ >‰чŽ @‚† › A & їŒ Cђ џ ЧГъ E  I G  6y Jс ф 5s K  lЊъ Mш ю [v Nџ§_ OЮвf Pi m ёj Q$ ' Ђъ R;>iЂъ SсфѓH T§ …ъ U§X~ VFL? W%)нЎъ Xнпы+ YеДъ Zймгw [АИ˜ \'+б" ]мп1Ž ^ЂЄ Аъ _Œэ6 `ЙМЇw aqtБъ b•˜цI cilXl dLP … e!*Ў› fтg g{~) h€ƒc7 i‚• jUYСf k,/ж@ l‡Š{€ mV\†_ nЬЯЧK ov y ^™ p  Ч} qЙ Н С# r№їex s  t‹›/> u7C6 vw!z!Žs w!!kr xЛ"П"9– yBF = z""  {}€ККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККК ƒ‘#Ђ# ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ "%‘#Ђ#{O(. ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ "%‘#Ђ#Йe(. ŽЂƒ#"й#"‘#Ђ#& й€ "%‘#Ђ#сА(. "%‘#Ђ#лC(. "%‘#Ђ#‹(. "%‘#Ђ#&(. "%‘#Ђ#E(. "%‘#Ђ#ўŽ(. ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ƒ‘#Ђ# ƒ‘#Ђ# ‘#Ђ#Э5Ѕ"Э5ч1 ‘#Ђ#aHЅ" ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ‘#Ђ#1ЋЅ" ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ‘#Ђ#8tЅ" ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ‘#Ђ#ъAЅ" ŽЂƒ#"й#"‘#Ђ#& й€ ‘#Ђ#д.Ѕ" ŽЂƒ#"й#"‘#Ђ#& й€ ‘#Ђ#;<Ѕ" ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ‘#Ђ#8™Ѕ" ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ‘#Ђ#ЁcЅ" ƒ#"й#"‘#Ђ#& й€ ƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ‘#Ђ#\Ѕ" ŽЂƒ#"й#"‘#Ђ#& й€ ‘#Ђ#Ю‘(ЮЂ( ƒ‘#Ђ# ŽЂƒ#"й#"‘#Ђ#& й€ ƒ‘#Ђ# ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ‘#Ђ#XЃЅ" ŽЂƒ#"й#"‘#Ђ#& й€ ‘#Ђ#hЅЅ" ŽЂƒ#"й#"‘#Ђ#& й€ ‘#Ђ#†Ѕ" ŽЂƒ#"й#"‘#Ђ#& й€ ‘#Ђ#~‚Ѕ" ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ‘#Ђ#’ЄЅ" ƒ#"й#"‘#Ђ#& й€ ƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ‘#Ђ#ДЇЅ" ŽЂƒ#"й#"‘#Ђ#& й€ ƒ‘#Ђ# ‘#Ђ#‰,‘(‰,Ђ( ‘#Ђ#?5Ѕ"?5ч1 ‘#Ђ#в1Ѕ"в1ч1 ‘#Ђ#Ёч1ЁЅ" ‘#Ђ#L(e(L(Ђ(L(‘(L(}( ŽЂƒ#"й#"‘#Ђ#& й€ ƒ‘#Ђ# Ђ(1‘(‘#Ђ#§0‘(§01§0Ђ( ‘#Ђ#sXч1sXЅ" ƒ‘#Ђ# ƒ‘#Ђ# "%‘#Ђ#l(. ƒ‘#Ђ# ŽЂƒ#"й#"‘#Ђ#& й€& ŽЂƒ#"鈑#Ђ# ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ‘#Ђ#wЅ" ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ƒ‘#Ђ# ŽЂƒ#"й#"‘#Ђ#& й€ ƒ‘#Ђ# ‘#Ђ#&Ѕ" ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ‘#Ђ#)ƒЅ" ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ƒ‘#Ђ# ŽЂƒ#"й#"‘#Ђ#& й€ ƒ‘#Ђ# ŽЂƒ#"й#"‘#Ђ#& й€ ‘#Ђ#\1Ѕ" ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ‘#Ђ#AЅ" ‘#Ђ#‡"Ѕ" ŽЂƒ#"й#"‘#Ђ#& й€ ŽЂƒ#"й#"‘#Ђ#& й€ ƒ‘#Ђ# ƒ‘#Ђ# ŽЂƒ#"й#"‘#Ђ#& й€ "%‘#Ђ#ѓ=(. ŽЂƒ#"й#"‘#Ђ#& й€ƒ‘#Ђ#"%К‘#Ђ#e(.ƒ#"& й€К‘#Ђ#ŽЂƒ‘#Ђ#К‘#Ђ#Ј„(."%ŽЂ& ƒ#"К‘#Ђ#й€šˆ(.К‘#Ђ#"%й€К‘#Ђ#ŽЂ& ƒ#"ƒ‘#Ђ# ŽЂƒ#"й#"‘#Ђ#& й€ ƒ‘#Ђ#"%К‘#Ђ#7n(.& К‘#Ђ#ƒ#"й€ŽЂ "%‘#Ђ#н-(.й€ŽЂƒ#"К‘#Ђ#& ƒ‘#Ђ# ŽЂƒ#"й#"‘#Ђ#& й€ ‘#Ђ#l_‘(l_Ђ( ‘#Ђ#n}(n‘(nЂ(ne( ‘#Ђ#№vЅ"№vч1 ‘#Ђ#WNЅ"WNч1 ‘#Ђ#9Ђ(9‘( ‘#Ђ#ЕRЅ" ŽЂƒ#"й#"‘#Ђ#& й€ ‘#Ђ#Ee(E}(E‘(EЂ( ‘#Ђ#nbЅ"nbч1 ‘#Ђ#]ч1]Ѕ" "%‘#Ђ#r(. ŽЂƒ#"й#"‘#Ђ#& й€ ‘#Ђ#ўŽЅ"ўŽч1 ŽЂƒ#"й#"‘#Ђ#& й€ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"‘К coпЗN ^^оЌ ``в bbщ aaьЗ eeЛ TTХ КЫžС ЗУ  ksЎК@  egяЛ@  mm%М#@ nn‘Л@ kkhЛ@ jj Л@ iiТЛ#@ ll˜Р# SeNХ /PЦ r%П U`ЙС N T Ц !] f -Н "h q tУ $t } Ч %W Z #К (,еМ +iy[Ф ,afЩ /юї?Ф 0БЕ Рo 2ПУŠТ 4ИМС 7ЦЫЉТ :ЫюоТ <СШ<У =ЉЎSР­ @x™jН AЮйjН# CмцjНg GщCШ J&,CШ M/RdК OњK иШ RЫы!ОБ U}“еЦ Wh GП„ YЃБЉЧ [/8вХ ];QSС _ёеФ bˆ  HИ d1bnЙ few”М h4Т jj›У lm{NЧ n8L€Ф pсъХ r#ъУ tэЙЙ v(,ћЗ y † ЮО {$.П) ~Oj%Ш }‚•И zБШ ‚„šЦИ …|ŠЙ ˆœКSМ ŠМПGОЌ ŒT^еН! ozDЦ ‘!„ОK “ЭјЙ ––™єЧџ ˜оTУ ™œІSТ œДШШ #   ƒщИэ4ХйщИŽН-'УщКЛММЬbDЛЬйЅРЮРєРЬ`Хƒi ЦМЦцСŽЂYНй€ƒiDКўМЙНйй/Р7Щƒƒ/Рƒ9Сƒ9С/РƒŽНЪТƒУМrРƒРййŽНйŽНЏНЫНƒœШ~ШƒcШ~Шƒ€Кƒ€КЩй=ОКƒџЦƒpПƒгЧƒќХƒ}СйИљФƒsИƒ˜ЙƒЙМƒ/ТƒЧУƒ€ЧƒЏФƒ­ХƒФйрЙƒИ1ИйіОйЙПђПйƒЙИйƒщИЙй:Й_ЙйyМйjОйёН ОЬkЦƒЃОйККƒШйŽНjТhЩq xxuЩ {{Л rrJл ~~cт %-№ч {††в   у њЦч tс ѓі/нџ гO 2ш шяьё (8|х "%Uс ‡ЭT ЂЅCж “™ћђ œŸЖж Œ в ЈЋ#ц ЕИРз ˆT№ СФ.ъ ЛОЂь ЎВНн "эпџ $q„Юё &†Љ я '[a‡л (dgщ )ЭжЯT *jmЪ +СЪфЪ /ThКш 1›ƒhЭ 2ыв) 4гыgл 5 "ш 7Ќа“п 80W+щ ;юmк =‡˜/иџ >o~Fп @“uъ BЂЉ&еE DйРэ I ƒѓ JknKц K\_и LMS`и MVYЇгW NFIф Obe‰м Porы№ S;Bбж T{~1№ Vuxхз Whlь X  šъ YћЪц Zгф [єїлџ \1Ь ] Ўф `з№фй a),Ёдs c#&хрџ d~р e-0Зб f!$?м g'*Wч hЋы i36›Ь j@C;г mГп nLOіЫ pFIiЯT q9=тб rъэ•з sлсб tфчЇр uдзcЫ v№ѓAу w§жђ zЧаvз {  2ю }:а ~іњЏю „ Ÿ єс †Š – _б ‰+ B ЌЯT ‹6 \ Qъ ж ф ЏвT   О їю ‘Ђ А …Ъ “Z h ђ •  Kё ˜_ i ЩЮT šє ќ с œџ  Rь Ÿч ё ах ЁР Ш xЮT ЃЫ г s№ ІГ Н јл Љ› ž шЯ ЌС Ы Ри Џk ‰ iуџ В ( э Еѓ § Бт ЗŒ ” що Й ( АЭT Л+ 3 Зу О  wю РЮ № й У– ™ •щ Х  rч ЩF V дe Ьl  г) Э™  ны ЮtwKз Яekюк аnqЎк б^aк вz}У№ г‡ŠФдc ж/Znж з“ŸТр й;х ꈄєц лЬвŸх мЃГс п•фь рЖЩ=в у‡Œ5кџ х˜ щдa чБ Э )Ъ ъ":5т ю№§ ЮT ђ о ішэŠи љJN}ё њ$(пщ ќи л Ћѓ ў(.aн !Yа flYа otYа Qctц Šœэн NR р Ua‚т +/Хъ duАе x‡nя AKWш #2>о & Xђ *Xђ -ша /Ђ Щ =б 2?ZZх 4ŸтМЫ 6ћЌё 8о і ч :хјТгd <Љ Ў чгf >wœYЬ Aac‰кџ Cљ z љэ F\_кш H} І Шя L1;Uю OОщ Q=G­л Sа ў hы V9р X!%Бм ^ŸМё aОхЊђ bЬ е ж cУЦж dДК.ђ eНРвп f­Аoд_ gЩЬAЯT hжйІЩ kЂЉtпџ lтхСь nмп`г) oЯгiм q5EWй tK o вл ut y х w")н x2 5 Cф y8 ; я |mе ~џg •Ы €Ж  ™э ‚—ќюф „j } УЬ ˆ} „ Щк ‰ . mф ‹“  CЫ ,2Jя [kЃч ‘HYgэ “> H ‚Щ –€  /ь ˜  Г №ж ›‰”іъ žmx%ѓ ЂЌОžю ЃXлƒrтщшзММЬЬЬЫЩюЩЌЪйЬˆЯММЬЬЬЫЩюЩЌЪйЬˆЯƒБйŽЂƒШМƒМЬМ Ы$ЫMЌЪаЯйЌЪоЫйЌЪ?чƒЌЪNщbщй€ƒƒˆйƒQЪйGеƒнмїЬ~ШъэММЬЬЬЫЩюЩЌЪйЬˆЯММЬЬЬЫЩюЩЌЪйЬˆЯММЬЬЬЫЩюЩЌЪйЬˆЯММЬЬЬЫЩюЩЌЪйЬˆЯƒиюЪТrР Ы#тƒРƒƒбžбЌЪаЯЌЪоЫЌЪгвЌЪ?чЌЪЬЪЌЪдƒюЩЎоƒћЮƒ5сƒюЩ„ьƒцƒЉЮƒюЩЅ№йИ$мƒюЩаƒюЩѕиƒюЩšуƒюЩFэƒьтƒ пƒцЭƒюЩюуЌЪ˜еƒИBйЌЪ–фƒƒбˆйžбƒNдЪТММЬЬЬЫЩюЩЌЪйЬˆЯƒƒАсХсссƒjвюЩƒUкй еЬQЪkЪƒ8ЮWЮнмƒ8ЮWЮœШƒ8ЮЎоЬоЋи$Ы•аМъъйгѓнЉнxа$ЫШаЗаxа$Ы•аЗаxадаЗасе$ЫЂцсенмЗасеœШЗасе9СЗасеœШЗасежЗасе/РЗасе‹шЗаƒVоjоƒœШђ‘ђƒœШђrРй=ОКЌЪаЯЌЪоЫЌЪгвЌЪ?чЌЪЬЪЌЪдйЬƒЬЌЪ˜еƒЬ юЌЪ–фƒюя№!№йƒбœШйžбƒ ей#т–ый^рƒнмїЬ~ШќмЋиƒнм~ШММЬЬЬЫЩюЩЌЪйЬˆЯйžбƒˆйБйƒŽЂМƒ Ы#тЌЪ˜еЌЪЬڍژеЌЪ˜еƒїЬЭ:ЭƒЌЪ–фй€йœШƒžбƒˆйƒёН ОƒШƒз,зƒы:ыМ1ѓGѓbѓXлє PPCє TT1є SSЛ JJє RR ѕ !&Mѕ бж*ѕ йрює ).Tє ЗОTє ЩЮTє СЦTє \Дiѕ уњСє §М & ƒАєєєй€йрєЂѕ Ћѕ SБ BTЬЋ l~Іі –ЈЌі ї Ві Oaгі ew5ї сѓшї \n/ј gј *—ј .@Хј DVбЋ ‚”ї Zlтї p‚)ј †˜aј œЎ‘ј ВФПј Шк$љ о№*љ єLљ  ' жЋ ˜ЊќЋ ЎРNЌ ФжXЌ кь|Ќ №ЩЌ ­ .­ 2DaБ XjIЌ HZSЌ !_qwЌ "ЉЛФЌ #Пб­ $еч­ %ы§7­ &FXŠ­ '\nн­ (ЃЕЎ )ЙЫ=В *n€ўЌ +Яс ­ ,Ÿ2­ -ЃЕ…­ .“Ѕи­ /ЉЛ§­ 0Пб8Ў 1няЎ 2€ ’ œЎ 3– Ј ЋЎ 4a s PВ 5ŸБг­ 6Ї Й ј­ 7ё  3Ў 8  ˆЎ 9г х —Ў :щ ћ ІЎ ;џ ЕЎ <'Џ =+=/Џ >AS>Џ ?•ЇДВ @ЕЧ’Ў AЋНЁЎ BСгАЎ C  Џ DЋН*Џ E§9Џ F%uЏ G);ЯЏ H?Q<А IUgЈА JYkєВ KЫн%Џ Lo4Џ M…—pЏ N›­ЪЏ OБУ7А PЧйЃА Qня4Б Rѓ\Б S фБ T1KВ U5GgГ Vсѓ2А WK]žА Xas/Б Yw‰WБ ZŸпБ [ЃЕFВ \ЙЫЏВ ]ЯсжВ ^хїbГ _ћ kГ `#pГ aї кБ b'9AВ c=O0E dSe5E ei{hE f‘МE g•ЇсE hЋНыE iСг+F jзщ_F kэџtГ lVhcE mЗE n+мE oРвцE p-&F q1C0F rGYdF sЅЗiF tђnF uˆšсF v€’Л v ‹+ wН У o> xЋ К Ћї {Ё Ј СE |‡Rљ }q~й €;B  “  џ ƒY h т. …t  . ‡‚ Š K8 ˆk q Ч$ ‹G J К N U Ж: Žвиќ$ ЋЯe ’u|бџ “'-N ”$Y —žЅШљ ˜єњр; ™шыя џ œтхюї žюёп% Ÿћ !"?  я ђ Г W Ѓщ ь W3 Ѕѕ ј ь2 ІSY†H ЇGJф ЊADB ЌMP˜ ­'"-"; Ў""& џ Б""н? Г!"$"я& ДЖМ 6 ЕЊ­C ИЄЇcџ КАГо1 Л’˜Ь ! М†‰ˆ= П€ƒFЈ СŒ4"џ Телˆ УЩЬsF ЦУЦТ ШЯвZ@ Щзнmј ЪЫЮч ЭХШ$! ЯбдБ аsyЈ2 бgjЇ дadС< жmpE9 зTZ/ иHKt8 лBEj5 нNQpќ о—њ п‹Žъ т…ˆ‰ ф‘”Н" хš ^H цŽ‘$* щˆ‹С= ы”—Ÿ ьx~"A эlo…I №fit% ђruE5 ѓY_]' єMPЧ) їGJ%= љSV!8 њџ ћ Ж' ў  " іќЖџ ъэv фчЫ №ѓiC 5;Ў! ),"џ #&)ў /2Ш м т 5ј а г 3 Ъ Э = ж й К; ИОa? ЌЏD& ІЉ ВЕџ "(џ%  э !ьѓR "ћ  Ѓ6 %ц ъ  'э ё  )є ј Ђћ *‹‘ ,SbNќ .p{ў0 0~ˆƒ& 1em˜> 4?BДB 6FOw 7p#v#r А 8i#m#6+ ;_#f#L <•#›#‰ 5 =Ž#’#]њ @„#‹#D AB H P C ! šџ E, 5 Ц. G8 ? 7@ H$ ) - K  п9 M  2  NЭгјќ P•Є = RВН7 TРЪ< UЇЏ' X„е& Zˆ‘{: [gmpў \`d$$ _V]я6 ` # z c Ј e  Ј g   h28Л i!/‚/ lT< mBH†ћ n;?AH q18e6 rЊ@ tыјс§ v o$ xъ ” yћœ9 |кн$ќ ~сч  ""ў а!п! ƒэ!ј!h. …ћ!"я †т!ъ!зB ‰М!П!W  ‹У!Ь! Œtz - Ž<K+ Ydд@ ’gq? C њF @F J њF B8 < @ Ci"o"у D["`"+ GU"X"—) Ic"f"›E Jшю1/ LЎП# NЬйе7 Pмхƒ QТЩS T˜žГ VЂЊМ7 WП Х Ћ XЋ М ю [u | P \М Т u! ^Ё Є u! `› ž u! b• ˜ u! e ’ Й x gЕ Й Й ] iЎ В Й џ kЇ Ћ Њ l lі ќ ъ nЯ в ъџ pе и ъ rл о ъ uЩ Ь ьD wс х ьD yш ь ьD {я ѓ ; |:@н } 7А, €їўЭќ ио™. ƒЄГ ї …ПЪC$ ‡ЭеЎF ˆЖМС ‹•RЊ ™ Y* Ž… ‹ h Q ` 1' ’l w ж ”z ‚ Г Ј •c i Y ˜? B 39 šF M џ ›ƒ‰% œq€z ŸQX3  ;AД§ Ё(8Ыјџ Є%ь Ѕ2 8 ЦD І /  Љц э Э Њ7=№- ­!&7 Џ047 Б)-( Вщя1( Гдц#& Жˆl Зš к Иz—X§ ЛDK6 МШЮ§' НИХ Р‚‰2 СP Т <7 Х • Ца ж Kџ ЧМ Э  џ Ъœ Ѓ w( Ы„ŠX" Ьt ЯT[5 а"‘: г   е  зи иљџЫ ' йфіwB м˜ŸБ0 н'-Фz о $Љџ с) џ тnt! уgkw@ ц]dM ч` f  ъZ ] , ыEK)) ь>Bж( я4;Э3 №  ` ђо э  єљ  ћ і  O> ї№ і € њЬ Я 0Ф ќг к ~ §›Ёй ў.˜;ї NUG: K#Q# #"#> 0#;#[џ >#H#ј! %#-#+ћ џ"#№E ##Є ђ"ј"Д? В"У"э* г"р"ƒї у"я"ђ7 Ц"а"№ œ"Ÿ"чѕ Ѓ"Ў"c= ‡лћ \~G ‡# !!r "§# % “ &ЎД­+ 'ƒЋ0 *7> +Љ Џ tљ .” ˜ g7 0› Ÿ g7 2Ђ І H 3„, 4њўќ 7№їЦ 8иоБџ 9беР  <ЧЮќ9 =MS9 @<C_  BFJГ C_ e e DX \ г0 GN U Js H6 < Ы I/ 3 Ќ& L% , Ѓџ M \ї Nђ 26 Qвй; RэѓЈ• Sжъt VŠ‘?2 W"•"Rі Xˆ"Œ"и [~"…"a# \{ 1 ]tx% `jq: aѕћF% cЛЬБ1 eйц% gщђM1 hЯж4G kЇЋІџ mЏЗцG nЖ o O/ rŽ? t ў u‹‘Ї v]ˆk9 yKRцџ zъ№ў }ейў учў мрJ ‚‚ ˆ Q …m q mE ‡t x mE ‰{  ќ Š-3]- ‹ *Т6 Ž”›њ4 ™ŸМG ‘eti< “€‹э• •Ž–l0 –w}ц  ™QVЦ- ›Zaн œчэ0џ žГТэ  ЮйO( Ђмфё+ ЃХЫl4 ІŸЄI Љ ЈЈЏœ ЉDJйі Ћ ?. ­(5Шџ Џ8A1 А%Нў Гєњ  Еў… Жіќa, ИОЭџ Клц) Мщѓ:E Наи вѕњџ P дў е: @  ж* 7 (њ й  = W кLRі 5 мтџГ8 о3š р6Iсџ с€ фНФ*C цШо| ч!х3 ш’< ычюx) ьЯеьњ эКЬn №šЁ†2 ёНУ/§ ђЖКqD ѕЌГ Џ і˜ › Ќ ї25і јWoЅ" љ˜~ њнцр ћV#Y#'- ќ{#~#7 §MPe ўјћцF џ&+Д$ пьж+ Й Т B' ЅЉЕ Ыаš M P šB Xd?, ІЏs –šщљ j o  уё_  FKG h2 л р У |‚П% -> y|Иі є§RA ‘ – ы5 KNŸ' Œ’й4  К PWЈD '.ї, &HH0 і в5 ›7 1‚і уъ ЙСќ= 16Ё#   ™( A H фC ШЬо" !„ж "t"x"Гџ #^d 5 $8E˜$ %†ŽI? &rw* '  H (ксW!. )Œ”™; *ЂІКККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККК ƒ‘#Ђ# ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ƒ‘#Ђ# "%‘#Ђ#ј(. "%‘#Ђ#}3(. "%‘#Ђ#Ь(. "%‘#Ђ#@(. "%‘#Ђ#ˆџ(. "%‘#Ђ#o(. "%‘#Ђ#ь(. "%‘#Ђ#G!(. "%‘#Ђ#№<(. "%‘#Ђ#–5(. "%‘#Ђ#Џ(. "%‘#Ђ#ш=(. "%‘#Ђ#Ѓ%(. "%‘#Ђ#P=(. "%‘#Ђ#3(. "%‘#Ђ#ѕ(. "%‘#Ђ#Vў(. "%‘#Ђ#h(. "%‘#Ђ#@(. ƒ‘#Ђ# ‘#Ђ#ч1Ѕ" ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ‘#Ђ#ЬЅ"Ьч1 ƒ‘#Ђ# ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ "%‘#Ђ#P=(. 1Ђ(‘#Ђ#‘( Ђ( 1 ‘( "%‘#Ђ#c(. ƒ‘#Ђ# ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ƒ‘#Ђ# ‘#Ђ# ƒ‘#Ђ# ‘#Ђ#E Ђ(E ‘(E }(E e( ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ‘#Ђ#œA‘(œAЂ(œA}(œAe( ƒ‘#Ђ# ƒ‘#Ђ# ‘#Ђ#1‘(Ђ(G‘(G1GЂ( "%‘#Ђ#И)(. ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# 1‘(Ђ(‘#Ђ#с 1с ‘(с Ђ( Ђ(‘(1‘#Ђ#EЂ(E‘(E1 ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ‘#Ђ#*7‘(*7Ђ( ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ‘#Ђ#Ÿ ‘(Ÿ Ђ( ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ‘#Ђ# ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ‘#Ђ#†7ч1†7Ѕ" ƒ‘#Ђ# ƒ‘#Ђ# ‘#Ђ#ƒ Ѕ" ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ "%‘#Ђ#c(. ƒ‘#Ђ# ‘#Ђ#Њў‘(ЊўЂ( ‘#Ђ#‰Eч1‰EЅ" ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ#ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"Ђѕ ЛБ <Љъ лс Ѕъ UxЈ| ™Иb‰ ЛиќЗ {–;^ #1яx 5QžR ч+э+Щoe R+i+їz {+М+pІъ П+ф+%z l+x+ О  ++@c +N+šh oъ ѓј§‹ э№=S !ћў№Џ " Uq  $ЎПвЁъ &Эь;i (я!gџ )ТЪmw ,ˆ‹№žъ .ЊИЏ /ќ*+з^ 1-*X*РЉъ 3y*Ц*иk 5Щ*љ*-T 6[*v*Iv 9м)у)Vr  ;ч))*EJ <j1p1зe >11ћc @#1L1l BO1g1›s_ C1 1ЁД Fб0з0F‰ Hл01ЊЉъ I “ ОЈъ KY h иx Mt  ЈЄъ O‚ Š €О Pk q бL SG J œ˜ъ UN U O V: @ VІъ Xј V Z ) Y“ъ \, 7 “J ]  “~ `тцqnI bъєlъ cелЕ‰ eЂЏЃъ gЛЦ’\џ iЩвљ} jВИ[R mŽ‘tz o•žЫ•ъ pџ;‘ъ qѓіvV tэ№XO vљќšM wdjiS xX[4[ {RU† }^a@Єъ ~ЂЈ9ъ –™Ђ ‚“]žъ „œŸqЏ …?ERa †36ѕ` ‰-0J ‹9<&j ŒЄЊњšъ ˜›7Ќъ ’•GK ’žЁši “ƒ‰jmu ”wzf~ —qtœЌъ ™}€b] š$*S–ъ ›‹Ѓъ žЖ“ъ  !Pъ Ё$GЊъ ЂЙI Ѕ [ ЇЇŒъ Јрц+“ъ Љдзу| ЌЮб7Н ЎкнЮžъ ЏСЧ”‘ъ АЕИгlc ГЏВNˆ ЕЛОб€ Ж &Єœъ З Єъ К] М~U НрцЗU Одзђu_ СЮбњЋъ УкнЎ’ъ Фflј ХZ]єƒ ШTWѕД Ъ`cvv Ы^d˜r_ ЬRU/V ЯLO_”ъ бX[uМ в…‹$Ѕъ гy|ПО жsvп‰ и‚; йJ%P%{ лќ$ %ф›ъ н%4%hџ п7%G%%™ъ р%%p•ъ ум$п$—O ху$ј$ГJ ц!'є[ шсєsqe ъ’c ьК–ъ эїџ v №Эар… ђдн‘qN ѓ‚ˆіъ ѕ1Dp: їSlЖQ љo>К њGP_Ёъ §=R џ-I‡ Я$е$ГЕ U$n$“l( $Ў$lЄъ Б$Ь$ q$~${o# "$'$f‡ +$Q$№Іъ в"и"Œ} š"Љ"yJ З"Т"ё™ъ Х"Я"™–ъ Ќ"Д"Rps †"‰"Њъ "–"}M ) / П І Ч ќ‘ъ ч  Kdџ  & [„ !Ъ ф ^‚ $~  S—ъ &… Ђ œъ 'š –Ў )J_5Q +s„(З -‡—\g .bp!Р 1.38M 37F}А 4ї1§1yx 6 1Б1 ` 8П1о1–ъ :с1є1Гw ;Д1М1Єe >w1}1ЮІъ @1œ1‹‚ A† Œ S CM \ Sъ Ei v ИX Gy ƒ C~ H_ f ?sP K6 ; ‚Žъ M? I Ъˆ Nq w гП PC P яŒъ R[ d ` Tg n _c US X Їъ X2 5 :ud Z9 ? •W [к р L]џ ]І Е лw _С Ь И aЯ з Ф… bИ О œЊъ e“ — Н‡ g› Ђ аY h0#6#Ўžъ jѕ"#ЁВ l##Э’ъ n"#-#пt o##вЕ rп"т"фЎ tц"ё"B•ъ uщ'я'$} wЉ'К'vK yЪ'з'%„ {к'ц'Ёf$ |Н'Ч'ѓe “'–'_J š'Ѕ'Ю”ъ ‚ РВ „кыЏЂъ †ћK ˆ _b ‰юјЏk ŒФЧ>„ ŽЫж‹К Љ2Џ2 x ‘:2M2хŸъ “\2‰2їnI •Œ2І2AА –P2Y2ЎП ™2 2bА ›262V œЯ е x’ъ ž‘ Ђ уК  Б О ^ ЂС Ь r—ъ ЃЅ Ў ќъ І{  i Јƒ  іВ Љ™.Ÿ.еЙ ЋK.Z.2e ­g.‚.!s  Џ….–.:˜ъ А].d.‡Б Г(.+.8N Е/.G.Ј… Жx~ŠЄъ И->0X КLcr† Мfu_˜ъ НAIЏ] Р™Y Т)в† У.!.“[ ХІ-Н-œP ЧЮ-ћ-žŠ Щў-.Šk ЪР-Ы-ШГ Эs-x-јъ Я|-Ђ-oY аp6v6 U вя56‹f д,6M6Gžъ жP6m6Ęъ з6)6ьН кФ5Ш5а ъ мЬ5ы5˜ъ н†'Œ'ЪŸъ п'7'ž›ъ сO'j'Eb уm'ƒ'л‘ъ ф:'L'<Г чљ&§&еЏ щ''uC ъGMЛR ь ЮŒъ ю-8ў‚ №;DТmN ё#* єўэ і  А ї5 5ЮЃъ љž4Г4&А ћХ4і4˜w §љ45{‰ ўЖ4Т4,Е c4i4фW m4š4Кx y""Ї} s"v"Й ъ БЗОъ k~:p ž7Б ЁЎВ ŒС—ъ TW~a [gЩri бз>‚ f{<Л ŒГч ъ ЖЮ Y ~‰Д 9<|Ќъ !@b me "f"l"ƒN $6"C"Ыœъ &O"X"TЉъ (["c"Ю{ )F"L"џœъ ,$"'"уy .+"2"Јъ /]cаJ 1љК 3'D_M 5GZЖ 6$А 9осгuN ;х§šX <Џ(Е(r“ъ >+(F(’ъ @\(‹(S BŽ(Ќ(LW CI(Y(џ… Fі'њ'‰g Hў''(яJ IsyЋZ K;JЗYџ MXcшЂъ Ofpщ”ъ PMUщА S'* Їъ U.7‰ VёїI| XЛЪd Zзтƒ˜ъ \хюЈъ ]ЭдWВ `ЇЋ„›ъ bЏЗЯК c1 7 =ъ eћ ДМ g " Хz i% . /d j  чБ mч ы 6W oя ї Џ pЭгH”ъ r—Є‰I tАН‡ vРЪЯЌъ wЇ­b z€„Eg |ˆ“№K }'-"h ёўƒ­ъ  3| ƒ$ke „&P ‡ко'К ‰тэ’Œ Ё‡є­ъ ŒKXТ_ ŽdqZ•ъ t~ƒ` ‘[aН ”48‚–ъ –<Gг‡ —лсCtN ™ЅВ9Z ›ОЫръ ЮигK žЕЛ.Й ЁŽ’я† Ѓ–ЁCP Є5;жЈъ Іџ ˜ƒ Ј%Іъ Њ(2ЁЈъ ЋС`џ Ўшьо` А№ћb€ Бh&n&gu  Г&&&Tw Е3&P&…З ЗS&e&‚ И)&0& Й Лё%ѕ%0Ÿъ Нљ%&ДБ О{к] Р7JjЅъ ТZi%x ФlxхT ХMW šъ Ш!$3l  Ъ(3П ЫФ0Ъ0…| ЭŽ00–Џ ЯЊ0Е0c| бИ0С0*Š в 0Ї0 Й е{0~0yЊъ з‚0Š0„Y и•с кYfžМ мrъъ о‚Œ#c пioЗЊъ тBFZЏ фJUЊmc х#ŸI чЕШ.K щиџК ыМŠ ьЫе`` я…Šё{ ёŽБуМ ђ‘—L єCXMX іk|7–ъ јŽЮ™ъ љ[hђH ќ*-(€ ў1? y џ_ Кг…‡ щўЁb oŒ жц“ъ žЁ*Њъ ЅЖLъ I/O/@Ћъ г.ю.ŸŽъ /*/№L -/F/дЊъ ё./Y} І.Ћ.1—ъ Џ.Я.^ …žъ svАcџ mp)kџ y|”Г 0!0!В "‰/Ќ/OZ $Ч/і/žue &љ/0ќM 'Џ/Ф/ŠT *V/[/в~ ,_/…/K‹ -УЩC ъ .ЗКМ 1БД^^ 3НРh… 4n0t0ts 6:0I0rЕ 8U0`0wp{ :c0k09Јъ ;L0R0^L >(0+0{ъ @/060uR A33щЅъ Cд2с2&Ж Eь23J… G333O Hф2щ2Рh KЖ2К25w MО2а2ЇŸъ N‡Lœъ PM\ъ Rhs:L Tv~ Б U_ehj X;>Л ZBIŽІъ [.4•Ж ]њ e _ ъЃъ a#+&ъ b ‹ъ eшыk gяіˆe hf-l-Џ jё,-pЉъ l-D-Б{ nG-c-ё€ o--mƒ rК,Н,Тъ tС,э,id uE€ wБТ Ў yаыŽmP {юџЛ\ |ХЭDƒ ’ˆ™ъ –­Ж~ ‚­,Г,АІъ „0,E,Яdџ †V,‰,J™ъ ˆŒ,Њ,‘ъ ‰H,S,kЎ Œє+њ+Н‘ъ Žў+,,ƒ `f_Ѓъ RWПM “LOhln •Z]X –Ш!Ю!m­ъ ˜•!Ђ!Еˆ šЎ!Й!RT œМ!Х!;_ Ѕ!Ћ!Нъ  !„!Ы Ђˆ!‘!фZ Ѓ‚ˆ™ъ Ѕ?NыИ ЇZoгQ ЉrНЎ ЊQWtf ­#&%П Џ*;™­ъ Аpv~Н В<KЌ”ъ ДWbry Жem6\џ ЗNTо\џ К*-gT М18Иpe НЃ Љ oN Пe v Zt С… ’ Z У•   ‰ Фy ‚ ГS ЧP S žЗ ЩW a L Ъ_e;’ъ Ь.нВ Ю>M j аP\(Ђъ б1;ЉW дэh ж U{ з’ъ йтё—ъ л§9hџ н яv оєњоЉъ сагНb узоЩМ фЗ5Н5h›ъ цL5g5>} ш~5›5ЌИ ъž5Д5яЁъ ыj5{5zВ ю'5,5~i №05H5•S ёУЩ2a ѓžІъ ѕЊЕ%m  їИРDmN јЁЇѓQ ћ}€ ‹ §„‹Peџ ўn t Љъ  1 ўМ C Z .… ] k 'Ў 4 @ Г ў  кz   #Їъ ,2 Јъ кёqœъ ћ_ ),‹ єў4{ ОУ5ˆ Чж6О EKб˜ъ 7<ЁН 14EД ?Bт„ љ џ bŽъ !Г Ц lъ #з ц иnA %щ і W_џ &Щ д ЖO )œ Ÿ Ыqi +Ѓ Џ ЛЛ ,РЦіkџ .zP 0ž­ъ 2АНю•ъ 3›вj 6cf1И 8jvЁъ 9V\: ;+^Їъ =9FXo_ ?ISJz @.6лЛ C :Їъ E хO F$$œъ H#š#§p_ JЎ#ы#Р Lю#$і^ M#Ћ#tŸъ P=#B#Сf RF#}#… STZВa UКP W)@e‘ъ YCQl Z&эЈъ ]ыямŠ _ѓХZџ `юєc bЄ|P dЕд˜ъ fзыгЋъ gЇВiX jjmL­ъ lq‹—Ћъ mСЧHЂъ o’[Л qЂЏt{ sВОќЊъ t•ŸыqB wknъЖ yr}ŠЁъ zЯ)е)ПЄъ |)3)Щъ ~J)›)?` €ž)Ь) | 6)G)_\ „М(Ф(С| †Ш() Wџ ‡?EX ˆ16}_ ‹+.†ˆ 9<рU Žь&ђ&7Џ ›&Њ&Эv ’З&д&q[ ”з&щ&†Ђъ •­&Д&-Žъ ˜u&y&І‚ š}&—&FП ›_eЩЅъ  "SЕ Ÿ6Iеƒ ЁL\[Q Ђ%3DЖ Ѕ№є1Y ЇјНy ЈпхЊЁъ ЊˆŸK ЌГШЎƒ ЎЫм•ъ ЏЂА,f ВloЋK Дs„„Z Еф%ъ%”y Зx%•%Їd ЙЌ%Щ%‡šъ ЛЬ%с%ш‡ М˜%Љ%Yh ПW%Z%ѕˆ С^%t%ОN Тt!z!ь’ъ Ф4!E! •ъ ЦU!b!%uO Шe!q!и[ ЩH!R!?I Ь!!!fџ Ю%!0!ЈoN Яё ї „dџ бЏ Т #b гб р кЗ еу ю Iy жХ Ю шoG йš  urn лЁ Ћ $y м‚ˆžz о-дšъ рIdВ[ тgŽъ у0F­ъ цьяM шѓ п–ъ щйпщP ыŸАaГ эНЪhs_ яЭжчrI №ГКz€ ѓŒ— ѕ“›˜Л іŠ]џ јЎЩщV њтљиъ ќќžЅъ §ЬпЗi ’иpR –ЊЎnI ЙЖ њўЖ‹ №їsЖ  • (ъ S d rW r  тŽъ ‚ Œ vЙ g o nB > B XP F O 7U јўI ДЧ‹nT зцьd щѕюYџ Ъд‚ ъ žЁ•ъ !ЅА U "V4\4дX$ $3І3ЬWџ &Ф34Бъ (4S4ЪА )Љ3С3Ѓ„ ,!3*3.† ..3}3уfџ /‘—зъ 1M`ЩV 3pYx 5‚ŽwŠ 6cmЁj 97:žО ;>IвN <*0ЏV >цљ=Іъ @ Oj B'kf Cќ T FагEЃъ HзтЁ‡ IЗНQY Kwˆiџ M˜ЅK›ъ OЈДЧИ P‹•ЄК Sadˆ UhsšQ V% + bО Xя ў ЫЂъ Z  №iџ \ " оbџ ]  dП `м п ­q{ bу ы Q cC I —aџ e  №w g& 3 РЗ i6 @ g™ъ j # Џšъ mіњЃъ oў ѕГ p!!€„ rЧ м Бl tэ ў сЇъ v!!Ѕ™ъ wп ъ bЋъ zА Г ьЌъ |З У € }"""R ч!є!єЙ " ")~ ƒ ""JЎ „ї!§!YU ‡е!и!‰œъ ‰м!у!KЙ Šоф‡ ŒžБИ›ъ ŽПЮWN бл<Œ ‘ДМџ“ъ ”ˆШД –‘šъN —"(OБ ˜Нsi ›(Ёъ ƒ‹ žGMК­ъ Ÿ@DSИ Ђ6=Ф„ Ѓ#)vE Ѕчіт—ъ Ї‚b ЉXi ЊљZI ­гз# ъ Џлуt Аущ'œъ ВЉЖцS ДСв’“ъ ЖерG† ЗЙОЉg К“3oE М—Ѕ{te Н тaџ ПРЯи_ Смёж} УєJŸъ ФвйNЗ ЧЃІSŠ ЩЊМ*›ъ Ъ{NnD Ь0AŸъ ЮOfтg аixсЄъ бDLЩ‚ дdšъ ж,РŽъ з–œнR й)>\ лPwU’ъ нz“wД оAMqA сћўџŸъ у%”ъ фЦЬw ц…–ъ шЅД N ъЗУz ы™Ђъm юlqg №uTЅъ ёщячœъ ѓГРЂъ ѕЬйЪЇъ їмцэX јУЩ›x ћœ Q §ЄЏbК ўфъ—ъ џ-0 ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ "%‘#Ђ#c(. ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ "%‘#Ђ#O(. "%‘#Ђ#К†(. "%‘#Ђ#ž(. "%‘#Ђ#-J(. "%‘#Ђ# (. "%‘#Ђ#ПЌ(. "%‘#Ђ#ф“(. "%‘#Ђ#с (. "%‘#Ђ#dН(. "%‘#Ђ#vˆ(. "%‘#Ђ#9](. "%‘#Ђ#"Ќ(. "%‘#Ђ#Е(. "%‘#Ђ#”(. "%‘#Ђ#Š(. ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ "%‘#Ђ#[k(. ŽЂƒ#"й#"& ‘#Ђ#й€ "%‘#Ђ#œ^(. ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ "%‘#Ђ#c(. ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ "%‘#Ђ#И)(. ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ "%‘#Ђ#c(. ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ "%‘#Ђ#P=(. ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ђ"ђ"ƒР њњР ўўzР јјо ќќв §§œР Л ђђєХ "њС   |Щ %БFЯ| orFЯ `lВЩ ƒ†ВЩ u€`Ъ KW`Ъ Z]”в( ДП”в ТХ1Т уц1Т ер Т !ЁЄ Т $–žэУџ ' /эУ )25.Ш +SV.Ш .EP Х 0   Хџ 3њQЧ 6і QЧ 8TС :#&TС = „Ъ ?№ѓ„Ъ BцэЧ EхёЧ GєїtУ J tУ L#&œдA NDGœд Q6AЦ T Ц V ­Ф XЄЇ­Ф [’ЁЩ ]ЮбЩ `МЫ‘Т bz}‘Т ekw•Ю h5A•Ю jDG.Ы l—š.Ы o{”С qЏВС tЌЮЦ wkrЮЦ yuxмЫ |AGмЫ ~JMъе" €ЎБъе ƒ Ћ Э … Э ˆ‚ŠCЮ  ŠжйCЮ ЧгЙЧ ЙЧ ’ю§вУ ”JOoаЁ —W_oа ™be\г ›џ\гA žёќжвq Ёжв4 Ѓњд› ІмшњдГ ЈыюЮЬ Њ46ЮЬ ­+1ЉС А9CЉС ВFH гЦ Е# гЁ З&(nШ ЙЏБnШ МЇЌBЬ ПШЭBЬ СавˆЯd У‘“ˆЯщ Ц‰ŽЊР ШЊР ЫЃХ Э@BЃХ а8=фа­ гщђфа еѕїїг зЏБїг к ЌmЦ нГПmЦ пСУ“Ь тŒ˜“Ь ф›ўЭ цртўЭ щдндТ ь дТ юЈг ё).Јг ѓ13•Ч ѕ•Ч јњ%з њ%з §€ŠNд ЊДNд ЗЙ#У Yc#У fhhж #-hж 02PФ OQPФ <LђЩ TcђЩ fhТШ 79ТШ )48бб pr8б hm{е "›{е№ %“˜1Х (uz1Х *}(в ,ТФ(в /ЕПТб} 2мцТб 4щыvЫ 6RTvЫ 9JOТж <ТЧТжф >ЪЬа AЯда CзйЫЪ FЕКЫЪ HНП#еП JД>[Ц LLЪ M§Я1ˆ OХдмЯ SХдмЯWЦдАб1L Yмуб ]мубaну3Я1” cжкўЮgзкўЮЌ kжкlе1 mf‰Nе qf‰Nеug‰нЭ1 wPd‹Э{Qd‹Э Pd**’)–,˜)œАсrРƒРƒ˜ЩƒjЯƒюЩџЦƒеЩƒюЩpПƒюЩWЮƒЎоƒюЩгЧƒИвƒTТƒюЩqТƒ„ьƒюЩќХƒюЩ/ФƒФƒQШƒюЩЉЮƒЅ№ƒюЩ}Сƒ–СsИƒvЧƒxСƒ–С˜Йƒаƒ–СЉЪƒюЩЙМƒ8ЧƒюЩВУƒ–УƒОдƒюЩкдƒюЩѕиƒ:ЦƒаФƒ–СэФƒAЩƒюЩ]ЩƒšуƒюЩДТƒюЩлЮƒЛЮƒUЫƒюЩ/Тƒ4СƒюЩЧУƒ–СѕЦƒFэƒюЩ ЬƒЬƒжƒюЩ>жƒ8ЭƒюЩ`ЭƒoЮƒюЩ€ЧƒуЧƒюЩШƒ–СƒюЩНаƒ™аƒ…гƒюЩЏФƒюЩ­ХƒўвƒюЩФƒюуйК†йуРяЬйуРрСйЩСйуРAгйрЙйШйуРЇШйуРyЬйbЬйЉЯйуРСЯйЫРйуРѓРйУХйуРкХйуРбйбйдйІЦ2дйІЦГЦйŽЦйІЦіОйЕЬйЮйуР-ЮйуР УйѓТйуРнгйЧгйўМйуРщИйEзйуР\зйуРƒдйmдйуРZУйCУйуРЅжй‹жйtФйуРФйуР/ЪйЪйцШйуРЩйZбйуРsбйЅейуРЦейуР~Хй\ХйQвйуРqвйуРвйщбйЫйуРЛЫйуРзйшжйуРPай4айуРЫйёЪй:ей€эЭйЊЭОЭ ЯйЊЭОЭ ЯэЭйЊЭОЭ ЯйЊЭОЭ ЯэЭйЊЭОЭ ЯйЊЭОЭ ЯэЭйЊЭОЭаЭйЊЭОЭаЭэЭйЊЭОЭаЭйЊЭОЭаЭз Ћѕ SБ '9ЬЋ  ' бЋ + = жЋ A S aБ =O=В UgPВ k}ДВ †˜єВ œЎgГ ВФpГ ШкtГ џ  Л Aп %sи с  \ь ѓм /5Ыт (,Zм %eя ›ЁIр €˜Им JQ<ъ FL}к "}к "%(}к $+.}к 'kф )?Ckф +15kф -8<Уш .Ѓ Љ Kщ 0) F ›р 2a ‚ ч 4…   ќх 5I ^ }ш 8  ‰я : % Єэ ;l r Ёо <V i и ?є ћ ук @П Х Эь B‹ š ]ю DІ Б №с FД М Tы G Ѓ Юю Jy | yу L€ ‡ ѓц Ml r ли O2 C ощ QP ] Ик S` i ›ь TF M nт W " ѓч Y& . р Z  Oц \о э 2ю ^љ  т `  ‡щ a№ і ы dЬ Я ир fг к 5ч g­ГЧп is„{ц k‘žJй mЁЊфу n‡Ž˜з q]c:и sgoты tЗНzн vƒ’Ју xžЉя zЌД„п {•›[о ~ot1ц €x п bhл ‚R_Ѓъ …#Џз †Aэ ˆКЯ+л Šоя‰ы Œђ§žш влvъ ЂЈХу ’ЌЖŽц “•›Ми •OdDк —s„fч ™‡’Nи šgpпо 7=ш ŸAK>ш  Ет ЂапЄй ЄэјЋц ІћIл Їтъ у ЊКПСл ЌУЬ8я ­елbк ЎМв>н БВЙdп ВЖ М Ÿс ЕА Г Iт Жяя Йћўй К“™œч Нˆл Оо ф ъ Си л Nх Т-3.о Х'*Йщ Цektр Ш#6kх ЪETљп ЬWbн Э9BЮй аШя вxй гѓљ†о дн№]й з{‚тц иKQо к$'о м03о о*-о с! к у6: к хDH к ч=AЈк шŒс ытцŒс эщьŒс яѕјŒс ёяђм ѓћџм ѕм ї  оэ јщя п ћЦЪэ §Эбэ џдиэ лпэ тцŒй §iс іњеч юєсн ЄЙТн Ъллъ оыЂя МЧQ№ ю ” Уф €†вс L[ѕэ grф u}‹ю ^dRш :=Фы !AHYн "PVdщ $+Рц &7BМэ (EM{э ).4'ь ,  ;у .кш /ГЙЙй 1rОх 3 №т 5ЃА`э 6„ŒЈл 9X[ўу ;_nEм <ЙП щ ?–š˜н AЋЏ˜н CЄЈ˜н EЁ˜н GВЖ^у H€†ъл JBSу Lbo0ф Nr}eл OV_ўы R,01х T4>Lя UЫ б Гр XУ Ш $и Y‰Јп \ux=с ^‚†=с `{ыз a о cжщхх eљ-к g 'м hьіЏю kРУ„ч mЧвц nhnРо qSWпф sZ^пф uaeЇы v Gч xжхXъ zёќэш |џ,№ }шю‘х €ФЧи ‚Ывлп ƒ*0*й …СмLф ‡ѕЬз ‰' х Šпђ‰м  ЃЃф ЇНОъ (щ ‘:Dќь ’щ ю вх “њъ ”ІЌзл •puКККККККККККК "%‘#Ђ#…ь(. ƒ‘#Ђ# ƒ‘#Ђ# Ђ(‘(1‘#Ђ#Œф1ŒфЂ(Œф‘( ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ‘#Ђ# ‘#Ђ# ‘#Ђ# ‘#Ђ# ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# Ђ(1‘(‘#Ђ#!кЂ(!к1!к‘( ‘#Ђ#Ђ(1‘(мЂ(м‘(м1 ‘#Ђ#/эЂ(/э‘(/э}(/эe( ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ‘#Ђ#Вн}(Вн‘(ВнЂ(Внe( ŽЂƒ#"й#"& ‘#Ђ#й€ ‘#Ђ# ‘#Ђ#XсЅ"Xсч1 ŽЂƒ#"й#"& ‘#Ђ#й€ ‘#Ђ#њфч1њфЅ" ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ђ"ђ"ђ"ђ"ђ"ђ"РE ——вВ ™™№, ››1є, ššЛ ‰ј \c і, шѕ  FДљ Гі, Lњ –ŸЩљ ЏЙі, ЂЌŒє J“Чѕ PSяј f—Лђ, VYЬі, JMЮї, нтф№, ьњгѓ, ќ&ё, !хщє, $šкЄј )6YЂё, *фч'њ +ъэЊѓ, -№ѓљ .ІЏˆѕ. /03ї, 2&)!і, 5+.­ї, 8УсGі, :ВРЏ№, <[^`ј = #bі, ?(ђ, B>ј, Fі<ї, J;><ї, L@Cёі, PЄѕ R§gѓ, U+љ W,8ђ, Y*жђ, _b|gє cКЫJѕ  j€ЗЮє oЯљє, p  рѕ qHHiљ2 qуљ r  иё, sFF€љ tЁЁ(6™јє ЦёƒюїјƒёёƒGёxёˆЯЌє љƒюїјƒёёƒљѓёƒGёxёˆЯ?єlђƒХјмјGёxёЦёљƒЦѓƒƒЬƒƒЬƒƒѕђ-ѓй€йа№ƒˆЯˆіˆЯOђlђˆЯєєѕ1ѕ їїїiїй її.їƒ‹ѓй‹ѓœѓМRљМІђйUкѕђ ѓ-ѓFѓйОЭѕђ-ѓˆЯjѕєє ѓѕFѓ1ѕˆЯОЭєєѕ1ѕXлXліљёёКР mmвХ nn„њХ kkЛє gg0§с o€”њХ ѓќФќс =zќХ @lћХ џ­ћХ э№ќХ ;@§с ISRќХ U^ыќс CGчњХ `c„ћХ ƒ8ЏњХ }}ЕњХ ~~ЛњХ iљ2Х СњХ †ˆm§с ыыЋќс qq/ћХ &ЎцжћХ *ЅЋ'ƒ9§S§ љƒ˜ќƒ$ќјƒёёƒљѓёƒGёxёƒˆЯ?є1ѕXлXлXлЯњˆ§Кй8ћOћVћmћtћ~ћйпћёћњћм§ъ SБ *<ЬЋ 2DІі   Ќі ‘ Ѓ Віс Ї Й гіс Н Я 5їс г х шїс щ ћ /јс џ  gјс );—јс РвХјс жшбЋ HZїс "4тїс 8J)јс N`aјс dv‘јс zŒПјс Ђ$љс ІИ*љV l~LљN ‚”шP ˜ЊжЋ ^pФс ЎРцс Фж1с кьT_ №|x тI .OC 2Dˆa HZЮ !k}ц "“ќЋ #t†vI $вфмc %hzIA &=O‚) '‹Ш (ЁГр )єј *BTN +•Їl ,ёŠ -NЌ .ŠœТ //к 0‡™ђ 1cu& 2y‹f 3Ё„ 4ЅЗ  5ЛЭJ 6буŠ 7чљЎ 8§XЌ 9 В` :%~ ;); <?QD =|!Ž!Ј ?Н!Я!ђ @г!х!i A"." B2"D"  CH"Z"|Ќ DЖШ~ E^"p"Ђ Ft"†"ь GЫ"н"c Hс"ѓ"{ Iї" # Jќ$%$ K%$%[ L(%:%š M>%P%9 NT%f%ЩЌ OЬо Pj%|% Q€%’%U R–%Ј%” SЌ%О%3 TТ%д%Q Uи%ъ%i VЮ&р& W8'J'ц XN'`'w Yd'v'­ Zтєџ [z'Œ'K \'Ђ'c ]І'И'{ ^™(Ћ(р _Џ(С(q `Х(з( aл(э("  bё()W  c))  d)/)­ eј к f3)E)k gI)[)‰ h**  iM+_+Q  j+Џ+i  kГ+Х+Ѓ  lЩ+л+а  mп+ё+ж  n§,-ї  o-%-aБ p@RIЌ q ŽA r)-;-д s?-Q-ь tU-g-  uk-}-Z v-“-x w—-Љ-е x­-П-> yУ-е-x zй-ы-œ {я-.SЌ |“ЅT }..r ~.-.Я _/q/8 €І/И/r М/Ю/– ‚в/ф/ц ƒш/њ/] „ў/0u …N0`0њ †d0v0wЌ ‡ЉЛl ˆz0Œ0 ‰0Ђ0р ŠІ0И0W ‹є01o Œ 11є  121 Žh1z1O ~11Ž Щ1л1љ ‘–3Ј3ФЌ ’Пбю “л3э3 ”%474I •;4M4ˆ –Q4c4ѓ —g4y4E ˜К4Ь4] ™а4т4u šц4ј4д ›…6—6e œ›6­6­ ечэ žр6ђ6? Ÿі67W   77o Ё_7q7Ю Ђu7‡7_ Ѓ‹77ƒ ЄЦ:и:ч Ѕм:ю:K  Іђ:;c  Ї;;­ Јы§Ш Љ;0;Y Њ4;F;} ЋJ;\;с Ќ8=J=E  ­У>е>]  Ўў@A7­ ЏŠ­ А)н­ Б-?Ў ВCU=В ГVhўЌ ДYk ­ Еo2­ Ж…—…­ З›­и­ ИБУ§­ ЙЧй8Ў КняЎ ЛѓœЎ М ЋЎ Н1PВ Оl~г­ П5Gј­ РK]3Ў СasˆЎ Тw‰—Ў УŸІЎ ФЃЕЕЎ Х7IЏ ЦM_/Џ Чcu>Џ Шy‹ДВ ЩФж’Ў ЪЁЁЎ ЫЅЗАЎ ЬЛЭ Џ Эбу*Џ Ючљ9Џ Я§uЏ а%ЯЏ б);<А в?QЈА гКЬєВ дкь%Џ еат4Џ жцјpЏ зќЪЏ и$7А й(:ЃА к>P4Б лTf\Б мj|фБ н€’KВ о–ЈgГ п№2А рЌОžА сТд/Б тиъWБ уюпБ фFВ х,ЏВ ц0BжВ чFXbГ ш\nkГ щr„pГ ъкБ ыˆšAВ ьžА0E эДЦ5E ю\ n hE яЋ Н МE №С г сE ёз щ ыE ђэ џ +F ѓ  _F є + tГ ѕ.cE і/ A ЗE їE W мE ј[ m цE љq ƒ &F њ‡ ™ 0F ћ Џ dF ќГ Х iF §Щ л nF ўп ё сF џѕ  Л џ ` ЙПf m„|t ”ЇC ЊЖьn ‡‘џ@ VZP ^i - 3 œp ! $ š    н- ' * СM ==т5  ==Ov ==L ==*E "B(BА‰ BB| BBј? !BBЏ& "й<п<е #Э<аBМT >ІAЌA5 ?šAAj B”A—Ac D AЃAl4 EB B6c FїAњAз[ IёAєAzM K§AB„A LфAъAН MиAлAq' PвAеAz* RоAсAтZ Sј<ў<ƒ2 Tь<яH Zѕ;ћ;Б2 [щ;ь;Ч ^у;ц;ё `я;ђ;A‚ aР@Ц@cH bД@З@mL eЎ@Б@\~ gК@Н@Еj h‡AA^N i{A~Aї luAxA7` nA„Aдd oЁ@Ї@\ p•@˜@оG s@’@§J u›@ž@іd v6@<@8n w*@-@š< z$@'@di |0@3@‹T }@@x‰ ~ @@б  @@5 ƒ@@e0 „Ы=б='v …П=Т=$ўъ ˆЙ=М=Su ŠХ=Ш=цl ‹ХAЫAЊ+ ŒЙAМAFa ГAЖA,L ‘ПAТAeP ’КРŽ. “]ЗС: –ahE —™)Ÿ)§& ˜^)–)@f ›Ž(•(  œ™Ÿ| žetхK  €‹U ЂŽ–z: Ѓw}%‡ ІRVj1 ЈZa€q ЉцьЁD ЋИХ№„ ­ай­J ЏмуФn АШЭќo ГІЊ, ЕЎДv Жp v Еu Зi m * К_ f %K Лn t г М k їs П  Ї ’Z Рq w nB У\ ` Vџ Хc g Vџ Чj n ЊA Ш!'& Щ mQ Ьщ№œ; ЭO U 9* а: > ,Ш6 у,,/,DD ц%,),e ш2,5,wn щУ#Щ#h ы•#Ђ#$ э­#Ж#d? яЙ#Р#  №Ѕ#Њ#Ћ> ѓ„#‡#г? ѕ‹#‘# і…‹E їT‚H њ,31G ћ/+5+{D §+#+2† џ&+,+ч' ++ВV ++›C  ++u p+v+І? b+m+ѓH B+I+ˆ єњшi чёt  ЧЮЖ 55D ћ45э Џ4Ж4џ; п.х.Ю И.Л.Ю О.С.Ю Б.Е.Ю Ф.Ч.   и.м.   "б.е.   $Ъ.Ю.„ %У7Щ7У‚ & 7Р7н )T7[7єc *,,6 +є+,,_ .’+™+S7 /i.o.Щ# 00.f.НN 3ђ,љ,іe 4E2K2w  62 2Oy 8,272Ю1 ::2B2шu ;#2)2Ј- >§12Э„ @2 24 AŒ,’,ѓ CX,g,T Es,~,j/ G,‰,•, Hj,p,r KE,I,–S MM,T,> N%+Ћ^ PЩт’ Rј B T"т/ UхѕGƒ XІА,џ ZДХд [ДКю>vR ђи>х>0l ѕИ>П>j іЅ?Ћ?Ip јq?€?ф> њŒ?—?Gz ќš?Ђ?Я" §ƒ?‰?‡ ]?b?  f?m?BX P?V?ЖŠ  ??X .??? B?M?—8 "?+?J ѕ>ј>юI ќ>?Ѕƒ Р6Ц6Ÿ  А6Н6јz z66дH П8Х8a …8–8={ Ѓ8А8•H Г8М8 m ™8 8MŠ q8u8д7 !y88žF "ј?ў?ш$ $Ф?г?‹j &п?ъ?р (э?ѕ?F… )ж?м?К\ ,В?Е?‰Y .Й?Р?Я  /9 9ъT 1р8ё8•N 3ў8 9Š 599X 6є8ћ8Ьw 9Ь8а8)B ;д8м8F <QWDd >Єy @*=У; B@N C'ф% Fчю‡ Hђ|; I,2 KŒЛ•@ Mн‡ O )[2 PОкqy S^g#+ UkˆK VЂЈJ4 XJeЂa ZwŽI \‘Ÿаz ]htє3 `25‘ b9F…9 cРЦФ0 ebv g’ЋgT iЎН 2 j‚…I mHLзg oP^'4 p6<Pk rею‹d tS  v3Й wёј zЏЙћ |Нб6  }e(k(/T ( (Й[ 7(L(-  ƒO(b(U „#(4( n ‡ф'э'Љ6 ‰ё'(  Š™ŸŸс Œѓ(Ц} ŽGxОI {–є` ‘+Dh ”Эб3} –ея‹ —>:D:ѓD ™#:&:ѓD œ::ѓD ž::ѓD  : :хy Ђ7:;:хy Є):-:хy І0:4:<% Ї: :Юƒ Љт9х9Юƒ Ћм9п9Юƒ Ўе9й9Юƒ Аш9ы9rJ Вќ9:rJ Дю9ђ9rJ Жѕ9љ9Ћˆ З ! "z ИЩ $7 ЛЏЖЕR Мс5ч5& ОЇ5И54 РХ5в58s Те5о5hK УЛ5Т5v€ Ц”5—5Я€ Ш›5Ѓ5Šˆ Щэѓ, ЬимЧ) ЮпуЧ) ацъ б3!3n< гс2ђ2S= еџ2 3Ћ~ з33эC иѕ2ќ2v лЮ2б2.w не2н2K о@3F3Б. п93=3хj т/363+< уw3}3Лs хd3k3v5 чn3t3 y ш]3a3~= ыM3P3 с эT3Y31 юС2Ч2Ь‡ №‡2˜2і_ ђЅ2В2Й єЕ2О2Щ ѕ›2Ђ2ш јt2w2‰W њ{2ƒ2В_ ћf9l9fW §89E9љB џP9Y9l‚ \9c9ƒe H9M9X} '9*9№F .949І/ ј*ў*Љ  х*ь*OR я*ѕ*o  о*т*PO Ю*б*’\ е*к*dY ж м a Ђ Б Ї„ Н Ш R Ы г U  Д К ѕ… Ž “ К — ž F w<}<Јўъ !pNь{ c%N d‚@ˆ@\[ fT@a@“ hl@u@ДY jx@@Q kd@i@zx nC@F@  pJ@P@$Z qж;м;хL sЂ;Б;88 uН;Ш;/ wЫ;г;j„ xД;К;˜… {Ž;“;‰ }—;ž;RB ~д$к$|m Ш$Ы$бo ‚С$Х$ъ „Ю$б$u …&&Zw †э%&Œ‡ ‰ё$ј$БW Š##)#| ‹ # #s† ŽР"Ч"l‡ H1N18 51E1„] “щ0№0њ. ”,020Щˆ •0)0ЊO ˜›/Ђ/†0 ™д0к0и& šЛ0б0˜b C0J0c  ž—”r Ÿ”ц Ђ&Њ Ѓ!$!*  Ѕш ї k@ Ї!!]{ Љ!!   Њњ !? ­д и *F Џм ф š) АА&Ж&0 В‚&&”E Дš&Ѓ&џ‹ ЖІ&­&ВU З’&—&‹ Кq&t&ы‚ Мx&~&ph Н0 6 ѕŠ О - Уa С†  -N ТEKCj У2BЦr ЦцэЊz Ч}$ƒ$;M Ъh$l$ Ьo$s$ Юv$z$Ш| Яd&j& б6&C&9# гN&W&ˆg еZ&a&QI жF&K&щ0 й%&(&е^ л,&2&. мжмЏB оЂБЉo рНШuk тЫгі† уДК7o ц“K  ш—žџ\ щ28@$ ыя# э%ЖL я(/41 №чU ѓѓі1m ѕњV, іio2 јV]Џd њ`ff# ћOS; ў?Bl FKў  ‡ ЙZ q ~ и! Q X Ÿ RX† бзUF ЊЮ_ Š‘ю* Ё:Ї:bn a:r:г' !‚::;y #’:ž:ЮJ $u::NT 'K:N:Ќ: )R:]:.j */ /2R -ь.№.2R /џ./2R 1ѓ.і.2R 3љ.ќ.тQ 5 //тQ 7/ /тQ 9//dc :f6l6цv ;T6c6ѕ >J6Q6ъ} ? В1 @ьс Cі§H~ DIO EBFЏl H8?E+ Iоф JзлN) MЭд q NFALA•! O8A=AL% R1A5AюN T@ACA‚n U$A*Aє< VA!Aˆ Yѓ@њ@ї ZhAnAЧm [ZA_A+b ^SAWAXC `bAeA}w aЧ Э Ÿm c‘   Єџ e­ И k gЛ Ф РP hЃ Њ P k}  ‚z m…  ќ nўЄ oыћ:> rЕМG s@/F/ S t9/=/O: w//6/tU x„/Š/ w yt//Z^ |T/[/ }$$Б3 с#ю#Ћ{ љ#$G@ ƒ$ $ёb „ё#і#} ‡а#г#&! ‰з#н#ю  Š[$a$n8 Œ-$:$Hh ŽE$N$ч Q$X$Mt ‘=$B$‹ ”$$% –#$)$C —]c6C ˜#ZЖ@ ›ЙР' œД$К$еR žЁ$Ј$Ыџ  Ћ$Б$U  Ёš$ž$-] ЄŠ$$4  І‘$–$ Ї 9' ЈИ ТC ЋˆV Ќu*{*Ї ЎG*T* j А_*h*А' Вk*r*šn ГW*\*;6 Ж6*9*q И=*C*CW ЙС*Ч*.u Л“* *‡^ НЋ*Д*Ф ПЗ*О*: РЃ*Ј*й] У‚*…*Еh Х‰**^] ЦЛ3С3З% ЧЋ3И3љq Ъ‹3’3м  Ы= C Й5 Ю( , рўъ а6 : рўъ в/ 3 Чb гb5h5хp е45A5Л( зL5U5Ys йX5_5d кD5I5ыџ н"5&5` п*505иB рВИJ сЋЏі  фЁЈp$ хў€ чан3 щшёX€ ыєћfd ьрхФk яПТ2I ёЦЬу. ђ“  ѓ}ŠU і]dыS ї_=e=  јM=\=Yўъ ћ-=4=VQ ќЄ.Њ.K! џv.z.K! ƒ.†.K! ‰.Œ.K! }.€.6Y .Ё.6Y –.š.6Y .“.шY а,ж,  Л,П,єh Т,Ц,єh Щ,Э,ё€ 88ЫA у7ђ7N ў7 8w>  88Я ѕ7ћ7+ а7д7нt и7п7( !™ŸŽ  #Sh€ %wˆYZ '‹–Xe (kt7( +9AЋf -EOёk .ј!ў!fˆ /ш!ѕ!P 2В!Й!яV 3Њ"А"l 4‰"Ї"X& 7""–Š 8гйіO 9Жаc <€‡т‰ =;‡;Š3 >_;~;A\ AЛ:Т:ќg BIO\' D$щJ F0;I| H>FŠƒ I'-Эv L}Z N н2 O$*ї2 Qі › S*i U!.S V 42 Yх ш G  [ь ђ c \9?ѕ7 ^ z `#,;, b/6н‹ c Žu fњ§Ъl hЭS i''S‰ j''aV m' '/p n@F… pO r*3Л t6=+ u"'a x+  zfx {х)ы)"€ }З)Ф)+- Я)и)тs л)т)в  ‚Ч)Ь)i) …І)Љ)„) ‡­)Г)L„ ˆO>U>Џ Šё=>ф Œ!>:>UU Ž=>L>z  >>П* ’и=л=ћ4 ”п=э=^ •Є>Њ>­S —p>>M ™‹>–>Љ ›™>Ё>ж œ‚>ˆ>š Ÿ\>a>  Ёe>l>ђ ЂШ9Ю9г_ ЄŠ9›9З] ІЊ9З9$ ЈК9Х9f Љž9Ї9іa Ќs9x9Ъ Ў|9†9L ЏкрЛG АЛз † Гw… Дd8j8*Š Ж68C8ЮW ИN8W8§  КZ8a81^ ЛF8K8Ž‚ О$8(8r6 Р,828џъ Сз'н'Ј9 ТЛ'д'Х9 Х-'4'- ЦA[З‡ Чp(ˆ(# ШU Y вu Щ| š п@ Ъоу- Ы&U  Ь:+<+z, ЭПСЯ{ Ю 4Љ4џ} Я?7N7є‡ а{+Œ+ˆ? бл,ь,Еg вKZ} гDR“l дtvЬ/ е)!+!ЂQ жЛ&Н&jg зS1W1o иГ1И18U йЦ3Ъ3Тs к№)ѓ)–G лm5p5“4 м44< нi!k!uG оЫ6Я6@- пЏ>В>‘[ рq6t6q. сЉц, т&3)3УD у]<`< ф‚<„Џ -ДВ .Ё’Ў /WiЁЎ 0mАЎ 1Уе Џ 2йы*Џ 3я9Џ 4uЏ 5-ЯЏ 6t†<А 7КЬЈА 8єВ 9ЅЗ%Џ :‰›4Џ ;ŸБpЏ <ЕЧЪЏ =кь7А >ЖШЃА ?Ьо4Б @тє\Б Aј фБ B KВ C$6gГ DЛЭ2А E:LžА FPb/Б GfxWБ H|ŽпБ I;MFВ JQcЏВ K"жВ L&8bГ MzŒkГ NТдpГ OбукБ PиъAВ QGY0E Rю5E SewhE TЉЛМE UD"V"сE VZ"l"ыE Wp"‚"+F X†"˜"_F Yд"ц"tГ Z,>cE [ъ"ќ"ЗE \##мE ]Л#Э#цE ^$$&F _$($0F `Ѓ$Е$dF aЙ$Ы$iF b§$%nF c&*&сF dу+ѕ+Л dЈ) e\&b&sу fP&S&Ч iJ&M&є kV&Y&‡Л lioдЁ m]`Pс pWZ0§ rcfбв s$*оЋ tcь ws y!YІ zКРЋ {ЎБš ~ЈЋ4 €ДЗSЧ ›Ёв( ‚’уы …‰ŒЬь ‡•˜D- ˆЯ е › ‰У Ц w) ŒН Р т ŽЩ Ь `Л ou,т cfо “]`K— •il6Х –CIcъ —7: š14 " œ=@ыћ OUДГ žCFЮ Ё=@]м ЃILВ Єџ  з Ѕѓ і жС Јэ № №“ Њљ ќ Ž ЋBHрн Ќ69™› Џ03ј Б<?Ж, В  Bя Г ‹ Ж  “ И  И Йі ќ <Ю Къ э % Нф ч Šд П№ ѓ {Ў РШ Ю \ СМ П ‘њ ФЖ Й …Џ ЦТ Х ў ЧЉ Џ …У Ш   юЏ Ы— š Ущ ЭЃ І рў Ю^d11 ЯRUъ вLOС! дX[‹І е}ƒrи жqtў— йkn0+ лwz­7 м'–'y3 н„'‡'юл р~''ц тŠ''ч% уюєСВ фтхщ чмпђТ щшыу ъj p Въ ы^ a Ы/ юX [ 8& №d g t; ёGMKы ђ;>›А ѕ58…з їADR  јœ#Ђ#'ш љ#“#r! ќŠ##Ј ў–#™#K” џ ‹в ) њ § Ё9  бЂ ћис яђB­ щьjЖ ѕјŠк ќзэ №ѓќ ъэЏЇ іљ# УЩ†Ц žсљ ЊЕН– ИРlЙ ЁЇ Њ |€D4 „‹Ÿ1 !5;№ ".2_щ %$+Nп &Œ ’ <5 '… ‰ aн *{ ‚ tА +f l j ,_ c K /U \ =Д 0нуИœ 1Ък€ѓ 4~…ЫД 5’˜љИ 6‹жъ 9ˆЖŽъ :msѕф <?Lq >W` @cjЩ AOTЂ4 D.1uЇ F5; G!'Хž HЫж KВ LЗНŠ” MАДPВ PІ­gš QмтЊ% Rейž№ UЫв?И Vч э … Wл о Ь Zд и mИ \с ф Љ­ ]I+O+žС _+ +Œ a-+:+=А c=+F+еѓ d#+*+в7 gљ*џ*К+ i+ +g№ jPVŸ5 k=MЋ n  o)!/!  p! !S s!!у  u#!&!Іх xV+[+Іх z“+›+Іх {ž+Є+Іх }_+f+Іх j+y+.С € !!: ћ !PР „є ј “Ш †!!ˆ. ‡ &› ˆц Ё ‹X_Л ŒЯ!е!Рб Ž›!Њ!Šщ Ж!С!Ў ’Ф!Ь!CЯ “­!Г!џž –‰!Œ!š# ˜!—! ™|!‚!д# ›H!W!џт c!n!ф Ÿq!y!a1  Z!`!U0 Ѓ6!9!Ро Ѕ=!D! ІTZšТ Ї0QЄ ЊИПп­ ЋЪ%а%К. ­–%Ѕ%iѕ ЏБ%М%ЌЁ БП%Ч%вю ВЈ%Ў%2 Е„%‡%Uч З‹%’%* ИPVћ ЙAM4  М!(…Ъ Н""("dК Пю!§!Ж$ С ""%ж У""љв Ф""Уъ Чм!п!Ећ Щу!ъ!c- Ър#ц#ž Ыа#н#КУ ЮА#З#\ъ Я,$,CЊ а,,Š  ги+п+™ д"%(%b/ е%%!љ иђ$љ$eр йZ`TУ кSW>Џ нIP/• ќ пy}ъ тov$; уСЧОП фВОя• ч’™Ь  ш>$D$J‘ щ+$;$ЧЧ ьѕ#ќ#‹Ы эU,[,Y• яB,I,Д8 ёL,R,89 ђ;,?,ŠЉ ѕ+,.,^Х ї2,7,7, ј†ŒuС љwƒ\ ќW^~ч §28ГЎ ў!/ Щ ‘ѕ  -і я $ Яж’ FL|Б 5CїЯ +2Њ( л вЙ уъ^ чэ• рф/х жнTд 8>Ÿа ь? &іА )5Ђн Vћ айЦЈ "ншїщ #˜žVё %LcJб 's†œ2 )‰•ту *fpД0 -09† /=Hш 0џ€  1юќy+ 4Юе-ё 5ЙПУ 6ВЖ{б 9ЈЏхЎ :Ž”Љч ;‡‹C. >}„-І ?ioŠ– @bf“Ћ CX_З’ D$*ЊЄ E!(Ш HлЦ IКР„ъ JЉЗC6 M‰ЗЛ Ntz Д Omq,Ф Rcj. SIO&ђ TBFЌЯ W8?Qф XщяIЬ Yицр  \Юеєя ]K Q * _ " uп a/ < ќ6 c? H К d% , œг gћ ъ i Fл jDJѓ™ k%A- n­ДфХ o}#ƒ# qI#X#h% sd#o#фЖ ur#z#žм v[#a#~™ y5#:#,ј {>#E#VЩ |8>ѓѕ }5і› €ЁЈ э w%}%єц ƒC%R%dг …^%i%Hє ‡l%t%A˜ ˆU%[%KЁ ‹/%4%ŒЬ 8%?%О Ž"ђ+ ц ’ f “ї§*Ј ”№є+П —цэЖѕ ˜—  ю ™‡ ” šК œg n 9 ’˜Эц žpЅ ЁЖН Ђ(.  Ѓ%ГЖ ІАЗт ЇЗНгФ ЈАДу. ЋІ­чБ ЌхыЭ— ­от€Ч АдлeГ БЋќ В iЈ Е§Yі Ж[a{ ЗTXv КJQ6 Л‡п Мz~ј  ПpwЌк РЇ­, С ЄИ Ф–€ ХЭгK ЦЦЪЗп ЩМУ–ј Ъіќ€є Ыяѓ„ц Юхьњб Я#)'ъ а  гч  дЃЉ’Ќ е Љу иovѓ- йрцр кЯнЩ нЏЖ\ оJPЦф пCG’ т9@z у&,Ця ф#  чѕќ шš  Е щ‰—„6 ьip­Ф эажрШ ю‘Эњ ёЋВ_› ђ9(?(–Й є ((‘ і#(,(—ю ј/(6( / љ( (vЅ ќљ'§' Ђ ў((ж  џь'ђ'=џ В'У'BМ а'н' Ќ р'щ'Zж Ц'Э'i 'Ђ'Кр І'Ў'Бы q'w'эј 7'H'Qц U'b'Ќ‘ e'n'г K'R'ѕ !'''ИЕ +'3' ­ Б&З&Љџ }&Œ&І  ˜&Ѓ&Fѓ І&Ў&СЊ &•&Œ< #i&n&’— %r&y&TЃ &''З (ж&ч& - *і&'‘е ,''' -ъ&ѓ&м 0О&Ф&ѕр 2Ш&в&ˆ 3Z`˜ 4;W‡  7 ?Ў 8)),Ж :з(ш() <ѕ()Ъ >))  ?ы(ђ(а BС(Ч(ьЇ DЫ(г(ЙЪ EСЧt8 FКОFќ IАЗL8 JА Ж бР L| ‹ йЃ N— Ђ і PЅ ­ л, QŽ ” C Th m 1 Vq x xа W[ a kЗ Y' 6 —Э [B M Э2 ]P X § ^9 ? l7 a  ]Є c # AЙ d06† f$;Ћ h'-0ь iЖт l ‰Žъ n ћ o|‚к; qN[Џ sfo[ urySЉ v^cѕ2 y=@”ž {DJчЗ |РЦнЅ ~Œ›фџ €ЇВgЋ ‚ЕН|М ƒžЄ < †z}\ш ˆˆdњ ‰ms ‹?Lj  W`МЌ cj№œ OTŒЃ “-15г •5;  –љ%џ%У —ш%і%X šо%х%Т“ › ‡- оыщ8 ŸіџЬ Ё ў ЂюѓwО ЅЭахи Їдк,р Ј=&C&р’ Љ-&:&ЦО Ќ &&§ ­`fZ’ Џ,;—я БGRчм ГU]OЪ Д>DК Зы$ Й!(Ј Кљџ" МЫиЧ6 ОуьЃс Ряіз) СлрПЫ ФЙНза ЦСЧ‰Е ЧЌВxџ Щ~‹ђЪ Ы–Ÿ& ЭЂЉpЮ ЮŽ“№  бmpЊЦ гtzA  дŠ  ŽП еy ‡ [э иo v ј й[ a ƒЯ кI X u‘ н) 0 Вє оэ ѓ ^ъ пц ъ ’ђ тм у ­§ уцьc“ фпу; чемF3 шFLхЬ щ1CС ьћџФ эlrŽ юeiŽ• ё[b( ђv|тЮ ѓfsЛл і07WБ їŽ(”(dЫ љZ(i(Р ћu(€(7Є §ƒ(‹(Ÿ& ўl(r(кк F(K(;Е O(V(U œЂ) •™ˆё ‹’Gў Д(К(цз ­(Б('  Ѓ(Њ(,е §Зљ эњYђ ЗОѓі f)l)шє 2)A),0 M)X)Ий [)c)+ D)J)д )#)-Б ').) #)›ж ! ю $ЇЮ %Œ)’)ПЭ &…)‰)~  ){)‚)рЛ *  Ь& + z: .т щ нд /о$ф$Ѕ3 2˜$Ÿ$U" 3A G Fа 4: > NЭ 70 7 š 8Д"К"S' ;9"@" <(#.#ГІ ?Щ"а"Cњ @œЂєњ AŠ™œЂ D€‡т Eр ц џ FЬ н Ў IЌ Г ГХ J#)Ш K GЂ N`gPз O’˜J P‚nД SLSƒл TЪаh4 Vr‰[ž XŸВф ZЕЧьЕ [ŒœэП ^PYq `]n€˜ bЛ Ф €˜ d ‰ €˜ f ž €˜ gЧ Э Ш jw } Ѓ kђјЧш lыяЏМ oсш†Є p &й q2  tтН uз н > vа д н yЦ Э ?Н zГ Й пГ {Ќ А сй ~Ђ Љ   tz — €mqL  ƒcj‰§ „š Њ …“—о§ ˆ‰ б ‰06}Њ Š)-A &€" Ž?Eјо 8<&З ’.5а˜ “ е •€БmШ —ЮћБ ™ўюŽъ šДЫЅН ]`ўе Ÿd|"Ы  ŠbŸ ЃZa% Є ™ Ів с J Јэ ј щВ Њћ  ы" Ћф ъ   ЎО У  АЧ Ю ё< БT Z bЕ Г / ”З Е; F Й ЗI Q С И2 8 +Т Л  8щ Н  pх О„$Š$A  Пv${$;# Тp$s$qФ Ф~$$V Хc$i$о1 Ц\$`$о ЩR$Y$љЂ ЪБ З Oœ Ьw ˆ хЉ Ю• Ђ -У аЅ Ў >7 б‹ ’ ;: дa g L; жk s ББ зЮдУ* й’ЃVй лБОэ: нСЫ  оІЎЧё с~QŽ у…ŽЁи х[*l*Ёи чN*W*Ёи ш—**Ёи ъŠ*”*‰Щ эG*J*cї ю:*@*ћР № **њп ђ$*-*Ј; є0*7*m  ѕ*!*ёђ јћ)ў)M њ**LО ћю)є)^в §А)С)Сј џа)н)JЅ р)ы) Н Ф)Э)Њі ™)ž)ь' Ђ)Ќ)KЦ qwЉ" \nѓ <CŠ’ S Y Ъе C P O2 # * Я Ф+Ъ+й Н+С+ъх Г+К+€$   кЄ  Ў  ў ТТ Яе  ОЬdљ žЅр– !ь*ђ*Oе #И*Ч*wœ %г*о*я 'с*щ*ї (Ъ*а** +Є*Љ*Њ -­*Д*18 .Ш /q u %Ц 0L O 7š 1txY 2x{2 3 ˜  4 ћ* 5ТХё 6§а” 7CRІЈ 8ЃВhТ 9GЌ :Ї#Њ#5№ ;Я+в+›“ <щ$ь$nя ==CLЇ >eiчŸ ?ˆŒ: @ы#я#/с AMQ”ї B…­ CХЩКЗ D"%М Eйн= FЬа(п GФШ%и H™Ђb Itw:Г JORY, K  Іь Lƒ-ч MT]Еў N/2н5 OХШn( PЇєš Q‘›6у RѕУ SлрЗ- T^ a ъЌ UЇАŠ VЅЊ W Ої XТЮF Y№їйч Z@DŠГ [fjt9 \Œ; ]ВЖзќ ^ип“ _ Р `ei6 aЅЉoј b13у cыявИ d_cMи e‹Ѕѕ˜ fђџп‘ gЇЊ‰ш hе%и%T< i&&b– jf i ?Л k # 9( lг ж 2– mЬЯ+м nёѕ(в oQU”Х p'*Zт q…I$ r™(( М sЎБjЌ t V* uq)u)fН vк м ўЈ w$’$Г x * Eю y-"3"Ю zП"У"ХЬ {wzЬ  |Ђ І §№ }RZ"к ~CFVк елЛ1 € †ы О Р ‘ ‚— œ І ƒZ]чї „ƒэ …›ъ †%(ь ‡QT5 ˆI$L$‘/ ‰.6$з Š  E™ ‹Љ+­+j5 ŒєјЭ •˜КККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККК "%‘#Ђ#‚џ(. "%‘#Ђ#f§(. "%‘#Ђ#Ё(. "%‘#Ђ#l(. "%‘#Ђ#џь(. "%‘#Ђ#Єт(. "%‘#Ђ#x—(. "%‘#Ђ#:"(. "%‘#Ђ#‡м(. "%‘#Ђ#'”(. "%‘#Ђ#3ž(. "%‘#Ђ#K“(. "%‘#Ђ#Нд(. "%‘#Ђ#УЏ(. "%‘#Ђ#J(. "%‘#Ђ#№!(. "%‘#Ђ#^+(. "%‘#Ђ#(. "%‘#Ђ#У(. "%‘#Ђ#u&(. "%‘#Ђ#Пз(. "%‘#Ђ#м(. "%‘#Ђ#ц9(. "%‘#Ђ#˜Ж(. "%‘#Ђ#зЇ(. ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# "%‘#Ђ#ЁИ(. ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# "%‘#Ђ#,!(.К‘#Ђ#ƒ#"& й€ŽЂ "%‘#Ђ#И)(. ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ#ƒ‘#Ђ# ƒ‘#Ђ#ƒ‘#Ђ#ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ƒ#"й€ŽЂ& ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ "%‘#Ђ#P=(. ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ŽЂй€& ƒ#"‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"м§ SБ p‚aБ †˜ЛБ >с ЊАf w„З ›ސ žЇ?Ѓ ‡Ёї cfhу js>ж щ я с Й Ц — в л o о ц e Щ Я шЪ Ї Њ S˜ Ў Е Л ЃAЉAІK oA~AIЎ !ŠA•A? #˜A AХЙ $A‡A0\ '\A`AЌ› )dAkAа| *^d0˜ ,(7юш .DOП 0R[ž˜ 1:A)з 4СЕ 6$‚ѓ 7 SЗ 9брИЃ ;эјЫAE =ћЁš >уъcю AОС$Ђ CХЭŠ DпхЦe FЈЗнoK HУаХ JгмЛ` KКР) N“—4Г P›Є$NL Q›#Ё#МЭ Sm#z#q= U…#Ž#ŸЙ W‘#˜#” X}#‚#Дi [[#_#jLa ]c#i#ш ^М:Т:† `A:`:т… b{:œ:Vф dŸ:Й:ЕХ ec:x:ОЛ h::9 j!:=:М kZ`л m-К o:Iір qLWВ r07Bа u , w№ж xо,ф,‡? zž,Џ,ŠЖ |П,Ь,Œe ~Я,л,,Y В,М,МSP ‚‡,‹,&† „,š,ѕz …}.ƒ.d[ ‡I.X.ŠЩ ‰d.o.ёi ‹r.z.ig› Œ[.a.Б  7.:.б ‘>.E.Й ’з-н-•С ”Ѓ-В-”Ф –О-Щ-і= ˜Ь-д-p› ™Е-Л-Dˆ œ‘-”-t> ž˜-Ÿ-ЙQP Ÿ1-7-Ÿ Ё§, -ДPs Ѓ-#-cІ Ѕ&-.-™ І--Њл Љы,ю,AЛ Ћђ,љ,лZ Ќ*.0.м† Ўі-.вА А..O@ В.'.Z‡ Г..Џс Жф-ч-Ьќ Иы-ђ-%d Йз.н.Н ЛŸ.Ў.Ÿˆ НМ.Ч.ЩФ ПЪ.д. ‚ РБ.Й.Юj УŠ.Ž.Лњ Х’.›.ЧШ Ц„-Š-uі ШP-_-(s Ъk-v-д Ьy--kц Эb-h-|Є а>-A-Y| вE-L-pœ гє5њ5nЋ еЈ5П5‹Bд зЯ5т5ŽЎ йх5ё5hx кТ5Ь5`Џ нŽ5•5ь] п™5Є5яЋ рG)M)Zл т))иw ф,)7)Цк ц:)D)H ч!)))ўJ ъњ(ў(јК ь) )зЧ эіќ№q  яТбEМ ёншђ ѓыѓїŒ єдкЬr їЏГў_ љЗОА њў;<‰Ц ќЪ;й;i ўх;№;ŠН ѓ;ћ;ZЭ м;т;SM И;Л;§ П;Ц;tб c"i"§~ /">".щ J"U"уе X"`"[s A"G"6y " "@Б $"+"sq‹ Q,/w aB,H,]v bЋБqъ c›Јш fel#Ы gŽ”*Z iXg?њ ktŸRf m‚‹7о njqЙI qCH&Е sLTЂl tкрЗљ vЌЙvH xФЭсџ zазЃ„ {МС?’ ~›ž0Ъ €ЂЈR э$ѓ$! ƒБ$Т$ўќ …а$н$Jœ ‡р$ъ$ORs ˆХ$Э$јњ ‹š$ $mЕ Є$­$AТ Ž!7'7n о6я6ѓc ’џ67Ю ”77˜І •ђ6ќ6ZE ˜Ц6Щ6Wь šЭ6к6’Р ›+010BG ї/0‹Д Ÿ00ЩJ Ё 0(0ˆF Ђ 00РЇ Ѕх/ш/Ь Їь/ѓ/Ф ЈX^2m= Њ$Ц… Ќ4EЎф ЎHUGХ Џ'1бТ ВіќcИ Д ѕƒ Е`fГь З-Ѕц Й>MY‰ ЛP]xk М0;Є ПчЫ С Tq ТOAUAF€ ФБ@м@їь ЦA(AŽ€ Ш+ALAЩж Щп@ў@юW Ь{@‰@8Ю Ю@­@6J Яѓ љ Е бН Ь ™` у H цюёЉЁ шѕџ;Ї щe+k+Tw ы)+:+эЮ эH+U+=H яX+b+PЙ №=+E+Т ѓ++nє ѕ+%+zD іQWу ј#0ыn њ;D—в ќGNEP} §38%“ фf кH PVдE #ї 2?Ё“ BM“Џ &/Œё §C‰ І Є%Њ%VГ p%%З ‹%–%И= ™%Ё%t… ‚%ˆ%б@ ^%a%!p e%l%Рп Ц'Ь'‰ ’'Ё'УВ !­'И'Ё #Л'У'Xи $Є'Њ'ѕX '€'ƒ'  )‡'Ž'ТL  *Ў&Д&ЗH ,x&‡&у‰ .”&Ÿ&Їё 0Ђ&Ћ&ы 1Š&‘& 4e&h&чћ 6l&t&лˆ 7ЂЈ ˆ 9fwвz ;…’ў =•Ÿђф >z‚1ё AQUY CYb—Ѕ D""x Fе!ц!rw Hѓ!"љШ J" "ѕ Kщ!№! NС!Х!q PЩ!б!њy QйпМU Sƒšљљ UЏТŒ WХж{– XЌц[ [gkmш ]o›О ^NT›ќ aHK*P  b;A‰^ d§р f*z h-8аD i}Ч lчывЋ nяљrŸ o6<hm qњ ?  s&іЈ u)3’э v_й yцщаМ {эі=[ |С Ч Dщ ~q † Oљ €š Ћ 9 ‚Ў О љ ƒ‰ — Гы †S Z M ˆ^ m r ‰—мU ‹crxŽ ~‰\ Œ”f^ u{Šь “PT s“ •X_”a –елIa ˜€™kД šЊСЁG œФвHр œЇgƒ  ej9і Ђn|е Ѓ(.YD Ѕє”Ž Ї9 Љ%Чц Њ НW ­тх&Х Џщ№Mb А—} ВNc• Дr…џ Жˆ”I› Зfo] К5:zќ М>JЅJ Ныё\` ПЗЦ џ СвнGЂ Урш„о ФЩЯl ЧЄЈ#Ў ЩЌГф ЪbhъН Ьдћйъ ЮBE аE_"М бўЖ дЄ­-ƒ жБаЪc зX^Љ й$3‚p л?J"в нMU{Я о6<;е сSy у э фЃЉ!T{ цo~t шŠ•D ъ˜ ї ы‡‹Ue ю]`ь  №dkм ё5$5р€ ѓР4й4FІ ѕъ45…lБ ї 55дК јм4ч4Њ ћ4Є4" §Ј4М4цВ ў†Œˆ№ 0EСG YnAЈ qƒи§ HV7Q v ,јŠ ”>š>Ќ  >.>рЎ M>p>>MM s>‘>гOI 1>J>!Ф п=х=Ѕ_ щ= > Џ  ::ф” й9ц9@ ђ9ћ9iЖ ў9:њТ щ9я9Rl "Ч9Ъ9=п $Ю9е9ы„ %р7ц7v 'Ќ7Л7 С )Ч7в7‚` +е7н7% ,О7Ф7_п /š77…c 1Ё7Ј7bВ 2`9f9пTO 4,9;9  6G9R9,{ 8U9]9  9>9D9(ш <99$Ї >!9(9ИЗ ?Є<Њ<Шз Ap<<. C‹<–'ž вO'`'i  дc'p'ƒTO еA'L'”Е и''.bъ к'%'Pn лQ%W%К– н%"%Bp п1%@%Іr сC%N%c т%%.%Ч хњ$§$яG ч% %ФF шћ"#€“ ъЭ"к"ў€ ьх"ю"Pћ юё"ј"п ян"т"ЏЎ ђМ"П"mЎ єУ"Щ" NA ѕN#T#hё ї#)#|RL љ5#@#гЈ ћC#K# ќ,#2#rOA џ# #t ##Щ  Џ"Е"эQc "Ž"Ш] ™"Ђ"/З Ѕ"Ќ"›… ‘"–""‹ p"s"lЃ w"}"рЦ эѓ=Œ ПЬык зрКv уъYј ЯдTн ЎБД ЕЛВo, 9??Љ  Ір #,a† "/6Ћб # +> &њ§б_ (љ ) Ѓ pћ +A \ ЏЏ -p ‡ Лf› /Š š €AE 0_ m РY 3' * ё| 5. = Ÿз 6ekh~ 84A?Ж :LW BF <ZbŠf- =DI“а @ $Єb B(0!а Cќ%&?Ќ EХ%д%…d{ Gр%э%‰б I№%љ%}K Jз%н%+Џ MБ%Д% o OИ%С%…В P33Ќ Rй2ш2Пю Tѕ23€И V3 3vSP Wы2ђ2žП ZЦ2Щ24ђ \Э2е2­ ]Й2П2ХЁ _‹2˜2~п aЃ2Ќ2Ћ cЏ2Ж2…j d›2 2 С gz2}2ѕъ i2‡2|h jї§„ mцэх n''Ж pЭ&м&Щ rш&ѓ&Li tі&ў&њэ uп&х&žMb xЛ&О&щ zТ&Щ& [ {X&^&Ч— }&/&”Ы <&I&§w L&U&Ќ ‚2&9&INr … &&.Ui ‡&& NN ˆ? ?Шp ŠО>Э>чч Œк>я>Ё– Žђ>?E а>з>&ц ’Ё>Є> Р ”Ј>К>B{ •#/)/’™ —ѕ./Л  ™ //Nѓ ›/ /‚ œ/ /|‹ Ÿф.ч.фЕ Ёы.ё.hФ Ђv/|/WВ ЄB/Q/cс І]/h/x_ Јk/s/й“ ЉT/Z/Vї Ќ0/3/Сko Ў7/>/щNC ЏажАC АЩЭЊ ГПЦ№Й ДщяЌМ ЖЛШ8ч Иг짇 Кпц€л ЛЫаdО ОЊ­Т? РБЗЫѓ СсчЉі УГР3г ХЫдШg ЧзоQi ШУШФЖ ЫЁЅ№Њ ЭЉЏ(ѓ Ю№іЪф аТЯH вкуKў дцэr евзqZ иБДŽЂ кИОѓD л‡ L нSb  пnyrў с|„MŸ тekѕЏ хADДЈ чHOёо ш4:[ч ъў Зэ ь%”v ю(16э яR} ђъючг єђњT­ ѕ‚ˆ ’ їN]‹У љitФX ћwАГ ќ`fmY џ<?0I CJц? ну0W ЉИ[ ФЯШщ вкФ ЛС‘LN –š– žЅХŸ лс5D ЇЖ†Ё ТЭС аитl ЙПŸ ”˜iž œЃЗ† /5˜ю ћ зa ! Э "$,зО # иs &шь-q (№їшeЗ )Яе‘ +ЁЎ{ж -ЙТg€ /ХЬ„­ 0БЖЖЂ 3“Fм 5—Ѓѓ 6”šЦq 8Xii™ :w„‚ч <‡‘^ =lt{ @CGja BKT›Э C И Eр ё c Gў lЂ I  д~ Jє ћ ћ— MЭ а w Oд м Ы‚ PЎДъ Rgz/т TŠ›” VžЋG W}‡› ZNRВw \Vcл ]4;:;щ _т:ћ:‚и a ;!;Kx c$;1;Vќ dў: ;›q gЩ:Ю:и= iв:о:Р jp3v31и l03C3Ј nQ3`3VЄ pc3m3^o qF3N3x t33МУ v#3,3PN w#mщ xMr { „Q_ |DJЋч }=Aў^ €3:Рœ 0“0"А ƒM0`0Іt …n0}0cэ ‡€0Š0Щи ˆc0k0{V ‹80<0!Ž @0I0X ŽЋ;Б;ђ \;s;I  ’ƒ;˜;%Š ”›;Ј;шV •v;€;ІЧ ˜A;G;—= šK;X;™м ›б3з3Пт ‘3Є3@х ŸВ3С3+… ЁФ3Ю3yд ЂЇ3Џ3лB˜ Ѕ}3€3№b) Ї„33шщ ЈjpАЮ ЉcgCѕ ЌY`ˆџ ­‘—1Ь ЎŠŽ&Ц Б€‡2] Вя0ѕ0dК ДЏ0Т0eX Жа0п0`г Ит0ь0љU ЙХ0Э0’г Мš0ž0? ОЂ0Ћ0рЯ П4#4Г Ся3ќ3кy У44ЧЫ Х44‚Б Цџ34Хu Що3с3Рџ Ых3ы3vв ЬЁЇТ Юm|Т” аˆ“^з в–žэС г…o ж[^7л иbi§д й7“7ЫK лH7Y7pЬ нg7z7ђmЊ п}7Š7bI р\7d7њя у.717ЅЪ х57D7ƒJ ц 99YK шЫ8к8уЭ ъч8њ8Ж“ ь§8 9И‘ эн8ф8иа №А8Г8уv ђЗ8Ч8ёі ѓ.,4,об ѕэ+ў+$§ ї ,,Вƒ љ,+,ьx њ, ,‘ §е+й+QC џн+щ+ы w ан8й шѓ| іў}А рх‰] НРяk ФЬEn АЖн yˆ m ”ЁФН Є­т ‹‘ј ehQŽ lu~W **хХ Р)б)wљ п)№)РД ѓ)џ)З№ !д)м) Я $Ї)Ћ)Ао &Џ)М)я  'b*h*:– )&*5*ХБ +B*Q*ЛПZі @УЫŒр AC I u Cё  lМ E + АAF G. @ ќ H  ‹o KЮ в wа Mж э W=Ќ NF L Kк P  jjъ R) 6 Bv T9 C jХ U & xs Xі љ ЋШ Z§  Нsъ [ыё[_ ]“Њ€@ _РгЉБ aжш3ї b­Н{‰ erzѕЂ g~АZ hl r Ъ j* = YЮ lL [ Пnъ n^ i F” o@ I wЇ r  д> t & ЌB˜ uР Ц Їd wŒ › Mя yЇ В Ь’ {Е Н j |ž Є юœ y } 7Н  ˆ 0x ‚Ѓoр „gvэAE †ƒŽЄ ˆ‘šўo ‰y€ц• ŒSW—i­ Ž[cЬв Ѓ8Љ8 ў ‘j8y8(𠓆8“8§н •–8 8“~ –|8ƒ8Тh ™U8X8IL ›\8f8ZJ œ nм žЪ л Ћ  щ і Њ> Ђљ  §a Ѓо ц oЈ ІЕ Й т‘ ЈН Ц ‡М ЉК9Р9 Ћ€9‘9HЋ ­ž9Ћ9б› ЏЎ9З9тp{ А”9›9NBх Гm9p9Bg Еt9|9Юя ЖЄЊЉд Иvƒc‚ КŽ—a МšЁiх Н†‹'Р РehІ^ Тlrч УљџwЛ ХУв  Чпъ—  ЩэіWБ Ъему` ЭАГгŠ ЯЗПњ} аЛ*С*˜\ вƒ*’*g§ д *Ћ*рž жЎ*И*иd з•**щт кo*r*еt мv**)j н5‡5Iц пB5S5жь сa5p5х уs5~5н фV5^5Œт ч+5/5ЮЊ щ35>5˜Š ъэ(ѓ(&ю ьН(Ъ( юж(п(.Ё №т(ъ(cQ ёЭ(г( єЋ(Ў(ZЅ іВ(Й(Џъ ї:$@$хRO љ $$tЙ ћ$$-$\• §0$7$їѓ ў$!$+OO ћ#ў#hЫ $$Јg 6<См ђё 'чŸ *3ѓ w ь№IД єўc] ‰Ен UdІ p{ТNe ~†+| gm(u CFс– JQяМ ВИЦЯ ~х "™Єbж $ЇЏэз %–і (koщPd *sz]k + .ў -бр:ф /ьїН‡ 1њРе 2ущ.В 5ПТіu 7ЦЭЪV 8X^( :$3€з <?J~y >MUEŠ ?6<ф BT… D ЎD E"й‡ Gюћlb IFž K… LўЈTN Oмрц Qфъ‡ RioЂж T;Hqi VS\зд X_fjn. YKPdš \)-2V& ^17бІ _ОФЉO_ aŠ™р cЅАa eГЛЁ fœЂ| iv{жў k†чу lџи nньEЧ pјtђ rЄ‰ sяѕШ vЫЮ xвйxG y^d– {0=жђ }HQђИ T[г{ €@E)є ƒ"RА …&,&• †и/о/Aд ˆš/Ћ/ъE ŠК/Ч/шГ ŒЪ/е/Ѕ Ў/З/gк ƒ/ˆ/іTE ’Œ/–/” “š   ЦЬ •\ m нэ —| ‰ Œ ™Œ — вр šp y ЇЉ G J я‚ ŸN X Яb  : @ —К Ђ  œЛ Є# , YV І/ 7 bU_ Ї rœ Њјћ‡  Ќџ ˜ƒ ­Й6П6pт Џs6„6CoЉ Б‘6І6rТ ГЉ6Ж6ЫС Д‡6Ž6>X ЗU6[6Ќp Й_6o6КО КV\I~ М)+L О8EFУ РHSфР С,5]Щ ФЊ  Ц §ˆ ЧБЗ&П Щbwъ Ы‰œ#€ ЭŸЎM2 Юz†  бFK и гO^y˜ дЏЕg ж~‹… и–Ё0Є кЄЌѕg лŽ“J? оkndУ рrz>^n с Lв уап&@и хыј1Э чћ‰I штш<} ыМПЌђ эУЬќ’ юCIд^ №-6ж ђ9@­є ѓ&*9t іљІ ј"} љ$“$Fу ћY$h$Œє §t$$e— џ‚$Š$g k$q$ПИ G$J$ьš N$U$В’ ю#є#юH К#Щ#5ћ е#р#O у#ы#$ž Ь#в#юц Ј#Ћ#ТЩ Џ#Ж#ої Ј Ў A h y [‹ ‰ – Q ™ Ѕ Ÿ— | † йMT P U hН Y d Н Ш+Ю+C "ˆ+›+хѕ $Љ+И+Œ &Л+Х++№ 'ž+І+ї› *r+w+œя ,{+„+œ@ -22.— /р1я1&` 1ќ1 2Уй 3 22яŽ 4ђ1љ1О 7Ы1Ю1к 9в1м1 Ь :g1m1ыв <1.1~t >=1R1,н @U1d1@ A11:1Жх Dќ01Щё F11QW GО1Ф1i\ Iˆ1—1Вž KЄ1Џ1ўю MВ1Л1|  Nš1Ё1ГЅ Qt1x1} S|1„1КК Tšћ V‘К\ XгјЅе ZћџЯ [НаZ ^ouZH `yЦР aFLrР c Эx e*7с g:C I h 'їх kјќ9K m]c nH8N80E p88Љz r&878AeM t:8E8Aъ u8#8Eџ xэ7№7JП zє7ў73К {m2s2ѕј }92H2Я\ T2_2yШ b2j2•Њ ‚K2Q25f …&2*2уF ‡.252Om ˆ4–4§Ч ŠC4X4п Œi4|4hpЏ Ž44Їщ [4f4`d ’*4-43BF ”14?4ј •ž(Є(Ÿи —:(Y(ŒХ ™m(ˆ(Н[ ›‹(›(œ œ\(j(Ч™ Ÿ(#(tП Ё'(6(’‡ Ђ((Ѓ Єф'ё'е‹ Іќ'(8ы Ј((Cи Љє'љ'гЄ Ќг'ж'—X Ўк'р'…њ Џ\_вЉ Алрм БЖЙЎ€ ВŸ} Г(-iMt ДOSŒй ЕuzКК ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ђ"ђ"ђ"ђ"ђ"ђ"ђ"E  SБ мюЬЋ ъќбЋ жЋ (ќЋ ,>NЌ ‚”XЌ ˜Њ|Ќ ЎРЩЌ Фж­ *­ .@aБ ђIЌ DVSЌ ZlwЌ p‚ФЌ †˜­ œЎ­ ВФ7­  Š­ 1н­ 5GЎ ЅЗ=В ўЌ ЛЭ ­ бу2­ чљ…­ §и­ %§­ );8Ў ?QЎ UgœЎ k}ЋЎ !“PВ "0г­ #—Љј­ $ў 3Ў % & ˆЎ &* < —Ў '@ R ІЎ (V h ЕЎ )l ~ Џ *‚ ” /Џ +є  >Џ ,  ДВ -—Љ’Ў .N ` ЁЎ /d v АЎ 0u ‡ Џ 1‹  *Џ 2  9Џ 3# 5 uЏ 4зщЯЏ 5эџ<А 6ЈА 7+єВ 8­П%Џ 9s…4Џ :”ІpЏ ;ЊМЪЏ < 7А =#5ЃА >'94Б ?=O\Б @пёфБ ACUKВ BYkgГ CУе2А DмюžА EмюpГ FйыtГ GдцЛ G Њd H&%&ŠK Jл%ю%yb Lў% &1 N&&І Oё%ћ%я2 RХ%Ш%Ki TЬ%з%ЂV UИ%О%X_ Wt%‡%ёg Y—%І%ў/ [Љ%Е%ѕo \Š%”%5 _^%a%­ ae%p%zk bщя.W cЧцd7 f {( gouю  i;JU kVaœ mdleL nMSю1 q),mM s07З$ tХЫеS vžњZ xЋЖДB zЙТug {ЁЈЙ` ~|п) €ƒ‹Н _e2d ‚SV'a …MP$= ‡Y\юV ˆюєWc ‰тхI ŒмпŸ ŽшыЇD щя, нр=X “зкќE •уц! –†Œќ —z}Б^ štwЦ  œ€ƒf] gmРc ž[^B' ЁUXN Ѓad^* ЄПХQ, ЅГЖЦm Ј­АЌ] ЊЙМ ~ Ћ‡шr ЌuxњK ЏorБO Б{~,` В~„‡/ ГruG Жloи` Иx{ж" ЙMk Кќџчe Ніљ–_ П  Р!'Ž{ СЎ' Фjx Ц." Ч І§U Ш”—k ЫŽ‘Аj ЭšA] ЮМТUG ЯАГC? вЊ­†^ дЖЙF е!'<9 ж2Z йНK лšU мЃЎ> н‘”ђJ р‹Žq) т—šН- у_e…s фSVб3 чMPЏ~ щY\ы( ъ~„C& ыruœ юlo2 №x{џ# ёМТЁ0 ђАГ†M ѕЊ­ЖI їЖЙ јЃВg љ‘”. ќ‹ŽV ў—šb/ џЃp< ‘”ш> ‹Ž)e —šg6 @F   47{ .1QO :=ш0 ЅЋ ™œ№h “–є; ŸЂнW @F–- 47O2 .1ŒY :=/S $*w H! q !!2+ "# $цѓт# &џ Še ( ЃH )іќv ,веp{ .йтЂ` /]c/8 0JZ" 3ўѕ* 4''-'. 6ѓ&'7 8''дV :'$'l ;' 'K. >с&ф&Av @ш&я&№@ Az'€'H CF'U';h Ea'l'м+ Go'w'№9 HX'^'I} K4'7'’ M;'B'Q Nкр* OЌзW` RšЁV" SКР­8 U“–­8 WŸЂ­8 Y™œ­8 \Œ?t ^ЅЉ?t `ЌА?t bГЗS cї§”u eНЮІ gлшZ iыєM jбиВb mЊ­X( oБЙ{, p]c  qAZн' tЩаЇe uѓљy vй№HM yw~XQ z"Йf |оя7y ~ў jH €l1 ђћв  „ЩЬmW †ак4_ ‡ЏЕD; ‰o€є ‹&V  Ќ+ Žƒќx ‘Y\жf “`kTh ”LR•B —7;§d ™>B§d ›EIQ œМТЄ& ž|Џ5  Њn Ђ­ЙˆS Ѓšˆ= ІeiT ЈmxE Љк#р#.| ЋЂ#Б#/ ­П#Ъ#џm ЏЭ#з#т  АД#М#"A ГŽ#‘#/ Е•#ž#Њ\ ЖAG! И&)! К #! М! ПэD С,0эD У37эD Х:>C ЦДКФ Шk~Аz Ъ ;C ЬЃБяp ЭŒї) аNU7D вYge9 гЄЊ‘\ еn}ъ7 зŠ•p~ й˜Ё$j ꈇ€c нZ^Щ  пbjЛM р оQ уєј$ х$ чћџќN шX^šJ ъ"1 ь>IЃF юLU{ я4; $ ђ єЉi ѕ*0‚2 ј. њ . ќ#'C §ш ю У\ з о 2~ с х % Я е … У Ц  Н Р  Щ Ь П. А Ж ш8   ­ ЈE j q u3 gmX LOX :=X FIX @C‡q `d‡q RV‡q Y]ћu ФЪдg !ˆ™:" #ЇДZ %ЗС@o &œЄєk )twє\ +{„§A , ­; -єˆ 0дл”# 1J"P"/: 3""юX 5-":"я 7="G"оx 8""*"Г  ;њ!§!'I =" "ЬP >4!:!?I @ў !G B!%! D(!1!p E!!=f Hы ю : Jђ њ ; K MСд†H OтёV QєўЂ! RзпM UЉАnE WДН&f Xќ%3 ZЦеГ \тэT- ^№љЙ/ _ипj bБЖЮt dКТœ< eTZ# g-{' i:EiZ kHQ4  l07_ o 27 qЎ rфъ‰ tДСz  vЭж/G xйсzD yФЪъH |ЂЅ:\ ~ЉА”  ?El-   _ ƒ%0Э$ …3<5Y †"ј' ‰іљЫz ‹§dl Œщяђq ŽЋМЛ% Ыи~| ’лц 1 “ПШ7U ––™  ˜Ї;l ™†ŒdV ›>Qƒ8 cr@x Ÿuƒ;n  T`ЗN Ѓ&)T Ѕ-:†> І)/G) Јѓ‡z ЊдA Ќ&‰f ­ >0 Апу(T ВчяЦa Гг'й'0 Е›'Њ's ЗИ'У',2 ЙЦ'а'Ё2 К­'Е'ДT Н‡'Š't ПŽ'—'WF РbhŠW СR_  Ф#чb Х„Š' ЧP_ 7 ЩkvUp Ыy9w Ьbh§[ Я=Aу бEL|o ве л Ѕ гЩ Ь  жУ Ц Št иЯ в хi йвиПZ лЄБ0 нМХ’b пШЯЋ? рДЙs& у“–н хš ^ ц(“(Ёc шW(f(Аt ъs(~(‘: ь(Š(m эi(p(Žx №C(G(S  ђK(S(ъL ѓ•›е@ ѕ_nnm ї{†С& љ‰’Џs њqx  §LOй џS[ЂL / 5 ?H  , 5< щ № Љ* 06ќ" ѓs #Е &- h > ёєэj јў9s Ž,”,жu Z,i,L{ u,€,b> ƒ,‹,м l,r,чt H,K,З+ O,V,L^ 6(<(‚ !і'(jf #($(ќ& %'(3(‡; & ((Ц )р'у'ѕz +ч'ђ'л ,‰Аk .K\QV 0kxžP 2{†И, 3_hX4 669г. 8=G‹7 9Ж М ‡l :— Г тF =ѓњЅ4 >ел  @ЂГ{ BГТ‹5 DХв]= EЅАУE Hx{6[ J‹Цr K~ „ ЩD MP ] `8 Oh q аs Qt { I R` e >3 U? B Ы WF L М  XMS§ Y3J  \биŒE ]Њ)А)%? _r))|9 a)š)ƒv c)Ї)œo d„)Œ)ЛU g^)a)l ie)n)P j~„ D kn{Тd n8?п% oQ%W%ћ q%*% s7%B%й; uE%N%Ш4 v-%4%* y% %x[ {%%юB |RX ~)8 €6C>E ‚FO”k ƒ,3ѓR †Œ` ˆ ю~ ‰Яеzr ŠПЬˆn ‰%] Ž›+Ё+Ю= _+p+mK ’~+‹+Ь ”Ž+˜+Ы2 •s+{+”. ˜K+N+ šR+[+žT › ћ  žі § iB  ч! Ёj*p*щy Ѓ.*?*Юy ЅM*Z*г1 Ї]*g*Ш6 ЈB*J*"B Ћ**W ­!***] Ў4 : &4 Б# * ^% Г- 1 |@ ДE K Є6 Ж ! Є6 И$ ' Є6 Л  Є6 Н* - эG П0 4 эG С7 ; эG У> B ln Фћ$%з{ ЦЧ$ж$b Шт$э$ЊX Ъ№$ј$+ Ый$п$€? ЮЕ$И$OW аМ$У$л_ бœЂ\s вˆ™C  еhoP жК Р - йД З ѕ{ ккрZa мЄГP оРЫco рЮз+i сЖНo ф‘”R ц˜ –p чъ(№(ИV щЎ(П(е9 ыЭ(к(sy эн(ч(ъ6 юТ(Ъ(Щh ёš((™ ѓЁ(Њ(s єQ)W) 4 і ) )0. ј0)?){p њB)N)t_ ћ#)-)ъ4 ўї(њ(l ў( )ou -3SD љ8% Пi "*fw  —A чъv юѕЗu рцх дзta Юбm кнВ Е Ъ7 @О С ыT A2 8 U Cі w\ E " Ш# G% / „R H  3Q KтхФ) MщђY@ NpU OёџгC RбиёI SЅ Ћ Б= V” › " Xž Ђ a\ Yм т т \Ч Ы т< ^е й т< `Ю в 2 aз*н*Z c*Ђ*Њ# eД*У*эS gЦ*д*ЭJ hЅ*Б*  kw*z*-^ m~*‹*зq n›-Ё-Ш# pW-j-ЗC rz-‰-Žy tŒ-˜-H# um-w-2P xA-D-j; zH-S-tA {Š!!љw }T!c!"J p!{!Гq ~!‡!кn ‚f!m!9 …A!D!0 ‡H!P!Дw ˆэ!ѓ![ Š­!О!p. ŒЮ!л!Њy Žо!ъ!Ј1 С!Ы!, ’—!š!Ёr ”ž!Љ!Љ7 •>+D+В9 —њ* +\J ™+,+r  ›/+;+5  œ++Рo Ÿф*ч*t$ Ёы*і*з ЂDJГ< Є Г< І#&Г< Ј),Г< Ћ+6 ­/3+6 Џ=A+6 Б6:цU Вž"Є"tX Дj"y"›  Ж…""У| И“"›"NK Й|"‚"^  МW"["E* О_"f"} П…ЧH СX[ЧH УdgЧH ЦQUЧH Ш^aщ Ъquщ Ьx|щ Юjnл& ЯLR} а.I†% гЬг№v дtz&@ зcjjh йmqГ3 к;,A,Nm мЬ+щ+э, о,,“g р!,8,и/ сь+,RT фЈ+­+k" цБ+Ш+it чСЧQ5 щ“ О} ыЋДРF эЗО  юЃЈЌl ё…ЪG ѓ‰Њh єЮp іуђIB јў Zr њ 8 ћѕћЅ" ўбдZ ипЂ| с,ч,! ­,М,Ь  Ш,г,ЛW ж,о,V П,Х,71 ›,ž,бM Ђ,Љ,SA R$X$ - $$зw +$<$Ђ ?$O$ѕ $($G: ч#ы#Лx я#ў#(! ‰  А y † ) C J 85   & #ќ  N+ % K7 &#‡#Cj (E#V#Ы *d#q#4m ,t#~#Џ: -Y#a#=/ 01#4#с 28#A#ѕ+ 3ќ? 4ёџ-z 7биM8 8$#*#пk :Ш"с"!Y <ї" #$ >#!#§Q ?ф"є"™9 BЋ"Џ"ИJ DГ"Ф"} EЇ ­ fq G† ‰ fq I€ ƒ fq KŒ  fq Nz } ,r P  Є ,r R™  ,r T’ – .M UH N ъc V8 E d Y A4 Zm s Ѕa ]\ c сl _f j н `ю є љ% aт х Ќ dм п а: fш ы јO gSY‹3 hGJDb kADSN mMPSy nЈ$Ў$•N pr$$[P rŽ$™$М tœ$Ѕ$”[ u„$‹$Bg x_$b$x zf$n$QS {4-:-ъ }--Э( -&-Аp )-1-ц^ ‚--9q …ю,ё,#g ‡ѕ,ќ,|: ˆV \ р ‹A E ;L H L ;L O S г   §W “љ c •  ь= – **€+ ˜Э)о)v šю)ћ)KV œў) *P с)ы)ЫB  З)К)жv ЂО)Щ)Y Ѓд&к&9F Ѕž&­&:c ЇК&Х&;( ЉШ&б&  ЊА&З&R ­‹&Ž&х Џ’&š&sQ А|‚ЦL Бps8 Дjmь5 ЖvyЩ Зkq~J Й7FЋm ЛR]"/ Н`h|P ОIOЧX С$(_ У,3 Фу щ а* Хз к O| Шб д O Ън р ˆ~ Ыо ф ei Э  Б C ЯР Э z ба л §_ вД Н М[ е‹ Ž K$ з’ œ Д( иV\Ži к"1nS м=H‹" оKS“w п4:ы] тSE фj^ х~&„&„L чA&R&Ў щ_&n&X ыq&{&l} ьU&\&р} я,&/&le ё3&=&t ђЪа u ѕЙРшa їУЧ(o ј s љюŽO ќŒ“‰6 §чэE> џБРJ Эи  лф%# УЪk# žЁ T Ѕ­ЅR &,ќf ПR #ПR CR rxA DQ \eєM ho\v TYQ 36^I :@Х @ !ЦзЪ8 #хђqj %ѕџД &ктў )ВЕнV +ЙТщP ,HN v -8EYd 0 Щ0 1ЅЋі| 3q€ 5Œ—j 7šЂ'K 8ƒ‰N  ;_bЫ5 =fm‰] >‘—в? ?…ˆVC B‚Ш D‹Žж> Eu{p FilЇ} Icf" KorA LФ Ъ eY N   eY PЃ І eY S– š eY UЉ Ќ нY WН С нY YЖ К нY [Џ Г ЄK \ўFJ ]єјі$ ^‡”3 _КУХY `hqW aЮ б  ba d р- cЪЮЌ@ d3 eр у š+ fхэЙ6 gХЫˆm h/2\ i€ƒyO jц № ^j k  | l^b’( mЧЫќ nŠ Ž —$ oПЦЛn pV]%; q: = Ќ) rђ і bR sЧЫF tљ ќ )H uR V = vэ ѓ БQ wЏГt5 x†€ yљќККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККККК ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ "%‘#Ђ#J=(. "%‘#Ђ#Ч(. "%‘#Ђ#$F(. "%‘#Ђ#э (. "%‘#Ђ#=N(. "%‘#Ђ#е](. "%‘#Ђ#оO(. "%‘#Ђ# a(. "%‘#Ђ#Т_(. "%‘#Ђ#„B(. "%‘#Ђ#иj(. "%‘#Ђ#P=(. "%‘#Ђ#хK(. "%‘#Ђ#˜)(. "%‘#Ђ#и~(. "%‘#Ђ#a(. "%‘#Ђ#нI(. "%‘#Ђ#w(. "%‘#Ђ#Te(. "%‘#Ђ#]r $зяЭŠ4@$,-ЭŠ4@$TUњƒЛ %„‰ђ (w~Юšљ )‹шаЎ *€‚ў‡ ,nu .hlгВ 0p _Ћ 4ћЁ…Л 7" W C­ 8ёјSЊ 9юI‚К ;’•Ш >—š@—а @fnэЈ BŸЂg›і EY]1œH G`cїЏ HзрFА Jš  ТЁ LзнЁƒ Nпт Г Rmнш† XріЏ YЗМД› ZТЧŸЂ \Б( ]qtБ ^У Ы UƒК _тчяšФ b„ ‡ A’Я dDd­ 7 gцъІ hœ1‘ jр т 0Ÿ kХ Ш @Є lэ№э mRUsˆ n|ћ‘ q~  ^­ rђv– xы є Z {™/šЪ |36m”Ъ ~nqрŒ €t~Љš! ‚жофˆ †@ ­Ј ˆЫ Ю Й€ ‹  Є #™М ŒЭ н ˆ‚ Ž 5 Иž3 8 I žЊ ’в , 7І •‘–™ ˜р  ТЌ ›<kZБ n§OЅ ž':QšЭ ЁН Т Г† Ѓ;• Ѕф щ kŒ Ї  Д—Ш Ј9‚Э Њ‹ŽI‰к Ћ…ˆŒšб ЌЃˆу ­y|Ђ ЎІ’ Џ‚UЈ АЕ К ч—ж БЇ В % В8F(“ Г6€Ё Е=:– Иƒ ‡ іЂ. МhmЖА П]c   ТW[yВ ЧflЇ Ьnw@ Эdg?Ђ ЯwzzБ бqth—а г4j  ез к W… иКОfЃ мљ)"Ї н_bоЅ пП ш ј“Щ сы  Ѓ уV „ 2€ х‡ М Ј ч# < n щ[ { .•п ы? J "В эM X њ‚ я ЙЄ ѓ6;ЙЄ і=AЋЎ їŠ  л„ њ}‚œ‘Щ џ…Œя› “Š $1ѓœ Ÿ Ђ –‰  НР@Ї  ИЛЎІ AHЗ ЅЉ`Ї Rdf‰ P1Ѕ `sbЁ! uˆу”  јыЉ "СпЋЃ &з Ѕ (мХœ )• ˜ ўЁ +тѕў -4?› / |Ж“Я 1ЛОOЎ 3пцмŸF 5ЕŒ‹› 7ДИK 9щ№ё ;ѓ§(Œ =@HXŸ Bэ­ C•ЫќЅ EJ^ט Gw z г• IЯд%› KŸВ–Ѕ( N8?Щ­ PŠ,Ž R} € 0Ћ Wfm† Zю“е \q t У’щ _ЋЏЗЅ `“ b,?Ю dL S YІ fd h Ў iIZ{œ k?/„ mik,Б o]_ъЌ qeg(ž sac”В vBFь˜Ь x'*ж‰ф }QWh˜ BNЖЏ „ЄЊ4Љ ‡„БЉ ‹ќ!п  ŽRUwЅ ВЕ2 ’чъ2 ”сфxЄ –ЪвJ“Ь —і ‚ ™ЮтoЏ хљH™ ŸВЕѕБ Ёk€ ЃЄ Я &ˆ І vЎ Ј  М‚К Ћ[ n !Ђ ­$ЂБ Џ y’М Аџc‡ В†Ё™™ ИЦ§в КZcйž НЃФAЏ Пfq Фt‚Б•д Щ-N—Ы Ыб д …К Юѓў6Ё ЯKPвІ: вЗЫLŠх е_Њ­ зм о g“Щ й ˜о кІЉ: м –с н ЃŽž оЌЏwЈ рŽ–Пˆ сvyq†ю уЋБˆ”д х™Ј”Р чjŽєъ щЮдUž ы “Œ э@ a “Œ ю/ = E  №™ Ў tЊ ёБ С Љ ђ!0С‡№ ѕdЋ”Щ ј‹ “ пЏ љIUдЉ њX\‹А §ŸДP‘ш Ѓ)‰ k – •И %Ё  5у­ &&;Њ1  #=Њ #=Њ$=U˜1  3˜  3˜Ъ Аб1  б" б & ˆ„М )ъbŽ ,СЬC 0†j 3ЉКj 6Іj 9Ндє'Š#џ(Ћ#$" !•“‰йЅ'2‹L‹йƒб‹й‹йƒКИŠЭŠ2‹L‹йƒб‹wЌйƒК­ЋЭŠƒfЂ”€Ћƒ‰І„2‹L‹ƒйъйъйёВй+—ƒЋšЋƒЩ…ы…ййƒc‚ƒ‚Šc‚й1’йЉй’1’й[œАйkАьЁ2‚Ыƒнƒ‡У 2Гч ‡„Н2‚#‡S‡.Џн›ƒУЂййyƒ‡ ›1’ƒ]’ƒЎоjоЬйЎоКbЄŽ‘ˆ‡’1’‡­ƒ›–Е–Ю–о–ѕ–ƒВ-k‘2‚2‚М2‚rР‰‰йзЈйф€йƒЊ‚ƒQ€ƒЩЊй+—tšƒТЊ‚ƒТž•ƒž•йй+—tšйг†й•ƒЊ‚ййщƒƒƒƒƒƒƒƒййЃЁƒU– ОЃ6Ѓ LЃйпА№Аƒ Ођ”ƒЬЬy”ƒЬ™˜yййfЂƒbƒ”—йbƒ~…”…ƒ„Нч йƒQ€ƒQ€ƒQ€ƒQ€ƒ2Јƒ–ƒZ•ƒQВƒ+ƒƒ иЄѓЄƒ иЄƒй'й'У‘а‘ц‘й œƒєMƒйЛ‰йЛ‰йОЭљФƒтsйˆЇžЇЊЇШЇлЇђЇйЙПйџЦйpПƒ€ƒ€ƒгЃіЃЄƒ€йƒ€й€ƒ€ƒт“ƒ€ƒ ƒт“ƒ€ƒ€йLŒƒ|Ÿ˜ŸЎŸЧŸййAгƒRŽйї•йбƒОЭ1ИйщИƒRŽƒUЋƒMUЋƒБйH†ƒRŽƒю’Y йƒƒQ€ƒ|Ій3ЎКйЁœйZ„йZ„йZ„йZ„йНВКй™йі‰ŠŠ2Šƒ‰˜™˜Б˜ƒ‰˜Ёƒ]ЉoЉƒ„2‚Нƒ‰˜Ёй2‚ƒTƒƒЄйй2‚й2‚—ЏЈЏйr™йВƒ”€йTˆй•Ўм‚œШ/Рй™йЪБй铇йЬ™л™ъ™ў™šй™йŸŸй™йі‰ŠŠ2Šйі‰ŠŠ2Šй+—й+…A…йƒQЪјІйmŠ‚ŠйрЙй'УййWййй™Јйй–†й€й;”й‘йwžƒЗŒƒƒn ƒй”Ÿч‡йШ”ф€КйƒˆЈАk‘2‚y‘НS‡ƒQ€ƒž•љ­эЭƒŸ„ ЯОЭƒŸ„ ЯОЭэЭйŸ„ОЭ ЯйŸ„ОЭ ЯэЭйŸ„ОЭ ЯйŸ„ОЭ ЯйŸ„Р„йxŽ—ŽйY2‚ƒvГŽуŽvГŽvГŽОŽcГ KKо LLв MMrГ NN1є, IIЛ CCЮК bf№З twдЙ VZдЙ \`zЛ z{Г bf1М hlД \`—З СХЂНМ ЧЫЊИ ЛП(К 26yК "DHdЖ %JNљИ (>BхК +8<PЗ .,0Й 1PTИ 4VZМММ 7y}]И :ƒtЕ =sw0Л @nqDЙ C VНМ F"%{М I'*зГ LхЕ NЮД Q…‰НМ T‘•жЛ W—›Е ZЁЗ ]ЃЇ™Л `‹Ж cЏГƒД fЕЙШЖ iЉ­НЕ k  ГЖ mmqК nhkйАсrРƒРrРэЙƒ˜ЩƒЄГЗГƒЄГWМƒ<ДhДƒ<ДШЗƒ<ДаНƒ<ДжИƒ<ДUКƒ<ДЈКƒ<ДЖƒ<Д#Йƒ<ДЛƒ<ДxЗƒ<ДЖЙƒЄГ<Иƒ<ДъМƒ<ДˆИƒ<ДЕƒЄГXЛƒЄГnЙƒЄГ}НƒЖ МƒЄГќГƒЖƒ<ДћДƒ<Д7Нƒ<ДМƒ<ДNЕƒ<Д4Зƒ<ДМЛƒ<Д@Жƒ<Д­Дƒ<Д№ЖйзЕй€Чf ЅЅЧ_ЅЅoаH ІІяи K N ЂѕР ••м§Р ––ОР ““оР ””.ОР ˜˜ОР ——;ОР ššЛ ‘‘Њп \ ­ вH Ž‘—Э# ˆ‹ЮH ЄЇHЦO žЁЏЫ#  t…аH  љаH *аH -8 бH ТЦ бH ЛП бH еі бH ЊИ бH ЩвЃк. ”›­Ъ(  Ч д -УР $† ­ ЈПР '… Е (Ь# )з п :е ,( : :е .= J :е! 1V e :ељ 5 S :еФ 7Ц  :е  9\ ‰ :е ;Œ У :е  = % :еі ?M Y џШ( A' * џШ Dѕ$ џШ E№ђLШ H% C LШ J  LШ L  LШ O " SЯH QИ й  гH SD T dХР Uт ћ dХР Wў  dХР Y  яаH Z  ‹ЯH \м  {УР `W q ‹л ch ‚ јЫ e- A ЌЩ1 gтэ4Ш iЪо„ж kщ№„ПР lѓіЁм m`жH nў)ЮH oТЧ2гH q  ЭУР s8;iЩ u5гH wсцNи yљћeОР zgtКгH |ЦЬ6ФР ~ Ф ТР €vžЦ  ‚цщiРР ƒруuЮH „кн§УР †дз ХР ‰' ХР ‹ и  и џ и  ‘ьќ•ЮH •Y^›ж —17рк œCHAп  9<ПР ž>APЬ   он ЃTWон Ѕ$'он Ї"BЪ# ЉORBЪ ЋBЪ ­)/BЪ" ЏJMeЧc А  qЦW В`cUк ДЗн Е"ЎбH К юЪ Н.4ФСР Р%+ьл ХЫоЭ# Ч§уПР ЩОФуПР ЬЕМUм Ю ŸвH ајћХмј втіtй гЦЩЇдH еущйЭ  жьяєм йлсaл лњџЩЯH нЩЯH пђїЪ сˆŽЊй т‘”з ьy…з ѓIRз њT^з `jз  lvз3 =GуЬ ЋЎЅЧa ЄЈ(к žЁ(к —›УЪ Wm л %TювH  ъ"Єо: (™ЉЄо ,kxЄо 1z‡Єо 7Š–шЮH :лчщТР <ИМ\о ?ПиbвH AБЕЅЬ BЌЎMй! DQWyк EZ]YбH L7@YбH R,4YбH [CN+ПР ]ruЋЦd _lo+н a`c+н cfiЕХT eГЙъРР fМПСР kŒ’СР q”›СР wЄСР ЇАеH дз4вH ƒЮбѓЧ0 …ТХѓЧE ‡ШЫРж ‰W^rи Ž`fVдH ENVдH ‘@C?аH ’PU о ”апŽн( •„‡ИЭ# –JMwгH —;HнХ) š{нХ) œox^Ы# žhl^Ы#  P^^Ы# Ђae0Чs@ ЃЅЅЧ4H@ЃІІЧ4e@ЃЅЅди7 Є„‡jп ІžІ+иF Ї”›6дH ЈŠ‘з Ћ|‰аH@ ЌІІHЮH АБЫЈОР В",=Э# Ж.Gѓж Зшыей  М†ФР О Ц) П `ТР Рюё‡Щ1 СKз УгхдH ХЅЎТР Ч}›ТР ЪžЂЫдH ЬJlЫдH ЮosЫдH аvzСФР бЙЦ˜и вБЖЫ# еt ƒ ‘РР иА Ф GОР й­­ОаH кі/о лQ Z й@ мL L (й @ нM M j( рЎДj( уЖМѕЏ€­“Ў™ЕЭЮй€Ь†ТЬЬиЫшЫƒIХƒ+ХЈЏƒгЧ&аƒ€Ыƒ—Ыƒ-бƒ˜ЪƒэСAбйЬкйВУ& RУgУ™ЈйŽНУП?Ь„?Ь(жње?Ьње?Ь[е~е?Ь[е“еБе?Ьже?ЬIХ?Ь+Х?ЬBж?Ь„"ЩŽНCЩƒhШ„Шƒ„ƒфШƒ ШТШƒkЯй€йВУйœХй}ХййЅЯ& RУ›УВУƒЏлнлЬ"ЩƒЩЩŽЂ?Ь™ЈЬЬЬƒUгƒцУƒIХй€йЬƒёгƒfФƒЯТЄ ЌФЬ†Т$Фƒ+ХƒƒIХƒ€Ыƒ—Ыƒ˜ЪйХЮRУgУŽЂ‡bН2‚#‡†ТЬ‰Ьƒ/ТЈЏƒёгƒIХƒ ƒ˜Ъƒ|ЪƒlЪ”ЧšЦ(.ŽЂЬхбіб=РWРƒгЧMƒэСЬƒ"м2мAмJмŽРР=РWРƒмƒЯвƒ|ЪŽЂЬ‰ЬWРƒfФƒђЯƒЯТŽЂЬхбібTСaСpСС—СЇС(хбібС—СЇС(хбібЕСЯзС—СхбібЕСС—СЇС(хбібмјС—СЇС(хбібЯзС—Сƒ]ПƒгЧMƒ-бƒэСЬŽУŽ6лŽ]ПTСaСpСсо—Сѕоп$псо—Ссо—Сѕоппсо—Сѕопƒ Я7ЯƒУƒ“о7ЯƒŽвŽЂЬ–бмјС—СЇС(–бС—СЇС(–бTСaСpСС—СЇС(ƒ]ПƒиЦƒjнƒWнŽЂЬС—СЇС(ЕСС—СЇС(мјС—СЇС(TСaСpСС—СЇС(ƒ]ПƒfФƒЯТƒ Шйтж‡iН2‚#‡…дƒЩЩЬ†Тƒ+ХƒƒIХƒ€Ыƒ˜Ъƒ—Ы Є ‹пМЬ<зCзйxŽRУgУйОѓОmЭU…Э™ ‡bтЬ§йЄ ЌФМ†ТЬ~зƒŽНƒEТƒ/ТƒƒђдƒlЪƒ шФНиƒ&ЫAЫЬЇРЩР\ОоаBо!йCйvГŽўЩvГŽиЩ№џ lKс „”УшH МФll рР BBпЗР <<оР 55вР 66рР CCЌР 99рР ZZѓпР 33зР ??jрР LLZрР JJJрР II*рР GG1єР FFzрР OO;рР HHЛ ,,упР EEупV --iыH ggxњј ?OC№@ quC№ї@ Йа{№xx{№(гь(№"npы№ (}}е№(||№#(zzЋ№({{ё,(…си@ ёњ…с@‰‰т(т bс#†ˆфсю@ $ŒŒ т(%‘‘Aтш(&’’bт('““Дс@(ŠŠДс@ )§Œэ +a j MїF /[` і3 2jn™ы 5cg+ъH 7FIa§ ;  Уы <і ' ю ?г є nё B‘ • Uљ. FЃ а Uљ Iœ Ё Чњ LO W кь M6D7ћ R0 6 7ћ U9 < 7ћ W> A GъH XGaхщH ZъэКљ ]H L ђ _O R Xф a  Щт c8 ; ъH e@ C Пц gТЦ›ъH i36›ъH k9<›ъH n?Cу p2 P љ rS j 8ф vР о %х yь zm y т {ƒ†RєH ~cqЮэ ~sќ ‚ѕљЬё ƒ9 < ­ю „Ў Б Лј …О С Иђљ †г и рц ˆ 7 ˜ћ ‰Jя ŠЮ б дї7 Œ  фы :љ ŽШљ џ ау ’* / xљ •Z a ех —Щетљ ŸSИьу ЂичѕчH ІT o Ёј Ћd j Ёј Бm ˆ oю Гч № с До ъ •ю ЕЮ л ІшH Зq u ўр Иэ љ IщH Й№і<ц КС Ы 1є Лѕ § пр ОЛПюђФ Ф“™ ћ Щ ћ ЭћщH в!;ўћ д ъќ иЏ Е ?ѕ нЅ Ќ iэ рˆ‘€у у— š §ь чє ї §ь ъљ ћ ётм ь“ – {і яŒ  Ьф ђg m 6ё і $ bчH љћ ў Ўї ќс ф Eэ И Н йє х ъ |х "$žх ж м ѕёs  о у ї  &(Zј ў  >§ ю ђ ў |  ў ƒ Š iя  - Љє  2 5 ›ђ! #ѓ ј лћ &П Т ђі )К Н § ,, 0 bшH /ю ѓ Lу 2œ ž ц 5  Ђ ёѕ 6Š Œ }ј! 8*,Єя 9.0hу <˜ š ќ: ?& * є Bх ь ƒє G Чя J] d јї K24yыH NХ Ш ь TЫ д Ль Yr Ј bѓ ]Ў Ж Ѓ§ aE я c˜ Ѕ Uц hx • -с jm y rщH lqtnї nљ iь pшђѕ rwz“щH uC„шH x§  ъH |LQѓѓ sw5ю y|aђ ƒќу †ЋЏЮі ˆ Bѓ ŒВИј Ž+0Jь V ^ Ѕр ’к у ”чH •,9”чH —$*Ъю šФ Ы Wќ œ> P §ъH žЖ К ч   † 9ыH Ђ“ Ђ 8чH Є‰  иј ІЅ Г і ЉЈ Ћ 5њ ЌД Л ‰ѕ Ў(\х БTX†ё З$ @ Я§ ЙКЩЯ§ ЛЬхИъH НœЗ`і СC L Лѓі Х}ЈЫѕ Ц``Зћ Ч^^Їэ Ш__Eђ ЩЫљушH@ ЪТТішH@ ЫУУашH@ ЬСС$ї  ЯE Y )ц аАГ#ћ( бІЉ!њ вЋЎ+љ гœЃaы2H г4@гlm4@г„…W H@ гНР“г№№‡ !"<дс'$С,(&)*+ѕеШЬУЪУЫїƒ”њЋњэib№œШ/Рэib№œШ/РййК№ёМbХ№ƒээййКKсйЕСƒ…тƒ™Ј& RУgУ™ЈйRУgУйRУgУйВУМ„§Vћ1’ййc‚+юƒ+—c‚ƒ+—c‚‚Šƒ+—c‚йkАъњlъ;уVћ:щxћˆћ;уVћqћ;уVћlъќхъьЁi2‚Ыƒнƒ‚фžф.ЏцУн›цУƒъ?ЬIХ?Ь+Х?Ь[е~е;у+—;у+—ƒi]’т“ƒЬоEх>ьГтƒђqє№э—ќБќЧќшё щ щиђчЅ ь щъїЅ ьƒт“ƒ+—й+—•ќхъ;уњф€щШ”ъКё:щƒф(фйш=шŸ„;уШ”+щщ:щ;уШ”ъ+щщ:щƒ+—ƒƒƒЅƒƒƒйƒ9Съ;уШ”ѓ*ѓ+щ:щ;уШ”ъ+щ:щ;уШ”+щ:щ;уШ”+щ:щъйiƒbт“„чЃbZѕт“RŽƒ Ођй;ум‚йˆЇ&э0эй„чƒƒbƒb„чйbёфƒƒWёт“йb„чйb„чƒb„чт“ƒћєййТхUЋEхйUЋEхйй„ч„чйЬЬ„чƒbт“RŽƒi иЄ*ў;уъŒяƒт“ƒbт“йцУїйцУїƒWёт“йпАљФйbjЯйbеЩййЬоййbрЙƒWёRŽƒпА1Ий…Эч‡ˆйђПƒbыяййb„чйiі‰ЬЬЬƒb‰˜™˜Б˜ƒbѓЊѓƒВщР§~Ш щ3яйqц†цšц­цƒ™Јй}ХƒШƒ†ьйЅЯƒВщЮщй+…A…& RУ›УВУйї їйWюйƒђƒЙуъйёНƒЙу9Съй?јй™ЈƒХрКБчЧчйрчйцю§юйБчй&ыƒ™Јƒ™Јƒ™Јƒ™Јй7іLійOњdњйЏѕƒЏлнл;уЂёф€Ш”Кё:щƒы§ƒ†ьƒеъй+—Ш”ф€ƒЙу9Сзѓ щЩэЩэТх щКй7їfЂЬЬЬМоџ c  1єџ Л2 6џ UYЉџ \qwО СФѕО ЦЮѕО бйi О &рО )?Ј О t­Кўџ АгИО жёц О єƒџџ Bbбџџ erшО uЂ О „ЃО "’Ў™О 'чяџО ,ђRBО -БОФ О .ШЯВО /мф{ О 1нтАџ 4 "џ 7™Єџ О :ЛЪeџ =ЎИџ ?–џ AЇЋј О Bˆ:О Eекaџ GFNlўџ IQY?О K"й О M%-7О O08…О Q;CP О S\dћ О UgoHО WrzSџ Y}…, О _ю, О cфыж О dЭлiО g(/aО i›ПЋџ k`˜џџ mТн О oрябџ rђ­ О sCOЮџ u2@гО v. О w  | О xR]‹О {рцџ }DQЪ О S`— О chUО ƒ&A&О †kybџџ ˆ#bџџ Šщ j О ~‡oџ ŸЉ[ О ‘ЌОО ”СЭ О •Šœ"џ ˜+ О šs‡— О œIpКџ žŠžьО  ЁЋЊО ЃЎКШО І7жО ЇОР О Ј:F*О ЋGџ Ў!#ƒƒ‡]4]"ƒŒ ƒƒbƒпўƒсƒЊƒ­џƒўџƒƒг йККƒ„2‚Ебƒ„2‚ЕбйџйƒF1’‡F1’‡ ›1’“F1’‡(./(.%]ƒ…ƒ“ўƒbƒпўƒaƒЊƒ­џƒ) ƒyƒ…ƒ„2‚I Ебƒ„2‚Ей]ƒŒƒлƒ3џƒ< йККƒƒn џџй]ƒЃЁƒы ƒЙ ƒ|ŸйККƒTƒ]ƒ”ƒ йККƒ]ƒS ƒCЩƒхƒйККƒn Вџй]йККƒРџ ""оџ !!в œРџ %%Л ƒ1џ ЊЙ^џ ЊЙ^џ ЋЙ]џ  33ЌО  11ѕО  ..jО //бО ,2бО #)бО  бО цџ ›Ђ~#О ТШіО `e џ F]fО !5=Gџ #@H)%О %KQAџ '†ŒJ!О )ЅЋО +ЙПSџ .ЎЖІџ 1˜џ 3Ыб]џ 5дкhџ 7ну&О 9цьeџ <яіџ ?љn"О A к О C †О GTnДџ Iqw="О LzƒЃџ NЃџ SCБО U=DБО WGPPО Y :йџ [џџ ]Um"О _˜ ž , О bЁ Ј О d • НО gа з џџ jк с Oџ lЧ Э жџ nД К 3џ qН Ф чџ sЋ Б џ u# * њО x- 5 З О z Љџ ~ф я Tџ €ћ  fО ƒ *џ …ђ ј <$О ‡| ‚ nО Š… Œ џ Œs y %О ŽB I ђО ‘L T э%О “8 ? џ –  ъџ ™! - >О ›0 6 џ   џ Ÿ` f $!О Ђi p ŽО ЄW ] œ!О Ѕux"О І  #О Ї  bџ Ј„bџ Љu!О Њ{~u!О Ћ‡Š™џ Ќ јџ ­ќ рО Ў“љS О ЏjlS О БorЕџ ДЁЕџ ИАћШ#О МˆШ#О Р~…Ш#О Уv{tџ Х]}*џ Ч,Ÿџ ЫLZŸџ Э/IF&О б4R6О г€Œƒ%О еšџ зUbї"О иЄЫџ к1Кџ нЪ&#О пŒ‰ О сepБ%О уs~Iџ х]~qџ чЁОЎ!О шСШ:џ щ)šџ ы+Z@џ эžЕО юџњџ яНПа!О ђ 9О єЇА)џ їРт­џ љГО€џ Ы Сџ х§]$О  ;pzО  zО р mџ н№"О ’•M О —š О 55пО 22lе1О ЅNеО "ЅNеО'ŽЅЖ"О *qŠўО -ТШп"О .44ЩО /ІЎі•эЭйаЭОЭŸ„йаЭОЭŸ„XлXлч+Af}ЄКFЊ#FЪТ6Q€”ДЮx›]%ЁiƒFEFFЁЯFЪТ@FŒF˜F3&Хс˜ŸХс‰ЎŸХсЁ™"Хс!Хсї•ŽНХсВтХсЄХсЁЬ™Ьі‰ŠŠ2ŠМнмМєМнмшєМК†НЩСНЪТрЙНШНпbЬНЪТЉЯНЫРНУХНЪТбНдНŽЦНЪТЕЬНЮНЦлѓТНЧгНЪТўМНEзНmдНЪТCУНtФНЪНЪТцШНZбНссQвНлщбНЫНшжН4аНЪТёЪН АсйŒxзЕˆ!ЬЬj й/РойЩоїйо#їЬїйї#їЬїй$їЬ‘ŽНMŽНЛŽНЯѕЛŽНc&ŽНВЪТVŽНž%ŽН4ŽНйяŽНдŽНцK#ŽНЄ ŽНг%ŽНМlƒ“ЬшМКƒ“МйŽНя!й€ƒb№Hƒb№йŽНЕ…ЭЧиƒb№iйn$€$H$Є$НМ$р$™ŽНЋ™ЮЋм‚ŠЂƒєƒєXлXлэЭйŸ„ОЭh#аЭйŸ„ОЭh#аЭйŸ„Ъ"ЬŽН XллS'№999'№ 9f"R лрыU ЃO\ !ЊЮ›I )o‡ЕO 3Ѓ‡M3˜Z <щV<u\<ЊЊdA" Eе№і; MїХIMooпOMg'№ U0уCU99lM _b'џ gЊтD ˆЉћW ‹ШX Ž  с8ŽiiФ8 —iž)<#—*D—ЉЉ< ЄxB2Єˆˆy1 Єї0Єї0 ІI1 @ Љ-2# Е  ^@" М  О7 У  …4 Я11№: ж11m4 н11>)нџџџџ^/ с6X&S єˆУ™- іХеъ-іШШЫ-#@ њШдЬCњ}}—L џzЁ'џџzzА- џџџџџА-"џџџџџё&џ џNNЊ& џIIф&џ џMMГ&џ џJJ'џ џPPХ&џ џKKд&џ џLLЛ2 џGGš&џ џHHњ&џ џOOvK џ‰ѕ? џ ",ѕ?# џ .4@\ џм т @\џ\`К: џх ь К:џnrCY џ!Ю к CYџ%bf;Zџ)Љ­;Z џ-  ХW џ1  ХWџ5ЏГ\џ9ЕЙ\ џ= & О,џAhlО, џEЗ Ь UџIЃЇU џMђ  V- џNYYj-1 џSy†њC џTVVC џUUU|- џVWWS'4№@џV999'4@џVщъ9'4џ@џVЊЋ *№H"џWWXW*№H"џY]^.*№H"џZZ[~*№H"џ[`at)№@ џaGUt)№@ џe>DN)№џh<<Э*№(џieeЄ*№(џjddЄR@ џkппuR@ џlооDR@ џmнн0WH"џn™œ’WH"џpЁЂ]WH"џqžŸ^V@ џuЈ Ъ ^V@џy•—,Vџ|’’]H"џ}ДЕq]H"џКЛ<]H"џ€ЗИz^H џУЦА^@ џ‚ШЭТ\@ џ†u ~ Т\@џŠАВЄ]@"џŒ€  Є]@џŽНН>^@"џБ Ц >^@џ’СС\џ•­­^@џ˜ПП^@"џ›Ÿ Џ žJH"џœ€KH"џž…†ЯJH"џŸ‚ƒJ@џЅuxJ@џЊ{}J@ џЏ“ Є фIџВrr‰PH"џГѓPH"џЕ•–КPH"џЖ’“*QH џЗ˜›dQ@ џИЂ4P@џО…ˆ4P@џУ‹4P@ џШ` q ўOџЫ‚‚0 џЮЮ в ЙK џЯд у 7 џбх ш ‡M4@џбZ[H"џвіљ9[Hџдєє9[H џжЮ н дZ@ џмэђŸ[@џпŸ[@"џть ї y[H"џхр щ y[HџшћўАZџыыыЦ[(џьь[(џэV4@џэu\4@џэЊЊїA#H"џюосеAH џ№ # еAHџђммЂA@ џѕ  ЂA@џјйк>B@џњыэ>B@"џќU s BHџўухBH"џC S BH"џ& @ BHџчщ}AџззfB@ џяя;?#H"џ ? Hџ ўў?#H џ } І л>"@ џw { л> @џћќ‚?"@џ  ‚? @"џ G [?H"џМ т [?"Hџ[?H"џх џ [?Hџ Ж>#џ"љљХI4@џ"ooпO4@џ"g'4@џ"pqg'4#@џ"g'4@џ"ЋЌg'4@џ"€g'4№@џ":;g'4@џ"‘\(№Hџ$))4(№H џ%&'€'№@ џ(i p €'№@џ+ !€'№@ џ.r x €'№@џ1#$щ(№(џ2..Т(№(џ3--‚(№(џ4,,)№(џ5//?K џ7ЧЫ?K џ9ЭбЗU џ:ю QZ џ=фЃ „Y џ>нсЮB џ? №.# џ@гл„B џB"DaO џESs\ џFJQЊ? џI„СчY џMu‚Ч: џPУХkI џQFHnN@ џV8JБN@ џYLZ2N@ џ\(6УM@ џ`!#œMџcэN@"џe\]?O(џfaaO(џg``њM@ џh%&†+№H"џiШЫc+№H џkЕЦ+№@ џoЎГщ+ @"џrжоЇ+№H"џuЭдє*№џxЌЌ2,(џyссeE@ џ~ЂЫeE@џƒФЩCE@ џ‡| CE@џ‹ОТтH(џŒЉEH"џЯайFH џŽуфiG@џььiG@ џ§ZD@ џ”#ZD@џ˜­­ИG@"џ™ёђтG@"џšєѕ H@"џ›їј9DџžЋЋрD@џЂБЕрD@"џІ1i‡E@џЈЫЭ‡E@ џЊЭиЃF@ џЌрсїE@"џЏкћїE@џВее-G@ џЕщъ§F@ џЗцчЬE@ џЙвг}F@ џЛноWF@ џНкл/F@ џПзиŒG@џСююŒG@ џУE@џШЗМE@"џЭkzkH(џЮ§§ОH(џЯOH(џаќќ1H(џбћћ™H(џвўўKI(џг,I(џдI(џеДD@џжЏЏДD@ џз%/ћW4@џз  ?X@џи…X@џйX@"џкчX@ џл  Y@ џм  с84@џмij:H џо‰–ы9H џрz‡!9@ џцnuј8џщkk5:@"џы˜™–:(џьp:(џэœœЏ9@ џюwx)<4 @џю*D4@џюЉЊ<4"@џюеж<4@џюїј?>H"џ№rs˜<H"џё9:]="H џђTWС<H"џѓ<=Ÿ=@ џєY^c<#@ џј$=< џћч<"B џ@Rу="@"џ`p>Y(џwwf>(џvvB24@џ  B24@џ11B24@џˆˆ11" y14#@ѕ1 * Н1#@  -24@   -24@   У2#H    33"H    ч2 H   Ž3H   К3H   Z3H   о3H   Ÿ2#H    3#H   t2 @   S2(  DA"@  /DA"@$  A"B %  Ы@"H"&  ѓ@"H"'  š@@ (  v@"+  Є8@1  Є8@ 7|8B 8  +8H"9  S8H":  њ7@ ;  ж7>  …44@>11…44@>11 5H ?11z5H @11.5H A11е5H B116H C11Ё5H D11%6H E11ц4H F11Q5H G11Л4@ H11š4K11ж;@Q11ж;@ WDSЎ;B X11];H"Y11…;H"Z11,;@ [11;^117@ d3B7@j11ю6B k116H"l11Х6H"m11l6@ n11H6q11>)4@q67y/ @ x<RV0#@ yWW0#@ zSVT@ €ЂЃSTH ЈЉДTH ‚БВS@ ƒ™šrTH „ЋЌлSH …œUH †ЗИћSH ‡Ÿ ,UH ˆКЛжTH ‰ДЕKUH ŠНО4TH ‹ЅІTH ŒЎЏZS@ Ž‹’6S‘‰ŠiU(’СС„U(“ТТ{S@ ””—ъ-4 @”ШЩŒ.*–аб/.@ ™ЫЭЦ. (šгг!MH ›žВL@ Ÿ€—CM@    щL@ Ё˜›'4@Ёz{А-4#@ЁА-4@ЁХЦоK Є^gФ0 ЇŸї.- ЈXXT,# ЎiwžO Аљ C Л  ІQ УЈ Й ./ ФфџнW Хь ь (@ Ц€€D@# ЧйU ШƒƒЬK ЩuuЈK ЪttˆZ Ыpp$4 Ь„„H-# Э‚‚?4 Ю4 Яoo4 аssЧY бllYY в}}Q4 г~~.L д  гW еєSЖ\)ZЭ[VXWY^]a$`Q_•З,g7fbdcF–,Дsnhjipt2r[kl•АВ•|Jzy"vCxCwБNЕŽ…Jƒ‚}~€ыTZ’(m‹Š‘Ž“”AЂі›€™—щЁžœЃ;ЏЬЈ#ЅЄщЎDЌHЉ;Н'ЛЙИЭРПОС‰MдDгщив)абезыж=“07I7H‘F/G/EСCї)4VТUS/L/NTM QOPR•K:]Т\‚Z[щYWїJ4dТcВa/b/`_ѕe'f/h,g*Sw(vzClQnpit2j[mu2kroqsxyѕ…Н+ѕ{.},|~–ƒ'€‚Kѕƒd,‚,,‡K’KВ,Мd,@М@@?Ьи,§,"-?Ьи,§,"-?Ьи,§,"-?Ьи,§,"-?Ьи,§,"-?Ьи,§,"-?Ьи,§,"-?Ьи,§,"-?Ьи,§,"-?Ьи,§,"-?Ьи,§,"-?Ьи,§,"-?Ьи,§,"-?Ьи,§,"-?Ьи,§,"-?Ьи,§,"-Xлƒd,‚,,Ё,XлXлXл Є ‹пМЬГ'Я'Љ)Щ)ё)ш'(ё)К9'S'ЬЬвRКК Є ‹пМЋVзVWЋVзVWКыUV Є ‹пМ‡=б=ЋVзVWЋVзVWйл]йл]ƒёгƒёгКO\u\ƒ>,>ƒ>,> Є ‹пМш'(ЯзoJ‰Jш'(oJ‰Jш'(oJ‰JК›IХI Є ‹пМ‡=б=ш'(ЯзoJ‰Jш'(oJ‰Jш'(oJ‰JКЕOпOš0А0йƒІ7 0?Ђ0?Ђш'([[*[ƒгЧ&аƒгЧ&аƒэСAбƒэСAбК˜Z9'КК 0?Ђ0?Ђш'(ш'(ƒfФƒfФƒЯТƒ ШƒЯТƒ ШКdA<Љ( 0?Ђ0?Ђш'(ш'(ƒfФƒfФƒЯТƒЯТƒ Шƒ ШКі;<Є ‹п„чш'(ш'(Г'Я'Г'Я'МЉ(Љ(>)йaKй…Dййи,§,ЏYњB/ГBй†O•Oййб?ф?й,cXZйЬqћƒ—ЊО–NйрNЊƒVZN\9 D9КlM‡Mйe:Љ(qћ КЂш'(O+ƒ,&аƒЯ+AбК'9'ƒƒ—Њ*EОƒ—Њ*EОƒVƒ ћDƒVƒ ћDЬЬЬЬЬ…D D9…D D9йййКD*DƒVƒ ћDƒVƒ ћDƒ—ƒ—йЫFƒF$FƒF$FйYGЋ!й!Gƒ/йe:йe:йe:йЏGйЏGƒ—Њ*EОƒ—Њ*EО‹HЬЉ(qћƒККЬcXЋXcXЋX4:КД\9‹пs99КФ8с8йe:Љ(qћЄ ‹пМ‡=Ьб=ш'(ё)К<)<ƒ=0=?=O=ƒ>,>ЬЬ51Г.„чV.ЬЬЬЬЩэЬМЬЬК-2B2К67G7]7f7z7К67G7]7f7z7МММК^@-2К67G7]7f7z7К67G7]7f7z7МММКО7-2ЬЬЬЬЩэЬМЬЬК…4B2К67G7]7f7z7К67G7]7f7z7МММК№:…4К67G7]7f7z7К67G7]7f7z7МММКm4…4ш'А/Ю/п/і/ 0Љ(К67G7]7f7z7ЬЬМSЬМЬМЩэЬМЬЬi.К&SRSЉ(qћГ.„чV.i.Љ( ш' 0Љ(ђKLLйш'п0Xлƒd,‚,,Ё,В,й=ƒ=0CUChCtCŒCœC0=?=ИCйИQлQUChCњQŒC R8/ьWIL8/Ђѕ= м§= žžо œœщ ššЛ' ””<`= ІЉža Зʘ`= ВЕba= ЌЏq_= CUсa ПыЙ`= БЕТa ЏС_= ‰<_= X‡р_= =A _= "ЗЦ`= %&;z`= ( $ƒa= +юл`= .э!a= 1Щы_`йЛ‰йЛ‰йЛ‰ƒ_Б_ч _`ќa bƒX_sƒX_?ƒX_sƒX_Шч йџ_Y й&_йџ_Ё ƒџ_Y ƒџ_Яй§`X_ƒDaџ_м§= KKо= JJ:b= HHЩ= LLGb= MMЛ BBPb= ^aїb= pvkb= jmŽb= dgЎb= W[œc= Ž–Yc= y}Yc= €„Yc= ‡‹Fd ›Ѓзb= ВЬ d JUщc= їGc= фє:c= !Яс,d "ІЉid #ЌЏ ‡iƒ2‚§йМЬƒПcƒjнƒWнƒ{ci„UйƒƒУ ч йєƒ^ййо= ˆˆв= ‰‰Ђd= ††1є= ‹‹Л €€гf €j) .<ze= Gi_hl lvіf y}Їj ?D;ke –˜;kf ›ž†g" ЈОkW Сеe= юќe= рыe= Он^it žЛљgE ’–f= !џюe= "™›чhN #КЧ=g )Qr„f= -'7!kd .џiS 1ENСh 2АЗ•e= 7кш•e= <ыќ|hM ?:Nbk_ BgBf= D$*i  F _g IСюдd= Kёѕ&h( MŠОТg_ Pw|Тg# T‡єi) Wњg Y)цjO [ Аd= \Ÿg ^ЪйЩj) `#CЂiT b ­ЄhD cPZBiD d]dеe= fмы^f= jю‚i( k  уgA lŽŽj oЁЅƒj 8jNjvjjƒй=ОКƒUкj ƒb№ƒb№ƒ7eƒъƒPeƒеъrРƒ7eйƒjѕєє ѓѕFѓƒЅfНЙfй—ќБќЧќЬrРƒРДeФerРы§ДeФeƒjѕссй=ОКƒ€Кй€йЅfЙfйњdƒDhНUкНUк$эЙНƒb№йjѕƒjѕƒы§ƒЫiƒйƒUкƒUк$vf-v€jѕrГ SБ HZЬЋ  бЋ $6жЋ :LќЋ PbNЌ fxXЌ |Ž|Ќ ’ЄЩЌ ЈК­ Оа­ дцaБ ^pIЌ ъќSЌ wЌ (ФЌ ,>­ BT­ Xj7­ n€Š­ „–н­ šЌЎ АТ=В t†ўЌ Ци ­ мю2­ ђ…­ €’и­ –Ј§­ мю8Ў ђЎ œЎ ЯсЋЎ !Q c PВ "Šœг­ #g y ДВ $ ВєВ %ЖШgГ &ЬоpГ 'тєtГ (ј Л ( в~ )юєЁ +ДУ‘r" -Яоƒ  /сыэ˜ 0ЦЬu 3žЁKН 5ЅАhЎ 6?E*Џ 8е :&1Ѓ  <4<_Г =#pœ @ћўч“ B ?’ CПХ} DИМŽ GЎЕЫ H#аІ JдчtМ Lј ў‹я N QБ Oъѕё– RЛО§r) TТаšŒ U06.m\ V-Ÿ Yби)Ѓ Z9‡ \бт.• ^яЉ `рБ aхьЗ dЙНР} fСЭ*Є g‹‘ИЋ iO`Ј• kn{ЇК m~ˆSn\ nckщЛ q:>і sBKЕ t-3›œ vљРК xd z"*4œ { t€ч ~чъдŽ €юѕwž љџ—Ђ ƒос—Ђ †ЬЯ—Ђ ˆве—Ђ Šил p( Œфш pТ Žђі p/ ыя6Љ ‘. 4 cЄ ’" % Š •  #w —( + VЉ ˜№ і ц” ™ф ч hq œо с my žъ э – Ÿ_e‡Ќ  SV…И ЃMPЎy ЅY\`{ ІШ Ю 9{п ЇМ П ї­ ЊЖ Й ц• ЌТ Х И| ­a g т ЎU X –u БO R ˆЇ Г[ ^ 4Ђ Д ! я Е  Йo‘ И Дta К  Ž ЛB H 7ž М6 9 еž П0 3 §И С< ? }Д Т: @ хw У. 1 ŠЄ Ц( + ˆ Ш4 7 ~ Щє њ Њ‚ Ъш ы Б Эт х ЄsW Яю ё QЊ а  гrT б %А д  šv ж  ђ зx ~ ‚ иl o 5Ќ лf i СЕ нr u <‰ ое л йtE пЩ Ь вЋ тУ Ц sn\ фЯ в †Ј хY _ w цM P яЁ щG J ТЉ ыS V юƒ ьЖ М Г™ эЊ ­ Њ №Є Ї uŽ ђА Г )Š* ѓl r  є` c vЉ їZ ] y‚ љf i =~ њ€ † Ч/ ћt w –’ ўn q ВЃ z } vЙ # ) 9—   јp"   еy  ФА ‹ ‘ ipН  ‚ n… y | ЈГ … ˆ vЂ —  о}! ‹ Ž ^~ … ˆ ў€" ‘ ” К‡    Э‹*   &y § шВ  Рš б з *Ў Х Ш y‡ !П Т œ‰ #Ы Ю –› $ќ  Œ %№ ѓ х (ъ э žn\ *і љ еu +2 8 ф‡З ,& ) ,r" / # ђŽ 1, / Š 2M S ЩЁ 3A D œЊ 6; > Bvш 8G J „Ў 906;o\ ;$6ƒ ='-чš >Ѕ A 9 C .Ї DЌВљsf F~‹7И H–Ÿu“ JЂЉ3™ KŽ“Ÿ­ NmpœЉ Ptzѓ† Q`fЂz RY]EЃ UOVЮm\ V`f]Е X2?Rz ZJSЗЅ \V]ыЇ ]BG~ `!$› b(.ћu cˆŽСx eQ`я— gly6n\ i|…dЗ jcihІ m=@˜ oDMБМ p—еŸ r?Tб– tfƒš v‚”юЖ wWcte z"=” |&;Зm\ }ЛСц{Д ]Ž žЋDЙ ƒЎИ{ „“› Џ ‡kn}› ‰r{Л› ЧйvЊ ŒЯм“m\ Žч№@З ѓњ€{ ‘пф3‘ ”ОСС• –ХЫА —ŸЅВ ™q~‘ ›‰’КИ •œuz ž†эЃ Ё`cMm\ Ѓgm0z ЄыёкЅ ІНЪД ЈеоіŸ ЊсшЅ ЋЭв{ƒа ЎЌЏs) АГЙ…˜ БTZџ{ ВMQ:› ЕCJN– Ж)/^А И‘ К & œ Л ˜ ОџzЉ Р K• Скр.†§ УІЕ‡ ХСЬ5Б ЧЯз! ШИОрЏ Ы”—ГІ Э›Ђ№‚Ю ЮSYБr  а,<Е в9D— дGP>­ е/6\w и  І кКЏ лђјпx мыя:Ћ псшz рБЗг† тƒЛЙ ф›Є№‘ цЇЎЯЌ ч“˜Є†˜ ъruВ~Ш ьy> э>Dъo/ я Л ё%0xx ѓ3;^  є"Ј їјћЯŠЦ љџЏЌ њ‹‘Pt_ ќxС ў‚ˆЃ! џquŸ€ adм™ hm‹ Л С – ˜ œ Ÿ Д И Ÿ Ÿ Ѓ Ÿ ­ Б Ÿ І Њ m„ н у  Ш Ь Ћ…Н ж к Ћ… Я г oК :К фѓД џ йƒ  b іќœŸ #веG} %йрš“ &qw€­ 'n˜Й *=DЗŸ +ж -”ЏЗ /ЦхPК 1шџhЏ 2ВУу… 5lrЄА 7vМБ 8qwЩn\ :^eЇВ <hnшˆ  =W[a‰ @GJтЂ BNSЃ CСЧJ„ E“ М GЋДn– IЗО\И JЃЈЛ‘ M‚…gЖ O‰!“ Pš о› Q“—ˆЗ T‰sБ U:@а‚ W'. М Y17Tu Z $C€% ]х„ _ўЅ `ХЫtm\ bo†y|Ї d›ЎЭЇ fБТŠЖ g‰˜H“ jTWЎ‹ l[kЌ} mМТˆ nЋЙRЇ qu|ШЂ rо ф ЬВ tЊ Й Е vХ а `Œ xг л W‡ yМ Т Вƒ |˜ › Ѕ ~Ÿ І О ‡Љ„ M^ъЄ ƒkx y …{„v™ †ahєЈ ‰8=кЙ ‹AI{Œ ŒЉ Џ Ѓq Ђ І ў™ ˜ Ÿ \Й ‘+1ыЗ “ЧтщА •њДŠ) —(]}+ ˜хї-ž ›ЄЌ† АУ!” ž‹ ‘ =І Ё… ˆ •p Ђu{HВ ЄDQhЌ І\g+„ ЈjrР” ЉTYb Ќ04=s  Ў8@)Ћ ЏѕћXœ Афђa’ ГФЫыГ Д^d–ž Ж;ˆ И-FšЋ КI[œЕ Л*#Ё ОфчЁ” РыџёЉ С ’ Т§  Щq Хѓ њ Р  ЦekYМ Ш%6№‰ ЪFS К ЬVbФ„ Э9C­ а{u в!K† гGp еГШкl зкэyЋ й№џѓœ кЫзТ н˜œ™‘ п Џ^ƒ$ рX^  т"1F ф>IlН цLUУˆ ч4;МЛ ъЖ ь  эŸЅvЁ ю˜œН ёŽ•n\ ђЎД7О єx‡” і”ŸЧД јЂЋё~ љŠ‘Гp ќeh‡† ўlt›Л џЦЬЇ ПУВ“ ЕМЙœ ‹‘к­ @S—™ evмp# yˆe VbŠН %)ѕ -<+В x ~ “~! : K †— Z g уД j u #Л N W l‘ $ ( P‹+ , 6 <‚   рИ !  ’Б #  ’Б % "€ &ПХнК 'ИМ‹ *ЎЕSЂ +j˜ -ряƒК /ћ„• 1 ѕЙ 2ђјco/ 5ЮбƒГ 7ем6uj 8‘—‡В :]lhВ <xƒЄˆ >†Žkr  ?ouIx BKNБ– DRYюŠ EŒ ’ /š F| ‰ юn\ IF M Г JВ И И KЋ Џ ЏЈ NЁ Ј k† OЏЕژ PЈЌ№m\ SžЅ.… TіќbŠ VуъЕ XэѓŒЃ YмркЎ \ЬЯ“І ^ги/ _IOtЅ a$ВŒ c0;HЛ e>Fдœ f'-ƒˆ i/q k X l }Л nœЛ­˜ pдяœo@ rђЫ’ sОб?˜ v}€–tc x„˜?Ж yЋБй  {˜ŸЌ }ЂЈ]s) ~‘•^” „Yˆ$ ƒˆqts „знЩ‰и †ЉЖцŒ ˆСЪPЁ ŠЭд}ѓ ‹ЙО@Д Ž˜›ѓz ŸЅ7 ‘жмя’ ’ЯгЭЊ •ХЬž –tzRŸ —mqEЅ šcj}№ ›‹‘чЕ ]jЪŒ Ÿu~#Ж ЁˆяМ Ђmr Ё ЅLOEŠђ ЇSYŒ ЈpvmЇ Њ<KьІ ЌWbf­ Ўemyv ЏNTо| В*-„ Д18gЈ ЕGMГН З‰„л Й%6HЏ Л9DШ— М"[ Пюёo‹$ Сѕ9Ž Т@Fƒ Ф№ ўv Ц*ХЄ Ш-=в€ ЩЋ{ Ье й Пw Юн ь А ЯсчAГ бЋКЃš гЧв• ееоѕЌ жНФt й˜›r лŸЇTž мзндН оŸЎb— рМЧЄ— тЪд–x уБЙx ц‹ŽwŸ ш’›Hq щ#)L… ыѕBЄ э —| я Q‚є № ћl\ ѓфчЩЗ ѕыёЁД і ,М їќЏЖ њђљлsd ћ~„cš §0EаМ џXi™ l{8  HUЋЎ гz ,7 –Ј_™ ЧЫ.| ;I 4=BЈ блsO 7Ќ |ƒЋ kof• ‹ ’ XЎ КО‰; щ э W| |ˆv’ ЊЏЕž ЅЈŽЏ = @ tЊ — › EŒ “˜, ЖП`Л T]љН сьКККККККККККККККККККККККККККККККККККККККК ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ 1‘#Ђ#Ђ(‘(-pЂ(-p1-p‘( "%‘#Ђ#Iw(. "%‘#Ђ#—y(. "%‘#Ђ#ј(. "%‘#Ђ# –(. "%‘#Ђ#ДЇ(. "%‘#Ђ#ˆџ(. "%‘#Ђ#*Й(. "%‘#Ђ#ь(. "%‘#Ђ#Щs(. "%‘#Ђ#Уv(. "%‘#Ђ#Џ(. "%‘#Ђ#G(. "%‘#Ђ#Ѓ%(. "%‘#Ђ#vˆ(. "%‘#Ђ#›‚(. "%‘#Ђ#йЃ(. "%‘#Ђ#§y(. "%‘#Ђ#гГ(. "%‘#Ђ#%(. "%‘#Ђ#3(. "%‘#Ђ#Vў(. "%‘#Ђ#h(. "%‘#Ђ#(. "%‘#Ђ#gv(. ƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ#"й#"& ‘#Ђ#й€ ‘#Ђ#9Ÿe(9ŸЂ(9Ÿ}(9Ÿ‘( ‘#Ђ#Ь…‘(Ь…Ђ( ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ‘#Ђ#ЌБЅ"ЌБч1 ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ƒ‘#Ђ# ƒ‘#Ђ# ƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"в\ FFrГ\ DDpОЌ EEЛ2 >>дХ\ TХ  #Х  ‰ХС › Ц\ ЃЉkФС ’˜‡Ц\ ЯдуЦ\ шэаП\ №іП\ рх™Р\ зн7Т– ЧЬpТ– #љџЇТ– %фТ– '5:ЉУС *=CќС– -,2ЮФС 0‘˜XР\ 4›Ѓ—П\ 7#)lУС 9ЎГ’С– <ЖМЩС– >ПФTЦ\ AІЋ)У– CFKшУ EW\ёР\ G_dР\ JgmЭО\ LpuQС\ ONTрФС Q†|О\ T‰2ФС Wx~ПФб XOR€С– Y…ˆ>С\ Z‹ŽЌФС [gjЌФо \[^‡П\ ]ad‡П\ ^UXЪЦ\ _~dП\ `szжР\ amp!Ф bJLѕХЙОrХЙОШ?ХЙО=ПВХЙО5ЦЙОЪТФЙО=ПЌЦЙО ЧЙОєПЙОЪТ"ПЙО=ПЛРЙОЪТWТЙО=ПТЙО=ПЩТЙО УЙОЬУЙОЪТТЙО=Пй‘#ЙОй‘#ЙОnРЗПЙОссŽУЙОБСЙОЪТцСЙОqЦЙО=ПNУЙОФЙОСЙО8РЙОЪТъОЙОlСЙО=ПХЙОžОЙОЪТRФЙО=П АсйŒxзЕˆ!ЬЬШџггRSџННЊЫџ г  Щџ НЮїЩџ@ ЦЬEЧ ЂЂѓпџ   zрџ ЅЅЛ2 ššШ4џ@ гдRS4џ@ НОУЬ@ јћPЬџ@ счрЬў@ §ўmЬџ@ щьІЬ@ ѓіˆЬH@ юёПЫџ@ жлЭЎ@ фЭ( TЭ@ ЙЭ№( Э@ •Э@ Ю(   $Ьџ@ нпšШџ цшсШџ пф1Шџ Чм Ю _PЧџ !ыTШџ &VzЫџ )bŸшЧџ +ГХ•Чџ .†БНШџ /Yƒ}Щџ@ 3ЏЗ}Щџ@ 7ТТЪџ@ 8ЧЧ‹Ъџ@ 9ЪЪБЪџ@ :ЫЫfЪџ@ ;ЩЩ;Ъџ@ <ШШЗЩџ@ @КХЗЩџ@ DУУ%Щџ GППеЩџH IШеЩџH KФФJЩџ@ LССJЩџ@ MІЌзЪџ@ NЬЬ9Ыџ@ OЭЭЫџ@ PЬЬYЫџ@ QЭЭ_ ЫП   ЗЋN Щ-П0%,/2435O&О*П)j'(й„-ƒƒƒъЫЬƒжЭ{ЭжЭAЭƒ ьйГШќмƒГШјШй=ОКƒjЧјШ9ЮƒjЧќмwШАЧЬЧ‰Шƒž •ЫйШйАЧЬЧйšЩ&ыЅЩйšЩ&ыЅЩК-`ЪйšЩ&ыЅЩйšЩ&ыЅЩК ЩRSй€й€єЪ& єЪ& vЮЋ SБ j|ЬЋ > P бЋ T f жЋ j | ќЋ € ’ NЌ ѓ  XЌ   |Ќ  1 ЩЌ 5 G ­ K ] ­ a s aБ €’IЌ w ‰ SЌ  Ÿ wЌ Ѓ Е ФЌ Й Ы ­ Я с ­ х ї 7­ ћ Š­  # н­ ' 9 Ў = O =В –ЈўЌ S e ­ i { 2­  ‘ …­ • Ї и­ Ћ Н §­ С г 8Ў з щ Ў э џ œЎ ЋЎ !+PВ "ЌОг­ #/Aј­ $EW3Ў %[mˆЎ &qƒ—Ў '‡™ІЎ (ЏЕЎ )ГХЏ *Щл/Џ +пё>Џ ,ѕДВ -љ ’Ў . ЁЎ /!3АЎ 07I Џ 1M_*Џ 2cu9Џ 3y‹uЏ 4ЁєВ 5!gГ 6%7pГ 7;MtГ 8QcЛ2 8 ш 9щяљ ;ГТ з =ЯкЪь ?нцXо @ХЬoѓ C ЃЗм EЇЏУо FЖМ§у HЃЊ § J­ГЂї Kœ Жаe NŒ‡№ P“˜/х Q9?yр R-0уо U'*>т W36НЯР XX^вЩ YLOу \FIIѕ ^RUђя _<Bwх `03}з c*-йв\ e69нк f[aЎи gOR—њ jILpо lUXCљ mw}м# nknїц qeh­еH sqtкц tви‘љ wОСј yЫЯј {ФШОљ |PV<ћ ~'ї €4Aкм ‚DMЖд ƒ*1_ц †Ÿо ˆ эю ‰іќыѕ ‹МЭgд\ кчœщ ъѓЮљ аз”бЩ “ЉЌйу •АИцљ –œЂNћ ˜`qї šŒым œ™Юд  t|rц  LOБо ЂS\]ш ЃU[нї Ѕ'4т Ї?H`ч ЉKRWѓ Њ7<Їы ­u№ Џ#‹ј Аєњ­ю ВЦг№ ДочКї ЖъёPвЩ ЗжлЅр КЕИє ММТню НЈЎmљ Пtƒћч СšЭбЩ УЅюэ Ф†Œль ЧbeKн ЩipГх Ъ§ч ЬЩиdє ЮфяЕп ађњ@ф блс’т дЗК е жОХ›ЯР зЊАф йpт лŽ›яї нžЇ)я о„‹Dё с]`г\ уdlьт фѓљДу цБФђњ шгт-т ъх№ц ыЧаšя юœŸЫї №Ѓ­Шр ё цаe ѓефУй ѕ№ћ…ц їўоё јчэиѕ ћУЦ$э §Ъб ф ў?EЋЯР Lі )2ђл 5<гъ !&ќт іп  Щаe зн3ѓ Сд+о _fЇбЩ  ф№ ьљћ  ьЯР чє ќфђ ло$д\ тшг\ <Bsй ќГн !,rћ #/9&щ $lѕ 'шы™ъ )яјн *{ке ,MZПђ .en2р 0qxЯч 1]bYбЩ 4<?Дц 6CI[ж 7ЮдSщ 9šЉ­я ;ЕР*ї =УЫŠд  >ЌВOї Aˆ‹}у C–Ѕќ D+1ˆќ GXаe I$(Xаe K!(с LЋ Б Юз M• Ј 6ж P3 : Љѕ QЇ­–в\ Ss‚гњ UŽ™0ч WœЄцду X…‹ю [`dвя ]hoќм ^SY(ќ `hв\ b+@Gю dCP ђ e(9з hъэўы jё§д\ kНУ0е  m}­э ož­з qАКБж r“›си uhl–ц wpyя x йн zлшт |ѓќbзш ~џПЮР ы№ьф ‚ЪЭљ „бз ш …@Fи ‡аи ‰*3Њ№ ‹6=вЩ Œ"'ф яс ‘зј ’•gр ”[jžё –vЦп ˜„Œ•ѓ ™msРъ œILчќ žPWhќ Ÿ<B[к Ёzм Ѓ#.жє Ѕ19Єч І ‡я Љіљyщ Ћ§xг\ ЌDJ)і Џ3:+к Б=Aъ В # зп Е  ‹мG З  gђ И/5eи ЙЄ,хй Мш я Hє НнуПю П… ир СВЩјј УЬкcю ФЃЏЭћ ЧepРё Щtх Ъou9№ ЭZ^‰с Яhl‰с бae0ф вIOкЯР д$nі ж0;м и>Fќъ й'-<у мр о #ѓ пЏЕ„в\ с{ŠобЩ у–Ёmн хЄЌ–и ц“Цу щilыу ыpw&жј ь\bо ю(7 ж №CNŒэ ђQYЕг\ ѓ:@ёш і‡є ј$Ир љЈЎuя ћtƒЋћ §šУх џЅФѓ †ŒKъ beuє ipBь U[рл !0ѕр <Ggј JR^ъ 39#є mш э пш Юн`п щєЧѕ їџ"и рцеж МПябЩ УЪ‚аe єње "ЦгЏё $очЩм &ъёќ 'жлrњ *ДИкт ,МТ]љ -єњџѓ /Цг”п 1оч™№ 3ъёјаЩ 4жл&№ 7ЕИ5ю 9МТKј :БЗй = дх ?ЊЎдх AЃЇ—ђ B“™§ѕ D_nJй Fz…Ѓу Hˆр IqwаР LMPс NT[ѕ OЛ С ,ђ RЊ Б Ѓш TД И qч Uэ ѓ ­ѓ Xм у 5м# Zц ъ ;н [ФЪjф ]~“ л _ЂГМћ aЖСјћ b–ŸRи eil‰ЯР gpz]н h\b1љ j+чј l:K‹щ nNY[й o.7ш rGбЩ tы uX^vъ xQUКќ yMS6ц |8<і ~FJі €?CWр ^dк ƒ1Oч …?N’аe ‡Q[ъ ˆ4<xј ‹  ,ы с Žчэьы ГТЮ ’Юй<ш ”мф ь •ХЫ‚ѓ ˜ЁЄ ц šЈЏRс ›ПХ§ю ’’ш Ÿ Џ&аР ЁВМšй Ђ•Чт ЅknсЮ Їr{мы Ј:@э Њюь Ќ!,дй Ў/70п ЏРњ Вєїјк Дћ п Е” š `ћ З` o щ Й{ † Tг\ Л‰ ‘ ящ Мr x Ќє ПN Q о СU \ 9ѕ ТA G Œё Ф  dя Ц( 3 Вй Ш6 > 2л Щ % =вЩ Ьћўpе Ю го Ялс*ћ б›Ўщ гМЫCг\ еЮи­щ жБЙ™є й‡Šѕн лŽ—Yм мч э Aя оГ Т џз рЮ й ыъ тм ф ’ЮР уХ Ы eг\ цЁ Є …њ шЈ Џ ,ш щ” š xд\ ыZ k :ј эx … Tх яˆ ‘ Їђ №n u Мч ѓG J eх ѕN V Зт і: @ Xф ј  3ё њ! , d№ ќ/ 7 Пј §  й є ї 'ѕ ћ  ж  z€Ѕт :Mк [jSя mwЖз PX‚е &)бЩ -6Ѕп юєЁх ДХ]і впiм тыђ ШЯџь ЁЄ>ы ЈА—ы ”šNеѓ ZkRь !x…Жв\ #ˆ‘Hп $nu˜ћ 'GJеќ )NVxќ *кф ,п№жы .§ 6э 0 Эг\ 1ѓњ н 4ЬЯЧв\ 6глLд\ 7…Кы 8f|cэ ;юѕ7аe <#хг >щјPы @gЯР BЛ№ CћWё Fзк ф Hох~н Iw}ѓЮ K=Nqп M[hмѓ OktХщ PQXJл S*-Ъэ U19шж§ VЪаrы X–ЅЙк ZБМCђ \ПЧЯ ]ЈЎЇл `„‡"бЩ b‹’BЯР c#ь eщјл gті iЕі jћњ mзк’к oохmк pЪа ё r–Ѕж tБМ‡ю vПЧEњ wЈЎcь z„‡bс |‹’›ј }єњ*г\ €пуЧш ‚цъЧш „эёл …$ƒч ˆ Сс Š`е ‹”š6є Nc|ф rƒEќ ‘†‘Šї ’foіё •9<Иь —@JMш ˜,2„и šцћAс œ љќ ž)•ещ ŸўЃаe ЂбдVќ Єитіљ Ѕ–fу Ј|Пє Њ‚†Пє Ќ‰Gэ ­TY:и Ў( - Oу Џ(-ЊЮР Аї  Уф БЖ т Ўј Вž Є юз ГХ ж і Дтш5ъ ЕўКККККККККККККККККККККККККККККККККККККККККККККККККККККККК ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ#"й#"& ‘#Ђ#й€ "%‘#Ђ#iт(. "%‘#Ђ#rа(. "%‘#Ђ#г(. "%‘#Ђ#‘о(. "%‘#Ђ#Эе(. ‘#Ђ#"јЅ""јч1 ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ‘#Ђ#rаЅ"rач1 ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ‘#Ђ#HкЅ" ‘#Ђ#ІмЅ" ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ‘#Ђ#ЊсЅ"Њсч1 ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ‘#Ђ#ѕхЅ"ѕхч1 ŽЂƒ#"й#"& ‘#Ђ#й€ ‘#Ђ#КшЅ" ‘#Ђ#LмЅ" ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ‘#Ђ# ‘#Ђ#ŸіЅ"Ÿіч1 ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ƒ‘#Ђ# ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ‘#Ђ#‘оч1‘оЅ" ‘#Ђ#нсЅ" ŽЂƒ#"й#"& ‘#Ђ#й€ ŽЂƒ#"й#"& ‘#Ђ#й€ ‘#Ђ#Эеч1ЭеЅ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"ђ"?џ —œр ‘‘.О 8§Ќ Л ‰‰а ЁЅ(b ЈЌpў ЮЮљў ППз) UU‚ FF‡§ 77]§ ((чa  нноc  ььдs  ћћ!  Ъ_    dd/ ДСЁ іџТ ФЭYџ аеYџ ипђ 7?и ‚ŠŽ  PXФ #iq‚ &›Ѓ )' *  ,§N . 1~œ 2p{ <Ÿй џ ?BM— B˜ф E[f HtЗb KІБe N*4Ѕ PтѓnW Rяћnd Tлэ) VНЦO Z|˜, \BF, ]<?U _rzТў aЩйЕџ cX]Еџ eIU- g`g- ijoЖ jАЕŠf lˆŽц nИО p‘­№E t…] v ‘ wагl yјя§ €СЭ@§ ‚жмy „пѕA †№ ˆ]dв§ ‰&+€ў ‹SZ  #  ’b ”.1L –4P… ˜gk ™ААЯ šss•§ ›  ? œŠ %(Ќ) žЃe Ÿ_§  і Ё` ЂЋ Ѓ  9 Є  k§ І+6K  Ї  д Џ#Э А@ Бš›iљ2 Би Д›КЙЕ””6џ Жœœ–[жџњB\О\О\О\О\О\О\О\О\О\О\О\О‚§Jй…Dо™ЈЁџй‡џ‚§™Ј & ™ЈїК™ЈАу™ЈъМ™ЈЃ‚§™Ј0/йИ‚§ИQ ѕ/8AIYcsƒ‚§™Ј+џ‚§™Јcў‚§™Ј‚§™Ј"‚§™Ј™‚§™Ј™‚§ИQб=8б=& "& 8WйqйпўжџьџжџжџжџьџМŽЂ‚§™‚§Єў,ўSўйЄў ŽЄў,ў&ўFўSўcўй€йрєйcўйЄў ŽЄў,ў™,ўй€йрєй™\О\ОР§Р§ Р§Р§Р§Р§Р§Р§Р§‚§ИQР§ѕ ЬЬ5 0Р§ƒ&ЫцК?џ   NRœ //  /5В @ U`В @QQœ 4@/0iљ2 Х @ 34Ќ 11Й ::щ  EEF   FF” 2  RRз  ==–D  йК œ К _   КЊ Ѓœ љ  ss  ttЊ& rr  vv  uu;р ppЛ nnє ooЮ@ ЁЂЖŸŸ| МХN  вш†  ЇВ3 Чаl lw%  .j%  %  ,2 я§ џ$t !Вз$D #йё™ *Ol™ -BL™ 6nЁ` 8ЭцЈ >ЖУв @‹–8_ A,<“ D’Ё“ G„“ Jz‚Ц( MdxЫ Uи Ы WЛж `,b c*U( f™Дˆ hш*ZD i„@  w&W@  ƒ $@  ‡љі ‰j”іS ‹–Г˜N Yh7M ކ‰TA ДКœ 4@žX “ЃЏ›E •ХЫ~ –ЅЅ–2  йКЊœ Мєƒнмo{йšёєOКК= Y y š К= & К= Й о  ƒ ƒWЮК_ ‘ К с G кК§кК_ Йы Я '  G кййЭы#=ƒџКƒяЬСƒя!СƒŒяСйљСКЂ ѕ5J^КpКШЂ ѕ5J^КШpКp„йК_ y ‘ Б Я ы  ' G ` x  Ђ К_ y ‘ Б К с G ` x Ђ КЂ ƒ ƒWЮƒЫМyƒhоЋДœЎ ƒƒ yy }}9 % ~~Л ssJ  БДge ЖЙŠe Šрe ”—e ’b ЊЏ'e ™Ј– НСэ ‡   ФШЗe K ЪзЙ к3 %*L !" Є ‹пМЬƒ,&аƒЯ+AбMЬЬКЋ!ƒƒVƒ ˜ ƒ—ЊбƒmƒД]]ь ІЎч œЄ ]hж <<Ц ::Л 44B QXB  JNB  CG4@ ]^У@  Ќ­‘H ЉЊ@ ЂЃ§H Ÿ 4@œ4@ІЇm@ggъ@ {~ъ@cc*H jn*H``ХH vyХH!bb@%dd@ )€’h@-aa@@ 1•˜@@5eeiљ2 5з  6ДД‘  –  п ”[qˆqˆˆ4:ЬВ4:ЬВ4:M‹M‹MSMSЬSЬSƒ‹+5ƒ‹+5ƒ‹šЄƒ‹]5ƒ‹]5КcГ ГГо ВВв ДДuЩ ААЛ ЊЊ) LН)О 5=) $2) ?Jѕ ›Іѕ ЗСѕШ 'УдѕШ -ж'ѕ 3ЉДѕ 7 1ѕ :u' ;HWдШ @),­% B–™%Ш CёєЪ! Fp†Ъ! I`nЪ! LY^" Mx|" Nlp’&џ QAF’& T:?ѓ$ VќB)( X…% Z?E$Ш ]†Ь% _!i  a Џ" d,5 * g7=x j#*ь! m t! pэ# sMVч vDK! ymƒ\Ш {іњ(& }„# ~RYw# €.WA& ƒCPA& †3@б( ŠќC$ ŽФњ‘Ш “нd" —блГ& ›ЕЯн&! žXk  Ё[Е= ЃИєX# ЅrvШ ЇfjУ  ЊіU! ­чъ2# АЮх.Ш ГšЎ.Ш Еˆ˜(О ЖYcЪ# ИIM5" Й\kR% ЛOY' СnЁ' УЭрЌШ ЦГЫы% Ч%(Ќ(џ Ъ!Є  Ы25БШ Э,/ ЮЖ бњ&џ вЄ# д uШ ехшЈ$ ийсŒ( йђѕЯ$ льяAШ оЧЭ\( тОФ4* уадФШ фКК! хЙЙ§&О цИИƒ>)c)Š)‰ƒе)c)Ў)‰ƒе)№)Ў)‰ƒ>)c)Ў)‰ƒH  ‰Ѕƒєт‰Ѕƒ=єЎ‰Ѕƒ=XЅƒє ‰ЅƒэЙ!№ƒэЙ!№йєнм$ЫЯ%PƒЅƒнмЅƒєЅММrРэЙrРƒР~˜йЦƒ€Кй=ОК~:%~ ƒЄГм"ƒЄГWМƒЄГhДƒЄГЖЙƒЄГЂ!ƒЄГ$ƒЄГќГƒЦ~˜й€ƒйXƒЦШƒl&Шaњ(З”$aj$З”$aЗЦPvaЦPval&Pvƒl&ЪТaЦaй™Јй™Јƒя !№йККй=ОКƒPvƒPŽЂƒйt%ƒС'ч'єЎ‰Ь@'йз‰сЄГ~йЬсЄГ~йЬсЄГ~йЬАсХссссЄГ}(ˆЯтттЛ ‰* јј1є њњЛ ђђw+ W› 1t ЩЯp/_ РЦ&2 пц 1( шюШ, Œ”92 —c, ЎДщ1 # ЋМ0 & Q0D (вмb0 *ЗНб/l -ёњW/ 0§R1 2HЛ, 4K†, 5іƒ- :Z‰Х1 <КЧ_1 @ОТ61 HЉД:+ K•Ћѕ, O._~0N Yсюz1 Z'W, \2 ]ц№§1 ^Еѓз0D bўu2 lбо—0S mвм­* o  У/( q‰Вf- rntf- twzЖ1 v![. {$W+ ~ЎЗђ. ‚ЗЛ. ˆžІŠ/A ŒŒ’у/M §+м, —ёњд* ™1 œЋ, žпу / Ђѓћ’* ЉХЮP2 ЋЪЯЋ/E ­}‰щ* Д*Tj Зj Кiƒƒ+“›+Ў+С+м+є+ ,&,@,йu,йu,йu,йu,,йu,,йu,,йu,,йu,,(/К.A/йu,,йu,йu,йu,,йu,,ƒУƒŽвЬƒŸ-Щ-ф-.и1I+ƒ“›+Ў+ƒ“›+Ў+С+м+ ,&,™I+`+ƒ-0-S-ƒ“›+Ў+С+м+є+ ,&,@,Мѕ*Й*ММƒђ0ф-`+ƒ“›+Ў+С+м+є+ ,&,@,Ћ0ƒЙ*й€q-йЙ*йw. .К.ж.й+$+й1ѓЕ…Эй1ѓЕ…ЭЧий™/$+A/й00?0й1ѓЕ…ЭЧиШй™ЈйЙ*›1й•Ўй(/К.A/й1ѓЕ…ЭЧиШйd2М/q-ѕ*1ѓЕ…ЭЧиШv€:.v€ŠН 00Л2 **Я2 g{М3+ ~Š‹3 ”˜3 ‘"3 EZъ2 дое3+ ›бu3Щ ]d4+   O3 с 4 ;@ё3+ 33ƒі‰ƒйі‰ŠЅ3йі‰;3йККй•ЫКƒі‰ŠйККй•Ыk3A4H4W4XлEЧ ——ѓп ’’8§ ””4 1є ššzр ЁЁЛ ˆˆ|> иь= 0M`; —Єk@ ЇЙц?О ]c?< €†J7 МСѕ4 fk5 u}G9 nrаAџ ‰”єA ди$7  %Ц?  ї; іќC; ыѓ7 АЖя6 "лш(A $ЙПШ= &5 (џЙ9 *ТШђ9 ,(,ѕ>! .ЫбЅ6 0ЄР*: 17=и< 2{‚‘: 3ЃЊ­5 4GMФ7 6яE @ 9џ‹А: <nuH: >gkb6 @S[;5 BHP4 D^dЫ; FУќ6 Jеe8 M…Г< OxM8 PŽеЃ? R„‹­; T@Dд> X^xw9 ZšЁR@ \PT›8 ^—š< `W[< bŽ љ< c48 eеоc>џ f: gў^= iѓћй9 jњ: kЏВњ: mЕЙ9 oс№(9 qХвЦ5 sМТMA uKR!; wещу; xhkю@џ yья~AО znw0; |Uf"?О ƒzЩ@> ‡(>ƒ8 ˆЊЛе8 ‹Sш= V”Р8 ‘—Їœ9 “Ьвb< —ђ•A ™щНA ›ОцЋA œAHA žЯб†?  ЫЭ}= ЂЦШB ЃЇЇš=џ І%j ЉOV•>Ж>ЇС%=‡;7–@Т@…Эк@15ƒй{7йб?й15йh9ƒ`Ъ7C7& К& 15­7й77йDAƒ15йAмйв9ƒ15й?йФ6МЬ`ЪМт78т7$@?@йЭ:ѓйa:й‚6йY5йВ4т7•Ы06UO6ƒž •Ый€ƒй€й™ЈйАЧЬЧ‰Шй{7й™Јй{7йO6й€й88йk‘k‘2‚k‘њ5й2‚k‘2‚х5њ5й_AйЌ9йМŽAƒS‡ƒ0?Q?_?l?u? b06UQ>т7ƒ•Ы9Ют7>>+>т7•ЫйЌ9ƒ<ѕБ_ƒ8ƒ•ЫйїйїйїтйЋ=М=vГŽч8FB ,,Л? &&sB Pq“B AM“B 4>RB t–ƒ•ЫІ7й•ЫКE Y --оY ++вY ,,вB //Л %% E УЦ E ЙРЅD ЩЬоB  G ЯфРC ч§BD ‚…BD }lE ЄЌlE ˆ”щE ЏДщE —ЁC %(fF fF !3C ""ЫD 'ai0G )+FqD +I^ЛE ,UXФF .CFФF 0IL C 1ORьD 6pxыC 8[cSC :fmD ;;>1F <68–D =žфHEв9[EƒйЬЬэђПƒžфƒxCžфƒ’EƒžфƒFƒxCМ•F­Fžфƒй…Эч‡э;уƒžфƒxCМѓFžфƒй…Эч‡э;уƒžфƒxCМ.HYCCHY CJŸGY ;@ЉGY ;;vЮY 77ЩY 44tGY 66Gb 88Л ...H4Y@ CC›HY РзхGY кнДHY руьHY ŸЁƒG ЄН@HY DD[HY@ zŽ[HY@ FFpHY@ GGpHY@ ‘š†HY( IIЎGY <<ФGY@ QaФGY@ >>дGY@ ??дGY@ duЉG4Y@ ;;ž HЮ4‘G-ƒb№ƒHƒгHƒb№КH.Hƒb№ƒb№ƒb№ƒb№ŸGКŸGЉGƒb№ƒb№ƒb№ƒb№'IY SБ\ (:aБ\ >P=В\ /PВ\ 3EЛ  V\ bk|MY Œ•КN ЇKY нчъIY ЋМгP#  –U ъ№ѓKY осЦJY илlUA фч3T ‚ˆЧW\ vyP psfO |LS# эѓяR  ЗЦˆKY гоjS съ4LY ЩагX\ "ЋГьV\ %ЃЇ>R &‚ˆюS" )qxQX\ +{БJY ,@F]IY . –T_ 0&1LY 24=’Q 3#ЊS 5ўyTo 8їњON 9ЁЇMJY :•˜S# =’ZLY ?›žСS @DJЅV\ BЏQ D*5/IY F8AфW\ G 'јP  I КU\ LњўX\ MЌВŒR" P›ЂаN RЅЉR S–œЌTp U`oГM W|‡ЂW\ YŠ“KY Zry@O \T\P _MPЃX\ `ci/JY aS`‰S d$eP eў]KY hэєyJY jїћgR kгйнQ# nТЩ2MY pЬаМP# qКX\ sоя­LY uќ дV\ w MU  xђљtN zвкJY }ЪЮиM ~X^N HU/V\ ‚ЛIY ƒЊАТKY …v…-KY ‡‘œITt ‰ŸЇnV\ ŠˆŽХLY ŒkrўM dgіLY ЫбW\ ‘ПТ'Q# ”ЙМ›O –ХШ^W\ —НУвTm šЗК;P ›W]tIY žQTККККђ"ђ"ђ"ђ"ђ"ђ" "%‘#Ђ#P=(. "%‘#Ђ#‚O(. ŽЂƒ#"й#"& 鈑#Ђ# ‘#Ђ#XЅ" ŽЂƒ#"й#"& 鈑#Ђ# "%‘#Ђ#…L(. ŽЂƒ#"й#"& 鈑#Ђ# ‘#Ђ# OЅ" ŽЂƒ#"й#"& 鈑#Ђ# ƒ‘#Ђ# ‘#Ђ#šJЅ" ‘#Ђ#\MЅ" ŽЂƒ#"й#"& 鈑#Ђ# ƒ‘#Ђ# ŽЂƒ#"й#"& 鈑#Ђ# "%‘#Ђ#нO(. ‘#Ђ# ‘#Ђ#'I eeз cctG ffЛБ ]][ ƒ"Z „bY ЋЗ[ џ(Y †ЈеZ хшьZ птY їќЁZ КмИ[ ыюд[ ёєHZ nwZ ”ž‰[ ‡‘iZ i[ ѕўЛY #„Z %Ёђ™Y &z~ƒйƒ€Yƒ=[ƒFYƒƒƒЬЬlђƒОZƒƒЬƒйЇ[ДƒоY…ЭУƒОZƒоYFўЎ+№Yƒ€Yœf\ P[кa ^o PPпЗ GGо FFв EEtG CC*р JJЛ == i Члаf\@ UUаf\@ wљf\ XXљf\( ‚ˆАf\ RTg\( ZZb@ Œžb@ ce7b hh7b( ЁВюa `bQb( jjqb( kkb( mm.` #ќ.` '6г\ )Ž•_ +˜›c -ВЬБd_ .ЅЏШdp /ЯвKh 4† f\ 5хюз_ 6˜ЂЗa 9етэdm :’•] >9cЂh @txС^ B7;Г_ C>He DИЧ\ Fmq \ J{Od Kgj.h M Ѕхg Nп.ѓb PЩн,a RKOСc TЎЕиc VbdCi Y[_Ci ]RX”a _14еb `ЈЋ\^ bлщoa dЩиі] fьљ` gЛЦТg itx] m–Иse\ oѓ se\ rse\ tЙНse\ vРФse\ xо№э_ zcqьe\ |C`ьe\ ~'@з] $Z_ {f\ ƒorf\ …uxwc ‡‚‰3\ ‰hlGf\ Чdo ‹щh ѓњd ‘ В` •#В` ˜&6{h šEax] ›Œ“_ œ5š^ ž8BGe Ё›ЪUg\ Ѕ;X` ІdmО] Їa‰udt ЉЬё$eA Ћ–™(i ­єю\ Ў[^h ЏМдh\ Г& j` ЖхшNc ЗнуГb И  Цh Н—­ƒ_ Пъ„g\ Сзк2g\ УЖЙ)_ Х #ы^ ЦАГi ЧЗЗhf\ Ьr”4\@ ЬPQ4@ Ь^_^ а{““ifШ  3Aja+YБМЅ№`эъэъййКœfxћэib№эib№ййКкabХ№ƒ—ќH`БќЧќ—ќэЙБќЧќ]й€xћ1cƒё]rfѕlhйƒƒе`,]й,]$U]ƒbйн^йƒxћbƒТ\ІЦЬоё]ƒƒž•ƒQaй€йіcйdiЬйhƒ;уйi‹^э‹^эxћэМƒп ƒп Г]n$žeЅѕАєєХeƒ/Рƒе`ƒaййэЙйџйєйЉc‹шёё]rf iƒ.dйaaђПйе`№`ƒiƒƒxћiƒD_de]rfxgƒƒƒwЌƒ/РƒD_ƒƒ\kЦ/Рƒlђ‡`ёёrРrfДeФeƒwЌйЅgƒ/РƒD_Xлƒ>эrffƒ)^=^K^Gb GGЛ AAє IIj ЗСЂi ЊДтi ФЪеi „••i ˜ЇМi SЪi NPйййђiƒHƒ№Ай€9j SБ *<aБ @R=В VhPВ l~ДВ џєВ 'gГ +=pГ ASЛ  "q hkBq аl щюЛj ‹‘‚j {ˆВn qxo ИОѓo ЄЇ k ЊЎ k БЕ@o дкБp ЃWp ГТ—k Хбgk ІАОm "Œ•l %y}‚k &]c…q )IL§k +OS§k -VZ=p .йпŠp 1ХШ=m 3вж=m 5ЫЯ2q 6—ъl 7”]n :&*m ;крЦp =ІЕl ?СЬѕp AЯзмq BИОшk D›ЂЬj G”—so H<Bхj K(+Qq M59Qq O.2Ѓm PlrЂq QVim TєћФq U‡лp WK\Šm Yjw q [z„al \_g˜n ^>GЧn a7:kp b!n e гm g гm iqm j*0Bn lє'l nъn p'p q Ћk sш№Bk vсфSo wњРo zцщBj |ѓїBj ~ь№Al офЦk ЊЙšj ƒХаo …глpn †МТЎl ˆŸІo ‹˜›ККККККККђ"ђ"ђ" ƒ‘#Ђ# ‘#Ђ#,kч1,kЅ" ŽЂƒ#"й#"& 鈑#Ђ# ‘#Ђ#lч1lЅ" ‘#Ђ#\mЅ"\mч1 ƒ‘#Ђ# ŽЂƒ#"й#"& 鈑#Ђ# ‘#Ђ#pqЅ"pqч1 ƒ‘#Ђ# ŽЂƒ#"й#"& 鈑#Ђ# ‘#Ђ#їmч1їmЅ" ŽЂƒ#"й#"& 鈑#Ђ# ‘#Ђ#gjЅ"gjч1 ŽЂƒ#"й#"& 鈑#Ђ#xЗЗаzИИФw 1Ur 3щн% @Ьруy Rк<;r Xъ :x pOЯrГ ŠТG&r œ8ЛRSœЬЬ8§Б œББtG œВВE Hœ))А @œ нwœу @œ//Ur4@œъыUr4@œЕ@œ 33т @ œ  ЏsH œ ЇЇЭsH œ ББŽ Hœ ЕЕyrHœ )sH œ——qsH œŸŸВHœ3@œѓѕџs—H œПП1Hœ77ј@œqsџ @œ†ŠЕ@œxzn@œљ@œ!jl2@œ$_bйHœ'TWюrHœ)KMХ@œ*++arœ-ыы”Hœ/Уr@œ0??@œ2e@œ4Ћ­3@œ5%%Zs@ œ7››t@ œ9ЩЫs@ œ;ЃЃАr@œ<//иr@œ=GGAu$œ>ммdt—(œ?ббЌt1(œ@ддLtd(œAаа6t§(œBЯЯ|t1(œCввu—(œDззu1(œEииПtd(œFееt1(œGгг(u(œHййфt(œIжж:@œJћћь HœKддsHœMззО@œPввО@ œQббgHœRееO{H œSлл{œVЮЮ„ HœXжж‰{(œYппo{(œZоо‡@œ\йй&{H œ]ккB@œ^ѓѓз@œ_))Y @œ`22— Hœaљљѕ@œfфшш@œh @œkљHœnЮ Hœp§џѓyœsммDz(œt88ƒz(œu::*z(œv77Јz(œw;;z(œx66hz(œy99 @œzьь;r4@œzкл;r4@œz89К˜Hœ{h@œєї\uœ‚ььe@œƒЉu2(œ„  Е Hœ‡ТХvxH œˆППЅxH œ‰РР+HœŠzz8@œ‘kq8@œ˜ag8@œY] Hœž‚‚@œ ЕЗ)@œЃЊ­z HœЅ ЂЉHœЇ™›RxœЊQQЄ@œЋŠŠ- @œЎКНй@œЏ~~H@œА’’ўx(œБЩЩ,y(œВЪЪРy(œГЮЮay(œДЫЫy(œЕЬЬлx(œЖШШL@œИ46њ@œЙкк' HœКрр HœЛ;;@œРЬаУ@œТ/1r@œФ)+Q@œЦ!Љ@œЩTHœЫ зHœЭ8 HœЯїHœбћ§Ÿ@œвффБvœеФФ9wœиBBј@œйьь|@œл79T@œмєє~w(œнDDew(œоCCw(œп@@оv(œр??Ђw(œсFF @œтгг&r4@œтOP&r4@œтТУ HœуААl ˜@œчBEbv@œщЈЊ\@œыkm\@œэЂЄ;v@œя˜šŸ @œђ_bŸ @œѕ‘”PHœјSVPHœњƒvHœќ‡‰юuHœўz|;HœLN;HœtvЭuЫœ::S @œДЖŒv(œККRS4@œщъRS4@œЬЭ<wfi hBЇr(#ќ?Б)Б-'1*2&%$#џџ!" +.0,/7648<5;>9:=3”ЈFМBC+@+DGAJKEIHћ]yUP\+L+OTSRQMNZXV[WY”ra`@_БbБc;”xphuijgskqtonmlrefdzuvxyw7•r‰“h|x}ˆ‹‡†„…ƒ‚€{Œџ~џ‘ŠŽ’ž^rЄ—№Ѓ`Ђ`Ÿžœš™Ё ›˜–ЅІ“ri„КФwUrƒйЬшsЄ “r@s@sЬi„ƒƒййУ‘а‘ц‘йой•ƒпўƒbч йУ ƒsƒКUrRSй€ййƒˆƒйЉй+tйЉƒйЬ?ЬЄ bЕС%ƒƒкt%ƒкt 0?Ђ’1’& ƒК%RSй€ƒЬІКЬйƒƒЬi„‚u2‚ƒпўƒbч йУ ƒsКуy;rƒƒ‹^ƒЬxћ“ri„‚uК;rUrƒƒƒп і ЬоЬоЬi„‚u2‚ЅТi„‚u2‚аёi„‚u2‚ƒƒ?ƒШч йЁ ƒЯК:x&rййаёƒйёёƒёёЬйšйЬ-i„‚uЭvƒsƒ?ƒsƒШч йЁ йY ƒY ƒЯƒКr&rКPw[wййšй›wPw&wњv-7 i„‚uƒsƒпўƒ?ƒsƒbч ƒШч йУ йЁ йY ƒY ƒsƒЯК&r;rƒ‚ 7 б{џ Oдр{џ @aCQ}r@ G ‡Mџ UрQс8џ ]\*Dx •š‚Ј„x ЅЫ‰ ЅЊТRSџЅaaѓпџ ЅIIФ{r ЅHH' ЅFFњ& ЅGGб{4џ@Ѕрс@"ЅОР<r@ЅssU @ЅЋЋ[@ЅДДErHЅwwвrHЅ ’•ї€@"Ѕ ЃЃГr@ЅZ\б‚(Ѕггsr@Ѕhj5rЅQQ? џ@ЅЙЙЇr@Ѕ‚ˆе€џ@"Ѕžžњ r@ Ѕy}Ч(ЅЪЪ ‚О(Ѕ ЭЭя(Ѕ!ЬЬ*‚(Ѕ"ЮЮ: (Ѕ#ФФ|О(Ѕ$ШШ†‚џ(Ѕ%ббI‚(Ѕ&ЯЯЁ(Ѕ'ЩЩZ!(Ѕ(ЦЦЋ‚(Ѕ)ввg‚(Ѕ*ааЭr@Ѕ+^^р{4x@Ѕ+š›р{4џ@Ѕ+OPVr@Ѕ-,.`r@Ѕ0дзr@Ѕ2  <|Б@Ѕ3ƒƒ…r@Ѕ4ффЌФ Б@ Ѕ4fi‰}r@ Ѕ9g}rЅ<  ћ}r@ Ѕ=;~r@ Ѕ>~r@ Ѕ?в}r@ Ѕ@†|rH ЅAЧЧЄrHЅBААИ|rH"ЅCЩЩ4}r@ ЅDщъ(Б@ЅGlnхrHЅHђђ/r@ЅJЕЗњr@ЅLМОyr@ЅNУХRБ@ЅP}ъ{БЅSccrЅVAAM|Б@ЅZ–šМr@Ѕ^іњв|r@"ЅaЫЫяr@Ѕc33}r@Ѕfнрu|r@ЅkЇЌ r@ЅnўП~r(Ѕo<<_~r(Ѕp66"r(ЅqBBѓ~r(Ѕr??‹~r(Ѕs99t~r(Ѕt77и~r(Ѕu==Ѕ~r(Ѕv;;‡M4џ@Ѕv\]ŒО@ЅxHJб@Ѕ}/4б@Ѕ59jƒ$@"Ѕ„?C.ƒџ@Ѕ‡&)Ј @ЅˆˆО@Ѕ‹ыэя‚ЅŽттh @Ѕ’@Ѕ—žƒ(Ѕ˜NNчƒx(Ѕ™PPИƒ(ЅšOOс84x@ЅšŽс84@ЅšЊЋc„xHЅœ‰‰sx@ЅЁ|D„xHЅЃ……2x@ЅІruСx@ЅЋgk „xЅЎ^^‚„x(ЅЏŒŒ™† x@ ЅЏ'+Rx@ЅАОО‡@"ЅБeeђ…xH"ЅВѓ†xH"ЅГEEЙ†x@"ЅД//й…xH"ЅЕЗx@ЅИЅЇ x@ЅЛффcx@ЅПщщ?x@ЅРппѕx@ЅСккЈx@ЅТАx@ЅУ  €x@ЅХФЦ x@ЅЧЫЭx@ЅШююеx@ЅЬ§Фx@ЅЮѓѓЮx@Ѕајјhx@ЅвГЕ…xЅеœœъ@Ѕз``n†x@"Ѕй%%э@ЅмWZcx@Ѕо=? @ЅрOQN†x@"Ѕт!!.†x@"Ѕф †x@"Ѕцж†x@"Ѕш44Ї‡(Ѕщqqd‡(Ѕъll4ˆ(ЅыwwH‡(Ѕьkk;‰(Ѕэ~~џˆ(Ѕю{{-‡(Ѕяjj‹‰(Ѕ№‰(Ѕё||њ‡(ЅђttШ‡(Ѕѓrrn‰(Ѕє~~т‡(ЅѕssT‰(Ѕі~~nˆ(Ѕїxxˆ(ЅјxxOˆ(Ѕљxxˆ(Ѕњvv~‡(ЅћooЈ‰(ЅќЎˆ(Ѕ§yyШˆ(Ѕўyyтˆ(Ѕџzz6x@ЅЉЉщ„xH"ЅžžxBЅЁЁв„xH"ЅoxBЅ  жx@Ѕ —šЗ„xЅ‘…x(ЅЄЄŠH"ЅЛЛbBЅООї‰H"ЅКК–BЅНН‹@ЅДЗл‰ЅЌЎ'Š(Ѕ ССRS4r@Ѕ   RS4џ@Ѕ abA+{ u)hxЋ!&"џ%џ $(#'AА{B1‘<rAr/DI9>?@8:F-H0;џ=џEJ.,GLPORKQNCMBЏ}3}2П7h4x657 M[Zi\‚]YXVЋUWT^`_‹S8h|gufd‰eci’*Dq) ~‰kxyutrsz|}{vwpџmџ‡†…joˆƒn„‚,€lŒŠ‚›‰“Z•‚’š‹™—˜žŸŽ‘–”œњa„ІЅ$ЃЁ‰ЄЂЇOb‰­ЌЊЈ‰ЋЉЎй3йƒЬЬ=€g€‚€КК||ƒƒiКб{р{ƒ^ йPšЛпйКЬЬƒЬЬЬЬЬЬ=€ЬЬйkƒyъ|ƒ'йƒЋ}И}Р}Щ}КQ}RSqћ& & я}ž|Ь‡=”||ƒййой•ƒiКр{RSКPw[wƒVƒ ]|ƒЯлƒККƒ^ ”Ÿъ|ƒ—Њ$@Оƒ(ƒž|Pw& ‡>)›w”й“ƒƒ—ЊОPƒƒ—ЊОйрNЊƒVƒ Ь||К‡Mб{ƒVƒ ]|ƒ—ЊƒО3Ьлƒ4:ƒ—ЊО.„КДƒVƒ ||s9Кс8‡MЬйКЬЬЬЬ||й4…J…йd…q…}…йййййой•ййЅ…}…К…й–…й–…ƒiК*Dр{йй†йYGЋ!ƒƒ/йe:йe:йe:йЏGККККК-КК--ЬК-КККККЬ›wККК4:4:КДКД|ЌККЈ„с8ƒ4:4:КДКД|ЌККЫ‰с8ƒS'"ССš™D††‡MMssХIM››)<)нн*DMјј-”M---”= Xo—M s‚ŽŠ‰ &/TM .›В€™D 5†—(" AСйк‘) NнєН˜D RЖН–M ZјŸŠZ//RS=ZXXŠ{ Z&&О Z))S'4"@ZСТš™4D@Z†‡‡M4M@ZstХI4M@Z›œ)<4 @Zно*D4M@Zјљ>•MHZccџ”MHZ``•MHZaa—•MHZffY”M@Z [^=”=ZYY`•MHZee§•M@ Ziiб•M@ Zhh)–M@ ZjjP–M@ Zll—4D@ZЖЗ"˜M@Z{{˜M@ZzzГ—M@Z!xx”—MZ$uw›˜D(Z%[˜M(Z&B˜M(Z'~~w˜D(Z(€€к—M@Z)yyХ‹џBZ.=@Œ?BZ4GKь‹BZ9BE‹џ@Z;77vŒ9(Z<PP‹џ@Z=55“‹џBZ?;;`‹џBZ@99`‹џBZB::ЦŠџ@ZD44ЉŠ@ZG22IŒЫBZHMMюŒ=ZIRRжŒZJQQ"(ZKSSпMHZLЋЋ‘MHZNЌЌC‘MHZO­­^M@ZYЁЉ*MZ\Ј‘)(Z]ББz‘T(Z^ААLšDHZ`л™D@ZeŠЕ™DZhˆˆЇšD(Zi••nšD(Zj””ЮšD(Zk––ŸŽ"HZlааЫŽMHZnбб§ŽMHZoвв1MHZpггkŽ"@ZsЮЮ8Ž"HZvЭЭ~"@Z|ЧЫM"ZУУЅM(Z€ззbM(ZжждM(Z‚иит’_HZƒыы“sHZ…ьь@“cHZ†ээt“aHZ‡ююЎ’e@Z‰щщ{’fHZ‹чч{’dHZшш0’W@Z‘ухџ‘OZ”ппа“(Z•ђђЅ“E(Z–ёёџ“=(Z—ѓѓ™D@ZšЛЛл˜DZИКB™D@ZžММБ–M@ZЁўў’–MZЄњќ—M@ZЈ—M@Z­e—M(ZЎL—M(ZЏи–M@ZАŸŠ4џ@ZА/0RS4=@ZАXXDm””+ "ы!L#$“—) (.'+&,+-=*BlŠ9 8@4|2{765/10:3<;=‚BA>Ž?С@DC.™GšFEI‰HJARQuPƒOKLMNTSU7‘^]П\Ž[СZVWX,Y`_aD%˜c bud,–f{ekg+hji?ЬrРqћй‚,М~•Е•z”•”И”с”К-”RSй~•™–ъ•?–m–ƒ—ЊОƒVƒ Щ DК—‡MЬqћЬ& rРRУ›УxŽ& rРRУ›УxŽ5Œ& rРRУ›УxŽ9‹L‹šŒƒƒЏ‹ƒƒ}‹щŠКŽŠŸŠkŒƒ›wК Є ‹пМЩцўŽTСaСpСЏШКХIЕС?ЬrР™Јš.šс”К€™š™•š•šm– Є ‹пМЬƒ,&аƒЯ+AбЩцўŽ~еК(S'ЕСЬ Є ‹пМЬƒfФƒЯТƒ ШЩц~еКк‘)<ЕСЬЩ DК͘—Щ DК–*DƒVƒ ]|ƒ—Њ3—Оqћc Š˜Ђ ѕ Щ †  Џ "3 > CЧ , Ђ +Й :cЫ ? * u> Jq ˆ B  Oі  Кб TЩ д % YŽ ™ #Ќ ^a l UЭ c  HЕ hИ У `А msƒ'М r*oР x§щ& ‚)ћ Œ1 —0D­ Š љcџ Єд№aР Љ #Ъ Ўує—У ЗxŠъі РЈК$ ЫRiДЬ в‘Ё’ р8 ьЂКŒ ёч ќ § ћ(žА ЇвC йђ( $s … UФ 4ŸОю >r…Ыю CŸ Џ EЖ M>QцЖ Rs    \Xkь aˆ ˜ ТЉD zR}\Ц …„›іЦ Šб р І‰ šє‡р ГKЎ ИЖ Ъ nЬ ПVf#џ Ц?OН ЯСгq д  `Њ пqˆЇ фЕРВІ ы’Ўa­ ѕ'fШ ћј ŽЏ дэN љфС   Џ жн %%7Rо *] l Œ 3ѓџ 81 @ №­ A fЎ FG V ња Pј ыЁ‰ YпёцР dСиn( rбюєГ €ŒЉœ  АЪм  ’Ъ й X ™„”Ћ5  m}{о Љкьшо Ў * Ж0 ИatЏч Х„ЪХл ЪALgТ Я9DТГ дŒЖ й1<з рerxМ щp‚  ёејu њЗЧ3Ф џЅАŸ  Ђ =Р ацЕ "0;3Є‘ *п  eк 8Фр­ Gњ  Fл aа ѓ ЏО lS j  vYlЧЮ ˆ8\"А BR  –HZX  эlБ ЋЄcЇ ВNjг Н‰ЁЖЇ ФЎЪ1> ЩЧй…Е г^q–м п(Ќн ф  8 юЖЩё ј SЉ ў‡+п E X Љ `~лЈD CVЃЉ ЄД,ЈD +>WЯ' 5$7s @›ЏН§ P/K_ў U 1 ЙЛ Z8 L Ž= d№ё) qащ4› …†я5 •™є”  oƒc Ѕт э „є ГчўїЕ Йj € Жd ОБ М W Щу ї Ёl аD a P„ е‰ ” с3 р9MCˆ х Ј q №ThY[ і–Ђ‘ ЈН5Ѓ Ќ Щ ѕm  & •N ДТ / : кЇ '2]Ј -Х м В­ 8Хм Ц =/:aУ D(з I'2Ъа NozЭ SS^~Ё‰ Xря% a/AуЅ‰ hЋС m“žФ r]hЈ w{†qж ‚Љ Р ™Њ ‡KV]О ЛЭBЏ{{ђЅ‰C›џаа”Ё‰ЧЧВЃ%Ц//п­ЗЗЂ‰ээCє2 › @ ’”E>H——вn@––y-]H  &H  0 @ HVH ••H ю @  §џТјјљ~H@ ^@ ѓeHŸŸпLHžžS#@™™ЧoHšš*H˜˜^Щ @ Ž‘3Щ‰‰р—H!œœКЩ@ "””3Ъ@ #––Щ@ $““ђЩ@ %••‘H&= = гH'; ; MЏ*6 6 9OH,< < с^H-Ё Ё ДH/    кG@1› › і™H3œ œ Ѓ–H4š š €Ч7’ ’ 0H9ž ž Ш@ :˜ ˜ ЩЧ@ ;— — ЏЋH<~~'3H>}}ŒЉ@@xxзiHByy~HCww…Ъ @ CkocЪFff hHH{{ЋЪ@ Iqq2Ы@ JttжЪ@ Krr]Ы@ Luu Ы@ MssA4HN) ) g*HO' ' ЈјR" " |eHT( ( ”HU‡ ‡ b‡HW† † „’@Y  gTH[‚ ‚ `H\€ € ё> @ \y { ­>_t t AžHa„ „ ?@ b~ ~ 9?@ c} } Ы~Hd бYHeў ў i hљ љ ­АHjџ џ л/Hkг г ЧZHlб б дбoЬ Ь ДCHqв в HIHr˜ ˜ ZDHs– – Fv‘ ‘ ]Hx— — (œHyk k {Hzi i А}d d ЖyHj j ДDH€  §$H  lЭ„  ШH†  U\H‡Т Т YYHˆР Р BУ‹Л Л Ž›HС С (ч @ {ЫЖHŽ‚‚џД@ч’vv[М @ ’"&ё<H“))Љ~@”((;М—Р @ —AbH˜˜;@™€РœЗРH  Ф’Hž((uЋH ''э\@Ђ""]ЌHЄ##ё‹HЅ!!ћ&Јъ#HЊ%%@'@ Ћ'@ ЌšyH­007\HЏ//нЂ@Б**/QHГ++-EHД))КЗ!!ŽmHЙ--@ К''л@ Л&&Д"HМCCёBHОBBvL@Р==М“HТ>>џSHУ<<Ц33•HШ@@9@ Щ88_@ Ъ99Š@ Ы::ї  Š@ ЫЕ/‰HЬн(‰@Э  Ь ŠаќќЁŠHбЃџ @ бмпвuHвяяЄt@гюю}џжззЦџHзттHишшL‘HйНмГ5@оГ5@рРiHсѓѓи9 @ сы№М9фццEH@цђђЖЊHч‰‰Ѕ*Hщˆˆf=@ыƒƒ‡xHэ„„eHю‚‚ЕУё{{ыHѓ††пУ@ є€€xГHѕЙЙ††HїИИЧ]@љГГWЇHћДДЩQHќВВїџЋЋLHЖЖ@ї@ ААn—HhhбpHgg#@bbqhH cc}1H aa~ @  Z\K UUч)HeeЕ@ ^^ю@ __њЈH  Ъ@››p@HœœчЁHššгЬ””|tHžžЂnH77О'H66š2@!118mH#22ї‘H$00а @ $%(Ћ'  #ЈH)44o@ *--љ@ +**$@ ,++O@ -,,•@ ...„7H/ЙЙш•H1ИИ?/@3ГГCxH5ДД/dH6ВВ\ @ 6ЊЌ69ЅЅ%_H;ЖЖЇ@ <ЏЏ†@ =ЎЎЫ@ >ААоŠH?ћ ћ к @ ?я ј ­Bъ ъ Ћ@Dњ њ y–HE''`HG&&…&@I!!тrHK""ЄaHL  [§ @ L,§O(8HQ$$ާ@ RmHSббŠHUааІ@WЫЫќžHYЬЬ§QHZЪЪтА @ ZЏЙКА]ЊЊNH_ЮЮ8Г@ `ЦЦšВ@ aУУВ@ bРРgВ@ cТТГ@ dХХБ@ eЛЛГ@ fШШ<Б@ gММбБ@ hППЁБ@ iООЭВ@ jФФyБ@ kНН6В@ lССhГ@ mЧЧёlHnёёHHp№№СI@rыыa‘HtььрЅHuъъ‰ @ uсу`xмм{œHzююЖ@ {хх@ |ччн@ }ццL@ ~шш5kH„ „ ъ @ {  К‚v v t@„ƒ ƒ ,H…ННœH‡ММя–@‰ЗЗ cH‹ИИє*HŒЖЖ“Ф @ ŒЇЌnФЂЂLqH‘ККХ@ ’ААМФ@ “ЎЎчФ@ ”ЏЏлХ@ •ДДLХ@ –ББАХ@ —ГГyХ@ ˜ВВлЊH™„„7ГH›ƒƒЩ‚@~~Ы4HŸšHH }}@юЃuuQHЅnю@ ІzzŸю@ Ї{{—]HЈЎ Ў ˜' @ ЈЇ Ћ c'ЋЂ Ђ ЕA@­­ ­ ;AHЎPPПŽHАOOX”@ВJJiMHДKKHЕIIdЖИAA[0HКMMЖ@ ЛFFНЖ@ МGGm2HН€ € # @ Н{ } ёРv v Ђ.@Т  JhHУjjG9HХii“k@Чdd–'HЩeeœBHЪcc6 Э[[ HЯggb @ а``‘ @ бaa –Hв— — F @ в ” е‹ ‹ <@з– – о DHи||OŒDHк{{€WD@мvvК DHоwwvDHпuuЊ D@ пZbоЉDтUUa/DHфyyзЌD@ хqq9ЌD@ цnnŠЋD@ чkk№ЋD@ шmmЂЌD@ щpp2ЊD@ ъdd/­D@ ыssZЋD@ ьjj*ЋD@ эiisЊD@ юeelЌD@ яoo№ЊD@ №hhЭЊD@ ёggПЋD@ ђllЄЊD@ ѓff­D@ єrrА&HѕššpVHї™™ИЂ@љ””bPHћ••ѓTHќ““ЂЦ @ ќŒŽyЦџ‡‡ІЕH——ЯЦ@ Ч@ ‘‘”Hп п ф @ й м Дд д ™@ о о B'DH BDH +‰@*q‰HV‰H\І ‰@ ќ6І‰їїЄГ‰HЫЇ‰@   †І‰@ ЭІ‰@ ˆЇ‰@   =Ї‰@   Ї‰@ љЇ‰@   &IHJJBДH II8B@"DDэ‰H$EEn H%CCЩр @ %'0Ђр(""лSH*GGТт@ +<<,т@ ,99т@ -;;)у@ .>>cс@ /55§с@ 088Юс@ 177єр@ 222єт@ 3==]у@ 4??•с@ 566„у@ 6@@Aс@ 744`т@ 8::с@ 933Љу@ :AAЙgH;Щ Щ нЎ @ ;О Ц ЏЎ>Й Й sc@@Ш Ш }}HAeeЌm@C``М3HEaa‡GHF__‹ЬIYY‹ДHKccЄ‰HLNN9v@NIIF3HPJJsŽHQHH=џTBBCHVLL%9HWввбmHYббКЎ@[ЬЬ'hH]ЭЭn;H^ЫЫиaФФ8HcЯЯџ@ dЩЩ\­He  С @ e  “h  o\@j  V5Hk‡‡>+Hm††>&@o­xHq‚‚и?Hr€€C @ ry{$utt—Hw„„f@ x}}„@ y~~E*HzППX:}ИИЇ@ООЇ@ННшп @ šDoH‚­­$@ƒЌЌСп†•• рH‡  KрHˆІІ—@H‰&&:DH‹%%д&@  ‚lH!!њ?HHч“;{H•##kч@ –Žч@ —ЌШ @ —фsH˜  юa@™  ƒШœћћвШH^Hžьь6iH ыы†‘@ЂццœŽHЄччС>HЅххаЏ @ ЅмпЉЏЈззФ•HЊщщ/А@ ЋттћЏ@ ЌссwА@ ­уущЖHЎ |HАUƒ@В’6HД'GHЕ’ @ ЕjИќќцhHКц@ Л  @ М  Щ@ НО@ ОF@ П  l@ Р  ”@ С  ayHТЎ Ў 6Т @ ТЈ Ћ ТХЃ Ѓ )Ѓ@Ч­ ­ іnHШ66фKHЪ55ы>@Ь00yƒHЮ11ЖЁHЯ//јнв((k…Hд33&о@ е--ЦEHжk k ц @ жe h йхй` ` 3Ѕ@лj j Ё}HмЫHHоПh@рўўЉ‘HтџџЊ”Hу§§ЋцііoІHшж@ щћћkHъ? ?  @ ъ9 < вэ4 4 п…@я> > ЩWH№ ЌHђХ‰@єе:Hій˜HїЎњBrHќ<Ў@ §Ш™HўU U ?З @ ўO R ЗJ J K‚@T T ІЃH  Y&H  ž@–IH фГH бћћС\Hб@ Lб@ Xd‘H№№Л2‘HяяЬt‘@ъъВ$‘Hыыƒd‘HщщЂ‰ттї|‘HээMЂ‰@  ччА(H!ззњЂH#жж)Ё@%ббпNH'ввEJH(аа>С @ (ЩЫ С+ФФ3‡H-ддДС@ .ЮЮtС@ /ЭЭЃЖH0ээ+KH2ььЁЏ@4ччўFH6шшЭRH7ццМ( @ 7йо(:дд<ЉH<ъъэ(@ =рр )@ >сс[)@ ?ттФ)@ @ффŽ)@ Aуу”gHBЈЈЃ‡HDЇЇpI@FЂЂ“HHЃЃT8HIЁЁ<Д @ I”™ДLbaHNЅЅjД@ O››šД@ PœœвД@ Q[Е@ RŸŸЕ@ SžžЁZHTЩЩbHVШШsH@XУУˆ™HZФФЄuH[ТТц  @ [ИЛЛ ^ГГЬ*H`ЦЦ @ aННF @ bООГ @ cРР @ dППvQHeи и $ @ eв е ђhЭ Э `Є@jз з iЖHk““Ъ[@mŽŽЌHo‡PHpws‡‡ЯŒHu‘‘Ќ8Hv||ь@xww @HzxxЁœH{vvЧ5~ppН,H€zzb>HыыfЉHƒъъ4[@…ххH2H‡ццzšHˆфф˜о‹ннЃQHшшСо@ ŽттКЄH) ) &: @ " & і9’  „Ї@”( ( бšH•ssќ/H—rrЗŒ@™mmЗ+H›nnНHœllЦ0ŸddлВHЁpp1@ Ђjjт0@ Ѓiiпч @ ЃŒ•Џ™HЄЩЩэ1@ЅШШСчЈ‡‡њчHЉ˜˜RшHЊžžшщHЋММ@ъHЌТТZщH­АА’щHЎЖЖЌшHЏЄЄщHАЊЊ4ЗHБKKEцДDDk,@ЖIIk,@ИJJgТ4@ИKL[{HЙCC|ТМ<<5@ОBB5@РAA3ŸHС‹‹еГФ„„Г1@ЦŠŠГ1@Ш‰‰&DHЩ;;{Ь44Ё@Ю::Ё@а99WЁHбqqздhh)(@жpp)(@иnn)(@кoo)(@мmm ЗHнGzHп€€њ!@с{{qHу||ЮЌHфzz™МчssQEHщ~~ЦМ@ ъxx+ @ ънсЏHыїїЦL@ьііяииЏH№№№?HёффvHђъъћwHѓЦЦнV@ѕППнV@їРРнV@љСС“ќККг0@ўФФг0@УУг0@ХХ&›HЏЏ>ФЈЈ\X@­­\X@ ЎЎЯ @   + HjH Ё Ё $T@     Б  l"HX X 2#Hd d ь#Hp p V$Hv v Ž#Hj j ў%HŽ Ž P!HF F 4 H4 4 ь H@ @ ˜%Hˆ ˆ 0%H‚ ‚ Ф$H| | Д!HL L Ž H: : И&Hš š Ь"H^ ^ "H R R d&H!” ” ъH". . Э @ "ил‹yH#хх1z@$ффўЬ'гг#ЭH(ооx4H)::MЕH*88 п-33ўkH/99uЄ ‰@ /ч ы ‹‰H0  —i‰@1 NЄ‰4т т ™Є‰H5ю ю Ѕ‰H6є є ЃЅ‰H7њ њ „H8пп ˆH:ооYm@<ййI)H>кк ІH?ииЫк @ ?Ьа’кBЧЧEœHDммм@ EееOм@ Fжжл@ Gггзл@ Hддл@ IввG5HJ  њ4HL  4@N a4HP Т3HQ "1T§ § ­4HV  Щ2@ W  3@ X  p3@ Y  r1@ Z  Ч1@ [  r2@ \  2@ ]  ,—H^ђ ђ §:H`ё ё Ќ@bь ь T]Hdэ э ё@Heы ы яhг г œ—Hjя я Bє@ kщ щ ђ@ lу у r№@ mм м Ыђ@ nф ф ѓ@ oх х cѓ@ pц ц Н№@ qн н ё@ rо о Sё@ sп п žё@ tр р щё@ uс с оя@ vк к (№@ wл л 4ђ@ xт т љѓ@ yш ш Џѓ@ zч ч Pя@ {и и •я@ |й й ў9H}i i Hh h —І@c c КjHƒd d ™9H„b b П @ „[ ] оО‡V V !YH‰f f XП@ Š_ _ –П@ ‹` ` фœHŒkk§RHŽjjИ0@eeюЃH’ff˜ H“dd:–\\яCH˜hhž:@ ™aaХ:@ šbbX H›[[ZiHZZz@ŸUU†/HЁVVИВHЂTTЅ @ Ђ@HАЅ;;GCHЇXXГ@ ЈQQ’@ ЉPP2@ ЊMMў@ ЋLLу@ ЌKKM@ ­NNp@ ЎOOФ@ ЏJJз@ АRRЖHБQQJк @ БJN1кДEEw@ЖPP9БHЗYY )HЙXX‰a@ЛSSщБHНTTЇ‚HОRRСKK–VHУVV=@ ФPP<­HХџџWfHЧўўZ@ЩљљлЋHЫњњŒ=HЬјјWЯ№№)‚Hбќќœ@ віі|@ гѕѕ-HдЃЃь}HжЂЂХ|@иnЕHкžžMHлœœщу @ л•—ауот­Hр  ф@ с™™ф@ тšš#Н @ тVYŠЊHуii`k@фhhђМчQQЎНHшbbQНHщ\\ЗžHъ  ?HьŸŸЊЉ@юššё[H№››“ЅHё™™[ @ ё‘”єŒŒY|HіЉ@ ї––@ ј——сЫ @ јЖЙMЖHљЩЩMЗ@њШШРЫ§ББџЫHўММ8ЬHџТТДHииY> @ Яе?>ЪЪы%@ззp9HppЬЕHoo№Љ@ jjIcH kk­ŠH iiЇЕaaВVHmmеЕ@ ffЖ@ gg˜ЗH''foH&&S@!!ІšH""”LH  ЙмE:H!$$шм@ "Mн@ #н@ $н@ %'~H&  @0 @ &  0) ѓ‚@+  ўœH,ШШїUH.ЧЧГG@0ТТzЏH2УУa`H3ССW6ЙЙpЗH8ХХ‚@ 9ОО­@ :ППl6H;#H=HІ@?'HAw{HBE  8ЄHG;@ Hf@ I†ц @ I’З;HJœœyb@K››cцNŠŠІцHO••zАHPW W ЫBHRV V fД@TQ Q riHVR R 0FHWP P HпZH H 3|H\T T ˜п@ ]N N qп@ ^M M и  @ ^hmEЈH_}}TŽ@`||Л cccђ Hdpp$ Hevv+ДHfUU{EHhTT/@jOOЬœHlPPо$HmNNx­DpFFd<HrRRС­D@ sLL”­D@ tKKБЈHuГГк @ uЌАййxЇЇ11@zВВLQDH{VVD@DH}UU‘“D@PP iDHQQ'ZDH‚OO~Ј D@ ‚FHOЈD…AA ODH‡SSыЈD@ ˆKKБЈD@ ‰JJjЉD@ ŠMM'ЉD@ ‹LL‚~HŒ66LUHŽ55w^@00+H’11$}H“//я'–''$ЕH˜33(@ ™,,G(@ š--дkH›ЎЎЏSH­­‰D@ŸЈЈ‰HЁЉЉžvHЂЇЇ–ЅžžЎHЇЋЋ@ ЈЅЅХ@ ЉЃЃє@ ЊЄЄ ЉHЋJJ3-H­II§y@ЏDDяZHБEE3fHВCCѓ§ @ В79в§Е22+cHЗGGў@ И;;žў@ Й>>‚ў@ К==йў@ Л@@Лў@ М??9ў@ Н<<џ@ ОAAђƒHП0 0   @ П& - т Т! ! aA@Ф/ / зЈHХK K §Л @ Х@ H еЛШ; ; _"@ЪJ J є]HЫ5"HЭјt@Яќќ9aHб§§ŠjHвћћЏ=еѓѓS}Hзџџм=@ ијј >@ йљљE“HкшшajHмчч s@отт [Hруу ЄHссс=* @ сик*фгг}ЃHцххm*@ чмм™*@ шннэ*@ щппР*@ ъооj› @ ъ'cgŠHы……к|Š@ь„„O›яг›џH№00#}HёHH‚›џHђ**"œџHѓ66Шœ}HєBB~}HѕNNsœ}Hі<<j ŠHї~~  ŠHјxx:žŠHљZZQŸŠHњllЌŸŠHћrrзŠHќTTђžŠH§ff•žŠHў``6 @ ўЁ­H‰HџѓѓщŸ@ђђџ5œœk6HЖЖЧ7HЮЮ46HААН6HММi7HШШ%8H дд7H ТТ-9H цц9H ььЩ8H рр8HккѕzH‚‚БДHQ-@|| xH}}kNH{{ЏrrйyH.@ yyж@ ww@ xx’4Hь ь w%H ъ ъ x0#х х Д=H%ы ы ѕxH&§§ќ.H(ќќŸ^@*їїн’H,јјр'H-ііОє0ъъtŒH2њњŸѕ@ 3ёёLѕ@ 4№№Jі@ 5ѓѓ™і@ 6єєјѕ@ 7ђђѕ@ 8яяN; @ 8r u 1=H9  Э<@:~ ~ ь:=m m ­;H>x x tхH?Л Л фH@Й Й 3фCД Д хHEК К жHFі і •еHHѕ ѕ Jд@J№ № ИдHLё ё егHMя я њбPц ц &еHRѓ ѓ тв@ Sь ь lв@ Tы ы [г@ Uэ э іъ @ UL P ЧэHV` ` iэ@W_ _ šъZG G OыH[S S ]ьH\Y Y ƒ H]“ “ И H^‘ ‘ T aŒ Œ  Hc’ ’ RЛHdLLщКHfKKАЙ@hFFКHjGGAЙHkEEtЗn<<€КHpIIЖИ@ qCCJИ@ rBBрЗ@ sAA.HtЇ Ї eHuЅ Ѕ x    ЪHzІ І ЃќH{gg;ќH}ffћ@aalћHbb—њH‚``фј…WWгћH‡dd#њ@ ˆ^^Иљ@ ‰]]Oљ@ Š\\Нз @ Š aйH‹ти@Œ@з7иH”E‘H‘ММЗ%‘H“ЛЛн5‘@•ЖЖa‘H—ЗЗіE‘H˜ЕЕСЂ‘›ЋЋ€‘HЙЙјЂ‘@ žААПЃ‘@ ŸВВјЃ‘@  ГГoЃ‘@ ЁББл @ ЁД И [BHЂШ Ш yf@ЃЧ Ч •ІЏ Џ HЇЛ Л ъHЈС С _јHЉ% % РїHЊ# # rї­  јHЏ$ $ yаHА&аHВ/Я@ДЯHЖжЮHЗХЭКгЯHМЮ@ Н  oЮ@ ОYZHП9 9 ЕPHР7 7 ѕТУ2 2 -HХ8 8 Р-HЦ11n-HШ00z,@Ъ++Ы,HЬ,,",HЭ**#+а""-Hв..x+@ г''Ы+@ д((p. @ дЭ б Џ/Hел л M/@жк к .йШ Ш Э.Hкд д БoHлллжaHнкк‚@пеехЄHсжжЯ8HтддѕП @ тЭЯкПхШШЯ)HчииР@ шббEР@ щвв Ц4@щЕЖЋHъ998Цэ22H_@я88H_@ё77Я+Hђ''vУѕM@ї%%M@љ$$M@ћ##M@§&&ygHў11ы**аv@//аv@00Hyyма rr9N@ xx9N@ wwTВH]]ЄЭVVэ8@\\э8@[[.w‰HююЧЁ ‰@ шыЅЁ‰уу“R‰@ээTЋH@@rH??шš@ ::ћˆH";;ѕ4H#99?&22DTH(==e@ )77­‰H*І‰-  E‰@/E‰@1E‰@3E‰@5ТnH6єю9––Yb@;››Yb@=œœu™H>ggФA``]@Cee]@EffоƒHF……QЊHGƒƒ’5J~~юqHL„„“SHMП П ^tHOО О Kw@QЙ Й 6#HSК К ^•HTИ И Їж @ TБ Г †жWЌ Ќ аЃHYМ М Ьж@ ZЕ Е шж@ [Ж Ж Ц?H\UUТ_NNчŽ@aTTчŽ@cSS ›HdЬЬїŒHfЫЫЧГ@hЦЦ IHjЧЧ5sHkХХrОnООlЊHpЩЩ“О@ qУУBЏ4@q/ 0 BЏ4@qБ В BЏ4@q BЏ4@q  BЏ4@q01BЏ4@qИ Й BЏ4@qт у BЏ4@qЩ Ъ BЏ4@q3 4 BЏ4@q‰ Š BЏ4@q{|BЏ4@qі ї BЏ4@qa b BЏ4@q ž BЏ4@qŽ  BЏ4@q ђЅ4@qђЅ4@qefђЅ4‰@qC›4@qЎЏC›4@qабC›4@q`aC›4Š@qљњC›4‘@qп р C›4@qЌ ­ C›4@qјљC›4@qŠ‹C›4@qХ Ц C›4@qC›4@q§ўC›4‘@qC›4@qежC›4@q’“C›4@q  C›4@q‡ˆC›4@qNOC›4@qstC›4@qC›4@q„…C›4@qD E C›4@q™šC›4@qдеC›4@qj k ”Ё4@q8 9 ”Ё4@qs t ”Ё4‰@qрс”Ё4@qЪ Ы ”Ё4@qs t ”Ё4@q  ”Ё4@q] ^ ”Ё4@qч ш ”Ё4@q  ”Ё4@qˆ ‰ ”Ё4@qBC”Ё4@q  Ё ”Ё4@qЧШ”Ё4@qЄЅ”Ё4@qуф”Ё4@q ”Ё4@qб в ”Ё4@qG H ”Ё4@qŸ   ”Ё4@q  ”Ё4@q1 2 ”Ё4@qЖ З ВЃ4@q12ВЃ4@qВЃ4@q9:ВЃ4@q“”ВЃ4@q'(ВЃ4@qopВЃ4@q‚ВЃ4@qЅІВЃ4@q]^%Ц4@q/0%Ц4@qST%Ц4@qABп­4@qЗИЂ4@qŸ Ђ4@qбвЂ4@q„…Ђ4@q  Ђ4@q†‡Ђ4@qŒЂ4@qxyЂ4@qcdЂ4@q$%Ђ4@qVWЂ4@q‘’Ђ4@q Ђ4@qЂ4D@qCDЂ4@qabЂ4@qјљЂ4@qЉ Њ Ђ4@qХЦЂ4@qS T Ђ4@qqrЂ4D@qRSЂ4@qmnЂ4@qФХЂ4@qЂ4@q%&Ђ4@qклЂ4@qE F Ђ4@q Ђ4@qŽЂ4@qСТЂ4@qЂ4@qЛМЂ4D@q>?Ђ4@qэюЂ4@qYZЂ4@qpqЂ4@qЂ4@qrsЂ4@qњ ћ Ђ4@qа б Ђ4@qЂЃЂ4@qчшЂ4@qЈЉЂ4@qЂ4@qѕіЂ4@qЂ4@q/0Ђ4@q„…Ђ4‰@qпрЂ4@q?@Ђ4‰@qєѕЂ4@qйкЂ4@q№ёЂ4@qабЂ4@qСТЂ4@qRSЂ4@qHIЂ4@q89Ђ4@q/0Ђ4@q  Ђ4@q  Ђ4@qopЂ4@qЂ4@qЇЈЂ4@q‰ŠЂ4@qXYЂ4@qЖЗЂ4‘@qЈЉЂ4@qдеЂ4@qq r Ђ4@qАБЂ4@qѓєЂ4@q01Ђ4@q›œЂ4@q9:Ђ4@qу ф Ђ4@qљњЂ4@q>?Ђ4@q^_Ђ4@qTUЕЌЉЋЊpГВЕЖБЏАДЎ ­эЩНoМcСПТDРHЛmЙ3КtОИ3З–ЃЏХбФЦŽУьЧЬ#ЯТЮЫЩDЪHЭmШ3Ч№ЙжoеикмDйHлmд3вkгз3бъаЫпорн.>чцъщхуф=штсІ эьюыЂбёŽ№jђяЉѕєmіѓЇЌљјmњїЊЭ§oќ7ўћ E#џПА“РМ б… ИРб ‰  &'! џ1')*+&$%џ(#"”Б /б,u0—.—-Фџ4156n32нР89:7дЪ=<І>;яУD#FCABE@W?іLNKIJMHG UTWXSQRVPOѓЬ]o\7Z[^Ypedhijgkcabf`_rqutvpnosmlЭyxVzw§€ƒn}~‚|{W(АŠб‰‘”“С—0•”СŽ=˜Cы–Œ™’ˆ†C‡Ž‹Q…„ ŸЂЄnЃЅž:œЁ›špЧЈЇЉІщФА#ЏГДВDЖHИmЗ3Е˜ЎЌ3­БЋЊюОРVСНЛМПК4ЙиюФУХТ§6ЖЫбЭЮЪШЩЬСЧыЦpЪЖбавЯ* иклзе›жйдгЯонпм§Љцбх|эŽёŒієѓ№,яъѕыщђьшїю’ф‘ту™ч˜срыЦў#§ќDњHћmџ3љ˜јжЦAІ б ŽŒ   р$+)!'#4"И*4 %Я Я&(н,”лЎ/б.i0Ž-ђЬ5o4D2361џ;:89n<7pBD A?@C>=ЫGFEHEќЊONQRMKLPJIPЇTUVSЛІZW[\YX ­bdea_`c^4]Д?iofCDB@?шIHGFnLJK:EуФN#PџOMМTQg\b][aeUdVRYWW^X_`d_^ZfcS RЏРkohljiŸЕonpm.ВЄtбquŽvŒwsrџк~#}„‚ƒ,€|4zЊ{4yхx­Š’‘ŒŽ‰‡=ˆІ‹Б†З…л˜ЊЋЅІœ ЁЂЃЄЇ› ЯžЯŸЉнЈš—•–™”“ћОВбБД‰ЕАЎЏ%Г2­[Ќ ЛНОКИЙМ=ЗЖp"ЮХФЮЫЪЩ ЬЭШ ЧЯУEСKТQЦQРXПаАв#б га!йлижзк>ерд сф уроптнмБыъэющчшь4цИхєОЇђбяє‰ѓё№)ћњ§ўљїјџќіѕЎЇoџEDв>.7Еб   С = м#,4Њен +&()%#$'џ"!$/12.,-0+*НЉ63754п=@?<:;>948АЉDAEFCB;іЈLбO—NŽKŒIJMH,GгЉR#QSPк ЈZбY]Ž\Œ_^XVW[UTё'eghdbcfa`t2nqrpmklџo2jўi§yx{€n}|~wuvhznttsйў„ƒ"…‚“ЦЛˆб‡)‰”†=‘’ŽŒ=‹Š)™˜›œž—•–š=”І“BЙ›ЂбŸЅ—Ѓ—ІЉЇЄЈЏЌБА­ЎЋЊЁ У5ЕВИЖЙМК=ЗЛР=ПІНЕОКДУГ&ЦЩЪШnХУФЧТСЁЭЬЮЫєдлзжкийгбвеаЯХЕпмронœdутфс4WъŽэ-ьющCчCш=ы3цВхТlђяЄѓєё№Є„їіјѕ‹33ўб”+§ћќСџыњ[љЈˆ8q n    З[зУ7,ЂбП ŽŒГЃ$!%&n#"žm)(*'ѕ0#273/-C.C1=,3+›6#5774єЇ=?@<:;>98ЖЈDAECBњ­LбKN‰OJHI%M2GtFхЦR#STQЋМV#ZWXYUр\^][с`Žab_цЭd#eЂй€п­oР "%КB BЏсА(. "%ККбBЏлC(. "%К%BЏ‹(. "%К#ЌBЏ&(. "%КUЭBЏE(. "%КHЕBЏўŽ(. ƒК`АC› ƒК'МC› ƒКoРC›мР 0?Ђƒ#"й#"& Кщ&Ђй€Ј­  0?Ђƒ#"й#"& КћЂй€КбВЃ 0?Ђƒ#"й#"& КЂй€ВЃ­ cџ ƒК­ C›cЁ ƒКcџC›—Н4 КaРВЃЭ5Ѕ"Э5ч1 К#Ъ”ЁaHЅ" 0?Ђƒ#"й#"& К—УЂй€™Њ 0?Ђƒ#"й#"& КъіЂй€‰Ђ 0?Ђƒ#"й#"& К$Ђй€HЕHЕ ƒ#"й#"& КДЬЂй€ 0?Ђƒ#"й#"& К’Ђй€™ЊЕ™ЊВЃЈ 0?Ђƒ#"й#"& КЂй€ŒВЃЈ КŒ”Ё1ЋЅ" 0?Ђƒ#"й#"& К §Ђй€Ј 0?Ђƒ#"й#"& КžАЂй€уЅ#Ќ‰Ђ#ЌуЅ`Њa­lБ‰Ђ‰Ђ#ЌlБ~ЁЈ 0?Ђƒ#"й#"& КCЂй€™Њ(ВЃЈ К(”Ё8tЅ" 0?Ђƒ#"й#"& КUФЂй€уЅ`ЊЇ‰Ђ‰ЂЕ‰Ђ 0?Ђƒ#"й#"& КюЂй€™ЊЫю КЫю”ЁъAЅ" 0?Ђƒ#"й#"& КEЖЂй€™ЊцЖ КцЖ”Ёд.Ѕ" 0?Ђƒ#"й#"& К Ђй€™Њь Кь”Ё;<Ѕ" 0?Ђƒ#"й#"& КТЉЂй€уЅ#Ќ‰Ђ#ЌуЅ`Њa­‰Ђ‰Ђ™Њ#Ќ‰ЂВЃ~Ё™ЊЈ 0?Ђƒ#"й#"& К\ЦЂй€іЦЈ КіЦ”Ё8™Ѕ" 0?Ђƒ#"й#"& КІЂй€уЅВІЇЖЇcЇВЃЈ 0?Ђƒ#"й#"& К‡рЂй€#Ќ‰Ђ#ЌуЅВІ‰Ђ‰Ђ™Њ#ЌcЇ‰ЂЎВЃ~Ё™ЊЈ КЎ”ЁЁcЅ" ƒ#"й#"& КnЬЂй€ ƒ#"й#"& К#џЂй€ 0?Ђƒ#"й#"& КНЂй€q Кq”Ё\Ѕ" 0?Ђƒ#"й#"& К`ЊЂй€ ЦaУ КЇ ЦЮ‘(ЮЂ( ƒКВІC›l_n 0?Ђƒ#"й#"& Кa­Ђй€ВЃfШ ƒКfШC›cЁ 0?Ђƒ#"й#"& КŽЏЂй€`А"АЈ 0?Ђƒ#"й#"& КNЂй€`А%‰Ђ"АфСЈ‰Ђ КфС”ЁXЃЅ" 0?Ђƒ#"й#"& КжнЂй€Rо КRо”ЁhЅЅ" 0?Ђƒ#"й#"& КŒЂй€џ Кџ”Ё†Ѕ" 0?Ђƒ#"й#"& К№­Ђй€fЎ КfЎ”Ё~‚Ѕ" 0?Ђƒ#"й#"& КњаЂй€‰ЂЋС 0?Ђƒ#"й#"& КыЁЂй€‰Ђ 0?Ђƒ#"й#"& КцРЂй€™ЊЋС 0?Ђƒ#"й#"& Кn(Ђй€ВІЇЕЖЇHЕ 0?Ђƒ#"й#"& КєГЂй€ВІЇЕЖЇHЕ 0?Ђƒ#"й#"& Кœ Ђй€ВІЇм HЕ Км ”Ё’ЄЅ" ƒ#"й#"& КXЂй€ ƒ#"й#"& КЋ5Ђй€ 0?Ђƒ#"й#"& К{оЂй€шо Кшо”ЁДЇЅ" 0?Ђƒ#"й#"& КЖ0Ђй€п­=Р ƒКЏчC›4шш"ъ{ъЗ›Ыщхш<щ КХл%Ц‰,Ђ(‰,‘( КgТВЃ?5Ѕ"?5ч1 КТГВЃв1Ѕ"в1ч1 КЖВЃЁЅ"Ёч1 КзђЅL(e(L(‘(L(}(L(Ђ( 0?Ђƒ#"й#"& КxМЂй€4› ƒК C›иe Ђ(‘(1Кuп­§0‘(§0Ђ(§01 К3ФВЃsXч1sXЅ" ƒКŸC›Њ"n#/$›$Ы#?&!o ,!й%r%%ѓ!Ы ˜  #O"œ&  ƒК=РC›§0 "%КЕBЏl(. ƒК3ЄC›эЄrЅcЁ 0?Ђƒ#"й#"& КeкЂй€з­ХлЭFл 0?Ђƒ#"й#"& К­Ђй€‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ 0?Ђƒ#"й#"& КFлЂй€‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ 0?Ђƒ#"й#"& КЏОЂй€п­п­ 0?Ђƒ#"й#"& ʀ鈉Ђ‰Ђ 0?Ђƒ#"й#"& КЧЮЂй€cЕуЅ"АUЭуЅ™ЊЈ К"А”ЁwЅ" 0?Ђƒ#"й#"& К Ђй€X 0?Ђƒ#"й#"& КXЂй€п­=Р 0?Ђƒ#"й#"& КlБЂй€ ЦaУ ƒКcЇC›О—Н 0?Ђƒ#"й#"& КгЂй€ћ ƒКЖЇC›l_n К1>”Ё&Ѕ" 0?Ђƒ#"й#"& К…ЕЂй€ЖВЃ 0?Ђƒ#"й#"& К–мЂй€Ж3ФВЃЌн КЌн”Ё)ƒЅ" 0?Ђƒ#"й#"& К8Ђй€ЖлЈ 0?Ђƒ#"й#"& КёЂй€ЖлЈ ƒКSЉC›цц 0?Ђƒ#"й#"& К+пЂй€Ж™Њ ƒКЉC›?5в1 0?Ђƒ#"й#"& КлЈЂй€п­В­ КЃЉ”Ё\1Ѕ" 0?Ђƒ#"й#"& К,ЈЂй€ЉлЈЃЉSЉ 0?Ђƒ#"й#"& КЯ'Ђй€ЖлЈ 0?Ђƒ#"й#"& КsЂй€gТЖлЈ 0?Ђƒ#"й#"& КН§Ђй€ЖЉлЈЃЉSЉ_ўЙЛ К_ў”ЁAЅ" КЙЛ”Ё‡"Ѕ" 0?Ђƒ#"й#"& КŽ=Ђй€ЖлЈ 0?Ђƒ#"й#"& Кё)Ђй€ЖлЈЃЉп­ ƒК4›C›œ]З›WœЗЊœ˜ F tž‹ŸчŸž.Ÿаž ƒКя5C›Ё68Ыщє6Ѕ7`8J7j9˜ 9В8 0?Ђƒ#"й#"& К”Ђй€c‰Ђ–Ђ "%КcBЏѓ=(. 0?Ђƒ#"й#"& К„єЂй€їЕЁl‰Ђ‰ЂВЃВ­ ƒКїЕC›m< "%КЖdBЏe(. 0?Ђƒ#"й#"& КWЂй€'МoРВЃ ƒКЁlC›ьэ "%КP„BЏЈ„(. 0?Ђƒ#"й#"& Кс3Ђй€+ЙЖ™Њ "%КCˆBЏšˆ(. 0?Ђƒ#"й#"& КqЂй€Y[Ж™Њ ƒКY[C›Ъи 0?Ђƒ#"й#"& К–ЂЂй€5Ѓ‰Ђ‰ЂВЃ ƒК5ЃC›Іq "%КѕmBЏ7n(. 0?Ђƒ#"й#"& К•NЂй€™ЊЧЮ "%КДТBЏн-(. 0?Ђƒ#"й#"& КкЇЂй€™Њ]Ј ƒК]ЈC›ŒŒjН@l@’jН@lD–šлBH lEЊЊџBH lFЎЎCШ@lIZ]CШ@lLaddК"lNиШlQ  еЦ›@lSGП›@lUЉЧЏ@lW  вХн@lY!!SС›@l[еФчHl^++HИ›@l`nЙ›@lb”М@ld""Т›@lf›У›@lhNЧа@lj%%€Ф›@llХ›@lnъУ›@lpЙЙ @lr))ћЗоHlu**ЮО(@lw((П@lzŸЂ@џl}TD lщщTDl…шш%Ш@l†ВВC @ l†ДП•И@lˆNPБШ#l‰ъъЦИlŒєїЙ lљќSМl‘ўGО l“ьюеН@l–жйDЦl˜хх„ОlšффєЧ@lœTVЈFЉ(l..rFЉ(lž--GЉ(lŸ11ѓFЉ(l 00АGЉ(lЁ;;—D(lЂЙD (lЃIЉ(lЄJJ‘GЉ(lЅ88*HЉ(lІ??kHЉ(lЇAAƒHЉ(lЈBBŸHЉ(lЉCCnGЉ(lЊ77MGЉ(lЋ77мD(lЌЫFЉ(l­//HЉ(lЎ>>ЯGЉ(lЏ<<НHЉ(lАFFэGЉ(lБ==JHЉ(lВ@@TУџ@lГRS4@lГW Љ(lГ37W @ lГ &t?IЂ,Dn<=?@D4BЊC647:89>AGџEF;"$#%NW32 &/.-H01LM+*(T)VU!JKOS PQR'45]^gYXh[Zpfe`\jliambcdk_v "Ђ   yoEЂ-Щ4Њq4ƒieB‘BеABB& ƒЬ‹AKEцС0?ЂYНКERSй€МRFKEЬёW ƒiDКўМЙНйй/Р0Dƒƒ/Рƒ9Сƒ9С/РƒŽНЪТƒУ„чёМnCэъййŽНйŽНЏНЫНƒƒƒœШ~ШƒcШ~Шƒ€Кƒ€КЩƒџЦƒpПƒгЧƒќХƒ}СйЬ8@ƒsИƒ˜ЙƒЙМƒ/ТƒЧУƒoЮƒЏФƒ­ХƒФйAгƒЬ@йіОйЙПђПКы?њ?КvDы?}DКы?‹DйƒX@йƒщИЙй:Й_ЙйyМйjОйёНСCЬkЦƒ/РƒШƒF-GlъƒƒМ0IёvDкtƒ…тW W nCшFƒƒфHvDƒtIggklffњ?XззЯk ј…l 8TME b—pњl q5Zk €›Зnj v’хj žWs@K Сзmљi аКжŒI рr˜] PzжІg(TРЦkTЉ cйѕ U ЅxЯЂIЅrr]ЅzzC›ЅbbЂЅaa(MEЅ——МЅџџџџє ЅZZƒР ЅYYР Ѕ[[zРЂ ЅWWо ЅXXв Ѕ\\Ђd Ѕ]]aI Ѕ__њ?4@Ѕзи†вHЅуHЅЦчHЅtсHЅ/нHЅгHЅ  2ш@Ѕ §џьёЅ сkЅ њњ|х@Ѕ  UсHЅl@ ЅDl@ Ѕ-l@ Ѕџk@ Ѕ‡ЭHЅFFCжHЅDDћђHЅEEЖжHЅBB вHЅGG#цHЅIIРз@Ѕ=?T№ЅSS—lЅ!::.ъ@Ѕ#JLЂьHЅ$HHЬl@ Ѕ%OOуl@ Ѕ&PPЕl@ Ѕ'NNНнEHЅ)!эпEHЅ+ДЖSM E@ Ѕ+ЁЮёE@Ѕ-ЭЯЗPЉH Ѕ.OO3PЉH Ѕ/KK яEHЅ0‡лEHЅ1  #QЉH Ѕ2RRQЉH Ѕ3QQЪNEH Ѕ4AAЅNEH Ѕ5@@’PЉH Ѕ6NN OЉH Ѕ7BBлPЉH Ѕ8PPщЉHЅ9JJтOЉH Ѕ:HH PЉH Ѕ;IIЙOЉH Ѕ<GGЯEHЅ=aNEH Ѕ>>>?NEH Ѕ?==XPЉH Ѕ@MMЪЉHЅAFF]OЉH ЅBDD—OЉH ЅCEE9OЉH ЅDCCфЪE@ЅHІЉNEH ЅI??КшE@ЅKЦШhЭE@ЅLъъывE@ЅNмоgлE@ЅOююшE@ЅQдж“пE@ЅRњњ+щE@ЅUуц4MEЅX™™mкEHЅZКМ/иE@Ѕ[FпE@Ѕ]')uъЉ@Ѕ_LL&еЉЅaVVРэE@Ѕf27цSЉ(Ѕgll2SЉ(ЅhffITЉ(Ѕioo)TЉ(ЅjnnRЉ(Ѕk^^§QЉ(Ѕl]]ФSЉ(ЅmkkWRЉ(Ѕn__TЉ(ЅommМQЉ(Ѕp\\ЄSЉ(ЅqjjїRЉ(ЅrddSЉ(ЅseeйRЉ(ЅtccgQЉ(ЅuYYHQЉ(ЅvXXTSЉ(ЅwggySЉ(Ѕxhh„QЉ(ЅyZZžRЉ(ЅzaaНRЉ(Ѕ{bb€RЉ(Ѕ|``ƒѓE@Ѕ}­­KцHЅ~''иHЅ%%`иHЅ€&&ЇгHЅ##фHЅ‚((‰мHЅƒ**ы№@Ѕ† бжЅ‡44 mЅŠ1№@ЅŒ+-хзHЅ))Am@ ЅŽ00Xm@ Ѕ11*m@ Ѕ//ьHЅ‘ЉЉšъHЅ’ЇЇЪцHЅ“ЈЈгфHЅ”ЅЅлHЅ•ЊЊ1ЬHЅ–ЌЌЎф@Ѕ™ ЂфйЅšЖЖlkЅЁд@ЅŸ­ЏхрHЅ ЋЋЁk@ ЅЁВВИk@ ЅЂГГŠk@ ЅЃББ~рHЅЄ„„ЗбHЅЅ‚‚?мHЅІƒƒWчHЅЇ€€ЋыHЅЈ……›ЬHЅЉ‡‡;г@ЅЌ{}ГпЅ­‘‘€jЅАxxіЫ@ЅВˆŠiЯHЅГ††Еj@ ЅДЭj@ ЅЕŽŽžj@ ЅЖŒŒтбHЅЗee•зHЅИccбHЅЙddЇрHЅКaacЫHЅЛffAуHЅМhhжђ@ЅП\^vзЅРrrїjЅУYY2ю@ЅХik:аHЅЦgg,k@ ЅЧnnCk@ ЅШook@ ЅЩmmЏюY@ЅЬіљЕLEH ЅЭggєс@Ѕвру_б@Ѕе§ЌЯВ@Ѕз+-Qъ@Ѕй;=ЏвQ@Ѕлїю@Ѕн35…Ъ@ЅпKM ђ@ЅсCEKё@ЅфWWЩЮ@ЅцYYс@ЅшZZRь@ЅыXXах@Ѕэ\\xЮ@Ѕя]]s№@Ѕђ[[јлHЅѕbbшЯ@ЅјRRРи@Ѕћ__iу@Ѕў^^э@ЅSSБт@Ѕ``що@ЅUUАЭ@ЅVVЗу@Ѕ TTwю\@Ѕ йHЅaa•щ@Ѕ#%WK\Ѕййrч@Ѕ  дI@ЅяђђLE(Ѕll г@ЅшшныHЅШШKзHЅЦЦюкHЅ ЧЧЎкHЅ!ФФкHЅ"ЩЩУ№HЅ#ЫЫФд@Ѕ&ПСnжЅ'ее jЅ*ММТр@Ѕ,ЬЮ;хHЅ-ЪЪ@j@ Ѕ.ббWj@ Ѕ/вв)j@ Ѕ0ааŒI4@Ѕ0WXŒI4@Ѕ0ŒI4@Ѕ0›œŒI4@Ѕ089ŒI4@Ѕ0јљŒI4@Ѕ0vwŒI4Љ@Ѕ0йкŒI4@Ѕ0КЛєц?@Ѕ1ˆˆŸх?@Ѕ2‰‰с?HЅ5€ƒ1JHЅ6ŽŽдIHЅ7ŒŒJHЅ8РJH Ѕ9’’фь@Ѕ:ŠŠ^JHЅ;”JHЅ<=в?@Ѕ?{}ВI?ЅBtt5к?@ЅD…‡ўJ@ ЅE””K(ЅF——№]@"ЅHSTщд@ЅJЬЮ)Ъ@ЅMмпХb@"ЅO’“5т@ЅSПУ Ю@ЅWбео@Ѕ[­БŠи@Ѕ^LO}ё@Ѕ_ъъпщ@Ѕa—™Ћѓ@Ѕcaн@ЅeорYа@Ѕh^aYа@ЅleiYа@Ѕpmqtц@Ѕs$'эн@Ѕv р@Ѕy  ‚т@Ѕ|юёХъ@ЅАе@Ѕ‚nя@Ѕ…ќџWш@ЅˆѕјаaH Ѕ‰rraH ЅŠbbо@Ѕэ№v_H ЅŽ:: `H ЅFFQ]@ Ѕ‹‹)^@ Ѕ’uwЩ]@ Ѕ”!&_H Ѕ•,,{`H Ѕ–RRѕaH Ѕ—vvJaH Ѕ˜ffО^H Ѕ™>hы@Ѕп36Ѕ`@ ЅсVV9р@Ѕу W`@ ЅхNNЦgЅшССђg@ ЅыУФ1h@ ЅьХХБм@Ѕђ”šё@Ѕѕ›žбh(ЅіЫЫœe(ЅїЌЌe(ЅјЉЉ]h(ЅљЧЧh(ЅњШШSg(ЅћОО­h(ЅќЩЩbd(Ѕ§ЅЅŽd(ЅўІІщd(ЅџЈЈЛd(ЅЇЇ‹c(Ѕ  d(ЅЃЃйc(ЅЂЂчe(ЅЎЎc(ЅQf(ЅДДse(ЅЋЋg(ЅККGe(Ѕ ЊЊВc(Ѕ ЁЁЦf(Ѕ ЗЗЂf(Ѕ ЖЖ5f(Ѕ ГГ}f(ЅЕЕ/d(ЅЄЄf(ЅАА”i(Ѕааi(ЅЭЭ1g(ЅММеi(Ѕввhi(ЅЯЯХe(Ѕ­­Bc(ЅžžДi(Ѕбб?i(ЅЮЮgc(ЅŸŸЊђ@ЅˆˆжHЅччжЉHЅхх.ђЉHЅццвпЉHЅууoдHЅ шшAЯHЅ!ъъІЩЉ@Ѕ$орtпЅ%єє}TЉЅ(ллСь@Ѕ*ыэ`гHЅ+щщгT@ Ѕ,№№ъT@ Ѕ-ёёМT@ Ѕ.яяiм@Ѕ0›Wй@Ѕ3,YH Ѕ4““[YH Ѕ5——влHЅ6››хHЅ8ŠŒКW@ Ѕ:`bXH Ѕ<jlрWH Ѕ=ff—WH Ѕ>\\šXH Ѕ?‡‡'XH"Ѕ@yyiU@ ЅB­ЏDUH ЅCЉЉнHЅDCфHЅE,VH ЅF22TVH ЅG66‹YH ЅHŸŸVH ЅI..xXH ЅKƒQXH ЅL}}нXH ЅM‹‹яVH ЅOEGФVH ЅP@@zVH ЅQ;;nWH ЅSVX@WH ЅTQQWH ЅULLя@ЅXƒYH ЅYmе@Ѕ[ЧЩ•Ы@Ѕ]щы™э@Ѕ_КМюф@ЅaгеУЬ@ЅeЌАЩк@Ѕfїїmф@Ѕhкм!UЅkzzCЫHЅm’Jя@ЅosuЃч@ЅqЃЅgэ@Ѕs‚Щ@Ѕv'*/ь@Ѕxсуv\(ЅyЫЫZ(ЅzННгZ(Ѕ{ПП§[(Ѕ|ЦЦW[(Ѕ}ТТ†[(Ѕ~УУZ(ЅККВY(Ѕ€ЖЖЖ[(ЅФФјY(Ѕ‚ЙЙ3[(ЅƒССM\(Ѕ„ЩЩ$\(Ѕ…ШШ [(Ѕ†РР@Z(Ѕ‡ЛЛеY(ЅˆЗЗК\(Ѕ‰ЭЭeZ(ЅŠММк[(Ѕ‹ХХ­Z(ЅŒООЂI4@ЅŒrs]4@ЅŒz{(M4E@ЅŒ—˜(M4@ЅŒxyМ4@ЅŒРРыk(›&#!" $*4%Њ).4+h-n,t'ъl7Ѓ5201/3944Њ8<4:’;—6wРMaS?XŽ~Œ>bZ@4^Њ\`4[]_CDPcџ=dgRQYHGJWUV,TOMNL‚BeSZI‚AKFEfwvzqmlo}{|ustixyrnhpkjш‡›…‚€ƒ‰4„ЊˆŒ4ŠE‹K†щk•Ђ“Ž‘—4’Њ–š4˜™ ”ьjЃЃЁžœ›ŸЅ4 ЊЄЈ4ІъЇяЂчjБЂЏЌЊЋЉ­Г4ЎЊВЖ4ДхЕъАvKдKЙMиŽжŒЗКеН4бЊгЛ4ОМРПЩЬаџЮЯСФТУЧХЦЫЪЭвШИз{юiс#пмклйну4оЊтц4фхрtОIњ@љ"ёћ`я№іѓ4єЊђї4јѕќ§tП]9Ђ*nŽе/4741Њџ>4 џ -0.ў=  , 2GH‚Z‚)(!B8@?'$CA+, &#v"%"<5)63:XjmT]VU bPQSR(K\ZJ9iWc`qYОa_Ю^А;[fБNЇLЇM>OЕIмeнlhdЉkпgzТgDЂEF}эTwЅurŽpеqosy4tЊx|4z{v~СUЃ›šУ‚ŽЄе}ІŠ‰4žЊœŸ4ЂЉЁ‹ŒЇџ~ЈŽ–•”™˜—†,ƒ…„Ѕˆ‚’‘‡Z“‚›€ БЙГАИЛЋНЌЗДЎЏВМ­ЖЕЊКММЬЬЬ›TюЩUКЯkŒIйЬˆЯК†МЩСрЙММЬЬЬ›TюЩUК…lŒIйЬˆЯШbЬЉЯƒБй0?ЂƒЩM„PЬМƒм‚„P№NЬ„P№N„PМ‚OЬо„чЬ‘ђлL„PМ‚OЬо„чzKqMœMƒЌЪ.LйЌЪdLйЌЪILƒЌЪšLћMКM(Mй€ƒƒˆйƒˆйGеƒнмїЬ~Ш.NžSЬм‚žSBRЬžSBRžSкQƒшёМнлLЬžSЃQшёМММЬЬЬ›TюЩUКњlŒIйЬˆЯЫРУХбММЬЬЬ›TюЩUКZkŒIйЬˆЯдŽЦЕЬММЬЬЬ›TюЩUКnjŒIйЬˆЯѓТЧгўМММЬЬЬ›TюЩUКхjŒIйЬˆЯEзmдCУƒиюЪТлLэzK0D—KƒƒбЗKЌЪ.LЌЪdLЌЪнKЌЪILЌЪšLЌЪLƒ–СЎоƒИвƒTТƒ–С„ьƒФƒQШƒ–СЅ№йЬ8@ƒ–Саƒ–С:Цƒ–Сšуƒ–СFэƒжƒ…гƒўвƒ–СюуЌЪјKƒЬ@ЌЪLК@Kњ?ƒƒбˆйЗKƒNдЪТлLММЬЬЬ›TюЩUКљiŒIйЬˆЯtФЪцШƒƒАсХсссММЬхJƒЬЬЫЩюЩКŒIЂIƒUксехJйЋий еЬQЪL^ƒћєƒNдWЮнмƒNдWЮœШƒNдWЮ/РЋиqMœMМъъйгѓнјKxа^y]xаqMšЋy]xаqMœMy]се$ЫœMсенмЁ]сеœШy]се9Сy]сеœШy]сежy]се/Рy]се‹шy]ЬЬƒаЯp^ЬЬ щxаy]сеy]„чЬЬЬу^ЬЬЬЬЬЬƒœШђ“^ƒœШђэƒƒЌЪ.LЌЪdLЌЪнKЌЪILЌЪšLЌЪLйЬ8@ЌЪјKƒ‘ђ•bБb•bƒЬ@ЌЪLƒюяѕ^ _К]]К]‹DКg@KйƒбœШйžбƒ ейЮ_й#тT_й'Уй^рй'УКІgМh#тМƒнмїЬ~Ш.Nžбƒнм~Шѓhƒƒ}h}hvg}hƒƒƒƒЬЬЬƒМvfƒgƒЬ…ткt›wЬƒ–& & у^& & ƒЬ& & ЬММЬЬЬ›TюЩUКkTŒIйЬˆЯшж4аёЪйžбƒˆйБйƒƒƒ0?ЂƒœШМ7& ‚OХXމU7& Мƒ№NлLƒ„чМ7& Ьё7& ЂVё7& ЂVzK#тƒЌЪјKЌЪšLЌЪјKЌЪјKƒїЬЭ:ЭƒЌЪLК U(Mй€йœШƒžбƒˆйƒёНеUƒžUš\шћZlъƒƒBRлLЬМƒžSžSЬ—ќЃQщ\—ќЬшBRk BŽѕ*j BB ѕH ††MѕH yy*ѕH юєEH ŠŠTє@ Z[Tє@ MMTє@ _`Tє@ UVŠmZ DDiѕH ikСє@ qsШmEH ŒŒѕ*4@ BC{R Ml l   М & ƒєЋmАєКBRѕ*й€йрє‚§ръ .уы Œ › œI !+G +r … д QЩЧФ Vх№щі kJtЧП rл к žqТF† ИДшЊyM Сѓ!лЫ ЫЈЛYН иˆЁ„з уi№Ё шdoXŒ э qˆ ђв н 7q їИ У ћШ ќ*5Ip  4B   йу !,ї Њ Е нЇ Ыж“ Ж С ?€ О Щ ­ $- 8 чТ )!q .мч"8 3Ђ ­ ‰xM 8Ž ™  =– Ё . B9 D Œ Gxƒu  LP[Ф{ Q‚  6  V<Gр‡ [n y Ј& `љ!r eгоы jЃЎ`Ђ ožЉk‰ tц ё ц yA L u ~z … ў… ƒЄ Џ "Н ˆЗТ§Ж  $ ’г “ 1 |Š ˜ЌЗjн ЊЯѓо‰ Жf{ћ$ Ш{ž-Ј ф“ШШ€ яhК Y…ъЛ мєІ ‚ уІ "ЎН­Ї 'ФгЅoU 04FиЊ ;7OаЅ @u „ аЯ Uя 0Љ ZОЩтP `ПеjЉ e] n п qŒЅHY zVhфЂ ƒ@Rї— Ž;Ž ™o‡НМ ЃЌПїМ Ј3>Ъ Д%?œ” РГЭєo Щo5Й еђ – ё W )я іј  Хn !YЊЋ і0Кр Ъ о – !х љ TШ - @м‚U El | аЪ VвєvЫ \…  [ x еє }пы} ƒOeW^ ™\!Š!tI  анъ† Г†Ќn ОХмјК Ъš‘’ ЯСй|‘ эы '!R №ЯиЧЮ ѓіџЮ‰ уўц& ќї. (*[kl /˜ЅбЕ 9йяG Mb‰!— SЕбМ pд Ж {+‘p †ЇОŠn Œ§І| •XhЙš  ЦнвnE ЅEPУ* А–ЊгxM З7vр Р?Џ Щ-ј˜ е2LыХ сSm\ў эtŽщ> љ•Џ"U Жаœ &OтЬ * g Ю 7m‡t› B–­?œ Lн № О Xзё“€ bЕШr+ {ћ-Ћ' ‰4QPй ™Xxк ŸО ж ; И 9Б= НЄ Е GА Т3> п@ubЅ фпъУœ ю|ўл ў^  М( Ў‹}U ozR 'Lєв Ob &5HЇd D^™`p WЅЫѓ? ^; e † }W- ‚*,Ж ЕШj ”ЧужzM ™Sh3в Ÿn†с  ЅбчжЦ ЕŸј~ ПЕШkя Ы:SыЃ иTnpѓ н~‰І™ хRwЗˆ ъ’ЂQM єщќQЩ љЊНјш .!U!­~ фэ  ЯтsЪ ЃС )>Qpч 9тћ2 J#ќ Oюљuq uЗЌž ‚*{M D_l ›%=,9 ІЇ• Вnˆ'ž жFŒЁ чЊЪчm ќЙф м “` АЪъS >jл CŠ•Ж‹ HŽГ PVСВ dVЁR sЪшd~ x†‘Єх ˆяЗ}U œњВ Ј|–ЃQ ­x‹ў В]qћˆ ЗЉКJђ ФТлЇК ЩиѕЄш Юќѓ дКб\ м’ЖZ5 я<oK њEYыM CfЎN  `r Œ  фќŸ ! WgJњ . 3Mа@ _ † ф   d  0 ФD o K _ ‹ t f q uќ  ,юl Ž ё ’Ю š быРЄ Ѕ "9W‚ Ж -ЬŠ Т 3Aт а ZuR3 е ъѕWЖ п Мв"  ф єџ‡ ю цФР ј §  т  Ш л hh  ŽЃcœ  y„Бё  ‹šWљ # т і ВŠ . `xйЃ 4  Ѕ М|U ? —ЎЖО J БШ:} P U k иŽ f Ќ б [№ t ІУ–Ў z < V rН €  3 Eѕ  љ— Ё !CbС К Рђдз П ЁБ›Е Ь uХ и ј&Rи ЯЯmи ббBЏEи n n ђЅи ˜˜C›и ”Ёи ЉЉ|}Uи џџџџВЃи џџџџнћи ффп­и џџџџЂи ––з и м§ и Cє и <ЉHи -- ЅHи ,,Ј|@и ''b‰Hи ((ќЗHи &&ы @ и  ёъи яxHи **“ы@ и /ы@ и `ы@ и Hы@ и Ћы@ и xы@ и Hь@ и ""yь@ и ##’ь@ и $$#ь@ и !!ўы@ и   Хы@ и 3љ @ и ” — ‹+Hи š š o>@и ™ ™ љи   аI @ и 36СEHи FFRљ@и EEАIи #..JHи $??эIHи %99Hи &„ „  Hи (ƒ ƒ т.@и *~ ~ .Hи ,  K8Hи -} } и 0u u КHи 2  n@ и 3{ { D@ и 4z z žRHи 5ЩoHи 7їz@и 9  pІHи ;  %zHи <  Xд @ и <бы6ди ?ЬЬ@cHи Aж@ и BїїOз@ и Cџџ$й@ и D  Ѕд@ и EююШд@ и Fяяяз@ и Gbж@ и Hљљыд@ и I№№’е@ и Jєєiе@ и KѓѓНе@ и LѕѕВи@ и Mжи@ и Nˆж@ и Oњње@ и Pёё-з@ и Qўўћи@ и R‹и@ и S@е@ и Tђђце@ и Uіі~д@ и Vээcи@ и W7и@ и XBж@ и YјјЕж@ и Zћћи@ и [Ѕз@ и \з@ и ]§§лж@ и ^ќќšhHи _яяoHи `ээцФи cшш=SHи eюю№ЏHи fssUqHи hrrвЁ@и jmm;iHи lnn!gHи mllї @ и mR]ўіи pMM№žHи rppЗї@ и sbbсј@ и tjjј@ и ueeјї@ и vddšј@ и whhНј@ и xiiGј@ и yffї@ и zaajї@ и {``Dї@ и |__sј@ и }ggйї@ и ~cc Р @ и ~у ћ Ж:Hи  ќ$@и € тПи ƒо о -РHи „ў ў ˆРHи …  ИЏHи †ССз^Hи ˆРРРЉ@и ŠЛЛиkHи ŒММ-THи КК @ и y”№и ttVrHи ’ООf@ и “ЄЄˆ@ и ”ЅЅЂ@ и •ŸŸб@ и –ЇЇ<@ и —АА@ и ˜˜˜Х@ и ™  @ и šЂЂ_@ и ›——Ќ@ и œІІv@ и ИИŠ@ и žВВЌ@ и ŸГГ@@ и  ЃЃš@ и ЁЌЌб@ и ЂДДћ@ и ЃЕЕ"@ и ЄЉЉљ@ и Ѕ››(@ и Іœœа@ и ЇššЄ@ и Ј™™-@ и ЉЖЖL@ и ЊЊЊa@ и ЋББQ@ и ЌЗЗР@ и ­­­ё@ и ЎЁЁ8@ и Џ––љ@ и АЈЈt@ и БžžS@ и Вz@ и ГЋЋэ@ и ДЎЎ@ и ЕЏЏEJHи ЖччзeHи Иццћc@и КссlHи Мтт›sHи Нррx† @ и НМЬY†и РЗЗF‰Hи ТффKˆ@ и Уии4‡@ и Фббމ@ и Хнн‡@ и ЦддФ†@ и ЧЯЯ‰@ и ШллР‡@ и Щее­‰@ и Ъооќ†@ и ЫааY‡@ и Ьвв"ˆ@ и Эззў‡@ и Южж‹ˆ@ и Яй集@ и аЮЮвˆ@ и бккF‰@ и вм숇@ и гггкy M@ и гћбMHи д  NM@и еМyMи иіі–zMHи йXzMHи к)zMHи л  ѕyMHи мЊЉHи нККОЈHи пЙЙиx@и сДДЈЄHи уЕЕ€ОHи фГГі4и чЋЋœ˜Hи щЗЗ75@ и ъББ5@ и ыААOHи ь  VІHи юŸŸV@и №ššY“Hи ђ››“JHи ѓ™™žЏ @ и ѓ’Џи і‹‹qnHи јоЏ@ и љ••А@ и њ––*А@ и ћ——ПЏ@ и ќ””lHи §€€Е‰Hи џЃ@и zz’\Hи {{љ}Hи yy G @ и qtнFи lltzHи }};G@ и vvfG@ и wwЫ•Hи nn;‘Hи ll"њи ggXOHи mmšMHи   iSHи   vŒи †Hи   ШљHи м м р;Hи к к +bи е е юїHи л л п%ФHи !Т Т "?МHи "Р Р Pqи %Л Л W3Hи 'С С @ЄHи (449Hи )22 Щи ,--]žHи .33qЏHи /RaHи 0gpи 3JHи 5ь2Hи 6  †HHи 7  €kи :  BHи <  ˜Hи =++;Hи >))ѕуи A$$н?Hи C**я&Hи DД Д 6Hи EВ В r8и H­ ­ cџHи JГ Г &jHи KеењšHи LггџЇи OЮЮGKHи Qддо1Hи RР Р Ь Hи SО О оZи VЙ Й FHи XП П 4"Hи YШ Ш ˆHи ZЦ Ц Щи ]С С ТHи _Ч Ч Z@Hи `7 7 mјHи a5 5 >pи d0 0 $!Hи f6 6 šiHи g  jmHи hНки kœЌHи mb]Hи nццS–Hи oффђи rппЖ“Hи tххБHи uЌ Ќ Ј2Hи vЊ Њ D8и yЅ Ѕ С<Hи {Ћ Ћ E9MHи |˜ ˜ /MHи }– – ЈxMи €‘ ‘ j5MHи ‚— — pќHи ƒ    њHи „ž ž Ци ‡™ ™ ‰Hи ‰Ÿ Ÿ Н"Hи ŠC C ^HHи ‹A A #.и Ž< < С=Hи B B PHи ‘‚‚GЊHи ’€€(Œи •{{[Hи —ЇŒHи ˜ZZ+“Hи ™XX“cи œSS7НHи žYYŸHи ŸŒ Œ "AHи  Š Š Пcи Ѓ… … t%Hи Ѕ‹ ‹ ЮžHи ІFF”‘Hи ЇDDcrи Њ??NˆHи ЌEEE5Hи ­x x ]'Hи Ўv v ѕи Бq q %=Hи Гw w б€Hи ДЄœHи ЕС&и Иќќ]Hи К~UHи ЛннЗUHи Млли ї  Hи љ" " Ъг @ и љ & Hи њ0 0 џ%@и ћ/ / Јги ў  щгHи џ) ) RHи ЖЖм—и ЏЏ@и ДД@и ЕЕ;Hи ђђ{Hи ёёф›@и ььhHи ээ%™Hи ыыЂн @ и зп€ни вв—OHи яяян@ и ттЎо@ и чч[о@ и ххао@ и шшо@ и ццо@ и ууШн@ и сс;о@ и ффѕо@ и щщГJHи zzє[Hи yysq@и "tt’cHи $uuК–Hи %ssє‰и (iiр…Hи *wwYŠ@ и +pp6Š@ и ,oo‹Š@ и -qqŠ@ и .nn‘qHи /іHи 1œœp@и 3——ЖQHи 5˜˜>КHи 6––1% @ и 6ƒŠ%и 9~~=RHи ;ššЁ%@ и <ŽŽђ%@ и =3&@ и >’’„&@ и ?””X&@ и @““Ъ%@ и A|%@ и BV%@ и CŒŒ&@ и D‘‘I‡Hи EЧЧГЕHи GЦЦ“l@и IССlЄHи KТТHи LРРeЈ @ и L›ЊCЈи O––f‡Hи QФФЊ@ и RИИxЉ@ и SББ5Ћ@ и TММФЉ@ и UГГГЊ@ и VЙЙЉ@ и WЏЏHЉ@ и XААщЊ@ и YККоЈ@ и ZЎЎ:Њ@ и [ЖЖВЈ@ и \­­ьЉ@ и ]ДД_Ћ@ и ^НН`Њ@ и _ЗЗ›Љ@ и `ВВ‹Ј@ и aЌЌЊ@ и bЕЕ„Ћ@ и cОО Ћ@ и dЛЛ№ІHи eŒ}Hи gyJ@и iё™Hи k™–Hи lК @ и lџЙи o  ЊHи q~К@ и r?К@ и s}MHи t„„ПHи vƒƒќ‘@и x~~KdHи z[„Hи {}}Ьь @ и {anЊьи ~\\S—Hи €!э@ и qqOэ@ и ‚rr}э@ и ƒssЋэ@ и „ttйэ@ и …uuю@ и †vvбю@ и ‡zzќю@ и ˆ{{5ю@ и ‰wwgю@ и ŠxxЁю@ и ‹yyђь@ и ŒppЂћHи ѓѓHи ђђNќ@и ‘ээў0Hи “ююƒ&Hи ”ьь*М @ и ”фчМи —ппДBHи ™№№TМ@ и šщщˆМ@ и ›ъъœHи œŸŸ–ЎHи žžž5Q@и  ™™(ЗHи Ђšš\gHи Ѓ˜˜ZІ @ и ЃŠ0Іи І……8MHи ЈœœˆІ@ и Љ’’ЖІ@ и Њ““ Ї@ и Ћ””zЇ@ и Ќ––@Ї@ и ­••j @ и ­ЖЙwHи ЎММr @и ЏЛЛ4и ВББЊi @ и ВЬЯLHи Гвв‰ @и Дббniи ЗЧЧDUHи ИEEPUHи КDDšџU@и М??Ц.UHи О@@7@UHи П>>j|Uи Т77п9UHи ФBBŠ|U@ и Х<<2 Hи ЦNNјќHи ШMM =@и ЪHH7Hи ЬII<Hи ЭGGНѓ @ и Э?B ѓи а::е&Hи вKKоѓ@ и гDDџѓ@ и дEEњЅ @ и д} € {:Hи еƒ ƒ pў@и ж‚ ‚ пЅи йx x }АHи к  yxHи м   `@и о  –Hи р  ГwHи с  а @ и сї щЯи фђђЮІHи ц  Ка@ и ч  5б@ и ш fа@ и щ  нб@ и ъ  ^б@ и ы в@ и ь  ’а@ и э  ха@ и ю  Ўб@ и я „б@ и № 7а@ и ё  б@ и ђ я6Hи ѓШШУmи іССЈ@и јЦЦЈ@и њЧЧ"Q @ и њЧЪHи ћддЛ@и ќггќPи џТТEQHи ЭЭѕ @ и e j T<Hи m m †ћ@и l l ъєи ` ` ‹‚Hи ЄЄ SHи ЃЃS@и žžИXHи ŸŸC~Hи Oп @ и ”—/пи ‚ŽHи ЁЁsп@ и ™™­п@ и ››п@ и šše6Hи ggЊ@Hи ffс§@и aao$Hи bbъ Hи ``эcи YY$ќHи "ddd@ и #^^ЪˆHи $QQгПHи &PPяŒ@и (KK`Hи *LL_cHи +JJ—?и .CC:uHи 0NNЧ?@ и 1HH Hи 2ўHи 4@и 6h.Hи 8яHи 9U˜ @ и 9  ˜и <W Hи >Ԙ@ и ?Ž˜@ и @  Hи A†† -Hи C……+@и E€€д@Hи G>ЎžHи h==ЁВ@и j88Э’Hи l99пtHи m77яп @ и m-1Ьпи p((фЎHи r;;Tр@ и s55р@ и t334р@ и u44B•Hи vЬЬ$}Hи xЫЫvK@и zЦЦ%„Hи |ЧЧЁfHи }ХХЮЩ @ и }ЛПБЩи €ЖЖ_JHи ‚ЩЩ*Ъ@ и ƒТТSЪ@ и „УУяЩ@ и …СС%%Hи †~~э@@и ˆyyэ@@и Šxxэ@@и ŒwwХХи rrу@и ‘}}у@и “||у@и •{{Ю”Hи –  РВHи ˜  ЏЂ@и šKHи œ_bHи iЙ @ и њўIЙи  ѕѕ>„Hи ЂБЙ@ и ЃЙ@ и ЄиЙ@ и Ѕ‹КHи ІV V xHи ЈU U хŸ@и ЊP P їnHи ЌQ Q AАHи ­O O Ц @ и ­( 9 Ји А# # bАHи ВS S x@ и Г? ? M@ и ДL L V@ и Е> > ˆ@ и ЖG G о@ и ЗB B 1@ и И= = @ и ЙJ J @ и КC C k@ и ЛM M @ и М< < œ@ и Н@ @ j@ и ОF F B@ и ПE E @ и РD D Ў@ и СH H ш@ и Т; ; й@ и УI I )@ и ФK K Т@ и ХA A Hи Ц  фHи Ч Dяи Ъћ ћ ;Hи Ь  ЖА @ и Ь)6lHи ЭXXd@и ЮWWАи б$$БHи в??oБHи гKKЬБHи дQQЬАHи е99@БHи жEEрЋ @ и жўм!Hи з//"5@и и..ПЋи лљљўЋHи м  kЌHи н/ЎHи о((иЌHи пМ­Hи р""M­Hи с(<Hи тн н sHи фм м 4@и цз з ›љHи ши и  Hи щж ж при ьЭ Э #Hи юк к с@ и яв в >с@ и №г г pс@ и ёд д ­4Hи ђј ј .Hи єї ї З/@и іђ ђ ђ Hи јѓ ѓ ёHи љё ё 5–и ќш ш ОњHи ўѕ ѕ f–@ и џэ э ›–@ и ю ю Э–@ и я я VHи x’Hи уК@и ^Hи r—Hи |Ш @ и   bШи iHи иШ@ и ЛШ@ и šШ@ и іВHи еЙHи 2e@и ќќ!sHи §§:˜Hи ћћV @ и фю4и пп8NHи џџе@ и љљ?@ и ѕѕa@ и !ііь@ и "ѓѓА@ и #јј@ и $єєЃ@ и %ёё|@ и &№№Ь@ и 'ђђ†@ и (її9‚ U@ и (t x 0љHи ){ { к#U@и *z z ‚Uи -o o Ј…Hи .ѓѓŠЄHи 0ђђ0X@и 2ээr†Hи 4юю_˜Hи 5ььЫ @ и 5ксхЪи 8ее™YHи :№№ЙЫ@ и ;цц Ь@ и <шшZЬ@ и =ъъ.Ь@ и >щщ‘Ы@ и ?ххQЫ@ и @фф+Ы@ и AууъЫ@ и BччЂ§ @ и B ’ јHи Cœ œ и:@и D› › {§и Gˆ ˆ Ц§Hи H• • в†Hи Iдд“[Hи KггœP@и MЮЮžŠHи OЯЯŠkHи PЭЭ>[ @ и PЈЗ[и SЃЃјHи Uбб$]@ и VФФ[\@ и WППJ]@ и XХХн[@ и YММo]@ и ZЦЦ‘]@ и [ЧЧЗ[@ и \ЛЛб\@ и ]ТТ \@ и ^НН‹[@ и _ККƒ\@ и `РР2^@ и aЫЫї\@ и bУУ2\@ и cООd[@ и dЙЙ ^@ и eЪЪр]@ и fЩЩБ\@ и gССЖ]@ и hШШGCHи iъъ^є@ и kччЁє@ и mшш7єи pттЏ @ и pWZ Hи qdd1і@и rccи uRRЫHи v]]oYHи w‰!‰! UHи yˆ!ˆ!‹f@и {ƒ!ƒ!GžHи }„!„!ĘHи ~‚!‚!^ @ и ~d!r!e^и _!_!а Hи ƒ†!†!О^@ и „u!u!д_@ и …~!~!м^@ и †v!v!`@ и ‡!!Q_@ и ˆz!z!Б_@ и ‰}!}!_@ и Šx!x!`@ и ‹€!€!^@ и Œt!t!o_@ и {!{!џ^@ и Žw!w!‰_@ и |!|!9_@ и y!y!Л#Hи ‘мм’‹и ”гг! @и –йй! @и ˜лл! @и šии! @и œкк˜Hи ЋЋЪŸHи ŸЊЊž›@и ЁЅЅEbHи ЃІІл‘Hи ЄЄЄ8Е @ и ЄŽ—Еи Ї‰‰еЏHи ЉЈЈБЕ@ и Њ››хЕ@ и ЋœœiЖ@ и ЌŸŸЖ@ и ­ZЕ@ и Ў™™ЄЖ@ и ЏЁЁЬЖ@ и АЂЂ9Ж@ и БžžЖ@ и В  Е@ и ГššuEHи ДллЛREHи ЖккЮŒR@и Иееў‚RHи КжжТmRHи ЛддBn E@ и ЛЭЯnEи ОШШэEHи РииЁnR@ и СввknE@ и Тбб+Hи У™™ДHHи Х˜˜Д(@и Ч““ІHи Щ””'Hи Ъ’’8Л @ и Ъ‰ŒЛи Э„„zHи Я––bЛ@ и аŽŽ‡Л@ и бКЛ@ и вЙЦ @ и вЩеЯHи гии2@и дзз™Ци зФФ АHи и&!&!ЮЃHи к%!%!&А@и м ! !˜wHи о!!!!{‰Hи п!!Ў‘ @ и пѓ !‘и тю ю фWHи ф#!#!њ‘@ и х ! !#’@ и ц ! !Ѕ’@ и ч!!z”@ и ш!!Q’@ и щ ! !_“@ и ъ!!<“@ и ы!!Ъ’@ и ь!!Ю”@ и э!!,”@ и ю!!П“@ и я!!­”@ и №!!“@ и ё!!є”@ и ђ!!”@ и ѓ!!п“@ и є!!б‘@ и ѕ ! !t’@ и і ! !ђ’@ и ї!!U”@ и ј!!“@ и љ!!@Hи њзз6Rи §ввКxHи ўўўоЮи љљЙ Hи §§ОHи ќќ:p@и її7БHи јјВHи ііЯ @ и ыяЯи цц~aHи њњˆЯ@ и ѓѓfЯ@ и ђђ=Я@ и ёёЋЯ@ и єєи2Hи HHи œ0@и =Hи -Hи  ' @ и  ѓ&и џџ‰'Hи '@ и j'@ и !)'@ и "  S'@ и #>'@ и $•'@ и %ЩrHи &ZZ>‚Hи (YY<Л@и *TTч Hи ,UU YHи -SS1/ @ и -2@/и 0--|ЌHи 2WWы0@ и 3KK+0@ и 4GGЏ1@ и 5PPY0@ и 6HHФ0@ и 7JJd1@ и 8NNз/@ и 9EE‰1@ и :OO1@ и ;LL61@ и <MM­/@ и =DD€/@ и >CC0@ и ?FFм1@ и @QQX/@ и ABBЃ0@ и BIIlHи CЄЄBhи F››vA@и HЂЂvA@и J  vA@и LЁЁvA@и NЃЃ mHи OююƒNHи QээЫœ@и SшшTЉHи UщщЮ{Hи Vчч*џ @ и Vсу џи YммуyHи [ыыNџ@ и \ххЈHи ]ˆˆаJHи _‡‡љК@и a‚‚_MHи cƒƒЖHи dЧG @ и djsЅGи geeгuHи i……НH@ и jzzI@ и k||SI@ и l~~iH@ и mxxwI@ и n&I@ и o}}@H@ и pwwH@ и qvv—H@ и ryyэG@ и suuрH@ и t{{e— @ и tНЦЏ5Hи uаа5F@и vЯЯ=—и yИИŠ—Hи zЩЩšXHи {  r“Hи }  ’@и SHи LWHи ‚і @ и ‚мэги …зз‰gHи ‡ @ и ˆћћf @ и ‰їїc @ и Šл @ и ‹њњ @ и ŒѕѕД @ и љљ> @ и ŽііС @ и ѓѓы @ и џџш @ и ‘єє @ и ’Q @ и “ќќ• @ и ”§§r @ и •ёёE @ и –№№œ @ и —ђђ @ и ˜яяУ @ и ™ўў6 @ и š“ @ и ›јјяJHи œ**ЋZHи ž))ЗY@и  $$шЂHи Ђ%%щ”Hи Ѓ##f. @ и ЃI.и І ЇHи Ј''Є.@ и Љ!!‡.@ и Њ  ‘p4@и Њії‰чHи ЋННI|Hи ­ММd @и ЏЗЗƒ˜Hи БИИЈHи ВЖЖПp б@ и ВЏБЂpи ЕЊЊ„›оHи ЗККрp@ и ИГГїp(@ и ЙДДЩ7 @ и Й 93Hи Кs@и ЛІ7и Ощ7Hи П  І|4@и Пop§Hи Рggф/@и Тaaф/@и Ф``ф/@и ЦbbtЎи Щ[[њF@и ЫddњF@и ЭffњF@и ЯeeЯКHи амм=Hи вллДМ@и джжХzHи жзз/dHи зеепš @ и зЮаЦšи кЩЩ6WHи мйй›@ и нггќš@ и овв@KHи пOOуKHи рMMцnKи уHH—)KHи хNN›EHи цЉЉ1/Hи шЈЈ#@и ъЃЃе7Hи ьЄЄƒHи эЂЂ–8и №™™ГHи ђІІ9@ и ѓ  З8@ и єžžо8@ и ѕŸŸy M@ и ѕ!&М7MHи і66ЋM@и ї55хxMи њyMHи ћ))VyMHи ќ//PHи §u!@и џu!@и u!@и ’ри   Й @и Й @и Й @и Њ Hи ,,ъ@и &&ъ@и ''ъ@и %%ZЏи   ьD@и ++ьD@и **ьD@и ))ЏHи KKH”Hи JJ‰I@и !EE‡Hи #FFЯЌHи $DD ™ @ и $:>™и '55EgHи )HH_™@ и *AA>™@ и +@@ƒ™@ и ,BB№KHи -ll"hHи /kkƒ­@и 1ff3|Hи 3ggkeHи 4eeЦ @ и 4[_љХи 7VV'КHи 9iiRЦ@ и :bb1Ц@ и ;aavЦ@ и <cc’ŒHи =є­Hи ?ŒŒТ_@и A‡‡Z•Hи Cˆˆƒ`Hи D††„ў @ и D|€jўи Gww‚–Hи IŠŠУў@ и JƒƒЂў@ и K‚‚чў@ и L„„г‡Hи MЎЎCtHи O­­9Z@и QЈЈрHи SЉЉгKHи TЇЇ? @ и TЁї>и W˜˜я†Hи YЋЋP?@ и ZЄЄ/?@ и [ЃЃt?@ и \ЅЅCPUHи ]ЯЯжЈUHи _ЮЮ˜ƒU@и aЩЩІUHи cЪЪЁЈUHи dШШJ U@ и dОТ0Uи gЙЙо`UHи iЬЬ‰U@ и jХХhU@ и kФФУU@ и lЦЦb€Hи mNNguHи oMMTw@и qHH…ЗHи sII‚Hи tGG›Ь @ и t.9~Ьи w))0ŸHи yKKРЭ@ и zAAЇЮ@ и {EEyЭ@ и |??WЭ@ и }>>МЬ@ и ~;;)Э@ и ==™Э@ и €@@Э@ и <<;Ю@ и ‚CCnЮ@ и ƒDDрЭ@ и „BBN @ и „  ;Hи …f f н@и †e e и ‰  BHи Š/ / ЙHи ‹# # Hи Œ) ) Hи A A „Hи Ž5 5 |Hи _ _ iHи G G ЩHи ‘; ; 2Hи ’Y Y zHи “  ыHи ”S S ЋHи •M M ДБHи –††к]Hи ˜……jЅ@и š€€%xHи œхTHи И3 @ и ux€3и  pp3lHи Ђƒƒ74@ и Ѓ{{З4@ и Є}}є3@ и Ѕzzu4@ и І||ПHи ЇЌЌ…|Hи ЉЋЋ–Џ@и ЋІІc|Hи ­ЇЇ*ŠHи ЎЅЅД› @ и Ўž Ž›и Б™™yЊHи ГЉЉо›@ и ДЂЂœ@ и ЕЃЃЭќHи Жя я ™.Hи Ию ю ї@и Кщ щ C$Hи Мъ ъ ЎFHи Нш ш Xли Рр р RHи Ть ь ˆл@ и Ух х Цл@ и Фц ц „YHи Х№№сHи ЧяяžМ@и ЩъъъHи Ыыы#cHи Ьщщ0О @ и ЬпуОи ЯккZЏHи бээoО@ и вццNО@ и гхх“О@ и дччY*Hи еЧЧhHи зЦЦ1'@и йССжHи лТТГ Hи мРРЏћи пИИ39Hи сФФФћ@ и тННыћ@ и уООЊmHи ф,,ŸIHи ц++.K@и ш&&КHи ъ''МŠHи ы%% + @ и ыƒ+и юўўё{Hи №))т-@ и ё##O,@ и ђљ,@ и ѓу+@ и є˜-@ и ѕ!!,@ и іТ-@ и ї""Ў,@ и јo-@ и љ   ,@ и њ.,@ и ћС+@ и ќ@-@ и §r,@ и ў-@ и џж,@ и уМHи PPLHи OOMX@и JJ7–Hи KKЮ™Hи IIп' @ и <AП'и 77(€Hи MMm(@ и FF‘(@ и GG((@ и DD(@ и CCO(@ и EE yHи ww_Hи vv…‡@и qqЁbHи rroŒHи pp„й @ и `fdйи [[*ЊHи tt/к@ и kknк@ и !mm’к@ и "nnєй@ и #jjЭй@ и $iiЈй@ и %hhPк@ и &llус @ и &Ц Ы Hи 'е е %@и (д д Нси +С С тHи ,Ю Ю LHи -88@ЋHи /77ŸŽ@и 122№LHи 333дЊHи 411C; @ и 4;и 7  1—Hи 955A<@ и :%%f=@ и ;,,ф<@ и <))o<@ и =&&ы;@ и >##Т;@ и ?""ј=@ и @// =@ и A**‹=@ и B--==@ и C++l;@ и D  ™<@ и E''<@ и F$$˜;@ и G!!С<@ и H((а=@ и I..d @ и IЌ Б 3Hи JД Д Д§@и KГ Г Tdи NЇ Ї ^Hи O==žHи P;;lАи S66)kHи U<<”ГHи Vtt!ВHи XssOZ@и ZnnžuHи \ooќMHи ]mm  @ и ]HVЪи `CCв~Hи bqq;!@ и c\\ˆ"@ и dbbќ"@ и edd%$@ и fiiТ"@ и gcc€ @ и hYY"@ и i``O"@ и jaaЂ$@ и kkkУ @ и lZZr#@ и mffЇ!@ и n^^м!@ и o__@ @ и pXX!@ и q[[ё#@ и rhhЏ#@ и sgg;#@ и teea$@ и ujjq!@ и v]]K‹Hи wщщC Hи xчч“Ѕи {тт^^Hи }шшh…Hи ~ŽŽtHи €rЕ@и ‚ˆˆwpHи „‰‰9ЈHи …‡‡ќœи ˆ{Hи Š‹‹A@ и ‹„„…@ и Œ……uHи ~ ~ щЅHи } } &Ж@и ‘x x J…Hи “y y 3OHи ”w w 6м @ и ”f m ми —a a 5wHи ™{ { ˆм@ и šp p Eн@ и ›u u ам@ и œr r н@ и t t ім@ и žs s \м@ и Ÿo o Ам@ и  q q ј( @ и  ˜ьHи Ё­­ЦD@и ЂЌЌд(и Ѕ““W)Hи ІІІ)Hи Ї  ЭUHи Јyy›}Uи Ћrr7U@и ­ww7U@и Џxx~ @ и Џ/5(Hи АKK1(@и БJJbи Д**ыHи Е>>Hи ЖDD—Hи З88ЇŸHи ИaaLœHи К``@и М[[:LHи О\\ БHи ПZZги ТRRЛHи Ф^^kг@ и ХXX8г@ и ЦWWŽІHи ЧGG•ЖHи ЩFFe@и ЫAAъЃHи ЭBB&Hи Ю@@и б88kHи гDDq@ и д>>C@ и е==ˆeHи ж˜˜ЏHи и——pЉ@и к’’Б{Hи м““ё€Hи н‘‘нd @ и нfyМdи рaaТHи т••Ff@ и уƒƒсf@ и ф‡‡ h@ и х(e@ и ц||­g@ и чŒŒf@ и ш……Хe@ и щ€€e@ и ъяe@ и ыfg@ и ьŠŠ‰g@ и э‹‹Еf@ и ю††јg@ и яŽŽ@g@ и №‰‰ue@ и ё~~Re@ и ђ}}f@ и ѓ‚‚e@ и є{{бg@ и ѕg@ и іˆˆqf@ и ї„„idHи јЪЪE€Hи њЩЩ Ў@и ќФФŽmHи ўХХЛ\Hи џУУ”p @ и џ­Жtpи ЈЈˆ™Hи ЧЧ(q@ и ЛЛgq@ и ННЖq@ и ППиq@ и РР‹q@ и ООq@ и ККнp@ и ЙЙИp@ и ИИћq@ и ССIq@ и ММ3@ @ и C T lHи d d к@и c c @и > > V@Hи W W •@Hи ] ] Ж~Hи VVАІHи UUЯd@и PPJ™Hи QQ‘Hи OOМ @ и "6›и Н‘Hи "SS˜@ и #JJq@ и $IIЪ@ и %>>х@ и &LLM@ и 'HH:@ и (AA‹@ и )CCД@ и *DD2@ и +::@ и ,99х@ и -EEю@ и .??@ и /FF,@ и 0GG_@ и 1BB @ и 2MMZ@ и 3;;‚@ и 4<<с@ и 588К@ и 6KKЇ@ и 7==@ и 8@@ƒHи 9))_ЃHи :''H+и =""hlHи ?((XHи @ДДm­Hи BГГЕˆ@и DЎЎRTHи FЏЏ;_Hи G­­ŽJ @ и GЅЈuJи J  ЫHи LББЋJ@ и MЊЊЫJ@ и NЋЋђj @ и NЯв6Hи Oтт§'@и Pссзjи SЪЪ kHи TееIkHи Uлл { M@ и U[d2MHи VggPM@и WffыzMи ZVV{в @ и Zv{•Hи [……K@и \„„Qви _qqЂвHи `~~r> @ и `ймw(Hи aццX"@и bххK>и eдд–>Hи fппфZHи gžž™Hи iыИ@и k˜˜гQHи m™™НЎHи n——Ч @ и n‡юЦи q‚‚%ПHи s››АЧ@ и t’’Ш@ и u””-Ш@ и v••иЧ@ и w““cЧ@ и x:Ч@ и yŽЧ@ и z‘‘™­Hи {ЧЧ~НHи }ЦЦЌ”@и ССryHи ТТ6\Hи ‚РРˆ и …ИИgTHи ‡ФФќ @ и ˆООЎ @ и ‰ННИpHи ŠRRoHи ŒQQZt@и ŽLLZHи MM‰Hи ‘KKЉя @ и ‘BE„яи ”==žЗHи –OOўя@ и —HHвя@ и ˜GG-№@ и ™IILHи šmm;’Hи œllнВ@и žgg jHи  hh(ЂHи ЁffЄ @ и Ё\_ќЃи ЄWWэhHи ІjjaЄ@ и ЇbbŸЄ@ и Јdd:Є@ и Љaa„Є@ и Њcc5Hи Ћˆˆ‚ѓи Ў @и А†† @и В‡‡д™ @ и ВZ`иHи ГvvЫ @и ДuuЗ™и ЗUU;šHи ИiijšHи Йooю™Hи КccP› @ и КšžБ0Hи ЛЁЁФ@и М  )›и П••U{Hи Рћћ’Hи Тњњ—@и Фѕѕ9hHи ЦііяvHи ЧєєiMи ЪььНbHи ЬјјМM@ и ЭђђM@ и ЮёёЩ @ и ЮВЙ) Hи ЯММ!@и аЛЛjЩи г­­ЩМHи дT!T!h›Hи жS!S!>}@и иN!N!ЌИHи кO!O!яЁHи лM!M!*щ @ и л6!?! щи о1!1!~iHи рQ!Q!Ощ@ и сD!D!'ъ@ и тG!G!vщ@ и уB!B!Зъ@ и фK!K!Jъ@ и хH!H!œщ@ и цC!C!ущ@ и чE!E!Žъ@ и шJ!J!jъ@ и щI!I!Mщ@ и ъA!A! ъ@ и ыF!F!MHи ьььћћи ячч•SHи №сс2aHи ђррІ@и єлл%mHи іммDmHи їккЗи њвв ‹Hи ќоо@ и §иик@ и ўззЏЪ @ и ў˜Ÿ ,Hи џЂЂ))@и ЁЁ‹Ъи  ““Э3Hи  PP`Hи  OO@и  JJћHи KKO>Hи IIви  AA0Hи  MMя@ и  FFŽ@ и  GGPeHи  њњЉHи  љљўМ@и  єє.…Hи  ѕѕ'ЎHи  ѓѓ„чи  ххкzHи  їїЄч@ и ъъФч@ и ! ыыфч@ и " ььш@ и # ээ„ш@ и $ ёё$ш@ и % ююDш@ и & яяdш@ и ' №№#ЇHи ( "" ЈHи * !!qœ@и , ћ_Hи . ,‹Hи / 02 @ и / 2и 2 5ˆHи 4 №2@ и 5 53@ и 6 2@ и 7 3@ и 8 n2@ и 9 P2@ и : г2@ и ; Л2@ и < 6ОHи = јјб˜Hи > ііDќи A ёёEДHи C їїЁq {@ и C Пс~MHи D ЋЋйM@и E ЊЊ…q­и H ККЦs{Hи I  јs{Hи J &&”s{Hи K /xMHи L ЄЄ[t{Hи M 22t{Hи N 88)t{Hи O ,,№trHи P DD"urHи Q JJОtHи R >>эq{Hи S ъъ r{Hи T №№Кq{Hи U ффхurHи V bb]wrHи W ŒŒwrHи X ’’vrHи Y hh„urHи Z VVЕurHи [ \\SurHи \ PPGvrHи ] nn‡r{Hи ^ ќќМr{Hи _ Rr{Hи ` ііГvrHи a zz"wrHи b ††цvrHи c €€НwMHи d ˜˜їwMHи e žž{vrHи f tt's{Hи g ^s{Hи h №r{Hи i т„Hи j bŽHи l l@и n иnHи p W_Hи q и @ и q Еи t ЫqHи v S@ и w џ@ и x /@ и y u@ и z ЛЛUHи { ^^іkUHи } ]]PM@и  XXMHи  YYю•MHи ‚ WWh{ M@ и ‚ LPC{Mи … GG1ИMHи ‡ [[ц{M@ и ˆ SS|M@ и ‰ TTF|M@ и Š UU‘{M@ и ‹ RRЁHи Œ <<:Hи Ž ;;^Ї@и  66XoHи ’ 77JzHи “ 55Il @ и “ -/"lи – ((:ЇHи ˜ 99—l@ и ™ 22Чl@ и š 33tl@ и › 11G:Hи œ ІІHи ž ЅЅ>@и     [Hи Ђ ЁЁј!Hи Ѓ ŸŸ’9 @ и Ѓ —šY9и І ’’№EHи Ј ЃЃЯ9@ и Љ œœ:@ и Њ ЄHи Ћ ‡‡Д?Hи ­ ††э*@и Џ ƒїHи Б ‚‚ђ7Hи В €€g• @ и В vz;•и Е qqчѕHи З „„Р•@ и И }}ч•@ и Й ~~—•@ и К ||хOHи Л ‹‹œHи Н ŠŠ§p@и П ……РHи С ††і^Hи Т „„ež @ и Т Nf@žи Х IIСfHи Ч ˆˆЫŸ@ и Ш ooWЃ@ и Щ €€Ÿ@ и Ъ kkВЂ@ и Ы }}U @ и Ь rrœŸ@ и Э nnƒЂ@ и Ю ||Ѓ@ и Я ~~kŸ@ и а mm/Ѓ@ и б ~ @ и в ss,Ё@ и г vvчž@ и д jjл @ и е uuИž@ и ж ii†Ѓ@ и з Žž@ и и hh[Ё@ и й ww Ђ@ и к zz†Ё@ и л xxAŸ@ и м llПЁ@ и н yyћŸ@ и о pp2 @ и п qqАЃ@ и р ‚‚:Ђ@ и с {{Ў @ и т tt…Hи у ЩЩВaHи х ШШКP@и ч УУe‘Hи щ ФФlHи ъ ТТK @ и ъ ВЗфJи э ­­мŠHи я ЦЦЫL@ и № ППЬK@ и ё ЛЛJL@ и ђ ННNK@ и ѓ ЙЙ‡L@ и є ООL@ и ѕ ММK@ и і ККM@ и ї РРХZHи ј ИИcHи њ ЗЗ|P@и ќ ВВ˜Hи ў ГГгЋHи џ ББ#n @ и џ ˜Ђџmи  ““L­Hи  ЕЕ%o@ и  ЉЉp@ и  ЏЏlo@ и  ЋЋУo@ и  ­­ѕn@ и ЈЈщo@ и ЎЎ”o@ и ЌЌЂn@ и ІІtn@ и ЅЅЭn@ и  ЇЇKn@ и  ЄЄJo@ и  ЊЊeф @ и  фјc=Hи    лћ@и  ;фи  ппŒфHи  ћћафHи    fхHи    —ЋHи  ЩЩHЂHи  ШШ[Л@и  УУt{Hи  ФФќЊHи ТТ a @ и ИМШ`и # ГГъЖHи % ЦЦсa@ и & РРNa@ и ' ОО”a@ и ( ППŠЁHи ) iiПЄHи + hhЩ@и - cc?`Hи / dd |Hи 0 bb(T @ и 0 :Tи 3 С|Hи 5 ffТW@ и 6 PPV@ и 7 FFŠW@ и 8 OOaZ@ и 9 ^^пX@ и : VVU@ и ; @@iY@ и < XXY@ и = WWV@ и > IIжT@ и ? ??W@ и @ LLнU@ и A EEŽY@ и B YYЌU@ и C DDЕY@ и D ZZЊV@ и E JJкV@ и F KKЙZ@ и G ``[W@ и H NNƒX@ и I TTЊT@ и J >>{T@ и K ==2U@ и L AAQT@ и M <<нY@ и N [[­X@ и O UUZ@ и P \\$X@ и Q RR2Z@ и R ]]‚U@ и S CCѓW@ и T QQYU@ и U BB7V@ и V GG^V@ и W HHZ@ и X __NX@ и Y SS/W@ и Z MM WHи [ ””XHи \ ’’*ли _ †ˆHи a ““ш‹ @ и a ‡Š‡#Hи b r@и c ŒŒЩ‹и f ‚‚œџ @ и f %?“Hи g UU­+@и h TTuџи k Hи l HHРџHи m BBBHи n NNрUHи o ~~7ЏHи q }}Эv@и s xxq[Hи u yy†ЂHи v wwГ @ и v ^iлВи y YYІ‚Hи { {{Д@ и | ppšГ@ и } mm Д@ и ~ ssъГ@ и  ooђД@ и € uu=Д@ и  qq+Г@ и ‚ kk[Г@ и ƒ llpД@ и „ rrЦД@ и … ttЦГ@ и † nnFПHи ‡ ччЩЅHи ‰ ццSЕ@и ‹ ссеƒHи  тт[QHи Ž ррлR @ и Ž взИRи ‘ ЭЭ1YHи “ ффuS@ и ” ммЪS@ и • ооœS@ и – нн*S@ и — ккS@ и ˜ ййTS@ и ™ ллHи š žси  ‰‰g7@и Ÿ g7@и Ё ŽŽНyHи Ђ ЊЁHи Є  K@и І ЎƒHи Ј  •Hи Љ юх @ и Љ ї§Ухи Ќ ђђЋKHи Ў  нц@ и Џ Bч@ и А  ч@ и Б ‚ц@ и В Mц@ и Г ц@ и Д џџДц@ и Е „ZUHи Ж ”yUHи И ЇdU@и К ‡šUHи М ш‡UHи Н ~ U@ и Н  з}Uи Р §§ѕˆUHи Т •U@ и У œ€U@ и Ф €U@ и Х U@ и Ц к€U@ и Ч \€U@ и Ш Х~U@ и Щ  w~U@ и Ъ  HU@ и Ы 3~U@ и Ь  ЭU@ и Э ОNHи Ю ••ь’Hи а ”” •@и в %uHи д и[Hи е ŽŽ?В @ и е „ˆ&Ви и fHи к ’’|В@ и л ‹‹\В@ и м ŠŠŸВ@ и н ŒŒыQ @ и н €‡HHи о ŠŠ„,@и п ‰‰СQи т {{<ў @ и т emЦHи у ppБ@и ф ooўи ч ``ќ9Hи ш ЙЙ‰ћ @ и ш БЖeћи ы ЌЌ_ @и э ИИЈoHи ю кк„dHи № йй#b@и ђ ддкЗHи є ееIyHи ѕ ггŠђ @ и ѕ ЪЬdђи ј ХХurHи њ ззѓ@ и ћ аанђ@ и ќ ЯЯIѓ@ и § ббДђ@ и ў ЮЮкш @ и ў  ГHи џ e@и  Йши  џџлК @ и  рёJHи  єєЫ@и  ѓѓЛКи  лл'  @ и  ТЦЃHи аа\ї@и ЯЯ и ННI Hи  ЩЩ{b @ и  šŸ;Hи  ЕЕЈ@и  ДДQbи  ••+cHи  ЎЎЂbHи  ЂЂчbHи  ЈЈ$yHи  ;;žzHи  ::дš@и  55В[Hи  66ŽHи  44Ђ5 @ и  'x5и ! MHи # 88”6@ и $ --ъ6@ и % //`6@ и & ,,M7@ и ' 11y7@ и ( 227@ и ) 00џ5@ и * **а5@ и + ))06@ и , ++Т6@ и - ..п–Hи . XXщPHи 0 WWaГ@и 2 RRhsHи 4 SSчrHи 5 QQ1oKи 8 HH—Hи : UUp@ и ; OOhoK@ и < MMЙoK@ и = NN˜ЛHи > eeŠ]Hи @ ddщV@и B __иHи D ``žЅHи E ^^/N @ и E KSNи H FFиpHи J bb&O@ и K YY…O@ и L [[ЏO@ и M \\RO@ и N ZZбN@ и O WW[N@ и P UUˆN@ и Q VVO@ и R XXлk @ и R hnЎnHи S qqЙЖ@и T ppЌkи W ccsЖHи X ћћ(Hи Z њњrW@и \ ѕѕтŽHи ^ ііvЙHи _ єєтŒ @ и _ ьюЛŒи b ччXPHи d јј5@ и e ёёz@ и f ђђ @ и g №№h` @ и g _c?2Hи h ffRі@и i ee:`и l ZZ7UHи m LLIHи o KK‹n@и q FFьdHи s GGюYHи t EEŒњ @ и t ;>eњи w 66•Hи y IIшњ@ и z AA:ћ@ и { CCЗњ@ и | @@ћ@ и } BB UHи ~ у у дXHи € т т ЬW@и ‚ н н БHи „ о о ЪАHи … м м ќ@ @ и … Ž Б р@и ˆ ‰ ‰ .†Hи Š р р TB@ и ‹ Л Л ”F@ и Œ й й CC@ и  Т Т ВB@ и Ž О О вB@ и  П П D@ и  Ш Ш ЄE@ и ‘ в в РE@ и ’ г г B@ и “ Н Н pB@ и ” М М œD@ и • Ь Ь ЉC@ и – Х Х %F@ и — ж ж пE@ и ˜ д д ЦA@ и ™ И И B@ и š К К яA@ и › Й Й  A@ и œ З З /D@ и  Щ Щ ЩC@ и ž Ц Ц BA@ и Ÿ Д Д eC@ и   У У СF@ и Ё к к щD@ и Ђ Э Э vD@ и Ѓ Ы Ы цC@ и Є Ч Ч UD@ и Ѕ Ъ Ъ F@ и І е е mF@ и Ї и и E@ и Ј Ю Ю A@ и Љ Г Г C@ и Њ С С .E@ и Ћ Я Я TE@ и Ќ а а aA@ и ­ Е Е юB@ и Ў Р Р ‚A@ и Џ Ж Ж HF@ и А з з vE@ и Б б б C@ и В Ф Ф к  @ и В & , a#Hи Г / / 1@и Д . . Џ и З ! ! :Hи И ^ ^ F%Hи К ] ] Б1@и М X X %Hи О Y Y M1Hи П W W уiи Т N N ІHи Ф [ [ Šj@ и Х U U j@ и Ц S S Kj@ и Ч T T цGHи Ш p p ЖHи Щ n n Єи Ь i i Ž?Hи Ю o o уfHи Я ++зHи б **ЩV@и г %%YxHи е &&wŠHи ж $$Бќ @ и ж ќи й žОHи л ((§@ и м  S§@ и н ""йќ@ и о 1§@ и п !!вNHи р  ЏVHи т  =І@и ф OjHи ц kfHи ч m @ и ч љќџlи ъ єєEЃHи ь dm@ и э џџЂm@ и ю =m@ и я ўў‡m@ и № Ё‡Hи ё ъъQYHи ѓ щщi@и ѕ ффK›Hи ї ххЧИHи ј уућO @ и ј йнкOи ћ ддˆHи § ччcP@ и ў ссDP@ и џ рр P@ и ппšQHи  88bОHи  77ЫЂ@и  22№iHи  33оbHи  11іЄ @ и  *,еЄи %%­qHи 55Ѕ@ и  ..CЅ@ и  //“‚ @ и  5B ўHи  ŽŽЇ@и  o‚и  00ђ‚Hи  KK4ƒHи  QQvƒHи  WWИƒHи  ]]њƒHи  cc<„Hи  iiД‚Hи  EE …Hи  {{О…Hи  ‡‡Т„Hи  uud…Hи  ~„Hи ooQHи ! 22—aHи # 11№w@и % ,,РЗHи ' --g™Hи ( ++ќŠ @ и ( !%оŠи + ЃHи - //C‹@ и . ((‹@ и / ''k‹@ и 0 ))ѕГHи 1 tt€„Hи 3 ssБl@и 5 nnсЇHи 7 ooЅ™Hи 8 mmт @ и 8 be[ти ; ]]ьЌHи = qqит@ и > hhЋт@ и ? ggу@ и @ iiу@ и A kk7у@ и B jjцHи C єєc3и F ээў@и H ђђў@и J ѓѓ€Hи K бб"RHи M ааєЙ@и O ЫЫ)~Hи Q ЬЬJЎHи R ЪЪЈr @ и R ФЦŠrи U ПП‰œHи W ЮЮЪr@ и X ШШHи Y ўўНуи \ їїmE@и ^ ќќmE@и ` §§>З @ и ` юіќHи a ]-@и b Зи e щщљИHи f “ИHи g  ]ЗHи h љљСЗHи i џџ-ИHи j њ4Hи k   МGHи m   i<@и o эHи q l0Hи r   хРи u Ц-Hи w С@ и x   9С@ и y   нHи z к к 0Hи | й й э@и ~ д д O(Hи € е е ё+Hи  г г ‘и „ Ы Ы I Hи † з з .‘@ и ‡ а а T‘@ и ˆ б б KЙHи ‰ ЂЂ‡Hи ‹ ЁЁИ›@и  œœWNHи  <ŒHи  ››Œhи “ ‘‘ШДHи • ŸŸМh@ и – ––цh@ и — ——i@ и ˜ ˜˜?i@ и ™ ™™ъNHи š ƒƒOБHи › œи ž ||(ЁHи   ‚‚ђ @ и   “–ƒ‹Hи Ё ™™К­@и Ђ ˜˜нёи Ѕ ŽŽœHи І ѕ ѕ йіHи Ј є є ?.@и Њ я я ШHи Ќ № № 1Hи ­ ю ю xљи А х х Hи В ђ ђ Юљ@ и Г ы ы Ѕљ@ и Д ъ ъ љљ@ и Е ь ь …Hи Ж wwa,Hи И vvџ@и К qq)Hи М rr:EHи Н ppп) @ и Н hkЙ)и Р ccСCHи Т tt2*@ и У nn *@ и Ф mmi @ и Ф • š ЪHи Х Є Є ™ @и Ц Ѓ Ѓ Kи Щ   „Hи Ъ   Ф„UHи Ы ­­)vUHи Э ЌЌт—U@и Я ЇЇ‚bUHи б ЈЈXiUHи в ІІі| U@ и в ŸЁг|Uи е šš# UHи з ЊЊ}U@ и и ЃЃT}U@ и й ЄЄдHи к ЧЧЯ8Hи м ЦЦИA@и о ССDHи р ТТД*Hи с РРП @ и с ЙЛрОи ф ДДџ Hи ц ФФPП@ и ч ННŠП@ и ш ООf: @ и ш ] ` Hи щ j j @и ъ i i @:и э X X ‰:Hи ю c c = Hи я а а і Hи ё Я Я Г8@и ѓ Ъ Ъ šHи ѕ Ы Ы сџHи і Щ Щ  @ и і Д Й ьŽи љ Џ Џ *CHи ћ Э Э ’@ и ќ О О M@ и § М М s@ и ў Н Н <@ и џ У У ќ@ и С С В@ и  П П Ф@ и  Ч Ч @ и  Т Т е@ и  Р Р 0@ и  Л Л œ@ и  Ц Ц Y@ и  Ф Ф w@ и  Х Х tHи ТТ'œHи ССцS@и ММ’“Hи  ННG†Hи  ЛЛŸ№ @ и  ЎГw№и  ЉЉ3oHи  ППё@ и  ЗЗJё@ и  ИИ}ё@ и  ЙЙЫ№@ и  ЕЕј№@ и  ЖЖаЎ @ и  D K |Hи  U U х3@и  T T ­Ўи  ? ? №ЎHи N N ЎН @ и ( x)Hи ! 2 2 ьњ@и " 1 1 ŠНи %   ЯНHи & + + {tHи ' тaHи ) и_@и + ж}Hи - JŸHи . ‡ѕ @ и . `ѕи 1 ќќSŠHи 3 Иі@ и 4 1і@ и 5  Žі@ и 6 \і@ и 7 оѕ@ и 8  Вѕ@ и 9   і@ и :  *›Hи ; BBNnHи = AAŸ@и ? <<тgHи A ==сЄHи B ;;з @ и B )0Би E $$dšHи G ??ƒ@ и H 55Ю@ и I 77)@ и J 99ј@ и K 88V@ и L 44,@ и M 33@ и N 22Њ@ и O 66РŽHи P ёёнRHи R №№\@и T ыыU’Hи V ььwДHи W ъъЄС @ и W Шз}Си Z УУџŸHи \ ююЖТ@ и ] оо:Ф@ и ^ цц–Ф@ и _ шшћС@ и ` ккUУ@ и a сс+Т@ и b ллзУ@ и c фф…Т@ и d нн§Т@ и e ппlФ@ и f чч€У@ и g ттWТ@ и h ммВУ@ и i ууЯС@ и j йй Ф@ и k хх0У@ и l рр}R @ и l Љ­†2Hи m АА/§@и n ЏЏVRи q ЄЄ”Hи r wHи t ŽŽ@и v ‰‰ NHи x ŠŠzHи y ˆˆ}* @ и y }[*и | xxgHи ~ ŒŒ+@ и  ††и*@ и € „„Ѓ*@ и  ƒƒћ*@ и ‚ ……TЅHи ƒ чœHи … Ђ@и ‡  ЪЇHи ‰  эXHи Š  ;Х @ и Š  Хи  ћћQHи  |Х@ и  ZХ@ и ‘ ЁХ@ и ’ &R4@и ’ ЯаBЏ4@и ’ 34BЏ4@и ’ z { BЏ4@и ’ BЏ4@и ’ xyBЏ4@и ’ ц ч BЏ4@и ’ A B BЏ4@и ’ Š‹BЏ4@и ’ в г BЏ4@и ’ n o BЏ4@и ’ Ђ Ѓ BЏ4M@и ’ Ž  BЏ4@и ’ Њ Ћ BЏ4@и ’ BЏ4@и ’ хцBЏ4E@и ’ EFBЏ4@и ’ *+BЏ4@и ’ прBЏ4@и ’ љњBЏ4@и ’ Ж З BЏ4@и ’ BЏ4@и ’ ј љ BЏ4@и ’ - . BЏ4@и ’ PQBЏ4@и ’   BЏ4@и ’ мнBЏ4@и ’ гдBЏ4@и ’ О П BЏ4@и ’ !"BЏ4@и ’ ‚ ƒ BЏ4@и ’ f g BЏ4Г@и ’ И Й BЏ4@и ’ deBЏ4@и ’ yzBЏ4@и ’ Є Ѕ BЏ4@и ’ ЫЬBЏ4@и ’ ЗИBЏ4@и ’ BЏ4@и ’ žŸBЏ4@и ’ юяBЏ4@и ’  BЏ4@и ’ 9 : BЏ4@и ’ ЃЄBЏ4@и ’ <=BЏ4@и ’ – — BЏ4@и ’ 34ђЅ4@и ’ ˜™ђЅ4@и ’ абC›4@и ’ ; < C›4@и ’ OPC›4@и ’ C›4@и ’ мнC›4@и ’ ќ§C›4@и ’ О П C›4@и ’ бвC›4M@и ’ ѓєC›4U@и ’ l m C›4@и ’ Є Ѕ C›4@и ’ RSC›4@и ’ ЕЖC›4@и ’ … † C›4@и ’ цчC›4@и ’ ’“C›4Е@и ’ ЗИC›4@и ’ U V C›4@и ’ ийC›4@и ’   C›4@и ’ -.C›4@и ’ §ўC›4@и ’ ‹ŒC›4@и ’ ]^C›4M@и ’ STC›4@и ’   C›4@и ’ ] ^ C›4@и ’ < = C›4@и ’ noC›4@и ’ ПРC›4@и ’ іїC›4@и ’ xyC›4M@и ’ C›4@и ’   C›4@и ’ ЁЂC›4@и ’ +,C›4@и ’ л м C›4@и ’ !"C›4@и ’ ‘C›4@и ’ `aC›4@и ’ ЊЋC›4@и ’ ‘C›4@и ’ u v C›4@и ’ ЧШC›4@и ’ ’“C›4@и ’   C›4@и ’ КЛC›4@и ’ ЎЏC›4@и ’ €C›4@и ’ Œ  C›4@и ’ СТC›4@и ’  Ž C›4@и ’ ФХC›4@и ’ '(C›4@и ’ WX”Ё4@и ’ ЉЊ|}4@и ’ ~|}4@и ’ ъы|}4U@и ’ opВЃ4@и ’ ОПВЃ4@и ’ єѕВЃ4@и ’ Ќ­ВЃ4@и ’ †‡нћ4@и ’ фхп­4@и ’ прп­4@и ’ п­4@и ’ XYп­4@и ’ Ђ4@и ’ мнЂ4@и ’ TUЂ4@и ’ Ђ4@и ’ \!]!Ђ4@и ’ ЯаЂ4@и ’ ЕЖЂ4@и ’ ŽЂ4@и ’ Ш Щ Ђ4@и ’ @AЂ4@и ’ {|Ђ4@и ’ "#Ђ4@и ’ јљЂ4@и ’  ЁЂ4@и ’ Ђ4@и ’ ќ§Ђ4@и ’ РСЂ4@и ’ 45Ђ4@и ’ т у Ђ4@и ’ `aЂ4@и ’ uvЂ4@и ’ ГДЂ4@и ’ ћќЂ4@и ’ ы ь Ђ4@и ’ JKЂ4@и ’ Ђ4@и ’ Ђ4@и ’ %&Ђ4@и ’ вгЂ4@и ’ Ђ4@и ’ &'Ђ4U@и ’ ЖЗЂ4@и ’ ЪЫЂ4@и ’ STЂ4@и ’ ‚ƒЂ4@и ’ *+Ђ4K@и ’ EFЂ4@и ’ “”Ђ4@и ’ БВЂ4@и ’ уфЂ4@и ’ ёђЂ4@и ’ зиЂ4@и ’ љњЂ4@и ’ фхЂ4@и ’ K L Ђ4@и ’ я№Ђ4U@и ’ њћЂ4@и ’ ЇЈЂ4M@и ’ DEЂ4@и ’ 34Ђ4@и ’ opЂ4@и ’ н о Ђ4@и ’ €Ђ4@и ’ Ђ4@и ’ qrЂ4@и ’ ^ _ Ђ4@и ’ 78Ђ4@и ’ 56Ђ4@и ’ ТУЂ4@и ’ –—Ђ4@и ’ ‘Ђ4@и ’ |}Ђ4@и ’ mnЂ4@и ’ ЈЉЂ4@и ’ VWЂ4@и ’ ЕЖЂ4@и ’ Ђ4@и ’ OPЂ4@и ’ бвЂ4@и ’ деЂ4@и ’ Ќ­Ђ4@и ’ мнЂ4@и ’ ‚Ђ4@и ’ ! Ђ4@и ’ Ђ4@и ’ –—Ђ4@и ’ ђѓЂ4@и ’ CDЂ4@и ’ ˆ‰Ђ4@и ’ ІЇЂ4@и ’ :;Ђ4@и ’ Ђ4@и ’ ЩЪЂ4@и ’ FGЂ4@и ’ ЯаЂ4@и ’  Ђ4@и ’ Ђ4@и ’ ХЦЂ4@и ’ ЅІЂ4@и ’ ŒЂ4@и ’ щъЂ4@и ’ %&Ђ4@и ’ Ђ4@и ’ >?Ђ4@и ’ †‡Ђ4@и ’ YZЂ4U@и ’ 45Ђ4@и ’ Ъ Ы Ђ4@и ’ tuЂ4@и ’ ijЂ4@и ’ йкЂ4@и ’ XYЂ4U@и ’ —˜Ђ4@и ’ Z[Ђ4@и ’ Ђ4@и ’ .!/!Ђ4@и ’ noЂ4@и ’ ЦЧЂ4@и ’ •–Ђ4@и ’ туЂ4@и ’ я№Ђ4@и ’ ^_Ђ4@и ’ АБЂ4@и ’ @AЂ4@и ’ r s Ђ4@и ’ Ђ4@и ’ bcЂ4@и ’ Ќ ­ Ђ4@и ’ VWЂ4@и ’ fgЂ4@и ’ МНЂ4@и ’ |}Ђ4@и ’ ЊЋЂ4@и ’ § ў Ђ4@и ’ х ц Ђ4@и ’ † ‡ Ђ4@и ’ ДЕЂ4@и ’ 23Ђ4@и ’ !"Ђ4@и ’ žТ ъ Ё  n FЕКУФШq H ыЁ: IЁ! Ь 'Ё*)&$%(#"Ќ д1Ё0G67:AWE<;=Fh3nJt9u@zK ONB"4M8L8IHDD>?Cё5D/-.ђ2E,q+і ФRЁQSPr іZЁYedc\gF_^bџfn`ja@]FXFVLW:[UT; ПkЁhlmjСi tЁsM’~{C‹CŠ=ˆ‰•”x|‘'}'ƒ@vЌw`y“‡g–„—р˜zŽ$р‚|…†$Œс€r%pуqnuonyи †ŸMžЎ‰ЅЉЂЊБЄЇЌЋЁ­ЏІАЃЈ›œ š™r yЕMВЙИЗЖДЩГ™ ЫПЁТСОМ,НРЛџКЈ НЩЂШEЮЫЬСЭЧtХЦЪФУН зеЁдзигбвжаЯ ЁлЁкмйOы ŒпMор‰н № ˆутфс} qчMцУшNхј ШыТъuьщ| pяMю№Nэєќ Bѓђ.є#ё уїЁіјѕє ћЁњќљ ЇџЂўЩ§ ћ “8 €Ёєў   #  ѕ ТЁ 8 qЁђ 8Ёџqѓ xMЭb ь  .#Ё"$!Kь Œ'M&(‰%џ  +*,) {/.0-є  3241ё ‡7Ё685њ &;Ё:<9є r?>@Ÿ= CьBDA ЂGЁFHE э ‰KЁJLџIю OЁNPMъ SЁRTQy …WMV]X‰U [ЁZ\Y Ж_Ё^`p]* гdЁa"ecbT ŠgьiDhfЎ нpЁoxrwytWvrsuzќnElKmQqQkXj|б ‰€M…Шƒ‰‚„}~|{d $ŒЁ‹•”ŽC“C=–’‘Šˆ‰''‡@† ЈЂœЎЉЇЄЅС ­ЂЊ ЏъЈяЌіŸїЃ§І;БЁЋА› ™šž˜—Є €ИЂЗЛКЖСДЕtЙГВЙ КТЁСЯФnХЦЧFШЩЬЭЮЕЪКЫУРФОШПqУНМЁ ЛжЂейийдСвгtзба| ІрЂптуфцхСомнс лкF ІъЁчщшєK Їюы#эьsК oєMі9ѓ”ё+ђѕ№я’ Њ§ЁќџћљњFўјїA ЅЂ‡ Я Ё  Whnt uz єR Љ# 4 P Ёq!џ1 Љ%Ё"$#Г п,Ё+m.0/*(W)r-'&š Y68534721Ы Ђ>Ё@=;<,?:9w —GьFVJIECDHB2AGŒ ŽQMP_STOMNRLK  МZM\у]YWСX[tVWUщ М`Ё_a^Е ЪhЁgkljfdWe"icbo ”sТrMwuvqoWpStInNm!o|Тyz{}~%xІ Й†Ђ…‰ˆŠС„‚tƒ‡=€Ѓ ‘ЁЂœ˜•“Ѕ—š jŸ@žF–FЁLЃ:™Є”›Ž’Œ‰‹§ яЈЁЇ ЉІ< n­ЂЊVБЎВСЏАtЌЋ5 ЋЖЂГЗИКМЛСЙЕДЛ рТЁФХЦСDПHРmУОНж –ЬьЮCЯаЫЩЪЭШЧh ШзТжлкйегWдЃивб[ тЁсыъьчщх цhэшфВрЗоŒпŒуУнмx ‚ёMю№яv ЪјТїџўњWћ§ќієѕ љЯѓЯђ0$ ЫЁ g [   џQU4@­!џq   W є%Ё#$" )Ё&*(' ^ ^10q;35=9?7<>џ8Q4U6:4/@-­.2,+ћ IAMCмE‰BD@И LЂKRWNСOQtUPVSTъJяHіIїM§G;F{Б n^M]Ma`l\Z[_YXЂ КhЂgУjklСfdtei=cІbI ’pТmonq ‘wьvD‰yz}Š{2€ў‹˜˜~…ƒˆ‡‚Œ|„ †ustxrqш RЁŽЮ‘ ‰˜Ё—œ›š–W”•™“’i &ЄЁЃЈЊѓЉCЇCІ=ЋЂ ЁЅџŸž} .ВЁБТПО,КРЕЗУИДЙМРНЦЙЦЛЫЖzСАЎЏГ­Ќє lХЩЦШЧФО ЕаЁЯвЮЬЭбFЫЪЮ GйЁифтсоулхмрнпЅзЋеЋжВк дг# —щьцъшч8Ÿ ёЁ№њќїљєВјЗіŒѓŒўУџћ`§ѕяgэюђьJыt Ж Ё  ,  }‰ pM,Nб4ш, nЁџ Y |&Ђ%#$()'С"Х š0ь/32.,-С1+*zї n6M5Ш74Ѕ *=Ё@A?<,:;>98r7 xEMBFGDCZ рLЁJIKONMWHX ЏTЂRQSUVW Pй ˜^ь]a`b\Z[_Y X{ ХiТhlkmgeWf[jdcМ ўtЁswvxrpFqouonЦ >Ё~‚ƒ,}{|€zywy ŠM‰]Œ‰Žˆ†‡‹…„x œ•Т”›žœš™W—ЁŸ h˜n“t‘u’z– 88 ЬЅЁЂЏЇЈІЊ­ЉЌБАjЎ@ЋFЄFЃ˜ ЮИЁЗМКН,ЛЖДЕЙГВ• ›ФьУЦЧТРССХП О œЭЁЯаЬЪЫЮWЩШƒ ОзЁжкйлСегtдќивб› €сЁуфроптFнмp +ыЁъј№і,їюњђєќяЙћРљЦѕЦёЫѓzэщ`чшьцgхk 'Ёѓ CC=џў§П йЁW  hn t  кЁЏ ;$Ё#0p3+,*2&)14(-Ѕ/Ћ'Ћ.В5 ," !%! =96џ87 А<Ђ;=:c DЁCSKOCTCF=YQRLMGJ'H'W@PЌVU`IXNBg@AE?р>љ Ѕ\Ђ[]Z— œcьefb`adС_^‘ лmЁltouqsWrrpkiќj’n—hъg@ (yЁv{zѓxCwuQ }}M~”|‘L ƒЁ€M†„…‚ вŒЁŽ‹‰ŠWˆ‡“ •Ё˜—”’“–‘ Щ dŸžВЄАЏЈЇЉБЁЕQІUЌЂ4Д@Ў­ЊЋџЅrГ­Ѓ›œ хš|™єВ pМЛ#ХŸФ(УОЧ:П#Т#Р СЦQКUИЙ4Н@З­Ж ?ЫЁШЬЭЪЩ‘Ж дЁгџшпоCцCч=ъисылфм'н'р@тЌук`зжщйgхвабАеЯЮ юЁэяьл ЖіЁѕјљєђѓїё№єB j§њЙў#џ#ќћr/ zM3 вЁ  Ё    Ž ЦТWЃхъ№` ~"Ё%$! #Њ я,Ё+ /.0*(F)-'&\ Ѓ7Ђ6;9<:5С34821O ѓ>Ё@?=" ™DьA7GEFCB& ˆKьHbJIД MQЁTSPNORML? ЩXТUWVУ ш_Ё^jcnfagFkbeihЕdК]У[Ф\Ш`qZYV ~mЁl_ sЁvurpCqCt=on= ЪzТwyx‰З €M‚^ƒ}~|{Ч ч‰Ё‹ŒŽ‘F’ˆ†‡БŠЗ…Н„ 2™Ё˜ Ÿ,ЂЁ›žœ—•Й–РšЦ”Ц“U ќЅЁЄІІЃ~' qЊMЇЗbЕСЖТРС4ЫЮЩЪ4­ЋЌБЏАДџВГОМНИЛПШIУIХФ]Й]КЦTЧTЎЉUЈ] вЁбеждCзCа=ЮЯгЭЬsŠ {оMну”р+стмк4лЮпй4иu lъщ#ю#ьyэшц:чы#х#фЋ 9ѕЁєїјѓ,ёђі№џяФ •џьў§ћќ2ўњ˜љ­ ž ь  С "#&!%  $, д Ё-Ё,250413/6+)*Ѕ.Ћ(Ћ'є– m=<"I GFHC:?#J#A EBQDU@;49@:­>8џ7 фNЁKOPQDMHLЪ `XWq[\џZVTUYSR s Scb|zynj{„‚rџpQfU…†4m@t­uџoq‰wgeƒ€ˆxх~|il'kчqs}(чh‡(vщa _`d^]я лŒЁ‹mŠMG ‹‘MŽШ‰ Г•Ё’—–˜”“а ВŸЂžЇЈЂСЋЄtЁІЉЃЊъЅяі›їœ§ ;š’™z RВБИЗЙДЖЕАЎЏџГ~­…ЌU ~ЛЁМНКШ хФЁУЫЪЩЬЦFШЧТРСRХWП^Оuˆ }гMвом‰линепзкжйбЯадЮџЭг ВцЂхщшъСфтtучс=р 6 QюЁыџэь0. ўђЁяё№N ˆѕЁєіѓ” ђ§Ёќ  џ ћFљњўјї) К Ђ    ш Ё   E ѓ Ё     C        œ 5 Ё & % ' ,!  (  $ " # ш э є ѕ љ ц t~ o. M1 2 N0 Œ- + , / 4* И) Ї M9 Ё8 @ A ? B ; > < = 7 5 У6 Щ: г4 г3 є> NF C #E #D ‘… ŒM ML ЄQ O P K I J N H G  M U R T S ‹ њ\ Ё[ ` ^ a _ Z FX Y ] W V з @h Ёg ˆ ~ Œ Ž { x z y j s r Ѕm Ћn Ћ В‰  l  ‘ u } ƒ o | „ ‚ хt | ‡ 'Š ч‹  p (q чw … v ( щ†  k б€ Gf џd іe Сi {c /b D  • Ё’ ” “ † D› ž #Ÿ # #š ˜ ™ œ #— –– 8 Ђ ЁЁ Ѓ   0А ќЊ ЁЉ Ў Ќ Џ ­ Ј FІ Ї Ћ Ѕ џЄ є‚ lЖ Е #К #И yЛ Й Д :В #Г З Б  А ž ЮТ ЁС Ц Х Ф Р О П У Н М e ЄЭ ЂЬ еЯ а Ы Щ Ъ СЮ Ш Ч x+ ‚д Mб ]л ‰е ж з и й к р о м п н г в јЭ Šч Mц Ръ ‰щ ы х у ф ш т с С тђ Ёё ѕ є і Dј Hї m№ ю я ѓ э ь P 3њ Ёќ ћ љ єв Ж   # џ   :ў #§ S   Ё   % ‡ Ђ    С  t  е Р Ё      %  b Ÿ! # C$    "   єa h* , - . / ) ' ( + & %  œ2 ь1 D3 0 - ё7 Ё4 6 5 l љ= Ё@ ? A < : ; F> 9 8 m ŠH ЁG K J ѓF ,D E I C B J ЃO ЁL MP N M tР |W MV Y ”Z +U S T X 4R ЮQ € Оa Ё` c d _ С] ^ tb Ў\ [ ( }h Ёe i g f GЯ Žp Mo V{ s t r w z v y u } ~ | x n l m q k j Љ №… Ё„ Š ‹ ‡ ˆ ‰ Fƒ  ‚ † € Е 2 Ў ЂŒ  Ž  0 Н” Ё‘ п• “ ’ „ ѕœ Ё› Ѓ Ђ Є Ÿ Ё F  ž š џ˜ n™ 7 <— B– ‘к Ћ ЁЊ Г В Б ­ Д Ў А Џ Љ Ї œЈ ЄЌ ТІ ТЅ j СЛ ЁК Ъ Р Т Ш Ф %Н Х ;Ь BС #Ч хЩ ъУ №Ы ёО іЦ UП Й ЉЗ …И М Ж зЕ 9 за Э Я џЮ n Ез Ёж л к ѓм ,й е г д и в б f Ху Ёт -ц х ч с п %р ф ;о Bн  0?Ђƒ#"й#"& КръЂй€|}|}|}|}|}|}п­|}|}п­п­уы ƒКуыC› ƒКœIC›YJј 0?Ђƒ#"й#"& КЂй€І™І™ 0?Ђƒ#"й#"& К дЂй€чТ„зYН|ŠаЅœ”?€‡qˆqˆъ†Ю‰ “€ВЃЧФqˆ‰Ђј~qˆd~k‰uїйЃ`ЂдзиŽ‰Ђ "%КЧФBЏc(. 0?Ђƒ#"й#"& КщіЂй€лЫYНў…?€Ю‰ “€ј~ЧПd~k‰ї ƒКЧПC›mР(Џ 0?Ђƒ#"й#"& КкЂй€‰Ђ‰Ђ|ŠЅoиЊаЅ0ЉpчjЉ‰Ђ‰ЂШ€œ”єo?€uМ|чТ‡qˆqˆtIЮ‰klTШ “€ј~d~чТ‡qˆїйЃ‰Ђ 0?Ђƒ#"й#"& КF†Ђй€qˆЅoШ€?€ъ†<‰р‡Ю‰‡гx‰Ђ‰ЂЗˆ­~ћˆk‰ї ƒКЊyC›Фz…z9]h 0?Ђƒ#"й#"& Клۀ鈉Ђ7q 0?Ђƒ#"й#"& КYНЂй€kl‰ЂВЃ‡ 0?Ђƒ#"й#"& К„зЂй€ў…ў… "%К№ЁBЏO(. "%КXŒBЏК†(. "%КqˆBЏј(. "%К7qBЏ}3(. "%КћШBЏž(. "%КIpBЏ-J(. "%К4BBЏЬ(. "%КйуBЏ@(. "%КїBЏˆџ(. "%КнЇBЏ (. "%К“BЏo(. "%К?€BЏь(. "%К­BЏG!(. "%КчТBЏПЌ(. "%КqBЏф“(. "%К"8BЏ№<(. "%К‰xBЏ–5(. "%К BЏЏ(. "%К .BЏш=(. "%КŒBЏс (. "%Кu BЏdН(. "%КФ{BЏЃ%(. "%К6 BЏvˆ(. "%Кр‡BЏP=(. "%КЈ&BЏ9](. "%К!rBЏ"Ќ(. "%КыBЏЕ(. "%К`ЂBЏ”(. "%Кk‰BЏ3(. "%КцBЏѕ(. "%КuBЏVў(. "%Кў…BЏh(. "%К"НBЏŠ(. "%К§ЖBЏ@(. ƒК’гC›(Џ К|ŠВЃч1Ѕ" 0?Ђƒ#"й#"& КjнЂй€|ŠШ€?€ “€ј~d~їйЃ 0?Ђƒ#"й#"& Ко‰Ђй€|ЉЂВЉЂ 0?Ђƒ#"й#"& Кћ$Ђй€|ŠлЫ?€ “€ј~’гd~ї 0?Ђƒ#"й#"& К-ЈЂй€‰Ђ|ŠIpЅoиЊ0ЉjЉШ€єo?€tIkl “€ј~d~їйЃ*{ 0?Ђƒ#"й#"& КШ€Ђй€hКhК 0?Ђƒ#"й#"& КhКЂй€йуйуйуйуйуйуйуйуйуйуйуйу 0?Ђƒ#"й#"& Къˀ鈉Ђ‰Ђ 0?Ђƒ#"й#"& КІЂй€ђЅуІВЃ­Ї‰Ђ ƒКуІC› ƒК­ЇC› 0?Ђƒ#"й#"& КЅoЂй€І| 0?Ђƒ#"й#"& КиЊЂй€І|І| ƒКаЅC› 0?Ђƒ#"й#"& КаЯЂй€Ѕo?€ъ†<‰р‡Ю‰‡гx‰Ђ‰Ђ­~ї К0ЉВЃЬч1ЬЅ" ƒКтPC›†Q ƒКjЉC› 0?Ђƒ#"й#"& КпЂй€ВЃ;Ž|} 0?Ђƒ#"й#"& КHYЂй€‰Ђ 0?Ђƒ#"й#"& КфЂЂй€ї— 0?Ђƒ#"й#"& Кї—Ђй€<‰<‰ 0?Ђƒ#"й#"& К;ŽЂй€п­|} 0?Ђƒ#"й#"& КНМЂй€їМп­ "%КїМBЏP=(. 0?Ђƒ#"й#"& КЪЂй€;ŽНМЙš 0?Ђƒ#"й#"& Кœ”Ђй€Ъ Ъ 1‘(Ђ(КєoІ| 1 ‘( Ђ( 0?Ђƒ#"й#"& К5ЙЂй€Њyєoј~ 0?Ђƒ#"й#"& К–Ђй€ЅoШ€єoqˆ?€ъ†<‰р‡Ю‰‡гx)я‰Ђ‰ЂЗˆ­~ћˆk‰ї "%К)яBЏc(. ƒКХnC›јЉБўБќАh ƒКЊЋC›DЌБЌaЎ"­Ў”­ 0?Ђƒ#"й#"& ККрЂй€Њy|ћ– 0?Ђƒ#"й#"& К–Ђй€kl|ћ– 0?Ђƒ#"й#"& КTШЂй€ВЃ|Šј~ 0?Ђƒ#"й#"& КЂй€YНШ€œ”?€ “€ј~d~ї*{ ƒК‚C› 0?Ђƒ#"й#"& КаЪЂй€лЫ?€ “€ј~vЫd~ї ƒКvЫC›(Џ 0?Ђƒ#"й#"& К[Ђй€‰ЂЅoиЊ0ЉШ€œ”єo?€‚tIkl “€ј~d~k‰тPї*{ ƒˆєйЫєКєп­ ƒК}C›Ѓ% 0?Ђƒ#"й#"& КW^Ђй€qˆ„зў…œ”?€qˆъ†Ю‰ј~ВЃў…qˆї КtIђЅE ‘(E e(E Ђ(E }( 0?Ђƒ#"й#"& Къ†Ђй€бЕЖ‰Ђ,Жј~НЖ§ЖWЖ‰Ђ›Е 0?Ђƒ#"й#"& КnЂй€ХnŠn 0?Ђƒ#"й#"& КјКЂй€ЊyЗˆћˆ ƒК‘’C› 0?Ђƒ#"й#"& К|‘Ђй€‡qˆЅoœ”єo“?€qˆъ†<‰р‡Ю‰‡гx‰Ђ‰Ђ­~‘’Њyk‰ї КR&R КЧЮ‘p 0?Ђƒ#"й#"& КЮ‰Ђй€‰x‰x‰Ђ‰x 0?Ђƒ#"й#"& Кц&Ђй€|}|}|}|}п­|} 0?Ђƒ#"й#"& Кї.Ђй€нћ7qYН†0?€Ю‰kl u “€ј~­~‡Ж‹d~ї КklђЅœA}(œAЂ(œA‘(œAe( 0?Ђƒ#"й#"& КбЕЂй€ј~ 0?Ђƒ#"й#"& КGЂй€лЫ?€Ю‰kl “€ј~­~!—d~ї ƒК!—C›Ц— 0?Ђƒ#"й#"& КМЂй€6 чТYНћШpч?€qˆъ†Ю‰kl u “€ј~­~‡d~<‰‰Ђї 0?Ђƒ#"й#"& КЖЂй€ј~u 0?Ђƒ#"й#"& К‘pЂй€Šnq ƒКŠnC›G ‘(Ђ(1КІ|п­GЂ(G1G‘( 0?Ђƒ#"й#"& КЙšЂй€|}вn "%КвnBЏИ)(. 0?Ђƒ#"й#"& КУ*Ђй€ВЃВЃВЃ ƒКгxC›Ѓ%Žy ‘(1Ђ(Кvрп­с Ђ(с ‘(с 1 ‘(1Ђ(К?Џп­E1E‘(EЂ( 0?Ђƒ#"й#"& Кј˜Ђй€­ј~ц 0?Ђƒ#"й#"& КыХЂй€­ј~ц 0?Ђƒ#"й#"& К\ўЂй€­ј~ц 0?Ђƒ#"й#"& Кщ>Ђй€­ј~ц 0?Ђƒ#"й#"& К"Ђй€­ј~ц 0?Ђƒ#"й#"& КœЂй€иЊ р‡‰ЂтЬр‡Ф{ј~<‰’ЮЮ ƒКтЬC›‘MЛTVž%4яK#дг%Є  0?Ђƒ#"й#"& КЮЂй€р‡ј~М|<‰ 0?Ђƒ#"й#"& Кt›Ђй€œ?œ 0?Ђƒ#"й#"& К?œЂй€ВЃп­ 0?Ђƒ#"й#"& КОЂй€­ј~ц 0?Ђƒ#"й#"& К“€Ђй€нћНЖ 0?Ђƒ#"й#"& Кr+Ђй€YНЅoиЊ0Љ<‰?€ “€ВЃј~‡d~<‰їžиŽ 0?Ђƒ#"й#"& КЋ'Ђй€?€“€ј~d~ї 0?Ђƒ#"й#"& КPйЂй€лЫ?€“€кј~d~ї ƒКкC›(Џ 0?Ђƒ#"й#"& К;Ђй€ў…Ш€?€qˆtIъ† “€Б=‰Ђј~GА‡d~ї‰Ђ ƒКБ=C› "%КGАBЏ[k(. 0?Ђƒ#"й#"& КЂй€ы|ŠЅoиЊаЅ0ЉВŠjЉœ”єo?€"НВŠј~‰ЂbЅнЇї*{ы "%КbЅBЏœ^(. 0?Ђƒ#"й#"& КУœЂй€œ‰Ђ 0?Ђƒ#"й#"& КўлЂй€Ѕoœ”?€<‰р‡­~ї ƒКМ(C›™)Ѓ% К‹}|}*7Ђ(*7‘( ƒКRC›*7OЮ 0?Ђƒ#"й#"& КєвЂй€‹}QЩ 0?Ђƒ#"й#"& ʀ鈋}жz 0?Ђƒ#"й#"& КЇdЂй€чТ„з|Їœ”?€qˆqˆъ†Ю‰ “€qˆ‰Ђј~‡qˆd~k‰uї 0?Ђƒ#"й#"& К`pЂй€лЫ?€Ю‰ “€ј~ѓ?d~k‰ї ƒКѓ?C›mР(Џ 0?Ђƒ#"й#"& К†Ђй€|ŠЅo‰Ђ‰Ђœ”?€uМ|qˆtIЮ‰kl ВЃ“€-ј~‡d~qˆqˆї "%К-BЏc(. 0?Ђƒ#"й#"& К,ЖЂй€ј~u ƒКШjC›6kqk ƒКжzC› ƒК3вC›пв ƒКс C›в> 0?Ђƒ#"й#"& КжЦЂй€?€Ю‰ “€ј~d~ї 0?Ђƒ#"й#"& Кј~Ђй€п­с  0?Ђƒ#"й#"& КkяЂй€­ј~ц 0?Ђƒ#"й#"& КыЃЂй€Ѕo?€­~ї Кpѓ|}Ÿ Ђ(Ÿ ‘( ƒКІ™C›Ÿ Ÿš"š ƒКЗˆC› 0?Ђƒ#"й#"& КQMЂй€pѓQЩ ƒКQЩC› 0?Ђƒ#"й#"& КјшЂй€Ѕo?€ъ†<‰р‡‡гx‰Ђ‰Ђ­~ї К­~нћ 0?Ђƒ#"й#"& К Ђй€pѓsЪ ƒКsЪC› 0?Ђƒ#"й#"& КСЂй€‰Ђ‰Ђ 0?Ђƒ#"й#"& КpчЂй€‰Ђ‰Ђ‰Ђ‰ЂС‰Ђ‰Ђ‰Ђ 0?Ђƒ#"й#"& К2Ђй€ќ|ŠІ2<‰ВŠВŠВЃВЃ "%КќBЏИ)(. ƒКuqC›К†ЩСрЙixШbЬЉЯЫРУХбдŽЦЕЬЮѓТЧгўМEзmдCУ‹жtФЪцШZбЅе\ХQвщбЫшж4аёЪ 0?Ђƒ#"й#"& КžЂй€<‰Ф{<‰<‰ 0?Ђƒ#"й#"& К*{Ђй€|||Ф{ 0?Ђƒ#"й#"& КlЂй€,9ž• 0?Ђƒ#"й#"& К,9Ђй€<‰<‰ 0?Ђƒ#"й#"& К•Ђй€<‰<‰<‰ 0?Ђƒ#"й#"& К'žЂй€7qYНў…фЂ?€tIЊyЮ‰kl “€‰Ђј~Ё­~Ж‹d~k‰ц<‰qˆ№Ё" їйЃ`Ђ‰Ђ 0?Ђƒ#"й#"& КЁЂй€„з‰ЂВЃ‰Ђ|ЉЂ‰Ђдз 0?Ђƒ#"й#"& КчmЂй€лЫYН?€Ю‰kl “€ј~­~фd~ї ƒКфC›•b/хЦ— 0?Ђƒ#"й#"& К“`Ђй€цqˆ№Ё 0?Ђƒ#"й#"& КъSЂй€<‰чТ„зYНъЛў…Ш€HY?€‰ЂtI›ЕЮ‰kl “€‰Ђл‰Ђ‰Ђј~­~ў…d~<‰Œ<‰<‰‰Ђqˆ№Ёъ†" їйЃž‰Ђ "%КлBЏc(. ƒКЖ‹C› ƒКГC› Ѓ%Ц— 0?Ђƒ#"й#"& КСВЂй€qˆЅoШ€?€Ю‰Зˆ­~Гћˆk‰ї 0?Ђƒ#"й#"& КЁRЂй€?€ВЃ“€ј~d~ї Кd~ВЃ†7Ѕ"†7ч1 0?Ђƒ#"й#"& КЄхЂй€?€ “€ј~­~d~ї 0?Ђƒ#"й#"& КЗ}Ђй€‰ЂШ€?€tI “€ј~­~ud~ї 0?Ђƒ#"й#"& КВЂй€­ј~ц ƒКЃQC› ƒКўC› Кћˆ”Ёƒ Ѕ" 0?Ђƒ#"й#"& КJђЂй€ѓѓѓј~ ƒКЄшC› ƒКЇКC› ƒКѓC›Ѓ% ƒК\C›scEЃ% 0?Ђƒ#"й#"& КZ5Ђй€o?€tIЮ‰ “€ј~d~k‰ї 0?Ђƒ#"й#"& КoЂй€‰ЂЅoєo 0?Ђƒ#"й#"& КыMЂй€?€Ю‰ “€ј~d~ЎNї ƒКЎNC› 0?Ђƒ#"й#"& К ŒЂй€\ŸВЃ ƒКŸC› 0?Ђƒ#"й#"& КJњЂй€Ѕo?€­~ї 0?Ђƒ#"й#"& Ка@Ђй€‰Ђ"8ЅopчjЉ‰ЂШ€œ” єoФD?€‰xu‡4BqˆqˆtIр‡‡ .ВЃ‹‰Ђ‰Ђ‰Ђ‰xр‡Зˆ­~Њyћˆk‰qˆ‡ъ†‰x<‰ї ƒК C› 0?Ђƒ#"й#"& КФDЂй€ЃQўВЃ "%К‹BЏc(. 0?Ђƒ#"й#"& КuќЂй€Ѕo?€­~ї 0?Ђƒ#"й#"& КюlЂй€Ѕo?€­~ї 0?Ђƒ#"й#"& К’ЮЂй€п­<‰ј~ 0?Ђƒ#"й#"& КРЄЂй€ј~Њy ƒКW‚C›$ƒfƒЈƒъƒ,„n„Ѓ%I…я…ј„Ђ…Б„ 0?Ђƒ#"й#"& КЬŠЂй€­ј~ц 0?Ђƒ#"й#"& КAтЂй€­ј~цЊуcу КR3|}ЊўЂ(Њў‘( 0?Ђƒ#"й#"& КWЖЂй€ј~ К" ВЃ‰Eч1‰EЅ" ƒК‡C›Ѓ%жИŸЗИpИ 0?Ђƒ#"й#"& КФРЂй€п­ВЃ 0?Ђƒ#"й#"& КтЂй€п­ВЃ 0?Ђƒ#"й#"& КhhЂй€п­ВЃcœБё "%КcœBЏP=(. ƒКБёC› 0?Ђƒ#"й#"& КWљЂй€п­п­п­ 0?Ђƒ#"й#"& КВŠЂй€‡‡ ƒКйЃC›Н 0?Ђƒ#"й#"& КМ|Ђй€:}|} 0?Ђƒ#"й#"& КЖОЂй€|}|} ƒК:}C›й: 0?Ђƒ#"й#"& КиŽЂй€‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ 0?Ђƒ#"й#"& К[№Ђй€?€“€п­d~ї ƒК–ЎC›(Џ ƒКrНC›(Џ 0?Ђƒ#"й#"& КEѕЂй€YН?€ “€ј~d~ї 0?Ђƒ#"й#"& К—Ђй€лЫ?€ “€ј~–Ўd~ї 0?Ђƒ#"й#"& КbСЂй€чТ7qYНў…?€qˆ№ЁtIkl “€ј~rНd~цї ƒКдзC› 0?Ђƒ#"й#"& К›ЕЂй€нћп­У*п­ 0?Ђƒ#"й#"& КХЂй€­ј~ц?€ллњ? чЪ sEччC›ЛЛЂККРі ГГЂd ДДѓпъ ББвB ЗЗtG ВВєХnH  jsH ООњСE@ѕї|Щn@FЯ(@ JJFЯл@ MMВЩ$@NNВЩН@KK`Ъф@II`Ъž@LL”вЌ@ZZ”вЊ@WW1Тф@[[1ТI@ XX ТQ@#VV Т@%YYэУ,@(ddэУ!@*gg.Ш^@,hh.Ша@/ee ХЯ@1ff ХЯ@4ccLsH"7ЎЏQЧ@:##QЧ@<&&TС@>''TС@A$$„Ъ@D""„Ъ@F%%Ч@HƒƒЧ@KtУ@N€€tУ@P„„œд@R……œд@UЦ@X‚‚Ц@Z††­Ф@\tt­Ф@_qqЩ@brrЩ@duu‘Т@fss‘Т@ipp•Ю@lžž•Ю@nŸŸ.Ы@q00.Ы@s33С@v11С@x44ЮЦ"@{//ЮЦЂ@}22мЫ@€ЈЈмЫ@‚ЉЉъе@…ъе@‡ Э@‰ŽŽ Э@ŒŒŒCЮ@Ž˜˜CЮ@‘––ЙЧ@”——ЙЧ@–™™вУ@˜ГЕoа@›ЃЃoа@ЄЄ\гj@ ==\г@Ђ@@жв @ЄAAжвя@Ї>>њдd@Њ<<њд@Ќ??ЮЬ@ЎGGЮЬч@БDDЉСl@ДEEЉСq@ЖHH гЩ@ЙCC г™@ЛFFnШS@ОQQnШO@РTTBЬ@@УRRBЬK@ХUUˆЯы@ШPPˆЯ:@ЪSSЊР4@ЬaaЊР@Я^^ЃХ @бbbЃХ @д__фањ@ж``фа‘@й]]1sH"мЋЌїг@о  їг@сmЦЂ@у!!mЦ"@ц“Ь@щ“Ьn@ыўЭ@э{{ўЭ@№wwдТ@ђ||дТ@ѕxxЈг@јyyЈг@њ}}•Ч@§zz•Ч@џ~~%з@kk%з@nnNд@llNд@ oo#У@ jj#У@mmhж@hж@œœPФ@--PФ@**ђЩ8@++ђЩЂ@..ТШ@ ))ТШ@",,8б@$ЇЇ8б@'ІІ{е@*‰‰{е@,‹‹1Х@/ˆˆ1Х@1ŠŠ(в@4’’(в@6””Тб@8••Тб@;““vЫ@>ЁЁvЫ@@ЂЂТж;@C77Тж'@E::а@G;;ал@J88ЫЪО@M66ЫЪЮ@O99#еn@QsETщщ[ЦnHV‚s@ XФФšs(YЩЩLЪn@Zћћ s4@ZчшW E@ Zэ№—?’˜ ь–ы“  ‘hgcdef&%"!џ#$~}yz|{<I;I87]:]9TTŒ‹UUŽONKJLMUTPQSR[ZWVYX`a\]^_vurqts34/021ijklnmpo'(*)+,.-„ƒ‚AB@?†…‡ˆCDFEwx65ЉIH€>=b G ”•Ас„чэъƒ˜Щƒ–СjЯƒjЯƒеЩƒ–СеЩƒ–СЎоƒЎоƒИвƒ–СИвƒTТƒ–СTТƒ–С„ьƒ„ьƒ–СФƒФƒQШƒ–СQШƒЅ№ƒ–СЅ№йЬƒЬƒ–СvЧƒvЧƒxСƒ–СxСƒ–Саƒаƒ8Чƒ–С8Чƒ–С–Уƒ–УƒОдƒ–СОдƒ–С:Цƒ:ЦƒаФƒ–СаФƒ–СAЩƒAЩƒšуƒ–Сšуƒ–СЛЮƒЛЮƒ–СUЫƒUЫƒ–С4Сƒ4Сƒ–СFэƒFэƒ–СЬƒЬƒ–Сжƒжƒ8Эƒ–С8ЭƒoЮƒ–СoЮƒ–СуЧƒуЧƒюЩƒ–С™аƒ™аƒ–С…гƒ…гƒўвƒ–Сўвƒ–СюуƒюуйК†йІЦК†йІЦЩСйЩСйІЦрЙйрЙйІЦШйШйІЦbЬйbЬйІЦЉЯйЉЯйЫРйІЦЫРйУХйІЦУХйбйІЦбƒЬ юйдйІЦдйŽЦйІЦŽЦйІЦЕЬйЕЬйЮйІЦЮйѓТйІЦѓТйІЦЧгйЧгйІЦўМйўМйІЦEзйEзйІЦmдйmдйІЦCУйCУй‹жйІЦ‹жйtФйІЦtФйІЦЪйЪйІЦцШйцШйZбйІЦZбйІЦЅейЅейІЦ\Хй\ХйІЦQвйQвйщбйІЦщбйІЦЫйЫйІЦшжйшжй4айІЦ4айІЦёЪйёЪй:еКњ? sй€й#тМч| ЎЙŒ 6E†0 OrЉ{ %&R 0Оыё† 9,V‹u? C]pШ N‘Ѕ}Š XwЁ{ cЂЖMz? mv| tпћдs ЅBw Žrˆ0t ™НеВ„ Є§В„Єў5w Љy‹‰ Ўђўвƒ ГWc" И3?V‹ Н!rŒ Т] ЯjƒЛ| иЗI“ у.I“у.{} ьЉЙH‰ ѕ’ЂЪt? ќdqСƒ џx›} 5PEƒ ,іt? !ˆ› w /РоZ{ 6P]svр BРйЗz Eи{ J>If‚ Wхџ)x? cрі)x?cсі| h,7| r/јŽ „FkBЏ„ЎЎђЅ?„PPНЖ„xxC›„ппВЃ„,,п­„Ђ„ˆˆCє „AпH„ИИsиH„ЖЖаŽ„ББ\ьH„ЗЗRŒ @ „>AѓмH„DDЫт@„ CC/Œ„ 99ћ‘ @ „ WaeяH„ qqIр@„ppв‘„RR€’H„jj!’H„dd<ъH„$$}к@„}к@„}к@„L•„kф@„!!kф@„!""kф@„###&R4@„#УшH„$ъъKщH„&щщ›р@„(ффчH„*ххќхH„+уухz @ „+ЦгЩz„.СС‰яH„0ччч{@ „1ллŒ{@ „2ййh{@ „3ииX|@ „4оо|@ „5мм |@ „6рр9|@ „7нн>{@ „8ззШ|@ „9ссО{@ „:ккƒ|@ „;пп!{@ „<жж{@ „=ее‡ @ „=49ЄэH„>UUЁо@„?TT‡„B//9‡H„C<< ˆH„DHHЄ‡H„EBBnˆH„FNNук>H„GooЭьџH„Inn]ю?@„Kii№сЇH„MjjTы?H„NhhБu?„Q``yуQH„Sllv?@ „Tffуu?@ „UeeѓцH„VЄЄлиH„XЃЃощ@„ZžžИкH„\ŸŸ›ьH„]ы„`””ѓчH„bЁЁI‘@ „cššz‘@ „d››‘@ „e™™рH„f‰‰OцH„hˆˆ2ю@„jƒƒтH„l„„‡щH„m‚‚ Š„pzzирH„r††ўŠ@ „s€€ЯŠ@ „t5чH„uЕЕЧпH„wДД{ц@„yЏЏJйH„{ААфуH„|ЎЎю’„ЅЅ:иH„ВВ1“@ „‚ЌЌ“@ „ƒЊЊ“@ „„ЋЋтыH„…zнH„‡Ју@„‰яH„‹„пH„Œ  bz?„1цH„‘ƒz?@ „’  z?@ „“  ,Ž @ „“чъ пH„”њњл@„•љљŽ„˜тт‰ŽH„™ѓѓBŽH„šээЏз?H„›ЄЄAэ?H„ЃЃ+л@„Ÿžž‰ыH„ЁŸŸžшH„Ђъs„Ѕ’’Ху?H„ЇЁЁ`t@ „Ј™™=t@ „Љ˜˜ t@ „Њ——~t@ „ЋššЄt@ „Ќ››Žц?H„­‡‡Ми?H„Џ††Dк?@„Бfч?H„Г‚‚Nи?H„Д€€Xw7„Зuuш?H„Й„„Пw?@ „К||žw?@ „Л{{zw?@ „Мzzнw?@ „Н}}x?@ „О~~>шH„ПддЕтH„СггЄй@„УЮЮЋцH„ХЯЯIлH„ЦЭЭ:} @ „ЦХШ!}„ЩРРСлH„ЫббW}@ „ЬЪЪi}@ „ЭЫЫж„1 …Я§Ц†H…а™†H…в†@…д  @†H…ж  с…H…з  ќ„…кl†H…мJ…@ …нЌ…@ …о~…@ …пgŠ @ …п‡8яH…рŠŠbк@…с‰‰NŠ…ф||dпH…х§§Ю‰@ …чњњ Š@ …щћћЉ‰…ьѕѕIтH…эbb„@ …я__c„@ …ё``№ƒ…єZZйH…ѕ>>f@ …ї;;Ћ@ …љ<<>…ќ66ˆлH…§  ”‹@ …џг‹@ …o‹…NхH…ЊŒ@ …уŒ@ … ˆŒ…   ЙщH… ‚‚tрH…kх@…||љпH…}}нH…{{Ѕ @ …rt{…mmШяH…г@ …vv0€@ …xx€@ …wwa€@ …yyЮ€ @ …•šxйH…ЖЖ†о@…ЕЕЕ€…"!H…#ЃЃф€H…$ H…%ЉЉ‚H…&ЏЏg“1 †(. •H†)--х”H†+,,r”@†-''˜”H†/((E”H†0&&‡“†3О”H†5**Щ“@ †6""”@ †7$$ї“@ †8##тцH†9ИИо@†;ГГо@†=ББо@†?ВВ…}†BЌЌ к@†DЕЕ к@†FЖЖ к@†HЗЗЈкH†IЁЁŒс@†KœœŒс@†M››Œс@†Oššй’†R••м@†TŸŸм@†Vžžм@†X  оэ?H†Yppкt?†\ggэ?@†^mmэ?@†`ooэ?@†bnnэ?@†dllŒйH†e€€і†h{{ечH†iOOснH†kNNТн@†mIIлъH†oJJЂяH†pHHе} @ †p=@В}†s88юH†uLLˆ~@ †vFFќ}@ †wBB ~@ †xCCB~@ †yDDd~@ †zEEУфH†{++всH†}**ѕэ@†%%фH†&&‹юH†‚$$Zƒ†…ФыH†‡(({ƒ@ †ˆ!!ƒ@ †‰""Yн?H†Šššdщ?H†Œ™™Рц?@†Ž””Мэ?H†••{э?H†‘““u?†”‹‹;у?H†–——iu?@ †—‘‘6u?@ †˜кшH†™ннЙйH†›ммОх@†зз№тH†Ÿии`эH† жж‰ @ † ШЮыˆ†ЃУУўуH†Ѕккw‰@ †Іддe‰@ †ЇггQ‰@ †Јвв5‰@ †Љбб‰@ †ЊааEмH†Ћ\\C†ЎSS˜н@†АYY˜н@†ВZZ˜н@†ДXX˜н@†Ж[[^уБH†Зииъл”H†Йззуш@†Лвв0фOH†НггeлёH†ОббЇv t@ †ОШЫ‡v8†СУУ1хxH†Уееw@ †ФЯЯЫv@ †ХЭЭьv@ †ЦЮЮLяH†Ч  }†Ъ$иH†ЫHH1•†ЮAA=с@†аFF=с@†вGGызH†гўўоH†е§§хх@†зјј-кH†йљљ'мH†кїї‚ @ †кэ№u‚†ншш„чH†пћћ ƒ@ †рѕѕЏ‚@ †сђђь‚@ †тєєЫ‚@ †уѓѓGx1? ‡хрі(z?H‡цѕѕz?H‡шєєŽy?@‡ъяяДy?H‡ь№№ay?H‡эююgx?‡№ффкy?H‡ђђђрx?@ ‡ѓъъy?@ ‡єыы6y?@ ‡ѕььЉx?@ ‡іщщцH‡ї66*ƒ‡њ//пф@‡ќ55пф@‡ў44ЇыH‡џ..GчH‡--Xъ@‡((эшH‡)),№H‡''о~‡ иH‡ ++@ ‡ %%@ ‡ $$лпH‡jj*йH‡iiLф@‡ddЬзH‡ee хH‡cc2 @ ‡NW‡IIЃфH‡gg}@ ‡ZZ!@ ‡^^ѓ@ ‡]]Х@ ‡\\Y@ ‡YY›@ ‡ aap@ ‡!``Є@ ‡"[[K@ ‡#__BЏ4@‡#ЎЏђЅ4@‡#PQђЅ4?@‡#deНЖ4@‡#xyC›4@‡#67C›4@‡#прC›4@‡#OPC›4@‡#,-C›4@‡#yzC›4@‡#ŽВЃ4@‡#,-ВЃ4@‡#>?п­4@‡#п­4@‡#34п­4@‡#ђѓп­4@‡#п­4@‡#ЉЊп­4@‡#п­4@‡#WXп­4@‡#’“Ђ45@‡#РСЂ4?@‡#Ђ4@‡#ОПЂ4@‡#НОЂ4@‡#Ђ4@‡#Ђ4@‡#56Ђ4@‡#Ђ4@‡#ЂЃЂ4@‡#jkЂ4?@‡#]^Ђ4@‡#хцЂ4@‡#Ђ4?@‡#ˆ‰Ђ4@‡#‘’Ђ4@‡#РСЂ4@‡#FGЂ4@‡#wxЂ4?@‡#стЂ4@‡#rsЂ4@‡#ўџƒ“|7У685—Œ<ж9;:™0@У=B#A#?>Є{GУFE#D#JIH%CDЉRRЦQ`_[VUЩ]TXZW^Y\PNOџSML•š†dжaŽegfhcbїБunЦqpmkloЩji…ЕwУ{y#z#vtu xsr€ИЁж„ƒ€џ~‚С}|Џ{ŠУŽ#Œ#‰‡ˆ%‹†…DЈz”Ц–—“‘’•Щ‚˜|›Әœš™ЌsЃЦЇІЅЈЉЂ ЁЄŸžЋКwЏЦГВБДЕЎЩЌ­АЋџЊ[ЊtМжЛОПКИЙЩНЗЖ‚Л…ЦжШFЪЩХУФЧТСG›wЮжЫЭЬGЁ‰вжа#бЯјЅƒжжд-еџг‚ кжийзŸ‹ожм-нл‚ЂŒтжрспїАщжшыэьючх цhъфу€œ|ђжяШєѓѕіё№Ћ“§Уџ##ќњћ%ўџљpјєЃ}ж ЩІ‰У ™ # #Сt •tЦ‚–ƒжў­} ж#$%&"!Гƒ,ж.ї/џ+q)*-('Дt5Ц874236Щ10фЖw?ж>oEDCBAС=;<@:9”{GжK7IHJFіЇvRЦQUVTPNЩOSџMoLDKzXЦWž{ZУ\[#Y€В‚cжbfhgea_`d^]ЌЙxoЦtqrsnlЩmopkj|vжw-xu…Ў|~ж€}{|zyƒЗŽˆУ‡Ž#Š#‘Œ ‹’†ъ„я…і‰їƒ§‚C”( "%Кч|BЏ…ь(. ƒКŒC› ƒК†0C›Р’d’ Ђ(‘(1КЉ{п­ŒфЂ(Œф‘(Œф1 0?Ђƒ#"й#"& К&RЂй€|Љ{{v|ЪtЛ|іtZ{ч|и{Ъt|нћ ƒКё†C›|‡Iˆф‡Кˆ 0?Ђƒ#"й#"& К‹uЂй€Dvнћ 0?Ђƒ#"й#"& КШЂй€&RІ‘нћ 0?Ђƒ#"й#"& К}ŠЂй€*‹нћ 0?Ђƒ#"й#"& К{Ђй€НЖНЖНЖ 0?Ђƒ#"й#"& КMzЂй€НЖНЖ ƒКv|C›ИŽqŽ 0?Ђƒ#"й#"& КдsЂй€0tНЖ0tНЖНЖ 0?Ђƒ#"й#"& КBwЂй€0tНЖ0tНЖНЖ 0?Ђƒ#"й#"& К0tЂй€НЖНЖх„ 0?Ђƒ#"й#"& К,…Ђй€нћп­ w ƒК5wC› ƒі‰й3ŠК‰п­ ƒG„й„Квƒп­ ƒ‘йжК"п­ ƒМ‹йћ‹КV‹п­ ƒЯŒйКrŒп­ 0?Ђƒ#"й#"& К]Ђй€|и{и{Œ€ ƒКЛ|C›lъM‚s“ 0?Ђƒ#"й#"& КБ“Ђй€нћНЖ w 1Ђ(‘(К{}п­!кЂ(!к‘(!к1 1‘(Ђ(КH‰п­м‘(мЂ(м1 КЪtђЅ/э‘(/эe(/э}(/эЂ( КСƒНЖ 0?Ђƒ#"й#"& К›}Ђй€Ќ~Ъtи{и{| 0?Ђƒ#"й#"& КEƒЂй€ЪtСƒ 0?Ђƒ#"й#"& КіtЂй€п­нћ 0?Ђƒ#"й#"& К wЂй€п­п­{}H‰ВЃ КZ{ђЅВн‘(Вн}(ВнЂ(Внe( 0?Ђƒ#"й#"& КsvЂй€5wВЃ w КЗz&R Ки{ВЃXсч1XсЅ" 0?Ђƒ#"й#"& Кf‚Ђй€|Ъtи{и{Sx 0?Ђƒ#"й#"& К‘xЂй€нћ wНЖеx К|ВЃњфЅ"њфч1 0?Ђƒ#"й#"& К|Ђй€п­нћ 0?Ђƒ#"й#"& КјŽЂй€нћп­п­п­Ъtп­нћ w wY›x Їб•šv }›)›x "PtО• NЈ•v V2<Œ•|V‚‚щšxVxxЂVRSV”њxHV­­Фќx@VББzќ@VГЕћxHVЏЏ­ћx@VЋЋќ@V МП§HV ЦЩRќHVЫЮm›xVЉЉыќ@VСФчњHVаа„ћ@VЗК іxHVƒƒшѕx@V‡‡ДљxHV……Гіv@VLњx@V ЩљxHV#—šЁšvV&іx@V)’•Œєx@V+‰‹ќšx V,ггЧѕxHV-VVяјx@V.ZZЛђxHV/XXЬіx@V0TTЮїx@V3adф№xHV6knгѓxHV9ps;›xV<RR&ёx@V?fiєx@VB\_О•4v@VB}~О•4x@VBPQО•4x@VBЇЈЄјVGѓј˜ @ VGчьЂёs@VHžž'њs@VIŸŸе–y@"VJййЄ–y@"VLжиЊѓs@VNЁЃ9˜@ VOюю.—H"VPоою•sHVQ——j—H"VRсс№–yH"VSллК—H"VTффљ@VU‘‘ˆѕyHVVдд2–y@VYОСїyHV\ЪЭ!іyHV_Ява•Vb­їs@Ve™œGіsHVg“•R–y@VjУЦЏ№@Vl№№L—@"Vnпп‰—@"Vpтт—@"Vrммх—@"Vtхх`јyHVuШШbіs@VwЕЗ(ђs@VzЙМ>јs@V~ЏГˆЯ s@ V~Ѕ­Ї™v(V˜(V€њњ™v(VE™v(V‚Ƙ(Vƒ§§Х™v(V„б˜v(V…ўўš˜(V†ќќэ˜v(V‡f™v(VˆŽ™v(V‰`šv@ VŠ;;<їv@VŒ77<їv@V66о™vV“44 šv@ V”99šv@ V•88@šv@ V–::š•u V™>Gš• Vœ 0RS4@VœŽRS4v@Vœ23iљ2x Vœ€љxV‡‡ЋќxVžЁЁB+›­ - џ q  Щу)šјџqЩ“*›&Ђ"Fџ!q (#Щ'$%@`•>Ц9@Œ5Œ?./2KJHI;AG<=:џ107E4C6D8F-3B,MSPRTNOUVLQEa•ZјXYџ\q[]W љƒ˜ќƒ$ќјƒёёƒёёКY›О•ƒЙšxёƒ –?є1ѕ Цёƒ$ќјƒёёК•šО•ƒЙšxё –Ќє› љƒ$ќјƒёёƒёёК)›О•ƒЙšxё –?є1ѕƒХјмјs–xёЦёљййО–ƒ˜ќ[˜„ч„ч„чКƒƒ$ќјƒёёƒљѓёКО•RSƒѕђ-ѓй€ƒs–xёйа№й#тйЈ—й#тй˜ƒ –Ќє –?є1ѕ –єєѕ1ѕ;уƒЬЬМ›wММЬК[˜ƒšiї їїїКЈ•RSММƒКГтЈ•КlъО•ККыш і "9  w‚П E  7B#  "ощ%N  '))Э  ,Ъех  1|‡Sž} 6т!э!Э  ;KVвЭ  @_jL  Eчђі  JЏ#К#œc  O›#І#U8  T#.Ќ№ Y%0…Ѓ  ^Jі cђ§œœ hp{ Њ mюљЮ  rs~YС  whsж]  |гош№ ˜Ѓ0I  †Ž™иЅ ‹q|5  шѓ!р •дпB0  šEPх)  Ÿ1<qВ ЄщєС Љ§‡н  Ўx)ƒ)Jm  Гz&…&Џ  ИT_.)  НЉ&Д&  Т'2УР  Ч"  ЬлЦ бп'ъ'8  жozіП лЉ"Д"рЈ р$"/"Vг хT_/Ѓ  ъћЬж ћщUДP  5š  /Š"Ћ  Z k ~  "В Х P  +Ь о œn  6В0Ъ0жщ @.Г.˜ц  J@@И  O - sО eПP8p  p.-E-кp  u›І8œ { 7 ‰Н †-'-+О ‹‰”Л„  ”9K4›  ™‹–рt  Ѕ]3u3Єu  Ў[ m <С ГŽžФL  Иx‡ž  ЪЭ6ž’  гФ6ж6пр к"l"  р+@gz  і>3>45  ўј!"Ш  6KY‘  ю0 1Œ  йш™  "zŠЙ  *п ,  3L‚‹i  ?Е9Я94^  Rъ\і  We"t"Щг  a>:Q:™  k ::y  tL"^"  ~ж9щ9ŒM  ƒ6"E"Ћ-  ˆ{"Š"Ш>  ’$:7:еК —‘" "‘5  ЂX:p:АЧ  Ќ№9:ф  Жау@t  РА_  аlŒ~Ю  о“<Њ<ІЯ  щ‰8Ё8,;  юи&у&“  љ­*С* н ШхЬљ ў& 'Іх Ш*л*—}  ъ&ѕ&–  x0‹0<  )?+†  3*'='‘  =|>>Oб  G'#'яŠ  Q^6q6wЛ [*!d!^q  eО(б(хх  o–>Љ>cу v-“  |ˆŸЇў Œ| й щЧ ’ , Ьл œЈ8Л8xм ІD'W's+  Ќr ‡ v›  Е&989в›  Лѓ' (уК  Тќ*+Cd  Э,,.ё ж,1,ОЌ м… š x  хœ9Ў9Ъ ы‡(($  ђR+n+k  §8,O,хŽ  V,h,НЫ ‹Јёё БЩВ  *7B7Кч ,ё< =  b9=L=Mћ oЂшpy  yЖ=Щ=^  ‚м2ч ŒА>У>Nю  ›ј‹T  ІЦ5к5Y­ Ћ  G  ЦHађ жс56Kѓ л! 9 VЊ ћ%0R0Џю #Ъ>?/  3“ЌH  Q?Ш?h.  ci?‰?фЉ mБ<Ф<о.  r@ S ,•  ƒ€š$И   66€И  ”r ‚ Ћ  ™‰ ™ ‡  ž  А Аш  ЏГж„Ÿ П§ э€  мЁЧZQ  ъ%6<6 '  яЗ Ч ОЎ  єЮ с R  љш џ hD   ЭнKD  ЖЦБ  ( V р  2 б0ч0r  @ ѕ78Ѓэ  F f%}%cп Q 7KЪ&  V E P j9  a +e  n I7b7I&  s 2AdБ z HX‚џ  … ќЕИ Ž }ќѕ  — ‘6Ѓ6хw   !Є!šЉ Є ћ ”x  Ў Њ6Н69M  Г Ы!й!ёя Й ­!Ф!­С  Т x6Š6–г Ш m!„!  в DWy  л Й,Ы,˜y  р ЌОX  щ в,ф,?Y  ю ГСI”  ѕ ^n?  њ 3 > a:  џ ъѕћ   ЗТFѕ   f|W   Р/о/2w  % ацЊ  0 .2.фѕ  6 F_ВF  ? 9K_І  K ƒ7›7Ї  Z 2$•$В6  c Ѕ)З)h[  n Е;Ь;щ  y Š)ž)Ус  ‚ œ;Ў;|h ‡ ‹+œ+8I  ’ [)o)Dš  œ !)4)V­  Ј ;)T)˜Ж  В л7ю7Uј Й 7%]%?ч  Ф я)*Пя  Я Ђ7Ж7д~  д %%'B  о Tg4П у б м X?  ѓ A?b?6л  я J эk   : N   7ъ  я,ž  ' ^ZI  . i#y#jГ  7 €#’#і‡  A фiY  K ъ"§"ј—  T б"у"п;  ] w:‰:ж b и(ч( C  k ##8  u "SM‹   :Ѓ:§o  … №()ŸE  Š u+„+&Ы ” #0#т  P#b#H  І 7#I#ЯЏ Џ DЧH  И Л2Э2ƒО С t1†1ї§ Ь R i Ак е j | cЅ о U5g5†  щ ^–#v  ѓ ю34`у ј (qJ  ў ќ84  а3ч3Ш­  <4O4НЎ  Wfя›  " Ж3Щ3fж  , 44в•  6 "454ЮМ  ? V4h4§Г G ˆ Ћ lЎ L І Б ёќ  X U1m1Ќ@  a Q c /  k р ѓ .П  v Ѕ/Й/А0  „ ­1Щ1P1  ‰ />Рю  HeB2  • l|”  Є :>R>ˆ—  Ћ Э$щ$ѓЃ З г;ш;jЄ М Ѓ+Г+ЧЄ С К+Ы+Ї Ы О)б)Bћ  а №$%NG  м ф:љ:–H  с и)ш)ф  ё Y>u>  ј ‡%Ѓ% ў  лу D '=ід O ‚–  X <††p(Hв?„„HHв‹zzБ2HвŒxx9пвssёHв‘yy`ЛHв’јј,тHв“іі‹К в–ёёK—Hв˜її6ХHв™}}cHвš{{ƒш вvv "HвŸ||A‚Hв rrcHHвЁpp}С вЄkk\~HвІqqЕjHвЇнн^NHвЈллџ] вЋжж7`Hв­ммыћHвЎЂЂДГHвЏ  ёвВ››]мHвДЁЁВHвŘ˜зHвЖ––оБ вЙ‘‘№“HвЛ——ŽHвМ{{рнHвНyy^Ж вРttјHвТzzЖ,HвУђђBяHвФ№№nƒ вЧыы “HвЩёёИHвЪоо<ЮHвЫммGрвЮззŠдHванн{ЎHвбOO\HввMMs0 веHH…ЏHвзNNўHви;;…УHвй99QO вм44УщHво::рўHвпѓѓ11HврёёыФвуььС!Hвхђђ‹ІHвцrиHвчТŠ въ0+Hвь­7Hвэ‚)‚)y3Hвю€)€)Ѕн вё{){)цHвѓ))ч%Hвє„&„&СВHвѕ‚&‚&dm вј}&}&ђТHвњƒ&ƒ&дdHвћ^^\Hвќ\\ž вџWW§JHв]]уHвГ&Г&ВHвБ&Б&^) вЌ&Ќ&8&HвВ&В&іdHв 118nHв //Fƒ в **diHв00‹THвx‰Hвžv в5Hвt;HвKыHв3" в…зHвR Hвщ'щ''шHвч'ч' в"т'т'ЈHв$ш'ш'K”Hв%yy‹вHв&ww Љ в)rrЁ9Hв+xxбЂHв,Г"Г"исHв-Б"Б"~< в0Ќ"Ќ"jЖHв2В"В"ŠкHв3."."зэHв4,","ћЈв7'"'"ЏЇHв9-"-"e0Hв:^^'vHв;\\pгв>WWSuHв@]]цlHвAЊ+HвBRw вEўў,LHвGз @ вGё ePHвHTTŽ.@вISSсжвLььЊпHвNQQ[зHвOjиHвP&&NйHвQ88УиHвR,,йHвS22ДзHвTиHвU  тйHвVDDSкHвWJJ зHвX™йHвY>>#HвZ†ЦHв\сљ@в^  Н–Hв`  lЙHвa  ЯP вdD4HвfіP @ вg)Q @ вh  п @ вh7OEHвi‰‰§&@вjˆˆФ вm22, HвnXX HвojjБ Hвp||L Hвqpp Hвrvvs Hвs^^М Hвtddї HвuRRр Hвv‚‚XЋ @ вvb g Ÿ1Hвwj j №@вxi i 7Ћ в{] ]  Hв|Ф Ф |Hв~У У хK@в€О О UHв‚П П z:HвƒН Н Ё в†Е Е j1HвˆС С ‘ @ в‰Л Л а @ вŠК К €qHв‹н н ЁDHвм м №„@вз з ­JHв‘и и ФnHв’ж ж i в•Я Я ,Hв—к к Ž @ в˜д д >сHв™Щ0Щ0fHв›Ш0Ш0З@вУ0У0ސHвŸФ0Ф0?ЃHв Т0Т0ьœ @ в К0Н0Тœ вЃЕ0Е0hуHвЅЦ0Ц0G @ вІР0Р0 @ вЇП0П0>жHвЈВ.В.сHвЊБ.Б. —@вЌЌ.Ќ.oHвЎ­.­.eHвЏЋ.Ћ.і @ вЏЅ.Ї.Xі вВ . .S˜HвДЏ.Џ.Ўі @ вЕЉ.Љ.ЛHвЖ@@ІKHвИ@@IЎ@вК@@?HвМ@@ХЙHвН@@Дц вР@@Ќ›HвТ@@мц @ вУ @ @ч @ вФ@@рj @ вФ% ) vHвХ, , Еu@вЦ+ + Хj вЩ ™Т @ вЩЧх%KHвЪOOг@вЫNN}Т вЮТТvЧ HвЯHHУ HваєєŽХ Hвб$$ђХ Hвв**…У HвгФ HвдJУ HвењњBЦ Hвж00єЦ Hвз<<ћФ HвиUФ Hвй  ŒЦ Hвк66.Х HвлВТ Hвмшш8Ч HвнBBЋФ HвошТ Hвпююа|HврD-D-0˜HвтC-C-юш@вф>->-ПHвц?-?-ž˜Hвч=-=-xp @ вч6-8-Rp въ1-1-СЕHвьA-A-Ђp @ вэ:-:-њp @ вю;-;-’ZHвяЅЅЗК вђžžVџ@вєЄЄVџ@віЃЃ?Х @ ві' , ЊAHвї6 6 &@вј5 5 Хвћ" " bХHвќ/ / ‚ѓHв§&-&-SЗHвџ%-%-ИЃ@в - -ЫAHв!-!-ЁšHв--ЩН @ в--ЃНв--$ЂHв #-#-KО@ в --ѓН@ в --œ;Hв ““‚Ї вŒŒ>‹" в€..о" Hв88шHв‚2>2>†Hв„1>1>т…@в†,>,>VфHвˆ->->ЕХHв‰+>+>Еz @ в‰>>ˆz вŒ > >9HвŽ/>/>D{ @ в>>х{ @ в">">g} @ в‘)>)>| @ в’#>#>| @ в“%>%>З| @ в”&>&>C| @ в•$>$>цz @ в–>>њ| @ в—'>'>1} @ в˜(>(>Ў{ @ в™!>!>{ @ вš>>|{ @ в› > >”5 @ в›""=ДHвœ""Иœ@в""^5 в ћ!ћ!6 HвЁ " "]6 HвЂ""Ч5 HвЃ""ў @ вЃ>@ˆHвЄJJшi@вЅIIн вЈ99 HвЉCCМHвЊ11лHвЌ11К@вЎ11ірHвА11ВHвБ11™‘ @ вБі0њ0s‘ вДё0ё0,HвЖ11№‘ @ вЗ§0§0_’ @ вИџ0џ0У‘ @ вЙќ0ќ0$’ @ вКў0ў0IŒ @ вКсъЖHвЛD@вМџџ&Œ вПммiŒ HвРээмŒ HвСљљІŒ HвТѓѓџ;HвУ‰‰Ю@вХ„„Ю@вЧƒƒЮ@вЩ‚‚Зm вЬ}}  @вЮˆˆ  @ва††  @в⇇SЙ @ ввчі„Hвг  У‚@вд  -Й взттvЙ HвиљљЏЙ Hвйџџ/К Hвк@, @ вкTeєcHвл6@вм€€, впOO–, Hврnn- Hвсtt\- Hвтzz`, Hвуhh№жHвфЮ9Ю9‡?HвцЭ9Э9ŠЖ@вшШ9Ш9ŒeHвъЩ9Щ9,YHвыЧ9Ч9ћi @ выН9С9Нi вюИ9И9&†Hв№Ы9Ы9€j @ вёФ9Ф9Ыj @ вђХ9Х9=j @ вѓУ9У9p^ @ вѓђS7Hвє[[Щ#@вѕZZL^ вјээ…` Hвљћb Hвњ<<чa Hвћ00_ Hвќ_a Hв§**‘^ Hвўс` Hвџ$$•c HвBB ` Hв+d HвHHmb Hв66_ Hв  e HвTTЏd HвNNv @ вm"p"ЫДHвs"s"љИ@вr"r"0 в h"h"ѕzHв P:P:d[HвO:O:ŠЩ@вJ:J:ёiHвK:K:igHвI:I:љг вA:A:бHвM:M:vд @ вG:G:5д @ вF:F:ЙHв::•СHв::”Ф@в::і=Hв!::p›Hв"::4™ в% : :t>Hв'::Ћ™ @ в(::m™ @ в)::ЖŽHв*]"]"ѕфHв,\"\"q@в.W"W"Hв0X"X"ЩHв1V"V"Њ в4O"O"uЇHв6Z"Z"ч @ в7T"T"ЙQHв8ш9ш9ŸHв:ч9ч9ДP@в<т9т9cІHв>у9у9™Hв?с9с9D вBй9й9AЛHвDх9х9Л @ вEп9п9} @ вFо9о9№M @ вF>"A"HвGD"D"Хž@вHC"C"ИM вK9"9"'. @ вKƒ"†"ВHвL‰"‰"Š”@вMˆ"ˆ"у- вP~"~"лZHвQ6:6:м†HвS5:5:вА@вU0:0:O@HвW1:1:Z‡HвX/:/:ё> в[':':ЬќHв]3:3:s? @ в^-:-:&? @ в_,:,:?Л @ в_™"œ"gšHв`Ÿ"Ÿ"Њ%@вaž"ž"Лвd”"”"%dHвeo:o:НHвgn:n:Ÿˆ@вii:i:ЩФHвkj:j: ‚Hвlh:h:6 @ вl`:c:Х5 вo[:[:ЛњHвql:l:Ž6 @ вrf:f:I6 @ вse:e:ЧШHвt::uіHвv::(s@вxќ9ќ9дHвz§9§9kцHв{ћ9ћ9лЧ в~ѓ9ѓ9Y|Hв€џ9џ9NШ @ вљ9љ9Ш @ в‚ј9ј9іeHвƒттw Hв…ссOy@в‡ммЮ1Hв‰нншuHвŠллŽ вггЭ„HвппД @ виим @ в‘йй4Hв’ЏЏѓHв”ЎЎT@в–ЉЉj/Hв˜ЊЊ•,Hв™ЈЈNt вœ  –SHвžЌЌht @ вŸЅЅt @ в ІІ>HвЁ‹‹Ћ^HвЃŠŠ’@вЅ……BHвЇ††т/HвЈ„„­ @ вЈtz€ вЋoo,џHв­ˆˆї @ вЎ‚‚Ы @ вЏ  @ вА€€о @ вБ|| @ вВ}}t @ вГG @ вД~~pœHвЕЉ<Љ Hв'qq;= Hв(eeш< Hв)__ ? Hв*ww—< Hв+YYЛHв,<'<'РбHв.;';'Šщ@в06'6'ЎHв27'7'CЯHв35'5'\† в6-'-'š#Hв89'9'л† @ в93'3'™† @ в:2'2'АHв;Ž>Ž>‰ЦHв=>>i@в?ˆ>ˆ>ŠНHвA‰>‰>ZЭHвB‡>‡>M‘ вE>>§HвG‹>‹>Я‘ @ вH…>…>‹‘ @ вI„>„>HвJ"'"'д#HвL!'!'џт@вN''фHвP''a1HвQ''~б вT''РоHвV''їб @ вW''Йб @ вX''tбHвYp6p6§~Hв[o6o6.щ@в]j6j6уеHв_k6k6[sHв`i6i6§Š вca6a6@БHвem6m6‹ @ вff6f64‹ @ вgg6g6ЗЛ @ вg2!A!Hвhc!c!šТ@вib!b!‘Лвl-!-!zМHвmP!P!тМHвnV!V!МHвoJ!J!LНHвp\!\!кЛHвqD!D!п­Hвrа(а(К.HвtЯ(Я(iѕ@вvЪ(Ъ(ЌЁHвxЫ(Ы(вюHвyЩ(Щ(~q в|С(С(UчHв~Э(Э(лq @ вЧ(Ч(Њq @ в€Ц(Ц(sqHвЈ>Ј>^FHвƒЇ>Ї>dы@в…Ђ>Ђ>њHв‡Ѓ>Ѓ>ХјHвˆЁ>Ё>ц в‹™>™>,ќHвЅ>Ѕ>fц @ вŽŸ>Ÿ>3ц @ вž>ž>џ @ в дHв,,D,D,ЂlHв?g,g,ЗљHвAf,f,vH@вCa,a,сџHвEb,b,Ѓ„HвF`,`, вIY,Y,0ЪHвKd,d,c @ вL^,^,7! @ вL“—9&HвMЇЇD/@вNІІ! вQŽŽ”! HвR  X! HвSššCђ @ вSЙО!HвTШШxo@вUЧЧђвXДДoђHвYССRHвZA7A7!Hв\@7@7ўќ@в^;7;7JœHв`<7<7ORHвa:7:7њ @ вa2747а вd-7-7mЕHвf>7>7( @ вg6767„ @ вh8787X @ вi7777AТHвj = =nHвl = =ѓc@вn==ЮHвp==˜ІHвq==Рm @ вqљ<ў<Šm вtє<єV9V9TwHв@U9U9эЮ@вBP9P9=HHвDQ9Q9PЙHвEO9O98Ч @ вEG9I9ЧвHB9B9nєHвJS9S9ŠЧ@ вKL9L9ЌЧ@ вLM9M9]Ч@ вMK9K9а @ вM((Ь HвN/(/(J‘@вO.(.(іЯ вR((Ъа HвS((((Eа HвT"("(zDHвUG+G+уHвWF+F+ыn@вYA+A+—вHв[B+B+EPHв\@+@++>+‹ЫHвc.+.+Y•@вe)+)+Д8Hвg*+*+89Hвh(+(+Ірвk"+"+^ХHвm,+,+кHHвn†5†5дEHвp…5…5ї@вr€5€5Ё“Hвt55“ЏHвu55цф @ вuv5y5Эфвxq5q5C‰Hвzƒ5ƒ5$х@ в{|5|5х@ в|{5{5>х@ в}}5}5ы% @ в}‘7,Hв~››uС@вššФ% в‚ˆˆ& Hвƒ””ІHв„{7{7VГHв†z7z7З@вˆu7u7И=HвŠv7v7t…Hв‹t7t7‹Š вŽl7l7!pHвx7x7аŠ @ в‘r7r7ЏŠ @ в’q7q7Ÿл @ в’щ#ь#~чHв“я#я#ГЎ@в”ю#ю#oлв—ф#ф#X$ @ в—Ы#Я#‘ѕHв˜й#й#-і@в™и#и#.$ вœЦ#Ц#$ Hвв#в#РпHвž)8)8‰Hв (8(8УВ@вЂ#8#8ЁHвЄ$8$8XиHвЅ"8"8ГЏ вЈ88 HвЊ&8&8А @ вЋ 8 8кЏ @ вЌ88 @ вЌ,&/&’Hв­2&2&|Б@вЎ1&1&м вБ'&'&Wh @ вБ&&Њ(HвВ&&л@вГ&&*h вЖ & &h HвЗ&&ТLHвИг7г7ЗHHвКв7в7у‰@вМЭ7Э7ЇёHвОЮ7Ю7ыHвПЬ7Ь78k @ вПХ7Ч7k вТР7Р7чћHвФа7а7bk @ вХЩ7Щ7Ѕk @ вЦЪ7Ъ7n @ вЦ%%)%^HвЧ,%,%•@вШ+%+%еm вЫ % % Ј @ вЫЙНсXHвЬггЃw@вЭввуЇваДДЅЈHвбЬЬ.ЈHввРРiЈHвгЦЦлˆHвдp0p0 ˆHвжo0o0вz@виj0j0ўHвкk0k0ђфHвлi0i0ŠТ @ влa0c0cТво\0\0YHврm0m0У@ всg0g0ЕТ@ втe0e0шТ@ вуf0f0TдHвф00ŸаHвц//?@вш**іАHвъ++ЂнHвы))пу вюЦЈHв№--ф @ вё""Zф @ вђ##šф @ вѓ$$йф @ вє%%х @ вѕ&&Sх @ ві''—ЅHвїV6V6xHвљU6U6rw@вћP6P6љШHв§Q6Q6ѕHвўO6O6ЏвF6F6qHвS6S6zЏ@ вM6M6"Џ@ вK6K6OЏ@ вL6L6їщHв!!VёHв !!Jб@в !!œ2Hв !!туHв!!Šf в ! !†Hв!!Пf @ в!!љf @ в!!3g @ в!!lg @ в!!Ѕg @ в!!кg @ в!!amHвxxQ<Hвww5@вrrСtHв ss;NHв!qqшд @ в!dfШд в$__ШpHв&uu-е @ в'iiKе @ в(jjiе @ в)kk‡е @ в*llЅе @ в+mmУе @ в,nnсе @ в-oo е @ в.hh^Hв/сс-)Hв1ррЄ0@в3ллХyHв5ммwFHв6кк\‡ в9ббWHв;о @ в<жжЉ‡ @ в=ззб‡ @ в>иињy•Hв?.1.1МU•HвA-1-1љљ•@вC(1(1Œ•HвE)1)1{–}HвF'1'1т› @ вF11П›вI11mш•HвK+1+1 œ@ вL 1 1wœ@ вM"1"1Rœ@ вN!1!1Кœ}@ вO#1#1тœ}@ вP$1$1 }@ вQ%1%1›ОHвR—,—,Аƒ вU’,’,Бž4@вU,,*PЩHвV‡,‡,‰^™HвX†,†,рj@вZ,,z Hв\‚,‚,аDHв]€,€,хž @ в]w,z,Хž;в`r,r,вЋяHвb„,„,^Ÿd@ вc~,~, Ÿл@ вd|,|,2Ÿ@ вe},},rŸHвfM1M1hmHвhL1L1? @вjG1G1іЈHвlH1H1’эHвmF1F1OР @ вm>1@1-Рвp9191аМHвrJ1J1uР@ вsB1B1ЛР@ вtC1C1їР@ вuD1D1=[Hвvі.і.DщHвxѕ.ѕ.Oљ@вz№.№.9Hв|ё.ё.љHв}я.я.2Д @ в}с.ч.Д в€м.м.MHв‚ѓ.ѓ.•Д @ вƒъ.ъ.ФД @ в„ы.ы.Е @ в…э.э.bД @ в†щ.щ.эД @ в‡ь.ь.rHвˆЗ-З-мUHвŠЖ-Ж-xŽ@вŒБ-Б-\HвŽВ-В-f^HвА-А-К в’Ј-Ј- sHв”Д-Д-к @ в•­-­-§ @ в–Ў-Ў-лHв—  Ы†Hв™  —t@в›  О$Hв  œvHвž  ё @ вž  я№ вЁ§ § 6VHвЃ  Бё @ вЄ оё @ вЅ Oё @ вІ  ђ @ вЇ ё @ вЈ ”aHвЉ$2$2IaHвЋ#2#2kД@в­22ЁGHвЏ22HрHвА22G2 @ вА22#2 вГ 2 29іHвЕ!2!2Е3 @ вЖ22т3 @ вЗ22r3 @ вИ223 @ вЙ22М2 @ вК22J3 @ вЛ22 4 @ вМ22o2 @ вН22‡` @ вНƒ‡шHвО‘‘€ @вП[` вТ~~А` HвУŠŠmЏ @ вУen-ёHвФqqУ@вХpp?Џ вШ``Д; @ вШORхЎHвЩUUЉч@вЪTT†; вЭJJжC @ вЭ9<-ІHвЮ??Š–@вЯ>>ЅC вв44еHвг>2>2YDHве=2=2”Ž@вз82829Hвй9292ЧцHвк7272f вн/2/2&ХHвп;2;2]f @ вр52528f @ вс4242ѕм @ всЁЄЗ’HвтЇЇЊЄ@вуІІЧмвцœœMbHвч`2`2}Hвщ_2_2•@выZ2Z2џHвэ[2[2I›HвюY2Y2РO @ вюN2P2œO вёI2I2zќHвѓ]2]2ТP @ вєV2V2P @ вѕU2U2P @ віS2S2шO @ вїR2R2WP @ вјT2T2яP @ вљW2W29з @ вљыялЦHвњљљ„@вћјј з вўццbз Hвџђђм˜ @ вџЭжЗЛHвйй Д@вииЎ˜ вШШаУ @ вЗК.HвНН&ђ@вММŸУв ВВЅJHв z2z2\`Hв y2y2 џ@вt2t2GЂHвu2u2„оHвs2s2'm вk2k2#ЎHвw2w2Pm @ вp2p2ˆm @ вq2q2Иv @ в  QфHвIЬ@вwv вбHвПП§ƒHв ОО.k@в"ЙЙ"Hв$ККl!Hв%ИИ'V @ в%ЅЇV в(  №WHв*ММбW @ в+ВВвV @ в,ЌЌ§V @ в-­­(W @ в.ЎЎSW @ в/ЏЏ}W @ в0ААЇW @ в1ББX @ в2ГГ0X @ в3ДД`X @ в4ЕЕX @ в5ЖЖQV @ в6ЉЉ|V @ в7ЊЊЇV @ в8ЋЋфHв9ь-ь-ъНHв;ы-ы-йъ@в=ц-ц-EHв?ч-ч-"МHв@х-х-OQ @ в@Ч-Ю-/Q вCТ-Т--ƒHвEщ-щ- R @ вFд-д-0R @ вGе-е-TR @ вHж-ж-ЩT @ вIт-т-xR @ вJз-з-›R @ вKи-и-ОR @ вLй-й-ƒT @ вMс-с-]S @ вNн-н-ТS @ вOо-о-сR @ вPк-к- S @ вQл-л-3S @ вRм-м-шT @ вSу-у-T @ вTр-р-ёS @ вUп-п-sQ @ вVа-а- Q @ вWб-б-ФQ @ вXв-в-шQ @ вYг-г-gn @ вYЋЎwHвZИИvR@в[ЗЗ*n в^ІІЁn Hв_ББєяHв`Ÿ&Ÿ&*Hвbž&ž&uп@вd™&™&ќ6Hвfš&š&КHвg˜&˜&† вj&&Hвlœ&œ& @ вm•&•&Ь @ вn”&”&q @ вo–&–&jHвpяяIpHвrююф>@вtщщGzHвvъъЯ"Hвwшшњ@ вzрр Hв|ььA @ в}цц9A @ в~ххBXHвееЖŠHвддX@вƒЯЯHв…аа—8Hв†ЮЮ"\ в‰УУюHв‹ввВ\ @ вŒЩЩі\ @ вЪЪD] @ вŽЫЫˆ] @ вЬЬd\ @ вШШЪcHв‘22ЉHв“џ1џ1‚p@в•њ1њ1"вHв—ћ1ћ1{ЯHв˜љ1љ1Iсв›ё1ё1SyHв§1§1wс@ вžі1і1цс@ вŸї1ї1;a @ вŸ§FлHв ))ѓ™@вЁ((љ` вЄјјŽb HвЅшb HвІBc HвЇ""жa HвЈza HвЉ  фХHвЊе'е'HвЌд'д'h%@вЎЯ'Я'фЖHвАа'а'žмHвБЮ'Ю'Oў вДЦ'Ц',јHвЖв'в'•ў @ вЗЫ'Ы'хў @ вИЬ'Ь'эHвЙ 5 5!THвЛŸ5Ÿ5t@вНš5š5DHвП›5›5їHвР™5™5‹ вУ‘5‘5ь HвХ553‹ @ вЦ–5–5Ž‹ @ вЧ—5—5šи @ вЧБЛVЩHвШннѓѕ@вЩммbи вЬЌЌЛй HвЭЪЪ%к HвЮаак HвЯжж!й HваФФЯи HвбОО эHввЖ(Ж(єцHвдЕ(Е(dг@вжА(А(HєHвиБ(Б(A˜HвйЏ(Џ(]Z вмЇ(Ї(ŒЬHвоГ(Г(™Z @ впЌ(Ќ(пZ @ вр­(­(z @ вр’•ЅƒHвсЅЅŸ @втЄЄфy вхЯz Hвцžž=z Hвч˜˜N„ @ вчМ$П$ОHвшТ$Т$ђ+@вщС$С$ „ вьЗ$З$5О @ вьЄ$Љ$fHвэЌ$Ќ$*Ј@вюЋ$Ћ$јН вёŸ$Ÿ$дHHвђZZaHвєYY={@віTT•HHвјUU mHвљSS…… вќJJд7HвўWWЉ… @ вџOOк… @ в PP † @ в QQмHв jMHвC 4?4?гOHвD 2?2?!о @ вD ?!?ђн вG ??Ѕ_HвI 6?6?Жо @ вJ %?%?р @ вK +?+?Kр @ вL ,?,?№о @ вM &?&?aп @ вN (?(?›п @ вO )?)?#п @ вP '?'?‡р @ вQ -?-?Tо @ вR #?#?њр @ вS /?/?†о @ вT $?$?рп @ вU *?*?3с @ вV 0?0?Рр @ вW .?.?Щ @ вW WZЖѕHвX ddю@вY ccжШв\ RRWЩHв] ]]Я Hв^ uuъTHв` tt•N@вb ooŠHвd ppXHвe nnss вh ee)BHвj rrŸs @ вk jjиs @ вl kkt @ вm ll ЏHвn >>ф”Hвp џ=џ=@@вr њ=њ=iЖHвt ћ=ћ=њТHвu љ=љ=џ_ @ вu ѓ=ѕ=к_ вx ю=ю==пHвz §=§=(` @ в{ ї=ї=ы„Hв| K=K=vHв~ J=J= С@в€ E=E=‚`Hв‚ F=F=%Hвƒ D=D= в† <=<=…cHвˆ H=H=: @ в‰ A=A=q @ вŠ B=B=‹ћ @ вŠ ЊГ9Hв‹ ччЭц@вŒ ццfћв ЅЅ&ќHв ТТwќHв‘ ШШo§Hв’ ккЖ§Hв“ рр§Hв” дд­ћHв• ЖЖЛќHв– ЮЮьћHв— ММbHв˜ Ш=Ш=пTHвš Ч=Ч= @вœ Т=Т=,{Hвž У=У= HвŸ С=С=~y †Й=Й=$ЇHвЄ Х=Х=˜y @ вЅ О=О=Юy @ вІ П=П=T^ @ вІ фщHвЇ  @вЈ 0^ вЋ ппц^ HвЌ јј*_ Hв­ ўўu^ HвЎ ььГ^ HвЏ ђђИЗHвА Т>Т>ШзHвВ С>С>.@вД М>М>y”HвЖ Н>Н>…ЮHвЗ Л>Л>NчвК Г>Г>HвМ П>П>vч@ вН И>И>фч@ вО Й>Й>FHвП DdHвС Єy@вУ У;HвХ HвЦ  Œю @ вЦ gю вЩ ћћ‡HвЫ йю @ вЬ :я @ вЭ  Ею @ вЮ aя @ вЯ  ќю @ ва ”я @ вб  ЌЯHвв й5й5HšHвд и5и5L@вж г5г5uHви д5д5ЦЪHвй в5в5žT вм Щ5Щ5TтHво ж5ж5оT @ вп Я5Я5НT @ вр Ю5Ю5ќT @ вс а5а5Ё­ @ вс   тHвт   гФ@ву   w­вц   |;Hвч GGHвщ FF•@@вы AA‡Hвэ BB[2Hвю @@… @ вю $+` вё #+Hвѓ DD” @ вє <<j @ вѕ ;;Р @ ві ==Й @ вї 77„ @ вј 66Q @ вљ 55|Ž @ вњ 11GŽ @ вћ 00с @ вќ ..Ž @ в§ //ЏŽ @ вў 22уŽ @ вџ 33Ў @ в -- @ в 44? @ в :: @ в 99№ @ в >>ь @ в 88"hHв 66ФЦHв 66gu@в ћ5ћ5Hв ќ5ќ5еHв њ5њ5ѓ @ в щ5№5уђв ф5ф5jЁHв ў5ў5ўѓ@ в ї5ї5кѓ@ в і5і5$є@ в ј5ј5%ѓ@ в ђ5ђ5Еѓ@ в ѕ5ѕ5‘ѓ@ в є5є5nѓ@ в ѓ5ѓ5] @ в ) 5 чБHв 8 8 Э—@в 7 7 . в $ $ Hв Q0Q0КHв! P0P0WЇ@в# K0K0ЁkHв% L0L0(љHв& J0J0š @ в& -000v в) (0(0IjHв+ N0N0n @ в, 6060 @ в- 4040e @ в. E0E0№ @ в/ 3030Ё @ в0 7070 @ в1 ?0?0W @ в2 @0@0• @ в3 A0A0Ц @ в4 B0B0Ъ @ в5 G0G0 @ в6 H0H0С @ в7 =0=0/ @ в8 D0D0– @ в9 F0F0J @ в: 5050ќ @ в; C0C0ё @ в< >0>0 @ в= 90904 @ в> :0:0b @ в? ;0;0“ @ в@ <0<0б @ вA 8080Т @ вB 2020AHвC ??зіHвE ??кЃ@вG §>§>бHвI ў>ў> ƒHвJ ќ>ќ>ЄШ @ вJ в>к>‡Ш вM Э>Э>К~HвO ??ХШ @ вP м>м>2Ь @ вQ №>№>QЭ @ вR і>і>ЊЭ @ вS ї>ї>ёШ @ вT н>н> Ъ @ вU ч>ч>бЪ @ вV ш>ш>Ы @ вW щ>щ>2Ы @ вX ъ>ъ>nЩ @ вY р>р>ћЩ @ вZ у>у>VЮ @ в[ њ>њ>Щ @ в\ о>о>aЫ @ в] ы>ы>ѓЭ @ в^ ј>ј>\Ь @ в_ ё>ё>”Щ @ в` с>с>#Ъ @ вa ф>ф>vЪ @ вb ц>ц>‰Ь @ вc ђ>ђ>)Э @ вd ѕ>ѕ>ЧЩ @ вe т>т>ќЬ @ вf є>є>Ы @ вg ь>ь>КЫ @ вh э>э>сЫ @ вi ю>ю> Ь @ вj я>я>ЕЬ @ вk ѓ>ѓ>CЩ @ вl п>п>3Ю @ вm љ>љ>NЪ @ вn х>х>KHвo ЋЋJ4Hвq ЊЊЂa@вs ЅЅIHвu ІІаzHвv ЄЄб вy ––‘Hв{ ЈЈ @ в| žžі @ в} ››( @ в~ œœT @ в ј @ в€   0 @ в ЁЁМ @ в‚ ŸŸZ @ вƒ ЂЂннHв„ Ч?Ч?ЪšHв† Ц?Ц?W@вˆ С?С?АТHвŠ Т?Т?EшHв‹ Р?Р?† @ в‹ ˜?Ј?a вŽ “?“?5ьHв Ф?Ф?ч @ в‘ В?В?К @ в’ Б?Б?› @ в“ Ж?Ж?? @ в” Ў?Ў? @ в• ­?­?ј @ в– Ќ?Ќ?З @ в— Н?Н?‰ @ в˜ М?М?ш @ в™ О?О?y @ вš Е?Е?d @ в› Џ?Џ? @ вœ Г?Г?д @ в Ћ?Ћ?` @ вž Л?Л?8 @ вŸ К?К? @ в  Й?Й?щ @ вЁ И?И?Р @ †З?З?Џ @ вЃ Њ?Њ?; @ вЄ Д?Д?‹ @ вЅ А?А?ДŽHвІ ˆ?ˆ?љCHвЈ ‡?‡?љй@вЊ ‚?‚? †HвЌ ƒ?ƒ?џHв­ ??š. @ в­ q?u?{. вА l?l?ЂHвВ …?…?j/ @ вГ {?{?C/ @ вД z?z?ќ. @ вЕ x?x?к/ @ вЖ ~?~?В/ @ вЗ }?}?0 @ вИ ??“/ @ вЙ |?|?Н. @ вК w?w?/ @ вЛ y?y?џєHвМ У<У<ХуHвО Т<Т<ЮŽ@вР Н<Н<,яHвТ О<О<ŽHвУ М<М<§ЉвЦ Д<Д ЋЋВ @ в? ЌЌт @ в@ ­­‚ @ вA ЎЎD‚ @ вB ЏЏt‚ @ вC ААЅ‚ @ вD ББу„ @ вE НН„ @ вF ЙЙQ„ @ вG ККƒ @ вH ЖЖРƒ @ вI ЗЗяƒ @ вJ ИИ€„ @ вK ЛЛЗ„ @ вL ММе‚ @ вM ВВ-ƒ @ вN ДД]ƒ @ вO ЕЕƒ @ вP ГГJƒHвQ ;6;6ѓhHвS :6:6 š@вU 5656ўїHвW 6666c№HвX 4646pQ в[ (6(6‘ГHв] 8686’Q @ в^ -6-6ЖQ @ в_ .6.6…R @ в` 2626.R @ вa 0606нQ @ вb /6/6_R @ вc 1616X' @ вc П У €Hвd Ц Ц K@вe Х Х +' вh К К Џ @ вh ж н –јHвi р р €є@вj п п тЎ вm б б ш‚ @ вm № ћ њбHвn ў ў 'ъ@вo § § Е‚ вr ы ы ‹Hвs ммѓD@вu ззѓD@вw жжѓD@вy ее;ј в| аахy@в~ ккхy@в€ ййхy@в‚ лл<%Hвƒ ХХЮƒ@в… ППЮƒ@в‡ РРЮƒ@в‰ ООš˜ вŒ ЙЙrJ@вŽ ФФrJ@в УУrJ@в’ ТТы @ в’ ^wЋˆHв“  "z@в”  Ш в— YYV& Hв˜ кк( Hв™ јј' Hвš ццF! Hв› €€ї( Hвœ В$ Hв ММ˜% Hвž ЮЮa$ HвŸ ЖЖИ' Hв  ђђ§% HвЁ дд„! H†††$ HвЃ ААv( HвЄ ўўa' HвЅ ььс" HвІ žž% HвЇ ТТ ! HвЈ zz\" HвЉ ’’ž" HвЊ ˜˜­# HвЋ ЊЊD# HвЌ ЄЄѓ! Hв­ ŒŒ\% HвЎ ШШЏ& HвЏ рр HвА ц0ц0умHвВ х0х0оє@вД р0р0жŒHвЖ с0с0—nHвЗ п0п0 @ вЗ й0л0љ вК д0д0;ЩHвМ у0у0G @ вН н0н0L™HвО 88гHвР 88ž@вТ 8 8i HвФ 8 8ƒTHвХ 88@r @ вХ §78r вШ ј7ј7.bHвЪ 8 8"s @ вЫ 88Оr @ вЬ 88…r @ вЭ 88fr @ вЮ 88їr @ вЯ 88чэ @ вЯ n%r%ч Hва |%|%’Ќ@вб {%{%Пэ вд i%i% ю Hве u%u%ЕRHвж JJ&Hви II4@вк DD8sHвм EEhKHвн CC|пвр ::Я€Hвт GGєп@ ву AAЁп@ вф ??Ып@ вх @@ŠˆHвц O O ф& вщ H H Ч)@вы N N Ч)@вэ M M Hвю **n<Hв№ ))S=@вђ $$Ћ~Hвє %%эCHвѕ ##9 вј .wHвњ ''ё9 @ вћ  ,: @ вќ !!М9 @ в§ PHвў a7a7К–Hв `7`7Bp@в [7[7ІrHв \7\7cHв Z7Z7­ @ в Q7S7ƒ в L7L7яGHв ^7^7o @ в X7X7  @ в V7V7A @ в W7W7л @ в U7U7& @ в :=KHв @@Б.@в ??m& в 55+<Hв WWЛs@в RRv5Hв SS yHв QQƒБв KK Hв UU1Hв Ь‡Hв! і_@в#  ЙHв%  ЩHв& Ёџ в) џџ‰WHв+  §џ @ в, 4 @ в- Ьџ @ в. В_Hв/ ŽŽfWHв1 љB@в3 ˆˆl‚Hв5 ‰‰ƒeHв6 ‡‡ЯИв9 €€№FHв; ‹‹ѕИ@ в< ……ФFHв= Ђ6Ђ6€“Hв? Ё6Ё6ў€@вA œ6œ6PћHвC 66пHвD ›6›6і вG ”6”6mЎHвI Ÿ6Ÿ68і @ вJ ™6™6+x @ вJ •!™!ѓ-HвK Ѓ!Ѓ!р@вL Ђ!Ђ!x вO !!Qx HвP œ!œ!І/HвQ  Љ @вS ORHвU o HвV ЙЉвY ўў’\Hв[  NHв\ М6М6hёHв^ Л6Л6|R@в` Ж6Ж6гЈHвb З6З6Hвc Е6Е6Џx вf ­6­6tHвh Й6Й6љx @ вi Г6Г6жx @ вj В6В6‡M @ вj г!е!\Hвk и!и!Цф@вl з!з!ZM вo Ю!Ю!=№ @ вo Е!Й!zHвp У!У!Ця@вq Т!Т!№вt А!А!f№Hвu М!М!Щ Hвv ‰6‰6эQHвx ˆ6ˆ6Ш]@вz ƒ6ƒ6/ЗHв| „6„6›…Hв} ‚6‚6ЩС в€ {6{6lЃHв‚ †6†6ёС @ вƒ €6€6фг @ вƒ u!y!Hв„ ƒ!ƒ! Е@в… ‚!‚!Згвˆ p!p!дHв‰ |!|!dYHвŠ VVaHвŒ UUЇ„@вŽ PP RHв QQUHв‘ OO1 в” GGКHв– SS‰ @ в— MM[ @ в˜ LLрЦHв™ Ъ,Ъ,=ŒHв› Щ,Щ,ык@в Ф,Ф,КvHвŸ Х,Х,YјHв  У,У,>y вЃ М,М,ДHвЅ Ч,Ч,ky @ вІ С,С,"; @ вІ ЅЈFHвЇ ЋЋЈў@вЈ ЊЊь: вЋ   ВoHвЌ у,у,?ЉHвЎ т,т,Ір@вА н,н,a†HвВ о,о,ЋбHвГ м,м,тX вЖ е,е,б_HвИ р,р,Y @ вЙ к,к, @ вЙ ЛН$HвК РРМ`@вЛ ППI вО ЖЖДHвП mmз @вС hhюPHвУ iikHвФ ggn” вЧ aa&HвЩ kk'‚HвЪ = = R вЭ 6 6 ІE@вЯ < < ІE@вб ; ; ГHвв єєvЋ ве ээY+@вз ѓѓY+@вй ђђѕRHвк ССЬA вн ККА4@вп ППА4@вс РРтIHвт {{•Hвф zz‡{@вц uuA0Hвш vvє|Hвщ ttŠѕ @ вщ npbѕ вь iiЌeHвю xxЖѕ @ вя rrљHв№ н/н/pћHвђ м/м/ЏЏ@вє з/з/ЛfHві и/и/€AHвї ж/ж/Ѕ @ вї Ш/Ы/x вњ У/У/ё|Hвќ к/к/D @ в§ Я/Я/ж @ вў Э/Э/ @ вџ г/г/Ў @ в б/б/y @ в а/а/  @ в Ю/Ю/s @ в д/д/у @ в в/в/zw @ в илfjHв хх „@в ффPw в ггЁw Hв ооŸзHв 1.1.h~Hв 0.0.?Ж@в +.+. BHв ,.,.ŠfHв *.*.њ @ в #.%.Ь в ..ЄbHв ...., @ в '.'.i @ в (.(.ьh @ в NT'Hв ^^ƒ"@в ]]Шh в II i Hв WWNHв JJ\[Hв" II“@в$ DDДYHв& EEQHв' CCоF в* << Hв, GGG @ в- AA!аHв. š7š7?ЌHв0 ™7™7…d@в2 ”7”7‰бHв4 •7•7}KHв5 “7“7ŸІ @ в5 ‹77yІ в8 †7†7 oHв: —7—7<Ї @ в; ‘7‘7ЩІ @ в< 77ћІ @ в= 77=* @ в= :$T$­ФHв> ”$”$рШ@в? “$“$* вB 5$5$e- HвC {${$…+ HвD c$c$к+ HвE i$i$њ. HвF $$_. HвG ‡$‡$Ю- HвH $$A, HвI o$o$т, HвJ u$u$e* HвK W$W$і* HвL ]$]$_›HвM Ж)Ж)–ЙHвO Е)Е)‘@вQ А)А)—юHвS Б)Б) /HвT Џ)Џ)х6 вW Ј)Ј) ЂHвY Г)Г)$7 @ вZ ­)­)…ВHв[ Ы;Ы;ЌHв] Ъ;Ъ;Пю@в_ Х;Х;€ИHвa Ц;Ц;vSHвb Ф;Ф;т[ @ вb Н;П;Ÿ[ вe И;И;4ђHвg Ш;Ш;)\ @ вh С;С;r\ @ вi Т;Т;ж Hвj ))=џHвl œ)œ)BМ@вn —)—) ЌHвp ˜)˜)ZжHвq –)–) вt ))КрHвv š)š)Ÿ @ вw “)“)м @ вx ”)”)Y @ вy ’)’)­Hвz ­;­;ХЁHв| Ќ;Ќ;~п@в~ Ї;Ї;ЋHв€ Ј;Ј;…jHв І;І;§с в„ Ÿ;Ÿ;ѕъHв† Њ;Њ;Cт @ в‡ Є;Є; є @ в‡ “+˜+CѕHвˆ ›+›+яє@в‰ š+š+NєвŒ Ž+Ž+БыHв n)n)эјHв m)m)Qц@в‘ h)h)Ќ‘Hв“ i)i)гHв” g)g)cI в— ^)^)ИЕHв™ k)k)šI @ вš c)c)аI @ в› d)d) J @ вœ e)e) ­Hв 3)3)ЉџHвŸ 2)2)І @вЁ -)-)FѓHвЃ .).)СЊHвЄ ,),)vš вЇ $)$)’—HвЉ 0)0)Дš @ вЊ ))))ђš @ вЋ *)*)TЃHвЌ S)S)ЗHвЎ R)R) -@вА M)M)‘еHвВ N)N)'HвГ L)L)Ф­ @ вГ C)F)‡­ вЖ >)>)ѕрHвИ P)P)Ў @ вЙ H)H)BЎ @ вК I)I)~Ў @ вЛ J)J)хHвМ э7э7ЖHвО ь7ь7Щ@вР ч7ч7LiHвТ ш7ш7њэHвУ ц7ц7ЕЖ вЦ о7о7щHвШ ъ7ъ7оЖ @ вЩ у7у7З @ вЪ ф7ф7Ѕј @ вЪ ?%L%ˆHвЫ \%\%˜@вЬ [%[%wјвЯ :%:%ајHва O%O%jљHвб U%U%?ЎHвв **,ЖHвд **)@вж ќ)ќ)ЪHви §)§) Hвй ћ)ћ)tч вм ђ)ђ)ьЇHво џ)џ)Еч @ вп ї)ї)ѕч @ вр ј)ј)9ш @ вс љ)љ) [Hвт Е7Е7Ч—Hвф Д7Д7”Ы@вц Џ7Џ7§wHвш А7А7ЌHвщ Ў7Ў7ъя вь Ѕ7Ѕ7.UHвю В7В7!№ @ вя Њ7Њ7Z№ @ в№ Ћ7Ћ7˜№ @ вё Ќ7Ќ7D @ вё %%ЙЪHвђ %%t8@вѓ %% ві % %$ZHвї ffхLHвљ ee88@вћ ``/Hв§ aaj„Hвў __UB вWW‰HвccB @ в\\ЫB @ в]]RBHвл л |mHвй й IПв д д ъHв к к NHв a?a?ШpHв`?`?чч@в[?[?Ё–Hв\?\?EHвZ?Z?†? @ вI?P?i? вD?D? РHв^?^?N@ @ вV?V?Р? @ вS?S? @ @ вU?U?б@ @ вX?X?x@ @ вW?W?Ї? @ вR?R?ч? @ в T?T?аŸ @ в ї  uHв!I I Zw@в"H H ЏŸ в%ђ ђ Y  Hв&  ‰  Hв'  Ђ Hв(< < И  Hв)  `Ђ Hв*B B э  Hв+$ $ МЁ Hв,6 6 Ё Hв-* * юŸ Hв.  ]Ё Hв/0 0 )  Hв0 %l @ в0 # БWHв19 9 |@в28 8 l в5  Јl Hв6, , Dl Hв7& & m Hв82 2 L8Hв9бРHв;йЃ@в=іHв?л,Hв@ЂN вC  1HвEЯN @ вFћN @ вGxаHвHkЗHвJ—Э@вLћћЭ2HвNќќ§HвOњњWъвRђђ]ЄHвTўўƒъ@ вUїїЎъ@ вVјјjž @ вVfjl‡HвW€€8@вXEž в[aaЩž Hв\ss8Ÿ Hв]yyŒž Hв^mmAЙHв_x#x#†@вas#s#;ЋHвct#t#0ьHвdr#r#~I вgl#l#‰ŽHвiv#v#ћHвj‘#‘#к;Hвl##Џ@вn‹#‹#[HвpŒ#Œ#SЉHвqŠ#Š#’Г вtƒ#ƒ#”žHвvŽ#Ž#ЦГ @ вwˆ#ˆ#.ˆ @ вwьђњ.HвxЩˆ@вy ˆ в|ччїˆ Hв}‡ˆ Hв~ћће‰ Hв  c‰ Hв€Mˆ HвѕѕчЗHв‚ќ"ќ"нЅHв„ћ"ћ"фџ@в†і"і"gЋHвˆї"ї"|МHв‰ѕ"ѕ"Y вŒэ"э"\шHвŽљ"љ"ѓY @ вѓ"ѓ"НY @ вђ"ђ"dњHв‘т"т"Hв“с"с"j @в•м"м"МЌHв—н"н"№œHв˜л"л"˜ в›д"д"5гHвп"п"P˜ @ вžй"й"B{HвŸˆ:ˆ:’™HвЁ‡:‡:Л @вЃ‚:‚:NѓHвЅƒ:ƒ:‚HвІ:: < вЉz:z:фЕHвЋ…:…:C< @ вЌ::‹ж @ вЌр(у( Hв­ц(ц(У@вЎх(х(GжвБл(л(Т“HвВ##‡-HвД##щ8@вЖ##ЬHвИ##ўHвЙ##3C вМ##хиHвО##fC @ вП # #Л8 @ вП*0†0HвРRRи&@вСQQ˜8 вФ%%‰9 HвХ??9 HвЦ99m: HвЧKKј9 HвШEEл8 HвЩ33hФHвЪЂ:Ђ:WВHвЬЁ:Ё:cс@вЮœ:œ:x_Hва::й“Hвб›:›:r‹ вд“:“:СkHвжŸ:Ÿ:к‹ @ вз™:™:Ѓ‹ @ ви˜:˜:mp @ виј(ћ(,рHвй))р’@вк))/p внѓ(ѓ(Јp Hвоў(ў(!F @ во}+€+щNHвпƒ+ƒ+АC@вр‚+‚+кE вуx+x+§Hвф/#/#Z’Hвц.#.#—я@вш)#)#чмHвъ*#*#OЪHвы(#(#MЫвю # #ы$Hв№,#,#еЫ@ вё&#&#€Ы@ вђ%#%#ЈHвѓa#a#"Hвѕ`#`#Ч6@вї[#[#ЃсHвљ\#\#з)HвњZ#Z#Hтв§S#S#заHвџ^#^#т@ вX#X#‰ЕHвH#H#xџHвG#G#ђЪ@вB#B#&HвC#C#pЮHвA#A#p в :#:#ЊЦHв E#E#Є @ в?#?##А @ в"'c HвCC”r@вBBѓЏвйАHв66БHв<<PАHв**”АHв00№ЙHвЬ2Ь2ЌМHвЫ2Ы28ч@вЦ2Ц2§‡HвЧ2Ч2€лHвХ2Х2тH в"О2О2Т?Hв$Щ2Щ2 I @ в%У2У2ЫѓHв&…1…1ЉіHв(„1„13г@в*11ШgHв,€1€1QHв-~1~1ЈОв0w1w1№ЊHв2‚1‚1йО@ в3|1|1ЊHв4h h * Hв6g g k@@в8b b ]{Hв:c c   Hв;a a Gў @ в;Z \ ўв>U U *FHв@e e yў@ вA^ ^ Еў@ вB_ _ š)HвC{ { 0HвEz z ”@вGu u џ‹HвIv v ВUHвJt t жквMm m ы‚HвOx x л@ вPr r (ѓHвQf5f5ЪфHвSe5e5H@вU`5`5KўHвWa5a5rHвX_5_5‚Ѕв[X5X5ŽЂHв]c5c5­Ѕ@ в^]5]5 @ в^fmphHв_••ѕŠ@в`””у€ вcaay‚ HвdŽŽi HвevvЂ Hвf||(‚ Hвgˆˆ* Hвhppл Hвi‚‚ѓDHвj44 LHвlџ3џ3 @вnњ3њ3rўHвpћ3ћ3MŸHвqљ3љ39v вtё3ё3ДЈHвv§3§3yv @ вwї3ї3[v @ вxі3і3Ау @ вx!$A Hвy''ŽП@вz&&‚ув}ГJ @ в} јHв~ƒЯ@вŒJ в‚џџзJ Hвƒ  ёоHв„ц3ц3[чHв†х3х3Зэ@вˆр3р3”vHвŠс3с36эHв‹п3п3€4 @ в‹и3к3V4 вŽг3г3чгHву3у3щ4 @ в‘н3н3Ў4 @ в’м3м3T­Hв“N4N4 ’Hв•M4M4‹У@в—H4H4ФXHв™I4I4АГHвšG4G4ё­в?4?40IHвŸK4K4‹Ў@ в E4E4&Ў@ вЁD4D48 @ вЁ_bВєHвЂee^@вЃddЦ7 вІZZц?HвЇШ3Ш30WHвЉЧ3Ч3[@вЋТ3Т3ШщHв­У3У3ФHвЎС3С3œ вБЙ3Й3–HвГХ3Х3Uœ @ вДП3П3+œ @ вЕО3О3ХŸHвЖ445DHвИ44†Ё@вК44СHвМ44тlHвН44ж вР 4 4ižHвТ44еж @ вУ44Јж @ вФ44З†HвХ4444˜юHвЧ3434зa@вЩ.4.4 ЭHвЫ/4/4зОHвЬ-4-4№• вЯ%4%4-qHвб1414J– @ вв+4+4– @ вг*4*4шeHвдg4g4‘Hвжf4f4{ж@виa4a4g€Hвкb4b4„­Hвл`4`4эМ воY4Y4FмHврd4d4Н @ вс^4^43Д @ вс ” -HвтЊ Њ Cj@вуЉ Љ Двц‹ ‹ ŒДHвч  зДHвшЃ Ѓ QДHвщ— — ЊzHвъА А ‡ вэЉ Љ @вяЎ Ў @вёЏ Џ ЃѓHвђl1l1ЦqHвєk1k1i™@віf1f1‚чHвјg1g1^Hвљe1e1?§ @ вљ]1_1§ вќX1X1jaHвўi1i1л§ @ вџc1c1Є§ @ вb1b1p§ @ вa1a1Ш|Hвb b Hвa a 9#@в\ \ ˆgHв] ] QIHв [ [ l_ в T T е^Hв_ _ _ @ вY Y .Hвђ ђ ЏBHвё ё Љo@вь ь ukHвэ э і†Hвы ы ­/ ву у K Hвя я 0 @ вщ щ й/ @ вш ш ›ЭHвИ/И/ИHв!З/З/c@в#В/В/lЂHв%Г/Г/д~Hв&Б/Б/’S в)Ј/Ј/wHв+Е/Е/T @ в,Џ/Џ/щS @ в-Ў/Ў/ИS @ в.­/­/Ы‚Hв/Ш1Ш1ъHв1Ч1Ч1/т@в3Т1Т1”Hв5У1У1GHв6С1С1і0 @ в6Е1Й1Э0 в9А1А1ВwHв;Х1Х1Љ1 @ в<Н1Н1#1 @ в=Л1Л1н1 @ в>О1О1z1 @ в?М1М12 @ в@П1П1^5 @ в@7:­§HвA==c“@вB<<(5 вE22$я @ вEPTF3HвFddхЬ@вGccьювJKKYяHвKWWЃяHвL]]{P @ вLtxџФHвM{{Ž@вNzz?P вQooлHвRQ>Q>щHвTP>P>‚и@вVK>K>KxHвXL>L>VќHвYJ>J>Ђ” в\=>=>и=Hв^N>N>j• @ в_F>F>ц” @ в`C>C>6• @ вaE>E>• @ вbD>D>†• @ вcG>G>У” @ вdB>B>Ј• @ вeH>H>Ц— @ вeе$и$(Hвfш$ш$тЮ@вgч$ч$Ё— вjа$а$ш— Hвkл$л$K˜ Hвlс$с$РHвmч;ч;1иHвoц;ц;Ј@вqс;с;VЄHвsт;т;^oHвtр;р;Євwж;ж;МУHвyф;ф;;Є@ вzл;л;–Є@ в{м;м;-Ѕ@ в|о;о;ѕЄ@ в}н;н;ЉБ @ в}Ћ+Џ+PHв~В+В+mщ@вБ+Б+qБ в‚І+І+‹Š @ в‚Т+Ч+„QHвƒЪ+Ъ+Ћч@в„Щ+Щ+QŠ в‡Н+Н+WБHвˆа)а)dЫHвŠЯ)Я)Р@вŒЪ)Ъ)7ЄHвŽЫ)Ы)Ÿ&HвЩ)Щ)/Їв’С)С);ЕHв”Э)Э)Ї@ в•Ч)Ч)YЇ@ в–Ц)Ц)Œћ @ в–ј$ќ$UHв—џ$џ$)@в˜ў$ў$aћ в›ѓ$ѓ$РœHвœј:ј:"АHвžї:ї:Іt@в ђ:ђ:cэH :ѓ:ЩиHвЃё:ё:uG вІч:ч:!ŽHвЈѕ:ѕ:ЈG @ вЉь:ь:H @ вЊю:ю:кG @ вЋэ:э:bH @ вЌя:я:.[ @ вЌр)ф)GўHв­ч)ч)цз@вЎц)ц)ёZ вБл)л)XHвВt>t>ђHвДs>s>I @вЖn>n>%ŠHвИo>o>шVHвЙm>m>  @ вЙa>c>ќ вМ\>\>—=HвОq>q>ћ @ вПi>i>n @ вРf>f>Ф @ вСh>h>‘ @ вТg>g>6 @ вУj>j>H @ вФe>e>} @ вХk>k>YЌ @ вХ%’%,еHвЦЂ%Ђ%Зљ@вЧЁ%Ё%1Ќ вЪŠ%Š%~Ќ HвЫ•%•%ъЌ HвЬ›%›%™мHвЭ<<ПтHвЯ<<@х@вб§;§;+…Hвгў;ў;yдHвдќ;ќ;]K взђ;ђ;№bHвй<<ŠK @ вкї;ї;ыK @ влј;ј;‹L @ вмњ;њ;PL @ внљ;љ;Н @ внк+о+шщHвос+с+АЮ@впр+р+TН вте+е+nѓ @ втё+і+ˆџHвуљ+љ+1Ь@вфј+ј+1ѓ вчь+ь+ѓіHвш**шєHвъ**,0@вь**ИйHвю**+Hвя**ЯI вђ * *-БHвє**6J @ вѕ**ќI @ ві**]— @ віВ%Ж%HвїЙ%Й%›ж@вјИ%И%/— вћ­%­%2]Hвќ;;dКHвў;;eX@в;;`гHв;;љUHв ; ;`Яв;;?Hв;;–Я@ в ;;а@ в  ; ;ЫЯ@ в  ; ;Yа@ в  ; ;v @ в ,*0*ЇЮHв 3*3*ПЭ@в2*2*Хu в'*'*џ\Hві і @$Hвѕ ѕ я#@в№ № ЖLHвё ё 41Hвя я ёз вш ш 1mHвѓ ѓ $и @ вэ э V,Hв  2@в"  ЏdHв$ f#Hв%  ЇВ в(  lHв* ф @ в*/2ўHв+<<ЙZ@в,;;іув/**AфHв055ŸHв1••ж~Hв3””Y@в5UHв7гxHв8ŽŽ!ев;……В,Hв=’’ае@ в>ŒŒXе@ в?ŠŠ•е@ в@‹‹рЯHвA<<ГHвC<<кy@вE<<ЧЫHвG<<‚БHвH<<— вK<<РџHвM<<Л @ вN<††ŒрHв?#/#/ uHвA"/"/lМ@вC//АAHвE// ќHвF//Eш @ вF//&швI//wаHвK / /Чш@ вL//Љщ@ вM//ъ@ вN//щ@ вO//ўш@ вP//hш@ вQ//ѓщ@ вR//Žш@ вS//nщ@ вT//SГ @ вT29ъ}HвU<<В1@вV;;9Г вY--W=HвZб.б.KкHв\а.а.jj@в^Ы.Ы.BvHв`Ь.Ь.jХHвaЪ.Ъ.0Ф @ вaТ.Ф.ФвdН.Н.ЋШHвfЮ.Ю.SФ@ вgЦ.Ц.ОФ@ вhШ.Ш.“Ф@ вiЧ.Ч.&y @ вiшыH~Hвjюю@вkээ y вnуу: @ вnE+Hвo""@вp!!! вsНsHвtX.X.[_HвvW.W.€@@вxR.R.ЉБHвzS.S.3їHв{Q.Q.gЕ @ в{A.H.GЕ в~<.<.ѕЂHв€U.U.иЕ @ вL.L.<Ж @ в‚O.O.Ж @ вƒN.N.њЕ @ в„M.M.‹Е @ в…J.J.ЗЕ @ в†K.K.АZHв‡ƒ/ƒ/ЪH≂/‚/YЮ@в‹}/}/ПnHв~/~/F”HвŽ|/|/д@ @ вŽs/u/Є@ в‘n/n/д>Hв“€/€/КA @ в”z/z/~A @ в•y/y/?A @ в–x/x/A @ в—w/w/ qHв˜ЗЗ•!Hв™ЕЕ^f вœААюNHвžЖЖŠ* @ вž˜›‚HвŸЅЅє<@в ЄЄE* вЃ““Ь* HвЄžžЌBHвЅ//ЇdHвЇœ/œ/Mя@вЉ—/—/Ь’HвЋ˜/˜/jHвЌ–/–/!7 вЏŽ/Ž/7НHвБš/š/7 @ вВ”/”/U7 @ вГ“/“/їHвДЩЩЧmHвЕЧЧXЉвИТТXCHвКШШ0xHвЛГ2Г2oрHвНВ2В2эA@вП­2­2ЄHвСЎ2Ў2ўoHвТЌ2Ќ2ъ? @ вТЅ2Ї2Ъ? вХ 2 2—iHвЧА2А2@ @ вШЉ2Љ2]@ @ вЩЊ2Њ2Ї[ @ вЩvzтHвЪ„„ џ@вЫƒƒu[ вЮqqж[ HвЯ}}ЬвHваˆ=ˆ= ўHвв‡=‡=(š@вд‚=‚=§нHвжƒ=ƒ=“~Hвз==: @ взx={= вкs=s=ILHвм…=…=b @ вн}=}=У @ во==– @ вп~=~=ZJHврc/c/nмHвтb/b/Ћ@вф]/]/Њ>Hвц^/^/§aHвч\/\/  @ вчT/V/л въO/O/т‘Hвь`/`/y @ вэY/Y/; @ вюX/X/Ў @ вяZ/Z/‡МHв№у=у=Hвђт=т=HЋ@вєн=н=б›Hвіо=о=тpHвїм=м= j вњг=г=BgHвќр=р=qj @ в§й=й=7j @ вўи=и=šj @ вџк=к=Юя›HвM5M5Љд›HвL5L5c‚›@вG5G5a›HвH5H5iх›HвF5F5žЁ›в ?5?5І^›Hв J5J5ЯЁ›@ в D5D5Y~ @ в 19ГХHвggШ@вff#~ в,,! HвHHf HвNNЊ HвTTH€ Hв``є HвZZŒ~ Hв<<м~ HвBB}wHвJ J ŸmHвI I Єџ@вD D kHв E E РPHв!C C ˆ# @ в!< > ]# в$7 7 ‚zHв&G G З# @ в'@ @ т# @ в(A A ЎD @ в(Ž’ќHв)ЂЂЄ@в*ЁЁ„D в-‰‰еD Hв.••E Hв/››чHв0О5О5wЛHв2Н5Н5 @в4И5И5— Hв6Й5Й5WБHв7З5З5jЂ ›@ в7А5В5BЂ›в:Ћ5Ћ5гŠHв<Л5Л5–Ђ›@ в=Д5Д5ьЂ@ в>Е5Е5аt @ в>№ѓPзHв?  J@в@  –t вCыы[u HвDќќu HвEііњ}HвF99˜\HвH99g§@вJ99рžHвL99иdHвM99 Ц @ вM99аХвP 9 9еtHвR99HЦ@ вS99 Ц@ вT99)jHвU‹<‹@вшЩЩ выРРю Hвьž ž n8Hвю  Hh@в№˜ ˜ чHвђ™ ™ MtHвѓ— — ­] ві  %Hвј› › й] @ вљ• •  @ вљ­В?НHвњЕЕпГ@вћДДй вўЈЈ]U @ вўduCHвџйй6C@вии=U в__cV HвEX HвККЃX HвРРЁY HвввAY HвЬЬыW Hв ДДВU Hв ~~ѓX Hв ЦЦеV Hв œœzU Hв xx+V HвŠŠœV Hв––W HвЈЈ'W H АW HвЎЎ№U Hв„„яМHв55ЦЯHвџ4џ4х@вњ4њ4bжHвћ4ћ4эзHвљ4љ4{івё4ё4щPHв §4§4Лі@ в!ї4ї4˜і@ в"і4і4]kHв#55.ўHв%55:ф@в'55Н‡Hв)55РеHв*55ХСв- 5 5іuHв/55 Т@ в055хС@ в155хЈ @ в1ВЕ Hв2ИИ —@в3ЗЗМЈ в6­­ЪVHв74545(Hв93535€з@в;.5.5~yHв=/5/5EŠHв>-5-5ѕівA%5%5T…HвC1515Aї@ вD+5+5ї@ вE*5*5d @ вEШЬ‰§HвFЯЯЊ@вGЮЮєc вJУУ'HвKЧ Ч еR@вMТ Т ЫџHвOУ У U HвPС С w вSЛ Л 4 HвUХ Х ЎDHвV€4€4й‡HвX44lb@вZz4z4FžHв\{4{4…Hв]y4y4“) в`r4r4цHвb}4}4К) @ вcw4w4‡Hвd™4™4ЂжHвf˜4˜4qi@вh“4“4здHвj”4”4jnHвk’4’42В вn‹4‹42VHвp–4–4\В @ вq44бІHвrГ4Г4ЉOHвtВ4В4р@вv­4­4aHвxЎ4Ў4ЁHвyЌ4Ќ4…7 в|Є4Є4жўHв~А4А4В7 @ вЉ4Љ4у7 @ в€Њ4Њ4чуHвЭ4Э4џиHвƒЬ4Ь4EЧ@в…Ч4Ч4tђHв‡Ш4Ш4Є‰HвˆЦ4Ц4Q† в‹О4О4HвЪ4Ъ4к† @ вŽФ4Ф4† @ вУ4У4э: @ в‰‹ бHвŽŽ}Њ@в‘Ћ: в”„„xGHв•ц4ц4–Hв—х4х4жђ@в™р4р4ђИHв›с4с4г{Hвœп4п4Њl вŸи4и4RАHвЁу4у4иl @ вЂн4н4- @ вЂHвЃЗЗ9'@вЄЖЖ вЇўў HвЈJJ“ HвЉ’’є HвЊ˜˜` HвЋАА˜ HвЌЄЄ Hв­ЊЊч HвЎ††: HвЏŒŒ„ HвА&&Ц HвБ,,G HвВžžС HвГ\\ HвДbbK HвЕ  Œ HвЖ>>Ш HвЗDDD HвИPP HвЙVV= HвКttr HвЛzzy HвМhhи HвНnnЊ HвО€€  HвП22J HвР88V•HвСккЇ•HвУйй j•@вХддА'•HвЧееšn•HвШггL•вЫЬЬq•HвЭззs•@ вЮббCWHвЯѓѓ.uHвбђђ‡^@вгээФHвеюю:HвжььЩЩвйххЕhHвл№№ёЩ@ вмъъšњ @ вмil^]HвнvvЗ%@воuuoњвсddТњHвтoo&•HвуТ:Т:AдHвхС:С:ъE@вчМ:М:шГHвщН:Н:ЅHвъЛ:Л: g @ въВ:Е:Юf вэ­:­:іTHвяП:П:мg @ в№Й:Й:Žg @ вёИ:И:Hg @ вђЗ:З:м Hвѓй6 вірў@вјрў@вњ”Hвћ•.•.ЦЬHв§”.”.нэ@вџ.. ŒHв..врHвŽ.Ž.ы @ в….ˆ.ръв€.€.я‚Hв’.’.&ы@ вŠ.Š.Nы@ в ‹.‹.ы@ в Œ.Œ.ЯbHв u.u.—КHв t.t.œЛ@вo.o.YVHвp.p.bUHвn.n.Y @ вh.j.3 вc.c.‡ Hвr.r.ƒ @ вl.l.ЧbHвхpHвЛ(@вYsHвdHв Т” в#  `Hв%ё” @ в&˜ƒHв'щ<щ^HвЋ--LвHв­€-€-&@@вЏ{-{-1ЭHвБ|-|-‰IHвВz-z-/F @ вВr-t-F вЕm-m-ЌђHвЗ~-~-“F @ вИw-w-фF @ вЙx-x-`F @ вКv-v-Z @ вК"'ыSHвЛ11 @вМ00еY вП8Z HвР**џM @ вРD&G&O HвСQ&Q&ИN @вТP&P&БM вХ?&?&JN HвЦJ&J&ќ’HвЧ--д^@вЩ˜-˜-жHвЫ™-™-­єHвЬ—-—-рѕ @ вЬ‘-“-ВѕвЯŒ-Œ-љІHвб›-›-і@ вв•-•-VQHвгrrK!@веkkK!@взmmK!@вйllЂЌвмff6Y@воoo6Y@врqq6Y@втpp}Hву"7"7FуHвх!7!7Œє@вч77e—Hвщ77gHвъ77†e вэ77ьšHвя77еe @ в№77Ћe @ вё77В’Hвђя6я6юHHвєю6ю65ћ@віщ6щ6OHвјъ6ъ6$žHвљш6ш6Яњ вќр6р6ТЩHвўь6ь6юњ @ вџх6х6ћ @ вц6ц6шYHвгг• вЬЬєh@вббєh@вввё€Hв &&ЫAHв %%N@в   w>Hв!!ЯHвЏ3 внtHв##%4 @ вч3 @ в(HвddŽ Hвcc€@в^^YZHв__XeHв]]Џ˜ в"RRЋfHв$aa™ @ в%XX0™ @ в&YYз˜ @ в'WWX™ @ в(ZZ™ @ в)[[‘ @ в)З К ёkHв*Ъ Ъ fˆ@в+Щ Щ o в.В В ќ Hв/У У А Hв0Н Н оїHв1D/D/AHв3C/C/[‹@в5>/>/QHв7?/?/Ÿ—Hв8=/=/2 @ в83/7/  в;././hНHв=A/A/Ъ @ в>;/;/[ @ в?9/9/ƒ @ в@:/:/п< @ в@р ш яVHвA l@вB П< вEл л Ž> HвF  К= HвGї ї ќ< HвHы ы > HвI§ § Z= HвJё ё %HвKчч™HвMццJ@вOссщВHвQтты"HвRррK вUии HвWффv @ вXнн  @ вYооё<HвZВВbЕHв\ББ”З@в^ЌЌЙHв`­­СHвaЋЋsдвdЃЃ8щHвfЏЏд@ вgЈЈЦд@ вhЉЉНHвir9r9CHвkq9q9хѕ@вml9l9ŒHвom9m9+№Hвpk9k9ќG вsa9a9œяHвuo9o9eH @ вvg9g9дH @ вwi9i91H @ вxf9f9™H @ вyh9h9pхHвzW(W(A Hв{U(U(ћЮв~P(P(qФHв€V(V(ЙЃ @ в€?(B(VHвE(E(о1@в‚D(D(|Ѓв…:(:(љЂHв†ЭЭOœHвˆЬЬхЉ@вŠЧЧ-УHвŒШШ>7HвЦЦс\ вННL;Hв’ЪЪ3] @ в“УУ ] @ в”ТТ\] @ в•ФФ– @ в•ј –ŠHв–  іO@в—  q вšѓѓИ Hв›  # Hвœ  j @ вœт‰HвLLŠ3@вžKKE вЁ< HвЂEEŒ HвЃ!!З HвЄ??4 HвЅ99Z HвІ--С HвЇ33Ы HвЈ''ББHвЉќ%ќ%У*HвЋћ%ћ%Vй@в­і%і%э:HвЏї%ї% HвАѕ%ѕ%Hї @ вАэ%я% ї вГш%ш%QŽHвЕљ%љ%‡ї @ вЖё%ё%џї @ вЗѓ%ѓ%Цї @ вИђ%ђ%œ@HвЙz;z;.—HвЛy;y;&`@вНt;t;УйHвПu;u;яŽHвРs;s;š @ вРj;m;д™ вУe;e;кHвХw;w;Lš @ вЦo;o;аš @ вЧq;q;Šš @ вШp;p;‰~ HвЩ‹*‹*<~ HвЫŠ*Š*W} @вЭ…*…*Ѓ} HвЯ†*†*} Hва„*„*Н{ @ ва|*~*m{ вгw*w*я} Hвеˆ*ˆ*| @ вж€*€*Г| @ вз‚*‚*e| @ ви** ЬHвй<;<;ывHвл;;;;~t@вн6;6;,нHвп7;7;@Hвр5;5;Ю' @ вр$;+;Ђ' ву;;ЩёHвх9;9;H) @ вц3;3;,( @ вч.;.;) @ вш2;2;л( @ вщ1;1;X( @ въ/;/;Ѓ( @ вы0;0;ў' @ вь-;-;QWHвэZ;Z;i\HвяY;Y;Вž@вёT;T;ўюHвѓU;U;| HвєS;S;b… @ вєL;N;0… вїG;G;}HвљW;W;˜… @ вњP;P;Ъ… @ вћQ;Q;cїHвќl*l*ћРHвўk*k*њп@вf*f*Ј;Hвg*g*m Hвe*e*š) в^*^*MHвi*i*а) @ в c*c*LОHв S*S*^вHв R*R*Сј@вM*M*JЅHвN*N* НHвL*L*€ @ вC*F*ц в>*>*ь'HвP*P*{€ @ вI*I*Б€ @ вJ*J*J€ @ вH*H*†’ @ вЫ%г%KЦHвн%н%Љ"@вм%м%F’ вЦ%Ц%У’ Hвж%ж%ќgHв dd\'Hв"ccщJ@в$^^I|Hв&__ŠƒHв']]!Т в*UU}ZHв,aaZТ @ в-[[9Т @ в.ZZн2Hв/ииї2Hв1зз›@в3вв*iHв5гг.SHв6бб4в в9ЪЪG Hв;ееSв @ в<ЯЯcHв=h h ѕ7Hв?g g z@вAb b ;,HвCc c н‹HвDa a 98 вGZ Z ЪlHвIe e X8 @ вJ_ _ ККHвK..šћHвM..\@вO . .ЅеHвQ..џЯHвR . .(ЬвUї-ї-ZHHвW..JЭ@ вX..sЭ@ вY.."Э@ вZ..Ю@ в[..§Ь@ в\..gЮ@ в] . .BЮ@ в^..РЭ@ в_..ДЬ@ в`ў-ў-иЬ@ вaџ-џ-GЬ@ вbќ-ќ-}Ь@ вc§-§-рЭ@ вd..œЭ@ вe..•Ю@ вf . .ЦРHвg•2•2rРHвi”2”2Эx@вk22сHвm22 IHвnŽ2Ž2q вq…2…29KHвs’2’2” @ вtŠ2Š2ц @ вuŒ2Œ2Ч @ вv‹2‹2]cHвwh=h=0EHвyg=g=Љz@в{b=b=AeHв}c=c=AъHв~a=a=AЙвV=V=JПHвƒe=e=nЙ@ в„[=[=AК@ в…^=^=ИЙ@ в†\=\=К@ в‡]=]=К@ вˆ_=_=є @ вˆ8;Š’Hв‰EEЪе@вŠDD]є в33Оє HвŽ>>3КHв”;”;ѕјHв‘“;“;Я\@в“Ž;Ž;yШHв•;;•ЊHв–;;э$ в™…;…;уFHв›‘;‘;[% @ вœ‹;‹;#% @ вŠ;Š;ЭЂ @ въ*ю* ЯHвžё*ё*й@вŸ№*№*ŽЂ вЂх*х*X“ @ вЂ#€$HвЃ&&кЄ@вЄ%%“ вЇЧ @ вЇЉ Ќ ЭSHвЈЏ Џ S‰@вЉЎ Ў Є вЌЄ Є /pHв­њњ…HвЏљљO@вБєєЛHвГѕѕ+HвДѓѓxF вЗьь+ HвЙїї—F @ вКёёfxHвЛЂЂ"€HвНЁЁ+-@вПœœтsHвСв HвТ››š вХ””„)HвЧŸŸ š @ вШ™™OmHвЩ@<@<§ЧHвЫ?>ЮW@в[99§ Hв]::1^Hв^88Ж1 вa11r6Hвc<<м1 @ вd66Ёх @ вdЦ Э џHвeѕ ѕ Ј9@вfє є †хвiС С чHвjю ю юхHвkж ж 1цHвlм м tцHвmт т ЗцHвnш ш ЙхHвoа а BЏ4@вoшщBЏ4@вoЏ#А#BЏ4@вoМНBЏ4@вo_`BЏ4@вoBЏ4@вoKLBЏ4@вo))BЏ4@вo­ЎBЏ4@вoTUBЏ4@вoдеBЏ4@вoПРBЏ4@вo$"%"BЏ4@вoBЏ4}@вoт!у!BЏ4@вoBЏ4@вo'(BЏ4@вo›#œ#BЏ4@вoопBЏ4@вoTUBЏ4@вo§ўBЏ4@вoBЏ4@вoopBЏ4@вoŽBЏ4@вoqrBЏ4@вoщъBЏ4@вoюяBЏ4@вoz&{&BЏ4@вoђѓBЏ4@вohiBЏ4@вoM(N(BЏ4@вopqBЏ4@вo‹ŒBЏ4@вoћќBЏ4@вo#$BЏ4@вoп'р'BЏ4@вoъ&ы&BЏ4@вoЉ&Њ&BЏ4@вoгдBЏ4@вoЪЫBЏ4@вoб в BЏ4@вox)y)BЏ4@вoчшBЏ4@вostBЏ4@вo12BЏ4@вoEFBЏ4@вo%&BЏ4@вo78BЏ4@вowxBЏ4@вo˜™BЏ4@вoЉ"Њ"BЏ4@вoў&џ&BЏ4@вoи&й&BЏ4@вo|}C›4@вo01C›4@вoрсC›4@вoСТC›4@вoщ+ъ+C›4@вoC›4@вoЂЃC›4@вoabC›4@вoGHC›4@вo‚C›4@вo/0C›4@вo7%8%C›4@вo№(ё(C›4@вo‹+Œ+C›4@вoŽC›4@вoБВC›4@вoЃЄC›4@вoWXC›4@вoи й C›4@вo12C›4@вo†‡C›4@вoˆ‰C›4@вoВГC›4@вof%g%C›4@вo™'š'C›4@вo$$C›4@вoћќC›4@вo‰ Š C›4@вo"#C›4@вožC›4@вo­!Ў!C›4@вoC›4@вo… † C›4@вoqrC›4@вo C›4@вo9:C›4@вoУ%Ф%C›4@вo‹ŒC›4@вoќ§C›4@вo C›4@вo$&%&C›4@вo| } C›4@вoЉЊC›4@вoxyC›4@вoуфC›4@вoЫ!Ь!C›4@вo<&=&C›4@вo2$3$C›4@вo ‘ C›4@вoЈЉC›4@вo€C›4@вonoC›4@вo C›4@вoъыC›4@вoVWC›4@вo((C›4@вo[&\&C›4@вo?@C›4@вoHIC›4@вo  C›4@вo)*C›4@вoПРC›4@вoј!љ!C›4@вo№$ё$C›4@вoГДC›4@вo  C›4@вoœ$$C›4@вoв+г+C›4@вo  C›4@вoќ*§*C›4@вoC›4@вo!"C›4@вoa b C›4@вoƒ„C›4@вoпрC›4@вob(c(C›4@вoйкC›4@вoЅІC›4@вo*!+!C›4@вo^_C›4@вo$*%*C›4@вoC›4@вoабC›4@вo*+C›4@вo!Ž!C›4@вo‘"’"C›4@вoŠ‹C›4@вo! " C›4@вoЃ+Є+C›4@вo%%C›4@вo  Ё C›4@вoш щ C›4@вoБВC›4@вo]^C›4@вoЮ Я C›4@вoНОC›4@вoЏ А C›4@вo67C›4@вo‡%ˆ%C›4@вou+v+C›4@вoЛ"М"C›4@вoЃЄC›4@вo%%C›4@вo‹ŒC›4@вoe"f"C›4@вoЌ­C›4@вo@ A C›4@вoC›4@вoUVC›4@вo{"|"C›4@вoc'd'C›4@вo6"7"C›4@вoZ [ C›4@вor s C›4@вoLMC›4@вoѓ'є'C›4@вoО П C›4@вo/0C›4@вolmC›4@вoД$Е$C›4@вo'(C›4@вoC›4@вoЌ­C›4@вo7(8(C›4@вor s C›4@вo‘C›4@вoOPC›4@вo^_C›4›@вoбвC›4@вo№ёC›4@вoFGC›4@вo&&C›4@вoЗ И C›4@вo\]C›4@вoR+S+C›4@вoЊЋC›4@вoC›4@вoК+Л+C›4@вoи)й)C›4@вo23C›4@вoˆ ‰ C›4@вoя № C›4@вoШЩC›4@вoЭЮC›4@вo™šC›4@вoї#ј#C›4@вo@ A C›4@вoмнC›4@вoс#т#C›4@вo…†C›4@вoщъC›4@вoи(й(C›4@вo{|C›4@вoѕіC›4@вoУ#Ф#C›4@вoРСC›4@вo‡(ˆ(C›4@вom!n!C›4@вoшщC›4@вo+,C›4@вoЏАC›4@вoфхC›4}@вonoC›4@вoХЦC›4@вoт*у*C›4@вoЭ$Ю$C›4@вoЊ%Ћ%C›4@вoЁ Ђ C›4@вoВЃ4@вoЗИВЃ4@вoВЃ4@вoЩЪВЃ4@вo3 4 ВЃ4@вoъыВЃ4@вoE F ВЃ4@вoІ Ї ВЃ4@вo‰ŠВЃ4@вo›œп­4@вocdп­4@вoЭЮп­4@вoЖЗп­4@вoz{п­4@вo‘’Ђ4@вo*'+'Ђ4@вo!)")Ђ4@вoЛ&М&Ђ4@вo&9'9Ђ4@вoЖ3З3Ђ4@вoабЂ4@вoх/ц/Ђ4@вoGHЂ4@вoШ*Щ*Ђ4@вoƒ7„7Ђ4@вo‘’Ђ4@вoї2ј2Ђ4@вofgЂ4@вo : :Ђ4@вo‡ˆЂ4'@вoo,p,Ђ4@вo;)<)Ђ4@вo88Ђ4@вoJ8K8Ђ4@вoŽ55Ђ4@вoi7j7Ђ4@вoS=T=Ђ4@вo^6_6Ђ4@вoїјЂ4@вoТ8У8Ђ4@вorЫ>Ђ4@вoC6D6Ђ4@вo“<”<Ђ4@вo6+7+Ђ4@вo!!Ђ4@вo,2-2Ђ4@вo77Ђ4@вo''Ђ4@вoЧШЂ4@вoРСЂ4@вoŸ, ,Ђ4@вot1u1Ђ4@вo>:?:Ђ4@вoЄ(Ѕ(Ђ4@вoъ"ы"Ђ4@вoв,г,Ђ4@вožЂ4@вoœ33Ђ4@вoП-Р-Ђ4@вo|>}>Ђ4@вoF2G2Ђ4@вo\]Ђ4@вoA B Ђ4@вo4 4Ђ4@вo<4=4Ђ4@вoх ц Ђ4@вoя;№;Ђ4@вo ? ?Ђ4@вoї6ј6Ђ4@вo * *Ђ4@вoœ;;Ђ4@вoi#j#Ђ4@вoЛ2М2Ђ4@вoф:х:Ђ4@вoЂ4@вoj-k-Ђ4•@вoЩЪЂ4@вo> >Ђ4@вo–>—>Ђ4@вo@@Ђ4@вoя)№)Ђ4@вoГДЂ4@вoјљЂ4@вoЂ7Ѓ7Ђ4@вoRSЂ4@вoВ Г Ђ4@вo6171Ђ4@вoњ ћ Ђ4@вo##Ђ4@вoTUЂ4@вo:>;>Ђ4@вok/l/Ђ4@вo2ž2Ђ4@вo$:%:Ђ4@вo–—Ђ4@вoЖ=З=Ђ4@вow:x:Ђ4@вofgЂ4@вo‘6’6Ђ4@вo.ž.Ђ4@вoх%ц%Ђ4@вoЂ4@вoю0я0Ђ4@вo==Ђ4@вoн6о6Ђ4@вoЁ4Ђ4Ђ4@вo"4#4Ђ4@вo5 5Ђ4@вoЅ)І)Ђ4ч@вo§ ў Ђ4@вoа3б3Ђ4@вo2 2Ђ4@вo$<%<Ђ4@вoU1V1Ђ4@вoУ'Ф'Ђ4@вoќ§Ђ4@вoI7J7Ђ4@вox0y0Ђ4@вoБ<В<Ђ4@вoЅ-І-Ђ4@вoю3я3Ђ4@вo./Ђ4@вoL-M-Ђ4@вoЬ Э Ђ4@вoi?j?Ђ4@вoіїЂ4@вoDEЂ4@вoY0Z0Ђ4@вoћќЂ4@вoж9з9Ђ4@вo[ \ Ђ4@вoo4p4Ђ4@вo;;Ђ4@вolmЂ4@вoФ6Х6Ђ4@вoб"в"Ђ4@вo`.a.Ђ4@вoх8ц8Ђ4@вo‚;ƒ;Ђ4@вoL"M"Ђ4@вo4 5 Ђ4@вoежЂ4@вo“”Ђ4@вoz9{9Ђ4@вožЂ4@вo}~Ђ4@вoL/M/Ђ4@вoР/С/Ђ4@вo+/,/Ђ4@вoК.Л.Ђ4@вoŒ&&Ђ4@вoЫ<Ь<Ђ4@вoб0в0Ђ4@вoœ99Ђ4@вo?‘?Ђ4@вoOPЂ4@вop=q=Ђ4@вo7#8#Ђ4@вo%0&0Ђ4@вoы,ь,Ђ4@вo9=:=Ђ4@вo1828Ђ4@вo..Ђ4@вobcЂ4@вoY>Z>Ђ4@вoŠ)‹)Ђ4@вo*7+7Ђ4@вo‚2ƒ2Ђ4@вo­*Ў*Ђ4@вob;c;Ђ4@вo[*\*Ђ4@вoО)П)Ђ4@вo^_Ђ4@вoр с Ђ4@вoѕ7і7Ђ4@вo­1Ў1Ђ4@вo99Ђ4@вo“*”*Ђ4@вoR S Ђ4@вoО(П(Ђ4@вoЂ4@вo1Ž1Ђ4@вo=‘=Ђ4@вoX:Y:Ђ4@вo’0“0Ђ4@вo"5#5Ђ4@вoю4я4Ђ4@вo‰-Š-Ђ4@вoЮЯЂ4@вo?9@9Ђ4@вoс5т5Ђ4@вo‹/Œ/Ђ4@вo, ,Ђ4@вol8m8Ђ4@вoW X Ђ4@вo‰8Š8Ђ4@вoA?B?Ђ4@вoЯ?а?Ђ4@вoВ0Г0Ђ4@вo}.~.Ђ4@вoя№Ђ4@вoў.џ.Ђ4@вoА>Б>Ђ4@вoноЂ4@вoа1б1Ђ4@вoфхЂ4@вoU5V5Ђ4@вoІЇЂ4@вoщъЂ4@вo9:Ђ4@вot u Ђ4@вo^9_9Ђ4@вo[)\)Ђ4@вo Ђ4@вo  Ђ4@вoг;д;Ђ4@вon5o5Ђ4@вo00Ђ4@вoЂ4@вo%6&6Ђ4@вo33Ђ4@вoP#Q#Ђ4@вoЅ/І/Ђ4@вoh2i2Ђ4@вoю1я1Ђ4@вoЂ4@вo+ +Ђ4@вoЦ5Ч5Ђ4@вo78Ђ4@вoЕ;Ж;Ђ4@вoтуЂ4@вo11Ђ4@вoКЛЂ4@вo Ž Ђ4@вoе4ж4Ђ4@вoЈ8Љ8Ђ4@вoQ R Ђ4@вoj k Ђ4›@вoЈ5Љ5Ђ4@вoы=ь=Ђ4@вo‚ƒЂ4@вo ЁЂ4@вo,,Ђ4@вoD'E'Ђ4@вo8,9,Ђ4@вo…†Ђ4@вo;;Ђ4@вoЊ:Ћ:Ђ4@вoє-ѕ-Ђ4›@вo<5=5Ђ4@вo9:Ђ4@вo##Ђ4@вoЕ9Ж9Ђ4@вo|3}3Wш     9Ђ€нПBtEЂ?Џъ! "пN%$&B#џ)›(9*' -,.+цž1S02•/оЭ54‰63мЭ98:7 =<>Ђ;ЌкA@B?PщcED\FCњ8IЂHJG№MЂLNKPэЃQPRO@єіUTџV{SїœYЦXZWђЊ]\^[Юa`b_ѕСedfcў]ihj_g №m›lnkяIqpˆro№Ѕut"v~sPй5yxzwтр}Ц|~{€0€‰‚џ)…„†ƒёВ‰ЂˆŠ ‡ьСŒŽ‹н‘3’ѓ•Ђ”–“|ы™˜š—§)œž›PшЁ ЂпŸPчРЅЄІЃх"ЉЈ-ЊЇћЦ­ЌЎЋю8БА(ВЏ ПЕЂДЖГ€фЈЙSИ-КЗсгНЂМОЛљЃСРТПЃжЦЦУDбШЭ,ЮЩЫЬЪвЯа ЧЯХЯФДPиклзежйдгЌ‚šпмчр›хцсу›фтшо›н}Ћьщыъ/ђ›ѕOєёя№ѓюэUћ§њјљќїі| nїГџў,=щ     )цГN JО!/2#(›&',1+.Q$U%)4-@*­0" Щєp9Ђ8;<756:43Оp>?@Џ=AœDЂAEŸC(B‘ќНLSKO#N#JHIFMGFНОQRSPPд„Y[X‚VWZUTј›^]M_\ёtfЂehjidbcga"`P\upromnqlkСvSsu#t8Lzwyxœž~{І‹`ƒ‚‡€…ш‰эˆє„ѕ}љ|`’‘›“Ž’ŒЛр˜Ц—•–™”Ќ"š-žœ›'zЅЄЎВЇГБЈЊ­ЋЌЏАЉЃЁЂІ ŸK5ЗЂДКИЙЖЕnОЛПНJМ@‘Ц›ХЪШЫЩФТУЧ‹С›РYŒЯЬавxб}ЮrЭPТ™зд\ежи\кІйгWЙолWпрснЉм,хтщц чшфуPжi№яєђѓюьэ\ёІыъB^јѕ6ў ќљџO§ћњВЗŒŒУїі@u  г u‚  б™›^e"$Щ! #ЩЌ[*-,)›'(+&›%€|M1.0/z-52-437>;Ђ>= :‘89<%76‹bКBS?A@‘5IHBLKtGBE‰FJDCЧRUTQOP›SNMЩ[]^ZXY`\WVPjtdfgca\bІe`_Ќ_ nmstvЩur›qЩpl›jkoihЮ|€‚~›ƒ{yz}xQwЯЉŒˆ†‡‹t…B„ ;Ђ‘Ž‚“—›™š›–”•‰˜“’›нŸЦœЁ ž љЄЂЃЅЂЬхЋЎ­ЊЈЉ`ЌЇІPќ}БАВЏ|O–ИКЛЗFЕЖxЙДFГ€F<ПМХУТРСФОНPФ†ЫЮrЭ‚ЪШ}ЩrЬЧrЦ|‘дзжгxбвxеаЯ бнрпмклоtйикŠцшxщхxу}фrчтxсј[ЛэSъ™ђ#№#юяёFьыPqјћњїѕ\іІљєѓ(хўГџ§ќ‰  C"“ ГF ї 6ўM…@@ЮЮHЧ"ЂM#!# Хл)Ц+,(/&'*%$PЭм2541/03.-‰+96:87Ч›@B?=N>RA<~;|€›FCGEFDRКKHLMJIЬdTSWVRPQUO\Nšё]R_q\Z[^YXD-ЌcS`dbasjligJhkfeЉЪpЂmqonЌ“ urvwtЩsPЮk~}€|z{yxњއ›‰)†„…ˆƒx‚tЫŠŽ[Œ‹ё“лџ”’‘€›šŸž™—˜œџ–{•ічІЂЅпЉЈЋЊЄЂЃЇFЁ лnЎ­ЏЌ?вГАДВБѕoКЂНМЙЗИЛЖЕ|vСОТРПђsЩЂШЮЯЭЫЬЧХЦ"ЪФУPTЇгавб.к›ймнижзлед‚ЊсSохуфтрСпžщцшчP&yэъьы€Г0єѓїtјBљіђ№tёBѕ‰яюŸыЦџ ’ — ъ ъ чдўќ§ћњеu‚ЪЂ! #$`"€4+*B.t-B/B)‰'(,&%ЕŽ3›042 1=88Ђ5E976—Ч@Ђ?DB#C><==A;:аDЧHEJIGFhPROM NQLKМрWЦVTUXSВф_Ц^bac][\`ZYЂхgKdhfeиŠn›qџpm kloxjџiЁлuЦrtsЇ$yvzxwеЏ€ƒ‚}~|{5 ‡„†…PЏ‹ˆŒІŠ‰ћj“’•–‘”?ŽЂPskš—™˜€iЇžS›F ЁџŸœYEЈ"ЇЋ#ЌyЊCІCЄ=ЅЉЃЂ$УВДЕЖЗГИЙБЏ@А@ГЎ ­FЎПSТУСОМНtРЛКЏЩЫќЬЭ ЮЯаШЦЧЪХœФзжрйклuм‚нопегдивбP–‡цшrщъОх}уrфчтсЋС›ёS№ѓ•ѕ•єіїјяэюђьыPћƒњљ–гžSўЩџ§ќ0Р S "##C C = ющ~іЉџnУ-Q$&'#!"% 1№.-24013№,*+/)(I2;Ђ:DA@B?==>C9778<<B6C5PЅ3HEIGFj3MJLЂK2QЂNPO 2UЂRT Se[^]Z XY\WVмbЦ_a`OihnmoЁl-kpgefjjd@c9PtqusrАPy›vxw­У}Ђz|#{PЙmƒ…†‚€\І„~^vŠЂ‡‰‰ˆT‘žŸ Ё”-•–I—˜™“ВšЗ›ŒœŒУŽџ’rŒ‹QЇІЙКЛЁМ-ЉЊЋ­ЎЏВГЗДŒЕŒБУВИЗџАrЌЖЅЃЄЈЂDЁrSРНСІПОpЧЪЩЫJЦФХШУ~Т€ЅUбдBгаЮЯвЭЬ TкрAм_н_опйзйилжеКсцЦшщхуфчтсPІсэъђёюя№ьы-LўјњћїѕіљєѓзŠ› ўџx§ќ7‹G  …   Z"cyЂшЁ„ƒ rOН$!#"PЫ…*,-‚.)}'r(+&}%§О548<@Ё;џ9>:A=7Q?U3142@6­0/л‰G›IŽJF DEHxCŽB€уБQSPWWYUVSWTXOMNъRяLіKн`_‡jlbehfg@m@cd iokОnО^\]a[Z‹ШsЂptrqP}sz|}~y\wІx{v\uPЩ@…„‡ƒ‚†€І@z{ŒŠ‹}މˆћ”Ђ‘šœC•–›™’—Ё˜“’P9yЂЄЅЁŸ ЃžP ^ЉІЌ­ЊЋЈЇЄчГЦЕЖВАБДЏЎY,юНМСПУРТ№ФЛjЙКОИЗНTЪЭ‰ЬtЮBЩЧШЫBЦ‰Х…4­вSЯбаљйичуxфтxсхц…шxрпоьъщмлнызеFжїкГдг˜ђѓлђјћњљіѕїёя№’є—юъэdѓџќў§xЊ            R W ^ _ d   џ r          , ю% $ ' + 3 C ›0 7 < 1 8 E Q9 U, - 4. @/ ­4 > ? @ A ( 6 : B = А; ) * 5 кD 2 # ! к" &   hK N 7O P M S }Q R /T /J /H /I L 'G F @t[ Z o {i b a }` g q ^ ] h {p f _ n m l k џj {d c e Y W X \ рV U V.x w  | ‚ { z € ~ }  v Еt Кu Уy Фs Шr PЉˆ S‹ #Š ‡ … † ‰ С„ oƒ -w. Œ Ž  ї•• ›— ˜ ™ š › œ ~ž ^Ÿ  ” ’ Й“ Р– Ц‘ Ц ѓИЅ Ї Ј Њ Љ Є ЉЂ Ѓ І ›Ё   ~ИЎ Ћ ­ Ќ (В Џ VБ А g‡Ж ›Г Е Д +шН М П Ц Ф ГУ Р Т С jХ Л Й №К О И  З BGŸЭ SЬ Я е д г а Щв б Ы џЩ nЪ Ю Ш Ч р€л ›н @о п р с т xу ф х ю ё џя № Рщ Ръ ы †ч ш ь э ц к и й м з Jж €ЕQї љ њ § ќ ў ћ і є ѕ tј Bѓ ђ ‘' Kџ   kЎ  8  PhR    РD        |СD  ї      C   / " ) 4 0 1 - џ3 {2 * {& $ . 5 % (  џ6 {! , '  + #  х r= < ? ; J9 : > 8 7 PˆrF E K J I \L ІH D B \C ІG A @ Y$эP M Q O N ОпW ЦZ [ Y V T U X S R Л&] K^ _ \ ?9e Ђi g h d b c f qa ›` -Np o u s t r n l m q k j ˜&y Kv x w AэБ~ S} { |  z Mџ… ‰ ‡ ˆ „ ‚ ƒ †  € „kИ S‘ Ž Œ  D H‹ mŠ ,<ѕ— ™ – ” • ˜ “ №’ aw Ђš ž œ › ZЉЃ SЂ o  Ё Є Ÿ шxЊ Ђ­ Ќ Љ Ї Ј Ћ І чЅ :MБ Ў А Џ +яЕ ЂВ Ж Д Г џСМ О Л Й К ЁН џИ З ЊгТ ЂП У С KР XЩ Ь Ы Ш ›Ц Ч Ъ Х Ф чyв Ђд б Я а г Ю Э €*yи е tз ж Xо р н л м Ёп -к й @MYф с џу т †”щ ›ш ц ч ъ х Й ь э ю ы К:№ ё ђ я €Жћє і ѕ ѓ ,;ѕ§ ќ џ ћ љ њ ў №ј ї m  t  7      й  R W ^ _ _w Ђ к   |  l  )     С Pѕ"  # !  €ЋF) + ( t& B' * % t$ ЭІ2 1 5 6 4 0 `. / 3 - , €<Ї: 7 C џD {< B= ‰A B ; џ@ {? > {9 8 F6J ЂL FI G H K F E П[S R U V Q O P T N M @\ ` ^ {_ [ Y Z ] X W  сf h e c d g b a hl лi k j €ЎIr t Bu v tq o p s tn Bm Х| ~ # { y Rz } ~x ђw д­† … ˆ ‰ Š „ ‚ ƒ ‡  € №Ж ’ “   Ž Љ‘ Œ ‹ ј— Ђ” ˜ ™ – • *чŸ Ё Ђ Ѓ ž Гœ    › nš -яЉ Ћ Ќ ­ Ј І Ї №Њ Ѕ jЄ f~Б ЂЎ "А Џ 3BЗ ЂЙ К  Ж ‘Д Е И %Г В ТПН SМ О #Л €ž?Х Ф Ь Ш Э Щ Ч Ы Ъ У С Т tЦ BР ‰П |šлб Ю к м в г Fе їз й Fл їи Гд ж Fа їЯ Qkр н }т с у п о €АNщ ы ‰ь tш Bц ч ъ х tф Ђъђ Цє ѕ ё я № ѓ ю #э |Œžљ і ќ њ ћ їј Гї !I  ў }џ в ё§ ыГ   ~ і    PЎ‡    О } r   Y        I |a—" $ !   # x  :;* Ђ, ) ' ( + & % Єж0 у- / . 2C6 Ђ8 5  3 ‘4 7 2 %1 €)8< 9 BA > = @ ? ; : х‹G J I F xD }E rH C B PoN K O \M ІL €pES P ‰R BQ еЫY Ђ\ [ X V ,W Z U T Зтb Цd Va _ ` c ^ ] wj l i g h k f e €SЏp Sm s t q r o tn "Hz | y }w вx { v u ‰ О‚ S„  # #€ ƒ ~ F} Œ§‹ ЂŠ  Ž C‰ ‡ ˆ Œ † … Чк” Ц– “ ‘ ’ ,•   љЈЅœ Sž › ™ џš  ˜ — \Ђ Ÿ Ї Є Ѕ Ј І Ѓ Ё   PRvЎ Б А ­ Ћ Ќ Џ Њ Љ †уЕ ЦВ Д Г 3JЙ Ж К }И вЗ H4С ЂР Ф У П Н О =Т М Л ”­Ъ SЭ Ь Щ Ч Ш Ы tЦ Х €Ўб Ю а Я Ш›з к й ж Nд е `и г в жр у т п н о uс ‚м ƒл |D•щ ь Гы ш Fц ч xъ х ф јМђ є ё я № Ѓѓ ю э ‚™Гј Sѕ ћ љ њ ї і PМЎ§ џ ў ‚ќ -Kќ           PЦ@      \ І €‡/  t џ { B ‰   €ИП! % $ #    "   €‰0, + ‰/ t1 B. B0 ‰2 * ( ) - t' ‰& €16 3 5 t4 Gю: Ц7 -; < 9 8 €ƒ2@ = ? t> |4”F M їI K FJ H xL N E C D G B A В—R ›O S T Q P CБЃZ S\ ] _ џ^ Y W X [ V U eЄc ` Db a P–Єg d xf e ‹…Їm Sp їo l џj k n i h Lћt q s r #Gz | ~ }} в y w x ‰{ v u P—Hƒ € І‚  ~ Š ‰ ‘  ) Ž Œ  ’ Сˆ † t‡ E‹ K… Q„ o– “ — ˜ • ” Kž   Ё Ѓ ŠЂ Ё -› œ гŸ š ™ PKЇ Є І Ѕ LЋ Ј Њ Љ IБ Д oГ }А вЎ ЁЏ -В ­ Ќ ГИ ›Е З Ж аЯО ЂР Т С У ,Н Л М П К Й ]аЧ ЂФ Ц Х зЭ Я …Ь Ъ …Ы Ю uЩ ‚Ш щВд г б в е а …уй Цж Vк и з Ър Џу ф т п ,н о с м л тъ Ђь щ ч ш ы ц х  Фђ ѕ  є ё я № uѓ ‚ю ёэ PAwќ ћ џ ў њ ј љ § ї і |›   їГ  F0тi" !}////Xд&Ђ#'(%$€ЖR/.12-+,0*)ЯЇ98<F;=7`56:43y0A>—@?мxH›G6MJ LKNxFŽDMEVICџB€{ROSTtVUQPЌcz]\_`baЩ[YZ^XЩWY%fc№gihГedŸРmjnlNkUРrosqpЇ)zЂy~Џ}|xvw{u“tУ?ƒ€O‚„…†”.хЇ‰ˆPІo‘“\”І\ІŽ’\ŒІ‹PVo˜•—–ЃшŸЦžІЈЁЅЄЉ#ЂЇЃ h›nœt ušz™`Ф­ЊЌЋoУДЂГЖ ИЗCВCА=БЕЏЎPЕМЙЛКxФРНПОяшЧЦЭ~ЮіЩЬЉЫЪХУџФnШ~Т…С5@еЂдк й‘изг%б вжаЯPрAнмолŠ*тпуср€™6щьtышцBч‰ъхф€уЉяSюŽ№э6?їЂіљ њ‘ѕѓє%јpђЂё@@ўћџœ§Iќv  l{}  џ ўi€гЁ%S'–$"#&!Щ PIЁ+(12,-.0/*)fЦ98;<756:43!Ђ@Ђ=AЏB?>”ШЂISHїKLGEFJDCPЋЃPMRQO\NŠХYЂX[\#WCUCV=ZџTpSнАcbehgfa_`d^W]ЯаoЂnvut,srqmklpхjъi‹›І}S|-{џyz~xwƒЦ˜…S‡‰ˆ„D‚Hƒm†€‡тЦŠŒ‹>[‘Žйѓ•’–”“q š—™˜$П SЂйŸ##žЁœ›зЗЉЈЋЌ­ЇЉЅІЊ†ЄЃ€ЌGГЕВtАBБДtЏBЎUЛОНКИЁЙ-МЗЖlТПСРPУ]ШЪІЧХЦЩФУZЮЫЭЬ’UвЯмtйBтнголрпсидекзжба”ішлыъчхцщфуEСёSєѓ#№yюCяCђ=эь”ТјѕїFі“іўл§ћќџњWљPЈї\ьv Ђ  ])V  цВC7!Ђ#F$ "ўо†*›-*,)'(+x&%:1Ђ.0/PФl79645832'џ=:KFCGUVLM>NOEIKJQRQSXPQTџDrE?@HBCA<;C&\S^ѕ[•Y•Z]XWРЩdЂfcabe`=_њjЂgkihPбfrqvІutpnosm\l€ЗxztywЁщЦ€ƒ„…}~#‚#| {ЌbыŒ‹ЩŽŠˆ‰Щ‡Щ†Џ””›–“‘’•@qуœ{Ÿ{ЃЄЅ} ЂЁ›™šž˜—2сЉІЈЇъВЏБЎЌ­АЋЊ’їИЂЗ‰КЛМЖДЕЙГВB РSНПОDЏФSСХ•У•Т€ЉAЫпЯBЮ‰ЭкйежзtиBмлоtнBв‰дгбџа{ЪШЩЬЧЦyцхэьыщшъфтучс›рTєЂѓOїіђ№ёѕяю%Eў§Ђќњћџљј•FІtB;Ы    •ѕл BПЌS- e"%)$!  #B?+-.*(),'Щ&И 021/€Ž38;B:t7B5B6‰943|uЬAEГCDFїGГ@>?B=<mВKHMLJJI@nРTSW{XVR}PQUON<\ЂY_ a‘^`]%[Zggijfde}hc2bЫprsom,nqlk€­Gy}{t~B|xvwzuttіЮЂ€‚ўˆЃ†Sƒ…„PТ\ŒŽ‹‰Šˆ‡ЌŽ”‘•–“’/š—œЁŸ ž›™˜>іЈЇЊЌЋІЄЅЉЃЂ|ƒ™ГВЕЗЖїБГЏАДЎ­фиОЂНРТСМКЛПЙИ^ЩШBбЬЯаЮЭЫЧХЦБЪЗФНУп…и›з(клждеxйгв„…сурџо{птнмс(ъ›щюьэшцxчыхф|1’ђяѓёx№Тљќћјії›њѕє Юџўt§œК   B ‰вЬЂ,! хъ№ё"іUџ Й(*,+'%&)$#…йЙ2S467581F/ 0h3.-,К<9=;:d$CFtEB@AD?>|Б%JGIH|,ЙNKMLДROCQPЊFXZWtUBVYTSЮ™`›b_]^a\[ЌJћihkmponlgefjdcаЉv{x|z`~y€}ustЅwЋrЋq拆›ŠŒ ˆ‹x‰‘Ž…ƒ—„ž‡ž‚ЃвЋ—š™–”•`˜“’@{ќ ЂŸ{žЁ}œ›EhІЃЇЅ Є€‹2­АЏtЌBЊBЋ‰ЎЉЈ8ђЗЖКЙЛЕГ№ДИВБ#јПМЦТУФХСРОНS1ЬЂЮЫЩЪЭШЧхвЦЯидежзг#б–а 0?Ђƒ#"й#"& КышЂй€‰Ђ‰Ђ‰Ђ‰Ђ‰ЂВЃ "%К"9 BЏ.(. "%КПBЏ(. "%КE BЏ)@(. "%К# BЏъ(. "%К%N BЏ‚џ(. "%КЭ BЏdq(. "%Кх BЏ.(. "%КSžBЏf§(. "%КЭ BЏщ (. "%КвЭ BЏЁ(. "%КL BЏЕc(. "%Кі BЏl(. "%Кœc BЏџь(. "%КU8 BЏЇM(. "%КЌ№BЏЄт(. "%К…Ѓ BЏІ*(. "%КJіBЏW.(. "%КœœBЏ(. "%К ЊBЏx—(. "%КЮ BЏ:"(. "%КYС BЏ~(. "%Кж] BЏm`(. "%Кш№BЏ‡м(. "%К0I BЏ'”(. "%КиЅBЏ3ž(. "%К5 BЏK“(. "%К!рBЏНд(. "%КB0 BЏУЏ(. "%Кх) BЏJ(. "%КqВBЏ№!(. "%КСBЏ^+(. "%К‡н BЏ(. "%КJm BЏУ(. "%КЏ BЏ"Ќ(. "%К.) BЏu&(. "%К BЏi(. "%КУР BЏR5(. "%К" BЏПз(. "%КлЦBЏм(. "%К8 BЏц9(. "%КіПBЏ˜Ж(. "%КрЈBЏзЇ(. "%КVгBЏzu(. "%К/Ѓ BЏVL(. ƒКЬжC›й€—зІиƒйќиІ*ёзLи*к‘к№!Эй 0?Ђƒ#"й#"& КДP Ђй€ВЃ‰Ђ ƒК5š C›\ 5 ƒйќиІ*Є э №!  ƒК"Ћ C› 0?Ђƒ#"й#"& К~ Ђй€F‘ ВЃ 0?Ђƒ#"й#"& КP Ђй€ВЃ 0?Ђƒ#"й#"& Кœn Ђй€нћyФ 0?Ђƒ#"й#"& КжщЂй€yФ 0?Ђƒ#"й#"& К˜ц Ђй€ЦыВЃ ƒКИ C› ƒКsОC›`ќЭХ 'Ц бУ 9Ф ЕctЦ #Ч І*Ф ЭЦ kХ №!R5рФ VL 0?Ђƒ#"й#"& К8p Ђй€кp П Ккp ВЃ‚џЅ"‚џч1 ƒК8œC›№! 0?Ђƒ#"й#"& К‰НЂй€sО+О К+ОВЃ.Ѕ".ч1 0?Ђƒ#"й#"& КЛ„ Ђй€ВЃ "%К4› BЏ(. 0?Ђƒ#"й#"& Крt Ђй€Ъ& <СФL  0?Ђƒ#"й#"& КЄu Ђй€Ъ&  ƒК<СC› ƒКФL C› ƒКž C›О  Ё ˆŸ йŸ • pЁ аž d  +Ђ ЩЁ Жђ0Ÿ  0?Ђƒ#"й#"& Кž’ Ђй€Sž ƒ#"й#"& КпрЂй€ ƒКl" C›2#  0?Ђƒ#"й#"& Кgz Ђй€ВЃ45 `? ќВќВ‰Ђ‰ЂqВў ВЃђЅВЃ`?  ƒК45 C›`ќЕcVL ƒКШ C›I  0?Ђƒ#"й#"& КY‘ Ђй€‰Ђ‰ЂqВ‰Ђ ƒКŒ C›э)" зЇ 1‘(Ђ(Кш™ п­О 1О Ђ(О ‘( ƒКЙ C›зЇК oК  ƒК, C›ы, э)”- зЇ 0?Ђƒ#"й#"& К‹i Ђй€4› ВЃ`?  ƒК4^ C›Ф` Yc ;b о_ Дa т^ 1a ёc Z` ~d Хb `_ Ue іd  ƒКі C› 0?Ђƒ#"й#"& КЩг Ђй€’Ќ`?  0?Ђƒ#"й#"& К™ Ђй€ш™ `?  0?Ђƒ#"й#"& Кy Ђй€’Ќ 0?Ђƒ#"й#"& К Ђй€’Ќ`?  ƒКŒM C› ƒКЋ- C› 0?Ђƒ#"й#"& КШ> Ђй€Ј? `?  ƒКеКC› 0?Ђƒ#"й#"& К‘5 Ђй€п­`?  0?Ђƒ#"й#"& КАЧ Ђй€’Ќ`?  0?Ђƒ#"й#"& Кф Ђй€ВЃВЃ 0?Ђƒ#"й#"& К@t Ђй€нћп­ 0?Ђƒ#"й#"& К_ Ђй€ВЃВЃВЃВЃВЃВЃВЃ 0?Ђƒ#"й#"& К~Ю Ђй€ІЯ ВЃВЃВЃВЃ н 0?Ђƒ#"й#"& КІЯ Ђй€,; ВЃ "%К,; BЏЁИ(. 0?Ђƒ#"й#"& К“ Ђй€ВЃВЃВЃ ƒК нC›ћоAо "%КЬљBЏ,!(. 0?Ђƒ#"й#"& КІхЂй€ВЃВЃ "%К—} BЏИ)(. 0?Ђƒ#"й#"& К– Ђй€< ВЃ ƒК< C›:> ж> Ё= \МІ*№! 0?Ђƒ#"й#"& К+† Ђй€п­cу 0?Ђƒ#"й#"& К‘ Ђй€Њуcу 0?Ђƒ#"й#"& КOб Ђй€Дcу 0?Ђƒ#"й#"& КяŠ Ђй€wЛВЃ ƒКwЛC›РМ)Н\МІ*№! 0?Ђƒ#"й#"& К^q Ђй€п­cу 0?Ђƒ#"й#"& Кхх Ђй€Њуcу ƒКcуC›Щџ№! ƒК“ C›v”  ƒКЇўC›`ќЕcЄ§#м ш§bм R§­м №!јќVL ƒКщЧC›€Ш 0?Ђƒ#"й#"& КЬлЂй€‰Ђxм 0?Ђƒ#"й#"& КxмЂй€‰Ђ‰Ђ ƒКs+ C›ь+  0?Ђƒ#"й#"& Кv› Ђй€в›  ƒКв› C›Ъ—  ƒКуК C›юЛ —М  0?Ђƒ#"й#"& КCd Ђй€ВЃВЃ 0?Ђƒ#"й#"& К.ёЂй€ВЃ ƒКОЌC›;­ 0?Ђƒ#"й#"& Кx Ђй€Ъ ƒКЪC›єЪ ƒК$ C›C ј  0?Ђƒ#"й#"& Кk Ђй€ВЃВЃ 0?Ђƒ#"й#"& КхŽ Ђй€6л ƒКНЫC›о! Жђ ƒКёёC›Жђ 0?Ђƒ#"й#"& КВ Ђй€%Ці |} 0?Ђƒ#"й#"& ККчЂй€œn є  ƒКЇ C› 0?Ђƒ#"й#"& КjПЂй€іП 0?Ђƒ#"й#"& К8З Ђй€Ъ& шЙ  0?Ђƒ#"й#"& КTG Ђй€Ъ&  0?Ђƒ#"й#"& КQU Ђй€є Ъ&  ƒКє C› 0?Ђƒ#"й#"& К] Ђй€Ъ&  ƒКЙ C› ƒК)U C›ƒX кX • €Y 'X ”)Y W ЖђiЯ3&bW ™"ї• 0?Ђƒ#"й#"& КjіЂй€ш№  0?Ђƒ#"й#"& КБСЂй€+Т  ƒК+ТC› 0?Ђƒ#"й#"& КоіЂй€aї  ƒКaїC› ƒ#"й#"& Кіv Ђй€ 0?Ђƒ#"й#"& Кx) Ђй€х)  0?Ђƒ#"й#"& КВ Ђй€х)  0?Ђƒ#"й#"& Кd7 Ђй€х) 8  0?Ђƒ#"й#"& К!† Ђй€u: lЎ ƒКu: C› 0?Ђƒ#"й#"& Кˆl Ђй€х)  ƒКїџC›Њ#г - • м @  v x]% § Y Жђ@Œ˜ŸЎŸИ  !тЄ 0?Ђƒ#"й#"& К1Ђй€  0?Ђƒ#"й#"& К­ЩЂй€  ƒКPњC›ћ 0?Ђƒ#"й#"& КŸf Ђй€%N х ‰Ђ К ВЃџч1џЅ" 0?Ђƒ#"й#"& К”щЂй€yФ‰ЂЌы 0?Ђƒ#"й#"& КЌыЂй€yФ 0?Ђƒ#"й#"& КŸ” Ђй€п­ 0?Ђƒ#"й#"& КЊуЂй€‰Ђ`с аВ ~ї‰Ђ‰ЂВЃ ƒК`с C› 0?Ђƒ#"й#"& КаВ Ђй€‰Ђ 0?Ђƒ#"й#"& К~їЂй€ВЃВЃў  ƒКў C› ƒКДC›3ž 0?Ђƒ#"й#"& КчA Ђй€‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ 0?Ђƒ#"й#"& К‰ Ђй€# Э Jі† нћ  0?Ђƒ#"й#"& КТ0 Ђй€Jі  0?Ђƒ#"й#"& КсE Ђй€НF Jі  ƒКНF C›­Z  ƒК"ЫC›. ƒ#"й#"& КѕЂй€Jі Ђ(1‘(К’Ќп­RYЂ(RY1RY‘( 0?Ђƒ#"й#"& Кme Ђй€’Ќ`?  0?Ђƒ#"й#"& К`? Ђй€ћ   К ВЃiч1iЅ" 0?Ђƒ#"й#"& Кƒ3 Ђй€ВЃ  0?Ђƒ#"й#"& КрЬ Ђй€ВЃВЃВЃВЃВЃ ƒКќВC›4 ц  0?Ђƒ#"й#"& КuР Ђй€YС yФЏ  ƒКЋ< C›№!љ= := c> ™=  0?Ђƒ#"й#"& К, Ђй€п­ВЃ 0?Ђƒ#"й#"& КUдЂй€п­ВЃ 0?Ђƒ#"й#"& КгG Ђй€п­ЬЮKЃВЃ "%КЬЮBЏP=(. ƒКKЃC› 0?Ђƒ#"й#"& КТ\ Ђй€п­п­п­ ƒКX C›џ І* ƒК, C›pЌ№! ‡ Ÿ $  0?Ђƒ#"й#"& Коі Ђй€нћп­)  0?Ђƒ#"й#"& КІ™ Ђй€F‘ Ёи<‰ 0?Ђƒ#"й#"& КЁиЂй€нћп­)  0?Ђƒ#"й#"& К‚' Ђй€нћВЃп­) ( <‰|} 0?Ђƒ#"й#"& К … Ђй€ВЃї…  0?Ђƒ#"й#"& Кї… Ђй€Ъ&  0?Ђƒ#"й#"& К( Ђй€ВЃЪ& ВЃ ƒК’ C›№! 0?Ђƒ#"й#"& КТ Ђй€ВЃВЃ 0?Ђƒ#"й#"& КЙހ鈉Ђ 0?Ђƒ#"й#"& КТʀ鈉Ђ 0?Ђƒ#"й#"& К܀鈉Ђ‰Ђ‰Ђ‰Ђ‰ЂВЃВЃВЃ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰ЂЙЮ 0?Ђƒ#"й#"& КЁЙЂй€И ‰ЂВЃ 0?Ђƒ#"й#"& К ЙЂй€ЁЙjКъЙ‰ЂТК ƒКjКC›ѕ  0?Ђƒ#"й#"& КУ$ Ђй€‘% ВЃ ƒК‘% C› ƒКъЙC› ƒК C› 0?Ђƒ#"й#"& КeF Ђй€Ьж 0?Ђƒ#"й#"& Књ™ Ђй€5š  0?Ђƒ#"й#"& КДћ Ђй€OЉ Й‹ –Ћ Љќ ‰Ђ‰Ђ 0?Ђƒ#"й#"& КOЉ Ђй€‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ 0?Ђƒ#"й#"& КЙ‹ Ђй€‰Ђ‰ЂJm ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ‰Ђ 0?Ђƒ#"й#"& К–Ћ Ђй€ВЃВЃ 0?Ђƒ#"й#"& КЉќ Ђй€Жh  ƒКЖh C›Дi  0?Ђƒ#"й#"& Кr2 Ђй€ВЃВЃ 0?Ђƒ#"й#"& КMђ Ђй€п­луп­ ƒКQј C›Ањ І*љ oљ Фљ њ №! 0?Ђƒ#"й#"& Кœ1 Ђй€ВЃ ƒКwхC›І*ц_цЂцшц№!СЎ  5Pѕ ? њжИ  'kБS№ ? 1ы ў Kў ? <  ВФ  Aу ю ЇТ  Flw›й  KљЗЏ  PКХ№ ? UІБФЇ  Zozђч  _GR1 ? dї  ѓО ? i —ч ? nЛ Ц =ы ? s[f4й  xяњцъ ? }# . A­ ? ‚ншяю ? ‡K V ёп ? Œ_ j Gи  ‘‡ ’ оЅ s –s ~ Н  ›  шЦ   7 B bП  ЅЮйц  ЊЯ к ЃС  ЏЃЎЋ  К# ; AБ  ТМпЛ  ЬzбЏ  ж”ЇDЪ  чiх  №CSцз ? ћ 1 +г  э!рђ ? -[Дв  Ы ф і ? &Цр.Џ  +ДП‚Џ ? 7Њ Ф ЈП  B`x4Р ? KєoР  Y (Jј ? d‘ЈžЅ  i›!Ѕ  tŒ Ѓ ЯЅ  yЂ­ е  ~ЛЪпЄ  ƒ;F<ф ? Š2 Д  “  А ЌЕ  ŸЗ Я lЖ  ЅƒšЇГ  Бс љ  ? М„ › C§ ? Шќ=с  гЏЦуа  оЭфYш ? ш . @х  ѓм ѓ … ? џМ е >И ? B ^ ŠИ  ~ • VН  "ЎЦ<О  )">Jю ? 3N a фЋ ђ 8РЫУ  Ae w ѓР  Lю‘С  Wњ  Тс  ^еёр  g5 G љВ  q;NГ  }Эч№Н ? ‰œ Е Dњ ? •xЗ"Ќ  Ђ % Ащ ? ЋK ] sЊ ? Д_ŠхС  ПLdЁ­ И ЦИдpз  бмѓи ? м8 L щк  уGc ч  яяЌР  єзэIЦ  ŒЄМЦ ? шњБЄ  brмЊ  Те‹З ? оѕWі ? !ЕО™Х  ,h  М  8 $нй  E+EАМ ? O† ™ ы ? TœЇ`Є › ^ЎСB ? cыі<Ї Њ ly‰Зк  qЉД­и  }, D а  ƒ  њ ? ˆ ‚Р  ХаЇ ? šЋЧФІ T Ї‰Ѓ/п  ВЂ Й ЗЩ  ОР к иШ  ЫЮшŠІ O д%о  ојє ? ч,<NЉ  №4`Љ  ѕgzwЈ K 4ЦЉ ˜ “Аг  ж щ ŠЖ  %UhUД  3Dд ? :ћП  ?бсhе  KAYZВ  Q› В юј ? a:[­  jžЎмл  qd€њЩ  v‡—дт  {OZ0з  €Ъе‹р  ‹ЄЛБА  •o‚RЄ  š šЋ В ŸI[0Б ? Ћk…№Ф  Ж\sLА ? ЛшѓЇЃ ? Х№  ѕЖ  Ъ7BgТ  жd }  Њ  р+$Ѓ V э<U Є  ђр№PЧ  ћ,рЇ ф r‰wІ  3>І х EWДб  m … Œв  'Тї ? 1S f ўџ ? 6`kЊ  ;2=~г  D.BЏD``НЖ?DЕЕC›ЉD__”Ё DII|}DџџџџВЃDџџџџп­DЂD‘‘Cєш DЊd­HD44ŠKHD33yb[@D..1HD//І HD--яЎ ѕ@ D#&вЎ D KihHD 11–Џ І@ D++Џ @ D((aЏ @ D**=Џ @ D))Ђ?HDX_?HDёg?@D  ў/?HDѕo?HD  ‚ѕ ?@ Dcѕ ?D§§­?HD1і ?@ D  ъѕ ?@ D  Ѕѕ ?@ D!Хѕ ?@ D"Й @ D"s|zkHD#АА.W@D$ЏЏщИ D'nnEЛ HD(ЉЉєК HD)ЃЃNК HD*——К HD+‘‘$Й HD,oЙ HD-……КЙ HD.‹‹ЅК HD/{(?HD0§ § ю ?HD2ќ ќ U?@D4ї ї œ?HD6ј ј eL?HD7і і c№ ?D:ю ю mM?HD<њ њ  № ?@ D=є є № ?@ D>ѓ ѓ З$?HD?  еS?HDA  њZ?@DC  ДB?HDE  ug?HDF  uў ?@ DF  Zў ?DI  п)?HDK  Дў ?@ DL  ”ў ?@ DM  НHDNэ э 2dHDOы ы ЫФ DRц ц $=HDTь ь юVHDUvvWcHDVttТТ DYooŸHD[uuЇDHD\,HD]Жй D`ќќќEHDb!HDcФФќHDdТТ‡и DgННЦ HDiУУf]?HDjААРc?HDkЎЎ+№ ?DnЉЉN?HDpЏЏ^*HDqyyQ,HDrwwЛа DurrЌ]HDwxx ~HDxQQшrHDyOOш D|JJБOHD~PP,`?HD  ‡/?HD€џ џ U ?Dƒњ њ и`?HD… ж"?HD†Mk?HD‡;є ?DŠ–_?HDŒ ?HDХ Х Ž{?HDŽУ У j ?D‘О О jx?HD“Ф Ф .?HD”ee§U?HD•ccXы ?D˜^^Аj?HDšddA]HD›љљUGHDœїїqй DŸђђ†^HDЁјјF?HDЂ- - <9?HDЃ+ + )ѕ ?DІ& & НK?HDЈ, , šU?HDЉччЎ>?HDЊхх§ш ?D­ррq)?HDЏццН-?HDАU U …s?HDБS S я ?DДN N Џ~?HDЖT T ы(?HDЗi i C&?HDИg g ы ?DЛb b 2?HDНh h џ#HDО‘ ‘ Ё0HDП  aи DТŠ Š ЖIHDФ  hHDХ} } ВgЂHDЦ{ { ђЅ 0DЩv v V8HDЫ| | b/HDЬ  p<HDЭ  ,Н Dа  )eHDв  g6HDгA A   HDд? ? )Ч Dз: : QOHDй@ @ ш0HDкииHDлжжП Dоббє;HDрззнWHDсй й –-HDтз з 3ц Dхв в ŒYHDчи и /SHDш­­wHDщЋЋОС DьІІqHDюЌЌ2+HDя: : #HDё9 9 т#@Dѓ4 4 ŠeHDѕ5 5 ЃHHDі3 3 €О @ Dі+ . _О Dљ& & p{HDћ7 7 ШО @ Dќ1 1 ЅО @ D§0 0 mБ @ D§ФШЂ`HDўоо/8@DџннQБ DППВ HDззвБ HDбб†Б HDЫЫѕ*HDŒŒ.HD‹‹7@D ††дVHD ‡‡lHD ……ЂЛ D}}AvHD‰‰уЛ @ DƒƒРЛ @ D‚‚№@HDІІHГHDЅЅ;h@D  м+ъHDЁЁ№9лHDŸŸтЏ D——’ HD!ЃЃ!А @ D"џЏ B@ D#œœ„Ъ @ D#QHD$hh*@D%gg^Ъ D(  ЁЭ HD)aaKЬ HD*IIЇЪ HD+ЭЫ HD,==‘Ы HD-77тЪ HD.%%Ы HD/++XЫ HD011‰Ь HD1OOIЭ HD2[[Ь HD3CCэЬ HD4UUV"HD5RR­8@D7MM­8@D9LL­8@D;KK&х D>FF?t@D@OO?t@DBPP?t@DDQQS?HDE0 0 ”u?HDG/ / І?@DI* * Z?HDK+ + M?HDL) ) „є ?DO X(?HDQ- - ѕ ?@ DR' ' Њє ?@ DS% % дє ?@ DT& & Џм @ DTѕў{,HDU   @DV–м DY№№Хм HDZEн HD[  „н HD\Хн HD]н HD^ѓ ?@ D^5>Їe?HD_ZZy?@D`YYђђ ?Dc00+ѓ ?HDdAAiѓ ?HDeGGЉѓ ?HDfMMыѓ ?HDgSSXQHDhу у ЙfHDjт т 7y@Dlн н jHHDnо о l1HDoм м шв @ Doг ж Шв DrЮ Ю mWHDtр р г @ Duи и 8г @ Dvй й Xг @ Dwк к 4_?HDxппD;?HDzооє?@D|йй&V?HD~кк+?HDииИі ?@ DЮві ?D‚ЩЩжf?HD„ммї ?@ D…ее8ї ?@ D†жжхі ?@ D‡ддThHDˆОО.Ц D‹ЗЗ§d@DНН§d@DММQ?HDУ У Є&?HD’Т Т Џ5?@D”Н Н n?HD–О О ˆS?HD—М М ъ ?@ D—В Ж №щ ?Dš­ ­ T?HDœР Р Tъ ?@ DЙ Й 4ъ ?@ DžИ И uъ ?@ DŸК К EHD ww.|HDЂvv/@DЄqqџmHDІrrт HDЇppфП @ DЇhkРП DЊcc/HDЌtt Р @ D­mmFР @ DЎnnЊ\?HDЏ!?@DБќќ!?@DГ§§!?@DЕўўfє ?DИїїэD?@DКэD?@DМэD?@DОCHDП''ФHDС&&Аz@DУ!!;CHDХ""яpHDЦ  ћЭ @ DЦмЭ DЩ7DHDЫ$$€Ю @ DЬЃЮ @ DЭ`Ю @ DЮ?Ю @ DЯЮ @ Dаe9?HDбЇЇ‘\?HDгІІъ7?@DеЁЁp~?HDзЂЂ$j?HDи  vј ?@ Dи™›Zј ?Dл””Щ ?HDнЄЄ–ј ?@ DоЎј ?@ DпžžЛM?HDрšš>ш Dу““$@Dх˜˜$@Dч™™ќNвHDшЂ Ђ šJHDъЁ Ё @Dьœ œ ЃFЪHDю  {HDя› › WЅ @ Dя” – 6Ѕ Dђ  ŽHDєŸ Ÿ |Ѕ @ Dѕ˜ ˜ ­Ѕ I@ Dі™ ™ ЉiHDїЌЌф DњЅЅ.@DќЊЊ.@DўЋЋCHDџЩЩ|ц @ DџУЦXц DОО2~@DШШ%HDEE…HDCCњЄ D >>HD DDШэ ?@ D !П.?HD 11ш8?@D 00Џэ ?Dоэ ?HD$$ ю ?HD**u3HDЏ Џ X@DЈ Ј X@DЊ Њ X@DЉ Љ Ћф DЃ Ѓ ‡q@DЌ Ќ ‡q@D ­ ­ ‡q@D"Ў Ў ћuHD#Ю Ю дgHD%Э Э :"@D'Ш Ш ZHD)Щ Щ @oHD*Ч Ч рЕ @ D*П С РЕ D-К К є\HD/Ы Ы Ж @ D0У У KЖ @ D1Х Х .Ж @ D2Ф Ф 8у @ D2‹§AHD3™™­;@D4˜˜у D7††_у HD8’’”#HD9ј ј /:HD;ї ї юX@D=ђ ђ яЌHD?ѓ ѓ оxHD@ё ё бГ @ D@щ ы ЖГ DCф ф 'IHDEѕ ѕ №Г @ DFэ э 6Д @ DGя я Д @ DHю ю ЬP?HDIš š ?I?HDK™ ™ G?@DM” ” ?HDO• • p?HDP“ “ Х ?@ DPŒ Ž Ѓ ?DS‡ ‡ :?HDU— —  ?@ DV‘ ‘ ы ?@ DW  ;?HDX?HDZ†H?@D\  ?HD^  Ђ!?HD_  X§ ?DbџџnE?HDd  ю§ ?@ Dey§ ?@ DfЁ§ ?@ DgЩ§ ?@ Dh&fHDiХХ%3HDkФФГ@DmППT-HDoРРЙ/HDpООiс @ DpЗЙMс DsВВЮtHDuТТ‰с @ DvЛЛЄс @ DwММœ<HDxууHDzтт{'@D|ннiZHD~оо4 HDммб @ Dезѓа D‚аа27HD„рр/б @ D…ййJб @ D†ккЎ?HD‡- - ‰?HD‰, , z ?@D‹' ' /G?HD( ( zD?HDŽ& & Ёш ?@ DŽ " wш ?D‘  :\?HD“* * Яш ?@ D”$ $ ” HD•ђ ђ l-HD—ё ё _@D™ь ь Э$HD›э э 5YHDœы ы Žх @ Dœф ц aх DŸп п ЫzHDЁя я Пх @ DЂш ш эх @ DЃщ щ dl?HDЄд д ђq?HDІг г Л%?@DЈЮ Ю ~|?HDЊЯ Я 1?HDЋЭ Э Щ ?@ DЋФ Ч Ё ?DЎП П ?HDАб б  ?@ DБЪ Ъ ѕ ?@ DВЩ Щ F ?@ DГЫ Ы ;l?HDД] ] dV?HDЖ\ \ ƒ8?@DИW W @x?HDКX X ;n?HDЛV V џ ?@ DЛJ O зў ?DОE E T?HDРZ Z Ыџ ?@ DСT T ™џ ?@ DТS S gџ ?@ DУR R 7џ ?@ DФQ Q †>HDХ” ” G)HDЧ“ “ ‡z@DЩŽ Ž дAHDЫ  ‰fHDЬ  Ёо @ DЬ† ˆ tо DЯ  (THDб‘ ‘ во @ DвŠ Š п @ Dг‹ ‹ ЦaHDдХХ0HDжФФs@DиПП,2HDкРРЁ2HDлОО˜Н @ DлЖЙqН DоББtHDрТТО @ DсММУН @ DтЛЛ‹У @ Dт*-WFHDу==ŠW@Dф<<\У Dч%%Ф HDш66ЗУ HDщ00чb?HDъ` ` '?HDь_ _ 7?@DюZ Z Up?HD№[ [ 9w?HDёY Y hю ?DєQ Q у?HDі] ] ’ю ?@ DїV V Пю ?@ DјW W |oHDљЪЪЅHDњШШ§Ћ ѓD§УУŠtoHDџЩЩхiHDv v ПZHDu u 0@Dp p ’bHDq q Ћ?HDo o У D h h нHD s s <У @ D m m ^HDЁcHDАt@Dўў‘:HDџџmHD§§+С @ Dіј С DёёS HDQС @ DњњmС @ DћћъLHD  е@HD  nm@D! С&HD# ЏsHD$ Рц @ D$  Ђц D'§ § йHD) тц @ D*  ч @ D+  т @ D+нрЂLHD,№№?H@D-яяпс D0ии}т HD1щщ.т HD2ууЉ*HD3F F ќ"HD5E E ѓs@D7@ @ ЕHD9A A hHD:? ? 3р D=8 8 эjHD?C C _р @ D@= = 9sHDAMMжuHDCLLL{@DEGGb>HDGHHмHDHFFГ DK>>З+HDMJJ=Г @ DNCCeГ @ DODDL^HDPцц‚HDRххjf@DTррќ&HDVсс‡;HDWппцЗ @ DWейУЗ DZааѕzHD\уу И @ D]лл`И @ D^ммЋИ @ D_ннл?HD`Д Д Аk?HDbГ Г Q?@DdЎ Ў žP?HDfЏ Џ И,?HDg­ ­ ђ ?@ DgЄ Ї Яё ?DjŸ Ÿ г.?HDlБ Б nђ ?@ DmЊ Њ 7ђ ?@ DnЉ Љ Њђ ?@ DoЋ Ћ ~њ ?@ Do€ˆ‹7?HDpЖЖ‡l?@DqЕЕ[њ ?Dt{{ќ ?HDuЃЃVћ ?HDv——љњ ?HDw‘‘žњ ?HDx‹‹тќ ?HDyЏЏНћ ?HDz}ќ ?HD{ЉЉЅ4їHD|$ $ ѓHD~# # Г{џ@D€  ‹5­HD‚  ]=чHDƒ  fЌ G@ Dƒ  >Ќ @D† 6[щHDˆ! ! ­ )@ D‰  шЌ ћ@ DŠ  МЌ і@ D‹  ’Ќ s@ DŒ  Цr?HD\ \ ЩD?HD[ [ `8?@D‘V V аs?HD“W W I?HD”U U ˜ъ ?D—N N Ы?HD™Y Y Пъ ?@ DšS S д№ ?@ DšgmМ ?HD›‰‰§?@DœˆˆП№ ?DŸbb0ё ?HD ||ц№ ?HDЁpp ё ?HDЂvvUё ?HDЃ‚‚ŒEHDЄcc%?HDІbb|9@DЈ]]ƒvHDЊ^^œoHDЋ\\Т @ DЋTWњС DЎOOlHDА``‡Т @ DБZZ@Т @ DВYYч­ №@ DВРУPXHDГгг D@DДввО­ DЗЛЛZЎ HDИЬЬ Ў HDЙЦЦп%HDКђђћHDМёё@DОььй;HDРээШ4HDСыыЂз @ DСфцƒз DФппx[HDЦяяХз @ DЧшши @ DШщщюB?HDЩK K ?HDЫJ J 8?@DЭE E >E?HDЯF F ”k?HDаD D aї ?Dг; ; Œ`?HDеH H ’ї ?@ DжA A Ії ?@ DзB B zї ?@ Dи@ @ 'л @ DиORю~HDйbbzr@Dкaaл DнJJƒл HDо[[Iл HDпUU%]HDрЮ=HDтmK@DфЬHDцЫ2HDчџџVч @ Dчїљ5ч DъђђHDьЎч @ Dэќќ{ч @ DюћћЪч @ Dя§§žTHD№ььжР @ D№пщЛР DѓккiB@Dѕыыч!HDіЃЃщyHDјЂЂЮy@Dњг1HDќžžШ6HD§œœ{Ц @ D§”–\Ц DWHD  žЦ @ D˜˜Ч @ DššЩЦ @ D™™]?HDљљ0ў ?@ D№іў ?D ыы^%?@D јјБЄ 4?@D єѕ|@HD qqЄ6@DkkЄ6@DjjЄ6@Dllzф DeeэG@DppэG@DooэG@DnnlnHDддз{HDггb@D ЮЮЊXHD"ЯЯ+HD#ЭЭ<З D&ХХOWHD(ббІЗ @ D)ЫЫ]З @ D*ЪЪ8э ?@ D*цъл_?HD+єє\s?@D,ѓѓэ ?D/сс\э ?HD0ээP?HD1ННmі ?D4ИИѕ{HD5~ ~ ZaHD7} } P@D9x x coHD;y y +iHD<w w ЧХ @ D<p r ЊХ D?k k RHDA{ { Ц @ DBu u шХ @ DCt t –pHDD##ИVHDF""е9@DHsyHDJъ6HDK:М @ DKМ DN™HDP  ЮМ @ DQМ @ DR]М @ DSsHDTDD 4HDVCC0.@DX>>{pHDZ??t_HD[==к @ D[36№й D^..lHD`AA2к @ Da88qк @ Db::Rк @ Dc99”к @ Dd;;ou?HDe˜ ˜ SD?HDg— — 8%?@Di’ ’ Пi?HDk“ “ fw?HDl‘ ‘ Šь ?Do‰ ‰ v?HDq• • пь ?@ Dr  Дь ?@ DsŽ Ž Зu?HDtІІх?HDuЄЄы ?DxŸŸm?HDzЅЅ > „RHDА< < ни @ DА4 6 Пи DГ/ / Ф)HDЕ@ @ Rй @ DЖ: : џи @ DЗ8 8 й @ DИ9 9 `а @ DИ  Y@HDЙ  pU@DК  8а DН  …а HDО  ёI?HDПŸŸ(њ ?@ DП˜œњ ?DТ““"?@DФžža\HDХЯЯ‘Р DШШШт<@DЪЮЮт<@DЬЭЭ2?HDЭЦЦZ?HDЯХХЊ#?@DбРРэS?HDгССЭJ?HDдППЯы ?@ DдГИ­ы ?DзЎЎ-^?HDйУУь ?@ DкЛЛѕы ?@ DлКК:ь ?@ DмММ_ь ?@ DнННзqHDоЂЂШHDрЁЁЗC@DтœœŽyHDфH#HDх››јІ @ Dх‘”иІ DшŒŒj;HDъŸŸЃЇ @ Dы™™jЇ @ Dь˜˜Ї @ Dэ––JЇ ›@ Dю——tAHDяИ И љwHDёЗ З "J@DѓВ В ГqHDѕГ Г кnHDіБ Б sп @ DіЊ Ќ Kп DљЅ Ѕ 0HDћЕ Е Шп @ DќЏ Џ Ÿп @ D§Ў Ў ДwHDўй й [HDи и p.@Dг г ЊyHDд д Ј1HDв в Пу @ DШ Ь —у DУ У ЁrHD ж ж ф @ D Я Я ыу @ D Ю Ю Iф @ D а а Љ7HDччВ9HDцц\J@Dссr HDтт5 HDррЩ @ DжйђШ Dббt$HDффгЩ @ DооŽЩ @ DннBЩ @ DллhЩ @ DммзHD$$Г<@D!Г<@D#Г<@D%ЁІ 9D(+6:@D*##+6@D,!!+6@D.""цUHD/tXHD1› @D3  У|HD5  NKHD6  $о D9E*HD;@о @ D<Vо @ D=  }?HD>;;ЧH?@D@66ЧH?@DB44ЧH?@DD55уљ ?DG//щ?@DI99щ?@DK::щ?@DM88эЮ @ DM<Cл&HDN__}@DO^^ЧЮ DR77 Я HDSRRЯ HDTFFXЯ HDULLшЯ HDVXX№vHDWyyб @ DWovhб DZjjjh@D\xxГ3!HD]33NmQHD_22э,б@Da--“gBHDc..и/HDd,,БЈ Q@ DdŽЈ Dgk"-HDi00ВЊ  @ Dj))Љ Њ@ Dk""Њ ‘@ Dl&&ёЊ  @ Dm**иЈ Ќ@ Dn!!FЊ 4@ Do''—Љ I@ Dp$$рЉ њ@ Dq%%hЉ ф@ Dr##|Њ @ Ds((itHDt’’Q5HDv‘‘О}@DxŒŒРFHDz pHD{‹‹bА CD~„„ЪGHD€ˆА @ D‰‰ЊhHD‚ш ш ЮpHD„ч ч IB@D†т т ZrHDˆу у 8HD‰с с Шг DŒй й ZHDŽх х д @ Dп п ьг @ Dо о Ђ|HD‘gg!HD“ffЬ @D•aaЛWHD—bbVHD˜``ЄЖ D›XXбMHDdd З @ Dž^^ЪЖ @ DŸ]]SAHD œœ -HDЂ››зw@DЄ––ЂHDІ——ѕHDЇ•••Д @ DЇ‡oД DЊ‚‚ЛxHDЌ™™яД @ D­ПД @ DЎSЕ @ DЏ’’!Е @ DА‘‘…Е @ DБ““Xя ?@ DБ(!?HDВА?@DГ3я ?DЖўўzя ?HDЗ  Дя ?HDИ85HDЙррBП @ DЙйн$П DМддN+@DОппK7HDПXXCjHDСWWЫ@DУRR4mHDХSSЏ:HDЦQQ˜е @ DЦIKzе DЩDDсHDЫUUће @ DЬOOКе @ DЭMMре @ DЮNNžВ @ DЮЃ Ї ѕ+HDЯБ Б ќ?@DаА А vВ Dгž ž УВ HDдЊ Њ M8?HDе99пk?HDз88!Y?@Dй33$?HDл44§Q?HDм22љ ?@ Dм"(њј ?DпИJ?HDс66wљ ?@ Dт--Џљ ?@ Dу//љ ?@ Dф..Щљ ?@ Dх00`љ ?@ Dц,,.љ ?@ Dч**Hљ ?@ Dш++}HDщ­­fq$@DыЈЈfqћ@DэІІfqr@DяЇЇ…­ DDђЁЁ,r&@DєЊЊ,r&@DіЌЌ,r2@DјЋЋм @ Dјlo.MHDљъc@Dњ~~ял D§ggUм HDўxx*м HDџrrA4HD––&Ъ @ D“ Ъ DŠŠсl@D••нHDYYљ%HDWWыт D RRа:HD XXјOHD дд‹3HDввJз DЭЭSNHDггSyHDКК•NHDЙЙ[P@DДДМHDЕЕ”[HDГГЩр @ DЌЎЄр DЇЇxHD ЗЗђр @ D!ААс @ D"ББQSHD#ъHD%€€Э(@D'{{АpHD)||ц^HD*zzЧА D-rr#gHD/~~щА @ D0ww Б @ D1xx|:HD2  єМ D5;L@D7  ;L@D9  гHD:ZZЦЋ @ D:QWЊЋ хD=LL cQ@D?YYь=?HD@„„€+?HDBƒƒv?@DD~~KV?HDFP?HDG}}@щ ?@ DGsw#щ ?DJnnжv?HDLaщ ?@ DMyyŒщ ?@ DNzzЫщ ?@ DO{{YHDPrr9FHDRqq:c@DTll;(HDVmm HDWkk&Х @ DWdfХ DZ__хHD\ooqХ @ D]iiKХ @ D^hhsQ?HD_ђђЦL?HD`№№Ьј ?Dcыыь5?HDeёёЩ?HDf  ~J?HDh  Ћm?@Djќ ќ "/?HDl§ § |P?HDmћ ћ xё ?Dpѓ ѓ _?HDrџ џ Жё ?@ Dsљ љ —ё ?@ Dtј ј HDuAAа*HDv??Ф Dy::OHD{@@ˆ~HD|| | eiHD~{ { C@D€v v zHD‚w w §_HDƒu u ‰д @ Dƒl o ]д D†g g K$HDˆy y ъд @ D‰r r Йд @ DŠq q 8е @ D‹s s Д(HDŒ**ŽiHDŽ))nS@D$$‹"HD’%%“wHD“##Цф D–SEHD˜''фф @ D™  ўф @ Dš!!j^›HD›TT„L›HDSSЎ›@DŸNNX›HDЁOOl}›HDЂMMZЃ @ DЂDF9Ѓ DЅ??le›HDЇQQ1Є ›@ DЈKKЃ @ DЉHHКЃ @ DЊIIрЃ @ DЋJJtHDЌяяeЋ @ DЌшь2Ћ фDЏуушaл@DБюю~Ч @ DБ (oHDВ++s@DГ**aЧ DЖчЧ HDЗ6Ш HDИ˜Ч HDЙШ HDК$$‰6SHDЛˆˆE>OHDН‡‡JН@DП‚‚ :HDСƒƒ%#HDТЈ @ DТz|єЇ DХuu TыHDЧ……8Ј Ў@ DШ~~XЈ @ DЩЅRHDЪ==(и DЭ66ПR@DЯ;;ПR@Dб<<CR2HDвVVA3HDдUU‡@DжPPєMžHDиQQ\vЎHDйOO*І ЏDмHH^IHDоSSNІ Ї@ DпMMХHDр„ „ @HDтƒ ƒ Ъ8@Dф~ ~ qjHDц  ДHDч} } ьб @ Dчu w Ъб Dъp p нHDь  9в @ Dэz z в @ Dюy y aв @ Dя{ { Nж @ Dя‰ŒщPHD№œœ v@Dё››ж Dє„„Шж HDѕ••ж HDіЩ0?HDїe e і|?HDљd d ?@Dћ_ _ j?HD§` ` 'K?HDў^ ^ кї ?DV V Ы5?HDb b 'ј ?@ D\ \ ўї ?@ D[ [ ‰]?HDjjв??HDhh ?D ccШ?HD iiж>HD <<pHD::щТ D55"HD;;AHD--eY@D''eY@D&&eY@D((‘г D!!нY@D++нY@D!**нY@D#,,BЏ4@D#РСBЏ4@D#ЮЯBЏ4?@D#_ ` BЏ4@D#ЃЄBЏ4@D#lmBЏ4?@D#[\BЏ4?@D#шщBЏ4@D#23BЏ4Њ@D#s t BЏ4?@D#`aBЏ4@D# BЏ4@D#78BЏ4@D#opBЏ4?@D#ІЇBЏ4@D#ЪЫBЏ4@D#‡ ˆ BЏ4@D#у ф BЏ4?@D#ноBЏ4@D#КЛBЏ4@D#ЉЊBЏ4?@D## $ BЏ4@D#Я а BЏ4@D#љњBЏ4@D#7 8 BЏ4?@D# BЏ4?@D#œBЏ4?@D#Л М BЏ4@D#OPBЏ4@D#GHBЏ4@D#я№BЏ4?@D#K L BЏ4?@D#ї ј BЏ4@D#;<НЖ4?@D#ЕЖC›4@D#GHC›4@D#deC›4?@D#опC›4@D#C›4?@D#-.C›4@D#C›4@D#45C›4@D#ƒ„C›4?@D#ћќC›4@D#  C›4?@D#_`C›4?@D#xyC›4@D#‚C›4@D#› œ C›4@D#klC›4@D#"#C›4@D#эюC›4?@D#C›4 @D#ИЙC›4@D#МНC›4@D#еж”Ё4@D#gh”Ё4 @D#IJ”Ё4ž@D#рс”Ё4@D#ЛМ”Ё4@D#‡ˆ”Ё4?@D#шщ”Ё4@D#зи”Ё4?@D#‘”Ё4@D#бв|}4?@D#ыь|}4@D#ЂЃВЃ4@D#34ВЃ4@D#‘ВЃ4@D#ДЕВЃ4@D#ХЦВЃ4@D#п­4@D#п­4@D#bcп­4@D#CDп­4?@D#yzп­4@D#п­4?@D#,-Ђ4?@D#  Ђ4@D#З И Ђ4@D#юяЂ4@D#UVЂ4@D#LMЂ4?@D#8 9 Ђ4@D#e f Ђ4?@D#S T Ђ4?@D#ЦЧЂ4@D#\]Ђ4?@D#њћЂ4@D#h i Ђ4?@D#B C Ђ4?@D#‘’Ђ4@D#ŒЂ4?@D#  Ђ4@D#ЮЯЂ4@D#€Ђ4@D#с т Ђ4@D#;<Ђ4@D#Р С Ђ4@D#  Ђ4?@D#œ  Ђ4?@D#№ ё Ђ4"@D#Œ  Ђ4@D#`aЂ4•@D# Ђ4?@D#ы ь Ђ4@D#m n Ђ4@D#Ы Ь Ђ4@@D#Ђ4›@D#ЎЏЂ4?@D#Ђ4?@D#N O Ђ4@D#ж з Ђ4@D#ТУЂ4@D#d e Ђ4?@D#† ‡ Ђ4@D#ЭЮЂ4@D#‰ŠЂ4@D#ЏАЂ4?@D#ЋЌЂ4@D#ABЂ4?@D#K L Ђ4?@D#„ … Ђ4@D#мнЂ4@D## $ Ђ4?@D#Њ Ћ Ђ4?@D#klЂ4@D#opЂ4$@D#EFЂ4@D#, - Ђ4@D#z{Ђ4?@D#  Ђ4@D#  Ђ4@D#<=Ђ4@D#rsЂ4@D#+,Ђ4@D#ЄЅЂ4@D#я№Ђ4@D#‚Ђ4ч@D#”•Ђ4?@D#М Н Ђ4 @D#Ђ4@D#њ ћ Ђ4@D#Ђ4?@D#ќ§Ђ4@D#~  Ђ4@D#Ђ Ѓ Ђ4@D#м н Ђ4@D#ЎЏЂ4@D#ЭЮЂ4@D#Ђ4@D#5 6 PмЎЉЈЌЎ­ЋЇСЅІЊ\ЄІЃЇѕЕДЙКИЗГБ”ВЖАЏZ€ИОЛУФХТСtЦРПНМИ№ЬKЯїЮЫЩЪЭШЧўжЂейидвгзба`ФмЂлнџкTТрЂпс{оfйфПухtтbЏшПчщtц]ьKыXэъ\Ї№ПяёюlєЂѓѕђoјЂїГљіhОќћ§њjчЂџўUы mйП dъ  r  a*Іnд{Rп _иПBЁXЅ ‰!^ZН$#%"gЦ(Ђ')&QП,+-*eц0›/1.S4Ђ352ЫЋ<;?>:89t=r76S…БC@FEDBA[бЛLONKIJMtHGQкЏUXWTRSVСQ\Pw?\ПYD_bcDdHam`g^ehЙfР]Ц[ЦZ™хm›jklponiЌзvyrzxustwƒrq‚~Ђ{ƒ€‚}ў|vђ‡„Mˆ‰Š‹†…Кв’П‘”t•B–ŽF“ŒЅіЂœrЁŸ ›™šž˜Ъ—”ЏЃЂЄЅtЂЬЏЌ ЋЏ\ЎІАЊЈЉ"­ЇІЖПЗЖ‰ЙК›ЕГДtИВБOРПОНМСТРЛВРЩПШЯЮЭDЫHЬmЧХЦЪФшУЊјжyеийдвгз‘ба“лЏнмк ЕЅфу‰цчтрсхІпо‘Ѕщ›ыъшŠею›эяІь pЄђёtѓ9№ƒфї#єјљіѕЃДў›ќ§ћџњVžЕ   t \ІyЖ› TЏГt\ІЩ#Ђ"&%r! $Ип§,Ђ/01.+)*-Џ('Хс8›7:;6459u32фаBПADBE‰@>?FC=<вL›KNІJHIMG…FтхU›TWXSQRV™POл_Ђ^їbac][\H`ZYЉИjЂionmlhfgkedрИv›uxytrswтqpуН€ƒ‚~|}t{}zО‡Ђ„‰ˆ†…ОюU‘’ŽŒ‹ŠЈPЋ•”–“ЃУœЂž›™š˜t—ŸЛЅЂЄџЇЈЃЁЂtІ †ŸнСЏ›ЎБВ­ЋЌАЁЊЉ†сЖ›ГИЗЕДцрО›РНЛМПКЙTАВЦШЩХУФЧtТСYУГаЯвгдЮЬtЭбЫЪГНлкЉонпйзиŸмже}уЂрКчцхщфъштсЈЗЌё№іѕєѓяэю\ђІьыШщќ ўћ\љІњ§јї|Њ:џїЁС Ђ {   txЊ„­ЪзП t=ўЂи&Ђ*()%#$'?"!rк.П+\0/-,ич7›6:9;5348u2l1џ>Ђ=?<ЋЦFЂE‰HJtIDBWCGA@ŒЦMЂLxNK˜ЄT›SQRUVWPXРЊ]`B_\Z[^tYXtЗd#aecbqіgfЈХnЂmqtpBljkWoi…h\гМxw‰|{zvttuysrжйƒП‚…‡\†ˆ="€„~}ТМŽ ‘‹ŒŠ‰iы” “•\’ŸМЄ›ž9š9˜™œ—– ЂЁЂпŸЉšЇЉЈBЇІЋЌЊЅcкЏПЎА­аиЗПЖКЛЙЕГ=ДлИВБ{аППМІРОНŽњУyТxФС•РЦЧ‰ШХЦЇЯ ЮвбгдЭЫ™ЬаЪЩЃФІлкBпронйзимжеспч›цъщхуфшuтсБЩё›№єѓѕяэю"ђьы­ШќЂћІџDўHњmјFљї§ГїіЂ›ІB Щоо›7   ў œєyxЉП !D"Hm‡Љ%П$І&B#ЅЛЈ-,B3075614\8І/2+)*.('QйЉ>@B=;<?:С9ПгFПIHtEBCDGBAX ЖORBQNLMPtKJUЎДYX\[^]_tWU\VІZTSzc`шdebaПhgifЧеpПo\sttBrnlmlqлkџjTВxu‰ywvНј€yr‡ˆ†‚„ƒ…~|}Ѕ{ЋzЉЄ­ŠtŒ‹Ž‰sл”П‘–•“,’‹л™›˜"š—kт›œž›^зЁП ЂtŸзрЉ›ЈЋЌЇЅІЊuЄЃRЮАВДЕБЏАГ Ў­]–ЄЗИЙЖЇˆЋМЛtНКЭФ УЇЦ\ЧІШТРС„ХПОІФЯЂЮвtбBЭЫЬWаЪ‰ЩVАеyджгДЃм:пЉолйкниз[ЖтЂсџурСТъПщэtьBюшцчыхžфхЊє›іїѓёђѕ№†яžдЃў§99ќњћџљјЇ‰ЄtuЧ Ђ   W ЄеЇ\’ІПЂЯІ#%" !$Йб,П+/t.B0*(F)-'&~в4П1\6t5B32Є<y?>;9:=877YџBЂAC@WЊFЂEMGD—гLПKItJBOMNFH 0?Ђƒ#"й#"& КСЎ Ђй€ЗЏ .Џ ‚Џ !Ѕ  0?Ђƒ#"й#"& КPѕ Ђй€№ і .Џ ‚Џ  ƒКжИ C›yЛ +Л ˆК 6К XЙ ЃЙ ьЙ лК  0?Ђƒ#"й#"& КS№ Ђй€›й ѕЖ  0?Ђƒ#"й#"& КKў Ђй€LА ѕЖ  "%КВФ BЏJ=(. "%КЇТ BЏЧ(. "%К›й BЏ$F(. "%КЗЏ BЏэ (. "%К№ BЏ=N(. "%КФЇ BЏе](. "%Кђч BЏоO(. "%К1 BЏ a(. "%КѓО BЏТ_(. "%К—ч BЏ„B(. "%К=ы BЏиj(. "%К4й BЏP=(. "%Кцъ BЏхK(. "%КA­ BЏ˜)(. "%Кяю BЏи~(. "%Кёп BЏa(. "%КGи BЏнI(. "%КоЅ BЏw(. "%КН BЏTe(. "%КшЦ BЏИ Ђй€ђч <‰<‰<‰ 0?Ђƒ#"й#"& КŠИ Ђй€ВЃфЋ  0?Ђƒ#"й#"& КVН Ђй€<О №Н  ƒК<О C›iФ §У  0?Ђƒ#"й#"& КJю Ђй€БЄ ВЃ "%КфЋ BЏоO(. 0?Ђƒ#"й#"& КУ Ђй€<Ї  0?Ђƒ#"й#"& КѓР Ђй€ВЃ‘С  0?Ђƒ#"й#"& К‘С Ђй€<Ї RЄ  ƒКТс C›Мт iт  0?Ђƒ#"й#"& Кр Ђй€<Ї  0?Ђƒ#"й#"& КљВ Ђй€RЄ Г  0?Ђƒ#"й#"& КГ Ђй€>И ŠИ ŠИ  0?Ђƒ#"й#"& К№Н Ђй€<‰ђч <‰ ƒКDњ C›]ќ šћ 8ћ мњ #§ §ћ Рќ  0?Ђƒ#"й#"& К"Ќ Ђй€A­ ‰Ђ‰ЂšЋ  0?Ђƒ#"й#"& КАщ Ђй€цъ  ƒКsЊ C›жЯ FЯ ŽЯ f 0?Ђƒ#"й#"& КхС Ђй€Ё­ gТ  ƒКЁ­ C›ЁЎ GЎ  0?Ђƒ#"й#"& Кpз Ђй€цз и  0?Ђƒ#"й#"& Ки Ђй€sЊ щк ВЃ ƒКщк C›Сл В  0?Ђƒ#"й#"& К ч Ђй€A­ —ч мЊ  КЌР ”Ё„BЅ" 0?Ђƒ#"й#"& КIЦ Ђй€МЦ мЊ шЦ  КМЦ ”Ёw%Ѕ" ‘(Ђ(1КБЄ п­H1H‘(HЂ( 0?Ђƒ#"й#"& КмЊ Ђй€п­‹З  ƒК‹З C›˜э  КWі НЖ 0?Ђƒ#"й#"& К™Х Ђй€!Ѕ ѕЖ  0?Ђƒ#"й#"& КМ Ђй€!Ѕ АМ ѕЖ  0?Ђƒ#"й#"& Кнй Ђй€ Д ФЇ RЄ  Њ  0?Ђƒ#"й#"& КАМ Ђй€=ы ‚Р  "%Кы BЏ’(. 0?Ђƒ#"й#"& К`Є Ђй€БЄ ВЃ КB |}f‘(fЂ( Ђ(‘(1К<Ї п­ХSЂ(ХS1ХS‘( "%КЗк BЏ˜)(. 0?Ђƒ#"й#"& К­и Ђй€а <Ї 4й  ƒКа C›< Књ ”Ё<Ѕ" К‚Р ВЃ§<Ѕ"§<ч1 0?Ђƒ#"й#"& КЇ Ђй€<ф ‰Ђ/п дт  0?Ђƒ#"й#"& КФІ Ђй€ФЇ Ї <Ї RЄ  0?Ђƒ#"й#"& К/п Ђй€ёп ‚Р  0?Ђƒ#"й#"& КЗЩ Ђй€<ф ‰Ђдт  0?Ђƒ#"й#"& КиШ Ђй€ФЇ ЗЩ <Ї RЄ  ‘(Ђ(1КŠІ п­N61N6Ђ(N6‘( 0?Ђƒ#"й#"& Ко Ђй€ВЃоЅ  1Ђ(‘(Кјє п­‘(1Ђ( ƒКNЉ C›жЯ FЯ ŽЯ f КЉ ”ЁhЅ" 0?Ђƒ#"й#"& КwЈ Ђй€мЊ NЉ ВЃЋ Љ sЊ ЦЉ Њ ВЃ Њ  0?Ђƒ#"й#"& КЦЉ Ђй€|} 0?Ђƒ#"й#"& КАг Ђй€Dд ѕЖ  0?Ђƒ#"й#"& КŠЖ Ђй€wЈ ѕЖ  0?Ђƒ#"й#"& КUД Ђй€NЉ sЊ ЦЉ ВЃ Њ  ƒКDд C›В ѓя  КП ”Ёl+Ѕ" 0?Ђƒ#"й#"& Кhе Ђй€ZВ БЄ Њ  ƒКZВ C›< 0?Ђƒ#"й#"& Кюј Ђй€ВЃ‰ЂWі Gи њЩ [­ RЄ  1Ђ(‘(К[­ <Ї HrЂ(Hr1Hr‘( ƒКмл C›„м w КњЩ ”Ё§lЅ" "%Кдт BЏє:(. "%К0з BЏzN(. 0?Ђƒ#"й#"& К‹р Ђй€<Ї Њ  0?Ђƒ#"й#"& КБА Ђй€RЄ 0Б  КRЄ ВЃULЅ"ULч1 КšЋ ”Ё(cЅ" 0?Ђƒ#"й#"& К0Б Ђй€"Ќ Ащ Ащ  0?Ђƒ#"й#"& К№Ф Ђй€Ћ ѕЖ  "%КLА BЏ6(. 0?Ђƒ#"й#"& КЇЃ Ђй€п­ЃС  "%КѕЖ BЏž  аC3 С м’ќпOІ щ&˜% І ёліМ С є)<І ›Ч E”  $Oi С$ккRSe$щ $FFХџ $ыыЎ $ъъ.Оџ $ььS'4@$S'4Б@$GGS'4@$ЕЕ вБH$!!—ЭБH$ЮБH$;;HЦБH$44ЏЫБ@$  аБ@$ ˆŠаБ@$ •˜аБ@$ЂЅ бБH$`b бБH$TV бБH$lo бБH$HJ бБH$y{д Б$ЃкБ@$+-( Б($ ЉЉN Б($!ЊЊ­ЪС@$#˜š-УС@$'ƒ‡-УС@ $,ˆŽЈПСH$/2 5 (ЬС@$1ЂЄ:еСH$3  :еСH$5ёѓ:еСH$7  :еСH$9  :еСH$;ге:еСH$? $ :еСH$B+ . :еСH$Dќў:еСH$Gцън СH $H__џШС@$K=?џШС@$MFGџШС@$N88LШС@$PO Q LШС@$S\ _ LШС@$VU X LШС@$XI K SЯС@$Z9 ; Р С$]22 гСH$_VXdХС@$aЙЛdХС@$cЊЌdХС@$eВДяаС@$fПП‹ЯС@$hC E {УС@$ly}‹лС@$oЧЩјЫС@$qMOї СH $scc С($td d  С($uc c й 4С@$uI С$x''ЌЩС@$z**0 4С@$z%&П 4џ@$zl l П 4Е@$zлмП 4С@$zћќП 4@$zOPБ @"$|)*‚ @ $|] @ $|ˆŽ4ШH$~++„жB $`d„жB$ƒY[Ъ H$ˆžЄш H$ŠЈЊІ H $‹J H $Œ„ПH$nn? H$ŽQQщ H$HH’ H $&&ЁмH$‘††$ H$’MM`жH$“€€)Юe@$”##c H"$–яё2гH$˜ѕїЭУH$š†Т @ $š4AiЩ@$чъiЩ@$Ÿмо H$ЁСУ H$ЃЬЮ H$ЅЖИЮ e$ЈгH$Њ//і @ $Ќn @ $Ў @"$Б”—Nи@$Гxzе ($Д33ў ($Е44" ($Ж55О Б $З? ?  H"$И ! Х H"$К# $ eО@$Л  КгІ@$Н) + 6ФІ@$П1 3  ТІH$С- / p $Ф  ѓ І@"$Ч& ' Q 4С@$Ч’’ЦСH$Щ!iРСH$ЪuЮСH$Ы§УС@$Э ХС@$аux ХС@$вjl ХС@$дƒ иСH$ж:< иСH$и.0 иСH$кQS иСH$мFH иСH$о]_d С$с§§Ÿ С($т‡‡Ѓ 4џ@$т  •ЮB$ц ›жH$ш€ € ркH$эї §   H"$ю† ‡ AпH$яŒ Œ  @ $№  ПH$ё” ” PЬ@$ѓw x ч H"$ѕю № он@$їЏ Б он@$њч ъ он@$ќЛ Н BЪH$ўм о BЪH$Ц Ш BЪH$б г BЪH$Ђ Є x $o o eЧ$  qЦ@$  8 ($   D џ $ 7 7 UкH$__ЗнH$iiЎбБ@$RU› H"$ŠŒюЪ@$ƒ†ФСH$vyt Б$JJA 4@$m n A 4Б@$HIA 4С@$ЂЃьл@$$ЛПЭ$&ЧШуП@$)­ЎуП@$+ААUмH$-ЕЗŸв$/ФФХм$1УУЛ ($2ЫЫј ($3ЯЯ• W($4ЪЪE ($5ааtй@$6ББЇдСH$8ЖЖйЭСH$9ССємС@$<Ќ­• СH"$>ьюaлС@$@цшЩЯСH$BкмЩЯСH$DЮаn С$GЄЄЪH$IЊйH$J  з@$Tђњз@$\цьз@$bРХз@$iЧЬз@$pвиз@$xкруЬH$z:<ЅЧ@$}36(кH$€(кH$‚') $…ИИž 4Ф@$…'(ž 4С@$…“”ž 4@$…ЖЗУЪ"$‡’“ лЂ$‰ювЂ$‹ŒЄо@$KNЄо@$”QTЄо"@$œdjЄо @$ЂZ^шЮЂ$Ѕ†‰щТ@$Ї}\о?$Њ‚…bвH$ЌuwМ  @ $­FFX "($Ўœœ( ($Џ››ј ($Аšš™ ($Б˜˜Щ Ј($В™™  ($Г••? ($Д––m ($Е——ЅЬ@$ЖooMйH$ИТТyкRH$ЙЭЭYбС@$РЇЌYбС@$ЩВЙYб@$ЯЁ+ПgH$бјњЋЦ@$гђє+нH$екм+нH$зцшО С$к••ЕХБH$м^^ъРБH$нiiСБ@$т14С@$ш;?СБ@$№OUСЇ@$іEIеБH$ј”–4вБ@$њŽѓЧБH$ќvxѓЧБH$ў‚„“  $))% 4Б@$% 4І@$›œРж"@$яяrи H$фъVд@$ ээVд@$ ьь< "$нн_ ($ђђ?аЂ@$ююѓ С$ оС@$)<4С@$ЁЁ)<4І@$&&ŽнЦH$ИИИЭъH$ЋЋwг­@$ЄЄнХ›@$нХ­@$нХ @$ ^ЫЁH$!нп^Ы"H$#шъ^Ы5H$%єі^Ы"H$'ХЧ^Ы(H$)бг~ "$,диH$-''jпH$/=?+иH$0666дH$122з@$4ц @ $4 Ц $7  @ $7u ($8CCЎ ($9DDHЮСB$=ЈОСB$?ЌЎ=ЭСB$CАДѓжСH$D~~ейСH$I›Ё†ФСH$KЅЇ ЦСH$L‘‘`ТСH$Mˆˆ‡ЩСH$NKзС@$PvwдСH$Rўѕ С@ $RhnТС@$UёєТС@$WцшЫдСH$YЭЯЫдСH$[йлЫдСH$]ТФ­ С$`QQСФСB$acc˜иСB$bffв С@ $bVbM С($c  — С($d  RS4С@$d01RS4e@$dI'-$! .#","*()+'&%/0RAЧH}A@{BQI?%RтO321Й5РJЦLЦKЫMzP<;9J8_6=7>Q:4GN,DECFT‚SBXVЂW‡Bxъn`yџrilhlaлbџg}mk_|cdџvџuwstopq^ezf{j]~€‰™ˆ„\‚ƒ‰…‡†V[—ЂŽqŒ‹–”%•т’“‘ЙИ‹YМЖмЊЁ›ž ІўЈЇЉЄЅЃЂœЌŸџšџЋ­HЗЕЬБЏАДГВ[МЬЛФНЙПОКТlРлСџУBИ}ЬЧ{ХЦЪЫ%ЩўШмйСЯаСдгв%бўЭЮизж—еїшСтусрёчхцлфпонюя№ьэыъщVŠлЏћСѕСєіђѓFњтљјїL кСџўќ§лтZ  \   BUЏс<ў_Ч&%-'$ #"С!"()’\;><=53-%1ў20./Й+Р,Ц9Ц8Ы:z674*?F@Ь ЬЬє  ƒEТƒJ ЈЏƒгЧ&аƒ! ƒ7 ƒэСAбƒђдƒ-бКS'% йЬкЬЬйВУ& RУgУ™Ј& ЕСRУgУ™ЈйŽНУП?Ь„?ЬIХ?Ьњ ?Ь+Х?Ьже?ЬBж?Ь| “еБе?Ь| Є ?Ь„?Ь(ж- & ŽНCЩ"ЩƒBжƒЧ ц ƒ ШТШƒ„ƒkЯК”ЧRSй€й) йВУй(жййЅЯ& RУgУ ƒI нлЬ"ЩšЦ(. [ К 0 ƒЩЩйЫ 0?Ђ?ЬЕС™Ј?Ь™Ј‡iН2‚#‡Є ‹пЭ ЬЬМ 7 ЬЬЬƒЯвƒ]ПƒŽНƒJ ЈЏƒEТƒ7 ƒ! ƒђдКП RSй€й йуƒЁ КйЬкЬЭ 7 ]  Є ЌФƒёгƒfФƒЯТК‚ Ѓ ƒЁ КЄ ‹пЬ ƒ ƒJ ЈЏƒEТƒиЦƒ7 ƒђдƒjнƒ! ƒWнКQ П ЬйХЮRУgУ0?Ђ‡iН2‚#‡М & Ь‰Ьƒq ƒEТƒJ ЈЏƒмƒ! ƒЫ ƒ7 ƒђдКЃ П ”ЧšЦ(.[ ] 0?ЂЬўŽ‰Ь[ ƒq ƒгЧ&аƒэСAбКХIS'ƒ"м2мAмJмŽР‰Ь[ Рƒq ƒёгƒ|Ъм ( & ( 0?ЂЬ‰Ь[ ƒq ƒfФƒ ШƒЯТКu\)<0?ЂЬўŽTСaСpС5 —СK g ўŽмј5 —СK g ўŽ9 5 —СўŽ5 —СK g ўŽЕС9 5 —СўŽЕС5 —СK g ƒ]ПƒгЧ&аƒэСAбƒ-бКХIS'Љ УЉ ѓ Љ ]П 5 —С5 —СK g TСaСpС5 —СK g мј5 —СK g ƒ Я7ЯƒУƒ“о7ЯƒŽвя ƒ & & щѕ*МЩэЩэ0?ЂЬ–бмј5 —СK g –бTСaСpС5 —СK g –б5 —СK g ƒ]ПƒиЦƒjнƒWнК3 Q 0?ЂЬ5 —СK g ЕС5 —СK g TСaСpС5 —СK g мј5 —СK g ƒ]ПƒfФƒЯТƒ ШКпO)<йтж‡iН2‚#‡…дК% П Ы КМ й ƒЩЩЬ ƒfФƒEТƒJ ЈЏƒ! ƒЯТƒ Шƒђдƒ7 К)<%  Є ‹пМЬ G КЧS' Щ йxŽRУgУйОѓОmЭU…Э™ ‡iН2‚#‡Є ‹пМ Ь ƒŽНƒJ ЈЏƒEТƒ7 ƒ! ƒђдК” П шФНиo МИŠџGG­Ћ HHа@ђђЭŠџ Фи3  ˜CW Шe˜ФФRS˜CCХџ ˜ЋЋєџ ˜ЌЌРџ ˜ЎЎО ˜ЉЉљ џ ˜ББѓпџ ˜­­вBџ ˜ннtG ˜ЊЊ ' ˜ІІzрџ ˜РРњƒe@˜ЫЫ_ @ ˜Яађe@˜ШШ; @˜ЮЮЮše@˜ ЭЭ e˜ ЦЧХ (˜ ее„ (˜ггъ (˜жж (˜ззЁ (˜ддаЎe@˜ЩЩў‡@˜E E @˜D D Ѓ @ ˜ћгВ@˜35_ЋЬ@˜:>й< (˜( ( Ё…˜ $ $ м‚ Ь@ ˜ тC­3˜!# # SЊЬ@˜"22I‚Ь@˜$!ШЬ@˜'%(@—@˜)ВДэЈ@˜+’g›@˜.ЅЈ1œ@˜0ЌЎЋ3 (˜0 Ї їЏ˜1ч ч FАe@˜3  @ ˜3\bТЁг@˜5х х Ёƒг@˜7№ № Гб@˜;ш†@˜A@GЏг@˜BП П Д›г@˜CЯ Я ŸЂг˜El l (г@˜F9 9 ‘$ г@ ˜G^ _ = 2(˜H* * Б @˜I; ; UƒT˜Jщ щ 28 0(˜Jм т яšH˜MћўA’e@˜O  ­ г@˜Rќ џ „) гH ˜SŸ Ÿ ! H ˜TІH˜UШ ЬH ˜VЊ& гH ˜W2 2 1‘e@˜Ypr‰& гH ˜Z. . l& гH ˜[* * 0Ÿe@˜\GGЬ& гH ˜]6 6 Ы) гH ˜^Ј Ј Є) гH ˜_Є Є @ЄгH˜`“ “ C) гH ˜a— — 5' гH ˜bF F & гH ˜c  эгH˜dі і x% гH ˜e  sˆг@˜fB B + гH ˜gб б М* гH ˜hЩ Щ b' гH ˜iH H  @ ˜jппR( гH ˜k  є& гH ˜l: : ћ‘H˜oёє?* гH ˜pЖ Ж * гH ˜qБ Б D< H ˜r  з% гH ˜s  ^­H˜tBBv–e@˜zy~F, гH ˜{L M -( гH ˜|u u Z@˜фч + гH ˜€т т ( гH ˜ƒ ƒ Ж( гH ˜‚‡ ‡ с' гH ˜ƒ^ ^ ( гH ˜„b b ™' гH"˜…P P М' гH ˜†V V №) гH ˜‡Ќ Ќ /šH˜ˆЊЊ" H ˜‰;;m”H˜‹  рŒH˜ ЉšH˜I K e) гH ˜› › у( гH ˜‘‹ ‹ ) гH ˜’  f* гH ˜“С С фˆ@˜—mo”% гH ˜˜ ­Јe@˜šPRЙ€e@˜,0#™@˜žѕѕˆ‚@˜ §џИž@˜Ђ žЊ@˜ЄЦШ7І@˜ЇЯв™Ь@˜ЊSSТЌЬ@˜­NNZБЬ@˜ЏXZOЅЬ@˜АIIQše@˜Г>AГ†Ь@˜Е_aЯ+ гH ˜Ж s$ H ˜ЗY Z •e@˜Й„†kŒг˜Лm m Д—г˜Мk k Э@˜ОЧЩ:$ H ˜ПO P ь @ ˜РллI‰H˜СССŽ ЬH ˜ТееЊ ЬH ˜УммД% гH ˜Ф  ŒšH˜ХЂЂЃˆH˜ЦЙЙЂH˜ЧЕЕn= (˜Ш1 1 І’H˜ЩННUЈeH˜Ъ88ч—eH˜Ы44%@˜Ь(“г˜Эo o < (˜Ю  €Ёг@˜аЃ Ѕ :–@˜гz}іЂ@˜з#'ЖАг@˜к   г@˜н  yВe@˜тІЉЇe@˜чЎБ@Ь@˜шЭЭ?Ђ@˜ъЛНzБ@˜ьЧЩh—@˜ю e@˜№`bW…@˜ѓorfЃ@˜їSW"Ї@˜јШШоЅ@˜њ)+ј“@˜ќ02Ѓ@˜ў2€@˜"$Ј@˜>@n@˜VX.•@˜FH"В@˜NPњ‚@˜ 68"- г@"˜ U V k- г@"˜X Y Ž, г@"˜O P з, г@"˜R S к- г@"˜b c ЙЄe@˜їњЙЄe@˜ћџЋЎ@˜л„@˜ гжœ‘@˜%рхя›г@˜'›  “Š<@˜+ѓœ@˜-ЈЊ–‰H˜/B D @ЇH˜18 : ЎІгH˜4я я ЗH˜7& ' `Їг@˜># ) f‰г@˜@  1Ѕ@˜BЄІbЁ@˜D­Џу”e@˜F ЂыЉЬ@˜HŠŒЋЃЂ@˜LŠŽR! H"˜Oˆ‹Ѕe@˜QИКХœe@˜R$$ўЁЬ@˜T–˜ўe@˜Vор?›e@˜XЌЎЖ“Ь@˜Z~€OЎe@˜\ТФмŸЬ@˜^jl‹›Ь@˜`tvKe@˜bЬЮёe@˜dжи(Œг@˜fЋ ­ XŸг@˜kŽ “ ­@˜lддќЅ@˜n›ט@˜p]_г•@˜r{}%›H˜tСУ–ЅгH˜wэ э Щ­H˜yЗЙ,Ž@˜{ln0ЋгH˜€- 1 †гH˜ƒ  “@˜…QSУ’H˜ˆ- . ЗЅ@˜‰žž“C@˜‹]_Ю@˜YІe@˜шъ{œ@˜‘іј/„@˜“пс,Б@˜•ЛНъЌ@˜—жи(ž@˜™ЧЩь˜@˜›[]ж‰@˜ ‚‡h˜л@˜ЄhlЖЏ@˜Їš4Љ@˜Њ€ƒБЉ@˜Ўѓїп @˜Бvy] @ ˜БLhB ˜ДEEh. г˜Иp p h. г˜Мq q &, г@ ˜МF J wЅ@˜О 2г@˜Р}  2г@˜Тˆ Š xЄг@˜Фг е J“e@˜Х‚2@˜ЧикoЏ#@˜ЫпуH™@˜ЭѕїѕБ@˜Я’”k€@˜бЗЙ&ˆ@˜дщьvЎ@˜ж›М‚@˜йAD!Ђ@˜лQSщ" @ ˜нŒŽЂБ@˜пю№y’@˜рннc‡@˜тДЖ™™@˜шЮдв@˜ъ–˜йž@˜эТХAЏ@˜я Ђ@˜єЈ­‡­ @ ˜є#0Б•@˜љw|—e@˜ћXZ…г@˜ўК Н 6Ёг@˜џќ ќ вІ@˜LŠЬ@˜Ы @ ˜ййЊ­e@˜hj)+ г@ ˜ е з ' г@ ˜ B B 4& г@ ˜& & g“г@˜ш ъ ˜@˜ыыр* г@ ˜Э Э :e@˜•—–@˜щщŽž@˜ээwЈг@˜> > Пˆг@˜= = }< @ ˜  є% г@ ˜  q†г@˜ y { b+ г@ ˜"л л V$ @ ˜#T U ˆ”г@˜%f h ”г˜'n n Г$ г@ ˜(d d є@˜*77ˆ* г@ ˜,Х Х Uže@˜.ŸЁ“Œ@˜0ор“Œ@˜1ббE @˜3яёtЊ@˜4: : Љ7@˜5ІІС‡ ˜84 4 Ћ”e@˜;пЏ@˜<ŒŒдЉ@˜=““‹А@˜@P‘@˜E  )‰@˜Gщы•Ь@˜IBD2 (˜J’ ’ Z= (˜K. . t3 (˜Lš š ,4 (˜MЊ Њ 2 (˜NŽ Ž )/ г(˜Ow w Ј4 (˜PЎ Ў g4  (˜QЌ Ќ П/ г(˜R| | ж7 (˜Sз з Ё/ г(˜T{ { ‡/ г(˜Uz z #9 (˜Vё ё о/ г(˜W} } 3 (˜X› › I4 (˜YЋ Ћ Ь3 (˜ZЇ Ї [> (˜[I I ї2 (˜\– – 1 (˜]‡ ‡ ›5 (˜^З З ›6 (˜_Щ Щ g/ г(˜`y y W5 (˜aЕ Е Ь; (˜b  "6 (˜cЛ Л К6 (˜dЪ Ъ њ6 !(˜eЬ Ь л6 (˜fЫ Ы т. г(˜gt t Щ. г(˜hs s 7 (˜iЭ Э –8 (˜jф ф R8 (˜kу у Є>  (˜lQ Q F/ г(˜mx x k2  (˜n‘ ‘ J2 (˜o  Н> œ(˜pU U ”;  (˜q 5 ™(˜rВ В К- г@ ˜r[ ` 43 (˜s˜ ˜ T3 (˜t™ ™ 3 (˜u— — 5 (˜vГ Г 85 (˜wД Д А; Ѕ(˜x ; (˜yќ ќ R:  (˜zј ј ~: "(˜{љ љ Њ: (˜|њ њ ж: (˜}ћ ћ !: (˜~ї ї ў<  (˜) ) C7 (˜€б б i7 (˜в в Й= $˜‚7 7 Ж7 (˜ƒж ж 7 (˜„г г Ю$ г@ ˜…h h u5 ш(˜†Ж Ж 0 г(˜‡  c0 г(˜ˆ‚ ‚ B0 г(˜‰  #0 г(˜Š€ € n9  (˜‹ђ ђ Я8 (˜Œ№ № ф1 Д(˜  и5 (˜ŽЙ Й Р1 (˜Œ Œ М5 (˜И И К<  (˜‘" " ’= ђ$˜’6 6 Ц4 (˜“Џ Џ р4 (˜”А А ъ0 (˜•† † -1 (˜–ˆ ˆ / г(˜—v v O1 g(˜˜‰ ‰ ѕ; (˜™  r1 (˜šŠ Š Ч0 R(˜›… … …0 (˜œƒ ƒ Ѕ0 (˜„ „ Ї9  (˜žѓ ѓ ƒ4 /(˜Ÿ­ ­ 0; Е(˜ џ џ с9 (˜Ёє є œ1 (˜Ђ‹ ‹ 8 (˜Ѓк к ,< м(˜Є  Г2 (˜Ѕ“ “ }> (˜ІM M 4 š(˜ЇЉ Љ > (˜ЈH H е2 (˜Љ• • 6 Ё(˜ЊЦ Ц =6 (˜ЋО О ]; (˜Ќ  W6 (˜­Т Т y; (˜Ў  ќ5 5(˜ЏК К д= ё$˜А? ? і=  (˜БG G +2 (˜В  Ё@˜ГttШ4џ@˜ГФХRS4@˜ГCDj ˜Жш ш j ˜Йъ ъ ‡ЇŠЏЧЧlлџ‘ЈѕєuЧІЧ—67йлХЦомЈЁŽ$Dџџ'(&!;~€ƒвгаШЭЧЯЫбдеЮчИЗ?5/Ьx–•‚IwЅF`†§.Ÿ ’‘”Œ‰}‹Wc !œ ткп›ЙО|/0:1yz{цЋЌЉЊБ­ЏАЎ0ІлЩф3lиўџђНЄ34ЇхяѓёЪ*№+,)ЂЃКЛZ>C8B,m_эю  ъ ь ы щшno9љТуРПpŠ(…9+xћњзМšж56ќ12@Rv^%PHGEJY"OVijgџh)b&XefrsџMNqALKk\[џt-UT'dџнСQž„сџФУр8#SјaДџЕВГeЖˆ7‡*џ˜їіZYŠA_RџGFDIz}|{џŽˆO‰‹•‚џ€@Ѕa`<˜œNџhfg>J-Lš?РKРC’ЇBЇ†‡ІdІijпSпyPЩƒЩЂШUШž ІІQVоXоW[ѕsєtwЉvЉE–Љ=Љ]\Ј.Ј<ЉHЉ~‘г”гqmЖnЖopДlД“ŸдЁдckПTПŒ™е—е]$В„В%#љ"јr:­=­“4л…лu2Ъ;ЩЃттЄ›зMз™^рb„-2‹L‹ƒб‹wЌƒКЭŠШbжЭѕ*& Х№йъйъй4 й+—ƒЋšЋƒƒЩ…ы…ййƒ‡ ƒ‚Ї й1’йЉй’1’й[œАйkАьЁ2‚Ыƒнƒ‡У 2Гч ‡„Н2‚#‡! .Џн›ƒУЂййA= йyƒ‡ч‡1’ƒ]’ƒWЮp^žSЬЬщ №NйWЮЬ„чК№NžSžSbЄЬT' ЬŽЕС‘ˆlђT' …' Ьw( „ч‡’1’ЬЬf< Ь4" ƒ›–Е–Ю–о–ѕ–i, „чƒA Z Х+ w( Ь„ч‚O„ч„чžS-4" k‘2‚2‚М2‚žS) ЬЬэVћu ƒйзЈйф€йƒЊ‚ƒQ€ƒЩЊй+—tšƒТЊ‚ƒТž•ƒž•йй+—tšйг†ƒƒй•ƒЊ‚ййщƒƒƒƒƒƒƒƒƒƒƒƒƒƒйƒйЃЁƒU–Ј ђ   LЃйпА№Аƒ Ођ”М ч‡™˜y”М ч‡™˜yййfЂƒƒйž ƒ& ] ƒ„Нч йƒQ€ƒQ€ƒQ€ƒQ€ƒ2Јƒ–ƒZ•ƒQВƒ+ƒƒL- ƒ˜- ƒИ, ƒ- ƒ. *. ƒ иЄƒ иЄщ ƒй'й'У‘а‘ц‘й œƒЯ і ч ƒйЛ‰йЛ‰йЬƒЬƒтsйˆЇžЇЊЇШЇлЇђЇйЙПйџЦйpПƒ€ƒ€ƒгЃіЃІ йЬ@sƒ€йƒ€й€ƒ€ƒ€ƒ€ƒ€ƒ€ƒ€ƒ€й % ƒ|Ÿш$ % ЧŸййAгƒe йУПйбƒЬ юйщИƒ† ƒё+ žЇ, , ƒБйH†ƒŒяƒю’Y йƒƒQ€ƒ€йљ# йZ„йZ„йZ„йZ„й™йі‰ŠŠ2Šƒ‰˜™˜Б˜ƒ‰˜Ёƒ]ЉoЉƒ„2‚Нƒ‰˜ЁК3 RSК . 3 А. КQ}3 Š. й2‚ƒƒTƒB% йй2‚й2‚—ЏЈЏй„ йВƒ”€йй•Ўщ œШ/Рй™й# йљ# й铇йЬ™л™p# ˆ# Ѕ# й™йŸP# й™йі‰\" v" –" йі‰\" v" –" й+—й+…A…йƒQЪЇ! й  6 ййAгйN+ й™ЈйW& й'УйймјйWййй™ЈййŸ< йЅ"й–†й‡+ йй€йF. ййт! йЊ* йwžƒЗŒƒƒМ ƒй”Ÿч‡йШ” КйƒˆЈАk‘2‚_Н$ ƒQ€ƒž•ƒ3ˆћžSЬƒщ žSBRЬЬМO9 BRˆћžSь3 @> xћМƒ…тЬƒш; ƒƒ…тƒњ. ЕСvDИ8 q8 0Iƒѕ*МьЁьЁЬˆћˆћƒЬƒЫƒ ; o: ›: Ч: ѓ: @: ƒ””›wƒƒƒƒ>ь”ЧММŽ9 9 ЬƒЬƒf< ­= Ьi, шМК”ЧƒЬМММЬ9 žSO; : vD8 ƒ4" фHžS@> xћƒƒ.ЏМн›ƒƒƒЬvГŽ? vГŽй> E? џ qЅэ ] С(w{ Š RSџwЅЅРџ wzzzРЇ w\\Й w]]ьЗ w””љ џ wbb4 w‹‹aM @ wєєŒэ@w’MїŠ@w іŠ@w ™ыŠ@w +ъџ@wжиa§Bwмр1d С(wн н ЈK H w……]K H w{{K џH woo‚K `H w5K ЁH wssкG  H wно'H H wшщУы@w  ю@wnё@w"ѓїUљ@w& UљЂ@w) Чњ@w,КНкь@w-НН7ћ @w/7ћ@w2џ7ћ@w7љўGъ@w8хщ@w:–˜КљHw==@ђHw?KMXф@wA  ЩтHwCъHwE,.G H wFвгДG W@ wHзйрF @ wJЖИ%G @ wLСУlG @ wNЬЮПц@wP‹Nd С(wQо о ѕc С(wRл л №э @ wR(-дc С(wSк к AM @ wTяя M @ wUыы›ъŠHwW')›ъŠHwZ36›ъŠHw\-/у@w^.0љ w`( ( 8ф@wdЖК%х@wgЙЙ^F H whŸŸьЂ@wi44т@wj::гT @ wkђђI H wl T H wmщщ.T H wnъъOT ЂH woыыpT ?H wpьь‘T ЂH wqээВT ›H wrююS (H wsкк­S  H wtооЭS "H wuттэS ѓH wvцц§K H wwbQ H wx‘‘TV жH wy  сU )H wz =U H w{ќќV Ы@ w|  БP ‰H w}ЙU ŠH w~  zF H wЅЅRє@w‚ Юэ@wƒ55нP "H w„……M @ w…чч‚@ H w†œœк@ H"w‡ГГzR H wˆЕЕPR  H w‰ББъR ЂH wŠТТS "H w‹ЦЦРL H wŒЬЬsќ@w26-V ЦH w  eU ЂH w‘ ЩK H w’‰‰?F H"w“ˆˆQ H w”••1Q H w•Q ‰H w–‰‰›L H w—РРvL H w˜ЛЛЬё@w™U H wšіі­юН@w›EEЛј@wœUUИђ HwЉЉ†A @"wžэюрц@w œH H wЁњћ˜ћ‰@wЂџџЧR ?H wЃННЄR H wЄЙЙ V ЙH wЅ  ДQ ˆH wІ™™џQ ЏH wЇЁЁиQ ‡H wЈtO ”H wЉYY“O (H wЊ]]Jя@wЋeeБO  H wЌiiдїЃHwЎTS "H wЏЮЯШJ H wАeeыH H wБ  фы8@wВƒP ‰H wГ}}RP ТH wДyyŽU H wЕ  RJ nH wЖXY)J H wЗLL…I H wИ66­I H wЙ77еI ЫH wКGGџI 'H wЛHHO УH wМ99O H wН== P ЂH wОqq7L ѓH wПЅЅ;O  H wРIIXO H wСMM:љџ@wТВВљ@wФттау @wЦ!xљ@wЩТХех|wЫ& & тљ9wг) 1 ьу wж' ' ѕчТ@wк*.Ёј @wпЪЯЁј@wхбзoю@wчЩЫОF H wшБВсЁHwщББ•юHwъ­­џF H wыМНHG H wьЧШІшHwю "ўрdHwяЕЕIщHw№  <цЁHwёЉЉ1є@@wђннпр@wѕ~юђ@wћ=C ћ@wџX\ ћ@wrwщ@w ƒˆўћ@w ССъќ@wšž?ѕЂ@w‰Žiэ@wEG€у @wў§ь@wмр§ь@w!јћётЂ@w#Z\{і@w&QTЬф@w)Z]6ё@w-W[bч @w0гжЎїЂ@w3ТХEэ @w7ЈЌйє@w9УХ|х@w:ХХžх@w>АДѕё@wAКНї@wBЩЩZј@wEщь>§@wIбе ў@wNFK ў @wRAEiяЂ@wUчъЉє@wWqs›ђ@wZђѕлћHw]’ђіHw`„‡§@wcgjbш=@wfииLу @wijm ц@wlruёѕ@wm!!}ј@woЭЭЄя@wpббhу@wsbeќ@wvbeє@wyддƒє@w~Чя@wQTјї@w‚ееN @"w„yы@w‡œŸь@wЅЋЛь@w’glbѓ@w–vzR? џw™ЇЇЃ§Ђ@wщэяС@wŸ‚ „ UцС@wЄ|  ж] С@ wЅ‡ ‡ ^ С@ wІ‰ ‰ ѓ] С@ wЇˆ ˆ И] С@ wЈ† † -с@wЊ—™rщŠ@wЌnї@wЎЇЉiь@wА,.ѕŠ@wВ!#“щ@wЕосЯM я@"wЗ  zM @ wЙіі„шх@wМФЧDI Ю@ wОџG @ wРтфMH Ё@ wТэяъџ@wЦюђœF @ wШЉЋѓѓ@wЫ$&5ю@wЭ11aђџHwЯКМу@wв\_Юі@wд­ЏBѓ@wиos2S @ wкЪЪјџHwмЦШтL 4@ wоааJь@wр€‚Ѕр@wт­­”ч@wфчщ”ч@ wцпт”ч@wщуцvH @ wыєіЪю(@wюaaеO ?@ w№mmWќЁ@wђmS ~@ wєгдыJ @ wіiiРH Т@ wјxJ ;@ wњ]_§ъ@wќPRч@wў//9ы@w008ч@w@@иј@wAAі@wAA.P "@ w uu5њ@w QQ‰ѕџHwРТ\хџ@wњќ†ё@w І#R "H wЅЅЯ§@wЯ§@wИъ@w%'L ќ@ w‘Ё`і@w"­ВbN @"w%&)мN @"w(25ЛѓŠ@w,LPіX (w-O O БX Ђ(w.K K hX  (w/F F гX (w0L L ŒX ?(w1G G шY (w2X X Ћ_ С(w3Ј Ј Щ_ С(w4Љ Љ ч_ С(w5Њ Њ ` С(w6Ћ Ћ #` С(w7Ќ Ќ A` С(w8­ ­ 7_ С(w9œ œ T_ С(w:Ÿ Ÿ q_ С(w;Ђ Ђ Ž_ С(w<Ѕ Ѕ Y  (w=T T ТY ›(w>U U —b С(w?Ь Ь ’[ В(w@j j Jb С(wAШ Ш Р` С(wBЖ Ж h] С(wCy y ьb С(wDа а Аc С(wEж ж vc С(wFе е c С(wGв в Fc С(wHд д эZ ~(wIf f 3a С(wJЙ Й Ыѕ"BwK# # Z o(wL[ [ јV (wM7 7 ЗћBwN! ! Їэ{BwO" " wY (wPS S Y €(wQP P 3Y л(wRQ Q VY ‰(wSR R Јd С(wTч ч ‰^ С(wUŽ Ž Тd С(wVы ы [ "(wWg g d С(wXц ц Вb С(wYЭ Э Ыb С(wZЮ Ю ˆ\ %(w[q q a\ ›(w\p p ] С(w]u u :Z (w^^ ^ I] С(w_x x d С(w`м м ža С(waМ М х` С(wbЗ З nb С(wcЫ Ы кV (wd4 4 К[ (wek k Xa С(wfК К §^ С(wg” ” d[  (whi i 6[ €(wih h @W Н(wj9 9 W (wk8 8 Ќ^ С(wl  ` С(wmБ Б +c С(wnг г D\  (woo o gd С(wpт т Я\ С(wqs s Џ\ (wrr r }a С(wsЛ Л я\ С(wtt t о[ (wul l #\ ѓ(wvn n џ[ "(wwm m Тa С(wxП П уa С(wyР Р ]^ С(wzŠ Š RZ (w{b b _` С(w|Џ Џ 3] С(w}v v џa С(w~Ф Ф 'b С(wХ Х ТZ (w€e e ”Z 1(wd d a С(w‚И И њW Ђ(wƒ? ? bW €(w„; ; ‡W ‰(w…< < ЌW ?(w†= = гW Ђ(w‡> > v^ С(wˆ  Х^ С(w‰’ ’ т^ С(wŠ“ “ sZ ~(w‹c c /^ С(wŒŠ Š _ С(w– – F^ С(wŽŠ Š X  (wD D AX ‰(wE E Eђџ@w‘ЖЖRS4џ@w‘ЅІW џ@ w‘ЊЌх}?и~|№ ѕlьл џ   сф675џџёѓЅ.#XЂтђY;ЊЙМЫЬвљћњnу_ІЈЇЉ“™˜хйЎ’8=ПРВБЭШЩЌЋЗ:ЖšЕСУ !"Tю1яU>­бГжзХФдеКЛИОАЏНа&'($%ДЮЦТїc р<Sэ›+ž,Ÿ-)*ъыќpq€@щЪ†‡ˆ‰…„~bKЃœЁhgш^іЯЧЄ‘W43 ч|џцoiг —Š‹ kŽ lxy§z{ўŒ ‚џ?QVfeLduwџv?mј[Zsr\џ]?є}GHIJAџB?CDEF?jOaџƒ?RNt`MP9:џ6?”–9•O8VUџo?pqrnz{џ?<=>;()џ?7Ifvlk4BџT?S+P`baZGџF?]\_HhJ.РwРyeЇsЇ@WІtІuRпxп$%Щ&Щ'ШШ !І"І#gоXо-Mѕmє5QЉ^ЉLcЉdЉijЈ,ЈN*ЉDЉE/г2гY3Ж1Ж02Д0ДKд/д[CП?ПAžлŸкбпмЈонƒƒ™Ј& RУgУ™ЈйRУgУйRУgУйВУМ„§Vћ1’OE ƒƒƒƒƒƒƒййlD ШD ƒ+—fC ƒ+—c‚‚Šƒ+—цC йkАъњlъ;уVћ;уVћ:щ;уVћ:щъ E lъќхъьЁi2‚Ыƒнƒ‚фžф.ЏŽНн›ŽНƒй&эй&эй&эй&эƒ*@ ГтММйƒ?ЬIХ?Ь[е~е?Ь+Х;у+—;у+—ƒi]’€ƒў@ "A …' >ьГтћT Ьиђиђиђиђиђиђиђиђиђиђw( иђ{V & & ЊV иђ& „чƒђqєOE иђ0Iќх„чЬиђиђ„чЬ—ќЗA дA & & фK „чиђЬиђЬЬшёЬ щ щиђЃA чщM & ьЬиђ& иђиђиђ щ щ щЩэъїЃM ƒ‡­& ьиђиђ& њЬ„ч„ч„ч„ч щ щЩэUL щ щƒ€ƒ+—й+—•ќхъ;уНV ф€щШ”ъ+щ:щƒф(фй„N ™N ДN ;уШ”+щщЇB ;уШ”ъ+щщЇB ƒ+—ƒƒƒƒƒƒ:N ƒƒƒйƒ9С*@ ;уШ”ѓ*ѓ+щXB ;уШ”+щЇB ;уШ”ъ+щЇB ;уШ”+щѕB C йiƒiU–Ј Ѓi  LЃƒ ОђйђПc‚йˆЇ&эуE йˆЇ&эƒiƒiШ”йifЂƒ2F Ÿ„ йi+—йi+—ƒi]’€ƒєййsE ‘E ЇE й‘E ЇE ййШЇF йЬE ч‡ШЇƒi иЄ*ўƒi иЄ;уъŒяƒ ƒйŽНЛ‰йŽНЛ‰ƒŸ„€йЬƒЬйџЦйpПййCA ййAгƒŸ„ž•ƒЬ юй…ЭF ˆйђПƒiйƒ€йi™йiі‰ŠŠ2Šƒi‰˜™˜Б˜ƒi‰˜ЁКE? RSƒQC Р§~Ш щ3яйІ] хбšц­ц щ щ щ›wƒ™Јй}Хƒž@ ƒ†ьйЅЯƒВщЮщƒAмй–M й+…A…йrI й&эй&э& RУgУ йБчйї їй$E йƒђƒЙу*@ йёНƒЙу9С*@ й+—й?јйˆй™ЈƒХрйjA КБчКБчЧчйЯйOњdњйљO йБчй†S йІйЯйžJ й&ыƒ™Јƒ™Јƒ™Јƒ™Јй7іLійљO йOњdњйЏѕƒЏлk? ;у+—ф€Ш”КёЇB ƒƒ†ьƒы§ƒеъй+—Ш” й„N ™N йћN ™N ƒ? Ћ? и? ƒƒƒƒƒЬ----------ƒƒ”Ч-{V & ƒЊV …т—c ›wkc -& щ‡­њЩэЩэƒƒƒƒƒƒƒ-˜d ќхМЬ-ММЬƒ& & †b >ь-& щЬ-ЬЬшёьW›w-ЃA Ь-& ----& ь] Щэˆ` ƒ& ь--& ЬММММъїЩэЩэЩэ] UL ] ММјd џ FЭk ?EEЭk ? 6M|Џl ? KБкg  X”пg ? f™Ўлi ? xпџe џ €žЌRSџ€žžХџ €––в€ €••6?@€Љ€..w*@€$$ѕ?@€  ѕ?@€ i ?@€ р?@€Ј ?@€Кў?@€И?@€ц ?@€ƒџ?@€бџ?@€ш@€  Ђ г@€!!Ѓ@€"""™?@€'џ€,(-Эe ?€/B€0//Ф €1@@›f (€16>Wf (€222vf (€344Йf (€4>>В?@€5{ ?@€7TTА?@€:dd"?@€=ssџ ?@€@vve?@€Cuu?@€Err?@€Gttј ?@€Hpp-l ?H €Iqq:?@€LRRa?@€Niilў?@€Pjj??@€Reeй ?@€Tff7?@€Vgg…?@€XhhP ?@€Zkkћ ?@€\llH?@€^mmS?@€`nn, ?@€dVZ, ?@€j\bфk ?€mOOж ?@€nwwwl ?(€o{{Ml ?(€pzzi?@€sЖЖa?@€uЛЛЋ?@€wККџ?@€yММ ?@€{ННб?@€~ООUm ?H €СС+m ?H €€РР`n ?(€€веЯl ?€ƒГГ­ ?€„ФФЮ?@€†ИИг?€‡ЫЫƒm ?(€‡ЦЩ. €ˆзз| ?@€‰ЙЙџm ?(€ŠЯЯ4n ?(€‹ааЋm ?(€ŒЩЩ“n (€ее‹?@€††?@€’‹‹Ъ ?@€”ŒŒ— ?@€–U?@€˜ŠŠ&?@€›ŽŽ-g ?€žƒƒbџ?@€ ‰‰bџ?@€Ђˆˆog ?(€Ѓ‘‘”g ?(€Є’’Йg ?(€Ѕ““h ?H €ІЅЅj ?@€Љžžo?@€ЋЁЁ[ ?@€­ЂЂ?@€АЃЃ@h ?H €БІІѕg ?€Д›› ?@€Е  gh ?(€ЖЉЉџh ?(€З­­кh ?(€ИЌЌh ?(€ЙЊЊЕh ?(€КЋЋ"?@€Нфф+ ?@€Пщщ— ?@€СшшК?@€Уъъь?@€ХыыЊ?@€Шьь“j ?H €Щяяaj ?H €Ъююјi ?€ЭссШ?@€аццж?€бїїЩj ?(€бђѕ ?@€вчч=@~lH—?JNBA@BCўDFEIЙLРQЦKЦOЫPzGRMgYчS‚Zё[BWTUVlXл\џ]^w‚ge”`”fёaBbc_dўgjkihR€it‚l%uёxBnmopўqsrw|—vžyžzЃ{IŠe„Уƒ …‡†‰ˆƒƒ‡эiяe эiƒ…ƒ“ўƒbƒпўƒaƒЊƒ­џƒ) ƒyƒ…йККƒ„2‚f 6f ƒ„2‚f 6f Кјd e йљf ‡%жf йƒF1’‡F1’‡ ›1’“F1’‡(./(.%& эiƒ…ƒ“ўƒbƒпўƒaƒЊƒ­џƒ) ƒyƒ…ƒ„2‚l ƒ„2‚I f 6f КЭk e й˜l %эiƒŒƒлƒ3џƒћl йККƒƒКЏl e ƒƒn љf ѓn й`ЪЬвm Лn эiƒЃЁƒы ƒLg ƒ|ŸйКККg e ƒTƒƒЬЬ-эiƒ”ƒ йККƒКпg e ƒƒЬ-Ь-эiƒS ƒCЩƒхƒ4j йККƒƒКлi e ƒn !j љf йЬЬƒk эiКe RSКvDe Ze bЕС›wvDvГŽЌi vГŽFi vГŽ!i vГŽri t›С33њ?i((uqi€€ЯЏС.q С yXq i K€ИŒ• m3 щšim€€Ђѕ m##м§ m$$Й m  Ђd m%%‰* m""tGe m!!є mt›4@m34uq4i@m€€ЯЏ4С@mбС@mбС@mбС@mбС@mцС@m ;=~#i@m HJіi@mvx i@mrtfС@mGС@m ")%С@m#%AС@m46J!С@m>@С@mEGSС@m ADІС@m#7:i@m%KM]i@m'NPhi@m)QS&i@m+UWei@m.X[i@m1\_n"i@m3acк i@m5df†С@m9'+ДС@m;,.="С@m>/2Ѓi@m@hjЃi@mEkp=q СmH"@mJЈЈ, @mMЉЉ@mOЇЇНй@mRЎЎџ@mUЏЏO@mW­­ж@mYЋЋ3@m\ЌЌчŠ@m^ЊЊ@m`œœњ@mcЗ ?@me››Љ@miААTŒ@mkВВf@mnГГ*@mpББ<$@mrЅЅn…@muІІ @mwЄЄ%?@myŸŸђ@m|  э%w@m~žž@mЗЗъ@m„ДД>@m†ЕЕ @mˆЖЖ }@mŠЂЂ$!@mЃЃŽ@mЁЁœ!iHm‹‹"iHm‘——#ц@m’˜˜bi@m“biHm”‘‘u!i@m•ŽŽu!iHm–™iHm—••јiHm˜““рiHm™’’S i@m›‡ˆS i@mœ……cq imŸ‚‚tС@mЁ[]*С@mЃGIŸС@mЅMOŸС@mЉSWF&d@m­mq6С@mЏacƒ%d@mБd@mГuwї"d@mДППЫС@mЖgiКС@mЙ@C&#d@mЛ‡‰‰ d@mН{}Б%d@mПƒIdHmСйлqdHmУщыЎ!dHmФ№№Њo d@ mХЕЕЊo dH mЦББ:dHmЧЭЭšdHmЩХЧ@dHmЫсуЕdHmЬггњС@mЭ<<а!d@mа4o Сmг559dHmе—™)d@mиЃІ­d@mкŸЮo d@ mмЙЙ€d@mуі§Сd@mцЊ­q С(mч  щš4i@mч€q/eBppl*л+џ,! џ"#$%&'().D-U‚{ŠYWfXMSRQlPлVџUTNO;9:EџCDLJKB@A2J0q18њ6K753ћ4K<q?=ќ>KGhHIFQ•seqed[]\Z_lcл^џafge`tvuџyklwbnmphoij,xrzf}ч+AЄКFЊ#FЪТ6Q€”ДЮx›]%ЁiƒFEFFЁЯFЪТ@FŒF˜F3&Хс˜ŸХс‰ЎŸХсЁ™"Хс!Хсї•ŽНХсВтХсЄХсЁЬ™Ьі‰ŠŠ2ŠК.q ЯЏК†НЩСНВr рЙНШН9s bЬНTs ЉЯНЫРНУХНіr бНдНŽЦНЃq ЕЬНЮНЦ“s ѓТНЧгНВs ўМНEзНmдНor CУНtФНЪНшq цШНZбНссQвНѕs щбНЫНшжН4аН/r ёЪН АсйŒxзЕˆ!ЬЬzq КXq uq‘ŽНMŽНЛŽНЛŽНЯѕc&ŽНВNo VŽНž%ŽН4ŽНйяŽНдŽНцK#ŽНЄ ŽНг%ŽНМIp ƒ“ЬМ/Сo шМњo ƒ“МйŽНя!КŒ•t›й€ƒb№Hƒb№йхo йŽН—p Зp Эp уp љp ƒb№i)q П l„„=v • КЫуCl †Итw ‚(!ЏДB2 0йŸŠ•0џџџџRS0йй w l0††ф& 0‚‚' 0Х&џ 0~~St  0€€?t 2 0}}0•@0ПП’v l@"0ТУЙK•@0СС7l@0ФФJv •0 МОєv l(0 ЩЩлv l(0 ШШСv l(0 ЧЧ w l(0ЪЪ?K‚B0••?K‚B0””ЗU‚B0™™y ‚(0ЕЕx ‚@ 0АБеx ‚@ 0ГГ•x ‚@ 0ВВQZ‚0ЃІ„Y‚0ЈЈЮB‚0ЉЉ№.‚B0““„Bl@0!ŠŠaO‚@0$‘‘\‚@0%——5w l0(ˆˆЗw ‚0+ЎЎЊ?‚0.ЋЋчYl@02Ч:‚05ЌЌhy ‚(06ЖЖkIl@07‹‹цt @0=чьu •H0>ђђƒu •H0?ћћƒt @"0@но?u •H0AѕѕЃt H0Bссжu •H0CФt H0Dффўu •H0EІu •H0Fўўv •H0Gџt •H0Hяя^u •H0Iјјft 0LклŸŠ4•@0LКЛRS4@0Lйй w 4l@0L†‡U9vЏ Bqql;C$Џ!В*q'q" #—&ž(ž%Ѓј)wqБ:28.p0q2q+6,/l7л-џ4135cv xv ƒйƒЉv К=v ŸŠƒ›wйaKй…DйFy ax {x Љ(Љ(йш'(ЏYњB/Xw й†O•OйКуC w йи,§,йб?Їw й,yw Zйб?Їw Fy К67G7]7f7z7ЬЬМSЬМЬМЩэЬМЬЬКB2RSРy  jчГy џ ьhбy  jj8§v VVРy 4@ ьэ<`2 туža ŠŒчz 2 ЫЮФz 2 ФЧЁz 2 ЛОz 2 Гǘ` €‚^z 2 Њ­ { 2 жи>О{ ==Q 4y@HIуy4@КЛPbvHWWїbvHmsB| vH ЋЋkbvHffŽbvH bbЎbv@ PPœcv@ ЁЃYcvH€‚YcvH–˜YcvHŒŽ"| yJJp| v@ ААЋ| v(ДДFd@УЧзby@ dv@ щcv@#єїcvH&шы:cvH(суг{ +ММ,d@,ггid@-нн№{ y(.Q| @y y   {pyylл ‡iН2‚#‡ƒМЬƒиЦƒjнƒ{cƒWнК| Q йž| ƒi„2‚йƒпўƒbч йУ ƒsКТ{ уyйй.ЏЂI !vНщš” 5c]v IТ' s‚ t”qz„ (…7‰† (ŽR_RSŽ””МŽRRР Ž^^tG Ž]]Cє Ž``K~ |H ŽІІгf{@Ž™›Б} vHŽŽ‘ј~ |H ŽЋЋЬ} {HŽžžg~ |H Ž ЇЇˆ~ |H Ž ЈЈШ~ |H Ž ЊЊj@Žƒzev@Ž““d} vB ŽŒŒЋ~ |H ŽЉЉ#~ {H ŽЅЅ  |ŽЎЎі| Žxx= |ŽЏЏ~ v@ އ‹~ {@ŽЁЃх} {HŽ   іf{@Ž"•—_€ v(Ž#КК?€ v(Ž$ЙЙЁ€ v(Ž%ММ€ v(Ž&ЖЖЯ v(Ž'ДД„€ v(Ž(ЛЛ'€ v(Ž)ЗЗЏ v(Ž*ГГѕ v(Ž+ЕЕˆ v(Ž,ВВl |(Ž-ББЇj@Ž.„„й‰ ?HŽ/vvі‰ ?@Ž0wwŠ ?H Ž1yyC‰ сHŽ2ppC‰ @Ž3nn(‰ @Ž4mm(‰ HŽ5ooЕ‰ ?HŽ6tt‡‰ HŽ7rra‰ HŽ8qq;k@Ž:ff;k@Ž;ee}Š ?@ Ž@…Іgо@ŽBjj:Š ?@ ŽDz|`Š ?H ŽIƒk@ŽKkk™Š ?(ŽLМŠ ?(ŽMŽŽ‰ @"ŽNhhe‚@ŽPяёe‚@ŽRљћe‚@ŽT^i‚@ŽVшъ0 ‚@ŽXп€ ‚@ŽYгг ‚H ŽZййљgv@Ž\ЫЬН€ vŽ_ФФ‚ ‚Žb$$f‚@ŽdV ‚@Žf-‚ ‚(Žg%%а ‚(Žh!!Ћ ‚(Ži  ѓ ‚(Žj##† ‚(ŽkN‚ ‚(Žl&&юe‚@ŽmаачhŽnMM=gŽtEK„f}Žx<@!kŽy(ƒ HŽzгг„ @ Ž{Їƒ H Ž|єєi@ŽТЦСhŽ€Уƒ H ށјј•e@ކžЂ•e‚@Ž‹ЄЈ|hŽŽADMƒ @ސзйBfŽ’9;oƒ @Ž”нпx‚ ‚Ž—––E„ Ž›*iHŽГЕ_g@Ž дd@ŽЂ  ’„ ŽЅ&h@ŽЇТg@ŽЊТg@ŽЎЪ„ @ ŽЏ##… @ ŽА&&h… ?@ ŽБ))Я… @ ŽВ++№„ @ ŽГ$$ј… w@ ŽД,,† @ ŽЕ66@… ц@ ŽЖ((Ё… @ ŽЗ**Ђ† ŠŽКTTєi@ŽНVVgй@ŽПZZцj@ŽСYYЧ† @ ŽТ\\‡ @ ŽУ^^ю† @ ŽФ]]Аd@ŽХWWŸg…ŽЧNPрƒ @ ŽЩќўЩj@ŽЫМОЂiŽЭ  Єh@ŽЮЪЪBi@ŽЯЯЯеe@Žбух^f@ŽещэЏ‡ (ŽжffR‡ (Žзccs‡ (Žиdd9‡ Œ(Žйbb|ˆ (Žкmmй‡ (Žлhhќ‡ (ŽмiiВˆ (Žнoo$ˆ (Žоkk^ˆ €(Žпllаˆ (Žрpp•‡ (Žсee‚i@ŽтЌЌRS4@ŽтRS4v@ŽтТУRS4‚@Žт”•RS4@ŽтvwМ4@ŽтRSW ?@ Žт.6_”Ij*{{ l лџ џ)(&#'"% ,$!’56>Є8E;#10.2/l4л3џ2+,-9:7<=B’]GF@Q{D{EBA@l?лCџIJOMLNHKџP‚“sb§]f\Ѓd~Y€lлVџ_a‚ƒX[}WUZc`T^SDR|ё‡D…†ђ„E‰qŠŒѓFˆ‹бŽV‘„gкjŠiЃhefkollлrџmsnp–qV•†tus{Ew#vxzyƒƒzq АсХсссˆЯёЂVч~ } Nj-} I} ƒ€} Ÿ} ƒƒ€} КЂIRSКЂI` йЬˆЯƒUкˆЯlъƒАсƒƒАс—ќАсЬч~ АсйŽxŒзЕˆ!ЬЬj йѕђ ѓ-ѓFѓƒb№йj ˆЯєє ѓѕFѓƒb№lъзŠ ƒPeƒъƒ7eƒеъъъ щЕСэК]RSКg sƒ7eƒЫig…ткt›wЕСƒйƒjѕєє ѓѕFѓƒЬЬh† йАсƒЕС—ќЗA Ѓ‚ ЬХ№эъf“‚ эы§f“‚ ƒjѕссƒ˜ЩƒG† й:еК sRSК sg„ й€йЬЖ„ йњdКz„ RSƒч~ НUкНUк$Ь—ќŒ… …тqћ›wW Ь-К‰† МэЙНƒb№йjѕžSАс-ƒjѕй „ ƒы§ƒЫiƒйƒUкƒUк$Œƒ ƒ щ щЕС˜ˆ Ь›w›w=ˆ ›wъˆ xћвФ  у§–С [ Т  ЭытЛ V +й і БВ  3h‹фМ V A№ оХ d MЕ Э L  W› Ў ЇЅ - `юўpЂ  eІБЖИ  j~‰чА  oЪе*Ђ I t‘œw’ ў yOZŒЌ  ~grЧ‘  ƒ;F  ˆ{†3 I ёќёІ  ’}  Ё —ЃЎљ’  œншёЌ  ЁšѓЃ ѕ ІЩд_Њ ’ ЋЮйПЅ  АcnŠ‘  Е'2A“ ю КтэAЗ › ПЗТo I Ф’“Е ‰ ЩjuЊ  ЮS^  г$,Ÿ  иКХU›  пœЄ  шзщhŸ  э64Ѕ  іОа(І  ’ЊsЙ   6 Щ  Ў Ц “Ј г )FX9В э 2}ЃУ Ё ;–ЈІО  @šЏ^Є Љ Gƒ“ќТ  Q ” Ž Љ \_v™Ž e af|цŸ  j-?…œ  tЏТJШ  {ЖЦ9ž  ‚+8G  џ ‡?JЁ›  ‘9 L ;”  Ж:(ѓ›  ЫмЋЩ  вЇЗЄ­  л‹Ў § рОб8Ж  ч _А 6 і 2 5Ї  §@]ЎЂ № є  С f z жŒ v uˆџЎ  (= _ оЋ  +$RТ o 6m„–’ ‚ <Ытa ‚ N„ Ї ф  SЭž С _ &Є Т nx – Њ ˆ y Д mŒ  ~/G‰“  ‰Л в џ“  ŽN_tЖ  œS q (Ў  ЈћНЁ  ­щє0Ј  ВичФЗ  МЄЗ•Њ  ЦЩмјЊ  Э.J œ С вQagР  зБТО ’ ођbЁ ќ ш {П G ћ : С ? ?OџД  ;MoЕ E Vk\И  #8ЎШ  "4†Г  (§  O‘  6ђ ВЃ  DЃСсŽ † Oд ы Ф  Ze } т   cTfCЁ  hr‰тЦ  vA ^ BЏIvSSђЅЉv++C›v::|}v??ВЃСvщщнћПvџџџџп­-vџџџџЂ?vƒƒЂѕ vзџ vCєI vв~dHvќќЁOHvћћ‘r@vііƒ Hvїїэ˜LHvѕѕХ @ vыюъФ v ццKНOHv љљ[Х ‚@ vёёДХ L@ vѓѓ†Х ˆ@ vђђ6Х ‚@ v№№hЎТHv*ЏкHvеO@vЃ GHv_ГOHvЬС @ v ЋС Yvч“EHvёС Y@ v+Т G@ v &Ш @ v еч?’Hv!ъъ}@v"щщџЧ v%ааЫ@Hv&ѕ ѕ аІ@Hv(є є tМ@@v*я я ў‹@Hv,№ № QБ@Hv-ю ю М ž@ v-с ц ѕЛ ›v0м м §rVHv2ђ ђ ~М V@ v3ъ ъ НМ V@ v4ь ь 7М œ@ v5ш ш ]М V@ v6щ щ М @@ v7ы ы пВ @ v7ptšŒHv8ŠŠ.m‘@v9‰‰ТВ јv<kk&Г Hv=}}XГ иHv>ƒƒљВ Hv?ww)Ѓ‡Hv@ 9‡ˆHvB .•I@vD  ЉˆHvF  рБ_HvG  Н ž@ vGјћљМ IvJѓѓР}уHvL  ЯН  @ vM  ?Н [@ vN§§_Н Ÿ@ vOўўЄН I@ vP Н I@ vQџџ*ЄFHvRЬ Ь ИЋFHvTЫ Ы Ј•E@vVЦ Ц ЇКFHvXЧ Ч SnEHvYХ Х Ц С@ vYН П яХ cv\И И іFHv^Щ Щ -Ц С@ v_С С mЦ С@ v`У У PЦ С@ vaТ Т ЕHvb­ ­ ›œЁHvdЌ Ќ РК@vfЇ Ї dHvhЈ Ј 4œHviІ І хЁ ,vlž ž дŽHvnЊ Њ CЂ @ voЄ Є Ђ @ vpЃ Ѓ wžHvq§§—Ђј@vsїї—Ђ-@vuіі—Ђ-@vwјјOС  vzёё pž@v|ћћ pž@v~њњ p-@v€ќќ6ЉHvААcЄHv‚ЎЎ‰Ђ nv…ЉЉ#wЄHv‡ЏЏVЉЂHvˆˆˆц”Hv‰††гИ vŒmyHvއ‡–Hvдд‡ЌHvввˆШ v“ЭЭЎyHv•гг`{’Hv–››9{œHv—™™ђН ’vš””ц•’HvœššИ|HvYYтиHvžWW“Ц иvЁRRˆЇHvЃXX4ЂHvЄqqяHvЅooОЦ vЈjjДtHvЊppŽЁHvЋEE7žHvЌCCwУ žvЏ>>§ИŸHvБDD}ДHvВ……хwHvГƒƒџЅ vЖ~~ˆ)HvИ„„~IHvЙћћЊ‚IHvКљљK IvНєєЄsIHvПњњQЊ”HvРгrHvС   Ї гvФšv HvЦђHvЧ­­‚шHvШЋЋ–  vЫІІСЕHvЭЌЌ<‰HvЮччйtхHvЯхх“ MvвррsnHvдцц†ЈЂHvе™™wHvж——EЙ vй’’ТЉHvл˜˜юƒHvмггГ™ HvнббПБ vрЬЬuŽ:Hvтвв)ŠHvуииHvфжжtЊ vчббy‚žHvщзз=~ HvъmmЧгHvыkkйЅ АvюffВЃHv№llvЙMHvё119—Hvђ//Л  vѕ**еyгHvї00ФАHvјььipHvљъъ_“ vќххЈГрHvўыыvЂHvџССо}HvППžЗ vККў€›HvРРК‡?HvœœЭ‹IHvšš’ Iv ••шВIHv ››РšHv tt*Ў4HvrrГЕ vmmœ‰Hvss–› Hv]]ŒHv[[5Њ ˜vVVžnHv\\еuHv##ф‡џHv!! Ѕ  vђŽHv!"" ŠЁHv"ФФЩЁHv#ТТDŸ v&ННBvHv(УУ„ЎУHv);o@v+6ƒЦHv-чšHv.u›  v19Hv3.ЇHv4шшљs@Hv6чч7ИЂ@v8ттu“гHv:уу3™Hv;ссЙЄ tv>ккœЉHv@ххтЄ в@ vAппКŸ џ@ vA$2ѓ†HvB55Ђz@vC44‹Ÿ  vFЮmЬHvGЯЯ]ЕЊHvIЮЮRz@vKЩЩЗЅHvMЪЪыЇ‡HvNШШOЅ vQСС› HvSЬЬvЅ @ vTЦЦћuHvUЉЉСxгHvWЈЈя—@vYЃЃ6n Hv[ЄЄdЗгHv\ЂЂ^І г@ v\šœ=І &v_••˜*HvaІІƒІ @ vbžžЯІ ˆ@ vc  ЊІ  @ vdŸŸБМUHve5 5 еŸМHvg4 4 б–@vi/ / ƒšЂHvk0 0 юЖHvl. . ЏЙ Ђ@ vl " ‹Й vo  =”Hvq2 2 sК @ vr( ( ъК Ђ@ vs+ + ФК @ vt* * ›К @ vu) ) К @ vv% % OК Ђ@ vw' ' Л @ vx, , зЙ @ vy$ $ 'К @ vz& & ЗmHv{Х Х ц{Hv}Ф Ф ]Ž@vП П DЙHvР Р {Hv‚О О ,Щ @ v‚Ж И Щ v…Б Б }›Hv‡Т Т LЩ @ vˆК К ‹Щ @ v‰М М nЩ @ vŠЛ Л Л›Hv‹WWйvHvVV“m@vQQ@ЗHv‘RR€{Hv’PPЏЈ v•IIС•ЈHv—TTзЈ —@ v˜NNАHv™ŽŽВHv›‘@vˆˆКИHvŸ‰‰uzКHv ‡‡WВ vЃ€€MmHvЅ‹‹В  @ vІ……0z/HvЇЇЇкЅHvЉІІДW@vЋЁЁіŸWHv­ЂЂЅЇHvЎ  ОУ RvБ™™sHvГЄЄхУ R@ vДžžєО §@ vДЂЋ…EHvЕЎЎџ{@vЖ­­ЧО vЙN–HvК’’^А@vМ‘HvОŽŽ œHvПŒŒwЄ vТ††zЉЂHvФK•HvХ“ “ .†HvЧ’ ’ ‡п@vЩ  5БHvЫŽ Ž ƒHvЬŒ Œ У лvЯ„ „ ГІпHvб  0У ‰@ vв‰ ‰ TУ 8@ vгŠ Š №‚HvдuuБrHvжtt<Е@vиoo—hHvкpp>­HvлnnMŽ б@ vлgi(Ž ДvоbbІHvрrrИŽ @ vсllvŽ ƒ@ vтkkЈ @ vтnxКЏHvу{{пx@vфzzнЇ vчiizHvш>>г†яHvъ==ЛЙM@vь88№‘Hvю99ЯЌHvя77§Ÿ vђ00В~Hvє;;   @ vѕ55>HvіССъoHvјРРЛС@vњЛЛxxСHvќММ^ эHv§КК›œ СvВВЯŠHvООНœ @ vЗЗнœ в@ vИИЏЌHvХХPt@vРРСHv ССЃHv ППcШ v ЙЙм™HvУУ‹HHv77sС Pv..ŸU@v66Ÿ\@v55Ÿ^@v44ŸZ@v33m„HvII\  vBBЋ…@v!HHЋ…В@v#GGoКHv$K K :КФHv&J J Д@v(E E йƒHv*F F bбHv+D D Ў› v.< < G}?Hv0H H Ч› .@ v1A A м› Ь@ v2B B i” С@ v2Bcš“Hv3''€­@v4&&L” Xv7==3— Hv8ДДh— Hv9КК— Hv:ЎЎоš ЈHv;› Hv<  Іš ЩHv=‚•  Hv>„„'– Hv?––b–  Hv@œœё• СHvAЛ• ]HvBŠŠN• HvC~~š– ZHvDЂЂЭ– HvEЈЈ˜ ЧHvFЬЬ=˜ HvGввЮ— HvHЦЦš— eHvIРРД”  HvJllъ” _HvKrr• СHvLxxƒ” HvMfft˜ HvNиим˜ ЬHvOфф™ жHvPъъY™ HvQ№№—™ ЩHvRіів™ ШHvSќќ­˜ СHvTоо7š ЯHvUpš ЩHvVš HvWЗŸHvXжHvZЗ@v\ўўPКHv^џџhЏHv_§§fЋ @ v_фюCЋ vbппЄА­HvdЖЋ @ veёёЄЌ  @ vfіі]­ @ vgњњ7­ @ vhљљѓЋ @ viђђ=Ќ @ vjєєЫЌ п@ vkїїЌ ;@ vlѓѓЋ @ vm№№­ @ vnјјkЌ @ voѕѕ‚­  @ vpћћМБHvqЖЖЩn@vsББЇВHvuВВшˆHvvААШЩ vyЊЊтЂHv{ДДЃSHv|œœJ„Hv~››МU@v€––n–Hv‚——\ИHvƒ••О­ Dv†ŽŽgЖHvˆ™™ф­ @ v‰““}О @ v‰ЦЭ!“HvŠаао›§@v‹ЯЯQО vŽССsБ›HvŸŸа‚@v‘šš МHv“››TuжHv”™™PЖ  v—““х„Hv™ўЅHvš1 1 tmHvœ0 0 y|@vž+ + ЭЇ0Hv , , ŠЖHvЁ* * —А @ vЁ ! uА vЄ  Ў‹HvІ. . Б @ vЇ$ $ UБ @ vЈ& & НА 8@ vЉ# # Б @ vЊ( ( +Б @ vЋ% % {Б x@ vЌ' ' [Ї Ј@ vЌHLЌ}БHv­\\ˆ@vЎ[[BЇ  vБCCqЇ HvВOOœЇ HvГUUШЂHvДЬВUHvЖЕ@vИ`ŒПHvКW‡HvЛџџСЂ vОїїЅЖHvРЃ B@ vС§§рЂ @ vТќќОHvУy y Љ„‡HvХx x ъЄ@vЧs s yHvЩt t v™ HvЪr r 2 vЭi i кЙУHvЯv v P @ vаn n l  @ vбo o ‰ @ vвp p  I@ vв}„{ŒIHv㇇ЃqI@v䆆юŒ vvзxx\ЙHvи^ ^ ыЗHvк] ] щА@vмX X ДŠœHvоY Y ]}HvпW W 1Џ @ vпE L Џ jvт@ @ †ŠHvф[ [ TЏ @ vхN N sЏ @ vцO O иЏ @ vчR R јЏ @ vшS S А g@ vщT T <А @ vъU U —Џ Є@ vыP P ЗЏ @ vьQ Q !”Hvэ##оД v№•pƒHvёƒƒHВЎHvѓ‚‚hЌ@vѕ}}+„$Hvї~~Р”FHvј||ŒТ E@ vјuwiТ Gvћpp=s•Hv§€€ГТ Р@ vўyyгТ C@ vџzzЖ’ @ vџгз)ЋСHvссXœ^@vрр ’ vЮЮЩ’  HvккыГ‚HvІ І –ž‚HvЅ Ѕ ;ˆ‚@v     šЋ‚Hv Ё Ё œЕ‚Hv Ÿ Ÿ ™ ‚@ v Œ “ w ‚v‡ ‡ Ё”‚HvЃ Ѓ ‘ ‚@ v– – )’ ‚@ vœ œ Ѕ‘ ‚@ v™ ™ ’ ‚@ v› › П ‚@ v• • g‘ ‚@ v˜ ˜ L’ ‚@ v  ч‘ ‚@ vš š ,‘ ‚@ v— — Ж @ vёЉƒHv’@vпЕ v Р зHv!%%YМŽHv#$$№‰Ž@v% КŽHv'  Ф„ŽHv(ZЛ @ v(<Л Žv+{uŽHv-""ПЛ @ v.|Л @ v/ Л Ž@ v0K†,Hv1• • GpHv3” ” кl=@v5  yЋ”Hv7  ѓœUHv8Ž Ž т @ v8€ … Н v;{ { ™‘Hv=’ ’ }ž q@ v>‰ ‰ Pž Р@ v?ˆ ˆ ž @ v@‡ ‡ Єž Ю@ vAŠ Š пž џ@ vB‹ ‹ Ÿ I@ vCŒ Œ ^ƒ‚HvDГ Г  ‚HvFВ В F‚@vH­ ­ lН‚HvJЎ Ў Уˆ‚HvKЌ Ќ т ‚@ vKЅ Ї Р ‚vN    Ж‚HvPА А ( ‚@ vQЊ Њ  ‚@ vRЉ Љ БŒ @ vR7C vHvSFFvЁ@vTEE‰Œ vW22nHvXб б 7ОLHvZа а ”џ@v\Ы Ы ЧДHv^Ь Ь ё~PHv_Ъ Ъ Н“ ;@ v_У Х “ JvbО О ‡†HvdЮ Ю ” @ veШ Ш с“ @ vfЧ Ч "Й Ђ@ vfV[›ЛHvg^^Ї@vh]]ќИ vkQQЙœHvlp p к­Hvno o —™@vpj j мp›Hvrk k eHvsi i ЈЖ Џ@ vs[ a ˆЖ vvV V ѕHvxm m ѕЖ @ vyd d ЬЖ @ vzc c З  @ v{e e [З Џ@ v|f f }З @ v}g g +ВHv~“~AHv€†—@v‚  уДHv„#ЛўHv…  `Ў Љ@ v…>Ў vˆўўP‹ HvŠЕЎ @ v‹  жЎ @ vŒ  †Ў @ v<‚HvŽѓѓЫЁ v‘ьь’Б@v“ђђ’Б@v•ёёpЈ @ v•ру"€–Hv–ццнК @v—ххJЈ všллSЂЁHv›ЖЖj˜ HvЕЕƒКЁ@vŸАА„•HvЁББѕЙ HvЂЏЏрЗ ЁvЅЇЇƒГHvЇГГ6И @ vЈ­­И @ vЉЌЌ6u"HvЊлл‡ВHvЌккhВ‚@vЎееЄˆHvАжжkr HvБддЌЊ vДЬЬБ–HvЖииЯЊ г@ vЗббЋ @ vИвв%Д @ vИ69юŠHvЙII/š/@vКHHѓГ -vН11TД HvО<<œД HvПBBZœ С@ vПY]ГСHvР``ИС@vС__,œ vФTTЪ @ vФЙОk†HvХССژ@vЦРРёЩ vЩДД.…§HvЪbŠ’@vЬќќЕ§HvЮ§§ŒЃ7HvЯћћ.О 7vвѕѕ“І§Hvдџџ/HvеtЅHvзВŒ@vйHЛHvлдœСHvмrЁ vп  /qHvсŽЁ Ё@ vтЄЁ @ vуX-Hvф9 9 }Л_Hvц8 8 ­˜_@vш3 3 œo_Hvъ4 4 Ы’_Hvы2 2 БП G@ vы % П Gvю  –t-Hv№6 6 їП G@ vё( ( жП G@ vђ' ' œР –@ vѓ, , тР –@ vє. . Р –@ vѕ) ) |Р •@ vі+ + РР –@ vї- - С –@ vј/ / ?Р •@ vљ* * +С –@ vњ0 0 ?ЖІHvћNNй ?@v§IIЌРHvџJJ]s?HvHHт ?vBBYˆпHvLLqt8HvLLЩ‰HvKKцŒv@v FFPЁHv GG}Hv EEЕ v>>ѓzHvIIGЕ @ vCCNП G@ v^g7GHvjjя’E@viiП EvYY–И Ѓ@ v+4žHv77RŸ@v66sИ v&&}Hv33чЕHv 22ЪŒ@v"--#ЖHv$..яМHv%,,ТШ v(%%EŠHv*00тШ @ v+**ŒHv,  mЇЭHv.  ьІ@v0 f­Hv2 yvјHv3  ˜Г ‘v6 „Hv8 ЖГ @ v9  дГ  @ v:  gЈ‰Hv; ГНФHv= ‰„@v?  HЏЇHvA  Ш—HvB  HЃ ј@ vBњ ќ $Ѓ лvEѕ ѕ o‹\HvG  Є @ vH  ЯЃ @ vI pЃ @ vJў ў 3Є t@ vK  ’Ѓ t@ vLџ џ 9ŽЬHvMРРƒЎHvOППўv@vQККХЄHvSЛЛв€ЉHvTЙЙ*Љ @ vTЋБЉ evWІІПwHvYННЃЉ г@ vZЕЕюЉ @ v[ЗЗWЉ  @ v\ГГЧЉ @ v]ЖЖ}Љ ‰@ v^ДД АHv_ъ ъ AГHvaщ щ Ѓš@vcф ф •fHveх х ѕЌHvfу у  @ vfм о іŽ viз з rHvkч ч c …@ vlс с < †@ vmр р TžтHvn| | дНLHvp{ { b—‡@vrv v Є—˜Hvtw w –xїHvuu u NФ ˆ@ vum p &Ф ‡vxh h wŸˆHvzy y zФ ˆ@ v{r r ЉФ /@ v|s s HqHv}eeL…HvddBЄ@v__—|(Hvƒ``Q‚ВHv„^^ћ  v‡WWЩЗџHv‰bb Ё @ vŠ\\В @ vŠz…ЁД Hv‹ˆˆ,М@vŒ‡‡цБ дvuuлsHv] ] cšHv’\ \ аМ@v”W W ™Hv–X X 8 Hv—V V Ч @ v—I N љЦ všD D гzHvœZ Z CЧ @ vP P ИЧ @ vžS S iЧ @ vŸQ Q “Ч @ v R R лЧ @ vЁT T BЏ4ž@vЁКЛBЏ4I@vЁёђBЏ4@vЁноBЏ4@vЁjkBЏ4Ђ@vЁBЏ4@vЁтуBЏ4Ÿ@vЁ;<BЏ4 @vЁSTBЏ4Ђ@vЁ~BЏ4C@vЁЮЯBЏ4 @vЁ‘’BЏ4I@vЁ’“BЏ4‘@vЁЗИBЏ4@vЁghBЏ4ц@vЁ'(BЏ4ђ@vЁЃЄBЏ4(@vЁBЏ4@vЁBЏ42@vЁ{|BЏ4ў@vЁOPBЏ4@vЁІЇBЏ4@vЁcdBЏ4@vЁЪЫBЏ4@vЁЩЪђЅ4Ђ@vЁ+,C›4@vЁ#$C›4@vЁfgC›4E@vЁC›4 @vЁ:;C›4@vЁ@AC›4v@vЁuvC›4Ђ@vЁийC›4@vЁ/0C›4@vЁQRC›4@vЁVWC›4@vЁNOC›4 @vЁ./C›4@vЁš›C›4@vЁОПC›4@vЁC›4@vЁhiC›4 @vЁrsC›4@vЁБВC›4ы@vЁЫЬC›4@vЁЭЮ|}4х@vЁ?@ВЃ4Ё@vЁщънћ4@vЁп­4-@vЁюяЂ4@vЁA B Ђ4@vЁ9 : Ђ4_@vЁ;<Ђ4@vЁЖЗЂ4@vЁ‘Ђ4@vЁS T Ђ4Ђ@vЁƒ„Ђ4 @vЁЄЅЂ4@vЁзиЂ4@vЁд е Ђ4з@vЁєѕЂ4e@vЁОПЂ4ј@vЁуфЂ4 @vЁ’“Ђ4@vЁ-.Ђ4‚@vЁ„ … Ђ4@vЁFGЂ4@vЁ"#Ђ4-@vЁЃЄЂ4Ї@vЁ–—Ђ4G@vЁ  Ђ4е@vЁђ ѓ Ђ4@vЁЂ4?@vЁ?@Ђ4c@vЁЕ Ж Ђ4H@vЁmnЂ4@vЁTUЂ4@vЁЎ Џ Ђ4@vЁ= > Ђ4@vЁ ž Ђ43@vЁe f Ђ4F@vЁ› œ Ђ4@vЁ  Ђ4@vЁ  Ђ4Љ@vЁ_`Ђ4W@vЁ ‚ Ђ4‚@vЁ  Ђ4œ@vЁй к Ђ4@vЁx y Ђ4Ѓ@vЁ§ ў Ђ4@vЁЇЈЂ4’@vЁђѓЂ4@vЁ}~Ђ4@vЁ  Ђ4I@vЁ№ёЂ4@vЁЏАЂ4@vЁмнЂ4@vЁЛ М Ђ4@vЁЩЪЂ4ј@vЁЂ4@vЁћќЂ4Z@vЁ‹ŒЂ4С@vЁf g ОФwvЉ|y{zusŸtxrqуСƒ‚H…\†І€„~}­ТЇr‰ˆз‘й•І–“—”Ž’!Œ‹ЉВ›?˜žœš™оЅЄ"ЈІЉЋЊЇЃЁЂІ! ŸЪХВБMДЖЕАЎЏƒГ­ЌбМIП’ОџЛ{ЙКНИuЗБЅФУшС\ТІЧХЦРЁ•ЂЪIЩйЫџШ‰ИЮ‚ЭЯЬ—Авбга‹ЂжезІд”’кйлиŽЌонп쇑тсїу\ри“цIхЁчф‚ъIщ‚ы‚ш‘ІюIэяьO ђIёѓ№Žƒ’іIѕ†їѓє…Ќњ‚љўћј˜Ѓў?§ИџBќŠЊŠў–ЅIк‘ I  V†“I щ З‚’ŒIfѕ„Е‚ˆЊEtС’"I!#t ЂŸ&I%€'П$Ш›,I+)Š*Š-(КЄ3I5-2t0B14/ .UЈŸ9I68Ј7СНЅ?IA><t=С@;t:LПІHIG˜JLKFDWE"ICBгЙS‚R\ІY]ZUX™WV[QQOUPT4N@MЭЩdcfhgb`a”e_^ТЈnpmtkBlСojiмВv?xustwrFqХУ~€A}{|zyІО„ƒ‚ИЄ‰Iˆъ†t‡BŠ…еТ’Ч“\ІŽ‘Œ‹дŽšI™„ѓœ#˜–—›l•л”›Ёž Ÿ^РŸЇIЉІцЄъЅЈЃЂGпœЏIБšВПЎЇЌ­АЋўЊЕШЗЖ’ДЕИГ™žКЛXМ\НІОЙYЎ РIСзТцП§Г›ШIЪѓЫŠЧŠХЦЩФУI”ЯIЬЄхŠтŠуфлжкйзимнвабсџропцьчшщъDыяэёюDегдђЮEЭр›іѕBј‰ќџ§m™љўћњЅЋєЋђВѓ їџё№кЩ х­ЄB ‰  m ЇЎ‚ЖЖ‚\вА"?!"&B$‰(%)F'„  #УЩžЇ-I*./,+RМЂ5I87t4B2361u0–ц>I@ AПBЇ=;<?т:9_ŸŒFIC@E‚DЮЎM?LЄOBP‰UVQFR„STK IJЅNЋHЋGАЋX?WЫТ_^ea\bІ][\`ZY‚Ќ’fIcŠgѓe#dUСnIm%tѓp#xurw"sqvljkoihœ|‚yЇ{tzжžƒ‚‚†І‡…€™„~}_иŽI’П‘Ї“”•uŒŠ‹‰ˆBЯœI›$Ÿѓž#š˜™—–ЁŒЃI }ЂЁ@с“ЊIЉѓ­ŠЌŠЈІЇЋ"ЅЄЄ“Б‚ЎАЏЗЖИ‚ЗЛК\МНОЖ"ДЕЙГ~ВфЎХ?Ф)ЩBЧ‰ШУСFТ™ЦРП8ЏЁЫIЬ ЭСЪ ЈбЮ‰аBЯЙЗз‚кйждеиг"втЊртЇуBп‰ноHсmм†лЅЊч?фEшщцхGЂœэIъѕьŠыЋРёюr№ялОіѕѓєїђ$нЁ§IџСќњћўљuјЦП \ І   ! ООЩIƒѓ#=ДД‚  ,ЃЕ$!#І"šИ(‚%N'&УШ.0-+,/*)йГ6?8Ў95347=2„13Ч‘@I?ЩDtFBCBE>"<=A;Й:ФЃMLQtSBORHPmK†IJNHшGЛŽZIYf]ѓ\#XVW[UTаФdcЩfgb`ae_^HЬ mIolСjknihЊЁs?p^rtqВЦzyr|~}€x”vw{u№t 0?Ђƒ#"й#"& КвФ Ђй€‰Ђo “Е ЖИ  0?Ђƒ#"й#"& К–С Ђй€Т o  ƒКТ C› 0?Ђƒ#"й#"& КтЛ Ђй€(І “Е _А _А O‘  ƒКБВ C›ьЏˆџ 0?Ђƒ#"й#"& КфМ Ђй€Ю‰_Њ A“ “Е ВЃ 0?Ђƒ#"й#"& КоХ Ђй€Њy9ž ВЃ 0?Ђƒ#"й#"& КL Ђй€‰Ђ*Ђ  ‘(Ђ(1КЇЅ п­-p‘(-pЂ(-p1 "%КpЂ BЏIw(. "%КЖИ BЏ—y(. "%КчА BЏј(. "%К*Ђ BЏ –(. "%Кw’ BЏДЇ(. "%КŒЌ BЏˆџ(. "%КЧ‘ BЏ*Й(. "%К BЏь(. "%К3 BЏЩs(. "%КёІ BЏУv(. "%К}  BЏЏ(. "%Кљ’ BЏG(. "%КёЌ BЏЃ%(. "%КѓЃ BЏvˆ(. "%К_Њ BЏ›‚(. "%КПЅ BЏйЃ(. "%КŠ‘ BЏ§y(. "%КA“ BЏгГ(. "%КAЗ BЏ%(. "%Кo BЏ3(. "%К“Е BЏVў(. "%КЊ BЏh(. "%К BЏ(. "%К,Ÿ BЏgv(. ƒ#"й#"& КU› Ђй€ 0?Ђƒ#"й#"& КœЄ Ђй€hŸ  ƒКhŸ C› 0?Ђƒ#"й#"& К4Ѕ Ђй€ЇЅ  0?Ђƒ#"й#"& К(І Ђй€Ѕoœ”єo 0?Ђƒ#"й#"& КsЙ Ђй€pЂ œ”Ю‰‰ЂВЃAЗ w’ ЊyйЃ 0?Ђƒ#"й#"& КЩ Ђй€ќТ klЖИ  0?Ђƒ#"й#"& К“Ј Ђй€3  0?Ђƒ#"й#"& К9В Ђй€ёІ  0?Ђƒ#"й#"& КЃУ Ђй€ІО  ƒКІО C› ƒ#"й#"& К^Є Ђй€ 0?Ђƒ#"й#"& КќТ Ђй€І|G   0?Ђƒ#"й#"& КŽ Ђй€І|™Ž  ƒК™Ž C› 0?Ђƒ#"й#"& КцŸ Ђй€љ’  0?Ђƒ#"й#"& К…œ Ђй€Њy  ƒ#"й#"& КJШ Ђй€ К9ž ђЅ9Ÿe(9Ÿ}(9Ÿ‘(9ŸЂ( КG  |}Ь…‘(Ь…Ђ( 0?Ђƒ#"й#"& КЁ› Ђй€;” ѓ›  ƒК;” C›ѕХrХ?ХВХ5ЦФЌЦ ЧєП"ПЛРWТТЩТ УЬУТЗПŽУБСцСqЦNУФB™ С8РъОlСХžОRФ 0?Ђƒ#"й#"& Кѓ› Ђй€оЋ  Ю‰}  ВЃ“€ёЌ Њ ВЃІ|ŒЌ оЋ  ƒ#"й#"& КЋЩ Ђй€ 0?Ђƒ#"й#"& КЄ­ Ђй€Ў  ƒКЎ C› ƒ#"й#"& К8Ж Ђй€ 0?Ђƒ#"й#"& К_А Ђй€Њyъ†чА НЁ ЊyсŽ  ƒК5Ї C›јШЇ  0?Ђƒ#"й#"& КЎЂ Ђй€І™І™ 0?Ђƒ#"й#"& К  Ђй€ВЃВЃжŒ  ƒКжŒ C› 0?Ђƒ#"й#"& КџЎ Ђй€|}ВЃ|}|}ПЅ |}G  G   КоЋ нћ 0?Ђƒ#"й#"& КRТ Ђй€ВЃo  ƒК–’ C›Ѓ% 0?Ђƒ#"й#"& Кa Ђй€‰Ђœ”Ч‘ Ю‰ф Š‘ w’ ъ†O‘  ƒКф C› 0?Ђƒ#"й#"& КЭž Ђй€ѓЃ †0М( 0?Ђƒ#"й#"& КЄ Ђй€L Њy9ž Эž ВЃO‘  0?Ђƒ#"й#"& КЊ Ђй€L mŒ  ƒКmŒ C› 0?Ђƒ#"й#"& К‰“ Ђй€L џ“  ƒКџ“ C› 0?Ђƒ#"й#"& КtЖ Ђй€Њy9ž AЗ ВЃO‘  0?Ђƒ#"й#"& К(Ў Ђй€ВЃј~Г КНЁ ВЃЌБЅ"ЌБч1 ƒК0Ј C› 0?Ђƒ#"й#"& КФЗ Ђй€0Ј п­ 0?Ђƒ#"й#"& К•Њ Ђй€јЊ œ  ƒКјЊ C›GЩs ƒК œ C› ƒКgР C› ƒ#"й#"& КО Ђй€ 0?Ђƒ#"й#"& КbЁ Ђй€нћп­ 0?Ђƒ#"й#"& К{П Ђй€pЂ (І _А |–’ _А |(Ў gР ,Ÿ  ƒ#"й#"& КС Ђй€ 0?Ђƒ#"й#"& КџД Ђй€oЕ  ƒКoЕ C› ƒК\И C› 0?Ђƒ#"й#"& КЎШ Ђй€\И  0?Ђƒ#"й#"& К†Г Ђй€(І O‘  0?Ђƒ#"й#"& КO‘ Ђй€ѓЃ ѓЃ 9ž ЊyВЃ  0?Ђƒ#"й#"& КВЃ Ђй€<‰<‰<‰ВЃ<‰ 0?Ђƒ#"й#"& КсŽ Ђй€ Њy 0?Ђƒ#"й#"& К Ф Ђй€_А O‘  0?Ђƒ#"й#"& Кт  Ђй€CЁ  ƒКCЁ C› 0?Ђƒ#"й#"& КтЦ Ђй€pЂ (І _А _А O‘ щšLLъ HHNЪ  /L‡Ё› /LLЂdХ /EErГ /FFtG /DDєФ /BBщš4@/LMдХ@/qqTХ@/rr#Х@/pp‰ХŽ@/ ЦЎ@/ ‚‚kФ“@/€€‡Ц@/iiуЦ@/llаП@/mmП@/kk™Р@/jj7Т@/ hhpТ@/#nnЇТ@/%ooфТ@/'uuЉУ@/*vvќС@/-ttЮФЗ/0††XРŽ/4……—П@/7sslУ@/9ee’С@/<ffЩС@/>ggTЦ@/Add)У@/CwwшУŽ@/EyyёРЋ@/GzzРŽ@/J{{ЭО@/L||QС@/OxxрФ@/Q~~|ОŽ@/T2ФŽ@/W}}ПФH/XTT€СH/Y``>С@/ZaaЌФ@/[XXЌФH/\ZZ‡ПH/]YY‡П@/^WWЪЦH/_^^dПH/`\\жРH/a[[!Ф@/bQQVЪ /eNNЁ› 4@/eLLX6Џ5й4С*С/0.-l3л2џ1+, џ  D ёD!&ђ"E#q$%ѓ)F'(бG џ іСѕХЙОrХЙОШ?ХЙО=ПВХЙО5ЦЙОЪТФЙО=ПЌЦЙО ЧЙОєПЙОЪТ"ПЙО=ПЛРЙОЪТWТЙО=ПТЙО=ПЩТЙО УЙОЬУЙОЪТТЙО=Пй‘#ЙОй‘#ЙОnРЗПЙОссŽУЙОБСЙОЪТцСЙОqЦЙО=ПNУЙОФЙОСЙО8РЙОЪТъОЙОlСЙО=ПХЙОžОЙОЪТRФЙО=П АсйŒxˆ!зЕЬЬКNЪ Ё› RSbb‹HџџџџпЪ џ 2bкqЬ (6ІЌ8§ 6[[RS4@6bc‹H4@6ІЇšШŽ6йй‰Ь @ 6ЉЉЇЬ @ 6ЊЊХЬ @ 6ЋЋВЫ H 6nЫ H 6‡‡жЫ H 6 ““ŽЫ H 6 ‹‹сШЗ6 жж Юœ6ии№Ъ 6dd<Ь @6ЁЁPЧŽ6ззTШ@6 jmzЫ@6#€ƒшЧ@6%›Ÿ•Ч@6(twЬ @ 6*——;Ы @ 6,yy§а Ž(6-гг†а “(6.ЭЭ а (6/ШШщЭ (60ЗЗ§Ь (61ЏЏ Ю (62ИИ^Ю (63КК6Ю (64ЙЙ…Э (65ДДЄЭ (66ЕЕхЯ Ž(67ЦЦ=Я (68РРeа Ž(69ЫЫlЯ (6:ССШЯ Ћ(6;ХХеЮ (6<ННЯ (6=ППла Ў(6>ааМа Ž(6?ЯЯЕЮ (6@ММЮ (6AЛЛZЭ (6BВВ:Э (6CББЭ (6DААЊЯ Ž(6EФФŒЯ (6FУУШЭ (6GЖЖFа (6HЪЪуЬ (6IЎЎ'а Ž(6JЩЩђЮ (6KООНШ@6LooNЪЧ9‚B l л џ610/\"#4! .J-q)8њ*K%'3ћ2K(q$ќ7K5h&бG,џ+іС{/џAОЪ  йjЧјШ{Э{Э-`Ъ`Ъ`Ъ`ЪƒjЧјШƒjЧјШ9ЮКпЪ RSКпЪ `Ь ƒjЧјШ Ы АЧЬЧ"Ы ƒž •ЫйШйАЧЬЧй2Ь йcЫ !б Ёа ›wЬ& Ь-`ЪЬ`Ъ{Эƒƒƒ{Э`ЪЬ& кt-`Ъ`Ъ`Ъ`Ъ{Э{Э`Ъƒњvƒ`Ъћњ к ю€в Ъ зчƒы Њ Wг Й %рп  !Ха­н  &йфiр Й +.9љу Њ 0oz ѓ Й ;ГЧžє Й F˜Ќiѓ Й Ry‘і Й [пѓ Й d;Mќє Й n!4Фі Ž xщќoј ’ ƒЮтуї   @Ybњ ž šю"г  Ѓ`rш Њ Ќh’еъ Њ Еы§чщ Њ СŽ Ѓ žв Ъ ЪИЪNд  дбф4х Й й .HЊ тCє Й ь)Дц Њ ћїЬэ Й ы}э Й \п  ЛЭ$р  #&9мр  - Йг  2ЏРь Њ 7ђ *е  gvБ‹ч Й wз№)в Ъ |9Dmг œ †I\Kы Њ :Mь Й š 3ъя Й Єˆ›Ёђ Й Ўnрю Й ИTgЊю Й С0B[ћ Ў ЪЂДв Ъ Я]hЌњ H йдчп Й оЕЧ б Њ уЮыЭј  №q‡^љ G §Tjсн  Чаг Й '2яљ _   д  Шлoб џ ' 4 тд  1тѕп  ;L_˜п  E2EЁо  Qr ‡ !с  [fy|р  fšЎRт  p€“с  |V k єс  ‡+Œф Њ ’ќ1ф Њ ; O Œ№ Й ЇŸаёь Й БЉМ4я Й Мtˆо  Ц@SFї V аZmц Њ кЂрб  пŒв V ф“Јъф Њ ёЋС‰х Њ ўŽЄСб Й KVBЏНЖуЧЧC›hh”Ё““ВЃЪЂ\ззCє ш•Hљ$H зC@ўўЪьFHџџXоРH§§ћ H@ іјћ o ёёЗмH Eћ E@ ћћ2ћ G@ њњУоЪHцц§уЪ@сс §ЪHттЂїЪHрр‰в ЪкꇹЪHфф/хЊHyрЊHэы Њ  >тЊH!НЯЙH"$$вЙH#""j№ Й&IѕЙH(##ђяH)ЯЯwхH*ЭЭќп -ШШйвH/ЮЮнкH0ууЎиH1ссСн 4ммpо‰H6ттCљЙH788мЙH866~ь Й;11­еЙH=77кцЊH>yyф ЊArrјЊ@CwwјЊ@ExxОљЙHFЦЦ<ћЙHHХХїЙ@JРРкмЙHLССЖдЙHMППѓ ЙPЖЖŸоЙHRУУ?ѓ Й@ SММ)ѓ Й@ TЛЛUѓ Й@ UННэюЙHVЋЋыѕЙHXЊЊgдЙ@ZЅЅœщЙH\ІІЮљЙH]ЄЄЇє Й`››йуЙHbЈЈвє Й@ cЁЁМє Й@ d  шє Й@ eЂЂцљЙHfNћЙHhїЙ@jŠŠымЙHl‹‹ЮдЙHm‰‰‡ѓ Й@ mƒrѓ Йp||БоЙHrЩѓ Й@ s‡‡Гѓ Й@ t†† ѓ Й@ u……]шŽHvнїHxт@z`чH|WѓŽH}™і Й€  u№ŽH‚Ўі ‚@ ƒ‹јЙH„LL­юЙH†KK№Й@ˆFFКїЙHŠGGPвЙH‹EEшѓ ЙŽ>>єЙHII§ѓ Й@ ‘CCнюЙH’33mљЙH”22ћчЙ@–--ЭбЙH˜..юэЙH™,,ѕ Йœ$$KнЙHž000ѕ Й@ Ÿ**ѕ Й@  ))ГхVHЁћћчœHЃњњdєœ@ЅѕѕЕп›HЇіі@фVHЈєєЭі ŽЋьь еžH­јјті Ž@ Ўёёјі з@ Џђђ›Я§HАссфHВррт§@ДлляїHЖмм)я§HЗккxј 7КббгHМооЃј §@ Нззј ’@ ОжжЙј §@ Пииьт’HРXXДу’HТWWђњ’@ФRR-тœHЦSSц HЧQQј ˆ@ ЧHJьї IЪCCЫї’HЬUUYј I@ ЭOO-ј ˆ@ ЮMMCј ‡@ ЯNNј у@ аLLШрZHбца^HгџџУйP@ењњ…цUHзћћоёЉHиљљkњ лёё$э\Hн§§–њ Ђ@ оїї€њ @ піі фŽHрqqЋЯЗHтppLіŽ@фkkђлЎHцllгъ“Hчjj+г ъccіпŽHьnn@г Ž@ эhhJш Њ@ эpuЩаЊHю‘‘3ѓЊ@я(ш Њђkk…щ ЊHѓŠŠ%щ ЊHє„„iш ЊHѕxxЧш ЊHі~~ЇбЊHїќќф№ЊHљћћћЊ@ћііьЯЊH§їїчєЊHўѕѕєъ Њюю$дЊHљљы Њ@ ѓѓгЊHЂ Ђ sйЊHЁ Ё ГнЊ@ œ œ rћЊH   &щЊH › › ъ Њ‘ ‘ ™ъЊHŸ Ÿ Ћъ Њ@ ™ ™ Wъ Њ@ — — /ъ Њ@ – – ‚ъ Њ@ ˜ ˜ нŽHЩЩкеЋHШШПђЪ@УУ2рHФФЯчЪHТТЛв Ъ ЛЛДцŽH"ЦЦфв Ъ@ #РР[жH$ууSщH&тт­я@(нн*їH*ооŠдH+ммkд .дд}уH0рр”д @ 1ййЛд @ 2ккЅќЙH3ёђ Й6XаЙ@8XаЙ@:Ит Њ@ :!&(сЊH;BBЮзЊ@<AAšт Њ?eу ЊH@55гт ЊHA))у ЊHB//Гу ЊHC;;ЉѕЙHD((–вЙHF''гњЙ@H""0чЙHJ##цдЙHK!!*є ЙNвяЙHP%%Mє Й@ Qwє Й@ RќмЊHS(ќЊHU  hвЊ@WGюЊHY   ђЊHZШц Њ]њњўыЊH_  ч Њ@ `шц Њ@ aџџЩч Њ@ b ч Њ@ ccч Њ@ dAч Њ@ eђч Њ@ fдЙHgџџ0еЙHiўў­эЙ@kљљзЙHmњњБжЙHnјјсэ Йqюю–цЙHsќќ!ю Й@ tєєIю Й@ uѕѕю Й@ vѓѓrю Й@ wііяЙHxйнЙHzтЙ@|bзЙH~ПЮЙHэ Й‚  љЙH„Џэ Й@ … шH†ЬЬиHˆЫЫаи@ŠЦЦЊ№ЂHŒЧЧвHХХeп ­ООясH’ЩЩzп ?@ “УУзјH”88gрH–77žё@˜22ЦпHš33•ѓH›11-р ž))чќH 55Bр @ Ё..Uр @ Ђ//hќHЃ[кHЅzм@ЇжєHЉЄчHЊхр ­yщHЏњр @ А с @ БxгHВППчг @ ВЗМЪг ЕВВ+к@ЗООъЙHИ  Aь Њ@ Ињ &ь ЊЛѕѕ‹мЊ@Н  Xе @ Н~ЊgђHОААeи?@ПЏЏ;е Тyyз HУяя\з HФщщЈй HХ11wй HЦ++фи HЧГи HШFй HЩ%%й HЪ к HЫ==йй HЬ77Qи HЭ и HЮ‚и HЯ  њж Hанняз HбћћОз HвѕѕЃе HгГГж HдППде HеЙЙ˜ж Hжббgж HзЫЫ6ж HиХХrе Hй­­Щж Hкзз+з Hлууlк HмII;к HнCC0л эHоaaџк Hп[[’л Hрmmaл HсggИм сHт‘‘‡м Hу‹‹н Hфщм Hх——|н щHцЉЉKн HчЃЃVм Hш……єл }HщyyУл Hъss%м HыЮк HьUUк HэOOHєЙHюяяПюЙH№ююирЙ@ђщщјјЙHєъъcюЙHѕшшFѕ ЙјккРёЙHњььgѕ Й@ ћпп і Й@ ќффBі Й@ §ххАѕ Й@ ўссѕ Й@ џррњѕ Й@ уудѕ Й@ ттhі Й@ цц)в 4Ъ@]^)в 4Њ@op)в 4Й@KLхЪHCC>в Ъ<<‰сЪ@AA‰сЪ@ BB0фH [[кЯH ZZnіШ@UUмHVVќъŽHTTvг ЁLLрHXX‹г Ž@ QQЁг Е@ RR#ѓЊHLL„вЊHKKобЊ@FFmнЊH GG–иЊH!EETы Њ$==ыуЊH&IIiы Њ@ 'BBЁы Њ@ (CC&жЙH)22оЙH+11 жЙ@-,,ŒэЙH/--ЕгЙH0++Іь Й3##‡єЙH5//Ль Й@ 6((еь Й@ 7))ИрЙH8ššuяЙH:™™ЋћЙ@<””УхЙH>••ФѓЙH?““ѓя ЙB‹‹uєЙHD——№ Й@ E № Й@ F‘‘BьЙHG€€рлЙHIѕрЙ@KzzgјЙHM{{^ъЙHNyyЊђ ЙQqqmшЙHS}}Пђ Й@ Tvvзђ Й@ UwwэЙHVffпшЙHXee`пЙ@Z``ЧѕЙH\aa"иЙH]__щю Й`WWябЙHbccўю Й@ c\\я Й@ d]]‚аЙHeAAеЙHg@@ЏёЙ@i;;ЩмЙHk<<ќЙHl::Гю Йo33ктЙHq>>Шю Й@ r88]љHsГГџѓпHuВВ”п‰@w­­™№8HyЎЎјалHzЌЌdћ }ЅЅ5юƒHААyћ W@ €ЊЊKјЪHgg_в Ъ„``дхЪ@†eeдхЪ@ˆff—ђEH‰цц§ѕGH‹ххJйG@ррЃуOHссрYHппЕњ ј“ззсOH•ууЪњ Y@ –ммсњ @ —ннѕЙH˜ЦЦQ№ Й@ ˜НУ:№ Й›ИИЃшЙ@ХХqчЊHžъъды Њ@ žжчНы ЊЁбб5мЊ@Ѓщщ;нGHЄ††jфGHІ…… лE@Ј€€МћGHЊјћHЋжј Ўtt‰ЯEHАƒƒљ §@ Бzzљ @ В{{ыј @ Гyy0љ E@ Д||Iљ E@ Е}}]н_HЖii1љ–HИhhчј–@Кcc‹щ–HМdd[й–HНbbgљ GРWWGб–HТff’љ G@ У]]Јљ –@ Ф^^|љ G@ Х\\Сљ •@ Ц__кљ •@ Ч``ыHШЯЯђн шЫЪЪКќЙHЬ11^ь ЙЯ**іЙ@б00іЙ@г//Wр-Hд  к-Hж  Oч @и  ’а-Hк  ъ-Hл  јљ -о  ,ыјHр  њ -@ с њ _@ т 6њ -@ у Jњ -@ ф  сHхккьыHчййЮ@щдд<шHыее ьHьггд яЫЫ цHёзз$д @ ђаа:д @ ѓббRсЪHє3 3 §юЪHі2 2 ’шЪ@ј- - &аЪHњ. . šйЪHћ, , xб \ў" " сЮЪH0 0 Ћб \@ ( ( б \@ ' ' Ьб \@ ) ) ьб \@ * * мыHєєэHѓѓюь@ ююдйH яя0пH ээыд ххјкHёёе @ ъъе @ ыы пH^^`ћЃH]]щ@XXTгHYYящЅHWWп OOоH [[2п @ !TTHп @ "UU9ѕH#DDŒёH%CCdя@'>>ВйH)??2лH*==Ёп -55pеH/AAЖп @ 0::Ьп @ 1;;гоH2† † *ћH4… … щ@6€ € CгH8  ­щH9  Њо y<u u ѕнпH>ƒ ƒ во @ ?{ { По ?@ @z z шо @ A| | ќо ы@ B} } YмHCxxAяHEwwџз@GrrыъHIss’ЮHJqq*с Mii…њHOuu?с @ PnnUс @ Qoo,шHR­­xдHTЌЌ:ј@VЇЇTхHXЈЈЇђHYІІ…р \eхH^ЊЊšр @ _ЂЂАр @ `ЃЃФр @ aЄЄЗтЊHb’’XфЊHd‘‘3ё@fŒŒd№HhПјHi‹‹[т lƒƒ'ѕHnpт @ oˆˆ†т @ p‰‰жHqj j ЅтHsi i к@ud d SяHwe e ЖзHxc c Šс {Y Y бH}g g Вс @ ~_ _ Ÿс @ ^ ^ Шс @ €` ` мс @ a a ЅпH‚**ЁхH„))]і@†$$iмHˆ%%ђH‰##§с Œ>ыHŽ''т @ <т @ !!(т @ ‘  —ыЊH’NеЊH”RьЊ@–  ЖвЊH˜  HпЊH™•ф ЊœџџеќЊHž  Њф Њ@ Ÿдф Њ@  Рф Њ@ ЁxќЊHЂN N кфЊHЄM M жЊ@ІH H 6эЊHЈI I ЭгЊHЉG G :ф ЊЌ> > ЧвЊHЎK K bф Њ@ ЏD D Oф Њ@ АC C xф Њ@ БE E Р№ Й@ БЇ­LдЙHВЯЯКыЙ@ГЮЮ № ЙЖЂЂKђ ЙHЗШШ•ё ЙHИММн№ ЙHЙАА7ё ЙHКЖЖэё ЙHЛТТ7аЙHМЛЛхгЙHОККPыЙ@РЕЕgЯЙHТЖЖЛ№ЙHУДД э ЙЦЌЌ фЙHШИИVэ Й@ ЩВВ1э Й@ ЪББ~нЙHЫ‡‡ѓЮЙHЭ††qпЙ@ЯмѓЙHб‚‚ХщЙHв€€Oя ЙеwwЪэЙHз„„œя Й@ и}}Тя Й@ й~~vя Й@ к||шж?HлRRrы‚HнQQЙк@пLLCђHсMMЯоHтKK+о хCC"бHчOOzо @ шIISо @ щHHBЯIHъllьIHьkkлž@юffті[H№ggЕіIHёeedї @є]]’кŸHіiiЗї I@ їccŽї V@ јbbmкЊHљЁЁ ёЊHћ  жЊ@§››‡юЊHџœœEњЊHšš8ц Њ’’bсЊHžž‹ц Њ@ ˜˜bц Њ@ ——›јH‹‹iс  „„Чш@ ŠŠЧш@‰‰л@HЇЇ(ї @@ ›Є ї V––Сс@@ІІ`еЊHРР6єЊHПП|фЊ@ККEќЊHЛЛŠїЊHЙЙѓф Њ ЎЎИьЊH"ННх Њ@ #ДДBх Њ@ $ЕЕх Њ@ %ГГ[х Њ@ &ЖЖtх Њ@ 'ЗЗMшЊH(ЃЃ„иЊH*ЂЂAсЊ@,љќЊH.žž•еЊH/œœ’х Њ2‘‘VќЊH4  Нх Њ@ 5——гх Њ@ 6˜˜Їх Њ@ 7––ьх Њ@ 8™™ц Њ@ 9ššіљЙH:UU“ю Й=NNПєЙ@?SSПєЙ@ATTBЏ4й@AйкBЏ4Њ@ABЏ4Й@ABЏ4Й@A./BЏ4@AХЦНЖ4@AЧШC›4Њ@AC›4Њ@AhiC›4Й@AŸ C›4@Avw”Ё4Њ@Aђѓ”Ё4Њ@AЮЯ”Ё4@@A“””Ё4@AЏА”Ё4Й@AЕЖВЃ4Й@A'(ВЃ4@A‚ВЃ4Ъ@A9:ВЃ4Й@AЂ4@AШЩЂ4_@A  Ђ4@Ar s Ђ4Њ@AЋЌЂ4@A23Ђ4@AЛМЂ4v@A@AЂ4Њ@AЂ4Ъ@AзиЂ4Й@A01Ђ4_@A@AЂ4@AqrЂ4Й@A˜™Ђ4Й@ATUЂ4ž@AюяЂ4@A  Ђ4Й@Aˆ‰Ђ4Й@A Ђ4Й@A!"Ђ4Й@AnoЂ4Ž@AщъЂ4Њ@Aќ§Ђ4@ALMЂ4@A&'Ђ4Й@AзиЂ4[@AдеЂ4@@AZ[Ђ4Њ@AїјЂ4@Aš›Ђ4Њ@AŽ  Ђ4Њ@AыьЂ4Ž@A`aЂ4Њ@A:;Ђ4Й@AыьЂ4Ъ@AИЙЂ4\@A Ђ4Т@AюяЂ4Њ@AŽЂ4@AfgЂ4Й@AГДЂ47@AЮЯЂ4Й@AЂ4@AV W Ђ4Й@AЂ4@AЂ4@AтуЂ4Й@A;<Ђ4@AбвЂ4ƒ@AЂЃЂ4@A€Ђ4Й@AyzЂ4G@ATUЂ4Ž@AIJЂ4Њ@A; < Ђ4Й@AЉЊЂ4Й@AtuЂ4Й@A !Dњ\§[‚_^ZXY=]VWV(вdЪcЮaѓb#e`GhЂg‰iцfгlЂk mj&пpТo^qnP нtЪsuѓrрxЂwѓyСv”Љу{Т}|ПzGѓƒЂ†Љ…‡‚€F„~,єЂ‘ŒŠ‹Ž‰ˆRѓ˜Ђ—Љœ›š–”F•ž™“’1іЂЄйЁŸ ЃžNѓЊЂЌЉЇЈЋІFЅ2єВЂЕДБЏАГЎ­4іЛЂНОКИЙМ=З"ЖHјФЂЧСЦШУСТ=ХРП*їЯЂЮдвгбЭ=ЫBЬаЪŒЩ.њк§нмйзил=жъе•?гуЪхтѓр#сфпошщТцьЈэыъшtч>ъѓТѕђЈ№ёєяWю=щћТџЇўЈ§њјWљƒќїіBвЪѓ#AOдЪ‘ѓ    " хЂ”HТ^ПЇ Kє#Ђ%"&" !$\;ц,Т/ .Ј3210t4ƒ+)*-('Aэ:Ђ><џ={?97m8‘;65IэEЂGŠDџB{CFA@ђ%пMТOLJKNIH&7рUТWЎXŠTŠRSV QuPk/р^Т`aŠ]Š[\_ Z†Y—гdЪc˜eѓbьhЂgif@еmЪj‰„ѓ~€ƒ‚ў…{†on}|yxz\srutqpwvJˆq‡˜њ—KЉŒћ‹K•q”–ќ“KŽhбGџ’і‘Сl{k8чžЂ йЄЃІЅЁЂ"Ї›œŸš™WвЌЪЎъ­Ћ–TгДЪЖЗѓГ#БВЕАЏ@ыНТПРЈМКСЛОЙ”ИXьЦЂШ„ЩџХ{УФЧТ?С0яЯЂбвtЮBЬЭаFЫЪ3ђиЂкўлзежйFдHг-юсЂуфtрBоптFнм)юъЂьщtчBшыцmхPћђ§єёя№ѓю=эVЈвіЪјїѕѕ9њў§§ћќџ=њљпЂtšЂѓ Ј+јЂ= ”   S§$ !=7 пн#Ъ"г%Ђ&'$!љ-§0"/12,*=+Ї.)(™ д8Ъ:;ѓ756943=CбAЪDCE{F@>?lBл=џ<зMдLЪNOѓKIJMHGn6пUТWXTRSVQuP˜$п^Т`єa][\_ ZuYу"оgТjŠiklfdeтhcb˜FсrТtЄuŠqŠops n™mю<р{Т}ƒ~ŠŠzxy |"wv’Qт…Т‡ИˆП„Ї‚ƒ† ™€ЃJсŽТ‘ЄП’Ї“‹ Œ„Š‰ТLс™Т›"ПœЇ˜–— š"•”Q5фЃТЅЎЇЈІЂ ЁtЄŸžUф­ТАЏЈБЌЊЋtЎЉЈ№ЕЂВИЙЗКЖFДИГVьРЂУщТџП{НОСМ7ЛWяЩЂЭNЫtЬBШЦЧFЪХЏФп&огТжРевабдЯўЮ:їмЂп олйкн=и,з'цхТшџчЈфтуцtсŸрЃбъТы)ьŠщвяЂю"№э#фіТњјЈљћќѕtѓєїђёEхТEЈtџ"ў§Њб Ђ E џ  0?Ђƒ#"й#"& Кћњ Ђй€Сб  б  ƒ#"й#"& К€в Ђй€ "%Кƒы BЏiт(. "%КWг BЏrа(. "%Крп BЏг(. "%К­н BЏ‘о(. "%Кiр BЏЭе(. Кљу )в "јч1"јЅ" 0?Ђƒ#"й#"& К ѓ Ђй€в Сб iр  0?Ђƒ#"й#"& Кžє Ђй€в Сб iр  0?Ђƒ#"й#"& Кiѓ Ђй€в Сб  б  0?Ђƒ#"й#"& Кі Ђй€Сб  0?Ђƒ#"й#"& Кпѓ Ђй€в  0?Ђƒ#"й#"& Кќє Ђй€в Сб  0?Ђƒ#"й#"& КФі Ђй€в iр  0?Ђƒ#"й#"& Кoј Ђй€в Сб iр  0?Ђƒ#"й#"& Куї Ђй€4х Сб 4х  б  0?Ђƒ#"й#"& Кbњ Ђй€4х Сб  0?Ђƒ#"й#"& К"г Ђй€Wг  ƒКш C›Цщ eщ Јш щ  0?Ђƒ#"й#"& Кеъ Ђй€љу  0?Ђƒ#"й#"& Кчщ Ђй€iр в ‰ЂСб  0?Ђƒ#"й#"& Кžв Ђй€г  0?Ђƒ#"й#"& КNд Ђй€‰ЂСб  К4х ВЃrач1rаЅ" ƒК.HC›šу у Nу фу  0?Ђƒ#"й#"& Кє Ђй€ВЃЙг  0?Ђƒ#"й#"& КДц Ђй€п­п­‹ч ‹ч ‹ч ‰Ђп­ 0?Ђƒ#"й#"& КЬэ Ђй€ВЃ‹ч  б п­ 0?Ђƒ#"й#"& К}э Ђй€ б  0?Ђƒ#"й#"& К\п Ђй€п  0?Ђƒ#"й#"& К$р Ђй€п iр  0?Ђƒ#"й#"& Кмр Ђй€п iр  КЙг ”ЁHкЅ" Кь ”ЁІмЅ" ƒК*е C›Гз ‚з Юй й й йи lй ;й 0к џй wи Fи Ји з и фз Ще +ж ње Ож ж \ж ˜е яж Qз ’к aк Vл %л Ил ‡л ом ­м @н н Ђн qн |м м щл Kм єк Ук  0?Ђƒ#"й#"& К‹ч Ђй€ВЃВЃВЃВЃВЃВЃВЃВЃ К)в ВЃЊсч1ЊсЅ" 0?Ђƒ#"й#"& Кmг Ђй€ВЃВЃ 0?Ђƒ#"й#"& КKы Ђй€ƒы Wг  0?Ђƒ#"й#"& Кь Ђй€ƒы Wг  0?Ђƒ#"й#"& Къя Ђй€рп ­н  0?Ђƒ#"й#"& КЁђ Ђй€рп ­н  0?Ђƒ#"й#"& Крю Ђй€iр Wг  0?Ђƒ#"й#"& КЊю Ђй€ВЃ 0?Ђƒ#"й#"& К[ћ Ђй€­н  Кв )в ѕхч1ѕхЅ" 0?Ђƒ#"й#"& КЌњ Ђй€ь п­ Кп ”ЁКшЅ" К б ”ЁLмЅ" 0?Ђƒ#"й#"& КЭј Ђй€4х Йг Сб сн п­ 0?Ђƒ#"й#"& К^љ Ђй€4х Йг Сб сн п­ Ксн НЖ Кг ВЃŸіЅ"Ÿіч1 0?Ђƒ#"й#"& Кяљ Ђй€Сб  б рб в  0?Ђƒ#"й#"& Кд Ђй€Сб рб  0?Ђƒ#"й#"& Кoб Ђй€Сб  б рб в  0?Ђƒ#"й#"& Ктд Ђй€Сб рб  0?Ђƒ#"й#"& Кп Ђй€Сб рб  0?Ђƒ#"й#"& К˜п Ђй€Сб рб  0?Ђƒ#"й#"& КЁо Ђй€Сб  б рб в  0?Ђƒ#"й#"& К!с Ђй€Сб рб  0?Ђƒ#"й#"& К|р Ђй€Сб рб в  0?Ђƒ#"й#"& КRт Ђй€Сб рб  0?Ђƒ#"й#"& Кс Ђй€Сб  б рб в  0?Ђƒ#"й#"& Кєс Ђй€Сб Сб рб  0?Ђƒ#"й#"& КŒф Ђй€Сб Сб рб  0?Ђƒ#"й#"& К1ф Ђй€Сб  б рб  ƒКŒ№ C›…ђ аё ё uё +ђ  0?Ђƒ#"й#"& Кёь Ђй€Сб рб  0?Ђƒ#"й#"& К4я Ђй€Сб Сб рб  0?Ђƒ#"й#"& Ко Ђй€Сб рб  0?Ђƒ#"й#"& КFї Ђй€iр рб  0?Ђƒ#"й#"& Кц Ђй€Сб рб  Крб ВЃ‘оЅ"‘оч1 Кв ”ЁнсЅ" 0?Ђƒ#"й#"& Къф Ђй€4х Йг Сб сн п­ 0?Ђƒ#"й#"& К‰х Ђй€4х Йг Сб сн п­ КСб )в Эеч1ЭеЅ">)\ 7и^ Ъ7џџџџЁџч J™А Є \ Aœ Є h—Б ы tДЮŠ ыtKŠ ы JЬCы  h ыII'р ‘ +ћZ\‘ииRSЄ‘џџџџ8§њ ‘……Вћ  ‘‡‡pў‘BBљў‘AAзl‘KK‚‘JJ‡§‘II]§‘HHчы‘CCоы‘DDды‘ EE!ы‘ GGЪ`‘ FFы‘ LL>)4\@‘  /ы@‘чщЁB‘ѕѕТ‘љћYџB‘йлYџB‘ииЧќ бH ‘((ќ бH ‘хќ бH ‘..!§ бH ‘44lџ H ‘юяђŸH‘x{™џ аH ‘ёђиŸH‘"ГЖŽŸH‘%‹ŽФŸH‘(ŸЂ‚ŸH‘+ЦЩŸH‘.ehќ бH ‘/ŸB‘1GGŸB‘2FF]§ бH"‘3<<Qџ H ‘5ыьќ бH ‘6№№Nб@‘8  Єќ бH ‘9$$б@‘:ссб@‘=шщЛћ \‘@ккзћ \@‘Cнн§ б@ ‘E//?§ б@ ‘G88 џŸ@‘Jƒ†—Ÿ@‘MОСфŸ@‘P—šŸ@‘SЊ­ЗŸ@‘VбдeŸ@‘Yps>ќ б@ ‘[ЅЬB‘]рт{§ б@"‘_==Ќ§ б@ ‘_?B (‘`о Щ(‘aйџ Э(‘bўў3 (‘cN д(‘d„ (‘eћџ (‘fџџnб@‘hћ§nб@‘jєіЈ (‘kЙџ (‘l§§i (‘m^ 4Н@‘m™š_ Є ‘n}}T -&‘pєH‘rнпПH‘vад5 ТH ‘xух5 рH ‘zьюp Y&‘}œ '&‘€,Р@‘ЁЁ,@‘ƒІЇ,ф@ ‘…ЋЋv П‘ˆ››Uв@‘ŠђєТўU@‘ŒњќК &‘ЕџЌ@‘‘КМЕџР@‘“ГЕ-њ@‘•СУ-й@‘—ШЪА 4ы@‘—KLА 4Є@‘——˜А 4ы@‘—ДЕЖЄH‘˜22; Є@‘š.0ŠЄH‘œ&& ЄH‘ž+-цж@‘ 33Ѕ H ‘Ё::S 2H ‘Ђ55l HH ‘Ѓ77Є@‘Ѕ(*м Є@ ‘Ѕ№Є‘Љ #Р Є‘Ќ  п 0@ ‘Ў;;ˆ а@ ‘А88- ˜(‘Б@@љ ш(‘В>> Ё(‘Г??е ] ‘Д’’]<@‘ЖЉЉ‘ЩH‘ЗЄЄlѕH‘ЙЈЈЊ іH ‘КЋЋя§v@‘СœЁF U‘Ф™™@§њH‘ЦЅЅyї@‘ШІІAЮ@‘ЪЌЌШ (‘ЫЏЏь 2(‘ЬАА' Ф ‘Э““~ ы ‘Ю””№ы@‘аЧЧв§ыH‘бТТ€ўыH‘гЦЦK ыH ‘дЩЩ ы@‘зЙЛ ы@‘лНР) ы‘оЖЖbыH‘рУУLы@‘тФФ…ы@‘фЪЪk ы(‘хЭЭЈ 1ы ’чJo ы@"’щ€†Я ыH"’ъ\_C ыH"’ьu~• ыH ’эˆˆ  ы@ ’єOZШ ы’їMMє ыH"’љad ы@"’ћfsП ы@ ’§‰‰? ы(’ўŽŽ ы(’џя ы(’ŒŒы’@@•§B’##?B’))ŠH’ЌB’""ЃB’  _B’іB’((`B’ ЋB’ &&9B’ ''k§@’ K B’%%д@’§ ’ЭB’!!ћZ4\@’ийRS4Є@’  W б@ ’  g ’DGЏ)786в5в2LM3"-AБ"4!#9$:0\CD./,@&;)=*>(<+? B1%б'GџіOСG{K/EџHЏIќPчJеN>FQџ]\_[ўZabdc™TUWV^_SXY`Аsq)rjpkih"lnoumtwxv2fў~{ў€|z}"‚ƒ„gўŒ}‹ўˆŽ‰‡™Š‘‹e˜ў—”™š•“–›ž!œ'­ЌЂЊЇЅЄЎ"Ѓ ЋЈЉІЁ‹\О\О\О\О\О\О\О\О\О\О\О\О‚§Jй…Dо™Јй‡џЁџЬЬ& Ь‡џ (.‚§™Јк§ & & ™ЈВў К™Ј"ў у™Јjў М™Јњў ‚§™Ј07 йЯ§ юћ Ь‚§™Јƒ‚§ИQƒѓћ К>)ћZКюћ >)йЯйc‚§™Ј+џ‚§™Јcў‚§™Ј‚§™Ј"‚§™Ј™‚§™Ј™й^ќ ‚§ИQй™§ ЬvfЬ& Ь›wƒб= б=…DС 7 Ьv &  & Г & Ы ш ƒ ƒГ & Œ  & &  – КЁџ^ йqйпўƒ&  жџьџжџжџжџьџМйЄў0?Ђ0?Єў‚§™П „ч‚§‚§Єў,ўї КА RSйї йўП М‚§ь йЄў 0?Єў& ,ў&ўFўf ™ Кœ А й€йрєйcўш& > ’ йЄў 0?Єў„ч,ў,ў™К А й€йрєй™МН йЄў 0?ЄўН ,ў> o { Ѕ Кђ А й€йрєйч Н Н Н \ОР§Р§ Р§Р§Р§Р§Р§Р§Р§‚§ИQР§ѕ  1 5J К'>)Р§ рє RSвЏЏ \ -Џ в V J{ @ ]*= @ iYwy џ@ vХуЂѕ v^^ѓп) vYYtG\ v]]г  vZZь  vmmм ' v[[C џ vЁЇј \ všŸaы2\ {RS4в@{ЏАRS4в@{  a )@{тт4 вH {ўўч )H {ііѓ вH { §§Г )H { я№ )H { јј )H { њњЬ )H { љљ\ )H {ћћ5 )H {її{ вH {џџЄ вH {ќќЂ )H {ьэR )@{ЪЭR )@{йоR )@ {ЦЩR )@{!ае в{$ББ+ )@{%ЙЙ в@ {'ўўЬ )@ {)ііг в@ {+§§h )@ {-јј )@ {/њњА )@ {1љљC )@ {3ћћ )@ {5їїa в@ {7џџ‹ )@ {9ќќL в({:ўў )({;іі в({<§§Ќ в({=Н в({>š )({?јј/ )({@њњш )({Aљљu )({BћћP )({Cїї• в({Dџџq )@ {EчшН в({Fќќ> )@{GООš @{I46š @{K.0 @ {L<<p @ {M;;B @ {N::ц @ {O88 @ {P99Ф @{YLUФ @{\@CФ @{cDKK џ@{eИКЉ џ@{kЎДр џ@{m66Й џ@{n// @{q]` @{thk @{wad} @{zmmш @ {{pp  @ {|qqg @ {}ssФ @ {~uu“ @ {tt8 @ {€rrР @ {ooю @ {‚vv @ {‰~† @{‹{} @{“‡{ @ {›— { @{ЄЁЊ{ @{Ї“–8 џH {Ј;<Ь џH {Љ34i в@{Ќ"%i @ {Ў  в{Б` џ@{ГПС6 в@{Д{ џ@{Ифш{ џ@ {Уъљ{ џ@ {аќ{ џ@{м{ џ@{ъ+С џ@{ьвдС џ@{юЬЮц џ@{№жи• џ@ {ёЧШ  џ@ {ђрру џ@ {ѓппИ џ@ {єоо8 џ@ {ѕллŒ џ@ {інн џ@ {їкк^ џ@ {јмм1 џ@ {љссT џ@ {њтт˜ џ({ћCC) џ({ќII„ џ({§AA џ({ўHHщ џ({џGGШ џ({FFЋ џ({EE џ@ {89\ џ({??r џ({@@O в@{г в {W в@ {ГЕW в@ {Œ "ћ#;џ! "9%/+7'\3)5(4*6-:&0$''.,б8G1џ2`§‚bџ^_C"EDXVWZY[GF\agfedcI]H|\}~wu{z'y'xv<=§AСB@џ?>KLJM T NOSP™RQUkhijџq{orpmn"mlst ќ €n М_AѕМ_AКМКМТхКККККККƒК= & К= Y y š К= К= Й о  К RSйщ йч1йщ йч1йч1йч1йч1йч1йч1йч1МКМ“ ТхКККККК“ КƒТ ƒ ѕ*ЊyЊyММК_ ‘ ы Я '  G кКл кК_ ‘ К с G кййХ т ї  1 ƒџКƒŒяB ƒяЬB ƒc B йљЇ ѕ*ЊyЊyМёƒЬѕ*КЂ ѕ3 H ^КX КЂ ѕ3 H ^К› Ђ ѕ3 H ^К› Ђ ѕ3 H ^К› X Q ƒКpЈ КpК RSйК‘ Ђ К_ y ‘ Б К с G ` Ђ К_ y ‘ Б Я ы  ' G ` Ђ К_ y ‘ Б К с G ` x Ђ К_ y ‘ Б Я ы  ' G ` x Ђ ƒТ ƒ ƒЫѕ*ЊyЊyММММѕ*ЬƒžS) ККЬЬ) Q ММя †  хъН \ ьН  уу O УЦ?" d "aj"  $\_$' ю '#'8 \ +MZ$ ю 14J{% ю@ 4EIщ f ;)1[ T ?МСK* џ AмпЭ' ю QГ} 2 Qnn­  Qвг­  QежE \ QЮЯE \ QЫЬ ' ю QилМ \@ Q чшž \@ Q ццѓ  @ Q a  @ Q Œ  @ Q э  @ Q 8  @ Q  I ,@ QјјŒ ,@ Qћћ  @ Q  + ,@ Qђђї  @ QЬ  @ Qє ,@ Q№№К  @ Q  @ Q‡  @ Qх  @ Qа  @ Qџџ9  @ Q  @ Q  g ,@ QњњЏ ,@ Q§§д \@ Q ээ# W@ Q!ФФN d@ Q"ХХ› Q"ЕжcXю Q#ЋX Q$Ь" @ Q%dd# 3@ Q&ee5# ю@ Q'ffd# ю@ Q(gg`" r@ Q)bb“# ю@ Q*hhЧ# ю@ Q+ii—" @ Q,cc?  @ Q-]]s  @ Q.^^s' ю@ Q/%%' ю@ Q0&&H' ю@ Q1$$Ž \@ Q2SSЛ \@ Q3WWщ \@ Q4YYY \@ Q5RRЃ$ ю@ Q58DG& ю@ Q6HHГ% ю@ Q7FF& ю@ Q8GG=$ ю@ Q966t$ ю@ Q:77є$ ю@ Q;DDО& ю@ Q<IIШ! @ Q=00V! a@ Q>..—! E@ Q?//! c@ Q@--y e@ QA**Ј _@ QB++н s@ QC,,№& ю QCнср )@ QDРРЛ  @ QEППy )@ QFННš )@ QGОО* џ@ QHооj* џ@ QIннB) џ@ QJЊЊг) џ@ QKЎЎ) џ@ QLЉЉ) џ@ QMЌЌћ) џ@ QNЏЏ!* џ@ QOААБ) џ@ QP­­g) џ@ QQЋЋ( ю@ QRЁЁ( ю@ QSЅЅU( ю@ QTЃЃЦ( ю@ QUІІэ( џ@ QVЇЇz( ю@ QWЄЄ.( ю@ QXЂЂх' ю@ QYŸŸW ю QY›W ю QYn“Œ+џ! )*&™#'$"%(H ,-25™8 123467Ћ9:=; <ŽA> ? @4FG B H IDўE CNO P MKLJŒTU S R”WAVg `fb e acd Z™X_[^Y\]_ я _ Ц _ o _ ™ н ЬЬВ  \ Д Ьqћ  ЬЬЬ ЬЬ”…ЬI I ђ#  ќ" ќ" ќ" ќ"  О# О# j j j qћЬЬЬЬ ‘& є% !йКЬ%% {% " ! ЬG!   ЬЬЬЬККG!  vfT+ e ђ*  k~S'џб{ kkŒ+ џ šЃœ+ џššё&H ffф&H eeц* H ggд& cc ddж*  bbJџHgџH‹‹Šџ@††рџH‰‰џHˆˆbџ@ ŽŽ'џH j+ џƒ…–H@ppэe@zz‡HHrrHBssЗeHxx+ HmmKe@uuЙe@"vv5+ e(#}}S'4џ@#‚б{4 @#kl3џ@$ŸŸLџ@(žžЉ+ џ+œœї+ џ(,ЂЂœ+ 4џ@,š›+  Ž* "#+!+ " Є ‹пМЬƒгЧ&аƒЯ+AбКT+ S'MЬЬКЋ!ƒКђ* б{ƒVƒ ˜ ƒ—Њ3— + КƒmХ+ п+ КŒ+ œ+ ;у/, H Mv;, HMM%2 CCBH@bdBH@ qtBH@ RRD, HOO;, 4H@MN,,—qv, , [\, v, , , К/, ;, Њyџџџџђ, H _Ys1 @ d1;ш9 6 x76  „<RЂIŽ„––ъ H„YYs9  цќŸ<  •ЬсG8 ‘ žБЧZ8 Ѓ І–Ќ(MІcГ2 ІŠŠоH І‹‹rГH ІŒŒaIH ІŽŽЊy4ž@І12)I@Іїќ)I@І №ѕ)e@Ітч)I@ІщюѕI@ІЩаѕI@І!виѕI@І'БЗѕI@І-СЧѕI@І3ЙПѕ™@І6ŸŸѕ™@І:  *1 @ І?46­1 @ І@88Ы1 @ ІA99ъ1 ѓ@ ІB::u'“ІC>>дEІHKK­%ІJII%BІKJJЪ!I@ІNннЪ!I@ІQммЪ!I@ІTооa H@ ІTou"™HІU––- *@ ІW†ˆf- *@ ІYŠŒХ- *@ І[ސ"*HІ\““’&H@І_bc’&H@Іbfhѓ$ЈІdGG)(™ІfFF%e@Іh%e@Іj%%0 e@"Іli e@Іn$$j0 e@"ІpЏ"Š@Іs.. *@Іv//xe@Іy--ь!e@І|**t!e@І++э#e@І‚((чe@І…''!ІˆEEб0 e@"ІŠ!!=0 e@"ІŒ\e@ІŽ##­0 e@"І  - HІ“[[2 І—QQ2 І›PP2 ІІŸOOœ4  ІЃhhL5 ЈІІmm(&*HІЈƒ#™@ІЉЃЃw#ІЋMMA&™@ІЎЁЁA&™@ІБЂЂб(e@ІЕC$e@ІЙ ‘\ІО@Cd"e@ІТ  Г&e@ІЦн&I@ІЩЋЋ ™@ІЬІІ I@ІЮЅЅ=I@ІаЇЇX#™@Ів••*@Ід’’У ™@Ізžž.e@Ій.e@Імw5  (ІнooJ3 m(Іо]]$3 Й(Іп\\5 Ё(Ірkk•2 ,(ІсUUt2 ѓ(ІтTTT2 (ІуSSЪ3 (Іфaaю3 (Іхbbk3 f(Іц``Я2 (ІчXXш2 (ІшYY3 t(ІщZZи4 Ў(Іъiiq4 Ж(Іыgg 4 (ІьeeE4  (ІэffБ2 И(ІюWWУ5 Ђ(Іяqq“5 ?(І№pp№5 ›(Іёrr(H@ІђllЪ#4HІє  5"5@Іѕ++R%?@Ії'gBІ§ $ш: ШB Іџ'ŸBІ''(: @ І‡: =@ І : 'ІЊ: ьB ІЌњBІ &&—; @ І -1< @ І 33|< т@ І 66o; G@ І))-< O@ І44U< Л@ І55Й; ќ@ І11н6 H ІHIo6 "@ ІDFo6 А@ І@B@6 І>>Е7 @ ІOO8  @ ІQQх7 "@ ІPPŒ7 @ ІNN77 @ ІLLc7 Е@ ІMM 7 @ І KKЂI4 @І –—ъ 4H@І YZы%"HІ!№№Ќ(r@І$ыэЄ €І%ћћ…9 8І(шшБЫ@І*ђєК9 w@ І+їїб9 l@ І,јјЃ9 Ђ@ І-ііHHІ.жжЖ@І1бг&=І2ррД< І5ЮЮЄ#:@І7икю< (@ І8нне< +@ І9ммuHІ:ЛЛЈ$@І=ЖИŒ(І>ЦЦ 9 ІAГГЯ$@ІCНПC9 @ ІDТТ[9 @ ІEУУ+9 @ ІFССZ8 4 @ІFБВZ8 4#@ІFЬЭZ8 4@ІFцчA"HІI Ѓ\(@ІM›žj8 ІP˜˜4*HІQЅЅО8 І@ ІRЈЈн8 (ІSЋЋ†8 @ ІTЇЇ(M4 @ІT<=(M4 @ІTW H@ ІTw{W $@ ІT,B. -p'ГH) *+ W,V(XL\KHISTURА&$к%кZYQмP{NбMG1џ3і?С5{A/>џ@Џ4ќ2ч<е;>9:867 O=0/"#!JCDEa`_lefg]\dbcjkiFh^G[nmo11} В9ywqxfДzuts t {v r|‚}€\~Б6†„"…ƒf‹ŒoŠ ‡‰ ˆ Љ9“‘”f—•–’Ј<›™˜œžšЇ8Ђ VŸЃfІЄЅ ЁŽ8ЌГЋЊ­fАЎЏƒнмc)Š)j/ ƒ>)c)Ў)j/ ƒе)№)Ў)j/ ƒе)c)Ў)j/ ƒ=w. Ўž. `. ƒ=X`. ƒ=/ / ž. `. ƒєо. ž. `. ƒє / ž. `. ƒЦј- ƒЦј- N1 n1 Ž1 š1 BR& ƒйєнм$Ы 2 Я%PƒнмY/ ƒœШY/ ƒY/ МB- y]˜- y]˜- y]Мэ—KээЙ~˜йЦƒф/ ~:%йЬо~ѕ0 й‹0 ƒЄГм"ƒЄГWМƒЄГq ƒЄГL ƒЄГЂ!ƒЄГ$ƒЄГ ƒЦй‹0 йЬо~˜й‹0 Кђ, ъ КvDђ, }DКђ, ?2 Кђ, ‹DКЙ4 МЬ4 Кj5 Њyй€ƒйXƒl&. ƒЦ. D. њ(г/ ”$D. А/ г/ ”$D. ЗЦPvD. ЦPvD. l&Pvƒl&ЪТD. ЦD. ЦD. й™Јй™Јƒя ј- ƒPƒPv›w& ›w!5 ММ›w›w4 –3 кtƒ…тЙ4 –›w–3 шFj5 j5 j5 0?Ђƒйt%ƒ; <; єтž. Ь‰Ь@']: Кш9 (MЬз: йзX; ЖИ Ь4 BRМžSк; 0?ЂЖ6 К6 (MžSžSžSМЬ4 ёBRсЄГUКs9 Z8 йЬѕХrХ?ХсЄГUКŸ< Z8 йЬЩТТсЄГUКG8 Z8 йЬŽУБСqЦАсХссссЄГ}(КZ8 ЂIˆЯЅ8 њ8 Ѕ8 RS8лл)q , EлkRS4@Eлм 1,@E  p/e@E  &2,@E 1,@E Ш,H@E 92e@Ec,e@E  щ1e@E М0,@EQ0,@Eb0,@E  б/,@E"W/,@E%и1 Ј@ E%ІИ™ І@ E%N™R1,@E'Л,,HE),,BE*ƒ-@E/GL”= ,H E0Х1eHE2НП_1eHE6!%61eHE>:+ѕHEAЁЄѕ, HEE]a~0eHEOCMz1eHEPѕѕW,HER332eHESммУ= H ET§1,HEUз0eHEYюђu2eHEc/9—0eHEdйй­*HEf22ь= @ Ef /0> @ Ef7>Ћ= ,H Eg4= H@ Egпћ^A e@ Egїџ#= HEjноЏE  EniiУ/,HEp!A e@ Epочf-H@Eq§§f-H@EsўўЖ1@Eu55[.@Ez@E+Ж@E}ЙМђ.e@E .e@E‡ Š/Ш@E‹œ у/ @EUYм,e@E–;Bд*e@E˜єє1@E›44Ћ,e@Eлл /e@EЁщэ’*e@EЈ'.P2e@EЊииЋ0 e@ EЊСзwA e@ EЊ WE  (EЋddkE  (EЌeeнE  (E­jjE  (EЎggЋ/H@EАџџE  (EБffq+K) 0:/9E     H\-!( &%:18'826883{?б>G$џ;іС.{</"џ9Џќ*ч@е5>4=#87ABFD,Cйu,йu,йu,йu,,йu,,йu,,йu,,йu,,(/C= c= йu,,йƒ= йu,йu,,йu,,ƒУƒŽвЬƒк> Щ-? 3? Ь@ І@ ƒ“дA џB ƒ“дA юA B *B IB jB Х? м? њ? ƒЭD №D E ƒ“дA юA B *B C IB ЋC ЩC Мѕ* > Ми= Мƒђ0? :A ƒ“дA юA B *B C IB ЋC ЩC A ƒ > ƒК)q RSКСE Ь4 ѕ*й€q-й > йT>  .C= ˆ> й/@ K@ й1ѓЗp ПB й1ѓЗp Эp уp A й]? z? ”? й D ?D eD й1ѓЗp Эp уp 2C EC й™Јй > ›1й•Ўй(/C= c= й1ѓЗp Эp уp 2C EC йя@ ЬƒСE и= М/q-ЬPG q Jˆ .  )5GRS\)558§2 )00Я2q@)VXМ3q@)YY•G qH )ddЭG qH )jjўG qH )kk‹3q@) ^b3q@) []"3q@)NO\G q)KKH q)ppH )ooH q)qqH )!nnu3q@)$QTБG q@ )&fh‘H ()'uuxH ()(ssСH ())xxNI ()*}}ЄH ()+ww4I (),||I ()-{{јH ().zzоH ()/yy…I ()0„„йI ()1‡‡jI ()2ƒƒОI ()3††ŸI ()4……­F 8H )5??ЪF 8H )6@@F 8H )7>>шF qH )8AA 4\@)<9;XF \)?66G q()@EE5G q()AFFG q()BDDRS4q@)BJJRS4\@)B55W ()Bƒ*G " =  C H\, +.&"%-#!="$)'C(ƒі‰ƒ7 ьG ьG йі‰ŠЅ3йі‰tG КPG RSКvDPG KH К‹HPG ZH КvDPG =H К‹HPG iH ƒі‰Šй^ќ ›w7 ƒ[w[wvDЬЬЩэЩэ[wW vDЬЬЬЈF ƒі‰\" tF К . RSЬЬЈF ѕ*$RS\Ў` с {квa п@ Јcc @ &ЊБŽd @ )РЪлd з@ .ТЩ‹H4 Lt] F P ?J . Щ ЛvK G@ г‹9M N@ лŽ˜M M@ сžІ8 7 ёР#J] C )мбy \ "уJ  "ііє "їїѕ*4=@"ѕ*4Ъ@"{|RS4@"РСRS4_@"RS4\@"уфRS4O@"žžRS4G@"RS4.@"  RS4l@"ŽŽ`;@"ЬЮk@е@"адkd @ "ГОАa H "šša H "„„a пH " ••oa H " ’’Na еH " ї` бH " ‚‚П` "}}/a @ "‡ц? @"€€?<@"—— c сH "ІІJ7@"ЇЇљb @ "ЄЄ#b @ "ŸŸЊb @ "ЂЂb о@ "ЁЁNb  @ "  гb @ "ЃЃѓa @ "žžЯc @ "­­Їc р@ "ЌЌEd ј@ "ААd @ " ЏЏјc @ "!ЎЎ‚c @ ""ЋЋѕ4@"$……5@"&““G9@"(Ёe і@ ")ШШЁe H "*ЧЧge  @ "+ХХ5e @ ",ФФe @ "-УУ6f @ ".ЩЩВd  @ "/ССаA@"0˜˜Йf Њ("1иикf ("2ййєAH"4__ш[ H "5^^†Z њH "6LL$7ЏH"7hhЦ?=H"8ffї;+H"9ddC;:H":bbЂZ GH ";OO(\ ѕH "<ll \ ЮH "=jjЛZ H ">RR[ H "?UUІ[ H "@[[f[ ЛH "AXXlZ gH "BJJRZ ь"E7 ?@ "E%Hя6H@"H``(AŸ@"JMMШ=s@"Lgg5(@"NeeЙ95@"PPPђ9K@"Rkkѕ>ќ@"TSS>[ O@ "VVVУ[ #@ "X\\‚[ т@ "ZYYE\ ("[oo] s"^9] p@ "_  #] a@ "`  ?J 4P@"`)*Ѕ6 "byy!K G@"dkmUP  @ "eллїR  H "fFF—R  H "g44`S  H "hXX*: H"iЙЙ0T  H""jtuT  H""krsœS  H "lbbи<.H"m??4K G@"nqqТS  H "ogg~S  H "p]]S  H "qLLЗR  H "r::=S  H "sRRзR  H "t@@:R  H "u""џQ  H "vYR  H "w&&uR  H "x**R  H "yуQ  H "z‘: H"{..шS  H "|llQ  @ "}ѓѓ}Q  @ "~§ўОQ  @ "  еO  H "€ЕЕP  H "гг­5 H"‚СС™Q  @ "ƒяO  H "„ЩЩ5P  @ "…ззУJ .@""‡BCФ7G@"‰}} @G@"Œ||А:p@"’­ЎH:g@"•ЊЋb6P@"˜›œ;5,@"›™š4a@"ЈЈЫ;G@"Ÿ{{лL G@"ЂŒŒлL G@"ЅЇЇKJ ."Ј  6.@"Ќ e8.@"ЏJMкJ G@"ВTW’K G"Е€€Г<GH"З‚‚ИL G@ "ИŠŠшK G@ "Й……iL G@ "Кˆˆ9L G@ "Л‡‡L G@ "М‰‰КK G@ "Н„„L G@ "О††т7 G@ "ОvzM8G@"ПggSM }"ТЃ?aH"Ф‘‘N D@ "Х——іM O@ "Ц––ЅM M@ "Ч””ЮM y@ "Ш••yM A@ "Щ““­; @"ЫНН™P  @ "ЭухёP  @ "Яэяд>.@"г48F@"":F@"#  ^=ћH"%ѕїй9F@"&`\ R")ТТ\ F"-њ:@"/ЪЪњ:џ@"0ЩЩ9C@"2эя(9!@"4мот\ F("5""Ш\ F("6!!Ц5Њ@"8ЫЫЋ\ F("9  MAј@";ДЖ!;@"=QSу;@">bb_ @ "?ЈЈ<_ H "@МНс^ Њ@ "AЄЄ_ §H "BЙК%^ H "C††‹^ H "D˜˜q^ OH "E””ю@т@"FWW~A@"GggW^ рH "HУ^ чH "I  Ј^ H "Jœœ0;@"L^^"?ћ@"SozR] Й"V++@>@"Z47ƒ8ј"[ССе8б@"^EEш=–"bТЦР8"dРРœ9Ъ@"f>^ @ "hŠŒb<@"lЌА•A@"nMMНAЙ@"pIIq` ("qииZ` с("rжж9`  ("sее…` ("tйй\_ ("uШШ‰_ љ("vЪЪr_ ("wЩЩЃ_ ш("xЬЬв_ ("yЮЮК_ ("zЭЭ™` ("{ллэ_ ч("|аа ` -("}вв"` ("~ггЋA@";;A\H"†?\H"ƒјњ}=\H"…ю№&J \"ˆххW .@ "ˆW Ш@ "ˆ #8`$,&4#]]7C%B"C9C!8 'AH\BCz0+,.D-],]/C*B(C)]62,145]4]3@,?>=,<D:p;ŽHSO,*T?R.FVKcYCN[O\Q^P]EDHU\JIXHWGMZL_]`!baJ’S+3“.ь.Ћn‡”C•Й И eoŸ‰ˆH \‘ Œ ދЁjЈ8ƒ8Ў…А‚†8f8ЖЉ{ЗбЊG~џЌіС„{Џ/€џ­Џ{ќwчzеv>xy|hsugrtiqmp}lkdхПшоыХУФчцсъфЪСЫЩШЧРнимзйлНбеЛЯгЦЮЭпщуОвжМадкЬТртКK–—.™.ž›šœC˜ŒMЁ=ЂAЇ.Ѕ.ІЄЃMБAГDВ.Е.Д28ђєAѕ?њ.їэіc№Cяёюѓћљјc] &?.§cC ў H \ џќх|'ч!( ч#$%(щ бG"y*S)(.'‡;7–@f …Эк@& ЬC7& ЬЬКЎ` ѕ*м` ƒЬйQc b Щэb b ub b b b b b b b b йб?й15йh9иe f —e ЩэЩэ`f b ƒ& & `Ъ7& ƒC7& К& ƒC7& йZ щ`Ъ`ЪЬК‹Hѕ*й77йDAƒ15йAмйв9ƒ15йњZ й_[ йр[ йž[ & К] RS4] 4] йФ6йЌ9ƒ`Ъ`Ъ`ЪМККžSЬММ`Ъ`Ъ`Ъ`Ъ`Ъ`Ъ`Ъ`Ъ`Ъ`Ъ`Ъ`ЪМиђ-ЬЬ`ЪМЬP йƒЫ RK 8RK $@?@й5ŒЏO 7ФO Яй~O ™O й7kN йCN kN йSO RK •ЫК%M vK КяL M К?J RSШUcJ ƒž •Ыƒ•Ы9ЮКvK RSйv-`Ъ`Ъ`Ъ-`Ъ`ЪƒК9M RSйv`Ъ`ЪžS`Ъ`Ъй™ЈйМP йМP йАЧЬЧJ й_Q й{7й™Јй{7йO6КM RSйv7BO `Ъƒƒƒ8ƒ•Ы ь`Ъ`Ъ`Ъ`ЪМ& щžSƒƒтT `Ъ щ-- щ`Ъ`ЪМ`Ъ`Ъ`Ъ`Ъ`Ъ`Ъ`Ъ`Ъ`Ъ`Ъ`Ъ`Ъ`Ъ`Ъ`Ъ`ЪЬМ›w-vDЬЬЬ`Ъ`ЪМЬЬP й88йk‘k‘2‚k‘К8 RSКŸ\ Ь4 ?J њ5й2‚k‘2‚& ›wх5њ5Ÿ\ й_AйЌ9йј^ Кј^ КТх щ щМŽAТх щ щƒS‡ƒ] Q?_?Ÿ] Д] Ь] КJ] ?J ШUf] RK ƒ•Ы9ЮRK >>+>RK •Ый^ й_Aƒ<ѕБ_ƒ8ƒ•ЫƒM` M` ƒТх щ щТх щ щƒТхƒƒйЛ‰йЛ‰йЛ‰Кбy RSg y ;O;, \ ;;8§ 33%` 22Eg \H FFsB\@ DD“B\@ ??“B\@ AB(g \ ==ig \ IIЬg e( MMшg e( NNЎg \( LLg \( KK;, 4\@ ;<gJHH   C  ьG ƒ•ЫІ7Кg ;, К‹Hg iH ѕ*& 7 [wZ5ы--ыM..&l  4z>h \ р/Єj J %Эk  1’лUh \ <?ŒRS\<??(h  <77ll @ <pp’l ы@ <rs E@< =? E@< EFЅDH< PPоBH<inG@<WYРCH<`bCl <66ьl (<ww4m (<yym (<xx„j J@ <--BDe@<шшBDe@<эюlEJ@<! "lEJ@<# lEJ@<%љћщEJH<')+щEJH<)щEJH<+#j e<.ттCH</ЅЅоj @ <0ФФўj @ <3ЦЧfF@<6ŠŒfF@<8‘’3CH<9œœЫDH<>НТ0G@<@ЌЎqDH<BЕЗЛj <Eƒƒbk (<FЬЬBk (<GЫЫЛEH<HЕЕЛk @ <Iддлk @ <KжжФF@<M›œФF@<OЁЂ CH<PЌЌьDH<UЭвыC@<WМОSCH<YХטk <\”” l (<]ккUh 4@<]45Uh 4\@<]рсUh 4@<]’“Uh 4J@<]‚ci ]@ <]rvD]H<^ZZдi e@<_ŠŠ1F\@<`GG•h \H<aQQ‰i eH<f|Иh ]@<hcei ]H<jnpoh \<mAA­i e@ <mƒˆRS4\@<m?@6l‡  ] ]  "7h‡H..C9j(‡#H".$.&'% !*)8k4M/.O0+231, -5DhB=3>;H@A:?CC<їi йЙl Ъl иl ˆЇ&э\" žфƒй…Эч‡эђПƒžфƒxCК&l Uh МЬƒїi žфƒFj ƒ’Eƒžфƒhj ƒFƒxCК>h Uh Мїi йk 1k •F­Fžфƒй…Эч‡эђПƒžфƒxCКЄj Uh МММїi йќk ШЇžфƒй…Эч‡эђПƒžфƒxCКk Uh ММїi ƒй…Эч‡эђПƒсh ƒ9i КUh RS€m \ AqRS\ AAЉG] 88.Оl 33›H]@ ]_хG]@ egДH]@ moЎm B IIьH@ PPƒG™@ WY‘m \ CCRS4\@ ABW \@ EG m h H ƒb№ƒтm ƒџm Ьm ƒb№К€m RSBЏ]==C›e”Ёccп­\џџџџЂh((o \ !Пq ] =Hђp  d{xq  Ъпёw e %(?Бr  *Q\Ws  5‚™t г :цћЊu e EF]њt e L4™p  Q‡}w e Vc€Хo h aрєzp 8 hЇУщq ] rГЦtv e w5n  |Эй5p e  ЌCєh BЏ4]@BЏ4]@=>BЏ4e@BЏ4@QRC›4e@C›48@ЇЈ”Ё4г@цч”Ё4@‡ˆ”Ё4e@cd”Ё4@ЪЫп­4\@ЭЮп­4e@ ЁЂ4@deЂ4e@FGЂ4@‚ƒЂ4h@рсЂ4e@()Ђ4]@ГД–UhH  ѓK]Hœo ]lUhH3T]HGGЧW]H EEЮq ] @@fO]HFFLS]HzzяR]HyyˆK]@ttjS]Huu4LHss,q ’@ ln q ggгX]Hwwšq @ qqSq c@ pp>RHоо's @ влљr !ЭЭQX@#ннБJ8H$>>]I8H&==–Te@(88L8H*99’QeH+77x e@ +02џw e.++ЊS8H0;;Tx e@ 1557x e@ 244ONH3[[MJыH4YYЯr 7TTZLH9ZZСSгH:˜˜ЅVгH<——ЏQг@>’’/IгH@““фWгHA‘‘Џs g@ AŠŒ}s SD……јPгHF••Jt г@ Gхs г@ HŽŽXгHIњњЛt г@ Iюї~t гLщщаNг@NљљReHO\\ЌTeHQ[[ГMe@SVVЂWeHUWWKeHVUU№u e@ VNPЧu eYII@OeH[YYIv e@ \SSv e@ ]RR&u e@ ] #ЃXeH^33/Je@_22 u ebyu eHc,,?u eHd&&ePHeœœЯp @ e™Ўp hŠŠyJ@j››gReHkХw e@ kk|›w enff2Me@p~~МPhHqѓѓКXhHsђђ­Lh@uээдVhHwююMUhHxььеo h{ууtNhH}№№Xp h@ ~ъъp h@ щщёo h@ €шш›x 8@ €ЏВиM8HТТN8@‚ССpx 8…ЊЊZy 8H†ЛЛУx 8H‡ЕЕЛIыHˆХХТK]HŠФФ-K]@ŒППIT]HŽРРnV]HООr ]’ЖЖХL]H”ТТ}r ]@ •ММEr ]@ –ЛЛіLeH—WeH˜  Љv e››OeH  ^W\HžииЛn \@  ееo \@ Ђжжrn \Ѕаа;PeHІЋЋw e@ ЈЈЈKw e@ ЊЉЉъv e­ЃЃo,h+-П*q0h/l1П.$p8h7";П:]645932!q>h==?<[(wFhEAI1HDBCCGƒA@rLhKMpJ&sThSBW/VRPQUONtZhYD[/X%ubha*e/d`^_CcŸ]\5tihf7k/jhgpnhmoПl wrhqsp'oyh}H|П{xvwzCut ph~ƒ1‚€)q‰hŒ‹pˆA†‡Š…„vhŽB/"n”h’H“‘ #p˜h–J—/• "%Кo BЏP=(. "%КПq BЏ‚O(. 0?Ђƒ#"й#"& Кђp Ђй€п­xq  Кxq ”ЁXЅ" 0?Ђƒ#"й#"& Кёw Ђй€Пq њt  "%КБr BЏ…L(. 0?Ђƒ#"й#"& КWs Ђй€п­t  Кt ”Ё OЅ" 0?Ђƒ#"й#"& КЊu Ђй€Бr њt  ƒКњt C›šJ\M К™p ”ЁšJЅ" К}w ”Ё\MЅ" 0?Ђƒ#"й#"& КХo Ђй€zp 5p ВЃ ƒКzp C›­y #y  0?Ђƒ#"й#"& Кщq Ђй€o ВЃ "%Кtv BЏнO(. ƒo йfo К5n п­ ƒo йfo К5p п­іy o MжRSsMM[џ@‡‡"Zџ@``Nz oH ССbYџ@[џ@•—(Yo ШЪеZџ@ ЈЈьZџ@ ЃЃYo@КОЁZџ@œžИ[џ@­­д[o@ВДHZџ@UUZџ@ffz џOO‰[o@ТХiZџ@ ƒi[џ@"prЛYџ@'v{„Zџ@)jlЄz o(*ЭЭЩz o(+ЯЯ2{ o(,ввщz o(-ааW{ o(.дд{ o(/бб{ o(0ее‰z o(1ЬЬ™Yџ@2YYRS4@2MNyЂH,,     \Ўƒйxћƒ"z ƒ;z ƒFYƒƒƒоY…ЭУƒОZƒƒОZƒКіy RSйъlz ƒоY…ЭУƒОZƒоYFўЎ+№Yƒ"z ƒƒЬЬКЬž{ xћа@sиитлл~ o lŸm  зр{ Ў 9Т•ёs Jю7Л~ e VŸЯК s exb€  v€ою{ ЎvТТМsvююovllє2 vее~ 4@vзиM~ e@v9~ e@v‰‰b~ eHv““г\e@vvw&~ e@v…… ~ ov nn_eHv |~„~ e@v—šЄ~ e(vžžc@vєіБd@v№№А H vШdHvњњKh@vпт fvз_@vьь} vййЗa@v"ў‚ (v#б (v$і (v%эd@v&ччр{ 4e@v&Ÿ Ђho@v(giС^o@v*ˆŠГ_o@v+ŽŽey@v,ѕѕx| y@v-ыы| y@ v/яё\o@v1_a \o@v5x|J} y@v8=@ˆ} oH v9„„OdyHv:..| yHv;кк8| yHv<оо.hp@v>ЫЫхgy@v?UUѓby@vAPP,ayHvCљћџ{ pvFФФСcyHvHбгт| y@ vH3} y@vJ57иcy@vL&(X| y@vNхчCiyHvQCiyHvUџ”ao@vWmop} y@vYGIс} o(vZ””Г} o(v[’’Ы} o(v\““еbp@v]ЬЬ\^sHv_+-oasHva!#і]sHvc13`sHvdТgsHvf]sHvj ses@vlєєses@vnііses@ voђђses@vqѕѕses@vsѓѓэ_s@vuў[ svx№№ьesHvzњњьesHv|љљз]sv}66Л~ 4s@v}Л~ 4@v}€GfeHv~ЎЎdeHvВВщhe@vƒЇЊdeHv…ЖИЫ~ evˆЁЁВ`eHvŒМРВ`eHvФЧч~ e(vЫЫ e(v‘ЬЬ  e(v’ЭЭ? e(v“ЮЮ{h@v•acx]s@v–::_s@v—66š^@v™Y[Ges@vœGJUgs@v "$`HvЁggО]vЂttЫ svЅuds@vЇAC$es@vЉ02(is@vЋQS6€ (vЌwwю\s@v­))h@vЎššh\@vВЯгj`@vЕМПNcHvЖЏЏГbHvЗззЦh@vМˆ‹s€ vП‚‚ƒ_@vСЖИ„g@vУЇЉ2g@vХ”–)_@vЧЦШM (vШннџ€ (vЩлл% (vЪммЗ€ (vЫккы^@vЬб{ Ў vЯ:]ю{ 4Ў@vЯТУМ4s@vЯюя4o@vЯlmW y@ vЯ‚~Ё= f™#П.!" €{6z2C701;)*,(5,<=ƒ8:/9\-Ў?43+%>,.&'AB@ёP­KJMJNLQROHIGEDFS$~ZfX7VWY\[]C^_ `TifnkcbjeldaghmQU€ut~qxqowrvqypsш}э{є|ѕzxћ1cƒёэƒК~ й€ƒе`,]ЕСxћ1cƒ щёэrfѕ™ йƒКm ~ ƒе`,]ƒы ТхƒiйЃ} йƒƒƒ/Рxћiƒ\уР/РƒD_d} ЕСёёёэƒƒž•ƒ.dКр{ ю{ й€ƒwЌй} ƒ/Рйе`Ј| йaaК| йiƒD_ƒЕСкt‹^э‹^эxћэМƒп ƒп Г]š „ч| Qaƒ/РКёМƒе`ƒaйёёэrf iƒ.dКЛ~ р{ йaaК| йе`Ј| Тх щТх щƒiƒƒxћiƒD_d} эш "€ ƒƒКК Л~ ƒwЌƒ/РƒD_U€ ƒƒ\уР/РƒD_d} ёёэш € Ѓ€ Кb€ Л~ ƒwЌй} ƒ/РƒD_ щёТхк€ К—ќёRSЎKKЉG Kfє CCRS4€@KLjЎ@YYЂiЎ@XXтi(@ZZc‚ Ў@ PTеiX@]]•iH^^o‚ {H  ``}‚ {H  aaR‚ Ў MOМi$H\\ЪiЎ@VV˜‚ {$ee‹‚ {$ddG ||  ,  ,йййУƒHƒ№АКlђКЉGRSй€ѕ*ѕ*C›{ВЃЎKKЂGЭЭSƒ { ЗЦО‚  KVЙ‡  7„ џ ЅАћ†  !]h?„  *Dj†  4{Žхƒ  9“žA… " BьWˆ  N\tЉƒ { SŒ-‡  ^>UН†  cozђ‚ Ў mЭрCє mC›4@mC›4{@mЗИC›4—@mьэВЃ4@mopВЃ4@m‚ВЃ4@mЅІВЃ4@m“”ВЃ4@m]^ВЃ4Ў@mKLЂ4@m{|Ђ4@m\]Ђ4@m>?Ђ4G@mЭЮЂ4@m–ƒ {@ mПТЛj{HmХХ‚j{@mФФ€ƒ {mККoЎHmUUв‚ Ўm NN kЎ@m TT kЎ@m SS@oHm66БpHm55Wp@m00—kHm11gkHm//н‡ @ m%(Х‡ m  ОmHm33?ˆ @ m--љ‡ @ m**ˆ @ m++)ˆ @ m,,‚k€HmЏЏ%„ m"ЈЈ§k+@m$ЎЎ§k@m&­­=pHm'gg‡ m*``=m@m,ee=m@m.ff]„ @ m."'2qHm/CCъl@m0BBH„ Љm3o„ .Hm4**… Hm5<<й„ Hm666ž„ Hm700*mHm8ЦpHm:ŒŒl@m<‡‡ѕpHm>ˆˆмqHm?††v† mB~~шkHmDŠŠކ @ mEƒƒІ† @ mF„„so*HmGјƒ mJ––Qq@mL››Qq@mNœœu… @ mNєљЃmHmOЂq@mPU… mSяя’… HmTќќЦ… HmU2† HmVљ… HmWФqHmXssлpHmZrrŠm@m\mm qHm^nnalHm_ll…ˆ @ m_dfhˆ mb__˜nHmdppУˆ @ meiiІˆ @ mfhhсˆ @ mgjjkpHmh‹‹Сƒ mk„„гm@mmŠŠгm@mo‰‰qmHmpTTBnHmrSS'l@mtNNъnHmvOOpHmwMM]‡ @ mwFH?‡ mzAAЋkHm|QQ‡ @ m}JJ‡ @ m~KKSoHmyyж† m‚rrBj@m„wwBj@m†xxAl{Hm‡ппЦk{Hm‰ооšj{@m‹ййo{Hmккpn{HmŽии ƒ Gm‘ааЎl{Hm“мм0ƒ G@ m”ее]ƒ {@ m•жжƒ#| Р"!‚%|&'$‡.|-€1/230,*+/")(„5|67П45†9|;:8„?|<i@pCABA>=3†I|K|LpHAFGJEDƒN|P=OПM…T|Q7UpVAXWSCR ˆ_|^b/ac][\Ÿ`ZYƒe|flgПd4‡n|mJp/qljkoi h†s|uBtpr‚{|}+~zBxy|wCv ƒКSƒ C› КО‚ ВЃ,kЅ",kч1 0?Ђƒ#"й#"& КЙ‡ Ђй€п­ВЃ„ Sƒ  К„ ВЃlЅ"lч1 Кћ† ВЃ\mч1\mЅ" ƒК?„ C›„ 3… џ„ Х„  0?Ђƒ#"й#"& Кj† Ђй€„ A…  Кхƒ ВЃpqч1pqЅ" ƒКA… C›,k\mїmgj 0?Ђƒ#"й#"& КWˆ Ђй€Sƒ „ п­ КЉƒ ВЃїmЅ"їmч1 0?Ђƒ#"й#"& К-‡ Ђй€„ ђ‚  КН† ВЃgjч1gjЅ" 0?Ђƒ#"й#"& Кђ‚ Ђй€Sƒ п­ŸŠЎЬЬз’ Ў ЬР’ †   Ъ’ Ў ЈЈЛo Ў’ Ў žž<– ‚ ЊР‚– ‚ йŸŠ4Ў@ ЬЭс’ Ў ЮЯї’ C@ ааї’ Ў@ F” e@ ц№U“ Q@ зйm• e@ јјЎ• e@ љљу• ‚@ ћџŠ“ @ кк• e@ ёі “ @ вжѓ“ e@ охО“ e@ лнi– ‚ УЩ’ › Рo o sarxƒL– V– йŽ– Кз’ ŸŠ[” k“ • Ъ• џ• Ѓ“ %• %“ ” з“ йQ— џ )e—  р–  ъ– џ pyъ– џ dnY™ ‚ {4— џ [^™ ‚ `b{˜ ’@ $$o— @ o— @ +0ݘ ‚@ ''Ќ˜ ’@ &&ѓ˜ ‚@ ((Т— џ@" MYТ— џ@ %˜ ’@" ""ь— ’@" 7Kь— ’@ ˜ ’@" !!˜— џ@" 25˜— џ@ <™ ‚ O™ ‚ T™ ‚ e— 4џ@ " +– s a й— й— %— й—˜ ю˜ ؘ ™ Кр— Кр— B˜ L˜ V˜ d˜ КККA™ A™ A™ р– ™ Р™ џ В™ џ ї™ џ (. › џ Ъ™ џ  yš џ .› џ Бš џ &š š 0š >š Dš Jš Uš aš qš š '› `ЪККККؘ Кх™ ю˜ ё™ Кё™ К–š L› х™ Щš лš ъš ѕš › Л™  j   шьОž ‚ ЮхVЅ † ‡‹Yž ‚ СХ!ž e ЏВЈЅ † яѓƒЈ  ЕИŒž ‚ Ž’ШŸ  •™ Ѓ o іOЈ  œЄиЈ  ЇЌ•Ё A ЛОsЇ † !ШЫ’Ѕ † #-UІ † %ъўG џ '˜Ѓ o )фчЈ  *мсBЇ † ,іњєž ‚ .˜›ЃЂ o 0ГТнЅ † 2ХдŸ Ј 508kЈ  8;Q,Ÿ ‚ :T[tž ‚ <^•6Ј  ?ІБкЁ o BžЄђЂ  DзѓћЅ † F ž e H8BЇЈ  J35 Љ  L.0~œ ™ M'+ёЃ † Oy|Є † QmpНЁ  SsvЏ e VEHОЄ † YKNˆŸ  [Q]ЦЅ † ]`jЁ  `‚АІ † bTЄІ † d 0œœ џ f9Qœ џ hMЃ  kBŸ ‚ lФ e nкяђЇ  pђŒІ † r#rЅ † sЙœ џ vдхЌ  џ xСбЂ  zЎОз› џ }ШЫЇ † €ЮбцŸ И ‚†—NЁ  ƒџТЂ o …ЇЎЁ  †НХwЁ o ˆБКЮЃ † Š&ƒŽ џ ŒšЋ-Ђ  дз%Ї † ‘36   •ші e —{€Ÿ› џ ™LUБЇ † ›XdёЄ † 36’Ї † ž9CГŸ Т  •˜   ЂХЬп e ЃgjHЂ o ЅЯзШЇ † Јƒˆ џ ЋЇ­@Ѕ † ­‹’яЁ o ЎFI(Ѕ † ААТƒЃ o Г›Єэ  ф ЕmxŽЂ  З'7Ё  И*.fЂ A КЁЄ † М"#Є † ОіоЂ  Р ^ џ Т№ѓеЄ † УцэTЄ † ФоуоЇ  ЦBœ ™ ЩPk Ÿ ‚ Ъ;MkЄ † ЬВФЬІ † аЧйgŸ ‚ вn€)Ѓ A дƒЏW   е2 џ з*г  Т и-0іЈ  к36 сž ƒсž ѓ› &    & Fž „Ђ сž & Ђ& Јž ѓ› &  ѓ› й€ƒFž   ƒ  АЁ ƒ  АЁ & ѓ› йrІ ŽЂйДЃ йbЇ   & Fž & Ђ& Јž ѓ› &  ѓ› ƒFž   ƒ  АЁ ƒ  АЁ ƒ  ƒ& & ѓ› йУЈ й&Љ й  & Fž & Ђ& Œ ѓ› & & ѓ› ƒFž   ƒ& ѓ› & ѓ› й5І ŽЂй"œ йџœ qЃ й  & Fž & Ђрœ џœ  рœ '  рœ '  & Œ ѓ› & & ѓ› йџœ ƒFž й  йџœ йџœ ƒ&  ƒ& & '  Ђ;  & ѓ› йМ› ŽЂй Ѕ й  & Fž & & Ђ& Јž ѓ› &  ѓ› ƒFž й  ƒ  ѓ› ƒЩЩй€й„Ђ  Œ  й=Є ŽЂйw йƒ& & cœ pœ й‹Є сž & Fž №І §І  сž ƒ   ŽЂ& 鈆Љ џ ЂЂrЉ џ ’’Л ‘‘|Љ џ šš~Й  еЎ џ p{yЋ џ ™К†Г  *И  hmQ­ џ ^eОГ  Ж  УпЙ  5CпЙ  F[И  -/|З  ~ŠПЕ  !24 Ћ џ #–dЗ  %НР‡Ж  '\ˆ&Ћ џ )‹œ|Џ џ ,илЇВ  -ЏВПИ  /фчFЙ  1Юе+З  3осIЌ џ 4ЕИЪЙ  6ЁЄЪЙ  :ЇЌпЕ  =СЫ>­ џ ?ЛОxИ  @ж й СА џ Cм ш СА џ Gы њ jЙ  I9JAЕ  KMYЏЙ  MЬјЙЊ џ Nћ\Ќ џ O"0УЖ  QЌАУЖ  TВНУЖ  VПЩ Б џ XAЗ  [у щ фЊ џ ]ь ј ѕВ  `ƒ ” ѕВ  c} € +Ў џ eњ ѕД  iО Т ѕД  nЋ Л ѕД  rЮ в ѕД  vЄ Ј ѕД  {ž Ё ѕД  €Х Ы ѕД  „— › ѕД  ‰е ї FГ  Šo r †В  ‹u z /Ж  U [ /Ж  Ž@ E /Ж  ‘O S /Ж  ”H L ”З  –] d )В  —f l q­ џ ™“ Ѓ ИВ  І Л !Й  Ё_ q !Й  Ѓ … !Й  Ѕt w !Й  Їz ~ $Џ џ Љ‰  З  Ћїќ˜Б  Ќ  ШЗ  ­ G О­ џ Џџ 4К  А<?ЎЕ  В]aЌ џ Еќ иЗ  ИІЭиЗ  Л—Ѓ/Ќ џ От/Ќ џ СапЎ џ ФмБ  Ч!мБ  Э$5љЕ  ЮdnКД  в{”КД  еnxцЗ  иJ } Й  йqtџЊ џ л#,оЉ џ мАЖjЋ џ н’ЅгД  о49^К  п}ˆГЏ џ т<EйГ  цckйГ  ъX`3Б џ юлщ3Б џ ё  3Б џ ѓ3Б џ їIm3Б џ ћЧи3Б џ §‡Œ3Б џ 3Б џ —œ3Б џ ŸЄ3Б џ ЇЌ3Б џ ЏД3Б џ ЗМ3Б џ ПФ3Б  єў3Б џ ”3Б  ьёqЎ џ BEuЖ  HZšЉ џ 8JцД  /9WИ  ЙШЎИ  wzLЎ џ $Ma›Ж  %‹   ќА џ &сщLК  '€ ˆ iЊ џ (ьєдЋ џ +ejИ  ,ЫоVЋ џ .алVЋ џ 0ЛЭђ­ џ 2№љђ­ џ 4оэв­ џ 7 Џ џ 9HU;Ћ џ ;‹—;Ћ џ =šЂ\Ў џ ?ВИ\Ў џ AЅЏsЌ џ CsЌ џ E"(sЌ џ GўsЌ џ IьђsЌ џ K+1sЌ џ MsЌ џ O sЌ џ QѕћFИ  TЃ Ј ‘Ћ џ WЎ С bА џ Yв з bА џ ]Б Ш bА џ _Ы Я bА џ aк п Ў џ cт щ „Д  eџ  zЊ џ gЇЎтА џ iь ђ тА џ kѕ ќ эГ  l""WЙ  m##№Љ џ oC G №Љ џ q6 9 №Љ џ u# 3 №Љ џ w< @ ЦБ  yS Z @Џ џ {I P mД  Р Ю mД  б д ЎЖ  ƒз о QВ  …Ј Ќ ЃЋ џ ˆ  ˜­ џ Š  єЏ џ Ž1 j •А џ ‘n q QД  ’& . ДЎ џ “ # -И  ”  Ѕ РЏ џ •y | РЏ џ —… ‰ РЏ џ ™ ‚ РЏ џ ›Œ  ЈБ  œ—  эИ   §  ‚Ў џ Ђ  пЌ џ Ї - •Й  Љ0 ; ƒЕ  Ќ%FЗ  ЎAД 1 А}„Д Д}„Д  И}„qЕ 1 КpzVЕ  ОpzVЕ ТpzCК  ХФ Ъ ЮЊ џ ШЭ б М‹ОйŽЏ ЁЏ йѓЎ ŽЂƒЂГ йЂГ йqћ$Б ƒЩЩјІўЙ ёЖ ўЙ ŽЏ К ­7йv& й€й & йрєƒЩЩй€йрєйŽЏ ЁЏ  ƒжИ ƒ  C7$Б & ёЖ ŽЏ (ž| ƒ  №Е ƒЩЩ ŽЇСOЋ ŽЇС(Аєй€йрєйoВ йƒёЖ КкЖ oВ ƒ$Б Fў­ йрєƒГ %Г ƒ/Г %Г МєƒєЕ %Г ƒАє3Е d} %Г ƒАєЕ %Г ƒАє3Е %Г ƒє3Е d} %Г ƒєЕ #Е %Г ƒє3Е %Г ƒАєЕ #Е %Г gГ МVЖ Г %Г /Г %Г ГЗ VЖ & є& џ5рВ FўAЊ [Њ }А є'Њ йрєI І] у™ј`ЪІ]  ŽЂй"Ќ 5& АєЇС& AЌ ЇС& АєЇС& AЌ ЇС& Ў ЇС& яБ ЇСƒяБ В d} ЇСВ & ŽЇС(АєŽЇСOЋ йИ 5ƒМ5МшUЋƒМ"Ќ 5ŽАєFўЇСŽєFўЇСDБ "XБ ‡Б 5pБ DБ џlБ DБ JмІ] зЌ Ає5РЌ БЌ ЊЌ šЌ ‘Ќ ‡Ќ ‡Б ЦЌ Аєй€йрєйЋЉ СЉ еЉ ЇСМ5МƒЩЩйАє5ММѕ*МшцЋ §Ћ ММOЋ МАєUЋAЌ UЋАєМ"Ќ ч­ ‚§АєМАєМOЋ UЋAЌ UЋАєUЋЊЌ UЋ‘Ќ UЋРЌ UЋзЌ UЋ‡Ќ UЋšЌ UЋБЌ UЋЦЌ UЋ=lБ UЋ=иЊ }А FўAЊ [Њ є Њ йрєžД ІД ”Њ ЃЊ М  UЋ  џГ џГ  Њ єFўAЊ [Њ 'Њ йрєYЏ gЏ FўAЊ [Њ єйрєйoВ СЋ ЯКИ­ А 'А 4А JА B˜ ДА JА ККUЋєнЏ АєFў­ [Њ йрєFў­ ­ *­ йрєй”Е ЄЕ К$З Н !йч 0Д 7Д !йч 0Д 7Д Н !йч 0Д 7Д !йч 0Д 7Д М=lБ М=иЊ џ >>Л ==хК џ MivЛ џ BFIЛ џ HK Л џ mx Л џ zŠбК џ Œ‘ЅК џ œГaЛ џ ”™ƒћК •Л ЏЛ й<зссЯхб8Л &Л <зссЯхб8Л ƒ+FўйFўЙК ƒ]FўШУ џ4Ы ѕ*џŸŠџ,,œ WWЛУ џ  'Ы  %`Х џ !…”Ч џ 2,(Я  =є RМ  Q™ПЌЩ џ ZкюяЬ  bУелП џ v*Udб  }WqЛз }МММ џ }ђђєџ }ННџЛ  }ООШУ 4џ@}ѕЭ  }ЬЬ4Ы 4@}kа  }hnЖФ џ }ььѕ*4џ@}ŸŠ4џ@},-Yа  },1wЮ  }:DкЭ  } GJеЬ  } VbїФ џ }MSХ џ }q…Ю  }›ВѓЮ  }47ГЪ  }%)Ќа  }Sб  }Ещ5Ю  }ˆ˜˜У џ }"ьќЦ џ }#"%М  }%љ§ Ы  }'“šyУ џ }(ЉЂЮ  })ЋЗ_Ю  }+;HзЪ  }-Jьа  }/џа  }1ЙїŠЦ џ }59Я  }6ььœ 4@}6WXФ џ@}8Ф џ@ }:ZaBФ џ@}<]Ф џ@ }=;W]Ф џ@}>  ЯУ џ@}?ЯУ џ@ }@48ЯУ џ$}B  sФ џ$}D  џУ џ@ }EHЫ @ }GHЫ @ }Iw“HЫ @ }JptHЫ @}LHЫ @}M;Ь @ }OЛЬ @ }Q$$оЫ @ }SUЬ @ }U  nЬ @ }W!!—Ы @ }Y–›—Ы @ }[—Ы @}]!Ь @ }_ˆЬ @ }a""ЁЬ @ }c##јЫ H }eјЫ @ }g{Ы @ }h/Ц џ@}k/Ц џ@ }nvypХ џ@}rˆˆpХ џ@ }vjsTЦ џ$}w’’ьХ џ@ }xŒŒ Ц џ@ }zЫХ џ@ }{‹‹tЦ џ$}|““ЉХ џ@ }}‰‰ŠЧ џ@ }€$ŠЧ џ@}ƒТЧ џH }„wШ џH }…$$–Ш џH }†%%ЖШ џH}ˆ&&ЖШ џH }Šr‡'Ч џ}cЧ џ@ }cЧ џ@}‘ІЧ џ@}”ІЧ џ@ }—'.пЧ џ@ }™1?пЧ џ@}›Ш џ@}  Ш џ@ }ŸBNFЧ џ@ }Ÿ6Ш џ@ }ЁQ_6Ш џ@}Ѓ!!UШ џ@ }ЅboUШ џ@}Ї""EЩ џ(}Ј++Щ џ(}Љ**лШ џ(}Њ))БЯ @"}ЏџБЯ @}ДўўЫЯ @}ИџџЫЯ @"}МuЯ @}ОњњuЯ @"}РьяVЯ @}УљљVЯ @"}Цтщ“Я @}ЪќќцЯ H"}Ь7Я @}Эїї7Я @ }ЮŒр>а (}Я а (}а%а (}бRМ 4@}бєѕRМ 4@}бУФRМ 4џ@}бкллН џ@}жЉЉ.О џ@}кЊЊDН џ@}мЅЅиМ џ@ }н›ЁиМ џ@}оЁЁWО џ@}сЋЋWО џ@ }фФвeМ B }х~‹eМ B}цœœН џ@}щЄЄƒН џ@}эЇЇђМ џH}юЂЂђМ џH }яЊ­DП џH}ёЗЗvО џ@ }јАТvО џ@}џ­АНМ џH }ЄЇНМ џH}  uП џ}ЛЛuП џ(}Ž’иО џ@}ВВиО џ@ } уіиО џ@} ГГиО џ@ }дрП џ@ }љўП џ@ } П џ@}ДДП џ@}ЕЕœП џ(} ННИП џ(}!ОО•М @"}"•˜•М џ@}#žž;Ъ @}(фф;Ъ џ@"}-nyVЪ @"}1|‡VЪ @}5хх§Щ џ@"}76T§Щ џ@}9ррнЩ џ@}<ппнЩ џ@"}?$3Ъ џ@}CттrЪ H"}EшщМЩ џ@ }FМЩ џ@}Gнн–Ъ (}Hээ]Э @}MЫЫ]Э @"}RёќxЭ @"}Vџ xЭ @}ZЬЬЭ @"}\K—Э @}^ЧЧџЬ @"}a#4џЬ @}dЦЦ>Э @}hЩЩ”Э H"}jЯаИЭ (}kдд_С џB }lwz_С џB}mEE8С џ@ }oD^8С џ@}qCC№Р џ@ }s*№Р џ@}uAA№Р џ@}wBBŽС џB}xFFŽС џB }y|вР џ@ }|??0Р џ@};;0Р џ@}‚990Р џ@}‡<<0Р џ@ }Œфњ0Р џ@ }==0Р џ@ }’гс0Р џ@ }•ЙУ0Р џ@}˜::zТ џ$}œNOэП џ}Ÿ./ Р џ@} 77 Р џ@ }ЁЁЗлТ џ$}ІQRTУ џ$}Њ§TУ џ}ЎTTУС џ$}ЏKKТ џ$}АLLЊС џ$}БIIPХ џ }В""(б  }З ШЮ  }Л7H›Ф џ }МЪЪдФ џ }НЫЫЅб @ }О^eМб @ }ПglŒб @ }Р[\rб }УYYжб (}Фooыб }Хppыб (}ЦssЪЪ }Цуь_Щ џ }Чuu6У:ў8С<Г3A57;_=О@AГOAHIDMsNeJoBcEFKLC RYОWЊUГVAPTXЧaЕjГcГ[Ad\gthsleno]c^_qpoށє|ЊxVvzst{s€e~ŒєЃў•ˆ†Ž„s…e‰o“cš˜Ÿž‘– \ЁƒDЏЕЊЉГЌAЄЇ­tАŒ‚7ИЖЖЙБДКЛПЯаБЪГШ]ЦЭЧХsТeСoПcНУзежЮвд62брпноџстЮ wа ТФ ƒƒ‹Ю ƒ76Н ƒ7ЅН ОН ƒХ ƒ2Х EХ Ю МƒУа за Яƒ(ƒKЮ бШ ƒЊУ (Ь:М ƒХ МТхМ:М ƒєЪ Тхб ƒšа ƒЈЦ УЦ рЦ Я ƒ4Ф ƒ4Ф ƒЅН ййъУ ŒФ ъУ cЫ џџ‚§cЫ ‚§cЫ АЫ cЫ ‚§cЫ ‚§cЫ АЫ ПЫ АЫ cЫ АЫ ПЫ ‚§cЫ ‚§cЫ ‚§cЫ ю˜ Ь Ь Ь йП EЦ йП EЦ ѕО ўО ‘Х ѕО ўО ‘Х lЦ `Ъ`Ъ)Ц qћю˜ & +Я& +ЯдП ƒƒƒбШ ƒбШ КЧ ѕ*1515& ](& ](ƒ§Ч ƒ§Ч ƒ§Ч ƒ§Ч ƒ§Ч ƒ§Ч ƒ§Ч ƒ§Ч `Ъ4Щ іШ ƒ+љН О О ƒ+љН О О ƒ]MО О ƒ]MО О ƒfН ƒfН ƒ76Н ƒ76Н ƒ7ЅН ОН ю˜ `Ъшшшƒ+љН О О ƒ]MО О ƒfН ййƒО О ƒО О €М €М ƒ76Н ƒ7ЅН ОН `Ъ`Ъю˜ kП ƒ”О žО АО НО ЪО О ƒ”О žО АО НО ЪО О ƒƒƒѕО П ƒѕО П ƒѕО ўО П ƒѕО ўО П ƒѕО ўО ФO ƒѕО 9П ƒѕО 9П ƒѕО ўО ФO `ЪдП ƒ+љН О О ƒ+љН О О ƒ]MО О ƒ]MО О ƒfН ƒfН ƒ76Н ƒ76Н ƒ7ЅН ОН ю˜ `ЪМƒ+љН О О ƒ+љН О О ƒ]MО О ƒ]MО О ƒfН ƒfН ƒ76Н ƒ76Н ƒ7ЅН ОН ю˜ kП >ьzС zС Тх.С Тх.С М.С М.С МС њBњBƒJР cР ƒJР {ƒJР РР ƒJР wР ƒР Р ƒJР wР ƒР Р ƒJР cР ƒJР {ƒJР РР ƒJР ЁР ƒ’Т ŸТ БТ КлП ŸŠƒєТ У У :У ƒpУ JР cР ƒpУ JР cР мС 0Т ›wXлƒ=б лЮ 70МV.лЮ ™ЇФ фФ zС ййКdб œ ›wв в {Щ “в џ `tж П ŠТе П DH|ж П''=д  ‘™rЉ џ 22uв џ ŸŸ^в  jв Щ 11} o 00з ˆ  ЊвХв ˆ  PPJе  енœе П аCд П WWpе  ГЮИд  3qж П E[‡ж ˆ '_жд  gjжд ]]бж ˆ \\бж ˆ #M‡Bж П%Bж П 'lз ˆ +ръжз ˆ /э§œз ˆ4††œз ˆ 9$в џ :HHУж ˆ ;_Афд  @ŽЇїе П A6BАв џ@ Bbb~г @ Ckkхв џ@ DddЭв џ@ Eccќв џ@ Feeг џ@ Gff'г @ Hgg<г @ IhhRг @ Jiiг @ Kllв џ@ Laa№г @ MqqЁг @ NmmЖг @ Onnд @ Prr%д @ QssЩг @ Roohг @ Sjjог @ Tppж ˆ U0ж П@ VŒŒ ж П@ W‹‹Эз ˆ WNPЙж ˆ WUWЩе П@ XEEже П@ YFFуе П@ ZGGaж П [.4ж ˆ \ЦЦcз ˆ ]Qз ˆ ^lд @ _••Xд @ `””•д @ a——‚д @ b––Њд @ c˜˜Eд @ d““Cе  e+е  f ж П gЮд~е  hјўƒе П iёе П jжф[з ˆ kщяiж П l&,ˆе П mёѕе П nЏЫ+є!Н$О#Ы%Ы&'()s2e"o*c-.13,/0 659є:О;E­AН@НCЫBЫDvf з з #з юд ћд е е /з ?з ѕж vfUе bе КЇе Ве ж Цд Цд Цд vf’ж Єж Ќж ййКнж чж Кнж чж КPж КPж vfUе yз ‹з vfUе фз ?з йЌз vfvfИз йЌз vfvfИз …в Цд vfюд ћд е е Цд Хв vfvfvfКККККvfqћд vfvfvfvfvfvfvfж ж vf!йКvf3е К3е 3е КККК!йК3е 3е 3е 3е 3е 3е 3е 3е џXлrЉ џ &и џ м џ Лж єo ‚й џ Sци џ 08ци џ ;k;к є )Ÿи џ ,2Sй џ њeи џ "Нїѓй є #%'ѓй є %*-%к є ,EP%к є 25BЗй є 5ЏДЗй є 8ЗК6и џ :Ќй џ ?wŠй є DntƒЖи Ци КFй Жи Ци й 1й йи Кй Жи Ци й 1й йи ƒTк eк Pи йи ƒЖи Ци Pи йи ƒЖи pй йи ƒPи Šи  к ƒЖи Ци к@Pи хй йи ƒЖи Ци к@Pи йи ƒPи хй ƒPи дй ƒPи ƒй ШЇЦи й ƒFй ШЇЦи й Ек џ Ли Ьк џ  ‚л   шк џ ƒŠ;л У bл У OYл ж $л ж )6л ж 9?lл  ^kік џ ‘л  Kл У /л У n€Тк џ CJнк нк I нк й л  л л |л л КI [л КЕк  &м џ )+&м џ .5рл џ 8:ўл џ  ўл џ ўл џ Wм џ "Cм Nм  л м Ек  ^в џ Ћм џ о є ХлЕм џ ѓЕм џ ,9Ем џ =Jп є Гђо є \Ап є IfFо є Fо є $Fо є '.ьо є 7Fхм   !хм  ѕхм  пюхм џ ;Sхм џ ЃАхм џ !‡ хм џ #Vjхм џ %mwхм џ 'z„хм  )$8хм џ +ГРхм  -j”8о є .—ЂЬн є 0ЅГдо є 3NX€н є 5 €н  8Он є 9ЖТ)о є :!)нн є ;13žо є <УЦžо є >ЩЬян є ?Ябй Ъм км К Тм К‘о *п К‘о Кп mо Wо  gн  ^н  Тм  gн  Eн  н  н  5н  -н  н  Lн  њм  xн К OЋ  то РЌ  ­н  н  н КB˜ Хо 9 11Л ++‡п џ DHЧп џ ehœп џ Šр џ =Aр џ 7:Еп џ KYfп џ knоп џ q‡Bр џ \bŽЂMM*р ƒ+5ƒ}п ƒšїп ƒ]5Ур џ йЯр џ$В™ џ  Л  ^в џ  Rс џ@ 2с џ@ с џ@ ћр џ@ тр џ@ Іс џ@ #Ќт џ@ Хи’т џ@  ИУ`т џ@  -Ћvт џ@  ­Жtс џ$ т џ@  ))њс џ@ ''сс џ@ &&Ьс џ@ %%Lт џ@ ++8т џ@ **у џ 8=щу є -1—р џ ѕјЫу є !36>у џ & +ф є *лѓFф є .њџbф є 2›у џ 5RVˆу џ 9?FЧт џ =HOн @дm ic x  є% ‚§є% є% є% Пс ‚§‚§‚§‚§Žс К‚§‚§дП `Ъ`Ъƒу "у /у Ёр Њр Jу єу Ёр Њр Жр Ёр Њр Jу лу Ёр Њр Jу \у yу ф ф #ф 8ф Ю Њр Oф Yф Ю Њр lф Yф КЃу Му Ёр лт эт ћт Ёр лт эт ћт Яф  55rЉ ф 11Лу //Вф џ 33St џ 00Oщ є ї/ъ є Лн‚– є ~ ‚– є S{]щ є JQх џ >BЂч є DHащ є ›Єƒщ є ˜ш є =D’ц н \gИш є jp#щ є QY?х џ s~Цх  "Œэщ є $GNЦш є )”˜Цш є .›Їtч є 1$JCч є 3эђCч н 6ѕљfш є 7ЛРfш є 9УЧлх  :рф‚ш є ;))пъ ˆ @Њц§ъ ˆ Cќіф џ EЪн1щ є IV„ћщ є JT|`ц н Oщ!рч є Qчъъ ˆ SЌИѕш є WMSц  Y‡ЉТч є Z,?Ѓъ ˆ [BQ5ш є \((Žщ є ]‘Wш є ^­БЕх  `ДЗ\х џ bЂЊш є cХШpъ є eКНлщ є gРТYъ є iэєТъ ˆ kЮгч н mжуBц  nцъMъ є pБИAъ є rЇЎхм џ tDGхм џ vJMjн yрэjн |№є  н '  н ‚*./х џ „кф  †%Вц н ˆ§х  Š Јщ є Œ?BЈщ є Ž9<Uщ №ц йПц 5ъ йxц ‰ц Œч Ž– йxц ‰ц Œч ъ šх њBƒрц ƒрц й ц й ц й ц й ц йSх йSх й ц qћ ц xц ‰ц Œч qћмш щш xц ‰ц йьф Œч йaч йaч €йй€`ЪЂш qћ ц xц ‰ц Œч йaч €й€ щ ьф Œч 3ц qћьф ц xц ‰ц йш ƒМP щ ьф Œч 3ц ƒ3ц `Ъ ŽЂŽЂ& й€й ŽЂ*ч ч *ч ƒЯц ƒЯц  %х  х vПц рц vПц Яц  №ц %х  №ц х йьф йьф qћ ц qћ ц vНщ vЧщ Ек  Лo <™ џ <™ џ  O™ џ  T™ џ  T™ џ Яы џ enЈщ џ 6Јщ џ 9[Јщ џ ^Јщ џ ZbЈщ џ ьњЈщ џ ўЈщ џ FWЈщ џ BЈщ џ ѓЈщ џ Ю№Јщ џ ЉЫЈщ џ „Іvь џ r~Сь џ !3BЯь џ "EVЈы џ $#Јы  &&+Јы џ 'э џ )дноы џ +ЏИоы џ .ЛФcы х /ЧбŠь џ 2рънь џ 5Ќэы џ 6.0rы  7[^rы џ 9be™ь џ :hjџы ь ь ь џы vvзЌ vЦЌ vЊЌ vhь vWь vGь v ь v0ь v>ь vБЌ vРЌ všЌ vgн Кйmо Йы vGь v­н vн  н B˜ vhь РЌ vяь э ™ы eњ џ [kџ[[Юљ џ ЕЛrЉ џ DDaэ џ BBЛ™ @@Вф џ IISt џ EEgэ џ FFXэ џ AAо№ џ ’’Оє ˆ рфјќ  ЇЦmљ џ еиmљ џ Явmљ џ лоQј џ счыј џ ъэыј џ №ѓыј џ іљыє ˆ ќђ џ $,5ѓ џ !П№ џ 9=Ії ˆ FIf§  $лцf§  (іџf§  - f§  1щѓf§  6lї ˆ 9cЏуэ џ >ВЬi№ џ @!”љ џ B$) № џ D,T № џ FW`Šі ˆ H/6Q№ џ J@C‡ю џ K1 4 §ё џ L) . ѕ ˆ M & шђ џ OЕПЄя џ QlxЄя џ SXcЄя џ Ufiё џ X‘Ÿё џ [‹Žё џ ^{ˆqј џ `PUšю џ bЂВvя џ dЯвЖђ џ eppFћ џ fux(ј џ gT c ѓ џ k9 > Иё џ mA Q oі ˆ no u 1і ˆ px ~ Tі ˆ q ‡ ўѕ ˆ sŠ  лі ˆ uf l љ џ wvz3ї ˆ xcm0§  y‘”ї ˆ z‡ŠG§  |–œрќ  }ps{ѕ ˆ „чM§  ˆднбѕ ˆ ‰P`лю џ ‹ŸЂѕя џ я џ Ž}„ѓ№ џ Эбˆќ  ‘ЧЧ*ќ  ’ШШя џ “ЩЩPї ˆ ”ЦЦcћ џ •ЫЫЇљ џ ˜_ d kђ џ ™g j фё џ šЅ Њ *љ џ ›у ў ™ќ  œ2 Z рї џ ž Ђ ќ  ž “ђ џ Ÿб р *ю џ  • › aё џ Ё­ Н ї ˆ ЂР Ю Яј џ Ѓ / ”ё џ Ѕ{‚ћ џ@ Іџ ћ џ@ Їggsњ џ Њ]]њ џ@ Бёќњ џ@ И`fћ џ( Йii-ћ џ( КjjШэ џ Л  Ÿј џ Н  Ÿј џ О 4џ@ О[\љћ џ Хкюј џ ЦЎБРќ  ШЈЋуѓ џ ЪЫиЭђ џ ЫисЮї џ Ьѕ9ў  ЭrvFє ˆ ЯюђFє ˆ ечы†љ џ жY_ѓ џ йyЉ\ю џ кkoбќ  лbh1ё џ н27;ќ  у&/Хћ џ х:EVћ џ цHVfѓ џ ш fѓ џ ъ Ёі ˆ ы#3я џ ьЏГЄё џ эЖеє ˆ ё,€šћ џ ѕЉЙ&ѕ ˆ іМЩŒѓ џ ј&)Vђ џ њчѕ ˆ ќƒІЪю џ § #Rњ џ ў{№ џ б{№ џ ШЯKю џ љ џ  jю џ ˜ЅШі ˆ ““Яё џ ‘‘фћ џ mmРї џ Гќ  ‡‡Aј џ ””Бі ˆ ••fѕ ˆ ––2ђ 2џ њѓ 2ˆ zэ џ o t Cљ џ w z Jя џ ОЧ<ѕ ˆ ЛЛє ˆ OO!є ˆ PP4є ˆ NNCђ џ VV6њ џ@ !ККњ џ@ "ЙЙсљ џ@ #ЗЗќљ џ@ $ИИfњ^њ`њ]њaњbŽžЪŸЦСœ-еє й& жя & щя & Ря & 7Мщя ё Мжя ё МРя ё М7 ё М'ђ шMѓ Zѓ й7йРя #ў Г§ ї Я§ ш§ ї y§ …§ Г§ ї Я§ ў ї y§ …§ ”§ ї ƒ|ї ї ƒ7ЇСљэ ю й€йрєй;№ й№ йšі йРя йййМAЌ & Ря & щя & жя МРя ё Мжя ё Мщя ё Šј йЌю йя Уђ vƒЋ!ѓ (ѓ й€і і Lі і і )і і ѕі ŽЂEї žSММ\§ ƒŽѕ , ѕ Ћѕ Жѕ Цѕ йИ­ § '§ ййњю й„чйКqћКžД žД aї wћ Ѓэ Нэ йййљї йй|ё ййй|ю ййКeњ kЊњ Ињ ањ чњ ‰ШkЊњ Ињ ањ чњ ‰Ш[wКййЕј йкtkЊњ Ињ ањ чњ ‰ШМй€й™Ј`ЪййGё Uє dє pє |є †є йй­ѓ Шѓ йййGё йOќ cќ pќ }ќ †є йкћ йКGё Кyѓ -vrI є Вє є Вє Џћ ƒrI й‰vѓѕ ЬЬйrI Ž№ Ѓ№ ‰йrI Ž№ ‰йrI й‰й|ю ЬЬ№ћ ЬУђ КЃэ Нэ й`я Lѕ КККК`Ъ`Ъ`Ъ'› rЉ џ Лћ ››6 O у=6 џ вр џ 1; џ ›ЂO  ‰Œў џ ’Ќ џ •˜Ф  IL9џ џ NQЌ  >A| џ DG“  ЊЌ" A ПС< ?  д џ ЎМх  ЂЇ3 џ "gr џ #SXG џ %[db ~ 'ut W ,@Jw  .M€љџ џ 0ФЧЕ d 4ЅЊ _ 6ƒ†…  8ОЬЏ  ;ЗМ  =ЏДЌ E ?’Ÿzџ џ @'/Žџ џ BЃІї  DЉЌx  FЏУ1 ~ JюŽ a M  ) Nнъ? џ OЦкŸ џ Pє џ RсхP c VHdџ e W*4ь f X7;Шџ џ \"'ƒў  _ дџ џ bшёџ џ e>EЛ T hШ ) iло ~ jјџ ~ lкрUџ џ mЪЮ•  nбе1 s pktх ~ qуѕl > r)_  sЄЇЛў џ v}€Лў џ xwzЛў џ }ƒЁТ Ќ ~гз"џ џ ,@ж ) „ЊЗУ  ‡КЧп  ‰[h—  ŒCXW ŒЪЯКB В Y КOЋ ŽЂƒ+ У ””МУ & & & ƒйqћ& й”…& ƒу ƒ+5ƒ+5ККe М5ƒ“   В "Ќ ƒB ƒЩЩƒЮ п У ƒ# ƒу ƒ]5ƒИ­ ƒєЙџ ƒЩЩКИ­ B˜ 'А 4А O B˜ ДА JА ККƒŽЂƒ\ u јІMƒƒ[qƒрNў ƒтџ јІƒšїп ƒŽЏ ў ƒŽЂ””МУ МƒƒƒyДƒ&Л ƒвў хў љў џ ƒ+5ƒyДƒyДƒњ ƒ]5rЉ  ''Л %%Ђ џ -6ъ џ ;? џ X^Ь џ HL џ im џ wz џ }€0 џ BE> џ !af] џ %OSЛ џ )pt[ џ -ƒ†–D ƒD V.ў + D V.2 I D V.р уD V.ъžSD V.žSD V. йD V. „ йD V.P йD V.JмйD V."йD V.l Л 22єџ 33ї џ ;Aї џ DHї џ KNї џ 58Н џ ‡B џ QVB џ YuŒ џ x~Љ џ Šо џ В% џ ЩЬ% џ ТЦ> џ ЕИЯ џ ЛПю џ %Яф x є‚§­ b x b є‚§­ КйEХ 3 лƒЅН ОН ƒЅН ƒЬ щт ƒ  & EХ л3 rЉ џ 22Л //Œ џ 00[ џ УЦŠ  џ Й  n  ИРF џ ВЕџ  ШЬ<  уцž  7:Ÿ  =Љ3 џ щёЯ  =y џ йрy џ ЯжZ  єќ  ЌЏƒƒƒКƒƒƒO ƒК д qѕ   ƒрN5ƒя +юК1cКƒŽЏ 5rЉ Ў ::Л 77Œ Ў 88в  €„ш  ‡ŠŠ  šЁŠ  ЄЏŠ џ —Š  ВКž  !^ež  (u}ž  .hrž  3R[ў  7@OŽЂМƒК I qѕ  ƒК g qѕ  ƒК qѕ  ƒК I g qѕ  К I qѕ  К I g qѕ  К g qѕ  К qѕ  ƒ  1 œ џяяs џ я;ОЎ ŠŠЛ ……?t Ў ‡‡gэ Ў ††Џ  ЈЈУ   K\™  ЊВ   РХ:  (# џ +H џ ВК  МРТ џ јM џ _с џ '  ”  !ТіP џ #­Аш џ '’Їж  )ДО- џ ,въt џ /Щаœ 4џ@/я№Ц џ@ 0 Ї џ@ 1ѓ‡ џ4ёёц (5G   6. н ‚§і  йѕ Е й†O•O ^ y   і y  ^ ш6 >ь>ь^ y  >ьy L ^ y ƒЉv й}‹ƒ^ y  йѕ й†O•OŸ ГBййКs œ  b |ж џhhrЉ џ ИИЛ ЗЗŠ џ "АŠ џ ­Х џ ›Ј7 џ ƒ˜7 џ |€в џ уы№ џ я§П џ И џ !.И џ ] џ 1>ž џ ПТx џ !ЫЮ џ %њP‡ џ 'Юд§ џ )ЧЫ§ џ /НФ џ 1зфд џ 3чї1 џ 9SbЋ џ =имь џ Aбеœ џ DХШт џ GhyМš ~ М­ ~ ŽЂD O Z c k u ~ єйрєžSЪ p Ъ žSЪ -с p Ъ КЋ КМ ( FŽЂєUє cќ pќ }ќ †є йПц йрєйL cќ pќ }ќ †є Кџc К Кџk К йЋ И­ vfы ~ |ж џддЯф  //Р’ џ **$ џ ++Л &&X  44E  33gэ џ ((u  88. џ ,,8 џ --7 џ Wv§ џ АА џ UUQ џ  Ѓ џ эяй џ ђід џ љ§… џ ™ џ отf   ШЫЭ  ДХЭ џ ЉЋЭ џ ЎБ  Юг џ жл џ !x џ $:є   "fi џ #' џ $Pcm  %GMо џ &=D'  ' К џ *  -S~ џ .ADё џ 2ANШџ џ 5G~ џ 8 )дџ џ <,>Ÿ  >ў{ џ @„ы џ C7>a џ E–š` џ FЙРV  GЩвŒ  HУЦ# џ IетS   JхюK џ KГЖВ  N{“В  PuxВ  RorŠ  TёјЙ  Uшѕ  WјќШ џ Y‹АЗ џ [ГЮ; џ \Šю џ ^Щ џ ` ЃE  cпч• џ fдмj iNRj l;K   oy   r‚ˆйA : ‘о & њю Х+ ƒйМƒqћ& ƒ”…& ƒМƒу у ƒрN(ƒŽЏ (ƒ) ƒƒ kŒшkŒƒйƒ[qƒ[ ƒƒ\ u јІƒqƒ[јІƒ\ тџ јІй‹Ю ƒ}п ƒ[ йoВ kŒћZћZћZћZћZЧ к Аєєй йƒК+ І] Uщ І] ƒƒ{ƒєЉ Ў Т Љ Ў Т vѓѕ Нщ vѓѕ Чщ  : %х  : х  џџџџџv џ ƒЅю џ 2Д  2__D џ 2tt8 џ 2uu8 џ 2ss( џ 2cc( џ 2ƒƒЛџ 2St  2bbŒ џ 2‚‚i џ 2xxP џ 2vv\ џ 2ww 4џ@2ƒ„ 4џ@2ˆ џ@2˜˜ˆ џ@ 2бт˜ џ@ 2˜ џ@2 џ@2‹‹ џ@ 2 ю џ@2’’ю џ@ 2%(в џ(2 *Pв џ2œœi џ@ 2––E џ@ 2ЗРE џ@2•• џ@2”” џ@ 2УЯ› џ2……О џ@ 2ЉЏО џ@2‡‡x џ@2ŽŽx џ@ 2 B џ@2"ŒŒB џ@ 2$ И џ@2&‘‘И џ@ 2(#І џ@ 2+хІ џ@2.™™ё џ(2/žž џ(20ŸŸm џ(21ЂЂГ џ(22ЃЃP џ(23ЁЁ. џ(24  а џ(25ЄЄ” џ(26ЃЃэ џ@ 27ВЕэ џ@28ˆˆy @ 29y @2:ЄЄЩ @ 2;knЩ @2<››o џ@ 2==\o џ@2>—— @2?žž @ 2@vy^ @ 2AЂЂ> @2CЁЁ> @ 2Eпц! @ 2Gщ! @2I  ­ (2Jзн­ 2KЈЈ џ2N‘‘  џ@2O““  џ@ 2PМЩ­ @2Ršš­ џ@ 2Tei џ@ 2V^c џ@2X˜˜х @2Zх @ 2\pt“ @2_ЅЅ“ @ 2b;U (2cЏЏ% (2dЎЎ  (2e­­ˆ (2fААС (2gВВш 2hЋЋш (2iИИЫ 2jЊЊЫ (2kЙЙЃ (2lББѕ (2mГГк (2nВВG џ@2o””G џ@ 2pЬеR D 2qЇЇ  2rЖЖ "І4%#'spbx*+,0Ў/џ-2.1DщE[:JG8Ks;pAb>x=6MCVTQPџORXSZYƒƒЬЬшшЬЬƒє1 ƒє1 ƒƒyƒyƒ1 ƒ1 Кv  ƒ$Фƒ$Фƒc ƒc ƒк ƒк ƒєФ ƒєФ ›wƒŠ ЬМƒМЬƒƒЬЬшшЬЬƒƒyƒyƒ1 ƒ1 ƒƒКю  ƒ$Фƒ$Фƒc ƒc ƒк ƒк ƒєФ ƒєФ u C ›wƒЬ  ›w›wƒМЬe  Л bbš&b ccn#  сы" џ эї" џ Щбу" џ љN#   h$ џ 5G! џ ‡ŠИ" џ „$  z›" џ  ф#  П$ џ мпѓ џ wе џ muh" џ beе! џ ]`.! џ !)$  дйЊ#  +3˜$ џ ’Ђ! џ eiЂ! џ !lrT$  $ЁЏ# џ &gk„! џ '‚…+# џ *IRK! џ -T[4$  .•ж$ џ 1БЧЦ#  2twй# W" й=" W" ƒййƒ†$ йМи" >ьи" & & М& & †" ѓ! ƒƒƒƒЌ$ FП! Fƒ+5ƒ# ййm! x! йm! x! ƒƒ]& )% џ rr% џ nnЛ hh1' џ E) џ  Š& џ ц& џ R]Œ)  мп -  жйC' џ шыX/  тхй)  ˆА.  …А.  ‡…' џ žЄ*  w-  ІЉў% џ #L4/  #ŠІŠ% џ %ЈЋŠ% џ )ЎфЈ-  + }( џ /38}( џ 2-1}( џ 4@Pš' џ 6Ќд˜% џ 7u}‹/ D 9‘›.  ;NW.  >hsы*  AYf*  C_i*  EkuC% џ Jцўъ( џ K С( џ L:>X& џ N-0\) џ R$r+  Vr+  Y я)  \&+ž*  _Явž*  bЪЭs*  eСШl-  gдсЏ+  iCFј-  kloC/  lуё') џ nyІ,  pZ`І,  sIXn/ D uqw&+  wŠ›+  {•Пn.  <An.  ‚4:№.  „“Q-  †biŸ/ D ЁˆF( џ ‹їѓ' џ Œ№ѕ`( џ ў у% џ ™.  ’јќз+  ”%'.  ˜оф[+  ™ЭаЈ' џ ›АЦ-  Ÿймњ*  ЁвзЭ( џ ІЙ-  Љців-  Ќ # & џ А/  БШЫе.  Д&0X,  З?I3( џ Й /  Лк,  Оћўк,  Ріљк,  У Х& џ ФХ& џ ЦЬ% џ Ш!$Ÿ)  Ь2=Ј% џ ЮKW' џ аayЂ& џ б[^g' џ г|‘( џ зŒС.  йŸЂ3% џ м‡ŠП' џ пЋЎЙ/ D х–) џ щ‚…s,  эЄЉ ,  ђ‘”ƒй=ОКйККй}% і& МS' МS' МS' к@МS' ћZ4* О, 74* 7& ƒƒ6- ƒк@}% ƒ1 }% ƒЖи ƒЖи 1c}% йб‹к@˜( Є( ˜( Є( ˆ( й€йƒ7ƒ}% ƒи& }% ƒ1 }% 4* W* 4* B* ƒЖи 1c\% }% ƒh& u& й€m) ) u& "( њћu& …+ йє* Д* П* Ю* 4* й* Ю* h& * * h& u& & Ч+ М@+ ММ7h& 74* О, "Ќ М7ƒ@+ й€m) ) u& Щк@u& ‡. й€ƒ7й@+ ™* h& йй"( њћйййћ+ й6. K. \. 4* }% ƒ"( ‘- - 4* + йКй,) йћ+ ћ+ й& 2& H& МК) V.ƒК) V.ƒк@ƒ1 к@˜( ˜( ѕ, ˜( ƒƒи& ƒ1 йК) V.™йП% й,~' yй:щ"( њћй:щй:щ,й:щм' й:щЯ/ ч/ љ/ 0 й:щ,) й:щм' ’, й:щ , 4, I, Л ##T0 џ $$i1 џ +2i1 џ =Hi1 џ 4;b0 џ ORM1 џ TXЈ0 џ ew 1 џ Z]ž1 џ _bр0 џ JMј0 џ &&0 џ ''81 џ ((z0 С0 t1 $1 ˆ1 [1 йz0 й[1 йС0 ж0 й$1 йˆ1 йС0 ЈF ЈF ЈF Л ]]aIЎ ^^13 Ў jm4 џ z}Ÿ6 K TgЇ2 Ў €„ф4  %2 Ў 0?Щ6 њ !‹4 џ $-Т4  BQˆ3 џ pwј6   W4 џ Юв?5 щ РФ=4 џ ел(6 K ЧЫ†6 K яѓЯ5 K сх™5 K іќ5 ' шьm2 † …‘~5  šІЉ4 џ fjу3 џ !z‚Д5 K "mwЎ3 џ #ЏД‡2 Ў $ЗЛ 6 K %”—Ц3 џ &ЉЌ_3 џ (Щж_3 џ *йт_3 џ ,_3 џ .хі5 K 0ЛЦN6 K 2k‡я1 Ў 4Šžх6 џ 5">Р2 Ў 8‰Р2 Ў <“œР2 Ў @ŸЈР2 Ў BЋВ4 џ CA]o4 џ E`hQ2 Ђ FЕИйO3 йККƒ& 5 й@2 ƒ 3 ƒ7й 3 йƒd5 йƒd5 йƒƒйƒйƒйййл2 йњ2 й7йt3 ŽЂƒl6 й 2 й 3 Зањ2 За7њ2 За 3 л2 йƒЗаџЛ  ‹7 Ў  P8  р8 Ў GKФ8 Ў @Dќ7 Ў  %9 Ў 169 Ў \7 Ў 9=q8  (.ƒ7 Е7 б7 ƒc8 У У :У ё8 ј8 l7 д8 8 8 38 8 8 œ8 8 8 38 l7 q7 8 8 œ8 З8 DG  ЛХPG џџџџПJ  ”žЫJ  џџџџП9 Ў |Ž J  ЈЗRSЎ||ѕA D '$0Ѓ9 Ў'‚‚ˆ= і'€€ЈA D'єєY9  'ООrЉ  'ЦЦЛЎ 'ТТє9 'ФФp9 Ў 'вв|9 Ў 'ггВA D 'D Q KC D '<AљG 'ТТG @' ППЧG @' РРdG @'ООH $'УУPG 4'ЛМ0K $'yт0K '››јJ @'˜˜K @ 'ivK @'™™пJ @ ' MYпJ @'#——EK $'$œœЫJ 4'$”•а> џ '&ž Ё 6: Ў@'(ƒƒ6: Ў@ '*7g: ЎH '+††„: ЎH ',‡‡M: ЎH '-……Ё: ЎH'.ˆˆЁ: ЎH '/DJЬ9 Ў'2~х9 Ў@ '5діх9 Ў@ '8ћх9 Ў@';€€х9 Ў@'>‚‚Ю: Ў$'?‹‹ф: Ў$'@ŒŒњ: Ў$'AЗ: Ў$'BŠŠJJ H 'CЏА]J H 'DВГJ 'GЊЋ1J @ 'IЌ­wJ $'JЖЖг? џ 'K  5@ џ 'P 3 dC D 'U6 J = ю 'WЩЭ=  'XЉЌ= џ 'Zєї=  '\бе=  '^ЏВ= џ 'aЕЦ=  'eиюH  'f€ • "= ѓ 'h / ‘C D 'j˜  )F  'k•˜M< Ў 'lЃІСA D 'm~@ џ 'n’АC D 'oс ю ѓI  'p +C D 'q  ŽI  'r  c; Ў 's + шE  't‡Œј? џ 'uё § >=  'w2 < ОF  'y  ОF  '{њ ОF  '} ОF  'V } і; Ў 'F J і; Ў 'ƒM S і; Ў '…> B šJ  '†  Ѓ КB D 'ˆК Ц ; Ў '‰А Ж C D 'ŠІ Ќ MA џ'‹MA џ 'ŒНЬn< њ 'ЫЮn< џ '’СШn< Ў '–бn<  '˜ЗОn<  'šЉДЌ@ џ '›№ѓС; Ў 'œЖE D 'ž ЖE D 'Ё%ђF  'Ѓ7>ђF  'Ѕ(4-G  'Іхь-G  'Јяћ-G  'ЊўзЪ џ 'ЌO ^ S> ћ 'ЏJnS> џ 'БAE‡9 Ў 'В“›Ќ9 Ў 'ГЯтr@ џ 'Еa m ЧI  'ЗquЧI  'КwEF  'ЛžІ6D D 'С- = ›F  'У@ K ;; Ў 'Ф ? џ 'Ш ? џ 'Э#{`F  'ЮИКI  'аіљA D 'бќџ&A џ 'в§@ џ 'жЅ Ж RS4Ў@'ж|}RS4@'жЈЉм; Ў 'ибе}I  'кУЧuF  'м Я<  'сѓїЯ<  'хы№ь@ џ 'цeh­I  'ш­I  'ыBб@ џ 'э сA D 'юknюH  'ёKTюH  'ѓEH D D 'їЪЮ<< Ў 'јКРКD D 'ћЁКD D 'ўqtКD D '­ВКD D 'wŒКD D '“КD D ' –šКD D 'ЄЊBI  'исBI  'фшЋ? џ 'W[Ћ? џ '^bсI  'њ§“E D ' л ѓ C D '!˜ › Д> џ '"Ќ Џ jI  '&У Ъ jI  '+Э и ѓC D '.  ^=  '0І Љ ^=  '1Ÿ Ђ СH  '3x { СH  '6~ ‚ СH  '9… ‰ СH  ';Œ  СH  '=’ • СH  '?r u jE D 'BВ Р ‘@ џ 'Eі ; Ў 'F‹ ѕ '; Ў 'Hq u x? џ 'K– š |> џ 'Lk n |E D 'M… ˆ D D 'P “ gA D 'R{ ‚ XK  'Ta i XK  'UW _ кB D 'Yї < Q@ џ '\s x Q@ џ '^P U Q@ џ 'ak p Q@ џ 'dW ^ Q@ џ 'ga h ‰J  'jx { [H  'm‡ Œ ЬC D 'p~ „ F  'qw{F  's~ƒ0H  'u” G  'w—œFH  'y†ŒнF  'zІЋHE D '|ЎДrB DH '}WarB DH'~,,ƒB DH'--ƒB DH '€dnUB DH'++UB DH '‚HTџA D@ 'ƒ''џA D@'†((B DH '‡))6B DH 'ˆ**–B D$'‰//$F  'ŠььС< џ '‹  Њ< ј 'Œфф/E D 'ttоC D 'Žщщ­H  'ццЗH  'ыыjџ '“Щ Ь  џ '–Ю о ш> џ '—ЧЬЇ; Ў '˜ЁІ7A2!ЈN 9*8.І-/#0'%&(o2n/c0s1z€J56347ЫаЪ(Ь-ЭШХЦЮƒ-YC H _Aƒ_AЋG ƒ_AуG ƒ_A}G ›wH ™ЈH ™Јƒ™ЈЋG ƒ™ЈуG ƒ™ЈуG ƒ™Ј}G ƒ™Ј}G ›wƒКй: й: ™N …' „чƒƒКП9 RS): : : : ): : : : Тх>ьžSМ & К J RS˜> Тхƒ+5Х Г]ƒ]5x ѕ> Ќ= §= 8> 5&> Т= ж= ы= МŽЂƒ8> ™N ™N ™N ™N & ƒƒƒƒƒƒ‚§_A„N §= „N Ќ= „N > „N 8> ‚§< ‚§< ‚§-< КЩэ7ККййƒ< x ƒfx ƒ< fx ƒx ƒ–< КТхƒХ ƒаE Х шx шаE ММаE Мx ƒєЪ ƒХ n> ƒХ ММƒЅН ƒХ ƒХ n> МЩ`D uD ŠD ЂD й€ƒƒa? B? O? ƒ*? ЬB? O? йu= ййƒєOA ƒь; ƒ„чМF ƒт< э< ќ< = ƒт< = = щ щ^ щI М? щ™ЈММI ѕМѕƒЬ щт ЪD лD ьD КE E ЪD лD ьD ўD КE E 1cЪD лD ЪD лD 1cЪD лD ьD 1cƒт<  = ƒт< UI ќ< = йB? йМ? ƒњ ƒІE  ƒa? B? O? ƒ*? a? B? O? й”…& ƒu= ƒМ? ЙуB? ЙуМ? ІE иH B? ƒ]5ƒ]5ƒƒЙуйš? Г]ŽAйš? Г]ƒh@ ƒu= ƒƒѕB AмќB ЙуМ? B? ЙуB? h@ B? М? h@ ƒ+5йvH B? ƒ]5F "G F "G F "G F ^E Gё ТхТх щ щhB hB Ѕѕ+B +B ЉB Тх›wК?E ыC ТхТхvѓѕ ˜>  : ? є> Г; Л< QQ?t Ў TTупЎ SSЁM Ў X[•L Ў 14xM Ў xM Ў kM Ў =@kM Ў CKFM Ў NVѓM Ў 7:лL Ў %.іN 9 "МN 9 z€O { !ƒ‹ФK Ў )ŽЁЄK Ў +­ЬеM Ў .ЄЊ‡N 9 0fl!M Ў 4owЅN 9 5ї§WM Ў ;уѕйN 9 AйсйN 9 BЯв5O { CдзN 29 CДL 2Ў CЬL Ў DbbN 9 E^^N 9 FVVчK 5ŒƒЂL эL M `L ЁЏ —‡M ƒƒП! ƒЏ‹+юƒЂL йэL M `L O УчK їK {L чK і L {L чK їK і L /L HL `L {L МF>ьL {L >ь{L >ьїK L {L МƒП! F/L HL `L П! F/L HL `L К6N Xл7R { сћŒO \ ввЛ ЫЫЉO  ее˜O \ ддуп\ ЬЬ‰S 9@№№‰S 9@ }bS {@яяbS {@  rz T 9@  ‘• T 9@ѓѓŠR {@чщŠR {@ -ВS 9@ёёВS 9@  „ˆ>T 9H !ііS {@%ююS {@ )`oзR {@ -0]зR {@1ъьGR {@2ффGR {@ 3єS 9@ 6‹ŽєS 9@9ђђ'T 9@ <˜›'T 9@?єєsT 9(@њњ\T 9(AљљhR {@ B  hR {@CххzV  D22•L < FEgxM  L%xM  N(/kM  PŽ—kM  Q„ŒFM  T™œѓM  VjлL 9 Z9BqX e [ШьКW e \–ЁPW e ]пO < ^ƒV 8 a>JэT 9 bіљ6V 8 dCZ‰W e h\˜фQ < j%@/P < lя€Q < m"W e nќџЫT 9 oЗU Ђ qSj‹X e rєўHU   sлоP < t“3Q < zšЊ3Q < ~ЌК[V  €МйсV e іљсV  ‡ќ+U 9 ŠЎёЏV  |ЋœQ < )NjW e ’tŠV  ”QqcU  —"; U 9 ›рщ U 9 ьѓ‚U 9 ŸOQ <   &цW e ЁЖХPP < Ђ ЇP < ЃЄГWX e ІMyX e Ї>X e ЉЁЇгP < ЋЮдгP < ЎТЫэU < АЗПT 9 Бзэ*W e ГАДfQ < ДЊ­R { Е ЄR < ЗЎЕЪO   ЙЩмzP < ЛпсP < ПфљP < ТќЕQ < ФЅT 9 ЦИЦЪQ < ЧЇЋ§O < Щ26R §NNo nucƒЁS yS ƒЁS yS ƒyS ƒyS ƒЁS yS ƒЁS yS ƒ‡M ЊR ШR ƒ‡M ЊR ШR ƒЫS ЁS зS ƒЫS ЁS зS `Ъƒ‡M 3S ES ƒ‡M 3S ES ƒ‡M ѕR S ƒ‡M ѕR S ƒ5ƒ5ƒЊУ 5ƒЊУ 5`Ъ ф  O ƒ‡M эL M `L ЁЏ —‡M ƒП! ƒƒЏ‹+юƒ‡M йэL M `L ƒƒƒйƒЂV Q ЬМFƒП! FЉW шFМУ МЬЬƒеU ƒƒƒƒП! F/L HL `L ƒП! FLQ ƒUП! F/L HL `L ƒ‡M +юƒЭV +юƒЯƒ‡M ƒ(V ƒЯFўƒ/L HL `L ƒLQ ƒ U ƒƒƒƒƒЊУ Я15`ЪшP `ЪєP Q йFў`ЪBW ЭV  R йАй й/L HL `L йЊУ Яƒ15НT R КУ№X u Л є\ џЛ \ p9 \ ќX \ БY \ GPљZ \ CDЂ[ \ #9[ \ *+FY \ @AY \ %(A\ \ (-2{\ \ .VZ \ 548с] A <:>8] o ARYА]  Dяб] o FШтЪ]  I'[ \ LадžY \ N9=[[ \ RЛПћ\  V-7ƒ[ \ Xзс] o Zх—] o ^LЩ‰]  b>Cg^  dуэ \ \ iЫЮ+^  mСХ]  qEK;\ \ r#&є\ \ t(+ЙZ \ v"%›[ \ x ЪZ \ {›у \ ~ˆŒg] A Vd4^ o „g†Y^ o ‡ER`^  ‹'4mY \ 6CК\ \ ”ŽЖ`ЪЩY пY ѕY Z "Z ю˜ [ [ Ю Y Б[ У[ Э[ й[ у[ ю[ \ \ Ю Y F[ Ю Y UY Ю Y Y )Y 9Y Ю Y Y P\ e\ xZ ‹Z šZ ЈZ Ю Y F[ ˆ\ ˜\ Њ\ Ю Y fZ xZ ‹Z šZ ЈZ Ю Y UY я] ў] ^ ^ ƒЩY пY R] КИ] ЏGй] uY КŽ№ 1\ КЅY /[ КЅY !йc[ o[ y[ I ЅY ] ] КŠ[ !йЅ] КŽ№ '\ 1\ КЅY ] )] КŠ[ КŽ№ '\ 1\ lБ !йС\ o[ y[ КЅY ] )] ййhь йУZ К,КбZ хZ К.Z BZ o] ‚] ;^ o] B^ уuY †Y I uY †Y ”Y є% uY †Y ”Y йС\ o[ ж\ щ\ Ек Y Ў^ \ в_ џ Іц_ џ ЊВ\_ \ ЬйР_ џ ћ2` џ РУ` џ ЦЩ™_ џ ЕН_ \ AP9_ \ мчq_ џ шњJ_ \ (ќ_ џ "6ќ_ џ Й^ \ “™і^ \ iЩ^  !Tfƒ_ џ "9>КККИ­ КB˜ L˜ V˜ КB˜ $` ЏGйЉ_ Б_ К_ %_ 1_ њћККй_ ь^ КК_ ь^ Кл^ ь^ –a \ u \  ^в   Рb  ‹г` \ ЉЕ[a \ Ъсˆb   іўCc   ’Ѕc  Е` \ бa \ ЗХ’` \ уєшb  pb  ‚` \ zb  ‰ј` \ $OЅa \ %ЧЧEb џ &ШШШa \ 'QQюb  )ab  +S›%c  -ЛЙb  /НЯ*b џ 0ЇЇ^b џ 1 Іb  3би–a \ 4b џ@ 5b џ@ 6ёa џ@ 7`vfЯb й] р` ь` йea }a Ё` ˜b vfTc |ж c vfЦ` рa ыa Ё` Њ` Š` vfŠ` €b йa u k a a $a Z -a 5a =a Fa Вa ƒКЉ ѕb Кib Љ /c vfib 7b |ж vfЋb –a I ККЃd aŠd a Оc \ ўўЛb єєЋc b ћћš&\ ѕѕ8o D Ах(j e ux(j e  or(j e  il(j e {~(j e „(j e EY(j e žЌ(j e as(j  ‰™(j  !СФ(j 8 $ЦЩ(j  'ЫЮ(j  *аг(j  -еи(j 8 0кн(j  3$'(j  6*-(j  903(j < <69(j  ?<?(j  BBE(j Ђ EHK(j 9 HNQ(j  KTh(j  Nk~(j  QЄн(j  Tї0(j  Wњ (j  Z C (j  ] „ (j  `† ‰ (j  c‹ Ž (j  f “ (j  i• ˜ (j  lš  (j  oч ъ (j  rя ђ Ѓd 4a@rml e v„m e {ЊЛЫc  ~eo D ј§яn D †ОЬ\d a Šчѕd  ЯжPn D йфrn D “šЇSf a(—гсSf a›8<зe a(žrзe aЁ03!f a(Є•а!f aЇ47~i (Ќg  ~i Б„ћi (ЕK d ћi ЙŠŽвi Н…‰вi (СЧ т Mi Фz}Mi (ЧЃ С Дd aЪйd a(Я!$$g aжKR$g a(нSf{f aу=C{f a(щы ѓf aяDJѓf a(ѕP+h (ј_+h ћfiљg ўbeљg (m›Бe a+/Бe a( TVe a( ЁVe a&*‚g (ё!‚g џ[aSh  jmSh (#GdЅh (&|яЅh )nqKg 0SZKg (7lПкh :ruкh (=›Иi (@ЯBi Cvyмm D G8gмm D L/6Йl e O)-яl e R"&­n D S  Lm e YряAn D \Ÿ ,dDeES\P\9;7HoJnFoZrUNMVY\_GB\=@?йIo Zo К>l Šd КNl Šd К^l Šd К.l Šd Кl Šd Кl Šd Кџk Šd Кэk Šd Кмk Šd КЭk Šd КМk Šd КЌk Šd Кœk Šd КŒk Šd К|k Šd Кnk Šd К`k Šd КRk Šd КDk Šd К6k Šd К(k Šd Кk Šd К k Šd Кўj Šd К№j Šd Коj Šd КЬj Šd ККj Šd КЉj Šd К›j Šd Кj Šd К€j Šd Кsj Šd Кfj Šd КZj Šd КJj Šd К;j Šd ƒŽl ›e  l мl m Мm 5d Hd ƒэc d ƒэc d o %o 5d Hd ƒ5d Hd ~d ƒ5d Hd ƒ5d Hd m Мm ƒf f ›e ƒf f ›e йf f йf f йf f йf f ‚§Ѓi Еi ›e Чi ‚§Ѓi Еi ›e Чi ‚§ i ‘e Чi ‚§ i ‘e Чi ‚§Ѓi —h ›e ‚§Ѓi —h ›e ‚§ i —h ‚§ i —h КŠd Ѓd  e "e 8e Ge ƒf f ›e Њf Фf лf ƒf f ›e Њf Фf лf йf f Њf Фf лf йf f Њf Фf лf йf f Њf Фf лf йf f Њf Фf лf йЋg h йЋg h йЋg h йЋg h ƒ€e ‘e ›e ƒ€e ‘e ›e ƒ€e ‘e ›e ƒ€e ‘e ›e ƒЋg Лg ›e Хg пg ƒЋg Лg ›e Хg пg й†h —h й†h —h й†h —h й†h —h ƒrg ‘e ›e Њf Фf лf ƒrg ‘e ›e Њf Фf лf й i —h й i —h й i —h й i —h ƒєm n ›e ƒєm n $n ›e мl 8e Ge &m 9m аn й^m tm 5d Хg пg КК_ Fn *p \p \ $ECx $””%x  1”аЛj 1  ?t j 1ІІgэ  1ЇЇЋc  1ЁЁОo \ 1ЈЈаo \ 1Š*p 4\@1Бv @ 177$q \@1ЅЅ$q \@ 1eht @1ђѕt @ 1Gцq YH"1ЗИ@r П@1ХШ@r О@"1ефЋr @1!ЮбЋr О@"1$чљu @"1)ЖСљu @1.&+Еq YB 1/}„Еq YB10ЕЕr Y@"11Явr О@12ПП2u @132u @"14іs @16цціs М@ 180:Чs @ 1:InЧs ь@1<ттs О@1>жжs О@ 1@жcs @1Bккcs 7@ 1D.˜s Н@ 1Fpг˜s О@1Hоо"t @1Jъъ"t @ 1L<Z]t @1Nюю]t @ 1P]ŒŒq Y@ 1QwzŒq Y@1RББq \@ 1S_bq \@1TЁЁp \@ 1WX\p \@1Zš

š Dš Пt Эt мt тt шt йГt >š Dš Пt Эt мt тt шt >ьƒVjr ƒVjr ƒVмr ƒVмr ƒ)v @v Xv ov ƒ)v @v Xv ov >ь>ь& & ККйTs йTs йTs йTs йTs йTs йTs йTs йTs йTs йTs йTs йTs йTs ƒƒƒƒƒі Пp ƒі Пp Кp *p ƒ?0ƒ?0ƒГu ƒГu ƒ$Фƒ$Фƒ5d Hd ƒ5d Hd ƒu ƒu ƒƒƒƒƒ& Ь& жw & ƒƒƒƒ>ь& & >ь>ьƒƒƒі Пp ƒі Пp К%x Cx ƒЬ™л™5d Hd ФO 3z ƒЬ™л™5d Hd ФO 3z ƒƒƒƒК x ‘ џ длѕ*џџ| p ЪаЭ‹ џ!!‹ џ *p D >>;„ D .>Хp€ g.V€ g Fђ џ J!'р}  UЬиЇz \ gєŒ џ ~кђŠ g …ТЪЛš …ЌЌ?t \ …ДДЋc \ …ГГОo a …ВВ2}  …ииіŠ џ …) џ …ђђ‰} џ …л№F‘ џ@ …жж'‘ џ@ …ее}‘ џ@ …ккa‘ џ@ …ззь‹ џ … иин| p … b g … ђђM џ … ЪЪѕ*4џ… !} @ … ЮЯ } p@…ЭЭ } p@ …^eЭ‹ 4џ@…!"W‹ џ@ …/ZW‹ џ@…  '‹ џ@ …'‹ џ@…  '‹ џ@ …-'‹ џ@…! ‹ џH …" *p 4D@…">?б… D@"…#“Ўб… D@…$__Xˆ D(…(ЪаXˆ D…,ЕЕM… DH"…-OPA‡ D@…0šA‡ D@"…3ЅЈq‡ D@…6ЁЄq‡ D@"…9ЋЧ… DB…:MM… DB …;™ ‡ D@…<–– ‡ D@"…=œЂX} - …@m‡šˆ D(…Cгкšˆ D…FЖЖ‰ D(…Hцѓ‰ џ…JИИ6‰ џ…KЙЙ6‰ џ(…LіjK† D@…MkkK† D@"…NймЇ… D@…O[[Ї… D@"…P… D@"…SvŠ… D@…VTW]„ D…Y@@ˆ D…]ГГ‹„ D@…^EE‹„ D@ …_mtz† D@…awyz† D@"…cп ­† D@…e€‚­† D@"…g 2н† D@"…j5\н† D@…mŒњ… D@…nccњ… D@"…oБФ#† D@"…pЧж#† D@…qggЈ‡ D@"…r_sЈ‡ D@…sЉЉк‡ D…vББк‡ D*…yyŠЩˆ D(…|нуЩˆ D…ЗЗk‰ џ(…€ЛЛџ‰ џ(…РРЭ‰ џ(…‚ООФŠ џ(…ƒФФ’Š џ(…„УУ1Š џ(……ССaŠ џ(…†ТТœ‰ џ(…‡ММа„ D@ …ˆIIp€ 4g@…ˆY x@"…‰gwY x@…ŠЉЉTƒ x…ŒыыTƒ x(…ŽиэЭ‚ x@…ххЭ‚ x@"…Щеы xH"…‘ЙКЛ xB…’ЕЕЛ xB …“IN@‚ x@"…”œŸ@‚ x@…•ЭЭn џ …˜§,7 x@"…™ad7 x@…šЅЅ x@…žЁ g@"… Q^†€ g…Ѓ‘‘ƒ x…ЇъъЌ€ g@…Ј––Ќ€ g@ …Љ/@‚ x@"…Ћ™‚ x@…­ЦШЅ‚ x@"…АЊЦЅ‚ x@…Госi‚ x@"…ЕЂЇi‚ x@…Звдz x@…И­­z x@"…Йz› x@…КББ› x@"…Л„Šі‚ x@…Пччі‚ x@ …У/Gчƒ x(…Ф№№„ D(…Хёё|ƒ x(…ЦээТƒ x(…Чяяžƒ x(…Шююс€ g@ …ЩCFс€ g@…ЪššL џH"…Ь$$ސ џH"…Ю%%а џH"…б&&с џ …в''— џ …жѕЊ}  …л№њž~ џ@ …мввФ~ @ …нггx~ %@ …оббS~ @ …паа.~ @ …рЯЯ~ @ …сЮЮ% g@ …тжжC g@ …уззю~ @ …фдд  g@ …хееё} (@ …цЭЭЇz 4p@…цЪЫ | \@ …чБ{ \@ …шўўг{ \@ …щџџ§{ \@ …ъ„| p@ …ыw{ \@ …ьќќ”{ \@ …э§§h| p@ …юыz \@ …яїї{ \@ …№јј"{ \@ …ёљљT{ \@ …ђћћE| \@ …ѓ7{ \@ …єњњЯz \@ …ѕііДz \@ …іѕѕМ| p@ …ї›| p@ …јтŽ џ@ …љ№№ИŒ џ@ …њппVŽ џ@ …ћььvŽ џ@ …ќээ&Œ џ@ …§лл› џ@ …ўццМ џ@ …џчч= џ@ …уу џ@ …ёёо џ@ …шшŽ џ@ …ъъQŒ џ@ …мм•Ž џ@ …юю6Ž џ@ …ыыјŒ џ@ …сс Œ џ@ …оо€ џ@ … ххеŒ џ@ … рр\ џ@ … фф џ@ … ттzŒ џ@ … ннЗŽ џ@ …яя§ џ@ …щщГ g@ …ФФа g@ …ХХ€ g@ …ШШ2€ g@ …ЩЩъ g@ …ЦЦ€ g@ …ЧЧ— g@ …УУ8 џ …ѕ§P=Œ›s pЈ&e($)*„EGda4x/DAt,sOvRc?oIKN602TUF.:X<=Y`М[ŽZ^—_6]\Žb€s}ue‰qxpd}tsjvicxom|zgteG…\‡†ƒ„"UŠ‹Œšs•}”e“’x‘˜™s–v—ЋDЊpЄeЅ ІxЉЇЁЂsvžcŸoœЈЃ ­ЌВDЙeТiНdЏOПМСtЕsРvОcГoДЗФИЛАБКУЎЖЫdХ}Ц}ЩЪxЧШ@} ‹ 6 •} щ`Ъƒќ‹ щ| q X ƒL– L– ƒL– w‹ ƒL– w‹ L– L– L– N‹ L– N‹ Р‹ ƒƒВ} L– ˆˆ ˆ В} L– ˆˆ ˆ >ьƒVмr ƒVмr ƒVмr ƒVмr >ь>ь& & й=ОКВ} ˆˆ ˆ В} ˆˆ ˆ В} љˆ В} љˆ ƒƒƒƒƒƒƒі Пp ƒі Пp К;„ *p К;„ Jˆ ƒГu ƒГu ƒ$Фƒ$Фƒ5d Hd ƒ5d Hd ƒƒƒƒƒƒƒ5d Hd ƒ5d Hd В} L– љˆ В} L– љˆ кt…тؘ ƒ›wЌ Ь…тƒƒйtƒ йtƒ ƒƒ>ь>ь>ьƒƒй=ОКƒƒƒі Пp ƒі Пp КV€ p€ КV€ Fƒ ƒГu ƒГu ƒ5d Hd ƒ5d Hd ƒ’‚ ƒ’‚ ƒƒƒƒВ} К} Ф} в} В} К} Ф} в} „ ‚§ؘ …ткt К>ьК‚§і К ‚§і ­ Ц В} L– К} Ф} в} ƒƒƒƒƒƒдП дП дП дП ю˜ `Ъ`Ъ`Ъ`Ъ`Ъƒƒƒƒƒƒƒ_| N{ ю˜ ю˜ щ щ`Ъ`Ъ`Ъ`Ъ`Ъƒƒƒƒƒƒƒƒƒƒƒ щ щ щ щ щ щ щ`Ъ`Ъ`ЪK€ `Ъ`ЪЌ H Л ?t c Ћc \ Оo } i“ t $'œ™ t ),I” D ƒ‹<œ e АГ œ e šœ e чъН“ D ДЗ(— t x{ ’  СФЛœ e їњО” D t€[˜ t ЄЇm• t Xbb— t ЊВF— t eqІ› e Юб ” D Ž—R– t Яв'’ \ $лые“ D %•вš e &ЩЬ…’ \ 'ЇЊЖ— t *\­Зš e +FSиœ e - Єv˜ t /ефPœ e 1КОЂ• t 3huϘ t 5e0› e 7ЧЫё“ D 9~Œc› e <2U ’ \ @ф/2˜ t Bди˜ t D˜Ёє’ t GэѕЛ› e IТЦo– t K­Бй• t LЖЙЄ– t MМП6– t NUY˜œ e OСФR™ t Rлс— t Vфъл– t [эљэ• t ]ЩЯ•” D `ви ™ t bќI• D cž˜ t f$— t i'-в‘  n0@ц˜ t p r™ t s › e tз’ t u˜œэ› e vЇЙт— t wŸЄ+• D x’•Ё“ D {€<“ t |y}~› e }GK%™ t ~– t €8љ” D ‡NqЗ– t Š;DN 2t ŠДL 2D Š œ e ‹ђ ƒ— t ŒЗт†” D jD 1@ˆ• t ‘ЦЦk” D ’  е™ t “  Eš t ”!!ŽNУOJѓ! 5Œ†" 5ŒЬ5d Hd Гu ƒККК„чК>ьЬЬƒэc d ƒ)v @v Xv ov ЬК& 4” КƒC’ R’ b’ n’ |’ ƒяš КƒЭ— љ‘ ƒєœ ƒ˜ ƒhœ ƒР• ƒР• ƒJ› ƒ$Фƒ5d Hd ƒ5d Hd Ф’ ƒG˜ ƒ$˜ ƒ“ &“ ƒи› ƒŠ– ƒƒƒѓ! їK {L ѓ! і їK {L ѓ! їK і љ‘ {L >ь{L >ьїK {L ƒ>ƒ†" їK {L †" і {L †" їK і љ‘ {L >ь{L >ьїK {L ƒƒ>ьƒƒ™Јƒ& ƒГu ƒЬ™л™5d Hd ФO • ƒ5d Hd H H Кv€л” XлXл№™ aš   DџџџџњŸ D M X vЂ D ‘ œ їЄ e њ  &и \ &&9\ $$1є\ %%ж* \ ##Л” St \ ""ЗЊ „ 1<ЦА џ fp‚Ї „ sy/Љ „ {—fЏ џ ИХйЃ e БЕŸ \ _dДЌ „ ™Џ   4e@њ ћ   4D@M N   4D@‘ ’ Ќ „  В яЇ „  › Ј „ !Д к Б џ " , ž \ #т і ЪŸ D $Š  ЗЏ џ &~ ƒ ВЄ e )l | нž \ -Ы р УЋ „ 3  Й УЋ „ 5Л С .Ј „ 7  }Ÿ D ;У Щ ѓЎ џ >. ž eЈ „ B§  „І e Eн ћ Ў џ F… ˆ —  Ћ@IV V —  М@"L} „ Н  ЌH"O†  Н  ЋHRW W   DUO O 7  є@ V\ a 7  Ќ@WQ Q z  @"Zn { z  М@]U U \  Љ@`T T \  @"ce l Ѓ D@"fБ Е Ѓ D@iš š %Ѓ DH"lЗ К %Ѓ DHo› › ‡Ђ Dr“ “ ЄЂ D@s• • ЄЂ D@ t  Ѕ фЂ D@"wЌ Џ фЂ D@z™ ™ ЧЂ D@"}Ї Њ ЧЂ D@€˜ ˜ {Ѕ eƒ  {Ѕ e*†$ ( ПЅ e‰  ПЅ e*ŒA I ŸЅ e  ŸЅ e*’* < Ѕ e•ќ ќ #Ѕ e@ –  #Ѕ e@—џ џ `Ѕ eš  `Ѕ e* " DЅ e   DЅ e*Ѓ  Њ „ ЅH ^ Џ џ Њ? F cЃ D Ћa h њЅ e ­1 4 4А џ Џ8 ; ЏІ „ ГAU5Ї „ Дхыi­ „ ЕЪЭfЉ „ ЗЯуЁ \ Нѓіп  А П§Уž \ С „Џ џ Ујћ_Ÿ \ Ф{Ё  ЪYaЂ D ЬcyјІ „ ЮƒŠ Є e а ИЕЇ „ бКТЯЉ „ зž*Ћ „ нЋ „ п!ЉЃ e сJ[2Ў џ у',”Ќ „ х.HЁ D цЗКЬЎ џ ч &DЄ e ьAp6ž \ ёЏЕUЁ  ђžЇRЇ „ єЁАпЌ „ ѕџ А џ іbmІ e јЦл$Ђ D њŽЅљЊ „ §џ@­ „ џВЦž \ œŸЦЊ „ зтзЇ „ y|АŸ D Њ­šЋ „ ˜І e MЊ „  )ЙЉ „  "@dЎ џ  B`ЯА џ bzЄ e  % [Ќ „ щ \ GPмЅ e офмЅ e ц§йЁ D ЩеЌЁ D  ъђ™Ÿ D $єќDІ e )ршDŸ \ -yБ џ / yБ џ 1= \ 6+?FЃ D 7ЫGБ џ 8ЮEpЁ Њ 9G`aБ џ :˜œ˜Њ „ ?}У|Ѓ e BЇЫSЂ D DrvUЋ „ GьіUЋ „ Iј№Џ џ LШо•Є e Q~–јА џ SЭи”­ „ TМ’Ў џ Vь пŸ D W:@ѕž \ X"J›Љ „ YLŠ.Б џ Z8)І e [уъ<Ќ „ \йрЗЈ „ ]Ršљ­ џ ^CзЇ „ _кпЊ „ `  Њ „ a( + Љ „ d)EWА џ eфърЎ џ f> > }Њ „ gc c rž \ hээѕЌ „ i  sА џ jŒŒдЈ „ kФФА­ „ l##Ÿ*d,L/v.f&)^Ђ5d6ˆ;9O24ЄB‹DGiE.<@>М1 МєŠ жV.Ї ƒжV.Ї ?Љ TЉ Š жЇ іЃ 'Ÿ йжV.Ї ФЌ 1 TЉ М)Ќ ƒRž 1 Ј ƒйƒƒЪЏ ЭЄ цЄ ƒУ† ” ƒ5ŒіЋ † ” ДƒпЋ ƒLЈ ƒЖи † ” ƒрNў ƒ1 ‚Ј Ј ƒ]5& рNў & рNў ƒ]5ƒ]5КњŸ   ƒрNў ƒрNў ƒ]5ƒ]5& рNў & рNў ƒ]5ƒ]5КvЂ   ƒрNў ƒрNў ƒ]5ƒ]5& рNў & рNў йŽв/йŽв/ƒ]5ƒ]5КїЄ   ƒрNў ƒрNў ƒ]5ƒ]5ƒ?Њ І -Џ ?Џ QЏ йІ І ƒШІ оІ щІ ййї  ƒЙ „чЬ к †S йї  ƒЙџ йŸЏ йƒЙ 1Ё Ь к DЁ йї  ƒЙџ йї  йƒЙ яЉ Ь к DЁ ƒЙ AЋ Ь к Дйї  ƒЪЃ ƒPЎ йї  йƒƒT i lЄ ‡Є Rž 1 ]ž ˆƒМmЇ ƒй4* #т4* >Ђ йŽв/МU­ Мйƒƒƒ­Ћ ƒ‡M ƒgЊ ƒЖи ƒ{Ў ѓА o й„чйtЌ ƒєƒяЅ ƒГ'єЁ ДƒЦЁ † ” ƒУ† ” ƒ[І † ” ДƒЖи † ” ƒ“Б ƒ1cƒT i † ” ййййƒЖи ?Љ TЉ ‡Є йЃ T йjЂ sЋ єЁ ДsЋ ƒЋ йU­ А ƒЂL ƒиђиђ-єƒƒЏЎ ƒƒƒƒƒƒƒƒƒƒйй=ОКщЎ ‡Њ ž ­ А єЈ Ч­ эБ \ TT8 \ NNŒO 8 @@ЛŸ ==Вф \ AAgэ \ >>гБ \ BBрБ \ CCЯК  †‰2Г \ цэгИ ™ §  KœЌ ™ HЋЕ  ћџќВ \ 5Й ™ "%5З  zИ ™ ѕјК ™ Z`єЗ ™ PВ \ !ЬЖ  cƒ’З ™ BE•И ™ NW И ™ ŒїgК  HKЮД ™ 4?yЖ  !$1ЋЗ ™ "ЄЊ}Й ™ #’•јД ™ &пяјД ™ )ЭмщВ \ +ГЪД ™ ,­АјЖ  .˜Ё;В \ 0†‰;В \ 1€ƒ„Е  2ŒTК  4TК  6 UЗ ™ 7э№ЋИ ™ 8\_пД ™ 9­СeЙ ™ :…ŸЊВ \ ;b‚Г \ <ЂЊmЕ  =§>К  >Ур7Ж  ?фшІГ \ @ы-Г \ A   В \ BŸЛ  Eѓњ|К  HуъЩГ \ I08SИ ™ J>YmД ™ L$-mД ™ O"mД ™ QРИ ™ RDIэИ ™ S69эИ ™ U<A”В \ VLUЗ  W/3К  XmpК ™ ZruВ \ [wz&Ж  \зо З  ]АТЋЖ  ^Ыд В \ _vzйЕ  `:@lЗ ™ bЙнšЕ  gъ hЖ  h,%Й ™ iosнЗ ™ k}‘PЙ ™ mЁ­•Й ™ oelgИ ™ p/7=Г \ rIb=Г \ sCFхГ ™ tрчўИ ™ uХШ[Д ™ v ’К  wРХ Й ™ xЌВнЙ ™ { Љ,Д ™ ~ЕНšЖ  Ž”Д ™ €†‹ШЕ  —ЗК  ‚}ƒ;Е  „биОВ \ †лрvГ \ ‡ШЮ7 ™ ˆYkАЙ ™ ‰[^АЙ ™ ‹`cЩЗ ™ ŒehЖ  ќМЗ ™ Žяљ3Л  “nt|Л  ”ЂІiВ \ •ЎГяЕ  –ЈЌцК ЬМƒ+ NЕ `Е МЕ /Е КИ­ ККййй}‹Мњю чЖ ћZћZƒ%И 3И @И ƒƒƒŠЖ йМƒ™ЈЕ ƒ  Е М\§ ƒƒ™Ј™ЈƒOЋ ƒєММkŒМММ`ЪМйƒƒƒЖЛ ƒƒ Оƒй„Д šД ЏД ХД ййƒ1cƒ+К йкt{V йƒƒю˜ ‚З ‰ШИњ ањ ™ЈйййИњ йањ йІЙ йƒYГ йййІК ММяЙ MД М@Д MД МƒММКзВ МзВ ƒЩЙ йЬ-йGЛ SЛ aЛ pЛ йrО \ kЕР’  ^^$ \ ]]ŒO \ \\Л VVgэ \ WW8  __М \ ZZМ \ YY Н \ eeaМ \ !ˆН \ dd˜Н \ vz˜Н \  CspМ \  ъў[О \ йчъ \ RcЬ \ r‚ОР \ ДжsН \ БО \ 8шР \ !0  %fo] \ )…О \ -;OyР \ 2ŠšƒМ \ 3&>ЂМ \ 7}‡4М \ 9˜žЯР \ ;ЁЇЉР \ >i|іМ \ A•Н \ EжўН \ HЊг(О \ Kџ_тН \ NтН \ QМ \ RbfLН \ VИќ<Р \H WЉЌRР \H XЎБ}О \@ cn†}О \@ iˆžР \H jЄЇfР \$kДДР \@ lŸЂŒ*П)П-О+П'П(П,Xлƒњю Xлй‡M йЋН ЖН ЭН йD V.йD ƒD V.ў I D V.р >ьD >ьМD V.ЃƒD V.йD V. „ йD V.JмйD V.™МЩY пY ѕY ’Р МйЖМ ЮМ рМ ƒKМ ƒ™ƒ7{ƒ7{ƒ™4Н ?Н ƒ™{AО qƒ™јН ƒ™є`Ъ\Н KМ iН `ЪƒП =П UП kП П —П ­П УП йП яП ”О ЉО ПО лО њО 7Р 7Р пЦ šš-С \ ЛП є\ 8С \ DС \ NС \ nС  8<nС  ?C= ž ШЫ= ž ОХІУ \ тхrУ \ шыŒУ \ юёРУ \ єїОF \ Юй>Ц \ мп[Т \ 2§Ф ž Бо§Ф ž ЅЈ§Ф ž сх§Ф ž ЋЎрФ ž їћ$Ф ž !шьNХ \ "яєzФ ž $œЂzФ ž &ЅН!Т \ (25!Т \ +GJПХ \ -,/tХ \ 0v€tХ \ 2jsЦ \ 3 Ч  4!)9Ч I 6ƒŒ9Ч  9™Х \ :TЧ D >Рр[У \ ?'Ц \ AўћЦ D FуяŠЦ \ HФ \ Mђћ;Х \ O*У \ P шЦ  TфХ \ U ЄЦ \ W*Ч  X‚ˆћХ \ \žИћХ \ _”›КТ \ bnxКD \ gO‘ŽФ ž j{У \ nяџЛЦ \ o‹‘ЬФ ž ršь†Т \ x'рС \ ~*L[С  ‚”—ЭЦ Ў ƒhkФ ž „9<ШТ \ †?_ДФ ž ‡77кУ \ Œs›gЧ  nqpЦ \ ŽNQFТ \ HKЌХ \ 0?rТ \ ‘BEзХ \ ’§  Т \ “W[aЦ \ ”^bйЎС РС й|С –С < ZФ bФ jФ rФ ЩэЩэЩэЩэ„N < КƒаE єХ 'Х x ƒDФ x Кƒ–< ƒx ƒ<Т ƒ„ч<Т Мx ƒХ n> ƒХ МКƒХ ƒХ n> ƒЬB? O? ƒB? ƒ+5Х Г]ƒAмƒ]5x ѕƒІE ƒa? B? O? ƒѕƒƒ+ NЕ `Е ƒ+ У ƒ+5ЪD лD ьD ўD 1cƒ]5ƒ0У BУ QУ КƒBУ Яƒ+5%Г ›Т ЊТ ƒ]5%Г ѓС Т КѕB AмќB йƒпТ ƒыУ ѓС іУ Ф ƒƒййЕЧ \ т т ЈЧ  о о ТЧ \ ц ц SБ }}ЬЋ ††бЋ ‡‡жЋ ˆˆќЋ ‰‰NЌ ŠŠXЌ ‹‹aБ ~~=В PВ[ €€ДВ єВg ‚‚gГ ƒƒpГ „„tГ ……Cє\ KK% \ NNЛ EEIд  hlж  Yflн џ nwЅб  ЊЊял џ КХrз џ ““!о  TTИй џ VV&Щ \ UU+Я   ††лл џ "щ ю Ји џ $ " <Ъ  &% ( ˜р R '  vЪ  ( 7б  )  Џз џ +П Х Џз џ .Й М bЪ  0ё ј Ум џ 4ћ  Xу  6д ц zл џ 8Ш б 3д  9SWЎп  ;Z_Пд  <ЧЭе  >xп  @“–"е  A‡ŠВо  B„Zж џ DыџВр  FИНВр  HайВр  KРФВр  MЏЕ@е  Ob~ёп  SHPёп  V&ёп * Y)EЖб  [мшЖб  ]л џ _жк й џ `№єви џ bфэыЧ \ d.1[з џ f47Йв  g(+’о  h"%ъв  jнсМЭ ™ nƒˆМЭ Ў qy€МЭ ™ s‹ŒЬ ™ uї1ж  wЯг˜Э ™ {ƒЩ \ ІЏƒЩ \ ‚œЃён  „ВФшр  †“™ЂШ \ ˆЧЬDу  ‰04Эк џ ‹)-‘т  LOЩШ \ RUг  FIшЯ  ‘@Cwо  “wо  —"&mЩ \ ™7=п  šPVWн џ œŽІ'к џ žЫЮЈЫ ™  бдс  ЁКРжЫ ™ ЂY]эа A Ѓ@MLШ \ ЄДЗЫу  Ізпда  ЇУШTк џ ЊёіTк џ ЏљџTк џ Ж Tк џ И лЩ \ КЉБPп  Н5=ќт  П,/л џ Р/2Эт  УЪазж џ Чгтше  ЩCH.г  Ыgjђо  Эmpм џ ЮadUа F гщёво  еKNум џ иум џ м#@ум џ р /з џ фQ^а  цє1в  ч lи џ щў Ш \ ы*-,и џ э03šа D ю$'†и џ я!Аг  ё5==м џ їфы=м џ љмс=м џ яћМЫ ™ џк џ ЊЊ”й џ ЊЊ[Ю  ЊЊ[Ю  ЊЊџг  ЊЊџг  ЊЊп  ЃФв  › КЮ  ““iЫ ™ ““ж  ““ж  ““NЫ ™ ““NЫ  ““–е  ЁЁж џ ˆš№Щ \ !ЮбVс  #дзб  $ШЫз џ %ДЗ;к џ &hkџЮ D *aeџЮ  ,Z^‚Э ™ .ЄЊе  2­Бтс  4n…Ње  5єјyЬ ™ 7эёlу  9 з џ ;Ву  < ]Я  =оШ \ @чъ*м џ Bћў8Щ \ C††UЬ ™ D††йд  G††йд  I††Нн  K††Нн џ M††<Я D NАГ9Ю  OМПОЩ \ Pžт  T{… Ю  XЋ­ Ю D [ІЈ2о  _ЁЃог  aЖЙjб  cТХІт  fˆ о  gы№ге  hкоЯЧ \ kљ(оз џ m+`Ли џ oвзїЭ  qkndл џ sqt8Ь ™ tch‰Ы ™ uѓіэЫ ™ w†‹эЫ ™ y”˜эЫ ™ |Ž‘шЮ H ~сшdр  ФЧdр  ƒЛСuм џ …› uм џ ‡ЃЊuм џ ‰ДИuм џ ‹­БOб  ЪЯXт  ށ†аЮ   ‘•˜у  ‘‰ŽŒб  “мп5Ы G •тхЗж џ –СФ й џ —ЛО^в  šGJ^в  œMQ^в  Ÿ<D2Ш \ Ё˜ЎЄЬ ™ ЅБИ"Ъ  ЇЧйћс B Њx~ЦЪ ] ЌfjЦЪ B Ў\cЦЪ  АTYЦЪ  Вmuук џ Г‰‰*п  Д‰‰Цп  Ж‰‰Цп  Й‰‰‚Ю D Л‰‰‚Ю I Н‰‰zд  О^bу  РO[dг  Тx{ас  Ф~ Щ \ ХquIл џ Цknъи џ ШAEъи џ ЬHLOЪ  ЮehEж  Я8 < Mг  б0 5 и џ гq t б D еw { 'у  жb h ЩЯ @ з\ _ юй џ й  Sо  л ! в  мk n ћЬ ™ рŠ  žл џ ф “ xЯ  цэљxЯ  ьтъЫ  ю~  sт  №„ ‡ Ш \ ђ? Y fй џ є$ - Xе  і– ™ Чй џ јœ Ÿ =Э ™ њќ Eи џ ћЋ Џ Ка  ќВ Е а  Є Ј RЩ \ |  vг  Њ К kс  Н Ь з џ Я и Ле  ‘ ˜ Ѕс  › Ї ƒж џ „ Ž Uи џ A E к џ : > к џ 3 7 к џ - 0 Iв  H e ѓШ \ u y /с  h r Ъ  вь‹д  ЩЯ~у  ŒŒBй џ ŒŒiШ \ !ŒŒiШ \ $ŒŒ’Ъ  &ŒŒ’Ъ  (ŒŒзв  )‰‰Ќн џ *ŒŒКККККККККККККККƒЇСYд & šц& |н ”н cўXл& Xл& & & XлŽЂƒ#"й#"& МƒЦз ‘#Ш й€йЪЬ оЬ шЬ ƒЩЩ‘л Цз  ŽЂйƒ#"й#"& Мƒ{ж бр њб ‘#Ш џй€йз р $р йз Pр йз 6р бб њб бб тб йг  ŽЂƒ#"й#"& Мйг ‘#Ш ›Щ ›Щ ЎЩ лЭ й€йг йЪЬ оЬ шЬ й›Щ ЎЩ Яй›Щ ƒ+ƒ›Щ с лЭ ‚§ОШ  ŽЂƒ#"й#"& М№Е ‘#Ш №Е й€ƒŽЂƒ#"й#"& зЕММ& бг ƒЗк ЈЯ ‘#Ш шЬ ЈЯ ‘#Ш шЬ ЈЯ †к Ёк mк й€йdп Ш Œmк ‘#Ш йз оЬ шЬ ŽЂƒ#"й#"& „а Я‘#Ш й€йз н й н н з йз *н Aн йЪЬ оЬ шЬ <а џ ŽЂƒ#"й#"& М& бг ‘#Ш `м ЈЯ Я Я ‘#Ш `м ЈЯ †к Ёк Я й€ Мџ‘#Ш д єд џžSЂв Д М‘#Ш џcџcє ŽЂƒ#"й#"& Мƒ‘#Ш Я Я й€йЪЬ оЬ шЬ И)Я  ŽЂƒ#"й#"& М‘#Ш й€ М‘#Ш џмн џмн є& & & /т Cт ЈЯ й*Ю ЬЬй*Ю й*Ю КЬй15й15йdп Кт М ƒ#"‰Jйњз ŽЂƒ#"й#"& М%Ь  Ь ‘#Ш й€й|р Яй­м vˆ Ь vˆ%Ь vˆм vˆ­м ‚§%Ь М ŽЂƒ#"й#"& М‘#Ш љЪ џЯй€йЪЬ оЬ шЬ ƒЩЩйФO 5P=єP=џP=љЪ P=уЪ  Мџ‘#Ш ЃЮ џЃЮ є ŽЂƒ#"й#"& Мџи ‘#Ш џи й€ ŽЂƒ#"й#"& Мƒ‰й й‰й ƒƒ#"Э *Э й#"Э Тл gЭ ‘#Ш •Я ЈЯ ДЯ ƒ#"й#"й€й‰й ƒ#"й#"WЭ gЭ  М‘#Ш •Я ЈЯ ДЯ йЬг œг й„с —с йЩэйНс ййЎЩ Яƒ+й€ййHс žSЊд Д Мџ‘#Ш БЪ џБЪ єXлXл„њЎ 66№Ў ЙЙф Ќ КК1єЎ ЛЛЛБ ИИНч \ уфЗш \ ’’Zц Ў ““=ш \ ””Вх Ў жъ Ў ‘‘˜х Ў 3шш Ў ЩЮшш Ў РЦшш Ў ИН ц Ў 69 ц Ў HM ц Ў BE ц Ў <?Iх Ў ЁЊIх Ў ­ЕЃъ Ў щъ Ў цѕXф Ў !ТЦНъ Ў #Y\Нъ Ў %_ž{ч \ 'зк{ч \ )бд{ч \ +нр{ч \ .јsш \ /PV7щ Ў 1ЩЮDъ Ў 4!:Dъ Ў 8 Dъ Ў <Dъ Ў ?Dъ Ў AшюDъ Ў Dёџч \ FДЗч \ HЎБч \ KКПч Ў OШхч \ RТХoц Ў WЅЋoц Ў ZžЂ#ш \ \*/#ш \ ]#(iф Ў `iф Ў ciф Ў eилiф Ў hіљiф Ў l!iф Ў nфчiф Ў r iф Ў uќiф Ў xъэiф Ў { iф Ў ~осiф Ў €№ѓћч \ ‚ЛеRш \ …žИ(х Ў †ў-ы Ў ‡“œŠш \ ‰6мч \ Šюѓмч \ ŒѕјЎф Ў джџъ Ў осџъ Ў ’щьџъ Ў ”илџъ Ў –фчјш Ў ™x{јш Ў ›ruјш Ў žloјш Ў  fiјш Ў Ђ~јш Ў Ѕ„‡јш Ў ЈŠјш Ў Ќ’—Pч \ Ў[c ъ Ў БSYqх Ў В@Dnщ Ў ГKQц Ў ДFIШц Ў ЖГЖьф Ў ЗЙчˆщ Ў МЄАˆщ Ў Р–ЁЬш Ў С0Эф Ў Тъ'ф Ў Х|ˆўц Ў Шmyщ Ў ЪZ_[щ Ў ЬTWCц Ў ЮdjШх Ў бHKШх Ў гAEћщ Ў еNQЈч \ жbbЫч XлXлXлXлXлМƒєaх (ƒєŽвМєМєМЊУ (МУМАєѕ*ƒaх (МйФO ƒєƒАєйАєйєйУй”ч (ййNщ ƒTъ lъ & ~ъ (& Tъ (ƒ~ъ lъ М~ъ ƒ~ъ ”ъ М8ч МєМЊУ (йЊУ (&ч й8ч &ч €ц ”ц Ѕц Дц Ѕц Дц йф МйАє’ф йУ’ф МєйУŸф йЊУ 5ф МАєйЊУ 5Ÿф МЊУ (йАєŸф йє’ф йєŸф МУйŸф й”ч (ййЅш МйŸф йАєйы (йєйУйАєŸф МАєйєŸф МєМУйУŸф МЊУ (йЊУ 5Ÿф йŸф йЊУ 5ййхц х Ѕщ Фщ FўЋН Ѕщ пщ ЋН йƒй?ф Nф й?ф Nф й+щ й+щ йƒпх ђх ђх йъ Бч rы Р HH Р FFЛ EExь Р sЈ]ь Р Tp’ы Р ’ы Р CJ’ы Р @{ы Р MS1ь Р  1ь Р  Rэ Р їчь Р аєЧы Р #cЧы Р %`dэ Р *‚š*э Р /ГЧь Р 2Чь Р 4жь Р 8ЖФЗь Р :ЧЭэ Р <ЌМь Ѕь йџњdйЈы Вы њdйМы њdЈF (.Мы њdLь њdй:к Ь/ћь э ‚§иы чы џы њdк ‚§ь ‚§чы џы њdк ‚§чы ;э њdк ь к к ‚§чы њdк ‚§њdК э Дя Рёёњ Ў § Ў Лѕ Р ђђт§ ж њњйї Р єєЌє  ўў‘ќ Ў џџ5ћ Ў ёёШѓ  ѓѓœя Р ќќ:ў ж §§і Р ііНі Р їїѕ  јјNљ Ў љљ|ј Ў Іё Р "Мј Ў $Мћ Ў &ћћiє  (ѕѕrЉ Р (ЕЕ&и Р (ВВ;рР (ГГЛ (­­St Р (ААєР (ББЄэ Р (ИИфљ Ў (ѓќ№ Р (џџ•ђ Р (Fя Р (€ђ Р (wќ Ў (яє  (?ї Р (лю Р ( Ь№ Р ( Жѓ  ( № Р ( —ё Р ( "ј Р (Кђ  (Фю Р (Я§ ж (  f§ ж (­ђ Р (!Jѕ Р ($4ія Р (  -ђ Р (  [ќ Ў (ާ ж (Ѓі Р (Чї Р (  ћ Ў (  ќј Ў (є  (<ј Р (ью Р ( § Ў (!Не†і Р (#иш'ћ Ў (%7;И№ Р (&x†gѓ  ('ЁЎї Р ((>A9ѓ  (+АюЪњ Ў (.ъ1Iќ Ў (1№Кtі Р (3ЩтЅњ Ў (4Ѕњ Ў (7!Ѕњ Ў (9$4Ѕњ Ў (<”љ Ў (>DGИї Р (@JO ї Р (Aхэ•ї Р (CIMT§ Ў (F—žPј Ў (H”vѓ  (J‰|§ ж (LBFЋ§ ж (NluБэ Р (PWi1ї Р (RPT–њ Ў (TБЕbі Р (WПЦзќ Ў (YИМўѕ Р ([48Єѓ  (];?sѕ Р (`Њ­Юђ  (cRp"ў ж (fsŒДя 4ж@(fњњДя 4Ў@(fДя 4Р@(fќќДя 4Р@(fєєДя 4Ў@(fДя 4Ў@(fџџДя 4Р@(fђђДя 4Ў@(fДя 4Р@(fііДя 4@(fѓѓДя 4Ў@(fћћДя 4Р@(fДя 4Р@(fјјДя 4@(fўўДя 4@(fѕѕДя 4Ў@(fљљДя 4ж@(f§§Дя 4Р@(fїїДя 4Ў@(fДя 4Ў@(fёё1њ Ў@ (g)§ Ў@ (hбѕ Р@ (iђђї§ ж@ (jњњёї Р@ (kєєТє @ (lўўЈќ Ў@ (mџџKћ Ў@ (nёёпѓ @ (oѓѓХя Р@ (pќќPў ж@ (q§§5і Р@ (rіізі Р@ (sїїѕ Р@ (tјјeљ Ў@ (uљљ‘ј Ў@ (vМё Р@ (wбј Ў@ (xдћ Ў@ (yћћє @ (zѕѕbњ Ў (Їќ Ў (€л№ Р (ё Р (‚ђђYё Р (ƒњњXя Р („єєя Р (…ўўBю Р (†џџUї Р (‡ёёЂљ Ў (ˆѓѓщё Р (‰ќќю Р (Ч§)є  (‹іі2№ Р (Œїї„ю Р (јј>ђ Р (Žљљљ Ў (љђ  (z№ Р (‘xћ Ў (’ћћТэ Р (“ѕѕ™npP]#q7bЬrH\иs[_гt7iєu aзvHo weєx^фy^lOzd–{m|7h"}Gk"~`Сgш€NcUfз‚7jУƒёљ Р§Р§Р§Р§Р§Р§Р§Р§Р§Р§Р§Р§Р§Р§Р§Р§Р§& _ѕ Р§Р§Р§Р§Р§Р§Р§Р§Р§Р§Р§Š М•і ŽЂММ& ƒАєMѓ Мпњ ѓњ ƒAЋ ѓњ ƒШЇєMѓ Ањ џMѓ йПц й№ц ййЇї йV.к@йcј йŠѓ й) йЙ§ й) йB? йˆѕ йV.к@йъќ йі йѓFйˆѕ  ѕ Мєфђ Мєфђ йєlњ ‚њ Œњ ќ ц№ %ё dё fя я Oю aї Џљ їё ю 5є B№ ю Kђ љ ѓ …№ †ћ Юэ Џў ќ ччф Р шшЛњ ххє цц!џ Р ыы’Р Oe#a –`Р `n&џ Р q}&џ Р €ŠБ ™œБh ŸЈ*Р ™œJР ЋЎќd БДкР ŸЅџ Р ёќл Š– џ Р ЭР !->єџ Р $ЖџAџ Р %W|Aџ Р (‡UР *џРР ,РР /РР 1  'Р 4]Уў Р 7"*Уў Р 9  ;ЈГSh >ADS AGTР C Р F о Hz„Ў Igmyџ Р LAF@Р O9>ˆ QРУˆ SКНqР UЦр„Р Wћ Yуј{Р \pw= _ILOР a#6Іƒ0У ƒ€ƒЙуѕƒЙуМ? КгКгєў „чКМїДџ Шџ иџ & _ѕ ƒ+5ƒьјƒ{ƒƒaџ kџ йЪ й‚] йŽЏ 5йєƒ]5ƒуў єў ƒуў ƒ_ѕ ƒОЭN+ ƒtN+ ƒ_ѕ ƒ/МјЩI V.р МV.Ѓ”рєй€ƒ”йрєй•Ей@+ Jмƒ”4Р [[Л ZZ”Р УЦљ Р ЩЬыР љ§gР ех  ЯвР ші’Р +.? Р  ˜ я Р "&Р %(* Р B Р [Р њ§[Р єї{ Р Т Р ј Р … Р 4 Р +.ХР !$ Р &)=  = !џ Р # ЯР $|‘€Р %ТЦЬ Р *j~Р .рі Р 3”БР 5ЇЊќ Р 9sР =$>† Р @Щн Р D  1Р HAg# Р J!С Р L—ЉS Р Nљ$ Р PV Р RЌЧчР S­БЖx TчыCР UЪЮœ Р Vпф Р WбеЅР XДИH Р YЛПOР ZимЎР [œžИ Р ]ЁЄ€Р ^ЖЙz Р a‚Г?x cџ3ЉР d6e Р etЂ Р fhkП Р gnqђР jэ№ђР lцъђР nЯуђР qШЬ-Р sѓќPw uдзі wкн_ Р yцщ_ Р |ья9 Р ~руД Р NЈu ƒћu † T ‡25ШР ˆ)DР ‰ЗКd Р ŠЋЎј Р ‹,/bР Œ8;€Р ŽЫб€Р >D€ “GK€Р ”УШ Р –ђјЯD ˜БДн Р ™“#Р P`ц Р  lu Р Ёx{ЙР ЂŠr Р Ѓ~‰ Р Є„‡T Р ЈJMT Р Ћ=AT Р ­7;T Р АCGl ВciюР ГНРЅ Р З›žЖР КЁЄв Р ЛАГ  Р МЖЙ€Р НМПЩ Р ПЇ­с Р РxyММТхММє й щZМзМ6Otй€ й щМзМ6Oй€щ ƒ6Oщ вƒ6O#ƒ6OЎ вйЦѓй J й й J й * J й w  щJ  щ щJ  щJ  щw  щТхZ^МзМЁйv ƒ6 й щМзМ6O6є й€йeййєй | йєƒ6Oй ƒ ŠК щ^& зМ›66Oй€щ7 ƒ6Oй  щМзМ6Ok њћє6й€Мƒ6Oвй в щМЁй€\Оѕ*џGGР ъYР гшFР ,Р   Р  +Gж  .<AjР 2.:*рР 2jj1єР 2kkЛ 2iiѕ*4­@2GH4Р@2  4Р@2ЄРH 2ђђСР(2іќР(2§PР@ 2ююŠР@ 2№№5Р@ 2ээnР@ 2 яяY4Р@2 Y4Р@2 ъыY4Р@2 ./ГРH 2 ччh Р@ 2 етœР@ 2 хх~Р@ 2 фф€РH 2 ''ШРH 2**EР@ 2$dРH 2%%Р@ 2Р@ 2 Р@ 2((ъР@ 2++мР@ 2'Р@ 2  GЏH 2Р 2ЁжЫР 2 й3@ 2#|ž<Р 2%ђFš 2'I[ƒ 2(БЖЦБ 2.ЈЎ-Р 2/5IѓР 21^z 24йяР 2:ˆ–Р 2;|†Р 2B™ІўБ 2DЙЧў 2GЪЯTР@ 2HsРH 2IР@ 2KŒ–iР@ 2M­ЙмР@ 2Nh~' @ 2NJR=@ 2QW[=Ќ@ 2RTUЬР@ 2VЩеЅР@ 2XМТNР@ 2Z˜Ћ‘Р@ 2]]dќР@ 2^€ŠИРH 2`ФЧЇРH 2affЯџ@ 2b??ГА@ 2c>>э@ 2d@@ЇР@ 2e38ЩРH 2f99€Р@ 2g11о 2iSZоџ 2l]ed 2mMPW Р(2mѕѕњ§OŽ6є%!"§ #i$ є&?'787 o<ћ=>BOE;C9iAp:.@D?G"FHKI JТхйх‚§/ЩэіЩэ“Ы““‚§‚§й‚§'5йРйРій‚§ƒ(ƒщўƒ`„TјІМИМйБчQ?_?ЈКƒјІ‚§>-БчQ?_?ЈКпТ ѕQ?_?ЈКƒБчƒпТ ѕй‚§й.Ы…ЫX{‚§>пћ‚§>й.йX{‚§‚§>С““й‚§œƒХ ƒХ Г]Р ѕјѕР њ§џџџџ# БМљ џџџџхР bР ЁЋ #’œwР + Ћ% +ппЛ +ннSt . +оо“Р@+іі*Р@+ќќР@ +ћћ! Р +:: !Р + ЃР +ЉО!Р +MXф!Р + хшј +^Р +cJ Р +EKG!Р +x~&!Р +5;„!Р +=CЎ Р +ouЮ!Р +"р +SY*Р +agŸ Р + ІŸ Р +uъ +"!ъ +$ ъ +)06ъ +.8C_!Р +/ЅG +0€‰\"Р +1$2 Р +4вуЬР +7z Р +:љШ Р +=Чаз Р +?fsз Р +AZdC"Р +BРУu"Р +DMQў Р +FŒ”ў Р +H–žHР +K ШР +M[_ДР +Oim  +Pf‡ю Р +Sыїb +W#.bР +YBР +ZEJ4@+ZБВь@ +\дзь@+^ЙЙdH +`ОСdH+bЕЕ„H +dУЧ„H+fЖЖШH +hЯвШH+jИИ@+nКК@ +rйѓІ@+vЗЗ+@+zЛЛ+@ +~і§8@"+ДДљ4Р@+ Ёљ4@+рР +ƒŒ“‹"Р +‡•œх4@+‡’“х4Р@+‡ЁЂq@+Š№єH +‹є@+Œє@ +<?@ +  2є@+“2є@ +—AbLє@ +›dLє@+ŸЪ@ +Ё08Ъє@+Ѓ‚(+ЄЎ(+ЅЬ(+Іgє(+ЇG@"+Ј  њРH +ЉЉЊиРH +ЊЇЈyР@ +ЋЄЅЈР@"+ЌІІЗH +­š›“H +Ў˜™,@ +Џ•–_@"+А——ЏР@+ГЄЄЯРH +ДЕИЯРH+ЕЅЅёРH+ЖІІёРH +ЗАГРH+ИЇЇРH +ЙКН1Р@ +НЫк1Р@+СЉЉIР@+ХЊЊIР@ +Щмъ‰Р@"+ЪЃЃw!Р +Юъэ` Р +Яххm Р +аффdР +буу= Р +всс:!Р +гттVР +зяђsР +иŸŸї!Р +йЎЎ  59G=ч?DA;BEIR]?NXOPSVp\fY.Z[ŽM`aн_^LdecbHqfhiknoКК1 ƒЏ!ƒйƒ+5ƒ]5ƒЬMЬМMMЬЬƒ[qƒqqˆˆ[qˆ§[qƒMMƒ+5ƒšїп ƒ]5ƒ+5й§йˆййЅ"ƒˆƒ§ƒšїп йЅ"йЅ"ƒƒ]5Rž §]ž Rž §M‹M‹ЬSЬSMSMSЬSЬSƒ‹+5ƒ‹+5ƒ‹šЄƒ‹]5ƒ‹]5ƒ‹+d} ƒ‹]d} й“ЏМйй1ƒ‹+d} ƒ‹+d} ƒ‹]d} ƒ‹]d} ƒ‹ƒ‹Ѓ& & G! МЬМЬй“ЏММЬЬММƒ‹+d} ƒ‹+d} ƒ‹]d} ƒ‹]d} ƒ‹+5qqqqqƒ‹+5ˆ "1є 77Л! 66э" ŽЈ# ЏИ# КНб" DGб" >Aџ" W # ЌЌЬЬЬ8Л хбт"йт"›w$  ѓ$Р # š# Є# ""„# z# rЉ  o# |Љ  uв  Ў^  jв  a# Р# єєї#Т њ#   к#Т ZZ$ cc$ JJ$ 66$ УУ$ ЗЗ$ œœ$ ƒƒ $ ‚‚ $ ‘‘ $ гг $ її $    $ 99 $ [[ $ nn $ йй $ ›› $ ЖЖ $ ТТ $ шшТ# ййщ$Р ™™ю$Р ššћ$Р §# ;;Л# ’’Ф# Ф# ССФ# !ѓѓФ# "Ф# #))Ф# $иис#Т %EEИ$Р &$$­$Р 'VV­$Р (ppГ$Р )qqГ$Р *WWа#Т +FFа#Т ,ƒƒа# -((а# .зза# /РРа#Т 0˜˜а#Т 1а#Т 2вва#Т 3ііа#Т 4а#Т 5а#Т 6IIа#Т 7bbа#Т 8ЙЙа#Т 9РРа# :ииа# ;шша# <а# =88а# >ZZа# ?mmа# @а# Aииа# Bчча# Cа# D99а# EUUа# Fooа# G——а# HЉЉа# Iа#Т Jююа# Kxxа#Т L//&$@ M1$@ Nz$@ Oj$@ P$@ Qƒ$Р@ RЁ$Р@ S^$@ TQ$@ U>$@ V%Р WYYѓ#Т Xrrѓ#Т Y˜˜Ш$Р ZXXз$Р [ЊЊм$Р \ККч#Т ]::ч#Т ^‘‘%Р _ССА$Р `““Б# a™™ ^ќZ[?cba]\_p`ККККККК!й!й!й!й $ $ $ $ $ $ $ $ $ $ $ $ $ККККэ#КЦ#Ц#  Ц#Ц#КН$З#З#;^ ;^   в#в#                    в#         !йКЦ#К!й‘$‘$э#э#K$э#э#Э$э#Кэ#э#ККЗ#И% "&I%  z# rЉ  o# |Љ  uв  Ў^  jв $ a## f% ooШ$ nno% AfН%@ ##г%@  %%Ш%@  $$W%  &9 %!йЭ$;^ x%„%˜%Ѕ%К!й!й]%&Р --&Р ^^„#Р z#Р rЉ Р o#Р |Љ Р uв Р Ў^ Р jв Р a#% .&Р uu'&Р ss5& :& ttШ$ qqP& rrК;^ КA&Э$„#Р z#Р |Љ Р uв Р Ў^ Р a#& Ш$Р Э$$( =tы& JнџRS#J(Je— РJннд&Р JooФ& Jбб*)@J’’Q @JGG $HJ/1Ѓ Jee BJ ёѕ J -0G) @ J ОУЪD @ J šЗO HJ eeў HJpp\)HJЩЫк)HJвдЌ HJлнЌ BJхшS(HJZZФ HJЇЇ9џ HJй HJSS€(HJ††д(HJііЌ #HJ@@| HJLL“ @J"мп" @J%;>-(#J(< #@J)< #J+""д @J-д @J0”—х @J3гж3 @J6КН @J7ААG J9EGb @J;ЦЦt J@JOw @JBŠŒљџ @JD_aЕ @JH6:g(@JJ|~К(@JLыэ @JNVXю( @ JNIMж*@ JOќќь*@ JP… @JR… @JUЏ @JX14 @JZЌ @J\&&=,$J]iik+(J^VV­+(J_XXп+(J`ZZї+(Ja\\+Jc##W+(JdTT,(Je^^&,(Jf``zџ #@Jg!!Žџ Р@JiћћŽџ РJkфхї РJmёѓ'$JnїїŸ'$Joјју'@JqќќЦ'$Jrјјx РJtчч1 РJxыыŽ РJ{ьь РJ|щщ? РJ}шшRS4#@J}(4#@J}e— 4Р@J}ннNТO! A ihe-"#&9%Р($.346750/+* мн  1Ћ2=о,Ќ')н>9н:н;<˜?@ 8 PDBCIMLJKDiEhFeHGйƒ0?ЂйƒP*Е*`Е ƒP*d*””s)‰)К‰)М‰)Мѓ)*К& & М--& ƒй+5й]5К$(RSB(ƒ™(ƒ+5ƒ+5ƒ+5ККe М5ƒ“   В "Ќ ƒB ƒЩЩƒ7+/Е d*йGё йGё ƒ)ц*+ƒ™(ƒ]5ƒ]5ƒИ­ ƒєƒƒ+Ч+& & ,+B(К--'Йџ ƒЩЩ”Л'('Л'К!'+'4'='O'+'+'O'КК-Р F-% %пY.Т(+ЭоRS%+Џ,Р +№,Р +33,e +ўўЯ,Р +%%П,Р +  Œ, +§§о,Р +++0Т@+ћ§Ц/Т@+suџ0Т@+A0ТH+джT0ТH+ орq0ТH+ ъьк/Т@+‡Šю/Т@+—š•/Т+HH­/Т@+PP"1Т+ŽЂ ТH+ce0Т@+ЅЇ7Ё Т@+ЛЛ0Т@+ БГ.0Т@+#ЪЭ-4Р@+#FGЏЙ %+%ІІ).%+'ХХ.%+)ГГр-%+*››ЙЊ Т++ЪЪ-DH+,JJЗ-%H+-llЫ-%H+.tt\Ќ %@+/~~-%+2УЖ D+5УЖ D@+7+,УЖ D@+9##o.Т@ +;Яаo.Т@ +=веЭ.Т@ +>ииъ.Т@ +?йй/Т$+AмнБ.Т@ +Bзз Б %@+DbdЃ-%@+FY[S-D@+H57g/Т(+Iооw-D@"+J=>RS4%@+J-}' &ioi  4-%&''(&13!0i/o"i#$ 927*).+',&-­0К0& ѓ› й  & Fž & Ђ& Јž ѓ› &  ѓ› К--<-К2-71й€ƒFž й  ƒ  АЁ йќ-йC.йќ-йй& ƒƒƒК-RS2-кЖ oВ <-ёЖ .ьWƒ1/I/& ƒ$Б ƒЩЩj-oВ }/SБР YZaБР хц—4› —4Р м7Р ЛН№5 ИЙТ2- 2Р ЁЂS5 noS5 hiS5 klS5 ef*7 tu*7 wx*7 qr0- ˜™џ0 ›œ­/O ’“­/) "•–).- $де. &зи- 'клЗ- (ноЫ-s )рсS- +бвЫ6 -§ўD4c /прЪ3) 0шщЪ3T 2ыьw3- 4єѕБ3- 6ёђБ3- 7юяі4Р 9їји5 ;ту5 =жз05Р ?йкЩ5 @ѕіиЗ  CIJ/Ќ % FLMЎ - IOPё2- Jн4Р K3Б f Nьэ3Б W Pђѓ3Б e Rщъ3Б _ Sцч3Б d Uя№LЎ - YRSдЋ Р \UWр1Р ]"3- _%&"3- a:;VЋ Р cђ­ - e Џ - g45;Ћ Р i  \Ў - ko2% m()o2% o=>M3- q./M3- sCDsЌ - uћќsЌ - wјљsЌ % yўџb3- {78b3- }"#’2% +,’2% @Aу3) ƒFGу3  …12‘Ћ Р ˆ\]56 ŠЇЈ3- ŒГДš6 Ž­Ўš6 АБzЊ  ’ЊЋЏ5 ”СТP6 –бв`7 ™ФЦk4a ›ЮЯk4E ЫЬ@Џ - ŸШЩ5Р Ё н2- Ѓm6 Ѕ  Г6 ЇЃЋ Р Љ}~ш6 Ћ€7 ­ƒ„7 ЏŒ7 Б‰Š7 Г†‡š1 Жš1i ЙЕ1Р МЕ1 П ЮЊ  Т_` 8 82-Р4њ7  ёЖ 2-t5АєєF7АєF7AЌ F7є­0І2­0ёЖ 2-ј3­0Џ2­0"6ƒ27474 6oВ 74сž ]4ƒ2ƒ2К3І3ƒ2Кƒ2353]4ƒ2єƒ2єЅ1ƒ2єЇСƒ2єЇСƒ2єЇСƒ274К$4OЋ є 4­0є5@2U2§Ћ є1є1Ђє1АєЅ1є2єє1єЅ1є2єє1Ђє1Аєє1Ђє1Ає2Ає2є2AЌ є1Аєє1Ђє1Ђє1Аєє1Аєє1Ђ2Р1г1ƒ2єƒ2є@2ЃЊ @2‘(ƒ1єƒ2єƒ2єƒ2z7єƒ4‘(ƒ4gЏ 73є­0є­0є…6є…6є02 702Њ7Т7Њ7AЌ Њ7АєЊ7єЅ1АєєЅ1OЋ єЅ1OЋ єЅ1АєєЅ1Р1г1^в Б p9 Б Ў^ Б @Р __v>Р aaХ>› __Ъ9Р aa;Р __ь8 aav; __V9Р aa[?Р __0AР aaр=Р !__№?Р $aab<Ў '__g:Р *aaЙ<Р -__Д9Р 0aaЕк Б 0˜@Р@ 0__Ч@Р$0__Џ@Р@ 0__‚>Р@ 0aaД>Р$0aa›>Р@ 0 aaв>Р@ 0 __?Р$0__I?Р$0__и9Р@ 0aa:Р$0aaT:Р$0aa;Р@ 0__„;Р$0__];Р@ 0__љ8Њ@ 0aal9Р$0aa<9Р@ 0aaF=@ 0!__c=Р$0"__v=Р$0#__з@Р@ 0&aaі@Р$0'aa AР$0(aaf?Р@ 0*__•?Р$0+__}?Р@ 0-__Р$06__d>Р$07__ў?Р@ 0:aaA@Р$0;aaz@Р$0<aam<@ 0>__Ц<ш$0?__Ё<@ 0A__s:Р@ 0CaaУ:Р$0DaaЊ:Р@ 0FaaЅ?Р@ 0I__Р?Р$0J__в?Р$0K__‰=Р@ 0NaaІ=Р$0OaaЙ=Р$0Paa= 0SccAР 0Vdd,=щ 0Yeeђ:Р 0\ff= 0_ggjР 0b__jР 0eaajР 0haajР 0kaajР 0n__jР 0q__  Р 0taa   0w__   0z__  Р 0}aa  Р 0€aa  ъ 0ƒ__І9Р 0…iiѓ<\ 0‡jj:=Ў 0‰kkЬ=Р 0‹llф?Р 0mm[+dєdєЋ72 є"1! #$Ш%[&Џ'd()-+d*,.d-8/0А12є3d45є7Ш648Ќ:С9;Ж<d=>є?ў@э>$?Х>~ћѕ9.:Ъ9e9э>~ћ$?Кѕ9e9.:I 6;•;v;~ћ9~9V9e96;~ћ•;К9e9~9I >?>р=~ћ@T@№?e9>~ћ?>К@e9T@I „<ж<Й<~ћŒ:д:Д9e9„<~ћж<КŒ:e9д:I |л ;"=|л ;(A|л ;"=|л ;;|л ; =vѓѕ <vМ;Ш;vѓѕ л;vѓѕ э;vѓѕ (<vМ;< М;Ш; М;< : Q< : ?< : э; : (<Д9Т9Й<ћ<Д9Т9Й<й=Й<щ?вAР B™ГA= B››ПAР BW Р(B{{W Р@ B0?ЮA BžžЬк РBBBBоBРHBeeоBРH BЗЗ‚л РBBAAшк РBB ll^CР(B ||†BР@B \\†BР@ BИИADР@ B’’ADРH B‘‘ЫBРHBccЫBРH BЙЙдBРHBddдBРH BККXBР@BVVXBР@ BЎЎXBРH B­­XBРHBUUџAР@BIIџAРHBHHџAРH BЁЁџAР@ B!ЂЂ;л РBB"CCСBРH B#ЛЛСBРHB$bbbл РB&yyжA Р@ B& #л РB(wwл РB)vvл Р@B+EECР(B,qCР(B-ђBРH B/ППђBРHB1ii,CР@ B2ppBCР@ B3rr)DР(B4фA Р@ B4%,БBРHB5``БBРH B6ЕЕlл РB8xxœBРH B9__ŸCР(B:‚‚CР(B;€€jBРHB<YYjBРH B=ААjBР@ B?ЏЏjBР@BAXXCРHBCjjCРH BEРРчBРHBFggчBРH BGННyBРHBH[[yBРH BIВВV˜ Р@ BI.. BР@ BKЅЅ BР@ BNЄЄ BР@BPLL BР@BSKKfCР(BT~~DРBU‹‹MDРBV——CРBBWnnBBРHBXSSBBРH BYЌЌBBР@ B[ЋЋBBР@B]RR6CР@ B^qqOCР@ B_ss4DР(B`ŽŽ$BР@BbMM$BР@ BdІІ0BР@BfPP0BРH BgЈЈ0BРHBhOO0BР@ BjЉЉік РBk––БCР(BlƒƒшCР(BmˆˆЪCР(Bn††‘л РBo••зCР(Bp‡‡Kл РBq˜˜ПCР(Br……єCР(Bs‰‰/л РBBtmmТк Р@BuFFbDР BwŸŸ :+Ћ<иA A!"i#i\\.?@LNPE9HР25: /,Г181'6ж [DЊ(ЊI)Jм.н AЋ%1о$Ќ0SнYUнWнTZ˜B*KоVRCX|л УA|л УAнк ККнк I %_ й‘Bй‘Bй;BКККККЈF bBЈF bBЈF ЈF I Т9I I I Т9нк ККй%_ ѓA%_ КК§B;B§B;BйййКК|л ѓAqћККККК;BК;BC;BC;B%_ %_ ККI Т9I BBI Т9I BBКDКйУђ Уђ Уђ KBУђ KBйййI Т9I Т9К;BККК;BККЈF I I К[л Уђ КК|л УAE: 4:(Р .ПDРЧDРŸD ЇDР ГDР ГA\ &м :@77&м :@88рл :@99ўл &&ўл  --ўл :@ !!ўл  ++ўл ,,ўл :%%рD:(00рD:''рD:(22рD:((Wм :@""ПD4Р@ЧD4Р@L˜ : B˜ : 7 9B 79B  A  ii|л -EЯDv%_ |л  ѕDEѕDEѕDEѕDEI I вAПD 9`qE ?{ƒŸD ?Ћм  ?mE?……вA4@?ПD4@?{|LGР$?^^;GР?XXо Р@?PPёFРH ?GGЕм :@?33Ем :@? 55Ем :@ ?kkЕм :@?66Ем :@ ?llЕм :@?77Ем :@ ?mmЕм :@?!99Ем :@?#::Ем :@ ?%ooЕм :@?';;Ем Р@ ?)ppЕм Р@?,==Ем Р?0WWп Р?3]]о Р?5\\АF:@?9@@АF:@ ?=ttАF:@ ?ArrАF:@ ?EssАF:@?I??АF:@?M>>СF:@?PBBСF:@ ?Svvп 9@?U”E9@ ?VFо ?X[[Fо @?ZFо ?\TTFо ?]SSьо Р(?_VVьо Р?aUUхм :@?c,,хм :@?e--хм 9@?g..хм :@?i))хм 9@?k00хм 9@?m11хм :@ ?oiiхм :@?q((хм Р@?s хм :@?u++хм Р@?w!!хм Р@ ?yccхм Р@?{""хм :@ ?}hhхм Р@?##хм Р@?$$хм Р@ ?ƒeeхм Р@?…%%хм Р@ ?‡ffхм Р@?‰&&хм Р@ ?‹bbхм :@?**хм :@?''хм 9@?‘//8о Р@?’HHЬн Р@?”IIдо Р@ ?—xxдо Р@?šDDдо :@?EEдо :@ ? yyдо Р@?ЃCC€н Р@?ЅLL€н Р@?ЈMMОн Р@?ЉJJ)о Р@?ЊNN]GР$?Ћ__нн @?Ќžо Р@?Ўžо Р@?Џ~~oGР@ ?Б‚‚oGР@ ?Гян Р@?Д€€L˜ Р ?ЕB˜ Р ?ЖŽGР ?И‡‡7ћ&B() '(P$%1i0iC\.r-,5A/3B9?=;:864Г11  ж !Њ"ЊHGJм DнEMLЋKNо Ќ*+н ннO8ВQћRЇU S(TqEКККйКК !йКF !йКF _ КF _ КF FКF FКF F F F №E №E wFƒF !йККК!йКК!й FКF FКF !йКF _ КF _ КF !йКF бFйF бFйFК-Eй|л %_ „E G +G M §B СE шE АE ЂE №E №E UF бE ;F ;F %_  F !й )F )F F F F UF зE F ЙEК ЈF  _ ъF _ ъF FъF FъF !йК B˜  L˜ GКB˜ К%_  +G GI I  ‘G:LР ЦЦХY 1Y ЦW[ ((2X #""сV *55;V 1//ЎQж 8дд Rж ?ЮЮ“Rж FььSж MццxSж TжSж [ўўЋPж bЩЩCHћ ˆ–v8I(‘?WСH (•07MР ЂЄY|MР@ ЉEX“ АрруT Зккb  ОјјСU ХђђRW ЬЕX г  ДKР кЫЫаG кЖЖH кЫЫ#H кЬЬH кФФчG кММ.H кЮЮњG кРРuв  кППЎ^  кСС^в  кыыjв  кЧЧH кЪЪ8H к@@цL1Р л9:ЎLРл9:ЎLР л 9:uQж л38uQж л9>ALР@ лЦЦALР@ лЦЦALР@ лЦЦЁLР$лЦЦoLР@ лЦЦoLР@ л ЦЦ‹LРH л!ЦЦЯY@ л#ЯY@ л$ЯY@ л& Z$л'фY@ л)фY@ л+Z?H л,;Y@ л.;Y@ л/;Y@ л1ЕY$л2sY@ л4sY@ л6•YH л7аW@ л8((аW@ л:((аW@ л<(("X$л=((хW@ л?((хWg@ лA((XH лB((Jћ(лњ\\TJћ(лћ]]ƒKР(лќppћJћ(л§hh4Kћ(лўjjMKћ(лџkkŽщ ћ@лIT л+є РBл'+šћ Р@лIMšћ Р@ л NOуMР$л UUїMР$л VV NР$л WWЃMР$лST&ѕ Р@лQQŒѓ РBлVђ РBліічѕ РBл==Ъю РBл  Rњ РBлќќ{№ РBлад{№ РBл!рх M Р@ л!ЈЧKю РBл#љ РBл%ээjю РBл'gU@ л(ррgU*@ л*ррgU@ л,ррВU$л-ррzU@ л/ррzU@ л1ррšURH л2ррьT@ л4ккьT@ л6ккьT@ л7ккXU$л8кк U@ л:кк U@ л<кк@UH л=кк`T@ л>јј`T@ л@јј`T@ лBјјИT$лCјјT@ лEјјT@ лGјјŸTH лHјјЪU@ лIђђЪU@ лKђђЪU@ лMђђ,V$лNђђѓU@ лPђђѓU@ лRђђVH лSђђ[W@ лU[W@ лV[W@ лXЗW$лY|W@ л[|W@ л]œWH л^ОXŠ@ л`  ОX@ лb  ОX@ лc  "Y$лd  чX@ лf  чX@ лh  YH лi  ЛKР@ лkЫЫЛKР@ лlЫЫЛKР@ лnЫЫ-LР$лoЫЫђKР@ лqЫЫђKР@ лsЫЫLРH лtЫЫ1Qж лuееW @ лu@JjР лxjР л{55jР л~  jР лjР л„jР л‡""jР лŠ((jР л//jР лjР л“ўўjР л–ЦЦjР л™ЩЩjР лœЫЫjР лŸЮЮjР лЂддjР лЅккjР лЈррjР лЋццjР лЎььjР лБђђjР лДјј  Р лЗ55  Р лК//  Р лН((  Р лР""  Р лУ  Р лЦ  Р лЩ  ж лЬЦЦ  ж лЯЮЮ  Р лв  Р леўў  ж лијј  ж ллђђ  ж лоьь  ж лсцц  ж лфрр  ж лчкк  Р лъ    ж лэЩЩ  ж л№ЫЫ  ж лѓдд/х Р лїщъкф Р лћьэВц Р лџлм§х Р лопWQж лЯЯЇKР лƒƒЧT л}}Џ.B-,F102/5o34L87B96: <;>?B@=B[CADFEBGDJIHMLBNKQFPODTSBURXWV[ZB\YQ]Я_ц^цbaBc`VfєdцeцhiBjgmkцlцopBqns"rцtцwvBxus{#yцzц}~B|і€ц‚ц…„B†ƒF‰к‡ˆŒЏ‹Š8ЃEНHцŽЄ(ЉЇЈiІb”t“–’‘ЅŸЂЁ9 •ЕЗИЏАГГЎДБ1К1ВЛжМЖЙFœ›F˜™žš—6ЊE­ЌFЋ_ЮIЭMЬаЏШЫЯЪЧiбbПtЩ[СєРєЦХЏТУФдгвжзBиеЇйкцлцонBпмQтUсцрцфхBцушEщчDьыBэъ№юяѓђBєёѕ5іїDњљBћјќ˜ў§FџG)ђLЫLзLxц ‰ц ЫLзLxц ‰ц ‚§‡Qxц ‰ц Œч ŽQ‚§‡Qxц ‰ц Œч Ž– dLPLЈF ‚LdL‚LPLЈF gYsNЏYњYgYњYsNЏYPYgYЏY‰YPY‰YgYЏYIN"ућW"ћWINу"QXу~X"~XQXуqVNХVWqVWNХVqVZVХV™VqV™VZVХVaOЧQ RшQЧQшQaO RЧQ9R RbR9RbRЧQ RЌRO№RЭROЭRЌR№RЌRS№RGSЌRGSS№RP ХN+ ЅSХNЅSP + яSP + TP TяS+ бPОPQѕPбPѕPОPQqћ ц xц ‰ц Œч qћмш OHxц ‰ц йьф Œч йaч йaч €йй€`ЪЂш Ђш fIfI`Ъ;^ qћ ц xц ‰ц Œч йaч €й€\Hьф Œч 3ц qћьф ц xц ‰ц йш ƒМP \Hьф Œч 3ц ƒyHјHјHЈF `Ъ`Ъ`Ъ`Ъ`ЪЈF ƒУђ fIfI–K`Ъ`Ъ`ЪvrI є Вє є Вє Џћ ŠMКНMЭMƒrI й‰v€ЬЬйrI SMMйrI Ž№ Ѓ№ MйrI й‰йoMU9O щU9OUU щџTU щ5UU5UџT щsTыN`Ъ”TыN”TsT`ЪнUsT`ЪVsTVнU`ЪnWNUщ ‘WnW‘WNUщ бXnWUщ ќXnWќXбXUщ ЪKоK LоKLЪK ?Qvѓѕ ХNvѓѕ Nvѓѕ ГNvѓѕ ŠNvѓѕ sNvѓѕ `Nvѓѕ INvѓѕ 6Nvѓѕ Nvѓѕ кNvѓѕ ІOvѓѕ —Ovѓѕ ‡Ovѓѕ vOvѓѕ aOvѓѕ OOvѓѕ 9Ovѓѕ (Ovѓѕ Ovѓѕ Ovѓѕ ыN : ЖO : УO : аO : нO : ъO : їO : P : ЁP : ƒP : P : 'P : 2P : >P : JP : UP : `P : lP : P : ˜P : ŽP : xPйьф Кйьф Кqћ ц xц ‰ц qћ ц xц ‰ц bQйьф qћжTвAЧD +I ь  1]ehZ 1hhŸDL 1<™ 1jjO™ o1kkT™ o1ii—[o 1yyœ[o 1zzvZ# 1 xxвA4@1 ЧD4@1 ]^A[A1 BBR[A1 CCЯы @1 Јщ E@ 1KKЈщ @122Јщ @111Јщ E@100Јщ E@1//Јщ E@ 1TTЈщ E@1..Јщ E@1--Јщ E@1,,Јщ E@1!++Јщ E@1#**Јщ E@1%))Јщ E@1'((Јщ E@ 1)OOЈщ E@1+''Јщ E@1-&&Јщ E@ 1/NNЈщ E@11%%Јщ E@ 13RRЈщ E@15$$Јщ E@ 17QQЈщ E@19##Јщ A@1; Јщ E@ 1=LLЈщ E@1?!!Јщ E@1A""vь A(1CAAvь A1E@@Сь @1FЯь @1GЈы 1IFFЈы @1KЈы 1L>>Јы 1N??э A@ 1PWWэ A@1R44э A@ 1TVVэ A@1V33э A@1X55оы A@1Z99оы A@1]::cы A@1^;;Šь A@1a77Šь A@ 1dYYŠь A@1g88Šь A@ 1jZZŠь A@1m66нь A1pGGc[A$1qHHэы @1rx[o@ 1tccx[o@ 1vddrы o@1w``rы A@1yaa™ь o@1zbbL˜ o 1{B˜ o 1| E.ч1ц0Q/QA,-ii\r9!#%)(&635<:>879*+ ?м@7 BEцDцFQCQBA™ A™ A™ v|Zv|Zv|ZККйvvсZv%_ v”…vХVvуv›Zv›Zvє% vI vЬvКvG! v4vЄZvЄZv vbBvbBvГZvГZvЩZvЩZvсZv;Fv;Fvv.[v%_ Кй|л %_ ‹ZvЄZv vbBvbBvЄZvB˜ vL˜ [B˜ v! ъFv! ъFv[ъFv[ъFvКvКv.[vEХо I I :a) ) re~~ћZ }мЛ'E g   RS џџџџг[ f f BO  7 W g@ > C žc 3Т Ў ц[3ъ ъ ug*3  }h > ж МE Дhш Ч~ NaЧ) ) NaЧ) ) aЧ) Ъ a е) Ъ >ь ф } kc  эъ  џы эррџы  §шkh$Zjы[ f ‡ *\@ m r – ˜ К №i~@ Ÿ Є (шшe— gZZЏ, eeH[ ccXэ  dd:a4@) * re4@~~xИ HЧЧСА ЫЮСА Яг.e S5@ Š‹S5@„„S5ллS5@ ™›S5@’“*7@НП*7@БГ*7@ЄІЛ'4E@g4Š@  RS4@Т У г[4@f f їfH"9 9 -g@ @ @ Pg@ B B mf!9 9 AЗ @ "9 9 AЗ (%9 9 AЗ @(G I фЊ @*S U ѕВ @-Q T ѕВ @0F I gГ @ 0 1 +Ў B2Ѓ Ѕ ѕД H7“ ˜ ѕД H;X \ ѕД H@^ c ѕД HEk p ѕД HIr v ѕД HNx } ѕД HR ƒ ѕД HVe i FГ HW8 8 †В HX@ @ Бc[Ф Ф /Ж @^я № /Ж @aш щ /Ж @cї ј /Ж @dу у ёd(eЌ Ќ вd(fЊ Њ e(g­ ­ ”З @i§ џ Бd(jЉ Љ )В @k  ц[4@kъ ъ ug4@k  5@mМ О q­ HoЫ Э 05HqУ Х ИВ uб е ­gx  !Й @zЂ Ѓ !Й @~– ˜ !Й @€Ї Ј !Й B@‚ ž $Џ @„В Д М4@„}~М4@„шшШ H†З Hˆчщ˜Б H‰$$ШЗ HŠ))О­ HŒіјЗ HŽ4К EHЭЭЎЕ EH‘ик.] E@ ‘9CЌ @”СФЩ5EB•ФФиЗ oH˜.1иЗ oH›иЗ oHž/Ќ HЁ:=/Ќ HЄ47/Ќ HЇPSЎ HЊVYЎ H­ilмБ HАx{мБ HЖ‡ё2EHЗ99љЕ EHИјјКД ЛWZКД П[_цЗ ТSVЙ EHУџЊ HХю№оЉ HЦ!!jЋ HЧгД E@ШРРн4E@Щ//^К E@ЪГЏ HЭйГ oHб йГ oHељ§а\Eиф\E@кІЇф\E@м Ёф\E@нšš3Б E@п563Б E@с 3Б E@хKN3Б E@щPR3Б E@ы3Б E@э3Б E@яВГ3Б E@ёКЛ3Б E@ѕUX3Б Eјgg3Б E@ћЫЭ3Б E@ўкм3Б E@щъ3Б E@%&3Б E@ѕі3Б E@-.3Б E@§ў3Б E@ qЎ EH орuЖ E@чщšЉ @šŸцД HWИ H**ЎИ E@  LЎ @ЕЙLЎ @ ЈЌ›Ж H!??ќА H"??LК H#55iЊ H$IIдЋ H'MRдЋ H*kpjИ H+44р1EH,AA"3oH.[]"3oH0ВДVЋ oH2ЬЮVЋ oH4ртVЋ oH6ИКђ­ o@8ђ­ o@:8:ђ­ o@<%'в­ H?лоЏ oHA–˜Џ oHCEG;Ћ oHE[];Ћ oHGLN;Ћ oHIjl\Ў o@K­Џ\Ў o@M“•\Ў o@O Ђo2oHQРТo2oHSfhM3oHU|~M3oHWмоsЌ E@Y‚„sЌ E@[z|sЌ E@]npsЌ E@_’”sЌ E@aŠŒsЌ E@cЂЄsЌ E@eВДsЌ E@gacsЌ E@iЊЌsЌ E@kКМsЌ E@mšœb3oHoPRb3oHqЄІ’2oHsЮа’2oHuqsу3oHw‡‰у3oHyъьЭ`HzHHѕ`H {LMFИ @~’•‘Ћ @НР‘Ћ @„ЋЎ56@†ью3Hˆзйye‹€€bА @‰‹bА @‘•–bА @ “ЁІbА @ •ЌБbА @—‘bА @™š›Ў @›ЪЬ„Д H f1B ŸЖПкeBЁЗПкeB ЃЖПš6@Ѕ š6@ЇџџzЊ @ЉѕѕzЊ @ЋіітА @­цштА HЏлнNa4@Џ˜ ˜ Na4@Џ7 7 Na1 Б) Ъ ѓaH"В@ A ‹bH Дm o пbH"Ж‰ ‹ xcH ИУ Ф IcH КЕ Ж kaН+ + Їa(РШ Ш Їa@ С6 6 Аb@"У|  'c@"ЦЅ Ј c@"Щ• ˜ JbH Ьb c bH ЮR S Џ5@аK M P6HвY [ `7@еQ T Њhи  №Љ @к2 3 №Љ @м- . №Љ @р& ( №Љ @т7 8 ЦБ @фB D i1B цr { оhB шr { оhBъs { k4@ьm m k4@юl l @Џ @№c c @Џ @ђb b 5@є  н2@і  ‡gRљь ь mД @§ѓ ѕ mД @џњ ћ ЎЖ @  m6@  Г6@  QВ UUЃЋ @ \\ЃЋ @ ]]ƒh@  iiш6@^^˜­ @__єЏ @cc•А @ddeh@ hhQД @aaДЎ @``-И @еgъъРЏ @!РЏ @#  РЏ @%љњРЏ @&ђђРЏ $)XX7@+7@-KM7@/,.7@1?AЈБ [@2QQH\@ 3o o k\@ 4q q ќ[7h h эИ @;v x ‚Ў @=ƒ … йiH">š š j№@ ?Ё Ё /j@ @Ѓ Ѓ iCš š пЌ (Fš š пЌ ?@KЈ Ћ пЌ @ Lš š •Й @NЖ И W @ NЪ д W @ Nж р (4@Nшщj Qkoe— 4@QZZs`Z&P)*+'(,-i.s#n%$5ьO69<783:h4T5љ1cIP78чL(JKMQiSs=nGH;<?EDC\BFA@>RONPFUhZ][^\_DVDXiWsY6/М†F‡ˆ[‰[“’ŒiŠs™n—Ž‹›š˜–\•”‘jЪЧЩЦЫФХСТУШ€lhiœxмЁ|н‚wЋЋЙоЗЌИКнМЛнЏнЎА˜ВГБЕоЖЭЬ­ЌНОЮЯРПба„…mnorpqtsvužЂЃkД}Ÿƒ~ ЊЅЇЉЈдежcfbgdeІЄвг{zyі"шйнИмплоктiрsиnщъзшчхцс[!aѓOєѕчю(њљяіi№sјnїђё[0ьўџDћD§ќ  ЅETc "  ZFaў9ц$! "D#Di&i(\'r%ш)эєЕ;цDDii2[,Fц-.*ф+<ы–2i453/D6o0o1žф  0?ЇСOЋ 0?ЇС(АєКћZМАє2-t5 4єJeAЌ JeАєJeє & КBO Žf2-нfFўГfйрєƒыc;dƒ/Г ;dМєƒАєЕ #Е xdƒє3Е xdƒє3Е d} xdƒАє3Е d} xdƒєЕ xdƒєЕ #Е xdƒАєЕ xdƒАє3Е xddМКžcRSыcd/Г dаcqћККГЗ аcМ& є& є& є& џ5рВ К}hМ'Њ FўAЊ К\}А єйрє+ ‚`I ‚`у™ј`Ъ‚`Uщ ‚` 0?Ђй"Ќ 5М& АєЙ]& єЙ]& AЌ Й]& єў]& AЌ ў]& Аєў]& J^Й]& Ў Й]& яБ З^ƒяБ В d} ]^o^ƒ2& 0?ЇСOЋ 0?ЇС(АєйИ 5ƒМ5МшUЋƒƒМ"Ќ  _0?АєY]t]0?єY]t]КМЛ'К 4КєК‡Ќ РЌ ѕ\џlБ ѕ\Jм]ЊЌ БЌ Ає‡Б ѕ\"XБ 2-$4Ає5‡Б 5pБ šЌ AЌ ‘Ќ зЌ ЦЌ й€йрєйЋЉ СЉ __М5МƒЩЩйАєb_йєb_ММѕ*МшU2ў_шц_ў_М‚§‚§F]‚§АєМАєМAЌ МєUЋєUЋAЌ UЋАєМ"Ќ ч­ ‚§Ає‚§єМАєМєМAЌ UЋAЌ UЋєUЋАє‚§Ає‚§F]‚§F]‚§АєUЋзЌ UЋAЌ UЋАєUЋРЌ UЋЦЌ UЋЊЌ UЋ‘Ќ UЋєUЋšЌ UЋ‡Ќ UЋБЌ ‚§F]‚§Ає‚§Ає‚§F]‚§F]‚§Ає! aUЋq`lБ UЋq`г1UЋР1г1& є& єКшМFўAЊ К\}А Кe–eє Њ йрєžД Lf6fшfшfшєш'Њ ”Њ 'Њ ”Њ єUЋ  М  `a ƒ=bеb=bUЋ  nc  К’a:a2-еaеb=bƒ=bєƒ  єМ=brb„ч=b& є& є& z7єК>ьМ'Њ єFўAЊ К\ Њ йрє6f>ьf>ьf>ьє>ьХhYЏ єYЏ }А йV.йV.Кkc МFўAЊ К\єйрє gV. gV.йoВ СЋ Я+hƒMh+hК!'+'4'='O'+'+'O'hККUЋКџы МєАєнЏ КяghТ7hAЌ hєhАє& Кы[МFў\К\йрє К–@i2-РiFўaiŠiЄiйрєvПц \eѕ*ЛЛ$(МaaЭ‹ М((ƒja Л@ўkМ Ea!qМ H(-qМH(-˜O Z HББ?t n HВВѕ*4@HЛМ$(4М@HabЭ‹ 4М@H()kМBH00БjH HjH H  ёjH H kМH HkH HХjH HлjH H•L @H шъŠjH ННxM @HгдkM @H§§kM @HњњFM МBH*-ѓM @HђєлL @HзkМ(H==ŒkМ(H55ыkМ(H??kМ(H77іN @H!икБkМ(H"99ФkМ(H#;;эmш@"H$opМ@"H%Пmш@"H&ѓєМN МBH)›žO МBH-ЇЋФK шBH5ВК&l М@ H5hkЙnш@"H88<nшH"H9ЄK шBH;ШЪеM МBH>дзеM МB HB“—‡N МBHD„†!M МBHHŒдmшH"HIћќкoМH HJПР/oшH HKjkЅN МHHL6nшH"HMSnшH"HN"#ьnш@"HPSVoш@"HQžЉmшH"HRьэMpМ@"HSљњWM ш@HYпх lМH\ccйN М@HbtxйN М@Hcnnioш@"Hf‘•Poш@"Hi}ЦoМ@"HlЙНpМ@"HnфчњoМ@"Hpгжpnш@"Hs-1nш@"Hwгnш@"HyHK/pМ@"Hzя№НpМ@"H{ЁoМ@"H|ІЇ–pМ@"H}oш@"H€ghшpМ(H  5O М@H‚||9q1М I„(-qqМH"I†++ЗqМH"Iˆ,,W ш@ Iˆ>@6 j' O   \!" k<м)l=^>^M/0-.&' (,;9%1#E+56D*QF7K3@?8IA2CBG:$JмH4нL‡ ЌO]PЂйЬЬ`Ъ”…& ЬЬƒ‡M Кƒjѕ*‡M ƒП! ƒƒЏ‹:kƒ‡M й/L HL `L `ЪЬѕ*Ь O УЬЬƒƒƒчK їK ПlчK і mПlчK їK і mcl€lŸlПlƒЂV Q ЬМ@l>ьmПl>ьїK m;m>ьПl>ьїK mПlК& & МЬЬƒoƒƒƒƒП! @lcl€lbmКўk$(П! @lcl€lŸlƒЏ‹:kƒЭV :kƒ+5ƒЏ‹ƒ(V ƒЯŠnƒcl€lbmƒк ƒƒƒƒƒ]5чK ^q К>ь Lr Р’  В™  Ў^ j Ћм  Ar Xr 5r Чrj ;;mrc ::Юrj 99|rc "(нrj Пrj //Зrj 00Їrj 11er 22еrj ..sj **Žrc 33Џrj ,,–rc --žrj ++јrj "Кhь КvrКhь )Ц qћƒrщш !йфrКИ­ КИ­ КИ­ КИ­ КИ­ КИ­ КИ­ КИ­ КИ­ КИ­ КџrвAe—  6 jŸDr 6buМ$6aaЙuМ$6ffsuМ$6bbмuМ$6hhЇuМ$6ee)uМ$6^^?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЦ  !"#$%&'()*+,-./012345679:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЦ  !"#$%&'()*+,-./012345679:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЦ  !"#$%&'()*+,-./012345679:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЦ  !"#$%&'()*+,-./012345679:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЦ  !"#$%&'()*+,-./012345679:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЦ  !"#$%&'()*+,-./012345679:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЦ  !"#$%&'()*+,-./012345679:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШOЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ     OЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ     OЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ     OЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ     OЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ     OЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ     OЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ     OЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ     OЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ     OЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ     )S{ЃЩёBd†­Яѓ8Zzžpg ОPUD€A"@@@@@„@„ ! D A@B HABBAA њхSFW“Ј CŽ`p‚€€ˆ ’A„@HB’ˆ !‘ @B"!4ХŸFAд ќ§Jђ ќ§!а! €RТŒ0@д!˜ЗД{€№ўqћНќяП;ъЏњџѕпЗпџ_ыьџЋ§џкўџўп§ЩџћОппkпі_япћ‘ŸџПћпјœЛЯџџџћћџплК§біoмџОпџ§ППџoь§їџ§ўяџїњй§џўПћпюџџп?CЅBТЗЩOœ`ьіћoНsОПінН.JВFžKЩЋѓзЃрыЯэwџџ§П§џПўїюџџїяіџ5Z'F§ѓiѕ€=Јv›>‡ѕДHŸ*ўџНрџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ?9x‘DSTзH!РCџ@ўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпЎСDTY^Р%з`№џџџџџdЄFPIvзQ№у• €ш€рџџџџџџ_œD_(€№Lњ7t ўџкСŸFfњm§* ф0ТŸF‚С§џ‹rрџјРџџџџџџџџџџџџџџџџџџџџџџџџџџџџмY'FўŒ={ј€јџџџџџџџџџџџџџџџџџџџџџџџџџџ”QУB<= ИЕ€€јџџџџџџџџџџџџџџџџџџџџџџџџџФx‘D, ю~БyџџџџџџџџџџџџџџCЅBќ§,ќ§J Г9$ јџџџџџп!ЅFDГЂН.n рyWц@ѕНЊпбу$№џџџёУŸFШп ўжг‚Рџџ/1ЁFPў*RЎ ќџПЖFIF&‡/№џ’~Ex&А^Ÿ1ерџџџџџчЫŸFю^сa1@pњхSFbid#8ƒЮ=„dbk5oќ ш/B…kќ§„Ÿkќ§Кkќ§Йеkќ§ яkќ§ lќ§‚#lќ§=lќ§Wlќ§qlќ§‹lќ§Ѕlќ§Сl7О^€ РџџџџџџCЅBTОуЦ0bўТ”>*Ч Ю6 Q ~@ђЭC2CЮќ§[Ю §ЕмРџџџCЅB§K `Ж@РocЮEn Х  @аС]'F2н Ю6–€? ‰Dц‡! Р†hі@ІB6`А™-A™4*Wц№і˜@Q*Л6 ы@2p*u28К ў2RнD2ќ§Г2 40к+м>g4BZЉ0Рє>ВF2*B“BРR‡>ЖB0G"=№/1ЁFVGьH `сЌ@IгX\ž€№CЅBѓXд[&РBЋD№[Cil аРhgЃF|ij @ЭTt= jмqQ‹р~CЅBїq‰{Љ œў@€ўљхSFЇ{'ŠБ Ѕ №  Р3ХŸFAŠќ§aŠЮšnZА@@ˆ(рџЉWЏ>ѕšќ§›?9Јqќџџџџџџџџџ?@рџџџџџџџџџџџб p@Ь?IrlГ@№ ~’~EBIXmУЅŒ №џџ@ @јџ}ЃComШm @}ЃCщmЪrм и ’ јџџџџџџџџџџџ€9јџџџџџџџџџџџџџџџ8x‘Dяršs™Z №@ @ @€}ЃCЙsL•М4‡#јШ€€€€џ_œDm•m›e VžРр0ТŸF›ЭЂ ивo€џџџџџџџџџџџџџџџџџџџџџџџџ? РH €№џџџџџџџџџџџџџџџџџџџџџџџџU['F Ѓ F чЂD#џџџџџ@3 №џџџџб p@n ќ§Ž ќ§Ў Г&@@’~EЩ і 1+qр @€}ЃC% О C$dрџ„N€џОЖFш Н> Ћ˜Й@€ўџ@@ €ќџЊ9ВF(? Тd w‘ˆ рџ@@ і)1ЁFкd “n  €№€№ОЖFo cq |mч€ №€€Р’~Et hy <0LШО/€€р’~E•y ‡{ $ TР@€њхSFЃ{ Ћ| .@€@}ЃCж| МŠ —ŽтС@@ ќ}ЃCуŠ ќ§џŠ ќ§ ‹ ќ§9‹ ќ§U‹ ќ§q‹ ќ§‹ ќ§Љ‹ ќ§Х‹ ќ§с‹ ќ§§‹ ќ§Œ ќ§7Œ ќ§RŒ Ъ чnvЁ €Рџџџ  ќџџб p@0Ъ VЪ 7/e<€€ыТ”>jЪ ќ§ˆЪ ќ§ЅЪ ќ§ТЪ §а :6L"p@pТїE8б ќ§Rб yћ YUAџџаўџб p@“ћ ~ Г ’`€рќОЖFЕ C ƒ{ј‚gЇC\ * jQYўоFЗ* ї+ $,€€йаЅF , D, €@}ЃCЋ, ЋнЖFг, ю< Е ІT Р~}ЃC= нE GEБА}ЃCїE ќ§F ќ§:F йI -)BР}ЃCіI кf -"ˆ@ @Рџо!ЅFљf шg  @@€\‡> h 4m E<m@р.1ЁF`m Ўm  @@0€g0…=n Zy ™­@ј јб p@зy { 2€žмъ=А{ ‚ „ vЯH@р gЮE7‚ ˜‚ @€g0…=Ѓ‚ сˆ m• 8(рв p@џˆ ќ§‰ ќ§4‰ ќ§ Y‰ ќ§x‰ ќ§”‰ ќ§З‰ ќ§Шл‰ ќ§§‰ ќ§#Š ќ§‚NŠ ќ§Š ќ§ АŠ ќ§сŠ ќ§‹ ќ§B‹ ќ§‡s‹ ќ§Hœ‹ ќ§Ш‹ ќ§‚ј‹ ќ§*Œ ќ§VŒ ќ§‡Œ ќ§ЌŒ ќ§бŒ ќ§Њ ќ§@ % ќ§R ќ§x ќ§Ÿ ќ§ Ш ќ§ѓ ќ§Ž ќ§MŽ ќ§{Ž ќ§@ ЃŽ ќ§ШŽ ќ§ьŽ ќ§  ќ§ * ќ§I ќ§h ќ§„ ќ§QЅ ќ§HЦ ќ§ц ќ§‚ ќ§$ ќ§ B ќ§g ќ§ˆ ќ§Ј ќ§_Ч ќ§Hц ќ§‘ ќ§? *‘ ќ§K‘ ќ§n‘ ќ§‘‘ ќ§В‘ ќ§г‘ ќ§рю‘ ќ§ ’ ќ§4’ ќ§‚X’ ќ§z’ ‚–  РЇx1Fž– Y™  Р|jї>t™ .› РДC„<h› Љ iкќmŸC;Љ ^К ТШќ eE™rК vЛ €Ђx1FHЪЛ ыб ц}Чџъ8Dв жз PnРА+ї>єз ;к D@РЂx1Fyк ‘л €Ў~n: Ÿл Wм  @Г~n:kм п %?ШИ~n:5п Bр @=tn@Uр bф !=€bДwћ>|ф §ъ DŽ шЃx1F#ы э $: Т’jї>!э 9ў   $A@ €ќЃx1FKў х DŒ рnŸCљ ] -€С;W9q > %Р"‚@Z y €Я7zAš Š 7@=tn@ ' 6рЃx1Fg т G€ €peЌDё В Dr@„‚aЈx1Fъ R _2r€pЂx1F ж$ 2рЃx1Fы$ Й/ bђ№Ѓx1F!0 ž1 Рo`IEЗ1 ј6 -FРЃx1F7 9 РyYzA"9 XK к '˜ €ќЃx1FoK 5O F@Рј+2FSO ‹X ^Щ x‚(ВFАX g^ ,”@рщIAn^ 2` "@@ъ~n:E` Cc 7Р…Cў>sc eo g\№Ѓx1F‡o Nz c2Љ  ёЄx1Fvz }‘ Э…€"џЊx1F›‘ иœ P”€@јЄx1F yБ Їl€@€ €ўЃx1F Б ŸЛ j– BрЊx1FЯЛ шР .l€@рїШ˜DјР gЧ I”@€Р "EyЧ Ыу * @€џЁЭŠEчу -ы cж@@рЕ,їADы dэ <€РbEvэ Pў ™(“  @ќЂx1F}ў Э/a @РЂx1FБiР№mŸCФЩP 2m рcЯEш‹"{ +й №Ѓx1FЁ" #  €КБF&#%o a€€РpeЌD %г% €€РpeЌDс%P&€€РК š:W&Ш$€€РК š:’&=,QJ} `ИбйCZ,"15+J€@:рч№:DO1м7aТ№bМ@8^в €_rn:K8p9 €TŸ:8Ў^ €_rn:Д8nAW0@№_rn:AbD^Bw€@_rn:fDE€€Р_rn:5EŽGY?И€Р0€К:ŸG Z6л „?ќ­#ЗD0Zœ[I1|ƒЖ„і>Ё[/j<Q  D@ј рCјx1FSjЗqRIˆр€рx1F§qs"€€žъƒAsмuP6{Рpшƒ;юu€v €€ €Мvћ>vx @@тSŸ:8xWy2*€€B€ žx1Fay-z €jŸC7z•9ВFE @v>Х>Ъ9;ь8v;V9[?0Aр=№?=b<g:A,=ђ:=Й<Д9А] б] ЧrmrЪ] '[ žY шb Эз [[ pb 1Q‚` ћ\ Йж ƒ[ ] ЪЪ —] ‰] g^ ?w \ Те +^ ] а!;\ ЮrХžС ЅУ‘КИŠ­Ћ‚!ЩJл$F о№ ѕЭ nС ./рЎ Нч нWХyжy zђyƒєЊ i|>Р#ї#њ#vK|rќ с ї™ › Ъ™ 2} yš .› Бš іŠ ) <™ к#$Iд 0§ВA rcтУр An zb €b O™ E œ з 8o ж T™ $ѕ?@\CY;ZК:ХW\О,UС< !џ $ Н ј` ]ПA’Зш Њ< Zц =ш Вх жъ "z-zJе Хв /E Т#Ќ.&щ$ю$ћ$—[œ[W <– iыV-j-˜Рm§уљиёл№ R ё Рb kа lн §#vZ‰} ‘ ƒ— њCЛ#Yё Ф#T+ ђ* ѕs! }Њ Eb Шa cЂЩ ЏCЧ+ЙЫu>B Кб%#ЌUЭHЕ`А'МoРщ&ћ­ cџaР#Ъ—Уъі$ДЬ’Œ §žАC(UФюЫюEЖцЖ ьТЉ\ЦіЦІ‡рЎnЬ#џНq`ЊЇВІa­fШŽЏNфСжнRоŒџ№­fЎњаыЁцРn(єГœ м XЋ5{ошоЖ0ЏчХлgТТГЖзxМ u3ФŸ=РЕ3Єeк­FлЏОЧЮ"АX lБcЇгЖЇ1>…Е–мЌн8ёSЉ+пЉлЈЃЉ,ЈЯ'sН§_ўЙЛŽ=ё)4›я5”c„єїЕЖdWЁlP„с3CˆqY[–Ђ5Ѓѕm•NДТкЇ]ЈВ­ ЦaУзЪаЭ~Ё%уЅЋСФЈqж™Њ]ОЅб C|-№чKC ЗЊ г` 7 ЯК 2Г нrял xња(6 w+Оє БY [a ‰јNХ§ љZ юb Xя Ѕa œI дЧФщіЧПкF†ЊyYН„злЫръуы№ЁXŒqˆ7qћШIp4BйуїнЇ“?€­чТq"8‰x  .Œu Ф{Ј&6 р‡!r`Ђыk‰цuў…"Н§Ж’г|Šjно‰ћ$-ЈШ€hКъЛІуІ­ЇЅoиЊаЅаЯ0ЉптPjЉHYфЂї—;ŽНМїМЪœ”єo5Й–)яХnЊЋКр–TШ‚аЪvЫ[є}W^tIъ†nјК|‘‘’RЧЮЮ‰ї.klбЕG!—МЖ‘pŠnІ|Йšвnц&У*гxvр?Џј˜ыХ\ўщ>t›?œœтЬЮ"О“€r+Ћ'Pйк;GАbЅУœБ=ўлМ(‹}RєвЇd`pѓ?†-,ЖШjжz3вс жЦј~kяыЃpѓІ™ЗˆQMQЩјшѕ­~ sЪСpчњ?uq*{žl,9•'žЁчmф“`ъSлЖ‹СВГЁRd~ЄхЗ}2ќЃQўћˆJђЇКЄшѓ\Z5oыMЎN ŒŸа@ ФD‹JњВюluќ’ЮРЄW‚ЬŠAтR3WЖ" ‡ФРтhhcœБёWљВŠйЃМ|:}ЖО[№Eѕ—bС–ЎrНдзиŽ›ЕХ№œfY›ч|Œ†0Љ{&Rё†‹uШ}Ё{Mzv|дsBw0t5w‰вƒ"V‹rŒж„]Л|g“Ъt{}H‰Сƒ›}Eƒіt wZ{svЗzи{f‚Gx||јŽ•šО•Ј•€љќšЋќ)›"9 ПE # %N Э х SžЭ вЭ L і œc U8 Ќ№…Ѓ Jіœœ ЊЮ YС ж] ш№0I иЅ5 !рB0 х) qВС‡н Jm Џ УР " лЦ8 .)  іПрЈVг/Ѓ ышЬжДP 5š "Ћ ~ P œn жщ˜ц sОЛ„ 8p кp 8œ‰Н+О4› рt <СФL Єu ž ž’ прl" gz 45 Ш Y‘ Œ ш™ Й , ‹i 4^ і Щг ™ y ŒM Ћ-  Ш> еК‘5 АЧ ф И @t _ ~Ю ІЯ ,; “ нЬљІх—} – < +† ‘ Oб яŠ wЛ^q хх cу“ ЇўщЧЬлxмs+ v› в› уК Cd .ёОЌx Ъ$ k хŽ НЫёёВ КчИ ŠИ VН <О Jю фЋ У ѓР ‘С Тс р љВ Г №Н =с уа "Ќ Ащ хС Ё­ pз и щк sЊ ч ЌР IЦ МЦ БЄ мЊ ‹З Wі ™Х М нй АМ ы `Є B <Ї Зк ­и а њ Ї ФІ ‚Р /п ЗЩ иШ ŠІ о јє NЉ Љ wЈ ЦЉ Аг ŠЖ UД Dд П юј [­ мл дт њЩ hе ZВ 0з ‹р БА RЄ šЋ 0Б №Ф LА ЇЃ ѕЖ gТ  Њ $Ѓ Є PЧ рЇ wІ І Дб Œв Тї ўџ Њ ~г (@Ј„ъ D@йUЬKЈKˆZ$4:xЧЧoаH-Ы‰?44&rРy Гy r4ЧY| Т{ YYQ4” ЭŠS'б{9'Фw&l ”Ч П О Ur%р{‚ "RыUO\›IЕO3 Kс.q Q уy=v E? Ѓ D я ‡Mы?Яk…lMњlZknj@KхjŒIљi]kTVA u\БPйџ.`˜Z>h dAі;Єj k ~ m ЙtХIž 3 пOђ, ш9 6 g'уCщ lM'F DXq % UUh ЕШ#]Bю Œ•М ћWШXс8Ф8]$ЂIщš] szmр{ ёЛ~ К b€ ;r)<*D<вФ –С Т тЛ БВ фМ оХ L ЇЅ pЂ ЖИ чА *Ђ w’ ŒЌ Ч‘  3 ёІ }  љ’ ёЌ ѓЃ _Њ ПЅ Š‘ A“ AЗ o “Е Њ  ,Ÿ U› œЄ hŸ 4Ѕ (І sЙ Щ “Ј 9В ЃУ ІО ^Є ќТ Ž ™Ž цŸ …œ JШ 9ž G  Ё› ;” ѓ› ЋЩ Є­ Ў 8Ж _А 5Ї ЎЂ  жŒ џЎ оЋ RТ –’ a ф Эž Є Њ mŒ ‰“ џ“ tЖ (Ў НЁ 0Ј ФЗ •Њ јЊ œ gР О bЁ {П С џД oЕ ЎШ \И †Г O‘ ВЃ сŽ Ф т  CЁ тЦ s9 Ÿ< NЪ G8 Z8 zЮA6 /ћфљ Uї Ђљ тyГyrз гИ оC ” Oщ 6џˆb вA(EC ј i№жПrЗrЇrer№"ab еrsŽraМ ЏrіъПDqE–rM žr–D˜!)!hf!є ЬL †” f%ˆН %c Ушœе ­H ЗH ь‹ н| b йvM щё %ѓЫА !о Ий &Щ ƒы Wг рп ­н iр љу ћњ €в ѓ žє iѓ і пѓ ќє Фі oј ш еъ чщ žв Nд 4х уї bњ "г є Дц Ьэ }э .HЙг ь *е ‹ч \п $р мр )в mг Kы ь ъя Ёђ рю Њю в [ћ п  б Ќњ Эј ^љ сн г яљ д oб тд Œ№ ёь 4я о Fї ц рб в п ˜п Ёо !с |р Rт с єс Œф 1ф Сб ъф ‰х ЦА ‘Рд pе Йb щу —р Ыу >у ф Fф bф у­Ид /ояи #*b [v§_fёjЂiЂѓH…X~?нЎы+еДгw˜б"1Ž Аэ6ЇwБцIXl …Ў›тg~)c7‚•Сfж@{€†_ЧK^™Ч}С#ex/>6Žskr9– = ЌіЅ" ~р'-7eцFД$ж+B'ЕššB?,sщљ_ Gh2УП%ИіRAы5Ÿ'й4КЈDї,H0в5›7‚іќ=Ё#™(фCо"bКжГ ˜$—I?*HW!™;Оъ(щќьвхњъзл-З‡18вuп@Ш%Ц-U 7šz,Я{џ}є‡ˆ?Y2˜ ћ*#ёа”ІЈЕghТ}“lЬ/GЌ5№ЂQ›“…њjgo8UТ–G“4nяLЇчŸ<:/с”ї…­КЗМ=uG(п%иb:ГY,Іь-чЕўн5@-n(єš‘[6уѕУЗ-ъЌŠОїFq.йчŠГt9;зќ“Рц,6oјувИУDa9жcMивЉѕ˜п‘’J;зOZ‰шЗ7T<мИQEib–?Л9(Ы2–+м(в”ХЎ€Ÿ}ZтI$ МiMŒйjЌV*г<EюЮfНўЈГVG2–1ХЬ&#<:§№| "кVкф;сƒЛ1‘†ыюM Ічїэ+Ь Ÿ0O›Ѕф9ьЪкh5ЕHwS‘/$зE™j5( Э8rь:ЄKFJі$3ХYWр-š+Ќ@3ˆmЙ6yO^j |’(ќ—$Лn%;Ќ)F)HbR=БQt5€7_™.|BЈsЌЋf•XЎ‰W|v’ЕžŽЏtЊEŒ`ЛљНGэ:иOуЊЮУфЎјюзі5ъV|MКNЇKъIгP"qаlBqЖФ  !с#ю '&)є 5& И$+Я bDMЏњєрѕЕњЛњ$ї­$­ E -”—ŽŠ€™(к‘͘–B21pў-2^@О7љў…4№:m4‡§]§з‚чод!Ъ)ц#ћ!њ+љBR  >)_ ЁџА е œ ' ~  Ј aы^/&S™-—LPG  . g Я€m іy GО'Œ+ /, з јќ Г$žю~ЊЧD ь WQqж /ъ а#зХ yт AД qЕ WyPХ $— цL‚– uQ%=џ| ћZ$(ы&:Lї!-(j -б{ š•' є\ Жђ ХY1YЦW2XсV;VFћ yР DG ш> ПJ Ї; з’ RЎQ R№R“RS+ xSжSЋPП9 J у ' † Н  › cXЋX?" " $' 8 $ щ Э' №& [ K*  s G :&?џCH7R Я Ф0BO ѓ#Pї cћ .yШ$žcзв ЙZ п§Я2№ ”ё eњ ѕA }hƒjўk9qCК ITŠd МшоKNaэГ WЙ >ьkc џы ы[–YF  jv ю жд бж Bж ž x Ћ ь ‡ж œ MAј fѕ Бі Ші Яё фћ Рї Гќ “уTb СUUщ RWЕXДKњ § Лѕ т§ йї Ќє ‘ќ 5ћ Шѓ œя :ў і Ні ѕ Nљ |ј Іё Мј Мћ iє јr‹ p ;„ %x V€ с  ЮЊ њŸ vЂ їЄ i– ь#чхbwЛУ 'Ы 3Л `Х 4Щ Ч (Я RМ ЌЩ яЬ лП N 2ђ iљњѓ ДL ( С. 3% П' Й/ ) s, , )q w!;ЊU˜Аб3Яˆ„ЂМ Ђ[ 9[ FY Y A\ o%­n Иx(б {\ VZ с] lз жз ›[ ЪZ И%W%І9уgё3ЊЫЎ` ‹HпЪ Щ] ?J 8 J] бy „ю >ђ ЇKЧT Є!СњШЮ BLН rО Ч!W!lенЭЖ"wwФ!§&.-T,žOѓ<ў:=š=щ*œз Ь=SТCbŽІQф?Jя э љ љђ з$‹7 P8 р8 Ф8 ќ7 9 9 \7 q8 ›Ф дФ hB N N ^ў bњ м$ч#C.L%e— L˜ B˜ ›у P&g] 4^ Y^ `^ mY Lm Cc c Е` ŸGHo Пq ђp xq ёw Бr Ws t Њu њt ™p }w Хo zp щq tv 5n 5p в р} Їz Œ Юљ ^b Јч п"z№ xћ <ѕ Іb Уж |ж бa А$фд  –a ƒЕ З г жћi!A!їе ОаX›Б#“в њw Š ˆ• гWk” е™ Eš Ќн rž ѕЌ sА дЈ А­ Тэ œyˆу Чт ` m d= :!и_Щ dб 8 Њ} V8] ŽGЉGК\ Sƒ О‚ Й‡ „ ћ† j† A… хƒ Wˆ Љƒ -‡ ђ‚ Н† ?„ ’` Q— aж ж cз Qз =д Cе +е ж ~е ƒе ёе [з ж iж ˆе е ‡MyЩ{Мѓџу§/ŸћџџџЂўџџџџџџџџџџџџџџџџчџџџчџџџѕџџ#џџџџџїџз§џџ§џ‡ўџџџџџџџџџoўџџџџџџџџџџџџџџњџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџяџЧ§ќџџџяџџџџџџџџџџџџњџџпџџзџџљџџџўџџџџџџџџџџџџџџџџ§Яџџх§џџџџџџџџџџџџџџџџџџџїџкўџџџџџ/љџџџџџяџOоСџџџџџџkџџџПўћџ—џgїџџџџџџџџџџПѓѓџџчџзпџџћџПџПџ>дџџџџџџчdўзМa"ў“|ј:“:2ёЬ`bѓ"јŸнƒћ-ЇРgwoМKз<џ| ьзўIВњдpM?>cG_Ы5JСџ$Vњ}РЇБљЙъœ!јПcљGVˆџŽІGр!яЗ0ŸЫНЁџ@љќХŸ$т&щПйсОў|НЭСOc\.ЖЭя[АцџЏY`№Ÿќ`НнЊ/šIГњџƒAœП ы§ф3^’џАѓa8јѓџѓDџ1џгwšvŽoПiПј~‘§ХяРœ§џb§Ѓџїˆ§=ѕ6јЇџa@фјџС3№џФ]єdё?.НЦЂœџŸ†ыЯЪџЧјтњ"ўcѓЧ!xчсџ)ўŒŸћ7 ѕё3и™ђБЬц?сџ–єЅŒљ7#ђџЂэмMиўDЫєЧсџ?ўѓгПу9зfспџ‡у@н@~№_{№Д+ ?ђ?­чџ б_јUЗў„ЉџŸВџ5ˆСзvџ3џh[ЯПа§ŠћџˆqцќљCёшQ†—3АџЇЯаƒ>ує Žшч?ѓЁс—рЧџдД”vИўТџљЯШђщџe&œЇї?аџхtГё?Р›xРƒяv>~CcИчpОwў9хнЏ’^_ ьуНљ›`Оyuхsє›qчЏў2Ѓбы“QЂwYш@ЩAmhђп„ Тџє6џˆОВрЗнРётхo7›7Тљп~!€і­+тсН9}2Лy•]іІаg<•юђLћ№ќрFхяGШcўйХЭž‡<ЬџžŽ\пuўЅкфџ|еGљc~t; ^gџ„Щ/ЖЮ'§ЧьџУ№п~ќЕd\žЌ6KŸZšХmHƒќ=H Гы/њЛi=ШŒНјwіФў_ˆOљЯњgT(€ў&Dц§Hі§ї9ѓњ{єФїљџ.&ю§љ1§:ш/§П_IСгѓу9рГ?љШЯ4~ў;тƒgћQ№ЗМD”?2јНёНGрю+\ўŸ ф}ЧчцFьзGx —іѓtіАеsžјџлчЧ <ўџЩ2ј>цуфCь~ОхЗOЧ{"№‘џ0џAџџМSBсўЫe]јC—^пхиƒџэЃ™уљ ŽЇ!Ц_‰СЯЅќУƒг?ђ№?тсичщџƒС\џpЏvњ тм˜џCўaЩўџѓЋ€ѓџќdЬфВ™<—xпу[ >СЯ€Sј>UФ?фл'nб<ЮќіЇнє…K6шјЙууžџЧКяRxЄў8žџ=єш3яжёaЅўкџ|ОjдЇџПKOзпЕ№:тџџwц3џџ‘tЮT§џЏъЬя љќџsўџ‡>q{соVzѓс§џ.:шџћ є‰ЏŸ†EŽћ(Ж?aњќџv0ŸџЏMœЯўНlЃ—_ўођџсџь@фŸўлaяшџџŽINџ'ѕ3yѕь?XR&м№Љ[ŽkŒN:ќЩі§ѕIUм3ряёџ –okEЎБќг>ќ Yз 9љЧG?8щџSЧўЏљM{ьk28Съ/ЖШў­§ч`тџќam­џџsНMџ~џeО4§ятўBвчџlА O§ПNўwР—ьѕрSŽ№Gќу_QЧЯ|љ]чЭЧўˆiєџ‘6FћџнЈУ?—§{‡ўC=Шў›ЮЯїo"ŒЃя=’їЯ~шsxљ§GO{jју†іѕ6x=”Сќ€а’Ђя{žиOšѓ;9њщSИфџtњќџO–ј{јqгйјKОЧбǘvџџУ Ёнџц§uСЙй|сEђџzп‰џ§Н4Ю ьјїK”ёџЛEз№ЧПёoVЛ{’џћ~цсSЭтсџђџЯ—яџЅќl^йјџџІіѓЯ=јE§ў9гоћрџЏ_љKoќџГуїСџссўЖф+п% oян<’Цќу-§G Оя о Mя(њЋoџ˜8šgь†OдWсhёОЋрЇчУ1а??Пєџ7џн{H`xЙН4'ђ‡ј'јіWУЬdЖХ…Пі>&рv'џ§Œюџј{џФOџоAњ•Іўа?Ф>”yј^Ы'пйп_љш1ОдПО‰H^H3ŽљхЫcуІі'Фžџ@љ‡јœџ@ ў?уFVsеž_ ПoЦзшУя\§уw…vCЯ§јХџќЃ{ќž?ѓ)і?јkўK??—C?ўў@ГШџдќz1s(Пž]ђїџ3N8уyрŸџ>ПЧ•хќЧПКЧ‘ђџwTЙйџ? њŸcЉџ"Œџ+ЇќзяCх§јџя юџ_‡џnќўYоџсXўџ™ёП“2ПчЛ|ю?вџ/ўџ<Яаџп4їЩпнъњ§џђЅ,њп„Зѓyђџ§ПqыЧќ/№п‚Хxѓш‰kЮONКмїЧ?(Й6овќАџщжџUў>l>џwЋЇ§!э5їSШјјХѕEwЃ~Ќ0џ–ƒќяўџрћIџ/ЯAъћН`џђdЇ6kў‡Iќџ§э=/ѕј‡ўрƒgНшЫџ†>Бў‹јOG~іџŽОњZрў(ўџхЯџфДGOл??пџ&џЯн^vђю3ічеЛЉžєќ|Ј5№Г>иџBz‹Эќџ ЄџћќКŸќяTжїYн“uЭ;№UŸџaпџЯсяˆўџєџ _OO~пзрvрёџуЙўxя=пџГQўя.жџћP“п‚ЧТ{[B„мБ!ЊўЫ_дџщуЭь`ДШљ?ж::њю Щѕ*§Џјg:јџ@–џ•џqљЯXc~ˆЮŸџ чщEјџVьMSпї.€пџдя/f<ў‹ŒЯ(Fђ?A{:Й”O?BяН„7g Fѕяџ‘П§ЧпT>бџяW`тšќŸѓџТЫџž5щŸAж\=уч‰§СГ›ѕƒ~љј`МЦ‘ъ™ШЫ‘Зцј‡›G@'ўS?ЙљТ юЅ2˜?ЄјЫ ї/4рzЯ*Мп˜ќќ?ˆђcїќёџgR$_žХaуџ;К?№ёђТсУчФпмtТЦуџъёј'э‹џ=ъўЖоњOј'ПоGћŸвЩџх†П>уlяНkДіnbWџyУуџgЧ|[’§џnџŸ№љ§џFџCПћю яјшžc ЕgєгЯbќЫџ‘ўJќп•ПDЭя;аWјоЧxЖМчЛд„ь|Хџ~аш“pіпЄb§п‡ТўЭ&@оO§В8яŒ#џџШљsžkћрCOіфћЋd§<gћkцž?ŸїДНћыVтПмр?ђџЊЦe>Й№AўМ>ђo‚ŒўЃ2$пўksѕg6q™п ьў‰РпЯ:>а%}МџHЮљЉ#№џ~[л7Ÿ?џ%LџЛ]?ѕ%О§o\Цќчєч™я]yCјџ9›В>TђcџFџпŸќ“_ўџHжџёB„Ў/ќ“QяŸ?<фњЗ4ZOГvя+/хчeтўoœџџяœ3ћљр_њЇў6lџ-шКѓš†љџK QќС[pv яіiптњ(ї рџCУџцФмџ=,єŠсъу/—O3я,–Јџ ‡џq!џпЁџјПdБ?ќШПЃUџћŒ(mѓџў?d^љџ~ыgєзwЉіsЊзwdёpcџзžІya„чљїIљOєЗ‡nˆќ3ќ}^fФяf™W_юОž7јЁј>џTЃљ’hуџ[аљШиџпŸЦчŸО1?чсMќћР?сўџs\žы|FGю=4љwaЇі‰K2јUlБџџћфтumrЅ§ћ‹gўђ?4ђ[4ђЇHy  P( 7ђ оQy Tя$yЄ >ђ “љ&yА+&y ЙPCђъ/`N0 EђЩ,yvCCђP (к.y0JђЦL EtMђ ќP6yƒ6y•7yі6ysN к;yJ"ž"Xђр‹†Yђ|&1 Vђ й'њCy [я-`”‚- :PIyЁ aђЌ2\gђ /4 ˆ POyА3 Htkђ Pй3 кSySynђ нQWy@vtђB cQC!H@&њay‹ayxCG кђ, LђХ/N 0hy )[ђ›HQ+ ky д Pmyi+N Ithy ]яpy йPqyMry syEŠђќLђ ЖP\M€ђ  љ’ђ`“ђ VйUњa"•ђ љ—ђS/~yъe)0e ўP›ђ‹i PtЁђ *so‹y(rє yyCŽyЇђА/ЊђДЊђ пQЌђHŒy Jя”y ­ђ .љ|  к}[L˜y  P˜y ЄPšyЉДђ LЖђ 3йyЖИђU…J0Зђ КPЛђ „ Jt‰ŸHЄyCПђП/Пђ кs 7Q кКђ *љЊy›Њy L{,њ“і “L”2Ўym+ЫђHБy RяГy \Эђ kйЮђ ZљЖyађрPГyŸlŸ 'кœy жђUНyˆ жђ- Ѕ*0РywCРy \Тy ЬPЉжђ Хyлђ ЙP­ o Pнђ LЏ&Lрђ $QфђД/зђ лsЈ NtЮyЕw ЖЂHЮy ЅPбy шђ )йюђnеyЅ+Ќ а. ёђќзy NяйyєРoСПкyкyВLФХ "Qљђ •љћђР№’‚уy1 ЪkуyCхyˆЈ‚ѓЯѓђPЯL0щyб4щy PѓЩLѓ ЛPѓ 6йжЃ ѓ sи]0д @. књл u Pѓ „QнЄHо Ftіy „њyBХyжy§yЯфƒѓžHцчЊ ц­z7 ѓџLы &Qь[zHzљ#ѓ/z Yя%ѓе%ѓјP z(ѓ™zZC)ѓ †sђyz+z PтyzzБџ№ЃHzU3ѓ­/[0L5ѓ йџ /к"zƒ Ÿ9ѓ Aљ  s P%z ?ѓ …s %QBѓЏ*zXC. Fѓѕ-zѕз Iѓ L0zќ+1z)KѓсP и. Nѓ}"z-z!г;z ъPWѓx/Uѓ ‡s("H)uDzVCGzGzbѓžJzP 11  QMz NcѓŸHgѓ* iѓ  s7ШRzд+9V0nѓћPoѓ?/pѓЁLnѓ Ј PNz „fѓ H. 6 кA t P? &кNz LяD*Lgѓ ?љvѓ OљGQHJ њLЅHfz_gz GPhz[C€ѓм‚ѓ ƒѓ0‚ѓ€/T‡ѓ —sVсqzОŒѓ €йY‹ ZUtz= uzљ+]<0‘ѓњP_ Rt_ 9к•ѓљ/e‚zsƒzWCƒz–Nѓ qй ѓ œs‡z–n)Lo r PЃѓб‰z „Єѓ XљzNt“uVHv$Јѓ ЃPЊѓ yA0Ћѓ­ѓ^/|ЏѓЉH~п Гѓ ›sx "кЕѓљP‚fz—NžzЅ … =QЖѓ &љЛѓХЂzа+НѓќLЄz „q)њ„*њЇz  №ŽŽЈzYCЉzЊzФѓ0/”•Р –NL—%0АzЩѓ šsЫѓ’Еz ЄPœ tЗz%N— Bкгѓ Дz Ћ№еѓјШѓ  љОzIІ БPкѓіPмѓу/оѓџLЋ1ХzQ рѓ ’Pпѓ  sЩz „А‰Ыz…А tуѓ jйЏ кЯz Њ№Ж70аzSаz}Pвz6К‰ гzI+жzšLпѓ xљЎ$њѓѓЊкz2 ТEУoїѓШљѓЈHЦLњѓ ј. Ф  кЩ ^QўѓѕPхzQNцz ЎPџѓI/џѓL§ѓ Ќsа0щz „ыz Є№з”Hйр к &Pѓz+м%ѕzюѕzJїz јz+ѕzмтє1 ф&0є—єiє/шщkшЂL{`NєŒ†є ю(єZLєˆрW#є8/ {Lѓ$єїPѕ bQє sї )єм qt{ „{{ {Ж§ 'P{Ž{ ВP{ы+1є (Y„1єl6є/;п Aк!є aя!{_N{ Ѕ№"{ І№є 8љ cH&{KC)є љBєšH(0œL*{АL,{О-{ \Cє @X„HєHє /2{ „Mє %s 4{8 Fє и.  к aQ9{o+RєO;{y"G={.>{[NTєŒ†" к7{ Љ№B{z#њD{ ЇP^є#Lќњ-лњdє‹/1˜LL{бgє. O{ECiє љ9;: НP; U{ =лHnє?N0Z{#N[{§uє2/]{wє &sW{ „F cQ`{n+< кI&T{ Ї№є ƒљ€єЦ=-њh{нLOP 2Ph{VNƒє˜„є€H‡є+/UИV•Lp{ЪXdHo{ICt{k u{\\›w{ŸŒє ŒєQ`й `T0|{ ГPcкє 9P™єЃ/€{ђ+{ NS nt{ „žє  sє }й єi P‡{е‡{ "\oC‰{HCq3HŒ{UNЁє$LŽ{ЉєŠ{ж‘{уLx“LЊє yQzW Ќє•/­єLl otВє^O кl 8кw{ Ё№‚'‚ 0”{ Ђ№…=… ш. Ќє љˆ Мє sˆ utЅ{ЖПє0Œ†СєŽrŽ §PЉ{N‘=0Ћ{Ћ{)+” Ў{ БPОє  йБ{о • 5кГ{щЮє0 ›{œL вє sБ{ №дє zQТє uљжєџ/Н{ НPО{]Nйє€Ѕ mtS(. Т{ ]ˆ> Ф{ DЋЁЌP0Ф{#Lоє +њБ(Z†чєГ/Ю{/ Я{9шє~б{Dшє ‘sг{К… Л]ШNEКJз{0и{&Nюєб{ …СfТ/СFHТЅLХ Tƒр{Dјє qQШ(ќє  sф{жх{ ЈPц{ш+ц{рLЮ!ч{TNџєѓбсв8A? ь{пдsѕлH№{ ]з 0ё{š ѕ"Lк0ѕ{; ѕн8 о0O„о—Lр)п P ѕ xQѕ№ѕZ/џ{+ц"ц90ѕ Еsщр*pъръ Uьt|B|+NѕІѕ?ёnHђ1 |s |Ѓѕ,|*N| ]ј*| РP| ЊP'ѕЙ/*ѕ0ѕ Дsў7п ttšL PHX†|[Џ |сL|XN9ѕ—/љ wtр{ …ыє й?ѕt ѕ (й&ѕ й<ѕ —йCѕП+|жEѕ№L.|.|L+Fѕ PIѕN/Jѕ/ 3|Њ3|_ Mѕ PLѕзH L u9|ZNPѕ Q xtї !к %к&2Л 0кB|  ]C| ­PШ 1кж ?к,gF|тL- vtI|H I|ь | œ№fѕ ‘йgѕ  sг{ ž№5Ц 6O|Ciѕ iѕ!lѕЛ/;c;1H< PW|U+Y|{Y|sX|WNBŸL]|€6 к§{ Ÿ№E| Ј№{ѕ Cйѕ љc|‰ яє "љe| ТPLЫJѕ /љNŠ N+‚ѕ ДQh| Ѓ№sѕ YљS+T}‡ѕ› Lp| ]ˆѕ ‰ѕОŠѕ ќ PZvѕ Єs\  Pv| NѕЮPy|d+`:‘ѕQѕ }љ`њ~|‰ef3g<f2H|jžLƒ|^Nl,| ЋPnf nXX†…|‡ †|8Dr~Š|іL|ŸѕжHЂѕ—ƒЂѕœxwy PЄѕ) Љѕв/Ћѕ`Œ†—|<+~;Ѕѕ ЙQВѕЃ LАѕ ЃsЖѕЇЖѕ џ P„4Иѕo  |… |YNˆ–LЂ|иŠ-Š80ŒHІ|pLŽїЈ| a„Ћ| ]Чѕ Чѕ=/Хѕ КQ| *…ЫѕЦt кГ| СP„|  №›| ­№Лѕ љЗ| ЌPИ|r+ŸWŸМ И|:DЛ|NЃQ0М|щLиѕЃ/дѕ ІsС|u бѕ EйУ|БоѕЂ LХ|mрѕ2 рѕPЎЁLШ|АШ|\Nфѕ Pхѕfчѕя ЕЖˆа|в|FDшѕ ыѕg/ъѕ ИQЊ }tёѕ’чѕ ‚йѓѕ˜к|щл|aЕ кУ Ћ Pо|+јѕкHњѕ Ѕsн| №Ша у|` Ъ0§ѕT/ќѕ Pч|NЮ6ЯШ ƒtт| 8…і гяд0еxўѕ ;йё|F іЄ LйЃLкxHл є|зі|}о0пžї|Йі|V Lњ| ЏPі/іl іPіоч 0і &Q}+іМџ| № і Ёsэк !і ь „t№;0ь +к } !№М| Ќ№і  љѕИY†)і/ўѕ Wљбѕ rљљ]-іR’њ* њ}Е1іI 1іŸ L1і ЗQ™L}v}Y L<}>}9+8і ™ P9іm M 5 UH$}Ф я$}Я Bі ЂsE:0  !`€  PGі /}]JіиH1} АPJіP3}qW 4};DLіЇ/1і 9йRі  к:}ыL:}ЛN<}GWі \Q>}  YіЙZіa' …t(ш(0)ЄL+>H]іУ/G}A+\іЁ LI}к`іФbі# Tі :йџ *кhі Їs1 6кjі­PQ}D8€S}рT}Z L;a;+ W}ОN>yX}ЌY}Ў AB0nі/]}+D=uіnoі 8й{іzH2} №J6Kйd} ^M”Lg} ЉPi}ПNPіpŒ†l}Wі‚і U>і  PŠі $йP )к!} №Žі  L[ Ь Pі  sX} 8№†і <љ_R0tі Dљ{}Nbі Uљ}}O˜іыP}O}+™ійH5і {љЭњ њk›Llˆ і  і0o(‰}2D‹}LrŒ}— t }‚}§wxzІі˜Œ†Љі“Њі|Y—} fP~EЌі№™F Ўі P›}N‚0ВіšF „>Ÿ}ЕГі Ё}˜Еіђ/‰ Ы PŠ7‹еLŒіЇ} Ї}‰Иі„ ‰Иіž LЌ}i+Иі œQЛіъPЎі Єs–‚Фі sЬі ™ЮіЎˆ} .…œ{З}СLГ} A…гіšF Ёі zйШі ŠйЂFзіпЄѓО}ЬР}K+йі@ Ј?лі <йоіАPоі рPЦ}mЧ}ЉЎ8тіё/ті НsБЌ хі ЁQЫ} B…ДСщіLъіHЗ(0в}7Dг}ŸК9е}Nж}! ёі( ёі8ѓі}ђіБі йЌ кУ7о}Ћ+јі Оsр}Xс} @…Ž $кТ =кр}  №‰} №ї YйЊ} №Ні  љї šF ъ}YЃі 4љь}lзі |љїa/ ї› о#њё} š№и0йВкИ ї ŸQ ї KљO.њ4ћп мPрŠљ}; тCњ}Џћ}4Dџ}:цƒќ}#Nш~t~вLїo/ьGь)H~з+їїP ~€ђ@їYL$їЭ(ї юs*їЧ/~ …јbї @йњKх 7к~ •№ї @љ1ї Sљ~6D3їt5їHšF шY†'08ї  Q~ ~$N;їс <їXšF #~ ^3ї >й@їNH'~AїP)~ў DїeLџ 3кFї Hs?ї #љHї ЇP/~].~ ”№s"ћ2~;3~оLMї/OїЩ/2Pї Mй 2кDKћ [;~5DVї†=~ž+Uї Œљ Sћ#VћюaћB~%NC~Ж \ї  ЖcћaїБP.‚ /0H~\1 I~.K~  ^cїї5 xнƒjїdL1 #кlї йS~ “№nїЄX~Ž?$Y~ (PB(\~;^~Ќ+_~LDFнHzї *Qd~ПLd~&Nf~T M§NЂLh~HP† Q`g~ ^~їХPƒїь ‡ї ЊPp~&W‹Šї/ї t~PDї„їcL]„w~мL’ї (Q”ї/Žї пsbH0cHT Stb кx~ ’№•ї Lљh:iA‚~П[`@‚Ёї ˆ~EoŒˆ~"N‹~ODr`s3 ˆ~ ^u…ЂїD/Ії )QЋї{ “~5 “~{I“~Ф+­ї Ўї~p Xt€ТB0Зї\LЖїЗP…'Кї~/‡ Зї оsІї йОїEЅ~RDЄ~ …@Z†Љ~Тї –QЋ~“Ћ~ ^­~ЇL”~HЏ~ЃЦї ЌPЫї/В~#+Рї йЮї Юї lйЖ~щ œ Yt“  кw кК~фЁE дїYЛ~ …ž~ №П~KDйїgLйї љЈJнїu/ої]Х~лLмїКPрї TйШ~ ^тїxšF уї sЫ~ВчїqшїˆšF Ќ  кФ~ ‘№Чї 5љИйв~К д~мв~*+ж~;д~ (Pи~QDюї яї“/К `tИї JљУ @кјїšјї_Lёї tљХћЎ3ћ€fћўїџї ЋPј˜šF ўї ?Qј Юsч~ ]…јЛPг7дY0ю~жЩHё~Ж+и йѓ~NDлцмў ј[ј~žLљ~\ј~ ^е ytј hй§~‘ю~ ˜№х кNјАјKј^Lј дs ^…ыћю“ ˆ  ™№"ј )љ'ј >Qє)јаšF (ј 5йї•иL,ј–њ†Ш+/јрšF 0јМP-ј вsPЪH5јб €NJ:јЎ/"8"MD>ј%  _… CAј й% –№Cј гs<ј 9љћ”GјbL tEJј ,QKјO/Ž5%Pј Nљљ Qг7{+9\;z Qј §P$KUј%PYј6Zј…Yј бs? `…*jD Ў P`ј" aјXмF .ШHHнLQј й10 ˜Œ„gјhмF gј6/C —№-@ћ7і 9q:!mјЉ oјOoј sXє ?_sјfLqј 0йvј еQ]Œ]Nxјy/C-ћaОHII•c(…‚eР+LI0}ј“K ŠtOPО jl^ l )^‡ј МPURo ‰ј ‰јГY:‹ј{/[Lu,L‘јмF ј Чs[  лb №a–јХcH~  qP—ј мF šј`L›јќ/i/j3и6–ј иQl>0јC ˆj+ˆ (^ЁјАмF Єј Œgsn  Ѕј” PvЛЃј Цsk ‘tŸј . Ўј/•еLЎј йQ}Š  № x6ƒ— Ы№|ј љœ ‘ј љ€ћЙј ШsbNћЛјTˆ–ЂH Ѓ.+ЄuЅшNІљŽŽ0НјaLПјРмF Ќ8…‚ПјЗ/”SЏ &^СјХјамF ˜˜ Хј›šMЫјЌ Эј 2sŠ tЯј ZйГ Х№ ZЛ ь PК …НgНH…‚зјѕ/ијЛЂ лЈ ’tМј љЊLбј љЌpсј]L’ћЩˆU†ЪкЫ;+Ѕ0ћЭпLчјi/Я #^аныј sыј ШŒ‚ЙйЙ 1Л гыNзаU†эјьюј }Qяј ѕј–Л  ла Ц№Ф0јј/ЙYћќј 7љЪ#фхИ+љ sљJЬ и‹„ъ Щ№љ =йЯћэ жNё’ёЇйH љ л!HѕXїLѕ '^пНњšљ Qљэ/уˆ‚љ sљ ˆйцє€эNљ ”љъ ЈŒ„эž!љ8€ Ъ№$љрмF ђи8ƒѓ—€ "^€ћ іS0€зLјXљ‘(љл*љ№мF € щP+љ+ +љбџ[џ0љ@ 1љh/.љ ‡Q3љL:љ[0љ s"€ #€7 ,"€Ю+  —t'€ %^(€Ё CљW/*љ Rй;уCљ •йHљ ˆQIљ s0€ьNK0 UP2€„LљнF Oљ[6€MOљH8€ARљ} 6€ m…!0UљнF WљцL л% &??€L?€  ^C€`+]љH/E€у ,ˆ_O F€і.Ф`љ †QJ€ юP^љ 3s23Tdљiљ˜‚ л€ Ч№2€ Ш№9Nmљƒ/mљ ƒV€ №Nљ љX€Й?Ÿtљњ >  л\€кLwљOD ЎVE˜_€ ^a€юNH*b€x J K\xљ^g€Эwљ ‚Qљ;/€љ6 QURл Rвk€бU10|љ sW b€ …†љ pйt€X+љ \^]™v€Šљ\z€А {€Ѕ{€ ьPc]‘љ\/љ „Q’љ s›љ5 hЁ iV„€ $^”љ !й] Ž„”љ Iљeљ ~љoЁЂљ љЅљ@ L& ћЇљ OйŽ€јuš€$wаЈљ s“€‚Lzў {^Џљ ƒQ} -P=ш> PAћДљ W‚ Vœ€жLЗљ{Ÿ€/+†‡GЁ€ !^ЗљЬŠO0ИљHКљ@Ољ_/Сљ  sЉ€ыu†+ Ќ€ v№Ў€ДШљŒ Щљ Б€ эPЩљ …QЬљdPЮљj/Юљ? LЮљ йЗ€ }…˜ ћЙ€YЁ0ЃЃ  VР€ •Pкљ !sЉEЉЋ„ ЊЋ ьPУ€ZШ€6LсљЬтљ`ВŠуљ4 Ю€яNЯ€‹цљm/б€f в€(+щљ| сљ žйЛ ,Pе€Dяљ 6sЉ  мП Vк€йLфљ љТ0іљ/Ж,ћљљDр€™љљA LШЉШMќљ ŸйЫ  њ hQњЕ ЮЂЯ ”tњмЯ мс€ ˆ№э€ №Pд›едњѓ/ё€п ё€Я њ 0sкfЯTћї€Dр_уPў€ў€­+цXњЄџ€ {…њ йЌњ љьэ: ьK Ÿ P№C0 L E^!ња#њH'њ і  Pї(њY љ/(њ ТQ“ њ /sє ™tю мџ Џ PP.D5њН›6њ 1s6њ œй r№"{L ж$†?њЦ П% |…АнWCњ–Dњ LQEњљ/1њ pљіBћ JњбL1 н P2'Lњ Jњ 2s%PњМP štRњ „й9Ч+:M :!D7 o№ ћ@y),]њы E†, пPH|bњ sJ‰Ldњ/eњ йM z…bњ „љ8 тWrњF/Y c№ZRZ&DB\ о P^ц xњFЃ aџb?+C •tJб~њ рQ€њ нsB . hL?7ћ„њАƒ…њБ…њЋ/m …TIћX оPYЊt Œњ[ L\c] _V‘њœ_Ѓ”њa0|"D—њU/~‚+eœ€ЗšњgP–њ мsњ _йj —Pkg† O^‡ п Pz ~№‰ŒLЁq`qЈo “tЅњ (. –њ Tљl`ћwYx<Ќњ /sЏњ}Ћ—Б € .  |VЕњƒЄ[+…О ŸgЁ%DЗњ` L‰hЛњЛњlОњ? Ї_‚РњŽ/aСњЋ M^Œ  м­LЧњ9•д–Л– ‘PВ р PЪњ s• –tА …› €№Ъњ Bљгњд/К>Л k№УŽLФЁЋ§ЋU0ЧŸ+ЧDсњ sЉ8ћЫњ Эhчњшњ^ Lа L^ЗИ ьњe ККюњ -PМlLб !…ђњ™/П ›tєњ—Н мм˜јњзсŽ т с Pћњ sЪM ШJћц+LЭZ0шЅћБ/ћ \йыЪы i№яw+яD ћиp…ѓ N^ћ Pі "…нКјo јЃћл сЌћуy фHћa Lћ [sчЅћ'‚VLћ .Pћ aй‚Ээœо  м#ћЯя žt ‚Dђ0ћ 6љ'ћ =љч+ћі№L*ћŸ/‚=+ћч ‚ т P‚‹+/ћ‚  …2ћ _s-ћ bйї hƒ5ћX‚ w№7ћXД‚‚|  j  Н ‚j O:ћ_ L<ћ`/5ћ љ е'‚ЧBћ aP)‚j*‚ DEћ ^sFћ 4й-‚ K^ 9ћ A (H tKћ wљMћиPNћn/ Њ i L ш7/ 9‚юLPћ  Xћ" b<‚Ъ+>‚% Vћb& š A‚8( o[ћ -sD‚ у P+ H`ћ‘/Vћ wй% Ш. I‚4I‚$DK‚Ћcћ Nй@‚ l№4 (N‚ P^Q‚=+8 U9 EћpћAW‚кLrћЙ/? T? œt> м^‚Ђ E ­E Lyћ єsxћ —љc‚Ѓc‚ †K ІK X0f‚'Ng‚(Di‚ {№„ћQ jl‚Њ†ћ T Xƒ‰ћєLo‚  †W c‹ћ‘PŒћ q Pt‚ ф P] Ў] Ѕ_ ~ _ ^Py‚+b кHc Їc oV˜ћW˜ћЭ/šћ}‚  †i kšћ X?0 †‚#Dˆ‚[o БЂћп ‹‚В r L‹‚ †Ž‚,‚~‚bNЋћ./“‚б L­ћ { ћ| }| 9Вћ t H Дћ ѕPЕћ/‚ ^VЖћм„ &ЗћЧ~ †t˜‚ †Мћc/Мћ љЅ‚ х PІ‚€  дЇ‚bУћ Њ‚ƒ+‘ лHЋ‚'DФћуL”  1Џ‚fNХћ vйŒ €. Ѕ‚ y№™ N Эћ/ ћœ L dŸ _  1Ÿ  нЂ Ѓ lМ‚джћІ eVлћё лћŒЉ ЏУ‚ІО‚ ‡дћ ‚љ­ mPЩ‚Щ‚* Б OВ 1Ы‚пЫ‚hNфћ hPа‚]+б‚Dчћ3Й HPYыћ†е‚ ю PыћфLфћ ŒйЭ‚ h№С њLм‚$WТ ћјћd/љћ gйўћrЬ Bш‚  Pќ а mы‚ь‚gNќ kPќ. я‚ж nз 4и AH№‚+ѓ‚’ ќfм ЈќШо sPќE/њ‚‰ќ 2tг  uм . ў‚ ђ‚ ‡ ќ Uйі‚ ‚№ш ќLщ  1ƒ ё Pќ–ќ­L ќ mPќ -tь  u№ V$ќ  ƒeN ƒт(ќк/ќ …љі zVї oƒ%+,ќј  uћ )*ќ Kй§ *ј Mћџ џ V ƒЫв dћƒ№ :ќ pP;ќ uй>ќ At u /ћEќ/ 9-ƒ‰-ƒ я PFќ  tP їL0ƒ }‡Iќ CљNќс 6ƒФ+Rќ  ЬVќъWќЖVќ/$ )ћ[ќ 2љDƒч Eƒ N_ќ oPGƒСJƒ2 ѓ hќќ/6 dSƒ ‡Tƒ f№Uƒ†UƒEpќД > љLsќQ<  нA оuќжL]ƒ № P^ƒЈ+E  F  1G vPxќЯ/I J V J fVzќgƒlzќ{‚ќ nPP (jƒWDќ "tS `mƒр ˆќЬ/R  u]ƒ ~‡ˆќ Jйwќ !љZ нV *ћќџ ‘ќ љyƒ‘{ƒ+{ƒ.N|ƒ …№™ќ Sйf єL›ќJi l ]n {Vn нŠƒэЅќЫ/Єќ 4tƒ щ Pt uPЉќ љPq 9uw ЏЋќЋќЗЈќ vљ{ –ƒ  ‡БќЉ L~ ‰ 6 ˜ƒs ˜ƒ&˜ƒ ­Pƒ/Nžƒ^DГќ ŽйКќp/‡ %Ёƒ=ЃƒRŠ нЅƒ)Рќ iйЇƒ X^žƒ ‡№ 1ФќЉƒ  ‡’ jV“ LЎƒ‹ Чќ !t‰ [ћ— +— =Вƒ;š  Вƒq+ЬќeЭќ™ Иƒ`DЭќ lP  rPеќЮ/Ђ uзќKбќ sййќЎ LРƒ ъ PСƒNž ˆGƒУƒ [^Њ 3Тƒ †№рќ Bйзќ VљЅ bћБ ]Vхќ #tГ Є Д јLЕ <Юƒ [†чќћ/вƒNъќsдƒ ЭPеƒ„ ыќ ёќ SPГ uйƒ>+Й нС 'ћоƒpХ 1рƒ }^сƒdјќє Щ +љќ /Ы Ы Ы qPчƒ_Dўќд§§Ž§ 9tЬ %u§Ќ Lюƒ–+е ~Vяƒ ы Pз Тђƒдй %єƒp л іLѕƒю §H §C/§ њƒ)§p хƒ  ‡§ƒјќ  й§ DйЯ  нч Ыч uчƒ ƒ№ъ   § љь —!§ $t§ ;љс hћ$§:)§ qљ„+ї pPљ PЁ‚/§h „d0§ў Vџ „дN„ W^„20§m Ь 1 2 „л„ ч P1§Џ L %„б 8§Јј; з 2 ѓL>§†+„‰+@§@0?§  PC§ 8Q/„М?§ :t /u„ ‡0§ ?й Т  2 +uG§ Aйџ нS§­ L н;„ №" €V„ „№$ P% €Ё‚>„л ' LX§Й [§€H]§ 0]§ 0t, №VT - ga§3?„ ‡J„S+T§ MљL„g§БN„ P5 u6 $LP„шƒQ„ ш Pk§W0m§f§ xJ„p§  P3  нf§ -љ?  ћ*  ћA XA  V[„Ё ]„ <‡E E WT y§ /Q{§ Ctc„еNF нK )|§ Pљ ћN ќ !ћj„ыQ ўLP 7um„7+‡§ 0‰§НS (ћW ШЊƒW  §J ާƒH[ н\  ާ 3љz„ ^•§M0€„ѕ €„ ь P‚„iD§j 1j Bh 'uЁ§ 0Qˆ„ ‰„+Ђ§LЃ§ŸЄ§  P‹„ H№t ™u "Lr ZћЋ§ QљЌ§ Dt­§ay 0.  cД§Ћ   вP u† #ћ‰ ъ Ѓ„Я Ѓ„ЯН§wHЇ„ЖЈ„DЉ„t+ rP• џL• ТV— I˜ !В„NЩ§ 1Q› АЯ§РTƒЗ„ э Pв§D0Ÿ *š 3uЛ„ =PЯ§ ,љЂ :ћи§Ѓл§  Pм§€G0 Ф„ Ф„ž+о§Пс§  Ў  т§ љЪ„ k^х§фА )uГ ZЭ„ДЕ ЁPа„ a№в„ЃDИ 4ћю§ .QЛ РVж„РNя§?0ѓ§xHл„У LФ ї§CPї§ sљЧ B т„> у„ ц Pх„a+Ь uЬ ћўФLЯ :щ„ЁDы„Дв љв ож ф№„c№„ o^ ў# ў ўаTƒў ШPт  ў{Hўžц …Z …ђ…ЇDш 5uы ћL…+…рш о"ў [љ … … фPђ < $ўN)ўЯ і Е…ј СVј ћ.ўсћ … l^0ў LQў  о… 5№ (u9ў€H9ў mй:ў  љ"…<ўяL F ћ  '… [P ў §L ƒH „P+… -…№.…/ .…ш+GўwGўŠ PKўœ яKў Q uPў zљ ˜ # &ћYўТ@… r^A…  ‡\ўyL+ F…7- G. 8_ўxHJ…Щ J…ШNL…:+/ 4uM… /№5 Ѓ6 Llў#T…эpўћ = Z W…~? P@ иЁ‚pў0B HrўЃuў еQE УVyў PG іb… зPC *uB ћў=€ўE0h…П h… m^‚ў}Hk…”R Кm… ЯPn…Ј+„ўsLƒў -кX \ Y *t…#[ DўјTƒw…'^ Гў7”ў йQ•ў њP\ uc c ѕL~…ЪNu… Q‡… C№_ р„ў кžў|HЂўwLЇўrPЈўМu 6uz DЏў њ–…э˜…ь Є€ l €WT ›…/˜… кPГўуДў иQЕў;Ё…1Ё… s^ЕўŽ PКў НўD ЛўH‹ -uŽ зЈ…ё  гLЋ…и_‚Ќ…ЩNЉ… ,P” *PТў20УўvLЛў @ƒŠ xWЇ… B№Уў ˆƒ… ћœ GH  V  eћжўЄ uйў~HЈ  Ф…Ф Ц…щрўUƒЎ рўЂЪ… лPхў ћPГ ’ Г #Я… n^чўxLб… +№И 6PН :uй…pDк… -PП ;ћп…ЁЦ wЧ ,Pр…‡ т…7Ъ <у…J+љў0џH Ю 0џxџHџ2џ iQг &u џš џ$0ж пђ…mD џ њк ’ Lѕ…ЙџPї… хPј… p^н Uћњ… P№џ.ў…-Lџ…> ц 6 ц чHц +Pч ЂVь " џ~"џЮ #џ1H"џ >к †я †‡D † .Pѓ u!џ њ*џЯL&џ  ^††ƒ+,џТя  ћ Œ†Г6џ_07џ oQ† q^9џ  к!† ЖP $ћ=џх 0u?џ0 О 6 3 \&†I+† iPEџ“ ŸV.†а  ъH.† +.††D2†  пNџвL#† Q№ $uQџ 1tAџ  .  39† Uџ 4кVџ(UƒYџ8Uƒ'  L[џ Œ P) а * F† LG† bџHUƒcџŸ cџHK†Ё+K† @№gџ nQN†…D4 u4 ћ7 T8 ­Vlџ %tX†DC 8xџRyџ %њF ыHa†<zџ кI > G пH 1ћL МL .u‚џ Pƒџj†  ‡k†х+S bn†DU ‘ˆџq†ьr†є Y ‹Ps†їŽџ  кџ њx†žLz† J№a ,ud Lћ™џ mQšџю ™џ 'tœџ’Li  i oP††Ь‡†И+Ёџt‰† ^Ѓџ1HЄџor ч †6† -P†E Љџѓކ K‡z z{ u| bz 6ћ эH™†jD™† ЮP›†ЎLƒ ŽPЕџhUƒЖџЩ  †&‡ Йџ OtЄ†"+Рџ"І† L‡Ž ­† L№Шџ ЈŽ„• 8uЫџЬџ ‰ PГ†dД†MЫџ lQ™ п ‚VЗ†УЙ†oD  @Ђ‚  ЕбџН† ‡дџ Р_O йџ Gtœ .ћЊ Ž Ф†ЅLЌ 1u­ 5Ў %LЧ† x^А Ы† сџ^ Г ьHсџЮфџ*Д FћыџБв†ј г†+ж†ˆDН 2uк† ,Pл† ЭPм†`н†­їџЙPХ ƒVљџ кћџ KtУ пЩ )§џ ‡ Pўџ —QЬ Ё Ь iш†?н† M№ъ†^Lєџ њв  г €uю† z^я†p ж .ё†NЩ gћѓ†Я+ѓ†nDм HHі†'с œLт у ф dPќ†ЉLћ† ‡ц Wћ‡X ю „‡~ѓ ‰V‡ѕ ‡ 7№і [ ‡lDј Ој  љ \P‡ эPќ $L‡ y^љ ћ‡ N‡+‡рL‡aN Œ%‡_ uи -‡DЭ-‡ ‡ћ3‡Р3‡е4‡ЂL  пUL9‡F+  ‰ P9‡ ‡^%C% VA‡ 1№D‡ ЋP.H‡ŒD0о I‡ 1%ћ33327&R‡ …^:  пW‡p+Y‡ЊLZ‡cAТA _P]‡ m‡H ‘ Pb‡{J  c‡иLJf‡• d‡ŠDO2ћP9l‡јm‡ Г PVсLq‡ 3№s‡ †^_ V`2y‡Д+~‡›Deˆ €‡БLg%€‡ шPi _u‡ p‡…‡Є l6mZn  PgћŒ‡є’‡Њ•‡ ^|ыL{ u~52€5ћ‡ЄL‡ q‡… `P‡'Ё‡п Ѓ‡Щ‹:Ї‡‰DЈ‡ S№Љ‡ щP‘  P’О” пЏ‡ „^”ћœ? З‡2ž VЙ‡ ‡К‡Ў+ЃъLН‡Ц Н‡уІMС‡іР‡ЇLЎ›Ш‡“DЪ‡оЏ пВЬ‡ЁБ ћб‡ ъPг‡j ЛМ шVОШ2†й‡яй‡ ‰^к‡ V№н‡ -‡ФЮ Ф Ž PЦлр‡%Lт‡•Dс‡ GPф‡Л+Ыи2†ЬьLш‡“ д bPє‡;і‡ 3Pљ‡ 1‡р њ‡’Dќ‡ Š^§‡Žў‡-ў‡ЌLц Auш пьчLэ4 ˆ3ѓ0ќѕ^ˆ—ˆ+ˆšDˆ 2‡ћ!ћ Œ Pˆх  ˆ5"ˆЋL$ˆ Œ^&ˆв )ˆ MP BuщL-ˆи.ˆ  P)ˆ 3‡Љ  eP4ˆ‹D5ˆ9 ;ˆ’+?ˆ 0‡Cˆ@G0 *+д*PDˆV.Ў/ aP- пKˆЁL-/ќ3 Nˆe Oˆ™D6  PWˆ  ‡Xˆ -№?хLYˆ+B @u^ˆ ^FќKС fˆоP пTSnˆ—Doˆ JPW#qˆLsˆNYќ[ jPaцL|ˆ ˆ^e hќƒˆѓ+…ˆ ^‡†ˆy ŠˆŒ‹ˆ­Lp ?us#sIt пˆ˜Dwц y TP} ’ P~ќšˆ 9№„ЅŸˆh†2†эLЃˆkЄˆл+Œ>HrІˆ b‡Ћˆ‚“ ЎˆDВˆ ‹^Гˆ LPЕˆі œќчЗˆЃLŸPЌ‚ >uЅiІщПˆыЈ Ј2Њ PУˆЌ+Уˆ a‡ШˆžDЩˆќАшLЪˆЙ Щˆ W№ГќЕаˆ Ž^вˆЏLЛлˆ4Т псˆ c‡Ш‹тˆŸDфˆWшˆO+аэˆюдP ефLжз)жœHѕˆ• м%ќћˆ^ћˆХL§ˆ4с пхXџˆŽDч $P‰ KP‰>N‰ >^‰ ;№їV‰ІLњ  P‰T+ќtџ2џ?H’L‰э‰Щ‰  * ‰'‰‘D‰EN u  п шЈ_‚)‰ќB5‰DN  юV6‰ >№ H!е;‰D<‰Ž+#  п% HC‰, иP,  PF‰( F‰АL0œH‰ыI‰iH‰NQ‰CNS‰џT‰–D;J=` ? яVY‰ёC˜L]‰ NP_‰†EќGa‰P+b‰ K—e‰BNf‰—M пk‰*LRŸ k‰ Y№T“n‰”DX32w‰ANx‰I{‰ b6{‰ud ќi  Pm №Vq—LrPsvH‹‰DމЃLv•v iP‰Ns п–‰’… 0€ќœ‰Е+‰G œ‰ `№ŠCЄ‰UЄ‰Ї‰ бPЈ‰œD“Шƒ‚”­‰ЈLА‰—ёL™ ьVЕ‰8 œІ $P  jP #ќЄщ Ї пЈНЉRЉ:Х‰ЄЩ‰+Ы‰DЭ‰ [№Ю‰eLЮ‰аNЙ ЋPж‰ТН-Р Tuо‰3LХqHп‰y Ц пт‰цЩ эVу‰/ЫЫ Шќв2э‰H№‰œ+зЊ Lї‰ЊDї‰ IPсђџ‰ Z№ц пŠ=ш NuъёŠ'ъ$ќ ŠО+ ŠбNєrHŠЈDі N PŠјјј ыVњqŠ -^ќЅ§CŠ…LГ L ЫP%Š д 'ŠЎD  OuРЌ‚f)Šš+*ŠŠ *Š( ќc1Š ^№4Š JP5Š 6ŠƒLpHрNƒ:Š 9^ќ' п( O P( ъV+=+-:,В LEŠыEŠ+LŠуMŠ15ќ82SŠ$ 8 Su=г YŠ‚L`Š :^aŠ _№bŠщ+IjdŠ<gŠЫNN:HPќQQkŠЂT12T P PVБ LX щVsŠ PZ„[$] ќPwŠе |Š1L}ŠN~Šђ}Š 7^Šd+ŠFg PukФnќ‹Š„L‹Š d PŽŠ F’Š ]№yђ“А–Šу˜ŠН™Š <^€н €v M Pƒ­ LžŠћ ‰ ЩPŠќ‹”’{H­Š‡“ RuЏŠ qPВŠчL™HДŠ€+›42ЖŠ#œ рИŠŸ:МŠ˜ Ѓ  ЄFМŠ =^ЄќЊД LФŠ \№ЬŠлLЭŠWЕЫЯŠ*+ЯŠ„NаŠ pPгŠЎИ ƒМ S PОHО VСќмŠ` У оŠэХЦ"2Ф QuШ­Ы хPЮЎ LбюŠп+яŠ lPзTй~ ѕŠіŠ №нxїŠ ЩPјŠІќŠц LўŠƒNцц~H‹/‹ю Uu№  рђ ‹+ і эPјА Lљј Q P‹ №ќu‹ шP‹а+} ‹‰‹ъ L р"‹0ќ'‹ H. (‹У,‹7 ‹ VuH3‹ P4‹ щP2# ьP$pOƒ( /V)Џ L*=+z C‹щ L.#0 R PK‹Л M‹ :PP‹Щ+7027 P> :!V‹NW‹ #№[‹_]‹рF‚Hb‹ ЪPN 0VO3Pџh‹RLi‹зTZT U=T ыPk‹ы Lo‹#+Z)2Z T PT7ќ|‹‹riщƒ‹  lƒHnqks{ tZŽ‹ P‹‹1+s8ќ”‹”‹мN| 2{ Yu~€L† FP‡ рˆhЃ‹ J P ‹ )№ ђP`Ž„р ”„HЎ‹h+Б‹˜/2› ВVЖ‹ЈЖ‹Л Ж‹ЛLŸ щPЙ‹ їPž рЂPЃxw. Ћ рГ— Э‹Џ+г‹нNе‹ЌМк‹ I PУOн‹ћХ рЧ OPЩ€HЫ)ќЭ PЮgш‹ŽLь‹ №э‹д рё‹ЇиЪ н §‹ ў‹>+џ‹ц %Vч6ш-ч vPŒEŒ!Lь рŒ ŠPя шP№ю ŒŒ KPі˜w. ŒШћcћ§ иƒŒNŒЗ+ 'VHŒ  № Œ @ .&Œ В№(ŒЈќm р ц Ў<Œ # P$Шw. =Œ3:Œ ŒP'&ќ)C*]EŒZ+IŒ ЬP17 1 рOŒ.7аRŒ9N9)HQŒ Й№XŒLE ъPFF`Œo+G'ќgŒЏP`QпkŒfmŒ JlU]U'2oŒІ rŒNpŒ PtŒџvŒ3F]  р_*HzŒ Т№{Œz+dNќhi Pjиtu (V’Œc “ŒPG„y ux р|a №. €иšŒB+ƒ-ќ†–L ŒЯL Œ Н№Š+HŠ Р. ІŒ ˆPЇŒ^ ЉŒџЊŒрN• kuБŒ  l˜™hw…šx š  Pœ]ВŒ№+ЗŒёИŒ Џ№š,ќЄ~Ў )VЪŒ+Г ДvД "PЮŒ ЯŒоК2КfМгLжŒ жŒ @lП  реŒ П№Т  PрŒUрŒ PШтŒL LуŒсNЦ.ќцŒ+ЯX в ряŒЛ йФїŒ€їŒ†јŒ М№оИŽ„сшLт рщ  vъЖ =F№  P Џ+ Q Lє§ Clн ‹P‘„5  С№ўPŽ„žH`пL"N %И  P( F qu2/ю+1ќ 3 l5O L  Pу 9G k!4= Е№$ 0ƒ)CZCeC FЊ+G пP/.  с222оLL P8mH8 ou8 `. @7@*ќ\бC\ЪLE с\ Р№J  PdV+fwfиNN 2P,l7 S So lW PX сZцLuЬ^^ ruzP LfЄ8+ ‰P€ О№„{… иPn  Pp8pˆu А1 Т”3 •Ж|і~n › Г№‚(H‚чLŸаLˆ(2‰yŠ 6сЅŒ puЋйNЌў+” VЎ чPБЭ ВГš] Дiž1Й ‘P СЁ  PМ Д№ ќЇъLСЊLЉ !PЊ2С Yl­)HЎ †Ш5АчЩq ГGќД%Ж  И nuЙYƒЙ 7се3+о З№Х(x. с уPЩаЪиLЭ сЮ 2ЯFќъ б  Pв >VгgHэMе4езІ№вђŠ+я‚Lє ŽPн— љ@њrу mu§ Ф№ŽЈ эHќюсLє сѕуі QPѕ 5VŽ .lŽz+ŽhŽ фPŽƒLŽ И№!3I  P!Ž  luƒ 8Š‚,ŽБ-Ž ,Ž˜N-Ž •P1Ž– #сќыL6Ž Л№Ў9Ž$+;ŽGL#~ %ˆ. 'н()t' !с'<ќGŽ тP1 suMŽ ™l4  PQŽёQŽL9x> ::лLTŽЌVŽ А№=h„@[ ]Žщ+FAbŽ? bŽ L3M ?ViŽPLQpS 1сT tusŽY[[х [њHuŽ™+_фLvŽ lxŽbbP.†b  P{Ž 0P|Ž сPfєf с‚ŽИ vŽ Б№‰Ž ŠŽSLv P”Žp{ XЊ‚•Ž К№™Ž /l с3‚зœŽ€Ž:+ŸŽЋ ‡Kˆ‹мL ‘Bќ“  PЏŽ хP– 3— @V• ?сšnДŽьЖŽрЗŽ У№ИŽTLИŽ œlЂтПŽРŽ, ЇEќЈ€.†ЈкЉ§HА0БЩДнLЮŽѕЙ3Й ”PдŽY+М VиŽьLС  PФсŽ alтŽП уŽ цPЩ =схŽ PЬ ]uчŽˆG„Ю6тŽ Ў№юŽЪяŽoз‹ђŽН+й,м;ќнЇјŽ,Nо  ср"хрLц& H  Ж№э3ё  P Г o Lё %сћHќCќ§іў  шP YlŒ§  с |uтL  P&и '(CЪўH) №^,B_30{ L с2‡N9ќ VD7 +  P< ]l&s,уL/09 KІ2Ї33N|OYPZ Ms LQ рP8 \uM №; PYŽN@o^_E >сb‹+bTFJ3eЩc ‰PMкLNбc \lj‚NAќn n№V .сW  Pr&YЅ st L\ }u]^Z{Х cH}ŠNg3i:ќ„ пPl, m{m сqзLr ~u l‘ї+’Gyy P’r L}О— Ž№€_ ›s‚ч 8с„ wu…ёЁ)Š3ЅSFЄ‘NЊ Il­ ŒP•  P• ШV˜жLВw L˜ uu›ЉH™ сЗG+Й оPНєНљ Ѕ­Ѕ@ќЇ˜ЉЯ У.ФЙХNЋ {uЎ PА  сЮИЗ3ИDќКŠКщLдUFеz LжF+иЕ К "смМЦ  Pс №т ›lШ zuШ 9сЫYЬЫeЬ?ќы1ь ьPђ*ѓŒNѓ йPл!HіR+н ?Vй срo р 3ќш ќv LхцхйLх Pщ(І‚ Fщ yuы +с  № ŸlM+ї RV  ъPќ  PЯ  Hy L­Є 3  мP!‹N#› xu G хL%p( žl(ќХ  $с?7J+8 Ь№:ч"K=O <u L%˜H? щP' 3# 0с) vu-—L/ъ/  PK2 SP35M_K’NL l7  сL Š№SД T нP<<+ќXѕ+Y} LC  uG a ElcƒK3K 2сj мPRRAT;n†o pNX8t0+[ WPvЕw~ L` -сb 3~ 1PeƒerHe  PiL LjќlЗ lOs&t\ސFސ ‹№’Tx с” лP} 4ƒ™ ml€Kќ›NœT ƒ XPœ| LŸD+† v‡3ˆTМ  с–  PДД”З•ž vЃ сО ЅФHІРMТІ+Р нPФx LП tlЌk ЇIќШ”Џ "PШNа ѕPЗ :са Œ№ЙЃМ vзв ФЮHХrЦ Ц4т™ЩфЪ  PЪ VPттLф FlЭ АƒЩJќьрж4№ ыPђ…кLєяѕТ+јў р6т€уЫHф– ъEь4‘ plю <ся ‘ єP‘п‘d‘+‘ №‘э ўЪH‘=  P>4‘{N‘ jP 'с  э џ'‘ № сsL,‘ xl.‘# L1‘J3‘ѓ+§ œP`H;‘? % ' с*4*§F‘ №/з/ фPJ‘C2ЩHI‘yNL‘НO‘ _l6<P‘ћ8 8’LT‘$ L8 v; ;сY‘ JPA ŸPB8§a‘H ?Pa‘ №e‘] MыMЬHg‘ ulM Q сl‘Ш+SVVx§Y Avu‘]^_~Lz‘DFz‘zN|‘bLa ,сd- }‘ №f ЃPdu§†‘pЭH‹‘ зPŠ‘ lvпvV‘Ы”‘c { *сX ™‘Ї+{Lœ‘Žƒ™‘ ХP…§Ѕ‘ rlŒ ЄPŒ /сЈ‘CFЉ‘›Ž >v‘U’ШHЌ‘юЎ‘vL™RЙИ‘5Ÿ )сЛ‘W+Н‘я ЄЄ‹LЄ l PЇ$ У‘ ЪPЧ‘ lБ ЅPВ 0фWГЫГЧHЕА‚а‘aᑉLЯ‘ жPв‘ 7ёД3§Л ?vМк‘ Fл‘  Х4п‘TШ†т‘™ЬђЭА ЮpI? Я  PаŠLч‘ wlЬ(§№‘ +зЯH№‘ ШPї‘фњ‘yLћ‘Oќ‘Ÿ ћ‘=Nф) ф \Pх§щ @vъ8ъ4’ slѓЖ ’Џ’˜+ ’  ё’ чPљˆLњ ЂP’гў “Pџ-’  TV’їЌR§#’zL ; !$’ ЫP E '’ ё4)’ ql тз SV! ЁP"~;’ $яH?’а?’8+A’G(‰L( ˜5ƒL’ vl3 V7q Q’}L8 Ј1 :m: PU’/ ?-@4Z’DCD т_’ ЩPFЛa’+H хPE 0ƒG]§Lщ LHА‚P  > Q  VS•LXIHt’ŠLv’V+]x’ф y’зw’  l\ тb Pc:i  т„’|…’ ё†’ яPŠ’t”L’; v*w‘’aLv т–’ +–’ Dlƒ€ ž’ DP†j† Z P ’ $ёЅ’{LІ’m‘ 4Ў’n Ў’ Щ–A–  PВ’VЖ’ clЗ’wŸ ˜VЂHЂxLР’ АЕ‚ЇЎ У’ЕФ’Ђ­V­uЏЏ o PЪ’€LЫ’љ+Ь’Э’Ъ Ъ’ ЩИСН vз’ ЩО !тз’ ;ёС(СwУ 4У  PХ|Lн’ќр’AЩ:ЪW§ц’ “PЯгь’— д i Pя’ +ж4д +vђ’‹Lє’ 'ёї’  Щљ’ lќ’IуЋч4“Ї “Nь­ “ДюВHэ 3т№O§ё‘L “ Щє ЉPє !vјSј b P§4“ŽN“ bP“Ы „0 “•!“Y+   Ю“L%“(“q+“_ Q§=1“ŒN}L a P т7 4ЕH<“L<“ @ёA“ l*ХE“с+ vH“g+I“NJ“Ь2T§3œ6N;™ U“  ЩX“ KP? ` P@ƒLABh’†Y“3 B &тE _“~Lc“bJ ПPI vLU§g“хg“їNi“ ёl“QVЏr“: Yu“Ы+^ЖH_ Wb@d g Per fvL€““Lg )vg\§ˆ“ ™P‰“ KlŠ“ Щu”“З‘“Кx }P’“ “ qPx $т€1š“B+›“)“…L„ W…F …=Ё“ˆwLЁ“ ?ё‚Y§‹ q PЅ“`FŒ v’HВ“Л+™6˜ т›ђЖ“Y Ж“4Ж“ЂЁ WМ“ГН“ ЉlО“ ЩП“ƒLІT ЇТ“9Н“  ёЌ ЌLЎUЩ“џNЏ *vЎZ§Ю“ šPЖšЖJ5а“_FИ (тК ^ Pе“ ёМ lPН1й“…к“мСкХ Wп“ˆLс“ ­lШB ЫєЬ[§ч“7+аdHбyLа &vдУ№“ё“ "ёѓ“ Щє“  Pї“Nј“‚р јPџ“ џ“aFч ] Pџ“ Ll”‡Lъ W”Д+ъ€ . юЈяXю тё= ” ё ”П ” ›PѕРSƒії>ѓ vљhHљ“L”z”ю” Ќl”Nd!”„+ W т,”‚L-”F§ h P #v < P;” 6l"‡L=”ц+$љ%Ј $iHF”{F”  ЩH”V I” PI” ёK”О2$3 W,d§6a8е9 'v; p PU”ŒL=65X”^”+_”u E тG ? PJДLLMг OjHi” Ьlk” Mёm”TU] єW_vy”Хz”|La va'z_e§”;i тld †” Jёn?ogHˆ”эŠ”ыrКs sq” [Px#5y f Pz–L•” 2ё€Аœ”KL”тŸ” СPЁ”–+ˆ#‡ $vˆ тк ŽJ]Ž W‘ HPЊ”Ћ”їЌ” •kH­”„L“c§š„L› _ P 55О” ёІ Р”Š+Т”%У” M PЊЊ ŽWІ )тЎxГ Ю”е ЕpЮ”Lа”$Зb§К "vМ2и”ћРLР n PШ DWу”šф”Ўц”g+ц” I Pщ”D б˜§; в гlд. г%в тё” –Pє”†Lљ” Dёр§уВх %vч'5•[щ m PъъЇH•wэ—L•eя •˜ ё7• K P• Щё +т•!•.+ј§њD•ГL•Щ У&• 4§ ,тI5 l P,• щP˜L.•‡/•<.•G+ (v+• >ёDH6• J P#§'U B•Ю .Я.0Tƒ. 0тK• +I• 4ё4Е8 k P8 v8G§<zL>ЕY•FZ•f \•Ч^•yIRIђL УPf•R+g•ўLPl j• H PR)m• ЩP /тm• ёp• p• — P\qH` j PaŽLd<§•§h7‚•Ђj&„•д+†• L P‡• m -тˆ• LёqтŒ•Zs^Ž•i••[}—•Lš•Ћ‚›• ˜ P•Œ „>§†uHЂ• ё‰З ЁL‰ d PЈ•N+Ј•OЈ• N P v’л­•ЧЎ• Щ” 2тБ•оО•OР•LЇtHС•є+ЊОФ•ƒЌ ЌD5Ќ‚LЦ• ™ PЫ•> Г .тЗ c Pб•"FЙaв• OPг•­й• *ёТЇ Ф5Ш@§у• ЩЫvHЬ ЪPц•Šц•q+ш•чч•Lб…Lа 1тэ• 1ёю•I еЧя•Aё• š Pлнп§•!Fфш e Pь:§э vю т –*ђB– –SL– Cёњћ†Lќ=–ш–Ў –– ь PЧ –2+85!– › P)–#F зPC§2–Z6– ,ё ЩP7–ž 9–Б:–U:–s<– Щ#Х$5#аH  Fт+F§-6--ŒLJ– ы PN–+P–$FR– œ PS–W : PR– ёAlAQ5Gwb–WG \тG%§f–ЮLi– ЩPэ QLn–U+o– )ё\)5v–Qy–№`{–Fb1cхbЈ\†–Ff– gP‚–i ‚– ž P‚– P„m o 9тŠ–uq ЫPq Psy§v€L–j+|фH~^A™–š ›–ЯLЁ–vЃ–mЄ–1O‹BŒ vЄ– +ёХ  IтЏ– Ÿ P–Б–о+š€TƒœуH~žЏLЗ– EёК–… К–Н–Э­ HтБH5Ы– КPЭ–аLб–т+е–0OНhН2HН ЂPк–  PСž л– 0ёп–Ћ р–с–иШ IPр– H. Щ 7тЫ WЬ  vШ2§ъ– ЈƒбШ]‚д5я– №–7Oё–@+ибLнЖљ– ЛPрJ§х LтцЃч‡— 6ёщ P—пь ‹W — ѕ —EO—k— ї vѕ§ўwџDH%џеLў ЛP—+ <т§ —Л!—kL Ї  WW(—  ё},—>.—l.—4O1—Џ 4— Ъ09—Ѓ+! @т" v$H%5@—6+ +џF— ё/жLK—2'22L—jFL—COO— CPQ— ЪS—Ѓ >F? 9v> ?т]— Е PDS b—4+b— ёH1§e—Re—iFe—цLh—|e— j—6OSдLn—вUto—  ЪW WbW PY ` Pr—ч ^ =т^§c,f<—Fƒ— Iёlв†—[†—Х+‰—DOˆ— \Ps :vuM5vЪ uзLxј—B ’—ј{Кy 5т— /ё~TH˜— Ъw§œ—DŸ—a†$‰q§Є—5+™‘15“т“ NтД—g› .vЖ— ёŸ ^ P ї ЈLК—8OЅ  PС—" Ј/Т— ЪЊЦ— O PЧ—mШ—!+­ 0ƒ­ BтБ Б^‚ГlЭ—ДЕWHФT5р—cЧ6т— Щ†т— =ёЫюх—FOЭч—oЫ WтЯg§ь— Ъя—л+ж– ж  PкvLм _ Pї—FLј— 5PрTћ—нў—Јх5˜ ш Uтьtэ9юXH˜” ˜ц˜ Ъ ˜ +˜ &ёёj§ѕр€‚ў' ў„˜d ˜-O4OuL%˜ Ъ  Qт   Pl§0˜:0˜2˜ %ё3˜9˜3O +!б !I :˜ю ?˜њ+% PтA˜žB˜,FB˜ р„1m§L˜ ƒ4‡4uP˜ $ P9sS˜U˜U˜FLV˜ < [˜+F[˜ ёCNHD  P_˜ѕ FЋHœ Ip§h˜УP+j˜в+UПU Oт[  vv˜ ёw˜-F_@y˜;{˜ Ъb§e fQH˜MO€˜˜Š‚ƒ˜J j jчLo>Ž˜JL˜п+vXy  PzX^‚{2y Tvy`§ с Pš˜SO›˜*Fœ˜/ „RHž˜ž˜ 5ёˆЅ ˆ RтŒ‘oЌ˜  Ъ­˜ї+™{šĘ ƘPOŠLš UvŸoŸXH͘FЃ XтϘ  ёЈa§Ф˜ILטАЎ  PטЌژц+В „PГ‚ ݘ  Ъа˜ЦЗ*Зњб˜; б˜ROЛ Svз˜ EPй˜ЇС Sтм˜ vPЩЄц˜ 8ёЯQHб‰ ь˜Сэ˜.+э˜TOж?и_§ѓ˜  Ък Zтѕ˜Sмгј˜wLр Rvу  PъШЉ‚™ќ ™ SP™=™ CP ™ 3ёё#ѕ.™\їiѕ Yтњ8њ šP™F+њ^§™NO 0W CL™а™ Ъ ™]L ˆ v#™Z%™~ %™ Bё ^т 20™ DP  P3™Ь+ ~! 0Q†<™ а. # ,v>™aL! §' y( PE™x, /E™OOH™ЯJ™ь L™4 “4 uO™ И. R™ .ёT™ 8. = v§X™ FP?  @ SLY™ Ъ^™Ј_™K+_™`LJ §L  PM }f™UOg™ё i™гN -vR ]тS НS И„‚U 7m™ PX ŸPr™ 9ёu™lv™w+_  ` s§~™•™ GP€™ Fh $i  5ƒ™bLm t§ˆ™вˆ™ш r Ђs  PŽ™VO’™{y Nvz z )§—™О+™™й€ KLœ™ ё„ žP‰ hŠ 5Ѕ™ј І™ЂLЇ™LOІ™ сP '§Ћ™ P” Џ™іВ™ и. Г™—+ € Ÿ ШŽ„  Є G5Р™ ЫЇ ЄPЈ "Ј OvХ™QOЧ™ЈШ™ЉЎ §Ъ™ ЫБ їPЮ™Ÿ З 9д™ALе™ NёМ ѕР  м™0+У 95У OLШ *§Ь кш™ LPб Jе уё™™ з ˆŽ„ѓ™Žк #і™kн Pvї™ Ыњ™ єPу ў™|+š\Oы  Pэ —Pю [я Ž š š„ ю 5§ѓ уš ВPў ˜Ž„!TL!U5 š[O!t š bP(šŽ! Mv! у!§/šS/šр+5š /P!(57š;š—$!Ћ $!I&!ƒ@š]O(!ц)!Dš "PEš Oё&!§HšЪ.! уLš ЕP7! ŠPQšc:!w§;!FLA!`šWOG!§H!ТcšD+J!K!ШQ†dš+ dšњgšэK! уR! ЪWnšIFU!:5V! KvW!W! yš Ыzšъ_!$§i!ƒšу+l!‡š’ Šš ЗPq!YLr!МŒšjt!%5u!R†u!ј„‚w!r§•šO!й! BW‚!št„! у„!§Ёš$Ѓš-+ІšŒЇšHFЉšV•!cЏšђ —! Lv˜!Бš ЫДš ~ Pœ!KЗš ёЙšqL !§Ђ!gЂ!  ƒЄ!РšВ+Ї!QLЎ!Э Ў!lЪšцЮš+ЮšJFаš ЖPбšявš ёдšІ С!Ѕпš/LЦ!oЧ!Ш! JvЪ!hR†чšХ+шš]щš^а!а!rьšUЮ!§яšFе! уи!9ђš  Pєš>м!/ м!RLњšO ќš3LќšOф!§ч!ь!$5я! › › :ё › Ы›фї!z§ј!ц ›2Lњ!›и+› tP"Š"L" &P" у%›Ў "…&›!&› "" mW"LL)›O*›% .› Ы0› !ё"5"Э4›|H".4› >P" у8›:›+?›ЁI›y1"сK›т 4"Є 5"л5"@5O›žP›HL:"MU› !l="&Y›OY›  P?" vC"-§_›нc› #ёg›8h› O"MLj›ŸHU"V"пp›UX"Ф Z"Ьt›Lv› wP\"&§_"й`" 5v}›э+d"25~› Aёh" у„›M k"Щl" FP„›  Pn""‹›ЅŽ›˜u".§–›Ж+™›€"У"Ш ƒ"оž› Ÿ› FЬЁ› 5lˆ"GL‹"OІ› ё‹"K§Ј›ЌP"5Ќ›Ў›ž—" 8vВ› BPД›AД›УL›"  уИ› Л›ю+Л› (ёО› PЅ"m Ѕ"жП›єЉ"тЉ"Ч› ЪlЏ"!5Д"АЖ"ƒЖ" šPб›в› xPИ"  уН"И з› 9ЬТ"JLм› Ыlо›Z+о›ЦLт›№Pф›| Ь" 1vЯ"б"•б"˜ƒэ› <ёя›ж"ˆя› MPѓ› 7lі›™ї›iо"• п"…ќ› Pу" уœ /ЬœЄ щ" Wы"гœ œ|Lэ"ў œѓP№"| œ Tl œ + œ Hёї"dќ"Щќ"HLœЧLџ"ў#8 #+5# у# 2v œ ё#д'œ (œ(œ P#M#3+œ к P#8ƒ1œ9#Ъ4œW+8œ:P #ў<œ ё%#d&#_&#g?œ€LBœ _ЬEœ8+# у0#L Jœе2#;5LœЮ Oœх6#w5# 3vRœѕP9#Pœ ё;#п;#WLUœ й PXœŽ+Zœ ъlH#ŽcœфLdœ  PN# уS#_pœtqœ5 X#75pœ6+wœwœєPa# {œ{œЛd# 4v~œ #Ьf#4œ  ёa#ШHƒk#e…œ 1ln# у‰œ o#а„r#PLœЇw#,5‘œ Pz#"z#pE0 ~#˜œ -ё›œT+œœPœœ .Ь„#˜ƒ‡#ѓ ˆ# 8PЁœуЄœg #џ’#y“# 6v”#UЏœ jPš#š#џИœлЙœМ+КœіPЁ#’ Йœ 6ЬНœ БlЄ#L5Лœ  ёРœњЄ#џУœŒLЊ#…ХœžЊ# уЏ#VLЫœ- ЬœББ#nџЗ# ;Pдœђ+Л#K Л#+џиœ ёР#џС#ЊТ#&џнœ ВlФ#РVƒЦ# уЧ# 7vШ#uЩ#ЌШ#а@‚Ъ#?5тœїPфœLчœ; а#"№b€ьœ Pд#юœƒ№œ3ѓœ‘к#A ѓœЅ+к#џс#2џт#Цт# <Pўœ“џœ0 ф#  у lч#рO†ъ#Јэ#&5я#,ё#UL јPѓ#G ŽPї#џњ#џ§#ѕ §#*џџ#Ј P›+ OЬ$ у$€ƒ$  ?l$рŽ‚$q%Я $S $ ШUƒ(Н $ ŸP$ v$џ$  у1КP2ЈšF 2 fЬ$^џ$  $3= „ђ$$ќ %$IL>$+?AeL&$ZџG PG ЬKУLЉ MИšF 4$ у1$[џP @l:$ ŠW<$>=$ Fv>$cџ@$+["+C$œ C$05^ [Ьb цPI$_K$KQ$bџl@ l AlT$ уV$ (WX$ vPrs^P]$x^$aџzдa$XLz ‰Ph$ уj$]џ……fLo$  p$Ж‹й Œ+s$ …Wt$Ѕ‰ Blt$ GvŽ AЬz$\џ™_€$ƒ$_џ Ё  ОPЁ RђЄ HlЅr+$О‘$ 9WЌлЎ ОPЏ 'Ь—$І˜$™ ˜$ уДЧPД ]PЁ$`џЂ$NLЃ$ BvРэС-+Ј$N5Тс Ф 2Ь­$xкцА$mџВ$ЖГ$ +WД$t Г$рТ‚Ж$+З$aвкгeИ$3џО$ П$  ум ^PУ$ яPп LЬрm Ч$„ рСPтs+т lхЙШ$`‚Э$‚Ю$ xWЯ$P5щ zђы(Lж$ уз$hџі‰ і EЬо$Гј‘м$iџў ш$4ž ђщ$'џы$Ižž CPю$(џ ž ’l ž  Ьѓ$5є$ Hvž +і$•žБ ћ$4Lќ$‡ §$’žЎћ$)џ%lџž nђ%A%dџ!ž Ь$žZ'žДL(žП,ž 0P%Š-ž‚+%<%5% ˆ‹„%˜6ž eђ9ž 3l<ž {P#% FP%%  Až€)%)% фFžёGž 0%Œ1%‹L3% \фPž ‘l8%RSžPTž2+Už№<%zYž Ь[žЄ]žI C% !фF% I%ež LL%dižТjž і PR%A5V%•LW%rž Ђђtž Ь[% EPwžZ+^%&}ž lf% h%’‚ž‡o% Œž Ьžžt%П ŽžщŽžLw%іx% RW”ž'{%  v|%”L–ž‘+ƒ%b†%ПЄž “lŠ% ` / %5‘% №P”% vWЎžШ БžЎPВž{˜% фЕžW+ЗžuИž\ИžLЁ%ŽLОž ЬЈ% VфУž TђЊ%юХžш­%5Б%iЭž GlД% WЮžb Г% DvЗ%З%ІИ%Л%ˆеž|+Н% П%‚ йžлнž ђпž ”lрžВШ%Ъ%“LхžPЬ% TфчžLг%№ž з% ^Wєž Ьѕž ”ђп% п%ќžњу% >фф%Fџžч%Ўы%ы%E5э%Cы% dPŸ •l ŸP Ÿ `Ьђ%Lє% %WŸ' Ÿ ђљ% ŸLŸСŸ0нF ў% фџ%й & Ev&K5 Ÿi&T & Iф& PW&,Ÿ  l&–L&W0Ÿ~ &†0ŸK3Ÿ2ŸP,Ÿ Ь&X„&ъ#&Ж AŸ L(&*5BŸ 1ЬDŸ ђ'& .& JŸ" 3&L4& WMŸТMŸЄ5& 8&Е9&вRŸ +:&>&gXŸЉA&X…‚C&ЅD&ж ^ŸPF&`G& CvbŸЮI& џP_Ÿ VђgŸ cЬhŸ #lP&kŸLnŸlX&тY&­X&’LrŸRtŸX wŸ8+X& $ф}Ÿ !ђ„ŸяPl& HWˆŸ )Ьs&ЕŸY™Ÿ ђ&ЦœŸ@+ƒ&у „&‘L…&ђœŸLŸ Ь‰& GWŠ& фЇŸЭ ’&h…‚АŸ qђГŸ JЬš&˜6ƒ& v PЗŸE+Ÿ&qКŸ 6lМŸЬ PЂ& XфЄ&Ј&&LЊ&x…‚Њ& EWЌ&  ХŸМШŸ  ЬЏ&А&4ЪŸ ЫŸ LГ&ˆ…‚Г&35ЪŸ ђаŸ Ю PеŸс+О& IvС&СмŸЄФ&Х&˜…‚Х& а„пŸ “ђтŸЯ PЪ& ќPхŸо Ь&‹Ь& JWчŸ,чŸЮщŸьцŸ 0lцŸ ;Ьд&uе&љ д&(_‚д&и&џл&НіŸџ+н&45њŸ ђћŸ"Lф&Ž„џŸ2 ц&fLц& фщ&Hы&  DЬ ) Ђя&œ №& Qvё&ШŒ„ѓ&Њє& YW К е Pњ&8_‚ќ&й§&X§&V5 Љ+'0W†  v   Љl" пL#  ' ђP 'ЃL& Y'ј ' t ' v'§' Wф'C5' W0 X2 Г'H'Ž'І2 #L6 д P8 G+'7  +ђ$' v)'ЈLC М E ѓG  4l1'Ђ 1' ф5' OW9'•9'U LW  eЬ>'ЊLX S@'HB'>B'v B'z^ (+] г PC'  фH' =v\  0ђj  ЬS'“S'ЉLS'Vm ћn JX' џ P\'ъ]'С z  -ђb' VWc'у~ L }}  lg'‚ Ш ƒ -+j'ЇL… а Pg' Yфq'.s' ;v  KЬu'5{'s— Ћ˜ Q'ІL€'H_‚—  'ђ‚' уP'E…' ф‰'c Ѓ 4+І є'B5Ќ в P“'\­ H•'ЋL–'&­ H˜'УH™' iWЎ &LЌ  7Ьš' ф' <vŸ'‡ Й  К 0Л |Н  (ђŸ'FР š+Ј' CфЋ'„LЎ'ŽА'šЖ'Ц а  б б Pг  gЬМ' jWО'рй §+П' ]фл Lо -п Чр …п  Sђт  clЦ'Hч ' Ю' ШPЯ'uHЭ'  vг'Iэ  TЬя Tн'№ї ,Hп'Lр'ўс' gWў ЦPх' gvч'‘Ё8‚Ё++Ё +ЬЁЕLь'ЁL ѓ' <фј'„Ё WђЁў§'Л ў' бPЁ >Ь(L Ё ol(>5( hW#Ё•+( `v( Zф(Ё  )ЁМ,ЁL(ж.ЁР(j(Д (gH6Ёс7Ё VЬ( $(((L)(PY†)(5CЁ dl,( ЬP-( bW.( fv1(Е KЁŸ3( Mф4(ЙNЁНPPЁ+7(лNЁ <Ь9(Y;(2UЁ fђWЁ [ЁL_Ё F( ;фG(hHbЁ™bЁ WlO(; O( LjЁжR( XWU( bvpЁ ‡ђX(эX( ЯPuЁІ\(R5vЁА+wЁ ?ЬyЁ–P`( =ф~Ё—H€Ёr†ЁОm(Ln(=n(EHp(†ЁLŠЁo ŽЁ џlЁ bђw(У z( ev{(Z•Ё  Ь}( ˆƒ( цP‚(Р Ё+ЄЁ lŒ(O5ЉЁ ( eW‘(L’(ЄЊЁ‰ ЌЁ"ЌЁ ~ђ™(“ ЖЁ“( avЃ( аPНЁ OlПЁ!LІ(ЦНЁ &ЬТЁ<Њ(WХЁ]Ќ(F5ЧЁhHЩЁП+А(КД(S Д(LЖ( fWЯЁ'PвЁ дЁkЛ(ЎМ(ЭHМ(ŽLйЁ }ђкЁ ЬС( #фТ(ПЦ( cvЭ(чЁнЭ( Fфб(/5в(wыЁCHяЁ" ж(з яЁ”+№ЁLяЁ QЬл( ЮPн(ИќЁ—Pу( rWўЁŸц(лщ(Оъ( "фы(ЄЂ Пlэ(аHЂђэ( dvЂ 8Ь Ђу ЂLЂ Xђю(0Ђ< ј(vLЂŠ) _ф) P)Р)I !Ђе )^$Ђ&&ЂšP$Ђ kђ(Ђ *Ђ  l) ЭP-Ђ BЬ)ш)С) Zv4Ђv+) sW)\† )бH:Ђ“:Ђ%L?Ђz&)Ё') 0ф))ж CЂ Оl-).) #PGЂžHЂi GЂHЂ MЬMЂНHSЂб+SЂ ‹ђ>)tB) XvC) NWE) ф`Ђ)LG)•H) ЫPI)5G) fЂ WЬN)aO)Z iЂ‹jЂHPlЂлpЂ  l[)вHvЂЊ+\) %фvЂ ђe) qWЂlg) _vi) ƒЂL†Ђ~ ‰ЂЃq)ŸŒЂ “Pt)h_‚ŽЂŸŽЂ UЬw)|x)d x) ГP–ЂŠH—Ђј‚~) –ЂKPœЂ˜„)„) AWŸЂBЃЂ ЬЄЂ 7ђŒ)) [vŽ)дHŒ) фЎЂ >lЏЂз —){ ВЂLš) ЖЂЯИЂ6Ÿ) UфЄ) LWЈ)fТЂ =ЬЌ)ЉЧЂ :ђШЂl+ЫЂш Б) ^vЭЂ GPЮЂ™PбЂТ† PК) PнЂЋФ)xФ)гHрЂ 8lЧ)Т Ч)x_‚тЂQ+фЂELЫ) KWоЂ ZЬфЂ 8ђшЂC Я)Aа) уPьЂLPг) Yvз)NђЂ Ьй)  фѕЂvіЂtјЂHп)gп)G LљЂфњЂЛх) PџЂ #Pч)иЃѓ Ѓ 7lЃ 1ђЃR+ЃL№) kWё){H Ѓ  Ья) (фї)!ЃЋЃWћ) \vЃ9 Ѓ›P*› ЃЎ * *"5 *K L * ŽP *V$Ѓ ŽQ)Ѓ)ЃE+)Ѓ dЬ* ф*‡%Ѓ 3ђ/ЃL/Ѓ ,P*b* \W5Ѓ‹H** h„!* ]v$*К ?ЃEЃо EЃб+FЃ …ђ.*XHЃ ?lKЃмP2*J LLЃ $P4*S5MЃ 0Ь9*vTЃљ=*˜H=* 7 P?* [WWЃ LZЃ §QE*lE*Д_Ѓё cЃ KђK*  vfЃlЃ1oЃ HV*bW*WpЃ DlY*  ^*||Ѓ Šђ}ЃчЃ Qf* tWg*wi*> j* Wv…Ѓ P†ЃLm*›HƒЃ SЬ‹ЃX ŒЃ4ЃƒŒЃы+s* +ф‘ЃЮ’Ѓ Flz*/}*ж L~*Y˜Ѓ Ь*нˆ* -W‰*И_‚Š* пPІЃЌЇЃ ŠQЉЃ _ђ*&ЋЃœ’*27* VvАЃ$LВЃЁ+™*œHВЃ `lИЃ"ЙЃƒPКЃ Qž* PŒ„Ѓ*л LЄ*^Ѕ*ХПЃHЉ*Ш­*"7Д*T ЮЃ ЯЃ ClаЃzЮЃ @ЬМ* UWП*Р*žHйЃкЃрУ*ьУ*sLйЃшLрЃ QйЃ ђЬ*еЭ*]а*BъЃз ыЃ LэЃњ+д*.7юЃOж*  3ƒёЃ $Ьи*к LѓЃЋѓЃ]PєЃ ЎPѓЃ lж*1јЃHр* Wц* wЄщ*57Є xђЄ %Ьы* фэ*ы ю*Gэ*H Єц Є Qђ* w Єh є* ѕ*ЮЄ Blь*2Єˆћ*"ћ*м Lњ* EфЄ6L+(7++ TW Є Zђ#Є YЬ+3*ЄL++Q 0Є>1Є Q3Є[H+л3Є El+@7Єp+й L8Є :Є;L;Є\ P#+N@ЄF @ЄLBЄ;+)+ WAЄ ­P&+ 4фDЄ dђ0+Љ2+Ф5+ w6+ш RЄ …Q:+7TЄ ]ЬVЄ№>+f]Є^Є ,lE+_`ЄиaЄ9L`Є bQcЄc+N+ыjЄ^PkЄ aЬlЄ’ T+ wW+>Y+ш_‚Z+_uЄqH[+ BфxЄЫb+ 'Wc+к|Єr„Є<Lk+9†ЄБŠЄђ ŠЄ€+r+ƒLs+ vPr+ H„Є Qw+7x+?Hy+m•Є ђ–Є] P€+)œЄ "lŸЄ:L†+йЁЄ XЬ‹+y Œ+ wЈЄ, +Т+fЊЄxБЄ YQВЄ ђš+›+ 5фŸ+ 6P +ъL + dWЙЄXUƒКЄьЛЄ žQПЄp РЄйLЇ+нОЄ (ЬЊ+QХЄ'+­+ї ЧЄ_PЏ+ -ф­+:З+ђЗ+егЄЏК+њеЄ \ЬкЄС+јLпЄ 1QсЄ) тЄ 5lЫ+@HхЄ>Я+FЯ+ „WъЄu+е+дж+u ёЄ HЬз+ @фѕЄ_ Pм+иіЄЬ LїЄ ђп+;ќЄmу+№Lщ+мЅЦ+ы+‘ Ѕ Ѕ ё+< ђ+Ђѕ+ѓї+ "wї+<ЅЌЅЯ LЅ,, NP!Ѕ .Q#Ѕ Cђ ,іL$Ѕw , aф(Ѕ RЬ,?-Ѕ^ P1Ѕ˜,,3Ѕ—4Ѕ $l ,е &, јW@Ѕ PЬ&,@CЅа LDЅ HђEЅ+.,їL/, xJЅ2,пOЅb7,KTЅ: ;,њVЅ ЬWЅ уQ=,8?,z @, тPZЅУF, aW`Ѕ FђbЅ‹LcЅEPO,юLjЅ Q,}T,‰V,1W,7rЅ 5ЬY,8tЅя+X, LфvЅтwЅШvЅ Ala,G |Ѕ цQc, 7{Ѕ =ђk,иF„r,њLЅ+s, `ф’Ѕ Ь“Ѕzz,8{,ю–ЅЏ—Ѕ;,Р„,ў žЅЖ žЅ -QŸЅ AђŒ, ,ђLŽ, ДW,q,7ЇЅ lЈЅ Ь­Ѕž P­Ѕ чQ•,ЙГЅ~,ЗЅЖЗЅе+,ПЅ lІ, XV†ПЅ ?ђЋ,07ЦЅ *ЬЎ,єLЩЅ‚ А,˜ Џ,87ƒВ,@ЯЅ /QЖ,’аЅ>LИ,сЛ,7Н,фО,KиЅPкЅ§+П,мЅ ш_O нЅ)оЅоЅ QрЅнЅ ЬШ,7уЅ™HщЅЧ Я,ж,ќLз, ЕWк, ƒл,м,-7о, њЅLћЅ Ьт,ЬќЅЋўЅb+њЅ Lђц,MІІŸPэ,ХІt Іp№, І7ђ, zѕ,7ї,‹ І9Lљ,яLІ “QІ -ЬІIІ+І-HІ' Ід- - ф -ћ -р - (І %l)І —ђ-1--Іt-ћL7І^- )z-k- ф"- ВW=Ік =І…+'-p DІ €ђ+- FІš.-ˆ/-`HІœ3-ЮNІ %QUІ ЬVІ1 YІr@-J@-љLYІЙ\І HD-zZІпL_І P^І GlH-–cІ[hІо+Q-№Q- 9фmІ jђT-moІžV-NpІ S-]-/ wІ ’QzІ|Pc-0f-шF„f- *zƒІ Jlj-Ok- ГWl-€†ІHˆІтLo-ѕLŠІ oQ‹ІІŒІ 4Ьl- ,фt-oŽІд „І $ђw-w-3“Іэ+|-R—ІG˜Ін- Dф˜І sђ-a ƒ-7ŸІ 1 P‡-:-3ЊІ Ll-ЎІ”ЏІ Nђ–-НАІъ ˜-ёL™-)ВІ6HГІ•ГІ+-ё ЖІуLАІ ,ЬОІPЈ-ГЈ- фФІ kQЋ- WPЩІ 5 PЬІ bЬЭІHЮІ=ЮІБ аІ<+З-AбІќвІтК- eWЯІ KlЙ- GфН- З-Т-ѓLХ- +zЦ-7 уІ:LЫ-+Ы-ьІ+в- Hф№І– ёІ lк- ЖWн- јІ кQљІNр-šћІ 6 Pт-эLјІ YђЇ5HЇxЇК+Ї :Ь ЇF №-Б ѓ-Ю ЇфLЇ`Pј- .фЇ ›ђЇHЇ P.јF„Ї пQ"Ї€ . L#Ї3 $ЇС%Ї CЬ..: . @. .ЇШ+.€5Ї =l5Ї Oђ. Aф.*7:ЇR ;Ї <Ї 4 P=ЇH<Ї dQ@Ї“'. 2P@ЇцLBЇ Ь*.3)./.}0.K1.~JЇ рQLЇ+RЇk+RЇ gђWЇЮWЇй?.A YЇp P[Ї *lC.s^ЇN `Ї–cЇfHcЇ ‹PK.гjЇ оQmЇ+sЇ ЬY.[.'7uЇцwЇ|zЇхLf. LЇО h. h. цP„Їю‚Ї  ђˆЇu+ˆЇHp.šq.Lp.AHЇ jQn. Иƒo.ШGЇo P’Ї IЬ‡.Lˆ. ЃЇ нQŒ.|Ž.U­Ї;L”.ЎЇ yPЏЇЩБЇ GЬ™.š š. w P™. ?фЖЇhHЕЇ [ђ . ~Ђ."Є.LРЇхФЇ  QШЇЅPШЇ NЬЪЇ= Б.˜ЫЇHЭЇe+А. Ш / Б..К. Н.  PзЇ pђП.@кЇш–‚С. [фнЇLоЇ ^ЬЦ.я Ц.~рЇ ‘QЩ. ZWсЇї Э.+ыЇж+ьЇ г.уе. KфяЇ ђђЇ 3ЬіЇ 8Pо. шPљЇHт. у.Ну.Вт. YWЈ2 Ј ђъ.,Ј…Ј žl№.Ш Ј›Pђ.)7№. 8фї.gLњ.ћЈ Qќ.њќ. | PЈ)+Ј ЬЈя//Б ЈœH Ј4 / ŠW/ Nф#Јх$Ј <P /17/-*ЈЅ,ЈtH-Ј5L.Ј  ђ0Ј Pl/у/ ‚ P6Ј Ь/ Jф8Ј Q9ЈУ /с"/=AЈЂBЈN+)/ AWEЈЋ./1/} 1/БL4/ фOЈ  ЬUЈn=/ёXЈ Q?/шC/ { PD/г]Јhє‚F/ _WaЈ ;PC/ /фeЈœLeЈ #ђgЈ+O/! iЈИkЈ ЬoЈ˜pЈ ЮlW/7X/ТLX/  фwЈъ^/'wЈ tQa/3b/7b/А~ЈYHg/ RWЈK ƒЈ Ьj/Иj/ z P†Ј’+g/2ˆЈ =Pn/ 3фp/7‹ЈЎLy/f“Ј (l€/ц€/ПL‚/ †/V‡/…‡/ GWЁЈu Š/+7‹/ фІЈ%/ UPЇЈ !Ь‘/v“/ € P­ЈXЏЈф+БЈЕБЈ]HВЈЉLДЈІБЈ ,Q/АЗЈ ™ђŸ/ :фЁ/ FWОЈ* І/ЎЋ/47ЦЈc­/ОL­/№. В/ ~ PЕ/ЗЗ/; Й/nгЈ'Й/ ^фжЈr зЈзиЈ 3QП/ DWзЈ plлЈrHиЈ  ЬУ/#7оЈЇLдЈ ЅђрЈ*PЫ/ДЬ/@хЈ ѕPб/7ыЈ\HэЈ_ эЈ7з/КLи/Чй/  Pк/ } Pл/…єЈx+іЈUо/ IWіЈ hЬњЈйт/Ру/,7ф/hЁ‚ўЈdЉЄLЉ sQ Љ "ЬЉ‹ќ/№ЉqHў/SЉH+0 zW0 P0РLЉ 0Q ЉЭ"ЉP 0  P'Љ_H*Љ Ll0ј 0 0 3z0n0Љ@L/Љ  ђ0—4ЉХ6Љb+0h0  P<ЉЧ#0 }W<Љ ?Љ:+0ЕL,0HЉЅLNЉ rQOЉ іPSЉ%TЉ. SЉoHVЉf+WЉ Ql>0™=0 ?z@0HA0жB0 PA0 zPB0 |WH0Œ fЉцfЉ QђhЉ 7QjЉ^HQ0 7jЉBLlЉT0 хU0V0gpЉн rЉ x‚Y0ЗL[0xЉ LzЉ +b07c0 {W}Љ Sle0L|Љ и™‚b0 хЉ žђj0 5zl05 †Љ Э‰Љ {PŠЉIŒЉqЉ- Љѕ—Љ 5Q~070†šЉP0В›Љ­Lƒ0XœЉЮ+…0 W†0ў†0NšЉ tЭЃЉsHЃЉ Ol›Љ •ђЇЉ00  хЊЉwЊЉ) •0 >P—0!7БЉЦЕЉ Pœ0_ ЙЉ uђЁ0ЉЃ0УLЄ0Ѕ0 WРЉ ТЉ•+ТЉ*HФЉЂLЋ0?{ЦЉ uQЧЉ Rl­0 AzЈ0 хА0 WPБ0Э Д0iЯЉ \ђЖ0MHИ0NвЉВдЉљМ0 7Т0 ЪPФ0WФ0‡Ф0ИLЧ0 ŽWоЉ Щ0|сЉ xPрЉ 6QфЉчPхЉцоЉ [ЭыЉ›ьЉЊLг0(G„г0 юЉ Pl№Љ„з07ёЉ—+б0 >z№Љ и‚р0  хт0Hш0Ищ0!ъ0 ˆWы0ДLЊхH Њ ђ ЊЯЊ ˜QЊœ і0 + Pї0Њ |Pј0  хЊЊ lў0т Њ 1QЊ1Њ˜+ЊЏLџ01HЊŠЊ Iђ1"Њ‹ P 1 ѓP 1 OW 1Š 17 1 х*ЊЈ 1 z1МL2ЊэH1+ 1 17:ЊЈL#1 / P;Њ?Њ zPCЊ4*1 zFЊ 4Q-1 ‰WGЊ[ 11З11ЃMЊ tђ41.61771н61НL81 їPQЊqQЊ†+SЊ3VЊтP81  х_Њ l`Њ4H`ЊЌLI1M1 M1 хO1 ‹WP1 XPiЊ ~PR17lЊ…nЊŠ PiЊ |ЭsЊёHtЊєtЊY+sЊ OQ_17yЊŒ a1|Њ 8Q}ЊСd1ЙLzЊ ˆ> }Њ Ёђh1 іPi1   / j1`l1јŠЊrr1Hr1 WЊŸLz17z1 1 P”Њ yP}1з•Њ™•Њ Rl™ЊžH1C œЊХ œЊР+žЊ]˜Њ ‰ђ ЊP Њ Q‰1ЛLЄЊіH1L1/7–1]ВЊ /QГЊЃLš1˜O†œ1 ўPœ1 •WЖЊФŸ1бЗЊ’ ЙЊ %Эž1  хЗЊ  ђРЊPСЊіЈ1œЉ1 . PТЊ €PЦЊ oђ­1 zЏ1ЖLБ1 В1ZГ1@G„ЭЊ +ЮЊМЖ1&7ЭЊєHЯЊ тlЮЊ аoƒдЊ­ Л1mЕ1EН1.иЊ=LР1 ‚WлЊмЊ ZQХ17пЊ œђЧ1HфЊ ,ЭЫ1 zЮ1БщЊІLг1 №Њ˜№ЊѓHёЊ 2QѓЊ }PєЊ%и1{м1СLн1 0 Pо1  о1тм1 ЮPјЊ SlњЊоPќЊl ф1 €WџЊ ZЭљЊ lђр11Ћsщ1 7Ћяъ1 zэ1їю1_я1 $ц№1ѕ ЋБL Ћ Эѕ1-Ћ ^ђЋQ+§172Н 2Ћ Q2ЌLЋ•Ћ уl2 @W 2Z"Ћ 0P 2 ГP&Ћ Э 22ƒ2 2 P)Ћ+*Ћ№H*Ћ ]ђ270ЋВ5ЋЁL2’H2Y 2 :Ћ+;Ћ;Ћ HB‚%2 ц&27@ЋЊ +2 ЅW,2ž-2 HЋœ02˜L42ѕ92 7TЋ[UЋ Ј8ƒVЋ ˆB‚XЋ щP?2 ZЋяHB2 ZPB2[_Ћ0_ЋЋLG2 :PH2шbЋљ J2 aWeЋ QfЋ ѕlgЋ+O2 O2ОP237P2 LjЋ \ЭnЋuT2 azQ2 ,ц[2LuЋЃyЋЄ+yЋ Эh2€ „ЋАLk2 `Wm2 n2ŸLo2 DPŠЋъHm2 цr2‘Hr2 ћPt2:u2 7Ћ lЋBЋ_“Ћvt2 `z‘Ћ Ш_‚–Ћ јP—Ћh o2˜1ƒšЋ“+šЋ †Q‚26ƒ21šЋ rђ†2g ‡2 цЃЋ №Y2L2 <WЊЋQL’2 G­ЋЏЋo•2 _z—2 ЗPš2сœ2gЖЋ јlИЋM+Ÿ28Ё2ŸПЋѕHЇ2 цЈ2­ УЋ и / ЦЋ ЛQБ25ЬЋ ШЎƒГ2 ˜WБ2 lzаЋ šPбЋ `џ; вЋQгЋe вЋ+Л2ДЛ2ЂLМ2 APжЋ ј?0 дЋ ˜ј; Р2 И> лЋgТ2У21оЋoоЋ BlрЋГLЩ2ŒHуЋЫ2фЋ CQЭ2Я29Я2 ezг2ЁLе2 œWяЋ{№ЋыHи2] ѓЋ ќlн2№н2SњЋm с2 ЖPќЋ@H0 Ќ ™Pч23ш2aЌ?ъ29ш2 fzь2” я2N№2›L№2 АP Ќ ђ ЌчЌ$ѕ2&ЌP+ї2ёї2 NWЌЇЌ MЭё2(Ќ џl3 @P3H3 gz39 ЌЃ"Ќ MQ#Ќ H 393–3И3Њ /Ќ АZ3 hW3žL5ЌŒ+3H7ЌP 9ЌщH:Ќ""39=Ќ §l$3 ]z%3k?ЌO'3p(3 ЕP<Ќ ˜ђ"3H0 GЌ'IЌWIЌ Э13{13 ц33243 fW53œLNЌhH0 93m 93 ЏPSЌWWЌ >3ѓXЌ@WYЌ “ P[Ќ yђ\Ќ &Э]ЌЅF3WF3dbЌJ3 BPJ3 \zfЌ №QM3P> hЌˆ+O3 9jЌakЌ lR3нLlЌђHT3 gWW3“ sЌ И[„Z36wЌрW_3 . |Ќ X|Ќ* b3h. Ќ@h3i3Юk3 dz‡Ќ!‡Ќk+p3ŽHr3 ?PŒЌ lt3 >Wu3Cu3 9ЌV’ЌЬy3Ћ’ЌЯP’Ќ іQ”Ќ aђw3œЌU ƒ3 гPЂЌьHˆ3  цŠ3ч‹3‹39ЄЌ љlŽ34ЅЌ3в 3 JW•3 ДPЏЌ++ДЌ ђŸ3ОМЌ2МЌ ѕQОЌ|PЅ3ŽТЌ`ФЌHXЋ3 -WЎ3 цЩЌpXБ3~ЫЌ ўlГ3УЮЌЕ3 =PЯЌY ЯЌЗИ3ЗLЯЌ!+К35Б3(ZМ3QМ39зЌшHпЌ ˜ƒЦ3 цпЌ hђЪ3 bzЪ3ˆ6ƒЬ3 LWЭ3и шЌ єQъЌBб3ЂъЌОьЌњ ъЌ`Pе39ж3аёЌ lѕЌ/+ѕЌ Ѓђо37с3H‰‚т3 >Pу3 цўЌАXх3b у30^†ч3 ;P­иX­їH­Y ­ђю3 czё3 9 ­8Yє3Tє3МL­Љ ­xY­\­ ѓQ­ l­ Y­Ÿ+4 *ц4™­Њ­b4 9 44 4J 4 CP4 šW4˜/­юH4 ц2­ШY7­Z7­ ћl 4 9 4 jz<­d$4•%4 :P&4%'4]>­+A­ QB­ФC­2,4 ?W>­ Э@­ mђL­g 74e 74КL84 JPT­ЎQ­  ЭV­ #P=4 ц?4—Y­оPA4vA4[­ ~QD4а\­b]­ њl^­Pa­7HI4 KWJ4PE4 kzf­+D4i­ PђQ4œm­ѕ q­ @ЭX4тW4  цe4 ”P€­C+g4 CWh4Ѓ‚­ lƒ­^ „­Юl4= l4(m4%…­8Z…­0‡­WŠ­ˆZq4 izo4 +цu4НL­Ј—‚k4иŒ„x4+”­OH”­ ‘ђ˜­ ЉЭ4˜G„€4 Р P™­ ƒ4 ’W…4#Ÿ­Э+Ё­ЯPЁ­ QQЄ­ 9l‹4  ц4*:Љ­єЊ­ф’4ѕ“4GА­ Іђ—4 *PВ­ЙВ­‘H—48ƒК­ Ђ4хО­ JЭЅ4чС­NHЈ4 BWЉ4 цФ­ … P­49 Ў4 Ф PШ­KPА4ЈG„Щ­АЗ4ЛLв­ ƒЭг­ШZК4 .PЛ4Uи­№Zк­Н+Т4  цн­([п­Ц4 †WШ4т­qу­џЫ4ф­ lч­ Q№­ј№­@Hи4 hzй4ˆ є­d ђ­ `Yм4аї­p+ј­˜‚љ­ šђр4 ‡Wн4)§­ЈЋƒф4 -Pф4 цц4SЎШB‚щ4 У Pъ4NЎ ˆ PЎЎЬЎ :lЎ Xƒ Ўф ЎКѕ4`ѕ4:і4 њ41 ћ4Ў %ђ5 dW5 /P5u5 ^z#Ў‚ 5L&ЎЭ P'Ў0 (Ў Nl5:5U5ТL*ЎГ++Ў /Э5 P5 ц2Ў `ђ3ЎшYQ 5K5 iW5R58Њ‚8ЎаюV"50 =ЎЯ<ЎЈH?ЎBЎ ‰ P.5NIЎJЎџ 05#LЎ „45 HPOЎЃ75СL85щ85 jW;5):<5еXЎS+?5 ц\Ў Q†E5Р `Ў ФldЎ vђfЎAHhЎ1+Q5ЫQ5TkЎю lЎRPmЎ#V5eW5 SWqЎ rЭS5ј> Z5ЫLvЎг^5 3 P{Ўš~Ў Š P‚Ў ЕЭj5Г j5y„ЎТ+†Ў ЩlˆЎ@š‚p5ю‹ЎЬ PЎ`B‚t5Џu5 yWv5œŽЎwЎ/H’Ў0›‚z5Mw5 [z–ЎЅ —Ў№‚–ЎюL~5 ц’Ў ’ђœЎ B‚Ў —ЭЁЎ№ž‚‹5ъІЎ  ‚5:5"‘5 ZPЋЎxЉƒЋЎŒ”5 ДPЋЎH+ЏЎ"АЎˆ ‚“5 nzГЎOДЎ ­Э›5 PWЕЎ№ ‚5ўЕЎ ЧlŸ5ќКЎ]Ё5QЂ5 LНЎџ ОЎ ѓPНЎLP™5 цСЎ QЋ5JH­5#:Џ5j Џ5Џ5LЬЎ cђГ5HЊ‚Д5 цаЎ,аЎŒ LЙ5ЉеЎ ЭМ5 ƒWжЎ ШlкЎь+нЎнЎ.HУ5 mzЦ5B:рЎЈрЎ  ђЩ5$фЎЭ Ы5‚хЎqЯ5 ца5& Lв5 ьЎЈPе5OяЎ ЈQи5 WѓЎ "ђи5!н5 н5<т5 џЎ AlЏU ы5† ь59Џ@Џ Jђя5}H Џ˜Ё‚ Џь+ Џ­ ЏHЏА[‚Џ#Џ ЌQ№5 ozЏ  PЏЏ ˆ1ƒі5 "цќ5 ЂW№5џ5% LЏм 6P6 HP"ЏТP$Џ FЭ%ЏhЂ‚ 6 6 ц6Ў*Џ8Ѕ‚+ЏS*Џ2+.Џ 'Q/Џ@Ї‚6Љ6,:6М1Џ Ll4ЏЈЇ‚6ВH7Џ{ 6 z9Џ(R†"6 UW=Џ ЎQ>Џ€R†%6R>Џ;?ЏvLAЏмCЏY@Џ ИŒ„+6hЊ‚(6 цHЏ +06' L26 OЏУP56GTЏ Ol;6œ=6 žWZЏ“ C6|`ЏyaЏ ­QI6 LPfЏ ђhЏI+N6 #цP6MmЏ JPoЏЮpЏшR†W6  WqЏJ sЏ PluЏјU†`6! LzЏ–b6(:zЏСP|Џ Эe6 g6Д‚Џ (Q„Џ Uђ…Џl6šl6cm6To6 И> r6-ŽЏX+ŽЏ9H“Џ–Џˆ –Џ ЋQ˜Џ  P—Џ Ul6 W„6йžЏШL†6 цЁЏУ‰6`ІЏЉP6К Ž6 KP’6‡”6 L•6іЏЏBГЏ _Эš6Р1 ›6 QWЖЏФ6aИЏ ЗЏ QКЏ+ЗЏ VlŸ6 цЃ6м Є6€Њ‚Ѕ6:ПЏЮLРЏ  „ЗЏ ђЉ6jЪЏИ[†В6 PГ6UЯЏ \†Ж6_аЏpHЯЏ@PЙ6žК6 VWбЏ QдЏъеЏ  иЏњиЏ QlкЏ ƒPТ60 Т6( LоЏЫLХ6bпЏјЧ6LШ6Ш6!рЏ+Щ6 цЫ6юЏ №Џ №Џ ŽђєЏ ЊЭл6 XWѕЏЅїЏ:јЏ Rlн6 ƒzћЏtHўЏ ЂPџЏ XQх6 %цш6Wъ6Fъ6 Lэ6˜ю6`я6§ я6:ё6CАЬL А— А++ А ј6  цљ6 Pњ6 WWќ6‰А iђА SlА ‚P!А WQ"Аћ"АbH#Аm P%Аˆ+ 7Ї&А 7˜Њ‚ 7 z*АЭL/АsH7^7$ L2Арє‚4А Mђ7е7 [W7Аѕ‚<А ѕ‚=Аї$7„$7:$7 L P<А TlAА1AАр *7р> FА;GА‰LIА P27wLА ‰Q77 ‹zRА<7П WА Ÿђ>7шC7 sW^А+_А <l`АHbАт bА а> J7 :K7ьM7" LS7ЋU7 ьPsА ЄђtАз\7 чwАuHzАЄ`7Nc7Ёd7Yd7 ЕP}АЋ g7ИЊ‚}АCi7 tWАѕ+c7 Œzl7‡А bPˆА @Q‹Ањr7y7# L•А ЋЭ—А !l›АИА7 „7цžА@ѕ‚žА HЃАS†ЄАK+‹7фŒ7 Šz7ˆ7 ыP7 wW7:ЈА(S†ЋАЉ­А„‹7 ч7И<0 АА ePБА „Q›7Ž ЖАuЖАЊLНА &lЅ7IСА №Ž„Љ7ŸФАІ+ЦА  ђ­7ЊЪАЮ В7 #PЕ7 ‡zЖ7 vWЗ7VвАaЯА wђМ7ƒ О7"Ф7$:тА‰HЩ7LЪ7qфА hPтА Ј2ƒчА  lщАE щА+щА ДQв7љд72е7 ж7 EWіА`м7јА ђт7Ÿу7 $PќА zЭх7 ‰zБ $lБšБЃъ7%БDБ„+ Б gP Б ЕQђ7э Бб Б‘Hѕ7ј Б *ЭБ ђњ7Hќ7 ч8 Ю P888 –W8a8љ,БН-Бƒ+Б (l/БHS†0Б ‡Q.Б –ђ8 ˆz89:4Б`S†5Б+3Б _ƒ8 (P7Б  9Б]:Б fP!8Ф "8L<Б“H8  @Б–AБ Q(8і+8FGБ †ђ/8Ь1828 =WOБ  QБ?+88щSБ  XUБ %lWБ€S†WБmWБЌZБa\Б˜S†aБ Ш_…G8  zaБ ˆђdБPK8ƒ L8 M8іM8/:eБ§P8 чR8 ]WS8GT8ЭU8 PlБeHmБ @QX8  PsБ\+Z8  zyБ—H`8№zБ{|БU{Б )lyБ ˜8ƒe8-:‚Б ‡Бя n8…q8  чt8В t8 ’Б`ѕ‚|8E˜Б HЭ8x8 9Pƒ8ƒ8K:Б 'l†8 АzЁБ•HЂБжЈБ ГЭЉБsЉБ ` PЎБвP–8 \W—8&ББыДБ ›85:Ё8 –PМБL+Є8DХБVЌ8п­8рЊ‚ЦБ ЂЭГ8\ Д8GЗ8@LбБ”HгБ ѓЛ8 9 PО8 ЎzР8N:кБаS†мБ X. Ф8пБшS†рБI+Ч8 5PФ8 чрБ ѓЪ8tфБP. чБS чБГЯ8@Я8Q Я8 WщБ`эБ ѓе8L:ѕБам8щн8 Џzо8ALр8 чс8DВŽHш8Aщ8;В! ВтВ@э8јЊ‚Ві+ВPPь8  В FѓВъВ plљ8 В ДPВТL9 9–9?L9@:9 ч!ВЕ 9Ч"Вˆ В 3ѓ)В ?Э+ВУ+9 ч.Вх9Њ6В˜H9В )l!9"9 P#9 HW$9м%9[<ВWP=В  O„(9A:AВT†?ВхL+9 Іz,9ВLFВ. HВ‡+;В  ƒKВЈ. 39І PВ u…PВь89HQВ ЇЭTВTPВ ѓ<9™WВL WВ‚<9" ZВ |Q\ВщL\В PC9 ЄzE9А G9$G9:gВHhВк+iВ hѓpВqВPV9 Y9  ш[9 ЅzyВwzВ# a9P|ВшLe9#В xlВ Bѓj9 §Pk9% …ВU‡Вй+n9 ~W†В 9Эp9‚ŠВ nPp9 €. s9 zt9Il9! w93:“ВYP”ВД >ѓ|9њ|9 шšВHžВ uQ…9VŸВъLЁВЩ ‡9 oшЇВN+ЇВ ЭЊВ ,ѓ’9єLЏВШ. БВ l™9J™9ћДВ иї‚œ9  œ9O:ИВXИВ AЭЁ9СЃ9 —zОВ ^ѓРВж Ї9 ‘WЈ9/СВЏУВ(СВНLЦВUPЌ9 pшІ9R Џ9В9 ЬВm+ЭВ–HД9 аВ ФPЙ9:гВ/К9 •zМ9 i PжВр. П9 шлВѕнВ Х90пВ ˜lЪ9 цВŸшВБ+Я9їLщВвб9 –zщВ  ѓе9Dз9и9<Hй9=:єВ №’†ѕВ 0> іВъ и9 јВгп9ђ љВ IQс9 ”WќВеPќВ ѓф9jх9 А_O ГžLш9 zГHы9Г БP№9йё9 g Pђ9: Г>ГeГVPГ1 Гќ9 ў9EГт+Г 2ѓ:јL:b:Ђ::;:+ГЇL:-2Г  ѓ4Г-: : 7Г8ГŒH:Г7!: qW<Г  =Г ШQ=Г `8ƒ&:HAГ,+(: wz*: :,: h PFГ 8Э/:V4:*5:OГSP6: $шSГ ЊP;:щ<:`VГ [ГЈLE:_Г5+G:т G:фH:':aГ­ bГ . cГШƒeГЖeГ ЩQO:ygГ `Y„hГ™HR: mWjГ 2PkГH . M: 'шpГ †T: rГ. gГ =tГ ˆ†vГ _ѓwГ^xГЫa: P{Г ГМLf:e Lg: %шg: ƒГз+†Г ^l†Г Эp:q:‹ŠГHs:8 ŽГTPu: ЗPГ’H‘ГГ JQГ -ѓz:^{:њ z:Œ|:!~: nW”ГД šГЂL„: &ш‡: xzЄГDІГ 1ѓЇГ 6QЈГЉ+‘:Ч ‘:К‘:":–:АГВДГ‡ЖГ 8lž:НHЁ: )шОГ  ЭТГQHЊ: oWЊ: zzЌ:MЦГЋLЧГЏ:№А:&:ШГ§ ЩГXPЦГ  PД:ВЩГ 6ѓЖ:† бГ QЗ: 2шЊ:: К:@дГ 9lзГ йГ x. С:VУ:9 Х:ОHпГИЧ:ЮфГБхГ RѓшГЮ: /ша:ъГЄLыГ+эГ œЭе:Ѕж: pW№Г Qи:D єГFHѕГє §ГQPф: 0шш: uzД !ѓь:qэ:юэ: .PД=+№:$ Д 3Q Д~ђ:D њ:И‹†ДЁLД§:?Д) Д Д МЭ;– ;S; lWД Q;‡LДў+Д8њ: 1ш ;cД Zѓ%Д фl+ДЎ; Ћш,Д Xѓ; 2Д P3Дѕ P6Д Q;5; !;D:"; е P<ДкH$;?%;Ј=Дк=ДІL@Д+BДFAД КЭ+;G ,;\,; aPEД= IДб0;H:0; “W'; ЌшQД ЌЭUД xQ;; wшA;Д[Д TѓC;:D;ќC;#LbД PL;ъfДІN;мHjДнHkДimД ƒnДЁmД №ƒpДЉLX;х];Z]; ŸWwД0 `; :]; b;* }Д~+c; MшƒД)j;„Д ˜Эl;0Ln;`o; z‹ДT‹Дтt;Жv; y; ЁW•Д P|;H•Д XQ~; ‰PšДоH; Zш„; …;[ ДЃL‡;кЁД' ЁД@+”; cWБДя˜; ™;ž ˜;3L—; |zœ;uКД @„ПД \QРДPЇ; йшЈ;њФД PЋ; PЦДЊL­;SЎ;Y­;1:А; kWЧДЕ+ШД ЫДнД; NPЮД"ЮД ѓЗ;ЁвДпHЙ; ‚zК;д еД’гД ]ЭС; dшТ;+LУ;DпД *ѓуДЦ+Ы;+:Ь; TWцД uЭэД Pе;hж;Xз; ŒPяД [Qй;к;"ђДЅLѕДq ѕД ЈкF м; шп; 6Pр; јД hƒу;E:ф;cџДšЕ§ЕS+ЕZHџД Zlы;*L Еиє;Лѕ; ŒWі; ї;:і; Ш> ЕсHџ;Е P< hP< }zЕъ+Е%!Е ^Q<,<ї $ЕХ <-&ЕЪ<< ™W,Е <7:<H<2L8ЕKL;Еs<Е+;Е ]ѓAЕ #Э(<2 )<V+<š,< —WGЕ  lHЕ H-< €zMЕ,5<ЧSЕƒ SЕ ]QVЕ ОЭ<< Žш?< :ZЕRLA<&L[ЕрHC< , PD< ]W]Ег+bЕзgЕ ЦPM< FшQ<§mЕиT< T<VnЕnoЕ [lrЕС U< ztЕqЕ НЭmЕ .ѓb<P:c<"d<Дc< МP~Е‡PЕWLЕn+i<3 ƒЕ­…ЕjH…Е _QƒЕ ИЭn<‘o<)Lp<Б‰ЕQ‹Е ЭPn< А(/ „Е %ѓb< m<5 “Е l”Е|< ~z}<І}< $WšЕ Iѓ›ЕєLœЕ”+ІЕ:Œ<їЊЕ ‰PЋЕ  ѓЌЕ 4Q’<c ЎЕ LЭБЕNL˜<ГЕ ™<1Lš<Fš<6:ЗЕ ЮPИЕёœ<qŸ< zЁ<7 Ђ<ƒНЕ+ПЕ ЭСЕСЕ+Њ< бшЋ< зPШЕ [ѓЬЕƒГ<Ш‹†Г<.:бЕiLвЕЬ Й< К< „WеЕHиЕ ЩPйЕ GѓС<Џ С< нЕ‰PС<4LпЕ ЭрЕ QС< ашЦ<6 фЕ€хЕ!хЕOLчЕ+Я< `. ьЕІг<Zе< žzяЕ iѓи<!:й< "WїЕp”‚п< YPњЕ ЬPљЕ UЭт<№‹†ф<(LЖ6 ЖmLЖRHЖЎ+Ж  Qч<$ю< zё<œё<ж Ж ylє<gЖ  ЭЖHѓ<S Ж(ЖQLљ<8:Ж dѓў< rWЖfЖ ЫP=E #Ж+&ЖШ =В =ѕ =­ =-L&Ж Cѓ,Ж,Ж˜L.Ж  Q=:=3/Ж ј. =A 7Ж 0ѓ8Ж ;l9ЖUL = :W;ЖˆP<Ж ЪP"= Cш$=k?ЖI?Жќ+%=У DЖ† EЖ&H,=C KЖ  QMЖ|4= ){:=T ;=ёWЖоL==/L>= PшF=# dЖgЖX+hЖ JѓiЖйjЖХiЖАiЖPLlЖ 5QS=’W=isЖМ tЖ MlZ= =WuЖ sЭ]=ы]=^=<:^= Р. yЖ ѓc=№ c=$ f=ЦЖVLf='L‡Ж Эn= “WŠЖEŠЖf+ŠЖ wQq=0ЖZЖЭHv=% •Же }=V:˜Ж $P~=žšЖ Yѓ›Ж yЭˆ=Ђ ЃЖСЄЖSLˆ= ‹=.LŒ=iЈЖ ЗlŽ=zH= (GЋЖ Eѓ’= …W‰=> ”= {ЏЖB+ЎЖ ІЭ—=ГЖЏГЖ,š=X:ЙЖК Ÿ=!НЖЮHІ=? УЖ 0і‚ФЖ—Ћ= ({ШЖ*ЪЖ RQЫЖ™ЬЖTLЬЖ ЛlБ=}Д=јБ=ˆLЬЖ ѓИ="Й= uWЙ=@ Н=РС=Л У=  {оЖ ’ PШ=:фЖ“цЖ'HЬ=U Ю=щЖ„ъЖn а=5LюЖф+д= ЃWи=ьѕЖ ‹QѕЖ Кlм=‘HјЖ "ѓр= §Ж/Lу=%ш=M:З GЭь=(ь= &{З ?ѓэ=/  З З QQЗ!З&і=Tј=,LЗ “ Pі= ЄWЗJ+ќ=‘ З ЙЭЗ Мl>Э З Dѓ >’H&ЗХ(ЗЇ +З Э>М/З.4Зљ>ф 5З ѓ8З ІP> ›W>З L?ЗЊH@Зё+AЗ lAЗ p‹„+>>->0 />­0> '{1>iHMЗ}NЗ# PЗSЗ!:>vUЗ (ѓ?>@>J:[З Нl]З `QE>SE>adЗн+dЗ ЭO>м kЗlЗ HѓS>  ]O pЗ™Y>H[> MWvЗЎvЗ ЈPb>х}З Оlb>вc>::f>'|З Эd>1 …З{ ˆЗ[+o>z ‹З [Qr> Lt>Wu>Hv> w>в’З ѓ”Зи”З >Э|>:—З˜З‰}> ™W|> Ўш‚> žЗ ŸЗ ЋP†>щ†>”ІЗ _Q>&ЋЗ ѓ˜>ф ›> ИЗТКЗ1МЗ eѓЄ> ^WРЗ№ ФЗ QlЊ>–Ћ>‰Ў>ЩЗ?+ШЗ IЭЩЗ cѓД> шД> зЗ ЌPН> bWиЗ шЛ‚кЗ  лЗXС>‚нЗ LѓпЗhQƒрЗHХ> Ш> XPцЗ ЯQчЗ(Э>U цЗ XЭа> "шыЗ~+ьЗ№‚‚в> д>}д>2:№Зж>‡єЗ ѓл>ЇћЗ>ќЗ ф>И ­Pш>Вщ>zLш> ишы>Иу+И кl И ѓё>цH И вQѕ>:И ЭИ–И?ИУ "ИЈ$И ъP?І?~L? -И ЎЭ?1ИK ? P. 6И йl7ИЪ+? "?‘ "?I:>И >Q?И№%?Л%?љBИІ&? >PFИ ‘ЭHИ4/?‚LJИHSИ 9?ъH;?ЄSИ 7ѓWИ vЭ\ИV+]И\И Ї P\И \l`И гQC?–D?|cИэE? XI?š J?@gИ OѓI? P?LjИ ~ЭmИѓX? +P[?@Œ†[? xИ Э`? бPa?е zИ ѓd?‡€ИX€И ыPf?) …Иl+ŠИ ?Qs? =Pt?ƒLИ Эx? ­ш•ИB–И %l•И ѓ}?+ ?v€?4?щH‚?Њ†?U:ЁИ Ј P‡?Dˆ?<†? Ф PŽ?" ЊИЋИ дQЌИ! ЋИ )ѓЎИ wЭ•?* ЕИPЖИHЖИ  lКИј+Ѓ?0:ПИTІ?•Ї? Ь PЈ? ‚PПИ ЭЊ?ЬЋ?ДЦИDЧИу ШИ Њ PЋ?  . РИ ;ѓЅ?; Д?ъ Ж? ‘PвИQгИ  ѓжИ QР? Ш PР?< Т?‘рИЫ+Ц?{Ц?:Ч?@LыИ§ в?„г?ŠэИ ДЭг? 8шэИ € / в?= ђИ ђИ Љ Pи?jѕИ‘ Pн?› љИољИ§И}+ўИ Sѓф?V ц?Ец? :ч? Э Pъ? іPы?IЙ ЛQ№?  Й} ѓ?•L Й Vѓѕ?PŒ†Й YЭј?Й MPњ?xњ?Mќ?єј? Oшў?2 ЙEЙQ@Џ ЙэP!Й €5ƒ"Й Ўl @%:%Й Kѓ @ Щ P@ љP+ЙH.Йo @ Hш5ЙML@x 5Й ѓ @с&@DAЙ&@С(@DЙDЙъ+FЙ ЭKЙ 3@ШL5@ жPPЙ7@№ 7@ ’PSЙ лP5@ 9шPЙ MѓWЙ ЭA@3 \Й}+D@ЙD@G@€eЙ +ѓN@ Ч PiЙ…LO@bjЙ "ЭlЙЮR@4:nЙ5nЙ4PQ@ а. sЙ &ltЙЦY@yvЙР vЙЂ+Z@Ј ]@ њP^@!}Й ѓ~Й Эk@k@ :p@лr@ qшЙ‰LЙw@в x@ Ы Pz@4 •Й ЗЭ–Йо|@'˜ЙD+•Й Nѓ€@r€@ ŒP‚@ XXŸЙ1 Й‹ ЁЙьP@s@ ‘@ ЊшЏЙ Rl•@JБЙˆL—@sЏЙ $Эš@AАЙ P / œ@k˜@ ИЙ6PЙЙ= @IЛЙ+Њ@ ХЙЌ@›Ќ@ TPЌ@ cшЏ@ ЪЙ  . Е@ѓЖ@вЙYдЙШY†еЙы зЙ \lиЙŠLкЙy+Т@IнЙ WѓпЙ @> Ч@ Ы@?ъЙёPа@вLб@$б@ Ъ Pд@ е@П№Й‹ж@Єд@ дPб@ ‰шєЙ§ ѕЙе+к@ YXз@& јЙKп@5К ѓК Ylь@ †шэ@€Œ†ю@F:№@её@Cђ@Iѓ@@К— К-і@' КиК ˆ8ƒКHќ@g L§@ ~шК7Pџ@AоКЗL К+A‹#КAT:A кP A( 'Кb (К'К ]l3К•A^4К KЭA>Aˆ LAB :К<+!A .{"AН "A>КŒ ?КЛL&A!AК5P&AI(A:CК РЭ&A }ш>К /ѓ0A LК {ЭOК ZlPКH+9A дPTК @8ƒ;A 3BЂ4BL6B Эш8BGBZЛ ‚l[Лj BBИЎƒ`Л~`Л\+bЛjLFB;IBгaЛ  ЮhЛNBŸRBюRB;TBj LUB ЯPUB ЩшXBиQƒ[B%\Bb wЛЉwЛmPvЛ ЮzЛ |Л †l}Лі+|Л gѓfBЃhB 1iBjBp$ƒ‡Лj‡ЛkLnBopBs LrB ФшsB;Л Q‘Л wBЬ yB; zB ЮP˜ЛВ ™Л'›ЛЙ+œЛ!ƒB Чш„BЩŸЛ 4ѓ Л ‡l†B ‹BvB Й PBr L“BHмF •B–B ЮшšBy œB(ЗЛ}ЗЛъPЙЛyHКЛlLЛЛE МЛ­+œB/ ОЛ:ПЛ …lРЛ OQІB ЭPТЛЌB~ЏB$БB- ВBm LДBх ДBdКB YшжЛ$лЛQ СB рЛŠтЛ lуЛ NQЫBЅЫB-ЫB К PЮBЧщЛQ+ъЛ8LЫB вBxмF вBn LгB кPяЛ дB зB иBГкB ДшлB лB0IоB<оB §Л‡HџЛ Р‹„М<чB9 М єМ ^QюB юB LёBБ М^+М ЯђB& М єМН љBЉМ lќB йPџB1IМ %єCCQC7 C< М`C [ш"М‡М %М  C 8P'МH%М (Я*МеLCђ,МA+1М C‰ L4М єC‹C97М •lC‹CЎ:М wQCMI&C еPBМц*C` EМ„+C Kш,C( 3C<6CŒ6CI RМ  ЯSМFTМиL;CYМ›+[МHBC) ]М |Q]М –lDC+ICCl LGCYGCF aМ  єeМ ‹ЯKC шOCJ QC>lМdSC<VC…WC жPXClpМ єtМ=+uМv xМTH_C‘^C {М|М,~М “leC LfC 8 PМ {QdC :шiCЬ ƒМ єfCA ‡МšˆМйLqC% МT+”М6•М ЂЯC œшC1 М —lžМ ˆC зPЂМ єC$ CGCž C‘ LЌМŒ‘C DшЏМААМ `QБМр+•CДМP ›C“›C(IŸC0  C<ММНМHLНМ ”lНМ ”ЯЉCu LЦМ=HЩМ АC‰АC IшБCS ЮМ PPЮМ zQаМXаМE+ДCˆЗCŒКC иPеМиМ ‡ЯПCY РC <СCL ТC–уМ› уМ\LфМ lЩC} LЬC МшЪCU гC{яМйяМ+жC RPђМ ЯзCW іМ єїМILоC гшуC[ўМ. фC” цCƒ LшCT ыC<ьC мPНdН]LэC”яCR НѓC  шН QН# Н  єєCZ НБ+љCэњCPН є PНh Н ЄlН №„Dь D)I"Н.L#НяH D[ D Do L D шD<-НD”DD АшD yP7Нa 7Н„D лPD D›?НЗ?Н Јl&D)D* *DD/D| LKН0+LН &є4DK 5DН6D uш7D"8D ~P:DtVНVН @Q О єщD LьDp…ОpОL О эD p…ьD<ѓD8p…ОЁѓD ОАLcО єО ‚QО VlEPp…EIОs+О E‡ L!О-EŒ E гP Ehp…Eџ(О "єEw+О<P.О0. 0ОжL5О !P6О: 7ОГ+E E ;О> <О AQ*EGОGGОЪ-EЎ0Exp…KОNPLОў0ENОкL.EŠ L5Ep…/E вш:EJ E [О є]ОŸHCEтbОч HE УшdОeОEQESERTE‹ LoОйLpОи7/ oО аPUEъsО7PZEоWE A{vО ’ЯwО>rО є|О#,}О lcEЈp…eEр€О- €О ;QhEРp…ƒОBP„ОJkE B{lEшp…mEјp…nEimE аPjE ЉшqEI}О 8 . qE vE L“ОšH“ОлL{EЏ|E Џш›ОIE F{žОз ‡EђЅО 4PЅО ?QІО +lЈОЗŒEјE PEW“E ›ш”EЏО_H”E% ›E| ЖОъL›EIE D{ŸE <PКО-ЄEp LПОx ІEpД‚ЈEBЉEхЦОBШО >QЏEўЪО 8PЭО ,ЮО?ЖE ШƒЗE€Д‚ЛE<МE˜Д‚зОЧиО ЈƒйО„ PРEq LСE| УEьЦE•ЬEјЯEIдEѓО  QєО lкEzмEАД‚нE C{пEw LњО <PсEШД‚сE ЫPП ,цEрД‚шE NшПVП† ПщEјД‚ъEыEЕ‚№Eш ПPіE#їEєПП zQїEIП` LќEsПБHF… LП јHƒF А„%П &П5+ПІ+П‘FЯ.П VP4П*P!FЕ!F P P$F Яш%Fv L&F Е‚BП gQ(FI*F +F8Е‚FП GП/HП @P/FћJП”0FЉ0F ‚1F <NП !l5Fk PПc L/F §P)F Eш9F0XПДH?F cXEF tшbП QHF LdПы dП-,jПЅPUFEWFЂWFњtПЉuП —Я\Fx^F˜_FH‚`F P{П Xl^F <X}П ;PdF`‚eF ѓPfFx‚`F zшiFˆ‚„П<‡Пј7/ mF† LnF ‚ŠПd LrFYIsFІ ŽПYПž П@wFuF ƒшzF SX–ПЕH—П,}FљF˜œП  ЯžПZˆFфЈПЈП )QF #~“F PЎПс ”Fk LБП l—F ZP›F vшœF эXžF3ИП ЁЯМП 9PМПЂPОП@ЃF1ЃFѓЈFXIЧПLЎF ­F !~АFР. ВF PаП ,гПК жП  lНFхНF ЬPОF ›XРFЭСF€ LлП  ЯОF ˜> ФFФFИ‚СF# сП >PЧFуП8/ фП ЖQЫFhIЪF "~эПЇйFцѕПKHіП)PїП  lнF ТшрF +XсFШ‚тFцуF›фF PРV цFs шF $~Р -є РhL№F­ Р бЯ Р ЙQ Р РyѓF[IђF Р> Р,ёF РNHР :PњFр‚РЏP§FїўFФџF žXР  lР +єG <G )~!РЉ GдL G Рш'РІG^GZIGьGуG + P0Р @ƒ4Р *QG '~<Р 'є=РYH?Р l%G ,X'G‰EРOHFР КQ-Gі-G 01 IР AP/G{0G<1GŽ4G OР PPР 5G (~RР (єSР%;GзLXР,BGсDG шaРHHG ŸXfР ,єgР UlMGfIiРJNG bPPG ~RGBLG TG ЇPoРHoР +QUG•rРˆVG[uР жPuРP]GO yР єzРрX|Р lfGиL‚Р iQƒР.†iGшlG -XnGeIoGpU„ŽР =PР јEtG  H0 ‘РЩ’РрuGIxG ˜Р™Р,Gђ G†œРи ‚Р HœР  lƒG=‡GSЂРPŒG§G )XŽGX GjLЊР88/ ‘G`IЌР VQЉР є•G ~–GF˜G ЕPŸG=ЛРPЁGjОР єРР lЈG | PУР %PФРсLЉG†ЦР‡АG\IБG ~ГG•ДG *XЯР єбРИGывР ХЯЛG%жР.,жР =QМG2 СGЁФG=ЧGиLтР  lуР€PфР1ЪGацРDHЭG ~шР єЯGjIъР–аG эР 7PгG кPдG=№Р РЯёР,ѓР EQкGjкG ~ PкG XїРPоGBћРјтGьхG =цG чG С lэG‚эGlI СЖяGэGфLС WT С!С LњG Сш60 ўG ~џG ъXСPH  СaH^ HiI'С ?P HэHжHh. +С ЄQ+С l-С ѕ.СHтLHH›H H§ H } P8С ОЯ9С LHџH=<СAPH ш>С',>СУH8С ѕ'H X#H )HЌ*HaIDС ѕ.Hs.H 0H Пш1H1H }PNС ѕQС!,QС ЇQSС2TС0WT 8H& =H >H4YС P?HЦ@HсLAH [С ;ѕCH EHУ_С МЯFH СшbСђLJHmIMH ыXOHmС ЈQnС Р„tСЧHuСLZH†[H=^HЙ [H ЛшbH  PcH9eH {P€С&,iHоLjHїkHkHbIˆСsPpH=sHбŽС ФЯvHЭ‘С FQ’С,vH ќXxH ~•СR–С lƒHcIžСžСѕ†H• †He†H=ЃС QЄСК L‹HЉС@WT ЊС зЯЋСšH‘H ~­С  PH Bш•H/–H cPБСЎP—HуL™HДСЦHšH›H =™H ~PœH pXЙСPWT ŸHdIЃHШЄH ~УС еЯФСe­H дшЩС,ЫС*ЬС ‚lДHR ЯСЪ LЕHmДH =ЗH.ЗH ешжСŒНHkIОHНHлLРH XСH ~СH [‚СH рС :ѕЧHрTƒЧH APфС;HхСєPхС PQЫH™эС'дH,дH |PжHЌ ёС О PёС …lкHоH ~њС ћСР LќС,рHхLтHфТ7ъH}ыH XьH =Т`WT юHWюH p. ТѓPђH  ТpWT ѓHŒѓH–Т l Т GѕјH ~Т шPТТ жЯIмLТ  QIIЋ !Т P”‚ I‚ I‹ I | P+Тл+ТТ L+ТЏP+Т †lI @X1ТWT I_II ~IФ 6Т†H7Т,I {ш9Т ќP%I• @Т QAТй&IE'I['IUƒ&IрL,IFТ CѕHТІP/I,>0IД0I P2IМ4I ~RТ ClSТN8I !P8I WТШ L?I› ZТ ћP?I]BI А. [Т ѕDI щX`ТНHI‰KILIœ gТPHhТ&gТ ŒQNI ~QI SIнLpТ,rТ)rТ EѕZI ZI 1P]I>^IqzТ ЮЯaIи. bI.jI ~…ТФ L†ТrV‡Т QkIЯjI ˜ƒŠТ ŠТЇPŒТ ^lТ$pIЪtI[>tI]L‘Т WT wIпL†Т 9ѕ|I› }I ‚ш™Т PšТIn…I[ ТH…I †X…I ~‰IW ‰IFŒI JЇТ,ЇТ QЉТ"ŽI LшАТш–IЏ–I˜ ГТ alДТŽHЕТЋPЖТН L›IœILšI t PŸI• ŸI  ~ЂI^КТ 3ѕТТ­I ‡XЎI iP­I ˆŒ„ШТ >ѕЕI™ ЖIЋбТьгТ blдТ82†ЙI\ ЙIЩЛIM>ОInОI ~СIлТ вЯоТ#ХIVЧI  . фТ,чТLшТЌPщТˆаILаI u PгIž еI ˆXђТБйI ~њТБсI šшќТ -l§ТХ LтIгУ DQцI›У ,ѕъI >эI ёI|ѓI JшќI Д PУ УЊPџI ‰XJM У 6ѕJ'Jb"УМ#УH2† J v P Jš  J шJI>)У,J J -Уч-УX2†0УЬ L0У ’lJ{<У$<У žQ"J“%JЕ )J …XFУ0/J;>KУЇP1J 6ш6Jќ6J Г PTУMTУ:UУС LTУ “lTУ гЯ?J  >JЗ [У &ѕEJПEJ" aУ“HFJ”dУAJJ 3шMJ&>lУ,RJ „XTJИ rУ  ѕtУtУx2†ZJ“\JЁ]J 4ш_Jд zУНP{У6yУ *Я€УЧ LjJА …УŸ‹УА‹У „QrJxUƒqJ IPŒУ  ѕwJ 7шxJ XyJ˜ zJ'yJ?>—УH~J;˜У &Я›У8ƒJ1ЃУ *l‰J Кш‰JГ ІУ  ѕŽJѕLЉУ,’JR“J4 ВУЩ LšJ/šJ XшžJvКУ2ЛУ ЯМУѓЂJ OPЅJ|РУ ѕІJЎ ЋJјL­JdБJ>ЭУAГJ ГJ Ж PаУzPЯУ . вУB ИJќЛJœзУУ LПJ шРJѕJкУ @ѕСJД УJ ‡пУFHЦJ>ШJ ~XуУКЩJухУ €lЫJљLЭJ‡шУ,ЮJKъУ<ЯJxаJ3 эУ˜2†ѕУ@лJБ пJ ш§УLўУˆPџУ <ЯщJыыJ XФчяJ@ ФЫ L Ф blђJžФ›HФ *ѕњJCћJК §JCўJ€ўJќJK7>Ф 4Я!ФЋ!Ф/,KŠ Kw$Ф ѕK X,ФK ш0ФГPK,L2Ф$,3ФWHKВ 6ФGK§J:ФО L?Ф%Kk'K€+KТ-KO>.K– 0K шNФ cl5K XPФИ2†4KЛ SФЖP9KUФ#H>]K XyФrPzФ flzФ  / €Ф:gKЖ hK‰†ФЛmKŽФ 5ѕvKа vK;vK  “ФЏH”ФS“ФИP–ФП L}KR€KK5L‚K X›Ф лЯФ =ѕƒKЙ ˆK>ŠKJŠK   PЉФ glKи KOЌФш2†­ФЌ‚­ФкЌФ1DБФŠPВФ QДФ ?ѕЖФ ЯМФГHОФЗPПФ%,ЄK“СФЦІKЇK >ЈK“ЈK XЋKŽ ЧФLЄK щЩФiАKЇK4 ЬФ 8ѕЮФ,ДK вФ lгФБЙK‡еФ3МK gPНK›КK дФ мЯЛKH‚ТKN>нФ‡PФK щрФ",ЧKЇрФ ѕЩK bXЫK+ЬK’чФДHЬK0LгKn №Ф ˆQїФ ЯоK†§Ф €ƒфKџФgхK\шK ™Х*ыK Ё PьKЇ ХЌ‚№K\ ђKИ‰… Х Ќ‚Х vlѓK >ХѕLњK‚Х§K KXХВHL4LХ ЯL #Х,&Хt&Х ЮQ LЁLбL$L L ž1Х@Ќ‚L X6Х‚6Х |lLœ L!>L hP;Хт L;Х +ѕ?ХAP+L/,LSGХы.L-Lџ KХ вQLХЖHNХ4L>PХ иЯ7L XNХ ѕ9L ›TХ,:Lа ;LАUƒ=Lи:L ZХц L[Х ylAL˜> ^ХJ`Х ЯIL’dХшŠ‚JL1LjХmPL Ѓ PpХ SЯqХ бQZL(>tХ P. ^LФ yХИH|Хх LХ;eL^iL šjL4†Х {lmL:‰Х,oL7ƒŒХЅvLВvL hXХ $ѕ”Х]™Х ]Q„LTЁХч LЂХœPЃХ`Ќ‚‡L3L‹L Ђ P‹L2 L œЉХ YЯ‘LКЌХ Dѕ”LŽ•L ƒАХЗH—L-ГХœДХ zlЕХ9ЕХ•›L gXЁL/ ЂLХПХ ѕЧХ mQ­LE>ЎL) ЫХ WЯВL€ДL ˜. ЕLИJЖL-вХ1ИL ˜дХ,зХ FѕРL ^XлХЕHТL-нХpЌ‚оХ lФL BPХLR>ЦLЦL7фХхХNЫL/LЬL щшХ qQфХ .ѕыХxLбL. ьХ UЯєХ лL €[‚пL^ћХ ј‹„тL іXуLЊхLшЦIцL' щL‚ъLО ЦXP Ц pQ Ц Бl Ц’H№LЌ Ц,ђLзJіLT> Ц VЯЦ Ќ‚ЦhLЦ  ѕЦMhM WX ЦМMАM  M %Ц&Ц'Ц 'ѕ MЮ M wPMЊ M6L-Ц ДlM8MJ/Ц QЯ1ЦlLM M 4X!M!M щ>Ц ѕDЦIHЦHЦ[PIЦ WQKЦ.M2MB>PЦ ЖlRЦkL8MЊ TЦ,9M P;M9M  >MЉTЦ TЯ[ЦŒ \Ц+HAM 3XCMFM p / aЦ HѕHMѓNMQMЄLmЦАЌ‚mЦ ЕlSM?JpЦ BѕqЦ`WM щtЦ XЯvЦmL_M5 {Ц EQaM  XЦЦ˜PiMiMЖkM p> †ЦЫ‡Ц ,lM‰ЦŠmM`ŠЦ 0ЯŠЦ )ѕxM PƒyM ЇzM+zM чX|M>}M |M žЦ HQ Ц\P†MЊЂЦ§H‡MD‡M Ў PЄЦ /ѕŒM VPMTLЊЦWЋЦ’MpšMB žMjЙЦmLЁM щМЦ XQЛЦ 7ѕЃMХ ЅM ЅФЦбЌMcЩЦ JQЪЦ,,ГM5>ЮЦ№NƒЯЦHЭЦ <ѕеЦ.жЦLЛM*МMSLПMђ лЦzлЦ'PСM УMгрЦ2тЦ elуЦ ,ЫMЗшЦ QЯM цXЮM ІбMошЦ -ѕеM h. иMJ>йMbіЦ,HћЦ (ѕќЦ 'ЯуMТ ЧhЧЧ—PЧ IQыMЭLЧюMe№M .PѓM ˆ_‚єMnіM ЄЧ !ѕЧLїMУ њMиЧ ЯќMИ ўMS>ЧOƒЧHџM PЧVЧ ylN щ ЧNр NФ  Ns*Ч 0ѕN гXN§N{0Ч­N X1 N щN Ѓ8Ч?P9Ч №. :ЧL$N.%N PCЧHCЧ |lEЧEЧ OƒFЧ jЯ/N8 L2NвNЧ9PЧ-QЧ0OƒPЧ QSЧv8N№ 9Nxє‚;NTЧ %ѕ?NRJ]ЧDPcЧLINqeЧ_cЧ bЯgЧ AѕiЧ ~lON%>SNWN [N@ L^N=aNQJbN X}ЧP~Ч Q€ЧЕkNѓnNаŠЧBPŠЧ ZЯŽЧLtNH>“Ч l”ЧV•ЧPOƒ•Ч"-NYJN .PƒN, ‡N щˆNA LЅЧ}ІЧNK>ІЧ eЯЉЧ0ЈЧ іЌЧCP•NP—‚АЧLАЧ [P•N<•NЕЧ іИЧ }lЙЧ`Oƒ N6  N$ЅNHJЅN щТЧ \ЯТЧ іЧЧDЎNЮLЩЧЯHБNбЬЧ˜PЯЧ ЗіЗN’ЙN ГКN>МN  щзЧ‚иЧLНN­ОN– лЧ €lТNепЧ fЯЪNGJшЧ!-щЧsPЯN ы PаN2>вNи бN? LыЧ @іѓЧ€OƒєЧLйN h> мN XпNН§ЧШщNˆъN  ыN ЕШ љіШLэNеюNeіN  щШ UPћN ь PШЮHќN.ШШ iЯOB LШ zіO ŠX!ШP%ШA&Ш ‡l OО(Шy OJJO щ-ШL.Ш Oƒ1Ш-OD2Ш гі4Ш:O0 OзO Д6Ш kЯO ‹X&O; LCШhw. +OЩJШ 2l0OhLШRƒ3OЪ NШ TP5O щLШ `і9OgTШ-TШTL9OWJ;O ŽXUШ mЯ?Oж@O8>BO fШ8HiШ xcчPOВQOЗRO> LmШШnШˆw. TO ѓPXOA XO X]OUJwШ ]ЯyШ˜aOЪ|ШжLfO>rO)tO xX“Ш yOЁ–Ш ^Я~O їPšШ-šШлL„O КP…O< L ШдPЂШ OіЄШ $ PŒO №ƒŽO_OЋШoЌШfH“O yXЎШ ]lБШC—O€ —OVJ˜O ˆ7ƒ›OW>ЖШ `ЯžOŠЛШкLНШ#-ТШИw. ЉO§ЊO§ХШ ' PЉO ъЧШmЏO= LЩШ SіБOƒВO јPБO {XЕOЖOC ЙOOJКOyиШ,иШйLиШ nQРO hPлШ qЯоШ ЃірШлсШ-тШ 0lЪO VъгOЊеO ўXеO ёШ + PзOTѓШ  іоO љPљШ>пOVћШLтOMJпO +ъџШЄ‚Щ 'lхOS шO nPяO … Щ- ЩP Щ хііOфјOЩHћOС LЩg§O ]ъЩpPЩ ћQЩ 3 PЩ pЯЩЩиw. PG PP 8ъ P ŒX PNJ&Щ іP іPP mP,Щ clP ‚P=4Щ P>Pп8Щ Ѕі PЦ L;Щ&Pa BЩ QCЩ C P*PKEЩ oЯ.P  X/P 1ъJЩ1-LЩ fl2P3PBJ4P„5P МPQЩЅL7Pб5P †RЩ і;PZ>VЩ—]Щ2^ЩМHCPq EPDPХ L_Щ хЯJPїhЩiЩBhЩ QPP IъRP ‚XmЩ XіnЩ 0 PnЩ hlUP fWP oPXPТ XPSJuЩшw. [P|Щ }Щ$-bP7cPФ LePTeP=>‚ЩбƒЩ Ї‚‡ЩО‰ЩіŠЩL‹Щ glЩСHŽЩ џQЩULuP Ж”Щ 7 P{P = P|Pc |P>zP WъP lPPrPєP9>ƒP X‡Pн‰P}ІЩЛP X2ƒЋЩ 8lЌЩ9­ЩЛP’PIJЌЩ  ЯВЩјw. ™P ЉœPњ ЗЩ+-ЗЩ mQžPрКЩПHЂP ЛPМЩ ЎЯОЩ ­іЇP JъТЩ\ЋP ЧЩ < PБP QXБP]O ЮЩrLДPZЕP1ДP .PЗPAJгЩ ўQКP\ еЩ.-КPМPC>РPqлЩ gіТP kPнЩ ЋЯоЩџШP ЗЬP\гP >гP x. яЩwL№Щ “іёЩfPђЩx. ђЩТHлPKJїЩ-нP VXњЩ €QћЩ 1 PтPAL§Щ ЈЯуPH?0 ЪxЪ!щPЌ щPпщPyюPУяP pPЪ іёP ЊѓP~іP кPЪЪJLЪ юlјP.>Ъ&-§P ЪtQFJQ fXQ–QЪ~P"Ъ еі#ЪH#Ъ 8 P&Ъ ˜Q)Ъ‰*ЪuLQ Gъ0ЪбQ3ЪРHQ ~QфQ СPQ@ ;Ъ*-"QL#QEJ;Ъ ЅЯ<Ъ !і%QŠ 'QV>BЪˆR„)Q лPDЪ  Q*Q€/QЌ1Q eXLЪ 3QwNЪ E POЪGNЪ m5QІ 7QЄSЪvL3Q  / OЪ щі­Ъ’Q љ PЏЪwLБЪ(-™Q „šQц ГЪ "ЯœQ @ъЙЪ  Q КPЂQAЃQыЃQУLІQŒУЪ€ЦЪЭЦЪ 1 ЎQ ЏQ+>ЪЪ фЯЫЪ@.†БQЎДQ uXЕQ ZъаЪWLбЪ - PЖQ‹ ИQWЙQXЖQ њ PжЪкHзЪ2-МQqJОQ €зЪ `]O ЖQ`B„ФQ ЛPпЪ qЩQафЪ"ЪQ \ъшЪгQў юЪdдQh . ђЪSиQ wXнQA>оQ+нQ § PтQˆє‚уQ {фQ 0ъшQ МPыQыLЫїLэQ,Ы . P ЫмH Ы )ЯђQc ѓQ* §QќЫШ§Qњ§QmJЫ4-џQ vXџQ wЫ їіR єP"Ы`.†#ЫФR (3ƒ R&Ы=P RЗ R ЉP'Ы Я+ЫLRЌRcL.Ыp.†R` 2ЫйH2Ы / PR4R3>R z5Ы Эі9Ы3-RlJ;Ы q"Rќ "R#R X R &RN(RfCЫЭ(RАHƒ.R ќ PHЫ иŽ„0R ЊP2R є‚NЫ И. QЫџL7R ъ:R v=RŽ >R>YЫ5-BRK]ЫлH^ЫшЂ‚CRkDRaaЫ 4 PGR ъcЫSdЫnhЫЪORАORжPR [XiЫ ŒіNR˜. nЫ  qTR ЋPWRoJYR x[R< vЫ.†vЫXL_R ў PzЫ -{Ы OЯbRЊ€Ы\ PgR@>hR ъlRj ‰Ы Ні‹ЫEŽЫ quR`ЫH‘ЫўLЫ > PvR”Ыn•ЫЧxR ­PzR ZX|R&}RЭ L€R}JuR y—Ы ш. „Rv…R ћ P…Rg ŠR  ъŒR1>ЈЫ \іЊЫ-“RZ“R ЏЫ—R hВЫ  q›R ЎP›Rx . žR ЙЫњLКЫ ? PŸRЧМЫЃНЫ‚PžR{JПЫOПЫ-ЁRОLЄR_ЅRgІR xPЄR sXМЫ ‚іЧЫЕR…ЗR sЙRx3ƒеЫ[ PжЫ  qЛR НR|JПRИє‚ОR ЏPлЫ LмЫ .†жЫ ^іоЫ DЯсЫџHсЫ @ PЧR rXчЫєЭRЦъЫLэЫ а_O еRзR uзR ъйRuJзRq лRБLіЫMнR- јЫ8јЫ `Œ„сR ГPхRХЬ qъR \X ЬћL Ьr Ь A PяR>№R .PѓRѕRЯ№RїRsJїR gїRn ЬыP§RMЬ<S< SИLS !Ь JЯ$Ь- S ДP Sx SЈ. (ЬSчS'>SŽS ]X.Ь§LStJ1Ь@1Ь2Ь ( PS‹S rS ъ8Ь МіS 1P SГ ;Ь BЯ&S(BЬР.†*SЗLGЬP.SєIЬ„/SР2SiJ3S ЕP2S єX3S˜^T PЬWPЬ -UЬ EЯUЬ Іі=S =S tYЬЈZЬќL\Ь 6 PDS+LS>PSBQSQSx mЬ-nЬ0HTSxJpЬ,qЬ qTSЙLTS }XZSvnЬ FЯ]S БP]S 2PyЬ žі`S ibS  ъ}ЬPiSC jS>jSu mS XˆЬ-‰Ь : P‰Ь qnSNŒЬ ˆЬ KЯŒЬ HіuSДLЬцvSYwSn“Ьа.†ySyJ{SzxS ~S q€Sˆ3ƒ›ЬJ›Ь”LЁЬ LЯˆS ‰S<>‰S ъЅЬ‹ІЬ-ЇЬ  qS GXЄЬ ді‘S ТP‘Sј\O “St•S% –SЛДЬHЕЬ B PДЬPœSЖLSlœS mЛЬ CЯМЬ›LЄSrJУЬЪУЬ -ХЬhЦЬХЬ  qЊS#>ЋSШє‚­S­S HXЏSЧГS ЮЬр.†ВS ъЏS ИS % PеЬ ЯМSHиЬPСS)>ТS ВPТS pФSnJрЬ -рЬ дPтЬ}LуЬ|фЬёхЬeуЬ 6qЪSЕLЭSўЭS IXШS| еSbяЬ  ЯжS лSKлSnоSЈ^T ћЬ ѓіќЬ = P§ЬP§Ь qџЬ ЗЯцS Э-цShJщS $ PъSЙLЭžLыSРэS†юS>эS JX ЭшЏ‚ ЭЦёS ИPшS }єS ъЭhHћSpЭgџSЕЭ 1qЭ-ЭzЭ ЕЯTpJ"ЭPT “† Tн Tf T  ъ T AX)ЭœL)Э ; PT lT ЗP1ЭETЗTiT # P:Э 0q!T’"T† =ЭИ$T&=Э §і'T ъ(Tš)TkJ(TbL-T .T BX/TeJЭP0T k3T>NЭ‘4TtQЭ ) PTЭ-UЭ H;Tƒ WЭšL>T ъZЭZЭ /qBTЌ]Э ВЯDTaITP>ITjJITО MT ХPhЭ$NTLOT CXQT|LRTї RTШSTjTT хsЭP\T ъxЭ ГЯyЭ™L`TиІ‚Э  PgT}gT gTY…Э "qkTJ‡ЭkT П‚Э šіpT DX‹Эœ rTmsT ъЭ–HyT$>”Э КЯ•Э-{TzL—Э—Э™ЭL˜Э Jі›ЭиœЭ!PT ƒTƒT АP†T шTИ]T ЄЭ #qŠTЙ ‹TH‹T нPЊЭ * PTu‘T EXT QъАЭp–T >œT оИЭІЙЭ-žTИЭ ЛЯМЭ/МЭ Y„ŸTц ПЭˆРЭ—LРЭPЇTiЈTѓЊTyLЅT [ъЌT4>ШЭ 4qЏT РPВT FXДT ДTkвЭ  PИT ыИTу МT$МT|JНT ЭPйЭoкЭ ЯнЭš рЭЁLрЭ PЧT5 уЭ3фЭ-ЩT ЌPЫT 4ъЮTњщЭ qЮT ХвTY>гTzJгT ?XжTrжTnLѓЭ 5 PѕЭ ЯїЭ КіоT ЬPпTМћЭ ШQуT ўЭјЏ‚хTƒ ЮЮˆшT ЖPЮ-ъT;ЮмыTrъT{JЮ  Я Ю q Ю‹эT -ъѓT9 Ю  . Ю~LіTѕT УЮ PьT№YT ЮPќT ЮPЮ2HЮ ЯQU\ Ю-UoUjL UJ U ƒ)Ю?U jXUhU Ф3Ю D P5Ю %Я6Ю !qUs8ЮћUs UЪ ;ЮŸL<Ю—U ФP9Ю Ќі?Ю ЮQ U`ZBЮPCЮА‚)U ЌP+U >ъ,UqHЮЖ.Ur2U{L7UУ 8UD7U‹:U чVЮ 2 P=U OXYЮy@Uп [Ю HW†^Ю  qDUŠJ`Ю ЭQ_Ю ,ЯHU 7ъKUsLUРgЮPMUG>QU ЈPnЮ LoЮ3HpЮUUUUU цYU YU„LuЮKvЮ(А‚]U ЯPxЮgwЮ ЯXUм bU#cU Cъ~Ю _PeU aX€Ю ЫQЮ}/‚Ю PdчiUxiU‰J…ЮЦlU>gU0“†oU сpUztUzuU-Ю .q’ЮЉ/’ЮиLzUШІ‚•Ю8А‚•ЮR•Ю"P~Uj ‚U‚L‚U Fъ„UyЂЮ +ЯЃЮ ЬQ‹U–ЇЮ‡ЇЮ˜LŽU ƒXЊЮ/‘UбU ъАЮ–U >šUœЕЮ -q›U ОPœU6UMЙЮщP U КЮ ‹іМЮ €PšUи ПЮы/ЌUrLЧЮaHЧЮdLЩЮcШЮ кЯБU фЬЮлPВUВUе аЮ ЪіЗUk ЗUФЙU RXКU/>еЮ )qЛU§МUCЗU 5ъСU сЮˆ/тЮkЪUpZшЮ‡шЮ СіэЮ юЮ PэЮ QгU ЪђЮ 8qѓЮс/йU‘йU НPмUaнUpLѓЮ !ЯрUz сU NXўЮ– џЮ јї; цUЎчU/ыUЯ 1ЯэU Pъ Я  ЯRѓUp]†їU”їU СљUЯ *qЯы/§U‘Vу Я Я—LVJ!Я ‚PV>VfL V tXV Bъ(Я  ЯV V+Я іVэ V2 3Я” V Ы6ЯkP7Я }ЯVC<Я Ћі=ЯœL=Я %q&VўAЯКBЯю/CЯ'V PFЯXА‚,VJ-V `X/Vt /VL>,Vъ 2Vћ6V7V…L6V .ъSЯ/SЯ P:V ЩVЯ yЯ;V ]Я ЂіEV@r…HVYKV+fЯ›LgЯм/iЯNQV žPlЯ 'qTVŽJTV MXYV"ZV ШuЯ wЯ[V ;ъ^Ve^V†LxЯ hcч{ЯŽaVdVŽƒЯ\†Я ~PˆЯhА‚‰Яf/ˆЯšL‹Я5ˆЯKOŒЯ 3qnVQ>pV5vV@ zV–J{Vџ–ЯР P|V ŸP~V ЧzV ъ›Я/VmLƒV ,ъƒV HƒІЯ `PV PXVмЊЯ 2qЋЯІ/ЌЯ\ЌЯ‚ЌЯЩЋЯLV—–VcБЯ rЯ V РНЯK/ЅV*>ЅV\ ЇV  PУЯ ƒPЊVtLЦЯкШЯ (qЩЯxА‚ЏVй ЫЯТ PВVˆВV’ЫЯ uЯЏV ?ъаЯ?LЩЯ яіИVCкЯ/мЯ ФV•JрЯЩVг ЪVчхЯ $qЪV нцЯ {ЯшЯjшЯ UібVY ьЯВ/вV ”PдVбдVF>кVuLкV OXїЯVнVИS†сV X> сV §ЯŽ уV иџЯ„шVа70 щVД ыV@Œ‚ьV>а іюVl а qяVряV”J а Яа LаˆА‚аС PјV 8XаX/ћV м§V •Pа wіWoLWPB„а gQа EP!аNW 3ъ WХ%а €Я&а…/'а 7q Wv WчW˜W™JW зWp. WU>7ай/7аLW VX:аX"WU >а ~Я?аЃBаA(W –P*W RъFаFа 5q.WX/W‰L0WЖ0Wb4W й6WT Uа qіXа˜А‚Yа(Ї‚YаУ P@W˜J@W UXCWžYа ЯBWR `а МQeа &qfаLLW= MW лOW5PW *ъQWykа ЯSW —PRW oаЈА‚oа[WwL[WШ]T wаhxа]Wd^WX>bW oXfWЈа /Я‚аA/jW Aъ†а qmWњnW—J‰аЕlW НrWО аlP’аw/“аL’аL|W8‚}W ˜P~WM€W/šа |іŸа^‡W pXЃа/‰WІŠWЃŠWgL‰W б‰W /ъ’WcЌа #Я•WР —W†JЖаE/œWє Ка LКа џіМа ,qЂW6>ОаЫЄW'ІW еЇW ™PЉW ФаžPЌW qXЩаЌ/Ъа•HБWѕЗWё КWƒJЛWлКW )ъзаPиа6НWsда bіла +qТWeLУW ЛХWFЦW ЧW>уа :QфааSƒхаLцаŸ/ЩWЂша ЬWЬ ЮW)бW “Pьа .ЯгWžгW rXяа4эа _іаWƒнWМјаL/нWŽњаBHрW…J§а qфW фW->уW ЯцW HъхW0Œ‚б эіюWњ№WP бˆ€‚№W бРѓWƒLбPбР/б AQбLбQњW nXћW§W&Xw X šPб •іX гX„JXG "бэ/(б йЯX X>/б DQX LъXc2бnPX0>5бLX zX7б $і8брSƒXј. X"XD =бЁ$X€L#X Ц'XˆJGбm/HбJбfJб EQLбЕH0Xѓ 0X ›POб kPOб Ші2X Sб $ЯX+YбЇ‚YбТ/AX {XBX">X Mъ^бL_б[QX’Joб 8sWX KъsбvPtб\X . \X Э`X œP{бpcX/vбДHeXhX XiXf „бLhX0r…‰бQqX (ъŒб пЯб $QtXЏб№Sƒб DsvX пxX‘JŒб Ьі”бk/X$€X ƒXxL б 1sŠXN Ѕб нЯŒX XЇбЏ/XV‹X 6ъX PЋб=Ћб Cs‘X щЎбcЎбLАбTƒ—XАЅб іДб ”QšX9 šX‡JЗбFЖб Œ„Йб рPКб HМб оЯЃX:>ЅXK РбСб NsТб TƒФбuPЊX2ЋX0v­X~LАX уБX XЬб EsЭб…/ЕX ИXЕ КXD>жб сЯНXЪОX PОX€]†нбLоб9об /рб JsФXБтбOЧX?ШXЯX Оыб уЯьб +QгX>дXЫ яб@/гX Xьб Fsїб пPнX“JпXiLњбШсXљвђ/чXчX№u. в KsэX> юXW№X ы в в  вLёX вѕX+іX Xв /QвtPв .sќX ыв ђівL/Y<Y/Y  ыYћ "вY›J Y( (в@Tƒ(в\)в %sY ?YlLY р PYY <XY ж1в xі3в›L4вœ9в .Q!YK!Yј=в†=вœ/"Yј (Y?,YG,YJIв  і1Y‡ LвC3Y =X1Y 5YƒPв/6Y˜ . 5Y МSв P;Y№. ?Y PCYB^вџ^в ˆ„FY  ыaв 0QbвŠcвsPHYDL^в р?0 hвл/jв 0Œ„QYр lвэHVY >XYY–YY›€Jvв#ZY аuв АZQ {вLbY?dYДeYА . €в sв ав ŠіiYkL„в/iY 4P†вmYГmY *ыoYџ ‹вПŒв •QsYЈNƒwY ;X“в а”вPTƒzY"–вг/—вY д›в ѕ Pв +аžв sŸвk„Y „YЦ‰Y9‹YJŒYПŽYqLЏв^Ав !а•Y@ ГвrPДв %Q™Yї ЖвЫ/™Y?Y (XžY ыЙв BіЄY кХв  аЧве/БY ыЬвŒВYБJЮв є PДYуЕYsLбвnЗYB Эв $аЕY= ЛY?жв`TƒНY  Pзв ійвR/РYEТY )XХY—ХY ЧYšтвьHШY Ьфв sхв #ашв ‘QЯYx„аYЧ ыв%ывsбY‚юв‚еYЙJ№в ‡Pъв Dієв‘LнYШ . нY}Lљв-ќв %афY8. хY ТчYЭшYЫшY XгqPюYЧ гw г ”QѓY  Pг 5sјYГJг &агг Tіг–/гCZLZиZ… гpTƒZf"г sZ?Z PZ рZ9 'г 'а*г§/*г АP+г #QZзZ 7X.г nі2г@3г”Z  5г5ZАJ8гL8г •Q Z6 ;гK"Z?!Z т$Zч<г (а@г хs'ZНCгЁ/*ZХ-Z ЫP2Zš2ZLMг ыіRг )а9Zl Tг“/;ZEVг+PWг sXг –Q:Z IX@ZИJ[гюH\гTƒ:Z К`гО`гHZ?dгœeгЊ/dг уіhг 2аOZЖ kгŽLQZХmг &sRZ fXVZ ыYZ0YZйvг іwгЇxг/aZhL~г ™Qг eZЛJ~г "аhZiZtiZ?lZ RqZž‹г ЖssZ vXг *агЖ/vZ ’г’г0L–г P}ZяZNœг‹„Z „Z? г0Ёг ЗsˆZ”†Z FЁг -аЇг4Јги]‚ZЋJZ‡L’Zn”Z lXАг vQАг ~і˜Z™Z PЕг)/Жг .аZъЙг !sКгFЁZЯЁZ ?ЂZ KТгІЋZA ­ZНJЩг RPЪгaLАZwЩг 1аЭгг/ЙZ8ЙZvLЛZ NЙZ "ыПZБТZ kXог 3аХZa ог ВіЧZ†фгП Pхгк/ЪZ $ычгЇчг­чг csьг IQгZЌJдZеZ ?№г ,алZ_їгш]‚пZ PрZnтZ0фZћ џг XW†ьZ ?эZ 4Xд 7sяZадр/д адpд /ад‚дРњZcд HQљZ ыћZ[] [?[YL дv дL ["$дЕ/ [l [ф [ЗJ$д :s%д 0а[™[ BX3д +і[?6дГ5д P[ O:д ;s![ ЂP=д аAд'[ ыDд yQEд Eа.[ € PIд іLдж/3[ДJ4[ч4[D 6[э6[ TXNдј]‚9[ŒNд sTд]Vд^‚=[Y>[ LXд0LUдйP>[ \Xд Aа9[  ыgдh/lд @аoдЙW[ЎJW[ ŽPY[иW†Z[Š[[c\[сvд Pxд­/yд [[ ыzд сіc[@d[Kd[Ld[ SX~дGLh[ Pi[?f[ Q‚д Cа‰д щQŠд™q[} ŠдШ/‹д іx[y[”д s•д Bаx[ 8ƒœд(^‚дrP‚[ ^ƒ[ ы†[ЏJЁдC‰[?‹[LЅд6LЇдnЉдЂЊд Dа‘[K’[ +X“[љ ”[—[Дд ЊP›[ #ыЖдc/[ЗИд аŸ[Йд эQЛд sЂ[ ыœ[ Пд -іІ[ PЇ[ ћPФд~ЦдsPШд7LЫд`Љ‚В[Ї Юдq/Ж[ВJЗ[LИ[ ?Й[fК[ PXМ[JН[Іздјжд айд ј; нд8^‚У[ ]Ц[“тд 9sЪ[кфд ацдж/шд жPщдˆъд ьQыд:Lд[?з[*и[š к[МJідpPн[Lо[ `XњдH^‚т[ R P§д*ц[Gе Nsш[ Eе ›іы[ь[”е›ё[x е/ е рPє[‚ е Os§[Њ§[­Jџ[ bXеALеnеB/ е 0Q"е 0і \L#е‹ \ M&е.\I\)@*е #s,еz\. -е йP\‚0ес/+е Gа\A\Ы8е юQ:е А>0 ;е \ ы#\ aX$\ЖJ@еEL@е 7і(\ L)\ U PCе Fа*\0\Kе кP2\L3\I@Nеh^‚Oе6\ 7\ЊNеЩ/Jе  а:\~;\  ыXеу PXе js@\>A\шA\  ыXе ћіD\ ZXE\ _`е/H\*M\ЕJhе {QO\iе<Liе лPlеx^‚mеЦU\•pе/pе а[\L_\t a\a\ GX{еˆ^‚d\ рP~е Iа€е`е .іh\]@i\z‚еП/ƒе Jаk\+‡е мPˆе Nаo\dr\ V Pt\мu\ Vv\ЊJw\t‘еќ’е;Lе Oа•е/•еф P{\  ы˜е oQ–е ‘іœе  аƒ\Lˆ\ FXЅеƒЅе нPЊе і‘\$’\: ’\Г­еZ/Аеš˜\А \*@Ке sQЛе іНе=LРефТе аУе оPЊ\Ћ\ ћЏ\ ]XЪе Б\ LВ\ мPЩе 9аает Pге ЖіК\8Л\ц К\КJже :аК\ +ыкеО/С\ВТ\mУ\:Т\ нPре tQсе пPШ\ љуе“уе ;ацеFLше mіЯ\—Я\ \Xб\Lъе˜^‚г\@ёе Kаїе  ао\ љеће rQт\ јўеЬџе ’Pжї/э\Єю\[@я\ _Xж іє\Qж7Pі\ нPї\Lж Hає\ !ыжKћ\ ыж3Lж Ј. жЖџ\*ж ˆ> ]z] J ж 6а]шW†] %ж, ] P&ж%/]h]$]$@]i ] HX+ж P0ж 5а] ы1ж Iі]^6жб/#] b$]L%]>ж BжJLCжBж аEж ъі-]V-]’Gж P.]j2]3] ŽP3] hXNж 1Q8] ы9] a<]jZжшA]”[жФ/Zж 2іD] оP`ж>aж <аbжмI] JXJ]Lbж9LL]С fж NPhжШ„‚J] iж MаQ]JT]AnжqжHqж а\] P^]Ѕ{жЬb]V c]в|ж жК/f]xж =аh] .Xg] &ы„жи„‚ƒж і‡ж аˆж@Lo]Lq]i‹ж- PжЕжб/x]Q@›ж…›жS„]њ ж'/Ёж ’іˆ] пP‰]DŠ]Г ‰]ƒЂжі] ЊPЇжŠH] X];@‘]LЈж у P‰] ы—]Бжф/—] ыЕжKLЖж] ыЗж ЮіЙж 8аЄ]oРжŸТжш„‚Уж аЌ]Џ]і ЩжљЫжщЬжHЬж-PА] ыЖ]!LЗ]И] пXбж8бж аеж?/еж т Pзж lіО]W@лжOLЧ]ЭШ]-Щ]JЪ] ышжч/шжŽHб] ыж] Pз]D@ж] мXй]Ѓк]€ й] ЪP№жг№жCѓжЙр]Lс] ызУPз  аы]Qь]zзNLзSH№]ўJ з</ѓ] оXє]кі]8@зДз ізу/^u ^L$зw%з…‚^е^А ^З^ нX^)з-зBL/з vі0з ‚Q^ кP^}^k@9зо/9з qP%^ )^J+^ ы-^‰/^ wX1^+2^LKзy4^ PPKзПOз4LPзŸQз ?а4^ 'ы;^ >^ˆ>^B>^q>^ [з Lа[з Aі^з&F^ yXbзъ/cз >аL^жlз аT^ ІPpз RQW^\LW^ Y^ (ыZ^|rз і\^6@]^ eX^^О vзV`^ )ы}зQ/з –іf^d€зщg^ ыj^S„з L…зЙp^ ѕPq^ з˜Е‚v^ sXw^СзЈ…‚z^k•зP˜зE ^0Lœз аз  іŸзG†^—‡^ Ђз Q‰^L‰^ @XЅзML‹^ ЏзQ Џз ј_O š^S@ЖзО/^;LŸ^ћНзHІ^ЇРзЈ^  Ћ^НЌ^ WXХз QШзУЎ^ xB„А^lБ^vЬзй Ъз mPЮза/Эз 7аЙ^ ьдзѓLжз аО^!JО^3LС^&@У^  оз ИіХ^ tXЩ^ ьхз:цзxцз "QызФ эзнд^Jе^"юз/з^ яз8Lм^5Lс^hт^ uXс^ џзЇ/ц^и  Qи* и2ы^f@ иаR† и:і^W ия/і^ ьиLLи ьі§^ RXў^љџ^=Lи SQ_F_ џ"и>/ _ _$иР %и5$и Я P_R@&и (H0 +иВ,и {і_  ь/и+1ию_9L_ xX7иIL_Ѓ _ :иF :и/6и б%_ь&_J)_e@Eи ўі,_ЊGи QMиR4_ћNи\ NиD7_ $XRиe/9_?L9_  ь;_ј <_<_ Xи*Uи і`и3H_иY†cиHLJ_  ьeи /eи  бQ_7Llи yіT_ %XW_B X_QrиЇZ_E@[_?[_qsи rи \_ \_ ь‚иш„и /†и }іo_<LŠиq_ q_ &X‹иDLt_Mr_ v_Jq_  ьx_„–и"/}_x ˜иЧšи Pƒ_b@ие ŸиЄ†_ІЁи膂Ÿи  б‰_>L‰_ ƒ_ ьŽ_ 'XЈи  і­и fQЎиT/–_‹Ви>L™_ ь_@_  PЛи ЙіЂ_?JМиY Ѓ_ Ѕ_ЌРиkЋ_ XЩиўБ_8LВ_ЇГ_'@Ж_Ъаи№/ви ?ідиАК_ !жи?LР_ ьС_ Т_e ли3 ни ЖQсих/Щ_ Xхи?ци ш. ъи `dчб_?в_  г_д_4Lяив_ ьз_!@и_  л_6р_ћиCLт_'Jџиџи КQч_  Xц_ ьйЭэ_A@йm э_ # й >і йИ/і_Ђћ_6 й §_‡ў_ˆ§_Iџ_ „P`6Lйsй ЛQќ_ А. ` !XйP/ й Яі `J$й5L ` $(йЮ`V@*йз ` ь`М `4й Q```:L8йA"` %#` "X&`m(` ‡PBй і,`„.`јY†JйC JйU/2` ь3`$JMйŒPй…L7`?Rй ЙQ9` Sй  б<`VйэWйР?`r A` #X[йk/]й| _йWfй њіW`оW`CJsйЗ/tйmZ` \`}xйz _` gX``™ a`˜h`R L‚й бj`^@„йLq` Œй“ йВŒйЗz`{`J”й „іšй†/›й Q‚`Зƒ`g й рƒ…` ‚` э‡` EPЄйa Œ`ЈйL`ё`В`9@Њйu“`ИL’`  э˜`™`Вйš/™` "` XXИй€ЙйЋ  `­ Зй ˆ. Ђ`ЫИй іЅ`AJУйnУй /Чй ќіЎ` В`Z†ЭйLЮйx Е`  эЙ`fЙ` Л`tМ`ПЛ`+дйŒ/ейКР` -XС`v нй _QсйЙфйBхй /Я`+Jг` эюй №іи`‡ѓй h. єйLл`о`w љйюу`­х` MXк|кQHкu/ кT†є`oѕ`L к ‚Qї` #ј`,Jј` экqк†Lк 1 ѕ`гкМ/a!"кk aWL a mX%к Ш. 'к [і(к…‚+к/-кЧ a /кL2к …Q5к‡aЄaJaЕa!a;к б;к —і'ajDкZ ,a/@/a %JкбHKкj2a& 3a 5XPкLRк ‡Q9aнTк xМ‚;a ъPUкaVкl[к§/FaRbкg IahJa Jeк\HgкNa[LNa "NaэRaK mк*mкѕ/nкLqк †QXa QXZa<[a эyкbaЮba}кАT†jaзoa7@‰кЉŠкЦoa !taYua&J’кє/’кL”к ˆQ}a ^X~a# a-ƒa‰a_ЃкЈк… a  ЌкП”ag”a4@”a\L—aю Ўк{АкDP–a и1 Ек ‹‚Зк eQžaža LXИк5 Ёa#JЂaQЙкщ/ЄaѕЅa Ѕa эЇap‘F Тк вЦк~ЩкЫАa Ык}HВa[ ГaНЬк вЭк QіЗa"@ккrТa УaТa cXнкS/Цa›ркTШa эук+ ук лішк вщк TQаaJык4вa бa  эюкzжa<зaХкa@ік  вјк/сa тa сaZLуa dXџк ƒішa\л а> юa{л„HлКL лb/ лл– Pѓa 0ѕaJіa"лO ёa эл Pл=ѓaю§a—лXџa iXл?л/л =іb эbZ 'л +Qb@+лS /л в/л jіb эb%Jbа2л›/b  6л,P7л)bњ;л в#bŸ #b +'b jX*b э+bkFлFл^H.bIлc JлJлх/KлžPKл  вIл ці7b@:bнh %dfEнpL,d/dы/dR /dbJ2di1d XKнˆ/MнHTн7Wн ZіYнЃ Cd zPDdB]нg/Fdaн‘aнжEd 3Kd  Nd /XOd+@jн2Llн іmн!/XdГYd{\d 2ю`dЁzнH bdPJ~нр/нHfdКgd [X€н ш. idт idkd ‡н  PŒнœPŽнЅudX@—нќ˜нhX†d6Ld CXƒdИ„dž …dP нд/ЂнaЂнoLŠd ю‹d_ŽdQJdK@Žd ЌнlH­н sЌн іГнИ/ЕнгЗнbЂdXVƒНнОн дНн . Їd‘ ЇdЇd“LЊdIЈd ?XТн— ШнxLЏd3Аd*Бd@Вd @Ьн дБdRЯн гPЖd [YЛdSJжн<Hйнш/ТdУd SPТd AXннхонРZ†рнШd@сн– сн 4sнн !дЯdы вdOэн–дd@дd#янrLян $диdГйd Eюён MіѕнЄ/лd нdžL§ноX[†щdRJьdЦ эd#@о–/ оЄ о ЕіёdNо GsіdDјd YоwLо pQоХ §d8/ о до&/eВLоуооe >!о _P!о і&оH e WPe Yeж e(@+оЎ/)о  дePeрWe.оr /оЬ2о Біe}eKJ7оШ8о д;оyL$eY@@о Q(eЄL)eГFо Рƒ2eь 5e =Rо=HSо жsTо jPSо ёіVо QXо>/Ae‘[оL \о‰[оtLGeT@Ge\JPe, ReАLpоV/Ve RюXeк]e VPwо XR†zо еs{оKHоŒо€оvLhe ‡Yge <jeљke` leYme аP„о{ †о lPо дseHFƒseZJueЏL’о Cіze|eye †YƒeЋžо Ј. Ÿоe/Ёо) ˆeл Ёо uQŠeЧЁо <sŒeFЄо\†ЎоsL•e(8/ АоSБоs/Во 1іœeJJeЈLœe ‰YЖо bPЁe p. ЄeА По jsРоЬ ЇeёРоСоHУоA/Ћe %PЌeйБe QюаоuLЗe ˆYво xQгоž/во isдо  ƒво rіРepХeiJЦe(ХeЇLпо] уоI/шоLHщоoшо ksбeшьо Р. еe0еe $Pзe# №о ePёоЇзe 8юѕоzLђо oікeфјоФќо lsп  дчeŠшeЪчeWJшe 5Pп yQьeрVT юeяeЉL пN ѓe]ѓeг іeЎп Yіп :sќe ИPп!п дпCL пŽ п/ f @#п hPf(п4*п мі+пpHfcJfœ f!fБLfˆ/п lQ0п/f2п WsfтfWT !f :ю=пГ%f 4P&fjAп AпU,f Fп,HпЬ/Hп Xs3fвNпд5fš5f`JOп+L8f ^P6f ?Pп hі=fa@fYBf \п s_пЙFfЁLGfJ@`п</aп fPcпћPdпi fп еjпБQfYJSf 6юWfeWf !Yqпт/qп@Hsп.LtпМ]f ]P^f1_f uпˆsп цQzп Osxп /і~п^hfh@jfиkfм „пK ‡п еqfЕLп 0sп ‰іvf "Yп0Lyf&“п(”пJ/{f Iю}faJ˜п?H˜п ;s›п gPœп е„fŸп ъQЁпZ P‰f˜ŠfK‹f ЅпС/ЈпС ffІLЊп ­п/LЎп ,іГпL›f  Yœf@ЕпŒ/ЗпФŸf НPЖп `sЁfв Ђf_JЕп еРп&ЋfмЦпј/ЧпA Шп щQЧп еЦп O„Ып[ PЬп asЕfЌLвпИЙfѕЙf #YЛfCЙf Bзп/Пf ЫPСfЃСfY лпж оп  еЦf^Jрп mPтп_уп0> рп sшпWHаfНаf @гfэпяпgLжfёп Qёп X. ѓпhF0 єпY Pкf CіпЋ/љпv њпљсfЂLуfб фfрMьfBр/ р— рѓf Kюіf р и2ƒїf3љf @љf ЬPр HQќfhрkLр˜_‚р cPрW/g9 р9 рў!рP g qP$р sgg(g[J*р@4ƒg@,р@gДLg €2рР/gSg Y4рlL9рБ!g ;рљ; #g $g Gю%gBр WsBр  е-g4HрkIр Jр1gfJ2gd@3g ЭPKр dPTрjLUр Xs=gWрt/@gЎLZрBg BgEg[ _р РQEg €Hg vPdр €O„eр9Kg [юgрі/iр sjр Pg5SgNJUgU@oр†tрt \gЈ vрuL_g"yрH/zрƒyрšPcgш~рE|р >sfgЊLigNjgBlg ЮP‡р.H‡р iPog \Y‹р ƒQŒрbр ugeрЯygL—р ж˜р "іšр }s›р# ‚g Tю„gc@†g ˆg‰g? ‰gЋLЅрВІр;ЇрRŽg uPЅр€/g  €“gЦ”gШ”g ]YАр ~sВр (ƒГрП Ир,/Ÿg+КръКрRLЅg ЯPІgJРр oPЈgЫЉg Тр€Фр sУр ж­gЅLШрž/ЩрHЩр ЈQЎg  €Вg­Еg=Яр жврЙgLЙg ^Yир? ир/Тg(2†Тg:@мр  sпрmпрEPШg•тр  жхрDЬg  €шр NібgГLдgLзg\ђр ЋQкg аPєр$Hмg tPѕрџір?пg Yѕр5/њр kPтgŸтg( уg3хg-@ўрiњр `sшg  €ћр жсdс сY/ёgRђgEJ с asѕg?сФLјg­Lљgњgсfќgщс ЌQс с{/с+Hс жљg Oюс ]іh} !с =s hЬ'сЦP(сЯ/hph ™P-сЂh\@/с./с іh _Y2с ж3с nPh hЃL"h] "hа=сј_‚>с&h$'h^>сХLAс /Aс)H=с 9Q?с ts(h .h,@+h Lю1hFJKсPсlRс‚/9h Rс ж;hзh @h dYVс ”і`с УPHh†bсћ/Jh#Kh@cсƒcс!Hiс” iс 7Qkс іSh WюThUh pсЦLWh ˆPYh” tс tс ж]hLJwсшP_hehgh gYhhуLс @sjhТ…с#‰сШF„phqhеŒсЈG0 ‰с :Quh RPс„сŠ{hP@|hh2†|h•с'H}h ƒhŸсj  с ІPŸс ‘sЃсMЄс ;QЅс іІс  жhMJh…h jYЏсdАсЧPВс sšh Дс- huЂh%@Єh.Ѕh XюСс/Тс GQУс PЊhб­hOJШс ’sЬс жЮс#HЕhЄЖh њPЕh kYвс ас фіМh, LисУПhšРhЫ СhТh‘мс “sЦha@сс жтс œіЩhGусLфс(цсщPбhIJясє/№с. кhlкh iYєсZєс Asкh ]юоhњс жћс жі§с"HцhŠчhцh- LщhL@тщ/тJьh  Pэh т%тА№hКт ГQѓhєhˆ2†т ›sт Ўіџh hYт>Pт’/т жiт< т)iщ i iЛ(т si‹i. Li ЃP,т-тš/ig@ieJ,тH/тс5тŠi ^юiс 8т ж i @<т œs>тJ/Aт*(iZ@AтмL*iѓ+i?*i!Cт h PIтk Lт ж6i~Rт ?sTтЯ;i Xт Щі?ilJ?i/ LZт^Bi/CiЈ2†EiX`т*H`т  жbт+cтKiOLihMi Cюnт7 pт'pт ‡sXi sт јіZiTvт ж^ici :diGeiFт}тv/hihJ‚т˜тё Lтd P†т ˆsqiїriЇŒтЛŒт uPтNтH’тŽ/’т  ж‘т Rі~i$ ~i <ю‚i2‹i OPЅтЛ/Іт ДіŽiMЋтѕ LЌт  ж”idJ•iA—i0—i‹БтnšiR Ет` ЖтЗтГ/Ит sЂi-ЃiЂiAПт СтЁPТтHЉi5ЊiыLЧт‡/­i CЩтCЧт  жЫт Эт kіДi3ДikJЗiЗ дт QМiAитє LПiSРiСктG/Ъi AщтДьт—/вi AюеiAеigJзir№т­ ётyєт%Hлi Yйi/тiAќтЊ/ќт iіхiАџтшi˜уЙ уі Lяi •P№iщ ёiM у Pу жєi'ѕi–уM/№iљi Jу тіћi яPууIћi >юjjA уd j™ j 'у юі)у H)уŠP j0jž Lj6у?7уј L8у  Q;уЉ <у/$j'>у ж&jN AуT(j %и?„)jЖ)jцJDу PіFуP.jN/j1LуOу/7j P9jB=j єPXу )і@jфJBj0Ќ‚CjCjэ]у&H^уЗ `уHPHj%IjнcуpPKjŸ Lfу/hу Ojл iуlhу•lу ŸіWjхJsуg^jЂyу1 ajтaj sY}уЪ/~у іуї Lfjк€уvhjв jjk„у(HnjJˆу жqjuqj Pу˜у Ыі€j ђP›у hƒ‚jBу­„j …j`ƒjЃуV/Šjп‹j5Šj LЈуI joЉуЭЉу,HЊуТP“j rYАуВ PВу ЁіšjLBšj PДу˜/ЗуqžjЈJjЁjж Єj Пу №QЇj ХуW ХуєЦу#/Аj“Ыу жЫу aіБj Еj<ЕjІJау]КjHЛj Bйуl/йуLлуoPХjШj™LЩj,Щj wYЫj ѓPЬj,BЭjЇJЮjkтуhфуD чувjJ щуъHыу$/ьуaыу єQщу жлjоj  љу sрj P§уB/ўуА хj™цj)хj.Bхj Jф жфэHэjЮюj |Yёj‰ђjњLёjф‘/ф5јj ЃPфŸ ф ѓQф Ш4ƒўj !фф ДPфЗLфkк фюHkkŸk €P фЅ/фж P k€Ќ‚'ф ZїkkЖJk’0фК 0ф/1ф Cs8фK:фт!k<ф 2Q k@ф/)kГ CфФ,kДJFф ж.kIф ѕQLфи 5kOф Аs7k8k ’PQфƒ;kЌ‚дф ІsЛkmЛk ,йф ЗPкфа/Сk‡кф алF ФkЛпфG„ЦkKBФk"фф іQцф^PЭk YЯkJъф Lsьфь/ьф UїдkЦюфЩзkиk ђф8лkC Lѕфслk -оk Pпkїіф  зўф їQшk+BхbPыkэk -Pх њsяkEёkн хк єkPіkF х/§kOƒўk.џk.Jх ИPх !QхТхeх јsўklБL$хaP%хL l 5lс(х =ї/х\l+Jll% /хG/1хН 4х s/х Ш‰…lў;х>хcP%l н P@х 'lAB@х <QBх љs&l ?х з&l)-l-J-l -YIх Ш. 0l2l €P3l… Nхq Sх ЙPTхЏ/;l€;lZхЂAlJB\хП\хœPDl,J[х ћs\х .зIlщLeхВ/Ml >YiхЅkхu RlВpхнqх QїXlœtх ќswхP/wхџPal8B|х|хdl†х  зhlѓ klhLll  ml -ю‰х MstlюLŽх ƒPŽх TQwl =Y‘хд ˜х  їl(B‚lvхлžх‚…l›…lJ‡lхˆl ИPŸхƒЁхТ/ЄхРLІх0‡‚ЁхЯPЇх s’l  “l‘ “l?•lB—lьLВх  їГх‰/Ех -зЖхwЁl@OƒЂlЫНх sОхЌ Пх WQУх//ЌlЯЦх ‡PЎlOBЏl^Џl YБlі Цх зШх HƒЕl<Jахfвхр гх sдхG„ех_Йl bюлх зЧlэLЪl§ххЦ Ьl:Jхх oPаl Bъх ьх sгld юхУLэх XQиl 9PкlЃ+їхŒсl тlРуl;Jќх% §х ˜\O цlPъl$Bц sьl юlзLяl cюёlў ц/ ц‘ц’H ц PQƒњlJћl>+ц 'зц Qm3BцЫ ц Isц›/цЫLц Sї#ц m+ m0 mH m ОP&цxmЛ)цЮm mї1цM 3ц PmЕ L6цq/<цk%m( Bц 5зCц ^ї*m&B*mŒJ+m FY.mC+IцЗ1m02mшKц14mяMцЪLOц: Qцэ8mт4m UцЁ=mOƒ=mК LZц їAmŠJDm) _цd/`ц #зbц шsJm !Pfц PMmћ+NmФOmœPm …PkцqLm eюUm EYoц P. Xm‹JYm4rцr/tц•amќ{цB |ц эQdmИ LhmS‚цЩLjmS „цЧ…цЁ/†ц3HnmРqm?B‹ц чstmc+ŽцX ’ц з|mя–цц/˜ц 5P€m ‚ƒm LY„m .ю‡mИˆmŸ‡mЛ LŠm6Bˆm †PЅц№ŽmЏŽmх Ћцb “m№+Вц рлF ДцУ/ДцЬLДц sŸmnЂmЙ LЃm1BПцEРцЅ Рц ЎQЉm9Њm” Ћm<ЌmPЋm QYЧцrШц TїЪц=ЭцЋЗmч+ОmBПm%Рm ЅPкц[/Тm нцЦLмц PЦm~ЧmjШm KрцVтц} тц БQЮmв+шц /sбm\гmЈw. юц[дm1ѓц2 єц‚єц›мm p. їцY/ўц [їч 4зчmЖLч ВQъm8 эm#№mч+ђm- чШLч Pѕmиі‚чИњm ЉPчЈч .sч 8Bƒџmџm OYn —PnEчЅn_Lч$ чŠ/ ч UQ ni(чHn<Bnк-ч:0че/nС 2члPnВ+5ч@ n+8чn 8чК#n<L?ч &PAч 3sBчЧLCч HƒGча 4n PYOчv/6nм+5n ƒ8nEPч Oї6n5;n‘ш_ %o?L=ш ї(o]Dш‘LEшщEшžP/o3Jш цs3o Mш /7o(RшЁ 8o юRш <ї;oУ+WшœWш ,зYш ;Q@oO@oB\ш.Co(Dop]шt/Fo ˆPbшJoJLdш’Lfш А„hшІPPo@SoFBTo „PmшHmш9/XoO sш ї^oёco>coж+}ш& foŠшl/ho1 L‚ш з„шЈ„шLloALeo 0юio?‰шUŠш ?їso-BшУŽшЈPxoж’ш„/{o” |oЌo ƒo8„o PžшU Ёш KQЃш\/ЄшШL‹ogІшhoPB’oW”oELАш юPГш‹Pœoќœoј+Иш зЗш їКш#ЁoIЅo<LІo “PЈo Љo%Њo  .†Уш! Ќo НPУшЧшЏЧшxG„ЧшЁPБo;Вo9Цш @> Ьш XїЯш NQашЬЙox+Йo2 LОo p7ƒРoЄРoGBкшЋУoBLУo …PкшЊ кш LЧo`пш;/Щo ушЪХo ƒЦoAЮo wZшш ( / аo  ябo№ышPэшв юшёш*/єш М Pѕш &зішЫнo)нo ”PјшІLјш  Љƒкo2ўшЅPщшoЂ щoDLъo%+щАщ /юo щВ ёo }ƒѓoBєoLLѕoTєo МPщqщчщ \ї щ Љ щ’/ќof§o ;Pўo‰њoCщЄP щ П P pиЄ‚#щ з&щК/p0 L(що p@L*щ^L+щ)p |ƒ.щ’p яpBp`1щ !зpCBpŠ 8щм7щ ї!p%@щ УQDщZ/pIщjKщ" /pGMщjLNщАP5p ƒOщ з8p 8PSщХ/:p Tщ Ц PJъeL2q#BKъ1/Mъ 6з5qDъ ш„7qLQъ]9qTъ ЎQ9qNWъ ўsXъб Yъ 2зBq B\ъ3^ъ7/Gq >яHq9+IqЧLLqfъ Х PjъiLQqА.†Sq ;ƒTqѕUq pъ 0зqъТXq Zuъ-vъV vъo/^q nPuъ АQъЉfq Ѕ‚gqПLhqh+ƒъє P‚ъ sъ %зjq AяnqэqqOsqƒ sq—uqЎLъ>ŽъhLxq ƒ™ъМ/€qašъ<›ъ Њ‚…qB‡qWЃъP Ѓъ )з‹qТL‹q #PŒq +яЃъ їq№\ƒ‘qˆ Ћъ §sЎъѕ PЏъФšq :ƒ›qыЗъdLИъУ qbЁqЇLЂq2BЃq{+Оън Пъ ўQРъњ/Нъ @ / Тъ 3зЊq ћPХъ™­qь Гq”Еq яЖqРLЗqPгъЉ/еъ sжъпжъ  їйъ…Пq ƒлъ˜ Фq4Bпъ зЦqвръLЩq™+ЫqD цъ Qщъ їыъЈ/ьъ cPзqŠиqСLлq њPмqЩмq*BѕъbіъдіъяHњъс ќъ/§ъЗ§ъ зџъ а 1 цq яы€Pы aQщq ƒыqm юqs№qƒђq‡ ы> ы LљqЇыn/ћqЦLы ѕsr љP&ыƒPr1+,ыz/r я-ы >ї/ы LrCrfr$8ы­r\9ыЙ!r'L=ы Q>ыЧ/&r C,r№І‚,rМ+HыLKыЗKы 'sNы„P5r(. Pыл/8rpTы/ ;rC@r E P@r яBrЈArEr Œƒ`ыLaыh‚‚cы иdы™LrMrіhыАiыiы ПsSr2UrCVr! rыш/rы 2ƒZrдrы јXrxыLyы›{ы јы…Pfr K Perƒы skrАkrм+†ыnmr ‰ыT ы?urЃ ’ы 8Ž„“ы Lzr|r —ыШ/}r ‹ƒ™ы1…r J PЁы РsЇыЯ Їыy/Јы p8ƒŽr‘r,+ЋыIЋыL”rЌыРP–rБыы˜rs Гы^žrКыз/ЁržІrЇrЈr LУы4ФыЂ ХыLЦы‘PЋr яЧы а„ЏrБr+Бr  ƒЯы ЮQЯы иЗrды sОr I PПr мы‰/ныxоы `. ЦrЦrютыG Щr$ Ъr LуыxЬr‡фыZуыLЧrЮr ьы|/гr‡+эы  иеrєыZѕы вQнr тrѓўыМ ўып/ўыLчrЏ шrьџPџы ь;ёrѓ ь їr L Pјr§rA+ь "sь бQья/ьM#ьL sf sу s^'ьЈ sй*ьP/ьвs0ь1ь xƒs+s5ьыs "я:ь гQ!sэ "s H P>ьAь gs(so)sCBь3/'s =ƒHьLJьБ1sbMNь P5s„8sˆ9sЯRьeRьЪ/=sŒ+Wьп?sЗ \ь ]ь ј_ь дQcьpcьњ/Ls MiьЅSs еPUs!qьPWs  ƒYsМYsЏ[s”\s7]sџ+Zs.CyьLvь ј. xь јcs $яhsЎ is#js MŠьeqsCŠь ј7ƒxsn’ьL“ьP™ь #и€s;›ь6 ‚s”Mьœ„sћ…sЁ ь/ь (sЂьІь9sO+ŽsЏs0C•s<˜s %яГьяšs•M›s& Дь ‘QЖьPИь /Ÿs§Ÿs |PЛьЛь ШsЗь јЄs…+Іs>СьНСь иЧь xŽ„ЏsТЏsCЪь=/ЬьyЭь, ЬьСLЏs SƒЯь иЗs7Лs›жьИНs  Нspеь Щsкь:ль‡/кьPнь ижь јпь QЧs яфь…ЭsCчь  јаsёдs Nюь‹/ёь EsиsШиs }Pкs ŠPлsC+ђьЯLїьїтs ќьп фsz§ьЈЊ‚џьЦ/эPхs WƒѓsЪіs яїsmэmљsЩ+эШЊ‚эŠ/э v. э‘џsCt"э јэr!эФLt$эЄ/ tЇNt ШP*э јt ~Pt tI.эPt*t/C1э Уstt  ƒtЁ6эЋ6эв/8э aQtх+"t (я"tAэR EэGэ/0tN2t ЮP2tOэХL6t7CRэ  ј9tMVэ Тs=tІNXэ ˆ. ?tјB„@t ]P?t XK ZэPCtk [эZBt(`эЎ aэ иƒcэ§cэи/Jt VƒLt6CMtˆgэаiэuPt,+gэ ZT dэ јSt РG0 St,Ut ЯPZt  ]t *я^tu`tЅN{эЇ zэ ”й}эЦLdt4C}э sctht fPitЪqt+Œэ.Œэ(/ttvt ЭP’эV{t |tо|t~tt|t8C~tЈNt gP—эPƒt .[™эШэ:/ эš…tЃэ њPŠtЏЄэ( Єэ љЇэШt яt<CЋэЧL­эт/•t ЫP–tћ+—t Џэ GsБэ Rљ•ttР ЗэЉМэІ ЄtЛЄtЉNІtќПэ PРэ/Тэ ˜љІtЌt5CШэ єQШэ cйАtЙЪэц/Ьэ sДty+ЮэPЖt4Иt ЬPЛt YƒзэЧПt;CйэШLСtџнэоэ уэ йЪtNЬtЕцэ PЮtpчэ M Pаt MPаt2юэ†/еtЕ№э1Xйt+ѕэž нtепtЫ рt ?PљэЊњэiфt>Cю†чtдю >sю љъt)юз/юЩLюt =я ю Pю5іt!Nјtмю› њt ƒћtu9Cю$Hu  u/+!ю <s uc&юО uј„*ю Wйuђu:C2юW2ю; 3ю P5юЋ5юN/5юЬLu eP u[!u2%u™ &u fƒ(uз(u=CBю ‹љEюf)uGюм/.uŸIю =sJю BQKю ‡й2u яNю мP6uи+6u8N:uП Uю­ ŒvІCЉя+L’v [­яЦ/”vЊšv‰+œvžvЫ v†  vzПя 'PЇvQNТя ЬsХя yљЦяеЧя™ШяЌШяy Бv  яЮяЁИv ‡Pвяи/Кv5вя/LСv [ояЅHЧvЫvUNЭv| ЭvюаvTƒъя )sяяl жv.ёяPђяO/йvя+єя†лv [ѕя Gйлv Bяоv‘Cія 0љњя/йvуv7ўя.LцvWьvVN№ бsяv №vР № Xƒєv [№  Qіv ВP№ љ№}/ўv&+№w№ 'љw\w@wC!№ Ћ P w{ w"N w [&№M/(№ІH № вswС+№h,№г -№0Lw Dяw4 wTN1№9w –ƒ2№ ‘љ5№(w9№/#we+=№В PC№*w аP.wX.w–/wР.w Gя2w P5wЬ 5wNQ№š Q№ s9wЉT№S№ QQ№ %й?wZ№ Ќ P[№эLBw Nc№d№Ж/KwvKw —ƒg№ћi№  йOw Twz Tw r№œHs№hZwѓu№z/\w+Zw Eяz№ –љ{№{№ ˆƒewCfwT№ ЯQhwЙmw ‡№F/ˆ№ nwrw=Œ№ Ds№ zwГN{w sPzw  P}wm~wŽC™№K/˜№ ­ P}w ƒ№ш‹„ž№яŸ№„ L № ЮQ…w CяŽwwоw“+Њ№ё/Ћ№!“wPЌ№PЏ№! ˜w З№QžwВNИ№ >љЛ№н/Ђw’CЃwњН№ HП№ йР№ ВsЇw™У№}Аw FяЫ№Š LВwхГwЏ Дw˜Э№ ВPЬ№ %љЗw ћ PВw д№ џQе№Пw*+ПwБNл№ †љФwCХw qƒо№  йф№ ф№А/Ьw?ш№Pы№7ы№гw“гw зwсиw}ѓ№ IйлwТ нwДNј№‹ Lпw џ Pтw [§№jў№ хw+хw Pё…ё pŒ„ёЁH№wя ёw  ƒ ёі/ёГљw’њw bяћw§woё"ё ‡љўwx{PxЕNё -Pё‡ L xн &ё xоx7+-ёnx [.ё{Px P1ё91ё tй3ёЕ/x Eƒ6ё|x x xё%x‚ %x я)x(NDё•/+x š P0x…Jёˆ LKёbOё 2P7x IƒSёЂH:xCгxtLеx [жx ­ PёёƒPиx+ ђёЭлxzCѕёƒіё/оxYпx+рxqNпx P§ё 'йђ кQьx<яx ђн/ ђaёx Mяѕxљђ йљx Ќ Pђђ4 Lќxђ 3PўxuCњx+yBLђA yЂ yv+ yyrN&ђ(ђ$ y ,ђ[/-ђ 1љ.ђЗy [2ђ ’йŽ ”~PžŸ5060к ѓњњњwxyкс!њ"њк ѓxйyй“й_яJW 2AZm …†Ябмшыѕљњ 7:ђї ќўЈHL4NPЂQ ^plUsƒ‡іnйoй    кс//њ њ'њ(њ њ њRx     eH 8)+,-9/02345679:;<=>?@A BЩЬЭЮЯбвежзийклмнопрс туфхц шщъыюя№ёђѓєѕіїјљњћ ќ §ўVW Y]  ,5<@J Y 5<@JT z -0.0+0,0 Znlu  Вt<з=зBсCсзшL M N O P Q         ! " # $ % & ' ( ) * + , - . r/s/      н о & ' VtWtћћ00  ]/^/    лє   ef  Яа46777Y:ЉWЊW‹YŒYYŽY:з;з@сAсжшKёF G H I J K                           :cddйeйлл   9=ййй ?лє% & ' лє <ћ=ћ>ћ?ћ  78/000\t3 \014bO ййй лєћћGћHћ!0"0#0>?@ммїEљFљGљHљOћPћQћRћnoopмммм;<=F0G0 м м\ћ]ћ^ћ_ћ~йС но т‹ Œ  uб н о о о о{|}~2 WX0: C\q t~€222,-  …Hййййй<dеpIqI˜M0U~X–^Бtu‚uhvivГzДz,~+, ‚ƒ…Cк`яOќ   78Q/ннСТL Z‡ˆ*2+2,2( ) CћDћШ Щ 9+:+:к;к<кооооњњЊЋњ њњњpq00@A3040,к&сЂЃЄ.к(с$CC#2$2‡H^_!ќ"ќ2 2!2%2&2 р р%№'№,-рр`ѓ2ќ3ќ4ќ'(-2.2рр22ёђghijрр222LќMќ5ќ6ќсє сєсэ3VTX Z3 wЮ3x€ §3еђ=ќ>ќNOdueuџ  }~КЛМv асс3с4с5сWXžŸ Ёттттѓvvde тЩсєWј44 4 §!§"§#§55  <5=5^O_O6§7§Щзз’|PЪЫЪЪ !vv)* 5 5 5 5 5 W HO V GNЉЊЋЌ Pyz  ‘ ’ M N O P ЪииЪиЪииUVЫж§§+§,§/§0§ФХЦЧ‡ ˆ ‰ Š PQуу555ўўўў џ   џџџ,џ-џ.џ/џ0џ1џYZ[8џ9џ:џ;џ<џ=џ>џ?џ@џAџBџCџDџEџFџGџHџIџJџKџLџMџNџOџPџQџRџSџTџUџVџWџXџYџjџkџeџfџџџџџџџџџџџџџџџ џ!џ"џ#џ$џ%џЩЪHIJK4џ5џ6џ7џgџ фіфф3+4+5+6+-5.5559ую224T6 [RфSф7 w3[w1w: D5 D [КМ   ффф5555Z[[+\+]+^+Žф ф7 Z)ф*ф wђЭЮ&ф'фŠ‹ћќ1ф2ф{ђ|ђOфPфQф$7%778фф6ф7ф)* ф ф45678H9Hq r s t Эабзйклнор шљџЭ џ žЭŸЭ ЭЁЭ™ЭKххх\]СЭ`^_…Э†Э7ŒђђЭ€Э4’ЭF9:ЈЭVBCђђ  +/і  +/і  +/і}Э0&ц'ц(ц)ц #+/іPЭQЭ&23 ! q  + / .+/і" |+/ 9+/ і;<‰ЭŠЭ‹ЭŒЭЭŽЭЭЭ=>?# ‡+/цц ц!ц D +/@A$ ’+/  O   + /ЖЭ35†H, Д+/DE% +/  Z   + /- Е+/& Ј+/  e   + /. Ж+/' Џ+// З+/( А+/9:;<]HOP:Xбв#7 П$##+#/0 И+/) Б+/Э‚Э5$8 Р%$$/1 Й+/* В+/RЭ'%9 С&%%/џ2 К+/xЭ/‡ЭˆЭ8   *&: Т'&&/3 Л +/.B Ъ/../'; У(''/ 4 М!  + //C Ы0///(< Ф)((/!5 Н"!!+!/0D Ь100/)= Х*))/ПР1E Э211/*> Ц+**/„Э69M е:92F Ю322/+? Ч,++/:N ж;:3G Я433/,@ Ш-,,/ЃЭQЋЌ­;O з<;4H а544/„z…zIJ()*+ЏЭАЭБЭВЭ$<P и=<5I б65В Г DX рED=Q й>=6J в76  “Э”Э•Э–Эмнћ ќ EY сFE>R к?>7K г87XYZ[ Э!ЭšЭ›ЭFZ тG?S л@?bЭcЭdЭeЭfЭgЭhЭiЭjЭkЭlЭmЭnЭoЭpЭqЭ*+,-.  +/>BіG[ уH@T мA@   p   + />B і‚ђƒђЬ+Э+рстуOc ыPSЭTЭH\ фIAU нBAVW+  Г+/>B іPd ьQI] хJ#ѓ$ѓBV оCB"6  О#""+"/>B ішыJ^ цK-A Щ.-$+-/B іK_ чL8L д98%+5/Bі-Э.Э+ш,шPѓQѓL` шM5 zCW пDC&+6/BіMa щNNb ъOF'+7/Bі+,mzQm ѕZG(+8/і`ЭaЭ>:?:ЄЭЅЭ8ѓ9ѓ:ѓVЭWЭ0Э1Э2Э3Э4Э5Э6Э7ЭѓѓUшVшWш^ш_ш`шaшbшЇЈЉЊ„ш…шH‚:Э;Э<Э=ЭЁшЂш;ш<ш=ш>ш?ш@шAш ѕ ѕ'Э(Э)Э+Э78mшnшNЭOЭ%@TXxшyшЋ­˜ш™ш<ѓ=ѓ<=BЭCЭDЭEЭЕшЖшЗшИшЙшaѓbѓЭЭ  Э Э! " # $ @ѓAѓ&ѓ'ѓf g h i   ЮЮ  = > Ÿ O Q F G   3 4 ;;<M WЯчы є!є   < <&'( є є  шш‘ш’ш“ш”ш•ш4ѕ#є$є  “ ” • stuvF W]defg<<0V‚ пe эRf юS,Un і[g яT <<, - )є*єЩЪeшfшo ї\h №U™Я›Яp ј]i ёVq љ^<<j ђWœЯЯНшОшr њ_k ѓXs ћ`l єYt ќa<<u §b*,+,v ўc   QшRшSшTшѕ<<hiw џdgшhшu v w ЩЯЪЯЫЯЬЯiшjшkш IJX IJS T  IJM WX^=?@ C MW Z ^mu W X ,-.4 5 —˜™š%    ѕѕM N IЃшЄшЅшІшЇшЈшЖЗИЙСТ‹шŒш  ѕѕ  >?–ш—шJzцžшŸш. / ‡шˆшe f rшsшo p 3V$ % €9Я:Я  s t wxТУВшГшѕѕ(,),* + ќ § ў ѕѕѕѕMN    } ~ #$, - . 123ѕѕ0 1 Y Z щ ъщGёЈЉ щ'ъ1ѕ2ѕ( ) щ%ъ_ ` щщ#ъ$ъщщ!ъ"ъ6 7 щ. щ&ъ" # щFё"ѕ#ѕ-:  RSi j +,-./H@ A žщщ  )*+,-.ііQ R ъѓєъw x ()*, - 5KіLіXъYъ ‡ ˆ ‰ NъOъu v ‹ Œ [\]^9ъ:ъ  ! * + іізіиійікі‰ Š -Яlш] ^ _ a b STUЭЭPTъUъ2 3 d e f =Я>Я?ЯOPQRііЊЋЌh i ƒ „ GЯHЯk l m o p ij8 9 ОіПіРіMЯNЯr s t S T v w a b y z { } ~ klmK L €  ‚ < = „ … р с т ф х EіFіGіc d ЏіАій к л DъEън о > ? …і†і/=пірів г д ж з 0 1 ч ш щ ˜і™іы ь  V W X ѕіііU V Z [ rs<ъ=ъO P Q ‡ ˆ S T  ƒHЭ/Ю/’“”C D ю я № ђ ѓ [ \ A B C E F y z DEFGŽH I J #$L M ’ ‘ ;і<і ‚ ѕ і ї љ њ  € ШЩЪ: ; < аджэ# аібівіа џ $ а џ! ŒŽ> ?   G H 3 4 5 ‘’7 8 O P E F g h ] ^ ‡іˆіm n ЁЂ‰HBC& ' УФХЇіЈіwPI J  !"#$%&'˜ — €{ | : ; іŽіа4аnoq r ;aV… † k l Lolvwxyz{%і&іь џ" OPQбђљDEђѓєѕтPббчіші ьь@@ббббN@O@ б б‚ ƒ „ і і ібб~cіdіeіfі    ээвгдиь єѕвв в=AjkгггŠ ‹ Œ ггі€іі  ФіХіЦіЧід ддд     юя№ёдддддддддддд8з9з2 7 9 < > @ sіtіuі“”ддГ Д Е Ж JMU ZmЉіЊі‚HXYZ~  €   д д дVіWі<@=@>@?@@@L…"д#дƒ„…†:;дF I  д* B@C@F@G@ніоіщъ8і9і:і -: DMT Wuее0@ ќ2љТіУі-:W3і4і5і6і%&Т У //† ‡ ˆ ‰ c PЭЮ2@3@юю ю ю ю ю ююююююююююююююююююю ю!ю"ю#ю$ю%ю&ю'ю(ю)ю*ю+юHBIBж%ыїњBB  /ї0ї1ї2ї3ї4ї5ї6ї7ї8ї9ї:ї  зйѓзс?з0 Э Ю BB>з/ їїeP „H_ї`їQ/R/Aз2 їїїї!B"B+ї,ї@з1 =B>B`юaю()*ŒH&ї'ї(ї)ї*їззїїїїГДњX@їAї-ї.їззkZlZў/џ/ззя№ё ї їїGїHїIїJїKїLїMїNї_+`+a+VїWїBзCзи и и и и иииииии "$' ї!ї"ї#ї$ї%ї/B0BўџFGHHIJˆHїїCїDїEїFївTu!и"ијјјиии јјии ј ји*и;=јјwx  ‘ ’ и24 й  фхц [пщя№ёййпсяѓє [зй т ђљ §DF*й+й,йNO"й#й…й†й ї-й.й/й ўяўяgzOpenh323libce - Win32 (WCE x86em) DebugOpenh323libce - Win32 (WCE x86em) ReleaseOpenh323libce - Win32 (WCE ARM) ReleaseOpenh323libce - Win32 (WCE SH4) ReleaseOpenh323libce - Win32 (WCE ARM) DebugOpenh323libce - Win32 (WCE ARMV4) DebugOpenh323libce - Win32 (WCE SH4) DebugOpenh323libce - Win32 (WCE emulator) Debugpwlibce - Win32 (WCE ARM) Releasepwlibce - Win32 (WCE SH4) Releasepwlibce - Win32 (WCE emulator) Releasepwlibce - Win32 (WCE ARMV4) Debugpwlibce - Win32 (WCE ARMV4) Releasepwlibce - Win32 (WCE ARM) Debugpwlibce - Win32 (WCE emulator) Debugpwlibce - Win32 (WCE x86em) Debugpwlibce - Win32 (WCE SH4) Debugpwlibce - Win32 (WCE x86em) ReleaseD:\openh323\src\channels.cxx"channels.h""h323pdu.h""h323ep.h""h323rtp.h"H323DataChannel::H323DataChannelH323Connection &connconst H323Capability &capDirections dirunsigned int idH323Channel::SetBandwidthUsedBOOLunsigned int bandwidthH323_RTPChannel::OpenH323Channel::OnMiscellaneousCommandvoidconst H245_MiscellaneousCommand_type &typeH323_RTPChannel::GetSilenceDurationPTimeIntervalH323_RealTimeChannel::OnSendingPDUH245_OpenLogicalChannel &openH323_RTPChannel::RemoveFilterconst PNotifier &filterFunctionH323UnidirectionalChannel::GetDirectionH323Channel::DirectionsH323_RTPChannel::CleanUpOnTerminationH323_RTPChannel::~H323_RTPChannelH323DataChannel::CleanUpOnTerminationH323UnidirectionalChannel::H323UnidirectionalChannelDirections directionH323Channel::GetSessionIDunsigned intH323Channel::OnSendOpenAckconst H245_OpenLogicalChannel &H245_OpenLogicalChannelAck &H323Channel::IsRunningH323_ExternalRTPChannel::Transmitoperator <<ostream &ostream &strmconst CodecReadAnalyser &analysisostream &outH323Channel::Directions dirH323_ExternalRTPChannel::StartH323_RTPChannel::ReceiveH323UnidirectionalChannel::StartH323Channel::OnReceivedPDUunsigned int &H323_RealTimeChannel::OnReceivedAckPDUconst H245_OpenLogicalChannelAck &ackH323_ExternalRTPChannel::OnSendingPDUH245_H2250LogicalChannelParameters ¶mH323DataChannel::OnSendOpenAckH245_OpenLogicalChannelAck &ackH323_ExternalRTPChannel::H323_ExternalRTPChannelH323Connection &connectionconst H323Capability &capabilityconst PIPSocket::Address &ipWORD dataPortconst H323TransportAddress &dataconst H323TransportAddress &controlH323_ExternalRTPChannel::IsRunningH323_RTPChannel::OnSendingAltPDUH245_ArrayOf_GenericInformation &alternateH323ChannelNumber::PrintOnH323_RealTimeChannel::OnReceivedPDUconst H245_OpenLogicalChannel &openunsigned int &errorCodeH323Channel::OnJitterIndicationDWORD (__cdecl *PTRACE_PARAM)(jitter)H323BidirectionalChannel::GetDirectionH323_RealTimeChannel::H323_RealTimeChannelH323DataChannel::GetSessionIDH323_ExternalRTPChannel::GetRemoteAddressPIPSocket::Address &ipWORD &dataPortH323DataChannel::~H323DataChannelH323_RTPChannel::GetSessionIDCodecReadAnalyserenumCodecReadAnalyser::CodecReadAnalyserCodecReadAnalyser::AddSampleDWORD timestampCodecReadAnalyser::tickPTimeInterval %[MaxSamples]CodecReadAnalyser::rtpDWORD %[MaxSamples]CodecReadAnalyser::countPINDEXH323_ExternalRTPChannel::SetExternalAddressH323DataChannel::CreateTransportH323_ExternalRTPChannel::OnSendOpenAckH245_H2250LogicalChannelAckParameters ¶mH323DataChannel::OnSendingPDUH323ChannelNumber::ClonePObject *H323_RealTimeChannel::GetRTPPayloadTypeRTP_DataFrame::PayloadTypesH323_RealTimeChannel::SetDynamicRTPPayloadTypeint newTypeH323Channel::GetCodecH323Codec *H323BidirectionalChannel::H323BidirectionalChannelH323BidirectionalChannel::StartH323_RTPChannel::H323_RTPChannelRTP_Session &rH323Channel::H323ChannelH323_RTPChannel::AddFilterH323ChannelNumber::HashFunctionH323ChannelNumber::operator ++H323ChannelNumber &intH323ChannelNumber::H323ChannelNumberunsigned int numBOOL fromRemH323Channel::SendMiscCommandunsigned int commandH323Channel::SetInitialBandwidthH323_RTPChannel::OnSendOpenAckH323ChannelNumber::ComparePObject::Comparisonconst PObject &objH323Channel::CleanUpOnTerminationH323DataChannel::CreateListenerH323_RTPChannel::OnSendingPDUH323_ExternalRTPChannel::OnReceivedAckPDUconst H245_H2250LogicalChannelAckParameters ¶mH323_RTPChannel::OnReceivedAckPDUH323Channel::PrintOnH323_RTPChannel::OnReceivedPDUconst H245_H2250LogicalChannelParameters ¶mH323Channel::OnFlowControllong bitRateRestrictionH323_ExternalRTPChannel::GetSessionIDH323_RTPChannel::OnReceivedAltPDUconst H245_ArrayOf_GenericInformation &alternateH323_ExternalRTPChannel::ReceiveH323Channel::OpenH323_RTPChannel::OnSendOpenAckAltH323Channel::OnReceivedAckPDUconst H245_OpenLogicalChannelAck &H323Channel::~H323ChannelH323_RTPChannel::TransmitH323Channel::OnMiscellaneousIndicationconst H245_MiscellaneousIndication_type &typeH323_RTPChannel::OnReceivedAckAltPDUH323DataChannel::OnReceivedAckPDUH323DataChannel::OnReceivedPDUH323_ExternalRTPChannel::OnReceivedPDUH323_RealTimeChannel::OnSendOpenAckH323LogicalChannelThreadPThreadH323LogicalChannelThread::PCLASSINFOH323LogicalChannelThread::H323LogicalChannelThreadH323EndPoint &endpointH323Channel &channelBOOL rxH323LogicalChannelThread::MainH323LogicalChannelThread::channelH323Channel &H323LogicalChannelThread::receiverD:\openh323\src\codecs.cxx"codecs.h""h323con.h"H323VideoCodec::OnVideoNotDecodedMBsunsigned int (__cdecl *PTRACE_PARAM)(firstMB)H323Codec::H323Codecconst char *fmtDirection dirH323AudioCodec::GetAverageSignalLevelH323VideoCodec::OnVideoIndicateReadyToActivateH323VideoCodec::OnLostPictureH323VideoCodec::OnVideoTemporalSpatialTradeOffIndicationint (__cdecl *PTRACE_PARAM)(newQuality)H323Codec::OnFlowControllong (__cdecl *PTRACE_PARAM)(bitRateRestriction)H323Codec::OnMiscellaneousIndicationconst H245_MiscellaneousIndication_type &(__cdecl *PTRACE_PARAM)(type)H323Codec::IsRawDataChannelNativeH323Codec::AttachLogicalChannelH323Channel *channelH323AudioCodec::CloseH323Codec::OpenH323Connection &H323StreamedAudioCodec::DecodeFrameconst BYTE *bufferunsigned int lengthunsigned int &writtenunsigned int &decodedBytesH323Codec::SetRawDataHeldH323Codec::WriteRawvoid *dataPINDEX lengthH323VideoCodec::~H323VideoCodecH323Codec::AddFilterconst PNotifier ¬ifierH323Codec::CloseRawDataChannelH323Codec::GetFrameRateH323Codec::ReadRawPINDEX sizePINDEX &lengthH323VideoCodec::SendMiscCommandH323VideoCodec::SetTargetFrameTimeMsunsigned int msH323VideoCodec::OnFastUpdatePictureH323VideoCodec::SetMaxBitRateunsigned int bitRateH323_muLawCodec::EncodeSampleshort sampleH323StreamedAudioCodec::H323StreamedAudioCodecunsigned int samplesunsigned int bitsH323_ALawCodec::DecodeSampleshortint sampleH323AudioCodec::GetFrameRateH323_muLawCodec::DecodeSampleH323VideoCodec::OnMiscellaneousCommandH323AudioCodec::SetSilenceDetectionModeSilenceDetectionMode modeunsigned int thresholdunsigned int signalDeadbandunsigned int silenceDeadbandunsigned int adaptivePeriodH323AudioCodec::DetectSilenceH323AudioCodec::OpenH323FramedAudioCodec::H323FramedAudioCodecH323AudioCodec::H323AudioCodecH323AudioCodec::GetSilenceDetectionModeH323AudioCodec::SilenceDetectionModeBOOL *isInTalkBurstunsigned int *currentThresholdH323VideoCodec::CloseH323VideoCodec::OpenH323Codec::SwapChannelPChannel *PChannel *newChannelBOOL autoDeleteH323VideoCodec::OnVideoTemporalSpatialTradeOffCommandH323Codec::OnMiscellaneousCommandconst H245_MiscellaneousCommand_type &(__cdecl *PTRACE_PARAM)(type)H323Codec::AttachChannelPChannel *channelH323_muLawCodec::H323_muLawCodecBOOL at56kbpsunsigned int frameSizeH323FramedAudioCodec::DecodeFrameconst BYTE *H323FramedAudioCodec::Writeconst RTP_DataFrame &H323StreamedAudioCodec::EncodeFrameBYTE *bufferH323VideoCodec::OnFastUpdateMBint (__cdecl *PTRACE_PARAM)(firstGOB)H323VideoCodec::OnLostPartialPictureH323AudioCodec::~H323AudioCodecH323VideoCodec::SetGeneralCodecOptionconst char *H323VideoCodec::OnFastUpdateGOBunsigned int (__cdecl *PTRACE_PARAM)(firstGOB)H323_ALawCodec::EncodeSampleH323FramedAudioCodec::AttachAECPAec *_aecH323VideoCodec::H323VideoCodecH323_ALawCodec::H323_ALawCodecH323VideoCodec::OnFreezePictureH323VideoCodec::OnMiscellaneousIndicationH323AudioCodec::SetRawDataHeldBOOL holdH323FramedAudioCodec::Readunsigned int &lengthRTP_DataFrame &H323FramedAudioCodec::GetAverageSignalLevelD:\openh323\src\cu30codec.cxxD:\openh323\src\ffh263codec.cxxD:\openh323\src\g711.clinear2ulawint pcm_valulaw2linearint u_valseg_uendint %[8]u2aunsigned char %[128]alaw2linearint a_vallinear2alawsearchint valint *tableint sizeseg_aenda2uD:\openh323\src\gccpdu.cxx"gccpdu.h"GCC_FunctionNotSupportedResponse::DecodePASN_Stream &strmGCC_RegistryRetrieveEntryRequest::CompareGCC_RegistryResponse_result::operator =GCC_RegistryResponse_result &unsigned int vGCC_ChallengeResponse::CloneNames_GCC_ConferenceNameSelectorconst PASN_Names %[]GCC_ConductorPermissionGrantIndication::DecodeGCC_UserData_subtype::EncodeGCC_ApplicationInvokeSpecifier::DecodeGCC_Handle::GCC_Handleunsigned int tagPASN_Object::TagClass tagClassNames_GCC_RegistryResponse_primitiveTypeGCC_ChallengeItem::PrintOnGCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList::GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesListGCC_ConferenceTimeInquireIndication::EncodeGCC_RegistryKey::GetDataLengthGCC_ArrayOf_TextString::CreateObjectPASN_Object *GCC_ConferenceQueryResponse_result::GCC_ConferenceQueryResponse_resultGCC_RosterUpdateIndication_applicationInformation::CreateObjectGCC_RosterUpdateIndication_nodeInformation::CompareGCC_Privilege::operator =GCC_Privilege &GCC_ApplicationInvokeIndication::CompareGCC_ConferenceName::DecodeGCC_ConferenceTimeExtendIndication::CompareGCC_ConferenceAssistanceIndication::DecodeGCC_ConferenceInviteResponse::CloneGCC_ConferencePriority::DecodeGCC_ConferenceTerminateResponse_result::GCC_ConferenceTerminateResponse_resultGCC_ConferenceJoinRequest::CloneGCC_ConferenceAddRequest::GCC_ConferenceAddRequestGCC_ConferenceEjectUserResponse::EncodeGCC_ConferenceAddRequest::CompareGCC_RosterUpdateIndication_applicationInformation_subtype::GetDataLengthGCC_ExtraDialingString::operator =GCC_ExtraDialingString &const PASN_BMPString &vconst PWORDArray &vconst PString &vconst char *vGCC_ConferenceTimeRemainingIndication::CloneGCC_ChallengeResponseAlgorithm::CreateObjectGCC_NonStandardPDU::CompareGCC_CapabilityID::GCC_CapabilityIDGCC_NetworkAddress_subtype_aggregatedChannel::EncodeNames_GCC_KeyGCC_FunctionNotSupportedResponse::GCC_FunctionNotSupportedResponseGCC_SessionKey::PrintOnGCC_ConductorPermissionGrantIndication::PrintOnGCC_ApplicationInvokeSpecifier::GetDataLengthGCC_ConferenceNameModifier::CloneGCC_ApplicationRecord_nonCollapsingCapabilities::CreateObjectGCC_ConductorAssignIndication::CompareGCC_ConferenceTransferResponse::PrintOnGCC_ConferenceDescriptor::GetDataLengthGCC_ConferenceJoinRequest::DecodeGCC_ConferenceName::CompareGCC_TextMessageIndication::GCC_TextMessageIndicationGCC_RegistryMonitorEntryRequest::EncodeGCC_ConnectData::EncodeGCC_SimpleTextString::CloneNames_GCC_ConferenceEjectUserResponse_resultGCC_ConferenceEjectUserIndication_reason::GCC_ConferenceEjectUserIndication_reasonGCC_DialingString::operator =GCC_DialingString &GCC_ConferenceDescriptor::CloneGCC_ConferenceUnlockRequest::PrintOnGCC_ConferenceTransferRequest::GCC_ConferenceTransferRequestGCC_Password::CloneGCC_RegistryResponse::CompareGCC_RosterUpdateIndication::DecodeGCC_Password::GCC_PasswordGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update::operator []GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype &PINDEX iGCC_ApplicationRecord_nonCollapsingCapabilities_subtype::GCC_ApplicationRecord_nonCollapsingCapabilities_subtypeGCC_ConferenceEjectUserRequest_reason::operator =GCC_ConferenceEjectUserRequest_reason &GCC_RosterUpdateIndication_applicationInformation_subtype::CompareGCC_ConferenceAddResponse::DecodeGCC_ConferenceInviteRequest::PrintOnGCC_NodeRecord::EncodeGCC_RegistryKey::DecodeGCC_ChallengeResponseAlgorithm::CloneGCC_ArrayOf_ChallengeItem::CloneGCC_ConnectData::CompareGCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype::PrintOnGCC_ConferenceEjectUserRequest::PrintOnGCC_ConferenceLockRequest::GCC_ConferenceLockRequestGCC_NodeProperties::DecodeGCC_H221NonStandardIdentifier::operator =GCC_H221NonStandardIdentifier &const PBYTEArray &vGCC_RegistryModificationRights::operator =GCC_RegistryModificationRights &GCC_ConductorPermissionGrantIndication::GetDataLengthGCC_DynamicTokenID::operator =GCC_DynamicTokenID &int vGCC_ConnectGCCPDU::CreateObjectGCC_ConferenceCreateResponse::GCC_ConferenceCreateResponseGCC_ConferenceUnlockResponse::EncodeGCC_ConferenceEjectUserRequest_reason::CloneGCC_ConferenceAddRequest::DecodeGCC_ConferenceTimeInquireIndication::CompareGCC_ApplicationInvokeSpecifier::GCC_ApplicationInvokeSpecifierGCC_ApplicationRecord::CompareGCC_ConferenceLockRequest::EncodeGCC_ConferenceQueryRequest::GCC_ConferenceQueryRequestGCC_ChannelID::GCC_ChannelIDGCC_ConferenceLockIndication::EncodeGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtypeGCC_ApplicationRecord_nonCollapsingCapabilities::CloneGCC_NetworkAddress::CloneGCC_RosterUpdateIndication_applicationInformation::CloneGCC_ConferenceEjectUserIndication::EncodeGCC_TextMessageIndication::GetDataLengthGCC_DynamicChannelID::operator =GCC_DynamicChannelID &GCC_ConferenceName::CloneGCC_ConferenceAddResponse_result::GCC_ConferenceAddResponse_resultGCC_ChannelID::operator =GCC_ChannelID &GCC_RosterUpdateIndication_nodeInformation::DecodeNames_GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesListGCC_RegistryDeleteEntryRequest::CloneGCC_ConferenceQueryResponse::EncodeGCC_ConferenceLockResponse::GCC_ConferenceLockResponseNames_GCC_ConferenceTerminateIndication_reasonGCC_RegistryResponse_primitiveType::GCC_RegistryResponse_primitiveTypeNames_GCC_NetworkAddress_subtypeGCC_ConferenceAddResponse::CloneGCC_NetworkAddress_subtype_transportConnection::GCC_NetworkAddress_subtype_transportConnectionGCC_ConferenceLockResponse::PrintOnGCC_ConferenceAssistanceIndication::PrintOnGCC_ConferenceTransferRequest::GetDataLengthGCC_UserData_subtype::GCC_UserData_subtypeGCC_ConferenceUnlockRequest::CloneGCC_SessionKey::GetDataLengthGCC_SubAddressString::operator =GCC_SubAddressString &GCC_ConferenceLockResponse::CloneGCC_ConferenceEjectUserResponse::CompareGCC_RegistryAllocateHandleRequest::CloneGCC_NetworkAddress_subtype_transportConnection::GetDataLengthGCC_DynamicTokenID::GCC_DynamicTokenIDGCC_NetworkAddress_subtype_transportConnection::CloneGCC_Key::GCC_KeyGCC_RegistryAllocateHandleResponse::PrintOnGCC_ArrayOf_ConferenceDescriptor::GCC_ArrayOf_ConferenceDescriptorGCC_RegistryKey::GCC_RegistryKeyGCC_ConferenceTerminateResponse::EncodeGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::CompareGCC_ChallengeResponse::GCC_ChallengeResponseGCC_ConferenceLockResponse::GetDataLengthGCC_CapabilityID::CreateObjectGCC_RegistryEntryOwner::CloneGCC_NonStandardParameter::GCC_NonStandardParameterGCC_ConferenceEjectUserResponse_result::operator =GCC_ConferenceEjectUserResponse_result &GCC_RegistryKey::PrintOnGCC_ChallengeItem::GCC_ChallengeItemGCC_ArrayOf_ApplicationInvokeSpecifier::GCC_ArrayOf_ApplicationInvokeSpecifierGCC_CapabilityClass::CloneNames_GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdateGCC_ConductorAssignIndication::DecodeGCC_NonStandardParameter::GetDataLengthGCC_RosterUpdateIndication_applicationInformation::operator []GCC_RosterUpdateIndication_applicationInformation_subtype &Names_GCC_ResponsePDUGCC_AlternativeNodeID::CloneGCC_ConferenceUnlockResponse::CloneGCC_ConferenceUnlockResponse::GCC_ConferenceUnlockResponseGCC_ConferenceQueryRequest::GetDataLengthGCC_ConferenceTerminateIndication::DecodeNames_GCC_ConferenceEjectUserIndication_reasonGCC_ConferencePriorityScheme::GCC_ConferencePrioritySchemeGCC_PasswordChallengeRequestResponse_challengeRequestResponse::CompareGCC_UserID::CloneGCC_ConferenceName::GetDataLengthGCC_ConferencePriority::GetDataLengthGCC_ConferenceUnlockRequest::EncodeGCC_RegistryMonitorEntryIndication::CompareGCC_ConductorReleaseIndication::EncodeGCC_ConferencePriority::CloneGCC_ConnectData::GCC_ConnectDataNames_GCC_PasswordSelectorGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::GetDataLengthGCC_ConferenceEjectUserRequest::CloneGCC_RegistryResponse_primitiveType::operator =GCC_RegistryResponse_primitiveType &GCC_ConferenceEjectUserIndication_reason::operator =GCC_ConferenceEjectUserIndication_reason &GCC_ConferenceJoinRequest::CompareGCC_ConferenceJoinResponse::DecodeGCC_RosterUpdateIndication_nodeInformation_nodeRecordList::CloneGCC_ConferenceEjectUserResponse::GetDataLengthGCC_RegistryEntryOwner_owned::CompareGCC_ChallengeResponse::CompareGCC_RosterUpdateIndication::GCC_RosterUpdateIndicationGCC_NodeRecord::PrintOnGCC_RegistryAllocateHandleResponse_result::GCC_RegistryAllocateHandleResponse_resultGCC_ArrayOf_ChallengeItem::operator []GCC_ChallengeItem &GCC_NodeProperties::PrintOnGCC_NodeType::GCC_NodeTypeGCC_EntityID::CloneGCC_ConferencePriority::CompareGCC_ArrayOf_ConferenceDescriptor::CreateObjectGCC_RegistryRegisterChannelRequest::DecodeGCC_ArrayOf_TextString::CloneGCC_AsymmetryIndicator::GCC_AsymmetryIndicatorGCC_TextString::operator =GCC_TextString &GCC_ChallengeRequest::GetDataLengthGCC_FunctionNotSupportedResponse::PrintOnGCC_RegistryKey::CompareGCC_RosterUpdateIndication_nodeInformation::CloneGCC_ConferenceTerminateIndication_reason::CloneGCC_RosterUpdateIndication_nodeInformation::GetDataLengthGCC_RegistryEntryOwner_owned::GetDataLengthGCC_ApplicationRecord_nonCollapsingCapabilities::GCC_ApplicationRecord_nonCollapsingCapabilitiesGCC_RegistrySetParameterRequest::GCC_RegistrySetParameterRequestGCC_ConferenceTransferIndication::EncodeGCC_ConferenceQueryResponse::GetDataLengthGCC_ConferenceJoinRequest::GCC_ConferenceJoinRequestGCC_ConferenceLockIndication::GetDataLengthGCC_RegistryAssignTokenRequest::DecodeGCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype::DecodeGCC_ConferenceCreateResponse::CompareGCC_ChannelType::operator =GCC_ChannelType &GCC_ConferenceTransferResponse::DecodeGCC_ConferenceEjectUserIndication::GetDataLengthGCC_ConferenceTerminateRequest::CompareNames_GCC_ChannelTypeGCC_UserIDIndication::EncodeGCC_ConferenceJoinResponse::CloneGCC_ArrayOf_ConferenceDescriptor::CloneGCC_ConferenceTransferRequest::DecodeGCC_ConferenceTimeExtendIndication::EncodeGCC_ConferenceCreateResponse::DecodeNames_GCC_ConferenceTransferResponse_resultGCC_ConferenceDescriptor::GCC_ConferenceDescriptorGCC_ConferenceTimeRemainingIndication::GetDataLengthGCC_ConferenceEjectUserResponse::GCC_ConferenceEjectUserResponseGCC_ConferenceTerminateRequest::GCC_ConferenceTerminateRequestGCC_SimpleNumericString::GCC_SimpleNumericStringGCC_ConferenceTransferIndication::CompareGCC_SubAddressString::GCC_SubAddressStringGCC_RegistryAllocateHandleResponse::GCC_RegistryAllocateHandleResponseNames_GCC_RegistryEntryOwnerGCC_ConferenceTerminateIndication::CompareGCC_ConductorPermissionAskIndication::PrintOnGCC_RegistryResponse_result::GCC_RegistryResponse_resultGCC_ChallengeResponse::DecodeGCC_RegistryAllocateHandleResponse::GetDataLengthGCC_GCCPDU::CreateObjectGCC_ApplicationInvokeSpecifier::CompareGCC_ConferenceTimeExtendIndication::GCC_ConferenceTimeExtendIndicationGCC_EntityID::GCC_EntityIDGCC_ConferenceEjectUserRequest::EncodeGCC_Password::GetDataLengthGCC_TextString::GCC_TextStringGCC_ConferenceTimeInquireIndication::GCC_ConferenceTimeInquireIndicationGCC_ConferenceCreateRequest::PrintOnGCC_StaticTokenID::operator =GCC_StaticTokenID &GCC_RosterUpdateIndication::GetDataLengthGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtypeGCC_ConferenceTimeRemainingIndication::EncodeGCC_RegistryMonitorEntryIndication::PrintOnGCC_ApplicationInvokeSpecifier_expectedCapabilitySet::operator []GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype &GCC_PasswordChallengeRequestResponse_challengeRequestResponse::GCC_PasswordChallengeRequestResponse_challengeRequestResponseGCC_RegistryResponse::GCC_RegistryResponseGCC_ConferenceInviteResponse::EncodeGCC_ConferenceUnlockIndication::GetDataLengthGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update::CreateObjectGCC_ConferenceEjectUserIndication::PrintOnGCC_ChallengeRequest::EncodeGCC_RegistryMonitorEntryIndication::CloneGCC_ConferenceTransferResponse_result::CloneGCC_ConferenceUnlockResponse::PrintOnGCC_ConductorPermissionAskIndication::GetDataLengthGCC_ConferenceCreateRequest::GetDataLengthGCC_ApplicationInvokeSpecifier_expectedCapabilitySet::GCC_ApplicationInvokeSpecifier_expectedCapabilitySetGCC_TerminationMethod::operator =GCC_TerminationMethod &GCC_ConferenceTransferIndication::GetDataLengthGCC_NodeProperties::CompareGCC_RegistryAllocateHandleResponse::DecodeGCC_ConferenceEjectUserResponse_result::GCC_ConferenceEjectUserResponse_resultGCC_UserData_subtype::CloneGCC_RegistryRegisterChannelRequest::CompareGCC_ConferenceJoinResponse::PrintOnGCC_ChallengeResponse::GetDataLengthGCC_IndicationPDU::CreateObjectGCC_TextMessageIndication::PrintOnGCC_ApplicationRecord_nonCollapsingCapabilities_subtype::EncodeGCC_ConferenceName::GCC_ConferenceNameGCC_DialingString::GCC_DialingStringGCC_ConferenceInviteResponse::GetDataLengthGCC_ApplicationRecord::GCC_ApplicationRecordGCC_RegistryMonitorEntryRequest::CompareGCC_NetworkAddress::GCC_NetworkAddressGCC_NetworkAddress_subtype_aggregatedChannel::GCC_NetworkAddress_subtype_aggregatedChannelGCC_RegistryAssignTokenRequest::CompareGCC_ConferenceJoinRequest::GetDataLengthGCC_ApplicationInvokeIndication::EncodeGCC_ConferenceInviteResponse::CompareGCC_NonStandardPDU::PrintOnGCC_RegistryAllocateHandleRequest::PrintOnGCC_H221NonStandardIdentifier::GCC_H221NonStandardIdentifierGCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtypeGCC_ConferenceInviteRequest::DecodeGCC_IndicationPDU::GCC_IndicationPDUGCC_ConferenceTerminateResponse::CloneGCC_NodeProperties::GCC_NodePropertiesGCC_ConferenceLockResponse_result::GCC_ConferenceLockResponse_resultGCC_Handle::operator =GCC_Handle &GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList::GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordListGCC_NetworkAddress_subtype_transportConnection::PrintOnGCC_ArrayOf_UserID::CreateObjectGCC_RosterUpdateIndication_nodeInformation::GCC_RosterUpdateIndication_nodeInformationGCC_ArrayOf_ApplicationInvokeSpecifier::CreateObjectGCC_NonStandardParameter::DecodeGCC_RegistryMonitorEntryIndication::GetDataLengthGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update::CloneGCC_ConferenceTransferResponse::CloneGCC_ArrayOf_ChallengeItem::CreateObjectGCC_RegistryResponse::EncodeGCC_RegistrySetParameterRequest::EncodeGCC_ConferenceUnlockResponse::DecodeGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdateGCC_ConferenceUnlockIndication::DecodeGCC_PasswordChallengeRequestResponse_challengeRequestResponse::EncodeGCC_ChallengeRequest::CompareGCC_ArrayOf_UserID::CloneGCC_ConferenceLockResponse_result::operator =GCC_ConferenceLockResponse_result &GCC_ConferenceTimeExtendIndication::PrintOnGCC_ChallengeItem::DecodeGCC_TokenID::operator =GCC_TokenID &GCC_ApplicationInvokeIndication::CloneGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::EncodeGCC_ConferenceEjectUserIndication_reason::CloneGCC_ConductorPermissionAskIndication::DecodeGCC_RegistryRetrieveEntryRequest::CloneGCC_ConferenceQueryRequest::CloneGCC_ConferenceQueryResponse::GCC_ConferenceQueryResponseGCC_RegistryMonitorEntryRequest::DecodeGCC_RosterUpdateIndication_applicationInformation_subtype::DecodeGCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype::CloneGCC_ConferenceAddResponse::PrintOnGCC_SimpleNumericString::operator =GCC_SimpleNumericString &Names_GCC_RegistryAllocateHandleResponse_resultGCC_RegistryRegisterChannelRequest::GCC_RegistryRegisterChannelRequestNames_GCC_AsymmetryIndicatorGCC_ApplicationRecord_nonCollapsingCapabilities_subtype::GetDataLengthGCC_RegistryAssignTokenRequest::GetDataLengthGCC_ConferenceAssistanceIndication::CompareGCC_PasswordChallengeRequestResponse::GCC_PasswordChallengeRequestResponseGCC_RosterUpdateIndication_nodeInformation::EncodeGCC_RegistryRetrieveEntryRequest::EncodeGCC_ConferenceTransferRequest::PrintOnGCC_NonStandardPDU::DecodeGCC_ConferenceAssistanceIndication::GetDataLengthGCC_SessionKey::CompareGCC_ConferencePriorityScheme::CreateObjectGCC_ConferenceTransferResponse::CompareGCC_CapabilityID::CloneGCC_Time::operator =GCC_Time &GCC_RegistryEntryOwner::CreateObjectGCC_ConferenceTransferIndication::GCC_ConferenceTransferIndicationGCC_CapabilityClass::GCC_CapabilityClassGCC_ConferenceDescriptor::EncodeGCC_RegistryResponse::PrintOnGCC_RegistryAllocateHandleRequest::EncodeGCC_ConferenceJoinResponse_result::operator =GCC_ConferenceJoinResponse_result &GCC_DynamicChannelID::GCC_DynamicChannelIDGCC_ConferenceUnlockIndication::GCC_ConferenceUnlockIndicationGCC_ConferenceAddResponse::GetDataLengthGCC_ConferenceTimeInquireIndication::CloneGCC_ConferenceTimeInquireIndication::GetDataLengthGCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refreshGCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype &GCC_ApplicationRecord_nonCollapsingCapabilities::operator []GCC_ApplicationRecord_nonCollapsingCapabilities_subtype &GCC_ApplicationInvokeSpecifier::CloneNames_GCC_CapabilityClassGCC_RegistryResponse::GetDataLengthGCC_NonStandardParameter::CompareGCC_RosterUpdateIndication_nodeInformation_nodeRecordList::CreateObjectNames_GCC_PasswordChallengeRequestResponseGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::GCC_NetworkAddress_subtype_aggregatedChannel_transferModesGCC_RequestPDU::CloneGCC_StaticChannelID::CloneGCC_ConferenceTransferRequest::CloneGCC_ConferenceJoinResponse_result::CloneNames_GCC_IndicationPDUGCC_ArrayOf_Privilege::GCC_ArrayOf_PrivilegeGCC_ConferenceLockResponse::EncodeGCC_ConferenceEjectUserResponse::CloneGCC_ConductorPermissionGrantIndication::EncodeGCC_ApplicationRecord::PrintOnGCC_ConferenceTerminateRequest::DecodeGCC_ConferenceQueryResponse::PrintOnGCC_RegistryMonitorEntryIndication::EncodeGCC_ConferenceQueryRequest::CompareGCC_NodeRecord::CompareGCC_RegistryEntryOwner_owned::EncodeGCC_NetworkAddress_subtype::CreateObjectGCC_ChannelType::CloneGCC_ApplicationRecord::EncodeGCC_ConferenceTerminateIndication_reason::GCC_ConferenceTerminateIndication_reasonGCC_IndicationPDU::CloneGCC_RegistrySetParameterRequest::CompareGCC_RegistryRetrieveEntryRequest::GetDataLengthGCC_NetworkAddress_subtype_transportConnection::EncodeNames_GCC_CapabilityIDGCC_ConferenceTerminateRequest_reason::CloneGCC_ConferenceCreateResponse_result::CloneGCC_PasswordChallengeRequestResponse::CreateObjectGCC_ConferenceEjectUserResponse::DecodeGCC_TokenID::GCC_TokenIDGCC_RegistryRegisterChannelRequest::CloneGCC_NetworkAddress::operator []GCC_NetworkAddress_subtype &GCC_Privilege::GCC_PrivilegeNames_GCC_ConferenceUnlockResponse_resultGCC_ConferencePriority::EncodeGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordListGCC_ConferenceCreateResponse::CloneGCC_ConferenceCreateRequest::CloneGCC_ConferenceAddRequest::EncodeGCC_NetworkAddress_subtype_aggregatedChannel::DecodeGCC_ChallengeRequest::PrintOnGCC_ConferenceLockIndication::DecodeGCC_ConferenceLockResponse::CompareGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refreshGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype &GCC_RequestPDU::GCC_RequestPDUGCC_ConferenceAddRequest::CloneGCC_Time::CloneGCC_AlternativeNodeID::CreateObjectGCC_ConferenceTerminateIndication::CloneGCC_ConnectGCCPDU::GCC_ConnectGCCPDUGCC_ConferenceNameSelector::CloneGCC_RegistryAllocateHandleResponse::CompareGCC_NodeRecord::GCC_NodeRecordGCC_SessionKey::CloneGCC_ApplicationInvokeSpecifier::EncodeGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate::GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdateGCC_ConductorPermissionGrantIndication::CompareGCC_FunctionNotSupportedResponse::EncodeGCC_ConferenceJoinRequest::EncodeGCC_ConferenceDescriptor::PrintOnGCC_ResponsePDU::GCC_ResponsePDUGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtypeGCC_UserData::operator []GCC_UserData_subtype &GCC_TextMessageIndication::CompareGCC_ConferenceTerminateResponse::PrintOnNames_GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdateGCC_ConferenceAssistanceIndication::EncodeGCC_RegistrySetParameterRequest::DecodeGCC_UserIDIndication::GetDataLengthGCC_ChallengeResponseItem::GCC_ChallengeResponseItemNames_GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordListGCC_ConferencePriorityScheme::CloneGCC_ConferenceCreateResponse_result::operator =GCC_ConferenceCreateResponse_result &GCC_UserData_subtype::CompareGCC_ConductorReleaseIndication::PrintOnGCC_ChallengeResponseItem::CreateObjectGCC_ConferenceTimeInquireIndication::DecodeGCC_RegistryRetrieveEntryRequest::DecodeGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update::GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_updateGCC_ConferenceTransferResponse::GetDataLengthGCC_ChallengeResponseItem::CloneGCC_UserData::GCC_UserDataGCC_ConferenceInviteRequest::GetDataLengthGCC_ConferenceLockRequest::DecodeNames_GCC_AlternativeNodeIDGCC_ArrayOf_UserID::GCC_ArrayOf_UserIDGCC_RegistryRegisterChannelRequest::GetDataLengthGCC_StaticChannelID::operator =GCC_StaticChannelID &GCC_NodeType::operator =GCC_NodeType &GCC_TerminationMethod::CloneGCC_UserData_subtype::DecodeGCC_ChallengeResponseAlgorithm::GCC_ChallengeResponseAlgorithmNames_GCC_ConferenceTerminateRequest_reasonNames_GCC_ConferenceJoinResponse_resultGCC_H221NonStandardIdentifier::CloneGCC_RosterUpdateIndication::EncodeGCC_ConferenceAddResponse::EncodeNames_GCC_RegistryResponse_resultGCC_ConductorAssignIndication::EncodeGCC_ConferenceName::EncodeGCC_AlternativeNodeID::GCC_AlternativeNodeIDGCC_RosterUpdateIndication_applicationInformation_subtype::CloneGCC_UserIDIndication::GCC_UserIDIndicationGCC_ConferenceQueryResponse_result::CloneGCC_Key::CloneGCC_ChallengeRequest::CloneGCC_ArrayOf_Privilege::operator []GCC_RosterUpdateIndication::PrintOnGCC_RegistryResponse::DecodeGCC_NodeRecord::DecodeGCC_Key::CreateObjectGCC_FunctionNotSupportedResponse::CompareGCC_ConferenceTimeRemainingIndication::GCC_ConferenceTimeRemainingIndicationGCC_ConferenceJoinResponse::GCC_ConferenceJoinResponseGCC_RosterUpdateIndication::CloneGCC_ArrayOf_Privilege::CreateObjectGCC_ConferencePriority::PrintOnGCC_DynamicChannelID::CloneGCC_RegistryDeleteEntryRequest::GetDataLengthGCC_RegistryModificationRights::GCC_RegistryModificationRightsGCC_ConductorPermissionGrantIndication::GCC_ConductorPermissionGrantIndicationGCC_RegistryEntryOwner_owned::PrintOnGCC_PasswordChallengeRequestResponse_challengeRequestResponse::PrintOnGCC_ConferenceQueryResponse::CompareGCC_Password::DecodeGCC_RequestPDU::CreateObjectGCC_ConferenceTimeInquireIndication::PrintOnGCC_RegistryMonitorEntryRequest::GetDataLengthGCC_RegistryRetrieveEntryRequest::PrintOnGCC_ConferenceLockIndication::CloneGCC_ConferenceTerminateRequest::CloneNames_GCC_RegistryModificationRightsGCC_Password::CompareGCC_ApplicationRecord::GetDataLengthGCC_RegistryAllocateHandleResponse_result::CloneNames_GCC_ConferenceCreateResponse_resultGCC_RegistryMonitorEntryRequest::CloneGCC_CapabilityClass::CreateObjectGCC_ArrayOf_ApplicationInvokeSpecifier::CloneGCC_ApplicationInvokeIndication::PrintOnGCC_ConferenceInviteResponse::GCC_ConferenceInviteResponseGCC_ArrayOf_ConferenceDescriptor::operator []GCC_ConferenceDescriptor &GCC_ConferenceCreateRequest::DecodeGCC_ConductorReleaseIndication::DecodeGCC_ConferenceTerminateIndication::GCC_ConferenceTerminateIndicationGCC_ConferenceJoinResponse_result::GCC_ConferenceJoinResponse_resultNames_GCC_PrivilegeGCC_RosterUpdateIndication_nodeInformation::PrintOnGCC_ApplicationInvokeIndication::GCC_ApplicationInvokeIndicationNames_GCC_RequestPDUGCC_StaticTokenID::CloneGCC_RosterUpdateIndication_nodeInformation_nodeRecordList::GCC_RosterUpdateIndication_nodeInformation_nodeRecordListGCC_ConferenceNameModifier::operator =GCC_ConferenceNameModifier &GCC_ConductorAssignIndication::PrintOnGCC_SessionKey::DecodeGCC_NonStandardParameter::PrintOnGCC_ConferenceTerminateResponse_result::operator =GCC_ConferenceTerminateResponse_result &GCC_NonStandardPDU::GetDataLengthGCC_ConferenceEjectUserIndication::DecodeGCC_RegistryAllocateHandleResponse_result::operator =GCC_RegistryAllocateHandleResponse_result &GCC_ConferenceQueryResponse::DecodeGCC_ConferenceTerminateIndication::EncodeGCC_ConferenceLockIndication::GCC_ConferenceLockIndicationGCC_UserData::CloneGCC_RegistryResponse_primitiveType::CloneGCC_NetworkAddress_subtype_aggregatedChannel::CloneGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refreshGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype &Names_GCC_ConnectGCCPDUGCC_ConferenceCreateResponse_result::GCC_ConferenceCreateResponse_resultGCC_ConferenceTerminateIndication::PrintOnGCC_ConferenceUnlockResponse_result::GCC_ConferenceUnlockResponse_resultGCC_ConferenceTerminateRequest_reason::operator =GCC_ConferenceTerminateRequest_reason &GCC_ConferenceTerminateRequest_reason::GCC_ConferenceTerminateRequest_reasonGCC_ConductorPermissionAskIndication::CompareGCC_StaticChannelID::GCC_StaticChannelIDGCC_ChallengeRequest::GCC_ChallengeRequestGCC_PasswordSelector::GCC_PasswordSelectorGCC_ConferenceTimeRemainingIndication::PrintOnGCC_ApplicationRecord_nonCollapsingCapabilities_subtype::CompareGCC_ConferenceTransferRequest::CompareGCC_RegistryRetrieveEntryRequest::GCC_RegistryRetrieveEntryRequestGCC_NetworkAddress_subtype_aggregatedChannel::CompareGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_updateGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype &GCC_TextMessageIndication::EncodeGCC_RegistryRegisterChannelRequest::EncodeGCC_ResponsePDU::CloneGCC_RegistryAllocateHandleRequest::GCC_RegistryAllocateHandleRequestGCC_ConferenceLockRequest::CloneGCC_ConferenceTerminateResponse::DecodeGCC_ConferenceJoinResponse::EncodeGCC_ConferenceCreateRequest::CompareGCC_ExtraDialingString::GCC_ExtraDialingStringGCC_ConferenceInviteResponse_result::GCC_ConferenceInviteResponse_resultGCC_RegistryAllocateHandleRequest::GetDataLengthGCC_ConferenceAddResponse_result::CloneGCC_NetworkAddress_subtype::CloneGCC_RegistryMonitorEntryRequest::GCC_RegistryMonitorEntryRequestGCC_ConferenceTransferResponse_result::GCC_ConferenceTransferResponse_resultGCC_RegistryEntryOwner_owned::GCC_RegistryEntryOwner_ownedGCC_ChallengeItem::GetDataLengthGCC_ConductorAssignIndication::GCC_ConductorAssignIndicationGCC_ConferenceInviteRequest::CompareGCC_RosterUpdateIndication_applicationInformation_subtype::PrintOnGCC_ConnectData::DecodeGCC_ConferenceUnlockIndication::PrintOnGCC_UserIDIndication::CompareGCC_ConferenceEjectUserRequest::GetDataLengthGCC_ConferenceLockRequest::PrintOnGCC_ConferencePriority::GCC_ConferencePriorityGCC_ChallengeResponse::PrintOnGCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype::CompareGCC_ConferenceNameSelector::GCC_ConferenceNameSelectorNames_GCC_ConferencePrioritySchemeGCC_RegistryItem::CreateObjectGCC_ConferenceLockRequest::GetDataLengthGCC_ConferenceQueryRequest::EncodeGCC_ConferenceEjectUserRequest::CompareGCC_UserID::operator =GCC_UserID &Names_GCC_TerminationMethodGCC_RegistryDeleteEntryRequest::EncodeGCC_UserID::GCC_UserIDGCC_ConductorAssignIndication::GetDataLengthGCC_SimpleTextString::GCC_SimpleTextStringGCC_ConnectData::GetDataLengthGCC_RegistryMonitorEntryIndication::GCC_RegistryMonitorEntryIndicationGCC_RegistryDeleteEntryRequest::CompareGCC_ConferenceEjectUserIndication::GCC_ConferenceEjectUserIndicationGCC_NetworkAddress_subtype_transportConnection::CompareGCC_ArrayOf_TextString::operator []GCC_ConferenceUnlockRequest::DecodeGCC_ApplicationInvokeSpecifier_expectedCapabilitySet::CloneGCC_ChannelID::CloneGCC_ConferenceCreateResponse::EncodeGCC_ConferenceQueryRequest::DecodeGCC_ConferenceTerminateRequest::EncodeGCC_NonStandardPDU::GCC_NonStandardPDUGCC_ConferenceAddRequest::GetDataLengthGCC_RosterUpdateIndication_applicationInformation::GCC_RosterUpdateIndication_applicationInformationGCC_ApplicationRecord_nonCollapsingCapabilities_subtype::DecodeGCC_ChallengeItem::CloneGCC_RosterUpdateIndication_applicationInformation_subtype::EncodeGCC_ConferenceTransferRequest::EncodeGCC_RegistrySetParameterRequest::CloneGCC_StaticTokenID::GCC_StaticTokenIDGCC_RegistryMonitorEntryIndication::DecodeGCC_ChallengeResponse::EncodeGCC_ConductorReleaseIndication::GCC_ConductorReleaseIndicationGCC_ApplicationRecord_nonCollapsingCapabilities_subtype::CloneGCC_ConferenceEjectUserRequest::DecodeGCC_ConferenceInviteResponse_result::CloneGCC_ConferenceTerminateRequest::GetDataLengthGCC_ConferenceCreateRequest::GCC_ConferenceCreateRequestGCC_ConferenceEjectUserRequest_reason::GCC_ConferenceEjectUserRequest_reasonGCC_UserData_subtype::GetDataLengthNames_GCC_NodeTypeGCC_ApplicationInvokeIndication::GetDataLengthGCC_ConferenceQueryRequest::PrintOnGCC_ConferenceAddResponse::CompareGCC_ConferenceEjectUserResponse_result::CloneNames_GCC_RosterUpdateIndication_nodeInformation_nodeRecordListGCC_ConferenceAssistanceIndication::CloneGCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype::GetDataLengthGCC_ConferenceDescriptor::DecodeGCC_ConferenceName::PrintOnGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::CloneGCC_ConductorPermissionGrantIndication::CloneGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::PrintOnGCC_ApplicationInvokeSpecifier::PrintOnNames_GCC_ConferenceLockResponse_resultGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate::GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdateGCC_ConferenceTerminateResponse::GetDataLengthGCC_ConferenceInviteResponse_result::operator =GCC_ConferenceInviteResponse_result &Names_GCC_RegistryItemGCC_TokenID::CloneGCC_ConferenceTransferResponse::EncodeGCC_ConnectGCCPDU::CloneGCC_ConferenceTerminateResponse_result::CloneGCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype::EncodeGCC_RegistryAssignTokenRequest::GCC_RegistryAssignTokenRequestGCC_ConferenceUnlockResponse::GetDataLengthGCC_RegistryAllocateHandleResponse::EncodeGCC_ConnectData::CloneGCC_TextMessageIndication::DecodeGCC_UserIDIndication::CloneGCC_Handle::CloneGCC_GCCPDU::GCC_GCCPDUGCC_RegistryDeleteEntryRequest::GCC_RegistryDeleteEntryRequestGCC_ArrayOf_UserID::operator []Names_GCC_GCCPDUGCC_ConferenceAssistanceIndication::GCC_ConferenceAssistanceIndicationGCC_ConferenceDescriptor::CompareGCC_ArrayOf_Privilege::CloneGCC_NetworkAddress_subtype_aggregatedChannel::PrintOnGCC_ConferenceCreateResponse::PrintOnGCC_ConferenceUnlockRequest::GetDataLengthGCC_RegistryKey::EncodeGCC_NodeProperties::CloneGCC_RegistryAssignTokenRequest::CloneGCC_ConferenceNameSelector::CreateObjectGCC_SimpleTextString::operator =GCC_SimpleTextString &Names_GCC_ConferenceAddResponse_resultGCC_ConferenceUnlockIndication::EncodeGCC_ApplicationInvokeSpecifier_expectedCapabilitySet::CreateObjectGCC_ConferenceTimeExtendIndication::DecodeGCC_ApplicationRecord_nonCollapsingCapabilities_subtype::PrintOnGCC_ArrayOf_ChallengeItem::GCC_ArrayOf_ChallengeItemGCC_PasswordChallengeRequestResponse_challengeRequestResponse::CloneGCC_ConferenceCreateRequest::EncodeGCC_Time::GCC_TimeGCC_DynamicTokenID::CloneGCC_ChannelType::GCC_ChannelTypeGCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype::GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtypeGCC_ResponsePDU::CreateObjectGCC_ConferenceEjectUserResponse::PrintOnGCC_ApplicationInvokeIndication::DecodeGCC_NodeRecord::CloneGCC_ConferenceJoinResponse::GetDataLengthGCC_NodeProperties::GetDataLengthGCC_ConferenceInviteRequest::EncodeGCC_ConferenceInviteRequest::CloneGCC_EntityID::operator =GCC_EntityID &GCC_ConferenceTimeRemainingIndication::DecodeGCC_ExtraDialingString::CloneGCC_ConferenceTerminateResponse::GCC_ConferenceTerminateResponseGCC_ConferenceTerminateIndication::GetDataLengthGCC_ConductorReleaseIndication::GetDataLengthNames_GCC_ChallengeResponseAlgorithmGCC_ArrayOf_TextString::GCC_ArrayOf_TextStringNames_GCC_ChallengeResponseItemGCC_RegistryEntryOwner::GCC_RegistryEntryOwnerGCC_ConferenceInviteResponse::DecodeGCC_ChallengeRequest::DecodeGCC_ConferenceTimeRemainingIndication::CompareGCC_ConferenceQueryResponse_result::operator =GCC_ConferenceQueryResponse_result &GCC_RegistrySetParameterRequest::PrintOnGCC_ConferenceTimeExtendIndication::CloneGCC_UserData_subtype::PrintOnGCC_NodeProperties::EncodeGCC_RegistrySetParameterRequest::GetDataLengthGCC_RegistryDeleteEntryRequest::PrintOnGCC_ConferenceTransferResponse_result::operator =GCC_ConferenceTransferResponse_result &GCC_ConferenceUnlockResponse_result::CloneGCC_SessionKey::EncodeGCC_ConferenceNameModifier::GCC_ConferenceNameModifierGCC_ConferenceTerminateIndication_reason::operator =GCC_ConferenceTerminateIndication_reason &GCC_PasswordChallengeRequestResponse_challengeRequestResponse::GetDataLengthGCC_ConferenceCreateResponse::GetDataLengthGCC_NetworkAddress_subtype_aggregatedChannel::GetDataLengthGCC_RegistryDeleteEntryRequest::DecodeGCC_ConferenceTerminateRequest::PrintOnGCC_NetworkAddress_subtype_transportConnection::DecodeGCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::GCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibilityGCC_ConductorPermissionAskIndication::EncodeGCC_ConferenceUnlockResponse_result::operator =GCC_ConferenceUnlockResponse_result &GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtypeGCC_ConferenceAddRequest::PrintOnGCC_RegistryItem::CloneGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdateGCC_RegistryModificationRights::CloneGCC_RegistryResponse_result::CloneGCC_ConductorReleaseIndication::CloneGCC_RegistryResponse::CloneGCC_ConferenceTransferIndication::PrintOnGCC_ConferenceUnlockResponse::CompareGCC_ApplicationRecord::DecodeGCC_PasswordChallengeRequestResponse_challengeRequestResponse::DecodeGCC_RegistryAllocateHandleRequest::DecodeGCC_NetworkAddress_subtype::GCC_NetworkAddress_subtypeGCC_UserData::CreateObjectGCC_UserIDIndication::PrintOnGCC_PasswordChallengeRequestResponse::CloneGCC_ConductorAssignIndication::CloneGCC_ConferenceEjectUserIndication::CloneGCC_ConferenceAddResponse_result::operator =GCC_ConferenceAddResponse_result &GCC_TextMessageIndication::CloneGCC_ChallengeItem::CompareGCC_SimpleNumericString::CloneGCC_ApplicationRecord::Clone$S10$S11$S12GCC_NonStandardParameter::Encode$S13GCC_SessionKey::GCC_SessionKeyGCC_ConferenceTerminateResponse::Compare$S20$S14$S21$S15GCC_ChallengeItem::Encode$S22$S16GCC_NetworkAddress_subtype_aggregatedChannel_transferModes::Decode$S23$S17GCC_FunctionNotSupportedResponse::GetDataLength$S30$S24$S18$S31$S25$S19GCC_TextString::Clone$S32$S26GCC_NonStandardParameter::CloneGCC_ConferenceLockResponse_result::Clone$S33$S27GCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility$S40$S34$S28GCC_Password::PrintOn$S41$S35$S29GCC_RegistryRegisterChannelRequest::PrintOn$S42$S36GCC_ConductorPermissionAskIndication::GCC_ConductorPermissionAskIndication$S43$S37$S50$S44$S38$S51$S45$S39$S52$S46GCC_ConferenceLockResponse::DecodeNames_GCC_ConferenceEjectUserRequest_reason$S53$S47GCC_GCCPDU::Clone$S60$S54$S48$S61$S55$S49GCC_TerminationMethod::GCC_TerminationMethod$S62$S56GCC_RegistryAssignTokenRequest::EncodeGCC_ConferenceTransferIndication::Decode$S63$S57GCC_ConferenceAddResponse::GCC_ConferenceAddResponseNames_GCC_ConferenceQueryResponse_result$S70$S64$S58GCC_ConferenceInviteRequest::GCC_ConferenceInviteRequestGCC_RegistryEntryOwner_owned::Clone$S71$S65$S59GCC_ArrayOf_ApplicationInvokeSpecifier::operator []GCC_ApplicationInvokeSpecifier &Names_GCC_ConferenceTerminateResponse_result$S72$S66GCC_NonStandardPDU::Clone$S1$S73$S67$S2GCC_RosterUpdateIndication_applicationInformation_subtype::GCC_RosterUpdateIndication_applicationInformation_subtype$S80$S74$S68GCC_NonStandardPDU::EncodeGCC_ConferenceUnlockRequest::GCC_ConferenceUnlockRequest$S3$S81$S75$S69$S4GCC_SubAddressString::CloneGCC_ConferenceEjectUserRequest::GCC_ConferenceEjectUserRequest$S76$S5GCC_NodeRecord::GetDataLength$S77GCC_ConnectData::PrintOn$S6GCC_ConferenceTransferResponse::GCC_ConferenceTransferResponseGCC_ConferenceEjectUserIndication::Compare$S78$S7$S79$S8$S9GCC_ConductorPermissionAskIndication::CloneGCC_ConferenceJoinRequest::PrintOnGCC_UserIDIndication::DecodeGCC_ConferenceTimeExtendIndication::GetDataLengthGCC_Privilege::CloneGCC_RegistryKey::CloneGCC_ConferenceJoinResponse::CompareGCC_RegistryEntryOwner_owned::DecodeGCC_ConferenceLockIndication::PrintOnGCC_RosterUpdateIndication::CompareNames_GCC_ConferenceInviteResponse_resultGCC_AsymmetryIndicator::CreateObjectGCC_RegistryMonitorEntryRequest::PrintOnGCC_NetworkAddress::CreateObjectGCC_Password::EncodeGCC_RegistryItem::GCC_RegistryItemGCC_ConferenceInviteResponse::PrintOnGCC_RegistryAllocateHandleRequest::CompareGCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesListGCC_PasswordSelector::CloneGCC_ConferenceUnlockIndication::CloneGCC_NodeType::CloneGCC_ConferenceTransferIndication::CloneGCC_AsymmetryIndicator::CloneGCC_ConferenceQueryResponse::CloneGCC_FunctionNotSupportedResponse::CloneGCC_DialingString::CloneGCC_PasswordSelector::CreateObjectGCC_RegistryAssignTokenRequest::PrintOnGCC_RegistryAllocateHandleResponse::CloneD:\openh323\src\gkclient.cxx"gkclient.h""h460/h4601.h"H323Gatekeeper::OnSendFeatureSetunsigned int pduTypeH225_FeatureSet &featsH323Gatekeeper::OnReceiveGatekeeperConfirmconst H225_GatekeeperConfirm &gcfH323Gatekeeper::RegistrationRequestBOOL autoRegH323Gatekeeper::SendUnsolicitedIRRH225_InfoRequestResponse &irrH323RasPDU &responseH323Gatekeeper::SetAlternatesconst H225_ArrayOf_AlternateGK &altsBOOL permanentH323Gatekeeper::OnReceiveGatekeeperRejectconst H225_GatekeeperReject &grjH323Gatekeeper::OnSendAdmissionRequestH225_AdmissionRequest &H323Gatekeeper::TickleMonitorPTimer &INTH323Gatekeeper::BandwidthRequestunsigned int requestedBandwidthH323Gatekeeper::MakeRequestRequest &requestAdmissionRequestResponseInfoAdmissionRequestResponseInfo::AdmissionRequestResponseInfoH323Gatekeeper::AdmissionResponse &rH323Connection &cAdmissionRequestResponseInfo::paramH323Gatekeeper::AdmissionResponse &AdmissionRequestResponseInfo::connectionAdmissionRequestResponseInfo::allocatedBandwidthAdmissionRequestResponseInfo::uuiesRequestedAdmissionRequestResponseInfo::accessTokenOID1PStringAdmissionRequestResponseInfo::accessTokenOID2H323Gatekeeper::SetAssignedGatekeeperconst H225_AlternateGK &gkH323Gatekeeper::OnReceiveInfoRequestconst H225_InfoRequest &irqH323Gatekeeper::BuildInfoRequestResponseH225_InfoRequestResponse &unsigned int seqNumH323Gatekeeper::AlternateInfo::GetAlternateH225_AlternateGKH323Gatekeeper::InfoRequestResponseconst H323Connection &connectionconst H225_H323_UU_PDU &pduBOOL sentH323Gatekeeper::SetPasswordconst PString &passwordconst PString &usernameH323Gatekeeper::MonitorMainPThread &H323Gatekeeper::SetInfoRequestRateconst PTimeInterval &rateH323Gatekeeper::StartDiscoveryconst H323TransportAddress &initialAddressH323Gatekeeper::OnSendGatekeeperRequestH225_GatekeeperRequest &grqH323Gatekeeper::AdmissionResponse::AdmissionResponseH323Gatekeeper::OnReceiveAdmissionRejectconst H225_AdmissionReject &arjH323Gatekeeper::OnServiceControlSessionsconst H225_ArrayOf_ServiceControlSession &serviceControlH323Connection *connectionH323Gatekeeper::DiscoverByAddressconst H323TransportAddress &addressH323Gatekeeper::H323GatekeeperH323EndPoint &epH323Transport *transExtractTokenconst AdmissionRequestResponseInfo &infoconst H225_ArrayOf_ClearToken &tokensPBYTEArray &accessTokenDataH323Gatekeeper::DiscoverByNameAndAddressconst PString &identifierH323Gatekeeper::OnReceiveDisengageRequestconst H225_DisengageRequest &drqAddInfoRequestResponseCallH323Gatekeeper::AlternateInfo::AlternateInfoconst H225_AlternateGK &altH323Gatekeeper::OnReceiveRegistrationConfirmconst H225_RegistrationConfirm &rcfSetRasUsageInformationH225_RasUsageInformation &usageH323Gatekeeper::DiscoverByNameH323Gatekeeper::DisengageRequestunsigned int reasonH323Gatekeeper::GetAssignedGatekeeperH225_AlternateGK &gkAdjustTimeoutunsigned int secondsH323Gatekeeper::GetNameH323Gatekeeper::~H323GatekeeperH323Gatekeeper::AlternateInfo::PrintOnH323Gatekeeper::OnReceiveRegistrationRejectconst H225_RegistrationReject &rrjH323Gatekeeper::OnReceiveUnregistrationRequestconst H225_UnregistrationRequest &urqH323Gatekeeper::DiscoverAnyH323Gatekeeper::ClearInfoRequestRateH323Gatekeeper::OnReceiveUnregistrationConfirmconst H225_UnregistrationConfirm &ucfH323Gatekeeper::OnReceiveFeatureSetconst H225_FeatureSet &featsAddAllInfoRequestResponseCallconst PStringList &tokensGetUUIEsRequestedconst H225_UUIEsRequested &pduH323Gatekeeper::OnReceiveUnregistrationRejectconst H225_UnregistrationReject &urjH323Gatekeeper::OnReceiveBandwidthRequestconst H225_BandwidthRequest &brqH323Gatekeeper::AlternateInfo::CompareH323Gatekeeper::SetupGatekeeperRequestH323RasPDU &requestH323Gatekeeper::AdmissionRequestAdmissionResponse &responseBOOL ignorePreGrantedARQH323Gatekeeper::OnReceiveAdmissionConfirmconst H225_AdmissionConfirm &acfH323Gatekeeper::AlternateInfo::~AlternateInfoH323Gatekeeper::OnReceiveServiceControlIndicationconst H225_ServiceControlIndication &sciH323Gatekeeper::OnReceiveBandwidthConfirmconst H225_BandwidthConfirm &bcfH323Gatekeeper::UnregistrationRequestint reasonH323Gatekeeper::ReRegisterNowH323Gatekeeper::LocationRequestconst PStringList &aliasesH323TransportAddress &addressconst PString &aliasH323Gatekeeper::RegistrationTimeToLiveH323Gatekeeper::MakeRequestWithReregisterunsigned int unregisteredTagH323Gatekeeper::Connectconst PString &gkidD:\openh323\src\gkserver.cxx"gkserver.h""peclient.h"H323RegisteredEndPoint::SetPasswordH323GatekeeperURQ::H323GatekeeperURQH323GatekeeperListener &rasChannelconst H323RasPDU &pduH323GatekeeperCall::GetSourceAddressH323GatekeeperServer::AllocateBandwidthunsigned int newBandwidthunsigned int oldBandwidthH323GatekeeperListener::OnInfoResponseH323GatekeeperRequest::ResponseH323GatekeeperIRR &infoH323GatekeeperCall::H323GatekeeperCallH323GatekeeperServer &gkconst OpalGloballyUniqueID &idH323RegisteredEndPoint::PrintOnH323GatekeeperLRQ::GetRegisteredEndPointRejectTagH323RegisteredEndPoint::OnInfoResponseH323GatekeeperServer::OnBandwidthH323GatekeeperBRQ &infoH323GatekeeperIRR::SetRejectReasonunsigned int reasonCodeH323GatekeeperGRQ::GetSecurityRejectTagH323GatekeeperServer::OnReceiveFeatureSetconst H225_FeatureSet &H323GatekeeperIRR::GetSecurityRejectTagH323RegisteredEndPoint::OnSendDescriptorForEndpointH225_ArrayOf_AliasAddress &aliasesH225_EndpointType &terminalTypeH225_ArrayOf_AliasAddress &transportAddressesH323GatekeeperCall::OnAlertingH323GatekeeperBRQ::GetEndpointIdentifierH323GatekeeperListener::OnReceiveUnregistrationRejectconst H225_UnregistrationReject &pduH323GatekeeperServer::CheckAliasStringPolicyconst H323RegisteredEndPoint &const H225_AdmissionRequest &arqH323GatekeeperListener::OnReceiveDisengageRejectconst H225_DisengageReject &drjH323GatekeeperListener::OnReceiveBandwidthConfirmconst H225_BandwidthConfirm &pduH323GatekeeperCall::GetDurationLimitH323GatekeeperURQ::GetSecurityRejectTagH323GatekeeperIRR::ValidatePDUH235Authenticator::ValidationResultH323GatekeeperListener::OnAdmissionH323GatekeeperARQ &infoH323GatekeeperListener::OnReceiveGatekeeperRequestconst H225_GatekeeperRequest &H323GatekeeperLRQ::ValidatePDUH323GatekeeperServer::FindCallPSafePtrH323GatekeeperCall::Direction dirPSafetyMode modeBOOL answerconst PString &descH323GatekeeperServer::H323GatekeeperServerH323GatekeeperLRQ::GetGatekeeperRejectTagH323GatekeeperServer::MonitorMainH323GatekeeperListener::InfoRequestH323RegisteredEndPoint &epH323GatekeeperCall *callH323GatekeeperIRR::GetGatekeeperIdentifierH323GatekeeperLRQ::GetEndpointIdentifierH323GatekeeperBRQ::GetRegisteredEndPointRejectTagH323GatekeeperRequest::H323GatekeeperRequestH323GatekeeperListener &rasH323GatekeeperARQ::GetEndpointIdentifierH323GatekeeperListener::OnDiscoveryH323GatekeeperGRQ &infoH323GatekeeperCall::OnBandwidthH323GatekeeperListener::~H323GatekeeperListenerH323GatekeeperIRR::H323GatekeeperIRRH323GatekeeperURQ::ValidatePDUH323GatekeeperARQ::GetSecurityRejectTagH323GatekeeperDRQ::GetNameH323GatekeeperServer::OnInfoResponseH323GatekeeperServer::OnLocationH323GatekeeperLRQ &infoH323GatekeeperListener::UnregistrationRequestconst H323RegisteredEndPoint &epH323GatekeeperURQ::GetRegisteredEndPointRejectTagH323GatekeeperGRQ::SetRejectReasonH323GatekeeperRRQ::H323GatekeeperRRQH323GatekeeperServer::AddEndPointH323RegisteredEndPoint *epH323GatekeeperCall::SetUsageInfoconst H225_RasUsageInformation &usageH323RegisteredEndPoint::OnFullRegistrationH323GatekeeperRRQ &infoH323GatekeeperServer::FindEndPointByPrefixStringPSafePtrconst PString &prefixH323GatekeeperURQ::GetGatekeeperIdentifierH323GatekeeperBRQ::GetGatekeeperIdentifierH323GatekeeperRRQ::OnHandlePDUH323GatekeeperURQ::GetEndpointIdentifierH323GatekeeperBRQ::GetNameH323GatekeeperDRQ::OnHandlePDUIsAliasAddressSupersetconst H225_ArrayOf_AliasAddress &pduconst PStringArray &oldAliasesH323GatekeeperRRQ::GetGatekeeperIdentifierH323GatekeeperLRQ::OnHandlePDUH323GatekeeperLRQ::GetGatekeeperIdentifierH323GatekeeperBRQ::H323GatekeeperBRQH323GatekeeperDRQ::ValidatePDUH323GatekeeperDRQ::GetGatekeeperIdentifierH323GatekeeperCall::SendCallCreditServiceControlH323GatekeeperDRQ::GetGatekeeperRejectTagH323GatekeeperServer::CreateCallH323GatekeeperCall *H323GatekeeperListener::OnReceiveInfoRequestResponseconst H225_InfoRequestResponse &irrH323GatekeeperListener::OnSendFeatureSetH225_FeatureSet &setH323RegisteredEndPoint::AddServiceControlSessionconst H323ServiceControlSession &sessionH225_ArrayOf_ServiceControlSession &serviceControlH323GatekeeperGRQ::OnHandlePDUH323GatekeeperRRQ::GetRegisteredEndPointRejectTagH323GatekeeperRequest::WritePDUH323TransactionPDU &pduH323GatekeeperCall::PrintOnH323GatekeeperServer::OnRegistrationH323GatekeeperRRQ::GetNameH323RegisteredEndPoint::OnTimeToLiveH323GatekeeperRRQ::GetGatekeeperRejectTagH323GatekeeperGRQ::GetRegisteredEndPointRejectTagAnswerCallStrconst char %[]H323GatekeeperCall::OnConnectedH323GatekeeperCall::GetCallCreditModeH323GatekeeperServer::RemoveEndPointH323RegisteredEndPoint::CanReceiveRIPH323GatekeeperListener::OnReceiveFeatureSetconst H225_FeatureSet &setH323GatekeeperIRR::GetGatekeeperRejectTagH323RegisteredEndPoint::AddCallH323GatekeeperDRQ::GetSecurityRejectTagH323GatekeeperServer::TranslateAliasAddressconst H225_AliasAddress &aliasBOOL &H323RegisteredEndPoint::GetCallCreditAmountH323GatekeeperARQ::GetRegisteredEndPointRejectTagH323GatekeeperServer::CreateRegisteredEndPointH323RegisteredEndPoint *H323GatekeeperRRQ &H323GatekeeperCall::AddCallCreditServiceControlH323GatekeeperServer::FindEndPointByAliasAddressH323GatekeeperServer::GetAdmissionRequestAuthenticationH323GatekeeperARQ &H235Authenticators &H323GatekeeperServer::CheckSignalAddressPolicyconst H225_AdmissionRequest &const H323TransportAddress &H323GatekeeperListener::OnReceiveUnregistrationConfirmconst H225_UnregistrationConfirm &pduH323GatekeeperCall::SendServiceControlSessionH323GatekeeperURQ::OnHandlePDUH323GatekeeperCall::OnHeartbeatH323GatekeeperIRR::OnHandlePDUH323GatekeeperURQ::GetNameH323GatekeeperCall::CompareH323GatekeeperServer::FindEndPointByAliasStringH323GatekeeperServer::SetPeerElementH323PeerElement *newPeerElementH323GatekeeperIRR::GetEndpointIdentifierH323GatekeeperLRQ::GetNameH323GatekeeperRRQ::SetRejectReasonH323GatekeeperGRQ::ValidatePDUH323GatekeeperListener::OnReceiveBandwidthRejectconst H225_BandwidthReject &pduH323GatekeeperARQ::ValidatePDUH323GatekeeperARQ::GetNameH323GatekeeperRequest::CreateRIPH323TransactionPDU *unsigned int sequenceNumberunsigned int delayH323GatekeeperListener::H323GatekeeperListenerconst PString &idH323GatekeeperServer::CheckAliasAddressPolicyCheckTimeSincePTime &lastTimeH323GatekeeperServer::FindEndPointByIdentifierH323GatekeeperListener::OnReceiveResourcesAvailableConfirmconst H225_ResourcesAvailableConfirm &pduH323GatekeeperARQ::GetGatekeeperIdentifierH323GatekeeperLRQ::GetSecurityRejectTagH323GatekeeperListener::OnReceiveLocationRequestconst H225_LocationRequest &H323GatekeeperListener::OnReceiveUnregistrationRequestconst H225_UnregistrationRequest &H323GatekeeperDRQ::GetRegisteredEndPointRejectTagH323RegisteredEndPoint::GetCallCreditModeH323RegisteredEndPoint::OnUnregistrationH323GatekeeperURQ &infoH323GatekeeperGRQ::H323GatekeeperGRQH323GatekeeperGRQ::GetNameH323RegisteredEndPoint::OnSecureRegistrationH323RegisteredEndPoint::CompareH323GatekeeperRRQ::ValidatePDUH323GatekeeperServer::OnAdmissionH323GatekeeperARQ::SetRejectReasonH323GatekeeperRequest::CheckGatekeeperIdentifierH323GatekeeperListener::OnReceiveDisengageConfirmconst H225_DisengageConfirm &pduH323GatekeeperBRQ::GetSecurityRejectTagH323GatekeeperDRQ::GetEndpointIdentifierH323GatekeeperServer::FindDestinationEndPointH323GatekeeperCall::Direction directionH323GatekeeperGRQ::GetGatekeeperRejectTagH323GatekeeperRequest::CheckCryptoTokensH323GatekeeperServer::OnDisengageH323GatekeeperDRQ &infoH323GatekeeperIRR::GetNameH323GatekeeperListener::ServiceControlIndicationH323RegisteredEndPoint::RemoveCallH323GatekeeperARQ::GetGatekeeperRejectTagGetAliasAddressArrayPStringArrayH323GatekeeperCall::OnDisengageH323GatekeeperARQ::H323GatekeeperARQH323GatekeeperServer::FindEndPointBySignalAddressesconst H225_ArrayOf_TransportAddress &addressesH323GatekeeperCall::OnAdmissionH323GatekeeperServer::OnUnregistrationH323GatekeeperCall::GetDestinationAddressH323GatekeeperCall::OnInfoResponseH323GatekeeperIRR &H225_InfoRequestResponse_perCallInfo_subtype &infoH323GatekeeperListener::OnUnregistrationH323GatekeeperServer::RemoveCallH323GatekeeperServer::CreateListenerH323Transactor *H323Transport *transportH323GatekeeperBRQ::SetRejectReasonH323GatekeeperListener::OnBandwidthH323GatekeeperCall::SetBandwidthUsedH323GatekeeperGRQ::GetGatekeeperIdentifierH323GatekeeperServer::FindEndPointByPartialAliasIsTransportAddressSupersetconst H225_ArrayOf_TransportAddress &pduconst H323TransportAddressArray &oldAddressesH323GatekeeperServer::SetGatekeeperIdentifierBOOL adjustListenersH323GatekeeperIRR::GetRegisteredEndPointRejectTagH323GatekeeperRRQ::GetEndpointIdentifierH323GatekeeperGRQ::GetEndpointIdentifierH323RegisteredEndPoint::UnregisterH323GatekeeperListener::OnReceiveBandwidthRequestconst H225_BandwidthRequest &H323GatekeeperBRQ::ValidatePDUH323GatekeeperURQ::SetRejectReasonH323GatekeeperRequest::GetRegisteredEndPointH323GatekeeperListener::OnReceiveRegistrationRequestconst H225_RegistrationRequest &H323RegisteredEndPoint::SendServiceControlSessionH323RegisteredEndPoint::OnRegistrationH323GatekeeperCall::TranslateAliasAddressBOOL &gkRoutedH323GatekeeperServer::OnSendFeatureSetH225_FeatureSet &H323GatekeeperLRQ::SetRejectReasonH323GatekeeperServer::RemoveAliasH323GatekeeperListener::OnRegistrationOriginateCallStrH323GatekeeperListener::DisengageRequestconst H323GatekeeperCall &callH323GatekeeperListener::OnDisengageH323RegisteredEndPoint::H323RegisteredEndPointH323RegisteredEndPoint::RemoveAliasH323GatekeeperServer::FindEndPointBySignalAddressH323GatekeeperCall::GetCallCreditAmountH323GatekeeperServer::OpenPeerElementconst H323TransportAddress &remotePeerBOOL appendBOOL keepTryingH323GatekeeperDRQ::SetRejectReasonH323GatekeeperBRQ::OnHandlePDUH323GatekeeperListener::OnReceiveDisengageRequestconst H225_DisengageRequest &H323GatekeeperRRQ::GetSecurityRejectTagH323GatekeeperDRQ::H323GatekeeperDRQH323GatekeeperServer::TranslateAliasAddressToSignalAddressH323GatekeeperListener::OnReceiveAdmissionRequestH323GatekeeperServer::CreateEndPointIdentifierH323GatekeeperServer::OnDiscoveryH323GatekeeperCall::DisengageH323GatekeeperARQ::OnHandlePDUH323GatekeeperListener::OnLocationH323GatekeeperURQ::GetGatekeeperRejectTagH323GatekeeperServer::GetUsersPasswordPString &passwordH323RegisteredEndPoint &H323GatekeeperServer::~H323GatekeeperServerH323GatekeeperLRQ::H323GatekeeperLRQH323GatekeeperBRQ::GetGatekeeperRejectTagMakeAddressconst PString &numberconst PStringArray aliasesconst H323TransportAddress &hostH323GatekeeperCall::~H323GatekeeperCallH323GatekeeperServer::CreatePeerElementconst H323TransportAddress &h501InterfaceD:\openh323\src\guid.cxx"guid.h"OpalGloballyUniqueID::OpalGloballyUniqueIDconst PASN_OctetString &newIdconst PString &strconst char *cstrOpalGloballyUniqueID::ReadFromistream &strmOpalGloballyUniqueID::IsNULLOpalGloballyUniqueID::AsStringOpalGloballyUniqueID::HashFunctionOpalGloballyUniqueID::CloneOpalGloballyUniqueID::PrintOnD:\openh323\src\h225_1.cxx"h225.h""h235_t.cxx"H225_GenericIdentifier::H225_GenericIdentifierH225_RasUsageSpecification_when::PrintOnNames_H225_AdmissionRejectReasonH225_EncryptIntAlg::CreateObjectH225_ServiceControlSession_reason::CreateObjectNames_H225_ScnConnectionAggregation$S100$S101$S102Names_H225_NatureOfAddress$S103H225_TransportAddress_ipxAddress::Compare$S110H225_H323_UserInformation_user_data::Decode$S104H225_RasMessage::H225_RasMessageH225_SecurityServiceMode::CreateObjectH225_RasUsageSpecification_when::EncodeH225_ANSI_41_UIM_system_id::H225_ANSI_41_UIM_system_id$S111$S105H225_ArrayOf_AliasAddress::operator []H225_AliasAddress &$S112$S106H225_ArrayOf_TransportAddress::CreateObject$S113$S107H225_ArrayOf_DataRate::CreateObject$S114$S108H225_DisengageRejectReason::Clone$S115$S109H225_InfoRequestResponseStatus::H225_InfoRequestResponseStatusH225_CarrierInfo::PrintOn$S116$S117H225_DisengageReason::Clone$S118H225_AddressPattern::CreateObjectH225_RequestSeqNum::H225_RequestSeqNumH225_CryptoH323Token_cryptoEPPwdHash::EncodeH225_ArrayOf_AliasAddress::CloneNames_H225_H245SecurityH225_ArrayOf_GenericData::CreateObjectH225_TunnelledProtocol_id::H225_TunnelledProtocol_idH225_CallCreditServiceControl_callStartingPoint::H225_CallCreditServiceControl_callStartingPointH225_CryptoH323Token_cryptoGKPwdHash::PrintOnH225_UnregRequestReason::CreateObjectH225_Q954Details::EncodeH225_RasUsageSpecification_callStartingPoint::H225_RasUsageSpecification_callStartingPointH225_CallType::CreateObjectH225_CallCreditCapability::CloneH225_CicInfo_cic::CloneH225_RegistrationRejectReason::CreateObjectH225_TransportAddress::CloneH225_CapacityReportingCapability::PrintOnH225_CallCreditCapability::DecodeH225_ArrayOf_GenericData::CloneH225_ScnConnectionAggregation::H225_ScnConnectionAggregationH225_H323_UserInformation_user_data::CloneH225_CallLinkage::CompareH225_GloballyUniqueID::CloneH225_UseSpecifiedTransport::CreateObjectH225_LocationRejectReason::H225_LocationRejectReasonH225_EncryptIntAlg::H225_EncryptIntAlgH225_InfoRequestResponseStatus::CreateObjectH225_CapacityReportingCapability::DecodeH225_SupportedProtocols::CloneH225_ArrayOf_SupportedProtocols::operator []H225_SupportedProtocols &H225_CallModel::CreateObjectH225_TBCD_STRING::operator =H225_TBCD_STRING &H225_TransportAddress_ipxAddress::H225_TransportAddress_ipxAddressH225_TransportChannelInfo::DecodeH225_ArrayOf_SupportedProtocols::H225_ArrayOf_SupportedProtocolsH225_ArrayOf_ClearToken::operator []H235_ClearToken &H225_CallIdentifier::DecodeH225_ArrayOf_SupportedPrefix::CreateObjectH225_UUIEsRequested::GetDataLengthH225_Connect_UUIE_language::CloneH225_CryptoH323Token::H225_CryptoH323TokenH225_TimeToLive::H225_TimeToLiveH225_RehomingModel::CreateObjectH225_ReleaseCompleteReason::CloneNames_H225_DisengageRejectReasonH225_ICV::EncodeH225_ArrayOf_DataRate::H225_ArrayOf_DataRateH225_ArrayOf_TunnelledProtocol::operator []H225_TunnelledProtocol &H225_AliasAddress::H225_AliasAddressH225_RasMessage::CloneH225_NonIsoIntegrityMechanism::CloneNames_H225_PrivateTypeOfNumberH225_RasMessage::CreateObjectH225_CicInfo_cic::H225_CicInfo_cicH225_AddressPattern_range::CloneH225_ServiceControlDescriptor::CloneH225_Q954Details::CompareH225_ExtendedAliasAddress::PrintOnNames_H225_ScnConnectionTypeH225_AddressPattern_range::PrintOnH225_TransportAddress_ipAddress::CloneH225_IntegrityMechanism::H225_IntegrityMechanismH225_NumberDigits::CloneH225_AliasAddress::CreateObjectH225_UnregRequestReason::H225_UnregRequestReasonH225_ArrayOf_NonStandardParameter::CloneH225_ArrayOf_TransportAddress::CloneH225_BandRejectReason::H225_BandRejectReasonH225_TunnelledProtocol_id::CloneH225_Connect_UUIE_language::operator []PASN_IA5String &H225_ServiceControlDescriptor::H225_ServiceControlDescriptorH225_ArrayOf_ExtendedAliasAddress::CloneH225_LocationRejectReason::CreateObjectH225_BandWidth::operator =H225_BandWidth &H225_AddressPattern_range::EncodeH225_H248PackagesDescriptor::CloneH225_CryptoH323Token_cryptoEPPwdHash::CompareH225_DisengageRejectReason::H225_DisengageRejectReasonH225_ServiceControlSession_reason::H225_ServiceControlSession_reasonH225_RequestSeqNum::CloneH225_CallLinkage::EncodeH225_NatureOfAddress::CreateObjectH225_GenericIdentifier::CreateObjectH225_ArrayOf_CallsAvailable::CloneH225_CallTerminationCause::CreateObjectH225_ConferenceIdentifier::operator =H225_ConferenceIdentifier &H225_Setup_UUIE_connectionParameters::EncodeH225_BandWidth::CloneH225_ICV::CompareH225_CallReferenceValue::H225_CallReferenceValueH225_H245Security::CreateObjectH225_SecurityErrors::CreateObjectH225_TransportAddress_ipAddress::DecodeH225_CapacityReportingSpecification_when::DecodeH225_ArrayOf_ConferenceList::operator []H225_ConferenceList &H225_ArrayOf_NonStandardParameter::H225_ArrayOf_NonStandardParameterH225_TransportQOS::CloneH225_GroupID_member::CreateObjectNames_H225_ANSI_41_UIM_system_idH225_ArrayOf_CallsAvailable::H225_ArrayOf_CallsAvailableNames_H225_InfoRequestNakReasonH225_EncryptIntAlg::CloneH225_TransportQOS::CreateObjectH225_H248PackagesDescriptor::operator =H225_H248PackagesDescriptor &H225_TunnelledProtocolAlternateIdentifier::PrintOnH225_CallLinkage::CloneH225_ExtendedAliasAddress::H225_ExtendedAliasAddressH225_CryptoH323Token_cryptoEPPwdHash::GetDataLengthH225_ICV::GetDataLengthH225_PartyNumber::CreateObjectH225_CapacityReportingCapability::GetDataLengthH225_NonIsoIntegrityMechanism::H225_NonIsoIntegrityMechanismH225_CapacityReportingSpecification_when::PrintOnH225_CallCreditServiceControl_callStartingPoint::CreateObjectH225_DisengageReason::H225_DisengageReasonH225_CryptoH323Token_cryptoGKPwdHash::EncodeNames_H225_SupportedProtocolsH225_UUIEsRequested::CloneH225_FastStartToken::H225_FastStartTokenH225_NumberDigits::operator =H225_NumberDigits &H225_ArrayOf_AlternateGK::H225_ArrayOf_AlternateGKH225_TransportAddress_ip6Address::H225_TransportAddress_ip6AddressH225_PrivateTypeOfNumber::CloneH225_TransportAddress_ipAddress::PrintOnH225_CallCreditServiceControl_billingMode::CreateObjectH225_H248SignalsDescriptor::CloneH225_ArrayOf_ConferenceList::CreateObjectH225_UUIEsRequested::CompareH225_BandRejectReason::CloneH225_Q954Details::PrintOnH225_SecurityErrors::CloneH225_AdmissionRejectReason::H225_AdmissionRejectReasonH225_TransportAddress_ipxAddress::CloneH225_PresentationIndicator::CreateObjectH225_TransportAddress_ip6Address::EncodeH225_InfoRequestNakReason::H225_InfoRequestNakReasonH225_NonIsoIntegrityMechanism::CreateObjectH225_CallCreditServiceControl_billingMode::CloneH225_ServiceControlDescriptor::CreateObjectH225_TunnelledProtocolAlternateIdentifier::CloneH225_TimeToLive::CloneH225_CallTerminationCause::CloneH225_GSM_UIM::EncodeH225_H323_UserInformation_user_data::PrintOnH225_H245Security::H225_H245SecurityH225_RasUsageSpecification_when::CloneH225_ArrayOf_SupportedPrefix::operator []H225_SupportedPrefix &H225_ProtocolIdentifier::H225_ProtocolIdentifierH225_ArrayOf_TransportAddress::operator []H225_TransportAddress &H225_Q954Details::H225_Q954DetailsH225_SecurityServiceMode::CloneNames_H225_IsupNumberH225_AddressPattern::H225_AddressPatternNames_H225_H323_UU_PDU_h323_message_bodyH225_GroupID_member::H225_GroupID_memberH225_CicInfo_cic::CreateObjectNames_H225_GenericIdentifierH225_CallCreditCapability::CompareNames_H225_Setup_UUIE_conferenceGoalH225_PartyNumber::CloneH225_RasUsageSpecification_when::H225_RasUsageSpecification_whenH225_CryptoH323Token_cryptoEPPwdHash::H225_CryptoH323Token_cryptoEPPwdHashH225_UnregRejectReason::CloneNames_H225_EncryptIntAlgH225_SecurityErrors2::CloneH225_FacilityReason::CloneH225_ArrayOf_GenericData::H225_ArrayOf_GenericDataH225_RasUsageSpecification_callStartingPoint::CompareH225_H221NonStandard::H225_H221NonStandardNames_H225_BandRejectReasonH225_UUIEsRequested::EncodeH225_Setup_UUIE_language::CreateObjectH225_H323_UU_PDU_h323_message_body::CreateObjectNames_H225_MobileUIMH225_H221NonStandard::DecodeH225_FastStartToken::CloneH225_RasUsageSpecification_callStartingPoint::EncodeH225_CarrierInfo::CloneH225_CallReferenceValue::operator =H225_CallReferenceValue &H225_TBCD_STRING::CloneH225_CapacityReportingSpecification_when::CompareH225_TransportAddress_ipAddress::CompareH225_ICV::H225_ICVH225_Content::CloneH225_UUIEsRequested::H225_UUIEsRequestedH225_PresentationIndicator::H225_PresentationIndicatorNames_H225_CallCreditServiceControl_billingModeH225_NonStandardIdentifier::H225_NonStandardIdentifierNames_H225_InfoRequestResponseStatusH225_LocationRejectReason::CloneH225_MobileUIM::H225_MobileUIMNames_H225_AddressPatternH225_ScnConnectionType::CloneH225_ArrayOf_CallReferenceValue::H225_ArrayOf_CallReferenceValueH225_Setup_UUIE_conferenceGoal::H225_Setup_UUIE_conferenceGoalH225_Content::CreateObjectH225_TunnelledProtocol_id::CreateObjectH225_SupportedProtocols::CreateObjectH225_IsupDigits::CloneH225_Connect_UUIE_language::CreateObjectH225_TransportAddress_ipxAddress::PrintOnNames_H225_CallModelH225_CallCreditServiceControl_callStartingPoint::CloneH225_H221NonStandard::GetDataLengthH225_ArrayOf_ExtendedAliasAddress::H225_ArrayOf_ExtendedAliasAddressH225_IntegrityMechanism::CloneH225_CapacityReportingSpecification_when::CloneH225_ArrayOf_CallsAvailable::CreateObjectNames_H225_CallTerminationCauseH225_TransportChannelInfo::CloneH225_ExtendedAliasAddress::EncodeH225_TransportAddress_ipxAddress::EncodeH225_CryptoH323Token_cryptoGKPwdHash::GetDataLengthH225_InfoRequestNakReason::CreateObjectH225_ProtocolIdentifier::CloneH225_GatekeeperIdentifier::CloneH225_Q954Details::DecodeH225_Setup_UUIE_connectionParameters::PrintOnH225_Content::H225_ContentH225_CapacityReportingSpecification_when::GetDataLengthH225_ExtendedAliasAddress::GetDataLengthH225_GatekeeperRejectReason::H225_GatekeeperRejectReasonH225_ArrayOf_GenericData::operator []H225_GenericData &H225_ArrayOf_CryptoH323Token::operator []H225_CryptoH323Token &H225_ArrayOf_ServiceControlSession::operator []H225_ServiceControlSession &H225_CallIdentifier::CompareH225_CarrierInfo::H225_CarrierInfoH225_ArrayOf_ServiceControlSession::CreateObjectH225_H323_UserInformation_user_data::H225_H323_UserInformation_user_dataH225_InfoRequestNakReason::CloneH225_CarrierInfo::DecodeH225_TunnelledProtocolAlternateIdentifier::EncodeH225_ArrayOf_SupportedPrefix::H225_ArrayOf_SupportedPrefixH225_ScnConnectionType::CreateObjectNames_H225_ServiceControlSession_reasonH225_TBCD_STRING::H225_TBCD_STRINGH225_PrivateTypeOfNumber::CreateObjectNames_H225_UnregRejectReasonH225_SecurityErrors2::CreateObjectH225_ArrayOf_CryptoH323Token::CreateObjectH225_H221NonStandard::PrintOnH225_AliasAddress::CloneH225_H248SignalsDescriptor::H225_H248SignalsDescriptorH225_EndpointIdentifier::operator =H225_EndpointIdentifier &H225_ScreeningIndicator::operator =H225_ScreeningIndicator &H225_AddressPattern_range::CompareH225_ScnConnectionType::H225_ScnConnectionTypeH225_ArrayOf_AliasAddress::H225_ArrayOf_AliasAddressH225_ArrayOf_DataRate::operator []H225_DataRate &Names_H225_UnregRequestReasonH225_H248PackagesDescriptor::H225_H248PackagesDescriptorH225_ArrayOf_SupportedProtocols::CreateObjectH225_CryptoH323Token::CloneH225_RasUsageSpecification_callStartingPoint::GetDataLengthH225_ArrayOf_CryptoH323Token::CloneH225_NonStandardIdentifier::CreateObjectH225_ArrayOf_SupportedPrefix::CloneNames_H225_AliasAddressH225_ArrayOf_H245Security::CloneNames_H225_ServiceControlDescriptorH225_CryptoH323Token_cryptoEPPwdHash::PrintOnH225_EndpointIdentifier::H225_EndpointIdentifierH225_Setup_UUIE_conferenceGoal::CloneH225_RehomingModel::CloneNames_H225_SecurityErrorsH225_EndpointIdentifier::CloneH225_DisengageReason::CreateObjectH225_RehomingModel::H225_RehomingModelH225_CallModel::H225_CallModelH225_H323_UserInformation_user_data::EncodeH225_CapacityReportingCapability::EncodeNames_H225_TransportAddressNames_H225_ContentH225_AddressPattern_range::H225_AddressPattern_rangeH225_AdmissionRejectReason::CreateObjectH225_ConferenceIdentifier::CloneH225_Setup_UUIE_connectionParameters::CompareH225_ArrayOf_NonStandardParameter::operator []H225_NonStandardParameter &Names_H225_LocationRejectReasonH225_ArrayOf_AlternateGK::CloneH225_BandRejectReason::CreateObjectH225_IsupNumber::H225_IsupNumberH225_ArrayOf_TunnelledProtocol::H225_ArrayOf_TunnelledProtocolH225_CallCreditCapability::GetDataLengthH225_SecurityErrors::H225_SecurityErrorsH225_CallLinkage::PrintOnH225_ArrayOf_ClearToken::CloneH225_CallLinkage::H225_CallLinkageH225_ICV::DecodeNames_H225_DisengageReasonH225_ArrayOf_PASN_OctetString::CreateObjectH225_GSM_UIM::PrintOnNames_H225_PartyNumberH225_ArrayOf_ServiceControlSession::H225_ArrayOf_ServiceControlSessionH225_MobileUIM::CreateObjectH225_IsupNumber::CloneH225_IsupNumber::CreateObjectH225_TransportAddress_ipAddress::EncodeH225_NonStandardIdentifier::CloneNames_H225_SecurityErrors2H225_ExtendedAliasAddress::DecodeH225_PublicTypeOfNumber::H225_PublicTypeOfNumberH225_TransportChannelInfo::EncodeH225_PublicTypeOfNumber::CreateObjectH225_FacilityReason::H225_FacilityReasonH225_UnregRequestReason::CloneH225_GroupID_member::operator []PASN_Integer &H225_ArrayOf_PASN_OctetString::H225_ArrayOf_PASN_OctetStringNames_H225_TunnelledProtocol_idH225_ArrayOf_H245Security::H225_ArrayOf_H245SecurityH225_ICV::CloneH225_CryptoH323Token_cryptoGKPwdHash::H225_CryptoH323Token_cryptoGKPwdHashH225_TunnelledProtocolAlternateIdentifier::GetDataLengthH225_RasUsageSpecification_when::DecodeH225_ExtendedAliasAddress::CloneH225_CallCreditServiceControl_billingMode::H225_CallCreditServiceControl_billingModeH225_ANSI_41_UIM_system_id::CloneH225_ReleaseCompleteReason::CreateObjectNames_H225_CryptoH323TokenH225_TransportAddress_ipAddress::GetDataLengthH225_PublicTypeOfNumber::CloneNames_H225_GatekeeperRejectReasonH225_TransportChannelInfo::CompareH225_ScnConnectionAggregation::CreateObjectH225_H323_UU_PDU_h323_message_body::H225_H323_UU_PDU_h323_message_bodyNames_H225_RasMessageH225_CarrierInfo::CompareNames_H225_CallCreditServiceControl_callStartingPointH225_TransportAddress::CreateObjectH225_GSM_UIM::GetDataLengthH225_CallIdentifier::H225_CallIdentifierH225_TransportAddress_ip6Address::PrintOnH225_IsupDigits::H225_IsupDigitsH225_CryptoH323Token_cryptoGKPwdHash::CompareH225_TransportAddress_ipxAddress::DecodeH225_CapacityReportingSpecification_when::EncodeH225_H323_UserInformation_user_data::CompareH225_CallIdentifier::EncodeH225_AddressPattern_range::DecodeH225_ArrayOf_FeatureDescriptor::CreateObjectH225_H221NonStandard::CompareH225_Setup_UUIE_language::H225_Setup_UUIE_languageH225_CallTerminationCause::H225_CallTerminationCauseH225_CryptoH323Token_cryptoGKPwdHash::DecodeH225_GloballyUniqueID::H225_GloballyUniqueIDH225_ReleaseCompleteReason::H225_ReleaseCompleteReasonNames_H225_RegistrationRejectReasonH225_TransportAddress_ip6Address::GetDataLengthH225_GSM_UIM::DecodeH225_PresentationIndicator::CloneH225_SecurityErrors2::H225_SecurityErrors2H225_CallCreditCapability::EncodeH225_Setup_UUIE_conferenceGoal::CreateObjectH225_Setup_UUIE_connectionParameters::GetDataLengthH225_TransportAddress_ipxAddress::GetDataLengthH225_Setup_UUIE_connectionParameters::DecodeH225_ArrayOf_ConferenceList::CloneH225_NatureOfAddress::CloneH225_FacilityReason::CreateObjectH225_ServiceControlSession_reason::CloneNames_H225_IntegrityMechanismH225_UseSpecifiedTransport::CloneH225_ArrayOf_ExtendedAliasAddress::CreateObjectH225_GSM_UIM::CloneH225_ArrayOf_CallReferenceValue::CloneH225_InfoRequestResponseStatus::CloneH225_GenericIdentifier::CloneH225_ArrayOf_AlternateGK::operator []H225_AlternateGK &H225_ArrayOf_TransportAddress::H225_ArrayOf_TransportAddressH225_Q954Details::CloneH225_UnregRejectReason::CreateObjectH225_CryptoH323Token_cryptoEPPwdHash::DecodeH225_GatekeeperIdentifier::H225_GatekeeperIdentifierH225_TransportAddress_ipAddress::H225_TransportAddress_ipAddressH225_CryptoH323Token_cryptoGKPwdHash::CloneNames_H225_PresentationIndicatorH225_TransportAddress_ip6Address::CloneH225_CryptoH323Token::CreateObjectH225_ArrayOf_PASN_OctetString::CloneH225_ArrayOf_FeatureDescriptor::operator []H225_FeatureDescriptor &H225_GatekeeperRejectReason::CloneNames_H225_RehomingModelNames_H225_NonStandardIdentifierH225_ArrayOf_ClearToken::CreateObjectH225_SecurityServiceMode::H225_SecurityServiceModeH225_CapacityReportingCapability::CloneH225_MobileUIM::CloneH225_BandWidth::H225_BandWidthH225_TransportAddress::H225_TransportAddressH225_CallReferenceValue::CloneH225_IsupDigits::operator =H225_IsupDigits &H225_NatureOfAddress::H225_NatureOfAddressH225_RequestSeqNum::operator =H225_RequestSeqNum &Names_H225_ReleaseCompleteReasonH225_H245Security::CloneH225_H221NonStandard::EncodeH225_RasUsageSpecification_when::GetDataLengthH225_ArrayOf_ServiceControlSession::CloneH225_AddressPattern_range::GetDataLengthH225_ArrayOf_FeatureDescriptor::H225_ArrayOf_FeatureDescriptorH225_UUIEsRequested::DecodeH225_TunnelledProtocolAlternateIdentifier::CompareH225_ScreeningIndicator::H225_ScreeningIndicatorH225_ICV::PrintOnH225_ArrayOf_FeatureDescriptor::CloneH225_SupportedProtocols::H225_SupportedProtocolsH225_CapacityReportingCapability::H225_CapacityReportingCapabilityH225_CallIdentifier::PrintOnH225_ScreeningIndicator::CloneH225_Setup_UUIE_connectionParameters::CloneH225_RasUsageSpecification_callStartingPoint::CloneH225_CallModel::CloneH225_NumberDigits::H225_NumberDigitsH225_AdmissionRejectReason::CloneH225_DisengageRejectReason::CreateObjectH225_H323_UU_PDU_h323_message_body::CloneH225_EncodedFastStartToken::H225_EncodedFastStartTokenH225_Connect_UUIE_language::H225_Connect_UUIE_languageNames_H225_UseSpecifiedTransportH225_ArrayOf_TunnelledProtocol::CloneH225_ArrayOf_AliasAddress::CreateObjectH225_CallLinkage::GetDataLengthH225_CryptoH323Token_cryptoEPPwdHash::CloneH225_CallType::CloneH225_TransportAddress_ip6Address::DecodeH225_UnregRejectReason::H225_UnregRejectReasonH225_ArrayOf_ExtendedAliasAddress::operator []H225_ExtendedAliasAddress &H225_CallLinkage::DecodeH225_ArrayOf_PASN_OctetString::operator []PASN_OctetString &H225_RegistrationRejectReason::CloneH225_ArrayOf_ConferenceList::H225_ArrayOf_ConferenceListH225_ArrayOf_H245Security::operator []H225_H245Security &Names_H225_ScreeningIndicatorH225_RasUsageSpecification_callStartingPoint::DecodeH225_Q954Details::GetDataLengthH225_ANSI_41_UIM_system_id::CreateObjectH225_CallCreditCapability::H225_CallCreditCapabilityH225_TunnelledProtocolAlternateIdentifier::H225_TunnelledProtocolAlternateIdentifierH225_ArrayOf_AlternateGK::CreateObjectNames_H225_TransportQOSH225_ArrayOf_TunnelledProtocol::CreateObjectH225_Setup_UUIE_language::operator []H225_RasUsageSpecification_when::CompareH225_ArrayOf_CallsAvailable::operator []H225_CallsAvailable &H225_GroupID_member::CloneH225_CallIdentifier::GetDataLengthH225_ArrayOf_DataRate::CloneH225_PrivateTypeOfNumber::H225_PrivateTypeOfNumberH225_CapacityReportingCapability::CompareH225_CarrierInfo::EncodeH225_ConferenceIdentifier::H225_ConferenceIdentifierH225_ArrayOf_NonStandardParameter::CreateObjectNames_H225_NonIsoIntegrityMechanismH225_GatekeeperIdentifier::operator =H225_GatekeeperIdentifier &H225_TunnelledProtocolAlternateIdentifier::DecodeH225_TransportQOS::H225_TransportQOSH225_ArrayOf_CallReferenceValue::operator []H225_CarrierInfo::GetDataLengthH225_GSM_UIM::H225_GSM_UIMH225_PartyNumber::H225_PartyNumberNames_H225_FacilityReasonH225_CallCreditCapability::PrintOnH225_CapacityReportingSpecification_when::H225_CapacityReportingSpecification_whenH225_UUIEsRequested::PrintOnH225_EncodedFastStartToken::CloneH225_ArrayOf_SupportedProtocols::CloneH225_ArrayOf_ClearToken::H225_ArrayOf_ClearTokenH225_TransportChannelInfo::PrintOnNames_H225_SecurityServiceModeH225_CallIdentifier::CloneH225_CicInfo_cic::operator []H225_TransportChannelInfo::H225_TransportChannelInfoH225_UseSpecifiedTransport::H225_UseSpecifiedTransportNames_H225_PublicTypeOfNumberH225_IntegrityMechanism::CreateObjectH225_H248SignalsDescriptor::operator =H225_H248SignalsDescriptor &$S82$S83H225_TransportChannelInfo::GetDataLength$S90$S84H225_TimeToLive::operator =H225_TimeToLive &H225_H221NonStandard::Clone$S91$S85H225_AddressPattern::Clone$S92$S86$S93$S87H225_RasUsageSpecification_callStartingPoint::PrintOn$S94$S88$S95H225_GatekeeperRejectReason::CreateObject$S89$S96$S97$S98H225_ArrayOf_CryptoH323Token::H225_ArrayOf_CryptoH323TokenH225_H323_UserInformation_user_data::GetDataLength$S99Names_H225_CallTypeH225_GloballyUniqueID::operator =H225_GloballyUniqueID &H225_Setup_UUIE_connectionParameters::H225_Setup_UUIE_connectionParametersH225_RegistrationRejectReason::H225_RegistrationRejectReasonH225_TransportAddress_ip6Address::CompareH225_Setup_UUIE_language::CloneH225_GSM_UIM::CompareH225_ScnConnectionAggregation::CloneH225_CallType::H225_CallTypeH225_ArrayOf_H245Security::CreateObjectH225_ArrayOf_CallReferenceValue::CreateObjectH225_ExtendedAliasAddress::CompareD:\openh323\src\h225_2.cxxH225_InfoRequestAck::H225_InfoRequestAckH225_SetupAcknowledge_UUIE::CompareH225_SIPCaps::H225_SIPCapsH225_TunnelledProtocol::H225_TunnelledProtocolH225_H310Caps::DecodeH225_InfoRequest::CompareH225_ArrayOf_H248PackagesDescriptor::H225_ArrayOf_H248PackagesDescriptorH225_ArrayOf_BandwidthDetails::operator []H225_BandwidthDetails &H225_Alerting_UUIE::CloneH225_CircuitInfo::PrintOnH225_CallCapacity::DecodeH225_AlternateGK::GetDataLengthH225_BandwidthDetails::CloneH225_GatekeeperReject::CompareH225_GatewayInfo::CloneH225_ResourcesAvailableConfirm::DecodeH225_InfoRequest::DecodeH225_ArrayOf_ConferenceIdentifier::operator []H225_CircuitInfo::DecodeH225_ConferenceList::EncodeH225_ResourcesAvailableConfirm::PrintOnH225_H322Caps::GetDataLengthH225_H320Caps::CloneH225_Notify_UUIE::CloneH225_InfoRequestAck::CompareH225_IsupPrivatePartyNumber::EncodeH225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype::H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtypeH225_AltGKInfo::H225_AltGKInfoH225_InfoRequestResponse::EncodeH225_ServiceControlIndication::PrintOnH225_CallCreditServiceControl::PrintOnH225_GatekeeperReject::EncodeH225_CallCapacityInfo::CloneH225_ArrayOf_AdmissionConfirm::CloneH225_LocationRequest_language::H225_LocationRequest_languageH225_InfoRequestResponse_perCallInfo_subtype::GetDataLengthH225_DisengageConfirm::PrintOnH225_TransportAddress_ipSourceRoute::EncodeH225_GatekeeperInfo::CompareH225_VendorIdentifier::EncodeH225_SIPCaps::CloneH225_Status_UUIE::CloneH225_TransportAddress_ipSourceRoute_route::CloneH225_AlternateGK::CloneH225_Information_UUIE::GetDataLengthH225_ArrayOf_AddressPattern::operator []H225_AddressPattern &H225_BandwidthConfirm::PrintOnH225_RasUsageInfoTypes::H225_RasUsageInfoTypesH225_RegistrationConfirm::CloneH225_RasUsageInformation::DecodeH225_H320Caps::H225_H320CapsH225_H323Caps::CloneH225_ServiceControlSession::PrintOnH225_RegistrationReject::DecodeH225_DisengageRequest::DecodeH225_RegistrationConfirm_preGrantedARQ::DecodeH225_ServiceControlIndication_callSpecific::CompareH225_VoiceCaps::PrintOnH225_CallCreditServiceControl::DecodeH225_RequestInProgress::GetDataLengthH225_T120OnlyCaps::CloneH225_SupportedPrefix::CloneH225_BandwidthReject::EncodeH225_NonStandardMessage::EncodeH225_PublicPartyNumber::H225_PublicPartyNumberH225_TerminalInfo::CompareH225_BandwidthReject::PrintOnH225_AlternateTransportAddresses::H225_AlternateTransportAddressesH225_AdmissionConfirm::CloneH225_EnumeratedParameter::CompareH225_UnregistrationRequest::CompareH225_GatekeeperRequest::EncodeH225_CallsAvailable::CompareH225_AdmissionConfirm_language::operator []H225_ArrayOf_AdmissionConfirm::CreateObjectH225_PublicPartyNumber::CloneH225_NonStandardProtocol::H225_NonStandardProtocolH225_UnknownMessageResponse::DecodeH225_Status_UUIE::H225_Status_UUIEH225_AdmissionRequest::GetDataLengthH225_McuInfo::EncodeH225_NonStandardParameter::PrintOnH225_InfoRequestResponse_perCallInfo_subtype::H225_InfoRequestResponse_perCallInfo_subtypeH225_H323_UU_PDU_tunnelledSignallingMessage::GetDataLengthH225_Setup_UUIE::CloneH225_SetupAcknowledge_UUIE::CloneH225_TerminalInfo::H225_TerminalInfoH225_ArrayOf_QOSCapability::CloneH225_Endpoint::CompareH225_ArrayOf_QOSCapability::CreateObjectH225_ReleaseComplete_UUIE::CloneH225_DataRate::CloneH225_AlternateGK::DecodeH225_ArrayOf_RasUsageSpecification::H225_ArrayOf_RasUsageSpecificationH225_ArrayOf_AddressPattern::H225_ArrayOf_AddressPatternH225_Status_UUIE::CompareH225_StatusInquiry_UUIE::DecodeH225_ServiceControlResponse::DecodeH225_RegistrationRequest_language::CloneH225_GroupID::PrintOnH225_GatekeeperRequest::GetDataLengthH225_ServiceControlSession::DecodeH225_CicInfo::CloneH225_Notify_UUIE::H225_Notify_UUIEH225_Setup_UUIE::DecodeH225_Facility_UUIE::PrintOnH225_RegistrationRequest_language::CreateObjectH225_DisengageReject::DecodeH225_InfoRequestAck::DecodeH225_RegistrationReject::H225_RegistrationRejectH225_GatekeeperRequest::CloneH225_CallsAvailable::EncodeH225_Setup_UUIE::CompareH225_VoiceCaps::GetDataLengthH225_GatekeeperConfirm::GetDataLengthH225_RequestInProgress::PrintOnH225_StimulusControl::CompareH225_Endpoint::CloneH225_H324Caps::CloneH225_DisengageReject::PrintOnH225_GatewayInfo::DecodeH225_CircuitIdentifier::CloneH225_SetupAcknowledge_UUIE::GetDataLengthH225_NonStandardProtocol::EncodeH225_H322Caps::DecodeH225_InfoRequestResponse_perCallInfo_subtype::DecodeH225_ResourcesAvailableIndicate::CloneH225_GatewayInfo::CompareH225_RegistrationReject::CloneH225_NonStandardMessage::CloneH225_ArrayOf_H248PackagesDescriptor::operator []H225_ArrayOf_AdmissionConfirm::H225_ArrayOf_AdmissionConfirmH225_ReleaseComplete_UUIE::EncodeH225_DisengageRequest::CompareH225_ServiceControlIndication::EncodeH225_SIPCaps::GetDataLengthH225_BandwidthDetails::CompareH225_UnregistrationRequest::DecodeH225_NonStandardParameter::GetDataLengthH225_RegistrationRequest::H225_RegistrationRequestH225_AlternateTransportAddresses::EncodeH225_LocationReject::GetDataLengthH225_NonStandardParameter::H225_NonStandardParameterH225_ArrayOf_PartyNumber::operator []H225_PartyNumber &H225_CicInfo::CompareH225_ArrayOf_EnumeratedParameter::CloneH225_ServiceControlResponse::CompareH225_DisengageReject::H225_DisengageRejectH225_H323_UU_PDU_tunnelledSignallingMessage::CompareH225_InfoRequestResponse_perCallInfo::CloneH225_ANSI_41_UIM::H225_ANSI_41_UIMH225_InfoRequestResponse_perCallInfo_subtype_pdu::operator []H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype &H225_AdmissionRequest::CompareH225_RegistrationConfirm::GetDataLengthH225_InfoRequestNak::CompareH225_McuInfo::GetDataLengthH225_RasUsageInfoTypes::GetDataLengthH225_RegistrationRequest_language::H225_RegistrationRequest_languageH225_H321Caps::DecodeH225_UnregistrationConfirm::DecodeH225_RTPSession::EncodeH225_CapacityReportingSpecification::EncodeH225_RegistrationRequest::EncodeH225_InfoRequest::H225_InfoRequestH225_H321Caps::GetDataLengthH225_CallProceeding_UUIE::DecodeH225_H323Caps::H225_H323CapsH225_H323Caps::PrintOnH225_ArrayOf_BandwidthDetails::H225_ArrayOf_BandwidthDetailsH225_PublicPartyNumber::CompareH225_ArrayOf_BandwidthDetails::CreateObjectH225_FeatureSet::PrintOnH225_T120OnlyCaps::CompareH225_RegistrationConfirm_preGrantedARQ::CompareH225_UnregistrationConfirm::CompareH225_H310Caps::H225_H310CapsH225_SecurityCapabilities::DecodeH225_EndpointType::EncodeH225_ConferenceList::GetDataLengthH225_TunnelledProtocol::EncodeH225_InfoRequestNak::EncodeH225_PrivatePartyNumber::PrintOnH225_SupportedPrefix::GetDataLengthH225_RegistrationReject::CompareH225_H324Caps::GetDataLengthH225_AdmissionConfirm::PrintOnH225_CapacityReportingSpecification::GetDataLengthH225_BandwidthDetails::EncodeH225_InfoRequestResponse_perCallInfo::H225_InfoRequestResponse_perCallInfoH225_Alerting_UUIE::DecodeH225_GenericData::DecodeH225_GroupID::GetDataLengthH225_CallCapacityInfo::EncodeH225_LocationReject::CloneH225_SecurityCapabilities::CompareH225_ResourcesAvailableIndicate::DecodeH225_LocationRequest::DecodeH225_SetupAcknowledge_UUIE::EncodeH225_IsupPublicPartyNumber::DecodeH225_DisengageConfirm::DecodeH225_QseriesOptions::CloneH225_H320Caps::GetDataLengthH225_LocationConfirm::CloneH225_CallProceeding_UUIE::H225_CallProceeding_UUIEH225_Alerting_UUIE::CompareH225_CircuitInfo::H225_CircuitInfoH225_SIPCaps::PrintOnH225_ResourcesAvailableConfirm::H225_ResourcesAvailableConfirmH225_Status_UUIE::GetDataLengthH225_Endpoint::DecodeH225_CircuitInfo::GetDataLengthH225_RegistrationConfirm::PrintOnH225_StatusInquiry_UUIE::CloneH225_VendorIdentifier::PrintOnH225_AdmissionReject::GetDataLengthH225_H310Caps::PrintOnH225_CallCreditServiceControl::GetDataLengthH225_GatekeeperRequest::PrintOnH225_UnknownMessageResponse::H225_UnknownMessageResponseH225_UnregistrationReject::EncodeH225_BandwidthConfirm::EncodeH225_H320Caps::CompareH225_PrivatePartyNumber::EncodeH225_ResourcesAvailableIndicate::H225_ResourcesAvailableIndicateH225_AdmissionConfirm_language::CloneH225_Information_UUIE::H225_Information_UUIEH225_Notify_UUIE::PrintOnH225_DataRate::PrintOnH225_StimulusControl::DecodeH225_AdmissionReject::EncodeH225_TunnelledProtocol::GetDataLengthH225_Progress_UUIE::PrintOnH225_ArrayOf_Endpoint::CloneH225_ServiceControlResponse::H225_ServiceControlResponseH225_SupportedPrefix::EncodeH225_Notify_UUIE::EncodeH225_ArrayOf_ConferenceIdentifier::CloneH225_Status_UUIE::EncodeH225_IsupPrivatePartyNumber::H225_IsupPrivatePartyNumberH225_StatusInquiry_UUIE::H225_StatusInquiry_UUIEH225_RasUsageInformation::H225_RasUsageInformationH225_IsupPublicPartyNumber::PrintOnH225_InfoRequestResponse_perCallInfo::operator []H225_InfoRequestResponse_perCallInfo_subtype &H225_DisengageRequest::GetDataLengthH225_ConferenceList::H225_ConferenceListH225_AdmissionRequest::EncodeH225_RasUsageInformation::CompareH225_Alerting_UUIE::EncodeH225_H323_UU_PDU_tunnelledSignallingMessage::PrintOnH225_LocationRequest_language::operator []H225_BandwidthRequest::DecodeH225_T38FaxAnnexbOnlyCaps::DecodeH225_ArrayOf_PASN_ObjectId::H225_ArrayOf_PASN_ObjectIdH225_GatekeeperInfo::CloneH225_PublicPartyNumber::EncodeH225_PublicPartyNumber::GetDataLengthH225_ArrayOf_Endpoint::CreateObjectH225_LocationReject::EncodeH225_InfoRequest::CloneH225_EnumeratedParameter::GetDataLengthH225_VendorIdentifier::H225_VendorIdentifierH225_ServiceControlSession::H225_ServiceControlSessionH225_UnregistrationReject::CompareH225_AlternateGK::PrintOnH225_SetupAcknowledge_UUIE::DecodeH225_ServiceControlResponse_result::CloneH225_RasUsageInfoTypes::EncodeH225_Connect_UUIE::EncodeH225_NonStandardProtocol::CompareH225_UnknownMessageResponse::PrintOnH225_RasUsageSpecification::EncodeH225_BandwidthRequest::H225_BandwidthRequestH225_SecurityCapabilities::CloneH225_AdmissionConfirm::CompareH225_SecurityCapabilities::H225_SecurityCapabilitiesH225_BandwidthReject::DecodeH225_FeatureSet::DecodeH225_CallCapacity::H225_CallCapacityH225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype::EncodeH225_NonStandardProtocol::CloneH225_ServiceControlResponse::PrintOnH225_RegistrationConfirm::DecodeH225_UnregistrationRequest::H225_UnregistrationRequestH225_AdmissionReject::CompareH225_BandwidthDetails::DecodeH225_BandwidthReject::CloneH225_SupportedPrefix::PrintOnH225_RasUsageInfoTypes::PrintOnH225_RegistrationRejectReason_invalidTerminalAliases::H225_RegistrationRejectReason_invalidTerminalAliasesH225_AdmissionRequest::PrintOnH225_SecurityCapabilities::PrintOnH225_ArrayOf_RasUsageSpecification::CreateObjectH225_GatekeeperConfirm::CloneH225_ServiceControlIndication_callSpecific::GetDataLengthH225_DisengageConfirm::EncodeH225_CallsAvailable::H225_CallsAvailableH225_ServiceControlIndication_callSpecific::EncodeH225_Alerting_UUIE::GetDataLengthH225_TransportAddress_ipSourceRoute_route::H225_TransportAddress_ipSourceRoute_routeH225_NonStandardMessage::H225_NonStandardMessageH225_H322Caps::CompareH225_NonStandardProtocol::DecodeH225_UnregistrationConfirm::CloneH225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype::CompareH225_CircuitIdentifier::GetDataLengthH225_EnumeratedParameter::CloneH225_SIPCaps::EncodeH225_CapacityReportingSpecification::PrintOnH225_H323_UU_PDU::CompareH225_Information_UUIE::CloneH225_InfoRequestResponse_perCallInfo_subtype::EncodeH225_GatekeeperReject::PrintOnH225_ArrayOf_QOSCapability::H225_ArrayOf_QOSCapabilityH225_TunnelledProtocol::CompareH225_AdmissionRequest::H225_AdmissionRequestH225_ArrayOf_RasUsageSpecification::CloneH225_BandwidthDetails::H225_BandwidthDetailsH225_ReleaseComplete_UUIE::DecodeH225_PrivatePartyNumber::GetDataLengthH225_VendorIdentifier::CompareH225_Information_UUIE::PrintOnH225_H323_UU_PDU::DecodeH225_AdmissionReject::H225_AdmissionRejectH225_Facility_UUIE::EncodeH225_CallProceeding_UUIE::GetDataLengthH225_CicInfo::DecodeH225_T120OnlyCaps::DecodeH225_Connect_UUIE::CompareH225_H323_UU_PDU_tunnelledSignallingMessage::EncodeH225_StatusInquiry_UUIE::EncodeH225_CallProceeding_UUIE::CompareH225_VoiceCaps::H225_VoiceCapsH225_FeatureDescriptor::CloneH225_AltGKInfo::DecodeH225_ANSI_41_UIM::PrintOnH225_InfoRequestNak::CloneH225_ServiceControlIndication::CloneH225_SecurityCapabilities::GetDataLengthH225_NonStandardParameter::EncodeH225_ResourcesAvailableIndicate::CompareH225_ResourcesAvailableConfirm::CloneH225_GatekeeperInfo::PrintOnH225_VendorIdentifier::GetDataLengthH225_AdmissionConfirm::GetDataLengthH225_RasUsageSpecification::GetDataLengthH225_AlternateTransportAddresses::PrintOnH225_ServiceControlIndication::CompareH225_GroupID::EncodeH225_QseriesOptions::PrintOnH225_AdmissionConfirm::DecodeH225_BandwidthConfirm::CompareH225_RTPSession::H225_RTPSessionH225_PrivatePartyNumber::CloneH225_RegistrationRejectReason_invalidTerminalAliases::EncodeH225_LocationConfirm::EncodeH225_GatekeeperInfo::GetDataLengthH225_InfoRequest::PrintOnH225_RegistrationRequest::GetDataLengthH225_H320Caps::EncodeH225_GenericData::CompareH225_H323_UserInformation::EncodeH225_H323_UserInformation::CompareH225_ANSI_41_UIM::DecodeH225_RegistrationRequest::PrintOnH225_ArrayOf_IntegrityMechanism::H225_ArrayOf_IntegrityMechanismH225_CircuitInfo::CompareH225_Progress_UUIE::DecodeH225_InfoRequestResponse::H225_InfoRequestResponseH225_CallCapacity::CompareH225_FeatureDescriptor::H225_FeatureDescriptorH225_UnregistrationConfirm::EncodeH225_AlternateTransportAddresses::GetDataLengthH225_TerminalInfo::EncodeH225_CallsAvailable::GetDataLengthH225_ArrayOf_Endpoint::H225_ArrayOf_EndpointH225_AlternateGK::H225_AlternateGKH225_LocationRequest::CloneH225_InfoRequestResponse_perCallInfo_subtype::PrintOnH225_EnumeratedParameter::H225_EnumeratedParameterH225_BandwidthConfirm::CloneH225_McuInfo::CloneH225_RegistrationConfirm_preGrantedARQ::GetDataLengthH225_ArrayOf_AuthenticationMechanism::H225_ArrayOf_AuthenticationMechanismH225_EnumeratedParameter::PrintOnH225_TerminalInfo::CloneH225_InfoRequestAck::PrintOnH225_LocationReject::CompareH225_H323_UU_PDU::CloneH225_ServiceControlIndication_callSpecific::H225_ServiceControlIndication_callSpecificH225_ArrayOf_PartyNumber::CloneH225_LocationConfirm::GetDataLengthH225_BandwidthRequest::GetDataLengthH225_RasUsageSpecification::CompareH225_DataRate::EncodeH225_UnknownMessageResponse::CloneH225_ServiceControlIndication_callSpecific::PrintOnH225_McuInfo::PrintOnH225_H324Caps::CompareH225_ArrayOf_RTPSession::CreateObjectH225_H323_UU_PDU::GetDataLengthH225_GatekeeperConfirm::CompareH225_CallCapacityInfo::H225_CallCapacityInfoH225_CallsAvailable::CloneH225_ReleaseComplete_UUIE::PrintOnH225_UnregistrationReject::H225_UnregistrationRejectH225_EnumeratedParameter::EncodeH225_LocationRequest_language::CloneH225_LocationReject::H225_LocationRejectH225_LocationConfirm::H225_LocationConfirmH225_H323Caps::DecodeH225_ResourcesAvailableConfirm::EncodeH225_RequestInProgress::EncodeH225_ArrayOf_RTPSession::H225_ArrayOf_RTPSessionH225_CircuitInfo::EncodeH225_ConferenceList::PrintOnH225_CallCapacityInfo::GetDataLengthH225_T38FaxAnnexbOnlyCaps::CompareH225_Setup_UUIE::H225_Setup_UUIEH225_TunnelledProtocol::CloneH225_RasUsageInfoTypes::CloneH225_RegistrationConfirm_preGrantedARQ::CloneH225_QseriesOptions::EncodeH225_Information_UUIE::EncodeH225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype::CloneH225_DisengageReject::CloneH225_CicInfo::GetDataLengthH225_BandwidthDetails::PrintOnH225_GatekeeperRequest::H225_GatekeeperRequestH225_Setup_UUIE::PrintOnH225_UnknownMessageResponse::GetDataLengthH225_DisengageReject::EncodeH225_ArrayOf_AdmissionConfirm::operator []H225_AdmissionConfirm &H225_DisengageRequest::CloneH225_H322Caps::PrintOnH225_H310Caps::EncodeH225_TransportAddress_ipSourceRoute::CompareH225_BandwidthRequest::CloneH225_BandwidthRequest::PrintOnH225_InfoRequestNak::DecodeH225_StimulusControl::CloneH225_CicInfo::PrintOnH225_H322Caps::CloneH225_ResourcesAvailableIndicate::GetDataLengthH225_StimulusControl::PrintOnH225_RTPSession::PrintOnH225_ArrayOf_PASN_ObjectId::operator []PASN_ObjectId &H225_RegistrationRequest_language::operator []H225_McuInfo::DecodeH225_CapacityReportingSpecification::CloneH225_ResourcesAvailableIndicate::PrintOnH225_NonStandardProtocol::GetDataLengthH225_Alerting_UUIE::PrintOnH225_ANSI_41_UIM::EncodeH225_Facility_UUIE::GetDataLengthH225_GenericData::CloneH225_AlternateTransportAddresses::CompareH225_ArrayOf_TransportChannelInfo::operator []H225_TransportChannelInfo &H225_H323_UserInformation::GetDataLengthH225_UnregistrationConfirm::PrintOnH225_StatusInquiry_UUIE::GetDataLengthH225_DisengageRequest::EncodeH225_InfoRequest::GetDataLengthH225_RegistrationConfirm_preGrantedARQ::PrintOnH225_PublicPartyNumber::PrintOnH225_RTPSession::GetDataLengthH225_InfoRequestResponse_perCallInfo_subtype_pdu::CloneH225_TransportAddress_ipSourceRoute_routing::CloneH225_ServiceControlResponse_result::H225_ServiceControlResponse_resultH225_AdmissionConfirm_language::H225_AdmissionConfirm_languageH225_TransportAddress_ipSourceRoute::GetDataLengthH225_InfoRequestNak::GetDataLengthH225_H321Caps::CloneH225_ArrayOf_IntegrityMechanism::CloneH225_EnumeratedParameter::DecodeH225_CapacityReportingSpecification::DecodeH225_VendorIdentifier::DecodeH225_ArrayOf_AuthenticationMechanism::CreateObjectH225_AlternateTransportAddresses::CloneH225_VendorIdentifier::CloneH225_Setup_UUIE::EncodeH225_RegistrationRequest::DecodeH225_H324Caps::EncodeH225_ServiceControlIndication::GetDataLengthH225_ReleaseComplete_UUIE::H225_ReleaseComplete_UUIEH225_RasUsageInfoTypes::CompareH225_CallsAvailable::PrintOnH225_InfoRequestResponse::DecodeH225_UnregistrationRequest::CloneH225_ServiceControlSession::EncodeH225_RasUsageInformation::EncodeH225_IsupPublicPartyNumber::GetDataLengthH225_ArrayOf_H248PackagesDescriptor::CloneH225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype::PrintOnH225_McuInfo::H225_McuInfoH225_ServiceControlResponse::EncodeH225_DataRate::H225_DataRateH225_IsupPrivatePartyNumber::DecodeH225_GroupID::CompareH225_CallsAvailable::DecodeH225_AdmissionConfirm_language::CreateObjectH225_RegistrationConfirm::CompareH225_FeatureSet::CompareH225_StatusInquiry_UUIE::CompareH225_DisengageRequest::PrintOnH225_LocationRequest::GetDataLengthH225_ArrayOf_AddressPattern::CreateObjectH225_RegistrationConfirm_preGrantedARQ::EncodeH225_ArrayOf_PASN_ObjectId::CreateObjectH225_LocationRequest::PrintOnH225_EndpointType::GetDataLengthH225_CallCapacityInfo::DecodeH225_PrivatePartyNumber::CompareH225_Notify_UUIE::CompareH225_UnregistrationRequest::EncodeH225_DataRate::CompareH225_GatekeeperRequest::DecodeH225_ArrayOf_RTPSession::CloneH225_CircuitIdentifier::EncodeH225_SIPCaps::CompareH225_InfoRequestNak::H225_InfoRequestNakH225_ArrayOf_IntegrityMechanism::CreateObjectH225_AlternateGK::EncodeH225_GatekeeperRequest::CompareH225_UnknownMessageResponse::EncodeH225_ArrayOf_EnumeratedParameter::operator []H225_EnumeratedParameter &H225_TransportAddress_ipSourceRoute::H225_TransportAddress_ipSourceRouteH225_H310Caps::CompareH225_ArrayOf_RasUsageSpecification::operator []H225_RasUsageSpecification &H225_NonStandardParameter::DecodeH225_ConferenceList::CloneH225_GatewayInfo::GetDataLengthH225_SIPCaps::DecodeH225_SetupAcknowledge_UUIE::PrintOnH225_CircuitInfo::CloneH225_H321Caps::EncodeH225_BandwidthConfirm::H225_BandwidthConfirmH225_ResourcesAvailableConfirm::GetDataLengthH225_ArrayOf_AddressPattern::CloneH225_RasUsageInformation::GetDataLengthH225_CallProceeding_UUIE::EncodeH225_InfoRequestAck::EncodeH225_ArrayOf_EnumeratedParameter::CreateObjectH225_H321Caps::PrintOnH225_CallCapacity::GetDataLengthH225_BandwidthDetails::GetDataLengthH225_ServiceControlIndication_callSpecific::CloneH225_PrivatePartyNumber::DecodeH225_InfoRequestResponse::PrintOnH225_CallCapacityInfo::PrintOnH225_DataRate::GetDataLengthNames_H225_TransportAddress_ipSourceRoute_routingH225_FeatureSet::H225_FeatureSetH225_TunnelledProtocol::DecodeH225_EndpointType::CloneH225_RegistrationReject::EncodeH225_DisengageConfirm::GetDataLengthH225_DisengageReject::GetDataLengthH225_GenericData::EncodeH225_AltGKInfo::PrintOnH225_Endpoint::GetDataLengthH225_RTPSession_associatedSessionIds::CreateObjectH225_NonStandardMessage::CompareH225_BandwidthConfirm::GetDataLengthH225_LocationRequest::EncodeH225_T120OnlyCaps::GetDataLengthH225_LocationReject::PrintOnH225_T38FaxAnnexbOnlyCaps::GetDataLengthH225_InfoRequestAck::GetDataLengthH225_CallCapacity::EncodeH225_H323_UU_PDU_tunnelledSignallingMessage::H225_H323_UU_PDU_tunnelledSignallingMessageH225_UnregistrationReject::PrintOnH225_ResourcesAvailableIndicate::EncodeH225_T120OnlyCaps::H225_T120OnlyCapsH225_ServiceControlIndication::DecodeH225_ArrayOf_ConferenceIdentifier::CreateObjectH225_UnregistrationReject::CloneH225_StimulusControl::EncodeH225_Progress_UUIE::CompareH225_GenericData::PrintOnH225_EndpointType::DecodeH225_TransportAddress_ipSourceRoute::DecodeH225_BandwidthConfirm::DecodeH225_CallCreditServiceControl::CloneH225_UnknownMessageResponse::CompareH225_IsupPrivatePartyNumber::CompareH225_RTPSession::DecodeH225_TerminalInfo::PrintOnH225_ArrayOf_PartyNumber::CreateObjectH225_GatekeeperInfo::DecodeH225_VoiceCaps::CompareH225_GatekeeperInfo::H225_GatekeeperInfoH225_ServiceControlSession::CompareH225_InfoRequestResponse::CloneH225_RasUsageInfoTypes::DecodeH225_IsupPublicPartyNumber::H225_IsupPublicPartyNumberH225_LocationConfirm::PrintOnH225_H322Caps::EncodeH225_BandwidthReject::CompareH225_InfoRequestResponse_perCallInfo::CreateObjectH225_Endpoint::EncodeH225_ArrayOf_AuthenticationMechanism::operator []H235_AuthenticationMechanism &H225_CircuitIdentifier::CompareH225_ArrayOf_PASN_ObjectId::CloneH225_AdmissionReject::PrintOnH225_UnregistrationReject::DecodeH225_H323_UU_PDU::PrintOnH225_UnregistrationConfirm::GetDataLengthH225_RegistrationConfirm::H225_RegistrationConfirmH225_IsupPrivatePartyNumber::CloneH225_EndpointType::CompareH225_Connect_UUIE::DecodeH225_UnregistrationRequest::PrintOnH225_TunnelledProtocol::PrintOnH225_InfoRequestResponse_perCallInfo_subtype_pdu::CreateObjectH225_SetupAcknowledge_UUIE::H225_SetupAcknowledge_UUIEH225_FeatureSet::CloneH225_Endpoint::PrintOnH225_GatekeeperConfirm::EncodeH225_RasUsageSpecification::CloneH225_TransportAddress_ipSourceRoute_route::operator []H225_BandwidthReject::H225_BandwidthRejectH225_RegistrationRequest::CloneH225_ResourcesAvailableConfirm::CompareH225_AdmissionReject::DecodeH225_Progress_UUIE::GetDataLengthH225_VoiceCaps::DecodeH225_Notify_UUIE::GetDataLengthH225_RegistrationRejectReason_invalidTerminalAliases::CompareH225_ReleaseComplete_UUIE::GetDataLengthH225_ConferenceList::DecodeH225_SupportedPrefix::DecodeH225_GatewayInfo::EncodeH225_T120OnlyCaps::PrintOnH225_AlternateTransportAddresses::DecodeH225_Status_UUIE::PrintOnH225_LocationRequest_language::CreateObjectH225_ArrayOf_EnumeratedParameter::H225_ArrayOf_EnumeratedParameterH225_Facility_UUIE::CompareH225_IsupPublicPartyNumber::EncodeH225_ArrayOf_PartyNumber::H225_ArrayOf_PartyNumberH225_ArrayOf_AuthenticationMechanism::CloneH225_BandwidthRequest::EncodeH225_DisengageReject::CompareH225_AltGKInfo::EncodeH225_RegistrationRequest::CompareH225_UnregistrationReject::GetDataLengthH225_ANSI_41_UIM::CompareH225_ArrayOf_TransportChannelInfo::CreateObjectH225_VoiceCaps::CloneH225_H323_UU_PDU_tunnelledSignallingMessage::DecodeH225_ServiceControlResponse::GetDataLengthH225_RequestInProgress::CompareH225_Information_UUIE::CompareH225_H323Caps::EncodeH225_PublicPartyNumber::DecodeH225_Status_UUIE::DecodeH225_AlternateGK::CompareH225_AdmissionConfirm::EncodeH225_IsupPublicPartyNumber::CloneH225_LocationRequest::CompareH225_CallProceeding_UUIE::PrintOnH225_CallCapacity::CloneH225_GatewayInfo::PrintOnH225_RTPSession::CloneH225_RasUsageSpecification::PrintOnH225_RasUsageSpecification::DecodeH225_CapacityReportingSpecification::H225_CapacityReportingSpecificationH225_VoiceCaps::EncodeH225_T38FaxAnnexbOnlyCaps::EncodeH225_GatekeeperReject::CloneH225_RTPSession::CompareH225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype::GetDataLengthH225_GenericData::GetDataLengthH225_H323Caps::GetDataLengthH225_AltGKInfo::CompareH225_H323Caps::CompareH225_RegistrationConfirm_preGrantedARQ::H225_RegistrationConfirm_preGrantedARQH225_ANSI_41_UIM::CloneH225_GatekeeperInfo::EncodeH225_LocationConfirm::DecodeH225_QseriesOptions::CompareH225_AltGKInfo::CloneH225_AdmissionRequest::DecodeH225_PrivatePartyNumber::H225_PrivatePartyNumberH225_CallCapacity::PrintOnH225_InfoRequestNak::PrintOnH225_ArrayOf_H248PackagesDescriptor::CreateObjectH225_H323_UserInformation::PrintOnH225_CicInfo::H225_CicInfoH225_H324Caps::H225_H324CapsH225_InfoRequestResponse::GetDataLengthH225_RegistrationRejectReason_invalidTerminalAliases::GetDataLengthH225_InfoRequestResponse::CompareH225_T38FaxAnnexbOnlyCaps::H225_T38FaxAnnexbOnlyCapsH225_RegistrationRejectReason_invalidTerminalAliases::CloneH225_RegistrationReject::GetDataLengthH225_ArrayOf_QOSCapability::operator []H245_QOSCapability &H225_ArrayOf_ConferenceIdentifier::H225_ArrayOf_ConferenceIdentifierH225_GatekeeperConfirm::PrintOnH225_ArrayOf_Endpoint::operator []H225_Endpoint &H225_H310Caps::GetDataLengthH225_T38FaxAnnexbOnlyCaps::PrintOnH225_ServiceControlIndication::H225_ServiceControlIndicationH225_RegistrationReject::PrintOnH225_McuInfo::CompareH225_H320Caps::DecodeH225_NonStandardParameter::CloneH225_TransportAddress_ipSourceRoute_routing::CreateObjectH225_H321Caps::CompareH225_LocationReject::DecodeH225_QseriesOptions::GetDataLengthH225_TerminalInfo::GetDataLengthH225_LocationRequest::H225_LocationRequestH225_CallCreditServiceControl::CompareH225_NonStandardMessage::GetDataLengthH225_CircuitIdentifier::PrintOnH225_H310Caps::CloneH225_LocationConfirm::CompareH225_ReleaseComplete_UUIE::CompareH225_H324Caps::PrintOnH225_ArrayOf_BandwidthDetails::CloneH225_H323_UserInformation::DecodeH225_AdmissionRequest::CloneH225_EndpointType::PrintOnH225_AdmissionReject::CloneH225_Facility_UUIE::CloneH225_Facility_UUIE::DecodeH225_Connect_UUIE::GetDataLengthH225_Connect_UUIE::PrintOnH225_CallProceeding_UUIE::CloneH225_GatekeeperReject::H225_GatekeeperRejectH225_Setup_UUIE::GetDataLengthH225_GatewayInfo::H225_GatewayInfoH225_IsupPrivatePartyNumber::GetDataLengthH225_FeatureSet::EncodeH225_TransportAddress_ipSourceRoute_route::CreateObjectH225_DisengageConfirm::H225_DisengageConfirmH225_H323_UU_PDU_tunnelledSignallingMessage::CloneH225_GroupID::H225_GroupIDH225_FeatureSet::GetDataLengthH225_InfoRequestResponse_perCallInfo_subtype::CompareH225_GenericData::H225_GenericDataH225_Progress_UUIE::H225_Progress_UUIEH225_CircuitIdentifier::DecodeH225_ConferenceList::CompareH225_Notify_UUIE::DecodeH225_DisengageConfirm::CloneH225_QseriesOptions::H225_QseriesOptionsH225_EndpointType::H225_EndpointTypeH225_ServiceControlIndication_callSpecific::DecodeH225_InfoRequestResponse_perCallInfo_subtype::CloneH225_DisengageRequest::H225_DisengageRequestH225_T38FaxAnnexbOnlyCaps::CloneH225_GatekeeperConfirm::H225_GatekeeperConfirmH225_RTPSession_associatedSessionIds::operator []H225_UnregistrationRequest::GetDataLengthH225_Alerting_UUIE::H225_Alerting_UUIEH225_TransportAddress_ipSourceRoute::PrintOnH225_ArrayOf_RTPSession::operator []H225_RTPSession &H225_Facility_UUIE::H225_Facility_UUIEH225_RequestInProgress::DecodeH225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype::DecodeH225_BandwidthRequest::CompareH225_CircuitIdentifier::H225_CircuitIdentifierH225_GatekeeperReject::GetDataLengthH225_Information_UUIE::DecodeH225_RequestInProgress::H225_RequestInProgressH225_ServiceControlSession::CloneH225_IsupPublicPartyNumber::CompareH225_ServiceControlResponse_result::CreateObjectH225_RegistrationRejectReason_invalidTerminalAliases::PrintOnH225_CallCreditServiceControl::EncodeH225_UnregistrationConfirm::H225_UnregistrationConfirmH225_H323_UU_PDU::EncodeH225_NonStandardProtocol::PrintOnH225_T120OnlyCaps::EncodeH225_SecurityCapabilities::EncodeH225_ANSI_41_UIM::GetDataLengthH225_CicInfo::EncodeH225_RasUsageInformation::PrintOnH225_TransportAddress_ipSourceRoute_routing::H225_TransportAddress_ipSourceRoute_routingH225_Progress_UUIE::EncodeH225_StimulusControl::GetDataLengthH225_NonStandardMessage::DecodeH225_H323_UU_PDU::H225_H323_UU_PDUH225_H322Caps::H225_H322CapsH225_TransportAddress_ipSourceRoute::CloneH225_ServiceControlSession::GetDataLengthH225_H323_UserInformation::H225_H323_UserInformationH225_DisengageConfirm::CompareH225_TerminalInfo::DecodeH225_InfoRequest::EncodeH225_H320Caps::PrintOnH225_BandwidthReject::GetDataLengthNames_H225_ServiceControlResponse_resultH225_Connect_UUIE::CloneH225_StimulusControl::H225_StimulusControlH225_GroupID::CloneH225_DataRate::DecodeH225_GatekeeperReject::DecodeH225_IsupPrivatePartyNumber::PrintOnH225_GatekeeperConfirm::DecodeH225_RegistrationRejectReason_invalidTerminalAliases::DecodeH225_ServiceControlResponse::CloneH225_RasUsageInformation::CloneH225_RasUsageSpecification::H225_RasUsageSpecificationH225_InfoRequestResponse_perCallInfo_subtype_pdu::H225_InfoRequestResponse_perCallInfo_subtype_pduH225_ArrayOf_TransportChannelInfo::CloneH225_H324Caps::DecodeH225_GroupID::DecodeH225_Progress_UUIE::CloneH225_InfoRequestAck::CloneH225_QseriesOptions::DecodeH225_H321Caps::H225_H321CapsH225_ArrayOf_IntegrityMechanism::operator []H225_IntegrityMechanism &H225_NonStandardParameter::CompareH225_RTPSession_associatedSessionIds::H225_RTPSession_associatedSessionIdsH225_Endpoint::H225_EndpointH225_AdmissionConfirm::H225_AdmissionConfirmH225_RTPSession_associatedSessionIds::CloneH225_SupportedPrefix::CompareH225_AltGKInfo::GetDataLengthH225_StatusInquiry_UUIE::PrintOnH225_ArrayOf_TransportChannelInfo::H225_ArrayOf_TransportChannelInfoH225_H323_UserInformation::CloneH225_NonStandardMessage::PrintOnH225_RequestInProgress::CloneH225_SupportedPrefix::H225_SupportedPrefixH225_CallCapacityInfo::CompareH225_Connect_UUIE::H225_Connect_UUIEH225_CapacityReportingSpecification::CompareH225_RegistrationConfirm::EncodeH225_CallCreditServiceControl::H225_CallCreditServiceControlD:\openh323\src\h225ras.cxx"h323.h""h225ras.h""h235auth.h""h460/h460.h"H225_RAS::OnSendDisengageConfirmH225_DisengageConfirm &H323RasPDU &pduH225_DisengageConfirm &dcfH225_RAS::OnReceiveRegistrationRejectconst H225_RegistrationReject &H225_RAS::OnReceiveGatekeeperRejectconst H225_GatekeeperReject &const H323RasPDU &H225_RAS::OnSendAdmissionRejectH225_AdmissionReject &H225_AdmissionReject &arjH225_RAS::H225_RASH225_RAS::OnReceiveBandwidthRequestH225_RAS::OnReceiveBandwidthRejectconst H225_BandwidthReject &const H225_BandwidthReject &brjH225_RAS::OnReceiveLocationRequestconst H225_LocationRequest &lrqH225_RAS::OnSendInfoRequestAckH225_InfoRequestAck &H225_InfoRequestAck &iackH225_RAS::OnSendLocationRequestH225_LocationRequest &H225_LocationRequest &lrqH225_RAS::OnReceiveInfoRequestAckconst H225_InfoRequestAck &const H225_InfoRequestAck &iackH225_RAS::OnReceiveUnknownH225_RAS::OnReceiveDisengageConfirmconst H225_DisengageConfirm &const H225_DisengageConfirm &dcfH225_RAS::OnSendRegistrationConfirmH225_RegistrationConfirm &H225_RegistrationConfirm &rcfH225_RAS::OnReceiveLocationConfirmconst H225_LocationConfirm &const H225_LocationConfirm &lcfH225_RAS::OnReceiveDisengageRequestH225_RAS::OnSendResourcesAvailableIndicateH225_ResourcesAvailableIndicate &H225_ResourcesAvailableIndicate &raiH225_RAS::OnSendDisengageRejectH225_DisengageReject &H225_DisengageReject &drjH225_RAS::CreateTransactionPDUH225_RAS::OnReceiveInfoRequestResponseconst H225_InfoRequestResponse &H225_RAS::PrintOnH225_RAS::OnSendGatekeeperRejectH225_GatekeeperReject &H323RasPDU &H225_GatekeeperReject &grjH225_RAS::OnReceiveRegistrationRequestconst H225_RegistrationRequest &rrqH225_RAS::OnReceiveInfoRequestconst H225_InfoRequest &H225_RAS::OnReceiveGatekeeperConfirmconst H225_GatekeeperConfirm &H225_RAS::OnSendInfoRequestResponseH225_RAS::OnReceiveServiceControlResponseconst H225_ServiceControlResponse &const H225_ServiceControlResponse &scrH225_RAS::OnReceiveDisengageRejectconst H225_DisengageReject &H225_RAS::OnSendBandwidthConfirmH225_BandwidthConfirm &H225_BandwidthConfirm &bcfH225_RAS::OnSendRegistrationRequestH225_RegistrationRequest &H225_RegistrationRequest &rrqH225_RAS::OnReceiveLocationRejectconst H225_LocationReject &const H225_LocationReject &lrjH225_RAS::HandleTransactionconst PASN_Object &rawPDUH225_RAS::OnReceiveAdmissionRejectconst H225_AdmissionReject &H225_RAS::OnSendRegistrationRejectH225_RegistrationReject &H225_RegistrationReject &rrjH225_RAS::~H225_RASH225_RAS::OnReceiveAdmissionRequestH225_RAS::OnReceiveGatekeeperRequestconst H225_GatekeeperRequest &grqH225_RAS::OnSendUnregistrationRequestH225_UnregistrationRequest &H225_UnregistrationRequest &urqH225_RAS::OnReceiveRegistrationConfirmconst H225_RegistrationConfirm &H225_RAS::OnSendUnknownMessageResponseH225_UnknownMessageResponse &H225_UnknownMessageResponse &umrH225_RAS::OnReceiveRequestInProgressconst H225_RequestInProgress &const H225_RequestInProgress &ripH225_RAS::OnSendBandwidthRejectH225_BandwidthReject &H225_BandwidthReject &brjH225_RAS::OnSendGatekeeperRequestH225_GatekeeperRequest &H225_RAS::OnSendAdmissionConfirmH225_AdmissionConfirm &acfH225_RAS::OnReceiveResourcesAvailableIndicateconst H225_ResourcesAvailableIndicate &const H225_ResourcesAvailableIndicate &raiSendGenericDataconst H225_RAS *rasunsigned int codePDUType &pduSendGenericDatatypename PDUTypeH225_RAS::OnSendInfoRequestH225_InfoRequest &H225_InfoRequest &irqH225_RAS::OnReceiveServiceControlIndicationconst H225_ServiceControlIndication &H225_RAS::OnReceiveNonStandardMessageconst H225_NonStandardMessage &const H225_NonStandardMessage &nsmReceiveGenericDataconst PDUType &pduReceiveGenericDataH225_RAS::OnReceiveAdmissionConfirmconst H225_AdmissionConfirm &H225_RAS::OnSendBandwidthRequestH225_BandwidthRequest &H225_BandwidthRequest &brqProcessFeatureSetProcessFeatureSetH225_RAS::OnSendUnregistrationRejectH225_UnregistrationReject &H225_UnregistrationReject &urjH225_RAS::OnReceiveUnknownMessageResponseconst H225_UnknownMessageResponse &const H225_UnknownMessageResponse &umrH225_RAS::OnSendDisengageRequestH225_DisengageRequest &H225_DisengageRequest &drqH225_RAS::OnSendRequestInProgressH225_RequestInProgress &H225_RequestInProgress &ripReceiveFeatureSetReceiveFeatureSetH225_RAS::OnSendServiceControlResponseH225_ServiceControlResponse &H225_ServiceControlResponse &scrH225_RAS::OnSendServiceControlIndicationH225_ServiceControlIndication &H225_ServiceControlIndication &sciH225_RAS::OnReceiveBandwidthConfirmconst H225_BandwidthConfirm &H225_RAS::OnReceiveUnregistrationRejectconst H225_UnregistrationReject &H225_RAS::OnSendAdmissionRequestH225_AdmissionRequest &arqH225_RAS::OnReceiveUnregistrationConfirmconst H225_UnregistrationConfirm &H225_RAS::OnSendInfoRequestNakH225_InfoRequestNak &H225_InfoRequestNak &inakH225_RAS::OnSendGatekeeperConfirmH225_GatekeeperConfirm &H225_GatekeeperConfirm &gcfH225_RAS::OnSendLocationRejectH225_LocationReject &H225_LocationReject &lrjH225_RAS::OnReceiveInfoRequestNakconst H225_InfoRequestNak &const H225_InfoRequestNak &inakH225_RAS::OnReceiveUnregistrationRequestH225_RAS::OnSendingPDUPASN_Object &rawPDUSendFeatureSetSendFeatureSetH225_RAS::OnSendResourcesAvailableConfirmH225_ResourcesAvailableConfirm &H225_ResourcesAvailableConfirm &racH225_RAS::OnReceiveResourcesAvailableConfirmconst H225_ResourcesAvailableConfirm &const H225_ResourcesAvailableConfirm &racH225_RAS::OnSendNonStandardMessageH225_NonStandardMessage &H225_NonStandardMessage &nsmH225_RAS::OnSendUnregistrationConfirmH225_UnregistrationConfirm &H225_UnregistrationConfirm &ucfH225_RAS::OnSendLocationConfirmH225_LocationConfirm &H225_LocationConfirm &lcfD:\openh323\src\h235.cxx"h235.h"H235_DHset::H235_DHsetH235_ECKASDH_eckasdh2::CloneH235_V3KeySyncMaterial::EncodeH235_ReturnSig::CloneH235_CryptoToken::H235_CryptoTokenH235_RandomVal::CloneH235_DHset::PrintOnH235_ECKASDH_eckasdhp::GetDataLengthH235_ArrayOf_ProfileElement::CreateObjectH235_TypedCertificate::PrintOnH235_ECKASDH_eckasdhp::CompareH235_CryptoToken_cryptoHashedToken::CompareH235_EncodedKeySyncMaterial::CloneH235_V3KeySyncMaterial::CompareH235_DHset::EncodeH235_H235Key::H235_H235KeyH235_H235Key::CloneH235_KeyMaterial::CloneH235_ECpoint::DecodeH235_Params::CompareH235_H235CertificateSignature::H235_H235CertificateSignatureH235_IV16::operator =H235_IV16 &H235_ReturnSig::EncodeH235_ECKASDH_eckasdhp::DecodeH235_Element::CreateObjectH235_ChallengeString::H235_ChallengeStringH235_IV8::CloneH235_CryptoToken_cryptoHashedToken::EncodeH235_CryptoToken_cryptoEncryptedToken::CloneH235_ECKASDH::CreateObjectH235_ECKASDH_eckasdh2::DecodeH235_ECpoint::GetDataLengthH235_ProfileElement::GetDataLengthH235_EncodedPwdCertToken::CloneH235_Params::H235_ParamsH235_ECpoint::PrintOnNames_H235_H235KeyH235_ProfileElement::CompareH235_IV8::operator =H235_IV8 &H235_ReturnSig::GetDataLengthH235_Password::CloneH235_AuthenticationBES::H235_AuthenticationBESH235_V3KeySyncMaterial::H235_V3KeySyncMaterialH235_AuthenticationMechanism::H235_AuthenticationMechanismH235_AuthenticationBES::CloneH235_H235CertificateSignature::GetDataLengthH235_Element::H235_ElementH235_NonStandardParameter::CloneH235_ECGDSASignature::CompareH235_Password::operator =H235_Password &H235_KeySignedMaterial::DecodeH235_KeySignedMaterial::CompareH235_IV16::H235_IV16H235_ReturnSig::CompareH235_EncodedReturnSig::H235_EncodedReturnSigH235_ECGDSASignature::H235_ECGDSASignatureH235_H235Key::CreateObjectH235_CryptoToken::CreateObjectH235_TimeStamp::H235_TimeStampH235_ECKASDH_eckasdhp::H235_ECKASDH_eckasdhpH235_ECKASDH::CloneH235_Identifier::H235_IdentifierH235_ArrayOf_ProfileElement::CloneH235_EncodedGeneralToken::CloneH235_ECGDSASignature::GetDataLengthH235_RandomVal::H235_RandomValH235_DHset::CompareH235_V3KeySyncMaterial::CloneH235_H235CertificateSignature::EncodeH235_CryptoToken_cryptoSignedToken::CloneH235_AuthenticationMechanism::CreateObjectH235_H235CertificateSignature::CompareH235_ClearToken::DecodeH235_PwdCertToken::H235_PwdCertTokenH235_CryptoToken_cryptoSignedToken::PrintOnH235_ArrayOf_ProfileElement::H235_ArrayOf_ProfileElementH235_RandomVal::operator =H235_RandomVal &H235_KeyMaterial::H235_KeyMaterialH235_IV8::H235_IV8H235_EncodedGeneralToken::H235_EncodedGeneralTokenH235_KeySyncMaterial::CompareH235_CryptoToken_cryptoEncryptedToken::EncodeH235_CryptoToken_cryptoSignedToken::EncodeH235_EncodedKeySignedMaterial::CloneH235_CryptoToken_cryptoHashedToken::H235_CryptoToken_cryptoHashedTokenH235_ECpoint::CompareH235_AuthenticationBES::CreateObjectH235_Params::EncodeH235_ProfileElement::DecodeH235_ECpoint::H235_ECpointH235_NonStandardParameter::PrintOnH235_ProfileElement::CloneH235_CryptoToken_cryptoEncryptedToken::PrintOnH235_ECGDSASignature::DecodeH235_ECKASDH_eckasdh2::PrintOnH235_DHset::GetDataLengthH235_Params::PrintOnH235_KeySyncMaterial::EncodeH235_ProfileElement::EncodeH235_V3KeySyncMaterial::DecodeH235_ChallengeString::operator =H235_ChallengeString &H235_V3KeySyncMaterial::PrintOnH235_KeySyncMaterial::CloneH235_TimeStamp::operator =H235_TimeStamp &H235_V3KeySyncMaterial::GetDataLengthH235_ProfileElement::PrintOnH235_EncodedReturnSig::CloneH235_H235CertificateSignature::DecodeH235_TypedCertificate::H235_TypedCertificateH235_Params::DecodeNames_H235_ECKASDHH235_ReturnSig::DecodeH235_ClearToken::GetDataLengthH235_TimeStamp::CloneH235_ECGDSASignature::PrintOnH235_CryptoToken_cryptoSignedToken::CompareH235_DHset::DecodeH235_ECKASDH_eckasdhp::CloneH235_ECpoint::EncodeH235_NonStandardParameter::DecodeH235_IV16::CloneH235_CryptoToken_cryptoHashedToken::CloneH235_ClearToken::EncodeH235_DHset::CloneH235_TypedCertificate::CompareH235_ECKASDH_eckasdhp::EncodeH235_ReturnSig::PrintOnH235_EncodedKeySyncMaterial::H235_EncodedKeySyncMaterialH235_KeySignedMaterial::CloneH235_CryptoToken_cryptoHashedToken::PrintOnH235_ECKASDH_eckasdhp::PrintOnH235_ECpoint::CloneH235_KeySyncMaterial::H235_KeySyncMaterialH235_ClearToken::H235_ClearTokenH235_ECKASDH_eckasdh2::GetDataLengthH235_ClearToken::CloneH235_Params::CloneH235_TypedCertificate::EncodeH235_Password::H235_PasswordNames_H235_AuthenticationMechanismH235_ClearToken::CompareH235_NonStandardParameter::CompareH235_CryptoToken_cryptoSignedToken::GetDataLengthH235_H235CertificateSignature::CloneH235_CryptoToken_cryptoHashedToken::DecodeH235_EncodedPwdCertToken::H235_EncodedPwdCertTokenH235_ChallengeString::CloneH235_TypedCertificate::DecodeH235_ECKASDH_eckasdh2::H235_ECKASDH_eckasdh2H235_ECKASDH::H235_ECKASDHNames_H235_AuthenticationBESH235_KeySignedMaterial::EncodeNames_H235_ElementH235_CryptoToken_cryptoSignedToken::H235_CryptoToken_cryptoSignedTokenH235_CryptoToken_cryptoEncryptedToken::GetDataLengthH235_ECKASDH_eckasdh2::EncodeH235_TypedCertificate::CloneH235_KeySyncMaterial::PrintOnH235_ECGDSASignature::CloneH235_ProfileElement::H235_ProfileElementH235_NonStandardParameter::H235_NonStandardParameterH235_ArrayOf_ProfileElement::operator []H235_ProfileElement &H235_CryptoToken_cryptoHashedToken::GetDataLengthH235_CryptoToken_cryptoEncryptedToken::CompareNames_H235_CryptoTokenH235_Identifier::operator =H235_Identifier &H235_ECKASDH_eckasdh2::CompareH235_Params::GetDataLengthH235_NonStandardParameter::GetDataLengthH235_CryptoToken::CloneH235_NonStandardParameter::EncodeH235_Identifier::CloneH235_KeySyncMaterial::DecodeH235_KeySignedMaterial::PrintOnH235_CryptoToken_cryptoSignedToken::DecodeH235_CryptoToken_cryptoEncryptedToken::DecodeH235_KeySyncMaterial::GetDataLengthH235_ReturnSig::H235_ReturnSigH235_CryptoToken_cryptoEncryptedToken::H235_CryptoToken_cryptoEncryptedTokenH235_ECGDSASignature::EncodeH235_Element::CloneH235_PwdCertToken::CloneH235_AuthenticationMechanism::CloneH235_ClearToken::PrintOnH235_KeySignedMaterial::GetDataLengthH235_H235CertificateSignature::PrintOnH235_EncodedKeySignedMaterial::H235_EncodedKeySignedMaterialH235_TypedCertificate::GetDataLengthH235_KeySignedMaterial::H235_KeySignedMaterialD:\openh323\src\h235auth.cxxH235Authenticator::SetConnectionH323Connection *conH235AuthSimpleMD5::IsSecuredPDUunsigned int rasPDUBOOL receivedH235AuthSimpleMD5::SetCapabilityH225_ArrayOf_AuthenticationMechanism &mechanismsH225_ArrayOf_PASN_ObjectId &algorithmOIDsH235Authenticator::CreateClearTokenH235_ClearToken *factoryH235AuthSimpleMD5PFactory::WorkerH235Authenticator::ValidateCryptoTokenconst H225_CryptoH323Token &const PBYTEArray &H235AuthenticatorList::PasswordEncryptconst PString &clearH235AuthSimpleMD5::GetNameH235Authenticators::PreparePDUPASN_Array &clearTokensunsigned int clearOptionalFieldPASN_Array &cryptoTokensunsigned int cryptoOptionalFieldH235AuthenticatorList::LoadPasswordPString UserNamePString &passH235Authenticator::FinalisePBYTEArray &H235AuthSimpleMD5::IsSecuredSignalPDUunsigned int signalPDUOID_CATH235AuthSimpleMD5::ValidateCryptoTokenconst H225_CryptoH323Token &cryptoTokenH235Authenticators::PrepareSignalPDUH235AuthCAT::ValidateClearTokenconst H235_ClearToken &clearTokenH235Authenticators::ValidateSignalPDUconst PASN_Array &clearTokensconst PASN_Array &cryptoTokensconst PBYTEArray &rawPDUH235Authenticators::ValidatePDUconst H323TransactionPDU &pduH235Authenticator::IsActiveH235AuthenticatorList::HasUserNameH235AuthSimpleMD5::CloneOID_MD5H235AuthCAT::CreateClearTokenH235AuthCAT::SetCapabilityH235Authenticator::IsSecuredSignalPDUH235Authenticator::PrintOnH235Authenticator::ValidateClearTokenconst H235_ClearToken &H235AuthCAT::CloneH235AuthCAT::H235AuthCATH235AuthSimpleMD5::H235AuthSimpleMD5H235AuthenticatorList::AddPString usernamePString passwordBOOL isHashedH235AuthenticatorInfo::H235AuthenticatorInfoPSSLCertificate *certBOOL ishashedH235Authenticator::IsSecuredPDUH235Authenticator::PrepareTokensH235AuthSimpleMD5::IsCapabilityconst H235_AuthenticationMechanism &mechanismconst PASN_ObjectId &algorithmOIDH235Authenticator::ValidateTokensH235Authenticator::UseGkAndEpIdentifiersGetUCS2plusNULLPWORDArrayH235Authenticator::AddCapabilityunsigned int mechanismconst PString &oidH235AuthSimpleMD5::CreateCryptoTokenH225_CryptoH323Token *H235AuthenticatorList::PasswordDecryptconst PString &encryptPWLibStupidLinkerHacksh235AuthLoaderH235Authenticator::H235AuthenticatorH235AuthCAT::GetNameH235AuthCAT::IsSecuredPDUfactoryH235AuthCATPFactory::WorkerH235Authenticator::CreateCryptoTokenH235AuthCAT::IsCapabilityD:\openh323\src\h235auth1.cxxH2351_Authenticator::CloneOID_AOID_TOID_USearchPatternconst BYTE %[HASH_SIZE]H2351_Authenticator::UseGkAndEpIdentifiersH2351_Authenticator::GetNamehmac_shaconst unsigned char *kint lkconst unsigned char *dint ldchar *outint tH2351_Authenticator::ValidateCryptoTokenH2351_Authenticator::H2351_Authenticatortruncateunsigned char *d1char *d2int lenH2351_Authenticator::IsCapabilityconst H235_AuthenticationMechanism &mechansimH2351_Authenticator::IsSecuredSignalPDUH2351_Authenticator::FinalisePBYTEArray &rawPDUh235AuthProcedure1LoaderH2351_Authenticator::CreateCryptoTokenH2351_Authenticator::SetCapabilityH2351_Authenticator::IsSecuredPDUCheckOIDconst PASN_ObjectId &oid1const PASN_ObjectId &oid2factoryH2351_AuthenticatorPFactory::WorkerD:\openh323\src\h245_1.cxx"h245.h"H245_EncryptionUpdateDirection::H245_EncryptionUpdateDirectionH245_ArrayOf_VCCapability::H245_ArrayOf_VCCapabilityH245_TerminalCapabilitySetReject_cause::H245_TerminalCapabilitySetReject_causeH245_MasterSlaveDeterminationAck_decision::CreateObjectH245_SequenceNumber::operator =H245_SequenceNumber &H245_VideoMode::CloneH245_CustomPictureClockFrequency::PrintOnH245_CapabilityDescriptorNumber::operator =H245_CapabilityDescriptorNumber &H245_RedundancyEncodingElement::DecodeH245_RequestModeRelease::EncodeH245_SubstituteConferenceIDCommand::H245_SubstituteConferenceIDCommandNames_H245_ParameterValueH245_ArrayOf_AlternativeCapabilitySet::operator []H245_AlternativeCapabilitySet &H245_IS13818AudioCapability::Compare$S120Names_H245_TransportAddress$S121H245_QOSClass::H245_QOSClassH245_LogicalChannelRateRelease::PrintOn$S122H245_DataType::H245_DataType$S123Names_H245_MultilinkRequest$S130$S124H245_RTPH263VideoRedundancyEncoding_frameToThreadMapping::CloneNames_H245_EncryptionMode$S131$S125$S119H245_H223Capability_mobileOperationTransmitCapability::PrintOnH245_MultiplexFormat::Clone$S132$S126H245_MasterSlaveDetermination::GetDataLength$S133$S127$S200H245_MultiplePayloadStreamElementMode::Decode$S140$S134$S128$S201$S141$S135$S129$S202$S142$S136H245_NonStandardIdentifier::Clone$S203$S143H245_AudioToneCapability::PrintOn$S137$S210$S204$S150$S144$S138$S211$S205$S151$S145$S139Names_H245_RTPH263VideoRedundancyEncoding_frameToThreadMapping$S212$S206H245_H222LogicalChannelParameters::Clone$S152$S146H245_H261VideoCapability::GetDataLength$S213$S207$S153$S147H245_ATMParameters::PrintOn$S220$S214$S208$S160$S154$S148$S221$S215$S209$S161$S155$S149H245_MasterSlaveDeterminationRelease::Clone$S222$S216$S162$S156H245_IS11172VideoCapability::H245_IS11172VideoCapabilityH245_LogicalChannelRateRequest::Clone$S223$S217$S163$S157$S224$S218$S164$S158H245_H223Capability_mobileMultilinkFrameCapability::H245_H223Capability_mobileMultilinkFrameCapability$S230$S225$S219$S170$S165$S159$S231$S226$S171$S166H245_CRCLength::H245_CRCLength$S232$S227$S172$S167H245_VBDCapability::H245_VBDCapability$S233$S228$S173$S168H245_AudioTelephonyEventCapability::CloneH245_VendorIdentification::PrintOn$S240$S234$S229$S180H245_MultiplexedStreamModeParameters::Compare$S174$S169$S241$S235$S181$S175$S242$S236$S182$S176$S243$S237$S183$S177H245_H261VideoCapability::PrintOnH245_VCCapability_aal5::Encode$S250$S244$S238$S190$S184$S178H245_ArrayOf_CapabilityTableEntryNumber::CloneH245_H223Capability_mobileOperationTransmitCapability::Encode$S251$S245$S239$S191$S185$S179$S252$S246$S192$S186H245_MediaChannelCapability::CompareH245_MasterSlaveDetermination::PrintOn$S253$S247H245_ConferenceCommand::H245_ConferenceCommand$S193$S187Names_H245_V76ModeParameters$S254$S248$S194$S188$S255$S249$S195H245_MaintenanceLoopOffCommand::GetDataLength$S189$S196H245_MaintenanceLoopOffCommand::Decode$S197$S198H245_SequenceNumber::Clone$S199H245_VideoIndicateCompose::EncodeH245_DepFECData::CloneH245_IS11172VideoMode::CloneH245_IS11172VideoCapability::EncodeH245_ConnectionIdentifier::CompareH245_AlternativeCapabilitySet::H245_AlternativeCapabilitySetH245_MasterSlaveDeterminationRelease::DecodeH245_TerminalNumber::H245_TerminalNumberH245_IS11172VideoMode::EncodeH245_MultiplexedStreamParameter::PrintOnH245_CompressionType::H245_CompressionTypeH245_H223MultiplexReconfiguration::CreateObjectH245_H2250MaximumSkewIndication::CloneH245_T38FaxRateManagement::H245_T38FaxRateManagementH245_VBDCapability::PrintOnH245_V75Capability::PrintOnH245_MultimediaSystemControlMessage::CloneH245_TransparencyParameters::CompareH245_ArrayOf_CustomPictureClockFrequency::operator []H245_CustomPictureClockFrequency &H245_T84Profile::CreateObjectH245_MultiplePayloadStreamElement::CompareH245_RequestModeRelease::GetDataLengthNames_H245_RedundancyEncodingMethodH245_ConferenceID::operator =H245_ConferenceID &H245_VBDMode::GetDataLengthH245_RequestChannelCloseRelease::CloneH245_DepFECData::CreateObjectH245_Capability_h233EncryptionReceiveCapability::PrintOnH245_NoPTAudioToneCapability::PrintOnH245_CustomPictureClockFrequency::DecodeH245_ArrayOf_CapabilityDescriptor::operator []H245_CapabilityDescriptor &H245_AlternativeCapabilitySet::CloneH245_TerminalYouAreSeeingInSubPictureNumber::H245_TerminalYouAreSeeingInSubPictureNumberH245_ConferenceIndication::CloneNames_H245_T84ProfileH245_VBDCapability::EncodeH245_VCCapability_aal5::GetDataLengthH245_RedundancyEncodingMethod::CloneH245_DialingInformationNetworkType::CloneH245_LogicalChannelRateRejectReason::CloneH245_LogicalChannelRateAcknowledge::H245_LogicalChannelRateAcknowledgeH245_ArrayOf_GenericCapability::CreateObjectH245_ModeDescription::operator []H245_ModeElement &H245_MultiplexTableEntryNumber::operator =H245_MultiplexTableEntryNumber &H245_MasterSlaveDeterminationRelease::GetDataLengthH245_NonStandardIdentifier_h221NonStandard::CloneH245_H223AnnexCCapability::CloneH245_VendorIdentification::CloneH245_CommandMessage::CloneH245_MultiplexedStreamParameter::CloneH245_NonStandardIdentifier_h221NonStandard::EncodeH245_RTPH263VideoRedundancyEncoding_frameToThreadMapping::H245_RTPH263VideoRedundancyEncoding_frameToThreadMappingH245_IS11172VideoCapability::PrintOnH245_MediaTransportType_atm_AAL5_compressed::PrintOnH245_AudioTelephonyEventCapability::EncodeH245_TransparencyParameters::DecodeH245_Capability_h233EncryptionReceiveCapability::H245_Capability_h233EncryptionReceiveCapabilityH245_QOSType::CreateObjectH245_IS13818AudioCapability::CloneH245_ATMParameters::EncodeH245_VCCapability_aal5::CloneH245_MulticastAddress::CreateObjectH245_TerminalCapabilitySetReject_cause::CreateObjectH245_ArrayOf_CapabilityDescriptor::CreateObjectH245_H262VideoCapability::CompareH245_MediaTransportType::CloneH245_H261VideoCapability::CloneH245_EscrowData::H245_EscrowDataH245_H262VideoCapability::EncodeH245_EncryptionCapability::H245_EncryptionCapabilityH245_ConferenceIndication::H245_ConferenceIndicationNames_H245_QOSClassH245_CapabilityIdentifier::CreateObjectH245_TerminalYouAreSeeingInSubPictureNumber::DecodeH245_EncryptionUpdateRequest::DecodeH245_RoundTripDelayRequest::CompareNames_H245_MultiplexFormatH245_MultimediaSystemControlMessage::H245_MultimediaSystemControlMessageH245_MobileMultilinkReconfigurationIndication::EncodeH245_CertSelectionCriteria::operator []H245_Criteria &H245_ResponseMessage::CloneH245_LogicalChannelRateRequest::EncodeH245_H2250Capability_mcCapability::EncodeH245_EndSessionCommand::CreateObjectH245_DialingInformationNetworkType::H245_DialingInformationNetworkTypeH245_EncryptionMode::CloneH245_H263Version3Options::PrintOnH245_MaximumBitRate::CloneH245_ConferenceID::H245_ConferenceIDH245_Criteria::CompareH245_H223Capability_mobileMultilinkFrameCapability::PrintOnH245_MasterSlaveDeterminationAck_decision::CloneH245_H223Capability_h223MultiplexTableCapability::CloneH245_VCCapability_aal1::CompareH245_TerminalYouAreSeeingInSubPictureNumber::GetDataLengthH245_VCCapability_aal5::PrintOnH245_MasterSlaveDeterminationRelease::H245_MasterSlaveDeterminationReleaseH245_CommunicationModeResponse::CloneH245_V75Capability::DecodeH245_ConferenceCommand::CloneH245_DataProtocolCapability::CloneH245_ArrayOf_MediaDistributionCapability::H245_ArrayOf_MediaDistributionCapabilityH245_T38FaxRateManagement::CreateObjectH245_Criteria::H245_CriteriaH245_QOSMode::CreateObjectH245_MultiplePayloadStreamElement::CloneH245_Capability::CreateObjectH245_ArrayOf_GenericParameter::operator []H245_GenericParameter &H245_Criteria::CloneH245_H263Version3Options::EncodeH245_ArrayOf_DataApplicationCapability::H245_ArrayOf_DataApplicationCapabilityH245_IS11172VideoCapability::GetDataLengthH245_VCCapability_aal1::DecodeH245_LogicalChannelRateAcknowledge::CloneNames_H245_CommandMessageH245_RemoteMCRequest::CloneH245_UserInputCapability::H245_UserInputCapabilityH245_ArrayOf_CapabilityTableEntryNumber::H245_ArrayOf_CapabilityTableEntryNumberH245_RequestChannelCloseRelease::EncodeH245_RequestChannelCloseAck::CloneH245_NoPTAudioToneCapability::DecodeH245_GSMAudioCapability::PrintOnH245_FECData::H245_FECDataH245_MediaTransportType_atm_AAL5_compressed::DecodeH245_ArrayOf_GenericParameter::H245_ArrayOf_GenericParameterNames_H245_MasterSlaveDeterminationReject_causeH245_KeyProtectionMethod::DecodeH245_T84Profile::H245_T84ProfileH245_IS11172AudioCapability::DecodeH245_VCCapability_aal5::H245_VCCapability_aal5H245_LogicalChannelRateRequest::GetDataLengthH245_RTPH263VideoRedundancyFrameMapping_frameSequence::CloneH245_RequestModeRelease::PrintOnNames_H245_CommunicationModeResponseH245_VCCapability_aal1::GetDataLengthH245_MultiplePayloadStreamElement::GetDataLengthH245_ArrayOf_RedundancyEncodingCapability::H245_ArrayOf_RedundancyEncodingCapabilityH245_RequestChannelCloseAck::PrintOnH245_TerminalID::H245_TerminalIDH245_H223AnnexCCapability::GetDataLengthH245_RTPH263VideoRedundancyEncoding_containedThreads::CreateObjectH245_NonStandardIdentifier::H245_NonStandardIdentifierH245_H223AnnexCCapability::EncodeH245_EncryptionMode::H245_EncryptionModeH245_MaximumBitRate::H245_MaximumBitRateH245_MediaTransportType::CreateObjectH245_EncryptionUpdateDirection::CloneH245_H223Capability_mobileMultilinkFrameCapability::GetDataLengthNames_H245_CRCLengthNames_H245_QOSModeH245_MultiplexedStreamModeParameters::DecodeH245_NoPTAudioToneCapability::GetDataLengthH245_Capability_h233EncryptionReceiveCapability::CloneH245_ConferenceResponse::CreateObjectH245_NoPTAudioTelephonyEventCapability::DecodeH245_VendorIdentification::EncodeH245_NoPTAudioTelephonyEventCapability::CompareH245_T38FaxTcpOptions::CloneH245_MasterSlaveDeterminationReject_cause::CloneH245_H222LogicalChannelParameters::EncodeH245_H2250Capability_mcCapability::CompareH245_RequestChannelCloseRelease::PrintOnH245_IV8::CloneH245_RTPH263VideoRedundancyEncoding_containedThreads::H245_RTPH263VideoRedundancyEncoding_containedThreadsH245_SendTerminalCapabilitySet::CreateObjectH245_H261VideoCapability::H245_H261VideoCapabilityH245_KeyProtectionMethod::CompareH245_DialingInformation::CloneH245_UnicastAddress::H245_UnicastAddressH245_MasterSlaveDeterminationRelease::PrintOnH245_ArrayOf_CapabilityDescriptor::CloneH245_MultilinkResponse::CreateObjectH245_AudioMode::CreateObjectH245_RequestModeRelease::CloneH245_ResponseMessage::CreateObjectH245_V42bis::CompareH245_ArrayOf_GenericCapability::H245_ArrayOf_GenericCapabilityH245_RoundTripDelayRequest::EncodeH245_Params::DecodeH245_CommunicationModeRequest::GetDataLengthH245_TransparencyParameters::CloneH245_TransparencyParameters::H245_TransparencyParametersH245_ArrayOf_CapabilityTableEntryNumber::CreateObjectH245_DataType::CloneH245_SubstituteConferenceIDCommand::DecodeH245_EncryptionCapability::operator []H245_MediaEncryptionAlgorithm &H245_GSMAudioCapability::CompareH245_QOSType::H245_QOSTypeH245_VBDMode::H245_VBDModeH245_VBDMode::PrintOnH245_MultiplePayloadStreamElementMode::CloneH245_LogicalChannelNumber::operator =H245_LogicalChannelNumber &H245_ArrayOf_CapabilityTableEntry::CreateObjectH245_CapabilityTableEntryNumber::H245_CapabilityTableEntryNumberH245_ArrayOf_GenericCapability::operator []H245_GenericCapability &H245_VCCapability_aal1::H245_VCCapability_aal1H245_Params::CloneH245_VBDCapability::GetDataLengthH245_H262VideoCapability::PrintOnH245_QOSType::CloneH245_MaximumBitRate::operator =H245_MaximumBitRate &Names_H245_ResponseMessageH245_ArrayOf_VideoCapability::CreateObjectH245_DialingInformation::H245_DialingInformationH245_LogicalChannelNumber::H245_LogicalChannelNumberH245_V75Parameters::EncodeH245_NoPTAudioToneCapability::CloneNames_H245_CompressionTypeH245_Criteria::GetDataLengthH245_NonStandardIdentifier_h221NonStandard::PrintOnNames_H245_LogicalChannelRateRejectReasonNames_H245_AudioCapabilityH245_VBDMode::DecodeNames_H245_H223Capability_h223MultiplexTableCapabilityH245_GSMAudioCapability::H245_GSMAudioCapabilityH245_ConnectionIdentifier::H245_ConnectionIdentifierH245_AlternativeCapabilitySet::operator []H245_CapabilityTableEntryNumber &H245_ArrayOf_GenericInformation::operator []H245_GenericInformation &Names_H245_IndicationMessageH245_AudioCapability::CreateObjectH245_LogicalChannelRateRejectReason::CreateObjectH245_T84Profile::CloneH245_MultilinkRequest::CloneH245_EncryptionUpdateDirection::CreateObjectH245_DialingInformation::CreateObjectH245_Criteria::EncodeH245_EncryptionUpdateRequest::CompareH245_MaintenanceLoopOffCommand::CloneNames_H245_DepFECDataH245_CustomPictureClockFrequency::GetDataLengthH245_MultiplePayloadStreamElementMode::CompareH245_MediaChannelCapability::EncodeH245_ArrayOf_VCCapability::CloneH245_MultilinkResponse::CloneH245_GSMAudioCapability::DecodeH245_IS11172AudioCapability::CompareH245_MultiplexedStreamModeParameters::H245_MultiplexedStreamModeParametersH245_NoPTAudioTelephonyEventCapability::GetDataLengthH245_AudioTelephonyEventCapability::PrintOnNames_H245_PictureReferenceH245_QOSClass::CreateObjectH245_ConnectionIdentifier::EncodeH245_EscrowData::PrintOnH245_IS11172AudioCapability::GetDataLengthH245_V75Capability::H245_V75CapabilityH245_H262VideoCapability::GetDataLengthH245_ArrayOf_GenericInformation::CreateObjectH245_ArrayOf_GenericParameter::CreateObjectH245_V75Capability::CloneH245_V75Capability::CompareH245_T38FaxTcpOptions::DecodeH245_Capability_h233EncryptionReceiveCapability::DecodeH245_DepFECData::H245_DepFECDataH245_UserInputIndication::CreateObjectH245_RequestChannelCloseAck::CompareH245_DepFECMode::CreateObjectH245_H263Version3Options::H245_H263Version3OptionsH245_IS11172VideoCapability::CloneH245_H263Version3Options::CompareH245_ArrayOf_EnhancementOptions::CloneNames_H245_EndSessionCommandH245_McuNumber::operator =H245_McuNumber &H245_McuNumber::H245_McuNumberH245_VCCapability_aal1::PrintOnH245_ArrayOf_RedundancyEncodingCapability::operator []H245_RedundancyEncodingCapability &H245_LogicalChannelRateRelease::EncodeH245_G729Extensions::DecodeH245_SequenceNumber::H245_SequenceNumberH245_ArrayOf_AlternativeCapabilitySet::CreateObjectH245_ConferenceRequest::CreateObjectH245_RoundTripDelayRequest::H245_RoundTripDelayRequestH245_VideoIndicateCompose::PrintOnH245_FECData::CloneH245_IS11172VideoMode::PrintOnH245_CertSelectionCriteria::CreateObjectH245_ParameterIdentifier::H245_ParameterIdentifierH245_IndicationMessage::H245_IndicationMessageH245_ConferenceResponse::CloneH245_ArrayOf_CapabilityDescriptor::H245_ArrayOf_CapabilityDescriptorNames_H245_MultilinkResponseH245_H223SkewIndication::PrintOnH245_V75Parameters::CompareH245_MultilinkIndication::CreateObjectH245_MobileMultilinkReconfigurationIndication::DecodeH245_RequestChannelCloseRelease::CompareH245_H223Capability_mobileOperationTransmitCapability::GetDataLengthH245_EncryptionUpdateRequest::GetDataLengthH245_DataType::CreateObjectH245_MediaEncryptionAlgorithm::H245_MediaEncryptionAlgorithmNames_H245_MediaEncryptionAlgorithmH245_IS11172AudioCapability::CloneH245_VideoMode::CreateObjectH245_VideoMode::H245_VideoModeNames_H245_TerminalCapabilitySetReject_causeH245_RoundTripDelayResponse::GetDataLengthNames_H245_QOSTypeH245_RemoteMCRequest::H245_RemoteMCRequestH245_AudioTelephonyEventCapability::GetDataLengthH245_Params::PrintOnH245_AudioCapability::H245_AudioCapabilityNames_H245_VideoModeNames_H245_MulticastAddressH245_NoPTAudioToneCapability::H245_NoPTAudioToneCapabilityH245_EncryptionUpdateRequest::CloneH245_H262VideoCapability::CloneH245_CapabilityTableEntryNumber::CloneH245_H261VideoCapability::EncodeNames_H245_RemoteMCRequestH245_ConferenceID::CloneNames_H245_FECDataH245_LogicalChannelRateRelease::CloneH245_G729Extensions::CompareH245_LogicalChannelRateAcknowledge::CompareH245_ArrayOf_RTPPayloadType::H245_ArrayOf_RTPPayloadTypeNames_H245_NonStandardIdentifierH245_RTPH263VideoRedundancyEncoding_frameToThreadMapping::CreateObjectH245_EscrowData::DecodeH245_LogicalChannelRateAcknowledge::DecodeH245_LogicalChannelRateRelease::H245_LogicalChannelRateReleaseH245_MasterSlaveDeterminationReject_cause::H245_MasterSlaveDeterminationReject_causeH245_CustomPictureClockFrequency::CloneH245_RedundancyEncodingMethod::H245_RedundancyEncodingMethodH245_TerminalYouAreSeeingInSubPictureNumber::EncodeH245_CloseLogicalChannelAck::H245_CloseLogicalChannelAckH245_H223Capability_mobileMultilinkFrameCapability::DecodeH245_MultiplePayloadStreamElement::H245_MultiplePayloadStreamElementH245_CloseLogicalChannelAck::EncodeNames_H245_ConferenceResponseH245_CommunicationModeResponse::CreateObjectH245_CloseLogicalChannelAck::PrintOnH245_ArrayOf_BEnhancementParameters::operator []H245_BEnhancementParameters &H245_RequestChannelCloseAck::EncodeH245_MultiplePayloadStreamElement::DecodeH245_H262VideoCapability::DecodeH245_RequestMessage::H245_RequestMessageNames_H245_CapabilityIdentifierH245_ATMParameters::H245_ATMParametersH245_ArrayOf_CustomPictureClockFrequency::CreateObjectH245_MaxRedundancy::H245_MaxRedundancyH245_ArrayOf_GenericCapability::CloneH245_CapabilityIdentifier::CloneH245_TerminalYouAreSeeingInSubPictureNumber::CompareH245_CustomPictureClockFrequency::EncodeH245_H2250MaximumSkewIndication::PrintOnH245_ModeDescription::CloneH245_CapabilityDescriptorNumber::H245_CapabilityDescriptorNumberH245_MultiplexedStreamParameter::CompareH245_T38FaxRateManagement::CloneH245_MCLocationIndication::DecodeH245_RequestMessage::CloneH245_RequestMessage::CreateObjectH245_RTPH263VideoRedundancyFrameMapping_frameSequence::operator []H245_CommunicationModeRequest::PrintOnH245_ResponseMessage::H245_ResponseMessageH245_LogicalChannelRateAcknowledge::GetDataLengthH245_ConferenceCommand::CreateObjectH245_CertSelectionCriteria::H245_CertSelectionCriteriaH245_CommunicationModeRequest::DecodeH245_AudioToneCapability::CompareNames_H245_MasterSlaveDeterminationAck_decisionH245_IV16::H245_IV16H245_CommandMessage::CreateObjectH245_ArrayOf_BEnhancementParameters::CloneH245_EncryptionUpdateRequest::H245_EncryptionUpdateRequestH245_AudioMode::CloneH245_MaxRedundancy::operator =H245_MaxRedundancy &H245_Capability_h233EncryptionReceiveCapability::CompareH245_DepFECMode::CloneH245_MultiplePayloadStreamElement::PrintOnH245_ParameterValue::CreateObjectH245_GSMAudioCapability::GetDataLengthH245_H2250Capability_mcCapability::CloneH245_ArrayOf_CapabilityTableEntry::CloneH245_MCLocationIndication::PrintOnH245_EndSessionCommand::CloneH245_CommunicationModeRequest::CloneNames_H245_ParameterIdentifierNames_H245_FunctionNotUnderstoodNames_H245_EncryptionUpdateDirectionH245_VideoCapability::CreateObjectH245_ArrayOf_QOSCapability::H245_ArrayOf_QOSCapabilityH245_CommandMessage::H245_CommandMessageH245_ArrayOf_GenericParameter::CloneH245_ArrayOf_MediaChannelCapability::CreateObjectH245_H223SkewIndication::EncodeNames_H245_UserInputCapabilityH245_H223SkewIndication::CloneH245_CommunicationModeResponse::H245_CommunicationModeResponseH245_T38FaxTcpOptions::PrintOnH245_MultiplexedStreamModeParameters::GetDataLengthH245_IS11172AudioCapability::H245_IS11172AudioCapabilityH245_IS13818AudioCapability::EncodeH245_MediaChannelCapability::CloneH245_H223Capability_mobileOperationTransmitCapability::H245_H223Capability_mobileOperationTransmitCapabilityH245_IV8::operator =H245_IV8 &Names_H245_ModeElementTypeH245_AudioToneCapability::EncodeH245_Params::GetDataLengthH245_V42bis::DecodeH245_ArrayOf_QOSCapability::operator []H245_Capability::CloneH245_CapabilityTableEntryNumber::operator =H245_KeyProtectionMethod::GetDataLengthH245_H263Version3Options::CloneH245_H223AnnexCCapability::H245_H223AnnexCCapabilityH245_AudioTelephonyEventCapability::DecodeH245_VideoCapability::CloneH245_ArrayOf_VideoCapability::operator []H245_VideoCapability &H245_ArrayOf_MediaChannelCapability::H245_ArrayOf_MediaChannelCapabilityH245_NoPTAudioTelephonyEventCapability::EncodeH245_MobileMultilinkReconfigurationIndication::CompareH245_VCCapability_aal5::DecodeH245_MultiplexTableEntryNumber::H245_MultiplexTableEntryNumberH245_ArrayOf_EnhancementOptions::operator []H245_EnhancementOptions &H245_ArrayOf_AlternativeCapabilitySet::CloneNames_H245_RequestMessageH245_MediaTransportType_atm_AAL5_compressed::CloneH245_G729Extensions::GetDataLengthH245_ArrayOf_MediaDistributionCapability::CreateObjectH245_H2250MaximumSkewIndication::DecodeH245_ConferenceResponse::H245_ConferenceResponseH245_RTPH263VideoRedundancyEncoding_containedThreads::operator []Names_H245_T38FaxRateManagementH245_MaintenanceLoopOffCommand::H245_MaintenanceLoopOffCommandH245_VBDCapability::DecodeH245_MultilinkRequest::H245_MultilinkRequestNames_H245_MultilinkIndicationH245_UserInputCapability::CreateObjectH245_TransportAddress::H245_TransportAddressH245_FECData::CreateObjectH245_AudioCapability::CloneH245_RedundancyEncodingElement::H245_RedundancyEncodingElementH245_RedundancyEncodingElement::GetDataLengthH245_MasterSlaveDeterminationRelease::EncodeH245_MediaTransportType_atm_AAL5_compressed::GetDataLengthH245_TerminalID::CloneH245_CapabilityIdentifier::H245_CapabilityIdentifierNames_H245_DepFECModeNames_H245_MultimediaSystemControlMessageH245_Password::operator =H245_Password &H245_MasterSlaveDetermination::EncodeH245_Password::H245_PasswordH245_MaintenanceLoopOffCommand::EncodeH245_H223Capability_h223MultiplexTableCapability::CreateObjectH245_KeyProtectionMethod::CloneH245_RequestModeRelease::DecodeH245_McuNumber::CloneH245_RemoteMCRequest::CreateObjectH245_V75Capability::GetDataLengthH245_ParameterIdentifier::CreateObjectNames_H245_UserInputIndicationH245_Criteria::PrintOnH245_VCCapability_aal5::CompareH245_V76ModeParameters::CloneH245_TerminalCapabilitySetReject_cause::CloneH245_Criteria::DecodeH245_IS11172VideoMode::CompareH245_Params::H245_ParamsH245_IS11172AudioCapability::EncodeH245_ArrayOf_RedundancyEncodingCapability::CloneH245_ArrayOf_DataApplicationCapability::CloneH245_H2250MaximumSkewIndication::CompareH245_IS11172VideoMode::GetDataLengthNames_H245_EncryptionCommandH245_VCCapability_aal1::EncodeH245_RemoteMCResponse::CloneH245_DepFECMode::H245_DepFECModeH245_MultiplePayloadStreamElementMode::GetDataLengthH245_NoPTAudioTelephonyEventCapability::H245_NoPTAudioTelephonyEventCapabilityH245_H222LogicalChannelParameters::PrintOnH245_V76ModeParameters::H245_V76ModeParametersH245_RoundTripDelayRequest::CloneH245_CommunicationModeRequest::H245_CommunicationModeRequestH245_UnicastAddress::CloneH245_DataProtocolCapability::H245_DataProtocolCapabilityH245_RoundTripDelayResponse::CloneH245_MCLocationIndication::CompareH245_LogicalChannelRateRequest::PrintOnH245_MulticastAddress::CloneH245_VideoIndicateCompose::DecodeH245_H223AnnexCCapability::PrintOnH245_H2250MaximumSkewIndication::GetDataLengthH245_H223Capability_mobileOperationTransmitCapability::CloneH245_H223Capability_mobileOperationTransmitCapability::DecodeH245_DepFECCapability::CreateObjectH245_FunctionNotUnderstood::CloneH245_NonStandardIdentifier_h221NonStandard::DecodeH245_TerminalID::operator =H245_TerminalID &H245_MasterSlaveDetermination::CloneH245_H2250Capability_mcCapability::PrintOnH245_MediaTransportType_atm_AAL5_compressed::EncodeH245_TerminalNumber::CloneH245_EncryptionCapability::CloneH245_MobileMultilinkReconfigurationIndication::CloneH245_TransparencyParameters::EncodeH245_V42bis::PrintOnH245_CapabilityDescriptorNumber::CloneH245_NonStandardIdentifier::CreateObjectH245_ArrayOf_GenericInformation::CloneH245_ArrayOf_CustomPictureClockFrequency::H245_ArrayOf_CustomPictureClockFrequencyH245_MediaTransportType_atm_AAL5_compressed::CompareNames_H245_H223MultiplexReconfigurationH245_IS11172VideoMode::DecodeH245_ArrayOf_EnhancementOptions::H245_ArrayOf_EnhancementOptionsH245_ArrayOf_QOSCapability::CreateObjectH245_UserInputIndication::H245_UserInputIndicationH245_EncryptionCommand::CloneH245_MaintenanceLoopOffCommand::PrintOnH245_H2250Capability_mcCapability::H245_H2250Capability_mcCapabilityH245_NoPTAudioTelephonyEventCapability::CloneH245_RequestModeRelease::H245_RequestModeReleaseH245_SendTerminalCapabilitySet::CloneH245_MultilinkIndication::H245_MultilinkIndicationH245_VendorIdentification::DecodeH245_RoundTripDelayResponse::H245_RoundTripDelayResponseH245_GSMAudioCapability::CloneH245_VideoIndicateCompose::GetDataLengthH245_RemoteMCResponse::H245_RemoteMCResponseH245_RoundTripDelayResponse::DecodeH245_CustomPictureClockFrequency::CompareH245_MultiplexedStreamModeParameters::PrintOnH245_ParameterValue::H245_ParameterValueH245_ConferenceRequest::H245_ConferenceRequestH245_NonStandardIdentifier_h221NonStandard::H245_NonStandardIdentifier_h221NonStandardH245_MCLocationIndication::CloneH245_VendorIdentification::CompareH245_LogicalChannelRateRequest::DecodeH245_ATMParameters::CloneH245_ArrayOf_MediaDistributionCapability::operator []H245_MediaDistributionCapability &H245_SubstituteConferenceIDCommand::PrintOnH245_MasterSlaveDeterminationReject_cause::CreateObjectH245_IS13818AudioCapability::GetDataLengthH245_MasterSlaveDetermination::CompareH245_ArrayOf_VideoCapability::H245_ArrayOf_VideoCapabilityH245_H223SkewIndication::CompareH245_H263Version3Options::DecodeH245_MultiplexCapability::H245_MultiplexCapabilityH245_VendorIdentification::H245_VendorIdentificationH245_RTPH263VideoRedundancyFrameMapping_frameSequence::H245_RTPH263VideoRedundancyFrameMapping_frameSequenceH245_MultilinkResponse::H245_MultilinkResponseH245_SubstituteConferenceIDCommand::CloneH245_RequestChannelCloseAck::GetDataLengthH245_V75Parameters::CloneH245_ArrayOf_EnhancementOptions::CreateObjectH245_PictureReference::CloneH245_ArrayOf_DataApplicationCapability::operator []H245_DataApplicationCapability &Names_H245_MediaTransportTypeH245_ConferenceRequest::CloneH245_SubstituteConferenceIDCommand::GetDataLengthH245_H261VideoCapability::CompareH245_T38FaxTcpOptions::GetDataLengthH245_IS11172VideoCapability::DecodeH245_NoPTAudioToneCapability::EncodeH245_ArrayOf_QOSCapability::CloneH245_ArrayOf_RTPPayloadType::CloneH245_Capability_h233EncryptionReceiveCapability::GetDataLengthH245_TransparencyParameters::GetDataLengthH245_MCLocationIndication::GetDataLengthH245_MediaChannelCapability::PrintOnH245_EncryptionUpdateRequest::EncodeH245_ConnectionIdentifier::CloneH245_VendorIdentification::GetDataLengthH245_AudioMode::H245_AudioModeH245_ArrayOf_CustomPictureClockFrequency::CloneH245_ATMParameters::CompareH245_TransparencyParameters::PrintOnH245_MasterSlaveDeterminationAck_decision::H245_MasterSlaveDeterminationAck_decisionH245_H222LogicalChannelParameters::H245_H222LogicalChannelParametersNames_H245_DialingInformationH245_MultiplexedStreamModeParameters::EncodeNames_H245_DataProtocolCapabilityH245_IS11172AudioCapability::PrintOnH245_V42bis::CloneH245_IS13818AudioCapability::H245_IS13818AudioCapabilityH245_RequestChannelCloseRelease::DecodeH245_MultiplexCapability::CloneH245_CloseLogicalChannelAck::CompareH245_RoundTripDelayResponse::PrintOnNames_H245_UnicastAddressH245_TerminalNumber::operator =H245_TerminalNumber &H245_V75Capability::EncodeNames_H245_MultiplexCapabilityH245_ArrayOf_RTPPayloadType::operator []H245_RTPPayloadType &H245_ArrayOf_CapabilityTableEntry::H245_ArrayOf_CapabilityTableEntryH245_CompressionType::CreateObjectH245_RoundTripDelayRequest::DecodeH245_Password::CloneH245_MultiplexFormat::CreateObjectH245_MediaEncryptionAlgorithm::CloneH245_H2250Capability_mcCapability::DecodeH245_ArrayOf_MediaDistributionCapability::CloneH245_LogicalChannelRateRejectReason::H245_LogicalChannelRateRejectReasonH245_H223AnnexCCapability::DecodeH245_IS11172VideoCapability::CompareH245_MultiplexedStreamParameter::EncodeH245_RedundancyEncodingElement::EncodeH245_T38FaxTcpOptions::H245_T38FaxTcpOptionsH245_TransportAddress::CloneH245_UnicastAddress::CreateObjectH245_H223Capability_h223MultiplexTableCapability::H245_H223Capability_h223MultiplexTableCapabilityNames_H245_DepFECCapabilityH245_QOSMode::H245_QOSModeH245_V75Parameters::PrintOnH245_ArrayOf_VideoCapability::CloneH245_H223SkewIndication::GetDataLengthH245_NoPTAudioTelephonyEventCapability::PrintOnH245_G729Extensions::CloneH245_ModeDescription::CreateObjectH245_RedundancyEncodingElement::CompareH245_RTPH263VideoRedundancyFrameMapping_frameSequence::CreateObjectH245_IS11172VideoMode::H245_IS11172VideoModeH245_ArrayOf_RTPPayloadType::CreateObjectH245_Params::CompareH245_CloseLogicalChannelAck::CloneH245_RoundTripDelayRequest::GetDataLengthH245_AudioToneCapability::GetDataLengthH245_ATMParameters::GetDataLengthNames_H245_DialingInformationNetworkTypeH245_MultiplexedStreamParameter::H245_MultiplexedStreamParameterH245_DialingInformationNetworkType::CreateObjectH245_MultiplexedStreamParameter::DecodeH245_ModeDescription::H245_ModeDescriptionH245_AudioToneCapability::H245_AudioToneCapabilityH245_VBDCapability::CloneH245_H223Capability_mobileMultilinkFrameCapability::CompareH245_EscrowData::CloneH245_AlternativeCapabilitySet::CreateObjectH245_G729Extensions::PrintOnH245_SubstituteConferenceIDCommand::CompareH245_RoundTripDelayRequest::PrintOnH245_ArrayOf_CapabilityTableEntry::operator []H245_CapabilityTableEntry &H245_AudioToneCapability::CloneH245_RTPH263VideoRedundancyEncoding_containedThreads::CloneH245_DepFECCapability::CloneH245_SendTerminalCapabilitySet::H245_SendTerminalCapabilitySetNames_H245_VideoCapabilityH245_ArrayOf_GenericInformation::H245_ArrayOf_GenericInformationH245_MultimediaSystemControlMessage::CreateObjectH245_MultiplexFormat::H245_MultiplexFormatH245_EscrowData::GetDataLengthH245_EncryptionCapability::CreateObjectH245_KeyProtectionMethod::EncodeH245_SubstituteConferenceIDCommand::EncodeH245_FunctionNotUnderstood::H245_FunctionNotUnderstoodH245_LogicalChannelRateRelease::DecodeH245_VBDMode::EncodeH245_Capability::H245_CapabilityH245_ArrayOf_CapabilityTableEntryNumber::operator []H245_RequestChannelCloseRelease::GetDataLengthH245_ATMParameters::DecodeH245_H222LogicalChannelParameters::DecodeH245_G729Extensions::EncodeH245_TerminalYouAreSeeingInSubPictureNumber::PrintOnH245_ModeElementType::CloneH245_RoundTripDelayResponse::CompareH245_ArrayOf_VCCapability::operator []H245_VCCapability &H245_V75Parameters::H245_V75ParametersH245_CRCLength::CreateObjectNames_H245_CapabilityH245_ConnectionIdentifier::GetDataLengthH245_CRCLength::CloneH245_ArrayOf_VCCapability::CreateObjectH245_ArrayOf_AlternativeCapabilitySet::H245_ArrayOf_AlternativeCapabilitySetH245_H222LogicalChannelParameters::GetDataLengthH245_V42bis::H245_V42bisH245_PictureReference::CreateObjectH245_RemoteMCResponse::CreateObjectH245_LogicalChannelRateAcknowledge::PrintOnH245_ModeElementType::CreateObjectH245_RedundancyEncodingElement::CloneH245_FunctionNotUnderstood::CreateObjectH245_H2250MaximumSkewIndication::H245_H2250MaximumSkewIndicationH245_EncryptionCommand::H245_EncryptionCommandH245_DataProtocolCapability::CreateObjectH245_VBDMode::CloneH245_MediaTransportType_atm_AAL5_compressed::H245_MediaTransportType_atm_AAL5_compressedH245_NonStandardIdentifier_h221NonStandard::GetDataLengthH245_LogicalChannelRateRelease::GetDataLengthH245_Params::EncodeH245_ConnectionIdentifier::DecodeH245_H262VideoCapability::H245_H262VideoCapabilityH245_H261VideoCapability::DecodeH245_GSMAudioCapability::EncodeH245_IV16::operator =H245_IV16 &H245_V75Parameters::DecodeH245_IndicationMessage::CreateObjectH245_H223Capability_mobileMultilinkFrameCapability::EncodeH245_RedundancyEncodingElement::PrintOnH245_MultiplexTableEntryNumber::CloneH245_H263Version3Options::GetDataLengthH245_H223MultiplexReconfiguration::H245_H223MultiplexReconfigurationH245_H223SkewIndication::DecodeH245_MultiplePayloadStreamElement::EncodeH245_MediaChannelCapability::DecodeH245_RequestChannelCloseAck::DecodeNames_H245_ConferenceCommandH245_MediaTransportType::H245_MediaTransportTypeH245_AudioTelephonyEventCapability::CompareH245_V42bis::EncodeH245_CertSelectionCriteria::CloneH245_ArrayOf_BEnhancementParameters::H245_ArrayOf_BEnhancementParametersH245_MultiplexedStreamModeParameters::CloneH245_MediaChannelCapability::GetDataLengthNames_H245_DataTypeH245_IS13818AudioCapability::PrintOnH245_MCLocationIndication::H245_MCLocationIndicationH245_RequestChannelCloseAck::H245_RequestChannelCloseAckH245_IS13818AudioCapability::DecodeH245_QOSClass::CloneNames_H245_ConferenceIndicationH245_G729Extensions::H245_G729ExtensionsH245_QOSMode::CloneH245_ArrayOf_MediaChannelCapability::operator []H245_MediaChannelCapability &H245_LogicalChannelRateAcknowledge::EncodeH245_NonStandardIdentifier_h221NonStandard::CompareH245_CloseLogicalChannelAck::GetDataLengthH245_ArrayOf_DataApplicationCapability::CreateObjectH245_H223Capability_mobileMultilinkFrameCapability::CloneH245_RedundancyEncodingMethod::CreateObjectH245_EncryptionCommand::CreateObjectH245_PictureReference::H245_PictureReferenceH245_VBDMode::CompareH245_ParameterIdentifier::CloneH245_T38FaxTcpOptions::EncodeH245_KeyProtectionMethod::H245_KeyProtectionMethodH245_EncryptionUpdateRequest::PrintOnH245_KeyProtectionMethod::PrintOnH245_TerminalYouAreSeeingInSubPictureNumber::CloneH245_CloseLogicalChannelAck::DecodeH245_Capability_h233EncryptionReceiveCapability::EncodeH245_T38FaxTcpOptions::CompareNames_H245_SendTerminalCapabilitySetH245_RoundTripDelayResponse::EncodeH245_LogicalChannelRateRequest::H245_LogicalChannelRateRequestH245_MaxRedundancy::CloneH245_ArrayOf_MediaChannelCapability::CloneH245_MCLocationIndication::EncodeH245_VideoIndicateCompose::H245_VideoIndicateComposeH245_ConferenceIndication::CreateObjectH245_MultiplePayloadStreamElementMode::PrintOnH245_DepFECCapability::H245_DepFECCapabilityH245_CustomPictureClockFrequency::H245_CustomPictureClockFrequencyH245_V42bis::GetDataLengthH245_H223MultiplexReconfiguration::CloneH245_IV8::H245_IV8Names_H245_RemoteMCResponseH245_H223AnnexCCapability::CompareH245_MediaEncryptionAlgorithm::CreateObjectH245_VCCapability_aal1::CloneH245_MobileMultilinkReconfigurationIndication::GetDataLengthH245_MasterSlaveDetermination::DecodeH245_ConnectionIdentifier::PrintOnH245_AudioToneCapability::DecodeH245_VBDCapability::CompareH245_EscrowData::CompareH245_H2250Capability_mcCapability::GetDataLengthH245_VideoIndicateCompose::CloneH245_MobileMultilinkReconfigurationIndication::H245_MobileMultilinkReconfigurationIndicationH245_MasterSlaveDetermination::H245_MasterSlaveDeterminationH245_CommunicationModeRequest::EncodeH245_ParameterValue::CloneH245_MulticastAddress::H245_MulticastAddressH245_VideoCapability::H245_VideoCapabilityH245_H222LogicalChannelParameters::CompareH245_MultiplexedStreamParameter::GetDataLengthH245_AudioTelephonyEventCapability::H245_AudioTelephonyEventCapabilityH245_MultilinkIndication::CloneH245_ModeElementType::H245_ModeElementTypeNames_H245_AudioModeH245_LogicalChannelRateRequest::CompareNames_H245_ConferenceRequestH245_CompressionType::CloneH245_MediaChannelCapability::H245_MediaChannelCapabilityH245_TransportAddress::CreateObjectH245_LogicalChannelNumber::CloneH245_IndicationMessage::CloneH245_MultilinkRequest::CreateObjectH245_EndSessionCommand::H245_EndSessionCommandH245_MobileMultilinkReconfigurationIndication::PrintOnH245_V76ModeParameters::CreateObjectH245_ArrayOf_RedundancyEncodingCapability::CreateObjectH245_ArrayOf_BEnhancementParameters::CreateObjectH245_UserInputIndication::CloneH245_H2250MaximumSkewIndication::EncodeH245_VideoIndicateCompose::CompareH245_H223SkewIndication::H245_H223SkewIndicationH245_EscrowData::EncodeH245_UserInputCapability::CloneH245_H223Capability_mobileOperationTransmitCapability::CompareH245_MultiplexCapability::CreateObjectH245_RequestChannelCloseRelease::H245_RequestChannelCloseReleaseH245_EncryptionMode::CreateObjectH245_IV16::CloneH245_MultiplePayloadStreamElementMode::H245_MultiplePayloadStreamElementModeH245_V75Parameters::GetDataLengthH245_MultiplePayloadStreamElementMode::EncodeD:\Program Files\Microsoft eMbedded C++ 4.0\Common\EVC\Bin\win32.vcbD:\Program Files\Microsoft eMbedded C++ 4.0\Common\EVC\Bin\crt.vcbD:\Program Files\Microsoft eMbedded C++ 4.0\Common\EVC\Bin\wcemfcatl.vcbD:\openh323\src\h245_2.cxxH245_H223LogicalChannelParameters_adaptationLayerType_al3::CompareH245_MaintenanceLoopReject_cause::CloneH245_H223AL3MParameters_arqType::CreateObjectH245_ArrayOf_RTPH263VideoRedundancyFrameMapping::CreateObjectH245_AudioMode_g7231::CreateObjectH245_NetworkAccessParameters_t120SetupProcedure::CreateObjectH245_UserInputIndication_encryptedAlphanumeric::PrintOnH245_MultilinkIndication_crcDesired::PrintOnH245_ConferenceResponse_extensionAddressResponse::CloneH245_T84Profile_t84Restricted::GetDataLengthH245_H223Capability_h223MultiplexTableCapability_enhanced::PrintOnH245_MultiplexEntryRejectionDescriptions_cause::CreateObjectNames_H245_T38FaxUdpOptions_t38FaxUdpECH245_DepFECCapability_rfc2733_separateStream::H245_DepFECCapability_rfc2733_separateStreamH245_ArrayOf_NonStandardParameter::H245_ArrayOf_NonStandardParameterH245_ArrayOf_H263VideoModeCombos::CreateObjectH245_FlowControlIndication_restriction::CloneNames_H245_JitterIndication_scopeH245_RTPPayloadType_payloadDescriptor::CloneH245_MiscellaneousCommand_type_encryptionUpdateAck::DecodeH245_FECData_rfc2733_pktMode::CreateObjectH245_MultiplexElement_type::H245_MultiplexElement_typeH245_MiscellaneousCommand_type_videoBadMBs::EncodeNames_H245_MobileMultilinkReconfigurationCommand_statusH245_MaintenanceLoopReject_cause::H245_MaintenanceLoopReject_causeH245_MultilinkResponse_callInformation::CompareH245_V76LogicalChannelParameters_mode::CloneH245_H223AL2MParameters_headerFEC::CloneH245_MultilinkResponse_addConnection_responseCode::CreateObjectH245_ArrayOf_MultiplexElement::operator []H245_MultiplexElement &H245_NetworkAccessParameters_distribution::CreateObjectNames_H245_DepFECMode_rfc2733Mode_modeH245_MultilinkRequest_removeConnection::CloneH245_ArrayOf_MultiplePayloadStreamElement::operator []H245_MultiplePayloadStreamElement &H245_ArrayOf_RequestMultiplexEntryRejectionDescriptions::CloneH245_ConferenceResponse_makeTerminalBroadcasterResponse::CreateObjectNames_H245_DataApplicationCapability_applicationH245_FunctionNotSupported_cause::CreateObjectH245_EndSessionCommand_isdnOptions::CloneH245_FECData_rfc2733_pktMode_rfc2733sameport::DecodeH245_NetworkAccessParameters_t120SetupProcedure::H245_NetworkAccessParameters_t120SetupProcedureH245_FECCapability_rfc2733Format::H245_FECCapability_rfc2733FormatNames_H245_NetworkAccessParameters_distributionNames_H245_MultiplexElement_repeatCountH245_H223AL1MParameters_transferMode::CreateObjectH245_AudioCapability_g7231::EncodeH245_VCCapability_availableBitRates_type_rangeOfBitRates::CloneH245_RequestModeAck_response::CreateObjectH245_ArrayOf_H263ModeComboFlags::operator []H245_H263ModeComboFlags &H245_MiscellaneousCommand_type_videoFastUpdateGOB::PrintOnH245_H262VideoMode_profileAndLevel::CreateObjectH245_ArrayOf_ParameterIdentifier::H245_ArrayOf_ParameterIdentifierH245_H223ModeParameters_adaptationLayerType_al3::GetDataLengthH245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParametersH245_T84Profile_t84Restricted::CloneNames_H245_MiscellaneousIndication_typeH245_UnicastAddress_iP6Address::CompareNames_H245_V76LogicalChannelParameters_mode_eRM_recoveryH245_H223LogicalChannelParameters_adaptationLayerType_al3::H245_H223LogicalChannelParameters_adaptationLayerType_al3H245_H223LogicalChannelParameters_adaptationLayerType::CreateObjectNames_H245_CommunicationModeTableEntry_dataTypeH245_ConferenceResponse_sendThisSourceResponse::CloneH245_ArrayOf_DialingInformationNetworkType::H245_ArrayOf_DialingInformationNetworkTypeNames_H245_H223ModeParameters_adaptationLayerTypeH245_DataApplicationCapability_application::CreateObjectH245_MiscellaneousCommand_type_encryptionUpdateAck::CloneH245_ArrayOf_MultiplePayloadStreamElementMode::H245_ArrayOf_MultiplePayloadStreamElementModeH245_H223ModeParameters_adaptationLayerType::H245_H223ModeParameters_adaptationLayerTypeH245_UnicastAddress_iPXAddress::CompareH245_VCCapability_availableBitRates_type_rangeOfBitRates::DecodeH245_CommunicationModeTableEntry_dataType::CreateObjectH245_MultilinkRequest_callInformation::GetDataLengthH245_UnicastAddress_iP6Address::CloneH245_IS13818AudioMode_audioLayer::CreateObjectH245_MaintenanceLoopReject_type::CloneH245_DataApplicationCapability_application::H245_DataApplicationCapability_applicationH245_ArrayOf_MultiplePayloadStreamElementMode::operator []H245_MultiplePayloadStreamElementMode &H245_RefPictureSelection_additionalPictureMemory::DecodeH245_MultilinkIndication_excessiveError::PrintOnH245_ConferenceResponse_makeMeChairResponse::CreateObjectH245_DataApplicationCapability_application_nlpid::H245_DataApplicationCapability_application_nlpidH245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded::H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceededNames_H245_FECCapability_rfc2733FormatH245_RequestModeAck_response::CloneH245_RemoteMCResponse_reject::H245_RemoteMCResponse_rejectH245_UserInputIndication_signalUpdate_rtp::GetDataLengthH245_MiscellaneousCommand_type_videoFastUpdateGOB::DecodeH245_H223AnnexCArqParameters_numberOfRetransmissions::H245_H223AnnexCArqParameters_numberOfRetransmissionsH245_H223ModeParameters_adaptationLayerType_al3::H245_H223ModeParameters_adaptationLayerType_al3H245_DataMode_application_nlpid::EncodeH245_ArrayOf_CommunicationModeTableEntry::CreateObjectH245_MiscellaneousCommand_type_encryptionUpdateAck::PrintOnH245_RedundancyEncodingDTModeElement_type::H245_RedundancyEncodingDTModeElement_typeH245_Q2931Address_address::H245_Q2931Address_addressH245_ArrayOf_TerminalInformation::CloneH245_UnicastAddress_iPXAddress::CloneH245_RefPictureSelection_videoBackChannelSend::CloneH245_MiscellaneousCommand_type_videoFastUpdateMB::CloneH245_MultilinkRequest_callInformation::H245_MultilinkRequest_callInformationH245_MulticastAddress_iP6Address::DecodeH245_DataMode_application::H245_DataMode_applicationH245_NewATMVCCommand_aal_aal5::EncodeH245_MulticastAddress_iPAddress::PrintOnH245_RemoteMCResponse_reject::CloneH245_H223AL2MParameters_headerFEC::CreateObjectH245_V76LogicalChannelParameters_suspendResume::CreateObjectH245_H235Media_mediaType::H245_H235Media_mediaTypeH245_UserInputIndication_signal_rtp::EncodeH245_MiscellaneousCommand_type_encryptionUpdateAck::H245_MiscellaneousCommand_type_encryptionUpdateAckH245_MultilinkRequest_addConnection::CompareNames_H245_RequestModeAck_responseH245_H223AL1MParameters_transferMode::CloneH245_ArrayOf_DialingInformationNetworkType::CloneH245_ArrayOf_ParameterIdentifier::CloneH245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParametersNames_H245_EndSessionCommand_isdnOptionsH245_ConferenceResponse_extensionAddressResponse::PrintOnH245_ArrayOf_TerminalLabel::operator []H245_TerminalLabel &H245_MiscellaneousIndication_type_videoNotDecodedMBs::PrintOnH245_H223MultiplexReconfiguration_h223ModeChange::CreateObjectH245_H263VideoMode_resolution::H245_H263VideoMode_resolutionNames_H245_DataMode_applicationH245_G7231AnnexCCapability_g723AnnexCAudioMode::PrintOnNames_H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParametersH245_MultilinkIndication_excessiveError::GetDataLengthH245_FECData_rfc2733_pktMode_rfc2733sameport::H245_FECData_rfc2733_pktMode_rfc2733sameportH245_UnicastAddress_iPXAddress::DecodeH245_AudioCapability_g7231::H245_AudioCapability_g7231H245_DepFECData_rfc2733_mode_separateStream::CreateObjectH245_RequestMultiplexEntryRejectionDescriptions_cause::CreateObjectH245_MiscellaneousCommand_type_videoFastUpdateGOB::GetDataLengthH245_ArrayOf_DialingInformationNetworkType::CreateObjectH245_MultilinkIndication_crcDesired::EncodeH245_MultilinkRequest_addConnection::EncodeH245_H223AL1MParameters_transferMode::H245_H223AL1MParameters_transferModeH245_ArrayOf_CustomPictureFormat::CreateObjectH245_MiscellaneousCommand_type_lostPartialPicture::EncodeNames_H245_DepFECData_rfc2733_modeNames_H245_NewATMVCIndication_multiplexH245_JitterIndication_scope::CreateObjectH245_MultilinkRequest_callInformation::EncodeNames_H245_H235Media_mediaTypeH245_MiscellaneousCommand_type_videoFastUpdateGOB::CloneH245_ArrayOf_TerminalInformation::H245_ArrayOf_TerminalInformationNames_H245_FlowControlCommand_scopeH245_CustomPictureFormat_mPI_customPCF_subtype::CloneH245_DataMode_application_nlpid::CloneH245_DataApplicationCapability_application_nlpid::EncodeH245_MiscellaneousIndication_type_videoNotDecodedMBs::CloneH245_ArrayOf_MultiplexEntryRejectionDescriptions::CloneH245_FlowControlCommand_restriction::CreateObjectH245_H223AL1MParameters_headerFEC::CloneH245_MultilinkIndication_excessiveError::DecodeH245_EndSessionCommand_gstnOptions::H245_EndSessionCommand_gstnOptionsH245_ArrayOf_MultiplexEntryRejectionDescriptions::operator []H245_MultiplexEntryRejectionDescriptions &H245_ArrayOf_MultiplexTableEntryNumber::H245_ArrayOf_MultiplexTableEntryNumberH245_CustomPictureFormat_mPI_customPCF_subtype::EncodeH245_CloseLogicalChannel_source::CloneH245_ArrayOf_RedundancyEncodingDTModeElement::H245_ArrayOf_RedundancyEncodingDTModeElementH245_G7231AnnexCCapability_g723AnnexCAudioMode::EncodeH245_NewATMVCIndication_aal_aal5::PrintOnH245_NewATMVCCommand_aal_aal5::CloneH245_FlowControlIndication_restriction::CreateObjectH245_UserInputIndication_encryptedAlphanumeric::CloneH245_H262VideoMode_profileAndLevel::CloneH245_ConferenceResponse_makeTerminalBroadcasterResponse::CloneH245_ConferenceResponse_makeTerminalBroadcasterResponse::H245_ConferenceResponse_makeTerminalBroadcasterResponseH245_ArrayOf_Q2931Address::CreateObjectH245_UnicastAddress_iP6Address::EncodeNames_H245_OpenLogicalChannelReject_causeNames_H245_H223AL1MParameters_transferModeH245_H263VideoMode_resolution::CloneNames_H245_IS11172AudioMode_audioSamplingH245_ArrayOf_ModeDescription::CreateObjectH245_RequestChannelClose_reason::CreateObjectH245_H223AL3MParameters_crcLength::CreateObjectH245_CommunicationModeTableEntry_dataType::CloneH245_RedundancyEncodingMode_secondaryEncoding::H245_RedundancyEncodingMode_secondaryEncodingH245_ConferenceResponse_broadcastMyLogicalChannelResponse::CloneH245_MaintenanceLoopRequest_type::CreateObjectH245_NewATMVCCommand_aal_aal5::PrintOnH245_UnicastAddress_iPAddress::CompareH245_MultilinkResponse_removeConnection::CloneH245_MiscellaneousCommand_type_videoBadMBs::PrintOnH245_RefPictureSelection_additionalPictureMemory::GetDataLengthH245_MiscellaneousIndication_type_videoNotDecodedMBs::CompareH245_ArrayOf_TerminalInformation::operator []H245_TerminalInformation &H245_H235Mode_mediaMode::H245_H235Mode_mediaModeH245_H223LogicalChannelParameters_adaptationLayerType_al3::EncodeH245_T38FaxUdpOptions_t38FaxUdpEC::H245_T38FaxUdpOptions_t38FaxUdpECH245_MulticastAddress_iPAddress::CompareH245_UnicastAddress_iPAddress::DecodeNames_H245_FlowControlIndication_restrictionH245_MultilinkRequest_addConnection::CloneH245_ArrayOf_MultiplexEntryDescriptor::CloneH245_CustomPictureFormat_mPI_customPCF::CloneH245_CustomPictureFormat_mPI_customPCF::operator []H245_CustomPictureFormat_mPI_customPCF_subtype &Names_H245_MaintenanceLoopRequest_typeH245_ConferenceResponse_broadcastMyLogicalChannelResponse::CreateObjectH245_MultilinkIndication_crcDesired::CloneH245_AudioCapability_g7231::GetDataLengthH245_MiscellaneousCommand_type_encryptionUpdateAck::CompareH245_FlowControlIndication_scope::H245_FlowControlIndication_scopeH245_MultilinkResponse_callInformation::H245_MultilinkResponse_callInformationH245_DepFECCapability_rfc2733_separateStream::CompareH245_H2250LogicalChannelParameters_mediaPacketization::H245_H2250LogicalChannelParameters_mediaPacketizationH245_DataApplicationCapability_application_nlpid::CloneNames_H245_MultiplexElement_typeH245_ArrayOf_H263ModeComboFlags::CloneH245_ArrayOf_CommunicationModeTableEntry::CloneH245_H223AL3MParameters_crcLength::CloneH245_OpenLogicalChannelAck_forwardMultiplexAckParameters::CloneNames_H245_NewATMVCIndication_aalH245_MiscellaneousCommand_type_lostPartialPicture::DecodeH245_MultilinkRequest_addConnection::GetDataLengthH245_RefPictureSelection_videoBackChannelSend::H245_RefPictureSelection_videoBackChannelSendH245_UserInputIndication_signal_rtp::GetDataLengthH245_RequestChannelClose_reason::CloneNames_H245_OpenLogicalChannelAck_forwardMultiplexAckParametersH245_T84Profile_t84Restricted::H245_T84Profile_t84RestrictedH245_RequestChannelCloseReject_cause::CloneH245_H223MultiplexReconfiguration_h223AnnexADoubleFlag::CloneH245_UserInputIndication_signal_rtp::CloneH245_MultilinkRequest_removeConnection::H245_MultilinkRequest_removeConnectionH245_MultilinkResponse_addConnection_responseCode::H245_MultilinkResponse_addConnection_responseCodeH245_H223MultiplexReconfiguration_h223ModeChange::H245_H223MultiplexReconfiguration_h223ModeChangeH245_MultiplexElement_repeatCount::CreateObjectH245_FECCapability_rfc2733Format::CreateObjectH245_RefPictureSelection_additionalPictureMemory::H245_RefPictureSelection_additionalPictureMemoryH245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode::H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCodeH245_MulticastAddress_iP6Address::CompareH245_UserInputIndication_signalUpdate_rtp::CompareH245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode::CloneH245_FECMode_rfc2733Format::CreateObjectH245_CustomPictureFormat_mPI_customPCF_subtype::CompareH245_ArrayOf_MultiplePayloadStreamElement::H245_ArrayOf_MultiplePayloadStreamElementH245_UnicastAddress_iPAddress::H245_UnicastAddress_iPAddressNames_H245_DataProtocolCapability_v76wCompressionH245_DataMode_application::CreateObjectH245_VCCapability_availableBitRates_type::CloneH245_ArrayOf_Q2931Address::operator []H245_Q2931Address &H245_UnicastAddress_iPXAddress::EncodeH245_EndSessionCommand_gstnOptions::CreateObjectH245_ArrayOf_MultiplexTableEntryNumber::CreateObjectH245_DepFECData_rfc2733_mode::H245_DepFECData_rfc2733_modeNames_H245_H223MultiplexReconfiguration_h223ModeChangeH245_H223AL3MParameters_crcLength::H245_H223AL3MParameters_crcLengthH245_UnicastAddress_iPSourceRouteAddress_route::operator []H245_MiscellaneousCommand_type::CloneH245_H261VideoMode_resolution::CreateObjectH245_NetworkAccessParameters_t120SetupProcedure::CloneH245_ArrayOf_H263VideoModeCombos::CloneH245_FECData_rfc2733_pktMode_rfc2733sameport::PrintOnNames_H245_NewATMVCCommand_aalH245_RedundancyEncodingDTModeElement_type::CloneH245_H223LogicalChannelParameters_adaptationLayerType_al3::CloneNames_H245_CloseLogicalChannel_sourceH245_UserInputIndication_userInputSupportIndication::CloneH245_AudioCapability_g7231::CompareH245_MultilinkResponse_removeConnection::PrintOnH245_H223AL3MParameters_arqType::CloneH245_ArrayOf_CapabilityDescriptorNumber::H245_ArrayOf_CapabilityDescriptorNumberH245_ArrayOf_DialingInformationNumber::CloneH245_H262VideoMode_profileAndLevel::H245_H262VideoMode_profileAndLevelH245_FECData_rfc2733_pktMode::H245_FECData_rfc2733_pktModeNames_H245_CloseLogicalChannel_reasonH245_H223AL2MParameters_headerFEC::H245_H223AL2MParameters_headerFECH245_T84Profile_t84Restricted::DecodeH245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode::operator []H245_MiscellaneousCommand_type::CreateObjectH245_FlowControlCommand_restriction::H245_FlowControlCommand_restrictionH245_H223ModeParameters_adaptationLayerType::CloneH245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric::H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumericH245_MiscellaneousIndication_type_videoNotDecodedMBs::EncodeH245_MultilinkResponse_callInformation::GetDataLengthH245_DepFECCapability_rfc2733_separateStream::CloneH245_MobileMultilinkReconfigurationCommand_status::CloneH245_MultilinkResponse_removeConnection::DecodeH245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceededH245_NewATMVCCommand_aal_aal5::CompareH245_FECData_rfc2733_pktMode_rfc2733sameport::CloneH245_MultilinkResponse_maximumHeaderInterval::H245_MultilinkResponse_maximumHeaderIntervalH245_MultilinkRequest_removeConnection::EncodeH245_H223AnnexCArqParameters_numberOfRetransmissions::CreateObjectH245_H223ModeParameters_adaptationLayerType_al3::PrintOnNames_H245_Q2931Address_addressH245_NetworkAccessParameters_networkAddress::CreateObjectNames_H245_VCCapability_availableBitRates_typeH245_OpenLogicalChannelReject_cause::H245_OpenLogicalChannelReject_causeH245_MulticastAddress_iPAddress::DecodeH245_NewATMVCIndication_reverseParameters_multiplex::CreateObjectH245_ArrayOf_ModeDescription::H245_ArrayOf_ModeDescriptionH245_ArrayOf_MultiplexEntryDescriptor::CreateObjectH245_MultilinkResponse_removeConnection::GetDataLengthH245_NewATMVCIndication_reverseParameters_multiplex::CloneH245_NewATMVCCommand_aal::CreateObjectH245_V76LogicalChannelParameters_mode_eRM_recovery::CloneH245_DataApplicationCapability_application_nlpid::GetDataLengthH245_MultiplexElement_type::CreateObjectH245_H223AL3MParameters_headerFormat::H245_H223AL3MParameters_headerFormatH245_FlowControlIndication_restriction::H245_FlowControlIndication_restrictionH245_OpenLogicalChannelReject_cause::CreateObjectH245_MulticastAddress_iPAddress::CloneH245_G7231AnnexCCapability_g723AnnexCAudioMode::CompareH245_MultilinkResponse_maximumHeaderInterval::PrintOnH245_RequestMultiplexEntryRejectionDescriptions_cause::CloneH245_G7231AnnexCMode_g723AnnexCAudioMode::DecodeH245_H223AL1MParameters_crcLength::H245_H223AL1MParameters_crcLengthH245_DataApplicationCapability_application_nlpid::CompareH245_IS13818AudioMode_multichannelType::CloneNames_H245_NetworkAccessParameters_t120SetupProcedureH245_UserInputIndication_signal_rtp::CompareH245_ArrayOf_RequestMultiplexEntryRejectionDescriptions::CreateObjectH245_ArrayOf_CustomPictureFormat::CloneH245_DepFECCapability_rfc2733_separateStream::GetDataLengthH245_MultilinkRequest_callInformation::PrintOnH245_H223ModeParameters_adaptationLayerType_al3::DecodeH245_H223Capability_h223MultiplexTableCapability_enhanced::H245_H223Capability_h223MultiplexTableCapability_enhancedH245_NewATMVCIndication_aal_aal5::H245_NewATMVCIndication_aal_aal5H245_G7231AnnexCCapability_g723AnnexCAudioMode::CloneH245_ArrayOf_MultiplexEntryDescriptor::operator []H245_MultiplexEntryDescriptor &H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParametersH245_NewATMVCIndication_aal::CloneH245_VCCapability_availableBitRates_type_rangeOfBitRates::CompareH245_MiscellaneousCommand_type_videoFastUpdateMB::EncodeH245_V76LogicalChannelParameters_mode::CreateObjectH245_T84Profile_t84Restricted::PrintOnH245_DepFECCapability_rfc2733_separateStream::EncodeH245_MiscellaneousCommand_type_lostPartialPicture::GetDataLengthH245_NewATMVCIndication_multiplex::CreateObjectH245_ConferenceResponse_makeMeChairResponse::H245_ConferenceResponse_makeMeChairResponseNames_H245_V76LogicalChannelParameters_modeH245_RedundancyEncodingMode_secondaryEncoding::CloneH245_ArrayOf_RedundancyEncodingDTModeElement::operator []H245_RedundancyEncodingDTModeElement &H245_NewATMVCCommand_reverseParameters_multiplex::CreateObjectNames_H245_H223AL1MParameters_crcLengthNames_H245_MiscellaneousCommand_typeH245_ArrayOf_ParameterIdentifier::CreateObjectH245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumericH245_MultilinkRequest_removeConnection::PrintOnH245_V76LogicalChannelParameters_mode_eRM_recovery::CreateObjectH245_UserInputIndication_encryptedAlphanumeric::DecodeH245_RemoteMCResponse_reject::CreateObjectH245_NewATMVCIndication_aal_aal5::EncodeH245_RequestChannelClose_reason::H245_RequestChannelClose_reasonNames_H245_RedundancyEncodingMode_secondaryEncodingNames_H245_RefPictureSelection_videoBackChannelSendH245_ArrayOf_TerminalLabel::CloneH245_IS11172AudioMode_multichannelType::CloneH245_NewATMVCCommand_aal_aal5::H245_NewATMVCCommand_aal_aal5H245_FlowControlIndication_scope::CreateObjectH245_H223LogicalChannelParameters_adaptationLayerType::CloneH245_RefPictureSelection_additionalPictureMemory::CloneH245_NewATMVCCommand_aal::H245_NewATMVCCommand_aalH245_ArrayOf_PictureReference::H245_ArrayOf_PictureReferenceNames_H245_NetworkAccessParameters_networkAddressH245_ArrayOf_ModeDescription::operator []H245_ModeDescription &H245_H223LogicalChannelParameters_adaptationLayerType_al3::GetDataLengthH245_MultilinkResponse_callInformation::EncodeH245_RequestChannelCloseReject_cause::H245_RequestChannelCloseReject_causeH245_CloseLogicalChannel_reason::H245_CloseLogicalChannel_reasonH245_G7231AnnexCCapability_g723AnnexCAudioMode::GetDataLengthH245_ArrayOf_MultiplePayloadStreamElementMode::CreateObjectH245_UnicastAddress_iPSourceRouteAddress_routing::H245_UnicastAddress_iPSourceRouteAddress_routingH245_ArrayOf_H263ModeComboFlags::H245_ArrayOf_H263ModeComboFlagsH245_DataApplicationCapability_application_t84::PrintOnH245_T38FaxUdpOptions_t38FaxUdpEC::CreateObjectNames_H245_H223AL1MParameters_arqTypeH245_CloseLogicalChannel_reason::CloneH245_H223Capability_h223MultiplexTableCapability_enhanced::DecodeH245_IS13818AudioMode_audioLayer::H245_IS13818AudioMode_audioLayerH245_UserInputIndication_signalUpdate_rtp::DecodeH245_MultilinkResponse_addConnection_responseCode::CloneH245_EndSessionCommand_gstnOptions::CloneH245_MaintenanceLoopAck_type::CreateObjectH245_MiscellaneousCommand_type_lostPartialPicture::PrintOnH245_MiscellaneousCommand_type_videoFastUpdateMB::PrintOnNames_H245_FECMode_rfc2733FormatH245_ArrayOf_CommunicationModeTableEntry::H245_ArrayOf_CommunicationModeTableEntryH245_MultilinkResponse_maximumHeaderInterval::EncodeH245_ArrayOf_TerminalInformation::CreateObjectH245_H261VideoMode_resolution::CloneH245_ArrayOf_H263ModeComboFlags::CreateObjectNames_H245_NewATMVCCommand_multiplexH245_ArrayOf_EscrowData::operator []H245_EscrowData &H245_MultilinkIndication_crcDesired::H245_MultilinkIndication_crcDesiredH245_DataApplicationCapability_application_t84::DecodeNames_H245_H223MultiplexReconfiguration_h223AnnexADoubleFlagH245_ArrayOf_CapabilityDescriptorNumber::CreateObjectH245_JitterIndication_scope::H245_JitterIndication_scopeH245_G7231AnnexCMode_g723AnnexCAudioMode::GetDataLengthH245_DataApplicationCapability_application_t84::EncodeH245_H223AnnexCArqParameters_numberOfRetransmissions::CloneH245_RefPictureSelection_additionalPictureMemory::EncodeH245_MaintenanceLoopReject_cause::CreateObjectH245_ConferenceResponse_extensionAddressResponse::CompareH245_FunctionNotSupported_cause::H245_FunctionNotSupported_causeH245_UnicastAddress_iPSourceRouteAddress_route::CloneH245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtypeH245_V76LogicalChannelParameters_mode_eRM_recovery::H245_V76LogicalChannelParameters_mode_eRM_recoveryH245_MiscellaneousCommand_type_videoBadMBs::DecodeH245_IS13818AudioMode_audioSampling::H245_IS13818AudioMode_audioSamplingH245_H235Media_mediaType::CreateObjectH245_H223ModeParameters_adaptationLayerType_al3::CompareNames_H245_H223AL3MParameters_crcLengthH245_DataMode_application_nlpid::PrintOnH245_FlowControlCommand_restriction::CloneH245_H223AL1MParameters_headerFEC::CreateObjectNames_H245_IS11172AudioMode_audioLayerH245_H223AL1MParameters_arqType::CloneH245_ArrayOf_RedundancyEncodingElement::CreateObjectH245_MultilinkRequest_addConnection::PrintOnNames_H245_MultilinkRequest_maximumHeaderInterval_requestTypeH245_RefPictureSelection_videoBackChannelSend::CreateObjectH245_ArrayOf_Q2931Address::H245_ArrayOf_Q2931AddressH245_UnicastAddress_iPAddress::PrintOnH245_AudioMode_g7231::H245_AudioMode_g7231H245_DataApplicationCapability_application_nlpid::DecodeH245_ArrayOf_MultiplexTableEntryNumber::operator []H245_G7231AnnexCMode_g723AnnexCAudioMode::CloneH245_IS13818AudioMode_multichannelType::CreateObjectH245_DepFECData_rfc2733_mode_separateStream::CloneH245_EndSessionCommand_isdnOptions::H245_EndSessionCommand_isdnOptionsH245_ConferenceResponse_broadcastMyLogicalChannelResponse::H245_ConferenceResponse_broadcastMyLogicalChannelResponseH245_ArrayOf_RedundancyEncodingDTModeElement::CreateObjectNames_H245_RequestChannelCloseReject_causeH245_MiscellaneousCommand_type_videoBadMBs::CloneH245_ArrayOf_DialingInformationNumber::H245_ArrayOf_DialingInformationNumberH245_MultilinkIndication_crcDesired::GetDataLengthH245_ArrayOf_CustomPictureFormat::H245_ArrayOf_CustomPictureFormatNames_H245_H223AL3MParameters_arqTypeH245_ArrayOf_DialingInformationNumber::operator []H245_DialingInformationNumber &Names_H245_RequestMultiplexEntryRejectionDescriptions_causeH245_MultiplexElement_repeatCount::H245_MultiplexElement_repeatCountH245_H223ModeParameters_adaptationLayerType_al3::CloneH245_ArrayOf_TerminalLabel::CreateObjectH245_NewATMVCIndication_multiplex::H245_NewATMVCIndication_multiplexNames_H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParametersH245_MiscellaneousCommand_type_encryptionUpdateAck::EncodeH245_DataMode_application_nlpid::GetDataLengthH245_VCCapability_availableBitRates_type_rangeOfBitRates::EncodeH245_ArrayOf_MultiplexElement::CreateObjectNames_H245_EndSessionCommand_gstnOptionsH245_MultilinkResponse_callInformation::DecodeH245_MaintenanceLoopReject_type::CreateObjectH245_H223Capability_h223MultiplexTableCapability_enhanced::CloneNames_H245_DepFECData_rfc2733_mode_separateStreamH245_CustomPictureFormat_pixelAspectInformation::CloneH245_ConferenceResponse_sendThisSourceResponse::H245_ConferenceResponse_sendThisSourceResponseNames_H245_RedundancyEncodingDTModeElement_typeH245_H223AL1MParameters_crcLength::CloneH245_G7231AnnexCMode_g723AnnexCAudioMode::CompareH245_NewATMVCCommand_multiplex::H245_NewATMVCCommand_multiplexH245_UserInputIndication_encryptedAlphanumeric::H245_UserInputIndication_encryptedAlphanumericH245_H223AL3MParameters_headerFormat::CreateObjectH245_NewATMVCIndication_aal::H245_NewATMVCIndication_aalH245_MultiplexEntryRejectionDescriptions_cause::H245_MultiplexEntryRejectionDescriptions_causeH245_UserInputIndication_signalUpdate_rtp::H245_UserInputIndication_signalUpdate_rtpH245_MiscellaneousCommand_type_videoFastUpdateGOB::EncodeH245_CommunicationModeTableEntry_dataType::H245_CommunicationModeTableEntry_dataTypeH245_CustomPictureFormat_mPI_customPCF_subtype::GetDataLengthH245_ArrayOf_CapabilityDescriptorNumber::operator []H245_H223ModeParameters_adaptationLayerType_al3::EncodeH245_IS13818AudioMode_audioSampling::CreateObjectH245_MultiplexEntryRejectionDescriptions_cause::CloneH245_NewATMVCIndication_aal_aal5::CompareH245_MiscellaneousCommand_type_videoBadMBs::H245_MiscellaneousCommand_type_videoBadMBsH245_DataMode_application_nlpid::DecodeH245_FlowControlCommand_scope::CloneH245_H2250LogicalChannelParameters_mediaPacketization::CloneH245_H223ModeParameters_adaptationLayerType::CreateObjectH245_FlowControlCommand_scope::CreateObjectH245_IS11172AudioMode_audioLayer::CloneH245_MulticastAddress_iP6Address::EncodeH245_UserInputIndication_signal_rtp::H245_UserInputIndication_signal_rtpH245_NewATMVCIndication_aal_aal5::CloneH245_VCCapability_availableBitRates_type_rangeOfBitRates::GetDataLengthH245_UserInputIndication_signalUpdate_rtp::CloneNames_H245_FlowControlCommand_restrictionNames_H245_H262VideoMode_profileAndLevelNames_H245_RequestModeReject_causeH245_MultiplexElement_type::CloneH245_H223LogicalChannelParameters_adaptationLayerType_al3::PrintOnNames_H245_MaintenanceLoopReject_causeH245_IS13818AudioMode_audioSampling::CloneH245_UserInputIndication_signal_rtp::DecodeH245_MiscellaneousCommand_type_videoBadMBs::CompareH245_DepFECMode_rfc2733Mode_mode::H245_DepFECMode_rfc2733Mode_modeH245_VCCapability_availableBitRates_type::H245_VCCapability_availableBitRates_typeH245_NewATMVCIndication_aal::CreateObjectH245_AudioCapability_g7231::DecodeH245_MiscellaneousCommand_type::H245_MiscellaneousCommand_typeH245_Q2931Address_address::CloneH245_MultilinkRequest_callInformation::CloneH245_ArrayOf_MultiplexEntryRejectionDescriptions::H245_ArrayOf_MultiplexEntryRejectionDescriptionsH245_Q2931Address_address::CreateObjectH245_DataProtocolCapability_v76wCompression::CreateObjectH245_G7231AnnexCCapability_g723AnnexCAudioMode::H245_G7231AnnexCCapability_g723AnnexCAudioModeH245_DepFECCapability_rfc2733_separateStream::PrintOnH245_ArrayOf_ModeDescription::CloneH245_ArrayOf_TerminalLabel::H245_ArrayOf_TerminalLabelH245_MobileMultilinkReconfigurationCommand_status::H245_MobileMultilinkReconfigurationCommand_statusH245_H263VideoMode_resolution::CreateObjectNames_H245_IS13818AudioMode_audioSamplingH245_MulticastAddress_iPAddress::GetDataLengthH245_ArrayOf_CommunicationModeTableEntry::operator []H245_CommunicationModeTableEntry &H245_RequestModeReject_cause::CloneH245_NetworkAccessParameters_distribution::CloneH245_RequestModeReject_cause::H245_RequestModeReject_causeH245_ArrayOf_MultiplexTableEntryNumber::CloneH245_NewATMVCCommand_reverseParameters_multiplex::CloneH245_MultilinkRequest_removeConnection::GetDataLengthNames_H245_H223AL3MParameters_headerFormatH245_ArrayOf_NonStandardParameter::CloneH245_RTPPayloadType_payloadDescriptor::CreateObjectH245_MiscellaneousCommand_type_lostPartialPicture::CompareH245_MultilinkResponse_removeConnection::CompareH245_MiscellaneousCommand_type_videoFastUpdateGOB::CompareH245_MultilinkRequest_addConnection::DecodeH245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParametersH245_FECMode_rfc2733Format::H245_FECMode_rfc2733FormatNames_H245_IS13818AudioMode_multichannelTypeH245_NewATMVCCommand_aal_aal5::DecodeH245_ArrayOf_PictureReference::operator []H245_PictureReference &H245_NewATMVCCommand_multiplex::CreateObjectH245_UnicastAddress_iPSourceRouteAddress_routing::CloneH245_ArrayOf_MultiplePayloadStreamElementMode::CloneH245_H223AL1MParameters_crcLength::CreateObjectH245_UserInputIndication_userInputSupportIndication::H245_UserInputIndication_userInputSupportIndicationH245_ArrayOf_MultiplexEntryRejectionDescriptions::CreateObjectH245_ArrayOf_EscrowData::CreateObjectH245_NetworkAccessParameters_networkAddress::H245_NetworkAccessParameters_networkAddressH245_DataMode_application::CloneH245_NetworkAccessParameters_distribution::H245_NetworkAccessParameters_distributionH245_ArrayOf_H263VideoModeCombos::H245_ArrayOf_H263VideoModeCombosH245_MiscellaneousCommand_type_videoBadMBs::GetDataLengthH245_UserInputIndication_encryptedAlphanumeric::GetDataLengthH245_CloseLogicalChannel_source::H245_CloseLogicalChannel_sourceH245_CustomPictureFormat_mPI_customPCF_subtype::DecodeH245_MultilinkRequest_maximumHeaderInterval_requestType::CreateObjectH245_MiscellaneousIndication_type_videoNotDecodedMBs::GetDataLengthH245_UserInputIndication_signalUpdate_rtp::PrintOnH245_IS13818AudioMode_audioLayer::CloneH245_MultilinkResponse_maximumHeaderInterval::CloneH245_MiscellaneousCommand_type_videoFastUpdateMB::H245_MiscellaneousCommand_type_videoFastUpdateMBH245_G7231AnnexCCapability_g723AnnexCAudioMode::DecodeH245_IS11172AudioMode_audioLayer::H245_IS11172AudioMode_audioLayerH245_UnicastAddress_iPAddress::EncodeH245_IS11172AudioMode_audioSampling::CreateObjectH245_ConferenceResponse_extensionAddressResponse::EncodeH245_RedundancyEncodingMode_secondaryEncoding::CreateObjectH245_MultilinkIndication_crcDesired::DecodeH245_ArrayOf_MultiplePayloadStreamElement::CloneNames_H245_MaintenanceLoopReject_typeH245_MaintenanceLoopReject_type::H245_MaintenanceLoopReject_typeH245_UnicastAddress_iP6Address::DecodeH245_RefPictureSelection_additionalPictureMemory::PrintOnH245_CustomPictureFormat_pixelAspectInformation::H245_CustomPictureFormat_pixelAspectInformationH245_UnicastAddress_iP6Address::PrintOnH245_DataProtocolCapability_v76wCompression::H245_DataProtocolCapability_v76wCompressionH245_UnicastAddress_iP6Address::H245_UnicastAddress_iP6AddressH245_FECData_rfc2733_pktMode::CloneH245_MultilinkResponse_removeConnection::H245_MultilinkResponse_removeConnectionH245_UnicastAddress_iPSourceRouteAddress_route::CreateObjectH245_NewATMVCIndication_reverseParameters_multiplex::H245_NewATMVCIndication_reverseParameters_multiplexH245_JitterIndication_scope::CloneH245_VCCapability_availableBitRates_type::CreateObjectH245_MultiplexElement_repeatCount::CloneH245_MultilinkRequest_callInformation::DecodeNames_H245_ConferenceResponse_makeTerminalBroadcasterResponseH245_MiscellaneousCommand_type_lostPartialPicture::CloneH245_CustomPictureFormat_pixelAspectInformation_extendedPAR::CloneH245_ArrayOf_RedundancyEncodingElement::CloneH245_H223AL1MParameters_arqType::CreateObjectH245_V76LogicalChannelParameters_suspendResume::H245_V76LogicalChannelParameters_suspendResumeH245_MultilinkRequest_maximumHeaderInterval_requestType::CloneH245_RequestModeAck_response::H245_RequestModeAck_responseH245_MiscellaneousIndication_type::H245_MiscellaneousIndication_typeNames_H245_RTPPayloadType_payloadDescriptorH245_IS11172AudioMode_audioSampling::H245_IS11172AudioMode_audioSamplingH245_RequestMultiplexEntryRejectionDescriptions_cause::H245_RequestMultiplexEntryRejectionDescriptions_causeH245_RTPPayloadType_payloadDescriptor::H245_RTPPayloadType_payloadDescriptorH245_MultilinkIndication_excessiveError::CloneH245_VCCapability_availableBitRates_type_rangeOfBitRates::H245_VCCapability_availableBitRates_type_rangeOfBitRatesH245_ConferenceResponse_makeMeChairResponse::CloneH245_MiscellaneousIndication_type_videoNotDecodedMBs::H245_MiscellaneousIndication_type_videoNotDecodedMBsNames_H245_IS13818AudioMode_audioLayerNames_H245_H223AL1MParameters_headerFECNames_H245_H235Mode_mediaModeH245_ArrayOf_RedundancyEncodingElement::operator []H245_RedundancyEncodingElement &H245_MultilinkResponse_callInformation::CloneH245_NewATMVCIndication_aal_aal5::GetDataLengthH245_MultilinkIndication_excessiveError::EncodeH245_ArrayOf_MultiplexElement::H245_ArrayOf_MultiplexElementH245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters::H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParametersH245_MiscellaneousCommand_type_lostPartialPicture::H245_MiscellaneousCommand_type_lostPartialPictureNames_H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParametersH245_H235Mode_mediaMode::CreateObjectNames_H245_H263VideoMode_resolutionH245_CloseLogicalChannel_source::CreateObjectH245_MiscellaneousIndication_type::CreateObjectH245_RedundancyEncodingDTModeElement_type::CreateObjectH245_NewATMVCIndication_multiplex::CloneH245_MiscellaneousIndication_type_videoNotDecodedMBs::DecodeH245_H223MultiplexReconfiguration_h223ModeChange::CloneH245_DepFECData_rfc2733_mode::CreateObjectH245_MaintenanceLoopAck_type::H245_MaintenanceLoopAck_typeH245_DataApplicationCapability_application_t84::CloneH245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode::CreateObjectH245_MiscellaneousIndication_type::CloneH245_T84Profile_t84Restricted::EncodeH245_ArrayOf_MultiplePayloadStreamElement::CreateObjectH245_IS13818AudioMode_multichannelType::H245_IS13818AudioMode_multichannelTypeH245_FunctionNotSupported_cause::CloneH245_CustomPictureFormat_mPI_customPCF::CreateObjectH245_H223Capability_h223MultiplexTableCapability_enhanced::GetDataLengthH245_H235Mode_mediaMode::CloneH245_MultilinkResponse_maximumHeaderInterval::CompareH245_MultilinkRequest_maximumHeaderInterval_requestType::H245_MultilinkRequest_maximumHeaderInterval_requestTypeH245_ConferenceResponse_extensionAddressResponse::GetDataLengthH245_CustomPictureFormat_pixelAspectInformation_extendedPAR::CreateObjectH245_CustomPictureFormat_pixelAspectInformation_extendedPAR::H245_CustomPictureFormat_pixelAspectInformation_extendedPARH245_CustomPictureFormat_mPI_customPCF::H245_CustomPictureFormat_mPI_customPCFH245_MaintenanceLoopRequest_type::CloneH245_MulticastAddress_iP6Address::H245_MulticastAddress_iP6AddressH245_G7231AnnexCMode_g723AnnexCAudioMode::PrintOnH245_IS11172AudioMode_multichannelType::H245_IS11172AudioMode_multichannelTypeH245_MultilinkRequest_callInformation::CompareNames_H245_MaintenanceLoopAck_typeNames_H245_ConferenceResponse_broadcastMyLogicalChannelResponseH245_DepFECMode_rfc2733Mode_mode::CloneH245_UnicastAddress_iPAddress::GetDataLengthH245_H2250LogicalChannelParameters_mediaPacketization::CreateObjectH245_DataMode_application_nlpid::H245_DataMode_application_nlpidH245_ArrayOf_CustomPictureFormat::operator []H245_CustomPictureFormat &Names_H245_FlowControlIndication_scopeH245_ArrayOf_RTPH263VideoRedundancyFrameMapping::CloneNames_H245_H261VideoMode_resolutionH245_RequestChannelCloseReject_cause::CreateObjectH245_ConferenceResponse_extensionAddressResponse::DecodeH245_RequestModeReject_cause::CreateObjectH245_T84Profile_t84Restricted::CompareH245_EndSessionCommand_isdnOptions::CreateObjectH245_H223LogicalChannelParameters_adaptationLayerType::H245_H223LogicalChannelParameters_adaptationLayerTypeH245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParametersH245_H223MultiplexReconfiguration_h223AnnexADoubleFlag::H245_H223MultiplexReconfiguration_h223AnnexADoubleFlagH245_NewATMVCCommand_multiplex::CloneH245_IS11172AudioMode_audioLayer::CreateObjectH245_VCCapability_availableBitRates_type_rangeOfBitRates::PrintOnNames_H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceededH245_ArrayOf_DialingInformationNetworkType::operator []H245_DialingInformationNetworkType &Names_H245_RequestChannelClose_reasonH245_MiscellaneousCommand_type_videoFastUpdateMB::CompareNames_H245_CustomPictureFormat_pixelAspectInformationH245_NewATMVCCommand_reverseParameters_multiplex::H245_NewATMVCCommand_reverseParameters_multiplexH245_DepFECData_rfc2733_mode_separateStream::H245_DepFECData_rfc2733_mode_separateStreamH245_CustomPictureFormat_pixelAspectInformation_extendedPAR::operator []H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype &H245_ArrayOf_RedundancyEncodingElement::H245_ArrayOf_RedundancyEncodingElementH245_ArrayOf_NonStandardParameter::operator []H245_NonStandardParameter &H245_ArrayOf_H263VideoModeCombos::operator []H245_H263VideoModeCombos &H245_OpenLogicalChannelReject_cause::CloneH245_T38FaxUdpOptions_t38FaxUdpEC::CloneH245_UserInputIndication_userInputSupportIndication::CreateObjectH245_UnicastAddress_iP6Address::GetDataLengthH245_AudioCapability_g7231::CloneH245_UnicastAddress_iPSourceRouteAddress_route::H245_UnicastAddress_iPSourceRouteAddress_routeH245_DataApplicationCapability_application_nlpid::PrintOnH245_DataApplicationCapability_application_t84::CompareH245_FlowControlCommand_scope::H245_FlowControlCommand_scopeNames_H245_NewATMVCCommand_reverseParameters_multiplexH245_V76LogicalChannelParameters_suspendResume::CloneH245_DepFECCapability_rfc2733_separateStream::DecodeH245_MultilinkResponse_callInformation::PrintOnH245_ArrayOf_MultiplexEntryDescriptor::H245_ArrayOf_MultiplexEntryDescriptorH245_H223LogicalChannelParameters_adaptationLayerType_al3::DecodeH245_ConferenceResponse_sendThisSourceResponse::CreateObjectH245_ArrayOf_Q2931Address::CloneH245_MultilinkResponse_removeConnection::EncodeH245_ArrayOf_RTPH263VideoRedundancyFrameMapping::operator []H245_RTPH263VideoRedundancyFrameMapping &H245_NewATMVCCommand_aal_aal5::GetDataLengthH245_OpenLogicalChannelAck_forwardMultiplexAckParameters::CreateObjectH245_MiscellaneousCommand_type_videoFastUpdateMB::GetDataLengthH245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParametersH245_UserInputIndication_signal_rtp::PrintOnH245_NewATMVCCommand_aal::CloneNames_H245_MultiplexEntryRejectionDescriptions_causeNames_H245_H223LogicalChannelParameters_adaptationLayerTypeH245_FlowControlIndication_scope::CloneH245_ArrayOf_DialingInformationNumber::CreateObjectH245_ArrayOf_RequestMultiplexEntryRejectionDescriptions::H245_ArrayOf_RequestMultiplexEntryRejectionDescriptionsH245_ArrayOf_EscrowData::H245_ArrayOf_EscrowDataH245_ArrayOf_CapabilityDescriptorNumber::CloneH245_MultilinkResponse_maximumHeaderInterval::GetDataLengthH245_H223Capability_h223MultiplexTableCapability_enhanced::CompareNames_H245_NewATMVCIndication_reverseParameters_multiplexH245_DataProtocolCapability_v76wCompression::CloneH245_UserInputIndication_encryptedAlphanumeric::CompareNames_H245_ConferenceResponse_sendThisSourceResponseH245_ArrayOf_ParameterIdentifier::operator []H245_ParameterIdentifier &H245_H223AL1MParameters_arqType::H245_H223AL1MParameters_arqTypeH245_CustomPictureFormat_mPI_customPCF_subtype::PrintOnH245_H223MultiplexReconfiguration_h223AnnexADoubleFlag::CreateObjectH245_FECMode_rfc2733Format::CloneNames_H245_H223AL2MParameters_headerFECH245_IS11172AudioMode_multichannelType::CreateObjectH245_ArrayOf_MultiplexElement::CloneH245_MulticastAddress_iP6Address::GetDataLengthH245_MiscellaneousCommand_type_videoFastUpdateMB::DecodeH245_ArrayOf_EscrowData::CloneH245_DepFECData_rfc2733_mode::CloneH245_MultilinkRequest_removeConnection::CompareNames_H245_H2250LogicalChannelParameters_mediaPacketizationH245_MaintenanceLoopAck_type::CloneH245_H223AL3MParameters_headerFormat::CloneH245_H223AL1MParameters_headerFEC::H245_H223AL1MParameters_headerFECH245_DataApplicationCapability_application::CloneH245_DataMode_application_nlpid::CompareH245_H261VideoMode_resolution::H245_H261VideoMode_resolutionH245_MiscellaneousCommand_type_encryptionUpdateAck::GetDataLengthH245_DepFECMode_rfc2733Mode_mode::CreateObjectNames_H245_UserInputIndication_userInputSupportIndicationH245_ArrayOf_RTPH263VideoRedundancyFrameMapping::H245_ArrayOf_RTPH263VideoRedundancyFrameMappingH245_NewATMVCIndication_aal_aal5::DecodeH245_DataApplicationCapability_application_t84::H245_DataApplicationCapability_application_t84H245_G7231AnnexCMode_g723AnnexCAudioMode::H245_G7231AnnexCMode_g723AnnexCAudioModeH245_MulticastAddress_iP6Address::PrintOnH245_ArrayOf_NonStandardParameter::CreateObjectH245_DataApplicationCapability_application_t84::GetDataLengthH245_AudioMode_g7231::CloneNames_H245_RemoteMCResponse_rejectH245_UnicastAddress_iPSourceRouteAddress_routing::CreateObjectNames_H245_ConferenceResponse_makeMeChairResponseH245_V76LogicalChannelParameters_mode::H245_V76LogicalChannelParameters_modeH245_G7231AnnexCMode_g723AnnexCAudioMode::EncodeH245_MulticastAddress_iPAddress::EncodeH245_MultilinkIndication_excessiveError::H245_MultilinkIndication_excessiveErrorH245_NetworkAccessParameters_networkAddress::CloneH245_ArrayOf_PictureReference::CreateObjectH245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters::H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParametersH245_AudioCapability_g7231::PrintOnH245_RefPictureSelection_additionalPictureMemory::CompareH245_ConferenceResponse_extensionAddressResponse::H245_ConferenceResponse_extensionAddressResponseNames_H245_UnicastAddress_iPSourceRouteAddress_routingH245_CloseLogicalChannel_reason::CreateObjectNames_H245_V76LogicalChannelParameters_suspendResumeH245_CustomPictureFormat_pixelAspectInformation::CreateObjectNames_H245_H223AnnexCArqParameters_numberOfRetransmissionsH245_IS11172AudioMode_audioSampling::CloneH245_H223AL3MParameters_arqType::H245_H223AL3MParameters_arqTypeH245_MaintenanceLoopRequest_type::H245_MaintenanceLoopRequest_typeH245_MultilinkResponse_maximumHeaderInterval::DecodeH245_H223Capability_h223MultiplexTableCapability_enhanced::EncodeH245_UnicastAddress_iPXAddress::GetDataLengthH245_MulticastAddress_iPAddress::H245_MulticastAddress_iPAddressH245_ArrayOf_PictureReference::CloneH245_CustomPictureFormat_mPI_customPCF_subtype::H245_CustomPictureFormat_mPI_customPCF_subtypeNames_H245_AudioMode_g7231H245_MulticastAddress_iP6Address::CloneH245_MobileMultilinkReconfigurationCommand_status::CreateObjectH245_FECData_rfc2733_pktMode_rfc2733sameport::EncodeH245_MultilinkRequest_removeConnection::DecodeH245_H235Media_mediaType::CloneH245_FECData_rfc2733_pktMode_rfc2733sameport::GetDataLengthNames_H245_IS11172AudioMode_multichannelTypeH245_ArrayOf_RequestMultiplexEntryRejectionDescriptions::operator []H245_RequestMultiplexEntryRejectionDescriptions &Names_H245_FECData_rfc2733_pktModeH245_UnicastAddress_iPXAddress::H245_UnicastAddress_iPXAddressH245_OpenLogicalChannelAck_forwardMultiplexAckParameters::H245_OpenLogicalChannelAck_forwardMultiplexAckParametersH245_UserInputIndication_encryptedAlphanumeric::EncodeH245_FECCapability_rfc2733Format::CloneH245_UnicastAddress_iPXAddress::PrintOnH245_ArrayOf_RedundancyEncodingDTModeElement::CloneH245_UserInputIndication_signalUpdate_rtp::EncodeH245_MultilinkIndication_excessiveError::CompareH245_MultilinkRequest_addConnection::H245_MultilinkRequest_addConnectionNames_H245_MultilinkResponse_addConnection_responseCodeH245_MiscellaneousCommand_type_videoFastUpdateGOB::H245_MiscellaneousCommand_type_videoFastUpdateGOBH245_UnicastAddress_iPAddress::CloneNames_H245_FunctionNotSupported_causeD:\openh323\src\h245_3.cxxH245_QOSDescriptor::CloneH245_CommunicationModeCommand::DecodeH245_NewATMVCIndication::PrintOnH245_FlowControlCommand::EncodeH245_NewATMVCCommand::PrintOnH245_ConferenceResponse_conferenceIDResponse::EncodeH245_MasterSlaveDeterminationReject::H245_MasterSlaveDeterminationRejectH245_ConferenceResponse_conferenceIDResponse::PrintOnH245_RedundancyEncodingCapability::EncodeH245_RTPH263VideoRedundancyEncoding::PrintOnH245_BEnhancementParameters::EncodeH245_DepFECMode_rfc2733Mode::CompareH245_TerminalCapabilitySetAck::H245_TerminalCapabilitySetAckH245_ConferenceRequest_requestTerminalCertificate::CompareH245_MultiplePayloadStream::PrintOnH245_MultiplexEntrySend::CloneH245_H2250ModeParameters::DecodeH245_TerminalCapabilitySetReject::DecodeH245_ConferenceResponse_passwordResponse::EncodeH245_RSVPParameters::DecodeH245_UserInputIndication_extendedAlphanumeric::CloneH245_FlowControlCommand::H245_FlowControlCommandH245_H263Options::CloneH245_TransportCapability::CompareH245_ExtendedVideoCapability::DecodeH245_IS11172AudioMode::CompareH245_MediaDistributionCapability::GetDataLengthH245_QOSCapability::EncodeH245_CapabilityTableEntry::EncodeH245_RTPPayloadType::DecodeH245_MediaPacketizationCapability::EncodeH245_VCCapability::PrintOnH245_RedundancyEncodingDTMode::H245_RedundancyEncodingDTModeH245_CustomPictureFormat::DecodeH245_RTPH263VideoRedundancyFrameMapping::CloneH245_NewATMVCIndication_aal_aal1::H245_NewATMVCIndication_aal_aal1H245_VCCapability_availableBitRates::GetDataLengthH245_OpenLogicalChannelAck_reverseLogicalChannelParameters::PrintOnH245_FECCapability::DecodeH245_MultilinkResponse_addConnection_responseCode_rejected::CreateObjectH245_H263VideoMode::CompareH245_H223ModeParameters::EncodeH245_MultiplexEntrySendAck::CompareH245_H223AL2MParameters::CompareH245_FECData_rfc2733_pktMode_rfc2733diffport::CloneH245_RequestMultiplexEntry::CloneH245_GenericMessage::GetDataLengthH245_MultiplexElement::CloneH245_ModeElement::GetDataLengthH245_V76LogicalChannelParameters::CompareH245_EncryptionAuthenticationAndIntegrity::H245_EncryptionAuthenticationAndIntegrityH245_IS11172AudioMode::GetDataLengthH245_FECMode::CompareH245_SendTerminalCapabilitySet_specificRequest::DecodeH245_DepFECData_rfc2733_mode_separateStream_samePort::DecodeH245_DataMode_application_t38fax::CompareH245_EncryptionCommand_encryptionAlgorithmID::GetDataLengthH245_MaintenanceLoopAck::CloneH245_V76LogicalChannelParameters_mode_eRM::PrintOnH245_NetworkAccessParameters::GetDataLengthH245_EncryptionCommand_encryptionAlgorithmID::CompareH245_RequestMultiplexEntryRelease::CloneH245_H223AL1MParameters::EncodeH245_H2250LogicalChannelAckParameters::DecodeH245_LogicalChannelRateReject::PrintOnH245_MultiplePayloadStreamMode::DecodeH245_FECData_rfc2733::EncodeH245_V76Capability::PrintOnH245_DepFECMode_rfc2733Mode_mode_separateStream_samePort::DecodeH245_FunctionNotSupported::CompareH245_FECMode::CloneH245_TerminalLabel::CompareH245_V76HDLCParameters::GetDataLengthH245_MultiplexEntryRejectionDescriptions::PrintOnH245_OpenLogicalChannel::GetDataLengthH245_TerminalCapabilitySetReject::GetDataLengthH245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort::H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPortH245_ExtendedVideoCapability::CloneH245_RedundancyEncodingCapability::CloneH245_OpenLogicalChannelAck::CloneH245_H223AnnexCArqParameters::CloneH245_EncryptionCommand_encryptionAlgorithmID::EncodeH245_CustomPictureFormat_mPI::H245_CustomPictureFormat_mPIH245_V76HDLCParameters::PrintOnH245_OpenLogicalChannelAck::CompareH245_MiscellaneousCommand::GetDataLengthH245_BEnhancementParameters::CompareH245_OpenLogicalChannel::CompareH245_DepFECData_rfc2733::DecodeH245_MultiplexElement::CompareH245_T38FaxUdpOptions::DecodeH245_RedundancyEncoding::PrintOnH245_CommunicationModeCommand::PrintOnH245_MultiplexEntrySend::H245_MultiplexEntrySendH245_FunctionNotSupported::CloneH245_DepFECData_rfc2733::H245_DepFECData_rfc2733H245_TerminalCapabilitySet::GetDataLengthH245_H2250LogicalChannelParameters::EncodeNames_H245_NewATMVCIndication_aal_aal1_clockRecoveryH245_MiscellaneousIndication::H245_MiscellaneousIndicationH245_TransportCapability::H245_TransportCapabilityH245_ModeElement::CloneH245_CommunicationModeCommand::CloneH245_MobileMultilinkReconfigurationCommand::H245_MobileMultilinkReconfigurationCommandH245_MaintenanceLoopReject::CloneH245_RequestChannelCloseReject::EncodeH245_MultilinkResponse_addConnection_responseCode_rejected::CloneH245_RequestAllTerminalIDsResponse::H245_RequestAllTerminalIDsResponseH245_MaintenanceLoopReject::H245_MaintenanceLoopRejectH245_RequestMultiplexEntryReject::CompareH245_H2250LogicalChannelParameters::GetDataLengthH245_LogicalChannelRateReject::CloneH245_GenericMessage::CloneH245_FECData_rfc2733_pktMode_rfc2733diffport::GetDataLengthH245_NewATMVCCommand_aal_aal1_clockRecovery::CloneH245_ConferenceResponse_mCTerminalIDResponse::DecodeH245_RequestMode::PrintOnH245_MultiplePayloadStreamCapability::GetDataLengthH245_H2250LogicalChannelAckParameters::H245_H2250LogicalChannelAckParametersH245_NewATMVCCommand_aal_aal1_errorCorrection::CloneH245_ConferenceResponse_mCTerminalIDResponse::CloneH245_MaintenanceLoopRequest::CompareH245_MultiplexEntryDescriptor::H245_MultiplexEntryDescriptorH245_DialingInformationNumber::GetDataLengthH245_MaintenanceLoopReject::DecodeH245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort::EncodeH245_RequestAllTerminalIDsResponse::CompareH245_DataApplicationCapability_application_t38fax::H245_DataApplicationCapability_application_t38faxH245_MiscellaneousCommand_type_encryptionUpdateCommand::GetDataLengthH245_ConferenceRequest_requestTerminalCertificate::H245_ConferenceRequest_requestTerminalCertificateH245_H223ModeParameters::CompareH245_DepFECData_rfc2733_mode_separateStream_differentPort::CloneH245_JitterIndication::GetDataLengthH245_RequestMultiplexEntry::H245_RequestMultiplexEntryH245_H235Mode::CompareH245_SendTerminalCapabilitySet_specificRequest::PrintOnH245_MobileMultilinkReconfigurationCommand::PrintOnH245_ServicePriorityValue::GetDataLengthH245_H223ModeParameters::H245_H223ModeParametersH245_GenericCapability::CompareH245_H222Capability::CompareH245_NewATMVCIndication_reverseParameters::GetDataLengthH245_RequestMultiplexEntryAck::PrintOnH245_ServicePriorityValue::EncodeH245_NewATMVCCommand_reverseParameters::H245_NewATMVCCommand_reverseParametersH245_RequestModeReject::CloneH245_NewATMVCIndication::GetDataLengthH245_H263VideoCapability::DecodeH245_MultiplexEntrySend::CompareH245_UserInputIndication_signalUpdate::CloneH245_OpenLogicalChannel_forwardLogicalChannelParameters::CloneH245_H223AL2MParameters::H245_H223AL2MParametersH245_EnhancementOptions::H245_EnhancementOptionsH245_NewATMVCIndication::CloneH245_T38FaxProfile::H245_T38FaxProfileH245_NewATMVCIndication_reverseParameters::DecodeH245_VCCapability_availableBitRates::PrintOnH245_MultiplexEntryRejectionDescriptions::EncodeH245_FlowControlIndication::H245_FlowControlIndicationH245_ConferenceRequest_requestTerminalCertificate::GetDataLengthH245_MultiplexEntryRejectionDescriptions::H245_MultiplexEntryRejectionDescriptionsH245_MediaDistributionCapability::H245_MediaDistributionCapabilityH245_V76Capability::H245_V76CapabilityH245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort::CompareH245_MultiplePayloadStreamMode::H245_MultiplePayloadStreamModeH245_RTPH263VideoRedundancyEncoding::CloneH245_ConferenceResponse_passwordResponse::CloneH245_MobileMultilinkReconfigurationCommand::CloneH245_GenericTransportParameters::CloneH245_ConferenceResponse_chairTokenOwnerResponse::CompareH245_MultiplexEntrySend::DecodeH245_VCCapability_aal1ViaGateway::EncodeH245_GenericCapability::H245_GenericCapabilityH245_V76Capability::DecodeH245_BEnhancementParameters::H245_BEnhancementParametersH245_UserInputIndication_signalUpdate::CompareH245_RedundancyEncoding_rtpRedundancyEncoding::CompareH245_V76LogicalChannelParameters_mode_eRM::DecodeH245_H223AL3MParameters::H245_H223AL3MParametersH245_NewATMVCIndication_reverseParameters::CloneH245_RequestChannelCloseReject::CloneH245_OpenLogicalChannelConfirm::H245_OpenLogicalChannelConfirmH245_MaintenanceLoopRequest::DecodeH245_CustomPictureFormat::PrintOnH245_MultiplexedStreamCapability::GetDataLengthH245_TerminalCapabilitySetReject::CloneH245_H222Capability::GetDataLengthH245_GenericMessage::CompareH245_RedundancyEncodingDTModeElement::PrintOnH245_TerminalCapabilitySetRelease::DecodeH245_NewATMVCCommand_aal_aal1_errorCorrection::H245_NewATMVCCommand_aal_aal1_errorCorrectionH245_RSVPParameters::CompareH245_MultilinkResponse_addConnection::EncodeH245_H2250LogicalChannelParameters::PrintOnH245_MasterSlaveDeterminationReject::PrintOnH245_DataApplicationCapability::PrintOnH245_UserInputIndication_extendedAlphanumeric::DecodeH245_H223AnnexCArqParameters::CompareH245_H235Media::EncodeH245_FECCapability::GetDataLengthH245_CloseLogicalChannel::GetDataLengthH245_RedundancyEncodingMode::H245_RedundancyEncodingModeH245_RedundancyEncodingDTModeElement::EncodeH245_H223AL1MParameters::CompareH245_MultiplexedStreamCapability::PrintOnH245_H223AL1MParameters::CloneH245_DepFECMode_rfc2733Mode::EncodeH245_MultiplexEntrySendReject::DecodeH245_RedundancyEncodingCapability::GetDataLengthH245_JitterIndication::PrintOnH245_H223AL3MParameters::CloneH245_RequestMultiplexEntry::DecodeH245_H235Mode::CloneH245_MediaPacketizationCapability::PrintOnH245_ServicePriorityValue::CloneH245_NewATMVCIndication_aal_aal1::PrintOnH245_RefPictureSelection_enhancedReferencePicSelect::GetDataLengthH245_V76LogicalChannelParameters::CloneH245_H235Media::PrintOnH245_LogicalChannelRateReject::GetDataLengthH245_H223LogicalChannelParameters::CloneH245_EncryptionAuthenticationAndIntegrity::DecodeH245_ConferenceResponse_terminalCertificateResponse::CloneH245_VCCapability::H245_VCCapabilityH245_MiscellaneousCommand::DecodeH245_RTPH263VideoRedundancyFrameMapping::CompareH245_RedundancyEncoding_rtpRedundancyEncoding::GetDataLengthH245_AuthorizationParameters::GetDataLengthH245_V76LogicalChannelParameters::EncodeH245_H263VideoModeCombos::PrintOnH245_ConferenceRequest_requestTerminalCertificate::EncodeH245_CloseLogicalChannel::CompareH245_MultiplexEntrySendRelease::CloneH245_AuthenticationCapability::CompareH245_V76LogicalChannelParameters_mode_eRM::H245_V76LogicalChannelParameters_mode_eRMH245_MediaPacketizationCapability::GetDataLengthH245_MediaDistributionCapability::EncodeH245_FECData_rfc2733_pktMode_rfc2733diffport::PrintOnH245_TerminalInformation::GetDataLengthH245_RedundancyEncodingDTMode::PrintOnH245_ConferenceResponse_chairTokenOwnerResponse::GetDataLengthH245_RequestChannelClose::CloneH245_MultiplePayloadStreamCapability::EncodeH245_TerminalCapabilitySetAck::GetDataLengthH245_H262VideoMode::CloneH245_OpenLogicalChannel_reverseLogicalChannelParameters::EncodeH245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCountH245_RedundancyEncoding::H245_RedundancyEncodingH245_IS13818AudioMode::CompareH245_DataApplicationCapability_application_t38fax::DecodeH245_MiscellaneousIndication::EncodeH245_RequestMultiplexEntryAck::DecodeH245_RTPPayloadType::PrintOnH245_CommunicationModeCommand::H245_CommunicationModeCommandH245_ConferenceResponse_chairTokenOwnerResponse::EncodeH245_RefPictureSelection::CloneH245_H263ModeComboFlags::PrintOnH245_QOSDescriptor::DecodeH245_MiscellaneousCommand_type_progressiveRefinementStart::GetDataLengthH245_ConferenceResponse_terminalCertificateResponse::H245_ConferenceResponse_terminalCertificateResponseH245_ExtendedVideoCapability::PrintOnH245_RequestModeAck::CloneH245_EnhancementLayerInfo::GetDataLengthH245_H263ModeComboFlags::EncodeH245_MultilinkResponse_addConnection::PrintOnH245_OpenLogicalChannelConfirm::PrintOnH245_H223AnnexCArqParameters::H245_H223AnnexCArqParametersH245_H2250ModeParameters::H245_H2250ModeParametersH245_H2250Capability::EncodeH245_DepFECMode_rfc2733Mode_mode_separateStream_samePort::CloneH245_MultiplexEntrySendAck::GetDataLengthH245_OpenLogicalChannelReject::DecodeH245_EncryptionSync::CompareH245_VCCapability::CloneH245_GenericParameter::CompareH245_DepFECData_rfc2733_mode_separateStream_samePort::H245_DepFECData_rfc2733_mode_separateStream_samePortH245_OpenLogicalChannel::EncodeH245_EncryptionAuthenticationAndIntegrity::CompareH245_OpenLogicalChannelReject::CloneH245_RequestMultiplexEntryAck::GetDataLengthH245_IntegrityCapability::GetDataLengthH245_RTPH263VideoRedundancyEncoding::EncodeH245_FECData_rfc2733_pktMode_rfc2733diffport::DecodeH245_MiscellaneousCommand::PrintOnH245_T38FaxProfile::DecodeH245_NewATMVCCommand_aal_aal1::GetDataLengthH245_QOSCapability::H245_QOSCapabilityH245_MasterSlaveDeterminationReject::CloneH245_CloseLogicalChannel::DecodeH245_RTPPayloadType::GetDataLengthH245_FlowControlCommand::PrintOnH245_LogicalChannelRateReject::DecodeH245_VCCapability::EncodeH245_H223LogicalChannelParameters::DecodeH245_T38FaxProfile::PrintOnH245_ModeElement::CompareH245_RedundancyEncodingDTMode::GetDataLengthH245_G7231AnnexCMode::PrintOnH245_MultiplexEntrySendReject::PrintOnH245_EnhancementOptions::CloneH245_DataMode_application_t38fax::CloneH245_NewATMVCCommand::H245_NewATMVCCommandH245_MultiplexedStreamCapability::CompareH245_DataApplicationCapability::CompareH245_ServicePriorityValue::H245_ServicePriorityValueH245_NewATMVCCommand_aal_aal1_clockRecovery::H245_NewATMVCCommand_aal_aal1_clockRecoveryH245_LogicalChannelRateReject::EncodeH245_DataApplicationCapability::H245_DataApplicationCapabilityH245_H222Capability::PrintOnH245_ConferenceResponse_terminalIDResponse::DecodeH245_DataMode::GetDataLengthH245_QOSDescriptor::H245_QOSDescriptorH245_IS11172AudioMode::EncodeH245_RSVPParameters::CloneH245_MultiplexEntrySendReject::H245_MultiplexEntrySendRejectH245_MaintenanceLoopReject::PrintOnH245_TerminalCapabilitySetRelease::H245_TerminalCapabilitySetReleaseH245_UserInputIndication_signal::DecodeH245_NewATMVCCommand_reverseParameters::DecodeH245_RedundancyEncoding_rtpRedundancyEncoding::PrintOnH245_QOSCapability::CompareH245_RequestChannelCloseReject::H245_RequestChannelCloseRejectH245_H262VideoMode::DecodeH245_DepFECData_rfc2733_mode_separateStream_differentPort::CompareH245_NonStandardMessage::H245_NonStandardMessageH245_RequestModeAck::PrintOnH245_H2250LogicalChannelAckParameters::PrintOnH245_QOSDescriptor::EncodeH245_DepFECMode_rfc2733Mode_mode_separateStream::CloneH245_MultiplexEntryDescriptor::EncodeH245_MasterSlaveDeterminationAck::EncodeH245_OpenLogicalChannelAck::PrintOnH245_OpenLogicalChannelConfirm::CompareH245_DepFECMode_rfc2733Mode::PrintOnH245_FECData_rfc2733::CompareH245_G7231AnnexCMode::DecodeH245_MultipointCapability::PrintOnH245_NetworkAccessParameters::PrintOnH245_CustomPictureFormat_mPI::DecodeH245_MobileMultilinkReconfigurationCommand::EncodeH245_RTPPayloadType::CloneH245_NewATMVCCommand::EncodeH245_CustomPictureFormat::GetDataLengthH245_NewATMVCCommand_aal_aal1::H245_NewATMVCCommand_aal_aal1H245_V76HDLCParameters::DecodeH245_OpenLogicalChannelAck_reverseLogicalChannelParameters::GetDataLengthH245_DataMode::H245_DataModeH245_H223LogicalChannelParameters::PrintOnH245_RequestModeReject::EncodeH245_DepFECData_rfc2733_mode_separateStream_samePort::EncodeH245_NonStandardMessage::DecodeH245_GenericCapability::CloneH245_DepFECData_rfc2733_mode_separateStream_differentPort::H245_DepFECData_rfc2733_mode_separateStream_differentPortH245_GenericMessage::EncodeH245_V76LogicalChannelParameters::DecodeH245_G7231AnnexCCapability::DecodeH245_ConferenceResponse_chairTokenOwnerResponse::CloneH245_H235Mode::EncodeH245_MultilinkRequest_maximumHeaderInterval::CloneH245_Q2931Address::CompareH245_MultiplexedStreamCapability::H245_MultiplexedStreamCapabilityH245_RequestMultiplexEntryRelease::GetDataLengthH245_OpenLogicalChannelConfirm::EncodeH245_RequestChannelCloseReject::GetDataLengthH245_ConferenceResponse_terminalIDResponse::PrintOnH245_RequestMultiplexEntryReject::H245_RequestMultiplexEntryRejectH245_CapabilityDescriptor::CloneH245_MediaDistributionCapability::PrintOnH245_H223AL3MParameters::CompareH245_TerminalCapabilitySetReject::H245_TerminalCapabilitySetRejectH245_TerminalInformation::CloneNames_H245_NewATMVCCommand_aal_aal1_errorCorrectionH245_DepFECCapability_rfc2733::CompareH245_RedundancyEncoding_rtpRedundancyEncoding::CloneH245_Q2931Address::DecodeH245_T38FaxUdpOptions::CompareH245_MediaPacketizationCapability::CompareH245_RedundancyEncoding::GetDataLengthH245_H263Options::PrintOnH245_MultipointCapability::GetDataLengthH245_DataMode::CompareH245_H235SecurityCapability::PrintOnH245_GenericTransportParameters::EncodeH245_DepFECMode_rfc2733Mode::GetDataLengthH245_UnicastAddress_iPSourceRouteAddress::EncodeH245_ConferenceResponse_terminalCertificateResponse::CompareH245_DataMode_application_t38fax::EncodeH245_TerminalCapabilitySet::EncodeH245_EnhancementOptions::CompareH245_MultiplexEntrySendRelease::EncodeH245_EnhancementOptions::EncodeNames_H245_NewATMVCCommand_aal_aal1_clockRecoveryH245_H2250Capability::CompareH245_MaintenanceLoopAck::DecodeH245_RedundancyEncodingDTMode::CompareH245_H223Capability::EncodeH245_RequestMultiplexEntryReject::EncodeH245_RequestMultiplexEntryReject::GetDataLengthH245_ConferenceCapability::DecodeH245_H2250Capability::CloneH245_VCCapability_aal1ViaGateway::CloneH245_ConferenceResponse_terminalCertificateResponse::GetDataLengthH245_RedundancyEncodingDTModeElement::DecodeH245_MultilinkRequest_maximumHeaderInterval::GetDataLengthH245_NetworkAccessParameters::CloneH245_ServicePriority::PrintOnH245_H263Options::GetDataLengthH245_H223Capability::PrintOnH245_IS13818AudioMode::CloneH245_H223AL1MParameters::H245_H223AL1MParametersH245_T38FaxProfile::CloneH245_OpenLogicalChannelAck_reverseLogicalChannelParameters::EncodeH245_EnhancementLayerInfo::CloneH245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCount::H245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCountH245_DepFECMode_rfc2733Mode_mode_separateStream_samePort::GetDataLengthH245_H235Media::CloneH245_RequestMultiplexEntry::GetDataLengthH245_NewATMVCIndication_aal_aal1::EncodeH245_RequestModeReject::PrintOnH245_FlowControlCommand::GetDataLengthH245_MaintenanceLoopRequest::GetDataLengthH245_EncryptionSync::DecodeH245_CommunicationModeTableEntry::DecodeH245_H263VideoMode::EncodeH245_ConferenceRequest_requestTerminalCertificate::PrintOnH245_MasterSlaveDeterminationReject::EncodeH245_CommunicationModeTableEntry::CompareH245_MultiplexEntrySendReject::CloneH245_ConferenceResponse_passwordResponse::CompareH245_RequestMultiplexEntryAck::CloneH245_H262VideoMode::H245_H262VideoModeH245_ConferenceResponse_passwordResponse::GetDataLengthH245_VCCapability_availableBitRates::CloneH245_RequestModeAck::EncodeH245_RequestMultiplexEntry::CompareH245_MultiplePayloadStream::EncodeH245_G7231AnnexCCapability::CompareH245_ConferenceResponse_conferenceIDResponse::H245_ConferenceResponse_conferenceIDResponseH245_ConferenceResponse_terminalCertificateResponse::DecodeH245_G7231AnnexCCapability::CloneH245_TerminalCapabilitySet::CloneH245_FlowControlIndication::CompareH245_FECMode::PrintOnH245_EnhancementLayerInfo::EncodeH245_RSVPParameters::H245_RSVPParametersH245_RequestMultiplexEntryRejectionDescriptions::GetDataLengthH245_FunctionNotSupported::DecodeH245_CloseLogicalChannel::CloneH245_NewATMVCIndication::EncodeH245_RequestModeReject::GetDataLengthH245_DepFECCapability_rfc2733::GetDataLengthH245_RefPictureSelection_enhancedReferencePicSelect::CloneH245_RedundancyEncodingMode::PrintOnH245_H2250LogicalChannelParameters::CloneH245_MaintenanceLoopRequest::H245_MaintenanceLoopRequestH245_TransportCapability::DecodeH245_MultilinkRequest_maximumHeaderInterval::H245_MultilinkRequest_maximumHeaderIntervalH245_VCCapability_availableBitRates::DecodeH245_GenericCapability::EncodeH245_ServicePriority::EncodeH245_MasterSlaveDeterminationAck::CompareH245_DepFECData_rfc2733_mode_separateStream_differentPort::EncodeH245_IS11172AudioMode::H245_IS11172AudioModeH245_IntegrityCapability::EncodeH245_DataApplicationCapability::GetDataLengthH245_H235Media::GetDataLengthH245_UnicastAddress_iPSourceRouteAddress::CompareH245_H261VideoMode::EncodeH245_RefPictureSelection_enhancedReferencePicSelect::H245_RefPictureSelection_enhancedReferencePicSelectH245_MediaDistributionCapability::CloneH245_NewATMVCCommand_reverseParameters::PrintOnH245_OpenLogicalChannelReject::PrintOnH245_H222Capability::DecodeH245_H223AL2MParameters::DecodeH245_H263VideoMode::CloneH245_H263VideoModeCombos::DecodeH245_UserInputIndication_extendedAlphanumeric::GetDataLengthH245_ConferenceCapability::PrintOnH245_TerminalLabel::EncodeH245_RTPH263VideoRedundancyFrameMapping::GetDataLengthH245_FlowControlIndication::EncodeH245_MultiplexEntrySend::GetDataLengthH245_FunctionNotSupported::GetDataLengthH245_RequestMultiplexEntryRejectionDescriptions::PrintOnH245_GenericTransportParameters::PrintOnH245_H235Media::CompareH245_AuthenticationCapability::EncodeH245_DepFECData_rfc2733_mode_separateStream_samePort::CompareH245_DataApplicationCapability::EncodeH245_OpenLogicalChannelAck_reverseLogicalChannelParameters::H245_OpenLogicalChannelAck_reverseLogicalChannelParametersH245_MultiplexEntrySendRelease::CompareH245_OpenLogicalChannelAck::GetDataLengthH245_RedundancyEncodingCapability::PrintOnH245_MultiplexEntryRejectionDescriptions::CompareH245_DepFECMode_rfc2733Mode_mode_separateStream_samePort::H245_DepFECMode_rfc2733Mode_mode_separateStream_samePortH245_TerminalLabel::CloneH245_RTPH263VideoRedundancyFrameMapping::EncodeH245_TerminalCapabilitySetRelease::CloneH245_FECData_rfc2733_pktMode_rfc2733diffport::H245_FECData_rfc2733_pktMode_rfc2733diffportH245_MaintenanceLoopAck::CompareH245_FECMode::EncodeH245_OpenLogicalChannelAck::EncodeH245_MultilinkResponse_addConnection::GetDataLengthH245_DepFECMode_rfc2733Mode::H245_DepFECMode_rfc2733ModeH245_RTPH263VideoRedundancyEncoding::GetDataLengthH245_H235SecurityCapability::EncodeH245_NetworkAccessParameters::EncodeH245_NonStandardParameter::DecodeH245_H2250ModeParameters::CompareH245_H223AL3MParameters::DecodeH245_SendTerminalCapabilitySet_specificRequest::CloneH245_RequestAllTerminalIDsResponse::EncodeH245_DepFECCapability_rfc2733::DecodeH245_H235SecurityCapability::H245_H235SecurityCapabilityH245_RTPPayloadType::H245_RTPPayloadTypeH245_RequestMultiplexEntryRelease::CompareH245_OpenLogicalChannel_reverseLogicalChannelParameters::CompareH245_GenericCapability::GetDataLengthH245_ModeElement::EncodeH245_LogicalChannelRateReject::CompareH245_RequestChannelCloseReject::PrintOnH245_AuthorizationParameters::DecodeH245_UserInputIndication_extendedAlphanumeric::CompareH245_TerminalInformation::EncodeH245_Q2931Address::CloneH245_TransportCapability::GetDataLengthH245_MobileMultilinkReconfigurationCommand::CompareH245_MultipointCapability::H245_MultipointCapabilityH245_CapabilityDescriptor::CompareH245_AuthorizationParameters::PrintOnH245_TerminalCapabilitySetAck::CloneH245_CapabilityDescriptor::GetDataLengthH245_DepFECData_rfc2733_mode_separateStream_differentPort::GetDataLengthH245_ConferenceResponse_mCTerminalIDResponse::GetDataLengthH245_JitterIndication::CloneH245_MultiplexedStreamCapability::DecodeH245_MultilinkRequest_maximumHeaderInterval::CompareH245_VCCapability_aal1ViaGateway::H245_VCCapability_aal1ViaGatewayH245_IS13818AudioMode::DecodeH245_RedundancyEncoding::DecodeH245_H261VideoMode::CompareH245_RequestMultiplexEntryAck::H245_RequestMultiplexEntryAckH245_CapabilityTableEntry::GetDataLengthH245_H263VideoCapability::CompareH245_TerminalInformation::PrintOnH245_NetworkAccessParameters::H245_NetworkAccessParametersH245_H223AL3MParameters::GetDataLengthH245_ConferenceResponse_conferenceIDResponse::GetDataLengthH245_BEnhancementParameters::PrintOnH245_RedundancyEncodingDTMode::EncodeH245_UnicastAddress_iPSourceRouteAddress::H245_UnicastAddress_iPSourceRouteAddressH245_DialingInformationNumber::EncodeH245_CustomPictureFormat::CloneH245_VCCapability_aal1ViaGateway::GetDataLengthH245_NewATMVCCommand_reverseParameters::CloneH245_RTPH263VideoRedundancyFrameMapping::H245_RTPH263VideoRedundancyFrameMappingH245_NewATMVCIndication_reverseParameters::PrintOnH245_MultiplePayloadStreamMode::GetDataLengthH245_IntegrityCapability::CloneH245_NewATMVCCommand_aal_aal1::CloneH245_RefPictureSelection::EncodeH245_JitterIndication::DecodeH245_TerminalLabel::GetDataLengthH245_RequestMultiplexEntry::EncodeH245_MultiplexEntrySendAck::PrintOnH245_DepFECCapability_rfc2733::CloneH245_UserInputIndication_signalUpdate::DecodeH245_RedundancyEncoding_rtpRedundancyEncoding::EncodeH245_MultiplexEntrySendAck::H245_MultiplexEntrySendAckH245_MultiplexElement::GetDataLengthH245_GenericParameter::CloneH245_ConferenceResponse_mCTerminalIDResponse::CompareH245_MultiplexEntrySendAck::CloneH245_RequestChannelClose::EncodeH245_MultiplexElement::DecodeH245_OpenLogicalChannel_reverseLogicalChannelParameters::H245_OpenLogicalChannel_reverseLogicalChannelParametersH245_RedundancyEncodingMode::EncodeH245_MultilinkRequest_maximumHeaderInterval::DecodeH245_OpenLogicalChannel_reverseLogicalChannelParameters::CloneH245_RefPictureSelection_enhancedReferencePicSelect::EncodeH245_H262VideoMode::PrintOnH245_MultiplexEntrySendAck::DecodeH245_FECCapability::PrintOnH245_MiscellaneousCommand_type_progressiveRefinementStart::CompareH245_H263VideoMode::PrintOnH245_CapabilityTableEntry::PrintOnH245_H223AnnexCArqParameters::EncodeH245_MultipointCapability::EncodeH245_MultiplePayloadStreamMode::PrintOnH245_MultiplexEntrySendRelease::H245_MultiplexEntrySendReleaseH245_RSVPParameters::PrintOnH245_VCCapability_availableBitRates::CompareH245_AuthenticationCapability::GetDataLengthH245_MaintenanceLoopRequest::PrintOnH245_H261VideoMode::H245_H261VideoModeH245_CapabilityTableEntry::DecodeH245_H263Options::DecodeH245_DepFECData_rfc2733::PrintOnH245_RTPPayloadType::EncodeH245_TerminalCapabilitySetAck::EncodeH245_NewATMVCCommand_aal_aal1::EncodeH245_ConferenceResponse_terminalIDResponse::H245_ConferenceResponse_terminalIDResponseH245_VCCapability_availableBitRates::H245_VCCapability_availableBitRatesH245_SendTerminalCapabilitySet_specificRequest::GetDataLengthH245_RefPictureSelection_enhancedReferencePicSelect::PrintOnH245_G7231AnnexCMode::CloneH245_UserInputIndication_signalUpdate::H245_UserInputIndication_signalUpdateH245_FlowControlCommand::CloneH245_RequestChannelCloseReject::DecodeH245_H2250Capability::DecodeH245_ConferenceResponse_mCTerminalIDResponse::EncodeH245_EncryptionAuthenticationAndIntegrity::GetDataLengthH245_RequestMultiplexEntryReject::CloneH245_TerminalCapabilitySetRelease::PrintOnH245_H235Mode::PrintOnH245_FECData_rfc2733::CloneH245_H263ModeComboFlags::DecodeH245_RTPH263VideoRedundancyEncoding::H245_RTPH263VideoRedundancyEncodingH245_EncryptionCommand_encryptionAlgorithmID::H245_EncryptionCommand_encryptionAlgorithmIDH245_NewATMVCCommand_aal_aal1::DecodeH245_H2250LogicalChannelAckParameters::EncodeH245_RedundancyEncodingCapability::H245_RedundancyEncodingCapabilityH245_MultiplexElement::PrintOnH245_MaintenanceLoopReject::EncodeH245_GenericParameter::EncodeH245_H223LogicalChannelParameters::CompareH245_MasterSlaveDeterminationReject::CompareH245_ExtendedVideoCapability::H245_ExtendedVideoCapabilityH245_ServicePriority::H245_ServicePriorityNames_H245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCountH245_MultilinkResponse_addConnection_responseCode_rejected::H245_MultilinkResponse_addConnection_responseCode_rejectedH245_V76LogicalChannelParameters_mode_eRM::GetDataLengthH245_RefPictureSelection::PrintOnH245_MultiplePayloadStreamCapability::PrintOnH245_RedundancyEncodingCapability::DecodeH245_RedundancyEncodingDTMode::DecodeH245_CustomPictureFormat::CompareH245_MiscellaneousCommand_type_progressiveRefinementStart::EncodeH245_GenericMessage::PrintOnH245_CustomPictureFormat_mPI::CloneH245_H2250LogicalChannelParameters::CompareH245_MiscellaneousCommand::CompareH245_IS13818AudioMode::H245_IS13818AudioModeH245_MiscellaneousCommand_type_encryptionUpdateCommand::CompareH245_DepFECData_rfc2733_mode_separateStream_samePort::GetDataLengthH245_MiscellaneousCommand_type_progressiveRefinementStart::CloneH245_MultiplexEntryRejectionDescriptions::CloneH245_MultiplexEntrySendRelease::GetDataLengthH245_DepFECData_rfc2733_mode_separateStream_samePort::PrintOnH245_H263VideoModeCombos::H245_H263VideoModeCombosH245_H223AnnexCArqParameters::PrintOnH245_BEnhancementParameters::DecodeH245_MaintenanceLoopAck::PrintOnH245_CustomPictureFormat::EncodeH245_MaintenanceLoopAck::H245_MaintenanceLoopAckH245_H2250LogicalChannelParameters::DecodeH245_H2250ModeParameters::CloneH245_MiscellaneousCommand::H245_MiscellaneousCommandH245_CustomPictureFormat::H245_CustomPictureFormatH245_FECMode::GetDataLengthH245_MediaDistributionCapability::DecodeH245_IS11172AudioMode::CloneH245_MultiplexElement::H245_MultiplexElementH245_NewATMVCCommand_reverseParameters::CompareH245_RequestMultiplexEntryRelease::PrintOnH245_OpenLogicalChannelConfirm::GetDataLengthH245_DepFECData_rfc2733::GetDataLengthH245_ConferenceResponse_passwordResponse::DecodeH245_DepFECCapability_rfc2733::H245_DepFECCapability_rfc2733H245_DataMode::PrintOnH245_RedundancyEncodingMode::GetDataLengthH245_NonStandardMessage::GetDataLengthH245_RSVPParameters::EncodeH245_OpenLogicalChannel_reverseLogicalChannelParameters::DecodeH245_ConferenceCapability::GetDataLengthH245_RequestModeAck::H245_RequestModeAckH245_MultilinkResponse_addConnection::CompareH245_MiscellaneousCommand_type_encryptionUpdateCommand::CloneH245_FlowControlIndication::DecodeH245_H2250LogicalChannelAckParameters::CloneH245_NonStandardMessage::CompareH245_CloseLogicalChannel::PrintOnH245_FlowControlCommand::CompareH245_Q2931Address::EncodeH245_IS13818AudioMode::PrintOnH245_MultiplexEntryRejectionDescriptions::GetDataLengthH245_SendTerminalCapabilitySet_specificRequest::EncodeH245_MasterSlaveDeterminationAck::PrintOnH245_RequestChannelClose::PrintOnH245_H223AL1MParameters::DecodeH245_EncryptionCommand_encryptionAlgorithmID::DecodeH245_OpenLogicalChannel_forwardLogicalChannelParameters::EncodeH245_ExtendedVideoCapability::CompareH245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort::PrintOnH245_DialingInformationNumber::PrintOnH245_JitterIndication::H245_JitterIndicationH245_CapabilityDescriptor::PrintOnH245_MultilinkRequest_maximumHeaderInterval::PrintOnH245_MiscellaneousIndication::CompareH245_MediaPacketizationCapability::DecodeH245_H2250ModeParameters::EncodeH245_ConferenceRequest_requestTerminalCertificate::DecodeH245_MultiplePayloadStreamCapability::H245_MultiplePayloadStreamCapabilityH245_FlowControlCommand::DecodeH245_MaintenanceLoopRequest::EncodeH245_CapabilityTableEntry::CompareH245_DepFECData_rfc2733_mode_separateStream_differentPort::DecodeH245_H235SecurityCapability::CloneH245_OpenLogicalChannel_reverseLogicalChannelParameters::GetDataLengthH245_DepFECData_rfc2733::EncodeH245_DepFECData_rfc2733::CompareH245_EncryptionSync::PrintOnH245_MiscellaneousCommand_type_encryptionUpdateCommand::EncodeH245_TerminalInformation::H245_TerminalInformationH245_RequestMultiplexEntryRelease::EncodeH245_ConferenceResponse_conferenceIDResponse::CloneH245_FECData_rfc2733::GetDataLengthH245_RequestAllTerminalIDsResponse::DecodeH245_CommunicationModeCommand::EncodeH245_BEnhancementParameters::GetDataLengthH245_MultiplePayloadStream::CloneH245_H263ModeComboFlags::CompareH245_V76LogicalChannelParameters_mode_eRM::CloneH245_NewATMVCIndication_reverseParameters::CompareH245_ServicePriorityValue::CompareH245_V76Capability::CloneH245_H2250Capability::GetDataLengthH245_CustomPictureFormat_mPI::PrintOnH245_BEnhancementParameters::CloneH245_ConferenceResponse_mCTerminalIDResponse::PrintOnH245_RedundancyEncodingMode::CompareH245_ServicePriorityValue::DecodeH245_CommunicationModeTableEntry::H245_CommunicationModeTableEntryH245_ConferenceCapability::CloneH245_H223Capability::GetDataLengthH245_DataApplicationCapability::DecodeH245_QOSCapability::DecodeH245_RedundancyEncodingDTMode::CloneH245_MultiplePayloadStream::CompareH245_GenericParameter::PrintOnH245_RequestMode::CloneH245_UnicastAddress_iPSourceRouteAddress::CloneH245_RTPH263VideoRedundancyFrameMapping::PrintOnH245_TransportCapability::PrintOnH245_DataApplicationCapability_application_t38fax::EncodeH245_OpenLogicalChannelReject::EncodeH245_H223Capability::CompareH245_UserInputIndication_extendedAlphanumeric::H245_UserInputIndication_extendedAlphanumericH245_MultiplePayloadStream::H245_MultiplePayloadStreamH245_GenericInformation::CloneH245_T38FaxUdpOptions::CloneH245_MultiplexEntrySendReject::GetDataLengthH245_CapabilityDescriptor::EncodeH245_TerminalCapabilitySet::CompareH245_V76LogicalChannelParameters::PrintOnH245_VCCapability_aal1ViaGateway::PrintOnH245_MiscellaneousCommand_type_encryptionUpdateCommand::H245_MiscellaneousCommand_type_encryptionUpdateCommandH245_ModeElement::PrintOnH245_RedundancyEncodingDTModeElement::H245_RedundancyEncodingDTModeElementH245_V76HDLCParameters::CompareH245_EncryptionCommand_encryptionAlgorithmID::CloneH245_V76HDLCParameters::CloneH245_T38FaxUdpOptions::GetDataLengthH245_H235Media::DecodeH245_MiscellaneousCommand_type_progressiveRefinementStart::H245_MiscellaneousCommand_type_progressiveRefinementStartH245_ConferenceResponse_conferenceIDResponse::CompareH245_T38FaxProfile::GetDataLengthH245_NonStandardParameter::GetDataLengthH245_FECData_rfc2733::H245_FECData_rfc2733H245_EncryptionAuthenticationAndIntegrity::CloneH245_T38FaxProfile::EncodeH245_NonStandardParameter::CompareH245_H263VideoCapability::EncodeH245_EncryptionSync::H245_EncryptionSyncH245_H2250ModeParameters::GetDataLengthH245_DepFECMode_rfc2733Mode::DecodeH245_T38FaxUdpOptions::EncodeH245_TerminalCapabilitySetAck::PrintOnH245_MultiplexEntryRejectionDescriptions::DecodeH245_NewATMVCCommand_aal_aal1::PrintOnH245_DepFECMode_rfc2733Mode::CloneH245_EncryptionSync::CloneH245_H2250LogicalChannelParameters::H245_H2250LogicalChannelParametersH245_MultilinkResponse_addConnection::CloneH245_ConferenceResponse_conferenceIDResponse::DecodeH245_ConferenceResponse_terminalCertificateResponse::EncodeH245_CloseLogicalChannel::EncodeH245_H223AL2MParameters::PrintOnH245_EncryptionSync::GetDataLengthH245_QOSDescriptor::GetDataLengthH245_VCCapability_aal1ViaGateway::DecodeH245_CommunicationModeTableEntry::GetDataLengthH245_OpenLogicalChannel_forwardLogicalChannelParameters::CompareH245_NewATMVCIndication_aal_aal1_errorCorrection::H245_NewATMVCIndication_aal_aal1_errorCorrectionH245_DataApplicationCapability_application_t38fax::CompareH245_H262VideoMode::CompareH245_MasterSlaveDeterminationAck::CloneH245_LogicalChannelRateReject::H245_LogicalChannelRateRejectH245_RequestMultiplexEntryRejectionDescriptions::DecodeH245_GenericMessage::H245_GenericMessageH245_NewATMVCIndication::H245_NewATMVCIndicationH245_DataApplicationCapability::CloneH245_VCCapability::CompareH245_RequestMultiplexEntryRejectionDescriptions::H245_RequestMultiplexEntryRejectionDescriptionsH245_V76LogicalChannelParameters_mode_eRM::EncodeH245_QOSDescriptor::PrintOnH245_ConferenceResponse_terminalIDResponse::CloneH245_G7231AnnexCMode::EncodeH245_MiscellaneousIndication::DecodeH245_IntegrityCapability::PrintOnH245_T38FaxUdpOptions::H245_T38FaxUdpOptionsH245_ConferenceResponse_chairTokenOwnerResponse::DecodeH245_TerminalLabel::PrintOnH245_ExtendedVideoCapability::EncodeH245_RTPH263VideoRedundancyEncoding::CompareH245_DepFECMode_rfc2733Mode_mode_separateStream_samePort::PrintOnH245_H263VideoCapability::H245_H263VideoCapabilityH245_OpenLogicalChannel::PrintOnH245_H261VideoMode::GetDataLengthH245_AuthorizationParameters::H245_AuthorizationParametersH245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort::CloneH245_RequestAllTerminalIDsResponse::PrintOnH245_MobileMultilinkReconfigurationCommand::DecodeH245_NonStandardMessage::EncodeH245_EnhancementLayerInfo::PrintOnH245_UserInputIndication_signal::CloneH245_NewATMVCIndication_aal_aal1_errorCorrection::CreateObjectH245_OpenLogicalChannel::DecodeH245_EncryptionCommand_encryptionAlgorithmID::PrintOnH245_ServicePriority::CompareH245_H263VideoMode::H245_H263VideoModeH245_MultiplexEntrySendReject::EncodeH245_TerminalCapabilitySetReject::EncodeH245_DataApplicationCapability_application_t38fax::GetDataLengthH245_MultipointCapability::CloneH245_CommunicationModeCommand::CompareH245_OpenLogicalChannelAck::DecodeH245_EncryptionAuthenticationAndIntegrity::EncodeH245_EnhancementOptions::PrintOnH245_RTPH263VideoRedundancyEncoding::DecodeH245_H235SecurityCapability::GetDataLengthH245_NewATMVCIndication_aal_aal1_clockRecovery::CreateObjectH245_FECData_rfc2733::DecodeH245_OpenLogicalChannel_forwardLogicalChannelParameters::H245_OpenLogicalChannel_forwardLogicalChannelParametersH245_H223LogicalChannelParameters::GetDataLengthH245_H261VideoMode::CloneH245_RequestMode::CompareH245_NonStandardMessage::CloneH245_V76Capability::GetDataLengthH245_MiscellaneousCommand::CloneH245_ConferenceCapability::H245_ConferenceCapabilityH245_QOSCapability::PrintOnH245_MediaPacketizationCapability::H245_MediaPacketizationCapabilityH245_OpenLogicalChannelAck::H245_OpenLogicalChannelAckH245_ConferenceResponse_chairTokenOwnerResponse::PrintOnH245_ExtendedVideoCapability::GetDataLengthH245_DataMode::CloneH245_MiscellaneousCommand::EncodeH245_MasterSlaveDeterminationReject::GetDataLengthH245_OpenLogicalChannelAck_reverseLogicalChannelParameters::CompareH245_H223LogicalChannelParameters::EncodeH245_TerminalCapabilitySetReject::CompareH245_NonStandardParameter::CloneH245_FECData_rfc2733_pktMode_rfc2733diffport::EncodeH245_RedundancyEncoding::CloneH245_UserInputIndication_signal::CompareH245_JitterIndication::CompareH245_MultiplePayloadStreamCapability::DecodeH245_NewATMVCIndication_reverseParameters::EncodeH245_NewATMVCIndication_reverseParameters::H245_NewATMVCIndication_reverseParametersH245_MultiplexEntryDescriptor::PrintOnH245_ConferenceResponse_terminalIDResponse::EncodeH245_SendTerminalCapabilitySet_specificRequest::CompareH245_NewATMVCIndication_aal_aal1::GetDataLengthH245_RedundancyEncodingDTModeElement::CompareH245_RequestMultiplexEntryAck::EncodeH245_OpenLogicalChannel::CloneH245_H223AL2MParameters::CloneH245_H223LogicalChannelParameters::H245_H223LogicalChannelParametersH245_Q2931Address::H245_Q2931AddressH245_V76Capability::EncodeH245_RequestModeAck::GetDataLengthH245_DataMode::EncodeH245_FECCapability::EncodeH245_TerminalCapabilitySetRelease::EncodeH245_AuthorizationParameters::CloneH245_RequestMode::EncodeH245_MultiplexEntrySendRelease::DecodeH245_RequestMultiplexEntryAck::CompareH245_EnhancementOptions::GetDataLengthH245_ConferenceRequest_requestTerminalCertificate::CloneH245_CapabilityDescriptor::H245_CapabilityDescriptorH245_NonStandardParameter::EncodeH245_RequestModeReject::DecodeH245_MediaPacketizationCapability::CloneH245_H235SecurityCapability::CompareH245_RequestMode::GetDataLengthH245_TerminalCapabilitySet::PrintOnH245_NewATMVCCommand_aal_aal1::CompareH245_FlowControlIndication::GetDataLengthH245_NewATMVCCommand::DecodeH245_VCCapability_aal1ViaGateway::CompareH245_NewATMVCCommand_reverseParameters::GetDataLengthH245_RequestMultiplexEntryRejectionDescriptions::CompareH245_OpenLogicalChannelConfirm::DecodeH245_GenericParameter::H245_GenericParameterNames_H245_NewATMVCIndication_aal_aal1_errorCorrectionH245_UserInputIndication_extendedAlphanumeric::EncodeH245_H263VideoMode::DecodeH245_UserInputIndication_extendedAlphanumeric::PrintOnH245_QOSDescriptor::CompareH245_SendTerminalCapabilitySet_specificRequest::H245_SendTerminalCapabilitySet_specificRequestH245_CustomPictureFormat_mPI::EncodeH245_MasterSlaveDeterminationAck::DecodeH245_ConferenceCapability::CompareH245_NonStandardParameter::PrintOnH245_CustomPictureFormat_mPI::CompareH245_MultiplePayloadStream::GetDataLengthH245_ConferenceResponse_mCTerminalIDResponse::H245_ConferenceResponse_mCTerminalIDResponseNames_H245_MultilinkResponse_addConnection_responseCode_rejectedH245_MultiplexEntrySendRelease::PrintOnH245_RedundancyEncodingCapability::CompareH245_NewATMVCIndication_aal_aal1::CloneH245_RequestChannelClose::CompareH245_IntegrityCapability::CompareH245_OpenLogicalChannelReject::CompareH245_UserInputIndication_signal::EncodeH245_MasterSlaveDeterminationAck::H245_MasterSlaveDeterminationAckH245_IS11172AudioMode::DecodeH245_RequestChannelCloseReject::CompareH245_H263VideoCapability::CloneH245_RedundancyEncoding::EncodeH245_FECCapability::CloneH245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort::GetDataLengthH245_H223AnnexCArqParameters::GetDataLengthH245_OpenLogicalChannel_forwardLogicalChannelParameters::PrintOnH245_MultiplexEntryDescriptor::CloneH245_MaintenanceLoopAck::GetDataLengthH245_H2250ModeParameters::PrintOnH245_H235Media::H245_H235MediaH245_MiscellaneousCommand_type_progressiveRefinementStart::DecodeH245_FlowControlIndication::CloneH245_Q2931Address::GetDataLengthH245_GenericMessage::DecodeH245_RequestMultiplexEntryReject::DecodeH245_H223AL1MParameters::GetDataLengthH245_RTPPayloadType::CompareH245_QOSCapability::CloneH245_MasterSlaveDeterminationReject::DecodeH245_ServicePriority::GetDataLengthH245_ConferenceCapability::EncodeH245_AuthorizationParameters::CompareH245_AuthenticationCapability::CloneH245_MultilinkResponse_addConnection::DecodeH245_V76HDLCParameters::EncodeH245_ConferenceResponse_passwordResponse::H245_ConferenceResponse_passwordResponseH245_OpenLogicalChannelReject::GetDataLengthH245_NetworkAccessParameters::DecodeH245_H261VideoMode::PrintOnH245_T38FaxProfile::CompareH245_RefPictureSelection::H245_RefPictureSelectionH245_NewATMVCIndication_aal_aal1::CompareH245_RedundancyEncoding_rtpRedundancyEncoding::H245_RedundancyEncoding_rtpRedundancyEncodingH245_TerminalInformation::CompareH245_AuthenticationCapability::PrintOnH245_FECData_rfc2733_pktMode_rfc2733diffport::CompareH245_H263VideoModeCombos::CompareH245_RequestMultiplexEntryRejectionDescriptions::CloneH245_FECCapability::CompareH245_RequestModeAck::DecodeH245_CommunicationModeTableEntry::EncodeH245_RequestModeReject::H245_RequestModeRejectH245_EncryptionSync::EncodeH245_MultiplePayloadStreamMode::CompareH245_G7231AnnexCCapability::GetDataLengthH245_MiscellaneousIndication::CloneH245_NewATMVCIndication_aal_aal1::DecodeH245_RedundancyEncodingDTModeElement::GetDataLengthH245_RequestMode::DecodeH245_UserInputIndication_signal::H245_UserInputIndication_signalH245_V76HDLCParameters::H245_V76HDLCParametersH245_ModeElement::H245_ModeElementH245_RefPictureSelection::CompareH245_ConferenceResponse_terminalIDResponse::GetDataLengthH245_EnhancementLayerInfo::DecodeH245_H223AL2MParameters::GetDataLengthH245_TerminalLabel::H245_TerminalLabelH245_RedundancyEncodingMode::CloneH245_MultiplePayloadStream::DecodeH245_MultiplexEntryDescriptor::CompareH245_MultiplexedStreamCapability::EncodeH245_NewATMVCCommand_aal_aal1_errorCorrection::CreateObjectH245_ModeElement::DecodeH245_CommunicationModeTableEntry::CloneH245_H235Mode::H245_H235ModeH245_H263VideoCapability::GetDataLengthH245_GenericCapability::PrintOnH245_DepFECMode_rfc2733Mode_mode_separateStream::H245_DepFECMode_rfc2733Mode_mode_separateStreamH245_CapabilityDescriptor::DecodeH245_NewATMVCCommand::CompareH245_DataMode::DecodeH245_GenericTransportParameters::CompareH245_NewATMVCCommand_aal_aal1_clockRecovery::CreateObjectH245_VCCapability::GetDataLengthH245_MultiplexEntrySend::EncodeH245_NewATMVCIndication_aal_aal1_clockRecovery::CloneH245_TerminalCapabilitySet::DecodeH245_V76LogicalChannelParameters::GetDataLengthH245_DepFECMode_rfc2733Mode_mode_separateStream::CreateObjectH245_RequestAllTerminalIDsResponse::CloneH245_H223Capability::DecodeH245_MiscellaneousCommand_type_progressiveRefinementStart::PrintOnH245_VCCapability_availableBitRates::EncodeH245_DataMode_application_t38fax::DecodeH245_OpenLogicalChannelConfirm::CloneH245_GenericTransportParameters::H245_GenericTransportParametersH245_OpenLogicalChannel_reverseLogicalChannelParameters::PrintOnH245_H263VideoCapability::PrintOnH245_EncryptionAuthenticationAndIntegrity::PrintOnH245_H222Capability::H245_H222CapabilityH245_EnhancementLayerInfo::CompareH245_RefPictureSelection::DecodeH245_EnhancementOptions::DecodeH245_H223ModeParameters::CloneH245_MultiplexEntryDescriptor::GetDataLengthH245_NewATMVCCommand_reverseParameters::EncodeH245_GenericParameter::GetDataLengthH245_MultiplexEntryDescriptor::DecodeH245_ServicePriority::DecodeH245_MiscellaneousIndication::GetDataLengthH245_RefPictureSelection_enhancedReferencePicSelect::CompareH245_CapabilityTableEntry::H245_CapabilityTableEntryH245_MultiplexEntrySendReject::CompareH245_MiscellaneousCommand_type_encryptionUpdateCommand::DecodeH245_UserInputIndication_signalUpdate::EncodeH245_H263VideoModeCombos::EncodeH245_RTPH263VideoRedundancyFrameMapping::DecodeH245_IS11172AudioMode::PrintOnH245_UnicastAddress_iPSourceRouteAddress::PrintOnH245_RedundancyEncodingDTModeElement::CloneH245_OpenLogicalChannel::H245_OpenLogicalChannelH245_UnicastAddress_iPSourceRouteAddress::GetDataLengthH245_IS13818AudioMode::GetDataLengthH245_H2250LogicalChannelAckParameters::CompareH245_OpenLogicalChannel_forwardLogicalChannelParameters::GetDataLengthH245_IntegrityCapability::H245_IntegrityCapabilityH245_G7231AnnexCCapability::H245_G7231AnnexCCapabilityH245_MaintenanceLoopReject::CompareH245_FECMode::H245_FECModeH245_FunctionNotSupported::EncodeH245_UserInputIndication_signal::PrintOnH245_RequestChannelClose::DecodeH245_NewATMVCIndication::CompareH245_MiscellaneousCommand_type_encryptionUpdateCommand::PrintOnH245_RequestMultiplexEntryRejectionDescriptions::EncodeH245_TerminalCapabilitySetReject::PrintOnH245_RequestMultiplexEntryRelease::DecodeH245_RequestChannelClose::GetDataLengthH245_MultiplePayloadStreamMode::CloneH245_MultilinkRequest_maximumHeaderInterval::EncodeH245_CapabilityTableEntry::CloneH245_MultiplexedStreamCapability::CloneH245_MultiplePayloadStreamCapability::CloneH245_RequestAllTerminalIDsResponse::GetDataLengthH245_RequestMultiplexEntryRelease::H245_RequestMultiplexEntryReleaseH245_FECData_rfc2733::PrintOnH245_TerminalInformation::DecodeH245_TerminalCapabilitySetRelease::GetDataLengthH245_IntegrityCapability::DecodeH245_H263VideoModeCombos::CloneH245_G7231AnnexCMode::GetDataLengthH245_NewATMVCIndication_aal_aal1_clockRecovery::H245_NewATMVCIndication_aal_aal1_clockRecoveryH245_DataMode_application_t38fax::H245_DataMode_application_t38faxH245_UnicastAddress_iPSourceRouteAddress::DecodeH245_RequestMode::H245_RequestModeH245_H223AL1MParameters::PrintOnH245_Q2931Address::PrintOnH245_ConferenceResponse_terminalIDResponse::CompareH245_MultiplePayloadStreamCapability::CompareH245_H263Options::CompareH245_OpenLogicalChannelAck_reverseLogicalChannelParameters::CloneH245_RSVPParameters::GetDataLengthH245_MultilinkResponse_addConnection::H245_MultilinkResponse_addConnectionH245_AuthenticationCapability::H245_AuthenticationCapabilityH245_TransportCapability::CloneH245_IS13818AudioMode::EncodeH245_OpenLogicalChannelReject::H245_OpenLogicalChannelRejectH245_MasterSlaveDeterminationAck::GetDataLengthH245_DepFECData_rfc2733_mode_separateStream_samePort::CloneH245_DataMode_application_t38fax::GetDataLengthH245_V76LogicalChannelParameters_mode_eRM::CompareH245_H263ModeComboFlags::GetDataLengthH245_GenericTransportParameters::DecodeH245_OpenLogicalChannel_forwardLogicalChannelParameters::DecodeH245_DepFECMode_rfc2733Mode_mode_separateStream_samePort::CompareH245_GenericCapability::DecodeH245_DepFECCapability_rfc2733::PrintOnH245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort::DecodeNames_H245_DepFECMode_rfc2733Mode_mode_separateStreamH245_ConferenceResponse_terminalCertificateResponse::PrintOnH245_DialingInformationNumber::H245_DialingInformationNumberH245_TerminalLabel::DecodeH245_MaintenanceLoopAck::EncodeH245_MediaDistributionCapability::CompareH245_V76Capability::CompareH245_H263ModeComboFlags::H245_H263ModeComboFlagsH245_FunctionNotSupported::PrintOnH245_QOSCapability::GetDataLengthH245_DataMode_application_t38fax::PrintOnH245_NewATMVCCommand::GetDataLengthH245_H223AL3MParameters::PrintOnH245_GenericInformation::H245_GenericInformationH245_ConferenceResponse_passwordResponse::PrintOnH245_DialingInformationNumber::DecodeH245_OpenLogicalChannelAck_reverseLogicalChannelParameters::DecodeH245_RedundancyEncoding_rtpRedundancyEncoding::DecodeH245_DataApplicationCapability_application_t38fax::PrintOnH245_H2250LogicalChannelAckParameters::GetDataLengthH245_RedundancyEncoding::CompareH245_RequestModeAck::CompareH245_MultiplePayloadStreamMode::EncodeH245_MultiplexElement::EncodeH245_G7231AnnexCCapability::EncodeH245_H263Options::H245_H263OptionsH245_RequestMultiplexEntryReject::PrintOnH245_H223AL3MParameters::EncodeH245_H223AnnexCArqParameters::DecodeH245_V76LogicalChannelParameters::H245_V76LogicalChannelParametersH245_NewATMVCIndication_aal_aal1_errorCorrection::CloneH245_NonStandardMessage::PrintOnH245_DepFECMode_rfc2733Mode_mode_separateStream_samePort::EncodeH245_H2250Capability::PrintOnH245_UserInputIndication_signal::GetDataLengthH245_AuthorizationParameters::EncodeH245_CommunicationModeCommand::GetDataLengthH245_MultiplexEntrySendAck::EncodeH245_H223Capability::CloneH245_H263VideoMode::GetDataLengthH245_DialingInformationNumber::CompareH245_CustomPictureFormat_mPI::GetDataLengthH245_H223ModeParameters::DecodeH245_ServicePriority::CloneH245_DataApplicationCapability_application_t38fax::CloneH245_MiscellaneousIndication::PrintOnH245_MaintenanceLoopReject::GetDataLengthH245_CommunicationModeTableEntry::PrintOnH245_MultipointCapability::DecodeH245_TerminalCapabilitySetAck::DecodeH245_DepFECCapability_rfc2733::EncodeH245_H263Options::EncodeH245_NetworkAccessParameters::CompareH245_RefPictureSelection_enhancedReferencePicSelect::DecodeH245_H261VideoMode::DecodeH245_TerminalCapabilitySetAck::CompareH245_H263VideoModeCombos::GetDataLengthH245_H223Capability::H245_H223CapabilityH245_VCCapability::DecodeH245_GenericTransportParameters::GetDataLengthH245_RequestModeReject::CompareH245_FECCapability::H245_FECCapabilityH245_NonStandardParameter::H245_NonStandardParameterH245_EnhancementLayerInfo::H245_EnhancementLayerInfoH245_DepFECData_rfc2733_mode_separateStream_differentPort::PrintOnH245_FunctionNotSupported::H245_FunctionNotSupportedH245_TransportCapability::EncodeH245_H222Capability::CloneH245_G7231AnnexCMode::H245_G7231AnnexCModeH245_MultipointCapability::CompareH245_NewATMVCCommand::CloneH245_H223ModeParameters::GetDataLengthH245_H262VideoMode::EncodeH245_H223AL2MParameters::EncodeH245_G7231AnnexCCapability::PrintOnH245_UserInputIndication_signalUpdate::PrintOnH245_MobileMultilinkReconfigurationCommand::GetDataLengthH245_RequestMultiplexEntry::PrintOnH245_FlowControlIndication::PrintOnH245_H235SecurityCapability::DecodeH245_DialingInformationNumber::CloneH245_RequestChannelClose::H245_RequestChannelCloseH245_H2250Capability::H245_H2250CapabilityH245_H262VideoMode::GetDataLengthH245_FECMode::DecodeH245_H235Mode::GetDataLengthH245_CloseLogicalChannel::H245_CloseLogicalChannelH245_H222Capability::EncodeH245_G7231AnnexCMode::CompareH245_MultiplexEntrySend::PrintOnH245_AuthenticationCapability::DecodeH245_RefPictureSelection::GetDataLengthH245_H235Mode::DecodeH245_RedundancyEncodingMode::DecodeH245_GenericParameter::DecodeH245_DepFECData_rfc2733::CloneH245_UserInputIndication_signalUpdate::GetDataLengthH245_ConferenceResponse_chairTokenOwnerResponse::H245_ConferenceResponse_chairTokenOwnerResponseH245_TerminalCapabilitySet::H245_TerminalCapabilitySetH245_NewATMVCIndication::DecodeH245_JitterIndication::EncodeH245_ServicePriorityValue::PrintOnH245_T38FaxUdpOptions::PrintOnH245_MaintenanceLoopRequest::CloneH245_H223ModeParameters::PrintOnH245_H263ModeComboFlags::CloneD:\openh323\src\h248.cxx"h248.h"H248_TransactionRequest::H248_TransactionRequestH248_TransactionAck::EncodeH248_SeqSigList::DecodeH248_EventSpec::H248_EventSpecH248_CommandRequest::H248_CommandRequestH248_ModemType::H248_ModemTypeH248_Command::CreateObjectH248_SecondRequestedEvent::GetDataLengthH248_SeqSigList::H248_SeqSigListH248_IndAudMediaDescriptor_streams::H248_IndAudMediaDescriptor_streamsH248_ArrayOf_CommandReply::operator []H248_CommandReply &H248_ArrayOf_ModemType::CloneH248_SubtractRequest::GetDataLengthH248_NonStandardIdentifier::H248_NonStandardIdentifierH248_IndAudDigitMapDescriptor::DecodeH248_ArrayOf_TerminationID::CreateObjectH248_DomainName::PrintOnH248_DigitMapDescriptor::GetDataLengthH248_IndAudEventsDescriptor::PrintOnH248_ArrayOf_ObservedEvent::CloneH248_NotifyCompletion::CloneH248_PackagesDescriptor::operator []H248_PackagesItem &H248_ActionReply::GetDataLengthH248_IndAudStreamParms::H248_IndAudStreamParmsH248_PackagesItem::EncodeNames_H248_Message_messageBodyH248_ArrayOf_Signal::H248_ArrayOf_SignalH248_MuxDescriptor::PrintOnH248_ObservedEvent::CloneH248_IP6Address::CompareH248_AuthenticationHeader::DecodeH248_RequestedEvent::CompareH248_PackagesDescriptor::CreateObjectH248_LocalControlDescriptor::CompareH248_IndAudMediaDescriptor::CompareH248_IndAudLocalControlDescriptor::PrintOnH248_ErrorDescriptor::DecodeH248_ArrayOf_SecondRequestedEvent::H248_ArrayOf_SecondRequestedEventH248_SigParameter::PrintOnNames_H248_RelationH248_H221NonStandard::EncodeH248_NotifyCompletion::H248_NotifyCompletionH248_RequestedActions::CompareH248_CommandReply::CreateObjectH248_NotifyRequest::PrintOnH248_IndAudStatisticsDescriptor::EncodeH248_TransactionReply::PrintOnH248_ArrayOf_CommandReply::CreateObjectH248_ErrorCode::operator =H248_ErrorCode &H248_MediaDescriptor_streams::CloneH248_TopologyRequest_topologyDirection::CloneH248_ActionRequest::CloneH248_StatisticsParameter::EncodeH248_SignalsDescriptor::CloneH248_MegacoMessage::CompareH248_TransactionPending::DecodeH248_AuditRequest::DecodeH248_IndAudTerminationStateDescriptor::DecodeH248_PkgdName::H248_PkgdNameH248_AmmRequest::EncodeH248_TransactionReply::GetDataLengthH248_IndAudSignal::PrintOnH248_ContextAttrAuditRequest::DecodeH248_Message::CompareH248_DigitMapDescriptor::PrintOnH248_StreamParms::GetDataLengthH248_Value::CreateObjectH248_IndAudDigitMapDescriptor::CompareH248_ServiceChangeResult::CreateObjectH248_SecurityParmIndex::CloneH248_ServiceChangeResParm::GetDataLengthH248_IndAudPropertyGroup::H248_IndAudPropertyGroupH248_TransactionPending::H248_TransactionPendingH248_IndAudStreamParms::CompareH248_ServiceChangeResParm::EncodeH248_DigitMapValue::CompareH248_StreamID::H248_StreamIDH248_MId::CreateObjectH248_EventsDescriptor::EncodeH248_ArrayOf_SecondRequestedEvent::operator []H248_SecondRequestedEvent &H248_ServiceChangeAddress::CreateObjectH248_IndAudPropertyGroup::CreateObjectH248_ModemDescriptor::EncodeH248_SequenceNum::operator =H248_SequenceNum &H248_EventBufferDescriptor::operator []H248_EventSpec &H248_NotifyReply::PrintOnH248_ObservedEvent::PrintOnH248_EventParameter_extraInfo::H248_EventParameter_extraInfoH248_TransactionReply::CloneH248_RequestID::H248_RequestIDH248_EventBufferDescriptor::H248_EventBufferDescriptorH248_Message::DecodeH248_AuthenticationHeader::GetDataLengthH248_ObservedEventsDescriptor::PrintOnH248_ArrayOf_TopologyRequest::CreateObjectH248_TransactionResponseAck::operator []H248_TransactionAck &H248_ArrayOf_Signal::CloneH248_Relation::operator =H248_Relation &H248_PathName::operator =H248_PathName &H248_StreamParms::DecodeH248_ModemDescriptor::PrintOnH248_ActionRequest::PrintOnH248_TerminationID::CloneH248_IndAudPackagesDescriptor::PrintOnH248_ServiceChangeProfile::GetDataLengthNames_H248_IndAudSignalsDescriptorH248_ArrayOf_Signal::operator []H248_Signal &H248_EventBufferDescriptor::CreateObjectH248_TopologyRequest::DecodeH248_LocalRemoteDescriptor::PrintOnH248_EventSpec::EncodeH248_H221NonStandard::CompareH248_Signal::EncodeH248_ServiceChangeReply::GetDataLengthH248_IP6Address::H248_IP6AddressNames_H248_TransactionReply_transactionResultH248_IndAudDigitMapDescriptor::CloneH248_StreamMode::CloneH248_StreamDescriptor::CompareH248_IndAudSignal::H248_IndAudSignalH248_AuditRequest::CompareH248_LocalRemoteDescriptor::GetDataLengthH248_Transaction::CreateObjectH248_AuditResult::PrintOnH248_SignalsDescriptor::H248_SignalsDescriptorH248_IndAudTerminationStateDescriptor::CloneH248_MegacoMessage::DecodeH248_AuditDescriptor::CompareH248_TransactionPending::CompareH248_NonStandardData::DecodeH248_TerminationIDList::CloneH248_TransactionRequest::DecodeH248_ArrayOf_ActionReply::CloneH248_IndAudPropertyParm::PrintOnH248_TransactionReply::H248_TransactionReplyH248_ContextAttrAuditRequest::GetDataLengthH248_PathName::CloneH248_AuditRequest::GetDataLengthNames_H248_EventDMH248_MId::H248_MIdH248_IP4Address::DecodeH248_SigParameter::DecodeH248_SubtractRequest::PrintOnH248_ErrorDescriptor::PrintOnH248_DigitMapName::H248_DigitMapNameNames_H248_SignalRequestH248_TerminationID::PrintOnH248_ErrorDescriptor::GetDataLengthH248_ArrayOf_ActionRequest::operator []H248_ActionRequest &H248_IndAudStreamDescriptor::GetDataLengthH248_RequestedActions::H248_RequestedActionsH248_IP6Address::GetDataLengthH248_IndAudSeqSigList::PrintOnH248_SecondRequestedEvent::EncodeH248_IndAudEventBufferDescriptor::CloneH248_MId::CloneH248_ServiceChangeRequest::DecodeH248_AmmRequest::CompareH248_ArrayOf_CommandReply::CloneH248_ServiceChangeResult::CloneH248_ArrayOf_WildcardField::H248_ArrayOf_WildcardFieldH248_ServiceChangeRequest::CompareH248_H221NonStandard::GetDataLengthH248_PropertyGroup::CreateObjectH248_MuxDescriptor::CloneH248_Value::operator []H248_AuditReply::H248_AuditReplyH248_EventParameter::DecodeH248_AuthData::CloneH248_ServiceChangeParm::PrintOnH248_TimeNotation::EncodeH248_ServiceChangeReply::H248_ServiceChangeReplyH248_ArrayOf_IndAuditParameter::CloneH248_IndAudStatisticsDescriptor::CompareH248_TransactionAck::GetDataLengthH248_RequestedEvent::GetDataLengthH248_TransactionAck::H248_TransactionAckH248_EventSpec::CloneH248_RequestedActions::DecodeH248_PropertyParm::EncodeH248_AuditDescriptor::DecodeH248_ArrayOf_SigParameter::CloneH248_ErrorDescriptor::H248_ErrorDescriptorH248_TerminationStateDescriptor::PrintOnH248_SecondRequestedEvent::PrintOnNames_H248_ServiceChangeAddressH248_AmmsReply::CloneH248_IndAudEventBufferDescriptor::EncodeNames_H248_AuditReturnParameterH248_EventBufferDescriptor::CloneH248_ObservedEventsDescriptor::DecodeH248_MuxType::operator =H248_MuxType &H248_ServiceChangeAddress::H248_ServiceChangeAddressH248_IndAudEventsDescriptor::DecodeH248_MegacoMessage::CloneH248_SignalsDescriptor::CreateObjectH248_ServiceState::H248_ServiceStateH248_ArrayOf_SecondRequestedEvent::CreateObjectH248_IndAudPropertyParm::H248_IndAudPropertyParmH248_ContextRequest::CompareH248_IndAudSignal::EncodeH248_ServiceChangeAddress::CloneH248_IndAudStreamParms::EncodeH248_IndAudPackagesDescriptor::CompareH248_ArrayOf_CommandRequest::H248_ArrayOf_CommandRequestH248_IP6Address::DecodeH248_PackagesItem::CompareH248_ArrayOf_ModemType::H248_ArrayOf_ModemTypeH248_Command::H248_CommandH248_IndAudEventBufferDescriptor::H248_IndAudEventBufferDescriptorH248_SubtractRequest::EncodeH248_AuthenticationHeader::PrintOnH248_AmmRequest::CloneNames_H248_PropertyParm_extraInfoH248_TimeNotation::CloneH248_StreamDescriptor::DecodeH248_ArrayOf_SecondRequestedEvent::CloneH248_ServiceChangeResult::H248_ServiceChangeResultH248_IndAudLocalRemoteDescriptor::CompareH248_ArrayOf_PropertyParm::operator []H248_PropertyParm &Names_H248_ServiceStateH248_PropertyParm::PrintOnH248_AmmsReply::PrintOnH248_DigitMapValue::H248_DigitMapValueH248_MegacoMessage::H248_MegacoMessageH248_SeqSigList::PrintOnH248_ArrayOf_EventParameter::CloneH248_AuditReturnParameter::CreateObjectH248_IndAudStatisticsDescriptor::CloneH248_TerminationIDList::CreateObjectH248_AuditRequest::CloneH248_NonStandardData::GetDataLengthH248_AuditDescriptor::CloneH248_ServiceState::operator =H248_ServiceState &H248_StreamParms::CompareNames_H248_IndAuditParameterH248_IndAudStreamDescriptor::PrintOnH248_AuditResult::EncodeH248_SigParameter_extraInfo::CloneH248_SecondRequestedActions::H248_SecondRequestedActionsH248_ArrayOf_EventParameter::CreateObjectH248_Command::CloneH248_ArrayOf_AmmDescriptor::CreateObjectH248_IndAudTerminationStateDescriptor::GetDataLengthH248_ServiceChangeParm::DecodeH248_ServiceChangeResParm::CompareH248_PackagesItem::H248_PackagesItemH248_IP4Address::EncodeH248_IndAudEventBufferDescriptor::CompareH248_ArrayOf_Transaction::CreateObjectH248_ArrayOf_RequestedEvent::CloneNames_H248_EventParameter_extraInfoH248_ErrorText::operator =H248_ErrorText &H248_ObservedEvent::DecodeH248_AuditRequest::H248_AuditRequestH248_SecondRequestedActions::DecodeH248_ModemDescriptor::H248_ModemDescriptorH248_EventDM::CloneH248_IndAudTerminationStateDescriptor::PrintOnH248_DigitMapDescriptor::DecodeH248_TerminationID::EncodeH248_SigParameter::H248_SigParameterH248_ArrayOf_StreamDescriptor::CloneH248_ArrayOf_IndAudStreamDescriptor::CreateObjectH248_IP4Address::GetDataLengthH248_ServiceChangeParm::GetDataLengthH248_ActionRequest::EncodeH248_SecondEventsDescriptor::PrintOnH248_IndAudLocalRemoteDescriptor::H248_IndAudLocalRemoteDescriptorH248_IndAudPropertyParm::DecodeH248_ArrayOf_SigParameter::CreateObjectH248_TransactionRequest::CloneH248_ArrayOf_TopologyRequest::CloneH248_IndAudEventsDescriptor::GetDataLengthH248_ServiceChangeRequest::H248_ServiceChangeRequestH248_CommandRequest::GetDataLengthH248_ActionReply::EncodeH248_SecondRequestedActions::GetDataLengthH248_MuxDescriptor::EncodeH248_AmmRequest::H248_AmmRequestH248_RequestedActions::CloneH248_IndAudMediaDescriptor::EncodeH248_ArrayOf_Transaction::H248_ArrayOf_TransactionH248_ErrorText::H248_ErrorTextH248_IndAudMediaDescriptor::GetDataLengthH248_ModemDescriptor::GetDataLengthH248_ActionReply::H248_ActionReplyNames_H248_CommandH248_IP4Address::CompareH248_LocalRemoteDescriptor::H248_LocalRemoteDescriptorH248_EventName::CloneH248_StatisticsDescriptor::CreateObjectH248_ServiceChangeParm::CloneH248_ArrayOf_RequestedEvent::H248_ArrayOf_RequestedEventH248_ObservedEvent::CompareH248_MuxType::H248_MuxTypeH248_SignalType::CloneH248_IndAudTerminationStateDescriptor::H248_IndAudTerminationStateDescriptorH248_LocalControlDescriptor::CloneH248_MegacoMessage::GetDataLengthH248_ObservedEvent::H248_ObservedEventH248_ActionRequest::H248_ActionRequestH248_ServiceState::CloneH248_ServiceChangeProfile::CompareNames_H248_TransactionH248_LocalControlDescriptor::EncodeH248_ContextRequest::DecodeH248_TransactionRequest::PrintOnH248_TerminationAudit::operator []H248_AuditReturnParameter &H248_SecurityParmIndex::operator =H248_SecurityParmIndex &H248_ArrayOf_TerminationID::CloneH248_TransactionAck::CloneH248_Name::H248_NameNames_H248_MIdH248_MuxDescriptor::GetDataLengthH248_NotifyRequest::GetDataLengthH248_IndAudPackagesDescriptor::DecodeH248_IP6Address::PrintOnH248_SigParameter::CloneH248_AmmDescriptor::H248_AmmDescriptorH248_IndAuditParameter::CloneH248_SecondRequestedEvent::CloneH248_PropertyGroup::operator []H248_DomainName::DecodeH248_TerminationAudit::H248_TerminationAuditH248_AuditReply::CreateObjectH248_Signal::CloneH248_LocalRemoteDescriptor::DecodeH248_IndAudLocalControlDescriptor::DecodeH248_AuthData::H248_AuthDataH248_TransactionReply::DecodeH248_EventDM::CreateObjectH248_SecondEventsDescriptor::H248_SecondEventsDescriptorH248_ArrayOf_PropertyGroup::CreateObjectH248_DomainName::CloneH248_MediaDescriptor::DecodeH248_Signal::H248_SignalH248_SecondRequestedEvent::CompareH248_NotifyRequest::DecodeH248_AuditResult::GetDataLengthH248_EventsDescriptor::PrintOnH248_EventSpec::CompareH248_ServiceChangeResParm::H248_ServiceChangeResParmH248_StreamID::CloneH248_IndAudSeqSigList::EncodeH248_SigParameter::GetDataLengthH248_SignalsDescriptor::operator []H248_SignalRequest &H248_H221NonStandard::CloneNames_H248_ServiceChangeResultH248_ContextAttrAuditRequest::CompareH248_RequestedEvent::PrintOnH248_IndAudStreamParms::GetDataLengthH248_EventParameter_extraInfo::CreateObjectH248_MegacoMessage::EncodeH248_ArrayOf_TopologyRequest::operator []H248_TopologyRequest &H248_IndAudSignalsDescriptor::H248_IndAudSignalsDescriptorH248_ArrayOf_StreamDescriptor::CreateObjectH248_IP6Address::CloneH248_SecurityParmIndex::H248_SecurityParmIndexH248_RequestID::operator =H248_RequestID &Names_H248_StreamModeH248_ArrayOf_ActionReply::operator []H248_ActionReply &H248_LocalControlDescriptor::GetDataLengthH248_ContextRequest::H248_ContextRequestH248_Relation::H248_RelationH248_ModemDescriptor::CompareH248_StreamParms::CloneH248_IndAudStatisticsDescriptor::H248_IndAudStatisticsDescriptorH248_TransactionAck::CompareH248_IndAudStreamDescriptor::EncodeH248_IndAudLocalRemoteDescriptor::CloneH248_ArrayOf_PropertyParm::CreateObjectH248_Value::CloneH248_ArrayOf_StreamDescriptor::H248_ArrayOf_StreamDescriptorH248_MediaDescriptor::CompareH248_ArrayOf_PASN_OctetString::H248_ArrayOf_PASN_OctetStringH248_NonStandardData::H248_NonStandardDataH248_IndAudPropertyParm::GetDataLengthH248_TransactionResponseAck::CreateObjectH248_SigParameter_extraInfo::CreateObjectH248_ServiceChangeMethod::H248_ServiceChangeMethodH248_PropertyParm_extraInfo::CloneH248_Name::CloneH248_TransactionReply::CompareNames_H248_IndAudMediaDescriptor_streamsH248_IndAudSignal::CompareH248_AuditResult::CloneH248_WildcardField::CloneH248_DigitMapDescriptor::H248_DigitMapDescriptorH248_ServiceChangeResParm::CloneH248_SecondEventsDescriptor::CloneH248_ObservedEventsDescriptor::H248_ObservedEventsDescriptorH248_IndAudLocalRemoteDescriptor::EncodeH248_EventParameter_extraInfo::CloneH248_MuxDescriptor::H248_MuxDescriptorH248_ServiceChangeReply::DecodeH248_ModemType::operator =H248_ModemType &H248_ContextID::H248_ContextIDH248_AmmsReply::EncodeH248_StreamParms::H248_StreamParmsH248_Message::CloneH248_DigitMapValue::CloneH248_EventBufferControl::CloneH248_DigitMapValue::EncodeH248_TransactionResponseAck::H248_TransactionResponseAckH248_TerminationStateDescriptor::DecodeH248_RequestedEvent::DecodeH248_PropertyParm_extraInfo::H248_PropertyParm_extraInfoH248_MediaDescriptor_streams::CreateObjectH248_DigitMapValue::PrintOnH248_ObservedEventsDescriptor::CompareH248_IndAudDigitMapDescriptor::GetDataLengthH248_ArrayOf_AmmDescriptor::CloneH248_LocalRemoteDescriptor::CompareH248_DigitMapName::operator =H248_DigitMapName &H248_DigitMapDescriptor::CloneH248_Message::EncodeH248_TimeNotation::PrintOnH248_H221NonStandard::PrintOnH248_MediaDescriptor::CloneH248_EventDM::H248_EventDMH248_LocalControlDescriptor::H248_LocalControlDescriptorH248_ArrayOf_AmmDescriptor::operator []H248_AmmDescriptor &H248_SubtractRequest::CompareH248_IndAudMediaDescriptor_streams::CloneH248_ArrayOf_PropertyGroup::CloneH248_ErrorDescriptor::EncodeH248_ServiceChangeProfile::EncodeH248_IndAuditParameter::H248_IndAuditParameterH248_EventsDescriptor::DecodeH248_IndAudDigitMapDescriptor::EncodeH248_ArrayOf_PASN_OctetString::CreateObjectH248_ArrayOf_IndAudStreamDescriptor::H248_ArrayOf_IndAudStreamDescriptorH248_ServiceChangeProfile::PrintOnH248_Name::operator =H248_Name &H248_AuditResult::CompareNames_H248_SignalTypeH248_IndAudSignalsDescriptor::CreateObjectH248_CommandRequest::EncodeH248_H221NonStandard::DecodeH248_AuditDescriptor::GetDataLengthH248_SequenceNum::H248_SequenceNumH248_IndAudDigitMapDescriptor::H248_IndAudDigitMapDescriptorH248_EventSpec::PrintOnH248_EventsDescriptor::CompareH248_TransactionPending::PrintOnH248_ArrayOf_ActionRequest::H248_ArrayOf_ActionRequestH248_ArrayOf_SigParameter::operator []H248_SigParameter &H248_Relation::CloneH248_TransactionAck::DecodeH248_SecondEventsDescriptor::DecodeNames_H248_AuditReplyH248_SecondRequestedEvent::DecodeH248_TerminationID::CompareH248_ErrorDescriptor::CompareH248_Signal::PrintOnH248_RequestedActions::GetDataLengthH248_ArrayOf_PropertyParm::H248_ArrayOf_PropertyParmH248_TransactionRequest::GetDataLengthH248_SeqSigList::GetDataLengthH248_ModemDescriptor::DecodeH248_ActionReply::CompareNames_H248_AmmDescriptorH248_ArrayOf_PropertyGroup::operator []H248_PropertyGroup &H248_ArrayOf_IndAudPropertyParm::H248_ArrayOf_IndAudPropertyParmH248_StreamID::operator =H248_StreamID &H248_AmmRequest::GetDataLengthH248_TopologyRequest::CompareH248_IndAudSignalsDescriptor::CloneH248_TerminationAudit::CreateObjectH248_IndAudSignal::CloneH248_H221NonStandard::H248_H221NonStandardH248_SignalRequest::CloneH248_CommandReply::H248_CommandReplyH248_AmmRequest::PrintOnH248_ArrayOf_SigParameter::H248_ArrayOf_SigParameterH248_ErrorCode::CloneH248_ServiceChangeRequest::PrintOnH248_TransactionPending::EncodeH248_ArrayOf_CommandRequest::operator []H248_CommandRequest &H248_StatisticsDescriptor::operator []H248_StatisticsParameter &H248_StatisticsParameter::CompareH248_IndAudLocalControlDescriptor::H248_IndAudLocalControlDescriptorH248_ErrorDescriptor::CloneH248_TerminationIDList::operator []H248_TerminationID &H248_ArrayOf_TerminationID::operator []Names_H248_ModemTypeH248_Transaction::H248_TransactionH248_ArrayOf_IndAudPropertyParm::operator []H248_IndAudPropertyParm &H248_StatisticsDescriptor::CloneH248_NotifyReply::DecodeH248_RequestedEvent::H248_RequestedEventH248_StatisticsParameter::DecodeH248_TerminationID::GetDataLengthH248_IndAudTerminationStateDescriptor::EncodeH248_EventsDescriptor::CloneH248_TransactionReply_transactionResult::CloneH248_ContextRequest::CloneH248_PropertyParm::H248_PropertyParmH248_CommandRequest::CloneH248_TerminationAudit::CloneH248_AuditReturnParameter::CloneNames_H248_TopologyRequest_topologyDirectionH248_ErrorCode::H248_ErrorCodeH248_Signal::GetDataLengthH248_SubtractRequest::H248_SubtractRequestH248_TransactionPending::CloneNames_H248_SigParameter_extraInfoH248_PropertyParm::GetDataLengthH248_TransactionId::CloneH248_TransactionId::operator =H248_TransactionId &H248_Message::H248_MessageH248_AuthenticationHeader::CloneH248_ArrayOf_WildcardField::CloneH248_StreamDescriptor::CloneH248_TimeNotation::DecodeH248_ContextRequest::GetDataLengthH248_PkgdName::operator =H248_PkgdName &H248_AmmsReply::CompareH248_RequestedActions::EncodeH248_TransactionAck::PrintOnH248_IndAudLocalRemoteDescriptor::PrintOnH248_ServiceChangeParm::H248_ServiceChangeParmH248_ContextRequest::PrintOnH248_ModemType::CloneH248_IndAudMediaDescriptor::H248_IndAudMediaDescriptorH248_PropertyParm::CloneH248_AmmRequest::DecodeH248_PropertyParm::CompareH248_IndAudEventsDescriptor::H248_IndAudEventsDescriptorH248_PropertyParm_extraInfo::CreateObjectH248_ArrayOf_PropertyParm::CloneH248_MediaDescriptor::H248_MediaDescriptorH248_SeqSigList::CloneH248_ArrayOf_ObservedEvent::CreateObjectH248_ContextAttrAuditRequest::EncodeH248_StreamParms::EncodeH248_IndAudLocalControlDescriptor::CompareH248_ServiceChangeRequest::GetDataLengthH248_NotifyRequest::CompareH248_AuditRequest::EncodeH248_ArrayOf_ActionRequest::CloneNames_H248_EventBufferControlH248_AmmDescriptor::CreateObjectH248_NonStandardData::PrintOnH248_CommandRequest::PrintOnH248_IndAudMediaDescriptor_streams::CreateObjectH248_ServiceChangeRequest::EncodeH248_ArrayOf_Transaction::CloneH248_StreamMode::H248_StreamModeH248_EventName::H248_EventNameH248_ArrayOf_AmmDescriptor::H248_ArrayOf_AmmDescriptorH248_SeqSigList::CompareH248_TopologyRequest::EncodeH248_NonStandardData::EncodeH248_TerminationID::H248_TerminationIDH248_EventSpec::DecodeH248_SubtractRequest::CloneH248_Signal::DecodeH248_IndAudEventBufferDescriptor::GetDataLengthH248_WildcardField::H248_WildcardFieldH248_ArrayOf_Transaction::operator []H248_Transaction &Names_H248_CommandReplyH248_WildcardField::operator =H248_WildcardField &H248_ServiceChangeReply::PrintOnH248_ArrayOf_PropertyGroup::H248_ArrayOf_PropertyGroupH248_IP6Address::EncodeH248_EventParameter::EncodeH248_AuthenticationHeader::EncodeH248_IndAudPropertyParm::CompareH248_PropertyGroup::CloneH248_AmmsReply::DecodeH248_SecondRequestedActions::CompareH248_LocalControlDescriptor::PrintOnH248_PathName::H248_PathNameH248_MegacoMessage::PrintOnH248_StatisticsParameter::GetDataLengthH248_TerminationStateDescriptor::H248_TerminationStateDescriptorH248_IndAudPackagesDescriptor::H248_IndAudPackagesDescriptorH248_IndAudDigitMapDescriptor::PrintOnH248_RequestID::CloneH248_PropertyParm::DecodeH248_DomainName::CompareH248_DigitMapName::CloneH248_EventBufferControl::H248_EventBufferControlH248_EventParameter::PrintOnH248_MuxType::CloneH248_ModemDescriptor::CloneH248_ArrayOf_PASN_OctetString::CloneH248_ArrayOf_CommandRequest::CloneH248_TransactionResponseAck::CloneH248_ArrayOf_EventParameter::operator []H248_EventParameter &H248_TimeNotation::H248_TimeNotationH248_IndAudSeqSigList::CloneH248_RequestedActions::PrintOnH248_IndAudStreamParms::CloneH248_TopologyRequest::CloneH248_ArrayOf_PASN_OctetString::operator []H248_ArrayOf_CommandReply::H248_ArrayOf_CommandReplyH248_StreamDescriptor::GetDataLengthH248_IndAudEventBufferDescriptor::DecodeH248_ContextAttrAuditRequest::CloneH248_ActionRequest::CompareH248_ObservedEvent::GetDataLengthH248_ArrayOf_IndAuditParameter::operator []H248_IndAuditParameter &H248_NonStandardIdentifier::CloneH248_TerminationStateDescriptor::GetDataLengthH248_ArrayOf_IndAudStreamDescriptor::CloneH248_AuditReturnParameter::H248_AuditReturnParameterH248_Message::PrintOnH248_AuditReply::CloneH248_AmmsReply::H248_AmmsReplyH248_ArrayOf_IndAudStreamDescriptor::operator []H248_IndAudStreamDescriptor &H248_ArrayOf_ActionReply::H248_ArrayOf_ActionReplyH248_NotifyReply::CompareH248_PackagesDescriptor::H248_PackagesDescriptorH248_SignalType::H248_SignalTypeH248_IndAudMediaDescriptor::CloneH248_TopologyRequest_topologyDirection::operator =H248_TopologyRequest_topologyDirection &H248_StatisticsDescriptor::H248_StatisticsDescriptorH248_ActionReply::DecodeH248_IndAudPropertyParm::EncodeH248_AuthenticationHeader::H248_AuthenticationHeaderH248_IndAudPackagesDescriptor::CloneH248_StreamMode::operator =H248_StreamMode &H248_SubtractRequest::DecodeH248_ArrayOf_ActionRequest::CreateObjectH248_DomainName::H248_DomainNameH248_IndAudSeqSigList::CompareH248_ArrayOf_CommandRequest::CreateObjectH248_SignalRequest::CreateObjectH248_SignalRequest::H248_SignalRequestH248_ArrayOf_ActionReply::CreateObjectH248_TransactionReply_transactionResult::H248_TransactionReply_transactionResultH248_ActionReply::CloneH248_MediaDescriptor_streams::H248_MediaDescriptor_streamsH248_ContextID::operator =H248_ContextID &H248_ArrayOf_StreamDescriptor::operator []H248_StreamDescriptor &H248_TopologyRequest::PrintOnH248_AuditDescriptor::EncodeH248_CommandReply::CloneH248_PropertyGroup::H248_PropertyGroupH248_ArrayOf_IndAuditParameter::H248_ArrayOf_IndAuditParameterH248_IP4Address::CloneH248_EventsDescriptor::H248_EventsDescriptorH248_IndAudStreamParms::DecodeH248_IndAudLocalRemoteDescriptor::GetDataLengthH248_CommandRequest::CompareH248_ContextAttrAuditRequest::PrintOnH248_TransactionId::H248_TransactionIdH248_StreamDescriptor::PrintOnH248_StatisticsParameter::H248_StatisticsParameterH248_AmmsReply::GetDataLengthH248_ServiceChangeParm::EncodeH248_ArrayOf_Signal::CreateObjectH248_EventParameter::CompareH248_ActionRequest::DecodeH248_IndAudStatisticsDescriptor::GetDataLengthH248_AuditResult::DecodeH248_ContextID::CloneH248_ServiceChangeMethod::operator =H248_ServiceChangeMethod &H248_ServiceChangeReply::CloneH248_NotifyRequest::H248_NotifyRequestH248_ArrayOf_TopologyRequest::H248_ArrayOf_TopologyRequestH248_NotifyReply::GetDataLengthH248_ActionReply::PrintOnH248_TerminationStateDescriptor::CompareH248_TimeNotation::CompareH248_ErrorText::CloneH248_ObservedEventsDescriptor::EncodeH248_IndAudPropertyParm::CloneH248_TransactionRequest::EncodeH248_DomainName::GetDataLengthH248_SigParameter::CompareNames_H248_MuxTypeH248_TransactionReply::EncodeH248_IP4Address::H248_IP4AddressH248_ArrayOf_ObservedEvent::operator []H248_ObservedEvent &H248_IndAudStatisticsDescriptor::PrintOnH248_ArrayOf_ObservedEvent::H248_ArrayOf_ObservedEventH248_ArrayOf_IndAuditParameter::CreateObjectH248_AmmDescriptor::CloneH248_Message::GetDataLengthH248_IndAudTerminationStateDescriptor::CompareH248_Signal::CompareH248_EventParameter::H248_EventParameterH248_MediaDescriptor::PrintOnH248_IndAudLocalControlDescriptor::CloneH248_IndAudEventsDescriptor::CloneH248_IndAuditParameter::CreateObjectH248_ServiceChangeProfile::H248_ServiceChangeProfileH248_SignalType::operator =H248_SignalType &H248_IndAudSeqSigList::GetDataLengthH248_SigParameter::EncodeH248_ServiceChangeParm::CompareH248_IndAudSignal::DecodeNames_H248_MediaDescriptor_streamsH248_TerminationID::DecodeH248_ArrayOf_EventParameter::H248_ArrayOf_EventParameterH248_DigitMapDescriptor::EncodeH248_ContextRequest::EncodeH248_IndAudLocalControlDescriptor::GetDataLengthH248_NonStandardData::CloneH248_Message_messageBody::H248_Message_messageBodyNames_H248_ServiceChangeMethodH248_SecondEventsDescriptor::GetDataLengthH248_NotifyReply::H248_NotifyReplyH248_Transaction::CloneH248_EventParameter::GetDataLengthH248_NotifyReply::EncodeH248_IndAudPropertyGroup::CloneH248_MediaDescriptor::GetDataLengthH248_SecondRequestedEvent::H248_SecondRequestedEventH248_ActionRequest::GetDataLengthH248_EventsDescriptor::GetDataLengthH248_PackagesItem::CloneH248_IndAudPackagesDescriptor::EncodeH248_ObservedEvent::EncodeH248_NotifyRequest::CloneH248_StreamDescriptor::EncodeH248_ServiceChangeReply::CompareH248_DigitMapValue::GetDataLengthH248_ArrayOf_WildcardField::operator []H248_StreamDescriptor::H248_StreamDescriptorH248_SignalName::H248_SignalNameH248_EventName::operator =H248_EventName &H248_SecondEventsDescriptor::EncodeH248_RequestedEvent::CloneH248_IndAudEventsDescriptor::CompareH248_PkgdName::CloneH248_SignalName::operator =H248_SignalName &H248_ServiceChangeReply::EncodeH248_Message_messageBody::CreateObjectH248_SecondRequestedActions::PrintOnH248_LocalRemoteDescriptor::CloneH248_ArrayOf_IndAudPropertyParm::CreateObjectH248_IndAudMediaDescriptor::DecodeH248_IndAudStreamDescriptor::CloneH248_NonStandardIdentifier::CreateObjectH248_ArrayOf_RequestedEvent::CreateObjectH248_IndAudSignal::GetDataLengthH248_LocalRemoteDescriptor::EncodeH248_IndAudStatisticsDescriptor::DecodeH248_IndAudMediaDescriptor::PrintOnH248_AuthData::operator =H248_AuthData &H248_ServiceChangeProfile::CloneH248_IndAudPropertyGroup::operator []H248_IndAudSeqSigList::DecodeH248_IP4Address::PrintOnH248_IndAudStreamDescriptor::H248_IndAudStreamDescriptorH248_TopologyRequest_topologyDirection::H248_TopologyRequest_topologyDirectionH248_ObservedEventsDescriptor::CloneH248_AuthenticationHeader::CompareH248_PackagesDescriptor::CloneH248_IndAudStreamDescriptor::CompareH248_EventParameter::CloneH248_AuditDescriptor::H248_AuditDescriptorH248_AuditRequest::PrintOnH248_TransactionPending::GetDataLengthH248_MediaDescriptor::EncodeH248_TransactionReply_transactionResult::CreateObjectH248_StreamParms::PrintOnH248_ServiceChangeMethod::CloneH248_ArrayOf_WildcardField::CreateObjectH248_IndAudPackagesDescriptor::GetDataLengthH248_ObservedEventsDescriptor::GetDataLengthH248_TimeNotation::GetDataLengthH248_SecondRequestedActions::CloneH248_ServiceChangeResParm::DecodeH248_SecondEventsDescriptor::CompareH248_StatisticsParameter::PrintOnH248_IndAudLocalControlDescriptor::EncodeH248_ArrayOf_ModemType::operator []H248_IndAudSeqSigList::H248_IndAudSeqSigListH248_ServiceChangeResParm::PrintOnH248_EventSpec::GetDataLengthH248_ContextAttrAuditRequest::H248_ContextAttrAuditRequestH248_CommandRequest::DecodeH248_StatisticsParameter::CloneH248_NotifyRequest::EncodeH248_RequestedEvent::EncodeH248_SecondRequestedActions::EncodeH248_MuxDescriptor::DecodeH248_MuxDescriptor::CompareH248_TerminationStateDescriptor::EncodeH248_SigParameter_extraInfo::H248_SigParameter_extraInfoH248_PackagesItem::GetDataLengthH248_IndAudLocalRemoteDescriptor::DecodeH248_DigitMapValue::DecodeH248_IndAudEventBufferDescriptor::PrintOnH248_IndAudStreamParms::PrintOnH248_ArrayOf_TerminationID::H248_ArrayOf_TerminationIDH248_IndAudStreamDescriptor::DecodeH248_AuditDescriptor::PrintOnH248_ArrayOf_ModemType::CreateObjectH248_LocalControlDescriptor::DecodeH248_NonStandardData::CompareH248_NotifyReply::CloneNames_H248_NonStandardIdentifierH248_DigitMapDescriptor::CompareH248_TerminationIDList::H248_TerminationIDListH248_IndAudEventsDescriptor::EncodeH248_ServiceChangeRequest::CloneH248_SeqSigList::EncodeH248_PackagesItem::PrintOnH248_TransactionRequest::CompareH248_SequenceNum::CloneH248_PackagesItem::DecodeH248_AuditResult::H248_AuditResultH248_TopologyRequest::GetDataLengthH248_SignalName::CloneH248_Value::H248_ValueH248_ServiceChangeProfile::DecodeH248_TopologyRequest::H248_TopologyRequestH248_ArrayOf_IndAudPropertyParm::CloneH248_EventBufferControl::operator =H248_EventBufferControl &H248_DomainName::EncodeH248_TerminationStateDescriptor::CloneH248_ArrayOf_RequestedEvent::operator []H248_RequestedEvent &H248_Message_messageBody::CloneD:\openh323\src\h261codec.cxxD:\openh323\src\h263codec.cxxD:\openh323\src\h323.cxx"h323neg.h""h450/h4501.h""h450/h4503.h""h450/h4504.h""h450/h45011.h""h450/h450pdu.h""rfc2833.h""t120proto.h""t38proto.h""h323h224.h"H323Connection::OnReceivedStatusEnquiryconst H323SignalPDU &pduH323Connection::OnH245Responseconst H323ControlPDU &pduH323Connection::SendFastStartAcknowledgeH225_ArrayOf_PASN_OctetString &arrayH323Connection::HandleConsultationTransferconst PString &callIdentityH323Connection &incomingH323Connection::AggregateSignalChannelH323Connection::OnClearedH323Connection::GetRemoteCallIntrusionProtectionLevelconst PString &intrusionCallTokenunsigned int intrusionCICLH323Connection::IntrudeCallunsigned int capabilityLevelH323Connection::SelectDefaultLogicalChannelunsigned int sessionIDH323Connection::ClearCallH323Connection::CallEndReason reasonH323Connection::HandleControlDataPPER_Stream &strmH323Connection::SendSignalSetupH323Connection::CallEndReasonH323Connection::OnH245_SendTerminalCapabilitySetconst H245_SendTerminalCapabilitySet &pduH323Connection::FastStartStateNamesconst char *const %[NumFastStartStates]H323Connection::CreateH281ProtocolHandlerOpalH281Handler *OpalH224Handler &h224HandlerH323AggregatedH2x5Handle::GetFDsPAggregatorFDList_tH323Connection::OnUserInputIndicationModalconst H245_ArrayOf_GenericParameter &contentsReceiveSetupFeatureSetconst H323Connection *connectionconst H225_Setup_UUIE &pduH323Connection::OnLogicalChannelFlowControlH323Connection::SetAudioJitterDelayunsigned int minDelayunsigned int maxDelayH323Connection::OnControlProtocolErrorControlProtocolErrorsconst void *H323Connection::AuthoriseOSPTransactionOpalOSP::Transaction &transactionOpalOSP::Transaction::DestinationInfo &destInfoH323Connection::OnSendServiceControlSessionsH225_ServiceControlSession_reason reasonH323Connection::SetRemoteApplicationconst H225_EndpointType &pduH323Connection::HandleTunnelPDUH323SignalPDU *txPDUH323Connection::CreateRealTimeLogicalChannelH323Channel *const H245_H2250LogicalChannelParameters *paramRTP_QOS *rtpqosH323Connection::SendUserInputIndicationNavigateH323_UserInputCapability::NavigateKeyID keyIDH323Connection::SwapHoldMediaChannelsunsigned int sessionIdH323Connection::AggregateControlChannelH323Connection::SendLogicalChannelMiscCommandunsigned int commandIdentifierH323Connection::GetFeatureSetH460_FeatureSet *H323Connection::IsLocalHoldH323Connection::SetNonCallConnectionH323Connection::H323Connectionunsigned int refunsigned int optionsH323Connection::WriteControlPDUH323Connection::IsCallOnHoldH323Connection::OnReceiveServiceControlSessionsH323Connection::OnRTPFinalStatisticsconst RTP_Session &sessionH323Connection::OnUserInputTonechar toneunsigned int durationunsigned int logicalChannelunsigned int rtpTimestampH323Connection::SetCallEndReasonCallEndReason reasonPSyncPoint *syncH323Connection::OnOpenLogicalChannelAggregatedH225HandleH323AggregatedH2x5HandleAggregatedH225Handle::PCLASSINFOAggregatedH225Handle::AggregatedH225HandleH323Transport &_transportH323Connection &_connectionAggregatedH225Handle::~AggregatedH225HandleAggregatedH225Handle::OnReadAggregatedH225Handle::HandlePDUBOOL okPBYTEArray &dataPDUAggregatedH225Handle::OnCloseAggregatedH225Handle::DeInitH323Connection::OnRefusedModeChangeconst H245_RequestModeReject *H323Connection::InternalEndSessionCheckH323Connection::StartControlChannelconst H225_TransportAddress &h245AddressH323Connection::GetSessionCallbacksH323_RTP_Session *H323Connection::SendUserInputIndicationToneStartFastStartChannelH323LogicalChannelList &fastStartChannelsH323Channel::Directions directionH323Connection::OnReceivedFacilityH323Connection::ClearCallSynchronousH323Connection::GetEPAuthenticatorsconst H235Authenticators &H323Connection::OnSendReleaseCompleteH323SignalPDU &SetRFC2833PayloadTypeH323Capabilities &capabilitiesOpalRFC2833 &rfc2833handlerostream &oH323Connection::SendUserInputModes mH323Connection::AnswerCallResponse sH323Connection::CallEndReason rH323Connection::DisableH245inSETUPH323Connection::OnReceivedSignalStatusCheckSendUserInputModeconst H323Capabilities &capsH323Connection::SendUserInputModes modeH323Connection::OnUnknownControlPDUH323AggregatedH2x5Handle::H323AggregatedH2x5HandleH323Connection::LockH323Connection::SetHoldMediaPChannel *audioChannelH323Connection::OnH245_JitterIndicationconst H245_JitterIndication &pduH323Connection::OnReceiveRTPAltInformationH323_RTP_UDP &rtpH323Connection::SetSendUserInputModeSendUserInputModes modeH323Connection::GetCallLinkageH323Connection::UseSessionRTP_Session *const H245_TransportAddress &taddrH323Connection::OnLogicalChannelJitterDWORD jitterint skippedFrameCountint additionalBufferH323Connection::GetLogicalChannelunsigned int numberBOOL fromRemoteH323Connection::ForwardCallconst PString &forwardPartyH323Connection::SendUserInputIndicationModalH323Connection::IsRemoteHoldH323Connection::OnSendingRTPAltInformationconst H323_RTP_UDP &rtpH323Connection::OnSendSignalSetupH323Connection::MonitorCallStatusH323Connection::RetrieveCallH323Connection::SetEnforcedDurationLimitH323Connection::OnStartLogicalChannelH323Connection::OnReceivedSignalInformationconst H323SignalPDU &H323Connection::OnH245IndicationH323Connection::SetRemoteVersionsconst H225_ProtocolIdentifier &protocolIdentifierH323Connection::GetSessionH323Connection::SetRemotePartyInfoH323Connection::TransferCallconst PString &remotePartyH323Connection::OnReceivedAlertingH323Connection::HoldCallBOOL localHoldH323Connection::OnH245_MiscellaneousCommandconst H245_MiscellaneousCommand &pduH323Connection::WriteSignalPDUH323SignalPDU &pduH323Connection::SendUserInputToneH323Connection::OnSendCapabilitySetH245_TerminalCapabilitySet &H323Connection::SetIntrusionImpendingH323Connection::OnAlertingconst H323SignalPDU &alertingPDUH323Connection::GetRedirectingNumberPString &originalCalledNrPString &lastDivertingNrint &divCounterint &originaldivReasonint &divReasonH323Connection::SetAssociatedCallTokenconst PString &tokenH323Connection::CloseAllLogicalChannelsH323Connection::OnConflictingLogicalChannelH323Channel &conflictingChannelH323Connection::InternalEstablishedConnectionCheckH323Connection::IsTransferringCallH323Connection::SetForcedReleaseAcceptedReceiveFeatureDataReceiveFeatureDataH323Connection::OpenAudioChannelBOOL isEncodingunsigned int bufferSizeH323AudioCodec &codecH323Connection::OnSendCallProceedingH323Connection::OnUserInputStringconst PString &valueH323Connection::HandleControlChannelH323Connection::SendCallWaitingIndicationconst unsigned int nbOfAddWaitingCallsH323Connection::SendUserInputIndicationPointDeviceunsigned int xunsigned int yunsigned int buttonunsigned int buttonstateunsigned int clickcountH323Connection::GetRoundTripDelayH323Connection::HandleTransferCallconst PString &identityH323Connection::IsH245MasterH323Connection::GetSessionCodecNamesH323AggregatedH2x5Handle::OnReadH323Connection::FindChannelunsigned int rtpSessionIdH323Connection::OnSendDRQH323Connection::OnReceivedSignalConnectH323Connection::CloseLogicalChannelH323Connection::OnReceivedSignalSetupAckH323Connection::CreateT38ProtocolHandlerOpalT38Protocol *H323Connection::OnModeChangedconst H245_ModeDescription &newModeH323Connection::CloseLogicalChannelNumberconst H323ChannelNumber &numberH323Connection::OnUserInputIndicationconst H245_UserInputIndication &indH323Connection::OnReceivedInitiateReturnErrorH323Connection::OnOutgoingCallconst H323SignalPDU &connectPDUH323Connection::RequestModeChangeconst H245_ArrayOf_ModeDescription &newModesconst PString &newModesH323Connection::HandleReceivedControlPDUBOOL readStatusH323Connection::SendUserInputIndicationQ931H323Connection::OnReceivedReleaseCompleteH323Connection::OnUserInputIndicationSoftkeyH323Connection::SetVideoHoldMediaPChannel *videoChannelH323Connection::SetIntrusionNotAuthorizedH323Connection::HandleControlPDUH323Connection::SendUserInputIndicationSoftkeyunsigned int keyconst PString &keyNameH323Connection::GetCallTransferInvokeIdH323Connection::OnRequestModeChangeconst H245_RequestMode &pduH245_RequestModeAck &H245_RequestModeReject &PINDEX &selectedModeH323Connection::OnReceivedSignalSetupconst H323SignalPDU &setupPDUH323Connection::OnCallAuthenticationH323Connection::StartControlNegotiationsBOOL renegotiateH323Connection::OnConsultationTransferSuccessH323Connection::GetAdmissionRequestAuthenticationH323Connection::OpenVideoChannelH323VideoCodec &codecH323Connection::~H323ConnectionH323Connection::SetAuthenticationConnectionH323Connection::OnReceivedARJH323Connection::OnAcceptModeChangeconst H245_RequestModeAck &pduH323Connection::CreateH224ProtocolHandlerOpalH224Handler *H323Connection::OnReceivedProgressH323Connection::SendUserInputH323Connection::OnClosedLogicalChannelconst H323Channel &channelH323Connection::IsMediaOnHoldH323Connection::DecodeFastStartCapsconst H225_ArrayOf_PASN_OctetString &fastStartCapsH323Connection::OnAnswerCallH323Connection::AnswerCallResponseconst PString &callerH323SignalPDU &connectPDUH323Connection::OnCreateLogicalChannelH323Connection::OnH245RequestH323Connection::OnReceivedCapabilitySetconst H323Capabilities &remoteCapsconst H245_MultiplexCapability *muxCapH245_TerminalCapabilitySetReject &H323Connection::GetControlChannelconst H323Transport &H323Connection::RequestModeChangeT38const char *capabilityNamesH323Connection::OnIncomingCallH323SignalPDU &alertingPDUCallEndReason &reasonAddSessionCodecNamePStringStream &nameH323Connection::OnReceivedACFH323Connection::HandleSignallingChannelH323Connection::ReleaseSessionH323Connection::OnSendFeatureSetH323Connection::OnSetLocalCapabilitiesH323Connection::OnH245CommandH323Connection::OnSendARQH323Connection::GetBandwidthUsedH323Connection::HandleIntrudeCallH323Connection::OnUnknownSignalPDUconst H323SignalPDU &(__cdecl *PTRACE_PARAM)(pdu)H323Connection::OnReceiveFeatureSetH323Connection::SetBandwidthAvailableBOOL forceH323Connection::OnCallRetrieveH323Connection::OnEstablishedH323Connection::OnRTPStatisticsH323Connection::OnReceiveServiceControlconst PString &amountBOOL creditconst unsigned int &timelimitconst PString &urlconst PString &ldapURLconst PString &baseDNH323Connection::OnH245_FlowControlCommandconst H245_FlowControlCommand &pduH323Connection::IsTransferredCallH323Connection::SetLocalPartyNameconst PString &nameH323Connection::HandleCallTransferFailureconst int returnErrorH323Connection::CloseExtendedVideoSessionconst H323ChannelNumber &numH323Connection::OpenExtendedVideoSessionunsigned int roleH323ChannelNumber &channelnumH323Connection::StartRoundTripDelayH323Connection::OpenLogicalChannelH323Connection::UnlockH323Connection::OnReceivedCallProceedingReceiveAuthenticatorPDUReceiveAuthenticatorPDUH323Connection::CleanUpOnCallEndH323Connection::StartHandleControlChannelH323Connection::HandleFastStartAcknowledgeconst H225_ArrayOf_PASN_OctetString &arrayBuildFastStartListH323Channel::Directions reverseDirectionH323Connection::OnSendServiceControlPString &H323Connection::AttachSignalChannelH323Transport *channelBOOL answeringCallAggregatedH245HandleAggregatedH245Handle::PCLASSINFOAggregatedH245Handle::AggregatedH245HandleAggregatedH245Handle::~AggregatedH245HandleAggregatedH245Handle::OnReadAggregatedH245Handle::HandlePDUPBYTEArray &pduAggregatedH245Handle::OnCloseAggregatedH245Handle::DeInitH323Connection::HandleReceivedSignalPDUH323Connection::OnUserInputIndicationPointDeviceH323Connection::OnSelectLogicalChannelsH323Connection::CleanUpOSPH323Connection::GetRealSendUserInputModeH323Connection::SendUserInputModesH323Connection::SetCallLinkageH323Connection::OnSendIRRMonitorCallStatusTimeconst PTimeIntervalH323Connection::OnUserInputInBandDTMFH323Codec::FilterInfo &infoH323Connection::OnReceivedSignalNotifyH323Connection::SendMoreDigitsconst PString &digitsH323Connection::OnInsufficientDigitsH323AggregatedH2x5Handle::~H323AggregatedH2x5HandleH323Connection::CreateT120ProtocolHandlerOpalT120Protocol *H323Connection::SendUserInputIndicationStringH323Connection::SelectFastStartChannelsBOOL transmitterBOOL receiverH323Connection::OpenExtendedVideoChannelH323Connection::TryLockH323Connection::ConnectionStatesNamesconst char *const %[NumConnectionStates]H323Connection::ConsultationTransferconst PString &primaryCallTokenH323Connection::UseBandwidthBOOL removingH323Connection::OnAuthenticationFinaliseunsigned int pduPBYTEArray &rawDataH323Connection::EndHandleControlChannelH323Connection::OnUserInputIndicationNavigateH323Connection::HandleSignalPDUH323Connection::OnClosingLogicalChannelH323Connection::SendUserInputIndicationconst H245_UserInputIndication &indicationH323Connection::SendCapabilitySetBOOL emptyH323Connection::OnH245_MiscellaneousIndicationconst H245_MiscellaneousIndication &pduH323Connection::OnCallHoldH323Connection::OnUserInputInlineRFC2833OpalRFC2833Info &infoH323Connection::AnsweringCallAnswerCallResponse responseH323Connection::CreateLogicalChannelBOOL startingFastD:\openh323\src\h323annexg.cxx"h323annexg.h""h501.h"H323_AnnexG::OnReceiveAccessConfirmationconst H501PDU &pduconst H501_AccessConfirmation &H323_AnnexG::OnReceiveServiceRequestconst H501_ServiceRequest &H323_AnnexG::OnReceiveAccessRequestconst H501PDU &(__cdecl *PTRACE_PARAM)(pdu)const H501_AccessRequest &H323_AnnexG::OnReceiveValidationRejectionconst H501_ValidationRejection &H323_AnnexG::OnReceiveUnknownMessageResponseconst H501_UnknownMessageResponse &H323_AnnexG::OnReceiveUsageIndicationRejectionconst H501_UsageIndicationRejection &H323_AnnexG::OnReceiveNonStandardRequestconst H501_NonStandardRequest &H323_AnnexG::OnSendingPDUPASN_Object &H323_AnnexG::OnReceiveUnknownconst H501PDU &H323_AnnexG::OnReceiveValidationConfirmationconst H501_ValidationConfirmation &H323_AnnexG::OnReceiveDescriptorIDRejectionconst H501_DescriptorIDRejection &H323_AnnexG::PrintOnH323_AnnexG::OnReceiveValidationRequestconst H501_ValidationRequest &H323_AnnexG::OnReceiveUsageRejectionconst H501_UsageRejection &H323_AnnexG::OnReceiveDescriptorRequestconst H501_DescriptorRequest &H323_AnnexG::OnReceiveAuthenticationConfirmationconst H501_AuthenticationConfirmation &H323_AnnexG::CreateTransactionPDUH323_AnnexG::OnReceiveDescriptorUpdateACKconst H501_DescriptorUpdateAck &H323_AnnexG::OnReceiveNonStandardRejectionconst H501_NonStandardRejection &H323_AnnexG::OnReceiveAuthenticationRequestconst H501_AuthenticationRequest &H323_AnnexG::OnReceiveDescriptorIDRequestconst H501_DescriptorIDRequest &H323_AnnexG::OnReceiveServiceConfirmationconst H501_ServiceConfirmation &H323_AnnexG::OnReceiveDescriptorUpdateconst H501_DescriptorUpdate &H323_AnnexG::H323_AnnexGconst H323TransportAddress &addrH323_AnnexG::~H323_AnnexGH323_AnnexG::OnReceiveDescriptorConfirmationconst H501_DescriptorConfirmation &H323_AnnexG::OnReceiveDescriptorIDConfirmationconst H501_DescriptorIDConfirmation &H323_AnnexG::ConstructH323_AnnexG::OnReceiveDescriptorRejectionconst H501_DescriptorRejection &H323_AnnexG::OnReceiveRequestInProgressconst H501_RequestInProgress &ripH323_AnnexG::HandleTransactionH323_AnnexG::OnReceiveUsageRequestconst H501_UsageRequest &H323_AnnexG::OnReceiveUsageIndicationConfirmationconst H501_UsageIndicationConfirmation &H323_AnnexG::OnReceiveAccessRejectionconst H501_AccessRejection &pduBodyH323_AnnexG::OnReceiveServiceReleaseconst H501_ServiceRelease &H323_AnnexG::OnReceiveNonStandardConfirmationconst H501_NonStandardConfirmation &H323_AnnexG::OnReceiveUsageConfirmationconst H501_UsageConfirmation &H323_AnnexG::OnReceiveServiceRejectionconst H501_ServiceRejection &pduBodyH323_AnnexG::OnReceiveAuthenticationRejectionconst H501_AuthenticationRejection &D:\openh323\src\h323caps.cxx"h323caps.h""opalplugin.h""mediafmt.h"OpalUserInputRFC2833char %[]H323CodecExtendedVideoCapability::H323CodecExtendedVideoCapabilityH323_UserInputCapability::BuildGenericIndicationH245_GenericInformation *const char *oidH323ExtendedVideoCapability::GetSubTypeH323NonStandardDataCapability::IsNonStandardMatchconst H245_NonStandardParameter ¶mH323Capability::GetDefaultSessionIDH323Capabilities::BuildPDUH245_TerminalCapabilitySet &pduH323GenericCapabilityInfo::H323GenericCapabilityInfoconst H323GenericCapabilityInfo &objconst PString &standardIdPINDEX maxBitRateH323DataCapability::GetDefaultSessionIDMergeCapabilityNumberconst H323CapabilitiesList &tableunsigned int newCapabilityNumberH323NonStandardVideoCapability::GetSubTypeH323NonStandardVideoCapability::H323NonStandardVideoCapabilityBYTE countryBYTE extensionWORD maufacturerconst BYTE *fixedDataPINDEX dataSizePINDEX offsetH323EndPoint &H323GenericAudioCapability::OnSendingPDUH245_AudioCapability &pduH323_UserInputCapability::OnReceivedPDUconst H245_DataType &const H245_Capability &pduH323_UserInputCapability::GetMainTypeH323Capability::MainTypesH323CodecExtendedVideoCapability::OnSendingPDUH245_VideoCapability &pduH323NonStandardCapabilityInfo::OnReceivedPDUconst PBYTEArray &dataH323Capabilities::AddAllCapabilitiesPINDEX descriptorNumPINDEX simultaneousH323Capabilities::SetCapabilityPINDEX simultaneousNumH323Capability *capabilityH323Capability::IsUsableconst H323Connection &H323DataCapability::H323DataCapabilityunsigned int rateH323CodecExtendedVideoCapability::OnReceivedPDUconst H245_VideoCapability &pduH323_UserInputCapability::CreateCodecH323Codec::DirectionH323_UserInputCapability::SubTypeNamesconst char *const %[NumSubTypes]H323DataCapability::OnReceivedPDUconst H245_DataType &dataTypeconst H245_Capability &capH323Capabilities::Removeconst PStringArray &codecNamesconst PString &codecNameH323NonStandardVideoCapability::CompareH323VideoCapability::OnReceivedPDUH323DataCapability::CreateCodecH323_UserInputCapability::GetFormatNameH323AudioCapability::GetTxFramesInPacketH323ExtendedVideoCapability::operator []H323Capability &H323NonStandardDataCapability::OnReceivedPDUconst H245_DataApplicationCapability &pduH323_G711ALaw64CapabilityH323_G711CapabilityH323_G711ALaw64Capability::H323_G711ALaw64CapabilityH323ExtendedVideoCapability::localCapabilitiesH323CapabilitiesH323NonStandardAudioCapability::OnReceivedPDUconst H245_AudioCapability &pduH323NonStandardVideoCapability::OnSendingPDUH245_VideoMode &pduH323Capability::CompareH323Capabilities::IsAllowedconst unsigned int a_capno1const unsigned int a_capno2const H323Capability &capability1const H323Capability &capability2const unsigned int a_capnoH323Capabilities::H323Capabilitiesconst H323Capabilities &originalconst H245_TerminalCapabilitySet &pduH323Capability::OnReceivedPDUH323_UserInputCapability::GetSubTypeH323CapabilitiesSet::SetSizePINDEX newSizeH323Capability::CapabilityDirection dH323Capability::MainTypes tH323NonStandardAudioCapability::CompareH323ExtendedVideoCapability::OnSendingPDUH245_DataType &H245_GenericCapability &pduH245_Capability &capH323Capabilities::AddH323NonStandardCapabilityInfo::CompareDataH323GenericAudioCapability::OnReceivedPDUMatchWildcardconst PCaselessString &strconst PStringArray &wildcardH323VideoCapability::OnSendingPDUH245_ModeElement &modeH245_DataType &dataTypeH323AudioCapability::H323AudioCapabilityunsigned int rxunsigned int txH323Capabilities::operator =H323Capabilities &H323Capabilities::CopyH323Capability *H323ExtendedVideoCapability::H323ExtendedVideoCapabilityconst PString &capabilityIdH323NonStandardCapabilityInfo::~H323NonStandardCapabilityInfoH323NonStandardAudioCapability::IsNonStandardMatchH323GenericCapabilityInfo::CompareInfoH323_UserInputCapability::BuildGenericParameterH245_GenericParameter *unsigned int typeH323AudioCapability::GetMainTypeH323VideoCapability::GetMainTypeH323GenericVideoCapability::GetSubTypeH323AudioCapability::GetRxFramesInPacketH323Capability::H323CapabilityH323_UserInputCapability::AddAllCapabilitiesH323DataCapability::GetMainTypeH323ExtendedVideoCapability::AddAllCapabilitiesH323Capabilities &basecapabilitiesH323NonStandardCapabilityInfo::OnReceivedNonStandardPDUconst PASN_Choice &pduunsigned int nonStandardTagH323Capabilities::Mergeconst H323Capabilities &newCapsH323Capabilities::Reorderconst PStringArray &preferenceOrderH323GenericVideoCapability::OnSendingPDUH245_VideoMode &H323AudioCapability::OnReceivedPDUunsigned int &packetSizeH323RealTimeCapability::~H323RealTimeCapabilityH323_G711uLaw64CapabilityH323_G711uLaw64Capability::H323_G711uLaw64CapabilityUserInputCapabilitySubTypeCodesunsigned int %[]H323Capabilities::RemoveAllH323AudioCapability::OnSendingPDUH245_AudioMode &pduunsigned int packetSizeH323NonStandardDataCapability::H323NonStandardDataCapabilityunsigned int maxBitRateH323GenericAudioCapability::H323GenericAudioCapabilityunsigned int maxunsigned int desiredH323AudioCapability::GetDefaultSessionIDH323NonStandardVideoCapability::OnReceivedPDUH323NonStandardCapabilityInfo::OnSendingPDUPBYTEArray &dataH323GenericCapabilityInfo::OnReceivedGenericPDUconst H245_GenericCapability &H323NonStandardCapabilityInfo::CompareParamH323Capability::PrintOnH323Capability::IsNonStandardMatchconst H245_NonStandardParameter &H323VideoCapability::H323VideoCapabilityH323Capabilities::PrintOnH323CodecExtendedVideoCapability::OnReceivedGenericPDUconst H245_GenericCapability &pduH323_UserInputCapability::IsUsableH323_G711Capability::GetSubTypeH323RealTimeCapability::H323RealTimeCapabilityconst H323RealTimeCapability &rtcH323GenericVideoCapability::CompareH323_UserInputCapability::OnSendingPDUH245_Capability &pduH323NonStandardVideoCapability::IsNonStandardMatchH323Capabilities::FindCapabilityH323Capability::MainTypes mainTypeunsigned int subTypeconst PASN_Choice &subTypePDUconst unsigned int *translationTableconst H245_ModeElement &modeElementH323Capability::CapabilityDirection directionconst PString &formatNameunsigned int capabilityNumberH323Capability::GetTxFramesInPacketH323Capability::CreateH323ExtendedVideoCapability::CompareH323RealTimeCapability::AttachQoSRTP_QOS *_rtpqosH323_UserInputCapability::CloneH323_G711Capability::H323_G711CapabilityMode mSpeed sH323_UserInputCapability::H323_UserInputCapabilitySubTypes _subTypeH323NonStandardAudioCapability::H323NonStandardAudioCapabilityH323NonStandardCapabilityInfo::CompareFuncType compareFuncH323DataCapability::OnSendingPDUH323_G711Capability::GetFormatNameH323Capability::SetTxFramesInPacketH323RealTimeCapability::CreateChannelH323_UserInputCapability::SubTypeOIDconst char *const %[4]H323_G711Capability::ClonemsNonStandardCodecDefmsNonStandardCodecDef::namechar *msNonStandardCodecDef::sigBYTE %[2]H323NonStandardDataCapability::CompareH323GenericCapabilityInfo::~H323GenericCapabilityInfoH323NonStandardAudioCapability::GetSubTypeH323_UserInputCapability::CreateChannelconst H245_H2250LogicalChannelParameters *H323NonStandardAudioCapability::OnSendingPDUH323GenericAudioCapability::CompareH323NonStandardDataCapability::GetSubTypeH323AudioCapability::SetTxFramesInPacketunsigned int framesH323ExtendedVideoCapability::CreateChannelH323NonStandardCapabilityInfo::CompareInfoconst H323NonStandardCapabilityInfo &otherH323GenericVideoCapability::OnReceivedPDUH323Capabilities::SetVideoFrameSizeH323Capability::CapabilityFrameSize frameSizeint frameUnitsH323GenericCapabilityInfo::AddIntegerGenericParameterBOOL collapsingint standardIdint typelong valueH323GenericCapabilityInfo::IsGenericMatchconst H245_GenericCapability &capH323Capability::GetRxFramesInPacketH323GenericCapabilityInfo::OnSendingGenericPDUH323GenericVideoCapability::H323GenericVideoCapabilityH323NonStandardDataCapability::OnSendingPDUH245_DataMode &pduH245_DataApplicationCapability &pduH323VideoCapability::GetDefaultSessionIDH323GenericAudioCapability::GetSubTypeH323ExtendedVideoCapability::OnReceivedPDUH323SimultaneousCapabilities::SetSizemsNonStandardCodecmsNonStandardCodecDef %[]H323NonStandardCapabilityInfo::OnSendingNonStandardPDUPASN_Choice &pduH323NonStandardCapabilityInfo::H323NonStandardCapabilityInfoconst BYTE *dataPtrPINDEX _offsetPINDEX _lenconst PString &_oidCompareFuncType _compareFuncH323ExtendedVideoCapability::GetMainTypeH323_G711Capability::CreateCodecH323Codec::Direction directionH245_AudioCapability::PrintOnD:\openh323\src\h323ep.cxx"openh323buildopts.h""../version.h""h323pluginmgr.h""opalglobalstatics.cxx"H323EndPoint::SetNoMediaTimeoutPTimeInterval newIntervalH323EndPoint::LocateGatekeeperH323EndPoint::IsMCUH323EndPoint::IsGatekeeperH323EndPoint::RemoveAliasNameH323ConnectionsCleanerH323ConnectionsCleaner::PCLASSINFOH323ConnectionsCleaner::H323ConnectionsCleanerH323ConnectionsCleaner::~H323ConnectionsCleanerH323ConnectionsCleaner::SignalH323ConnectionsCleaner::MainH323ConnectionsCleaner::endpointH323ConnectionsCleaner::stopFlagH323ConnectionsCleaner::wakeupFlagPSyncPointH323EndPoint::GetAuthenticatorListH235AuthenticatorListH323EndPoint::CreateT120ProtocolHandlerH323EndPoint::OnCallTransferIdentifyH323EndPoint::FindConnectionWithLockH323Connection *H323EndPoint::OnReceivedACFH323EndPoint::OnSendARQH323EndPoint::OnCallClearingH323EndPoint::SetGatekeeperconst PString &addressH323EndPoint::HasConnectionH323EndPoint::InternalRegisterGatekeeperH323Gatekeeper *gkBOOL discoveredH323EndPoint::ForwardConnectionH323EndPoint::CreateServiceControlSessionH323ServiceControlSession *const H225_ServiceControlDescriptor &contentsH323EndPoint::OnClosedLogicalChannelconst H323Channel &(__cdecl *PTRACE_PARAM)(channel)H323EndPoint::GatekeeperCheckIPH323TransportAddress &H323EndPoint::SetVideoFrameSizeH323EndPoint::OnGatekeeperConfirmH323EndPoint::OnGatekeeperNATDetectPIPSocket::AddressH323EndPoint::InternalCreateGatekeeperH323Gatekeeper *H323EndPoint::OnReceivedARJOpalGetBuildNumberH323EndPoint::IsTerminalH323EndPoint::PortInfo::Setunsigned int newBaseunsigned int newMaxunsigned int rangeunsigned int dfltH323EndPoint::DiscoverGatekeeperH323EndPoint::GetPreferedNatMethodPNatMethod *H323EndPoint::SetSoundChannelPlayDeviceH323EndPoint::SetSoundChannelRecordDeviceH323EndPoint::OnConnectionClearedconst PString &H323EndPoint::SetOSPProviderconst PString &serverconst PDirectory &ospDir::Provider *providerH323EndPoint::InternalTranslateTCPAddressPIPSocket::Address &localAddrconst PIPSocket::Address &remoteAddrH323EndPoint::OnReceiveFeatureSetH323EndPoint::SetAudioJitterDelayH323EndPoint::IsLocalAddressLookupRecordLookupRecord::typeLookupRecord::addrLookupRecord::portWORDH323EndPoint::MakeCallLockedPString &tokenvoid *userDataH323EndPoint::IsRegisteredWithGatekeeperH323EndPoint::RemoveCapabilitiesH323EndPoint::ResolveCallPartyconst PString &_remotePartyPStringList &addressesH323EndPoint::CreateGatekeeperH323EndPoint::CreateT38ProtocolHandlerH323EndPoint::AddCapabilityH323EndPoint::CreateEPAuthenticatorsH235AuthenticatorsH323EndPoint::SetCapabilityH323EndPoint::FindCapabilityH323EndPoint::StartListenersconst H323TransportAddressArray &ifacesH323EndPoint::SetSoundChannelBufferDepthunsigned int depthH323EndPoint::SetSoundChannelPlayDriverOpalOSPETSIXMLTokenOIDH323EndPoint::OnUserInputStringH323EndPoint::AddAllUserInputCapabilitiesH323EndPoint::CleanUpConnectionsH323EndPoint::GetSignallingAggregatorPHandleAggregator *H323EndPoint::GetAllConnectionsPStringListH323EndPoint::SetLocalUserNameH323EndPoint::RemoveListenerH323Listener *listenerH323EndPoint::OnUserInputToneH323EndPoint::OpenAudioChannelH323EndPoint::CreateAuthenticatorsH323EndPoint::OnCallCreditServiceControlBOOL modeconst unsigned int &H323EndPoint::OnConnectionForwardedH323EndPoint::OnCallAuthenticationH323EndPoint::AddAliasNameH323EndPoint::defaultT35ExtensionBYTEH323EndPoint::GetEPSecurityPolicyH323EndPoint::EPSecurityPolicyH323EndPoint::ClearAllCallsBOOL waitH323EndPoint::SetEPSecurityPolicyEPSecurityPolicy policyH323EndPoint::IsConnectionEstablishedH323EndPoint::IsGatewayH323EndPoint::GetNextTCPPortH323EndPoint::SetRtpIpPortsunsigned int rtpIpBaseunsigned int rtpIpMaxH323EndPoint::PortInfo::GetNextunsigned int incrementH323EndPoint::GetRtpIpPortPairH323EndPoint::OnIncomingConnectionH323SignalPDU &setupPDUH323EndPoint::OnRegistrationRejectH323EndPoint::OnStartLogicalChannelH323Channel &(__cdecl *PTRACE_PARAM)(channel)H225CallThreadH225CallThread::PCLASSINFOH225CallThread::H225CallThreadH323Transport &transportH225CallThread::MainH225CallThread::connectionH225CallThread::transportH323Transport &H225CallThread::aliasH225CallThread::addressH323TransportAddressH225CallThread::useAggregatorH323EndPoint::OnConferenceInviteconst H323Connection *H323EndPoint::ClearCallH323EndPoint::SetupTransferconst PString &oldTokenPString &newTokenH323EndPoint::GetNatMethodsPNatStrategyH323EndPoint::OnGatekeeperOpenNATDetectH323EndPoint::CreateH281ProtocolHandlerH323EndPoint::~H323EndPointH323EndPoint::SetEndpointTypeInfoH225_EndpointType &infoH323EndPoint::OnOutgoingCallH323EndPoint::GetNoMediaTimeoutconst PTimeInterval &H323EndPoint::MakeAuthenticatedCallconst PString &UserNameconst PString &PasswordH323EndPoint::SetGatekeeperZoneH323EndPoint::OpenVideoChannelBOOL (__cdecl *PTRACE_PARAM)(isEncoding)H323VideoCodec &H323EndPoint::UseGatekeeperconst PString &localAddressH323EndPoint::SetEPCredentialsH323EndPoint::OnSendFeatureSetH323EndPoint::LoadBaseFeatureSetH323EndPoint::GetEPCredentialsPString &usernameH323EndPoint::OnServiceControlSessionH323EndPoint::OnNegotiateConferenceCapabilitiesH323EndPoint::OnGatekeeperAliasesconst H225_ArrayOf_AliasAddress &H323EndPoint::ReorderCapabilitiesH323EndPoint::OnAnswerCallconst PString &(__cdecl *PTRACE_PARAM)(caller)H323EndPoint::SetVendorIdentifierInfoH225_VendorIdentifier &infoH323EndPoint::defaultManufacturerCodeH323EndPoint::OnReceivedInitiateReturnErrorH323EndPoint::SetTCPPortsunsigned int tcpBaseunsigned int tcpMaxH323EndPoint::TransferCallH323EndPoint::OnCallTransferInitiateH323EndPoint::AddAllExtendedVideoCapabilitiesH323EndPoint::SetGatekeeperPasswordH323EndPoint::OnRTPStatisticsconst RTP_Session &OnStartStopChannelconst char *startstopH323EndPoint::AddAllCapabilitiesH323EndPoint::RemoveGatekeeperH323EndPoint::OnGatekeeperRejectH323EndPoint::OnConnectionEstablishedH323EndPoint::GetSTUNPSTUNClient *H323EndPoint::OnUnRegisterRequestH323EndPoint::SetH221NonStandardInfoH225_H221NonStandard &infoH323EndPoint::OnH350ServiceControlH323EndPoint::OnRegistrationConfirmH323EndPoint::IntrudeCallH323EndPoint::GetNextUDPPortH323EndPoint::SetSoundChannelRecordDriverH323EndPoint::FindConnectionWithoutLocksOpalGetVersionH323EndPoint::H323EndPointH323EndPoint::ClearCallSynchronousH323EndPoint::HoldCallH323EndPoint::HandleUnsolicitedInformationH323EndPoint::CreateH224ProtocolHandlerH323EndPoint::InternalMakeCallconst PString &trasferFromTokenOpalGetMinorVersionH323EndPoint::SetUDPPortsunsigned int udpBaseunsigned int udpMaxGetListenerInterfaceAddressH323Listener &listenerH323TransportAddress &taddrH323EndPoint::ConsultationTransferconst PString &secondaryCallTokenH323EndPoint::MakeCallOpalGetMajorVersionH323EndPoint::CreateConnectionunsigned int callReferencevoid *H323Transport *H323SignalPDU *H323EndPoint::GetRTPAggregatorH323EndPoint::defaultT35CountryCodeH323EndPoint::OnRTPFinalStatisticsH323EndPoint::OnAdmissionRequestH323EndPoint::OnSendCallIndependentSupplementaryServiceH323EndPoint::SetSTUNServerH323EndPoint::GetInterfaceAddressesH323TransportAddressArrayBOOL excludeLocalHostH323Transport *associatedTransportH323EndPoint::OnAlertingH323EndPoint::OnReceiveCallIndependentSupplementaryServiceH323EndPoint::OnHTTPServiceControlH323EndPoint::BuildConnectionTokenconst H323Transport &transportH323EndPoint::ParsePartyNamePString &aliasH323EndPoint::StartListenerconst H323TransportAddress &ifaceH323EndPoint::OnIncomingCallH323Connection::CallEndReason &reasonD:\openh323\src\h323neg.cxxH245NegLogicalChannels::HandleCloseAckconst H245_CloseLogicalChannelAck &pduH245NegLogicalChannel::HandleOpenAckconst H245_OpenLogicalChannelAck &pduH245NegMasterSlaveDetermination::HandleRejectconst H245_MasterSlaveDeterminationReject &pduH245NegRequestMode::StartRequestH245NegLogicalChannel::HandleRequestCloseconst H245_RequestChannelClose &pduH245NegLogicalChannel::HandleRequestCloseAckconst H245_RequestChannelCloseAck &H245NegLogicalChannels::FindChannelunsigned int channelNumberH245NegLogicalChannels::HandleCloseconst H245_CloseLogicalChannel &pduH245NegLogicalChannel::CloseWhileLockedH245NegMasterSlaveDetermination::HandleTimeoutH245NegLogicalChannels::GetNegLogicalChannelAtH245NegLogicalChannel &H245Negotiator::HandleTimeoutH245NegLogicalChannels::FindNegLogicalChannelH245NegLogicalChannel *H245NegMasterSlaveDetermination::HandleIncomingconst H245_MasterSlaveDetermination &pduH245NegRequestMode::HandleAckH245NegTerminalCapabilitySet::H245NegTerminalCapabilitySetH323EndPoint &endH245NegRoundTripDelay::HandleRequestconst H245_RoundTripDelayRequest &pduH245NegTerminalCapabilitySet::HandleRejectconst H245_TerminalCapabilitySetReject &pduH245NegLogicalChannels::GetChannelAtH245NegLogicalChannel::CloseH245NegLogicalChannels::HandleRequestCloseReleaseconst H245_RequestChannelCloseRelease &pduH245NegLogicalChannels::CloseH245NegMasterSlaveDetermination::StartH245NegLogicalChannel::H245NegLogicalChannelH323Channel &chanconst H323ChannelNumber &chanNumH245NegRequestMode::HandleRequestH245NegLogicalChannel::GetChannelH245NegLogicalChannel::Openunsigned int replacementForunsigned int roleLabelH245NegLogicalChannel::HandleRequestCloseRejectconst H245_RequestChannelCloseReject &H245NegLogicalChannels::HandleOpenconst H245_OpenLogicalChannel &pduH245NegLogicalChannels::HandleRejectconst H245_OpenLogicalChannelReject &pduH245NegMasterSlaveDetermination::StateNamesconst char *const %[]H245NegRoundTripDelay::HandleTimeoutH245NegLogicalChannels::H245NegLogicalChannelsH245NegMasterSlaveDetermination::H245NegMasterSlaveDeterminationH245NegTerminalCapabilitySet::HandleTimeoutH245NegTerminalCapabilitySet::StateNamesH245NegLogicalChannel::OpenWhileLockedH245NegRequestMode::HandleTimeoutH245NegLogicalChannels::HandleRequestCloseRejectconst H245_RequestChannelCloseReject &pduH245NegLogicalChannel::HandleTimeoutH245NegTerminalCapabilitySet::StartH245NegTerminalCapabilitySet::HandleReleaseconst H245_TerminalCapabilitySetRelease &H245NegLogicalChannel::ReleaseH245NegMasterSlaveDetermination::HandleAckconst H245_MasterSlaveDeterminationAck &pduH245NegLogicalChannel::HandleOpenConfirmconst H245_OpenLogicalChannelConfirm &H245NegTerminalCapabilitySet::StopH245NegTerminalCapabilitySet::HandleAckconst H245_TerminalCapabilitySetAck &pduH245NegMasterSlaveDetermination::StopH245NegLogicalChannel::HandleRequestCloseReleaseconst H245_RequestChannelCloseRelease &H245NegLogicalChannels::HandleRequestCloseAckconst H245_RequestChannelCloseAck &pduH245NegLogicalChannels::HandleRequestCloseH245NegLogicalChannels::AddH245NegRequestMode::HandleReleaseconst H245_RequestModeRelease &H245NegLogicalChannels::HandleOpenAckH245NegLogicalChannels::FindChannelBySessionH245NegLogicalChannels::OpenH323ChannelNumber &channelnumberH245NegRoundTripDelay::H245NegRoundTripDelayH245NegTerminalCapabilitySet::HandleIncomingH245NegLogicalChannel::StateNamesH245NegLogicalChannel::HandleRejectH245NegRoundTripDelay::StartRequestH245NegMasterSlaveDetermination::StatusNamesH245NegRoundTripDelay::HandleResponseconst H245_RoundTripDelayResponse &pduH245NegLogicalChannel::HandleOpenH245NegRequestMode::HandleRejectconst H245_RequestModeReject &pduH245NegMasterSlaveDetermination::HandleReleaseconst H245_MasterSlaveDeterminationRelease &H245NegLogicalChannel::HandleCloseconst H245_CloseLogicalChannel &H245NegMasterSlaveDetermination::RestartH245NegLogicalChannels::RemoveAllH245NegLogicalChannels::GetNextChannelNumberH323ChannelNumberH245NegLogicalChannels::HandleOpenConfirmconst H245_OpenLogicalChannelConfirm &pduH245NegRequestMode::H245NegRequestModeH245NegLogicalChannel::~H245NegLogicalChannelH245NegLogicalChannel::HandleCloseAckconst H245_CloseLogicalChannelAck &H245Negotiator::H245NegotiatorD:\openh323\src\h323pdu.cxxH323ControlPDU::BuildRequestModeAckunsigned int responseH323SignalPDU::BuildConnectH225_Connect_UUIE &const PIPSocket::Address &h245AddressWORD portH323RasPDU::BuildBandwidthRejectH323RasPDU::BuildUnregistrationConfirmH323ControlPDU::BuildMasterSlaveDeterminationAckH245_MasterSlaveDeterminationAck &BOOL isMasterH323RasPDU::BuildInfoRequestunsigned int callRefconst OpalGloballyUniqueID *idH323SignalPDU::H323SignalPDUH323SignalPDU::BuildProgressH225_Progress_UUIE &H323SignalPDU::GetDestinationAliasBOOL firstAliasOnlyH323SignalPDU::SetQ931FieldsBOOL insertPartyNumbersunsigned int planint presentationint screeningH323ControlPDU::BuildCloseLogicalChannelH245_CloseLogicalChannel &H323RasPDU::BuildInfoRequestResponseH323RasPDU::BuildBandwidthRequestH323SignalPDU::GetDestinationE164PString &numberH323ControlPDU::BuildUserInputIndicationH245_UserInputIndication &H323RasPDU::BuildDisengageRequestH323RasPDU::BuildLocationRequestH323SignalPDU::BuildCallProceedingH225_CallProceeding_UUIE &H323ControlPDU::BuildRequestChannelCloseReleaseH245_RequestChannelCloseRelease &H323SignalPDU::BuildSetupH225_Setup_UUIE &const H323TransportAddress &destAddrH323ControlPDU::BuildFunctionNotUnderstoodH245_FunctionNotUnderstood &H323ControlPDU::BuildOpenLogicalChannelRejectH245_OpenLogicalChannelReject &unsigned int causeH323ControlPDU::BuildTerminalCapabilitySetAckH245_TerminalCapabilitySetAck &H323ControlPDU::BuildRequestModeRejectH323SignalPDU::ProcessReadDataconst PBYTEArray &rawDataH323RasPDU::GetChoiceconst PASN_Choice &PASN_Choice &H323SignalPDU::GetSourceAliasesconst H323Transport *transportH323GetAliasAddressStringsconst H225_ArrayOf_AliasAddress &aliasesH323RasPDU::BuildRequestInProgressH323SignalPDU::GetSourceE164DataPartyPrefixH323TranslateToCallEndReasonQ931::CauseValues causeconst H225_ReleaseCompleteReason &reasonH323SignalPDU::BuildReleaseCompleteH225_ReleaseComplete_UUIE &H323RasPDU::BuildUnknownMessageResponseH323RasPDU::BuildDisengageRejectH323RasPDU::BuildInfoRequestAckH323SignalPDU::BuildAlertingH225_Alerting_UUIE &H323ControlPDU::BuildRequestChannelCloseH245_RequestChannelClose &H323RasPDU::BuildServiceControlIndicationH323ControlPDU::BuildRequestChannelCloseAckH245_RequestChannelCloseAck &BuildAuthenticatorPDUBuildAuthenticatorPDUH323RasPDU::GetProtocolNameH323SetAliasAddressconst PString &_nameH225_AliasAddress &aliasint tagH323GetApplicationInfoconst H225_VendorIdentifier &vendorH323SignalPDU::GetSourceAliasNamesH323ControlPDU::BuildRequestChannelCloseRejectH245_RequestChannelCloseReject &H323SignalPDU::ReadH323SignalPDU::WriteH323RasPDU::BuildDisengageConfirmH323RasPDU::GetRequestInProgressDelayH323RasPDU::BuildGatekeeperConfirmH323ControlPDU::BuildOpenLogicalChannelH245_OpenLogicalChannel &unsigned int forwardLogicalChannelNumberE164NumberPrefixH323RasPDU::BuildBandwidthConfirmunsigned int bandWidthH323ControlPDU::BuildEndSessionCommandH245_EndSessionCommand &H323SignalPDU::BuildInformationH225_Information_UUIE &H323RasPDU::BuildLocationRejectH323RasPDU::BuildUnregistrationRequestH323SignalPDU::GetSourceURLH323ControlPDU::BuildH245_IndicationMessage &H245_IndicationMessage::Choices indicationH245_CommandMessage &H245_CommandMessage::Choices commandH245_ResponseMessage &H245_ResponseMessage::Choices responseH245_RequestMessage &H245_RequestMessage::Choices requestPrivatePartyPrefixH323RasPDU::BuildRegistrationRejectH323ControlPDU::BuildOpenLogicalChannelConfirmH245_OpenLogicalChannelConfirm &H323ControlPDU::BuildMasterSlaveDeterminationH245_MasterSlaveDetermination &unsigned int terminalTypeunsigned int statusDeterminationNumberH225_ProtocolIDconst unsigned int %[]H323RasPDU::BuildAdmissionRequestH323RasPDU::BuildServiceControlResponseH323RasPDU::BuildInfoRequestNakH323ControlPDU::BuildTerminalCapabilitySetH323GetAliasAddressE164aliasAddressTypes%[5]H323RasPDU::GetSequenceNumberSetH225VersionH225_ProtocolIdentifier &protocolIdentifierH323SignalPDU::PrintOnH323GetAliasAddressStringH245_ProtocolIDH323TranslateFromCallEndReasonQ931::CauseValuesH225_ReleaseCompleteReason &reasonH323Connection::CallEndReason callEndReasonH323RasPDU::BuildGatekeeperRejectNSPNumberPrefixH323RasPDU::BuildAdmissionRejectIsURLH323RasPDU::H323RasPDUconst H235Authenticators &authH323SignalPDU::BuildStatusH225_Status_UUIE &H323RasPDU::BuildGatekeeperRequestH323ControlPDU::BuildRoundTripDelayResponseH245_RoundTripDelayResponse &H323RasPDU::BuildUnregistrationRejectH323ControlPDU::BuildOpenLogicalChannelAckH323RasPDU::GetPDUconst PASN_Object &H323RasPDU::CloneH323SignalPDU::GetDistinctiveRingH323SignalPDU::InsertH460SetupH225_Setup_UUIE &setupH323RasPDU::ClonePDUH323RasPDU::BuildAdmissionConfirmH323ControlPDU::BuildTerminalCapabilitySetRejectH323ControlPDU::BuildRoundTripDelayRequestH245_RoundTripDelayRequest &SendSetupFeatureSetH225_Setup_UUIE &pduTelexPartyPrefixIsE164H323SignalPDU::BuildQ931H323RasPDU::DeletePDUH323SignalPDU::BuildSetupAcknowledgeH225_SetupAcknowledge_UUIE &H225_H323_UU_PDU &msgH323ControlPDU::BuildCloseLogicalChannelAckH245_CloseLogicalChannelAck &H323SetAliasAddressesconst PStringList &namesconst PStringArray &namesconst H323TransportAddressArray &addressesH323RasPDU::BuildLocationConfirmH323TraceDumpPDUconst char *protoBOOL writingconst PASN_Object &pduconst PASN_Choice &tagsconst H323TransportAddress &locAddrconst H323TransportAddress &remAddrH323RasPDU::BuildRegistrationConfirmH323ControlPDU::BuildMasterSlaveDeterminationRejectH245_MasterSlaveDeterminationReject &H323SignalPDU::BuildNotifyH225_Notify_UUIE &H323SignalPDU::BuildStatusInquiryH225_StatusInquiry_UUIE &H323RasPDU::BuildRegistrationRequestH323ControlPDU::BuildRequestModeH245_RequestMode &H323SignalPDU::BuildFacilityH225_Facility_UUIE *D:\openh323\src\h323pluginmgr.cxxOpalVideoFormatH323PluginG7231CapabilityH323AudioPluginCapabilityH323AudioCapabilityH323PluginCapabilityInfoH323PluginCapabilityInfo::H323PluginCapabilityInfoconst PString &_mediaFormatconst PString &_baseNamePluginCodec_Definition *_encoderCodecPluginCodec_Definition *_decoderCodecH323PluginCapabilityInfo::GetFormatNameH323PluginCapabilityInfo::CreateCodecH323PluginCapabilityInfo::encoderCodecPluginCodec_Definition *H323PluginCapabilityInfo::decoderCodecH323PluginCapabilityInfo::capabilityFormatNameH323PluginCapabilityInfo::mediaFormatOpalMediaFormatH323AudioPluginCapability::PCLASSINFOH323AudioPluginCapability::H323AudioPluginCapabilityunsigned int maxFramesPerPacketunsigned int recommendedFramesPerPacketunsigned int _pluginSubTypeH323AudioPluginCapability::CloneH323AudioPluginCapability::GetFormatNameH323AudioPluginCapability::CreateCodecH323AudioPluginCapability::GetSubTypeH323AudioPluginCapability::pluginSubTypeH323AudioPluginCapability::h323subTypeH323PluginG7231Capability::PCLASSINFOH323PluginG7231Capability::H323PluginG7231CapabilityBOOL _annexA = TRUEH323PluginG7231Capability::CompareH323PluginG7231Capability::CloneH323PluginG7231Capability::OnSendingPDUH245_AudioCapability &capH323PluginG7231Capability::OnReceivedPDUconst H245_AudioCapability &capH323PluginG7231Capability::annexASetCodecControlPluginCodec_Definition *codecvoid *contextconst char *nameconst char *parmint &retValCreateNonStandardAudioCapPluginCodec_Definition *encoderCodecPluginCodec_Definition *decoderCodecint subTypeSET_CODEC_OPTIONS_CONTROLh323_hrdB_tagEVENT_CODEC_CONTROLEventCodecControlGET_OUTPUT_DATA_SIZE_CONTROLOpalPluginCodecFactoryPFactoryOpalPluginCodecFactory::WorkerOpalPluginCodecFactory::PFactory::WorkerBaseOpalPluginCodecFactory::Worker::Workerconst PString &keyPluginCodec_Definition *_codecDefnOpalPluginCodecFactory::Worker::CreateOpalFactoryCodec *OpalPluginCodecFactory::Worker::codecDefnH323PluginCodecManager::GetMediaFormatsOpalMediaFormat::ListaudioMapsH323CodecPluginCapabilityMapEntry %[]OpalPluginAudioMediaFormatOpalPluginAudioMediaFormat::OpalPluginAudioMediaFormatunsigned int defaultSessionIDBOOL needsJitterunsigned int frameTimeunsigned int timeUnitstime_t timeStampOpalPluginAudioMediaFormat::~OpalPluginAudioMediaFormatOpalPluginAudioMediaFormat::encoderCodecH323DynaLink::H323DynaLinkconst char *_baseNameconst char *_reasonPopulateMediaFormatOptionsOpalMediaFormat &formatOpalFixedCodecFactoryOpalFixedCodecFactorytypename CodecClassOpalFixedCodecFactory::WorkerOpalFixedCodecFactory::PFactoryOpalFixedCodecFactory::Worker::WorkerOpalFixedCodecFactory::Worker::CreateOpalG711ALaw64k_BaseOpalFactoryCodecOpalG711ALaw64k_Base::PCLASSINFOOpalG711ALaw64k_Base::OpalG711ALaw64k_BaseOpalG711ALaw64k_Base::GetSampleRateOpalG711ALaw64k_Base::GetBitsPerSecOpalG711ALaw64k_Base::GetFrameTimeOpalG711ALaw64k_Base::GetSamplesPerFrameOpalG711ALaw64k_Base::GetBytesPerFrameOpalG711ALaw64k_Base::GetRecommendedFramesPerPacketOpalG711ALaw64k_Base::GetMaxFramesPerPacketOpalG711ALaw64k_Base::GetRTPPayloadOpalG711ALaw64k_Base::GetSDPFormath323_sqcifMPI_tagh323_qcifMPI_tagh323_errorCompensation_tagh323_pbFrames_tagh323_unrestrictedVector_tagOpalG711uLaw64k_EncoderOpalG711uLaw64k_BaseOpalG711uLaw64k_Base::PCLASSINFOOpalG711uLaw64k_Base::OpalG711uLaw64k_BaseOpalG711uLaw64k_Base::GetSampleRateOpalG711uLaw64k_Base::GetBitsPerSecOpalG711uLaw64k_Base::GetFrameTimeOpalG711uLaw64k_Base::GetSamplesPerFrameOpalG711uLaw64k_Base::GetBytesPerFrameOpalG711uLaw64k_Base::GetRecommendedFramesPerPacketOpalG711uLaw64k_Base::GetMaxFramesPerPacketOpalG711uLaw64k_Base::GetRTPPayloadOpalG711uLaw64k_Base::GetSDPFormatOpalG711uLaw64k_Encoder::PCLASSINFOOpalG711uLaw64k_Encoder::OpalG711uLaw64k_EncoderOpalG711uLaw64k_Encoder::GetInputFormatOpalG711uLaw64k_Encoder::GetOutputFormatOpalG711uLaw64k_Encoder::GetFactoryNameOpalG711uLaw64k_Encoder::Encodeconst void *fromunsigned int *fromLenvoid *tounsigned int *toLenunsigned int *flagH323DynaLink::LoadPluginconst PString &filenameOpalG711ALaw64k_EncoderOpalG711ALaw64k_Encoder::PCLASSINFOOpalG711ALaw64k_Encoder::OpalG711ALaw64k_EncoderOpalG711ALaw64k_Encoder::GetInputFormatOpalG711ALaw64k_Encoder::GetOutputFormatOpalG711ALaw64k_Encoder::GetFactoryNameOpalG711ALaw64k_Encoder::EncodeH323StreamedPluginAudioCodecH323StreamedAudioCodecH323StreamedPluginAudioCodec::PCLASSINFOH323StreamedPluginAudioCodec::H323StreamedPluginAudioCodecconst PString &fmtNameunsigned int samplesPerFramePluginCodec_Definition *_codecH323StreamedPluginAudioCodec::~H323StreamedPluginAudioCodecH323StreamedPluginAudioCodec::EncodeH323StreamedPluginAudioCodec::DecodeH323StreamedPluginAudioCodec::SetTxQualityLevelint qlevelH323StreamedPluginAudioCodec::contextH323StreamedPluginAudioCodec::codecCreateGSMCapH323PluginCodecManager::UnregisterCodecsOpalG711uLaw64k_DecoderOpalG711uLaw64k_Decoder::PCLASSINFOOpalG711uLaw64k_Decoder::OpalG711uLaw64k_DecoderOpalG711uLaw64k_Decoder::GetInputFormatOpalG711uLaw64k_Decoder::GetOutputFormatOpalG711uLaw64k_Decoder::GetFactoryNameOpalG711uLaw64k_Decoder::EncodeH323H263PluginCapabilityH323VideoPluginCapabilityH323VideoCapabilityH323VideoPluginCapability::PCLASSINFOH323VideoPluginCapability::H323VideoPluginCapabilityH323VideoPluginCapability::GetFormatNameH323VideoPluginCapability::GetSubTypeH323VideoPluginCapability::SetCommonOptionsOpalMediaFormat &mediaFormatint frameWidthint frameHeightint frameRateH323VideoPluginCapability::GetMediaFormatconst OpalMediaFormat &H323VideoPluginCapability::GetWritableMediaFormatOpalMediaFormat &H323VideoPluginCapability::SetMaxFrameSizeCapabilityFrameSize framesizeint frameunits = 1H323VideoPluginCapability::CreateCodecH323VideoPluginCapability::pluginSubTypeH323VideoPluginCapability::h323subTypeH323H263PluginCapability::PCLASSINFOH323H263PluginCapability::H323H263PluginCapabilityH323H263PluginCapability::CompareComparisonH323H263PluginCapability::CloneH323H263PluginCapability::OnSendingPDUH323H263PluginCapability::OnReceivedPDUH323PluginCodecManager::RegisterCodecsunsigned int countvoid *_codecListCreateCodecNameconst PString &baseNameBOOL addSWh323_advancedPrediction_tagh323_arithmeticCoding_tagOpalG711ALaw64k_DecoderOpalG711ALaw64k_Decoder::PCLASSINFOOpalG711ALaw64k_Decoder::OpalG711ALaw64k_DecoderOpalG711ALaw64k_Decoder::GetInputFormatOpalG711ALaw64k_Decoder::GetOutputFormatOpalG711ALaw64k_Decoder::GetFactoryNameOpalG711ALaw64k_Decoder::EncodeH323H261PluginCapabilityH323H261PluginCapability::PCLASSINFOH323H261PluginCapability::H323H261PluginCapabilityH323H261PluginCapability::CompareH323H261PluginCapability::CloneH323H261PluginCapability::OnSendingPDUH323H261PluginCapability::OnReceivedPDUH323H261PluginCapability::encH323PluginCodecManager::H323PluginCodecManagerPPluginManager *_pluginMgrH323PluginCodecManager::GetMediaFormatMutexPMutex &GET_CODEC_OPTIONS_CONTROLSetReceivedH263Capconst H245_H263VideoCapability &h263const char *mpiTagint mpiEnumconst PASN_Integer &mpiint slowMpiEnumconst PASN_Integer &slowMpiBOOL &formatDefinedOpalPluginCodecManagerH323PluginCodecManagerFREE_CODEC_OPTIONS_CONTROLH323PluginVideoCodecH323VideoCodecH323PluginVideoCodec::PCLASSINFOH323PluginVideoCodec::H323PluginVideoCodecconst OpalMediaFormat &fmtDirection directionH323PluginVideoCodec::~H323PluginVideoCodecH323PluginVideoCodec::ReadRTP_DataFrame &dstH323PluginVideoCodec::Writeconst RTP_DataFrame &srcH323PluginVideoCodec::EncodeFrameH323PluginVideoCodec::DecodeFrameH323PluginVideoCodec::RenderFrameH323PluginVideoCodec::GetFrameRateH323PluginVideoCodec::SetTargetFrameTimeMsH323PluginVideoCodec::SetFrameSizeint widthint heightH323PluginVideoCodec::SetTxQualityLevelH323PluginVideoCodec::SetTxMinQualityH323PluginVideoCodec::SetTxMaxQualityH323PluginVideoCodec::SetBackgroundFillint fillLevelH323PluginVideoCodec::GetMaxBitRateH323PluginVideoCodec::SetMaxBitRateint bitRateH323PluginVideoCodec::SetGeneralCodecOptionconst char *optH323PluginVideoCodec::GetVideoModeH323PluginVideoCodec::SetVideoModeint modeH323PluginVideoCodec::OnFastUpdatePictureH323PluginVideoCodec::OnLostPartialPictureH323PluginVideoCodec::OnLostPictureH323PluginVideoCodec::contextH323PluginVideoCodec::codecH323PluginVideoCodec::bufferRTPRTP_DataFrameH323PluginVideoCodec::lastPacketSentH323PluginVideoCodec::bytesPerFrameH323PluginVideoCodec::FrameTimeMsH323PluginVideoCodec::targetFrameTimeMsH323PluginVideoCodec::maxWidthH323PluginVideoCodec::maxHeightH323PluginCodecManager::~H323PluginCodecManagerH323CodecPluginNonStandardAudioCapabilityH323NonStandardAudioCapabilityH323CodecPluginNonStandardAudioCapability::PCLASSINFOH323CodecPluginNonStandardAudioCapability::H323CodecPluginNonStandardAudioCapabilityconst unsigned char *dataunsigned int dataLenH323CodecPluginNonStandardAudioCapability::CloneH323CodecPluginNonStandardAudioCapability::GetFormatNameH323CodecPluginNonStandardAudioCapability::CreateCodecH323PluginCodecManager::AddFormatOpalMediaFormat *fmtCallCodecControlvoid *parmunsigned int *parmLenh323_cif4MPI_tagH323DynaLink::Loadh323_cif16MPI_tagPStringArrayToArrayconst char **const PStringArray &listBOOL addNull = FALSEstaticGSM_0610CodecFactoryPFactory::WorkerOpalPluginVideoMediaFormatOpalPluginVideoMediaFormat::OpalPluginVideoMediaFormatOpalPluginVideoMediaFormat::~OpalPluginVideoMediaFormatOpalPluginVideoMediaFormat::CloneOpalPluginVideoMediaFormat::encoderCodecH323PluginFramedAudioCodecH323FramedAudioCodecH323PluginFramedAudioCodec::PCLASSINFOH323PluginFramedAudioCodec::H323PluginFramedAudioCodecH323PluginFramedAudioCodec::~H323PluginFramedAudioCodecH323PluginFramedAudioCodec::EncodeFrameunsigned int &toLenH323PluginFramedAudioCodec::DecodeFrameunsigned int &bytesDecodedH323PluginFramedAudioCodec::DecodeSilenceFramevoid *bufferH323PluginFramedAudioCodec::SetTxQualityLevelH323PluginFramedAudioCodec::contextH323PluginFramedAudioCodec::codecH323PluginCodecManager::OnLoadPluginPDynaLink &dllINT codeSetDefaultVideoOptionsH323CodecPluginNonStandardVideoCapabilityH323NonStandardVideoCapabilityH323CodecPluginNonStandardVideoCapability::PCLASSINFOH323CodecPluginNonStandardVideoCapability::H323CodecPluginNonStandardVideoCapabilityH323CodecPluginNonStandardVideoCapability::CloneH323CodecPluginNonStandardVideoCapability::GetFormatNameH323CodecPluginNonStandardVideoCapability::CreateCodecH323CodecPluginNonStandardVideoCapability::GetMediaFormatH323CodecPluginNonStandardVideoCapability::GetWritableMediaFormatSetTransmittedCapconst OpalMediaFormat &mediaFormatH245_H263VideoCapability &h263PASN_Integer &mpiPASN_Integer &slowMpiH323CodecPluginCapabilityMapEntryH323CodecPluginCapabilityMapEntry::pluginCapTypeH323CodecPluginCapabilityMapEntry::h323SubTypeH323CodecPluginCapabilityMapEntry::createFuncH323Capability *(__cdecl *%)(PluginCodec_Definition *,PluginCodec_Definition *,int)OpalPluginCodecOpalPluginCodec::PCLASSINFOPObjectOpalPluginCodec::OpalPluginCodecOpalPluginCodec::~OpalPluginCodecOpalPluginCodec::GetDefinitionconst PluginCodec_Definition *OpalPluginCodec::GetInputFormatOpalPluginCodec::GetOutputFormatOpalPluginCodec::EncodeOpalPluginCodec::GetSampleRateOpalPluginCodec::GetBitsPerSecOpalPluginCodec::GetFrameTimeOpalPluginCodec::GetSamplesPerFrameOpalPluginCodec::GetBytesPerFrameOpalPluginCodec::GetRecommendedFramesPerPacketOpalPluginCodec::GetMaxFramesPerPacketOpalPluginCodec::GetRTPPayloadOpalPluginCodec::GetSDPFormatOpalPluginCodec::codecDefnOpalPluginCodec::contextCreateNonStandardVideoCapH323PluginCodecManager::Bootstraph323_bppMaxKb_tagH323CodecPluginGenericAudioCapabilityH323GenericAudioCapabilityH323CodecPluginGenericAudioCapability::PCLASSINFOH323CodecPluginGenericAudioCapability::H323CodecPluginGenericAudioCapabilityconst PluginCodec_Definition *_encoderCodecconst PluginCodec_Definition *_decoderCodecconst PluginCodec_H323GenericCodecData *dataH323CodecPluginGenericAudioCapability::CloneH323CodecPluginGenericAudioCapability::GetFormatNameH323CodecPluginGenericAudioCapability::CreateCodecCreateH261CapvideoMapsbootStrapCountPAtomicIntegerH323StaticPluginCodecH323StaticPluginCodec::~H323StaticPluginCodecH323StaticPluginCodec::Get_GetAPIFnPluginCodec_GetAPIVersionFunctionH323StaticPluginCodec::Get_GetCodecFnPluginCodec_GetCodecFunctionH323StaticPluginCodec_GSM_0610H323StaticPluginCodec_GSM_0610::Get_GetAPIFnH323StaticPluginCodec_GSM_0610::Get_GetCodecFnCreateGenericAudioCaph323_temporalSpatialTradeOffCapability_tagH323PluginCodecManager::GetMediaFormatListOpalMediaFormat::List &h323_stillImageTransmission_tagH323PluginCodecManager::RegisterStaticCodecPluginCodec_GetCodecFunction getCodecFnCreateGenericVideoCapH323PluginCodecManager::CreateCapabilityAndMediaFormath323_cifMPI_tagH323GSMPluginCapabilityH323GSMPluginCapability::PCLASSINFOH323GSMPluginCapability::H323GSMPluginCapabilityint _pluginSubTypeint _comfortNoiseint _scrambledH323GSMPluginCapability::CompareH323GSMPluginCapability::CloneH323GSMPluginCapability::OnSendingPDUH323GSMPluginCapability::OnReceivedPDUH323GSMPluginCapability::comfortNoiseH323GSMPluginCapability::scrambledCreateH263CapH323PluginCodecManager::OnShutdownCreateG7231CapH323CodecPluginGenericVideoCapabilityH323GenericVideoCapabilityH323CodecPluginGenericVideoCapability::PCLASSINFOH323CodecPluginGenericVideoCapability::H323CodecPluginGenericVideoCapabilityH323CodecPluginGenericVideoCapability::CloneH323CodecPluginGenericVideoCapability::GetFormatNameH323CodecPluginGenericVideoCapability::CreateCodecH323CodecPluginGenericVideoCapability::LoadGenericDataconst PluginCodec_H323GenericCodecData *ptrH323CodecPluginGenericVideoCapability::SetMaxFrameSizeH323CodecPluginGenericVideoCapability::OnReceivedGenericPDUH323CodecPluginGenericVideoCapability::GetMediaFormatH323CodecPluginGenericVideoCapability::GetWritableMediaFormatD:\openh323\src\h323rtp.cxxH323_RTP_UDP::OnSendRasInfoH225_RTPSession &infoH323_RTP_UDP::OnReceivedPDUH323_RTPChannel &channelH323_RTP_UDP::ExtractTransportconst H245_TransportAddress &pduBOOL isDataPortH323_RTP_UDP::OnReceivedAltPDUH323_RTP_UDP::OnSendOpenAckAltconst H323_RTPChannel &channelH323_RTP_UDP::OnSendingAckPDUH323_RTP_Session::H323_RTP_Sessionconst H323Connection &connH323_RTP_UDP::OnSendingAltPDUH323_RTP_Session::OnRxStatisticsH323_RTP_UDP::OnReceivedAckAltPDUH323_RTP_UDP::ReadTransportCapPDUconst H245_TransportCapability &capH323_RTP_UDP::WriteTransportCapPDUH245_TransportCapability &capH323_RTP_Session::OnTxStatisticsH323_RTP_UDP::OnSendingPDUH323_RTP_Session::OnFinalStatisticsH323_RTP_UDP::OnReceivedAckPDUH323_RTP_UDP::H323_RTP_UDPRTP_UDP &rtp_udpRTP_QOS *rtpQosD:\openh323\src\h323t120.cxx"h323t120.h""x224.h"H323_T120Capability::CloneH323_T120Capability::GetFormatNameH323_T120Capability::GetSubTypeH323_T120Capability::H323_T120CapabilityH323_T120Channel::HandleChannelH323_T120Capability::CreateChannelH323_T120Channel::OnSendOpenAckH323_T120Channel::OnSendingPDUH323_T120Capability::OnSendingPDUH245_DataProtocolCapability &pduH323_T120Capability::OnReceivedPDUconst H245_DataApplicationCapability &capH323_T120Channel::OnReceivedPDUH323_T120Channel::OnReceivedAckPDUH323_T120Channel::ReceiveH323_T120Channel::H323_T120ChannelH323_T120Channel::TransmitD:\openh323\src\h323trans.cxx"h323trans.h"H323Transactor::Response::~ResponseH323Transactor::Request::OnReceiveRIPunsigned int millisecondsH323TransactionServer::AddListenerH323Transactor *listenerconst H323TransportAddress &interfaceNameH323Transaction::HandlePDUH323Transactor::H323TransactorWORD local_portWORD remote_portH323Transactor::WritePDUH323TransactionServer::~H323TransactionServerH323TransactionServer::RemoveListenerH323Transactor::MakeRequestH323Transactor::WriteToBOOL callbackH323Transactor::CheckForResponseunsigned int reqTagconst PASN_Choice *reasonH323Transaction::CheckCryptoTokensH323Transaction::WritePDUH323Transactor::Response::SendCachedResponseH323Transactor::CheckCryptoTokensH323Transactor::Request::CheckResponseH323TransactionPDU::ReadH323Transactor::SendCachedResponseH323Transactor::Request::RequestResponseRetirementAgeH323TransactionServer::H323TransactionServerH323Transactor::Request::PollH323Transactor &rasChannelH323Transaction::SlowHandlerH323Transactor::HandleRequestInProgressH323Transactor::StartChannelH323Transactor::GetNextSequenceNumberH323Transactor::AgeResponsesH323Transactor::GetInterfaceAddressesH323Transactor::PrintOnH323Transactor::StopChannelH323TransactionServer::AddListenersH323Transactor::~H323TransactorH323Transactor::SetUpCallSignalAddressesH225_ArrayOf_TransportAddress &addressesH323Transactor::Response::ResponseH323Transaction::H323TransactionH323Transactor &transconst H323TransactionPDU &requestToCopyH323TransactionPDU *confH323TransactionPDU *rejH323Transaction::~H323TransactionH323Transactor::SetTransportH323Transactor::Response::SetPDUH323TransactionPDU::WriteH323Transactor::ConstructH323TransactionPDU::H323TransactionPDUH323Transactor::HandleTransactionsD:\openh323\src\h4501.cxxD:\openh323\src\h45010.cxxD:\openh323\src\h45011.cxxD:\openh323\src\h4502.cxxD:\openh323\src\h4503.cxxD:\openh323\src\h4504.cxxD:\openh323\src\h4505.cxxD:\openh323\src\h4506.cxxD:\openh323\src\h4507.cxxD:\openh323\src\h4508.cxxD:\openh323\src\h4509.cxxD:\openh323\src\h450pdu.cxxD:\openh323\src\h501.cxxH501_ServiceConfirmation::DecodeH501_ValidationRejection::H501_ValidationRejectionH501_AccessToken::CreateObjectH501_DescriptorIDConfirmation::PrintOnH501_PartyInformation::CompareH501_DescriptorConfirmation::DecodeH501_Descriptor::CloneH501_AuthenticationRequest::CloneH501_UsageCallStatus::H501_UsageCallStatusH501_ServiceRelease::CloneH501_CallInformation::EncodeH501_AlternatePE::GetDataLengthH501_ArrayOf_GloballyUniqueID::operator []H501_ArrayOf_TransportAddress::operator []H501_NonStandardConfirmation::DecodeH501_UpdateInformation_descriptorInfo::H501_UpdateInformation_descriptorInfoH501_AuthenticationConfirmation::DecodeH501_UnknownMessageResponse::H501_UnknownMessageResponseH501_UsageIndication::EncodeH501_ArrayOf_ClearToken::H501_ArrayOf_ClearTokenH501_DescriptorUpdate::CompareH501_ApplicationMessage::operator =H501_ApplicationMessage &H501_ServiceConfirmation::CompareH501_ArrayOf_RouteInformation::CreateObjectH501_RequestInProgress::CloneH501_ServiceRelease::H501_ServiceReleaseH501_ServiceRequest::EncodeH501_ArrayOf_PriceInfoSpec::H501_ArrayOf_PriceInfoSpecH501_UsageField::PrintOnH501_ValidationRejection::CloneH501_ArrayOf_AddressTemplate::H501_ArrayOf_AddressTemplateH501_PriceElement_units::CreateObjectH501_RouteInformation_messageType::H501_RouteInformation_messageTypeH501_UserInformation::PrintOnH501_ArrayOf_UpdateInformation::H501_ArrayOf_UpdateInformationH501_UpdateInformation::GetDataLengthH501_AccessConfirmation::DecodeH501_DescriptorRejection::CompareH501_ArrayOf_DescriptorInfo::CreateObjectH501_AccessRequest::PrintOnH501_DescriptorIDRejection::PrintOnH501_RequestInProgress::PrintOnH501_UsageIndicationConfirmation::GetDataLengthNames_H501_MessageBodyH501_ArrayOf_Descriptor::operator []H501_Descriptor &H501_ValidationRequest::CloneH501_AuthenticationRejection::CompareH501_ContactInformation::H501_ContactInformationH501_DescriptorUpdateAck::DecodeH501_UsageIndicationRejection::CloneH501_UsageIndication::PrintOnH501_ArrayOf_ClearToken::operator []H501_ArrayOf_GloballyUniqueID::CreateObjectH501_AccessConfirmation::H501_AccessConfirmationH501_UpdateInformation::CloneH501_NonStandardRequest::GetDataLengthH501_SecurityMode::PrintOnH501_ArrayOf_CircuitIdentifier::H501_ArrayOf_CircuitIdentifierH501_ArrayOf_UpdateInformation::CloneH501_CallInformation::CloneH501_ArrayOf_Pattern::H501_ArrayOf_PatternH501_ArrayOf_UsageField::operator []H501_UsageField &H501_UsageRequest::GetDataLengthH501_ArrayOf_DescriptorInfo::operator []H501_DescriptorInfo &H501_DescriptorConfirmation::CompareH501_UsageSpecification_when::DecodeH501_ArrayOf_AccessToken::operator []H501_AccessToken &H501_DescriptorRejection::H501_DescriptorRejectionH501_ArrayOf_NonStandardParameter::CreateObjectH501_UsageSpecification_when::PrintOnH501_ArrayOf_CryptoH323Token::CreateObjectH501_ValidationConfirmation::H501_ValidationConfirmationH501_UpdateInformation::H501_UpdateInformationH501_DescriptorUpdate::EncodeH501_ValidationConfirmation::GetDataLengthH501_CallInformation::CompareH501_DescriptorRejectionReason::CreateObjectH501_PriceElement::EncodeH501_ArrayOf_ServiceControlSession::H501_ArrayOf_ServiceControlSessionH501_ArrayOf_AddressTemplate::operator []H501_AddressTemplate &H501_ArrayOf_AliasAddress::operator []H501_ArrayOf_PriceInfoSpec::operator []H501_PriceInfoSpec &H501_DescriptorRequest::CloneH501_DescriptorIDRejection::CloneH501_AuthenticationRequest::DecodeH501_DescriptorIDConfirmation::GetDataLengthH501_AuthenticationRejectionReason::CreateObjectH501_ValidationRequest::PrintOnH501_UsageIndicationRejection::PrintOnH501_Descriptor::GetDataLengthH501_ArrayOf_AlternatePE::CreateObjectH501_ArrayOf_AlternatePE::CloneH501_DescriptorConfirmation::GetDataLengthH501_UsageSpecification_when::H501_UsageSpecification_whenH501_Descriptor::CompareH501_DescriptorIDRejectionReason::CreateObjectNames_H501_AuthenticationRejectionReasonNames_H501_ServiceRejectionReasonH501_PartyInformation::DecodeH501_ValidationRejection::EncodeH501_ArrayOf_CircuitIdentifier::CloneH501_UsageRequest::H501_UsageRequestH501_UsageRejection::CloneH501_AccessRejectionReason::CreateObjectH501_Message::PrintOnH501_PriceInfoSpec::GetDataLengthH501_UsageIndicationRejection::GetDataLengthH501_Pattern::CloneH501_AddressTemplate::PrintOnH501_ArrayOf_SecurityMode::CreateObjectH501_AuthenticationRequest::H501_AuthenticationRequestH501_ArrayOf_PriceElement::CloneH501_ArrayOf_SecurityMode::H501_ArrayOf_SecurityModeH501_TerminationCause::CompareH501_DescriptorRequest::PrintOnH501_AccessConfirmation::CloneH501_ServiceRelease::GetDataLengthH501_DescriptorInfo::GetDataLengthH501_ArrayOf_ContactInformation::CreateObjectH501_ServiceRequest::GetDataLengthH501_Pattern::CreateObjectH501_DescriptorUpdateAck::GetDataLengthH501_AccessRequest::CloneH501_ArrayOf_TransportAddress::H501_ArrayOf_TransportAddressH501_UnknownMessageReason::CloneH501_NonStandardRequest::H501_NonStandardRequestH501_AlternatePEInfo::H501_AlternatePEInfoH501_DescriptorUpdateAck::H501_DescriptorUpdateAckH501_UsageSpecification_when::GetDataLengthH501_ArrayOf_SecurityMode::operator []H501_SecurityMode &H501_AuthenticationConfirmation::PrintOnH501_Message::GetDataLengthH501_ArrayOf_Descriptor::CloneNames_H501_UsageIndicationRejectionReasonH501_ArrayOf_PriceElement::CreateObjectH501_ArrayOf_ClearToken::CreateObjectH501_ArrayOf_GenericData::CreateObjectH501_TimeZone::CloneH501_ValidationRejection::GetDataLengthH501_ArrayOf_Pattern::operator []H501_Pattern &H501_ArrayOf_Descriptor::CreateObjectH501_NonStandardRequest::DecodeH501_DescriptorRejection::CloneH501_UsageSpecification_when::CompareH501_AuthenticationConfirmation::EncodeH501_ServiceRejection::CloneH501_DescriptorIDRejection::H501_DescriptorIDRejectionH501_Pattern_range::H501_Pattern_rangeH501_Message::EncodeH501_ArrayOf_PASN_ObjectId::CloneH501_UsageRequest::PrintOnH501_RequestInProgress::EncodeH501_NonStandardRejection::CompareH501_GlobalTimeStamp::CloneH501_UsageSpecification::DecodeH501_PriceElement::CompareH501_SecurityMode::GetDataLengthH501_NonStandardRequest::PrintOnH501_DescriptorIDRejectionReason::CloneH501_UsageConfirmation::CloneH501_ValidationRejection::CompareH501_ArrayOf_RouteInformation::H501_ArrayOf_RouteInformationH501_GlobalTimeStamp::operator =H501_GlobalTimeStamp &H501_MessageCommonInfo::H501_MessageCommonInfoH501_PriceInfoSpec::PrintOnH501_DescriptorInfo::CompareH501_ServiceConfirmation::CloneH501_UsageCallStatus::CloneH501_ServiceRelease::PrintOnH501_DescriptorRequest::H501_DescriptorRequestH501_DescriptorRequest::CompareH501_AuthenticationRejectionReason::CloneH501_DescriptorInfo::DecodeH501_AddressTemplate::CompareH501_Pattern_range::GetDataLengthH501_ArrayOf_SupportedProtocols::H501_ArrayOf_SupportedProtocolsH501_ArrayOf_ServiceControlSession::CloneH501_ArrayOf_UpdateInformation::CreateObjectH501_ArrayOf_CryptoH323Token::operator []H501_RouteInformation::DecodeH501_UsageIndicationConfirmation::PrintOnH501_UsageField::H501_UsageFieldH501_UpdateInformation::EncodeH501_ServiceRejection::GetDataLengthH501_NonStandardConfirmation::GetDataLengthNames_H501_RouteInformation_messageTypeH501_ArrayOf_GloballyUniqueID::CloneH501_NonStandardConfirmation::H501_NonStandardConfirmationH501_ArrayOf_SupportedProtocols::operator []H501_UsageIndicationRejection::CompareH501_SecurityMode::DecodeH501_ArrayOf_UsageField::CloneH501_ArrayOf_Pattern::CloneH501_UsageRejection::PrintOnH501_UsageConfirmation::DecodeH501_ArrayOf_AccessToken::H501_ArrayOf_AccessTokenH501_PriceInfoSpec::EncodeH501_DescriptorUpdate::PrintOnH501_UpdateInformation_descriptorInfo::CloneH501_UnknownMessageReason::H501_UnknownMessageReasonH501_TerminationCause::PrintOnH501_UsageSpecification::PrintOnH501_ElementIdentifier::CloneH501_PartyInformation::PrintOnH501_ArrayOf_ServiceControlSession::CreateObjectH501_AccessRequest::EncodeH501_ArrayOf_TransportAddress::CreateObjectNames_H501_UsageCallStatusH501_Pattern_range::EncodeH501_PriceElement_units::CloneH501_AccessToken::CloneH501_UsageField::DecodeH501_UsageRejection::DecodeH501_UsageIndicationRejection::DecodeH501_ServiceRejectionReason::CloneH501_UsageField::CloneH501_ServiceRejection::DecodeH501_AlternatePEInfo::EncodeH501_GlobalTimeStamp::H501_GlobalTimeStampH501_UsageIndicationConfirmation::EncodeH501_AccessRejection::DecodeH501_ArrayOf_GenericData::CloneH501_ArrayOf_ContactInformation::CloneH501_UsageSpecification_when::CloneH501_Descriptor::DecodeH501_ArrayOf_PASN_ObjectId::operator []H501_AccessRejectionReason::H501_AccessRejectionReasonH501_AlternatePEInfo::PrintOnH501_ArrayOf_UpdateInformation::operator []H501_UpdateInformation &H501_UsageIndicationRejectionReason::CloneH501_RequestInProgress::H501_RequestInProgressH501_DescriptorIDConfirmation::DecodeH501_MessageCommonInfo::DecodeH501_MessageCommonInfo::CompareH501_AlternatePE::PrintOnNames_H501_DescriptorIDRejectionReasonNames_H501_AccessRejectionReasonH501_UsageIndication::CloneH501_UserInformation::H501_UserInformationH501_AccessToken::H501_AccessTokenH501_ServiceConfirmation::H501_ServiceConfirmationH501_ServiceRequest::PrintOnH501_DescriptorIDRequest::EncodeH501_DescriptorConfirmation::H501_DescriptorConfirmationH501_TerminationCause::H501_TerminationCauseH501_ServiceConfirmation::PrintOnH501_NonStandardRejection::H501_NonStandardRejectionH501_DescriptorRequest::EncodeH501_RouteInformation_messageType::CreateObjectH501_AccessRejectionReason::CloneH501_Role::H501_RoleNames_H501_ServiceReleaseReasonH501_ArrayOf_PriceElement::H501_ArrayOf_PriceElementH501_UsageIndication::GetDataLengthH501_UsageIndicationRejectionReason::CreateObjectH501_NonStandardRejectionReason::CloneH501_PartyInformation::H501_PartyInformationH501_AuthenticationRejection::EncodeH501_MessageBody::CloneH501_ServiceReleaseReason::H501_ServiceReleaseReasonH501_AccessRejection::PrintOnH501_ServiceRelease::DecodeH501_ProtocolVersion::CloneH501_ContactInformation::PrintOnH501_UsageIndicationConfirmation::H501_UsageIndicationConfirmationH501_RouteInformation::PrintOnH501_RequestInProgress::GetDataLengthH501_ArrayOf_AddressTemplate::CreateObjectH501_UserInformation::EncodeH501_AddressTemplate::DecodeH501_DescriptorInfo::CloneNames_H501_PriceElement_unitsH501_UnknownMessageResponse::EncodeH501_AlternatePE::DecodeH501_DescriptorConfirmation::PrintOnH501_ArrayOf_AlternatePE::operator []H501_AlternatePE &H501_ElementIdentifier::H501_ElementIdentifierH501_DescriptorIDRequest::CloneH501_NonStandardRejection::EncodeH501_ArrayOf_AliasAddress::CloneH501_UpdateInformation::PrintOnH501_ContactInformation::DecodeH501_AccessRequest::H501_AccessRequestH501_DescriptorRejection::EncodeH501_ArrayOf_PriceInfoSpec::CreateObjectH501_ValidationConfirmation::DecodeH501_TerminationCause::DecodeH501_ValidationConfirmation::EncodeH501_UsageSpecification::GetDataLengthH501_CallInformation::DecodeH501_DescriptorIDRequest::H501_DescriptorIDRequestH501_UsageIndication::H501_UsageIndicationH501_UnknownMessageResponse::CompareH501_CallInformation::PrintOnH501_UsageIndication::DecodeH501_UsageCallStatus::CreateObjectH501_AccessConfirmation::GetDataLengthH501_ValidationRequest::EncodeH501_AuthenticationRejection::GetDataLengthNames_H501_AccessTokenH501_PriceElement::GetDataLengthH501_ServiceRequest::DecodeH501_ArrayOf_PASN_ObjectId::CreateObjectH501_DescriptorUpdateAck::PrintOnH501_PriceElement_units::H501_PriceElement_unitsH501_UpdateInformation_descriptorInfo::CreateObjectH501_ValidationRequest::CompareH501_ContactInformation::EncodeH501_UserInformation::DecodeH501_ArrayOf_SupportedProtocols::CloneH501_AuthenticationConfirmation::GetDataLengthH501_AuthenticationRequest::PrintOnH501_DescriptorIDRejectionReason::H501_DescriptorIDRejectionReasonH501_Descriptor::PrintOnH501_ArrayOf_TransportAddress::CloneH501_DescriptorConfirmation::CloneH501_NonStandardRejectionReason::CreateObjectH501_DescriptorIDRequest::GetDataLengthH501_AlternatePEInfo::GetDataLengthH501_Role::CreateObjectH501_AccessRejection::H501_AccessRejectionH501_AlternatePEInfo::CompareH501_ServiceRequest::CloneH501_UsageField::GetDataLengthH501_ServiceConfirmation::GetDataLengthH501_ArrayOf_Pattern::CreateObjectH501_DescriptorUpdate::CloneH501_UsageSpecification::H501_UsageSpecificationH501_UsageRequest::CloneH501_Pattern_range::PrintOnH501_DescriptorUpdateAck::EncodeH501_ArrayOf_CircuitIdentifier::CreateObjectH501_UsageRejectReason::CloneH501_PriceInfoSpec::H501_PriceInfoSpecH501_ValidationConfirmation::CloneH501_ApplicationMessage::CloneH501_RouteInformation::CompareNames_H501_UnknownMessageReasonH501_ArrayOf_ContactInformation::H501_ArrayOf_ContactInformationH501_ElementIdentifier::operator =H501_ElementIdentifier &H501_UsageRejectReason::CreateObjectH501_ValidationConfirmation::PrintOnH501_Message::H501_MessageH501_MessageCommonInfo::CloneH501_ContactInformation::CompareH501_DescriptorIDRejection::EncodeH501_ServiceRejection::CompareH501_ValidationRequest::GetDataLengthH501_DescriptorUpdate::GetDataLengthH501_AccessConfirmation::EncodeH501_AccessRejection::EncodeH501_SecurityMode::CloneH501_UsageIndicationConfirmation::DecodeH501_AccessConfirmation::CompareH501_RouteInformation::H501_RouteInformationH501_UsageIndicationRejection::EncodeH501_ServiceRejectionReason::CreateObjectH501_UsageRejection::H501_UsageRejectionH501_ArrayOf_UsageField::CreateObjectH501_ArrayOf_NonStandardParameter::H501_ArrayOf_NonStandardParameterH501_ArrayOf_ClearToken::CloneH501_UnknownMessageResponse::CloneH501_ArrayOf_SecurityMode::CloneH501_ApplicationMessage::H501_ApplicationMessageH501_Pattern_range::CloneH501_NonStandardConfirmation::PrintOnH501_NonStandardRejection::CloneH501_AddressTemplate::CloneH501_AuthenticationRejectionReason::H501_AuthenticationRejectionReasonH501_UsageConfirmation::GetDataLengthH501_ArrayOf_PriceElement::operator []H501_PriceElement &H501_DescriptorIDConfirmation::H501_DescriptorIDConfirmationH501_AlternatePE::CloneH501_ValidationRejection::DecodeH501_ArrayOf_AccessToken::CreateObjectH501_ArrayOf_CryptoH323Token::H501_ArrayOf_CryptoH323TokenH501_UsageSpecification_when::EncodeH501_PriceElement::DecodeH501_AuthenticationConfirmation::H501_AuthenticationConfirmationH501_UsageRejectReason::H501_UsageRejectReasonH501_UsageField::CompareH501_DescriptorIDRejection::GetDataLengthH501_AuthenticationRequest::EncodeH501_DescriptorIDRejection::CompareH501_PartyInformation::CloneH501_DescriptorRejection::PrintOnH501_ProtocolVersion::H501_ProtocolVersionH501_CallInformation::H501_CallInformationH501_UsageConfirmation::PrintOnH501_DescriptorInfo::PrintOnH501_AccessRequest::CompareH501_UsageRequest::DecodeH501_ServiceReleaseReason::CreateObjectH501_AuthenticationRejection::CloneH501_Pattern::H501_PatternH501_UsageRequest::CompareH501_ArrayOf_CircuitIdentifier::operator []H225_CircuitIdentifier &H501_PartyInformation::EncodeH501_AuthenticationRequest::GetDataLengthH501_DescriptorUpdate::H501_DescriptorUpdateNames_H501_DescriptorRejectionReasonH501_UsageSpecification::CloneH501_ArrayOf_NonStandardParameter::CloneH501_UpdateInformation_updateType::H501_UpdateInformation_updateTypeH501_PriceElement::H501_PriceElementH501_AddressTemplate::EncodeH501_ArrayOf_AccessToken::CloneH501_ArrayOf_AddressTemplate::CloneH501_DescriptorIDRequest::PrintOnH501_AuthenticationRejection::PrintOnH501_ArrayOf_NonStandardParameter::operator []H501_RouteInformation_messageType::CloneH501_ArrayOf_PASN_ObjectId::H501_ArrayOf_PASN_ObjectIdH501_ArrayOf_DescriptorInfo::CloneNames_H501_UpdateInformation_updateTypeH501_ArrayOf_UsageField::H501_ArrayOf_UsageFieldH501_UsageIndicationRejectionReason::H501_UsageIndicationRejectionReasonNames_H501_PatternH501_Role::CloneH501_DescriptorRejectionReason::H501_DescriptorRejectionReasonH501_ServiceConfirmation::EncodeH501_RouteInformation::EncodeH501_AlternatePE::CompareH501_ArrayOf_GloballyUniqueID::H501_ArrayOf_GloballyUniqueIDNames_H501_NonStandardRejectionReasonH501_ArrayOf_GenericData::H501_ArrayOf_GenericDataH501_RequestInProgress::DecodeH501_ArrayOf_AliasAddress::CreateObjectH501_DescriptorUpdateAck::CloneH501_DescriptorRequest::GetDataLengthH501_UserInformation::GetDataLengthH501_SecurityMode::H501_SecurityModeH501_DescriptorRejection::GetDataLengthH501_UsageRequest::EncodeH501_MessageBody::CreateObjectH501_AuthenticationRejection::H501_AuthenticationRejectionH501_ServiceRequest::CompareH501_ArrayOf_AlternatePE::H501_ArrayOf_AlternatePEH501_ArrayOf_SupportedProtocols::CreateObjectNames_H501_RoleH501_AccessRejection::CloneH501_AuthenticationConfirmation::CloneH501_ValidationRequest::H501_ValidationRequestH501_UsageConfirmation::H501_UsageConfirmationH501_Descriptor::H501_DescriptorH501_AccessRejection::CompareH501_UsageSpecification::EncodeH501_MessageCommonInfo::GetDataLengthNames_H501_UpdateInformation_descriptorInfoH501_DescriptorRejectionReason::CloneH501_DescriptorInfo::H501_DescriptorInfoH501_UserInformation::CloneH501_ArrayOf_DescriptorInfo::H501_ArrayOf_DescriptorInfoH501_DescriptorIDRequest::DecodeH501_DescriptorIDConfirmation::CloneH501_MessageCommonInfo::PrintOnH501_ArrayOf_RouteInformation::CloneH501_PriceInfoSpec::DecodeH501_ArrayOf_Descriptor::H501_ArrayOf_DescriptorH501_DescriptorInfo::EncodeH501_AccessRequest::GetDataLengthH501_NonStandardRequest::CloneH501_TimeZone::operator =H501_TimeZone &H501_NonStandardConfirmation::CloneH501_AddressTemplate::GetDataLengthH501_DescriptorIDConfirmation::CompareH501_TerminationCause::CloneH501_RequestInProgress::CompareH501_UpdateInformation::DecodeH501_UpdateInformation::CompareH501_NonStandardConfirmation::EncodeH501_Pattern_range::CompareH501_ArrayOf_ServiceControlSession::operator []H501_UpdateInformation_updateType::CloneH501_UserInformation::CompareH501_AccessRejection::GetDataLengthH501_UnknownMessageResponse::PrintOnH501_ArrayOf_RouteInformation::operator []H501_RouteInformation &H501_RouteInformation::CloneH501_Message::DecodeH501_DescriptorIDRejection::DecodeH501_UsageIndicationRejection::H501_UsageIndicationRejectionH501_ArrayOf_CryptoH323Token::CloneH501_ValidationRejectionReason::CloneH501_ServiceRelease::EncodeH501_TerminationCause::EncodeH501_AlternatePEInfo::CloneH501_UsageConfirmation::EncodeH501_DescriptorRejection::DecodeH501_AuthenticationRequest::CompareH501_Pattern_range::DecodeH501_RouteInformation::GetDataLengthH501_ArrayOf_GenericData::operator []H501_UsageRejection::CompareH501_ServiceRejection::PrintOnH501_UsageRejection::EncodeH501_UsageIndicationConfirmation::CloneH501_NonStandardRejection::PrintOnH501_PartyInformation::GetDataLengthH501_ValidationRejectionReason::H501_ValidationRejectionReasonH501_ContactInformation::GetDataLengthH501_AddressTemplate::H501_AddressTemplateH501_DescriptorConfirmation::EncodeH501_CallInformation::GetDataLengthH501_NonStandardRejectionReason::H501_NonStandardRejectionReasonH501_ValidationRejection::PrintOnH501_PriceInfoSpec::CompareH501_UpdateInformation_updateType::CreateObjectH501_AuthenticationRejection::DecodeH501_NonStandardRejection::GetDataLengthH501_ArrayOf_AliasAddress::H501_ArrayOf_AliasAddressH501_DescriptorIDConfirmation::EncodeH501_TimeZone::H501_TimeZoneH501_ArrayOf_ContactInformation::operator []H501_ContactInformation &H501_Descriptor::EncodeH501_PriceInfoSpec::CloneH501_ArrayOf_PriceInfoSpec::CloneH501_MessageBody::H501_MessageBodyH501_DescriptorRequest::DecodeH501_PriceElement::PrintOnH501_UnknownMessageResponse::GetDataLengthH501_SecurityMode::EncodeH501_Message::CompareH501_MessageCommonInfo::EncodeH501_Message::CloneH501_UnknownMessageResponse::DecodeH501_AlternatePE::EncodeH501_AlternatePEInfo::DecodeH501_UnknownMessageReason::CreateObjectH501_DescriptorUpdate::DecodeH501_TerminationCause::GetDataLengthH501_UsageField::EncodeNames_H501_UsageRejectReasonH501_UsageIndication::CompareH501_ServiceReleaseReason::CloneH501_ServiceRejection::H501_ServiceRejectionH501_AlternatePE::H501_AlternatePEH501_NonStandardRequest::EncodeH501_ValidationRejectionReason::CreateObjectH501_SecurityMode::CompareH501_AccessRequest::DecodeH501_NonStandardRejection::DecodeH501_ContactInformation::CloneH501_ValidationRequest::DecodeH501_UsageRejection::GetDataLengthH501_ServiceRejectionReason::H501_ServiceRejectionReasonH501_AccessConfirmation::PrintOnH501_ServiceRejection::EncodeH501_ServiceRequest::H501_ServiceRequestH501_UsageSpecification::CompareH501_ValidationConfirmation::CompareNames_H501_ValidationRejectionReasonH501_PriceElement::CloneH501_ServiceRelease::CompareD:\openh323\src\h501pdu.cxx"h501pdu.h"H501PDU::BuildValidationRejectionH501_ValidationRejection &unsigned int seqnumH501PDU::BuildUsageRejectionH501_UsageRejection &H501PDU::BuildDescriptorIDRequestH501_DescriptorIDRequest &const H323TransportAddressArray &replyH501PDU::GetRequestInProgressDelayH501PDU::GetPDUH501PDU::BuildRequestInProgressH501_RequestInProgress &H501PDU::BuildDescriptorIDRejectionH501_DescriptorIDRejection &H501PDU::BuildUsageIndicationRejectionH501_UsageIndicationRejection &H501PDU::BuildRequestconst H323TransportAddressArray &replyAddrH501PDU::BuildDescriptorRejectionH501_DescriptorRejection &H501PDU::GetSequenceNumberH501PDU::BuildUsageIndicationConfirmationH501_UsageIndicationConfirmation &H501PDU::DeletePDUH501PDU::BuildUsageRequestH501_UsageRequest &H501PDU::ClonePDUH501PDU::BuildServiceRejectionH501_ServiceRejection &H501PDU::BuildServiceReleaseH501_ServiceRelease &H501PDU::BuildNonStandardRequestH501_NonStandardRequest &H501PDU::BuildDescriptorRequestH501_DescriptorRequest &H501PDU::BuildDescriptorUpdateH501_DescriptorUpdate &H501PDU::BuildDescriptorUpdateAckH501_DescriptorUpdateAck &H501PDU::BuildNonStandardConfirmationH501_NonStandardConfirmation &H501PDU::BuildUnknownMessageResponseH501_UnknownMessageResponse &H501PDU::BuildServiceConfirmationH501_ServiceConfirmation &H501PDU::BuildNonStandardRejectionH501_NonStandardRejection &H501PDU::BuildUsageConfirmationH501_UsageConfirmation &H501PDU::H501PDUH501PDU::BuildValidationRequestH501_ValidationRequest &H501PDU::BuildAuthenticationRequestH501_AuthenticationRequest &H501PDU::GetChoiceH501PDU::CloneH501PDU::BuildPDUH501PDU::BuildValidationConfirmationH501_ValidationConfirmation &H501PDU::BuildAccessRequestH501_AccessRequest &H501PDU::BuildAccessRejectionH501_AccessRejection &H501PDU::BuildAuthenticationConfirmationH501_AuthenticationConfirmation &H501PDU::BuildAccessConfirmationH501_AccessConfirmation &H501PDU::BuildAuthenticationRejectionH501_AuthenticationRejection &H501PDU::BuildServiceRequestH501_ServiceRequest &H501PDU::BuildDescriptorConfirmationH501_DescriptorConfirmation &H501PDU::GetProtocolNameH501PDU::BuildDescriptorIDConfirmationH501_DescriptorIDConfirmation &D:\openh323\src\jitter.cxx"jitter.h"RTP_JitterBuffer::PreReadRTP_JitterBuffer::Entry *¤tReadFrameRTP_JitterBuffer::SetDelayunsigned int minJitterDelayunsigned int maxJitterDelayRTP_JitterBuffer::ResumePHandleAggregator *aggregatorPAggregatedHandleRTP_JitterBuffer::JitterThreadMainRTP_JitterBuffer::RTP_JitterBufferRTP_Session &sessPINDEX stackSizeRTP_JitterBuffer::DeInitEntry *& RTP_JitterBuffer::~RTP_JitterBufferRTP_JitterBuffer::InitBOOL &markerWarningRTP_JitterBufferAnalyserRTP_JitterBufferAnalyser::PCLASSINFORTP_JitterBufferAnalyser::RTP_JitterBufferAnalyserRTP_JitterBufferAnalyser::InDWORD timeconst char *extraRTP_JitterBufferAnalyser::OutRTP_JitterBufferAnalyser::PrintOnRTP_JitterBufferAnalyser::InfoRTP_JitterBufferAnalyser::Info::InfoRTP_JitterBufferAnalyser::Info::timeDWORDRTP_JitterBufferAnalyser::Info::tickRTP_JitterBufferAnalyser::Info::depthRTP_JitterBufferAnalyser::Info::extraRTP_JitterBufferAnalyser::inRTP_JitterBufferAnalyser::Info %[1000]RTP_JitterBufferAnalyser::outRTP_JitterBufferAnalyser::inPosRTP_JitterBufferAnalyser::outPosRTP_JitterBuffer::ReadDataRTP_DataFrame &frameRTP_AggregatedHandleRTP_AggregatedHandle::RTP_AggregatedHandlePHandleAggregator *_ownerRTP_JitterBuffer &_jitterBufferRTP_AggregatedHandle::~RTP_AggregatedHandleRTP_AggregatedHandle::GetFDsRTP_AggregatedHandle::InitRTP_AggregatedHandle::PreReadRTP_AggregatedHandle::OnReadRTP_AggregatedHandle::DeInitRTP_AggregatedHandle::GetTimeoutRTP_AggregatedHandle::RemoveRTP_AggregatedHandle::jitterBufferRTP_JitterBuffer &RTP_AggregatedHandle::currentReadFrameRTP_JitterBuffer::Entry *RTP_AggregatedHandle::markerWarningRTP_AggregatedHandle::dataFdPAggregatorFDRTP_AggregatedHandle::controlFdRTP_AggregatedHandle::ownerRTP_JitterBuffer::OnReadBOOL loopD:\openh323\src\lid.cxxD:\openh323\src\mcspdu.cxx"mcspdu.h"MCS_TGrq::DecodeMCS_TRrq::GetDataLengthNames_MCS_DiagnosticMCS_Connect_Result::GetDataLengthMCS_TIcf::PrintOnMCS_TokenAttributes_giving::CompareMCS_TokenAttributes_grabbed::GetDataLengthMCS_TokenAttributes_inhibited::CloneMCS_TokenAttributes_given::EncodeMCS_SDin::PrintOnMCS_CErq::CloneMCS_CLrq::CompareMCS_ArrayOf_ChannelId::CloneMCS_EDrq::CompareMCS_ChannelAttributes_assigned::EncodeMCS_RJum::MCS_RJumMCS_TIcf::EncodeMCS_TokenAttributes_given::CloneMCS_ChannelId::operator =MCS_ChannelId &MCS_PDin::CloneMCS_TGcf::EncodeMCS_USrq::MCS_USrqMCS_AUrq::MCS_AUrqMCS_ChannelAttributes::CloneMCS_CJrq::CompareMCS_PTin::GetDataLengthMCS_TVcf::PrintOnMCS_TokenAttributes_grabbed::PrintOnMCS_SDrq::PrintOnMCS_ChannelAttributes_static::MCS_ChannelAttributes_staticMCS_CArq::MCS_CArqMCS_ChannelAttributes_assigned::CloneMCS_CDrq::EncodeMCS_MCcf::DecodeMCS_PCin::PrintOnMCS_DPum::GetDataLengthMCS_ArrayOf_ChannelId::CreateObjectMCS_TPrq::MCS_TPrqMCS_CDin::GetDataLengthMCS_Connect_Initial::DecodeMCS_MCcf::CompareMCS_Connect_Additional::CompareMCS_TVrq::EncodeMCS_TVrs::PrintOnMCS_ArrayOf_TokenAttributes::operator []MCS_TokenAttributes &MCS_CErq::PrintOnMCS_TokenId::MCS_TokenIdMCS_TRcf::EncodeMCS_TPin::EncodeMCS_TRrq::MCS_TRrqMCS_DataPriority::CloneMCS_ChannelAttributes_private::CloneMCS_MCrq::GetDataLengthMCS_TVrs::GetDataLengthMCS_TokenAttributes_given::CompareMCS_Connect_Response::CloneMCS_ChannelAttributes_assigned::PrintOnMCS_TokenAttributes::CloneMCS_CArq::DecodeMCS_TTcf::CompareMCS_ChannelAttributes_userId::GetDataLengthMCS_CAin::GetDataLengthMCS_CCcf::GetDataLengthMCS_Connect_Additional::GetDataLengthMCS_CEin::PrintOnMCS_PDin::CompareMCS_Connect_Response::CompareMCS_TVrq::CompareMCS_USin::CloneMCS_TPrq::PrintOnMCS_TVcf::MCS_TVcfMCS_USrq::GetDataLengthMCS_ArrayOf_UserId::operator []MCS_UserId &MCS_ChannelAttributes_static::CompareMCS_TokenAttributes_ungivable::DecodeMCS_MCrq::CloneMCS_ConnectMCSPDU::MCS_ConnectMCSPDUMCS_ChannelAttributes_userId::CloneMCS_TVcf::CloneMCS_TVrs::DecodeMCS_MCrq::DecodeMCS_Connect_Response::GetDataLengthMCS_PCin::MCS_PCinMCS_TokenAttributes_grabbed::CloneMCS_AUcf::DecodeMCS_Connect_Response::EncodeMCS_Connect_Initial::MCS_Connect_InitialMCS_Connect_Result::EncodeMCS_ArrayOf_TokenAttributes::MCS_ArrayOf_TokenAttributesMCS_TVcf::GetDataLengthMCS_ConnectMCSPDU::CreateObjectNames_MCS_ResultMCS_TRrq::DecodeMCS_DPum::CompareMCS_PCin::GetDataLengthNames_MCS_ConnectMCSPDUMCS_SDin::MCS_SDinMCS_DomainMCSPDU::CreateObjectMCS_USrq::CompareMCS_MCcf::GetDataLengthMCS_ArrayOf_TokenId::CreateObjectMCS_DPum::DecodeMCS_Connect_Response::MCS_Connect_ResponseMCS_TTrq::MCS_TTrqMCS_PrivateChannelId::MCS_PrivateChannelIdMCS_RJum::DecodeMCS_SDrq::GetDataLengthMCS_ChannelAttributes_private::CompareMCS_TIcf::GetDataLengthMCS_TPrq::EncodeMCS_CJrq::DecodeMCS_TIrq::EncodeMCS_DomainMCSPDU::MCS_DomainMCSPDUMCS_TGcf::CompareMCS_TVcf::DecodeMCS_DataPriority::operator =MCS_DataPriority &MCS_DUrq::CompareMCS_TokenAttributes_ungivable::CloneMCS_TokenAttributes_inhibited::PrintOnMCS_TokenAttributes_grabbed::DecodeMCS_ArrayOf_TokenId::CloneMCS_TIrq::PrintOnMCS_SDin::DecodeMCS_TokenStatus::CloneMCS_TPrq::GetDataLengthMCS_TokenAttributes_giving::MCS_TokenAttributes_givingMCS_TokenAttributes_inhibited::DecodeMCS_TokenAttributes_grabbed::MCS_TokenAttributes_grabbedMCS_MTrq::CompareMCS_CLrq::EncodeMCS_EDrq::EncodeMCS_ArrayOf_UserId::CreateObjectMCS_Result::operator =MCS_Result &MCS_TRrq::CloneMCS_TVin::EncodeMCS_DUrq::DecodeMCS_Diagnostic::operator =MCS_Diagnostic &MCS_AUcf::PrintOnMCS_PDin::EncodeMCS_CAin::EncodeMCS_CCcf::EncodeMCS_Connect_Initial::CloneMCS_ChannelAttributes_static::CloneMCS_SDin::CloneMCS_CDrq::PrintOnMCS_SDrq::CloneMCS_MCcf::EncodeMCS_TokenAttributes_giving::CloneMCS_TVrs::MCS_TVrsMCS_ChannelAttributes_private::DecodeMCS_Connect_Result::CompareMCS_TRcf::PrintOnMCS_TPin::PrintOnMCS_MCrq::CompareMCS_ChannelAttributes::MCS_ChannelAttributesMCS_AUcf::GetDataLengthMCS_ArrayOf_TokenId::operator []MCS_TokenId &MCS_CAin::PrintOnMCS_CCcf::PrintOnMCS_AUrq::CloneMCS_TRcf::CloneMCS_ArrayOf_ChannelAttributes::MCS_ArrayOf_ChannelAttributesMCS_TPin::CloneMCS_TIrq::GetDataLengthMCS_TVrq::GetDataLengthMCS_PCin::DecodeMCS_TokenAttributes_giving::DecodeMCS_PTin::DecodeMCS_TVin::CloneMCS_CEin::EncodeMCS_DUin::EncodeMCS_Diagnostic::MCS_DiagnosticMCS_CLrq::PrintOnMCS_EDrq::PrintOnMCS_RJum::GetDataLengthMCS_ChannelAttributes_static::EncodeMCS_TGcf::CloneMCS_DUin::CompareMCS_ArrayOf_ChannelAttributes::CreateObjectMCS_CDin::MCS_CDinMCS_MTcf::CloneMCS_CJrq::CloneMCS_DomainParameters::DecodeMCS_MTrq::DecodeMCS_RJum::PrintOnMCS_TGrq::CloneMCS_ConnectMCSPDU::CloneMCS_USrq::DecodeMCS_TIcf::CloneMCS_TokenAttributes_ungivable::PrintOnMCS_DynamicChannelId::operator =MCS_DynamicChannelId &MCS_TokenStatus::operator =MCS_TokenStatus &MCS_DPum::PrintOnMCS_Connect_Result::DecodeMCS_CErq::DecodeMCS_CJcf::EncodeMCS_ArrayOf_ChannelAttributes::operator []MCS_ChannelAttributes &MCS_CCrq::DecodeMCS_CEin::MCS_CEinMCS_TVcf::CompareMCS_TTrq::CloneMCS_TIcf::MCS_TIcfMCS_PDin::PrintOnMCS_CJcf::CloneMCS_CLrq::MCS_CLrqMCS_ArrayOf_ChannelId::MCS_ArrayOf_ChannelIdMCS_EDrq::MCS_EDrqNames_MCS_DataPriorityMCS_UserId::MCS_UserIdMCS_ChannelAttributes_userId::PrintOnMCS_RJum::EncodeMCS_CJcf::CompareMCS_MCcf::MCS_MCcfMCS_CArq::PrintOnMCS_MCcf::PrintOnMCS_AUrq::DecodeMCS_CErq::CompareMCS_CLrq::CloneMCS_EDrq::CloneMCS_CEin::GetDataLengthMCS_TTrq::CompareMCS_SDin::CompareMCS_USin::DecodeMCS_DPum::MCS_DPumMCS_TokenAttributes_given::PrintOnNames_MCS_DomainMCSPDUMCS_TVrs::CompareMCS_Connect_Result::MCS_Connect_ResultMCS_DynamicChannelId::CloneMCS_ArrayOf_ChannelAttributes::CloneMCS_TTcf::EncodeMCS_TTcf::PrintOnMCS_ArrayOf_TokenAttributes::CreateObjectMCS_TVin::CompareMCS_CEin::CloneMCS_MTcf::EncodeMCS_PrivateChannelId::operator =MCS_PrivateChannelId &MCS_TGrq::PrintOnMCS_CJcf::GetDataLengthMCS_StaticChannelId::MCS_StaticChannelIdMCS_CAin::MCS_CAinMCS_CCcf::MCS_CCcfMCS_CJrq::EncodeMCS_Connect_Response::PrintOnMCS_ChannelAttributes_static::PrintOnMCS_AssignedChannelId::CloneMCS_ArrayOf_UserId::MCS_ArrayOf_UserIdMCS_CEin::CompareMCS_Connect_Additional::EncodeMCS_TGcf::DecodeMCS_CCrq::EncodeMCS_Result::CloneMCS_TokenStatus::MCS_TokenStatusMCS_DUrq::GetDataLengthMCS_TTcf::MCS_TTcfMCS_ChannelAttributes_static::GetDataLengthMCS_CDrq::DecodeMCS_DPum::CloneMCS_AUcf::CloneMCS_TTcf::CloneMCS_TGrq::EncodeMCS_USrq::CloneMCS_CCrq::CloneMCS_MTrq::PrintOnMCS_SDrq::MCS_SDrqMCS_TIcf::DecodeMCS_Reason::operator =MCS_Reason &MCS_TokenId::operator =MCS_PCin::CompareMCS_MCrq::MCS_MCrqMCS_TRcf::DecodeMCS_TPin::DecodeMCS_ChannelAttributes_private::GetDataLengthMCS_ChannelAttributes_userId::CompareMCS_DUrq::PrintOnMCS_SDrq::EncodeMCS_CArq::EncodeMCS_TRcf::GetDataLengthMCS_TokenAttributes_giving::GetDataLengthMCS_TPin::GetDataLengthMCS_TGcf::GetDataLengthMCS_Diagnostic::CloneNames_MCS_TokenStatusMCS_MTcf::MCS_MTcfMCS_MTrq::GetDataLengthMCS_Segmentation::MCS_SegmentationMCS_ChannelAttributes_private::PrintOnMCS_DUin::MCS_DUinMCS_CLrq::GetDataLengthMCS_TRrq::EncodeMCS_EDrq::GetDataLengthMCS_Segmentation::CloneMCS_TGcf::PrintOnMCS_TVin::PrintOnMCS_TokenAttributes_given::DecodeMCS_TokenAttributes_grabbed::CompareMCS_TVrq::CloneMCS_CCrq::MCS_CCrqMCS_TokenAttributes::CreateObjectMCS_TIrq::CloneMCS_TGrq::CompareMCS_Connect_Initial::PrintOnMCS_TokenAttributes_inhibited::CompareMCS_MTrq::CloneMCS_TVrq::DecodeMCS_TokenAttributes_ungivable::MCS_TokenAttributes_ungivableMCS_TGrq::GetDataLengthMCS_USin::PrintOnMCS_AUcf::EncodeMCS_CDrq::MCS_CDrqMCS_TIrq::DecodeMCS_TVin::MCS_TVinMCS_TIrq::CompareMCS_CJrq::PrintOnMCS_TVrs::EncodeNames_MCS_ChannelAttributesMCS_TokenAttributes::MCS_TokenAttributesMCS_MCrq::EncodeMCS_PCin::CloneMCS_Connect_Response::DecodeMCS_TokenAttributes_giving::PrintOnMCS_CDrq::GetDataLengthMCS_Connect_Additional::MCS_Connect_AdditionalMCS_PTin::PrintOnMCS_Connect_Initial::EncodeMCS_DomainParameters::GetDataLengthMCS_TokenAttributes_ungivable::EncodeMCS_CDin::CompareMCS_DomainParameters::CompareMCS_CDrq::CloneMCS_CArq::CloneMCS_TIcf::CompareMCS_Connect_Result::CloneMCS_CErq::GetDataLengthMCS_TRrq::CompareMCS_TVcf::EncodeMCS_TPrq::DecodeMCS_MTcf::CompareMCS_DUrq::MCS_DUrqMCS_CJcf::MCS_CJcfMCS_ChannelAttributes_userId::DecodeMCS_Connect_Additional::PrintOnMCS_ArrayOf_TokenAttributes::CloneMCS_CDin::DecodeMCS_PTin::MCS_PTinMCS_DynamicChannelId::MCS_DynamicChannelIdMCS_TTrq::EncodeMCS_CCrq::PrintOnMCS_AUrq::PrintOnMCS_PTin::EncodeMCS_DPum::EncodeMCS_TokenAttributes_given::GetDataLengthMCS_ChannelAttributes_assigned::CompareMCS_TokenAttributes_ungivable::CompareMCS_TTrq::DecodeMCS_CErq::MCS_CErqMCS_TokenAttributes_given::MCS_TokenAttributes_givenMCS_TPrq::CompareMCS_DUin::DecodeMCS_PDin::DecodeMCS_DomainParameters::PrintOnMCS_CJrq::GetDataLengthMCS_USin::MCS_USinMCS_Connect_Initial::GetDataLengthMCS_Reason::MCS_ReasonMCS_TokenAttributes_grabbed::EncodeMCS_DomainMCSPDU::CloneMCS_TVin::GetDataLengthMCS_RJum::CloneMCS_TTcf::GetDataLengthMCS_ChannelAttributes_static::DecodeMCS_ChannelAttributes_assigned::MCS_ChannelAttributes_assignedMCS_MCcf::CloneMCS_ChannelAttributes::CreateObjectMCS_CCrq::GetDataLengthMCS_AUcf::MCS_AUcfMCS_TGrq::MCS_TGrqMCS_DUin::GetDataLengthMCS_Result::MCS_ResultMCS_MTcf::GetDataLengthMCS_TokenAttributes_giving::EncodeMCS_PTin::CompareMCS_CDin::PrintOnMCS_MTrq::MCS_MTrqMCS_USin::CompareMCS_DomainParameters::CloneMCS_CEin::DecodeMCS_MTcf::PrintOnMCS_MCrq::PrintOnMCS_TRcf::MCS_TRcfMCS_TPin::MCS_TPinMCS_UserId::operator =MCS_DUrq::EncodeMCS_ChannelAttributes_assigned::GetDataLengthMCS_Reason::CloneMCS_TTrq::PrintOnMCS_TPrq::CloneMCS_ArrayOf_ChannelId::operator []MCS_ChannelAttributes_private::MCS_ChannelAttributes_privateMCS_Connect_Additional::CloneMCS_PCin::EncodeMCS_CJrq::MCS_CJrqMCS_CArq::CompareMCS_RJum::CompareNames_MCS_TokenAttributesMCS_DataPriority::MCS_DataPriorityMCS_CLrq::DecodeMCS_TVin::DecodeMCS_EDrq::DecodeMCS_StaticChannelId::operator =MCS_StaticChannelId &MCS_TokenAttributes_inhibited::GetDataLengthMCS_TokenAttributes_inhibited::EncodeMCS_CAin::DecodeMCS_CCcf::DecodeMCS_ChannelAttributes_userId::EncodeMCS_ChannelAttributes_userId::MCS_ChannelAttributes_userIdMCS_USin::GetDataLengthMCS_AUrq::GetDataLengthMCS_CDin::EncodeMCS_CJcf::PrintOnMCS_CCrq::CompareMCS_CErq::EncodeMCS_AssignedChannelId::operator =MCS_AssignedChannelId &MCS_TTcf::DecodeMCS_PrivateChannelId::CloneMCS_MTrq::EncodeMCS_TGcf::MCS_TGcfMCS_CDin::CloneMCS_TokenId::CloneNames_MCS_ReasonMCS_TTrq::GetDataLengthMCS_DUin::CloneMCS_SDrq::DecodeMCS_DomainParameters::EncodeMCS_Connect_Result::PrintOnMCS_SDrq::CompareMCS_ArrayOf_UserId::CloneMCS_PTin::CloneMCS_CDrq::CompareMCS_AUcf::CompareMCS_AssignedChannelId::MCS_AssignedChannelIdMCS_CAin::CloneMCS_CArq::GetDataLengthMCS_CCcf::CloneMCS_UserId::CloneMCS_TokenAttributes_inhibited::MCS_TokenAttributes_inhibitedMCS_TokenAttributes_ungivable::GetDataLengthMCS_PDin::MCS_PDinMCS_TRrq::PrintOnMCS_ArrayOf_TokenId::MCS_ArrayOf_TokenIdMCS_TIrq::MCS_TIrqMCS_Connect_Additional::DecodeMCS_CJcf::DecodeMCS_ChannelAttributes_assigned::DecodeMCS_TRcf::CompareMCS_CAin::CompareMCS_CCcf::CompareMCS_TPin::CompareMCS_ChannelAttributes_private::EncodeMCS_TVrq::MCS_TVrqMCS_MTcf::DecodeMCS_SDin::EncodeMCS_DomainParameters::MCS_DomainParametersMCS_SDin::GetDataLengthMCS_PDin::GetDataLengthMCS_Connect_Initial::CompareMCS_USin::EncodeMCS_USrq::PrintOnMCS_DUrq::CloneMCS_TVrs::CloneMCS_ChannelId::MCS_ChannelIdMCS_ChannelId::CloneMCS_StaticChannelId::CloneMCS_TVrq::PrintOnMCS_DUin::PrintOnMCS_USrq::EncodeMCS_AUrq::EncodeD:\openh323\src\mediafmt.cxx"rtp.h"OpalMediaOptionEnum::PrintOnOpalG7231_6k3OpalVideoFormat::MergeboolOpalG7231_5k3OpalVideoFormat::AdaptivePacketDelayOptionconst char *constOpalMediaOptionString::CloneOpalMediaOptionEnum::OpalMediaOptionEnumbool readOnlyconst char *const *enumerationsPINDEX countMergeType mergePINDEX valueOpalG711ALaw64kOpalMediaOptionString::CompareValueconst OpalMediaOption &optionOpalMediaFormatList::Reorderconst PStringArray &orderOpalG711uLaw64kOpalMediaFormat::SetOptionBooleanbool valueinstancePMediaFormatInstantiateMeOpalMediaFormat::GetAllRegisteredMediaFormatsOpalMediaFormatList ©OpalMediaFormatListOpalMediaFormatList::operator +=OpalMediaFormatList &const OpalMediaFormatList &formatsconst OpalMediaFormat &formatOpalMediaFormatList::operator -=OpalMediaFormat::MergeOpalMediaFormat::SetOptionValueOpalMediaOptionString::SetValueOpalMediaFormat::SetRegisteredMediaFormatOpalT120WildcardMatchconst PStringArray &wildcardsPMediaFormatInstantiateMe::PMediaFormatInstantiateMeOpalVideoFormat::MaxFrameSizeOptionOpalMediaOptionEnum::AssignOpalMediaOptionEnum::ReadFromOpalMediaFormat::SetOptionEnumOpalMediaOption::AsStringGetMediaFormatsListOpalMediaFormat::SetOptionIntegerint valueOpalMediaFormat::GetOptionValuePString &valueOpalVideoFormat::ClockRateOptionOpalVideoFormat::FrameWidthOptionOpalG7231A_6k3OpalMediaOptionEnum::CloneOpalVideoFormat::DynamicVideoQualityOptionOpalG7231A_5k3OpalMediaOption::FromStringOpalMediaFormatList::FindFormatconst PString &searchRTP_DataFrame::PayloadTypes ptunsigned int clockRateOpalMediaFormat::operator =OpalMediaOption::CompareOpalVideoFormat::EncodingQualityOptionOpalG729BOpalG729AOpalG729OpalG728OpalMediaOption::OpalMediaOptionOpalMediaOption::MergeGetMediaFormatsListMutexOpalMediaOptionEnum::SetValueOpalVideoFormat::FrameHeightOptionOpalMediaFormat::GetOptionStringconst PString &dfltOpalMediaFormat::SetOptionStringOpalMediaFormat::GetOptionEnumPINDEX dfltOpalMediaFormat::SetOptionRealdouble valueOpalMediaFormat::AddOptionOpalMediaOption *optionOpalMediaOptionString::PrintOnOpalGSM0610OpalMediaFormat::GetRegisteredMediaFormatsOpalMediaFormat::List &listOpalVideoFormat::OpalVideoFormatconst char *fullNameRTP_DataFrame::PayloadTypes rtpPayloadTypeunsigned int frameRateOpalMediaOptionString::ReadFromOpalMediaOptionEnum::CompareValueOpalMediaFormat::GetOptionIntegerint dflth323LoaderOpalMediaFormat::GetOptionRealdoubledouble dfltOpalVideoFormat::FrameTimeOptionOpalPCM16OpalG729ABOpalMediaFormatList::OpalMediaFormatListOpalMediaFormatList::Removeconst PStringArray &maskOpalVideoFormat::CloneOpalMediaFormat::DebugOptionListOpalMediaFormat::FindOptionOpalMediaOption *OpalMediaOptionString::AssignOpalMediaFormat::OpalMediaFormatunsigned int dsidBOOL njunsigned int bwPINDEX fsunsigned int ftunsigned int tutime_t tsconst char *searchBOOL exactOpalVideoFormat::MaxBitRateOptionOpalVideoFormat::TargetBitRateOptionOpalMediaFormat::GetOptionBooleanbool dfltOpalMediaOptionString::OpalMediaOptionStringOpalVideoFormat::NeedsJitterOptionD:\openh323\src\opalglobalstatics.cxxinitialiserOpalInstantiateMeOpalInstantiateMe::OpalInstantiateMeopalwavfileLoaderh323PluginCodecManagerFactoryPFactory::Workerh323pluginStartupFactoryPFactory::WorkerPluginLoaderPProcessStartupPluginLoader::PCLASSINFOPluginLoader::OnStartupD:\openh323\src\opalosp.cxx"opalosp.h"OpalOSP::Provider::Openconst PString &servicePointPSSLPrivateKey &localPrivateKeyPSSLCertificate &localPublicCertPSSLCertificate &localAuthCertconst PFilePath &localPrivateKeyNameconst PFilePath &localPublicCertNameconst PFilePath &localAuthCertNameconst PDirectory &certDirOpalOSP::Transaction::Validateconst PString &ospvSourceconst PString &ospvDestconst PString &ospvSourceDeviceconst PString &ospvDestDeviceint ospvCallingNumberFormatconst PString &ospvCallingNumberint ospvCalledNumberFormatconst PString &ospvCalledNumberconst PBYTEArray &callIDconst PBYTEArray &tokenunsigned int tokenAlgoBOOL &isAuthorisedunsigned int &timeLimitconst H225_AliasAddress &callingNumberconst H225_AliasAddress &calledNumberBOOL &authorisedconst ValidationInfo &infoOpalOSP::OSPStringToAddressWORD defaultPortOpalOSP::Transaction::CallEndospPluginLoaderStartupFactoryPFactory::WorkerOpalOSP::Transaction::GetFirstDestinationPBYTEArray &callIDPString &calledNumberPString &callingNumberPString &destAddressPString &destDevicePBYTEArray &tokenDestinationInfo &infoOpalOSP::InitialiseBOOL shutdownOpalOSP::Transaction::CallStatisticsunsigned int _lostSentPacketsint _lostFractionSentunsigned int _lostReceivedPacketsint _lostFractionReceivedconst PTime &_firstRTPTimeValidateAddressconst H225_ArrayOf_AliasAddress &addressesOpalOSP::Transaction::DestinationInfo::InsertBOOL useCiscoBugOpalOSP::Transaction::CheckOpenedAndNotEndedconst char *strOpalOSP::Transaction::GetNextDestinationOpalOSP::Transaction::CloseOpalOSP::TransportAddressToOSPStringconst H323TransportAddress &taddrValidateOSPTimeOSPTTIMEconst PTime &timeOpalOSP::Transaction::DestinationInfo::InsertTokenH225_ArrayOf_ClearToken &clearTokensOpalOSP::Provider::CloseOpalOSP::Transaction::~TransactionOpalOSP::Transaction::TransactionOpalOSP::AddressToOSPStringOpalOSP::Transaction::ValidationInfo::ExtractTokenconst H225_ArrayOf_ClearToken &clearTokensOpalOSP::Transaction::ValidationInfo::ExtractOpalOSP::Transaction::AuthorisationInfo::ExtractOpalOSP::Transaction::OpenProvider &_providerconst PString &_userOpalOSP::Transaction::Authoriseconst PString &_ospvSourceDeviceunsigned int &numberOfDestinationsAuthorisationInfo &infoOpalOSP::Provider::~ProviderOpalOSP::Provider::ProviderOpalOSP::ConvertAliasToOSPStringint &formatPString &strOpalOSP::Transaction::ReportUsageOSPShutDownOSPShutDown::PCLASSINFOOSPShutDown::OnShutdownD:\openh323\src\opalvxml.cxx"opalvxml.h"OpalVXMLSession::OpalVXMLSessionH323Connection *_connPTextToSpeech *ttsG7231_File_Codec::G7231_File_CodecG7231_File_Codec::Writeunsigned int &writtenLengthG7231_File_Codec::GetAverageSignalLevelG7231_File_Codec::GetFrameLenOpalVXMLSession::CloseG7231_File_Capability::CloneG7231_File_Capability::CreateCodecG7231_File_Capability::G7231_File_CapabilityG7231_File_Codec::IsRawDataChannelNativeG7231_File_Capability::GetFormatNameG7231_File_Capability::GetSubTypeG7231_File_Capability::OnSendingPDUG7231_File_Codec::ReadG7231_File_Capability::OnReceivedPDUG7231_File_Codec::GetBandwidthD:\openh323\src\opalwavfile.cxx"opalwavfile.h""../include/codecs.h"PWAVFileConverterALawPWAVFileConverterXLawPWAVFileConverterPWAVFileConverterXLaw::GetPositionoff_tconst PWAVFile &filePWAVFileConverterXLaw::SetPositionPWAVFile &fileoff_t posPFile::FilePositionOrigin originPWAVFileConverterXLaw::GetSampleSizePWAVFileConverterXLaw::GetDataLengthPWAVFileConverterXLaw::Readvoid *bufPINDEX lenPWAVFileConverterXLaw::Writeconst void *bufPWAVFileConverterXLaw::DecodeSamplePWAVFileConverterALaw::GetFormatconst PWAVFile &PWAVFileConverterALaw::DecodeSamplePWAVFileConverterULawPWAVFileConverterULaw::GetFormatPWAVFileConverterULaw::DecodeSampleOpalWAVFile::OpalWAVFileconst PFilePath &nameOpenMode modeint optsunsigned int fmtD:\openh323\src\peclient.cxxH501DescriptorUpdate::H501DescriptorUpdateH323PeerElement &peH323PeerElement::AddServiceRelationshipOpalGloballyUniqueID &serviceIDH323PeerElement::ServiceRequestByIDH323PeerElement::ErrorH323PeerElement::OnReceiveAccessRequestH323PeerElement::ServiceRequestByAddrconst H323TransportAddress &peerH323PeerElement::OnReceiveServiceRequestH501DescriptorUpdate::GetNameH323PeerElement::UpdateDescriptorH323PeerElementDescriptor *descriptorH501_UpdateInformation_updateType::Choices updateTypeH323PeerElementDescriptor::SetProtocolListH501_ArrayOf_SupportedProtocols &h501ProtocolsH323PeerElement::SetLocalNameH323PeerElement::MonitorMainH501Transaction::CreateRIPH323PeerElement::OnServiceRequestH323Transaction::ResponseH501ServiceRequest &infoH501AccessRequest::SetRejectReasonH323PeerElement::CreateAliasKeyH323PeerElement::AliasKey *PINDEX posBOOL wildH323PeerElement::CreateServiceRelationshipH323PeerElementServiceRelationship *H501ServiceRequest::GetNameH323PeerElement::SendUpdateDescriptorH501PDU &pduServiceRelationshipTimeToLiveconst unsigned intH323PeerElement::AddDescriptorconst OpalGloballyUniqueID &descriptorIDconst POrdinalKey &creatorconst H501_ArrayOf_AddressTemplate &addressTemplatesconst PTime &updateTimeBOOL nowconst H225_ArrayOf_AliasAddress &transportAddressesconst H225_ArrayOf_AliasAddress &transportAddressconst H323TransportAddressArray &transportAddressesconst PStringArray &aliasStringsH323PeerElement::OnDescriptorUpdateH501DescriptorUpdate &H501AccessRequest::OnHandlePDUH323PeerElement::SetOnlyServiceRelationshipconst PString &peerServiceRequestGracePeriodH323PeerElement::OnRemoteServiceRelationshipDisappearedH323PeerElement::TickleMonitorH323PeerElement::OnReceiveDescriptorUpdateACKconst H501_DescriptorUpdateAck &pduBodyH323PeerElement::DeleteDescriptorH323PeerElement::OnReceiveDescriptorUpdateH323PeerElement::GetLocalNameH323PeerElementDescriptor::ContainsNonexistentH323PeerElement::SendUpdateDescriptorByAddrH323PeerElement::GetDomainNameH323PeerElement::OnReceiveAccessConfirmationconst H501_AccessConfirmation &pduBodyH323PeerElement::RemoveAllServiceRelationshipsH323PeerElement::UpdateAllDescriptorsH323PeerElement::SetDomainNameH323PeerElement::RemoveDescriptorInformationH501DescriptorUpdate::SetRejectReasonH323PeerElementDescriptor::CompareH323PeerElement::OnReceiveServiceConfirmationconst H501_ServiceConfirmation &pduBodyH323PeerElement::SendAccessRequestByIDconst OpalGloballyUniqueID &origServiceIDH501PDU &confirmPDUH501ServiceRequest::H501ServiceRequestH501ServiceRequest::SetRejectReasonH323PeerElement::HandleServiceRequestH323PeerElement::OnAccessRequestH501AccessRequest &infoH323PeerElementDescriptor::CopyToH501_Descriptor &descriptorH323PeerElement::MakeRequestH323PeerElement::CreateDescriptorH323PeerElementDescriptor *H501AccessRequest::GetNameH501DescriptorUpdate::OnHandlePDUH323PeerElement::PrintOnH323PeerElement::RemoveServiceRelationshipconst OpalGloballyUniqueID &serviceIDH323PeerElement::H323PeerElementH323PeerElement::SendUpdateDescriptorByIDH323PeerElement::ServiceReleaseServiceRequestRetryTimeH323PeerElementDescriptor::GetProtocolListconst H501_ArrayOf_SupportedProtocols &h501ProtocolsH323PeerElement::ConstructH323PeerElementDescriptor::CopyToAddressTemplateH501_AddressTemplate &addressTemplateconst H225_EndpointType &epInfoH323PeerElement::~H323PeerElementH323PeerElement::InternalRemoveServiceRelationshipH501Transaction::H501TransactionBOOL hasRejectH501ServiceRequest::OnHandlePDUH501AccessRequest::H501AccessRequestH323PeerElement::SendAccessRequestByAddrconst H323TransportAddress &peerAddrH323PeerElement::AccessRequestconst H225_AliasAddress &searchAliasH225_ArrayOf_AliasAddress &destAliasesH225_AliasAddress &transportAddressH323TransportAddress &transportAddressconst PString &searchAliasPStringArray &destAliasesH323PeerElement::OnReceiveAccessRejectionH501Transaction::ValidatePDUD:\openh323\src\precompile.cxxD:\openh323\src\q931.cxx"q931.h"Q931::SetRedirectingNumberQ931::HasIEInformationElementCodes ieQ931::SetDisplayNameSetNumberIEPBYTEArrayQ931::SetCallStateCallStates valueunsigned int standardQ931::GetCauseunsigned int *standardunsigned int *locationGetNumberIEconst PBYTEArray &bytesunsigned int *planunsigned int *typeunsigned int *presentationunsigned int *screeningunsigned int *reasonunsigned int defPresentationunsigned int defScreeningunsigned int defReasonQ931::GetIEQ931::BuildNotifyint callRefBOOL fromDestQ931::GenerateCallReferenceQ931::SetKeypadQ931::EncodeQ931::BuildFacilityQ931::SetConnectedNumberQ931::GetChannelIdentificationunsigned int *interfaceTypeunsigned int *preferredOrExclusiveint *channelNumberQ931::Q931const Q931 &otherQ931::GetBearerCapabilitiesInformationTransferCapability &capabilityunsigned int &transferRateunsigned int *codingStandardunsigned int *userInfoLayer1Q931::SetCallingPartyNumberQ931::InformationElementCodes ieQ931::SetBearerCapabilitiesInformationTransferCapability capabilityunsigned int transferRateunsigned int codingStandardunsigned int userInfoLayer1Q931::SetCalledPartyNumberQ931::SetProgressIndicatorunsigned int descriptionunsigned int locationQ931::BuildStatusEnquiryQ931::BuildCallProceedingQ931::SetCauseCauseValues valueQ931::operator =Q931 &Q931::PrintOnQ931::BuildStatusQ931::SetChannelIdentificationunsigned int interfaceTypeunsigned int preferredOrExclusiveint channelNumberQ931::BuildSetupQ931::BuildSetupAcknowledgeQ931::GetConnectedNumberQ931::GetSignalInfoQ931::SignalInfoQ931::BuildReleaseCompleteQ931::GetProgressIndicatorunsigned int &descriptionQ931::BuildAlertingQ931::BuildConnectAckQ931::GetCallingPartyNumberQ931::DecodeQ931::GetCalledPartyNumberQ931::GetDisplayNameQ931::SetIEconst PBYTEArray &userDataQ931::RemoveIEQ931::GetCallStateQ931::CallStatesQ931::BuildProgressQ931::GetMessageTypeNameQ931::GetKeypadQ931::BuildConnectQ931::BuildInformationQ931::SetSignalInfoSignalInfo valueQ931::GetRedirectingNumberD:\openh323\src\rfc2190avcodec.cxxD:\openh323\src\rfc2833.cxxOpalRFC2833::BeginTransmitOpalRFC2833::ReceiveTimeoutOpalRFC2833::OnStartReceiveOpalRFC2833::OpalRFC2833const PNotifier &rxOpalRFC2833::TransmitPacketINT paramOpalRFC2833::SendToneOpalRFC2833::OnEndReceiveunsigned int timestampOpalRFC2833::EndTransmitOpalRFC2833::ReceivedPacketRFC2833Table1EventsOpalRFC2833::TransmitEndedOpalRFC2833Info::OpalRFC2833Infochar tunsigned int dunsigned int tsD:\openh323\src\rtp.cxxRTP_Session::OnRxSourceDescriptionconst SourceDescriptionArray &(__cdecl *PTRACE_PARAM)(description)RTP_ControlFrame::SetCountRTP_ControlFrame::SetPayloadSizePINDEX szRTP_Session::OnRxSenderReportconst SenderReport &(__cdecl *PTRACE_PARAM)(sender)RTP_DataFrame::SetExtensionTypeRTP_Session::GetToolNameRTP_SessionManager::operator =RTP_SessionManager &const RTP_SessionManager &smRTP_Session::RTP_SessionPHandleAggregator *_aggregatorRTP_UserData *dataRTP_Session::OnRxReceiverReportDWORD (__cdecl *PTRACE_PARAM)(src)RTP_Session::AddReceiverReportRTP_ControlFrame::ReceiverReport &receiverRTP_DataFrame::SetContribSourcePINDEX idxDWORD srcRTP_DataFrame::GetExtensionPtrBYTE *RTP_ControlFrame::ReceiverReport::SetLostPacketsunsigned int packetsRTP_DataFrame::RTP_DataFrameBOOL dynamicAllocationRTP_Session::OnReceiveControlRTP_Session::SendReceiveStatusRTP_ControlFrame &frameRTP_SessionManager::AddSessionRTP_Session *sessionRTP_Session::SendReportRTP_Session::ReadBufferedDataRTP_UDP::ReadControlPDURTP_Session::SetTxStatisticsIntervalRTP_UDP::ReadDataPDURTP_UDP::ReadDataRTP_DataFrame::PayloadTypes tRTP_SessionManager::ReleaseSessionRTP_SessionManager::UseSessionRTP_ControlFrame::SetPayloadTypeunsigned int tRTP_Session::SetRxStatisticsIntervalRTP_UDP::ReopenBOOL readingRTP_DataFrame::SetMarkerBOOL mRTP_SessionManager::NextRTP_DataFrame::SetPayloadSizeRTP_SessionManager::FirstRTP_Session::GetCanonicalNameRTP_Session::OnRxGoodbyeconst PDWORDArray &(__cdecl *PTRACE_PARAM)(src)RTP_Session::GetPacketsTooLateRTP_Session::OnRxApplDefinedconst PString &(__cdecl *PTRACE_PARAM)(type)RTP_SessionManager::RTP_SessionManagerRTP_UDP::CloseRTP_UDP::ModifyQOSRTP_DataFrame::GetHeaderSizeRTP_ControlFrame::AddSourceDescriptionRTP_ControlFrame::SourceDescription &RTP_Session::SetCanonicalNameRTP_Session::OnSendDataRTP_UDP::EnableGQoSRTP_DataFrame::GetExtensionTypeRTP_Session::SourceDescription::PrintOnRTP_ControlFrame::ReadNextCompoundRTP_UDP::SetRemoteSocketInfoPIPSocket::Address addressRTP_Session::SetUserDataRTP_Session::ReceiverReport::PrintOnRTP_Session::GetJitterBufferSizeRTP_Session::~RTP_SessionPayloadTypesNamesconst char *const %[RTP_DataFrame::LastKnownPayloadType]RTP_SessionManager::GetSessionRTP_UserData::OnTxStatisticsSetMinBufferSizePUDPSocket &sockint buftypeRTP_DataFrame::SetExtensionSizeRTP_UDP::ReadDataOrControlPDUPUDPSocket &socketPBYTEArray &frameBOOL fromDataChannelRTP_UDP::RTP_UDPBOOL _remoteIsNATRTP_SessionManager::ExitBuildReceiverReportArrayRTP_Session::ReceiverReportArrayconst RTP_ControlFrame &frameRTP_Session::SetJitterBufferSizeRTP_DataFrame::SetPayloadTypePayloadTypes tRTP_UDP::OpenPIPSocket::Address _localAddressWORD portBaseWORD portMaxBYTE tosPNatMethod *methRTP_UserData::OnRxStatisticsRTP_Session::SenderReport::PrintOnRTP_DataFrame::GetExtensionSizeRTP_ControlFrame::RTP_ControlFrameRTP_Session::OnReceiveDataconst RTP_DataFrame &frameconst RTP_UDP &rtpRTP_Session::SetToolNameRTP_ControlFrame::AddSourceDescriptionItemRTP_ControlFrame::SourceDescription::Item &SourceDescription &sdesconst PString &dataRTP_UDP::GetLocalHostNameRTP_UserData::OnFinalStatisticsRTP_DataFrame::SetExtensionBOOL extRTP_UDP::ApplyQOSconst PIPSocket::Address &addrRTP_UDP::GetQOSPQoS &RTP_UDP::WriteControlRTP_UDP::~RTP_UDPRTP_UDP::WriteDataRTP_ControlFrame::WriteNextCompoundRTP_DataFrame::GetContribSourceSecondsFrom1900to1970D:\openh323\src\rtp2wav.cxx"rtp2wav.h"OpalRtpToWavFile::ReceivedPacketOpalRtpToWavFile::OnFirstPacketOpalRtpToWavFile::OpalRtpToWavFileD:\openh323\src\svcctrl.cxx"svcctrl.h"H323CallCreditServiceControl::OnChangeH323H350ServiceControl::GetServiceControlTypeH323H350ServiceControl::IsValidH323HTTPServiceControl::OnSendingPDUH225_ServiceControlDescriptor &contentsH323HTTPServiceControl::IsValidH323CallCreditServiceControl::OnSendingPDUH323HTTPServiceControl::OnReceivedPDUH323ServiceControlSession::GetServiceControlTypeH323H248ServiceControl::H323H248ServiceControlH323H350ServiceControl::OnSendingPDULDAPServiceOIDH323CallCreditServiceControl::IsValidH323H350ServiceControl::OnChangeH323HTTPServiceControl::OnChangeH323CallCreditServiceControl::H323CallCreditServiceControlconst PString &amtunsigned int durH323H248ServiceControl::OnReceivedPDUconst H248_SignalsDescriptor &descriptorH323HTTPServiceControl::GetServiceControlTypeH323H248ServiceControl::OnSendingPDUH248_SignalsDescriptor &descriptorH323ServiceControlSession::H323ServiceControlSessionH323H350ServiceControl::H323H350ServiceControlconst PString &_ldapURLconst PString &_ldapDNH323HTTPServiceControl::H323HTTPServiceControlconst PString &uH323CallCreditServiceControl::OnReceivedPDUH323H350ServiceControl::OnReceivedPDUD:\openh323\src\t120proto.cxx"transports.h"OpalT120Protocol::OriginateT120_X224X224T120_X224::PCLASSINFOT120_X224::ReadT120_X224::WriteOpalT120Protocol::HandleConnectconst MCS_ConnectMCSPDU &T120ConnectPDUMCS_ConnectMCSPDUT120ConnectPDU::PCLASSINFOT120ConnectPDU::ReadT120ConnectPDU::WriteT120ConnectPDU::x224OpalT120Protocol::AnswerOpalT120Protocol::HandleDomainconst MCS_DomainMCSPDU &OpalT120Protocol::OpalT120ProtocolD:\openh323\src\t38.cxx"t38.h"T38_PreCorrigendum_Data_Field_subtype::EncodeT38_IFPPacket::CompareT38_UDPTLPacket_primary_ifp_packet::T38_UDPTLPacket_primary_ifp_packetT38_UDPTLPacket_error_recovery_fec_info::CloneNames_T38_Type_of_msg_t30_indicatorT38_UDPTLPacket::T38_UDPTLPacketT38_Type_of_msg::CreateObjectT38_PreCorrigendum_Data_Field::CreateObjectT38_Type_of_msg_data::operator =T38_Type_of_msg_data &T38_IFPPacket::CloneT38_ArrayOf_PASN_OctetString::T38_ArrayOf_PASN_OctetStringT38_PreCorrigendum_IFPPacket::GetDataLengthT38_UDPTLPacket_error_recovery_fec_info::DecodeT38_Type_of_msg_data::T38_Type_of_msg_dataT38_Data_Field_subtype::DecodeNames_T38_Type_of_msg_dataT38_UDPTLPacket_error_recovery_fec_info::CompareT38_ArrayOf_PASN_OctetString::CreateObjectT38_IFPPacket::EncodeT38_Data_Field_subtype::GetDataLengthT38_PreCorrigendum_Data_Field::operator []T38_PreCorrigendum_Data_Field_subtype &T38_UDPTLPacket::DecodeT38_UDPTLPacket_error_recovery_fec_info::PrintOnT38_UDPTLPacket_error_recovery_secondary_ifp_packets::CloneT38_Type_of_msg_t30_indicator::operator =T38_Type_of_msg_t30_indicator &Names_T38_PreCorrigendum_Data_Field_subtype_field_typeT38_PreCorrigendum_IFPPacket::DecodeT38_UDPTLPacket_error_recovery::CloneT38_UDPTLPacket_error_recovery_fec_info::T38_UDPTLPacket_error_recovery_fec_infoT38_PreCorrigendum_Data_Field::CloneT38_UDPTLPacket::PrintOnT38_UDPTLPacket_error_recovery::CreateObjectNames_T38_Type_of_msgT38_PreCorrigendum_Data_Field_subtype_field_type::operator =T38_PreCorrigendum_Data_Field_subtype_field_type &T38_PreCorrigendum_IFPPacket::PrintOnT38_Data_Field::operator []T38_Data_Field_subtype &T38_UDPTLPacket_error_recovery_secondary_ifp_packets::operator []T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype &T38_Data_Field::T38_Data_FieldT38_UDPTLPacket_primary_ifp_packet::CloneT38_Type_of_msg_data::CloneT38_PreCorrigendum_IFPPacket::T38_PreCorrigendum_IFPPacketT38_UDPTLPacket::CloneNames_T38_UDPTLPacket_error_recoveryT38_PreCorrigendum_Data_Field_subtype::PrintOnT38_UDPTLPacket_error_recovery_secondary_ifp_packets::T38_UDPTLPacket_error_recovery_secondary_ifp_packetsT38_IFPPacket::GetDataLengthT38_PreCorrigendum_Data_Field_subtype::DecodeT38_Type_of_msg_t30_indicator::T38_Type_of_msg_t30_indicatorT38_PreCorrigendum_IFPPacket::CloneT38_Data_Field_subtype_field_type::CloneT38_Type_of_msg_t30_indicator::CloneT38_PreCorrigendum_Data_Field_subtype_field_type::T38_PreCorrigendum_Data_Field_subtype_field_typeT38_Data_Field_subtype::CompareT38_PreCorrigendum_Data_Field::T38_PreCorrigendum_Data_FieldT38_Data_Field_subtype::CloneT38_Data_Field_subtype::EncodeT38_Type_of_msg::T38_Type_of_msgT38_IFPPacket::PrintOnT38_PreCorrigendum_Data_Field_subtype::CloneT38_Data_Field_subtype_field_type::T38_Data_Field_subtype_field_typeT38_Data_Field::CloneT38_UDPTLPacket_error_recovery_fec_info::EncodeT38_IFPPacket::T38_IFPPacketT38_IFPPacket::DecodeT38_PreCorrigendum_IFPPacket::CompareT38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype::T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtypeT38_UDPTLPacket::GetDataLengthT38_ArrayOf_PASN_OctetString::operator []T38_ArrayOf_PASN_OctetString::CloneT38_PreCorrigendum_Data_Field_subtype::T38_PreCorrigendum_Data_Field_subtypeNames_T38_Data_Field_subtype_field_typeT38_UDPTLPacket_error_recovery::T38_UDPTLPacket_error_recoveryT38_UDPTLPacket_error_recovery_fec_info::GetDataLengthT38_PreCorrigendum_Data_Field_subtype::CompareT38_UDPTLPacket::EncodeT38_Data_Field_subtype::T38_Data_Field_subtypeT38_UDPTLPacket_error_recovery_secondary_ifp_packets::CreateObjectT38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype::CloneT38_PreCorrigendum_IFPPacket::EncodeT38_Data_Field::CreateObjectT38_PreCorrigendum_Data_Field_subtype::GetDataLengthT38_PreCorrigendum_Data_Field_subtype_field_type::CloneT38_Data_Field_subtype_field_type::operator =T38_Data_Field_subtype_field_type &T38_Type_of_msg::CloneT38_UDPTLPacket::CompareT38_Data_Field_subtype::PrintOnD:\openh323\src\t38proto.cxxOpalT38Protocol::OnDataOpalT38Protocol::HandleRawIFPconst PASN_OctetString &pduOpalT38Protocol::HandlePacketconst T38_IFPPacket &ifpOpalT38Protocol::~OpalT38ProtocolOpalT38Protocol::WriteMultipleDataunsigned int modeconst PBYTEArray *dataOpalT38Protocol::OriginateOpalT38Protocol::CleanUpOnTerminationOpalT38Protocol::OpalT38ProtocolOpalT38Protocol::WriteDataOpalT38Protocol::WritePacketOpalT38Protocol::OnIndicatorunsigned int indicatorOpalT38Protocol::OnCEDOpalT38Protocol::OnCNGOpalT38Protocol::AnswerOpalT38Protocol::HandlePacketLostunsigned int (__cdecl *PTRACE_PARAM)(nLost)OpalT38Protocol::WriteIndicatorOpalT38Protocol::SetTransportH323Transport *tOpalT38Protocol::OnPreambleOpalT38Protocol::OnTrainingD:\openh323\src\transports.cxxH323Transport::CreateControlChannelH323TransportAddressArray::H323TransportAddressArrayH323TransportUDP::DiscoverGatekeeperH323Gatekeeper &gkH323Transport::DiscoverGatekeeperH323Gatekeeper &H323Listener::H323ListenerH323TransportTCP::~H323TransportTCPH323SetTransportAddressesconst H323Transport &associatedTransportH225_ArrayOf_TransportAddress &pduH323TransportTCP::CloseH323TransportAddress::GetIpAndPortWORD &portH323TransportTCP::OnOpenH323TransportAddress::ValidateH323TransportAddress::CreateTransportSplitAddressconst PString &addrPString &hostPString &serviceH323TransportAddress::CreateCompatibleListenerH323Listener *H323TransportTCP::CreateControlChannelH323Transport::AttachThreadPThread *thrdH323TransportUDP::~H323TransportUDPH323TransportTCP::ConnectH323TransportUDP::WritePDUconst PBYTEArray &pduH323TransportAddressArray::AppendAddressH323TransportUDP::ReadPDUH323Listener::PrintOnH323Transport::CleanUpOnTerminationH323ListenerTCP::OpenH323TransportAddress::IsEquivalentH323TransportTCP::IsListeningH323GetInterfaceAddressesconst H323ListenerList &listenersH323TransportUDP::ExtractPDUPINDEX &H323TransportAddress::GetHostNameH323TransportIP::SetUpTransportPDUH245_TransportAddress &pduunsigned int portH225_TransportAddress &pduBOOL localTsapH323Transport::IsCompatibleTransportconst H225_TransportAddress &H323TransportAddress::CreateListenerH323Transport::StartControlChannelH323ListenerTCP::SetUpTransportPDUH245TransportThreadH245TransportThread::PCLASSINFOH245TransportThread::H245TransportThreadH245TransportThread::MainH245TransportThread::connectionH245TransportThread::transportH245TransportThread::useAggregatorH323TransportUDP::GetLocalAddressH323Transport::~H323TransportH323Transport::HandleSignallingSocketH323ListenerTCP::Acceptconst PTimeInterval &timeoutH323TransportUDP::GetLastReceivedAddressH323TransportAddressArray::AppendStringCollectionconst PCollection &collH323Transport::PrintOnH323Transport::SetPromiscuousPromisciousModesH323TransportIP::IsCompatibleTransportconst H225_TransportAddress &pduH323Transport::GetLastReceivedAddressH323TransportTCP::ReadPDUH323TransportIP::GetRemoteAddressH323ListenerTCP::CloseH323ListenerTCP::GetTransportAddressH323ListenerTCP::~H323ListenerTCPH323Transport::CloseH323TransportTCP::SetRemoteAddressH323TransportTCP::ExtractPDUPINDEX &pduLenH323TransportAddress::H323TransportAddressconst H245_TransportAddress &transportconst H225_TransportAddress &transportH323TransportAddress::SetPDUH323ListenerTCP::MainH323TransportAddressArray::AppendStringH323TransportIP::GetLocalAddressListenUDPPIPSocket::Address bindingWORD localPortH225TransportThreadH225TransportThread::PCLASSINFOH225TransportThread::H225TransportThreadH225TransportThread::MainH225TransportThread::transportH323TransportUDP::SetRemoteAddressH323TransportTCP::H323TransportTCPBOOL listenH323TransportUDP::SetPromiscuousPromisciousModes promiscuousH323TransportAddress::GetIpAddressH323Transport::HandleFirstSignallingChannelPDUH323TransportUDP::ConnectH323Transport::H323TransportH323ListenerTCP::H323ListenerTCPBOOL exclusiveH323TransportTCP::AcceptControlChannelH323Transport::AcceptControlChannelH323TransportUDP::H323TransportUDPH323TransportIP::H323TransportIPWORD remPortIpPrefixBuildIPH323TransportTCP::WritePDUH323Transport::SetUpTransportPDUH245_TransportAddress &D:\openh323\src\x224.cxxX224::EncodeX224::BuildConnectRequestX224::PrintOnX224::X224X224::DecodeX224::BuildDataconst PBYTEArray &dX224::BuildConnectConfirmD:\openh323\src\x880.cxx"x880.h"X880_ReturnResultProblem::operator =X880_ReturnResultProblem &X880_Code::CreateObjectX880_ReturnResult_result::DecodeX880_Code::CloneX880_Reject::X880_RejectX880_RejectProblem::X880_RejectProblemX880_GeneralProblem::operator =X880_GeneralProblem &X880_ReturnResult::X880_ReturnResultX880_Invoke::GetDataLengthX880_InvokeId::CloneX880_Invoke::EncodeX880_ReturnResult::PrintOnX880_ReturnResult_result::CompareX880_Reject::PrintOnX880_InvokeId::operator =X880_InvokeId &X880_ReturnResult::DecodeX880_ReturnResult_result::CloneX880_ReturnError::GetDataLengthX880_Reject::DecodeX880_Invoke::X880_InvokeX880_ReturnResult_result::PrintOnNames_X880_Reject_problemX880_ROS::CreateObjectX880_Reject_problem::X880_Reject_problemX880_Reject::CloneX880_InvokeProblem::operator =X880_InvokeProblem &X880_ReturnResult::CloneX880_ReturnError::DecodeX880_Reject_problem::CloneX880_Invoke::PrintOnX880_ReturnErrorProblem::operator =X880_ReturnErrorProblem &X880_ReturnErrorProblem::X880_ReturnErrorProblemX880_ReturnResult::CompareX880_ROS::X880_ROSX880_ReturnResult_result::GetDataLengthX880_ReturnError::PrintOnX880_Code::X880_CodeX880_ReturnError::X880_ReturnErrorX880_ReturnResult::EncodeX880_GeneralProblem::CloneX880_ReturnResult_result::EncodeX880_Invoke::CloneX880_ReturnResultProblem::CloneX880_RejectProblem::CloneX880_ReturnResult_result::X880_ReturnResult_resultX880_ReturnResultProblem::X880_ReturnResultProblemX880_GeneralProblem::X880_GeneralProblemX880_ReturnResult::GetDataLengthX880_InvokeProblem::CloneX880_Invoke::DecodeX880_ReturnErrorProblem::CloneX880_InvokeProblem::X880_InvokeProblemX880_Invoke::CompareX880_Reject::CompareX880_ReturnError::CompareX880_Reject::EncodeX880_ReturnError::EncodeNames_X880_CodeX880_ROS::CloneNames_X880_ROSX880_RejectProblem::operator =X880_RejectProblem &X880_InvokeId::X880_InvokeIdX880_Reject_problem::CreateObjectX880_ReturnError::CloneX880_Reject::GetDataLengthD:\openh323\include\channels.hH323_RTPChannelH323_RealTimeChannelH323UnidirectionalChannelH323ChannelH323Channel::PCLASSINFOH323Channel::GetDirectionenum H323Channel::DirectionsH323Channel::StartH323Channel::ReceiveH323Channel::TransmitH323Channel::OnSendingPDUH245_OpenLogicalChannel &openPDUH323Channel::GetNumberconst H323ChannelNumber &H323Channel::SetNumberH323Channel::GetReverseChannelH323Channel::SetReverseChannelH323Channel::GetBandwidthUsedH323Channel::GetCapabilityconst H323Capability &H323Channel::IsPausedH323Channel::SetPauseBOOL pauseH323Channel::endpointH323Channel::connectionH323Channel::capabilityH323Channel::numberH323Channel::reverseChannelH323Channel::codecH323Channel::receiveThreadPThread *H323Channel::transmitThreadH323Channel::openedH323Channel::pausedH323Channel::terminatingH323Channel::bandwidthUsedH323UnidirectionalChannel::PCLASSINFOenum H323Channel::Directions directionH323UnidirectionalChannel::receiverH323_RealTimeChannel::PCLASSINFOH323_RealTimeChannel::OnSendingAltPDUH323_RealTimeChannel::OnSendOpenAckAltH323_RealTimeChannel::OnReceivedAltPDUH323_RealTimeChannel::OnReceivedAckAltPDUH323_RealTimeChannel::rtpPayloadTypeH323_RTPChannel::PCLASSINFORTP_Session &rtpH323_RTPChannel::rtpSessionRTP_Session &H323_RTPChannel::rtpCallbacksH323_RTP_Session &H323_RTPChannel::PLISTFilterListPNotifierH323_RTPChannel::filtersH323_RTPChannel::filterMutexPMutexH323_RTPChannel::silenceStartTickH323BidirectionalChannelH323BidirectionalChannel::PCLASSINFOH245_OpenLogicalChannel_forwardLogicalChannelParametersH323_ExternalRTPChannelH323_ExternalRTPChannel::PCLASSINFOH323_ExternalRTPChannel::GetRemoteMediaAddressH323_ExternalRTPChannel::GetRemoteMediaControlAddressH323_ExternalRTPChannel::sessionIDH323_ExternalRTPChannel::externalMediaAddressH323_ExternalRTPChannel::externalMediaControlAddressH323_ExternalRTPChannel::remoteMediaAddressH323_ExternalRTPChannel::remoteMediaControlAddressH323_ExternalRTPChannel::isRunningH323DataChannelH323DataChannel::PCLASSINFOH323DataChannel::sessionIDH323DataChannel::listenerH323DataChannel::autoDeleteListenerH323DataChannel::transportH323DataChannel::autoDeleteTransportH323DataChannel::separateReverseChannelH245_OpenLogicalChannel_reverseLogicalChannelParametersH323ChannelNumber::PCLASSINFOH323ChannelNumber::operator unsigned intH323ChannelNumber::IsFromRemoteH323ChannelNumber::numberH323ChannelNumber::fromRemoteD:\openh323\include\codecs.hH323AudioCodecH323CodecH323Codec::PCLASSINFOconst char *mediaFormatenum H323Codec::Direction directionH323Codec::CloseH323Codec::ReadRTP_DataFrame &rtpFrameH323Codec::WriteH323Codec::GetDirectionenum H323Codec::DirectionH323Codec::GetMediaFormatH323Codec::SetFrameSizeBOOL autoDelete = TRUE ///< Channel is to be automatically deleted H323Codec::GetRawDataChannelH323Codec::FilterInfoH323Codec::FilterInfo::PCLASSINFOH323Codec::FilterInfo::FilterInfoH323Codec &cvoid *bPINDEX sPINDEX lH323Codec::FilterInfo::codecH323Codec &H323Codec::FilterInfo::bufferH323Codec::FilterInfo::bufferSizeH323Codec::FilterInfo::bufferLengthH323Codec::directionH323Codec::mediaFormatH323Codec::logicalChannelH323Codec::rawDataChannelH323Codec::deleteChannelH323Codec::rawChannelMutexH323Codec::lastSequenceNumberH323Codec::PLISTH323Codec::filtersH323AudioCodec::PCLASSINFOenum H323AudioCodec::SilenceDetectionMode modeunsigned int threshold = 0unsigned int signalDeadband = 80unsigned int silenceDeadband = 3200unsigned int adaptivePeriod = 4800 ///< 600 millisecond window for adaptive threshold enum H323AudioCodec::SilenceDetectionModeBOOL *isInTalkBurst = NULLunsigned int *currentThreshold = NULL ///< Current signal/silence threshold H323AudioCodec::SetTxQualityLevelH323AudioCodec::GetTxQualityLevelH323AudioCodec::AttachAECPAec *H323AudioCodec::samplesPerFrameH323AudioCodec::silenceDetectModeH323AudioCodec::signalDeadbandFramesH323AudioCodec::silenceDeadbandFramesH323AudioCodec::adaptiveThresholdFramesH323AudioCodec::inTalkBurstH323AudioCodec::framesReceivedH323AudioCodec::levelThresholdH323AudioCodec::signalMinimumH323AudioCodec::silenceMaximumH323AudioCodec::signalFramesReceivedH323AudioCodec::silenceFramesReceivedH323AudioCodec::IsRawDataHeldH323FramedAudioCodec::PCLASSINFOconst RTP_DataFrame &rtpFrameH323FramedAudioCodec::EncodeFrameunsigned int &bytesOutputH323FramedAudioCodec::DecodeSilenceFramePAec *_ARCH323FramedAudioCodec::aecH323FramedAudioCodec::sampleBufferPShortArrayH323FramedAudioCodec::bytesPerFrameH323StreamedAudioCodec::PCLASSINFOunsigned int &samplesH323StreamedAudioCodec::EncodeH323StreamedAudioCodec::DecodeH323StreamedAudioCodec::bitsPerSampleH323_ALawCodecH323_ALawCodec::PCLASSINFOH323_ALawCodec::EncodeH323_ALawCodec::DecodeH323_ALawCodec::sevenBitH323VideoCodec::PCLASSINFOunsigned int firstGOBunsigned int numberOfGOBsint firstGOBint firstMBunsigned int numberOfMBsint newQualityunsigned int firstMBunsigned int temporalReferenceH323VideoCodec::GetWidthH323VideoCodec::GetHeightH323VideoCodec::SetTxQualityLevelH323VideoCodec::SetTxMinQualityH323VideoCodec::SetTxMaxQualityH323VideoCodec::SetBackgroundFillint idleH323VideoCodec::BitRateModeBitsH323VideoCodec::GetVideoModeH323VideoCodec::SetVideoModeH323VideoCodec::GetMaxBitRateH323VideoCodec::GetFrameNumH323VideoCodec::frameWidthH323VideoCodec::frameHeightH323VideoCodec::fillLevelH323VideoCodec::videoBitRateControlModesH323VideoCodec::bitRateHighLimitH323VideoCodec::oldLengthH323VideoCodec::oldTimeH323VideoCodec::newTimeH323VideoCodec::targetFrameTimeMsH323VideoCodec::frameBytesH323VideoCodec::sumFrameTimeMsH323VideoCodec::sumAdjFrameTimeMsH323VideoCodec::sumFrameBytesH323VideoCodec::videoQMaxH323VideoCodec::videoQMinH323VideoCodec::videoQualityH323VideoCodec::frameStartTimeH323VideoCodec::grabIntervalH323VideoCodec::frameNumH323VideoCodec::packetNumH323VideoCodec::oldPacketNumH323VideoCodec::framesPerSecH323VideoCodec::videoHandlerActiveH323_muLawCodecH323_muLawCodec::PCLASSINFOH323_muLawCodec::EncodeH323_muLawCodec::DecodeH323_muLawCodec::sevenBitD:\openh323\include\cu30codec.hD:\openh323\include\dynacodec.h"dllcodec.h"OpalDynaCodecDLLPDynaLinkOpalDynaCodecDLL::PCLASSINFOOpalDynaCodecDLL::OpalDynaCodecDLLconst PFilePath &codecOpalDynaCodecDLL::LoadOpalDynaCodecDLL::EnumerateCodecsOpalDLLCodecInfo *unsigned int *countOpalDynaCodecDLL::LoadCodecsconst PDirectory &dirOpalDynaCodecDLL::LoadCodecconst PFilePath &fileOpalDynaCodecDLL::AddAudioCapabilitiesOpalDynaCodecDLL::AddVideoCapabilitiesOpalDynaCodecDLL::AddCapabilitiesconst PString &typeOpalDynaCodecDLL::defaultCodecDirPDirectoryOpalDynaCodecDLL::EnumerateCodecsFnOpalDLLCodecInfo *(__cdecl *%)(unsigned int,unsigned int *)OpalDynaCodecDLL::mutexOpalDynaCodecDLL::initedOpalDynaCodecDLL::referenceCountOpalDynaCodecStandardAudioCapabilityOpalDynaCodecStandardAudioCapability::PCLASSINFOOpalDynaCodecStandardAudioCapability::OpalDynaCodecStandardAudioCapabilityconst OpalDLLCodecRec &_infoH323EndPoint &_endpointunsigned int maxPacketSizeunsigned int desiredPacketSizeOpalDynaCodecStandardAudioCapability::OnSendingPDUOpalDynaCodecStandardAudioCapability::OnReceivedPDUOpalDynaCodecStandardAudioCapability::CloneOpalDynaCodecStandardAudioCapability::CreateCodecOpalDynaCodecStandardAudioCapability::GetFormatNameOpalDynaCodecStandardAudioCapability::GetSubTypeOpalDynaCodecStandardAudioCapability::infoconst OpalDLLCodecRec &OpalDynaCodecStandardAudioCapability::endpointOpalDynaCodecStandardAudioCapability::subTypeOpalDynaCodecNonStandardAudioCapabilityOpalDynaCodecNonStandardAudioCapability::PCLASSINFOOpalDynaCodecNonStandardAudioCapability::OpalDynaCodecNonStandardAudioCapabilityconst BYTE *nonstdHeaderPINDEX nonstdHeaderLenOpalDynaCodecNonStandardAudioCapability::CloneOpalDynaCodecNonStandardAudioCapability::CreateCodecOpalDynaCodecNonStandardAudioCapability::GetFormatNameOpalDynaCodecNonStandardAudioCapability::infoOpalDynaCodecNonStandardAudioCapability::endpointOpalDynaCodecStandardVideoCapabilityOpalDynaCodecStandardVideoCapability::PCLASSINFOOpalDynaCodecStandardVideoCapability::OpalDynaCodecStandardVideoCapabilityOpalDynaCodecStandardVideoCapability::OnSendingPDUOpalDynaCodecStandardVideoCapability::OnReceivedPDUOpalDynaCodecStandardVideoCapability::CloneOpalDynaCodecStandardVideoCapability::CreateCodecOpalDynaCodecStandardVideoCapability::GetFormatNameOpalDynaCodecStandardVideoCapability::GetSubTypeOpalDynaCodecStandardVideoCapability::infoOpalDynaCodecStandardVideoCapability::endpointOpalDynaCodecStandardVideoCapability::subTypeOpalDLLCodecRecOpalDLLCodecRec::PCLASSINFOOpalDLLCodecRec::OpalDLLCodecRecOpalDynaCodecDLL &_encoderconst PStringToString &_attributesconst OpalDLLCodecInfo &_encoderCodeInfoOpalMediaFormat *_mediaFormatOpalDLLCodecRec::CreateContextOpalDLLCodecRec::DestroyContextOpalDLLCodecRec::CreateCapabilityOpalDLLCodecRec::SetParameterconst PString &attributeOpalDLLCodecRec::GetParameterconst char *defValue = NULLOpalDLLCodecRec::encoderOpalDynaCodecDLL &OpalDLLCodecRec::attributesPStringToStringOpalDLLCodecRec::infoOpalDLLCodecInfoOpalDLLCodecRec::mediaFormatOpalMediaFormat *OpalDynaVideoCodecOpalDynaVideoCodec::PCLASSINFOOpalDynaVideoCodec::OpalDynaVideoCodecOpalDynaVideoCodec::~OpalDynaVideoCodecOpalDynaVideoCodec::ReadOpalDynaVideoCodec::Writeconst RTP_DataFrame &rtpOpalDynaVideoCodec::infoOpalDynaVideoCodec::contextOpalDynaAudioCodecOpalDynaAudioCodec::PCLASSINFOOpalDynaAudioCodec::OpalDynaAudioCodecOpalDynaAudioCodec::~OpalDynaAudioCodecOpalDynaAudioCodec::EncodeFrameOpalDynaAudioCodec::DecodeFrameOpalDynaAudioCodec::infoOpalDynaAudioCodec::contextOpalDynaAudioCodec::samplesPerFrameOpalDynaAudioCodec::bytesPerFrameOpalDynaNonStandardAudioCodecOpalDynaNonStandardAudioCodec::PCLASSINFOOpalDynaNonStandardAudioCodec::OpalDynaNonStandardAudioCodecOpalDynaNonStandardAudioCodec::~OpalDynaNonStandardAudioCodecOpalDynaCodecRegistrationH323CapabilityRegistrationOpalDynaCodecRegistration::PCLASSINFOOpalDynaCodecRegistration::OpalDynaCodecRegistrationOpalDLLCodecRec *_encoderInfoOpalDLLCodecRec *_decoderInfoOpalDynaCodecRegistration::CreateOpalDynaCodecRegistration::encoderInfoOpalDLLCodecRec *OpalDynaCodecRegistration::decoderInfoOpalDynaCodecRegistration::mediaFormatD:\openh323\include\ffh263codec.hD:\openh323\include\gccpdu.hGCC_RequestPDUPASN_ChoiceGCC_RequestPDU::PCLASSINFOGCC_RequestPDU::ChoicesGCC_RequestPDU::operator GCC_ConferenceJoinRequest &GCC_ConferenceJoinRequest &GCC_RequestPDU::operator GCC_ConferenceAddRequest &GCC_ConferenceAddRequest &GCC_RequestPDU::operator GCC_ConferenceLockRequest &GCC_ConferenceLockRequest &GCC_RequestPDU::operator GCC_ConferenceUnlockRequest &GCC_ConferenceUnlockRequest &GCC_RequestPDU::operator GCC_ConferenceTerminateRequest &GCC_ConferenceTerminateRequest &GCC_RequestPDU::operator GCC_ConferenceEjectUserRequest &GCC_ConferenceEjectUserRequest &GCC_RequestPDU::operator GCC_ConferenceTransferRequest &GCC_ConferenceTransferRequest &GCC_RequestPDU::operator GCC_RegistryRegisterChannelRequest &GCC_RegistryRegisterChannelRequest &GCC_RequestPDU::operator GCC_RegistryAssignTokenRequest &GCC_RegistryAssignTokenRequest &GCC_RequestPDU::operator GCC_RegistrySetParameterRequest &GCC_RegistrySetParameterRequest &GCC_RequestPDU::operator GCC_RegistryRetrieveEntryRequest &GCC_RegistryRetrieveEntryRequest &GCC_RequestPDU::operator GCC_RegistryDeleteEntryRequest &GCC_RegistryDeleteEntryRequest &GCC_RequestPDU::operator GCC_RegistryMonitorEntryRequest &GCC_RegistryMonitorEntryRequest &GCC_RequestPDU::operator GCC_RegistryAllocateHandleRequest &GCC_RegistryAllocateHandleRequest &GCC_RequestPDU::operator GCC_NonStandardPDU &GCC_NonStandardPDU &GCC_ChallengeResponseAlgorithmGCC_ChallengeResponseAlgorithm::PCLASSINFOGCC_ChallengeResponseAlgorithm::ChoicesGCC_ChallengeResponseAlgorithm::operator GCC_NonStandardParameter &GCC_NonStandardParameter &GCC_TerminationMethodPASN_EnumerationGCC_TerminationMethod::PCLASSINFOGCC_TerminationMethod::EnumerationsGCC_ConferenceTimeInquireIndicationPASN_SequenceGCC_ConferenceTimeInquireIndication::PCLASSINFOGCC_ConferenceTimeInquireIndication::m_nodeSpecificTimeFlagPASN_BooleanGCC_RosterUpdateIndication_nodeInformationGCC_RosterUpdateIndication_nodeInformation::PCLASSINFOGCC_RosterUpdateIndication_nodeInformation::m_nodeRecordListGCC_RosterUpdateIndication_nodeInformation_nodeRecordListGCC_RosterUpdateIndication_nodeInformation::m_rosterInstanceNumberPASN_IntegerGCC_RosterUpdateIndication_nodeInformation::m_nodesAddedGCC_RosterUpdateIndication_nodeInformation::m_nodesRemovedGCC_NetworkAddress_subtypeGCC_NetworkAddress_subtype::PCLASSINFOGCC_NetworkAddress_subtype::ChoicesGCC_NetworkAddress_subtype::operator GCC_NetworkAddress_subtype_aggregatedChannel &GCC_NetworkAddress_subtype_aggregatedChannel &GCC_NetworkAddress_subtype::operator GCC_NetworkAddress_subtype_transportConnection &GCC_NetworkAddress_subtype_transportConnection &GCC_NetworkAddress_subtype::operator GCC_NonStandardParameter &GCC_TextStringPASN_BMPStringGCC_TextString::PCLASSINFOGCC_ConferenceJoinRequestGCC_ConferenceJoinRequest::PCLASSINFOGCC_ConferenceJoinRequest::OptionalFieldsGCC_ConferenceJoinRequest::m_conferenceNameGCC_ConferenceNameSelectorGCC_ConferenceJoinRequest::m_conferenceNameModifierGCC_ConferenceNameModifierGCC_ConferenceJoinRequest::m_tagGCC_ConferenceJoinRequest::m_passwordGCC_PasswordChallengeRequestResponseGCC_ConferenceJoinRequest::m_convenerPasswordGCC_PasswordSelectorGCC_ConferenceJoinRequest::m_callerIdentifierGCC_ConferenceJoinRequest::m_userDataGCC_UserDataGCC_RegistryMonitorEntryIndicationGCC_RegistryMonitorEntryIndication::PCLASSINFOGCC_RegistryMonitorEntryIndication::OptionalFieldsGCC_RegistryMonitorEntryIndication::m_keyGCC_RegistryKeyGCC_RegistryMonitorEntryIndication::m_itemGCC_RegistryItemGCC_RegistryMonitorEntryIndication::m_ownerGCC_RegistryEntryOwnerGCC_RegistryMonitorEntryIndication::m_modificationRightsGCC_RegistryModificationRightsGCC_ConferenceInviteRequestGCC_ConferenceInviteRequest::PCLASSINFOGCC_ConferenceInviteRequest::OptionalFieldsGCC_ConferenceInviteRequest::m_conferenceNameGCC_ConferenceNameGCC_ConferenceInviteRequest::m_nodeIDGCC_UserIDGCC_ConferenceInviteRequest::m_topNodeIDGCC_ConferenceInviteRequest::m_tagGCC_ConferenceInviteRequest::m_passwordInTheClearRequiredGCC_ConferenceInviteRequest::m_lockedConferenceGCC_ConferenceInviteRequest::m_listedConferenceGCC_ConferenceInviteRequest::m_conductibleConferenceGCC_ConferenceInviteRequest::m_terminationMethodGCC_ConferenceInviteRequest::m_conductorPrivilegesGCC_ArrayOf_PrivilegeGCC_ConferenceInviteRequest::m_conductedPrivilegesGCC_ConferenceInviteRequest::m_nonConductedPrivilegesGCC_ConferenceInviteRequest::m_conferenceDescriptionGCC_ConferenceInviteRequest::m_callerIdentifierGCC_ConferenceInviteRequest::m_userDataGCC_ConferenceInviteRequest::m_conferencePriorityGCC_ConferencePriorityGCC_RegistryKey::PCLASSINFOGCC_RegistryKey::m_sessionKeyGCC_SessionKeyGCC_RegistryKey::m_resourceIDPASN_OctetStringGCC_ConferenceTerminateResponseGCC_ConferenceTerminateResponse::PCLASSINFOGCC_ConferenceTerminateResponse::m_resultGCC_ConferenceTerminateResponse_resultGCC_ConferenceJoinResponse_resultGCC_ConferenceJoinResponse_result::PCLASSINFOGCC_ConferenceJoinResponse_result::EnumerationsGCC_ApplicationInvokeSpecifier_expectedCapabilitySetPASN_ArrayGCC_ApplicationInvokeSpecifier_expectedCapabilitySet::PCLASSINFOGCC_ConferenceQueryRequestGCC_ConferenceQueryRequest::PCLASSINFOGCC_ConferenceQueryRequest::OptionalFieldsGCC_ConferenceQueryRequest::m_nodeTypeGCC_NodeTypeGCC_ConferenceQueryRequest::m_asymmetryIndicatorGCC_AsymmetryIndicatorGCC_ConferenceQueryRequest::m_userDataGCC_ConferenceCreateRequestGCC_ConferenceCreateRequest::PCLASSINFOGCC_ConferenceCreateRequest::OptionalFieldsGCC_ConferenceCreateRequest::m_conferenceNameGCC_ConferenceCreateRequest::m_convenerPasswordGCC_PasswordGCC_ConferenceCreateRequest::m_passwordGCC_ConferenceCreateRequest::m_lockedConferenceGCC_ConferenceCreateRequest::m_listedConferenceGCC_ConferenceCreateRequest::m_conductibleConferenceGCC_ConferenceCreateRequest::m_terminationMethodGCC_ConferenceCreateRequest::m_conductorPrivilegesGCC_ConferenceCreateRequest::m_conductedPrivilegesGCC_ConferenceCreateRequest::m_nonConductedPrivilegesGCC_ConferenceCreateRequest::m_conferenceDescriptionGCC_ConferenceCreateRequest::m_callerIdentifierGCC_ConferenceCreateRequest::m_userDataGCC_ConferenceCreateRequest::m_conferencePriorityGCC_DynamicTokenIDGCC_DynamicTokenID::PCLASSINFOGCC_ConferenceTransferRequestGCC_ConferenceTransferRequest::PCLASSINFOGCC_ConferenceTransferRequest::OptionalFieldsGCC_ConferenceTransferRequest::m_conferenceNameGCC_ConferenceTransferRequest::m_conferenceNameModifierGCC_ConferenceTransferRequest::m_networkAddressGCC_NetworkAddressGCC_ConferenceTransferRequest::m_transferringNodesGCC_ArrayOf_UserIDGCC_ConferenceTransferRequest::m_passwordGCC_RegistryAllocateHandleRequestGCC_RegistryAllocateHandleRequest::PCLASSINFOGCC_RegistryAllocateHandleRequest::m_entityIDGCC_EntityIDGCC_RegistryAllocateHandleRequest::m_numberOfHandlesGCC_ConferenceEjectUserRequestGCC_ConferenceEjectUserRequest::PCLASSINFOGCC_ConferenceEjectUserRequest::m_nodeToEjectGCC_ConferenceEjectUserRequest::m_reasonGCC_ConferenceEjectUserRequest_reasonGCC_ConferenceTerminateResponse_result::PCLASSINFOGCC_ConferenceTerminateResponse_result::EnumerationsGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype::PCLASSINFOGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype::m_nodeIDGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype::m_entityIDGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype::m_applicationRecordGCC_ApplicationRecordGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype::GetDataLengthGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype::DecodeGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype::EncodeGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype::PrintOnGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype::CompareGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype::CloneGCC_RegistryResponse_resultGCC_RegistryResponse_result::PCLASSINFOGCC_RegistryResponse_result::EnumerationsGCC_CapabilityClassGCC_CapabilityClass::PCLASSINFOGCC_CapabilityClass::ChoicesGCC_FunctionNotSupportedResponseGCC_FunctionNotSupportedResponse::PCLASSINFOGCC_FunctionNotSupportedResponse::m_requestGCC_PasswordChallengeRequestResponse::PCLASSINFOGCC_PasswordChallengeRequestResponse::ChoicesGCC_PasswordChallengeRequestResponse::operator GCC_PasswordSelector &GCC_PasswordSelector &GCC_PasswordChallengeRequestResponse::operator GCC_PasswordChallengeRequestResponse_challengeRequestResponse &GCC_PasswordChallengeRequestResponse_challengeRequestResponse &GCC_UserIDIndicationGCC_UserIDIndication::PCLASSINFOGCC_UserIDIndication::m_tagGCC_NetworkAddress_subtype_transportConnectionGCC_NetworkAddress_subtype_transportConnection::PCLASSINFOGCC_NetworkAddress_subtype_transportConnection::OptionalFieldsGCC_NetworkAddress_subtype_transportConnection::m_nsapAddressGCC_NetworkAddress_subtype_transportConnection::m_transportSelectorGCC_SessionKey::PCLASSINFOGCC_SessionKey::OptionalFieldsGCC_SessionKey::m_applicationProtocolKeyGCC_KeyGCC_SessionKey::m_sessionIDGCC_ChannelIDGCC_CapabilityIDGCC_CapabilityID::PCLASSINFOGCC_CapabilityID::ChoicesGCC_CapabilityID::operator GCC_Key &GCC_Key &GCC_ConferenceTimeRemainingIndicationGCC_ConferenceTimeRemainingIndication::PCLASSINFOGCC_ConferenceTimeRemainingIndication::OptionalFieldsGCC_ConferenceTimeRemainingIndication::m_timeRemainingGCC_TimeGCC_ConferenceTimeRemainingIndication::m_nodeIDGCC_ConferenceQueryResponse_resultGCC_ConferenceQueryResponse_result::PCLASSINFOGCC_ConferenceQueryResponse_result::EnumerationsGCC_DynamicChannelIDGCC_DynamicChannelID::PCLASSINFOGCC_UserID::PCLASSINFOGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_updateGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update::PCLASSINFOGCC_ArrayOf_UserID::PCLASSINFOGCC_SimpleTextStringGCC_SimpleTextString::PCLASSINFOGCC_ConductorAssignIndicationGCC_ConductorAssignIndication::PCLASSINFOGCC_ConductorAssignIndication::m_conductingNodeGCC_TokenIDGCC_TokenID::PCLASSINFOGCC_HandleGCC_Handle::PCLASSINFOGCC_ConferenceDescriptorGCC_ConferenceDescriptor::PCLASSINFOGCC_ConferenceDescriptor::OptionalFieldsGCC_ConferenceDescriptor::m_conferenceNameGCC_ConferenceDescriptor::m_conferenceNameModifierGCC_ConferenceDescriptor::m_conferenceDescriptionGCC_ConferenceDescriptor::m_lockedConferenceGCC_ConferenceDescriptor::m_passwordInTheClearRequiredGCC_ConferenceDescriptor::m_networkAddressGCC_ConferenceDescriptor::m_defaultConferenceFlagGCC_SimpleNumericStringPASN_NumericStringGCC_SimpleNumericString::PCLASSINFOGCC_ConferenceInviteResponseGCC_ConferenceInviteResponse::PCLASSINFOGCC_ConferenceInviteResponse::OptionalFieldsGCC_ConferenceInviteResponse::m_resultGCC_ConferenceInviteResponse_resultGCC_ConferenceInviteResponse::m_userDataGCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtypeGCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype::PCLASSINFOGCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype::m_capabilityIDGCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype::m_capabilityClassGCC_ConferencePrioritySchemeGCC_ConferencePriorityScheme::PCLASSINFOGCC_ConferencePriorityScheme::ChoicesGCC_ConferencePriorityScheme::operator GCC_NonStandardParameter &GCC_ApplicationInvokeSpecifierGCC_ApplicationInvokeSpecifier::PCLASSINFOGCC_ApplicationInvokeSpecifier::OptionalFieldsGCC_ApplicationInvokeSpecifier::m_sessionKeyGCC_ApplicationInvokeSpecifier::m_expectedCapabilitySetGCC_ApplicationInvokeSpecifier::m_startupChannelGCC_ChannelTypeGCC_ApplicationInvokeSpecifier::m_mandatoryFlagGCC_ApplicationRecord::PCLASSINFOGCC_ApplicationRecord::OptionalFieldsGCC_ApplicationRecord::m_applicationActiveGCC_ApplicationRecord::m_conductingOperationCapableGCC_ApplicationRecord::m_startupChannelGCC_ApplicationRecord::m_applicationUserIDGCC_ApplicationRecord::m_nonCollapsingCapabilitiesGCC_ApplicationRecord_nonCollapsingCapabilitiesGCC_PasswordSelector::PCLASSINFOGCC_PasswordSelector::ChoicesGCC_PasswordSelector::operator GCC_SimpleNumericString &GCC_PasswordSelector::operator GCC_SimpleTextString &GCC_ConferenceLockIndicationGCC_ConferenceLockIndication::PCLASSINFOGCC_ConductorReleaseIndicationGCC_ConductorReleaseIndication::PCLASSINFOGCC_Key::PCLASSINFOGCC_Key::ChoicesGCC_Key::operator GCC_H221NonStandardIdentifier &GCC_ArrayOf_TextStringGCC_ArrayOf_TextString::PCLASSINFOGCC_SubAddressStringGCC_SubAddressString::PCLASSINFOGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype::PCLASSINFOGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype::m_nodeIDGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype::m_nodeRecordGCC_NodeRecordGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype::GetDataLengthGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype::DecodeGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype::EncodeGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype::PrintOnGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype::CompareGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype::CloneGCC_StaticTokenIDGCC_StaticTokenID::PCLASSINFOGCC_ConferenceTimeExtendIndicationGCC_ConferenceTimeExtendIndication::PCLASSINFOGCC_ConferenceTimeExtendIndication::m_timeToExtendGCC_ConferenceTimeExtendIndication::m_nodeSpecificTimeFlagGCC_ArrayOf_ChallengeItemGCC_ArrayOf_ChallengeItem::PCLASSINFOGCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype::PCLASSINFOGCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype::m_capabilityIDGCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype::m_capabilityClassGCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype::m_numberOfEntitiesGCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype::GetDataLengthGCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype::DecodeGCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype::EncodeGCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype::PrintOnGCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype::CompareGCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype::CloneGCC_UserData_subtypeGCC_UserData_subtype::PCLASSINFOGCC_UserData_subtype::OptionalFieldsGCC_UserData_subtype::m_keyGCC_UserData_subtype::m_valueGCC_ExtraDialingStringGCC_ExtraDialingString::PCLASSINFOGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate::PCLASSINFOGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate::ChoicesGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate::operator GCC_ApplicationRecord &GCC_ApplicationRecord &GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate::CreateObjectGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate::CloneGCC_RegistryModificationRights::PCLASSINFOGCC_RegistryModificationRights::EnumerationsGCC_NodeType::PCLASSINFOGCC_NodeType::EnumerationsGCC_NetworkAddress_subtype_aggregatedChannelGCC_NetworkAddress_subtype_aggregatedChannel::PCLASSINFOGCC_NetworkAddress_subtype_aggregatedChannel::OptionalFieldsGCC_NetworkAddress_subtype_aggregatedChannel::m_transferModesGCC_NetworkAddress_subtype_aggregatedChannel_transferModesGCC_NetworkAddress_subtype_aggregatedChannel::m_internationalNumberGCC_DialingStringGCC_NetworkAddress_subtype_aggregatedChannel::m_subAddressGCC_NetworkAddress_subtype_aggregatedChannel::m_extraDialingGCC_NetworkAddress_subtype_aggregatedChannel::m_highLayerCompatibilityGCC_RegistryAllocateHandleResponseGCC_RegistryAllocateHandleResponse::PCLASSINFOGCC_RegistryAllocateHandleResponse::m_entityIDGCC_RegistryAllocateHandleResponse::m_numberOfHandlesGCC_RegistryAllocateHandleResponse::m_firstHandleGCC_RegistryAllocateHandleResponse::m_resultGCC_RegistryAllocateHandleResponse_resultGCC_ConferenceTerminateIndicationGCC_ConferenceTerminateIndication::PCLASSINFOGCC_ConferenceTerminateIndication::m_reasonGCC_ConferenceTerminateIndication_reasonGCC_ConferenceUnlockResponseGCC_ConferenceUnlockResponse::PCLASSINFOGCC_ConferenceUnlockResponse::m_resultGCC_ConferenceUnlockResponse_resultGCC_NetworkAddress::PCLASSINFOGCC_RegistryEntryOwner_ownedGCC_RegistryEntryOwner_owned::PCLASSINFOGCC_RegistryEntryOwner_owned::m_nodeIDGCC_RegistryEntryOwner_owned::m_entityIDGCC_ConferenceNameSelector::PCLASSINFOGCC_ConferenceNameSelector::ChoicesGCC_ConferenceNameSelector::operator GCC_SimpleNumericString &GCC_ConferenceNameSelector::operator GCC_SimpleTextString &GCC_ConferenceJoinResponseGCC_ConferenceJoinResponse::PCLASSINFOGCC_ConferenceJoinResponse::OptionalFieldsGCC_ConferenceJoinResponse::m_nodeIDGCC_ConferenceJoinResponse::m_topNodeIDGCC_ConferenceJoinResponse::m_tagGCC_ConferenceJoinResponse::m_conferenceNameAliasGCC_ConferenceJoinResponse::m_passwordInTheClearRequiredGCC_ConferenceJoinResponse::m_lockedConferenceGCC_ConferenceJoinResponse::m_listedConferenceGCC_ConferenceJoinResponse::m_conductibleConferenceGCC_ConferenceJoinResponse::m_terminationMethodGCC_ConferenceJoinResponse::m_conductorPrivilegesGCC_ConferenceJoinResponse::m_conductedPrivilegesGCC_ConferenceJoinResponse::m_nonConductedPrivilegesGCC_ConferenceJoinResponse::m_conferenceDescriptionGCC_ConferenceJoinResponse::m_passwordGCC_ConferenceJoinResponse::m_resultGCC_ConferenceJoinResponse::m_userDataGCC_Password::PCLASSINFOGCC_Password::OptionalFieldsGCC_Password::m_numericGCC_Password::m_textGCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh::PCLASSINFOGCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh::CreateObjectGCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh::operator []GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh::CloneGCC_ConferenceTerminateIndication_reason::PCLASSINFOGCC_ConferenceTerminateIndication_reason::EnumerationsGCC_DialingString::PCLASSINFOGCC_RegistryEntryOwner::PCLASSINFOGCC_RegistryEntryOwner::ChoicesGCC_RegistryEntryOwner::operator GCC_RegistryEntryOwner_owned &GCC_RegistryEntryOwner_owned &GCC_AsymmetryIndicator::PCLASSINFOGCC_AsymmetryIndicator::ChoicesGCC_ConferencePriority::PCLASSINFOGCC_ConferencePriority::m_priorityGCC_ConferencePriority::m_schemeGCC_ConnectGCCPDUGCC_ConnectGCCPDU::PCLASSINFOGCC_ConnectGCCPDU::ChoicesGCC_ConnectGCCPDU::operator GCC_ConferenceCreateRequest &GCC_ConferenceCreateRequest &GCC_ConnectGCCPDU::operator GCC_ConferenceCreateResponse &GCC_ConferenceCreateResponse &GCC_ConnectGCCPDU::operator GCC_ConferenceQueryRequest &GCC_ConferenceQueryRequest &GCC_ConnectGCCPDU::operator GCC_ConferenceQueryResponse &GCC_ConferenceQueryResponse &GCC_ConnectGCCPDU::operator GCC_ConferenceJoinRequest &GCC_ConnectGCCPDU::operator GCC_ConferenceJoinResponse &GCC_ConferenceJoinResponse &GCC_ConnectGCCPDU::operator GCC_ConferenceInviteRequest &GCC_ConferenceInviteRequest &GCC_ConnectGCCPDU::operator GCC_ConferenceInviteResponse &GCC_ConferenceInviteResponse &GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList::PCLASSINFOGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList::ChoicesGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList::operator GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh &GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh &GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList::operator GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update &GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update &GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList::CreateObjectGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList::CloneGCC_ConferenceEjectUserIndicationGCC_ConferenceEjectUserIndication::PCLASSINFOGCC_ConferenceEjectUserIndication::m_nodeToEjectGCC_ConferenceEjectUserIndication::m_reasonGCC_ConferenceEjectUserIndication_reasonGCC_Time::PCLASSINFOGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::PCLASSINFOGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::m_speechGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::m_voice_bandGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::m_digital_56kGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::m_digital_64kGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::m_digital_128kGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::m_digital_192kGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::m_digital_256kGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::m_digital_320kGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::m_digital_384kGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::m_digital_512kGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::m_digital_768kGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::m_digital_1152kGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::m_digital_1472kGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::m_digital_1536kGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::m_digital_1920kGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::m_packet_modeGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::m_frame_modeGCC_NetworkAddress_subtype_aggregatedChannel_transferModes::m_atmGCC_RosterUpdateIndication_applicationInformation_subtypeGCC_RosterUpdateIndication_applicationInformation_subtype::PCLASSINFOGCC_RosterUpdateIndication_applicationInformation_subtype::m_sessionKeyGCC_RosterUpdateIndication_applicationInformation_subtype::m_applicationRecordListGCC_RosterUpdateIndication_applicationInformation_subtype::m_applicationCapabilitiesListGCC_RosterUpdateIndication_applicationInformation_subtype::m_rosterInstanceNumberGCC_RosterUpdateIndication_applicationInformation_subtype::m_peerEntitiesAddedGCC_RosterUpdateIndication_applicationInformation_subtype::m_peerEntitiesRemovedGCC_ConductorPermissionAskIndicationGCC_ConductorPermissionAskIndication::PCLASSINFOGCC_ConductorPermissionAskIndication::m_grantFlagGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh::PCLASSINFOGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh::CreateObjectGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh::operator []GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh::CloneGCC_ApplicationRecord_nonCollapsingCapabilities::PCLASSINFOGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype::PCLASSINFOGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype::m_nodeIDGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype::m_entityIDGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype::m_applicationUpdateGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype::GetDataLengthGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype::DecodeGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype::EncodeGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype::PrintOnGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype::CompareGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype::CloneGCC_ConferenceAssistanceIndicationGCC_ConferenceAssistanceIndication::PCLASSINFOGCC_ConferenceAssistanceIndication::OptionalFieldsGCC_ConferenceAssistanceIndication::m_userDataGCC_RegistryResponseGCC_RegistryResponse::PCLASSINFOGCC_RegistryResponse::OptionalFieldsGCC_RegistryResponse::m_entityIDGCC_RegistryResponse::m_primitiveTypeGCC_RegistryResponse_primitiveTypeGCC_RegistryResponse::m_keyGCC_RegistryResponse::m_itemGCC_RegistryResponse::m_ownerGCC_RegistryResponse::m_modificationRightsGCC_RegistryResponse::m_resultGCC_ConferenceLockRequestGCC_ConferenceLockRequest::PCLASSINFOGCC_ChallengeResponseItemGCC_ChallengeResponseItem::PCLASSINFOGCC_ChallengeResponseItem::ChoicesGCC_ChallengeResponseItem::operator GCC_PasswordSelector &GCC_ChallengeResponseItem::operator GCC_UserData &GCC_UserData &GCC_ConferenceCreateResponseGCC_ConferenceCreateResponse::PCLASSINFOGCC_ConferenceCreateResponse::OptionalFieldsGCC_ConferenceCreateResponse::m_nodeIDGCC_ConferenceCreateResponse::m_tagGCC_ConferenceCreateResponse::m_resultGCC_ConferenceCreateResponse_resultGCC_ConferenceCreateResponse::m_userDataGCC_H221NonStandardIdentifierGCC_H221NonStandardIdentifier::PCLASSINFOGCC_ChannelID::PCLASSINFOGCC_StaticChannelIDGCC_StaticChannelID::PCLASSINFOGCC_NonStandardPDUGCC_NonStandardPDU::PCLASSINFOGCC_NonStandardPDU::m_dataGCC_NonStandardParameterGCC_ConferenceLockResponse_resultGCC_ConferenceLockResponse_result::PCLASSINFOGCC_ConferenceLockResponse_result::EnumerationsGCC_RegistryDeleteEntryRequestGCC_RegistryDeleteEntryRequest::PCLASSINFOGCC_RegistryDeleteEntryRequest::m_entityIDGCC_RegistryDeleteEntryRequest::m_keyGCC_ConferenceAddResponse_resultGCC_ConferenceAddResponse_result::PCLASSINFOGCC_ConferenceAddResponse_result::EnumerationsGCC_GCCPDUGCC_GCCPDU::PCLASSINFOGCC_GCCPDU::ChoicesGCC_GCCPDU::operator GCC_RequestPDU &GCC_RequestPDU &GCC_GCCPDU::operator GCC_ResponsePDU &GCC_ResponsePDU &GCC_GCCPDU::operator GCC_IndicationPDU &GCC_IndicationPDU &GCC_ConferenceEjectUserResponse_resultGCC_ConferenceEjectUserResponse_result::PCLASSINFOGCC_ConferenceEjectUserResponse_result::EnumerationsGCC_EntityID::PCLASSINFOGCC_RosterUpdateIndicationGCC_RosterUpdateIndication::PCLASSINFOGCC_RosterUpdateIndication::m_fullRefreshGCC_RosterUpdateIndication::m_nodeInformationGCC_RosterUpdateIndication::m_applicationInformationGCC_RosterUpdateIndication_applicationInformationGCC_RosterUpdateIndication_nodeInformation_nodeRecordList::PCLASSINFOGCC_RosterUpdateIndication_nodeInformation_nodeRecordList::ChoicesGCC_RosterUpdateIndication_nodeInformation_nodeRecordList::operator GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh &GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh &GCC_RosterUpdateIndication_nodeInformation_nodeRecordList::operator GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update &GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update &GCC_ConferenceInviteResponse_result::PCLASSINFOGCC_ConferenceInviteResponse_result::EnumerationsGCC_ConferenceEjectUserResponseGCC_ConferenceEjectUserResponse::PCLASSINFOGCC_ConferenceEjectUserResponse::m_nodeToEjectGCC_ConferenceEjectUserResponse::m_resultGCC_RegistryItem::PCLASSINFOGCC_RegistryItem::ChoicesGCC_RegistryItem::operator GCC_DynamicChannelID &GCC_RegistryItem::operator GCC_DynamicTokenID &GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh::PCLASSINFOGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh::CreateObjectGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh::operator []GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh::CloneGCC_RegistryResponse_primitiveType::PCLASSINFOGCC_RegistryResponse_primitiveType::EnumerationsGCC_ArrayOf_ApplicationInvokeSpecifierGCC_ArrayOf_ApplicationInvokeSpecifier::PCLASSINFOGCC_ConferenceTransferResponseGCC_ConferenceTransferResponse::PCLASSINFOGCC_ConferenceTransferResponse::OptionalFieldsGCC_ConferenceTransferResponse::m_conferenceNameGCC_ConferenceTransferResponse::m_conferenceNameModifierGCC_ConferenceTransferResponse::m_transferringNodesGCC_ConferenceTransferResponse::m_resultGCC_ConferenceTransferResponse_resultGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update::PCLASSINFOGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update::CreateObjectGCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update::operator []GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update::CloneGCC_ConferenceTerminateRequestGCC_ConferenceTerminateRequest::PCLASSINFOGCC_ConferenceTerminateRequest::m_reasonGCC_ConferenceTerminateRequest_reasonGCC_ArrayOf_ConferenceDescriptorGCC_ArrayOf_ConferenceDescriptor::PCLASSINFOGCC_RegistryRegisterChannelRequestGCC_RegistryRegisterChannelRequest::PCLASSINFOGCC_RegistryRegisterChannelRequest::m_entityIDGCC_RegistryRegisterChannelRequest::m_keyGCC_RegistryRegisterChannelRequest::m_channelIDGCC_ConferenceQueryResponseGCC_ConferenceQueryResponse::PCLASSINFOGCC_ConferenceQueryResponse::OptionalFieldsGCC_ConferenceQueryResponse::m_nodeTypeGCC_ConferenceQueryResponse::m_asymmetryIndicatorGCC_ConferenceQueryResponse::m_conferenceListGCC_ConferenceQueryResponse::m_resultGCC_ConferenceQueryResponse::m_userDataGCC_ConferenceQueryResponse::m_waitForInvitationFlagGCC_ConferenceQueryResponse::m_noUnlistedConferenceFlagGCC_ChallengeResponseGCC_ChallengeResponse::PCLASSINFOGCC_ChallengeResponse::m_challengeTagGCC_ChallengeResponse::m_responseAlgorithmGCC_ChallengeResponse::m_responseItemGCC_ArrayOf_Privilege::PCLASSINFOGCC_ConferenceTerminateRequest_reason::PCLASSINFOGCC_ConferenceTerminateRequest_reason::EnumerationsGCC_RegistryAssignTokenRequestGCC_RegistryAssignTokenRequest::PCLASSINFOGCC_RegistryAssignTokenRequest::m_entityIDGCC_RegistryAssignTokenRequest::m_keyGCC_PasswordChallengeRequestResponse_challengeRequestResponseGCC_PasswordChallengeRequestResponse_challengeRequestResponse::PCLASSINFOGCC_PasswordChallengeRequestResponse_challengeRequestResponse::OptionalFieldsGCC_PasswordChallengeRequestResponse_challengeRequestResponse::m_challengeRequestGCC_ChallengeRequestGCC_PasswordChallengeRequestResponse_challengeRequestResponse::m_challengeResponseGCC_AlternativeNodeIDGCC_AlternativeNodeID::PCLASSINFOGCC_AlternativeNodeID::ChoicesGCC_ChallengeRequest::PCLASSINFOGCC_ChallengeRequest::m_challengeTagGCC_ChallengeRequest::m_challengeSetGCC_TextMessageIndicationGCC_TextMessageIndication::PCLASSINFOGCC_TextMessageIndication::m_messageGCC_NodeRecord::PCLASSINFOGCC_NodeRecord::OptionalFieldsGCC_NodeRecord::m_superiorNodeGCC_NodeRecord::m_nodeTypeGCC_NodeRecord::m_nodePropertiesGCC_NodePropertiesGCC_NodeRecord::m_nodeNameGCC_NodeRecord::m_participantsListGCC_NodeRecord::m_siteInformationGCC_NodeRecord::m_networkAddressGCC_NodeRecord::m_alternativeNodeIDGCC_NodeRecord::m_userDataGCC_ConferenceTransferResponse_result::PCLASSINFOGCC_ConferenceTransferResponse_result::EnumerationsGCC_ConferenceUnlockIndicationGCC_ConferenceUnlockIndication::PCLASSINFOGCC_ApplicationInvokeIndicationGCC_ApplicationInvokeIndication::PCLASSINFOGCC_ApplicationInvokeIndication::OptionalFieldsGCC_ApplicationInvokeIndication::m_applicationProtocolEntiyListGCC_ApplicationInvokeIndication::m_destinationNodesGCC_ConferenceAddRequestGCC_ConferenceAddRequest::PCLASSINFOGCC_ConferenceAddRequest::OptionalFieldsGCC_ConferenceAddRequest::m_networkAddressGCC_ConferenceAddRequest::m_requestingNodeGCC_ConferenceAddRequest::m_tagGCC_ConferenceAddRequest::m_addingMCUGCC_ConferenceAddRequest::m_userDataGCC_ConferenceCreateResponse_result::PCLASSINFOGCC_ConferenceCreateResponse_result::EnumerationsGCC_ConferenceAddResponseGCC_ConferenceAddResponse::PCLASSINFOGCC_ConferenceAddResponse::OptionalFieldsGCC_ConferenceAddResponse::m_tagGCC_ConferenceAddResponse::m_resultGCC_ConferenceAddResponse::m_userDataGCC_ConferenceEjectUserRequest_reason::PCLASSINFOGCC_ConferenceEjectUserRequest_reason::EnumerationsGCC_NonStandardParameter::PCLASSINFOGCC_NonStandardParameter::m_keyGCC_NonStandardParameter::m_dataGCC_ConferenceLockResponseGCC_ConferenceLockResponse::PCLASSINFOGCC_ConferenceLockResponse::m_resultGCC_ConductorPermissionGrantIndicationGCC_ConductorPermissionGrantIndication::PCLASSINFOGCC_ConductorPermissionGrantIndication::OptionalFieldsGCC_ConductorPermissionGrantIndication::m_permissionListGCC_ConductorPermissionGrantIndication::m_waitingListGCC_ConferenceName::PCLASSINFOGCC_ConferenceName::OptionalFieldsGCC_ConferenceName::m_numericGCC_ConferenceName::m_textGCC_IndicationPDUGCC_IndicationPDU::PCLASSINFOGCC_IndicationPDU::ChoicesGCC_IndicationPDU::operator GCC_UserIDIndication &GCC_UserIDIndication &GCC_IndicationPDU::operator GCC_ConferenceLockIndication &GCC_ConferenceLockIndication &GCC_IndicationPDU::operator GCC_ConferenceUnlockIndication &GCC_ConferenceUnlockIndication &GCC_IndicationPDU::operator GCC_ConferenceTerminateIndication &GCC_ConferenceTerminateIndication &GCC_IndicationPDU::operator GCC_ConferenceEjectUserIndication &GCC_ConferenceEjectUserIndication &GCC_IndicationPDU::operator GCC_ConferenceTransferIndication &GCC_ConferenceTransferIndication &GCC_IndicationPDU::operator GCC_RosterUpdateIndication &GCC_RosterUpdateIndication &GCC_IndicationPDU::operator GCC_ApplicationInvokeIndication &GCC_ApplicationInvokeIndication &GCC_IndicationPDU::operator GCC_RegistryMonitorEntryIndication &GCC_RegistryMonitorEntryIndication &GCC_IndicationPDU::operator GCC_ConductorAssignIndication &GCC_ConductorAssignIndication &GCC_IndicationPDU::operator GCC_ConductorReleaseIndication &GCC_ConductorReleaseIndication &GCC_IndicationPDU::operator GCC_ConductorPermissionAskIndication &GCC_ConductorPermissionAskIndication &GCC_IndicationPDU::operator GCC_ConductorPermissionGrantIndication &GCC_ConductorPermissionGrantIndication &GCC_IndicationPDU::operator GCC_ConferenceTimeRemainingIndication &GCC_ConferenceTimeRemainingIndication &GCC_IndicationPDU::operator GCC_ConferenceTimeInquireIndication &GCC_ConferenceTimeInquireIndication &GCC_IndicationPDU::operator GCC_ConferenceTimeExtendIndication &GCC_ConferenceTimeExtendIndication &GCC_IndicationPDU::operator GCC_ConferenceAssistanceIndication &GCC_ConferenceAssistanceIndication &GCC_IndicationPDU::operator GCC_TextMessageIndication &GCC_TextMessageIndication &GCC_IndicationPDU::operator GCC_NonStandardPDU &GCC_ChallengeItemGCC_ChallengeItem::PCLASSINFOGCC_ChallengeItem::m_responseAlgorithmGCC_ChallengeItem::m_challengeDataGCC_ConferenceEjectUserIndication_reason::PCLASSINFOGCC_ConferenceEjectUserIndication_reason::EnumerationsGCC_RegistryMonitorEntryRequestGCC_RegistryMonitorEntryRequest::PCLASSINFOGCC_RegistryMonitorEntryRequest::m_entityIDGCC_RegistryMonitorEntryRequest::m_keyGCC_ConferenceTransferIndicationGCC_ConferenceTransferIndication::PCLASSINFOGCC_ConferenceTransferIndication::OptionalFieldsGCC_ConferenceTransferIndication::m_conferenceNameGCC_ConferenceTransferIndication::m_conferenceNameModifierGCC_ConferenceTransferIndication::m_networkAddressGCC_ConferenceTransferIndication::m_transferringNodesGCC_ConferenceTransferIndication::m_passwordGCC_RegistrySetParameterRequestGCC_RegistrySetParameterRequest::PCLASSINFOGCC_RegistrySetParameterRequest::OptionalFieldsGCC_RegistrySetParameterRequest::m_entityIDGCC_RegistrySetParameterRequest::m_keyGCC_RegistrySetParameterRequest::m_parameterGCC_RegistrySetParameterRequest::m_modificationRightsGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype::PCLASSINFOGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype::m_nodeIDGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype::m_nodeUpdateGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype::GetDataLengthGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype::DecodeGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype::EncodeGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype::PrintOnGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype::CompareGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype::CloneGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate::PCLASSINFOGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate::ChoicesGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate::operator GCC_NodeRecord &GCC_NodeRecord &GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate::CreateObjectGCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate::CloneGCC_RegistryAllocateHandleResponse_result::PCLASSINFOGCC_RegistryAllocateHandleResponse_result::EnumerationsGCC_RosterUpdateIndication_applicationInformation::PCLASSINFOGCC_ConnectDataGCC_ConnectData::PCLASSINFOGCC_ConnectData::m_t124IdentifierGCC_ConnectData::m_connectPDUGCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::PCLASSINFOGCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::m_telephony3kHzGCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::m_telephony7kHzGCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::m_videotelephonyGCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::m_videoconferenceGCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::m_audiographicGCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::m_audiovisualGCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::m_multimediaGCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::GetDataLengthGCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::DecodeGCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::EncodeGCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::PrintOnGCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::CompareGCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::CloneGCC_UserData::PCLASSINFOGCC_ConferenceUnlockRequestGCC_ConferenceUnlockRequest::PCLASSINFOGCC_ResponsePDUGCC_ResponsePDU::PCLASSINFOGCC_ResponsePDU::ChoicesGCC_ResponsePDU::operator GCC_ConferenceJoinResponse &GCC_ResponsePDU::operator GCC_ConferenceAddResponse &GCC_ConferenceAddResponse &GCC_ResponsePDU::operator GCC_ConferenceLockResponse &GCC_ConferenceLockResponse &GCC_ResponsePDU::operator GCC_ConferenceUnlockResponse &GCC_ConferenceUnlockResponse &GCC_ResponsePDU::operator GCC_ConferenceTerminateResponse &GCC_ConferenceTerminateResponse &GCC_ResponsePDU::operator GCC_ConferenceEjectUserResponse &GCC_ConferenceEjectUserResponse &GCC_ResponsePDU::operator GCC_ConferenceTransferResponse &GCC_ConferenceTransferResponse &GCC_ResponsePDU::operator GCC_RegistryResponse &GCC_RegistryResponse &GCC_ResponsePDU::operator GCC_RegistryAllocateHandleResponse &GCC_RegistryAllocateHandleResponse &GCC_ResponsePDU::operator GCC_FunctionNotSupportedResponse &GCC_FunctionNotSupportedResponse &GCC_ResponsePDU::operator GCC_NonStandardPDU &GCC_ChannelType::PCLASSINFOGCC_ChannelType::EnumerationsGCC_ConferenceUnlockResponse_result::PCLASSINFOGCC_ConferenceUnlockResponse_result::EnumerationsGCC_ConferenceNameModifier::PCLASSINFOGCC_NodeProperties::PCLASSINFOGCC_NodeProperties::m_managementDeviceGCC_NodeProperties::m_peripheralDeviceGCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList::PCLASSINFOGCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList::ChoicesGCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList::operator GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh &GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh &GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList::CreateObjectGCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList::CloneGCC_RegistryRetrieveEntryRequestGCC_RegistryRetrieveEntryRequest::PCLASSINFOGCC_RegistryRetrieveEntryRequest::m_entityIDGCC_RegistryRetrieveEntryRequest::m_keyGCC_PrivilegeGCC_Privilege::PCLASSINFOGCC_Privilege::EnumerationsGCC_ApplicationRecord_nonCollapsingCapabilities_subtypeGCC_ApplicationRecord_nonCollapsingCapabilities_subtype::PCLASSINFOGCC_ApplicationRecord_nonCollapsingCapabilities_subtype::OptionalFieldsGCC_ApplicationRecord_nonCollapsingCapabilities_subtype::m_capabilityIDGCC_ApplicationRecord_nonCollapsingCapabilities_subtype::m_applicationDataD:\openh323\include\gkclient.hH323GatekeeperH225_RASH323Gatekeeper::PCLASSINFOH225_FeatureSet &featuresconst H225_FeatureSet &featuresBOOL autoReregister = TRUE ///< Automatic register on unregister H323Gatekeeper::AdmissionResponseH323Gatekeeper::AdmissionResponse::rejectReasonH323Gatekeeper::AdmissionResponse::gatekeeperRoutedH323Gatekeeper::AdmissionResponse::endpointCountH323Gatekeeper::AdmissionResponse::transportAddressH323TransportAddress *H323Gatekeeper::AdmissionResponse::accessTokenDataPBYTEArray *H323Gatekeeper::AdmissionResponse::aliasAddressesH225_ArrayOf_AliasAddress *H323Gatekeeper::AdmissionResponse::destExtraCallInfoH323Gatekeeper::AdmissionResponse &responseBOOL ignorePreGrantedARQ = FALSE ///< Flag to force ARQ to be sent H323Gatekeeper::IsDiscoveryCompleteH323Gatekeeper::IsRegisteredH323Gatekeeper::RegistrationFailReasonsH323Gatekeeper::GetRegistrationFailReasonenum H323Gatekeeper::RegistrationFailReasonsH323Gatekeeper::GetEndpointIdentifierconst PString &username = PString() ///< Username for password H323Gatekeeper::GetGatekeeperRouteAddressconst PString &gatekeeperIdentifierH323Gatekeeper::PDECLARE_NOTIFIERPTimerTickleMonitorMonitorMainH323Gatekeeper::discoveryCompleteH323Gatekeeper::endpointIdentifierH323Gatekeeper::registrationFailReasonH323Gatekeeper::AlternateInfoH323Gatekeeper::AlternateInfo::PCLASSINFOconst H323Gatekeeper::AlternateInfo &H323Gatekeeper::AlternateInfo::rasAddressH323Gatekeeper::AlternateInfo::gatekeeperIdentifierH323Gatekeeper::AlternateInfo::priorityH323Gatekeeper::AlternateInfo::registrationStateH323Gatekeeper::AlternateInfo::operator =H323Gatekeeper::AlternateInfo &H323Gatekeeper::alternatesPSortedListH323Gatekeeper::alternatePermanentH323Gatekeeper::requestMutexPSemaphoreH323Gatekeeper::authenticatorsH323Gatekeeper::assignedGKH323Gatekeeper::AlternateInfo *H323Gatekeeper::pregrantMakeCallH323Gatekeeper::pregrantAnswerCallH323Gatekeeper::gkRouteAddressH323Gatekeeper::autoReregisterH323Gatekeeper::reregisterNowH323Gatekeeper::timeToLiveH323Gatekeeper::requiresDiscoveryH323Gatekeeper::infoRequestRateH323Gatekeeper::willRespondToIRRH323Gatekeeper::monitorH323Gatekeeper::monitorStopH323Gatekeeper::monitorTickleH323Gatekeeper::serviceControlSessionsPDictionaryH323Gatekeeper::featuresH460_FeatureSet &D:\openh323\include\gkserver.hH225_EndpointIdentifierH323GatekeeperRequestH323TransactionH323GatekeeperRequest::PCLASSINFOH323GatekeeperRequest::GetGatekeeperIdentifierH323GatekeeperRequest::GetGatekeeperRejectTagH323GatekeeperRequest::GetEndpointIdentifierH323GatekeeperRequest::GetRegisteredEndPointRejectTagH323GatekeeperRequest::GetSecurityRejectTagH323GatekeeperRequest::GetRasChannelH323GatekeeperListener &H323GatekeeperRequest::endpointH323GatekeeperRequest::rasChannelH323GatekeeperListenerH323GatekeeperListener::PCLASSINFOH323GatekeeperServer &serverH323Transport *transport = NULLH323GatekeeperCall *call = NULL H323GatekeeperGRQ &requestH323GatekeeperRRQ &requestH323GatekeeperURQ &requestH323GatekeeperARQ &requestH323GatekeeperDRQ &requestH323GatekeeperBRQ &requestH323GatekeeperLRQ &requestH323GatekeeperIRR &requestH323GatekeeperListener::GetGatekeeperH323GatekeeperServer &H323GatekeeperListener::gatekeeperH323GatekeeperCallPSafeObjectH323GatekeeperCall::PCLASSINFOH323GatekeeperCall::Directionconst OpalGloballyUniqueID &callIdentifierenum H323GatekeeperCall::Direction directionint reason = -1 ///< Reason for disengage H225_InfoRequestResponse_perCallInfo_subtype &callBOOL &isGkRoutedH323GatekeeperCall::GetGatekeeperH323GatekeeperCall::GetEndPointH323GatekeeperCall::IsAnsweringCallH323GatekeeperCall::GetCallReferenceH323GatekeeperCall::GetCallIdentifierconst OpalGloballyUniqueID &H323GatekeeperCall::GetConferenceIdentifierH323GatekeeperCall::GetSourceNumberH323GatekeeperCall::GetSourceAliasesconst PStringArray &H323GatekeeperCall::GetSourceHostH323GatekeeperCall::GetDestinationNumberH323GatekeeperCall::GetDestinationAliasesH323GatekeeperCall::GetDestinationHostH323GatekeeperCall::GetBandwidthUsedH323GatekeeperCall::GetLastInfoResponseTimeconst PTime &H323GatekeeperCall::GetCallStartTimeH323GatekeeperCall::GetAlertingTimeH323GatekeeperCall::GetConnectedTimeH323GatekeeperCall::GetCallEndTimeH323GatekeeperCall::GetCallEndReasonH323GatekeeperCall::gatekeeperH323GatekeeperCall::endpointH323GatekeeperCall::rasChannelH323GatekeeperListener *H323GatekeeperCall::directionenum H323GatekeeperCall::DirectionH323GatekeeperCall::callReferenceH323GatekeeperCall::callIdentifierOpalGloballyUniqueIDH323GatekeeperCall::conferenceIdentifierH323GatekeeperCall::srcNumberH323GatekeeperCall::srcAliasesH323GatekeeperCall::srcHostH323GatekeeperCall::dstNumberH323GatekeeperCall::dstAliasesH323GatekeeperCall::dstHostH323GatekeeperCall::bandwidthUsedH323GatekeeperCall::infoResponseRateH323GatekeeperCall::lastInfoResponsePTimeH323GatekeeperCall::drqReceivedH323GatekeeperCall::callStartTimeH323GatekeeperCall::alertingTimeH323GatekeeperCall::connectedTimeH323GatekeeperCall::callEndTimeH323GatekeeperCall::callEndReasonH323GatekeeperURQH323GatekeeperURQ::PCLASSINFOH323GatekeeperListener &listenerH323GatekeeperURQ::urqH323GatekeeperURQ::ucfH323GatekeeperURQ::urjResponseH323RegisteredEndPointH323RegisteredEndPoint::PCLASSINFOH323RegisteredEndPoint::GetCallCountH323RegisteredEndPoint::GetCallH323GatekeeperCall &int reason = -1 ///< Reason for unregistration const PString &username = PString::Empty() H323RegisteredEndPoint::GetIdentifierH323RegisteredEndPoint::GetDescriptorIDH323RegisteredEndPoint::GetGatekeeperH323RegisteredEndPoint::GetRASAddressesconst H323TransportAddressArray &H323RegisteredEndPoint::GetRASAddressCountH323RegisteredEndPoint::GetRASAddressH323RegisteredEndPoint::GetSignalAddressesH323RegisteredEndPoint::GetSignalAddressCountH323RegisteredEndPoint::GetSignalAddressH323RegisteredEndPoint::GetAliasesH323RegisteredEndPoint::ContainsAliasH323RegisteredEndPoint::GetAliasCountH323RegisteredEndPoint::GetAliasH323RegisteredEndPoint::GetAuthenticatorsH323RegisteredEndPoint::GetPrefixCountH323RegisteredEndPoint::GetPrefixH323RegisteredEndPoint::GetApplicationInfoconst PCaselessString &H323RegisteredEndPoint::GetProtocolVersionH323RegisteredEndPoint::IsBehindNATH323RegisteredEndPoint::CanDisplayAmountStringH323RegisteredEndPoint::CanEnforceDurationLimitH323RegisteredEndPoint::GetH225VersionH323RegisteredEndPoint::gatekeeperH323RegisteredEndPoint::rasChannelH323RegisteredEndPoint::identifierH323RegisteredEndPoint::descriptorIDH323RegisteredEndPoint::rasAddressesH323RegisteredEndPoint::signalAddressesH323RegisteredEndPoint::aliasesH323RegisteredEndPoint::voicePrefixesH323RegisteredEndPoint::applicationInfoPCaselessStringH323RegisteredEndPoint::protocolVersionH323RegisteredEndPoint::isBehindNATH323RegisteredEndPoint::canDisplayAmountStringH323RegisteredEndPoint::canEnforceDurationLimitH323RegisteredEndPoint::h225VersionH323RegisteredEndPoint::timeToLiveH323RegisteredEndPoint::authenticatorsH323RegisteredEndPoint::lastRegistrationH323RegisteredEndPoint::lastInfoResponseH323RegisteredEndPoint::activeCallsPSortedListH323RegisteredEndPoint::serviceControlSessionsPOrdinalDictionaryH323GatekeeperServerH323TransactionServerH323GatekeeperServer::PCLASSINFOH323GatekeeperServer::GetDefaultUdpPortPSafetyMode mode = PSafeReference PSafetyMode mode = PSafeReadWrite H323GatekeeperServer::GetFirstEndPointH323GatekeeperServer::AddCallconst PString &descriptionH323GatekeeperServer::GetFirstCallunsigned int oldBandwidth = 0 H235Authenticators &authenticatorsH323RegisteredEndPoint ®isteredEndpointH323GatekeeperServer::GetPeerElementH323PeerElement *BOOL append = FALSEBOOL keepTrying = TRUE H323GatekeeperServer::GetGatekeeperIdentifierBOOL adjustListeners = TRUE H323GatekeeperServer::GetAvailableBandwidthH323GatekeeperServer::SetAvailableBandwidthunsigned int bps100H323GatekeeperServer::GetUsedBandwidthH323GatekeeperServer::GetDefaultBandwidthH323GatekeeperServer::GetTimeToLiveH323GatekeeperServer::SetTimeToLiveH323GatekeeperServer::GetInfoResponseRateH323GatekeeperServer::SetInfoResponseRateH323GatekeeperServer::IsGatekeeperRoutedH323GatekeeperServer::IsRequiredH235H323GatekeeperServer::GetActiveRegistrationsH323GatekeeperServer::GetPeakRegistrationsH323GatekeeperServer::GetTotalRegistrationsH323GatekeeperServer::GetRejectedRegistrationsH323GatekeeperServer::GetActiveCallsH323GatekeeperServer::GetPeakCallsH323GatekeeperServer::GetTotalCallsH323GatekeeperServer::GetRejectedCallsH323GatekeeperServer::OnSendDescriptorForEndpointH225_ArrayOf_AliasAddress &H225_EndpointType &H323GatekeeperServer::AllowDuplicateAliasH323GatekeeperServer::PDECLARE_NOTIFIERH323GatekeeperServer::gatekeeperIdentifierH323GatekeeperServer::totalBandwidthH323GatekeeperServer::usedBandwidthH323GatekeeperServer::defaultBandwidthH323GatekeeperServer::maximumBandwidthH323GatekeeperServer::defaultTimeToLiveH323GatekeeperServer::defaultInfoResponseRateH323GatekeeperServer::overwriteOnSameSignalAddressH323GatekeeperServer::canHaveDuplicateAliasH323GatekeeperServer::canHaveDuplicatePrefixH323GatekeeperServer::canOnlyCallRegisteredEPH323GatekeeperServer::canOnlyAnswerRegisteredEPH323GatekeeperServer::answerCallPreGrantedARQH323GatekeeperServer::makeCallPreGrantedARQH323GatekeeperServer::isGatekeeperRoutedH323GatekeeperServer::aliasCanBeHostNameH323GatekeeperServer::requireH235H323GatekeeperServer::disengageOnHearbeatFailH323GatekeeperServer::passwordsH323GatekeeperServer::mutexH323GatekeeperServer::identifierBasetime_tH323GatekeeperServer::nextIdentifierH323GatekeeperServer::monitorThreadH323GatekeeperServer::monitorExitH323GatekeeperServer::PLISTListenerListH323GatekeeperServer::listenersH323GatekeeperServer::peerElementH323GatekeeperServer::byIdentifierPSafeDictionaryH323GatekeeperServer::StringMapH323GatekeeperServer::StringMap::PCLASSINFOH323GatekeeperServer::StringMap::StringMapconst PString &fromH323GatekeeperServer::StringMap::identifierH323GatekeeperServer::byAddressPSortedStringListH323GatekeeperServer::byAliasH323GatekeeperServer::byVoicePrefixH323GatekeeperServer::activeCallsPSafeSortedListH323GatekeeperServer::peakRegistrationsH323GatekeeperServer::totalRegistrationsH323GatekeeperServer::rejectedRegistrationsH323GatekeeperServer::peakCallsH323GatekeeperServer::totalCallsH323GatekeeperServer::rejectedCallsH323GatekeeperRRQH323GatekeeperRRQ::PCLASSINFOH323GatekeeperRRQ::rrqH323GatekeeperRRQ::rcfH323GatekeeperRRQ::rrjH323GatekeeperIRRH323GatekeeperIRR::PCLASSINFOH323GatekeeperIRR::irrH323GatekeeperIRR::iackH323GatekeeperIRR::inakH323GatekeeperLRQH323GatekeeperLRQ::PCLASSINFOH323GatekeeperLRQ::lrqH323GatekeeperLRQ::lcfH323GatekeeperLRQ::lrjH323GatekeeperGRQH323GatekeeperGRQ::PCLASSINFOH323GatekeeperGRQ::grqH323GatekeeperGRQ::gcfH323GatekeeperGRQ::grjH323GatekeeperARQH323GatekeeperARQ::PCLASSINFOH323GatekeeperARQ::arqH323GatekeeperARQ::acfH323GatekeeperARQ::arjH323GatekeeperARQ::alternateSecurityIDH225_GatekeeperIdentifierH323GatekeeperBRQH323GatekeeperBRQ::PCLASSINFOH323GatekeeperBRQ::brqH323GatekeeperBRQ::bcfH323GatekeeperBRQ::brjH323GatekeeperDRQH323GatekeeperDRQ::PCLASSINFOH323GatekeeperDRQ::drqH323GatekeeperDRQ::dcfH323GatekeeperDRQ::drjD:\openh323\include\guid.hOpalGloballyUniqueID::PCLASSINFOconst PASN_OctetString &ostrOpalGloballyUniqueID::operator !D:\openh323\include\h225.hH225_EnumeratedParameterH225_EnumeratedParameter::PCLASSINFOH225_EnumeratedParameter::OptionalFieldsH225_EnumeratedParameter::m_idH225_GenericIdentifierH225_EnumeratedParameter::m_contentH225_ContentH225_GroupID_memberH225_GroupID_member::PCLASSINFOH225_ServiceControlIndication_callSpecificH225_ServiceControlIndication_callSpecific::PCLASSINFOH225_ServiceControlIndication_callSpecific::m_callIdentifierH225_CallIdentifierH225_ServiceControlIndication_callSpecific::m_conferenceIDH225_ConferenceIdentifierH225_ServiceControlIndication_callSpecific::m_answeredCallH225_ArrayOf_BandwidthDetailsH225_ArrayOf_BandwidthDetails::PCLASSINFOH225_GenericDataH225_GenericData::PCLASSINFOH225_GenericData::OptionalFieldsH225_GenericData::m_idH225_GenericData::m_parametersH225_ArrayOf_EnumeratedParameterH225_ArrayOf_AlternateGKH225_ArrayOf_AlternateGK::PCLASSINFOH225_RasMessageH225_RasMessage::PCLASSINFOH225_RasMessage::ChoicesH225_RasMessage::operator H225_GatekeeperRequest &H225_RasMessage::operator H225_GatekeeperConfirm &H225_RasMessage::operator H225_GatekeeperReject &H225_RasMessage::operator H225_RegistrationRequest &H225_RasMessage::operator H225_RegistrationConfirm &H225_RasMessage::operator H225_RegistrationReject &H225_RasMessage::operator H225_UnregistrationRequest &H225_RasMessage::operator H225_UnregistrationConfirm &H225_RasMessage::operator H225_UnregistrationReject &H225_RasMessage::operator H225_AdmissionRequest &H225_RasMessage::operator H225_AdmissionConfirm &H225_RasMessage::operator H225_AdmissionReject &H225_RasMessage::operator H225_BandwidthRequest &H225_RasMessage::operator H225_BandwidthConfirm &H225_RasMessage::operator H225_BandwidthReject &H225_RasMessage::operator H225_DisengageRequest &H225_RasMessage::operator H225_DisengageConfirm &H225_RasMessage::operator H225_DisengageReject &H225_RasMessage::operator H225_LocationRequest &H225_RasMessage::operator H225_LocationConfirm &H225_RasMessage::operator H225_LocationReject &H225_RasMessage::operator H225_InfoRequest &H225_RasMessage::operator H225_InfoRequestResponse &H225_RasMessage::operator H225_NonStandardMessage &H225_RasMessage::operator H225_UnknownMessageResponse &H225_RasMessage::operator H225_RequestInProgress &H225_RasMessage::operator H225_ResourcesAvailableIndicate &H225_RasMessage::operator H225_ResourcesAvailableConfirm &H225_RasMessage::operator H225_InfoRequestAck &H225_RasMessage::operator H225_InfoRequestNak &H225_RasMessage::operator H225_ServiceControlIndication &H225_RasMessage::operator H225_ServiceControlResponse &H225_RasMessage::operator H225_ArrayOf_AdmissionConfirm &H225_ArrayOf_AdmissionConfirm &H225_ArrayOf_FeatureDescriptorH225_ArrayOf_FeatureDescriptor::PCLASSINFOH225_H245SecurityH225_H245Security::PCLASSINFOH225_H245Security::ChoicesH225_H245Security::operator H225_NonStandardParameter &H225_H245Security::operator H225_SecurityCapabilities &H225_SecurityCapabilities &H225_AliasAddressH225_AliasAddress::PCLASSINFOH225_AliasAddress::ChoicesH225_AliasAddress::operator H225_TransportAddress &H225_AliasAddress::operator H225_PartyNumber &H225_AliasAddress::operator H225_MobileUIM &H225_MobileUIM &H225_AliasAddress::operator H225_IsupNumber &H225_IsupNumber &H225_NatureOfAddressH225_NatureOfAddress::PCLASSINFOH225_NatureOfAddress::ChoicesH225_RasUsageInformationH225_RasUsageInformation::PCLASSINFOH225_RasUsageInformation::OptionalFieldsH225_RasUsageInformation::m_nonStandardUsageFieldsH225_ArrayOf_NonStandardParameterH225_RasUsageInformation::m_alertingTimeH235_TimeStampH225_RasUsageInformation::m_connectTimeH225_RasUsageInformation::m_endTimeH225_CallIdentifier::PCLASSINFOH225_CallIdentifier::m_guidH225_GloballyUniqueIDH225_TunnelledProtocolH225_TunnelledProtocol::PCLASSINFOH225_TunnelledProtocol::OptionalFieldsH225_TunnelledProtocol::m_idH225_TunnelledProtocol_idH225_TunnelledProtocol::m_subIdentifierPASN_IA5StringH225_IsupDigitsH225_IsupDigits::PCLASSINFOH225_ResourcesAvailableIndicateH225_ResourcesAvailableIndicate::PCLASSINFOH225_ResourcesAvailableIndicate::OptionalFieldsH225_ResourcesAvailableIndicate::m_requestSeqNumH225_RequestSeqNumH225_ResourcesAvailableIndicate::m_protocolIdentifierH225_ProtocolIdentifierH225_ResourcesAvailableIndicate::m_nonStandardDataH225_NonStandardParameterH225_ResourcesAvailableIndicate::m_endpointIdentifierH225_ResourcesAvailableIndicate::m_protocolsH225_ArrayOf_SupportedProtocolsH225_ResourcesAvailableIndicate::m_almostOutOfResourcesH225_ResourcesAvailableIndicate::m_tokensH225_ArrayOf_ClearTokenH225_ResourcesAvailableIndicate::m_cryptoTokensH225_ArrayOf_CryptoH323TokenH225_ResourcesAvailableIndicate::m_integrityCheckValueH225_ICVH225_ResourcesAvailableIndicate::m_capacityH225_CallCapacityH225_ResourcesAvailableIndicate::m_genericDataH225_ArrayOf_GenericDataH225_H323CapsH225_H323Caps::PCLASSINFOH225_H323Caps::OptionalFieldsH225_H323Caps::m_nonStandardDataH225_H323Caps::m_dataRatesSupportedH225_ArrayOf_DataRateH225_H323Caps::m_supportedPrefixesH225_ArrayOf_SupportedPrefixH225_DisengageReasonH225_DisengageReason::PCLASSINFOH225_DisengageReason::ChoicesH225_SupportedProtocolsH225_SupportedProtocols::PCLASSINFOH225_SupportedProtocols::ChoicesH225_SupportedProtocols::operator H225_NonStandardParameter &H225_SupportedProtocols::operator H225_H310Caps &H225_H310Caps &H225_SupportedProtocols::operator H225_H320Caps &H225_H320Caps &H225_SupportedProtocols::operator H225_H321Caps &H225_H321Caps &H225_SupportedProtocols::operator H225_H322Caps &H225_H322Caps &H225_SupportedProtocols::operator H225_H323Caps &H225_H323Caps &H225_SupportedProtocols::operator H225_H324Caps &H225_H324Caps &H225_SupportedProtocols::operator H225_VoiceCaps &H225_VoiceCaps &H225_SupportedProtocols::operator H225_T120OnlyCaps &H225_T120OnlyCaps &H225_SupportedProtocols::operator H225_NonStandardProtocol &H225_NonStandardProtocol &H225_SupportedProtocols::operator H225_T38FaxAnnexbOnlyCaps &H225_T38FaxAnnexbOnlyCaps &H225_SupportedProtocols::operator H225_SIPCaps &H225_SIPCaps &H225_ArrayOf_TransportAddressH225_ArrayOf_TransportAddress::PCLASSINFOH225_Alerting_UUIEH225_Alerting_UUIE::PCLASSINFOH225_Alerting_UUIE::OptionalFieldsH225_Alerting_UUIE::m_protocolIdentifierH225_Alerting_UUIE::m_destinationInfoH225_EndpointTypeH225_Alerting_UUIE::m_h245AddressH225_TransportAddressH225_Alerting_UUIE::m_callIdentifierH225_Alerting_UUIE::m_h245SecurityModeH225_Alerting_UUIE::m_tokensH225_Alerting_UUIE::m_cryptoTokensH225_Alerting_UUIE::m_fastStartH225_ArrayOf_PASN_OctetStringH225_Alerting_UUIE::m_multipleCallsH225_Alerting_UUIE::m_maintainConnectionH225_Alerting_UUIE::m_alertingAddressH225_ArrayOf_AliasAddressH225_Alerting_UUIE::m_presentationIndicatorH225_PresentationIndicatorH225_Alerting_UUIE::m_screeningIndicatorH225_ScreeningIndicatorH225_Alerting_UUIE::m_fastConnectRefusedPASN_NullH225_Alerting_UUIE::m_serviceControlH225_ArrayOf_ServiceControlSessionH225_Alerting_UUIE::m_capacityH225_Alerting_UUIE::m_featureSetH225_FeatureSetH225_BandwidthDetailsH225_BandwidthDetails::PCLASSINFOH225_BandwidthDetails::m_senderH225_BandwidthDetails::m_multicastH225_BandwidthDetails::m_bandwidthH225_BandWidthH225_BandwidthDetails::m_rtcpAddressesH225_TransportChannelInfoH225_T120OnlyCapsH225_T120OnlyCaps::PCLASSINFOH225_T120OnlyCaps::OptionalFieldsH225_T120OnlyCaps::m_nonStandardDataH225_T120OnlyCaps::m_dataRatesSupportedH225_T120OnlyCaps::m_supportedPrefixesH225_EndpointIdentifier::PCLASSINFOH225_RehomingModelH225_RehomingModel::PCLASSINFOH225_RehomingModel::ChoicesH225_ArrayOf_H248PackagesDescriptorH225_ArrayOf_H248PackagesDescriptor::PCLASSINFOH225_ArrayOf_AdmissionConfirmH225_ArrayOf_AdmissionConfirm::PCLASSINFOH225_ServiceControlSessionH225_ServiceControlSession::PCLASSINFOH225_ServiceControlSession::OptionalFieldsH225_ServiceControlSession::m_sessionIdH225_ServiceControlSession::m_contentsH225_ServiceControlDescriptorH225_ServiceControlSession::m_reasonH225_ServiceControlSession_reasonH225_Q954DetailsH225_Q954Details::PCLASSINFOH225_Q954Details::m_conferenceCallingH225_Q954Details::m_threePartyServiceH225_CarrierInfoH225_CarrierInfo::PCLASSINFOH225_CarrierInfo::OptionalFieldsH225_CarrierInfo::m_carrierIdentificationCodeH225_CarrierInfo::m_carrierNameH225_UUIEsRequestedH225_UUIEsRequested::PCLASSINFOH225_UUIEsRequested::OptionalFieldsH225_UUIEsRequested::m_setupH225_UUIEsRequested::m_callProceedingH225_UUIEsRequested::m_connectH225_UUIEsRequested::m_alertingH225_UUIEsRequested::m_informationH225_UUIEsRequested::m_releaseCompleteH225_UUIEsRequested::m_facilityH225_UUIEsRequested::m_progressH225_UUIEsRequested::m_emptyH225_UUIEsRequested::m_statusH225_UUIEsRequested::m_statusInquiryH225_UUIEsRequested::m_setupAcknowledgeH225_UUIEsRequested::m_notifyH225_TransportAddress_ipAddressH225_TransportAddress_ipAddress::PCLASSINFOH225_TransportAddress_ipAddress::m_ipH225_TransportAddress_ipAddress::m_portH225_Facility_UUIEH225_Facility_UUIE::PCLASSINFOH225_Facility_UUIE::OptionalFieldsH225_Facility_UUIE::m_protocolIdentifierH225_Facility_UUIE::m_alternativeAddressH225_Facility_UUIE::m_alternativeAliasAddressH225_Facility_UUIE::m_conferenceIDH225_Facility_UUIE::m_reasonH225_FacilityReasonH225_Facility_UUIE::m_callIdentifierH225_Facility_UUIE::m_destExtraCallInfoH225_Facility_UUIE::m_remoteExtensionAddressH225_Facility_UUIE::m_tokensH225_Facility_UUIE::m_cryptoTokensH225_Facility_UUIE::m_conferencesH225_ArrayOf_ConferenceListH225_Facility_UUIE::m_h245AddressH225_Facility_UUIE::m_fastStartH225_Facility_UUIE::m_multipleCallsH225_Facility_UUIE::m_maintainConnectionH225_Facility_UUIE::m_fastConnectRefusedH225_Facility_UUIE::m_serviceControlH225_Facility_UUIE::m_circuitInfoH225_CircuitInfoH225_Facility_UUIE::m_featureSetH225_Facility_UUIE::m_destinationInfoH225_Facility_UUIE::m_h245SecurityModeH225_RasUsageSpecification_whenH225_RasUsageSpecification_when::PCLASSINFOH225_RasUsageSpecification_when::OptionalFieldsH225_RasUsageSpecification_when::m_startH225_RasUsageSpecification_when::m_endH225_RasUsageSpecification_when::m_inIrrH225_CryptoH323Token_cryptoGKPwdHashH225_CryptoH323Token_cryptoGKPwdHash::PCLASSINFOH225_CryptoH323Token_cryptoGKPwdHash::m_gatekeeperIdH225_CryptoH323Token_cryptoGKPwdHash::m_timeStampH225_CryptoH323Token_cryptoGKPwdHash::m_tokenH235_HASHEDH225_GatekeeperRejectReasonH225_GatekeeperRejectReason::PCLASSINFOH225_GatekeeperRejectReason::ChoicesH225_GatekeeperRejectReason::operator H225_SecurityErrors &H225_SecurityErrors &H225_BandWidth::PCLASSINFOH225_CapacityReportingSpecification_whenH225_CapacityReportingSpecification_when::PCLASSINFOH225_CapacityReportingSpecification_when::OptionalFieldsH225_CapacityReportingSpecification_when::m_callStartH225_CapacityReportingSpecification_when::m_callEndH225_H310CapsH225_H310Caps::PCLASSINFOH225_H310Caps::OptionalFieldsH225_H310Caps::m_nonStandardDataH225_H310Caps::m_dataRatesSupportedH225_H310Caps::m_supportedPrefixesH225_PartyNumberH225_PartyNumber::PCLASSINFOH225_PartyNumber::ChoicesH225_PartyNumber::operator H225_PublicPartyNumber &H225_PublicPartyNumber &H225_PartyNumber::operator H225_NumberDigits &H225_PartyNumber::operator H225_PrivatePartyNumber &H225_PrivatePartyNumber &H225_GroupIDH225_GroupID::PCLASSINFOH225_GroupID::OptionalFieldsH225_GroupID::m_memberH225_GroupID::m_groupH225_PresentationIndicator::PCLASSINFOH225_PresentationIndicator::ChoicesH225_H323_UserInformationH225_H323_UserInformation::PCLASSINFOH225_H323_UserInformation::OptionalFieldsH225_H323_UserInformation::m_h323_uu_pduH225_H323_UU_PDUH225_H323_UserInformation::m_user_dataH225_H323_UserInformation_user_dataH225_TransportAddress_ipSourceRoute_routeH225_TransportAddress_ipSourceRoute_route::PCLASSINFOH225_InfoRequestResponse_perCallInfo_subtype_pdu_subtypeH225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype::PCLASSINFOH225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype::m_h323pduH225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype::m_sentH225_ArrayOf_GenericData::PCLASSINFOH225_ArrayOf_RTPSessionH225_ArrayOf_RTPSession::PCLASSINFOH225_RegistrationConfirmH225_RegistrationConfirm::PCLASSINFOH225_RegistrationConfirm::OptionalFieldsH225_RegistrationConfirm::m_requestSeqNumH225_RegistrationConfirm::m_protocolIdentifierH225_RegistrationConfirm::m_nonStandardDataH225_RegistrationConfirm::m_callSignalAddressH225_RegistrationConfirm::m_terminalAliasH225_RegistrationConfirm::m_gatekeeperIdentifierH225_RegistrationConfirm::m_endpointIdentifierH225_RegistrationConfirm::m_alternateGatekeeperH225_RegistrationConfirm::m_timeToLiveH225_TimeToLiveH225_RegistrationConfirm::m_tokensH225_RegistrationConfirm::m_cryptoTokensH225_RegistrationConfirm::m_integrityCheckValueH225_RegistrationConfirm::m_willRespondToIRRH225_RegistrationConfirm::m_preGrantedARQH225_RegistrationConfirm_preGrantedARQH225_RegistrationConfirm::m_maintainConnectionH225_RegistrationConfirm::m_serviceControlH225_RegistrationConfirm::m_supportsAdditiveRegistrationH225_RegistrationConfirm::m_terminalAliasPatternH225_ArrayOf_AddressPatternH225_RegistrationConfirm::m_supportedPrefixesH225_RegistrationConfirm::m_usageSpecH225_ArrayOf_RasUsageSpecificationH225_RegistrationConfirm::m_featureServerAliasH225_RegistrationConfirm::m_capacityReportingSpecH225_CapacityReportingSpecificationH225_RegistrationConfirm::m_featureSetH225_RegistrationConfirm::m_genericDataH225_RegistrationConfirm::m_assignedGatekeeperH225_RegistrationConfirm::m_rehomingModelH225_RegistrationConfirm::m_transportQOSH225_TransportQOSH225_Notify_UUIEH225_Notify_UUIE::PCLASSINFOH225_Notify_UUIE::OptionalFieldsH225_Notify_UUIE::m_protocolIdentifierH225_Notify_UUIE::m_callIdentifierH225_Notify_UUIE::m_tokensH225_Notify_UUIE::m_cryptoTokensH225_SupportedPrefixH225_SupportedPrefix::PCLASSINFOH225_SupportedPrefix::OptionalFieldsH225_SupportedPrefix::m_nonStandardDataH225_SupportedPrefix::m_prefixH225_InfoRequestResponse_perCallInfo_subtype_pduH225_InfoRequestResponse_perCallInfo_subtype_pdu::PCLASSINFOH225_CallModelH225_CallModel::PCLASSINFOH225_CallModel::ChoicesH225_CallCreditServiceControlH225_CallCreditServiceControl::PCLASSINFOH225_CallCreditServiceControl::OptionalFieldsH225_CallCreditServiceControl::m_amountStringH225_CallCreditServiceControl::m_billingModeH225_CallCreditServiceControl_billingModeH225_CallCreditServiceControl::m_callDurationLimitH225_CallCreditServiceControl::m_enforceCallDurationLimitH225_CallCreditServiceControl::m_callStartingPointH225_CallCreditServiceControl_callStartingPointH225_ArrayOf_ConferenceIdentifierH225_ArrayOf_ConferenceIdentifier::PCLASSINFOH225_BandwidthRequestH225_BandwidthRequest::PCLASSINFOH225_BandwidthRequest::OptionalFieldsH225_BandwidthRequest::m_requestSeqNumH225_BandwidthRequest::m_endpointIdentifierH225_BandwidthRequest::m_conferenceIDH225_BandwidthRequest::m_callReferenceValueH225_CallReferenceValueH225_BandwidthRequest::m_callTypeH225_CallTypeH225_BandwidthRequest::m_bandWidthH225_BandwidthRequest::m_nonStandardDataH225_BandwidthRequest::m_callIdentifierH225_BandwidthRequest::m_gatekeeperIdentifierH225_BandwidthRequest::m_tokensH225_BandwidthRequest::m_cryptoTokensH225_BandwidthRequest::m_integrityCheckValueH225_BandwidthRequest::m_answeredCallH225_BandwidthRequest::m_callLinkageH225_CallLinkageH225_BandwidthRequest::m_capacityH225_BandwidthRequest::m_usageInformationH225_BandwidthRequest::m_bandwidthDetailsH225_BandwidthRequest::m_genericDataH225_BandwidthRequest::m_transportQOSH225_CryptoH323TokenH225_CryptoH323Token::PCLASSINFOH225_CryptoH323Token::ChoicesH225_CryptoH323Token::operator H225_CryptoH323Token_cryptoEPPwdHash &H225_CryptoH323Token_cryptoEPPwdHash &H225_CryptoH323Token::operator H225_CryptoH323Token_cryptoGKPwdHash &H225_CryptoH323Token_cryptoGKPwdHash &H225_CryptoH323Token::operator H235_ENCRYPTED &H235_ENCRYPTED &H225_CryptoH323Token::operator H235_SIGNED &H235_SIGNED &H225_CryptoH323Token::operator H235_SIGNED &H235_SIGNED &H225_CryptoH323Token::operator H235_CryptoToken &H235_CryptoToken &H225_GloballyUniqueID::PCLASSINFOH225_UnregRejectReasonH225_UnregRejectReason::PCLASSINFOH225_UnregRejectReason::ChoicesH225_UnregRejectReason::operator H225_SecurityErrors2 &H225_SecurityErrors2 &H225_H248SignalsDescriptorH225_H248SignalsDescriptor::PCLASSINFOH225_AlternateGK::PCLASSINFOH225_AlternateGK::OptionalFieldsH225_AlternateGK::m_rasAddressH225_AlternateGK::m_gatekeeperIdentifierH225_AlternateGK::m_needToRegisterH225_AlternateGK::m_priorityH225_InfoRequestResponse_perCallInfoH225_InfoRequestResponse_perCallInfo::PCLASSINFOH225_Content::PCLASSINFOH225_Content::ChoicesH225_Content::operator H225_GenericIdentifier &H225_GenericIdentifier &H225_Content::operator H225_AliasAddress &H225_Content::operator H225_TransportAddress &H225_Content::operator H225_ArrayOf_EnumeratedParameter &H225_ArrayOf_EnumeratedParameter &H225_Content::operator H225_ArrayOf_GenericData &H225_ArrayOf_GenericData &H225_SIPCapsH225_SIPCaps::PCLASSINFOH225_SIPCaps::OptionalFieldsH225_SIPCaps::m_nonStandardDataH225_SIPCaps::m_dataRatesSupportedH225_SIPCaps::m_supportedPrefixesH225_ReleaseComplete_UUIEH225_ReleaseComplete_UUIE::PCLASSINFOH225_ReleaseComplete_UUIE::OptionalFieldsH225_ReleaseComplete_UUIE::m_protocolIdentifierH225_ReleaseComplete_UUIE::m_reasonH225_ReleaseCompleteReasonH225_ReleaseComplete_UUIE::m_callIdentifierH225_ReleaseComplete_UUIE::m_tokensH225_ReleaseComplete_UUIE::m_cryptoTokensH225_ReleaseComplete_UUIE::m_busyAddressH225_ReleaseComplete_UUIE::m_presentationIndicatorH225_ReleaseComplete_UUIE::m_screeningIndicatorH225_ReleaseComplete_UUIE::m_capacityH225_ReleaseComplete_UUIE::m_serviceControlH225_ReleaseComplete_UUIE::m_featureSetH225_EndpointType::PCLASSINFOH225_EndpointType::OptionalFieldsH225_EndpointType::m_nonStandardDataH225_EndpointType::m_vendorH225_VendorIdentifierH225_EndpointType::m_gatekeeperH225_GatekeeperInfoH225_EndpointType::m_gatewayH225_GatewayInfoH225_EndpointType::m_mcuH225_McuInfoH225_EndpointType::m_terminalH225_TerminalInfoH225_EndpointType::m_mcH225_EndpointType::m_undefinedNodeH225_EndpointType::m_setPASN_BitStringH225_EndpointType::m_supportedTunnelledProtocolsH225_ArrayOf_TunnelledProtocolH225_TransportAddress::PCLASSINFOH225_TransportAddress::ChoicesH225_TransportAddress::operator H225_TransportAddress_ipAddress &H225_TransportAddress_ipAddress &H225_TransportAddress::operator H225_TransportAddress_ipSourceRoute &H225_TransportAddress_ipSourceRoute &H225_TransportAddress::operator H225_TransportAddress_ipxAddress &H225_TransportAddress_ipxAddress &H225_TransportAddress::operator H225_TransportAddress_ip6Address &H225_TransportAddress_ip6Address &H225_TransportAddress::operator H225_NonStandardParameter &H225_ConferenceListH225_ConferenceList::PCLASSINFOH225_ConferenceList::OptionalFieldsH225_ConferenceList::m_conferenceIDH225_ConferenceList::m_conferenceAliasH225_ConferenceList::m_nonStandardDataH225_CallCapacity::PCLASSINFOH225_CallCapacity::OptionalFieldsH225_CallCapacity::m_maximumCallCapacityH225_CallCapacityInfoH225_CallCapacity::m_currentCallCapacityH225_SecurityErrorsH225_SecurityErrors::PCLASSINFOH225_SecurityErrors::ChoicesH225_ExtendedAliasAddressH225_ExtendedAliasAddress::PCLASSINFOH225_ExtendedAliasAddress::OptionalFieldsH225_ExtendedAliasAddress::m_addressH225_ExtendedAliasAddress::m_presentationIndicatorH225_ExtendedAliasAddress::m_screeningIndicatorH225_CallCreditCapabilityH225_CallCreditCapability::PCLASSINFOH225_CallCreditCapability::OptionalFieldsH225_CallCreditCapability::m_canDisplayAmountStringH225_CallCreditCapability::m_canEnforceDurationLimitH225_CicInfoH225_CicInfo::PCLASSINFOH225_CicInfo::m_cicH225_CicInfo_cicH225_CicInfo::m_pointCodeH225_ArrayOf_TransportChannelInfoH225_ArrayOf_TransportChannelInfo::PCLASSINFOH225_UnregRequestReasonH225_UnregRequestReason::PCLASSINFOH225_UnregRequestReason::ChoicesH225_UnregRequestReason::operator H225_SecurityErrors2 &H225_H324CapsH225_H324Caps::PCLASSINFOH225_H324Caps::OptionalFieldsH225_H324Caps::m_nonStandardDataH225_H324Caps::m_dataRatesSupportedH225_H324Caps::m_supportedPrefixesH225_TunnelledProtocolAlternateIdentifierH225_TunnelledProtocolAlternateIdentifier::PCLASSINFOH225_TunnelledProtocolAlternateIdentifier::OptionalFieldsH225_TunnelledProtocolAlternateIdentifier::m_protocolTypeH225_TunnelledProtocolAlternateIdentifier::m_protocolVariantH225_AdmissionRejectReasonH225_AdmissionRejectReason::PCLASSINFOH225_AdmissionRejectReason::ChoicesH225_AdmissionRejectReason::operator H225_ArrayOf_PartyNumber &H225_ArrayOf_PartyNumber &H225_AdmissionRejectReason::operator H225_SecurityErrors2 &H225_TransportAddress_ip6AddressH225_TransportAddress_ip6Address::PCLASSINFOH225_TransportAddress_ip6Address::m_ipH225_TransportAddress_ip6Address::m_portH225_UnregistrationRequestH225_UnregistrationRequest::PCLASSINFOH225_UnregistrationRequest::OptionalFieldsH225_UnregistrationRequest::m_requestSeqNumH225_UnregistrationRequest::m_callSignalAddressH225_UnregistrationRequest::m_endpointAliasH225_UnregistrationRequest::m_nonStandardDataH225_UnregistrationRequest::m_endpointIdentifierH225_UnregistrationRequest::m_alternateEndpointsH225_ArrayOf_EndpointH225_UnregistrationRequest::m_gatekeeperIdentifierH225_UnregistrationRequest::m_tokensH225_UnregistrationRequest::m_cryptoTokensH225_UnregistrationRequest::m_integrityCheckValueH225_UnregistrationRequest::m_reasonH225_UnregistrationRequest::m_endpointAliasPatternH225_UnregistrationRequest::m_supportedPrefixesH225_UnregistrationRequest::m_alternateGatekeeperH225_UnregistrationRequest::m_genericDataH225_UnregistrationRequest::m_assignedGatekeeperH225_AdmissionConfirm_languageH225_AdmissionConfirm_language::PCLASSINFOH225_VoiceCapsH225_VoiceCaps::PCLASSINFOH225_VoiceCaps::OptionalFieldsH225_VoiceCaps::m_nonStandardDataH225_VoiceCaps::m_dataRatesSupportedH225_VoiceCaps::m_supportedPrefixesH225_ConferenceIdentifier::PCLASSINFOH225_H320CapsH225_H320Caps::PCLASSINFOH225_H320Caps::OptionalFieldsH225_H320Caps::m_nonStandardDataH225_H320Caps::m_dataRatesSupportedH225_H320Caps::m_supportedPrefixesH225_FacilityReason::PCLASSINFOH225_FacilityReason::ChoicesH225_NonStandardMessageH225_NonStandardMessage::PCLASSINFOH225_NonStandardMessage::OptionalFieldsH225_NonStandardMessage::m_requestSeqNumH225_NonStandardMessage::m_nonStandardDataH225_NonStandardMessage::m_tokensH225_NonStandardMessage::m_cryptoTokensH225_NonStandardMessage::m_integrityCheckValueH225_NonStandardMessage::m_featureSetH225_NonStandardMessage::m_genericDataH225_DataRateH225_DataRate::PCLASSINFOH225_DataRate::OptionalFieldsH225_DataRate::m_nonStandardDataH225_DataRate::m_channelRateH225_DataRate::m_channelMultiplierH225_ArrayOf_AuthenticationMechanismH225_ArrayOf_AuthenticationMechanism::PCLASSINFOH225_PrivateTypeOfNumberH225_PrivateTypeOfNumber::PCLASSINFOH225_PrivateTypeOfNumber::ChoicesH225_CircuitInfo::PCLASSINFOH225_CircuitInfo::OptionalFieldsH225_CircuitInfo::m_sourceCircuitIDH225_CircuitIdentifierH225_CircuitInfo::m_destinationCircuitIDH225_CircuitInfo::m_genericDataH225_PublicTypeOfNumberH225_PublicTypeOfNumber::PCLASSINFOH225_PublicTypeOfNumber::ChoicesH225_DisengageRejectH225_DisengageReject::PCLASSINFOH225_DisengageReject::OptionalFieldsH225_DisengageReject::m_requestSeqNumH225_DisengageReject::m_rejectReasonH225_DisengageRejectReasonH225_DisengageReject::m_nonStandardDataH225_DisengageReject::m_altGKInfoH225_AltGKInfoH225_DisengageReject::m_tokensH225_DisengageReject::m_cryptoTokensH225_DisengageReject::m_integrityCheckValueH225_DisengageReject::m_genericDataH225_H323_UU_PDU::PCLASSINFOH225_H323_UU_PDU::OptionalFieldsH225_H323_UU_PDU::m_h323_message_bodyH225_H323_UU_PDU_h323_message_bodyH225_H323_UU_PDU::m_nonStandardDataH225_H323_UU_PDU::m_h4501SupplementaryServiceH225_H323_UU_PDU::m_h245TunnelingH225_H323_UU_PDU::m_h245ControlH225_H323_UU_PDU::m_nonStandardControlH225_H323_UU_PDU::m_callLinkageH225_H323_UU_PDU::m_tunnelledSignallingMessageH225_H323_UU_PDU_tunnelledSignallingMessageH225_H323_UU_PDU::m_provisionalRespToH245TunnelingH225_H323_UU_PDU::m_stimulusControlH225_StimulusControlH225_H323_UU_PDU::m_genericDataH225_FeatureDescriptorH225_FeatureDescriptor::PCLASSINFOH225_FeatureSet::PCLASSINFOH225_FeatureSet::OptionalFieldsH225_FeatureSet::m_replacementFeatureSetH225_FeatureSet::m_neededFeaturesH225_FeatureSet::m_desiredFeaturesH225_FeatureSet::m_supportedFeaturesH225_CallProceeding_UUIEH225_CallProceeding_UUIE::PCLASSINFOH225_CallProceeding_UUIE::OptionalFieldsH225_CallProceeding_UUIE::m_protocolIdentifierH225_CallProceeding_UUIE::m_destinationInfoH225_CallProceeding_UUIE::m_h245AddressH225_CallProceeding_UUIE::m_callIdentifierH225_CallProceeding_UUIE::m_h245SecurityModeH225_CallProceeding_UUIE::m_tokensH225_CallProceeding_UUIE::m_cryptoTokensH225_CallProceeding_UUIE::m_fastStartH225_CallProceeding_UUIE::m_multipleCallsH225_CallProceeding_UUIE::m_maintainConnectionH225_CallProceeding_UUIE::m_fastConnectRefusedH225_CallProceeding_UUIE::m_featureSetH225_NonIsoIntegrityMechanismH225_NonIsoIntegrityMechanism::PCLASSINFOH225_NonIsoIntegrityMechanism::ChoicesH225_NonIsoIntegrityMechanism::operator H225_EncryptIntAlg &H225_EncryptIntAlg &H225_IsupPrivatePartyNumberH225_IsupPrivatePartyNumber::PCLASSINFOH225_IsupPrivatePartyNumber::m_privateTypeOfNumberH225_IsupPrivatePartyNumber::m_addressH225_BandRejectReasonH225_BandRejectReason::PCLASSINFOH225_BandRejectReason::ChoicesH225_BandRejectReason::operator H225_SecurityErrors2 &H225_AdmissionConfirmH225_AdmissionConfirm::PCLASSINFOH225_AdmissionConfirm::OptionalFieldsH225_AdmissionConfirm::m_requestSeqNumH225_AdmissionConfirm::m_bandWidthH225_AdmissionConfirm::m_callModelH225_AdmissionConfirm::m_destCallSignalAddressH225_AdmissionConfirm::m_irrFrequencyH225_AdmissionConfirm::m_nonStandardDataH225_AdmissionConfirm::m_destinationInfoH225_AdmissionConfirm::m_destExtraCallInfoH225_AdmissionConfirm::m_destinationTypeH225_AdmissionConfirm::m_remoteExtensionAddressH225_AdmissionConfirm::m_alternateEndpointsH225_AdmissionConfirm::m_tokensH225_AdmissionConfirm::m_cryptoTokensH225_AdmissionConfirm::m_integrityCheckValueH225_AdmissionConfirm::m_transportQOSH225_AdmissionConfirm::m_willRespondToIRRH225_AdmissionConfirm::m_uuiesRequestedH225_AdmissionConfirm::m_languageH225_AdmissionConfirm::m_alternateTransportAddressesH225_AlternateTransportAddressesH225_AdmissionConfirm::m_useSpecifiedTransportH225_UseSpecifiedTransportH225_AdmissionConfirm::m_circuitInfoH225_AdmissionConfirm::m_usageSpecH225_AdmissionConfirm::m_supportedProtocolsH225_AdmissionConfirm::m_serviceControlH225_AdmissionConfirm::m_multipleCallsH225_AdmissionConfirm::m_featureSetH225_AdmissionConfirm::m_genericDataH225_AdmissionConfirm::m_modifiedSrcInfoH225_AdmissionConfirm::m_assignedGatekeeperH225_InfoRequestNakH225_InfoRequestNak::PCLASSINFOH225_InfoRequestNak::OptionalFieldsH225_InfoRequestNak::m_requestSeqNumH225_InfoRequestNak::m_nonStandardDataH225_InfoRequestNak::m_nakReasonH225_InfoRequestNakReasonH225_InfoRequestNak::m_altGKInfoH225_InfoRequestNak::m_tokensH225_InfoRequestNak::m_cryptoTokensH225_InfoRequestNak::m_integrityCheckValueH225_ArrayOf_Endpoint::PCLASSINFOH225_ArrayOf_SupportedPrefix::PCLASSINFOH225_RegistrationRequest_languageH225_RegistrationRequest_language::PCLASSINFOH225_H323_UserInformation_user_data::PCLASSINFOH225_H323_UserInformation_user_data::m_protocol_discriminatorH225_H323_UserInformation_user_data::m_user_informationH225_Information_UUIEH225_Information_UUIE::PCLASSINFOH225_Information_UUIE::OptionalFieldsH225_Information_UUIE::m_protocolIdentifierH225_Information_UUIE::m_callIdentifierH225_Information_UUIE::m_tokensH225_Information_UUIE::m_cryptoTokensH225_Information_UUIE::m_fastStartH225_Information_UUIE::m_fastConnectRefusedH225_Information_UUIE::m_circuitInfoH225_BandwidthConfirmH225_BandwidthConfirm::PCLASSINFOH225_BandwidthConfirm::OptionalFieldsH225_BandwidthConfirm::m_requestSeqNumH225_BandwidthConfirm::m_bandWidthH225_BandwidthConfirm::m_nonStandardDataH225_BandwidthConfirm::m_tokensH225_BandwidthConfirm::m_cryptoTokensH225_BandwidthConfirm::m_integrityCheckValueH225_BandwidthConfirm::m_capacityH225_BandwidthConfirm::m_genericDataH225_BandwidthConfirm::m_transportQOSH225_CallsAvailableH225_CallsAvailable::PCLASSINFOH225_CallsAvailable::OptionalFieldsH225_CallsAvailable::m_callsH225_CallsAvailable::m_groupH225_CallsAvailable::m_carrierH225_CircuitIdentifier::PCLASSINFOH225_CircuitIdentifier::OptionalFieldsH225_CircuitIdentifier::m_cicH225_CircuitIdentifier::m_groupH225_CircuitIdentifier::m_carrierH225_H248PackagesDescriptorH225_H248PackagesDescriptor::PCLASSINFOH225_CryptoH323Token_cryptoEPPwdHashH225_CryptoH323Token_cryptoEPPwdHash::PCLASSINFOH225_CryptoH323Token_cryptoEPPwdHash::m_aliasH225_CryptoH323Token_cryptoEPPwdHash::m_timeStampH225_CryptoH323Token_cryptoEPPwdHash::m_tokenH225_RequestSeqNum::PCLASSINFOH225_InfoRequestNakReason::PCLASSINFOH225_InfoRequestNakReason::ChoicesH225_InfoRequestNakReason::operator H225_SecurityErrors2 &H225_T38FaxAnnexbOnlyCapsH225_T38FaxAnnexbOnlyCaps::PCLASSINFOH225_T38FaxAnnexbOnlyCaps::OptionalFieldsH225_T38FaxAnnexbOnlyCaps::m_nonStandardDataH225_T38FaxAnnexbOnlyCaps::m_dataRatesSupportedH225_T38FaxAnnexbOnlyCaps::m_supportedPrefixesH225_T38FaxAnnexbOnlyCaps::m_t38FaxProtocolH245_DataProtocolCapabilityH225_T38FaxAnnexbOnlyCaps::m_t38FaxProfileH245_T38FaxProfileH225_TimeToLive::PCLASSINFOH225_ArrayOf_CallsAvailableH225_ArrayOf_CallsAvailable::PCLASSINFOH225_RegistrationRejectReasonH225_RegistrationRejectReason::PCLASSINFOH225_RegistrationRejectReason::ChoicesH225_RegistrationRejectReason::operator H225_ArrayOf_AliasAddress &H225_RegistrationRejectReason::operator H225_RegistrationRejectReason_invalidTerminalAliases &H225_RegistrationRejectReason_invalidTerminalAliases &H225_RegistrationRejectReason::operator H225_SecurityErrors &H225_ResourcesAvailableConfirmH225_ResourcesAvailableConfirm::PCLASSINFOH225_ResourcesAvailableConfirm::OptionalFieldsH225_ResourcesAvailableConfirm::m_requestSeqNumH225_ResourcesAvailableConfirm::m_protocolIdentifierH225_ResourcesAvailableConfirm::m_nonStandardDataH225_ResourcesAvailableConfirm::m_tokensH225_ResourcesAvailableConfirm::m_cryptoTokensH225_ResourcesAvailableConfirm::m_integrityCheckValueH225_ResourcesAvailableConfirm::m_genericDataH225_QseriesOptionsH225_QseriesOptions::PCLASSINFOH225_QseriesOptions::m_q932FullH225_QseriesOptions::m_q951FullH225_QseriesOptions::m_q952FullH225_QseriesOptions::m_q953FullH225_QseriesOptions::m_q955FullH225_QseriesOptions::m_q956FullH225_QseriesOptions::m_q957FullH225_QseriesOptions::m_q954InfoH225_SecurityErrors2H225_SecurityErrors2::PCLASSINFOH225_SecurityErrors2::ChoicesH225_Progress_UUIEH225_Progress_UUIE::PCLASSINFOH225_Progress_UUIE::OptionalFieldsH225_Progress_UUIE::m_protocolIdentifierH225_Progress_UUIE::m_destinationInfoH225_Progress_UUIE::m_h245AddressH225_Progress_UUIE::m_callIdentifierH225_Progress_UUIE::m_h245SecurityModeH225_Progress_UUIE::m_tokensH225_Progress_UUIE::m_cryptoTokensH225_Progress_UUIE::m_fastStartH225_Progress_UUIE::m_multipleCallsH225_Progress_UUIE::m_maintainConnectionH225_Progress_UUIE::m_fastConnectRefusedH225_ANSI_41_UIMH225_ANSI_41_UIM::PCLASSINFOH225_ANSI_41_UIM::OptionalFieldsH225_ANSI_41_UIM::m_imsiH225_ANSI_41_UIM::m_minH225_ANSI_41_UIM::m_mdnH225_ANSI_41_UIM::m_msisdnH225_ANSI_41_UIM::m_esnH225_ANSI_41_UIM::m_mscidH225_ANSI_41_UIM::m_system_idH225_ANSI_41_UIM_system_idH225_ANSI_41_UIM::m_systemMyTypeCodeH225_ANSI_41_UIM::m_systemAccessTypeH225_ANSI_41_UIM::m_qualificationInformationCodeH225_ANSI_41_UIM::m_sesnH225_ANSI_41_UIM::m_socH225_CallCapacityInfo::PCLASSINFOH225_CallCapacityInfo::OptionalFieldsH225_CallCapacityInfo::m_voiceGwCallsAvailableH225_CallCapacityInfo::m_h310GwCallsAvailableH225_CallCapacityInfo::m_h320GwCallsAvailableH225_CallCapacityInfo::m_h321GwCallsAvailableH225_CallCapacityInfo::m_h322GwCallsAvailableH225_CallCapacityInfo::m_h323GwCallsAvailableH225_CallCapacityInfo::m_h324GwCallsAvailableH225_CallCapacityInfo::m_t120OnlyGwCallsAvailableH225_CallCapacityInfo::m_t38FaxAnnexbOnlyGwCallsAvailableH225_CallCapacityInfo::m_terminalCallsAvailableH225_CallCapacityInfo::m_mcuCallsAvailableH225_CallCapacityInfo::m_sipGwCallsAvailableH225_Connect_UUIE_languageH225_Connect_UUIE_language::PCLASSINFOH225_NonStandardProtocolH225_NonStandardProtocol::PCLASSINFOH225_NonStandardProtocol::OptionalFieldsH225_NonStandardProtocol::m_nonStandardDataH225_NonStandardProtocol::m_dataRatesSupportedH225_NonStandardProtocol::m_supportedPrefixesH225_UnknownMessageResponseH225_UnknownMessageResponse::PCLASSINFOH225_UnknownMessageResponse::OptionalFieldsH225_UnknownMessageResponse::m_requestSeqNumH225_UnknownMessageResponse::m_tokensH225_UnknownMessageResponse::m_cryptoTokensH225_UnknownMessageResponse::m_integrityCheckValueH225_UnknownMessageResponse::m_messageNotUnderstoodH225_TransportAddress_ipSourceRoute_routingH225_TransportAddress_ipSourceRoute_routing::PCLASSINFOH225_TransportAddress_ipSourceRoute_routing::ChoicesH225_SecurityCapabilitiesH225_SecurityCapabilities::PCLASSINFOH225_SecurityCapabilities::OptionalFieldsH225_SecurityCapabilities::m_nonStandardH225_SecurityCapabilities::m_encryptionH225_SecurityServiceModeH225_SecurityCapabilities::m_authenticatonH225_SecurityCapabilities::m_integrityH225_NumberDigitsH225_NumberDigits::PCLASSINFOH225_CallLinkage::PCLASSINFOH225_CallLinkage::OptionalFieldsH225_CallLinkage::m_globalCallIdH225_CallLinkage::m_threadIdH225_EncodedFastStartTokenH225_EncodedFastStartToken::PCLASSINFOH225_EncodedFastStartToken::DecodeSubTypeH225_FastStartToken &objH225_EncodedFastStartToken::EncodeSubTypeconst H225_FastStartToken &objH225_CallType::PCLASSINFOH225_CallType::ChoicesH225_ArrayOf_PASN_OctetString::PCLASSINFOH225_UnregistrationConfirmH225_UnregistrationConfirm::PCLASSINFOH225_UnregistrationConfirm::OptionalFieldsH225_UnregistrationConfirm::m_requestSeqNumH225_UnregistrationConfirm::m_nonStandardDataH225_UnregistrationConfirm::m_tokensH225_UnregistrationConfirm::m_cryptoTokensH225_UnregistrationConfirm::m_integrityCheckValueH225_UnregistrationConfirm::m_genericDataH225_UnregistrationConfirm::m_assignedGatekeeperH225_AdmissionRejectH225_AdmissionReject::PCLASSINFOH225_AdmissionReject::OptionalFieldsH225_AdmissionReject::m_requestSeqNumH225_AdmissionReject::m_rejectReasonH225_AdmissionReject::m_nonStandardDataH225_AdmissionReject::m_altGKInfoH225_AdmissionReject::m_tokensH225_AdmissionReject::m_cryptoTokensH225_AdmissionReject::m_callSignalAddressH225_AdmissionReject::m_integrityCheckValueH225_AdmissionReject::m_serviceControlH225_AdmissionReject::m_featureSetH225_AdmissionReject::m_genericDataH225_AdmissionReject::m_assignedGatekeeperH225_ANSI_41_UIM_system_id::PCLASSINFOH225_ANSI_41_UIM_system_id::ChoicesH225_TransportAddress_ipxAddressH225_TransportAddress_ipxAddress::PCLASSINFOH225_TransportAddress_ipxAddress::m_nodeH225_TransportAddress_ipxAddress::m_netnumH225_TransportAddress_ipxAddress::m_portH225_ArrayOf_AddressPattern::PCLASSINFOH225_SetupAcknowledge_UUIEH225_SetupAcknowledge_UUIE::PCLASSINFOH225_SetupAcknowledge_UUIE::OptionalFieldsH225_SetupAcknowledge_UUIE::m_protocolIdentifierH225_SetupAcknowledge_UUIE::m_callIdentifierH225_SetupAcknowledge_UUIE::m_tokensH225_SetupAcknowledge_UUIE::m_cryptoTokensH225_ScreeningIndicator::PCLASSINFOH225_ScreeningIndicator::EnumerationsH225_ICV::PCLASSINFOH225_ICV::m_algorithmOIDPASN_ObjectIdH225_ICV::m_icvH225_ProtocolIdentifier::PCLASSINFOH225_RTPSession_associatedSessionIdsH225_RTPSession_associatedSessionIds::PCLASSINFOH225_StatusInquiry_UUIEH225_StatusInquiry_UUIE::PCLASSINFOH225_StatusInquiry_UUIE::OptionalFieldsH225_StatusInquiry_UUIE::m_protocolIdentifierH225_StatusInquiry_UUIE::m_callIdentifierH225_StatusInquiry_UUIE::m_tokensH225_StatusInquiry_UUIE::m_cryptoTokensH225_DisengageRejectReason::PCLASSINFOH225_DisengageRejectReason::ChoicesH225_DisengageRejectReason::operator H225_SecurityErrors2 &H225_ScnConnectionTypeH225_ScnConnectionType::PCLASSINFOH225_ScnConnectionType::ChoicesH225_H321CapsH225_H321Caps::PCLASSINFOH225_H321Caps::OptionalFieldsH225_H321Caps::m_nonStandardDataH225_H321Caps::m_dataRatesSupportedH225_H321Caps::m_supportedPrefixesH225_GatekeeperInfo::PCLASSINFOH225_GatekeeperInfo::OptionalFieldsH225_GatekeeperInfo::m_nonStandardDataH225_ReleaseCompleteReason::PCLASSINFOH225_ReleaseCompleteReason::ChoicesH225_ReleaseCompleteReason::operator H225_NonStandardParameter &H225_ReleaseCompleteReason::operator H225_ConferenceIdentifier &H225_ReleaseCompleteReason::operator H225_SecurityErrors &H225_EncryptIntAlgH225_EncryptIntAlg::PCLASSINFOH225_EncryptIntAlg::ChoicesH225_EncryptIntAlg::operator H225_NonStandardParameter &H225_AddressPattern_rangeH225_AddressPattern_range::PCLASSINFOH225_AddressPattern_range::m_startOfRangeH225_AddressPattern_range::m_endOfRangeH225_Connect_UUIEH225_Connect_UUIE::PCLASSINFOH225_Connect_UUIE::OptionalFieldsH225_Connect_UUIE::m_protocolIdentifierH225_Connect_UUIE::m_h245AddressH225_Connect_UUIE::m_destinationInfoH225_Connect_UUIE::m_conferenceIDH225_Connect_UUIE::m_callIdentifierH225_Connect_UUIE::m_h245SecurityModeH225_Connect_UUIE::m_tokensH225_Connect_UUIE::m_cryptoTokensH225_Connect_UUIE::m_fastStartH225_Connect_UUIE::m_multipleCallsH225_Connect_UUIE::m_maintainConnectionH225_Connect_UUIE::m_languageH225_Connect_UUIE::m_connectedAddressH225_Connect_UUIE::m_presentationIndicatorH225_Connect_UUIE::m_screeningIndicatorH225_Connect_UUIE::m_fastConnectRefusedH225_Connect_UUIE::m_serviceControlH225_Connect_UUIE::m_capacityH225_Connect_UUIE::m_featureSetH225_Setup_UUIE_languageH225_Setup_UUIE_language::PCLASSINFOH225_ArrayOf_CryptoH323Token::PCLASSINFOH225_ArrayOf_EnumeratedParameter::PCLASSINFOH225_H323_UU_PDU_h323_message_body::PCLASSINFOH225_H323_UU_PDU_h323_message_body::ChoicesH225_H323_UU_PDU_h323_message_body::operator H225_Setup_UUIE &H225_H323_UU_PDU_h323_message_body::operator H225_CallProceeding_UUIE &H225_H323_UU_PDU_h323_message_body::operator H225_Connect_UUIE &H225_H323_UU_PDU_h323_message_body::operator H225_Alerting_UUIE &H225_H323_UU_PDU_h323_message_body::operator H225_Information_UUIE &H225_H323_UU_PDU_h323_message_body::operator H225_ReleaseComplete_UUIE &H225_H323_UU_PDU_h323_message_body::operator H225_Facility_UUIE &H225_Facility_UUIE &H225_H323_UU_PDU_h323_message_body::operator H225_Progress_UUIE &H225_H323_UU_PDU_h323_message_body::operator H225_Status_UUIE &H225_H323_UU_PDU_h323_message_body::operator H225_StatusInquiry_UUIE &H225_H323_UU_PDU_h323_message_body::operator H225_SetupAcknowledge_UUIE &H225_H323_UU_PDU_h323_message_body::operator H225_Notify_UUIE &H225_GatekeeperRequestH225_GatekeeperRequest::PCLASSINFOH225_GatekeeperRequest::OptionalFieldsH225_GatekeeperRequest::m_requestSeqNumH225_GatekeeperRequest::m_protocolIdentifierH225_GatekeeperRequest::m_nonStandardDataH225_GatekeeperRequest::m_rasAddressH225_GatekeeperRequest::m_endpointTypeH225_GatekeeperRequest::m_gatekeeperIdentifierH225_GatekeeperRequest::m_callServicesH225_GatekeeperRequest::m_endpointAliasH225_GatekeeperRequest::m_alternateEndpointsH225_GatekeeperRequest::m_tokensH225_GatekeeperRequest::m_cryptoTokensH225_GatekeeperRequest::m_authenticationCapabilityH225_GatekeeperRequest::m_algorithmOIDsH225_ArrayOf_PASN_ObjectIdH225_GatekeeperRequest::m_integrityH225_ArrayOf_IntegrityMechanismH225_GatekeeperRequest::m_integrityCheckValueH225_GatekeeperRequest::m_supportsAltGKH225_GatekeeperRequest::m_featureSetH225_GatekeeperRequest::m_genericDataH225_GatekeeperRequest::m_supportsAssignedGKH225_GatekeeperRequest::m_assignedGatekeeperH225_Setup_UUIE_conferenceGoalH225_Setup_UUIE_conferenceGoal::PCLASSINFOH225_Setup_UUIE_conferenceGoal::ChoicesH225_SecurityServiceMode::PCLASSINFOH225_SecurityServiceMode::ChoicesH225_SecurityServiceMode::operator H225_NonStandardParameter &H225_NonStandardParameter::PCLASSINFOH225_NonStandardParameter::m_nonStandardIdentifierH225_NonStandardIdentifierH225_NonStandardParameter::m_dataH225_DisengageConfirmH225_DisengageConfirm::PCLASSINFOH225_DisengageConfirm::OptionalFieldsH225_DisengageConfirm::m_requestSeqNumH225_DisengageConfirm::m_nonStandardDataH225_DisengageConfirm::m_tokensH225_DisengageConfirm::m_cryptoTokensH225_DisengageConfirm::m_integrityCheckValueH225_DisengageConfirm::m_capacityH225_DisengageConfirm::m_circuitInfoH225_DisengageConfirm::m_usageInformationH225_DisengageConfirm::m_genericDataH225_DisengageConfirm::m_assignedGatekeeperH225_IsupPublicPartyNumberH225_IsupPublicPartyNumber::PCLASSINFOH225_IsupPublicPartyNumber::m_natureOfAddressH225_IsupPublicPartyNumber::m_addressH225_UnregistrationRejectH225_UnregistrationReject::PCLASSINFOH225_UnregistrationReject::OptionalFieldsH225_UnregistrationReject::m_requestSeqNumH225_UnregistrationReject::m_rejectReasonH225_UnregistrationReject::m_nonStandardDataH225_UnregistrationReject::m_altGKInfoH225_UnregistrationReject::m_tokensH225_UnregistrationReject::m_cryptoTokensH225_UnregistrationReject::m_integrityCheckValueH225_UnregistrationReject::m_genericDataH225_IsupNumberH225_IsupNumber::PCLASSINFOH225_IsupNumber::ChoicesH225_IsupNumber::operator H225_IsupPublicPartyNumber &H225_IsupPublicPartyNumber &H225_IsupNumber::operator H225_IsupDigits &H225_IsupNumber::operator H225_IsupPrivatePartyNumber &H225_IsupPrivatePartyNumber &MULTIMEDIA_QOSCapabilityH225_LocationRequestH225_LocationRequest::PCLASSINFOH225_LocationRequest::OptionalFieldsH225_LocationRequest::m_requestSeqNumH225_LocationRequest::m_endpointIdentifierH225_LocationRequest::m_destinationInfoH225_LocationRequest::m_nonStandardDataH225_LocationRequest::m_replyAddressH225_LocationRequest::m_sourceInfoH225_LocationRequest::m_canMapAliasH225_LocationRequest::m_gatekeeperIdentifierH225_LocationRequest::m_tokensH225_LocationRequest::m_cryptoTokensH225_LocationRequest::m_integrityCheckValueH225_LocationRequest::m_desiredProtocolsH225_LocationRequest::m_desiredTunnelledProtocolH225_LocationRequest::m_featureSetH225_LocationRequest::m_genericDataH225_LocationRequest::m_hopCountH225_LocationRequest::m_circuitInfoH225_LocationRequest::m_callIdentifierH225_LocationRequest::m_bandWidthH225_LocationRequest::m_sourceEndpointInfoH225_LocationRequest::m_canMapSrcAliasH225_LocationRequest::m_languageH225_LocationRequest_languageH225_TransportQOS::PCLASSINFOH225_TransportQOS::ChoicesH225_TransportQOS::operator H225_ArrayOf_QOSCapability &H225_ArrayOf_QOSCapability &H225_AdmissionRequestH225_AdmissionRequest::PCLASSINFOH225_AdmissionRequest::OptionalFieldsH225_AdmissionRequest::m_requestSeqNumH225_AdmissionRequest::m_callTypeH225_AdmissionRequest::m_callModelH225_AdmissionRequest::m_endpointIdentifierH225_AdmissionRequest::m_destinationInfoH225_AdmissionRequest::m_destCallSignalAddressH225_AdmissionRequest::m_destExtraCallInfoH225_AdmissionRequest::m_srcInfoH225_AdmissionRequest::m_srcCallSignalAddressH225_AdmissionRequest::m_bandWidthH225_AdmissionRequest::m_callReferenceValueH225_AdmissionRequest::m_nonStandardDataH225_AdmissionRequest::m_callServicesH225_AdmissionRequest::m_conferenceIDH225_AdmissionRequest::m_activeMCH225_AdmissionRequest::m_answerCallH225_AdmissionRequest::m_canMapAliasH225_AdmissionRequest::m_callIdentifierH225_AdmissionRequest::m_srcAlternativesH225_AdmissionRequest::m_destAlternativesH225_AdmissionRequest::m_gatekeeperIdentifierH225_AdmissionRequest::m_tokensH225_AdmissionRequest::m_cryptoTokensH225_AdmissionRequest::m_integrityCheckValueH225_AdmissionRequest::m_transportQOSH225_AdmissionRequest::m_willSupplyUUIEsH225_AdmissionRequest::m_callLinkageH225_AdmissionRequest::m_gatewayDataRateH225_AdmissionRequest::m_capacityH225_AdmissionRequest::m_circuitInfoH225_AdmissionRequest::m_desiredProtocolsH225_AdmissionRequest::m_desiredTunnelledProtocolH225_AdmissionRequest::m_featureSetH225_AdmissionRequest::m_genericDataH225_AdmissionRequest::m_canMapSrcAliasH225_RasUsageInfoTypesH225_RasUsageInfoTypes::PCLASSINFOH225_RasUsageInfoTypes::OptionalFieldsH225_RasUsageInfoTypes::m_nonStandardUsageTypesH225_RasUsageInfoTypes::m_startTimeH225_RasUsageInfoTypes::m_endTimeH225_RasUsageInfoTypes::m_terminationCauseH225_PublicPartyNumberH225_PublicPartyNumber::PCLASSINFOH225_PublicPartyNumber::m_publicTypeOfNumberH225_PublicPartyNumber::m_publicNumberDigitsH225_CallCreditServiceControl_billingMode::PCLASSINFOH225_CallCreditServiceControl_billingMode::ChoicesH225_InfoRequestResponse_perCallInfo_subtypeH225_InfoRequestResponse_perCallInfo_subtype::PCLASSINFOH225_InfoRequestResponse_perCallInfo_subtype::OptionalFieldsH225_InfoRequestResponse_perCallInfo_subtype::m_nonStandardDataH225_InfoRequestResponse_perCallInfo_subtype::m_callReferenceValueH225_InfoRequestResponse_perCallInfo_subtype::m_conferenceIDH225_InfoRequestResponse_perCallInfo_subtype::m_originatorH225_InfoRequestResponse_perCallInfo_subtype::m_audioH225_InfoRequestResponse_perCallInfo_subtype::m_videoH225_InfoRequestResponse_perCallInfo_subtype::m_dataH225_InfoRequestResponse_perCallInfo_subtype::m_h245H225_InfoRequestResponse_perCallInfo_subtype::m_callSignalingH225_InfoRequestResponse_perCallInfo_subtype::m_callTypeH225_InfoRequestResponse_perCallInfo_subtype::m_bandWidthH225_InfoRequestResponse_perCallInfo_subtype::m_callModelH225_InfoRequestResponse_perCallInfo_subtype::m_callIdentifierH225_InfoRequestResponse_perCallInfo_subtype::m_tokensH225_InfoRequestResponse_perCallInfo_subtype::m_cryptoTokensH225_InfoRequestResponse_perCallInfo_subtype::m_substituteConfIDsH225_InfoRequestResponse_perCallInfo_subtype::m_pduH225_InfoRequestResponse_perCallInfo_subtype::m_callLinkageH225_InfoRequestResponse_perCallInfo_subtype::m_usageInformationH225_InfoRequestResponse_perCallInfo_subtype::m_circuitInfoH225_CicInfo_cic::PCLASSINFOH225_BandwidthRejectH225_BandwidthReject::PCLASSINFOH225_BandwidthReject::OptionalFieldsH225_BandwidthReject::m_requestSeqNumH225_BandwidthReject::m_rejectReasonH225_BandwidthReject::m_allowedBandWidthH225_BandwidthReject::m_nonStandardDataH225_BandwidthReject::m_altGKInfoH225_BandwidthReject::m_tokensH225_BandwidthReject::m_cryptoTokensH225_BandwidthReject::m_integrityCheckValueH225_BandwidthReject::m_genericDataH225_ArrayOf_PartyNumberH225_ArrayOf_PartyNumber::PCLASSINFOH225_GSM_UIMH225_GSM_UIM::PCLASSINFOH225_GSM_UIM::OptionalFieldsH225_GSM_UIM::m_imsiH225_GSM_UIM::m_tmsiH225_GSM_UIM::m_msisdnH225_GSM_UIM::m_imeiH225_GSM_UIM::m_hplmnH225_GSM_UIM::m_vplmnH225_InfoRequestAckH225_InfoRequestAck::PCLASSINFOH225_InfoRequestAck::OptionalFieldsH225_InfoRequestAck::m_requestSeqNumH225_InfoRequestAck::m_nonStandardDataH225_InfoRequestAck::m_tokensH225_InfoRequestAck::m_cryptoTokensH225_InfoRequestAck::m_integrityCheckValueH225_IntegrityMechanismH225_IntegrityMechanism::PCLASSINFOH225_IntegrityMechanism::ChoicesH225_IntegrityMechanism::operator H225_NonStandardParameter &H225_IntegrityMechanism::operator H225_NonIsoIntegrityMechanism &H225_NonIsoIntegrityMechanism &H225_TransportChannelInfo::PCLASSINFOH225_TransportChannelInfo::OptionalFieldsH225_TransportChannelInfo::m_sendAddressH225_TransportChannelInfo::m_recvAddressH225_VendorIdentifier::PCLASSINFOH225_VendorIdentifier::OptionalFieldsH225_VendorIdentifier::m_vendorH225_H221NonStandardH225_VendorIdentifier::m_productIdH225_VendorIdentifier::m_versionIdH225_VendorIdentifier::m_enterpriseNumberH225_LocationRequest_language::PCLASSINFOH225_InfoRequestH225_InfoRequest::PCLASSINFOH225_InfoRequest::OptionalFieldsH225_InfoRequest::m_requestSeqNumH225_InfoRequest::m_callReferenceValueH225_InfoRequest::m_nonStandardDataH225_InfoRequest::m_replyAddressH225_InfoRequest::m_callIdentifierH225_InfoRequest::m_tokensH225_InfoRequest::m_cryptoTokensH225_InfoRequest::m_integrityCheckValueH225_InfoRequest::m_uuiesRequestedH225_InfoRequest::m_callLinkageH225_InfoRequest::m_usageInfoRequestedH225_InfoRequest::m_segmentedResponseSupportedH225_InfoRequest::m_nextSegmentRequestedH225_InfoRequest::m_capacityInfoRequestedH225_InfoRequest::m_genericDataH225_InfoRequest::m_assignedGatekeeperH225_ArrayOf_H245SecurityH225_ArrayOf_H245Security::PCLASSINFOH225_GatewayInfo::PCLASSINFOH225_GatewayInfo::OptionalFieldsH225_GatewayInfo::m_protocolH225_GatewayInfo::m_nonStandardDataH225_ArrayOf_RasUsageSpecification::PCLASSINFOH225_GatekeeperConfirmH225_GatekeeperConfirm::PCLASSINFOH225_GatekeeperConfirm::OptionalFieldsH225_GatekeeperConfirm::m_requestSeqNumH225_GatekeeperConfirm::m_protocolIdentifierH225_GatekeeperConfirm::m_nonStandardDataH225_GatekeeperConfirm::m_gatekeeperIdentifierH225_GatekeeperConfirm::m_rasAddressH225_GatekeeperConfirm::m_alternateGatekeeperH225_GatekeeperConfirm::m_authenticationModeH235_AuthenticationMechanismH225_GatekeeperConfirm::m_tokensH225_GatekeeperConfirm::m_cryptoTokensH225_GatekeeperConfirm::m_algorithmOIDH225_GatekeeperConfirm::m_integrityH225_GatekeeperConfirm::m_integrityCheckValueH225_GatekeeperConfirm::m_featureSetH225_GatekeeperConfirm::m_genericDataH225_GatekeeperConfirm::m_assignedGatekeeperH225_GatekeeperConfirm::m_rehomingModelH225_RTPSessionH225_RTPSession::PCLASSINFOH225_RTPSession::OptionalFieldsH225_RTPSession::m_rtpAddressH225_RTPSession::m_rtcpAddressH225_RTPSession::m_cnamePASN_PrintableStringH225_RTPSession::m_ssrcH225_RTPSession::m_sessionIdH225_RTPSession::m_associatedSessionIdsH225_RTPSession::m_multicastH225_RTPSession::m_bandwidthH225_TBCD_STRINGH225_TBCD_STRING::PCLASSINFOH225_H323_UU_PDU_tunnelledSignallingMessage::PCLASSINFOH225_H323_UU_PDU_tunnelledSignallingMessage::OptionalFieldsH225_H323_UU_PDU_tunnelledSignallingMessage::m_tunnelledProtocolIDH225_H323_UU_PDU_tunnelledSignallingMessage::m_messageContentH225_H323_UU_PDU_tunnelledSignallingMessage::m_tunnellingRequiredH225_H323_UU_PDU_tunnelledSignallingMessage::m_nonStandardDataH225_AltGKInfo::PCLASSINFOH225_AltGKInfo::m_alternateGatekeeperH225_AltGKInfo::m_altGKisPermanentH225_ServiceControlIndicationH225_ServiceControlIndication::PCLASSINFOH225_ServiceControlIndication::OptionalFieldsH225_ServiceControlIndication::m_requestSeqNumH225_ServiceControlIndication::m_nonStandardDataH225_ServiceControlIndication::m_serviceControlH225_ServiceControlIndication::m_endpointIdentifierH225_ServiceControlIndication::m_callSpecificH225_ServiceControlIndication::m_tokensH225_ServiceControlIndication::m_cryptoTokensH225_ServiceControlIndication::m_integrityCheckValueH225_ServiceControlIndication::m_featureSetH225_ServiceControlIndication::m_genericDataH225_GenericIdentifier::PCLASSINFOH225_GenericIdentifier::ChoicesH225_GenericIdentifier::operator H225_GloballyUniqueID &H225_ArrayOf_ExtendedAliasAddressH225_ArrayOf_ExtendedAliasAddress::PCLASSINFOH225_ArrayOf_ClearToken::PCLASSINFOH225_H221NonStandard::PCLASSINFOH225_H221NonStandard::m_t35CountryCodeH225_H221NonStandard::m_t35ExtensionH225_H221NonStandard::m_manufacturerCodeH225_RasUsageSpecification_callStartingPointH225_RasUsageSpecification_callStartingPoint::PCLASSINFOH225_RasUsageSpecification_callStartingPoint::OptionalFieldsH225_RasUsageSpecification_callStartingPoint::m_alertingH225_RasUsageSpecification_callStartingPoint::m_connectH225_TunnelledProtocol_id::PCLASSINFOH225_TunnelledProtocol_id::ChoicesH225_TunnelledProtocol_id::operator H225_TunnelledProtocolAlternateIdentifier &H225_TunnelledProtocolAlternateIdentifier &H225_InfoRequestResponseH225_InfoRequestResponse::PCLASSINFOH225_InfoRequestResponse::OptionalFieldsH225_InfoRequestResponse::m_nonStandardDataH225_InfoRequestResponse::m_requestSeqNumH225_InfoRequestResponse::m_endpointTypeH225_InfoRequestResponse::m_endpointIdentifierH225_InfoRequestResponse::m_rasAddressH225_InfoRequestResponse::m_callSignalAddressH225_InfoRequestResponse::m_endpointAliasH225_InfoRequestResponse::m_perCallInfoH225_InfoRequestResponse::m_tokensH225_InfoRequestResponse::m_cryptoTokensH225_InfoRequestResponse::m_integrityCheckValueH225_InfoRequestResponse::m_needResponseH225_InfoRequestResponse::m_capacityH225_InfoRequestResponse::m_irrStatusH225_InfoRequestResponseStatusH225_InfoRequestResponse::m_unsolicitedH225_InfoRequestResponse::m_genericDataH225_ArrayOf_TunnelledProtocol::PCLASSINFOH225_NonStandardIdentifier::PCLASSINFOH225_NonStandardIdentifier::ChoicesH225_NonStandardIdentifier::operator H225_H221NonStandard &H225_H221NonStandard &H225_H322CapsH225_H322Caps::PCLASSINFOH225_H322Caps::OptionalFieldsH225_H322Caps::m_nonStandardDataH225_H322Caps::m_dataRatesSupportedH225_H322Caps::m_supportedPrefixesH225_CapacityReportingSpecification::PCLASSINFOH225_CapacityReportingSpecification::m_whenH225_LocationRejectReasonH225_LocationRejectReason::PCLASSINFOH225_LocationRejectReason::ChoicesH225_LocationRejectReason::operator H225_ArrayOf_PartyNumber &H225_LocationRejectReason::operator H225_SecurityErrors2 &H225_Setup_UUIEH225_Setup_UUIE::PCLASSINFOH225_Setup_UUIE::OptionalFieldsH225_Setup_UUIE::m_protocolIdentifierH225_Setup_UUIE::m_h245AddressH225_Setup_UUIE::m_sourceAddressH225_Setup_UUIE::m_sourceInfoH225_Setup_UUIE::m_destinationAddressH225_Setup_UUIE::m_destCallSignalAddressH225_Setup_UUIE::m_destExtraCallInfoH225_Setup_UUIE::m_destExtraCRVH225_ArrayOf_CallReferenceValueH225_Setup_UUIE::m_activeMCH225_Setup_UUIE::m_conferenceIDH225_Setup_UUIE::m_conferenceGoalH225_Setup_UUIE::m_callServicesH225_Setup_UUIE::m_callTypeH225_Setup_UUIE::m_sourceCallSignalAddressH225_Setup_UUIE::m_remoteExtensionAddressH225_Setup_UUIE::m_callIdentifierH225_Setup_UUIE::m_h245SecurityCapabilityH225_Setup_UUIE::m_tokensH225_Setup_UUIE::m_cryptoTokensH225_Setup_UUIE::m_fastStartH225_Setup_UUIE::m_mediaWaitForConnectH225_Setup_UUIE::m_canOverlapSendH225_Setup_UUIE::m_endpointIdentifierH225_Setup_UUIE::m_multipleCallsH225_Setup_UUIE::m_maintainConnectionH225_Setup_UUIE::m_connectionParametersH225_Setup_UUIE_connectionParametersH225_Setup_UUIE::m_languageH225_Setup_UUIE::m_presentationIndicatorH225_Setup_UUIE::m_screeningIndicatorH225_Setup_UUIE::m_serviceControlH225_Setup_UUIE::m_symmetricOperationRequiredH225_Setup_UUIE::m_capacityH225_Setup_UUIE::m_circuitInfoH225_Setup_UUIE::m_desiredProtocolsH225_Setup_UUIE::m_neededFeaturesH225_Setup_UUIE::m_desiredFeaturesH225_Setup_UUIE::m_supportedFeaturesH225_Setup_UUIE::m_parallelH245ControlH225_Setup_UUIE::m_additionalSourceAddressesH225_Setup_UUIE::m_hopCountH225_AlternateTransportAddresses::PCLASSINFOH225_AlternateTransportAddresses::OptionalFieldsH225_AlternateTransportAddresses::m_annexEH225_AlternateTransportAddresses::m_sctpH225_GatekeeperRejectH225_GatekeeperReject::PCLASSINFOH225_GatekeeperReject::OptionalFieldsH225_GatekeeperReject::m_requestSeqNumH225_GatekeeperReject::m_protocolIdentifierH225_GatekeeperReject::m_nonStandardDataH225_GatekeeperReject::m_gatekeeperIdentifierH225_GatekeeperReject::m_rejectReasonH225_GatekeeperReject::m_altGKInfoH225_GatekeeperReject::m_tokensH225_GatekeeperReject::m_cryptoTokensH225_GatekeeperReject::m_integrityCheckValueH225_GatekeeperReject::m_featureSetH225_GatekeeperReject::m_genericDataH225_AddressPatternH225_AddressPattern::PCLASSINFOH225_AddressPattern::ChoicesH225_AddressPattern::operator H225_AliasAddress &H225_AddressPattern::operator H225_AddressPattern_range &H225_AddressPattern_range &H225_McuInfo::PCLASSINFOH225_McuInfo::OptionalFieldsH225_McuInfo::m_nonStandardDataH225_McuInfo::m_protocolH225_RegistrationConfirm_preGrantedARQ::PCLASSINFOH225_RegistrationConfirm_preGrantedARQ::OptionalFieldsH225_RegistrationConfirm_preGrantedARQ::m_makeCallH225_RegistrationConfirm_preGrantedARQ::m_useGKCallSignalAddressToMakeCallH225_RegistrationConfirm_preGrantedARQ::m_answerCallH225_RegistrationConfirm_preGrantedARQ::m_useGKCallSignalAddressToAnswerH225_RegistrationConfirm_preGrantedARQ::m_irrFrequencyInCallH225_RegistrationConfirm_preGrantedARQ::m_totalBandwidthRestrictionH225_RegistrationConfirm_preGrantedARQ::m_alternateTransportAddressesH225_RegistrationConfirm_preGrantedARQ::m_useSpecifiedTransportH225_PrivatePartyNumberH225_PrivatePartyNumber::PCLASSINFOH225_PrivatePartyNumber::m_privateTypeOfNumberH225_PrivatePartyNumber::m_privateNumberDigitsH225_ServiceControlResponseH225_ServiceControlResponse::PCLASSINFOH225_ServiceControlResponse::OptionalFieldsH225_ServiceControlResponse::m_requestSeqNumH225_ServiceControlResponse::m_resultH225_ServiceControlResponse_resultH225_ServiceControlResponse::m_nonStandardDataH225_ServiceControlResponse::m_tokensH225_ServiceControlResponse::m_cryptoTokensH225_ServiceControlResponse::m_integrityCheckValueH225_ServiceControlResponse::m_featureSetH225_ServiceControlResponse::m_genericDataH225_StimulusControl::PCLASSINFOH225_StimulusControl::OptionalFieldsH225_StimulusControl::m_nonStandardH225_StimulusControl::m_isTextH225_StimulusControl::m_h248MessageH225_ArrayOf_SupportedProtocols::PCLASSINFOH225_ArrayOf_ServiceControlSession::PCLASSINFOH225_CallTerminationCauseH225_CallTerminationCause::PCLASSINFOH225_CallTerminationCause::ChoicesH225_CallTerminationCause::operator H225_ReleaseCompleteReason &H225_ReleaseCompleteReason &H225_ScnConnectionAggregationH225_ScnConnectionAggregation::PCLASSINFOH225_ScnConnectionAggregation::ChoicesH225_FastStartTokenH235_ClearTokenH225_FastStartToken::PCLASSINFOH225_UseSpecifiedTransport::PCLASSINFOH225_UseSpecifiedTransport::ChoicesH225_RequestInProgressH225_RequestInProgress::PCLASSINFOH225_RequestInProgress::OptionalFieldsH225_RequestInProgress::m_requestSeqNumH225_RequestInProgress::m_nonStandardDataH225_RequestInProgress::m_tokensH225_RequestInProgress::m_cryptoTokensH225_RequestInProgress::m_integrityCheckValueH225_RequestInProgress::m_delayH225_RegistrationRequestH225_RegistrationRequest::PCLASSINFOH225_RegistrationRequest::OptionalFieldsH225_RegistrationRequest::m_requestSeqNumH225_RegistrationRequest::m_protocolIdentifierH225_RegistrationRequest::m_nonStandardDataH225_RegistrationRequest::m_discoveryCompleteH225_RegistrationRequest::m_callSignalAddressH225_RegistrationRequest::m_rasAddressH225_RegistrationRequest::m_terminalTypeH225_RegistrationRequest::m_terminalAliasH225_RegistrationRequest::m_gatekeeperIdentifierH225_RegistrationRequest::m_endpointVendorH225_RegistrationRequest::m_alternateEndpointsH225_RegistrationRequest::m_timeToLiveH225_RegistrationRequest::m_tokensH225_RegistrationRequest::m_cryptoTokensH225_RegistrationRequest::m_integrityCheckValueH225_RegistrationRequest::m_keepAliveH225_RegistrationRequest::m_endpointIdentifierH225_RegistrationRequest::m_willSupplyUUIEsH225_RegistrationRequest::m_maintainConnectionH225_RegistrationRequest::m_alternateTransportAddressesH225_RegistrationRequest::m_additiveRegistrationH225_RegistrationRequest::m_terminalAliasPatternH225_RegistrationRequest::m_supportsAltGKH225_RegistrationRequest::m_usageReportingCapabilityH225_RegistrationRequest::m_multipleCallsH225_RegistrationRequest::m_supportedH248PackagesH225_RegistrationRequest::m_callCreditCapabilityH225_RegistrationRequest::m_capacityReportingCapabilityH225_CapacityReportingCapabilityH225_RegistrationRequest::m_capacityH225_RegistrationRequest::m_featureSetH225_RegistrationRequest::m_genericDataH225_RegistrationRequest::m_restartH225_RegistrationRequest::m_supportsACFSequencesH225_RegistrationRequest::m_supportsAssignedGKH225_RegistrationRequest::m_assignedGatekeeperH225_RegistrationRequest::m_transportQOSH225_RegistrationRequest::m_languageH225_ArrayOf_ConferenceList::PCLASSINFOH225_DisengageRequestH225_DisengageRequest::PCLASSINFOH225_DisengageRequest::OptionalFieldsH225_DisengageRequest::m_requestSeqNumH225_DisengageRequest::m_endpointIdentifierH225_DisengageRequest::m_conferenceIDH225_DisengageRequest::m_callReferenceValueH225_DisengageRequest::m_disengageReasonH225_DisengageRequest::m_nonStandardDataH225_DisengageRequest::m_callIdentifierH225_DisengageRequest::m_gatekeeperIdentifierH225_DisengageRequest::m_tokensH225_DisengageRequest::m_cryptoTokensH225_DisengageRequest::m_integrityCheckValueH225_DisengageRequest::m_answeredCallH225_DisengageRequest::m_callLinkageH225_DisengageRequest::m_capacityH225_DisengageRequest::m_circuitInfoH225_DisengageRequest::m_usageInformationH225_DisengageRequest::m_terminationCauseH225_DisengageRequest::m_serviceControlH225_DisengageRequest::m_genericDataH225_EndpointH225_Endpoint::PCLASSINFOH225_Endpoint::OptionalFieldsH225_Endpoint::m_nonStandardDataH225_Endpoint::m_aliasAddressH225_Endpoint::m_callSignalAddressH225_Endpoint::m_rasAddressH225_Endpoint::m_endpointTypeH225_Endpoint::m_tokensH225_Endpoint::m_cryptoTokensH225_Endpoint::m_priorityH225_Endpoint::m_remoteExtensionAddressH225_Endpoint::m_destExtraCallInfoH225_Endpoint::m_alternateTransportAddressesH225_Endpoint::m_circuitInfoH225_Endpoint::m_featureSetH225_ServiceControlSession_reason::PCLASSINFOH225_ServiceControlSession_reason::ChoicesH225_RegistrationRejectReason_invalidTerminalAliasesH225_RegistrationRejectReason_invalidTerminalAliases::PCLASSINFOH225_RegistrationRejectReason_invalidTerminalAliases::OptionalFieldsH225_RegistrationRejectReason_invalidTerminalAliases::m_terminalAliasH225_RegistrationRejectReason_invalidTerminalAliases::m_terminalAliasPatternH225_RegistrationRejectReason_invalidTerminalAliases::m_supportedPrefixesH225_ArrayOf_AliasAddress::PCLASSINFOH225_ServiceControlDescriptor::PCLASSINFOH225_ServiceControlDescriptor::ChoicesH225_ServiceControlDescriptor::operator H225_H248SignalsDescriptor &H225_ServiceControlDescriptor::operator H225_NonStandardParameter &H225_ServiceControlDescriptor::operator H225_CallCreditServiceControl &H225_CallCreditServiceControl &H225_ArrayOf_IntegrityMechanism::PCLASSINFOH225_ArrayOf_NonStandardParameter::PCLASSINFOH225_CapacityReportingCapability::PCLASSINFOH225_CapacityReportingCapability::m_canReportCallCapacityH225_InfoRequestResponseStatus::PCLASSINFOH225_InfoRequestResponseStatus::ChoicesH225_LocationConfirmH225_LocationConfirm::PCLASSINFOH225_LocationConfirm::OptionalFieldsH225_LocationConfirm::m_requestSeqNumH225_LocationConfirm::m_callSignalAddressH225_LocationConfirm::m_rasAddressH225_LocationConfirm::m_nonStandardDataH225_LocationConfirm::m_destinationInfoH225_LocationConfirm::m_destExtraCallInfoH225_LocationConfirm::m_destinationTypeH225_LocationConfirm::m_remoteExtensionAddressH225_LocationConfirm::m_alternateEndpointsH225_LocationConfirm::m_tokensH225_LocationConfirm::m_cryptoTokensH225_LocationConfirm::m_integrityCheckValueH225_LocationConfirm::m_alternateTransportAddressesH225_LocationConfirm::m_supportedProtocolsH225_LocationConfirm::m_multipleCallsH225_LocationConfirm::m_featureSetH225_LocationConfirm::m_genericDataH225_LocationConfirm::m_circuitInfoH225_LocationConfirm::m_serviceControlH225_LocationConfirm::m_modifiedSrcInfoH225_LocationConfirm::m_bandWidthH225_GatekeeperIdentifier::PCLASSINFOH225_TransportAddress_ipSourceRouteH225_TransportAddress_ipSourceRoute::PCLASSINFOH225_TransportAddress_ipSourceRoute::m_ipH225_TransportAddress_ipSourceRoute::m_portH225_TransportAddress_ipSourceRoute::m_routeH225_TransportAddress_ipSourceRoute::m_routingH225_CallCreditServiceControl_callStartingPoint::PCLASSINFOH225_CallCreditServiceControl_callStartingPoint::ChoicesH225_Setup_UUIE_connectionParameters::PCLASSINFOH225_Setup_UUIE_connectionParameters::m_connectionTypeH225_Setup_UUIE_connectionParameters::m_numberOfScnConnectionsH225_Setup_UUIE_connectionParameters::m_connectionAggregationH225_MobileUIMH225_MobileUIM::PCLASSINFOH225_MobileUIM::ChoicesH225_MobileUIM::operator H225_ANSI_41_UIM &H225_ANSI_41_UIM &H225_MobileUIM::operator H225_GSM_UIM &H225_GSM_UIM &H225_ArrayOf_CallReferenceValue::PCLASSINFOH225_ServiceControlResponse_result::PCLASSINFOH225_ServiceControlResponse_result::ChoicesH225_RasUsageSpecificationH225_RasUsageSpecification::PCLASSINFOH225_RasUsageSpecification::OptionalFieldsH225_RasUsageSpecification::m_whenH225_RasUsageSpecification::m_callStartingPointH225_RasUsageSpecification::m_requiredH225_Status_UUIEH225_Status_UUIE::PCLASSINFOH225_Status_UUIE::OptionalFieldsH225_Status_UUIE::m_protocolIdentifierH225_Status_UUIE::m_callIdentifierH225_Status_UUIE::m_tokensH225_Status_UUIE::m_cryptoTokensH225_CallReferenceValue::PCLASSINFOH225_RegistrationRejectH225_RegistrationReject::PCLASSINFOH225_RegistrationReject::OptionalFieldsH225_RegistrationReject::m_requestSeqNumH225_RegistrationReject::m_protocolIdentifierH225_RegistrationReject::m_nonStandardDataH225_RegistrationReject::m_rejectReasonH225_RegistrationReject::m_gatekeeperIdentifierH225_RegistrationReject::m_altGKInfoH225_RegistrationReject::m_tokensH225_RegistrationReject::m_cryptoTokensH225_RegistrationReject::m_integrityCheckValueH225_RegistrationReject::m_featureSetH225_RegistrationReject::m_genericDataH225_RegistrationReject::m_assignedGatekeeperH225_ArrayOf_DataRate::PCLASSINFOH225_LocationRejectH225_LocationReject::PCLASSINFOH225_LocationReject::OptionalFieldsH225_LocationReject::m_requestSeqNumH225_LocationReject::m_rejectReasonH225_LocationReject::m_nonStandardDataH225_LocationReject::m_altGKInfoH225_LocationReject::m_tokensH225_LocationReject::m_cryptoTokensH225_LocationReject::m_integrityCheckValueH225_LocationReject::m_featureSetH225_LocationReject::m_genericDataH225_LocationReject::m_serviceControlH225_ArrayOf_QOSCapabilityH225_ArrayOf_QOSCapability::PCLASSINFOH225_ArrayOf_PASN_ObjectId::PCLASSINFOH225_TerminalInfo::PCLASSINFOH225_TerminalInfo::OptionalFieldsH225_TerminalInfo::m_nonStandardDataD:\openh323\include\h225ras.hH323TransactorH225_RAS::PCLASSINFOH225_RAS::OnSendFeatureSetH225_RAS::OnReceiveFeatureSetH225_RAS::GetIdentifierH225_RAS::SetIdentifierH225_RAS::gatekeeperIdentifierD:\openh323\include\h235.hH235_ECKASDH_eckasdh2H235_ECKASDH_eckasdh2::PCLASSINFOH235_ECKASDH_eckasdh2::m_public_keyH235_ECpointH235_ECKASDH_eckasdh2::m_fieldSizeH235_ECKASDH_eckasdh2::m_baseH235_ECKASDH_eckasdh2::m_weierstrassAH235_ECKASDH_eckasdh2::m_weierstrassBH235_IdentifierH235_Identifier::PCLASSINFOH235_NonStandardParameterH235_NonStandardParameter::PCLASSINFOH235_NonStandardParameter::m_nonStandardIdentifierH235_NonStandardParameter::m_dataH235_CryptoToken_cryptoEncryptedTokenH235_CryptoToken_cryptoEncryptedToken::PCLASSINFOH235_CryptoToken_cryptoEncryptedToken::m_tokenOIDH235_CryptoToken_cryptoEncryptedToken::m_tokenH235_ENCRYPTEDH235_ProfileElementH235_ProfileElement::PCLASSINFOH235_ProfileElement::OptionalFieldsH235_ProfileElement::m_elementIDH235_ProfileElement::m_paramSH235_ParamsH235_ProfileElement::m_elementH235_ElementH235_ECKASDH_eckasdhpH235_ECKASDH_eckasdhp::PCLASSINFOH235_ECKASDH_eckasdhp::m_public_keyH235_ECKASDH_eckasdhp::m_modulusH235_ECKASDH_eckasdhp::m_baseH235_ECKASDH_eckasdhp::m_weierstrassAH235_ECKASDH_eckasdhp::m_weierstrassBH235_SIGNEDH235_SIGNEDtypename ToBeSignedH235_SIGNED::PCLASSINFOH235_SIGNEDH235_SIGNED::m_toBeSignedToBeSignedH235_SIGNED::m_algorithmOIDH235_SIGNED::m_paramSH235_SIGNED::m_signatureH235_SIGNED::GetDataLengthH235_SIGNED::DecodeH235_SIGNED::EncodeH235_SIGNED::PrintOnH235_SIGNED::CompareH235_SIGNED::CloneH235_ECGDSASignatureH235_ECGDSASignature::PCLASSINFOH235_ECGDSASignature::m_rH235_ECGDSASignature::m_sH235_PwdCertTokenH235_ClearToken::PCLASSINFOH235_ClearToken::OptionalFieldsH235_ClearToken::m_tokenOIDH235_ClearToken::m_timeStampH235_ClearToken::m_passwordH235_PasswordH235_ClearToken::m_dhkeyH235_DHsetH235_ClearToken::m_challengeH235_ChallengeStringH235_ClearToken::m_randomH235_RandomValH235_ClearToken::m_certificateH235_TypedCertificateH235_ClearToken::m_generalIDH235_ClearToken::m_nonStandardH235_ClearToken::m_eckasdhkeyH235_ECKASDHH235_ClearToken::m_sendersIDH235_ClearToken::m_h235KeyH235_H235KeyH235_ClearToken::m_profileInfoH235_ArrayOf_ProfileElementH235_PwdCertToken::PCLASSINFOH235_ECpoint::PCLASSINFOH235_ECpoint::OptionalFieldsH235_ECpoint::m_xH235_ECpoint::m_yH235_IV16H235_IV16::PCLASSINFOH235_KeySignedMaterialH235_KeySignedMaterial::PCLASSINFOH235_KeySignedMaterial::OptionalFieldsH235_KeySignedMaterial::m_generalIdH235_KeySignedMaterial::m_mrandomH235_KeySignedMaterial::m_srandomH235_KeySignedMaterial::m_timeStampH235_KeySignedMaterial::m_encrptvalH235_ENCRYPTEDH235_TypedCertificate::PCLASSINFOH235_TypedCertificate::m_typeH235_TypedCertificate::m_certificateH235_Password::PCLASSINFOH235_H235CertificateSignatureH235_H235CertificateSignature::PCLASSINFOH235_H235CertificateSignature::OptionalFieldsH235_H235CertificateSignature::m_certificateH235_H235CertificateSignature::m_responseRandomH235_H235CertificateSignature::m_requesterRandomH235_H235CertificateSignature::m_signatureH235_SIGNEDH235_H235Key::PCLASSINFOH235_H235Key::ChoicesH235_H235Key::operator H235_KeyMaterial &H235_KeyMaterial &H235_H235Key::operator H235_ENCRYPTED &H235_ENCRYPTED &H235_H235Key::operator H235_SIGNED &H235_SIGNED &H235_H235Key::operator H235_V3KeySyncMaterial &H235_V3KeySyncMaterial &H235_ReturnSigH235_ReturnSig::PCLASSINFOH235_ReturnSig::OptionalFieldsH235_ReturnSig::m_generalIdH235_ReturnSig::m_responseRandomH235_ReturnSig::m_requestRandomH235_ReturnSig::m_certificateH235_TimeStamp::PCLASSINFOH235_KeySyncMaterialH235_KeySyncMaterial::PCLASSINFOH235_KeySyncMaterial::m_generalIDH235_KeySyncMaterial::m_keyMaterialH235_KeyMaterialH235_EncodedKeySignedMaterialH235_EncodedKeySignedMaterial::PCLASSINFOH235_EncodedKeySignedMaterial::DecodeSubTypeH235_KeySignedMaterial &objH235_EncodedKeySignedMaterial::EncodeSubTypeconst H235_KeySignedMaterial &objH235_ENCRYPTEDH235_ENCRYPTEDtypename ToBeEncryptedH235_ENCRYPTED::PCLASSINFOH235_ENCRYPTEDH235_ENCRYPTED::m_algorithmOIDH235_ENCRYPTED::m_paramSH235_ENCRYPTED::m_encryptedDataH235_ENCRYPTED::GetDataLengthH235_ENCRYPTED::DecodeH235_ENCRYPTED::EncodeH235_ENCRYPTED::PrintOnH235_ENCRYPTED::CompareH235_ENCRYPTED::CloneH235_CryptoTokenH235_CryptoToken::PCLASSINFOH235_CryptoToken::ChoicesH235_CryptoToken::operator H235_CryptoToken_cryptoEncryptedToken &H235_CryptoToken_cryptoEncryptedToken &H235_CryptoToken::operator H235_CryptoToken_cryptoSignedToken &H235_CryptoToken_cryptoSignedToken &H235_CryptoToken::operator H235_CryptoToken_cryptoHashedToken &H235_CryptoToken_cryptoHashedToken &H235_CryptoToken::operator H235_ENCRYPTED &H235_ENCRYPTED &H235_Params::PCLASSINFOH235_Params::OptionalFieldsH235_Params::m_ranIntH235_Params::m_iv8H235_IV8H235_Params::m_iv16H235_Params::m_ivH235_Params::m_clearSaltH235_EncodedGeneralTokenH235_EncodedGeneralToken::PCLASSINFOH235_EncodedGeneralToken::DecodeSubTypeH235_ClearToken &objH235_EncodedGeneralToken::EncodeSubTypeconst H235_ClearToken &objH235_Element::PCLASSINFOH235_Element::ChoicesH235_CryptoToken_cryptoSignedTokenH235_CryptoToken_cryptoSignedToken::PCLASSINFOH235_CryptoToken_cryptoSignedToken::m_tokenOIDH235_CryptoToken_cryptoSignedToken::m_tokenH235_SIGNEDH235_EncodedPwdCertTokenH235_EncodedPwdCertToken::PCLASSINFOH235_EncodedPwdCertToken::DecodeSubTypeH235_PwdCertToken &objH235_EncodedPwdCertToken::EncodeSubTypeconst H235_PwdCertToken &objH235_AuthenticationBESH235_AuthenticationBES::PCLASSINFOH235_AuthenticationBES::ChoicesH235_EncodedReturnSigH235_EncodedReturnSig::PCLASSINFOH235_EncodedReturnSig::DecodeSubTypeH235_ReturnSig &objH235_EncodedReturnSig::EncodeSubTypeconst H235_ReturnSig &objH235_EncodedKeySyncMaterialH235_EncodedKeySyncMaterial::PCLASSINFOH235_EncodedKeySyncMaterial::DecodeSubTypeH235_KeySyncMaterial &objH235_EncodedKeySyncMaterial::EncodeSubTypeconst H235_KeySyncMaterial &objH235_KeyMaterial::PCLASSINFOH235_ECKASDH::PCLASSINFOH235_ECKASDH::ChoicesH235_ECKASDH::operator H235_ECKASDH_eckasdhp &H235_ECKASDH_eckasdhp &H235_ECKASDH::operator H235_ECKASDH_eckasdh2 &H235_ECKASDH_eckasdh2 &H235_ArrayOf_ProfileElement::PCLASSINFOH235_V3KeySyncMaterialH235_V3KeySyncMaterial::PCLASSINFOH235_V3KeySyncMaterial::OptionalFieldsH235_V3KeySyncMaterial::m_generalIDH235_V3KeySyncMaterial::m_algorithmOIDH235_V3KeySyncMaterial::m_paramSH235_V3KeySyncMaterial::m_encryptedSessionKeyH235_V3KeySyncMaterial::m_encryptedSaltingKeyH235_V3KeySyncMaterial::m_clearSaltingKeyH235_V3KeySyncMaterial::m_paramSsaltH235_V3KeySyncMaterial::m_keyDerivationOIDH235_V3KeySyncMaterial::m_genericKeyMaterialH235_CryptoToken_cryptoHashedTokenH235_CryptoToken_cryptoHashedToken::PCLASSINFOH235_CryptoToken_cryptoHashedToken::m_tokenOIDH235_CryptoToken_cryptoHashedToken::m_hashedValsH235_CryptoToken_cryptoHashedToken::m_tokenH235_HASHEDH235_AuthenticationMechanism::PCLASSINFOH235_AuthenticationMechanism::ChoicesH235_AuthenticationMechanism::operator H235_NonStandardParameter &H235_NonStandardParameter &H235_AuthenticationMechanism::operator H235_AuthenticationBES &H235_AuthenticationBES &H235_IV8::PCLASSINFOH235_DHset::PCLASSINFOH235_DHset::m_halfkeyH235_DHset::m_modSizeH235_DHset::m_generatorH235_HASHEDH235_HASHEDtypename ToBeHashedH235_HASHED::PCLASSINFOH235_HASHEDH235_HASHED::m_algorithmOIDH235_HASHED::m_paramSH235_HASHED::m_hashH235_HASHED::GetDataLengthH235_HASHED::DecodeH235_HASHED::EncodeH235_HASHED::PrintOnH235_HASHED::CompareH235_HASHED::CloneH235_RandomVal::PCLASSINFOH235_ChallengeString::PCLASSINFOD:\openh323\include\h235auth.hH323SignalPDUPDECLARE_LISTH235AuthenticatorInfoH235AuthenticatorH235Authenticator::PCLASSINFOH235Authenticator::GetNameenum H235Authenticator::ValidationResultH235Authenticator::IsCapabilityH235Authenticator::SetCapabilityH225_ArrayOf_AuthenticationMechanism &mechansimsH235Authenticator::EnableBOOL enab = TRUE H235Authenticator::DisableH235Authenticator::GetRemoteIdH235Authenticator::SetRemoteIdH235Authenticator::GetLocalIdH235Authenticator::SetLocalIdH235Authenticator::GetPasswordH235Authenticator::SetPasswordconst PString &pwH235Authenticator::GetTimestampGracePeriodH235Authenticator::SetTimestampGracePeriodint graceH235Authenticator::ApplicationH235Authenticator::GetApplicationenum H235Authenticator::ApplicationH235Authenticator::enabledH235Authenticator::remoteIdH235Authenticator::localIdH235Authenticator::passwordH235Authenticator::sentRandomSequenceNumberH235Authenticator::lastRandomSequenceNumberH235Authenticator::lastTimestampH235Authenticator::timestampGracePeriodH235Authenticator::usageH235Authenticator::connectionH235Authenticator::mutexH235AuthenticatorInfo::PCLASSINFOH235AuthenticatorInfo::UserNameH235AuthenticatorInfo::PasswordH235AuthenticatorInfo::isHashedH235AuthenticatorInfo::CertificatePSSLCertificate *H235AuthCATH235AuthCAT::PCLASSINFOH225_ArrayOf_AuthenticationMechanism &mechansimH323TransactionPDUH235AuthProcedure1class H2351_AuthenticatorH235AuthSimpleMD5H235AuthSimpleMD5::PCLASSINFOH2351_AuthenticatorH2351_Authenticator::PCLASSINFOD:\openh323\include\h245.hH245_GenericCapabilityH245_GenericCapability::PCLASSINFOH245_GenericCapability::OptionalFieldsH245_GenericCapability::m_capabilityIdentifierH245_CapabilityIdentifierH245_GenericCapability::m_maxBitRateH245_GenericCapability::m_collapsingH245_ArrayOf_GenericParameterH245_GenericCapability::m_nonCollapsingH245_GenericCapability::m_nonCollapsingRawH245_GenericCapability::m_transportH245_RoundTripDelayRequestH245_RoundTripDelayRequest::PCLASSINFOH245_RoundTripDelayRequest::m_sequenceNumberH245_SequenceNumberH245_T84ProfileH245_T84Profile::PCLASSINFOH245_T84Profile::ChoicesH245_T84Profile::operator H245_T84Profile_t84Restricted &H245_T84Profile_t84Restricted &H245_ArrayOf_CommunicationModeTableEntryH245_ArrayOf_CommunicationModeTableEntry::PCLASSINFOH245_GenericMessageH245_GenericMessage::PCLASSINFOH245_GenericMessage::OptionalFieldsH245_GenericMessage::m_messageIdentifierH245_GenericMessage::m_subMessageIdentifierH245_GenericMessage::m_messageContentH245_IS11172VideoModeH245_IS11172VideoMode::PCLASSINFOH245_IS11172VideoMode::OptionalFieldsH245_IS11172VideoMode::m_constrainedBitstreamH245_IS11172VideoMode::m_videoBitRateH245_IS11172VideoMode::m_vbvBufferSizeH245_IS11172VideoMode::m_samplesPerLineH245_IS11172VideoMode::m_linesPerFrameH245_IS11172VideoMode::m_pictureRateH245_IS11172VideoMode::m_luminanceSampleRateH245_T38FaxUdpOptions_t38FaxUdpECH245_T38FaxUdpOptions_t38FaxUdpEC::PCLASSINFOH245_T38FaxUdpOptions_t38FaxUdpEC::ChoicesH245_RedundancyEncodingDTModeElementH245_RedundancyEncodingDTModeElement::PCLASSINFOH245_RedundancyEncodingDTModeElement::m_typeH245_RedundancyEncodingDTModeElement_typeH245_RedundancyEncodingModeH245_RedundancyEncodingMode::PCLASSINFOH245_RedundancyEncodingMode::OptionalFieldsH245_RedundancyEncodingMode::m_redundancyEncodingMethodH245_RedundancyEncodingMethodH245_RedundancyEncodingMode::m_secondaryEncodingH245_RedundancyEncodingMode_secondaryEncodingH245_UnicastAddress_iPSourceRouteAddress_routingH245_UnicastAddress_iPSourceRouteAddress_routing::PCLASSINFOH245_UnicastAddress_iPSourceRouteAddress_routing::ChoicesH245_NewATMVCCommand_aal_aal1H245_NewATMVCCommand_aal_aal1::PCLASSINFOH245_NewATMVCCommand_aal_aal1::m_clockRecoveryH245_NewATMVCCommand_aal_aal1_clockRecoveryH245_NewATMVCCommand_aal_aal1::m_errorCorrectionH245_NewATMVCCommand_aal_aal1_errorCorrectionH245_NewATMVCCommand_aal_aal1::m_structuredDataTransferH245_NewATMVCCommand_aal_aal1::m_partiallyFilledCellsH245_MultiplePayloadStreamModeH245_MultiplePayloadStreamMode::PCLASSINFOH245_MultiplePayloadStreamMode::m_elementsH245_ArrayOf_MultiplePayloadStreamElementModeH245_RefPictureSelection_enhancedReferencePicSelectH245_RefPictureSelection_enhancedReferencePicSelect::PCLASSINFOH245_RefPictureSelection_enhancedReferencePicSelect::OptionalFieldsH245_RefPictureSelection_enhancedReferencePicSelect::m_subPictureRemovalParametersH245_NewATMVCCommand_aal_aal5H245_NewATMVCCommand_aal_aal5::PCLASSINFOH245_NewATMVCCommand_aal_aal5::m_forwardMaximumSDUSizeH245_NewATMVCCommand_aal_aal5::m_backwardMaximumSDUSizeH245_FunctionNotUnderstoodH245_FunctionNotUnderstood::PCLASSINFOH245_FunctionNotUnderstood::ChoicesH245_FunctionNotUnderstood::operator H245_RequestMessage &H245_FunctionNotUnderstood::operator H245_ResponseMessage &H245_FunctionNotUnderstood::operator H245_CommandMessage &H245_ArrayOf_TerminalLabelH245_ArrayOf_TerminalLabel::PCLASSINFOH245_RTPH263VideoRedundancyFrameMapping_frameSequenceH245_RTPH263VideoRedundancyFrameMapping_frameSequence::PCLASSINFOH245_MaintenanceLoopOffCommandH245_MaintenanceLoopOffCommand::PCLASSINFOH245_H263VideoModeCombosH245_H263VideoModeCombos::PCLASSINFOH245_H263VideoModeCombos::m_h263VideoUncoupledModesH245_H263ModeComboFlagsH245_H263VideoModeCombos::m_h263VideoCoupledModesH245_ArrayOf_H263ModeComboFlagsH245_EndSessionCommandH245_EndSessionCommand::PCLASSINFOH245_EndSessionCommand::ChoicesH245_EndSessionCommand::operator H245_NonStandardParameter &H245_EndSessionCommand::operator H245_EndSessionCommand_gstnOptions &H245_EndSessionCommand_gstnOptions &H245_EndSessionCommand::operator H245_EndSessionCommand_isdnOptions &H245_EndSessionCommand_isdnOptions &H245_EndSessionCommand::operator H245_ArrayOf_GenericInformation &H245_ArrayOf_GenericInformation &H245_TerminalIDH245_TerminalID::PCLASSINFOH245_DepFECModeH245_DepFECMode::PCLASSINFOH245_DepFECMode::ChoicesH245_DepFECMode::operator H245_DepFECMode_rfc2733Mode &H245_DepFECMode_rfc2733Mode &H245_H261VideoMode_resolutionH245_H261VideoMode_resolution::PCLASSINFOH245_H261VideoMode_resolution::ChoicesH245_MultiplexEntryRejectionDescriptionsH245_MultiplexEntryRejectionDescriptions::PCLASSINFOH245_MultiplexEntryRejectionDescriptions::m_multiplexTableEntryNumberH245_MultiplexTableEntryNumberH245_MultiplexEntryRejectionDescriptions::m_causeH245_MultiplexEntryRejectionDescriptions_causeH245_G7231AnnexCModeH245_G7231AnnexCMode::PCLASSINFOH245_G7231AnnexCMode::m_maxAl_sduAudioFramesH245_G7231AnnexCMode::m_silenceSuppressionH245_G7231AnnexCMode::m_g723AnnexCAudioModeH245_G7231AnnexCMode_g723AnnexCAudioModeH245_MultimediaSystemControlMessageH245_MultimediaSystemControlMessage::PCLASSINFOH245_MultimediaSystemControlMessage::ChoicesH245_MultimediaSystemControlMessage::operator H245_RequestMessage &H245_MultimediaSystemControlMessage::operator H245_ResponseMessage &H245_MultimediaSystemControlMessage::operator H245_CommandMessage &H245_MultimediaSystemControlMessage::operator H245_IndicationMessage &H245_LogicalChannelRateReleaseH245_LogicalChannelRateRelease::PCLASSINFOH245_H2250LogicalChannelAckParametersH245_H2250LogicalChannelAckParameters::PCLASSINFOH245_H2250LogicalChannelAckParameters::OptionalFieldsH245_H2250LogicalChannelAckParameters::m_nonStandardH245_ArrayOf_NonStandardParameterH245_H2250LogicalChannelAckParameters::m_sessionIDH245_H2250LogicalChannelAckParameters::m_mediaChannelH245_TransportAddressH245_H2250LogicalChannelAckParameters::m_mediaControlChannelH245_H2250LogicalChannelAckParameters::m_dynamicRTPPayloadTypeH245_H2250LogicalChannelAckParameters::m_flowControlToZeroH245_H2250LogicalChannelAckParameters::m_portNumberH245_MultiplexFormatH245_MultiplexFormat::PCLASSINFOH245_MultiplexFormat::ChoicesH245_MultiplexFormat::operator H245_NonStandardParameter &H245_MultiplexFormat::operator H245_H222Capability &H245_H222Capability &H245_MultiplexFormat::operator H245_H223Capability &H245_H223Capability &H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters::PCLASSINFOH245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters::m_mpuHorizMBsH245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters::m_mpuVertMBsH245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters::m_mpuTotalNumberH245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters::GetDataLengthH245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters::DecodeH245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters::EncodeH245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters::PrintOnH245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters::CompareH245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters::CloneH245_MCLocationIndicationH245_MCLocationIndication::PCLASSINFOH245_MCLocationIndication::m_signalAddressH245_V76LogicalChannelParametersH245_V76LogicalChannelParameters::PCLASSINFOH245_V76LogicalChannelParameters::m_hdlcParametersH245_V76HDLCParametersH245_V76LogicalChannelParameters::m_suspendResumeH245_V76LogicalChannelParameters_suspendResumeH245_V76LogicalChannelParameters::m_uIHH245_V76LogicalChannelParameters::m_modeH245_V76LogicalChannelParameters_modeH245_V76LogicalChannelParameters::m_v75ParametersH245_V75ParametersH245_ConferenceResponse_sendThisSourceResponseH245_ConferenceResponse_sendThisSourceResponse::PCLASSINFOH245_ConferenceResponse_sendThisSourceResponse::ChoicesH245_DataMode_applicationH245_DataMode_application::PCLASSINFOH245_DataMode_application::ChoicesH245_DataMode_application::operator H245_NonStandardParameter &H245_DataMode_application::operator H245_DataProtocolCapability &H245_DataProtocolCapability &H245_DataMode_application::operator H245_DataMode_application_nlpid &H245_DataMode_application_nlpid &H245_DataMode_application::operator H245_DataMode_application_t38fax &H245_DataMode_application_t38fax &H245_DataMode_application::operator H245_GenericCapability &H245_CapabilityTableEntryH245_CapabilityTableEntry::PCLASSINFOH245_CapabilityTableEntry::OptionalFieldsH245_CapabilityTableEntry::m_capabilityTableEntryNumberH245_CapabilityTableEntryNumberH245_CapabilityTableEntry::m_capabilityH245_CapabilityH245_MultiplePayloadStreamCapabilityH245_MultiplePayloadStreamCapability::PCLASSINFOH245_MultiplePayloadStreamCapability::m_capabilitiesH245_ArrayOf_AlternativeCapabilitySetH245_ModeDescriptionH245_ModeDescription::PCLASSINFOH245_RequestAllTerminalIDsResponseH245_RequestAllTerminalIDsResponse::PCLASSINFOH245_RequestAllTerminalIDsResponse::m_terminalInformationH245_ArrayOf_TerminalInformationH245_GenericParameterH245_GenericParameter::PCLASSINFOH245_GenericParameter::OptionalFieldsH245_GenericParameter::m_parameterIdentifierH245_ParameterIdentifierH245_GenericParameter::m_parameterValueH245_ParameterValueH245_GenericParameter::m_supersedesH245_ArrayOf_ParameterIdentifierH245_CloseLogicalChannel_reasonH245_CloseLogicalChannel_reason::PCLASSINFOH245_CloseLogicalChannel_reason::ChoicesH245_RequestModeAckH245_RequestModeAck::PCLASSINFOH245_RequestModeAck::m_sequenceNumberH245_RequestModeAck::m_responseH245_RequestModeAck_responseH245_G7231AnnexCCapabilityH245_G7231AnnexCCapability::PCLASSINFOH245_G7231AnnexCCapability::OptionalFieldsH245_G7231AnnexCCapability::m_maxAl_sduAudioFramesH245_G7231AnnexCCapability::m_silenceSuppressionH245_G7231AnnexCCapability::m_g723AnnexCAudioModeH245_G7231AnnexCCapability_g723AnnexCAudioModeH245_H223AL3MParameters_headerFormatH245_H223AL3MParameters_headerFormat::PCLASSINFOH245_H223AL3MParameters_headerFormat::ChoicesH245_QOSDescriptorH245_QOSDescriptor::PCLASSINFOH245_QOSDescriptor::OptionalFieldsH245_QOSDescriptor::m_nonStandardDataH245_NonStandardParameterH245_QOSDescriptor::m_qosTypeH245_QOSTypeH245_QOSDescriptor::m_qosClassH245_QOSClassH245_ArrayOf_NonStandardParameter::PCLASSINFOH245_CapabilityIdentifier::PCLASSINFOH245_CapabilityIdentifier::ChoicesH245_CapabilityIdentifier::operator H245_NonStandardParameter &H245_RedundancyEncoding_rtpRedundancyEncodingH245_RedundancyEncoding_rtpRedundancyEncoding::PCLASSINFOH245_RedundancyEncoding_rtpRedundancyEncoding::OptionalFieldsH245_RedundancyEncoding_rtpRedundancyEncoding::m_primaryH245_RedundancyEncodingElementH245_RedundancyEncoding_rtpRedundancyEncoding::m_secondaryH245_ArrayOf_RedundancyEncodingElementH245_FECData_rfc2733H245_FECData_rfc2733::PCLASSINFOH245_FECData_rfc2733::OptionalFieldsH245_FECData_rfc2733::m_protectedPayloadTypeH245_FECData_rfc2733::m_fecSchemeH245_FECData_rfc2733::m_pktModeH245_FECData_rfc2733_pktModeH245_DepFECCapabilityH245_DepFECCapability::PCLASSINFOH245_DepFECCapability::ChoicesH245_DepFECCapability::operator H245_DepFECCapability_rfc2733 &H245_DepFECCapability_rfc2733 &H245_H2250LogicalChannelParameters_mediaPacketizationH245_H2250LogicalChannelParameters_mediaPacketization::PCLASSINFOH245_H2250LogicalChannelParameters_mediaPacketization::ChoicesH245_H2250LogicalChannelParameters_mediaPacketization::operator H245_RTPPayloadType &H245_RoundTripDelayResponseH245_RoundTripDelayResponse::PCLASSINFOH245_RoundTripDelayResponse::m_sequenceNumberH245_DepFECMode_rfc2733Mode_modeH245_DepFECMode_rfc2733Mode_mode::PCLASSINFOH245_DepFECMode_rfc2733Mode_mode::ChoicesH245_DepFECMode_rfc2733Mode_mode::operator H245_DepFECMode_rfc2733Mode_mode_separateStream &H245_DepFECMode_rfc2733Mode_mode_separateStream &H245_MultilinkResponse_callInformationH245_MultilinkResponse_callInformation::PCLASSINFOH245_MultilinkResponse_callInformation::m_dialingInformationH245_DialingInformationH245_MultilinkResponse_callInformation::m_callAssociationNumberH245_V76CapabilityH245_V76Capability::PCLASSINFOH245_V76Capability::m_suspendResumeCapabilitywAddressH245_V76Capability::m_suspendResumeCapabilitywoAddressH245_V76Capability::m_rejCapabilityH245_V76Capability::m_sREJCapabilityH245_V76Capability::m_mREJCapabilityH245_V76Capability::m_crc8bitCapabilityH245_V76Capability::m_crc16bitCapabilityH245_V76Capability::m_crc32bitCapabilityH245_V76Capability::m_uihCapabilityH245_V76Capability::m_numOfDLCSH245_V76Capability::m_twoOctetAddressFieldCapabilityH245_V76Capability::m_loopBackTestCapabilityH245_V76Capability::m_n401CapabilityH245_V76Capability::m_maxWindowSizeCapabilityH245_V76Capability::m_v75CapabilityH245_V75CapabilityH245_UnicastAddress_iPSourceRouteAddress_routeH245_UnicastAddress_iPSourceRouteAddress_route::PCLASSINFOH245_NewATMVCIndication_reverseParametersH245_NewATMVCIndication_reverseParameters::PCLASSINFOH245_NewATMVCIndication_reverseParameters::m_bitRateH245_NewATMVCIndication_reverseParameters::m_bitRateLockedToPCRClockH245_NewATMVCIndication_reverseParameters::m_bitRateLockedToNetworkClockH245_NewATMVCIndication_reverseParameters::m_multiplexH245_NewATMVCIndication_reverseParameters_multiplexH245_RefPictureSelection_additionalPictureMemoryH245_RefPictureSelection_additionalPictureMemory::PCLASSINFOH245_RefPictureSelection_additionalPictureMemory::OptionalFieldsH245_RefPictureSelection_additionalPictureMemory::m_sqcifAdditionalPictureMemoryH245_RefPictureSelection_additionalPictureMemory::m_qcifAdditionalPictureMemoryH245_RefPictureSelection_additionalPictureMemory::m_cifAdditionalPictureMemoryH245_RefPictureSelection_additionalPictureMemory::m_cif4AdditionalPictureMemoryH245_RefPictureSelection_additionalPictureMemory::m_cif16AdditionalPictureMemoryH245_RefPictureSelection_additionalPictureMemory::m_bigCpfAdditionalPictureMemoryH245_ArrayOf_VCCapabilityH245_ArrayOf_VCCapability::PCLASSINFOH245_MaintenanceLoopRequest_typeH245_MaintenanceLoopRequest_type::PCLASSINFOH245_MaintenanceLoopRequest_type::ChoicesH245_MaintenanceLoopRequest_type::operator H245_LogicalChannelNumber &H245_UnicastAddress_iPAddressH245_UnicastAddress_iPAddress::PCLASSINFOH245_UnicastAddress_iPAddress::m_networkH245_UnicastAddress_iPAddress::m_tsapIdentifierH245_NonStandardIdentifier_h221NonStandardH245_NonStandardIdentifier_h221NonStandard::PCLASSINFOH245_NonStandardIdentifier_h221NonStandard::m_t35CountryCodeH245_NonStandardIdentifier_h221NonStandard::m_t35ExtensionH245_NonStandardIdentifier_h221NonStandard::m_manufacturerCodeH245_MultilinkRequest_maximumHeaderInterval_requestTypeH245_MultilinkRequest_maximumHeaderInterval_requestType::PCLASSINFOH245_MultilinkRequest_maximumHeaderInterval_requestType::ChoicesH245_AudioCapabilityH245_AudioCapability::PCLASSINFOH245_AudioCapability::ChoicesH245_AudioCapability::operator H245_NonStandardParameter &H245_AudioCapability::operator H245_AudioCapability_g7231 &H245_AudioCapability_g7231 &H245_AudioCapability::operator H245_IS11172AudioCapability &H245_IS11172AudioCapability &H245_AudioCapability::operator H245_IS13818AudioCapability &H245_IS13818AudioCapability &H245_AudioCapability::operator H245_G7231AnnexCCapability &H245_G7231AnnexCCapability &H245_AudioCapability::operator H245_GSMAudioCapability &H245_GSMAudioCapability &H245_AudioCapability::operator H245_GenericCapability &H245_AudioCapability::operator H245_G729Extensions &H245_G729Extensions &H245_AudioCapability::operator H245_VBDCapability &H245_VBDCapability &H245_AudioCapability::operator H245_NoPTAudioTelephonyEventCapability &H245_NoPTAudioTelephonyEventCapability &H245_AudioCapability::operator H245_NoPTAudioToneCapability &H245_NoPTAudioToneCapability &H245_MultiplePayloadStreamElementModeH245_MultiplePayloadStreamElementMode::PCLASSINFOH245_MultiplePayloadStreamElementMode::m_typeH245_ModeElementTypeH245_FlowControlCommand_restrictionH245_FlowControlCommand_restriction::PCLASSINFOH245_FlowControlCommand_restriction::ChoicesH245_DepFECCapability_rfc2733H245_DepFECCapability_rfc2733::PCLASSINFOH245_DepFECCapability_rfc2733::m_redundancyEncodingH245_DepFECCapability_rfc2733::m_separateStreamH245_DepFECCapability_rfc2733_separateStreamH245_H223AL2MParameters_headerFECH245_H223AL2MParameters_headerFEC::PCLASSINFOH245_H223AL2MParameters_headerFEC::ChoicesH245_CustomPictureFormat_pixelAspectInformationH245_CustomPictureFormat_pixelAspectInformation::PCLASSINFOH245_CustomPictureFormat_pixelAspectInformation::ChoicesH245_CustomPictureFormat_pixelAspectInformation::operator H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode &H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode &H245_CustomPictureFormat_pixelAspectInformation::operator H245_CustomPictureFormat_pixelAspectInformation_extendedPAR &H245_CustomPictureFormat_pixelAspectInformation_extendedPAR &H245_ArrayOf_GenericParameter::PCLASSINFOH245_KeyProtectionMethodH245_KeyProtectionMethod::PCLASSINFOH245_KeyProtectionMethod::m_secureChannelH245_KeyProtectionMethod::m_sharedSecretH245_KeyProtectionMethod::m_certProtectedKeyH245_ArrayOf_MultiplexEntryDescriptorH245_ArrayOf_MultiplexEntryDescriptor::PCLASSINFOH245_FECData_rfc2733_pktMode_rfc2733sameportH245_FECData_rfc2733_pktMode_rfc2733sameport::PCLASSINFOH245_CommunicationModeRequestH245_CommunicationModeRequest::PCLASSINFOH245_H223LogicalChannelParametersH245_H223LogicalChannelParameters::PCLASSINFOH245_H223LogicalChannelParameters::m_adaptationLayerTypeH245_H223LogicalChannelParameters_adaptationLayerTypeH245_H223LogicalChannelParameters::m_segmentableFlagH245_MultilinkResponse_maximumHeaderIntervalH245_MultilinkResponse_maximumHeaderInterval::PCLASSINFOH245_MultilinkResponse_maximumHeaderInterval::m_currentIntervalH245_RefPictureSelection_videoBackChannelSendH245_RefPictureSelection_videoBackChannelSend::PCLASSINFOH245_RefPictureSelection_videoBackChannelSend::ChoicesH245_MultiplexElement_repeatCountH245_MultiplexElement_repeatCount::PCLASSINFOH245_MultiplexElement_repeatCount::ChoicesH245_NonStandardIdentifierH245_NonStandardIdentifier::PCLASSINFOH245_NonStandardIdentifier::ChoicesH245_NonStandardIdentifier::operator H245_NonStandardIdentifier_h221NonStandard &H245_NonStandardIdentifier_h221NonStandard &H245_FECModeH245_FECMode::PCLASSINFOH245_FECMode::OptionalFieldsH245_FECMode::m_protectedElementH245_FECMode::m_fecSchemeH245_FECMode::m_rfc2733FormatH245_FECMode_rfc2733FormatH245_VideoModeH245_VideoMode::PCLASSINFOH245_VideoMode::ChoicesH245_VideoMode::operator H245_NonStandardParameter &H245_VideoMode::operator H245_H261VideoMode &H245_H261VideoMode &H245_VideoMode::operator H245_H262VideoMode &H245_H262VideoMode &H245_VideoMode::operator H245_H263VideoMode &H245_H263VideoMode &H245_VideoMode::operator H245_IS11172VideoMode &H245_IS11172VideoMode &H245_VideoMode::operator H245_GenericCapability &H245_H235SecurityCapabilityH245_H235SecurityCapability::PCLASSINFOH245_H235SecurityCapability::m_encryptionAuthenticationAndIntegrityH245_EncryptionAuthenticationAndIntegrityH245_H235SecurityCapability::m_mediaCapabilityH245_QOSCapabilityH245_QOSCapability::PCLASSINFOH245_QOSCapability::OptionalFieldsH245_QOSCapability::m_nonStandardDataH245_QOSCapability::m_rsvpParametersH245_RSVPParametersH245_QOSCapability::m_atmParametersH245_ATMParametersH245_QOSCapability::m_localQoSH245_QOSCapability::m_genericTransportParametersH245_GenericTransportParametersH245_QOSCapability::m_servicePriorityH245_ServicePriorityH245_QOSCapability::m_authorizationParameterH245_AuthorizationParametersH245_QOSCapability::m_qosDescriptorH245_QOSCapability::m_dscpValueH245_MulticastAddress_iPAddressH245_MulticastAddress_iPAddress::PCLASSINFOH245_MulticastAddress_iPAddress::m_networkH245_MulticastAddress_iPAddress::m_tsapIdentifierH245_ServicePriority::PCLASSINFOH245_ServicePriority::OptionalFieldsH245_ServicePriority::m_nonStandardDataH245_ServicePriority::m_servicePrioritySignalledH245_ServicePriority::m_servicePriorityValueH245_ServicePriorityValueH245_EnhancementOptionsH245_EnhancementOptions::PCLASSINFOH245_EnhancementOptions::OptionalFieldsH245_EnhancementOptions::m_sqcifMPIH245_EnhancementOptions::m_qcifMPIH245_EnhancementOptions::m_cifMPIH245_EnhancementOptions::m_cif4MPIH245_EnhancementOptions::m_cif16MPIH245_EnhancementOptions::m_maxBitRateH245_EnhancementOptions::m_unrestrictedVectorH245_EnhancementOptions::m_arithmeticCodingH245_EnhancementOptions::m_temporalSpatialTradeOffCapabilityH245_EnhancementOptions::m_slowSqcifMPIH245_EnhancementOptions::m_slowQcifMPIH245_EnhancementOptions::m_slowCifMPIH245_EnhancementOptions::m_slowCif4MPIH245_EnhancementOptions::m_slowCif16MPIH245_EnhancementOptions::m_errorCompensationH245_EnhancementOptions::m_h263OptionsH245_H263OptionsH245_NetworkAccessParameters_networkAddressH245_NetworkAccessParameters_networkAddress::PCLASSINFOH245_NetworkAccessParameters_networkAddress::ChoicesH245_NetworkAccessParameters_networkAddress::operator H245_Q2931Address &H245_NetworkAccessParameters_networkAddress::operator H245_TransportAddress &H245_MaintenanceLoopReject_typeH245_MaintenanceLoopReject_type::PCLASSINFOH245_MaintenanceLoopReject_type::ChoicesH245_MaintenanceLoopReject_type::operator H245_LogicalChannelNumber &H245_ArrayOf_EscrowDataH245_ArrayOf_EscrowData::PCLASSINFOH245_ArrayOf_ModeDescriptionH245_ArrayOf_ModeDescription::PCLASSINFOH245_DepFECData_rfc2733_mode_separateStream_samePortH245_DepFECData_rfc2733_mode_separateStream_samePort::PCLASSINFOH245_DepFECData_rfc2733_mode_separateStream_samePort::m_protectedPayloadTypeH245_DialingInformationNetworkTypeH245_DialingInformationNetworkType::PCLASSINFOH245_DialingInformationNetworkType::ChoicesH245_DialingInformationNetworkType::operator H245_NonStandardMessage &H245_NonStandardMessage &H245_H262VideoModeH245_H262VideoMode::PCLASSINFOH245_H262VideoMode::OptionalFieldsH245_H262VideoMode::m_profileAndLevelH245_H262VideoMode_profileAndLevelH245_H262VideoMode::m_videoBitRateH245_H262VideoMode::m_vbvBufferSizeH245_H262VideoMode::m_samplesPerLineH245_H262VideoMode::m_linesPerFrameH245_H262VideoMode::m_framesPerSecondH245_H262VideoMode::m_luminanceSampleRateH245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCount::PCLASSINFOH245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCount::ChoicesH245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCount::CreateObjectH245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCount::CloneH245_TerminalCapabilitySetReleaseH245_TerminalCapabilitySetRelease::PCLASSINFOH245_TerminalCapabilitySetRelease::OptionalFieldsH245_TerminalCapabilitySetRelease::m_genericInformationH245_ArrayOf_GenericInformationH245_RequestModeH245_RequestMode::PCLASSINFOH245_RequestMode::m_sequenceNumberH245_RequestMode::m_requestedModesH245_RequestModeRejectH245_RequestModeReject::PCLASSINFOH245_RequestModeReject::m_sequenceNumberH245_RequestModeReject::m_causeH245_RequestModeReject_causeH245_T38FaxUdpOptionsH245_T38FaxUdpOptions::PCLASSINFOH245_T38FaxUdpOptions::OptionalFieldsH245_T38FaxUdpOptions::m_t38FaxMaxBufferH245_T38FaxUdpOptions::m_t38FaxMaxDatagramH245_T38FaxUdpOptions::m_t38FaxUdpECH245_MiscellaneousIndication_typeH245_MiscellaneousIndication_type::PCLASSINFOH245_MiscellaneousIndication_type::ChoicesH245_MiscellaneousIndication_type::operator H245_MiscellaneousIndication_type_videoNotDecodedMBs &H245_MiscellaneousIndication_type_videoNotDecodedMBs &H245_MiscellaneousIndication_type::operator H245_TransportCapability &H245_TransportCapability &H245_CustomPictureFormat_pixelAspectInformation_extendedPARH245_CustomPictureFormat_pixelAspectInformation_extendedPAR::PCLASSINFOH245_SendTerminalCapabilitySetH245_SendTerminalCapabilitySet::PCLASSINFOH245_SendTerminalCapabilitySet::ChoicesH245_SendTerminalCapabilitySet::operator H245_SendTerminalCapabilitySet_specificRequest &H245_SendTerminalCapabilitySet_specificRequest &H245_H235Media_mediaTypeH245_H235Media_mediaType::PCLASSINFOH245_H235Media_mediaType::ChoicesH245_H235Media_mediaType::operator H245_NonStandardParameter &H245_H235Media_mediaType::operator H245_VideoCapability &H245_H235Media_mediaType::operator H245_AudioCapability &H245_AudioCapability &H245_H235Media_mediaType::operator H245_DataApplicationCapability &H245_H235Media_mediaType::operator H245_RedundancyEncoding &H245_RedundancyEncoding &H245_H235Media_mediaType::operator H245_MultiplePayloadStream &H245_MultiplePayloadStream &H245_H235Media_mediaType::operator H245_DepFECData &H245_DepFECData &H245_H235Media_mediaType::operator H245_FECData &H245_FECData &H245_MultiplePayloadStreamElementH245_MultiplePayloadStreamElement::PCLASSINFOH245_MultiplePayloadStreamElement::OptionalFieldsH245_MultiplePayloadStreamElement::m_dataTypeH245_DataTypeH245_MultiplePayloadStreamElement::m_payloadTypeH245_DataProtocolCapability::PCLASSINFOH245_DataProtocolCapability::ChoicesH245_DataProtocolCapability::operator H245_NonStandardParameter &H245_DataProtocolCapability::operator H245_DataProtocolCapability_v76wCompression &H245_DataProtocolCapability_v76wCompression &H245_ResponseMessageH245_ResponseMessage::PCLASSINFOH245_ResponseMessage::ChoicesH245_ResponseMessage::operator H245_NonStandardMessage &H245_ResponseMessage::operator H245_MasterSlaveDeterminationAck &H245_ResponseMessage::operator H245_MasterSlaveDeterminationReject &H245_ResponseMessage::operator H245_TerminalCapabilitySetAck &H245_ResponseMessage::operator H245_TerminalCapabilitySetReject &H245_ResponseMessage::operator H245_OpenLogicalChannelAck &H245_ResponseMessage::operator H245_OpenLogicalChannelReject &H245_ResponseMessage::operator H245_CloseLogicalChannelAck &H245_ResponseMessage::operator H245_RequestChannelCloseAck &H245_ResponseMessage::operator H245_RequestChannelCloseReject &H245_ResponseMessage::operator H245_MultiplexEntrySendAck &H245_MultiplexEntrySendAck &H245_ResponseMessage::operator H245_MultiplexEntrySendReject &H245_MultiplexEntrySendReject &H245_ResponseMessage::operator H245_RequestMultiplexEntryAck &H245_RequestMultiplexEntryAck &H245_ResponseMessage::operator H245_RequestMultiplexEntryReject &H245_RequestMultiplexEntryReject &H245_ResponseMessage::operator H245_RequestModeAck &H245_ResponseMessage::operator H245_RequestModeReject &H245_ResponseMessage::operator H245_RoundTripDelayResponse &H245_ResponseMessage::operator H245_MaintenanceLoopAck &H245_MaintenanceLoopAck &H245_ResponseMessage::operator H245_MaintenanceLoopReject &H245_MaintenanceLoopReject &H245_ResponseMessage::operator H245_CommunicationModeResponse &H245_CommunicationModeResponse &H245_ResponseMessage::operator H245_ConferenceResponse &H245_ConferenceResponse &H245_ResponseMessage::operator H245_MultilinkResponse &H245_MultilinkResponse &H245_ResponseMessage::operator H245_LogicalChannelRateAcknowledge &H245_LogicalChannelRateAcknowledge &H245_ResponseMessage::operator H245_LogicalChannelRateReject &H245_LogicalChannelRateReject &H245_ResponseMessage::operator H245_GenericMessage &H245_GenericMessage &H245_IS11172AudioMode_audioSamplingH245_IS11172AudioMode_audioSampling::PCLASSINFOH245_IS11172AudioMode_audioSampling::ChoicesH245_UserInputIndicationH245_UserInputIndication::PCLASSINFOH245_UserInputIndication::ChoicesH245_UserInputIndication::operator H245_NonStandardParameter &H245_UserInputIndication::operator H245_UserInputIndication_userInputSupportIndication &H245_UserInputIndication_userInputSupportIndication &H245_UserInputIndication::operator H245_UserInputIndication_signal &H245_UserInputIndication_signal &H245_UserInputIndication::operator H245_UserInputIndication_signalUpdate &H245_UserInputIndication_signalUpdate &H245_UserInputIndication::operator H245_UserInputIndication_extendedAlphanumeric &H245_UserInputIndication_extendedAlphanumeric &H245_UserInputIndication::operator H245_UserInputIndication_encryptedAlphanumeric &H245_UserInputIndication_encryptedAlphanumeric &H245_UserInputIndication::operator H245_ArrayOf_GenericInformation &H245_TerminalNumberH245_TerminalNumber::PCLASSINFOH245_FlowControlIndication_restrictionH245_FlowControlIndication_restriction::PCLASSINFOH245_FlowControlIndication_restriction::ChoicesH245_MaxRedundancyH245_MaxRedundancy::PCLASSINFOH245_V76HDLCParameters::PCLASSINFOH245_V76HDLCParameters::m_crcLengthH245_CRCLengthH245_V76HDLCParameters::m_n401H245_V76HDLCParameters::m_loopbackTestProcedureH245_ArrayOf_RedundancyEncodingElement::PCLASSINFOH245_ParameterValue::PCLASSINFOH245_ParameterValue::ChoicesH245_ParameterValue::operator H245_ArrayOf_GenericParameter &H245_ArrayOf_GenericParameter &H245_NewATMVCIndicationH245_NewATMVCIndication::PCLASSINFOH245_NewATMVCIndication::OptionalFieldsH245_NewATMVCIndication::m_resourceIDH245_NewATMVCIndication::m_bitRateH245_NewATMVCIndication::m_bitRateLockedToPCRClockH245_NewATMVCIndication::m_bitRateLockedToNetworkClockH245_NewATMVCIndication::m_aalH245_NewATMVCIndication_aalH245_NewATMVCIndication::m_multiplexH245_NewATMVCIndication_multiplexH245_NewATMVCIndication::m_reverseParametersH245_MediaPacketizationCapabilityH245_MediaPacketizationCapability::PCLASSINFOH245_MediaPacketizationCapability::OptionalFieldsH245_MediaPacketizationCapability::m_h261aVideoPacketizationH245_MediaPacketizationCapability::m_rtpPayloadTypeH245_ArrayOf_RTPPayloadTypeH245_RequestChannelClose_reasonH245_RequestChannelClose_reason::PCLASSINFOH245_RequestChannelClose_reason::ChoicesH245_H262VideoMode_profileAndLevel::PCLASSINFOH245_H262VideoMode_profileAndLevel::ChoicesH245_TerminalCapabilitySetH245_TerminalCapabilitySet::PCLASSINFOH245_TerminalCapabilitySet::OptionalFieldsH245_TerminalCapabilitySet::m_sequenceNumberH245_TerminalCapabilitySet::m_protocolIdentifierH245_TerminalCapabilitySet::m_multiplexCapabilityH245_MultiplexCapabilityH245_TerminalCapabilitySet::m_capabilityTableH245_ArrayOf_CapabilityTableEntryH245_TerminalCapabilitySet::m_capabilityDescriptorsH245_ArrayOf_CapabilityDescriptorH245_TerminalCapabilitySet::m_genericInformationH245_H263ModeComboFlags::PCLASSINFOH245_H263ModeComboFlags::OptionalFieldsH245_H263ModeComboFlags::m_unrestrictedVectorH245_H263ModeComboFlags::m_arithmeticCodingH245_H263ModeComboFlags::m_advancedPredictionH245_H263ModeComboFlags::m_pbFramesH245_H263ModeComboFlags::m_advancedIntraCodingModeH245_H263ModeComboFlags::m_deblockingFilterModeH245_H263ModeComboFlags::m_unlimitedMotionVectorsH245_H263ModeComboFlags::m_slicesInOrder_NonRectH245_H263ModeComboFlags::m_slicesInOrder_RectH245_H263ModeComboFlags::m_slicesNoOrder_NonRectH245_H263ModeComboFlags::m_slicesNoOrder_RectH245_H263ModeComboFlags::m_improvedPBFramesModeH245_H263ModeComboFlags::m_referencePicSelectH245_H263ModeComboFlags::m_dynamicPictureResizingByFourH245_H263ModeComboFlags::m_dynamicPictureResizingSixteenthPelH245_H263ModeComboFlags::m_dynamicWarpingHalfPelH245_H263ModeComboFlags::m_dynamicWarpingSixteenthPelH245_H263ModeComboFlags::m_reducedResolutionUpdateH245_H263ModeComboFlags::m_independentSegmentDecodingH245_H263ModeComboFlags::m_alternateInterVLCModeH245_H263ModeComboFlags::m_modifiedQuantizationModeH245_H263ModeComboFlags::m_enhancedReferencePicSelectH245_H263ModeComboFlags::m_h263Version3OptionsH245_H263Version3OptionsH245_MultilinkResponse_removeConnectionH245_MultilinkResponse_removeConnection::PCLASSINFOH245_MultilinkResponse_removeConnection::m_connectionIdentifierH245_ConnectionIdentifierH245_RedundancyEncodingH245_RedundancyEncoding::PCLASSINFOH245_RedundancyEncoding::OptionalFieldsH245_RedundancyEncoding::m_redundancyEncodingMethodH245_RedundancyEncoding::m_secondaryEncodingH245_RedundancyEncoding::m_rtpRedundancyEncodingH245_RequestChannelCloseReject_causeH245_RequestChannelCloseReject_cause::PCLASSINFOH245_RequestChannelCloseReject_cause::ChoicesH245_DepFECMode_rfc2733ModeH245_DepFECMode_rfc2733Mode::PCLASSINFOH245_DepFECMode_rfc2733Mode::m_modeH245_IntegrityCapabilityH245_IntegrityCapability::PCLASSINFOH245_IntegrityCapability::OptionalFieldsH245_IntegrityCapability::m_nonStandardH245_TransportAddress::PCLASSINFOH245_TransportAddress::ChoicesH245_TransportAddress::operator H245_UnicastAddress &H245_UnicastAddress &H245_TransportAddress::operator H245_MulticastAddress &H245_MulticastAddress &H245_H223Capability_h223MultiplexTableCapability_enhancedH245_H223Capability_h223MultiplexTableCapability_enhanced::PCLASSINFOH245_H223Capability_h223MultiplexTableCapability_enhanced::m_maximumNestingDepthH245_H223Capability_h223MultiplexTableCapability_enhanced::m_maximumElementListSizeH245_H223Capability_h223MultiplexTableCapability_enhanced::m_maximumSubElementListSizeH245_CompressionTypeH245_CompressionType::PCLASSINFOH245_CompressionType::ChoicesH245_CompressionType::operator H245_V42bis &H245_V42bis &H245_MediaDistributionCapabilityH245_MediaDistributionCapability::PCLASSINFOH245_MediaDistributionCapability::OptionalFieldsH245_MediaDistributionCapability::m_centralizedControlH245_MediaDistributionCapability::m_distributedControlH245_MediaDistributionCapability::m_centralizedAudioH245_MediaDistributionCapability::m_distributedAudioH245_MediaDistributionCapability::m_centralizedVideoH245_MediaDistributionCapability::m_distributedVideoH245_MediaDistributionCapability::m_centralizedDataH245_ArrayOf_DataApplicationCapabilityH245_MediaDistributionCapability::m_distributedDataH245_RemoteMCResponse_rejectH245_RemoteMCResponse_reject::PCLASSINFOH245_RemoteMCResponse_reject::ChoicesH245_DialingInformation::PCLASSINFOH245_DialingInformation::ChoicesH245_DialingInformation::operator H245_NonStandardMessage &H245_DialingInformation::operator H245_ArrayOf_DialingInformationNumber &H245_ArrayOf_DialingInformationNumber &H245_ArrayOf_RedundancyEncodingDTModeElementH245_ArrayOf_RedundancyEncodingDTModeElement::PCLASSINFOH245_CommunicationModeResponseH245_CommunicationModeResponse::PCLASSINFOH245_CommunicationModeResponse::ChoicesH245_CommunicationModeResponse::operator H245_ArrayOf_CommunicationModeTableEntry &H245_ArrayOf_CommunicationModeTableEntry &H245_RedundancyEncodingElement::PCLASSINFOH245_RedundancyEncodingElement::OptionalFieldsH245_RedundancyEncodingElement::m_dataTypeH245_RedundancyEncodingElement::m_payloadTypeH245_FlowControlCommand_scopeH245_FlowControlCommand_scope::PCLASSINFOH245_FlowControlCommand_scope::ChoicesH245_FlowControlCommand_scope::operator H245_LogicalChannelNumber &H245_V76LogicalChannelParameters_mode_eRMH245_V76LogicalChannelParameters_mode_eRM::PCLASSINFOH245_V76LogicalChannelParameters_mode_eRM::m_windowSizeH245_V76LogicalChannelParameters_mode_eRM::m_recoveryH245_V76LogicalChannelParameters_mode_eRM_recoveryH245_FECMode_rfc2733Format::PCLASSINFOH245_FECMode_rfc2733Format::ChoicesH245_FECMode_rfc2733Format::operator H245_MaxRedundancy &H245_LogicalChannelRateRejectReasonH245_LogicalChannelRateRejectReason::PCLASSINFOH245_LogicalChannelRateRejectReason::ChoicesH245_LogicalChannelNumberH245_LogicalChannelNumber::PCLASSINFOH245_IS13818AudioMode_audioLayerH245_IS13818AudioMode_audioLayer::PCLASSINFOH245_IS13818AudioMode_audioLayer::ChoicesH245_UserInputIndication_signalH245_UserInputIndication_signal::PCLASSINFOH245_UserInputIndication_signal::OptionalFieldsH245_UserInputIndication_signal::m_signalTypeH245_UserInputIndication_signal::m_durationH245_UserInputIndication_signal::m_rtpH245_UserInputIndication_signal_rtpH245_UserInputIndication_signal::m_rtpPayloadIndicationH245_UserInputIndication_signal::m_paramSH245_ParamsH245_UserInputIndication_signal::m_encryptedSignalTypeH245_UserInputIndication_signal::m_algorithmOIDH245_RequestMultiplexEntryH245_RequestMultiplexEntry::PCLASSINFOH245_RequestMultiplexEntry::m_entryNumbersH245_ArrayOf_MultiplexTableEntryNumberH245_RTPH263VideoRedundancyEncoding_frameToThreadMappingH245_RTPH263VideoRedundancyEncoding_frameToThreadMapping::PCLASSINFOH245_RTPH263VideoRedundancyEncoding_frameToThreadMapping::ChoicesH245_RTPH263VideoRedundancyEncoding_frameToThreadMapping::operator H245_ArrayOf_RTPH263VideoRedundancyFrameMapping &H245_ArrayOf_RTPH263VideoRedundancyFrameMapping &H245_DepFECDataH245_DepFECData::PCLASSINFOH245_DepFECData::ChoicesH245_DepFECData::operator H245_DepFECData_rfc2733 &H245_DepFECData_rfc2733 &H245_ConferenceRequestH245_ConferenceRequest::PCLASSINFOH245_ConferenceRequest::ChoicesH245_ConferenceRequest::operator H245_TerminalLabel &H245_ConferenceRequest::operator H245_ConferenceRequest_requestTerminalCertificate &H245_ConferenceRequest_requestTerminalCertificate &H245_ConferenceRequest::operator H245_LogicalChannelNumber &H245_ConferenceRequest::operator H245_RemoteMCRequest &H245_RemoteMCRequest &H245_ConferenceResponse_makeTerminalBroadcasterResponseH245_ConferenceResponse_makeTerminalBroadcasterResponse::PCLASSINFOH245_ConferenceResponse_makeTerminalBroadcasterResponse::ChoicesH245_H263VideoModeH245_H263VideoMode::PCLASSINFOH245_H263VideoMode::OptionalFieldsH245_H263VideoMode::m_resolutionH245_H263VideoMode_resolutionH245_H263VideoMode::m_bitRateH245_H263VideoMode::m_unrestrictedVectorH245_H263VideoMode::m_arithmeticCodingH245_H263VideoMode::m_advancedPredictionH245_H263VideoMode::m_pbFramesH245_H263VideoMode::m_errorCompensationH245_H263VideoMode::m_enhancementLayerInfoH245_EnhancementLayerInfoH245_H263VideoMode::m_h263OptionsH245_OpenLogicalChannelReject_causeH245_OpenLogicalChannelReject_cause::PCLASSINFOH245_OpenLogicalChannelReject_cause::ChoicesH245_TerminalCapabilitySetAckH245_TerminalCapabilitySetAck::PCLASSINFOH245_TerminalCapabilitySetAck::OptionalFieldsH245_TerminalCapabilitySetAck::m_sequenceNumberH245_TerminalCapabilitySetAck::m_genericInformationH245_VideoIndicateComposeH245_VideoIndicateCompose::PCLASSINFOH245_VideoIndicateCompose::m_compositionNumberH245_H223AL1MParametersH245_H223AL1MParameters::PCLASSINFOH245_H223AL1MParameters::OptionalFieldsH245_H223AL1MParameters::m_transferModeH245_H223AL1MParameters_transferModeH245_H223AL1MParameters::m_headerFECH245_H223AL1MParameters_headerFECH245_H223AL1MParameters::m_crcLengthH245_H223AL1MParameters_crcLengthH245_H223AL1MParameters::m_rcpcCodeRateH245_H223AL1MParameters::m_arqTypeH245_H223AL1MParameters_arqTypeH245_H223AL1MParameters::m_alpduInterleavingH245_H223AL1MParameters::m_alsduSplittingH245_H223AL1MParameters::m_rsCodeCorrectionH245_MultiplexEntryDescriptorH245_MultiplexEntryDescriptor::PCLASSINFOH245_MultiplexEntryDescriptor::OptionalFieldsH245_MultiplexEntryDescriptor::m_multiplexTableEntryNumberH245_MultiplexEntryDescriptor::m_elementListH245_ArrayOf_MultiplexElementH245_CommunicationModeTableEntry_dataTypeH245_CommunicationModeTableEntry_dataType::PCLASSINFOH245_CommunicationModeTableEntry_dataType::ChoicesH245_CommunicationModeTableEntry_dataType::operator H245_VideoCapability &H245_CommunicationModeTableEntry_dataType::operator H245_AudioCapability &H245_CommunicationModeTableEntry_dataType::operator H245_DataApplicationCapability &H245_MiscellaneousCommand_type_encryptionUpdateAckH245_MiscellaneousCommand_type_encryptionUpdateAck::PCLASSINFOH245_MiscellaneousCommand_type_encryptionUpdateAck::m_synchFlagH245_RequestMultiplexEntryRejectH245_RequestMultiplexEntryReject::PCLASSINFOH245_RequestMultiplexEntryReject::m_entryNumbersH245_RequestMultiplexEntryReject::m_rejectionDescriptionsH245_ArrayOf_RequestMultiplexEntryRejectionDescriptionsH245_ArrayOf_EnhancementOptionsH245_ArrayOf_EnhancementOptions::PCLASSINFOH245_FECDataH245_FECData::PCLASSINFOH245_FECData::ChoicesH245_FECData::operator H245_FECData_rfc2733 &H245_FECData_rfc2733 &H245_AlternativeCapabilitySetH245_AlternativeCapabilitySet::PCLASSINFOH245_LogicalChannelRateAcknowledgeH245_LogicalChannelRateAcknowledge::PCLASSINFOH245_LogicalChannelRateAcknowledge::m_sequenceNumberH245_LogicalChannelRateAcknowledge::m_logicalChannelNumberH245_LogicalChannelRateAcknowledge::m_maximumBitRateH245_MaximumBitRateH245_RequestMultiplexEntryRejectionDescriptions_causeH245_RequestMultiplexEntryRejectionDescriptions_cause::PCLASSINFOH245_RequestMultiplexEntryRejectionDescriptions_cause::ChoicesH245_CustomPictureFormat_mPI_customPCFH245_CustomPictureFormat_mPI_customPCF::PCLASSINFOH245_H223AL1MParameters_headerFEC::PCLASSINFOH245_H223AL1MParameters_headerFEC::ChoicesH245_MultilinkRequest_maximumHeaderIntervalH245_MultilinkRequest_maximumHeaderInterval::PCLASSINFOH245_MultilinkRequest_maximumHeaderInterval::m_requestTypeH245_ArrayOf_TerminalInformation::PCLASSINFOH245_UnicastAddressH245_UnicastAddress::PCLASSINFOH245_UnicastAddress::ChoicesH245_UnicastAddress::operator H245_UnicastAddress_iPAddress &H245_UnicastAddress_iPAddress &H245_UnicastAddress::operator H245_UnicastAddress_iPXAddress &H245_UnicastAddress_iPXAddress &H245_UnicastAddress::operator H245_UnicastAddress_iP6Address &H245_UnicastAddress_iP6Address &H245_UnicastAddress::operator H245_UnicastAddress_iPSourceRouteAddress &H245_UnicastAddress_iPSourceRouteAddress &H245_UnicastAddress::operator H245_NonStandardParameter &H245_ConferenceResponse_passwordResponseH245_ConferenceResponse_passwordResponse::PCLASSINFOH245_ConferenceResponse_passwordResponse::m_terminalLabelH245_TerminalLabelH245_ConferenceResponse_passwordResponse::m_passwordH245_PasswordH245_RTPPayloadTypeH245_RTPPayloadType::PCLASSINFOH245_RTPPayloadType::OptionalFieldsH245_RTPPayloadType::m_payloadDescriptorH245_RTPPayloadType_payloadDescriptorH245_RTPPayloadType::m_payloadTypeH245_RTPH263VideoRedundancyEncodingH245_RTPH263VideoRedundancyEncoding::PCLASSINFOH245_RTPH263VideoRedundancyEncoding::OptionalFieldsH245_RTPH263VideoRedundancyEncoding::m_numberOfThreadsH245_RTPH263VideoRedundancyEncoding::m_framesBetweenSyncPointsH245_RTPH263VideoRedundancyEncoding::m_frameToThreadMappingH245_RTPH263VideoRedundancyEncoding::m_containedThreadsH245_RTPH263VideoRedundancyEncoding_containedThreadsH245_MobileMultilinkReconfigurationIndicationH245_MobileMultilinkReconfigurationIndication::PCLASSINFOH245_MobileMultilinkReconfigurationIndication::m_sampleSizeH245_MobileMultilinkReconfigurationIndication::m_samplesPerFrameH245_MultilinkRequest_removeConnectionH245_MultilinkRequest_removeConnection::PCLASSINFOH245_MultilinkRequest_removeConnection::m_connectionIdentifierH245_H223AL1MParameters_transferMode::PCLASSINFOH245_H223AL1MParameters_transferMode::ChoicesH245_Params::PCLASSINFOH245_Params::OptionalFieldsH245_Params::m_iv8H245_IV8H245_Params::m_iv16H245_IV16H245_Params::m_ivH245_RedundancyEncodingMethod::PCLASSINFOH245_RedundancyEncodingMethod::ChoicesH245_RedundancyEncodingMethod::operator H245_NonStandardParameter &H245_RedundancyEncodingMethod::operator H245_RTPH263VideoRedundancyEncoding &H245_RTPH263VideoRedundancyEncoding &H245_ArrayOf_BEnhancementParametersH245_ArrayOf_BEnhancementParameters::PCLASSINFOH245_TerminalCapabilitySetRejectH245_TerminalCapabilitySetReject::PCLASSINFOH245_TerminalCapabilitySetReject::OptionalFieldsH245_TerminalCapabilitySetReject::m_sequenceNumberH245_TerminalCapabilitySetReject::m_causeH245_TerminalCapabilitySetReject_causeH245_TerminalCapabilitySetReject::m_genericInformationH245_ArrayOf_DataApplicationCapability::PCLASSINFOH245_NewATMVCCommand_reverseParametersH245_NewATMVCCommand_reverseParameters::PCLASSINFOH245_NewATMVCCommand_reverseParameters::m_bitRateH245_NewATMVCCommand_reverseParameters::m_bitRateLockedToPCRClockH245_NewATMVCCommand_reverseParameters::m_bitRateLockedToNetworkClockH245_NewATMVCCommand_reverseParameters::m_multiplexH245_NewATMVCCommand_reverseParameters_multiplexH245_MultiplePayloadStreamH245_MultiplePayloadStream::PCLASSINFOH245_MultiplePayloadStream::m_elementsH245_ArrayOf_MultiplePayloadStreamElementH245_MultilinkIndication_crcDesiredH245_MultilinkIndication_crcDesired::PCLASSINFOH245_NewATMVCIndication_aal_aal5H245_NewATMVCIndication_aal_aal5::PCLASSINFOH245_NewATMVCIndication_aal_aal5::m_forwardMaximumSDUSizeH245_NewATMVCIndication_aal_aal5::m_backwardMaximumSDUSizeH245_MultiplexElement_typeH245_MultiplexElement_type::PCLASSINFOH245_MultiplexElement_type::ChoicesH245_MultiplexElement_type::operator H245_ArrayOf_MultiplexElement &H245_ArrayOf_MultiplexElement &H245_NewATMVCIndication_aal_aal1H245_NewATMVCIndication_aal_aal1::PCLASSINFOH245_NewATMVCIndication_aal_aal1::m_clockRecoveryH245_NewATMVCIndication_aal_aal1_clockRecoveryH245_NewATMVCIndication_aal_aal1::m_errorCorrectionH245_NewATMVCIndication_aal_aal1_errorCorrectionH245_NewATMVCIndication_aal_aal1::m_structuredDataTransferH245_NewATMVCIndication_aal_aal1::m_partiallyFilledCellsH245_CloseLogicalChannel_sourceH245_CloseLogicalChannel_source::PCLASSINFOH245_CloseLogicalChannel_source::ChoicesH245_MaintenanceLoopReject_causeH245_MaintenanceLoopReject_cause::PCLASSINFOH245_MaintenanceLoopReject_cause::ChoicesH245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded::PCLASSINFOH245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded::ChoicesH245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded::operator H245_CapabilityTableEntryNumber &H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded::CreateObjectH245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded::CloneH245_ArrayOf_MultiplexTableEntryNumber::PCLASSINFOH245_H223AL3MParametersH245_H223AL3MParameters::PCLASSINFOH245_H223AL3MParameters::OptionalFieldsH245_H223AL3MParameters::m_headerFormatH245_H223AL3MParameters::m_crcLengthH245_H223AL3MParameters_crcLengthH245_H223AL3MParameters::m_rcpcCodeRateH245_H223AL3MParameters::m_arqTypeH245_H223AL3MParameters_arqTypeH245_H223AL3MParameters::m_alpduInterleavingH245_H223AL3MParameters::m_rsCodeCorrectionH245_H223CapabilityH245_H223Capability::PCLASSINFOH245_H223Capability::OptionalFieldsH245_H223Capability::m_transportWithI_framesH245_H223Capability::m_videoWithAL1H245_H223Capability::m_videoWithAL2H245_H223Capability::m_videoWithAL3H245_H223Capability::m_audioWithAL1H245_H223Capability::m_audioWithAL2H245_H223Capability::m_audioWithAL3H245_H223Capability::m_dataWithAL1H245_H223Capability::m_dataWithAL2H245_H223Capability::m_dataWithAL3H245_H223Capability::m_maximumAl2SDUSizeH245_H223Capability::m_maximumAl3SDUSizeH245_H223Capability::m_maximumDelayJitterH245_H223Capability::m_h223MultiplexTableCapabilityH245_H223Capability_h223MultiplexTableCapabilityH245_H223Capability::m_maxMUXPDUSizeCapabilityH245_H223Capability::m_nsrpSupportH245_H223Capability::m_mobileOperationTransmitCapabilityH245_H223Capability_mobileOperationTransmitCapabilityH245_H223Capability::m_h223AnnexCCapabilityH245_H223AnnexCCapabilityH245_H223Capability::m_bitRateH245_H223Capability::m_mobileMultilinkFrameCapabilityH245_H223Capability_mobileMultilinkFrameCapabilityH245_RequestChannelCloseRejectH245_RequestChannelCloseReject::PCLASSINFOH245_RequestChannelCloseReject::m_forwardLogicalChannelNumberH245_RequestChannelCloseReject::m_causeH245_H223AnnexCCapability::PCLASSINFOH245_H223AnnexCCapability::OptionalFieldsH245_H223AnnexCCapability::m_videoWithAL1MH245_H223AnnexCCapability::m_videoWithAL2MH245_H223AnnexCCapability::m_videoWithAL3MH245_H223AnnexCCapability::m_audioWithAL1MH245_H223AnnexCCapability::m_audioWithAL2MH245_H223AnnexCCapability::m_audioWithAL3MH245_H223AnnexCCapability::m_dataWithAL1MH245_H223AnnexCCapability::m_dataWithAL2MH245_H223AnnexCCapability::m_dataWithAL3MH245_H223AnnexCCapability::m_alpduInterleavingH245_H223AnnexCCapability::m_maximumAL1MPDUSizeH245_H223AnnexCCapability::m_maximumAL2MSDUSizeH245_H223AnnexCCapability::m_maximumAL3MSDUSizeH245_H223AnnexCCapability::m_rsCodeCapabilityH245_MasterSlaveDeterminationRejectH245_MasterSlaveDeterminationReject::PCLASSINFOH245_MasterSlaveDeterminationReject::m_causeH245_MasterSlaveDeterminationReject_causeH245_MultilinkRequest_addConnectionH245_MultilinkRequest_addConnection::PCLASSINFOH245_MultilinkRequest_addConnection::m_sequenceNumberH245_MultilinkRequest_addConnection::m_dialingInformationH245_H223ModeParameters_adaptationLayerType_al3H245_H223ModeParameters_adaptationLayerType_al3::PCLASSINFOH245_H223ModeParameters_adaptationLayerType_al3::m_controlFieldOctetsH245_H223ModeParameters_adaptationLayerType_al3::m_sendBufferSizeH245_RemoteMCRequestH245_RemoteMCRequest::PCLASSINFOH245_RemoteMCRequest::ChoicesH245_RTPPayloadType_payloadDescriptor::PCLASSINFOH245_RTPPayloadType_payloadDescriptor::ChoicesH245_RTPPayloadType_payloadDescriptor::operator H245_NonStandardParameter &H245_H223Capability_mobileOperationTransmitCapability::PCLASSINFOH245_H223Capability_mobileOperationTransmitCapability::m_modeChangeCapabilityH245_H223Capability_mobileOperationTransmitCapability::m_h223AnnexAH245_H223Capability_mobileOperationTransmitCapability::m_h223AnnexADoubleFlagH245_H223Capability_mobileOperationTransmitCapability::m_h223AnnexBH245_H223Capability_mobileOperationTransmitCapability::m_h223AnnexBwithHeaderH245_ArrayOf_MediaDistributionCapabilityH245_ArrayOf_MediaDistributionCapability::PCLASSINFOH245_ConferenceResponseH245_ConferenceResponse::PCLASSINFOH245_ConferenceResponse::ChoicesH245_ConferenceResponse::operator H245_ConferenceResponse_mCTerminalIDResponse &H245_ConferenceResponse_mCTerminalIDResponse &H245_ConferenceResponse::operator H245_ConferenceResponse_terminalIDResponse &H245_ConferenceResponse_terminalIDResponse &H245_ConferenceResponse::operator H245_ConferenceResponse_conferenceIDResponse &H245_ConferenceResponse_conferenceIDResponse &H245_ConferenceResponse::operator H245_ConferenceResponse_passwordResponse &H245_ConferenceResponse_passwordResponse &H245_ConferenceResponse::operator H245_ArrayOf_TerminalLabel &H245_ArrayOf_TerminalLabel &H245_ConferenceResponse::operator H245_ConferenceResponse_makeMeChairResponse &H245_ConferenceResponse_makeMeChairResponse &H245_ConferenceResponse::operator H245_ConferenceResponse_extensionAddressResponse &H245_ConferenceResponse_extensionAddressResponse &H245_ConferenceResponse::operator H245_ConferenceResponse_chairTokenOwnerResponse &H245_ConferenceResponse_chairTokenOwnerResponse &H245_ConferenceResponse::operator H245_ConferenceResponse_terminalCertificateResponse &H245_ConferenceResponse_terminalCertificateResponse &H245_ConferenceResponse::operator H245_ConferenceResponse_broadcastMyLogicalChannelResponse &H245_ConferenceResponse_broadcastMyLogicalChannelResponse &H245_ConferenceResponse::operator H245_ConferenceResponse_makeTerminalBroadcasterResponse &H245_ConferenceResponse_makeTerminalBroadcasterResponse &H245_ConferenceResponse::operator H245_ConferenceResponse_sendThisSourceResponse &H245_ConferenceResponse_sendThisSourceResponse &H245_ConferenceResponse::operator H245_RequestAllTerminalIDsResponse &H245_RequestAllTerminalIDsResponse &H245_ConferenceResponse::operator H245_RemoteMCResponse &H245_RemoteMCResponse &H245_TerminalInformationH245_TerminalInformation::PCLASSINFOH245_TerminalInformation::m_terminalLabelH245_TerminalInformation::m_terminalIDH245_H223AL2MParametersH245_H223AL2MParameters::PCLASSINFOH245_H223AL2MParameters::m_headerFECH245_H223AL2MParameters::m_alpduInterleavingH245_G7231AnnexCMode_g723AnnexCAudioMode::PCLASSINFOH245_G7231AnnexCMode_g723AnnexCAudioMode::m_highRateMode0H245_G7231AnnexCMode_g723AnnexCAudioMode::m_highRateMode1H245_G7231AnnexCMode_g723AnnexCAudioMode::m_lowRateMode0H245_G7231AnnexCMode_g723AnnexCAudioMode::m_lowRateMode1H245_G7231AnnexCMode_g723AnnexCAudioMode::m_sidMode0H245_G7231AnnexCMode_g723AnnexCAudioMode::m_sidMode1H245_FECData_rfc2733_pktMode_rfc2733diffportH245_FECData_rfc2733_pktMode_rfc2733diffport::PCLASSINFOH245_FECData_rfc2733_pktMode_rfc2733diffport::m_protectedChannelH245_VCCapability_availableBitRates_typeH245_VCCapability_availableBitRates_type::PCLASSINFOH245_VCCapability_availableBitRates_type::ChoicesH245_VCCapability_availableBitRates_type::operator H245_VCCapability_availableBitRates_type_rangeOfBitRates &H245_VCCapability_availableBitRates_type_rangeOfBitRates &H245_RedundancyEncodingDTModeH245_RedundancyEncodingDTMode::PCLASSINFOH245_RedundancyEncodingDTMode::m_redundancyEncodingMethodH245_RedundancyEncodingDTMode::m_primaryH245_RedundancyEncodingDTMode::m_secondaryH245_CRCLength::PCLASSINFOH245_CRCLength::ChoicesH245_FunctionNotSupportedH245_FunctionNotSupported::PCLASSINFOH245_FunctionNotSupported::OptionalFieldsH245_FunctionNotSupported::m_causeH245_FunctionNotSupported_causeH245_FunctionNotSupported::m_returnedFunctionH245_Password::PCLASSINFOH245_MulticastAddressH245_MulticastAddress::PCLASSINFOH245_MulticastAddress::ChoicesH245_MulticastAddress::operator H245_MulticastAddress_iPAddress &H245_MulticastAddress_iPAddress &H245_MulticastAddress::operator H245_MulticastAddress_iP6Address &H245_MulticastAddress_iP6Address &H245_MulticastAddress::operator H245_NonStandardParameter &H245_ArrayOf_Q2931AddressH245_ArrayOf_Q2931Address::PCLASSINFOH245_EncryptionAuthenticationAndIntegrity::PCLASSINFOH245_EncryptionAuthenticationAndIntegrity::OptionalFieldsH245_EncryptionAuthenticationAndIntegrity::m_encryptionCapabilityH245_EncryptionCapabilityH245_EncryptionAuthenticationAndIntegrity::m_authenticationCapabilityH245_AuthenticationCapabilityH245_EncryptionAuthenticationAndIntegrity::m_integrityCapabilityH245_EncryptionAuthenticationAndIntegrity::m_genericH235SecurityCapabilityH245_EncryptionCommand_encryptionAlgorithmIDH245_EncryptionCommand_encryptionAlgorithmID::PCLASSINFOH245_EncryptionCommand_encryptionAlgorithmID::m_h233AlgorithmIdentifierH245_EncryptionCommand_encryptionAlgorithmID::m_associatedAlgorithmH245_CapabilityDescriptorH245_CapabilityDescriptor::PCLASSINFOH245_CapabilityDescriptor::OptionalFieldsH245_CapabilityDescriptor::m_capabilityDescriptorNumberH245_CapabilityDescriptorNumberH245_CapabilityDescriptor::m_simultaneousCapabilitiesH245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters::PCLASSINFOH245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters::ChoicesH245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters::operator H245_H222LogicalChannelParameters &H245_H222LogicalChannelParameters &H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters::operator H245_H2250LogicalChannelParameters &H245_H2250LogicalChannelParameters &H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters::CreateObjectH245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters::CloneH245_EncryptionSyncH245_EncryptionSync::PCLASSINFOH245_EncryptionSync::OptionalFieldsH245_EncryptionSync::m_nonStandardH245_EncryptionSync::m_synchFlagH245_EncryptionSync::m_h235KeyH245_EncryptionSync::m_escrowentryH245_EncryptionSync::m_genericParameterH245_CloseLogicalChannelH245_CloseLogicalChannel::PCLASSINFOH245_CloseLogicalChannel::OptionalFieldsH245_CloseLogicalChannel::m_forwardLogicalChannelNumberH245_CloseLogicalChannel::m_sourceH245_CloseLogicalChannel::m_reasonH245_NewATMVCIndication_reverseParameters_multiplex::PCLASSINFOH245_NewATMVCIndication_reverseParameters_multiplex::ChoicesH245_H223AnnexCArqParameters_numberOfRetransmissionsH245_H223AnnexCArqParameters_numberOfRetransmissions::PCLASSINFOH245_H223AnnexCArqParameters_numberOfRetransmissions::ChoicesH245_RequestModeReleaseH245_RequestModeRelease::PCLASSINFOH245_MediaEncryptionAlgorithmH245_MediaEncryptionAlgorithm::PCLASSINFOH245_MediaEncryptionAlgorithm::ChoicesH245_MediaEncryptionAlgorithm::operator H245_NonStandardParameter &H245_MaintenanceLoopAck_typeH245_MaintenanceLoopAck_type::PCLASSINFOH245_MaintenanceLoopAck_type::ChoicesH245_MaintenanceLoopAck_type::operator H245_LogicalChannelNumber &H245_MaintenanceLoopRejectH245_MaintenanceLoopReject::PCLASSINFOH245_MaintenanceLoopReject::m_typeH245_MaintenanceLoopReject::m_causeH245_MasterSlaveDeterminationAckH245_MasterSlaveDeterminationAck::PCLASSINFOH245_MasterSlaveDeterminationAck::m_decisionH245_MasterSlaveDeterminationAck_decisionH245_H223MultiplexReconfigurationH245_H223MultiplexReconfiguration::PCLASSINFOH245_H223MultiplexReconfiguration::ChoicesH245_H223MultiplexReconfiguration::operator H245_H223MultiplexReconfiguration_h223ModeChange &H245_H223MultiplexReconfiguration_h223ModeChange &H245_H223MultiplexReconfiguration::operator H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag &H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag &H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric::PCLASSINFOH245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric::OptionalFieldsH245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric::m_algorithmOIDH245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric::m_paramSH245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric::m_encryptedH245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric::GetDataLengthH245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric::DecodeH245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric::EncodeH245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric::PrintOnH245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric::CompareH245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric::CloneH245_MobileMultilinkReconfigurationCommand_statusH245_MobileMultilinkReconfigurationCommand_status::PCLASSINFOH245_MobileMultilinkReconfigurationCommand_status::ChoicesH245_NonStandardMessageH245_NonStandardMessage::PCLASSINFOH245_NonStandardMessage::m_nonStandardDataH245_UserInputIndication_signal_rtp::PCLASSINFOH245_UserInputIndication_signal_rtp::OptionalFieldsH245_UserInputIndication_signal_rtp::m_timestampH245_UserInputIndication_signal_rtp::m_expirationTimeH245_UserInputIndication_signal_rtp::m_logicalChannelNumberH245_IS13818AudioCapabilityH245_IS13818AudioCapability::PCLASSINFOH245_IS13818AudioCapability::m_audioLayer1H245_IS13818AudioCapability::m_audioLayer2H245_IS13818AudioCapability::m_audioLayer3H245_IS13818AudioCapability::m_audioSampling16kH245_IS13818AudioCapability::m_audioSampling22k05H245_IS13818AudioCapability::m_audioSampling24kH245_IS13818AudioCapability::m_audioSampling32kH245_IS13818AudioCapability::m_audioSampling44k1H245_IS13818AudioCapability::m_audioSampling48kH245_IS13818AudioCapability::m_singleChannelH245_IS13818AudioCapability::m_twoChannelsH245_IS13818AudioCapability::m_threeChannels2_1H245_IS13818AudioCapability::m_threeChannels3_0H245_IS13818AudioCapability::m_fourChannels2_0_2_0H245_IS13818AudioCapability::m_fourChannels2_2H245_IS13818AudioCapability::m_fourChannels3_1H245_IS13818AudioCapability::m_fiveChannels3_0_2_0H245_IS13818AudioCapability::m_fiveChannels3_2H245_IS13818AudioCapability::m_lowFrequencyEnhancementH245_IS13818AudioCapability::m_multilingualH245_IS13818AudioCapability::m_bitRateH245_UserInputIndication_signalUpdateH245_UserInputIndication_signalUpdate::PCLASSINFOH245_UserInputIndication_signalUpdate::OptionalFieldsH245_UserInputIndication_signalUpdate::m_durationH245_UserInputIndication_signalUpdate::m_rtpH245_UserInputIndication_signalUpdate_rtpH245_RequestMultiplexEntryRejectionDescriptionsH245_RequestMultiplexEntryRejectionDescriptions::PCLASSINFOH245_RequestMultiplexEntryRejectionDescriptions::m_multiplexTableEntryNumberH245_RequestMultiplexEntryRejectionDescriptions::m_causeH245_IS11172AudioMode_multichannelTypeH245_IS11172AudioMode_multichannelType::PCLASSINFOH245_IS11172AudioMode_multichannelType::ChoicesH245_OpenLogicalChannel_forwardLogicalChannelParameters::PCLASSINFOH245_OpenLogicalChannel_forwardLogicalChannelParameters::OptionalFieldsH245_OpenLogicalChannel_forwardLogicalChannelParameters::m_portNumberH245_OpenLogicalChannel_forwardLogicalChannelParameters::m_dataTypeH245_OpenLogicalChannel_forwardLogicalChannelParameters::m_multiplexParametersH245_OpenLogicalChannel_forwardLogicalChannelParameters::m_forwardLogicalChannelDependencyH245_OpenLogicalChannel_forwardLogicalChannelParameters::m_replacementForH245_H2250Capability_mcCapabilityH245_H2250Capability_mcCapability::PCLASSINFOH245_H2250Capability_mcCapability::m_centralizedConferenceMCH245_H2250Capability_mcCapability::m_decentralizedConferenceMCH245_FlowControlCommandH245_FlowControlCommand::PCLASSINFOH245_FlowControlCommand::m_scopeH245_FlowControlCommand::m_restrictionH245_H223ModeParametersH245_H223ModeParameters::PCLASSINFOH245_H223ModeParameters::m_adaptationLayerTypeH245_H223ModeParameters_adaptationLayerTypeH245_H223ModeParameters::m_segmentableFlagH245_VCCapability_aal1ViaGatewayH245_VCCapability_aal1ViaGateway::PCLASSINFOH245_VCCapability_aal1ViaGateway::m_gatewayAddressH245_VCCapability_aal1ViaGateway::m_nullClockRecoveryH245_VCCapability_aal1ViaGateway::m_srtsClockRecoveryH245_VCCapability_aal1ViaGateway::m_adaptiveClockRecoveryH245_VCCapability_aal1ViaGateway::m_nullErrorCorrectionH245_VCCapability_aal1ViaGateway::m_longInterleaverH245_VCCapability_aal1ViaGateway::m_shortInterleaverH245_VCCapability_aal1ViaGateway::m_errorCorrectionOnlyH245_VCCapability_aal1ViaGateway::m_structuredDataTransferH245_VCCapability_aal1ViaGateway::m_partiallyFilledCellsH245_FECCapability_rfc2733FormatH245_FECCapability_rfc2733Format::PCLASSINFOH245_FECCapability_rfc2733Format::ChoicesH245_FECCapability_rfc2733Format::operator H245_MaxRedundancy &H245_DepFECMode_rfc2733Mode_mode_separateStream_samePortH245_DepFECMode_rfc2733Mode_mode_separateStream_samePort::PCLASSINFOH245_DepFECMode_rfc2733Mode_mode_separateStream_samePort::m_protectedTypeH245_EncryptionUpdateRequestH245_EncryptionUpdateRequest::PCLASSINFOH245_EncryptionUpdateRequest::OptionalFieldsH245_EncryptionUpdateRequest::m_keyProtectionMethodH245_EncryptionUpdateRequest::m_synchFlagH245_AudioTelephonyEventCapabilityH245_AudioTelephonyEventCapability::PCLASSINFOH245_AudioTelephonyEventCapability::m_dynamicRTPPayloadTypeH245_AudioTelephonyEventCapability::m_audioTelephoneEventPASN_GeneralStringH245_ConferenceCapabilityH245_ConferenceCapability::PCLASSINFOH245_ConferenceCapability::OptionalFieldsH245_ConferenceCapability::m_nonStandardDataH245_ConferenceCapability::m_chairControlCapabilityH245_ConferenceCapability::m_videoIndicateMixingCapabilityH245_ConferenceCapability::m_multipointVisualizationCapabilityH245_CommunicationModeCommandH245_CommunicationModeCommand::PCLASSINFOH245_CommunicationModeCommand::m_communicationModeTableH245_CustomPictureFormat_mPI_customPCF_subtypeH245_CustomPictureFormat_mPI_customPCF_subtype::PCLASSINFOH245_CustomPictureFormat_mPI_customPCF_subtype::m_clockConversionCodeH245_CustomPictureFormat_mPI_customPCF_subtype::m_clockDivisorH245_CustomPictureFormat_mPI_customPCF_subtype::m_customMPIH245_MasterSlaveDeterminationReleaseH245_MasterSlaveDeterminationRelease::PCLASSINFOH245_SubstituteConferenceIDCommandH245_SubstituteConferenceIDCommand::PCLASSINFOH245_SubstituteConferenceIDCommand::m_conferenceIdentifierH245_IS11172AudioCapabilityH245_IS11172AudioCapability::PCLASSINFOH245_IS11172AudioCapability::m_audioLayer1H245_IS11172AudioCapability::m_audioLayer2H245_IS11172AudioCapability::m_audioLayer3H245_IS11172AudioCapability::m_audioSampling32kH245_IS11172AudioCapability::m_audioSampling44k1H245_IS11172AudioCapability::m_audioSampling48kH245_IS11172AudioCapability::m_singleChannelH245_IS11172AudioCapability::m_twoChannelsH245_IS11172AudioCapability::m_bitRateH245_ArrayOf_CapabilityTableEntry::PCLASSINFOH245_NewATMVCIndication_multiplex::PCLASSINFOH245_NewATMVCIndication_multiplex::ChoicesH245_NewATMVCCommand_aalH245_NewATMVCCommand_aal::PCLASSINFOH245_NewATMVCCommand_aal::ChoicesH245_NewATMVCCommand_aal::operator H245_NewATMVCCommand_aal_aal1 &H245_NewATMVCCommand_aal_aal1 &H245_NewATMVCCommand_aal::operator H245_NewATMVCCommand_aal_aal5 &H245_NewATMVCCommand_aal_aal5 &H245_H223AL3MParameters_crcLength::PCLASSINFOH245_H223AL3MParameters_crcLength::ChoicesH245_ConferenceResponse_conferenceIDResponseH245_ConferenceResponse_conferenceIDResponse::PCLASSINFOH245_ConferenceResponse_conferenceIDResponse::m_terminalLabelH245_ConferenceResponse_conferenceIDResponse::m_conferenceIDH245_ConferenceIDH245_VBDModeH245_VBDMode::PCLASSINFOH245_VBDMode::m_typeH245_AudioModeH245_MiscellaneousCommand_type_videoFastUpdateGOBH245_MiscellaneousCommand_type_videoFastUpdateGOB::PCLASSINFOH245_MiscellaneousCommand_type_videoFastUpdateGOB::m_firstGOBH245_MiscellaneousCommand_type_videoFastUpdateGOB::m_numberOfGOBsH245_CertSelectionCriteriaH245_CertSelectionCriteria::PCLASSINFOH245_DepFECData_rfc2733H245_DepFECData_rfc2733::PCLASSINFOH245_DepFECData_rfc2733::m_modeH245_DepFECData_rfc2733_modeH245_MultiplexEntrySendH245_MultiplexEntrySend::PCLASSINFOH245_MultiplexEntrySend::m_sequenceNumberH245_MultiplexEntrySend::m_multiplexEntryDescriptorsH245_ParameterIdentifier::PCLASSINFOH245_ParameterIdentifier::ChoicesH245_ParameterIdentifier::operator H245_NonStandardParameter &H245_EndSessionCommand_gstnOptionsH245_EndSessionCommand_gstnOptions::PCLASSINFOH245_EndSessionCommand_gstnOptions::ChoicesH245_ConnectionIdentifier::PCLASSINFOH245_ConnectionIdentifier::m_channelTagH245_ConnectionIdentifier::m_sequenceNumberH245_CommandMessageH245_CommandMessage::PCLASSINFOH245_CommandMessage::ChoicesH245_CommandMessage::operator H245_NonStandardMessage &H245_CommandMessage::operator H245_MaintenanceLoopOffCommand &H245_MaintenanceLoopOffCommand &H245_CommandMessage::operator H245_SendTerminalCapabilitySet &H245_SendTerminalCapabilitySet &H245_CommandMessage::operator H245_EncryptionCommand &H245_EncryptionCommand &H245_CommandMessage::operator H245_FlowControlCommand &H245_FlowControlCommand &H245_CommandMessage::operator H245_EndSessionCommand &H245_CommandMessage::operator H245_MiscellaneousCommand &H245_MiscellaneousCommand &H245_CommandMessage::operator H245_CommunicationModeCommand &H245_CommunicationModeCommand &H245_CommandMessage::operator H245_ConferenceCommand &H245_ConferenceCommand &H245_CommandMessage::operator H245_H223MultiplexReconfiguration &H245_H223MultiplexReconfiguration &H245_CommandMessage::operator H245_NewATMVCCommand &H245_NewATMVCCommand &H245_CommandMessage::operator H245_MobileMultilinkReconfigurationCommand &H245_MobileMultilinkReconfigurationCommand &H245_CommandMessage::operator H245_GenericMessage &H245_ExtendedVideoCapabilityH245_ExtendedVideoCapability::PCLASSINFOH245_ExtendedVideoCapability::OptionalFieldsH245_ExtendedVideoCapability::m_videoCapabilityH245_ArrayOf_VideoCapabilityH245_ExtendedVideoCapability::m_videoCapabilityExtensionH245_ArrayOf_GenericCapabilityH245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype::PCLASSINFOH245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype::m_widthH245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype::m_heightH245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype::GetDataLengthH245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype::DecodeH245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype::EncodeH245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype::PrintOnH245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype::CompareH245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype::CloneH245_MiscellaneousCommandH245_MiscellaneousCommand::PCLASSINFOH245_MiscellaneousCommand::OptionalFieldsH245_MiscellaneousCommand::m_logicalChannelNumberH245_MiscellaneousCommand::m_typeH245_MiscellaneousCommand_typeH245_MiscellaneousCommand::m_directionH245_EncryptionUpdateDirectionH245_CapabilityTableEntryNumber::PCLASSINFOH245_OpenLogicalChannelRejectH245_OpenLogicalChannelReject::PCLASSINFOH245_OpenLogicalChannelReject::OptionalFieldsH245_OpenLogicalChannelReject::m_forwardLogicalChannelNumberH245_OpenLogicalChannelReject::m_causeH245_OpenLogicalChannelReject::m_genericInformationH245_RequestModeAck_response::PCLASSINFOH245_RequestModeAck_response::ChoicesH245_ArrayOf_RequestMultiplexEntryRejectionDescriptions::PCLASSINFOH245_VCCapability_aal1H245_VCCapability_aal1::PCLASSINFOH245_VCCapability_aal1::m_nullClockRecoveryH245_VCCapability_aal1::m_srtsClockRecoveryH245_VCCapability_aal1::m_adaptiveClockRecoveryH245_VCCapability_aal1::m_nullErrorCorrectionH245_VCCapability_aal1::m_longInterleaverH245_VCCapability_aal1::m_shortInterleaverH245_VCCapability_aal1::m_errorCorrectionOnlyH245_VCCapability_aal1::m_structuredDataTransferH245_VCCapability_aal1::m_partiallyFilledCellsH245_AudioMode_g7231H245_AudioMode_g7231::PCLASSINFOH245_AudioMode_g7231::ChoicesH245_MaximumBitRate::PCLASSINFOH245_VCCapability_aal5H245_VCCapability_aal5::PCLASSINFOH245_VCCapability_aal5::m_forwardMaximumSDUSizeH245_VCCapability_aal5::m_backwardMaximumSDUSizeH245_NewATMVCIndication_aal::PCLASSINFOH245_NewATMVCIndication_aal::ChoicesH245_NewATMVCIndication_aal::operator H245_NewATMVCIndication_aal_aal1 &H245_NewATMVCIndication_aal_aal1 &H245_NewATMVCIndication_aal::operator H245_NewATMVCIndication_aal_aal5 &H245_NewATMVCIndication_aal_aal5 &H245_MiscellaneousCommand_type_videoFastUpdateMBH245_MiscellaneousCommand_type_videoFastUpdateMB::PCLASSINFOH245_MiscellaneousCommand_type_videoFastUpdateMB::OptionalFieldsH245_MiscellaneousCommand_type_videoFastUpdateMB::m_firstGOBH245_MiscellaneousCommand_type_videoFastUpdateMB::m_firstMBH245_MiscellaneousCommand_type_videoFastUpdateMB::m_numberOfMBsH245_IS13818AudioMode_audioSamplingH245_IS13818AudioMode_audioSampling::PCLASSINFOH245_IS13818AudioMode_audioSampling::ChoicesH245_H223AL1MParameters_crcLength::PCLASSINFOH245_H223AL1MParameters_crcLength::ChoicesH245_FlowControlIndicationH245_FlowControlIndication::PCLASSINFOH245_FlowControlIndication::m_scopeH245_FlowControlIndication_scopeH245_FlowControlIndication::m_restrictionH245_RefPictureSelectionH245_RefPictureSelection::PCLASSINFOH245_RefPictureSelection::OptionalFieldsH245_RefPictureSelection::m_additionalPictureMemoryH245_RefPictureSelection::m_videoMuxH245_RefPictureSelection::m_videoBackChannelSendH245_RefPictureSelection::m_enhancedReferencePicSelectH245_NewATMVCCommand_aal_aal1_clockRecovery::PCLASSINFOH245_NewATMVCCommand_aal_aal1_clockRecovery::ChoicesH245_ArrayOf_MultiplePayloadStreamElement::PCLASSINFOH245_RequestMultiplexEntryAckH245_RequestMultiplexEntryAck::PCLASSINFOH245_RequestMultiplexEntryAck::m_entryNumbersH245_NoPTAudioToneCapabilityH245_NoPTAudioToneCapability::PCLASSINFOH245_T38FaxTcpOptionsH245_T38FaxTcpOptions::PCLASSINFOH245_T38FaxTcpOptions::m_t38TCPBidirectionalModeH245_QOSClass::PCLASSINFOH245_QOSClass::ChoicesH245_MultilinkIndication_excessiveErrorH245_MultilinkIndication_excessiveError::PCLASSINFOH245_MultilinkIndication_excessiveError::m_connectionIdentifierH245_GenericTransportParameters::PCLASSINFOH245_GenericTransportParameters::OptionalFieldsH245_GenericTransportParameters::m_nonStandardDataH245_GenericTransportParameters::m_averageRateH245_GenericTransportParameters::m_burstH245_GenericTransportParameters::m_peakRateH245_GenericTransportParameters::m_maxPktSizeH245_RSVPParameters::PCLASSINFOH245_RSVPParameters::OptionalFieldsH245_RSVPParameters::m_qosModeH245_QOSModeH245_RSVPParameters::m_tokenRateH245_RSVPParameters::m_bucketSizeH245_RSVPParameters::m_peakRateH245_RSVPParameters::m_minPolicedH245_RSVPParameters::m_maxPktSizeH245_ArrayOf_MultiplePayloadStreamElementMode::PCLASSINFOH245_MiscellaneousIndicationH245_MiscellaneousIndication::PCLASSINFOH245_MiscellaneousIndication::m_logicalChannelNumberH245_MiscellaneousIndication::m_typeH245_RequestChannelCloseH245_RequestChannelClose::PCLASSINFOH245_RequestChannelClose::OptionalFieldsH245_RequestChannelClose::m_forwardLogicalChannelNumberH245_RequestChannelClose::m_qosCapabilityH245_RequestChannelClose::m_reasonH245_IS11172AudioModeH245_IS11172AudioMode::PCLASSINFOH245_IS11172AudioMode::m_audioLayerH245_IS11172AudioMode_audioLayerH245_IS11172AudioMode::m_audioSamplingH245_IS11172AudioMode::m_multichannelTypeH245_IS11172AudioMode::m_bitRateH245_ConferenceIndicationH245_ConferenceIndication::PCLASSINFOH245_ConferenceIndication::ChoicesH245_ConferenceIndication::operator H245_TerminalLabel &H245_ConferenceIndication::operator H245_TerminalYouAreSeeingInSubPictureNumber &H245_TerminalYouAreSeeingInSubPictureNumber &H245_ConferenceIndication::operator H245_VideoIndicateCompose &H245_VideoIndicateCompose &H245_ArrayOf_H263ModeComboFlags::PCLASSINFOH245_CapabilityDescriptorNumber::PCLASSINFOH245_DepFECData_rfc2733_mode_separateStreamH245_DepFECData_rfc2733_mode_separateStream::PCLASSINFOH245_DepFECData_rfc2733_mode_separateStream::ChoicesH245_DepFECData_rfc2733_mode_separateStream::operator H245_DepFECData_rfc2733_mode_separateStream_differentPort &H245_DepFECData_rfc2733_mode_separateStream_differentPort &H245_DepFECData_rfc2733_mode_separateStream::operator H245_DepFECData_rfc2733_mode_separateStream_samePort &H245_DepFECData_rfc2733_mode_separateStream_samePort &H245_MultiplexEntrySendReleaseH245_MultiplexEntrySendRelease::PCLASSINFOH245_MultiplexEntrySendRelease::m_multiplexTableEntryNumberH245_NewATMVCIndication_aal_aal1_clockRecovery::PCLASSINFOH245_NewATMVCIndication_aal_aal1_clockRecovery::ChoicesH245_H223MultiplexReconfiguration_h223ModeChangeH245_H223MultiplexReconfiguration_h223ModeChange::PCLASSINFOH245_H223MultiplexReconfiguration_h223ModeChange::ChoicesH245_H2250CapabilityH245_H2250Capability::PCLASSINFOH245_H2250Capability::OptionalFieldsH245_H2250Capability::m_maximumAudioDelayJitterH245_H2250Capability::m_receiveMultipointCapabilityH245_MultipointCapabilityH245_H2250Capability::m_transmitMultipointCapabilityH245_H2250Capability::m_receiveAndTransmitMultipointCapabilityH245_H2250Capability::m_mcCapabilityH245_H2250Capability::m_rtcpVideoControlCapabilityH245_H2250Capability::m_mediaPacketizationCapabilityH245_H2250Capability::m_transportCapabilityH245_TransportCapabilityH245_H2250Capability::m_redundancyEncodingCapabilityH245_ArrayOf_RedundancyEncodingCapabilityH245_H2250Capability::m_logicalChannelSwitchingCapabilityH245_H2250Capability::m_t120DynamicPortCapabilityH245_ArrayOf_MediaChannelCapabilityH245_ArrayOf_MediaChannelCapability::PCLASSINFOH245_MaintenanceLoopRequestH245_MaintenanceLoopRequest::PCLASSINFOH245_MaintenanceLoopRequest::m_typeH245_V42bisH245_V42bis::PCLASSINFOH245_V42bis::m_numberOfCodewordsH245_V42bis::m_maximumStringLengthH245_Capability::PCLASSINFOH245_Capability::ChoicesH245_Capability::operator H245_NonStandardParameter &H245_Capability::operator H245_VideoCapability &H245_Capability::operator H245_AudioCapability &H245_Capability::operator H245_DataApplicationCapability &H245_Capability::operator H245_Capability_h233EncryptionReceiveCapability &H245_Capability_h233EncryptionReceiveCapability &H245_Capability::operator H245_ConferenceCapability &H245_ConferenceCapability &H245_Capability::operator H245_H235SecurityCapability &H245_H235SecurityCapability &H245_Capability::operator H245_UserInputCapability &H245_UserInputCapability &H245_Capability::operator H245_GenericCapability &H245_Capability::operator H245_MultiplexedStreamCapability &H245_MultiplexedStreamCapability &H245_Capability::operator H245_AudioTelephonyEventCapability &H245_AudioTelephonyEventCapability &H245_Capability::operator H245_AudioToneCapability &H245_AudioToneCapability &H245_Capability::operator H245_DepFECCapability &H245_DepFECCapability &H245_Capability::operator H245_MultiplePayloadStreamCapability &H245_MultiplePayloadStreamCapability &H245_Capability::operator H245_FECCapability &H245_FECCapability &H245_Capability::operator H245_RedundancyEncodingCapability &H245_Capability::operator H245_AlternativeCapabilitySet &H245_ConferenceResponse_terminalIDResponseH245_ConferenceResponse_terminalIDResponse::PCLASSINFOH245_ConferenceResponse_terminalIDResponse::m_terminalLabelH245_ConferenceResponse_terminalIDResponse::m_terminalIDH245_H263Options::PCLASSINFOH245_H263Options::OptionalFieldsH245_H263Options::m_advancedIntraCodingModeH245_H263Options::m_deblockingFilterModeH245_H263Options::m_improvedPBFramesModeH245_H263Options::m_unlimitedMotionVectorsH245_H263Options::m_fullPictureFreezeH245_H263Options::m_partialPictureFreezeAndReleaseH245_H263Options::m_resizingPartPicFreezeAndReleaseH245_H263Options::m_fullPictureSnapshotH245_H263Options::m_partialPictureSnapshotH245_H263Options::m_videoSegmentTaggingH245_H263Options::m_progressiveRefinementH245_H263Options::m_dynamicPictureResizingByFourH245_H263Options::m_dynamicPictureResizingSixteenthPelH245_H263Options::m_dynamicWarpingHalfPelH245_H263Options::m_dynamicWarpingSixteenthPelH245_H263Options::m_independentSegmentDecodingH245_H263Options::m_slicesInOrder_NonRectH245_H263Options::m_slicesInOrder_RectH245_H263Options::m_slicesNoOrder_NonRectH245_H263Options::m_slicesNoOrder_RectH245_H263Options::m_alternateInterVLCModeH245_H263Options::m_modifiedQuantizationModeH245_H263Options::m_reducedResolutionUpdateH245_H263Options::m_transparencyParametersH245_TransparencyParametersH245_H263Options::m_separateVideoBackChannelH245_H263Options::m_refPictureSelectionH245_H263Options::m_customPictureClockFrequencyH245_ArrayOf_CustomPictureClockFrequencyH245_H263Options::m_customPictureFormatH245_ArrayOf_CustomPictureFormatH245_H263Options::m_modeCombosH245_ArrayOf_H263VideoModeCombosH245_H263Options::m_videoBadMBsCapH245_H263Options::m_h263Version3OptionsH245_CustomPictureFormatH245_CustomPictureFormat::PCLASSINFOH245_CustomPictureFormat::m_maxCustomPictureWidthH245_CustomPictureFormat::m_maxCustomPictureHeightH245_CustomPictureFormat::m_minCustomPictureWidthH245_CustomPictureFormat::m_minCustomPictureHeightH245_CustomPictureFormat::m_mPIH245_CustomPictureFormat_mPIH245_CustomPictureFormat::m_pixelAspectInformationH245_FECData_rfc2733_pktMode::PCLASSINFOH245_FECData_rfc2733_pktMode::ChoicesH245_FECData_rfc2733_pktMode::operator H245_FECData_rfc2733_pktMode_rfc2733sameport &H245_FECData_rfc2733_pktMode_rfc2733sameport &H245_FECData_rfc2733_pktMode::operator H245_FECData_rfc2733_pktMode_rfc2733diffport &H245_FECData_rfc2733_pktMode_rfc2733diffport &H245_DataApplicationCapability_application_t84H245_DataApplicationCapability_application_t84::PCLASSINFOH245_DataApplicationCapability_application_t84::m_t84ProtocolH245_DataApplicationCapability_application_t84::m_t84ProfileH245_V75Capability::PCLASSINFOH245_V75Capability::m_audioHeaderH245_NonStandardParameter::PCLASSINFOH245_NonStandardParameter::m_nonStandardIdentifierH245_NonStandardParameter::m_dataH245_EncryptionCommandH245_EncryptionCommand::PCLASSINFOH245_EncryptionCommand::ChoicesH245_EncryptionCommand::operator H245_EncryptionCommand_encryptionAlgorithmID &H245_EncryptionCommand_encryptionAlgorithmID &H245_ConferenceResponse_chairTokenOwnerResponseH245_ConferenceResponse_chairTokenOwnerResponse::PCLASSINFOH245_ConferenceResponse_chairTokenOwnerResponse::m_terminalLabelH245_ConferenceResponse_chairTokenOwnerResponse::m_terminalIDH245_G729ExtensionsH245_G729Extensions::PCLASSINFOH245_G729Extensions::OptionalFieldsH245_G729Extensions::m_audioUnitH245_G729Extensions::m_annexAH245_G729Extensions::m_annexBH245_G729Extensions::m_annexDH245_G729Extensions::m_annexEH245_G729Extensions::m_annexFH245_G729Extensions::m_annexGH245_G729Extensions::m_annexHH245_EscrowDataH245_EscrowData::PCLASSINFOH245_EscrowData::m_escrowIDH245_EscrowData::m_escrowValueH245_MultiplexEntrySendAckH245_MultiplexEntrySendAck::PCLASSINFOH245_MultiplexEntrySendAck::m_sequenceNumberH245_MultiplexEntrySendAck::m_multiplexTableEntryNumberH245_H223AL3MParameters_arqType::PCLASSINFOH245_H223AL3MParameters_arqType::ChoicesH245_H223AL3MParameters_arqType::operator H245_H223AnnexCArqParameters &H245_H223AnnexCArqParameters &H245_NoPTAudioTelephonyEventCapabilityH245_NoPTAudioTelephonyEventCapability::PCLASSINFOH245_NoPTAudioTelephonyEventCapability::m_audioTelephoneEventH245_H223ModeParameters_adaptationLayerType::PCLASSINFOH245_H223ModeParameters_adaptationLayerType::ChoicesH245_H223ModeParameters_adaptationLayerType::operator H245_NonStandardParameter &H245_H223ModeParameters_adaptationLayerType::operator H245_H223ModeParameters_adaptationLayerType_al3 &H245_H223ModeParameters_adaptationLayerType_al3 &H245_H223ModeParameters_adaptationLayerType::operator H245_H223AL1MParameters &H245_H223AL1MParameters &H245_H223ModeParameters_adaptationLayerType::operator H245_H223AL2MParameters &H245_H223AL2MParameters &H245_H223ModeParameters_adaptationLayerType::operator H245_H223AL3MParameters &H245_H223AL3MParameters &H245_DataType::PCLASSINFOH245_DataType::ChoicesH245_DataType::operator H245_NonStandardParameter &H245_DataType::operator H245_VideoCapability &H245_DataType::operator H245_AudioCapability &H245_DataType::operator H245_DataApplicationCapability &H245_DataType::operator H245_EncryptionMode &H245_EncryptionMode &H245_DataType::operator H245_H235Media &H245_H235Media &H245_DataType::operator H245_MultiplexedStreamParameter &H245_MultiplexedStreamParameter &H245_DataType::operator H245_RedundancyEncoding &H245_DataType::operator H245_MultiplePayloadStream &H245_DataType::operator H245_DepFECData &H245_DataType::operator H245_FECData &H245_ArrayOf_PictureReferenceH245_ArrayOf_PictureReference::PCLASSINFOH245_H2250LogicalChannelParametersH245_H2250LogicalChannelParameters::PCLASSINFOH245_H2250LogicalChannelParameters::OptionalFieldsH245_H2250LogicalChannelParameters::m_nonStandardH245_H2250LogicalChannelParameters::m_sessionIDH245_H2250LogicalChannelParameters::m_associatedSessionIDH245_H2250LogicalChannelParameters::m_mediaChannelH245_H2250LogicalChannelParameters::m_mediaGuaranteedDeliveryH245_H2250LogicalChannelParameters::m_mediaControlChannelH245_H2250LogicalChannelParameters::m_mediaControlGuaranteedDeliveryH245_H2250LogicalChannelParameters::m_silenceSuppressionH245_H2250LogicalChannelParameters::m_destinationH245_H2250LogicalChannelParameters::m_dynamicRTPPayloadTypeH245_H2250LogicalChannelParameters::m_mediaPacketizationH245_H2250LogicalChannelParameters::m_transportCapabilityH245_H2250LogicalChannelParameters::m_redundancyEncodingH245_H2250LogicalChannelParameters::m_sourceH245_T38FaxRateManagementH245_T38FaxRateManagement::PCLASSINFOH245_T38FaxRateManagement::ChoicesH245_MiscellaneousCommand_type_progressiveRefinementStartH245_MiscellaneousCommand_type_progressiveRefinementStart::PCLASSINFOH245_MiscellaneousCommand_type_progressiveRefinementStart::m_repeatCountH245_OpenLogicalChannelAck_forwardMultiplexAckParametersH245_OpenLogicalChannelAck_forwardMultiplexAckParameters::PCLASSINFOH245_OpenLogicalChannelAck_forwardMultiplexAckParameters::ChoicesH245_OpenLogicalChannelAck_forwardMultiplexAckParameters::operator H245_H2250LogicalChannelAckParameters &H245_H2250LogicalChannelAckParameters &H245_G7231AnnexCCapability_g723AnnexCAudioMode::PCLASSINFOH245_G7231AnnexCCapability_g723AnnexCAudioMode::m_highRateMode0H245_G7231AnnexCCapability_g723AnnexCAudioMode::m_highRateMode1H245_G7231AnnexCCapability_g723AnnexCAudioMode::m_lowRateMode0H245_G7231AnnexCCapability_g723AnnexCAudioMode::m_lowRateMode1H245_G7231AnnexCCapability_g723AnnexCAudioMode::m_sidMode0H245_G7231AnnexCCapability_g723AnnexCAudioMode::m_sidMode1H245_PictureReferenceH245_PictureReference::PCLASSINFOH245_PictureReference::ChoicesH245_DataMode_application_t38faxH245_DataMode_application_t38fax::PCLASSINFOH245_DataMode_application_t38fax::m_t38FaxProtocolH245_DataMode_application_t38fax::m_t38FaxProfileH245_BEnhancementParametersH245_BEnhancementParameters::PCLASSINFOH245_BEnhancementParameters::m_enhancementOptionsH245_BEnhancementParameters::m_numberOfBPicturesH245_MiscellaneousIndication_type_videoNotDecodedMBsH245_MiscellaneousIndication_type_videoNotDecodedMBs::PCLASSINFOH245_MiscellaneousIndication_type_videoNotDecodedMBs::m_firstMBH245_MiscellaneousIndication_type_videoNotDecodedMBs::m_numberOfMBsH245_MiscellaneousIndication_type_videoNotDecodedMBs::m_temporalReferenceH245_ArrayOf_H263VideoModeCombos::PCLASSINFOH245_IS11172VideoCapabilityH245_IS11172VideoCapability::PCLASSINFOH245_IS11172VideoCapability::OptionalFieldsH245_IS11172VideoCapability::m_constrainedBitstreamH245_IS11172VideoCapability::m_videoBitRateH245_IS11172VideoCapability::m_vbvBufferSizeH245_IS11172VideoCapability::m_samplesPerLineH245_IS11172VideoCapability::m_linesPerFrameH245_IS11172VideoCapability::m_pictureRateH245_IS11172VideoCapability::m_luminanceSampleRateH245_IS11172VideoCapability::m_videoBadMBsCapH245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::PCLASSINFOH245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::ChoicesH245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::operator H245_H223LogicalChannelParameters &H245_H223LogicalChannelParameters &H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::operator H245_V76LogicalChannelParameters &H245_V76LogicalChannelParameters &H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::operator H245_H2250LogicalChannelParameters &H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::CreateObjectH245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::CloneH245_JitterIndication_scopeH245_JitterIndication_scope::PCLASSINFOH245_JitterIndication_scope::ChoicesH245_JitterIndication_scope::operator H245_LogicalChannelNumber &H245_H261VideoCapabilityH245_H261VideoCapability::PCLASSINFOH245_H261VideoCapability::OptionalFieldsH245_H261VideoCapability::m_qcifMPIH245_H261VideoCapability::m_cifMPIH245_H261VideoCapability::m_temporalSpatialTradeOffCapabilityH245_H261VideoCapability::m_maxBitRateH245_H261VideoCapability::m_stillImageTransmissionH245_H261VideoCapability::m_videoBadMBsCapH245_MobileMultilinkReconfigurationCommandH245_MobileMultilinkReconfigurationCommand::PCLASSINFOH245_MobileMultilinkReconfigurationCommand::m_sampleSizeH245_MobileMultilinkReconfigurationCommand::m_samplesPerFrameH245_MobileMultilinkReconfigurationCommand::m_statusH245_H222LogicalChannelParametersH245_H222LogicalChannelParameters::PCLASSINFOH245_H222LogicalChannelParameters::OptionalFieldsH245_H222LogicalChannelParameters::m_resourceIDH245_H222LogicalChannelParameters::m_subChannelIDH245_H222LogicalChannelParameters::m_pcr_pidH245_H222LogicalChannelParameters::m_programDescriptorsH245_H222LogicalChannelParameters::m_streamDescriptorsH245_VendorIdentificationH245_VendorIdentification::PCLASSINFOH245_VendorIdentification::OptionalFieldsH245_VendorIdentification::m_vendorH245_VendorIdentification::m_productNumberH245_VendorIdentification::m_versionNumberH245_NewATMVCIndication_aal_aal1_errorCorrection::PCLASSINFOH245_NewATMVCIndication_aal_aal1_errorCorrection::ChoicesH245_RemoteMCResponseH245_RemoteMCResponse::PCLASSINFOH245_RemoteMCResponse::ChoicesH245_RemoteMCResponse::operator H245_RemoteMCResponse_reject &H245_RemoteMCResponse_reject &H245_V76LogicalChannelParameters_mode::PCLASSINFOH245_V76LogicalChannelParameters_mode::ChoicesH245_V76LogicalChannelParameters_mode::operator H245_V76LogicalChannelParameters_mode_eRM &H245_V76LogicalChannelParameters_mode_eRM &H245_MediaChannelCapabilityH245_MediaChannelCapability::PCLASSINFOH245_MediaChannelCapability::OptionalFieldsH245_MediaChannelCapability::m_mediaTransportH245_MediaTransportTypeH245_MaintenanceLoopAckH245_MaintenanceLoopAck::PCLASSINFOH245_MaintenanceLoopAck::m_typeH245_AuthorizationParameters::PCLASSINFOH245_AuthorizationParameters::OptionalFieldsH245_AuthorizationParameters::m_nonStandardDataH245_UserInputIndication_encryptedAlphanumericH245_UserInputIndication_encryptedAlphanumeric::PCLASSINFOH245_UserInputIndication_encryptedAlphanumeric::OptionalFieldsH245_UserInputIndication_encryptedAlphanumeric::m_algorithmOIDH245_UserInputIndication_encryptedAlphanumeric::m_paramSH245_UserInputIndication_encryptedAlphanumeric::m_encryptedH245_IV16::PCLASSINFOH245_VideoCapabilityH245_VideoCapability::PCLASSINFOH245_VideoCapability::ChoicesH245_VideoCapability::operator H245_NonStandardParameter &H245_VideoCapability::operator H245_H261VideoCapability &H245_H261VideoCapability &H245_VideoCapability::operator H245_H262VideoCapability &H245_H262VideoCapability &H245_VideoCapability::operator H245_H263VideoCapability &H245_H263VideoCapability &H245_VideoCapability::operator H245_IS11172VideoCapability &H245_IS11172VideoCapability &H245_VideoCapability::operator H245_GenericCapability &H245_VideoCapability::operator H245_ExtendedVideoCapability &H245_ExtendedVideoCapability &H245_TerminalLabel::PCLASSINFOH245_TerminalLabel::m_mcuNumberH245_McuNumberH245_TerminalLabel::m_terminalNumberH245_NewATMVCCommand_multiplexH245_NewATMVCCommand_multiplex::PCLASSINFOH245_NewATMVCCommand_multiplex::ChoicesH245_VCCapabilityH245_VCCapability::PCLASSINFOH245_VCCapability::OptionalFieldsH245_VCCapability::m_aal1H245_VCCapability::m_aal5H245_VCCapability::m_transportStreamH245_VCCapability::m_programStreamH245_VCCapability::m_availableBitRatesH245_VCCapability_availableBitRatesH245_VCCapability::m_aal1ViaGatewayH245_MultiplexedStreamCapabilityH245_MultiplexedStreamCapability::PCLASSINFOH245_MultiplexedStreamCapability::OptionalFieldsH245_MultiplexedStreamCapability::m_multiplexFormatH245_MultiplexedStreamCapability::m_controlOnMuxStreamH245_MultiplexedStreamCapability::m_capabilityOnMuxStreamH245_H223LogicalChannelParameters_adaptationLayerType_al3H245_H223LogicalChannelParameters_adaptationLayerType_al3::PCLASSINFOH245_H223LogicalChannelParameters_adaptationLayerType_al3::m_controlFieldOctetsH245_H223LogicalChannelParameters_adaptationLayerType_al3::m_sendBufferSizeH245_H263VideoMode_resolution::PCLASSINFOH245_H263VideoMode_resolution::ChoicesH245_LogicalChannelRateRequestH245_LogicalChannelRateRequest::PCLASSINFOH245_LogicalChannelRateRequest::m_sequenceNumberH245_LogicalChannelRateRequest::m_logicalChannelNumberH245_LogicalChannelRateRequest::m_maximumBitRateH245_LogicalChannelRateRejectH245_LogicalChannelRateReject::PCLASSINFOH245_LogicalChannelRateReject::OptionalFieldsH245_LogicalChannelRateReject::m_sequenceNumberH245_LogicalChannelRateReject::m_logicalChannelNumberH245_LogicalChannelRateReject::m_rejectReasonH245_LogicalChannelRateReject::m_currentMaximumBitRateH245_H222CapabilityH245_H222Capability::PCLASSINFOH245_H222Capability::m_numberOfVCsH245_H222Capability::m_vcCapabilityH245_QOSType::PCLASSINFOH245_QOSType::ChoicesH245_AudioToneCapabilityH245_AudioToneCapability::PCLASSINFOH245_AudioToneCapability::m_dynamicRTPPayloadTypeH245_ATMParameters::PCLASSINFOH245_ATMParameters::m_maxNTUSizeH245_ATMParameters::m_atmUBRH245_ATMParameters::m_atmrtVBRH245_ATMParameters::m_atmnrtVBRH245_ATMParameters::m_atmABRH245_ATMParameters::m_atmCBRH245_IS11172AudioMode_audioLayer::PCLASSINFOH245_IS11172AudioMode_audioLayer::ChoicesH245_EncryptionCapability::PCLASSINFOH245_MasterSlaveDeterminationH245_MasterSlaveDetermination::PCLASSINFOH245_MasterSlaveDetermination::m_terminalTypeH245_MasterSlaveDetermination::m_statusDeterminationNumberH245_AudioMode::PCLASSINFOH245_AudioMode::ChoicesH245_AudioMode::operator H245_NonStandardParameter &H245_AudioMode::operator H245_AudioMode_g7231 &H245_AudioMode_g7231 &H245_AudioMode::operator H245_IS11172AudioMode &H245_IS11172AudioMode &H245_AudioMode::operator H245_IS13818AudioMode &H245_IS13818AudioMode &H245_AudioMode::operator H245_G7231AnnexCMode &H245_G7231AnnexCMode &H245_AudioMode::operator H245_GSMAudioCapability &H245_AudioMode::operator H245_GenericCapability &H245_AudioMode::operator H245_G729Extensions &H245_AudioMode::operator H245_VBDMode &H245_VBDMode &H245_ConferenceResponse_mCTerminalIDResponseH245_ConferenceResponse_mCTerminalIDResponse::PCLASSINFOH245_ConferenceResponse_mCTerminalIDResponse::m_terminalLabelH245_ConferenceResponse_mCTerminalIDResponse::m_terminalIDH245_ArrayOf_DialingInformationNetworkTypeH245_ArrayOf_DialingInformationNetworkType::PCLASSINFOH245_UserInputCapabilityH245_UserInputCapability::PCLASSINFOH245_UserInputCapability::ChoicesH245_UserInputCapability::operator H245_ArrayOf_NonStandardParameter &H245_ArrayOf_NonStandardParameter &H245_UserInputCapability::operator H245_GenericCapability &H245_CustomPictureClockFrequencyH245_CustomPictureClockFrequency::PCLASSINFOH245_CustomPictureClockFrequency::OptionalFieldsH245_CustomPictureClockFrequency::m_clockConversionCodeH245_CustomPictureClockFrequency::m_clockDivisorH245_CustomPictureClockFrequency::m_sqcifMPIH245_CustomPictureClockFrequency::m_qcifMPIH245_CustomPictureClockFrequency::m_cifMPIH245_CustomPictureClockFrequency::m_cif4MPIH245_CustomPictureClockFrequency::m_cif16MPIH245_DepFECMode_rfc2733Mode_mode_separateStreamH245_DepFECMode_rfc2733Mode_mode_separateStream::PCLASSINFOH245_DepFECMode_rfc2733Mode_mode_separateStream::ChoicesH245_DepFECMode_rfc2733Mode_mode_separateStream::operator H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort &H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort &H245_DepFECMode_rfc2733Mode_mode_separateStream::operator H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort &H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort &H245_ServicePriorityValue::PCLASSINFOH245_ServicePriorityValue::OptionalFieldsH245_ServicePriorityValue::m_nonStandardParameterH245_OpenLogicalChannel_reverseLogicalChannelParameters::PCLASSINFOH245_OpenLogicalChannel_reverseLogicalChannelParameters::OptionalFieldsH245_OpenLogicalChannel_reverseLogicalChannelParameters::m_dataTypeH245_OpenLogicalChannel_reverseLogicalChannelParameters::m_multiplexParametersH245_OpenLogicalChannel_reverseLogicalChannelParameters::m_reverseLogicalChannelDependencyH245_OpenLogicalChannel_reverseLogicalChannelParameters::m_replacementForH245_ConferenceResponse_extensionAddressResponseH245_ConferenceResponse_extensionAddressResponse::PCLASSINFOH245_ConferenceResponse_extensionAddressResponse::m_extensionAddressH245_UnicastAddress_iP6AddressH245_UnicastAddress_iP6Address::PCLASSINFOH245_UnicastAddress_iP6Address::m_networkH245_UnicastAddress_iP6Address::m_tsapIdentifierH245_H263Version3Options::PCLASSINFOH245_H263Version3Options::m_dataPartitionedSlicesH245_H263Version3Options::m_fixedPointIDCT0H245_H263Version3Options::m_interlacedFieldsH245_H263Version3Options::m_currentPictureHeaderRepetitionH245_H263Version3Options::m_previousPictureHeaderRepetitionH245_H263Version3Options::m_nextPictureHeaderRepetitionH245_H263Version3Options::m_pictureNumberH245_H263Version3Options::m_spareReferencePicturesH245_V76ModeParametersH245_V76ModeParameters::PCLASSINFOH245_V76ModeParameters::ChoicesH245_OpenLogicalChannelAck_reverseLogicalChannelParametersH245_OpenLogicalChannelAck_reverseLogicalChannelParameters::PCLASSINFOH245_OpenLogicalChannelAck_reverseLogicalChannelParameters::OptionalFieldsH245_OpenLogicalChannelAck_reverseLogicalChannelParameters::m_reverseLogicalChannelNumberH245_OpenLogicalChannelAck_reverseLogicalChannelParameters::m_portNumberH245_OpenLogicalChannelAck_reverseLogicalChannelParameters::m_multiplexParametersH245_OpenLogicalChannelAck_reverseLogicalChannelParameters::m_replacementForH245_ConferenceResponse_broadcastMyLogicalChannelResponseH245_ConferenceResponse_broadcastMyLogicalChannelResponse::PCLASSINFOH245_ConferenceResponse_broadcastMyLogicalChannelResponse::ChoicesH245_RedundancyEncodingCapabilityH245_RedundancyEncodingCapability::PCLASSINFOH245_RedundancyEncodingCapability::OptionalFieldsH245_RedundancyEncodingCapability::m_redundancyEncodingMethodH245_RedundancyEncodingCapability::m_primaryEncodingH245_RedundancyEncodingCapability::m_secondaryEncodingH245_ArrayOf_CapabilityTableEntryNumberH245_TransportCapability::PCLASSINFOH245_TransportCapability::OptionalFieldsH245_TransportCapability::m_nonStandardH245_TransportCapability::m_qOSCapabilitiesH245_ArrayOf_QOSCapabilityH245_TransportCapability::m_mediaChannelCapabilitiesH245_T38FaxProfile::PCLASSINFOH245_T38FaxProfile::OptionalFieldsH245_T38FaxProfile::m_fillBitRemovalH245_T38FaxProfile::m_transcodingJBIGH245_T38FaxProfile::m_transcodingMMRH245_T38FaxProfile::m_versionH245_T38FaxProfile::m_t38FaxRateManagementH245_T38FaxProfile::m_t38FaxUdpOptionsH245_T38FaxProfile::m_t38FaxTcpOptionsH245_H263VideoCapabilityH245_H263VideoCapability::PCLASSINFOH245_H263VideoCapability::OptionalFieldsH245_H263VideoCapability::m_sqcifMPIH245_H263VideoCapability::m_qcifMPIH245_H263VideoCapability::m_cifMPIH245_H263VideoCapability::m_cif4MPIH245_H263VideoCapability::m_cif16MPIH245_H263VideoCapability::m_maxBitRateH245_H263VideoCapability::m_unrestrictedVectorH245_H263VideoCapability::m_arithmeticCodingH245_H263VideoCapability::m_advancedPredictionH245_H263VideoCapability::m_pbFramesH245_H263VideoCapability::m_temporalSpatialTradeOffCapabilityH245_H263VideoCapability::m_hrd_BH245_H263VideoCapability::m_bppMaxKbH245_H263VideoCapability::m_slowSqcifMPIH245_H263VideoCapability::m_slowQcifMPIH245_H263VideoCapability::m_slowCifMPIH245_H263VideoCapability::m_slowCif4MPIH245_H263VideoCapability::m_slowCif16MPIH245_H263VideoCapability::m_errorCompensationH245_H263VideoCapability::m_enhancementLayerInfoH245_H263VideoCapability::m_h263OptionsH245_H235MediaH245_H235Media::PCLASSINFOH245_H235Media::m_encryptionAuthenticationAndIntegrityH245_H235Media::m_mediaTypeH245_VCCapability_availableBitRates::PCLASSINFOH245_VCCapability_availableBitRates::m_typeH245_MiscellaneousCommand_type_lostPartialPictureH245_MiscellaneousCommand_type_lostPartialPicture::PCLASSINFOH245_MiscellaneousCommand_type_lostPartialPicture::m_pictureReferenceH245_MiscellaneousCommand_type_lostPartialPicture::m_firstMBH245_MiscellaneousCommand_type_lostPartialPicture::m_numberOfMBsH245_ArrayOf_GenericInformation::PCLASSINFOH245_MasterSlaveDeterminationReject_cause::PCLASSINFOH245_MasterSlaveDeterminationReject_cause::ChoicesH245_DialingInformationNumberH245_DialingInformationNumber::PCLASSINFOH245_DialingInformationNumber::OptionalFieldsH245_DialingInformationNumber::m_networkAddressH245_DialingInformationNumber::m_subAddressH245_DialingInformationNumber::m_networkTypeH245_IndicationMessageH245_IndicationMessage::PCLASSINFOH245_IndicationMessage::ChoicesH245_IndicationMessage::operator H245_NonStandardMessage &H245_IndicationMessage::operator H245_FunctionNotUnderstood &H245_IndicationMessage::operator H245_MasterSlaveDeterminationRelease &H245_MasterSlaveDeterminationRelease &H245_IndicationMessage::operator H245_TerminalCapabilitySetRelease &H245_TerminalCapabilitySetRelease &H245_IndicationMessage::operator H245_OpenLogicalChannelConfirm &H245_IndicationMessage::operator H245_RequestChannelCloseRelease &H245_IndicationMessage::operator H245_MultiplexEntrySendRelease &H245_MultiplexEntrySendRelease &H245_IndicationMessage::operator H245_RequestMultiplexEntryRelease &H245_RequestMultiplexEntryRelease &H245_IndicationMessage::operator H245_RequestModeRelease &H245_RequestModeRelease &H245_IndicationMessage::operator H245_MiscellaneousIndication &H245_MiscellaneousIndication &H245_IndicationMessage::operator H245_JitterIndication &H245_JitterIndication &H245_IndicationMessage::operator H245_H223SkewIndication &H245_H223SkewIndication &H245_IndicationMessage::operator H245_NewATMVCIndication &H245_NewATMVCIndication &H245_IndicationMessage::operator H245_UserInputIndication &H245_IndicationMessage::operator H245_H2250MaximumSkewIndication &H245_H2250MaximumSkewIndication &H245_IndicationMessage::operator H245_MCLocationIndication &H245_MCLocationIndication &H245_IndicationMessage::operator H245_ConferenceIndication &H245_ConferenceIndication &H245_IndicationMessage::operator H245_VendorIdentification &H245_VendorIdentification &H245_IndicationMessage::operator H245_FunctionNotSupported &H245_FunctionNotSupported &H245_IndicationMessage::operator H245_MultilinkIndication &H245_MultilinkIndication &H245_IndicationMessage::operator H245_LogicalChannelRateRelease &H245_LogicalChannelRateRelease &H245_IndicationMessage::operator H245_FlowControlIndication &H245_FlowControlIndication &H245_IndicationMessage::operator H245_MobileMultilinkReconfigurationIndication &H245_MobileMultilinkReconfigurationIndication &H245_IndicationMessage::operator H245_GenericMessage &H245_ArrayOf_RTPH263VideoRedundancyFrameMappingH245_ArrayOf_RTPH263VideoRedundancyFrameMapping::PCLASSINFOH245_UserInputIndication_signalUpdate_rtp::PCLASSINFOH245_UserInputIndication_signalUpdate_rtp::m_logicalChannelNumberH245_MiscellaneousCommand_type::PCLASSINFOH245_MiscellaneousCommand_type::ChoicesH245_MiscellaneousCommand_type::operator H245_MiscellaneousCommand_type_videoFastUpdateGOB &H245_MiscellaneousCommand_type_videoFastUpdateGOB &H245_MiscellaneousCommand_type::operator H245_MiscellaneousCommand_type_videoFastUpdateMB &H245_MiscellaneousCommand_type_videoFastUpdateMB &H245_MiscellaneousCommand_type::operator H245_EncryptionSync &H245_EncryptionSync &H245_MiscellaneousCommand_type::operator H245_EncryptionUpdateRequest &H245_EncryptionUpdateRequest &H245_MiscellaneousCommand_type::operator H245_MiscellaneousCommand_type_progressiveRefinementStart &H245_MiscellaneousCommand_type_progressiveRefinementStart &H245_MiscellaneousCommand_type::operator H245_MiscellaneousCommand_type_videoBadMBs &H245_MiscellaneousCommand_type_videoBadMBs &H245_MiscellaneousCommand_type::operator H245_ArrayOf_PictureReference &H245_ArrayOf_PictureReference &H245_MiscellaneousCommand_type::operator H245_MiscellaneousCommand_type_lostPartialPicture &H245_MiscellaneousCommand_type_lostPartialPicture &H245_MiscellaneousCommand_type::operator H245_MiscellaneousCommand_type_encryptionUpdateCommand &H245_MiscellaneousCommand_type_encryptionUpdateCommand &H245_MiscellaneousCommand_type::operator H245_MiscellaneousCommand_type_encryptionUpdateAck &H245_MiscellaneousCommand_type_encryptionUpdateAck &H245_MultiplexedStreamParameterH245_MultiplexedStreamParameter::PCLASSINFOH245_MultiplexedStreamParameter::m_multiplexFormatH245_MultiplexedStreamParameter::m_controlOnMuxStreamH245_ArrayOf_MultiplexEntryRejectionDescriptionsH245_ArrayOf_MultiplexEntryRejectionDescriptions::PCLASSINFOH245_NetworkAccessParametersH245_NetworkAccessParameters::PCLASSINFOH245_NetworkAccessParameters::OptionalFieldsH245_NetworkAccessParameters::m_distributionH245_NetworkAccessParameters_distributionH245_NetworkAccessParameters::m_networkAddressH245_NetworkAccessParameters::m_associateConferenceH245_NetworkAccessParameters::m_externalReferenceH245_NetworkAccessParameters::m_t120SetupProcedureH245_NetworkAccessParameters_t120SetupProcedureH245_VCCapability_availableBitRates_type_rangeOfBitRatesH245_VCCapability_availableBitRates_type_rangeOfBitRates::PCLASSINFOH245_VCCapability_availableBitRates_type_rangeOfBitRates::m_lowerBitRateH245_VCCapability_availableBitRates_type_rangeOfBitRates::m_higherBitRateH245_TerminalYouAreSeeingInSubPictureNumberH245_TerminalYouAreSeeingInSubPictureNumber::PCLASSINFOH245_TerminalYouAreSeeingInSubPictureNumber::m_terminalNumberH245_TerminalYouAreSeeingInSubPictureNumber::m_subPictureNumberH245_FECCapabilityH245_FECCapability::PCLASSINFOH245_FECCapability::OptionalFieldsH245_FECCapability::m_protectedCapabilityH245_FECCapability::m_fecSchemeH245_FECCapability::m_rfc2733FormatH245_NetworkAccessParameters_distribution::PCLASSINFOH245_NetworkAccessParameters_distribution::ChoicesH245_ConferenceResponse_terminalCertificateResponseH245_ConferenceResponse_terminalCertificateResponse::PCLASSINFOH245_ConferenceResponse_terminalCertificateResponse::OptionalFieldsH245_ConferenceResponse_terminalCertificateResponse::m_terminalLabelH245_ConferenceResponse_terminalCertificateResponse::m_certificateResponseH245_SequenceNumber::PCLASSINFOH245_RTPH263VideoRedundancyFrameMappingH245_RTPH263VideoRedundancyFrameMapping::PCLASSINFOH245_RTPH263VideoRedundancyFrameMapping::m_threadNumberH245_RTPH263VideoRedundancyFrameMapping::m_frameSequenceH245_MultiplexEntryRejectionDescriptions_cause::PCLASSINFOH245_MultiplexEntryRejectionDescriptions_cause::ChoicesH245_V75Parameters::PCLASSINFOH245_V75Parameters::m_audioHeaderPresentH245_MultilinkResponseH245_MultilinkResponse::PCLASSINFOH245_MultilinkResponse::ChoicesH245_MultilinkResponse::operator H245_NonStandardMessage &H245_MultilinkResponse::operator H245_MultilinkResponse_callInformation &H245_MultilinkResponse_callInformation &H245_MultilinkResponse::operator H245_MultilinkResponse_addConnection &H245_MultilinkResponse_addConnection &H245_MultilinkResponse::operator H245_MultilinkResponse_removeConnection &H245_MultilinkResponse_removeConnection &H245_MultilinkResponse::operator H245_MultilinkResponse_maximumHeaderInterval &H245_MultilinkResponse_maximumHeaderInterval &H245_MasterSlaveDeterminationAck_decision::PCLASSINFOH245_MasterSlaveDeterminationAck_decision::ChoicesH245_CustomPictureFormat_mPI::PCLASSINFOH245_CustomPictureFormat_mPI::OptionalFieldsH245_CustomPictureFormat_mPI::m_standardMPIH245_CustomPictureFormat_mPI::m_customPCFH245_DataApplicationCapability_applicationH245_DataApplicationCapability_application::PCLASSINFOH245_DataApplicationCapability_application::ChoicesH245_DataApplicationCapability_application::operator H245_NonStandardParameter &H245_DataApplicationCapability_application::operator H245_DataProtocolCapability &H245_DataApplicationCapability_application::operator H245_DataApplicationCapability_application_t84 &H245_DataApplicationCapability_application_t84 &H245_DataApplicationCapability_application::operator H245_DataApplicationCapability_application_nlpid &H245_DataApplicationCapability_application_nlpid &H245_DataApplicationCapability_application::operator H245_DataApplicationCapability_application_t38fax &H245_DataApplicationCapability_application_t38fax &H245_DataApplicationCapability_application::operator H245_GenericCapability &H245_ModeElementH245_ModeElement::PCLASSINFOH245_ModeElement::OptionalFieldsH245_ModeElement::m_typeH245_ModeElement::m_h223ModeParametersH245_ModeElement::m_v76ModeParametersH245_ModeElement::m_h2250ModeParametersH245_H2250ModeParametersH245_ModeElement::m_genericModeParametersH245_ModeElement::m_multiplexedStreamModeParametersH245_MultiplexedStreamModeParametersH245_ModeElement::m_logicalChannelNumberH245_H223Capability_mobileMultilinkFrameCapability::PCLASSINFOH245_H223Capability_mobileMultilinkFrameCapability::m_maximumSampleSizeH245_H223Capability_mobileMultilinkFrameCapability::m_maximumPayloadLengthH245_McuNumber::PCLASSINFOH245_T84Profile_t84RestrictedH245_T84Profile_t84Restricted::PCLASSINFOH245_T84Profile_t84Restricted::m_qcifH245_T84Profile_t84Restricted::m_cifH245_T84Profile_t84Restricted::m_ccir601SeqH245_T84Profile_t84Restricted::m_ccir601ProgH245_T84Profile_t84Restricted::m_hdtvSeqH245_T84Profile_t84Restricted::m_hdtvProgH245_T84Profile_t84Restricted::m_g3FacsMH200x100H245_T84Profile_t84Restricted::m_g3FacsMH200x200H245_T84Profile_t84Restricted::m_g4FacsMMR200x100H245_T84Profile_t84Restricted::m_g4FacsMMR200x200H245_T84Profile_t84Restricted::m_jbig200x200SeqH245_T84Profile_t84Restricted::m_jbig200x200ProgH245_T84Profile_t84Restricted::m_jbig300x300SeqH245_T84Profile_t84Restricted::m_jbig300x300ProgH245_T84Profile_t84Restricted::m_digPhotoLowH245_T84Profile_t84Restricted::m_digPhotoMedSeqH245_T84Profile_t84Restricted::m_digPhotoMedProgH245_T84Profile_t84Restricted::m_digPhotoHighSeqH245_T84Profile_t84Restricted::m_digPhotoHighProgH245_MultilinkResponse_addConnection_responseCode_rejectedH245_MultilinkResponse_addConnection_responseCode_rejected::PCLASSINFOH245_MultilinkResponse_addConnection_responseCode_rejected::ChoicesH245_VBDCapabilityH245_VBDCapability::PCLASSINFOH245_VBDCapability::m_typeH245_MediaTransportType_atm_AAL5_compressedH245_MediaTransportType_atm_AAL5_compressed::PCLASSINFOH245_MediaTransportType_atm_AAL5_compressed::m_variable_deltaH245_RequestChannelCloseAckH245_RequestChannelCloseAck::PCLASSINFOH245_RequestChannelCloseAck::m_forwardLogicalChannelNumberH245_UnicastAddress_iPSourceRouteAddressH245_UnicastAddress_iPSourceRouteAddress::PCLASSINFOH245_UnicastAddress_iPSourceRouteAddress::m_routingH245_UnicastAddress_iPSourceRouteAddress::m_networkH245_UnicastAddress_iPSourceRouteAddress::m_tsapIdentifierH245_UnicastAddress_iPSourceRouteAddress::m_routeH245_ArrayOf_AlternativeCapabilitySet::PCLASSINFOH245_MiscellaneousCommand_type_videoBadMBsH245_MiscellaneousCommand_type_videoBadMBs::PCLASSINFOH245_MiscellaneousCommand_type_videoBadMBs::m_firstMBH245_MiscellaneousCommand_type_videoBadMBs::m_numberOfMBsH245_MiscellaneousCommand_type_videoBadMBs::m_temporalReferenceH245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::PCLASSINFOH245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::ChoicesH245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::operator H245_H222LogicalChannelParameters &H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::operator H245_H223LogicalChannelParameters &H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::operator H245_V76LogicalChannelParameters &H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::operator H245_H2250LogicalChannelParameters &H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::CreateObjectH245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::CloneH245_ConferenceResponse_makeMeChairResponseH245_ConferenceResponse_makeMeChairResponse::PCLASSINFOH245_ConferenceResponse_makeMeChairResponse::ChoicesH245_ArrayOf_CapabilityDescriptorNumberH245_ArrayOf_CapabilityDescriptorNumber::PCLASSINFOH245_MulticastAddress_iP6AddressH245_MulticastAddress_iP6Address::PCLASSINFOH245_MulticastAddress_iP6Address::m_networkH245_MulticastAddress_iP6Address::m_tsapIdentifierH245_EnhancementLayerInfo::PCLASSINFOH245_EnhancementLayerInfo::OptionalFieldsH245_EnhancementLayerInfo::m_baseBitRateConstrainedH245_EnhancementLayerInfo::m_snrEnhancementH245_EnhancementLayerInfo::m_spatialEnhancementH245_EnhancementLayerInfo::m_bPictureEnhancementH245_NetworkAccessParameters_t120SetupProcedure::PCLASSINFOH245_NetworkAccessParameters_t120SetupProcedure::ChoicesH245_AudioCapability_g7231H245_AudioCapability_g7231::PCLASSINFOH245_AudioCapability_g7231::m_maxAl_sduAudioFramesH245_AudioCapability_g7231::m_silenceSuppressionH245_IS13818AudioModeH245_IS13818AudioMode::PCLASSINFOH245_IS13818AudioMode::m_audioLayerH245_IS13818AudioMode::m_audioSamplingH245_IS13818AudioMode::m_multichannelTypeH245_IS13818AudioMode_multichannelTypeH245_IS13818AudioMode::m_lowFrequencyEnhancementH245_IS13818AudioMode::m_multilingualH245_IS13818AudioMode::m_bitRateH245_OpenLogicalChannelConfirmH245_OpenLogicalChannelConfirm::PCLASSINFOH245_OpenLogicalChannelConfirm::OptionalFieldsH245_OpenLogicalChannelConfirm::m_forwardLogicalChannelNumberH245_OpenLogicalChannelConfirm::m_genericInformationH245_MultipointCapability::PCLASSINFOH245_MultipointCapability::m_multicastCapabilityH245_MultipointCapability::m_multiUniCastConferenceH245_MultipointCapability::m_mediaDistributionCapabilityH245_ArrayOf_CustomPictureClockFrequency::PCLASSINFOH245_H261VideoModeH245_H261VideoMode::PCLASSINFOH245_H261VideoMode::m_resolutionH245_H261VideoMode::m_bitRateH245_H261VideoMode::m_stillImageTransmissionH245_RequestMessageH245_RequestMessage::PCLASSINFOH245_RequestMessage::ChoicesH245_RequestMessage::operator H245_NonStandardMessage &H245_RequestMessage::operator H245_MasterSlaveDetermination &H245_RequestMessage::operator H245_TerminalCapabilitySet &H245_RequestMessage::operator H245_OpenLogicalChannel &H245_RequestMessage::operator H245_CloseLogicalChannel &H245_RequestMessage::operator H245_RequestChannelClose &H245_RequestMessage::operator H245_MultiplexEntrySend &H245_MultiplexEntrySend &H245_RequestMessage::operator H245_RequestMultiplexEntry &H245_RequestMultiplexEntry &H245_RequestMessage::operator H245_RequestMode &H245_RequestMessage::operator H245_RoundTripDelayRequest &H245_RequestMessage::operator H245_MaintenanceLoopRequest &H245_MaintenanceLoopRequest &H245_RequestMessage::operator H245_CommunicationModeRequest &H245_CommunicationModeRequest &H245_RequestMessage::operator H245_ConferenceRequest &H245_ConferenceRequest &H245_RequestMessage::operator H245_MultilinkRequest &H245_MultilinkRequest &H245_RequestMessage::operator H245_LogicalChannelRateRequest &H245_LogicalChannelRateRequest &H245_RequestMessage::operator H245_GenericMessage &H245_TerminalCapabilitySetReject_cause::PCLASSINFOH245_TerminalCapabilitySetReject_cause::ChoicesH245_TerminalCapabilitySetReject_cause::operator H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded &H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded &H245_NewATMVCCommand_reverseParameters_multiplex::PCLASSINFOH245_NewATMVCCommand_reverseParameters_multiplex::ChoicesH245_MiscellaneousCommand_type_encryptionUpdateCommandH245_MiscellaneousCommand_type_encryptionUpdateCommand::PCLASSINFOH245_MiscellaneousCommand_type_encryptionUpdateCommand::OptionalFieldsH245_MiscellaneousCommand_type_encryptionUpdateCommand::m_encryptionSyncH245_MiscellaneousCommand_type_encryptionUpdateCommand::m_multiplePayloadStreamH245_UnicastAddress_iPXAddressH245_UnicastAddress_iPXAddress::PCLASSINFOH245_UnicastAddress_iPXAddress::m_nodeH245_UnicastAddress_iPXAddress::m_netnumH245_UnicastAddress_iPXAddress::m_tsapIdentifierH245_RequestChannelCloseReleaseH245_RequestChannelCloseRelease::PCLASSINFOH245_RequestChannelCloseRelease::m_forwardLogicalChannelNumberH245_H235Mode_mediaModeH245_H235Mode_mediaMode::PCLASSINFOH245_H235Mode_mediaMode::ChoicesH245_H235Mode_mediaMode::operator H245_NonStandardParameter &H245_H235Mode_mediaMode::operator H245_VideoMode &H245_H235Mode_mediaMode::operator H245_AudioMode &H245_AudioMode &H245_H235Mode_mediaMode::operator H245_DataMode &H245_DataMode &H245_MultiplexedStreamModeParameters::PCLASSINFOH245_MultiplexedStreamModeParameters::m_logicalChannelNumberH245_H2250ModeParameters::PCLASSINFOH245_H2250ModeParameters::OptionalFieldsH245_H2250ModeParameters::m_redundancyEncodingModeH245_H223AL1MParameters_arqType::PCLASSINFOH245_H223AL1MParameters_arqType::ChoicesH245_H223AL1MParameters_arqType::operator H245_H223AnnexCArqParameters &H245_H223LogicalChannelParameters_adaptationLayerType::PCLASSINFOH245_H223LogicalChannelParameters_adaptationLayerType::ChoicesH245_H223LogicalChannelParameters_adaptationLayerType::operator H245_NonStandardParameter &H245_H223LogicalChannelParameters_adaptationLayerType::operator H245_H223LogicalChannelParameters_adaptationLayerType_al3 &H245_H223LogicalChannelParameters_adaptationLayerType_al3 &H245_H223LogicalChannelParameters_adaptationLayerType::operator H245_H223AL1MParameters &H245_H223LogicalChannelParameters_adaptationLayerType::operator H245_H223AL2MParameters &H245_H223LogicalChannelParameters_adaptationLayerType::operator H245_H223AL3MParameters &H245_ArrayOf_DialingInformationNumberH245_ArrayOf_DialingInformationNumber::PCLASSINFOH245_RequestModeReject_cause::PCLASSINFOH245_RequestModeReject_cause::ChoicesH245_DepFECData_rfc2733_mode_separateStream_differentPortH245_DepFECData_rfc2733_mode_separateStream_differentPort::PCLASSINFOH245_DepFECData_rfc2733_mode_separateStream_differentPort::OptionalFieldsH245_DepFECData_rfc2733_mode_separateStream_differentPort::m_protectedSessionIDH245_DepFECData_rfc2733_mode_separateStream_differentPort::m_protectedPayloadTypeH245_DepFECCapability_rfc2733_separateStream::PCLASSINFOH245_DepFECCapability_rfc2733_separateStream::m_separatePortH245_DepFECCapability_rfc2733_separateStream::m_samePortH245_RTPH263VideoRedundancyEncoding_containedThreads::PCLASSINFOH245_SendTerminalCapabilitySet_specificRequestH245_SendTerminalCapabilitySet_specificRequest::PCLASSINFOH245_SendTerminalCapabilitySet_specificRequest::OptionalFieldsH245_SendTerminalCapabilitySet_specificRequest::m_multiplexCapabilityH245_SendTerminalCapabilitySet_specificRequest::m_capabilityTableEntryNumbersH245_SendTerminalCapabilitySet_specificRequest::m_capabilityDescriptorNumbersH245_FlowControlIndication_scope::PCLASSINFOH245_FlowControlIndication_scope::ChoicesH245_FlowControlIndication_scope::operator H245_LogicalChannelNumber &H245_MediaTransportType::PCLASSINFOH245_MediaTransportType::ChoicesH245_MediaTransportType::operator H245_MediaTransportType_atm_AAL5_compressed &H245_MediaTransportType_atm_AAL5_compressed &H245_ConferenceRequest_requestTerminalCertificateH245_ConferenceRequest_requestTerminalCertificate::PCLASSINFOH245_ConferenceRequest_requestTerminalCertificate::OptionalFieldsH245_ConferenceRequest_requestTerminalCertificate::m_terminalLabelH245_ConferenceRequest_requestTerminalCertificate::m_certSelectionCriteriaH245_ConferenceRequest_requestTerminalCertificate::m_sRandomH245_DepFECMode_rfc2733Mode_mode_separateStream_differentPortH245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort::PCLASSINFOH245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort::OptionalFieldsH245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort::m_protectedSessionIDH245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort::m_protectedPayloadTypeH245_RequestMultiplexEntryReleaseH245_RequestMultiplexEntryRelease::PCLASSINFOH245_RequestMultiplexEntryRelease::m_entryNumbersH245_H223AnnexCArqParametersH245_H223AnnexCArqParameters::PCLASSINFOH245_H223AnnexCArqParameters::m_numberOfRetransmissionsH245_H223AnnexCArqParameters::m_sendBufferSizeH245_ConferenceID::PCLASSINFOH245_FunctionNotSupported_cause::PCLASSINFOH245_FunctionNotSupported_cause::ChoicesH245_H223Capability_h223MultiplexTableCapability::PCLASSINFOH245_H223Capability_h223MultiplexTableCapability::ChoicesH245_H223Capability_h223MultiplexTableCapability::operator H245_H223Capability_h223MultiplexTableCapability_enhanced &H245_H223Capability_h223MultiplexTableCapability_enhanced &H245_Q2931AddressH245_Q2931Address::PCLASSINFOH245_Q2931Address::OptionalFieldsH245_Q2931Address::m_addressH245_Q2931Address_addressH245_Q2931Address::m_subaddressH245_MultilinkResponse_addConnection_responseCodeH245_MultilinkResponse_addConnection_responseCode::PCLASSINFOH245_MultilinkResponse_addConnection_responseCode::ChoicesH245_MultilinkResponse_addConnection_responseCode::operator H245_MultilinkResponse_addConnection_responseCode_rejected &H245_MultilinkResponse_addConnection_responseCode_rejected &H245_DataMode_application_nlpidH245_DataMode_application_nlpid::PCLASSINFOH245_DataMode_application_nlpid::m_nlpidProtocolH245_DataMode_application_nlpid::m_nlpidDataH245_JitterIndicationH245_JitterIndication::PCLASSINFOH245_JitterIndication::OptionalFieldsH245_JitterIndication::m_scopeH245_JitterIndication::m_estimatedReceivedJitterMantissaH245_JitterIndication::m_estimatedReceivedJitterExponentH245_JitterIndication::m_skippedFrameCountH245_JitterIndication::m_additionalDecoderBufferH245_H2250MaximumSkewIndicationH245_H2250MaximumSkewIndication::PCLASSINFOH245_H2250MaximumSkewIndication::m_logicalChannelNumber1H245_H2250MaximumSkewIndication::m_logicalChannelNumber2H245_H2250MaximumSkewIndication::m_maximumSkewH245_CriteriaH245_Criteria::PCLASSINFOH245_Criteria::m_fieldH245_Criteria::m_valueH245_RedundancyEncodingMode_secondaryEncoding::PCLASSINFOH245_RedundancyEncodingMode_secondaryEncoding::ChoicesH245_RedundancyEncodingMode_secondaryEncoding::operator H245_NonStandardParameter &H245_RedundancyEncodingMode_secondaryEncoding::operator H245_AudioMode &H245_CloseLogicalChannelAckH245_CloseLogicalChannelAck::PCLASSINFOH245_CloseLogicalChannelAck::m_forwardLogicalChannelNumberH245_MultiplexElementH245_MultiplexElement::PCLASSINFOH245_MultiplexElement::m_typeH245_MultiplexElement::m_repeatCountH245_ArrayOf_RedundancyEncodingCapability::PCLASSINFOH245_ArrayOf_GenericCapability::PCLASSINFOH245_EncryptionUpdateDirection::PCLASSINFOH245_EncryptionUpdateDirection::ChoicesH245_ArrayOf_VideoCapability::PCLASSINFOH245_OpenLogicalChannelH245_OpenLogicalChannel::PCLASSINFOH245_OpenLogicalChannel::OptionalFieldsH245_OpenLogicalChannel::m_forwardLogicalChannelNumberH245_OpenLogicalChannel::m_forwardLogicalChannelParametersH245_OpenLogicalChannel::m_reverseLogicalChannelParametersH245_OpenLogicalChannel::m_separateStackH245_OpenLogicalChannel::m_encryptionSyncH245_OpenLogicalChannel::m_genericInformationH245_QOSMode::PCLASSINFOH245_QOSMode::ChoicesH245_ArrayOf_CapabilityTableEntryNumber::PCLASSINFOH245_H235ModeH245_H235Mode::PCLASSINFOH245_H235Mode::m_encryptionAuthenticationAndIntegrityH245_H235Mode::m_mediaModeH245_EndSessionCommand_isdnOptionsH245_EndSessionCommand_isdnOptions::PCLASSINFOH245_EndSessionCommand_isdnOptions::ChoicesH245_CommunicationModeTableEntryH245_CommunicationModeTableEntry::PCLASSINFOH245_CommunicationModeTableEntry::OptionalFieldsH245_CommunicationModeTableEntry::m_nonStandardH245_CommunicationModeTableEntry::m_sessionIDH245_CommunicationModeTableEntry::m_associatedSessionIDH245_CommunicationModeTableEntry::m_terminalLabelH245_CommunicationModeTableEntry::m_sessionDescriptionH245_CommunicationModeTableEntry::m_dataTypeH245_CommunicationModeTableEntry::m_mediaChannelH245_CommunicationModeTableEntry::m_mediaGuaranteedDeliveryH245_CommunicationModeTableEntry::m_mediaControlChannelH245_CommunicationModeTableEntry::m_mediaControlGuaranteedDeliveryH245_CommunicationModeTableEntry::m_redundancyEncodingH245_CommunicationModeTableEntry::m_sessionDependencyH245_CommunicationModeTableEntry::m_destinationH245_CustomPictureFormat_pixelAspectInformation_pixelAspectCodeH245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode::PCLASSINFOH245_RedundancyEncodingDTModeElement_type::PCLASSINFOH245_RedundancyEncodingDTModeElement_type::ChoicesH245_RedundancyEncodingDTModeElement_type::operator H245_NonStandardParameter &H245_RedundancyEncodingDTModeElement_type::operator H245_VideoMode &H245_RedundancyEncodingDTModeElement_type::operator H245_AudioMode &H245_RedundancyEncodingDTModeElement_type::operator H245_DataMode &H245_RedundancyEncodingDTModeElement_type::operator H245_EncryptionMode &H245_RedundancyEncodingDTModeElement_type::operator H245_H235Mode &H245_H235Mode &H245_RedundancyEncodingDTModeElement_type::operator H245_FECMode &H245_FECMode &H245_Q2931Address_address::PCLASSINFOH245_Q2931Address_address::ChoicesH245_MultiplexCapability::PCLASSINFOH245_MultiplexCapability::ChoicesH245_MultiplexCapability::operator H245_NonStandardParameter &H245_MultiplexCapability::operator H245_H222Capability &H245_MultiplexCapability::operator H245_H223Capability &H245_MultiplexCapability::operator H245_V76Capability &H245_V76Capability &H245_MultiplexCapability::operator H245_H2250Capability &H245_H2250Capability &H245_MultiplexCapability::operator H245_GenericCapability &H245_IS13818AudioMode_multichannelType::PCLASSINFOH245_IS13818AudioMode_multichannelType::ChoicesH245_ArrayOf_CapabilityDescriptor::PCLASSINFOH245_ArrayOf_RTPPayloadType::PCLASSINFOH245_ArrayOf_MultiplexElement::PCLASSINFOH245_GenericInformationH245_GenericInformation::PCLASSINFOH245_H223MultiplexReconfiguration_h223AnnexADoubleFlagH245_H223MultiplexReconfiguration_h223AnnexADoubleFlag::PCLASSINFOH245_H223MultiplexReconfiguration_h223AnnexADoubleFlag::ChoicesH245_ArrayOf_CustomPictureFormat::PCLASSINFOH245_Capability_h233EncryptionReceiveCapabilityH245_Capability_h233EncryptionReceiveCapability::PCLASSINFOH245_Capability_h233EncryptionReceiveCapability::m_h233IVResponseTimeH245_H223SkewIndicationH245_H223SkewIndication::PCLASSINFOH245_H223SkewIndication::m_logicalChannelNumber1H245_H223SkewIndication::m_logicalChannelNumber2H245_H223SkewIndication::m_skewH245_DataApplicationCapability_application_nlpidH245_DataApplicationCapability_application_nlpid::PCLASSINFOH245_DataApplicationCapability_application_nlpid::m_nlpidProtocolH245_DataApplicationCapability_application_nlpid::m_nlpidDataH245_MultiplexTableEntryNumber::PCLASSINFOH245_GSMAudioCapabilityH245_GSMAudioCapability::PCLASSINFOH245_GSMAudioCapability::m_audioUnitSizeH245_GSMAudioCapability::m_comfortNoiseH245_GSMAudioCapability::m_scrambledH245_MultilinkRequestH245_MultilinkRequest::PCLASSINFOH245_MultilinkRequest::ChoicesH245_MultilinkRequest::operator H245_NonStandardMessage &H245_MultilinkRequest::operator H245_MultilinkRequest_callInformation &H245_MultilinkRequest_callInformation &H245_MultilinkRequest::operator H245_MultilinkRequest_addConnection &H245_MultilinkRequest_addConnection &H245_MultilinkRequest::operator H245_MultilinkRequest_removeConnection &H245_MultilinkRequest_removeConnection &H245_MultilinkRequest::operator H245_MultilinkRequest_maximumHeaderInterval &H245_MultilinkRequest_maximumHeaderInterval &H245_NewATMVCCommand_aal_aal1_errorCorrection::PCLASSINFOH245_NewATMVCCommand_aal_aal1_errorCorrection::ChoicesH245_ArrayOf_ParameterIdentifier::PCLASSINFOH245_DataModeH245_DataMode::PCLASSINFOH245_DataMode::m_applicationH245_DataMode::m_bitRateH245_MultilinkResponse_addConnectionH245_MultilinkResponse_addConnection::PCLASSINFOH245_MultilinkResponse_addConnection::m_sequenceNumberH245_MultilinkResponse_addConnection::m_responseCodeH245_ConferenceCommandH245_ConferenceCommand::PCLASSINFOH245_ConferenceCommand::ChoicesH245_ConferenceCommand::operator H245_LogicalChannelNumber &H245_ConferenceCommand::operator H245_TerminalLabel &H245_ConferenceCommand::operator H245_SubstituteConferenceIDCommand &H245_SubstituteConferenceIDCommand &H245_H262VideoCapabilityH245_H262VideoCapability::PCLASSINFOH245_H262VideoCapability::OptionalFieldsH245_H262VideoCapability::m_profileAndLevel_SPatMLH245_H262VideoCapability::m_profileAndLevel_MPatLLH245_H262VideoCapability::m_profileAndLevel_MPatMLH245_H262VideoCapability::m_profileAndLevel_MPatH_14H245_H262VideoCapability::m_profileAndLevel_MPatHLH245_H262VideoCapability::m_profileAndLevel_SNRatLLH245_H262VideoCapability::m_profileAndLevel_SNRatMLH245_H262VideoCapability::m_profileAndLevel_SpatialatH_14H245_H262VideoCapability::m_profileAndLevel_HPatMLH245_H262VideoCapability::m_profileAndLevel_HPatH_14H245_H262VideoCapability::m_profileAndLevel_HPatHLH245_H262VideoCapability::m_videoBitRateH245_H262VideoCapability::m_vbvBufferSizeH245_H262VideoCapability::m_samplesPerLineH245_H262VideoCapability::m_linesPerFrameH245_H262VideoCapability::m_framesPerSecondH245_H262VideoCapability::m_luminanceSampleRateH245_H262VideoCapability::m_videoBadMBsCapH245_DataApplicationCapability_application_t38faxH245_DataApplicationCapability_application_t38fax::PCLASSINFOH245_DataApplicationCapability_application_t38fax::m_t38FaxProtocolH245_DataApplicationCapability_application_t38fax::m_t38FaxProfileH245_UserInputIndication_userInputSupportIndicationH245_UserInputIndication_userInputSupportIndication::PCLASSINFOH245_UserInputIndication_userInputSupportIndication::ChoicesH245_UserInputIndication_userInputSupportIndication::operator H245_NonStandardParameter &H245_V76LogicalChannelParameters_suspendResume::PCLASSINFOH245_V76LogicalChannelParameters_suspendResume::ChoicesH245_DataProtocolCapability_v76wCompressionH245_DataProtocolCapability_v76wCompression::PCLASSINFOH245_DataProtocolCapability_v76wCompression::ChoicesH245_DataProtocolCapability_v76wCompression::operator H245_CompressionType &H245_CompressionType &H245_NewATMVCCommandH245_NewATMVCCommand::PCLASSINFOH245_NewATMVCCommand::m_resourceIDH245_NewATMVCCommand::m_bitRateH245_NewATMVCCommand::m_bitRateLockedToPCRClockH245_NewATMVCCommand::m_bitRateLockedToNetworkClockH245_NewATMVCCommand::m_aalH245_NewATMVCCommand::m_multiplexH245_NewATMVCCommand::m_reverseParametersH245_MultiplexEntrySendRejectH245_MultiplexEntrySendReject::PCLASSINFOH245_MultiplexEntrySendReject::m_sequenceNumberH245_MultiplexEntrySendReject::m_rejectionDescriptionsH245_DataApplicationCapabilityH245_DataApplicationCapability::PCLASSINFOH245_DataApplicationCapability::m_applicationH245_DataApplicationCapability::m_maxBitRateH245_DepFECData_rfc2733_mode::PCLASSINFOH245_DepFECData_rfc2733_mode::ChoicesH245_DepFECData_rfc2733_mode::operator H245_DepFECData_rfc2733_mode_separateStream &H245_DepFECData_rfc2733_mode_separateStream &H245_MultilinkRequest_callInformationH245_MultilinkRequest_callInformation::PCLASSINFOH245_MultilinkRequest_callInformation::m_maxNumberOfAdditionalConnectionsH245_IV8::PCLASSINFOH245_TransparencyParameters::PCLASSINFOH245_TransparencyParameters::m_presentationOrderH245_TransparencyParameters::m_offset_xH245_TransparencyParameters::m_offset_yH245_TransparencyParameters::m_scale_xH245_TransparencyParameters::m_scale_yH245_UserInputIndication_extendedAlphanumericH245_UserInputIndication_extendedAlphanumeric::PCLASSINFOH245_UserInputIndication_extendedAlphanumeric::OptionalFieldsH245_UserInputIndication_extendedAlphanumeric::m_alphanumericH245_UserInputIndication_extendedAlphanumeric::m_rtpPayloadIndicationH245_UserInputIndication_extendedAlphanumeric::m_encryptedAlphanumericH245_OpenLogicalChannelAckH245_OpenLogicalChannelAck::PCLASSINFOH245_OpenLogicalChannelAck::OptionalFieldsH245_OpenLogicalChannelAck::m_forwardLogicalChannelNumberH245_OpenLogicalChannelAck::m_reverseLogicalChannelParametersH245_OpenLogicalChannelAck::m_separateStackH245_OpenLogicalChannelAck::m_forwardMultiplexAckParametersH245_OpenLogicalChannelAck::m_encryptionSyncH245_OpenLogicalChannelAck::m_genericInformationH245_AuthenticationCapability::PCLASSINFOH245_AuthenticationCapability::OptionalFieldsH245_AuthenticationCapability::m_nonStandardH245_AuthenticationCapability::m_antiSpamAlgorithmH245_EncryptionModeH245_EncryptionMode::PCLASSINFOH245_EncryptionMode::ChoicesH245_EncryptionMode::operator H245_NonStandardParameter &H245_ArrayOf_QOSCapability::PCLASSINFOH245_MultilinkIndicationH245_MultilinkIndication::PCLASSINFOH245_MultilinkIndication::ChoicesH245_MultilinkIndication::operator H245_NonStandardMessage &H245_MultilinkIndication::operator H245_MultilinkIndication_crcDesired &H245_MultilinkIndication_crcDesired &H245_MultilinkIndication::operator H245_MultilinkIndication_excessiveError &H245_MultilinkIndication_excessiveError &H245_ModeElementType::PCLASSINFOH245_ModeElementType::ChoicesH245_ModeElementType::operator H245_NonStandardParameter &H245_ModeElementType::operator H245_VideoMode &H245_ModeElementType::operator H245_AudioMode &H245_ModeElementType::operator H245_DataMode &H245_ModeElementType::operator H245_EncryptionMode &H245_ModeElementType::operator H245_H235Mode &H245_ModeElementType::operator H245_MultiplexedStreamParameter &H245_ModeElementType::operator H245_RedundancyEncodingDTMode &H245_RedundancyEncodingDTMode &H245_ModeElementType::operator H245_MultiplePayloadStreamMode &H245_MultiplePayloadStreamMode &H245_ModeElementType::operator H245_DepFECMode &H245_DepFECMode &H245_ModeElementType::operator H245_FECMode &H245_V76LogicalChannelParameters_mode_eRM_recovery::PCLASSINFOH245_V76LogicalChannelParameters_mode_eRM_recovery::ChoicesD:\openh323\include\h248.hH248_TopologyRequestH248_TopologyRequest::PCLASSINFOH248_TopologyRequest::OptionalFieldsH248_TopologyRequest::m_terminationFromH248_TerminationIDH248_TopologyRequest::m_terminationToH248_TopologyRequest::m_topologyDirectionH248_TopologyRequest_topologyDirectionH248_TopologyRequest::m_streamIDH248_StreamIDH248_PackagesItemH248_PackagesItem::PCLASSINFOH248_PackagesItem::m_packageNameH248_NameH248_PackagesItem::m_packageVersionH248_EventBufferDescriptorH248_EventBufferDescriptor::PCLASSINFOH248_ErrorDescriptorH248_ErrorDescriptor::PCLASSINFOH248_ErrorDescriptor::OptionalFieldsH248_ErrorDescriptor::m_errorCodeH248_ErrorCodeH248_ErrorDescriptor::m_errorTextH248_ErrorTextH248_ArrayOf_SignalH248_ArrayOf_Signal::PCLASSINFOH248_TransactionPendingH248_TransactionPending::PCLASSINFOH248_TransactionPending::m_transactionIdH248_TransactionIdH248_SecurityParmIndexH248_SecurityParmIndex::PCLASSINFOH248_RequestedEventH248_RequestedEvent::PCLASSINFOH248_RequestedEvent::OptionalFieldsH248_RequestedEvent::m_pkgdNameH248_PkgdNameH248_RequestedEvent::m_streamIDH248_RequestedEvent::m_eventActionH248_RequestedActionsH248_RequestedEvent::m_evParListH248_ArrayOf_EventParameterH248_TransactionAckH248_TransactionAck::PCLASSINFOH248_TransactionAck::OptionalFieldsH248_TransactionAck::m_firstAckH248_TransactionAck::m_lastAckH248_ServiceChangeParmH248_ServiceChangeParm::PCLASSINFOH248_ServiceChangeParm::OptionalFieldsH248_ServiceChangeParm::m_serviceChangeMethodH248_ServiceChangeMethodH248_ServiceChangeParm::m_serviceChangeAddressH248_ServiceChangeAddressH248_ServiceChangeParm::m_serviceChangeVersionH248_ServiceChangeParm::m_serviceChangeProfileH248_ServiceChangeProfileH248_ServiceChangeParm::m_serviceChangeReasonH248_ValueH248_ServiceChangeParm::m_serviceChangeDelayH248_ServiceChangeParm::m_serviceChangeMgcIdH248_MIdH248_ServiceChangeParm::m_timeStampH248_TimeNotationH248_ServiceChangeParm::m_nonStandardDataH248_NonStandardDataH248_ServiceChangeParm::m_serviceChangeInfoH248_AuditDescriptorH248_TopologyRequest_topologyDirection::PCLASSINFOH248_TopologyRequest_topologyDirection::EnumerationsH248_StreamModeH248_StreamMode::PCLASSINFOH248_StreamMode::EnumerationsH248_IndAudPropertyGroupH248_IndAudPropertyGroup::PCLASSINFOH248_LocalControlDescriptorH248_LocalControlDescriptor::PCLASSINFOH248_LocalControlDescriptor::OptionalFieldsH248_LocalControlDescriptor::m_streamModeH248_LocalControlDescriptor::m_reserveValueH248_LocalControlDescriptor::m_reserveGroupH248_LocalControlDescriptor::m_propertyParmsH248_ArrayOf_PropertyParmH248_SignalNameH248_PkgdName::PCLASSINFOH248_SignalName::PCLASSINFOH248_MediaDescriptor_streamsH248_MediaDescriptor_streams::PCLASSINFOH248_MediaDescriptor_streams::ChoicesH248_MediaDescriptor_streams::operator H248_StreamParms &H248_StreamParms &H248_MediaDescriptor_streams::operator H248_ArrayOf_StreamDescriptor &H248_ArrayOf_StreamDescriptor &H248_ActionReplyH248_ActionReply::PCLASSINFOH248_ActionReply::OptionalFieldsH248_ActionReply::m_contextIdH248_ContextIDH248_ActionReply::m_errorDescriptorH248_ActionReply::m_contextReplyH248_ContextRequestH248_ActionReply::m_commandReplyH248_ArrayOf_CommandReplyH248_AuditResultH248_AuditResult::PCLASSINFOH248_AuditResult::m_terminationIDH248_AuditResult::m_terminationAuditResultH248_TerminationAuditH248_ServiceChangeProfile::PCLASSINFOH248_ServiceChangeProfile::m_profileNameH248_StreamDescriptorH248_StreamDescriptor::PCLASSINFOH248_StreamDescriptor::m_streamIDH248_StreamDescriptor::m_streamParmsH248_StreamParmsH248_AuditReplyH248_AuditReply::PCLASSINFOH248_AuditReply::ChoicesH248_AuditReply::operator H248_TerminationIDList &H248_TerminationIDList &H248_AuditReply::operator H248_ErrorDescriptor &H248_ErrorDescriptor &H248_AuditReply::operator H248_AuditResult &H248_AuditResult &H248_SigParameter_extraInfoH248_SigParameter_extraInfo::PCLASSINFOH248_SigParameter_extraInfo::ChoicesH248_SigParameter_extraInfo::operator H248_Relation &H248_IndAudStreamDescriptorH248_IndAudStreamDescriptor::PCLASSINFOH248_IndAudStreamDescriptor::m_streamIDH248_IndAudStreamDescriptor::m_streamParmsH248_IndAudStreamParmsH248_EventSpecH248_EventSpec::PCLASSINFOH248_EventSpec::OptionalFieldsH248_EventSpec::m_eventNameH248_EventNameH248_EventSpec::m_streamIDH248_EventSpec::m_eventParListH248_ServiceChangeResParmH248_ServiceChangeResParm::PCLASSINFOH248_ServiceChangeResParm::OptionalFieldsH248_ServiceChangeResParm::m_serviceChangeMgcIdH248_ServiceChangeResParm::m_serviceChangeAddressH248_ServiceChangeResParm::m_serviceChangeVersionH248_ServiceChangeResParm::m_serviceChangeProfileH248_ServiceChangeResParm::m_timestampH248_EventParameterH248_EventParameter::PCLASSINFOH248_EventParameter::OptionalFieldsH248_EventParameter::m_eventParameterNameH248_EventParameter::m_valueH248_EventParameter::m_extraInfoH248_EventParameter_extraInfoH248_ServiceChangeRequestH248_ServiceChangeRequest::PCLASSINFOH248_ServiceChangeRequest::m_terminationIDH248_TerminationIDListH248_ServiceChangeRequest::m_serviceChangeParmsH248_NonStandardData::PCLASSINFOH248_NonStandardData::m_nonStandardIdentifierH248_NonStandardIdentifierH248_NonStandardData::m_dataH248_IndAudStreamParms::PCLASSINFOH248_IndAudStreamParms::OptionalFieldsH248_IndAudStreamParms::m_localControlDescriptorH248_IndAudLocalControlDescriptorH248_IndAudStreamParms::m_localDescriptorH248_IndAudLocalRemoteDescriptorH248_IndAudStreamParms::m_remoteDescriptorH248_AmmDescriptorH248_AmmDescriptor::PCLASSINFOH248_AmmDescriptor::ChoicesH248_AmmDescriptor::operator H248_MediaDescriptor &H248_MediaDescriptor &H248_AmmDescriptor::operator H248_ModemDescriptor &H248_ModemDescriptor &H248_AmmDescriptor::operator H248_MuxDescriptor &H248_MuxDescriptor &H248_AmmDescriptor::operator H248_EventsDescriptor &H248_EventsDescriptor &H248_AmmDescriptor::operator H248_EventBufferDescriptor &H248_EventBufferDescriptor &H248_AmmDescriptor::operator H248_SignalsDescriptor &H248_SignalsDescriptor &H248_AmmDescriptor::operator H248_DigitMapDescriptor &H248_DigitMapDescriptor &H248_AmmDescriptor::operator H248_AuditDescriptor &H248_AuditDescriptor &H248_AuditRequestH248_AuditRequest::PCLASSINFOH248_AuditRequest::m_terminationIDH248_AuditRequest::m_auditDescriptorH248_NotifyRequestH248_NotifyRequest::PCLASSINFOH248_NotifyRequest::OptionalFieldsH248_NotifyRequest::m_terminationIDH248_NotifyRequest::m_observedEventsDescriptorH248_ObservedEventsDescriptorH248_NotifyRequest::m_errorDescriptorH248_StreamID::PCLASSINFOH248_ArrayOf_StreamDescriptorH248_ArrayOf_StreamDescriptor::PCLASSINFOH248_IndAudMediaDescriptorH248_IndAudMediaDescriptor::PCLASSINFOH248_IndAudMediaDescriptor::OptionalFieldsH248_IndAudMediaDescriptor::m_termStateDescrH248_IndAudTerminationStateDescriptorH248_IndAudMediaDescriptor::m_streamsH248_IndAudMediaDescriptor_streamsH248_AuditDescriptor::PCLASSINFOH248_AuditDescriptor::OptionalFieldsH248_AuditDescriptor::m_auditTokenH248_AuditDescriptor::m_auditPropertyTokenH248_ArrayOf_IndAuditParameterH248_ServiceStateH248_ServiceState::PCLASSINFOH248_ServiceState::EnumerationsH248_ArrayOf_TopologyRequestH248_ArrayOf_TopologyRequest::PCLASSINFOH248_DigitMapDescriptorH248_DigitMapDescriptor::PCLASSINFOH248_DigitMapDescriptor::OptionalFieldsH248_DigitMapDescriptor::m_digitMapNameH248_DigitMapNameH248_DigitMapDescriptor::m_digitMapValueH248_DigitMapValueH248_RequestIDH248_RequestID::PCLASSINFOH248_ModemTypeH248_ModemType::PCLASSINFOH248_ModemType::EnumerationsH248_IndAudSeqSigListH248_IndAudSeqSigList::PCLASSINFOH248_IndAudSeqSigList::OptionalFieldsH248_IndAudSeqSigList::m_idH248_IndAudSeqSigList::m_signalListH248_IndAudSignalH248_ArrayOf_WildcardFieldH248_ArrayOf_WildcardField::PCLASSINFOH248_MediaDescriptorH248_MediaDescriptor::PCLASSINFOH248_MediaDescriptor::OptionalFieldsH248_MediaDescriptor::m_termStateDescrH248_TerminationStateDescriptorH248_MediaDescriptor::m_streamsH248_ArrayOf_ActionRequestH248_ArrayOf_ActionRequest::PCLASSINFOH248_Value::PCLASSINFOH248_IndAudPropertyParmH248_IndAudPropertyParm::PCLASSINFOH248_IndAudPropertyParm::m_nameH248_IndAudMediaDescriptor_streams::PCLASSINFOH248_IndAudMediaDescriptor_streams::ChoicesH248_IndAudMediaDescriptor_streams::operator H248_IndAudStreamParms &H248_IndAudStreamParms &H248_IndAudMediaDescriptor_streams::operator H248_ArrayOf_IndAudStreamDescriptor &H248_ArrayOf_IndAudStreamDescriptor &H248_TerminationIDList::PCLASSINFOH248_ArrayOf_ActionReplyH248_ArrayOf_ActionReply::PCLASSINFOH248_SubtractRequestH248_SubtractRequest::PCLASSINFOH248_SubtractRequest::OptionalFieldsH248_SubtractRequest::m_terminationIDH248_SubtractRequest::m_auditDescriptorH248_NotifyReplyH248_NotifyReply::PCLASSINFOH248_NotifyReply::OptionalFieldsH248_NotifyReply::m_terminationIDH248_NotifyReply::m_errorDescriptorH248_ContextID::PCLASSINFOH248_MuxDescriptorH248_MuxDescriptor::PCLASSINFOH248_MuxDescriptor::OptionalFieldsH248_MuxDescriptor::m_muxTypeH248_MuxTypeH248_MuxDescriptor::m_termListH248_ArrayOf_TerminationIDH248_MuxDescriptor::m_nonStandardDataH248_ArrayOf_TerminationID::PCLASSINFOH248_TransactionH248_Transaction::PCLASSINFOH248_Transaction::ChoicesH248_Transaction::operator H248_TransactionRequest &H248_TransactionRequest &H248_Transaction::operator H248_TransactionPending &H248_TransactionPending &H248_Transaction::operator H248_TransactionReply &H248_TransactionReply &H248_Transaction::operator H248_TransactionResponseAck &H248_TransactionResponseAck &H248_SecondRequestedEventH248_SecondRequestedEvent::PCLASSINFOH248_SecondRequestedEvent::OptionalFieldsH248_SecondRequestedEvent::m_pkgdNameH248_SecondRequestedEvent::m_streamIDH248_SecondRequestedEvent::m_eventActionH248_SecondRequestedActionsH248_SecondRequestedEvent::m_evParListH248_SignalTypeH248_SignalType::PCLASSINFOH248_SignalType::EnumerationsH248_AuditReturnParameterH248_AuditReturnParameter::PCLASSINFOH248_AuditReturnParameter::ChoicesH248_AuditReturnParameter::operator H248_ErrorDescriptor &H248_AuditReturnParameter::operator H248_MediaDescriptor &H248_AuditReturnParameter::operator H248_ModemDescriptor &H248_AuditReturnParameter::operator H248_MuxDescriptor &H248_AuditReturnParameter::operator H248_EventsDescriptor &H248_AuditReturnParameter::operator H248_EventBufferDescriptor &H248_AuditReturnParameter::operator H248_SignalsDescriptor &H248_AuditReturnParameter::operator H248_DigitMapDescriptor &H248_AuditReturnParameter::operator H248_ObservedEventsDescriptor &H248_ObservedEventsDescriptor &H248_AuditReturnParameter::operator H248_StatisticsDescriptor &H248_StatisticsDescriptor &H248_AuditReturnParameter::operator H248_PackagesDescriptor &H248_PackagesDescriptor &H248_AuditReturnParameter::operator H248_AuditDescriptor &H248_DigitMapValue::PCLASSINFOH248_DigitMapValue::OptionalFieldsH248_DigitMapValue::m_startTimerH248_DigitMapValue::m_shortTimerH248_DigitMapValue::m_longTimerH248_DigitMapValue::m_digitMapBodyH248_DigitMapValue::m_durationTimerH248_ServiceChangeAddress::PCLASSINFOH248_ServiceChangeAddress::ChoicesH248_ServiceChangeAddress::operator H248_IP4Address &H248_IP4Address &H248_ServiceChangeAddress::operator H248_IP6Address &H248_IP6Address &H248_ServiceChangeAddress::operator H248_DomainName &H248_DomainName &H248_ServiceChangeAddress::operator H248_PathName &H248_PropertyParm_extraInfoH248_PropertyParm_extraInfo::PCLASSINFOH248_PropertyParm_extraInfo::ChoicesH248_PropertyParm_extraInfo::operator H248_Relation &H248_ArrayOf_EventParameter::PCLASSINFOH248_IP6AddressH248_IP6Address::PCLASSINFOH248_IP6Address::OptionalFieldsH248_IP6Address::m_addressH248_IP6Address::m_portNumberH248_ServiceChangeMethod::PCLASSINFOH248_ServiceChangeMethod::EnumerationsH248_TransactionReplyH248_TransactionReply::PCLASSINFOH248_TransactionReply::OptionalFieldsH248_TransactionReply::m_transactionIdH248_TransactionReply::m_immAckRequiredH248_TransactionReply::m_transactionResultH248_TransactionReply_transactionResultH248_CommandRequestH248_CommandRequest::PCLASSINFOH248_CommandRequest::OptionalFieldsH248_CommandRequest::m_commandH248_CommandH248_CommandRequest::m_optionalH248_CommandRequest::m_wildcardReturnH248_WildcardFieldH248_WildcardField::PCLASSINFOH248_ServiceChangeReplyH248_ServiceChangeReply::PCLASSINFOH248_ServiceChangeReply::m_terminationIDH248_ServiceChangeReply::m_serviceChangeResultH248_ServiceChangeResultH248_TerminationStateDescriptor::PCLASSINFOH248_TerminationStateDescriptor::OptionalFieldsH248_TerminationStateDescriptor::m_propertyParmsH248_TerminationStateDescriptor::m_eventBufferControlH248_EventBufferControlH248_TerminationStateDescriptor::m_serviceStateH248_SigParameterH248_SigParameter::PCLASSINFOH248_SigParameter::OptionalFieldsH248_SigParameter::m_sigParameterNameH248_SigParameter::m_valueH248_SigParameter::m_extraInfoH248_TransactionReply_transactionResult::PCLASSINFOH248_TransactionReply_transactionResult::ChoicesH248_TransactionReply_transactionResult::operator H248_ErrorDescriptor &H248_TransactionReply_transactionResult::operator H248_ArrayOf_ActionReply &H248_ArrayOf_ActionReply &H248_StatisticsDescriptorH248_StatisticsDescriptor::PCLASSINFOH248_MegacoMessageH248_MegacoMessage::PCLASSINFOH248_MegacoMessage::OptionalFieldsH248_MegacoMessage::m_authHeaderH248_AuthenticationHeaderH248_MegacoMessage::m_messH248_MessageH248_TransactionId::PCLASSINFOH248_ArrayOf_SigParameterH248_ArrayOf_SigParameter::PCLASSINFOH248_ArrayOf_CommandReply::PCLASSINFOH248_PropertyParmH248_PropertyParm::PCLASSINFOH248_PropertyParm::OptionalFieldsH248_PropertyParm::m_nameH248_PropertyParm::m_valueH248_ArrayOf_PASN_OctetStringH248_PropertyParm::m_extraInfoH248_ArrayOf_PASN_OctetString::PCLASSINFOH248_ArrayOf_AmmDescriptorH248_ArrayOf_AmmDescriptor::PCLASSINFOH248_ObservedEventH248_ObservedEvent::PCLASSINFOH248_ObservedEvent::OptionalFieldsH248_ObservedEvent::m_eventNameH248_ObservedEvent::m_streamIDH248_ObservedEvent::m_eventParListH248_ObservedEvent::m_timeNotationH248_PropertyGroupH248_PropertyGroup::PCLASSINFOH248_Message_messageBodyH248_Message_messageBody::PCLASSINFOH248_Message_messageBody::ChoicesH248_Message_messageBody::operator H248_ErrorDescriptor &H248_Message_messageBody::operator H248_ArrayOf_Transaction &H248_ArrayOf_Transaction &H248_SignalRequestH248_SignalRequest::PCLASSINFOH248_SignalRequest::ChoicesH248_SignalRequest::operator H248_Signal &H248_SignalRequest::operator H248_SeqSigList &H248_SeqSigList &H248_Command::PCLASSINFOH248_Command::ChoicesH248_Command::operator H248_AmmRequest &H248_AmmRequest &H248_Command::operator H248_SubtractRequest &H248_SubtractRequest &H248_Command::operator H248_AuditRequest &H248_AuditRequest &H248_Command::operator H248_NotifyRequest &H248_NotifyRequest &H248_Command::operator H248_ServiceChangeRequest &H248_ServiceChangeRequest &H248_SeqSigListH248_SeqSigList::PCLASSINFOH248_SeqSigList::m_idH248_SeqSigList::m_signalListH248_IndAudLocalRemoteDescriptor::PCLASSINFOH248_IndAudLocalRemoteDescriptor::OptionalFieldsH248_IndAudLocalRemoteDescriptor::m_propGroupIDH248_IndAudLocalRemoteDescriptor::m_propGrpsH248_SecondEventsDescriptorH248_SecondEventsDescriptor::PCLASSINFOH248_SecondEventsDescriptor::OptionalFieldsH248_SecondEventsDescriptor::m_requestIDH248_SecondEventsDescriptor::m_eventListH248_ArrayOf_SecondRequestedEventH248_IndAudStatisticsDescriptorH248_IndAudStatisticsDescriptor::PCLASSINFOH248_IndAudStatisticsDescriptor::m_statNameH248_StatisticsParameterH248_StatisticsParameter::PCLASSINFOH248_StatisticsParameter::OptionalFieldsH248_StatisticsParameter::m_statNameH248_StatisticsParameter::m_statValueH248_IP4AddressH248_IP4Address::PCLASSINFOH248_IP4Address::OptionalFieldsH248_IP4Address::m_addressH248_IP4Address::m_portNumberH248_IndAudSignalsDescriptorH248_IndAudSignalsDescriptor::PCLASSINFOH248_IndAudSignalsDescriptor::ChoicesH248_IndAudSignalsDescriptor::operator H248_IndAudSignal &H248_IndAudSignal &H248_IndAudSignalsDescriptor::operator H248_IndAudSeqSigList &H248_IndAudSeqSigList &H248_SignalsDescriptorH248_SignalsDescriptor::PCLASSINFOH248_EventParameter_extraInfo::PCLASSINFOH248_EventParameter_extraInfo::ChoicesH248_EventParameter_extraInfo::operator H248_Relation &H248_SecondRequestedActions::PCLASSINFOH248_SecondRequestedActions::OptionalFieldsH248_SecondRequestedActions::m_keepActiveH248_SecondRequestedActions::m_eventDMH248_EventDMH248_SecondRequestedActions::m_signalsDescriptorH248_Name::PCLASSINFOH248_ErrorText::PCLASSINFOH248_EventName::PCLASSINFOH248_TimeNotation::PCLASSINFOH248_TimeNotation::m_dateH248_TimeNotation::m_timeH248_AuthDataH248_AuthData::PCLASSINFOH248_IndAudEventBufferDescriptorH248_IndAudEventBufferDescriptor::PCLASSINFOH248_IndAudEventBufferDescriptor::OptionalFieldsH248_IndAudEventBufferDescriptor::m_eventNameH248_IndAudEventBufferDescriptor::m_streamIDH248_ArrayOf_TransactionH248_ArrayOf_Transaction::PCLASSINFOH248_EventBufferControl::PCLASSINFOH248_EventBufferControl::EnumerationsH248_IndAudSignal::PCLASSINFOH248_IndAudSignal::OptionalFieldsH248_IndAudSignal::m_signalNameH248_IndAudSignal::m_streamIDH248_ModemDescriptorH248_ModemDescriptor::PCLASSINFOH248_ModemDescriptor::OptionalFieldsH248_ModemDescriptor::m_mtlH248_ArrayOf_ModemTypeH248_ModemDescriptor::m_mplH248_ModemDescriptor::m_nonStandardDataH248_ArrayOf_IndAudPropertyParmH248_ArrayOf_IndAudPropertyParm::PCLASSINFOH248_ErrorCode::PCLASSINFOH248_IndAudDigitMapDescriptorH248_IndAudDigitMapDescriptor::PCLASSINFOH248_IndAudDigitMapDescriptor::OptionalFieldsH248_IndAudDigitMapDescriptor::m_digitMapNameH248_ArrayOf_PropertyParm::PCLASSINFOH248_StreamParms::PCLASSINFOH248_StreamParms::OptionalFieldsH248_StreamParms::m_localControlDescriptorH248_StreamParms::m_localDescriptorH248_LocalRemoteDescriptorH248_StreamParms::m_remoteDescriptorH248_ContextRequest::PCLASSINFOH248_ContextRequest::OptionalFieldsH248_ContextRequest::m_priorityH248_ContextRequest::m_emergencyH248_ContextRequest::m_topologyReqH248_LocalRemoteDescriptor::PCLASSINFOH248_LocalRemoteDescriptor::m_propGrpsH248_ArrayOf_PropertyGroupH248_PackagesDescriptorH248_PackagesDescriptor::PCLASSINFOH248_ArrayOf_ObservedEventH248_ArrayOf_ObservedEvent::PCLASSINFOH248_ArrayOf_SecondRequestedEvent::PCLASSINFOH248_RequestedActions::PCLASSINFOH248_RequestedActions::OptionalFieldsH248_RequestedActions::m_keepActiveH248_RequestedActions::m_eventDMH248_RequestedActions::m_secondEventH248_RequestedActions::m_signalsDescriptorH248_ObservedEventsDescriptor::PCLASSINFOH248_ObservedEventsDescriptor::m_requestIdH248_ObservedEventsDescriptor::m_observedEventLstH248_NonStandardIdentifier::PCLASSINFOH248_NonStandardIdentifier::ChoicesH248_NonStandardIdentifier::operator H248_H221NonStandard &H248_H221NonStandard &H248_EventDM::PCLASSINFOH248_EventDM::ChoicesH248_EventDM::operator H248_DigitMapName &H248_EventDM::operator H248_DigitMapValue &H248_DigitMapValue &H248_IndAudPackagesDescriptorH248_IndAudPackagesDescriptor::PCLASSINFOH248_IndAudPackagesDescriptor::m_packageNameH248_IndAudPackagesDescriptor::m_packageVersionH248_ArrayOf_RequestedEventH248_ArrayOf_RequestedEvent::PCLASSINFOH248_ServiceChangeResult::PCLASSINFOH248_ServiceChangeResult::ChoicesH248_ServiceChangeResult::operator H248_ErrorDescriptor &H248_ServiceChangeResult::operator H248_ServiceChangeResParm &H248_ServiceChangeResParm &H248_ArrayOf_CommandRequestH248_ArrayOf_CommandRequest::PCLASSINFOH248_AmmRequestH248_AmmRequest::PCLASSINFOH248_AmmRequest::m_terminationIDH248_AmmRequest::m_descriptorsH248_MId::PCLASSINFOH248_MId::ChoicesH248_MId::operator H248_IP4Address &H248_MId::operator H248_IP6Address &H248_MId::operator H248_DomainName &H248_MId::operator H248_PathName &H248_TerminationID::PCLASSINFOH248_TerminationID::m_wildcardH248_TerminationID::m_idH248_IndAudTerminationStateDescriptor::PCLASSINFOH248_IndAudTerminationStateDescriptor::OptionalFieldsH248_IndAudTerminationStateDescriptor::m_propertyParmsH248_IndAudTerminationStateDescriptor::m_eventBufferControlH248_IndAudTerminationStateDescriptor::m_serviceStateH248_CommandReplyH248_CommandReply::PCLASSINFOH248_CommandReply::ChoicesH248_CommandReply::operator H248_AmmsReply &H248_AmmsReply &H248_CommandReply::operator H248_AuditReply &H248_AuditReply &H248_CommandReply::operator H248_NotifyReply &H248_NotifyReply &H248_CommandReply::operator H248_ServiceChangeReply &H248_ServiceChangeReply &H248_ArrayOf_IndAuditParameter::PCLASSINFOH248_DigitMapName::PCLASSINFOH248_AuthenticationHeader::PCLASSINFOH248_AuthenticationHeader::m_secParmIndexH248_AuthenticationHeader::m_seqNumH248_SequenceNumH248_AuthenticationHeader::m_adH248_ArrayOf_PropertyGroup::PCLASSINFOH248_ActionRequestH248_ActionRequest::PCLASSINFOH248_ActionRequest::OptionalFieldsH248_ActionRequest::m_contextIdH248_ActionRequest::m_contextRequestH248_ActionRequest::m_contextAttrAuditReqH248_ContextAttrAuditRequestH248_ActionRequest::m_commandRequestsH248_NotifyCompletionH248_NotifyCompletion::PCLASSINFOH248_ContextAttrAuditRequest::PCLASSINFOH248_ContextAttrAuditRequest::OptionalFieldsH248_ContextAttrAuditRequest::m_topologyH248_ContextAttrAuditRequest::m_emergencyH248_ContextAttrAuditRequest::m_priorityH248_Message::PCLASSINFOH248_Message::m_versionH248_Message::m_mIdH248_Message::m_messageBodyH248_TransactionRequestH248_TransactionRequest::PCLASSINFOH248_TransactionRequest::m_transactionIdH248_TransactionRequest::m_actionsH248_DomainNameH248_DomainName::PCLASSINFOH248_DomainName::OptionalFieldsH248_DomainName::m_nameH248_DomainName::m_portNumberH248_TerminationAudit::PCLASSINFOH248_SignalH248_Signal::PCLASSINFOH248_Signal::OptionalFieldsH248_Signal::m_signalNameH248_Signal::m_streamIDH248_Signal::m_sigTypeH248_Signal::m_durationH248_Signal::m_notifyCompletionH248_Signal::m_keepActiveH248_Signal::m_sigParListH248_SequenceNum::PCLASSINFOH248_RelationH248_Relation::PCLASSINFOH248_Relation::EnumerationsH248_IndAuditParameterH248_IndAuditParameter::PCLASSINFOH248_IndAuditParameter::ChoicesH248_IndAuditParameter::operator H248_IndAudMediaDescriptor &H248_IndAudMediaDescriptor &H248_IndAuditParameter::operator H248_IndAudEventsDescriptor &H248_IndAudEventsDescriptor &H248_IndAuditParameter::operator H248_IndAudEventBufferDescriptor &H248_IndAudEventBufferDescriptor &H248_IndAuditParameter::operator H248_IndAudSignalsDescriptor &H248_IndAudSignalsDescriptor &H248_IndAuditParameter::operator H248_IndAudDigitMapDescriptor &H248_IndAudDigitMapDescriptor &H248_IndAuditParameter::operator H248_IndAudStatisticsDescriptor &H248_IndAudStatisticsDescriptor &H248_IndAuditParameter::operator H248_IndAudPackagesDescriptor &H248_IndAudPackagesDescriptor &H248_H221NonStandardH248_H221NonStandard::PCLASSINFOH248_H221NonStandard::m_t35CountryCode1H248_H221NonStandard::m_t35CountryCode2H248_H221NonStandard::m_t35ExtensionH248_H221NonStandard::m_manufacturerCodeH248_MuxType::PCLASSINFOH248_MuxType::EnumerationsH248_AmmsReplyH248_AmmsReply::PCLASSINFOH248_AmmsReply::OptionalFieldsH248_AmmsReply::m_terminationIDH248_AmmsReply::m_terminationAuditH248_IndAudLocalControlDescriptor::PCLASSINFOH248_IndAudLocalControlDescriptor::OptionalFieldsH248_IndAudLocalControlDescriptor::m_streamModeH248_IndAudLocalControlDescriptor::m_reserveValueH248_IndAudLocalControlDescriptor::m_reserveGroupH248_IndAudLocalControlDescriptor::m_propertyParmsH248_TransactionResponseAckH248_TransactionResponseAck::PCLASSINFOH248_PathNameH248_PathName::PCLASSINFOH248_ArrayOf_ModemType::PCLASSINFOH248_EventsDescriptorH248_EventsDescriptor::PCLASSINFOH248_EventsDescriptor::OptionalFieldsH248_EventsDescriptor::m_requestIDH248_EventsDescriptor::m_eventListH248_ArrayOf_IndAudStreamDescriptorH248_ArrayOf_IndAudStreamDescriptor::PCLASSINFOH248_IndAudEventsDescriptorH248_IndAudEventsDescriptor::PCLASSINFOH248_IndAudEventsDescriptor::OptionalFieldsH248_IndAudEventsDescriptor::m_requestIDH248_IndAudEventsDescriptor::m_pkgdNameH248_IndAudEventsDescriptor::m_streamIDD:\openh323\include\h261codec.hD:\openh323\include\h263codec.hD:\openh323\include\h323.hD:\openh323\include\h323annexg.hH323_AnnexGH323_AnnexG::PCLASSINFOconst H501_ServiceRequest &pduBodyconst H501_ServiceRelease &pduBodyconst H501_DescriptorRequest &pduBodyconst H501_DescriptorConfirmation &pduBodyconst H501_DescriptorRejection &pduBodyconst H501_DescriptorIDRequest &pduBodyconst H501_DescriptorIDConfirmation &pduBodyconst H501_DescriptorIDRejection &pduBodyconst H501_DescriptorUpdate &pduBodyconst H501_AccessRequest &pduBodyconst H501_RequestInProgress &pduBodyconst H501_NonStandardRequest &pduBodyconst H501_NonStandardConfirmation &pduBodyconst H501_NonStandardRejection &pduBodyconst H501_UnknownMessageResponse &pduBodyconst H501_UsageRequest &pduBodyconst H501_UsageConfirmation &pduBodyconst H501_UsageIndicationConfirmation &pduBodyconst H501_UsageIndicationRejection &pduBodyconst H501_UsageRejection &pduBodyconst H501_ValidationRequest &pduBodyconst H501_ValidationConfirmation &pduBodyconst H501_ValidationRejection &pduBodyconst H501_AuthenticationRequest &pduBodyconst H501_AuthenticationConfirmation &pduBodyconst H501_AuthenticationRejection &pduBodyD:\openh323\include\h323caps.hH323ExtendedVideoFactoryPFactoryH323CodecExtendedVideoCapabilityH323ExtendedVideoCapabilityH323CapabilityH323Capability::PCLASSINFOH323Capability::GetMainTypeenum H323Capability::MainTypesH323Capability::GetSubTypeH323Capability::GetFormatNameH323Capability::CapabilityFrameSizeH323Capability::SetMaxFrameSizeenum H323Capability::CapabilityFrameSizeH323Capability::CreateChannelH323Capability::CreateCodecH323Capability::OnSendingPDUH245_ModeElement &pduH245_DataType &pduconst H245_DataType &pduH323Capability::IsGenericMatchH323Capability::CapabilityDirectionH323Capability::GetCapabilityDirectionenum H323Capability::CapabilityDirectionH323Capability::SetCapabilityDirectionenum H323Capability::CapabilityDirection dirH323Capability::GetCapabilityNumberH323Capability::SetCapabilityNumberH323Capability::GetPayloadTypeH323Capability::AttachQoSRTP_QOS *H323Capability::assignedCapabilityNumberH323Capability::capabilityDirectionH323Capability::rtpPayloadTypeH323GenericCapabilityInfoPINDEX maxBitRate = 0const H245_GenericCapability ¶mH323GenericCapabilityInfo::maxBitRateH323GenericCapabilityInfo::capIdH245_CapabilityIdentifier *H323GenericCapabilityInfo::collapsingParametersPListH323GenericCapabilityInfo::nonCollapsingParametersH323ExtendedVideoCapability::PCLASSINFOH323ExtendedVideoCapability::GetFormatNameH245_GenericCapability &capH323ExtendedVideoCapability::IsGenericMatchH323ExtendedVideoCapability::GetSizeH323ExtendedVideoCapability::tableH323CapabilitiesListH323CodecExtendedVideoCapability::PCLASSINFOH323CodecExtendedVideoCapability::CloneH323CodecExtendedVideoCapability::CreateCodecH323CodecExtendedVideoCapability::SetMaxFrameSizeH323RealTimeCapabilityH323RealTimeCapability::PCLASSINFOH323RealTimeCapability::rtpqosH323VideoCapability::PCLASSINFOH323NonStandardCapabilityInfoH323NonStandardCapabilityInfo::PObject::Comparisonint (__cdecl *%(void))(struct PluginCodec_H323NonStandardCodecData *)const BYTE *dataBlockPINDEX comparisonOffset = 0PINDEX comparisonLength = P_MAX_INDEXCompareFuncType compareFuncint (__cdecl *(__cdecl *%)(void))(PluginCodec_H323NonStandardCodecData *)const H323NonStandardCapabilityInfo &objH323NonStandardCapabilityInfo::oidH323NonStandardCapabilityInfo::t35CountryCodeH323NonStandardCapabilityInfo::t35ExtensionH323NonStandardCapabilityInfo::manufacturerCodeH323NonStandardCapabilityInfo::nonStandardDataH323NonStandardCapabilityInfo::comparisonOffsetH323NonStandardCapabilityInfo::comparisonLengthH323NonStandardCapabilityInfo::compareFuncCompareFuncTypeH323NonStandardVideoCapability::PCLASSINFOH323CapabilityFactoryH323AudioCapability::PCLASSINFOunsigned int rxPacketSizeunsigned int txPacketSizeH323AudioCapability::rxFramesInPacketH323AudioCapability::txFramesInPacketH323GenericAudioCapability::PCLASSINFOH323GenericAudioCapability::IsGenericMatchH323_G711Capability::PCLASSINFOH323_G711Capability::ModeH323_G711Capability::Speedenum H323_G711Capability::Mode mode = muLawenum H323_G711Capability::Speed speed = At64kH323_G711Capability::modeenum H323_G711Capability::ModeH323_G711Capability::speedenum H323_G711Capability::SpeedPluginCodec_H323NonStandardCodecDataH323NonStandardAudioCapability::PCLASSINFOH323NonStandardAudioCapability::H323NonStandardCapabilityInfo::CompareFuncType compareFuncH323_UserInputCapabilityH323_UserInputCapability::PCLASSINFOH323_UserInputCapability::SubTypesH323_UserInputCapability::NavigateKeyIDenum H323_UserInputCapability::SubTypes subTypeH323_UserInputCapability::subTypeenum H323_UserInputCapability::SubTypesH323_UserInputCapability::subTypeOIDH323SimultaneousCapabilitiesH323CapabilitiesListArrayH323SimultaneousCapabilities::PCLASSINFOH323CapabilitiesSetH323CapabilitiesSetArrayH323CapabilitiesSet::PCLASSINFOPAecH323GenericVideoCapability::PCLASSINFOH323GenericVideoCapability::IsGenericMatchH323Capabilities::PCLASSINFOH323Capabilities::GetSizeH323Capabilities::operator []H323Capability *capconst PStringArray &formatNamesenum H323Capability::CapabilityFrameSize frameSizeenum H323Capability::MainTypes mainTypeunsigned int subType = UINT_MAX ///< Sub-type to find (UINT_MAX=ignore) enum H323Capability::CapabilityDirection directionenum H323Capability::CapabilityDirection direction = H323Capability::e_Unknown ///< Optional direction to include into search criteria unsigned int capabilityNumber1unsigned int capabilityNumber2H323Capabilities::tableH323Capabilities::setH323NonStandardDataCapabilityH323DataCapabilityH323DataCapability::PCLASSINFOunsigned int maxBitRate = 0H323DataCapability::maxBitRateH323NonStandardDataCapability::PCLASSINFOD:\openh323\include\h323con.hH323AggregatedH2x5Handle::PCLASSINFOH323AggregatedH2x5Handle::HandlePDUH323AggregatedH2x5Handle::GetTimeoutH323AggregatedH2x5Handle::fdH323AggregatedH2x5Handle::transportH323AggregatedH2x5Handle::connectionH323AggregatedH2x5Handle::pduBufferH323AggregatedH2x5Handle::pduDataLenH323ConnectionH323Connection::PCLASSINFOH323Connection::Optionsunsigned int options = 0H323Connection::IsConnectedH323Connection::IsEstablishedH323Connection::GetCallEndReasonenum H323Connection::CallEndReasonenum H323Connection::CallEndReason reasonPSyncPoint *sync = NULL ///< syncpoint to use for synchronous destruction enum H323Connection::CallEndReason reason = EndedByLocalUser ///< Reason for call clearing enum H323Connection::CallEndReason &reasonconst PString &callIdentity = PString::Empty() ///< Call Identity of secondary call if present H323Connection &secondaryCallBOOL IsEncoderH323Connection::SetCallIntrusionH323Connection::IsCallIntrusionH323Connection::GetLocalCallIntrusionProtectionLevelconst PString &callTokenunsigned int callIntrusionProtectionLevelconst unsigned int nbOfAddWaitingCalls = 0 ///< number of additional waiting calls at the served user enum H323Connection::AnswerCallResponseconst PString &callerNameenum H323Connection::AnswerCallResponse responseH323SignalPDU &callProceedingPDUH323SignalPDU &releaseCompletePDUconst PString &userBOOL renegotiate = FALSE ///< Force renogotiation of TCS/MSD H323Connection::ControlProtocolErrorsenum H323Connection::ControlProtocolErrors errorSourceconst void *errorData = NULL ///< Data associated with error H245_TerminalCapabilitySetReject &rejectconst H245_OpenLogicalChannel &openPDUH245_OpenLogicalChannelAck &ackPDURTP_QOS *rtpqos = NULL ///< QoS for RTP H323Connection::OnReceivedExtendedVideoSessionH323Connection::GetBandwidthAvailableBOOL force = FALSE ///< Force bandwidth limit enum H323Connection::SendUserInputModes modeH323Connection::GetSendUserInputModeenum H323Connection::SendUserInputModesunsigned int duration = 0unsigned int logicalChannel = 0unsigned int rtpTimestamp = 0 ///< RTP timestamp in logical channel sync. H323Connection::SendUserInputHookFlashint duration = 500 ///< Duration of tone in milliseconds const PString &keyName = lВ _Ў unsigned int button = 0unsigned int buttonstate = 0unsigned int clickcount = 0 ///< ClickCount 1 = sigle click 2= doubleclick const H245_UserInputIndication &pduRTP_QOS *rtpqos = NULL H323Connection::IsBehindNATH323Connection::SetRemoteNATH323Connection::HasNATSupportH323Connection::DisableNATSupportH323Connection::SetSameNATH323Connection::isSameNATH245_RequestModeAck &ackH245_RequestModeReject &rejectconst H245_RequestModeReject *pduconst char *capabilityNames = "T.38\nT38FaxUDP" H323Connection::GetEndPointH323Connection::HadAnsweredCallH323Connection::IsGatekeeperRoutedH323Connection::GetQ931CauseH323Connection::SetQ931CauseH323Connection::GetDistinctiveRingH323Connection::SetDistinctiveRingunsigned int patternH323Connection::GetCallTokenH323Connection::GetCallReferenceH323Connection::GetCallIdentifierH323Connection::GetConferenceIdentifierH323Connection::GetLocalPartyNameH323Connection::SetDisplayNameH323Connection::GetDisplayNameconst PStringH323Connection::GetLocalAliasNamesconst PStringList &H323Connection::GetRemotePartyNameH323Connection::GetRemotePartyNumberH323Connection::GetRemotePartyAddressH323Connection::GetRemotePartyAliasesH323Connection::GetRemoteApplicationH323Connection::GetLocalCapabilitiesconst H323Capabilities &H323Connection::GetRemoteCapabilitiesH323Connection::GetRemoteMaxAudioDelayJitterH323Connection::GetSignallingChannelconst H323Transport *H323Connection::GetSignallingVersionH323Connection::GetControlVersionH323Connection::GetSetupUpTimeH323Connection::GetAlertingTimeH323Connection::GetConnectionStartTimeH323Connection::GetConnectionEndTimeH323Connection::GetReverseMediaOpenTimeH323Connection::GetMinAudioJitterDelayH323Connection::GetMaxAudioJitterDelayH323Connection::GetUUIEsRequestedH323Connection::SetUUIEsRequestedunsigned int maskH323Connection::GetGkAccessTokenOIDH323Connection::SetGkAccessTokenOIDH323Connection::GetGkAccessTokenDataH323Connection::SetDestExtraCallInfoconst PString &infoH323Connection::SetRemoteCallWaitingconst unsigned int valueH323Connection::GetRemoteCallWaitingconst intH323Connection::HasAuthenticationPString &amountunsigned int &timelimitPString &urlH323Connection::ReleaseSequenceH323Connection::GetReleaseSequenceenum H323Connection::ReleaseSequenceH323Connection::OnHandleConferenceRequestconst H245_ConferenceRequest &H323Connection::OnHandleConferenceResponseconst H245_ConferenceResponse &H323Connection::OnHandleConferenceCommandconst H245_ConferenceCommand &H323Connection::OnHandleConferenceIndicationconst H245_ConferenceIndication &H323Connection::h245MessageTypeH323Connection::OnHandleH245GenericMessageenum H323Connection::h245MessageTypeconst H245_GenericMessage &const H225_ProtocolIdentifier &idH323Connection::PDECLARE_NOTIFIEROnUserInputInBandDTMFOpalRFC2833InfoOnUserInputInlineRFC2833H323Connection::endpointH323Connection::endSyncPSyncPoint *H323Connection::remoteCallWaitingH323Connection::callAnsweredH323Connection::gatekeeperRoutedH323Connection::distinctiveRingH323Connection::callTokenH323Connection::callReferenceH323Connection::callIdentifierH323Connection::conferenceIdentifierH323Connection::localAliasNamesH323Connection::localPartyNameH323Connection::localDisplayNameH323Connection::localCapabilitiesH323Connection::remotePartyNameH323Connection::remotePartyNumberH323Connection::remotePartyAddressH323Connection::remoteAliasNamesH323Connection::destExtraCallInfoH323Connection::remoteApplicationH323Connection::remoteCapabilitiesH323Connection::remoteMaxAudioDelayJitterH323Connection::roundTripDelayTimerH323Connection::minAudioJitterDelayH323Connection::maxAudioJitterDelayH323Connection::bandwidthAvailableH323Connection::uuiesRequestedH323Connection::gkAccessTokenOIDH323Connection::gkAccessTokenDataH323Connection::addAccessTokenToSetupH323Connection::sendUserInputModeH323Connection::signallingChannelH323Connection::controlChannelH323Connection::h245TunnelingH323Connection::h245TunnelRxPDUH323Connection::h245TunnelTxPDUH323Connection::alertingPDUH323Connection::connectPDUH323Connection::ConnectionStatesH323Connection::connectionStateenum H323Connection::ConnectionStatesH323Connection::setupTimeH323Connection::alertingTimeH323Connection::connectedTimeH323Connection::callEndTimeH323Connection::reverseMediaOpenTimeH323Connection::callEndReasonH323Connection::q931CauseH323Connection::releaseSequenceH323Connection::h225versionH323Connection::h245versionH323Connection::h245versionSetH323Connection::doH245inSETUPH323Connection::lastPDUWasH245inSETUPH323Connection::detectInBandDTMFH323Connection::mustSendDRQH323Connection::mediaWaitForConnectH323Connection::transmitterSidePausedH323Connection::earlyStartH323Connection::startT120H323Connection::t38ModeChangeCapabilitiesH323Connection::startH224H323Connection::digitsWaitFlagH323Connection::endSessionNeededH323Connection::endSessionSentH323Connection::endSessionReceivedH323Connection::enforcedDurationLimitH323Connection::holdAudioMediaChannelH323Connection::holdVideoMediaChannelH323Connection::isConsultationTransferH323Connection::isCallIntrusionH323Connection::callIntrusionProtectionLevelH323Connection::rtpSessionsRTP_SessionManagerH323Connection::FastStartStatesH323Connection::fastStartStateenum H323Connection::FastStartStatesH323Connection::fastStartChannelsH323LogicalChannelListH323Connection::masterSlaveDeterminationProcedureH245NegMasterSlaveDetermination *H323Connection::capabilityExchangeProcedureH245NegTerminalCapabilitySet *H323Connection::logicalChannelsH245NegLogicalChannels *H323Connection::requestModeProcedureH245NegRequestMode *H323Connection::roundTripDelayProcedureH245NegRoundTripDelay *H323Connection::h450dispatcherH450xDispatcher *H323Connection::h4502handlerH4502Handler *H323Connection::h4503handlerH4503Handler *H323Connection::h4504handlerH4504Handler *H323Connection::h4506handlerH4506Handler *H323Connection::h45011handlerH45011Handler *H323Connection::rfc2833handlerOpalRFC2833 *H323Connection::t120handlerH323Connection::t38handlerH323Connection::h224handlerH323Connection::h281handlerH323Connection::dtmfDecoderPDTMFDecoderH323Connection::remoteIsNATH323Connection::NATsupportH323Connection::sameNATH323Connection::GetOSPTransactionOpalOSP::Transaction *H323Connection::SetOSPTransactionOpalOSP::Transaction *tranH323Connection::ospTransactionH323Connection::AuthenticationFailedH323Connection::hasAuthenticationH323Connection::EPAuthenticatorsconst H235AuthenticatorsH323Connection::aecH323Connection::IsNonCallConnectionH323Connection::outerMutexPTimedMutexH323Connection::innerMutexH323Connection::useRTPAggregationH323Connection::useSignallingAggregationH323Connection::signalAggregatorH323AggregatedH2x5Handle *H323Connection::controlAggregatorH323Connection::serviceControlSessionsH323Connection::featuresH323Connection::h224Handlerenum H323Connection::FastStartStates senum H323Connection::ConnectionStates sD:\openh323\include\h323ep.hH323EndPointH323EndPoint::PCLASSINFOint frameUnits = 1 const PString &address = PString::Empty()const PString &identifier = PString::Empty()const PString &localAddress = PString::Empty() ///< Local interface to use. H323Transport *transport = NULL ///< Transport over which to talk to gatekeeper. H323EndPoint::GetGatekeeperint reason = -1 ///< Reason for gatekeeper removal H323EndPoint::GetGatekeeperPasswordconst H323TransportAddress &oldAddrH323TransportAddress &newaddressconst H323TransportAddress &rasAddressOpalOSP::Provider *providerH323EndPoint::GetOSPProviderOpalOSP::Provider *BOOL excludeLocalHost = TRUEH323Transport *associatedTransport = NULL ///< Associated transport for precedence and translation void *userData = NULL ///* user data to pass to CreateConnection void *userData = NULL ///< user data to pass to CreateConnection void *userData = NULLH323Transport *transport = NULL ///< Transport to use for call. const PString &partyH323Connection::CallEndReason reason = H323Connection::EndedByLocalUser ///< Reason for call clearing H323Connection::CallEndReason reason = H323Connection::EndedByLocalUser ///< Reason for call clearing H323Connection::CallEndReason reason = H323Connection::EndedByLocalUserBOOL wait = TRUE ///< Flag for wait for calls to e cleared. H323SignalPDU *setupPDUenum H323EndPoint::EPSecurityPolicy policyenum H323EndPoint::EPSecurityPolicyPIPSocket::Address publicAddrPString &gkIdentifierH323TransportAddress &gkRouteAddressunsigned int operationconst unsigned int &durationLimitconst PString &BaseDNunsigned int sessionidBOOL sendingH323EndPoint::GetLocalUserNameH323EndPoint::GetAliasNamesH323EndPoint::GetDefaultILSServerH323EndPoint::SetDefaultILSServerH323EndPoint::IsFastStartDisabledH323EndPoint::DisableFastStartH323EndPoint::IsH245TunnelingDisabledH323EndPoint::DisableH245TunnelingH323EndPoint::IsH245inSetupDisabledH323EndPoint::DisableH245inSetupH323EndPoint::DetectInBandDTMFDisabledH323EndPoint::DisableDetectInBandDTMFH323EndPoint::CanDisplayAmountStringH323EndPoint::SetCanDisplayAmountStringH323EndPoint::CanEnforceDurationLimitH323EndPoint::SetCanEnforceDurationLimitH323EndPoint::SetRTPAggregatationSizeH323EndPoint::GetRTPAggregationSizeH323EndPoint::SetSignallingAggregationSizeH323EndPoint::GetSignallingAggregationSizeH323EndPoint::GetCallIntrusionProtectionLevelH323EndPoint::SetCallIntrusionProtectionLevelunsigned int levelH323EndPoint::GetSoundChannelPlayDeviceH323EndPoint::GetSoundChannelPlayDriverH323EndPoint::GetSoundChannelRecordDeviceH323EndPoint::GetSoundChannelRecordDriverH323EndPoint::GetSoundChannelBufferDepthH323EndPoint::GetSilenceDetectionModeH323EndPoint::SetSilenceDetectionModeH323AudioCodec::SilenceDetectionMode modeH323EndPoint::GetSendUserInputModeH323EndPoint::SetSendUserInputModeH323EndPoint::CanAutoStartReceiveVideoH323EndPoint::CanAutoStartTransmitVideoH323EndPoint::CanAutoStartReceiveFaxH323EndPoint::CanAutoStartTransmitFaxH323EndPoint::CanAutoCallForwardH323EndPoint::GetListenersconst H323ListenerList &H323EndPoint::GetCapabilitiesH323EndPoint::TerminalTypesH323EndPoint::GetTerminalTypeenum H323EndPoint::TerminalTypesH323EndPoint::GetMinAudioJitterDelayH323EndPoint::GetMaxAudioJitterDelayH323EndPoint::GetInitialBandwidthH323EndPoint::SetInitialBandwidthH323EndPoint::GetFeatureSetH323EndPoint::FeatureSetDisabledH323EndPoint::FeatureSetDisableH323EndPoint::AECEnabledH323EndPoint::SetAECEnabledBOOL enabledconst PIPSocket::Address &address = 0 H323EndPoint::STUNNatTypeconst PIPSocket::Address &address = 0 H323EndPoint::OnUnsolicitedInformationconst PIPSocket::Address &remoteAddressH323EndPoint::TranslateTCPAddressPIPSocket::Address &const PIPSocket::Address &const H323Connection *conn = NULL H323EndPoint::TranslateTCPPortWORD &H323EndPoint::GetTCPPortBaseH323EndPoint::GetTCPPortMaxH323EndPoint::GetUDPPortBaseH323EndPoint::GetUDPPortMaxH323EndPoint::GetRtpIpPortBaseH323EndPoint::GetRtpIpPortMaxH323EndPoint::GetRtpIpTypeofServiceH323EndPoint::SetRtpIpTypeofServiceunsigned int tosH323EndPoint::GetTcpIpTypeofServiceH323EndPoint::SetTcpIpTypeofServiceH323EndPoint::GetSignallingChannelConnectTimeoutH323EndPoint::GetSignallingChannelCallTimeoutH323EndPoint::GetControlChannelStartTimeoutH323EndPoint::GetEndSessionTimeoutH323EndPoint::GetMasterSlaveDeterminationTimeoutH323EndPoint::GetMasterSlaveDeterminationRetriesH323EndPoint::GetCapabilityExchangeTimeoutH323EndPoint::GetLogicalChannelTimeoutH323EndPoint::GetRequestModeTimeoutH323EndPoint::GetRoundTripDelayTimeoutH323EndPoint::GetRoundTripDelayRateH323EndPoint::ShouldClearCallOnRoundTripFailH323EndPoint::GetGatekeeperRequestTimeoutH323EndPoint::GetGatekeeperRequestRetriesH323EndPoint::GetRasRequestTimeoutH323EndPoint::GetRasRequestRetriesH323EndPoint::GetGatekeeperTimeToLiveH323EndPoint::GetGkAccessTokenOIDH323EndPoint::SetGkAccessTokenOIDH323EndPoint::GetSendGRQH323EndPoint::SetSendGRQBOOL vH323EndPoint::GetCallTransferT1H323EndPoint::GetCallTransferT2H323EndPoint::GetCallTransferT3H323EndPoint::GetCallTransferT4H323EndPoint::GetCallIntrusionT1H323EndPoint::GetCallIntrusionT2H323EndPoint::GetCallIntrusionT3H323EndPoint::GetCallIntrusionT4H323EndPoint::GetCallIntrusionT5H323EndPoint::GetCallIntrusionT6H323EndPoint::GetCallIdentityDictionaryH323CallIdentityDict &H323EndPoint::GetNextH450CallIdentityValueH323EndPoint::GetCleanerThreadStackSizeH323EndPoint::GetListenerThreadStackSizeH323EndPoint::GetSignallingThreadStackSizeH323EndPoint::GetControlThreadStackSizeH323EndPoint::GetChannelThreadStackSizeH323EndPoint::GetRasThreadStackSizeH323EndPoint::GetJitterThreadStackSizeH323EndPoint::GetChannelThreadPriorityPThread::PriorityH323EndPoint::GetConnectionsH323ConnectionDictconst PString &existingTokenH323EndPoint::localAliasNamesH323EndPoint::defaultSilenceDetectionH323EndPoint::minAudioJitterDelayH323EndPoint::maxAudioJitterDelayH323EndPoint::soundChannelPlayDeviceH323EndPoint::soundChannelPlayDriverH323EndPoint::soundChannelRecordDeviceH323EndPoint::soundChannelRecordDriverH323EndPoint::soundChannelBuffersH323EndPoint::videoChannelPlayDeviceH323EndPoint::videoChannelRecordDeviceH323EndPoint::autoStartReceiveVideoH323EndPoint::autoStartTransmitVideoH323EndPoint::autoStartReceiveFaxH323EndPoint::autoStartTransmitFaxH323EndPoint::autoCallForwardH323EndPoint::disableFastStartH323EndPoint::disableH245TunnelingH323EndPoint::disableH245inSetupH323EndPoint::disableDetectInBandDTMFH323EndPoint::canDisplayAmountStringH323EndPoint::canEnforceDurationLimitH323EndPoint::callIntrusionProtectionLevelH323EndPoint::defaultSendUserInputModeH323EndPoint::ilsServerH323EndPoint::rtpIpTypeofServiceH323EndPoint::tcpIpTypeofServiceH323EndPoint::signallingChannelConnectTimeoutH323EndPoint::signallingChannelCallTimeoutH323EndPoint::controlChannelStartTimeoutH323EndPoint::endSessionTimeoutH323EndPoint::masterSlaveDeterminationTimeoutH323EndPoint::masterSlaveDeterminationRetriesH323EndPoint::capabilityExchangeTimeoutH323EndPoint::logicalChannelTimeoutH323EndPoint::requestModeTimeoutH323EndPoint::roundTripDelayTimeoutH323EndPoint::roundTripDelayRateH323EndPoint::noMediaTimeoutH323EndPoint::gatekeeperRequestTimeoutH323EndPoint::gatekeeperRequestRetriesH323EndPoint::rasRequestTimeoutH323EndPoint::rasRequestRetriesH323EndPoint::registrationTimeToLiveH323EndPoint::gkAccessTokenOIDH323EndPoint::sendGRQH323EndPoint::initialBandwidthH323EndPoint::clearCallOnRoundTripFailH323EndPoint::PortInfounsigned int baseH323EndPoint::PortInfo::mutexH323EndPoint::PortInfo::baseH323EndPoint::PortInfo::maxH323EndPoint::PortInfo::currentH323EndPoint::tcpPortsH323EndPoint::udpPortsH323EndPoint::rtpIpPortsH323EndPoint::stunH323EndPoint::disableSTUNTranslateH323EndPoint::natMethodsH323EndPoint::t35CountryCodeH323EndPoint::t35ExtensionH323EndPoint::manufacturerCodeH323EndPoint::terminalTypeH323EndPoint::callTransferT1H323EndPoint::callTransferT2H323EndPoint::callTransferT3H323EndPoint::callTransferT4H323EndPoint::callIntrusionT1H323EndPoint::callIntrusionT2H323EndPoint::callIntrusionT3H323EndPoint::callIntrusionT4H323EndPoint::callIntrusionT5H323EndPoint::callIntrusionT6H323EndPoint::secondaryConnectionsActiveH323CallIdentityDictH323EndPoint::nextH450CallIdentityH323EndPoint::cleanerThreadStackSizeH323EndPoint::listenerThreadStackSizeH323EndPoint::signallingThreadStackSizeH323EndPoint::controlThreadStackSizeH323EndPoint::logicalThreadStackSizeH323EndPoint::rasThreadStackSizeH323EndPoint::jitterThreadStackSizeH323EndPoint::rtpAggregationSizeH323EndPoint::rtpAggregatorH323EndPoint::signallingAggregationSizeH323EndPoint::signallingAggregatorH323EndPoint::channelThreadPriorityH323EndPoint::listenersH323ListenerListH323EndPoint::capabilitiesH323EndPoint::gatekeeperH323EndPoint::gatekeeperPasswordH323EndPoint::connectionsActiveH323EndPoint::connectionsMutexH323EndPoint::noMediaMutexH323EndPoint::connectionsToBeCleanedPStringSetH323EndPoint::connectionsCleanerH323ConnectionsCleaner *H323EndPoint::connectionsAreCleanedH323EndPoint::EPSecurityUserNameH323EndPoint::EPSecurityPasswordH323EndPoint::isSecureCallH323EndPoint::CallAuthPolicyH323EndPoint::EPAuthListH323EndPoint::ospProviderH323EndPoint::featuresH460_FeatureSetH323EndPoint::disableH460H323EndPoint::enableAECD:\openh323\include\h323neg.hH245NegLogicalChannelH245NegotiatorH245Negotiator::PCLASSINFOH245Negotiator::PDECLARE_NOTIFIERHandleTimeoutH245Negotiator::endpointH245Negotiator::connectionH245Negotiator::replyTimerH245Negotiator::mutexH245NegLogicalChannel::PCLASSINFOconst H323ChannelNumber &channelNumberunsigned int replacementFor = 0unsigned int roleLabel = 0 H245NegLogicalChannel::channelH245NegLogicalChannel::channelNumberH245NegLogicalChannel::StatesH245NegLogicalChannel::stateenum H245NegLogicalChannel::Statesconst char *const %[e_NumStates]H245NegRequestModeH245NegRequestMode::PCLASSINFOconst H245_RequestModeRelease &pduH245NegRequestMode::awaitingResponseH245NegRequestMode::inSequenceNumberH245NegRequestMode::outSequenceNumberH245NegRoundTripDelayH245NegRoundTripDelay::PCLASSINFOH245NegRoundTripDelay::GetRoundTripDelayH245NegRoundTripDelay::IsRemoteOfflineH245NegRoundTripDelay::awaitingResponseH245NegRoundTripDelay::sequenceNumberH245NegRoundTripDelay::tripStartTimeH245NegRoundTripDelay::roundTripTimeH245NegRoundTripDelay::retryCountenum H245NegLogicalChannel::States senum H245NegTerminalCapabilitySet::States senum H245NegMasterSlaveDetermination::MasterSlaveStatus senum H245NegMasterSlaveDetermination::States sH245NegTerminalCapabilitySetH245NegTerminalCapabilitySet::PCLASSINFOBOOL empty = FALSEconst H245_TerminalCapabilitySetRelease &pduH245NegTerminalCapabilitySet::HasSentCapabilitiesH245NegTerminalCapabilitySet::HasReceivedCapabilitiesH245NegTerminalCapabilitySet::StatesH245NegTerminalCapabilitySet::stateenum H245NegTerminalCapabilitySet::StatesH245NegTerminalCapabilitySet::inSequenceNumberH245NegTerminalCapabilitySet::outSequenceNumberH245NegTerminalCapabilitySet::receivedCapabilitesH245NegLogicalChannelsH245NegLogicalChannels::PCLASSINFOunsigned int replacementFor = 0 H245NegLogicalChannels::GetSizeH245NegLogicalChannels::lastChannelNumberH245NegLogicalChannels::channelsH245LogicalChannelDictH245NegMasterSlaveDeterminationH245NegMasterSlaveDetermination::PCLASSINFOconst H245_MasterSlaveDeterminationRelease &pduH245NegMasterSlaveDetermination::IsMasterH245NegMasterSlaveDetermination::IsDeterminedH245NegMasterSlaveDetermination::StatesH245NegMasterSlaveDetermination::stateenum H245NegMasterSlaveDetermination::StatesH245NegMasterSlaveDetermination::determinationNumberH245NegMasterSlaveDetermination::retryCountH245NegMasterSlaveDetermination::MasterSlaveStatusH245NegMasterSlaveDetermination::statusenum H245NegMasterSlaveDetermination::MasterSlaveStatusconst char *const %[e_NumStatuses]D:\openh323\include\h323pdu.hH323SignalPDU::PCLASSINFOunsigned int reason = H225_FacilityReason::e_undefinedReason ///< Reason for Facility H323SignalPDU::GetQ931const Q931 &H323SignalPDU::SetQ931const Q931 &_q931pduconst H323Transport *transport = NULL ///< Transport PDU was read from. BOOL firstAliasOnly = FALSE ///< Only return the first possible alias BOOL insertPartyNumbers = FALSEunsigned int plan = 1unsigned int type = 0int presentation = -1int screening = -1 H323SignalPDU::q931pduQ931H323ControlPDUH323ControlPDU::PCLASSINFOH323RasPDUH323RasPDU::PCLASSINFOconst H235Authenticators &authenticatorsunsigned int reason = H225_GatekeeperRejectReason::e_undefinedReasonunsigned int reason = H225_RegistrationRejectReason::e_undefinedReasonunsigned int reason = H225_UnregRejectReason::e_undefinedReasonunsigned int reason = H225_LocationRejectReason::e_undefinedReasonunsigned int reason = H225_AdmissionRejectReason::e_undefinedReasonunsigned int reason = H225_DisengageRejectReason::e_securityDenialunsigned int bandwidth = 0unsigned int reason = H225_BandRejectReason::e_undefinedReasonconst int OpalGloballyUniqueIDunsigned int reason = H225_InfoRequestNakReason::e_undefinedReasonconst OpalGloballyUniqueID *id = NULLD:\openh323\include\h323pluginmgr.hOpalFactoryCodec::PCLASSINFOOpalFactoryCodec::GetDefinitionOpalFactoryCodec::GetInputFormatOpalFactoryCodec::GetOutputFormatOpalFactoryCodec::EncodeOpalFactoryCodec::GetSampleRateOpalFactoryCodec::GetBitsPerSecOpalFactoryCodec::GetFrameTimeOpalFactoryCodec::GetSamplesPerFrameOpalFactoryCodec::GetBytesPerFrameOpalFactoryCodec::GetRecommendedFramesPerPacketOpalFactoryCodec::GetMaxFramesPerPacketOpalFactoryCodec::GetRTPPayloadOpalFactoryCodec::GetSDPFormatH323DynaLinkH323DynaLink::PCLASSINFOconst char *basenameconst char *reason = NULLH323DynaLink::IsLoadedconst PString &fileNameH323DynaLink::processLockH323DynaLink::isLoadedOKH323DynaLink::baseNameH323DynaLink::reasonPPluginModuleManagerH323PluginCodecManager::PCLASSINFOPPluginManager *pluginMgr = NULLPluginCodec_GetAPIVersionFunction getApiVerFnvoid *codecListH323PluginCodecManager::RegisterCapabilityH323PluginCodecManager::CapabilityListCreateEntryH323PluginCodecManager::CapabilityListCreateEntry::CapabilityListCreateEntryPluginCodec_Definition *ePluginCodec_Definition *dH323PluginCodecManager::CapabilityListCreateEntry::encoderCodecH323PluginCodecManager::CapabilityListCreateEntry::decoderCodecH323PluginCodecManager::CapabilityCreateListTypevectorH323PluginCodecManager::capabilityCreateListD:\openh323\include\h323rtp.hH323_RTP_UDPH323_RTP_SessionRTP_UserDataH323_RTP_Session::PCLASSINFOH323_RTP_Session::OnSendingPDUH323_RTP_Session::OnSendingAltPDUH323_RTP_Session::OnSendingAckPDUH323_RTP_Session::OnSendOpenAckAltH323_RTP_Session::OnReceivedPDUH323_RTP_Session::OnReceivedAltPDUH323_RTP_Session::OnReceivedAckPDUH323_RTP_Session::OnReceivedAckAltPDUH323_RTP_Session::OnSendRasInfoH323_RTP_Session::connectionH323_RTP_UDP::PCLASSINFORTP_UDP &rtpRTP_QOS *rtpqos = NULLH323_RTP_UDP::rtpRTP_UDP &D:\openh323\include\h323t120.hH323_T120ChannelH323_T120Channel::PCLASSINFOH323_T120Channel::t120handlerH323_T120CapabilityH323_T120Capability::PCLASSINFOH323_T120Capability::GetDynamicPortCapabilityH323_T120Capability::SetDynamicPortCapabilityBOOL dynamicH323_T120Capability::dynamicPortCapabilityD:\openh323\include\h323trans.hH323Transaction::PCLASSINFOH323Transactor &transactorH323TransactionPDU *confirmH323TransactionPDU *rejectH323Transaction::InProgressenum H323Transaction::Responseunsigned int timeH323Transaction::CreateRIPH323Transaction::GetNameH323Transaction::ValidatePDUH323Transaction::SetRejectReasonH323Transaction::IsFastResponseRequiredH323Transaction::CanSendRIPH323Transaction::GetReplyAddressH323Transaction::GetReplyAddressesH323Transaction::IsBehindNATH323Transaction::GetTransactorH323Transactor &H323Transaction::GetAuthenticatorResultH323Transaction::OnHandlePDUH323Transaction::PDECLARE_NOTIFIERSlowHandlerH323Transaction::transactorH323Transaction::requestSequenceNumberH323Transaction::replyAddressesH323Transaction::fastResponseRequiredH323Transaction::requestH323Transaction::confirmH323Transaction::rejectH323Transaction::authenticatorsH323Transaction::authenticatorResultH323Transaction::isBehindNATH323Transaction::canSendRIPH323TransactionServer::PCLASSINFOH323TransactionServer::GetDefaultUdpPortH323TransactionServer::GetOwnerEndPointH323TransactionServer::CreateListenerH323TransactionServer::SetUpCallSignalAddressesH323TransactionServer::ownerEndPointH323TransactionServer::monitorThreadH323TransactionServer::monitorExitH323TransactionServer::mutexH323TransactionServer::PLISTH323TransactionServer::listenersH323TransactionServer::usingAllInterfacesH323Transactor::PCLASSINFOWORD remotePortH323Transport *associatedTransport = NULL ///< Associated transport for precedence and translation H323Transactor::CreateTransactionPDUH323Transactor::HandleTransactionH323Transactor::OnSendingPDUBOOL callback = TRUE H323Transactor::GetEndPointH323Transactor::GetTransportH323Transactor::SetCheckResponseCryptoTokensBOOL valueH323Transactor::GetCheckResponseCryptoTokensH323Transactor::PDECLARE_NOTIFIERHandleTransactionsH323Transactor::RequestH323Transactor::Request::PCLASSINFOconst PASN_Choice *H323Transactor::Request::rejectReasonH323Transactor::Request::responseInfoH323Transactor::Request::requestAddressesH323Transactor::Request::sequenceNumberH323Transactor::Request::requestPDUH323TransactionPDU &H323Transactor::Request::whenResponseExpectedH323Transactor::Request::responseHandledH323Transactor::Request::responseMutexH323Transactor::Request::responseResultH323Transactor::Request &requestconst PASN_Choice * = NULL H323Transactor::ResponseH323Transactor::Response::PCLASSINFOH323Transactor::Response::lastUsedTimeH323Transactor::Response::retirementAgeH323Transactor::Response::replyPDUH323Transactor::endpointH323Transactor::defaultLocalPortH323Transactor::defaultRemotePortH323Transactor::transportH323Transactor::checkResponseCryptoTokensH323Transactor::nextSequenceNumberH323Transactor::nextSequenceNumberMutexH323Transactor::requestsPDictionaryH323Transactor::requestsMutexH323Transactor::lastRequestH323Transactor::Request *H323Transactor::pduWriteMutexH323Transactor::responsesPSortedListH323TransactionPDU::~H323TransactionPDUH323TransactionPDU::GetPDUH323TransactionPDU::GetChoiceH323TransactionPDU::GetSequenceNumberH323TransactionPDU::GetRequestInProgressDelayH323TransactionPDU::GetProtocolNameH323TransactionPDU::ClonePDUH323TransactionPDU::DeletePDUH323TransactionPDU::GetAuthenticatorsH323TransactionPDU::SetAuthenticatorsH323TransactionPDU::ValidateH323TransactionPDU::PrepareH323TransactionPDU::authenticatorsH323TransactionPDU::rawPDUPPER_StreamD:\openh323\include\h4501.hD:\openh323\include\h45010.hD:\openh323\include\h45011.hD:\openh323\include\h4502.hD:\openh323\include\h4503.hD:\openh323\include\h4504.hD:\openh323\include\h4505.hD:\openh323\include\h4506.hD:\openh323\include\h4507.hD:\openh323\include\h4508.hD:\openh323\include\h4509.hD:\openh323\include\h450pdu.hD:\openh323\include\h460.hD:\openh323\include\h501.hH501_ServiceRejectionReasonH501_ServiceRejectionReason::PCLASSINFOH501_ServiceRejectionReason::ChoicesH501_PriceElement_unitsH501_PriceElement_units::PCLASSINFOH501_PriceElement_units::ChoicesH501_ArrayOf_DescriptorH501_ArrayOf_Descriptor::PCLASSINFOH501_ArrayOf_ServiceControlSessionH501_ArrayOf_ServiceControlSession::PCLASSINFOH501_UsageIndicationConfirmationH501_UsageIndicationConfirmation::PCLASSINFOH501_DescriptorRejectionH501_DescriptorRejection::PCLASSINFOH501_DescriptorRejection::OptionalFieldsH501_DescriptorRejection::m_reasonH501_DescriptorRejectionReasonH501_DescriptorRejection::m_descriptorIDH501_UserInformationH501_UserInformation::PCLASSINFOH501_UserInformation::OptionalFieldsH501_UserInformation::m_userIdentifierH501_UserInformation::m_userAuthenticatorH501_ArrayOf_CryptoH323TokenH501_ServiceRejectionH501_ServiceRejection::PCLASSINFOH501_ServiceRejection::OptionalFieldsH501_ServiceRejection::m_reasonH501_ServiceRejection::m_alternatesH501_AlternatePEInfoH501_RouteInformationH501_RouteInformation::PCLASSINFOH501_RouteInformation::OptionalFieldsH501_RouteInformation::m_messageTypeH501_RouteInformation_messageTypeH501_RouteInformation::m_callSpecificH501_RouteInformation::m_usageSpecH501_UsageSpecificationH501_RouteInformation::m_priceInfoH501_ArrayOf_PriceInfoSpecH501_RouteInformation::m_contactsH501_ArrayOf_ContactInformationH501_RouteInformation::m_typeH501_RouteInformation::m_featureSetH501_RouteInformation::m_circuitIDH501_RouteInformation::m_supportedCircuitsH501_ArrayOf_CircuitIdentifierH501_RoleH501_Role::PCLASSINFOH501_Role::ChoicesH501_Role::operator H225_NonStandardParameter &H501_ArrayOf_GloballyUniqueIDH501_ArrayOf_GloballyUniqueID::PCLASSINFOH501_ArrayOf_RouteInformationH501_ArrayOf_RouteInformation::PCLASSINFOH501_ServiceReleaseH501_ServiceRelease::PCLASSINFOH501_ServiceRelease::OptionalFieldsH501_ServiceRelease::m_reasonH501_ServiceReleaseReasonH501_ServiceRelease::m_alternatesH501_MessageBodyH501_MessageBody::PCLASSINFOH501_MessageBody::ChoicesH501_MessageBody::operator H501_ServiceRequest &H501_MessageBody::operator H501_ServiceConfirmation &H501_MessageBody::operator H501_ServiceRejection &H501_MessageBody::operator H501_ServiceRelease &H501_MessageBody::operator H501_DescriptorRequest &H501_MessageBody::operator H501_DescriptorConfirmation &H501_MessageBody::operator H501_DescriptorRejection &H501_MessageBody::operator H501_DescriptorIDRequest &H501_MessageBody::operator H501_DescriptorIDConfirmation &H501_MessageBody::operator H501_DescriptorIDRejection &H501_MessageBody::operator H501_DescriptorUpdate &H501_MessageBody::operator H501_DescriptorUpdateAck &H501_MessageBody::operator H501_AccessRequest &H501_MessageBody::operator H501_AccessConfirmation &H501_MessageBody::operator H501_AccessRejection &H501_MessageBody::operator H501_RequestInProgress &H501_MessageBody::operator H501_NonStandardRequest &H501_MessageBody::operator H501_NonStandardConfirmation &H501_MessageBody::operator H501_NonStandardRejection &H501_MessageBody::operator H501_UnknownMessageResponse &H501_MessageBody::operator H501_UsageRequest &H501_MessageBody::operator H501_UsageConfirmation &H501_MessageBody::operator H501_UsageIndication &H501_UsageIndication &H501_MessageBody::operator H501_UsageIndicationConfirmation &H501_MessageBody::operator H501_UsageIndicationRejection &H501_MessageBody::operator H501_UsageRejection &H501_MessageBody::operator H501_ValidationRequest &H501_MessageBody::operator H501_ValidationConfirmation &H501_MessageBody::operator H501_ValidationRejection &H501_MessageBody::operator H501_AuthenticationRequest &H501_MessageBody::operator H501_AuthenticationConfirmation &H501_MessageBody::operator H501_AuthenticationRejection &H501_AuthenticationConfirmationH501_AuthenticationConfirmation::PCLASSINFOH501_MessageH501_Message::PCLASSINFOH501_Message::m_bodyH501_Message::m_commonH501_MessageCommonInfoH501_UpdateInformation_updateTypeH501_UpdateInformation_updateType::PCLASSINFOH501_UpdateInformation_updateType::ChoicesH501_DescriptorUpdateH501_DescriptorUpdate::PCLASSINFOH501_DescriptorUpdate::m_senderH501_DescriptorUpdate::m_updateInfoH501_ArrayOf_UpdateInformationH501_PriceElementH501_PriceElement::PCLASSINFOH501_PriceElement::m_amountH501_PriceElement::m_quantumH501_PriceElement::m_unitsH501_ServiceConfirmationH501_ServiceConfirmation::PCLASSINFOH501_ServiceConfirmation::OptionalFieldsH501_ServiceConfirmation::m_elementIdentifierH501_ElementIdentifierH501_ServiceConfirmation::m_domainIdentifierH501_ServiceConfirmation::m_alternatesH501_ServiceConfirmation::m_securityModeH501_SecurityModeH501_ServiceConfirmation::m_timeToLiveH501_ServiceConfirmation::m_usageSpecH501_ArrayOf_UsageFieldH501_ArrayOf_UsageField::PCLASSINFOH501_AuthenticationRejectionReasonH501_AuthenticationRejectionReason::PCLASSINFOH501_AuthenticationRejectionReason::ChoicesH501_DescriptorRequestH501_DescriptorRequest::PCLASSINFOH501_DescriptorRequest::m_descriptorIDH501_GlobalTimeStampH501_GlobalTimeStamp::PCLASSINFOH501_ArrayOf_GenericDataH501_ArrayOf_GenericData::PCLASSINFOH501_ArrayOf_PriceInfoSpec::PCLASSINFOH501_ValidationRejectionH501_ValidationRejection::PCLASSINFOH501_ValidationRejection::m_reasonH501_ValidationRejectionReasonH501_UsageFieldH501_UsageField::PCLASSINFOH501_UsageField::m_idH501_UsageField::m_valueH501_TimeZoneH501_TimeZone::PCLASSINFOH501_AlternatePEInfo::PCLASSINFOH501_AlternatePEInfo::m_alternatePEH501_ArrayOf_AlternatePEH501_AlternatePEInfo::m_alternateIsPermanentH501_ArrayOf_AccessTokenH501_ArrayOf_AccessToken::PCLASSINFOH501_Pattern_rangeH501_Pattern_range::PCLASSINFOH501_Pattern_range::m_startOfRangeH501_Pattern_range::m_endOfRangeH501_UsageSpecification::PCLASSINFOH501_UsageSpecification::OptionalFieldsH501_UsageSpecification::m_sendToH501_UsageSpecification::m_whenH501_UsageSpecification_whenH501_UsageSpecification::m_requiredH501_ArrayOf_PASN_ObjectIdH501_UsageSpecification::m_preferredH501_UsageSpecification::m_sendToPEAddressH501_DescriptorIDRequestH501_DescriptorIDRequest::PCLASSINFOH501_AuthenticationRejectionH501_AuthenticationRejection::PCLASSINFOH501_AuthenticationRejection::m_reasonH501_ArrayOf_UpdateInformation::PCLASSINFOH501_AuthenticationRequestH501_AuthenticationRequest::PCLASSINFOH501_AuthenticationRequest::m_applicationMessageH501_ApplicationMessageH501_ArrayOf_PriceElementH501_ArrayOf_PriceElement::PCLASSINFOH501_ArrayOf_CryptoH323Token::PCLASSINFOH501_CallInformationH501_CallInformation::PCLASSINFOH501_CallInformation::OptionalFieldsH501_CallInformation::m_callIdentifierH501_CallInformation::m_conferenceIDH501_CallInformation::m_circuitIDH501_ArrayOf_DescriptorInfoH501_ArrayOf_DescriptorInfo::PCLASSINFOH501_PatternH501_Pattern::PCLASSINFOH501_Pattern::ChoicesH501_Pattern::operator H225_AliasAddress &H501_Pattern::operator H501_Pattern_range &H501_Pattern_range &H501_DescriptorRejectionReason::PCLASSINFOH501_DescriptorRejectionReason::ChoicesH501_UnknownMessageReasonH501_UnknownMessageReason::PCLASSINFOH501_UnknownMessageReason::ChoicesH501_DescriptorConfirmationH501_DescriptorConfirmation::PCLASSINFOH501_DescriptorConfirmation::m_descriptorH501_UsageSpecification_when::PCLASSINFOH501_UsageSpecification_when::OptionalFieldsH501_UsageSpecification_when::m_neverH501_UsageSpecification_when::m_startH501_UsageSpecification_when::m_endH501_UsageSpecification_when::m_periodH501_UsageSpecification_when::m_failuresH501_ArrayOf_TransportAddressH501_ArrayOf_TransportAddress::PCLASSINFOH501_ArrayOf_PatternH501_ArrayOf_Pattern::PCLASSINFOH501_UpdateInformationH501_UpdateInformation::PCLASSINFOH501_UpdateInformation::m_descriptorInfoH501_UpdateInformation_descriptorInfoH501_UpdateInformation::m_updateTypeH501_MessageCommonInfo::PCLASSINFOH501_MessageCommonInfo::OptionalFieldsH501_MessageCommonInfo::m_sequenceNumberH501_MessageCommonInfo::m_annexGversionH501_ProtocolVersionH501_MessageCommonInfo::m_hopCountH501_MessageCommonInfo::m_replyAddressH501_MessageCommonInfo::m_integrityCheckValueH501_MessageCommonInfo::m_tokensH501_ArrayOf_ClearTokenH501_MessageCommonInfo::m_cryptoTokensH501_MessageCommonInfo::m_nonStandardH501_ArrayOf_NonStandardParameterH501_MessageCommonInfo::m_serviceIDH501_MessageCommonInfo::m_genericDataH501_MessageCommonInfo::m_featureSetH501_MessageCommonInfo::m_versionH501_NonStandardRejectionH501_NonStandardRejection::PCLASSINFOH501_NonStandardRejection::m_reasonH501_NonStandardRejectionReasonH501_TerminationCauseH501_TerminationCause::PCLASSINFOH501_TerminationCause::OptionalFieldsH501_TerminationCause::m_releaseCompleteReasonH501_TerminationCause::m_causeIEH501_TerminationCause::m_nonStandardDataH501_PriceInfoSpecH501_PriceInfoSpec::PCLASSINFOH501_PriceInfoSpec::OptionalFieldsH501_PriceInfoSpec::m_currencyH501_PriceInfoSpec::m_currencyScaleH501_PriceInfoSpec::m_validFromH501_PriceInfoSpec::m_validUntilH501_PriceInfoSpec::m_hoursFromH501_PriceInfoSpec::m_hoursUntilH501_PriceInfoSpec::m_priceElementH501_PriceInfoSpec::m_priceFormulaH501_PartyInformationH501_PartyInformation::PCLASSINFOH501_PartyInformation::OptionalFieldsH501_PartyInformation::m_logicalAddressesH501_ArrayOf_AliasAddressH501_PartyInformation::m_domainIdentifierH501_PartyInformation::m_transportAddressH501_PartyInformation::m_endpointTypeH501_PartyInformation::m_userInfoH501_PartyInformation::m_timeZoneH501_ArrayOf_PASN_ObjectId::PCLASSINFOH501_ValidationRejectionReason::PCLASSINFOH501_ValidationRejectionReason::ChoicesH501_DescriptorIDConfirmationH501_DescriptorIDConfirmation::PCLASSINFOH501_DescriptorIDConfirmation::m_descriptorInfoH501_AccessTokenH501_AccessToken::PCLASSINFOH501_AccessToken::ChoicesH501_AccessToken::operator H235_ClearToken &H501_AccessToken::operator H225_CryptoH323Token &H501_AccessToken::operator H225_GenericData &H501_UsageRequestH501_UsageRequest::PCLASSINFOH501_UsageRequest::m_callInfoH501_UsageRequest::m_usageSpecH501_UpdateInformation_descriptorInfo::PCLASSINFOH501_UpdateInformation_descriptorInfo::ChoicesH501_UpdateInformation_descriptorInfo::operator H225_GloballyUniqueID &H501_UpdateInformation_descriptorInfo::operator H501_Descriptor &H501_ProtocolVersion::PCLASSINFOH501_UsageIndicationRejectionH501_UsageIndicationRejection::PCLASSINFOH501_UsageIndicationRejection::m_reasonH501_UsageIndicationRejectionReasonH501_ArrayOf_SupportedProtocolsH501_ArrayOf_SupportedProtocols::PCLASSINFOH501_RouteInformation_messageType::PCLASSINFOH501_RouteInformation_messageType::ChoicesH501_NonStandardRequestH501_NonStandardRequest::PCLASSINFOH501_ServiceRequestH501_ServiceRequest::PCLASSINFOH501_ServiceRequest::OptionalFieldsH501_ServiceRequest::m_elementIdentifierH501_ServiceRequest::m_domainIdentifierH501_ServiceRequest::m_securityModeH501_ArrayOf_SecurityModeH501_ServiceRequest::m_timeToLiveH501_ServiceRequest::m_usageSpecH501_ArrayOf_SecurityMode::PCLASSINFOH501_UnknownMessageResponseH501_UnknownMessageResponse::PCLASSINFOH501_UnknownMessageResponse::m_unknownMessageH501_UnknownMessageResponse::m_reasonH501_UsageRejectReasonH501_UsageRejectReason::PCLASSINFOH501_UsageRejectReason::ChoicesH501_ArrayOf_AddressTemplateH501_ArrayOf_AddressTemplate::PCLASSINFOH501_ServiceReleaseReason::PCLASSINFOH501_ServiceReleaseReason::ChoicesH501_ArrayOf_NonStandardParameter::PCLASSINFOH501_ContactInformationH501_ContactInformation::PCLASSINFOH501_ContactInformation::OptionalFieldsH501_ContactInformation::m_transportAddressH501_ContactInformation::m_priorityH501_ContactInformation::m_transportQoSH501_ContactInformation::m_securityH501_ContactInformation::m_accessTokensH501_ContactInformation::m_multipleCallsH501_ContactInformation::m_featureSetH501_ContactInformation::m_circuitIDH501_ContactInformation::m_supportedCircuitsH501_SecurityMode::PCLASSINFOH501_SecurityMode::OptionalFieldsH501_SecurityMode::m_authenticationH501_SecurityMode::m_integrityH501_SecurityMode::m_algorithmOIDsH501_AccessRequestH501_AccessRequest::PCLASSINFOH501_AccessRequest::OptionalFieldsH501_AccessRequest::m_destinationInfoH501_AccessRequest::m_sourceInfoH501_AccessRequest::m_callInfoH501_AccessRequest::m_usageSpecH501_AccessRequest::m_desiredProtocolsH501_AddressTemplateH501_AddressTemplate::PCLASSINFOH501_AddressTemplate::OptionalFieldsH501_AddressTemplate::m_patternH501_AddressTemplate::m_routeInfoH501_AddressTemplate::m_timeToLiveH501_AddressTemplate::m_supportedProtocolsH501_AddressTemplate::m_featureSetH501_ArrayOf_AlternatePE::PCLASSINFOH501_UsageConfirmationH501_UsageConfirmation::PCLASSINFOH501_NonStandardRejectionReason::PCLASSINFOH501_NonStandardRejectionReason::ChoicesH501_DescriptorIDRejectionReasonH501_DescriptorIDRejectionReason::PCLASSINFOH501_DescriptorIDRejectionReason::ChoicesH501_UsageIndicationRejectionReason::PCLASSINFOH501_UsageIndicationRejectionReason::ChoicesH501_UsageIndicationH501_UsageIndication::PCLASSINFOH501_UsageIndication::OptionalFieldsH501_UsageIndication::m_callInfoH501_UsageIndication::m_accessTokensH501_UsageIndication::m_senderRoleH501_UsageIndication::m_usageCallStatusH501_UsageCallStatusH501_UsageIndication::m_srcInfoH501_UsageIndication::m_destAddressH501_UsageIndication::m_startTimeH501_UsageIndication::m_endTimeH501_UsageIndication::m_terminationCauseH501_UsageIndication::m_usageFieldsH501_ApplicationMessage::PCLASSINFOH501_ElementIdentifier::PCLASSINFOH501_AccessRejectionH501_AccessRejection::PCLASSINFOH501_AccessRejection::OptionalFieldsH501_AccessRejection::m_reasonH501_AccessRejectionReasonH501_AccessRejection::m_serviceControlH501_RequestInProgressH501_RequestInProgress::PCLASSINFOH501_RequestInProgress::OptionalFieldsH501_RequestInProgress::m_delayH501_RequestInProgress::m_serviceControlH501_DescriptorInfoH501_DescriptorInfo::PCLASSINFOH501_DescriptorInfo::m_descriptorIDH501_DescriptorInfo::m_lastChangedH501_ArrayOf_ContactInformation::PCLASSINFOH501_DescriptorIDRejectionH501_DescriptorIDRejection::PCLASSINFOH501_DescriptorIDRejection::m_reasonH501_ValidationConfirmationH501_ValidationConfirmation::PCLASSINFOH501_ValidationConfirmation::OptionalFieldsH501_ValidationConfirmation::m_destinationInfoH501_ValidationConfirmation::m_usageSpecH501_AccessConfirmationH501_AccessConfirmation::PCLASSINFOH501_AccessConfirmation::OptionalFieldsH501_AccessConfirmation::m_templatesH501_AccessConfirmation::m_partialResponseH501_AccessConfirmation::m_supportedProtocolsH501_AccessConfirmation::m_serviceControlH501_AlternatePEH501_AlternatePE::PCLASSINFOH501_AlternatePE::OptionalFieldsH501_AlternatePE::m_contactAddressH501_AlternatePE::m_priorityH501_AlternatePE::m_elementIdentifierH501_ArrayOf_CircuitIdentifier::PCLASSINFOH501_ArrayOf_ClearToken::PCLASSINFOH501_ValidationRequestH501_ValidationRequest::PCLASSINFOH501_ValidationRequest::OptionalFieldsH501_ValidationRequest::m_accessTokenH501_ValidationRequest::m_destinationInfoH501_ValidationRequest::m_sourceInfoH501_ValidationRequest::m_callInfoH501_ValidationRequest::m_usageSpecH501_AccessRejectionReason::PCLASSINFOH501_AccessRejectionReason::ChoicesH501_DescriptorUpdateAckH501_DescriptorUpdateAck::PCLASSINFOH501_ArrayOf_AliasAddress::PCLASSINFOH501_UsageRejectionH501_UsageRejection::PCLASSINFOH501_UsageRejection::m_reasonH501_DescriptorH501_Descriptor::PCLASSINFOH501_Descriptor::OptionalFieldsH501_Descriptor::m_descriptorInfoH501_Descriptor::m_templatesH501_Descriptor::m_gatekeeperIDH501_NonStandardConfirmationH501_NonStandardConfirmation::PCLASSINFOH501_UsageCallStatus::PCLASSINFOH501_UsageCallStatus::ChoicesD:\openh323\include\h501pdu.hH501PDUH501PDU::PCLASSINFOD:\openh323\include\ixjDefs.hD:\openh323\include\ixjidb.hD:\openh323\include\ixjlid.hD:\openh323\include\jitter.hRTP_JitterBufferRTP_JitterBuffer::PCLASSINFORTP_Session &sessionPINDEX stackSize = 30000RTP_JitterBuffer::UseImmediateReductionBOOL stateRTP_JitterBuffer::GetJitterTimeRTP_JitterBuffer::GetPacketsTooLateRTP_JitterBuffer::GetBufferOverrunsRTP_JitterBuffer::GetMaxConsecutiveMarkerBitsRTP_JitterBuffer::SetMaxConsecutiveMarkerBitsDWORD maxRTP_JitterBuffer::PDECLARE_NOTIFIERJitterThreadMainRTP_JitterBuffer::EntryRTP_JitterBuffer::Entry::nextRTP_JitterBuffer::Entry::prevRTP_JitterBuffer::Entry::tickRTP_JitterBuffer::sessionRTP_JitterBuffer::bufferSizeRTP_JitterBuffer::minJitterTimeRTP_JitterBuffer::maxJitterTimeRTP_JitterBuffer::maxConsecutiveMarkerBitsRTP_JitterBuffer::currentDepthRTP_JitterBuffer::currentJitterTimeRTP_JitterBuffer::packetsTooLateRTP_JitterBuffer::bufferOverrunsRTP_JitterBuffer::consecutiveBufferOverrunsRTP_JitterBuffer::consecutiveMarkerBitsRTP_JitterBuffer::consecutiveEarlyPacketStartTimeRTP_JitterBuffer::lastWriteTimestampRTP_JitterBuffer::lastWriteTickRTP_JitterBuffer::jitterCalcRTP_JitterBuffer::targetJitterTimeRTP_JitterBuffer::jitterCalcPacketCountRTP_JitterBuffer::doJitterReductionImmediatelyRTP_JitterBuffer::doneFreeTrashRTP_JitterBuffer::oldestFrameRTP_JitterBuffer::newestFrameRTP_JitterBuffer::freeFramesRTP_JitterBuffer::currentWriteFrameRTP_JitterBuffer::bufferMutexRTP_JitterBuffer::shuttingDownRTP_JitterBuffer::preBufferingRTP_JitterBuffer::doneFirstWriteRTP_JitterBuffer::analyserRTP_JitterBufferAnalyser *RTP_JitterBuffer::jitterThreadRTP_JitterBuffer::jitterStackSizeRTP_JitterBuffer::aggregratedHandleRTP_AggregatedHandle *D:\openh323\include\lid.hD:\openh323\include\mcspdu.hMCS_TIcfMCS_TIcf::PCLASSINFOMCS_TIcf::m_resultMCS_ResultMCS_TIcf::m_initiatorMCS_UserIdMCS_TIcf::m_tokenIdMCS_TokenIdMCS_TIcf::m_tokenStatusMCS_TokenStatusMCS_PrivateChannelIdMCS_DynamicChannelIdMCS_DynamicChannelId::PCLASSINFOMCS_PrivateChannelId::PCLASSINFOMCS_AUrqMCS_AUrq::PCLASSINFOMCS_ChannelAttributes_staticMCS_ChannelAttributes_static::PCLASSINFOMCS_ChannelAttributes_static::m_channelIdMCS_StaticChannelIdMCS_CLrqMCS_CLrq::PCLASSINFOMCS_CLrq::m_channelIdsMCS_ArrayOf_ChannelIdMCS_EDrqMCS_EDrq::PCLASSINFOMCS_EDrq::m_subHeightMCS_EDrq::m_subIntervalMCS_DataPriorityMCS_DataPriority::PCLASSINFOMCS_DataPriority::EnumerationsMCS_TGrqMCS_TGrq::PCLASSINFOMCS_TGrq::m_initiatorMCS_TGrq::m_tokenIdMCS_ChannelAttributes_userIdMCS_ChannelAttributes_userId::PCLASSINFOMCS_ChannelAttributes_userId::m_joinedMCS_ChannelAttributes_userId::m_userIdMCS_TIrqMCS_TIrq::PCLASSINFOMCS_TIrq::m_initiatorMCS_TIrq::m_tokenIdMCS_DomainMCSPDUMCS_DomainMCSPDU::PCLASSINFOMCS_DomainMCSPDU::ChoicesMCS_DomainMCSPDU::operator MCS_PDin &MCS_PDin &MCS_DomainMCSPDU::operator MCS_EDrq &MCS_EDrq &MCS_DomainMCSPDU::operator MCS_MCrq &MCS_MCrq &MCS_DomainMCSPDU::operator MCS_MCcf &MCS_MCcf &MCS_DomainMCSPDU::operator MCS_PCin &MCS_PCin &MCS_DomainMCSPDU::operator MCS_MTrq &MCS_MTrq &MCS_DomainMCSPDU::operator MCS_MTcf &MCS_MTcf &MCS_DomainMCSPDU::operator MCS_PTin &MCS_PTin &MCS_DomainMCSPDU::operator MCS_DPum &MCS_DPum &MCS_DomainMCSPDU::operator MCS_RJum &MCS_RJum &MCS_DomainMCSPDU::operator MCS_AUrq &MCS_AUrq &MCS_DomainMCSPDU::operator MCS_AUcf &MCS_AUcf &MCS_DomainMCSPDU::operator MCS_DUrq &MCS_DUrq &MCS_DomainMCSPDU::operator MCS_DUin &MCS_DUin &MCS_DomainMCSPDU::operator MCS_CJrq &MCS_CJrq &MCS_DomainMCSPDU::operator MCS_CJcf &MCS_CJcf &MCS_DomainMCSPDU::operator MCS_CLrq &MCS_CLrq &MCS_DomainMCSPDU::operator MCS_CCrq &MCS_CCrq &MCS_DomainMCSPDU::operator MCS_CCcf &MCS_CCcf &MCS_DomainMCSPDU::operator MCS_CDrq &MCS_CDrq &MCS_DomainMCSPDU::operator MCS_CDin &MCS_CDin &MCS_DomainMCSPDU::operator MCS_CArq &MCS_CArq &MCS_DomainMCSPDU::operator MCS_CAin &MCS_CAin &MCS_DomainMCSPDU::operator MCS_CErq &MCS_CErq &MCS_DomainMCSPDU::operator MCS_CEin &MCS_CEin &MCS_DomainMCSPDU::operator MCS_SDrq &MCS_SDrq &MCS_DomainMCSPDU::operator MCS_SDin &MCS_SDin &MCS_DomainMCSPDU::operator MCS_USrq &MCS_USrq &MCS_DomainMCSPDU::operator MCS_USin &MCS_USin &MCS_DomainMCSPDU::operator MCS_TGrq &MCS_TGrq &MCS_DomainMCSPDU::operator MCS_TGcf &MCS_TGcf &MCS_DomainMCSPDU::operator MCS_TIrq &MCS_TIrq &MCS_DomainMCSPDU::operator MCS_TIcf &MCS_TIcf &MCS_DomainMCSPDU::operator MCS_TVrq &MCS_TVrq &MCS_DomainMCSPDU::operator MCS_TVin &MCS_TVin &MCS_DomainMCSPDU::operator MCS_TVrs &MCS_TVrs &MCS_DomainMCSPDU::operator MCS_TVcf &MCS_TVcf &MCS_DomainMCSPDU::operator MCS_TPrq &MCS_TPrq &MCS_DomainMCSPDU::operator MCS_TPin &MCS_TPin &MCS_DomainMCSPDU::operator MCS_TRrq &MCS_TRrq &MCS_DomainMCSPDU::operator MCS_TRcf &MCS_TRcf &MCS_DomainMCSPDU::operator MCS_TTrq &MCS_TTrq &MCS_DomainMCSPDU::operator MCS_TTcf &MCS_TTcf &MCS_ArrayOf_TokenIdMCS_ArrayOf_TokenId::PCLASSINFOMCS_SegmentationMCS_Segmentation::PCLASSINFOMCS_TokenAttributes_grabbedMCS_TokenAttributes_grabbed::PCLASSINFOMCS_TokenAttributes_grabbed::m_tokenIdMCS_TokenAttributes_grabbed::m_grabberMCS_TRcfMCS_TRcf::PCLASSINFOMCS_TRcf::m_resultMCS_TRcf::m_initiatorMCS_TRcf::m_tokenIdMCS_TRcf::m_tokenStatusMCS_TPinMCS_TPin::PCLASSINFOMCS_TPin::m_initiatorMCS_TPin::m_tokenIdMCS_DPumMCS_DPum::PCLASSINFOMCS_DPum::m_reasonMCS_ReasonMCS_TPrqMCS_TPrq::PCLASSINFOMCS_TPrq::m_initiatorMCS_TPrq::m_tokenIdMCS_ArrayOf_TokenAttributesMCS_ArrayOf_TokenAttributes::PCLASSINFOMCS_DUinMCS_DUin::PCLASSINFOMCS_DUin::m_reasonMCS_DUin::m_userIdsMCS_ArrayOf_UserIdMCS_TTcfMCS_TTcf::PCLASSINFOMCS_TTcf::m_initiatorMCS_TTcf::m_tokenIdMCS_TTcf::m_tokenStatusMCS_DUrqMCS_DUrq::PCLASSINFOMCS_DUrq::m_reasonMCS_DUrq::m_userIdsMCS_TRrqMCS_TRrq::PCLASSINFOMCS_TRrq::m_initiatorMCS_TRrq::m_tokenIdMCS_TokenId::PCLASSINFOMCS_TVcfMCS_TVcf::PCLASSINFOMCS_TVcf::m_resultMCS_TVcf::m_initiatorMCS_TVcf::m_tokenIdMCS_TVcf::m_tokenStatusMCS_TVinMCS_TVin::PCLASSINFOMCS_TVin::m_initiatorMCS_TVin::m_tokenIdMCS_TVin::m_recipientMCS_TTrqMCS_TTrq::PCLASSINFOMCS_TTrq::m_initiatorMCS_TTrq::m_tokenIdMCS_ConnectMCSPDU::PCLASSINFOMCS_ConnectMCSPDU::ChoicesMCS_ConnectMCSPDU::operator MCS_Connect_Initial &MCS_Connect_Initial &MCS_ConnectMCSPDU::operator MCS_Connect_Response &MCS_Connect_Response &MCS_ConnectMCSPDU::operator MCS_Connect_Additional &MCS_Connect_Additional &MCS_ConnectMCSPDU::operator MCS_Connect_Result &MCS_Connect_Result &MCS_AssignedChannelIdMCS_AssignedChannelId::PCLASSINFOMCS_TVrsMCS_TVrs::PCLASSINFOMCS_TVrs::m_resultMCS_TVrs::m_recipientMCS_TVrs::m_tokenIdMCS_TVrqMCS_TVrq::PCLASSINFOMCS_TVrq::m_initiatorMCS_TVrq::m_tokenIdMCS_TVrq::m_recipientMCS_USinMCS_USin::PCLASSINFOMCS_USin::m_initiatorMCS_USin::m_channelIdMCS_ChannelIdMCS_USin::m_dataPriorityMCS_USin::m_segmentationMCS_USin::m_userDataMCS_USrqMCS_USrq::PCLASSINFOMCS_USrq::m_initiatorMCS_USrq::m_channelIdMCS_USrq::m_dataPriorityMCS_USrq::m_segmentationMCS_USrq::m_userDataMCS_TokenAttributes_ungivableMCS_TokenAttributes_ungivable::PCLASSINFOMCS_TokenAttributes_ungivable::m_tokenIdMCS_TokenAttributes_ungivable::m_grabberMCS_Connect_InitialMCS_Connect_Initial::PCLASSINFOMCS_Connect_Initial::m_callingDomainSelectorMCS_Connect_Initial::m_calledDomainSelectorMCS_Connect_Initial::m_upwardFlagMCS_Connect_Initial::m_targetParametersMCS_DomainParametersMCS_Connect_Initial::m_minimumParametersMCS_Connect_Initial::m_maximumParametersMCS_Connect_Initial::m_userDataMCS_ChannelAttributesMCS_ChannelAttributes::PCLASSINFOMCS_ChannelAttributes::ChoicesMCS_ChannelAttributes::operator MCS_ChannelAttributes_static &MCS_ChannelAttributes_static &MCS_ChannelAttributes::operator MCS_ChannelAttributes_userId &MCS_ChannelAttributes_userId &MCS_ChannelAttributes::operator MCS_ChannelAttributes_private &MCS_ChannelAttributes_private &MCS_ChannelAttributes::operator MCS_ChannelAttributes_assigned &MCS_ChannelAttributes_assigned &MCS_ChannelAttributes_privateMCS_ChannelAttributes_private::PCLASSINFOMCS_ChannelAttributes_private::m_joinedMCS_ChannelAttributes_private::m_channelIdMCS_ChannelAttributes_private::m_managerMCS_ChannelAttributes_private::m_admittedMCS_ChannelAttributes_assignedMCS_ChannelAttributes_assigned::PCLASSINFOMCS_ChannelAttributes_assigned::m_channelIdMCS_MCcfMCS_MCcf::PCLASSINFOMCS_MCcf::m_mergeChannelsMCS_ArrayOf_ChannelAttributesMCS_MCcf::m_purgeChannelIdsMCS_Result::PCLASSINFOMCS_Result::EnumerationsMCS_ArrayOf_ChannelAttributes::PCLASSINFOMCS_DiagnosticMCS_Diagnostic::PCLASSINFOMCS_Diagnostic::EnumerationsMCS_StaticChannelId::PCLASSINFOMCS_ArrayOf_UserId::PCLASSINFOMCS_MCrqMCS_MCrq::PCLASSINFOMCS_MCrq::m_mergeChannelsMCS_MCrq::m_purgeChannelIdsMCS_TokenAttributes_givenMCS_TokenAttributes_given::PCLASSINFOMCS_TokenAttributes_given::m_tokenIdMCS_TokenAttributes_given::m_recipientMCS_Connect_ResultMCS_Connect_Result::PCLASSINFOMCS_Connect_Result::m_resultMCS_Connect_ResponseMCS_Connect_Response::PCLASSINFOMCS_Connect_Response::m_resultMCS_Connect_Response::m_calledConnectIdMCS_Connect_Response::m_domainParametersMCS_Connect_Response::m_userDataMCS_UserId::PCLASSINFOMCS_PDinMCS_PDin::PCLASSINFOMCS_PDin::m_heightLimitMCS_PCinMCS_PCin::PCLASSINFOMCS_PCin::m_detachUserIdsMCS_PCin::m_purgeChannelIdsMCS_TokenAttributes_givingMCS_TokenAttributes_giving::PCLASSINFOMCS_TokenAttributes_giving::m_tokenIdMCS_TokenAttributes_giving::m_grabberMCS_TokenAttributes_giving::m_recipientMCS_MTcfMCS_MTcf::PCLASSINFOMCS_MTcf::m_mergeTokensMCS_MTcf::m_purgeTokenIdsMCS_Reason::PCLASSINFOMCS_Reason::EnumerationsMCS_ArrayOf_ChannelId::PCLASSINFOMCS_TokenAttributesMCS_TokenAttributes::PCLASSINFOMCS_TokenAttributes::ChoicesMCS_TokenAttributes::operator MCS_TokenAttributes_grabbed &MCS_TokenAttributes_grabbed &MCS_TokenAttributes::operator MCS_TokenAttributes_inhibited &MCS_TokenAttributes_inhibited &MCS_TokenAttributes::operator MCS_TokenAttributes_giving &MCS_TokenAttributes_giving &MCS_TokenAttributes::operator MCS_TokenAttributes_ungivable &MCS_TokenAttributes_ungivable &MCS_TokenAttributes::operator MCS_TokenAttributes_given &MCS_TokenAttributes_given &MCS_MTrqMCS_MTrq::PCLASSINFOMCS_MTrq::m_mergeTokensMCS_MTrq::m_purgeTokenIdsMCS_ChannelId::PCLASSINFOMCS_CAinMCS_CAin::PCLASSINFOMCS_CAin::m_initiatorMCS_CAin::m_channelIdMCS_CAin::m_userIdsMCS_CCcfMCS_CCcf::PCLASSINFOMCS_CCcf::OptionalFieldsMCS_CCcf::m_resultMCS_CCcf::m_initiatorMCS_CCcf::m_channelIdMCS_CDinMCS_CDin::PCLASSINFOMCS_CDin::m_channelIdMCS_Connect_AdditionalMCS_Connect_Additional::PCLASSINFOMCS_Connect_Additional::m_calledConnectIdMCS_Connect_Additional::m_dataPriorityMCS_CArqMCS_CArq::PCLASSINFOMCS_CArq::m_initiatorMCS_CArq::m_channelIdMCS_CArq::m_userIdsMCS_CDrqMCS_CDrq::PCLASSINFOMCS_CDrq::m_initiatorMCS_CDrq::m_channelIdMCS_DomainParameters::PCLASSINFOMCS_DomainParameters::m_maxChannelIdsMCS_DomainParameters::m_maxUserIdsMCS_DomainParameters::m_maxTokenIdsMCS_DomainParameters::m_numPrioritiesMCS_DomainParameters::m_minThroughputMCS_DomainParameters::m_maxHeightMCS_DomainParameters::m_maxMCSPDUsizeMCS_DomainParameters::m_protocolVersionMCS_CCrqMCS_CCrq::PCLASSINFOMCS_CCrq::m_initiatorMCS_CEinMCS_CEin::PCLASSINFOMCS_CEin::m_channelIdMCS_CEin::m_userIdsMCS_TokenStatus::PCLASSINFOMCS_TokenStatus::EnumerationsMCS_TokenAttributes_inhibitedMCS_TokenAttributes_inhibited::PCLASSINFOMCS_TokenAttributes_inhibited::m_tokenIdMCS_TokenAttributes_inhibited::m_inhibitorsMCS_CJcfMCS_CJcf::PCLASSINFOMCS_CJcf::OptionalFieldsMCS_CJcf::m_resultMCS_CJcf::m_initiatorMCS_CJcf::m_requestedMCS_CJcf::m_channelIdMCS_CErqMCS_CErq::PCLASSINFOMCS_CErq::m_initiatorMCS_CErq::m_channelIdMCS_CErq::m_userIdsMCS_SDinMCS_SDin::PCLASSINFOMCS_SDin::m_initiatorMCS_SDin::m_channelIdMCS_SDin::m_dataPriorityMCS_SDin::m_segmentationMCS_SDin::m_userDataMCS_SDrqMCS_SDrq::PCLASSINFOMCS_SDrq::m_initiatorMCS_SDrq::m_channelIdMCS_SDrq::m_dataPriorityMCS_SDrq::m_segmentationMCS_SDrq::m_userDataMCS_TGcfMCS_TGcf::PCLASSINFOMCS_TGcf::m_resultMCS_TGcf::m_initiatorMCS_TGcf::m_tokenIdMCS_TGcf::m_tokenStatusMCS_CJrqMCS_CJrq::PCLASSINFOMCS_CJrq::m_initiatorMCS_CJrq::m_channelIdMCS_RJumMCS_RJum::PCLASSINFOMCS_RJum::m_diagnosticMCS_RJum::m_initialOctetsMCS_AUcfMCS_AUcf::PCLASSINFOMCS_AUcf::OptionalFieldsMCS_AUcf::m_resultMCS_AUcf::m_initiatorMCS_PTinMCS_PTin::PCLASSINFOMCS_PTin::m_purgeTokenIdsD:\openh323\include\mediafmt.hOpalMediaFormat::PCLASSINFOOpalMediaFormat::PLISTListBOOL exact = TRUEOpalMediaFormat::IsValidOpalMediaFormat::GetPayloadTypeOpalMediaFormat::SetPayloadTypeRTP_DataFrame::PayloadTypes typeOpalMediaFormat::GetDefaultSessionIDOpalMediaFormat::NeedsJitterBufferOpalMediaFormat::GetBandwidthOpalMediaFormat::GetFrameSizeOpalMediaFormat::SetFrameSizeOpalMediaFormat::GetFrameTimeOpalMediaFormat::SetFrameTimeOpalMediaFormat::GetTimeUnitsOpalMediaFormat::SetTimeUnitsunsigned int unitsOpalMediaFormat::StandardTimeUnitsList &listbool dflt = FALSE ///< Default value if option not present int dflt = 0 ///< Default value if option not present double dflt = 0 ///< Default value if option not present PINDEX dflt = 0 ///< Default value if option not present const PString &dflt = PString::Empty() ///< Default value if option not present OpalMediaFormat::HasOptionOpalMediaFormat::GetOptionOpalMediaOption &OpalMediaFormat::GetOptionCountOpalMediaFormat::rtpPayloadTypeOpalMediaFormat::defaultSessionIDOpalMediaFormat::needsJitterOpalMediaFormat::bandwidthOpalMediaFormat::frameSizeOpalMediaFormat::frameTimeOpalMediaFormat::timeUnitsOpalMediaFormat::media_format_mutexOpalMediaFormat::optionsPSortedListOpalMediaFormat::codecBaseTimeOpalVideoFormat::PCLASSINFOunsigned int frameWidthunsigned int frameHeighttime_t timeStamp = 0OpalMediaFormatFactoryPFactoryOpalMediaOptionEnumOpalMediaOptionOpalMediaOption::PCLASSINFOOpalMediaOption::MergeTypeenum OpalMediaOption::MergeType mergeOpalMediaOption::CompareValueOpalMediaOption::AssignOpalMediaOption::GetNameOpalMediaOption::IsReadOnlyOpalMediaOption::SetReadOnlyOpalMediaOption::GetMergeenum OpalMediaOption::MergeTypeOpalMediaOption::SetMergeOpalMediaOption::m_nameOpalMediaOption::m_readOnlyOpalMediaOption::m_mergeOpalMediaOptionEnum::PCLASSINFOenum OpalMediaOption::MergeType merge = EqualMergePINDEX value = 0OpalMediaOptionEnum::GetValueOpalMediaOptionEnum::m_enumerationsOpalMediaOptionEnum::m_valueoperator >>istream &bool &bOpalMediaOptionIntegerclass OpalMediaOptionValueOpalMediaFormatBaseListOpalMediaFormatList::PCLASSINFOconst OpalMediaFormatList &lconst PString &wildcardconst unsigned int clockRateconst char *rtpEncodingName = NULL ///< RTP payload type name OpalMediaFormatList::HasFormatOpalMediaFormatList::AppendOpalMediaFormatList::Insertconst PObject &OpalMediaFormatList::InsertAtOpalMediaFormatList::SetAtOpalMediaOptionBooleanclass OpalMediaOptionValueOpalMediaOptionStringOpalMediaOptionString::PCLASSINFOOpalMediaOptionString::GetValueOpalMediaOptionString::m_valueOpalMediaOptionValueOpalMediaOptionValuetypename TOpalMediaOptionValue::PCLASSINFOOpalMediaOptionValueOpalMediaOptionValue::OpalMediaOptionValueenum OpalMediaOption::MergeType merge = MinMergeT value = 0T minimum = std::numeric_limits::min()T maximum = std::numeric_limits::max()OpalMediaOptionValue::CloneOpalMediaOptionValue::PrintOnOpalMediaOptionValue::ReadFromOpalMediaOptionValue::CompareValueOpalMediaOptionValue::AssignOpalMediaOptionValue::GetValueTOpalMediaOptionValue::SetValueT valueOpalMediaOptionValue::m_valueOpalMediaOptionValue::m_minimumOpalMediaOptionValue::m_maximumOpalStaticMediaFormatOpalMediaOptionRealclass OpalMediaOptionValueD:\openh323\include\opalosp.hIpAddressToOSPStringProviderProvider::PCLASSINFOProvider::ProviderProvider::~ProviderProvider::OpenProvider::CloseProvider::operator OSPTPROVHANDLEOSPTPROVHANDLEProvider::IsOpenProvider::GetHostAddressProvider::SetDeleteTimeoutProvider::GetDeleteTimeoutProvider::deleteTimeoutProvider::SetMaxSimultConnProvider::GetMaxSimultConnProvider::maxSimultConnProvider::SetHttpPersistProvider::GetHttpPersistProvider::httpPersistProvider::SetHttpRetryDelayProvider::GetHttpRetryDelayProvider::httpRetryDelayProvider::SetHttpRetryProvider::GetHttpRetryProvider::httpRetryProvider::SetHttpTimeoutProvider::GetHttpTimeoutProvider::httpTimeoutProvider::SetSSLLifetimeProvider::GetSSLLifetimeProvider::sslLifeTimeProvider::SetDeviceIDPString vProvider::GetDeviceIDProvider::deviceIDProvider::SetCustomerIDProvider::GetCustomerIDProvider::customerIDProvider::SetMessageCountProvider::GetMessageCountProvider::messageCountProvider::handleProvider::hostAddressTransportAddressToOSPStringconst H225_TransportAddress &taddrTransactionTransaction::PCLASSINFOTransaction::TransactionTransaction::~TransactionTransaction::OpenTransaction::AuthorisationInfoTransaction::AuthorisationInfo::Extractconst H225_AdmissionRequest &arqPDUTransaction::AuthorisationInfo::ospvSourceTransaction::AuthorisationInfo::ospvSourceDeviceTransaction::AuthorisationInfo::callingNumberTransaction::AuthorisationInfo::calledNumberTransaction::AuthorisationInfo::callIDTransaction::AuthoriseTransaction::AuthorisationInfo &infoTransaction::DestinationInfoTransaction::DestinationInfo::InsertBOOL useCiscoBug = FALSE H225_Setup_UUIE &setupPDUTransaction::DestinationInfo::InsertTokenBOOL useCiscoBug = FALSETransaction::DestinationInfo::timeLimitTransaction::DestinationInfo::callIDTransaction::DestinationInfo::calledNumberTransaction::DestinationInfo::hasCallingNumberTransaction::DestinationInfo::callingNumberTransaction::DestinationInfo::destinationAddressTransaction::DestinationInfo::destinationTransaction::DestinationInfo::tokenTransaction::GetFirstDestinationPString &destinationPString &deviceTransaction::DestinationInfo &infoTransaction::GetNextDestinationint endReasonTransaction::CallStatisticsunsigned int lostSentPacketsint lostFractionSentunsigned int lostReceivedPacketsint lostFractionReceivedconst PTime &firstRTPTimeTransaction::CallEndTransaction::ReportUsageTransaction::ValidationInfoTransaction::ValidationInfo::ValidationInfoTransaction::ValidationInfo::ExtractTransaction::ValidationInfo::ExtractTokenTransaction::ValidationInfo::ospvSourceTransaction::ValidationInfo::ospvDestTransaction::ValidationInfo::ospvSourceDeviceTransaction::ValidationInfo::ospvDestDeviceTransaction::ValidationInfo::callingNumberTransaction::ValidationInfo::calledNumberTransaction::ValidationInfo::callIDTransaction::ValidationInfo::tokenTransaction::ValidationInfo::tokenAlgoTransaction::Validateconst Transaction::ValidationInfo &infoTransaction::CloseTransaction::IsOpenTransaction::CheckOpenedAndNotEndedTransaction::operator OSPTTRANHANDLEOSPTTRANHANDLETransaction::GetProviderProvider *Transaction::providerTransaction::userTransaction::handleTransaction::endedTransaction::lostSentPacketsTransaction::lostReceivedPacketsTransaction::lostFractionSentTransaction::lostFractionReceivedTransaction::firstRTPTimeIpAddressPortToOSPStringD:\openh323\include\opalplugin.hPluginCodec_ControlDefnPluginCodec_ControlDefn::namePluginCodec_ControlDefn::controlint (__cdecl *%)(const PluginCodec_Definition *,void *,const char *,void *,unsigned int *)PluginCodec_H323GenericCodecDataPluginCodec_H323GenericCodecData::standardIdentifierPluginCodec_H323GenericCodecData::maxBitRatePluginCodec_H323GenericCodecData::nParametersPluginCodec_H323GenericCodecData::paramsconst PluginCodec_H323GenericParameterDefinition *OPAL_VIDEO_FRAME_DATA_PTRunsigned char *const PluginCodec_Video_FrameHeader *basePluginCodec_Video_FrameHeader *basePluginCodec_DefinitionPluginCodec_Definition::versionPluginCodec_Definition::infoPluginCodec_information *PluginCodec_Definition::flagsPluginCodec_Definition::descrPluginCodec_Definition::sourceFormatPluginCodec_Definition::destFormatPluginCodec_Definition::userDataPluginCodec_Definition::sampleRatePluginCodec_Definition::bitsPerSecPluginCodec_Definition::nsPerFramePluginCodec_Definition::samplesPerFramePluginCodec_Definition::bytesPerFramePluginCodec_Definition::recommendedFramesPerPacketPluginCodec_Definition::maxFramesPerPacketPluginCodec_Definition::rtpPayloadunsigned charPluginCodec_Definition::sdpFormatPluginCodec_Definition::createCodecvoid *(__cdecl *%)(const PluginCodec_Definition *)PluginCodec_Definition::destroyCodecvoid (__cdecl *%)(const PluginCodec_Definition *,void *)PluginCodec_Definition::codecFunctionint (__cdecl *%)(const PluginCodec_Definition *,void *,const void *,unsigned int *,void *,unsigned int *,unsigned int *)PluginCodec_Definition::codecControlsPluginCodec_ControlDefn *PluginCodec_Definition::h323CapabilityTypePluginCodec_Definition::h323CapabilityDataPluginCodec_H323AudioGSMDataPluginCodec_H323AudioGSMData::comfortNoiseint %: 1PluginCodec_H323AudioGSMData::scrambledPluginCodec_FlagsOPAL_FILE_FRAME_DATA_PTRconst PluginCodec_File_FrameHeader *basePluginCodec_File_FrameHeader *basestruct PluginCodec_Definition *(__cdecl *%)(unsigned int *,unsigned int)PluginCodec_Video_FrameHeaderPluginCodec_Video_FrameHeader::xPluginCodec_Video_FrameHeader::yPluginCodec_Video_FrameHeader::widthPluginCodec_Video_FrameHeader::heightPluginCodec_File_FrameHeaderPluginCodec_File_FrameHeader::segmentlongPluginCodec_File_FrameHeader::segmentcountPluginCodec_H323NonStandardCodecData::objectIdPluginCodec_H323NonStandardCodecData::t35CountryCodePluginCodec_H323NonStandardCodecData::t35ExtensionPluginCodec_H323NonStandardCodecData::manufacturerCodeunsigned shortPluginCodec_H323NonStandardCodecData::dataconst unsigned char *PluginCodec_H323NonStandardCodecData::dataLengthPluginCodec_H323NonStandardCodecData::capabilityMatchFunctionint (__cdecl *%)(PluginCodec_H323NonStandardCodecData *)PluginCodec_H323AudioG7231AnnexCPluginCodec_H323AudioG7231AnnexC::maxAl_sduAudioFramesPluginCodec_H323AudioG7231AnnexC::silenceSuppressionPluginCodec_H323AudioG7231AnnexC::highRateMode0int %: 6PluginCodec_H323AudioG7231AnnexC::highRateMode1PluginCodec_H323AudioG7231AnnexC::lowRateMode0PluginCodec_H323AudioG7231AnnexC::lowRateMode1PluginCodec_H323AudioG7231AnnexC::sidMode0int %: 4PluginCodec_H323AudioG7231AnnexC::sidMode1unsigned int (__cdecl *%)(void)PluginCodec_H323GenericParameterDefinitionPluginCodec_H323GenericParameterDefinition::collapsingPluginCodec_H323GenericParameterDefinition::idPluginCodec_H323GenericParameterDefinition::PluginCodec_H323GenericParameterTypePluginCodec_H323GenericParameterDefinition::typeenum PluginCodec_H323GenericParameterDefinition::PluginCodec_H323GenericParameterTypePluginCodec_H323GenericParameterDefinition::__unnamed_1PluginCodec_H323GenericParameterDefinition::__unnamed_1::integerunsigned longPluginCodec_H323GenericParameterDefinition::__unnamed_1::octetstringPluginCodec_H323GenericParameterDefinition::__unnamed_1::genericparameterPluginCodec_H323GenericParameterDefinition *PluginCodec_H323GenericParameterDefinition::valuePluginCodec_ReturnCoderFlagsPluginCodec_CoderFlagsPluginCodec_H323CapabilityExtensionPluginCodec_H323CapabilityExtension::indexPluginCodec_H323CapabilityExtension::dataPluginCodec_H323CapabilityExtension::dataLengthPluginCodec_informationPluginCodec_information::timestampPluginCodec_information::sourceAuthorPluginCodec_information::sourceVersionPluginCodec_information::sourceEmailPluginCodec_information::sourceURLPluginCodec_information::sourceCopyrightPluginCodec_information::sourceLicensePluginCodec_information::sourceLicenseCodePluginCodec_information::codecDescriptionPluginCodec_information::codecAuthorPluginCodec_information::codecVersionPluginCodec_information::codecEmailPluginCodec_information::codecURLPluginCodec_information::codecCopyrightPluginCodec_information::codecLicensePluginCodec_information::codecLicenseCodePluginCodec_Video_SetFrameInfoPluginCodec_Video_SetFrameInfo::widthPluginCodec_Video_SetFrameInfo::heightD:\openh323\include\opalvxml.hG7231_File_CodecG7231_File_Codec::PCLASSINFOunsigned int &framesG7231_File_Codec::lastFrameLenG7231_File_CapabilityG7231_File_Capability::PCLASSINFOOpalVXMLSessionPVXMLSessionOpalVXMLSession::PCLASSINFOPTextToSpeech *tts = NULLBOOL autoDelete = FALSEOpalVXMLSession::connD:\openh323\include\opalwavfile.hOpalWAVFilePWAVFileOpalWAVFile::PCLASSINFOOpenMode mode = ReadWriteint opts = ModeDefaultunsigned int format = fmt_PCMD:\openh323\include\openh323buildopts.hD:\openh323\include\peclient.hH323PeerElementH323PeerElement::PCLASSINFOH323PeerElement::GetFirstDescriptorPSafePtrH323PeerElement::GetFirstLocalServiceRelationshipPSafePtrH323PeerElement::GetFirstRemoteServiceRelationshipBOOL keepTrying = TRUEint reason = H501_ServiceReleaseReason::e_terminatedenum H323PeerElement::ErrorBOOL now = FALSE const H225_ArrayOf_AliasAddress &aliasunsigned int options = H323PeerElementDescriptor::Protocol_H323const H225_ArrayOf_AliasAddress &transportAddrconst H323TransportAddressArray &transportAddrsconst PStringArray &aliasesBOOL now = FALSEunsigned int options = H323PeerElementDescriptor::Protocol_H323 const OpalGloballyUniqueID &peerIDH501PDU &requestH323PeerElement::H323_AnnexG::Request &requestH323PeerElement::OnAddServiceRelationshipH323PeerElement::OnRemoveServiceRelationshipH323PeerElement::OnNewDescriptorconst H323PeerElementDescriptor &H323PeerElement::OnUpdateDescriptorH323PeerElement::OnRemoveDescriptorH501DescriptorUpdate &infoH323PeerElement::AliasKeyH323PeerElement::AliasKey::AliasKeyconst H225_AliasAddress &_aliasconst OpalGloballyUniqueID &_idPINDEX _posBOOL _wild = FALSEH323PeerElement::AliasKey::idH323PeerElement::AliasKey::posH323PeerElement::AliasKey::wildBOOL wild = FALSEH323PeerElement::PDECLARE_NOTIFIERUpdateAllDescriptorsH323PeerElement::localNameMutexH323PeerElement::localIdentifierH323PeerElement::domainNameH323PeerElement::requestMutexH323PeerElement::monitorH323PeerElement::monitorStopH323PeerElement::monitorTickleH323PeerElement::basePeerOrdinalMutexH323PeerElement::basePeerOrdinalH323PeerElement::localServiceRelationshipsPSafeSortedListH323PeerElement::localPeerListMutexH323PeerElement::localServiceOrdinalsPOrdinalSetH323PeerElement::remotePeerListMutexH323PeerElement::remoteServiceRelationshipsH323PeerElement::remotePeerAddrToServiceIDH323PeerElement::PDICTIONARYStringToOrdinalKeyPOrdinalKeyH323PeerElement::remotePeerAddrToOrdinalKeyH323PeerElement::descriptorsPSafeSortedListH323PeerElement::PSORTED_LISTAliasKeyListH323PeerElement::aliasMutexH323PeerElement::transportAddressToDescriptorIDH323PeerElement::specificAliasToDescriptorIDH323PeerElement::wildcardAliasToDescriptorIDH323PeerElementServiceRelationshipH323PeerElementServiceRelationship::PCLASSINFOH323PeerElementServiceRelationship::H323PeerElementServiceRelationshipconst OpalGloballyUniqueID &_serviceIDH323PeerElementServiceRelationship::CompareH323PeerElementServiceRelationship::serviceIDH323PeerElementServiceRelationship::ordinalH323PeerElementServiceRelationship::peerH323PeerElementServiceRelationship::nameH323PeerElementServiceRelationship::createdTimeH323PeerElementServiceRelationship::lastUpdateTimeH323PeerElementServiceRelationship::expireTimeH501ServiceRequestH501TransactionH501Transaction::PCLASSINFOH501Transaction::requestCommonH501_MessageCommonInfo &H501Transaction::confirmCommonH501Transaction::peerElementH323PeerElement &H501ServiceRequest::PCLASSINFOH501ServiceRequest::srqH501ServiceRequest::scfH501ServiceRequest::srjH501AccessRequestH501AccessRequest::PCLASSINFOH501AccessRequest::arqH501AccessRequest::acfH501AccessRequest::arjH323PeerElementDescriptorH323PeerElementDescriptor::PCLASSINFOH323PeerElementDescriptor::H323PeerElementDescriptorconst OpalGloballyUniqueID &_descriptorIDH323PeerElementDescriptor::OptionsH323PeerElementDescriptor::SetPriorityOptionunsigned int priH323PeerElementDescriptor::GetPriorityOptionH501_AddressTemplate &addressTemplatesconst H225_EndpointType &epunsigned int protocolsH323PeerElementDescriptor::descriptorIDH323PeerElementDescriptor::StatesH323PeerElementDescriptor::stateenum H323PeerElementDescriptor::StatesH323PeerElementDescriptor::addressTemplatesH323PeerElementDescriptor::gatekeeperIDH323PeerElementDescriptor::lastChangedH323PeerElementDescriptor::creatorH501DescriptorUpdateH501DescriptorUpdate::PCLASSINFOH501DescriptorUpdate::duH501DescriptorUpdate::ackD:\openh323\include\q931.hQ931::PCLASSINFOQ931::MsgTypesunsigned int codingStandard = 0unsigned int location = 0 int callRef = -1Q931::GetCallReferenceQ931::IsFromDestinationQ931::GetMessageTypeenum Q931::MsgTypesQ931::InformationElementCodesenum Q931::InformationElementCodes ieQ931::InformationTransferCapabilityenum Q931::InformationTransferCapability capabilityunsigned int userInfoLayer1 = 5 ///< 5 = Recommendations H.221 and H.242 enum Q931::InformationTransferCapability &capabilityunsigned int *codingStandard = NULLunsigned int *userInfoLayer1 = NULL enum Q931::CauseValues valueunsigned int standard = 0unsigned int location = 0 ///< 0 = User enum Q931::CauseValuesunsigned int *standard = NULLunsigned int *location = NULL ///< 0 = User enum Q931::CallStates valueunsigned int standard = 0 ///< 0 = ITU-T standardized coding enum Q931::CallStatesunsigned int *standard = NULL ///< 0 = ITU-T standardized coding enum Q931::SignalInfo valueenum Q931::SignalInfoQ931::ProgressIndicationunsigned int *location = NULL Q931::NumberingPlanCodesQ931::TypeOfNumberCodesint screening = -1 ///< 0 = user provided, not screened unsigned int *plan = NULLunsigned int *type = NULLunsigned int *presentation = NULLunsigned int *screening = NULLunsigned int defPresentation = 0unsigned int defScreening = 0 ///< Default value if octet3a not present unsigned int type = 0 ///< 0 = Unknown number type unsigned int *type = NULL ///< Number type int screening = -1int reason = -1 ///< 0 = Unknown reason , -1 = no octet 3b unsigned int *reason = NULLunsigned int defScreening = 0unsigned int defReason = 0 ///< Default value if octet 3b not present unsigned int interfaceType = 0unsigned int preferredOrExclusive = 0int channelNumber = 1 ///< -1 = any, 0 = none/D, 1 = channel 1/B1, etc. 1-15,17-31 unsigned int *interfaceType = NULLunsigned int *preferredOrExclusive = NULLint *channelNumber = NULL ///< Channel number Q931::callReferenceQ931::fromDestinationQ931::protocolDiscriminatorQ931::messageTypeQ931::PDICTIONARYInternalInformationElementsQ931::informationElementsD:\openh323\include\QTIoctl.hD:\openh323\include\rfc2190avcodec.hD:\openh323\include\rfc2833.hOpalRFC2833Info::PCLASSINFOunsigned int timestamp = 0OpalRFC2833Info::GetTonecharOpalRFC2833Info::GetDurationOpalRFC2833Info::GetTimestampOpalRFC2833Info::IsToneStartOpalRFC2833Info::toneOpalRFC2833Info::durationOpalRFC2833Info::timestampOpalRFC2833OpalRFC2833::PCLASSINFOconst PNotifier &receiveNotifierOpalRFC2833::GetPayloadTypeOpalRFC2833::SetPayloadTypeOpalRFC2833::GetReceiveHandlerconst PNotifier &OpalRFC2833::GetTransmitHandlerOpalRFC2833::PDECLARE_NOTIFIERTransmitEndedReceiveTimeoutTransmitPacketReceivedPacketOpalRFC2833::payloadTypeOpalRFC2833::mutexOpalRFC2833::receiveNotifierOpalRFC2833::receiveCompleteOpalRFC2833::receivedToneOpalRFC2833::receivedDurationOpalRFC2833::receiveTimestampOpalRFC2833::receiveTimerOpalRFC2833::receiveHandlerOpalRFC2833::transmitStateOpalRFC2833::transmitCodeOpalRFC2833::transmitTimestampOpalRFC2833::transmitTimerOpalRFC2833::transmitHandlerD:\openh323\include\rtp.hRTP_UserData::PCLASSINFORTP_SessionRTP_Session::PCLASSINFORTP_UserData *userData = NULLPINDEX stackSize = 30000 ///< Stack size for jitter thread RTP_Session::ModifyQOSRTP_Session::ReadDataRTP_Session::WriteDataRTP_Session::WriteControlRTP_Session::CloseRTP_Session::GetLocalHostNameenum RTP_Session::SendReceiveStatusRTP_Session::ReceiverReportRTP_Session::ReceiverReport::PCLASSINFORTP_Session::ReceiverReport::sourceIdentifierRTP_Session::ReceiverReport::fractionLostRTP_Session::ReceiverReport::totalLostRTP_Session::ReceiverReport::lastSequenceNumberRTP_Session::ReceiverReport::jitterRTP_Session::ReceiverReport::lastTimestampRTP_Session::ReceiverReport::delayRTP_Session::PARRAYSourceDescriptionArrayRTP_Session::SourceDescriptionReceiverReportArrayRTP_Session::SenderReportRTP_Session::SenderReport::PCLASSINFORTP_Session::SenderReport::sourceIdentifierRTP_Session::SenderReport::realTimestampRTP_Session::SenderReport::rtpTimestampRTP_Session::SenderReport::packetsSentRTP_Session::SenderReport::octetsSentconst RTP_Session::SenderReport &senderconst ReceiverReportArray &reportsRTP_Session::SourceDescription::PCLASSINFORTP_Session::SourceDescription::SourceDescriptionRTP_Session::SourceDescription::sourceIdentifierRTP_Session::SourceDescription::itemsPOrdinalToStringconst SourceDescriptionArray &descriptionsconst PDWORDArray &sourcesconst PString &reasonunsigned int subtypeconst BYTE *dataRTP_Session::GetSessionIDRTP_Session::GetUserDataRTP_UserData *RTP_Session::GetSyncSourceOutRTP_Session::IncrementReferenceRTP_Session::DecrementReferenceRTP_Session::WillIgnoreOtherSourcesRTP_Session::SetIgnoreOtherSourcesBOOL ignoreRTP_Session::WillIgnoreOutOfOrderPacketsRTP_Session::SetIgnoreOutOfOrderPacketsRTP_Session::GetReportTimeIntervalRTP_Session::SetReportTimeIntervalconst PTimeInterval &intervalRTP_Session::GetReportTimerRTP_Session::GetTxStatisticsIntervalRTP_Session::GetRxStatisticsIntervalRTP_Session::GetPacketsSentRTP_Session::GetOctetsSentRTP_Session::GetPacketsReceivedRTP_Session::GetOctetsReceivedRTP_Session::GetPacketsLostRTP_Session::GetPacketsOutOfOrderRTP_Session::GetAverageSendTimeRTP_Session::GetMaximumSendTimeRTP_Session::GetMinimumSendTimeRTP_Session::GetAverageReceiveTimeRTP_Session::GetMaximumReceiveTimeRTP_Session::GetMinimumReceiveTimeRTP_Session::GetAvgJitterTimeRTP_Session::GetMaxJitterTimeRTP_Session::GetFirstDataReceivedTimeRTP_Session::GetLocalTransportAddressRTP_Session::GetRemoteTransportAddressRTP_Session::GetDataSocketHandleRTP_Session::GetControlSocketHandleRTP_Session::sessionIDRTP_Session::canonicalNameRTP_Session::toolNameRTP_Session::referenceCountRTP_Session::userDataRTP_Session::jitterRTP_JitterBuffer *RTP_Session::ignoreOtherSourcesRTP_Session::ignoreOutOfOrderPacketsRTP_Session::syncSourceOutRTP_Session::syncSourceInRTP_Session::reportTimeIntervalRTP_Session::txStatisticsIntervalRTP_Session::rxStatisticsIntervalRTP_Session::lastSentSequenceNumberRTP_Session::expectedSequenceNumberRTP_Session::lastSentTimestampRTP_Session::lastSentPacketTimeRTP_Session::lastReceivedPacketTimeRTP_Session::lastRRSequenceNumberRTP_Session::consecutiveOutOfOrderPacketsRTP_Session::packetsSentRTP_Session::octetsSentRTP_Session::packetsReceivedRTP_Session::octetsReceivedRTP_Session::packetsLostRTP_Session::packetsOutOfOrderRTP_Session::averageSendTimeRTP_Session::maximumSendTimeRTP_Session::minimumSendTimeRTP_Session::averageReceiveTimeRTP_Session::maximumReceiveTimeRTP_Session::minimumReceiveTimeRTP_Session::jitterLevelRTP_Session::maximumJitterLevelRTP_Session::localAddressRTP_Session::remoteAddressRTP_Session::txStatisticsCountRTP_Session::rxStatisticsCountRTP_Session::averageSendTimeAccumRTP_Session::maximumSendTimeAccumRTP_Session::minimumSendTimeAccumRTP_Session::averageReceiveTimeAccumRTP_Session::maximumReceiveTimeAccumRTP_Session::minimumReceiveTimeAccumRTP_Session::packetsLostSinceLastRRRTP_Session::lastTransitTimeRTP_Session::firstDataReceivedTimeRTP_Session::reportMutexRTP_Session::reportTimerRTP_Session::aggregatorRTP_DataFrame::PCLASSINFORTP_DataFrame::GetVersionRTP_DataFrame::GetExtensionRTP_DataFrame::GetMarkerRTP_DataFrame::GetPayloadTypeenum RTP_DataFrame::PayloadTypesenum RTP_DataFrame::PayloadTypes tRTP_DataFrame::GetSequenceNumberRTP_DataFrame::SetSequenceNumberWORD nRTP_DataFrame::GetTimestampRTP_DataFrame::SetTimestampDWORD tRTP_DataFrame::GetSyncSourceRTP_DataFrame::SetSyncSourceDWORD sRTP_DataFrame::GetContribSrcCountRTP_DataFrame::GetPayloadSizeRTP_DataFrame::GetPayloadPtrRTP_DataFrame::payloadSizeRTP_SessionManager::PCLASSINFORTP_SessionManager::PDICTIONARYSessionDictRTP_SessionManager::sessionsRTP_SessionManager::mutexRTP_SessionManager::enumerationIndexRTP_QOSRTP_QOS::PCLASSINFORTP_QOS::dataQoSPQoSRTP_QOS::ctrlQoSRTP_UDPRTP_UDP::PCLASSINFOBOOL remoteIsNat = FALSEPIPSocket::Address localAddressBYTE ipTypeOfServicePNatMethod *meth = NULLRTP_QOS *rtpqos = NULL ///< QOS spec (or NULL if no QoS) BOOL isReadingRTP_UDP::GetLocalAddressRTP_UDP::SetLocalAddressRTP_UDP::GetRemoteAddressRTP_UDP::GetLocalDataPortRTP_UDP::GetLocalControlPortRTP_UDP::GetRemoteDataPortRTP_UDP::GetRemoteControlPortRTP_UDP::GetDataSocketPUDPSocket &RTP_UDP::GetControlSocketRTP_UDP::GetDataSocketHandleRTP_UDP::GetControlSocketHandleRTP_UDP::localAddressRTP_UDP::localDataPortRTP_UDP::localControlPortRTP_UDP::remoteAddressRTP_UDP::remoteDataPortRTP_UDP::remoteControlPortRTP_UDP::remoteTransmitAddressRTP_UDP::shutdownReadRTP_UDP::shutdownWriteRTP_UDP::dataSocketPUDPSocket *RTP_UDP::controlSocketRTP_UDP::appliedQOSRTP_UDP::enableGQOSRTP_UDP::remoteIsNATRTP_ControlFrameRTP_ControlFrame::PCLASSINFOPINDEX compoundSize = 2048RTP_ControlFrame::GetVersionRTP_ControlFrame::GetCountRTP_ControlFrame::PayloadTypesRTP_ControlFrame::GetPayloadTypeRTP_ControlFrame::GetPayloadSizeRTP_ControlFrame::GetPayloadPtrRTP_ControlFrame::GetCompoundSizeRTP_ControlFrame::ReceiverReportRTP_ControlFrame::ReceiverReport::ssrcPUInt32bRTP_ControlFrame::ReceiverReport::fractionRTP_ControlFrame::ReceiverReport::lostBYTE %[3]RTP_ControlFrame::ReceiverReport::last_seqRTP_ControlFrame::ReceiverReport::jitterRTP_ControlFrame::ReceiverReport::lsrRTP_ControlFrame::ReceiverReport::dlsrRTP_ControlFrame::ReceiverReport::GetLostPacketsunsigned int lostRTP_ControlFrame::SenderReportRTP_ControlFrame::SenderReport::ssrcRTP_ControlFrame::SenderReport::ntp_secRTP_ControlFrame::SenderReport::ntp_fracRTP_ControlFrame::SenderReport::rtp_tsRTP_ControlFrame::SenderReport::psentRTP_ControlFrame::SenderReport::osentRTP_ControlFrame::DescriptionTypesRTP_ControlFrame::SourceDescriptionRTP_ControlFrame::SourceDescription::srcRTP_ControlFrame::SourceDescription::ItemRTP_ControlFrame::SourceDescription::Item::typeRTP_ControlFrame::SourceDescription::Item::lengthRTP_ControlFrame::SourceDescription::Item::datachar %[1]RTP_ControlFrame::SourceDescription::Item::GetNextItemRTP_ControlFrame::SourceDescription::Item *const RTP_ControlFrame::SourceDescription::Item *RTP_ControlFrame::SourceDescription::itemRTP_ControlFrame::SourceDescription::Item %[1]RTP_ControlFrame::SourceDescription &sdesRTP_ControlFrame::compoundOffsetRTP_ControlFrame::compoundSizeD:\openh323\include\rtp2wav.hOpalRtpToWavFileOpalRtpToWavFile::PCLASSINFOOpalRtpToWavFile::GetReceiveHandlerOpalRtpToWavFile::PDECLARE_NOTIFIEROpalRtpToWavFile::receiveHandlerOpalRtpToWavFile::payloadTypeOpalRtpToWavFile::lastFrameOpalRtpToWavFile::lastPayloadSizeD:\openh323\include\svcctrl.h"h350/h350_service.h"H323H248ServiceControlH323ServiceControlSessionH323ServiceControlSession::PCLASSINFOH323ServiceControlSession::IsValidH323ServiceControlSession::OnReceivedPDUconst H225_ServiceControlDescriptor &descriptorH323ServiceControlSession::OnSendingPDUH225_ServiceControlDescriptor &descriptorH323ServiceControlSession::ChangeTypeH323ServiceControlSession::OnChangeH323ServiceControlSession::serviceTypeH323ServiceControlSession::GetTypeenum H323ServiceControlSession::serviceTypeH323H248ServiceControl::PCLASSINFOconst H248_SignalRequest &requestH248_SignalRequest &requestH323H248ServiceControl::GetTypeH323H350ServiceControlH323H350ServiceControl::PCLASSINFOH323H350ServiceControl::GetTypeH323H350ServiceControl::GetValuePString &_ldapURLPString &_ldapDNH323H350ServiceControl::ldapURLH323H350ServiceControl::ldapDNH323HTTPServiceControlH323HTTPServiceControl::PCLASSINFOH323HTTPServiceControl::GetTypeH323HTTPServiceControl::GetValuePString &_urlH323HTTPServiceControl::urlH323CallCreditServiceControlH323CallCreditServiceControl::PCLASSINFOH323CallCreditServiceControl::GetTypeH323CallCreditServiceControl::GetValuePString &_amountBOOL &_creditunsigned int &_timeH323CallCreditServiceControl::amountH323CallCreditServiceControl::modeH323CallCreditServiceControl::durationLimitD:\openh323\include\t120proto.hOpalT120ProtocolOpalT120Protocol::PCLASSINFOOpalT120Protocol::MediaFormatconst OpalMediaFormatconst MCS_ConnectMCSPDU &pduconst MCS_DomainMCSPDU &pduD:\openh323\include\t38.hT38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtypeT38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype::PCLASSINFOT38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype::DecodeSubTypeT38_IFPPacket &objT38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype::EncodeSubTypeconst T38_IFPPacket &objT38_ArrayOf_PASN_OctetStringT38_ArrayOf_PASN_OctetString::PCLASSINFOT38_UDPTLPacketT38_UDPTLPacket::PCLASSINFOT38_UDPTLPacket::m_seq_numberT38_UDPTLPacket::m_primary_ifp_packetT38_UDPTLPacket_primary_ifp_packetT38_UDPTLPacket::m_error_recoveryT38_UDPTLPacket_error_recoveryT38_Type_of_msg_dataT38_Type_of_msg_data::PCLASSINFOT38_Type_of_msg_data::EnumerationsT38_Data_Field_subtypeT38_Data_Field_subtype::PCLASSINFOT38_Data_Field_subtype::OptionalFieldsT38_Data_Field_subtype::m_field_typeT38_Data_Field_subtype_field_typeT38_Data_Field_subtype::m_field_dataT38_Data_FieldT38_Data_Field::PCLASSINFOT38_UDPTLPacket_error_recovery_fec_infoT38_UDPTLPacket_error_recovery_fec_info::PCLASSINFOT38_UDPTLPacket_error_recovery_fec_info::m_fec_npacketsT38_UDPTLPacket_error_recovery_fec_info::m_fec_dataT38_PreCorrigendum_Data_FieldT38_PreCorrigendum_Data_Field::PCLASSINFOT38_Data_Field_subtype_field_type::PCLASSINFOT38_Data_Field_subtype_field_type::EnumerationsT38_PreCorrigendum_Data_Field_subtypeT38_PreCorrigendum_Data_Field_subtype::PCLASSINFOT38_PreCorrigendum_Data_Field_subtype::OptionalFieldsT38_PreCorrigendum_Data_Field_subtype::m_field_typeT38_PreCorrigendum_Data_Field_subtype_field_typeT38_PreCorrigendum_Data_Field_subtype::m_field_dataT38_PreCorrigendum_Data_Field_subtype_field_type::PCLASSINFOT38_PreCorrigendum_Data_Field_subtype_field_type::EnumerationsT38_Type_of_msgT38_Type_of_msg::PCLASSINFOT38_Type_of_msg::ChoicesT38_Type_of_msg::operator T38_Type_of_msg_t30_indicator &T38_Type_of_msg::operator T38_Type_of_msg_data &T38_PreCorrigendum_IFPPacketT38_PreCorrigendum_IFPPacket::PCLASSINFOT38_PreCorrigendum_IFPPacket::OptionalFieldsT38_PreCorrigendum_IFPPacket::m_type_of_msgT38_PreCorrigendum_IFPPacket::m_data_fieldT38_UDPTLPacket_error_recovery_secondary_ifp_packetsT38_UDPTLPacket_error_recovery_secondary_ifp_packets::PCLASSINFOT38_UDPTLPacket_primary_ifp_packet::PCLASSINFOT38_UDPTLPacket_primary_ifp_packet::DecodeSubTypeT38_UDPTLPacket_primary_ifp_packet::EncodeSubTypeT38_Type_of_msg_t30_indicatorT38_Type_of_msg_t30_indicator::PCLASSINFOT38_Type_of_msg_t30_indicator::EnumerationsT38_IFPPacketT38_IFPPacket::PCLASSINFOT38_IFPPacket::OptionalFieldsT38_IFPPacket::m_type_of_msgT38_IFPPacket::m_data_fieldT38_UDPTLPacket_error_recovery::PCLASSINFOT38_UDPTLPacket_error_recovery::ChoicesT38_UDPTLPacket_error_recovery::operator T38_UDPTLPacket_error_recovery_secondary_ifp_packets &T38_UDPTLPacket_error_recovery_secondary_ifp_packets &T38_UDPTLPacket_error_recovery::operator T38_UDPTLPacket_error_recovery_fec_info &T38_UDPTLPacket_error_recovery_fec_info &D:\openh323\include\t38proto.hOpalT38ProtocolOpalT38Protocol::PCLASSINFOconst T38_IFPPacket &pduunsigned int nLostOpalT38Protocol::GetTransportBOOL autoDelete = TRUE OpalT38Protocol::transportOpalT38Protocol::autoDeleteTransportOpalT38Protocol::corrigendumASNOpalT38Protocol::indicatorRedundancyOpalT38Protocol::lowSpeedRedundancyOpalT38Protocol::highSpeedRedundancyOpalT38Protocol::lastSentSequenceNumberOpalT38Protocol::redundantIFPsPListD:\openh323\include\transports.hPDECLARE_ARRAYH323TransportPIndirectChannelH323Transport::PCLASSINFOH323Transport::GetLocalAddressH323Transport::GetRemoteAddressH323Transport::SetRemoteAddressH323Transport::ConnectH323Transport::ConnectTounsigned int tsapH323Connection *connection = NULL H323Transport::PromisciousModesenum H323Transport::PromisciousModes promiscuousH323Transport::ReadPDUH323Transport::ExtractPDUPINDEX &lenH323Transport::WritePDUH323Transport::GetEndPointPThread *threadH323Transport::endpointH323Transport::threadH323Transport::canGetInterfaceH323ListenerH323Listener::PCLASSINFOH323Listener::OpenH323Listener::CloseH323Listener::AcceptH323Listener::GetTransportAddressH323Listener::SetUpTransportPDUH323Listener::endpointH323TransportIPH323TransportIP::PCLASSINFOH323TransportIP::localAddressH323TransportIP::localPortH323TransportIP::remoteAddressH323TransportIP::remotePortH323TransportAddress::PCLASSINFOconst H245_TransportAddress &const char *proto = "tcp" H323TransportTCPH323TransportTCP::PCLASSINFOPIPSocket::Address binding = PIPSocket::GetDefaultIpAny()BOOL listen = FALSEH323TransportTCP::h245listenerPTCPSocket *H323TransportUDPH323TransportUDP::PCLASSINFOWORD localPort = 0WORD remotePort = 0H323TransportUDP::promiscuousReadsenum H323Transport::PromisciousModesH323TransportUDP::lastReceivedAddressH323TransportUDP::lastReceivedInterfaceH323TransportUDP::interfacePortH323ListenerTCPH323ListenerTCP::PCLASSINFOBOOL exclusive = FALSEH323ListenerTCP::GetListenerPortH323ListenerTCP::listenerPTCPSocketH323ListenerTCP::localAddressH323ListenerTCP::exclusiveListenerD:\openh323\include\x224.hX224::PCLASSINFOX224::CodesX224::GetCodeX224::GetDataX224::headerX224::dataD:\openh323\include\x880.hX880_GeneralProblemX880_GeneralProblem::PCLASSINFOX880_ReturnResult_resultX880_ReturnResult_result::PCLASSINFOX880_ReturnResult_result::m_opcodeX880_CodeX880_ReturnResult_result::m_resultX880_Code::PCLASSINFOX880_Code::ChoicesX880_ReturnErrorProblemX880_ReturnErrorProblem::PCLASSINFOX880_RejectProblemX880_RejectProblem::PCLASSINFOX880_InvokeIdX880_InvokeId::PCLASSINFOX880_ROSX880_ROS::PCLASSINFOX880_ROS::ChoicesX880_ROS::operator X880_Invoke &X880_Invoke &X880_ROS::operator X880_ReturnResult &X880_ReturnResult &X880_ROS::operator X880_ReturnError &X880_ReturnError &X880_ROS::operator X880_Reject &X880_Reject &X880_Reject_problemX880_Reject_problem::PCLASSINFOX880_Reject_problem::ChoicesX880_Reject_problem::operator X880_GeneralProblem &X880_Reject_problem::operator X880_InvokeProblem &X880_Reject_problem::operator X880_ReturnResultProblem &X880_Reject_problem::operator X880_ReturnErrorProblem &X880_RejectX880_Reject::PCLASSINFOX880_Reject::m_invokeIdX880_Reject::m_problemX880_ReturnResultProblemX880_ReturnResultProblem::PCLASSINFOX880_InvokeProblemX880_InvokeProblem::PCLASSINFOX880_ReturnResultX880_ReturnResult::PCLASSINFOX880_ReturnResult::OptionalFieldsX880_ReturnResult::m_invokeIdX880_ReturnResult::m_resultX880_InvokeX880_Invoke::PCLASSINFOX880_Invoke::OptionalFieldsX880_Invoke::m_invokeIdX880_Invoke::m_linkedIdX880_Invoke::m_opcodeX880_Invoke::m_argumentX880_ReturnErrorX880_ReturnError::PCLASSINFOX880_ReturnError::OptionalFieldsX880_ReturnError::m_invokeIdX880_ReturnError::m_errorCodeX880_ReturnError::m_parameterD:\openh323\src\vic\bv.cD:\openh323\src\vic\dct.cxxD:\openh323\src\vic\encoder-h261.cxxD:\openh323\src\vic\huffcode.cD:\openh323\src\vic\p64.cxxD:\openh323\src\vic\p64encoder.cxxD:\openh323\src\vic\transmitter.cxxD:\openh323\src\vic\vid_coder.cxxD:\openh323\src\speex\libspeex\bits.cD:\openh323\src\speex\libspeex\cb_search.cD:\openh323\src\speex\libspeex\exc_10_16_table.cD:\openh323\src\speex\libspeex\exc_10_32_table.cD:\openh323\src\speex\libspeex\exc_20_32_table.cD:\openh323\src\speex\libspeex\exc_5_256_table.cD:\openh323\src\speex\libspeex\exc_5_64_table.cD:\openh323\src\speex\libspeex\exc_8_128_table.cD:\openh323\src\speex\libspeex\filters.cD:\openh323\src\speex\libspeex\gain_table.cD:\openh323\src\speex\libspeex\gain_table_lbr.cD:\openh323\src\speex\libspeex\hexc_10_32_table.cD:\openh323\src\speex\libspeex\hexc_table.cD:\openh323\src\speex\libspeex\high_lsp_tables.cD:\openh323\src\speex\libspeex\lpc.cD:\openh323\src\speex\libspeex\lsp.cD:\openh323\src\speex\libspeex\lsp_tables_nb.cD:\openh323\src\speex\libspeex\ltp.cD:\openh323\src\speex\libspeex\math_approx.cD:\openh323\src\speex\libspeex\misc.cD:\openh323\src\speex\libspeex\modes.cD:\openh323\src\speex\libspeex\nb_celp.cD:\openh323\src\speex\libspeex\quant_lsp.cD:\openh323\src\speex\libspeex\sb_celp.cD:\openh323\src\speex\libspeex\speex_callbacks.cD:\openh323\src\speex\libspeex\speex_header.cD:\openh323\src\speex\libspeex\stereo.cD:\openh323\src\speex\libspeex\vbr.cD:\openh323\src\speex\libspeex\vq.cD:\openh323\src\g726\g726_16.cD:\openh323\src\g726\g726_24.cD:\openh323\src\g726\g726_32.cD:\openh323\src\g726\g726_40.cD:\openh323\src\g726\g72x.cD:\openh323\src\iLBC\anaFilter.cD:\openh323\src\iLBC\constants.cD:\openh323\src\iLBC\createCB.cD:\openh323\src\iLBC\doCPLC.cD:\openh323\src\iLBC\enhancer.cD:\openh323\src\iLBC\filter.cD:\openh323\src\iLBC\FrameClassify.cD:\openh323\src\iLBC\gainquant.cD:\openh323\src\iLBC\getCBvec.cD:\openh323\src\iLBC\helpfun.cD:\openh323\src\iLBC\hpInput.cD:\openh323\src\iLBC\hpOutput.cD:\openh323\src\iLBC\iCBConstruct.cD:\openh323\src\iLBC\iCBSearch.cD:\openh323\src\iLBC\iLBC_decode.cD:\openh323\src\iLBC\iLBC_encode.cD:\openh323\src\iLBC\LPCdecode.cD:\openh323\src\iLBC\LPCencode.cD:\openh323\src\iLBC\lsf.cD:\openh323\src\iLBC\packing.cD:\openh323\src\iLBC\StateConstructW.cD:\openh323\src\iLBC\StateSearchW.cD:\openh323\src\iLBC\syntFilter.cG:\Storage\CVS_Head\pwlib\src\ptlib\msos\assert.cxxPImageDLLPImageDLL::PCLASSINFOPImageDLL::PImageDLLPImageDLL::SymInitializeBOOL (__stdcall *%)(IN HANDLE,IN LPSTR,IN BOOL)PImageDLL::SymCleanupBOOL (__stdcall *%)(IN HANDLE)PImageDLL::SymGetOptionsDWORD (__stdcall *%)(void)PImageDLL::SymSetOptionsDWORD (__stdcall *%)(DWORD)PImageDLL::SymLoadModuleDWORD (__stdcall *%)(HANDLE,HANDLE,PSTR,PSTR,DWORD,DWORD)PImageDLL::StackWalkBOOL (__stdcall *%)(DWORD,HANDLE,HANDLE,LPSTACKFRAME,LPVOID,PREAD_PROCESS_MEMORY_ROUTINE,PFUNCTION_TABLE_ACCESS_ROUTINE,PGET_MODULE_BASE_ROUTINE,PTRANSLATE_ADDRESS_ROUTINE)PImageDLL::SymGetSymFromAddrBOOL (__stdcall *%)(IN HANDLE,IN DWORD,OUT PDWORD,OUT PIMAGEHLP_SYMBOL)PImageDLL::SymFunctionTableAccessPFUNCTION_TABLE_ACCESS_ROUTINEPImageDLL::SymGetModuleBasePGET_MODULE_BASE_ROUTINEPImageDLL::SymGetModuleInfoBOOL (__stdcall *%)(IN HANDLE,IN DWORD,OUT PIMAGEHLP_MODULE)EnumWindowsProcHWND hWndLPARAM thisProcessPWaitOnExitConsoleWindowPAssertFuncconst char *msgG:\Storage\CVS_Head\pwlib\src\ptlib\wince\ConsoleCE\ceostream.cpp"ptlib.h"YWinCEOStream::SubscribeYWinCEOStreamCB pCBHWND RecieverUINT MessageIDYWinCEOStream::YWinCEOStreamYWinCEOStreamBufferstreambufYWinCEOStreamBuffer::YWinCEOStreamBufferYWinCEOStreamBuffer::~YWinCEOStreamBufferYWinCEOStreamBuffer::overflowint c = EOFYWinCEOStreamBuffer::syncYWinCEOStreamBuffer::underflowYWinCEOStreamBuffer::seekoffstreamposstreamoffios::seek_dirint = ios::in|ios::outYWinCEOStreamBuffer::Bufferchar %[BufferSize+1]YWinCEOStreamBuffer::m_hWndHWNDYWinCEOStreamBuffer::m_MessageIDUINTYWinCEOStreamBuffer::m_pCBYWinCEOStreamCBYWinCEOStream::~YWinCEOStreamcerrYWinCEOStreamclogcoutYWinCEOStream::UnSubscribeG:\Storage\CVS_Head\pwlib\src\ptlib\wince\ConsoleCE\cevfw.cppcapDefGetDriverDescriptionBOOL VFWAPILPSTRcapCreateCaptureWindowHWND VFWAPILPCSTR lpszWindowNameDWORD dwStyleint xint yint nWidthint nHeightHWND hwndParentint nIDcapDriverCreateCaptureWindowCAPCREATECAPTUREWINDOWPROCcapGetDriverDescriptionUINT wDriverIndexLPSTR lpszNameint cbNameLPSTR lpszVerint cbVercapDefCreateCaptureWindowLPCSTRcapDriverGetDriverDescriptionCAPGETDRIVERDESCRIPTIONPROCG:\Storage\CVS_Head\pwlib\src\ptlib\common\collect.cxxPArrayObjects::CloneContentsconst PArrayObjects *arrayPAbstractSortedList::InsertPObject *objPAbstractSortedList::CopyContentsconst PAbstractSortedList &listPHashTable::Table::AppendElementPObject *keyPObject *dataPAbstractSet::DestroyContentsPAbstractSortedList::ComparePAbstractSortedList::Info::OrderSelectPAbstractSortedList::Element *Element *nodePINDEX indexPArrayObjects::InsertAtPOrdinalKey::ComparePAbstractList::ComparePHashTable::CopyContentsconst PHashTable &hashPAbstractSortedList::RightRotatePAbstractSet::InsertPAbstractSortedList::GetAtPArrayObjects::GetSizePArrayObjects::AppendPAbstractSet::AppendPAbstractDictionary::GetObjectsIndexconst PObject *objPAbstractDictionary::GetAtPAbstractList::RemoveAtPAbstractDictionary::Insertconst PObject &beforePAbstractDictionary::AbstractSetAtconst PObject &keyPAbstractList::GetAtPHashTable::Table::DestroyContentsPAbstractList::RemovePAbstractSortedList::DestroyContentsPHashTable::Table::RemoveElementPAbstractSet::RemovePAbstractList::InsertPArrayObjects::GetAtPAbstractDictionary::InsertAtPAbstractSortedList::LeftRotatePAbstractSortedList::ValueSelectconst Element *nodeconst Element **lastElementPOrdinalKey::ClonePAbstractDictionary::AbstractGetAtPArrayObjects::GetObjectsIndexPAbstractSortedList::Info::PredecessorPOrdinalKey::HashFunctionPArrayObjects::SetSizePAbstractSet::SetAtPAbstractSortedList::RemoveAllPCollection::RemoveAllPAbstractSortedList::PAbstractSortedListPAbstractSortedList::RemoveAtPAbstractDictionary::SetAtPObject *valPAbstractSet::GetValuesIndexPAbstractList::SetAtPArrayObjects::RemoveAllPAbstractSortedList::Info::SuccessorPAbstractSortedList::SetAtPArrayObjects::GetValuesIndexPHashTable::AbstractGetDataAtPObject &PCollection::PrintOnPAbstractList::GetObjectsIndexPAbstractSortedList::RemovePHashTable::ComparePAbstractList::SetCurrentPAbstractDictionary::PrintOnPHashTable::Table::SetLastElementAtPAbstractSortedList::DeleteSubTreesBOOL deleteObjectPArrayObjects::SetAtPAbstractList::CopyContentsconst PAbstractList &listPAbstractSortedList::RemoveElementPAbstractSet::GetAtPAbstractSet::GetObjectsIndexPHashTable::CloneContentsconst PHashTable *hashPHashTable::PHashTablePHashTable::Table::GetElementAtPHashTable::Element *PHashTable::AbstractGetKeyAtPAbstractSet::InsertAtPHashTable::DestroyContentsPArrayObjects::CopyContentsconst PArrayObjects &arrayPArrayObjects::RemoveAtPArrayObjects::RemovePAbstractDictionary::AppendPAbstractSortedList::Info::InfoPAbstractList::AppendPAbstractDictionary::GetRefAtPAbstractSet::RemoveAtPAbstractList::GetValuesIndexPAbstractList::SetSizePAbstractSortedList::CloneContentsconst PAbstractSortedList *listPAbstractList::CloneContentsconst PAbstractList *listPAbstractSortedList::GetValuesIndexPAbstractSortedList::AppendPHashTable::Table::GetElementsIndexBOOL byValueBOOL keysPAbstractSortedList::InsertAtPAbstractSortedList::SetSizePAbstractList::Element::ElementPObject *theDataPAbstractDictionary::SetDataAtPArrayObjects::DestroyContentsPArrayObjects::ComparePArrayObjects::InsertPHashTable::SetSizePAbstractSortedList::GetObjectsIndexPAbstractList::DestroyContentsPAbstractList::ReplaceAtPAbstractDictionary::RemovePAbstractList::InsertAtPAbstractDictionary::GetValuesIndexPAbstractSet::CloneContentsconst PAbstractSet *PAbstractDictionary::RemoveAtPOrdinalKey::PrintOnPAbstractSet::CopyContentsconst PAbstractSet &G:\Storage\CVS_Head\pwlib\src\ptlib\common\contain.cxx"ptlib/contain.inl"PString::Replaceconst PString &targetconst PString &subsBOOL allPString::LeftTrimPStringList::PStringListconst PSortedStringList &listconst PStringArray &arrayconst char *const *strarrBOOL caselessPString::ToUpperPStringArray::operator +=PStringArray &const PStringArray &vPContainer::Destructpvsprintfva_list argPOrdinalToString::ReadFromPString::LeftPAbstractArray::ReadFromPBYTEArray::ReadFromPString::operator +char cPString::operator &PString::LinesPAbstractArray::ComparePString::vsprintfPStringStream::Buffer::BufferPStringStream &strPString::Tokeniseconst char *separatorsBOOL onePerSeparatorPString::DeletePINDEX startPString::FindLastchar chPBitArray::GetSizePContainer::MakeUniquePString::operator =PUInt64 nPInt64 nunsigned long nlong nunsigned int nint nunsigned short nshort nPStringToString::PStringToStringconst Initialiser *initBOOL caselessKeysBOOL caselessValuesPBitArray::SetSizePAbstractArray::DestroyContentsPSortedStringList::GetNextStringsIndexPStringStream::Buffer::overflowint cPString::AsUnsignedPString::operator ()PINDEX endPString::operator &=PString::FindOneOfconst char *csetPRegularExpression::EscapeStringPString::SplicePString::operator +=PString::PrintOnPStringToOrdinal::ReadFromPStringArray::ReadFromPStringStream::Buffer::underflowPAbstractArray::CloneContentsconst PAbstractArray *arrayPString::operator *=PSortedStringList::ReadFromPStringList::operator +=PStringList &const PStringList &vPBitArray::Attachconst void *bufferPINDEX bufferSizePString::MidPStringStream::PStringStreamPINDEX fixedBufferSizePStringStream::Buffer::seekoffstreambuf::pos_typeoff_type offios_base::seekdir dirios_base::openmode modePStringArray::PStringArrayconst PStringList &listPStringStream::Buffer::seekpospos_type posPCaselessString::InternalComparePStringArray::operator []PString::ToLowerPContainer::SetMinSizePINDEX minSizePString::PStringConversionType typeunsigned int places...const PWORDArray &ustrconst WORD *ustrPString::AsRealPStringStream::~PStringStreamPStringList::ReadFromPString::FindRegExconst PRegularExpression ®exPINDEX &posPINDEX maxPosPRegularExpression::~PRegularExpressionPStringStream::AssignContentsconst PContainer &contPRegularExpression::GetErrorTextPBitArray::ClonePSortedStringList::InternalStringSelectElement *thisElementPRegularExpression::Compileconst char *patternint flagsconst PString &patternPRegularExpression::GetErrorCodePRegularExpression::ErrorCodesPAbstractArray::Concatenateconst PAbstractArray &arrayPAbstractArray::GetPointerPString::NumComparePStringEscapeCodeconst unsigned char %[]p_signed2stringT basechar *strp_signed2stringPStringStream::Buffer::syncPStringSet::PStringSetPStringArray::ToCharArraychar **PCharArray *storagePString::InternalComparePString::MakeEmptyPString::RightPRegularExpression::ExecutePIntArray &startsPIntArray &endsPINDEX &startPCharArray::ReadFromp_unsigned2stringp_unsigned2stringTranslateEscapesconst char *srcchar *dstPString::ComparePAbstractArray::ReadElementFromPBitArray::SetAtBOOL valPString::HashFunctionPAbstractArray::InternalSetSizePRegularExpression::PRegularExpressionconst PRegularExpression &fromPString::ReadFromPBYTEArray::PrintOnPString::ToLiteralPStringSet::ReadFromPContainer::PContainerconst PContainer *contPINDEX initialSizePString::AsIntegerTranslateHexchar xPBitArray::GetPointerPOrdinalToString::POrdinalToStringPAbstractArray::SetSizePAbstractArray::PrintOnPRegularExpression::operator =PRegularExpression &PString::AsUCS2PString::FindPString::InternalFromUCS2const WORD *ptrPAbstractArray::CopyContentsPStringStream::MakeEmptyPString::sprintfPString::RightTrimPString::TrimPCaselessString::ClonePAbstractArray::PrintElementOnPString::SetSizePBitArray::Concatenateconst PBitArray &arrayPStringToOrdinal::PStringToOrdinalPString::IsEmptyPSortedStringList::PSortedStringListPBitArray::GetAtPStringEscapeValuePCharArray::PrintOnPAbstractArray::AttachPStringToString::ReadFromPContainer::AssignContentsPBitArray::PBitArrayPAbstractArray::PAbstractArrayPINDEX elementSizeInBytesPINDEX bufferSizeInElementsPString::ClonepsprintfPString::ToPascalPString::MakeUniqueG:\Storage\CVS_Head\pwlib\src\ptclib\delaychan.cxxPDelayChannel::WaitPTimeInterval &nextTickPDelayChannel::ReadPAdaptiveDelay::Delayint frameTimePDelayChannel::PDelayChannelPChannel &channelunsigned int minPAdaptiveDelay::RestartPDelayChannel::WritePAdaptiveDelay::PAdaptiveDelayunsigned int _maximumSlipunsigned int _minimumDelayG:\Storage\CVS_Head\pwlib\src\ptlib\msos\ethsock.cxxPIPSocket::AsNumericPIPSocket::Address addrPWin32PacketDriverPWin32PacketDriver::CreatePWin32PacketDriver *PWin32PacketDriver::~PWin32PacketDriverPWin32PacketDriver::IsOpenPWin32PacketDriver::ClosePWin32PacketDriver::GetLastErrorPWin32PacketDriver::EnumInterfacesPString &namePWin32PacketDriver::BindInterfaceconst PString &interfaceNamePWin32PacketDriver::EnumIpAddressPIPSocket::Address &addrPIPSocket::Address &net_maskPWin32PacketDriver::BeginReadDWORD sizeDWORD &receivedPWin32Overlapped &overlapPWin32PacketDriver::BeginWriteDWORD lenPWin32PacketDriver::CompleteIOPWin32PacketDriver::IoControlUINT funcconst void *inputDWORD inSizevoid *outputDWORD outSizePWin32PacketDriver::QueryOidUINT oidUINT lenBYTE *dataDWORD &dataPWin32PacketDriver::SetOidDWORD dataPWin32PacketDriver::GetQueryOidCommandDWORD oidPWin32PacketDriver::PWin32PacketDriverPWin32PacketDriver::dwErrorPWin32PacketDriver::hDriverHANDLEPWin32SnmpLibraryPWin32SnmpLibrary::PCLASSINFOPWin32SnmpLibrary::PWin32SnmpLibraryPWin32SnmpLibrary::GetOidAsnObjectIdentifier &oidPWin32AsnAny &valuevoid *valueUINT valSizeUINT *len = NULLPIPSocket::Address &ip_addressAsnInteger &valuePWin32SnmpLibrary::GetNextOidPWin32SnmpLibrary::GetInterfaceNamePIPSocket::Address ipAddrint ifNumPWin32SnmpLibrary::GetInterfaceAddressPWin32SnmpLibrary::CurrentPWin32SnmpLibrary &PWin32SnmpLibrary::GetMutexPWin32SnmpLibrary::mutexPWin32SnmpLibrary::_InitBOOL (__stdcall *%)(DWORD,HANDLE *,AsnObjectIdentifier *)PWin32SnmpLibrary::_QueryBOOL (__stdcall *%)(BYTE,SnmpVarBindList *,AsnInteger32 *,AsnInteger32 *)PWin32SnmpLibrary::InitDWORD upTimeHANDLE *trapEventAsnObjectIdentifier *firstSupportedRegionPWin32SnmpLibrary::QueryBYTE pduTypeSnmpVarBindList *pVarBindListAsnInteger32 *pErrorStatusAsnInteger32 *pErrorIndexPWin32SnmpLibrary::QueryOidBYTE cmdPIPSocket::GetGatewayInterfacePEthSocket::Writeconst void *dataPWin32AsnAnyAsnAnyPWin32AsnAny::PWin32AsnAnyconst PWin32AsnAny &PWin32AsnAny::~PWin32AsnAnyPWin32AsnAny::GetIntegerAsnInteger &iPWin32AsnAny::GetIpAddressPWin32AsnAny::MemFreePWin32AsnAny::operator =PWin32AsnAny &SnmpVarBindRFC1157VarBindNDIS_MEDIUMenum _NDIS_MEDIUMSnmpVarBindListRFC1157VarBindListPEthSocket::GetAddressAddress &addrPEthSocket::GetFilterunsigned int &maskWORD &typePacketDeviceStrPWin32OidBufferPWin32OidBuffer::PWin32OidBufferconst BYTE *data = NULLPWin32OidBuffer::~PWin32OidBufferPWin32OidBuffer::operator void *PWin32OidBuffer::operator DWORDPWin32OidBuffer::operator []int iPWin32OidBuffer::MoveDWORD receivedPWin32OidBuffer::bufferDWORD *PWin32OidBuffer::sizePIPSocket::IsAddressReachablePIPSocket::Address LocalIPPIPSocket::Address LocalMaskPIPSocket::Address RemoteIPPEthSocket::~PEthSocketPWin32PacketBufferPWin32PacketBuffer::PCLASSINFOPWin32PacketBuffer::StatusesPWin32PacketBuffer::PWin32PacketBufferPWin32PacketBuffer::GetDataPWin32PacketBuffer::PutDataPWin32PacketBuffer::GetEventPWin32PacketBuffer::ReadAsyncPWin32PacketDriver &pktPWin32PacketBuffer::ReadCompletePWin32PacketBuffer::WriteAsyncPWin32PacketBuffer::WriteCompletePWin32PacketBuffer::InProgressPWin32PacketBuffer::IsCompletedPWin32PacketBuffer::IsTypeWORD typePWin32PacketBuffer::statusenum PWin32PacketBuffer::StatusesPWin32PacketBuffer::overlapPWin32OverlappedPWin32PacketBuffer::countwinSNMPLoadedStartupFactoryPFactory::WorkerPWin32PacketSYSPWin32PacketSYS::PWin32PacketSYSPWin32PacketSYS::EnumInterfacesPWin32PacketSYS::BindInterfacePWin32PacketSYS::EnumIpAddressPWin32PacketSYS::BeginReadPWin32PacketSYS::BeginWritePWin32PacketSYS::GetQueryOidCommandPWin32PacketSYS::registryKeyPEthSocket::OpenSocket_NDIS_MEDIUMPIPSocket::GetInterfaceTableInterfaceTable &tablePIPSocket::GetGatewayAddressPWin32AsnOidAsnObjectIdentifierPWin32AsnOid::PWin32AsnOidconst PWin32AsnOid &oidPWin32AsnOid::~PWin32AsnOidPWin32AsnOid::operator =PWin32AsnOid &const AsnObjectIdentifier &oidPWin32AsnOid::operator +=PWin32AsnOid::operator []int idxUINT &PWin32AsnOid::operator ==PWin32AsnOid::operator !=PWin32AsnOid::operator <PWin32AsnOid::operator <=PWin32AsnOid::operator >PWin32AsnOid::operator >=PWin32AsnOid::operator *=PEthSocket::EnumIpAddressPWin32PacketVxDPWin32PacketVxD::EnumInterfacesPWin32PacketVxD::BindInterfacePWin32PacketVxD::EnumIpAddressPWin32PacketVxD::BeginReadPWin32PacketVxD::BeginWritePWin32PacketVxD::GetQueryOidCommandPWin32PacketVxD::transportBindingPEthSocket::EnumInterfacesAsnInteger32LONGPEthSocket::GetMediumPEthSocket::MediumTypesPEthSocket::SetFilterunsigned int filterPIPSocket::GetInterfacePEthSocket::Connectconst PString &newNamePIPSocket::GetGatewayInterfaceAddressSearchRegistryKeysconst PString &variablePEthSocket::GetNamePNDIS_MEDIUMenum _NDIS_MEDIUM *PWin32PacketCePWin32PacketCe::PWin32PacketCePWin32PacketCe::EnumInterfacesPWin32PacketCe::BindInterfacePWin32PacketCe::EnumIpAddressPWin32PacketCe::BeginReadPWin32PacketCe::BeginWritePWin32PacketCe::GetQueryOidCommandPWin32PacketCe::ipAddressesPWin32PacketCe::netMasksPWin32PacketCe::interfacesPEthSocket::CloseFilterMasksconst %[]PIPSocket::GetRouteTableRouteTable &tablePEthSocket::PEthSocketPINDEX nReadBuffersPINDEX nWriteBuffersPIPSocket::GetRouteAddressPIPSocket::Address RemoteAddressRegistryQueryMultiSzRegistryKey ®istryPEthSocket::ReadWinSNMPLoaderWinSNMPLoader::PCLASSINFOWinSNMPLoader::OnStartupWinSNMPLoader::CurrentWinSNMPLoader::OnShutdownWinSNMPLoader::mutexWinSNMPLoader::snmpLibraryPWin32SnmpLibrary *G:\Storage\CVS_Head\pwlib\src\ptlib\wince\ConsoleCE\getdate_tab.cppTABLEstruct _TABLEVariablesVariables::yyInputVariables::yyDSTmodeDSTMODEVariables::yyDayOrdinalVariables::yyDayNumberVariables::yyHaveDateVariables::yyHaveDayVariables::yyHaveRelVariables::yyHaveTimeVariables::yyHaveZoneVariables::yyTimezoneVariables::yyDayVariables::yyHourVariables::yyMinutesVariables::yyMonthVariables::yySecondsVariables::yyYearVariables::yyMeridianMERIDIANVariables::yyRelMonthVariables::yyRelSecondsyyltypeyyltype::timestampyyltype::first_lineyyltype::first_columnyyltype::last_lineyyltype::last_columnyyltype::textMonthDayTableconst TABLE %[]PTime_yyerrorToSecondstime_t Hourstime_t Minutestime_t SecondsMERIDIAN Meridianyypgotoconst short %[]yypactDSTcorrecttime_t Starttime_t FutureMilitaryTableyyr1yyr2yytnameyytranslateLookupWordchar *buffYYSTYPE *yylval_TABLE_TABLE::name_TABLE::type_TABLE::valueyyrhsUnitsTableenum _MERIDIANyyprhsYYSTYPEYYSTYPE::NumberYYSTYPE::MeridianPTime_yyparsevoid *parseParamyycheckyytableOtherTabletmyydebugPTimeParsevoid *inputStreamtm *nowint timezone_MERIDIANTimezoneTablePTime_yylexYYSTYPE *void *yyInputenum _DSTMODEConverttime_t Monthtime_t Daytime_t YearDSTMODE DSTmodetime_t yyTimezoneyydefgotoyyrlineyydefactRelativeDatetime_t DayOrdinaltime_t DayNumberSetPossibleDateVariables *time_t possible_year_DSTMODERelativeMonthtime_t RelMonthG:\Storage\CVS_Head\pwlib\src\ptclib\httpclnt.cxxPHTTPClient::ReadResponsePMIMEInfo &replyMIMEPHTTPClient::InternalReadContentBodyPAbstractArray &bodyPHTTPClient::GetHeaderconst PURL &urlPMIMEInfo &outMIMEBOOL persistPHTTPClient::ExecuteCommandconst PString &cmdNameconst PString &dataBodyPMIMEInfo &replyMimeCommands cmdPHTTPClient::GetTextDocumentPString &documentPHTTPClient::AssureConnectPHTTPClient::WriteCommandPHTTPClient::ReadContentBodyPBYTEArray &bodyPString &bodyPHTTPClient::PHTTPClientconst PString &userAgentPHTTPClient::PostDataPHTTPClient::GetDocumentconst PURL &_urlPMIMEInfo &_outMIMEG:\Storage\CVS_Head\pwlib\src\ptlib\wince\ConsoleCE\ios.cppios::~iosios::adjustfieldconst longios::bitallocios::x_curindexios::iosconst ios &_strmstreambuf *pSBios::xallocios::floatfieldios::x_statebuflong *ios::initios::operator =ios &ios::basefieldios::x_maxbitG:\Storage\CVS_Head\pwlib\src\ptlib\wince\ConsoleCE\iostream.cppIostream_init::~Iostream_initiostream::iostreamconst iostream &StrmIostream_init::Iostream_initios &pstrmint sflgiostream::~iostreamG:\Storage\CVS_Head\pwlib\src\ptlib\wince\ConsoleCE\istream.cppistream::getchar &cstreambuf &sbufchar delimistream::operator >>long double &ndouble &nfloat &nunsigned long &nlong &nunsigned int &nint &nunsigned short &nshort &nstreambuf *_sbufchar *sistream::seekgstreamoff _strmfseek_dir _sdstreampos _strmpistream::syncistream::putbackistream::~istreamistream_withassign::~istream_withassignistream::eatwhiteistream::tellgistream::peekistream::istreamconst istream &_istrmstreambuf *_inistbfistream::getintchar *bufferistream_withassign::istream_withassignstreambuf *_isistream::readchar *ptristream::operator =istream::ipfxint needistream::getdoubleint buflenG:\Storage\CVS_Head\pwlib\src\ptclib\memfile.cxxPMemoryFile::SetLengthoff_t lenPMemoryFile::ComparePMemoryFile::GetPositionPMemoryFile::ReadPMemoryFile::GetLengthPMemoryFile::SetPositionFilePositionOrigin originPMemoryFile::PMemoryFileconst PBYTEArray &ndataPMemoryFile::WriteG:\Storage\CVS_Head\pwlib\src\ptlib\wince\ConsoleCE\mmsystemx.cxxmmioCloseMMRESULTHMMIO hmmioUINT fuCloseChunkFinderChunkFinder::ChunkChunkFinder::Chunk::typeChunkFinder::Chunk::sizeChunkFinder::Chunk::remainingChunkFinder::Chunk::isContainerChunkFinder::Chunk::containerTypeChunkFinder::m_chunkStackChunkFinder::Chunk %[5]ChunkFinder::ChunkFinderHANDLE hFileChunkFinder::m_hFileChunkFinder::m_fGoodFileChunkFinder::m_fFormatErrorsFoundChunkFinder::m_currentChunkChunkFinder::m_typeChunkFinder::m_sizeChunkFinder::FindNextChunkFinder::FindRiffHeaderChunkFinder::FindFmtChunkChunkFinder::FindDataChunkwaveOutGetErrorTextMMRESULT mmrErrorchar *pszTextUINT cchTextPlaySoundLPCSTR pszSoundHMODULE hmodDWORD fdwSoundmmioDescendLPMMCKINFO pmmckiconst MMCKINFO *pmmckiParentUINT fuDescendwaveInGetErrorTextstricmpconst unsigned short *s1const char *s2mmioCreateChunkUINT fuCreatemmioAscendUINT fuAscendmmioOpenHMMIOLPSTR pszFileNameLPMMIOINFO pmmioinfoDWORD fdwOpenmmioReadHPSTR pchLONG cchmmioWriteconst char *pchG:\Storage\CVS_Head\pwlib\src\ptlib\common\object.cxxoperator delete[]void *ptrPMemoryHeap::InternalDumpStatisticsPUInt64 &vPInt64 &voperator deletePInt64__::ShiftLeftint bitsPObject::CompareObjectMemoryDirectPFactoryBase::GetFactoriesPFactoryBase::FactoryMap &PObject::ComparePInt64__::ShiftRightPMemoryHeap::GetAllocationRequestoperator new[]size_t nSizePMemoryHeap::ValidateHeapostream *errorPSmartPointer::~PSmartPointerPMemoryHeap::Reallocateconst char *fileint linePInt64__::Divconst PInt64__ &voperator newostream &streamconst PUInt64 &vconst PInt64 &vistream &streamPSmartPointer::operator =PSmartPointer &const PSmartPointer &ptrPMemoryHeap::DumpObjectsSinceDWORD objectNumberPMemoryHeap::Deallocateconst char *classNamePFactoryBase::GetFactoriesMutexPMemoryHeap::Wrapper::WrapperPMemoryHeap::SetAllocationBreakpointDWORD pointPInt64__::AddPObject::HashFunctionPMemoryHeap::allocationBreakpointPObject::ClonePMemoryHeap::DumpStatisticsPMemoryHeap::Header::GuardByteschar %[NumGuardBytes]PInt64__::ModPMemoryHeap::Allocatesize_t countsize_t sizePMemoryHeap::ValidatePMemoryHeap::ValidationPInt64__::MulPMemoryHeap::InternalValidateInp64PUInt64PFactoryBase::FactoryMap::~FactoryMapPInt64::LtPMemoryHeap::~PMemoryHeapostream::operator <<PUInt64 vPInt64 vPInt64::GtPObject::ReadFromPInt64__::SubPMemoryHeap::PMemoryHeapPStandardAssertMessage msgOut64PUInt64 numPUInt64::LtPUInt64::GtPSmartPointer::ComparePObject::PrintOnPMemoryHeap::SetIgnoreAllocationsPMemoryHeap::Wrapper::~WrapperPSmartPointer::PSmartPointerPMemoryHeap::InternalAllocatePMemoryHeap::InternalDumpObjectsSinceG:\Storage\CVS_Head\pwlib\src\ptlib\wince\ConsoleCE\ostream.cppostream::tellpostream_withassign::ostream_withassignstreambuf *_osostream::ostreamconst ostream &_ostrmostream::flushostream::seekpostream::~ostreamPStringStreamostream_withassignconst void *ptrlong double fdouble funsigned char cstreambuf *instmconst char *sostream::operator =ostream::writeostream_withassign::~ostream_withassignostream::opfxostream::osfxostream::writepadconst char *leaderconst char *valueostream::putG:\Storage\CVS_Head\pwlib\src\ptlib\common\osutils.cxxPWriteWaitAndSignal::PWriteWaitAndSignalconst PReadWriteMutex &rwBOOL startPSyncPointAck::AcknowledgePArgList::ParseOptionPINDEX &argconst PIntArray &canHaveOptionStringPReadWriteMutex::PReadWriteMutexPTrace::SetLevelPTimer::ResetPTrace::SetStreamostream *sPCondMutex::OnWaitPConfigArgs::Saveconst PString &saveOptionNamePTrace::GetLevelPProcess::SetConfigurationPathconst PString &pathPProcess::p_envpPProcess::TerminatePTimerList::PTimerListSetWinDebugThreadNameTHREADNAME_INFO *infoPDirectory::CloneContentsconst PDirectory *dPConfigArgs::GetOptionCountconst PString &optionconst char *optionchar optionPProcess::SetThreadNamePArgList::SetArgsconst PStringArray &theArgsconst PString &argStrPArgList::UnknownOptionPArgList::PrintOnPTrace::Initialiseconst char *filenameconst char *rolloverPatternPArgList::IllegalArgumentIndexApplicationStartTickPProcess::_mainPConfigArgs::GetOptionStringconst char *dfltPTimer::RunContinuousconst PTimeInterval &timePReadWriteMutex::StartNestPReadWriteMutex::Nest &PSetErrorStreamPTimerList::ProcessPIntCondMutex::PrintOnPTraceLevelThresholdPReadWriteMutex::EndNestPCondMutex::SignalPArgList::GetParameterPINDEX numPWLibStupidHacksloadVideoFileStuffPTrace::ClearOptionsPReadWaitAndSignal::~PReadWaitAndSignalPReadWriteMutex::InternalStartReadPErrorStreamostream *PTimeInterval::GetIntervalPConfigArgs::CharToStringPIntCondMutex::PIntCondMutexint targOperation opPArgList::GetParametersPINDEX firstPINDEX lastPTimer::operator =DWORD millisecondsPTrace::CanTracePTimer::Processconst PTimeInterval &deltaPTimeInterval &minTimeLeftPThread::SetThreadNamePWLibStupidOSXHacksloadCoreAudioStuffloadFakeVideoStuffloadShmVideoStuffPTimer::PTimerlong millisecsint secondsint minutesint hoursint daysPTrace::Beginconst char *fileNameint lineNumGetPProcessStartupListPProcessStartupList &PArgList::GetOptionStringByIndexPCondMutex::WaitConditionPTrace::Block::~BlockTHREADNAME_INFOstruct tagTHREADNAME_INFOPTrace_lastDayOfYearPProcess::PProcessconst char *manufWORD majorWORD minorCodeStatus statWORD buildPProcess::PreShutdownPTrace::Endostream &sPIntCondMutex::operator -=PIntCondMutex &int decPIntCondMutex::operator +=int incPIntCondMutex::operator --PIntCondMutex::operator ++PArgList::Shiftint shPTimer::~PTimerPTrace_RolloverPatternPTraceCurrentLevelPIntCondMutex::operator =int newvalPReadWriteMutex::StartReadPProcess::GetThreadNamePProcess::CurrentPProcess &PProcessInstancePProcess *PArgList::Parseconst char *specBOOL optionsBeforeParamsPArgList::MissingArgumentPTraceOptionsPTimer::ConstructPReadWriteMutex::GetNestPReadWriteMutex::Nest *PThread::GetThreadNamePIntCondMutex::ConditionPTrace_FilenamePArgList::GetOptionCountByIndexPConfigArgs::PConfigArgsconst PArgList &argsPSyncPointAck::Signalconst PTimeInterval &waitPReadWriteMutex::StartWritePArgList::GetOptionStringPProcess::ComparePTrace::SetOptionsPReadWriteMutex::EndReadPWriteWaitAndSignal::~PWriteWaitAndSignalPArgList::GetOptionCountPTimer::PausePArgList::ReadFromPReadWaitAndSignal::PReadWaitAndSignaltagTHREADNAME_INFOtagTHREADNAME_INFO::dwTypetagTHREADNAME_INFO::szNametagTHREADNAME_INFO::dwThreadIDtagTHREADNAME_INFO::dwFlagsPTrace::GetOptionsPSimpleThreadPSimpleThread::PCLASSINFOPSimpleThread::PSimpleThreadINT parameterAutoDeleteFlag deletionPriority priorityLevelconst PString &threadNamePSimpleThread::MainPSimpleThread::callbackPSimpleThread::parameterPGetErrorStreamPTimer::StopPProcessStartupListstd::mapPTrace::Block::Blockconst char *traceNamePTimer::StartRunningBOOL oncePTraceMutexPMutex *PThread::CreatePReadWriteMutex::InternalEndReadPProcess::p_argvPTimer::SetIntervalPInt64 millisecondslong secondslong minuteslong hoursPProcess::p_argcPReadWriteMutex::EndWritePTraceStreamPThread::PrintOnPTimer::ResumePProcess::IsInitialisedOpenTraceFilePProcess::PreInitialisechar **vchar **ePProcess::GetStartTimePProcess::GetVersionBOOL fullPArgList::PArgListint theArgcchar **theArgvconst PString &theArgumentSpecconst char *theArgumentSpecconst PString &theArgStrconst PString &argumentSpecStrconst char *argumentSpecPtrconst char *theArgStrPTimer::OnTimeoutG:\Storage\CVS_Head\pwlib\src\ptlib\common\pchannel.cxxPFile::ReadPINDEX amountPChannel::GetBaseWriteChannelPIndirectChannel::OpenPChannel *readChanPChannel *writeChanBOOL autoDeleteReadBOOL autoDeleteWritePIndirectChannel::ReadPChannel::GetLastWriteCountPIndirectChannel::GetBaseReadChannelPChannel::~PChannelPChannelStreamBuffer::PChannelStreamBufferPChannel *chanPFile::OpenPFile::Renameconst PString &newnamePChannel::SetBufferSizePFile::ComparePChannel::ReadCharPChannel::ReadBlockPChannel::ReadCharWithTimeoutPTimeInterval &timeoutPChannel::IsOpenPChannel::ComparePFile::ClosePChannel::GetErrorTextErrorGroup groupPChannel::Readconst VectorOfSlice &slicesPFile::SetPositionPChannel::ConvertOSErrorint statusHexDigitPChannelStreamBuffer::underflowPIndirectChannel::OnOpenPChannelStreamBuffer::overflowPIndirectChannel::WritePChannel::WriteAsyncPChannel::GetLastReadCountPIndirectChannel::ShutdownShutdownValue valuePChannel::WriteCharPChannel::OnWriteCompletePChannel::PChannelPChannel::GetBaseReadChannelPIndirectChannel::IsOpenPChannel::WritePIndirectChannel::GetBaseWriteChannelPFile::WritePFile::~PFilePIndirectChannel::SetReadChannelPChannelStreamBuffer::SetBufferSizePChannelStreamBuffer::syncGetNextCharconst PString &commandPTimeInterval *time = NULLPChannel::ReceiveCommandStringint nextCharconst PString &replyPChannel::SetErrorValuesErrors errorCodeint errorNumPFile::IsEndOfFilePFile::GetLengthPChannel::ShutdownShutdownValuePIndirectChannel::GetErrorTextPFile::Copyconst PFilePath &oldnameconst PFilePath &newnamePChannelStreamBuffer::seekposPChannel::WriteStringPIndirectChannel::PIndirectChannelPIndirectChannel::GetNamePIndirectChannel::ComparePIndirectChannel::ClosePChannelStreamBuffer::seekoffios_base::openmodePChannel::ReadStringPChannel::SendCommandStringPChannel::OnReadCompletePChannel::HashFunctionPIndirectChannel::SetWriteChannelPChannel::ReadAsyncG:\Storage\CVS_Head\pwlib\src\ptlib\common\pconfig.cxxPConfig::SetBooleanconst PString §ionPConfig::SetTimeconst PTime &valuePConfig::GetTimeconst PTime &dfltPConfig::GetAllKeyValuesPConfig::SetRealPConfig::GetIntegerlong dfltPConfig::GetBooleanBOOL dfltPConfig::GetRealPConfig::GetInt64PInt64PInt64 dfltPConfig::SetInt64PInt64 valuePConfig::SetIntegerG:\Storage\CVS_Head\pwlib\src\ptlib\common\pethsock.cxxPEthSocket::Address::operator PStringPEthSocket::ListenReusabilityPEthSocket::ReadPacketPBYTEArray &bufferAddress &destAddress &srcBYTE *&payloadPEthSocket::Address::operator =PEthSocket::Address &const Address &addrPEthSocket::Address::operator ==const BYTE *ethPEthSocket::Address::operator !=PEthSocket::Frame::ParsePEthSocket::Address::Addressconst BYTE *addrPEthSocket::GetIpAddressPEthSocket::GetProtocolNameG:\Storage\CVS_Head\pwlib\src\ptlib\msos\pipe.cxxPPipeChannel::PlatformOpenconst PString &subProgramconst PStringArray &argumentListBOOL searchPathBOOL stderrSeparateconst PStringToString *environmentPPipeChannel::Killint signalPPipeChannel::WritePPipeChannel::GetReturnCodePPipeChannel::ClosePPipeChannel::PPipeChannelPPipeChannel::ExecutePPipeChannel::ReadStandardErrorPString &errorsPPipeChannel::IsRunningPPipeChannel::~PPipeChannelPPipeChannel::ReadPPipeChannel::IsOpenPPipeChannel::CanReadAndWritePPipeChannel::WaitForTerminationG:\Storage\CVS_Head\pwlib\src\ptlib\common\pipechan.cxxPPipeChannel::ComparePPipeChannel::GetNameSplitArgsconst PString &cmdlinePString &progNamePStringArray &argumentsconst PStringArray &argumentsconst PStringToString &environmentPPipeChannel::OpenG:\Storage\CVS_Head\pwlib\src\ptlib\common\pluginmgr.cxxPPluginManager::RemoveNotifierconst PNotifier ¬ifyFunctionPPluginManager::GetPluginManagerPPluginManager &pluginLoaderStartupFactoryPFactory::WorkerPPluginManager::AddNotifierBOOL existingPDevicePluginServiceDescriptor::ValidateDeviceNameconst PString &deviceNameint userDataPPluginManager::CallNotifierPPluginManager::CreatePluginsDeviceconst PString &serviceNameconst PString &serviceTypePPluginManager::LoadPluginPDevicePluginServiceDescriptor::SeparatorCharconst charPPluginManager::RegisterServicePPluginServiceDescriptor *descriptorPPluginModuleManager::OnLoadModulePPluginManager::LoadPluginDirectoryPPluginModuleManager::PPluginModuleManagerconst char *_signatureFunctionNamePPluginManager::GetPluginTypesPPluginManager::GetPluginsProvidingPPluginManager::GetPluginDirsPPluginManager::CreatePluginsDeviceByNamePPluginManager::GetPluginsDeviceNamesPluginLoaderStartupPluginLoaderStartup::PCLASSINFOPluginLoaderStartup::OnStartupPluginLoaderStartup::OnShutdownPluginLoaderStartup::managersstd::vectorPPluginManager::GetServiceDescriptorPPluginServiceDescriptor *G:\Storage\CVS_Head\pwlib\src\ptlib\common\ptime.cxxPTimeUngetCharvoid *streamPTime::operator -const PTimeInterval &tconst PTime &tPTime::operator +PTimeInterval::AsStringint precisionFormats formatPTime::PTimeint secondint minuteint hourint dayint monthint yearint zonePTimeInterval::ComparePTimeGetCharPTimeIsDayNameint abbrevPTime::ComparePTimeInterval::ReadFromPTimeIsMonthNamePTimeInterval::PTimeIntervalPTimeInterval::PrintOnPTimeInterval::SetIntervalPInt64 millisecsPTime::operator -=PTime &PTimeGetDateOrderPTime::AsStringconst char *formatTimeFormat formatPTime::operator +=PTime::ReadFromp_mktimetm *tG:\Storage\CVS_Head\pwlib\src\ptlib\msos\ptlib.cxxPFilePath::SetTypeconst PCaselessString &typePProcess::ConstructPConsoleChannel::OpenConsoleType typePDirectory::GetInfoPFileInfo &infoPFile::GetInfoPDummyFunctionToMakeSureSymbolsAreInDEFFilePFilePath::GetTypePConsoleChannel::GetNamePConsoleChannel::ReadPTime::os_localtimetm *const time_t *clocktm *tbPTextFile::WriteLinePDirectory::IsRootPFile::MoveGetVolumeSubStringLengthPDirectory::Changeconst PString &pistream &sPTime::os_gmtimePFilePath::GetFileNamePDirectory::GetRootPProcess::SetMaxHandlesPConsoleChannel::CloseMaxDigitsPFile::AccessPString::AsInt64PChannel::GetNamePFile::SetPermissionsint permissionsPFile::IsTextFilePFilePath::GetTitleGetDigitsBOOL signPFilePath::GetVolumePFilePath::GetDirectoryPDirectory::FilteredPDirectory::GetParentPChannel::ConstructPString::AsUnsigned64PConsoleChannel::PConsoleChannelPTextFile::ReadLinePFile::RemovePConsoleChannel::WritePDirectory::GetPathPTextFile::IsTextFilePChannel::ClosePFilePath::AssignContentsPFile::SetLengthPFilePath::GetPathPFile::SetFilePathPFilePath::PFilePathconst char *prefixconst char *dirG:\Storage\CVS_Head\pwlib\src\ptclib\ptts.cxx"ptbuildopts.h"PTextToSpeech_FestivalPTextToSpeechPTextToSpeech_Festival::PCLASSINFOPTextToSpeech_Festival::PTextToSpeech_FestivalPTextToSpeech_Festival::~PTextToSpeech_FestivalPTextToSpeech_Festival::GetVoiceListPTextToSpeech_Festival::SetVoiceconst PString &voicePTextToSpeech_Festival::SetRatePTextToSpeech_Festival::GetRatePTextToSpeech_Festival::SetVolumeunsigned int volumePTextToSpeech_Festival::GetVolumePTextToSpeech_Festival::OpenFileconst PFilePath &fnPTextToSpeech_Festival::OpenChannelPTextToSpeech_Festival::IsOpenPTextToSpeech_Festival::ClosePTextToSpeech_Festival::SpeakTextType hintPTextToSpeech_Festival::InvokePTextToSpeech_Festival::mutexPTextToSpeech_Festival::openedPTextToSpeech_Festival::usingFilePTextToSpeech_Festival::textPTextToSpeech_Festival::pathPFilePathPTextToSpeech_Festival::volumePTextToSpeech_Festival::ratePTextToSpeech_Festival::voicePTextToSpeech_SAPIPTextToSpeech_SAPI::PCLASSINFOPTextToSpeech_SAPI::PTextToSpeech_SAPIPTextToSpeech_SAPI::~PTextToSpeech_SAPIPTextToSpeech_SAPI::GetVoiceListPTextToSpeech_SAPI::SetVoicePTextToSpeech_SAPI::SetRatePTextToSpeech_SAPI::GetRatePTextToSpeech_SAPI::SetVolumePTextToSpeech_SAPI::GetVolumePTextToSpeech_SAPI::OpenFilePTextToSpeech_SAPI::OpenChannelPTextToSpeech_SAPI::IsOpenPTextToSpeech_SAPI::ClosePTextToSpeech_SAPI::SpeakPTextToSpeech_SAPI::OpenVoicePTextToSpeech_SAPI::refMutexPTextToSpeech_SAPI::refCountint *PTextToSpeech_SAPI::mutexPTextToSpeech_SAPI::m_cpVoiceCComPtrPTextToSpeech_SAPI::cpWavStreamCComPtrPTextToSpeech_SAPI::openedPTextToSpeech_SAPI::usingFilePTextToSpeech_SAPI::ratePTextToSpeech_SAPI::volumePTextToSpeech_SAPI::voicesapiTTSFactoryPFactory::WorkerfestivalTTSFactoryPFactory::WorkerG:\Storage\CVS_Head\pwlib\src\ptlib\common\pvidchan.cxxPVideoChannel::GetRenderWidthPVideoChannel::GetRenderHeightPVideoChannel::EnableAccessPVideoChannel::IsGrabberOpenPVideoChannel::SetRenderFrameSizeint _widthint _heightPVideoChannel::RestrictAccessPVideoChannel::PVideoChannelconst PString &devicePVideoChannel::GetVideoReaderPVideoInputDevice *PVideoChannel::ClosePVideoChannel::AttachVideoReaderPVideoInputDevice *deviceBOOL keepCurrentPVideoChannel::GetVideoPlayerPVideoOutputDevice *PVideoChannel::GetGrabHeightPVideoChannel::GetDefaultDeviceDirectionsPVideoChannel::CloseVideoPlayerPVideoChannel::Redrawconst void *framePVideoChannel::SetGrabberFrameSizePVideoChannel::CloseVideoReaderPVideoChannel::AttachVideoPlayerPVideoOutputDevice *devicePVideoChannel::IsRenderOpenPVideoChannel::~PVideoChannelPVideoChannel::GetGrabWidthPVideoChannel::IsOpenPVideoChannel::GetDeviceNamesPVideoChannel::ToggleVFlipInputPVideoChannel::ReadPVideoChannel::DisplayRawDatavoid *videoBufferPVideoChannel::Openconst PString &devPVideoChannel::GetNamePVideoChannel::WriteG:\Storage\CVS_Head\pwlib\src\ptclib\pxml.cxxPXML_EndElementPXML::StartAutoReloadURLconst PTimeInterval &refreshTimeint _optionsPXML::LoadURLPXML::RemoveAllPXMLSettings::ToConfigPConfig &cfgPXMLSettings::SaveFilePXMLParser::EndDocTypeDeclPXML::LoadPXMLParser::XmlDeclconst char *_versionconst char *_encodingint _standAlonePXMLData::ClonePXMLObject *PXMLElement *_parentPXML::AutoReloadTimeoutPXMLStreamParser::PXMLStreamParserPXMLSettings::SavePString &dataPXML::Constructconst char *_noIndentElementsPXMLStreamParser::EndElementPXML::AutoLoadURLPXML::CreateTagconst PString &textPXMLStreamParser::ReadPXML *PXML::GetNumElementsPXML::PrintOnPXMLParser::PXMLParserPXML_EndNamespaceDeclHandlerconst XML_Char *prefixPXMLObject::SetDirtyPXML_CharacterDataHandlerconst char *dataPXMLSettings::LoadPXMLObject::GetNextObjectPXMLParser::AddCharacterDataPXML::PXMLconst PXML &xmlint optionsconst char *noIndentElementsPXML::~PXMLPXMLParser::StartDocTypeDeclPXML::StopAutoReloadURLPXML_StartElementconst char **attrsPXMLElement::GetDataAttributePXML::AutoReloadThreadPXMLData::Outputconst PXMLBase &xmlint indentPXML::CreateEndTagPXMLSettings::SetAttributeconst PCaselessString §ionPXML::GetDocumentTypePXMLData::SetStringBOOL setDirtyPXML::IsDirtyPXML::SetRootElementPXMLElement *PXMLElement *elementconst PString &documentTypePXMLElement::AddSubObjectPXMLObject *elemPXMLElement::AddChildPXMLData *PXMLData *elemBOOL dirtyPXMLElement *elemPXML::SaveFilePXMLParser::SetXMLTreePXMLElement *newRootPXMLElement::HasAttributeconst PCaselessString &keyPXMLParser::GetXMLTreePXMLData::PXMLDataconst PString &_valuePXMLElement::OutputPXMLElement::FindObjectPXMLObject *ptrPXMLParser::EndNamespaceDeclHandlerconst XML_Char *PXML_XmlDeclHandlerconst char *versionconst char *encodingint standalonePXMLSettings::HasAttributePXML_StartNamespaceDeclHandlerconst XML_Char *uriPXMLElement::GetElementconst PCaselessString &namePXMLSettings::PXMLSettingsconst PConfig &dataPXML::CreateStartTagPXML::IsNoIndentElementconst PString &elementNamePXMLElement::RemoveElementPXMLElement::ClonePXMLParser::Parseint dataLenBOOL finalPXML::OnAutoLoadPXMLParser::StartElementPXMLParser::StartNamespaceDeclHandlerPXMLElement::GetAttributePXML::SavePXMLParser::GetErrorInfoPString &errorStringPINDEX &errorColPINDEX &errorLinePXMLElement::PXMLElementconst char *_namePXMLParser::EndElementPXML::GetElementPXML_EndDocTypeDeclPXMLSettings::GetAttributePXMLElement::PrintOnPXMLSettings::LoadFilePXMLParser::~PXMLParserPXML::LoadFilePXMLElement::GetDataPXML::CreateTagNoDataPXMLElement::GetKeyAttributePXML::RemoveElementPXMLElement::SetAttributePXML_StartDocTypeDeclconst char *docTypeNameconst char *sysidconst char *pubidint hasInternalSubSetG:\Storage\CVS_Head\pwlib\src\ptlib\common\qos.cxxPQoS::SetAvgBytesPerSecDWORD avgBytesPerSecPQoS::controlledLoadDSCPPQoS::SetDSCPAlternativeDWORD winServiceTypeUINT dscpPQoS::SetWinServiceTypePQoS::bestEffortDSCPPQoS::SetMaxFrameBytesDWORD maxFrameBytesPQoS::guaranteedDSCPPQoS::SetDSCPint DSCPvaluePQoS::PQoSint DSCPalternativeDWORD peakBytesPerSecPQoS::SetPeakBytesPerSecG:\Storage\CVS_Head\pwlib\src\ptlib\common\safecoll.cxxPSafePtrBase::ExitSafetyModeExitSafetyModeOption refPSafeCollection::RemoveAllBOOL synchronousPSafePtrBase::~PSafePtrBasePSafeObject::LockReadOnlyPSafeObject::SafelyCanBeDeletedPSafeCollection::GetSizePSafePtrBase::PSafePtrBaseconst PSafePtrBase &enumeratorconst PSafeCollection &safeCollectionPSafeObject *objPSafeCollection::DeleteObjectPObject *objectPSafePtrBase::AssignPSafeObject *newObjPSafeCollection::SetAutoDeleteObjectsPSafeObject::SafeRemovePSafeObject::UnlockReadWritePSafeObject::SafeDereferencePSafePtrBase::PreviousPSafeCollection::DeleteObjectsTimeoutPSafeLockReadOnly::UnlockPSafeLockReadOnly::LockPSafePtrBase::SetSafetyModePSafeCollection::SafeRemoveAtPSafeObject::PSafeObjectPSafeCollection::SafeRemoveObjectPSafeCollection::PSafeCollectionPCollection *collPSafeLockReadWrite::~PSafeLockReadWritePSafeLockReadOnly::PSafeLockReadOnlyconst PSafeObject &objectPSafeObject::LockReadWritePSafeLockReadWrite::UnlockPSafeObject::SafeReferencePSafeLockReadWrite::PSafeLockReadWritePSafePtrBase::ComparePSafeObject::UnlockReadOnlyPSafeLockReadOnly::~PSafeLockReadOnlyPSafePtrBase::EnterSafetyModeEnterSafetyModeOption refPSafeLockReadWrite::LockPSafeCollection::DeleteObjectsToBeRemovedPSafeCollection::SafeRemovePSafePtrBase::NextPSafeCollection::~PSafeCollectionG:\Storage\CVS_Head\pwlib\src\ptlib\wince\ConsoleCE\snmpdummy.cppSnmpUtilOidFreeVOIDAsnObjectIdentifier *pOidSnmpExtensionInitDWORD dwUptimeReferenceHANDLE *phSubagentTrapEventAsnObjectIdentifier *pFirstSupportedRegionSnmpUtilOidAppendSNMPAPIAsnObjectIdentifier *pOidDstAsnObjectIdentifier *pOidSrcSnmpExtensionQueryBYTE bPduTypeSnmpUtilOidNCmpAsnObjectIdentifier *pOid1AsnObjectIdentifier *pOid2UINT nSubIdsSnmpUtilMemFreeLPVOID pMemSnmpUtilMemAllocLPVOIDUINT nBytesSnmpUtilOidCmpSnmpUtilOidCpyG:\Storage\CVS_Head\pwlib\src\ptlib\common\sockets.cxxPIPSocket::GetLocalHostNameaddrinfoPIPSocket::GetNamePIPCacheDataPIPCacheData::PCLASSINFOPIPCacheData::PIPCacheDataaddrinfo *addr_infoconst char *originalhostent *entPIPCacheData::AddEntryPIPCacheData::GetHostNamePIPCacheData::GetHostAddressPIPCacheData::GetHostAliasesPIPCacheData::HasAgedPIPCacheData::hostnamePIPCacheData::addressPIPCacheData::aliasesPIPCacheData::birthDatePUDPSocket::ApplyQoSPUDPSocket::ConnectPIPSocket::IsIpAddressFamilyV6SupportedPIPSocket::Address::IsRFC1918PIPSocket::Address::operator in6_addrpHostByNamePHostByName &PIPSocket::GetDefaultIpAnyPSocket::AcceptPSocket &PIPSocket::Address::operator ==DWORD dwin_addr &addrin6_addr &addrPSocket::PSocketPIPSocket::Address::GetBroadcastPIPSocket::Connectconst Address &ifaceconst PString &hostdefaultIpAddressFamilycreationMutexPSocket::GetOptionint optionvoid *valuePtrPINDEX valueSizeint levelint &valuePIPSocket::Address::ComparePIPSocket::Address::operator *=PTCPSocket::OpenSocketint ipAdressFamilyhostentPIPSocket::Address::Addressconst id_struct &addrconst int ai_familyconst int ai_addrlensockaddr *ai_addrconst in6_addr &addrconst in_addr &addrconst BYTE *bytesconst PString &dotNotationPIPSocket::GetLocalAddressWORD &portNumPUDPSocket::GetProtocolNameconst PIPSocket::Address &aPTCPSocket::GetProtocolNamePICMPSocket::OpenSocketpHostByAddrPHostByAddr &PIPSocket::Address &aPIPSocket::Listenconst Address &bindAddrWORD newPortReusability reuseunsigned int queueSizePUDPSocket::GetLastReceiveAddressAddress &addressPSocket::SetPortconst PString &servicePIPDatagramSocket::PIPDatagramSocketPIPSocket::Address::IsValidPIPSocket::Address::GetLoopback6PIPDatagramSocket::ReadFromPUDPSocket::PUDPSocketPQoS *qosPIPSocket::GetNetworkInterfacePTCPSocket::WriteOutOfBandPIPSocket::GetDefaultIpAddressFamilyPSocket::GetProtocolByNamePSocket::GetPortPIPSocketAddressAndPort::Parsechar _sepPIPSocket::SetDefaultIpAddressFamilyV6PIPSocket::ClearNameCachePUDPSocket::ModifyQoSSpecPIPSocket::SetDefaultIpAddressFamilyV4id_structCheckOSVersionPIPSocket::Address::GetLoopbackPSocket::GetServicePsockaddrPsockaddr::PsockaddrPsockaddr::operator ->sockaddr *Psockaddr::operator sockaddr *Psockaddr::GetSizesocklen_tPsockaddr::GetIPPsockaddr::GetPortPsockaddr::storagesockaddr_storagePIPSocket::Address::operator []PUDPSocket::OpenSocketGQOSint afint protoPIPSocket::Address::operator in_addrPIPSocket::Address::IsBroadcastGetConfigTimeDWORD dfltPIPDatagramSocket::WriteToPTCPSocket::ClonePIPSocket::Address::FromStringPIPSocket::Address::GetSizePUDPSocket::Writeinaddr_emptyin_addrPTCPSocket::OnOutOfBandPSocket::ListenPUDPSocket::GetSendAddressPIPSocket::InterfaceEntry::InterfaceEntryconst Address &_addrconst Address &_maskconst PString &_macAddrconst PString &_ip6AddrPSocket::SelectPChannel::ErrorsSelectList &readSelectList &writeSelectList &exceptPSocket &sock1PSocket &sock2dummyForWinSockPWinSockP_timeval::operator =P_timeval &PTCPSocket::WritePUDPSocket::GetQoSSpecPTCPSocket::AcceptPSocket &socketPIPSocket::GetHostAddressconst PString &hostnamePIPSocket::Address::IsV4MappedP_fd_set::P_fd_setSOCKET fdany6PIPSocket::Address::GetAny6PIPSocket::GetPeerHostNamePIPSocket::PIPSocketPSocket::GetNameByProtocolWORD protoPIPSocket::InterfaceEntry::PrintOnPIPSocket::Address::operator =P_timeval::P_timevalPIPSocket::GetHostAliasesP_fd_set::operator -=P_fd_set &PIPSocket::GetHostNamePHostByAddrPHostByAddr_privatePHostByAddr::GetHostNamePString &hostnamePHostByAddr::GetHostAddressPIPSocket::Address &addressPHostByAddr::GetHostAliasesPStringArray &aliasesPHostByAddr::GetHostPIPCacheData *PHostByAddr::mutexP_fd_set::operator +=P_fd_set::operator =PUDPSocket::SetSendAddressconst Address &newAddressPIPSocket::Address::AsStringloopback4loopback6PTCPSocket::PTCPSocketPTCPSocket &tcpSocketPSocket::GetServiceByPortconst char *protocolPIPSocket::SetDefaultIpAddressFamilyPSocket::SetOptionconst void *valuePtrPTCPSocket::ListenPSocket::ConnectPIPSocket::Address::IsLoopbackPSocket::GetPortByServicePIPSocket::GetPeerAddressPSocket::ShutdownPIPSocket::Address::IsAnyPIPCacheKeyPIPCacheKey::PCLASSINFOPIPCacheKey::PIPCacheKeyPIPCacheKey::ClonePIPCacheKey::HashFunctionPIPCacheKey::addrPUDPSocket::ReadPIPSocket::Address::operator PStringPHostByNamePHostByName_privatePHostByName::GetHostNamePHostByName::GetHostAddressPHostByName::GetHostAliasesPHostByName::GetHostPHostByName::mutexPUDPSocket::OpenSocketG:\Storage\CVS_Head\pwlib\src\ptlib\common\sound.cxxPSoundChannel::GetDefaultDevicePSoundChannel::CreateOpenedChannelPSoundChannel *const PString &driverNamePSoundChannel::Directions dirunsigned int numChannelsunsigned int sampleRateunsigned int bitsPerSamplePPluginManager *pluginMgrPSound::Loadconst PFilePath &PWLibStupidWindowsHacksloadSoundStuffPSound::SetFormatunsigned int channelsunsigned int samplesPerSecondPSoundChannel::GetDriversDeviceNamesPSound::PlayFilePSoundChannel::OpenPSound::PlayPSound::PSoundconst PFilePath &filenamePDevicePluginFactory::Worker::CreatePSoundChannel::GetDeviceNamesPSound::SavesoundPluginBaseClassPWLibsoundChannelFactoryAdapterPFactory::Worker >PSoundChannel::GetDriverNamesPSoundChannel::GetNamePSoundChannel::CreateChannelPSoundChannel::PSoundChannelPSound::operator =PSound &PSoundChannel::CreateChannelByNamePSoundChannel::~PSoundChannelG:\Storage\CVS_Head\pwlib\src\ptlib\msos\sound_win32.cxxPWaveFormat::PrintOnPSoundChannelWin32::Constructoperator =PSoundChannelWin32::IsRecordBufferFullPSoundChannelWin32::GetErrorTextPSoundChannelWin32::WaitForPlayCompletionPWaveFormat::ReadFromPWaveFormat::SetFormatPSoundChannelWin32::WaitForRecordBufferFullPWaveBuffer::PrepareHWAVEIN hInHWAVEOUT hOutPINDEX &countPSoundChannelWin32::StartRecordingPSoundChannelWin32::Openconst PWaveFormat &formatPWaveBuffer::~PWaveBufferPSoundChannelWin32::GetNamePSoundChannelWin32::ReadPWaveFormat::SetSizePWaveFormat::~PWaveFormatPSoundChannelWin32::GetDeviceNamesPWaveFormat::PWaveFormatconst PWaveFormat &fmtPMultiMediaFilePMultiMediaFile::PMultiMediaFilePMultiMediaFile::~PMultiMediaFilePMultiMediaFile::CreateWaveFileconst PWaveFormat &waveFormatDWORD dataSizePMultiMediaFile::OpenWaveFilePWaveFormat &waveFormatDWORD &dataSizePMultiMediaFile::OpenDWORD dwOpenFlagsLPMMIOINFO lpmmioinfo = NULLPMultiMediaFile::CloseUINT wFlags = 0PMultiMediaFile::AscendMMCKINFO &ckinfoPMultiMediaFile::DescendUINT wFlagsLPMMCKINFO lpckParent = NULLPMultiMediaFile::ReadPMultiMediaFile::CreateChunkPMultiMediaFile::WritePMultiMediaFile::GetLastErrorPMultiMediaFile::hmmioPMultiMediaFile::dwLastErrorPWaveBuffer::ReleasePWaveFormat::operator =PWaveFormat &PSoundChannelWin32::GetSampleSizePSoundChannelWin32::GetChannelsPSoundChannelWin32::SetFormatPSoundChannelWin32::PlayFilePSoundChannelWin32::IsOpenPSoundChannelWin32::SetBuffersPSoundChannelWin32::SetVolumeunsigned int newVolumePSoundChannelWin32::GetVolumeunsigned int &oldVolumePWaveBuffer::PrepareCommonPSoundChannelWin32::RecordSoundPSound &soundPSoundChannelWin32::GetDefaultDevicePSoundChannelWin32::OpenDevicePSound::PSoundChannelWin32::GetBuffersPINDEX &sizePSoundChannelWin32::PlaySoundconst PSound &soundPSoundChannelWin32::PSoundChannelWin32PSoundChannelWin32::GetSampleRatePWaveBuffer::operator =PWaveBuffer &PSoundChannelWin32::ClosePSoundChannelWin32::RecordFilePSoundChannelWin32::GetDeviceIDunsigned int &idPSoundChannelWin32::AreAllRecordBuffersFullPSoundChannelWin32::WaitForAllRecordBuffersFullPSoundChannelWin32::~PSoundChannelWin32PWaveBuffer::PWaveBufferPSoundChannelWin32::WritePSoundChannelWin32::AbortPSoundChannelWin32::HasPlayCompletedG:\Storage\CVS_Head\pwlib\src\ptlib\wince\ConsoleCE\stdlibx.cppRegEnumKeyHKEY hKeyDWORD dwIndexLPTSTR ptcsNameDWORD cbNameRegDeleteValueconst char *lpValueNamestrtoulconst char *nptrchar **endptrint ibase_closeint nHandleGetPrivateProfileStringconst char *lpAppNameconst char *lpKeyNameconst char *lpDefaultchar *lpReturnedStringDWORD nSizeconst char *string1const char *string2RegQueryValueExchar *lpValueNameLPDWORD lpReservedLPDWORD lpTypeLPBYTE lpDataLPDWORD lpcbDataprintcharchar nrenameconst char *oldnameconst char *newnameGetWindowsDirectorychar *lpBufferUINT uSize_chsizelong sizeRegDeleteKeyconst char *lpSubKey_i64toa__int64 valchar *bufint radix_mkdirconst char *sDirremoveRegCreateKeyExconst char *lpSubDWORD dwrLPSTR lpclsDWORD dwoREGSAM samLPSECURITY_ATTRIBUTES lpsaPHKEY phkLPDWORD lpdw_sopenint oflagint pmodeabortRegEnumValueCeLPTSTR ptcsValueNameLPDWORD lpcbValueNameRegOpenKeyExDWORD ulOptionsREGSAM samDesiredPHKEY phkResultx64toaunsigned __int64 valunsigned int radixint is_negperror_lseeklong offint orig_writeconst void *punsigned int sWritePrivateProfileStringconst char *lpStringstrrchrconst char *stringint ch_readvoid *p_open_mktempchar *temp_accessconst char *sName_chmod_atoi64__int64RegSetValueExDWORD ReservedDWORD dwTypeconst BYTE *lpDataDWORD cbData_ui64toastrspnsize_tconst char *strCharSetstrtodstrtol_rmdirG:\Storage\CVS_Head\pwlib\src\ptlib\wince\ConsoleCE\streamb.cppstreambuf::syncstreambuf::xsputnconst char *pBufint cbBufstreambuf::xsgetnchar *pBufstreambuf::setbufstreambuf *char *pstreambuf::sgetcstreambuf::stosscstreambuf::pbackfailstreambuf::snextcstreambuf::~streambufstreambuf::setbchar *bchar *ebint astreambuf::sbumpcstreambuf::allocatestreambuf::doallocatestreambuf::streambufstreambuf::seekposstreampos posstreambuf::seekoffG:\Storage\CVS_Head\pwlib\src\ptlib\wince\ConsoleCE\time.cpp_lpdaysint %[]YearToFileTimeFILETIMEWORD wYearSystemTimeToYDaySYSTEMTIME sGetDeltaSecsFILETIME f1FILETIME f2cvtdateint trantypeint weekint dayofweekint dateint minint secint msectransitionTime *pDSTGetTZBiasint *pTZBiasSecs = NULLint *pDSTBiasSecs = NULLtransitionTimegTZInfoCacheTIME_ZONE_INFORMATIONgbUseDSTTmToSystemTimeSYSTEMTIMEtm &ttransitionTime::yrtransitionTime::ydtransitionTime::msn1SecIn100NSconst __int64gbTZInfoCacheInitializedtbisindsttm *pt_inittimeclockclock_tInt64ToFileTime__int64 iTimetimetime_t *timermktimeFileTimeToTimeconst FILETIME &FileTime_daysgmtimeconst time_t *timpSystemTimeToTmSYSTEMTIME &slocaltimeconst time_t *ptimeSystemTimeToTimeconst LPSYSTEMTIME pSystemTimeG:\Storage\CVS_Head\pwlib\src\ptlib\common\vconvert.cxx"tinyjpeg.h"PColourConverter::GetDstFrameSizeunsigned int &widthunsigned int &heightPColourConverter::SetFrameSizeunsigned int widthunsigned int heightPColourConverter::SetDstFrameSizeBOOL bScalePStandardColourConverterPColourConverterPStandardColourConverter::PCLASSINFOPStandardColourConverter::PStandardColourConverterconst PString &srcFmtconst PString &dstFmtunsigned int wunsigned int hPStandardColourConverter::SBGGR8toYUV420Pconst BYTE *srgbBYTE *rgbPINDEX *bytesReturnedPStandardColourConverter::SBGGR8toRGBPStandardColourConverter::GreytoYUV420PSameSizeconst BYTE *rgbBYTE *yuvPStandardColourConverter::GreytoYUV420PWithResizePStandardColourConverter::GreytoYUV420PPStandardColourConverter::RGBtoYUV420PSameSizeunsigned int rgbIncrementunsigned int redOffsetunsigned int blueOffsetPStandardColourConverter::RGBtoYUV420PWithResizePStandardColourConverter::RGBtoYUV420PPStandardColourConverter::YUV420PtoRGBconst BYTE *yuvPStandardColourConverter::SwapRedAndBlueconst BYTE *srcBYTE *dstunsigned int srcIncrementunsigned int dstIncrementPStandardColourConverter::ResizeYUV422BYTE *destPStandardColourConverter::ResizeYUV420PPStandardColourConverter::UYVY422toYUV420PSameSizeconst BYTE *uyvyBYTE *yuv420pPStandardColourConverter::UYVY422toYUV420PWithResizePStandardColourConverter::YUY2toYUV420PSameSizeconst BYTE *yuy2PStandardColourConverter::YUY2toYUV420PWithResizePStandardColourConverter::MJPEGtoYUV420PSameSizePStandardColourConverter::MJPEGtoXXXconst BYTE *mjpegBYTE *output_dataint formatPStandardColourConverter::MJPEGtoYUV420PPStandardColourConverter::MJPEGtoXXXSameSizePCOLOUR_CONVERTER2P_JPEG_YUV420PP_MJPEG_YUV420PP_JPEG_GreyP_JPEG_BGR24P_JPEG_RGB24P_MJPEG_GreyP_MJPEG_BGR24P_MJPEG_RGB24P_UYV444_YUV420PP_UYVY422_YUV420PP_YUV411P_YUV420PP_YUV420P_YUV411PP_RGB32_RGB24P_RGB24_RGB32P_BGR32_RGB32P_RGB32_BGR32P_BGR32_RGB24P_RGB32_BGR24P_BGR24_RGB32P_RGB24_BGR32P_BGR24_RGB24P_RGB24_BGR24P_YUV420P_BGR32P_YUV420P_RGB32P_YUV420P_BGR24P_YUV420P_RGB24P_SBGGR8_YUV420PP_SBGGR8_RGB24P_YUV422_YUV420PP_YUV420P_YUV420PP_YUV422_YUV422P_YUY2_YUV420PP_BGR32_YUV420PP_RGB32_YUV420PP_BGR24_YUV420PP_RGB24_YUV420PP_Grey_YUV420PPColourConverter::ConvertInPlaceBYTE *frameBufferBOOL noIntermediateFramePSynonymColourRegistration::CreatePColourConverter *PSynonymColourRegistration::PSynonymColourRegistrationconst char *srcFmtconst char *dstFmtSwapRedAndBlueRowconst BYTE *srcRowPtrBYTE *dstRowPtrPColourConverter::Createconst PString &srcColourFormatconst PString &destColourFormatPSynonymColour::Convertconst BYTE *srcFrameBufferBYTE *dstFrameBufferunsigned int __srcFrameBytesclipint limitPColourConverter::SetSrcFrameSizePColourConverterRegistration::PColourConverterRegistrationRegisteredColourConvertersListHeadPColourConverterRegistration *PColourConverter::PColourConverterconst PString &srcconst PString &dstConvertQCIFToCIFconst void *_srcvoid *_dstPColourConverter::GetSrcFrameSizeG:\Storage\CVS_Head\pwlib\src\ptlib\common\vfakeio.cxxPVideoFont::GetLetterDataPVideoFont::LetterData *char asciiPVideoInputDevice_FakeVideoPVideoInputDevicePVideoInputDevice_FakeVideo::PCLASSINFOPVideoInputDevice_FakeVideo::PVideoInputDevice_FakeVideoPVideoInputDevice_FakeVideo::OpenBOOL startImmediate = TRUE /// Immediately start device PVideoInputDevice_FakeVideo::IsOpenPVideoInputDevice_FakeVideo::ClosePVideoInputDevice_FakeVideo::StartPVideoInputDevice_FakeVideo::StopPVideoInputDevice_FakeVideo::IsCapturingPVideoInputDevice_FakeVideo::GetInputDeviceNamesPVideoInputDevice_FakeVideo::GetDeviceNamesPVideoInputDevice_FakeVideo::GetMaxFrameBytesPVideoInputDevice_FakeVideo::GetFrameDataPINDEX *bytesReturned = NULL /// Optional bytes returned. PVideoInputDevice_FakeVideo::GetFrameDataNoDelayPINDEX *bytesReturned = NULL /// OPtional bytes returned. PVideoInputDevice_FakeVideo::GrabMovingBlocksTestFrameBYTE *resFramePVideoInputDevice_FakeVideo::GrabMovingLineTestFramePVideoInputDevice_FakeVideo::GrabNTSCTestFramePVideoInputDevice_FakeVideo::GrabBouncingBoxesPVideoInputDevice_FakeVideo::GrabBlankImagePVideoInputDevice_FakeVideo::GrabOriginalMovingBlocksFramePVideoInputDevice_FakeVideo::GrabTextVideoFramePVideoInputDevice_FakeVideo::FillRectBYTE *frameint rectWidthint rectHeightint rint gint bPVideoInputDevice_FakeVideo::SetVideoFormatVideoFormat videoFormatPVideoInputDevice_FakeVideo::GetNumChannelsPVideoInputDevice_FakeVideo::SetChannelPVideoInputDevice_FakeVideo::SetColourFormatconst PString &colourFormatPVideoInputDevice_FakeVideo::SetFrameRatePVideoInputDevice_FakeVideo::GetFrameSizeLimitsunsigned int &minWidthunsigned int &minHeightunsigned int &maxWidthunsigned int &maxHeightPVideoInputDevice_FakeVideo::SetFrameSizePVideoInputDevice_FakeVideo::ClearMappingPVideoInputDevice_FakeVideo::TestAllFormatsPVideoInputDevice_FakeVideo::grabCountPVideoInputDevice_FakeVideo::videoFrameSizePVideoInputDevice_FakeVideo::scanLineWidthPVideoInputDevice_FakeVideo::bytesPerPixelPVideoInputDevice_FakeVideo::textLinePString %[PVideoFont::MAX_L_HEIGHT]vFakeLetterDataPVideoFont::LetterData %[]PVideoOutputDevice_NULLOutputPVideoOutputDevicePVideoOutputDevice_NULLOutput::PCLASSINFOPVideoOutputDevice_NULLOutput::PVideoOutputDevice_NULLOutputPVideoOutputDevice_NULLOutput::GetOutputDeviceNamesPVideoOutputDevice_NULLOutput::GetDeviceNamesPVideoOutputDevice_NULLOutput::OpenPVideoOutputDevice_NULLOutput::StartPVideoOutputDevice_NULLOutput::StopPVideoOutputDevice_NULLOutput::ClosePVideoOutputDevice_NULLOutput::IsOpenPVideoOutputDevice_NULLOutput::GetMaxFrameBytesPVideoOutputDevice_NULLOutput::SetFrameDataBOOL endFrame = TRUE PVideoOutputDevice_NULLOutput::EndFrameG:\Storage\CVS_Head\pwlib\src\ptlib\msos\vfw.cxxtagCapStatustagCapStatus::uiImageWidthtagCapStatus::uiImageHeighttagCapStatus::fLiveWindowtagCapStatus::fOverlayWindowtagCapStatus::fScaletagCapStatus::ptScrollPOINTtagCapStatus::fUsingDefaultPalettetagCapStatus::fAudioHardwaretagCapStatus::fCapFileExiststagCapStatus::dwCurrentVideoFrametagCapStatus::dwCurrentVideoFramesDroppedtagCapStatus::dwCurrentWaveSamplestagCapStatus::dwCurrentTimeElapsedMStagCapStatus::hPalCurrentHPALETTEtagCapStatus::fCapturingNowtagCapStatus::dwReturntagCapStatus::wNumVideoAllocatedtagCapStatus::wNumAudioAllocatedLPCAPSTATUSstruct tagCapStatus *PCapStatusPCapStatus::PCapStatusPCapStatus::IsOKCAPDRIVERCAPSstruct tagCapDriverCapsPVideoInputDevice_VideoForWindows::HandleCaptureFormatTableFormatTableEntry %[]WndProcLRESULTUINT uMsgWPARAM wParamLPARAM lParamtagCapDriverCapstagCapDriverCaps::wDeviceIndextagCapDriverCaps::fHasOverlaytagCapDriverCaps::fHasDlgVideoSourcetagCapDriverCaps::fHasDlgVideoFormattagCapDriverCaps::fHasDlgVideoDisplaytagCapDriverCaps::fCaptureInitializedtagCapDriverCaps::fDriverSuppliesPalettestagCapDriverCaps::hVideoIntagCapDriverCaps::hVideoOuttagCapDriverCaps::hVideoExtIntagCapDriverCaps::hVideoExtOutLPCAPTUREPARMSstruct tagCaptureParms *videohdr_tagvideohdr_tag::lpDataLPBYTEvideohdr_tag::dwBufferLengthvideohdr_tag::dwBytesUsedvideohdr_tag::dwTimeCapturedvideohdr_tag::dwUservideohdr_tag::dwFlagsvideohdr_tag::dwReservedDWORD %[4]PVideoOutputDevice_WindowPVideoOutputDeviceRGBPVideoOutputDevice_Window::PCLASSINFOPVideoOutputDevice_Window::PVideoOutputDevice_WindowPVideoOutputDevice_Window::~PVideoOutputDevice_WindowPVideoOutputDevice_Window::OpenPVideoOutputDevice_Window::IsOpenPVideoOutputDevice_Window::ClosePVideoOutputDevice_Window::StartPVideoOutputDevice_Window::StopPVideoOutputDevice_Window::GetOutputDeviceNamesPVideoOutputDevice_Window::GetDeviceNamesPVideoOutputDevice_Window::SetColourFormatPVideoOutputDevice_Window::GetVFlipStatePVideoOutputDevice_Window::SetVFlipStateBOOL newVFlipStatePVideoOutputDevice_Window::SetFrameSizePVideoOutputDevice_Window::FrameCompletePVideoOutputDevice_Window::WndProcPVideoOutputDevice_Window::PDECLARE_NOTIFIERHandleDisplayPVideoOutputDevice_Window::DrawHDC hDCPVideoOutputDevice_Window::m_hWndPVideoOutputDevice_Window::m_threadPVideoOutputDevice_Window::m_startedPVideoOutputDevice_Window::m_bitmapBITMAPINFOPVideoOutputDevice_Window::m_flippedPVideoInputDevice_VideoForWindowsPVideoInputDevice_VideoForWindows::PCLASSINFOPVideoInputDevice_VideoForWindows::PVideoInputDevice_VideoForWindowsPVideoInputDevice_VideoForWindows::~PVideoInputDevice_VideoForWindowsPVideoInputDevice_VideoForWindows::GetInputDeviceNamesPVideoInputDevice_VideoForWindows::GetDeviceNamesPVideoInputDevice_VideoForWindows::OpenPVideoInputDevice_VideoForWindows::IsOpenPVideoInputDevice_VideoForWindows::ClosePVideoInputDevice_VideoForWindows::StartPVideoInputDevice_VideoForWindows::StopPVideoInputDevice_VideoForWindows::IsCapturingPVideoInputDevice_VideoForWindows::SetColourFormatPVideoInputDevice_VideoForWindows::SetFrameRatePVideoInputDevice_VideoForWindows::SetFrameSizePVideoInputDevice_VideoForWindows::GetMaxFrameBytesPVideoInputDevice_VideoForWindows::GetFrameDataPVideoInputDevice_VideoForWindows::GetFrameDataNoDelayPVideoInputDevice_VideoForWindows::TestAllFormatsPVideoInputDevice_VideoForWindows::VerifyHardwareFrameSizePVideoInputDevice_VideoForWindows::PDECLARE_NOTIFIERHandleCapturePVideoInputDevice_VideoForWindows::ErrorHandlerint idLPCSTR errPVideoInputDevice_VideoForWindows::HandleErrorPVideoInputDevice_VideoForWindows::VideoHandlerLPVIDEOHDR vhPVideoInputDevice_VideoForWindows::HandleVideoPVideoInputDevice_VideoForWindows::InitialiseCapturePVideoInputDevice_VideoForWindows::captureThreadPVideoInputDevice_VideoForWindows::threadStartedPVideoInputDevice_VideoForWindows::hCaptureWindowPVideoInputDevice_VideoForWindows::frameAvailablePVideoInputDevice_VideoForWindows::lastFramePtrPVideoInputDevice_VideoForWindows::lastFrameSizePVideoInputDevice_VideoForWindows::lastFrameMutexPVideoInputDevice_VideoForWindows::isCapturingNowCAPSTATUSstruct tagCapStatusPVideoDeviceBitmapPVideoDeviceBitmap::PVideoDeviceBitmapWORD bppPVideoDeviceBitmap::ApplyFormatconst FormatTableEntry &formatTableEntryPVideoDeviceBitmap::operator ->BITMAPINFO *PDevicePluginServiceDescriptorLPCAPDRIVERCAPSstruct tagCapDriverCaps *tagCaptureParmstagCaptureParms::dwRequestMicroSecPerFrametagCaptureParms::fMakeUserHitOKToCapturetagCaptureParms::wPercentDropForErrortagCaptureParms::fYieldtagCaptureParms::dwIndexSizetagCaptureParms::wChunkGranularitytagCaptureParms::fUsingDOSMemorytagCaptureParms::wNumVideoRequestedtagCaptureParms::fCaptureAudiotagCaptureParms::wNumAudioRequestedtagCaptureParms::vKeyAborttagCaptureParms::fAbortLeftMousetagCaptureParms::fAbortRightMousetagCaptureParms::fLimitEnabledtagCaptureParms::wTimeLimittagCaptureParms::fMCIControltagCaptureParms::fStepMCIDevicetagCaptureParms::dwMCIStartTimetagCaptureParms::dwMCIStopTimetagCaptureParms::fStepCaptureAt2xtagCaptureParms::wStepCaptureAverageFramestagCaptureParms::dwAudioBufferSizetagCaptureParms::fDisableWriteCacheCAPTUREPARMSstruct tagCaptureParmsLPVIDEOHDRstruct videohdr_tag *PVideoOutputDevice_Window::HandleDisplayParseWindowDeviceNameDWORD *dwStylePtr = NULLHWND *hWndParentPtr = NULLPVideoOutputDevice_Window_descriptorPVideoOutputDevice_Window_PluginServiceDescriptorwinTestResTable%[]PVideoOutputDevice_Window_PluginServiceDescriptor::CreateInstancePVideoOutputDevice_Window_PluginServiceDescriptor::GetDeviceNamesPVideoOutputDevice_Window_PluginServiceDescriptor::ValidateDeviceNameFormatTableEntryFormatTableEntry::colourFormatFormatTableEntry::bitCountFormatTableEntry::negHeightFormatTableEntry::compressionG:\Storage\CVS_Head\pwlib\src\ptlib\common\videoio.cxxPVideoOutputDevice::CreateOpenedDeviceBOOL startImmediatePVideoDevice::GetContrastPVideoDevice::GetParametersint *whitenessint *brightnessint *colourint *contrastint *huePVideoDevice::GetWhitenessPVideoDevice::SetFrameSizeConverterBOOL bScaleNotCropPVideoOutputDevicePPM::ClosePVideoDevice::SetVideoChannelFormatint newNumberVideoFormat newFormatPVideoOutputDevicePPM::PVideoOutputDevicePPMPDevicePluginFactory::Worker::CreatePVideoOutputDevicePPM::OpenPVideoDevice::GetColourPVideoDevice::GetVFlipStatePVideoDevice::SetFrameRatePVideoDevice::GetMaxFrameBytesConvertedPINDEX rawFrameBytesPVideoDevice::CalculateFrameBytesvideoOutputPluginBaseClassloadVideoStuffPVideoInputDevice::GetDriversDeviceNamesPVideoDevice::GetFrameHeightPVideoDevice::VideoFormat fmtPVideoOutputDeviceRGB::SetFrameDataBOOL endFramePVideoOutputDevicePPM::IsOpenPVideoOutputDevice::CanCaptureVideoPVideoDevice::GetFrameSizevideoInputPluginBaseClassPVideoDevice::SetColourFormatconst PString &colourFmtPVideoDevice::StartPVideoInputDevice::GetDriverNamesPVideoOutputDeviceRGB::SetColourFormatPVideoDevice::~PVideoDevicePVideoDevice::GetNumChannelsPVideoDevice::SetWhitenessunsigned int newWhitenessPVideoDevice::StopPVideoOutputDeviceRGB::SetFrameSizePVideoInputDevice::CreateOpenedDevicePVideoOutputDevice::CreateDeviceByNamePVideoDevice::GetColourFormatPVideoDevice::GetFrameWidthPVideoDevice::GetFrameSizeLimitsframesizeTabPVideoInputDevice::CreateDeviceByNamePVideoDevice::OpenFullconst OpenArgs &argsPVideoOutputDevicePPM::GetDeviceNamesPVideoDevice::SetVFlipStateBOOL newVFlipPVideoDevice::SetHueunsigned int newHuePVideoDevice::GetFrameRatePVideoDevice::SetChannelint channelNumPVideoOutputDevice::CreateDevicePVideoDevice::SetColourFormatConverterPVideoOutputDevice::GetDriverNamesPVideoInputDevice::GetFramePVideoOutputDeviceRGB::PVideoOutputDeviceRGBPVideoInputDevice::CreateDevicePVideoOutputDevice::GetDriversDeviceNamesPDevicePluginFactory::Worker::CreatevidinChannelFactoryAdapterPFactory::Worker >vidoutChannelFactoryAdapterPFactory::Worker >PVideoDevice::PVideoDevicePVideoDevice::GetVideoFormatPVideoDevice::VideoFormatPVideoOutputDevice::PVideoOutputDevicePVideoDevice::SetContrastunsigned int newContrastPVideoDevice::SetFrameSizePVideoOutputDeviceRGB::GetMaxFrameBytesPVideoDevice::GetHuePVideoDevice::SetVideoFormatVideoFormat videoFmtPVideoOutputDevicePPM::EndFramecolourFormatBPPTabPVideoDevice::GetBrightnessPVideoDevice::ClosePVideoDevice::SetColourunsigned int newColourPVideoDevice::GetChannelPVideoInputDevice::CanCaptureVideoPVideoDevice::GetDeviceNamesPVideoDevice::SetBrightnessunsigned int newBrightnessG:\Storage\CVS_Head\pwlib\src\ptclib\vxml.cxxPVXMLSession::PlayTextconst PString &_textPTextToSpeech::TextType typePINDEX repeatPINDEX delayPVXMLPlayableData::OpenPVXMLChannel &chanPINDEX _delayPINDEX _repeatPVXMLSession::OnUserInputPVXMLChannel::FlushQueuePVXMLSession::GetXMLErrorPVXMLSession::CreateWAVFilePWAVFile *PFile::OpenMode modevxmlPlayableCommandFactoryPFactory::WorkerPVXMLPlayableData::RewindPVXMLChannel::QueueDataPVXMLSession::TraverseGotoPVXMLCache::PVXMLCacheconst PDirectory &_directoryPVXMLSession::PlayResourcePVXMLPlayableFilename::OnStopPVXMLChannel::QueueResourcePVXMLSession::PlayDataPVXMLSession::IsRecordingPVXMLChannel::IsOpenPVXMLSession::TraverseExitPVXMLChannelG7231PVXMLChannelPVXMLChannelG7231::PCLASSINFOPVXMLChannelG7231::PVXMLChannelG7231PVXMLChannelG7231::WriteFramePVXMLChannelG7231::ReadFramePVXMLChannelG7231::CreateSilenceFramePVXMLChannelG7231::IsSilenceFramePVXMLPlayableData::PlayPVXMLChannel &outgoingChannelPVXMLPlayableFilename::Openconst PString &_fnBOOL _autoDeletePVXMLSession::EndRecordingPVXMLSession::ProcessUserInputPVXMLSession::AllowClearCallPVXMLSession::PlayCommandconst PString &cmdPVXMLSession::PVXMLSessionPTextToSpeech *_ttsPVXMLPlayableFilename::PlayPVXMLSession::FindHandlerconst PString &eventPVXMLSession::SetPauseBOOL _pausePVXMLChannelG729PVXMLChannelG729::PCLASSINFOPVXMLChannelG729::PVXMLChannelG729PVXMLChannelG729::WriteFramePVXMLChannelG729::ReadFramePVXMLChannelG729::CreateSilenceFramePVXMLChannelG729::IsSilenceFramePVXMLSession::ProcessGrammarPVXMLDigitsGrammar::StopPVXMLSession::SayAsconst PString &classNamePVXMLRecordableFilename::OnFrameBOOL isSilencePVXMLCache::GetResourceCachePVXMLCache &PVXMLSession::OnEndRecordingPVXMLPlayableFilenameList::OnRepeatPVXMLSession::ConvertTextToFilenameListPStringArray &filenameListBOOL useCachePVXMLSession::StartRecordingPVXMLChannel::PVXMLChannelunsigned int _frameDelayPINDEX frameSizePVXMLChannelPCMPVXMLChannelPCM::PCLASSINFOPVXMLChannelPCM::PVXMLChannelPCMPVXMLChannelPCM::WriteFramePVXMLChannelPCM::ReadFramePVXMLChannelPCM::CreateSilenceFramePVXMLChannelPCM::IsSilenceFramePVXMLChannelPCM::GetBeepDataPVXMLSession::OpenBOOL isPCMPVXMLGrammar::PVXMLGrammarPXMLElement *_fieldPVXMLSession::TraverseMenuPVXMLSession::PlayFileconst PString &fnPVXMLSession::FindFormPVXMLChannel::WritePVXMLSession::LoadFilePVXMLPlayable::ReadFramePVXMLChannel &channelvoid *_bufPINDEX origLenPVXMLPlayableFilename::RewindPVXMLSession::TraverseTransferPVXMLPlayableCommand::OnStopPVXMLSession::EvaluateExprconst PString &oexprPVXMLCache::CreateFilenameconst PString &fileTypePVXMLPlayableFilenameList::OnStopPVXMLSession::IsPlayingPVXMLChannel::ClosePVXMLChannel::CreateWAVFileBOOL recordingPVXMLChannel::QueueRecordablePVXMLRecordable *newItemPVXMLChannel::StartRecordingunsigned int _finalSilenceunsigned int _maxDurationPVXMLSession::TraverseRecordvxmlPlayableFilenameListFactoryPFactory::WorkerPVXMLCache::GetPString &contentTypePFilePath &dataFnPVXMLPlayableCommand::PlayPVXMLSession::VXMLExecutePVXMLSession::TraverseGrammarPVXMLSession::LoadURLPVXMLPlayableFilenameList::Openconst PStringArray &_listPVXMLSession::TriggerPVXMLDigitsGrammar::OnUserInputconst char chPVXMLSession::LoadGrammarPVXMLGrammar *grammarg7231Lensconst PINDEX %[]PVXMLSession::RetreiveResourceGetContentTypePVXMLSession::InitialisePVXMLSession::TraverseVarPVXMLSession::GetBeepDataPVXMLPlayableURL::PlayPVXMLPlayableURL::Openconst PString &_urlPVXMLSession::SetTextToSpeechPTextToSpeech *const PString &ttsNamePVXMLSession::Loadconst PString &sourcePVXMLChannel::QueuePlayablePVXMLPlayable *newItemconst PString &argPVXMLChannel::AdjustWavFilenameconst PString &ofnPVXMLSession::TraversePropertyPVXMLSession::OnTransferconst PVXMLTransferResult &argsPVXMLRecordableFilename::RecordPVXMLCache::Putconst PString &contentTypePVXMLSession::ExecutevxmlPlayableDataFactoryPFactory::WorkerPVXMLSession::GetVarconst PString &ostrPVXMLPlayableCommand::PVXMLPlayableCommandPVXMLSession::TraverseAudiovxmlPlayableURLFactoryPFactory::WorkerPVXMLSession::TraverseSubmitPVXMLChannel::~PVXMLChannelPVXMLRecordableFilename::Openconst PString &_argPVXMLSession::LoadVXMLconst PString &xmlTextPVXMLSession::TraverseChoiceconst PString &grammarResultPVXMLSession::ClosebeepDatashort %[]PVXMLChannel::ReadPVXMLDigitsGrammar::PVXMLDigitsGrammarPINDEX _minDigitsPINDEX _maxDigitsPString _terminatorsPVXMLCache::GetRandomFilenamePVXMLPlayableData::SetDataconst PBYTEArray &_dataPVXMLChannel::OpenPVXMLChannelInterface *_vxmlInterfacePVXMLSession::SetVarconst PString &valPVXMLSession::ExecuteDialogPVXMLMenuGrammar::PVXMLMenuGrammarPVXMLSession::~PVXMLSessionvxmlPlayableFilenameFactoryPFactory::WorkerMD5AsHexPVXMLSession::NormaliseResourceNamePURLPVXMLSession::StringToTimePVXMLChannel::EndRecordingPVXMLSession::TraverseIfPVXMLSession::ProcessNodePVXMLSession::RecordEndPVXMLSession::PlaySilencePINDEX msecsG:\Storage\CVS_Head\pwlib\src\ptlib\msos\win32.cxx"../common/pglobalstatic.cxx"PThread::IsSuspendedPProcess::IsServiceProcessPDynaLink::PDynaLinkPDirectory::CopyContentsPWin32Overlapped::ResetPSyncPoint::SignalPSemaphore::WillBlockPProcess::GetOSNamePTime::GetTimeZoneStringTimeZoneType typePDynaLink::GetNamePDebugStream::Buffer::overflowPProcess::IsGUIProcessGetDivisorPThread::WaitForTerminationconst PTimeInterval &maxWaitPTime::IsDaylightSavingsPProcess::GetOSVersionPProcess::HouseKeepingThread::MainPProcess::SignalTimerChangePThread::Win32AttachThreadInputPDynaLink::IsLoadedPTime::GetTimeAMPMPTime::GetMonthNameMonths monthNameType typePThread::~PThreadPSemaphore::PSemaphoreconst PSemaphore &semunsigned int initialunsigned int maxCountHANDLE hPDirectory::NextPProcess::GetOSConfigDirPDynaLink::GetFunctionFunction &funcErrors lastErrorint osErrorPTime::GetTimeZoneErrors &lastErrorint &osErrorPProcess::GetProcessIDPDynaLink::~PDynaLinkPThread::PThreadPDebugStream::Buffer::BufferPTime::GetTimePMPThread::IsTerminatedPWin32Overlapped::~PWin32OverlappedPTimer::ResolutionPThread::CurrentPProcess::HouseKeepingThread::HouseKeepingThreadPThread::RestartPDirectory::Openint newScanMaskPTime::GetTimeAMPThread::InitialiseProcessThreadPDirectory::CreateFullPathBOOL isDirectoryPDynaLink::OpenPSemaphore::~PSemaphorePThread::GetPriorityPDebugStream::Buffer::underflowPProcess::GetGroupNamePThread::MainFunctionvoid *threadPtrPDirectory::GetEntryNamePDynaLink::ClosePTimer::TickPTimedMutex::SignalPThread::SetAutoDeletePDirectory::ConstructPDirectory::GetVolumeSpacePInt64 &totalPInt64 &freeDWORD &clusterSizePProcess::~PProcessPThread::TerminatePDebugStream::PDebugStreamPDirectory::GetVolumePProcess::GetOSClassPSemaphore::SignalIllegalFilenameCharactersPSemaphore::WaitPThread::YieldPTime::GetDateSeparatorPThread::ResumePDebugStream::Buffer::syncPThread::SetPriorityPProcess::GetOSHardwarePDynaLink::GetExtensionPThread::SuspendBOOL suspPTimedMutex::PTimedMutexconst PTimedMutex &PTime::GetDayNameWeekdays dayOfWeekPDirectory::ClosePSyncPoint::PSyncPointconst PSyncPoint &PProcess::GetUserNamePFilePath::IsValidPDirectory::IsSubDirPProcess::SetUserNamePTime::GetDateOrderPTime::DateOrderPTime::GetTimeSeparatorGetDiskFreeSpaceExTypeBOOL (__stdcall *%)(LPCTSTR,PULARGE_INTEGER,PULARGE_INTEGER,PULARGE_INTEGER)PWIN32GetLocaleInfoLCID LocaleLCTYPE LCTypeLPSTR lpLCDataint cchDataPWin32Overlapped::PWin32OverlappedPProcess::SetGroupNameconst PString &groupnameG:\Storage\CVS_Head\pwlib\src\ptlib\msos\wincfg.cxxRegistryKey::~RegistryKeyRegistryKey::DeleteKeyconst PString &subkeyIsRegistryPathPConfig::DeleteKeyPProcess::GetConfigurationFileRecurseRegistryKeysconst PString &locationPINDEX baseLengthPStringList §ionsRegistryKey::EnumValueCurrentUserStrRegistryKey::QueryValueDWORD &numBOOL booleanSecureCreateKeyHKEY rootKeyHKEY &keyPConfig::GetSectionsLocalMachineStrPConfig::ConstructSource srcconst PString &appnameconst PString &manufRegistryKey::SetValueDWORD numPConfig::GetStringPConfig::SetStringRegistryKey::RegistryKeyconst PString &subkeynamePConfig::DeleteSectionSecurityIDSecurityID::SecurityIDLPCTSTR lpSystemNameLPCTSTR lpAccountNameLPTSTR ReferencedDomainNameLPDWORD cbReferencedDomainNamePSID_NAME_USE peUsePSID_IDENTIFIER_AUTHORITY pIdentifierAuthorityBYTE nSubAuthorityCountDWORD dwSubAuthority0DWORD dwSubAuthority1DWORD dwSubAuthority2DWORD dwSubAuthority3DWORD dwSubAuthority4DWORD dwSubAuthority5DWORD dwSubAuthority6DWORD dwSubAuthority7SecurityID::~SecurityIDSecurityID::operator PSIDPSIDSecurityID::GetLengthSecurityID::IsValidSecurityID::sidptrPGetPrivateProfileStringconst char *lpFileNameRegistryKey::EnumKeyPConfig::GetKeysRegistryKey::DeleteValuePConfig::HasKeyG:\Storage\CVS_Head\pwlib\src\ptlib\msos\winsock.cxxPSocket::os_socketAssignAddressPIPXSocket::Address &addrconst sockaddr_ipx &sipsockaddr_ipx &sipconst PIPXSocket::Address &addrPSocket::os_sendtosockaddr *toPINDEX tolenP_fd_set::ConstructPIPXSocket::GetHostAddressAddress &PWinSock::OpenSocketPIPSocket::IsLocalHostPWinSock::~PWinSockPSocket::os_recvfromsockaddr *fromPINDEX *fromlenPSocket::ReadPUDPSocket::SupportQoSconst PIPSocket::Address &addressPSPXSocket::GetProtocolNamePSocket::os_acceptPSocket &listenersockaddr *addrint *sizePIPXSocket::OpenSocketPIPSocket::Address::Byte2PIPSocket::Address::Byte3PIPSocket::Address::Byte1PIPSocket::Address::Byte4PWinQoS::PWinQoSPQoS &pqoschar *inBufDWORD &bufLenPIPXSocket::WriteToPIPXSocket::Address::operator =PIPXSocket::Address &BYTE b1BYTE b2BYTE b3BYTE b4PIPXSocket::ConnectPSocket::WritePUDPSocket::EnableGQoSPUDPSocket::disableGQoSPSocket::os_connectPIPXSocket::Address::IsValidPIPXSocket::Address::AddressDWORD netNumconst char *nodeNumPSPXSocket::AcceptPIPXSocket::Address::operator PStringPIPXSocket::GetLocalAddressPIPXSocket::GetProtocolNamePWinSock::PWinSockPIPXSocket::GetHostNameP_IsOldWin95PSPXSocket::OpenSocketPSocket::ConvertOSErrorPIPXSocket::GetNamePIPXSocket::PIPXSocketPIPSocket::Address::operator DWORDP_fd_set::ZeroPWinSock::GetProtocolNamePIPXSocket::SetPacketTypePSPXSocket::PSPXSocketPSocket::os_closePSocket::~PSocketsockaddrPSPXSocket::ListenPIPXSocket::ReadFromPIPXSocket::GetPacketTypePSocket::ClosePIPXSocket::GetPeerAddressPIPXSocket::ListenPWinQoS::~PWinQoSG:\Storage\CVS_Head\pwlib\src\ptclib\asner.cxx"asnper.cxx""asnber.cxx""asnxer.cxx"PASN_ObjectId::CommonDecodePASN_BitString::DecodePASN_Sequence::PrintOnPASN_Enumeration::DecodePASN_OctetString::PrintOnPASN_Choice::GetTypeAsStringPASN_VisibleString::PASN_VisibleStringTagClass tagClassPASN_BitString::operator []PINDEX bitPASN_Boolean::EncodePASN_Null::PASN_NullPASN_Stream::ResetDecoderPASN_Real::GetDataLengthMaximumStringSizePASN_NumericString::ClonePASN_Stream::BeginEncodingPASN_Boolean::PrintOnPASN_BitString::SetDataunsigned int nBitsconst BYTE *bufPASN_Object::GetObjectLengthPASN_Choice::PrintOnPASN_Integer::DecodePASN_UniversalTime::GetValuePASN_OctetString::SetSizePASN_Array::EncodePASN_Real::PrintOnPASN_Array::PrintOnPASN_Array::GetTypeAsStringPASN_VisibleString::operator =PASN_VisibleString &PASN_OctetString::operator =const PBYTEArray &arrconst PASN_OctetString &otherPASN_Sequence::PreambleDecodePASN_OctetString::EncodePASN_IA5String::operator =PASN_IA5String::GetTypeAsStringPASN_ObjectId::GetTypeAsStringPASN_Choice::EncodePASN_Enumeration::PrintOnPASN_Choice::GetObjectPASN_ObjectId::PASN_ObjectIdconst PASN_ObjectId &otherconst char *dotstrPASN_ObjectId::GetDataLengthPASN_NumericString::GetTypeAsStringPASN_Null::ComparePASN_BitString::PrintOnPASN_OctetString::SetConstraintBoundsConstraintType typeint lowerunsigned int upperPASN_Sequence::KnownExtensionDecodePINDEX fldPASN_Object &fieldPASN_Sequence::operator =PASN_Sequence &const PASN_Sequence &otherPASN_Integer::PrintOnPASN_BitString::SetConstraintBoundsPASN_BitString::PASN_BitStringconst PASN_BitString &otherPASN_ObjectId::DecodePASN_Object::SetCharacterSetConstraintTypePASN_Object::GetMaximumStringSizePASN_GeneralString::PASN_GeneralStringPASN_PrintableString::operator =PASN_PrintableString &PASN_IA5String::ClonePASN_OctetString::ClonePASN_ObjectId::PrintOnPASN_Integer::PASN_Integerunsigned int valNumericStringSetPASN_Object::GetMaximumArraySizePASN_Null::GetTypeAsStringPASN_Sequence::PASN_Sequenceunsigned int nOptsBOOL extendunsigned int nExtendPASN_Sequence::GetTypeAsStringPASN_Boolean::GetTypeAsStringPASN_Set::PASN_SetPASN_ConstrainedString::operator =PASN_ConstrainedString &PASN_ConstrainedString::PASN_ConstrainedStringconst char *canonicalPASN_Enumeration::GetDataLengthPASN_Set::GetTypeAsStringPASN_Choice::IsPrimitivePASN_Choice::GetTagNamePASN_Sequence::EncodePASN_Integer::GetDataLengthPASN_Array::IsPrimitivePASN_ObjectId::operator ==PASN_Object::SetMaximumStringSizePASN_OctetString::DecodeGeneralStringSetPASN_BMPString::operator =PASN_BMPString &const PWORDArray &arrayconst PASN_BMPString &otherPASN_Sequence::IsPrimitivePASN_Enumeration::ClonePASN_Stream::PrintOnPASN_OctetString::PASN_OctetStringPASN_GeneralisedTime::operator =PASN_GeneralisedTime &PASN_BitString::GetDataLengthPrintableStringSetPASN_BitString::Invertunsigned int bitPASN_Boolean::GetDataLengthPASN_ConstrainedString::DecodePASN_Sequence::ComparePASN_Real::DecodePASN_Stream::BlockDecodeBYTE *bufptrunsigned int nBytesPASN_Enumeration::GetValueByNamePString namePASN_Object::SetMaximumArraySizePASN_GeneralString::operator =PASN_GeneralString &PASN_BMPString::CloneCheckByteOffsetPINDEX upper = MaximumStringSizePASN_Real::ClonePASN_UniversalTime::operator =PASN_UniversalTime &PASN_BMPString::ConstructPASN_NumericString::PASN_NumericStringPASN_Integer::SetConstraintBoundsPASN_BMPString::GetDataLengthPASN_BMPString::PrintOnPASN_Sequence::UnknownExtensionsDecodePASN_BMPString::DecodePASN_Integer::ClonePASN_Null::ClonePASN_Stream::ByteDecodePASN_ObjectId::ClonePASN_ConstrainedString::CompareCountBitsPASN_IA5String::PASN_IA5StringPASN_BitString::SetPASN_Sequence::ClonePASN_BMPString::IsLegalCharacterWORD chPASN_Stream::CompleteEncodingPASN_Integer::ComparePASN_OctetString::GetDataLengthPASN_ConstrainedObject::SetConstraintBoundsConstraintType ctypePASN_Stream::ByteAlignPASN_ConstrainedString::SetConstraintBoundsPASN_BitString::EncodeIA5StringSetPASN_Integer::GetTypeAsStringPASN_Null::EncodePASN_Array::PASN_Arrayconst PASN_Array &otherPASN_ObjectId::CommonEncodePBYTEArray &encodecObjectIdPASN_Sequence::DecodePASN_Enumeration::EncodePASN_Set::ClonePASN_Stream::ConstructPASN_Enumeration::ComparePASN_Enumeration::GetTypeAsStringPASN_Array::DecodePASN_ObjectId::ComparePASN_BitString::ComparePASN_Real::PASN_Realdouble valPASN_BitString::ClonePASN_OctetString::GetTypeAsStringPASN_VisibleString::GetTypeAsStringPASN_Sequence::RemoveOptionalFieldPINDEX optPASN_GeneralString::GetTypeAsStringMaximumSetSizePASN_Sequence::UnknownExtensionsEncodePASN_Sequence::HasOptionalFieldPASN_Stream::PASN_StreamPASN_Choice::DecodePASN_Integer::IsUnsignedPASN_Choice::PASN_Choiceconst PASN_Choice &otherconst PASN_Names *nameSpecunsigned int namesCntunsigned int nChoicesPASN_Boolean::ComparePASN_PrintableString::ClonePASN_GeneralString::ClonePASN_BitString::ClearPASN_Choice::~PASN_ChoicePASN_Real::GetTypeAsStringPASN_ObjectId::EncodePASN_Array::operator =PASN_Array &PASN_Sequence::KnownExtensionEncodeconst PASN_Object &fieldPASN_Array::CompareGetIntegerDataLengthPASN_ConstrainedString::GetDataLengthPASN_Null::PrintOnPASN_Enumeration::PASN_Enumerationunsigned int maxEnumPASN_ObjectId::operator =const PUnsignedArray &numbersconst PString &dotstrPASN_Array::SetConstraintBoundsPASN_ConstrainedString::SetCharacterSetconst char *setPINDEX setSizeunsigned int firstCharunsigned int lastCharPASN_Choice::CompareFindNameByValueconst PASN_Names *namesunsigned int namesCountVisibleStringSetPASN_NumericString::operator =PASN_NumericString &PASN_BitString::SetSizePASN_ObjectId::AsStringMaximumArraySizePASN_Object::SetConstraintBoundsPASN_Sequence::IncludeOptionalFieldPASN_Boolean::PASN_BooleanPASN_BitString::GetTypeAsStringPASN_BMPString::GetTypeAsStringPASN_ConstrainedString::PrintOnPASN_ConstrainedString::EncodePASN_Choice::CheckCreatePASN_PrintableString::GetTypeAsStringPASN_Choice::SetTagunsigned int newTagPASN_BMPString::EncodePASN_GeneralisedTime::GetValuePASN_BMPString::ComparePASN_PrintableString::PASN_PrintableStringPASN_BMPString::SetCharacterSetunsigned int firstunsigned int lastconst PWORDArray &charSetconst char *charSetPASN_ObjectId::SetValueconst unsigned int *numbersPASN_Array::GetDataLengthPASN_BMPString::PASN_BMPStringconst PWORDArray &wstrPASN_BitString::operator =PASN_BitString &PASN_Choice::GetDataLengthPASN_Stream::SetPositionPINDEX newPosPASN_Integer::EncodePASN_Stream::BlockEncodeconst BYTE *bufptrPINDEX nBytesPASN_Stream::ByteEncodeunsigned int valuePASN_Real::EncodePASN_Integer::operator =PASN_OctetString::SetValuePASN_Object::PASN_Objectunsigned int theTagTagClass theTagClassPASN_OctetString::AsStringPASN_Sequence::PreambleEncodePASN_Boolean::DecodePASN_Object::SetTagTagClass tagClass_PASN_ConstrainedObject::PASN_ConstrainedObjectPASN_Choice::operator =PASN_Real::ComparePASN_Sequence::GetDataLengthPASN_Boolean::ClonePASN_Array::SetSizePASN_Null::DecodePASN_VisibleString::ClonePASN_OctetString::ComparePASN_Null::GetDataLengthPASN_Choice::GetValueByNameG:\Storage\CVS_Head\pwlib\src\ptclib\cypher.cxxPTEACypher::DecodeBlockconst void *invoid *outPBase64::PBase64PMessageDigest5::EncodeCode &codeResultCode &resultResult &resultPMessageDigest::PMessageDigestPSecureConfig::ValidatePendingPSecureConfig::GetValidationPSecureConfig::ValidationStatePMessageDigest5::PMessageDigest5PBase64::GetDecodedDatavoid *dataBlockPMessageDigestSHA1::PMessageDigestSHA1PBase64::CompleteEncodingDefaultSecuredOptionsPTEACypher::PTEACypherconst Key &keyDataBlockChainMode chainModePBase64::EncodePMessageDigestSHA1::~PMessageDigestSHA1PTEACypher::InitialiseDefaultOptionBitsKeyPCypher::PCypherconst void *keyDataPINDEX keyLengthPINDEX blkSizeBlockChainMode modePSecureConfig::GetProductKeyPTEACypher::Key &prodKeyPTEACypher::EncodeBlockPCypher::EncodePBYTEArray &codedconst PBYTEArray &clearPMessageDigestSHA1::InternalCompleteDigestPBase64::ProcessEncodingconst void *dataPtrTEADeltaconst DWORDBinary2Base64const char %[65]PMessageDigest::CompleteDigestPMessageDigest5::InternalCompleteDigestPMessageDigest5::CompleteDefaultPendingPrefixPMessageDigest5::InternalProcessPBase64::StartDecodingPMessageDigest5::Transformconst BYTE *blockDefaultExpiryDateKeyPSecureConfig::ResetPendingPBase64::DecodePMessageDigestSHA1::EncodePTEACypher::GenerateKeyKey &newKeyPBase64::StartEncodingBOOL useCRLFPTEACypher::GetKeyPMessageDigestSHA1::StartPSecureConfig::PSecureConfigconst PTEACypher::Key &prodKeyconst char *const *secKeysconst PStringArray &secKeysPTEACypher::SetKeyconst Key &newKeyPMessageDigestSHA1::InternalProcessPCypher::Decodeconst PBYTEArray &codedPBYTEArray &clearconst PString &cypherPString &clearPBase64::GetEncodedStringPBase64::ProcessDecodingDefaultSecurityKeyPBase64::OutputBase64PMessageDigest::Processconst void *dataBlockPMessageDigest5::StartG:\Storage\CVS_Head\pwlib\src\ptclib\dtmf.cxxPDTMFEncoder::DtmfCharPDTMFEncoder::AddTonedouble f1double f2char digitPTones::Generatechar operationunsigned int frequency1unsigned int frequency2const PString &descriptorPDTMFEncoder::PDTMFEncoderconst char *dtmfPDTMFDecoder::PDTMFDecoderPDTMFDecoder::Decodeconst short *sampleDataPINDEX numSamplesPTones::SilencePTones::PTonesPTones::PureTonePTones::CalcSamplesunsigned int f1unsigned int f2sineint anglePTones::Modulateunsigned int modulatorPTones::AddSamplePTones::JuxtaposeG:\Storage\CVS_Head\pwlib\src\ptclib\http.cxxPURL::SetPathStrwaisFactoryPFactory::WorkernewsFactoryPFactory::Workerh323sFactoryPFactory::WorkerrtspFactoryPFactory::WorkerPHTTP::LastModifiedTagPHTTP::CookieTagPHTTP::WWWAuthenticateTagh323FactoryPFactory::WorkerPHTTP::ChunkedTaggopherFactoryPFactory::WorkerPURLLegacyScheme_mailtoPURLLegacySchemePURLLegacyScheme_mailto::PURLLegacyScheme_mailtoPHTTP::PragmaNoCacheTagPHTTP::AllowTagPHTTP::ForwardedTagprosperoFactoryPFactory::WorkertelFactoryPFactory::WorkerPURL::GetParametersPHTTP::DateTagfaxFactoryPFactory::WorkerfileFactoryPFactory::WorkerftpFactoryPFactory::WorkerPHTTP::FromTagPURLLegacyScheme_sipsPURLLegacyScheme_sips::PURLLegacyScheme_sipsmailtoFactoryPFactory::WorkerPHTTP::PragmaTagrtspuFactoryPFactory::WorkerPHTTP::ConnectionTagPHTTP::AuthorizationTagPHTTP::PHTTPPHTTP::KeepAliveTagPURL::TranslateStringTranslationType typesipsFactoryPFactory::WorkerPURL::InternalParseconst char *defaultSchemePURL::GetQueryPURL::SetParametersconst PString ¶metersPURL::SetUserNamePHTTP::ExpiresTagPURLLegacyScheme_httpsPURLLegacyScheme_https::PURLLegacyScheme_httpsPHTTP::TransferEncodingTagnntpFactoryPFactory::WorkerPURLLegacyScheme_waisPURLLegacyScheme_wais::PURLLegacyScheme_waisPURLLegacyScheme_h323PURLLegacyScheme_h323::PURLLegacyScheme_h323PHTTP::ContentLengthTagPURLLegacyScheme_rtspPURLLegacyScheme_rtsp::PURLLegacyScheme_rtspPHTTP::ParseResponseconst PString &linePURL::SplitQueryVarsconst PString &queryStrPStringToString &queryVarsPURLLegacyScheme_filePURLLegacyScheme_file::PURLLegacyScheme_filePURL::SetSchemeconst PString &sPURLLegacyScheme_nntpPURLLegacyScheme_nntp::PURLLegacyScheme_nntpPURL::SetQueryVarPURL::OpenBrowserPURL::AsStringUrlFormat fmtPHTTP::ProxyConnectionTagPURLLegacyScheme_prosperoPURLLegacyScheme_prospero::PURLLegacyScheme_prosperoPURL::RecalculatePURL::HashFunctionPURL::SetPortPHTTP::ContentTypeTaghttpFactoryPFactory::WorkerPURL::SetHostNameconst PString &hPURL::ReadFromPHTTP::RefererTagPURLLegacyScheme_gopherPURLLegacyScheme_gopher::PURLLegacyScheme_gopherPHTTP::IfModifiedSinceTagPHTTP::UserAgentTagPURL::SetParamVarsconst PStringToString &pPURLLegacyScheme_sipPURLLegacyScheme_sip::PURLLegacyScheme_sipPURLLegacyScheme_telPURLLegacyScheme_tel::PURLLegacyScheme_telPHTTP::SetCookieTagsipFactoryPFactory::WorkerPURLLegacyScheme_rtspuPURLLegacyScheme_rtspu::PURLLegacyScheme_rtspuPURL::PrintOnhttpsFactoryPFactory::WorkerHTTPCommandsconst char *const %[PHTTP::NumCommands]PURLLegacyScheme_calltoPURLLegacyScheme_callto::PURLLegacyScheme_calltoSplitVarsPStringToString &varschar sep1char sep2PURL::SetQueryPURL::PURLconst PFilePath &filePathPURL::LegacyAsStringPURL::UrlFormat fmtconst PURLLegacyScheme *schemeInfoPHTTP::ServerTagPURL::ComparePURLLegacyScheme_httpPURLLegacyScheme_http::PURLLegacyScheme_httptelnetFactoryPFactory::WorkerPURLLegacyScheme_telnetPURLLegacyScheme_telnet::PURLLegacyScheme_telnetcalltoFactoryPFactory::WorkerPURL::LegacyParsePHTTP::ProxyAuthenticateTagPHTTP::ContentEncodingTagPURLLegacyScheme_h323sPURLLegacyScheme_h323s::PURLLegacyScheme_h323sPURL::SetQueryVarsconst PStringToString &qPURL::AsFilePathPURLLegacyScheme_faxPURLLegacyScheme_fax::PURLLegacyScheme_faxPURL::SetParamVarPHTTP::MIMEVersionTagPURL::SetPasswordPHTTP::ProxyAuthorizationTagPURL::SetPathconst PStringArray &pPHTTP::LocationTagPURLLegacyScheme_ftpPURLLegacyScheme_ftp::PURLLegacyScheme_ftpPURL::UntranslateStringPURLLegacyScheme_newsPURLLegacyScheme_news::PURLLegacyScheme_newsG:\Storage\CVS_Head\pwlib\src\ptclib\inetprot.cxxPInternetProtocol::WriteCommandPINDEX cmdNumberconst PString ¶mPInternetProtocol::ReadCRLFPInternetProtocol::ConnectPInternetProtocol::ReadResponseint &codePString &infoPMIMEInfo::GetIntegerPInternetProtocol::PInternetProtocolconst char *svcNamePINDEX cmdCountconst char *const *cmdNamesPInternetProtocol::ReadLineBOOL allowContinuationPInternetProtocol::WritePMIMEInfo::GetStringPInternetProtocol::SetReadLineTimeoutPMIMEInfo::SetAssociationconst PStringToString &allTypesBOOL mergePInternetProtocol::UnReadPInternetProtocol::GetSocketPIPSocket *PMIMEInfo::AddMIMEconst PString &fieldNameconst PString &_fieldValuePInternetProtocol::GetLastResponseCodePMIMEInfo::PrintOnPMIMEInfo::ReadPInternetProtocol &socketPMIMEInfo::GetContentTypesPStringToString &PInternetProtocol::ParseResponsePInternetProtocol::GetLastResponseInfoPInternetProtocol::AcceptPMIMEInfo::SetIntegerPInternetProtocol::WriteResponseconst PString &codePMIMEInfo::PMIMEInfoPMIMEInfo::ReadFromPInternetProtocol::ExecuteCommandPINDEX cmdPMIMEInfo::GetContentTypeconst PString &fTypePInternetProtocol::WriteLinePInternetProtocol::GetDefaultServicePMIMEInfo::WritePInternetProtocol::AttachSocketPIPSocket *socketDefaultContentTypesconst PStringToString::Initialiser %[]PInternetProtocol::ReadCommandPINDEX &numPString &argsG:\Storage\CVS_Head\pwlib\src\ptclib\pasn.cxxPASNSequence::GetSequenceconst PASNSequence &PASNObject::EncodeASNIntegerPASNInt dataPASNObject::ASNType typePASNUnsignedInteger::EncodePASNObject::ASNType theTypePASNTimeTicks::GetTypeAsStringPASNSequence::PrintOnPASNString::Decodeconst PBYTEArray &bufferPINDEX &ptrPASNInteger::PASNIntegerPASNInt valPASNUnsignedInteger::GetUnsignedPASNUnsignedPASNObject::PASNObjectPASNNull::GetTypePASNObject::ASNTypePASNIPAddress::GetIPAddressPASNObject::DecodeASNLengthWORD &lenPASNObjectID::PrintOnPASNObject::GetIntegerPASNIntPASNSequence::GetTypeAsStringPASNObject::ClonePASNInteger::ClonePASNObject::GetTypePASNString::GetStringPASNObject::ASNTypeToTypeBYTE %[]PASNObjectID::PASNObjectIDPASNOid *valBYTE theLenPASNInteger::GetStringPASNNull::PASNNullPASNSequence::AppendPASNObject *objPASNSequence::EncodePINDEX maxLenPASNInteger::GetEncodedLengthPASNObject::GetIPAddressPASNSequence::operator []PASNObject &PASNSequence::AppendIntegerPASNInt valuePASNIPAddress::GetTypeAsStringPASNObjectID::EncodePASNSequence::GetChoicePASNString::PrintOnPASNSequence::PASNSequenceBYTE selectorPASNObjectID::GetEncodedLengthPASNSequence::GetEncodedLengthPASNObject::GetEncodedLengthPASNObjectID::GetStringPASNString::GetEncodedLengthPASNSequence::AppendStringPASNString::PASNStringconst BYTE *ptrPASNInteger::PrintOnPASNObject::DecodeASNUnsignedPASNUnsigned &valuePASNNull::ClonePASNUnsignedInteger::GetEncodedLengthPASNSequence::GetTypePASNObject::GetStringPASNObject::GetASNSequenceStartLengthWORD lengthPASNObject::GetASNUnsignedLengthPASNUnsigned dataPASNString::GetTypeAsStringPASNUnsignedInteger::DecodePASNObject::GetASNIntegerLengthcannotPerformOnBaseTypeMsgPASNObject::EncodeASNHeaderPASNNull::PrintOnPASNInteger::GetTypePASNInteger::EncodePASNObject::GetASNLengthLengthPASNString::GetTypePASNObject::EncodeASNLengthPASNObjectID::GetTypePASNObject::PrintOnPASNObject::DecodeASNIntegerPASNInt &valuePASNNull::EncodePASNNull::GetTypeAsStringPASNObject::GetASNHeaderLengthPASNInteger::GetTypeAsStringPASNSequence::AppendObjectIDBYTE lenPASNNull::GetEncodedLengthPASNUnsignedInteger::GetStringPASNObjectID::GetTypeAsStringPASNString::ClonePASNInteger::GetIntegerPASNObject::EncodeASNSequenceStartBYTE typePASNNull::GetStringPASNObject::GetTypeAsStringPASNSequence::GetSizePASNObjectID::DecodePINDEX &offsPASNObject::GetSequencePASNSequence::DecodePASNUnsignedInteger::PrintOnPASNString::EncodePASNGauge::GetTypeAsStringPASNIPAddress::PASNIPAddressPASNObject::EncodeASNUnsignedPASNObject::GetUnsignedPASNIPAddress::GetStringPASNObjectID::ClonePASNCounter::GetTypeAsStringPASNObject::EncodeG:\Storage\CVS_Head\pwlib\src\ptclib\pstun.cxxPSTUNClient::IsSupportingRTPPSTUNClient::RTPSupportTypesPSTUNClient::IsAvailablePSTUNChangeRequestPSTUNAttributePSTUNAttribute::TypesPSTUNAttribute::typePUInt16bPSTUNAttribute::lengthPSTUNAttribute::GetNextPSTUNAttribute *PSTUNChangeRequest::flagsBYTE %[4]PSTUNChangeRequest::PSTUNChangeRequestbool changeIPbool changePortPSTUNChangeRequest::InitialisePSTUNChangeRequest::IsValidPSTUNChangeRequest::GetChangeIPPSTUNChangeRequest::SetChangeIPbool onPSTUNChangeRequest::GetChangePortPSTUNChangeRequest::SetChangePortPSTUNMappedAddressPSTUNAddressAttributePSTUNAddressAttribute::padPSTUNAddressAttribute::familyPSTUNAddressAttribute::portPSTUNAddressAttribute::ipPSTUNAddressAttribute::GetIPPSTUNAddressAttribute::InitAddrAttrenum PSTUNAttribute::Types newTypePSTUNAddressAttribute::IsValidAddrAttrenum PSTUNAttribute::Types checkTypePSTUNMappedAddress::InitialisePSTUNMappedAddress::IsValidPSTUNClient::PSTUNClientWORD portPairBaseWORD portPairMaxPSTUNClient::CreateSocketPairPUDPSocket *&socket1PUDPSocket *&socket2PSTUNChangedAddressPSTUNChangedAddress::InitialisePSTUNChangedAddress::IsValidPSTUNUDPSocket::PSTUNUDPSocketPSTUNClient::GetServerPSTUNClient::GetNatTypeStringNatTypes typePSTUNClient::InitialisePSTUNUDPSocket::GetLocalAddressPSTUNClient::SetServerPSTUNClient::OpenSocketPortInfo &portInfoPSTUNClient::GetExternalAddressPIPSocket::Address &externalAddressconst PTimeInterval &maxAgePSTUNMessageHeaderPSTUNMessageHeader::msgTypePSTUNMessageHeader::msgLengthPSTUNMessageHeader::transactionIdBYTE %[16]PSTUNMessagePSTUNMessage::MsgTypePSTUNMessage::PSTUNMessageenum PSTUNMessage::MsgType newTypeconst BYTE *id = NULLPSTUNMessage::SetTypePSTUNMessage::operator ->const PSTUNMessageHeader *PSTUNMessage::GetFirstAttributePSTUNMessage::ValidatePSTUNMessage::AddAttributeconst PSTUNAttribute &attributePSTUNMessage::SetAttributePSTUNMessage::FindAttributeenum PSTUNAttribute::Types typePSTUNMessage::ReadPSTUNMessage::WritePSTUNMessage::Pollconst PSTUNMessage &requestPINDEX pollRetriesPSTUNClient::CreateSocketPUDPSocket *&socketPSTUNClient::GetNatTypePSTUNClient::NatTypesPSTUNMessageIntegrityPSTUNMessageIntegrity::hmacBYTE %[20]PSTUNMessageIntegrity::InitialisePSTUNMessageIntegrity::IsValidG:\Storage\CVS_Head\pwlib\src\ptclib\pwavfile.cxxPWAVFile::ClosePWAVFile::GetSampleSizePWAVFile::~PWAVFileWriteAndCheckWAVLabelFMT_const char %[4]G7231ExtendedInfoG7231ExtendedInfo::__attribute__PWAVFile::SetSampleSizePWAVFile::RawSetPositionPWAVFileFormatG7231PWAVFileFormatPWAVFileFormatG7231::PWAVFileFormatG7231unsigned short _g7231PWAVFileFormatG7231::~PWAVFileFormatG7231PWAVFileFormatG7231::CreateHeaderPWAV::FMTChunk &wavFmtChunkPBYTEArray &extendedHeaderPWAVFileFormatG7231::WriteExtraChunksPWAVFileFormatG7231::GetFormatStringPWAVFileFormatG7231::OnStartPWAVFileFormatG7231::ReadPWAVFileFormatG7231::WritePWAVFileFormatG7231::g7231PWAVFileFormatG7231::cacheBufferBYTE %[24]PWAVFileFormatG7231::cacheLenPWAVFileFormatG7231::cachePosPWAVFile::PWAVFileconst PString &formatPWAVFileFormatG7231_vivoPWAVFileFormatG7231_vivo::PWAVFileFormatG7231_vivoPWAVFileFormatG7231_vivo::~PWAVFileFormatG7231_vivoPWAVFileFormatG7231_vivo::GetFormatPWAVFileFormatG7231_vivo::GetDescriptionPWAVFile::GetSampleRatePWAVFile::FileWritePWAVFile::UpdateHeaderPWAVFileConverterPCMPWAVFileConverterPCM::~PWAVFileConverterPCMPWAVFileConverterPCM::GetFormatPWAVFileConverterPCM::GetPositionPWAVFileConverterPCM::SetPositionPWAVFileConverterPCM::GetSampleSizePWAVFileConverterPCM::GetDataLengthPWAVFileConverterPCM::ReadPWAVFileConverterPCM::WritePWAVFile::RawGetDataLengthPWAVFile::formatg7231FormatWAVFormatPWAVFileFormatByFormatFactory::WorkerPWAVFile::SetSampleRatePWAVFileFormat::ReadG7231FACTChunkG7231FACTChunk::hdrPWAV::ChunkHeaderG7231FACTChunk::__attribute__PWAVFile::SetPositionPWAVFile::GenerateHeaderPWAVFileFormatPCMPWAVFileFormatPCM::~PWAVFileFormatPCMPWAVFileFormatPCM::CreateHeaderPWAVFileFormatPCM::GetDescriptionPWAVFileFormatPCM::GetFormatPWAVFileFormatPCM::GetFormatStringPWAVFileFormatPCM::ReadPWAVFileFormatPCM::WritePWAVFileFormatG7231_msPWAVFileFormatG7231_ms::PWAVFileFormatG7231_msPWAVFileFormatG7231_ms::~PWAVFileFormatG7231_msPWAVFileFormatG7231_ms::GetFormatPWAVFileFormatG7231_ms::GetDescriptionG7231FrameSizesPINDEX %[4]WAVLabelRIFFPWAVFile::GetChannelsWAVLabelDATAWAVLabelFACTPWAVFile::RawWritePWAVFile::RawReadPWAVFile::OpenPWAVFile::GetHeaderLengthPWAVFile::ReadPWAVFile::SelectFormatPWAVFile::WritePWAVFile::SetFormatPWAVFile::ConstructPWAVFile::GetFormatWAVLabelWAVEPWAVFile::GetDataLengthPWAVFile::ProcessHeaderReadAndCheckPWAVFile::GetFormatAsStringNeedsConverterconst PWAV::FMTChunk &fmtChunkPWAVFile::GetPositionPWAVFile::FileReadpcmFormatWAVFormatPWAVFileFormatByFormatFactory::WorkerPWAVFile::SetAutoconvertPWAVFile::RawGetPositionPWAVFile::SetChannelsPWAVFileFormat::WriteG:\Storage\CVS_Head\pwlib\src\ptclib\random.cxxPRandom::PRandomDWORD seedPRandom::GeneratePRandom::SetSeedPRandom::NumbermutexG:\Storage\CVS_Head\pwlib\src\ptlib\common\regex\regcomp.c"utils.h""regex2.h""cclass.h""cname.h""regcomp.ih"valuesopfromcegre_guts *pparse *cflagsneverstartsopnoposc1c2finishchcpcscset *parseparse::nextparse::endparse::errorparse::stripsop *parse::ssizeparse::slenparse::ncsallocparse::gparse::pbeginsopno %[NPAREN]parse::pendoptoopndnulschar %[10]pregregex_t *sizestarordinaryend1end2re_gutsendcstoppatternG:\Storage\CVS_Head\pwlib\src\ptlib\common\regex\regerror.c"regerror.ih"rerrsrerr %[]localbufregerrorint errcodeconst regex_t *pregchar *errbufsize_t errbuf_sizererrrerr::codererr::namererr::explainG:\Storage\CVS_Head\pwlib\src\ptlib\common\regex\regexec.c"engine.c"nmatcheflagsnopepmatchregmatch_t %[]stringG:\Storage\CVS_Head\pwlib\src\ptlib\common\regex\regfree.cG:\Storage\CVS_Head\pwlib\include\ptlib\channel.h"msos/ptlib/channel.h"PChannelStreamBufferconst PChannelStreamBuffer &sbufint = EOFpos_typeoff_typeios_base::seekdirios_base::openmode = ios_base::in | ios_base::outPChannelStreamBuffer::channelPChannelStreamBuffer::inputPCharArrayPChannelStreamBuffer::outputPChannelStreamBuffer::operator =PChannelStreamBuffer &iostreamPChannelPChannel::PCLASSINFOconst PChannel &PChannel::GetHandlePChannel::SetReadTimeoutPChannel::GetReadTimeoutconst std::vector &slicesPChannel::SetWriteTimeoutPChannel::GetWriteTimeoutPChannel::ShutdownValueenum PChannel::ShutdownValue optionPChannel::AbortCommandStringPChannel::ErrorGroupPChannel::GetErrorCodeenum PChannel::Errorsenum PChannel::ErrorGroup group = NumErrorGroups ///< Error group to get PChannel::GetErrorNumberenum PChannel::Errors lastErrorint osError = 0 ///< OS error number to translate. int libcReturnValueenum PChannel::ErrorGroup group = LastGeneralError ///< Error group to set enum PChannel::Errors &lastErrorPChannel::SliceiovecPChannel::VectorOfSlicestd::vectorPChannel::operator =PChannel &enum PChannel::Errors errorCodePChannel::os_handlePChannel::lastErrorCodeenum PChannel::Errors %[NumErrorGroups+1]PChannel::lastErrorNumberint %[NumErrorGroups+1]PChannel::lastReadCountPChannel::lastWriteCountPChannel::readTimeoutPChannel::writeTimeoutPChannel::abortCommandStringG:\Storage\CVS_Head\pwlib\include\ptlib\contain.hPCollectionPContainerPContainer::PCLASSINFOint dummyPINDEX initialSize = 0PContainer::operator =PContainer &PContainer::~PContainerPContainer::GetSizePContainer::SetSizePContainer::IsEmptyPContainer::IsUniquePContainer::DestroyContentsconst PContainer &cPContainer::CopyContentsPContainer::CloneContentsconst PContainer *srcPContainer::ReferencePContainer::Reference::Referenceconst PContainer::Reference &refPContainer::Reference::sizePContainer::Reference::countPContainer::Reference::deleteObjectsPContainer::Reference::operator =PContainer::Reference &const PContainer::Reference &PContainer::referencePContainer::Reference *PCollection::PCLASSINFOPCollection::PCollectionPCollection::AppendPCollection::InsertPCollection::InsertAtPCollection::RemovePCollection::RemoveAtPCollection::SetAtPCollection::GetAtPCollection::GetObjectsIndexPCollection::GetValuesIndexPCollection::AllowDeleteObjectsPINLINE voidBOOL yes = TRUE ///< New value for flag for deleting objects PCollection::DisallowDeleteObjectsPCollection::PINLINEconst PCollection *collG:\Storage\CVS_Head\pwlib\include\ptlib\contain.inlPINLINE PStringArray &operator &PINLINE PStringoperator +const PString &fmtva_list argsPString::operator !PINLINE boolPArrayObjects::PArrayObjectsPINLINE PString &const Buffer &bPINLINE PStringArrayconst PString &separatorsPString::operator <PINLINE PINDEXPString::operator >BOOL yesconst PContainer *PAbstractSet::PAbstractSetPStringSet::IncludePString::GetLengthPStringArray::GetStringsIndexPString::operator !=PINLINE PStringList &PString::operator <=PString::operator ==POrdinalKey::operator +=PINLINE POrdinalKey &PINDEX addPOrdinalKey::operator --POrdinalKey::operator ++PString::operator >=const PCollection *cconst std::string &strconst PString *strPINLINE BOOLPOrdinalKey::POrdinalKeyPINDEX newKeyPStringList::operator +PINLINE PStringListPAbstractDictionary::PAbstractDictionaryconst PAbstractDictionary *cPString::MakeMinimumSizePOrdinalKey::operator -=PINDEX minusPStringSet::ExcludePSortedStringList::GetStringsIndexPCaselessString::PCaselessStringconst PCaselessString *strPSortedStringList::AppendStringPStringList::AppendStringPString::EmptyPOrdinalKey::operator =PAbstractList::PAbstractListPINLINE PContainer &const PContainer &PStringArray::AppendStringPStringList::GetStringsIndexPStringSet::operator +=PINLINE PStringSet &PStringArray::operator +PStringSet::operator -=PHashTable::AbstractContainsPStringStream::Buffer::operator =PINLINE PStringStream::Buffer &PCaselessString::operator =PINLINE PCaselessString &PStringList::InsertStringconst PString &beforePStringStream::operator =PINLINE PStringStream &const PStringStream &strmPAbstractList::GetReferenceAtPINLINE PObject &PINLINEG:\Storage\CVS_Head\pwlib\include\ptlib\wince\direct.hG:\Storage\CVS_Head\pwlib\include\ptlib\wince\errno.hG:\Storage\CVS_Head\pwlib\include\ptlib\wince\io.hG:\Storage\CVS_Head\pwlib\include\ptlib\wince\iomanip.h__IOAPP_long__IOAPP_long::__IOAPP_longiostream &(__cdecl *f)(iostream &,long)__IOAPP_long::operator ()__IOMANIP_longlong t__IOAPP_long::_fpiostream &(__cdecl *%)(iostream &,long)resetiosflags__SMANIP_longlong _l__IMANIP_long__IMANIP_long::__IMANIP_longistream &(__cdecl *f)(istream &,long)__IMANIP_long::_fpistream &(__cdecl *%)(istream &,long)__IMANIP_long::_tp__SAPP_long__SAPP_long::__SAPP_longios &(__cdecl *f)(ios &,long)__SAPP_long::operator ()__SAPP_long::_fpios &(__cdecl *%)(ios &,long)__setprecisionios &sint _pre__IOAPP_int__IOAPP_int::__IOAPP_intiostream &(__cdecl *f)(iostream &,int)__IOAPP_int::operator ()__IOMANIP_int__IOAPP_int::_fpiostream &(__cdecl *%)(iostream &,int)iostream &s__IOMANIP_long &sm__OMANIP_long &smconst __SMANIP_long &sm__IOMANIP_int &sm__OMANIP_int &smconst __SMANIP_int &sm__IMANIP_long &sm__IMANIP_int &sm__SAPP_int__SAPP_int::__SAPP_intios &(__cdecl *f)(ios &,int)__SAPP_int::operator ()__SMANIP_int__SAPP_int::_fpios &(__cdecl *%)(ios &,int)setfillint _m__setwint _wid__resetiosflagslong _flg__setiosflagssetiosflags__IOMANIP_int::__IOMANIP_int__IOMANIP_int::_fp__IOMANIP_int::_tp__SMANIP_long::__SMANIP_long__SMANIP_long::_fp__SMANIP_long::_tpsetprecisionint _p__OMANIP_int__OMANIP_int::__OMANIP_intostream &(__cdecl *f)(ostream &,int)__OMANIP_int::_fpostream &(__cdecl *%)(ostream &,int)__OMANIP_int::_tp__IAPP_long__IAPP_long::__IAPP_long__IAPP_long::operator ()__IAPP_long::_fp__IMANIP_int__IMANIP_int::__IMANIP_intistream &(__cdecl *f)(istream &,int)__IMANIP_int::_fpistream &(__cdecl *%)(istream &,int)__IMANIP_int::_tp__OAPP_int__OAPP_int::__OAPP_int__OAPP_int::operator ()__OAPP_int::_fp__SMANIP_int::__SMANIP_int__SMANIP_int::_fp__SMANIP_int::_tpsetwint _w__OMANIP_long__OMANIP_long::__OMANIP_longostream &(__cdecl *f)(ostream &,long)__OMANIP_long::_fpostream &(__cdecl *%)(ostream &,long)__OMANIP_long::_tp__IAPP_int__IAPP_int::__IAPP_int__IAPP_int::operator ()__IAPP_int::_fp__IOMANIP_long::__IOMANIP_long__IOMANIP_long::_fp__IOMANIP_long::_tp__setfillint _fc__OAPP_long__OAPP_long::__OAPP_long__OAPP_long::operator ()__OAPP_long::_fpG:\Storage\CVS_Head\pwlib\include\ptlib\wince\ios.hdecios &_strmhexiosios::io_stateios::open_modeconst ios &ios::flagsios::setflong _flong _mios::unsetfios::widthint _iios::tieostream *_osios::fillchar _cios::precisionios::rdstateios::clearint _i = 0ios::operator void *ios::operator !ios::goodios::eofios::failios::badios::rdbufios::iwordlong &ios::pwordvoid *&ios::sync_with_stdioios::lockios::unlockios::lockbufios::unlockbufios::bpios::stateios::ispecialios::ospecialios::isfx_specialios::osfx_specialios::x_delbufios::x_tieios::x_flagsios::x_precisionios::x_fillios::x_widthios::stdioflushvoid (__cdecl *%)(void)ios::lockcios::unlockcios::delbufios::sunk_with_stdiooctG:\Storage\CVS_Head\pwlib\include\ptlib\wince\iostream.histreamostreamconst iostream &iostream::operator =iostream &iostream &_strmstreambuf *_sbIostream_initint = 0G:\Storage\CVS_Head\pwlib\include\ptlib\wince\istream.hcinistream_withassignconst istream &istream::isfxlong double &double &float &unsigned long &int &unsigned short &short &signed char &_cunsigned char &_cchar &signed char *_sunsigned char *_sios &(__cdecl *_f)(ios &)istream &(__cdecl *_f)(istream &)streambuf &char = '\n'signed char *char _delim = '\n'istream::getlineistream::ignoreint = 1int _delim = EOFint _nistream::gcountistream::ios::seek_dirconst istream &_isstreambuf *_isbistream::do_ipfxistream::_fGlineistream::x_gcountistream_withassign::operator =wsistream &_insG:\Storage\CVS_Head\pwlib\include\ptlib\object.h"msos/ptlib/contain.h"PMemoryHeapsize_t iSizeenum PMemoryHeap::Validationostream *error = NULL ///< Stream to output, use default if NULL PMemoryHeap::WrapperPMemoryHeap::Wrapper::operator ->PMemoryHeap *PMemoryHeap::Wrapper::instancePMemoryHeap::FlagsPMemoryHeap::HeaderPMemoryHeap::Header::prevPMemoryHeap::Header *PMemoryHeap::Header::nextPMemoryHeap::Header::classNamePMemoryHeap::Header::fileNamePMemoryHeap::Header::sizePMemoryHeap::Header::requestPMemoryHeap::Header::guardPMemoryHeap::isDestroyedPMemoryHeap::listHeadPMemoryHeap::listTailPMemoryHeap::allocationRequestPMemoryHeap::firstRealObjectPMemoryHeap::allocFillCharPMemoryHeap::freeFillCharPMemoryHeap::currentMemoryUsagePMemoryHeap::peakMemoryUsagePMemoryHeap::currentObjectsPMemoryHeap::peakObjectsPMemoryHeap::totalObjectsPMemoryHeap::leakDumpStreamPMemoryHeap::mutexCRITICAL_SECTIONruntime_freePUInt8PUInt8::PUInt8const PUInt8 &valueunsigned char valuePUInt8::operator =PUInt8 &PUInt8::operator unsigned charPUInt8::dataPChar8PChar8::PChar8const PChar8 &valuechar valuePChar8::operator =PChar8 &PChar8::operator charPChar8::dataPAssertCastBaseClass *BaseClass *objPAssertCasttypename BaseClassPTracePTrace::Optionsunsigned int options = Timestamp | Thread | Blocks const char *filename = NULLostream *outPTrace::Blockconst PTrace::Block &objPTrace::Block::operator =PTrace::Block &const PTrace::Block &PTrace::Block::filePTrace::Block::linePTrace::Block::nameconst PFloat80b &valueconst PFloat80l &vconst PFloat64b &valueconst PFloat64l &vconst PFloat32b &valueconst PFloat32l &vconst PUInt64b &valueconst PUInt64l &vconst PInt64b &valueconst PInt64l &vconst PUInt32b &valueconst PUInt32l &vconst PInt32b &valueconst PInt32l &vconst PUInt16b &valueconst PUInt16l &vconst PInt16b &valueconst PInt16l &vconst PUInt8 &vconst PInt8 &vconst PChar8 &vPFloat80b &vPFloat80l &vPFloat64b &vPFloat64l &vPFloat32b &vPFloat32l &vPUInt64b &vPUInt64l &vPInt64b &vPInt64l &vPUInt32b &vPUInt32l &vPInt32b &vPInt32l &vPUInt16b &vPUInt16l &vPInt16b &vPInt16l &vPUInt8 &vPInt8 &vPChar8 &vPInt8PInt8::PInt8const PInt8 &valuesigned char valuePInt8::operator =PInt8 &PInt8::operator signed charsigned charPInt8::data_Ios_Fmtflagsstd::ios_base::fmtflagsostrstreamstd::ostringstreamPAssertFuncInlinebool benum PStandardAssertMessage msgPInt16bPInt16b::PInt16bPInt16 valuePInt16b::operator =PInt16b &PInt16b::operator PInt16PInt16PInt16b::dataPInt16lPInt16l::PInt16lconst PInt16l &valuePInt16l::operator =PInt16l &PInt16l::operator PInt16PInt16l::dataPInt32bPInt32b::PInt32bPInt32 valuePInt32b::operator =PInt32b &PInt32b::operator PInt32PInt32PInt32b::dataPInt32lPInt32l::PInt32lconst PInt32l &valuePInt32l::operator =PInt32l &PInt32l::operator PInt32PInt32l::dataPInt64bPInt64b::PInt64bPInt64b::operator =PInt64b &PInt64b::operator PInt64PInt64b::dataPInt64lPInt64l::PInt64lconst PInt64l &valuePInt64l::operator =PInt64l &PInt64l::operator PInt64PInt64l::dataPStandardAssertMessagePUInt32b::PUInt32bDWORD valuePUInt32b::operator =PUInt32b &PUInt32b::operator DWORDPUInt32b::dataruntime_mallocsize_t bytesPUInt16lPUInt16l::PUInt16lconst PUInt16l &valueWORD valuePUInt16l::operator =PUInt16l &PUInt16l::operator WORDPUInt16l::dataPUInt16b::PUInt16bPUInt16b::operator =PUInt16b &PUInt16b::operator WORDPUInt16b::dataPUInt32lPUInt32l::PUInt32lconst PUInt32l &valuePUInt32l::operator =PUInt32l &PUInt32l::operator DWORDPUInt32l::dataPFloat80lPFloat80l::PFloat80lconst PFloat80l &valuelong double valuePFloat80l::operator =PFloat80l &PFloat80l::operator long doublelong doublePFloat80l::dataPFloat80bPFloat80b::PFloat80bPFloat80b::operator =PFloat80b &PFloat80b::operator long doublePFloat80b::dataPUInt64bPUInt64b::PUInt64bPUInt64 valuePUInt64b::operator =PUInt64b &PUInt64b::operator PUInt64PUInt64b::dataPFloat64bPFloat64b::PFloat64bPFloat64b::operator =PFloat64b &PFloat64b::operator doublePFloat64b::dataPFloat64lPFloat64l::PFloat64lconst PFloat64l &valuePFloat64l::operator =PFloat64l &PFloat64l::operator doublePFloat64l::dataPUInt64lPUInt64l::PUInt64lconst PUInt64l &valuePUInt64l::operator =PUInt64l &PUInt64l::operator PUInt64PUInt64l::dataPFloat32lPFloat32l::PFloat32lconst PFloat32l &valuefloat valuePFloat32l::operator =PFloat32l &PFloat32l::operator floatfloatPFloat32l::dataPFloat32bPFloat32b::PFloat32bPFloat32b::operator =PFloat32b &PFloat32b::operator floatPFloat32b::dataG:\Storage\CVS_Head\pwlib\include\ptlib\wince\ostream.h"ceostream.h"flushostream &_outsconst ostream &float _fsigned char _cconst signed char *_sconst unsigned char *_sostream &(__cdecl *_f)(ostream &)const signed char *ostream::ios::seek_dirconst ostream &_osostream::do_opfxostream::do_osfxostream::x_floatusedostream_withassign::operator =endlendsG:\Storage\CVS_Head\pwlib\include\ptlib\pstring.hPOrdinalDictionaryPSetPStringToOrdinalPStringToOrdinal::PDECLARE_ORDINAL_DICTIONARYPStringToOrdinal::InitialiserPStringToOrdinal::Initialiser::keyPStringToOrdinal::Initialiser::valueconst PStringToOrdinal::Initialiser *initBOOL caseless = FALSEPString::PCLASSINFOPString::PINLINEenum PString::ConversionType typeunsigned int base = 10PString::ConversionTypeconst PObject &strPINDEX count = P_MAX_INDEXPINDEX offset = 0 ///< Offset into string to compare PINDEX offset = 0 ///< Offset into string to begin search. PINDEX offset = P_MAX_INDEX ///< Offset into string to begin search. const PString &setPINDEX offset = 0PINDEX maxPos = P_MAX_INDEX ///< Maximum offset into string PINDEX offset = 0 ///< Offset into string to begin search. BOOL all = FALSEPINDEX offset = 0 ///< Offset into string to begin search. PINDEX len = 0 ///< Length of section to remove. PINDEX len = P_MAX_INDEX ///< Number of characters to extract. const char *cseparatorsBOOL onePerSeparator = TRUE ///< Flag for if there are empty tokens between consecutive separators. const char *cfmtunsigned int base = 10 ///< Number base to convert the string in. PString::operator const unsigned char *PString::operator std::stringstd::stringPStringDictionaryPAbstractDictionaryPStringDictionarytypename KPStringDictionary::PCLASSINFOPStringDictionaryPStringDictionary::PStringDictionaryconst PStringDictionary *cPStringDictionary::ClonePStringDictionary::operator []const K &keyPStringDictionary::operator ()const char *dflt = ""LSEPStringDictionary::ContainsPStringDictionary::RemoveAtPString *PStringDictionary::GetAtPStringDictionary::SetDataAtPStringDictionary::SetAtPStringDictionary::GetKeyAtconst K &PStringDictionary::GetDataAtPRegularExpressionPRegularExpression::PCLASSINFOconst PRegularExpression &const char *cpatternint flags = IgnoreCaseenum PRegularExpression::ErrorCodesint flags = IgnoreCase ///< Pattern match options int flags = 0 ///< Pattern match options PRegularExpression::patternSavedPRegularExpression::flagsSavedPRegularExpression::expressionPRegularExpression::lastErrorPCaselessString::PCLASSINFOPCaselessString &const PString &stringPArrayPStringArray::PDECLARE_ARRAYconst std::vector &vecconst std::vector &vecPStringArray::containerconst stlContainer &vecPStringArray::containertypename stlContainerPCharArray *storage = NULL POrdinalToString::PDECLARE_CLASSPStringDictionaryconst POrdinalToString::Initialiser *initconst POrdinalToString *cPOrdinalToString::ClonePOrdinalToString::InitialiserPOrdinalToString::Initialiser::keyPOrdinalToString::Initialiser::valuePSortedListPListPStringSet::PDECLARE_SETPStringSet &PSortedStringList::PDECLARE_SORTED_LISTPStringStream::PCLASSINFOconst PStringStream &PStringStream &PStringStream::Bufferconst PStringStream::Buffer &sbufPStringStream::Buffer &PStringStream::Buffer::stringPStringStream::Buffer::fixedBufferSizePStringList::PDECLARE_LISTconst PStringList &arrayPStringList::containerPStringList::containerPStringToString::PDECLARE_CLASSPStringDictionaryconst PStringToString::Initialiser *initBOOL caselessKeys = FALSEBOOL caselessValues = FALSEconst PStringToString *cPStringToString::ClonePStringToString::InitialiserPStringToString::Initialiser::keyPStringToString::Initialiser::valueG:\Storage\CVS_Head\pwlib\include\ptlib\sound.hPSoundPSound::PCLASSINFOPSound::GetEncodingPSound::GetChannelsPSound::GetSampleRatePSound::GetSampleSizePSound::GetErrorCodePSound::GetFormatInfoSizePSound::GetFormatInfoDataBOOL wait = TRUE ///< Flag to play sound synchronously. PSound::BeepPSound::encodingPSound::numChannelsPSound::sampleRatePSound::sampleSizePSound::dwLastErrorPSound::formatInfoPSoundChannelPSoundChannel::PCLASSINFOPSoundChannel::Directionsenum PSoundChannel::Directions dirunsigned int numChannels = 1unsigned int sampleRate = 8000unsigned int bitsPerSample = 16PPluginManager *pluginMgr = NULL ///< Plug in manager, use default if NULL enum PSoundChannel::Directions directionPPluginManager *pluginMgr = NULL unsigned int bitsPerSample = 16 ///< Number of bits per sample PSoundChannel::IsOpenPSoundChannel::ClosePSoundChannel::GetHandlePSoundChannel::AbortPSoundChannel::SetFormatPSoundChannel::GetChannelsPSoundChannel::GetSampleRatePSoundChannel::GetSampleSizePSoundChannel::SetBuffersPINDEX count = 2 ///< Number of buffers PSoundChannel::GetBuffersPSoundChannel::SetVolumePSoundChannel::GetVolumeunsigned int &volumePSoundChannel::WritePSoundChannel::GetLastWriteCountPSoundChannel::PlaySoundPSoundChannel::PlayFilePSoundChannel::HasPlayCompletedPSoundChannel::WaitForPlayCompletionPSoundChannel::ReadPSoundChannel::GetLastReadCountPSoundChannel::RecordSoundPSoundChannel::RecordFilePSoundChannel::StartRecordingPSoundChannel::IsRecordBufferFullPSoundChannel::AreAllRecordBuffersFullPSoundChannel::WaitForRecordBufferFullPSoundChannel::WaitForAllRecordBuffersFullPSoundChannel::baseChannelPSoundChannelPluginServiceDescriptorPSoundChannelPluginServiceDescriptortypename classNamePSoundChannelPluginServiceDescriptor::CreateInstancePSoundChannelPluginServiceDescriptor::GetDeviceNamesG:\Storage\CVS_Head\pwlib\include\ptlib\wince\stdlibx.hisdigit_chdriveint dcallocsize_t numispunctisupperisxdigitiscntrlisspaceisalphaisalnum_chdiraccessislowergetenvconst char *varnameputenvconst char *envstringisprintG:\Storage\CVS_Head\pwlib\include\ptlib\wince\streamb.hstreambuf::in_availstreambuf::out_waitingstreambuf::sputbackcstreambuf::sputcstreambuf::sputnstreambuf::sgetnstreambuf::overflowstreambuf::underflowstreambuf::dbpstreambuf::lockstreambuf::unlockstreambuf::basestreambuf::ebufstreambuf::pbasestreambuf::pptrstreambuf::epptrstreambuf::ebackstreambuf::gptrstreambuf::egptrstreambuf::blenstreambuf::setpchar *_epstreambuf::setgchar *_egstreambuf::pbumpstreambuf::gbumpstreambuf::unbufferedint _fstreambuf::_fAllocstreambuf::_fUnbufstreambuf::x_lastcstreambuf::_basestreambuf::_ebufstreambuf::_pbasestreambuf::_pptrstreambuf::_epptrstreambuf::_ebackstreambuf::_gptrstreambuf::_egptrG:\Storage\CVS_Head\pwlib\include\ptlib\wince\time.htm::tm_sectm::tm_mintm::tm_hourtm::tm_mdaytm::tm_montm::tm_yeartm::tm_wdaytm::tm_ydaytm::tm_isdstG:\Storage\CVS_Head\pwlib\include\ptlib\wince\sys\types.hLPSERVICE_STATUSstruct _SERVICE_STATUS *SERVICE_STATUS_HANDLESERVICE_STATUSstruct _SERVICE_STATUS_SERVICE_STATUS_SERVICE_STATUS::dwServiceType_SERVICE_STATUS::dwCurrentState_SERVICE_STATUS::dwControlsAccepted_SERVICE_STATUS::dwWin32ExitCode_SERVICE_STATUS::dwServiceSpecificExitCode_SERVICE_STATUS::dwCheckPoint_SERVICE_STATUS::dwWaitHintG:\Storage\CVS_Head\pwlib\include\ptlib\msos\ptlib\contain.hRegistryKeyRegistryKey::OpenModeenum RegistryKey::OpenMode modeRegistryKey::keyHKEYP_MAX_INDEXOVERLAPPED__argcpreand from the__argvunsigned __int64PABSINDEXG:\Storage\CVS_Head\pwlib\include\ptlib\msos\ptlib\sound.hwaveFormatPWaveFormathWaveOutHWAVEOUTbufferByteOffsetbufferIndexhWaveInHWAVEINbuffersPWaveBufferArraybufferMutexhEventDonedeviceNamedirectionG:\Storage\CVS_Head\pwlib\include\ptbuildopts.h Фt Ћѓя} г†5Ї k аоЃск‡ yуіДa ЮЌSЂ.k3 Ш|•iGЎІ ›6 Ёдх М(žОС+­цbЏ:у• ;­= KD AгснЃ?=сѕУС‚ž&Ћ чѓЃ p*  ig Ь™ к Вb Ю/тц aŠ[ ‹Ѓї( ‘  §ъ+œ !ёZ ЖЛ JР lW рб ЩтА; ЫƒВžJе сdї Пq шeщœBњЂМІ’ є4ШШЂЭі ПИ љ= F Ќj " pоb0/[ X @е Э' ы јŠтG`эNпx ХVL…- ,тІ*Nи ъ Ыc всдA ќтф>}MајђЅ `жС­5Œя 'T zУH#тgъO(‡M %д 5"іf’J39ТL_` у „з:›DН Аd Ц0'К| Нџи 7cџХыњ вЙ9м 9!GbH :%ДТТZ “ћ ьІІї ˜œ L^ тiSu=j Њ%ЇР”АЬВђBvЙ ЄЖ <Ь +<Ы– Й= д uЖ "3Iќ .'мХj8e nЙЅеЬ dAXЉ9Т ћо&ќ†о А­ ЧTњиЗNг%ŸмŒ |МРœк ‰9  !и?k+Ѕс ш'исbЇ ~‡Хw Џd.wэ=p‚X? РO Sќ жw‰q` јwnЂьD“ !k_йЗ€  P„Ѓ%.d _ј~ŒJ  Ў шѓ ~мЫаЎЌЦЩsН {э hœ МчНА ‘(Гю .,М‘/4ЗKjжј zeXF лх цРA<FВн %И$ПјrШЎ’ ›b>™ 0™ 2%к ^ƒдsџѓ+V О ЖІрИŽБE чЗЕ t>з}з §O |’ ™Z 4ƒу% F7pЮц˜ nЙЛWѕ45З Žвp ѕgn M )q Ьэ ГBЊ} ЭЄ @х‘^ ŽлwЯ$К:Bwц qŽkа ч Чшl0љ †ІЎјsЭгW!NЫ л/ЩБv™мЗU{ч лиD_h7џ Ч!ЂntO cз , ‡J‰Ы єК єО ]Чx Б.Ф ŠЦ С 's Т6< †ЁRV [` Ѕ"0ЄР3вГw™)bАUе Г№LКА9‡ѓ €Q П ˜ћхyf ўj Œy шУUё QъГЂqQŽР-Ш­›ЬtAТ- T@Щ‘UˆZNчšЕ і ШТ Оr „Ц hЧ)ФŽyъtJђ  ч%чї7eAЄ MЗМј š#WЮBДшЯ ћЧщю y+“5 љИАХк ЂћЬL Ё}Яz ™ЈgрZy -ОПŸŽЕ-ѓ™йd< [є ˆ# ^­Ї™:VЃтд ш[ э гC№АŠь "ާbY:ц_ }Ÿ *Ю Pкz$зy˜9рЁ“wє gЯнjЫщ ЃУ УЈ Ђ5™H5 Њ fй DPh$ AЋ усУђ R™ W  ўО Cђ@Хцз v q-  ›ђ}( …w [Ќ –:Вћ ›TёЩЊ Eд z5PЎ оШ ”рИ6iŒ BCјHitAуЗYЗ+]­ Г u&в?u33͘ GЯ ` 7 PУ№39пЇдKНЗй Шџ =” ­0 "t1ХЬ žЊту*щ•0 o+ Žът_*е+'Q E ЎD Ь! Ѕ"?6лtGѕЌЄhіLvвуРA Дя фL Ћ? т іЈіПпћ›УiL OЏуэ џ}AЯ‹nаsЏ=UI ћ$ЗŒ^]Cј 5є ];MKќX*ЧgYƒrЅ…ћb 0T †; ’кО{ВgрpгЯ ~+ДLQ > `Œъ PeПИХg ay‘% •3 h… ^ Zj S /WцFH) Eg ю ’Љ BЬ ~< шЌ xЉzp ЭйМ.,н JмИЗ ќт • ч с Џ [_P і…У у jИ ˆЬЧ…4ЋSS ќ}йЃ›k Р§Е™?Y =ЇNу -2IŒ­ W тQСEџ{  €"R‘іЃhCœ ŒйNЧƒˆW4/сЯDLНsшЫГ2 rn ­q Пwb+ Шэ т5ѕф$F Ќэа М­ + P1 љB†|?ФхшНxгšШho№2WТ№<јК?2 oК*ч п h9хw  в ;Е нЙ ЇyŸаъhD Т7ћyа Fчюћ *ŠхѕщЖiЙj ~t ВT ьПp +ХєэП НЖŸ› F2& ђЃъНWyШA ˜ nѓ 6њ Y0Ц#СHрЗ u…ˆ л‘еє ц{\] •t вЭ Ÿ(HYЙ§ ЃЊ Е7 єш І(Г$ •аЦѓы$ф& 0Ž€ђфєc 8ї ё­Ыдf SИ КТ пЦ b6ŠЖо$zUˆg#R œ v d‚OБЇ Ў{ Ќ[ ђШ <Сўџ 8Ю  Ћ$Ћ51Žв чB#Ј*л™ъfŒт § л]щІ ?5iѓ АЧрнpжdiuќВт Жѕ —XР]|jв gjžхч#o{‡§Еh'њI Pї \гŸ„DџM АЭ•Ў-њ(ПЄљ# ~ Ze О 'X –JУ )] Še!кxё k­ Од.{}YU8Ж г hEџ ШY ‡юю  іŒб єCРcлі ”Ѓъ UG%M bзHr ] Иv vрЋH8D gC' <цї,< э˜’Сf СЉ = OE л– Wн i.!№–eЛn ;j Я§ nъ{рbЁT‘|л Rэ ƒы Н R 2 Њ#ѓї ir§&–јCMє ZТ Ји ћФ ћиbњ \’K!FJл )( ZVт| Y 6yA= [„q7 Цх е–T8,)toњsuФDLу;hЭdг Л#JъS№ E‡А OQ #ЩDХз ЬЕеV Л !—ї—h bСjю cBћ „d. Ъ’ wиЫEž _”Гt ќ o#Ўч ъЙ‚,ЅРпх Fƒ У УvРї1 Џ o Y}Їw“R[kЖо ШќСЉГхЊл} 3@ЫA†Ѓtn Pтw ё ЦДО“ €x ]i 3ŽЈ J– ўШЖš iьVЯ дЮ еФ?0 ­;RŸoˆ E e DƒНы Ё GюH $]5w K' r8Л BГ^ Pј 1 }яЗ9‡Пиpxљў™|t2S Q2 i)wш !Z Я ћПЫ‹ДЧ7<­д(Ž> ТФ уlvjiж NХK c ƒчЮ‡E_W$oэ?:}q-“ЬxZУЯ‘ nˆОњч ­ЧЮ[?ЏT "Ъ RЛдЉqк Йу‡ _“ъчa ‚lц”ћд cWМэ#b (ј ж*fxтќ ќ-N„ ˜r2о§I iт, Jt Š|Љoш ž nЙˆN9Ћr Ўyцчt[ЈИL З gТ?= V Т\Ъ8р i>[M3tхфЗ* $j› jГ ~d "6лЇ&Œ $Ѕ0 Ћю^‹јќ" %{СЗГќЁ Е•Ас%% БЌ~ ‚а;нy[ я] ™# |~ aБ ~М иХe ЭJіуV Р*˜G џе в}%œ&$ZеAБ сс/, Ни‚Cж† Ф8оі јOёъєhЇЭ ЄK EJHтŸ ^нЇ SDАЌє 7\ iдšЬK[9s37'. Gќ‰YЙ=<c=і‹ѓ ї";lЗ# Ё 'а Й‹ лЭО††OЈ EЩ A+ ЭvП Ј•vZ Cах"г Fи ЂН U жx “‡m мњ wюЌИэc 7  [§оєGž[тБ2Ž ичї Ь к/%и5Њ СFPYB Žх L—Йsйy№Щ Owdš— &№•Šš iљ&@эX5ч ЎС q^ Kы•і Gи 5Mѕ-…Э0 /ТŸлUљž:RB]‹кyUš Ÿ Ла @KшO ПЁЙЉzDA˜ѕ*ц x! wгD85LIWъ FB5Y(‹/ъ Zi Ÿс•Yч Я њ[Ю †БOЉ*Ц?”що›ДNG ћс} гQМ7л (ƒ ЊXTі R рЗн>а щNЗк жЫ кЖ УЏв ‡Oхž† ?ИЦŠ—Kd~ѕc п%l ž1 ЪЇуV ІК €БП фK њѕ l ЇD0 —=HXЎБdе`XПiр gfН ,Н о7І† Ы цў|К ;GБЈ Юэ †MКІУ ŒУ ЙЊ rУ РУ ?0ZŽЯ ˆS‹Я ЬЩЮк $їŽ˜ФжеSС-іF‰’эЏДдиёзІo .ЙЮз‡л nGіљЖ? &егШd-Џ ѕЙр–§а  ­ ~К­ ОљХњѕ0jўї>n1$‰оƒхх х9 ШкGjнАуAбXь Ž3ЃС ˜$ : ˜Н Ќ&ь ~г б вКи z‘Лй “ƒФ)pUЉБ е5„§f>жd,ЙИЄ§ › yдaŠ )Ъ[˜ NЕ \Ў ф  Х ВU.]„B2Э ЬЬ‡UБ и9-ŒТЋуBr˜% 4Н ЉuXгfо[ dЗ sЏ ћn ;Ж7 ‹шŸ< Ц7 зђ ё qf0У Œ=4{ ~ШEш§JњZ(№I” ЭцšP юSЦ ю~.—8Ч ТŠМ| HП Ў aЕXbЬїpxГrФ ZФ 2IjФ bФ К\Чтўл E| \їџ šŸTž„Ъ&Œ ,„o ЬуЬ }/иКxY. g/1/ж„J7єњѕаГЦќ646šŒ{жqJ Цtрt‹‘ g/ %?QX–M eМ -ч' ^Ы€A0л яJрШa aСт\ ’л qbVм |н Ž§ н л^ %к є% ”- ˜еШџ г{†Х Ќ  С#( з% q п š<‰Х~0€ :‡ бSW _А .KwРеQ ц‘tЊHЉO/‘L]^ pySЛр– Ћъ Э„ —ќ[Д TОљЈГЅ [Хз ЬК- в~_ БЌ яз’кЙж Тч ­^тЅѕ рФ   – и4 IœЄ оЩЂв­0h‹%2 К МryTS &юkŸтlГв  G@d[J_ &#ГD"Ы ИT БДYјcЧ„шDзэУнЇтМЛfEb ž вzSf Xу џЁМ=ё лˆšугy )hsRSgЕ VŒ Œ kЪЇе ‘КжC 1к?чfT  >= ЄЋА Ліи` 9Г ,Y~' F ЪŸ 'С t5t†ТЋќЧФгФz  ™њ з’ ё $пrЁ \)ЩЩ<[Kщнt†дП ƒ| ]J ,r`!sЋ V,_ЃiіŠ N 4m (б < џ юєPсѓRйєЩ7Е бжЄWН ;сvЪ ='Р‡ŽЁ ЪюЎ€(? NˆйГ ~їб\CђС&гЃ!ШZThЛќ0WudЩ-ДN +З #з лЊкПO u P?/О t-I РР зЗ П' ф˜Z ў— ХZЅњ )§ BИІЗ UQLи9˜ž– ”ЃŽ Аj‚[ Рџ}Q Š Ia j…qР шєS >l cs М сж(— ќ1k ц ”в]^эы• њЅƒ X ‚?P*pМ ЮО4СZaНн ^žл 8t бNЩСП`8?ЃXаHЂ TD R–ВУ+ђ Su”= KU[з y ц ИJЅІЏ щ * ВЈжaа|Юpь — 9 wœfР эAь ސ xџЎфпY ”ГСлъˆ mЕ§ š)в Дџй їbі єž ‹/ Бe нбй‡ eГШЇ тЫДЬЪ хs–x`;Шв ыz гXLиІ bni –rО  Є~ Ѓ& ШИ ч ž’ . 8 ќ< х нЏ № їM'їtч Xі l& Тї ‰{ џ]З 5д V%|Р G9П“fХ м,•Ыљ ѓI щM‚ўю и8т0/о–ЖГ ђLta2mbaљВ ˜`–V]? ] Щ Жг sE А0 ˆЖ KЬ Ьjаf. Ѕь хЬœ˜ж@фћ Х 2Х Ы#Q6tpOБЛ4ф1 uё ІtFї Х<ј jнj Q>Ы4&эЮМ ћl8т фЖЧМ? чŸU ’БCуz‡b‰sqŠЄЃі й9ЏV#Е ZS”[ 5Ћ9 я ц h ’, œUw­1џ Чщ Я гcX;ќ оі №"†ƒu 6Х њю ЛЬ О^єЏ ‡ Ще ;_Lж‰;й njNщJг ’шц РЗ§ГБі рЧш‘—•aк ): †і BvN1 HЫ Ѓ9 ќT ŸЏ КŸ gТ €Ки:8 .Џ.jAэS> Ÿs ˜е ˆ?%Є  ЁEњ# +о–3 M iш Ц -sш вš žО ЖЋ К† дGC –вЧ† ю‡щнж Дђ|* r”ЌЩdй.) а Л ­ М%Fд_тŽэчМи–Є?Т ?5 њЩ К–NѓНx 7щ Ÿ^5gK1і `т D И[{D!џ Л~ ”Њ ™5 7пь ВсI ЖOЄЊJm лL УOœ;Ри‰=[W†+ц ЮUКЗ zoі e ёфWX8 Ё2РП 42чoЃp} :"~™цUQSЧ@>x~ ZэьdБX жY+ц^ Ќт§ Tƒ rК vš сит’<Дx| у[ '&@Hg“ИЈl  ,: 13ОЩЯ‚ ™Єў Яи oаАіr м™@sВў Џ Ќ}а’™ње ĘVЕ ћр шђ ‰ Бч щL%йи oј :&Я§X}3ю#\ С^] "е fw Ÿ™' jрЇЦяЎ8 ѓч[ -ИdБж<NKgЖA x? § Zпg 5ћЎ, ЙDщ : ј- пg ‡ !{W Ѕб ЫЯkbЖвi§k„,VЪ UАв •”9ž ‘“—%Л› † У ЈЦ ŽdхŸЋПх Š]qН AR+ z† Зь SхЪЫL ќЗВ˜­ Яё яњld*ч‘ шєC$bжCN р;о u … 4…Oб /Ѓ ђŽП< 89є`ƒЂfoZ/~щ1 >‰Ž№‰Тaqn0l =ђjJ?УraЦ ˆ†ТГ\хORv уЦ”ЎFЙЖ‘C рЁ <а Т{ Н§QЙb 8- HRі™›  e{еQ RBМу mг пфQвI, з H0—iњъќє Ч7Q's &Ш RruƒЕ) ФЌ O^љ šˆзДЏѓŠWОєЕЬ •pdqфџ‰Нў 6Љr†ф‡5–КK Є n> ncF ёљ Њmd™Ч іŽ жvР ![ ЂВ“Сv —4 Џ  фыFмъ.#ХўїТ\жєЦеd-q §œ Q<ђmhпL!Yз`Лџˆ -ˆвƒг ‡Б пВ ˜Йq Є ОHшР IЎщЯЁш nЮ*qБ СпжИ = Ge K† юЮ ! ^q/Я\" ф gэ …XЋф М(/E `с n4:5ЦXе AъЗPУaTВg№z( H-gЋыє ХД Q2\5ш “Ч ы;ЦЬћy aГПt “F бж0§ Щ~…!ФŒф№J Ії <Л ЇЏ"Q№ пTСUО MklЌBж ш™ ‰S Чi їRI Нщ u› ЎbК\‹+Yџ†2ˆСœSЙ5v|Еџ‡Ќ А Лѕ Жђњ’` ДG wY Чѕй …­ŸзL WЙ VЖ CWkTРМ7ћщд NR™ ŽФ ‚тБNtx U d‡Аttƒ ;`ЪЦ}кЈF ЁД]%ьё`Т5ъpДU!еe “1œ0№‘ Џ\ ƒd_hу ЌŒ с §х yЖ Ы юу5ћ w( d№ЁЏcў“E jоEш[2gјbА Aмє ЏЫейƒз [ `f -Ž<~ Ѓ ?з —@C€њ ЬНЎJ С(cЄ €cs‹ Д(\_ и*ЪЏ†ћ b\_ њt БM „ŽНя…j† ](<]Ф БЩќ‹ цE€+aЛ Р ю  ШТШЛZ ѕЄzP 2PИ пL—tЩСЈуЧ eF‘ УфМ$+'чЕOђžп +Б CжШѓ ц9й Жђ \ W*'1э Œ –ЂЩ ­ЅšyЅ"СяМA42› ДPoюпw E№Г ГMrТ ЁH™i 92 Ўo D„6C+ ыC€ ќ ФO ОГ lћ.Kћ 6Н ЕlЪЙ ‘ј tФ $д&†Y )Y і‡ +-Б_хY 1цW}i} Оѓ?ЛЬш Ь 6у}шxЭ +A0нr\vtvћЩ Оmч:Z ѕД Ћ”a˜Й7ї;m јG)љ~‡N VGkr‡‰ ˆРЂК Sб ЩzwJ Ј- Ы ‹cљќgл оv … O .Б Јы и†^Вы Ох?t”Ž{Œ>ь cш: /D}РЉВ› 4[˜ЛA Шc лво wЈ УПМSЖИ hжЫ Х„ ,< -‡ Я ЖqЃ §p[щ “ E>. -^ћь э `" ћщ kN5z1 w%‚ѓvщœЇ №тд№ 9ЦL\u2‹‘:*:žСl ЙЙЙ‘Ќ ўx=˜ 1/О r@ !Т O Ък ъН GПjE wП.ЯŒЊyqЇ `F ЏЌуE јБ„)уY Xц =S zЏЩ}СА2l 3 k кмL^‰сѓЎ гb uŽЎfЎm& ТtCЛk Y|№ЋTМЌ П yѓ І-Z Є‰ ъ­ы ГЅ%ЩџЊ ћJљ ё $Ўј Ur‰Žy YЮш6žuІšДhыЩ эПDR‚g Ÿ У  ЈјыъздШh ‡ѕcуz:ˆn€ YdУD .Ё­;@щ tц„j ЂРаN,kƒе & c !є (фЭф9Cй2 Г2‡Вbk эежчЧ ™Y=вkE a‰ ƒН сЇ•ї г•є з м$ЂLjЧЃХРќ н2іp њ7]6 ЪGљКАІбeЫђ  S; Jƒ`Їюфлq & Ль щі-НЈ Aч eБqъц иl 71цv+е ~њ о,J^Н‡+0Ss |HЃ ь4 |}МT­F ˆЯДу]ю=џ7њ Цд mС gVy§ бЕA№ зТЅяЁ€М ?Н џg ц є ЫВУЏћNК }у\X /dќп ў aї Ь=фYsY$9xŽ./йъY ћwJLЏЈ.О~ zw Д—`НЯЊУ I‘Iх СЂЫЏъђХ Ц0@ “#Ў=ПрЏBIПh j [V qьк#x‚ Дъ™ŸвNХ 6лœРєк Ё ŠnYDЬ ТЧ Ј { э€ *Љ й’Wі $р ]ƒ ˆz oœД }Л$ сП iН Abї ТШ No yр ѓ&ЋЉ t"9 2ш 3 Avе“ fш Љѕ‰97,HF§Š H4­Щd>Ш”PCd гњуЛ Ї2 ќ§юЛ \ /Q К ƒ[ šЉuм Рц–›љэ= ДBˆ‚ІWKQf †В чњ qMЛjш№LoВ \~љэ С  DˆУа Џj$[?љœD\7 Gэ[Пю x_Я'ит§ю ЅXђ?<ѕіГaт9uh +ћ *›ВYоЖ ы]мJ‘[E­H ‰PJьqЅЈЗH %i =Я љ– k” 0X љ)\ ˆ. %Ь Б qZJ45 Р€ ђЪАуQ џ0.„Щz R Й]'I3SЗ^_Z Пи XŸрљf ,‘ G5FТ X/ 7іg G§`шёˆ~wЃmюй Б Т Еz W`$Ѓ rю wАєcY‰O"Б{ y :`š˜ [ћ ѕb ВйЭ‚ уvЖїoЮнЅ4, –м тЪ ЬИœІО (i^+q_ V­ фѕ Б^…ыTѕХєA‚n” АЌЯ|ОЬ b9wь’— З Фk ўиx\п ЗЅomЩˆJ2 КчŽ9 ge Лt P œР Д< MŠзЇ Ї… ˆC Ёк }Т ˆ— /š|@cсwlM#Ъ XГ ћЮЬС 1Ym ЛМ  W ыH Еѓ5.H‰й 5њYа =п‹YЇM(RqEH' B? Хh4шŠŽ#Лф€žB$ $'  юb >&рH/˜ н8 Іš a­] ЃЉфѓD9 #ћZјC< ы HтfЉ  НзЭ Њ(-V ПФ0јіc­м жь —8YС ЦWЁŽ›р tŸ[џ ‹BњЕ Їг}AЁ­#cє“ keЃtЕ‘ТеЕƒ`гKЁЈ Я 8 jНуhi8 юA tF ŸD\‡ гPH Нд5Й84 ЦA‹•Я й(љ’гiCэ(d2F …З8k М33 \ш i & vд U ,Д с“ Ўžф€Ыз@ IЛгzЧ‘ y‚ х%Ак]К(ќ R зј WИ шЯ lУыNf] xv œy3g _Ю fOW& < шЂn, g \і>Etс ДЧЅ &Iюй“šI œM*м б"Р4Ÿѕžašя;Žпр|Зж цCщБLЎ Б qЛК<їiЈОШ &!аеЃЅ0 ЩwЁ œЇцю1щ §= (wbџЖh ШSжЪЕPЧ „ Šе]x†_ a4щ +С ъЫЏs яЁ ѕя Еп k k ‡{ фCz,ЙМЛ‰4 > & дЁuжь BЩ АЎІцРЄѕёOyq_w~ FІпO ЕR:ъTћNЉ l6~ЁГZ€jЭ( Лњ]љЕњ^АzЊі 7уз’ Y(ЬnЩ §Wт! q8 , н1 ђ…VtG ?€EТЭi6жЯb•‡m‹7оC ЎЂ ѕzЪi<O oBТ;dг<Ўў[Х   2Sѕ9Ж‹˜Ж ƒщ цl<З –8 _у Ю€ПЏЧэЧцI} Ы•об}јђƒКї! ;PѕqХ O ›й ащ ЏЎ їŒ}9# I }Š ѕ–Мћ mЩм61њ <bTъ Іё ^$jи5АbџB Кe–Џ ?.ы0ъН$n9 –  ЮšcпЗ„ T+ 2€m д@ ъ .Z #щ z BZ нй :КВYf„чьф 'ъ‰gDЦЊ”tч hX J o] „! wо |ј kp1(ыa ;zJ‹Š Ÿ№ зГ•Й О лВчœќА kIyЦNc0?Гн—зтs7а)Я… cтгEgiмeк А k3‰_ Н“ –И ’{vАІ ѓeЂQІlФ]‰ Ÿ-о" ћ ѓГ Щ8ЬжrщѕмЭЬ АМ ƒџМ[ Т(ї џ5DТж,'hЈк|{ НbЋC љЕ Rљфз XK ЃMЅр„ и" ]ЄUм ХЮџŸ˜.|ё і; ї щш ЩT ОF №љї ЁЎеM E\ в 3 A Д0ˆl …ьт“f‰# bRXЫ l+П "9{.SЗ[кG Uh ы ŒЃб ‚фдAѕ˜… zќ@г и n<oп‰шg ,q Яј њ: С 1$Џ єыцддŽкB = \H“€ъя њяsZ ЭУhФ.U) #"~е Ў4 S(­# 2# м п Ъ#н&KЩ>у њЅ j €‡| я # p9Љ rW­ „Д +пG Ѓt ё• ЋИ v˜ ЎиЪцѕ Щ )T•YіFyдТЊ Й Ё— Ѕп2–з_ %?&l Уo|ЧvJЭmWLНNЈ9ZУDВ SrˆћЋOT }I Q]юїSŒ•ŠmRŽдX^заЋ ƒГ7ё †7Х)Q UюЎ‘‰W ƒ+ќхм§Ўч­ E B^ ПЅ B> 9 fDJhЖQя§šUю1РёFњšг(щиЗ Fэ5ˆVЕ <уЭ3№Ъ TД ­*нь !њu,ћђpnkrНR№‰˜-Р{ NŠ №7б ЖІXЯ #Е7 шlѕPG ёw I4еiЉ(ш•—c„;ќaЎŸE Љ… Mm‰J ёз  ДŒЦ ДŠuС +яж | VC‹jU{x ax ЁЄ јd / 0У C.“*л ЄА"ЊXlј?\  opдй ЈЖ цц‡v чь ђIР І t%тwŠУЬюYbQ э: ѓѓn \JSq пK. ‚U ŽІ^u Wp†Б bQ )ЄUј@Wf•Ж[– Œ Оа-ШзS ЗU ѕјѕ…тH9Ю„f(йю іaэЮ Н%‰ao3C ЉWeО?˜/\Ц ™= Нiэю’ P z ъ0Ј›јE™Ёг Mѓ `tОщ 6і „LЯN &SЖ§k2 М9)  Ъ 2Ш кеЊV ЛР$}БcцG4’ ЏsOч^б{`щл e) ˜п U '\ Ћ'Wˆ™Bр )ѓ Ÿ Пwˆ‰ƒƒaЁ› B ТгSAвi Œю Xw † … wУх}‹|‘шжAТ”.э>+Шц G дEo2eѓ: щЧ: ›: o: И œ А& RŒ =Jдn†і $МгgЧ жъ Zі#Э‚ оўш"ъауж pс њ к D˜ж љ/ TJфb/„У КЩф/MЂt*ƒ{u-T`е ђwа ё;CЄ гmOBGОCђ в- Žbi*uŽч Хb О­ : =š#o „п‰Ђqˆ -t˜ ‰)фіВ4 jчXB|> ЁС hЉ ™эЃ‚ ݘ к нВ­I эqJш Ј Аc Њ:œn X"baќ"Х1ža c„Є6 v^р­xvgИh $q шY к… –^V-ЮX™ Зъм' фз ]ИHб‚з nbžњ b‚Ј oђЩJ[0‰х [{вy јj E' €4 Єe”8Ь ЛEћє4^ ў™X§яgFѕ д>ё†Її TлКIл ц[|Ÿј-pšњФ]: ц Ёk[У [ЛЪз лVч œ@Щx‰КA‡ D\ Нp >y ј8оOЕP™.ѓњ АFu2L†8 !‹L ўJ‰цhЅм0q ј a‰JEK ZoџУ у(њ Œ7 aOu†о Ы н> Ху0чє‰9‡ TОеZгЧкxв hSЕXœBчŸs.оіdзirD ВЬ^ j$я- Е'Ц o 8ч N Г |žкф фЕ6 ‰Љ R‡р +ыУ g х_О xй­ ожд Тл >h ClЊ5rж Š -ЮКxo™ &“ ˜k яєЯІ ж"бy ЂV г Йюqн !с •šЧH•М RGЕ Pй6ž ёinCЪТЉ –бCєт*1 €Ё3ФЭЊ) x5IЙzе DU$7 RЄ #еUL1' %c 0€ „Х‹ŠТ<шч wсяO рЙі|кSy6V„б бW…ŠЩšю §{ К~bсъЄуДЃuџ+Fgoƒ КыЅGл2 Qз љџ ”ц ”љ RzТТ йхAmŒšЫipъ п­УР ƒ пАˆ“ Ž ше a/ l ЇКє39Ѓ nЬ­Дђ”Z žƒ Ђ`Л%Я§ * 6ioл”Ќ Є кК_ X$ ) ]Z {ъё8 X№ž=H‡-ц‡2vx(Ј  “Я ђЙ6ци ‚З -ћ 8-LU˜­‹Е ЌФ4Ѕ _~FY#Є шщЅ 2А•ЪD ŠА` мр ™ Ќ 0=€в ЋСц .СІУк аЃхЎv2ЊйŸ ``КШ фћ ЮЪч —чТђ# mШт„R ЏQ0 M7 б з/`{– * лfgd]ПЛоа€e Ў %ШЯGSž’‹шŸ—WЯJ(Rm­ Љt….ŠЖ в 8фж уыУж K^/Аа‚…!’ХЙЩ‰ЭЊ’З 1\ gЫЯ ”x єADёW o ЃшАfQŸ њ 4ђ:е1“yщ„лЧ —™ (тЎ СfДШпš$ r ˆ\ є 2юaч М{KМ yu .Ѕ (кm “'*h 6 „]>ыЈxС—l‡ј 0Ъ ію‘ ‚ќ ЙoВˆ =ш‹qаzчW=uЏb‡k‹н­л˜…Ъ/bе &Ђžв ;VˆА •И С ЭЉx­ЋF3ЭЇЁђ ™V1њ ИŠЎтgoaі_‹К лЈсVАkЬ№ Ви Щю[ / #~ ЫFW;рн Rт <Т йн6gѕ ­Ўж ИП |х Р№‚БЯ єЧE` 9НKёHL ' Ќ)>{l‘ Ў z*_б ˆFщS 6ўќуУDЪ ъA.є\ђHХ:№v†l jі›*э ŸИM TЃѕ б@ ^ЙIяїо 7М`дф œfjf^АbЅ Љ  gUйF?Њ …џЮ l- SЎ ВB“Ц ЊЯ ЩкNйЈЄхЯ ua‘ћ АxЮ‰,0 ьЂО}~ь $ЬХлU8 ŽХ ˜TнlobГW ž Gb–ƒ OBж№[ћ† б7 LЈ X оЏT:ѓциЏ =H ЗЙ)u3co:)–(хв b zF d T 1 ѓС I+ъE BBVоZ И ЅJ(в=‰ ТЩg‚< X/cЁ Ќ фZmк $NJЎї OHK Kiц(YяэС}ќ А Йf‡PЯ;МЛи nС š aї suд d^CќВ Ъг/ нђ_fEќBЏ“ЅКОgŠЊќм(Ѕ 0 ˜ћŠН…зёшАX њxь‚D, Iq^ІЧBєгU bЌ№›w˜PХz?K онЩР}јнюŸ ЈЅ q4 ЗCбІŽ  š@ˆЬ €j И3б œѓŽ В/ ­м їŒф К+бо. 15[ЦnџЛ 4Š 2ŸБ˜AЈ}п /Е ?svKр—іv чžiу=д І+E:NŠЂn4ЗоRЁОЎ џŠ ‚д нY^jжз б@ RK ф;lЄђL3&Е“ d?Ѕц Іg>X Œэ8†Я Ќџv тPјІ Pч K†оb`ч7kТ Њ ž Pœя E l9;є Rш Yž рЕ -(Г8NЁ ˜<Eз™. г1SЊЋчhЫ| ‚K š–ž ˆе ќ5 шц уЫ47‚ РИ Xm†ІB б‡ )УЯGf+s, иЊ Ѕ%ъcCУ§<бУ 5p КЕq 1 ъН9wмU5n Z )›зж јш?J кtЁјP{бЁ%˜ъ ?* ѓœвя_5wAЗ 4GЁНфљ ?> Й ёШ ж J3 Q “r_С х6 KлУ€ч­ Žhю Ž ­є~w › QSJei <У 3‘ѓ~Џ bђн аˆ СEl!+ƒ кє% x w[œN‹ ехь‹ щ(e06Kј< Ш.ѓ)vзReа N yк Я`se/ŒЭ*6О,8бa$ G nщу .ё §~„D ЯК РЭќєšЌ šџчŸ(Oуе ч);Ъа󂉆 Ч—Ќ +ъиђмЧШ‚ъ C Oб ъ 8 _`г=NіEw…‚ Nыупзуq Бэ „› М …I Яє :–|БДЬНЖ”F  sQ #&‡o t›а ІиƒJКЎœF ›SЗI|„ d} йџt  , 6р a Јў№]#ЌF. 3B–ј ’Ъ ~п#ў К} (MЋZЌјЫ ќљ ЛШн‡ !pLО§/ИЏВoгП`Š іЦєи1pU ;хTгЗY*”rsЇ k4Ж >wЇAсP ТNЭђ .г +ˆѕ dЎ K Шяlњ ‹п ўЛ ЋˆьЌ" a  ‡Œ пљ …&š,]щ" \ж o sОš. ѓаž.†uY Є Фі fц ощŒ)CЧ t%ѓ ФŠœ ‘Ž)œщ^]щ qgT Ўy’+i\™Црj !j ‚— нUуT§Щ :EG.O 1ё s:дH" yаШ H„ Џ=pѓ˜( jв+6Ÿ XЙ ўю*w *ўщ'~<С dб Щ‹еƒ†Ы№‘H Dl*i†u Y „A9 e бдФ Ем ї S‰] т< t Xa QГ6- ир\ЦјYф Bй лщ  џŽy7Ё зЈ{№Ÿх˜\| —LБO Gэзќ иг†Б[ ЗŒO ’㧉 єœ ќ9A d“ |Љ }  9m ‹~д sHёЪнƒ—4ж Њy+Л T E) ]йт 9Јu h К­ЎъEЖWВ•” x ™ЊкшаЯЊю Эј ћ\ ѕ?П№ JыЗГ.вБ  D;ˆ™ m: Цщ cЇ єiSЯ пѓ ==чƒ Ає/NЙЃЦРхOaћ У іЅ V& Цз є3•ЖЌ Нъ Ъ—  Ш=7Яръ|yўQŒ U^ [ Œ šцО^бю’\›СFK$лЭ Ÿюoа\. ˆ |œз •еђ7 …;~^NзФЖ"…К—р‡sT №`И&Z` о ‰Е˜y њ Pп c0ЋОX мБ Š‘ F’ ˜ Œ |I:Э Ц.c“*PпЂ ›О& О,˜ ф\ЪО Дiєв<:­n P ЬФ цзёѕ  yv сџ]Я iм<‰V5ƒ8ўŸУФ„ЧчћuYrЕ&ˆ­SoL*.0№œ0 Ж“ щsСГЗ–В6Rн8 FуƒЯє|яД :ажz#0%ѓ&ш2—$ыh3ё” ƒ Ж6Рo7Ѕ7з9щАSкиЩzЂ<ЕLC4ъ вD†ЁJoЛJ€KMЌMDSЇTQIЋыuUŽУ№WчšрzY…ŽГ>СЖ_№cГЕ ьfƒn’oO=ž|=ЭŠНwv=ІhwОzЅ{ф{Vy5ŠЖћ2,fњxал >Nма‘к“;š8›O›ВЃП›і:Ђ‰Ђўц ТќЄЊЌpВјВSРфЪё|@ єсVяўл№ ˆИe Ф{ИѕЋїт…ёЫјtљ:ь §ЁŒiЯeЉщљ%r>ъР §#$$D&Ж'А, š 0Ѓ6t8Ъб NхШЭ  +;b;’<qDц,ZIбLЖO4MѓQ/V,fгlњKnqУƒ ђuчe›xЇ}z€џ…@ЄЖ‹DI §‹‹Щj‚ эЈzВДЁДTB,ЕвЕЗw DЖ—ŽNЗлЛ˜зZмˆ# )ŠAА qМ“g€‰мZЃ  ч•ЄэРоЈпгunтГШf ыЏюQ№х§YўbѓыџJ‡*a}Њэv/jšи!q'ƒŒЬS‚§Ж>ћП*42‡;м4;6$7Х9~=џ@]ADDоGѓH;MPOP0ŸV"vј Д$чU9v X aV…,_[_˜b@fљq„sŽu xш%‡эˆ!7 u‘MщšЁМ 6vЅЕY Њ>ЏюЏКwО€ЧPM8ятЊЋ їЯъхъž№ˆёcьн-Чё’ђ\ ѕњVћќѓo' \ Ў ЬИт.A, 9‡Ќцr!;#U0Ѕ3…Ъв7;:IN@ъ+OrOЈT{V>XѕXZqZц[‰]‹oЬrЫBxs ZБ 4{Г ‰^ (u3‡‘ŸЖЂ‘ЃЯ|ЄЊdОžП!ФuzфЬиаcШgк_пфїхюц1ёeрCѕЯ8уљH Г ћ  WC ЦТ„lтЌH!Ў'ї)* чS†Ц‚2>3ъ45d7Г</Ї"B•BтFЄIоQТRTхxДTX=XЧXeY2Z§[žSWю„Ћ5IЬпБdL Й` dРeчeќfЩhk u{O|Ї}фˆС§Уї )ЮЎбVдc‚зєм…сC№:‹*ТЪ IлћЮS oР (ѓy/„Bˆ!р’џ”V§Q;уВLЅО УM@-Б •e’;k% \мјp,rнс–uIx&y~˜Ÿ{ƒВƒу…›$d&PtЄ†Žb–ё–Шщ-žEЃEЅЊ:ЋniЋЎкЎОtђЏЖG JлР1 зпєšfуьфїцю,ђфђ­ѓЈ$њ:BDfFЄ@ ФFC›tIре P/VьVхjŠpЃFMБ–jюŽГ—Л ѕ `6o2 Цп™№aњ5›1Л\jНn d Kў я—5№Р ;‰:Эм!МЁ Эj{Œ… Wшъ6§K QО mф%uВ­›жЕjЙšА !uЋЃ+KЋѕд ѓzЕю Ф{ѕ+ayk,}1б/ŠдЗ-e8щ ъд ЭЫ Є*ЂХЩ *бz5K U гT є Š#Ё]; ‘€H• ТКeызоЇd]Щm{ ЎЇ Д f=Ы-ДDлAК@t Yё• Б_ЁO2шв Я\WžPх3MyЬzB ‡q:L Ї pЃ фЫJ8I ѕэJЩ Б ўЈ\С–D{SъЛђ ‡ eB“ Ї‚чєѕБЖ„ Šј Rw |t+кt9ощ нO xc>bш< ЈQШЩ  еГЮй *BSо eщ чщ эы ѓ њ T]Йџ Ш н +bЖОсД  8N0EˆМй: y L s' ž. `•o6 ц(W §V вV †˜і|< gŠC= 2C yM іM 'Љ‘X >[ ~ гxО‚ ކ х„Й‡ Уˆ с’ Щš Fž qЃ TЄ ‡: 5І b– рчDБ mД ЄЕ /Ж УЖ щпЙ dLiенЕєРzhЎ.[ М&шјzюЉ &Л :A p•vЛ uП Oў cЪL]УС юњ cЧ 7Я wа Й9‡“Ќа Хв Xд фд їе žо Пс Чт  ц w{Јщ rы ( Яы Kю Ъю ‡xн((3я Fє тr“фтвUє kЈ ^уЙ s&ЉЄ 2 –'=Ќ –ф$И y ј~ oa 1"q!Тc 8Ьь3 ф4 b _"1a „ь Ѓ ДА р@_ оп Ф•Їљ n Б=ђлŠ ' p О  Zф >™ф ЌtАш [’[ nФѓа ёlš\ч  }% П% Ј' "( \) W* s* МЫ”g? QНFй Šј €/ 3 J€ _3 ? rНэ ŠЄ Тх,>d 8nт, џК[ Qз Я5 Ч)g: а> „ *mI ПОЬ; Q@ MA ƒB !0 Ÿ2шE ѕiuF ы‚Iф #ЖBXЫтўv V šћ Шяц4СH •L  янD# ‘r• u… гЩ pIŒx xM SO ˜O 3Q T >T cc +U сV ŽшБY Ў+ДHШ! кё[іф ]S "Z \ Е` ј` j5› (‰ …ЏHЦњс šX‚~b ft I‹T Auађh. Кj яl є+@oZw Uч } р} hКK€ н ‰ЦŒ М РЭ'‹ n’ И 2˜ Ѓ › Ÿ   ўGЕ UЁ $Ђ тж›Љ ˜Њ зњŸ Xэ )ѕ ўџЗЊ ‡н пЊ Ў- ƒЋ C‰ћЏЮ™Лў ќ†uв M< Њ Œ('ьє Ъ ˆ gэ}рЎ Џ ЦА mД 3фјЖ amШд у7 z ГНК 3Л ЖМ ЫкЋН )'ущ€;N€зш ! жЯ †fo “ Єѕх ŸšЫ }О Р ЯР >'cBУ п%Ў’tХ 'Ц Ѓ’рю ЄЦ iШ ^FЄЬ МЭ [Ю шЮ Uа Р 1в ЋС Гѓ 2Vйд и4_™ˆ.Q*ЩV0к ясbk цЯ fѓ А mykЌG: Ы'‚ж Џз ‡` zл *н Вр ас Эт у ЏМ ’ ркi Ўф œЮf* qх –е Шх Мы •‚Чь Єэ Fя пѓ ˆ* д= eљ пњ Јќ Œв Ъ• #уЧЎ€н ?ЕHzФ Ј‹Ÿ,§зЇ†6 ‚6њT  В З‹І”v 0CхС DФ €ЫїdT2yg*ы  Џ!злШ$TШL Ћ]%w?€ Іс .В„%З7§ і  L\хр K$mеAЊ ёa Ц' L‡W ь}M =Œ: аХ >Ќ њбЗ]’Ќa9FиШ КA !ќ —КУW 4А єЗ 1o0\щу ЭЦ т%ё +-w-qhвfq6Ѓ2к є1шb ум02ЏчУ0Ъ}ЩзЪЋћќИt СM”М4T'=z ZH‹Д3їMb0Т 3І3у374sVЊкЙ1ХќЊ§џ :ј‘х­hЄЂ?ЂИAО то l <9ЄН eQ ђо *і K8Yc и9m<c=v=f?˜@] ˜Н з@ŠWПAЧ› G(у|IЄ2п pз тЏЮAСBDBЯПDЧDCHBЎ Yhv’юo>К ЛK щ ALMNsNЙМ˜е ’к ТhlPB2Ц` 5U…Э:љхWЅhXhZќ[ _ў_lй rbр* Žfњ‡Ш žЗ ЯњL(,Ё7Гfдc €l…цFо [Т D@ПlottМ* S€v‰xЖIїŒ‡Ш x­Q$(<Ј&GЇz ё“ ‹иЙuЭ хгn H І ЌЗ›ЦлH“*р нI‡ fћ  1m‡џG  ;O &ЗБЕМЈ JPТWВщцсщ‘ž wхNЁАеџЏ eC+–г p# шГЄSјPЫ1 7Нжб qж э>IN*ћ†%Ю-   |Н-ќaRW]D] t2В\ |Шp ќxц& № УН qK БШИ3Б № ѕ>И в І^Ъ F Й€aняAфМ нFjmды ѕО uG C guoŒљ =* пOMAщM ‰ ЋФ Ф†љ­Y&l‡ƒЋgxЌычг ЅЩэHgР =б  VŽ ы+ібGБ лХ5 j9 y–R ,йN ZH:Pƒcю g8&CИ‘аЯяL г0џm7@ƒ™Ќo ”б?›є[7М дй;йЂWPХ ‡ж И" , '; ѕ'’ (Ў T,ўуТє Fqй eкС?^b ьј- ž x &=Г Ыу М6YЫГІHЂ о– ~г ,VF— Ѓя#0 #~ z с”| Ћ…ЇP P\ мйуB ЇK$хкV З†žM~a§R™і!•'0-юkП  \з'TЗГo]ВІ#E€мq[ГџŒELі/Р‰бе ш=8Ц*ѕiM \ nNbкС`л% Ž)zŽ, Hqƒ2Jя—; ѓUP˜ Њ"– 3ДЈ /э™+љОІЊ {Ž а=NЕJ вN)@љg §нP у шT Aь OHк&HьЯЗˆЙ; §y$Й mFbD `Ѕ ћ_$1 &oJj/ _!цК ЖQ›q9tИQ­ GЂŸЅ эИ m… фП ёь …ђ Ш T{ † nˆЬмЊ TS е< ЅN `n .ˆ ЈлкЇ:иЄЁ эQ“Žі6• ЊЫЯњ ƒ qœhІ5ЌЙй —?ЏH‡ЁœŸЂTє+|€'hЏѓ Јы S ЈЯ Шpg# EмT­Žнkд =0 ЕѕЭ >хўћ\зƒдВS *їWn; w Q­ bЌџ] ] іУ x eгиЬз aџ у Ќ/ /FuпЁL') Гy ЯE0Ьс П№ u!WА iВ žю­2~ђ & r№Б2 юм 6Ірxdњyqє2.П }Ањ јН ЫЃсEiЏ Qš1=vЪ ,;яЩ Uк+ :Ъ ц п ЂЌ Ё9Ÿ‰шBЄ‘@ w з˜ ЄeТ%жЭ(ќХ3}vУЫ‚К…Ѓ_ ЦmL› иwлТ ЋШсlшP )ЃоЉט&П”! „ Ѕh ЅзЫ] ЃГ'k–8yЁI$%„ Pж GR Ѓ“ эЄ –'ЌV0уК ?,џ#њy+изR Ф~ Ь& Ћ иBL8|н wћ є `н п; y; 'v‡єг6B 2мR– њyюNKhЇŒu№lE2В { )Cy a: YbМЭЛьHM|ТP Cе Ў„uѕzЂZ lз хjŠЁч{Kˆ@ЖЃ„c|ш E Š6Nœe}Њ рј cвз]Я фQ ‡r+h :д е'ю•yЭ0Dl}ШŸ вР Њ PR 9 ъЎ ыK л rО :Ш§дFлŠЧТЁ|Ј ƒzzpQ ™Ќ(4ђL„кЄ• іu*Ъzk•‹м№эї Ћ~7yG:›œ Г&ў' ’СbЛЩ0}љШ„Џ м7"=•е[ WЉ иЖ]т_}r a? dЖгnїФ ЧњА-^ ЊЈљ ВЂШ d…ц’ ЬKАŸ й ‰је! ‘3Кд&ЪO,ж>F=ќB Ѕ_БЪŽ›KЫ ѕ="Џ оЋ …ёВ|ж •iаJZDшТЂAкЏ  Ю$ ІВr {5і WЅ •И ЙQ–Ш < Џe ШXGQC„@Їє*W3ЎGб ЂP 4 ”Ќњ КЃ К C рZ’ŽžЇKнЋЪК\T4_?Ќvf™".Tx у.X& 4W OЈov ЊzsН щЭ ФЗ ЌЯч™˜*G Ѓ‹ ˆєнк ђ"/GžЅ ЃуFq[‡ Ж“KЇƒ яxЅтy‚ш ЪF B'Г{Ї ŒhЉm1hRУЈ• В$ ЄСЪ™ Ї TЦ ˆ MО•0 О” 4 мс w Ќ›Œ„чђ0Ы’zБ `rЪ 4 )/ Ћb Ж—њtšјє 'Х Б_ 1 OђсXO P[гф7л_ККC 0Р ўИ бј і4Ы9Ќ‚•z иёŠ' ёС Юб й3ЄЦ ЗУ љiвdЉнѕs Юя)іGў‡ю ѕВ oxz žvі9›ќœяб•.( r“Ё260 лЗЏЙ Ћм ѕъдdпЌ Д>dщ'ђ Ѕј Пу оSZш$ ‹З |PZЏѓeю > Kз–ц‰J вгЂѕIv9DŠlПf љf рШNјмv‚IЫqТ@DoЖЏƒ+}Х-Ј…Њ–ПЃF fэ ќЋ#ˆ§‹ц Nд[Ђз b€ бљY­­їLšо. лD ЃЉ хм Оc ŠNе ?ахŽ З‡љп:Гƒї1‘9ѕ}?я–6ЁЯџ#.П' Ий ІJЊ­@lћ‘{KV;Љ VR!е№F8ЧТк З#s ѓ#"ЭjL§‹ с‹ ›L ь‚Бr—вAЪ‡уŠ ФЇ 9‹ U‹ ЙБ Хѕ q‹ ‹ ˆЎЉ‹ Х‹ еŸd(”Y tЅЗЏ zя b.ёW^ }wœ‹ ‘ /a Ў  f—šи ŠЅн Fй к т/Јй 0ьO - п/fr 2Г yƒ‘E ђДЌk[Цщя А$kА  ›s = S zwM1Э џ mР*{Jsv‘л џPuD оn 3 SEкм ‰Iф/ Сƒ 2pћMњЄ Pэ # ‘ uЋ…Wc;yBp27”Ь…ёjy‡8чv™…|6y‡яu\П%в‘ЏвНœ Тбx—uя‘WГ1rыxдbЧ5Ю тН 73шѕ6#œ x aZХ ЄйMшЁcŒ „Єf7vзСl5!г0%Ї 7ƒ4 2иs —yk- Фр ­XЙ Dv/— ќX ЯА )В y ОЩ Щч Г-з9Oџъ ЎLЁ<ЕЮёь вЋч/ X’ Cx#œŸІ ўеkЯЖ^Х:Ы‰ at$ зЕСJvЧqФ ˜”ЩГ и–YJ=Р—њšЩм"Ур Ё”эc~>^Я/ €лK! ЙџЧ Bю 5_‰ђТЭnlЖ аё Й/ ўМj $Jš 8rd…–ЅД  б bП {л F” Гпѕzѕхm! ў@ &> нёаЎˆЯік э ййТ †>ЖаkЇГ ­Šэ› Э>фь: Ъ 8> н^]ь ”B цRк tС#К{V Мr Т\ $ƒј˜§ˆ?ХИ  ПЌXp ИŒ 8эФ(W^рўvŒ– G! ю< ЦБ Ћ mKК< Пц мk Ѕ‚ Рз1є№ц Dк7`о|~tгwЄEЄtu T }|a `N– "џ 6љ snюiЖЮWС‡ј фWDд ЂЂ|БuI‚Ј| n/ xZ hj Џr˜%P Yмu{A;!эD+лY‰ @UxнwЋѕ И vRВ^в EC И8 'г љ’ ю ЃНŠ& mE’bїЭ .W§ƒЈoтАге ; [1•д[;:фмМyО# ЭВН ЇжрЉ5+ —М (: С•˜Б Аw сљ I/Џ~!б O{-ј 6€D іъ†‘ХQx H }nжВ,Б3@ipхZ ђИ ч—М3UкsŽ‹€ '› Ћ- се>Ц Eэ<Ї mŽPK юœЏ КўXe\ 0С ›–ZLЭ— ЕХ)œAм1зLp• LtklќГФ(Œч ŠD %9­Ф+№T fъ ”‘7Нš%Iя#L4KІ|Гpгн|є D бoюXkN WЩМ Oеђ* оЫ 7 [H Іѕ w9{Ы ›8ѕm•пT2N4‡CУ/fњёP чЁХiUsЧД  +о +cРH  чŽЋ{oЕ ДЖ io  эChќЁƒУощт!іќо ЬC ‘ ŒЂ яЉ I Ÿ8э uРЮћfѕ š№й с^Йд 2ђ єМ ЁїR§ ЁоЭН№Э xXнŽЂ ў C ХщLяДQ S =Э U( €2t-‡ZХ э Ў жЬP‚' qaЙš­лёo сD u“rŒЃџO F cI 2†3Ћб Пз"Ћ§ яБ ќœ.†ѕГoЬь•Ю# 7гТ —А \% Bо›јeaš Щ cё ЄџЮTџ[ :М в_ ѕ2zнˆДiNP јк;О?HС( rn T<щНHЌз EVрƒ ёgHп Џ“в ‚й „  ШœЅ3ы ”­xp $иE5€Q_ѓѕЬ"œV zx%зpќ <Дƒ[> ДГ‹AW6 я  ъэSх ћт ЂМ ѓ$1g‘кћСЋ, н 5Y { Зтwp‘:ж0 BьЪе'‘ nѓ f‰sт ў XеW)4j ­пo‚Ъl"УF‘ =SЙf уПƒР(О OњYыв4й ЫФ ш>й(шРВв= Ÿ с ЙD(и џ‘ЉБo~yЩ­Z^ИйZ —‡Ж „с к @†" —Ђm(ы%їн 7š!8Q<›+ ЙСѓОёоиШ{E} Ѓ‡ЁS Ўк†Ў WCkмEqVМ Lь ЮQ йd gŸ L }Ь‹Ыq…{ы tЎь Фz жHwГ№ƒњ.OК КалBИC#*г4Хеm ўМУ зв bI"?лv фk p.Ц• i Ѕ $э‰6БёbАC ШˆМ› ˆІМи‚/^E wъњPoкQ˜І ˆя ёkE+Њпrз šnуљ ѓŽŠ№ :U *ŠЧWЯ,а*ёFKМё ќPˆ %f wё>х ‹Уjў "Aї—ІEZNІŒ ™‘ § -)7 ГўЇjЁ#%<Œ6JOЭ– –pЃ ] R– 6[пZ КC $ˆ Y‡к– ШВV= … TXO Ј)/кЂJ щуББ_џl†Ž№ є  Б &џ 5мжЭG рЦ rи… ”…˜ќК) e0 aё 6Ю V˜ 06чгRш”; Н> Фf — r Ž_ Ве кUЖ@ФFЊ< ;Х Gƒ( ѕЂј№p(Д 4 N Њ—Э"оё з,Ж ихЈ (@•Ё щ уш˜ KЦUгаЏЄомN 7Й ”З *C – mh† r оЉччш†<Ю-У­1 GјФ " lд ?аO2#›• ВfGcЇt (т ‘Х нO) ђQОїЩЗ_™н| …в /F ы]ъеe$Ј BІІЬqˆPў•b• Њ7Чrœ+ ЉіMг\2­цS:щ–ЙћЛРŠВ З№о€Rч —ыП ] йЃ †Ђ2дbЕF! ЩЦ 3џX§ Еjž^ Щˆ Еэ%єйш Ь&™Ђz•N 0ў Д…Е™ыqiF OфKЇ‡МБјѕсX2ЭІїˆ #Š РЊЅ™nкгW­7Бџ| UUё€е9uМэ&™;g™Є8„d+>7PЇрpЏкh Y› mЏ Бle P JJ 7Eй]_MВс eфЄz б˜ф НО `Tœ=Џ Шн“ЏСCоBјш Bр Џl вRЧ+ъЌД†ч8WЇЂёHd @ˆ=Xе ~Й Œ{JріпЧ ы žjhxЪtы, ‹i љ@']’-ЅOЮžрї ^m Wч@“З ъ•эЧFv k@4х Oц—HЂi}rаMо$›УѕRW Ф*п [HзлkЎн'њЈœП мы„ЇЖЙэЃ ї R? ЎD œ1ж [зХYР7 їr ъv Сј`F о$5Dчы mЭНћ я‚) kфџы %“ %Х }~I ŸЙшB% pœ,C9–r2 ь'kДMtЗR  к t k‰Lg k…ѓ! ъC’ yІ Йn–…*p КќъіК э*8" ўA ѕ|eœoОЌpСГ<ю Eћ M… ЇKŠioB% лЦ;ј u3_. ЎЖ Ю _ГњЏљ нн [{Wь ў TТaв Gь M8ky C?ФК /^ ˜ЩчY˜d єєщ\єр}1 кyJЅhŸ §йYСЗЫ2єЪєf - Џ/Ћ И ˜% Ÿ/ зэ-< €WfQ к€ ZQ ХЄэ QYUї ю›g' лJ!}g~ B ww/wН,_ Ц ­йї­1}  нЭ2Šˆ>^Оє сkЅ }ЃЎЦ[”я № ѓ "iЊ Ž bчф-$sЪjѕmЬеy!љЏV‹QЩЛxsŠ ^ИjB џи ХœЇВ мш zИ XцŸ =с Ы-кf ѓНЂp pІrб •§аIи& ‹  IT|Хоы7ГKw ' Сˆ Xф 1^4ЏА P ђЇц•дv Ъ[ЗE‘q–1с ƒДSM Чu ‹Z nѓЫL=0ФXт ѕ•} Д‚Š% ƒЃ бYub ‰9‡rІ “mЧs ژy ~vt ГЎЯф ДЃ ћqbŽšр Єџ‹y4™ gƒR( ™†(‚ wцQ3L io ”Uc&ЭJРфЏ– ? о Л'•?м!ЫЩЩЌ; џmмѓ-оы Ъ 3Є ьHюЪЗži№ Cч вЎ š0ыХ& 0 ЅЯ&A2ј`ДТGОi #2 Ыj !о х—EДШО ›U ёћ4mЦhNI К РЏ ‰W [Ё˜ё+ sЖ4" 'ј J4Т“\э эk –GN‚ 4 jЂhшŠПэ $ *ЎИ+ ўЋЈJ{ ,Ÿ фё ЌЁd# йї’/Џi1 цj—jёЂpWyсˆ S=зЉ"ЎПmkчФQ шQ 3с  Q њU"и 8 0> yyxZ„Ћыд*Ьg ЪЬ Ъ9Э`“F E*гЈzR З ёР^A <Ъ ЋЎ^^&#/$nЕ§ >^ vO„ш$шœШI1Na з$•сжџ­$)vЅщ 6nguљй? LN :Š ‹ЪМэ.љ жŒ I Š № Œ ‹"—Ћ4Щ tIN@ KЁы 2 œѓ оя[[ Šи -<_ .—a[э](8.—cЫ aО З т=U "z ;b№- ќЃšˆѕŒяѕoМ ž …тЅ— gpЖLо@QД ЂD ЭћŠд’]7Й ёJкƘЌ сF u rї’ы р шЮэт Л`ДtН‡ЎƒЕбг Ћ‚dё]ž#= ^q D?ЌєЙШR ён ‚Š. ѓщ𠐐srB ЧХ Ъ… RŠT*5# RZ Шрg722бp| S j0B'€ ы l цnЖ$Ѕ] t8žru'IBri c • в( вцŒ=g] єjh;к љs& ]Яш +ьn‡A™ 4& сџЦEЙ шФЬЇ Є№t0ЛˆŸ Ћњz1›Cљˆ ƒво ЅC дР` ЋќИЭ ­%|MЎ с Ž Й E|Ž Q ЇЬ -ЌRlЇТЙџ *>pе'œэ аGaўО'НБWзі#а•Э.sѕ №­лИxU ‚Ю ? Цoљ}н4(Ј|ХФ’ ЭG д@РiЧУ)о ўц buu>М№чьЋ< evт {xп Я'йЅ уFIŒ „Д i ›5 G GжxR t<ЛЁ6*­ -ƒ ]ƒ !э DŸ ў T6ђ ОЈйОЏE Чї Fќз$Зuћ&-ІW.n(F3Аƒ г?†‚уџШЌЛ№І^„) №U Њu ˆ• e U; 6 L” ЪƒjФe—c аУטnqя_ У^ (k 6k €Р&ўЙх*. %gъN§ eЙ пXм-g #ф Њ јњџЯvО • з› d Ї. –тŒЄY —•&ХлP•Ч}АYб‰Ђ иЊW‚” ћŸ• Бё jЩъLEѕЮ1Hс3ƒЬŒэ‹D— п9/ њр ‘m ™p ф|Ъƒ иrcšБr :І­ `D fbжyУ Кќ’­4Ž™›| J9OўыХXf  pГtГєВgГPВДВaБ=ВBRSБёіUC{‰шscgh Ќ ,яџтЂdІ2ЖqyЂГ )v )‚(ч^Žiœe YЊ ^ СaA“# нž Gq ЂbKѓ ё"Љ:c $wќnЗР’v РЛ §№[јœп )F шњŽGКшkYј ПЋКvЈЫ š1 IщiыУф@, ЉšRA$\оš ыкъГЖ…њa,LSVћ ‹Z/•[v з;#ŽЩ Xиў/вИl4цэ}‚ Zo 9N‡{ езОц $ Ю— gѓЦ§ЭRh~жT{TШ`I›GS-]з8_Jщ*NП >Rв­ ~ %=ЩЙ ђ+Iцw+,d} /8QV BcНВйуЇV |V YtdыKE‚Џ ОR fх X& А Wќ톹5 YЌ лd –@6f ,VclV+…dњС'љwиe й ~q qЦ ЇаŒY˜ˆ }ёЏŽ 8mHj6Šцp”Ё$р ў1їюBk ќ5Ы dFнФЉCДi Сл c)Й! Œk &UU { §DA…дБ˜ƒ†• QaјЙid/*DћШZжyrЧ# | Љƒ <г T2 у @$ж;?i|m`ЭК) еш Ч( 'B  ч ˜‚іdœ ш ‚Ў бК †h 0qЎ I fХ™кЃђч ѓJб ›в žU;?Ъcƒ л› ь ЬЧu@ ћl VќŽxђЩЃѓњў [W[P.ЬіЃ Чй E”PВ Kъэ,ph"BЦ В Х ДvS<s‡6CНяG%ŠM­’ЎИВ QЏ uЄ3єй™є8p Р§ъдi RŒнн|;F2  A&<§ Жб ћDѓм)kЩw)uS’6bш_лњр “щТ йIyt3 šJ?ч Џэ Uƒ›R hВе€№Ў—Oеш ”vцjЁџ HчЄY ™/Ј-ї€Ь Њ* :˜ЋJѕB S˜reьб яЙ ŒЈŸGг[ј є> їE и=T/}уŽ o 9ы8 ˜и— uН…+ Д Щ^ ю$ zпk0У=Оькtёісaж †b *М Kš 3Я]# ђ9tЅЌk №{ €ўъЈElф ­С §ˆ~K| —} ur‡g§rП/ иЈ ЖАЅ’ˆпв§ / Ѓ Тg Я n[RfЉ ю•‡9 і хП$ Ф ŸTѓО эIМП@: ГJДь A4R‚  № ђF !}Чрt %у иcQc _ў•ЊжA”ЫF]XѕЗЏ …Ѓ G ‡#Xw'ѕя› rI ŒI› ›К c mшЮЊЂ! %Й џa љђ ;dr1Ч1кa8ЎLК ёЃ `Е Ж‚z0’^Ж ЅSFѓT‹ Dњ Ь 8і !* y 7b ЮъsЏ& 8Єr6ЕТnE#Ни~ф№›7;уРф јƒ ќьp~б ‰ц ]њр8 WFмm {[ќ 4Љў{цЁм&)‡Р }…0… o ЎјPя{§ ЖžЏ ч эюѓX’Єъnм  VrрЯБžіО4БЬtлi &— 7 юх[оЧдЙ†6И Z еъ сЉ б] 5 Cc …6ч'ж†*  hˆ ћzV vг ˆкOhЩ Kр ќф˜;Ÿ .О x0ЖE X@žOl-SФЛл Ѕљ<АK.:И r_ wШ љ jЪ 3р DІ еUqD(ВU ybw *А1ѓ ^К А] \ ‹dУВ ИPШ&Щ @Ъ!]ŽВ7 D  ŽAВ зe Ф Ыь ” cи9M z^yщжŒw-‡№Е?Ў0^ E4 =xF Я2 Wёэ1З ЧЮ A;оT ќ. 9і1QŸЄ$’2ЁЭ $и sЌ ВФ Vђ уЋo2ЃкІ“Ф–a ђK]е З;Ћ їё б?•,~W>ш VЋ X“  ђЇ Ит Eх у 1№ы р1џ‹`, {Щ —< ŽЏщ7;е 2Ь ROСмcV ”ФxЗm`}< z ! u: 3lD< “n „љк Jњ Еј nЮT Pеo ХŠ  SgX|i“^} ЧЧ МGaM b Kђ 9i г љ,ъ0 у O:п‘CA a7 рhе jЅ8нIwЈњZ ДзІscXiё@­|RiЖє& ѓЎ ?4о™ћN A…œ А н XBш^F ,kiЈуеКйіЋб]є |ф ви ќ oД [[ёЄ ЦqUvH ,Јш; ѓ ™` &ё §­E:ћ•яиŽЖ’ w еќvH јъ ‚Е Є ƒ Ле ИхЉrФ'МУm,Uъo— Ј— я,9KЭu[Y†[$r%+Я 9]ЕХВ­џ ЅдшQзЌbRИъk\$ЇЖ>-ёШ ?Зr I)г ?IB•ђ #HРЇбж ‚Ї цСё†т &~ бW hB Mi ЃАЯP Ў#цLЃкдAБ Вф &ж0Fны_’ ZхЋЩ vЗЂ) ƒО… Х ]шЂц 8иШ5@ Ы bk“Б œBŒб Ќ€ "Ќo РР a†ї‰ Odк/ ŸТ 9OИдf < j;Pр UY ˜ўŠ~чsy^Ф сс bm@'дЇЃ в]|б(d<ИŸ=1ci cШ aj <“’cЪаёї w. +љО–BŸ WNvЁј ? СьЦМЁ: мg ‹Ъ=ЎЎNђЯ@ZЮљА •SБ) ѕоѓ!Mh—•y †Z ‹„ Щ ѓ!№ 5Zƒƒ8§FI] -Ž yФ/т№!јоuЮЗ}W@sз lnО!№ЉКД ьо vь Ž јŒ МT?ї @ўoC­Ё ›F а˜'ф ј3г}Ѕk Cjѕž Є–ъ ЕR‰EПˆРќ /IiЧ žv ЅW НFMrєk+щ EцЈtlf>ф“ЙЛ/j}‚—XАCяХ ‹7 ПЅ ”a•lІzZѕыћ Фc3€K Ц4 С V*‰ щСЯKкХ( Џѕ‹" 'К /б к–ым+3ї qЦ­Ћ i? Ѓ–q)˜Ж†H~‚Ёпj* /§\ ;Fх6 чу’е=[a  А‰ ж !Рbы№імЧ!ОцЏYdŠ/хD /Єх Эvœ”JЇ ;’Хр0 ыW ЇЕJрa ?Џ |С ;э GЂЊђ ЗК gd JbобN)(j *z-И ˆ&Ф0 с ] =Іџ4єUс W[ > šГAГ Ё ™† _i\рЖЄˆ˜Ч e\ Фj УZ3%x ХЭЦ :+˜›ЯЊуф Ё5>в m Х&„ФSJœО ЋА’“ЌЊ s№‹3С!Ђ A vзYнx%ЖА*ЋЌЇ ’рШїщ?’Z@ЂБ;к vfџQ OOи ф­ —Ю Аq0Ъа 4 ѓX x’‚`ЋfNB†HРц ГŽцФжП §ш :еœг‡Э  HѓœЌЗМЛьDrFЎі ъМд OmЧ6х7 р'ь]Щѓ э6€ s ‡Ђ rž Т ™H ЬWoро87j §,Bnai$;ЛUчmё<“j ж.мн пщ =*КˆБP -ML‘ю/­Ш> оЋ <– ж йiс лжљ` ™Эь˜+9 №\ю №ж9HE[9 нЎЪиЈ0 E _1l7 ћ$+Йm™ Pn FQ5їь51&AЯ%KЯM M1 Фщ 3HЏЪЦё § 2Біn3љэ< ^sЊA]М ХžpИ]н} ћ 4 sЙ œIЈг R0фœvp/{ЯBW щ нюcї{Ѕ 0ІŸoYwзГ Іх{П 5кP Ђ!ЉС.m<зG |tаMнs Вє ъ1 јfє n…жИtћ€&m ™РщPJ rwx ЇВ vЏ~рt]Кj z Б{ Ји sj -Бr‹ Хм\о‰ 8f пчL” ZЅ5fхз€ ”—ўя , nєўщ&ШЯ лC‰IЧK–Ъ Т4 )u,V&?  ]  †H ulh†л” /т U”me ЌTџ7Ћ A 4#Ѕ cˆ™Аг |§ Ю=z7iЏЙ ­Ÿ а Ёq˜аŽ•zэ ސх A… cbдК^ќ КУb_zФ _“gPў <ъЊO#j wГ˜ІшS a Y r+ \ SxЗš Œђ ˆН Б.ў‡6uwјЫ љf Uс‡LА h8U oэШ|ю/з аш;‹už|‡ЌР -ђ Ь qЗŒЬп |Рš”*Є`S j'  3 эZ љr Zѓ ЅЬtйВXюeеbB™,( ™ тбсrРœoЈБ Йщ8шЅM рл Bц …' лs3— *7hШ kf~зOˆЦ# (6 5O є\ ƒ_ zb ѕY }э eo с€ kЌ [а„ Ž„Е щё ‰I6 нЗ ‘Р Яї|Vиsл '… ђAъ c ™Ÿ NЋ!ф;; ОщїдХујЂюŠfЯar;еg– iЫ ьъ !;›ъЕ€)ЃбmщšЄё Р?šQžНЕ­м aђЊ‚f#+С НкРF`m ;,_| ) ВbŽе} ЖBЬj оj $П ™ѓТhЩиЌœ2`‹—[ы ]S Єя4] 2 _ HˆжEи Љ —эmL‘S ŒТ *п афЬ" ‚QZ™ # љћ ЋG С€„^ ў‚Vо ^ЇЮє…+ ]K Z` ЄЭ*? ќ OФы'3€ЧžЗSЙf ЎI / *Eœž Ш ’P˜\ С&#9 Ы;ѕ h Ћ}+юTК Cт iщ$шЦ ˜ Жё яŠ ЮŽ\_ )ˆ д!ы^$Ы™UЭјјѕ ЕQ г) ›Е#ЭЧ YU•=U cg   СЊПіъ=dНzU Ьв2іљ@ ›f Lє$ Т= іМ #B| lіPЛћ ž €н"1Х| єяeФ7ewЅ 4Р e:kd ?Р’ ы* EИ№ xGРŽј ‹ч љ wД?ѕВлО yv_€ :у”еO 5@ " Jя ”kЋc з)ѕл †/А/ Те g љgІ;ФŠ 4/ ‹д uk*Џ\ЙSх @Џ щ| œ п(вœpjƒю LЩ „уї2 Ђ' пъ :Ч–Sž zІ [њ6 uіПюZЕPаrT˜оў Кш ržzЮ Зe љO !ЦјїЗїІ™–ІЦГХ ‡ї лШ c‚ Ÿ­Pb6я2Ж" ” Юc< |odMW L– ОQ PЇ SN™Q –.С оŠdtpЁфТМ0[% ›Т Šm Ÿ€И=™(кшvВ eQ- лk 7+И ‘]30ь •/2л0vmoЈŒkІ› =П z1GDї;v—)є‘г КК—R Yа(o…pП@\Уx NMKwŠd P8 ’EУd §PŸZлХW7L џm ЅgЏЈ H†[ЕО˜)ЯЌ"Ї.› ­и Ъ # ˜- 0K џ%eZ€У\" н ЂEщmŠ)Ž їEж7 ™аЫи&M/ Eн §с9?Ѓ:ќ g^ ы„ K<щЧгЧG Ϙ €Œ O›ф М|y м  №• дV}џэ6ЈŠНт m —ё ЪKЦѕ з v† Fћ рOф ­§3­ }О @2c'$a зev€! ѕЯЌgE ­gцУdљ$e9Ж‹‰ЎGtЙЄ.~ Ѓ bz] Hљ P›Jй­ŠТFР Ќн §AмŸLЃ ќI nД…Б€ Зе@jб =РЩ ЁiРКp snУž Qф“ ’›Ж VЩЛYЈ"xё u‘DG "6 Ё` і§0Bis“ 7zыzПЕ TыK8шњQ2г‚O.w {Ž ЁБk\9s/p ю§ ы ! И QE%• Бr ƒМ м1 Г &4жђY Ю{Fˆm Bœ дkКkњЋќЬ §wнX ЭеРy –ж* ”§ ъ % • йiюя>§юџ"ѓЮ2y@… ЩМ­ѓ Kxо 3ЋЦЄшjW ю Ё–Ь "ŸlФАОъvL–…CчА sœqћДy ‚ œ ЛkѕЄЭ б žw[+ LGAы fM“ ƒv4њ* тA—" Ѓэ Є­ Е?’.P ] &Ж п0ЬУ7q‚!8яwœз{ФРѕ; (A:k р› !A!( К‡ˆ й оy P уЪ Ÿф k0ƒ е)s*FO›а /ЃєP q_ Ÿ"†6 ?XK‹Ц k и C Тъ u|"uЖТЏ1!M ;AMѓ kH@-;…‡ГЏ ИіѕB л ќЁтlЗћ‚еПp&”{ >S с К№D  г"ИyHŒ DT–I^Є Њ?p›p< 5]wл|mS Њц=Де^ž?аI 1ЋxcІ™ dQ§Ž‡ в~cJ]6c_ ŒІ ж| WО ˆ( #b $ wv О"‹q`—AUpн‹eiь?wы№ƒ …O № ^ъйЕ я5гвЈ? ќQ_ГЪ €БŒ )<mкo яebф cќ ZM }ƒР ]фђ Сk[ Пј1%в Сн jъќ/ ˆZІ+мЕi m2юђ5тиЦп"*ZdПџTЄZboЏЖѕ‡Џš/Sƒ `Л§Ћ wIФX>ьЭŒЯ вB‰} Ћ/ Д ]ОВIuў ыMтaѕПУ ^&, р4 T> АQqїR6Ф„ŸшцЎШ j  лЩ ЏV •щ3… џ{НT г? =0W0?оF fя ‘њAeSй lЄ Uя}…­юBѓ р{шa_р o‰}ї+ ІW „~ Й ˆ= ?х Ћ^ї‰ ‚шпЧ э;7НŒq гIfШDу у1ѓ!Т gA Š „ ŽЏд~уЮЩ3 > O(к­Ў Ю”I~j˜•2 '– ^-1 нwЇŸ^”ИЧ Ц мїЕіІHпж а ")зЄјљЪ ‚Э ‘ ЦЉ к† лћоЅЦ/ј!SёЫDYбК cHqš &:‚– dХYG-a •%^ )fД*Ђ ‘\‰Щ˜l )XЧхs Už‚@ Xфюt Тя ‹5<эNц{~ъ ;BыqЕ‰ыГнU+ э  1№жШъCx hг C1H™ь бШ _`›Eэ*œz[ž› |ю ѓѕ Lqб ‘‰]ШвШN6 ‚ѓOћхК 3 T0Ј шТ FЊ К.Ц” ђх :ФБЙыn&wpb WЅxжєХЯ+ ў< ї пN“ bW ;Щo,EРиjРo` CЋ (ЏЉ фРк‘FЧ „| пТ „U}h] зBmн№Ќ@ Ÿ[b $žZј eи Н“ pœым ѓ.С Ћu5 ўыж@ьvc ЌМ8щЋm 9—ЧoњW ­iCњУЏОр0 дe]uѓEIˆю}d Ёz Ќ€Ч žс‡+ рNр-†х€И ”Щ Щj &аФЌEr кd /л ‘Л…yыOщ жw N# Ј‡ ф| ЪЃ рF Y г, : т ƒm ЖШ Y“0п(TЦдЂЮ Mс јќ`( rSI Xr\ NџD ŒЬ Uџ цt Y]Mъ 6 єm ЗЏ t зKJ ЭХ v› щЧГіtЦ †ёя!КТ'-ЊЦ••9*X ‘Р ˜ц QБc= IЌ ЅoЯё ГN]cˆщ Чм8€ ­ АЮ=ы XЋ3 @v jSзy ŠX›Z№Й“w˜r/ЖН `я •NV…щ _Њ гw}(^f LŒЌ Œdє C&Nж и5щŸЊњ Хя дƒ25EzM Jj A€ У Џ+ ЧЌ ~)pчn1 Йєў €№/з г{  |чг­хq„<=Х+ =І Xл?XQ ’ С кp ЗaЪнQ Ё$zrNj‡п ab єЪ"€ щВ E“PИ М w …ЪPœ p^T-‘]ЇrЩ )%ёС E уР“І8рОfЌ \, й Я ДCЃ№ zЇя6_R ePѕиС<щЛMм› ‡ ЇКяƒ E •;‘SоёЅY fj шЯu рhжЭќ ИЂ6З1 ŽmьЉ,< d i [w“ЕУЦ( r5 В 1Њ+œ!)Э ОН мpНч zќ‚џ 6;АЙ ~„Ушаo џ;‘I mE=#bЃe 'йU1G$E Š 8С 9s њ?€@ ќ Дћ<—™oРvЧ oh l_ `Ў Л1Рй‰ ЩЕж6tЛ )є sп Јв• Тd PРY i‹„ZSMМQІY ж= vэ пš“рЬ%hб IХ>нFхР[Ф…d{oј^ иО ’Z;<9Ё9пJ щq UжИ˜Зњ@ з]]ЈwІ U› ŠmŸ+ lМЄs НеyХхƒF +„ФДцзR bА сf—вІ, ял !F xљїЕУс #…§ ‚э_ZV jЋ Ех I%ыб "5 н 4 DJЈ `\ 2^мВЃюр ІПZ.eMU“S2Ў   RP ѓPŸ3‚Р ZЎ –м o4 ёЌ WFИŽ ZOќ u mŒ qC‘'Z\ЗмњС ZEОн Щ $40+C чэ ѕЖ Bc яxNеѕђLі ЮSЩ“h] Sƒ Eн ’о €“…R SZ•1T #† Ям +щ…Iь+ jљс` ьЁ… ­ Е ГGaЄаfФч ;оџЦ, ПБ УœH+ѕš ™ Њ# РС=\G Aі@<А ћV  ъF}Š;, „! ІE ѕR э=ZЄaso O3  З%:т# Шж ‡ + БчЭvEš ЗљЯр ЖдхБU љ Ш лЩ <_TBЬw.Ёо ёЩ 2t tрэU Р_ jA œ™ к)eXќk tЊ ?NC9 пУ~5 PћtР Œж\ Пt№iзkЇ` 8Ÿ м МU№Н %щ Ј•s" Ё \§ Ћ‘5 ЄШ џs”ЩЅ•ў a !: ЂнВц ЙRУ5 ]§ Tт2ЂjЁгъАp<-щ н Ћ уfјV Ф№ŸŠ5п Рb HOŒ0]БЄ ”uиЙR5uєЙ ~еK -”ЏO р hv‰:I?ыФ1J…ЉЮШ#eхb№ъIЕўcѕ 4* ѕу:М зрМ ˆŸ o_S•ЮХФНWM ЊВ gkFo “RЄѓ ˜Ъ 4"мќЅŽ?Aпt*Џ † TƒV л,ЏЎЈZ G &›№EƒчcU ш‹]f 3ŸW!јЃМ“ їwlк …;uqžc№RП Ў3 Е‰ ‹юѓ@–Џ§О%l АICу;…` |xcь“оЧш МЗ ~gЎlШŽ ѕ\ЄiЈž Eа –(“j5М &Ъ Eџ0Д пёп ЮжўHЦЋб{Žх Ф рZЫу ’аxsФ \­йи ` Cм wУ гCBtМ <‰љеЕч Ў• aIш‚ НMєГl†З?‡ ~Ч Ќ9 “Е ЃЇ Њ М‚Љv  Њ\m7­ ќв‘ Њl џ;)^sQt И 8|MЉ љ ьv6bN з ŒфŽ6 їнгpЗvчЂ$лН у Яы§ыl Я)ў%›ж(bЋрў‹ж“ Ÿ} sбg'`X EƒУћ€3ї.O? 7ис–CSnЮї4Щr­Ћ "˜fЉ.‘рžЏ9љ‡ tЗIpXф[е1J ёsмŠŽO|]=7! …RйФ` рл5†Ф}А ž| јtƒш Y†ЖГ 33Cœ^Yž ь=MД :ЛŒЮq 1Чlй=‰д ‚ N+ t6f ЊЭ G ыcYђц?UЈр БжЎ фt, эiс нЅ Ші mљ "и^•фф h4}ь= 5Ї !aдœЮ ХЂ“а Г Ќ‘11ФћZwШ™Ѕ7дBT&ЫJy§ Ё§ Ыouжu OЕ =Є Bvя 1Є ѕT яЎ W ]'}MЁ­ Ф0e9&Ёх‘& с гT:ы?2bтІЃє:bі UB ”О mf@gЙ"к^iИЗі;’… ЦWt;ъmNd йt1saэ ћW~X2X­ZЭ—Šь Н ў]?&\B(њnђ `k…I Г_G2 ”% Ыѕ:ф ya9ЫЖDCљ­ ƒт Щж’Q RшбН. НT щ ќИ iхm›!ž еЎ ?ХжSЕ3 Ѕ“[кЋ_ Щ_ ч_ ` #` A` г?Œё§:Dh6V xSП Љџ“JУ ян Y[WТhћІ љљ _Šљ §‡™ж % 'w їmі›DhmцЮƒбg т|Э ПŽP2ƒ‹ˆдГ @r ?ЉOФц1TйЖДHдз~O еЄ жЋъУ ЮЃ щ Gё + Њ ы= QУ е‹x4ƒџG I.Šѕ k щэщ ’—Ѓƒ ˆkх9№›‘ лj:pкEsGЊ%— ЦCˆ4К .Hх} ‘ќ Gu ›††ћзУ3 ˆШ › J Щ šH*q+' |Ѓ $4Ё"dл UD-:–I#™t~ЫS іЄтH !№ м†3ЎUД с8ѓя Љ{НЬa‘›жшuџЂ ШjР’zO™ Т АX Pи 1й Зp N sЭ!5 nb `пВA C.C) € Fл‘љMя}ёОŽАЗЈ ЩШ ‚л dLJ“Х№ђр р{ Џd Яr 7Œ xћ Aяc№‹lql…ТOыKВ„v …k ˜яkеk#l lWl‘=lQWЛqпДцѕ4(9–‰OZRТ XиB0 ˆeЁИ Иp’ Р–ŠЎˆLm Ш Вх Ы;T/oЭe RА9џ  v” bUht gГ} jОм? vЋ =ˆ Іr­эб{ X? _х ^WюЦ7о­Хy  .šGЎ šsЪМЫН&ч №.^н цД nšнF ЭУ Ыџ  іЋ E>’-т‹‚I ј‹ z ‹Ю l1тџ AŠ~ | Фю Хu y§Чшe ; vT§ gšo\э 9|А^Ш† @žжеRTŒ:рЇ т7ЭR6 €˜пž Т0 я lcэ‰“ "ВџAџQ бЂi*)=,•.н <=`/?h1Ц№ЂўФzNО.•§'ГЊФќ!є YC шоўЏ эы лЏёWЭW4 Г†# 1]бšTЋх'  l š Ijє6шšј“mі Кт TШ„иG!шLљФД Пја) т ‘ј*љ$љтїїaј)ј‰~ yJЎQс§ѓY R.EHƒ ,JzбЋ…qe4 9X! NTQв 0Z5л( {<ўІ2œш.5т—š СE Iв ŽЏ Јч Ьш KХ 4‰ РPРюч211ZI (ѓ 8Щ УН{ gR“Iт­i CL­šйу'fчOR˜'е8і‚ I4 R’Ѕ tž(TЛ ДY” а “ Dz† he =4 s98 ЖsD ižlЁ/ 7Р AЛY( вУ)’  Nšа рц х` МN мDыћ-Eј­ёЊ ‰ыAэз/л Qv.vјН cJ ъѕ Dk Rk ŸІ Шчу • ј ИГšТЁe 1 Љ)Bkј'јXrђ ўЬAЫ-УЮљЎ)Є) ЩCўŒа‘J!dє‚цИ)7ЌШ%”їœ bW ea эCеD ЮЖѕ WБ„Rажc\Хћ*’= ЗzиЕ L%а 5ƒТЧ і& х њаЈЧ 8œmФwЖтАощŠŒём iяЕЧ зЈ~AaHЏм @цV-ї *љ ѓЏЇc g•Э‰ 4ЂАА Љ4 чѕ [І ЈОAX AlК3щъ p ŽЂ‰ћ9{iѕ6ФжU7 №ЖOїCЂ [Њ ˆК Д!f™Ы#B) џЎ x‰ zHVБJ8™iѕ–мљІm• Ÿg^5 v•ЫнКЊhKH 1иŠ­vDdЫъУК ц•- ”д §Ч БРъTєцћcб‹"e S#5 aМ ):ЊшЧ'Д •CђП`ВУ3Tж ї Q i Ѓ а !”wF=~ёS кk‰R Ж~зѓ 9_xјЂ” 4Y­DŸ ЎоЇщ ,о8 Аrі ъ( зЙ С§Š[ ƒ— #wvЬCњѓ @ЉEЌХ ={БМˆ> ŠЦ 1ї ?Q@j1JЧ P ЗгV ‰кеa5г‘$ Cђ<Y| WЖZiСcТŠ KЁр$СВьb ѕн$ % \ A ыElЫ~ Рр Е‚ „&0§З/•HЅЪšг eп лщ ’т zЏЫAЅ№Е&Ф )’„ ” ”5  A\Н ;ЇUvDтАЁ L œя ШP да `Ю ŠЩЁ_ѓ sMцЩC Xя фи ЩЮdш5бQи 13 шЭЂ с š G}LњXЃ‰fePЪVКB _ќ ?D і †”  ``мц?= А_ AžsX'Ч Ст_c'иШKВBŽюWГЖ! ? ж Ё оХ H A\ЦЇРwƒлm• Ъ&а<Ж 5 %%оэ ЃˆœШљzрŠk9#1 Oф SщcЫ( ў ‹Ј ѕ SТRb }Д[ Iv E Ег?њ№ЁQџ 0X™џ <ЉMЫфч„ з WѓвД1Ш ІЬљ3 Ч gЏ PgKУеЏ`јЊ@‡2 Rит"П` Œ ZryekЋ?—F  Рyaы{‰ -Jž 43 цо‰ љМ {іa\  ё} ќgъoбЂ№Џ эБ Wf і Љ }ў <“ ”О oѓ&х GK„ПjB?Ю —k=^TЙК 8е w(с^ ј? с ф4 кHьг ь#š^%Ц/нC69я\ АKШWC š•Чyь еU šˆ ЄўѓђдќšA›œЙм(Ђ“Фг WE B#3яe іЈ |Џ AЗ kT №,Фnтц];fЏ лт кO; Ы@šЋ `іж~ I р…‡/х™ 0.EИ|[№Аi– $+FАu ЬEц* “~Й`уЦћ џm TŽMО Z_tmx[Œн ƒš-С €@sf:Ts Э„6'Рпр Р зy aš [‹2{ fBЩаЊЌ BqэЙ…pя№ IсёBB'ќъ1Џ ˆ№iЊ W‹ _Н f~юэв9K ЋЗ Ву œW`+ЇШAЙЎg д>еѓєƒѓ§[й` яCОЄ M Ф >iє _a 6Т9з3ц ќи№– |Cl Жи –’ fп М9 jїИžьХ Gv“ чz =м eлAHЈП ?џ5ю ˜J FЙ TМ fZ yO1n аWІu VZ ЯЊ ЛR-9&jsјxkщ?€„YCPг‡’Œ№KЏ^ѓЉzњp Ы/ЬhуК“‰J„–Ў"{ њ?кJ UУ@Т 9 Эk Kъ CљНDЛ @Hы K тL ВaК G9Ьж|9 сƒФnѓ=j1„єŸп bм ”ё …№ IПБpжuщ4 џž4› Цrse!Ђїz%&u ˆ} Ъˆё˜ їРЈѓ 7 Ue @уJпЕ НA~; ї™ њО h1 є F ё<# :в§ЁЙ@} CЊгrcEЄчjI )B%€є)яy1Х РiчФЭž №& Д:9Ю q0фЉJ нYgЈJ ЃI“У‘ Б 7ї(ž›e pT Й eиxJ !эGe8s,IХ‡  vљНŸ šЉ \€Xћ‹љв$@PW A4ЅЧJз Ў› єгИ ЋЯХu4” v8ЭяиФБСC;EˆлHg ХХ‹U“Шbњ FЯ … Яu ‘т ŽЂ ьЕќ„QXЩ Ш HЋJ] Љќ шr‚– Ћ эЭŠс ь& za ЩK Ђљ rJMђ 8xИ 'yQ‚ˆЇЉ Л‰gT€КPй Їцъ  Ш‹ џ б"ј m6Ъэ0Б ѕ {'ЊЄwS9лš Ї[ЬІ O@,ч’vъ2Ы Ђ&ЎТШ 1ŒRљq Хн ш ь@ eH € ЂfСД ЕЗ‰ ”pnp*ГЏ 0H РL 6ё 2iФ sБ­ r™ 6–, ‘ЫйvŠЋМЮ QЊe0соnЫ ‰Ь xц Ђв {G)$ўГq=нэ?+щTЉ <9ЫBЫHе š<Ё №Ф ЎН02€  b' с\ ZЭ E Ќ‰ цЗ я ЮД ”н ˆќЩYŠПr•e| Щџѕ 8 `ЯEv(` ЃЂ љG КW ~Ы hі 6и , d1˜Хъ{УЩqІˆ Еьt)Я\ ьh ŽЧ((. L й‹ѕі ХeЭ2žeеrž—ЭnS& €YуМЁ p31§ь Ј„ј CL ыЉ+№ Ц ‚Ї ~*нdŒ.f\ <7ŠЉUFфrctћЗ•t”JТ &C ЃЮ ўЌвЁ1 в|іkЊ: ТI Д ЂA@ДСCВЃ Ъњ €­вnДЇh— ХLъц>Ђ дЈ ’ьVјаnFXzpŒ S-”6яSХNЏ• –ЂaйCЮ$ЕQц,зб‘шF žВ A0OїњС $=mp@еь й„ JzЅ ѓя †ѓHcч ^@з@r šЖ Йв ф?2UЮЃX љCHšФЦ'Д] Щ)Ђ[ Пя EŠ\[…р Hс Ш6 ч $§EЃЯц їЌШrfєЈА Х6Мm 6ƒЛ|‰—žшъ7аМ’ S8фЂф№=mтˆV$(Œ™Š šтO•ѓЛ u6[ Я2Уы— о№ ЦJу % €ц wљ“ 'xbи ЂlX(Гшб… +C В 'ћ ‘еfo ~ŠIл ЋЖ § Г% Гp­SO p n$юuЕЎCгдо УAiU$є§ f t тиz УSкк6Ѕ @Ћ/š2du8 е…` Љ~Ешо ~ ф: 8 л™RJ sDЙњƒQ0Fѕ Ђ LЪяз о €ЫЛ`mшПc&hЎ Ÿ ЉФ œЎ;z ъvй…хh[ ‰Wh@ [” №Eнћqћ—vˆFsА Юy‹[@9 Ћ| ;b ‘ 7{ ‹‚ 8€ py ƒІ‚Зї юлm<k"wР Tк Жd§ё /§AЭйВ8щ Ю‰Јp LЁcоЎˆџ:}?ќEзgž :$ ^л ;л ОУ ›x ћ Оž Š` ъќШ 6д2aŒ) 9vmЬE ІЈc{ W+’QпЗЅХ~ВТ  Ѕ1ъЌЉcŠR ѓ f[ € жщѓf ћ4ИN sT|З mŠђѕ1†$ Э:vя Ћз -SЂ m) рШ"YЮBНs3‹ "АјІ \- 8б S /ТЋŽJA­ …r љUс] ќž‹› й +…S‘XсП 4вXC˜У Щг N†ЮJ‰0› Šш Иі c-Зi8ЕлУ”ž:Z уў М;sc 4— Ф yз R’ іршє ˜юЯ9N+!9~Ю яRЙ Ь {€с%%PЁШЕ ѕDЩюqЈ„Miђ~Oм&Н `D>BwЌI…{ЎЗЛOя 4I M XЌ€ іС”iтЬс B7 ЦJжŒš1іќх‘B}FЉѓ аyЊUбП е цЋ €(о  ЌeЃX nщ ФVGzy Ы6†T (&tФл§ Qbr рѕПХ =  Ќєџ ;”0's a}_˜8] =6 7Ua‘ DС 6ЯХyфј пG№@ђЪЋX8ч4 ŽЦдQ Ње ‚bуuѓWѓ“ oТтЖђЊо wB\тЏ q zV—С m „ ЃЙ P|ˆ С<w@ЂѕЊЇю\rО” <ѕ w C/ јР <Я aУ\n–ІЎšКay•AЧѕBж=€3" J7Зw C 0I ЄH †Љ хZ №,0ж (№№r Г™Ќ]6K!Тр%o уLˆb БG 6\јoО U< aNkњ еНcэ˜'Ia?Œ LdG љ = К= g6—˜ Ї 1 |E e9ѓ†АО Ž!ЫL^"- d’bіtuRM!њ 8а H~PнЏ5qvƒДў ЧnхT" к@Ё0•h І=мsЩЧйАƒ-аv  *Й= „Ў mЎc<$FZ= рА0ЁИ.…Ј KэЩљС@Ѕ Ј‘@š0zхuЧ8 Н§нл€ШNд žрŒЬлF +Єж бѕ 1ЬИ(­‰+ГфHсјэн 5!аœPАЃIА ;^У2{ь Џзњ!ИЫЪnм”ЧcГёк  ЧуЅ Mhё> 1ѕTwc№ №Е ЯЛ B№ ГьЋPѕP€Їбфh˜;ящ–иe‘П Ќ9~  Э ) m лZ;еЮдю˜ \О|ƒ ‡Є єMўз ыVђy! BAЪ„ x&dЖŽцˆмA&ŽС •Щ*й<„ѓпJ *Ћ ,а ыд YDК@‚ 41Ањ CЩ+Ў г‹™O •NšUпЅ7nЩ’ œœ b вB;ЊЭsШxp9 ў§$Ю: ]хб-ЧпЁ`? =—ђ.­~тЛ " x]aO(жђ-сЛsъїŒлЧ kяь a93 YcbЁ `ШpЊсNz ‰ щоФx­"ЩRЂ„’абвmb ЈG b Q’є‡НкЛ9M ЇлЯн ЯИ>$Х>бр Іш+Ыќ *ЊЩэР СњдїiXџЬ ~œ H^ Б Ip њ‘’Ў dЗГ]ъЫШШ cœ І .bшЦ ВЄ м++2 8I‰Un2yЋš 6f*fIЌЯ ’ ДŽ"hГ6‰Ь Vn *H~y ќ‡ JА ˜г›яю і]ЅCYиnfж Јж бЏ ^~к_ Pњ`м юƒTo УK~ Ё€ Y цSSяb‚ TЏ •СМт ѓР іЌ$ $?§qђs 'lШЩ 8e ЁГ |Њ r,™ъAЏ ˜U… МФшo%F)Шс ƒTMp В lЦ %а!`Ъ”З “ ыѓ РџџRпк*b щw^g(^Щ]ЗDl I}ъ ЂЌ иКЫ a­^z * Œ№ ЁВ0з їi п :LМij-Э 'W eЈћЅ Пд ьыŸ[ ' џєЈ1пс ›w биѕQcэ8гџї лл ХСž[ S‡ bћЊђр[ Шѓ Є> Юf †в5ьИЋШ#+‡„’ж+8 ТЗ\ 7(CлxЌкh…-( юMBа3} FM bB0;mдЧH 2ŠƒNЇd Јq†тX ’ Ѓd џЅ  Г!ь*” Џ5HZ$ќ"­VкщЏ ю k = ”‹{p:ЌљЊ žn,=t“€$ЉТ Ѕ j-nяЇ ;ibф S !о †BlЗэдє d: Q— pўѕЖ— $Ф ‘œ -< пЌ žToЙ В Ї[ ј6 ;ХS5mE кg Йј ‚• 2StаЅќюvхрфFj 5"‡QGЛ ‡šXдкz2€ r;3ДTZК хЁ C% Kца5ы т^ ћN Р :> ] k€x'ѕЛ2ётс:!,ыщ ГŸ 1љяb“l§рЇ ƒ+ ‘xЩ#кЯmљ=”эh“‚ -къЗљBѓNt ПiщVі‰мЅ нfлЮФq(€fC •Й mо UЫЏV SЂUЋHQе СрЬ žеbƒ0h ј`ZY „жzuЁyš рЃ Q …И†? +cˆ c]l ”ї|ЌŠїЕўŒ Вw kШдл‰Нwум Ш‡Щ 8ŽEœˆЇ{№ Ь] лQ% С‰  фs§lŸМŠ މ[Ч0 p.“ci3Ухe ї\Ф?+ OgŒзwB- К.&FPS5ѓ ^в ъOїO-zTхcrЉGС\ і†Y™ щЎ o[ žЅpе є;J› ‘ѓ№iќG ŸI rтPMN Ї{  я‚šа Xw  іАр }›йю ќšј ВЂСUer№ 9M Wj†Oš“1' ЦВ™ќ T^ (Ьђ ЖФ Ще Е №Wчƒ"= L +ѓ VLЎnСсШ4џI žмU­ ГAХ§Q  о фƒ” Ђр*EЦ †Y qqyМ:я ‹ˆd љ8Z[IсU lz žЇЮ‰ г b.|Ћe |Ѕ ] &ыпв;šY H<ž 3 S—ѕq:лf ЂёВƒd[ jП@x}ZpHr б0 ­I 'H ТY B кNї!7ђ Јgё+8о 6§ѕЏлтц+Оbз +8Q зCHЕЁZђ’•Є P}f Я)Ю–SCЬоOљк#.&ЪьYKƒ LмБ#ЮЌ8MZ ж[ uЇ;5^Бтс" FИ w!єK>Аѕ šД J L•ŽsjKC ЛяпћSдIчG˜ƒ jТЂ &ц^%jЇ Дd ‚ —OДz >нWЇБkˆŒГu ЁM  з X:lв.ї|фїFJqm–~ џ„ ШЇдA s–НМ ГSшVid ЖQ "Jб=цС? ж3_ Њdё 9vUцђ• к Œћ  X| > ŠKи­Р CЈДц BnXл>є 'žŒž & !Ѕ b3ЈDh\ЧяЏ™KёуybЏЛ Ъ ї+WРyBЭьKT0 Ў!шYъlZDы Z"/JaЗ8 ”Њ 7є#‡Ёдт 8г ’Т ]"œ ЯŠ7а› ЦЬ ŒЃ{о4Їc‰ Sв Д.uбh7АFКƒ˜\MтйKм g“c‡­ђ }w TЃM о}hz› чѕ™џ Зуі Ь l“„бЃфЛв m~•0gTA’@O!В4ЧЫ;” єпiB+г ™P ђ­ Кœ UхйћЦ *Ÿ цq z#ѕ ТgLWQ}3ью Мћ (ž›XVЖ­ћ)~я•vQ!Я vЧ / kM 5d Щ5Ї9 5E”пEЧnяжИ Œ,й6 Чl |хШ|Šcв Н >PU ”ч СоŒ[юBЂNnНМ БdД“Œg‘ ЅК .tm оїRЇ нїsqn B СH №™ оЂІЕ`Ь Еu›tо HВ€lQU ŽР -ћ,ІЧ .! h› І’кЅŸ рБ‡;уЬгВG IcФ„\ œ"3{bK* ‰Jи[пу `ЂиМ Ь :ЇŽ V9Vџт78 Ÿmо"АЙ/ЗТS АŠ Њ8Г)яєу пў-Ђ ƒЁиSЪn‰dc5Іь фФ ўѕ cџЇ„єЦ ™і ў…+>/B ї‰ћZтПГ§ §Л™{ pўЧз; ќY“ю ‡. -,ЖQŠ x[љўhЛ– ЏŠ“kЫСхў oGzŒ žё”yЃОЩ…@†Ь* )S–РJmБ 2w <Ї ХS6. —ЏZЏW/о`я†‚–'Каt 8 ѓcыуUOœЧвцВ2–Э’ЛЛ5чДeБо)в яš[Т@p ЯУ за №г `P Ѓxы8ћ "б)cЫ o ЩSэ‹Bv‡ЌW5 P fЖй }к$З сb UCл6 п€ ГтІt†?ИŽtY‘ Дц h{}=9Ф jv–Т PE™мч cq m Ю!\П + ЗЇТ ЪŒVGgњеŒCьї ук  } 6Ш ЊŒеЩ.LНЎфЛœ ›š#nƒ+Щр ЦšŒ`ѕЖ §% %„Ѓ( ћi Р”2gVќwЄ `ыŸ .R 1HхСšйї ›…3 ]ЉvŽ O@ЯŒм N–лю Ц…1ф H€ УЦ GВ 4 ѕш вŽ %а Х S'Ь4 }G с…ъР_ Є]tп“=v €Пшš ЮМ Т” PЬй< дћ cЌmёе 0§жa р€юŒ/Г І[ # џЫIL"Мf^оўk \мЛ J ЃыЃ‡Б‡†0š ЌЧп œo ЇѕˆZЛ §d%J]ізVэGlЁj­Ѕ Ђ81 is+ТЭв cц0ГХŸC„u{% Чb/К —Ы Sм‚JЈ4 /ьЙ- .-ыѕ ѓLѕ {Ў вnD@ кh‘о /­•>…lІД GюITчњџ“т зjMŸCx Ќ~@Бdр 3\Cjl№œН1к[НЁ Ђ…AтМб OCтс BР„rР­J] іш‹Щ #nmLШд Т9BжЛдmzо і й> Цх й нB B–СйЃиџ кљ 3fКXcˆ=›Љ(й;6эћ ˆю?єдб@Lн ^l nW§Їє КPЁЈ’кже юaб‘ [ Q4—с –zL №:ш8i Ьб ђ 9П 9‰с YYЋИ ьф 3z ^@ВЪЖ €О зEжЦУR@Дš I @еcІ…O ЩГ§У rЉ ѓ] M QŽьљРkювг1ЌBВѕн є ,L›Ї„)>0’ %˜ /Љ WЋвu$` 6џ?Ьо\Єj њF‹b3ёКрD4,+]Ыl ФбԘцѕрјKŸˆф ж$ ябZ ” ѕ˜H`љњ fЪЂV+˜ ЊІ Ї4›sŽ˜ ѓЃЅ# g“к@ ’щЅрbіЗ%фГ в9quк Лd]hг  ЃqK Uк‡ Љ‰vL (\ НЎ|:šh9(Ќж хдѕ  Т! д7Р№ њgаЭkŠђ /НўвˆЇ  .O)§Ь юnїЖИFdєъ сњ —ѓ Ѓ‚ • рВ z№ ­/.уW g№КИ‹р М t2 –С ~…ЗŸњО [ Щ P‹ЩэaЏ r™tU^Р‘НЕтѕЦЫЂ% ŽQЪБИTўw.heи= #X T0Лѓ•ž­/…LTs јІš=oјWs їJ тyъyэ@ь–њ я’œХсž Pk>јFЯ:Р8†Р Qј S§EМџ >•йќЁП…­ "9 Џk#єф>ОЭзЧL- Nq]џ_ e* 6Й Q€S{ ƒєл A zмбТсЫщP§у"-џh ЏЎЙKьџ№ІєцтЦ ЅaVэ €ƒ ћК wЮ ќЖч Šь Zў qФ# я) 6N Чы -+hxб Л2њ| йvфœъ Ѕш Fƒ ЬЖ аХN• сА3&Mє  +G?<% йў ;Ћ–" МMXо0 ~ЈЗA Ћ тпЯЉ ` # ќТ ‘’+Т•c мл EЛ yI” i ]Igq6Coд }т k“ ™ы šB‰] юЖ-lНХо 7ЩG8 Хћ s$ žRЏћ пД cј Ў ЮЬ№. 4–TћЬ КWу.Š3‹7bWг Io : Л8 =џhfЗбеO 1ь Тƒ РЉы9у+-‚ эЮ  к ‡ ‹ ЧЩ Ќ8ib +Т 'А §^ GёWˆ љ<ЫB ш $ЂтЂaAc7 Xя зqм˜ { Т"}*H їf—`75T<це™ 6 Дв j ~ (5 8ЛК"%z)U HRьФ і0 $(h˜$ В /„2с КЮ бœ /ъ ю3 PаYђЩЋ8ЮƒІ ŽY Ѕ6@ЇQЭ ‡mDЙ  фЂ +Ь9 ЎЕ BЈ1ИЇђ_ЙgУ%М ’K Т(Фѓ|ї ЭН NяrѕН ђšvшд РЭ*р]‹}2 И0(Fџ З’‚”Х•šƒG4Г"q yьnх5–-/х ug* zNМ #АЏS4в k#Џ,цУtgџ ЗHннЭпЪ  ъїќ› Ѓ0u "Я< dC Вa Їe ћјА Д›ф!`7­gі Jb Е@0' (З ŒдЏl"v5ГvЕЬ^5 _щн5ЙU щ —Пu‚Єэ%дЙ–< ~BП ђЅБќpš Љ Ѕxћћ §&Д"Ъ Nl y[Ї‰ цLж о1ПRqC7  юЩ;z хх98 X AК Ж 9[ —ё КёУ:ŠfЭV U ўЮіž" ч|ђA X#ѕnъ}Ѕе\F‰Œ лГ5§[˜х Нsхg vјљ TрE„ L[­ SЯY3[ит[ "8о ™оЄ!ђМ‹ ” ЪO hK@ мl Zц v\ ѕ э ˜№ €} В9…l88ЉW Њѓ4я пЕ ж <ЕŠ—xь bОЅƒSЙ Мk CŒЌ DНŒ 2№ ыf fЋ i‚ Ёk‹xј ѓА Ѓ №І ‚­ э8Ив 9 ўвWВЋA+_AыS`ѕSŠ`;Д | "t я›з ›я@ Bй’–юl0xлХъв ‘[јi ƒFhy ƒо=№Zk#Ч zп Л ‰ к, cЅNеAї сЮћ–h. dяе‚ ЩІ f‚Tщ aв юм =f„ƒШaK!Ь - l6Ря ёфђ%ˆ—Ы &,Ў‹ЮЊ dпќ_ JёŒHк ž ЅNш {‰˜Џ T_Ъ ]KЊ` ЖзkЄ <яŒѕ С<Цп IЛ Б–NР! 7"1GzxЄ;n5NaкѓЦЌ ~i &J *г Ч М\wИ,Е mŽwVГgљ МhFy зCф=tЪQ Эt ХШ Tо vг ѕ NЂ ШJ *‹5ё6„Tc Aу" Шз;ЕPВ4є v;Ц-МУB2 } КъерЛTк TУбЕ/хЯdЦЯB0 tх ž%ьœ хаЉŠљЂи<ЏЂ< ЕЉ ?@;lїK Y5Т ]GЏ№рЈЂwкh аAеЉ ЏЏ"\0FвФ м ЇФ G јЧп ƒЩ ш§ l&§UЯ џД м8РЕњ :њ L™ц jjjxМyŸf Жџћџ {w d[OЋ ђИХe$3 КЄ…˜ ОВ $Б o^SjdЏO{ гД pЬžфcс—З?фйм?Џ о1U–ЩЈ ~Н/Tx 3% рЅН"лЋд8 tЌ hy V›ЋkAЌ ф ЋmŽщ %И Л ”s@ЪрЦЏН€ч‹пО, w3ьšON$c,:aNФ у€ №„о xŠі eу EХ Щ. и]Ё PeИ ‰UЬёIB a\Fn AпzА О$"в е Ўї№9нЎ?IљЦ XЈ lЯ ОIѓЋ Rќœд№YŠf Тœ 1х@о и`Э–nё5юTН tМRSМ<ф ѕx!§ +x з $F‡ оТт †S њфf%F€Д‹^g:ѕ^р— ў ј‹Ьж љ‘ Эз гЬ•PwT_ гsь lї§ Ѕd7 №R яP„ E z‘wl ™ёЙZx џзЊє K TУџь‘В 1cЪгV$ Ѕе˜— У’у‰З– Џ@WQЩРЩЁ рЭь!Дэ  рє€ѓЮ ЧG3ѓi7 ЉЯДџ -Ј“ šJn —ђ‰ К(ш €{мС †0ё K”`љ ­ћ(ђc8 ЛЄ Тс эT з ЙgфI!'д ­ШŠniWБі HOю @Hor Rс5Ѓ™–"ЄO2.Ј9~9+• /ыДц -П9 Ћ? Б‰Nд) iuЃ-UЉŒИQC: нЂxH NД(В p{ C7JѕЈА) m4гG Цf”ў Ма DЅ 9ŒvsBА. О7Ф5 “`uЩоKС џByJILю† ƒH>О› $о ’љ Ѓ аП$ArАZоЇ 0ѕ в#)йОІŒ ЄГ#щ 9` ОФ ‹ј9 T iТ ша|тНЫїЅО DП †цЫW#ЙQbН  ",ŽN э 3Ю dп юs ўšйчlev>аІг'LœБ•ѓeAсB(ч ЌLŸ њдŠжя sн Ё“ Щ џХbЮ“ •А Tы 5н З-њ2 ј8 ЊR ё rѓ ƒж У” \eе2 бѕ Ў Н=>И “ Ÿ6 Л Ё…_ Z йƒNщ G§  ?yІ7ПЋЉv ­щ DќyКѕИф/@ –Ў“ыяVьтB‹ ­/  ц л№ ЩM”anŸњ dšБЉkŠ™§ О\('Њ яЬ IД.ШЉО ЮrIїП ( Ж— э"œ€PФњu™s? Ћ™ ч 8С Z цz W`KЙ|Щ І/у FfщЅљН кs ГЛMš) ‰^ќ?.Х 2Д mЪЛЦ ї#—южИkvЗ АЫ }СSЉХ- лv Ж1шВ*ѓa Б} ЈЏ~Jы(4СQCшEЊV›љАмёС}<ЅК №в Ан   е;­юЃј hpb‹ YJ™ЗrzЛž{ Т9'SЕ ію™=Аї CзpЉSИнo _ зЌ C‘УZ `^ нWt /ЩЯ z:gГ Ш vЂ )  П -бKЖ #] LіХЁЭСЦgz МЩ ѓ' яZs„О яјЯ ыˆШУ єЪ )eП Р‹ УЂ&и Пn”њ^ Г BЮ­щ9A NXгЧќ Дя Є‡ZЫЇ2+—n€ЫJ=R! €Ÿс уp › u џк  ­+OљЌ^ dэ 6К ЌЩ !Вk§§9L ?ВI? уўMђьšх šq ў€ЫM•ЧПь:­еPЬ}Š'у 1њј ~}‡ ‚ [sйЭKP!5љг У\іXAЭоj g›Ид Ѓъ Пc#‡^‹дЯўD Eж %;–pй/ V4 ЃЅ…7 а ? №Зalл† |ц єЃ Gx  ƒe €е<kџ  о !ю ЗЩЫ”Ё ED \!rТ_n HЂeБВ ќe yкЋт­˜ ѕ; << нэj%Ѓ  6 L‹‚AŸЛјЌW Œ€)ЁгŠDяžС$yug:Œ §yxd„\ тљŠjњпk†§i ƒ –>е ёdѕšpЁ kгLš ŸЄP=Йœ "A .Ё "wЗаNz дH ъo Ё лR"| Љ Уи‹з єoшoІк> pОН aAЅо/ vK $йЫb MжfFпe- ђя  `Х& ъл™Ž YЫ‰f-фчЌ”~ЬРƒ ŒХ"R] ‚œ ЖЁ+tYZу`QMdea#YЬ5юУƒP E  Сљ џ‰ ‰6њ .| с %љ… "AZ8 ;a ї-} )›м—}С Є ю6хц K ЬvЫђ:5 ш |8O\г<Ї+‡MЊХ і Б ы5ЫŸ\И § hR b ОР в?•ЭEŒUq)ц DШЇ~ХŒ+ аlТТСЕБ–{ н4vЫ0EуMЈ a1хƒ =ш цШFY 2qhГр кьX шжŽ ˜yЬ  mp }(›Аъ G ш‡Ч+ ЉgE9?" §І шр є ^‡­"/Йг Д Љ‡ й) FH >т5ј+ЏœH ?ЛлуТy pЁ nBsИ\ВэIЧYpТф?]OСЎ \У C‹њ4Qъ?КгЧ1кn№Џž•Ж%Д п+D Бf–U18n 3] @н |р W +б жк­† Эs‘ э\=МЦчќђн ТЋ5kцŠН€ њбХЭъя •G є]ЋK:R vX P z  ь5xЯ „#њGD‚ ЌЁ CЮѕƒфс№щ —Ъ§Тк‹ ˜ƒ,№Ÿ&З 9ZLsЇ!њмјv^o2­ ў‹ZЋТ_ƒ­žМК јќ ˆЦLZe An ]-ШЗCт ;YєТ \ІH 8ыNю G KО… с' кЗЪ ^™VЪ /JPЗі @œрЂ ’Ѓ e*iж> &Ж ˆ вuy]1Š ‘ ”й Б Ьн їEЛZH 1FAА[З n(гфЂmПєШЮ щy VЅ Š”"Н‚џXЛх{ к§ ;№ d˜ fdЬз{O$g uQ? GUФ Ц… жux0К1 cТCбГ ` E* Џ ь; ыёђї•шˆ,WNп)Q{hiŽ№ЊЬ’eЧ0€™haj!2ћ К9 ‹^ оЈNŽљOoєрWl&,RYюЃ\† љ,Y§с Ж‹Ї ‚ЪV џиђЂ шЪwЌж] еiЎИ $!m ЫХ рч 4>­ х  A XЂ [a 2} „ g4ЦЪ GŽ …0 ˜Г _в ћњ ї“>ы{ѕ eњ ZcЄw№Žџ 4œЅ‘ с‡ ‚uоH шщo–† WжС{Ц тw;Ф0œœ;ZФ coSoдшb u[ Ј2 ,.Ц fхл LJH­5м Ф)P<ВЫѓлLщhвє ("` ‰[p9RЉB тNЪ H\jД5 \  •Д 9pОF уЇtб9 6D aOїNKи_жМd”гЄ4‹ ъSЮ zс +—ГЗ rчЌ˜ пЋ HG e—дЋ @ŽЕ в1ѓA.щŽr; TD=/=в=eD 0; BfЇ; UƒQЧПJ —  ayШ=бž* 7D„ Щ§ћ "Z"\ \'@ ш! hТЌф# ъОJ\ eГ По ю ]K юкЈ% Wр,и ^Iкl7ъWйЪг ШЗ П,м"G ЦЧ­ дЊ№hс 5e rТБBfаlл ѓ ЧН оЉ FžRxЦ ‡Kќм@+ БЄётіŒщ j^ Є/q†e лЮ j 4iОNџœтT  ЅD Hc> :xл‰ MаŸ iM[ог{ Z Ю JŸKg К\ К6 ьЎTd1Ті аНбpн k@Hє‡ Л Фљ mљ zЫў%oљ />“ 0 фгіN дЏ #fCB уы™М c[ žёˆ„lї ЪЬMЃ MŸлп•x ' l?щ Ѓь œ. ‚ч аž ЁŸ ПЮ?`ˆЇюьК ;(6+r7Уй(ЁšВхK3Щє'УŠjbц R Г$ RХр–_ІR ГGе5бPL‹ЁGК Дд ,2uњц]aЈ ‚r| Я8Trщ – ъёН­8уМ*ѓiШ Дб vKиюSЌa'4b… ŠЧ ]4ЏB85I|(šпbMи' lЭQTЁа Ь*‹$ФАщ ш§‡ Єa#'c?P Оз %ѓ†ˆУEYGC?мj/ Ѓ„^ Ј hЖ Юю “ђ \(i §н’х &A БjsTСёjЪ’Ѕјў% Liъў€"ќ< {œI‚Гyч~ оўFf< c[Мy‘Gb>ЬŠЊј„њMlђН aЧ LQ'Ы o.T‰f.]АxЄы[\И [)5‹q ‘, Ќ •Ž я n ЮсЩНpBи ]ќ 7sЊљИg§Yш л>-KAВЮ Я+;\ ыЧ P6ЊТ 8]а и~тЮЦ<›>`иЧГЅб ЧR OQ ыK ъ #м BјЖ( Эgн ffю’иdь р іŸъR ЇЮэСcИ)% Еh р Rо#Ућ ы d"ShДм ЄthlУйьxОЦ  \8ЧнRЁ d\ zš^JЦf§Щ‚, cRTS Hн№ ТС:тЄ ќ‘]s н„s !А Кn Ц—[Q Ч&Г `Х ЪZ нœ †Т 9В РЕ аD“Ј a љВ ’ŸЗ`гЅН сA og JбEъ ь Ђн6: Йl @­ NС qEo  Ю УшњdŽ› 9‚ш# ОrЄ NЄя y‘ЊSEJkЗz‘#д|м *с _Щ п  U]W*Э ”E™`нцo‚ œ ЛЙХ\X‘{^ЉдЦkWёрDм; ЗŽ љu 13QжT2 КрBI МPmщu?љx NќИі›р•‡ IыЇЙЮ?ЖВU@:я NЧ™)Y P&ЎоpЛ $=ВXdaРаzЭ5 =žJ KЮ Tъ ШŽ‚JњqzF, цhфF UFœ ЉЗm[жIwj/* Ў` ƒКiЦa}s eЈ ЫŽœЛ0е’Ќ Њф›Щ hвЋYд оYЎp JйИAю щЊі$rе У= 6ж ЮЦN >Џ;ф"­˜жВЩж w{ %сaч"Ћ Ђцc~S јЊ Y _ѕ *џ~ •IˆTдz,yg п­* ,ћЏ0Ÿ Њѓ.О Жр -ы ЏЋтpИp–1 - SnЇЮїqММ’‡Ог „яaи LЉiгTS}Ш tž k /п „Ъ%­ ­;%хёёЁ ђЮ Ш~ Ё,c+l7<О 2 Ыub— –uяМ+“ЂI'/Ф$ а№Ђ4'aиœ і ХnsљЇыkt Йg сE mяЬбВѕ.ў2 жнj0 ,!Ц ~i­џу /х"RњoUB =q Б1„о^ ] jЉф ч? u= >с“/ Сx№j | §ЋЎсA оД Rnƒ щАО]&!sИ љ6 †HiЂДЌ эшY^ РhiU чјб–{P Qbд™Щ”qnіћч…k rиЫЌ WP ђiŸШЇ .т “s 1Іb Їš &rт  ё{>С љгѓЯЁЃ S~ #ѓЎ>f­m тm цљ“Ѓ§Z›EрѕyУ žўŽс ЊЁ1 й] &_1И28 lђЂж 9 ЮKў YГ  М в_  чўvЦУt?Ў “ОШmЙ ѕ O G‰DV.С_Ž фЎЂн Ёо Ёп Ож у3 EF ŠГљ  ћ+ H

сgє8e +_\H& M VфД‡"хў ZDЛб€—у Џ` ОZ€щ (V `ї;‚`“е‘(€СD-h| mƒГз -ЕРжc Оo jЌŠrkс лi v, з+ ц рŒ r#џ Єќ ог ч<N6lъЊhЋ= ?§ “ ЄR c› эЬ ђ@Єјb ? Ћ2 ЙЄ tЖ ф•2]‚` :]Э А:Й[A ,“ Pw і B* и”* Љ"й 7П* нмŸIНЫІ pУ Iю ‡GЏsLЇїМTؘ о ь{Сƒ ЏŠ ЬівХп (!ШГ8у “ЅђrЪu— iZё)ЇЪ ПэЁЎ Мл IЦ ѓ†?Р бЪ o<Н  єH у( v&Pт<R‡ žО#Š вяœk Y9‚І_Œ›п Џ˜ ™9~д  }Й 'к ™ Ч$ЅVƒzWЇгѓX} HU šiФ} ідч~ АЧ ЯX ц *ЙвT~d u хЄ oдЦ.Йы ц UФ >•ф 6 œz #Ic-Й ’Wwи ŽПc ,! Н*‚F% uјїПц*E^‚Yъ 9Ч -gХ&žАuGм=КO“В˜ 7И3j`Ў;QХј—јЮ”QC шїЩљ 5їgј/јё™ЌіІігі _|i%dџˆВіDdљ%ЪšбБAЬЋcKOпYН3ЦЋ mТ E љѓмVїJіЃX–п…сE/ ‹ f]•д \< №Р э• ЄЖG˜ =" ь~O +Ђ Зцs ' A0EюхКЮџw Iд ‘BЫ dp рvŒ=gС—ЙœБrn~б фу v-zё/ ѕж œЂTЦzЄu œЊЗїМ žю a' JvъF/ !шХ xќ№“™ V–  ’ дџ М‹UП >)Љo>г­­н kП П —П ­П † kŽQOУП Ё8 У йП `яП  nˆBМ_“ fŠ иЄЎКЂhнŸRІ9l‚ИЕYё ч“uJњ™ н P„м кфхр шi‰в Ж71X ,”{ т В Лы `r 'сЭ№ И ЉяУ;‡АТщТ ш:ў ƒVъ gѓ W+К y˜‚ АEЗKuІ7 S сR ,…љ” ™<нVЉO2Ж" ЅX"X 6uв ЫFœ<•@дх‡и лП Ц3 ^Ÿ zС іЇ їџ;=НЁ 3~ЌБхУ .LС|Gѓ;]‡ 4o hЅ{7„а Дс_ЋКњ. J3 {t@И Ъ3ъ? XU 0GЇ? ˜8 yS їб џЇЅ~щТЩЗ 0˜Е*wBЇ ^єPы[ ™Яˆ }a щЮЖј— |ІAM Єў$мfWƒ= †ьЕ/7­ig(uј е їЏ;r§ЖŠk3 Pѕ L;W   šЋрqЙП" џKc{жг|Њ OWixjJпўБСXŒ`špЦ Cц rs+ ХжЮ3‡ВwmЇ>Зћtя ]?Ж)ЭІ|]=b/GІЯ ДМдНЩMт /Рቧ;›‹ж”Е1іЮї |р [˜Nak *7cюыќE ] }сШYт3 ЕЎ ЪrvЙ%xŒeЅ4!й еY œO іd H”ƒ\­† Y ЁRоЂ ˆќ ,ž ™В™ +ж ?с СLLф"Ахй иM‹ E Л %]ёx Z_b\T H‰D/Т6>JnЧЮ@ЋгкЋ>& N‘ѕф ކШаtŒ'qjОл„­ФŽyЅЪ ? 6Х§ TeњƒЎПБА “ЋИї k ‘$­ В,3( lЄ ОXЊЋеЦZж MЊ a ж‹ 1 Д% ІрМEђ‚ VўВЊ L{Ц WЃcР 9†‡l\"ѓЃ*EH |Wпx № Њ>ИGpx ыяЉ„шмmј„N /L ŸіуPkaz„ Ьm ‡=ђМ вB•*м яP лђ ЌиЅ‚UcЉ7!Й Ў PG _?( Ÿ” Ф8 дV"?fФTSN œ1 g oК (‹У Дё‹пы і ЙЦни ~#эSѕ*Й*V@LŠЌШ~V гB 1—šZ ‰мЈ‰ДD‡Л,  ж š щyкVШ т‹fБv ™ ž˜Уˆ> Ÿ4DP “‚4= Їх –š kk Ќ@KBh› З чЫœЊ‚С S'Рm iH ъ#р=МS[1 .ŸЅ,Ÿ HIv aj Ч:€/Яb кУ €$жб б9 ­•ДЯ 0 ‡z‚uŸ5(ќAІ@ Ѕеж њ4Њ нБš Їыš !sˆLfя6jТoб } Ьџ і= &АлЮRp dV/с MDо›ЇW №‘lD м~ Ёр Ф_ В • l­ЇўУE і у­ЅќIѕ№м˜ ‘T яpŒй|хЙIe—œT ehрœ \vї0ЅНёв} ˜!Б[vž„ ‹Ÿ уяЋx c‚.:' ЩZВn+з [ RФ Я$Mй(sЗ„5' ‡/ вЉ™† ^= 4 4ˆЈО2† єл мц ЯŠŽžG„Им ФацБ ќŠ3 б› Rб šт х њ sдЪЪ Я „Ђ rЯ8 X;nWДƒt Ь hя&Ъd2• ;L`ЄWм Жп }3Š7UЬьЋn Зm 3OIќ —iG jx+#Э h мз} цЗ KnežpБ У’ АР eсэ Л• фА 0эБ ` Я UKž +# ЋЕ ћс vvb0 щКEQЧ5нpЭфП$ ђёФ$7Ђ ZЋg уї Ћ=зaЗп”$ж: uR Њ: wЛR: ~: њ. њэy 4$ m•ё б*SћˆФ *Ч №X LrщА  'л џ• nЩ 4М jЉШІ {ж ™­оѕЃi в™ДP [з 7Vg„ Sў=aЫ џœ ф”йџ лъј(šј}3gИ 0ЧFПBGчЁф ‰ Шп LХR  Мr1 ›Ф }a ‹ћip) [.У[ Н  z ›у ‡Эš€ щ”YІТў“ОGр6 еYю*ЧQ‰Ь §ьѕч Ќёд хЕМом хiєПєo ]— аМ‡џ ћХ ВVУ‚T 2 —! б9 аТЉЮjDИрЯsFчћИR_ЃијЙeўœ њ ОtD‡ гБ ,ш‚k( ’fЂP NБї::Б €Фю@яz”uв .@БСВj• †ЈoK юuњBvVБйyБ,`<|L5 єSh š2—Љ  ,В6 Mz2 уКW МЦrQ,ктѕрЮ ‰Яџ“гxчŸш=Сїгб3 “љљG& Ћ0хz*кѕЛ #% Ї ‘‘ МП ЎŸQВ юмЋэйэOэ}эIљ p Нх qj h`l6 й[ ƒKУ[ GЬ№mQ‰„эх ˆUB q @Д ›Пю1§•a1zH›ьщб ю lџ B Ш Ёr‘Ћ h" ђp ѓ˜ Лj I• ƒbŸž@ dm,„ъƒўрrЅЈƒfƒ"n„Twa:ОыХ\ў0 ЈПщ>Ке ѓŸ mЦ 9СЛњj+ ёX ’l 85  tУа:l0pтЅ% < ЕЇ U2i ˜нfЂ i š Dš рцzї ћ‘Рї vrбтt cPжf сŽ –tз: РЌ ї… И­ З™ФІ )Ц š К_ eћшt „ яn b—~ W‡Хt2-шAŸl хJ„!#ш гuџOё k"у Шц ўЭЂь5qј3Ўдg9 ЩС b Й<vHаš Ѓ j5 `Ђ ЙЉ Ж1 t 8o км^QСпR] оKERFЃќ$TТ-G"lˆ е(g ]§jпEЙ ьD eЖЉєќ@Š%#—Нq ?iхjС>яš Œ[B№ Kс74R Я —)FѓАW œ‰ ЊƒБ@o˜р “аЈF5‰gUЩ‰ ˆџŸ] Цёь:#њQЫMїњрQЯН ЂN RЇе3ьтъЃuЯ ?E = Э<5ъ [њ М FEЧНKзж žŠЄx@ єˆ3 ћ*#y ТdЗЊЉУŸњм dl‚jеŒ уŽ~ a ћ) д^| 9в wЅФ6tПll lCЯ|ТаВ qТ$ Є#X_‡ эdХžU Є– ЏE€П~‡Њ ПД ‹Кєз jq џ5t{њ‚џs9 Г ЊИ—УщжЬфыŽmœ4 9ѓ ЗW? iы Зк Ц!sп‘ђѓЊ ‡`™ ЄuР2 бqВuъ •65 џ йU Иƒ+ж @… ‹…ГPРС iaї kŒEŠы„FЎŠiY Њd„fJ кТ&ђNЮІЊ#Б\zЉ/:Сб dК й W|№u о NЌљў і‰ДBF( T™ 8уa ЫЇE Кz$Я7л–ФуІџГ я'”к п Э Ђu X’ Х+ bѓ˜>œ1 aэŽl ХYњYЃу Є ЇЅ ‰’&1Y№ћ ‰Y_ц/JП"˜…YˆЖ э ч џѓ |Л ѓhзb ` Аa Gp] џ wщгй ГqŸ №1DAНyО­ Ѕ' эп—ЎG pт +С\їѓ6 žЁПђ у„ H6х ёёг {і™( т2 їU8Ј ЌUш0ѕ"œjЯж7ЦЅ Hї N ‡Т ўa’Ї! …ѓРе: ѕ`lъ Џ5Ÿ}ЬœlG VY Й —p џ ˆ] ЗП $zq j'6эDb‚ѓX†фШ0љѓ *ЈШ, AЃ$ o ]„ jgс#[чhШ|бР„ШСч^ ФС” EnЄ§№)Ьwьх ї§ˆ~ Х‰&Е9ў s'”mwOЪœ[%3Є( 5P хЕлSj$$ё€? јД їЄ ­LЯsйОє %Цs I ь ‚Ж7 )(J…QЊ^в  щz Э.э:bjS}Љ JЫT Н^HjКВ~К`њ ѓn tzNУЊд ф‡ sЉ-ƒpe— р` ь` )FШ]тwF%_ tv аЪ<$?–ыQxмј… ).]kvБ'Š„7UЗ ћщ ЗЅšЋЃ !“Эk {cGж $BЌRŠ“ ѓ› Ћ,нХZтй˜ЦЪЁєџе_ o„ Ы E o З$ я S§9§амhjЪп A\ …а bPБy _ДЎ  ѓ йвhh2ZUL Ъњ Љ+ єЊщИьŽ Q† o– оšL+Тн ыИќ :Є1Ќ н’Х? ‰_Ѕ_ь ƒ Ѕg ЈzjЖеžlЗ ›}яљ ю ыГрй• ТЛ Š?Њ ѓ?:V УЗ ‹ п–P"€ŸЗ 3љŒФ т. д4Ы ЪP лЦ4"ўф чr3 qЗŠ– Џљ Ьј ьl r%“[џ^ПЬЖ`d`Њ 8 o‹n"“$Ѓ ^ ПЭ…і^2"hє­CtжЈсИ§aK ss ТнbД CЋ№DОѓ ‡LПˆmœ9п Lу- Ѓ*8%ћTO :гЋЛ ЈХЬp^ ƒђБ-РьНЄRt!DСА tЊлю Ињ Ilкћ ?OAЙ O_[ vлу Њ\ Й !† 1цВ ЛЦsp€ ѕЌ i­ V~p§ F^ 2Г HрХ oц ЇЈ Aџ Дћ ПCzuЕIћT tcѓё)хГ "ў K“ h #v Їw ђgЁ тŽ 05& М?Љ Эф $!ГJ ‡?ƒРзJ &T"zTuu 2ў 5w€уTЉ W6Ш Ыœaж ФkзC їnyћ =ђ …tШ€[Мѓ$(фœНXqв7– q $ O— qЕ ЅŽ ј0 i љEИђљ ->|Л Ўб˜wCiŸо ЏЦуx)ѓhYxGіПhНJЊѓВо ‘Ы я*mУjЄh%OЅыVгВ‘ ‰язpй яЛ%МNUP ьT` lД8+ "Ќ АG‰i †Г {МT ›HUмѕgУ ц n-Б%Юtљb .NїAF‰Ф TSЯ+E   77 MЇu§ИЭB­Nщaх <т ф&у ї шq №w8ц r  iFi ЅT кцУХ ь кшCњJ3-ƒ*рСФЎБ"Й Зу Ѕ m UЋ Р#К Т#–3™Ф#зODm“ь‡­ BgА 6kН эk эWДФ  ›3S Р}а#!f zА'<!ЬБЧО Š "њ2M‹ K‘ Ў’)sЗs?„ š#п Kўс wžjž Ž k R ЃH№NЊЭWн›" Ь% џk zKЅД=аŠ го7R рWт, ” PАт žRКа ‹g jХПMїŠ шБљъєœе ЫюЙfVл k- XЋ bЗ: ўOЯjsS7П !q bА k‘Ы†ЉйMњvFў2ю.Д Q Р Eї =/ nя†ЛУ „: „Qœг B dm >2Ь gђфС. ­y K—RЩ рЋ{Ÿ л3a Mˆ цC ьC i, ЙЪMD ™ Ёn X; “‹4^ э Œррђ <! 0 ‚Ђ§'z”лzМd5 ›Kл ŸЛ ЌŽˆіYsЃЋ; Ф­ ЌЕ :cЁ‡ХјгИ +П7Д ЧЂ я Ў^ ™ з0]lе]@ žbфЊ е ЩEP™9Ќ@  h?ј8IšЋ Ÿ pч г‘ Б“kХ ўk”LЉ”‰ чK …’ +ЉЁО­ 2` *ю )ˆ И] p D4е№ЊС 9q Њ аЧ]Н>)Ё]J} Ф @їyЧ xPšŒyР фy VћЁb2*ЉуЁ‚iŽ1 tNѓЭ ЕˆЏюЗQO U“ Ko‘pT' ЋY›“Eb_›й„ч+ рБ ЧИиl ъ2ѓTт^ ЧшYj„ябрп M~ 4рЖЇ Œ Ёж ьKMT ƒPЛў№Њ0B<Ve Кд —DВ И ў^2M’\Яc  ˜- еtщcƒšьб ^г2Yа* Т§#ЦЈb’ .*T…iZДжБ3l u"ІOo§Šк™™i Ьк bв#Ќ:Fа -ЗЕ tЙ ѓC В}­н ќoœЉŒДѓyЈоОЌю ”љ Вн‚ŽZ{<БКђ Ygюƒ_­ЈЪЕ У‘—ч хщO6/dC8Л DЄ WБЕ@ЯТ /Р> яѓй bЙП! "šМЫ mY 7&ѕ Štб1 fk6•>B *ƒл MЕљf›[ O кoVнoeEБЬA CєЊРћuЁo$„жв - дк€ ]Е'Ÿ 4BŒ‡u4ЙкKы нк‹TЕfрСIЭ %Пїп vz iѓ ї  ~уŒУЪaь^ ЮЂVН ƒъУў ”oъЌи5 в Р1]о! щК,—їœc ёќ \у э [х ла ]nq.ѓKжћ˜nюPы ;Ю л чhюј |БЪ pЈ р!m•й%Ц†“^Ю ТKЪм ‚sЉ xГnЃ9 ђі{Э”g №2 ђђ •зІ, ЪЏ ’#Аšj –УH *є ѕ„њЙEЏY›ЭPmrИ, А(љt 'ЎNЭ’єЙЦgо_ Œ<`Є ?Љj oЖŽI Џ„ћ'PУЬ‡. Ѓq Ш&O|В„ ЬќГ; ш$ЋV$ H_И] шш €kќѕ ЦГ |-<; &#њчН‘81  ЋпЄ кezDz 9_ `<УЫ Џ#”TT.†в5‹0 B №сBWшТnU{-‘рбV” хo †Є!Я€ЩЌC§ "€J2PMq і|C;ЇСѓM ЮёыJ ЦфE љ“ŠПЃА‹Є CжFUt Ѓ{ g}8@!A юBЭp q­ ‹АЬГы.q Г| З8 l †цNШ  ял КЛЮo ^) вх” ї ‚у<з“ kHbeLPЙ œCO‘ ЪэД bсLŽ,ІQ_ўJ §Ё I т‰™ј…' Sо ˆЯ*n ƒєИS pќTУ yу Xшк іЯ Яz щдп_Ÿ Ф Ц­>еЄŠЖ šъ ТхKјн ёr2р’ж '§ fi” €j эМ W 7 t$eЋ ES C Rс хRКб[ƒ3 ЎНв>ЯkјЏ џЧLѕVо=Г њ?ˆ xgЪ$*x H:.-lqs J Uщ }‘ ,џЃд:ЦџmІ Ÿ<ћГу ФЉцЂц–H _цEHŽfC ,{ˆK  еМ‘ )^aЛ р-0Ÿ@Ж Рe^чb93јШWЭ EЂšB цЄ )`фв BФ №„ 0ЉѓFyЛ В’”EnwЬ ‹X M: ^fї2 їјE nЋy 3д FЃA ˆ` є…z(Я 3—Цe7Шэ s):У тА Й^ Ѕц†а Kп ˜Ђ rф, ^вAЕ 6Wh D sК H$n ž~ є’ Žч@h хі €„ lМP |пUЬ ~ўЂ ?§ іШ m2 VJP—Џ Ак3žюш>­*ьWœ(сц Ђш #џˆ1 OРџѓрЎаn 4[UP„ *І я 3oяЅ `ЊdКKр э$ Hь,ќ i §с < X˜y qчвa ! і/РпбXb Їv?ф (œВЊ&ЮкЭ  ЭGЌlБ еЙ>К?Нgж нE м` Єхy”YZіOде Е1eD. vA‰ЂˆлQвў л маВš' эL - 5Й C"QZtVЮ LН еuђR€˜Э : _ЋоѕWъЯl vЅ xВТцръјі Љ6џФƒ"Џ‹™фfVŽЫ ]ь> Ч ’Ќvf Ж,ЉO врn= §o Šи3;^ єџ ST#ЪMЮђ -l Љ­Ї,Щ œŽ N@х Ь С. -Gы?N :ž‘л ~tЁІ cС C|   bv™Х K7&ы^/uР (zРб˜Ђ њm СhЩQъAЋ\ Г иk“~t„,yb qhЫРєю е Н–qј љИ˜Šy3У*š– -р йFЋ ПО vOГjЂ ,нќ і\ $’ У*ЧŸ\ Q„ A]~A Љ лL Ѕ?ЪCй б‚‹4 3`˜ @—qX 0МЌEX еSCЩ л8 o$T№”Y~ iY\sи/ ь}АЄž яЁQ?VйŽg ЯС?; G”и{ЦыBі У šћ.[КNЙ/w%ББ"s Œ•!л`е ŒэГ SГ пк ‚ѕ aп т+c џьцЭt\\•Ћ АГK˜ Џb~ ц&цфє”Н ^t›Лйc‰ ВO v^ †є Bv Щ6 09ш х%Qа јК‹вкG Y x) CЁ  8Ъ0A+ПrХšJ mЕ Ч5 ЙЧыC - TE(YK•DaЕЮ 7ЩЩЦpЯЧ ы$OЉ G!Њq ‚ў5 f <ГOуіP R? Г оз нЫ :u M ‰S‡ЩЃ} —2 н6 }ќ < ^Lт"t n—е&3ЪYЏ dћ š §_`а b–P–$F іI  UU HэGИз ­ю9Žƒ`9 ’Б•ЮEшfХ^ TG чм Ц jфеGчsС аЉ˜ ZрШ wŸ @”? гZЛ(Ф [DЁ Џœ Уo ЉчЎI”—pЂ Ÿ1iэHhgQ9‹~Ў ‘e к- ДХ +ыђОЛ„н “y ї Э[ Ў лk_gƒуCMŸMІ‘жъѓ› ŸœЭ ЦO34\+Ђ† чA !рm*/ Ўі 3žФ$,р2-№Д З;y h Ц ћч ‡fЃјŽF˜-=Я+ ўšћ YYlЎъќ Ÿ< Œє*!KЃЫ R3н›кЁ bbКRœO‚ЅьлwLU.kЭD Пђі.M{Б MŽ Зш lg ч.Џ Ѓац” Л  =hŒX f§ œЊЃЋ šъьG џы tс ю~ 0P# ѓф  –U‰i К0ЃQž˜ Яз]д T ЕCEН з x: b,• ”Э р чяє tпї‘mYt Л#Ш;Mƒ yOЁw ГщEмu/Ќ 7š ьЁš ;В sМЦ Bя7Џкї BЇ ’ї пО Jp:Z‡x f||ЃФ е™ ­”Н: йž—]с  -е Kе !Е iе ‡е Ѕе Уе се Ену/šXƒ&!ŽHТJv ‰*6щ8!ET Ыч уЭaІ ђJ“B”#tА?Щ НY Ќ= \^Нс SїsњТ ш $}%N ц№ 3е –С С8 Ў =RAпЌ iф дBЏД pS2“w h Щ š4ь[ЫщБФUШ ВcQД=j9FaЏlаФб -н  ’ц ‡Ц‰й —|CК —Ж:/\U’™ f№ЇВ5QзќC$Q№ Э${\ R Лђ0R TR Џ ( ћЭ §BРЫW%~Xѓ Fџk@ќM.T 4PЊo ­7ŠщІт ъ” ’т TBgiMТ”дХІ/Јrє КьњИ%ЄЂ }RъHE Q˜э Jј pG §_эЈЭx<™ ыу ЪUќyђІ?–t ЪSћ}uU1d гГa 6Ž .ЫиH PЏІ ~ќ"ШglўЄbі^ Хj ЮМ д(ук…§ЉlБЌ9в>ёž ѕA ќј юд њ' Uѓ ќА\CШЮvвп/ѓaŠѓ ”ЫжМє Ё[лD Mš˜) ќ ќ Ш—Цї Тэ uќ<œ BЪ) ѓђч rћјH o- …sgК ) ;  bЄ€?М2 мЭ Есн G†ЛТ* ёяБе'GдТDš ]t >M%Г iЖ 4:ВмЯЗЩ ŽU C ЙУЯ KжБТ Д; Ѓчo€ОB˜ЉХ 3И йRƒ$Š  љФоэјєЈ BO1 ћ $˜ г іs Б ~ЕєЇ Ѕf@`L тˆу ƒXmЦ?>ІЙ k OJИЇё&_&ЦЂ#ЮtwШг Л‘”ВL˜ ъ6ЮРбgXБ N ѕЏйZ 'K.…­А, у( єv i…і   ( Џ& Ј3ш L Г №жі<ˆ”rMlу МŸ ѕ ‘ .`БмёЈйц№ XP)ƒО…Цф }KЌнЫzЖt)_ CЏуy•РКџЦГ[О /ћ:= ^UдМ  5P ќЦ ™_ Гаtн† €ѓŽšЦ8/‰з[Ѓ} %o[NUm bШњЏ] гEђxМW& š+л;œ\Ј„Љу–Ћ \з œЕfˆНаК–г.хќ ё Œ ЛеЛРэ-Aв™ Бжr GѕТZ lЙ† Я'ДБAт ,ILш 9K`W} I јЫЮ ‡ˆ „ )у/Ц ?>‡•))Se(кХИX€љ—Ѕ< п ЬC/ P‘†ДЬІ Q ”К —Я f …Э ЬЖ (eН6о3&м %6G lRЯЅ yВЖхьЁѓ<%= , {˜ КU>„Ь9 Тњољ„О‰ѕз, ѕ,) в}1цNпЄœml QЗ `АHм.( ч3 Š Њi\Ќ ЕŒŠрќ РE}}w" ’4@> - ќ}ž Mћ,; c юŒ щёфЮŒ&IЧŸљ 6‰ b<ЄКѕ,œ Wf 6 љ8ѕŠЪЛ ІX4$д Rњ v" u!њ?  Й`ђq№q"YdИ›F[ чБ7иK FУbѕ RZ Ÿ-0#( э‰šу ЕY3Q-ЗЊ\Њ…jf {§?F (AЩnFB VT ]v“4з Zиѓ 4 Ћ”R[ Є 8ћУВO'rНьсZje„ЫєAоVx QŸдБЦ— œ9.ђп@сŠ ТЉSyƒhVћ Єс 5fїj*Œ ­ W‡МF†,ђ О8 jШ|sиUІ +^ ‚>Жжj№ uА Д9—b ‘С iт ЩY Ь*BMH  Л ;Ы ЫZ№ зі fНyfQВšф *.ЗЧЁ#тм ’Ї [tцт‡8 ћРўj =b3гq38 = п+ *W тб Щˆ\ у=Т3јJ БQWВ ЛР TУ ЁР z0 С0 Є6<Ќ ‹qkзЕк рЭ|9ЇB ѕ0 юVy+ŠКгE "%XB 'ъOС *_ /Б|љ ЄЃ Ющ(хWX ёЖ PЫBz7џroЗђ ѕ ž+‘Г…}п< qЬ fћя ЬАUр сйўŒž ё9 ї’ Fан[Y/ — #’) —“п sЃЁb<„ю И|ЛnШFk /пUZHрѓ ˜ЃЮ wJіNьЊRг "zБќ‰ NФq кX ВЩ…… ѓsŒЧѕaYR 4Ф ЫJ w>Y”н%G 3Y (.svГ sЊ сЄŒЉхTМ§ЯоxyБ ТmВ} tXЎ х„5G ѓuЏŸ €њ Лд *[Fi З4ѓѕtЕС,0:"h4Œѓ іX mвІ ёп zЌ 8| 0и§x 7@ ! јЅRъ-ьа M‘ eU Tqzџ бp'X@§ѓЛIс2 Š)jє*‹=іЂ:№ • п Gъж љ "ЏЅ`с )xн ;GКш3|Z•ряяјІъяv.Ї@Ш' 'V Г #\gсљMl ЦчіeЁг sњ Ні A[^І №?ŸH—нЌшt’YІ •F’Г ji( ’S „YСы…ЧZћOзЊŠK „O ^= хХc­9[qЏЎm Ећd љ\`Й ”Ђя4П2#ryР•5:cшpѕо››ЬШД‹Й Ф yІsgі=П†ы_F74nn. Д*5 X' {’m„š&иЏЃэ ПЫльХнВЫ НјљЦЦDO+Д›@6 џA щdКbS K OЎЮ' ЦИkГюrx НШQX”pФчEWh Š* вЪО N{ [ Чm{–VBY /pЧ}'`ЏoЬlў ёђ šє< Uœ О”3˜}_Fa gcNŽ ]}‚€“2‚ч‡F бa c ”­ —я0%;гЂ•GэЫ   tУўЁЋиў­ ђM фJ Ѕa pV<‚q8 žЦ њo Л ЈŒRЏ  нK›Т%$ыдЋ 2Ъ? ‰Шxћ ъФ џ\ї#‡к|>^Ј^ Ÿ'§Ф JШ 53ЈK žFqж4K И' ѓ 7x ё™ T$ ы&(пS iЫЁ wA уоx4 $ rњHЮЏ22€–KЧ E? ™N фЉ–B Б‹‰yьWЌ 'z? ѕчFЃ љ žJї›Тљ ]Ќ C{%м Ь3 Д§ЯG† ѓ ј ‹"Іѕ`‡M чЖ ю(…9С+/pAД г œЌѓ! љѓ(Ž ŠІ ja Шœ—˜> eЙN {ƒЌФ9БШ\ њ… j-IT]{Ж8j œ (ж|rœџvЙюHl4o L Œсв†D{ fz @ Ў˜ љ гX Хo ЉщJ…{€ T3 [u c; xŽ&щЄр 1/Ђ „й†TЭL ']$„­њЊ4*Zбi!а!y|iсд#&Х œk’aЕžьЙ …УSЉвхАг w ŽЉЏѓbЯНЕudYр_rŒjI Ж6 Ъ вm .Ј М/Йl ;*е њ#СGЬёІ Hпжаѕ АZ’РУ$ 5с„gЄ s€ % е СЕv_§ѓ `pc'а Н ЄKзаXˆ "егСЂ љ •O„r R] ‚ ‡мЏGR " iЩ›˜%ѓрЋ?Н КqцIbŽЮЩё3Ѕью/ >ќ В1‹ЎПццЖNяV„EлЫˆЪ д.ЭSj›‹Э\‡ I WAuБЈЩ‚"џ~т-PЖ й.ь8i[˜%8lZ 6н рФŒ~ 6 шжкБ€Къš u& ыв_SMѕы ВŠЫ ДK—OŠБh.g (p№Љ кя Є&І Wо йЁ мqU ‘- Ў,ј&+ шЬ „m Ы) Э <54‰& ш Шг 6є… ў—ф%АсЛл{#ы (х ‘Gkм Ђ ъЌ ", „Ъ Fc _јB'ръвлp$‹г 6мѓћ Bh3] ЏЙ tЦ уеШTV рD–њ T}Гˆ МЬ|h э#pћJJ ž 5&ѓ5Дwš— Uи *‘ )!ті рЉ bщ‡ЛтšџІь(…В‘ˆ †0kФ0IХEѕg cЏЪ—] hуЛ@пŸ '[ V Ч `. ˆЗ&алЌ…ѕ ?A Є sбY™ OЅ ƒЕ (І A }Dчb8\Ь Э?œ­Fi7ДЇбџво ЃQ€Xqц)Ћa§FГ аaў_"ˆO ’93яX gЮц{(– оБ Т ЖŠ!i Є‰н-1.тsќЯЌІKѓ™’ {,QYjn%х ѓ ` hь lЂ(ЯД> — —?•sВF e‰еx ЁЏ ˜п'Ћ`ћ§@ г …г&`AЯв™Yќ.pє ]Щsм К W{ ƒX E [ AY e‚ прBO iS; а E xŒƒ œеZxь Žд>)ђK’(gВ## шFЫ cv яŽN)g4 џSIЌШ6J Щп Гќ  rњ ДСф<]пlЃЃQ…њг` уђ-{ “) {. л›+AЩ&›ѕpLLдžT }> Иž|‹д~ uP   @ыdiя Iр•WAЙ~| Œє„Q“lZsьŽхХЃе { ,‹њw GАVІj ЄтЭ‹ †Qx ˆ Є kцџДfjeњЌ§ ѕЄ GХжРUgЯ"wќ щ іАН[ЦЊ юї“O t5ЪN  oMѕДАНѓПт VDДХ­^ KŽэ4Г'3љ/<Ѕ•еЌт SЋ8)h9-{|њСш Щ+єб _Ž QІ%yc&aŒšЗŸs!ЬжВj J("ž#ж5Є ^АТб0 с#з›/x)ь, B…8)Њ_ Це/y(шЎцrОqНЈ? I-Џ4 Oў Zе:Fnm–pnoThіlЮkюЉz”q,їЯ~˜9.‹7%м>)ыЧ*ё8tЭ–и@ŒЇЇ1 Е,јХ3“Ќкxѓ4ѕ90B8'Ћ3‹ ЧЗ RuЕаЗЌ9_u,z­.yЛз Y/†  E,'у9+E Ќ XІ2/5• Ю&Сй8*ј5Гƒх1 44QШ F} ]Г'х` P‡654 Х†vG)јЎK+ѓ„>I“F!Ы !Эщ.А‰#/`1 = N5(чŠ0г"|iі)ю&ЙЅЖƒ"вѓ ђ!Яќ‘U{ќ—Ÿ2y1Є}џ(ъ.с-S0k3-/!(Л,•+ї'ц­?y &п>7"Ј7$:30Z™X=№30ЁZЋn %"ап M5-њ[&рВ-ќ>6ІМzžо„м+ѕџОш2Ѓ 7!Ф9/У›(,іc2s§Aђ Gp'ф!’[ Vм7%Ob ФO:2нУ $и#2UР(g^4 Ux-ћ1.ўt7#x$Ю6 ]/гeйЄЧ!ЮQК0ŒћИы 8&1 … W5*я…s5[#еМ)эгНP#О(щё-§а%оa$йŠˆ'U"бœАw;кŠ`‡Q \N0Ѕ4 +ђ Tи Д Lшщ&т­З5! H% [&€Е4§f#:1dАУ"гБ$кЃd!Ъќ `:6Л Шx Dј,љpeЂGr.џП ‡šї'™БOІˆ,˜„%нq4a7&с:9,#д)Пn*t8(6я$лЅjy*№T C‚4(аœ|D œœœ‡њ˜ХHx6œDІаS P5œм рf›˜ ˜6œhРœи›Ј6œаˆ6œ,U˜œ|0›ќш›,8 œ˜:р›,L8œрИ œ„›DP <Ш œ8cИ œфM€М TnА` єTА! М И_ 0P$ ˜P Д(М HP$ и№Л 4 H œD)@М $Ш! ќh‹$ X‹$ и! ш! ј! h2œx2œ О АО РО аО рО №О x‹$ L6P$ ˆП $иo" шo" Д0 П мјo" XП ФHП фxП ˆП  hП ЈП h˜П П \ШП DИП € ' А' TР' 8иП р' 0 а' ЬР<(Р №' $˜! Р 8РHР”—` œœ XРє,Сp8Сh0Т4Сh*№Т ШТ„њаУ X œ№РУt Х€ХP"шП є+xХ(XХА0Х €$ Аp$ $ А$ 0 $ Р$ а$ р$ №$ $ $ $ 0$ @$ P$ `$ p$ €$ Ь^иФР$  $ А$ 8$ ЈH$ X$  Rx$ ь Н 8h$ H А$ Pа$ Ьр$ Р$ 8№$ H€MpMM| MxА! `РMєаM(рMHАM@NT №M Nј N0N@NPN`NpN€NN NАNРNаNрN№NOO O0O@OPO`OpO€OO OАOРOаOрO№OЈ$ И$ Ш$ и$ ш$ ј$ $ $ ($ 8$ H$ X$ h$ x$ ˆ$ ˜$ Ј$ O›(O›8O›HO›XO›hO›xO›ˆO›˜O›ЈO›ИO›ШO›иO›шO›јO›P›P›и! ш! јИ! DШ! и! ј ј! H@Хш! p0! 0ј! `H! HX! Ќh! Lx! јˆ! L˜! xЈ! (И! И! pи! ”ш! Єј! ”! М! Ь(! Ь8! H! €Ш! Шh! ш X! Dˆ! ш˜! ( ў œ! x! < 8 ў H ў Иh ў иx ў < X ў œ ˆ ў @И ў \˜ ў xр ў ја ў ЌЈ ў рў 80ў ˆ ј ў PXў | Hў thў  xў |˜ў Р ˆў МИў œЈў Hиў (шў tјў ,Шў $ў  ў 8ў Hў Xў d(ў Фhў Dˆў l xў ьў DЈў t!Р$ d˜ў јў Ф(Ÿ) ,8Ÿ) (HŸ) шў ШhŸ) XŸ) @5œ05œ 5œ5œ5œи4œШ4œИ4œЂЈ4œЂ€4œЂ4œЂј3œЂш3œЂи3œЂА3œЂ 3œЂ3œЂ€3œh6œ7 8 9 : ; < = > ? @ A B C D E F G H јљњћќ§ўџ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 ШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђЕѓєѕіїјљњћќ§ўџ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕі !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЖЗИЙКЛМНОПРСТУФХЦЧїh323plus/Makefile.in0000644000175000017500000001013011632564045013155 0ustar markmark# # Makefile # # Make file for H323plus library # # Copyright (c) 1998-2000 Equivalence Pty. Ltd. # # The contents of this file are subject to the Mozilla Public License # Version 1.0 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is Open H323 library. # # The Initial Developer of the Original Code is Equivalence Pty. Ltd. # # Contributor(s): ______________________________________. # # $Id: Makefile.in,v 1.6 2011/09/10 04:31:33 shorne Exp $ # PREFIX=@INSTALLPREFIX@ exec_prefix = $(PREFIX) LIBDIR=@LIBDIR@ export OPENH323DIR=@OPENH323DIR@ INSTALL=@INSTALL@ default :: optshared all :: bothdepend both include $(OPENH323DIR)/openh323u.mak # export NOAUDIOCODECS=true # export NOVIDEO=true SUBDIRS := samples/simple ifneq (,$(wildcard dump323)) SUBDIRS += dump323 endif ifneq (,$(wildcard openam)) SUBDIRS += openam endif ifneq (,$(wildcard pstngw)) SUBDIRS += pstngw endif ifneq (,$(wildcard openphone)) ifneq (,$(wildcard $(PTLIBDIR)/src/pwlib)) SUBDIRS += openphone endif endif PREFIX=@INSTALLPREFIX@/ exec_prefix = ${PREFIX} LIBDIR=@LIBDIR@ ifndef PREFIX PREFIX=/usr/local endif update: cvs update $(MAKE) all # standard build command $(subst tagbuild,,$(STANDARD_TARGETS)) :: $(MAKE) -C src $@ notrace:: $(MAKE) NOTRACE=1 docs: doxygen h323plus_cfg.dxy install: mkdir -p $(DESTDIR)$(LIBDIR) rm -f $(DESTDIR)$(LIBDIR)/libh323_*_r.so* $(INSTALL) -m 444 lib/$(OH323_FILE).@MAJOR_VERSION@.@MINOR_VERSION@.@BUILD_NUMBER@ $(DESTDIR)$(LIBDIR) (cd $(DESTDIR)$(LIBDIR) ; \ rm -f $(OH323_FILE).@MAJOR_VERSION@.@MINOR_VERSION@ ; \ ln -sf $(OH323_FILE).@MAJOR_VERSION@.@MINOR_VERSION@.@BUILD_NUMBER@ $(OH323_FILE).@MAJOR_VERSION@.@MINOR_VERSION@ \ ) (cd $(DESTDIR)$(LIBDIR) ; \ rm -f $(OH323_FILE).@MAJOR_VERSION@ ; \ ln -sf $(OH323_FILE).@MAJOR_VERSION@.@MINOR_VERSION@.@BUILD_NUMBER@ $(OH323_FILE).@MAJOR_VERSION@ \ ) (cd $(DESTDIR)$(LIBDIR) ; \ rm -f $(OH323_FILE) ; \ ln -sf $(OH323_FILE).@MAJOR_VERSION@.@MINOR_VERSION@.@BUILD_NUMBER@ $(OH323_FILE) \ ) (cd $(DESTDIR)$(LIBDIR); \ rm -f libopenh323.$(SHAREDLIBEXT) ; \ ln -sf $(OH323_FILE) libopenh323.$(SHAREDLIBEXT) \ ) ( for dir in $(DESTDIR)$(LIBDIR) \ $(DESTDIR)$(PREFIX)/include/openh323 \ $(DESTDIR)$(PREFIX)/include/openh323/codec \ $(DESTDIR)$(PREFIX)/include/openh323/h230 \ $(DESTDIR)$(PREFIX)/include/openh323/h235 \ $(DESTDIR)$(PREFIX)/include/openh323/h341 \ $(DESTDIR)$(PREFIX)/include/openh323/h350 \ $(DESTDIR)$(PREFIX)/include/openh323/h450 \ $(DESTDIR)$(PREFIX)/include/openh323/h460 \ $(DESTDIR)$(PREFIX)/share/openh323 ;\ do mkdir -p $$dir ; chmod 755 $$dir ; \ done) ( for fn in include/*.h ; do \ $(INSTALL) -m 444 $$fn $(DESTDIR)$(PREFIX)/include/openh323 ; \ done) ( for fn in include/codec/*.h ; do \ $(INSTALL) -m 444 $$fn $(DESTDIR)$(PREFIX)/include/openh323/codec ; \ done) ( for fn in include/h230/*.h ; do \ $(INSTALL) -m 444 $$fn $(DESTDIR)$(PREFIX)/include/openh323/h230 ; \ done) ( for fn in include/h235/*.h ; do \ $(INSTALL) -m 444 $$fn $(DESTDIR)$(PREFIX)/include/openh323/h235 ; \ done) ( for fn in include/h341/*.h ; do \ $(INSTALL) -m 444 $$fn $(DESTDIR)$(PREFIX)/include/openh323/h341 ; \ done) ( for fn in include/h350/*.h ; do \ $(INSTALL) -m 444 $$fn $(DESTDIR)$(PREFIX)/include/openh323/h350 ; \ done) ( for fn in include/h450/*.h ; do \ $(INSTALL) -m 444 $$fn $(DESTDIR)$(PREFIX)/include/openh323/h450 ; \ done) ( for fn in include/h460/*.h ; do \ $(INSTALL) -m 444 $$fn $(DESTDIR)$(PREFIX)/include/openh323/h460 ; \ done) $(INSTALL) -m 444 openh323u.mak $(DESTDIR)$(PREFIX)/share/openh323 uninstall: rm -rf $(DESTDIR)$(PREFIX)/include/openh323 \ $(PREFIX)/share/openh323 rm -f $(DESTDIR)$(LIBDIR)/$(OH323_FILE) \ $(DESTDIR)$(LIBDIR)/libopenh323.so h323plus/openh323u.mak.in0000644000175000017500000000554311627574274013762 0ustar markmark# # openh323u.mak # # Make symbols include file for Open H323 library # # Copyright (c) 1998-2000 Equivalence Pty. Ltd. # # The contents of this file are subject to the Mozilla Public License # Version 1.0 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is Open H323 library. # # The Initial Developer of the Original Code is Equivalence Pty. Ltd. # # Contributor(s): ______________________________________. # # $Id: openh323u.mak.in,v 1.11 2011/09/01 03:15:08 shorne Exp $ # PTLIBDIR = @PTLIBDIR@ ifndef OPENH323DIR OPENH323DIR = @OPENH323DIR@ endif STDCCFLAGS += @STDCCFLAGS@ LDFLAGS += @LDFLAGS@ LDLIBS += @LDLIBS@ ENDLDLIBS := @ENDLDLIBS@ $(ENDLDLIBS) NOAUDIOCODECS = @NOAUDIOCODECS@ NOVIDEO = @NOVIDEO@ NOTRACE = @NOTRACE@ H323_H224 = @H323_H224@ H323_H230 = @H323_H230@ H323_H235 = @H323_H235@ H323_H239 = @H323_H239@ H323_H248 = @H323_H248@ H323_H249 = @H323_H249@ H323_H341 = @H323_H341@ H323_H350 = @H323_H350@ H323_H450 = @H323_H450@ H323_H460 = @H323_H460@ H323_H46018 = @H323_H46018@ H323_H46019M = @H323_H46019M@ H323_H46023 = @H323_H46023@ H323_H501 = @H323_H501@ H323_T38 = @H323_T38@ H323_T120 = @H323_T120@ H323_GNUGK = @H323_GNUGK@ H323_FILE = @H323_FILE@ ifdef LIBRARY_MAKEFILE include $(PTLIBDIR)/make/unix.mak else ifeq ($(NOTRACE), 1) OBJDIR_SUFFIX := n endif # NOTRACE include $(PTLIBDIR)/make/ptlib.mak endif # LIBRARY_MAKEFILE LIBDIRS += $(OPENH323DIR) #OH323_SUPPRESS_H235 = 1 OH323_SRCDIR = $(OPENH323DIR)/src ifdef PREFIX OH323_INCDIR = $(PREFIX)/include/openh323 else OH323_INCDIR = $(OPENH323DIR)/include endif # PREFIX ifndef OH323_LIBDIR OH323_LIBDIR = $(OPENH323DIR)/lib endif # OH323_LIBDIR ifeq ($(NOTRACE), 1) STDCCFLAGS += -DPASN_NOPRINTON -DPASN_LEANANDMEAN OH323_SUFFIX = n else ifeq (,$(findstring PTRACING,$(STDCCFLAGS))) STDCCFLAGS += -DPTRACING RCFLAGS += -DPTRACING endif OH323_SUFFIX = $(OBJ_SUFFIX) endif # NOTRACE OH323_BASE = h323_$(PLATFORM_TYPE)_$(OH323_SUFFIX)$(LIB_TYPE) OH323_FILE = lib$(OH323_BASE).$(LIB_SUFFIX) LDFLAGS += -L$(OH323_LIBDIR) LDLIBS := -l$(OH323_BASE) $(LDLIBS) STDCCFLAGS += -I$(OH323_INCDIR) ifdef OH323_SUPPRESS_H235 STDCCFLAGS += -DOH323_SUPPRESS_H235 endif $(TARGET) : $(OH323_LIBDIR)/$(OH323_FILE) ifndef LIBRARY_MAKEFILE ifdef DEBUG $(OH323_LIBDIR)/$(OH323_FILE): $(MAKE) -C $(OH323_SRCDIR) debug else $(OH323_LIBDIR)/$(OH323_FILE): $(MAKE) -C $(OH323_SRCDIR) opt endif # DEBUG endif # LIBRARY_MAKEFILE # End of file h323plus/MPL-1.1.html0000644000175000017500000006550610655704647012754 0ustar markmark Mozilla Public License version 1.1

(Plain text version)

Mozilla Public License Version 1.1

1. Definitions.

1.0.1. "Commercial Use"
means distribution or otherwise making the Covered Code available to a third party.
1.1. "Contributor"
means each entity that creates or contributes to the creation of Modifications.
1.2. "Contributor Version"
means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor.
1.3. "Covered Code"
means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof.
1.4. "Electronic Distribution Mechanism"
means a mechanism generally accepted in the software development community for the electronic transfer of data.
1.5. "Executable"
means Covered Code in any form other than Source Code.
1.6. "Initial Developer"
means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A.
1.7. "Larger Work"
means a work which combines Covered Code or portions thereof with code not governed by the terms of this License.
1.8. "License"
means this document.
1.8.1. "Licensable"
means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
1.9. "Modifications"

means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is:

  1. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications.
  2. Any new file that contains any part of the Original Code or previous Modifications.
1.10. "Original Code"
means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License.
1.10.1. "Patent Claims"
means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
1.11. "Source Code"
means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge.
1.12. "You" (or "Your")
means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.

2. Source Code License.

2.1. The Initial Developer Grant.

The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims:

  1. under intellectual property rights (other than patent or trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, and/or as part of a Larger Work; and
  2. under Patents Claims infringed by the making, using or selling of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Code (or portions thereof).
  3. the licenses granted in this Section 2.1 (a) and (b) are effective on the date Initial Developer first distributes Original Code under the terms of this License.
  4. Notwithstanding Section 2.1 (b) above, no patent license is granted: 1) for code that You delete from the Original Code; 2) separate from the Original Code; or 3) for infringements caused by: i) the modification of the Original Code or ii) the combination of the Original Code with other software or devices.

2.2. Contributor Grant.

Subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license

  1. under intellectual property rights (other than patent or trademark) Licensable by Contributor, to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger Work; and
  2. under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: 1) Modifications made by that Contributor (or portions thereof); and 2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
  3. the licenses granted in Sections 2.2 (a) and 2.2 (b) are effective on the date Contributor first makes Commercial Use of the Covered Code.
  4. Notwithstanding Section 2.2 (b) above, no patent license is granted: 1) for any code that Contributor has deleted from the Contributor Version; 2) separate from the Contributor Version; 3) for infringements caused by: i) third party modifications of Contributor Version or ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or 4) under Patent Claims infringed by Covered Code in the absence of Modifications made by that Contributor.

3. Distribution Obligations.

3.1. Application of License.

The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5.

3.2. Availability of Source Code.

Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party.

3.3. Description of Modifications.

You must cause all Covered Code to which You contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code.

3.4. Intellectual Property Matters

(a) Third Party Claims

If Contributor has knowledge that a license under a third party's intellectual property rights is required to exercise the rights granted by such Contributor under Sections 2.1 or 2.2, Contributor must include a text file with the Source Code distribution titled "LEGAL" which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If Contributor obtains such knowledge after the Modification is made available as described in Section 3.2, Contributor shall promptly modify the LEGAL file in all copies Contributor makes available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained.

(b) Contributor APIs

If Contributor's Modifications include an application programming interface and Contributor has knowledge of patent licenses which are reasonably necessary to implement that API, Contributor must also include this information in the legal file.

(c) Representations.

Contributor represents that, except as disclosed pursuant to Section 3.4 (a) above, Contributor believes that Contributor's Modifications are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the rights conveyed by this License.

3.5. Required Notices.

You must duplicate the notice in Exhibit A in each file of the Source Code. If it is not possible to put such notice in a particular Source Code file due to its structure, then You must include such notice in a location (such as a relevant directory) where a user would be likely to look for such a notice. If You created one or more Modification(s) You may add your name as a Contributor to the notice described in Exhibit A. You must also duplicate this License in any documentation for the Source Code where You describe recipients' rights or ownership rights relating to Covered Code. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.

3.6. Distribution of Executable Versions.

You may distribute Covered Code in Executable form only if the requirements of Sections 3.1, 3.2, 3.3, 3.4 and 3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code or ownership rights under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.

3.7. Larger Works.

You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code.

4. Inability to Comply Due to Statute or Regulation.

If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the legal file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it.

5. Application of this License.

This License applies to code to which the Initial Developer has attached the notice in Exhibit A and to related Covered Code.

6. Versions of the License.

6.1. New Versions

Netscape Communications Corporation ("Netscape") may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number.

6.2. Effect of New Versions

Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Netscape. No one other than Netscape has the right to modify the terms applicable to Covered Code created under this License.

6.3. Derivative Works

If You create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), You must (a) rename Your license so that the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", "MPL", "NPL" or any confusingly similar phrase do not appear in your license (except to note that your license differs from this License) and (b) otherwise make it clear that Your version of the license contains terms which differ from the Mozilla Public License and Netscape Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.)

7. Disclaimer of warranty

Covered code is provided under this license on an "as is" basis, without warranty of any kind, either expressed or implied, including, without limitation, warranties that the covered code is free of defects, merchantable, fit for a particular purpose or non-infringing. The entire risk as to the quality and performance of the covered code is with you. Should any covered code prove defective in any respect, you (not the initial developer or any other contributor) assume the cost of any necessary servicing, repair or correction. This disclaimer of warranty constitutes an essential part of this license. No use of any covered code is authorized hereunder except under this disclaimer.

8. Termination

8.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.

8.2. If You initiate litigation by asserting a patent infringement claim (excluding declatory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You file such action is referred to as "Participant") alleging that:

  1. such Participant's Contributor Version directly or indirectly infringes any patent, then any and all rights granted by such Participant to You under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively, unless if within 60 days after receipt of notice You either: (i) agree in writing to pay Participant a mutually agreeable reasonable royalty for Your past and future use of Modifications made by such Participant, or (ii) withdraw Your litigation claim with respect to the Contributor Version against such Participant. If within 60 days of notice, a reasonable royalty and payment arrangement are not mutually agreed upon in writing by the parties or the litigation claim is not withdrawn, the rights granted by Participant to You under Sections 2.1 and/or 2.2 automatically terminate at the expiration of the 60 day notice period specified above.
  2. any software, hardware, or device, other than such Participant's Contributor Version, directly or indirectly infringes any patent, then any rights granted to You by such Participant under Sections 2.1(b) and 2.2(b) are revoked effective as of the date You first made, used, sold, distributed, or had made, Modifications made by that Participant.

8.3. If You assert a patent infringement claim against Participant alleging that such Participant's Contributor Version directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.

8.4. In the event of termination under Sections 8.1 or 8.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination.

9. Limitation of liability

Under no circumstances and under no legal theory, whether tort (including negligence), contract, or otherwise, shall you, the initial developer, any other contributor, or any distributor of covered code, or any supplier of any of such parties, be liable to any person for any indirect, special, incidental, or consequential damages of any character including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses, even if such party shall have been informed of the possibility of such damages. This limitation of liability shall not apply to liability for death or personal injury resulting from such party's negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to you.

10. U.S. government end users

The Covered Code is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial computer software documentation," as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein.

11. Miscellaneous

This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in the United States of America, any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California, with venue lying in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License.

12. Responsibility for claims

As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.

13. Multiple-licensed code

Initial Developer may designate portions of the Covered Code as "Multiple-Licensed". "Multiple-Licensed" means that the Initial Developer permits you to utilize portions of the Covered Code under Your choice of the MPL or the alternative licenses, if any, specified by the Initial Developer in the file described in Exhibit A.

Exhibit A - Mozilla Public License.

"The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/

Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.

The Original Code is ______________________________________.

The Initial Developer of the Original Code is ________________________.
Portions created by ______________________ are Copyright (C) ______
_______________________. All Rights Reserved.

Contributor(s): ______________________________________.

Alternatively, the contents of this file may be used under the terms
of the _____ license (the  "[___] License"), in which case the
provisions of [______] License are applicable instead of those
above. If you wish to allow use of your version of this file only
under the terms of the [____] License and not to allow others to use
your version of this file under the MPL, indicate your decision by
deleting the provisions above and replace them with the notice and
other provisions required by the [___] License. If you do not delete
the provisions above, a recipient may use your version of this file
under either the MPL or the [___] License."

NOTE: The text of this Exhibit A may differ slightly from the text of the notices in the Source Code files of the Original Code. You should use the text of this Exhibit A rather than the text found in the Original Code Source Code for Your Modifications. h323plus/include/0000755000175000017500000000000011712004251012523 5ustar markmarkh323plus/include/t38.h0000644000175000017500000003022111015524152013313 0ustar markmark// // t38.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_T38 #ifndef __T38_H #define __T38_H #ifdef P_USE_PRAGMA #pragma interface #endif #include // // Type-of-msg // class T38_Type_of_msg_t30_indicator; class T38_Type_of_msg_data; class T38_Type_of_msg : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(T38_Type_of_msg, PASN_Choice); #endif public: T38_Type_of_msg(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_t30_indicator, e_data }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator T38_Type_of_msg_t30_indicator &() const; #else operator T38_Type_of_msg_t30_indicator &(); operator const T38_Type_of_msg_t30_indicator &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator T38_Type_of_msg_data &() const; #else operator T38_Type_of_msg_data &(); operator const T38_Type_of_msg_data &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // Data-Field // class T38_Data_Field_subtype; class T38_Data_Field : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(T38_Data_Field, PASN_Array); #endif public: T38_Data_Field(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; T38_Data_Field_subtype & operator[](PINDEX i) const; PObject * Clone() const; }; // // PreCorrigendum-Data-Field // class T38_PreCorrigendum_Data_Field_subtype; class T38_PreCorrigendum_Data_Field : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(T38_PreCorrigendum_Data_Field, PASN_Array); #endif public: T38_PreCorrigendum_Data_Field(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; T38_PreCorrigendum_Data_Field_subtype & operator[](PINDEX i) const; PObject * Clone() const; }; // // Type-of-msg_t30-indicator // class T38_Type_of_msg_t30_indicator : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(T38_Type_of_msg_t30_indicator, PASN_Enumeration); #endif public: T38_Type_of_msg_t30_indicator(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_no_signal, e_cng, e_ced, e_v21_preamble, e_v27_2400_training, e_v27_4800_training, e_v29_7200_training, e_v29_9600_training, e_v17_7200_short_training, e_v17_7200_long_training, e_v17_9600_short_training, e_v17_9600_long_training, e_v17_12000_short_training, e_v17_12000_long_training, e_v17_14400_short_training, e_v17_14400_long_training }; T38_Type_of_msg_t30_indicator & operator=(unsigned v); PObject * Clone() const; }; // // Type-of-msg_data // class T38_Type_of_msg_data : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(T38_Type_of_msg_data, PASN_Enumeration); #endif public: T38_Type_of_msg_data(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_v21, e_v27_2400, e_v27_4800, e_v29_7200, e_v29_9600, e_v17_7200, e_v17_9600, e_v17_12000, e_v17_14400 }; T38_Type_of_msg_data & operator=(unsigned v); PObject * Clone() const; }; // // UDPTLPacket_error-recovery // class T38_UDPTLPacket_error_recovery_secondary_ifp_packets; class T38_UDPTLPacket_error_recovery_fec_info; class T38_UDPTLPacket_error_recovery : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(T38_UDPTLPacket_error_recovery, PASN_Choice); #endif public: T38_UDPTLPacket_error_recovery(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_secondary_ifp_packets, e_fec_info }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator T38_UDPTLPacket_error_recovery_secondary_ifp_packets &() const; #else operator T38_UDPTLPacket_error_recovery_secondary_ifp_packets &(); operator const T38_UDPTLPacket_error_recovery_secondary_ifp_packets &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator T38_UDPTLPacket_error_recovery_fec_info &() const; #else operator T38_UDPTLPacket_error_recovery_fec_info &(); operator const T38_UDPTLPacket_error_recovery_fec_info &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // Data-Field_subtype_field-type // class T38_Data_Field_subtype_field_type : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(T38_Data_Field_subtype_field_type, PASN_Enumeration); #endif public: T38_Data_Field_subtype_field_type(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_hdlc_data, e_hdlc_sig_end, e_hdlc_fcs_OK, e_hdlc_fcs_BAD, e_hdlc_fcs_OK_sig_end, e_hdlc_fcs_BAD_sig_end, e_t4_non_ecm_data, e_t4_non_ecm_sig_end }; T38_Data_Field_subtype_field_type & operator=(unsigned v); PObject * Clone() const; }; // // PreCorrigendum-Data-Field_subtype_field-type // class T38_PreCorrigendum_Data_Field_subtype_field_type : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(T38_PreCorrigendum_Data_Field_subtype_field_type, PASN_Enumeration); #endif public: T38_PreCorrigendum_Data_Field_subtype_field_type(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_hdlc_data, e_hdlc_sig_end, e_hdlc_fcs_OK, e_hdlc_fcs_BAD, e_hdlc_fcs_OK_sig_end, e_hdlc_fcs_BAD_sig_end, e_t4_non_ecm_data, e_t4_non_ecm_sig_end }; T38_PreCorrigendum_Data_Field_subtype_field_type & operator=(unsigned v); PObject * Clone() const; }; // // UDPTLPacket_error-recovery_secondary-ifp-packets // class T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype; class T38_UDPTLPacket_error_recovery_secondary_ifp_packets : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(T38_UDPTLPacket_error_recovery_secondary_ifp_packets, PASN_Array); #endif public: T38_UDPTLPacket_error_recovery_secondary_ifp_packets(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_PASN_OctetString // class T38_ArrayOf_PASN_OctetString : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(T38_ArrayOf_PASN_OctetString, PASN_Array); #endif public: T38_ArrayOf_PASN_OctetString(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; PASN_OctetString & operator[](PINDEX i) const; PObject * Clone() const; }; // // IFPPacket // class T38_IFPPacket : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(T38_IFPPacket, PASN_Sequence); #endif public: T38_IFPPacket(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_data_field }; T38_Type_of_msg m_type_of_msg; T38_Data_Field m_data_field; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PreCorrigendum-IFPPacket // class T38_PreCorrigendum_IFPPacket : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(T38_PreCorrigendum_IFPPacket, PASN_Sequence); #endif public: T38_PreCorrigendum_IFPPacket(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_data_field }; T38_Type_of_msg m_type_of_msg; T38_PreCorrigendum_Data_Field m_data_field; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Data-Field_subtype // class T38_Data_Field_subtype : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(T38_Data_Field_subtype, PASN_Sequence); #endif public: T38_Data_Field_subtype(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_field_data }; T38_Data_Field_subtype_field_type m_field_type; PASN_OctetString m_field_data; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PreCorrigendum-Data-Field_subtype // class T38_PreCorrigendum_Data_Field_subtype : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(T38_PreCorrigendum_Data_Field_subtype, PASN_Sequence); #endif public: T38_PreCorrigendum_Data_Field_subtype(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_field_data }; T38_PreCorrigendum_Data_Field_subtype_field_type m_field_type; PASN_OctetString m_field_data; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UDPTLPacket_primary-ifp-packet // class T38_UDPTLPacket_primary_ifp_packet : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(T38_UDPTLPacket_primary_ifp_packet, PASN_OctetString); #endif public: T38_UDPTLPacket_primary_ifp_packet(unsigned tag = 0, TagClass tagClass = UniversalTagClass); PBoolean DecodeSubType(T38_IFPPacket & obj) { return PASN_OctetString::DecodeSubType(obj); } void EncodeSubType(const T38_IFPPacket & obj) { PASN_OctetString::EncodeSubType(obj); } PObject * Clone() const; }; // // UDPTLPacket_error-recovery_fec-info // class T38_UDPTLPacket_error_recovery_fec_info : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(T38_UDPTLPacket_error_recovery_fec_info, PASN_Sequence); #endif public: T38_UDPTLPacket_error_recovery_fec_info(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_fec_npackets; T38_ArrayOf_PASN_OctetString m_fec_data; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UDPTLPacket_error-recovery_secondary-ifp-packets_subtype // class T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype, PASN_OctetString); #endif public: T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype(unsigned tag = 0, TagClass tagClass = UniversalTagClass); PBoolean DecodeSubType(T38_IFPPacket & obj) { return PASN_OctetString::DecodeSubType(obj); } void EncodeSubType(const T38_IFPPacket & obj) { PASN_OctetString::EncodeSubType(obj); } PObject * Clone() const; }; // // UDPTLPacket // class T38_UDPTLPacket : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(T38_UDPTLPacket, PASN_Sequence); #endif public: T38_UDPTLPacket(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_seq_number; T38_UDPTLPacket_primary_ifp_packet m_primary_ifp_packet; T38_UDPTLPacket_error_recovery m_error_recovery; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __T38_H #endif // if ! H323_DISABLE_T38 // End of t38.h h323plus/include/h323.h0000644000175000017500000000246611561715360013377 0ustar markmark/* * h323.h * * H.323 protocol handler * * H323Plus Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Contributor(s): ______________________________________. * * $Id $ * */ #ifndef _H323_H #define _H323_H #include "openh323buildopts.h" #include "ptlib_extras.h" #include "h323con.h" #include "h323ep.h" #include "gkclient.h" #include PString OpalGetVersion(); unsigned OpalGetMajorVersion(); unsigned OpalGetMinorVersion(); unsigned OpalGetBuildNumber(); #endif // _H323_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/h323t38.h0000644000175000017500000002616311015524126013726 0ustar markmark/* * h323t38.h * * H.323 T.38 logical channel establishment * * Open H323 Library * * Copyright (c) 2001 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: h323t38.h,v $ * Revision 1.2 2008/05/23 11:19:50 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:50:49 shorne * First commit of h323plus * * Revision 1.15 2005/11/30 13:05:01 csoutheren * Changed tags for Doxygen * * Revision 1.14 2002/09/16 01:14:15 robertj * Added #define so can select if #pragma interface/implementation is used on * platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan. * * Revision 1.13 2002/09/03 06:19:37 robertj * Normalised the multi-include header prevention ifdef/define symbol. * * Revision 1.12 2002/08/05 10:03:47 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.11 2002/05/15 23:30:01 robertj * Backed out delete of t38 handler, causes race conditions. * * Revision 1.10 2002/05/15 01:30:49 robertj * Added missing delete of t38 handler, thanks thsuk@digitalsis.com. * Changed to allow the T.35 information to be adjusted so it will work for * various vendors version of the non-standard capability. * * Revision 1.9 2002/05/10 05:49:22 robertj * Added the max bit rate field to the data channel capability class. * Added session ID to the data logical channel class. * Added capability for old pre-v3 non-standard T.38. * * Revision 1.8 2002/01/09 00:21:36 robertj * Changes to support outgoing H.245 RequstModeChange. * * Revision 1.7 2002/01/01 23:27:50 craigs * Added CleanupOnTermination functions * Thanks to Vyacheslav Frolov * * Revision 1.6 2001/12/22 01:55:20 robertj * Removed vast quatities of redundent code that is done by ancestor class. * * Revision 1.5 2001/12/14 08:36:36 robertj * More implementation of T.38, thanks Adam Lazur * * Revision 1.4 2001/11/20 03:04:30 robertj * Added ability to reuse t38 channels with same session ID. * * Revision 1.3 2001/11/09 05:39:54 craigs * Added initial T.38 support thanks to Adam Lazur * * Revision 1.2 2001/07/24 02:25:57 robertj * Added UDP, dual TCP and single TCP modes to T.38 capability. * * Revision 1.1 2001/07/17 04:44:29 robertj * Partial implementation of T.120 and T.38 logical channels. * */ #ifndef __OPAL_H323T38_H #define __OPAL_H323T38_H #ifdef P_USE_PRAGMA #pragma interface #endif #include "h323caps.h" class H245_T38FaxProfile; class OpalT38Protocol; /////////////////////////////////////////////////////////////////////////////// /**This class describes the T.38 standard capability. */ class H323_T38Capability : public H323DataCapability { PCLASSINFO(H323_T38Capability, H323DataCapability); public: /**@name Construction */ //@{ enum TransportMode { e_UDP, e_DualTCP, e_SingleTCP, NumTransportModes }; /**Create a new capability. */ H323_T38Capability( TransportMode mode ); //@} /**@name Overrides from class PObject */ //@{ /**Compare two capability instances. This compares the main and sub-types of the capability. */ Comparison Compare(const PObject & obj) const; /**Create a copy of the object. */ virtual PObject * Clone() const; //@} /**@name Identification functions */ //@{ /**Get the sub-type of the capability. This is a code dependent on the main type of the capability. This returns the e_t38fax enum value from the protocol ASN H245_DataApplicationCapability_application class. */ virtual unsigned GetSubType() const; /**Get the name of the media data format this class represents. */ virtual PString GetFormatName() const; //@} /**@name Operations */ //@{ /**Create the channel instance, allocating resources as required. */ virtual H323Channel * CreateChannel( H323Connection & connection, ///< Owner connection for channel H323Channel::Directions dir, ///< Direction of channel unsigned sessionID, ///< Session ID for RTP channel const H245_H2250LogicalChannelParameters * param ///< Parameters for channel ) const; //@} /**@name Protocol manipulation */ //@{ /**This function is called whenever and outgoing TerminalCapabilitySet or OpenLogicalChannel PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour sets the pdu and calls OnSendingPDU with a H245_DataProtocolCapability parameter. */ virtual PBoolean OnSendingPDU( H245_DataApplicationCapability & pdu ) const; /**This function is called whenever and outgoing RequestMode PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour sets the pdu and calls OnSendingPDU with a H245_DataProtocolCapability parameter. */ virtual PBoolean OnSendingPDU( H245_DataMode & pdu ///< PDU to set information on ) const; /**This function is called whenever and outgoing PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour sets tcp or udp as required. */ virtual PBoolean OnSendingPDU( H245_DataProtocolCapability & proto, ///< PDU to set information on H245_T38FaxProfile & profile ///< PDU to set information on ) const; /**This function is called whenever and incoming TerminalCapabilitySet or OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. The default behaviour gets the data rate field from the PDU. */ virtual PBoolean OnReceivedPDU( const H245_DataApplicationCapability & pdu ///< PDU to set information on ); //@} TransportMode GetTransportMode() const { return mode; } protected: TransportMode mode; }; /**This class describes the T.38 non-standard capability. */ class H323_T38NonStandardCapability : public H323NonStandardDataCapability { PCLASSINFO(H323_T38NonStandardCapability, H323NonStandardDataCapability); public: /**@name Construction */ //@{ /**Create a new capability. */ H323_T38NonStandardCapability( BYTE country = 181, ///< t35 information BYTE extension = 0, ///< t35 information WORD maufacturer = 18 ///< t35 information ); //@} /**@name Overrides from class PObject */ //@{ /**Create a copy of the object. */ virtual PObject * Clone() const; //@} /**@name Identification functions */ //@{ /**Get the name of the media data format this class represents. */ virtual PString GetFormatName() const; //@} /**@name Operations */ //@{ /**Create the channel instance, allocating resources as required. */ virtual H323Channel * CreateChannel( H323Connection & connection, ///< Owner connection for channel H323Channel::Directions dir, ///< Direction of channel unsigned sessionID, ///< Session ID for RTP channel const H245_H2250LogicalChannelParameters * param ///< Parameters for channel ) const; //@} }; /**This class describes the T.38 logical channel. */ class H323_T38Channel : public H323DataChannel { PCLASSINFO(H323_T38Channel, H323DataChannel); public: /**@name Construction */ //@{ /**Create a new channel. */ H323_T38Channel( H323Connection & connection, ///< Connection to endpoint for channel const H323Capability & capability, ///< Capability channel is using Directions direction, ///< Direction of channel unsigned sessionID, ///< Session ID for channel H323_T38Capability::TransportMode mode ); ~H323_T38Channel(); //@} /**@name Overrides from class H323Channel */ //@{ /**Fill out the OpenLogicalChannel PDU for the particular channel type. */ virtual PBoolean OnSendingPDU( H245_OpenLogicalChannel & openPDU ///< Open PDU to send. ) const; /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. The default makes sure the parameters are compatible and passes on the PDU to the rtp session. */ virtual PBoolean OnReceivedPDU( const H245_OpenLogicalChannel & pdu, ///< Open PDU unsigned & errorCode ///< Error code on failure ); /**This is called to clean up any threads on connection termination. */ virtual void CleanUpOnTermination(); /**Handle channel data reception. This is called by the thread started by the Start() function and is a loop reading from the transport and calling HandlePacket() for each PDU read. */ virtual void Receive(); /**Handle channel data transmission. This is called by the thread started by the Start() function and is typically a loop reading from the codec and writing to the transport (eg an RTP_session). */ virtual void Transmit(); /**Create the H323Listener class to be used. This is called on receipt of an OpenLogicalChannel request. The default behaviour creates a compatible listener using the connections control channel as a basis and returns TRUE if successful. */ virtual PBoolean CreateListener(); /**Create the H323Transport class to be used. This is called on receipt of an OpenLogicalChannelAck response. It should not return TRUE unless the transport member variable is set. The default behaviour uses the connection signalling channel to create the transport and returns TRUE if successful. */ virtual PBoolean CreateTransport(); //@} OpalT38Protocol * GetHandler() const { return t38handler; } protected: PBoolean usesTCP; OpalT38Protocol * t38handler; }; #endif // __OPAL_H323T38_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/gnugknat.h0000644000175000017500000001772411652377422014545 0ustar markmark/* * gnugknat.h * * GnuGk NAT Traversal class. * * h323plus library * * Copyright (c) 2008 ISVO (Asia) Pte. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * Contributor(s): ______________________________________. * * $Id: gnugknat.h,v 1.14 2011/10/28 01:02:10 shorne Exp $ * * */ #include #include #ifdef H323_GNUGK #ifndef GNUGK_NAT #define GNUGK_NAT #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class GNUGK_Feature; class GNUGKTransport : public H323TransportTCP { PCLASSINFO(GNUGKTransport, H323TransportTCP); public: enum PDUType { e_raw, }; /**Create a new transport channel. */ GNUGKTransport( H323EndPoint & endpoint, /// H323 End Point object PIPSocket::Address binding, /// Bind Interface GNUGK_Feature * feat, /// Feature PString & gkid /// Gatekeeper ID ); ~GNUGKTransport(); /**Handle the GNUGK Signalling */ PBoolean HandleGNUGKSignallingChannelPDU(PThread * thread); /**Handle the GNUGK Signalling */ PBoolean HandleGNUGKSignallingSocket(H323SignalPDU & pdu); /**Write a protocol data unit from the transport. This will write using the transports mechanism for PDU boundaries, for example UDP is a single Write() call, while for TCP there is a TPKT header that indicates the size of the PDU. */ virtual PBoolean WritePDU( const PBYTEArray & pdu /// PDU to write ); /**Read a protocol data unit from the transport. This will read using the transports mechanism for PDU boundaries, for example UDP is a single Read() call, while for TCP there is a TPKT header that indicates the size of the PDU. */ virtual PBoolean ReadPDU( PBYTEArray & pdu /// PDU to Read ); PBoolean CreateNewTransport(); PBoolean InitialPDU(); PBoolean SetGKID(const PString & newid); PBoolean isCall() { return isConnected; }; void ConnectionLost(PBoolean established); PBoolean IsConnectionLost(); // Overrides /**Connect to the remote party. */ virtual PBoolean Connect(); /**Close the channel.(Don't do anything) */ virtual PBoolean Close(); virtual PBoolean IsListening() const; virtual PBoolean IsOpen () const; PBoolean CloseTransport() { return closeTransport; }; protected: PString GKid; PMutex connectionsMutex; PMutex WriteMutex; PMutex IntMutex; PMutex shutdownMutex; PTimeInterval ReadTimeOut; PSyncPoint ReadMutex; GNUGK_Feature * Feature; PBoolean isConnected; PBoolean remoteShutDown; PBoolean closeTransport; }; class GNUGK_Feature : public PObject { PCLASSINFO(GNUGK_Feature, PObject); public: GNUGK_Feature(H323EndPoint & ep, H323TransportAddress & remoteAddress, PString gkid, WORD KeepAlive = 10 ); ~GNUGK_Feature(); PBoolean CreateNewTransport(); PBoolean ReRegister(const PString & newid); PBoolean IsOpen() { return open; }; static WORD keepalive; static GNUGKTransport * curtransport; static PBoolean connectionlost; protected: H323EndPoint & ep; H323TransportAddress address; PString GKid; PBoolean open; }; class PNatMethod_GnuGk : public PNatMethod { PCLASSINFO(PNatMethod_GnuGk,PNatMethod); public: /**@name Construction */ //@{ /** Default Contructor */ PNatMethod_GnuGk(); /** Deconstructor */ ~PNatMethod_GnuGk(); //@} /**@name General Functions */ //@{ void AttachEndPoint(H323EndPoint * ep); virtual PBoolean GetExternalAddress( PIPSocket::Address & externalAddress, /// External address of router const PTimeInterval & maxAge = 1000 /// Maximum age for caching ); /** CreateSocketPair Create the UDP Socket pair */ virtual PBoolean CreateSocketPair( PUDPSocket * & socket1, PUDPSocket * & socket2, const PIPSocket::Address & binding = PIPSocket::GetDefaultIpAny() ); /** isAvailable. Returns whether the Nat Method is ready and available in assisting in NAT Traversal. The principal is function is to allow the EP to detect various methods and if a method is detected then this method is available for NAT traversal The Order of adding to the PNstStrategy determines which method is used */ virtual bool IsAvailable(const PIPSocket::Address&) { return (available && active); } void SetAvailable(); virtual void Activate(bool act) { active = act; } PBoolean OpenSocket(PUDPSocket & socket, PortInfo & portInfo, const PIPSocket::Address & binding) const; static PStringList GetNatMethodName() { return PStringArray("GnuGk"); }; virtual PString GetName() const { return GetNatMethodName()[0]; } // All these are virtual and never used. virtual bool GetServerAddress( PIPSocket::Address & address, ///< Address of server WORD & port ///< Port server is using. ) const { return false; } virtual bool GetInterfaceAddress( PIPSocket::Address & internalAddress ) const { return false; } virtual PBoolean CreateSocket( PUDPSocket * & socket, const PIPSocket::Address & binding = PIPSocket::GetDefaultIpAny(), WORD localPort = 0 ) { return false; } virtual RTPSupportTypes GetRTPSupport( PBoolean force = PFalse ///< Force a new check ) { return RTPSupported; } //@} #if PTLIB_VER >= 2110 virtual PString GetServer() const { return PString(); } virtual bool GetServerAddress(PIPSocketAddressAndPort & ) const { return false; } virtual NatTypes GetNatType(bool) { return UnknownNat; } virtual NatTypes GetNatType(const PTimeInterval &) { return UnknownNat; } virtual bool SetServer(const PString &) { return false; } virtual bool Open(const PIPSocket::Address &) { return false; } virtual bool CreateSocket(BYTE component,PUDPSocket * & socket, const PIPSocket::Address & binding = PIPSocket::GetDefaultIpAny(),WORD localPort = 0) { return false; } virtual void SetCredentials(const PString &, const PString &, const PString &) {} #endif protected: H323EndPoint * EP; PBoolean available; PBoolean active; }; #ifndef _WIN32_WCE #if PTLIB_VER > 260 PPLUGIN_STATIC_LOAD(GnuGk,PNatMethod); #else PWLIB_STATIC_LOAD_PLUGIN(GnuGk,PNatMethod); #endif #endif class GNUGKUDPSocket : public PUDPSocket { PCLASSINFO(GNUGKUDPSocket, PUDPSocket); public: /**@name Construction/Deconstructor */ //@{ /** create a UDP Socket Fully Nat Supported ready for H323plus to Call. */ GNUGKUDPSocket(); /** Deconstructor to reallocate Socket and remove any exiting allocated NAT ports, */ ~GNUGKUDPSocket(); virtual void SetSendAddress( const Address & address, /// IP address to send packets. WORD port /// Port to send packets. ); //@} protected: PIPSocket::Address Remote; }; #endif // GNUGK_NAT #endif // H323_GNUGK h323plus/include/opalvxml.h0000644000175000017500000001150211015524133014537 0ustar markmark/* * opalvxml.h * * Header file for IVR code * * A H.323 IVR application. * * Copyright (C) 2002 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Portable Windows Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: opalvxml.h,v $ * Revision 1.2 2008/05/23 11:19:55 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:50:50 shorne * First commit of h323plus * * Revision 1.16 2004/07/15 11:20:37 rjongbloed * Migrated changes from crs_vxnml_devel branch into main trunk * * Revision 1.15.6.1 2004/07/07 07:10:11 csoutheren * Changed to use new factory based PWAVFile * Removed redundant blocking/unblocking when using G.723.1 * * Revision 1.15 2002/09/16 01:14:15 robertj * Added #define so can select if #pragma interface/implementation is used on * platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan. * * Revision 1.14 2002/08/27 02:21:07 craigs * Added silence detection capability to fake G.723.1codec * * Revision 1.13 2002/08/15 08:22:25 craigs * Added P_EXPAT test back in * * Revision 1.12 2002/08/15 04:55:26 robertj * Fixed shutdown problems with closing vxml session, leaks a thread. * Fixed potential problems with indirect channel Close() function. * * Revision 1.11 2002/08/06 06:00:38 craigs * Removed ifdef test for EXPLATFLAG * * Revision 1.10 2002/08/06 05:11:24 craigs * Moved most of stuff to ptclib * * Revision 1.9 2002/08/05 09:43:30 robertj * Added pragma interface/implementation * Moved virtual into .cxx file * * Revision 1.8 2002/07/29 15:13:51 craigs * Added autodelete option to PlayFile * * Revision 1.7 2002/07/18 04:17:12 robertj * Moved virtuals to source and changed name of G.723.1 file capability * * Revision 1.6 2002/07/10 13:16:19 craigs * Moved some VXML classes from Opal back into PTCLib * Added ability to repeat outputted data * * Revision 1.5 2002/07/09 08:27:23 craigs * Added GetMediaFormat to channels * * Revision 1.4 2002/07/03 01:53:58 craigs * Added newline to the end of the file for Linux * * Revision 1.3 2002/07/02 06:32:04 craigs * Added recording functions * * Revision 1.2 2002/06/28 02:42:54 craigs * Fixed problem with G.723.1 file codec not identified as native format * * Revision 1.1 2002/06/27 05:44:39 craigs * Initial version * * Revision 1.2 2002/06/26 09:05:28 csoutheren * Added ability to utter various "sayas" types within prompts * * Revision 1.1 2002/06/26 01:13:53 csoutheren * Disassociated VXML and Opal/OpenH323 specific elements * * */ #ifndef _OpenIVR_OPALVXML_H #define _OpenIVR_OPALVXML_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include #include #include #include #include ////////////////////////////////////////////////////////////////// class G7231_File_Codec : public H323AudioCodec { PCLASSINFO(G7231_File_Codec, H323AudioCodec); public: G7231_File_Codec(Direction dir); unsigned GetBandwidth() const; static int GetFrameLen(int val); PBoolean Read(BYTE * buffer, unsigned & length, RTP_DataFrame &); PBoolean Write(const BYTE * buffer, unsigned length, const RTP_DataFrame & rtp, unsigned & frames); PBoolean IsRawDataChannelNative() const; unsigned GetAverageSignalLevel(); protected: int lastFrameLen; }; class G7231_File_Capability : public H323AudioCapability { PCLASSINFO(G7231_File_Capability, H323AudioCapability) public: G7231_File_Capability(); unsigned GetSubType() const; PString GetFormatName() const; H323Codec * CreateCodec(H323Codec::Direction direction) const; PBoolean OnSendingPDU(H245_AudioCapability & cap, unsigned packetSize) const; PBoolean OnReceivedPDU(const H245_AudioCapability & pdu, unsigned & packetSize); PObject * Clone() const; }; ////////////////////////////////////////////////////////////////// #if P_EXPAT class PTextToSpeech; class OpalVXMLSession : public PVXMLSession { PCLASSINFO(OpalVXMLSession, PVXMLSession); public: OpalVXMLSession(H323Connection * _conn, PTextToSpeech * tts = NULL, PBoolean autoDelete = FALSE); PBoolean Close(); protected: H323Connection * conn; }; #endif #endif h323plus/include/x880.h0000644000175000017500000002111311015524161013404 0ustar markmark// // x880.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_X880 #ifndef __X880_H #define __X880_H #ifdef P_USE_PRAGMA #pragma interface #endif #include // // ROS // class X880_Invoke; class X880_ReturnResult; class X880_ReturnError; class X880_Reject; class X880_ROS : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(X880_ROS, PASN_Choice); #endif public: X880_ROS(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_invoke, e_returnResult, e_returnError, e_reject }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator X880_Invoke &() const; #else operator X880_Invoke &(); operator const X880_Invoke &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator X880_ReturnResult &() const; #else operator X880_ReturnResult &(); operator const X880_ReturnResult &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator X880_ReturnError &() const; #else operator X880_ReturnError &(); operator const X880_ReturnError &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator X880_Reject &() const; #else operator X880_Reject &(); operator const X880_Reject &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // GeneralProblem // class X880_GeneralProblem : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(X880_GeneralProblem, PASN_Integer); #endif public: X880_GeneralProblem(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); X880_GeneralProblem & operator=(int v); X880_GeneralProblem & operator=(unsigned v); PObject * Clone() const; }; // // InvokeProblem // class X880_InvokeProblem : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(X880_InvokeProblem, PASN_Integer); #endif public: X880_InvokeProblem(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); X880_InvokeProblem & operator=(int v); X880_InvokeProblem & operator=(unsigned v); PObject * Clone() const; }; // // ReturnResultProblem // class X880_ReturnResultProblem : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(X880_ReturnResultProblem, PASN_Integer); #endif public: X880_ReturnResultProblem(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); X880_ReturnResultProblem & operator=(int v); X880_ReturnResultProblem & operator=(unsigned v); PObject * Clone() const; }; // // ReturnErrorProblem // class X880_ReturnErrorProblem : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(X880_ReturnErrorProblem, PASN_Integer); #endif public: X880_ReturnErrorProblem(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); X880_ReturnErrorProblem & operator=(int v); X880_ReturnErrorProblem & operator=(unsigned v); PObject * Clone() const; }; // // RejectProblem // class X880_RejectProblem : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(X880_RejectProblem, PASN_Integer); #endif public: X880_RejectProblem(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); X880_RejectProblem & operator=(int v); X880_RejectProblem & operator=(unsigned v); PObject * Clone() const; }; // // InvokeId // class X880_InvokeId : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(X880_InvokeId, PASN_Integer); #endif public: X880_InvokeId(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); X880_InvokeId & operator=(int v); X880_InvokeId & operator=(unsigned v); PObject * Clone() const; }; // // Code // class X880_Code : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(X880_Code, PASN_Choice); #endif public: X880_Code(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_local, e_global }; PBoolean CreateObject(); PObject * Clone() const; }; // // ReturnResult_result // class X880_ReturnResult_result : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(X880_ReturnResult_result, PASN_Sequence); #endif public: X880_ReturnResult_result(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); X880_Code m_opcode; PASN_OctetString m_result; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Reject_problem // class X880_GeneralProblem; class X880_InvokeProblem; class X880_ReturnResultProblem; class X880_ReturnErrorProblem; class X880_Reject_problem : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(X880_Reject_problem, PASN_Choice); #endif public: X880_Reject_problem(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_general, e_invoke, e_returnResult, e_returnError }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator X880_GeneralProblem &() const; #else operator X880_GeneralProblem &(); operator const X880_GeneralProblem &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator X880_InvokeProblem &() const; #else operator X880_InvokeProblem &(); operator const X880_InvokeProblem &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator X880_ReturnResultProblem &() const; #else operator X880_ReturnResultProblem &(); operator const X880_ReturnResultProblem &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator X880_ReturnErrorProblem &() const; #else operator X880_ReturnErrorProblem &(); operator const X880_ReturnErrorProblem &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // Invoke // class X880_Invoke : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(X880_Invoke, PASN_Sequence); #endif public: X880_Invoke(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_linkedId, e_argument }; PASN_Integer m_invokeId; X880_InvokeId m_linkedId; X880_Code m_opcode; PASN_OctetString m_argument; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ReturnResult // class X880_ReturnResult : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(X880_ReturnResult, PASN_Sequence); #endif public: X880_ReturnResult(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_result }; X880_InvokeId m_invokeId; X880_ReturnResult_result m_result; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ReturnError // class X880_ReturnError : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(X880_ReturnError, PASN_Sequence); #endif public: X880_ReturnError(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_parameter }; X880_InvokeId m_invokeId; X880_Code m_errorCode; PASN_OctetString m_parameter; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Reject // class X880_Reject : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(X880_Reject, PASN_Sequence); #endif public: X880_Reject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); X880_InvokeId m_invokeId; X880_Reject_problem m_problem; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __X880_H #endif // if ! H323_DISABLE_X880 // End of x880.h h323plus/include/h235/0000755000175000017500000000000011641502612013211 5ustar markmarkh323plus/include/h235/h2351.h0000644000175000017500000003441511641501634014136 0ustar markmark/* * h2351.h * * H.235.1 Encryption definitions class. * * h323plus library * * Copyright (c) 2011 Spranto Australia Pty Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * * Contributor(s): ______________________________________. * * $Id: h2351.h,v 1.4 2011/10/01 03:06:04 shorne Exp $ * */ #ifndef _H2351_H #define _H2351_H 1 #pragma once //////////////////////////////////////////////////////////////////////////////////// // Session Keys // No DH KEY unsigned DHNULL = 0; // DH1024 unsigned DH1024_SZ = 128; unsigned char DH1024_P[128] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE6, 0x53, 0x81, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; unsigned char DH1024_G[128] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; #ifdef H323_H235_AES256 // DH2048 unsigned DH2048_SZ = 256; unsigned char DH2048_P[256] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAC, 0xAA, 0x68, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; unsigned char DH2048_G[256] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; // DH4096 unsigned DH4096_SZ = 512; unsigned char DH4096_P[512] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D, 0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33, 0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64, 0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A, 0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D, 0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7, 0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7, 0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D, 0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B, 0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64, 0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64, 0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C, 0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C, 0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2, 0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31, 0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E, 0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01, 0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7, 0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26, 0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C, 0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA, 0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8, 0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9, 0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6, 0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D, 0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2, 0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED, 0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF, 0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C, 0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9, 0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1, 0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F, 0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x06, 0x31, 0x99, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; unsigned char DH4096_G[512] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; #endif // H323_H235_AES256 const char * OID_H235V3 = "0.0.8.235.0.3.24"; const char * OID_DH1024 = "0.0.8.235.0.3.43"; #ifdef H323_H235_AES256 const char * OID_DH2048 = "0.0.8.235.0.3.45"; const char * OID_DH4096 = "0.0.8.235.0.3.47"; #endif static struct { const char * parameterOID; const BYTE * dh_p; const BYTE * dh_g; unsigned sz; unsigned send; } H235_DHParameters[] = { #ifdef H323_H235_AES256 { OID_DH4096, DH4096_P, DH4096_G, DH4096_SZ, 0 }, // Not worth it takes too long to generate key. - SH { OID_DH2048, DH2048_P, DH2048_G, DH2048_SZ, 0 }, #endif { OID_DH1024, DH1024_P, DH1024_G, DH1024_SZ, 1 }, { OID_H235V3, NULL , NULL , DHNULL , 0 } }; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Algorithms #ifdef H323_H235_AES256 const char * OID_AES256 = "2.16.840.1.101.3.4.1.42"; const char * SSL_AES256 = "DHE-RSA-AES256-SHA"; const char * DES_AES256 = "AES256"; #endif const char * OID_AES128 = "2.16.840.1.101.3.4.1.2"; const char * SSL_AES128 = "DHE-RSA-AES128-SHA"; const char * DES_AES128 = "AES128"; static struct { const char * algorithmOID; const char * sslDesc; const char * desc; } H235_Encryptions[] = { #ifdef H323_H235_AES256 { OID_AES256, SSL_AES256, DES_AES256 }, #endif { OID_AES128, SSL_AES128, DES_AES128 }, { OID_H235V3, "H235v3" , "H235v3" } }; static struct { const char * algorithm; const char * DHparameters; } H235_Algorithms[] = { #ifdef H323_H235_AES256 { OID_AES256, OID_DH4096 }, { OID_AES256, OID_DH2048 }, #endif { OID_AES128, OID_DH1024 } }; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #endif // _H2351_H h323plus/include/h235/h235chan.h0000644000175000017500000001365011641502612014702 0ustar markmark/* * h235chan.h * * H.235 Secure RTP channel class. * * h323plus library * * Copyright (c) 2011 Spranto Australia Pty Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * * Contributor(s): ______________________________________. * * $Id: h235chan.h,v 1.2 2011/10/01 03:14:18 shorne Exp $ * */ #ifdef H323_H235 #include #include "h235/h235caps.h" /**This class is a derived Class for encpsulating the IETF Real Time Protocol interface. It's only aim is to expose the Created UDP Data channel derive a new class for binding to the OpenSSL TLS system. */ class RTP_Session; class H235Session; class H323SecureRTPChannel : public H323_RTPChannel { PCLASSINFO(H323SecureRTPChannel, H323_RTPChannel); public: /**@name Construction/Deconstructor */ //@{ /**Create a new channel. */ H323SecureRTPChannel( H323Connection & connection, ///< Connection to endpoint for channel const H323SecureRealTimeCapability & capability, ///< Secure Capability channel is using Directions direction, ///< Direction of channel RTP_Session & rtp ///< RTP session for channel ); /**Destroy Class. */ ~H323SecureRTPChannel(); ///< Destroy the channel //@} /**@name Overrides from H323_RTPChannel */ //@{ /**This is called to clean up any threads on connection termination. */ virtual void CleanUpOnTermination(); //@} /**@name Overrides from class H323Channel */ //@{ /**Fill out the OpenLogicalChannel PDU for the particular channel type. */ virtual PBoolean OnSendingPDU( H245_OpenLogicalChannel & openPDU /// Open PDU to send. ) const; /**This is called when request to create a channel is received from a remote machine and is about to be acknowledged. */ virtual void OnSendOpenAck( const H245_OpenLogicalChannel & open, /// Open PDU H245_OpenLogicalChannelAck & ack /// Acknowledgement PDU ) const; /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. The default makes sure the parameters are compatible and passes on the PDU to the rtp session. */ virtual PBoolean OnReceivedPDU( const H245_OpenLogicalChannel & pdu, /// Open PDU unsigned & errorCode /// Error code on failure ); /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. The default makes sure the parameters are compatible and passes on the PDU to the rtp session. */ virtual PBoolean OnReceivedAckPDU( const H245_OpenLogicalChannelAck & pdu /// Acknowledgement PDU ); //@} /**@name Operations */ //@{ /**Fill out the OpenLogicalChannel PDU for the particular channel type. */ virtual PBoolean OnSendingPDU( H245_H2250LogicalChannelParameters & param /// Open PDU to send. ) const; /**This is called when request to create a channel is received from a remote machine and is about to be acknowledged. */ virtual void OnSendOpenAck( H245_H2250LogicalChannelAckParameters & param /// Acknowledgement PDU ) const; /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. The default behaviour sets the remote ports to send UDP packets to. */ virtual PBoolean OnReceivedPDU( const H245_H2250LogicalChannelParameters & param, /// Acknowledgement PDU unsigned & errorCode /// Error on failure ); /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. The default behaviour sets the remote ports to send UDP packets to. */ virtual PBoolean OnReceivedAckPDU( const H245_H2250LogicalChannelAckParameters & param /// Acknowledgement PDU ); //@} /**@name Utilities */ //@{ /** Read a DataFrame */ virtual PBoolean ReadFrame( DWORD & rtpTimestamp, /// TimeStamp RTP_DataFrame & frame /// RTP data frame ); /** Write a DataFrame */ virtual PBoolean WriteFrame( RTP_DataFrame & frame /// RTP data frame ); //@} protected: H235Session * m_encryption; }; #endifh323plus/include/h235/h235caps.h0000644000175000017500000004656111641502612014726 0ustar markmark/* * h235caps.h * * H.235 Capability wrapper class. * * h323plus library * * Copyright (c) 2011 Spranto Australia Pty Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * * Contributor(s): ______________________________________. * * $Id $ * * */ #include "h323caps.h" #ifdef H323_H235 #pragma once class H245_EncryptionAuthenticationAndIntegrity; class H235SecurityCapability : public H323Capability { PCLASSINFO(H235SecurityCapability, H323Capability); public: /**@name Construction */ /**Create the Conference capability */ H235SecurityCapability(unsigned capabilityNo); //@} /**@name Overrides from class PObject */ //@{ /**Create a copy of the object. */ virtual PObject * Clone() const; //@} /**@name Identification functions */ //@{ /**Get the main type of the capability. */ virtual MainTypes GetMainType() const; /**Get the sub-type of the capability. This is a code dependent on the main type of the capability. */ virtual unsigned GetSubType() const; /**Get the name of the media data format this class represents. */ virtual PString GetFormatName() const; /**Validate that the capability is usable given the connection. This checks agains the negotiated protocol version number and remote application to determine if this capability should be used in TCS or OLC pdus. The default behaviour returns TRUE. */ virtual PBoolean IsUsable( const H323Connection & connection) const; //@} /**@name Operations */ //@{ /**Create the channel instance, allocating resources as required. This creates a logical channel object appropriate for the parameters provided. Not if param is NULL, sessionID must be provided, otherwise this is taken from the fields in param. */ virtual H323Channel * CreateChannel( H323Connection & connection, ///< Owner connection for channel H323Channel::Directions dir, ///< Direction of channel unsigned sessionID, ///< Session ID for RTP channel const H245_H2250LogicalChannelParameters * param ///< Parameters for channel ) const; /**Create the codec instance, allocating resources as required. */ virtual H323Codec * CreateCodec( H323Codec::Direction direction ///< Direction in which this instance runs ) const; /**Get the default RTP session. This function gets the default RTP session ID for the capability type. For example audio capabilities return the value RTP_Session::DefaultAudioSessionID etc. The default behaviour returns zero, indicating it is not an RTP based capability. */ unsigned GetDefaultSessionID() const; //@} /**@name Protocol manipulation */ //@{ /**This function is called whenever and outgoing TerminalCapabilitySet PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour is pure. */ virtual PBoolean OnSendingPDU( H245_Capability & pdu ///< PDU to set information on ) const; /**This function is called whenever and outgoing OpenLogicalChannel PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour is pure. */ virtual PBoolean OnSendingPDU( H245_DataType & pdu ///< PDU to set information on ) const; /**This function is called whenever and outgoing RequestMode PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls the OnSendingPDU() function with a more specific PDU type. */ virtual PBoolean OnSendingPDU( H245_ModeElement & pdu ///< PDU to set information on ) const; /**This function is called whenever and incoming TerminalCapabilitySet PDU is received on the control channel, and a new H323Capability descendent was created. This completes reading fields from the PDU into the classes members. If the function returns FALSE then the received PDU codec description is not supported, so will be ignored. The default behaviour simply returns TRUE. */ virtual PBoolean OnReceivedPDU( const H245_Capability & pdu ///< PDU to get information from ); /**This function is called whenever and incoming OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. The default behaviour is pure. */ virtual PBoolean OnReceivedPDU( const H245_DataType & pdu, ///< PDU to get information from PBoolean receiver ///< Is receiver OLC ); /**This function is called whenever and incoming OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. */ PBoolean OnSendingPDU( H245_EncryptionAuthenticationAndIntegrity & encAuth, ///< Encryption Algorithms H323Capability::CommandType type = e_TCS ///< Message Type ) const; /**This function is called whenever and incoming OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. */ PBoolean OnReceivedPDU( const H245_EncryptionAuthenticationAndIntegrity & encAuth, ///< Encryption Algorithms H323Capability::CommandType type = e_TCS ///< Message Type ) const; /**Set the Associated Capability Number */ virtual void SetAssociatedCapability(unsigned capNumber); /**Merge the Algorithms */ PBoolean MergeAlgorithms( const PStringArray & remote ///< List of remote algorithms ); /**Get the number of Algorithms in the list */ PINDEX GetAlgorithmCount(); /**Get the current Algorithms */ PString GetAlgorithm() const; //@} protected: unsigned m_capNumber; PStringList m_capList; }; //////////////////////////////////////////////////////////////////////////////////////// /**This class describes the secure interface to a codec that has channels based on the RTP protocol. An application may create a descendent off this class and override functions as required for descibing the codec. */ enum H235ChType { H235ChNew, /// New Channel (Template) H235ChClone, /// Clone Channel (Primary) H235Channel, /// Connection Channel }; class H323SecureRealTimeCapability : public H323Capability { public: PCLASSINFO(H323SecureRealTimeCapability, H323Capability); /**@name Constructor/Deconstructor */ //@{ /**Constructor */ H323SecureRealTimeCapability( H323Capability & childCapability, ///< Child Capability H323Capabilities * capabilities = NULL, ///< Capabilities reference unsigned secNo = 0 ///< Security Capability No ); H323SecureRealTimeCapability( RTP_QOS * _rtpqos, H323Capability & childCapability ); /**Deconstructor */ ~H323SecureRealTimeCapability(); //@} /**@name Operations */ //@{ /**Create the channel instance, allocating resources as required. */ virtual H323Channel * CreateChannel( H323Connection & connection, /// Owner connection for channel H323Channel::Directions dir, /// Direction of channel unsigned sessionID, /// Session ID for RTP channel const H245_H2250LogicalChannelParameters * param /// Parameters for channel ) const; /// Get unique capability number. virtual unsigned GetCapabilityNumber() const; /// Set unique capability number. virtual void SetCapabilityNumber(unsigned num); /// Attach QoS void AttachQoS(RTP_QOS * _rtpqos); /// Set the Associated Capability virtual void SetAssociatedCapability(unsigned _secNo); /// Set the Capability List virtual void SetCapabilityList(H323Capabilities * capabilities); /// Set the encryption active void SetActive(PBoolean active); /// Is encryption active PBoolean IsActive() const; /// Set Algorithm void SetAlgorithm(const PString & alg); /// Get Algorithm PString GetAlgorithm() const; //@} protected: H323Capability & ChildCapability; /// Child Capability H235ChType chtype; /// Channel Type PBoolean m_active; /// Whether encryption is active H323Capabilities * m_capabilities; /// Capabilities list unsigned m_secNo; /// Security Capability RTP_QOS * nrtpqos; /// RTP QOS PString m_algorithm; /// Algorithm for encryption }; ///////////////////////////////////////////////////////////////////////////////////////// /**This class describes the interface to a secure codec used to transfer data via the logical channels opened and managed by the H323 control channel. An application may create a descendent off this class and override functions as required for descibing a codec. */ class H323SecureCapability : public H323SecureRealTimeCapability { PCLASSINFO(H323SecureCapability, H323SecureRealTimeCapability); public: /**@name Construction */ //@{ /**Create an encrypted audio based capability */ H323SecureCapability( H323Capability & childCapability, /// ChildAudio Capability enum H235ChType Ch = H235ChNew, /// ChannelType H323Capabilities * capabilities = NULL, /// Capabilities reference unsigned secNo = 0 ///< Security Capability No ); //@} /**@name Overrides from class PObject */ //@{ /**Create a copy of the object. */ virtual PObject * Clone() const; /**Compare */ PObject::Comparison Compare(const PObject & obj) const; //@} /**@name Identification functions */ //@{ /**Get the main type of the capability. Always returns e_Audio. */ virtual MainTypes GetMainType() const; /**Get the sub-type of the capability. This is a code dependent on the main type of the capability. This returns one of the four possible combinations of mode and speed using the enum values of the protocol ASN H245_AudioCapability class. */ virtual unsigned GetSubType() const; /**Get the name of the media data format this class represents. */ virtual PString GetFormatName() const; /**Create the Codec */ H323Codec * CreateCodec(H323Codec::Direction direction) const; //@} /**@name Operations */ //@{ /**Get the default RTP session. This function gets the default RTP session ID for the capability type. For example audio capabilities return the value RTP_Session::DefaultAudioSessionID etc. The default behaviour returns zero, indicating it is not an RTP based capability. */ virtual unsigned GetDefaultSessionID() const; //@} /**@name Protocol manipulation */ //@{ /**This function is called whenever and outgoing TerminalCapabilitySet PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls the OnSendingPDU() function with a more specific PDU type. */ virtual PBoolean OnSendingPDU( H245_Capability & pdu /// PDU to set information on ) const; /**This function is called whenever and outgoing OpenLogicalChannel PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls the OnSendingPDU() function with a more specific PDU type. */ virtual PBoolean OnSendingPDU( H245_DataType & pdu /// PDU to set information on ) const; /**This function is called whenever and outgoing RequestMode PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls the OnSendingPDU() function with a more specific PDU type. */ virtual PBoolean OnSendingPDU( H245_ModeElement & pdu /// PDU to set information on ) const; /**This function is called whenever and incoming TerminalCapabilitySet PDU is received on the control channel, and a new H323Capability descendent was created. This completes reading fields from the PDU into the classes members. If the function returns FALSE then the received PDU codec description is not supported, so will be ignored. The default behaviour calls the OnReceivedPDU() that takes a H245_AudioCapability and clamps the txFramesInPacket. */ virtual PBoolean OnReceivedPDU( const H245_Capability & pdu /// PDU to get information from ); /**This function is called whenever and incoming OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. The default behaviour calls the OnReceivedPDU() that takes a H245_AudioCapability and clamps the txFramesInPacket or rxFramesInPacket. */ virtual PBoolean OnReceivedPDU( const H245_DataType & pdu, /// PDU to get information from PBoolean receiver /// is receiver OLC ); /**Compare the sub capability. */ virtual PBoolean IsMatch( const PASN_Choice & subTypePDU ///< sub-type PDU of H323Capability ) const; /**Compare the security part of the capability, if applicable. */ virtual PBoolean IsSubMatch( const PASN_Choice & subTypePDU ///< sub-type PDU of H323Capability ) const; /**Get Child Capability */ H323Capability & GetChildCapability() const { return ChildCapability; } /**Validate that the capability is usable given the connection. This checks agains the negotiated protocol version number and remote application to determine if this capability should be used in TCS or OLC pdus. The default behaviour returns TRUE. */ virtual PBoolean IsUsable( const H323Connection & connection ) const { return ChildCapability.IsUsable(connection); } //@} /**Get the direction for this capability. */ CapabilityDirection GetCapabilityDirection() const { return ChildCapability.GetCapabilityDirection(); } /**Set the direction for this capability. */ void SetCapabilityDirection( CapabilityDirection dir /// New direction code ) { ChildCapability.SetCapabilityDirection(dir); } /// Get the payload type for the capaibility RTP_DataFrame::PayloadTypes GetPayloadType() const { return ChildCapability.GetPayloadType(); } //@} }; ////////////////////////////////////////////////////////////////////////////////////////// class H235Context; class H235_DiffieHellman; class H235Capabilities : public H323Capabilities { PCLASSINFO(H235Capabilities, H323Capabilities); public: H235Capabilities(); H235Capabilities( const H323Capabilities & original ///< Original capabilities to duplicate ); /**Construct a capability set from the H.245 PDU provided. */ H235Capabilities( const H323Connection & connection, ///< Connection for capabilities const H245_TerminalCapabilitySet & pdu ///< PDU to convert to a capability set. ); void WrapCapability(PINDEX descriptorNum, ///< The member of the capabilityDescriptor to add PINDEX simultaneous, ///< The member of the SimultaneousCapabilitySet to add H323Capability & capability ///< capability to wrap ); void AddSecure(PINDEX descriptorNum, ///< The member of the capabilityDescriptor to add PINDEX simultaneous, ///< The member of the SimultaneousCapabilitySet to add H323Capability * capability ///< capability to add ); H323Capability * CopySecure(PINDEX descriptorNum, ///< The member of the capabilityDescriptor to add PINDEX simultaneous, ///< The member of the SimultaneousCapabilitySet to add const H323Capability & capability ///< capability to copy ); /**Add all matching capabilities to descriptor lists. All capabilities that match the specified name are added as in the other form of the SetCapability() function. */ virtual PINDEX AddAllCapabilities( PINDEX descriptorNum, ///< The member of the capabilityDescriptor to add PINDEX simultaneous, ///< The member of the SimultaneousCapabilitySet to add const PString & name ///< New capabilities name, if using "known" one. ); /**Add the DH KeyPair */ void SetDHKeyPair(const PStringList & keyOIDs, H235_DiffieHellman * key, PBoolean isMaster); /**Get the DH KeyPair */ void GetDHKeyPair(PStringList & keyOIDs, H235_DiffieHellman * key, PBoolean & isMaster); /**Get the Algorithms return false if no algorithms. */ PBoolean GetAlgorithms(const PStringList & algorithms) const; H235Context * GetContext() { return m_context; } H235_DiffieHellman * GetDiffieHellMan() { return m_DHkey; } protected: H235Context * m_context; H235_DiffieHellman * m_DHkey; PStringList m_algorithms; PBoolean m_h245Master; }; #endif // H323_H235 h323plus/include/h235/h235con.h0000644000175000017500000001036411641502612014547 0ustar markmark/* * h235con.h * * H.235 Encryption Context definitions class. * * h323plus library * * Copyright (c) 2011 Spranto Australia Pty Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * * Contributor(s): ______________________________________. * * $Id: h235con.h,v 1.2 2011/10/01 03:14:18 shorne Exp $ * */ struct ssl_st; struct ssl_ctx_st; struct ssl_session_st; class RTP_DataFrame; class H235Context; class H235_DiffieHellman; class H235Capabilities; class H235Session : public PObject { PCLASSINFO(H235Session, PObject); public: /**@name Constructor */ //@{ /** Create a SSL Session Context */ H235Session(H235Capabilities * caps, const PString & algorithm); /** Destroy the SSL Session Context */ ~H235Session(); //@} /**@name General Public Functions */ //@{ /** Create Session */ PBoolean CreateSession(); /** Set Master key */ void SetMasterKey(const PBYTEArray & key); /** Get Master key */ const PBYTEArray & GetMasterKey(); /** Is Active */ PBoolean IsActive(); /** Is Initialised */ PBoolean IsInitialised(); /** Read Frame */ PBoolean ReadFrame(DWORD & rtpTimestamp, RTP_DataFrame & frame); /** Write Frame */ PBoolean WriteFrame(RTP_DataFrame & frame); //@} protected: /** Raw Read a Encrypted DataFrame from SSL */ unsigned char * RawRead(unsigned char * buffer,int & length); /** Raw Write a unEncrypted DataFrame to SSL */ unsigned char * RawWrite(unsigned char * buffer,int & length); /** Set Cipher */ void SetCipher(const PString & oid); /** Set DH Shared key */ PBoolean SetDHSharedkey(); private: H235_DiffieHellman & m_dh; PString m_algorithm; H235Context & m_context; ssl_st * m_ssl; /// SSL Object ssl_session_st * m_session; /// SSL Session Object static int session_count; /// Session Count int m_session_id; /// Session Identifier. PBYTEArray m_session_key; /// Session Key PBoolean m_isServer; /// Server Cipher Mode PBoolean m_isInitialised; /// Is Initialised }; /**Context for SSL Connections. */ struct ssl_st; struct ssl_ctx_st; class H235Context : public PObject { PCLASSINFO(H235Context, PObject); public: /**Create a new context for TLS/SSL channels. */ H235Context(); /**Clean up the TLS/SSL context. */ ~H235Context(); /**Initialise the TLS/SSL context */ void Initialise(); /**Context Active */ PBoolean IsActive(); /**Get the internal TLS/SSL context structure. */ operator ssl_ctx_st *() const { return m_context; } /**Get context structure. */ ssl_ctx_st * GetContext() const { return m_context; } /**Generate session ID. */ int Generate_Session_Id(const ssl_st * ssl, unsigned char *id, unsigned int *id_len); protected: void RandomSeed(); private: PBoolean m_isActive; ssl_ctx_st * m_context; /// Context Container };h323plus/include/h235/h2356.h0000644000175000017500000001473511641502612014143 0ustar markmark/* * h2356.h * * H.235.6 Encryption class. * * h323plus library * * Copyright (c) 2011 Spranto Australia Pty Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * * Contributor(s): ______________________________________. * * $Id: h2356.h,v 1.8 2011/10/01 03:14:18 shorne Exp $ * * */ #include #include #include #include #ifdef H323_H235 #pragma once class H235_DiffieHellman; class H2356_Authenticator : public H235Authenticator { PCLASSINFO(H2356_Authenticator, H235Authenticator); public: H2356_Authenticator(); ~H2356_Authenticator(); enum h235TokenState { e_clearNone, // No Token Sent e_clearSent, // ClearToken Sent e_clearReceived, // ClearToken Received e_clearComplete, // Both Sent and received. e_clearDisable // Disable Exchange }; virtual const char * GetName() const; static PStringArray GetAuthenticatorNames(); static PBoolean GetAuthenticationCapabilities(Capabilities * ids); PBoolean IsMatch(const PString & identifier) const; virtual PBoolean PrepareTokens( PASN_Array & clearTokens, PASN_Array & cryptoTokens ); virtual ValidationResult ValidateTokens( const PASN_Array & clearTokens, const PASN_Array & cryptoTokens, const PBYTEArray & rawPDU ); virtual PBoolean IsCapability( const H235_AuthenticationMechanism & mechansim, const PASN_ObjectId & algorithmOID ); virtual PBoolean SetCapability( H225_ArrayOf_AuthenticationMechanism & mechansim, H225_ArrayOf_PASN_ObjectId & algorithmOIDs ); virtual PBoolean IsSecuredSignalPDU( unsigned signalPDU, PBoolean received ) const; virtual PBoolean IsActive() const; virtual void Disable(); virtual PBoolean GetAlgorithms(PStringList & algorithms) const; virtual PBoolean GetAlgorithmDetails(const PString & algorithm, PString & sslName, PString & description); protected: void InitialiseSecurity(); private: std::map m_dhLocalMap; std::map m_dhRemoteMap; PBoolean m_enabled; PBoolean m_active; h235TokenState m_tokenState; PStringList m_algOIDs; }; //////////////////////////////////////////////////// /// PFactory Loader typedef H2356_Authenticator H235_AuthenticatorStd6; #ifndef _WIN32_WCE PPLUGIN_STATIC_LOAD(Std6,H235Authenticator); #endif /////////////////////////////////////////////////////////////////////////////////////// /**Diffie-Hellman parameters. This class embodies a set of Diffie Helman parameters as used by PTLSContext and Secure Socket classes. */ struct dh_st; struct bignum_st; class H235_DiffieHellman : public PObject { PCLASSINFO(H235_DiffieHellman, PObject); public: /**@name Constructor/Destructor */ //@{ /**Create new Diffie-Hellman parameters (Used for Remote DH Parameters) */ H235_DiffieHellman(); /**Create a set of Diffie-Hellman parameters. */ H235_DiffieHellman( const BYTE * pData, /// P data PINDEX pSize, /// Size of P data const BYTE * gData, /// G data PINDEX gSize, /// Size of G data PBoolean send /// Whether to send P & G values in Tokens ); /**Create a copy of the Diffie-Hellman parameters. from H235_DiffieHellman structure */ H235_DiffieHellman( const H235_DiffieHellman & dh ); /**Create a copy of the Diffie-Hellman parameters. */ H235_DiffieHellman & operator=( const H235_DiffieHellman & dh ); /**Destroy and release storage for Diffie-Hellman parameters. */ ~H235_DiffieHellman(); //@} /**@name Public Functions */ //@{ /**Get internal OpenSSL DH structure. */ operator dh_st *() const { return dh; } /** Check Parameters */ PBoolean CheckParams(); /** SetRemotePublicKey */ void SetRemoteKey(bignum_st * remKey); /** Generate Half Key */ PBoolean GenerateHalfKey(); /** Compute Session key */ PBoolean ComputeSessionKey(PBYTEArray & SessionKey); /** Get the Public Key */ bignum_st * GetPublicKey(); /** Get the Key Length */ int GetKeyLength(); //@} /**@name Encoding for the H245 Stream */ //@{ /** Encode Prime */ void Encode_P(PASN_BitString & p); /** Decode Prime */ void Decode_P(const PASN_BitString & p); /** Encode Generator */ void Encode_G(PASN_BitString & g); /** Decode Generator */ void Decode_G(const PASN_BitString & g); /** Encode Public Half Key */ void Encode_HalfKey(PASN_BitString & hk); /** decode Public Half Key */ void Decode_HalfKey(const PASN_BitString & hk); //@} protected: /**@name Protected Functions */ //@{ /**Create Diffie-Hellman parameters from Scratch. Note: This function was built from the easy-tls example of the OpenSSL source code. */ PBoolean CreateParams(); //@} PMutex vbMutex; /// Mutex dh_st * dh; /// Local DiffieHellman bignum_st * m_remKey; /// Remote Public Key PBoolean m_toSend; /// Whether P & G are transmitted. int m_keySize; /// Key Size }; #endif // H323_H235h323plus/include/jitter.h0000644000175000017500000001672611232560007014214 0ustar markmark/* * jitter.h * * Jitter buffer support * * Open H323 Library * * Copyright (c) 1999-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Contributor(s): ______________________________________. * * $Log: jitter.h,v $ * Revision 1.3 2009/07/25 10:35:51 shorne * First cut of H.460.23/.24 support * * Revision 1.2 2008/05/23 11:19:53 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:50:50 shorne * First commit of h323plus * * Revision 1.15 2006/01/18 07:46:08 csoutheren * Initial version of RTP aggregation (disabled by default) * * Revision 1.14 2005/11/30 13:05:01 csoutheren * Changed tags for Doxygen * * Revision 1.13 2003/10/28 22:38:31 dereksmithies * Rework of jitter buffer. Many thanks to Henry Harrison of Alice Street. * * Revision 1.12ACC1.0 6th October 2003 henryh * Complete change to adaptive algorithm * * Revision 1.12 2002/10/31 00:32:39 robertj * Enhanced jitter buffer system so operates dynamically between minimum and * maximum values. Altered API to assure app writers note the change! * * Revision 1.11 2002/09/16 01:14:15 robertj * Added #define so can select if #pragma interface/implementation is used on * platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan. * * Revision 1.10 2002/09/03 05:40:18 robertj * Normalised the multi-include header prevention ifdef/define symbol. * Added buffer reset on excess buffer overruns. * Added ability to get buffer overruns for statistics display. * * Revision 1.9 2002/08/05 10:03:47 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.8 2001/09/11 00:21:21 robertj * Fixed missing stack sizes in endpoint for cleaner thread and jitter thread. * * Revision 1.7 2001/02/09 05:16:24 robertj * Added #pragma interface for GNU C++. * * Revision 1.6 2000/05/25 02:26:12 robertj * Added ignore of marker bits on broken clients that sets it on every RTP packet. * * Revision 1.5 2000/05/04 11:49:21 robertj * Added Packets Too Late statistics, requiring major rearrangement of jitter buffer code. * * Revision 1.4 2000/05/02 04:32:24 robertj * Fixed copyright notice comment. * * Revision 1.3 2000/04/30 03:56:14 robertj * More instrumentation to analyse jitter buffer operation. * * Revision 1.2 2000/03/20 20:51:13 robertj * Fixed possible buffer overrun problem in RTP_DataFrames * * Revision 1.1 1999/12/23 23:02:35 robertj * File reorganision for separating RTP from H.323 and creation of LID for VPB support. * */ #ifndef __OPAL_JITTER_H #define __OPAL_JITTER_H #ifdef P_USE_PRAGMA #pragma interface #endif #include "rtp.h" class RTP_JitterBufferAnalyser; class RTP_AggregatedHandle; /////////////////////////////////////////////////////////////////////////////// class RTP_JitterBuffer : public PObject { PCLASSINFO(RTP_JitterBuffer, PObject); public: friend class RTP_AggregatedHandle; RTP_JitterBuffer( RTP_Session & session, ///< Associated RTP session tor ead data from unsigned minJitterDelay, ///< Minimum delay in RTP timestamp units unsigned maxJitterDelay, ///< Maximum delay in RTP timestamp units PINDEX stackSize = 30000 ///< Stack size for jitter thread ); ~RTP_JitterBuffer(); // PINDEX GetSize() const { return bufferSize; } /**Set the maximum delay the jitter buffer will operate to. */ void SetDelay( unsigned minJitterDelay, ///< Minimum delay in RTP timestamp units unsigned maxJitterDelay ///< Maximum delay in RTP timestamp units ); void UseImmediateReduction(PBoolean state) { doJitterReductionImmediately = state; } /**Reset Firt write This is used when redirecting media flows to ensure Jitter buffer is not exceeded. */ void ResetFirstWrite(); /**Read a data frame from the RTP channel. Any control frames received are dispatched to callbacks and are not returned by this function. It will block until a data frame is available or an error occurs. */ virtual PBoolean ReadData( DWORD timestamp, ///< Timestamp to read from buffer. RTP_DataFrame & frame ///< Frame read from the RTP session ); /**Get current delay for jitter buffer. */ DWORD GetJitterTime() const { return currentJitterTime; } /**Get total number received packets too late to go into jitter buffer. */ DWORD GetPacketsTooLate() const { return packetsTooLate; } /**Get total number received packets that overran the jitter buffer. */ DWORD GetBufferOverruns() const { return bufferOverruns; } /**Get maximum consecutive marker bits before buffer starts to ignore them. */ DWORD GetMaxConsecutiveMarkerBits() const { return maxConsecutiveMarkerBits; } /**Set maximum consecutive marker bits before buffer starts to ignore them. */ void SetMaxConsecutiveMarkerBits(DWORD max) { maxConsecutiveMarkerBits = max; } /**Start seperate jitter thread */ void Resume( #ifdef H323_RTP_AGGREGATE PHandleAggregator * aggregator #endif ); PDECLARE_NOTIFIER(PThread, RTP_JitterBuffer, JitterThreadMain); protected: //virtual void Main(); class Entry : public RTP_DataFrame { public: Entry * next; Entry * prev; PTimeInterval tick; }; RTP_Session & session; PINDEX bufferSize; DWORD minJitterTime; DWORD maxJitterTime; DWORD maxConsecutiveMarkerBits; unsigned currentDepth; DWORD currentJitterTime; DWORD packetsTooLate; unsigned bufferOverruns; unsigned consecutiveBufferOverruns; DWORD consecutiveMarkerBits; PTimeInterval consecutiveEarlyPacketStartTime; DWORD lastWriteTimestamp; PTimeInterval lastWriteTick; DWORD jitterCalc; DWORD targetJitterTime; unsigned jitterCalcPacketCount; PBoolean doJitterReductionImmediately; PBoolean doneFreeTrash; Entry * oldestFrame; Entry * newestFrame; Entry * freeFrames; Entry * currentWriteFrame; PMutex bufferMutex; PBoolean shuttingDown; PBoolean preBuffering; PBoolean doneFirstWrite; RTP_JitterBufferAnalyser * analyser; PThread * jitterThread; PINDEX jitterStackSize; #ifdef H323_RTP_AGGREGATE RTP_AggregatedHandle * aggregratedHandle; #endif PBoolean Init(Entry * & currentReadFrame, PBoolean & markerWarning); PBoolean PreRead(Entry * & currentReadFrame, PBoolean & markerWarning); PBoolean OnRead(Entry * & currentReadFrame, PBoolean & markerWarning, PBoolean loop); void DeInit(Entry * & currentReadFrame, PBoolean & markerWarning); }; #endif // __OPAL_JITTER_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/dynacodec.h0000644000175000017500000002107511015524054014636 0ustar markmark/* * dynacodec.h * * Dynamic codec loading * * Open H323 Library * * Copyright (c) 2003 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: dynacodec.h,v $ * Revision 1.2 2008/05/23 11:19:08 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:50:48 shorne * First commit of h323plus * * Revision 1.2 2003/04/30 04:57:13 craigs * Changed interface to DLL codec to improve Opal compatibility * * Revision 1.1 2003/04/27 23:48:24 craigs * Initial version * */ #ifndef _OPALDYNACODEC #define _OPALDYNACODEC extern "C" { #include "dllcodec.h" }; #include "h323caps.h" ///////////////////////////////////////////////////////////////////////////// class OpalDLLCodecRec; class OpalDynaCodecDLL : public PDynaLink { public: PCLASSINFO(OpalDynaCodecDLL, PDynaLink); OpalDynaCodecDLL(const PFilePath & codec); PBoolean Load(); OpalDLLCodecInfo * EnumerateCodecs(unsigned * count); static PBoolean LoadCodecs(); static PBoolean LoadCodecs(const PDirectory & dir); static PBoolean LoadCodec(const PFilePath & file); static PINDEX AddAudioCapabilities(H323EndPoint & ep, PINDEX descriptorNum, PINDEX simultaneousNum, H323Capabilities & capabilities); static PINDEX AddVideoCapabilities(H323EndPoint & ep, PINDEX descriptorNum, PINDEX simultaneousNum, H323Capabilities & capabilities); static PINDEX AddCapabilities(H323EndPoint & ep, PINDEX descriptorNum, PINDEX simultaneousNum, H323Capabilities & capabilities, const PString & type); static PDirectory defaultCodecDir; protected: OpalDLLCodecInfo * (*EnumerateCodecsFn)(unsigned apiVersion, unsigned * count); static PMutex mutex; static PBoolean inited; int referenceCount; }; ///////////////////////////////////////////////////////////////////////////// class OpalDLLCodecRec : public PObject { PCLASSINFO(OpalDLLCodecRec, PObject); public: OpalDLLCodecRec(OpalDynaCodecDLL & _encoder, const PStringToString & _attributes, const OpalDLLCodecInfo & _encoderCodeInfo, OpalMediaFormat * _mediaFormat); void * CreateContext() const; void DestroyContext(void * context) const; H323Capability * CreateCapability(H323EndPoint & ep) const; void SetParameter(const PString & attribute, const PString & value) const; PString GetParameter(const PString & attribute, const char * defValue = NULL) const; OpalDynaCodecDLL & encoder; PStringToString attributes; OpalDLLCodecInfo info; OpalMediaFormat * mediaFormat; //H323Capability * capability; //PString h323Name; }; ///////////////////////////////////////////////////////////////////////////// class OpalDynaAudioCodec : public H323FramedAudioCodec { PCLASSINFO(OpalDynaAudioCodec, H323FramedAudioCodec) public: OpalDynaAudioCodec(const OpalDLLCodecRec & _info, Direction direction); ~OpalDynaAudioCodec(); virtual PBoolean EncodeFrame(BYTE * buffer, unsigned & length); virtual PBoolean DecodeFrame(const BYTE * buffer, unsigned length, unsigned & written); protected: const OpalDLLCodecRec & info; void * context; unsigned samplesPerFrame; unsigned bytesPerFrame; }; ///////////////////////////////////////////////////////////////////////////// class OpalDynaCodecRegistration : public H323CapabilityRegistration { PCLASSINFO(OpalDynaCodecRegistration, H323CapabilityRegistration); public: OpalDynaCodecRegistration(const PString & name, OpalDLLCodecRec * _encoderInfo, OpalDLLCodecRec * _decoderInfo, OpalMediaFormat * _mediaFormat); H323Capability * Create(H323EndPoint & ep) const; friend class OpalDynaCodecDLL; protected: OpalDLLCodecRec * encoderInfo; OpalDLLCodecRec * decoderInfo; OpalMediaFormat * mediaFormat; }; ///////////////////////////////////////////////////////////////////////////// class OpalDynaCodecNonStandardAudioCapability : public H323NonStandardAudioCapability { PCLASSINFO(OpalDynaCodecNonStandardAudioCapability, H323NonStandardAudioCapability); public: OpalDynaCodecNonStandardAudioCapability( const OpalDLLCodecRec & _info, H323EndPoint & _endpoint, unsigned maxPacketSize, /// Maximum size of an audio packet in frames unsigned desiredPacketSize, /// Desired transmit size of an audio packet in frames BYTE country, /// t35 information BYTE extension, /// t35 information WORD maufacturer, /// t35 information const BYTE * nonstdHeader, /// nonstandard header PINDEX nonstdHeaderLen); virtual PObject * Clone() const; virtual H323Codec * CreateCodec(H323Codec::Direction direction) const; virtual PString GetFormatName() const; protected: const OpalDLLCodecRec & info; H323EndPoint & endpoint; }; ///////////////////////////////////////////////////////////////////////////// class OpalDynaNonStandardAudioCodec : public OpalDynaAudioCodec { PCLASSINFO(OpalDynaNonStandardAudioCodec, OpalDynaAudioCodec) public: OpalDynaNonStandardAudioCodec(const OpalDLLCodecRec & _info, Direction direction); ~OpalDynaNonStandardAudioCodec(); }; ///////////////////////////////////////////////////////////////////////////// class OpalDynaCodecStandardAudioCapability : public H323AudioCapability { PCLASSINFO(OpalDynaCodecStandardAudioCapability, H323AudioCapability); public: OpalDynaCodecStandardAudioCapability( const OpalDLLCodecRec & _info, H323EndPoint & _endpoint, unsigned maxPacketSize, /// Maximum size of an audio packet in frames unsigned desiredPacketSize, /// Desired transmit size of an audio packet in frames unsigned subType); PBoolean OnSendingPDU(H245_AudioCapability & cap, unsigned packetSize) const; PBoolean OnReceivedPDU(const H245_AudioCapability & cap, unsigned & packetSize); PObject * Clone() const; H323Codec * CreateCodec(H323Codec::Direction direction) const; PString GetFormatName() const; unsigned GetSubType() const; protected: const OpalDLLCodecRec & info; H323EndPoint & endpoint; unsigned subType; }; ///////////////////////////////////////////////////////////////////////////// class OpalDynaCodecStandardVideoCapability : public H323VideoCapability { PCLASSINFO(OpalDynaCodecStandardVideoCapability, H323VideoCapability); public: OpalDynaCodecStandardVideoCapability( const OpalDLLCodecRec & _info, H323EndPoint & _endpoint, unsigned subType); PBoolean OnSendingPDU(H245_VideoCapability & pdu) const; PBoolean OnSendingPDU(H245_VideoMode & pdu) const; PBoolean OnReceivedPDU(const H245_VideoCapability & pdu); PObject * Clone() const; H323Codec * CreateCodec(H323Codec::Direction direction) const; PString GetFormatName() const; unsigned GetSubType() const; protected: const OpalDLLCodecRec & info; H323EndPoint & endpoint; unsigned subType; }; ///////////////////////////////////////////////////////////////////////////// class OpalDynaVideoCodec : public H323VideoCodec { PCLASSINFO(OpalDynaVideoCodec, H323VideoCodec) public: OpalDynaVideoCodec( const OpalDLLCodecRec & _info, Direction direction); ~OpalDynaVideoCodec(); PBoolean Read(BYTE * buffer,unsigned & length,RTP_DataFrame & rtpFrame); PBoolean Write(const BYTE * buffer, unsigned length, const RTP_DataFrame & rtp, unsigned & written); protected: const OpalDLLCodecRec & info; void * context; }; #endif h323plus/include/h225ras.h0000644000175000017500000005262711530641771014112 0ustar markmark/* * h225ras.h * * H.225 RAS protocol handler * * Open H323 Library * * Copyright (c) 2001 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * iFace, Inc. http://www.iface.com * * Contributor(s): ______________________________________. * * $Log: h225ras.h,v $ * Revision 1.6 2011/02/22 05:04:57 shorne * Enable selectively removing capabilities based on the features PDU's advertising feature. H.460.9 now advertises in ARQ when receiving call. * * Revision 1.5 2011/02/20 06:55:46 shorne * Fixes for H.460 to allow better selection of mesasage location in PDU. Features or Generic Data. Corrected H.460.9 * * Revision 1.4 2009/11/29 23:31:05 shorne * BUG FIX : completely disable H.460 support if remote does not support it. * * Revision 1.3 2009/02/22 02:02:05 shorne * Added ability to enable SCI/SCR without needing H248 support * * Revision 1.2 2008/05/23 11:19:23 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:50:48 shorne * First commit of h323plus * * Revision 1.40 2005/11/30 13:05:01 csoutheren * Changed tags for Doxygen * * Revision 1.39 2005/01/03 14:03:20 csoutheren * Added new configure options and ability to disable/enable modules * * Revision 1.38 2005/01/03 06:25:52 csoutheren * Added extensive support for disabling code modules at compile time * * Revision 1.37 2004/09/07 22:50:55 rjongbloed * Changed usage of template function as MSVC6 will not compile it. * * Revision 1.36 2004/09/03 01:06:09 csoutheren * Added initial hooks for H.460 GEF * Thanks to Simon Horne and ISVO (Asia) Pte Ltd. for this contribution * * Revision 1.35 2003/04/01 01:05:39 robertj * Split service control handlers from H.225 RAS header. * * Revision 1.34 2003/03/20 01:51:07 robertj * More abstraction of H.225 RAS and H.501 protocols transaction handling. * * Revision 1.33 2003/03/01 00:23:42 craigs * New PeerElement implementation * * Revision 1.32 2003/02/21 07:23:18 robertj * Fixed up some comments * * Revision 1.31 2003/02/21 05:28:39 craigs * Factored out code for user with peer elements * * Revision 1.30 2003/02/01 13:31:14 robertj * Changes to support CAT authentication in RAS. * * Revision 1.29 2002/11/28 04:41:44 robertj * Added support for RAS ServiceControlIndication command. * * Revision 1.28 2002/11/27 06:54:52 robertj * Added Service Control Session management as per Annex K/H.323 via RAS * only at this stage. * Added H.248 ASN and very primitive infrastructure for linking into the * Service Control Session management system. * Added basic infrastructure for Annex K/H.323 HTTP transport system. * Added Call Credit Service Control to display account balances. * * Revision 1.27 2002/11/21 22:26:09 robertj * Changed promiscuous mode to be three way. Fixes race condition in gkserver * which can cause crashes or more PDUs to be sent to the wrong place. * * Revision 1.26 2002/11/21 07:21:46 robertj * Improvements to alternate gatekeeper client code, thanks Kevin Bouchard * * Revision 1.25 2002/11/11 07:20:08 robertj * Minor clean up of API for doing RAS requests suing authentication. * * Revision 1.24 2002/11/04 11:52:08 robertj * Fixed comment * * Revision 1.23 2002/10/17 02:09:01 robertj * Backed out previous change for including PDU tag, doesn't work! * * Revision 1.22 2002/10/16 03:40:12 robertj * Added PDU tag to cache look up key. * * Revision 1.21 2002/09/19 09:15:56 robertj * Fixed problem with making (and assuring with multi-threading) IRQ and DRQ * requests are sent to the correct endpoint address, thanks Martijn Roest. * * Revision 1.20 2002/09/16 01:14:15 robertj * Added #define so can select if #pragma interface/implementation is used on * platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan. * * Revision 1.19 2002/09/03 05:37:17 robertj * Normalised the multi-include header prevention ifdef/define symbol. * Added RAS port constants to RAS clas name space. * * Revision 1.18 2002/08/12 06:29:55 robertj * Fixed problem with cached responses being aged before the RIP time which * made retries by client appear as "new" requests when they were not. * * Revision 1.17 2002/08/12 05:38:20 robertj * Changes to the RAS subsystem to support ability to make requests to client * from gkserver without causing bottlenecks and race conditions. * * Revision 1.16 2002/08/05 10:03:47 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.15 2002/08/05 05:17:37 robertj * Fairly major modifications to support different authentication credentials * in ARQ to the logged in ones on RRQ. For both client and server. * Various other H.235 authentication bugs and anomalies fixed on the way. * * Revision 1.14 2002/07/29 11:36:08 robertj * Fixed race condition if RIP is followed very quickly by actual response. * * Revision 1.13 2002/06/26 03:47:45 robertj * Added support for alternate gatekeepers. * * Revision 1.12 2002/06/21 02:52:44 robertj * Fixed problem with double checking H.235 hashing, this causes failure as * the authenticator thinks it is a replay attack. * * Revision 1.11 2002/06/12 03:49:56 robertj * Added PrintOn function for trace output of RAS channel. * * Revision 1.10 2002/05/03 09:18:45 robertj * Added automatic retransmission of RAS responses to retried requests. * * Revision 1.9 2001/10/09 08:04:59 robertj * Fixed unregistration so still unregisters if gk goes offline, thanks Chris Purvis * * Revision 1.8 2001/09/18 10:36:54 robertj * Allowed multiple overlapping requests in RAS channel. * * Revision 1.7 2001/09/12 03:12:36 robertj * Added ability to disable the checking of RAS responses against * security authenticators. * Fixed bug in having multiple authentications if have a retry. * * Revision 1.6 2001/08/10 11:03:49 robertj * Major changes to H.235 support in RAS to support server. * * Revision 1.5 2001/08/06 07:44:52 robertj * Fixed problems with building without SSL * * Revision 1.4 2001/08/06 03:18:35 robertj * Fission of h323.h to h323ep.h & h323con.h, h323.h now just includes files. * Improved access to H.235 secure RAS functionality. * Changes to H.323 secure RAS contexts to help use with gk server. * * Revision 1.3 2001/06/25 01:06:40 robertj * Fixed resolution of RAS timeout so not rounded down to second. * * Revision 1.2 2001/06/22 00:21:10 robertj * Fixed bug in H.225 RAS protocol with 16 versus 32 bit sequence numbers. * * Revision 1.1 2001/06/18 06:23:47 robertj * Split raw H.225 RAS protocol out of gatekeeper client class. * */ #ifndef __OPAL_H225RAS_H #define __OPAL_H225RAS_H #ifdef P_USE_PRAGMA #pragma interface #endif #include "openh323buildopts.h" #include "transports.h" #include "h235auth.h" #include "h323trans.h" #include "svcctrl.h" class PASN_Sequence; class PASN_Choice; class H225_GatekeeperRequest; class H225_GatekeeperConfirm; class H225_GatekeeperReject; class H225_RegistrationRequest; class H225_RegistrationConfirm; class H225_RegistrationReject; class H225_UnregistrationRequest; class H225_UnregistrationConfirm; class H225_UnregistrationReject; class H225_AdmissionRequest; class H225_AdmissionConfirm; class H225_AdmissionReject; class H225_BandwidthRequest; class H225_BandwidthConfirm; class H225_BandwidthReject; class H225_DisengageRequest; class H225_DisengageConfirm; class H225_DisengageReject; class H225_LocationRequest; class H225_LocationConfirm; class H225_LocationReject; class H225_InfoRequest; class H225_InfoRequestResponse; class H225_NonStandardMessage; class H225_UnknownMessageResponse; class H225_RequestInProgress; class H225_ResourcesAvailableIndicate; class H225_ResourcesAvailableConfirm; class H225_InfoRequestAck; class H225_InfoRequestNak; class H225_ArrayOf_CryptoH323Token; class H225_FeatureSet; class H323EndPoint; class H323RasPDU; /////////////////////////////////////////////////////////////////////////////// /**This class embodies the H.225.0 RAS protocol to/from gatekeepers. */ class H225_RAS : public H323Transactor { PCLASSINFO(H225_RAS, H323Transactor); public: /**@name Construction */ //@{ enum { DefaultRasMulticastPort = 1718, DefaultRasUdpPort = 1719 }; /**Create a new protocol handler. */ H225_RAS( H323EndPoint & endpoint, ///< Endpoint gatekeeper is associated with. H323Transport * transport ///< Transport over which gatekeepers communicates. ); /**Destroy protocol handler. */ ~H225_RAS(); //@} /**@name Overrides from PObject */ //@{ /**Print the name of the gatekeeper. */ void PrintOn( ostream & strm ///< Stream to print to. ) const; //@} /**@name Overrides from H323Transactor */ //@{ /**Create the transaction PDU for reading. */ virtual H323TransactionPDU * CreateTransactionPDU() const; /**Handle and dispatch a transaction PDU */ virtual PBoolean HandleTransaction( const PASN_Object & rawPDU ); /**Allow for modifications to PDU on send. */ virtual void OnSendingPDU( PASN_Object & rawPDU ); //@} /**@name Protocol callbacks */ //@{ virtual void OnSendGatekeeperRequest(H323RasPDU &, H225_GatekeeperRequest &); virtual void OnSendGatekeeperConfirm(H323RasPDU &, H225_GatekeeperConfirm &); virtual void OnSendGatekeeperReject(H323RasPDU &, H225_GatekeeperReject &); virtual void OnSendGatekeeperRequest(H225_GatekeeperRequest &); virtual void OnSendGatekeeperConfirm(H225_GatekeeperConfirm &); virtual void OnSendGatekeeperReject(H225_GatekeeperReject &); virtual PBoolean OnReceiveGatekeeperRequest(const H323RasPDU &, const H225_GatekeeperRequest &); virtual PBoolean OnReceiveGatekeeperConfirm(const H323RasPDU &, const H225_GatekeeperConfirm &); virtual PBoolean OnReceiveGatekeeperReject(const H323RasPDU &, const H225_GatekeeperReject &); virtual PBoolean OnReceiveGatekeeperRequest(const H225_GatekeeperRequest &); virtual PBoolean OnReceiveGatekeeperConfirm(const H225_GatekeeperConfirm &); virtual PBoolean OnReceiveGatekeeperReject(const H225_GatekeeperReject &); virtual void OnSendRegistrationRequest(H323RasPDU &, H225_RegistrationRequest &); virtual void OnSendRegistrationConfirm(H323RasPDU &, H225_RegistrationConfirm &); virtual void OnSendRegistrationReject(H323RasPDU &, H225_RegistrationReject &); virtual void OnSendRegistrationRequest(H225_RegistrationRequest &); virtual void OnSendRegistrationConfirm(H225_RegistrationConfirm &); virtual void OnSendRegistrationReject(H225_RegistrationReject &); virtual PBoolean OnReceiveRegistrationRequest(const H323RasPDU &, const H225_RegistrationRequest &); virtual PBoolean OnReceiveRegistrationConfirm(const H323RasPDU &, const H225_RegistrationConfirm &); virtual PBoolean OnReceiveRegistrationReject(const H323RasPDU &, const H225_RegistrationReject &); virtual PBoolean OnReceiveRegistrationRequest(const H225_RegistrationRequest &); virtual PBoolean OnReceiveRegistrationConfirm(const H225_RegistrationConfirm &); virtual PBoolean OnReceiveRegistrationReject(const H225_RegistrationReject &); virtual void OnSendUnregistrationRequest(H323RasPDU &, H225_UnregistrationRequest &); virtual void OnSendUnregistrationConfirm(H323RasPDU &, H225_UnregistrationConfirm &); virtual void OnSendUnregistrationReject(H323RasPDU &, H225_UnregistrationReject &); virtual void OnSendUnregistrationRequest(H225_UnregistrationRequest &); virtual void OnSendUnregistrationConfirm(H225_UnregistrationConfirm &); virtual void OnSendUnregistrationReject(H225_UnregistrationReject &); virtual PBoolean OnReceiveUnregistrationRequest(const H323RasPDU &, const H225_UnregistrationRequest &); virtual PBoolean OnReceiveUnregistrationConfirm(const H323RasPDU &, const H225_UnregistrationConfirm &); virtual PBoolean OnReceiveUnregistrationReject(const H323RasPDU &, const H225_UnregistrationReject &); virtual PBoolean OnReceiveUnregistrationRequest(const H225_UnregistrationRequest &); virtual PBoolean OnReceiveUnregistrationConfirm(const H225_UnregistrationConfirm &); virtual PBoolean OnReceiveUnregistrationReject(const H225_UnregistrationReject &); virtual void OnSendAdmissionRequest(H323RasPDU &, H225_AdmissionRequest &); virtual void OnSendAdmissionConfirm(H323RasPDU &, H225_AdmissionConfirm &); virtual void OnSendAdmissionReject(H323RasPDU &, H225_AdmissionReject &); virtual void OnSendAdmissionRequest(H225_AdmissionRequest &); virtual void OnSendAdmissionConfirm(H225_AdmissionConfirm &); virtual void OnSendAdmissionReject(H225_AdmissionReject &); virtual PBoolean OnReceiveAdmissionRequest(const H323RasPDU &, const H225_AdmissionRequest &); virtual PBoolean OnReceiveAdmissionConfirm(const H323RasPDU &, const H225_AdmissionConfirm &); virtual PBoolean OnReceiveAdmissionReject(const H323RasPDU &, const H225_AdmissionReject &); virtual PBoolean OnReceiveAdmissionRequest(const H225_AdmissionRequest &); virtual PBoolean OnReceiveAdmissionConfirm(const H225_AdmissionConfirm &); virtual PBoolean OnReceiveAdmissionReject(const H225_AdmissionReject &); virtual void OnSendBandwidthRequest(H323RasPDU &, H225_BandwidthRequest &); virtual void OnSendBandwidthConfirm(H323RasPDU &, H225_BandwidthConfirm &); virtual void OnSendBandwidthReject(H323RasPDU &, H225_BandwidthReject &); virtual void OnSendBandwidthRequest(H225_BandwidthRequest &); virtual void OnSendBandwidthConfirm(H225_BandwidthConfirm &); virtual void OnSendBandwidthReject(H225_BandwidthReject &); virtual PBoolean OnReceiveBandwidthRequest(const H323RasPDU &, const H225_BandwidthRequest &); virtual PBoolean OnReceiveBandwidthConfirm(const H323RasPDU &, const H225_BandwidthConfirm &); virtual PBoolean OnReceiveBandwidthReject(const H323RasPDU &, const H225_BandwidthReject &); virtual PBoolean OnReceiveBandwidthRequest(const H225_BandwidthRequest &); virtual PBoolean OnReceiveBandwidthConfirm(const H225_BandwidthConfirm &); virtual PBoolean OnReceiveBandwidthReject(const H225_BandwidthReject &); virtual void OnSendDisengageRequest(H323RasPDU &, H225_DisengageRequest &); virtual void OnSendDisengageConfirm(H323RasPDU &, H225_DisengageConfirm &); virtual void OnSendDisengageReject(H323RasPDU &, H225_DisengageReject &); virtual void OnSendDisengageRequest(H225_DisengageRequest &); virtual void OnSendDisengageConfirm(H225_DisengageConfirm &); virtual void OnSendDisengageReject(H225_DisengageReject &); virtual PBoolean OnReceiveDisengageRequest(const H323RasPDU &, const H225_DisengageRequest &); virtual PBoolean OnReceiveDisengageConfirm(const H323RasPDU &, const H225_DisengageConfirm &); virtual PBoolean OnReceiveDisengageReject(const H323RasPDU &, const H225_DisengageReject &); virtual PBoolean OnReceiveDisengageRequest(const H225_DisengageRequest &); virtual PBoolean OnReceiveDisengageConfirm(const H225_DisengageConfirm &); virtual PBoolean OnReceiveDisengageReject(const H225_DisengageReject &); virtual void OnSendLocationRequest(H323RasPDU &, H225_LocationRequest &); virtual void OnSendLocationConfirm(H323RasPDU &, H225_LocationConfirm &); virtual void OnSendLocationReject(H323RasPDU &, H225_LocationReject &); virtual void OnSendLocationRequest(H225_LocationRequest &); virtual void OnSendLocationConfirm(H225_LocationConfirm &); virtual void OnSendLocationReject(H225_LocationReject &); virtual PBoolean OnReceiveLocationRequest(const H323RasPDU &, const H225_LocationRequest &); virtual PBoolean OnReceiveLocationConfirm(const H323RasPDU &, const H225_LocationConfirm &); virtual PBoolean OnReceiveLocationReject(const H323RasPDU &, const H225_LocationReject &); virtual PBoolean OnReceiveLocationRequest(const H225_LocationRequest &); virtual PBoolean OnReceiveLocationConfirm(const H225_LocationConfirm &); virtual PBoolean OnReceiveLocationReject(const H225_LocationReject &); virtual void OnSendInfoRequest(H323RasPDU &, H225_InfoRequest &); virtual void OnSendInfoRequestAck(H323RasPDU &, H225_InfoRequestAck &); virtual void OnSendInfoRequestNak(H323RasPDU &, H225_InfoRequestNak &); virtual void OnSendInfoRequestResponse(H323RasPDU &, H225_InfoRequestResponse &); virtual void OnSendInfoRequest(H225_InfoRequest &); virtual void OnSendInfoRequestAck(H225_InfoRequestAck &); virtual void OnSendInfoRequestNak(H225_InfoRequestNak &); virtual void OnSendInfoRequestResponse(H225_InfoRequestResponse &); virtual PBoolean OnReceiveInfoRequest(const H323RasPDU &, const H225_InfoRequest &); virtual PBoolean OnReceiveInfoRequestAck(const H323RasPDU &, const H225_InfoRequestAck &); virtual PBoolean OnReceiveInfoRequestNak(const H323RasPDU &, const H225_InfoRequestNak &); virtual PBoolean OnReceiveInfoRequestResponse(const H323RasPDU &, const H225_InfoRequestResponse &); virtual PBoolean OnReceiveInfoRequest(const H225_InfoRequest &); virtual PBoolean OnReceiveInfoRequestAck(const H225_InfoRequestAck &); virtual PBoolean OnReceiveInfoRequestNak(const H225_InfoRequestNak &); virtual PBoolean OnReceiveInfoRequestResponse(const H225_InfoRequestResponse &); virtual void OnSendResourcesAvailableIndicate(H323RasPDU &, H225_ResourcesAvailableIndicate &); virtual void OnSendResourcesAvailableConfirm(H323RasPDU &, H225_ResourcesAvailableConfirm &); virtual void OnSendResourcesAvailableIndicate(H225_ResourcesAvailableIndicate &); virtual void OnSendResourcesAvailableConfirm(H225_ResourcesAvailableConfirm &); virtual PBoolean OnReceiveResourcesAvailableIndicate(const H323RasPDU &, const H225_ResourcesAvailableIndicate &); virtual PBoolean OnReceiveResourcesAvailableConfirm(const H323RasPDU &, const H225_ResourcesAvailableConfirm &); virtual PBoolean OnReceiveResourcesAvailableIndicate(const H225_ResourcesAvailableIndicate &); virtual PBoolean OnReceiveResourcesAvailableConfirm(const H225_ResourcesAvailableConfirm &); virtual void OnSendServiceControlIndication(H323RasPDU &, H225_ServiceControlIndication &); virtual void OnSendServiceControlResponse(H323RasPDU &, H225_ServiceControlResponse &); virtual void OnSendServiceControlIndication(H225_ServiceControlIndication &); virtual void OnSendServiceControlResponse(H225_ServiceControlResponse &); virtual PBoolean OnReceiveServiceControlIndication(const H323RasPDU &, const H225_ServiceControlIndication &); virtual PBoolean OnReceiveServiceControlResponse(const H323RasPDU &, const H225_ServiceControlResponse &); virtual PBoolean OnReceiveServiceControlIndication(const H225_ServiceControlIndication &); virtual PBoolean OnReceiveServiceControlResponse(const H225_ServiceControlResponse &); virtual void OnSendNonStandardMessage(H323RasPDU &, H225_NonStandardMessage &); virtual void OnSendNonStandardMessage(H225_NonStandardMessage &); virtual PBoolean OnReceiveNonStandardMessage(const H323RasPDU &, const H225_NonStandardMessage &); virtual PBoolean OnReceiveNonStandardMessage(const H225_NonStandardMessage &); virtual void OnSendUnknownMessageResponse(H323RasPDU &, H225_UnknownMessageResponse &); virtual void OnSendUnknownMessageResponse(H225_UnknownMessageResponse &); virtual PBoolean OnReceiveUnknownMessageResponse(const H323RasPDU &, const H225_UnknownMessageResponse &); virtual PBoolean OnReceiveUnknownMessageResponse(const H225_UnknownMessageResponse &); virtual void OnSendRequestInProgress(H323RasPDU &, H225_RequestInProgress &); virtual void OnSendRequestInProgress(H225_RequestInProgress &); virtual PBoolean OnReceiveRequestInProgress(const H323RasPDU &, const H225_RequestInProgress &); virtual PBoolean OnReceiveRequestInProgress(const H225_RequestInProgress &); virtual PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet &, PBoolean) const { return FALSE; } virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &) const { } virtual void DisableFeatureSet(int) const { } /**Handle unknown PDU type. */ virtual PBoolean OnReceiveUnknown( const H323RasPDU & pdu ///< PDU that was not handled. ); //@} /**@name Member variable access */ //@{ /**Get the gatekeeper identifer. For clients at least one successful registration must have been achieved for this field to be filling in. */ const PString & GetIdentifier() const { return gatekeeperIdentifier; } /**Set the gatekeeper identifer. For servers this allows the identifier to be set and provided to all remote clients. */ void SetIdentifier(const PString & id) { gatekeeperIdentifier = id; } //@} protected: // Option variables PString gatekeeperIdentifier; }; #endif // __OPAL_H225RAS_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/h248.h0000644000175000017500000031713611015524101013371 0ustar markmark// // h248.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H248 #ifndef __H248_H #define __H248_H #ifdef P_USE_PRAGMA #pragma interface #endif #include // // SecurityParmIndex // class H248_SecurityParmIndex : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_SecurityParmIndex, PASN_OctetString); #endif public: H248_SecurityParmIndex(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H248_SecurityParmIndex(const char * v); H248_SecurityParmIndex(const PString & v); H248_SecurityParmIndex(const PBYTEArray & v); H248_SecurityParmIndex & operator=(const char * v); H248_SecurityParmIndex & operator=(const PString & v); H248_SecurityParmIndex & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // SequenceNum // class H248_SequenceNum : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_SequenceNum, PASN_OctetString); #endif public: H248_SequenceNum(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H248_SequenceNum(const char * v); H248_SequenceNum(const PString & v); H248_SequenceNum(const PBYTEArray & v); H248_SequenceNum & operator=(const char * v); H248_SequenceNum & operator=(const PString & v); H248_SequenceNum & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // AuthData // class H248_AuthData : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_AuthData, PASN_OctetString); #endif public: H248_AuthData(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H248_AuthData(const char * v); H248_AuthData(const PString & v); H248_AuthData(const PBYTEArray & v); H248_AuthData & operator=(const char * v); H248_AuthData & operator=(const PString & v); H248_AuthData & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // MId // class H248_IP4Address; class H248_IP6Address; class H248_DomainName; class H248_PathName; class H248_MId : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_MId, PASN_Choice); #endif public: H248_MId(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_ip4Address, e_ip6Address, e_domainName, e_deviceName, e_mtpAddress }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_IP4Address &() const; #else operator H248_IP4Address &(); operator const H248_IP4Address &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_IP6Address &() const; #else operator H248_IP6Address &(); operator const H248_IP6Address &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_DomainName &() const; #else operator H248_DomainName &(); operator const H248_DomainName &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_PathName &() const; #else operator H248_PathName &(); operator const H248_PathName &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // DomainName // class H248_DomainName : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_DomainName, PASN_Sequence); #endif public: H248_DomainName(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_portNumber }; PASN_IA5String m_name; PASN_Integer m_portNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IP4Address // class H248_IP4Address : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_IP4Address, PASN_Sequence); #endif public: H248_IP4Address(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_portNumber }; PASN_OctetString m_address; PASN_Integer m_portNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IP6Address // class H248_IP6Address : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_IP6Address, PASN_Sequence); #endif public: H248_IP6Address(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_portNumber }; PASN_OctetString m_address; PASN_Integer m_portNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PathName // class H248_PathName : public PASN_IA5String { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_PathName, PASN_IA5String); #endif public: H248_PathName(unsigned tag = UniversalIA5String, TagClass tagClass = UniversalTagClass); H248_PathName & operator=(const char * v); H248_PathName & operator=(const PString & v); PObject * Clone() const; }; // // Transaction // class H248_TransactionRequest; class H248_TransactionPending; class H248_TransactionReply; class H248_TransactionResponseAck; class H248_Transaction : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_Transaction, PASN_Choice); #endif public: H248_Transaction(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_transactionRequest, e_transactionPending, e_transactionReply, e_transactionResponseAck }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_TransactionRequest &() const; #else operator H248_TransactionRequest &(); operator const H248_TransactionRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_TransactionPending &() const; #else operator H248_TransactionPending &(); operator const H248_TransactionPending &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_TransactionReply &() const; #else operator H248_TransactionReply &(); operator const H248_TransactionReply &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_TransactionResponseAck &() const; #else operator H248_TransactionResponseAck &(); operator const H248_TransactionResponseAck &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // TransactionId // class H248_TransactionId : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_TransactionId, PASN_Integer); #endif public: H248_TransactionId(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H248_TransactionId & operator=(int v); H248_TransactionId & operator=(unsigned v); PObject * Clone() const; }; // // TransactionPending // class H248_TransactionPending : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_TransactionPending, PASN_Sequence); #endif public: H248_TransactionPending(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H248_TransactionId m_transactionId; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TransactionResponseAck // class H248_TransactionAck; class H248_TransactionResponseAck : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_TransactionResponseAck, PASN_Array); #endif public: H248_TransactionResponseAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_TransactionAck & operator[](PINDEX i) const; PObject * Clone() const; }; // // TransactionAck // class H248_TransactionAck : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_TransactionAck, PASN_Sequence); #endif public: H248_TransactionAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_lastAck }; H248_TransactionId m_firstAck; H248_TransactionId m_lastAck; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ErrorCode // class H248_ErrorCode : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ErrorCode, PASN_Integer); #endif public: H248_ErrorCode(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H248_ErrorCode & operator=(int v); H248_ErrorCode & operator=(unsigned v); PObject * Clone() const; }; // // ErrorText // class H248_ErrorText : public PASN_IA5String { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ErrorText, PASN_IA5String); #endif public: H248_ErrorText(unsigned tag = UniversalIA5String, TagClass tagClass = UniversalTagClass); H248_ErrorText & operator=(const char * v); H248_ErrorText & operator=(const PString & v); PObject * Clone() const; }; // // ContextID // class H248_ContextID : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ContextID, PASN_Integer); #endif public: H248_ContextID(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H248_ContextID & operator=(int v); H248_ContextID & operator=(unsigned v); PObject * Clone() const; }; // // ContextAttrAuditRequest // class H248_ContextAttrAuditRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ContextAttrAuditRequest, PASN_Sequence); #endif public: H248_ContextAttrAuditRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_topology, e_emergency, e_priority }; PASN_Null m_topology; PASN_Null m_emergency; PASN_Null m_priority; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Command // class H248_AmmRequest; class H248_SubtractRequest; class H248_AuditRequest; class H248_NotifyRequest; class H248_ServiceChangeRequest; class H248_Command : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_Command, PASN_Choice); #endif public: H248_Command(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_addReq, e_moveReq, e_modReq, e_subtractReq, e_auditCapRequest, e_auditValueRequest, e_notifyReq, e_serviceChangeReq }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_AmmRequest &() const; #else operator H248_AmmRequest &(); operator const H248_AmmRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_SubtractRequest &() const; #else operator H248_SubtractRequest &(); operator const H248_SubtractRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_AuditRequest &() const; #else operator H248_AuditRequest &(); operator const H248_AuditRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_NotifyRequest &() const; #else operator H248_NotifyRequest &(); operator const H248_NotifyRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_ServiceChangeRequest &() const; #else operator H248_ServiceChangeRequest &(); operator const H248_ServiceChangeRequest &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // CommandReply // class H248_AmmsReply; class H248_AuditReply; class H248_NotifyReply; class H248_ServiceChangeReply; class H248_CommandReply : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_CommandReply, PASN_Choice); #endif public: H248_CommandReply(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_addReply, e_moveReply, e_modReply, e_subtractReply, e_auditCapReply, e_auditValueReply, e_notifyReply, e_serviceChangeReply }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_AmmsReply &() const; #else operator H248_AmmsReply &(); operator const H248_AmmsReply &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_AuditReply &() const; #else operator H248_AuditReply &(); operator const H248_AuditReply &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_NotifyReply &() const; #else operator H248_NotifyReply &(); operator const H248_NotifyReply &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_ServiceChangeReply &() const; #else operator H248_ServiceChangeReply &(); operator const H248_ServiceChangeReply &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // AmmDescriptor // class H248_MediaDescriptor; class H248_ModemDescriptor; class H248_MuxDescriptor; class H248_EventsDescriptor; class H248_EventBufferDescriptor; class H248_SignalsDescriptor; class H248_DigitMapDescriptor; class H248_AuditDescriptor; class H248_AmmDescriptor : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_AmmDescriptor, PASN_Choice); #endif public: H248_AmmDescriptor(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_mediaDescriptor, e_modemDescriptor, e_muxDescriptor, e_eventsDescriptor, e_eventBufferDescriptor, e_signalsDescriptor, e_digitMapDescriptor, e_auditDescriptor }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_MediaDescriptor &() const; #else operator H248_MediaDescriptor &(); operator const H248_MediaDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_ModemDescriptor &() const; #else operator H248_ModemDescriptor &(); operator const H248_ModemDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_MuxDescriptor &() const; #else operator H248_MuxDescriptor &(); operator const H248_MuxDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_EventsDescriptor &() const; #else operator H248_EventsDescriptor &(); operator const H248_EventsDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_EventBufferDescriptor &() const; #else operator H248_EventBufferDescriptor &(); operator const H248_EventBufferDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_SignalsDescriptor &() const; #else operator H248_SignalsDescriptor &(); operator const H248_SignalsDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_DigitMapDescriptor &() const; #else operator H248_DigitMapDescriptor &(); operator const H248_DigitMapDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_AuditDescriptor &() const; #else operator H248_AuditDescriptor &(); operator const H248_AuditDescriptor &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // AuditReply // class H248_TerminationIDList; class H248_ErrorDescriptor; class H248_AuditResult; class H248_AuditReply : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_AuditReply, PASN_Choice); #endif public: H248_AuditReply(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_contextAuditResult, e_error, e_auditResult }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_TerminationIDList &() const; #else operator H248_TerminationIDList &(); operator const H248_TerminationIDList &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_ErrorDescriptor &() const; #else operator H248_ErrorDescriptor &(); operator const H248_ErrorDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_AuditResult &() const; #else operator H248_AuditResult &(); operator const H248_AuditResult &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // TerminationAudit // class H248_AuditReturnParameter; class H248_TerminationAudit : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_TerminationAudit, PASN_Array); #endif public: H248_TerminationAudit(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_AuditReturnParameter & operator[](PINDEX i) const; PObject * Clone() const; }; // // AuditReturnParameter // class H248_ErrorDescriptor; class H248_MediaDescriptor; class H248_ModemDescriptor; class H248_MuxDescriptor; class H248_EventsDescriptor; class H248_EventBufferDescriptor; class H248_SignalsDescriptor; class H248_DigitMapDescriptor; class H248_ObservedEventsDescriptor; class H248_StatisticsDescriptor; class H248_PackagesDescriptor; class H248_AuditDescriptor; class H248_AuditReturnParameter : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_AuditReturnParameter, PASN_Choice); #endif public: H248_AuditReturnParameter(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_errorDescriptor, e_mediaDescriptor, e_modemDescriptor, e_muxDescriptor, e_eventsDescriptor, e_eventBufferDescriptor, e_signalsDescriptor, e_digitMapDescriptor, e_observedEventsDescriptor, e_statisticsDescriptor, e_packagesDescriptor, e_emptyDescriptors }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_ErrorDescriptor &() const; #else operator H248_ErrorDescriptor &(); operator const H248_ErrorDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_MediaDescriptor &() const; #else operator H248_MediaDescriptor &(); operator const H248_MediaDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_ModemDescriptor &() const; #else operator H248_ModemDescriptor &(); operator const H248_ModemDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_MuxDescriptor &() const; #else operator H248_MuxDescriptor &(); operator const H248_MuxDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_EventsDescriptor &() const; #else operator H248_EventsDescriptor &(); operator const H248_EventsDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_EventBufferDescriptor &() const; #else operator H248_EventBufferDescriptor &(); operator const H248_EventBufferDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_SignalsDescriptor &() const; #else operator H248_SignalsDescriptor &(); operator const H248_SignalsDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_DigitMapDescriptor &() const; #else operator H248_DigitMapDescriptor &(); operator const H248_DigitMapDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_ObservedEventsDescriptor &() const; #else operator H248_ObservedEventsDescriptor &(); operator const H248_ObservedEventsDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_StatisticsDescriptor &() const; #else operator H248_StatisticsDescriptor &(); operator const H248_StatisticsDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_PackagesDescriptor &() const; #else operator H248_PackagesDescriptor &(); operator const H248_PackagesDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_AuditDescriptor &() const; #else operator H248_AuditDescriptor &(); operator const H248_AuditDescriptor &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // IndAuditParameter // class H248_IndAudMediaDescriptor; class H248_IndAudEventsDescriptor; class H248_IndAudEventBufferDescriptor; class H248_IndAudSignalsDescriptor; class H248_IndAudDigitMapDescriptor; class H248_IndAudStatisticsDescriptor; class H248_IndAudPackagesDescriptor; class H248_IndAuditParameter : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_IndAuditParameter, PASN_Choice); #endif public: H248_IndAuditParameter(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_indaudmediaDescriptor, e_indaudeventsDescriptor, e_indaudeventBufferDescriptor, e_indaudsignalsDescriptor, e_indauddigitMapDescriptor, e_indaudstatisticsDescriptor, e_indaudpackagesDescriptor }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_IndAudMediaDescriptor &() const; #else operator H248_IndAudMediaDescriptor &(); operator const H248_IndAudMediaDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_IndAudEventsDescriptor &() const; #else operator H248_IndAudEventsDescriptor &(); operator const H248_IndAudEventsDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_IndAudEventBufferDescriptor &() const; #else operator H248_IndAudEventBufferDescriptor &(); operator const H248_IndAudEventBufferDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_IndAudSignalsDescriptor &() const; #else operator H248_IndAudSignalsDescriptor &(); operator const H248_IndAudSignalsDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_IndAudDigitMapDescriptor &() const; #else operator H248_IndAudDigitMapDescriptor &(); operator const H248_IndAudDigitMapDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_IndAudStatisticsDescriptor &() const; #else operator H248_IndAudStatisticsDescriptor &(); operator const H248_IndAudStatisticsDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_IndAudPackagesDescriptor &() const; #else operator H248_IndAudPackagesDescriptor &(); operator const H248_IndAudPackagesDescriptor &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // IndAudPropertyGroup // class H248_IndAudPropertyParm; class H248_IndAudPropertyGroup : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_IndAudPropertyGroup, PASN_Array); #endif public: H248_IndAudPropertyGroup(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_IndAudPropertyParm & operator[](PINDEX i) const; PObject * Clone() const; }; // // IndAudSignalsDescriptor // class H248_IndAudSignal; class H248_IndAudSeqSigList; class H248_IndAudSignalsDescriptor : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_IndAudSignalsDescriptor, PASN_Choice); #endif public: H248_IndAudSignalsDescriptor(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_signal, e_seqSigList }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_IndAudSignal &() const; #else operator H248_IndAudSignal &(); operator const H248_IndAudSignal &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_IndAudSeqSigList &() const; #else operator H248_IndAudSeqSigList &(); operator const H248_IndAudSeqSigList &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ServiceChangeResult // class H248_ErrorDescriptor; class H248_ServiceChangeResParm; class H248_ServiceChangeResult : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ServiceChangeResult, PASN_Choice); #endif public: H248_ServiceChangeResult(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_errorDescriptor, e_serviceChangeResParms }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_ErrorDescriptor &() const; #else operator H248_ErrorDescriptor &(); operator const H248_ErrorDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_ServiceChangeResParm &() const; #else operator H248_ServiceChangeResParm &(); operator const H248_ServiceChangeResParm &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // WildcardField // class H248_WildcardField : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_WildcardField, PASN_OctetString); #endif public: H248_WildcardField(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H248_WildcardField(const char * v); H248_WildcardField(const PString & v); H248_WildcardField(const PBYTEArray & v); H248_WildcardField & operator=(const char * v); H248_WildcardField & operator=(const PString & v); H248_WildcardField & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // TerminationIDList // class H248_TerminationID; class H248_TerminationIDList : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_TerminationIDList, PASN_Array); #endif public: H248_TerminationIDList(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_TerminationID & operator[](PINDEX i) const; PObject * Clone() const; }; // // StreamMode // class H248_StreamMode : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_StreamMode, PASN_Enumeration); #endif public: H248_StreamMode(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_sendOnly, e_recvOnly, e_sendRecv, e_inactive, e_loopBack }; H248_StreamMode & operator=(unsigned v); PObject * Clone() const; }; // // Name // class H248_Name : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_Name, PASN_OctetString); #endif public: H248_Name(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H248_Name(const char * v); H248_Name(const PString & v); H248_Name(const PBYTEArray & v); H248_Name & operator=(const char * v); H248_Name & operator=(const PString & v); H248_Name & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // PkgdName // class H248_PkgdName : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_PkgdName, PASN_OctetString); #endif public: H248_PkgdName(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H248_PkgdName(const char * v); H248_PkgdName(const PString & v); H248_PkgdName(const PBYTEArray & v); H248_PkgdName & operator=(const char * v); H248_PkgdName & operator=(const PString & v); H248_PkgdName & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // Relation // class H248_Relation : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_Relation, PASN_Enumeration); #endif public: H248_Relation(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_greaterThan, e_smallerThan, e_unequalTo }; H248_Relation & operator=(unsigned v); PObject * Clone() const; }; // // PropertyGroup // class H248_PropertyParm; class H248_PropertyGroup : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_PropertyGroup, PASN_Array); #endif public: H248_PropertyGroup(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_PropertyParm & operator[](PINDEX i) const; PObject * Clone() const; }; // // EventBufferControl // class H248_EventBufferControl : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_EventBufferControl, PASN_Enumeration); #endif public: H248_EventBufferControl(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_off, e_lockStep }; H248_EventBufferControl & operator=(unsigned v); PObject * Clone() const; }; // // ServiceState // class H248_ServiceState : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ServiceState, PASN_Enumeration); #endif public: H248_ServiceState(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_test, e_outOfSvc, e_inSvc }; H248_ServiceState & operator=(unsigned v); PObject * Clone() const; }; // // MuxType // class H248_MuxType : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_MuxType, PASN_Enumeration); #endif public: H248_MuxType(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_h221, e_h223, e_h226, e_v76, e_nx64k }; H248_MuxType & operator=(unsigned v); PObject * Clone() const; }; // // StreamID // class H248_StreamID : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_StreamID, PASN_Integer); #endif public: H248_StreamID(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H248_StreamID & operator=(int v); H248_StreamID & operator=(unsigned v); PObject * Clone() const; }; // // EventDM // class H248_DigitMapName; class H248_DigitMapValue; class H248_EventDM : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_EventDM, PASN_Choice); #endif public: H248_EventDM(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_digitMapName, e_digitMapValue }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_DigitMapName &() const; #else operator H248_DigitMapName &(); operator const H248_DigitMapName &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_DigitMapValue &() const; #else operator H248_DigitMapValue &(); operator const H248_DigitMapValue &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // EventBufferDescriptor // class H248_EventSpec; class H248_EventBufferDescriptor : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_EventBufferDescriptor, PASN_Array); #endif public: H248_EventBufferDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_EventSpec & operator[](PINDEX i) const; PObject * Clone() const; }; // // SignalsDescriptor // class H248_SignalRequest; class H248_SignalsDescriptor : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_SignalsDescriptor, PASN_Array); #endif public: H248_SignalsDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_SignalRequest & operator[](PINDEX i) const; PObject * Clone() const; }; // // SignalRequest // class H248_Signal; class H248_SeqSigList; class H248_SignalRequest : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_SignalRequest, PASN_Choice); #endif public: H248_SignalRequest(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_signal, e_seqSigList }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_Signal &() const; #else operator H248_Signal &(); operator const H248_Signal &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_SeqSigList &() const; #else operator H248_SeqSigList &(); operator const H248_SeqSigList &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // SignalType // class H248_SignalType : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_SignalType, PASN_Enumeration); #endif public: H248_SignalType(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_brief, e_onOff, e_timeOut }; H248_SignalType & operator=(unsigned v); PObject * Clone() const; }; // // SignalName // class H248_SignalName : public H248_PkgdName { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_SignalName, H248_PkgdName); #endif public: H248_SignalName(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H248_SignalName(const char * v); H248_SignalName(const PString & v); H248_SignalName(const PBYTEArray & v); H248_SignalName & operator=(const char * v); H248_SignalName & operator=(const PString & v); H248_SignalName & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // NotifyCompletion // class H248_NotifyCompletion : public PASN_BitString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_NotifyCompletion, PASN_BitString); #endif public: H248_NotifyCompletion(unsigned tag = UniversalBitString, TagClass tagClass = UniversalTagClass); PObject * Clone() const; }; // // RequestID // class H248_RequestID : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_RequestID, PASN_Integer); #endif public: H248_RequestID(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H248_RequestID & operator=(int v); H248_RequestID & operator=(unsigned v); PObject * Clone() const; }; // // ModemType // class H248_ModemType : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ModemType, PASN_Enumeration); #endif public: H248_ModemType(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_v18, e_v22, e_v22bis, e_v32, e_v32bis, e_v34, e_v90, e_v91, e_synchISDN }; H248_ModemType & operator=(unsigned v); PObject * Clone() const; }; // // DigitMapName // class H248_DigitMapName : public H248_Name { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_DigitMapName, H248_Name); #endif public: H248_DigitMapName(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H248_DigitMapName(const char * v); H248_DigitMapName(const PString & v); H248_DigitMapName(const PBYTEArray & v); H248_DigitMapName & operator=(const char * v); H248_DigitMapName & operator=(const PString & v); H248_DigitMapName & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // DigitMapValue // class H248_DigitMapValue : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_DigitMapValue, PASN_Sequence); #endif public: H248_DigitMapValue(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_startTimer, e_shortTimer, e_longTimer, e_durationTimer }; PASN_Integer m_startTimer; PASN_Integer m_shortTimer; PASN_Integer m_longTimer; PASN_IA5String m_digitMapBody; PASN_Integer m_durationTimer; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ServiceChangeAddress // class H248_IP4Address; class H248_IP6Address; class H248_DomainName; class H248_PathName; class H248_ServiceChangeAddress : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ServiceChangeAddress, PASN_Choice); #endif public: H248_ServiceChangeAddress(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_portNumber, e_ip4Address, e_ip6Address, e_domainName, e_deviceName, e_mtpAddress }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_IP4Address &() const; #else operator H248_IP4Address &(); operator const H248_IP4Address &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_IP6Address &() const; #else operator H248_IP6Address &(); operator const H248_IP6Address &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_DomainName &() const; #else operator H248_DomainName &(); operator const H248_DomainName &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_PathName &() const; #else operator H248_PathName &(); operator const H248_PathName &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ServiceChangeMethod // class H248_ServiceChangeMethod : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ServiceChangeMethod, PASN_Enumeration); #endif public: H248_ServiceChangeMethod(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_failover, e_forced, e_graceful, e_restart, e_disconnected, e_handOff }; H248_ServiceChangeMethod & operator=(unsigned v); PObject * Clone() const; }; // // ServiceChangeProfile // class H248_ServiceChangeProfile : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ServiceChangeProfile, PASN_Sequence); #endif public: H248_ServiceChangeProfile(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_IA5String m_profileName; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PackagesDescriptor // class H248_PackagesItem; class H248_PackagesDescriptor : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_PackagesDescriptor, PASN_Array); #endif public: H248_PackagesDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_PackagesItem & operator[](PINDEX i) const; PObject * Clone() const; }; // // PackagesItem // class H248_PackagesItem : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_PackagesItem, PASN_Sequence); #endif public: H248_PackagesItem(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H248_Name m_packageName; PASN_Integer m_packageVersion; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // StatisticsDescriptor // class H248_StatisticsParameter; class H248_StatisticsDescriptor : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_StatisticsDescriptor, PASN_Array); #endif public: H248_StatisticsDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_StatisticsParameter & operator[](PINDEX i) const; PObject * Clone() const; }; // // NonStandardIdentifier // class H248_H221NonStandard; class H248_NonStandardIdentifier : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_NonStandardIdentifier, PASN_Choice); #endif public: H248_NonStandardIdentifier(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_object, e_h221NonStandard, e_experimental }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_H221NonStandard &() const; #else operator H248_H221NonStandard &(); operator const H248_H221NonStandard &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // H221NonStandard // class H248_H221NonStandard : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_H221NonStandard, PASN_Sequence); #endif public: H248_H221NonStandard(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_t35CountryCode1; PASN_Integer m_t35CountryCode2; PASN_Integer m_t35Extension; PASN_Integer m_manufacturerCode; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TimeNotation // class H248_TimeNotation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_TimeNotation, PASN_Sequence); #endif public: H248_TimeNotation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_IA5String m_date; PASN_IA5String m_time; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Value // class H248_Value : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_Value, PASN_Array); #endif public: H248_Value(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; PASN_OctetString & operator[](PINDEX i) const; PObject * Clone() const; }; // // Message_messageBody // class H248_ErrorDescriptor; class H248_ArrayOf_Transaction; class H248_Message_messageBody : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_Message_messageBody, PASN_Choice); #endif public: H248_Message_messageBody(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_messageError, e_transactions }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_ErrorDescriptor &() const; #else operator H248_ErrorDescriptor &(); operator const H248_ErrorDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_ArrayOf_Transaction &() const; #else operator H248_ArrayOf_Transaction &(); operator const H248_ArrayOf_Transaction &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_ActionRequest // class H248_ActionRequest; class H248_ArrayOf_ActionRequest : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_ActionRequest, PASN_Array); #endif public: H248_ArrayOf_ActionRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_ActionRequest & operator[](PINDEX i) const; PObject * Clone() const; }; // // TransactionReply_transactionResult // class H248_ErrorDescriptor; class H248_ArrayOf_ActionReply; class H248_TransactionReply_transactionResult : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_TransactionReply_transactionResult, PASN_Choice); #endif public: H248_TransactionReply_transactionResult(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_transactionError, e_actionReplies }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_ErrorDescriptor &() const; #else operator H248_ErrorDescriptor &(); operator const H248_ErrorDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_ArrayOf_ActionReply &() const; #else operator H248_ArrayOf_ActionReply &(); operator const H248_ArrayOf_ActionReply &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_CommandRequest // class H248_CommandRequest; class H248_ArrayOf_CommandRequest : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_CommandRequest, PASN_Array); #endif public: H248_ArrayOf_CommandRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_CommandRequest & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_CommandReply // class H248_CommandReply; class H248_ArrayOf_CommandReply : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_CommandReply, PASN_Array); #endif public: H248_ArrayOf_CommandReply(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_CommandReply & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_TopologyRequest // class H248_TopologyRequest; class H248_ArrayOf_TopologyRequest : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_TopologyRequest, PASN_Array); #endif public: H248_ArrayOf_TopologyRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_TopologyRequest & operator[](PINDEX i) const; PObject * Clone() const; }; // // TopologyRequest_topologyDirection // class H248_TopologyRequest_topologyDirection : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_TopologyRequest_topologyDirection, PASN_Enumeration); #endif public: H248_TopologyRequest_topologyDirection(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_bothway, e_isolate, e_oneway }; H248_TopologyRequest_topologyDirection & operator=(unsigned v); PObject * Clone() const; }; // // ArrayOf_AmmDescriptor // class H248_AmmDescriptor; class H248_ArrayOf_AmmDescriptor : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_AmmDescriptor, PASN_Array); #endif public: H248_ArrayOf_AmmDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_AmmDescriptor & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_IndAuditParameter // class H248_IndAuditParameter; class H248_ArrayOf_IndAuditParameter : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_IndAuditParameter, PASN_Array); #endif public: H248_ArrayOf_IndAuditParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_IndAuditParameter & operator[](PINDEX i) const; PObject * Clone() const; }; // // IndAudMediaDescriptor_streams // class H248_IndAudStreamParms; class H248_ArrayOf_IndAudStreamDescriptor; class H248_IndAudMediaDescriptor_streams : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_IndAudMediaDescriptor_streams, PASN_Choice); #endif public: H248_IndAudMediaDescriptor_streams(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_oneStream, e_multiStream }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_IndAudStreamParms &() const; #else operator H248_IndAudStreamParms &(); operator const H248_IndAudStreamParms &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_ArrayOf_IndAudStreamDescriptor &() const; #else operator H248_ArrayOf_IndAudStreamDescriptor &(); operator const H248_ArrayOf_IndAudStreamDescriptor &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_IndAudPropertyParm // class H248_IndAudPropertyParm; class H248_ArrayOf_IndAudPropertyParm : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_IndAudPropertyParm, PASN_Array); #endif public: H248_ArrayOf_IndAudPropertyParm(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_IndAudPropertyParm & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_ObservedEvent // class H248_ObservedEvent; class H248_ArrayOf_ObservedEvent : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_ObservedEvent, PASN_Array); #endif public: H248_ArrayOf_ObservedEvent(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_ObservedEvent & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_EventParameter // class H248_EventParameter; class H248_ArrayOf_EventParameter : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_EventParameter, PASN_Array); #endif public: H248_ArrayOf_EventParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_EventParameter & operator[](PINDEX i) const; PObject * Clone() const; }; // // EventParameter_extraInfo // class H248_Relation; class H248_EventParameter_extraInfo : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_EventParameter_extraInfo, PASN_Choice); #endif public: H248_EventParameter_extraInfo(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_relation, e_range, e_sublist }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_Relation &() const; #else operator H248_Relation &(); operator const H248_Relation &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_WildcardField // class H248_WildcardField; class H248_ArrayOf_WildcardField : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_WildcardField, PASN_Array); #endif public: H248_ArrayOf_WildcardField(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_WildcardField & operator[](PINDEX i) const; PObject * Clone() const; }; // // MediaDescriptor_streams // class H248_StreamParms; class H248_ArrayOf_StreamDescriptor; class H248_MediaDescriptor_streams : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_MediaDescriptor_streams, PASN_Choice); #endif public: H248_MediaDescriptor_streams(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_oneStream, e_multiStream }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_StreamParms &() const; #else operator H248_StreamParms &(); operator const H248_StreamParms &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_ArrayOf_StreamDescriptor &() const; #else operator H248_ArrayOf_StreamDescriptor &(); operator const H248_ArrayOf_StreamDescriptor &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_PropertyParm // class H248_PropertyParm; class H248_ArrayOf_PropertyParm : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_PropertyParm, PASN_Array); #endif public: H248_ArrayOf_PropertyParm(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_PropertyParm & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_PASN_OctetString // class H248_ArrayOf_PASN_OctetString : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_PASN_OctetString, PASN_Array); #endif public: H248_ArrayOf_PASN_OctetString(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; PASN_OctetString & operator[](PINDEX i) const; PObject * Clone() const; }; // // PropertyParm_extraInfo // class H248_Relation; class H248_PropertyParm_extraInfo : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_PropertyParm_extraInfo, PASN_Choice); #endif public: H248_PropertyParm_extraInfo(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_relation, e_range, e_sublist }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_Relation &() const; #else operator H248_Relation &(); operator const H248_Relation &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_PropertyGroup // class H248_PropertyGroup; class H248_ArrayOf_PropertyGroup : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_PropertyGroup, PASN_Array); #endif public: H248_ArrayOf_PropertyGroup(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_PropertyGroup & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_TerminationID // class H248_TerminationID; class H248_ArrayOf_TerminationID : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_TerminationID, PASN_Array); #endif public: H248_ArrayOf_TerminationID(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_TerminationID & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_RequestedEvent // class H248_RequestedEvent; class H248_ArrayOf_RequestedEvent : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_RequestedEvent, PASN_Array); #endif public: H248_ArrayOf_RequestedEvent(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_RequestedEvent & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_SecondRequestedEvent // class H248_SecondRequestedEvent; class H248_ArrayOf_SecondRequestedEvent : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_SecondRequestedEvent, PASN_Array); #endif public: H248_ArrayOf_SecondRequestedEvent(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_SecondRequestedEvent & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_Signal // class H248_Signal; class H248_ArrayOf_Signal : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_Signal, PASN_Array); #endif public: H248_ArrayOf_Signal(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_Signal & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_SigParameter // class H248_SigParameter; class H248_ArrayOf_SigParameter : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_SigParameter, PASN_Array); #endif public: H248_ArrayOf_SigParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_SigParameter & operator[](PINDEX i) const; PObject * Clone() const; }; // // SigParameter_extraInfo // class H248_Relation; class H248_SigParameter_extraInfo : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_SigParameter_extraInfo, PASN_Choice); #endif public: H248_SigParameter_extraInfo(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_relation, e_range, e_sublist }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H248_Relation &() const; #else operator H248_Relation &(); operator const H248_Relation &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_ModemType // class H248_ModemType; class H248_ArrayOf_ModemType : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_ModemType, PASN_Array); #endif public: H248_ArrayOf_ModemType(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_ModemType & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_Transaction // class H248_Transaction; class H248_ArrayOf_Transaction : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_Transaction, PASN_Array); #endif public: H248_ArrayOf_Transaction(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_Transaction & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_ActionReply // class H248_ActionReply; class H248_ArrayOf_ActionReply : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_ActionReply, PASN_Array); #endif public: H248_ArrayOf_ActionReply(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_ActionReply & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_IndAudStreamDescriptor // class H248_IndAudStreamDescriptor; class H248_ArrayOf_IndAudStreamDescriptor : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_IndAudStreamDescriptor, PASN_Array); #endif public: H248_ArrayOf_IndAudStreamDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_IndAudStreamDescriptor & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_StreamDescriptor // class H248_StreamDescriptor; class H248_ArrayOf_StreamDescriptor : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ArrayOf_StreamDescriptor, PASN_Array); #endif public: H248_ArrayOf_StreamDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H248_StreamDescriptor & operator[](PINDEX i) const; PObject * Clone() const; }; // // AuthenticationHeader // class H248_AuthenticationHeader : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_AuthenticationHeader, PASN_Sequence); #endif public: H248_AuthenticationHeader(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H248_SecurityParmIndex m_secParmIndex; H248_SequenceNum m_seqNum; H248_AuthData m_ad; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Message // class H248_Message : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_Message, PASN_Sequence); #endif public: H248_Message(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_version; H248_MId m_mId; H248_Message_messageBody m_messageBody; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TransactionRequest // class H248_TransactionRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_TransactionRequest, PASN_Sequence); #endif public: H248_TransactionRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H248_TransactionId m_transactionId; H248_ArrayOf_ActionRequest m_actions; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TransactionReply // class H248_TransactionReply : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_TransactionReply, PASN_Sequence); #endif public: H248_TransactionReply(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_immAckRequired }; H248_TransactionId m_transactionId; PASN_Null m_immAckRequired; H248_TransactionReply_transactionResult m_transactionResult; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ErrorDescriptor // class H248_ErrorDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ErrorDescriptor, PASN_Sequence); #endif public: H248_ErrorDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_errorText }; H248_ErrorCode m_errorCode; H248_ErrorText m_errorText; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ContextRequest // class H248_ContextRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ContextRequest, PASN_Sequence); #endif public: H248_ContextRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_priority, e_emergency, e_topologyReq }; PASN_Integer m_priority; PASN_Boolean m_emergency; H248_ArrayOf_TopologyRequest m_topologyReq; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CommandRequest // class H248_CommandRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_CommandRequest, PASN_Sequence); #endif public: H248_CommandRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_optional, e_wildcardReturn }; H248_Command m_command; PASN_Null m_optional; PASN_Null m_wildcardReturn; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AmmRequest // class H248_AmmRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_AmmRequest, PASN_Sequence); #endif public: H248_AmmRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H248_TerminationIDList m_terminationID; H248_ArrayOf_AmmDescriptor m_descriptors; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AmmsReply // class H248_AmmsReply : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_AmmsReply, PASN_Sequence); #endif public: H248_AmmsReply(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_terminationAudit }; H248_TerminationIDList m_terminationID; H248_TerminationAudit m_terminationAudit; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AuditDescriptor // class H248_AuditDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_AuditDescriptor, PASN_Sequence); #endif public: H248_AuditDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_auditToken, e_auditPropertyToken }; PASN_BitString m_auditToken; H248_ArrayOf_IndAuditParameter m_auditPropertyToken; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IndAudLocalControlDescriptor // class H248_IndAudLocalControlDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_IndAudLocalControlDescriptor, PASN_Sequence); #endif public: H248_IndAudLocalControlDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_streamMode, e_reserveValue, e_reserveGroup, e_propertyParms }; PASN_Null m_streamMode; PASN_Null m_reserveValue; PASN_Null m_reserveGroup; H248_ArrayOf_IndAudPropertyParm m_propertyParms; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IndAudPropertyParm // class H248_IndAudPropertyParm : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_IndAudPropertyParm, PASN_Sequence); #endif public: H248_IndAudPropertyParm(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H248_PkgdName m_name; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IndAudLocalRemoteDescriptor // class H248_IndAudLocalRemoteDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_IndAudLocalRemoteDescriptor, PASN_Sequence); #endif public: H248_IndAudLocalRemoteDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_propGroupID }; PASN_Integer m_propGroupID; H248_IndAudPropertyGroup m_propGrps; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IndAudTerminationStateDescriptor // class H248_IndAudTerminationStateDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_IndAudTerminationStateDescriptor, PASN_Sequence); #endif public: H248_IndAudTerminationStateDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_eventBufferControl, e_serviceState }; H248_ArrayOf_IndAudPropertyParm m_propertyParms; PASN_Null m_eventBufferControl; PASN_Null m_serviceState; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IndAudEventsDescriptor // class H248_IndAudEventsDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_IndAudEventsDescriptor, PASN_Sequence); #endif public: H248_IndAudEventsDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_requestID, e_streamID }; H248_RequestID m_requestID; H248_PkgdName m_pkgdName; H248_StreamID m_streamID; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IndAudEventBufferDescriptor // class H248_IndAudEventBufferDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_IndAudEventBufferDescriptor, PASN_Sequence); #endif public: H248_IndAudEventBufferDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_streamID }; H248_PkgdName m_eventName; H248_StreamID m_streamID; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IndAudSignal // class H248_IndAudSignal : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_IndAudSignal, PASN_Sequence); #endif public: H248_IndAudSignal(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_streamID }; H248_PkgdName m_signalName; H248_StreamID m_streamID; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IndAudDigitMapDescriptor // class H248_IndAudDigitMapDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_IndAudDigitMapDescriptor, PASN_Sequence); #endif public: H248_IndAudDigitMapDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_digitMapName }; H248_DigitMapName m_digitMapName; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IndAudStatisticsDescriptor // class H248_IndAudStatisticsDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_IndAudStatisticsDescriptor, PASN_Sequence); #endif public: H248_IndAudStatisticsDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H248_PkgdName m_statName; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IndAudPackagesDescriptor // class H248_IndAudPackagesDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_IndAudPackagesDescriptor, PASN_Sequence); #endif public: H248_IndAudPackagesDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H248_Name m_packageName; PASN_Integer m_packageVersion; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NotifyReply // class H248_NotifyReply : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_NotifyReply, PASN_Sequence); #endif public: H248_NotifyReply(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_errorDescriptor }; H248_TerminationIDList m_terminationID; H248_ErrorDescriptor m_errorDescriptor; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ObservedEventsDescriptor // class H248_ObservedEventsDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ObservedEventsDescriptor, PASN_Sequence); #endif public: H248_ObservedEventsDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H248_RequestID m_requestId; H248_ArrayOf_ObservedEvent m_observedEventLst; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // EventName // class H248_EventName : public H248_PkgdName { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_EventName, H248_PkgdName); #endif public: H248_EventName(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H248_EventName(const char * v); H248_EventName(const PString & v); H248_EventName(const PBYTEArray & v); H248_EventName & operator=(const char * v); H248_EventName & operator=(const PString & v); H248_EventName & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // EventParameter // class H248_EventParameter : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_EventParameter, PASN_Sequence); #endif public: H248_EventParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extraInfo }; H248_Name m_eventParameterName; H248_Value m_value; H248_EventParameter_extraInfo m_extraInfo; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ServiceChangeReply // class H248_ServiceChangeReply : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ServiceChangeReply, PASN_Sequence); #endif public: H248_ServiceChangeReply(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H248_TerminationIDList m_terminationID; H248_ServiceChangeResult m_serviceChangeResult; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TerminationID // class H248_TerminationID : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_TerminationID, PASN_Sequence); #endif public: H248_TerminationID(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H248_ArrayOf_WildcardField m_wildcard; PASN_OctetString m_id; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // LocalControlDescriptor // class H248_LocalControlDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_LocalControlDescriptor, PASN_Sequence); #endif public: H248_LocalControlDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_streamMode, e_reserveValue, e_reserveGroup }; H248_StreamMode m_streamMode; PASN_Boolean m_reserveValue; PASN_Boolean m_reserveGroup; H248_ArrayOf_PropertyParm m_propertyParms; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PropertyParm // class H248_PropertyParm : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_PropertyParm, PASN_Sequence); #endif public: H248_PropertyParm(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extraInfo }; H248_PkgdName m_name; H248_ArrayOf_PASN_OctetString m_value; H248_PropertyParm_extraInfo m_extraInfo; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // LocalRemoteDescriptor // class H248_LocalRemoteDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_LocalRemoteDescriptor, PASN_Sequence); #endif public: H248_LocalRemoteDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H248_ArrayOf_PropertyGroup m_propGrps; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TerminationStateDescriptor // class H248_TerminationStateDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_TerminationStateDescriptor, PASN_Sequence); #endif public: H248_TerminationStateDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_eventBufferControl, e_serviceState }; H248_ArrayOf_PropertyParm m_propertyParms; H248_EventBufferControl m_eventBufferControl; H248_ServiceState m_serviceState; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // EventsDescriptor // class H248_EventsDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_EventsDescriptor, PASN_Sequence); #endif public: H248_EventsDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_requestID }; H248_RequestID m_requestID; H248_ArrayOf_RequestedEvent m_eventList; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // SecondEventsDescriptor // class H248_SecondEventsDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_SecondEventsDescriptor, PASN_Sequence); #endif public: H248_SecondEventsDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_requestID }; H248_RequestID m_requestID; H248_ArrayOf_SecondRequestedEvent m_eventList; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // SecondRequestedActions // class H248_SecondRequestedActions : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_SecondRequestedActions, PASN_Sequence); #endif public: H248_SecondRequestedActions(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_keepActive, e_eventDM, e_signalsDescriptor }; PASN_Boolean m_keepActive; H248_EventDM m_eventDM; H248_SignalsDescriptor m_signalsDescriptor; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // EventSpec // class H248_EventSpec : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_EventSpec, PASN_Sequence); #endif public: H248_EventSpec(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_streamID }; H248_EventName m_eventName; H248_StreamID m_streamID; H248_ArrayOf_EventParameter m_eventParList; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // SeqSigList // class H248_SeqSigList : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_SeqSigList, PASN_Sequence); #endif public: H248_SeqSigList(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_id; H248_ArrayOf_Signal m_signalList; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Signal // class H248_Signal : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_Signal, PASN_Sequence); #endif public: H248_Signal(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_streamID, e_sigType, e_duration, e_notifyCompletion, e_keepActive }; H248_SignalName m_signalName; H248_StreamID m_streamID; H248_SignalType m_sigType; PASN_Integer m_duration; H248_NotifyCompletion m_notifyCompletion; PASN_Boolean m_keepActive; H248_ArrayOf_SigParameter m_sigParList; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // SigParameter // class H248_SigParameter : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_SigParameter, PASN_Sequence); #endif public: H248_SigParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extraInfo }; H248_Name m_sigParameterName; H248_Value m_value; H248_SigParameter_extraInfo m_extraInfo; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DigitMapDescriptor // class H248_DigitMapDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_DigitMapDescriptor, PASN_Sequence); #endif public: H248_DigitMapDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_digitMapName, e_digitMapValue }; H248_DigitMapName m_digitMapName; H248_DigitMapValue m_digitMapValue; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ServiceChangeResParm // class H248_ServiceChangeResParm : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ServiceChangeResParm, PASN_Sequence); #endif public: H248_ServiceChangeResParm(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_serviceChangeMgcId, e_serviceChangeAddress, e_serviceChangeVersion, e_serviceChangeProfile, e_timestamp }; H248_MId m_serviceChangeMgcId; H248_ServiceChangeAddress m_serviceChangeAddress; PASN_Integer m_serviceChangeVersion; H248_ServiceChangeProfile m_serviceChangeProfile; H248_TimeNotation m_timestamp; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // StatisticsParameter // class H248_StatisticsParameter : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_StatisticsParameter, PASN_Sequence); #endif public: H248_StatisticsParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_statValue }; H248_PkgdName m_statName; H248_Value m_statValue; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NonStandardData // class H248_NonStandardData : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_NonStandardData, PASN_Sequence); #endif public: H248_NonStandardData(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H248_NonStandardIdentifier m_nonStandardIdentifier; PASN_OctetString m_data; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MegacoMessage // class H248_MegacoMessage : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_MegacoMessage, PASN_Sequence); #endif public: H248_MegacoMessage(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_authHeader }; H248_AuthenticationHeader m_authHeader; H248_Message m_mess; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ActionRequest // class H248_ActionRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ActionRequest, PASN_Sequence); #endif public: H248_ActionRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_contextRequest, e_contextAttrAuditReq }; H248_ContextID m_contextId; H248_ContextRequest m_contextRequest; H248_ContextAttrAuditRequest m_contextAttrAuditReq; H248_ArrayOf_CommandRequest m_commandRequests; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ActionReply // class H248_ActionReply : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ActionReply, PASN_Sequence); #endif public: H248_ActionReply(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_errorDescriptor, e_contextReply }; H248_ContextID m_contextId; H248_ErrorDescriptor m_errorDescriptor; H248_ContextRequest m_contextReply; H248_ArrayOf_CommandReply m_commandReply; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TopologyRequest // class H248_TopologyRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_TopologyRequest, PASN_Sequence); #endif public: H248_TopologyRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_streamID }; H248_TerminationID m_terminationFrom; H248_TerminationID m_terminationTo; H248_TopologyRequest_topologyDirection m_topologyDirection; H248_StreamID m_streamID; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // SubtractRequest // class H248_SubtractRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_SubtractRequest, PASN_Sequence); #endif public: H248_SubtractRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_auditDescriptor }; H248_TerminationIDList m_terminationID; H248_AuditDescriptor m_auditDescriptor; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AuditRequest // class H248_AuditRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_AuditRequest, PASN_Sequence); #endif public: H248_AuditRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H248_TerminationID m_terminationID; H248_AuditDescriptor m_auditDescriptor; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AuditResult // class H248_AuditResult : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_AuditResult, PASN_Sequence); #endif public: H248_AuditResult(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H248_TerminationID m_terminationID; H248_TerminationAudit m_terminationAuditResult; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IndAudMediaDescriptor // class H248_IndAudMediaDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_IndAudMediaDescriptor, PASN_Sequence); #endif public: H248_IndAudMediaDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_termStateDescr, e_streams }; H248_IndAudTerminationStateDescriptor m_termStateDescr; H248_IndAudMediaDescriptor_streams m_streams; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IndAudStreamParms // class H248_IndAudStreamParms : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_IndAudStreamParms, PASN_Sequence); #endif public: H248_IndAudStreamParms(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_localControlDescriptor, e_localDescriptor, e_remoteDescriptor }; H248_IndAudLocalControlDescriptor m_localControlDescriptor; H248_IndAudLocalRemoteDescriptor m_localDescriptor; H248_IndAudLocalRemoteDescriptor m_remoteDescriptor; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IndAudSeqSigList // class H248_IndAudSeqSigList : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_IndAudSeqSigList, PASN_Sequence); #endif public: H248_IndAudSeqSigList(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_signalList }; PASN_Integer m_id; H248_IndAudSignal m_signalList; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NotifyRequest // class H248_NotifyRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_NotifyRequest, PASN_Sequence); #endif public: H248_NotifyRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_errorDescriptor }; H248_TerminationIDList m_terminationID; H248_ObservedEventsDescriptor m_observedEventsDescriptor; H248_ErrorDescriptor m_errorDescriptor; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ObservedEvent // class H248_ObservedEvent : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ObservedEvent, PASN_Sequence); #endif public: H248_ObservedEvent(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_streamID, e_timeNotation }; H248_EventName m_eventName; H248_StreamID m_streamID; H248_ArrayOf_EventParameter m_eventParList; H248_TimeNotation m_timeNotation; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MediaDescriptor // class H248_MediaDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_MediaDescriptor, PASN_Sequence); #endif public: H248_MediaDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_termStateDescr, e_streams }; H248_TerminationStateDescriptor m_termStateDescr; H248_MediaDescriptor_streams m_streams; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // StreamParms // class H248_StreamParms : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_StreamParms, PASN_Sequence); #endif public: H248_StreamParms(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_localControlDescriptor, e_localDescriptor, e_remoteDescriptor }; H248_LocalControlDescriptor m_localControlDescriptor; H248_LocalRemoteDescriptor m_localDescriptor; H248_LocalRemoteDescriptor m_remoteDescriptor; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MuxDescriptor // class H248_MuxDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_MuxDescriptor, PASN_Sequence); #endif public: H248_MuxDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData }; H248_MuxType m_muxType; H248_ArrayOf_TerminationID m_termList; H248_NonStandardData m_nonStandardData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RequestedActions // class H248_RequestedActions : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_RequestedActions, PASN_Sequence); #endif public: H248_RequestedActions(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_keepActive, e_eventDM, e_secondEvent, e_signalsDescriptor }; PASN_Boolean m_keepActive; H248_EventDM m_eventDM; H248_SecondEventsDescriptor m_secondEvent; H248_SignalsDescriptor m_signalsDescriptor; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // SecondRequestedEvent // class H248_SecondRequestedEvent : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_SecondRequestedEvent, PASN_Sequence); #endif public: H248_SecondRequestedEvent(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_streamID, e_eventAction }; H248_PkgdName m_pkgdName; H248_StreamID m_streamID; H248_SecondRequestedActions m_eventAction; H248_ArrayOf_EventParameter m_evParList; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ModemDescriptor // class H248_ModemDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ModemDescriptor, PASN_Sequence); #endif public: H248_ModemDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData }; H248_ArrayOf_ModemType m_mtl; H248_ArrayOf_PropertyParm m_mpl; H248_NonStandardData m_nonStandardData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ServiceChangeParm // class H248_ServiceChangeParm : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ServiceChangeParm, PASN_Sequence); #endif public: H248_ServiceChangeParm(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_serviceChangeAddress, e_serviceChangeVersion, e_serviceChangeProfile, e_serviceChangeDelay, e_serviceChangeMgcId, e_timeStamp, e_nonStandardData, e_serviceChangeInfo }; H248_ServiceChangeMethod m_serviceChangeMethod; H248_ServiceChangeAddress m_serviceChangeAddress; PASN_Integer m_serviceChangeVersion; H248_ServiceChangeProfile m_serviceChangeProfile; H248_Value m_serviceChangeReason; PASN_Integer m_serviceChangeDelay; H248_MId m_serviceChangeMgcId; H248_TimeNotation m_timeStamp; H248_NonStandardData m_nonStandardData; H248_AuditDescriptor m_serviceChangeInfo; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IndAudStreamDescriptor // class H248_IndAudStreamDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_IndAudStreamDescriptor, PASN_Sequence); #endif public: H248_IndAudStreamDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H248_StreamID m_streamID; H248_IndAudStreamParms m_streamParms; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ServiceChangeRequest // class H248_ServiceChangeRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_ServiceChangeRequest, PASN_Sequence); #endif public: H248_ServiceChangeRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H248_TerminationIDList m_terminationID; H248_ServiceChangeParm m_serviceChangeParms; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // StreamDescriptor // class H248_StreamDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_StreamDescriptor, PASN_Sequence); #endif public: H248_StreamDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H248_StreamID m_streamID; H248_StreamParms m_streamParms; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RequestedEvent // class H248_RequestedEvent : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H248_RequestedEvent, PASN_Sequence); #endif public: H248_RequestedEvent(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_streamID, e_eventAction }; H248_PkgdName m_pkgdName; H248_StreamID m_streamID; H248_RequestedActions m_eventAction; H248_ArrayOf_EventParameter m_evParList; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H248_H #endif // if ! H323_DISABLE_H248 // End of h248.h h323plus/include/h323neg.h0000644000175000017500000003615311561712073014067 0ustar markmark/* * h323neg.h * * H.323 protocol handler * * Open H323 Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Contributor(s): ______________________________________. * * $Log: h323neg.h,v $ * Revision 1.4 2011/05/09 07:14:03 shorne * Remove redundent PTLIB Linking code * * Revision 1.3 2010/08/28 03:58:20 shorne * More H.239 Support. Added ability to close channel, remove and reorder codecs and correctly load capabilities into simult cap listing * * Revision 1.2 2008/05/23 11:19:40 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:50:49 shorne * First commit of h323plus * * Revision 1.34.14.1 2007/03/24 23:39:42 shorne * More H.239 work * * Revision 1.34 2002/09/16 01:14:15 robertj * Added #define so can select if #pragma interface/implementation is used on * platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan. * * Revision 1.33 2002/09/03 06:19:36 robertj * Normalised the multi-include header prevention ifdef/define symbol. * * Revision 1.32 2002/08/05 10:03:47 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.31 2002/06/26 08:51:16 robertj * Fixed deadlock if logical channel is closed via H.245 at exactly same * time as being closed locally due to a channel I/O error. * * Revision 1.30 2002/05/03 03:08:35 robertj * Added replacementFor field in OLC when resolving conflicting channels. * * Revision 1.29 2002/01/09 00:21:36 robertj * Changes to support outgoing H.245 RequstModeChange. * * Revision 1.28 2002/01/01 23:32:30 craigs * Added HandleAck and StartRequest implementations for T.38 * thanks to Vyacheslav Frolov * * Revision 1.27 2002/01/01 23:21:30 craigs * Added virtual keyword to many functions * * Revision 1.26 2001/09/12 01:54:45 robertj * Added virtual keyword to function in logical channel management. * * Revision 1.25 2001/08/06 03:08:11 robertj * Fission of h323.h to h323ep.h & h323con.h, h323.h now just includes files. * * Revision 1.24 2001/05/30 23:34:54 robertj * Added functions to send TCS=0 for transmitter side pause. * * Revision 1.23 2001/03/16 07:11:38 robertj * Added logical channel open function version without locking. * * Revision 1.22 2001/03/14 22:05:24 robertj * Changed H245NegLogicalChannel::Release() to be virtual protected rather than private. * * Revision 1.21 2001/03/14 03:20:25 robertj * Fixed possible nested mutex deadlock in logical channel negotiator. * * Revision 1.20 2001/03/06 04:44:46 robertj * Fixed problem where could send capability set twice. This should not be * a problem except when talking to another broken stack, eg Cisco routers. * * Revision 1.19 2001/02/09 05:16:24 robertj * Added #pragma interface for GNU C++. * * Revision 1.18 2000/08/21 12:37:14 robertj * Fixed race condition if close call just as slow start media channels are opening, part 2. * * Revision 1.17 2000/07/14 08:59:56 robertj * Fixed race condition in closing connection and explicit close logical channel. * * Revision 1.16 2000/07/10 16:00:14 robertj * Added TCS=0 support. * Fixed bug where negotiations hang if not fast start and tunnelled but remot does not tunnel. * * Revision 1.15 2000/05/22 07:32:51 craigs * Fixed problem with ohphone silence detection hanging * * Revision 1.14 2000/05/16 08:13:32 robertj * Added function to find channel by session ID, supporting H323Connection::FindChannel() with mutex. * * Revision 1.13 2000/05/11 04:16:35 robertj * Fixed missing timeout (and typo!) in bidirectional open logical channel. * * Revision 1.12 2000/05/02 04:32:24 robertj * Fixed copyright notice comment. * * Revision 1.11 2000/04/10 17:50:53 robertj * Fixed yet another race condition needing mutex in logical channels management class. * * Revision 1.10 2000/04/05 03:17:30 robertj * Added more RTP statistics gathering and H.245 round trip delay calculation. * * Revision 1.9 2000/03/25 02:19:50 robertj * Fixed missing mutex call in some logical channels structure access. * * Revision 1.8 1999/11/06 11:58:38 robertj * Changed clean up to delete logical channels before channel destructor is called. * * Revision 1.7 1999/11/06 11:00:08 robertj * Fixed race condition in explicit channel close and connection close. * * Revision 1.6 1999/11/06 05:37:44 robertj * Complete rewrite of termination of connection to avoid numerous race conditions. * * Revision 1.5 1999/10/14 12:05:03 robertj * Fixed deadlock possibilities in clearing calls. * * Revision 1.4 1999/09/21 14:03:03 robertj * Fixed incorrect PTRACING test * * Revision 1.3 1999/09/08 04:05:48 robertj * Added support for video capabilities & codec, still needs the actual codec itself! * * Revision 1.2 1999/08/31 12:34:18 robertj * Added gatekeeper support. * * Revision 1.1 1999/08/25 05:07:49 robertj * File fission (critical mass reached). * */ #ifndef __OPAL_H323NEG_H #define __OPAL_H323NEG_H #ifdef P_USE_PRAGMA #pragma interface #endif #include "h323pdu.h" #include "channels.h" /////////////////////////////////////////////////////////////////////////////// /**Base class for doing H245 negotiations */ class H245Negotiator : public PObject { PCLASSINFO(H245Negotiator, PObject); public: H245Negotiator(H323EndPoint & endpoint, H323Connection & connection); protected: PDECLARE_NOTIFIER(PTimer, H245Negotiator, HandleTimeout); H323EndPoint & endpoint; H323Connection & connection; PTimer replyTimer; PMutex mutex; }; /**Determine the master and slave on a H245 connection as per H245 section 8.2 */ class H245NegMasterSlaveDetermination : public H245Negotiator { PCLASSINFO(H245NegMasterSlaveDetermination, H245Negotiator); public: H245NegMasterSlaveDetermination(H323EndPoint & endpoint, H323Connection & connection); PBoolean Start(PBoolean renegotiate); void Stop(); PBoolean HandleIncoming(const H245_MasterSlaveDetermination & pdu); PBoolean HandleAck(const H245_MasterSlaveDeterminationAck & pdu); PBoolean HandleReject(const H245_MasterSlaveDeterminationReject & pdu); PBoolean HandleRelease(const H245_MasterSlaveDeterminationRelease & pdu); void HandleTimeout(PTimer &, INT); PBoolean IsMaster() const { return status == e_DeterminedMaster; } PBoolean IsDetermined() const { return state == e_Idle && status != e_Indeterminate; } protected: PBoolean Restart(); enum States { e_Idle, e_Outgoing, e_Incoming, e_NumStates } state; #if PTRACING static const char * const StateNames[e_NumStates]; friend ostream & operator<<(ostream & o, States s) { return o << StateNames[s]; } #endif DWORD determinationNumber; unsigned retryCount; enum MasterSlaveStatus { e_Indeterminate, e_DeterminedMaster, e_DeterminedSlave, e_NumStatuses } status; #if PTRACING static const char * const StatusNames[e_NumStatuses]; friend ostream & operator<<(ostream & o , MasterSlaveStatus s) { return o << StatusNames[s]; } #endif }; /**Exchange capabilities on a H245 connection as per H245 section 8.3 */ class H245NegTerminalCapabilitySet : public H245Negotiator { PCLASSINFO(H245NegTerminalCapabilitySet, H245Negotiator); public: H245NegTerminalCapabilitySet(H323EndPoint & endpoint, H323Connection & connection); PBoolean Start(PBoolean renegotiate, PBoolean empty = FALSE); void Stop(); PBoolean HandleIncoming(const H245_TerminalCapabilitySet & pdu); PBoolean HandleAck(const H245_TerminalCapabilitySetAck & pdu); PBoolean HandleReject(const H245_TerminalCapabilitySetReject & pdu); PBoolean HandleRelease(const H245_TerminalCapabilitySetRelease & pdu); void HandleTimeout(PTimer &, INT); PBoolean HasSentCapabilities() const { return state == e_Sent; } PBoolean HasReceivedCapabilities() const { return receivedCapabilites; } protected: enum States { e_Idle, e_InProgress, e_Sent, e_NumStates } state; #if PTRACING static const char * const StateNames[e_NumStates]; friend ostream & operator<<(ostream & o, States s) { return o << StateNames[s]; } #endif unsigned inSequenceNumber; unsigned outSequenceNumber; PBoolean receivedCapabilites; }; /**Logical Channel signalling on a H245 connection as per H245 section 8.4 */ class H245NegLogicalChannel : public H245Negotiator { PCLASSINFO(H245NegLogicalChannel, H245Negotiator); public: H245NegLogicalChannel(H323EndPoint & endpoint, H323Connection & connection, const H323ChannelNumber & channelNumber); H245NegLogicalChannel(H323EndPoint & endpoint, H323Connection & connection, H323Channel & channel); ~H245NegLogicalChannel(); virtual PBoolean Open( const H323Capability & capability, unsigned sessionID, unsigned replacementFor = 0, unsigned roleLabel = 0 ); virtual PBoolean Close(); virtual PBoolean HandleOpen(const H245_OpenLogicalChannel & pdu); virtual PBoolean HandleOpenAck(const H245_OpenLogicalChannelAck & pdu); virtual PBoolean HandleOpenConfirm(const H245_OpenLogicalChannelConfirm & pdu); virtual PBoolean HandleReject(const H245_OpenLogicalChannelReject & pdu); virtual PBoolean HandleClose(const H245_CloseLogicalChannel & pdu); virtual PBoolean HandleCloseAck(const H245_CloseLogicalChannelAck & pdu); virtual PBoolean HandleRequestClose(const H245_RequestChannelClose & pdu); virtual PBoolean HandleRequestCloseAck(const H245_RequestChannelCloseAck & pdu); virtual PBoolean HandleRequestCloseReject(const H245_RequestChannelCloseReject & pdu); virtual PBoolean HandleRequestCloseRelease(const H245_RequestChannelCloseRelease & pdu); virtual void HandleTimeout(PTimer &, INT); H323Channel * GetChannel(); protected: virtual PBoolean OpenWhileLocked( const H323Capability & capability, unsigned sessionID, unsigned replacementFor = 0, unsigned roleLabel = 0 ); virtual PBoolean CloseWhileLocked(); virtual void Release(); H323Channel * channel; H323ChannelNumber channelNumber; enum States { e_Released, e_AwaitingEstablishment, e_Established, e_AwaitingRelease, e_AwaitingConfirmation, e_AwaitingResponse, e_NumStates } state; #if PTRACING static const char * const StateNames[e_NumStates]; friend ostream & operator<<(ostream & o, States s) { return o << StateNames[s]; } #endif friend class H245NegLogicalChannels; }; H323DICTIONARY(H245LogicalChannelDict, H323ChannelNumber, H245NegLogicalChannel); /**Dictionary of all Logical Channels */ class H245NegLogicalChannels : public H245Negotiator { PCLASSINFO(H245NegLogicalChannels, H245Negotiator); public: H245NegLogicalChannels(H323EndPoint & endpoint, H323Connection & connection); virtual void Add(H323Channel & channel); virtual PBoolean Open( const H323Capability & capability, unsigned sessionID, unsigned replacementFor = 0 ); virtual PBoolean Open( const H323Capability & capability, unsigned sessionID, H323ChannelNumber & channelnumber, unsigned replacementFor = 0, unsigned roleLabel = 0 ); virtual PBoolean Close(unsigned channelNumber, PBoolean fromRemote); virtual PBoolean HandleOpen(const H245_OpenLogicalChannel & pdu); virtual PBoolean HandleOpenAck(const H245_OpenLogicalChannelAck & pdu); virtual PBoolean HandleOpenConfirm(const H245_OpenLogicalChannelConfirm & pdu); virtual PBoolean HandleReject(const H245_OpenLogicalChannelReject & pdu); virtual PBoolean HandleClose(const H245_CloseLogicalChannel & pdu); virtual PBoolean HandleCloseAck(const H245_CloseLogicalChannelAck & pdu); virtual PBoolean HandleRequestClose(const H245_RequestChannelClose & pdu); virtual PBoolean HandleRequestCloseAck(const H245_RequestChannelCloseAck & pdu); virtual PBoolean HandleRequestCloseReject(const H245_RequestChannelCloseReject & pdu); virtual PBoolean HandleRequestCloseRelease(const H245_RequestChannelCloseRelease & pdu); H323ChannelNumber GetNextChannelNumber(); H323ChannelNumber GetLastChannelNumber(); PINDEX GetSize() const { return channels.GetSize(); } H323Channel * GetChannelAt(PINDEX i); H323Channel * FindChannel(unsigned channelNumber, PBoolean fromRemote); H245NegLogicalChannel & GetNegLogicalChannelAt(PINDEX i); H245NegLogicalChannel * FindNegLogicalChannel(unsigned channelNumber, PBoolean fromRemote); H323Channel * FindChannelBySession(unsigned rtpSessionId, PBoolean fromRemote); void RemoveAll(); protected: H323ChannelNumber lastChannelNumber; H245LogicalChannelDict channels; }; /**Request mode change as per H245 section 8.9 */ class H245NegRequestMode : public H245Negotiator { PCLASSINFO(H245NegRequestMode, H245Negotiator); public: H245NegRequestMode(H323EndPoint & endpoint, H323Connection & connection); virtual PBoolean StartRequest(const PString & newModes); virtual PBoolean StartRequest(const H245_ArrayOf_ModeDescription & newModes); virtual PBoolean HandleRequest(const H245_RequestMode & pdu); virtual PBoolean HandleAck(const H245_RequestModeAck & pdu); virtual PBoolean HandleReject(const H245_RequestModeReject & pdu); virtual PBoolean HandleRelease(const H245_RequestModeRelease & pdu); virtual void HandleTimeout(PTimer &, INT); protected: PBoolean awaitingResponse; unsigned inSequenceNumber; unsigned outSequenceNumber; }; /**Request mode change as per H245 section 8.9 */ class H245NegRoundTripDelay : public H245Negotiator { PCLASSINFO(H245NegRoundTripDelay, H245Negotiator); public: H245NegRoundTripDelay(H323EndPoint & endpoint, H323Connection & connection); PBoolean StartRequest(); PBoolean HandleRequest(const H245_RoundTripDelayRequest & pdu); PBoolean HandleResponse(const H245_RoundTripDelayResponse & pdu); void HandleTimeout(PTimer &, INT); PTimeInterval GetRoundTripDelay() const { return roundTripTime; } PBoolean IsRemoteOffline() const { return retryCount == 0; } protected: PBoolean awaitingResponse; unsigned sequenceNumber; PTimeInterval tripStartTime; PTimeInterval roundTripTime; unsigned retryCount; }; #endif // __OPAL_H323NEG_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/h323pluginmgr.h0000644000175000017500000002655211402734745015330 0ustar markmark/* * h323plugins.h * * H.323 codec plugins handler * * Open H323 Library * * Copyright (C) 2004 Post Increment * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Post Increment * * Contributor(s): ______________________________________. * * $Log: h323pluginmgr.h,v $ * Revision 1.12 2010/06/06 15:08:21 shorne * Added Codec Listing, generic Capability OID exposure and custom format management * * Revision 1.11 2010/05/02 22:52:41 shorne * Expose OpalMediaFormat without the need to create a H323Capability. G.711 20ms codec, plugin event handler including passing fastUpdate and flowControl. Ability to disable video decoding if it not required. * * Revision 1.10 2010/02/24 03:39:07 shorne * Add ability to pass to the video plugin a custom frame size and rate to encode/decode * * Revision 1.9 2010/02/08 05:26:19 shorne * Added ability to create instance of plugin codec * * Revision 1.8 2009/08/29 13:18:12 shorne * Fix compile warnings on Linux * * Revision 1.7 2009/05/19 11:46:23 willamowius * remove unused class H323DynaLink * * Revision 1.6 2009/02/21 14:08:58 shorne * Added the ability to reread the plugins during program execution * * Revision 1.5 2008/10/09 12:13:58 willamowius * keep compatibility with PTLib 2.2.1 * * Revision 1.4 2008/09/27 06:16:43 shorne * Addition of H323CodecManager Factory loader to correctly load Codecs due to changes in PTLIB v2.3 * * Revision 1.3 2008/05/23 11:19:44 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.2 2007/08/20 20:19:52 shorne * Moved opalplugin.h to codec directory to be plugin compile compatible with Opal * * Revision 1.1 2007/08/06 20:50:49 shorne * First commit of h323plus * * Revision 1.24.4.1 2006/12/23 19:08:02 shorne * Plugin video codecs & sundry * * Revision 1.24 2005/11/30 13:05:01 csoutheren * Changed tags for Doxygen * * Revision 1.23 2005/06/21 06:46:35 csoutheren * Add ability to create capabilities without codecs for external RTP interface * * Revision 1.22 2005/04/28 04:00:15 dereksmithies * Add documentation to the OpalFactoryCodec. Thanks to Craig Southeren for clarifying * the meaning of the toLen field. * * Revision 1.21 2005/01/04 08:08:39 csoutheren * More changes to implement the new configuration methodology, and also to * attack the global static problem * * Revision 1.20 2005/01/03 14:03:20 csoutheren * Added new configure options and ability to disable/enable modules * * Revision 1.19 2004/12/08 02:03:58 csoutheren * Fixed problem with detection of non-FFH.263 * * Revision 1.18 2004/11/29 06:30:51 csoutheren * Added support for wideband codecs * * Revision 1.17 2004/08/26 08:05:02 csoutheren * Codecs now appear in abstract factory system * Fixed Windows factory bootstrap system (again) * * Revision 1.16 2004/06/30 12:31:09 rjongbloed * Rewrite of plug in system to use single global variable for all factories to avoid all sorts * of issues with startup orders and Windows DLL multiple instances. * * Revision 1.15 2004/06/03 23:20:46 csoutheren * Fixed compile problem on some gcc variants * * Revision 1.14 2004/06/01 07:30:27 csoutheren * Removed accidental cut & paste in new code that removed capabilities * * Revision 1.13 2004/06/01 05:49:27 csoutheren * Added code to cleanup some allocated memory upon shutdown * * Revision 1.12 2004/05/23 12:40:34 rjongbloed * Simplified call for getting H323 plug manager instance * * Revision 1.11 2004/05/18 23:03:10 csoutheren * Added empty destructor to prevent gcc 3.3.3 from getting link errors. * * Revision 1.10 2004/05/18 22:32:54 csoutheren * Added pragma inteface * * Revision 1.9 2004/05/18 22:26:28 csoutheren * Initial support for embedded codecs * Fixed problems with streamed codec support * Updates for abstract factory loading methods * * Revision 1.8 2004/05/18 06:02:25 csoutheren * Deferred plugin codec loading until after main has executed by using abstract factory classes * * Revision 1.7 2004/05/12 13:41:26 csoutheren * Added support for getting lists of media formats from plugin manager * * Revision 1.6 2004/04/22 22:35:00 csoutheren * Fixed mispelling of Guilhem Tardy - my apologies to him * * Revision 1.5 2004/04/22 14:22:20 csoutheren * Added RFC 2190 H.263 code as created by Guilhem Tardy and AliceStreet * Many thanks to them for their contributions. * * Revision 1.4 2004/04/14 08:14:40 csoutheren * Changed to use generic plugin manager * * Revision 1.3 2004/04/09 12:24:18 csoutheren * Renamed h323plugin.h to opalplugin.h, and modified everything else * as required * * Revision 1.2 2004/04/03 10:38:24 csoutheren * Added in initial cut at codec plugin code. Branches are for wimps :) * * Revision 1.1.2.1 2004/03/31 11:03:16 csoutheren * Initial public version * * Revision 1.2 2004/01/27 14:55:46 craigs * Implemented static linking of new codecs * * Revision 1.1 2004/01/04 13:37:51 craigs * Implementation of codec plugins * * */ #ifndef __OPAL_H323PLUGINMGR_H #define __OPAL_H323PLUGINMGR_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include #include #include #include class H323Capability; class OpalFactoryCodec; class H323PluginCodecManager : public PPluginModuleManager { PCLASSINFO(H323PluginCodecManager, PPluginModuleManager); public: H323PluginCodecManager(PPluginManager * pluginMgr = NULL); ~H323PluginCodecManager(); void RegisterStaticCodec(const char * name, PluginCodec_GetAPIVersionFunction getApiVerFn, PluginCodec_GetCodecFunction getCodecFn); void OnLoadPlugin(PDynaLink & dll, INT code); static OpalMediaFormat::List GetMediaFormats(); static void AddFormat(const OpalMediaFormat & fmt); static void AddFormat(OpalMediaFormat * fmt); static OpalFactoryCodec * CreateCodec(const PString & name); static void CodecListing(const PString & matchStr, PStringList & listing); virtual void OnShutdown(); static void Bootstrap(); static void Reboot(); /* H323Capability * CreateCapability( const PString & _mediaFormat, const PString & _baseName, unsigned maxFramesPerPacket, unsigned recommendedFramesPerPacket, unsigned _pluginSubType); */ protected: void CreateCapabilityAndMediaFormat( PluginCodec_Definition * _encoderCodec, PluginCodec_Definition * _decoderCodec ); static OpalMediaFormat::List & GetMediaFormatList(); static PMutex & GetMediaFormatMutex(); void RegisterCodecs (unsigned int count, void * codecList); void UnregisterCodecs(unsigned int count, void * codecList); void RegisterCapability(PluginCodec_Definition * encoderCodec, PluginCodec_Definition * decoderCodec); struct CapabilityListCreateEntry { CapabilityListCreateEntry(PluginCodec_Definition * e, PluginCodec_Definition * d) : encoderCodec(e), decoderCodec(d) { } PluginCodec_Definition * encoderCodec; PluginCodec_Definition * decoderCodec; }; typedef vector CapabilityCreateListType; CapabilityCreateListType capabilityCreateList; }; static PFactory::Worker h323PluginCodecManagerFactory("h323PluginCodecManager", true); ////////////////////////////////////////////////////// // // this is the base class for codecs accesible via the abstract factory functions // /**Class for codcs which is accessible via the abstract factor functions. The code would be : PFactory::CreateInstance(conversion); to create an instance, where conversion is (eg) "L16:G.711-uLaw-64k" */ class OpalFactoryCodec : public PObject { PCLASSINFO(OpalFactoryCodec, PObject) public: /** Return the PluginCodec_Definition, which describes this codec */ virtual const struct PluginCodec_Definition * GetDefinition() { return NULL; } /** Return the sourceFormat field of PluginCodec_Definition for this codec*/ virtual PString GetInputFormat() const = 0; /** Return the destFormat field of PluginCodec_Definition for this codec*/ virtual PString GetOutputFormat() const = 0; /** Take the supplied data and apply the conversion specified by CreateInstance call (above). When this method returns, toLen contains the number of bytes placed in the destination buffer. */ virtual int Encode(const void * from, ///< pointer to the source data unsigned * fromLen, ///< number of bytes in the source data to process void * to, ///< pointer to the destination buffer, which contains the output of the conversion unsigned * toLen, ///< Number of available bytes in the destination buffer unsigned int * flag ///< Typically, this is not used. ) = 0; /** Return the sampleRate field of PluginCodec_Definition for this codec*/ virtual unsigned int GetSampleRate() const = 0; /** Return the bitsPerSec field of PluginCodec_Definition for this codec*/ virtual unsigned int GetBitsPerSec() const = 0; /** Return the nmPerFrame field of PluginCodec_Definition for this codec*/ virtual unsigned int GetFrameTime() const = 0; /** Return the samplesPerFrame field of PluginCodec_Definition for this codec*/ virtual unsigned int GetSamplesPerFrame() const = 0; /** Return the bytesPerFrame field of PluginCodec_Definition for this codec*/ virtual unsigned int GetBytesPerFrame() const = 0; /** Return the recommendedFramesPerPacket field of PluginCodec_Definition for this codec*/ virtual unsigned int GetRecommendedFramesPerPacket() const = 0; /** Return the maxFramesPerPacket field of PluginCodec_Definition for this codec*/ virtual unsigned int GetMaxFramesPerPacket() const = 0; /** Return the rtpPayload field of PluginCodec_Definition for this codec*/ virtual BYTE GetRTPPayload() const = 0; /** Return the sampleRate field of PluginCodec_Definition for this codec*/ virtual PString GetSDPFormat() const = 0; /** Set Media Format */ virtual bool SetMediaFormat(OpalMediaFormat & /*fmt*/) { return false; } /** Update Media Options */ virtual bool UpdateMediaOptions(OpalMediaFormat & /*fmt*/) { return false; } /** Set a Custom format for the codec (video) */ virtual bool SetCustomFormat(unsigned /*width*/, unsigned /*height*/, unsigned /*frameRate*/) { return false; } /** Set a Custom format for the codec (audio) */ virtual bool SetCustomFormat(unsigned /*bitrate*/, unsigned /*samplerate*/) { return false; } /** Codec Control */ virtual bool CodecControl(const char * /*name*/, void * /*parm*/, unsigned int * /*parmLen*/, int & /*retVal*/) { return false; } }; #endif h323plus/include/gkserver.h0000644000175000017500000015540111623226321014537 0ustar markmark/* * gkserver.h * * H225 Registration Admission and Security protocol handler * * Open H323 Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * This code was based on original code from OpenGate of Egoboo Ltd. thanks * to Ashley Unitt for his efforts. * * Contributor(s): ______________________________________. * * $ Id $ * */ #ifndef __OPAL_GKSERVER_H #define __OPAL_GKSERVER_H #ifdef P_USE_PRAGMA #pragma interface #endif #include "h323.h" #include "h323ep.h" #include "h225ras.h" #include "guid.h" #include "h235auth.h" #include "h323pdu.h" #include "h323trans.h" #include class PASN_Sequence; class PASN_Choice; class H225_AliasAddress; class H225_ArrayOf_TransportAddress; class H225_GatekeeperIdentifier; class H225_EndpointIdentifier; class H225_InfoRequestResponse_perCallInfo_subtype; class H225_RasUsageInformation; class H323RegisteredEndPoint; class H323GatekeeperListener; class H323GatekeeperServer; class H323RasPDU; class H323PeerElement; class H323GatekeeperRequest : public H323Transaction { PCLASSINFO(H323GatekeeperRequest, H323Transaction); public: /**@name Construction */ //@{ /**Create a new gatekeeper server request. */ H323GatekeeperRequest( H323GatekeeperListener & rasChannel, const H323RasPDU & pdu ); //@} virtual H323TransactionPDU * CreateRIP( unsigned sequenceNumber, unsigned delay ) const; virtual PBoolean WritePDU( H323TransactionPDU & pdu ); PBoolean CheckCryptoTokens(); PBoolean CheckGatekeeperIdentifier(); PBoolean GetRegisteredEndPoint(); virtual PString GetGatekeeperIdentifier() const = 0; virtual unsigned GetGatekeeperRejectTag() const = 0; virtual PString GetEndpointIdentifier() const = 0; virtual unsigned GetRegisteredEndPointRejectTag() const = 0; virtual unsigned GetSecurityRejectTag() const = 0; H323GatekeeperListener & GetRasChannel() const { return rasChannel; } PSafePtr endpoint; protected: H323GatekeeperListener & rasChannel; }; class H323GatekeeperGRQ : public H323GatekeeperRequest { PCLASSINFO(H323GatekeeperGRQ, H323GatekeeperRequest); public: H323GatekeeperGRQ( H323GatekeeperListener & listener, const H323RasPDU & pdu ); #if PTRACING virtual const char * GetName() const; #endif virtual PString GetGatekeeperIdentifier() const; virtual unsigned GetGatekeeperRejectTag() const; virtual PString GetEndpointIdentifier() const; virtual unsigned GetRegisteredEndPointRejectTag() const; virtual H235Authenticator::ValidationResult ValidatePDU() const; virtual unsigned GetSecurityRejectTag() const; virtual void SetRejectReason( unsigned reasonCode ); H225_GatekeeperRequest & grq; H225_GatekeeperConfirm & gcf; H225_GatekeeperReject & grj; protected: virtual Response OnHandlePDU(); }; class H323GatekeeperRRQ : public H323GatekeeperRequest { PCLASSINFO(H323GatekeeperRRQ, H323GatekeeperRequest); public: H323GatekeeperRRQ( H323GatekeeperListener & listener, const H323RasPDU & pdu ); #if PTRACING virtual const char * GetName() const; #endif virtual PString GetGatekeeperIdentifier() const; virtual unsigned GetGatekeeperRejectTag() const; virtual PString GetEndpointIdentifier() const; virtual unsigned GetRegisteredEndPointRejectTag() const; virtual H235Authenticator::ValidationResult ValidatePDU() const; virtual unsigned GetSecurityRejectTag() const; virtual void SetRejectReason( unsigned reasonCode ); H225_RegistrationRequest & rrq; H225_RegistrationConfirm & rcf; H225_RegistrationReject & rrj; protected: virtual Response OnHandlePDU(); }; class H323GatekeeperURQ : public H323GatekeeperRequest { PCLASSINFO(H323GatekeeperURQ, H323GatekeeperRequest); public: H323GatekeeperURQ( H323GatekeeperListener & listener, const H323RasPDU & pdu ); #if PTRACING virtual const char * GetName() const; #endif virtual PString GetGatekeeperIdentifier() const; virtual unsigned GetGatekeeperRejectTag() const; virtual PString GetEndpointIdentifier() const; virtual unsigned GetRegisteredEndPointRejectTag() const; virtual H235Authenticator::ValidationResult ValidatePDU() const; virtual unsigned GetSecurityRejectTag() const; virtual void SetRejectReason( unsigned reasonCode ); H225_UnregistrationRequest & urq; H225_UnregistrationConfirm & ucf; H225_UnregistrationReject & urj; protected: virtual Response OnHandlePDU(); }; class H323GatekeeperARQ : public H323GatekeeperRequest { PCLASSINFO(H323GatekeeperARQ, H323GatekeeperRequest); public: H323GatekeeperARQ( H323GatekeeperListener & listener, const H323RasPDU & pdu ); #if PTRACING virtual const char * GetName() const; #endif virtual PString GetGatekeeperIdentifier() const; virtual unsigned GetGatekeeperRejectTag() const; virtual PString GetEndpointIdentifier() const; virtual unsigned GetRegisteredEndPointRejectTag() const; virtual H235Authenticator::ValidationResult ValidatePDU() const; virtual unsigned GetSecurityRejectTag() const; virtual void SetRejectReason( unsigned reasonCode ); H225_AdmissionRequest & arq; H225_AdmissionConfirm & acf; H225_AdmissionReject & arj; PString alternateSecurityID; protected: virtual Response OnHandlePDU(); }; class H323GatekeeperDRQ : public H323GatekeeperRequest { PCLASSINFO(H323GatekeeperDRQ, H323GatekeeperRequest); public: H323GatekeeperDRQ( H323GatekeeperListener & listener, const H323RasPDU & pdu ); #if PTRACING virtual const char * GetName() const; #endif virtual PString GetGatekeeperIdentifier() const; virtual unsigned GetGatekeeperRejectTag() const; virtual PString GetEndpointIdentifier() const; virtual unsigned GetRegisteredEndPointRejectTag() const; virtual H235Authenticator::ValidationResult ValidatePDU() const; virtual unsigned GetSecurityRejectTag() const; virtual void SetRejectReason( unsigned reasonCode ); H225_DisengageRequest & drq; H225_DisengageConfirm & dcf; H225_DisengageReject & drj; protected: virtual Response OnHandlePDU(); }; class H323GatekeeperBRQ : public H323GatekeeperRequest { PCLASSINFO(H323GatekeeperBRQ, H323GatekeeperRequest); public: H323GatekeeperBRQ( H323GatekeeperListener & listener, const H323RasPDU & pdu ); #if PTRACING virtual const char * GetName() const; #endif virtual PString GetGatekeeperIdentifier() const; virtual unsigned GetGatekeeperRejectTag() const; virtual PString GetEndpointIdentifier() const; virtual unsigned GetRegisteredEndPointRejectTag() const; virtual H235Authenticator::ValidationResult ValidatePDU() const; virtual unsigned GetSecurityRejectTag() const; virtual void SetRejectReason( unsigned reasonCode ); H225_BandwidthRequest & brq; H225_BandwidthConfirm & bcf; H225_BandwidthReject & brj; protected: virtual Response OnHandlePDU(); }; class H323GatekeeperLRQ : public H323GatekeeperRequest { PCLASSINFO(H323GatekeeperLRQ, H323GatekeeperRequest); public: H323GatekeeperLRQ( H323GatekeeperListener & listener, const H323RasPDU & pdu ); #if PTRACING virtual const char * GetName() const; #endif virtual PString GetGatekeeperIdentifier() const; virtual unsigned GetGatekeeperRejectTag() const; virtual PString GetEndpointIdentifier() const; virtual unsigned GetRegisteredEndPointRejectTag() const; virtual H235Authenticator::ValidationResult ValidatePDU() const; virtual unsigned GetSecurityRejectTag() const; virtual void SetRejectReason( unsigned reasonCode ); H225_LocationRequest & lrq; H225_LocationConfirm & lcf; H225_LocationReject & lrj; protected: virtual Response OnHandlePDU(); }; class H323GatekeeperIRR : public H323GatekeeperRequest { PCLASSINFO(H323GatekeeperIRR, H323GatekeeperRequest); public: H323GatekeeperIRR( H323GatekeeperListener & listener, const H323RasPDU & pdu ); #if PTRACING virtual const char * GetName() const; #endif virtual PString GetGatekeeperIdentifier() const; virtual unsigned GetGatekeeperRejectTag() const; virtual PString GetEndpointIdentifier() const; virtual unsigned GetRegisteredEndPointRejectTag() const; virtual H235Authenticator::ValidationResult ValidatePDU() const; virtual unsigned GetSecurityRejectTag() const; virtual void SetRejectReason( unsigned reasonCode ); H225_InfoRequestResponse & irr; H225_InfoRequestAck & iack; H225_InfoRequestNak & inak; protected: virtual Response OnHandlePDU(); }; /**This class describes an active call on a gatekeeper. */ class H323GatekeeperCall : public PSafeObject { PCLASSINFO(H323GatekeeperCall, PSafeObject); public: /**@name Construction */ //@{ enum Direction { AnsweringCall, OriginatingCall, UnknownDirection }; /**Create a new gatekeeper call tracking record. */ H323GatekeeperCall( H323GatekeeperServer & server, ///< Owner gatekeeper server const OpalGloballyUniqueID & callIdentifier, ///< Unique call identifier Direction direction ///< Direction of call ); /**Destroy the call, removing itself from the endpoint. */ ~H323GatekeeperCall(); //@} /**@name Overrides from PObject */ //@{ /**Compare two objects. */ Comparison Compare( const PObject & obj ///< Other object ) const; /**Print the name of the gatekeeper. */ void PrintOn( ostream & strm ///< Stream to print to. ) const; //@} /**@name Operations */ //@{ /**Handle an admission ARQ PDU. The default behaviour sets some internal variables from the ARQ data and then calls OnResolveAdmission, if necessary, and OnReplyAdmission every time. */ virtual H323GatekeeperRequest::Response OnAdmission( H323GatekeeperARQ & request ); /**Shut down a call. This sendsa DRQ to the endpoint(s) to close the call down. */ virtual PBoolean Disengage( int reason = -1 ///< Reason for disengage ); /**Handle a disengage DRQ PDU. The default behaviour simply returns TRUE. */ virtual H323GatekeeperRequest::Response OnDisengage( H323GatekeeperDRQ & request ); /**Handle a bandwidth BRQ PDU. The default behaviour adjusts the bandwidth used by the gatekeeper and adjusts the remote endpoint according to those limits. */ virtual H323GatekeeperRequest::Response OnBandwidth( H323GatekeeperBRQ & request ); /**Handle an info request response IRR PDU. The default behaviour resets the heartbeat time monitoring the call. */ virtual H323GatekeeperRequest::Response OnInfoResponse( H323GatekeeperIRR & request, H225_InfoRequestResponse_perCallInfo_subtype & call ); /**Call back when an info response detects an Alerting. */ virtual void OnAlerting(); /**Call back when an info response detects an Connected. */ virtual void OnConnected(); /**Function called to do heartbeat check of the call. Monitor the state of the call and make sure everything is OK. A return value of FALSE indicates the call is to be closed for some reason. Default behaviour checks the time since the last received IRR and if it has been too long does an IRQ to see if the call (and endpoint!) is still there and running. If the IRQ fails, FALSE is returned. */ virtual PBoolean OnHeartbeat(); #ifdef H323_H248 /**Get the current credit for this call. This function is only called if the client indicates that it can use the information provided. The default behaviour calls the same function on the endpoint. */ virtual PString GetCallCreditAmount() const; /**Get the call credit billing mode for this endpoint. This function is only called if the client indicates that it can use the information provided. The default behaviour calls the same function on the endpoint. */ virtual PBoolean GetCallCreditMode() const; /**Get the duration limit for this call. This function is only called if the client indicates that it can use the information provided. The default behaviour returns zero which indicates there is no duration limit applicable. */ virtual unsigned GetDurationLimit() const; /**Send the call credit service control PDU. This will send an SCI pdu to the endpoint with the control service session information for the current call credit, if enabled. */ virtual PBoolean SendCallCreditServiceControl(); /**Add call credit and duration information to PDU. */ PBoolean AddCallCreditServiceControl( H225_ArrayOf_ServiceControlSession & serviceControl ) const; /**Send the service control session for the PDU. This will send an SCI pdu to the endpoint with the control service session information provided. */ virtual PBoolean SendServiceControlSession( const H323ServiceControlSession & session ); #endif // H323_H248 /**Translate a given alias to an alias set and signal address. This is called by the OnAdmission() handler to fill in the ACF The default behaviour calls H323GatekeeperServer::TranslateAliasAddress. */ virtual PBoolean TranslateAliasAddress( const H225_AliasAddress & alias, H225_ArrayOf_AliasAddress & aliases, H323TransportAddress & address, PBoolean & isGkRouted ); //@} /**@name Access functions */ //@{ H323GatekeeperServer & GetGatekeeper() const { return gatekeeper; } H323RegisteredEndPoint & GetEndPoint() const { return *PAssertNULL(endpoint); } PBoolean IsAnsweringCall() const { return direction == AnsweringCall; } unsigned GetCallReference() const { return callReference; } const OpalGloballyUniqueID & GetCallIdentifier() const { return callIdentifier; } const OpalGloballyUniqueID & GetConferenceIdentifier() const { return conferenceIdentifier; } const PString & GetSourceNumber() const { return srcNumber; } const PStringArray & GetSourceAliases() const { return srcAliases; } const H323TransportAddress & GetSourceHost() const { return srcHost; } PString GetSourceAddress() const; const PString & GetDestinationNumber() const { return dstNumber; } const PStringArray & GetDestinationAliases() const { return dstAliases; } const H323TransportAddress & GetDestinationHost() const { return dstHost; } PString GetDestinationAddress() const; unsigned GetBandwidthUsed() const { return bandwidthUsed; } PBoolean SetBandwidthUsed(unsigned bandwidth); const PTime & GetLastInfoResponseTime() const { return lastInfoResponse; } const PTime & GetCallStartTime() const { return callStartTime; } const PTime & GetAlertingTime() const { return alertingTime; } const PTime & GetConnectedTime() const { return connectedTime; } const PTime & GetCallEndTime() const { return callEndTime; } H323Connection::CallEndReason GetCallEndReason() const { return callEndReason; } //@} protected: void SetUsageInfo(const H225_RasUsageInformation & usage); H323GatekeeperServer & gatekeeper; H323RegisteredEndPoint * endpoint; H323GatekeeperListener * rasChannel; Direction direction; unsigned callReference; OpalGloballyUniqueID callIdentifier; OpalGloballyUniqueID conferenceIdentifier; PString srcNumber; PStringArray srcAliases; H323TransportAddress srcHost; PString dstNumber; PStringArray dstAliases; H323TransportAddress dstHost; unsigned bandwidthUsed; unsigned infoResponseRate; PTime lastInfoResponse; PBoolean drqReceived; PTime callStartTime; PTime alertingTime; PTime connectedTime; PTime callEndTime; H323Connection::CallEndReason callEndReason; }; /**This class describes endpoints that are registered with a gatekeeper server. Note that a registered endpoint has no realationship in this software to a H323EndPoint class. This is purely a description of endpoints that are registered with the gatekeeper. */ class H323RegisteredEndPoint : public PSafeObject { PCLASSINFO(H323RegisteredEndPoint, PSafeObject); public: /**@name Construction */ //@{ /**Create a new endpoint registration record. */ H323RegisteredEndPoint( H323GatekeeperServer & server, ///< Gatekeeper server data const PString & id ///< Identifier ); //@} /**@name Overrides from PObject */ //@{ /**Compare two objects. */ Comparison Compare( const PObject & obj ///< Other object ) const; /**Print the name of the gatekeeper. */ void PrintOn( ostream & strm ///< Stream to print to. ) const; //@} /**@name Call Operations */ //@{ /**Add a call to the endpoints list of active calls. This is largely an internal routine, it is not expected the user would need to deal with this function. */ virtual void AddCall( H323GatekeeperCall * call ); /**Remove a call from the endpoints list of active calls. This is largely an internal routine, it is not expected the user would need to deal with this function. */ virtual PBoolean RemoveCall( H323GatekeeperCall * call ); /**Get the count of active calls on this endpoint. */ PINDEX GetCallCount() const { return activeCalls.GetSize(); } /**Get the details of teh active call on this endpoint. */ H323GatekeeperCall & GetCall( PINDEX idx ) { return activeCalls[idx]; } //@} /**@name Protocol Operations */ //@{ /**Call back on receiving a RAS registration for this endpoint. The default behaviour extract information from the RRQ and sets internal variables to that data. If returns TRUE then a RCF is sent otherwise an RRJ is sent. */ virtual H323GatekeeperRequest::Response OnRegistration( H323GatekeeperRRQ & request ); /**Call back on receiving a RAS full registration for this endpoint. This is not called if the keepAlive flag is set indicating a lightweight RRQ has been received. The default behaviour extract information from the RRQ and sets internal variables to that data. If returns TRUE then a RCF is sent otherwise an RRJ is sent. */ virtual H323GatekeeperRequest::Response OnFullRegistration( H323GatekeeperRRQ & request ); /**Call back to set security on RAS full registration for this endpoint. This is called from OnFullRegistration(). The default behaviour extract information from the RRQ and sets internal variables to that data. If returns TRUE then a RCF is sent otherwise an RRJ is sent. */ virtual H323GatekeeperRequest::Response OnSecureRegistration( H323GatekeeperRRQ & request ); /**Call back on receiving a RAS unregistration for this endpoint. The default behaviour clears all calls owned by this endpoint. */ virtual H323GatekeeperRequest::Response OnUnregistration( H323GatekeeperURQ & request ); /**Force unregistration of the endpoint. This sendsa URQ to the endpoint(s) to close the call down. */ virtual PBoolean Unregister( int reason = -1 ///< Reason for unregistration ); /**Handle an info request response IRR PDU. The default behaviour finds each call current for endpoint and calls the function of the same name in the H323GatekeeperCall instance. */ virtual H323GatekeeperRequest::Response OnInfoResponse( H323GatekeeperIRR & request ); /**Function called to do time to live check of the call. Monitor the state of the endpoint and make sure everything is OK. A return value of FALSE indicates the endpoint has expired and is to be unregistered and removed. Default behaviour checks the time since the last received RRQ and if it has been too long does an IRQ to see if the endpoint is still there and running. If the IRQ fails, FALSE is returned. */ virtual PBoolean OnTimeToLive(); #ifdef H323_H248 /**Get the current call credit for this endpoint. This function is only called if the client indicates that it can use the information provided. If a server wishes to enable this feature by returning a non-empty string, it must be consistent in that usage. That is the H323GatekeeperCall::GetCallCreditAmount() for this endpoint must also return non-empty value. The return value is a UTF-8 string for amount, including currency. The default behaviour returns an empty string disabling the function. */ virtual PString GetCallCreditAmount() const; /**Get the call credit billing mode for this endpoint. This function is only called if the client indicates that it can use the information provided. The default behaviour return TRUE indicating that calls will debit the account. */ virtual PBoolean GetCallCreditMode() const; /**Send the service control session for the PDU. This will send an SCI pdu to the endpoint with the control service session information provided. */ virtual PBoolean SendServiceControlSession( const H323ServiceControlSession & session ); /**Set the service control session for the PDU. This is an internal function. */ virtual PBoolean AddServiceControlSession( const H323ServiceControlSession & session, H225_ArrayOf_ServiceControlSession & serviceControl ); #endif // H323_H248 //@} /**@name Access functions */ //@{ /**Set password for user activating H.235 security. */ virtual PBoolean SetPassword( const PString & password, const PString & username = PString::Empty() ); /**Get the endpoint identifier assigned to the endpoint. */ const PString & GetIdentifier() const { return identifier; } /**Get the Peer Element descriptor ID assigned to the endpoint. */ const OpalGloballyUniqueID & GetDescriptorID() const { return descriptorID; } /**Get the gatekeeper server data object that owns this endpoint. */ H323GatekeeperServer & GetGatekeeper() const { return gatekeeper; } /**Get the addresses that can be used to contact this endpoint via the RAS protocol. */ const H323TransportAddressArray & GetRASAddresses() const { return rasAddresses; } /**Get the number of addresses that can be used to contact this endpoint via the RAS protocol. */ PINDEX GetRASAddressCount() const { return rasAddresses.GetSize(); } /**Get an address that can be used to contact this endpoint via the RAS protocol. */ H323TransportAddress GetRASAddress( PINDEX idx ) const { return rasAddresses[idx]; } /**Get the addresses that can be used to contact this endpoint via the H.225/Q.931 protocol, ie normal calls. */ const H323TransportAddressArray & GetSignalAddresses() const { return signalAddresses; } /**Get the number of addresses that can be used to contact this endpoint via the H.225/Q.931 protocol, ie normal calls. */ PINDEX GetSignalAddressCount() const { return signalAddresses.GetSize(); } /**Get an address that can be used to contact this endpoint via the H.225/Q.931 protocol, ie normal calls. */ H323TransportAddress GetSignalAddress( PINDEX idx ) const { return signalAddresses[idx]; } /**Get the aliases this endpoint may be identified by. */ const PStringArray & GetAliases() const { return aliases; } /**Determine if alias is an alias that this endpoint may be identified by. */ PBoolean ContainsAlias( const PString & alias ) { return aliases.GetStringsIndex(alias) != P_MAX_INDEX; } /**Get the number of aliases this endpoint may be identified by. */ PINDEX GetAliasCount() const { return aliases.GetSize(); } /**Get an alias that this endpoint may be identified by. */ PString GetAlias( PINDEX idx ) const { if (idx < aliases.GetSize()) return aliases[idx]; return PString::Empty(); } /** Remove an alias that this endpoint may be identified by. * If this was the last alias, then endpoint will be deleted soon * after by a cleanup thread. As this function is in the endpoint itself * it is not possible for this function to delete the endpoint immediately */ void RemoveAlias( const PString & alias ); /**Get the security context for this RAS connection. */ virtual const H235Authenticators & GetAuthenticators() const { return authenticators; } /**Get the number of prefixes this endpoint can accept. */ PINDEX GetPrefixCount() const { return voicePrefixes.GetSize(); } /**Get a prefix that this endpoint can accept. */ PString GetPrefix( PINDEX idx ) const { return voicePrefixes[idx]; } /**Get application info (name/version etc) for endpoint. */ const PCaselessString & GetApplicationInfo() const { return applicationInfo; } /**Get the protocol version the endpoint registered with. */ unsigned GetProtocolVersion() const { return protocolVersion; } /**Return if gatekeeper thinks the endpoint is behind a firewall. */ PBoolean IsBehindNAT() const { return isBehindNAT; } /**Get the flag indicating the endpoint can display credit amounts. */ PBoolean CanDisplayAmountString() const { return canDisplayAmountString; } /**Get the flag indicating the endpoint can enforce a duration limit. */ PBoolean CanEnforceDurationLimit() const { return canEnforceDurationLimit; } /**Get the flag indicating the endpoint can handle RIPs (H225v1 endpoints cannot) */ PBoolean CanReceiveRIP() const; /**Get the H225 version reported in the RRQ */ PBoolean GetH225Version() const { return h225Version; } //@} #ifdef H323_H501 /**@name H.501 access functions */ //@{ /** * Function called when gatekeeper sends a descriptor for this endpoint. * This allows the gatekeeper to alter the descriptor information before * it is sent. * * If returns FALSE then the desriptor is not sent */ virtual PBoolean OnSendDescriptorForEndpoint( H225_ArrayOf_AliasAddress & aliases, ///< aliases for the enndpoint H225_EndpointType & terminalType, ///< terminal type H225_ArrayOf_AliasAddress & transportAddresses ///< transport addresses ); //@} #endif protected: H323GatekeeperServer & gatekeeper; H323GatekeeperListener * rasChannel; PString identifier; OpalGloballyUniqueID descriptorID; H323TransportAddressArray rasAddresses; H323TransportAddressArray signalAddresses; PStringArray aliases; PStringArray voicePrefixes; PCaselessString applicationInfo; unsigned protocolVersion; PBoolean isBehindNAT; PBoolean canDisplayAmountString; PBoolean canEnforceDurationLimit; unsigned h225Version; unsigned timeToLive; H235Authenticators authenticators; PTime lastRegistration; PTime lastInfoResponse; PSortedList activeCalls; #ifdef H323_H248 POrdinalDictionary serviceControlSessions; #endif }; /**This class embodies the low level H.225.0 RAS protocol on gatekeepers. One or more instances of this class may be used to access a single H323GatekeeperServer instance. Thus specific interfaces could be set up to receive UDP packets, all operating as the same gatekeeper. */ class H323GatekeeperListener : public H225_RAS { PCLASSINFO(H323GatekeeperListener, H225_RAS); public: /**@name Construction */ //@{ /**Create a new gatekeeper listener. */ H323GatekeeperListener( H323EndPoint & endpoint, ///< Local endpoint H323GatekeeperServer & server, ///< Database for gatekeeper const PString & gatekeeperIdentifier, ///< Name of this gatekeeper H323Transport * transport = NULL ///< Transport over which gatekeepers communicates. ); /**Destroy gatekeeper listener. */ ~H323GatekeeperListener(); //@} /**@name Operations */ //@{ /**Send a UnregistrationRequest (URQ) to endpoint. */ PBoolean UnregistrationRequest( const H323RegisteredEndPoint & ep, unsigned reason ); /**Send a DisengageRequest (DRQ) to endpoint. */ PBoolean DisengageRequest( const H323GatekeeperCall & call, unsigned reason ); /**Send an InfoRequest (IRQ) to endpoint. */ virtual PBoolean InfoRequest( H323RegisteredEndPoint & ep, H323GatekeeperCall * call = NULL ); #ifdef H323_H248 /**Send an ServiceControlIndication (SCI) to endpoint. */ virtual PBoolean ServiceControlIndication( H323RegisteredEndPoint & ep, const H323ServiceControlSession & session, H323GatekeeperCall * call = NULL ); #endif //@} /**@name Operation callbacks */ //@{ /**Handle a discovery GRQ PDU. The default behaviour does some checks and calls the gatekeeper server instances function of the same name. */ virtual H323GatekeeperRequest::Response OnDiscovery( H323GatekeeperGRQ & request ); /**Handle a registration RRQ PDU. The default behaviour does some checks and calls the gatekeeper server instances function of the same name. */ virtual H323GatekeeperRequest::Response OnRegistration( H323GatekeeperRRQ & request ); /**Handle an unregistration URQ PDU. The default behaviour does some checks and calls the gatekeeper server instances function of the same name. */ virtual H323GatekeeperRequest::Response OnUnregistration( H323GatekeeperURQ & request ); /**Handle an admission ARQ PDU. The default behaviour does some checks and calls the gatekeeper server instances function of the same name. */ virtual H323GatekeeperRequest::Response OnAdmission( H323GatekeeperARQ & request ); /**Handle a disengage DRQ PDU. The default behaviour does some checks and calls the gatekeeper server instances function of the same name. */ virtual H323GatekeeperRequest::Response OnDisengage( H323GatekeeperDRQ & request ); /**Handle a bandwidth BRQ PDU. The default behaviour does some checks and calls the gatekeeper server instances function of the same name. */ virtual H323GatekeeperRequest::Response OnBandwidth( H323GatekeeperBRQ & request ); /**Handle a location LRQ PDU. The default behaviour does some checks and calls the gatekeeper server instances function of the same name. */ virtual H323GatekeeperRequest::Response OnLocation( H323GatekeeperLRQ & request ); /**Handle an info request response IRR PDU. The default behaviour does some checks and calls the gatekeeper server instances function of the same name. */ virtual H323GatekeeperRequest::Response OnInfoResponse( H323GatekeeperIRR & request ); //@} /**@name Low level protocol callbacks */ //@{ PBoolean OnReceiveGatekeeperRequest(const H323RasPDU &, const H225_GatekeeperRequest &); PBoolean OnReceiveRegistrationRequest(const H323RasPDU &, const H225_RegistrationRequest &); PBoolean OnReceiveUnregistrationRequest(const H323RasPDU &, const H225_UnregistrationRequest &); PBoolean OnReceiveUnregistrationConfirm(const H225_UnregistrationConfirm &); PBoolean OnReceiveUnregistrationReject(const H225_UnregistrationReject &); PBoolean OnReceiveAdmissionRequest(const H323RasPDU &, const H225_AdmissionRequest &); PBoolean OnReceiveBandwidthRequest(const H323RasPDU &, const H225_BandwidthRequest &); PBoolean OnReceiveBandwidthConfirm(const H225_BandwidthConfirm &); PBoolean OnReceiveBandwidthReject(const H225_BandwidthReject &); PBoolean OnReceiveDisengageRequest(const H323RasPDU &, const H225_DisengageRequest &); PBoolean OnReceiveDisengageConfirm(const H225_DisengageConfirm &); PBoolean OnReceiveDisengageReject(const H225_DisengageReject &); PBoolean OnReceiveLocationRequest(const H323RasPDU &, const H225_LocationRequest &); PBoolean OnReceiveInfoRequestResponse(const H323RasPDU &, const H225_InfoRequestResponse &); PBoolean OnReceiveResourcesAvailableConfirm(const H225_ResourcesAvailableConfirm &); PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet & features, PBoolean) const; void OnReceiveFeatureSet(unsigned, const H225_FeatureSet & features) const; //@} /**@name Member access */ //@{ H323GatekeeperServer & GetGatekeeper() const { return gatekeeper; } //@} protected: H323GatekeeperServer & gatekeeper; }; /**This class implements a basic gatekeeper server functionality. An instance of this class contains all of the state information and operations for a gatekeeper. Multiple gatekeeper listeners may be using this class to link individual UDP (or other protocol) packets from various sources (interfaces etc) into a single instance. There is typically only one instance of this class, though it is not limited to that. An application would also quite likely descend from this class and override call back functions to implement more complex policy. */ class H323GatekeeperServer : public H323TransactionServer { PCLASSINFO(H323GatekeeperServer, H323TransactionServer); public: /**@name Construction */ //@{ /**Create a new gatekeeper. */ H323GatekeeperServer( H323EndPoint & endpoint ); /**Destroy gatekeeper. */ ~H323GatekeeperServer(); //@} WORD GetDefaultUdpPort() { return H225_RAS::DefaultRasUdpPort; } /**@name Protocol Handler Operations */ //@{ /**Create a new H323GatkeeperListener. The user woiuld not usually use this function as it is used internally by the server when new listeners are added by H323TransportAddress. However, a user may override this function to create objects that are user defined descendants of H323GatekeeperListener so the user can maintain extra information on a interface by interface basis. */ virtual H323Transactor * CreateListener( H323Transport * transport ///< Transport for listener ); //@} /**@name EndPoint Operations */ //@{ /**Handle a discovery GRQ PDU. The default behaviour deals with the authentication scheme nogotiation. */ virtual H323GatekeeperRequest::Response OnDiscovery( H323GatekeeperGRQ & request ); /**Call back on receiving a RAS registration for this endpoint. The default behaviour checks if the registered endpoint already exists and if not creates a new endpoint. It then calls the OnRegistration() on that new endpoint instance. If returns TRUE then a RCF is sent otherwise an RRJ is sent. */ virtual H323GatekeeperRequest::Response OnRegistration( H323GatekeeperRRQ & request ); /**Handle an unregistration URQ PDU. The default behaviour removes the aliases defined in the URQ and if all aliases for the registered endpoint are removed then the endpoint itself is removed. */ virtual H323GatekeeperRequest::Response OnUnregistration( H323GatekeeperURQ & request ); /**Handle an info request response IRR PDU. The default behaviour calls the function of the same name in the endpoint instance. */ virtual H323GatekeeperRequest::Response OnInfoResponse( H323GatekeeperIRR & request ); /**Add a new registered endpoint to the server database. Once the endpoint has been added it is then owned by the server and will be deleted when it is removed. The user woiuld not usually use this function as it is used internally by the server when new registration requests (RRQ) are received. Note that a registered endpoint has no realationship in this software to a H323EndPoint class. */ virtual void AddEndPoint( H323RegisteredEndPoint * ep ); /**Remove a registered endpoint from the server database. */ virtual PBoolean RemoveEndPoint( H323RegisteredEndPoint * ep ); /**Create a new registered endpoint object. The user woiuld not usually use this function as it is used internally by the server when new registration requests (RRQ) are received. However, a user may override this function to create objects that are user defined descendants of H323RegisteredEndPoint so the user can maintain extra information on a endpoint by endpoint basis. */ virtual H323RegisteredEndPoint * CreateRegisteredEndPoint( H323GatekeeperRRQ & request ); /**Create a new unique identifier for the registered endpoint. The returned identifier must be unique over the lifetime of this gatekeeper server. The default behaviour simply returns the string representation of the member variable nextIdentifier. There could be a problem in this implementation after 4,294,967,296 have been registered. */ virtual PString CreateEndPointIdentifier(); /**Find a registered endpoint given its endpoint identifier. */ virtual PSafePtr FindEndPointByIdentifier( const PString & identifier, PSafetyMode mode = PSafeReference ); /**Find a registered endpoint given a list of signal addresses. */ virtual PSafePtr FindEndPointBySignalAddresses( const H225_ArrayOf_TransportAddress & addresses, PSafetyMode mode = PSafeReference ); /**Find a registered endpoint given its signal address. */ virtual PSafePtr FindEndPointBySignalAddress( const H323TransportAddress & address, PSafetyMode mode = PSafeReference ); /**Find a registered endpoint given its raw alias address. */ virtual PSafePtr FindEndPointByAliasAddress( const H225_AliasAddress & alias, PSafetyMode mode = PSafeReadWrite ); /**Find a registered endpoint given its simple alias string. */ virtual PSafePtr FindEndPointByAliasString( const PString & alias, PSafetyMode mode = PSafeReference ); /**Find the first registered endpoint given a partial alias string. */ virtual PSafePtr FindEndPointByPartialAlias( const PString & alias, PSafetyMode mode = PSafeReference ); /**Find the first registered endpoint given a number prefix string. */ virtual PSafePtr FindEndPointByPrefixString( const PString & prefix, PSafetyMode mode = PSafeReference ); /**Get first endpoint for enumeration. */ PSafePtr GetFirstEndPoint( PSafetyMode mode = PSafeReference ) { return PSafePtr(byIdentifier, mode); } //@} PSafePtr FindDestinationEndPoint( const OpalGloballyUniqueID & id, H323GatekeeperCall::Direction direction ); /**@name Call Operations */ //@{ /**Handle an admission ARQ PDU. The default behaviour verifies that the call is allowed by the policies the gatekeeper server requires, then attempts to look up the required signal address for the call. It also manages bandwidth allocations. */ virtual H323GatekeeperRequest::Response OnAdmission( H323GatekeeperARQ & request ); /**Handle a disengage DRQ PDU. The default behaviour finds the call by its id provided in the DRQ and removes it from the gatekeeper server database. */ virtual H323GatekeeperRequest::Response OnDisengage( H323GatekeeperDRQ & request ); /**Handle a bandwidth BRQ PDU. The default behaviour finds the call and does some checks then calls the H323GatekeeperCall function of the same name. */ virtual H323GatekeeperRequest::Response OnBandwidth( H323GatekeeperBRQ & request ); /**Create a new call object. The user woiuld not usually use this function as it is used internally by the server when new calls (ARQ) are made. However, a user may override this function to create objects that are user defined descendants of H323GatekeeperCall so the user can maintain extra information on a call by call basis. */ virtual H323GatekeeperCall * CreateCall( const OpalGloballyUniqueID & callIdentifier, H323GatekeeperCall::Direction direction ); /** Called whenever a new call is started */ virtual void AddCall(H323GatekeeperCall *) { } /** Called whenever call is ended. By default, removes the call from the call list */ virtual void RemoveCall( H323GatekeeperCall * call ); /**Find the call given the identifier. */ virtual PSafePtr FindCall( const PString & description, PSafetyMode mode = PSafeReference ); /**Find the call given the identifier. */ virtual PSafePtr FindCall( const OpalGloballyUniqueID & callIdentifier, PBoolean answeringCall, PSafetyMode mode = PSafeReference ); /**Find the call given the identifier. */ virtual PSafePtr FindCall( const OpalGloballyUniqueID & callIdentifier, H323GatekeeperCall::Direction direction, PSafetyMode mode = PSafeReference ); /**Get first endpoint for enumeration. */ PSafePtr GetFirstCall( PSafetyMode mode = PSafeReference ) { return PSafePtr(activeCalls, mode); } //@} /**@name Routing operations */ //@{ /**Handle a location LRQ PDU. The default behaviour just uses TranslateAliasAddressToSignalAddress to determine the endpoints location. It is expected that a user would override this function to implement application specified look up algorithms. */ virtual H323GatekeeperRequest::Response OnLocation( H323GatekeeperLRQ & request ); /**Translate a given alias to an alias set and signal address. This is called by the OnAdmission() handler to fill in the ACF or OnLocation() to fill the LCF informing the calling endpoint where to actually connect to. It is expected that a user would override this function to implement application specified look up algorithms. The default behaviour calls TranslateAliasAddressToSignalAddress() which is provided only for backwards compatibility. */ virtual PBoolean TranslateAliasAddress( const H225_AliasAddress & alias, H225_ArrayOf_AliasAddress & aliases, H323TransportAddress & address, PBoolean & isGkRouted, H323GatekeeperCall * call ); virtual PBoolean TranslateAliasAddressToSignalAddress( const H225_AliasAddress & alias, H323TransportAddress & address ); //@} /**@name Policy operations */ //@{ /**Check the signal address against the security policy. This validates that the specified endpoint is allowed to make a connection to or from the specified signal address. It is expected that a user would override this function to implement application specified security policy algorithms. The default behaviour simply returns TRUE. */ virtual PBoolean CheckSignalAddressPolicy( const H323RegisteredEndPoint & ep, const H225_AdmissionRequest & arq, const H323TransportAddress & address ); /**Check the alias address against the security policy. This validates that the specified endpoint is allowed to make a connection to or from the specified alias address. It is expected that a user would override this function to implement application specified security policy algorithms. The default behaviour checks the canOnlyAnswerRegisteredEP or canOnlyCallRegisteredEP meber variables depending on if it is an incoming call and if that is TRUE only allows the call to proceed if the alias is also registered with the gatekeeper. */ virtual PBoolean CheckAliasAddressPolicy( const H323RegisteredEndPoint & ep, const H225_AdmissionRequest & arq, const H225_AliasAddress & alias ); /**Check the alias address against the security policy. This validates that the specified endpoint is allowed to make a connection to or from the specified simple alias string. It is expected that a user would override this function to implement application specified security policy algorithms. The default behaviour checks the canOnlyAnswerRegisteredEP or canOnlyCallRegisteredEP meber variables depending on if it is an incoming call and if that is TRUE only allows the call to proceed if the alias is also registered with the gatekeeper. */ virtual PBoolean CheckAliasStringPolicy( const H323RegisteredEndPoint & ep, const H225_AdmissionRequest & arq, const PString & alias ); /**Allocate or change the bandwidth being used. This function modifies the total bandwidth used by the all endpoints registered with this gatekeeper. It is called when ARQ or BRQ PDU's are received. */ virtual unsigned AllocateBandwidth( unsigned newBandwidth, unsigned oldBandwidth = 0 ); //@} /**@name Security and authentication functions */ //@{ /**Get separate H.235 authentication for the connection. This allows an individual ARQ to override the authentical credentials used in H.235 based RAS for this particular connection. A return value of FALSE indicates to use the default credentials of the endpoint, while TRUE indicates that new credentials are to be used. The default behavour does nothing and returns FALSE. */ virtual PBoolean GetAdmissionRequestAuthentication( H323GatekeeperARQ & info, ///< ARQ being constructed H235Authenticators & authenticators ///< New authenticators for ARQ ); /**Get password for user if H.235 security active. Returns TRUE if user is found and password returned. Note the password may be empty in which case the user was found but explicitly ddoes not require security, possibly overriding the requireH235 flag. */ virtual PBoolean GetUsersPassword( const PString & alias, PString & password, H323RegisteredEndPoint & registeredEndpoint ) const; virtual PBoolean GetUsersPassword( const PString & alias, PString & password ) const; //@} #ifdef H323_H501 /**@name H.323 Annex G Peer Element support */ //@{ /**Get the associated peer element for the gatekeeper. */ H323PeerElement * GetPeerElement() const { return peerElement; } /**Set the associated peer element for the gatekeeper. The existing peer element is automatically deleted. */ void SetPeerElement( H323PeerElement * newPeerElement ); /**Create an associated peer element for the gatekeeper. The existing peer element is checked to be listening on the same interface as specified and if it is not it is changed to the specified address. */ void CreatePeerElement( const H323TransportAddress & h501Interface ); /**Create a new Peer Element and establish a service relationship. If append is FALSE, the existing peer element is automatically deleted and recreated. If append is TRUE then a new service relationship is added to the existing peer element. */ PBoolean OpenPeerElement( const H323TransportAddress & remotePeer, PBoolean append = FALSE, PBoolean keepTrying = TRUE ); //@} #endif // H323_H501 /**@name Access functions */ //@{ /**Get the identifier name for this gatekeeper. */ const PString & GetGatekeeperIdentifier() const { return gatekeeperIdentifier; } /**Set the identifier name for this gatekeeper. If adjustListeners is TRUE then all gatekeeper listeners that are attached to this gatekeeper server have their identifier names changed as well. */ void SetGatekeeperIdentifier( const PString & id, PBoolean adjustListeners = TRUE ); /**Get the total bandwidth available in 100's of bits per second. */ unsigned GetAvailableBandwidth() const { return totalBandwidth; } /**Set the total bandwidth available in 100's of bits per second. */ void SetAvailableBandwidth(unsigned bps100) { totalBandwidth = bps100; } /**Get the total bandwidth used in 100's of bits per second. */ unsigned GetUsedBandwidth() const { return usedBandwidth; } /**Get the default bandwidth for calls. */ unsigned GetDefaultBandwidth() const { return defaultBandwidth; } /**Get the default time to live for new registered endpoints. */ unsigned GetTimeToLive() const { return defaultTimeToLive; } /**Set the default time to live for new registered endpoints. */ void SetTimeToLive(unsigned seconds) { defaultTimeToLive = seconds; } /**Get the default time for monitoring calls via IRR. */ unsigned GetInfoResponseRate() const { return defaultInfoResponseRate; } /**Set the default time for monitoring calls via IRR. */ void SetInfoResponseRate(unsigned seconds) { defaultInfoResponseRate = seconds; } /**Get flag for is gatekeeper routed. */ PBoolean IsGatekeeperRouted() const { return isGatekeeperRouted; } /**Get flag for if H.235 authentication is required. */ PBoolean IsRequiredH235() const { return requireH235; } /**Get the currently active registration count. */ unsigned GetActiveRegistrations() const { return byIdentifier.GetSize(); } /**Get the peak registration count. */ unsigned GetPeakRegistrations() const { return peakRegistrations; } /**Get the total registrations since start up. */ unsigned GetTotalRegistrations() const { return totalRegistrations; } /**Get the total registrations rejected since start up. */ unsigned GetRejectedRegistrations() const { return rejectedRegistrations; } /**Get the currently active call count. */ unsigned GetActiveCalls() const { return activeCalls.GetSize(); } /**Get the peak calls count. */ unsigned GetPeakCalls() const { return peakCalls; } /**Get the total calls since start up. */ unsigned GetTotalCalls() const { return totalCalls; } /**Get the total calls rejected since start up. */ unsigned GetRejectedCalls() const { return rejectedCalls; } //@} // Remove an alias from the server database. void RemoveAlias( H323RegisteredEndPoint & ep, const PString & alias ); #ifdef H323_H501 // called when an endpoint needs to send a descriptor to the H.501 peer element virtual PBoolean OnSendDescriptorForEndpoint( H323RegisteredEndPoint & /*ep*/, ///< endpoint H225_ArrayOf_AliasAddress & /*aliases*/, ///< aliases for the enndpoint H225_EndpointType & /*terminalType*/, ///< terminal type H225_ArrayOf_AliasAddress & /*transportAddresses*/ ///< transport addresses ) { return TRUE; } #endif virtual PBoolean AllowDuplicateAlias(const H225_ArrayOf_AliasAddress & /*aliases*/) { return canHaveDuplicateAlias; } virtual PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet & features, PBoolean) const; virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet & features) const; protected: PDECLARE_NOTIFIER(PThread, H323GatekeeperServer, MonitorMain); // Configuration & policy variables PString gatekeeperIdentifier; unsigned totalBandwidth; unsigned usedBandwidth; unsigned defaultBandwidth; unsigned maximumBandwidth; unsigned defaultTimeToLive; unsigned defaultInfoResponseRate; PBoolean overwriteOnSameSignalAddress; PBoolean canHaveDuplicateAlias; PBoolean canHaveDuplicatePrefix; PBoolean canOnlyCallRegisteredEP; PBoolean canOnlyAnswerRegisteredEP; PBoolean answerCallPreGrantedARQ; PBoolean makeCallPreGrantedARQ; PBoolean isGatekeeperRouted; PBoolean aliasCanBeHostName; PBoolean requireH235; PBoolean disengageOnHearbeatFail; PStringToString passwords; // Dynamic variables PMutex mutex; time_t identifierBase; unsigned nextIdentifier; PThread * monitorThread; PSyncPoint monitorExit; H323LIST(ListenerList, H323GatekeeperListener); ListenerList listeners; H323PeerElement * peerElement; PSafeDictionary byIdentifier; class StringMap : public PString { PCLASSINFO(StringMap, PString); public: StringMap(const PString & from, const PString & id) : PString(from), identifier(id) { } PString identifier; }; PSortedStringList byAddress; PSortedStringList byAlias; PSortedStringList byVoicePrefix; PSafeSortedList activeCalls; PINDEX peakRegistrations; PINDEX totalRegistrations; PINDEX rejectedRegistrations; PINDEX peakCalls; PINDEX totalCalls; PINDEX rejectedCalls; friend class H323GatekeeperRRQ; friend class H323GatekeeperARQ; }; #endif // __OPAL_GKSERVER_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/h225.h0000644000175000017500000065166511015524072013403 0ustar markmark// // h225.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H225 #ifndef __H225_H #define __H225_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "h235.h" #include "h245.h" // // ReleaseCompleteReason // class H225_NonStandardParameter; class H225_ConferenceIdentifier; class H225_SecurityErrors; class H225_ReleaseCompleteReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ReleaseCompleteReason, PASN_Choice); #endif public: H225_ReleaseCompleteReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_noBandwidth, e_gatekeeperResources, e_unreachableDestination, e_destinationRejection, e_invalidRevision, e_noPermission, e_unreachableGatekeeper, e_gatewayResources, e_badFormatAddress, e_adaptiveBusy, e_inConf, e_undefinedReason, e_facilityCallDeflection, e_securityDenied, e_calledPartyNotRegistered, e_callerNotRegistered, e_newConnectionNeeded, e_nonStandardReason, e_replaceWithConferenceInvite, e_genericDataReason, e_neededFeatureNotSupported, e_tunnelledSignallingRejected, e_invalidCID, e_securityError, e_hopCountExceeded }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardParameter &() const; #else operator H225_NonStandardParameter &(); operator const H225_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_ConferenceIdentifier &() const; #else operator H225_ConferenceIdentifier &(); operator const H225_ConferenceIdentifier &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_SecurityErrors &() const; #else operator H225_SecurityErrors &(); operator const H225_SecurityErrors &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ScnConnectionType // class H225_ScnConnectionType : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ScnConnectionType, PASN_Choice); #endif public: H225_ScnConnectionType(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_unknown, e_bChannel, e_hybrid2x64, e_hybrid384, e_hybrid1536, e_hybrid1920, e_multirate }; PBoolean CreateObject(); PObject * Clone() const; }; // // ScnConnectionAggregation // class H225_ScnConnectionAggregation : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ScnConnectionAggregation, PASN_Choice); #endif public: H225_ScnConnectionAggregation(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_auto, e_none, e_h221, e_bonded_mode1, e_bonded_mode2, e_bonded_mode3 }; PBoolean CreateObject(); PObject * Clone() const; }; // // PresentationIndicator // class H225_PresentationIndicator : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_PresentationIndicator, PASN_Choice); #endif public: H225_PresentationIndicator(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_presentationAllowed, e_presentationRestricted, e_addressNotAvailable }; PBoolean CreateObject(); PObject * Clone() const; }; // // ScreeningIndicator // class H225_ScreeningIndicator : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ScreeningIndicator, PASN_Enumeration); #endif public: H225_ScreeningIndicator(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_userProvidedNotScreened, e_userProvidedVerifiedAndPassed, e_userProvidedVerifiedAndFailed, e_networkProvided }; H225_ScreeningIndicator & operator=(unsigned v); PObject * Clone() const; }; // // FacilityReason // class H225_FacilityReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_FacilityReason, PASN_Choice); #endif public: H225_FacilityReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_routeCallToGatekeeper, e_callForwarded, e_routeCallToMC, e_undefinedReason, e_conferenceListChoice, e_startH245, e_noH245, e_newTokens, e_featureSetUpdate, e_forwardedElements, e_transportedInformation }; PBoolean CreateObject(); PObject * Clone() const; }; // // TransportAddress // class H225_TransportAddress_ipAddress; class H225_TransportAddress_ipSourceRoute; class H225_TransportAddress_ipxAddress; class H225_TransportAddress_ip6Address; class H225_NonStandardParameter; class H225_TransportAddress : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_TransportAddress, PASN_Choice); #endif public: H225_TransportAddress(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_ipAddress, e_ipSourceRoute, e_ipxAddress, e_ip6Address, e_netBios, e_nsap, e_nonStandardAddress }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_TransportAddress_ipAddress &() const; #else operator H225_TransportAddress_ipAddress &(); operator const H225_TransportAddress_ipAddress &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_TransportAddress_ipSourceRoute &() const; #else operator H225_TransportAddress_ipSourceRoute &(); operator const H225_TransportAddress_ipSourceRoute &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_TransportAddress_ipxAddress &() const; #else operator H225_TransportAddress_ipxAddress &(); operator const H225_TransportAddress_ipxAddress &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_TransportAddress_ip6Address &() const; #else operator H225_TransportAddress_ip6Address &(); operator const H225_TransportAddress_ip6Address &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardParameter &() const; #else operator H225_NonStandardParameter &(); operator const H225_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // SupportedProtocols // class H225_NonStandardParameter; class H225_H310Caps; class H225_H320Caps; class H225_H321Caps; class H225_H322Caps; class H225_H323Caps; class H225_H324Caps; class H225_VoiceCaps; class H225_T120OnlyCaps; class H225_NonStandardProtocol; class H225_T38FaxAnnexbOnlyCaps; class H225_SIPCaps; class H225_SupportedProtocols : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_SupportedProtocols, PASN_Choice); #endif public: H225_SupportedProtocols(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandardData, e_h310, e_h320, e_h321, e_h322, e_h323, e_h324, e_voice, e_t120_only, e_nonStandardProtocol, e_t38FaxAnnexbOnly, e_sip }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardParameter &() const; #else operator H225_NonStandardParameter &(); operator const H225_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_H310Caps &() const; #else operator H225_H310Caps &(); operator const H225_H310Caps &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_H320Caps &() const; #else operator H225_H320Caps &(); operator const H225_H320Caps &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_H321Caps &() const; #else operator H225_H321Caps &(); operator const H225_H321Caps &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_H322Caps &() const; #else operator H225_H322Caps &(); operator const H225_H322Caps &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_H323Caps &() const; #else operator H225_H323Caps &(); operator const H225_H323Caps &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_H324Caps &() const; #else operator H225_H324Caps &(); operator const H225_H324Caps &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_VoiceCaps &() const; #else operator H225_VoiceCaps &(); operator const H225_VoiceCaps &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_T120OnlyCaps &() const; #else operator H225_T120OnlyCaps &(); operator const H225_T120OnlyCaps &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardProtocol &() const; #else operator H225_NonStandardProtocol &(); operator const H225_NonStandardProtocol &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_T38FaxAnnexbOnlyCaps &() const; #else operator H225_T38FaxAnnexbOnlyCaps &(); operator const H225_T38FaxAnnexbOnlyCaps &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_SIPCaps &() const; #else operator H225_SIPCaps &(); operator const H225_SIPCaps &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // H221NonStandard // class H225_H221NonStandard : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_H221NonStandard, PASN_Sequence); #endif public: H225_H221NonStandard(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_t35CountryCode; PASN_Integer m_t35Extension; PASN_Integer m_manufacturerCode; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TunnelledProtocolAlternateIdentifier // class H225_TunnelledProtocolAlternateIdentifier : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_TunnelledProtocolAlternateIdentifier, PASN_Sequence); #endif public: H225_TunnelledProtocolAlternateIdentifier(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_protocolVariant }; PASN_IA5String m_protocolType; PASN_IA5String m_protocolVariant; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NonStandardIdentifier // class H225_H221NonStandard; class H225_NonStandardIdentifier : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_NonStandardIdentifier, PASN_Choice); #endif public: H225_NonStandardIdentifier(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_object, e_h221NonStandard }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_H221NonStandard &() const; #else operator H225_H221NonStandard &(); operator const H225_H221NonStandard &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // AliasAddress // class H225_TransportAddress; class H225_PartyNumber; class H225_MobileUIM; class H225_IsupNumber; class H225_AliasAddress : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_AliasAddress, PASN_Choice); #endif public: H225_AliasAddress(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_dialedDigits, e_h323_ID, e_url_ID, e_transportID, e_email_ID, e_partyNumber, e_mobileUIM, e_isupNumber }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_TransportAddress &() const; #else operator H225_TransportAddress &(); operator const H225_TransportAddress &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_PartyNumber &() const; #else operator H225_PartyNumber &(); operator const H225_PartyNumber &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_MobileUIM &() const; #else operator H225_MobileUIM &(); operator const H225_MobileUIM &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_IsupNumber &() const; #else operator H225_IsupNumber &(); operator const H225_IsupNumber &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // AddressPattern // class H225_AliasAddress; class H225_AddressPattern_range; class H225_AddressPattern : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_AddressPattern, PASN_Choice); #endif public: H225_AddressPattern(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_wildcard, e_range }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_AliasAddress &() const; #else operator H225_AliasAddress &(); operator const H225_AliasAddress &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_AddressPattern_range &() const; #else operator H225_AddressPattern_range &(); operator const H225_AddressPattern_range &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // PartyNumber // class H225_PublicPartyNumber; class H225_NumberDigits; class H225_PrivatePartyNumber; class H225_PartyNumber : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_PartyNumber, PASN_Choice); #endif public: H225_PartyNumber(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_e164Number, e_dataPartyNumber, e_telexPartyNumber, e_privateNumber, e_nationalStandardPartyNumber }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_PublicPartyNumber &() const; #else operator H225_PublicPartyNumber &(); operator const H225_PublicPartyNumber &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NumberDigits &() const; #else operator H225_NumberDigits &(); operator const H225_NumberDigits &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_PrivatePartyNumber &() const; #else operator H225_PrivatePartyNumber &(); operator const H225_PrivatePartyNumber &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // NumberDigits // class H225_NumberDigits : public PASN_IA5String { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_NumberDigits, PASN_IA5String); #endif public: H225_NumberDigits(unsigned tag = UniversalIA5String, TagClass tagClass = UniversalTagClass); H225_NumberDigits & operator=(const char * v); H225_NumberDigits & operator=(const PString & v); PObject * Clone() const; }; // // PublicTypeOfNumber // class H225_PublicTypeOfNumber : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_PublicTypeOfNumber, PASN_Choice); #endif public: H225_PublicTypeOfNumber(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_unknown, e_internationalNumber, e_nationalNumber, e_networkSpecificNumber, e_subscriberNumber, e_abbreviatedNumber }; PBoolean CreateObject(); PObject * Clone() const; }; // // PrivateTypeOfNumber // class H225_PrivateTypeOfNumber : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_PrivateTypeOfNumber, PASN_Choice); #endif public: H225_PrivateTypeOfNumber(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_unknown, e_level2RegionalNumber, e_level1RegionalNumber, e_pISNSpecificNumber, e_localNumber, e_abbreviatedNumber }; PBoolean CreateObject(); PObject * Clone() const; }; // // MobileUIM // class H225_ANSI_41_UIM; class H225_GSM_UIM; class H225_MobileUIM : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_MobileUIM, PASN_Choice); #endif public: H225_MobileUIM(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_ansi_41_uim, e_gsm_uim }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_ANSI_41_UIM &() const; #else operator H225_ANSI_41_UIM &(); operator const H225_ANSI_41_UIM &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_GSM_UIM &() const; #else operator H225_GSM_UIM &(); operator const H225_GSM_UIM &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // TBCD-STRING // class H225_TBCD_STRING : public PASN_IA5String { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_TBCD_STRING, PASN_IA5String); #endif public: H225_TBCD_STRING(unsigned tag = UniversalIA5String, TagClass tagClass = UniversalTagClass); H225_TBCD_STRING & operator=(const char * v); H225_TBCD_STRING & operator=(const PString & v); PObject * Clone() const; }; // // GSM-UIM // class H225_GSM_UIM : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_GSM_UIM, PASN_Sequence); #endif public: H225_GSM_UIM(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_imsi, e_tmsi, e_msisdn, e_imei, e_hplmn, e_vplmn }; PASN_IA5String m_imsi; PASN_OctetString m_tmsi; PASN_IA5String m_msisdn; PASN_IA5String m_imei; PASN_IA5String m_hplmn; PASN_IA5String m_vplmn; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IsupNumber // class H225_IsupPublicPartyNumber; class H225_IsupDigits; class H225_IsupPrivatePartyNumber; class H225_IsupNumber : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_IsupNumber, PASN_Choice); #endif public: H225_IsupNumber(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_e164Number, e_dataPartyNumber, e_telexPartyNumber, e_privateNumber, e_nationalStandardPartyNumber }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_IsupPublicPartyNumber &() const; #else operator H225_IsupPublicPartyNumber &(); operator const H225_IsupPublicPartyNumber &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_IsupDigits &() const; #else operator H225_IsupDigits &(); operator const H225_IsupDigits &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_IsupPrivatePartyNumber &() const; #else operator H225_IsupPrivatePartyNumber &(); operator const H225_IsupPrivatePartyNumber &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // NatureOfAddress // class H225_NatureOfAddress : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_NatureOfAddress, PASN_Choice); #endif public: H225_NatureOfAddress(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_unknown, e_subscriberNumber, e_nationalNumber, e_internationalNumber, e_networkSpecificNumber, e_routingNumberNationalFormat, e_routingNumberNetworkSpecificFormat, e_routingNumberWithCalledDirectoryNumber }; PBoolean CreateObject(); PObject * Clone() const; }; // // IsupDigits // class H225_IsupDigits : public PASN_IA5String { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_IsupDigits, PASN_IA5String); #endif public: H225_IsupDigits(unsigned tag = UniversalIA5String, TagClass tagClass = UniversalTagClass); H225_IsupDigits & operator=(const char * v); H225_IsupDigits & operator=(const PString & v); PObject * Clone() const; }; // // ExtendedAliasAddress // class H225_ExtendedAliasAddress : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ExtendedAliasAddress, PASN_Sequence); #endif public: H225_ExtendedAliasAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_presentationIndicator, e_screeningIndicator }; H225_AliasAddress m_address; H225_PresentationIndicator m_presentationIndicator; H225_ScreeningIndicator m_screeningIndicator; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UseSpecifiedTransport // class H225_UseSpecifiedTransport : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_UseSpecifiedTransport, PASN_Choice); #endif public: H225_UseSpecifiedTransport(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_tcp, e_annexE, e_sctp }; PBoolean CreateObject(); PObject * Clone() const; }; // // SecurityServiceMode // class H225_NonStandardParameter; class H225_SecurityServiceMode : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_SecurityServiceMode, PASN_Choice); #endif public: H225_SecurityServiceMode(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_none, e_default }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardParameter &() const; #else operator H225_NonStandardParameter &(); operator const H225_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // SecurityErrors // class H225_SecurityErrors : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_SecurityErrors, PASN_Choice); #endif public: H225_SecurityErrors(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_securityWrongSyncTime, e_securityReplay, e_securityWrongGeneralID, e_securityWrongSendersID, e_securityIntegrityFailed, e_securityWrongOID, e_securityDHmismatch, e_securityCertificateExpired, e_securityCertificateDateInvalid, e_securityCertificateRevoked, e_securityCertificateNotReadable, e_securityCertificateSignatureInvalid, e_securityCertificateMissing, e_securityCertificateIncomplete, e_securityUnsupportedCertificateAlgOID, e_securityUnknownCA }; PBoolean CreateObject(); PObject * Clone() const; }; // // SecurityErrors2 // class H225_SecurityErrors2 : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_SecurityErrors2, PASN_Choice); #endif public: H225_SecurityErrors2(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_securityWrongSyncTime, e_securityReplay, e_securityWrongGeneralID, e_securityWrongSendersID, e_securityIntegrityFailed, e_securityWrongOID }; PBoolean CreateObject(); PObject * Clone() const; }; // // H245Security // class H225_NonStandardParameter; class H225_SecurityCapabilities; class H225_H245Security : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_H245Security, PASN_Choice); #endif public: H225_H245Security(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_noSecurity, e_tls, e_ipsec }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardParameter &() const; #else operator H225_NonStandardParameter &(); operator const H225_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_SecurityCapabilities &() const; #else operator H225_SecurityCapabilities &(); operator const H225_SecurityCapabilities &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // Q954Details // class H225_Q954Details : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_Q954Details, PASN_Sequence); #endif public: H225_Q954Details(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_conferenceCalling; PASN_Boolean m_threePartyService; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // GloballyUniqueID // class H225_GloballyUniqueID : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_GloballyUniqueID, PASN_OctetString); #endif public: H225_GloballyUniqueID(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H225_GloballyUniqueID(const char * v); H225_GloballyUniqueID(const PString & v); H225_GloballyUniqueID(const PBYTEArray & v); H225_GloballyUniqueID & operator=(const char * v); H225_GloballyUniqueID & operator=(const PString & v); H225_GloballyUniqueID & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // ConferenceIdentifier // class H225_ConferenceIdentifier : public H225_GloballyUniqueID { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ConferenceIdentifier, H225_GloballyUniqueID); #endif public: H225_ConferenceIdentifier(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H225_ConferenceIdentifier(const char * v); H225_ConferenceIdentifier(const PString & v); H225_ConferenceIdentifier(const PBYTEArray & v); H225_ConferenceIdentifier & operator=(const char * v); H225_ConferenceIdentifier & operator=(const PString & v); H225_ConferenceIdentifier & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // RequestSeqNum // class H225_RequestSeqNum : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_RequestSeqNum, PASN_Integer); #endif public: H225_RequestSeqNum(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H225_RequestSeqNum & operator=(int v); H225_RequestSeqNum & operator=(unsigned v); PObject * Clone() const; }; // // GatekeeperIdentifier // class H225_GatekeeperIdentifier : public PASN_BMPString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_GatekeeperIdentifier, PASN_BMPString); #endif public: H225_GatekeeperIdentifier(unsigned tag = UniversalBMPString, TagClass tagClass = UniversalTagClass); H225_GatekeeperIdentifier & operator=(const char * v); H225_GatekeeperIdentifier & operator=(const PString & v); H225_GatekeeperIdentifier & operator=(const PWCharArray & v); H225_GatekeeperIdentifier & operator=(const PASN_BMPString & v); PObject * Clone() const; }; // // BandWidth // class H225_BandWidth : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_BandWidth, PASN_Integer); #endif public: H225_BandWidth(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H225_BandWidth & operator=(int v); H225_BandWidth & operator=(unsigned v); PObject * Clone() const; }; // // CallReferenceValue // class H225_CallReferenceValue : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CallReferenceValue, PASN_Integer); #endif public: H225_CallReferenceValue(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H225_CallReferenceValue & operator=(int v); H225_CallReferenceValue & operator=(unsigned v); PObject * Clone() const; }; // // EndpointIdentifier // class H225_EndpointIdentifier : public PASN_BMPString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_EndpointIdentifier, PASN_BMPString); #endif public: H225_EndpointIdentifier(unsigned tag = UniversalBMPString, TagClass tagClass = UniversalTagClass); H225_EndpointIdentifier & operator=(const char * v); H225_EndpointIdentifier & operator=(const PString & v); H225_EndpointIdentifier & operator=(const PWCharArray & v); H225_EndpointIdentifier & operator=(const PASN_BMPString & v); PObject * Clone() const; }; // // ProtocolIdentifier // class H225_ProtocolIdentifier : public PASN_ObjectId { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ProtocolIdentifier, PASN_ObjectId); #endif public: H225_ProtocolIdentifier(unsigned tag = UniversalObjectId, TagClass tagClass = UniversalTagClass); PObject * Clone() const; }; // // TimeToLive // class H225_TimeToLive : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_TimeToLive, PASN_Integer); #endif public: H225_TimeToLive(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H225_TimeToLive & operator=(int v); H225_TimeToLive & operator=(unsigned v); PObject * Clone() const; }; // // H248PackagesDescriptor // class H225_H248PackagesDescriptor : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_H248PackagesDescriptor, PASN_OctetString); #endif public: H225_H248PackagesDescriptor(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H225_H248PackagesDescriptor(const char * v); H225_H248PackagesDescriptor(const PString & v); H225_H248PackagesDescriptor(const PBYTEArray & v); H225_H248PackagesDescriptor & operator=(const char * v); H225_H248PackagesDescriptor & operator=(const PString & v); H225_H248PackagesDescriptor & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // H248SignalsDescriptor // class H225_H248SignalsDescriptor : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_H248SignalsDescriptor, PASN_OctetString); #endif public: H225_H248SignalsDescriptor(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H225_H248SignalsDescriptor(const char * v); H225_H248SignalsDescriptor(const PString & v); H225_H248SignalsDescriptor(const PBYTEArray & v); H225_H248SignalsDescriptor & operator=(const char * v); H225_H248SignalsDescriptor & operator=(const PString & v); H225_H248SignalsDescriptor & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // CallIdentifier // class H225_CallIdentifier : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CallIdentifier, PASN_Sequence); #endif public: H225_CallIdentifier(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_GloballyUniqueID m_guid; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // EncryptIntAlg // class H225_NonStandardParameter; class H225_EncryptIntAlg : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_EncryptIntAlg, PASN_Choice); #endif public: H225_EncryptIntAlg(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_isoAlgorithm }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardParameter &() const; #else operator H225_NonStandardParameter &(); operator const H225_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // NonIsoIntegrityMechanism // class H225_EncryptIntAlg; class H225_NonIsoIntegrityMechanism : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_NonIsoIntegrityMechanism, PASN_Choice); #endif public: H225_NonIsoIntegrityMechanism(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_hMAC_MD5, e_hMAC_iso10118_2_s, e_hMAC_iso10118_2_l, e_hMAC_iso10118_3 }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_EncryptIntAlg &() const; #else operator H225_EncryptIntAlg &(); operator const H225_EncryptIntAlg &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // IntegrityMechanism // class H225_NonStandardParameter; class H225_NonIsoIntegrityMechanism; class H225_IntegrityMechanism : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_IntegrityMechanism, PASN_Choice); #endif public: H225_IntegrityMechanism(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_digSig, e_iso9797, e_nonIsoIM }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardParameter &() const; #else operator H225_NonStandardParameter &(); operator const H225_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonIsoIntegrityMechanism &() const; #else operator H225_NonIsoIntegrityMechanism &(); operator const H225_NonIsoIntegrityMechanism &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ICV // class H225_ICV : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ICV, PASN_Sequence); #endif public: H225_ICV(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_ObjectId m_algorithmOID; PASN_BitString m_icv; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // FastStartToken // class H225_FastStartToken : public H235_ClearToken { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_FastStartToken, H235_ClearToken); #endif public: H225_FastStartToken(unsigned tag = 0, TagClass tagClass = UniversalTagClass); PObject * Clone() const; }; // // EncodedFastStartToken // class H225_EncodedFastStartToken : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_EncodedFastStartToken, PASN_OctetString); #endif public: H225_EncodedFastStartToken(unsigned tag = 0, TagClass tagClass = UniversalTagClass); PBoolean DecodeSubType(H225_FastStartToken & obj) { return PASN_OctetString::DecodeSubType(obj); } void EncodeSubType(const H225_FastStartToken & obj) { PASN_OctetString::EncodeSubType(obj); } PObject * Clone() const; }; // // CryptoH323Token // class H225_CryptoH323Token_cryptoEPPwdHash; class H225_CryptoH323Token_cryptoGKPwdHash; class H235_CryptoToken; class H225_CryptoH323Token : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CryptoH323Token, PASN_Choice); #endif public: H225_CryptoH323Token(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_cryptoEPPwdHash, e_cryptoGKPwdHash, e_cryptoEPPwdEncr, e_cryptoGKPwdEncr, e_cryptoEPCert, e_cryptoGKCert, e_cryptoFastStart, e_nestedcryptoToken }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_CryptoH323Token_cryptoEPPwdHash &() const; #else operator H225_CryptoH323Token_cryptoEPPwdHash &(); operator const H225_CryptoH323Token_cryptoEPPwdHash &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_CryptoH323Token_cryptoGKPwdHash &() const; #else operator H225_CryptoH323Token_cryptoGKPwdHash &(); operator const H225_CryptoH323Token_cryptoGKPwdHash &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H235_ENCRYPTED &() const; #else operator H235_ENCRYPTED &(); operator const H235_ENCRYPTED &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H235_SIGNED &() const; #else operator H235_SIGNED &(); operator const H235_SIGNED &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H235_SIGNED &() const; #else operator H235_SIGNED &(); operator const H235_SIGNED &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H235_CryptoToken &() const; #else operator H235_CryptoToken &(); operator const H235_CryptoToken &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // CallLinkage // class H225_CallLinkage : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CallLinkage, PASN_Sequence); #endif public: H225_CallLinkage(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_globalCallId, e_threadId }; H225_GloballyUniqueID m_globalCallId; H225_GloballyUniqueID m_threadId; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CapacityReportingCapability // class H225_CapacityReportingCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CapacityReportingCapability, PASN_Sequence); #endif public: H225_CapacityReportingCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_canReportCallCapacity; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CarrierInfo // class H225_CarrierInfo : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CarrierInfo, PASN_Sequence); #endif public: H225_CarrierInfo(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_carrierIdentificationCode, e_carrierName }; PASN_OctetString m_carrierIdentificationCode; PASN_IA5String m_carrierName; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ServiceControlDescriptor // class H225_H248SignalsDescriptor; class H225_NonStandardParameter; class H225_CallCreditServiceControl; class H225_ServiceControlDescriptor : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ServiceControlDescriptor, PASN_Choice); #endif public: H225_ServiceControlDescriptor(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_url, e_signal, e_nonStandard, e_callCreditServiceControl }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_H248SignalsDescriptor &() const; #else operator H225_H248SignalsDescriptor &(); operator const H225_H248SignalsDescriptor &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardParameter &() const; #else operator H225_NonStandardParameter &(); operator const H225_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_CallCreditServiceControl &() const; #else operator H225_CallCreditServiceControl &(); operator const H225_CallCreditServiceControl &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // CallTerminationCause // class H225_ReleaseCompleteReason; class H225_CallTerminationCause : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CallTerminationCause, PASN_Choice); #endif public: H225_CallTerminationCause(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_releaseCompleteReason, e_releaseCompleteCauseIE }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_ReleaseCompleteReason &() const; #else operator H225_ReleaseCompleteReason &(); operator const H225_ReleaseCompleteReason &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // CallCreditCapability // class H225_CallCreditCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CallCreditCapability, PASN_Sequence); #endif public: H225_CallCreditCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_canDisplayAmountString, e_canEnforceDurationLimit }; PASN_Boolean m_canDisplayAmountString; PASN_Boolean m_canEnforceDurationLimit; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // GenericIdentifier // class H225_GloballyUniqueID; class H225_GenericIdentifier : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_GenericIdentifier, PASN_Choice); #endif public: H225_GenericIdentifier(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_standard, e_oid, e_nonStandard }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_GloballyUniqueID &() const; #else operator H225_GloballyUniqueID &(); operator const H225_GloballyUniqueID &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // Content // class H225_GenericIdentifier; class H225_AliasAddress; class H225_TransportAddress; class H225_ArrayOf_EnumeratedParameter; class H225_ArrayOf_GenericData; class H225_Content : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_Content, PASN_Choice); #endif public: H225_Content(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_raw, e_text, e_unicode, e_bool, e_number8, e_number16, e_number32, e_id, e_alias, e_transport, e_compound, e_nested }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_GenericIdentifier &() const; #else operator H225_GenericIdentifier &(); operator const H225_GenericIdentifier &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_AliasAddress &() const; #else operator H225_AliasAddress &(); operator const H225_AliasAddress &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_TransportAddress &() const; #else operator H225_TransportAddress &(); operator const H225_TransportAddress &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_ArrayOf_EnumeratedParameter &() const; #else operator H225_ArrayOf_EnumeratedParameter &(); operator const H225_ArrayOf_EnumeratedParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_ArrayOf_GenericData &() const; #else operator H225_ArrayOf_GenericData &(); operator const H225_ArrayOf_GenericData &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // TransportChannelInfo // class H225_TransportChannelInfo : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_TransportChannelInfo, PASN_Sequence); #endif public: H225_TransportChannelInfo(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_sendAddress, e_recvAddress }; H225_TransportAddress m_sendAddress; H225_TransportAddress m_recvAddress; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RehomingModel // class H225_RehomingModel : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_RehomingModel, PASN_Choice); #endif public: H225_RehomingModel(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_gatekeeperBased, e_endpointBased }; PBoolean CreateObject(); PObject * Clone() const; }; // // RasMessage // class H225_GatekeeperRequest; class H225_GatekeeperConfirm; class H225_GatekeeperReject; class H225_RegistrationRequest; class H225_RegistrationConfirm; class H225_RegistrationReject; class H225_UnregistrationRequest; class H225_UnregistrationConfirm; class H225_UnregistrationReject; class H225_AdmissionRequest; class H225_AdmissionConfirm; class H225_AdmissionReject; class H225_BandwidthRequest; class H225_BandwidthConfirm; class H225_BandwidthReject; class H225_DisengageRequest; class H225_DisengageConfirm; class H225_DisengageReject; class H225_LocationRequest; class H225_LocationConfirm; class H225_LocationReject; class H225_InfoRequest; class H225_InfoRequestResponse; class H225_NonStandardMessage; class H225_UnknownMessageResponse; class H225_RequestInProgress; class H225_ResourcesAvailableIndicate; class H225_ResourcesAvailableConfirm; class H225_InfoRequestAck; class H225_InfoRequestNak; class H225_ServiceControlIndication; class H225_ServiceControlResponse; class H225_ArrayOf_AdmissionConfirm; class H225_RasMessage : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_RasMessage, PASN_Choice); #endif public: H225_RasMessage(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_gatekeeperRequest, e_gatekeeperConfirm, e_gatekeeperReject, e_registrationRequest, e_registrationConfirm, e_registrationReject, e_unregistrationRequest, e_unregistrationConfirm, e_unregistrationReject, e_admissionRequest, e_admissionConfirm, e_admissionReject, e_bandwidthRequest, e_bandwidthConfirm, e_bandwidthReject, e_disengageRequest, e_disengageConfirm, e_disengageReject, e_locationRequest, e_locationConfirm, e_locationReject, e_infoRequest, e_infoRequestResponse, e_nonStandardMessage, e_unknownMessageResponse, e_requestInProgress, e_resourcesAvailableIndicate, e_resourcesAvailableConfirm, e_infoRequestAck, e_infoRequestNak, e_serviceControlIndication, e_serviceControlResponse, e_admissionConfirmSequence }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_GatekeeperRequest &() const; #else operator H225_GatekeeperRequest &(); operator const H225_GatekeeperRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_GatekeeperConfirm &() const; #else operator H225_GatekeeperConfirm &(); operator const H225_GatekeeperConfirm &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_GatekeeperReject &() const; #else operator H225_GatekeeperReject &(); operator const H225_GatekeeperReject &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_RegistrationRequest &() const; #else operator H225_RegistrationRequest &(); operator const H225_RegistrationRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_RegistrationConfirm &() const; #else operator H225_RegistrationConfirm &(); operator const H225_RegistrationConfirm &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_RegistrationReject &() const; #else operator H225_RegistrationReject &(); operator const H225_RegistrationReject &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_UnregistrationRequest &() const; #else operator H225_UnregistrationRequest &(); operator const H225_UnregistrationRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_UnregistrationConfirm &() const; #else operator H225_UnregistrationConfirm &(); operator const H225_UnregistrationConfirm &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_UnregistrationReject &() const; #else operator H225_UnregistrationReject &(); operator const H225_UnregistrationReject &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_AdmissionRequest &() const; #else operator H225_AdmissionRequest &(); operator const H225_AdmissionRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_AdmissionConfirm &() const; #else operator H225_AdmissionConfirm &(); operator const H225_AdmissionConfirm &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_AdmissionReject &() const; #else operator H225_AdmissionReject &(); operator const H225_AdmissionReject &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_BandwidthRequest &() const; #else operator H225_BandwidthRequest &(); operator const H225_BandwidthRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_BandwidthConfirm &() const; #else operator H225_BandwidthConfirm &(); operator const H225_BandwidthConfirm &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_BandwidthReject &() const; #else operator H225_BandwidthReject &(); operator const H225_BandwidthReject &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_DisengageRequest &() const; #else operator H225_DisengageRequest &(); operator const H225_DisengageRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_DisengageConfirm &() const; #else operator H225_DisengageConfirm &(); operator const H225_DisengageConfirm &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_DisengageReject &() const; #else operator H225_DisengageReject &(); operator const H225_DisengageReject &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_LocationRequest &() const; #else operator H225_LocationRequest &(); operator const H225_LocationRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_LocationConfirm &() const; #else operator H225_LocationConfirm &(); operator const H225_LocationConfirm &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_LocationReject &() const; #else operator H225_LocationReject &(); operator const H225_LocationReject &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_InfoRequest &() const; #else operator H225_InfoRequest &(); operator const H225_InfoRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_InfoRequestResponse &() const; #else operator H225_InfoRequestResponse &(); operator const H225_InfoRequestResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardMessage &() const; #else operator H225_NonStandardMessage &(); operator const H225_NonStandardMessage &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_UnknownMessageResponse &() const; #else operator H225_UnknownMessageResponse &(); operator const H225_UnknownMessageResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_RequestInProgress &() const; #else operator H225_RequestInProgress &(); operator const H225_RequestInProgress &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_ResourcesAvailableIndicate &() const; #else operator H225_ResourcesAvailableIndicate &(); operator const H225_ResourcesAvailableIndicate &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_ResourcesAvailableConfirm &() const; #else operator H225_ResourcesAvailableConfirm &(); operator const H225_ResourcesAvailableConfirm &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_InfoRequestAck &() const; #else operator H225_InfoRequestAck &(); operator const H225_InfoRequestAck &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_InfoRequestNak &() const; #else operator H225_InfoRequestNak &(); operator const H225_InfoRequestNak &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_ServiceControlIndication &() const; #else operator H225_ServiceControlIndication &(); operator const H225_ServiceControlIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_ServiceControlResponse &() const; #else operator H225_ServiceControlResponse &(); operator const H225_ServiceControlResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_ArrayOf_AdmissionConfirm &() const; #else operator H225_ArrayOf_AdmissionConfirm &(); operator const H225_ArrayOf_AdmissionConfirm &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // GatekeeperRejectReason // class H225_SecurityErrors; class H225_GatekeeperRejectReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_GatekeeperRejectReason, PASN_Choice); #endif public: H225_GatekeeperRejectReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_resourceUnavailable, e_terminalExcluded, e_invalidRevision, e_undefinedReason, e_securityDenial, e_genericDataReason, e_neededFeatureNotSupported, e_securityError }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_SecurityErrors &() const; #else operator H225_SecurityErrors &(); operator const H225_SecurityErrors &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // RegistrationRejectReason // class H225_ArrayOf_AliasAddress; class H225_RegistrationRejectReason_invalidTerminalAliases; class H225_SecurityErrors; class H225_RegistrationRejectReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_RegistrationRejectReason, PASN_Choice); #endif public: H225_RegistrationRejectReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_discoveryRequired, e_invalidRevision, e_invalidCallSignalAddress, e_invalidRASAddress, e_duplicateAlias, e_invalidTerminalType, e_undefinedReason, e_transportNotSupported, e_transportQOSNotSupported, e_resourceUnavailable, e_invalidAlias, e_securityDenial, e_fullRegistrationRequired, e_additiveRegistrationNotSupported, e_invalidTerminalAliases, e_genericDataReason, e_neededFeatureNotSupported, e_securityError, e_registerWithAssignedGK }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_ArrayOf_AliasAddress &() const; #else operator H225_ArrayOf_AliasAddress &(); operator const H225_ArrayOf_AliasAddress &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_RegistrationRejectReason_invalidTerminalAliases &() const; #else operator H225_RegistrationRejectReason_invalidTerminalAliases &(); operator const H225_RegistrationRejectReason_invalidTerminalAliases &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_SecurityErrors &() const; #else operator H225_SecurityErrors &(); operator const H225_SecurityErrors &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // UnregRequestReason // class H225_SecurityErrors2; class H225_UnregRequestReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_UnregRequestReason, PASN_Choice); #endif public: H225_UnregRequestReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_reregistrationRequired, e_ttlExpired, e_securityDenial, e_undefinedReason, e_maintenance, e_securityError, e_registerWithAssignedGK }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_SecurityErrors2 &() const; #else operator H225_SecurityErrors2 &(); operator const H225_SecurityErrors2 &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // UnregRejectReason // class H225_SecurityErrors2; class H225_UnregRejectReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_UnregRejectReason, PASN_Choice); #endif public: H225_UnregRejectReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_notCurrentlyRegistered, e_callInProgress, e_undefinedReason, e_permissionDenied, e_securityDenial, e_securityError }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_SecurityErrors2 &() const; #else operator H225_SecurityErrors2 &(); operator const H225_SecurityErrors2 &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // CallType // class H225_CallType : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CallType, PASN_Choice); #endif public: H225_CallType(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_pointToPoint, e_oneToN, e_nToOne, e_nToN }; PBoolean CreateObject(); PObject * Clone() const; }; // // CallModel // class H225_CallModel : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CallModel, PASN_Choice); #endif public: H225_CallModel(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_direct, e_gatekeeperRouted }; PBoolean CreateObject(); PObject * Clone() const; }; // // TransportQOS // class H225_ArrayOf_QOSCapability; class H225_TransportQOS : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_TransportQOS, PASN_Choice); #endif public: H225_TransportQOS(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_endpointControlled, e_gatekeeperControlled, e_noControl, e_qOSCapabilities }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_ArrayOf_QOSCapability &() const; #else operator H225_ArrayOf_QOSCapability &(); operator const H225_ArrayOf_QOSCapability &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // UUIEsRequested // class H225_UUIEsRequested : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_UUIEsRequested, PASN_Sequence); #endif public: H225_UUIEsRequested(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_status, e_statusInquiry, e_setupAcknowledge, e_notify }; PASN_Boolean m_setup; PASN_Boolean m_callProceeding; PASN_Boolean m_connect; PASN_Boolean m_alerting; PASN_Boolean m_information; PASN_Boolean m_releaseComplete; PASN_Boolean m_facility; PASN_Boolean m_progress; PASN_Boolean m_empty; PASN_Boolean m_status; PASN_Boolean m_statusInquiry; PASN_Boolean m_setupAcknowledge; PASN_Boolean m_notify; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AdmissionRejectReason // class H225_ArrayOf_PartyNumber; class H225_SecurityErrors2; class H225_AdmissionRejectReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_AdmissionRejectReason, PASN_Choice); #endif public: H225_AdmissionRejectReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_calledPartyNotRegistered, e_invalidPermission, e_requestDenied, e_undefinedReason, e_callerNotRegistered, e_routeCallToGatekeeper, e_invalidEndpointIdentifier, e_resourceUnavailable, e_securityDenial, e_qosControlNotSupported, e_incompleteAddress, e_aliasesInconsistent, e_routeCallToSCN, e_exceedsCallCapacity, e_collectDestination, e_collectPIN, e_genericDataReason, e_neededFeatureNotSupported, e_securityErrors, e_securityDHmismatch, e_noRouteToDestination, e_unallocatedNumber, e_registerWithAssignedGK }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_ArrayOf_PartyNumber &() const; #else operator H225_ArrayOf_PartyNumber &(); operator const H225_ArrayOf_PartyNumber &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_SecurityErrors2 &() const; #else operator H225_SecurityErrors2 &(); operator const H225_SecurityErrors2 &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // BandRejectReason // class H225_SecurityErrors2; class H225_BandRejectReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_BandRejectReason, PASN_Choice); #endif public: H225_BandRejectReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_notBound, e_invalidConferenceID, e_invalidPermission, e_insufficientResources, e_invalidRevision, e_undefinedReason, e_securityDenial, e_securityError }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_SecurityErrors2 &() const; #else operator H225_SecurityErrors2 &(); operator const H225_SecurityErrors2 &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // LocationRejectReason // class H225_ArrayOf_PartyNumber; class H225_SecurityErrors2; class H225_LocationRejectReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_LocationRejectReason, PASN_Choice); #endif public: H225_LocationRejectReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_notRegistered, e_invalidPermission, e_requestDenied, e_undefinedReason, e_securityDenial, e_aliasesInconsistent, e_routeCalltoSCN, e_resourceUnavailable, e_genericDataReason, e_neededFeatureNotSupported, e_hopCountExceeded, e_incompleteAddress, e_securityError, e_securityDHmismatch, e_noRouteToDestination, e_unallocatedNumber }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_ArrayOf_PartyNumber &() const; #else operator H225_ArrayOf_PartyNumber &(); operator const H225_ArrayOf_PartyNumber &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_SecurityErrors2 &() const; #else operator H225_SecurityErrors2 &(); operator const H225_SecurityErrors2 &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // DisengageReason // class H225_DisengageReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_DisengageReason, PASN_Choice); #endif public: H225_DisengageReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_forcedDrop, e_normalDrop, e_undefinedReason }; PBoolean CreateObject(); PObject * Clone() const; }; // // DisengageRejectReason // class H225_SecurityErrors2; class H225_DisengageRejectReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_DisengageRejectReason, PASN_Choice); #endif public: H225_DisengageRejectReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_notRegistered, e_requestToDropOther, e_securityDenial, e_securityError }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_SecurityErrors2 &() const; #else operator H225_SecurityErrors2 &(); operator const H225_SecurityErrors2 &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // InfoRequestResponseStatus // class H225_InfoRequestResponseStatus : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_InfoRequestResponseStatus, PASN_Choice); #endif public: H225_InfoRequestResponseStatus(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_complete, e_incomplete, e_segment, e_invalidCall }; PBoolean CreateObject(); PObject * Clone() const; }; // // InfoRequestNakReason // class H225_SecurityErrors2; class H225_InfoRequestNakReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_InfoRequestNakReason, PASN_Choice); #endif public: H225_InfoRequestNakReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_notRegistered, e_securityDenial, e_undefinedReason, e_securityError }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_SecurityErrors2 &() const; #else operator H225_SecurityErrors2 &(); operator const H225_SecurityErrors2 &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // H323-UserInformation_user-data // class H225_H323_UserInformation_user_data : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_H323_UserInformation_user_data, PASN_Sequence); #endif public: H225_H323_UserInformation_user_data(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_protocol_discriminator; PASN_OctetString m_user_information; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H323-UU-PDU_h323-message-body // class H225_Setup_UUIE; class H225_CallProceeding_UUIE; class H225_Connect_UUIE; class H225_Alerting_UUIE; class H225_Information_UUIE; class H225_ReleaseComplete_UUIE; class H225_Facility_UUIE; class H225_Progress_UUIE; class H225_Status_UUIE; class H225_StatusInquiry_UUIE; class H225_SetupAcknowledge_UUIE; class H225_Notify_UUIE; class H225_H323_UU_PDU_h323_message_body : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_H323_UU_PDU_h323_message_body, PASN_Choice); #endif public: H225_H323_UU_PDU_h323_message_body(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_setup, e_callProceeding, e_connect, e_alerting, e_information, e_releaseComplete, e_facility, e_progress, e_empty, e_status, e_statusInquiry, e_setupAcknowledge, e_notify }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_Setup_UUIE &() const; #else operator H225_Setup_UUIE &(); operator const H225_Setup_UUIE &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_CallProceeding_UUIE &() const; #else operator H225_CallProceeding_UUIE &(); operator const H225_CallProceeding_UUIE &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_Connect_UUIE &() const; #else operator H225_Connect_UUIE &(); operator const H225_Connect_UUIE &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_Alerting_UUIE &() const; #else operator H225_Alerting_UUIE &(); operator const H225_Alerting_UUIE &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_Information_UUIE &() const; #else operator H225_Information_UUIE &(); operator const H225_Information_UUIE &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_ReleaseComplete_UUIE &() const; #else operator H225_ReleaseComplete_UUIE &(); operator const H225_ReleaseComplete_UUIE &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_Facility_UUIE &() const; #else operator H225_Facility_UUIE &(); operator const H225_Facility_UUIE &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_Progress_UUIE &() const; #else operator H225_Progress_UUIE &(); operator const H225_Progress_UUIE &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_Status_UUIE &() const; #else operator H225_Status_UUIE &(); operator const H225_Status_UUIE &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_StatusInquiry_UUIE &() const; #else operator H225_StatusInquiry_UUIE &(); operator const H225_StatusInquiry_UUIE &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_SetupAcknowledge_UUIE &() const; #else operator H225_SetupAcknowledge_UUIE &(); operator const H225_SetupAcknowledge_UUIE &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_Notify_UUIE &() const; #else operator H225_Notify_UUIE &(); operator const H225_Notify_UUIE &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_PASN_OctetString // class H225_ArrayOf_PASN_OctetString : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_PASN_OctetString, PASN_Array); #endif public: H225_ArrayOf_PASN_OctetString(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; PASN_OctetString & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_NonStandardParameter // class H225_NonStandardParameter; class H225_ArrayOf_NonStandardParameter : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_NonStandardParameter, PASN_Array); #endif public: H225_ArrayOf_NonStandardParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_NonStandardParameter & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_GenericData // class H225_GenericData; class H225_ArrayOf_GenericData : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_GenericData, PASN_Array); #endif public: H225_ArrayOf_GenericData(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_GenericData & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_ClearToken // class H235_ClearToken; class H225_ArrayOf_ClearToken : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_ClearToken, PASN_Array); #endif public: H225_ArrayOf_ClearToken(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H235_ClearToken & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_CryptoH323Token // class H225_CryptoH323Token; class H225_ArrayOf_CryptoH323Token : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_CryptoH323Token, PASN_Array); #endif public: H225_ArrayOf_CryptoH323Token(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_CryptoH323Token & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_AliasAddress // class H225_AliasAddress; class H225_ArrayOf_AliasAddress : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_AliasAddress, PASN_Array); #endif public: H225_ArrayOf_AliasAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_AliasAddress & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_ServiceControlSession // class H225_ServiceControlSession; class H225_ArrayOf_ServiceControlSession : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_ServiceControlSession, PASN_Array); #endif public: H225_ArrayOf_ServiceControlSession(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_ServiceControlSession & operator[](PINDEX i) const; PObject * Clone() const; }; // // Connect-UUIE_language // class H225_Connect_UUIE_language : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_Connect_UUIE_language, PASN_Array); #endif public: H225_Connect_UUIE_language(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; PASN_IA5String & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_CallReferenceValue // class H225_CallReferenceValue; class H225_ArrayOf_CallReferenceValue : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_CallReferenceValue, PASN_Array); #endif public: H225_ArrayOf_CallReferenceValue(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_CallReferenceValue & operator[](PINDEX i) const; PObject * Clone() const; }; // // Setup-UUIE_conferenceGoal // class H225_Setup_UUIE_conferenceGoal : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_Setup_UUIE_conferenceGoal, PASN_Choice); #endif public: H225_Setup_UUIE_conferenceGoal(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_create, e_join, e_invite, e_capability_negotiation, e_callIndependentSupplementaryService }; PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_H245Security // class H225_H245Security; class H225_ArrayOf_H245Security : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_H245Security, PASN_Array); #endif public: H225_ArrayOf_H245Security(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_H245Security & operator[](PINDEX i) const; PObject * Clone() const; }; // // Setup-UUIE_connectionParameters // class H225_Setup_UUIE_connectionParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_Setup_UUIE_connectionParameters, PASN_Sequence); #endif public: H225_Setup_UUIE_connectionParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_ScnConnectionType m_connectionType; PASN_Integer m_numberOfScnConnections; H225_ScnConnectionAggregation m_connectionAggregation; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Setup-UUIE_language // class H225_Setup_UUIE_language : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_Setup_UUIE_language, PASN_Array); #endif public: H225_Setup_UUIE_language(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; PASN_IA5String & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_SupportedProtocols // class H225_SupportedProtocols; class H225_ArrayOf_SupportedProtocols : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_SupportedProtocols, PASN_Array); #endif public: H225_ArrayOf_SupportedProtocols(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_SupportedProtocols & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_FeatureDescriptor // class H225_FeatureDescriptor; class H225_ArrayOf_FeatureDescriptor : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_FeatureDescriptor, PASN_Array); #endif public: H225_ArrayOf_FeatureDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_FeatureDescriptor & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_ExtendedAliasAddress // class H225_ExtendedAliasAddress; class H225_ArrayOf_ExtendedAliasAddress : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_ExtendedAliasAddress, PASN_Array); #endif public: H225_ArrayOf_ExtendedAliasAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_ExtendedAliasAddress & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_ConferenceList // class H225_ConferenceList; class H225_ArrayOf_ConferenceList : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_ConferenceList, PASN_Array); #endif public: H225_ArrayOf_ConferenceList(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_ConferenceList & operator[](PINDEX i) const; PObject * Clone() const; }; // // TransportAddress_ipAddress // class H225_TransportAddress_ipAddress : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_TransportAddress_ipAddress, PASN_Sequence); #endif public: H225_TransportAddress_ipAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_OctetString m_ip; PASN_Integer m_port; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TransportAddress_ipxAddress // class H225_TransportAddress_ipxAddress : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_TransportAddress_ipxAddress, PASN_Sequence); #endif public: H225_TransportAddress_ipxAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_OctetString m_node; PASN_OctetString m_netnum; PASN_OctetString m_port; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TransportAddress_ip6Address // class H225_TransportAddress_ip6Address : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_TransportAddress_ip6Address, PASN_Sequence); #endif public: H225_TransportAddress_ip6Address(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_OctetString m_ip; PASN_Integer m_port; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_TunnelledProtocol // class H225_TunnelledProtocol; class H225_ArrayOf_TunnelledProtocol : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_TunnelledProtocol, PASN_Array); #endif public: H225_ArrayOf_TunnelledProtocol(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_TunnelledProtocol & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_DataRate // class H225_DataRate; class H225_ArrayOf_DataRate : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_DataRate, PASN_Array); #endif public: H225_ArrayOf_DataRate(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_DataRate & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_SupportedPrefix // class H225_SupportedPrefix; class H225_ArrayOf_SupportedPrefix : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_SupportedPrefix, PASN_Array); #endif public: H225_ArrayOf_SupportedPrefix(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_SupportedPrefix & operator[](PINDEX i) const; PObject * Clone() const; }; // // TunnelledProtocol_id // class H225_TunnelledProtocolAlternateIdentifier; class H225_TunnelledProtocol_id : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_TunnelledProtocol_id, PASN_Choice); #endif public: H225_TunnelledProtocol_id(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_tunnelledProtocolObjectID, e_tunnelledProtocolAlternateID }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_TunnelledProtocolAlternateIdentifier &() const; #else operator H225_TunnelledProtocolAlternateIdentifier &(); operator const H225_TunnelledProtocolAlternateIdentifier &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // AddressPattern_range // class H225_AddressPattern_range : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_AddressPattern_range, PASN_Sequence); #endif public: H225_AddressPattern_range(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_PartyNumber m_startOfRange; H225_PartyNumber m_endOfRange; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ANSI-41-UIM_system-id // class H225_ANSI_41_UIM_system_id : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ANSI_41_UIM_system_id, PASN_Choice); #endif public: H225_ANSI_41_UIM_system_id(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_sid, e_mid }; PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_TransportAddress // class H225_TransportAddress; class H225_ArrayOf_TransportAddress : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_TransportAddress, PASN_Array); #endif public: H225_ArrayOf_TransportAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_TransportAddress & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_AlternateGK // class H225_AlternateGK; class H225_ArrayOf_AlternateGK : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_AlternateGK, PASN_Array); #endif public: H225_ArrayOf_AlternateGK(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_AlternateGK & operator[](PINDEX i) const; PObject * Clone() const; }; // // CryptoH323Token_cryptoEPPwdHash // class H225_CryptoH323Token_cryptoEPPwdHash : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CryptoH323Token_cryptoEPPwdHash, PASN_Sequence); #endif public: H225_CryptoH323Token_cryptoEPPwdHash(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_AliasAddress m_alias; H235_TimeStamp m_timeStamp; H235_HASHED m_token; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CryptoH323Token_cryptoGKPwdHash // class H225_CryptoH323Token_cryptoGKPwdHash : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CryptoH323Token_cryptoGKPwdHash, PASN_Sequence); #endif public: H225_CryptoH323Token_cryptoGKPwdHash(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_GatekeeperIdentifier m_gatekeeperId; H235_TimeStamp m_timeStamp; H235_HASHED m_token; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CapacityReportingSpecification_when // class H225_CapacityReportingSpecification_when : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CapacityReportingSpecification_when, PASN_Sequence); #endif public: H225_CapacityReportingSpecification_when(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_callStart, e_callEnd }; PASN_Null m_callStart; PASN_Null m_callEnd; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_CallsAvailable // class H225_CallsAvailable; class H225_ArrayOf_CallsAvailable : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_CallsAvailable, PASN_Array); #endif public: H225_ArrayOf_CallsAvailable(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_CallsAvailable & operator[](PINDEX i) const; PObject * Clone() const; }; // // CicInfo_cic // class H225_CicInfo_cic : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CicInfo_cic, PASN_Array); #endif public: H225_CicInfo_cic(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; PASN_OctetString & operator[](PINDEX i) const; PObject * Clone() const; }; // // GroupID_member // class H225_GroupID_member : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_GroupID_member, PASN_Array); #endif public: H225_GroupID_member(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; PASN_Integer & operator[](PINDEX i) const; PObject * Clone() const; }; // // ServiceControlSession_reason // class H225_ServiceControlSession_reason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ServiceControlSession_reason, PASN_Choice); #endif public: H225_ServiceControlSession_reason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_open, e_refresh, e_close }; PBoolean CreateObject(); PObject * Clone() const; }; // // RasUsageSpecification_when // class H225_RasUsageSpecification_when : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_RasUsageSpecification_when, PASN_Sequence); #endif public: H225_RasUsageSpecification_when(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_start, e_end, e_inIrr }; PASN_Null m_start; PASN_Null m_end; PASN_Null m_inIrr; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RasUsageSpecification_callStartingPoint // class H225_RasUsageSpecification_callStartingPoint : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_RasUsageSpecification_callStartingPoint, PASN_Sequence); #endif public: H225_RasUsageSpecification_callStartingPoint(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_alerting, e_connect }; PASN_Null m_alerting; PASN_Null m_connect; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CallCreditServiceControl_billingMode // class H225_CallCreditServiceControl_billingMode : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CallCreditServiceControl_billingMode, PASN_Choice); #endif public: H225_CallCreditServiceControl_billingMode(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_credit, e_debit }; PBoolean CreateObject(); PObject * Clone() const; }; // // CallCreditServiceControl_callStartingPoint // class H225_CallCreditServiceControl_callStartingPoint : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CallCreditServiceControl_callStartingPoint, PASN_Choice); #endif public: H225_CallCreditServiceControl_callStartingPoint(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_alerting, e_connect }; PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_EnumeratedParameter // class H225_EnumeratedParameter; class H225_ArrayOf_EnumeratedParameter : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_EnumeratedParameter, PASN_Array); #endif public: H225_ArrayOf_EnumeratedParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_EnumeratedParameter & operator[](PINDEX i) const; PObject * Clone() const; }; // // RTPSession_associatedSessionIds // class H225_RTPSession_associatedSessionIds : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_RTPSession_associatedSessionIds, PASN_Array); #endif public: H225_RTPSession_associatedSessionIds(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; PASN_Integer & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_AdmissionConfirm // class H225_AdmissionConfirm; class H225_ArrayOf_AdmissionConfirm : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_AdmissionConfirm, PASN_Array); #endif public: H225_ArrayOf_AdmissionConfirm(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_AdmissionConfirm & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_Endpoint // class H225_Endpoint; class H225_ArrayOf_Endpoint : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_Endpoint, PASN_Array); #endif public: H225_ArrayOf_Endpoint(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_Endpoint & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_AuthenticationMechanism // class H235_AuthenticationMechanism; class H225_ArrayOf_AuthenticationMechanism : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_AuthenticationMechanism, PASN_Array); #endif public: H225_ArrayOf_AuthenticationMechanism(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H235_AuthenticationMechanism & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_PASN_ObjectId // class H225_ArrayOf_PASN_ObjectId : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_PASN_ObjectId, PASN_Array); #endif public: H225_ArrayOf_PASN_ObjectId(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; PASN_ObjectId & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_IntegrityMechanism // class H225_IntegrityMechanism; class H225_ArrayOf_IntegrityMechanism : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_IntegrityMechanism, PASN_Array); #endif public: H225_ArrayOf_IntegrityMechanism(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_IntegrityMechanism & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_AddressPattern // class H225_AddressPattern; class H225_ArrayOf_AddressPattern : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_AddressPattern, PASN_Array); #endif public: H225_ArrayOf_AddressPattern(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_AddressPattern & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_H248PackagesDescriptor // class H225_H248PackagesDescriptor; class H225_ArrayOf_H248PackagesDescriptor : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_H248PackagesDescriptor, PASN_Array); #endif public: H225_ArrayOf_H248PackagesDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_H248PackagesDescriptor & operator[](PINDEX i) const; PObject * Clone() const; }; // // RegistrationRequest_language // class H225_RegistrationRequest_language : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_RegistrationRequest_language, PASN_Array); #endif public: H225_RegistrationRequest_language(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; PASN_IA5String & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_RasUsageSpecification // class H225_RasUsageSpecification; class H225_ArrayOf_RasUsageSpecification : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_RasUsageSpecification, PASN_Array); #endif public: H225_ArrayOf_RasUsageSpecification(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_RasUsageSpecification & operator[](PINDEX i) const; PObject * Clone() const; }; // // RegistrationRejectReason_invalidTerminalAliases // class H225_RegistrationRejectReason_invalidTerminalAliases : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_RegistrationRejectReason_invalidTerminalAliases, PASN_Sequence); #endif public: H225_RegistrationRejectReason_invalidTerminalAliases(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_terminalAlias, e_terminalAliasPattern, e_supportedPrefixes }; H225_ArrayOf_AliasAddress m_terminalAlias; H225_ArrayOf_AddressPattern m_terminalAliasPattern; H225_ArrayOf_SupportedPrefix m_supportedPrefixes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_QOSCapability // class MULTIMEDIA_QOSCapability; class H225_ArrayOf_QOSCapability : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_QOSCapability, PASN_Array); #endif public: H225_ArrayOf_QOSCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_QOSCapability & operator[](PINDEX i) const; PObject * Clone() const; }; // // AdmissionConfirm_language // class H225_AdmissionConfirm_language : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_AdmissionConfirm_language, PASN_Array); #endif public: H225_AdmissionConfirm_language(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; PASN_IA5String & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_PartyNumber // class H225_PartyNumber; class H225_ArrayOf_PartyNumber : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_PartyNumber, PASN_Array); #endif public: H225_ArrayOf_PartyNumber(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_PartyNumber & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_BandwidthDetails // class H225_BandwidthDetails; class H225_ArrayOf_BandwidthDetails : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_BandwidthDetails, PASN_Array); #endif public: H225_ArrayOf_BandwidthDetails(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_BandwidthDetails & operator[](PINDEX i) const; PObject * Clone() const; }; // // LocationRequest_language // class H225_LocationRequest_language : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_LocationRequest_language, PASN_Array); #endif public: H225_LocationRequest_language(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; PASN_IA5String & operator[](PINDEX i) const; PObject * Clone() const; }; // // InfoRequestResponse_perCallInfo // class H225_InfoRequestResponse_perCallInfo_subtype; class H225_InfoRequestResponse_perCallInfo : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_InfoRequestResponse_perCallInfo, PASN_Array); #endif public: H225_InfoRequestResponse_perCallInfo(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_InfoRequestResponse_perCallInfo_subtype & operator[](PINDEX i) const; PObject * Clone() const; }; // // ServiceControlIndication_callSpecific // class H225_ServiceControlIndication_callSpecific : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ServiceControlIndication_callSpecific, PASN_Sequence); #endif public: H225_ServiceControlIndication_callSpecific(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_CallIdentifier m_callIdentifier; H225_ConferenceIdentifier m_conferenceID; PASN_Boolean m_answeredCall; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ServiceControlResponse_result // class H225_ServiceControlResponse_result : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ServiceControlResponse_result, PASN_Choice); #endif public: H225_ServiceControlResponse_result(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_started, e_failed, e_stopped, e_notAvailable, e_neededFeatureNotSupported }; PBoolean CreateObject(); PObject * Clone() const; }; // // TransportAddress_ipSourceRoute_route // class H225_TransportAddress_ipSourceRoute_route : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_TransportAddress_ipSourceRoute_route, PASN_Array); #endif public: H225_TransportAddress_ipSourceRoute_route(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; PASN_OctetString & operator[](PINDEX i) const; PObject * Clone() const; }; // // TransportAddress_ipSourceRoute_routing // class H225_TransportAddress_ipSourceRoute_routing : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_TransportAddress_ipSourceRoute_routing, PASN_Choice); #endif public: H225_TransportAddress_ipSourceRoute_routing(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_strict, e_loose }; PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_RTPSession // class H225_RTPSession; class H225_ArrayOf_RTPSession : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_RTPSession, PASN_Array); #endif public: H225_ArrayOf_RTPSession(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_RTPSession & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_TransportChannelInfo // class H225_TransportChannelInfo; class H225_ArrayOf_TransportChannelInfo : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_TransportChannelInfo, PASN_Array); #endif public: H225_ArrayOf_TransportChannelInfo(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_TransportChannelInfo & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_ConferenceIdentifier // class H225_ConferenceIdentifier; class H225_ArrayOf_ConferenceIdentifier : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ArrayOf_ConferenceIdentifier, PASN_Array); #endif public: H225_ArrayOf_ConferenceIdentifier(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_ConferenceIdentifier & operator[](PINDEX i) const; PObject * Clone() const; }; // // InfoRequestResponse_perCallInfo_subtype_pdu // class H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype; class H225_InfoRequestResponse_perCallInfo_subtype_pdu : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_InfoRequestResponse_perCallInfo_subtype_pdu, PASN_Array); #endif public: H225_InfoRequestResponse_perCallInfo_subtype_pdu(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype & operator[](PINDEX i) const; PObject * Clone() const; }; // // Status-UUIE // class H225_Status_UUIE : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_Status_UUIE, PASN_Sequence); #endif public: H225_Status_UUIE(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_tokens, e_cryptoTokens }; H225_ProtocolIdentifier m_protocolIdentifier; H225_CallIdentifier m_callIdentifier; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // StatusInquiry-UUIE // class H225_StatusInquiry_UUIE : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_StatusInquiry_UUIE, PASN_Sequence); #endif public: H225_StatusInquiry_UUIE(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_tokens, e_cryptoTokens }; H225_ProtocolIdentifier m_protocolIdentifier; H225_CallIdentifier m_callIdentifier; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // SetupAcknowledge-UUIE // class H225_SetupAcknowledge_UUIE : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_SetupAcknowledge_UUIE, PASN_Sequence); #endif public: H225_SetupAcknowledge_UUIE(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_tokens, e_cryptoTokens }; H225_ProtocolIdentifier m_protocolIdentifier; H225_CallIdentifier m_callIdentifier; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Notify-UUIE // class H225_Notify_UUIE : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_Notify_UUIE, PASN_Sequence); #endif public: H225_Notify_UUIE(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_tokens, e_cryptoTokens }; H225_ProtocolIdentifier m_protocolIdentifier; H225_CallIdentifier m_callIdentifier; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // VendorIdentifier // class H225_VendorIdentifier : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_VendorIdentifier, PASN_Sequence); #endif public: H225_VendorIdentifier(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_productId, e_versionId, e_enterpriseNumber }; H225_H221NonStandard m_vendor; PASN_OctetString m_productId; PASN_OctetString m_versionId; PASN_ObjectId m_enterpriseNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TunnelledProtocol // class H225_TunnelledProtocol : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_TunnelledProtocol, PASN_Sequence); #endif public: H225_TunnelledProtocol(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_subIdentifier }; H225_TunnelledProtocol_id m_id; PASN_IA5String m_subIdentifier; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NonStandardParameter // class H225_NonStandardParameter : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_NonStandardParameter, PASN_Sequence); #endif public: H225_NonStandardParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_NonStandardIdentifier m_nonStandardIdentifier; PASN_OctetString m_data; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PublicPartyNumber // class H225_PublicPartyNumber : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_PublicPartyNumber, PASN_Sequence); #endif public: H225_PublicPartyNumber(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_PublicTypeOfNumber m_publicTypeOfNumber; H225_NumberDigits m_publicNumberDigits; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PrivatePartyNumber // class H225_PrivatePartyNumber : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_PrivatePartyNumber, PASN_Sequence); #endif public: H225_PrivatePartyNumber(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_PrivateTypeOfNumber m_privateTypeOfNumber; H225_NumberDigits m_privateNumberDigits; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ANSI-41-UIM // class H225_ANSI_41_UIM : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ANSI_41_UIM, PASN_Sequence); #endif public: H225_ANSI_41_UIM(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_imsi, e_min, e_mdn, e_msisdn, e_esn, e_mscid, e_systemMyTypeCode, e_systemAccessType, e_qualificationInformationCode, e_sesn, e_soc }; PASN_IA5String m_imsi; PASN_IA5String m_min; PASN_IA5String m_mdn; PASN_IA5String m_msisdn; PASN_IA5String m_esn; PASN_IA5String m_mscid; H225_ANSI_41_UIM_system_id m_system_id; PASN_OctetString m_systemMyTypeCode; PASN_OctetString m_systemAccessType; PASN_OctetString m_qualificationInformationCode; PASN_IA5String m_sesn; PASN_IA5String m_soc; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IsupPublicPartyNumber // class H225_IsupPublicPartyNumber : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_IsupPublicPartyNumber, PASN_Sequence); #endif public: H225_IsupPublicPartyNumber(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_NatureOfAddress m_natureOfAddress; H225_IsupDigits m_address; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IsupPrivatePartyNumber // class H225_IsupPrivatePartyNumber : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_IsupPrivatePartyNumber, PASN_Sequence); #endif public: H225_IsupPrivatePartyNumber(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_PrivateTypeOfNumber m_privateTypeOfNumber; H225_IsupDigits m_address; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AlternateTransportAddresses // class H225_AlternateTransportAddresses : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_AlternateTransportAddresses, PASN_Sequence); #endif public: H225_AlternateTransportAddresses(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_annexE, e_sctp }; H225_ArrayOf_TransportAddress m_annexE; H225_ArrayOf_TransportAddress m_sctp; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AlternateGK // class H225_AlternateGK : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_AlternateGK, PASN_Sequence); #endif public: H225_AlternateGK(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_gatekeeperIdentifier }; H225_TransportAddress m_rasAddress; H225_GatekeeperIdentifier m_gatekeeperIdentifier; PASN_Boolean m_needToRegister; PASN_Integer m_priority; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AltGKInfo // class H225_AltGKInfo : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_AltGKInfo, PASN_Sequence); #endif public: H225_AltGKInfo(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_ArrayOf_AlternateGK m_alternateGatekeeper; PASN_Boolean m_altGKisPermanent; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // SecurityCapabilities // class H225_SecurityCapabilities : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_SecurityCapabilities, PASN_Sequence); #endif public: H225_SecurityCapabilities(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandard }; H225_NonStandardParameter m_nonStandard; H225_SecurityServiceMode m_encryption; H225_SecurityServiceMode m_authenticaton; H225_SecurityServiceMode m_integrity; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // QseriesOptions // class H225_QseriesOptions : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_QseriesOptions, PASN_Sequence); #endif public: H225_QseriesOptions(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_q932Full; PASN_Boolean m_q951Full; PASN_Boolean m_q952Full; PASN_Boolean m_q953Full; PASN_Boolean m_q955Full; PASN_Boolean m_q956Full; PASN_Boolean m_q957Full; H225_Q954Details m_q954Info; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DataRate // class H225_DataRate : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_DataRate, PASN_Sequence); #endif public: H225_DataRate(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_channelMultiplier }; H225_NonStandardParameter m_nonStandardData; H225_BandWidth m_channelRate; PASN_Integer m_channelMultiplier; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // SupportedPrefix // class H225_SupportedPrefix : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_SupportedPrefix, PASN_Sequence); #endif public: H225_SupportedPrefix(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData }; H225_NonStandardParameter m_nonStandardData; H225_AliasAddress m_prefix; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CapacityReportingSpecification // class H225_CapacityReportingSpecification : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CapacityReportingSpecification, PASN_Sequence); #endif public: H225_CapacityReportingSpecification(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_CapacityReportingSpecification_when m_when; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CallCapacityInfo // class H225_CallCapacityInfo : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CallCapacityInfo, PASN_Sequence); #endif public: H225_CallCapacityInfo(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_voiceGwCallsAvailable, e_h310GwCallsAvailable, e_h320GwCallsAvailable, e_h321GwCallsAvailable, e_h322GwCallsAvailable, e_h323GwCallsAvailable, e_h324GwCallsAvailable, e_t120OnlyGwCallsAvailable, e_t38FaxAnnexbOnlyGwCallsAvailable, e_terminalCallsAvailable, e_mcuCallsAvailable, e_sipGwCallsAvailable }; H225_ArrayOf_CallsAvailable m_voiceGwCallsAvailable; H225_ArrayOf_CallsAvailable m_h310GwCallsAvailable; H225_ArrayOf_CallsAvailable m_h320GwCallsAvailable; H225_ArrayOf_CallsAvailable m_h321GwCallsAvailable; H225_ArrayOf_CallsAvailable m_h322GwCallsAvailable; H225_ArrayOf_CallsAvailable m_h323GwCallsAvailable; H225_ArrayOf_CallsAvailable m_h324GwCallsAvailable; H225_ArrayOf_CallsAvailable m_t120OnlyGwCallsAvailable; H225_ArrayOf_CallsAvailable m_t38FaxAnnexbOnlyGwCallsAvailable; H225_ArrayOf_CallsAvailable m_terminalCallsAvailable; H225_ArrayOf_CallsAvailable m_mcuCallsAvailable; H225_ArrayOf_CallsAvailable m_sipGwCallsAvailable; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CallsAvailable // class H225_CallsAvailable : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CallsAvailable, PASN_Sequence); #endif public: H225_CallsAvailable(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_group, e_carrier }; PASN_Integer m_calls; PASN_IA5String m_group; H225_CarrierInfo m_carrier; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CicInfo // class H225_CicInfo : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CicInfo, PASN_Sequence); #endif public: H225_CicInfo(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_CicInfo_cic m_cic; PASN_OctetString m_pointCode; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // GroupID // class H225_GroupID : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_GroupID, PASN_Sequence); #endif public: H225_GroupID(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_member }; H225_GroupID_member m_member; PASN_IA5String m_group; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ServiceControlSession // class H225_ServiceControlSession : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ServiceControlSession, PASN_Sequence); #endif public: H225_ServiceControlSession(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_contents }; PASN_Integer m_sessionId; H225_ServiceControlDescriptor m_contents; H225_ServiceControlSession_reason m_reason; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RasUsageInfoTypes // class H225_RasUsageInfoTypes : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_RasUsageInfoTypes, PASN_Sequence); #endif public: H225_RasUsageInfoTypes(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_startTime, e_endTime, e_terminationCause }; H225_ArrayOf_NonStandardParameter m_nonStandardUsageTypes; PASN_Null m_startTime; PASN_Null m_endTime; PASN_Null m_terminationCause; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RasUsageSpecification // class H225_RasUsageSpecification : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_RasUsageSpecification, PASN_Sequence); #endif public: H225_RasUsageSpecification(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_callStartingPoint }; H225_RasUsageSpecification_when m_when; H225_RasUsageSpecification_callStartingPoint m_callStartingPoint; H225_RasUsageInfoTypes m_required; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RasUsageInformation // class H225_RasUsageInformation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_RasUsageInformation, PASN_Sequence); #endif public: H225_RasUsageInformation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_alertingTime, e_connectTime, e_endTime }; H225_ArrayOf_NonStandardParameter m_nonStandardUsageFields; H235_TimeStamp m_alertingTime; H235_TimeStamp m_connectTime; H235_TimeStamp m_endTime; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // BandwidthDetails // class H225_BandwidthDetails : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_BandwidthDetails, PASN_Sequence); #endif public: H225_BandwidthDetails(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_sender; PASN_Boolean m_multicast; H225_BandWidth m_bandwidth; H225_TransportChannelInfo m_rtcpAddresses; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CallCreditServiceControl // class H225_CallCreditServiceControl : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CallCreditServiceControl, PASN_Sequence); #endif public: H225_CallCreditServiceControl(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_amountString, e_billingMode, e_callDurationLimit, e_enforceCallDurationLimit, e_callStartingPoint }; PASN_BMPString m_amountString; H225_CallCreditServiceControl_billingMode m_billingMode; PASN_Integer m_callDurationLimit; PASN_Boolean m_enforceCallDurationLimit; H225_CallCreditServiceControl_callStartingPoint m_callStartingPoint; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // GenericData // class H225_GenericData : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_GenericData, PASN_Sequence); #endif public: H225_GenericData(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_parameters }; H225_GenericIdentifier m_id; H225_ArrayOf_EnumeratedParameter m_parameters; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // EnumeratedParameter // class H225_EnumeratedParameter : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_EnumeratedParameter, PASN_Sequence); #endif public: H225_EnumeratedParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_content }; H225_GenericIdentifier m_id; H225_Content m_content; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // FeatureSet // class H225_FeatureSet : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_FeatureSet, PASN_Sequence); #endif public: H225_FeatureSet(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_neededFeatures, e_desiredFeatures, e_supportedFeatures }; PASN_Boolean m_replacementFeatureSet; H225_ArrayOf_FeatureDescriptor m_neededFeatures; H225_ArrayOf_FeatureDescriptor m_desiredFeatures; H225_ArrayOf_FeatureDescriptor m_supportedFeatures; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RTPSession // class H225_RTPSession : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_RTPSession, PASN_Sequence); #endif public: H225_RTPSession(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_multicast, e_bandwidth }; H225_TransportChannelInfo m_rtpAddress; H225_TransportChannelInfo m_rtcpAddress; PASN_PrintableString m_cname; PASN_Integer m_ssrc; PASN_Integer m_sessionId; H225_RTPSession_associatedSessionIds m_associatedSessionIds; PASN_Null m_multicast; H225_BandWidth m_bandwidth; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // GatekeeperConfirm // class H225_GatekeeperConfirm : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_GatekeeperConfirm, PASN_Sequence); #endif public: H225_GatekeeperConfirm(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_gatekeeperIdentifier, e_alternateGatekeeper, e_authenticationMode, e_tokens, e_cryptoTokens, e_algorithmOID, e_integrity, e_integrityCheckValue, e_featureSet, e_genericData, e_assignedGatekeeper, e_rehomingModel }; H225_RequestSeqNum m_requestSeqNum; H225_ProtocolIdentifier m_protocolIdentifier; H225_NonStandardParameter m_nonStandardData; H225_GatekeeperIdentifier m_gatekeeperIdentifier; H225_TransportAddress m_rasAddress; H225_ArrayOf_AlternateGK m_alternateGatekeeper; H235_AuthenticationMechanism m_authenticationMode; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; PASN_ObjectId m_algorithmOID; H225_ArrayOf_IntegrityMechanism m_integrity; H225_ICV m_integrityCheckValue; H225_FeatureSet m_featureSet; H225_ArrayOf_GenericData m_genericData; H225_AlternateGK m_assignedGatekeeper; H225_RehomingModel m_rehomingModel; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // GatekeeperReject // class H225_GatekeeperReject : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_GatekeeperReject, PASN_Sequence); #endif public: H225_GatekeeperReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_gatekeeperIdentifier, e_altGKInfo, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_featureSet, e_genericData }; H225_RequestSeqNum m_requestSeqNum; H225_ProtocolIdentifier m_protocolIdentifier; H225_NonStandardParameter m_nonStandardData; H225_GatekeeperIdentifier m_gatekeeperIdentifier; H225_GatekeeperRejectReason m_rejectReason; H225_AltGKInfo m_altGKInfo; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; H225_FeatureSet m_featureSet; H225_ArrayOf_GenericData m_genericData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RegistrationReject // class H225_RegistrationReject : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_RegistrationReject, PASN_Sequence); #endif public: H225_RegistrationReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_gatekeeperIdentifier, e_altGKInfo, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_featureSet, e_genericData, e_assignedGatekeeper }; H225_RequestSeqNum m_requestSeqNum; H225_ProtocolIdentifier m_protocolIdentifier; H225_NonStandardParameter m_nonStandardData; H225_RegistrationRejectReason m_rejectReason; H225_GatekeeperIdentifier m_gatekeeperIdentifier; H225_AltGKInfo m_altGKInfo; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; H225_FeatureSet m_featureSet; H225_ArrayOf_GenericData m_genericData; H225_AlternateGK m_assignedGatekeeper; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UnregistrationRequest // class H225_UnregistrationRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_UnregistrationRequest, PASN_Sequence); #endif public: H225_UnregistrationRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_endpointAlias, e_nonStandardData, e_endpointIdentifier, e_alternateEndpoints, e_gatekeeperIdentifier, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_reason, e_endpointAliasPattern, e_supportedPrefixes, e_alternateGatekeeper, e_genericData, e_assignedGatekeeper }; H225_RequestSeqNum m_requestSeqNum; H225_ArrayOf_TransportAddress m_callSignalAddress; H225_ArrayOf_AliasAddress m_endpointAlias; H225_NonStandardParameter m_nonStandardData; H225_EndpointIdentifier m_endpointIdentifier; H225_ArrayOf_Endpoint m_alternateEndpoints; H225_GatekeeperIdentifier m_gatekeeperIdentifier; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; H225_UnregRequestReason m_reason; H225_ArrayOf_AddressPattern m_endpointAliasPattern; H225_ArrayOf_SupportedPrefix m_supportedPrefixes; H225_ArrayOf_AlternateGK m_alternateGatekeeper; H225_ArrayOf_GenericData m_genericData; H225_AlternateGK m_assignedGatekeeper; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UnregistrationConfirm // class H225_UnregistrationConfirm : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_UnregistrationConfirm, PASN_Sequence); #endif public: H225_UnregistrationConfirm(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_genericData, e_assignedGatekeeper }; H225_RequestSeqNum m_requestSeqNum; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; H225_ArrayOf_GenericData m_genericData; H225_AlternateGK m_assignedGatekeeper; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UnregistrationReject // class H225_UnregistrationReject : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_UnregistrationReject, PASN_Sequence); #endif public: H225_UnregistrationReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_altGKInfo, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_genericData }; H225_RequestSeqNum m_requestSeqNum; H225_UnregRejectReason m_rejectReason; H225_NonStandardParameter m_nonStandardData; H225_AltGKInfo m_altGKInfo; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; H225_ArrayOf_GenericData m_genericData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AdmissionReject // class H225_AdmissionReject : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_AdmissionReject, PASN_Sequence); #endif public: H225_AdmissionReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_altGKInfo, e_tokens, e_cryptoTokens, e_callSignalAddress, e_integrityCheckValue, e_serviceControl, e_featureSet, e_genericData, e_assignedGatekeeper }; H225_RequestSeqNum m_requestSeqNum; H225_AdmissionRejectReason m_rejectReason; H225_NonStandardParameter m_nonStandardData; H225_AltGKInfo m_altGKInfo; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ArrayOf_TransportAddress m_callSignalAddress; H225_ICV m_integrityCheckValue; H225_ArrayOf_ServiceControlSession m_serviceControl; H225_FeatureSet m_featureSet; H225_ArrayOf_GenericData m_genericData; H225_AlternateGK m_assignedGatekeeper; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // BandwidthReject // class H225_BandwidthReject : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_BandwidthReject, PASN_Sequence); #endif public: H225_BandwidthReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_altGKInfo, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_genericData }; H225_RequestSeqNum m_requestSeqNum; H225_BandRejectReason m_rejectReason; H225_BandWidth m_allowedBandWidth; H225_NonStandardParameter m_nonStandardData; H225_AltGKInfo m_altGKInfo; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; H225_ArrayOf_GenericData m_genericData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // LocationReject // class H225_LocationReject : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_LocationReject, PASN_Sequence); #endif public: H225_LocationReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_altGKInfo, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_featureSet, e_genericData, e_serviceControl }; H225_RequestSeqNum m_requestSeqNum; H225_LocationRejectReason m_rejectReason; H225_NonStandardParameter m_nonStandardData; H225_AltGKInfo m_altGKInfo; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; H225_FeatureSet m_featureSet; H225_ArrayOf_GenericData m_genericData; H225_ArrayOf_ServiceControlSession m_serviceControl; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DisengageReject // class H225_DisengageReject : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_DisengageReject, PASN_Sequence); #endif public: H225_DisengageReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_altGKInfo, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_genericData }; H225_RequestSeqNum m_requestSeqNum; H225_DisengageRejectReason m_rejectReason; H225_NonStandardParameter m_nonStandardData; H225_AltGKInfo m_altGKInfo; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; H225_ArrayOf_GenericData m_genericData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // InfoRequest // class H225_InfoRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_InfoRequest, PASN_Sequence); #endif public: H225_InfoRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_replyAddress, e_callIdentifier, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_uuiesRequested, e_callLinkage, e_usageInfoRequested, e_segmentedResponseSupported, e_nextSegmentRequested, e_capacityInfoRequested, e_genericData, e_assignedGatekeeper }; H225_RequestSeqNum m_requestSeqNum; H225_CallReferenceValue m_callReferenceValue; H225_NonStandardParameter m_nonStandardData; H225_TransportAddress m_replyAddress; H225_CallIdentifier m_callIdentifier; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; H225_UUIEsRequested m_uuiesRequested; H225_CallLinkage m_callLinkage; H225_RasUsageInfoTypes m_usageInfoRequested; PASN_Null m_segmentedResponseSupported; PASN_Integer m_nextSegmentRequested; PASN_Null m_capacityInfoRequested; H225_ArrayOf_GenericData m_genericData; H225_AlternateGK m_assignedGatekeeper; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // InfoRequestAck // class H225_InfoRequestAck : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_InfoRequestAck, PASN_Sequence); #endif public: H225_InfoRequestAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_tokens, e_cryptoTokens, e_integrityCheckValue }; H225_RequestSeqNum m_requestSeqNum; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // InfoRequestNak // class H225_InfoRequestNak : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_InfoRequestNak, PASN_Sequence); #endif public: H225_InfoRequestNak(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_altGKInfo, e_tokens, e_cryptoTokens, e_integrityCheckValue }; H225_RequestSeqNum m_requestSeqNum; H225_NonStandardParameter m_nonStandardData; H225_InfoRequestNakReason m_nakReason; H225_AltGKInfo m_altGKInfo; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NonStandardMessage // class H225_NonStandardMessage : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_NonStandardMessage, PASN_Sequence); #endif public: H225_NonStandardMessage(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_tokens, e_cryptoTokens, e_integrityCheckValue, e_featureSet, e_genericData }; H225_RequestSeqNum m_requestSeqNum; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; H225_FeatureSet m_featureSet; H225_ArrayOf_GenericData m_genericData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UnknownMessageResponse // class H225_UnknownMessageResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_UnknownMessageResponse, PASN_Sequence); #endif public: H225_UnknownMessageResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_tokens, e_cryptoTokens, e_integrityCheckValue, e_messageNotUnderstood }; H225_RequestSeqNum m_requestSeqNum; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; PASN_OctetString m_messageNotUnderstood; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RequestInProgress // class H225_RequestInProgress : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_RequestInProgress, PASN_Sequence); #endif public: H225_RequestInProgress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_tokens, e_cryptoTokens, e_integrityCheckValue }; H225_RequestSeqNum m_requestSeqNum; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; PASN_Integer m_delay; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ResourcesAvailableConfirm // class H225_ResourcesAvailableConfirm : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ResourcesAvailableConfirm, PASN_Sequence); #endif public: H225_ResourcesAvailableConfirm(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_genericData }; H225_RequestSeqNum m_requestSeqNum; H225_ProtocolIdentifier m_protocolIdentifier; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; H225_ArrayOf_GenericData m_genericData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ServiceControlIndication // class H225_ServiceControlIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ServiceControlIndication, PASN_Sequence); #endif public: H225_ServiceControlIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_endpointIdentifier, e_callSpecific, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_featureSet, e_genericData }; H225_RequestSeqNum m_requestSeqNum; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_ServiceControlSession m_serviceControl; H225_EndpointIdentifier m_endpointIdentifier; H225_ServiceControlIndication_callSpecific m_callSpecific; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; H225_FeatureSet m_featureSet; H225_ArrayOf_GenericData m_genericData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ServiceControlResponse // class H225_ServiceControlResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ServiceControlResponse, PASN_Sequence); #endif public: H225_ServiceControlResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_result, e_nonStandardData, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_featureSet, e_genericData }; H225_RequestSeqNum m_requestSeqNum; H225_ServiceControlResponse_result m_result; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; H225_FeatureSet m_featureSet; H225_ArrayOf_GenericData m_genericData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H323-UU-PDU_tunnelledSignallingMessage // class H225_H323_UU_PDU_tunnelledSignallingMessage : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_H323_UU_PDU_tunnelledSignallingMessage, PASN_Sequence); #endif public: H225_H323_UU_PDU_tunnelledSignallingMessage(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_tunnellingRequired, e_nonStandardData }; H225_TunnelledProtocol m_tunnelledProtocolID; H225_ArrayOf_PASN_OctetString m_messageContent; PASN_Null m_tunnellingRequired; H225_NonStandardParameter m_nonStandardData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TransportAddress_ipSourceRoute // class H225_TransportAddress_ipSourceRoute : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_TransportAddress_ipSourceRoute, PASN_Sequence); #endif public: H225_TransportAddress_ipSourceRoute(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_OctetString m_ip; PASN_Integer m_port; H225_TransportAddress_ipSourceRoute_route m_route; H225_TransportAddress_ipSourceRoute_routing m_routing; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RegistrationConfirm_preGrantedARQ // class H225_RegistrationConfirm_preGrantedARQ : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_RegistrationConfirm_preGrantedARQ, PASN_Sequence); #endif public: H225_RegistrationConfirm_preGrantedARQ(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_irrFrequencyInCall, e_totalBandwidthRestriction, e_alternateTransportAddresses, e_useSpecifiedTransport }; PASN_Boolean m_makeCall; PASN_Boolean m_useGKCallSignalAddressToMakeCall; PASN_Boolean m_answerCall; PASN_Boolean m_useGKCallSignalAddressToAnswer; PASN_Integer m_irrFrequencyInCall; H225_BandWidth m_totalBandwidthRestriction; H225_AlternateTransportAddresses m_alternateTransportAddresses; H225_UseSpecifiedTransport m_useSpecifiedTransport; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // StimulusControl // class H225_StimulusControl : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_StimulusControl, PASN_Sequence); #endif public: H225_StimulusControl(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandard, e_isText, e_h248Message }; H225_NonStandardParameter m_nonStandard; PASN_Null m_isText; PASN_OctetString m_h248Message; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceList // class H225_ConferenceList : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ConferenceList, PASN_Sequence); #endif public: H225_ConferenceList(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_conferenceID, e_conferenceAlias, e_nonStandardData }; H225_ConferenceIdentifier m_conferenceID; H225_AliasAddress m_conferenceAlias; H225_NonStandardParameter m_nonStandardData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // GatewayInfo // class H225_GatewayInfo : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_GatewayInfo, PASN_Sequence); #endif public: H225_GatewayInfo(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_protocol, e_nonStandardData }; H225_ArrayOf_SupportedProtocols m_protocol; H225_NonStandardParameter m_nonStandardData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H310Caps // class H225_H310Caps : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_H310Caps, PASN_Sequence); #endif public: H225_H310Caps(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_dataRatesSupported, e_supportedPrefixes }; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_DataRate m_dataRatesSupported; H225_ArrayOf_SupportedPrefix m_supportedPrefixes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H320Caps // class H225_H320Caps : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_H320Caps, PASN_Sequence); #endif public: H225_H320Caps(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_dataRatesSupported, e_supportedPrefixes }; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_DataRate m_dataRatesSupported; H225_ArrayOf_SupportedPrefix m_supportedPrefixes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H321Caps // class H225_H321Caps : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_H321Caps, PASN_Sequence); #endif public: H225_H321Caps(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_dataRatesSupported, e_supportedPrefixes }; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_DataRate m_dataRatesSupported; H225_ArrayOf_SupportedPrefix m_supportedPrefixes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H322Caps // class H225_H322Caps : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_H322Caps, PASN_Sequence); #endif public: H225_H322Caps(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_dataRatesSupported, e_supportedPrefixes }; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_DataRate m_dataRatesSupported; H225_ArrayOf_SupportedPrefix m_supportedPrefixes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H323Caps // class H225_H323Caps : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_H323Caps, PASN_Sequence); #endif public: H225_H323Caps(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_dataRatesSupported, e_supportedPrefixes }; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_DataRate m_dataRatesSupported; H225_ArrayOf_SupportedPrefix m_supportedPrefixes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H324Caps // class H225_H324Caps : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_H324Caps, PASN_Sequence); #endif public: H225_H324Caps(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_dataRatesSupported, e_supportedPrefixes }; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_DataRate m_dataRatesSupported; H225_ArrayOf_SupportedPrefix m_supportedPrefixes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // VoiceCaps // class H225_VoiceCaps : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_VoiceCaps, PASN_Sequence); #endif public: H225_VoiceCaps(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_dataRatesSupported, e_supportedPrefixes }; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_DataRate m_dataRatesSupported; H225_ArrayOf_SupportedPrefix m_supportedPrefixes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // T120OnlyCaps // class H225_T120OnlyCaps : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_T120OnlyCaps, PASN_Sequence); #endif public: H225_T120OnlyCaps(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_dataRatesSupported, e_supportedPrefixes }; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_DataRate m_dataRatesSupported; H225_ArrayOf_SupportedPrefix m_supportedPrefixes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NonStandardProtocol // class H225_NonStandardProtocol : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_NonStandardProtocol, PASN_Sequence); #endif public: H225_NonStandardProtocol(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_dataRatesSupported }; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_DataRate m_dataRatesSupported; H225_ArrayOf_SupportedPrefix m_supportedPrefixes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // T38FaxAnnexbOnlyCaps // class H225_T38FaxAnnexbOnlyCaps : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_T38FaxAnnexbOnlyCaps, PASN_Sequence); #endif public: H225_T38FaxAnnexbOnlyCaps(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_dataRatesSupported }; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_DataRate m_dataRatesSupported; H225_ArrayOf_SupportedPrefix m_supportedPrefixes; H245_DataProtocolCapability m_t38FaxProtocol; H245_T38FaxProfile m_t38FaxProfile; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // SIPCaps // class H225_SIPCaps : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_SIPCaps, PASN_Sequence); #endif public: H225_SIPCaps(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_dataRatesSupported, e_supportedPrefixes }; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_DataRate m_dataRatesSupported; H225_ArrayOf_SupportedPrefix m_supportedPrefixes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // McuInfo // class H225_McuInfo : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_McuInfo, PASN_Sequence); #endif public: H225_McuInfo(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_protocol }; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_SupportedProtocols m_protocol; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TerminalInfo // class H225_TerminalInfo : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_TerminalInfo, PASN_Sequence); #endif public: H225_TerminalInfo(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData }; H225_NonStandardParameter m_nonStandardData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // GatekeeperInfo // class H225_GatekeeperInfo : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_GatekeeperInfo, PASN_Sequence); #endif public: H225_GatekeeperInfo(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData }; H225_NonStandardParameter m_nonStandardData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // FeatureDescriptor // class H225_FeatureDescriptor : public H225_GenericData { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_FeatureDescriptor, H225_GenericData); #endif public: H225_FeatureDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PObject * Clone() const; }; // // CallCapacity // class H225_CallCapacity : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CallCapacity, PASN_Sequence); #endif public: H225_CallCapacity(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_maximumCallCapacity, e_currentCallCapacity }; H225_CallCapacityInfo m_maximumCallCapacity; H225_CallCapacityInfo m_currentCallCapacity; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CircuitIdentifier // class H225_CircuitIdentifier : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CircuitIdentifier, PASN_Sequence); #endif public: H225_CircuitIdentifier(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_cic, e_group, e_carrier }; H225_CicInfo m_cic; H225_GroupID m_group; H225_CarrierInfo m_carrier; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RegistrationConfirm // class H225_RegistrationConfirm : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_RegistrationConfirm, PASN_Sequence); #endif public: H225_RegistrationConfirm(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_terminalAlias, e_gatekeeperIdentifier, e_alternateGatekeeper, e_timeToLive, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_willRespondToIRR, e_preGrantedARQ, e_maintainConnection, e_serviceControl, e_supportsAdditiveRegistration, e_terminalAliasPattern, e_supportedPrefixes, e_usageSpec, e_featureServerAlias, e_capacityReportingSpec, e_featureSet, e_genericData, e_assignedGatekeeper, e_rehomingModel, e_transportQOS }; H225_RequestSeqNum m_requestSeqNum; H225_ProtocolIdentifier m_protocolIdentifier; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_TransportAddress m_callSignalAddress; H225_ArrayOf_AliasAddress m_terminalAlias; H225_GatekeeperIdentifier m_gatekeeperIdentifier; H225_EndpointIdentifier m_endpointIdentifier; H225_ArrayOf_AlternateGK m_alternateGatekeeper; H225_TimeToLive m_timeToLive; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; PASN_Boolean m_willRespondToIRR; H225_RegistrationConfirm_preGrantedARQ m_preGrantedARQ; PASN_Boolean m_maintainConnection; H225_ArrayOf_ServiceControlSession m_serviceControl; PASN_Null m_supportsAdditiveRegistration; H225_ArrayOf_AddressPattern m_terminalAliasPattern; H225_ArrayOf_SupportedPrefix m_supportedPrefixes; H225_ArrayOf_RasUsageSpecification m_usageSpec; H225_AliasAddress m_featureServerAlias; H225_CapacityReportingSpecification m_capacityReportingSpec; H225_FeatureSet m_featureSet; H225_ArrayOf_GenericData m_genericData; H225_AlternateGK m_assignedGatekeeper; H225_RehomingModel m_rehomingModel; H225_TransportQOS m_transportQOS; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // BandwidthRequest // class H225_BandwidthRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_BandwidthRequest, PASN_Sequence); #endif public: H225_BandwidthRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_callType, e_nonStandardData, e_callIdentifier, e_gatekeeperIdentifier, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_answeredCall, e_callLinkage, e_capacity, e_usageInformation, e_bandwidthDetails, e_genericData, e_transportQOS }; H225_RequestSeqNum m_requestSeqNum; H225_EndpointIdentifier m_endpointIdentifier; H225_ConferenceIdentifier m_conferenceID; H225_CallReferenceValue m_callReferenceValue; H225_CallType m_callType; H225_BandWidth m_bandWidth; H225_NonStandardParameter m_nonStandardData; H225_CallIdentifier m_callIdentifier; H225_GatekeeperIdentifier m_gatekeeperIdentifier; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; PASN_Boolean m_answeredCall; H225_CallLinkage m_callLinkage; H225_CallCapacity m_capacity; H225_RasUsageInformation m_usageInformation; H225_ArrayOf_BandwidthDetails m_bandwidthDetails; H225_ArrayOf_GenericData m_genericData; H225_TransportQOS m_transportQOS; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // BandwidthConfirm // class H225_BandwidthConfirm : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_BandwidthConfirm, PASN_Sequence); #endif public: H225_BandwidthConfirm(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_capacity, e_genericData, e_transportQOS }; H225_RequestSeqNum m_requestSeqNum; H225_BandWidth m_bandWidth; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; H225_CallCapacity m_capacity; H225_ArrayOf_GenericData m_genericData; H225_TransportQOS m_transportQOS; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ResourcesAvailableIndicate // class H225_ResourcesAvailableIndicate : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ResourcesAvailableIndicate, PASN_Sequence); #endif public: H225_ResourcesAvailableIndicate(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_capacity, e_genericData }; H225_RequestSeqNum m_requestSeqNum; H225_ProtocolIdentifier m_protocolIdentifier; H225_NonStandardParameter m_nonStandardData; H225_EndpointIdentifier m_endpointIdentifier; H225_ArrayOf_SupportedProtocols m_protocols; PASN_Boolean m_almostOutOfResources; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; H225_CallCapacity m_capacity; H225_ArrayOf_GenericData m_genericData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H323-UU-PDU // class H225_H323_UU_PDU : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_H323_UU_PDU, PASN_Sequence); #endif public: H225_H323_UU_PDU(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_h4501SupplementaryService, e_h245Tunneling, e_h245Control, e_nonStandardControl, e_callLinkage, e_tunnelledSignallingMessage, e_provisionalRespToH245Tunneling, e_stimulusControl, e_genericData }; H225_H323_UU_PDU_h323_message_body m_h323_message_body; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_PASN_OctetString m_h4501SupplementaryService; PASN_Boolean m_h245Tunneling; H225_ArrayOf_PASN_OctetString m_h245Control; H225_ArrayOf_NonStandardParameter m_nonStandardControl; H225_CallLinkage m_callLinkage; H225_H323_UU_PDU_tunnelledSignallingMessage m_tunnelledSignallingMessage; PASN_Null m_provisionalRespToH245Tunneling; H225_StimulusControl m_stimulusControl; H225_ArrayOf_GenericData m_genericData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ReleaseComplete-UUIE // class H225_ReleaseComplete_UUIE : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_ReleaseComplete_UUIE, PASN_Sequence); #endif public: H225_ReleaseComplete_UUIE(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_reason, e_callIdentifier, e_tokens, e_cryptoTokens, e_busyAddress, e_presentationIndicator, e_screeningIndicator, e_capacity, e_serviceControl, e_featureSet }; H225_ProtocolIdentifier m_protocolIdentifier; H225_ReleaseCompleteReason m_reason; H225_CallIdentifier m_callIdentifier; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ArrayOf_AliasAddress m_busyAddress; H225_PresentationIndicator m_presentationIndicator; H225_ScreeningIndicator m_screeningIndicator; H225_CallCapacity m_capacity; H225_ArrayOf_ServiceControlSession m_serviceControl; H225_FeatureSet m_featureSet; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // EndpointType // class H225_EndpointType : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_EndpointType, PASN_Sequence); #endif public: H225_EndpointType(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_vendor, e_gatekeeper, e_gateway, e_mcu, e_terminal, e_set, e_supportedTunnelledProtocols }; H225_NonStandardParameter m_nonStandardData; H225_VendorIdentifier m_vendor; H225_GatekeeperInfo m_gatekeeper; H225_GatewayInfo m_gateway; H225_McuInfo m_mcu; H225_TerminalInfo m_terminal; PASN_Boolean m_mc; PASN_Boolean m_undefinedNode; PASN_BitString m_set; H225_ArrayOf_TunnelledProtocol m_supportedTunnelledProtocols; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CircuitInfo // class H225_CircuitInfo : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CircuitInfo, PASN_Sequence); #endif public: H225_CircuitInfo(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_sourceCircuitID, e_destinationCircuitID, e_genericData }; H225_CircuitIdentifier m_sourceCircuitID; H225_CircuitIdentifier m_destinationCircuitID; H225_ArrayOf_GenericData m_genericData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // GatekeeperRequest // class H225_GatekeeperRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_GatekeeperRequest, PASN_Sequence); #endif public: H225_GatekeeperRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_gatekeeperIdentifier, e_callServices, e_endpointAlias, e_alternateEndpoints, e_tokens, e_cryptoTokens, e_authenticationCapability, e_algorithmOIDs, e_integrity, e_integrityCheckValue, e_supportsAltGK, e_featureSet, e_genericData, e_supportsAssignedGK, e_assignedGatekeeper }; H225_RequestSeqNum m_requestSeqNum; H225_ProtocolIdentifier m_protocolIdentifier; H225_NonStandardParameter m_nonStandardData; H225_TransportAddress m_rasAddress; H225_EndpointType m_endpointType; H225_GatekeeperIdentifier m_gatekeeperIdentifier; H225_QseriesOptions m_callServices; H225_ArrayOf_AliasAddress m_endpointAlias; H225_ArrayOf_Endpoint m_alternateEndpoints; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ArrayOf_AuthenticationMechanism m_authenticationCapability; H225_ArrayOf_PASN_ObjectId m_algorithmOIDs; H225_ArrayOf_IntegrityMechanism m_integrity; H225_ICV m_integrityCheckValue; PASN_Null m_supportsAltGK; H225_FeatureSet m_featureSet; H225_ArrayOf_GenericData m_genericData; PASN_Boolean m_supportsAssignedGK; H225_AlternateGK m_assignedGatekeeper; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RegistrationRequest // class H225_RegistrationRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_RegistrationRequest, PASN_Sequence); #endif public: H225_RegistrationRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_terminalAlias, e_gatekeeperIdentifier, e_alternateEndpoints, e_timeToLive, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_keepAlive, e_endpointIdentifier, e_willSupplyUUIEs, e_maintainConnection, e_alternateTransportAddresses, e_additiveRegistration, e_terminalAliasPattern, e_supportsAltGK, e_usageReportingCapability, e_multipleCalls, e_supportedH248Packages, e_callCreditCapability, e_capacityReportingCapability, e_capacity, e_featureSet, e_genericData, e_restart, e_supportsACFSequences, e_supportsAssignedGK, e_assignedGatekeeper, e_transportQOS, e_language }; H225_RequestSeqNum m_requestSeqNum; H225_ProtocolIdentifier m_protocolIdentifier; H225_NonStandardParameter m_nonStandardData; PASN_Boolean m_discoveryComplete; H225_ArrayOf_TransportAddress m_callSignalAddress; H225_ArrayOf_TransportAddress m_rasAddress; H225_EndpointType m_terminalType; H225_ArrayOf_AliasAddress m_terminalAlias; H225_GatekeeperIdentifier m_gatekeeperIdentifier; H225_VendorIdentifier m_endpointVendor; H225_ArrayOf_Endpoint m_alternateEndpoints; H225_TimeToLive m_timeToLive; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; PASN_Boolean m_keepAlive; H225_EndpointIdentifier m_endpointIdentifier; PASN_Boolean m_willSupplyUUIEs; PASN_Boolean m_maintainConnection; H225_AlternateTransportAddresses m_alternateTransportAddresses; PASN_Null m_additiveRegistration; H225_ArrayOf_AddressPattern m_terminalAliasPattern; PASN_Null m_supportsAltGK; H225_RasUsageInfoTypes m_usageReportingCapability; PASN_Boolean m_multipleCalls; H225_ArrayOf_H248PackagesDescriptor m_supportedH248Packages; H225_CallCreditCapability m_callCreditCapability; H225_CapacityReportingCapability m_capacityReportingCapability; H225_CallCapacity m_capacity; H225_FeatureSet m_featureSet; H225_ArrayOf_GenericData m_genericData; PASN_Null m_restart; PASN_Null m_supportsACFSequences; PASN_Boolean m_supportsAssignedGK; H225_AlternateGK m_assignedGatekeeper; H225_TransportQOS m_transportQOS; H225_RegistrationRequest_language m_language; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AdmissionRequest // class H225_AdmissionRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_AdmissionRequest, PASN_Sequence); #endif public: H225_AdmissionRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_callModel, e_destinationInfo, e_destCallSignalAddress, e_destExtraCallInfo, e_srcCallSignalAddress, e_nonStandardData, e_callServices, e_canMapAlias, e_callIdentifier, e_srcAlternatives, e_destAlternatives, e_gatekeeperIdentifier, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_transportQOS, e_willSupplyUUIEs, e_callLinkage, e_gatewayDataRate, e_capacity, e_circuitInfo, e_desiredProtocols, e_desiredTunnelledProtocol, e_featureSet, e_genericData, e_canMapSrcAlias }; H225_RequestSeqNum m_requestSeqNum; H225_CallType m_callType; H225_CallModel m_callModel; H225_EndpointIdentifier m_endpointIdentifier; H225_ArrayOf_AliasAddress m_destinationInfo; H225_TransportAddress m_destCallSignalAddress; H225_ArrayOf_AliasAddress m_destExtraCallInfo; H225_ArrayOf_AliasAddress m_srcInfo; H225_TransportAddress m_srcCallSignalAddress; H225_BandWidth m_bandWidth; H225_CallReferenceValue m_callReferenceValue; H225_NonStandardParameter m_nonStandardData; H225_QseriesOptions m_callServices; H225_ConferenceIdentifier m_conferenceID; PASN_Boolean m_activeMC; PASN_Boolean m_answerCall; PASN_Boolean m_canMapAlias; H225_CallIdentifier m_callIdentifier; H225_ArrayOf_Endpoint m_srcAlternatives; H225_ArrayOf_Endpoint m_destAlternatives; H225_GatekeeperIdentifier m_gatekeeperIdentifier; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; H225_TransportQOS m_transportQOS; PASN_Boolean m_willSupplyUUIEs; H225_CallLinkage m_callLinkage; H225_DataRate m_gatewayDataRate; H225_CallCapacity m_capacity; H225_CircuitInfo m_circuitInfo; H225_ArrayOf_SupportedProtocols m_desiredProtocols; H225_TunnelledProtocol m_desiredTunnelledProtocol; H225_FeatureSet m_featureSet; H225_ArrayOf_GenericData m_genericData; PASN_Boolean m_canMapSrcAlias; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AdmissionConfirm // class H225_AdmissionConfirm : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_AdmissionConfirm, PASN_Sequence); #endif public: H225_AdmissionConfirm(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_irrFrequency, e_nonStandardData, e_destinationInfo, e_destExtraCallInfo, e_destinationType, e_remoteExtensionAddress, e_alternateEndpoints, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_transportQOS, e_willRespondToIRR, e_uuiesRequested, e_language, e_alternateTransportAddresses, e_useSpecifiedTransport, e_circuitInfo, e_usageSpec, e_supportedProtocols, e_serviceControl, e_multipleCalls, e_featureSet, e_genericData, e_modifiedSrcInfo, e_assignedGatekeeper }; H225_RequestSeqNum m_requestSeqNum; H225_BandWidth m_bandWidth; H225_CallModel m_callModel; H225_TransportAddress m_destCallSignalAddress; PASN_Integer m_irrFrequency; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_AliasAddress m_destinationInfo; H225_ArrayOf_AliasAddress m_destExtraCallInfo; H225_EndpointType m_destinationType; H225_ArrayOf_AliasAddress m_remoteExtensionAddress; H225_ArrayOf_Endpoint m_alternateEndpoints; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; H225_TransportQOS m_transportQOS; PASN_Boolean m_willRespondToIRR; H225_UUIEsRequested m_uuiesRequested; H225_AdmissionConfirm_language m_language; H225_AlternateTransportAddresses m_alternateTransportAddresses; H225_UseSpecifiedTransport m_useSpecifiedTransport; H225_CircuitInfo m_circuitInfo; H225_ArrayOf_RasUsageSpecification m_usageSpec; H225_ArrayOf_SupportedProtocols m_supportedProtocols; H225_ArrayOf_ServiceControlSession m_serviceControl; PASN_Boolean m_multipleCalls; H225_FeatureSet m_featureSet; H225_ArrayOf_GenericData m_genericData; H225_ArrayOf_AliasAddress m_modifiedSrcInfo; H225_AlternateGK m_assignedGatekeeper; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // LocationRequest // class H225_LocationRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_LocationRequest, PASN_Sequence); #endif public: H225_LocationRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_endpointIdentifier, e_nonStandardData, e_sourceInfo, e_canMapAlias, e_gatekeeperIdentifier, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_desiredProtocols, e_desiredTunnelledProtocol, e_featureSet, e_genericData, e_hopCount, e_circuitInfo, e_callIdentifier, e_bandWidth, e_sourceEndpointInfo, e_canMapSrcAlias, e_language }; H225_RequestSeqNum m_requestSeqNum; H225_EndpointIdentifier m_endpointIdentifier; H225_ArrayOf_AliasAddress m_destinationInfo; H225_NonStandardParameter m_nonStandardData; H225_TransportAddress m_replyAddress; H225_ArrayOf_AliasAddress m_sourceInfo; PASN_Boolean m_canMapAlias; H225_GatekeeperIdentifier m_gatekeeperIdentifier; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; H225_ArrayOf_SupportedProtocols m_desiredProtocols; H225_TunnelledProtocol m_desiredTunnelledProtocol; H225_FeatureSet m_featureSet; H225_ArrayOf_GenericData m_genericData; PASN_Integer m_hopCount; H225_CircuitInfo m_circuitInfo; H225_CallIdentifier m_callIdentifier; H225_BandWidth m_bandWidth; H225_ArrayOf_AliasAddress m_sourceEndpointInfo; PASN_Boolean m_canMapSrcAlias; H225_LocationRequest_language m_language; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // LocationConfirm // class H225_LocationConfirm : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_LocationConfirm, PASN_Sequence); #endif public: H225_LocationConfirm(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_destinationInfo, e_destExtraCallInfo, e_destinationType, e_remoteExtensionAddress, e_alternateEndpoints, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_alternateTransportAddresses, e_supportedProtocols, e_multipleCalls, e_featureSet, e_genericData, e_circuitInfo, e_serviceControl, e_modifiedSrcInfo, e_bandWidth }; H225_RequestSeqNum m_requestSeqNum; H225_TransportAddress m_callSignalAddress; H225_TransportAddress m_rasAddress; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_AliasAddress m_destinationInfo; H225_ArrayOf_AliasAddress m_destExtraCallInfo; H225_EndpointType m_destinationType; H225_ArrayOf_AliasAddress m_remoteExtensionAddress; H225_ArrayOf_Endpoint m_alternateEndpoints; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; H225_AlternateTransportAddresses m_alternateTransportAddresses; H225_ArrayOf_SupportedProtocols m_supportedProtocols; PASN_Boolean m_multipleCalls; H225_FeatureSet m_featureSet; H225_ArrayOf_GenericData m_genericData; H225_CircuitInfo m_circuitInfo; H225_ArrayOf_ServiceControlSession m_serviceControl; H225_ArrayOf_AliasAddress m_modifiedSrcInfo; H225_BandWidth m_bandWidth; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DisengageRequest // class H225_DisengageRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_DisengageRequest, PASN_Sequence); #endif public: H225_DisengageRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_callIdentifier, e_gatekeeperIdentifier, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_answeredCall, e_callLinkage, e_capacity, e_circuitInfo, e_usageInformation, e_terminationCause, e_serviceControl, e_genericData }; H225_RequestSeqNum m_requestSeqNum; H225_EndpointIdentifier m_endpointIdentifier; H225_ConferenceIdentifier m_conferenceID; H225_CallReferenceValue m_callReferenceValue; H225_DisengageReason m_disengageReason; H225_NonStandardParameter m_nonStandardData; H225_CallIdentifier m_callIdentifier; H225_GatekeeperIdentifier m_gatekeeperIdentifier; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; PASN_Boolean m_answeredCall; H225_CallLinkage m_callLinkage; H225_CallCapacity m_capacity; H225_CircuitInfo m_circuitInfo; H225_RasUsageInformation m_usageInformation; H225_CallTerminationCause m_terminationCause; H225_ArrayOf_ServiceControlSession m_serviceControl; H225_ArrayOf_GenericData m_genericData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DisengageConfirm // class H225_DisengageConfirm : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_DisengageConfirm, PASN_Sequence); #endif public: H225_DisengageConfirm(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_capacity, e_circuitInfo, e_usageInformation, e_genericData, e_assignedGatekeeper }; H225_RequestSeqNum m_requestSeqNum; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; H225_CallCapacity m_capacity; H225_CircuitInfo m_circuitInfo; H225_RasUsageInformation m_usageInformation; H225_ArrayOf_GenericData m_genericData; H225_AlternateGK m_assignedGatekeeper; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // InfoRequestResponse // class H225_InfoRequestResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_InfoRequestResponse, PASN_Sequence); #endif public: H225_InfoRequestResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_endpointAlias, e_perCallInfo, e_tokens, e_cryptoTokens, e_integrityCheckValue, e_needResponse, e_capacity, e_irrStatus, e_unsolicited, e_genericData }; H225_NonStandardParameter m_nonStandardData; H225_RequestSeqNum m_requestSeqNum; H225_EndpointType m_endpointType; H225_EndpointIdentifier m_endpointIdentifier; H225_TransportAddress m_rasAddress; H225_ArrayOf_TransportAddress m_callSignalAddress; H225_ArrayOf_AliasAddress m_endpointAlias; H225_InfoRequestResponse_perCallInfo m_perCallInfo; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ICV m_integrityCheckValue; PASN_Boolean m_needResponse; H225_CallCapacity m_capacity; H225_InfoRequestResponseStatus m_irrStatus; PASN_Boolean m_unsolicited; H225_ArrayOf_GenericData m_genericData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // InfoRequestResponse_perCallInfo_subtype // class H225_InfoRequestResponse_perCallInfo_subtype : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_InfoRequestResponse_perCallInfo_subtype, PASN_Sequence); #endif public: H225_InfoRequestResponse_perCallInfo_subtype(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_originator, e_audio, e_video, e_data, e_callIdentifier, e_tokens, e_cryptoTokens, e_substituteConfIDs, e_pdu, e_callLinkage, e_usageInformation, e_circuitInfo }; H225_NonStandardParameter m_nonStandardData; H225_CallReferenceValue m_callReferenceValue; H225_ConferenceIdentifier m_conferenceID; PASN_Boolean m_originator; H225_ArrayOf_RTPSession m_audio; H225_ArrayOf_RTPSession m_video; H225_ArrayOf_TransportChannelInfo m_data; H225_TransportChannelInfo m_h245; H225_TransportChannelInfo m_callSignaling; H225_CallType m_callType; H225_BandWidth m_bandWidth; H225_CallModel m_callModel; H225_CallIdentifier m_callIdentifier; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ArrayOf_ConferenceIdentifier m_substituteConfIDs; H225_InfoRequestResponse_perCallInfo_subtype_pdu m_pdu; H225_CallLinkage m_callLinkage; H225_RasUsageInformation m_usageInformation; H225_CircuitInfo m_circuitInfo; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // InfoRequestResponse_perCallInfo_subtype_pdu_subtype // class H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype, PASN_Sequence); #endif public: H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_H323_UU_PDU m_h323pdu; PASN_Boolean m_sent; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H323-UserInformation // class H225_H323_UserInformation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_H323_UserInformation, PASN_Sequence); #endif public: H225_H323_UserInformation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_user_data }; H225_H323_UU_PDU m_h323_uu_pdu; H225_H323_UserInformation_user_data m_user_data; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Alerting-UUIE // class H225_Alerting_UUIE : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_Alerting_UUIE, PASN_Sequence); #endif public: H225_Alerting_UUIE(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_h245Address, e_callIdentifier, e_h245SecurityMode, e_tokens, e_cryptoTokens, e_fastStart, e_multipleCalls, e_maintainConnection, e_alertingAddress, e_presentationIndicator, e_screeningIndicator, e_fastConnectRefused, e_serviceControl, e_capacity, e_featureSet }; H225_ProtocolIdentifier m_protocolIdentifier; H225_EndpointType m_destinationInfo; H225_TransportAddress m_h245Address; H225_CallIdentifier m_callIdentifier; H225_H245Security m_h245SecurityMode; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ArrayOf_PASN_OctetString m_fastStart; PASN_Boolean m_multipleCalls; PASN_Boolean m_maintainConnection; H225_ArrayOf_AliasAddress m_alertingAddress; H225_PresentationIndicator m_presentationIndicator; H225_ScreeningIndicator m_screeningIndicator; PASN_Null m_fastConnectRefused; H225_ArrayOf_ServiceControlSession m_serviceControl; H225_CallCapacity m_capacity; H225_FeatureSet m_featureSet; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CallProceeding-UUIE // class H225_CallProceeding_UUIE : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_CallProceeding_UUIE, PASN_Sequence); #endif public: H225_CallProceeding_UUIE(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_h245Address, e_callIdentifier, e_h245SecurityMode, e_tokens, e_cryptoTokens, e_fastStart, e_multipleCalls, e_maintainConnection, e_fastConnectRefused, e_featureSet }; H225_ProtocolIdentifier m_protocolIdentifier; H225_EndpointType m_destinationInfo; H225_TransportAddress m_h245Address; H225_CallIdentifier m_callIdentifier; H225_H245Security m_h245SecurityMode; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ArrayOf_PASN_OctetString m_fastStart; PASN_Boolean m_multipleCalls; PASN_Boolean m_maintainConnection; PASN_Null m_fastConnectRefused; H225_FeatureSet m_featureSet; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Connect-UUIE // class H225_Connect_UUIE : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_Connect_UUIE, PASN_Sequence); #endif public: H225_Connect_UUIE(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_h245Address, e_callIdentifier, e_h245SecurityMode, e_tokens, e_cryptoTokens, e_fastStart, e_multipleCalls, e_maintainConnection, e_language, e_connectedAddress, e_presentationIndicator, e_screeningIndicator, e_fastConnectRefused, e_serviceControl, e_capacity, e_featureSet }; H225_ProtocolIdentifier m_protocolIdentifier; H225_TransportAddress m_h245Address; H225_EndpointType m_destinationInfo; H225_ConferenceIdentifier m_conferenceID; H225_CallIdentifier m_callIdentifier; H225_H245Security m_h245SecurityMode; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ArrayOf_PASN_OctetString m_fastStart; PASN_Boolean m_multipleCalls; PASN_Boolean m_maintainConnection; H225_Connect_UUIE_language m_language; H225_ArrayOf_AliasAddress m_connectedAddress; H225_PresentationIndicator m_presentationIndicator; H225_ScreeningIndicator m_screeningIndicator; PASN_Null m_fastConnectRefused; H225_ArrayOf_ServiceControlSession m_serviceControl; H225_CallCapacity m_capacity; H225_FeatureSet m_featureSet; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Information-UUIE // class H225_Information_UUIE : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_Information_UUIE, PASN_Sequence); #endif public: H225_Information_UUIE(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_callIdentifier, e_tokens, e_cryptoTokens, e_fastStart, e_fastConnectRefused, e_circuitInfo }; H225_ProtocolIdentifier m_protocolIdentifier; H225_CallIdentifier m_callIdentifier; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ArrayOf_PASN_OctetString m_fastStart; PASN_Null m_fastConnectRefused; H225_CircuitInfo m_circuitInfo; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Setup-UUIE // class H225_Setup_UUIE : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_Setup_UUIE, PASN_Sequence); #endif public: H225_Setup_UUIE(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_h245Address, e_sourceAddress, e_destinationAddress, e_destCallSignalAddress, e_destExtraCallInfo, e_destExtraCRV, e_callServices, e_sourceCallSignalAddress, e_remoteExtensionAddress, e_callIdentifier, e_h245SecurityCapability, e_tokens, e_cryptoTokens, e_fastStart, e_mediaWaitForConnect, e_canOverlapSend, e_endpointIdentifier, e_multipleCalls, e_maintainConnection, e_connectionParameters, e_language, e_presentationIndicator, e_screeningIndicator, e_serviceControl, e_symmetricOperationRequired, e_capacity, e_circuitInfo, e_desiredProtocols, e_neededFeatures, e_desiredFeatures, e_supportedFeatures, e_parallelH245Control, e_additionalSourceAddresses, e_hopCount }; H225_ProtocolIdentifier m_protocolIdentifier; H225_TransportAddress m_h245Address; H225_ArrayOf_AliasAddress m_sourceAddress; H225_EndpointType m_sourceInfo; H225_ArrayOf_AliasAddress m_destinationAddress; H225_TransportAddress m_destCallSignalAddress; H225_ArrayOf_AliasAddress m_destExtraCallInfo; H225_ArrayOf_CallReferenceValue m_destExtraCRV; PASN_Boolean m_activeMC; H225_ConferenceIdentifier m_conferenceID; H225_Setup_UUIE_conferenceGoal m_conferenceGoal; H225_QseriesOptions m_callServices; H225_CallType m_callType; H225_TransportAddress m_sourceCallSignalAddress; H225_AliasAddress m_remoteExtensionAddress; H225_CallIdentifier m_callIdentifier; H225_ArrayOf_H245Security m_h245SecurityCapability; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ArrayOf_PASN_OctetString m_fastStart; PASN_Boolean m_mediaWaitForConnect; PASN_Boolean m_canOverlapSend; H225_EndpointIdentifier m_endpointIdentifier; PASN_Boolean m_multipleCalls; PASN_Boolean m_maintainConnection; H225_Setup_UUIE_connectionParameters m_connectionParameters; H225_Setup_UUIE_language m_language; H225_PresentationIndicator m_presentationIndicator; H225_ScreeningIndicator m_screeningIndicator; H225_ArrayOf_ServiceControlSession m_serviceControl; PASN_Null m_symmetricOperationRequired; H225_CallCapacity m_capacity; H225_CircuitInfo m_circuitInfo; H225_ArrayOf_SupportedProtocols m_desiredProtocols; H225_ArrayOf_FeatureDescriptor m_neededFeatures; H225_ArrayOf_FeatureDescriptor m_desiredFeatures; H225_ArrayOf_FeatureDescriptor m_supportedFeatures; H225_ArrayOf_PASN_OctetString m_parallelH245Control; H225_ArrayOf_ExtendedAliasAddress m_additionalSourceAddresses; PASN_Integer m_hopCount; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Facility-UUIE // class H225_Facility_UUIE : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_Facility_UUIE, PASN_Sequence); #endif public: H225_Facility_UUIE(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_alternativeAddress, e_alternativeAliasAddress, e_conferenceID, e_callIdentifier, e_destExtraCallInfo, e_remoteExtensionAddress, e_tokens, e_cryptoTokens, e_conferences, e_h245Address, e_fastStart, e_multipleCalls, e_maintainConnection, e_fastConnectRefused, e_serviceControl, e_circuitInfo, e_featureSet, e_destinationInfo, e_h245SecurityMode }; H225_ProtocolIdentifier m_protocolIdentifier; H225_TransportAddress m_alternativeAddress; H225_ArrayOf_AliasAddress m_alternativeAliasAddress; H225_ConferenceIdentifier m_conferenceID; H225_FacilityReason m_reason; H225_CallIdentifier m_callIdentifier; H225_ArrayOf_AliasAddress m_destExtraCallInfo; H225_AliasAddress m_remoteExtensionAddress; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ArrayOf_ConferenceList m_conferences; H225_TransportAddress m_h245Address; H225_ArrayOf_PASN_OctetString m_fastStart; PASN_Boolean m_multipleCalls; PASN_Boolean m_maintainConnection; PASN_Null m_fastConnectRefused; H225_ArrayOf_ServiceControlSession m_serviceControl; H225_CircuitInfo m_circuitInfo; H225_FeatureSet m_featureSet; H225_EndpointType m_destinationInfo; H225_H245Security m_h245SecurityMode; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Progress-UUIE // class H225_Progress_UUIE : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_Progress_UUIE, PASN_Sequence); #endif public: H225_Progress_UUIE(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_h245Address, e_h245SecurityMode, e_tokens, e_cryptoTokens, e_fastStart, e_multipleCalls, e_maintainConnection, e_fastConnectRefused }; H225_ProtocolIdentifier m_protocolIdentifier; H225_EndpointType m_destinationInfo; H225_TransportAddress m_h245Address; H225_CallIdentifier m_callIdentifier; H225_H245Security m_h245SecurityMode; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; H225_ArrayOf_PASN_OctetString m_fastStart; PASN_Boolean m_multipleCalls; PASN_Boolean m_maintainConnection; PASN_Null m_fastConnectRefused; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Endpoint // class H225_Endpoint : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_Endpoint, PASN_Sequence); #endif public: H225_Endpoint(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_aliasAddress, e_callSignalAddress, e_rasAddress, e_endpointType, e_tokens, e_cryptoTokens, e_priority, e_remoteExtensionAddress, e_destExtraCallInfo, e_alternateTransportAddresses, e_circuitInfo, e_featureSet }; H225_NonStandardParameter m_nonStandardData; H225_ArrayOf_AliasAddress m_aliasAddress; H225_ArrayOf_TransportAddress m_callSignalAddress; H225_ArrayOf_TransportAddress m_rasAddress; H225_EndpointType m_endpointType; H225_ArrayOf_ClearToken m_tokens; H225_ArrayOf_CryptoH323Token m_cryptoTokens; PASN_Integer m_priority; H225_ArrayOf_AliasAddress m_remoteExtensionAddress; H225_ArrayOf_AliasAddress m_destExtraCallInfo; H225_AlternateTransportAddresses m_alternateTransportAddresses; H225_CircuitInfo m_circuitInfo; H225_FeatureSet m_featureSet; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H225_H #endif // if ! H323_DISABLE_H225 // End of h225.h h323plus/include/t120proto.h0000644000175000017500000000607711015524150014461 0ustar markmark/* * t120proto.h * * T.120 protocol handler * * Open Phone Abstraction Library * * Copyright (c) 2001 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: t120proto.h,v $ * Revision 1.2 2008/05/23 11:20:08 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:50:50 shorne * First commit of h323plus * * Revision 1.4 2002/09/16 01:14:15 robertj * Added #define so can select if #pragma interface/implementation is used on * platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan. * * Revision 1.3 2002/09/03 05:44:46 robertj * Normalised the multi-include header prevention ifdef/define symbol. * Added globally accessible functions for media format name. * Added standard TCP port constant. * * Revision 1.2 2002/02/01 01:47:02 robertj * Some more fixes for T.120 channel establishment, more to do! * * Revision 1.1 2001/07/17 04:44:29 robertj * Partial implementation of T.120 and T.38 logical channels. * */ #ifndef __OPAL_T120PROTO_H #define __OPAL_T120PROTO_H #ifdef P_USE_PRAGMA #pragma interface #endif #include "mediafmt.h" class H323Transport; class X224; class MCS_ConnectMCSPDU; class MCS_DomainMCSPDU; /////////////////////////////////////////////////////////////////////////////// /**This class describes the T.120 protocol handler. */ class OpalT120Protocol : public PObject { PCLASSINFO(OpalT120Protocol, PObject); public: enum { DefaultTcpPort = 1503 }; static OpalMediaFormat const MediaFormat; /**@name Construction */ //@{ /**Create a new protocol handler. */ OpalT120Protocol(); //@} /**@name Operations */ //@{ /**Handle the origination of a T.120 connection. */ virtual PBoolean Originate( H323Transport & transport ); /**Handle the origination of a T.120 connection. */ virtual PBoolean Answer( H323Transport & transport ); /**Handle incoming T.120 connection. If returns FALSE, then the reading loop should be terminated. */ virtual PBoolean HandleConnect( const MCS_ConnectMCSPDU & pdu ); /**Handle incoming T.120 packet. If returns FALSE, then the reading loop should be terminated. */ virtual PBoolean HandleDomain( const MCS_DomainMCSPDU & pdu ); //@} }; #endif // __OPAL_T120PROTO_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/gkclient.h0000644000175000017500000003076011705317173014516 0ustar markmark/* * gkclient.h * * Gatekeeper client protocol handler * * Open H323 Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * iFace, Inc. http://www.iface.com * * Contributor(s): ______________________________________. * * $ Id $ * */ #ifndef __OPAL_GKCLIENT_H #define __OPAL_GKCLIENT_H #include "h323.h" #include "h225ras.h" #include "h235auth.h" #ifdef P_USE_PRAGMA #pragma interface #endif #ifdef H323_H460 class H460_FeatureSet; #endif class H225_ArrayOf_AliasAddress; class H225_H323_UU_PDU; class H225_AlternateGK; class H225_ArrayOf_AlternateGK; class H225_ArrayOf_ServiceControlSession; /////////////////////////////////////////////////////////////////////////////// /**This class embodies the H.225.0 RAS protocol to gatekeepers. */ class H323Gatekeeper : public H225_RAS { PCLASSINFO(H323Gatekeeper, H225_RAS); public: /**@name Construction */ //@{ /**Create a new gatekeeper. */ H323Gatekeeper( H323EndPoint & endpoint, ///< Endpoint gatekeeper is associated with. H323Transport * transport ///< Transport over which gatekeepers communicates. ); /**Destroy gatekeeper. */ ~H323Gatekeeper(); //@} /**@name Overrides from H225_RAS */ //@{ PBoolean OnReceiveGatekeeperConfirm(const H225_GatekeeperConfirm & gcf); PBoolean OnReceiveGatekeeperReject(const H225_GatekeeperReject & grj); PBoolean OnReceiveRegistrationConfirm(const H225_RegistrationConfirm & rcf); PBoolean OnReceiveRegistrationReject(const H225_RegistrationReject & rrj); PBoolean OnReceiveUnregistrationRequest(const H225_UnregistrationRequest & urq); PBoolean OnReceiveUnregistrationConfirm(const H225_UnregistrationConfirm & ucf); PBoolean OnReceiveUnregistrationReject(const H225_UnregistrationReject & urj); PBoolean OnReceiveAdmissionConfirm(const H225_AdmissionConfirm & acf); PBoolean OnReceiveAdmissionReject(const H225_AdmissionReject & arj); PBoolean OnReceiveDisengageRequest(const H225_DisengageRequest & drq); PBoolean OnReceiveBandwidthConfirm(const H225_BandwidthConfirm & bcf); PBoolean OnReceiveBandwidthRequest(const H225_BandwidthRequest & brq); PBoolean OnReceiveInfoRequest(const H225_InfoRequest & irq); PBoolean OnReceiveServiceControlIndication(const H225_ServiceControlIndication &); PBoolean SendServiceControlIndication(); void OnSendGatekeeperRequest(H225_GatekeeperRequest & grq); void OnSendAdmissionRequest(H225_AdmissionRequest & arq); PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet & features, PBoolean) const; void OnReceiveFeatureSet(unsigned, const H225_FeatureSet & features) const; #if H323_H460 void DisableFeatureSet(int msgtype) const; H460_FeatureSet & GetFeatures(); #endif //@} /**@name Protocol operations */ //@{ /**Discover a gatekeeper on the local network. */ PBoolean DiscoverAny(); /**Discover a gatekeeper on the local network. If the identifier string is empty then the first gatekeeper to respond to a broadcast is used. */ PBoolean DiscoverByName( const PString & identifier ///< Gatekeeper identifier to find ); /**Discover a gatekeeper on the local network. If the address string is empty then the first gatekeeper to respond to a broadcast is used. */ PBoolean DiscoverByAddress( const H323TransportAddress & address ///< Address of gatekeeper. ); /**Discover a gatekeeper on the local network. Combination of DiscoverByName() and DiscoverByAddress(). */ PBoolean DiscoverByNameAndAddress( const PString & identifier, const H323TransportAddress & address ); /**Register with gatekeeper. */ PBoolean RegistrationRequest( PBoolean autoReregister = TRUE ///< Automatic register on unregister ); /**Unregister with gatekeeper. */ PBoolean UnregistrationRequest( int reason ///< Reason for unregistration ); /**Location request to gatekeeper. */ PBoolean LocationRequest( const PString & alias, ///< Alias name we wish to find. H323TransportAddress & address ///< Resultant transport address. ); /**Location request to gatekeeper. */ PBoolean LocationRequest( const PStringList & aliases, ///< Alias names we wish to find. H323TransportAddress & address ///< Resultant transport address. ); struct AdmissionResponse { AdmissionResponse(); unsigned rejectReason; ///< Reject reason if returns FALSE PBoolean gatekeeperRouted; ///< Flag for call is through gk PINDEX endpointCount; ///< Number of endpoints that can be returned H323TransportAddress * transportAddress; ///< Transport address or remote endpoint. PBYTEArray * accessTokenData; ///< iNow Gatekeeper Access Token data H225_ArrayOf_AliasAddress * aliasAddresses; ///< DestinationInfo to use in SETUP if not empty H225_ArrayOf_AliasAddress * destExtraCallInfo; ///< DestinationInfo to use in SETUP if not empty }; /**Admission request to gatekeeper. */ PBoolean AdmissionRequest( H323Connection & connection, ///< Connection we wish to change. AdmissionResponse & response, ///< Response parameters to ARQ PBoolean ignorePreGrantedARQ = FALSE ///< Flag to force ARQ to be sent ); /**Disengage request to gatekeeper. */ PBoolean DisengageRequest( const H323Connection & connection, ///< Connection we wish admitted. unsigned reason ///< Reason code for disengage ); /**Bandwidth request to gatekeeper. */ PBoolean BandwidthRequest( H323Connection & connection, ///< Connection we wish to change. unsigned requestedBandwidth ///< New bandwidth wanted in 0.1kbps ); /**Send an unsolicited info response to the gatekeeper. */ void InfoRequestResponse(); /**Send an unsolicited info response to the gatekeeper. */ void InfoRequestResponse( const H323Connection & connection ///< Connection to send info about ); /**Send an unsolicited info response to the gatekeeper. */ void InfoRequestResponse( const H323Connection & connection, ///< Connection to send info about const H225_H323_UU_PDU & pdu, ///< PDU that was sent or received PBoolean sent ///< Flag for PDU was sent or received ); #ifdef H323_H248 /**Handle incoming service control session information. */ virtual void OnServiceControlSessions( const H225_ArrayOf_ServiceControlSession & serviceControl, H323Connection * connection ); #endif //@} /**@name Member variable access */ //@{ /**Determine if the endpoint has discovered the gatekeeper. */ PBoolean IsDiscoveryComplete() const { return discoveryComplete; } /**Determine if the endpoint is registered with the gatekeeper. */ PBoolean IsRegistered() const { return registrationFailReason == RegistrationSuccessful; } /** Force the client to reregister with gatekeeper (used with H.460 features) */ void ReRegisterNow(); enum RegistrationFailReasons { RegistrationSuccessful, UnregisteredLocally, UnregisteredByGatekeeper, GatekeeperLostRegistration, InvalidListener, DuplicateAlias, SecurityDenied, TransportError, NeededFeatureNotSupported, NumRegistrationFailReasons, RegistrationRejectReasonMask = 0x8000 }; /**Get the registration fail reason. */ RegistrationFailReasons GetRegistrationFailReason() const { return registrationFailReason; } /**Get the gatekeeper name. The gets the name of the gatekeeper. It will be of the form id@address where id is the gatekeeperIdentifier and address is the transport address used. If the gatekeeperIdentifier is empty the '@' is not included and only the transport is shown. The transport is minimised also, with the type removed if IP is used and the :port removed if the default port is used. */ PString GetName() const; /** Get the endpoint identifier */ const PASN_BMPString & GetEndpointIdentifier() const { return endpointIdentifier; } /**Set the H.235 password in the gatekeeper. If no username is present then it will default to the endpoint local user name (ie first alias). */ void SetPassword( const PString & password, ///< New password const PString & username = PString() ///< Username for password ); /* * Return the call signalling address for the gatekeeper (if present) */ H323TransportAddress GetGatekeeperRouteAddress() const { return gkRouteAddress; } //@} protected: PBoolean StartDiscovery(const H323TransportAddress & address); unsigned SetupGatekeeperRequest(H323RasPDU & request); void Connect(const H323TransportAddress & address, const PString & gatekeeperIdentifier); PDECLARE_NOTIFIER(PThread, H323Gatekeeper, MonitorMain); PDECLARE_NOTIFIER(PTimer, H323Gatekeeper, TickleMonitor); void RegistrationTimeToLive(); void SetInfoRequestRate( const PTimeInterval & rate ); void ClearInfoRequestRate(); H225_InfoRequestResponse & BuildInfoRequestResponse( H323RasPDU & response, unsigned seqNum ); PBoolean SendUnsolicitedIRR( H225_InfoRequestResponse & irr, H323RasPDU & response ); void SetAlternates( const H225_ArrayOf_AlternateGK & alts, PBoolean permanent ); void SetAssignedGatekeeper( const H225_AlternateGK & gk ); PBoolean GetAssignedGatekeeper( H225_AlternateGK & gk ); virtual PBoolean MakeRequest( Request & request ); PBoolean MakeRequestWithReregister( Request & request, unsigned unregisteredTag ); // Gatekeeper registration state variables PBoolean discoveryComplete; PASN_BMPString endpointIdentifier; PString localId; RegistrationFailReasons registrationFailReason; PMutex RegisterMutex; class AlternateInfo : public PObject { PCLASSINFO(AlternateInfo, PObject); public: AlternateInfo(const H225_AlternateGK & alt); ~AlternateInfo(); H225_AlternateGK GetAlternate(); Comparison Compare(const PObject & obj); void PrintOn(ostream & strm) const; H323TransportAddress rasAddress; PString gatekeeperIdentifier; unsigned priority; enum { NoRegistrationNeeded, NeedToRegister, Register, IsRegistered, RegistrationFailed } registrationState; private: // Disable copy constructor and assignment AlternateInfo(const AlternateInfo &); AlternateInfo & operator=(const AlternateInfo &); }; PSortedList alternates; PBoolean alternatePermanent; PSemaphore requestMutex; H235Authenticators authenticators; AlternateInfo * assignedGK; enum { RequireARQ, PregrantARQ, PreGkRoutedARQ } pregrantMakeCall, pregrantAnswerCall; H323TransportAddress gkRouteAddress; // Gatekeeper operation variables PBoolean autoReregister; PBoolean reregisterNow; PTimer timeToLive; PBoolean requiresDiscovery; PTimer infoRequestRate; PBoolean willRespondToIRR; PThread * monitor; PBoolean monitorStop; PSyncPoint monitorTickle; #ifdef H323_H248 H323Dictionary serviceControlSessions; #endif #ifdef H323_H460 H460_FeatureSet * features; #endif }; H323LIST(H323GatekeeperList, H323Gatekeeper); #endif // __OPAL_GKCLIENT_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/h235pluginmgr.h0000644000175000017500000001120311634344141015307 0ustar markmark/* * h235pluginmgr.h * * h235 Implementation for the h323plus library. * * Copyright (c) 2006 ISVO (Asia) Pte Ltd. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * Contributor(s): ______________________________________. * * $Id: h235pluginmgr.h,v 1.3 2011/09/15 09:41:53 shorne Exp $ * * */ #include #include #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #ifdef _MSC_VER #pragma warning(disable:4100) #endif ////////////////////////////////////////////////////////////////////////////////////// struct Pluginh235_Definition; class H235PluginAuthenticator : public H235Authenticator { PCLASSINFO(H235PluginAuthenticator, H235Authenticator); public: H235PluginAuthenticator(Pluginh235_Definition * _def); H235_ClearToken * CreateClearToken(); H225_CryptoH323Token * CreateCryptoToken(); PBoolean Finalise( PBYTEArray & rawPDU ); const char * GetName() const { return h235name; }; void SetName(PString & name) { h235name = name; }; ValidationResult ValidateClearToken( const H235_ClearToken & clearToken ); ValidationResult ValidateCryptoToken( const H225_CryptoH323Token & cryptoToken, const PBYTEArray & rawPDU ); PBoolean IsCapability( const H235_AuthenticationMechanism & mechansim, const PASN_ObjectId & algorithmOID ); PBoolean SetCapability( H225_ArrayOf_AuthenticationMechanism & mechansims, H225_ArrayOf_PASN_ObjectId & algorithmOIDs ); PBoolean UseGkAndEpIdentifiers() const; PBoolean IsSecuredPDU( unsigned rasPDU, PBoolean received ) const; PBoolean IsSecuredSignalPDU( unsigned signalPDU, PBoolean received ) const; PBoolean IsActive() const; const PString & GetRemoteId() const; void SetRemoteId(const PString & id); const PString & GetLocalId() const; void SetLocalId(const PString & id); const PString & GetPassword() const; void SetPassword(const PString & pw); int GetTimestampGracePeriod() const; void SetTimestampGracePeriod(int grace); Application GetApplication(); protected: PString h235name; unsigned type; Pluginh235_Definition * def; }; ///////////////////////////////////////////////////////////////////////////////////// class h235PluginDeviceManager : public PPluginModuleManager { PCLASSINFO(h235PluginDeviceManager, PPluginModuleManager); public: h235PluginDeviceManager(PPluginManager * pluginMgr = NULL); ~h235PluginDeviceManager(); void OnLoadPlugin(PDynaLink & dll, INT code); virtual void OnShutdown(); static void Bootstrap(); virtual PBoolean Registerh235(unsigned int count, void * _h235List); virtual PBoolean Unregisterh235(unsigned int count, void * _h235List); void CreateH235Authenticator(Pluginh235_Definition * h235authenticator); }; static PFactory::Worker h323PluginCodecManagerFactory("h235PluginDeviceManager", true); /////////////////////////////////////////////////////////////////////////////// typedef PFactory h235Factory; #define H235_REGISTER(cls, h235Name) static h235Factory::Worker cls##Factory(h235Name, true); \ #define H235_DEFINE_AUTHENTICATOR(cls, h235Name, fmtName) \ class cls : public H235PluginAuthenticator { \ public: \ cls() : H235PluginAuthenticator() { } \ PString GetName() const \ { return fmtName; } \ }; \ H235_REGISTER(cls, capName) \ ///////////////////////////////////////////////////////////////////////////// h323plus/include/h323con.h0000644000175000017500000035277211652540116014103 0ustar markmark/* * h323con.h * * H.323 protocol handler * * H323plus Library * * Copyright (c) 1998-2001 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Contributor(s): ______________________________________. * * $Id: h323con.h,v 1.67 2011/10/28 14:46:38 shorne Exp $ * */ #ifndef __OPAL_H323CON_H #define __OPAL_H323CON_H #ifdef P_USE_PRAGMA #pragma interface #endif #ifdef P_DTMF #include #endif #include "openh323buildopts.h" #if H323_H235 #include "h235/h235caps.h" #else #include "h323caps.h" #endif #include "transports.h" #include "channels.h" #include "guid.h" #include "h235auth.h" #ifdef H323_H235 #include "h235/h2356.h" #endif #include "h225.h" #ifdef H323_SIGNAL_AGGREGATE #include /** This class defines a handle suitable for use with the aggregation system */ class H323AggregatedH2x5Handle : public PAggregatedHandle { PCLASSINFO(H323AggregatedH2x5Handle, PAggregatedHandle) public: H323AggregatedH2x5Handle(H323Transport & _transport, H323Connection & _connection); ~H323AggregatedH2x5Handle(); PAggregatorFDList_t GetFDs(); PBoolean OnRead(); virtual PBoolean HandlePDU(PBoolean ok, PBYTEArray & pdu) = 0; PTimeInterval GetTimeout() { return transport.GetReadTimeout(); } protected: PAggregatorFD fd; H323Transport & transport; H323Connection & connection; PBYTEArray pduBuffer; PINDEX pduDataLen; }; #endif #ifdef H323_H248 #include "svcctrl.h" #endif /* The following classes have forward references to avoid including the VERY large header files for H225 and H245. If an application requires access to the protocol classes they can include them, but for simple usage their inclusion can be avoided. */ class PPER_Stream; class H225_EndpointType; class H225_TransportAddress; class H225_ArrayOf_PASN_OctetString; class H225_ProtocolIdentifier; class H225_AdmissionRequest; class H225_AdmissionReject; class H225_AdmissionConfirm; class H225_InfoRequestResponse; class H225_DisengageRequest; class H225_FeatureSet; class H225_Setup_UUIE; class H225_ArrayOf_ServiceControlSession; class H225_ServiceControlSession_reason; class H245_TerminalCapabilitySet; class H245_TerminalCapabilitySetReject; class H245_OpenLogicalChannel; class H245_OpenLogicalChannelAck; class H245_TransportAddress; class H245_UserInputIndication; class H245_RequestMode; class H245_RequestModeAck; class H245_RequestModeReject; class H245_ModeDescription; class H245_ArrayOf_ModeDescription; class H245_SendTerminalCapabilitySet; class H245_MultiplexCapability; class H245_FlowControlCommand; class H245_MiscellaneousCommand; class H245_MiscellaneousIndication; class H245_JitterIndication; class H245_ConferenceRequest; class H245_ConferenceResponse; class H245_ConferenceCommand; class H245_ConferenceIndication; class H245_GenericMessage; class H245_ArrayOf_GenericParameter; class H323SignalPDU; class H323ControlPDU; class H323_RTP_UDP; class H235Authenticators; class H245NegMasterSlaveDetermination; class H245NegTerminalCapabilitySet; class H245NegLogicalChannels; class H245NegRequestMode; class H245NegRoundTripDelay; #ifdef H323_H450 class H450xDispatcher; class H4502Handler; class H4503Handler; class H4504Handler; class H4506Handler; class H45011Handler; #endif #ifdef H323_T120 class OpalT120Protocol; #endif #ifdef H323_T38 class OpalT38Protocol; #endif #ifdef H323_H224 class OpalH224Handler; class OpalH281Handler; #endif class OpalRFC2833; class OpalRFC2833Info; #ifdef H323_H460 class H460_FeatureSet; #endif #if H323_FILE class H323FileTransferHandler; class H323FileTransferList; #endif /////////////////////////////////////////////////////////////////////////////// /**This class represents a particular H323 connection between two endpoints. There are at least two threads in use, this one to look after the signalling channel, an another to look after the control channel. There would then be additional threads created for each data channel created by the control channel protocol thread. */ class H323Connection : public PObject { PCLASSINFO(H323Connection, PObject); friend class AggregatedH225Handle; friend class AggregatedH245Handle; public: /**@name Construction */ //@{ enum Options { FastStartOptionDisable = 0x0001, FastStartOptionEnable = 0x0002, FastStartOptionMask = 0x0003, H245TunnelingOptionDisable = 0x0004, H245TunnelingOptionEnable = 0x0008, H245TunnelingOptionMask = 0x000c, H245inSetupOptionDisable = 0x0010, H245inSetupOptionEnable = 0x0020, H245inSetupOptionMask = 0x0030, DetectInBandDTMFOptionDisable= 0x0040, DetectInBandDTMFOptionEnable = 0x0080, DetectInBandDTMFOptionMask = 0x00c0, #ifdef H323_RTP_AGGREGATE RTPAggregationDisable = 0x0100, RTPAggregationEnable = 0x0200, RTPAggregationMask = 0x0300, #endif #ifdef H323_SIGNAL_AGGREGATE SignallingAggregationDisable = 0x0400, SignallingAggregationEnable = 0x0800, SignallingAggregationMask = 0x0c00 #endif }; /**Create a new connection. */ H323Connection( H323EndPoint & endpoint, ///< H323 End Point object unsigned callReference, ///< Call reference unsigned options = 0 ///< Connection option bits ); /**Destroy the connection */ ~H323Connection(); /**Lock connection. When any thread wants exclusive use of the connection, it must use this function to gain the mutex. Note this is not a simple mutex to allow for the rather complicated mechanism for preventing deadlocks in associated threads to the connection (eg Q.931 reader thread). Returns FALSE if the lock was not obtainable due to the connection being shut down. */ PBoolean Lock(); /**Try to lock connection. When the H323EndPoint::FindConnectionWithLock() function is used to gain access to a connection object, this is called to prevent it from being closed and deleted by the background threads. Note this is an internal function and it is not expected an application would use it. Returns 0 if the lock was not obtainable due to the connection being shut down, -1 if it was not available, and +1 if lock is obtained. */ int TryLock(); /**Unlock connection. If the H323EndPoint::FindConnectionWithLock() function is used to gain access to a connection object, this MUST be called to allow it to subsequently be closed and disposed of. */ void Unlock(); /** * called when an ARQ needs to be sent to a gatekeeper. This allows the connection * to change or check fields in the ARQ before it is sent. * * By default, this calls the matching function on the endpoint */ virtual void OnSendARQ( H225_AdmissionRequest & arq ); /** * called when an ACF is received from a gatekeeper. * * By default, this calls the matching function on the endpoint */ virtual void OnReceivedACF( const H225_AdmissionConfirm & acf ); /** * called when an ARJ is received from a gatekeeper. * * By default, this calls the matching function on the endpoint */ virtual void OnReceivedARJ( const H225_AdmissionReject & arj ); /** * called when an IRR needs to be sent to a gatekeeper. This allows the connection * to change or check fields in the IRR before it is sent. * * By default, this does nothing */ virtual void OnSendIRR( H225_InfoRequestResponse & irr ) const; /** * called when an DRQ needs to be sent to a gatekeeper. This allows the connection * to change or check fields in the DRQ before it is sent. * * By default, this does nothing */ virtual void OnSendDRQ( H225_DisengageRequest & drq ) const; /** Called when a connection is established. Default behaviour is to call H323EndPoint::OnConnectionEstablished */ virtual void OnEstablished(); /** Called when a connection is cleared, just after CleanUpOnCallEnd() Default behaviour is to call H323EndPoint::OnConnectionCleared */ virtual void OnCleared(); /**Determine if the call has been connected. This indicates that Q.931 CONNECT has occurred. This usually means in PSTN gateway environments that a charge will be made for the call. This is not quite the same as IsEstablished() as that indicates the call is connected AND there is media open. */ PBoolean IsConnected() const { return connectionState == HasExecutedSignalConnect || connectionState == EstablishedConnection; } /**Determine if the call has been established. This can be used in combination with the GetCallEndReason() function to determine the three main phases of a call, call setup, call established and call cleared. */ PBoolean IsEstablished() const { return connectionState == EstablishedConnection; } /**Call clearance reasons. NOTE: if anything is added to this, you also need to add the field to the tables in h323.cxx and h323pdu.cxx. */ enum CallEndReason { EndedByLocalUser, ///< Local endpoint application cleared call EndedByNoAccept, ///< Local endpoint did not accept call OnIncomingCall()=FALSE EndedByAnswerDenied, ///< Local endpoint declined to answer call EndedByRemoteUser, ///< Remote endpoint application cleared call EndedByRefusal, ///< Remote endpoint refused call EndedByNoAnswer, ///< Remote endpoint did not answer in required time EndedByCallerAbort, ///< Remote endpoint stopped calling EndedByTransportFail, ///< Transport error cleared call EndedByConnectFail, ///< Transport connection failed to establish call EndedByGatekeeper, ///< Gatekeeper has cleared call EndedByNoUser, ///< Call failed as could not find user (in GK) EndedByNoBandwidth, ///< Call failed as could not get enough bandwidth EndedByCapabilityExchange,///< Could not find common capabilities EndedByCallForwarded, ///< Call was forwarded using FACILITY message EndedBySecurityDenial, ///< Call failed a security check and was ended EndedByLocalBusy, ///< Local endpoint busy EndedByLocalCongestion, ///< Local endpoint congested EndedByRemoteBusy, ///< Remote endpoint busy EndedByRemoteCongestion, ///< Remote endpoint congested EndedByUnreachable, ///< Could not reach the remote party EndedByNoEndPoint, ///< The remote party is not running an endpoint EndedByHostOffline, ///< The remote party host off line EndedByTemporaryFailure, ///< The remote failed temporarily app may retry EndedByQ931Cause, ///< The remote ended the call with unmapped Q.931 cause code EndedByDurationLimit, ///< Call cleared due to an enforced duration limit EndedByInvalidConferenceID, ///< Call cleared due to invalid conference ID EndedByOSPRefusal, ///< Call cleared as OSP server unable or unwilling to route EndedByInvalidNumberFormat, ///< Call cleared as number was invalid format EndedByUnspecifiedProtocolError, ///< Call cleared due to unspecified protocol error EndedByNoFeatureSupport, ///< Call ended due to Feature not being present. NumCallEndReasons }; #if PTRACING friend ostream & operator<<(ostream & o, CallEndReason r); #endif /**Get the call clearand reason for this connection shutting down. Note that this function is only generally useful in the H323EndPoint::OnConnectionCleared() function. This is due to the connection not being cleared before that, and the object not even exiting after that. If the call is still active then this will return NumCallEndReasons. */ CallEndReason GetCallEndReason() const { return callEndReason; } /**Set the call clearance reason. An application should have no cause to use this function. It is present for the H323EndPoint::ClearCall() function to set the clearance reason. */ virtual void SetCallEndReason( CallEndReason reason, ///< Reason for clearance of connection. PSyncPoint * sync = NULL ///< syncpoint to use for synchronous destruction ); /**Clear a current connection. This hangs up the connection to a remote endpoint. It actually just calls the endpoint version of the ClearCall() function to avoid possible multithreading race conditions. */ virtual PBoolean ClearCall( CallEndReason reason = EndedByLocalUser ///< Reason for call clearing ); /**Clear a current connection, synchronously */ virtual PBoolean ClearCallSynchronous( PSyncPoint * sync, CallEndReason reason = EndedByLocalUser ///< Reason for call clearing ); /**Clean up the call clearance of the connection. This function will do any internal cleaning up and waiting on background threads that may be using the connection object. After this returns it is then safe to delete the object. An application will not typically use this function as it is used by the H323EndPoint during a clear call. */ virtual void CleanUpOnCallEnd(); //@} /**@name Signalling Channel */ //@{ /**Attach a transport to this connection as the signalling channel. */ virtual void AttachSignalChannel( const PString & token, ///< New token to use to identify connection H323Transport * channel, ///< Transport for the PDU's PBoolean answeringCall ///< Flag for if incoming/outgoing call. ); /**Change the transport (signalling channel) for this connection. */ virtual void ChangeSignalChannel( H323Transport * channel ///< New Transport for PDU's ); /**Write a PDU to the signalling channel. */ PBoolean WriteSignalPDU( H323SignalPDU & pdu ///< PDU to write. ); /**Handle reading PDU's from the signalling channel. This is an internal function and is unlikely to be used by applications. */ virtual void HandleSignallingChannel(); /**Handle the situation where the call signalling channel fails return TRUE to keep the call alive / False to drop the call */ virtual PBoolean HandleSignalChannelFailure() { return FALSE; } /**Handle the situation where the media channel fails return TRUE to keep the call alive / False to drop the call */ virtual PBoolean HandleControlChannelFailure() { return FALSE; } /**Handle a single received PDU from the signalling channel. This is an internal function and is unlikely to be used by applications. */ virtual PBoolean HandleReceivedSignalPDU(PBoolean readStatus, H323SignalPDU & pdu); /**Handle a single received PDU from the control channel. This is an internal function and is unlikely to be used by applications. */ virtual PBoolean HandleReceivedControlPDU(PBoolean readStatus, PPER_Stream & strm); /**Handle PDU from the signalling channel. This is an internal function and is unlikely to be used by applications. */ virtual PBoolean HandleSignalPDU( H323SignalPDU & pdu ///< PDU to handle. ); /**Handle Control PDU tunnelled in the signalling channel. This is an internal function and is unlikely to be used by applications. */ virtual void HandleTunnelPDU( H323SignalPDU * txPDU ///< PDU tunnel response into. ); /**Handle an incoming Q931 setup PDU. The default behaviour is to do the handshaking operation calling a few virtuals at certain moments in the sequence. If FALSE is returned the connection is aborted and a Release Complete PDU is sent. */ virtual PBoolean OnReceivedSignalSetup( const H323SignalPDU & pdu ///< Received setup PDU ); /**Handle an incoming Q931 setup acknowledge PDU. If FALSE is returned the connection is aborted and a Release Complete PDU is sent. The default behaviour does nothing. */ virtual PBoolean OnReceivedSignalSetupAck( const H323SignalPDU & pdu ///< Received setup PDU ); /**Handle an incoming Q931 information PDU. If FALSE is returned the connection is aborted and a Release Complete PDU is sent. The default behaviour does nothing. */ virtual PBoolean OnReceivedSignalInformation( const H323SignalPDU & pdu ///< Received setup PDU ); /**Handle an incoming Q931 call proceeding PDU. If FALSE is returned the connection is aborted and a Release Complete PDU is sent. The default behaviour checks for hH245Address field and if present starts the separate H245 channel, if successful or not present it returns TRUE. */ virtual PBoolean OnReceivedCallProceeding( const H323SignalPDU & pdu ///< Received call proceeding PDU ); /**Handle an incoming Q931 progress PDU. If FALSE is returned the connection is aborted and a Release Complete PDU is sent. The default behaviour checks for hH245Address field and if present starts the separate H245 channel, if successful or not present it returns TRUE. */ virtual PBoolean OnReceivedProgress( const H323SignalPDU & pdu ///< Received call proceeding PDU ); /**Handle an incoming Q931 alerting PDU. If FALSE is returned the connection is aborted and a Release Complete PDU is sent. The default behaviour obtains the display name and calls OnAlerting(). */ virtual PBoolean OnReceivedAlerting( const H323SignalPDU & pdu ///< Received Alerting PDU ); /**Handle an incoming Q931 connect PDU. If FALSE is returned the connection is aborted and a Release Complete PDU is sent. The default behaviour checks for hH245Address field and if present starts the separate H245 channel, if successful it returns TRUE. If not present and there is no H245Tunneling then it returns FALSE. */ virtual PBoolean OnReceivedSignalConnect( const H323SignalPDU & pdu ///< Received connect PDU ); /**Handle an incoming Q931 facility PDU. If FALSE is returned the connection is aborted and a Release Complete PDU is sent. The default behaviour checks for hH245Address field and if present starts the separate H245 channel, if successful or not present it returns TRUE. */ virtual PBoolean OnReceivedFacility( const H323SignalPDU & pdu ///< Received Facility PDU ); /**Handle an incoming Q931 Notify PDU. If FALSE is returned the connection is aborted and a Release Complete PDU is sent. The default behaviour simply returns TRUE. */ virtual PBoolean OnReceivedSignalNotify( const H323SignalPDU & pdu ///< Received Notify PDU ); /**Handle an incoming Q931 Status PDU. If FALSE is returned the connection is aborted and a Release Complete PDU is sent. The default behaviour simply returns TRUE. */ virtual PBoolean OnReceivedSignalStatus( const H323SignalPDU & pdu ///< Received Status PDU ); /**Handle an incoming Q931 Status Enquiry PDU. If FALSE is returned the connection is aborted and a Release Complete PDU is sent. The default behaviour sends a Q931 Status PDU back. */ virtual PBoolean OnReceivedStatusEnquiry( const H323SignalPDU & pdu ///< Received Status Enquiry PDU ); /**Handle an incoming Q931 Release Complete PDU. The default behaviour calls Clear() using reason code based on the Release Complete Cause field and the current connection state. */ virtual void OnReceivedReleaseComplete( const H323SignalPDU & pdu ///< Received Release Complete PDU ); /**This function is called from the HandleSignallingChannel() function for unhandled PDU types. If FALSE is returned the connection is aborted and a Release Complete PDU is sent. The default behaviour returns TRUE. */ virtual PBoolean OnUnknownSignalPDU( const H323SignalPDU & pdu ///< Received PDU ); /**Call back for incoming call. This function is called from the OnReceivedSignalSetup() function before it sends the Alerting PDU. It gives an opportunity for an application to alter the reply before transmission to the other endpoint. If FALSE is returned the connection is aborted and a Release Complete PDU is sent. The default behaviour calls the endpoint function of the same name. */ virtual PBoolean OnIncomingCall( const H323SignalPDU & setupPDU, ///< Received setup PDU H323SignalPDU & alertingPDU ///< Alerting PDU to send ); virtual PBoolean OnIncomingCall( const H323SignalPDU & setupPDU, ///< Received setup PDU H323SignalPDU & alertingPDU, ///< Alerting PDU to send CallEndReason & reason ///< reason for call refusal, if returned false ); /**Forward incoming call to specified address. This would typically be called from within the OnIncomingCall() function when an application wishes to redirct an unwanted incoming call. The return value is TRUE if the call is to be forwarded, FALSE otherwise. Note that if the call is forwarded the current connection is cleared with the ended call code of EndedByCallForwarded. */ virtual PBoolean ForwardCall( const PString & forwardParty ///< Party to forward call to ); /**Forward call to MC. */ virtual PBoolean RouteCallToMC( const PString & forwardParty, ///< Party to forward call to const H225_ConferenceIdentifier & confID /// conference to join ); #ifdef H323_H450 /**Initiate the transfer of an existing call (connection) to a new remote party using H.450.2. This sends a Call Transfer Initiate Invoke message from the A-Party (transferring endpoint) to the B-Party (transferred endpoint). */ void TransferCall( const PString & remoteParty, ///< Remote party to transfer the existing call to const PString & callIdentity = PString::Empty() ///< Call Identity of secondary call if present ); /**Transfer the call through consultation so the remote party in the primary call is connected to the called party in the second call using H.450.2. This sends a Call Transfer Identify Invoke message from the A-Party (transferring endpoint) to the C-Party (transferred-to endpoint). */ void ConsultationTransfer( const PString & primaryCallToken ///< Primary call ); /**Called from H.450 OnReceivedInitiateReturnError Error in Transfer */ virtual void OnReceivedInitiateReturnError(); /**Handle the reception of a callTransferSetupInvoke APDU whilst a secondary call exists. This method checks whether the secondary call is still waiting for a callTransferSetupInvoke APDU and proceeds to clear the call if the call identies match. This is an internal function and it is not expected the user will call it directly. */ virtual void HandleConsultationTransfer( const PString & callIdentity, /**Call Identity of secondary call received in SETUP Message. */ H323Connection & incoming ///< Connection upon which SETUP PDU was received. ); /**Determine whether this connection is being transferred. */ PBoolean IsTransferringCall() const; /**Determine whether this connection is the result of a transferred call. */ PBoolean IsTransferredCall() const; /**Handle the transfer of an existing connection to a new remote. This is an internal function and it is not expected the user will call it directly. */ virtual void HandleTransferCall( const PString & token, const PString & identity ); /**Get transfer invoke ID dureing trasfer. This is an internal function and it is not expected the user will call it directly. */ int GetCallTransferInvokeId(); /**Handle the failure of a call transfer operation at the Transferred Endpoint. This method is used to handle the following transfer failure cases that can occur at the Transferred Endpoint. The cases are: Reception of an Admission Reject Reception of a callTransferSetup return error APDU. Expiry of Call Transfer timer CT-T4. */ virtual void HandleCallTransferFailure( const int returnError ///< Failure reason code ); /**Store the passed token on the current connection's H4502Handler. This is an internal function and it is not expected the user will call it directly. */ void SetAssociatedCallToken( const PString & token ///< Associated token ); /**Callback to indicate a successful transfer through consultation. The paramter passed is a reference to the existing connection between the Transferring endpoint and Transferred-to endpoint. */ virtual void OnConsultationTransferSuccess( H323Connection & secondaryCall ///< Secondary call for consultation ); /**Set the call linkage associated with the current call. This is used to include the callToken which is requesting this connection. ie. Call Transfer. This information can be used for billing systems to correctly charge the correct party for Transferred or forwarded calls. */ virtual void SetCallLinkage( H225_AdmissionRequest & arq ///< Admission Request PDU ); /**Set the call linkage associated with the current call. This is used to detect the callToken which has requesting this connection. ie. Call Transfer. This information can be used for billing systems to correctly charge the correct party for Transferred or forwarded calls. */ virtual void GetCallLinkage( const H225_AdmissionRequest & arq ///< Admission Request PDU ); /**Retrieves the redirecting number(s) and additional call diversion information (div. counter and div. reason) as of an incoming redirected call, currently only according to H.450.3 call diversion supplementary service */ PBoolean GetRedirectingNumber( PString &originalCalledNr, PString &lastDivertingNr, int &divCounter, int &originaldivReason, int &divReason); /**Place the call on hold, suspending all media channels (H.450.4). Note it is the responsibility of the application layer to delete the MOH Channel if music on hold is provided to the remote endpoint. So far only Local Hold has been implemented. */ void HoldCall( PBoolean localHold ///< true for Local Hold, false for Remote Hold ); /**Retrieve the call from hold, activating all media channels (H.450.4). This method examines the call hold state and performs the necessary actions required to retrieve a Near-end or Remote-end call on hold. NOTE: Only Local Hold is implemented so far. */ void RetrieveCall(); /**Set the alternative Audio media channel. This channel can be used to provide Media On Hold (MOH) for a near end call hold operation or to provide Recorded Voice Anouncements (RVAs). If this method is not called before a call hold operation is attempted, no Audio media on hold will be provided for the held endpoint. */ void SetHoldMedia( PChannel * audioChannel ); /**Set the alternative Video media channel. This channel can be used to provide Video On Hold (VOH) for a near end call hold operation or to provide a fake or onhold video. If this method is not called before a call hold operation is attempted, no Video media on hold will be provided for the held endpoint. */ void SetVideoHoldMedia( PChannel * videoChannel ); /**CallBack when Call is put on hold. This allows the device to release the Local Input device to be used for another active connection */ virtual PChannel * OnCallHold(PBoolean IsEncoder, ///* Direction unsigned sessionId, ///* Session Id unsigned bufferSize, ///* Size of each sound buffer (Audio) PChannel * channel); ///* Channel being Held /**CallBack when call is about to be retrieved. This allows the Local Input device to be reattached to the Held Channel. */ virtual PChannel * OnCallRetrieve(PBoolean IsEncoder, ///* Direction unsigned sessionId, ///* Session Id unsigned bufferSize, ///* Size of each sound buffer (Audio) PChannel * channel); ///* Channel being Held /**Determine if Meadia On Hold is enabled. */ PBoolean IsMediaOnHold() const; /**Determine if held. */ PBoolean IsLocalHold() const; /**Determine if held. */ PBoolean IsRemoteHold() const; /**Determine if the current call is held or in the process of being held. */ PBoolean IsCallOnHold() const; /**Begin a call intrusion request. Calls h45011handler->IntrudeCall where SS pdu is added to Call Setup message. */ virtual void IntrudeCall( unsigned capabilityLevel ); /**Handle an incoming call instrusion request. Calls h45011handler->AwaitSetupResponse where we set Handler state to CI-Wait-Ack */ virtual void HandleIntrudeCall( const PString & token, const PString & identity ); /**Set flag indicating call intrusion. Used to set a flag when intrusion occurs and to determine if connection is created for Call Intrusion. This flag is used when we should decide whether to Answer the call or to Close it. */ void SetCallIntrusion() { isCallIntrusion = TRUE; } PBoolean IsCallIntrusion() { return isCallIntrusion; } /**Get Call Intrusion Protection Level of the local endpoint. */ unsigned GetLocalCallIntrusionProtectionLevel() { return callIntrusionProtectionLevel; } /**Get Call Intrusion Protection Level of other endpoints that we are in connection with. */ virtual PBoolean GetRemoteCallIntrusionProtectionLevel( const PString & callToken, unsigned callIntrusionProtectionLevel ); virtual void SetIntrusionImpending(); virtual void SetForcedReleaseAccepted(); virtual void SetIntrusionNotAuthorized(); /**Send a Call Waiting indication message to the remote endpoint using H.450.6. The second paramter is used to indicate to the calling user how many additional users are "camped on" the called user. A value of zero indicates to the calling user that he/she is the only user attempting to reach the busy called user. */ void SendCallWaitingIndication( const unsigned nbOfAddWaitingCalls = 0 ///< number of additional waiting calls at the served user ); #endif // H323_H450 enum AnswerCallResponse { AnswerCallNow, ///< Answer the call continuing with the connection. AnswerCallDenied, ///< Refuse the call sending a release complete. AnswerCallPending, ///< Send an Alerting PDU and wait for AnsweringCall() AnswerCallDeferred, ///< As for AnswerCallPending but does not send Alerting PDU AnswerCallAlertWithMedia, ///< As for AnswerCallPending but starts media channels AnswerCallDeferredWithMedia, ///< As for AnswerCallDeferred but starts media channels AnswerCallDeniedByInvalidCID, ///< As for AnswerCallDenied but returns e_invalidCID AnswerCallNowWithAlert, NumAnswerCallResponses }; #if PTRACING friend ostream & operator<<(ostream & o, AnswerCallResponse s); #endif /**Call back for answering an incoming call. This function is used for an application to control the answering of incoming calls. It is usually used to indicate the immediate action to be taken in answering the call. It is called from the OnReceivedSignalSetup() function before it sends the Alerting or Connect PDUs. It also gives an opportunity for an application to alter the Connect PDU reply before transmission to the remote endpoint. If AnswerCallNow is returned then the H.323 protocol proceeds with the connection. If AnswerCallDenied is returned the connection is aborted and a Release Complete PDU is sent. If AnswerCallPending is returned then the Alerting PDU is sent and the protocol negotiations are paused until the AnsweringCall() function is called. Finally, if AnswerCallDeferred is returned then no Alerting PDU is sent, but the system still waits as in the AnswerCallPending response. Note this function should not block for any length of time. If the decision to answer the call may take some time eg waiting for a user to pick up the phone, then AnswerCallPending or AnswerCallDeferred should be returned. The default behaviour calls the endpoint function of the same name which in turn will return AnswerCallNow. */ virtual AnswerCallResponse OnAnswerCall( const PString & callerName, ///< Name of caller const H323SignalPDU & setupPDU, ///< Received setup PDU H323SignalPDU & connectPDU ///< Connect PDU to send. ); /**Indicate the result of answering an incoming call. This should only be called if the OnAnswerCall() callback function has returned a AnswerCallPending or AnswerCallDeferred response. Note sending further AnswerCallPending responses via this function will have the result of an Alerting PDU being sent to the remote endpoint. In this way multiple Alerting PDUs may be sent. Sending a AnswerCallDeferred response would have no effect. */ void AnsweringCall( AnswerCallResponse response ///< Answer response to incoming call ); /**Send first PDU in signalling channel. This function does the signalling handshaking for establishing a connection to a remote endpoint. The transport (TCP/IP) for the signalling channel is assumed to be already created. This function will then do the SetRemoteAddress() and Connect() calls o establish the transport. Returns the error code for the call failure reason or NumCallEndReasons if the call was successful to that point in the protocol. */ virtual CallEndReason SendSignalSetup( const PString & alias, ///< Name of remote party const H323TransportAddress & address ///< Address of destination ); /**Adjust setup PDU being sent on initialisation of signal channel. This function is called from the SendSignalSetup() function before it sends the Setup PDU. It gives an opportunity for an application to alter the request before transmission to the other endpoint. The default behaviour simply returns TRUE. Note that this is usually overridden by the transport dependent descendent class, eg the H323ConnectionTCP descendent fills in the destCallSignalAddress field with the TCP/IP data. Therefore if you override this in your application make sure you call the ancestor function. */ virtual PBoolean OnSendSignalSetup( H323SignalPDU & setupPDU ///< Setup PDU to send ); /**Adjust call proceeding PDU being sent. This function is called from the OnReceivedSignalSetup() function before it sends the Call Proceeding PDU. It gives an opportunity for an application to alter the request before transmission to the other endpoint. If this function returns FALSE then the Call Proceeding PDU is not sent at all. The default behaviour simply returns TRUE. */ virtual PBoolean OnSendCallProceeding( H323SignalPDU & callProceedingPDU ///< Call Proceeding PDU to send ); /**Call back for Release Complete being sent. This allows an application to add things to the release complete before it is sent to the remote endpoint. Returning FALSE will prevent the release complete from being sent. Note that this would be very unusual as this is called when the connection is being cleaned up. There will be no second chance to send the PDU and it must be sent. The default behaviour simply returns TRUE. */ virtual PBoolean OnSendReleaseComplete( H323SignalPDU & releaseCompletePDU ///< Release Complete PDU to send ); /**Call back for remote party being alerted. This function is called from the SendSignalSetup() function after it receives the optional Alerting PDU from the remote endpoint. That is when the remote "phone" is "ringing". If FALSE is returned the connection is aborted and a Release Complete PDU is sent. The default behaviour calls the endpoint function of the same name. */ virtual PBoolean OnAlerting( const H323SignalPDU & alertingPDU, ///< Received Alerting PDU const PString & user ///< Username of remote endpoint ); /**This function is called when insufficient digits have been entered. This supports overlapped dialling so that a call can begin when it is not known how many more digits are to be entered in a phone number. It is expected that the application will override this function. It should be noted that the application should not block in the function but only indicate to whatever other thread is gathering digits that more are required and that thread should call SendMoreDigits(). If FALSE is returned the connection is aborted and a Release Complete PDU is sent. The default behaviour simply returns FALSE. */ virtual PBoolean OnInsufficientDigits(); /**This function is called when sufficient digits have been entered. This supports overlapped dialling so that a call can begin when it is not known how many more digits are to be entered in a phone number. The digits parameter is appended to the existing remoteNumber member variable and the call is retried. If FALSE is returned the connection is aborted and a Release Complete PDU is sent. The default behaviour simply returns TRUE. */ virtual void SendMoreDigits( const PString & digits ///< Extra digits ); /**This function is called from the SendSignalSetup() function after it receives the Connect PDU from the remote endpoint, but before it attempts to open the control channel. If FALSE is returned the connection is aborted and a Release Complete PDU is sent. The default behaviour calls H323EndPoint::OnOutgoingCall */ virtual PBoolean OnOutgoingCall( const H323SignalPDU & connectPDU ///< Received Connect PDU ); /**Send an the acknowldege of a fast start. This function is called when the fast start channels provided to this connection by the original SETUP PDU have been selected and opened and need to be sent back to the remote endpoint. If FALSE is returned then no fast start has been acknowledged, possibly due to no common codec in fast start request. The default behaviour uses OnSelectLogicalChannels() to find a pair of channels and adds then to the provided PDU. */ virtual PBoolean SendFastStartAcknowledge( H225_ArrayOf_PASN_OctetString & array ///< Array of H245_OpenLogicalChannel ); /**Handle the acknowldege of a fast start. This function is called from one of a number of functions after it receives a PDU from the remote endpoint that has a fastStart field. It is in response to a request for a fast strart from the local endpoint. If FALSE is returned the connection is aborted and a Release Complete PDU is sent. The default behaviour parses the provided array and starts the channels acknowledged in it. */ virtual PBoolean HandleFastStartAcknowledge( const H225_ArrayOf_PASN_OctetString & array ///< Array of H245_OpenLogicalChannel ); /**Start a separate H245 channel. This function is called from one of a number of functions when it needs to create the h245 channel for the remote endpoint to connect back to. If FALSE is returned the connection is aborted and a Release Complete PDU is sent. */ virtual PBoolean StartControlChannel(); /**Start a separate H245 channel. This function is called from one of a number of functions after it receives a PDU from the remote endpoint that has a h245Address field. If FALSE is returned the connection is aborted and a Release Complete PDU is sent. The default behaviour checks to see if it is a known transport and creates a corresponding H323Transport decendent for the control channel. */ virtual PBoolean StartControlChannel( const H225_TransportAddress & h245Address ///< H245 address ); //@} /**@name Control Channel */ //@{ /**Write a PDU to the control channel. If there is no control channel open then this will tunnel the PDU into the signalling channel. */ PBoolean WriteControlPDU( const H323ControlPDU & pdu ); /**Start control channel negotiations. */ virtual PBoolean StartControlNegotiations( PBoolean renegotiate = FALSE ///< Force renogotiation of TCS/MSD ); /**Handle reading data on the control channel. */ virtual void HandleControlChannel(); /**Handle incoming data on the control channel. This decodes the data stream into a PDU and calls HandleControlPDU(). If FALSE is returned the connection is aborted. The default behaviour returns TRUE. */ virtual PBoolean HandleControlData( PPER_Stream & strm ); /**Handle incoming PDU's on the control channel. Dispatches them to the various virtuals off this class. If FALSE is returned the connection is aborted. The default behaviour returns TRUE. */ virtual PBoolean HandleControlPDU( const H323ControlPDU & pdu ); /**This function is called from the HandleControlPDU() function for unhandled PDU types. If FALSE is returned the connection is aborted and a Release Complete PDU is sent. The default behaviour returns TRUE. The default behaviour send a FunctioNotUnderstood indication back to the sender, and returns TRUE to continue operation. */ virtual PBoolean OnUnknownControlPDU( const H323ControlPDU & pdu ///< Received PDU ); /**Handle incoming request PDU's on the control channel. Dispatches them to the various virtuals off this class. */ virtual PBoolean OnH245Request( const H323ControlPDU & pdu ///< Received PDU ); /**Handle incoming response PDU's on the control channel. Dispatches them to the various virtuals off this class. */ virtual PBoolean OnH245Response( const H323ControlPDU & pdu ///< Received PDU ); /**Handle incoming command PDU's on the control channel. Dispatches them to the various virtuals off this class. */ virtual PBoolean OnH245Command( const H323ControlPDU & pdu ///< Received PDU ); /**Handle incoming indication PDU's on the control channel. Dispatches them to the various virtuals off this class. */ virtual PBoolean OnH245Indication( const H323ControlPDU & pdu ///< Received PDU ); /**Handle H245 command to send terminal capability set. */ virtual PBoolean OnH245_SendTerminalCapabilitySet( const H245_SendTerminalCapabilitySet & pdu ///< Received PDU ); /**Handle H245 command to control flow control. This function calls OnLogicalChannelFlowControl() with the channel and bit rate restriction. */ virtual PBoolean OnH245_FlowControlCommand( const H245_FlowControlCommand & pdu ///< Received PDU ); /**Handle H245 miscellaneous command. This function passes the miscellaneous command on to the channel defined by the pdu. */ virtual PBoolean OnH245_MiscellaneousCommand( const H245_MiscellaneousCommand & pdu ///< Received PDU ); /**Handle H245 miscellaneous indication. This function passes the miscellaneous indication on to the channel defined by the pdu. */ virtual PBoolean OnH245_MiscellaneousIndication( const H245_MiscellaneousIndication & pdu ///< Received PDU ); /**Handle H245 indication of received jitter. This function calls OnLogicalChannelJitter() with the channel and estimated jitter. */ virtual PBoolean OnH245_JitterIndication( const H245_JitterIndication & pdu ///< Received PDU ); /**Error discriminator for the OnControlProtocolError() function. */ enum ControlProtocolErrors { e_MasterSlaveDetermination, e_CapabilityExchange, e_LogicalChannel, e_ModeRequest, e_RoundTripDelay }; /**This function is called from the HandleControlPDU() function or any of its sub-functions for protocol errors, eg unhandled PDU types. The errorData field may be a string or PDU or some other data depending on the value of the errorSource parameter. These are: e_UnhandledPDU &H323ControlPDU e_MasterSlaveDetermination const char * If FALSE is returned the connection is aborted. The default behaviour returns TRUE. */ virtual PBoolean OnControlProtocolError( ControlProtocolErrors errorSource, ///< Source of the proptoerror const void * errorData = NULL ///< Data associated with error ); /**This function is called from the HandleControlPDU() function when it is about to send the Capabilities Set to the remote endpoint. This gives the application an oppurtunity to alter the PDU to be sent. */ virtual void OnSendCapabilitySet( H245_TerminalCapabilitySet & pdu ///< PDU to send ); /**This function is called when the remote endpoint sends its capability set. This gives the application an opportunity to inspect the incoming H.245 capability set, before the framework handles it. It is called before the other OnReceivedCapabilitySet(). The default implementation does nothing. */ virtual void OnReceivedCapabilitySet( const H245_TerminalCapabilitySet & pdu ///< received PDU ); /**This function is called when the remote endpoint sends its capability set. This gives the application an opportunity to determine what codecs are available and if it supports any of the combinations of codecs. Note any codec types that the remote system supports that are not in the codecs list member variable for the endpoint are ignored and not included in the remoteCodecs list. The default behaviour assigns the table and set to member variables and returns TRUE if the remoteCodecs list is not empty. */ virtual PBoolean OnReceivedCapabilitySet( const H323Capabilities & remoteCaps, ///< Capability combinations remote supports const H245_MultiplexCapability * muxCap, ///< Transport capability, if present H245_TerminalCapabilitySetReject & reject ///< Rejection PDU (if return FALSE) ); /**This function is called when a common capability set has been calculated Override this function to display to the user the various Capabilities available (started and not started) for the call. The default behaviour returns TRUE. */ virtual PBoolean OnCommonCapabilitySet( H323Capabilities & caps ///< Common Capability Set ) const; /**Send a new capability set. */ virtual void SendCapabilitySet( PBoolean empty ///< Send an empty set. ); /**Call back to set the local capabilities. This is called just before the capabilties are required when a call is begun. It is called when a SETUP PDU is received or when one is about to be sent, so that the capabilities may be adjusted for correct fast start operation. The default behaviour does nothing. */ virtual void OnSetLocalCapabilities(); /**Set the initial Capability Bandwidth for the TCS This will set the bandwidth limit for the given capability type that will be negotiated in the TCS. This fuinction sets the Maximum bitRate for the capability. The bandwidth in the OLC and any Flow Control values received will not exceed this set maximum value. */ void SetInitialBandwidth( H323Capability::MainTypes captype, ///< Capability Type int bitRate ///< BitRate (in bytes) ); /**Callback to modify the outgoing H245_OpenLogicalChannel. The default behaviour does nothing. */ virtual void OnSendH245_OpenLogicalChannel( H245_OpenLogicalChannel & /*open*/, PBoolean /*forward*/ ) { } /**Return if this H245 connection is a master or slave */ PBoolean IsH245Master() const; /**Start the round trip delay calculation over the control channel. */ void StartRoundTripDelay(); /**Get the round trip delay over the control channel. */ PTimeInterval GetRoundTripDelay() const; //@} /**@name Logical Channel Management */ //@{ /**Call back to select logical channels to start. This function must be defined by the descendent class. It is used to select the logical channels to be opened between the two endpoints. There are three ways in which this may be called: when a "fast start" has been initiated by the local endpoint (via SendSignalSetup() function), when a "fast start" has been requested from the remote endpoint (via the OnReceivedSignalSetup() function) or when the H245 capability set (and master/slave) negotiations have completed (via the OnControlChannelOpen() function. The function would typically examine several member variable to decide which mode it is being called in and what to do. If fastStartState is FastStartDisabled then non-fast start semantics should be used. The H245 capabilities in the remoteCapabilities members should be examined, and appropriate transmit channels started using OpenLogicalChannel(). If fastStartState is FastStartInitiate, then the local endpoint has initiated a call and is asking the application if fast start semantics are to be used. If so it is expected that the function call OpenLogicalChannel() for all the channels that it wishes to be able to be use. A subset (possibly none!) of these would actually be started when the remote endpoint replies. If fastStartState is FastStartResponse, then this indicates the remote endpoint is attempting a fast start. The fastStartChannels member contains a list of possible channels from the remote that the local endpoint is to select which to accept. For each accepted channel it simply necessary to call the Start() function on that channel eg fastStartChannels[0].Start(); The default behaviour selects the first codec of each session number that is available. This is according to the order of the capabilities in the remoteCapabilities, the local capability table or of the fastStartChannels list respectively for each of the above scenarios. */ virtual void OnSelectLogicalChannels(); /**Select default logical channel for normal start. */ virtual void SelectDefaultLogicalChannel( unsigned sessionID ///< Session ID to find default logical channel. ); /** MinMerge the local and remote Video and Extended Video Capabilities to ensure correct maximum framesize is negotiated between the parties. */ virtual PBoolean MergeCapabilities( unsigned sessionID, ///< Session ID to find default logical channel. const H323Capability & local, ///< Local Capability H323Capability * remote ///< remote Capability ); /**Select default logical channel for fast start. Internal function, not for normal use. */ virtual void SelectFastStartChannels( unsigned sessionID, ///< Session ID to find default logical channel. PBoolean transmitter, ///< Whether to open transmitters PBoolean receiver ///< Whether to open receivers ); /** Disable FastStart on a call by call basis */ void DisableFastStart(); /**Open a new logical channel. This function will open a channel between the endpoints for the specified capability. If this function is called while there is not yet a conenction established, eg from the OnFastStartLogicalChannels() function, then a "trial" receiver/transmitter channel is created. This channel is not started until the remote enpoint has confirmed that they are to start. Any channels not confirmed are deleted. If this function is called later in the call sequence, eg from OnSelectLogicalChannels(), then it may only establish a transmit channel, ie fromRemote must be FALSE. */ virtual PBoolean OpenLogicalChannel( const H323Capability & capability, ///< Capability to open channel with unsigned sessionID, ///< Session for the channel H323Channel::Directions dir ///< Direction of channel ); /**This function is called when the remote endpoint want's to open a new channel. If the return value is FALSE then the open is rejected using the errorCode as the cause, this would be a value from the enum H245_OpenLogicalChannelReject_cause::Choices. The default behaviour simply returns TRUE. */ virtual PBoolean OnOpenLogicalChannel( const H245_OpenLogicalChannel & openPDU, ///< Received PDU for the channel open H245_OpenLogicalChannelAck & ackPDU, ///< PDU to send for acknowledgement unsigned & errorCode, ///< Error to return if refused const unsigned & channelNumber = 0 ///< Channel Number to open ); /**Callback for when a logical channel conflict has occurred. This is called when the remote endpoint, which is a master, rejects our transmitter channel due to a resource conflict. Typically an inability to do asymmetric codecs. The local (slave) endpoint must then try and open a new transmitter channel using the same codec as the receiver that is being opened. */ virtual PBoolean OnConflictingLogicalChannel( H323Channel & channel ///< Channel that conflicted ); /**Create a new logical channel object. This is in response to a request from the remote endpoint to open a logical channel. */ virtual H323Channel * CreateLogicalChannel( const H245_OpenLogicalChannel & open, ///< Parameters for opening channel PBoolean startingFast, ///< Flag for fast/slow starting. unsigned & errorCode ///< Reason for create failure ); /**Create a new real time logical channel object. This creates a logical channel for handling RTP data. It is primarily used to allow an application to redirect the RTP media streams to other hosts to the local one. In that case it would create an instance of the H323_ExternalRTPChannel class with the appropriate address. eg: H323Channel * MyConnection::CreateRealTimeLogicalChannel( const H323Capability & capability, H323Channel::Directions dir, unsigned sessionID, const H245_H2250LogicalChannelParameters * param, RTP_QOS * rtpqos) { return new H323_ExternalRTPChannel(*this, capability, dir, sessionID, externalIpAddress, externalPort); } An application would typically also override the OnStartLogicalChannel() function to obtain from the H323_ExternalRTPChannel instance the address of the remote endpoints media server RTP addresses to complete the setting up of the external RTP stack. eg: PBoolean OnStartLogicalChannel(H323Channel & channel) { H323_ExternalRTPChannel & external = (H323_ExternalRTPChannel &)channel; external.GetRemoteAddress(remoteIpAddress, remotePort); } Note that the port in the above example is always the data port, the control port is assumed to be data+1. The default behaviour assures there is an RTP session for the session ID, and if not creates one, then creates a H323_RTPChannel which will do RTP media to the local host. */ virtual H323Channel * CreateRealTimeLogicalChannel( const H323Capability & capability, ///< Capability creating channel H323Channel::Directions dir, ///< Direction of channel unsigned sessionID, ///< Session ID for RTP channel const H245_H2250LogicalChannelParameters * param, ///< Parameters for channel RTP_QOS * rtpqos = NULL ///< QoS for RTP ); /**This function is called when the remote endpoint want's to create a new channel. If the return value is FALSE then the open is rejected using the errorCode as the cause, this would be a value from the enum H245_OpenLogicalChannelReject_cause::Choices. The default behaviour checks the capability set for if this capability is allowed to be opened with other channels that may already be open. */ virtual PBoolean OnCreateLogicalChannel( const H323Capability & capability, ///< Capability for the channel open H323Channel::Directions dir, ///< Direction of channel unsigned & errorCode ///< Error to return if refused ); /**Call back function when a logical channel thread begins. The default behaviour does nothing and returns TRUE. */ virtual PBoolean OnStartLogicalChannel( H323Channel & channel ///< Channel that has been started. ); /** Initial Flow Restrictions This is called when the channel has been openAck and allows the receiver to specify flow control restrictions. */ virtual PBoolean OnInitialFlowRestriction( H323Channel & channel ///< Channel that may require Flow Restriction ); #ifdef H323_AUDIO_CODECS /**Open a channel for use by an audio codec. The H323AudioCodec class will use this function to open the channel to read/write PCM data. The default behaviour calls the equivalent function on the endpoint. */ virtual PBoolean OpenAudioChannel( PBoolean isEncoding, ///< Direction of data flow unsigned bufferSize, ///< Size of each sound buffer H323AudioCodec & codec ///< codec that is doing the opening ); #endif #ifdef H323_VIDEO /**Open a channel for use by an video codec. The H323VideoCodec class will use this function to open the channel to read/write image data. The default behaviour calls the equivalent function on the endpoint. */ virtual PBoolean OpenVideoChannel( PBoolean isEncoding, ///< Direction of data flow H323VideoCodec & codec ///< codec doing the opening ); #ifdef H323_H239 /** Open a H.239 Channel */ PBoolean OpenH239Channel(); /** Close a H.239 Channel */ PBoolean CloseH239Channel(H323Capability::CapabilityDirection dir = H323Capability::e_Transmit); /** Callback when a H239 Session has been started */ virtual void OnH239SessionStarted( int sessionNum, ///< Channel Number opened H323Capability::CapabilityDirection dir ///< Direction of Channel ); /** Callback when a H239 Session has been ended */ virtual void OnH239SessionEnded( int sessionNum, ///< Channel Number to close H323Capability::CapabilityDirection dir ///< Direction of Channel ); /** Request to open session denied event */ virtual void OpenExtendedVideoSessionDenied(); /** On Receiving a H.239 Control Request Return False to reject the request to open channel. Set Delay to delay opening the channel. Calling OnH239ControlRequest() will invoke */ virtual PBoolean AcceptH239ControlRequest(PBoolean & delay); /** On Receiving a H.239 Control Request Return False to reject the request to open channel. */ PBoolean OnH239ControlRequest(H239Control * ctrl = NULL); /** On Receiving a H.239 Control Command This usually means the closing of the H.239 Channel */ virtual PBoolean OnH239ControlCommand(H239Control * ctrl = NULL); /** Open an Extended Video Session This will open an Extended Video session. */ PBoolean OpenExtendedVideoSession(H323ChannelNumber & num, int defaultSession=0); /** On Received an Extended Video OLC This indicates the receipt of Extended Video OLC */ virtual void OnReceivedExtendedVideoSession( unsigned /*role*/, ///< role 1-Presentation 2-Live const H323ChannelNumber & /*channelnum*/ ///< Channel number of just opened channel ) const {}; /** Close an Extended Video Session matching the channel number This will close the Extended Video matching the channel number (if open) */ virtual PBoolean CloseExtendedVideoSession( const H323ChannelNumber & num ///< Channel number to close. ); /**Open a channel for use by an extended video codec. The H323VideoCodec class will use this function to open the channel to read/write image data. The default behaviour returns FALSE. */ virtual PBoolean OpenExtendedVideoChannel( PBoolean isEncoding, ///< Direction of data flow H323VideoCodec & codec ///< codec doing the opening ); virtual PBoolean SendH239GenericResponse(PBoolean response); H245NegLogicalChannels * GetLogicalChannels(); #endif // H323_H239 #endif // NO_H323_VIDEO /**Close a logical channel. */ virtual void CloseLogicalChannel( unsigned number, ///< Channel number to close. PBoolean fromRemote ///< Indicates close request of remote channel ); /**Close a logical channel by number. */ virtual void CloseLogicalChannelNumber( const H323ChannelNumber & number ///< Channel number to close. ); /**Close a logical channel. */ virtual void CloseAllLogicalChannels( PBoolean fromRemote ///< Indicates close request of remote channel ); /**This function is called when the remote endpoint has closed down a logical channel. The default behaviour does nothing. */ virtual void OnClosedLogicalChannel( const H323Channel & channel ///< Channel that was closed ); /**This function is called when the remote endpoint request the close of a logical channel. The application may get an opportunity to refuse to close the channel by returning FALSE from this function. The default behaviour returns TRUE. */ virtual PBoolean OnClosingLogicalChannel( H323Channel & channel ///< Channel that is to be closed ); /**This function is called when the remote endpoint wishes to limit the bit rate being sent on a channel. If channel is NULL, then the bit rate limit applies to all channels. The default behaviour does nothing if channel is NULL, otherwise calls H323Channel::OnFlowControl() on the specific channel. */ virtual void OnLogicalChannelFlowControl( H323Channel * channel, ///< Channel that is to be limited long bitRateRestriction ///< Limit for channel ); /**This function is called when the local endpoint wishes to limit the bit rate being sent on a channel. If channel is NULL, then the bit rate limit applies to all channels. Return true if the FlowControl Command is sent */ virtual PBoolean SendLogicalChannelFlowControl( const H323Channel & channel, ///< Channel that is to be limited long restriction ///< Limit for channel ); /**This function is called when the remote endpoint indicates the level of jitter estimated by the receiver. If channel is NULL, then the jitter applies to all channels. The default behaviour does nothing if channel is NULL, otherwise calls H323Channel::OnJitter() on the specific channel. */ virtual void OnLogicalChannelJitter( H323Channel * channel, ///< Channel that is to be limited DWORD jitter, ///< Estimated received jitter in microseconds int skippedFrameCount, ///< Frames skipped by decodec int additionalBuffer ///< Additional size of video decoder buffer ); /**Send a miscellaneous command on the associated H245 channel. */ void SendLogicalChannelMiscCommand( H323Channel & channel, ///< Channel to send command for unsigned command ///< Command code to send ); /**Get a logical channel. Locates the specified channel number and returns a pointer to it. */ H323Channel * GetLogicalChannel( unsigned number, ///< Channel number to get. PBoolean fromRemote ///< Indicates get a remote channel ) const; /**Find a logical channel. Locates a channel give a RTP session ID. Each session would usually have two logical channels associated with it, so the fromRemote flag bay be used to distinguish which channel to return. */ H323Channel * FindChannel( unsigned sessionId, ///< Session ID to search for. PBoolean fromRemote ///< Indicates the direction of RTP data. ) const; #ifdef H323_H239 /**Get H.239 Channel Number. */ H323ChannelNumber GeExtendedChannelNum() const; #endif //@} /**@name Bandwidth Management */ //@{ /**Get the bandwidth currently used. This totals the open channels and returns the total bandwidth used in 100's of bits/sec */ unsigned GetBandwidthUsed() const; /**Request use the available bandwidth in 100's of bits/sec. If there is insufficient bandwidth available, FALSE is returned. If sufficient bandwidth is available, then TRUE is returned and the amount of available bandwidth is reduced by the specified amount. */ PBoolean UseBandwidth( unsigned bandwidth, ///< Bandwidth required PBoolean removing ///< Flag for adding/removing bandwidth usage ); #ifdef H323_VIDEO virtual void OnSetInitialBandwidth(H323VideoCodec * codec); #endif /**Get the available bandwidth in 100's of bits/sec. */ unsigned GetBandwidthAvailable() const { return bandwidthAvailable; } /**Get the Bandwidth requirement for the call in 100's of bits/sec. */ virtual unsigned GetBandwidthRequired() const { return bandwidthAvailable; } /**Set the available bandwidth in 100's of bits/sec. Note if the force parameter is TRUE this function will close down active logical channels to meet the new bandwidth requirement. */ PBoolean SetBandwidthAvailable( unsigned newBandwidth, ///< New bandwidth limit PBoolean force = FALSE ///< Force bandwidth limit ); //@} /**@name Indications */ //@{ enum SendUserInputModes { SendUserInputAsQ931, SendUserInputAsString, SendUserInputAsTone, SendUserInputAsInlineRFC2833, SendUserInputAsSeparateRFC2833, // Not implemented #ifdef H323_H249 SendUserInputAsNavigation, SendUserInputAsSoftkey, SendUserInputAsPointDevice, SendUserInputAsModal, #endif NumSendUserInputModes }; #if PTRACING friend ostream & operator<<(ostream & o, SendUserInputModes m); #endif /**Set the user input indication transmission mode. */ void SetSendUserInputMode(SendUserInputModes mode); /**Get the user input indication transmission mode. */ SendUserInputModes GetSendUserInputMode() const { return sendUserInputMode; } /**Get the real user input indication transmission mode. This will return the user input mode that will actually be used for transmissions. It will be the value of GetSendUserInputMode() provided the remote endpoint is capable of that mode. */ SendUserInputModes GetRealSendUserInputMode() const; /**Send a user input indication to the remote endpoint. This is for sending arbitrary strings as user indications. The user indication is sent according to the sendUserInputMode member variable. If SendUserInputAsString then this uses an H.245 "string" UserInputIndication pdu sending the entire string in one go. If SendUserInputAsTone then a separate H.245 "signal" UserInputIndication pdu is sent for each character. If SendUserInputAsInlineRFC2833 then the indication is inserted into the outgoing audio stream as an RFC2833 RTP data pdu. SendUserInputAsSeparateRFC2833 is not yet supported. */ virtual void SendUserInput( const PString & value ///< String value of indication ); /**Call back for remote endpoint has sent user input. This will be called irrespective of the source (H.245 string, H.245 signal or RFC2833). The default behaviour calls the endpoint function of the same name. */ virtual void OnUserInputString( const PString & value ///< String value of indication ); /**Send a user input indication to the remote endpoint. This sends DTMF emulation user input. If something more sophisticated than the simple tones that can be sent using the SendUserInput() function. A duration of zero indicates that no duration is to be indicated. A non-zero logical channel indicates that the tone is to be syncronised with the logical channel at the rtpTimestamp value specified. The tone parameter must be one of "0123456789#*ABCD!" where '!' indicates a hook flash. If tone is a ' ' character then a signalUpdate PDU is sent that updates the last tone indication sent. See the H.245 specifcation for more details on this. The user indication is sent according to the sendUserInputMode member variable. If SendUserInputAsString then this uses an H.245 "string" UserInputIndication pdu sending the entire string in one go. If SendUserInputAsTone then a separate H.245 "signal" UserInputIndication pdu is sent for each character. If SendUserInputAsInlineRFC2833 then the indication is inserted into the outgoing audio stream as an RFC2833 RTP data pdu. SendUserInputAsSeparateRFC2833 is not yet supported. */ virtual void SendUserInputTone( char tone, ///< DTMF tone code unsigned duration = 0, ///< Duration of tone in milliseconds unsigned logicalChannel = 0, ///< Logical channel number for RTP sync. unsigned rtpTimestamp = 0 ///< RTP timestamp in logical channel sync. ); /**Call back for remote enpoint has sent user input. The default behaviour calls the endpoint function of the same name. */ virtual void OnUserInputTone( char tone, ///< DTMF tone code unsigned duration, ///< Duration of tone in milliseconds unsigned logicalChannel, ///< Logical channel number for RTP sync. unsigned rtpTimestamp ///< RTP timestamp in logical channel sync. ); /**Send a user input indication to the remote endpoint. This sends a Hook Flash emulation user input. */ void SendUserInputHookFlash( int duration = 500 ///< Duration of tone in milliseconds ) { SendUserInputTone('!', duration); } /**Send a user input indication to the remote endpoint. This is for sending arbitrary strings as user indications. This always uses a Q.931 Keypad Information Element in a Information pdu sending the entire string in one go. */ virtual void SendUserInputIndicationQ931( const PString & value ///< String value of indication ); /**Send a user input indication to the remote endpoint. This is for sending arbitrary strings as user indications. This always uses an H.245 "string" UserInputIndication pdu sending the entire string in one go. */ virtual void SendUserInputIndicationString( const PString & value ///< String value of indication ); /**Send a user input indication to the remote endpoint. This sends DTMF emulation user input.This uses an H.245 "signal" UserInputIndication pdu. */ virtual void SendUserInputIndicationTone( char tone, ///< DTMF tone code unsigned duration = 0, ///< Duration of tone in milliseconds unsigned logicalChannel = 0, ///< Logical channel number for RTP sync. unsigned rtpTimestamp = 0 ///< RTP timestamp in logical channel sync. ); #ifdef H323_H249 /**Send a user input indication to the remote endpoint. This sends a H.249 Annex A Navigation user input. */ virtual void SendUserInputIndicationNavigate( H323_UserInputCapability::NavigateKeyID keyID ); /**Send a user input indication to the remote endpoint. This Receives/Sends a H.249 Annex A Navigation user input. */ virtual void OnUserInputIndicationNavigate( const H245_ArrayOf_GenericParameter & contents ); /**Send a user input indication to the remote endpoint. This Receives/Sends a H.249 Annex B Softkey user input. */ virtual void SendUserInputIndicationSoftkey( unsigned key, const PString & keyName = PString() ); virtual void OnUserInputIndicationSoftkey( const H245_ArrayOf_GenericParameter & contents ); /**Send a user input indication to the remote endpoint. This Receives/Sends a H.249 Annex C Point Device user input. */ virtual void SendUserInputIndicationPointDevice( unsigned x, ///< X coord unsigned y, ///< Y coord unsigned button=0, ///< Mouse Button 1 = left 2 = right unsigned buttonstate=0, ///< Button state 1 = button down 2 = button up unsigned clickcount=0 ///< ClickCount 1 = sigle click 2= doubleclick ); virtual void OnUserInputIndicationPointDevice( const H245_ArrayOf_GenericParameter & contents ); /**Send a user input indication to the remote endpoint. This Receives/Sends a H.249 Annex D Softkey user input. */ virtual void SendUserInputIndicationModal(); virtual void OnUserInputIndicationModal( const H245_ArrayOf_GenericParameter & contents ); #endif /**Send a user input indication to the remote endpoint. The two forms are for basic user input of a simple string using the SendUserInput() function or a full DTMF emulation user input using the SendUserInputTone() function. An application could do more sophisticated usage by filling in the H245_UserInputIndication structure directly ans using this function. */ virtual void SendUserInputIndication( const H245_UserInputIndication & pdu ///< Full user indication PDU ); /**Call back for remote enpoint has sent user input. The default behaviour calls OnUserInputString() if the PDU is of the alphanumeric type, or OnUserInputTone() if of a tone type. */ virtual void OnUserInputIndication( const H245_UserInputIndication & pdu ///< Full user indication PDU ); //@} /**@name RTP Session Management */ //@{ /**Get an RTP session for the specified ID. If there is no session of the specified ID, NULL is returned. */ virtual RTP_Session * GetSession( unsigned sessionID ) const; /**Get an H323 RTP session for the specified ID. If there is no session of the specified ID, NULL is returned. */ virtual H323_RTP_Session * GetSessionCallbacks( unsigned sessionID ) const; /**Use an RTP session for the specified ID and for the given direction. If there is no session of the specified ID, a new one is created using the information provided in the H245_TransportAddress PDU. If the system does not support the specified transport, NULL is returned. If this function is used, then the ReleaseSession() function MUST be called or the session is never deleted for the lifetime of the H323 connection. */ virtual RTP_Session * UseSession( unsigned sessionID, const H245_TransportAddress & pdu, H323Channel::Directions dir, RTP_QOS * rtpqos = NULL ); /**Release the session. If the session ID is not being used any more any clients via the UseSession() function, then the session is deleted. */ virtual void ReleaseSession( unsigned sessionID ); virtual void UpdateSession( unsigned oldSessionID, unsigned newSessionID ); /**Received OLC Generic Information. This is used to supply alternate RTP destination information in the generic information field in the OLC for the purpose of probing for an alternate route to the remote party. */ virtual PBoolean OnReceiveOLCGenericInformation(unsigned sessionID, const H245_ArrayOf_GenericInformation & alternate, PBoolean isAck ) const; /**Send Generic Information in the OLC. This is used to include generic information in the openlogicalchannel */ virtual PBoolean OnSendingOLCGenericInformation( const unsigned & sessionID, ///< Session Information H245_ArrayOf_GenericInformation & gen, ///< Generic OLC/OLCack message PBoolean isAck ) const; #ifdef H323_H4609 /** H.460.9 Call Statistics */ class H4609Statistics : public PObject { public: H4609Statistics(); H323TransportAddress sendRTPaddr; // Send RTP Address H323TransportAddress recvRTPaddr; // Receive RTP Address H323TransportAddress sendRTCPaddr; // Send RTCP Address (not used) H323TransportAddress recvRTCPaddr; // Receive RTCP Address (not used) unsigned sessionid; unsigned meanEndToEndDelay; // EstimatedEndtoEnd... unsigned worstEndToEndDelay; // EstimatedEndtoEnd... unsigned packetsReceived; unsigned accumPacketLost; unsigned packetLossRate; unsigned fractionLostRate; unsigned meanJitter; unsigned worstJitter; unsigned bandwidth; }; /** H.460.9 Queue statistics */ void H4609QueueStats(const RTP_Session & session) const; /** H.460.9 dequeue statistics */ PBoolean H4609DequeueStats(H4609Statistics & stat); /** H.460.9 Enable statistics collection */ void H4609EnableStats(); /** H.460.9 Statistics only collected at end of call */ void H4609StatsFinal(PBoolean final); #endif /**Callback from the RTP session for statistics monitoring. This is called every so many packets on the transmitter and receiver threads of the RTP session indicating that the statistics have been updated. The default behaviour calls H323EndPoint::OnRTPStatistics(). */ virtual void OnRTPStatistics( const RTP_Session & session ///< Session with statistics ) const; /**Callback from the RTP session for statistics monitoring. This is called at the end of the RTP session indicating that the statistics of the call The default behaviour calls H323EndPoint::OnFinalRTPStatistics(). */ virtual void OnRTPFinalStatistics( const RTP_Session & session ///< Session with statistics ) const; /**Callback from the RTP session for statistics monitoring. This is called when a SenderReport is received The default behaviour does nothing. */ virtual void OnRxSenderReport( unsigned sessionID, const RTP_Session::SenderReport & send, const RTP_Session::ReceiverReportArray & recv ) const; /**Get the names of the codecs in use for the RTP session. If there is no session of the specified ID, an empty string is returned. */ virtual PString GetSessionCodecNames( unsigned sessionID ) const; /** NAT Detection algorithm */ virtual void NatDetection(const PIPSocket::Address & srcAddress, ///< TCP socket source address const PIPSocket::Address & sigAddress ///< H.225 Signalling Address ); /** Fires when a NAT may of been detected. Return true to activate NAT media mechanism */ virtual PBoolean OnNatDetected(); /** Return TRUE if the remote appears to be behind a NAT firewall */ PBoolean IsBehindNAT() const { return remoteIsNAT; } /** Set Remote is behind NAT */ void SetRemoteNAT() { remoteIsNAT = true; } /** Is NAT Support Available */ PBoolean HasNATSupport() const { return NATsupport; } /** Disable NAT Support for allocation of RTP sockets */ void DisableNATSupport() { NATsupport = false; remoteIsNAT = false; } /** Set the information that the call parties are behind the same NAT device */ void SetSameNAT() { sameNAT = true; }; /** Determine if the two parties are behind the same NAT */ PBoolean isSameNAT() const { return sameNAT; }; #ifdef P_STUN /** GetPreferedNatMethod returns the NATMethod to use for a call by default calls the H323Endpoint function of the same name */ virtual PNatMethod * GetPreferedNatMethod(const PIPSocket::Address & ip) const; virtual PUDPSocket * GetNatSocket(unsigned session, PBoolean rtp); /** Set RTP NAT information callback */ virtual void SetRTPNAT(unsigned sessionid, PUDPSocket * _rtp, PUDPSocket * _rtcp); /** Set NAT Channel in effect */ void SetNATChannelActive(unsigned sessionid); /** Is NAT Method Active */ PBoolean IsNATMethodActive(unsigned sessionid); #endif /** Set Endpoint Type Information Override this to advertise the Endpoint type on a Call by Call basis The default behaviour calls H323EndPoint::SetEndpointTypeInfo(). */ virtual void SetEndpointTypeInfo(H225_EndpointType & info) const; //@} /**@name Request Mode Changes */ //@{ /**Make a request to mode change to remote. This asks the remote system to stop it transmitters and start sending one of the combinations specifed. The modes are separated in the string by \n characters, and all of the channels (capabilities) are strings separated by \t characters. Thus a very simple mode change would be "T.38" which requests that the remote start sending T.38 data and nothing else. A more complicated example would be "G.723\tH.261\nG.729\tH.261\nG.728" which indicates that the remote should either start sending G.723 and H.261, G.729 and H.261 or just G.728 on its own. Returns FALSE if a mode change is currently in progress, only one mode change may be done at a time. */ virtual PBoolean RequestModeChange( const PString & newModes ///< New modes to select ); /**Make a request to mode change to remote. This asks the remote system to stop it transmitters and start sending one of the combinations specifed. Returns FALSE if a mode change is currently in progress, only one mode change may be done at a time. */ virtual PBoolean RequestModeChange( const H245_ArrayOf_ModeDescription & newModes ///< New modes to select ); /**Received request for mode change from remote. */ virtual PBoolean OnRequestModeChange( const H245_RequestMode & pdu, ///< Received PDU H245_RequestModeAck & ack, ///< Ack PDU to send H245_RequestModeReject & reject, ///< Reject PDU to send PINDEX & selectedMode ///< Which mode was selected ); /**Completed request for mode change from remote. This is a call back that accurs after the ack has been sent to the remote as indicated by the OnRequestModeChange() return result. This function is intended to actually implement the mode change after it had been accepted. */ virtual void OnModeChanged( const H245_ModeDescription & newMode ); /**Received acceptance of last mode change request. This callback indicates that the RequestModeChange() was accepted by the remote endpoint. */ virtual void OnAcceptModeChange( const H245_RequestModeAck & pdu ///< Received PDU ); /**Received reject of last mode change request. This callback indicates that the RequestModeChange() was accepted by the remote endpoint. */ virtual void OnRefusedModeChange( const H245_RequestModeReject * pdu ///< Received PDU, if NULL is a timeout ); //@} #ifdef H323_T120 /**@name Other services */ //@{ /**Create an instance of the T.120 protocol handler. This is called when the OpenLogicalChannel subsystem requires that a T.120 channel be established. Note that if the application overrides this and returns a pointer to a heap variable (using new) then it is the responsibility of the creator to subsequently delete the object. The user of this function (the H323_T120Channel class) will not do so. The default behavour returns H323Endpoint::CreateT120ProtocolHandler() while keeping track of that variable for autmatic deletion. */ virtual OpalT120Protocol * CreateT120ProtocolHandler(); #endif #ifdef H323_T38 /**Create an instance of the T.38 protocol handler. This is called when the OpenLogicalChannel subsystem requires that a T.38 fax channel be established. Note that if the application overrides this and returns a pointer to a heap variable (using new) then it is the responsibility of the creator to subsequently delete the object. The user of this function (the H323_T38Channel class) will not do so. The default behavour returns H323Endpoint::CreateT38ProtocolHandler() while keeping track of that variable for autmatic deletion. */ virtual OpalT38Protocol * CreateT38ProtocolHandler(); /**Request a mode change to T.38 data. */ virtual PBoolean RequestModeChangeT38( const char * capabilityNames = "T.38\nT38FaxUDP" ); #endif #ifdef H323_H224 /** Create an instance of the H.224 protocol handler. This is called when the subsystem requires that a H.224 channel be established. Note that if the application overrides this it should return a pointer to a heap variable (using new) as it will be automatically deleted when the H323Connection is deleted. The default behaviour calls the OpalEndpoint function of the same name if there is not already a H.224 handler associated with this connection. If there is already such a H.224 handler associated, this instance is returned instead. */ virtual OpalH224Handler *CreateH224ProtocolHandler(H323Channel::Directions dir, unsigned sessionID); /** Create an instance of the H.281 protocol handler. This is called when the subsystem requires that a H.224 channel be established. Note that if the application overrides this it should return a pointer to a heap variable (using new) as it will be automatically deleted when the associated H.224 handler is deleted. The default behavour returns H323Endpoint::CreateH224ProtocolHandler() */ virtual OpalH281Handler *CreateH281ProtocolHandler(OpalH224Handler & h224Handler); #endif #ifdef H323_FILE /** Open an File Transfer Session Use this to open a file transfer session for the tranferring of files between H323 clients. */ PBoolean OpenFileTransferSession( const H323FileTransferList & list, H323ChannelNumber & num ///< Created Channel number ); /** Close the File Transfer Session Use this to close the file transfer session. */ PBoolean CloseFileTransferSession(unsigned num ///< Channel number ); /** Create an instance of the File Transfer handler. This is called when the subsystem requires that a a file transfer channel be established. The default behaviour calls the OnCreateFileTransferHandler function of the same name if there is not already a file transfer handler associated with this connection. If there is already such a file transfer handler associated, this instance is returned instead. */ H323FileTransferHandler *CreateFileTransferHandler(unsigned sessionID, ///< Session Identifier H323Channel::Directions dir, ///< direction of channel H323FileTransferList & filelist ///< Transfer File List ); /** OnCreateFileTransferHandler Function Override this function and create your own derived FileTransfer Handler to collect File Transfer events Note that if the application overrides this it should return a pointer to a heap variable (using new) as it will be automatically deleted when the H323Connection is deleted. */ virtual H323FileTransferHandler *OnCreateFileTransferHandler(unsigned sessionID, ///< Session Identifier H323Channel::Directions dir, ///< direction of channel H323FileTransferList & filelist ///< Transfer File List ); /** Open a File Transfer Channel. This is called when the subsystem requires that a File Transfer channel be established. An implementer should override this function to facilitate file transfer. If transmitting, list of files should be populated to notify the channel which files to read. If receiving, the list of files should be altered to include path information for the storage of received files. The default behaviour returns FALSE to indicate File Transfer is not implemented. */ virtual PBoolean OpenFileTransferChannel( PBoolean isEncoder, ///< direction of channel H323FileTransferList & filelist ///< Transfer File List ); #endif /**Get separate H.235 authentication for the connection. This allows an individual ARQ to override the authentical credentials used in H.235 based RAS for this particular connection. A return value of FALSE indicates to use the default credentials of the endpoint, while TRUE indicates that new credentials are to be used. The default behavour does nothing and returns FALSE. */ virtual PBoolean GetAdmissionRequestAuthentication( const H225_AdmissionRequest & arq, ///< ARQ being constructed H235Authenticators & authenticators ///< New authenticators for ARQ ); //@} /**@name Member variable access */ //@{ /**Get the owner endpoint for this connection. */ H323EndPoint & GetEndPoint() const { return endpoint; } /**Get the call direction for this connection. */ PBoolean HadAnsweredCall() const { return callAnswered; } /**Determined if connection is gatekeeper routed. */ PBoolean IsGatekeeperRouted() const { return gatekeeperRouted; } /**Get the Q.931 cause code (Q.850) that terminated this call. See Q931::CauseValues for common values. */ unsigned GetQ931Cause() const { return q931Cause; } /**Set the outgoing Q.931 cause code (Q.850) that is sent for this call See Q931::CauseValues for common values. */ void SetQ931Cause(unsigned v) { q931Cause = v; } /**Get the distinctive ring code for incoming call. This returns an integer from 0 to 7 that may indicate to an application that different ring cadences are to be used. */ unsigned GetDistinctiveRing() const { return distinctiveRing; } /**Set the distinctive ring code for outgoing call. This sets the integer from 0 to 7 that will be used in the outgoing Setup PDU. Note this must be called either immediately after construction or during the OnSendSignalSetup() callback function so the member variable is set befor ethe PDU is sent. */ void SetDistinctiveRing(unsigned pattern) { distinctiveRing = pattern&7; } /**Get the internal OpenH323 call token for this connection. */ const PString & GetCallToken() const { return callToken; } /**Get the call reference for this connection. */ unsigned GetCallReference() const { return callReference; } /**Get the call identifier for this connection. */ const OpalGloballyUniqueID & GetCallIdentifier() const { return callIdentifier; } /**Get the conference identifier for this connection. */ const OpalGloballyUniqueID & GetConferenceIdentifier() const { return conferenceIdentifier; } /**Get the local name/alias. */ const PString & GetLocalPartyName() const { return localPartyName; } /**Set the local name/alias from information in the PDU. */ void SetLocalPartyName(const PString & name); /**Set the local Q.931 display name */ void SetDisplayName(const PString & name) { localDisplayName = name; } /**Get the local Q.931 display name */ const PString GetDisplayName() const { return localDisplayName; } const PStringList & GetLocalAliasNames() const { return localAliasNames; } /**Get the remote party name. This returns a string indicating the remote parties names and aliases. This can be a complicated string containing all the aliases and the remote host name. For example: "Fred Nurk (fred, 5551234) [fred.nurk.com]" */ virtual const PString & GetRemotePartyName() const { return remotePartyName; } /**Get the remote party number, if there was one one. If the remote party has indicated an e164 number as one of its aliases or as a field in the Q.931 PDU, then this function will return it. */ const PString & GetRemotePartyNumber() const { return remotePartyNumber; } /**Get the remote party address. This will return the "best guess" at an address to use in a H323EndPoint::MakeCall() function to call the remote party back again. Note that due to the presence of gatekeepers/proxies etc this may not always be accurate. */ const PString & GetRemotePartyAddress() const { return remotePartyAddress; } /**Get the remote party Alias List, if there was one. */ const PStringArray & GetRemotePartyAliases() const { return remoteAliasNames; } /**Set the name/alias of remote end from information in the PDU. */ void SetRemotePartyInfo( const H323SignalPDU & pdu ///< PDU from which to extract party info. ); /**Get the remote application name and version. This information is obtained from the sourceInfo field of the H.225 Setup PDU or the destinationInfo of the call proceeding or alerting PDU's. The general format of the string will be information extracted from the VendorIdentifier field of the EndpointType. In particular: productId versionId t35CountryCode/manufacturerCode for example "Equivalence OpenPhone\t1.4.2\t9/61" */ const PString & GetRemoteApplication() const { return remoteApplication; } /**Set the name/alias of remote end from information in the PDU. */ virtual void SetRemoteApplication( const H225_EndpointType & pdu ///< PDU from which to extract application info. ); /**Get the local capability table for this connection. */ const H323Capabilities & GetLocalCapabilities() const { return localCapabilities; } /**Get the local capability table for this connection. */ H323Capabilities * GetLocalCapabilitiesRef() { return &localCapabilities; } /**Get the remotes capability table for this connection. */ const H323Capabilities & GetRemoteCapabilities() const { return remoteCapabilities; } /**Get the maximum audio jitter delay. */ unsigned GetRemoteMaxAudioDelayJitter() const { return remoteMaxAudioDelayJitter; } /**Get the signalling channel being used. */ const H323Transport * GetSignallingChannel() const { return signallingChannel; } /**Get the signalling channel protocol version number. */ unsigned GetSignallingVersion() const { return h225version; } /**Get the control channel being used (may return signalling channel). */ const H323Transport & GetControlChannel() const; /**Get the control channel protocol version number. */ unsigned GetControlVersion() const { return h245version; } /**Get the time at which the connection was begun */ PTime GetSetupUpTime() const { return setupTime; } /**Get the time at which the ALERTING was received */ PTime GetAlertingTime() const { return alertingTime; } /**Get the time at which the connection was connected. That is the point at which charging is likely to have begun. */ PTime GetConnectionStartTime() const { return connectedTime; } /**Get the time at which the connection was cleared */ PTime GetConnectionEndTime() const { return callEndTime; } /**Get the time at which the remote opened a media channel */ PTime GetReverseMediaOpenTime() const { return reverseMediaOpenTime; } /**Get the default maximum audio jitter delay parameter. Defaults to 50ms */ unsigned GetMinAudioJitterDelay() const { return minAudioJitterDelay; } /**Get the default maximum audio delay jitter parameter. Defaults to 250ms. */ unsigned GetMaxAudioJitterDelay() const { return maxAudioJitterDelay; } /**Set the maximum audio delay jitter parameter. */ void SetAudioJitterDelay( unsigned minDelay, ///< New minimum jitter buffer delay in milliseconds unsigned maxDelay ///< New maximum jitter buffer delay in milliseconds ); /**Get the UUIE PDU monitor bit mask. */ unsigned GetUUIEsRequested() const { return uuiesRequested; } /**Set the UUIE PDU monitor bit mask. */ void SetUUIEsRequested(unsigned mask) { uuiesRequested = mask; } /**Get the iNow Gatekeeper Access Token OID. */ const PString GetGkAccessTokenOID() const { return gkAccessTokenOID; } /**Set the iNow Gatekeeper Access Token OID. */ void SetGkAccessTokenOID(const PString & oid) { gkAccessTokenOID = oid; } /**Get the iNow Gatekeeper Access Token data. */ const PBYTEArray & GetGkAccessTokenData() const { return gkAccessTokenData; } /**Set the Destionation Extra Call Info memeber. */ void SetDestExtraCallInfo( const PString & info ) { destExtraCallInfo = info; } /** Set the remote call waiting flag */ void SetRemoteCallWaiting(const unsigned value) { remoteCallWaiting = value; } /**How many caller's are waiting on the remote endpoint? -1 - None 0 - Just this connection n - n plus this connection */ const int GetRemoteCallWaiting() const { return remoteCallWaiting; } /**Set the enforced duration limit for the call. This starts a timer that will automatically shut down the call when it expires. */ void SetEnforcedDurationLimit( unsigned seconds ///< max duration of call in seconds ); #ifdef P_STUN /**Session Information This contains session information which is passed to the socket handler when creating RTP socket pairs. */ class SessionInformation : public PObject { public: SessionInformation(const OpalGloballyUniqueID & id, const PString & token, unsigned session, const H323Connection * connection); const PString & GetCallToken(); unsigned GetSessionID() const; const OpalGloballyUniqueID & GetCallIdentifer(); void SetSendMultiplexID(unsigned id); unsigned GetRecvMultiplexID() const; const PString & GetCUI(); const H323Connection * GetConnection(); protected: OpalGloballyUniqueID m_callID; PString m_callToken; unsigned m_sessionID; unsigned m_recvMultiID; unsigned m_sendMultiID; PString m_CUI; const H323Connection * m_connection; }; SessionInformation * BuildSessionInformation(unsigned sessionID) const; class NAT_Sockets { public: NAT_Sockets() { rtp = NULL; rtcp = NULL; isActive = false; } PUDPSocket * rtp; PUDPSocket * rtcp; PBoolean isActive; }; #endif #ifdef H323_H460 /** Disable the feature set as the remote does not support it. */ void DisableFeatureSet(int) const; /** Disable Feautures on a call by call basis */ void DisableFeatures(PBoolean disable = true); #endif virtual PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet &, PBoolean) const; virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &, PBoolean = false) const; /** On resolving H.245 Address conflict */ virtual PBoolean OnH245AddressConflict(); #ifdef H323_H46018 /** Call to set the direction of call establishment */ void H46019SetCallReceiver(); /** Enable H46019 for this call */ void H46019Enabled(); /** Enable H46019 Multiplexing for this call */ void H46019MultiEnabled(); /** Is H46019 Multiplexing enabled for this call */ PBoolean IsH46019Multiplexed() const; #endif #ifdef H323_H46024A /** Enable H46024A for this call */ void H46024AEnabled(); /** send H46024A notification */ PBoolean SendH46024AMessage(bool sender); /** received H46024A notification */ PBoolean ReceivedH46024AMessage(bool toStart); /** Enable H46024B for this call */ #endif #ifdef H323_H46024B void H46024BEnabled(); #endif //@} #ifndef DISABLE_CALLAUTH /**@name Endpoint Authentication */ //@{ /** Get Endpoint Authenticator mothods */ const H235Authenticators & GetEPAuthenticators() const; /** Set Authentication to support Validation CallBack OnCallAuthentication is called when a EPAuthentication CryptoToken is Validated. */ virtual void SetAuthenticationConnection(); /** EP Authentication CallBack to check username and get Password for Call Authentication. By Default it calls the corresponding Endpoint Function. */ virtual PBoolean OnCallAuthentication(const PString & username, PString & password); /** EP Authentication CallBack to allow the connection to approve the authentication even if it has failed. Use this to override authentication on a call by call basis Return TRUE to Authenticate. */ virtual PBoolean OnEPAuthenticationFailed(H235Authenticator::ValidationResult result) const; /** EP Authentication Finalise Callback. After the PDU has been built this Callback allows the Authentication mechanisms to finalise the PDU. */ virtual void OnAuthenticationFinalise(unsigned pdu,PBYTEArray & rawData); /** Whether the Call has Authentication */ PBoolean HasAuthentication() const { return hasAuthentication; } /** Whether the Authentication has Failed */ PBoolean HasAuthenticationFailed() { return AuthenticationFailed; }; //@} #endif #ifdef H323_H248 /**@name Call Service Control Session */ //@{ /** On Send Service Control Session */ PBoolean OnSendServiceControlSessions( H225_ArrayOf_ServiceControlSession & serviceControl, ///< Service control PDU H225_ServiceControlSession_reason reason ///< Reason for Service Control ) const; /** On Receive Service Control Session */ void OnReceiveServiceControlSessions( const H225_ArrayOf_ServiceControlSession & serviceControl ///< Service control PDU ); /** On Send Call Credit */ virtual void OnReceiveServiceControl(const PString & amount, ///< Current Balance PBoolean credit, ///< Debit or Credit const unsigned & timelimit,///< Time Remaining const PString & url, ///< url for TopUp const PString & ldapURL, ///< LDAP URL const PString & baseDN ///< LDAP base DN ); /** On Receive Call Credit */ virtual PBoolean OnSendServiceControl(PString & amount, ///< Current Balance PBoolean credit, ///< Debit or Credit unsigned & timelimit, ///< Time Remaining PString & url ///< url for TopUp ) const; //@} #endif /**@name Feature Related Function */ //@{ /** Disable H245 in Setup */ virtual void DisableH245inSETUP(); /** Disable QoS in H.245 */ virtual void DisableH245QoS(); /** Has QoS in H.245 */ virtual PBoolean H245QoSEnabled() const; /** Set the connection as a non Standard Call */ virtual void SetNonCallConnection(); /** Is a Non-Call related connection like text messaging or file transfer */ virtual PBoolean IsNonCallConnection() const; #ifdef H323_H460 /** Get the connection FeatureSet */ virtual H460_FeatureSet * GetFeatureSet(); #endif //@} enum ReleaseSequence { ReleaseSequenceUnknown, ReleaseSequence_Local, ReleaseSequence_Remote }; ReleaseSequence GetReleaseSequence() const { return releaseSequence; } virtual PBoolean OnHandleConferenceRequest(const H245_ConferenceRequest &) { return FALSE; } virtual PBoolean OnHandleConferenceResponse(const H245_ConferenceResponse &) { return FALSE; } virtual PBoolean OnHandleConferenceCommand(const H245_ConferenceCommand &) { return FALSE; } virtual PBoolean OnHandleConferenceIndication(const H245_ConferenceIndication &) { return FALSE; } enum h245MessageType { h245request, h245response, h245command, h245indication }; virtual PBoolean OnHandleH245GenericMessage(h245MessageType type, const H245_GenericMessage & pdu); virtual PBoolean OnReceivedGenericMessage(h245MessageType, const PString & ); virtual PBoolean OnReceivedGenericMessage(h245MessageType type, const PString & id, const H245_ArrayOf_GenericParameter & content); #ifdef H323_H230 /** Open Conference Controls */ PBoolean OpenConferenceControlSession( PBoolean & chairControl, PBoolean & extControls ); #endif protected: /**Internal function to check if call established. This checks all the criteria for establishing a call an initiating the starting of media channels, if they have not already been started via the fast start algorithm. */ virtual void InternalEstablishedConnectionCheck(); PBoolean DecodeFastStartCaps(const H225_ArrayOf_PASN_OctetString & fastStartCaps); PBoolean InternalEndSessionCheck(PPER_Stream & strm); void SetRemoteVersions(const H225_ProtocolIdentifier & id); void MonitorCallStatus(); PDECLARE_NOTIFIER(OpalRFC2833Info, H323Connection, OnUserInputInlineRFC2833); PDECLARE_NOTIFIER(H323Codec::FilterInfo, H323Connection, OnUserInputInBandDTMF); H323EndPoint & endpoint; PSyncPoint * endSync; int remoteCallWaiting; // Number of call's waiting at the remote endpoint PBoolean callAnswered; PBoolean gatekeeperRouted; unsigned distinctiveRing; PString callToken; unsigned callReference; OpalGloballyUniqueID callIdentifier; OpalGloballyUniqueID conferenceIdentifier; PStringList localAliasNames; PString localPartyName; PString localDisplayName; #if H323_H235 H235Capabilities localCapabilities; // Capabilities local system supports #else H323Capabilities localCapabilities; // Capabilities local system supports #endif PString remotePartyName; PString remotePartyNumber; PString remotePartyAddress; PStringArray remoteAliasNames; PString destExtraCallInfo; PString remoteApplication; H323Capabilities remoteCapabilities; // Capabilities remote system supports unsigned remoteMaxAudioDelayJitter; PTimer roundTripDelayTimer; unsigned minAudioJitterDelay; unsigned maxAudioJitterDelay; unsigned bandwidthAvailable; unsigned uuiesRequested; PString gkAccessTokenOID; PBYTEArray gkAccessTokenData; PBoolean addAccessTokenToSetup; SendUserInputModes sendUserInputMode; H323Transport * signallingChannel; PMutex signallingMutex; H323Transport * controlChannel; PMutex controlMutex; PBoolean h245Tunneling; H323SignalPDU * h245TunnelRxPDU; H323SignalPDU * h245TunnelTxPDU; H323SignalPDU * alertingPDU; H323SignalPDU * connectPDU; enum ConnectionStates { NoConnectionActive, AwaitingGatekeeperAdmission, AwaitingTransportConnect, AwaitingSignalConnect, AwaitingLocalAnswer, HasExecutedSignalConnect, EstablishedConnection, ShuttingDownConnection, NumConnectionStates } connectionState; PTime setupTime; PTime alertingTime; PTime connectedTime; PTime callEndTime; PTime reverseMediaOpenTime; CallEndReason callEndReason; unsigned q931Cause; ReleaseSequence releaseSequence; unsigned h225version; unsigned h245version; PBoolean h245versionSet; PBoolean doH245inSETUP; PBoolean lastPDUWasH245inSETUP; PBoolean detectInBandDTMF; PBoolean mustSendDRQ; PBoolean mediaWaitForConnect; PBoolean transmitterSidePaused; PBoolean earlyStart; PBoolean doH245QoS; PBoolean enableMERAHack; #ifdef H323_T120 PBoolean startT120; #endif #ifdef H323_T38 PString t38ModeChangeCapabilities; #endif #ifdef H323_H224 PBoolean startH224; #endif PSyncPoint digitsWaitFlag; PBoolean endSessionNeeded; PBoolean endSessionSent; PSyncPoint endSessionReceived; PTimer enforcedDurationLimit; #ifdef H323_H450 // Used as part of a local call hold operation involving MOH PChannel * holdAudioMediaChannel; PChannel * holdVideoMediaChannel; PBoolean isConsultationTransfer; /** Call Intrusion flag and parameters */ PBoolean isCallIntrusion; unsigned callIntrusionProtectionLevel; #endif RTP_SessionManager rtpSessions; enum FastStartStates { FastStartDisabled, FastStartInitiate, FastStartResponse, FastStartAcknowledged, NumFastStartStates }; FastStartStates fastStartState; H323LogicalChannelList fastStartChannels; #if PTRACING static const char * const ConnectionStatesNames[NumConnectionStates]; friend ostream & operator<<(ostream & o, ConnectionStates s) { return o << ConnectionStatesNames[s]; } static const char * const FastStartStateNames[NumFastStartStates]; friend ostream & operator<<(ostream & o, FastStartStates s) { return o << FastStartStateNames[s]; } #endif // The following pointers are to protocol procedures, they are pointers to // hide their complexity from the H323Connection classes users. H245NegMasterSlaveDetermination * masterSlaveDeterminationProcedure; H245NegTerminalCapabilitySet * capabilityExchangeProcedure; H245NegLogicalChannels * logicalChannels; H245NegRequestMode * requestModeProcedure; H245NegRoundTripDelay * roundTripDelayProcedure; #ifdef H323_H450 H450xDispatcher * h450dispatcher; H4502Handler * h4502handler; H4503Handler * h4503handler; H4504Handler * h4504handler; H4506Handler * h4506handler; H45011Handler * h45011handler; #endif OpalRFC2833 * rfc2833handler; #ifdef H323_T120 OpalT120Protocol * t120handler; #endif #ifdef H323_T38 OpalT38Protocol * t38handler; #endif #ifdef H323_H224 OpalH281Handler * h281handler; #endif #ifdef P_DTMF // The In-Band DTMF detector. This is used inside an audio filter which is // added to the audio channel. PDTMFDecoder dtmfDecoder; #endif // used to detect remote NAT endpoints PBoolean remoteIsNAT; ///< Remote Caller is NAT PBoolean NATsupport; ///< Disable support for NATed callers PBoolean sameNAT; ///< Call parties are behind the same NAT #ifndef DISABLE_CALLAUTH PBoolean AuthenticationFailed; PBoolean hasAuthentication; const H235Authenticators EPAuthenticators; #endif #ifdef H323_AEC PAec * aec; #endif PBoolean nonCallConnection; private: PChannel * SwapHoldMediaChannels(PChannel * newChannel,unsigned sessionId); PTimedMutex outerMutex; PMutex innerMutex; public: PBoolean StartHandleControlChannel(); virtual PBoolean OnStartHandleControlChannel(); void EndHandleControlChannel(); #ifdef H323_RTP_AGGREGATE private: PBoolean useRTPAggregation; #endif #ifdef H323_SIGNAL_AGGREGATE public: void AggregateSignalChannel(H323Transport * transport); void AggregateControlChannel(H323Transport * transport); protected: PBoolean useSignallingAggregation; H323AggregatedH2x5Handle * signalAggregator; H323AggregatedH2x5Handle * controlAggregator; #endif #ifdef H323_H248 H323Dictionary serviceControlSessions; #endif #ifdef H323_H460 PBoolean disableH460; H460_FeatureSet * features; #ifdef H323_H4609 PBoolean m_h4609enabled; PBoolean m_h4609Final; PQueue * m_h4609Stats; #endif #ifdef H323_H46018 PBoolean m_H46019CallReceiver; PBoolean m_H46019enabled; PBoolean m_H46019multiplex; PBoolean m_h245Connect; #endif #ifdef H323_H46024A PBoolean m_H46024Aenabled; PBoolean m_H46024Ainitator; PINDEX m_H46024Astate; #endif #ifdef H323_H46024B PBoolean m_H46024Benabled; PINDEX m_H46024Bstate; #endif #endif #ifdef P_STUN PMutex NATSocketMutex; std::map m_NATSockets; #endif #ifdef H323_H239 PBoolean DecodeH239GenericResponse(const H245_ArrayOf_GenericParameter & params); H323ChannelNumber m_H239ChanId; #endif }; H323LIST(H323ConnectionList, H323Connection); H323DICTIONARY(H323ConnectionDict, PString, H323Connection); H323DICTIONARY(H323CallIdentityDict, PString, H323Connection); #endif // __OPAL_H323CON_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/h501pdu.h0000644000175000017500000001442510655704652014111 0ustar markmark/* * h501pdu.h * * H.501 protocol handler * * Open H323 Library * * Copyright (c) 2003 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: h501pdu.h,v $ * Revision 1.1 2007/08/06 20:50:50 shorne * First commit of h323plus * * Revision 1.10 2003/04/10 01:03:39 craigs * Changed to allow reply address to be a list * * Revision 1.9 2003/03/28 05:08:16 robertj * Added delay parameter to BuildRequestInProgress * * Revision 1.8 2003/03/25 04:56:17 robertj * Fixed issues to do with multiple inheritence in transaction reply cache. * * Revision 1.7 2003/03/20 01:51:07 robertj * More abstraction of H.225 RAS and H.501 protocols transaction handling. * * Revision 1.6 2003/03/18 13:58:16 craigs * More H.501 implementation * * Revision 1.5 2003/03/17 13:19:49 craigs * More H501 implementation * * Revision 1.4 2003/03/14 06:00:42 craigs * More updates * * Revision 1.3 2003/03/01 00:23:42 craigs * New PeerElement implementation * * Revision 1.2 2003/02/25 06:48:15 robertj * More work on PDU transaction abstraction. * * Revision 1.1 2003/02/21 05:28:39 craigs * Factored out code for user with peer elements * */ #ifndef __OPAL_H501PDU_H #define __OPAL_H501PDU_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "transports.h" #include "h323trans.h" #include "h501.h" class H323_AnnexG; /**Wrapper class for the H501 Annex G channel. */ class H501PDU : public H501_Message, public H323TransactionPDU { PCLASSINFO(H501PDU, H501_Message); public: H501PDU(); // overrides from PObject virtual PObject * Clone() const; // overrides from H323TransactionPDU virtual PASN_Object & GetPDU(); virtual PASN_Choice & GetChoice(); virtual const PASN_Object & GetPDU() const; virtual const PASN_Choice & GetChoice() const; virtual unsigned GetSequenceNumber() const; virtual unsigned GetRequestInProgressDelay() const; #if PTRACING virtual const char * GetProtocolName() const; #endif virtual H323TransactionPDU * ClonePDU() const; virtual void DeletePDU(); // new functions H501_ServiceRequest & BuildServiceRequest (unsigned seqnum, const H323TransportAddressArray & reply); H501_ServiceConfirmation & BuildServiceConfirmation (unsigned seqnum); H501_ServiceRejection & BuildServiceRejection (unsigned seqnum, unsigned reason); H501_ServiceRelease & BuildServiceRelease (unsigned seqnum); H501_DescriptorRequest & BuildDescriptorRequest (unsigned seqnum, const H323TransportAddressArray & reply); H501_DescriptorConfirmation & BuildDescriptorConfirmation (unsigned seqnum); H501_DescriptorRejection & BuildDescriptorRejection (unsigned seqnum, unsigned reason); H501_DescriptorIDRequest & BuildDescriptorIDRequest (unsigned seqnum, const H323TransportAddressArray & reply); H501_DescriptorIDConfirmation & BuildDescriptorIDConfirmation (unsigned seqnum); H501_DescriptorIDRejection & BuildDescriptorIDRejection (unsigned seqnum, unsigned reason); H501_DescriptorUpdate & BuildDescriptorUpdate (unsigned seqnum, const H323TransportAddressArray & reply); H501_DescriptorUpdateAck & BuildDescriptorUpdateAck (unsigned seqnum); H501_AccessRequest & BuildAccessRequest (unsigned seqnum, const H323TransportAddressArray & reply); H501_AccessConfirmation & BuildAccessConfirmation (unsigned seqnum); H501_AccessRejection & BuildAccessRejection (unsigned seqnum, int reason); H501_RequestInProgress & BuildRequestInProgress (unsigned seqnum, unsigned delay); H501_NonStandardRequest & BuildNonStandardRequest (unsigned seqnum, const H323TransportAddressArray & reply); H501_NonStandardConfirmation & BuildNonStandardConfirmation (unsigned seqnum); H501_NonStandardRejection & BuildNonStandardRejection (unsigned seqnum, unsigned reason); H501_UnknownMessageResponse & BuildUnknownMessageResponse (unsigned seqnum); H501_UsageRequest & BuildUsageRequest (unsigned seqnum, const H323TransportAddressArray & reply); H501_UsageConfirmation & BuildUsageConfirmation (unsigned seqnum); H501_UsageIndicationConfirmation & BuildUsageIndicationConfirmation (unsigned seqnum); H501_UsageIndicationRejection & BuildUsageIndicationRejection (unsigned seqnum, unsigned reason); H501_UsageRejection & BuildUsageRejection (unsigned seqnum); H501_ValidationRequest & BuildValidationRequest (unsigned seqnum, const H323TransportAddressArray & reply); H501_ValidationConfirmation & BuildValidationConfirmation (unsigned seqnum); H501_ValidationRejection & BuildValidationRejection (unsigned seqnum, unsigned reason); H501_AuthenticationRequest & BuildAuthenticationRequest (unsigned seqnum, const H323TransportAddressArray & reply); H501_AuthenticationConfirmation & BuildAuthenticationConfirmation (unsigned seqnum); H501_AuthenticationRejection & BuildAuthenticationRejection (unsigned seqnum, unsigned reason); protected: void BuildRequest(unsigned tag, unsigned seqnum, const H323TransportAddressArray & replyAddr); void BuildPDU(unsigned tag, unsigned seqnum); }; #endif // __OPAL_H501PDU_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/h323t120.h0000644000175000017500000002132311015524125013766 0ustar markmark/* * h323t120.h * * H.323 T.120 logical channel establishment * * Open H323 Library * * Copyright (c) 2001 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: h323t120.h,v $ * Revision 1.2 2008/05/23 11:19:49 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:50:49 shorne * First commit of h323plus * * Revision 1.8 2005/11/30 13:05:01 csoutheren * Changed tags for Doxygen * * Revision 1.7 2002/09/16 01:14:15 robertj * Added #define so can select if #pragma interface/implementation is used on * platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan. * * Revision 1.6 2002/09/03 06:19:37 robertj * Normalised the multi-include header prevention ifdef/define symbol. * * Revision 1.5 2002/08/05 10:03:47 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.4 2002/05/10 05:47:37 robertj * Added session ID to the data logical channel class. * * Revision 1.3 2002/02/01 01:46:50 robertj * Some more fixes for T.120 channel establishment, more to do! * * Revision 1.2 2002/01/09 00:21:36 robertj * Changes to support outgoing H.245 RequstModeChange. * * Revision 1.1 2001/07/17 04:44:29 robertj * Partial implementation of T.120 and T.38 logical channels. * */ #ifndef __OPAL_H323T120_H #define __OPAL_H323T120_H #ifdef P_USE_PRAGMA #pragma interface #endif #include "h323caps.h" #include "channels.h" class OpalT120Protocol; /////////////////////////////////////////////////////////////////////////////// /**This class describes the T.120 logical channel. */ class H323_T120Capability : public H323DataCapability { PCLASSINFO(H323_T120Capability, H323DataCapability); public: /**@name Construction */ //@{ /**Create capability. */ H323_T120Capability(); //@} /**@name Overrides from class PObject */ //@{ /**Create a copy of the object. */ virtual PObject * Clone() const; //@} /**@name Identification functions */ //@{ /**Get the sub-type of the capability. This is a code dependent on the main type of the capability. This returns the e_t120 enum value from the protocol ASN H245_DataApplicationCapability_application class. */ virtual unsigned GetSubType() const; /**Get the name of the media data format this class represents. */ virtual PString GetFormatName() const; //@} /**@name Operations */ //@{ /**Create the channel instance, allocating resources as required. */ virtual H323Channel * CreateChannel( H323Connection & connection, ///< Owner connection for channel H323Channel::Directions dir, ///< Direction of channel unsigned sessionID, ///< Session ID for RTP channel const H245_H2250LogicalChannelParameters * param ///< Parameters for channel ) const; //@} /**@name Protocol manipulation */ //@{ /**This function is called whenever and outgoing TerminalCapabilitySet or OpenLogicalChannel PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour sets the pdu and calls OnSendingPDU with a H245_DataProtocolCapability parameter. */ virtual PBoolean OnSendingPDU( H245_DataApplicationCapability & pdu ) const; /**This function is called whenever and outgoing RequestMode PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour sets the pdu and calls OnSendingPDU with a H245_DataProtocolCapability parameter. */ virtual PBoolean OnSendingPDU( H245_DataMode & pdu ///< PDU to set information on ) const; /**This function is called whenever and outgoing PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour sets separate LAN stack. */ virtual PBoolean OnSendingPDU( H245_DataProtocolCapability & pdu ///< PDU to set information on ) const; /**This function is called whenever and incoming TerminalCapabilitySet or OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. The default behaviour gets the data rate field from the PDU. */ virtual PBoolean OnReceivedPDU( const H245_DataApplicationCapability & pdu ///< PDU to set information on ); //@} /**@name Member access */ //@{ /**Get the dynamic port capability. Indicates endpoint can use something other than port 1503. */ PBoolean GetDynamicPortCapability() const { return dynamicPortCapability; } /**Set the dynamic port capability. Indicates endpoint can use something other than port 1503. */ void SetDynamicPortCapability(PBoolean dynamic) { dynamicPortCapability = dynamic; } //@} protected: PBoolean dynamicPortCapability; }; /**This class describes the T.120 logical channel. */ class H323_T120Channel : public H323DataChannel { PCLASSINFO(H323_T120Channel, H323DataChannel); public: /**@name Construction */ //@{ /**Create a new channel. */ H323_T120Channel( H323Connection & connection, ///< Connection to endpoint for channel const H323Capability & capability, ///< Capability channel is using Directions direction, ///< Direction of channel unsigned sessionID ///< Session ID for channel ); //@} /**@name Overrides from class H323Channel */ //@{ /**Handle channel data reception. This is called by the thread started by the Start() function and is typically a loop reading from the transport and handling PDU's. The default behaviour here is to call HandleChannel() */ virtual void Receive(); /**Handle channel data transmission. This is called by the thread started by the Start() function and is typically a loop reading from the codec and writing to the transport (eg an RTP_session). The default behaviour here is to call HandleChannel() */ virtual void Transmit(); /**Fill out the OpenLogicalChannel PDU for the particular channel type. */ virtual PBoolean OnSendingPDU( H245_OpenLogicalChannel & openPDU ///< Open PDU to send. ) const; /**This is called when request to create a channel is received from a remote machine and is about to be acknowledged. */ virtual void OnSendOpenAck( const H245_OpenLogicalChannel & open, ///< Open PDU H245_OpenLogicalChannelAck & ack ///< Acknowledgement PDU ) const; /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. The default makes sure the parameters are compatible and passes on the PDU to the rtp session. */ virtual PBoolean OnReceivedPDU( const H245_OpenLogicalChannel & pdu, ///< Open PDU unsigned & errorCode ///< Error code on failure ); /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. The default makes sure the parameters are compatible and passes on the PDU to the rtp session. */ virtual PBoolean OnReceivedAckPDU( const H245_OpenLogicalChannelAck & pdu ///< Acknowledgement PDU ); //@} virtual void HandleChannel(); protected: OpalT120Protocol * t120handler; }; #endif // __OPAL_H323T120_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/codec/0000755000175000017500000000000011445322272013611 5ustar markmarkh323plus/include/codec/opalplugin.h0000644000175000017500000007517711445322272016155 0ustar markmark/* * h323plugins.h * * H.323 codec plugins handler * * Open H323 Library * * Copyright (C) 2004 Post Increment * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Post Increment * * Contributor(s): ______________________________________. * * $Log: opalplugin.h,v $ * Revision 1.15 2010/09/19 05:50:50 shorne * Remove PLUS_FRAMEHEADER switch, added support for passing input device capabilities to the video plugin * * Revision 1.14 2010/08/31 04:00:49 shorne * Improved H.263/H.263+ interworking * * Revision 1.13 2010/08/26 15:12:39 shorne * Major H.239 upgrade. Special thx again to Marek Domaracky and Igor Pavlov * * Revision 1.12 2010/08/23 08:26:55 willamowius * disable PLUS_FRAMEHEADER for now, it seriously degrades video quality * * Revision 1.11 2010/08/19 12:42:37 shorne * Improved H.239 Support * * Revision 1.10 2010/06/06 14:27:25 shorne * added support for multiple frame decoding, Flow control,aspect ratio management * * Revision 1.9 2010/05/02 22:36:40 shorne * Added Event controller interface * * Revision 1.8 2010/02/24 02:56:15 shorne * Update to match latest Opal SVN * * Revision 1.7 2009/11/12 06:27:15 shorne * Updated definitions * * Revision 1.6 2009/02/21 14:07:43 shorne * Updated with changes from Opal * * Revision 1.5 2007/11/06 17:45:38 shorne * Added h323pluslib definition * * Revision 1.4 2007/11/06 17:43:33 shorne * added i480 standard framesize * * Revision 1.3 2007/10/30 04:23:43 shorne * Corrections and Improvements for H.239 support * * Revision 1.2 2007/10/19 19:53:43 shorne * ported latest Video updates in OpenH323 committed after h323plus initial fork thanks * Robert * * Revision 1.1 2007/08/20 20:19:53 shorne * Moved opalplugin.h to codec directory to be plugin compile compatible with Opal * * Revision 1.2 2007/08/20 19:13:28 shorne * Added Generic Capability support. Fixed Linux compile errors * * Revision 1.1 2007/08/06 20:50:50 shorne * First commit of h323plus * * Revision 1.10.2.5 2007/09/26 05:14:28 rjongbloed * Added some extra RTP magic numbers: min header size, max packet size etc * * Revision 1.10.2.4 2007/08/17 08:38:22 rjongbloed * Back ported OPAL meda options based plug ins and H.323 generic capabilties. * * Revision 1.10.2.3 2007/02/19 20:12:45 shorne * added H.239 support * * Revision 1.10.2.2 2007/02/19 14:19:36 shorne * Added H.239 OIDs * * Revision 1.10.2.1 2006/12/23 19:08:02 shorne * Plugin video codecs & sundry * * Revision 1.10 2006/05/16 11:26:06 shorne * Added more hid key input mask types * * Revision 1.9 2005/11/21 21:04:10 shorne * Added more HID input switches * * Revision 1.8 2005/08/23 08:13:06 shorne * Added HID plugin volume & LCD display support * * Revision 1.7 2005/07/03 13:54:23 shorne * Added Initial LID Plugin Support * * Revision 1.6 2005/06/07 03:22:22 csoutheren * Added patch 1198741 with support for plugin codecs with generic capabilities * Added patch 1198754 with support for setting quality level on audio codecs * Added patch 1198760 with GSM-AMR codec support * Many thanks to Richard van der Hoff for his work * * Revision 1.5 2004/12/20 23:30:20 csoutheren * Added plugin support for packet loss concealment frames * * Revision 1.4 2004/11/29 06:30:53 csoutheren * Added support for wideband codecs * * Revision 1.3 2004/05/18 22:26:28 csoutheren * Initial support for embedded codecs * Fixed problems with streamed codec support * Updates for abstract factory loading methods * * Revision 1.2 2004/05/09 14:44:36 csoutheren * Added support for streamed plugin audio codecs * * Revision 1.1 2004/04/09 12:25:25 csoutheren * Renamed from h323plugin.h * * Revision 1.2 2004/04/03 10:38:24 csoutheren * Added in initial cut at codec plugin code. Branches are for wimps :) * * Revision 1.1.2.1 2004/03/31 11:03:16 csoutheren * Initial public version * * Revision 1.8 2004/02/23 13:17:32 craigs * Fixed problems with codec interface functions * * Revision 1.7 2004/02/23 13:04:09 craigs * Removed warnings when compliing plugins * * Revision 1.6 2004/01/27 14:55:46 craigs * Implemented static linking of new codecs * * Revision 1.5 2004/01/23 05:21:15 craigs * Updated for changes to the codec plugin interface * * Revision 1.4 2004/01/09 11:27:46 craigs * Plugin codec audio now works :) * * Revision 1.3 2004/01/09 07:32:22 craigs * More fixes for capability problems * * Revision 1.2 2004/01/06 07:05:03 craigs * Changed to support plugin codecs * * Revision 1.1 2004/01/04 13:37:51 craigs * Implementation of codec plugins * * */ #ifndef __OPAL_CODECPLUGIN_H #define __OPAL_CODECPLUGIN_H #ifdef __cplusplus extern "C" { #endif #include // indicator the this is h323plus version of the plugin codec #define h323pluslib 1 #ifdef _MSC_VER #pragma warning(disable:4201) #endif #ifdef _WIN32 # ifdef PLUGIN_CODEC_DLL_EXPORTS # define PLUGIN_CODEC_DLL_API __declspec(dllexport) # else # define PLUGIN_CODEC_DLL_API __declspec(dllimport) # endif #else #define PLUGIN_CODEC_DLL_API #endif #ifdef PWLIB_PLUGIN_API_VERSION #undef PWLIB_PLUGIN_API_VERSION #endif #define PWLIB_PLUGIN_API_VERSION 1 #define PLUGIN_CODEC_VERSION 1 // initial version #define PLUGIN_CODEC_VERSION_WIDEBAND 2 // added wideband #define PLUGIN_CODEC_VERSION_VIDEO 3 // added video #define PLUGIN_CODEC_VERSION_FAX 4 // added fax #define PLUGIN_CODEC_VERSION_OPTIONS 5 // added options handling #define PLUGIN_CODEC_API_VER_FN PWLibPlugin_GetAPIVersion #define PLUGIN_CODEC_API_VER_FN_STR "PWLibPlugin_GetAPIVersion" #define PLUGIN_CODEC_GET_CODEC_FN OpalCodecPlugin_GetCodecs #define PLUGIN_CODEC_GET_CODEC_FN_STR "OpalCodecPlugin_GetCodecs" #define PLUGIN_CODEC_API_VER_FN_DECLARE \ PLUGIN_CODEC_DLL_API unsigned int PLUGIN_CODEC_API_VER_FN() \ { return PWLIB_PLUGIN_API_VERSION; } enum { PluginCodec_License_None = 0, PluginCodec_Licence_None = PluginCodec_License_None, // allow for old code with misspelled constant PluginCodec_License_GPL = 1, PluginCodec_License_MPL = 2, PluginCodec_License_Freeware = 3, PluginCodec_License_ResearchAndDevelopmentUseOnly = 4, PluginCodec_License_BSD = 5, PluginCodec_License_LGPL = 6, PluginCodec_License_NoRoyalties = 0x7f, // any license codes above here require royalty payments PluginCodec_License_RoyaltiesRequired = 0x80 }; struct PluginCodec_information { // start of version 1 fields time_t timestamp; // codec creation time and date - obtain with command: date -u "+%c = %s" const char * sourceAuthor; // source code author const char * sourceVersion; // source code version const char * sourceEmail; // source code email contact information const char * sourceURL; // source code web site const char * sourceCopyright; // source code copyright const char * sourceLicense; // source code license unsigned char sourceLicenseCode; // source code license const char * codecDescription; // codec description const char * codecAuthor; // codec author const char * codecVersion; // codec version const char * codecEmail; // codec email contact information const char * codecURL; // codec web site const char * codecCopyright; // codec copyright information const char * codecLicense; // codec license unsigned short codecLicenseCode; // codec license code // end of version 1 fields }; enum PluginCodec_Flags { PluginCodec_MediaTypeMask = 0x000f, PluginCodec_MediaTypeAudio = 0x0000, PluginCodec_MediaTypeVideo = 0x0001, PluginCodec_MediaTypeAudioStreamed = 0x0002, PluginCodec_MediaTypeFax = 0x0003, PluginCodec_MediaTypeExtended = 0x0005, PluginCodec_InputTypeMask = 0x0010, PluginCodec_InputTypeRaw = 0x0000, PluginCodec_InputTypeRTP = 0x0010, PluginCodec_OutputTypeMask = 0x0020, PluginCodec_OutputTypeRaw = 0x0000, PluginCodec_OutputTypeRTP = 0x0020, PluginCodec_RTPTypeMask = 0x0040, PluginCodec_RTPTypeDynamic = 0x0000, PluginCodec_RTPTypeExplicit = 0x0040, PluginCodec_RTPSharedMask = 0x0080, PluginCodec_RTPTypeNotShared = 0x0000, PluginCodec_RTPTypeShared = 0x0080, PluginCodec_DecodeSilenceMask = 0x0100, PluginCodec_NoDecodeSilence = 0x0000, PluginCodec_DecodeSilence = 0x0100, PluginCodec_EncodeSilenceMask = 0x0200, PluginCodec_NoEncodeSilence = 0x0000, PluginCodec_EncodeSilence = 0x0200, PluginCodec_MediaExtensionMask = 0x0400, PluginCodec_MediaTypeExtVideo = 0x0400, PluginCodec_MediaTypeH239 = 0x0401, PluginCodec_ComfortNoiseMask = 0x0800, PluginCodec_ComfortNoise = 0x0800, PluginCodec_EmptyPayloadMask = 0x1000, PluginCodec_EmptyPayload = 0x1000, PluginCodec_OtherPayloadMask = 0x2000, PluginCodec_OtherPayload = 0x2000, PluginCodec_BitsPerSamplePos = 12, PluginCodec_BitsPerSampleMask = 0xf000, }; enum PluginCodec_CoderFlags { PluginCodec_CoderSilenceFrame = 1, // request audio codec to create silence frame PluginCodec_CoderForceIFrame = 2 // request video codec to force I frame }; enum PluginCodec_ReturnCoderFlags { PluginCodec_ReturnCoderLastFrame = 1, // indicates when video codec returns last data for frame PluginCodec_ReturnCoderIFrame = 2, // indicates when video returns I frame PluginCodec_ReturnCoderRequestIFrame = 4, // indicates when video decoder request I frame for resync PluginCodec_ReturnCoderBufferTooSmall = 8, // indicates when output buffer is not large enough to receive // the data, another call to get_output_data_size is required PluginCodec_ReturnCoderMoreFrame = 16 // indicates that the decoder need to output more frame }; struct PluginCodec_Definition; // Control function names #define PLUGINCODEC_CONTROL_VALID_FOR_PROTOCOL "valid_for_protocol" #define PLUGINCODEC_CONTROL_GET_CODEC_OPTIONS "get_codec_options" #define PLUGINCODEC_CONTROL_FREE_CODEC_OPTIONS "free_codec_options" #define PLUGINCODEC_CONTROL_GET_OUTPUT_DATA_SIZE "get_output_data_size" #define PLUGINCODEC_CONTROL_SET_CODEC_OPTIONS "set_codec_options" #define PLUGINCODEC_CONTROL_TO_NORMALISED_OPTIONS "to_normalised_options" #define PLUGINCODEC_CONTROL_TO_CUSTOMISED_OPTIONS "to_customised_options" #define PLUGINCODEC_CONTROL_SET_INSTANCE_ID "set_instance_id" #define PLUGINCODEC_CONTROL_SET_LOG_FUNCTION "set_log_function" #define PLUGINCODEC_CONTROL_GET_STATISTICS "get_statistics" #define PLUGINCODEC_CONTROL_TERMINATE_CODEC "terminate_codec" #define PLUGINCODEC_CONTROL_CODEC_EVENT "event_codec" #define PLUGINCODEC_CONTROL_FLOW_OPTIONS "to_flowcontrol_options" #define PLUGINCODEC_CONTROL_SET_FORMAT_OPTIONS "set_format_options" /* Log function, plug in gets a pointer to this function which allows it to use the standard OPAL logging system. The function returns 0 if no logging was performed due to the log level. Note if log == NULL then this return state is all that happens, so this may be executed first to prevent lengthy logs that would not result in any output. */ typedef int (*PluginCodec_LogFunction)(unsigned level, const char * file, unsigned line, const char * section, const char * log); struct PluginCodec_ControlDefn { const char * name; int (*control)(const struct PluginCodec_Definition * codec, void * context, const char * name, void * parm, unsigned * parmLen); }; enum PluginCodec_OptionTypes { PluginCodec_StringOption, PluginCodec_BoolOption, PluginCodec_IntegerOption, PluginCodec_RealOption, PluginCodec_EnumOption, PluginCodec_OctetsOption, PluginCodec_NumOptionTypes, }; enum PluginCodec_OptionMerge { PluginCodec_NoMerge, PluginCodec_MinMerge, PluginCodec_MaxMerge, PluginCodec_EqualMerge, PluginCodec_NotEqualMerge, PluginCodec_AlwaysMerge, PluginCodec_CustomMerge, PluginCodec_NumOptionMerge, PluginCodec_AndMerge = PluginCodec_MinMerge, PluginCodec_OrMerge = PluginCodec_MaxMerge }; #define PluginCodec_H245_Collapsing 0x40000000 #define PluginCodec_H245_NonCollapsing 0x20000000 #define PluginCodec_H245_Unsigned32 0x10000000 #define PluginCodec_H245_BooleanArray 0x08000000 #define PluginCodec_H245_TCS 0x04000000 #define PluginCodec_H245_OLC 0x02000000 #define PluginCodec_H245_ReqMode 0x01000000 #define PluginCodec_H245_OrdinalMask 0x0000ffff typedef int (*PluginCodec_MergeFunction)(char ** result, const char * dest, const char * src); typedef void (*PluginCodec_FreeFunction)(char * string); struct PluginCodec_Option { // start of version 4 fields enum PluginCodec_OptionTypes m_type; const char * m_name; unsigned m_readOnly; enum PluginCodec_OptionMerge m_merge; const char * m_value; const char * m_FMTPName; const char * m_FMTPDefault; int m_H245Generic; const char * m_minimum; const char * m_maximum; PluginCodec_MergeFunction m_mergeFunction; // Used if m_merge==PluginCodec_CustomMerge PluginCodec_FreeFunction m_freeFunction; }; // Normalised option names #define PLUGINCODEC_OPTION_NEEDS_JITTER "Needs Jitter" #define PLUGINCODEC_OPTION_CLOCK_RATE "Clock Rate" #define PLUGINCODEC_OPTION_FRAME_TIME "Frame Time" #define PLUGINCODEC_OPTION_MAX_FRAME_SIZE "Max Frame Size" #define PLUGINCODEC_OPTION_MAX_BIT_RATE "Max Bit Rate" #define PLUGINCODEC_OPTION_TARGET_BIT_RATE "Target Bit Rate" #define PLUGINCODEC_OPTION_RX_FRAMES_PER_PACKET "Rx Frames Per Packet" #define PLUGINCODEC_OPTION_TX_FRAMES_PER_PACKET "Tx Frames Per Packet" #define PLUGINCODEC_OPTION_FRAME_WIDTH "Frame Width" #define PLUGINCODEC_OPTION_FRAME_HEIGHT "Frame Height" #define PLUGINCODEC_OPTION_MIN_RX_FRAME_WIDTH "Min Rx Frame Width" #define PLUGINCODEC_OPTION_MIN_RX_FRAME_HEIGHT "Min Rx Frame Height" #define PLUGINCODEC_OPTION_MAX_RX_FRAME_WIDTH "Max Rx Frame Width" #define PLUGINCODEC_OPTION_MAX_RX_FRAME_HEIGHT "Max Rx Frame Height" #define PLUGINCODEC_OPTION_TEMPORAL_SPATIAL_TRADE_OFF "Temporal Spatial Trade Off" #define PLUGINCODEC_OPTION_TX_KEY_FRAME_PERIOD "Tx Key Frame Period" #define PLUGINCODEC_OPTION_CUSTOM_FORMAT "CustomFmt" #define PLUGINCODEC_OPTION_INPUT_FORMAT "InputFmt" // Events #define PLUGINCODEC_EVENT_FASTUPDATE "on_fast_update" #define PLUGINCODEC_EVENT_FLOWCONTROL "on_flow_control" #define PLUGINCODEC_EVENT_LOSTPARTIAL "on_lost_partial" #define PLUGINCODEC_EVENT_LOSTPICTURE "on_lost_picture" // Full definition of the codec struct PluginCodec_Definition { unsigned int version; // codec structure version // start of version 1 fields struct PluginCodec_information * info; // license information unsigned int flags; // b0-3: 0 = audio, 1 = video // b4: 0 = raw input, 1 = RTP input // b5: 0 = raw output, 1 = RTP output // b6: 0 = dynamic RTP, 1 = explicit RTP // b7: 0 = no share RTP, 1 = share RTP const char * descr; // text decription const char * sourceFormat; // source format const char * destFormat; // destination format const void * userData; // user data value unsigned int sampleRate; // samples per second unsigned int bitsPerSec; // raw bits per second unsigned int usPerFrame; // microseconds per frame union _parm { struct _audio { unsigned int samplesPerFrame; // audio: samples per frame unsigned int bytesPerFrame; // audio: max bytes per frame unsigned int recommendedFramesPerPacket; // audio: recommended number of frames per packet unsigned int maxFramesPerPacket; // audio: maximum number of frames per packet } audio; struct _video { unsigned int maxFrameWidth; // video: frame width unsigned int maxFrameHeight; // video: frame height unsigned int recommendedFrameRate; // video: recommended frame rate unsigned int maxFrameRate; // video: max frame rate } video; } parm; unsigned char rtpPayload; // IANA RTP payload code (if defined) const char * sdpFormat; // SDP format string (or NULL, if no SDP format) void * (*createCodec)(const struct PluginCodec_Definition * codec); // create codec void (*destroyCodec) (const struct PluginCodec_Definition * codec, void * context); // destroy codec int (*codecFunction) (const struct PluginCodec_Definition * codec, void * context, // do codec function const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag); struct PluginCodec_ControlDefn * codecControls; // H323 specific fields unsigned char h323CapabilityType; const void * h323CapabilityData; // end of version 1 fields // NOTE!!!!! Due to an error in judgement, you cannot add ANY more fields // to this structure without an API version change!!!! }; typedef struct PluginCodec_Definition * (* PluginCodec_GetCodecFunction)(unsigned int *, unsigned int); typedef unsigned (* PluginCodec_GetAPIVersionFunction)(); /////////////////////////////////////////////////////////////////// // // H.323 specific values // struct PluginCodec_H323CapabilityExtension { unsigned int index; void * data; unsigned dataLength; }; struct PluginCodec_H323NonStandardCodecData { const char * objectId; unsigned char t35CountryCode; unsigned char t35Extension; unsigned short manufacturerCode; const unsigned char * data; unsigned int dataLength; int (*capabilityMatchFunction)(struct PluginCodec_H323NonStandardCodecData *); }; struct PluginCodec_H323GenericParameterDefinition { /* The following used to be a simple integer for the collapsing flag in version 3 and earlier. We hope that all those implementations just used zero and one (a good bet) and thus the below bit fields will be backward compatible, putting the parameter in all three PDU types. */ #ifndef SOLARIS struct { #endif int collapsing:1; /* boolean */ int excludeTCS:1; int excludeOLC:1; int excludeReqMode:1; int readOnly:1; #ifndef SOLARIS }; #endif unsigned int id; enum PluginCodec_H323GenericParameterType { /* these need to be in the same order as the choices in H245_ParameterValue::Choices, as the value is just cast to that type */ PluginCodec_GenericParameter_Logical = 0, PluginCodec_GenericParameter_BooleanArray, PluginCodec_GenericParameter_UnsignedMin, PluginCodec_GenericParameter_UnsignedMax, PluginCodec_GenericParameter_Unsigned32Min, PluginCodec_GenericParameter_Unsigned32Max, PluginCodec_GenericParameter_OctetString, PluginCodec_GenericParameter_GenericParameter, PluginCodec_GenericParameter_logical = 0, PluginCodec_GenericParameter_booleanArray, PluginCodec_GenericParameter_unsignedMin, PluginCodec_GenericParameter_unsignedMax, PluginCodec_GenericParameter_unsigned32Min, PluginCodec_GenericParameter_unsigned32Max, PluginCodec_GenericParameter_octetString, PluginCodec_GenericParameter_genericParameter } type; union { unsigned long integer; const char * octetstring; struct PluginCodec_H323GenericParameterDefinition *genericparameter; } value; }; struct PluginCodec_H323GenericCodecData { // some cunning structures & lists, and associated logic in // H323CodecPluginGenericAudioCapability::H323CodecPluginGenericAudioCapability() const char * standardIdentifier; unsigned int maxBitRate; // Zero means use value from OpalMediaFormat /* parameters; these are the parameters which are set in the 'TerminalCapabilitySet' and 'OpenLogicalChannel' requests */ unsigned int nParameters; /* an array of nParameters parameter definitions */ const struct PluginCodec_H323GenericParameterDefinition *params; }; struct PluginCodec_H323AudioGSMData { int comfortNoise:1; int scrambled:1; }; struct PluginCodec_H323AudioG7231AnnexC { unsigned char maxAl_sduAudioFrames; int silenceSuppression:1; int highRateMode0:6; // INTEGER (27..78), -- units octets int highRateMode1:6; // INTEGER (27..78), -- units octets int lowRateMode0:6; // INTEGER (23..66), -- units octets int lowRateMode1:6; // INTEGER (23..66), -- units octets int sidMode0:4; // INTEGER (6..17), -- units octets int sidMode1:4; // INTEGER (6..17), -- units octets }; enum { PluginCodec_H323Codec_undefined, // must be zero, so empty struct is undefined PluginCodec_H323Codec_programmed, // H323ProgrammedCapability PluginCodec_H323Codec_nonStandard, // H323NonStandardData PluginCodec_H323Codec_generic, // H323GenericCodecData // audio codecs PluginCodec_H323AudioCodec_g711Alaw_64k, // int PluginCodec_H323AudioCodec_g711Alaw_56k, // int PluginCodec_H323AudioCodec_g711Ulaw_64k, // int PluginCodec_H323AudioCodec_g711Ulaw_56k, // int PluginCodec_H323AudioCodec_g722_64k, // int PluginCodec_H323AudioCodec_g722_56k, // int PluginCodec_H323AudioCodec_g722_48k, // int PluginCodec_H323AudioCodec_g7231, // H323AudioG7231Data PluginCodec_H323AudioCodec_g728, // int PluginCodec_H323AudioCodec_g729, // int PluginCodec_H323AudioCodec_g729AnnexA, // int PluginCodec_H323AudioCodec_is11172, // not yet implemented PluginCodec_H323AudioCodec_is13818Audio, // not yet implemented PluginCodec_H323AudioCodec_g729wAnnexB, // int PluginCodec_H323AudioCodec_g729AnnexAwAnnexB, // int PluginCodec_H323AudioCodec_g7231AnnexC, // H323AudioG7231AnnexC PluginCodec_H323AudioCodec_gsmFullRate, // H323AudioGSMData PluginCodec_H323AudioCodec_gsmHalfRate, // H323AudioGSMData PluginCodec_H323AudioCodec_gsmEnhancedFullRate, // H323AudioGSMData PluginCodec_H323AudioCodec_g729Extensions, // not yet implemented // video codecs PluginCodec_H323VideoCodec_h261, // implemented PluginCodec_H323VideoCodec_h262, // not yet implemented PluginCodec_H323VideoCodec_h263, // implemented PluginCodec_H323VideoCodec_is11172, // not yet implemented // other capabilities PluginCodec_H323VideoCodec_Extended, // implemented (for use with H.239) PluginCodec_H323T38Codec, // not yet implemented // special codes PluginCodec_H323Codec_NoH323 = 0xff, // used for SIP-only codecs }; ///////////////// // // Generic Codec Standard Identifiers // // Audio Capabilities // AMR (as defined in H.245v13 Annex I) #define OpalPluginCodec_Identifer_AMR "0.0.8.245.1.1.1" // AMR-NB\WB (as defined in H.245v13 Annex R) #define OpalPluginCodec_Identifer_AMR_NB "0.0.8.245.1.1.9" #define OpalPluginCodec_Identifer_AMR_WB "0.0.8.245.1.1.10" // G.722.1 #define OpalPluginCodec_Identifer_G7221 "0.0.7.7221.1.0" #define OpalPluginCodec_Identifer_G7221ext "0.0.7.7221.1.1.0" // G.722.2 (aka AMR-WB) #define OpalPluginCodec_Identifer_G7222 "0.0.7.7222.1.0" // iLBC (as defined in H.245v13 Annex S) #define OpalPluginCodec_Identifer_iLBC "0.0.8.245.1.1.11" // Video Capabilities // H264 (as defined in H.241) #define OpalPluginCodec_Identifer_H264_Aligned "0.0.8.241.0.0.0.0" #define OpalPluginCodec_Identifer_H264_NonInterleaved "0.0.8.241.0.0.0.1" #define OpalPluginCodec_Identifer_H264_Interleaved "0.0.8.241.0.0.0.2" #define OpalPluginCodec_Identifer_H264_Generic "0.0.8.241.0.0.1" // ISO/IEC 14496-2 MPEG4 part 2 (as defined in H.245v13 Annex E) #define OpalPluginCodec_Identifer_MPEG4 "0.0.8.245.1.0.0" // Extended Video Capability (as defined in H.239) #define OpalPluginCodec_Identifer_H239 "0.0.8.239.1.1" #define OpalPluginCodec_Identifer_H239_Video "0.0.8.239.1.2" #define OpalPluginCodec_Identifer_H239_GenericMessage "0.0.8.239.2" ///////////////// // // Predefined options for H.323 codecs // #define PLUGINCODEC_SQCIF_MPI "SQCIF MPI" #define PLUGINCODEC_QCIF_MPI "QCIF MPI" #define PLUGINCODEC_CIF_MPI "CIF MPI" #define PLUGINCODEC_CIF4_MPI "CIF4 MPI" #define PLUGINCODEC_CIF16_MPI "CIF16 MPI" #define PLUGINCODEC_480P_MPI "480 MPI" #define PLUGINCODEC_n720P_MPI "n720 MPI" #define PLUGINCODEC_w720P_MPI "w720 MPI" #define PLUGINCODEC_w1080P_MPI "w1080 MPI" #define PLUGINCODEC_CUSTOM_MPI "Custom MPI" #define PLUGINCODEC_MPI_DISABLED 33 #define PLUGINCODEC_MEDIA_PACKETIZATION "Media Packetization" #define PLUGINCODEC_MEDIA_PACKETIZATIONS "Media Packetizations" #define H261_ANNEX_D "Annex D - Still Image Transmit" #define H263_ANNEX_F "Annex F - Advanced Prediction" #define H263_ANNEX_I "Annex I - Advanced INTRA Coding" #define H263_ANNEX_J "Annex J - Deblocking Filter" #define H263_ANNEX_T "Annex T - Modified Quantization" #define H263_EXPLICIT_MATCH "H263 Exact" #ifndef STRINGIZE #define __INTERNAL_STRINGIZE__(v) #v #define STRINGIZE(v) __INTERNAL_STRINGIZE__(v) #endif ///////////////// // // RTP specific definitions // #define PluginCodec_RTP_MaxPacketSize (1518-14-4-8-20-16) // Max Ethernet packet (1518 bytes) minus 802.3/CRC, 802.3, IP, UDP headers #define PluginCodec_RTP_MinHeaderSize (12) #define PluginCodec_RTP_MaxPayloadSize (PluginCodec_RTP_MaxPacketSize - PluginCodec_RTP_MinHeaderSize) #define PluginCodec_RTP_GetHeaderLength(ptr) ((((unsigned char*)(ptr))[0] & 0x0f)*4 + PluginCodec_RTP_MinHeaderSize) #define PluginCodec_RTP_GetPayloadPtr(ptr) ((unsigned char*)(ptr) + PluginCodec_RTP_GetHeaderLength(ptr)) #define PluginCodec_RTP_GetPayloadType(ptr) (((unsigned char*)(ptr))[1] & 0x7f) #define PluginCodec_RTP_SetPayloadType(ptr, type) (((unsigned char*)(ptr))[1] = (((unsigned char*)(ptr))[1] & 0x80) | (type & 0x7f)) #define PluginCodec_RTP_GetMarker(ptr) ((((unsigned char*)(ptr))[1] & 0x80) != 0) #define PluginCodec_RTP_SetMarker(ptr, mark) (((unsigned char*)(ptr))[1] = (((unsigned char*)(ptr))[1] & 0x7f) | (mark != 0 ? 0x80 : 0)) #define PluginCodec_RTP_GetTimestamp(ptr) ((((unsigned char*)(ptr))[4] << 24) | (((unsigned char*)(ptr))[5] << 16) | (((unsigned char*)(ptr))[6] << 8) | ((unsigned char*)(ptr))[7]) #define PluginCodec_RTP_SetTimestamp(ptr, ts) ((((unsigned char*)(ptr))[4] = ((ts) >> 24)),(((unsigned char*)(ptr))[5] = ((ts) >> 16)),(((unsigned char*)(ptr))[6] = ((ts) >> 8)),(((unsigned char*)(ptr))[7] = (ts))) #define PluginCodec_RTP_GetSequenceNumber(ptr) ((((unsigned char*)(ptr))[2] << 8) | ((unsigned char*)(ptr))[3]) #define PluginCodec_RTP_SetSequenceNumber(ptr, sn)((((unsigned char*)(ptr))[2] = ((sn) >> 8)),(((unsigned char*)(ptr))[3] = (sn))) ///////////////// // // video specific definitions // struct PluginCodec_Video_FrameHeader { unsigned int x; unsigned int y; unsigned int width; unsigned int height; }; #ifdef __cplusplus }; inline unsigned char * OPAL_VIDEO_FRAME_DATA_PTR(struct PluginCodec_Video_FrameHeader * base) { return (((unsigned char *)base) + sizeof(PluginCodec_Video_FrameHeader)); } inline unsigned char * OPAL_VIDEO_FRAME_DATA_PTR(const PluginCodec_Video_FrameHeader * base) { return (((unsigned char *)base) + sizeof(PluginCodec_Video_FrameHeader)); } extern "C" { #endif #define PLUGIN_CODEC_VIDEO_SET_FRAME_SIZE_FN "set_frame_size" // argument is struct PluginCodec_VideoSetFrameInfo struct PluginCodec_Video_SetFrameInfo { int width; int height; }; ///////////////// // // experimental definitions for statically linking codecs // #ifdef OPAL_STATIC_CODEC # undef PLUGIN_CODEC_DLL_API # define PLUGIN_CODEC_DLL_API static # define PLUGIN_CODEC_IMPLEMENT(name) \ unsigned int Opal_StaticCodec_##name##_GetAPIVersion() \ { return PWLIB_PLUGIN_API_VERSION; } \ static struct PluginCodec_Definition * PLUGIN_CODEC_GET_CODEC_FN(unsigned * count, unsigned /*version*/); \ struct PluginCodec_Definition * Opal_StaticCodec_##name##_GetCodecs(unsigned * p1, unsigned p2) \ { return PLUGIN_CODEC_GET_CODEC_FN(p1,p2); } \ # define PLUGIN_CODEC_IMPLEMENT_ALL(name, table, ver) \ unsigned int Opal_StaticCodec_##name##_GetAPIVersion() \ { return PWLIB_PLUGIN_API_VERSION; } \ PLUGIN_CODEC_DLL_API struct PluginCodec_Definition * Opal_StaticCodec_##name##_GetCodecs(unsigned * count, unsigned version) \ { *count = sizeof(table)/sizeof(struct PluginCodec_Definition); return version < ver ? NULL : table; } #else # define PLUGIN_CODEC_IMPLEMENT(name) \ PLUGIN_CODEC_DLL_API unsigned int PLUGIN_CODEC_API_VER_FN() \ { return PWLIB_PLUGIN_API_VERSION; } \ # define PLUGIN_CODEC_IMPLEMENT_ALL(name, table, ver) \ PLUGIN_CODEC_IMPLEMENT(name) \ PLUGIN_CODEC_DLL_API struct PluginCodec_Definition * PLUGIN_CODEC_GET_CODEC_FN(unsigned * count, unsigned version) \ { *count = sizeof(table)/sizeof(struct PluginCodec_Definition); return version < ver ? NULL : table; } #endif #ifdef __cplusplus }; #endif #ifdef _MSC_VER #pragma warning(default:4201) #endif #endif // __OPAL_CODECPLUGIN_H h323plus/include/h460/0000755000175000017500000000000011672616560013225 5ustar markmarkh323plus/include/h460/h46019.h0000644000175000017500000000253611015524226014223 0ustar markmark// // h46019.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H46019 #ifndef __H46019_H #define __H46019_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "h225.h" #include "h245.h" // // TraversalParameters // class H46019_TraversalParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H46019_TraversalParameters, PASN_Sequence); #endif public: H46019_TraversalParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_multiplexedMediaChannel, e_multiplexedMediaControlChannel, e_multiplexID, e_keepAliveChannel, e_keepAlivePayloadType, e_keepAliveInterval }; H245_TransportAddress m_multiplexedMediaChannel; H245_TransportAddress m_multiplexedMediaControlChannel; PASN_Integer m_multiplexID; H245_TransportAddress m_keepAliveChannel; PASN_Integer m_keepAlivePayloadType; H225_TimeToLive m_keepAliveInterval; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H46019_H #endif // if ! H323_DISABLE_H46019 // End of h46019.h h323plus/include/h460/h460.h0000644000175000017500000000612610655704653014065 0ustar markmark// H460.h: /* * Virteos H.460 Implementation for the h323plus Library. * * Virteos is a Trade Mark of ISVO (Asia) Pte Ltd. * * Copyright (c) 2004 ISVO (Asia) Pte Ltd. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is derived from and used in conjunction with the * OpenH323 Project (www.openh323.org/) * * The Initial Developer of the Original Code is ISVO (Asia) Pte Ltd. * * * Contributor(s): ______________________________________. * * $Log: h460.h,v $ * Revision 1.1 2007/08/06 20:50:51 shorne * First commit of h323plus * * * */ #ifdef P_USE_PRAGMA #pragma interface #endif class H460_MessageType { public: enum { e_gatekeeperRequest = 0xf0, e_gatekeeperConfirm = 0xf1, e_gatekeeperReject = 0xf2, e_registrationRequest = 0xf3, e_registrationConfirm = 0xf4, e_registrationReject = 0xf5, e_admissionRequest = 0xf6, e_admissionConfirm = 0xf7, e_admissionReject = 0xf8, e_locationRequest = 0xf9, e_locationConfirm = 0xfa, e_locationReject = 0xfb, e_nonStandardMessage = 0xfc, e_serviceControlIndication = 0xfd, e_serviceControlResponse = 0xfe, e_unregistrationRequest = 0xe0, e_inforequest = 0xe1, e_inforequestresponse = 0xe2, e_disengagerequest = 0xe3, e_disengageconfirm = 0xe4, e_setup = 0x05, // Match Q931 message id e_callProceeding = 0x02, // Match Q931 message id e_connect = 0x07, // Match Q931 message id e_alerting = 0x01, // Match Q931 message id e_facility = 0x62, // Match Q931 message id e_releaseComplete = 0x5a, // Match Q931 message id e_unallocated = 0xff }; }; h323plus/include/h460/h46024b.h0000644000175000017500000000423511653372226014370 0ustar markmark// // H46024B.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H46024B #ifndef __H46024B_H #define __H46024B_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "h245.h" // // AlternateAddress // class H46024B_AlternateAddress : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H46024B_AlternateAddress, PASN_Sequence); #endif public: H46024B_AlternateAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_rtpAddress, e_rtcpAddress, e_multiplexID }; PASN_Integer m_sessionID; H245_TransportAddress m_rtpAddress; H245_TransportAddress m_rtcpAddress; PASN_Integer m_multiplexID; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_AlternateAddress // class H46024B_AlternateAddress; class H46024B_ArrayOf_AlternateAddress : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H46024B_ArrayOf_AlternateAddress, PASN_Array); #endif public: H46024B_ArrayOf_AlternateAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H46024B_AlternateAddress & operator[](PINDEX i) const; PObject * Clone() const; }; // // AlternateAddresses // class H46024B_AlternateAddresses : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H46024B_AlternateAddresses, PASN_Sequence); #endif public: H46024B_AlternateAddresses(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H46024B_ArrayOf_AlternateAddress m_addresses; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H46024B_H #endif // if ! H323_DISABLE_H46024B // End of H46024B.h h323plus/include/h460/h46017a.h0000644000175000017500000000325411561716521014367 0ustar markmark// // h46017a.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H46017A #ifndef __H46017A_H #define __H46017A_H #ifdef P_USE_PRAGMA #pragma interface #endif #include // // FrameData // class H46017A_FrameData : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H46017A_FrameData, PASN_Choice); #endif public: H46017A_FrameData(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_rtp, e_rtcp }; PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_FrameData // class H46017A_FrameData; class H46017A_ArrayOf_FrameData : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H46017A_ArrayOf_FrameData, PASN_Array); #endif public: H46017A_ArrayOf_FrameData(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H46017A_FrameData & operator[](PINDEX i) const; PObject * Clone() const; }; // // UDPFrame // class H46017A_UDPFrame : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H46017A_UDPFrame, PASN_Sequence); #endif public: H46017A_UDPFrame(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_sessionId; PASN_Boolean m_dataFrame; H46017A_ArrayOf_FrameData m_frame; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H46017A_H #endif // if ! H323_DISABLE_H46017A // End of h46017a.h h323plus/include/h460/h4609.h0000644000175000017500000002436411015524227014146 0ustar markmark// // h4609.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H4609 #ifndef __H4609_H #define __H4609_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "h225.h" // // EstimatedEnd2EndDelay // class H4609_EstimatedEnd2EndDelay : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4609_EstimatedEnd2EndDelay, PASN_Integer); #endif public: H4609_EstimatedEnd2EndDelay(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H4609_EstimatedEnd2EndDelay & operator=(int v); H4609_EstimatedEnd2EndDelay & operator=(unsigned v); PObject * Clone() const; }; // // CalculatedJitter // class H4609_CalculatedJitter : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4609_CalculatedJitter, PASN_Integer); #endif public: H4609_CalculatedJitter(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H4609_CalculatedJitter & operator=(int v); H4609_CalculatedJitter & operator=(unsigned v); PObject * Clone() const; }; // // Extension // class H4609_Extension : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4609_Extension, PASN_Sequence); #endif public: H4609_Extension(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extensionContent }; H225_GenericIdentifier m_extensionId; PASN_OctetString m_extensionContent; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // QosMonitoringReportData // class H4609_PeriodicQoSMonReport; class H4609_FinalQosMonReport; class H4609_InterGKQosMonReport; class H4609_QosMonitoringReportData : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4609_QosMonitoringReportData, PASN_Choice); #endif public: H4609_QosMonitoringReportData(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_periodic, e_final, e_interGK }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4609_PeriodicQoSMonReport &() const; #else operator H4609_PeriodicQoSMonReport &(); operator const H4609_PeriodicQoSMonReport &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4609_FinalQosMonReport &() const; #else operator H4609_FinalQosMonReport &(); operator const H4609_FinalQosMonReport &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4609_InterGKQosMonReport &() const; #else operator H4609_InterGKQosMonReport &(); operator const H4609_InterGKQosMonReport &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // RTCPMeasures_mediaSenderMeasures // class H4609_RTCPMeasures_mediaSenderMeasures : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4609_RTCPMeasures_mediaSenderMeasures, PASN_Sequence); #endif public: H4609_RTCPMeasures_mediaSenderMeasures(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_worstEstimatedEnd2EndDelay, e_meanEstimatedEnd2EndDelay }; H4609_EstimatedEnd2EndDelay m_worstEstimatedEnd2EndDelay; H4609_EstimatedEnd2EndDelay m_meanEstimatedEnd2EndDelay; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RTCPMeasures_mediaReceiverMeasures // class H4609_RTCPMeasures_mediaReceiverMeasures : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4609_RTCPMeasures_mediaReceiverMeasures, PASN_Sequence); #endif public: H4609_RTCPMeasures_mediaReceiverMeasures(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_cumulativeNumberOfPacketsLost, e_packetLostRate, e_worstJitter, e_estimatedThroughput, e_fractionLostRate, e_meanJitter }; PASN_Integer m_cumulativeNumberOfPacketsLost; PASN_Integer m_packetLostRate; H4609_CalculatedJitter m_worstJitter; H225_BandWidth m_estimatedThroughput; PASN_Integer m_fractionLostRate; H4609_CalculatedJitter m_meanJitter; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_Extension // class H4609_Extension; class H4609_ArrayOf_Extension : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4609_ArrayOf_Extension, PASN_Array); #endif public: H4609_ArrayOf_Extension(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H4609_Extension & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_RTCPMeasures // class H4609_RTCPMeasures; class H4609_ArrayOf_RTCPMeasures : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4609_ArrayOf_RTCPMeasures, PASN_Array); #endif public: H4609_ArrayOf_RTCPMeasures(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H4609_RTCPMeasures & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_PerCallQoSReport // class H4609_PerCallQoSReport; class H4609_ArrayOf_PerCallQoSReport : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4609_ArrayOf_PerCallQoSReport, PASN_Array); #endif public: H4609_ArrayOf_PerCallQoSReport(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H4609_PerCallQoSReport & operator[](PINDEX i) const; PObject * Clone() const; }; // // RTCPMeasures // class H4609_RTCPMeasures : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4609_RTCPMeasures, PASN_Sequence); #endif public: H4609_RTCPMeasures(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_mediaSenderMeasures, e_mediaReceiverMeasures, e_extensions }; H225_TransportChannelInfo m_rtpAddress; H225_TransportChannelInfo m_rtcpAddress; PASN_Integer m_sessionId; H225_NonStandardParameter m_nonStandardData; H4609_RTCPMeasures_mediaSenderMeasures m_mediaSenderMeasures; H4609_RTCPMeasures_mediaReceiverMeasures m_mediaReceiverMeasures; H4609_ArrayOf_Extension m_extensions; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PerCallQoSReport // class H4609_PerCallQoSReport : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4609_PerCallQoSReport, PASN_Sequence); #endif public: H4609_PerCallQoSReport(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_mediaChannelsQoS, e_extensions }; H225_NonStandardParameter m_nonStandardData; H225_CallReferenceValue m_callReferenceValue; H225_ConferenceIdentifier m_conferenceID; H225_CallIdentifier m_callIdentifier; H4609_ArrayOf_RTCPMeasures m_mediaChannelsQoS; H4609_ArrayOf_Extension m_extensions; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PeriodicQoSMonReport // class H4609_PeriodicQoSMonReport : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4609_PeriodicQoSMonReport, PASN_Sequence); #endif public: H4609_PeriodicQoSMonReport(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extensions }; H4609_ArrayOf_PerCallQoSReport m_perCallInfo; H4609_ArrayOf_Extension m_extensions; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // FinalQosMonReport // class H4609_FinalQosMonReport : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4609_FinalQosMonReport, PASN_Sequence); #endif public: H4609_FinalQosMonReport(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_extensions }; H4609_ArrayOf_RTCPMeasures m_mediaInfo; H225_NonStandardParameter m_nonStandardData; H4609_ArrayOf_Extension m_extensions; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // InterGKQosMonReport // class H4609_InterGKQosMonReport : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4609_InterGKQosMonReport, PASN_Sequence); #endif public: H4609_InterGKQosMonReport(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_extensions }; H4609_ArrayOf_RTCPMeasures m_mediaInfo; H225_NonStandardParameter m_nonStandardData; H4609_ArrayOf_Extension m_extensions; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H4609_H #endif // if ! H323_DISABLE_H4609 // End of h4609.h h323plus/include/h460/h460tm.h0000644000175000017500000000263311015524241014405 0ustar markmark// // h460tm.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H460TM #ifndef __H460TM_H #define __H460TM_H #ifdef P_USE_PRAGMA #pragma interface #endif #include // // TMmode // class H460TM_TMmode : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460TM_TMmode, PASN_Enumeration); #endif public: H460TM_TMmode(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_tmOpen = 1, e_tmPublic, e_tmPrivate, e_tmBroadcast, e_tmReceive }; H460TM_TMmode & operator=(unsigned v); PObject * Clone() const; }; // // MultipointTM // class H460TM_MultipointTM : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460TM_MultipointTM, PASN_Sequence); #endif public: H460TM_MultipointTM(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_sender, e_receiver }; PASN_BMPString m_message; PASN_Integer m_sender; PASN_Integer m_receiver; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H460TM_H #endif // if ! H323_DISABLE_H460TM // End of h460tm.h h323plus/include/h460/h46018_h225.h0000644000175000017500000005534711661722451015001 0ustar markmark/* * h46018_h225.h * * H.460.18 H225 NAT Traversal class. * * h323plus library * * Copyright (c) 2008 ISVO (Asia) Pte. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * Portions of this code were written with the assisance of funding from * triple-IT. http://www.triple-it.nl. * * Contributor(s): ______________________________________. * * $Id: h46018_h225.h,v 1.23 2011/11/19 12:46:33 willamowius Exp $ * */ #ifndef H46018_NAT #define H46018_NAT #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "h323pdu.h" class H46018SignalPDU : public H323SignalPDU { public: /**@name Construction */ //@{ /** Default Contructor This creates a H.225.0 SignalPDU to notify the server that the opened TCP socket is for the call with the callidentifier specified */ H46018SignalPDU(const OpalGloballyUniqueID & callIdentifier); //@} }; class H323EndPoint; class H46018Handler; class H46018Transport : public H323TransportTCP { PCLASSINFO(H46018Transport, H323TransportTCP); public: enum PDUType { e_raw, }; /**@name Construction */ //@{ /**Create a new transport channel. */ H46018Transport( H323EndPoint & endpoint, /// H323 End Point object PIPSocket::Address binding /// Bind Interface ); ~H46018Transport(); //@} /**@name Functions */ //@{ /**Write a protocol data unit from the transport. This will write using the transports mechanism for PDU boundaries, for example UDP is a single Write() call, while for TCP there is a TPKT header that indicates the size of the PDU. */ virtual PBoolean WritePDU( const PBYTEArray & pdu /// PDU to write ); /**Read a protocol data unit from the transport. This will read using the transports mechanism for PDU boundaries, for example UDP is a single Read() call, while for TCP there is a TPKT header that indicates the size of the PDU. */ virtual PBoolean ReadPDU( PBYTEArray & pdu /// PDU to Read ); //@} /**@name NAT Functions */ //@{ /**HandleH46018SignallingChannelPDU Handle the H46018 Signalling channel */ PBoolean HandleH46018SignallingChannelPDU(PThread * thread); /**HandleH46018SignallingSocket Handle the H46018 Signalling socket */ PBoolean HandleH46018SignallingSocket(H323SignalPDU & pdu); /**InitialPDU Send the initialising PDU for the call with the specified callidentifer */ PBoolean InitialPDU(const OpalGloballyUniqueID & callIdentifier); /**isCall Do we have a call connected? */ PBoolean isCall() { return isConnected; }; /**ConnectionLost Set the connection as being lost */ void ConnectionLost(PBoolean established); /**IsConnectionLost Is the connection lost? */ PBoolean IsConnectionLost(); //@} // Overrides /**Connect to the remote party. */ virtual PBoolean Connect(const OpalGloballyUniqueID & callIdentifier); /**Close the channel.(Don't do anything) */ virtual PBoolean Close(); virtual PBoolean IsListening() const; virtual PBoolean IsOpen () const; PBoolean CloseTransport() { return closeTransport; }; protected: PMutex connectionsMutex; PMutex WriteMutex; PMutex IntMutex; PTimeInterval ReadTimeOut; PSyncPoint ReadMutex; H46018Handler * Feature; PBoolean isConnected; PBoolean remoteShutDown; PBoolean closeTransport; }; class H323EndPoint; class PNatMethod_H46019; class H46018Handler : public PObject { PCLASSINFO(H46018Handler, PObject); public: H46018Handler(H323EndPoint & ep); ~H46018Handler(); void Enable(); PBoolean IsEnabled(); H323EndPoint * GetEndPoint(); PBoolean CreateH225Transport(const PASN_OctetString & information); #ifdef H323_H46019M void EnableMultiplex(bool enable); #endif #ifdef H323_H46024A void H46024ADirect(bool reply, const PString & token); #endif protected: H323EndPoint & EP; PNatMethod_H46019 * nat; PString lastCallIdentifer; #ifdef H323_H46024A PMutex m_h46024aMutex; bool m_h46024a; #endif private: H323TransportAddress m_address; OpalGloballyUniqueID m_callId; PThread * SocketCreateThread; PDECLARE_NOTIFIER(PThread, H46018Handler, SocketThread); PBoolean m_h46018inOperation; }; #ifdef H323_H46019M typedef map muxSocketMap; class H46019MultiplexSocket; #endif class PNatMethod_H46019 : public PNatMethod { PCLASSINFO(PNatMethod_H46019,PNatMethod); public: /**@name Construction */ //@{ /** Default Contructor */ PNatMethod_H46019(); /** Deconstructor */ ~PNatMethod_H46019(); //@} /**@name General Functions */ //@{ /** AttachEndpoint Attach endpoint reference */ void AttachHandler(H46018Handler * _handler); H46018Handler * GetHandler(); /** GetExternalAddress Get the external address. This function is not used in H46019 */ virtual PBoolean GetExternalAddress( PIPSocket::Address & externalAddress, ///< External address of router const PTimeInterval & maxAge = 1000 ///< Maximum age for caching ); /** CreateSocketPair Create the UDP Socket pair (does nothing) */ virtual PBoolean CreateSocketPair( PUDPSocket * & /*socket1*/, ///< Created DataSocket PUDPSocket * & /*socket2*/, ///< Created ControlSocket const PIPSocket::Address & /*binding*/ ) { return false; } /** CreateSocketPair Create the UDP Socket pair */ virtual PBoolean CreateSocketPair( PUDPSocket * & socket1, ///< Created DataSocket PUDPSocket * & socket2, ///< Created ControlSocket const PIPSocket::Address & binding, void * userData ); /** isAvailable. Returns whether the Nat Method is ready and available in assisting in NAT Traversal. The principal is function is to allow the EP to detect various methods and if a method is detected then this method is available for NAT traversal The Order of adding to the PNstStrategy determines which method is used */ virtual bool IsAvailable(const PIPSocket::Address & address = PIPSocket::GetDefaultIpAny()); /* Set Available This will enable the natMethod to be enabled when opening the sockets */ void SetAvailable(); /** Activate Active/DeActivate the method on a call by call basis */ virtual void Activate(bool act) { active = act; } #ifdef H323_H46019M /** EnableMultiplex Enable Multiplexing for this call */ static void EnableMultiplex(bool enable); /** IsMultiplex Is Multiplexing media */ static PBoolean IsMultiplexed(); /** Get multiplex socket */ static PUDPSocket * & GetMultiplexSocket(bool rtp); /** Register a multiplex socket */ static void RegisterSocket(bool rtp, unsigned id, PUDPSocket * socket); /** Unregister a multiplex socket */ static void UnregisterSocket(bool rtp, unsigned id); /** Start Multiplex listener thread */ void StartMultiplexListener(); #endif /** OpenSocket Create a single UDP Socket */ PBoolean OpenSocket(PUDPSocket & socket, PortInfo & portInfo, const PIPSocket::Address & binding) const; /** GetMethodName Get the NAT method name */ static PStringList GetNatMethodName() { return PStringArray("H46019"); }; virtual PString GetName() const { return GetNatMethodName()[0]; } // All these are virtual and never used. virtual bool GetServerAddress( PIPSocket::Address & address, ///< Address of server WORD & port ///< Port server is using. ) const { return false; } virtual bool GetInterfaceAddress( PIPSocket::Address & internalAddress ) const { return false; } virtual PBoolean CreateSocket( PUDPSocket * & socket, const PIPSocket::Address & binding = PIPSocket::GetDefaultIpAny(), WORD localPort = 0 ) { return false; } virtual RTPSupportTypes GetRTPSupport( PBoolean force = PFalse ///< Force a new check ) { return RTPSupported; } //@} #if PTLIB_VER >= 2110 virtual PString GetServer() const { return PString(); } virtual bool GetServerAddress(PIPSocketAddressAndPort & ) const { return false; } virtual NatTypes GetNatType(bool) { return UnknownNat; } virtual NatTypes GetNatType(const PTimeInterval &) { return UnknownNat; } virtual bool SetServer(const PString &) { return false; } virtual bool Open(const PIPSocket::Address &) { return false; } virtual bool CreateSocket(BYTE component,PUDPSocket * & socket, const PIPSocket::Address & binding = PIPSocket::GetDefaultIpAny(),WORD localPort = 0) { return false; } virtual void SetCredentials(const PString &, const PString &, const PString &) {} #endif protected: /**@name General Functions */ //@{ /** SetConnectionSockets This function sets the socket references in the H323Connection to allow the implementer to add keep-alive info to the sockets */ void SetConnectionSockets(PUDPSocket * data, ///< Data socket PUDPSocket * control, ///< control socket H323Connection::SessionInformation * info ///< session Information ); PBoolean available; ///< Whether this NAT Method is available for call PBoolean active; ///< Whether the method is active for call H46018Handler * handler; ///< handler #ifdef H323_H46019M static PBoolean multiplex; static PBoolean muxShutdown; PortInfo muxPortInfo; static H323Connection::NAT_Sockets muxSockets; static muxSocketMap rtpSocketMap; static muxSocketMap rtcpSocketMap; static PMutex muxMutex; PThread * m_readThread; PDECLARE_NOTIFIER(PThread, PNatMethod_H46019, ReadThread); #endif }; #ifndef _WIN32_WCE #if PTLIB_VER > 260 PPLUGIN_STATIC_LOAD(H46019,PNatMethod); #else PWLIB_STATIC_LOAD_PLUGIN(H46019, PNatMethod); #endif #endif #ifdef H323_H46019M struct H46019MultiPacket { PIPSocket::Address fromAddr; WORD fromPort; PBYTEArray frame; }; typedef std::queue H46019MultiQueue; class H46019MultiplexSocket : public PUDPSocket { PCLASSINFO(H46019MultiplexSocket, PUDPSocket); public: H46019MultiplexSocket(); H46019MultiplexSocket(bool rtp); ~H46019MultiplexSocket(); enum MuxType { e_unknown, e_rtp, e_rtcp }; virtual MuxType GetMultiplexType() const; virtual void SetMultiplexType(MuxType type); /**Read a datagram from a remote computer @return PTrue if any bytes were sucessfully read. */ virtual PBoolean ReadFrom( void * buf, ///< Data to be written as URGENT TCP data. PINDEX len, ///< Number of bytes pointed to by #buf#. Address & addr, ///< Address from which the datagram was received. WORD & port ///< Port from which the datagram was received. ); /**Write a datagram to a remote computer. @return PTrue if all the bytes were sucessfully written. */ virtual PBoolean WriteTo( const void * buf, ///< Data to be written as URGENT TCP data. PINDEX len, ///< Number of bytes pointed to by #buf#. const Address & addr, ///< Address to which the datagram is sent. WORD port ///< Port to which the datagram is sent. ); virtual PBoolean Close(); PUDPSocket * & GetSubSocket() { return m_subSocket; } private: PUDPSocket * m_subSocket; MuxType m_plexType; PMutex m_mutex; }; #endif class H46019UDPSocket : public PUDPSocket { PCLASSINFO(H46019UDPSocket, PUDPSocket); public: /**@name Construction/Deconstructor */ /** create a UDP Socket Fully Nat Supported ready for H323plus to Call. */ H46019UDPSocket(H46018Handler & _handler, H323Connection::SessionInformation * info, bool _rtpSocket); /** Deconstructor to reallocate Socket and remove any exiting allocated NAT ports, */ ~H46019UDPSocket(); //@} PBoolean GetLocalAddress(Address & addr, WORD & port); /**@name Functions */ //@{ /** Allocate (FastStart) keep-alive mechanism but don't Activate */ void Allocate(const H323TransportAddress & keepalive, unsigned _payload, unsigned _ttl ); /** Activate (FastStart) keep-alive mechanism. */ void Activate(); /** Activate keep-alive mechanism. */ void Activate(const H323TransportAddress & keepalive, ///< KeepAlive Address unsigned _payload, ///< RTP Payload type unsigned _ttl ///< Time interval for keepalive. ); /** Get the Ping Payload */ unsigned GetPingPayload(); /** Set the Ping Payload */ void SetPingPayLoad(unsigned val); /** Get Ping TTL */ unsigned GetTTL(); /** Set Ping TTL */ void SetTTL(unsigned val); #ifdef H323_H46019M virtual PBoolean GetPeerAddress( PIPSocketAddressAndPort & addr ///< Variable to receive hosts IP address and port. ); /** Get Multiplex Address */ void GetMultiplexAddress(H323TransportAddress & address, ///< Multiplex Address unsigned & multiID, ///< Multiplex ID PBoolean isOLCack ///< Direction ); void SetMultiplexID(unsigned id, PBoolean isAck); unsigned GetRecvMultiplexID() const; unsigned GetSendMultiplexID() const; PBoolean WriteMultiplexBuffer( const void * buf, ///< Data to be written. PINDEX len, ///< Number of bytes pointed to by #buf#. const Address & addr, ///< Address to which the datagram is sent. WORD port ///< Port to which the datagram is sent. ); PBoolean ReadMultiplexBuffer( void * buf, ///< Data to be written. PINDEX & len, ///< Number of bytes pointed to by #buf#. Address & addr, ///< Address from which the datagram was received. WORD & port ///< Port from which the datagram was received. ); void ClearMultiplexBuffer(); virtual PBoolean DoPseudoRead(int & selectStatus); PBoolean ReadSocket( void * buf, ///< Data to be written. PINDEX & len, ///< Number of bytes pointed to by #buf#. Address & addr, ///< Address from which the datagram was received. WORD & port ///< Port from which the datagram was received. ); PBoolean WriteSocket( const void * buf, ///< Data to be written as URGENT TCP data. PINDEX len, ///< Number of bytes pointed to by #buf#. const Address & addr, ///< Address to which the datagram is sent. WORD port, ///< Port to which the datagram is sent. unsigned altMux = 0 ///< Whether use Alternate MUX ); #endif #ifdef H323_H46024A /**Read a datagram from a remote computer @return PTrue if any bytes were sucessfully read. */ virtual PBoolean ReadFrom( void * buf, ///< Data to be written as URGENT TCP data. PINDEX len, ///< Number of bytes pointed to by #buf#. Address & addr, ///< Address from which the datagram was received. WORD & port ///< Port from which the datagram was received. ); /**Write a datagram to a remote computer. @return PTrue if all the bytes were sucessfully written. */ virtual PBoolean WriteTo( const void * buf, ///< Data to be written as URGENT TCP data. PINDEX len, ///< Number of bytes pointed to by #buf#. const Address & addr, ///< Address to which the datagram is sent. WORD port ///< Port to which the datagram is sent. ); enum probe_state { e_notRequired, ///< Polling has not started e_initialising, ///< We are initialising (local set but remote not) e_idle, ///< Idle (waiting for first packet from remote) e_probing, ///< Probing for direct route e_verify_receiver, ///< verified receive connectivity e_verify_sender, ///< verified send connectivity e_wait, ///< we are waiting for direct media (to set address) e_direct ///< we are going direct to detected address }; struct probe_packet { PUInt16b Length; // Length PUInt32b SSRC; // Time Stamp BYTE name[4]; // Name is limited to 32 (4 Bytes) BYTE cui[20]; // SHA-1 is always 160 (20 Bytes) }; /** Set Alternate Direct Address */ virtual void SetAlternateAddresses(const H323TransportAddress & address, const PString & cui, unsigned muxID); /** Set Alternate Direct Address */ virtual void GetAlternateAddresses(H323TransportAddress & address, PString & cui, unsigned & muxID); /** Callback to check if the address received is a permitted alternate */ virtual PBoolean IsAlternateAddress( const Address & address, ///< Detected IP Address. WORD port ///< Detected Port. ); /** Start sending media/control to alternate address */ void H46024Adirect(bool starter); #endif #ifdef H323_H46024B /** Start Probing to alternate address */ void H46024Bdirect(const H323TransportAddress & address, unsigned muxID); #endif //@} protected: // H.460.19 Keepalives void InitialiseKeepAlive(); ///< Start the keepalive void SendRTPPing(const PIPSocket::Address & ip, const WORD & port); void SendRTCPPing(); PBoolean SendRTCPFrame(RTP_ControlFrame & report, const PIPSocket::Address & ip, WORD port); PMutex PingMutex; #ifdef H323_H46024A // H46024 Annex A support PBoolean ReceivedProbePacket(const RTP_ControlFrame & frame, bool & probe, bool & success); void BuildProbe(RTP_ControlFrame & report, bool reply); void StartProbe(); void ProbeReceived(bool probe, const PIPSocket::Address & addr, WORD & port); void SetProbeState(probe_state newstate); int GetProbeState() const; probe_state m_state; PMutex probeMutex; #endif private: H46018Handler & m_Handler; unsigned m_Session; ///< Current Session ie 1-Audio 2-video PString m_Token; ///< Current Connection Token OpalGloballyUniqueID m_CallId; ///< CallIdentifier PString m_CUI; ///< Local CUI (for H.460.24 Annex A) // H.460.19 Keepalives PIPSocket::Address keepip; ///< KeepAlive Address WORD keepport; ///< KeepAlive Port unsigned keeppayload; ///< KeepAlive RTP payload unsigned keepTTL; ///< KeepAlive TTL WORD keepseqno; ///< KeepAlive sequence number PTime * keepStartTime; ///< KeepAlive start time for TimeStamp. PDECLARE_NOTIFIER(PTimer, H46019UDPSocket, Ping); ///< Timer to notify to poll for External IP PTimer Keep; ///< Polling Timer #ifdef H323_H46019M unsigned m_recvMultiplexID; ///< Multiplex ID unsigned m_sendMultiplexID; ///< Multiplex ID H46019MultiQueue m_multQueue; ///< Incoming frame Queue unsigned m_multiBuffer; ///< Multiplex BufferSize PMutex m_multiMutex; ///< MultiQueue mutex PBoolean m_shutDown; ///< Shutdown #endif #ifdef H323_H46024A // H46024 Annex A support PString m_CUIrem; ///< Remote CUI PIPSocket::Address m_locAddr; WORD m_locPort; ///< local Address (address used when starting socket) PIPSocket::Address m_remAddr; WORD m_remPort; ///< Remote Address (address used when starting socket) PIPSocket::Address m_detAddr; WORD m_detPort; ///< detected remote Address (as detected from actual packets) PIPSocket::Address m_pendAddr; WORD m_pendPort; ///< detected pending RTCP Probe Address (as detected from actual packets) PDECLARE_NOTIFIER(PTimer, H46019UDPSocket, Probe); ///< Thread to probe for direct connection PTimer m_Probe; ///< Probe Timer PINDEX m_probes; ///< Probe count DWORD SSRC; ///< Random number #endif PIPSocket::Address m_altAddr; WORD m_altPort; ///< supplied remote Address (as supplied in Generic Information) unsigned m_altMuxID; #ifdef H323_H46024B // H46024 Annex B support PBoolean m_h46024b; #endif bool rtpSocket; }; #endif // H46018_NAT h323plus/include/h460/h460_std9.h0000644000175000017500000000745511530135362015022 0ustar markmark/* H460_std9.h * * Copyright (c) 2009 ISVO (Asia) Pte Ltd. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte Ltd. * * * Contributor(s): ______________________________________. * * $Log: h460_std9.h,v $ * Revision 1.5 2011/02/20 06:55:46 shorne * Fixes for H.460 to allow better selection of mesasage location in PDU. Features or Generic Data. Corrected H.460.9 * * Revision 1.4 2010/01/20 04:23:08 shorne * Add ability to advertise supported H.460 features in presence * * Revision 1.3 2009/09/29 07:23:03 shorne * Change the way unmatched features are cleaned up in call signalling. Removed advertisement of H.460.19 in Alerting and Connecting PDU * * Revision 1.2 2009/08/28 14:36:06 shorne * Fixes to enable compilation with PTLIB 2.6.4 * * Revision 1.1 2009/08/21 07:01:06 shorne * Added H.460.9 Support * * * * */ #ifndef H_H460_FeatureStd9 #define H_H460_FeatureStd9 #include // Must call the following #include #if _MSC_VER #pragma once #endif class MyH323EndPoint; class MyH323Connection; class H4609_ArrayOf_RTCPMeasures; class H460_FeatureStd9 : public H460_FeatureStd { PCLASSINFO(H460_FeatureStd9,H460_FeatureStd); public: H460_FeatureStd9(); virtual ~H460_FeatureStd9(); // Universal Declarations Every H460 Feature should have the following virtual void AttachEndPoint(H323EndPoint * _ep); virtual void AttachConnection(H323Connection * _con); static PStringArray GetFeatureName() { return PStringArray("Std9"); }; static PStringArray GetFeatureFriendlyName() { return PStringArray("QoS Monitoring-H.460.9"); }; static int GetPurpose() { return FeatureSignal; }; static PStringArray GetIdentifier() { return PStringArray("9"); }; virtual PBoolean FeatureAdvertised(int mtype); virtual PBoolean CommonFeature() { return qossupport; } // Messages virtual PBoolean OnSendAdmissionRequest(H225_FeatureDescriptor & pdu); virtual void OnReceiveAdmissionConfirm(const H225_FeatureDescriptor & pdu); // Send QoS information virtual PBoolean OnSendInfoRequestResponseMessage(H225_FeatureDescriptor & pdu); virtual PBoolean OnSendDisengagementRequestMessage(H225_FeatureDescriptor & pdu); private: PBoolean GenerateReport(H4609_ArrayOf_RTCPMeasures & report); PBoolean WriteStatisticsReport(H460_FeatureStd & msg, PBoolean final); H323EndPoint * EP; H323Connection * CON; PBoolean qossupport; PBoolean finalonly; }; // Need to declare for Factory Loader #ifndef _WIN32_WCE #if PTLIB_VER > 260 PPLUGIN_STATIC_LOAD(Std9, H460_Feature); #else PWLIB_STATIC_LOAD_PLUGIN(Std9, H460_Feature); #endif #endif #endif h323plus/include/h460/h46015.h0000644000175000017500000001631311561716521014224 0ustar markmark// // H46015.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H46015 #ifndef __H46015_H #define __H46015_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "h225.h" // // ChannelSuspendConfirm // class H46015_ChannelSuspendConfirm : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H46015_ChannelSuspendConfirm, PASN_Sequence); #endif public: H46015_ChannelSuspendConfirm(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // ChannelSuspendCancel // class H46015_ChannelSuspendCancel : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H46015_ChannelSuspendCancel, PASN_Sequence); #endif public: H46015_ChannelSuspendCancel(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // ChannelResumeRequest // class H46015_ChannelResumeRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H46015_ChannelResumeRequest, PASN_Sequence); #endif public: H46015_ChannelResumeRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_resetH245 }; PASN_Integer m_randomNumber; PASN_Null m_resetH245; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ChannelResumeResponse // class H46015_ChannelResumeResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H46015_ChannelResumeResponse, PASN_Sequence); #endif public: H46015_ChannelResumeResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // SignallingChannelData_signallingChannelData // class H46015_ChannelSuspendRequest; class H46015_ChannelSuspendResponse; class H46015_ChannelSuspendConfirm; class H46015_ChannelSuspendCancel; class H46015_ChannelResumeRequest; class H46015_ChannelResumeResponse; class H46015_SignallingChannelData_signallingChannelData : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H46015_SignallingChannelData_signallingChannelData, PASN_Choice); #endif public: H46015_SignallingChannelData_signallingChannelData(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_channelSuspendRequest, e_channelSuspendResponse, e_channelSuspendConfirm, e_channelSuspendCancel, e_channelResumeRequest, e_channelResumeResponse }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H46015_ChannelSuspendRequest &() const; #else operator H46015_ChannelSuspendRequest &(); operator const H46015_ChannelSuspendRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H46015_ChannelSuspendResponse &() const; #else operator H46015_ChannelSuspendResponse &(); operator const H46015_ChannelSuspendResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H46015_ChannelSuspendConfirm &() const; #else operator H46015_ChannelSuspendConfirm &(); operator const H46015_ChannelSuspendConfirm &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H46015_ChannelSuspendCancel &() const; #else operator H46015_ChannelSuspendCancel &(); operator const H46015_ChannelSuspendCancel &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H46015_ChannelResumeRequest &() const; #else operator H46015_ChannelResumeRequest &(); operator const H46015_ChannelResumeRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H46015_ChannelResumeResponse &() const; #else operator H46015_ChannelResumeResponse &(); operator const H46015_ChannelResumeResponse &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_TransportAddress // class H225_TransportAddress; class H46015_ArrayOf_TransportAddress : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H46015_ArrayOf_TransportAddress, PASN_Array); #endif public: H46015_ArrayOf_TransportAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_TransportAddress & operator[](PINDEX i) const; PObject * Clone() const; }; // // SignallingChannelData // class H46015_SignallingChannelData : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H46015_SignallingChannelData, PASN_Sequence); #endif public: H46015_SignallingChannelData(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H46015_SignallingChannelData_signallingChannelData m_signallingChannelData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ChannelSuspendRequest // class H46015_ChannelSuspendRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H46015_ChannelSuspendRequest, PASN_Sequence); #endif public: H46015_ChannelSuspendRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_resetH245 }; H46015_ArrayOf_TransportAddress m_channelResumeAddress; PASN_Boolean m_immediateResume; PASN_Null m_resetH245; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ChannelSuspendResponse // class H46015_ChannelSuspendResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H46015_ChannelSuspendResponse, PASN_Sequence); #endif public: H46015_ChannelSuspendResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_okToSuspend; H46015_ArrayOf_TransportAddress m_channelResumeAddress; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H46015_H #endif // if ! H323_DISABLE_H46015 // End of H46015.h h323plus/include/h460/h460p.h0000644000175000017500000003200211377216447014236 0ustar markmark/* * h460p.h * * H460 Presence class. * * h323plus library * * Copyright (c) 2008 ISVO (Asia) Pte. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * Contributor(s): ______________________________________. * * $Log: h460p.h,v $ * Revision 1.9 2010/05/26 13:07:51 willamowius * SOlaris 10 compile fix * * Revision 1.8 2010/02/24 03:00:00 shorne * Added generic data support to presence feature * * Revision 1.7 2010/01/20 04:23:08 shorne * Add ability to advertise supported H.460 features in presence * * Revision 1.6 2009/12/21 01:15:09 shorne * Further Presence Development * * Revision 1.5 2009/12/08 08:25:47 willamowius * gcc fixes for presence * * Revision 1.4 2009/12/08 04:05:14 shorne * Major update of presence system * * Revision 1.3 2009/11/17 11:01:28 shorne * Presence Support Update * * Revision 1.2 2008/02/21 00:04:33 shorne * fix variable naming issue on linux compile * * Revision 1.1 2008/01/29 04:38:12 shorne * completed Initial implementation * * * */ #pragma once #include "openh323buildopts.h" #ifdef H323_H460 #include #include #include #include #include #include class H323PresenceNotification : public H460P_PresenceNotification { public: enum States { e_hidden, e_available, e_online, e_offline, e_onCall, e_voiceMail, e_notAvailable, e_away, e_generic }; static PString GetStateString(unsigned state); void SetPresenceState(States state, const PString & display = PString()); void SetGenericState(const PString & state); void GetPresenceState(States & state, PString & display) const; void AddSupportedFeature(int id); void AddSupportedFeature(const H460P_PresenceFeature & id); void AddEndpointLocale(const H460P_PresenceGeoLocation & loc); void AddGenericData(const H225_ArrayOf_GenericData & data); void AddSubscriber(const OpalGloballyUniqueID & guid); OpalGloballyUniqueID GetSubscriber(PINDEX i); void RemoveSubscribers(); void AddAlias(const PString & alias); PString GetAlias() const; }; class H323PresenceNotifications : public H460P_PresenceNotify { public: void Add(const H323PresenceNotification & notify); H323PresenceNotification & operator[](PINDEX i) const; void SetAlias(const PString & alias); void GetAlias(PString & alias); void SetAliasList(const PStringList & alias); void GetAliasList(PStringList & alias) const; void SetSize(PINDEX newSize); PINDEX GetSize() const; private: PStringList m_aliasList; }; class H323PresenceSubscription : public H460P_PresenceSubscription { public: H323PresenceSubscription(); H323PresenceSubscription(const OpalGloballyUniqueID & guid); // Sending Gatekeeper void SetSubscriptionDetails(const PString & subscribe, const PStringList & aliases); void SetSubscriptionDetails(const H225_AliasAddress & subscribe, const H225_AliasAddress & subscriber); void GetSubscriberDetails(PStringList & aliases) const; PString GetSubscribed(); void SetGatekeeperRAS(const H323TransportAddress & address); H323TransportAddress GetGatekeeperRAS(); // Receiving Gatekeeper/Endpoint void MakeDecision(bool approve); bool IsDecisionMade(); int IsApproved(); // -1 not decided; 0 - not approved; 1 - approved; void SetTimeToLive(int t); int GetTimeToLive(); void SetSubscription(const OpalGloballyUniqueID & guid); OpalGloballyUniqueID GetSubscription() const; void SetApproved(bool success); void AddGenericData(const H225_ArrayOf_GenericData & data); }; class H323PresenceSubscriptions : public H460P_PresenceAuthorize { public: void Add(const H323PresenceSubscription & sub); H323PresenceSubscription & operator[](PINDEX i) const; void SetAlias(const PString & alias); void GetAlias(PString & alias); void SetSize(PINDEX newSize); PINDEX GetSize() const; }; class H323PresenceInstruction : public H460P_PresenceInstruction { public: enum Instruction { e_subscribe, e_unsubscribe, e_block, e_unblock, e_pending }; static PString GetInstructionString(unsigned instruct); H323PresenceInstruction(Instruction instruct, const PString & alias); Instruction GetInstruction(); PString GetAlias() const; }; class H323PresenceInstructions : public H460P_PresenceInstruct { public: void Add(const H323PresenceInstruction & instruct); H323PresenceInstruction & operator[](PINDEX i) const; void SetAlias(const PString & alias); void GetAlias(PString & alias); void SetSize(PINDEX newSize); PINDEX GetSize() const; }; class H323PresenceIdentifiers : public H460P_ArrayOf_PresenceIdentifier { public: void Add(const OpalGloballyUniqueID & guid, PBoolean todelete = false); OpalGloballyUniqueID GetIdentifier(PINDEX i); }; struct H323PresenceRecord { H225_EndpointIdentifier m_identifer; H225_AliasAddress m_locAlias; H225_AliasAddress m_subAlias; time_t m_timeStamp; unsigned m_ttl; }; struct H323PresenceID { PBoolean m_isSubscriber; H225_AliasAddress m_subscriber; H225_AliasAddress m_Alias; H323PresenceInstruction::Instruction m_Status; PBoolean m_Active; PTime m_Updated; }; struct H323PresenceEndpoint { H323PresenceSubscriptions m_Authorize; H323PresenceInstructions m_Instruction; H323PresenceNotifications m_Notify; H323PresenceIdentifiers m_Identifiers; }; #define H323PresenceStore std::map #define H323PresenceGkStore std::map template struct Order { bool operator()(Msg s1, Msg s2) const { return s1.Compare(s2) < 0; } }; // Indicia #define H323PresenceInd std::map,Order > // Gatekeeper functions #define H323PresenceAlias std::map > #define H323PresenceLocal std::map > #define H323PresenceExternal std::map > #define H323PresenceRemote std::map #define H323PresenceLRQRelay std::map > #define H323PresenceIds std::map > #define H323PresencePending std::map > #define H323PresenceIdMap std::map > // Derive you implementation from H323PresenceHandler. class H323PresenceHandler : public PObject { PCLASSINFO(H323PresenceHandler, PObject); public: bool ReceivedPDU(const PASN_OctetString & pdu, H225_TransportAddress * ip = NULL); enum MsgType { e_Status, e_Instruct, e_Authorize, e_Notify, e_Request, e_Response, e_Alive, e_Remove, e_Alert }; enum InstType { e_subscribe, e_unsubscribe, e_block, e_unblock, e_pending }; class localeInfo { public: localeInfo(); bool BuildLocalePDU(H460P_PresenceGeoLocation & pdu); PString m_locale; PString m_region; PString m_country; PString m_countryCode; PString m_latitude; PString m_longitude; PString m_elevation; }; PBoolean BuildPresenceElement(unsigned msgtag, ///< RAS Message ID PASN_OctetString & pdu ///< Encoded PresenceElement ); PBoolean BuildPresenceElement(unsigned msgtag, ///< Presence Message ID const H225_EndpointIdentifier & ep, ///< Endpoint Identifier PASN_OctetString & pdu ///< Presence Message elements ); PBoolean BuildPresenceElement(unsigned msgtag, ///< Presence Message ID const H225_TransportAddress & ip, ///< Transport Address PASN_OctetString & pdu ///< Presence Message elements ); PBoolean BuildPresenceMessage(unsigned id, ///< Presence Message ID H323PresenceStore & store, ///< Presence Store Information H460P_ArrayOf_PresenceMessage & element ///< Presence Message elements ); PBoolean BuildPresenceMessage(unsigned id, ///< Presence Message ID const H225_EndpointIdentifier & ep, ///< Endpoint Identifier H460P_ArrayOf_PresenceMessage & msgs ///< Presence Message elements ); PBoolean BuildPresenceMessage(unsigned id, ///< Presence Message ID const H225_TransportAddress & ip, ///< Transport Address H460P_ArrayOf_PresenceMessage & msgs ///< Presence Message elements ); virtual H323PresenceStore & GetPresenceStoreLocked(unsigned msgtag =0); virtual void PresenceStoreUnLock(unsigned msgtag = 0); // Events Endpoints virtual void OnNotification(MsgType /*tag*/, const H460P_PresenceNotification & /*notify*/, const H225_AliasAddress & /*addr*/ ) {} virtual void OnSubscription(MsgType /*tag*/, const H460P_PresenceSubscription & /*subscription*/, const H225_AliasAddress & /*addr*/ ) {} virtual void OnInstructions(MsgType /*tag*/, const H460P_ArrayOf_PresenceInstruction & /*instruction*/, const H225_AliasAddress & /*addr*/ ) {} // Events Gatekeepers virtual void OnNotification(MsgType /*tag*/, const H460P_PresenceNotification & /*notify*/, const H225_TransportAddress & /*ip*/ ) {} virtual void OnSubscription(MsgType /*tag*/, const H460P_PresenceSubscription & /*subscription*/, const H225_TransportAddress & /*ip*/ ) {} virtual void OnIdentifiers(MsgType /*tag*/, const H460P_PresenceIdentifier & /*identifier*/, const H225_TransportAddress & /*ip*/ ) {} // Build Endpoint Callbacks virtual PBoolean BuildSubscription(const H225_EndpointIdentifier & /*ep*/, H323PresenceStore & /*subscription*/ ) { return false; } virtual PBoolean BuildNotification(const H225_EndpointIdentifier & /*ep*/, H323PresenceStore & /*notify*/ ) { return false; } virtual PBoolean BuildInstructions(const H225_EndpointIdentifier & /*ep*/, H323PresenceStore & /*instruction*/ ) { return false; } // Build Gatekeeper Callbacks virtual PBoolean BuildSubscription(bool /*request*/, const H225_TransportAddress & /*ip*/, H323PresenceGkStore & /*subscription*/ ) { return false; } virtual PBoolean BuildNotification( const H225_TransportAddress & /*ip*/, H323PresenceGkStore & /*notify*/ ) { return false; } virtual PBoolean BuildIdentifiers(bool /*alive*/, const H225_TransportAddress & /*ip*/, H323PresenceGkStore & /*identifiers*/ ) { return false; } protected: // Build Messages H460P_PresenceStatus & BuildStatus(H460P_PresenceMessage & msg, const H323PresenceNotifications & notify, const H323PresenceInstructions & inst); H460P_PresenceInstruct & BuildInstruct(H460P_PresenceMessage & msg, const H323PresenceInstructions & inst); H460P_PresenceAuthorize & BuildAuthorize(H460P_PresenceMessage & msg, const H323PresenceSubscriptions & subs); H460P_PresenceNotify & BuildNotify(H460P_PresenceMessage & msg, const H323PresenceNotifications & notify); H460P_PresenceRequest & BuildRequest(H460P_PresenceMessage & msg, const H323PresenceSubscriptions & subs); H460P_PresenceResponse & BuildResponse(H460P_PresenceMessage & msg, const H323PresenceSubscriptions & subs); H460P_PresenceAlive & BuildAlive(H460P_PresenceMessage & msg, const H323PresenceIdentifiers & id); H460P_PresenceRemove & BuildRemove(H460P_PresenceMessage & msg, const H323PresenceIdentifiers & id); H460P_PresenceAlert & BuildAlert(H460P_PresenceMessage & msg, const H323PresenceNotifications & notify); private: H323PresenceStore m_presenceStore; PMutex storeMutex; }; #endif h323plus/include/h460/h460pres.h0000644000175000017500000005422311313546035014746 0ustar markmark// // H460pres.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H460P #ifndef __H460P_H #define __H460P_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "h225.h" #include "h235.h" // // PresenceMessage // class H460P_PresenceStatus; class H460P_PresenceInstruct; class H460P_PresenceAuthorize; class H460P_PresenceNotify; class H460P_PresenceRequest; class H460P_PresenceResponse; class H460P_PresenceAlive; class H460P_PresenceRemove; class H460P_PresenceAlert; class H460P_PresenceMessage : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_PresenceMessage, PASN_Choice); #endif public: H460P_PresenceMessage(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_presenceStatus, e_presenceInstruct, e_presenceAuthorize, e_presenceNotify, e_presenceRequest, e_presenceResponse, e_presenceAlive, e_presenceRemove, e_presenceAlert }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H460P_PresenceStatus &() const; #else operator H460P_PresenceStatus &(); operator const H460P_PresenceStatus &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H460P_PresenceInstruct &() const; #else operator H460P_PresenceInstruct &(); operator const H460P_PresenceInstruct &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H460P_PresenceAuthorize &() const; #else operator H460P_PresenceAuthorize &(); operator const H460P_PresenceAuthorize &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H460P_PresenceNotify &() const; #else operator H460P_PresenceNotify &(); operator const H460P_PresenceNotify &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H460P_PresenceRequest &() const; #else operator H460P_PresenceRequest &(); operator const H460P_PresenceRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H460P_PresenceResponse &() const; #else operator H460P_PresenceResponse &(); operator const H460P_PresenceResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H460P_PresenceAlive &() const; #else operator H460P_PresenceAlive &(); operator const H460P_PresenceAlive &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H460P_PresenceRemove &() const; #else operator H460P_PresenceRemove &(); operator const H460P_PresenceRemove &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H460P_PresenceAlert &() const; #else operator H460P_PresenceAlert &(); operator const H460P_PresenceAlert &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // PresencePDU // class H460P_PresenceInstruction; class H460P_PresenceNotification; class H460P_PresenceSubscription; class H460P_PresenceIdentifier; class H460P_PresencePDU : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_PresencePDU, PASN_Choice); #endif public: H460P_PresencePDU(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_instruction, e_notification, e_subscription, e_identifier }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H460P_PresenceInstruction &() const; #else operator H460P_PresenceInstruction &(); operator const H460P_PresenceInstruction &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H460P_PresenceNotification &() const; #else operator H460P_PresenceNotification &(); operator const H460P_PresenceNotification &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H460P_PresenceSubscription &() const; #else operator H460P_PresenceSubscription &(); operator const H460P_PresenceSubscription &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H460P_PresenceIdentifier &() const; #else operator H460P_PresenceIdentifier &(); operator const H460P_PresenceIdentifier &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // PresenceInstruction // class H225_AliasAddress; class H460P_PresenceInstruction : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_PresenceInstruction, PASN_Choice); #endif public: H460P_PresenceInstruction(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_subscribe, e_unsubscribe, e_block, e_unblock, e_pending }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_AliasAddress &() const; #else operator H225_AliasAddress &(); operator const H225_AliasAddress &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // PresenceIdentifier // class H460P_PresenceIdentifier : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_PresenceIdentifier, PASN_Sequence); #endif public: H460P_PresenceIdentifier(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_remove }; H225_GloballyUniqueID m_guid; PASN_Boolean m_remove; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PresenceDisplay // class H460P_PresenceDisplay : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_PresenceDisplay, PASN_Sequence); #endif public: H460P_PresenceDisplay(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_language }; PASN_IA5String m_language; PASN_BMPString m_display; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PresenceState // class H460P_ArrayOf_PresenceDisplay; class H460P_PresenceState : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_PresenceState, PASN_Choice); #endif public: H460P_PresenceState(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_hidden, e_available, e_online, e_offline, e_onCall, e_voiceMail, e_notAvailable, e_away, e_generic }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H460P_ArrayOf_PresenceDisplay &() const; #else operator H460P_ArrayOf_PresenceDisplay &(); operator const H460P_ArrayOf_PresenceDisplay &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // PresenceFeatureGeneric // class H460P_PresenceFeatureGeneric : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_PresenceFeatureGeneric, PASN_Sequence); #endif public: H460P_PresenceFeatureGeneric(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_display }; H225_GenericIdentifier m_identifier; PASN_IA5String m_display; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PresenceFeature // class H460P_PresenceFeatureGeneric; class H460P_PresenceFeature : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_PresenceFeature, PASN_Choice); #endif public: H460P_PresenceFeature(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_audio, e_video, e_data, e_extVideo, e_generic }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H460P_PresenceFeatureGeneric &() const; #else operator H460P_PresenceFeatureGeneric &(); operator const H460P_PresenceFeatureGeneric &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // PresenceGeoLocation // class H460P_PresenceGeoLocation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_PresenceGeoLocation, PASN_Sequence); #endif public: H460P_PresenceGeoLocation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_locale, e_region, e_country, e_countryCode, e_latitude, e_longitude, e_elevation }; PASN_IA5String m_locale; PASN_IA5String m_region; PASN_IA5String m_country; PASN_IA5String m_countryCode; PASN_IA5String m_latitude; PASN_IA5String m_longitude; PASN_IA5String m_elevation; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_PresenceMessage // class H460P_PresenceMessage; class H460P_ArrayOf_PresenceMessage : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_ArrayOf_PresenceMessage, PASN_Array); #endif public: H460P_ArrayOf_PresenceMessage(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H460P_PresenceMessage & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_AliasAddress // class H225_AliasAddress; class H460P_ArrayOf_AliasAddress : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_ArrayOf_AliasAddress, PASN_Array); #endif public: H460P_ArrayOf_AliasAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_AliasAddress & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_PresenceNotification // class H460P_PresenceNotification; class H460P_ArrayOf_PresenceNotification : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_ArrayOf_PresenceNotification, PASN_Array); #endif public: H460P_ArrayOf_PresenceNotification(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H460P_PresenceNotification & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_PresenceInstruction // class H460P_PresenceInstruction; class H460P_ArrayOf_PresenceInstruction : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_ArrayOf_PresenceInstruction, PASN_Array); #endif public: H460P_ArrayOf_PresenceInstruction(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H460P_PresenceInstruction & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_PresenceSubscription // class H460P_PresenceSubscription; class H460P_ArrayOf_PresenceSubscription : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_ArrayOf_PresenceSubscription, PASN_Array); #endif public: H460P_ArrayOf_PresenceSubscription(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H460P_PresenceSubscription & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_PresenceIdentifier // class H460P_PresenceIdentifier; class H460P_ArrayOf_PresenceIdentifier : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_ArrayOf_PresenceIdentifier, PASN_Array); #endif public: H460P_ArrayOf_PresenceIdentifier(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H460P_PresenceIdentifier & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_GenericData // class H225_GenericData; class H460P_ArrayOf_GenericData : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_ArrayOf_GenericData, PASN_Array); #endif public: H460P_ArrayOf_GenericData(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_GenericData & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_PresenceDisplay // class H460P_PresenceDisplay; class H460P_ArrayOf_PresenceDisplay : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_ArrayOf_PresenceDisplay, PASN_Array); #endif public: H460P_ArrayOf_PresenceDisplay(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H460P_PresenceDisplay & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_PresenceFeature // class H460P_PresenceFeature; class H460P_ArrayOf_PresenceFeature : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_ArrayOf_PresenceFeature, PASN_Array); #endif public: H460P_ArrayOf_PresenceFeature(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H460P_PresenceFeature & operator[](PINDEX i) const; PObject * Clone() const; }; // // PresenceElement // class H460P_PresenceElement : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_PresenceElement, PASN_Sequence); #endif public: H460P_PresenceElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H460P_ArrayOf_PresenceMessage m_message; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PresenceStatus // class H460P_PresenceStatus : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_PresenceStatus, PASN_Sequence); #endif public: H460P_PresenceStatus(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_instruction }; H460P_ArrayOf_AliasAddress m_alias; H460P_ArrayOf_PresenceNotification m_notification; H460P_ArrayOf_PresenceInstruction m_instruction; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PresenceInstruct // class H460P_PresenceInstruct : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_PresenceInstruct, PASN_Sequence); #endif public: H460P_PresenceInstruct(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_AliasAddress m_alias; H460P_ArrayOf_PresenceInstruction m_instruction; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PresenceAuthorize // class H460P_PresenceAuthorize : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_PresenceAuthorize, PASN_Sequence); #endif public: H460P_PresenceAuthorize(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_AliasAddress m_alias; H460P_ArrayOf_PresenceSubscription m_subscription; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PresenceNotify // class H460P_PresenceNotify : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_PresenceNotify, PASN_Sequence); #endif public: H460P_PresenceNotify(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_AliasAddress m_alias; H460P_ArrayOf_PresenceNotification m_notification; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PresenceRequest // class H460P_PresenceRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_PresenceRequest, PASN_Sequence); #endif public: H460P_PresenceRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H460P_ArrayOf_PresenceSubscription m_subscription; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PresenceResponse // class H460P_PresenceResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_PresenceResponse, PASN_Sequence); #endif public: H460P_PresenceResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H460P_ArrayOf_PresenceSubscription m_subscription; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PresenceAlive // class H460P_PresenceAlive : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_PresenceAlive, PASN_Sequence); #endif public: H460P_PresenceAlive(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H460P_ArrayOf_PresenceIdentifier m_identifier; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PresenceRemove // class H460P_PresenceRemove : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_PresenceRemove, PASN_Sequence); #endif public: H460P_PresenceRemove(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H460P_ArrayOf_PresenceIdentifier m_identifier; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PresenceAlert // class H460P_PresenceAlert : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_PresenceAlert, PASN_Sequence); #endif public: H460P_PresenceAlert(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H460P_ArrayOf_PresenceNotification m_notification; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PresenceSubscription // class H460P_PresenceSubscription : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_PresenceSubscription, PASN_Sequence); #endif public: H460P_PresenceSubscription(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_approved, e_rasAddress, e_timeToLive, e_genericData }; H460P_PresenceIdentifier m_identifier; H225_AliasAddress m_subscribe; H460P_ArrayOf_AliasAddress m_aliases; PASN_Boolean m_approved; H225_TransportAddress m_rasAddress; H225_TimeToLive m_timeToLive; H460P_ArrayOf_GenericData m_genericData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Presentity // class H460P_Presentity : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_Presentity, PASN_Sequence); #endif public: H460P_Presentity(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_supportedFeatures, e_geolocation, e_display, e_genericData }; H460P_PresenceState m_state; H460P_ArrayOf_PresenceFeature m_supportedFeatures; H460P_PresenceGeoLocation m_geolocation; H460P_ArrayOf_PresenceDisplay m_display; H460P_ArrayOf_GenericData m_genericData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PresenceNotification // class H460P_PresenceNotification : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H460P_PresenceNotification, PASN_Sequence); #endif public: H460P_PresenceNotification(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_aliasAddress, e_subscribers }; H225_AliasAddress m_aliasAddress; H460P_ArrayOf_PresenceIdentifier m_subscribers; H460P_Presentity m_presentity; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H460P_H #endif // if ! H323_DISABLE_H460P // End of H460pres.h h323plus/include/h460/h460_std18.h0000644000175000017500000001215611637352077015110 0ustar markmark/* H460_std18.h * * h323plus library * * Copyright (c) 2008 ISVO (Asia) Pte. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * Portions of this code were written with the assisance of funding from * triple-IT. http://www.triple-it.nl. * * Contributor(s): ______________________________________. * * $Id: h460_std18.h,v 1.8 2011/09/24 12:59:43 shorne Exp $ * * */ #ifndef H_H460_FeatureStd18 #define H_H460_FeatureStd18 #include // Must call the following #include #if _MSC_VER #pragma once #endif ///////////////////////////////////////////////////////////////// class MyH323EndPoint; class MyH323Connection; class H46018Handler; class H460_FeatureStd18 : public H460_FeatureStd { PCLASSINFO(H460_FeatureStd18,H460_FeatureStd); public: H460_FeatureStd18(); virtual ~H460_FeatureStd18(); // Universal Declarations Every H460 Feature should have the following virtual void AttachEndPoint(H323EndPoint * _ep); static PStringArray GetFeatureName() { return PStringArray("Std18"); }; static PStringArray GetFeatureFriendlyName() { return PStringArray("NatTraversal-H.460.18"); }; static int GetPurpose() { return FeatureRas; }; static PStringArray GetIdentifier() { return PStringArray("18"); }; virtual PBoolean CommonFeature() { return isEnabled; } ///////////////////// // H.460.18 Messages virtual PBoolean OnSendGatekeeperRequest(H225_FeatureDescriptor & pdu); virtual void OnReceiveGatekeeperConfirm(const H225_FeatureDescriptor & pdu); virtual PBoolean OnSendRegistrationRequest(H225_FeatureDescriptor & pdu); virtual void OnReceiveRegistrationConfirm(const H225_FeatureDescriptor & pdu); virtual void OnReceiveServiceControlIndication(const H225_FeatureDescriptor & pdu); private: H323EndPoint * EP; H46018Handler * handler; PBoolean isEnabled; }; // Need to declare for Factory Loader #ifndef _WIN32_WCE #if PTLIB_VER > 260 PPLUGIN_STATIC_LOAD(Std18, H460_Feature); #else PWLIB_STATIC_LOAD_PLUGIN(Std18, H460_Feature); #endif #endif ///////////////////////////////////////////////////////////////// class MyH323EndPoint; class MyH323Connection; class H460_FeatureStd19 : public H460_FeatureStd { PCLASSINFO(H460_FeatureStd19,H460_FeatureStd); public: H460_FeatureStd19(); virtual ~H460_FeatureStd19(); // Universal Declarations Every H460 Feature should have the following virtual void AttachEndPoint(H323EndPoint * _ep); virtual void AttachConnection(H323Connection * _con); static PStringArray GetFeatureName() { return PStringArray("Std19"); }; static PStringArray GetFeatureFriendlyName() { return PStringArray("NatTraversal-H.460.19"); }; static int GetPurpose() { return FeatureSignal; }; static PStringArray GetIdentifier() { return PStringArray("19"); }; virtual PBoolean CommonFeature() { return remoteSupport; } ///////////////////// // H.460.19 Messages virtual PBoolean OnSendSetup_UUIE(H225_FeatureDescriptor & pdu); virtual void OnReceiveSetup_UUIE(const H225_FeatureDescriptor & pdu); virtual PBoolean OnSendCallProceeding_UUIE(H225_FeatureDescriptor & pdu); virtual void OnReceiveCallProceeding_UUIE(const H225_FeatureDescriptor & pdu); virtual PBoolean OnSendAlerting_UUIE(H225_FeatureDescriptor & pdu); virtual void OnReceiveAlerting_UUIE(const H225_FeatureDescriptor & pdu); virtual PBoolean OnSendCallConnect_UUIE(H225_FeatureDescriptor & pdu); virtual void OnReceiveCallConnect_UUIE(const H225_FeatureDescriptor & pdu); //////////////////// // H.460.24 Override void SetAvailable(bool avail); private: H323EndPoint * EP; H323Connection * CON; PBoolean isEnabled; PBoolean isAvailable; PBoolean remoteSupport; PBoolean multiSupport; }; // Need to declare for Factory Loader #ifndef _WIN32_WCE #if PTLIB_VER > 260 PPLUGIN_STATIC_LOAD(Std19, H460_Feature); #else PWLIB_STATIC_LOAD_PLUGIN(Std19, H460_Feature); #endif #endif #endif h323plus/include/h460/h46018.h0000644000175000017500000000304311015524224014212 0ustar markmark// // h46018.h // // Code automatically generated by asnparse. // #if ! H225_DISABLE_H46018 #ifndef __H46018_H #define __H46018_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "h225.h" // // IncomingCallIndication // class H46018_IncomingCallIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H46018_IncomingCallIndication, PASN_Sequence); #endif public: H46018_IncomingCallIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_TransportAddress m_callSignallingAddress; H225_CallIdentifier m_callID; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // LRQKeepAliveData // class H46018_LRQKeepAliveData : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H46018_LRQKeepAliveData, PASN_Sequence); #endif public: H46018_LRQKeepAliveData(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_TimeToLive m_lrqKeepAliveInterval; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H46018_H #endif // if ! H225_DISABLE_H46018 // End of h46018.h h323plus/include/h460/upnpcp.h0000644000175000017500000001333111561714523014677 0ustar markmark/* * upnpcp.h * * UPnP NAT Traversal class. * * h323plus library * * Copyright (c) 2009 ISVO (Asia) Pte. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * * Contributor(s): ______________________________________. * * $Id $ * * */ #ifndef H_UPNP #define H_UPNP #include #if _MSC_VER #pragma once #endif class H323EndPoint; class UPnPThread; class PNatMethod_UPnP : public PNatMethod { PCLASSINFO(PNatMethod_UPnP,PNatMethod); public: /**@name Construction */ //@{ /** Default Contructor */ PNatMethod_UPnP(); /** Deconstructor */ ~PNatMethod_UPnP(); //@} /**@name General Functions */ //@{ void AttachEndPoint(H323EndPoint * _ep); virtual PBoolean GetExternalAddress( PIPSocket::Address & externalAddress, /// External address of router const PTimeInterval & maxAge = 1000 /// Maximum age for caching ); /** CreateSocketPair Create the UDP Socket pair (not used) */ virtual PBoolean PNatMethod::CreateSocketPair( PUDPSocket *&,PUDPSocket *&, const PIPSocket::Address &) { return false; } /** CreateSocketPair Create the UDP Socket pair */ virtual PBoolean CreateSocketPair( PUDPSocket * & socket1, PUDPSocket * & socket2, const PIPSocket::Address & binding, void * userData ); /** isAvailable. Returns whether the Nat Method is ready and available in assisting in NAT Traversal. The principal is function is to allow the EP to detect various methods and if a method is detected then this method is available for NAT traversal The Order of adding to the PNstStrategy determines which method is used */ virtual bool IsAvailable(const PIPSocket::Address&) { return (available && active); } void SetAvailable(); void SetAvailable(const PString & devName); virtual void Activate(bool act) { active = act; } PBoolean OpenSocket(PUDPSocket & socket, PortInfo & portInfo, const PIPSocket::Address & binding) const; static PStringList GetNatMethodName() { return PStringArray("UPnP"); }; virtual PString GetName() const { return GetNatMethodName()[0]; } // All these are virtual and never used. virtual bool GetServerAddress( PIPSocket::Address & address, ///< Address of server WORD & port ///< Port server is using. ) const { return false; } virtual bool GetInterfaceAddress( PIPSocket::Address & internalAddress ) const { return false; } virtual PBoolean CreateSocket( PUDPSocket * & socket, const PIPSocket::Address & binding = PIPSocket::GetDefaultIpAny(), WORD localPort = 0 ) { return false; } virtual RTPSupportTypes GetRTPSupport( PBoolean force = PFalse ///< Force a new check ); //@} void SetExtIPAddress(const PString & newAddr); void RemoveUPnPMap(WORD port); H323EndPoint * GetEndPoint(); #if PTLIB_VER >= 2110 virtual PString GetServer() const { return PString(); } virtual bool GetServerAddress(PIPSocketAddressAndPort & ) const { return false; } virtual NatTypes GetNatType(bool) { return UnknownNat; } virtual NatTypes GetNatType(const PTimeInterval &) { return UnknownNat; } virtual bool SetServer(const PString &) { return false; } virtual bool Open(const PIPSocket::Address &) { return false; } virtual bool CreateSocket(BYTE component,PUDPSocket * & socket, const PIPSocket::Address & binding = PIPSocket::GetDefaultIpAny(),WORD localPort = 0) { return false; } virtual void SetCredentials(const PString &, const PString &, const PString &) {} #endif protected: H323EndPoint* ep; UPnPThread* m_pUPnP; PIPSocket::Address m_pExtIP; PBoolean m_pShutdown; PBoolean available; PBoolean active; }; #ifndef _WIN32_WCE #if PTLIB_VER > 260 PPLUGIN_STATIC_LOAD(UPnP,PNatMethod); #else PWLIB_STATIC_LOAD_PLUGIN(UPnP,PNatMethod); #endif #endif class UPnPUDPSocket : public PUDPSocket { PCLASSINFO(UPnPUDPSocket, PUDPSocket); public: /**@name Construction/Deconstructor */ //@{ /** create a UDP Socket Fully Nat Supported ready for H323plus to Call. */ UPnPUDPSocket(PNatMethod_UPnP * nat); /** Deconstructor to reallocate Socket and remove any exiting allocated NAT ports, */ ~UPnPUDPSocket(); /** Set Masq Address */ void SetMasqAddress(const PIPSocket::Address & ip, WORD port); PBoolean GetLocalAddress(Address & addr); PBoolean GetLocalAddress(Address & addr, WORD & port); //@} protected: PNatMethod_UPnP* natMethod; PIPSocket::Address extIP; WORD extPort; }; #endif // H_UPNP h323plus/include/h460/h460_oid3.h0000644000175000017500000001224711561712073014774 0ustar markmark/* * h460_oid3.h * * H460 Presence implementation class. * * h323plus library * * Copyright (c) 2009 ISVO (Asia) Pte. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * Contributor(s): ______________________________________. * * $Id $ * * */ #ifndef H_H460_Featureoid3 #define H_H460_Featureoid3 #include #include // Must call the following #include #if _MSC_VER #pragma once #endif ///////////////////////////////////////////////////////////// class H460_FeatureOID3; class H460PresenceHandler : public H323PresenceHandler { public: H460PresenceHandler(H323EndPoint & _ep); void AttachFeature(H460_FeatureOID3 * _feat); void SetRegistered(bool registered); void SetPresenceState(const PStringList & epalias, unsigned localstate, const PString & localdisplay, PBoolean updateOnly = false ); void AddInstruction(const PString & epalias, H323PresenceHandler::InstType instType, const PStringList & subscribe, PBoolean autoSend = true); void AddAuthorization(const OpalGloballyUniqueID id, const PString & epalias, PBoolean approved, const PStringList & subscribe); PStringList & GetSubscriptionList(); PStringList & GetBlockList(); // Inherited virtual void OnNotification(MsgType tag, const H460P_PresenceNotification & notify, const H225_AliasAddress & addr ); virtual void OnSubscription(MsgType tag, const H460P_PresenceSubscription & subscription, const H225_AliasAddress & addr ); virtual void OnInstructions(MsgType tag, const H460P_ArrayOf_PresenceInstruction & instruction, const H225_AliasAddress & addr ); // Events to notify endpoint void PresenceRcvNotification(const H225_AliasAddress & addr, const H323PresenceNotification & notify); void PresenceRcvAuthorization(const H225_AliasAddress & addr, const H323PresenceSubscription & subscript); void PresenceRcvInstruction(const H225_AliasAddress & addr, const H323PresenceInstruction & instruct); void AddEndpointFeature(int feat); void AddEndpointH460Feature(const H225_GenericIdentifier & featid, const PString & display); void AddEndpointGenericData(const H225_GenericData & data); localeInfo & GetLocationInfo() { return EndpointLocale; } private: // Lists PStringList PresenceSubscriptions; PStringList PresenceBlockList; list EndpointFeatures; localeInfo EndpointLocale; H225_ArrayOf_GenericData genericData; PBoolean presenceRegistration; PBoolean pendingMessages; PDECLARE_NOTIFIER(PTimer, H460PresenceHandler, dequeue); PTimer QueueTimer; H323EndPoint & ep; H460_FeatureOID3 * feat; }; ///////////////////////////////////////////////////////////// class H323EndPoint; class H460_FeatureOID3 : public H460_FeatureOID { PCLASSINFO(H460_FeatureOID3,H460_FeatureOID); public: H460_FeatureOID3(); virtual ~H460_FeatureOID3(); virtual void AttachEndPoint(H323EndPoint * _ep); static PStringArray GetFeatureName() { return PStringArray("OID3"); }; static PStringArray GetFeatureFriendlyName() { return PStringArray("Presence"); }; static int GetPurpose() { return FeatureRas; }; static PStringArray GetIdentifier(); virtual PBoolean CommonFeature() { return remoteSupport; } virtual PBoolean OnSendGatekeeperRequest(H225_FeatureDescriptor & pdu); virtual PBoolean OnSendRegistrationRequest(H225_FeatureDescriptor & pdu); virtual void OnReceiveRegistrationConfirm(const H225_FeatureDescriptor & pdu); virtual PBoolean OnSendServiceControlIndication(H225_FeatureDescriptor & pdu); virtual void OnReceiveServiceControlIndication(const H225_FeatureDescriptor & pdu); private: PBoolean remoteSupport; H460PresenceHandler * handler; }; #ifndef _WIN32_WCE #if PTLIB_VER > 260 PPLUGIN_STATIC_LOAD(OID3, H460_Feature); #else PWLIB_STATIC_LOAD_PLUGIN(OID3, H460_Feature); #endif #endif #endif h323plus/include/h460/h4601.h0000644000175000017500000010240411652540116014130 0ustar markmark// H4601.h: /* * Virteos H.460 Implementation for the h323plus Library. * * Virteos is a Trade Mark of ISVO (Asia) Pte Ltd. * * Copyright (c) 2004 ISVO (Asia) Pte Ltd. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is derived from and used in conjunction with the * OpenH323 Project (www.openh323.org/) * * The Initial Developer of the Original Code is ISVO (Asia) Pte Ltd. * * * Contributor(s): ______________________________________. * * $Id: h4601.h,v 1.24 2011/10/28 14:46:38 shorne Exp $ * * */ #if !defined(_H460_H) #define _H460_H #ifdef P_USE_PRAGMA #pragma interface #endif #include "h225.h" #include "transports.h" #include "guid.h" #include #include #include #include "ptlib_extras.h" #ifdef _MSC_VER #pragma warning(disable:4100) #endif /////////////////////////////////////////////////////////////////////////////// class OpalOID : public PASN_ObjectId { public: OpalOID(); OpalOID( const char * str ///< New string to assign. ); OpalOID operator+(const char *); unsigned GetLastIdentifier() { return (*this)[GetSize()-1]; } }; ////////////////////////////////////////////////////////////////////////////// /**This is a base class for H.460 FeatureID. Feature ID's can be in 3 formats: Standard : h460 series feature unsigned values; OID : Array of unsigned values; NonStandard : PString Value The Derived Feature ID used as an index of the H460_FeatureContent is used to describe the parameters of a Feature. */ class H460_FeatureID : public H225_GenericIdentifier { public: /**@name Construction */ //@{ /** Blank Feature */ H460_FeatureID(); /** Standard Feature ID */ H460_FeatureID(unsigned ID); /** OID Feature ID */ H460_FeatureID(OpalOID ID); /** NonStandard Feature ID */ H460_FeatureID(PString ID); H460_FeatureID(H225_GenericIdentifier ID); //@} /**@name Operators */ //@{ /** Standard Feature ID */ operator unsigned () const { return ((PASN_Integer *)choice)->GetValue(); }; /** OID Feature ID */ operator OpalOID & () const { return (OpalOID &)*choice; }; /** NonStandard Feature ID */ operator PString () const { return ((H225_GloballyUniqueID *)choice)->AsString(); }; PINLINE H460_FeatureID & operator=(unsigned ID); PINLINE H460_FeatureID & operator=(OpalOID ID); PINLINE H460_FeatureID & operator=(PString ID); /** Get the FeatureType */ unsigned GetFeatureType() const { return GetTag(); }; PString IDString() const; //@} /**@name PDictionary */ //@{ PObject * Clone() const; PObject::Comparison Compare(const PObject & obj) const; //@} }; /////////////////////////////////////////////////////////////////////////////// /**This is a base class for H.323 Feature handling. This implements the service class session management as per H460 Series. */ class H460_Feature; class H460_FeatureTable; class H460_FeatureContent : public H225_Content { public: /**@name Construction */ //@{ /** Blank Feature */ H460_FeatureContent(); /** PASN_OctetString Raw information which can be deseminated by Derived Class */ H460_FeatureContent(const PASN_OctetString & param); /** String Value */ H460_FeatureContent(const PString & param); /** Blank Feature */ H460_FeatureContent(PASN_BMPString & param); /** Boolean Value */ H460_FeatureContent(const PBoolean & param); /** Integer Value */ H460_FeatureContent(unsigned param, unsigned len); /** Feature Identifier */ H460_FeatureContent(const H460_FeatureID & id); /** Alias Address Raw */ H460_FeatureContent(const H225_AliasAddress & add); /** Alias Address Encoded */ H460_FeatureContent(const PURL & add); /** Transport Address */ H460_FeatureContent(const H323TransportAddress & add); /** Feature Table */ H460_FeatureContent(const H460_FeatureTable & table); /** GUID */ H460_FeatureContent(const OpalGloballyUniqueID & guid); /** Features */ H460_FeatureContent(H460_Feature * data); /** Creation from PDU */ H460_FeatureContent(const H225_Content & param); //@} /**@name Content Operators */ //@{ operator PASN_OctetString () const { return *((PASN_OctetString *)choice); }; operator PString () const { switch (GetTag()) { case e_text: return ((PASN_IA5String &)*choice).GetValue(); case e_transport: return H323TransportAddress(*(H225_TransportAddress *)choice); } return PString(); }; operator PASN_BMPString () const { return *(PASN_BMPString *)choice; }; operator PBoolean () const { return *(PASN_Boolean *)choice; }; operator unsigned () const { switch (GetTag()) { case e_number8: case e_number16: case e_number32: return *(PASN_Integer*)choice; default: return 0; } } operator H460_FeatureID () const { return *(H225_GenericIdentifier *)choice; }; operator H225_AliasAddress () const { return *(H225_AliasAddress *)choice; }; operator H323TransportAddress () const { return H323TransportAddress(*(H225_TransportAddress *)choice); }; operator H460_FeatureTable *() { return (H460_FeatureTable *)choice; }; operator H460_Feature *() { return (H460_Feature *)choice; }; //@} }; /////////////////////////////////////////////////////////////////////////////// /**This is a base class for H.323 Feature handling. This implements the service class session management as per H460 Series. */ class H460_Feature; class H460_FeatureParameter : public H225_EnumeratedParameter { public: /**@name Construction */ //@{ /**Create a Blank Feature. */ H460_FeatureParameter(); /**Create a new handler for a Standard H460 Feature. */ H460_FeatureParameter(unsigned Identifier); /**Create a new handler for a NonStandard H460 Feature. */ H460_FeatureParameter(const PString & Identifier); /**Create a new handler for a OID H460 Feature. */ H460_FeatureParameter(const OpalOID & Identifier); /**Create a new handler from PDU */ H460_FeatureParameter(const H225_EnumeratedParameter & param); /**Create a new Handler from FeatureID */ H460_FeatureParameter(const H460_FeatureID & ID); //@} /**@name ID Operators */ //@{ /** Feature Parameter ID */ const H460_FeatureID ID() { return m_id; }; /** Feature Parameter Contents */ void addContent(const H460_FeatureContent & con ) { IncludeOptionalField(e_content); m_content = con; }; /** Replace Parameter Contents */ void replaceContent(const H460_FeatureContent & con ) { if (hasContent()) delete &m_content; m_content = con; }; /** Feature parameter has Value */ PBoolean hasContent() { return (GetTag() == e_content); }; //@} /**@name Parameter Value Operators */ //@{ operator PASN_OctetString &(); operator PString (); operator PASN_BMPString &(); operator PBoolean (); operator unsigned (); operator H460_FeatureID &(); operator H225_AliasAddress &(); operator H323TransportAddress (); operator H225_ArrayOf_EnumeratedParameter &(); operator PURL (); operator OpalGloballyUniqueID (); H460_FeatureContent operator=( const PASN_OctetString & value ); H460_FeatureContent operator=( const PString & value ); H460_FeatureContent operator=( const PASN_BMPString & value ); H460_FeatureContent operator=( const PBoolean & value ); H460_FeatureContent operator=( const unsigned & value ); H460_FeatureContent operator=( const H460_FeatureID & value ); H460_FeatureContent operator=( const H225_AliasAddress & value ); H460_FeatureContent operator=( const H323TransportAddress & value ); H460_FeatureContent operator=( const H460_FeatureTable & value ); H460_FeatureContent operator=( H460_Feature * value ); H460_FeatureContent operator=( const OpalGloballyUniqueID & value ); }; /////////////////////////////////////////////////////////////////////////////// /**This is a base class for H.323 Feature handling. This implements the service class session management as per H460 Series. */ class H460_FeatureTable : public H225_ArrayOf_EnumeratedParameter { public: /**@name Construction */ //@{ /** Blank Feature */ H460_FeatureTable(); /** Contruction received from PDU */ H460_FeatureTable(const H225_ArrayOf_EnumeratedParameter & Xparams); //@} /**@name Construction */ //@{ /** AddParameter Add a parameter to the parameter list from the two components which make up the parameter. */ H460_FeatureParameter & AddParameter(const H460_FeatureID & id, const H460_FeatureContent & con); /** AddParameter Add parameter without any content */ H460_FeatureParameter & AddParameter(const H460_FeatureID & id); /** AddParameter Add parameter from information received in a PDU */ void AddParameter(H225_EnumeratedParameter & Xparam); /** GetParameter Get the parameter at defined index location in the parameter list. Used for iterations of the parameter list. */ H460_FeatureParameter & GetParameter(PINDEX id); /** GetParameter Get the parameter with the matching Feature ID. The paramter list is searcheed to find the parameter with the matching feature id. If not found returns a blank feature parameter */ H460_FeatureParameter & GetParameter(const H460_FeatureID & id); /** GetParameterIndex Get the paramter list index for the feature parameter with the matching feature id. */ PINDEX GetParameterIndex(const H460_FeatureID & id); /** HasParameter Return True if the parameter list contains a matching feature parameter with the supplied feature id. */ PBoolean HasParameter(const H460_FeatureID & id); /** RemoveParameter Removes Feature Parameter from the Parameter list at the specified index. */ void RemoveParameter(PINDEX id); /** RemoveParameter Remove Feature Parameter from the Parameter list with the matching Feature ID. */ void RemoveParameter(const H460_FeatureID & id); /** ReplaceParameter Replace the Feature contents of the unique Feature parameter with matching Feature ID in the parameter list. */ void ReplaceParameter(const H460_FeatureID & id, const H460_FeatureContent & con); /** ParameterCount Number of Feature Parameters in the Parameter List. */ int ParameterCount() { return GetSize(); }; /** ParameterIsUnique return TRUE if there is only 1 instance of feature parameter with matching feature ID exists in the feature list. You cannot replace the contents of the parameter if the parameter ID is not unique. */ PBoolean ParameterIsUnique(const H460_FeatureID & id); /** Operator */ inline H460_FeatureParameter & operator[]( PINDEX id ///* Index position in the collection of the object. ) const { return operator[](id); }; /** Operator */ H460_FeatureParameter & operator[]( PINDEX id ///* Index position in the collection of the object. ); //@} }; /////////////////////////////////////////////////////////////////////////////// /**This is a base class for H.323 Feature handling. This implements the service class session management as per H460 Series. */ class H323EndPoint; class H323Connection; class H460_Feature : public H225_FeatureDescriptor { public: /**@name Construction */ //@{ /**Default Constructor */ H460_Feature(); /**Create a new handler for a Standard H460 Feature. */ H460_Feature(unsigned Identifier); /**Create a new handler for a NonStandard H460 Feature. */ H460_Feature(PString Identifier); /**Create a new handler for a OID H460 Feature. */ H460_Feature(OpalOID Indentifier); /**Create a new handler for a PDU Received Feature. */ H460_Feature(const H225_FeatureDescriptor & descriptor); //@} /**@name Enumerators */ //@{ enum { FeatureNeeded = 1, ///< The Feature is Needed FeatureDesired, ///< Desired Feature FeatureSupported ///< Supported Feature } FeatureCategory; enum { FeatureBase =4, ///< Create Startup use only Startup FeatureBaseAll =5, ///< Create Startup use RAS and Signal FeatureBaseRas =6, ///< Create Startup use RAS FeatureBaseSignal=7, ///< Create Base use Signal FeatureRas =8, ///< Create Registering GK FeatureSignal =16, ///< Create Call Setup FeaturePresence =24 ///< Create Call Setup/Advertise in Presence } FeatureInstance; //@} /**@name Operators */ //@{ /** Standard Feature ID */ operator unsigned () const { return (H460_FeatureID)m_id; }; /** OID Feature ID */ // operator OpalOID () const { return (H460_FeatureID)m_id; }; /** NonStandard Feature ID */ operator PString () const { return (H460_FeatureID)m_id; }; /** Get the FeatureID */ H460_FeatureID GetFeatureID() { return m_id; }; /** set the FeatureID */ void SetFeatureID(const H460_FeatureID & id) { m_id = id; }; /** Get FeatureID as String */ PString GetFeatureIDAsString(); /** Get the FeatureType */ unsigned GetFeatureType() { return ((H460_FeatureID)m_id).GetFeatureType(); }; /** Whether the current message is advertised. */ virtual PBoolean FeatureAdvertised(int mtype); /** Whether Supports Non-Call Supplimentary Service */ virtual PBoolean SupportNonCallService() { return false; }; //@} /**@name Parameter Control */ //@{ /** Add Parameter */ virtual H460_FeatureParameter & AddParameter(H460_FeatureID * id, const H460_FeatureContent & con); /** Add Parameter without contents */ virtual H460_FeatureParameter & AddParameter(H460_FeatureID * id); /** Add Parameter from H460_FeatureParameter */ virtual void AddParameter(H460_FeatureParameter * param); /** Delete Parameter */ virtual void RemoveParameter(PINDEX id); /** Replace Parameter */ virtual void ReplaceParameter(const H460_FeatureID & id, const H460_FeatureContent & con); /** Get Parameter at index id */ H460_FeatureParameter & GetFeatureParameter(PINDEX id); /** Get Parameter with FeatureID */ H460_FeatureParameter & GetFeatureParameter(const H460_FeatureID & id); /** Has Feature with FeatureID */ PBoolean HasFeatureParameter(const H460_FeatureID & id); /** Contains Parameter (Use this when casting from H225_FeatureDescriptor) */ PBoolean Contains(const H460_FeatureID & id); /** Retrieve Parameter (Use this when casting from H225_FeatureDescriptor) */ H460_FeatureParameter & Value(const H460_FeatureID & id); /** Accessing the Parameters */ inline H460_FeatureParameter & operator()( PINDEX id //* Index position in the collection of the object. ) const { return operator()(id); }; H460_FeatureParameter & operator()( PINDEX id ///* Index position in the collection of the object. ); /** Accessing the Parameters */ inline H460_FeatureParameter & operator[]( const H460_FeatureID & id //< FeatureID of the object. ) const { return operator()(id); }; H460_FeatureParameter & operator()( const H460_FeatureID & id ///< FeatureID of the object. ); /** Get the Number of Parameters */ int GetParameterCount() { return CurrentTable->ParameterCount(); }; /** Get the Current Feature Table */ H460_FeatureTable & GetCurrentTable(); /** Set the current feature table */ void SetCurrentTable(H460_FeatureTable & table); /** Set the curernt Feature Table from Parameter */ void SetCurrentTable(H460_FeatureParameter & param); /** Set to default Feature table */ void SetDefaultTable(); //@} /**@name Plugin Management */ //@{ /** Get Feature Names */ static PStringList GetFeatureNames(PPluginManager * pluginMgr = NULL); /** Get Feature Friendly Names */ static PStringList GetFeatureFriendlyNames(const PString & feature, PPluginManager * pluginMgr = NULL); /** Create instance of a feature */ static H460_Feature * CreateFeature(const PString & featurename, ///< Feature Name Expression int FeatureType = FeatureBase, ///< Feature Type PPluginManager * pluginMgr = NULL ///< Plugin Manager ); /** Get Feature Name. This is usually the Derived Class Name */ static PStringArray GetFeatureName() { return PStringArray("empty"); }; /** Get Feature Friendly Name This usually the user friendly description */ static PStringArray GetFeatureFriendlyName() { return PStringArray("empty"); }; /** Get the purpose of the the Feature whether for Signalling,RAS or both. This determines when the class is instantized */ static int GetPurpose() { return FeatureBase; }; /** Get the Feature Identifier */ static PStringArray GetIdentifier() { return PStringArray("empty"); } /** Get the Feature list to be advertised for presence */ static PBoolean PresenceFeatureList(std::map & plist, H323EndPoint * ep, PPluginManager * pluginMgr = NULL); /** Attach the endpoint. Override this to link your own Endpoint Instance. */ virtual void AttachEndPoint(H323EndPoint * _ep); /** Attach the connection object, Override this to link to your own Connection Instance */ virtual void AttachConnection(H323Connection * _con); virtual PBoolean CommonFeature() { return false; } //@} /**@name H323 RAS Interface */ //@{ /* These are the main calls which can be overridden to allow the various derived features access to the GEF interface. */ // PDU calls (Used in the H225_RAS Class) virtual PBoolean OnSendGatekeeperRequest(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual PBoolean OnSendGatekeeperConfirm(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual PBoolean OnSendGatekeeperReject(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual void OnReceiveGatekeeperRequest(const H225_FeatureDescriptor & pdu) {}; virtual void OnReceiveGatekeeperConfirm(const H225_FeatureDescriptor & pdu) {}; virtual void OnReceiveGatekeeperReject(const H225_FeatureDescriptor & pdu) {}; virtual PBoolean OnSendRegistrationRequest(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual PBoolean OnSendRegistrationConfirm(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual PBoolean OnSendRegistrationReject(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual void OnReceiveRegistrationRequest(const H225_FeatureDescriptor & pdu) {}; virtual void OnReceiveRegistrationConfirm(const H225_FeatureDescriptor & pdu) {}; virtual void OnReceiveRegistrationReject(const H225_FeatureDescriptor & pdu) {}; virtual PBoolean OnSendAdmissionRequest(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual PBoolean OnSendAdmissionConfirm(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual PBoolean OnSendAdmissionReject(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual void OnReceiveAdmissionRequest(const H225_FeatureDescriptor & pdu) {}; virtual void OnReceiveAdmissionConfirm(const H225_FeatureDescriptor & pdu) {}; virtual void OnReceiveAdmissionReject(const H225_FeatureDescriptor & pdu) {}; virtual PBoolean OnSendLocationRequest(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual PBoolean OnSendLocationConfirm(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual PBoolean OnSendLocationReject(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual void OnReceiveLocationRequest(const H225_FeatureDescriptor & pdu) {}; virtual void OnReceiveLocationConfirm(const H225_FeatureDescriptor & pdu) {}; virtual void OnReceiveLocationReject(const H225_FeatureDescriptor & pdu) {}; virtual PBoolean OnSendServiceControlIndication(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual PBoolean OnSendServiceControlResponse(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual void OnReceiveServiceControlIndication(const H225_FeatureDescriptor & pdu) {}; virtual void OnReceiveServiceControlResponse(const H225_FeatureDescriptor & pdu) {}; virtual PBoolean OnSendNonStandardMessage(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual void OnReceiveNonStandardMessage(const H225_FeatureDescriptor & pdu) {}; virtual PBoolean OnSendUnregistrationRequest(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual void OnReceiveUnregistrationRequest(const H225_FeatureDescriptor & pdu) {}; virtual PBoolean OnSendEndpoint(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual void OnReceiveEndpoint(const H225_FeatureDescriptor & pdu) {}; virtual PBoolean OnSendInfoRequestMessage(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual void OnReceiveInfoRequestMessage(const H225_FeatureDescriptor & pdu) {}; virtual PBoolean OnSendInfoRequestResponseMessage(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual void OnReceiveInfoRequestResponseMessage(const H225_FeatureDescriptor & pdu) {}; virtual PBoolean OnSendDisengagementRequestMessage(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual void OnReceiveDisengagementRequestMessage(const H225_FeatureDescriptor & pdu) {}; virtual PBoolean OnSendDisengagementConfirmMessage(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual void OnReceiveDisengagementConfirmMessage(const H225_FeatureDescriptor & pdu) {}; //@} /**@name Signal PDU Interface */ //@{ // UUIE Calls (Used in the H323SignalPDU Class) virtual PBoolean OnSendSetup_UUIE(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual void OnReceiveSetup_UUIE(const H225_FeatureDescriptor & pdu) {}; virtual PBoolean OnSendAlerting_UUIE(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual void OnReceiveAlerting_UUIE(const H225_FeatureDescriptor & pdu) {}; virtual PBoolean OnSendCallProceeding_UUIE(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual void OnReceiveCallProceeding_UUIE(const H225_FeatureDescriptor & pdu) {}; virtual PBoolean OnSendCallConnect_UUIE(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual void OnReceiveCallConnect_UUIE(const H225_FeatureDescriptor & pdu) {}; virtual PBoolean OnSendFacility_UUIE(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual void OnReceiveFacility_UUIE(const H225_FeatureDescriptor & pdu) {}; virtual PBoolean OnSendReleaseComplete_UUIE(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual void OnReceiveReleaseComplete_UUIE(const H225_FeatureDescriptor & pdu) {}; virtual PBoolean OnSendUnAllocatedPDU(H225_FeatureDescriptor & pdu) { return FALSE; }; virtual void OnReceivedUnAllocatedPDU(const H225_FeatureDescriptor & pdu) {}; //@} /**@name H501 Support */ //@{ // H501 Calls (To Be Implemented // H501_MessageCommonInfo // H501_AddressTemplate // H501_ContactInformation // H501_RouteInformation //@} protected: H460_FeatureTable * CurrentTable; H323EndPoint * ep; H323Connection * con; }; class H460_FeatureStd : public H460_Feature { PCLASSINFO(H460_FeatureStd, H460_Feature); public: /**@name Construction */ //@{ H460_FeatureStd() {}; /**Create a new handler for a Standard H460 Feature. */ H460_FeatureStd(unsigned Identifier); //@} /**@name Parameter Control */ //@{ /** Add item */ void Add(unsigned id); void Add(unsigned id, const H460_FeatureContent & con); /** Delete item */ void Remove(unsigned id); /** Replace item */ void Replace(unsigned id,const H460_FeatureContent & con); /** Has Parameter */ PBoolean HasParameter(unsigned id); /** Get Parameter */ H460_FeatureParameter & GetParameter(unsigned id); //@} /** Operator */ inline H460_FeatureParameter & operator[] ( unsigned id ///* Index value of the object. ) { return GetParameter(id); }; }; class H460_FeatureNonStd : public H460_Feature { PCLASSINFO(H460_FeatureNonStd, H460_Feature); public: /**@name Construction */ //@{ /**Create a new handler for a Standard H460 Feature. */ H460_FeatureNonStd(PString Identifier); //@} /**@name Parameter Control */ //@{ /** Add item */ void Add(const PString & id); void Add(const PString & id, const H460_FeatureContent & con); /** Delete item */ void Remove(const PString & id); /** Replace item */ void Replace(const PString & id, const H460_FeatureContent & con); /** Has Parameter */ PBoolean HasParameter(PString id); //@} /** Operator */ inline H460_FeatureParameter & operator[]( PString id ///* Index position in the collection of the object. ) const { return operator[](id); }; /** Operator */ H460_FeatureParameter & operator[]( PString id ///* Index position in the collection of the object. ); }; class H460_FeatureOID : public H460_Feature { PCLASSINFO(H460_FeatureOID, H460_Feature); public: /**@name Construction */ //@{ /**Create a new handler for a Standard H460 Feature. */ H460_FeatureOID(OpalOID Identifier); //@} /**@name Parameter Control */ //@{ /** Add item */ void Add(const PString & id); void Add(const PString & id, const H460_FeatureContent & con); /** Delete item */ void Remove(const PString & id); /** Replace item */ void Replace(const PString & id, const H460_FeatureContent & con); /** Has Parameter */ PBoolean HasParameter(OpalOID id); /** Contains a Parameter */ PBoolean Contains(const PString & id); /** Value of a parameter */ H460_FeatureParameter & Value(const PString & id); //@} /** Operator */ inline H460_FeatureParameter & operator[]( OpalOID id ///* Index position in the collection of the object. ) const { return operator[](id); }; /** Operator */ H460_FeatureParameter & operator[]( OpalOID id ///* Index position in the collection of the object. ); protected: PString GetBase(); }; /////////////////////////////////////////////////////////////////////////////// // Dictionary/List of Features H323DICTIONARY(H460_Features, H460_FeatureID , H460_Feature); ////////////////////////////////////////////////////////////////////////////// // FeatureSet Main Calling Class class H323EndPoint; class H460_FeatureSet : public PObject { PCLASSINFO(H460_FeatureSet, PObject); public: /** Blank Constructor */ H460_FeatureSet(); /** Build a new featureSet from a base featureset */ H460_FeatureSet(H460_FeatureSet * _base); /** Build a Feature Set from the contents of a Feature Set PDU */ H460_FeatureSet(const H225_FeatureSet & fs); /** Build a FeatureSet from the contents of a generic data field. */ H460_FeatureSet(const H225_ArrayOf_GenericData & generic); /** Derive new Feature Set based on this Feature Set ie Clone this FeatureSet */ H460_FeatureSet * DeriveNewFeatureSet(); /** Load Entire Feature Sets from PFactory loader */ virtual PBoolean LoadFeatureSet(int inst = H460_Feature::FeatureBase, H323Connection * con = NULL); /** Remove uncommon features from featureSet This is usually done after receiving the connect message */ PBoolean RemoveUnCommonFeatures(); /** Process the first PDU, This will combine the features supported by the remote and local party to derive a common feature set. This will remove features that are not supported be the remote. */ PBoolean ProcessFirstPDU(const H225_FeatureSet & fs); /** Create FeatureSet from a FeatureSet PDU */ virtual PBoolean CreateFeatureSet(const H225_FeatureSet & fs); /** Load Feature from id. */ virtual PBoolean LoadFeature(const PString & featid); /** Add a Feature to the Feature Set */ PBoolean AddFeature(H460_Feature * Nfeat); /** Remove a Feature from the Feature Set */ void RemoveFeature(H460_FeatureID id); /** Get Feature with id */ H460_Feature * GetFeature(const H460_FeatureID & id); /** Determine if the FeatureSet has a particular FeatureID. */ PBoolean HasFeature(const H460_FeatureID & feat); /** New Processing Paradigm Main PDU & RAS link to OpenH323 */ void ReceiveFeature(unsigned id, const H225_FeatureSet & Message, PBoolean genericData = false); /** New Processing Paradigm Main PDU & RAS link to OpenH323 */ PBoolean SendFeature(unsigned id, H225_FeatureSet & Message, PBoolean advertise); /**Disable all features Remote does not support H.460 so we remove all features */ void DisableAllFeatures(int msgtype); /** Attach Endpoint */ virtual void AttachEndPoint(H323EndPoint * _ep); /** Attach Base FeatureSet */ virtual void AttachBaseFeatureSet(H460_FeatureSet * _baseSet); /** Attach Endpoint to collect Events from */ H323EndPoint * GetEndPoint() { return ep; }; /** Determine whether the FeatureSet supports NonCallSupplimentaryServices. */ virtual PBoolean SupportNonCallService(const H225_FeatureSet & fs); protected: PBoolean CreateFeatureSetPDU(H225_FeatureSet & fs, unsigned MessageID, PBoolean advertise); void ReadFeatureSetPDU(const H225_FeatureSet & fs, unsigned MessageID, PBoolean genericData = false); H460_FeatureID GetFeatureIDPDU(H225_FeatureDescriptor & pdu); PBoolean CreateFeaturePDU(H460_Feature & Feat, H225_FeatureDescriptor & pdu, unsigned MessageID); void ReadFeaturePDU(H460_Feature & Feat, const H225_FeatureDescriptor & pdu, unsigned MessageID); virtual PBoolean SupportNonCallService(const H460_FeatureID & id); PString PTracePDU(PINDEX id) const; H460_Features Features; H323EndPoint * ep; H460_FeatureSet * baseSet; }; ///////////////////////////////////////////////////////////////////// template class H460PluginServiceDescriptor : public PDevicePluginServiceDescriptor { public: virtual PObject * CreateInstance(int /*userData*/) const { return new className; } virtual PStringArray GetDeviceNames(int userData) const { if (userData == 24) // Presence Identifer return className::GetIdentifier(); else return className::GetFeatureFriendlyName(); } virtual bool ValidateDeviceName(const PString & deviceName, int userData) const { PStringArray devices = className::GetFeatureName(); if ((deviceName == devices[0]) && (className::GetPurpose() >= userData) && (className::GetPurpose() < userData*2)) { return true; } else return false; } }; #define H460_FEATURE(name) \ static H460PluginServiceDescriptor H460_Feature##name##_descriptor; \ PCREATE_PLUGIN_STATIC(name, H460_Feature, &H460_Feature##name##_descriptor); \ ///////////////////////////////////////////////////////////////////// #ifdef _MSC_VER #pragma warning(disable:4100) #endif #endif // !defined(_H460_H) h323plus/include/h460/h460_std17.h0000644000175000017500000004041711652377422015106 0ustar markmark/* * h460_std17.h * * H460.17 NAT Traversal class. * * h323plus library * * Copyright (c) 2008-11 ISVO (Asia) Pte. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * Contributor(s): ______________________________________. * * $Id: h460_std17.h,v 1.4 2011/10/28 01:02:10 shorne Exp $ * * */ #ifndef H_H460_FeatureStd17 #define H_H460_FeatureStd17 #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include #include class H323EndPoint; class H323Connection; class H46017Handler; class H460_FeatureStd17 : public H460_FeatureStd { PCLASSINFO(H460_FeatureStd17,H460_FeatureStd); public: H460_FeatureStd17(); virtual ~H460_FeatureStd17(); // Universal Declarations Every H460 Feature should have the following virtual void AttachEndPoint(H323EndPoint * _ep); virtual void AttachConnection(H323Connection * _con); static PStringArray GetFeatureName() { return PStringArray("Std17"); }; static PStringArray GetFeatureFriendlyName() { return PStringArray("NatTraversal-H.460.17"); }; static int GetPurpose() { return FeatureBase; }; static PStringArray GetIdentifier() { return PStringArray("17"); }; virtual PBoolean CommonFeature() { return isEnabled; } ////////////////////// // Public Function call.. PBoolean Initialise(const PString & remoteAddr); ///////////////////// // Registration messages virtual PBoolean OnSendGatekeeperRequest(H225_FeatureDescriptor & pdu); virtual void OnReceiveGatekeeperConfirm(const H225_FeatureDescriptor & pdu); virtual PBoolean OnSendRegistrationRequest(H225_FeatureDescriptor & pdu); virtual void OnReceiveRegistrationConfirm(const H225_FeatureDescriptor & pdu); //////////////////// // Signalling messages virtual PBoolean OnSendSetup_UUIE(H225_FeatureDescriptor & pdu); virtual void OnReceiveSetup_UUIE(const H225_FeatureDescriptor & pdu); virtual PBoolean OnSendCallProceeding_UUIE(H225_FeatureDescriptor & pdu); virtual void OnReceiveCallProceeding_UUIE(const H225_FeatureDescriptor & pdu); virtual PBoolean OnSendAlerting_UUIE(H225_FeatureDescriptor & pdu); virtual void OnReceiveAlerting_UUIE(const H225_FeatureDescriptor & pdu); virtual PBoolean OnSendCallConnect_UUIE(H225_FeatureDescriptor & pdu); virtual void OnReceiveCallConnect_UUIE(const H225_FeatureDescriptor & pdu); protected: PBoolean InitialiseTunnel(const H323TransportAddress & remoteAddr); private: H323EndPoint * EP; H323Connection * CON; H46017Handler * m_handler; PBoolean isEnabled; }; // Need to declare for Factory Loader #ifndef _WIN32_WCE PPLUGIN_STATIC_LOAD(Std17, H460_Feature); #endif /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// class h225Order { public: enum priority { Priority_Critical=1, // Audio RTP Priority_Discretion, // Video RTP Priority_High, // Signaling Priority_low // RTCP }; struct MessageHeader { int sessionId; int priority; PInt64 packTime; }; int operator() ( const std::pair& p1, const std::pair& p2 ) { return ((p1.second.priority >= p2.second.priority) && (p1.second.packTime > p2.second.packTime)); } }; typedef std::priority_queue< std::pair, std::vector< std::pair >, h225Order > h225Queue; //////////////////////////////////////////////////////////////////////// class H46017Handler; class PNatMethod_H46017; class H46017Transport : public H323TransportTCP { PCLASSINFO(H46017Transport, H323TransportTCP); public: enum PDUType { e_raw, }; /**Create a new transport channel. */ H46017Transport( H323EndPoint & endpoint, /// H323 End Point object PIPSocket::Address binding, /// Bind Interface H46017Handler * feat /// Feature ); ~H46017Transport(); /**Handle the H46017 Signalling */ PBoolean HandleH46017SignallingChannelPDU(PThread * thread); /**Handle the H46017 Tunnelled RAS */ PBoolean HandleH46017RAS(const H323SignalPDU & pdu); /**Handle the H46017 Signalling */ PBoolean HandleH46017SignallingSocket(H323SignalPDU & pdu); /**Write a protocol data unit from the transport. This will write using the transports mechanism for PDU boundaries, for example UDP is a single Write() call, while for TCP there is a TPKT header that indicates the size of the PDU. */ PBoolean WritePDU( const PBYTEArray & pdu ///< PDU to write ); /**Write a protocol data unit from the transport. This will write using the transports mechanism for PDU boundaries, for example UDP is a single Write() call, while for TCP there is a TPKT header that indicates the size of the PDU. */ virtual PBoolean WriteSignalPDU( const H323SignalPDU & pdu /// PDU to write ); PBoolean WriteRasPDU( const PBYTEArray & pdu ); /**Read a protocol data unit from the transport. This will read using the transports mechanism for PDU boundaries, for example UDP is a single Read() call, while for TCP there is a TPKT header that indicates the size of the PDU. */ virtual PBoolean ReadPDU( PBYTEArray & pdu /// PDU to Read ); PBoolean WriteTunnel(const H323SignalPDU & msg, const h225Order::MessageHeader & prior); PBoolean ReadTunnel(); PBoolean HandleControlPDU(const H323ControlPDU & pdu); PBoolean PostFrame(unsigned sessionID,bool rtp, const void * buf, PINDEX len); PBoolean isCall() { return isConnected; }; void ConnectionLost(PBoolean established); PBoolean IsConnectionLost() const; // Overrides /**Connect to the remote party. */ virtual PBoolean Connect(); /**Close the channel.(Don't do anything) */ virtual PBoolean Close(); virtual PBoolean IsListening() const; virtual PBoolean IsOpen () const; PBoolean CloseTransport() { return closeTransport; }; protected: PBoolean ReadControl(const H323SignalPDU & msg); PBoolean ReadMedia(const H323SignalPDU & msg); void GenerateFastUpdatePicture(int session); PMutex connectionsMutex; PMutex WriteMutex; PMutex shutdownMutex; PTimeInterval ReadTimeOut; H323Connection * con; PMutex queueMutex; PThread * m_socketWrite; PDECLARE_NOTIFIER(PThread, H46017Transport, SocketWrite); h225Queue signalQueue; H46017Handler * Feature; PBoolean isConnected; PBoolean remoteShutDown; PBoolean closeTransport; }; ////////////////////////////////////////////////////////////////////// class PNatMethod_H46017; class H46017RasTransport; class H46017Handler : public PObject { PCLASSINFO(H46017Handler, PObject); public: H46017Handler(H323EndPoint & _ep, const H323TransportAddress & _remoteAddress ); ~H46017Handler(); H323EndPoint * GetEndPoint(); PBoolean CreateNewTransport(); PBoolean ReRegister(const PString & newid); PBoolean IsOpen() { return openTransport; } PBoolean IsConnectionLost() const { return connectionlost; } void SetConnectionLost(PBoolean newVal) { connectionlost = newVal; } H323TransportAddress GetTunnelBindAddress() const; void AttachRasTransport(H46017RasTransport * _ras); H46017RasTransport * GetRasTransport(); PBoolean RegisterGatekeeper(); static H46017Transport * curtransport; private: H323EndPoint & ep; H46017RasTransport * ras; H323TransportAddress remoteAddress; PIPSocket::Address localBindAddress; PBoolean connectionlost; PBoolean openTransport; PBoolean callEnded; }; /////////////////////////////////////////////////////////////////////////// class PNatMethod_H46017 : public PNatMethod { PCLASSINFO(PNatMethod_H46017,PNatMethod); public: /**@name Construction */ //@{ /** Default Contructor */ PNatMethod_H46017(); /** Deconstructor */ ~PNatMethod_H46017(); //@} /**@name General Functions */ //@{ void AttachEndPoint(H323EndPoint * ep); virtual PBoolean GetExternalAddress( PIPSocket::Address & externalAddress, /// External address of router const PTimeInterval & maxAge = 1000 /// Maximum age for caching ); /** CreateSocketPair Create the UDP Socket pair (does nothing) */ virtual PBoolean CreateSocketPair( PUDPSocket * & /*socket1*/, ///< Created DataSocket PUDPSocket * & /*socket2*/, ///< Created ControlSocket const PIPSocket::Address & /*binding*/ ) { return false; } /** CreateSocketPair Create the UDP Socket pair */ virtual PBoolean CreateSocketPair( PUDPSocket * & socket1, PUDPSocket * & socket2, const PIPSocket::Address & binding, void * userData ); /** SetStatusHeader Build the RTP wrapper message */ void SetInformationHeader(PUDPSocket & data, ///< Data Socket PUDPSocket & control, ///< Control Socket H323Connection::SessionInformation * info ///< Socket Information ); /** isAvailable. Returns whether the Nat Method is ready and available in assisting in NAT Traversal. The principal is function is to allow the EP to detect various methods and if a method is detected then this method is available for NAT traversal The Order of adding to the PNstStrategy determines which method is used */ virtual bool IsAvailable(const PIPSocket::Address&) { return available; }; void SetAvailable() { available = TRUE; }; /** Activate Active/DeActivate the method on a call by call basis */ virtual void Activate(bool act) { active = act; } /** OpenSocket Create a single UDP Socket */ PBoolean OpenSocket(PUDPSocket & socket, PortInfo & portInfo, const PIPSocket::Address & binding) const; static PStringArray GetNatMethodName() { return PStringArray("H46017"); } virtual PString GetName() const { return GetNatMethodName()[0]; } // All these are virtual and never used. virtual bool GetServerAddress( PIPSocket::Address & address, ///< Address of server WORD & port ///< Port server is using. ) const { return false; } virtual bool GetInterfaceAddress( PIPSocket::Address & internalAddress ) const { return false; } virtual PBoolean CreateSocket( PUDPSocket * & socket, const PIPSocket::Address & binding = PIPSocket::GetDefaultIpAny(), WORD localPort = 0 ) { return false; } virtual RTPSupportTypes GetRTPSupport( PBoolean force = PFalse ///< Force a new check ) { return RTPSupported; } //@} #if PTLIB_VER >= 2110 virtual PString GetServer() const { return PString(); } virtual bool GetServerAddress(PIPSocketAddressAndPort & ) const { return false; } virtual NatTypes GetNatType(bool) { return UnknownNat; } virtual NatTypes GetNatType(const PTimeInterval &) { return UnknownNat; } virtual bool SetServer(const PString &) { return false; } virtual bool Open(const PIPSocket::Address &) { return false; } virtual bool CreateSocket(BYTE component,PUDPSocket * & socket, const PIPSocket::Address & binding = PIPSocket::GetDefaultIpAny(),WORD localPort = 0) { return false; } virtual void SetCredentials(const PString &, const PString &, const PString &) {} #endif protected: PBoolean available; ///< Whether this NAT Method is available for call PBoolean active; ///< Whether the method is active for call H46017Handler * handler; ///< handler }; #ifndef _WIN32_WCE PPLUGIN_STATIC_LOAD(H46017, PNatMethod); #endif typedef std::queue RTPQueue; class H46017A_UDPFrame; class H46017UDPSocket : public PUDPSocket { PCLASSINFO(H46017UDPSocket, PUDPSocket); public: /**@name Construction/Deconstructor */ //@{ /** create a UDP Socket Fully Nat Supported ready for H323plus to Call. */ H46017UDPSocket(H46017Handler & _handler, H323Connection::SessionInformation * info, bool _rtpSocket); /** Deconstructor to reallocate Socket and remove any exiting allocated NAT ports, */ ~H46017UDPSocket(); //@} /**@name Functions */ //@{ /**Set Information header Set the RTP wrapper message */ void SetInformationHeader(const H323SignalPDU & _informationMsg, const H323Transport * _transport); // Overrides from class PIPDatagramSocket. /** Read a datagram from a remote computer. @return true if any bytes were sucessfully read. */ virtual PBoolean ReadFrom( void * buf, // Data to be written as URGENT TCP data. PINDEX len, // Number of bytes pointed to by buf. Address & addr, // Address from which the datagram was received. WORD & port // Port from which the datagram was received. ); /** Write a datagram to a remote computer. @return true if all the bytes were sucessfully written. */ virtual PBoolean WriteTo( const void * buf, // Data to be written as URGENT TCP data. PINDEX len, // Number of bytes pointed to by buf. const Address & addr, // Address to which the datagram is sent. WORD port // Port to which the datagram is sent. ); PBoolean WriteBuffer(const void * buf, PINDEX len); PBoolean DoPseudoRead(int & selectStatus); PBoolean BuildTunnelMediaPacket(const void * buf, PINDEX len); void GetLocalAddress(H245_TransportAddress & add); void SetRemoteAddress(const H245_TransportAddress & add); //@} private: H46017Transport * m_transport; unsigned m_Session; ///< Current Session ie 1-Audio 2-video bool rtpSocket; // tunnel data containers int m_frameCount; int m_payloadSize; H46017A_UDPFrame * m_frame; H323SignalPDU msg; RTPQueue rtpQueue; PMutex writeMutex; PBoolean shutDown; }; ////////////////////////////////////////////////////////////////////// class H46017RasTransport : public H323TransportUDP { PCLASSINFO(H46017RasTransport, H323TransportUDP); public: H46017RasTransport( H323EndPoint & endpoint, H46017Handler * handler ); ~H46017RasTransport(); virtual PBoolean SetRemoteAddress( const H323TransportAddress & address ); virtual PBoolean Connect(); PBoolean ReceivedPDU( const PBYTEArray & pdu ///< PDU read from Tunnel ); virtual PBoolean ReadPDU( PBYTEArray & pdu ///< PDU read input ); virtual PBoolean WritePDU( const PBYTEArray & pdu ///< PDU to write to tunnel ); virtual PBoolean DiscoverGatekeeper( H323Gatekeeper & gk, ///< Gatekeeper to set on discovery. H323RasPDU & pdu, ///< GatekeeperRequest PDU const H323TransportAddress & address ///< Address of gatekeeper (if present) ); virtual H323TransportAddress GetLocalAddress() const; protected: H46017Handler * m_handler; private: PSyncPoint msgRecd; PBYTEArray recdpdu; }; #endif h323plus/include/h460/h460_std23.h0000644000175000017500000002227411672616560015105 0ustar markmark/* H460_std23.h * * Copyright (c) 2009 ISVO (Asia) Pte Ltd. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is derived from and used in conjunction with the * H323Plus Project (www.h323plus.org/) * * The Initial Developer of the Original Code is ISVO (Asia) Pte Ltd. * * * Contributor(s): ______________________________________. * * $Id: h460_std23.h,v 1.11 2011/12/16 10:29:04 shorne Exp $ * */ #ifndef H_H460_Featurestd23 #define H_H460_Featurestd23 #include #include #include #if _MSC_VER #pragma once #endif // WARNING - remove it when the ptlib problem is fixed! - SH #if SVN_REVISION > 26772 #if _WIN32 #pragma message("H.460.23 Compile issue with PTLib object.h/cxx SVN r26772 revert both files to r26754") #else #warning("H.460.23 Compile issue with PTLib object.h/cxx SVN r26772 revert both files to r26754") #endif #endif class H323EndPoint; class H460_FeatureStd23; class PNatMethod_H46024 : public PSTUNClient, public PThread { // compile issue with PTLIB SVN object.h/cxx r26772 revert both files back to SVN r26754 - SH // commenting out will create a ambiguous delete in class destructor compile error. PCLASSINFO(PNatMethod_H46024, PNatMethod); public: PNatMethod_H46024(); ~PNatMethod_H46024(); static PStringList GetNatMethodName() { return PStringArray("H46024"); }; virtual PString GetName() const { return GetNatMethodName()[0]; } // Start the Nat Method testing void Start(const PString & server,H460_FeatureStd23 * _feat); // Main thread testing void Main(); // Whether the NAT method is Available virtual bool IsAvailable( const PIPSocket::Address & binding = PIPSocket::GetDefaultIpAny() ///< Interface to see if NAT is available on ); // Create the socket pair virtual PBoolean CreateSocketPair( PUDPSocket * & socket1, PUDPSocket * & socket2, const PIPSocket::Address & binding = PIPSocket::GetDefaultIpAny(), void * userData = NULL ); // Whether the NAT Method is available void SetAvailable(); // Whether the NAT method is activated for this call virtual void Activate(bool act); // Reportable NAT Type PSTUNClient::NatTypes GetNATType(); #if PTLIB_VER >= 2110 virtual PString GetServer() const { return PString(); } virtual bool GetServerAddress(PIPSocketAddressAndPort & ) const { return false; } virtual NatTypes GetNatType(bool) { return UnknownNat; } virtual NatTypes GetNatType(const PTimeInterval &) { return UnknownNat; } virtual bool SetServer(const PString &) { return false; } virtual bool Open(const PIPSocket::Address &) { return false; } virtual bool CreateSocket(BYTE,PUDPSocket * &, const PIPSocket::Address,WORD) { return false; } virtual void SetCredentials(const PString &, const PString &, const PString &) {} #endif protected: // Do a NAT test PSTUNClient::NatTypes NATTest(); private: bool isActive; bool isAvailable; PSTUNClient::NatTypes natType; H460_FeatureStd23 * feat; }; /////////////////////////////////////////////////////////////////////////////// class H460_FeatureStd23 : public H460_FeatureStd { PCLASSINFO(H460_FeatureStd23, H460_FeatureStd); public: H460_FeatureStd23(); virtual ~H460_FeatureStd23(); // Universal Declarations Every H460 Feature should have the following virtual void AttachEndPoint(H323EndPoint * _ep); static PStringArray GetFeatureName() { return PStringArray("Std23"); }; static PStringArray GetFeatureFriendlyName() { return PStringArray("P2Pnat Detect-H.460.23"); }; static int GetPurpose() { return FeatureRas; }; static PStringArray GetIdentifier() { return PStringArray("23"); }; virtual PBoolean CommonFeature() { return isEnabled; } // Messages // GK -> EP virtual PBoolean OnSendGatekeeperRequest(H225_FeatureDescriptor & pdu); virtual void OnReceiveGatekeeperConfirm(const H225_FeatureDescriptor & pdu); virtual PBoolean OnSendRegistrationRequest(H225_FeatureDescriptor & pdu); virtual void OnReceiveRegistrationConfirm(const H225_FeatureDescriptor & pdu); H323EndPoint * GetEndPoint() { return (H323EndPoint *)EP; } // Reporting the NAT Type void OnNATTypeDetection(PSTUNClient::NatTypes type, const PIPSocket::Address & ExtIP); bool IsAvailable(); bool AlternateNATMethod(); bool UseAlternate(); #ifdef H323_UPnP void InitialiseUPnP(); #endif protected: bool DetectALG(const PIPSocket::Address & detectAddress); void StartSTUNTest(const PString & server); void DelayedReRegistration(); private: H323EndPoint * EP; PSTUNClient::NatTypes natType; PIPSocket::Address externalIP; PBoolean natNotify; PBoolean alg; PBoolean isavailable; PBoolean isEnabled; int useAlternate; // Delayed Reregistration PThread * RegThread; PDECLARE_NOTIFIER(PThread, H460_FeatureStd23, RegMethod); }; // Need to declare for Factory Loader #if !defined(_WIN32_WCE) #if PTLIB_VER > 260 PPLUGIN_STATIC_LOAD(Std23, H460_Feature); #else PWLIB_STATIC_LOAD_PLUGIN(Std23, H460_Feature); #endif #endif //////////////////////////////////////////////////////// class H323EndPoint; class H323Connection; class H460_FeatureStd24 : public H460_FeatureStd { PCLASSINFO(H460_FeatureStd24, H460_FeatureStd); public: H460_FeatureStd24(); virtual ~H460_FeatureStd24(); // Universal Declarations Every H460 Feature should have the following virtual void AttachEndPoint(H323EndPoint * _ep); virtual void AttachConnection(H323Connection * _ep); static PStringArray GetFeatureName() { return PStringArray("Std24"); }; static PStringArray GetFeatureFriendlyName() { return PStringArray("P2Pnat Media-H.460.24"); }; static int GetPurpose() { return FeatureSignal; }; static PStringArray GetIdentifier() { return PStringArray("24"); }; virtual PBoolean CommonFeature() { return isEnabled; } enum NatInstruct { e_unknown, e_noassist, e_localMaster, e_remoteMaster, e_localProxy, e_remoteProxy, e_natFullProxy, e_natAnnexA, // Same NAT e_natAnnexB, // NAT Offload e_natFailure = 100 }; static PString GetNATStrategyString(NatInstruct method); enum H46024NAT { e_default, // This will use the underlying NAT Method e_enable, // Use H.460.24 method (STUN) e_AnnexA, // Disable H.460.24 method but initiate AnnexA e_AnnexB, // Disable H.460.24 method but initiate AnnexB e_disable // Disable all and remote will do the NAT help }; // Messages virtual PBoolean OnSendAdmissionRequest(H225_FeatureDescriptor & pdu); virtual void OnReceiveAdmissionConfirm(const H225_FeatureDescriptor & pdu); virtual void OnReceiveAdmissionReject(const H225_FeatureDescriptor & pdu); virtual PBoolean OnSendSetup_UUIE(H225_FeatureDescriptor & pdu); virtual void OnReceiveSetup_UUIE(const H225_FeatureDescriptor & pdu); protected: void HandleNATInstruction(NatInstruct natconfig); void SetNATMethods(H46024NAT state); void SetH46019State(bool state); private: H323EndPoint * EP; H323Connection * CON; NatInstruct natconfig; PMutex h460mute; int nattype; bool isEnabled; bool useAlternate; }; inline ostream & operator<<(ostream & strm, H460_FeatureStd24::NatInstruct method) { return strm << H460_FeatureStd24::GetNATStrategyString(method); } // Need to declare for Factory Loader #if !defined(_WIN32_WCE) #if PTLIB_VER > 260 PPLUGIN_STATIC_LOAD(Std24, H460_Feature); #else PWLIB_STATIC_LOAD_PLUGIN(Std24, H460_Feature); #endif #endif #endif h323plus/include/openh323buildopts.h.in0000644000175000017500000000564411712004251016601 0ustar markmark/* * openh323buildopts.h * * Build options generated by the configure script. * * Portable Windows Library * * Copyright (c) 2003 Equivalence Pty. Ltd. * Copyright (c) 20007-11 ISVO(Asia) Pte Ltd. * * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Portable Windows Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Id: openh323buildopts.h.in,v 1.43 2012/01/31 15:28:41 shorne Exp $ * */ #ifndef _OPENH323_BUILDOPTS_H #define _OPENH323_BUILDOPTS_H #include #include #if PTLIB_MAJOR == 2 && PTLIB_MINOR < 10 #define PTLIB_VER ( PTLIB_MAJOR*100 + PTLIB_MINOR*10 + PTLIB_BUILD ) #else #define PTLIB_VER ( PTLIB_MAJOR*1000 + PTLIB_MINOR*10 + PTLIB_BUILD ) #endif #define PTLIB_SVN_REVISION SVN_REVISION ///////////////////////////////////////////////// // // Major options // #undef OPENH323_MAJOR #undef OPENH323_MINOR #undef OPENH323_BUILD #undef OPENH323_VERSION #define H323PLUS_VER ( OPENH323_MAJOR*1000 + OPENH323_MINOR*10 + OPENH323_BUILD ) #if PTLIB_VER >= 2110 #define H323_STLDICTIONARY 1 #endif #undef H323_AUDIO_CODECS #ifdef P_VIDEO #undef H323_VIDEO #endif ////////////////////////////////////////////////// #ifdef H323_AUDIO_CODECS #undef H323_EMBEDDED_GSM #endif // H323_AUDIO_CODECS ///////////////////////////////////////////////// // // Various item support // #undef H323_AEC #undef H323_T38 #undef H323_T120 #undef H323_H224 #undef H323_H230 #if (PTLIB_VER > 260) && (P_SSL) #undef H323_H235 #undef H323_H235_AES256 #endif #ifdef P_VIDEO #undef H323_H239 #endif #undef H323_H248 #undef H323_H249 #undef H323_H341 #ifdef P_LDAP #undef H323_H350 #endif #undef H323_H450 #undef H323_H460 #ifdef H323_H460 #undef H323_H4609 #if (PTLIB_VER > 260) && defined(P_STUN) #undef H323_H46017 #undef H323_H46018 #if defined(H323_H46018) #undef H323_H46019M #endif #undef H323_H46023 #if defined(H323_H46018) && defined(H323_H46023) && defined(P_SSL) #define H323_H46024A 1 #define H323_H46024B 1 #endif #if defined(H323_H46023) && (WINVER > 0x500) #define H323_UPnP 1 #endif #endif #undef H323_H460P #endif #undef H323_H501 #if (PTLIB_VER > 260) && (P_STUN) #undef H323_GNUGK #endif #undef H323_FILE #undef H323_SIGNAL_AGGREGATE #undef H323_RTP_AGGREGATE #endif // End Of File /////////////////////////////////////////////////////////////// h323plus/include/h235plugin.h0000644000175000017500000002272510655704651014624 0ustar markmark/* * h235pugin.h * * h235 Implementation for the h323plus library. * * Copyright (c) 2006 ISVO (Asia) Pte Ltd. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * Contributor(s): ______________________________________. * * $Log: h235plugin.h,v $ * Revision 1.1 2007/08/06 20:50:49 shorne * First commit of h323plus * * * * */ #ifndef __h235PLUGIN_H #define __h235PLUGIN_H #include #ifdef __cplusplus extern "C" { #endif ///////////////////////////////////////////////////////////////////////////////// // // h235 Plugins #define PWLIB_PLUGIN_API_VERSION 0 #define PLUGIN_H235_VERSION 1 // Function calls static const char H235_BuildClear[] = "Build_Clear"; static const char H235_BuildCrypto[] = "Build_Crypto"; static const char H235_FinaliseCrypto[] = "Finalise_Crypto"; static const char H235_ValidateClear[] = "Validate_Clear"; static const char H235_ValidateCrypto[] = "Validate_Crypto"; // Settings direction static const char GET_PLUGINH235_SETTINGS[] = "get_h235_settings"; static const char SET_PLUGINH235_SETTINGS[] = "set_h235_settings"; // Validation Constants #define Pluginh235_Val_OK 0 ///< Security parameters and Msg are ok, no security attacks #define Pluginh235_Val_Absent 1 ///< Security parameters are expected but absent #define Pluginh235_Val_Error 2 ///< Security parameters are present but incorrect #define Pluginh235_Val_InvalidTime 3 ///< Security parameters indicate peer has bad real time clock #define Pluginh235_Val_BadPassword 4 ///< Security parameters indicate bad password in token #define Pluginh235_Val_ReplyAttack 5 ///< Security parameters indicate an attack was made #define Pluginh235_Val_Disabled 6 ///< Security is disabled by local system // Application Constants #define Pluginh235_App_GKAdmission 0 ///< To Be Used for GK Admission #define Pluginh235_App_EPAuthentication 1 ///< To Be Used for EP Authentication #define Pluginh235_App_LRQOnly 2 ///< To Be Used for Location Request Authentication #define Pluginh235_App_AnyApplication 3 ///< To Be Used for Any Application // Settings constants static const char Pluginh235_Set_Application[] ="Application"; static const char Pluginh235_Set_UseGkAndEpIdentifiers[] ="UseGkAndEpIdentifiers"; static const char Pluginh235_Set_IsSecuredPDU[] ="IsSecuredPDU"; static const char Pluginh235_Set_IsSecuredSignalPDU[] ="IsSecuredSignalPDU"; static const char Pluginh235_Set_IsActive[] ="IsActive"; static const char Pluginh235_Set_RemoteId[] ="RemoteId"; static const char Pluginh235_Set_LocalId[] ="LocalId"; static const char Pluginh235_Set_Password[] ="Password"; static const char Pluginh235_Set_TimestampGracePeriod[] ="TimestampGracePeriod"; // Ras Message constants #define Pluginh235_msg_gatekeeperRequest 0 #define Pluginh235_msg_gatekeeperConfirm 1 #define Pluginh235_msg_gatekeeperReject 2 #define Pluginh235_msg_registrationRequest 3 #define Pluginh235_msg_registrationConfirm 4 #define Pluginh235_msg_registrationReject 5 #define Pluginh235_msg_unregistrationRequest 6 #define Pluginh235_msg_unregistrationConfirm 7 #define Pluginh235_msg_unregistrationReject 8 #define Pluginh235_msg_admissionRequest 9 #define Pluginh235_msg_admissionConfirm 10 #define Pluginh235_msg_admissionReject 11 #define Pluginh235_msg_bandwidthRequest 12 #define Pluginh235_msg_bandwidthConfirm 13 #define Pluginh235_msg_bandwidthReject 14 #define Pluginh235_msg_disengageRequest 15 #define Pluginh235_msg_disengageConfirm 16 #define Pluginh235_msg_disengageReject 17 #define Pluginh235_msg_locationRequest 18 #define Pluginh235_msg_locationConfirm 19 #define Pluginh235_msg_locationReject 20 #define Pluginh235_msg_infoRequest 21 #define Pluginh235_msg_infoRequestResponse 22 // Signal message constants #define Pluginh235_msg_setup 0 #define Pluginh235_msg_callProceeding 1 #define Pluginh235_msg_connect 2 #define Pluginh235_msg_alerting 3 #define Pluginh235_msg_information 4 #define Pluginh235_msg_releaseComplete 5 #define Pluginh235_msg_facility 6 #define Pluginh235_msg_progress 7 #define Pluginh235_msg_empty 8 #define Pluginh235_msg_status 9 #define Pluginh235_msg_statusInquiry 10 #define Pluginh235_msg_setupAcknowledge 11 #define Pluginh235_msg_notify 12 ///////////////////////////////////////////////////////////////////////////////// enum Pluginh235_Flags { // Token type Pluginh235_TokenTypeMask = 0x000f, Pluginh235_TokenTypeclear = 0x0000, Pluginh235_TokenTypecrypto = 0x0001, Pluginh235_TokenTypeBoth = 0x0002, // CryptoToken Style Pluginh235_TokenStyleMask = 0x0010, Pluginh235_TokenStyleHash = 0x0010, Pluginh235_TokenStyleSigned = 0x0011, Pluginh235_TokenStyleEncrypted = 0x0012 }; struct Pluginh235_Definition; struct Pluginh235_ControlDefn { const char * name; int (*control)(const struct Pluginh235_Definition * def, void * context, const char * parm, const char * value); }; ///////////////////////////////////////////////////////////////////////////////// struct Pluginh235_information { // start of version 1 fields time_t timestamp; // codec creation time and date - obtain with command: date -u "+%c = %s" const char * sourceAuthor; // source code author const char * sourceVersion; // source code version const char * sourceEmail; // source code email contact information const char * sourceURL; // source code web site const char * sourceCopyright; // source code copyright const char * sourceLicense; // source code license unsigned char sourceLicenseCode; // source code license const char * h235Description; // h235 description const char * h235Manufacturer; // h235 Manufacturer const char * h235Model; // h235 Model const char * h235Email; // h235 email contact information const char * h235URL; // h235 Manufacturer web site // end of version 1 fields }; struct Pluginh235_Definition { unsigned int version; // codec structure version // start of version 1 fields struct Pluginh235_information * info; // license information unsigned int flags; // Pluginh235_Flags, const char * desc; // text decription const char * identifier; // OID Identifier const void * userData; // user data value void *(*createh235)(const struct Pluginh235_Definition * def); // create h235 void (*destroyh235)(const struct Pluginh235_Definition * def); // destroy h235 int (*h235function)(const struct Pluginh235_Definition * def, void * context, // do H235 function const char * function,const void * data, unsigned * dataLen, const void * raw, unsigned * rawLen); struct Pluginh235_ControlDefn * h235Controls; // do control function // end of version 1 fields }; typedef struct Pluginh235_Definition * (* Pluginh235_Geth235Function)(unsigned int *, unsigned int); typedef unsigned (* Pluginh235_GetAPIVersionFunction)(); ////////////////////////////////////////////////////////////////////////////// // // Plugin Definition // // API version #define PLUGIN_H235_API_VER_FN PWLibPlugin_GetAPIVersion #define PLUGIN_H235_API_VER_FN_STR "PWLibPlugin_GetAPIVersion" // Harware Input Device #define PLUGIN_H235_GET_DEVICE_FN Opalh235Plugin_GetDevice #define PLUGIN_H235_GET_DEVICE_FN_STR "Opalh235Plugin_GetDevice" # define PLUGIN_H235_IMPLEMENT(name) \ PLUGIN_CODEC_DLL_API unsigned int PLUGIN_H235_API_VER_FN() \ { return PWLIB_PLUGIN_API_VERSION; } \ #ifdef __cplusplus }; #endif #endif // __h235PLUGIN_H h323plus/include/h230/0000755000175000017500000000000011255274772013222 5ustar markmarkh323plus/include/h230/OID2.h0000644000175000017500000000401411015524165014053 0ustar markmark// // OID2.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H230OID2 #ifndef __H230OID2_H #define __H230OID2_H #ifdef P_USE_PRAGMA #pragma interface #endif #include // // Participant // class H230OID2_Participant : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H230OID2_Participant, PASN_Sequence); #endif public: H230OID2_Participant(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_name, e_vCard }; PASN_Integer m_token; PASN_BMPString m_number; PASN_BMPString m_name; PASN_OctetString m_vCard; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_Participant // class H230OID2_Participant; class H230OID2_ArrayOf_Participant : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H230OID2_ArrayOf_Participant, PASN_Array); #endif public: H230OID2_ArrayOf_Participant(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H230OID2_Participant & operator[](PINDEX i) const; PObject * Clone() const; }; // // ParticipantList // class H230OID2_ParticipantList : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H230OID2_ParticipantList, PASN_Sequence); #endif public: H230OID2_ParticipantList(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H230OID2_ArrayOf_Participant m_list; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H230OID2_H #endif // if ! H323_DISABLE_H230OID2 // End of OID2.h h323plus/include/h230/h230.h0000644000175000017500000003017111255274772014051 0ustar markmark/* * h230.h * * H.230 Conference control class. * * h323plus library * * Copyright (c) 2007 ISVO (Asia) Pte. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * Contributor(s): ______________________________________. * * $Log: h230.h,v $ * Revision 1.7 2009/09/20 00:40:26 shorne * Chjanged to PSyncPoint to avoid threading issues * * Revision 1.6 2008/05/23 11:20:27 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.5 2008/01/22 01:17:11 shorne * Fixes to the H.230 system * * Revision 1.4 2007/11/19 18:06:31 shorne * changed lists from PList to std::list * * Revision 1.3 2007/11/07 15:45:42 willamowius * linux compile fix * * Revision 1.2 2007/10/18 17:44:12 shorne * Small fixes during test compile * * Revision 1.1 2007/10/16 16:35:44 shorne * Added H.230 Support * * * * */ #pragma once #include #include #include #include #ifdef H323_H230 class H230Control : public PObject { PCLASSINFO(H230Control, PObject); public: enum AddResponse { e_Addsuccess, e_AddinvalidRequester, e_AddinvalidNetworkType, e_AddinvalidNetworkAddress, e_AddaddedNodeBusy, e_AddnetworkBusy, e_AddnoPortsAvailable, e_AddconnectionUnsuccessful }; enum LockResponse { e_Locksuccess, e_LockinvalidRequester, e_LockalreadyLocked }; enum EjectResponse { e_Ejectsuccess, e_EjectinvalidRequester, e_EjectinvalidNode }; enum TransferResponse { e_Transfersuccess, e_TransferinvalidRequester }; class userInfo { public: int m_Token; PString m_Number; PString m_Name; PString m_vCard; }; H230Control(const PString & _h323token); /////////////////////////////////////////// // Endpoint Functions PBoolean Invite(const PStringList & aliases); PBoolean LockConference(); PBoolean UnLockConference(); PBoolean EjectUser(int node); PBoolean TransferUser(list node,const PString & number); PBoolean TerminalListRequest(); PBoolean ChairRequest(PBoolean revoke); PBoolean ChairAssign(int node); PBoolean FloorRequest(); PBoolean FloorAssign(int node); PBoolean WhoIsChair(); PBoolean UserEnquiry(list node); // Endpoint Events virtual void OnControlsEnabled(PBoolean /*success*/) {}; virtual void OnConferenceChair(PBoolean /*success*/) {}; virtual void OnConferenceFloor(PBoolean /*success*/) {}; virtual void OnInviteResponse(int /*id*/, const PString & /*calledNo*/, AddResponse /*response*/, int /*errCode*/){}; virtual void OnLockConferenceResponse(LockResponse /*lock*/) {}; virtual void OnUnLockConferenceResponse(LockResponse /*lock*/) {}; virtual void OnEjectUserResponse(int /*node*/, EjectResponse /*lock*/) {}; virtual void OnTransferUserResponse(list /*node*/,const PString & /*number*/, TransferResponse /*result*/) {}; virtual void OnTerminalListResponse(list node) {}; virtual void ConferenceJoined(int /*terminalId*/){}; virtual void ConferenceLeft(int /*terminalId*/) {}; virtual void MakeChairResponse(PBoolean /*success*/) {}; virtual void ChairAssigned(int /*node*/) {}; virtual void FloorAssigned(int /*node*/) {}; virtual void OnChairTokenResponse(int /*id*/, const PString & /*name*/) {}; virtual void OnFloorRequested(int /*terminalId*/,PBoolean /*cancel*/) {}; virtual void OnUserEnquiryResponse(const list &) {}; /////////////////////////////////////////// // Server Events virtual void OnInvite(const PStringList & /*alias*/) const {}; virtual void OnLockConference(PBoolean /*state*/) const {}; virtual void OnEjectUser(int /*node*/) const {}; virtual void OnTransferUser(list /*node*/,const PString & /*number*/) const {}; virtual void OnTerminalListRequest() const {}; virtual void ChairRequested(const int & /*terminalId*/,PBoolean /*cancel*/) {}; virtual void OnFloorRequest() {}; virtual void OnChairTokenRequest() const {}; virtual void OnChairAssign(int /*node*/) const {}; virtual void OnFloorAssign(int /*node*/) const {}; virtual void OnUserEnquiry(list) const {}; // Server Commands PBoolean InviteResponse(int /*id*/, const PString & /*calledNo*/, AddResponse /*response*/, int /*errCode*/); PBoolean LockConferenceResponse(LockResponse lock); PBoolean UnLockConferenceResponse(LockResponse lock); PBoolean EjectUserResponse(int node, EjectResponse lock); PBoolean TransferUserResponse(list node,const PString & number, TransferResponse result); PBoolean TerminalListResponse(list node); PBoolean ChairTokenResponse(int termid,const PString & termname); PBoolean ChairAssignResponse(int termid,const PString & termname); PBoolean FloorAssignResponse(int termid,const PString & termname); PBoolean UserEnquiryResponse(const list &); // Server Indications PBoolean ConferenceJoinedInd(int termId); PBoolean ConferenceLeftInd(int termId); PBoolean ConferenceTokenAssign(int mcuId,int termId); void SetChair(PBoolean success); void SetFloor(PBoolean success); //////////////////////////////////////////////// // Common // standard incoming requests PBoolean OnHandleConferenceRequest(const H245_ConferenceRequest &); PBoolean OnHandleConferenceResponse(const H245_ConferenceResponse &); PBoolean OnHandleConferenceCommand(const H245_ConferenceCommand &); PBoolean OnHandleConferenceIndication(const H245_ConferenceIndication &); // Generic incoming requests PBoolean OnHandleGenericPDU(const H245_GenericMessage & msg); protected: // H.245 PBoolean OnGeneralRequest(int request); PBoolean OnGeneralIndication(int req, const H245_TerminalLabel & label); PBoolean OnReceiveTerminalListResponse(const H245_ArrayOf_TerminalLabel & list); PBoolean OnReceiveChairResponse(const H245_ConferenceResponse_makeMeChairResponse & resp); PBoolean OnReceiveChairTokenResponse(const H245_ConferenceResponse_chairTokenOwnerResponse & resp); PBoolean OnReceiveChairTokenRequest(); PBoolean OnReceiveChairAssignRequest(const H245_TerminalLabel & req); PBoolean OnReceiveChairAssignResponse(const H245_ConferenceResponse_terminalIDResponse & req); PBoolean OnReceiveFloorAssignRequest(const H245_TerminalLabel & req); PBoolean OnReceiveFloorAssignResponse(const H245_ConferenceResponse_conferenceIDResponse & resp); // H.230 PBoolean ReceivedH230PDU(unsigned msgId, unsigned paramId, const H245_ParameterValue & value); // T.124 PBoolean ReceivedT124PDU(unsigned msgId, unsigned paramId, const H245_ParameterValue & value); PBoolean OnReceivedT124Request(const GCC_RequestPDU &); PBoolean OnReceivedT124Response(const GCC_ResponsePDU &); PBoolean OnReceivedT124Indication(const GCC_IndicationPDU &); PBoolean OnConferenceJoinRequest(const GCC_ConferenceJoinRequest &); PBoolean OnConferenceAddRequest(const GCC_ConferenceAddRequest &); PBoolean OnConferenceLockRequest(const GCC_ConferenceLockRequest &); PBoolean OnConferenceUnlockRequest(const GCC_ConferenceUnlockRequest &); PBoolean OnConferenceTerminateRequest(const GCC_ConferenceTerminateRequest &); PBoolean OnConferenceEjectUserRequest(const GCC_ConferenceEjectUserRequest &); PBoolean OnConferenceTransferRequest(const GCC_ConferenceTransferRequest &); PBoolean OnConferenceJoinResponse(const GCC_ConferenceJoinResponse & pdu); PBoolean OnConferenceAddResponse(const GCC_ConferenceAddResponse & pdu); PBoolean OnConferenceLockResponse(const GCC_ConferenceLockResponse & pdu); PBoolean OnConferenceUnlockResponse(const GCC_ConferenceUnlockResponse & pdu); PBoolean OnConferenceEjectUserResponse(const GCC_ConferenceEjectUserResponse & pdu); PBoolean OnConferenceTransferResponse(const GCC_ConferenceTransferResponse & pdu); PBoolean OnFunctionNotSupportedResponse(const GCC_FunctionNotSupportedResponse & pdu); PBoolean ReceivedPACKPDU(unsigned msgId, unsigned paramId, const H245_ParameterValue & value); PBoolean SendPACKGenericRequest(int paramid, const PASN_OctetString & rawpdu); PBoolean SendPACKGenericResponse(int paramid, const PASN_OctetString & rawpdu); PBoolean OnReceivePACKRequest(const PASN_OctetString & rawpdu); PBoolean OnReceivePACKResponse(const PASN_OctetString & rawpdu); virtual PBoolean WriteControlPDU(const H323ControlPDU & pdu); void SetLocalID(int mcu, int num); int GetLocalID(); void RemoveLocalID(); PString m_h323token; int m_mcuID; int m_userID; PBoolean m_ConferenceChair; PBoolean m_ConferenceFloor; }; class H230T124PDU : public H323ControlPDU { PCLASSINFO(H230T124PDU, H323ControlPDU); public: void BuildRequest(GCC_RequestPDU & pdu); void BuildResponse(GCC_ResponsePDU & pdu); void BuildIndication(GCC_IndicationPDU & pdu); protected: void BuildGeneric(PASN_OctetString & pdu); }; class H230Control_EndPoint : public H230Control { public: PCLASSINFO(H230Control_EndPoint, H230Control); class result { public: result(); int errCode; int node; PBoolean cancel; PString name; list ids; list info; }; H230Control_EndPoint(const PString & _h323token); ~H230Control_EndPoint(); // Chair Instructions PBoolean ReqInvite(const PStringList & aliases); PBoolean ReqLockConference(); PBoolean ReqUnLockConference(); PBoolean ReqEjectUser(int node); PBoolean ReqTransferUser(list node,const PString & number); PBoolean ReqChairAssign(int node); PBoolean ReqFloorAssign(int node); // General Requests PBoolean ReqTerminalList(list & node); PBoolean ReqChair(PBoolean revoke); PBoolean ReqFloor(); PBoolean ReqWhoIsChair(int & node); PBoolean ReqUserEnquiry(list node, list & info); // conference Indications virtual void OnControlsEnabled(PBoolean /*success*/) {}; virtual void OnConferenceChair(PBoolean /*success*/) {}; virtual void OnConferenceFloor(PBoolean /*success*/) {}; // Inherited virtual void ConferenceJoined(int /*terminalId*/){}; virtual void ConferenceJoinInfo(int /*termId*/, PString /*number*/, PString /*name*/, PString /*vcard*/) {}; virtual void ConferenceLeft(int /*terminalId*/) {}; virtual void OnFloorRequested(int /*terminalId*/,PBoolean /*cancel*/) {}; virtual void OnChairAssigned(int /*node*/) {}; virtual void OnFloorAssigned(int /*node*/) {}; virtual void OnInviteResponse(int /*id*/, const PString & /*calledNo*/, AddResponse /*response*/, int /*errCode*/) {}; ////////////////////////////////////////////////////////// // Endpoint Responses void OnLockConferenceResponse(LockResponse /*lock*/); void OnUnLockConferenceResponse(LockResponse /*lock*/); void OnEjectUserResponse(int /*node*/, EjectResponse /*lock*/); void OnTransferUserResponse(list /*node*/,const PString & /*number*/, TransferResponse /*result*/); void OnTerminalListResponse(list node); void MakeChairResponse(PBoolean /*success*/); void OnChairTokenResponse(int /*id*/, const PString & /*name*/); void OnUserEnquiryResponse(const list &); void ChairAssigned(int /*node*/); void FloorAssigned(int /*node*/); protected: PMutex requestMutex; PSyncPoint responseMutex; result * res; }; #endif h323plus/include/h235auth.h0000644000175000017500000003423211641502317014252 0ustar markmark/* * h235auth.h * * H.235 authorisation PDU's * * H323Plus Library * * Copyright (c) 1998-2001 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): Fќrbass Franz * * $Id: h235auth.h,v 1.10 2011/10/01 03:11:11 shorne Exp $ * */ #ifndef __OPAL_H235AUTH_H #define __OPAL_H235AUTH_H #ifdef P_USE_PRAGMA #pragma interface #endif class H323TransactionPDU; class H225_CryptoH323Token; class H225_ArrayOf_AuthenticationMechanism; class H225_ArrayOf_PASN_ObjectId; class H235_ClearToken; class H235_AuthenticationMechanism; class PASN_ObjectId; class PASN_Sequence; class PASN_Array; class H323SignalPDU; class H323Connection; class PSSLCertificate; #include "ptlib_extras.h" #include #include /** This abtract class embodies an H.235 authentication mechanism. NOTE: descendants must have a Clone() function for correct operation. */ class H235Authenticator : public PObject { PCLASSINFO(H235Authenticator, PObject); public: H235Authenticator(); virtual void PrintOn( ostream & strm ) const; #ifdef H323_H235 static H235Authenticator * CreateAuthenticator(const PString & authname, ///< Feature Name Expression PPluginManager * pluginMgr = NULL ///< Plugin Manager ); static H235Authenticator * CreateAuthenticatorByID(const PString & identifier ); struct Capability { const char * m_identifier; const char * m_cipher; const char * m_description; }; typedef struct { std::list capabilityList; } Capabilities; static PBoolean GetAuthenticatorCapabilities(const PString & deviceName, Capabilities * caps, PPluginManager * pluginMgr = NULL); #endif virtual const char * GetName() const = 0; static PStringArray GetAuthenticatorList(); virtual PBoolean IsMatch(const PString & /*identifier*/) const { return false; } virtual PBoolean PrepareTokens( PASN_Array & clearTokens, PASN_Array & cryptoTokens ); virtual H235_ClearToken * CreateClearToken(); virtual H225_CryptoH323Token * CreateCryptoToken(); virtual PBoolean Finalise( PBYTEArray & rawPDU ); enum ValidationResult { e_OK = 0, ///< Security parameters and Msg are ok, no security attacks e_Absent, ///< Security parameters are expected but absent e_Error, ///< Security parameters are present but incorrect e_InvalidTime,///< Security parameters indicate peer has bad real time clock e_BadPassword,///< Security parameters indicate bad password in token e_ReplyAttack,///< Security parameters indicate an attack was made e_Disabled ///< Security is disabled by local system }; virtual ValidationResult ValidateTokens( const PASN_Array & clearTokens, const PASN_Array & cryptoTokens, const PBYTEArray & rawPDU ); virtual ValidationResult ValidateClearToken( const H235_ClearToken & clearToken ); virtual ValidationResult ValidateCryptoToken( const H225_CryptoH323Token & cryptoToken, const PBYTEArray & rawPDU ); virtual PBoolean IsCapability( const H235_AuthenticationMechanism & mechansim, const PASN_ObjectId & algorithmOID ) = 0; virtual PBoolean SetCapability( H225_ArrayOf_AuthenticationMechanism & mechansims, H225_ArrayOf_PASN_ObjectId & algorithmOIDs ) = 0; virtual PBoolean UseGkAndEpIdentifiers() const; virtual PBoolean IsSecuredPDU( unsigned rasPDU, PBoolean received ) const; virtual PBoolean IsSecuredSignalPDU( unsigned signalPDU, PBoolean received ) const; virtual PBoolean IsActive() const; virtual void Enable( PBoolean enab = TRUE ) { enabled = enab; } virtual void Disable() { enabled = FALSE; } virtual const PString & GetRemoteId() const { return remoteId; } virtual void SetRemoteId(const PString & id) { remoteId = id; } virtual const PString & GetLocalId() const { return localId; } virtual void SetLocalId(const PString & id) { localId = id; } virtual const PString & GetPassword() const { return password; } virtual void SetPassword(const PString & pw) { password = pw; } virtual int GetTimestampGracePeriod() const { return timestampGracePeriod; } virtual void SetTimestampGracePeriod(int grace) { timestampGracePeriod = grace; } enum Application { GKAdmission, ///< To Be Used for GK Admission EPAuthentication, ///< To Be Used for EP Authentication LRQOnly, ///< To Be Used for Location Request Authentication MediaEncryption, ///< To Be Used for MediaEncryption AnyApplication, ///< To Be Used for Any Application }; Application GetApplication() { return usage; } // Get Authentication Application virtual void SetConnection(H323Connection * con); // Set the connection for EPAuthentication virtual PBoolean GetAlgorithms(PStringList & algorithms) const; // Get the supported Algorithm OIDs virtual PBoolean GetAlgorithmDetails(const PString & algorithm, ///< Algorithm OID PString & sslName, ///< SSL Description PString & description ///< Human Description ); protected: PBoolean AddCapability( unsigned mechanism, const PString & oid, H225_ArrayOf_AuthenticationMechanism & mechansims, H225_ArrayOf_PASN_ObjectId & algorithmOIDs ); PBoolean enabled; PString remoteId; // ID of remote entity PString localId; // ID of local entity PString password; // shared secret unsigned sentRandomSequenceNumber; unsigned lastRandomSequenceNumber; unsigned lastTimestamp; int timestampGracePeriod; Application usage; ///* Authenticator's Application H323Connection * connection; ///* CallToken of the Connection for EP Authentication PMutex mutex; }; PDECLARE_LIST(H235Authenticators, H235Authenticator) #ifdef DOC_PLUS_PLUS { #endif public: // GKAdmission void PreparePDU( H323TransactionPDU & pdu, PASN_Array & clearTokens, unsigned clearOptionalField, PASN_Array & cryptoTokens, unsigned cryptoOptionalField ) const; H235Authenticator::ValidationResult ValidatePDU( const H323TransactionPDU & pdu, const PASN_Array & clearTokens, unsigned clearOptionalField, const PASN_Array & cryptoTokens, unsigned cryptoOptionalField, const PBYTEArray & rawPDU ) const; // EPAuthentication void PrepareSignalPDU( unsigned code, PASN_Array & clearTokens, PASN_Array & cryptoTokens ) const; H235Authenticator::ValidationResult ValidateSignalPDU( unsigned code, const PASN_Array & clearTokens, const PASN_Array & cryptoTokens, const PBYTEArray & rawPDU ) const; #ifdef H323_H235 PBoolean CreateAuthenticators(const PASN_Array & clearTokens, const PASN_Array & cryptoTokens); PBoolean CreateAuthenticator(const PString & name); PBoolean SupportsEncryption(PStringArray & list) const; PBoolean SupportsEncryption() const; PBoolean GetAlgorithms(PStringList & algorithms) const; PBoolean GetAlgorithmDetails(const PString & algorithm, PString & sslName, PString & description); protected: void CreateAuthenticatorsByID(const PStringArray & identifiers); #endif }; class H235AuthenticatorInfo : public PObject { PCLASSINFO(H235AuthenticatorInfo, PObject); public: H235AuthenticatorInfo(PString username,PString password,PBoolean ishashed); H235AuthenticatorInfo(PSSLCertificate * cert); PString UserName; PString Password; PBoolean isHashed; PSSLCertificate * Certificate; }; PDECLARE_LIST(H235AuthenticatorList, H235AuthenticatorInfo) #ifdef DOC_PLUS_PLUS { #endif PBoolean HasUserName(PString UserName) const; void LoadPassword(PString UserName, PString & pass) const; void Add(PString username, PString password, PBoolean isHashed = FALSE); PString PasswordEncrypt(const PString &clear) const; PString PasswordDecrypt(const PString &encrypt) const; }; /** Dictionary of Addresses and Associated Security Info */ H323DICTIONARY(H235AuthenticatorDict,PString,H235AuthenticatorInfo); /** This class embodies a simple MD5 based authentication. The users password is concatenated with the 4 byte timestamp and 4 byte random fields and an MD5 generated and sent/verified */ class H235AuthSimpleMD5 : public H235Authenticator { PCLASSINFO(H235AuthSimpleMD5, H235Authenticator); public: H235AuthSimpleMD5(); PObject * Clone() const; virtual const char * GetName() const; static PStringArray GetAuthenticatorNames(); #ifdef H323_H235 static PBoolean GetAuthenticationCapabilities(Capabilities * ids); #endif virtual PBoolean IsMatch(const PString & identifier) const; virtual H225_CryptoH323Token * CreateCryptoToken(); virtual ValidationResult ValidateCryptoToken( const H225_CryptoH323Token & cryptoToken, const PBYTEArray & rawPDU ); virtual PBoolean IsCapability( const H235_AuthenticationMechanism & mechansim, const PASN_ObjectId & algorithmOID ); virtual PBoolean SetCapability( H225_ArrayOf_AuthenticationMechanism & mechansim, H225_ArrayOf_PASN_ObjectId & algorithmOIDs ); virtual PBoolean IsSecuredPDU( unsigned rasPDU, PBoolean received ) const; virtual PBoolean IsSecuredSignalPDU( unsigned rasPDU, PBoolean received ) const; }; //////////////////////////////////////////////////// #ifdef H323_H235 /// PFactory Loader typedef H235AuthSimpleMD5 H235_AuthenticatorMD5; #ifndef _WIN32_WCE PPLUGIN_STATIC_LOAD(MD5,H235Authenticator); #endif #endif /** This class embodies a RADIUS compatible based authentication (aka Cisco Access Token or CAT). The users password is concatenated with the 4 byte timestamp and 1 byte random fields and an MD5 generated and sent/verified via the challenge field. */ class H235AuthCAT : public H235Authenticator { PCLASSINFO(H235AuthCAT, H235Authenticator); public: H235AuthCAT(); PObject * Clone() const; virtual const char * GetName() const; virtual H235_ClearToken * CreateClearToken(); virtual ValidationResult ValidateClearToken( const H235_ClearToken & clearToken ); virtual PBoolean IsCapability( const H235_AuthenticationMechanism & mechansim, const PASN_ObjectId & algorithmOID ); virtual PBoolean SetCapability( H225_ArrayOf_AuthenticationMechanism & mechansim, H225_ArrayOf_PASN_ObjectId & algorithmOIDs ); virtual PBoolean IsSecuredPDU( unsigned rasPDU, PBoolean received ) const; }; #if P_SSL /** This class embodies the H.235 "base line" from H235.1. */ class H2351_Authenticator : public H235Authenticator { PCLASSINFO(H2351_Authenticator, H235Authenticator); public: H2351_Authenticator(); PObject * Clone() const; virtual const char * GetName() const; static PStringArray GetAuthenticatorNames(); #ifdef H323_H235 static PBoolean GetAuthenticationCapabilities(Capabilities * ids); #endif virtual PBoolean IsMatch(const PString & identifier) const; virtual H225_CryptoH323Token * CreateCryptoToken(); virtual PBoolean Finalise( PBYTEArray & rawPDU ); virtual ValidationResult ValidateCryptoToken( const H225_CryptoH323Token & cryptoToken, const PBYTEArray & rawPDU ); virtual PBoolean IsCapability( const H235_AuthenticationMechanism & mechansim, const PASN_ObjectId & algorithmOID ); virtual PBoolean SetCapability( H225_ArrayOf_AuthenticationMechanism & mechansim, H225_ArrayOf_PASN_ObjectId & algorithmOIDs ); virtual PBoolean IsSecuredPDU( unsigned rasPDU, PBoolean received ) const; virtual PBoolean IsSecuredSignalPDU( unsigned rasPDU, PBoolean received ) const; virtual PBoolean UseGkAndEpIdentifiers() const; }; typedef H2351_Authenticator H235AuthProcedure1; // Backwards interoperability ////////////////////////////////////////////////////////////////////////////// #ifdef H323_H235 typedef H2351_Authenticator H235_AuthenticatorStd1; #ifndef _WIN32_WCE PPLUGIN_STATIC_LOAD(Std1,H235Authenticator); #endif #endif template class H235PluginServiceDescriptor : public PDevicePluginServiceDescriptor { public: virtual PObject * CreateInstance(int /*userData*/) const { return new className; } virtual PStringArray GetDeviceNames(int /*userData*/) const { return className::GetAuthenticatorNames(); } virtual bool ValidateDeviceName(const PString & deviceName, int /*userData*/) const { return (deviceName == className::GetAuthenticatorNames()[0]); } #ifdef H323_H235 virtual bool GetDeviceCapabilities(const PString & /*deviceName*/, void * capabilities) const { return className::GetAuthenticationCapabilities((H235Authenticator::Capabilities *)capabilities); } #endif }; #define H235SECURITY(name) \ static H235PluginServiceDescriptor H235_Authenticator##name##_descriptor; \ PCREATE_PLUGIN(name, H235Authenticator, &H235_Authenticator##name##_descriptor); \ #endif #endif //__H323_H235AUTH_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/gccpdu.h0000644000175000017500000036600311015524057014160 0ustar markmark// // gccpdu.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_GCC #ifndef __GCC_H #define __GCC_H #ifdef P_USE_PRAGMA #pragma interface #endif #include // // ChannelID // class GCC_ChannelID : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ChannelID, PASN_Integer); #endif public: GCC_ChannelID(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); GCC_ChannelID & operator=(int v); GCC_ChannelID & operator=(unsigned v); PObject * Clone() const; }; // // StaticChannelID // class GCC_StaticChannelID : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_StaticChannelID, PASN_Integer); #endif public: GCC_StaticChannelID(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); GCC_StaticChannelID & operator=(int v); GCC_StaticChannelID & operator=(unsigned v); PObject * Clone() const; }; // // DynamicChannelID // class GCC_DynamicChannelID : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_DynamicChannelID, PASN_Integer); #endif public: GCC_DynamicChannelID(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); GCC_DynamicChannelID & operator=(int v); GCC_DynamicChannelID & operator=(unsigned v); PObject * Clone() const; }; // // UserID // class GCC_UserID : public GCC_DynamicChannelID { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_UserID, GCC_DynamicChannelID); #endif public: GCC_UserID(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); GCC_UserID & operator=(int v); GCC_UserID & operator=(unsigned v); PObject * Clone() const; }; // // TokenID // class GCC_TokenID : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_TokenID, PASN_Integer); #endif public: GCC_TokenID(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); GCC_TokenID & operator=(int v); GCC_TokenID & operator=(unsigned v); PObject * Clone() const; }; // // StaticTokenID // class GCC_StaticTokenID : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_StaticTokenID, PASN_Integer); #endif public: GCC_StaticTokenID(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); GCC_StaticTokenID & operator=(int v); GCC_StaticTokenID & operator=(unsigned v); PObject * Clone() const; }; // // DynamicTokenID // class GCC_DynamicTokenID : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_DynamicTokenID, PASN_Integer); #endif public: GCC_DynamicTokenID(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); GCC_DynamicTokenID & operator=(int v); GCC_DynamicTokenID & operator=(unsigned v); PObject * Clone() const; }; // // Time // class GCC_Time : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_Time, PASN_Integer); #endif public: GCC_Time(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); GCC_Time & operator=(int v); GCC_Time & operator=(unsigned v); PObject * Clone() const; }; // // Handle // class GCC_Handle : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_Handle, PASN_Integer); #endif public: GCC_Handle(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); GCC_Handle & operator=(int v); GCC_Handle & operator=(unsigned v); PObject * Clone() const; }; // // H221NonStandardIdentifier // class GCC_H221NonStandardIdentifier : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_H221NonStandardIdentifier, PASN_OctetString); #endif public: GCC_H221NonStandardIdentifier(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); GCC_H221NonStandardIdentifier(const char * v); GCC_H221NonStandardIdentifier(const PString & v); GCC_H221NonStandardIdentifier(const PBYTEArray & v); GCC_H221NonStandardIdentifier & operator=(const char * v); GCC_H221NonStandardIdentifier & operator=(const PString & v); GCC_H221NonStandardIdentifier & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // Key // class GCC_H221NonStandardIdentifier; class GCC_Key : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_Key, PASN_Choice); #endif public: GCC_Key(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_object, e_h221NonStandard }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_H221NonStandardIdentifier &() const; #else operator GCC_H221NonStandardIdentifier &(); operator const GCC_H221NonStandardIdentifier &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // NonStandardParameter // class GCC_NonStandardParameter : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_NonStandardParameter, PASN_Sequence); #endif public: GCC_NonStandardParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_Key m_key; PASN_OctetString m_data; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TextString // class GCC_TextString : public PASN_BMPString { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_TextString, PASN_BMPString); #endif public: GCC_TextString(unsigned tag = UniversalBMPString, TagClass tagClass = UniversalTagClass); GCC_TextString & operator=(const char * v); GCC_TextString & operator=(const PString & v); GCC_TextString & operator=(const PWCharArray & v); GCC_TextString & operator=(const PASN_BMPString & v); PObject * Clone() const; }; // // SimpleTextString // class GCC_SimpleTextString : public PASN_BMPString { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_SimpleTextString, PASN_BMPString); #endif public: GCC_SimpleTextString(unsigned tag = UniversalBMPString, TagClass tagClass = UniversalTagClass); GCC_SimpleTextString & operator=(const char * v); GCC_SimpleTextString & operator=(const PString & v); GCC_SimpleTextString & operator=(const PWCharArray & v); GCC_SimpleTextString & operator=(const PASN_BMPString & v); PObject * Clone() const; }; // // SimpleNumericString // class GCC_SimpleNumericString : public PASN_NumericString { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_SimpleNumericString, PASN_NumericString); #endif public: GCC_SimpleNumericString(unsigned tag = UniversalNumericString, TagClass tagClass = UniversalTagClass); GCC_SimpleNumericString & operator=(const char * v); GCC_SimpleNumericString & operator=(const PString & v); PObject * Clone() const; }; // // DialingString // class GCC_DialingString : public PASN_NumericString { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_DialingString, PASN_NumericString); #endif public: GCC_DialingString(unsigned tag = UniversalNumericString, TagClass tagClass = UniversalTagClass); GCC_DialingString & operator=(const char * v); GCC_DialingString & operator=(const PString & v); PObject * Clone() const; }; // // SubAddressString // class GCC_SubAddressString : public PASN_NumericString { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_SubAddressString, PASN_NumericString); #endif public: GCC_SubAddressString(unsigned tag = UniversalNumericString, TagClass tagClass = UniversalTagClass); GCC_SubAddressString & operator=(const char * v); GCC_SubAddressString & operator=(const PString & v); PObject * Clone() const; }; // // ExtraDialingString // class GCC_ExtraDialingString : public PASN_BMPString { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ExtraDialingString, PASN_BMPString); #endif public: GCC_ExtraDialingString(unsigned tag = UniversalBMPString, TagClass tagClass = UniversalTagClass); GCC_ExtraDialingString & operator=(const char * v); GCC_ExtraDialingString & operator=(const PString & v); GCC_ExtraDialingString & operator=(const PWCharArray & v); GCC_ExtraDialingString & operator=(const PASN_BMPString & v); PObject * Clone() const; }; // // UserData // class GCC_UserData_subtype; class GCC_UserData : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_UserData, PASN_Array); #endif public: GCC_UserData(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; GCC_UserData_subtype & operator[](PINDEX i) const; PObject * Clone() const; }; // // Password // class GCC_Password : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_Password, PASN_Sequence); #endif public: GCC_Password(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_text }; GCC_SimpleNumericString m_numeric; GCC_SimpleTextString m_text; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PasswordSelector // class GCC_SimpleNumericString; class GCC_SimpleTextString; class GCC_PasswordSelector : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_PasswordSelector, PASN_Choice); #endif public: GCC_PasswordSelector(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_numeric, e_text }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_SimpleNumericString &() const; #else operator GCC_SimpleNumericString &(); operator const GCC_SimpleNumericString &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_SimpleTextString &() const; #else operator GCC_SimpleTextString &(); operator const GCC_SimpleTextString &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ChallengeResponseItem // class GCC_PasswordSelector; class GCC_UserData; class GCC_ChallengeResponseItem : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ChallengeResponseItem, PASN_Choice); #endif public: GCC_ChallengeResponseItem(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_passwordString, e_responseData }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_PasswordSelector &() const; #else operator GCC_PasswordSelector &(); operator const GCC_PasswordSelector &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_UserData &() const; #else operator GCC_UserData &(); operator const GCC_UserData &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ChallengeResponseAlgorithm // class GCC_NonStandardParameter; class GCC_ChallengeResponseAlgorithm : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ChallengeResponseAlgorithm, PASN_Choice); #endif public: GCC_ChallengeResponseAlgorithm(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_passwordInTheClear, e_nonStandardAlgorithm }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_NonStandardParameter &() const; #else operator GCC_NonStandardParameter &(); operator const GCC_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ChallengeItem // class GCC_ChallengeItem : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ChallengeItem, PASN_Sequence); #endif public: GCC_ChallengeItem(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_ChallengeResponseAlgorithm m_responseAlgorithm; GCC_UserData m_challengeData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ChallengeResponse // class GCC_ChallengeResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ChallengeResponse, PASN_Sequence); #endif public: GCC_ChallengeResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_challengeTag; GCC_ChallengeResponseAlgorithm m_responseAlgorithm; GCC_ChallengeResponseItem m_responseItem; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PasswordChallengeRequestResponse // class GCC_PasswordSelector; class GCC_PasswordChallengeRequestResponse_challengeRequestResponse; class GCC_PasswordChallengeRequestResponse : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_PasswordChallengeRequestResponse, PASN_Choice); #endif public: GCC_PasswordChallengeRequestResponse(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_passwordInTheClear, e_challengeRequestResponse }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_PasswordSelector &() const; #else operator GCC_PasswordSelector &(); operator const GCC_PasswordSelector &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_PasswordChallengeRequestResponse_challengeRequestResponse &() const; #else operator GCC_PasswordChallengeRequestResponse_challengeRequestResponse &(); operator const GCC_PasswordChallengeRequestResponse_challengeRequestResponse &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ConferenceName // class GCC_ConferenceName : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceName, PASN_Sequence); #endif public: GCC_ConferenceName(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_text }; GCC_SimpleNumericString m_numeric; GCC_SimpleTextString m_text; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceNameSelector // class GCC_SimpleNumericString; class GCC_SimpleTextString; class GCC_ConferenceNameSelector : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceNameSelector, PASN_Choice); #endif public: GCC_ConferenceNameSelector(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_numeric, e_text }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_SimpleNumericString &() const; #else operator GCC_SimpleNumericString &(); operator const GCC_SimpleNumericString &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_SimpleTextString &() const; #else operator GCC_SimpleTextString &(); operator const GCC_SimpleTextString &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ConferenceNameModifier // class GCC_ConferenceNameModifier : public GCC_SimpleNumericString { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceNameModifier, GCC_SimpleNumericString); #endif public: GCC_ConferenceNameModifier(unsigned tag = UniversalNumericString, TagClass tagClass = UniversalTagClass); GCC_ConferenceNameModifier & operator=(const char * v); GCC_ConferenceNameModifier & operator=(const PString & v); PObject * Clone() const; }; // // Privilege // class GCC_Privilege : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_Privilege, PASN_Enumeration); #endif public: GCC_Privilege(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_terminate, e_ejectUser, e_add, e_lockUnlock, e_transfer }; GCC_Privilege & operator=(unsigned v); PObject * Clone() const; }; // // TerminationMethod // class GCC_TerminationMethod : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_TerminationMethod, PASN_Enumeration); #endif public: GCC_TerminationMethod(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_automatic, e_manual }; GCC_TerminationMethod & operator=(unsigned v); PObject * Clone() const; }; // // ConferencePriorityScheme // class GCC_NonStandardParameter; class GCC_ConferencePriorityScheme : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferencePriorityScheme, PASN_Choice); #endif public: GCC_ConferencePriorityScheme(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandardScheme }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_NonStandardParameter &() const; #else operator GCC_NonStandardParameter &(); operator const GCC_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ConferencePriority // class GCC_ConferencePriority : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferencePriority, PASN_Sequence); #endif public: GCC_ConferencePriority(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_priority; GCC_ConferencePriorityScheme m_scheme; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NetworkAddress // class GCC_NetworkAddress_subtype; class GCC_NetworkAddress : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_NetworkAddress, PASN_Array); #endif public: GCC_NetworkAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; GCC_NetworkAddress_subtype & operator[](PINDEX i) const; PObject * Clone() const; }; // // NodeType // class GCC_NodeType : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_NodeType, PASN_Enumeration); #endif public: GCC_NodeType(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_terminal, e_multiportTerminal, e_mcu }; GCC_NodeType & operator=(unsigned v); PObject * Clone() const; }; // // NodeProperties // class GCC_NodeProperties : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_NodeProperties, PASN_Sequence); #endif public: GCC_NodeProperties(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_managementDevice; PASN_Boolean m_peripheralDevice; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AsymmetryIndicator // class GCC_AsymmetryIndicator : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_AsymmetryIndicator, PASN_Choice); #endif public: GCC_AsymmetryIndicator(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_callingNode, e_calledNode, e_unknown }; PBoolean CreateObject(); PObject * Clone() const; }; // // AlternativeNodeID // class GCC_AlternativeNodeID : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_AlternativeNodeID, PASN_Choice); #endif public: GCC_AlternativeNodeID(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_h243NodeID }; PBoolean CreateObject(); PObject * Clone() const; }; // // ConferenceDescriptor // class GCC_ConferenceDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceDescriptor, PASN_Sequence); #endif public: GCC_ConferenceDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_conferenceNameModifier, e_conferenceDescription, e_networkAddress, e_defaultConferenceFlag }; GCC_ConferenceName m_conferenceName; GCC_ConferenceNameModifier m_conferenceNameModifier; GCC_TextString m_conferenceDescription; PASN_Boolean m_lockedConference; PASN_Boolean m_passwordInTheClearRequired; GCC_NetworkAddress m_networkAddress; PASN_Boolean m_defaultConferenceFlag; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // SessionKey // class GCC_SessionKey : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_SessionKey, PASN_Sequence); #endif public: GCC_SessionKey(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_sessionID }; GCC_Key m_applicationProtocolKey; GCC_ChannelID m_sessionID; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ChannelType // class GCC_ChannelType : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ChannelType, PASN_Enumeration); #endif public: GCC_ChannelType(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_static, e_dynamicMulticast, e_dynamicPrivate, e_dynamicUserId }; GCC_ChannelType & operator=(unsigned v); PObject * Clone() const; }; // // CapabilityID // class GCC_Key; class GCC_CapabilityID : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_CapabilityID, PASN_Choice); #endif public: GCC_CapabilityID(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_standard, e_nonStandard }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_Key &() const; #else operator GCC_Key &(); operator const GCC_Key &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // CapabilityClass // class GCC_CapabilityClass : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_CapabilityClass, PASN_Choice); #endif public: GCC_CapabilityClass(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_logical, e_unsignedMin, e_unsignedMax }; PBoolean CreateObject(); PObject * Clone() const; }; // // EntityID // class GCC_EntityID : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_EntityID, PASN_Integer); #endif public: GCC_EntityID(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); GCC_EntityID & operator=(int v); GCC_EntityID & operator=(unsigned v); PObject * Clone() const; }; // // RegistryKey // class GCC_RegistryKey : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RegistryKey, PASN_Sequence); #endif public: GCC_RegistryKey(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_SessionKey m_sessionKey; PASN_OctetString m_resourceID; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RegistryItem // class GCC_DynamicChannelID; class GCC_DynamicTokenID; class GCC_RegistryItem : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RegistryItem, PASN_Choice); #endif public: GCC_RegistryItem(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_channelID, e_tokenID, e_parameter, e_vacant }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_DynamicChannelID &() const; #else operator GCC_DynamicChannelID &(); operator const GCC_DynamicChannelID &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_DynamicTokenID &() const; #else operator GCC_DynamicTokenID &(); operator const GCC_DynamicTokenID &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // RegistryEntryOwner // class GCC_RegistryEntryOwner_owned; class GCC_RegistryEntryOwner : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RegistryEntryOwner, PASN_Choice); #endif public: GCC_RegistryEntryOwner(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_owned, e_notOwned }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_RegistryEntryOwner_owned &() const; #else operator GCC_RegistryEntryOwner_owned &(); operator const GCC_RegistryEntryOwner_owned &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // RegistryModificationRights // class GCC_RegistryModificationRights : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RegistryModificationRights, PASN_Enumeration); #endif public: GCC_RegistryModificationRights(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_owner, e_session, e_public }; GCC_RegistryModificationRights & operator=(unsigned v); PObject * Clone() const; }; // // UserIDIndication // class GCC_UserIDIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_UserIDIndication, PASN_Sequence); #endif public: GCC_UserIDIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_tag; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceQueryRequest // class GCC_ConferenceQueryRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceQueryRequest, PASN_Sequence); #endif public: GCC_ConferenceQueryRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_asymmetryIndicator, e_userData }; GCC_NodeType m_nodeType; GCC_AsymmetryIndicator m_asymmetryIndicator; GCC_UserData m_userData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceJoinRequest // class GCC_ConferenceJoinRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceJoinRequest, PASN_Sequence); #endif public: GCC_ConferenceJoinRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_conferenceName, e_conferenceNameModifier, e_tag, e_password, e_convenerPassword, e_callerIdentifier, e_userData }; GCC_ConferenceNameSelector m_conferenceName; GCC_ConferenceNameModifier m_conferenceNameModifier; PASN_Integer m_tag; GCC_PasswordChallengeRequestResponse m_password; GCC_PasswordSelector m_convenerPassword; GCC_TextString m_callerIdentifier; GCC_UserData m_userData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceAddRequest // class GCC_ConferenceAddRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceAddRequest, PASN_Sequence); #endif public: GCC_ConferenceAddRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_addingMCU, e_userData }; GCC_NetworkAddress m_networkAddress; GCC_UserID m_requestingNode; PASN_Integer m_tag; GCC_UserID m_addingMCU; GCC_UserData m_userData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceLockRequest // class GCC_ConferenceLockRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceLockRequest, PASN_Sequence); #endif public: GCC_ConferenceLockRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // ConferenceLockIndication // class GCC_ConferenceLockIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceLockIndication, PASN_Sequence); #endif public: GCC_ConferenceLockIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // ConferenceUnlockRequest // class GCC_ConferenceUnlockRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceUnlockRequest, PASN_Sequence); #endif public: GCC_ConferenceUnlockRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // ConferenceUnlockIndication // class GCC_ConferenceUnlockIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceUnlockIndication, PASN_Sequence); #endif public: GCC_ConferenceUnlockIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // RegistryRegisterChannelRequest // class GCC_RegistryRegisterChannelRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RegistryRegisterChannelRequest, PASN_Sequence); #endif public: GCC_RegistryRegisterChannelRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_EntityID m_entityID; GCC_RegistryKey m_key; GCC_DynamicChannelID m_channelID; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RegistryAssignTokenRequest // class GCC_RegistryAssignTokenRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RegistryAssignTokenRequest, PASN_Sequence); #endif public: GCC_RegistryAssignTokenRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_EntityID m_entityID; GCC_RegistryKey m_key; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RegistrySetParameterRequest // class GCC_RegistrySetParameterRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RegistrySetParameterRequest, PASN_Sequence); #endif public: GCC_RegistrySetParameterRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_modificationRights }; GCC_EntityID m_entityID; GCC_RegistryKey m_key; PASN_OctetString m_parameter; GCC_RegistryModificationRights m_modificationRights; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RegistryRetrieveEntryRequest // class GCC_RegistryRetrieveEntryRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RegistryRetrieveEntryRequest, PASN_Sequence); #endif public: GCC_RegistryRetrieveEntryRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_EntityID m_entityID; GCC_RegistryKey m_key; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RegistryDeleteEntryRequest // class GCC_RegistryDeleteEntryRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RegistryDeleteEntryRequest, PASN_Sequence); #endif public: GCC_RegistryDeleteEntryRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_EntityID m_entityID; GCC_RegistryKey m_key; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RegistryMonitorEntryRequest // class GCC_RegistryMonitorEntryRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RegistryMonitorEntryRequest, PASN_Sequence); #endif public: GCC_RegistryMonitorEntryRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_EntityID m_entityID; GCC_RegistryKey m_key; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RegistryMonitorEntryIndication // class GCC_RegistryMonitorEntryIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RegistryMonitorEntryIndication, PASN_Sequence); #endif public: GCC_RegistryMonitorEntryIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_modificationRights }; GCC_RegistryKey m_key; GCC_RegistryItem m_item; GCC_RegistryEntryOwner m_owner; GCC_RegistryModificationRights m_modificationRights; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RegistryAllocateHandleRequest // class GCC_RegistryAllocateHandleRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RegistryAllocateHandleRequest, PASN_Sequence); #endif public: GCC_RegistryAllocateHandleRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_EntityID m_entityID; PASN_Integer m_numberOfHandles; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConductorAssignIndication // class GCC_ConductorAssignIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConductorAssignIndication, PASN_Sequence); #endif public: GCC_ConductorAssignIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_UserID m_conductingNode; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConductorReleaseIndication // class GCC_ConductorReleaseIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConductorReleaseIndication, PASN_Sequence); #endif public: GCC_ConductorReleaseIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // ConductorPermissionAskIndication // class GCC_ConductorPermissionAskIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConductorPermissionAskIndication, PASN_Sequence); #endif public: GCC_ConductorPermissionAskIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_grantFlag; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceTimeRemainingIndication // class GCC_ConferenceTimeRemainingIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceTimeRemainingIndication, PASN_Sequence); #endif public: GCC_ConferenceTimeRemainingIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nodeID }; GCC_Time m_timeRemaining; GCC_UserID m_nodeID; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceTimeInquireIndication // class GCC_ConferenceTimeInquireIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceTimeInquireIndication, PASN_Sequence); #endif public: GCC_ConferenceTimeInquireIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_nodeSpecificTimeFlag; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceTimeExtendIndication // class GCC_ConferenceTimeExtendIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceTimeExtendIndication, PASN_Sequence); #endif public: GCC_ConferenceTimeExtendIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_Time m_timeToExtend; PASN_Boolean m_nodeSpecificTimeFlag; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceAssistanceIndication // class GCC_ConferenceAssistanceIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceAssistanceIndication, PASN_Sequence); #endif public: GCC_ConferenceAssistanceIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_userData }; GCC_UserData m_userData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TextMessageIndication // class GCC_TextMessageIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_TextMessageIndication, PASN_Sequence); #endif public: GCC_TextMessageIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_TextString m_message; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NonStandardPDU // class GCC_NonStandardPDU : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_NonStandardPDU, PASN_Sequence); #endif public: GCC_NonStandardPDU(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_NonStandardParameter m_data; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConnectData // class GCC_ConnectData : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConnectData, PASN_Sequence); #endif public: GCC_ConnectData(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_Key m_t124Identifier; PASN_OctetString m_connectPDU; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConnectGCCPDU // class GCC_ConferenceCreateRequest; class GCC_ConferenceCreateResponse; class GCC_ConferenceQueryRequest; class GCC_ConferenceQueryResponse; class GCC_ConferenceJoinRequest; class GCC_ConferenceJoinResponse; class GCC_ConferenceInviteRequest; class GCC_ConferenceInviteResponse; class GCC_ConnectGCCPDU : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConnectGCCPDU, PASN_Choice); #endif public: GCC_ConnectGCCPDU(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_conferenceCreateRequest, e_conferenceCreateResponse, e_conferenceQueryRequest, e_conferenceQueryResponse, e_conferenceJoinRequest, e_conferenceJoinResponse, e_conferenceInviteRequest, e_conferenceInviteResponse }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceCreateRequest &() const; #else operator GCC_ConferenceCreateRequest &(); operator const GCC_ConferenceCreateRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceCreateResponse &() const; #else operator GCC_ConferenceCreateResponse &(); operator const GCC_ConferenceCreateResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceQueryRequest &() const; #else operator GCC_ConferenceQueryRequest &(); operator const GCC_ConferenceQueryRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceQueryResponse &() const; #else operator GCC_ConferenceQueryResponse &(); operator const GCC_ConferenceQueryResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceJoinRequest &() const; #else operator GCC_ConferenceJoinRequest &(); operator const GCC_ConferenceJoinRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceJoinResponse &() const; #else operator GCC_ConferenceJoinResponse &(); operator const GCC_ConferenceJoinResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceInviteRequest &() const; #else operator GCC_ConferenceInviteRequest &(); operator const GCC_ConferenceInviteRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceInviteResponse &() const; #else operator GCC_ConferenceInviteResponse &(); operator const GCC_ConferenceInviteResponse &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // GCCPDU // class GCC_RequestPDU; class GCC_ResponsePDU; class GCC_IndicationPDU; class GCC_GCCPDU : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_GCCPDU, PASN_Choice); #endif public: GCC_GCCPDU(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_request, e_response, e_indication }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_RequestPDU &() const; #else operator GCC_RequestPDU &(); operator const GCC_RequestPDU &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ResponsePDU &() const; #else operator GCC_ResponsePDU &(); operator const GCC_ResponsePDU &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_IndicationPDU &() const; #else operator GCC_IndicationPDU &(); operator const GCC_IndicationPDU &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // RequestPDU // class GCC_ConferenceJoinRequest; class GCC_ConferenceAddRequest; class GCC_ConferenceLockRequest; class GCC_ConferenceUnlockRequest; class GCC_ConferenceTerminateRequest; class GCC_ConferenceEjectUserRequest; class GCC_ConferenceTransferRequest; class GCC_RegistryRegisterChannelRequest; class GCC_RegistryAssignTokenRequest; class GCC_RegistrySetParameterRequest; class GCC_RegistryRetrieveEntryRequest; class GCC_RegistryDeleteEntryRequest; class GCC_RegistryMonitorEntryRequest; class GCC_RegistryAllocateHandleRequest; class GCC_NonStandardPDU; class GCC_RequestPDU : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RequestPDU, PASN_Choice); #endif public: GCC_RequestPDU(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_conferenceJoinRequest, e_conferenceAddRequest, e_conferenceLockRequest, e_conferenceUnlockRequest, e_conferenceTerminateRequest, e_conferenceEjectUserRequest, e_conferenceTransferRequest, e_registryRegisterChannelRequest, e_registryAssignTokenRequest, e_registrySetParameterRequest, e_registryRetrieveEntryRequest, e_registryDeleteEntryRequest, e_registryMonitorEntryRequest, e_registryAllocateHandleRequest, e_nonStandardRequest }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceJoinRequest &() const; #else operator GCC_ConferenceJoinRequest &(); operator const GCC_ConferenceJoinRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceAddRequest &() const; #else operator GCC_ConferenceAddRequest &(); operator const GCC_ConferenceAddRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceLockRequest &() const; #else operator GCC_ConferenceLockRequest &(); operator const GCC_ConferenceLockRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceUnlockRequest &() const; #else operator GCC_ConferenceUnlockRequest &(); operator const GCC_ConferenceUnlockRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceTerminateRequest &() const; #else operator GCC_ConferenceTerminateRequest &(); operator const GCC_ConferenceTerminateRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceEjectUserRequest &() const; #else operator GCC_ConferenceEjectUserRequest &(); operator const GCC_ConferenceEjectUserRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceTransferRequest &() const; #else operator GCC_ConferenceTransferRequest &(); operator const GCC_ConferenceTransferRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_RegistryRegisterChannelRequest &() const; #else operator GCC_RegistryRegisterChannelRequest &(); operator const GCC_RegistryRegisterChannelRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_RegistryAssignTokenRequest &() const; #else operator GCC_RegistryAssignTokenRequest &(); operator const GCC_RegistryAssignTokenRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_RegistrySetParameterRequest &() const; #else operator GCC_RegistrySetParameterRequest &(); operator const GCC_RegistrySetParameterRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_RegistryRetrieveEntryRequest &() const; #else operator GCC_RegistryRetrieveEntryRequest &(); operator const GCC_RegistryRetrieveEntryRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_RegistryDeleteEntryRequest &() const; #else operator GCC_RegistryDeleteEntryRequest &(); operator const GCC_RegistryDeleteEntryRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_RegistryMonitorEntryRequest &() const; #else operator GCC_RegistryMonitorEntryRequest &(); operator const GCC_RegistryMonitorEntryRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_RegistryAllocateHandleRequest &() const; #else operator GCC_RegistryAllocateHandleRequest &(); operator const GCC_RegistryAllocateHandleRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_NonStandardPDU &() const; #else operator GCC_NonStandardPDU &(); operator const GCC_NonStandardPDU &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ResponsePDU // class GCC_ConferenceJoinResponse; class GCC_ConferenceAddResponse; class GCC_ConferenceLockResponse; class GCC_ConferenceUnlockResponse; class GCC_ConferenceTerminateResponse; class GCC_ConferenceEjectUserResponse; class GCC_ConferenceTransferResponse; class GCC_RegistryResponse; class GCC_RegistryAllocateHandleResponse; class GCC_FunctionNotSupportedResponse; class GCC_NonStandardPDU; class GCC_ResponsePDU : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ResponsePDU, PASN_Choice); #endif public: GCC_ResponsePDU(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_conferenceJoinResponse, e_conferenceAddResponse, e_conferenceLockResponse, e_conferenceUnlockResponse, e_conferenceTerminateResponse, e_conferenceEjectUserResponse, e_conferenceTransferResponse, e_registryResponse, e_registryAllocateHandleResponse, e_functionNotSupportedResponse, e_nonStandardResponse }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceJoinResponse &() const; #else operator GCC_ConferenceJoinResponse &(); operator const GCC_ConferenceJoinResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceAddResponse &() const; #else operator GCC_ConferenceAddResponse &(); operator const GCC_ConferenceAddResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceLockResponse &() const; #else operator GCC_ConferenceLockResponse &(); operator const GCC_ConferenceLockResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceUnlockResponse &() const; #else operator GCC_ConferenceUnlockResponse &(); operator const GCC_ConferenceUnlockResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceTerminateResponse &() const; #else operator GCC_ConferenceTerminateResponse &(); operator const GCC_ConferenceTerminateResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceEjectUserResponse &() const; #else operator GCC_ConferenceEjectUserResponse &(); operator const GCC_ConferenceEjectUserResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceTransferResponse &() const; #else operator GCC_ConferenceTransferResponse &(); operator const GCC_ConferenceTransferResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_RegistryResponse &() const; #else operator GCC_RegistryResponse &(); operator const GCC_RegistryResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_RegistryAllocateHandleResponse &() const; #else operator GCC_RegistryAllocateHandleResponse &(); operator const GCC_RegistryAllocateHandleResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_FunctionNotSupportedResponse &() const; #else operator GCC_FunctionNotSupportedResponse &(); operator const GCC_FunctionNotSupportedResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_NonStandardPDU &() const; #else operator GCC_NonStandardPDU &(); operator const GCC_NonStandardPDU &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // IndicationPDU // class GCC_UserIDIndication; class GCC_ConferenceLockIndication; class GCC_ConferenceUnlockIndication; class GCC_ConferenceTerminateIndication; class GCC_ConferenceEjectUserIndication; class GCC_ConferenceTransferIndication; class GCC_RosterUpdateIndication; class GCC_ApplicationInvokeIndication; class GCC_RegistryMonitorEntryIndication; class GCC_ConductorAssignIndication; class GCC_ConductorReleaseIndication; class GCC_ConductorPermissionAskIndication; class GCC_ConductorPermissionGrantIndication; class GCC_ConferenceTimeRemainingIndication; class GCC_ConferenceTimeInquireIndication; class GCC_ConferenceTimeExtendIndication; class GCC_ConferenceAssistanceIndication; class GCC_TextMessageIndication; class GCC_NonStandardPDU; class GCC_IndicationPDU : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_IndicationPDU, PASN_Choice); #endif public: GCC_IndicationPDU(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_userIDIndication, e_conferenceLockIndication, e_conferenceUnlockIndication, e_conferenceTerminateIndication, e_conferenceEjectUserIndication, e_conferenceTransferIndication, e_rosterUpdateIndication, e_applicationInvokeIndication, e_registryMonitorEntryIndication, e_conductorAssignIndication, e_conductorReleaseIndication, e_conductorPermissionAskIndication, e_conductorPermissionGrantIndication, e_conferenceTimeRemainingIndication, e_conferenceTimeInquireIndication, e_conferenceTimeExtendIndication, e_conferenceAssistanceIndication, e_textMessageIndication, e_nonStandardIndication }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_UserIDIndication &() const; #else operator GCC_UserIDIndication &(); operator const GCC_UserIDIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceLockIndication &() const; #else operator GCC_ConferenceLockIndication &(); operator const GCC_ConferenceLockIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceUnlockIndication &() const; #else operator GCC_ConferenceUnlockIndication &(); operator const GCC_ConferenceUnlockIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceTerminateIndication &() const; #else operator GCC_ConferenceTerminateIndication &(); operator const GCC_ConferenceTerminateIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceEjectUserIndication &() const; #else operator GCC_ConferenceEjectUserIndication &(); operator const GCC_ConferenceEjectUserIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceTransferIndication &() const; #else operator GCC_ConferenceTransferIndication &(); operator const GCC_ConferenceTransferIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_RosterUpdateIndication &() const; #else operator GCC_RosterUpdateIndication &(); operator const GCC_RosterUpdateIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ApplicationInvokeIndication &() const; #else operator GCC_ApplicationInvokeIndication &(); operator const GCC_ApplicationInvokeIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_RegistryMonitorEntryIndication &() const; #else operator GCC_RegistryMonitorEntryIndication &(); operator const GCC_RegistryMonitorEntryIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConductorAssignIndication &() const; #else operator GCC_ConductorAssignIndication &(); operator const GCC_ConductorAssignIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConductorReleaseIndication &() const; #else operator GCC_ConductorReleaseIndication &(); operator const GCC_ConductorReleaseIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConductorPermissionAskIndication &() const; #else operator GCC_ConductorPermissionAskIndication &(); operator const GCC_ConductorPermissionAskIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConductorPermissionGrantIndication &() const; #else operator GCC_ConductorPermissionGrantIndication &(); operator const GCC_ConductorPermissionGrantIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceTimeRemainingIndication &() const; #else operator GCC_ConferenceTimeRemainingIndication &(); operator const GCC_ConferenceTimeRemainingIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceTimeInquireIndication &() const; #else operator GCC_ConferenceTimeInquireIndication &(); operator const GCC_ConferenceTimeInquireIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceTimeExtendIndication &() const; #else operator GCC_ConferenceTimeExtendIndication &(); operator const GCC_ConferenceTimeExtendIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ConferenceAssistanceIndication &() const; #else operator GCC_ConferenceAssistanceIndication &(); operator const GCC_ConferenceAssistanceIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_TextMessageIndication &() const; #else operator GCC_TextMessageIndication &(); operator const GCC_TextMessageIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_NonStandardPDU &() const; #else operator GCC_NonStandardPDU &(); operator const GCC_NonStandardPDU &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // UserData_subtype // class GCC_UserData_subtype : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_UserData_subtype, PASN_Sequence); #endif public: GCC_UserData_subtype(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_value }; GCC_Key m_key; PASN_OctetString m_value; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_ChallengeItem // class GCC_ChallengeItem; class GCC_ArrayOf_ChallengeItem : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ArrayOf_ChallengeItem, PASN_Array); #endif public: GCC_ArrayOf_ChallengeItem(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; GCC_ChallengeItem & operator[](PINDEX i) const; PObject * Clone() const; }; // // NetworkAddress_subtype // class GCC_NetworkAddress_subtype_aggregatedChannel; class GCC_NetworkAddress_subtype_transportConnection; class GCC_NonStandardParameter; class GCC_NetworkAddress_subtype : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_NetworkAddress_subtype, PASN_Choice); #endif public: GCC_NetworkAddress_subtype(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_aggregatedChannel, e_transportConnection, e_nonStandard }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_NetworkAddress_subtype_aggregatedChannel &() const; #else operator GCC_NetworkAddress_subtype_aggregatedChannel &(); operator const GCC_NetworkAddress_subtype_aggregatedChannel &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_NetworkAddress_subtype_transportConnection &() const; #else operator GCC_NetworkAddress_subtype_transportConnection &(); operator const GCC_NetworkAddress_subtype_transportConnection &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_NonStandardParameter &() const; #else operator GCC_NonStandardParameter &(); operator const GCC_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_TextString // class GCC_TextString; class GCC_ArrayOf_TextString : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ArrayOf_TextString, PASN_Array); #endif public: GCC_ArrayOf_TextString(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; GCC_TextString & operator[](PINDEX i) const; PObject * Clone() const; }; // // ApplicationRecord_nonCollapsingCapabilities // class GCC_ApplicationRecord_nonCollapsingCapabilities_subtype; class GCC_ApplicationRecord_nonCollapsingCapabilities : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ApplicationRecord_nonCollapsingCapabilities, PASN_Array); #endif public: GCC_ApplicationRecord_nonCollapsingCapabilities(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; GCC_ApplicationRecord_nonCollapsingCapabilities_subtype & operator[](PINDEX i) const; PObject * Clone() const; }; // // ApplicationInvokeSpecifier_expectedCapabilitySet // class GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype; class GCC_ApplicationInvokeSpecifier_expectedCapabilitySet : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ApplicationInvokeSpecifier_expectedCapabilitySet, PASN_Array); #endif public: GCC_ApplicationInvokeSpecifier_expectedCapabilitySet(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype & operator[](PINDEX i) const; PObject * Clone() const; }; // // RegistryEntryOwner_owned // class GCC_RegistryEntryOwner_owned : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RegistryEntryOwner_owned, PASN_Sequence); #endif public: GCC_RegistryEntryOwner_owned(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_UserID m_nodeID; GCC_EntityID m_entityID; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_Privilege // class GCC_Privilege; class GCC_ArrayOf_Privilege : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ArrayOf_Privilege, PASN_Array); #endif public: GCC_ArrayOf_Privilege(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; GCC_Privilege & operator[](PINDEX i) const; PObject * Clone() const; }; // // ConferenceCreateResponse_result // class GCC_ConferenceCreateResponse_result : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceCreateResponse_result, PASN_Enumeration); #endif public: GCC_ConferenceCreateResponse_result(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_success, e_userRejected, e_resourcesNotAvailable, e_rejectedForSymmetryBreaking, e_lockedConferenceNotSupported }; GCC_ConferenceCreateResponse_result & operator=(unsigned v); PObject * Clone() const; }; // // ArrayOf_ConferenceDescriptor // class GCC_ConferenceDescriptor; class GCC_ArrayOf_ConferenceDescriptor : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ArrayOf_ConferenceDescriptor, PASN_Array); #endif public: GCC_ArrayOf_ConferenceDescriptor(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; GCC_ConferenceDescriptor & operator[](PINDEX i) const; PObject * Clone() const; }; // // ConferenceQueryResponse_result // class GCC_ConferenceQueryResponse_result : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceQueryResponse_result, PASN_Enumeration); #endif public: GCC_ConferenceQueryResponse_result(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_success, e_userRejected }; GCC_ConferenceQueryResponse_result & operator=(unsigned v); PObject * Clone() const; }; // // ConferenceJoinResponse_result // class GCC_ConferenceJoinResponse_result : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceJoinResponse_result, PASN_Enumeration); #endif public: GCC_ConferenceJoinResponse_result(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_success, e_userRejected, e_invalidConference, e_invalidPassword, e_invalidConvenerPassword, e_challengeResponseRequired, e_invalidChallengeResponse }; GCC_ConferenceJoinResponse_result & operator=(unsigned v); PObject * Clone() const; }; // // ConferenceInviteResponse_result // class GCC_ConferenceInviteResponse_result : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceInviteResponse_result, PASN_Enumeration); #endif public: GCC_ConferenceInviteResponse_result(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_success, e_userRejected }; GCC_ConferenceInviteResponse_result & operator=(unsigned v); PObject * Clone() const; }; // // ConferenceAddResponse_result // class GCC_ConferenceAddResponse_result : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceAddResponse_result, PASN_Enumeration); #endif public: GCC_ConferenceAddResponse_result(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_success, e_invalidRequester, e_invalidNetworkType, e_invalidNetworkAddress, e_addedNodeBusy, e_networkBusy, e_noPortsAvailable, e_connectionUnsuccessful }; GCC_ConferenceAddResponse_result & operator=(unsigned v); PObject * Clone() const; }; // // ConferenceLockResponse_result // class GCC_ConferenceLockResponse_result : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceLockResponse_result, PASN_Enumeration); #endif public: GCC_ConferenceLockResponse_result(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_success, e_invalidRequester, e_alreadyLocked }; GCC_ConferenceLockResponse_result & operator=(unsigned v); PObject * Clone() const; }; // // ConferenceUnlockResponse_result // class GCC_ConferenceUnlockResponse_result : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceUnlockResponse_result, PASN_Enumeration); #endif public: GCC_ConferenceUnlockResponse_result(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_success, e_invalidRequester, e_alreadyUnlocked }; GCC_ConferenceUnlockResponse_result & operator=(unsigned v); PObject * Clone() const; }; // // ConferenceTerminateRequest_reason // class GCC_ConferenceTerminateRequest_reason : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceTerminateRequest_reason, PASN_Enumeration); #endif public: GCC_ConferenceTerminateRequest_reason(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_userInitiated, e_timedConferenceTermination }; GCC_ConferenceTerminateRequest_reason & operator=(unsigned v); PObject * Clone() const; }; // // ConferenceTerminateResponse_result // class GCC_ConferenceTerminateResponse_result : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceTerminateResponse_result, PASN_Enumeration); #endif public: GCC_ConferenceTerminateResponse_result(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_success, e_invalidRequester }; GCC_ConferenceTerminateResponse_result & operator=(unsigned v); PObject * Clone() const; }; // // ConferenceTerminateIndication_reason // class GCC_ConferenceTerminateIndication_reason : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceTerminateIndication_reason, PASN_Enumeration); #endif public: GCC_ConferenceTerminateIndication_reason(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_userInitiated, e_timedConferenceTermination }; GCC_ConferenceTerminateIndication_reason & operator=(unsigned v); PObject * Clone() const; }; // // ConferenceEjectUserRequest_reason // class GCC_ConferenceEjectUserRequest_reason : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceEjectUserRequest_reason, PASN_Enumeration); #endif public: GCC_ConferenceEjectUserRequest_reason(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_userInitiated }; GCC_ConferenceEjectUserRequest_reason & operator=(unsigned v); PObject * Clone() const; }; // // ConferenceEjectUserResponse_result // class GCC_ConferenceEjectUserResponse_result : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceEjectUserResponse_result, PASN_Enumeration); #endif public: GCC_ConferenceEjectUserResponse_result(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_success, e_invalidRequester, e_invalidNode }; GCC_ConferenceEjectUserResponse_result & operator=(unsigned v); PObject * Clone() const; }; // // ConferenceEjectUserIndication_reason // class GCC_ConferenceEjectUserIndication_reason : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceEjectUserIndication_reason, PASN_Enumeration); #endif public: GCC_ConferenceEjectUserIndication_reason(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_userInitiated, e_higherNodeDisconnected, e_higherNodeEjected }; GCC_ConferenceEjectUserIndication_reason & operator=(unsigned v); PObject * Clone() const; }; // // ArrayOf_UserID // class GCC_UserID; class GCC_ArrayOf_UserID : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ArrayOf_UserID, PASN_Array); #endif public: GCC_ArrayOf_UserID(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; GCC_UserID & operator[](PINDEX i) const; PObject * Clone() const; }; // // ConferenceTransferResponse_result // class GCC_ConferenceTransferResponse_result : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceTransferResponse_result, PASN_Enumeration); #endif public: GCC_ConferenceTransferResponse_result(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_success, e_invalidRequester }; GCC_ConferenceTransferResponse_result & operator=(unsigned v); PObject * Clone() const; }; // // RosterUpdateIndication_applicationInformation // class GCC_RosterUpdateIndication_applicationInformation_subtype; class GCC_RosterUpdateIndication_applicationInformation : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RosterUpdateIndication_applicationInformation, PASN_Array); #endif public: GCC_RosterUpdateIndication_applicationInformation(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; GCC_RosterUpdateIndication_applicationInformation_subtype & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_ApplicationInvokeSpecifier // class GCC_ApplicationInvokeSpecifier; class GCC_ArrayOf_ApplicationInvokeSpecifier : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ArrayOf_ApplicationInvokeSpecifier, PASN_Array); #endif public: GCC_ArrayOf_ApplicationInvokeSpecifier(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; GCC_ApplicationInvokeSpecifier & operator[](PINDEX i) const; PObject * Clone() const; }; // // RegistryAllocateHandleResponse_result // class GCC_RegistryAllocateHandleResponse_result : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RegistryAllocateHandleResponse_result, PASN_Enumeration); #endif public: GCC_RegistryAllocateHandleResponse_result(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_successful, e_noHandlesAvailable }; GCC_RegistryAllocateHandleResponse_result & operator=(unsigned v); PObject * Clone() const; }; // // RegistryResponse_primitiveType // class GCC_RegistryResponse_primitiveType : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RegistryResponse_primitiveType, PASN_Enumeration); #endif public: GCC_RegistryResponse_primitiveType(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_registerChannel, e_assignToken, e_setParameter, e_retrieveEntry, e_deleteEntry, e_monitorEntry }; GCC_RegistryResponse_primitiveType & operator=(unsigned v); PObject * Clone() const; }; // // RegistryResponse_result // class GCC_RegistryResponse_result : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RegistryResponse_result, PASN_Enumeration); #endif public: GCC_RegistryResponse_result(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_successful, e_belongsToOther, e_tooManyEntries, e_inconsistentType, e_entryNotFound, e_entryAlreadyExists, e_invalidRequester }; GCC_RegistryResponse_result & operator=(unsigned v); PObject * Clone() const; }; // // NetworkAddress_subtype_transportConnection // class GCC_NetworkAddress_subtype_transportConnection : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_NetworkAddress_subtype_transportConnection, PASN_Sequence); #endif public: GCC_NetworkAddress_subtype_transportConnection(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_transportSelector }; PASN_OctetString m_nsapAddress; PASN_OctetString m_transportSelector; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ApplicationRecord_nonCollapsingCapabilities_subtype // class GCC_ApplicationRecord_nonCollapsingCapabilities_subtype : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ApplicationRecord_nonCollapsingCapabilities_subtype, PASN_Sequence); #endif public: GCC_ApplicationRecord_nonCollapsingCapabilities_subtype(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_applicationData }; GCC_CapabilityID m_capabilityID; PASN_OctetString m_applicationData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ApplicationInvokeSpecifier_expectedCapabilitySet_subtype // class GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype, PASN_Sequence); #endif public: GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_CapabilityID m_capabilityID; GCC_CapabilityClass m_capabilityClass; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RosterUpdateIndication_nodeInformation_nodeRecordList // class GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh; class GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update; class GCC_RosterUpdateIndication_nodeInformation_nodeRecordList : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RosterUpdateIndication_nodeInformation_nodeRecordList, PASN_Choice); #endif public: GCC_RosterUpdateIndication_nodeInformation_nodeRecordList(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_noChange, e_refresh, e_update }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh &() const; #else operator GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh &(); operator const GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update &() const; #else operator GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update &(); operator const GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // NetworkAddress_subtype_aggregatedChannel_transferModes // class GCC_NetworkAddress_subtype_aggregatedChannel_transferModes : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_NetworkAddress_subtype_aggregatedChannel_transferModes, PASN_Sequence); #endif public: GCC_NetworkAddress_subtype_aggregatedChannel_transferModes(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_speech; PASN_Boolean m_voice_band; PASN_Boolean m_digital_56k; PASN_Boolean m_digital_64k; PASN_Boolean m_digital_128k; PASN_Boolean m_digital_192k; PASN_Boolean m_digital_256k; PASN_Boolean m_digital_320k; PASN_Boolean m_digital_384k; PASN_Boolean m_digital_512k; PASN_Boolean m_digital_768k; PASN_Boolean m_digital_1152k; PASN_Boolean m_digital_1472k; PASN_Boolean m_digital_1536k; PASN_Boolean m_digital_1920k; PASN_Boolean m_packet_mode; PASN_Boolean m_frame_mode; PASN_Boolean m_atm; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility // class GCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility, PASN_Sequence); #endif public: GCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_telephony3kHz; PASN_Boolean m_telephony7kHz; PASN_Boolean m_videotelephony; PASN_Boolean m_videoconference; PASN_Boolean m_audiographic; PASN_Boolean m_audiovisual; PASN_Boolean m_multimedia; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RosterUpdateIndication_nodeInformation_nodeRecordList_refresh // class GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype; class GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh, PASN_Array); #endif public: GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype & operator[](PINDEX i) const; PObject * Clone() const; }; // // RosterUpdateIndication_nodeInformation_nodeRecordList_update // class GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype; class GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update, PASN_Array); #endif public: GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype & operator[](PINDEX i) const; PObject * Clone() const; }; // // RosterUpdateIndication_applicationInformation_subtype_applicationRecordList // class GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh; class GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update; class GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList, PASN_Choice); #endif public: GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_noChange, e_refresh, e_update }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh &() const; #else operator GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh &(); operator const GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update &() const; #else operator GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update &(); operator const GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList // class GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh; class GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList, PASN_Choice); #endif public: GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_noChange, e_refresh }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh &() const; #else operator GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh &(); operator const GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh // class GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype; class GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh, PASN_Array); #endif public: GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype & operator[](PINDEX i) const; PObject * Clone() const; }; // // RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update // class GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype; class GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update, PASN_Array); #endif public: GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype & operator[](PINDEX i) const; PObject * Clone() const; }; // // RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh // class GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype; class GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh, PASN_Array); #endif public: GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype & operator[](PINDEX i) const; PObject * Clone() const; }; // // RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate // class GCC_NodeRecord; class GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate, PASN_Choice); #endif public: GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_addRecord, e_replaceRecord, e_removeRecord }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_NodeRecord &() const; #else operator GCC_NodeRecord &(); operator const GCC_NodeRecord &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype // class GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype, PASN_Sequence); #endif public: GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_CapabilityID m_capabilityID; GCC_CapabilityClass m_capabilityClass; PASN_Integer m_numberOfEntities; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate // class GCC_ApplicationRecord; class GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate, PASN_Choice); #endif public: GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_addRecord, e_replaceRecord, e_removeRecord }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator GCC_ApplicationRecord &() const; #else operator GCC_ApplicationRecord &(); operator const GCC_ApplicationRecord &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ChallengeRequest // class GCC_ChallengeRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ChallengeRequest, PASN_Sequence); #endif public: GCC_ChallengeRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_challengeTag; GCC_ArrayOf_ChallengeItem m_challengeSet; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NodeRecord // class GCC_NodeRecord : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_NodeRecord, PASN_Sequence); #endif public: GCC_NodeRecord(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_superiorNode, e_nodeName, e_participantsList, e_siteInformation, e_networkAddress, e_alternativeNodeID, e_userData }; GCC_UserID m_superiorNode; GCC_NodeType m_nodeType; GCC_NodeProperties m_nodeProperties; GCC_TextString m_nodeName; GCC_ArrayOf_TextString m_participantsList; GCC_TextString m_siteInformation; GCC_NetworkAddress m_networkAddress; GCC_AlternativeNodeID m_alternativeNodeID; GCC_UserData m_userData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ApplicationRecord // class GCC_ApplicationRecord : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ApplicationRecord, PASN_Sequence); #endif public: GCC_ApplicationRecord(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_startupChannel, e_applicationUserID, e_nonCollapsingCapabilities }; PASN_Boolean m_applicationActive; PASN_Boolean m_conductingOperationCapable; GCC_ChannelType m_startupChannel; GCC_UserID m_applicationUserID; GCC_ApplicationRecord_nonCollapsingCapabilities m_nonCollapsingCapabilities; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ApplicationInvokeSpecifier // class GCC_ApplicationInvokeSpecifier : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ApplicationInvokeSpecifier, PASN_Sequence); #endif public: GCC_ApplicationInvokeSpecifier(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_expectedCapabilitySet, e_startupChannel }; GCC_SessionKey m_sessionKey; GCC_ApplicationInvokeSpecifier_expectedCapabilitySet m_expectedCapabilitySet; GCC_ChannelType m_startupChannel; PASN_Boolean m_mandatoryFlag; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceCreateRequest // class GCC_ConferenceCreateRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceCreateRequest, PASN_Sequence); #endif public: GCC_ConferenceCreateRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_convenerPassword, e_password, e_conductorPrivileges, e_conductedPrivileges, e_nonConductedPrivileges, e_conferenceDescription, e_callerIdentifier, e_userData, e_conferencePriority }; GCC_ConferenceName m_conferenceName; GCC_Password m_convenerPassword; GCC_Password m_password; PASN_Boolean m_lockedConference; PASN_Boolean m_listedConference; PASN_Boolean m_conductibleConference; GCC_TerminationMethod m_terminationMethod; GCC_ArrayOf_Privilege m_conductorPrivileges; GCC_ArrayOf_Privilege m_conductedPrivileges; GCC_ArrayOf_Privilege m_nonConductedPrivileges; GCC_TextString m_conferenceDescription; GCC_TextString m_callerIdentifier; GCC_UserData m_userData; GCC_ConferencePriority m_conferencePriority; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceCreateResponse // class GCC_ConferenceCreateResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceCreateResponse, PASN_Sequence); #endif public: GCC_ConferenceCreateResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_userData }; GCC_UserID m_nodeID; PASN_Integer m_tag; GCC_ConferenceCreateResponse_result m_result; GCC_UserData m_userData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceQueryResponse // class GCC_ConferenceQueryResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceQueryResponse, PASN_Sequence); #endif public: GCC_ConferenceQueryResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_asymmetryIndicator, e_userData, e_waitForInvitationFlag, e_noUnlistedConferenceFlag }; GCC_NodeType m_nodeType; GCC_AsymmetryIndicator m_asymmetryIndicator; GCC_ArrayOf_ConferenceDescriptor m_conferenceList; GCC_ConferenceQueryResponse_result m_result; GCC_UserData m_userData; PASN_Boolean m_waitForInvitationFlag; PASN_Boolean m_noUnlistedConferenceFlag; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceJoinResponse // class GCC_ConferenceJoinResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceJoinResponse, PASN_Sequence); #endif public: GCC_ConferenceJoinResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nodeID, e_conferenceNameAlias, e_conductorPrivileges, e_conductedPrivileges, e_nonConductedPrivileges, e_conferenceDescription, e_password, e_userData }; GCC_UserID m_nodeID; GCC_UserID m_topNodeID; PASN_Integer m_tag; GCC_ConferenceNameSelector m_conferenceNameAlias; PASN_Boolean m_passwordInTheClearRequired; PASN_Boolean m_lockedConference; PASN_Boolean m_listedConference; PASN_Boolean m_conductibleConference; GCC_TerminationMethod m_terminationMethod; GCC_ArrayOf_Privilege m_conductorPrivileges; GCC_ArrayOf_Privilege m_conductedPrivileges; GCC_ArrayOf_Privilege m_nonConductedPrivileges; GCC_TextString m_conferenceDescription; GCC_PasswordChallengeRequestResponse m_password; GCC_ConferenceJoinResponse_result m_result; GCC_UserData m_userData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceInviteRequest // class GCC_ConferenceInviteRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceInviteRequest, PASN_Sequence); #endif public: GCC_ConferenceInviteRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_conductorPrivileges, e_conductedPrivileges, e_nonConductedPrivileges, e_conferenceDescription, e_callerIdentifier, e_userData, e_conferencePriority }; GCC_ConferenceName m_conferenceName; GCC_UserID m_nodeID; GCC_UserID m_topNodeID; PASN_Integer m_tag; PASN_Boolean m_passwordInTheClearRequired; PASN_Boolean m_lockedConference; PASN_Boolean m_listedConference; PASN_Boolean m_conductibleConference; GCC_TerminationMethod m_terminationMethod; GCC_ArrayOf_Privilege m_conductorPrivileges; GCC_ArrayOf_Privilege m_conductedPrivileges; GCC_ArrayOf_Privilege m_nonConductedPrivileges; GCC_TextString m_conferenceDescription; GCC_TextString m_callerIdentifier; GCC_UserData m_userData; GCC_ConferencePriority m_conferencePriority; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceInviteResponse // class GCC_ConferenceInviteResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceInviteResponse, PASN_Sequence); #endif public: GCC_ConferenceInviteResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_userData }; GCC_ConferenceInviteResponse_result m_result; GCC_UserData m_userData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceAddResponse // class GCC_ConferenceAddResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceAddResponse, PASN_Sequence); #endif public: GCC_ConferenceAddResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_userData }; PASN_Integer m_tag; GCC_ConferenceAddResponse_result m_result; GCC_UserData m_userData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceLockResponse // class GCC_ConferenceLockResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceLockResponse, PASN_Sequence); #endif public: GCC_ConferenceLockResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_ConferenceLockResponse_result m_result; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceUnlockResponse // class GCC_ConferenceUnlockResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceUnlockResponse, PASN_Sequence); #endif public: GCC_ConferenceUnlockResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_ConferenceUnlockResponse_result m_result; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceTerminateRequest // class GCC_ConferenceTerminateRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceTerminateRequest, PASN_Sequence); #endif public: GCC_ConferenceTerminateRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_ConferenceTerminateRequest_reason m_reason; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceTerminateResponse // class GCC_ConferenceTerminateResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceTerminateResponse, PASN_Sequence); #endif public: GCC_ConferenceTerminateResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_ConferenceTerminateResponse_result m_result; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceTerminateIndication // class GCC_ConferenceTerminateIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceTerminateIndication, PASN_Sequence); #endif public: GCC_ConferenceTerminateIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_ConferenceTerminateIndication_reason m_reason; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceEjectUserRequest // class GCC_ConferenceEjectUserRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceEjectUserRequest, PASN_Sequence); #endif public: GCC_ConferenceEjectUserRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_UserID m_nodeToEject; GCC_ConferenceEjectUserRequest_reason m_reason; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceEjectUserResponse // class GCC_ConferenceEjectUserResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceEjectUserResponse, PASN_Sequence); #endif public: GCC_ConferenceEjectUserResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_UserID m_nodeToEject; GCC_ConferenceEjectUserResponse_result m_result; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceEjectUserIndication // class GCC_ConferenceEjectUserIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceEjectUserIndication, PASN_Sequence); #endif public: GCC_ConferenceEjectUserIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_UserID m_nodeToEject; GCC_ConferenceEjectUserIndication_reason m_reason; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceTransferRequest // class GCC_ConferenceTransferRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceTransferRequest, PASN_Sequence); #endif public: GCC_ConferenceTransferRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_conferenceNameModifier, e_networkAddress, e_transferringNodes, e_password }; GCC_ConferenceNameSelector m_conferenceName; GCC_ConferenceNameModifier m_conferenceNameModifier; GCC_NetworkAddress m_networkAddress; GCC_ArrayOf_UserID m_transferringNodes; GCC_PasswordSelector m_password; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceTransferResponse // class GCC_ConferenceTransferResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceTransferResponse, PASN_Sequence); #endif public: GCC_ConferenceTransferResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_conferenceNameModifier, e_transferringNodes }; GCC_ConferenceNameSelector m_conferenceName; GCC_ConferenceNameModifier m_conferenceNameModifier; GCC_ArrayOf_UserID m_transferringNodes; GCC_ConferenceTransferResponse_result m_result; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceTransferIndication // class GCC_ConferenceTransferIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConferenceTransferIndication, PASN_Sequence); #endif public: GCC_ConferenceTransferIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_conferenceNameModifier, e_networkAddress, e_transferringNodes, e_password }; GCC_ConferenceNameSelector m_conferenceName; GCC_ConferenceNameModifier m_conferenceNameModifier; GCC_NetworkAddress m_networkAddress; GCC_ArrayOf_UserID m_transferringNodes; GCC_PasswordSelector m_password; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ApplicationInvokeIndication // class GCC_ApplicationInvokeIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ApplicationInvokeIndication, PASN_Sequence); #endif public: GCC_ApplicationInvokeIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_destinationNodes }; GCC_ArrayOf_ApplicationInvokeSpecifier m_applicationProtocolEntiyList; GCC_ArrayOf_UserID m_destinationNodes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RegistryAllocateHandleResponse // class GCC_RegistryAllocateHandleResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RegistryAllocateHandleResponse, PASN_Sequence); #endif public: GCC_RegistryAllocateHandleResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_EntityID m_entityID; PASN_Integer m_numberOfHandles; GCC_Handle m_firstHandle; GCC_RegistryAllocateHandleResponse_result m_result; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RegistryResponse // class GCC_RegistryResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RegistryResponse, PASN_Sequence); #endif public: GCC_RegistryResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_modificationRights }; GCC_EntityID m_entityID; GCC_RegistryResponse_primitiveType m_primitiveType; GCC_RegistryKey m_key; GCC_RegistryItem m_item; GCC_RegistryEntryOwner m_owner; GCC_RegistryModificationRights m_modificationRights; GCC_RegistryResponse_result m_result; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConductorPermissionGrantIndication // class GCC_ConductorPermissionGrantIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_ConductorPermissionGrantIndication, PASN_Sequence); #endif public: GCC_ConductorPermissionGrantIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_waitingList }; GCC_ArrayOf_UserID m_permissionList; GCC_ArrayOf_UserID m_waitingList; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // FunctionNotSupportedResponse // class GCC_FunctionNotSupportedResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_FunctionNotSupportedResponse, PASN_Sequence); #endif public: GCC_FunctionNotSupportedResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_RequestPDU m_request; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PasswordChallengeRequestResponse_challengeRequestResponse // class GCC_PasswordChallengeRequestResponse_challengeRequestResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_PasswordChallengeRequestResponse_challengeRequestResponse, PASN_Sequence); #endif public: GCC_PasswordChallengeRequestResponse_challengeRequestResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_challengeRequest, e_challengeResponse }; GCC_ChallengeRequest m_challengeRequest; GCC_ChallengeResponse m_challengeResponse; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RosterUpdateIndication_nodeInformation // class GCC_RosterUpdateIndication_nodeInformation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RosterUpdateIndication_nodeInformation, PASN_Sequence); #endif public: GCC_RosterUpdateIndication_nodeInformation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_RosterUpdateIndication_nodeInformation_nodeRecordList m_nodeRecordList; PASN_Integer m_rosterInstanceNumber; PASN_Boolean m_nodesAdded; PASN_Boolean m_nodesRemoved; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NetworkAddress_subtype_aggregatedChannel // class GCC_NetworkAddress_subtype_aggregatedChannel : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_NetworkAddress_subtype_aggregatedChannel, PASN_Sequence); #endif public: GCC_NetworkAddress_subtype_aggregatedChannel(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_subAddress, e_extraDialing, e_highLayerCompatibility }; GCC_NetworkAddress_subtype_aggregatedChannel_transferModes m_transferModes; GCC_DialingString m_internationalNumber; GCC_SubAddressString m_subAddress; GCC_ExtraDialingString m_extraDialing; GCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility m_highLayerCompatibility; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RosterUpdateIndication_applicationInformation_subtype // class GCC_RosterUpdateIndication_applicationInformation_subtype : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RosterUpdateIndication_applicationInformation_subtype, PASN_Sequence); #endif public: GCC_RosterUpdateIndication_applicationInformation_subtype(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_SessionKey m_sessionKey; GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList m_applicationRecordList; GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList m_applicationCapabilitiesList; PASN_Integer m_rosterInstanceNumber; PASN_Boolean m_peerEntitiesAdded; PASN_Boolean m_peerEntitiesRemoved; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype // class GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype, PASN_Sequence); #endif public: GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_UserID m_nodeID; GCC_NodeRecord m_nodeRecord; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype // class GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype, PASN_Sequence); #endif public: GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_UserID m_nodeID; GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate m_nodeUpdate; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype // class GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype, PASN_Sequence); #endif public: GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_UserID m_nodeID; GCC_EntityID m_entityID; GCC_ApplicationRecord m_applicationRecord; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype // class GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype, PASN_Sequence); #endif public: GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); GCC_UserID m_nodeID; GCC_EntityID m_entityID; GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate m_applicationUpdate; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RosterUpdateIndication // class GCC_RosterUpdateIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(GCC_RosterUpdateIndication, PASN_Sequence); #endif public: GCC_RosterUpdateIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_fullRefresh; GCC_RosterUpdateIndication_nodeInformation m_nodeInformation; GCC_RosterUpdateIndication_applicationInformation m_applicationInformation; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __GCC_H #endif // if ! H323_DISABLE_GCC // End of gccpdu.h h323plus/include/h323pdu.h0000644000175000017500000006724311435502147014111 0ustar markmark/* * h323pdu.h * * H.323 protocol handler * * Open H323 Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Contributor(s): ______________________________________. * * $Log: h323pdu.h,v $ * Revision 1.6 2010/08/26 15:12:39 shorne * Major H.239 upgrade. Special thx again to Marek Domaracky and Igor Pavlov * * Revision 1.5 2008/09/27 06:15:38 shorne * BUG FIX: H323SignalPDU::Write to correctly handle NULL H323Connection Thx Nir Soffer * * Revision 1.4 2008/05/23 11:19:43 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.3 2007/10/19 19:53:44 shorne * ported latest Video updates in OpenH323 committed after h323plus initial fork thanks * Robert * * Revision 1.2 2007/10/16 17:08:01 shorne * Allow cryptoTokens to be insert in the setup after receiving ARQ * * Revision 1.1 2007/08/06 20:50:49 shorne * First commit of h323plus * * Revision 1.75.2.1 2006/12/23 19:08:02 shorne * Plugin video codecs & sundry * * Revision 1.75 2006/07/17 09:52:57 shorne * Added more support URL alias Addresses * * Revision 1.74 2006/06/21 04:53:32 csoutheren * Tweaked H.245 version 13 updates * * Revision 1.73 2006/06/20 05:24:40 csoutheren * Additional tweaks for H.225v6 * * Revision 1.72 2006/01/26 03:28:10 shorne * Caller Authentication added * * Revision 1.71 2006/01/20 00:32:24 csoutheren * First check-in of signalling aggregation code - incomplete and disabled by default * * Revision 1.70 2005/11/30 13:05:01 csoutheren * Changed tags for Doxygen * * Revision 1.69 2005/06/30 01:57:39 csoutheren * Updated to H.245v11 * * Revision 1.68 2005/03/04 03:21:20 csoutheren * Added local and remote addresses to all PDU logs to assist in debugging * * Revision 1.67 2005/01/24 00:10:48 csoutheren * Added function to set Q.931 info in PDU, thanks to Paul Nader * * Revision 1.66 2004/12/14 06:22:21 csoutheren * More OSP implementation * * Revision 1.65 2003/04/10 09:36:52 robertj * Added some more functions for converting to alias addresses. * * Revision 1.64 2003/04/01 03:11:01 robertj * Added function to get array of AliasAddress into PStringArray. * * Revision 1.63 2003/03/25 04:56:17 robertj * Fixed issues to do with multiple inheritence in transaction reply cache. * * Revision 1.62 2003/03/20 01:51:07 robertj * More abstraction of H.225 RAS and H.501 protocols transaction handling. * * Revision 1.61 2003/03/01 00:23:42 craigs * New PeerElement implementation * * Revision 1.60 2003/02/25 06:48:15 robertj * More work on PDU transaction abstraction. * * Revision 1.59 2003/02/21 05:28:39 craigs * Factored out code for user with peer elements * * Revision 1.58 2003/02/01 13:31:14 robertj * Changes to support CAT authentication in RAS. * * Revision 1.57 2002/11/28 04:41:44 robertj * Added support for RAS ServiceControlIndication command. * * Revision 1.56 2002/09/16 01:14:15 robertj * Added #define so can select if #pragma interface/implementation is used on * platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan. * * Revision 1.55 2002/09/03 06:19:37 robertj * Normalised the multi-include header prevention ifdef/define symbol. * * Revision 1.54 2002/08/12 05:38:21 robertj * Changes to the RAS subsystem to support ability to make requests to client * from gkserver without causing bottlenecks and race conditions. * * Revision 1.53 2002/08/05 10:03:47 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.52 2002/08/05 05:17:37 robertj * Fairly major modifications to support different authentication credentials * in ARQ to the logged in ones on RRQ. For both client and server. * Various other H.235 authentication bugs and anomalies fixed on the way. * * Revision 1.51 2002/07/25 10:55:40 robertj * Changes to allow more granularity in PDU dumps, hex output increasing * with increasing trace level. * * Revision 1.50 2002/07/11 07:04:12 robertj * Added build InfoRequest pdu type to RAS. * * Revision 1.49 2002/05/29 03:55:17 robertj * Added protocol version number checking infrastructure, primarily to improve * interoperability with stacks that are unforgiving of new features. * * Revision 1.48 2002/05/29 00:03:15 robertj * Fixed unsolicited IRR support in gk client and server, * including support for IACK and INAK. * * Revision 1.47 2002/05/07 03:18:12 robertj * Added application info (name/version etc) into registered endpoint data. * * Revision 1.46 2002/05/03 09:18:45 robertj * Added automatic retransmission of RAS responses to retried requests. * * Revision 1.45 2002/03/14 07:57:02 robertj * Added ability to specify alias type in H323SetAliasAddress, if not specified * then defaults to previous behaviour, thanks Nils Bokerman. * * Revision 1.44 2001/12/15 07:09:56 robertj * Added functions to get E.164 address from alias address or addresses. * * Revision 1.43 2001/12/14 06:38:47 robertj * Broke out conversion of Q.850 and H.225 release complete codes to * OpenH323 call end reasons enum. * * Revision 1.42 2001/12/13 10:56:04 robertj * Added build of request in progress pdu. * * Revision 1.41 2001/08/16 07:49:16 robertj * Changed the H.450 support to be more extensible. Protocol handlers * are now in separate classes instead of all in H323Connection. * * Revision 1.40 2001/08/10 11:03:49 robertj * Major changes to H.235 support in RAS to support server. * * Revision 1.39 2001/08/06 07:44:52 robertj * Fixed problems with building without SSL * * Revision 1.38 2001/08/06 03:08:11 robertj * Fission of h323.h to h323ep.h & h323con.h, h323.h now just includes files. * * Revision 1.37 2001/06/14 06:25:13 robertj * Added further H.225 PDU build functions. * Moved some functionality from connection to PDU class. * * Revision 1.36 2001/06/14 00:45:19 robertj * Added extra parameters for Q.931 fields, thanks Rani Assaf * * Revision 1.35 2001/05/30 23:34:54 robertj * Added functions to send TCS=0 for transmitter side pause. * * Revision 1.34 2001/04/11 03:01:27 robertj * Added H.450.2 (call transfer), thanks a LOT to Graeme Reid & Norwood Systems * * Revision 1.33 2001/03/24 00:34:35 robertj * Added read/write hook functions so don't have to duplicate code in * H323RasH235PDU descendant class of H323RasPDU. * * Revision 1.32 2001/03/21 04:52:40 robertj * Added H.235 security to gatekeepers, thanks Fќrbass Franz! * * Revision 1.31 2001/02/09 05:16:24 robertj * Added #pragma interface for GNU C++. * * Revision 1.30 2001/01/19 01:20:38 robertj * Added non-const function to get access to Q.931 PDU in H323SignalPDU. * * Revision 1.29 2000/10/04 05:59:09 robertj * Minor reorganisation of the H.245 secondary channel start up to make it simpler * to override its behaviour. * * Revision 1.28 2000/09/25 06:47:54 robertj * Removed use of alias if there is no alias present, ie only have transport address. * * Revision 1.27 2000/09/22 01:35:02 robertj * Added support for handling LID's that only do symmetric codecs. * * Revision 1.26 2000/07/15 09:50:49 robertj * Changed adding of Q.931 party numbers to only occur in SETUP. * * Revision 1.25 2000/06/21 08:07:39 robertj * Added cause/reason to release complete PDU, where relevent. * * Revision 1.24 2000/05/23 11:32:27 robertj * Rewrite of capability table to combine 2 structures into one and move functionality into that class * allowing some normalisation of usage across several applications. * Changed H323Connection so gets a copy of capabilities instead of using endponts, allows adjustments * to be done depending on the remote client application. * * Revision 1.23 2000/05/08 14:07:26 robertj * Improved the provision and detection of calling and caller numbers, aliases and hostnames. * * Revision 1.22 2000/05/08 05:05:43 robertj * Fixed bug in H.245 close logical channel timeout, thanks XuPeili. * * Revision 1.21 2000/05/02 04:32:24 robertj * Fixed copyright notice comment. * * Revision 1.20 2000/04/10 20:39:30 robertj * Added support for more sophisticated DTMF and hook flash user indication. * Added function to extract E164 address from Q.931/H.225 PDU. * * Revision 1.19 2000/03/25 02:00:39 robertj * Added adjustable caller name on connection by connection basis. * * Revision 1.18 2000/03/21 01:22:01 robertj * Fixed incorrect call reference code being used in originated call. * * Revision 1.17 1999/12/11 02:20:58 robertj * Added ability to have multiple aliases on local endpoint. * * Revision 1.16 1999/09/10 03:36:48 robertj * Added simple Q.931 Status response to Q.931 Status Enquiry * * Revision 1.15 1999/08/31 12:34:18 robertj * Added gatekeeper support. * * Revision 1.14 1999/08/25 05:07:49 robertj * File fission (critical mass reached). * * Revision 1.13 1999/07/16 06:15:59 robertj * Corrected semantics for tunnelled master/slave determination in fast start. * * Revision 1.12 1999/07/16 02:15:30 robertj * Fixed more tunneling problems. * * Revision 1.11 1999/07/15 14:45:35 robertj * Added propagation of codec open error to shut down logical channel. * Fixed control channel start up bug introduced with tunnelling. * * Revision 1.10 1999/07/10 02:51:53 robertj * Added mutexing in H245 procedures. * * Revision 1.9 1999/07/09 06:09:49 robertj * Major implementation. An ENORMOUS amount of stuff added everywhere. * * Revision 1.8 1999/06/25 10:25:35 robertj * Added maintentance of callIdentifier variable in H.225 channel. * * Revision 1.7 1999/06/14 05:15:56 robertj * Changes for using RTP sessions correctly in H323 Logical Channel context * * Revision 1.6 1999/06/13 12:41:14 robertj * Implement logical channel transmitter. * Fixed H245 connect on receiving call. * * Revision 1.5 1999/06/09 05:26:20 robertj * Major restructuring of classes. * * Revision 1.4 1999/06/06 06:06:36 robertj * Changes for new ASN compiler and v2 protocol ASN files. * * Revision 1.3 1999/04/26 06:14:47 craigs * Initial implementation for RTP decoding and lots of stuff * As a whole, these changes are called "First Noise" * * Revision 1.2 1999/01/16 02:35:04 robertj * GNi compiler compatibility. * * Revision 1.1 1999/01/16 01:30:58 robertj * Initial revision * */ #ifndef __OPAL_H323PDU_H #define __OPAL_H323PDU_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "h323con.h" #include "transports.h" #include "q931.h" #include "h225.h" #include "h245.h" #include "h323trans.h" class H225_RAS; #define H225_PROTOCOL_VERSION 6 #define H245_PROTOCOL_VERSION 13 /////////////////////////////////////////////////////////////////////////////// /**Wrapper class for the H323 signalling channel. */ class H323SignalPDU : public H225_H323_UserInformation { PCLASSINFO(H323SignalPDU, H225_H323_UserInformation); public: /**@name Construction */ //@{ /**Create a new H.323 signalling channel (H.225/Q.931) PDU. */ H323SignalPDU(); /**Build a SETUP message. */ H225_Setup_UUIE & BuildSetup( const H323Connection & connection, ///< Connection PDU is generated for const H323TransportAddress & destAddr ///< Destination address for packet ); /**Build a CALL-PROCEEDING message. */ H225_CallProceeding_UUIE & BuildCallProceeding( const H323Connection & connection ///< Connection PDU is generated for ); /**Build a CONNECT message. */ H225_Connect_UUIE & BuildConnect( const H323Connection & connection ///< Connection PDU is generated for ); /**Build a CONNECT message with H.245 address. */ H225_Connect_UUIE & BuildConnect( const H323Connection & connection, ///< Connection PDU is generated for const PIPSocket::Address & h245Address, ///< H.245 IP address WORD port ///< H.245 TCP port ); /**Build an ALERTING message. */ H225_Alerting_UUIE & BuildAlerting( const H323Connection & connection ///< Connection PDU is generated for ); /**Build a INFORMATION message. */ H225_Information_UUIE & BuildInformation( const H323Connection & connection ///< Connection PDU is generated for ); /**Build a RELEASE-COMPLETE message. */ H225_ReleaseComplete_UUIE & BuildReleaseComplete( const H323Connection & connection ///< Connection PDU is generated for ); /**Build a FACILITY message. */ H225_Facility_UUIE * BuildFacility( const H323Connection & connection, ///< Connection PDU is generated for PBoolean empty, ///< Flag for empty facility message unsigned reason = H225_FacilityReason::e_undefinedReason ///< Reason for Facility ); /**Build a PROGRESS message. */ H225_Progress_UUIE & BuildProgress( const H323Connection & connection ///< Connection PDU is generated for ); /**Build a STATUS message. */ H225_Status_UUIE & BuildStatus( const H323Connection & connection ///< Connection PDU is generated for ); /**Build a STATUS-INQUIRY message. */ H225_StatusInquiry_UUIE & BuildStatusInquiry( const H323Connection & connection ///< Connection PDU is generated for ); /**Build a SETUP-ACKNOWLEDGE message. */ H225_SetupAcknowledge_UUIE & BuildSetupAcknowledge( const H323Connection & connection ///< Connection PDU is generated for ); /**Build a NOTIFY message. */ H225_Notify_UUIE & BuildNotify( const H323Connection & connection ///< Connection PDU is generated for ); //@} /**@name Operations */ //@{ /**Print PDU to stream. */ void PrintOn( ostream & strm ) const; /**Read PDU from the specified transport. */ PBoolean Read( H323Transport & transport ///< Transport to read from ); /** Process a block of raw read as a PDU */ PBoolean ProcessReadData( H323Transport & transport, ///< Transport to read from const PBYTEArray & rawData ); /**Write the PDU to the transport. */ PBoolean Write( H323Transport & transport, ///* Transport to write to H323Connection * connection = NULL ///* Connection for CallBack ); /**Get the Q.931 wrapper PDU for H.225 signalling PDU. */ const Q931 & GetQ931() const { return q931pdu; } /**Get the Q.931 wrapper PDU for H.225 signalling PDU. */ Q931 & GetQ931() { return q931pdu; } /**Set the Q.931 wrapper PDU for H.225 signalling PDU */ void SetQ931(const Q931 & _q931pdu) { q931pdu = _q931pdu; } /**Build the Q.931 wrapper PDU for H.225 signalling PDU. This must be called after altering fields in the H.225 part of the PDU. If it has never been done, then the Write() functions will do so. */ void BuildQ931(); /**Get the source alias names for the remote endpoint. This returns a human readable set of names that was provided by the remote endpoint to identify it, eg phone number, display name etc etc */ PString GetSourceAliases( const H323Transport * transport = NULL ///< Transport PDU was read from. ) const; /**Get the source alias names for the remote endpoint. This returns an array of names of the remote endpoint to identify it. */ PStringArray GetSourceAliasNames() const; /**Get the Source H323 URL This return the URL of the caller if Present. This can be used for Inter-Domain Name caller resolution */ PString GetSourceURL() const; /**Get the destination alias name(s) for the local endpoint. The alias returned here can be used to determine the routing of an incoming connection. */ PString GetDestinationAlias( PBoolean firstAliasOnly = FALSE ///< Only return the first possible alias ) const; /**Get the source endpoints identification as a phone number. This returns FALSE if the remote never provided any alias or Q.931 field that indicated a valid e.164 telephone number. */ PBoolean GetSourceE164( PString & number ///< String to receive number ) const; /**Get the destiation phone number. This returns FALSE if the remote never provided any alias or Q.931 field that indicated a valid e.164 telephone number. */ PBoolean GetDestinationE164( PString & number ///< String to receive number ) const; /**Get the distinctive ring code if present. This returns zero if no distinctive ring information is provided. */ unsigned GetDistinctiveRing() const; /**Set the Q.931 fields in the PDU. This sets the default values for various fields, eg caller party number into the Q.931 from the supplied connection. */ void SetQ931Fields( const H323Connection & connection, PBoolean insertPartyNumbers = FALSE, unsigned plan = 1, unsigned type = 0, int presentation = -1, int screening = -1 ); #ifdef H323_H460 /** When sending the H460 message in the Setup PDU you have to ensure the ARQ is received first then add the Fields to the Setup PDU so we require a call back */ void InsertH460Setup(const H323Connection & connection, H225_Setup_UUIE & setup); #endif #ifndef DISABLE_CALLAUTH /** When sending the Setup PDU you have to ensure the ARQ is received first then add the cryptoFields to the Setup PDU so we require a call back */ void InsertCryptoTokensSetup(const H323Connection & connection, H225_Setup_UUIE & setup); #endif protected: // Even though we generally deal with the H323 protocol (H225) it is // actually contained within a field of the Q931 protocol. Q931 q931pdu; }; ///////////////////////////////////////////////////////////////////////////// /**Wrapper class for the H323 control channel. */ class H323ControlPDU : public H245_MultimediaSystemControlMessage { PCLASSINFO(H323ControlPDU, H245_MultimediaSystemControlMessage); public: H245_RequestMessage & Build(H245_RequestMessage ::Choices request); H245_ResponseMessage & Build(H245_ResponseMessage ::Choices response); H245_CommandMessage & Build(H245_CommandMessage ::Choices command); H245_IndicationMessage & Build(H245_IndicationMessage::Choices indication); H245_MasterSlaveDetermination & BuildMasterSlaveDetermination( unsigned terminalType, unsigned statusDeterminationNumber ); H245_MasterSlaveDeterminationAck & BuildMasterSlaveDeterminationAck( PBoolean isMaster ); H245_MasterSlaveDeterminationReject & BuildMasterSlaveDeterminationReject( unsigned cause ); H245_TerminalCapabilitySet & BuildTerminalCapabilitySet( const H323Connection & connection, unsigned sequenceNumber, PBoolean empty ); H245_TerminalCapabilitySetAck & BuildTerminalCapabilitySetAck( unsigned sequenceNumber ); H245_TerminalCapabilitySetReject & BuildTerminalCapabilitySetReject( unsigned sequenceNumber, unsigned cause ); H245_OpenLogicalChannel & BuildOpenLogicalChannel( unsigned forwardLogicalChannelNumber ); H245_RequestChannelClose & BuildRequestChannelClose( unsigned channelNumber, unsigned reason ); H245_CloseLogicalChannel & BuildCloseLogicalChannel( unsigned channelNumber ); H245_OpenLogicalChannelAck & BuildOpenLogicalChannelAck( unsigned channelNumber ); H245_OpenLogicalChannelReject & BuildOpenLogicalChannelReject( unsigned channelNumber, unsigned cause ); H245_OpenLogicalChannelConfirm & BuildOpenLogicalChannelConfirm( unsigned channelNumber ); H245_IndicationMessage & BuildLogicalChannelActive( unsigned channelNumber ); H245_CloseLogicalChannelAck & BuildCloseLogicalChannelAck( unsigned channelNumber ); H245_RequestChannelCloseAck & BuildRequestChannelCloseAck( unsigned channelNumber ); H245_RequestChannelCloseReject & BuildRequestChannelCloseReject( unsigned channelNumber ); H245_RequestChannelCloseRelease & BuildRequestChannelCloseRelease( unsigned channelNumber ); H245_RequestMode & BuildRequestMode( unsigned sequenceNumber ); H245_RequestModeAck & BuildRequestModeAck( unsigned sequenceNumber, unsigned response ); H245_RequestModeReject & BuildRequestModeReject( unsigned sequenceNumber, unsigned cause ); H245_RoundTripDelayRequest & BuildRoundTripDelayRequest( unsigned sequenceNumber ); H245_RoundTripDelayResponse & BuildRoundTripDelayResponse( unsigned sequenceNumber ); H245_UserInputIndication & BuildUserInputIndication( const PString & value ); H245_UserInputIndication & BuildUserInputIndication( char tone, ///< DTMF tone code unsigned duration, ///< Duration of tone in milliseconds unsigned logicalChannel, ///< Logical channel number for RTP sync. unsigned rtpTimestamp ///< RTP timestamp in logical channel sync. ); H245_FunctionNotUnderstood & BuildFunctionNotUnderstood( const H323ControlPDU & pdu ); H245_EndSessionCommand & BuildEndSessionCommand( unsigned reason ); }; ///////////////////////////////////////////////////////////////////////////// /**Wrapper class for the H323 gatekeeper RAS channel. */ class H323RasPDU : public H225_RasMessage, public H323TransactionPDU { PCLASSINFO(H323RasPDU, H225_RasMessage); public: H323RasPDU(); H323RasPDU( const H235Authenticators & authenticators ); // overrides from PObject virtual PObject * Clone() const; // overrides from H323TransactionPDU virtual PASN_Object & GetPDU(); virtual PASN_Choice & GetChoice(); virtual const PASN_Object & GetPDU() const; virtual const PASN_Choice & GetChoice() const; virtual unsigned GetSequenceNumber() const; virtual unsigned GetRequestInProgressDelay() const; #if PTRACING virtual const char * GetProtocolName() const; #endif virtual H323TransactionPDU * ClonePDU() const; virtual void DeletePDU(); // new functions H225_GatekeeperRequest & BuildGatekeeperRequest(unsigned seqNum); H225_GatekeeperConfirm & BuildGatekeeperConfirm(unsigned seqNum); H225_GatekeeperReject & BuildGatekeeperReject(unsigned seqNum, unsigned reason = H225_GatekeeperRejectReason::e_undefinedReason); H225_RegistrationRequest & BuildRegistrationRequest(unsigned seqNum); H225_RegistrationConfirm & BuildRegistrationConfirm(unsigned seqNum); H225_RegistrationReject & BuildRegistrationReject(unsigned seqNum, unsigned reason = H225_RegistrationRejectReason::e_undefinedReason); H225_UnregistrationRequest & BuildUnregistrationRequest(unsigned seqNum); H225_UnregistrationConfirm & BuildUnregistrationConfirm(unsigned seqNum); H225_UnregistrationReject & BuildUnregistrationReject(unsigned seqNum, unsigned reason = H225_UnregRejectReason::e_undefinedReason); H225_LocationRequest & BuildLocationRequest(unsigned seqNum); H225_LocationConfirm & BuildLocationConfirm(unsigned seqNum); H225_LocationReject & BuildLocationReject(unsigned seqNum, unsigned reason = H225_LocationRejectReason::e_undefinedReason); H225_AdmissionRequest & BuildAdmissionRequest(unsigned seqNum); H225_AdmissionConfirm & BuildAdmissionConfirm(unsigned seqNum); H225_AdmissionReject & BuildAdmissionReject(unsigned seqNum, unsigned reason = H225_AdmissionRejectReason::e_undefinedReason); H225_DisengageRequest & BuildDisengageRequest(unsigned seqNum); H225_DisengageConfirm & BuildDisengageConfirm(unsigned seqNum); H225_DisengageReject & BuildDisengageReject(unsigned seqNum, unsigned reason = H225_DisengageRejectReason::e_securityDenial); H225_BandwidthRequest & BuildBandwidthRequest(unsigned seqNum); H225_BandwidthConfirm & BuildBandwidthConfirm(unsigned seqNum, unsigned bandwidth = 0); H225_BandwidthReject & BuildBandwidthReject(unsigned seqNum, unsigned reason = H225_BandRejectReason::e_undefinedReason); H225_InfoRequest & BuildInfoRequest(unsigned seqNum, unsigned callRef = 0, const OpalGloballyUniqueID * id = NULL); H225_InfoRequestResponse & BuildInfoRequestResponse(unsigned seqNum); H225_InfoRequestAck & BuildInfoRequestAck(unsigned seqNum); H225_InfoRequestNak & BuildInfoRequestNak(unsigned seqNum, unsigned reason = H225_InfoRequestNakReason::e_undefinedReason); H225_ServiceControlIndication& BuildServiceControlIndication(unsigned seqNum, const OpalGloballyUniqueID * id = NULL); H225_ServiceControlResponse & BuildServiceControlResponse(unsigned seqNum); H225_UnknownMessageResponse & BuildUnknownMessageResponse(unsigned seqNum); H225_RequestInProgress & BuildRequestInProgress(unsigned seqNum, unsigned delay); }; ///////////////////////////////////////////////////////////////////////////// void H323SetAliasAddresses(const H323TransportAddressArray & addresses, H225_ArrayOf_AliasAddress & aliases); void H323SetAliasAddresses(const PStringArray & names, H225_ArrayOf_AliasAddress & aliases, int tag = -1); void H323SetAliasAddresses(const PStringList & names, H225_ArrayOf_AliasAddress & aliases, int tag = -1); void H323SetAliasAddress(const H323TransportAddress & address, H225_AliasAddress & alias); void H323SetAliasAddress(const PString & name, H225_AliasAddress & alias, int tag = -1); PStringArray H323GetAliasAddressStrings(const H225_ArrayOf_AliasAddress & aliases); PString H323GetAliasAddressString(const H225_AliasAddress & alias); PString H323GetAliasAddressE164(const H225_AliasAddress & alias); PString H323GetAliasAddressE164(const H225_ArrayOf_AliasAddress & aliases); H323Connection::CallEndReason H323TranslateToCallEndReason( Q931::CauseValues cause, const H225_ReleaseCompleteReason & reason ); Q931::CauseValues H323TranslateFromCallEndReason( H323Connection::CallEndReason endReason, H225_ReleaseCompleteReason & reason ); Q931::CauseValues H323TranslateFromCallEndReason( const H323Connection & connection, H225_ReleaseCompleteReason & rcReason ); PString H323GetApplicationInfo(const H225_VendorIdentifier & vendor); PBoolean H323SetRTPPacketization( H245_RTPPayloadType & rtpPacketization, const OpalMediaFormat & mediaFormat, RTP_DataFrame::PayloadTypes payloadType ); PBoolean H323GetRTPPacketization( OpalMediaFormat & mediaFormat, const H245_RTPPayloadType & rtpPacketization ); #if PTRACING void H323TraceDumpPDU( const char * proto, PBoolean writing, const PBYTEArray & rawData, const PASN_Object & pdu, const PASN_Choice & tag1, unsigned seqNum, const H323TransportAddress & locAddr, const H323TransportAddress & remAddr ); #else #define H323TraceDumpPDU(proto, writing, rawData, pdu, tag1, seqNum, locAddr, remAddr) #endif #endif // __OPAL_H323PDU_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/h323h224.h0000644000175000017500000000746511647744275014017 0ustar markmark/* * h323h224.h * * H.323 H.224 logical channel establishment implementation for the * OpenH323 Project. * * Copyright (c) 2006 Network for Educational Technology, ETH Zurich. * Written by Hannes Friederich. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * Contributor(s): ______________________________________. * * $Id: h323h224.h,v 1.4 2011/10/20 07:07:41 shorne Exp $ * */ #ifndef __OPAL_H323H224_H #define __OPAL_H323H224_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include #include #include #define H323_H224_CAPABILITY_NAME "H.224" /** This class describes the H.224 capability */ class H323_H224Capability : public H323DataCapability { PCLASSINFO(H323_H224Capability, H323DataCapability); public: H323_H224Capability(); ~H323_H224Capability(); Comparison Compare(const PObject & obj) const; virtual PObject * Clone() const; virtual unsigned GetSubType() const; virtual PString GetFormatName() const; virtual H323Channel * CreateChannel(H323Connection & connection, H323Channel::Directions dir, unsigned sesionID, const H245_H2250LogicalChannelParameters * param) const; virtual PBoolean OnSendingPDU(H245_DataApplicationCapability & pdu) const; virtual PBoolean OnSendingPDU(H245_DataMode & pdu) const; virtual PBoolean OnReceivedPDU(const H245_DataApplicationCapability & pdu); }; /** This class implements a H.224 logical channel */ class H323_H224Channel : public H323Channel { PCLASSINFO(H323_H224Channel, H323Channel); public: H323_H224Channel(H323Connection & connection, const H323Capability & capability, Directions direction, RTP_UDP & session, unsigned sessionID); ~H323_H224Channel(); virtual unsigned GetSessionID() const; virtual H323Channel::Directions GetDirection() const; virtual PBoolean SetInitialBandwidth(); virtual void Receive(); virtual void Transmit(); virtual PBoolean Open(); virtual PBoolean Start(); virtual void Close(); virtual PBoolean OnSendingPDU(H245_OpenLogicalChannel & openPDU) const; virtual void OnSendOpenAck(const H245_OpenLogicalChannel & openPDU, H245_OpenLogicalChannelAck & ack) const; virtual PBoolean OnReceivedPDU(const H245_OpenLogicalChannel & pdu, unsigned & errorCode); virtual PBoolean OnReceivedAckPDU(const H245_OpenLogicalChannelAck & pdu); virtual PBoolean OnSendingPDU(H245_H2250LogicalChannelParameters & param) const; virtual void OnSendOpenAck(H245_H2250LogicalChannelAckParameters & param) const; virtual PBoolean OnReceivedPDU(const H245_H2250LogicalChannelParameters & param, unsigned & errorCode); virtual PBoolean OnReceivedAckPDU(const H245_H2250LogicalChannelAckParameters & param); virtual PBoolean SetDynamicRTPPayloadType(int newType); RTP_DataFrame::PayloadTypes GetDynamicRTPPayloadType() const { return rtpPayloadType; } // virtual OpalMediaStream * GetMediaStream() const; OpalH224Handler * GetHandler() const { return h224Handler; } protected: virtual PBoolean ExtractTransport(const H245_TransportAddress & pdu, PBoolean isDataPort, unsigned & errorCode); unsigned sessionID; Directions direction; RTP_UDP & rtpSession; H323_RTP_Session & rtpCallbacks; OpalH224Handler *h224Handler; RTP_DataFrame::PayloadTypes rtpPayloadType; }; #endif // __OPAL_H323H224_H h323plus/include/h224handler.h0000644000175000017500000000727411513321750014730 0ustar markmark/* * h224handler.h * * H.224 protocol handler implementation for the OpenH323 Project. * * Copyright (c) 2006 Network for Educational Technology, ETH Zurich. * Written by Hannes Friederich. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * Contributor(s): ______________________________________. * * $Log: h224handler.h,v $ * Revision 1.3 2011/01/12 12:51:52 shorne * H.224 bi-directional support added * * Revision 1.2 2008/05/23 11:19:21 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:50:48 shorne * First commit of h323plus * * Revision 1.1 2006/06/22 11:07:22 shorne * Backport of FECC (H.224) from Opal * * Revision 1.2 2006/04/23 18:52:19 dsandras * Removed warnings when compiling with gcc on Linux. * * Revision 1.1 2006/04/20 16:48:17 hfriederich * Initial version of H.224/H.281 implementation. * */ #ifndef __H323_H224HANDLER_H #define __H323_H224HANDLER_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include #include #include #define H281_CLIENT_ID 0x01 class H224_Frame; class OpalH224Handler; class OpalH224ReceiverThread : public PThread { PCLASSINFO(OpalH224ReceiverThread, PThread); public: OpalH224ReceiverThread(OpalH224Handler *h224Handler, RTP_Session & rtpSession); ~OpalH224ReceiverThread(); virtual void Main(); void Close(); private: OpalH224Handler *h224Handler; mutable PMutex inUse; unsigned timestamp; RTP_Session & rtpSession; PBoolean terminate; }; class OpalH281Handler; class H323Connection; class OpalH224Handler : public PObject { PCLASSINFO(OpalH224Handler, PObject); public: OpalH224Handler(H323Channel::Directions dir, H323Connection & connection, unsigned sessionID); ~OpalH224Handler(); virtual void StartTransmit(); virtual void StopTransmit(); virtual void StartReceive(); virtual void StopReceive(); PBoolean SendClientList(); PBoolean SendExtraCapabilities(); PBoolean SendClientListCommand(); PBoolean SendExtraCapabilitiesCommand(BYTE clientID); PBoolean SendExtraCapabilitiesMessage(BYTE clientID, BYTE *data, PINDEX length); PBoolean TransmitClientFrame(BYTE clientID, H224_Frame & frame); virtual PBoolean OnReceivedFrame(H224_Frame & frame); virtual PBoolean OnReceivedCMEMessage(H224_Frame & frame); virtual PBoolean OnReceivedClientList(H224_Frame & frame); virtual PBoolean OnReceivedClientListCommand(); virtual PBoolean OnReceivedExtraCapabilities(H224_Frame & frame); virtual PBoolean OnReceivedExtraCapabilitiesCommand(); PMutex & GetTransmitMutex() { return transmitMutex; } RTP_Session * GetSession() const { return session; } virtual OpalH224ReceiverThread * CreateH224ReceiverThread(); OpalH281Handler *GetH281Handler() { return h281Handler; } H323Channel::Directions GetDirection() { return sessionDirection; } protected: RTP_Session * session; PBoolean canTransmit; PMutex transmitMutex; RTP_DataFrame *transmitFrame; BYTE transmitBitIndex; PTime *transmitStartTime; OpalH224ReceiverThread *receiverThread; OpalH281Handler *h281Handler; H323Channel::Directions sessionDirection; private: void TransmitFrame(H224_Frame & frame); }; #endif // __H323_H224HANDLER_H h323plus/include/ptlib_extras.h0000644000175000017500000005551711660433342015422 0ustar markmark // ptlib_extras.h: /* * Ptlib Extras Implementation for the h323plus Library. * * Copyright (c) 2011 ISVO (Asia) Pte Ltd. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is derived from and used in conjunction with the * H323plus Project (www.h323plus.org/) * * The Initial Developer of the Original Code is ISVO (Asia) Pte Ltd. * * * Contributor(s): ______________________________________. * * $Id: ptlib_extras.h,v 1.12 2011/11/15 09:54:42 willamowius Exp $ * */ #ifndef _PTLIB_EXTRAS_H #define _PTLIB_EXTRAS_H #include "openh323buildopts.h" #ifndef H323_STLDICTIONARY #define H323Dictionary PDictionary #define H323DICTIONARY PDICTIONARY #define H323List PList #define H323LIST PLIST #else #include #include template class deleteDictionaryEntry { public: void operator()(const PAIR & p) { delete p.second.second; } }; template inline void deleteDictionaryEntries(const E & e) { typedef typename E::value_type PT; std::for_each(e.begin(), e.end(), deleteDictionaryEntry()); } struct PSTLSortOrder { int operator() ( unsigned p1, unsigned p2 ) const { return (p1 > p2); } }; template class PSTLDictionary : public PObject, public std::map< unsigned, std::pair, PSTLSortOrder > { public: PCLASSINFO(PSTLDictionary, PObject); /**@name Construction */ //@{ /**Create a new, empty, dictionary. Note that by default, objects placed into the dictionary will be deleted when removed or when all references to the dictionary are destroyed. */ PSTLDictionary() :disallowDeleteObjects(false) {} ~PSTLDictionary() { RemoveAll(); } //@} /**@name Overrides from class PObject */ //@{ /**Make a complete duplicate of the dictionary. Note that all objects in the array are also cloned, so this will make a complete copy of the dictionary. */ virtual PObject * Clone() const { return PNEW PSTLDictionary(*this); } //@} /**@name New functions for class */ //@{ /**Get the object contained in the dictionary at the \p key position. The hash table is used to locate the data quickly via the hash function provided by the \p key. The last key/data pair is remembered by the class so that subseqent access is very fast. @return reference to the object indexed by the key. */ D & operator[]( const K & key ///< Key to look for in the dictionary. ) const { unsigned pos = 0; return *InternalFindKey(key,pos); } /**Determine if the value of the object is contained in the hash table. The object values are compared, not the pointers. So the objects in the collection must correctly implement the PObject::Compare() function. The hash table is used to locate the entry. @return true if the object value is in the dictionary. */ PBoolean Contains( const K & key ///< Key to look for in the dictionary. ) const { unsigned pos = 0; return InternalContains(key,pos); } /**Remove an object at the specified \p key. The returned pointer is then removed using the SetAt() function to set that key value to NULL. If the AllowDeleteObjects option is set then the object is also deleted. @return pointer to the object being removed, or NULL if the key was not present in the dictionary. If the dictionary is set to delete objects upon removal, the value -1 is returned if the key existed prior to removal rather than returning an illegal pointer */ virtual D * RemoveAt( const K & key ///< Key for position in dictionary to get object. ) { return InternalRemoveKey(key); } /**Add a new object to the collection. If the objects value is already in the dictionary then the object is overrides the previous value. If the AllowDeleteObjects option is set then the old object is also deleted. The object is placed in the an ordinal position dependent on the keys hash function. Subsequent searches use the hash function to speed access to the data item. @return true if the object was successfully added. */ virtual PBoolean SetAt( const K & key, // Key for position in dictionary to add object. D * obj // New object to put into the dictionary. ) { return InternalAddKey(key, obj); } /**Get the object at the specified key position. If the key was not in the collection then NULL is returned. @return pointer to object at the specified key. */ virtual D * GetAt( const K & key // Key for position in dictionary to get object. ) { unsigned pos = 0; return (D *)InternalFindKey(key,pos); } /**Get the key in the dictionary at the ordinal index position. The ordinal position in the dictionary is determined by the hash values of the keys and the order of insertion. The last key/data pair is remembered by the class so that subseqent access is very fast. @return reference to key at the index position. */ const K & GetKeyAt( PINDEX pos ///< Ordinal position in dictionary for key. ) const { return InternalGetKeyAt(pos); } /**Get the data in the dictionary at the ordinal index position. The ordinal position in the dictionary is determined by the hash values of the keys and the order of insertion. The last key/data pair is remembered by the class so that subseqent access is very fast. @return reference to data at the index position. */ D & GetDataAt( PINDEX pos ///< Ordinal position in dictionary for data. ) const { return InternalGetAt(pos); } PINDEX GetSize() const { return this->size(); } /**Remove all of the elements in the collection. This operates by continually calling RemoveAt() until there are no objects left. The objects are removed from the last, at index (GetSize()-1) toward the first at index zero. */ virtual void RemoveAll() { PWaitAndSignal m(dictMutex); if (!disallowDeleteObjects) deleteDictionaryEntries(*this); this->clear(); } PINLINE void AllowDeleteObjects( PBoolean yes = true ///< New value for flag for deleting objects ) { disallowDeleteObjects = !yes; } /**Disallow the deletion of the objects contained in the collection. See the AllowDeleteObjects() function for more details. */ void DisallowDeleteObjects() { disallowDeleteObjects = true; } //@} typedef struct std::pair DictionaryEntry; protected: PBoolean disallowDeleteObjects; PMutex dictMutex; D * InternalFindKey( const K & key, ///< Key to look for in the dictionary. unsigned & ref ///< Returned index ) const { typename std::map< unsigned, std::pair,PSTLSortOrder>::const_iterator i; for (i = this->begin(); i != this->end(); ++i) { if (i->second.first == key) { ref = i->first; return i->second.second; } } return NULL; }; D & InternalGetAt( unsigned ref ///< Returned index ) const { PWaitAndSignal m(dictMutex); PAssert(ref < this->size(), psprintf("Index out of Bounds ref: %u sz: %u",ref,this->size())); typename std::map< unsigned, std::pair,PSTLSortOrder>::const_iterator i = this->find(ref); return *(i->second.second); }; const K & InternalGetKeyAt( unsigned ref ///< Ordinal position in dictionary for key. ) const { PWaitAndSignal m(dictMutex); PAssert(ref < this->size(), psprintf("Index out of Bounds ref: %u sz: %u",ref,this->size())); typename std::map< unsigned, std::pair,PSTLSortOrder>::const_iterator i = this->find(ref); return i->second.first; } D * InternalRemoveResort(unsigned pos) { unsigned newpos = pos; unsigned sz = this->size(); D * dataPtr = NULL; typename std::map< unsigned, std::pair, PSTLSortOrder >::iterator it = this->find(pos); if (it == this->end()) return NULL; if (disallowDeleteObjects) dataPtr = it->second.second; else delete it->second.second; this->erase(it); for (unsigned i = pos+1; i < sz; ++i) { typename std::map< unsigned, std::pair, PSTLSortOrder >::iterator j = this->find(i); DictionaryEntry entry = make_pair(j->second.first,j->second.second) ; this->insert(pair >(newpos,entry)); newpos++; this->erase(j); } return dataPtr; }; D * InternalRemoveKey( const K & key ///< Key to look for in the dictionary. ) { PWaitAndSignal m(dictMutex); unsigned pos = 0; InternalFindKey(key,pos); return InternalRemoveResort(pos); } PBoolean InternalAddKey( const K & key, // Key for position in dictionary to add object. D * obj // New object to put into the dictionary. ) { PWaitAndSignal m(dictMutex); unsigned pos = this->size(); DictionaryEntry entry = make_pair(key,obj); this->insert(pair >(pos,entry)); return true; } PBoolean InternalContains( const K & key, ///< Key to look for in the dictionary. unsigned & ref ///< Returned index ) const { return (InternalFindKey(key,ref) != NULL); }; }; #define PSTLDICTIONARY(cls, K, D) typedef PSTLDictionary cls #define H323Dictionary PSTLDictionary #define H323DICTIONARY PSTLDICTIONARY ////////////////////////////////////////////////////////////////////////////////////// template class deleteListEntry { public: void operator()(const PAIR & p) { delete p.second; } }; template inline void deleteListEntries(const E & e) { typedef typename E::value_type PT; std::for_each(e.begin(), e.end(), deleteListEntry() ); } template class PSTLList : public PObject, public std::map< unsigned, D* , PSTLSortOrder > { public: PCLASSINFO(PSTLList, PObject); /**@name Construction */ //@{ /**Create a new, empty, dictionary. Note that by default, objects placed into the dictionary will be deleted when removed or when all references to the dictionary are destroyed. */ PSTLList() :disallowDeleteObjects(false) {} ~PSTLList() { RemoveAll(); } //@} /**@name Overrides from class PObject */ //@{ /**Make a complete duplicate of the dictionary. Note that all objects in the array are also cloned, so this will make a complete copy of the dictionary. */ virtual PObject * Clone() const { return PNEW PSTLList(*this); } //@} virtual PINDEX Append( D * obj ///< New object to place into the collection. ) { return InternalAddKey(obj); } /**Insert a new object at the specified ordinal index. If the index is greater than the number of objects in the collection then the equivalent of the Append() function is performed. If not greater it will insert at the ordinal index and shuffle down ordinal values. @return index of the newly inserted object. */ virtual PINDEX InsertAt( PINDEX index, ///< Index position in collection to place the object. D * obj ///< New object to place into the collection. ) { return InternalSetAt(index,obj,false,true); } /**Remove the object at the specified ordinal index from the collection. If the AllowDeleteObjects option is set then the object is also deleted. Note if the index is beyond the size of the collection then the function will assert. @return pointer to the object being removed, or NULL if it was deleted. */ virtual D * RemoveAt( PINDEX index ///< Index position in collection to place the object. ) { return InternalRemoveKey(index); } PBoolean Remove( D * obj ///< Index position in collection to place the object. ) { unsigned index=0; if (!InternalFindIndex(index,obj)) return false; return (InternalRemoveResort(index) != NULL); } /**Set the object at the specified ordinal position to the new value. This will overwrite the existing entry. This method will NOT delete the old object independently of the AllowDeleteObjects option. Use ReplaceAt() instead. Note if the index is beyond the size of the collection then the function will assert. @return true if the object was successfully added. */ virtual PBoolean SetAt( PINDEX index, ///< Index position in collection to set. D * obj ///< New value to place into the collection. ) { return InternalSetAt(index,obj); } /**Set the object at the specified ordinal position to the new value. This will overwrite the existing entry. If the AllowDeleteObjects option is set then the old object is also deleted. Note if the index is beyond the size of the collection then the function will assert. @return true if the object was successfully replaced. */ virtual PBoolean ReplaceAt( PINDEX index, ///< Index position in collection to set. D * obj ///< New value to place into the collection. ) { return InternalSetAt(index,obj, true); } /**Get the object at the specified ordinal position. If the index was greater than the size of the collection then NULL is returned. The object accessed in this way is remembered by the class and further access will be fast. Access to elements one either side of that saved element, and the head and tail of the list, will always be fast. @return pointer to object at the specified index. */ virtual D * GetAt( PINDEX index ///< Index position in the collection of the object. ) const { return InternalAt(index); } D & operator[](PINDEX i) const { return InternalGetAt(i); } /**Search the collection for the specific instance of the object. The object pointers are compared, not the values. A simple linear search from "head" of the list is performed. @return ordinal index position of the object, or P_MAX_INDEX. */ virtual PINDEX GetObjectsIndex( const D * obj ///< Object to find. ) const { unsigned index=0; if (InternalFindIndex(index,obj)) return index; else return P_MAX_INDEX; } /**Search the collection for the specified value of the object. The object values are compared, not the pointers. So the objects in the collection must correctly implement the PObject::Compare() function. A simple linear search from "head" of the list is performed. @return ordinal index position of the object, or P_MAX_INDEX. */ virtual PINDEX GetValuesIndex( const D & obj ///< Object to find value of. ) const { unsigned index=0; if (InternalIndex(index,obj)) return index; else return P_MAX_INDEX; } //@} PINDEX GetSize() const { return this->size(); } PBoolean IsEmpty() const { return (this->size() == 0); } /**Remove all of the elements in the collection. This operates by continually calling RemoveAt() until there are no objects left. The objects are removed from the last, at index (GetSize()-1) toward the first at index zero. */ virtual void RemoveAll() { PWaitAndSignal m(dictMutex); if (IsEmpty()) return; if (!disallowDeleteObjects) deleteListEntries(*this); this->clear(); } void SetSize(PINDEX i) { if (i == 0) RemoveAll(); } PINLINE void AllowDeleteObjects( PBoolean yes = true ///< New value for flag for deleting objects ) { disallowDeleteObjects = !yes; } /**Disallow the deletion of the objects contained in the collection. See the AllowDeleteObjects() function for more details. */ void DisallowDeleteObjects() { disallowDeleteObjects = true; } //@} protected: PBoolean disallowDeleteObjects; PMutex dictMutex; PBoolean InternalFindIndex( unsigned & ref, ///< Returned index const D * data ///< Data to match ) const { PWaitAndSignal m(dictMutex); typename std::map< unsigned, D* , PSTLSortOrder>::const_iterator i; for (i = this->begin(); i != this->end(); ++i) { if (i->second == data) { ref = i->first; return true; } } return false; }; PBoolean InternalIndex( unsigned & ref, ///< Returned index const D & data ///< Data to match ) const { PWaitAndSignal m(dictMutex); typename std::map< unsigned, D* , PSTLSortOrder>::const_iterator i; for (i = this->begin(); i != this->end(); ++i) { if (*(i->second) == data) { ref = i->first; return true; } } return false; }; D & InternalGetAt( unsigned ref ///< Returned index ) const { PWaitAndSignal m(dictMutex); PAssert(ref < this->size(), psprintf("Index out of Bounds ref: %u sz: %u",ref,this->size())); typename std::map< unsigned, D*, PSTLSortOrder>::const_iterator i = this->find(ref); PAssert(i != this->end() , psprintf("Index not found: %u sz: %u",ref,this->size())); return *(i->second); }; D * InternalAt( unsigned ref ///< Returned index ) const { PWaitAndSignal m(dictMutex); PAssert(ref < this->size(), psprintf("Index out of Bounds ref: %u sz: %u",ref,this->size())); typename std::map< unsigned, D*, PSTLSortOrder>::const_iterator i = this->find(ref); return i->second; }; D * InternalRemoveResort(unsigned pos) { unsigned newpos = pos; unsigned sz = this->size(); D * dataPtr = NULL; typename std::map< unsigned, D*, PSTLSortOrder >::iterator it = this->find(pos); if (it == this->end()) return NULL; if (disallowDeleteObjects) dataPtr = it->second; else delete it->second; this->erase(it); for (unsigned i = pos+1; i < sz; ++i) { typename std::map< unsigned, D*, PSTLSortOrder >::iterator j = this->find(i); PAssert(j != this->end() , psprintf("Index not found: %u sz: %u",i,this->size())); D* entry = j->second; this->insert(std::pair(newpos,entry)); newpos++; this->erase(j); } return dataPtr; }; D * InternalRemoveKey( PINDEX pos ///< Key to look for in the dictionary. ) { PWaitAndSignal m(dictMutex); return InternalRemoveResort(pos); } PINDEX InternalAddKey( D * obj // New object to put into list. ) { PWaitAndSignal m(dictMutex); unsigned pos = this->size(); this->insert(std::pair(pos,obj)); return pos; } PINDEX InternalSetAt( PINDEX ref, ///< Index position in collection to set. D * obj, ///< New value to place into the collection. PBoolean replace = false, PBoolean reorder = false ) { if (ref >= GetSize()) return InternalAddKey(obj); PWaitAndSignal m(dictMutex); if (!reorder) { typename std::map< unsigned, D*, PSTLSortOrder>::iterator it = this->find(ref); if (replace) delete it->second; this->erase(it); } else { //for (typename std::map< unsigned, D*, PSTLSortOrder >::iterator r = this->begin(); r != this->end(); ++r) { // if (*obj == *(r->second)) { // InternalRemoveResort(r->first); // break; // } //} int sz = this->size(); if (sz > 0) { int newpos = sz; for (int i = sz-1; i >= ref; --i) { typename std::map< unsigned, D*, PSTLSortOrder >::iterator it = this->find(i); D* entry = it->second; this->insert(std::pair(newpos,entry)); this->erase(it); newpos--; } } } this->insert(std::pair(ref,obj)); return ref; } }; #define PSTLLIST(cls, D) typedef PSTLList cls; #define H323List PSTLList #define H323LIST PSTLLIST #endif // PTLIB_VER < 2110 #endif // _PTLIB_EXTRAS_H h323plus/include/h350/0000755000175000017500000000000011517311211013202 5ustar markmarkh323plus/include/h350/h350_service.h0000644000175000017500000000162211015524203015553 0ustar markmark// // h350_service.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H225 #ifndef __H225_H350_H #define __H225_H350_H #ifdef P_USE_PRAGMA #pragma interface #endif #include // // H350ServiceControl // class H225_H350ServiceControl : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H225_H350ServiceControl, PASN_Sequence); #endif public: H225_H350ServiceControl(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_IA5String m_ldapURL; PASN_IA5String m_ldapDN; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H225_H #endif // if ! H323_DISABLE_H225 // End of h350_service.h h323plus/include/h350/h350.h0000644000175000017500000000752011517311211014036 0ustar markmark/* * h350.h * * H.350 LDAP interface class. * * h323plus library * * Copyright (c) 2007 ISVO (Asia) Pte. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * Contributor(s): ______________________________________. * * $Log: h350.h,v $ * Revision 1.9 2011/01/24 14:54:01 willamowius * fix static plugins on Linux * * Revision 1.8 2011/01/14 11:57:26 willamowius * fix H.350 compile on Linux * * Revision 1.7 2008/06/26 13:00:50 shorne * Fixed change from PList to PArray in PTlib * * Revision 1.6 2008/05/23 11:20:34 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.5 2008/01/05 12:05:53 shorne * small code tidy up * * Revision 1.4 2008/01/05 11:36:01 shorne * More Fixes for Linux * * Revision 1.3 2008/01/02 19:28:02 shorne * Removed duplicate link to plugin factory * * Revision 1.2 2008/01/02 18:57:56 willamowius * compile fix for macro concatenation with gcc * * Revision 1.1 2007/08/06 20:50:50 shorne * First commit of h323plus * * * */ #pragma once #ifdef H323_H350 #ifndef _H323_H350 #define _H323_H350 #include #include #include class H350_Session : public PLDAPSession { public: typedef std::list LDAP_Record; typedef std::map LDAP_RecordList; PBoolean Open(const PString & hostname, WORD port = 389); PBoolean Login(const PString & who, const PString & passwd, PLDAPSession::AuthenticationMethod authMethod=AuthSimple); void NewRecord(LDAP_Record & rec); PBoolean SetAttribute(LDAP_Record & record,const PString & attrib, const PString & value); PBoolean SetAttribute(LDAP_Record & record,const PString & attrib, const PBYTEArray & value); PBoolean GetAttribute(LDAP_Record & record,const PString & attrib, PString & value); PBoolean GetAttribute(LDAP_Record & record,const PString & attrib, PBYTEArray & value); PBoolean PostNew(const PString & dn, const LDAP_Record & record); PBoolean PostUpdate(const PString & dn, const LDAP_Record & record); PBoolean Delete() { return FALSE; } int Search(const PString & base, const PString & filter, LDAP_RecordList & results, const PStringArray & attributes = PStringList() ); }; #define H350_Schema(cname) \ class cname##_schema : public PLDAPSchema \ { \ public: static PStringList SchemaName() { return PStringList(cname##_SchemaName); } \ void AttributeList(attributeList & attrib) { \ for (PINDEX i = 0; i< PARRAYSIZE(cname##_attributes ); i++) \ attrib.push_back(Attribute(cname##_attributes[i].name,(AttributeType)cname##_attributes[i].type)); }; \ }; \ LDAP_Schema(cname); #endif // _H323_H350 #endif h323plus/include/rfc2833.h0000644000175000017500000000774611015524137014012 0ustar markmark/* * rfc2833.h * * Open Phone Abstraction Library (OPAL) * Formally known as the Open H323 project. * * Copyright (c) 2001 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open Phone Abstraction Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: rfc2833.h,v $ * Revision 1.2 2008/05/23 11:19:59 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:50:50 shorne * First commit of h323plus * * Revision 1.4 2005/11/30 13:05:01 csoutheren * Changed tags for Doxygen * * Revision 1.3 2002/09/16 01:14:15 robertj * Added #define so can select if #pragma interface/implementation is used on * platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan. * * Revision 1.2 2002/09/03 06:19:37 robertj * Normalised the multi-include header prevention ifdef/define symbol. * * Revision 1.1 2002/01/23 05:06:23 robertj * Added RFC2833 support as separate class * */ #ifndef __OPAL_RFC2833_H #define __OPAL_RFC2833_H #ifdef P_USE_PRAGMA #pragma interface #endif #include "rtp.h" /////////////////////////////////////////////////////////////////////////////// class OpalRFC2833Info : public PObject { PCLASSINFO(OpalRFC2833Info, PObject); public: OpalRFC2833Info( char tone, unsigned duration = 0, unsigned timestamp = 0 ); char GetTone() const { return tone; } unsigned GetDuration() const { return duration; } unsigned GetTimestamp() const { return timestamp; } PBoolean IsToneStart() const { return duration == 0; } protected: char tone; unsigned duration; unsigned timestamp; }; class OpalRFC2833 : public PObject { PCLASSINFO(OpalRFC2833, PObject); public: OpalRFC2833( const PNotifier & receiveNotifier ); virtual PBoolean SendTone( char tone, ///< DTMF tone code unsigned duration ///< Duration of tone in milliseconds ); virtual PBoolean BeginTransmit( char tone ///< DTMF tone code ); virtual PBoolean EndTransmit(); virtual void OnStartReceive( char tone ); virtual void OnEndReceive( char tone, unsigned duration, unsigned timestamp ); RTP_DataFrame::PayloadTypes GetPayloadType() const { return payloadType; } void SetPayloadType( RTP_DataFrame::PayloadTypes type ///< new payload type ) { payloadType = type; } const PNotifier & GetReceiveHandler() const { return receiveHandler; } const PNotifier & GetTransmitHandler() const { return transmitHandler; } protected: PDECLARE_NOTIFIER(RTP_DataFrame, OpalRFC2833, ReceivedPacket); PDECLARE_NOTIFIER(RTP_DataFrame, OpalRFC2833, TransmitPacket); PDECLARE_NOTIFIER(PTimer, OpalRFC2833, ReceiveTimeout); PDECLARE_NOTIFIER(PTimer, OpalRFC2833, TransmitEnded); RTP_DataFrame::PayloadTypes payloadType; PMutex mutex; PNotifier receiveNotifier; PBoolean receiveComplete; BYTE receivedTone; unsigned receivedDuration; unsigned receiveTimestamp; PTimer receiveTimer; PNotifier receiveHandler; enum { TransmitIdle, TransmitActive, TransmitEnding } transmitState; BYTE transmitCode; unsigned transmitTimestamp; PTimer transmitTimer; PNotifier transmitHandler; }; #endif // __OPAL_RFC2833_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/transports.h0000644000175000017500000006117411647300515015135 0ustar markmark/* * transports.h * * H.323 protocol handler * * Open H323 Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Contributor(s): ______________________________________. * * $ Id $ * */ #ifndef __TRANSPORTS_H #define __TRANSPORTS_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "ptlib_extras.h" class H225_Setup_UUIE; class H225_TransportAddress; class H225_ArrayOf_TransportAddress; class H225_TransportAddress_ipAddress; class H245_TransportAddress; class H323SignalPDU; class H323RasPDU; class H323EndPoint; class H323Connection; class H323Listener; class H323Transport; class H323Gatekeeper; /////////////////////////////////////////////////////////////////////////////// /**String representation of a transport address. */ class H323TransportAddress : public PString { PCLASSINFO(H323TransportAddress, PString); public: H323TransportAddress() { m_version = 4; } H323TransportAddress(const char *); H323TransportAddress(const PString &); H323TransportAddress(const H225_TransportAddress &); H323TransportAddress(const H245_TransportAddress &); H323TransportAddress(const PIPSocket::Address &, WORD); PBoolean SetPDU(H225_TransportAddress & pdu) const; PBoolean SetPDU(H245_TransportAddress & pdu) const; /**Determine if the two transport addresses are equivalent. */ PBoolean IsEquivalent( const H323TransportAddress & address ); /**Extract the ip address from transport address. Returns FALSE, if the address is not an IP transport address. */ PBoolean GetIpAddress( PIPSocket::Address & ip ) const; /**Extract the ip address and port number from transport address. Returns FALSE, if the address is not an IP transport address. */ PBoolean GetIpAndPort( PIPSocket::Address & ip, WORD & port, const char * proto = "tcp" ) const; /**Get the IP Version 6 = IPv6 4 = IPv4 */ unsigned GetIpVersion() const; /**Translate the transport address to a more human readable form. Returns the hostname if using IP. */ PString GetHostName() const; /**Create a listener based on this transport address. For example an address of "#ip$10.0.0.1:1720#" would create a TCP listening socket that would be bound to the specific interface 10.0.0.1 and listens on port 1720. Note that the address "#ip$*:1720#" can be used to bind to INADDR_ANY. Also note that if the address has a trailing '+' character then the socket will be bound using the REUSEADDR option. */ H323Listener * CreateListener( H323EndPoint & endpoint ///< Endpoint object for transport creation. ) const; /**Create a listener compatible for this address type. This is similar to CreateListener() but does not use the TSAP specified in the H323Transport. For example an address of "#ip$10.0.0.1:1720#" would create a TCP listening socket that would be bound to the specific interface 10.0.0.1 but listens on a random OS allocated port number. */ H323Listener * CreateCompatibleListener( H323EndPoint & endpoint ///< Endpoint object for transport creation. ) const; /**Create a transport suitable for this address type. */ H323Transport * CreateTransport( H323EndPoint & endpoint ///< Endpoint object for transport creation. ) const; protected: void Validate(); private: unsigned m_version; }; PDECLARE_ARRAY(H323TransportAddressArray, H323TransportAddress) #ifdef DOC_PLUS_PLUS { #endif public: H323TransportAddressArray( const H323TransportAddress & address ) { AppendAddress(address); } H323TransportAddressArray( const H225_ArrayOf_TransportAddress & addresses ); H323TransportAddressArray( const PStringArray & array ) { AppendStringCollection(array); } H323TransportAddressArray( const PStringList & list ) { AppendStringCollection(list); } H323TransportAddressArray( const PSortedStringList & list ) { AppendStringCollection(list); } void AppendString( const char * address ); void AppendString( const PString & address ); void AppendAddress( const H323TransportAddress & address ); protected: void AppendStringCollection( const PCollection & coll ); }; /**This class describes a "listener" on a transport protocol. A "listener" is an object that listens for incoming connections on the particular transport. It is executed as a separate thread. The Main() function is used to handle incoming H.323 connections and dispatch them in new threads based on the actual H323Transport class. This is defined in the descendent class that knows what the low level transport is, eg H323ListenerIP for the TCP/IP protocol. An application may create a descendent off this class and override functions as required for operating the channel protocol. */ class H323Listener : public PThread { PCLASSINFO(H323Listener, PThread); public: /**@name Construction */ //@{ /**Create a new listener. */ H323Listener( H323EndPoint & endpoint ///< Endpoint instance for channel ); //@} /**@name Overrides from PObject */ //@{ virtual void PrintOn( ostream & strm ) const; //@} /**@name Operations */ //@{ /** Open the listener. */ virtual PBoolean Open() = 0; /**Stop the listener thread and no longer accept incoming connections. */ virtual PBoolean Close() = 0; /**Accept a new incoming transport. */ virtual H323Transport * Accept( const PTimeInterval & timeout ///< Time to wait for incoming connection ) = 0; /**Get the local transport address on which this listener may be accessed. */ virtual H323TransportAddress GetTransportAddress() const = 0; /**Set up a transport address PDU for bidirectional logical channels. */ virtual PBoolean SetUpTransportPDU( H245_TransportAddress & pdu, ///< Transport addresses listening on const H323Transport & associatedTransport ///< Associated transport for precendence and translation ) = 0; //@} protected: H323EndPoint & endpoint; /// Endpoint that owns the listener. }; H323LIST(H323ListenerList, H323Listener); /** Return a list of transport addresses corresponding to a listener list */ H323TransportAddressArray H323GetInterfaceAddresses( const H323ListenerList & listeners, ///< List of listeners PBoolean excludeLocalHost = TRUE, ///< Flag to exclude 127.0.0.1 H323Transport * associatedTransport = NULL ///< Associated transport for precedence and translation ); H323TransportAddressArray H323GetInterfaceAddresses( const H323TransportAddress & addr, ///< Possible INADDR_ANY address PBoolean excludeLocalHost = TRUE, ///< Flag to exclude 127.0.0.1 H323Transport * associatedTransport = NULL ///< Associated transport for precedence and translation ); /**Set the PDU field for the list of transport addresses */ void H323SetTransportAddresses( const H323Transport & associatedTransport, ///< Transport for NAT address translation const H323TransportAddressArray & addresses, ///< Addresses to set H225_ArrayOf_TransportAddress & pdu ///< List of PDU transport addresses ); /**This class describes a I/O transport protocol.. A "transport" is an object that listens for incoming connections on the particular transport. */ class H323Transport : public PIndirectChannel { PCLASSINFO(H323Transport, PIndirectChannel); public: /**@name Construction */ //@{ /**Create a new transport channel. */ H323Transport(H323EndPoint & endpoint); ~H323Transport(); //@} /**@name Overrides from PObject */ //@{ virtual void PrintOn( ostream & strm ) const; //@} /**@name Operations */ //@{ /**Get the transport address of the local endpoint. */ virtual H323TransportAddress GetLocalAddress() const = 0; /**Get the transport address of the remote endpoint. */ virtual H323TransportAddress GetRemoteAddress() const = 0; /**Set remote address to connect to. Note that this does not necessarily initiate a transport level connection, but only indicates where to connect to. The actual connection is made by the Connect() function. */ virtual PBoolean SetRemoteAddress( const H323TransportAddress & address ) = 0; /**Connect to the remote address. */ virtual PBoolean Connect() = 0; /**Connect to the specified address. */ PBoolean ConnectTo( const H323TransportAddress & address ) { return SetRemoteAddress(address) && Connect(); } /**Close the channel. */ virtual PBoolean Close(); /**Check that the transport address PDU is compatible with transport. */ virtual PBoolean IsCompatibleTransport( const H225_TransportAddress & pdu ) const; /**Set up a transport address PDU for RAS channel. */ virtual void SetUpTransportPDU( H225_TransportAddress & pdu, PBoolean localTsap, H323Connection * connection = NULL ) const; enum { UseLocalTSAP = 0x10001, UseRemoteTSAP }; /**Set up a transport address PDU for logical channel. If tsap is UseLocalTSAP or UseRemoteTSAP then the local or remote port of the transport is used, otherwise the explicit port number is used. */ virtual void SetUpTransportPDU( H245_TransportAddress & pdu, unsigned tsap ) const; /// Promiscious modes for transport enum PromisciousModes { AcceptFromRemoteOnly, AcceptFromAnyAutoSet, AcceptFromAny, AcceptFromLastReceivedOnly, NumPromisciousModes }; /**Set read to promiscuous mode. Normally only reads from the specifed remote address are accepted. This flag allows packets to be accepted from any remote, provided the underlying protocol can do so. For example TCP will do nothing. The Read() call may optionally set the remote address automatically to whatever the sender host of the last received message was. Default behaviour does nothing. */ virtual void SetPromiscuous( PromisciousModes promiscuous ); /**Get the transport address of the last received PDU. Default behaviour returns GetRemoteAddress(). */ virtual H323TransportAddress GetLastReceivedAddress() const; /**Read a protocol data unit from the transport. This will read using the transports mechanism for PDU boundaries, for example UDP is a single Read() call, while for TCP there is a TPKT header that indicates the size of the PDU. */ virtual PBoolean ReadPDU( PBYTEArray & pdu ///< PDU read from transport ) = 0; /**Extract a protocol data unit from the transport This is used by the aggregator to deblock the incoming data stream into valid PDUs. */ virtual PBoolean ExtractPDU( const PBYTEArray & pdu, PINDEX & len ) = 0; /**Write a protocol data unit from the transport. This will write using the transports mechanism for PDU boundaries, for example UDP is a single Write() call, while for TCP there is a TPKT header that indicates the size of the PDU. */ virtual PBoolean WritePDU( const PBYTEArray & pdu ///< PDU to write ) = 0; //@} /**@name Signalling Channel */ //@{ /** Handle the PDU Reading for the first connection object */ PBoolean HandleSignallingSocket(H323SignalPDU & pdu); /**Wait for first PDU and find/create connection object. If returns FALSE, then the transport is deleted by the calling thread. */ PBoolean HandleFirstSignallingChannelPDU(PThread * thread); //@} /**@name Control Channel */ //@{ /**Begin the opening of a control channel. This sets up the channel so that the remote endpoint can connect back to this endpoint. This would be called on the signalling channel instance of a H323Transport. */ virtual H323Transport * CreateControlChannel( H323Connection & connection ); /**Finish the opening of a control channel. This waits for the connect backfrom the remote endpoint, completing the control channel open sequence. */ virtual PBoolean AcceptControlChannel( H323Connection & connection ); /**Connect the control channel. */ virtual void StartControlChannel( H323Connection & connection ); //@} /**@name RAS Channel */ //@{ /**Discover a Gatekeeper on the network. This locates a gatekeeper on the network and associates this transport object with packet exchange with that gatekeeper. */ virtual PBoolean DiscoverGatekeeper( H323Gatekeeper & gk, ///< Gatekeeper to set on discovery. H323RasPDU & pdu, ///< GatekeeperRequest PDU const H323TransportAddress & address ///< Address of gatekeeper (if present) ); //@} /**@name Member variable access */ //@{ /**Get the associated endpoint to this transport. */ H323EndPoint & GetEndPoint() const { return endpoint; } /**Attach a thread to the transport. */ void AttachThread( PThread * thread ); /**Wait for associated thread to terminate. */ void CleanUpOnTermination(); //@} protected: H323EndPoint & endpoint; /// Endpoint that owns the listener. PThread * thread; /// Thread handling the transport PBoolean canGetInterface; }; /////////////////////////////////////////////////////////////////////////////// // Transport classes for IP /**This class represents a particular H323 transport using IP. It is used by the TCP and UDP transports. */ class H323TransportIP : public H323Transport { PCLASSINFO(H323TransportIP, H323Transport); public: /**Create a new transport channel. */ H323TransportIP( H323EndPoint & endpoint, ///< H323 End Point object PIPSocket::Address binding, ///< Local interface to use WORD remPort ///< Remote port to use ); /**Get the transport dependent name of the local endpoint. */ virtual H323TransportAddress GetLocalAddress() const; /**Get the transport dependent name of the remote endpoint. */ virtual H323TransportAddress GetRemoteAddress() const; /**Check that the transport address PDU is compatible with transport. */ virtual PBoolean IsCompatibleTransport( const H225_TransportAddress & pdu ) const; /**Set up a transport address PDU for RAS channel. */ virtual void SetUpTransportPDU( H225_TransportAddress & pdu, PBoolean localTsap, H323Connection * connection = NULL ) const; /**Set up a transport address PDU for logical channel. */ virtual void SetUpTransportPDU( H245_TransportAddress & pdu, unsigned tsap ) const; protected: PIPSocket::Address localAddress; // Address of the local interface WORD localPort; PIPSocket::Address remoteAddress; // Address of the remote host WORD remotePort; }; /////////////////////////////////////////////////////////////////////////////// // Transport classes for TCP/IP /**This class manages H323 connections using TCP/IP transport. */ class H323ListenerTCP : public H323Listener { PCLASSINFO(H323ListenerTCP, H323Listener); public: /**Create a new listener for the TCP/IP protocol. */ H323ListenerTCP( H323EndPoint & endpoint, ///< Endpoint instance for channel PIPSocket::Address binding, ///< Local interface to listen on WORD port, ///< TCP port to listen for connections PBoolean exclusive = FALSE ///< Fail if listener port in use ); /** Destroy the listener thread. */ ~H323ListenerTCP(); // Overrides from H323Listener /** Open the listener. */ virtual PBoolean Open(); /**Stop the listener thread and no longer accept incoming connections. */ virtual PBoolean Close(); /**Accept a new incoming transport. */ virtual H323Transport * Accept( const PTimeInterval & timeout ///< Time to wait for incoming connection ); /**Get the local transport address on which this listener may be accessed. */ virtual H323TransportAddress GetTransportAddress() const; /**Set up a transport address PDU for bidirectional logical channels. */ virtual PBoolean SetUpTransportPDU( H245_TransportAddress & pdu, ///< Transport addresses listening on const H323Transport & associatedTransport ///< Associated transport for precendence and translation ); WORD GetListenerPort() const { return listener.GetPort(); } protected: /**Handle incoming H.323 connections and dispatch them in new threads based on the H323Transport class. This is defined in the descendent class that knows what the low level transport is, eg H323ListenerIP for the TCP/IP protocol. Note this function does not return until the Close() function is called or there is some other error. */ virtual void Main(); PTCPSocket listener; PIPSocket::Address localAddress; PBoolean exclusiveListener; }; /**This class represents a particular H323 transport using TCP/IP. */ class H323TransportTCP : public H323TransportIP { PCLASSINFO(H323TransportTCP, H323TransportIP); public: /**Create a new transport channel. */ H323TransportTCP( H323EndPoint & endpoint, ///< H323 End Point object PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(), ///< Local interface to use PBoolean listen = FALSE ///< Flag for need to wait for remote to connect ); /**Destroy transport channel. */ ~H323TransportTCP(); /**Set default remote address to connect to. Note that this does not necessarily initiate a transport level connection, but only indicates where to connect to. The actual connection is made by the Connect() function. */ virtual PBoolean SetRemoteAddress( const H323TransportAddress & address ); /**Connect to the remote party. */ virtual PBoolean Connect(); /**Close the channel. */ virtual PBoolean Close(); /**Read a protocol data unit from the transport. This will read using the transports mechanism for PDU boundaries, for example UDP is a single Read() call, while for TCP there is a TPKT header that indicates the size of the PDU. */ PBoolean ReadPDU( PBYTEArray & pdu ///< PDU read from transport ); /**Extract a protocol data unit from the transport */ PBoolean ExtractPDU( const PBYTEArray & pdu, PINDEX & len ); /**Write a protocol data unit from the transport. This will write using the transports mechanism for PDU boundaries, for example UDP is a single Write() call, while for TCP there is a TPKT header that indicates the size of the PDU. */ PBoolean WritePDU( const PBYTEArray & pdu ///< PDU to write ); /**Begin the opening of a control channel. This sets up the channel so that the remote endpoint can connect back to this endpoint. */ virtual H323Transport * CreateControlChannel( H323Connection & connection ); /**Finish the opening of a control channel. This waits for the connect backfrom the remote endpoint, completing the control channel open sequence. */ virtual PBoolean AcceptControlChannel( H323Connection & connection ); /**Indicate we are waiting from remote to connect back to us. */ virtual PBoolean IsListening() const; protected: /**This callback is executed when the Open() function is called with open channels. It may be used by descendent channels to do any handshaking required by the protocol that channel embodies. The default behaviour is to simply return TRUE. @return Returns TRUE if the protocol handshaking is successful. */ virtual PBoolean OnOpen(); PTCPSocket * h245listener; }; /////////////////////////////////////////////////////////////////////////////// // Transport classes for UDP/IP /**This class represents a particular H323 transport using UDP/IP. */ class H323TransportUDP : public H323TransportIP { PCLASSINFO(H323TransportUDP, H323TransportIP); public: /**Create a new transport channel. */ H323TransportUDP( H323EndPoint & endpoint, ///< H323 End Point object PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(), ///< Local interface to listen on WORD localPort = 0, ///< Local port to listen on WORD remotePort = 0 ///< Remote port to connect on ); ~H323TransportUDP(); /**Set default remote address to connect to. Note that this does not necessarily initiate a transport level connection, but only indicates where to connect to. The actual connection is made by the Connect() function. */ virtual PBoolean SetRemoteAddress( const H323TransportAddress & address ); /**Connect to the remote party. */ virtual PBoolean Connect(); /**Set read to promiscuous mode. Normally only reads from the specifed remote address are accepted. This flag allows packets to be accepted from any remote, provided the underlying protocol can do so. The Read() call may optionally set the remote address automatically to whatever the sender host of the last received message was. Default behaviour sets the internal flag, so that Read() operates as described. */ virtual void SetPromiscuous( PromisciousModes promiscuous ); /**Get the transport address of the last received PDU. Default behaviour returns the lastReceivedAddress member variable. */ virtual H323TransportAddress GetLastReceivedAddress() const; /**Read a protocol data unit from the transport. This will read using the transports mechanism for PDU boundaries, for example UDP is a single Read() call, while for TCP there is a TPKT header that indicates the size of the PDU. */ virtual PBoolean ReadPDU( PBYTEArray & pdu ///< PDU read from transport ); /**Extract a protocol data unit from the transport */ PBoolean ExtractPDU( const PBYTEArray & pdu, PINDEX & len ); /**Write a protocol data unit from the transport. This will write using the transports mechanism for PDU boundaries, for example UDP is a single Write() call, while for TCP there is a TPKT header that indicates the size of the PDU. */ virtual PBoolean WritePDU( const PBYTEArray & pdu ///< PDU to write ); /**Discover a Gatekeeper on the local network. This locates a gatekeeper on the network and associates this transport object with packet exchange with that gatekeeper. This broadcasts a UDP packet on the local network to find the gatekeeper's IP address. */ virtual PBoolean DiscoverGatekeeper( H323Gatekeeper & gk, ///< Gatekeeper to set on discovery. H323RasPDU & pdu, ///< GatekeeperRequest PDU const H323TransportAddress & address ///< Address of gatekeeper (if present) ); /**Get the transport address of the local endpoint. */ virtual H323TransportAddress GetLocalAddress() const; protected: PromisciousModes promiscuousReads; H323TransportAddress lastReceivedAddress; PIPSocket::Address lastReceivedInterface; WORD interfacePort; }; #endif // __TRANSPORTS_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/h281handler.h0000644000175000017500000001557311513321750014734 0ustar markmark/* * h281handler.h * * H.281 protocol handler implementation for the OpenH323 Project. * * Copyright (c) 2006 Network for Educational Technology, ETH Zurich. * Written by Hannes Friederich. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * Contributor(s): ______________________________________. * * $Log: h281handler.h,v $ * Revision 1.3 2011/01/12 12:51:52 shorne * H.224 bi-directional support added * * Revision 1.2 2008/05/23 11:19:31 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:50:49 shorne * First commit of h323plus * * Revision 1.1 2006/06/22 11:07:22 shorne * Backport of FECC (H.224) from Opal * * Revision 1.2 2006/04/23 18:52:19 dsandras * Removed warnings when compiling with gcc on Linux. * * Revision 1.1 2006/04/20 16:48:17 hfriederich * Initial version of H.224/H.281 implementation. * */ #ifndef __OPAL_H281HANDLER_H #define __OPAL_H281HANDLER_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include #include #ifdef _MSC_VER #pragma warning(disable : 4244) #endif class OpalH224Handler; /** This class implements a storage for which cameras are available at both the local or remote side */ class H281VideoSource : public PObject { PCLASSINFO(H281VideoSource, PObject); public: H281VideoSource(); ~H281VideoSource(); PBoolean IsEnabled() const { return isEnabled; } void SetEnabled(PBoolean flag) { isEnabled = flag; } BYTE GetVideoSourceNumber() const { return (firstOctet >> 4) & 0x0f; } void SetVideoSourceNumber(BYTE number); PBoolean CanMotionVideo() const { return (firstOctet >> 2) & 0x01; } void SetCanMotionVideo(PBoolean flag); PBoolean CanNormalResolutionStillImage() const { return (firstOctet >> 1) & 0x01; } void SetCanNormalResolutionStillImage(PBoolean flag); PBoolean CanDoubleResolutionStillImage() const { return (firstOctet & 0x01); } void SetCanDoubleResolutionStillImage(PBoolean flag); PBoolean CanPan() const { return (secondOctet >> 7) & 0x01; } void SetCanPan(PBoolean flag); PBoolean CanTilt() const { return (secondOctet >> 6) & 0x01; } void SetCanTilt(PBoolean flag); PBoolean CanZoom() const { return (secondOctet >> 5) & 0x01; } void SetCanZoom(PBoolean flag); PBoolean CanFocus() const { return (secondOctet >> 4) & 0x01; } void SetCanFocus(PBoolean flag); void Encode(BYTE *data) const; PBoolean Decode(const BYTE *data); protected: PBoolean isEnabled; BYTE firstOctet; BYTE secondOctet; }; /** This class implements a defalt H.281 handler */ class OpalH281Handler : public PObject { PCLASSINFO(OpalH281Handler, PObject); public: OpalH281Handler(OpalH224Handler & h224Handler); ~OpalH281Handler(); enum VideoSource { CurrentVideoSource = 0x00, MainCamera = 0x01, AuxiliaryCamera = 0x02, DocumentCamera = 0x03, AuxiliaryDocumentCamera = 0x04, VideoPlaybackSource = 0x05 }; PBoolean GetRemoteHasH281() const { return remoteHasH281; } void SetRemoteHasH281(PBoolean flag) { remoteHasH281 = flag; } BYTE GetLocalNumberOfPresets() const { return localNumberOfPresets; } void SetLocalNumberOfPresets(BYTE presets) { localNumberOfPresets = presets; } BYTE GetRemoteNumberOfPresets() const { return remoteNumberOfPresets; } H281VideoSource & GetLocalVideoSource(VideoSource source); H281VideoSource & GetRemoteVideoSource(VideoSource source); /** Causes the H.281 handler to start the desired action The action will continue until StopAction() is called. */ void StartAction(H281_Frame::PanDirection panDirection, H281_Frame::TiltDirection tiltDirection, H281_Frame::ZoomDirection zoomDireciton, H281_Frame::FocusDirection focusDirection); /** Stops any action currently ongoing */ void StopAction(); /** Tells the remote side to select the desired video source using the mode specified. Does nothing if either video source or mode aren't available */ void SelectVideoSource(BYTE videoSourceNumber, H281_Frame::VideoMode videoMode); /** Tells the remote side to store the current camera settings as a preset with the preset number given */ void StoreAsPreset(BYTE presetNumber); /** Tells the remote side to activate the given preset */ void ActivatePreset(BYTE presetNumber); /** Causes the H.281 handler to send its capabilities. Capabilities include the number of available cameras, (default one) the camera abilities (default none) and the number of presets that can be stored (default zero) */ void SendExtraCapabilities() const; /** Processing incoming frames */ void OnReceivedExtraCapabilities(const BYTE *capabilities, PINDEX size); void OnReceivedMessage(const H281_Frame & message); /* * methods that subclasses can override. * The default handler does not implement FECC on the local side. * Thus, the default behaviour is to do nothing. */ /** Called each time a remote endpoint sends its capability list */ virtual void OnRemoteCapabilitiesUpdated(); /** Indicates to start the action specified */ virtual void OnStartAction(H281_Frame::PanDirection panDirection, H281_Frame::TiltDirection tiltDirection, H281_Frame::ZoomDirection zoomDirection, H281_Frame::FocusDirection focusDirection); /** Indicates to stop the action stared with OnStartAction() */ virtual void OnStopAction(); /** Indicates to select the desired video source */ virtual void OnSelectVideoSource(BYTE videoSourceNumber, H281_Frame::VideoMode videoMode); /** Indicates to store the current camera settings as a preset */ virtual void OnStoreAsPreset(BYTE presetNumber); /** Indicates to activate the given preset number */ virtual void OnActivatePreset(BYTE presetNumber); protected: PDECLARE_NOTIFIER(PTimer, OpalH281Handler, ContinueAction); PDECLARE_NOTIFIER(PTimer, OpalH281Handler, StopActionLocally); OpalH224Handler & h224Handler; PBoolean remoteHasH281; BYTE localNumberOfPresets; BYTE remoteNumberOfPresets; H281VideoSource localVideoSources[6]; H281VideoSource remoteVideoSources[6]; H281_Frame transmitFrame; PTimer transmitTimer; H281_Frame::PanDirection requestedPanDirection; H281_Frame::TiltDirection requestedTiltDirection; H281_Frame::ZoomDirection requestedZoomDirection; H281_Frame::FocusDirection requestedFocusDirection; PTimer receiveTimer; PBoolean shutDown; }; #endif // __OPAL_H281HANDLER_H h323plus/include/q922.h0000644000175000017500000000751311015524135013403 0ustar markmark/* * q922.h * * Q.922 PDU implementation for the OpenH323 Project. * * Copyright (c) 2006 Network for Educational Technology, ETH Zurich. * Written by Hannes Friederich. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * Contributor(s): ______________________________________. * * $Log: q922.h,v $ * Revision 1.2 2008/05/23 11:19:57 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:50:50 shorne * First commit of h323plus * * Revision 1.1 2006/06/22 11:07:22 shorne * Backport of FECC (H.224) from Opal * * Revision 1.2 2006/04/23 18:52:19 dsandras * Removed warnings when compiling with gcc on Linux. * * Revision 1.1 2006/04/20 16:48:17 hfriederich * Initial version of H.224/H.281 implementation. * */ #ifndef __OPAL_Q922_H #define __OPAL_Q922_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #define Q922_HEADER_SIZE 3 class Q922_Frame : public PBYTEArray { PCLASSINFO(Q922_Frame, PBYTEArray); public: Q922_Frame(PINDEX informationFieldSize = 260); ~Q922_Frame(); BYTE GetHighOrderAddressOctet() const { return theArray[0]; } BYTE GetLowOrderAddressOctet() const { return theArray[1]; } void SetHighOrderAddressOctet(BYTE octet) { theArray[0] = octet; } void SetLowOrderAddressOctet(BYTE octet) { theArray[1] = octet; } BYTE GetControlFieldOctet() const { return theArray[2]; } void SetControlFieldOctet(BYTE octet) { theArray[2] = octet; } BYTE *GetInformationFieldPtr() const { return (BYTE *)(theArray + Q922_HEADER_SIZE); } PINDEX GetInformationFieldSize() const { return informationFieldSize; } void SetInformationFieldSize(PINDEX size); /** Decodes a Q.922 frame from a given buffer, returns the success of this operation */ PBoolean Decode(const BYTE *data, PINDEX size); /** Returns an estimate of the encoded size. The receiver will use at most the size when encoding. Returns zero if encoding will fail. */ PINDEX GetEncodedSize() const; /** Encodes this Q.922 frame into the given buffer. On return, size contains the number of octets occupied in the buffer. */ PBoolean Encode(BYTE *buffer, PINDEX & size) const; /** Encodes this Q.922 frame into the given buffer. On return, size contains the number of octets occupied in the buffer. Use bitPosition to determine at which bit the Q.922 FLAG sequence should begin. On return, bitPosition contains the bit at which the encoded stream ends. bitPosition shall be in the range 0-7, whereas 7 means that the FLAG sequence is encoded at byte boundaries */ PBoolean Encode(BYTE *buffer, PINDEX & size, BYTE & bitPosition) const; protected: PINDEX informationFieldSize; private: inline PBoolean FindFlagEnd(const BYTE *buffer, PINDEX bufferSize, PINDEX & octetIndex, BYTE & bitIndex); inline BYTE DecodeByte(const BYTE *buffer, BYTE *destination, PINDEX & octetIndex, BYTE & bitIndex, BYTE & onesCounter); inline BYTE DecodeBit(const BYTE *buffer, PINDEX & octetIndex, BYTE & bitIndex); inline void EncodeOctet(BYTE octet, BYTE *buffer, PINDEX & octetIndex, BYTE & bitIndex, BYTE & onesCounter) const; inline void EncodeOctetNoEscape(BYTE octet, BYTE *buffer, PINDEX & octetIndex, BYTE & bitIndex) const; inline void EncodeBit(BYTE bit, BYTE *buffer, PINDEX & octetIndex, BYTE & bitIndex) const; inline WORD CalculateFCS(const BYTE*data, PINDEX length) const; }; #endif // __OPAL_Q922_H h323plus/include/h323annexg.h0000644000175000017500000001464211015524104014563 0ustar markmark/* * h323annexg.h * * Implementation of H.323 Annex G using H.501 * * Open H323 Library * * Copyright (c) 2003 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. */ #ifndef __OPAL_H323ANNEXG_H #define __OPAL_H323ANNEXG_H #ifdef P_USE_PRAGMA #pragma interface #endif #include "h323trans.h" #include "h501pdu.h" class PASN_Sequence; class PASN_Choice; class H323EndPoint; /////////////////////////////////////////////////////////////////////////////// /**This class embodies the H.323 Annex G using the H.501 protocol */ class H323_AnnexG : public H323Transactor { PCLASSINFO(H323_AnnexG, H323Transactor); public: /**@name Construction */ //@{ enum { DefaultUdpPort = 2099, DefaultTcpPort = 2099 }; /**Create a new protocol handler. */ H323_AnnexG( H323EndPoint & endpoint, ///< Endpoint gatekeeper is associated with. H323Transport * transport ///< Transport over which gatekeepers communicates. ); H323_AnnexG( H323EndPoint & endpoint, ///< Endpoint gatekeeper is associated with. const H323TransportAddress & addr ///< Transport over which gatekeepers communicates. ); /**Destroy protocol handler. */ ~H323_AnnexG(); //@} /**@name Overrides from PObject */ //@{ /**Print the name of the gatekeeper. */ void PrintOn( ostream & strm ///< Stream to print to. ) const; //@} /**@name Overrides from H323Transactor */ //@{ /**Create the transaction PDU for reading. */ virtual H323TransactionPDU * CreateTransactionPDU() const; /**Handle and dispatch a transaction PDU */ virtual PBoolean HandleTransaction( const PASN_Object & rawPDU ); /**Allow for modifications to PDU on send. */ virtual void OnSendingPDU( PASN_Object & rawPDU ); //@} /**@name Protocol callbacks */ //@{ virtual PBoolean OnReceiveServiceRequest (const H501PDU & pdu, const H501_ServiceRequest & pduBody); virtual PBoolean OnReceiveServiceConfirmation (const H501PDU & pdu, const H501_ServiceConfirmation & pduBody); virtual PBoolean OnReceiveServiceRejection (const H501PDU & pdu, const H501_ServiceRejection & pduBody); virtual PBoolean OnReceiveServiceRelease (const H501PDU & pdu, const H501_ServiceRelease & pduBody); virtual PBoolean OnReceiveDescriptorRequest (const H501PDU & pdu, const H501_DescriptorRequest & pduBody); virtual PBoolean OnReceiveDescriptorConfirmation (const H501PDU & pdu, const H501_DescriptorConfirmation & pduBody); virtual PBoolean OnReceiveDescriptorRejection (const H501PDU & pdu, const H501_DescriptorRejection & pduBody); virtual PBoolean OnReceiveDescriptorIDRequest (const H501PDU & pdu, const H501_DescriptorIDRequest & pduBody); virtual PBoolean OnReceiveDescriptorIDConfirmation (const H501PDU & pdu, const H501_DescriptorIDConfirmation & pduBody); virtual PBoolean OnReceiveDescriptorIDRejection (const H501PDU & pdu, const H501_DescriptorIDRejection & pduBody); virtual PBoolean OnReceiveDescriptorUpdate (const H501PDU & pdu, const H501_DescriptorUpdate & pduBody); virtual PBoolean OnReceiveDescriptorUpdateACK (const H501PDU & pdu, const H501_DescriptorUpdateAck & pduBody); virtual PBoolean OnReceiveAccessRequest (const H501PDU & pdu, const H501_AccessRequest & pduBody); virtual PBoolean OnReceiveAccessConfirmation (const H501PDU & pdu, const H501_AccessConfirmation & pduBody); virtual PBoolean OnReceiveAccessRejection (const H501PDU & pdu, const H501_AccessRejection & pduBody); virtual PBoolean OnReceiveRequestInProgress (const H501PDU & pdu, const H501_RequestInProgress & pduBody); virtual PBoolean OnReceiveNonStandardRequest (const H501PDU & pdu, const H501_NonStandardRequest & pduBody); virtual PBoolean OnReceiveNonStandardConfirmation (const H501PDU & pdu, const H501_NonStandardConfirmation & pduBody); virtual PBoolean OnReceiveNonStandardRejection (const H501PDU & pdu, const H501_NonStandardRejection & pduBody); virtual PBoolean OnReceiveUnknownMessageResponse (const H501PDU & pdu, const H501_UnknownMessageResponse & pduBody); virtual PBoolean OnReceiveUsageRequest (const H501PDU & pdu, const H501_UsageRequest & pduBody); virtual PBoolean OnReceiveUsageConfirmation (const H501PDU & pdu, const H501_UsageConfirmation & pduBody); virtual PBoolean OnReceiveUsageIndicationConfirmation (const H501PDU & pdu, const H501_UsageIndicationConfirmation & pduBody); virtual PBoolean OnReceiveUsageIndicationRejection (const H501PDU & pdu, const H501_UsageIndicationRejection & pduBody); virtual PBoolean OnReceiveUsageRejection (const H501PDU & pdu, const H501_UsageRejection & pduBody); virtual PBoolean OnReceiveValidationRequest (const H501PDU & pdu, const H501_ValidationRequest & pduBody); virtual PBoolean OnReceiveValidationConfirmation (const H501PDU & pdu, const H501_ValidationConfirmation & pduBody); virtual PBoolean OnReceiveValidationRejection (const H501PDU & pdu, const H501_ValidationRejection & pduBody); virtual PBoolean OnReceiveAuthenticationRequest (const H501PDU & pdu, const H501_AuthenticationRequest & pduBody); virtual PBoolean OnReceiveAuthenticationConfirmation (const H501PDU & pdu, const H501_AuthenticationConfirmation & pduBody); virtual PBoolean OnReceiveAuthenticationRejection (const H501PDU & pdu, const H501_AuthenticationRejection & pduBody); virtual PBoolean OnReceiveUnknown(const H501PDU &); protected: void Construct(); }; #endif // __OPAL_H323ANNEXG_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/h450/0000755000175000017500000000000011623226321013210 5ustar markmarkh323plus/include/h450/h4502.h0000644000175000017500000004153211015524210014121 0ustar markmark// // h4502.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H4502 #ifndef __H4502_H #define __H4502_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "h4501.h" #include "h4501.h" #include "h4501.h" #include "h225.h" #include "h4501.h" // // DummyArg // class H4502_ExtensionSeq; class H225_NonStandardParameter; class H4502_DummyArg : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4502_DummyArg, PASN_Choice); #endif public: H4502_DummyArg(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_extensionSeq, e_nonStandardData }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4502_ExtensionSeq &() const; #else operator H4502_ExtensionSeq &(); operator const H4502_ExtensionSeq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardParameter &() const; #else operator H225_NonStandardParameter &(); operator const H225_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // DummyRes // class H4502_ExtensionSeq; class H225_NonStandardParameter; class H4502_DummyRes : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4502_DummyRes, PASN_Choice); #endif public: H4502_DummyRes(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_extensionSeq, e_nonStandardData }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4502_ExtensionSeq &() const; #else operator H4502_ExtensionSeq &(); operator const H4502_ExtensionSeq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardParameter &() const; #else operator H225_NonStandardParameter &(); operator const H225_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // EndDesignation // class H4502_EndDesignation : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4502_EndDesignation, PASN_Enumeration); #endif public: H4502_EndDesignation(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_primaryEnd, e_secondaryEnd }; H4502_EndDesignation & operator=(unsigned v); PObject * Clone() const; }; // // CallStatus // class H4502_CallStatus : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4502_CallStatus, PASN_Enumeration); #endif public: H4502_CallStatus(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_answered, e_alerting }; H4502_CallStatus & operator=(unsigned v); PObject * Clone() const; }; // // CallIdentity // class H4502_CallIdentity : public PASN_NumericString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4502_CallIdentity, PASN_NumericString); #endif public: H4502_CallIdentity(unsigned tag = UniversalNumericString, TagClass tagClass = UniversalTagClass); H4502_CallIdentity & operator=(const char * v); H4502_CallIdentity & operator=(const PString & v); PObject * Clone() const; }; // // ExtensionSeq // class H4501_Extension; class H4502_ExtensionSeq : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4502_ExtensionSeq, PASN_Array); #endif public: H4502_ExtensionSeq(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H4501_Extension & operator[](PINDEX i) const; PObject * Clone() const; }; // // CallTransferOperation // class H4502_CallTransferOperation : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4502_CallTransferOperation, PASN_Enumeration); #endif public: H4502_CallTransferOperation(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_callTransferIdentify = 7, e_callTransferAbandon, e_callTransferInitiate, e_callTransferSetup, e_callTransferUpdate = 13, e_subaddressTransfer, e_callTransferComplete = 12, e_callTransferActive = 11 }; H4502_CallTransferOperation & operator=(unsigned v); PObject * Clone() const; }; // // CallTransferErrors // class H4502_CallTransferErrors : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4502_CallTransferErrors, PASN_Enumeration); #endif public: H4502_CallTransferErrors(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_unspecified = 1008, e_invalidReroutingNumber = 1004, e_unrecognizedCallIdentity, e_establishmentFailure }; H4502_CallTransferErrors & operator=(unsigned v); PObject * Clone() const; }; // // CTInitiateArg_argumentExtension // class H4502_ExtensionSeq; class H225_NonStandardParameter; class H4502_CTInitiateArg_argumentExtension : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4502_CTInitiateArg_argumentExtension, PASN_Choice); #endif public: H4502_CTInitiateArg_argumentExtension(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_extensionSeq, e_nonStandardData }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4502_ExtensionSeq &() const; #else operator H4502_ExtensionSeq &(); operator const H4502_ExtensionSeq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardParameter &() const; #else operator H225_NonStandardParameter &(); operator const H225_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // CTSetupArg_argumentExtension // class H4502_ExtensionSeq; class H225_NonStandardParameter; class H4502_CTSetupArg_argumentExtension : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4502_CTSetupArg_argumentExtension, PASN_Choice); #endif public: H4502_CTSetupArg_argumentExtension(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_extensionSeq, e_nonStandardData }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4502_ExtensionSeq &() const; #else operator H4502_ExtensionSeq &(); operator const H4502_ExtensionSeq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardParameter &() const; #else operator H225_NonStandardParameter &(); operator const H225_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // CTIdentifyRes_resultExtension // class H4502_ExtensionSeq; class H225_NonStandardParameter; class H4502_CTIdentifyRes_resultExtension : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4502_CTIdentifyRes_resultExtension, PASN_Choice); #endif public: H4502_CTIdentifyRes_resultExtension(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_extensionSeq, e_nonStandardData }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4502_ExtensionSeq &() const; #else operator H4502_ExtensionSeq &(); operator const H4502_ExtensionSeq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardParameter &() const; #else operator H225_NonStandardParameter &(); operator const H225_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // CTUpdateArg_argumentExtension // class H4502_ExtensionSeq; class H225_NonStandardParameter; class H4502_CTUpdateArg_argumentExtension : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4502_CTUpdateArg_argumentExtension, PASN_Choice); #endif public: H4502_CTUpdateArg_argumentExtension(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_extensionSeq, e_nonStandardData }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4502_ExtensionSeq &() const; #else operator H4502_ExtensionSeq &(); operator const H4502_ExtensionSeq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardParameter &() const; #else operator H225_NonStandardParameter &(); operator const H225_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // SubaddressTransferArg_argumentExtension // class H4502_ExtensionSeq; class H225_NonStandardParameter; class H4502_SubaddressTransferArg_argumentExtension : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4502_SubaddressTransferArg_argumentExtension, PASN_Choice); #endif public: H4502_SubaddressTransferArg_argumentExtension(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_extensionSeq, e_nonStandardData }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4502_ExtensionSeq &() const; #else operator H4502_ExtensionSeq &(); operator const H4502_ExtensionSeq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardParameter &() const; #else operator H225_NonStandardParameter &(); operator const H225_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // CTCompleteArg_argumentExtension // class H4502_ExtensionSeq; class H225_NonStandardParameter; class H4502_CTCompleteArg_argumentExtension : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4502_CTCompleteArg_argumentExtension, PASN_Choice); #endif public: H4502_CTCompleteArg_argumentExtension(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_extensionSeq, e_nonStandardData }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4502_ExtensionSeq &() const; #else operator H4502_ExtensionSeq &(); operator const H4502_ExtensionSeq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardParameter &() const; #else operator H225_NonStandardParameter &(); operator const H225_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // CTActiveArg_argumentExtension // class H4502_ExtensionSeq; class H225_NonStandardParameter; class H4502_CTActiveArg_argumentExtension : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4502_CTActiveArg_argumentExtension, PASN_Choice); #endif public: H4502_CTActiveArg_argumentExtension(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_extensionSeq, e_nonStandardData }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4502_ExtensionSeq &() const; #else operator H4502_ExtensionSeq &(); operator const H4502_ExtensionSeq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardParameter &() const; #else operator H225_NonStandardParameter &(); operator const H225_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // CTInitiateArg // class H4502_CTInitiateArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4502_CTInitiateArg, PASN_Sequence); #endif public: H4502_CTInitiateArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_argumentExtension }; H4502_CallIdentity m_callIdentity; H4501_EndpointAddress m_reroutingNumber; H4502_CTInitiateArg_argumentExtension m_argumentExtension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CTSetupArg // class H4502_CTSetupArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4502_CTSetupArg, PASN_Sequence); #endif public: H4502_CTSetupArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_transferringNumber, e_argumentExtension }; H4502_CallIdentity m_callIdentity; H4501_EndpointAddress m_transferringNumber; H4502_CTSetupArg_argumentExtension m_argumentExtension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CTIdentifyRes // class H4502_CTIdentifyRes : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4502_CTIdentifyRes, PASN_Sequence); #endif public: H4502_CTIdentifyRes(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_resultExtension }; H4502_CallIdentity m_callIdentity; H4501_EndpointAddress m_reroutingNumber; H4502_CTIdentifyRes_resultExtension m_resultExtension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CTUpdateArg // class H4502_CTUpdateArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4502_CTUpdateArg, PASN_Sequence); #endif public: H4502_CTUpdateArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_redirectionInfo, e_basicCallInfoElements, e_argumentExtension }; H4501_EndpointAddress m_redirectionNumber; PASN_BMPString m_redirectionInfo; H4501_H225InformationElement m_basicCallInfoElements; H4502_CTUpdateArg_argumentExtension m_argumentExtension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // SubaddressTransferArg // class H4502_SubaddressTransferArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4502_SubaddressTransferArg, PASN_Sequence); #endif public: H4502_SubaddressTransferArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_argumentExtension }; H4501_PartySubaddress m_redirectionSubaddress; H4502_SubaddressTransferArg_argumentExtension m_argumentExtension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CTCompleteArg // class H4502_CTCompleteArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4502_CTCompleteArg, PASN_Sequence); #endif public: H4502_CTCompleteArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_basicCallInfoElements, e_redirectionInfo, e_argumentExtension }; H4502_EndDesignation m_endDesignation; H4501_EndpointAddress m_redirectionNumber; H4501_H225InformationElement m_basicCallInfoElements; PASN_BMPString m_redirectionInfo; H4502_CallStatus m_callStatus; H4502_CTCompleteArg_argumentExtension m_argumentExtension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CTActiveArg // class H4502_CTActiveArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4502_CTActiveArg, PASN_Sequence); #endif public: H4502_CTActiveArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_basicCallInfoElements, e_connectedInfo, e_argumentExtension }; H4501_EndpointAddress m_connectedAddress; H4501_H225InformationElement m_basicCallInfoElements; PASN_BMPString m_connectedInfo; H4502_CTActiveArg_argumentExtension m_argumentExtension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H4502_H #endif // if ! H323_DISABLE_H4502 // End of h4502.h h323plus/include/h450/h4508.h0000644000175000017500000001104211015524216014126 0ustar markmark// // h4508.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H4508 #ifndef __H4508_H #define __H4508_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "h4501.h" #include "h4505.h" // // NameOperations // class H4508_NameOperations : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4508_NameOperations, PASN_Enumeration); #endif public: H4508_NameOperations(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_callingName, e_alertingName, e_connectedName, e_busyName }; H4508_NameOperations & operator=(unsigned v); PObject * Clone() const; }; // // Name // class H4508_NamePresentationAllowed; class H4508_NamePresentationRestricted; class H4508_Name : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4508_Name, PASN_Choice); #endif public: H4508_Name(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_namePresentationAllowed, e_namePresentationRestricted, e_nameNotAvailable }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4508_NamePresentationAllowed &() const; #else operator H4508_NamePresentationAllowed &(); operator const H4508_NamePresentationAllowed &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4508_NamePresentationRestricted &() const; #else operator H4508_NamePresentationRestricted &(); operator const H4508_NamePresentationRestricted &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // NamePresentationAllowed // class H4508_SimpleName; class H4508_ExtendedName; class H4508_NamePresentationAllowed : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4508_NamePresentationAllowed, PASN_Choice); #endif public: H4508_NamePresentationAllowed(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_simpleName, e_extendedName }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4508_SimpleName &() const; #else operator H4508_SimpleName &(); operator const H4508_SimpleName &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4508_ExtendedName &() const; #else operator H4508_ExtendedName &(); operator const H4508_ExtendedName &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // NamePresentationRestricted // class H4508_SimpleName; class H4508_ExtendedName; class H4508_NamePresentationRestricted : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4508_NamePresentationRestricted, PASN_Choice); #endif public: H4508_NamePresentationRestricted(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_simpleName, e_extendedName, e_restrictedNull }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4508_SimpleName &() const; #else operator H4508_SimpleName &(); operator const H4508_SimpleName &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4508_ExtendedName &() const; #else operator H4508_ExtendedName &(); operator const H4508_ExtendedName &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // SimpleName // class H4508_SimpleName : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4508_SimpleName, PASN_OctetString); #endif public: H4508_SimpleName(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H4508_SimpleName(const char * v); H4508_SimpleName(const PString & v); H4508_SimpleName(const PBYTEArray & v); H4508_SimpleName & operator=(const char * v); H4508_SimpleName & operator=(const PString & v); H4508_SimpleName & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // ExtendedName // class H4508_ExtendedName : public PASN_BMPString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4508_ExtendedName, PASN_BMPString); #endif public: H4508_ExtendedName(unsigned tag = UniversalBMPString, TagClass tagClass = UniversalTagClass); H4508_ExtendedName & operator=(const char * v); H4508_ExtendedName & operator=(const PString & v); H4508_ExtendedName & operator=(const PWCharArray & v); H4508_ExtendedName & operator=(const PASN_BMPString & v); PObject * Clone() const; }; #endif // __H4508_H #endif // if ! H323_DISABLE_H4508 // End of h4508.h h323plus/include/h450/h4507.h0000644000175000017500000002025611015524215014133 0ustar markmark// // h4507.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H4507 #ifndef __H4507_H #define __H4507_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "h4501.h" #include "h4501.h" #include "h4501.h" #include "h4504.h" // // H323-MWI-Operations // class H4507_H323_MWI_Operations : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4507_H323_MWI_Operations, PASN_Enumeration); #endif public: H4507_H323_MWI_Operations(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_mwiActivate = 80, e_mwiDeactivate, e_mwiInterrogate }; H4507_H323_MWI_Operations & operator=(unsigned v); PObject * Clone() const; }; // // DummyRes // class H4504_MixedExtension; class H4507_DummyRes : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4507_DummyRes, PASN_Array); #endif public: H4507_DummyRes(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H4504_MixedExtension & operator[](PINDEX i) const; PObject * Clone() const; }; // // MWIInterrogateRes // class H4507_MWIInterrogateResElt; class H4507_MWIInterrogateRes : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4507_MWIInterrogateRes, PASN_Array); #endif public: H4507_MWIInterrogateRes(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H4507_MWIInterrogateResElt & operator[](PINDEX i) const; PObject * Clone() const; }; // // MsgCentreId // class H4501_EndpointAddress; class H4507_MsgCentreId : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4507_MsgCentreId, PASN_Choice); #endif public: H4507_MsgCentreId(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_integer, e_partyNumber, e_numericString }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4501_EndpointAddress &() const; #else operator H4501_EndpointAddress &(); operator const H4501_EndpointAddress &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // NbOfMessages // class H4507_NbOfMessages : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4507_NbOfMessages, PASN_Integer); #endif public: H4507_NbOfMessages(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H4507_NbOfMessages & operator=(int v); H4507_NbOfMessages & operator=(unsigned v); PObject * Clone() const; }; // // TimeStamp // class H4507_TimeStamp : public PASN_GeneralisedTime { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4507_TimeStamp, PASN_GeneralisedTime); #endif public: H4507_TimeStamp(unsigned tag = UniversalGeneralisedTime, TagClass tagClass = UniversalTagClass); PObject * Clone() const; }; // // MessageWaitingIndicationErrors // class H4507_MessageWaitingIndicationErrors : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4507_MessageWaitingIndicationErrors, PASN_Enumeration); #endif public: H4507_MessageWaitingIndicationErrors(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_notActivated = 31, e_undefined = 2002, e_invalidMsgCentreId = 1018 }; H4507_MessageWaitingIndicationErrors & operator=(unsigned v); PObject * Clone() const; }; // // BasicService // class H4507_BasicService : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4507_BasicService, PASN_Enumeration); #endif public: H4507_BasicService(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_allServices, e_speech, e_unrestrictedDigitalInformation, e_audio3100Hz, e_telephony = 32, e_teletex, e_telefaxGroup4Class1, e_videotexSyntaxBased, e_videotelephony }; H4507_BasicService & operator=(unsigned v); PObject * Clone() const; }; // // ArrayOf_MixedExtension // class H4504_MixedExtension; class H4507_ArrayOf_MixedExtension : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4507_ArrayOf_MixedExtension, PASN_Array); #endif public: H4507_ArrayOf_MixedExtension(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H4504_MixedExtension & operator[](PINDEX i) const; PObject * Clone() const; }; // // MWIActivateArg // class H4507_MWIActivateArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4507_MWIActivateArg, PASN_Sequence); #endif public: H4507_MWIActivateArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_msgCentreId, e_nbOfMessages, e_originatingNr, e_timestamp, e_priority, e_extensionArg }; H4501_EndpointAddress m_servedUserNr; H4507_BasicService m_basicService; H4507_MsgCentreId m_msgCentreId; H4507_NbOfMessages m_nbOfMessages; H4501_EndpointAddress m_originatingNr; H4507_TimeStamp m_timestamp; PASN_Integer m_priority; H4507_ArrayOf_MixedExtension m_extensionArg; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MWIDeactivateArg // class H4507_MWIDeactivateArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4507_MWIDeactivateArg, PASN_Sequence); #endif public: H4507_MWIDeactivateArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_msgCentreId, e_callbackReq, e_extensionArg }; H4501_EndpointAddress m_servedUserNr; H4507_BasicService m_basicService; H4507_MsgCentreId m_msgCentreId; PASN_Boolean m_callbackReq; H4507_ArrayOf_MixedExtension m_extensionArg; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MWIInterrogateArg // class H4507_MWIInterrogateArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4507_MWIInterrogateArg, PASN_Sequence); #endif public: H4507_MWIInterrogateArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_msgCentreId, e_callbackReq, e_extensionArg }; H4501_EndpointAddress m_servedUserNr; H4507_BasicService m_basicService; H4507_MsgCentreId m_msgCentreId; PASN_Boolean m_callbackReq; H4507_ArrayOf_MixedExtension m_extensionArg; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MWIInterrogateResElt // class H4507_MWIInterrogateResElt : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4507_MWIInterrogateResElt, PASN_Sequence); #endif public: H4507_MWIInterrogateResElt(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_msgCentreId, e_nbOfMessages, e_originatingNr, e_timestamp, e_priority, e_extensionArg }; H4507_BasicService m_basicService; H4507_MsgCentreId m_msgCentreId; H4507_NbOfMessages m_nbOfMessages; H4501_EndpointAddress m_originatingNr; H4507_TimeStamp m_timestamp; PASN_Integer m_priority; H4507_ArrayOf_MixedExtension m_extensionArg; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H4507_H #endif // if ! H323_DISABLE_H4507 // End of h4507.h h323plus/include/h450/h4504.h0000644000175000017500000001503311015524212014122 0ustar markmark// // h4504.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H4504 #ifndef __H4504_H #define __H4504_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "h4501.h" #include "h4501.h" #include "h225.h" // // CallHoldOperation // class H4504_CallHoldOperation : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4504_CallHoldOperation, PASN_Enumeration); #endif public: H4504_CallHoldOperation(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_holdNotific = 101, e_retrieveNotific, e_remoteHold, e_remoteRetrieve }; H4504_CallHoldOperation & operator=(unsigned v); PObject * Clone() const; }; // // MixedExtension // class H4501_Extension; class H225_NonStandardParameter; class H4504_MixedExtension : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4504_MixedExtension, PASN_Choice); #endif public: H4504_MixedExtension(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_extension, e_nonStandardData }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4501_Extension &() const; #else operator H4501_Extension &(); operator const H4501_Extension &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardParameter &() const; #else operator H225_NonStandardParameter &(); operator const H225_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // Extension // class H4504_Extension : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4504_Extension, PASN_Sequence); #endif public: H4504_Extension(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_ObjectId m_extensionId; PASN_OctetString m_argument; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_MixedExtension // class H4504_MixedExtension; class H4504_ArrayOf_MixedExtension : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4504_ArrayOf_MixedExtension, PASN_Array); #endif public: H4504_ArrayOf_MixedExtension(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H4504_MixedExtension & operator[](PINDEX i) const; PObject * Clone() const; }; // // HoldNotificArg // class H4504_HoldNotificArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4504_HoldNotificArg, PASN_Sequence); #endif public: H4504_HoldNotificArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extensionArg }; H4504_ArrayOf_MixedExtension m_extensionArg; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RetrieveNotificArg // class H4504_RetrieveNotificArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4504_RetrieveNotificArg, PASN_Sequence); #endif public: H4504_RetrieveNotificArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extensionArg }; H4504_ArrayOf_MixedExtension m_extensionArg; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RemoteHoldArg // class H4504_RemoteHoldArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4504_RemoteHoldArg, PASN_Sequence); #endif public: H4504_RemoteHoldArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extensionArg }; H4504_ArrayOf_MixedExtension m_extensionArg; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RemoteHoldRes // class H4504_RemoteHoldRes : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4504_RemoteHoldRes, PASN_Sequence); #endif public: H4504_RemoteHoldRes(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extensionRes }; H4504_ArrayOf_MixedExtension m_extensionRes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RemoteRetrieveArg // class H4504_RemoteRetrieveArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4504_RemoteRetrieveArg, PASN_Sequence); #endif public: H4504_RemoteRetrieveArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extensionArg }; H4504_ArrayOf_MixedExtension m_extensionArg; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RemoteRetrieveRes // class H4504_RemoteRetrieveRes : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4504_RemoteRetrieveRes, PASN_Sequence); #endif public: H4504_RemoteRetrieveRes(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extensionRes }; H4504_ArrayOf_MixedExtension m_extensionRes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H4504_H #endif // if ! H323_DISABLE_H4504 // End of h4504.h h323plus/include/h450/h450pdu.h0000644000175000017500000006723011623226321014562 0ustar markmark/* * h450pdu.h * * H.450 Helper functions * * Open H323 Library * * Copyright (c) 2001 Norwood Systems Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $ Id $ * */ #ifndef __OPAL_H450PDU_H #define __OPAL_H450PDU_H #ifdef P_USE_PRAGMA #pragma interface #endif #include "x880.h" #include "ptlib_extras.h" class H323EndPoint; class H323Connection; class H323TransportAddress; class H323SignalPDU; class H4501_EndpointAddress; class H4501_InterpretationApdu; /////////////////////////////////////////////////////////////////////////////// /**PDU definition for H.450 services. */ class H450ServiceAPDU : public X880_ROS { public: X880_Invoke& BuildInvoke(int invokeId, int operation); X880_ReturnResult& BuildReturnResult(int invokeId); X880_ReturnError& BuildReturnError(int invokeId, int error); X880_Reject& BuildReject(int invokeId); void BuildCallTransferInitiate(int invokeId, const PString & callIdentity, const PString & alias, const H323TransportAddress & address); void BuildCallTransferIdentify(int invokeId); void BuildCallTransferAbandon(int invokeId); void BuildCallTransferSetup(int invokeId, const PString & callIdentity); void BuildCallWaiting(int invokeId, int numCallsWaiting); void BuildCallIntrusionForcedRelease(int invokeId, int CICL); X880_ReturnResult& BuildCallIntrusionForcedReleaseResult(int invokeId); void BuildCallIntrusionForcedReleaseError(); void BuildCallIntrusionGetCIPL(int invokeId); void BuildCallIntrusionImpending(int invokeId); void BuildCallIntrusionForceRelesed(int invokeId); void AttachSupplementaryServiceAPDU(H323SignalPDU & pdu); PBoolean WriteFacilityPDU( H323Connection & connection ); static void ParseEndpointAddress(H4501_EndpointAddress & address, PString & party); }; class H450xDispatcher; class H450xHandler : public PObject { PCLASSINFO(H450xHandler, PObject); public: H450xHandler( H323Connection & connection, H450xDispatcher & dispatcher ); virtual void AttachToSetup( H323SignalPDU & pdu ); virtual void AttachToAlerting( H323SignalPDU & pdu ); virtual void AttachToConnect( H323SignalPDU & pdu ); virtual void AttachToReleaseComplete( H323SignalPDU & pdu ); virtual PBoolean OnReceivedInvoke( int opcode, int invokeId, ///< InvokeId of operation (used in response) int linkedId, ///< InvokeId of associated operation (if any) PASN_OctetString * argument ///< Parameters for the initiate operation ) = 0; virtual PBoolean OnReceivedReturnResult( X880_ReturnResult & returnResult ); virtual PBoolean OnReceivedReturnError( int errorCode, X880_ReturnError & returnError ); virtual PBoolean OnReceivedReject( int problemType, int problemNumber ); /**Send a return error in response to an invoke operation. */ void SendReturnError(int returnError); void SendGeneralReject(int problem); void SendInvokeReject(int problem); void SendReturnResultReject(int problem); void SendReturnErrorReject(int problem); PBoolean DecodeArguments( PASN_OctetString * argString, PASN_Object & argObject, int absentErrorCode ); unsigned GetInvokeId() const { return currentInvokeId; } protected: H323EndPoint & endpoint; H323Connection & connection; H450xDispatcher & dispatcher; unsigned currentInvokeId; }; H323LIST(H450xHandlerList, H450xHandler); H323DICTIONARY(H450xHandlerDict, POrdinalKey, H450xHandler); class H450xDispatcher : public PObject { PCLASSINFO(H450xDispatcher, PObject); public: H450xDispatcher( H323Connection & connection ); /**Add a handler for the op code. */ void AddOpCode( unsigned opcode, H450xHandler * handler ); virtual void AttachToSetup( H323SignalPDU & pdu ); virtual void AttachToAlerting( H323SignalPDU & pdu ); virtual void AttachToConnect( H323SignalPDU & pdu ); virtual void AttachToReleaseComplete( H323SignalPDU & pdu ); /** Handle the H.450.x Supplementary Service PDU if present in the H225_H323_UU_PDU */ virtual PBoolean HandlePDU( const H323SignalPDU & pdu ); /**Handle an incoming X880 Invoke PDU. The default behaviour is to attempt to decode the invoke operation and call the corresponding OnReceived method on the EndPoint. */ virtual PBoolean OnReceivedInvoke(X880_Invoke& invoke, H4501_InterpretationApdu& interpretation); /**Handle an incoming X880 Return Result PDU. The default behaviour is to attempt to match the return result to a previous invoke operation and call the corresponding OnReceivedSuccess method on the EndPoint. */ virtual PBoolean OnReceivedReturnResult(X880_ReturnResult& returnResult); /**Handle an incoming X880 Return Error PDU. The default behaviour is to attempt to match the return error to a previous invoke operation and call the corresponding OnReceivedError method on the EndPoint. */ virtual PBoolean OnReceivedReturnError(X880_ReturnError& returnError); /**Handle an incoming X880 Reject PDU. The default behaviour is to attempt to match the reject to a previous invoke, return result or return error operation and call OnReceivedReject method on the EndPoint. */ virtual PBoolean OnReceivedReject(X880_Reject& reject); /**Send a return error in response to an invoke operation. */ void SendReturnError(int invokeId, int returnError); void SendGeneralReject(int invokeId, int problem); void SendInvokeReject(int invokeId, int problem); void SendReturnResultReject(int invokeId, int problem); void SendReturnErrorReject(int invokeId, int problem); /**Get the next available invoke Id for H450 operations */ unsigned GetNextInvokeId() const { return ++nextInvokeId; } protected: H323Connection & connection; H450xHandlerList handlers; H450xHandlerDict opcodeHandler; mutable unsigned nextInvokeId; ///< Next available invoke ID for H450 operations }; class H4502Handler : public H450xHandler { PCLASSINFO(H4502Handler, H450xHandler); public: H4502Handler( H323Connection & connection, H450xDispatcher & dispatcher ); virtual void AttachToSetup( H323SignalPDU & pdu ); virtual void AttachToAlerting( H323SignalPDU & pdu ); virtual void AttachToConnect( H323SignalPDU & pdu ); virtual void AttachToReleaseComplete( H323SignalPDU & pdu ); virtual PBoolean OnReceivedInvoke( int opcode, int invokeId, ///< InvokeId of operation (used in response) int linkedId, ///< InvokeId of associated operation (if any) PASN_OctetString * argument ///< Parameters for the initiate operation ); /**Handle an incoming Call Transfer Identify operation. */ virtual void OnReceivedCallTransferIdentify( int linkedId ///< InvokeId of associated operation (if any) ); /**Handle an incoming Call Transfer Abandon operation. */ virtual void OnReceivedCallTransferAbandon( int linkedId ///< InvokeId of associated operation (if any) ); /**Handle an incoming Call Transfer Initiate operation. */ virtual void OnReceivedCallTransferInitiate( int linkedId, ///< InvokeId of associated operation (if any) PASN_OctetString * argument ///< Parameters for the initiate operation ); /**Handle an incoming Call Transfer Setup operation. */ virtual void OnReceivedCallTransferSetup( int linkedId, ///< InvokeId of associated operation (if any) PASN_OctetString * argument ///< Parameters for the setup operation ); /**Handle an incoming Call Transfer Update operation. */ virtual void OnReceivedCallTransferUpdate( int linkedId, ///< InvokeId of associated operation (if any) PASN_OctetString * argument ///< Parameters for the update operation ); /**Handle an incoming Subaddress Transfer operation. */ virtual void OnReceivedSubaddressTransfer( int linkedId, ///< InvokeId of associated operation (if any) PASN_OctetString * argument ///< Parameters for the subaddress transfer operation ); /**Handle an incoming Call Transfer Complete operation. */ virtual void OnReceivedCallTransferComplete( int linkedId, ///< InvokeId of associated operation (if any) PASN_OctetString * argument ///< Parameters for the complete operation ); /**Handle an incoming Call Transfer Active operation. */ virtual void OnReceivedCallTransferActive( int linkedId, ///< InvokeId of associated operation (if any) PASN_OctetString * argument ///< Parameters for the active operation ); virtual PBoolean OnReceivedReturnResult( X880_ReturnResult & returnResult ); /**Handle the reception of a callTransferInitiate returnResult when we are in call transfer state e_ctAwaitInitiateResponse. Note this is an internal function and it is not expected an application would use it. */ void OnReceivedInitiateReturnResult(); /**Handle the reception of a callTransferSetup returnResult when we are in call transfer state e_ctAwaitSetupResponse. This funtion exists to handle the case when the transferred-to endpoint does not support H.450.2. Note this is an internal function and it is not expected an application would use it. */ void OnReceivedSetupReturnResult(); /**Handle the reception of a callTransferIdentify returnResult when we are in call transfer state e_ctAwaitIdentifyResponse. Note this is an internal function and it is not expected an application would use it. */ void OnReceivedIdentifyReturnResult(X880_ReturnResult &returnResult); virtual PBoolean OnReceivedReturnError( int errorCode, X880_ReturnError & returnError ); /**Handle the reception of a callTransferInitiate returnError or expiry of Call Transfer Timer CT-T3 when we are in call transfer state e_ctAwaitInitiateResponse. Note this is an internal function and it is not expected an application would use it. */ void OnReceivedInitiateReturnError( const bool timerExpiry = false ///< Flag to indicate expiry ); /**Handle the reception of a callTransferSetup returnError or expiry of Call Transfer Timer CT-T4 when we are in call transfer state e_ctAwaitSetupResponse. This funtion also additionally handles the case when the transferred-to endpoint does not support H.450.2 and has rejected the incoming call request. Note this is an internal function and it is not expected an application would use it. */ void OnReceivedSetupReturnError( int errorCode, const bool timerExpiry = false ///< Flag to indicate expiry ); /**Handle the reception of a callTransferIdentify returnError or expiry of Call Transfer Timer CT-T1 when we are in call transfer state e_ctAwaitIdentifyResponse. Note this is an internal function and it is not expected an application would use it. */ void OnReceivedIdentifyReturnError( const bool timerExpiry = false ///< Flag to indicate expiry ); /**Initiate the transfer of an existing call (connection) to a new remote party using H.450.2. This sends a Call Transfer Initiate Invoke message from the A-Party (transferring endpoint) to the B-Party (transferred endpoint). */ void TransferCall( const PString & remoteParty, ///< Remote party to transfer the existing call to const PString & callIdentity ///< Call Identity of secondary call if present ); /**Transfer the call through consultation so the remote party in the primary call is connected to the called party in the second call using H.450.2. This sends a Call Transfer Identify Invoke message from the A-Party (transferring endpoint) to the C-Party (transferred-to endpoint). */ void ConsultationTransfer( const PString & primaryCallToken ///< Primary call ); /**Handle the reception of a callTransferSetupInvoke APDU whilst a secondary call exists. */ void HandleConsultationTransfer( const PString & callIdentity, ///< Call Identity of secondary call H323Connection& incoming ///< New incoming connection ); void AwaitSetupResponse( const PString & token, const PString & identity ); /**Sub-state for call transfer. */ enum State { e_ctIdle, e_ctAwaitIdentifyResponse, e_ctAwaitInitiateResponse, e_ctAwaitSetupResponse, e_ctAwaitSetup, e_ctAwaitConnect }; /**Get the current call transfer state. */ State GetState() const { return ctState; } /**Handle the reception of an Admission Reject during a pending call transfer operation at the transferred endpoint. If the call transfer state of the current connection is e_ctAwaitSetupResponse, the stack attempts to find the existing connection between the transferred and transferring endpoints and inform this connection that a callTransferInitiateReturnError PDU needs to be sent. No action is taken if the current connection is not in call transfer state e_ctAwaitSetupResponse. */ virtual void onReceivedAdmissionReject(const int returnError); /**Handle the failure of a call transfer operation. */ void HandleCallTransferFailure( const int returnError ///< failure reason ); /** Start the Call Transfer Timer using the specified time interval. */ void StartctTimer(const PTimeInterval value) { ctTimer = value; } /** Stop the Call Transfer Timer */ void StopctTimer(); /**Is the Call Transfer Timer running? */ PBoolean IsctTimerRunning() { return ctTimer.IsRunning(); } /**Callback mechanism for Call Transfer Timers CT-T1, CT-T2, CT-T3 & CT-T4 */ PDECLARE_NOTIFIER(PTimer, H4502Handler, OnCallTransferTimeOut); /**Get the connection assoicated with this H4502Handler. */ const H323Connection& getAssociatedConnection() const { return connection; } /**Set the associated callToken. */ void SetAssociatedCallToken(const PString& token) { CallToken = token; } /**Get the transferringCallToken member */ const PString& getTransferringCallToken() const { return transferringCallToken; } /**Set the 'consultationTransfer' member to TRUE (indicating a successful transfer) */ void SetConsultationTransferSuccess() { consultationTransfer = TRUE; } /**Was the transfer through consultation successful. */ PBoolean isConsultationTransferSuccess() { return consultationTransfer; } protected: PString transferringCallToken; // Stores the call token for the transferring connection (if there is one) PString transferringCallIdentity; // Stores the call identity for the transferring call (if there is one) State ctState; // Call Transfer state of the conneciton PBoolean ctResponseSent; // Has a callTransferSetupReturnResult been sent? PTimer ctTimer; // Call Transfer Timer - Handles all four timers CT-T1, PString CallToken; // Call Token of the associated connection // (used during a consultation transfer). PBoolean consultationTransfer; // Flag used to indicate whether an incoming call is involved in // a transfer through consultation. }; class H4503Handler : public H450xHandler { PCLASSINFO(H4503Handler, H450xHandler); public: H4503Handler( H323Connection & connection, H450xDispatcher & dispatcher ); virtual PBoolean OnReceivedInvoke( int opcode, int invokeId, /// InvokeId of operation (used in response) int linkedId, /// InvokeId of associated operation (if any) PASN_OctetString * argument /// Parameters for the initiate operation ); /**Handle an incoming Near-End Call Hold operation */ void OnReceivedDivertingLegInfo2( int linkedId, /// InvokeId of associated operation (if any) PASN_OctetString * argument ); PBoolean GetRedirectingNumber( PString &originalCalledNr, /// InvokeId of associated operation (if any) PString &lastDivertingNr , int &divCounter, int &origdivReason, int &divReason ); protected: PString m_originalCalledNr; // Originally called number (=> the 1st redirecting number) PString m_lastDivertingNr; // last diverting number (in the case of nultiple-call forward) int m_diversionCounter; int m_origdiversionReason; // original diversion reason int m_diversionReason; // diversion reason }; class H4504Handler : public H450xHandler { PCLASSINFO(H4504Handler, H450xHandler); public: H4504Handler( H323Connection & connection, H450xDispatcher & dispatcher ); virtual PBoolean OnReceivedInvoke( int opcode, int invokeId, ///< InvokeId of operation (used in response) int linkedId, ///< InvokeId of associated operation (if any) PASN_OctetString * argument ///< Parameters for the initiate operation ); /**Handle an incoming Near-End Call Hold operation */ virtual void OnReceivedLocalCallHold( int linkedId ///< InvokeId of associated operation (if any) ); /**Handle an incoming Near-End Call Retrieve operation */ virtual void OnReceivedLocalCallRetrieve( int linkedId ///< InvokeId of associated operation (if any) ); /**Handle an incoming Remote Call Hold operation * TBD: Remote hold operations not yet implemented -- dcassel 4/01 */ virtual void OnReceivedRemoteCallHold( int linkedId ///< InvokeId of associated operation (if any) ); /**Handle an incoming Remote Call Retrieve operation * TBD: Remote hold operations not yet implemented -- dcassel 4/01 */ virtual void OnReceivedRemoteCallRetrieve( int linkedId ///< InvokeId of associated operation (if any) ); /**Place the call on hold, suspending all media channels (H.450.4) * NOTE: Only Local Hold is implemented so far. */ void HoldCall( PBoolean localHold ///< true for Local Hold, false for Remote Hold ); /**Retrieve the call from hold, activating all media channels (H.450.4) * NOTE: Only Local Hold is implemented so far. */ void RetrieveCall(); /**Sub-state for call hold. */ enum State { e_ch_Idle, e_ch_NE_Held, e_ch_RE_Requested, e_ch_RE_Held, e_ch_RE_Retrieve_Req }; State GetState() const { return holdState; } protected: State holdState; // Call Hold state of this connection }; class H4506Handler : public H450xHandler { PCLASSINFO(H4506Handler, H450xHandler); public: H4506Handler( H323Connection & connection, H450xDispatcher & dispatcher ); virtual PBoolean OnReceivedInvoke( int opcode, int invokeId, ///< InvokeId of operation (used in response) int linkedId, ///< InvokeId of associated operation (if any) PASN_OctetString * argument ///< Parameters for the initiate operation ); /**Handle an incoming Call Waiting Indication PDU */ virtual void OnReceivedCallWaitingIndication( int linkedId, PASN_OctetString *argument ); /**Attach a call waiting APDU to the passed in Alerting PDU. The second paramter is used to indicate to the calling user how many additional users are "camped on" the called user. A value of zero indicates to the calling user that he/she is the only user attempting to reach the busy called user. */ virtual void AttachToAlerting( H323SignalPDU & pdu, unsigned numberOfCallsWaiting = 0 ); /**Sub-state for call waiting. */ enum State { e_cw_Idle, e_cw_Invoked }; State GetState() const { return cwState; } protected: State cwState; // Call Waiting state of this connection }; class H45011Handler : public H450xHandler { PCLASSINFO(H45011Handler, H450xHandler); public: H45011Handler( H323Connection & connection, H450xDispatcher & dispatcher ); virtual void AttachToSetup( H323SignalPDU & pdu ); virtual void AttachToAlerting( H323SignalPDU & pdu ); virtual void AttachToConnect( H323SignalPDU & pdu ); virtual void AttachToReleaseComplete( H323SignalPDU & pdu ); virtual PBoolean OnReceivedInvoke( int opcode, int invokeId, ///< InvokeId of operation (used in response) int linkedId, ///< InvokeId of associated operation (if any) PASN_OctetString * argument ///< Parameters for the initiate operation ); /**Handle an incoming Call Intrusion operation */ virtual void OnReceivedCallIntrusionRequest( int linkedId, PASN_OctetString *argument ); /**Handle an incoming Call Intrusion GetCIPL operation */ virtual void OnReceivedCallIntrusionGetCIPL( int linkedId, PASN_OctetString *argument ); /**Handle an incoming Call Intrusion Isolate operation */ virtual void OnReceivedCallIntrusionIsolate( int linkedId, PASN_OctetString *argument ); /**Handle an incoming Call Intrusion Forced Release operation */ virtual PBoolean OnReceivedCallIntrusionForcedRelease( int linkedId, PASN_OctetString *argument ); /**Handle an incoming Call Intrusion WOB operation */ virtual void OnReceivedCallIntrusionWOBRequest( int linkedId, PASN_OctetString *argument ); /**Handle an incoming Call Intrusion Silent Monitor operation */ virtual void OnReceivedCallIntrusionSilentMonitor( int linkedId, PASN_OctetString *argument ); /**Handle an incoming Call Intrusion Notification operation */ virtual void OnReceivedCallIntrusionNotification( int linkedId, PASN_OctetString *argument ); /**Handle an incoming Call Intrusion cfb Override operation */ virtual void OnReceivedCfbOverride( int linkedId, PASN_OctetString *argument ); /**Handle an incoming Call Intrusion Remote User Alerting operation */ virtual void OnReceivedRemoteUserAlerting( int linkedId, PASN_OctetString *argument ); /**Handle an incoming Call Intrusion Call Waiting operation */ virtual void OnReceivedCallWaiting( int linkedId, PASN_OctetString *argument ); virtual PBoolean OnReceivedReturnResult( X880_ReturnResult & returnResult ); void OnReceivedCIRequestResult(/*X880_ReturnResult & returnResult*/); virtual PBoolean OnReceivedReturnError( int errorCode, X880_ReturnError & returnError ); PBoolean OnReceivedInvokeReturnError ( int errorCode, const bool timerExpiry = false ///< Flag to indicate expiry ); void OnReceivedCIGetCIPLResult( X880_ReturnResult & returnResult ); PBoolean OnReceivedGetCIPLReturnError( int errorCode, const bool timerExpiry = false ///< Flag to indicate expiry ); void IntrudeCall(int CICL ); void AwaitSetupResponse( const PString & token, const PString & identity ); PBoolean GetRemoteCallIntrusionProtectionLevel( const PString & intrusionCallToken, unsigned intrusionCICL ); void SetIntrusionImpending(); void SetForcedReleaseAccepted(); void SetIntrusionNotAuthorized(); virtual PBoolean OnReceivedReject( int problemType, int problemNumber ); /**Sub-state for call intrusion. */ enum State { e_ci_Idle, e_ci_WaitAck, e_ci_GetCIPL, e_ci_OrigInvoked, e_ci_OrigIsolated, e_ci_DestNotify, e_ci_DestInvoked, e_ci_DestIsolated, e_ci_DestWOB, e_ci_IsolationRequest, e_ci_ForcedReleaseRequest, e_ci_WOBRequest }; /**What to generate */ enum Generate{ e_ci_gIdle, e_ci_gConferenceRequest, e_ci_gHeldRequest, e_ci_gSilentMonitorRequest, e_ci_gIsolationRequest, e_ci_gForcedReleaseRequest, e_ci_gWOBRequest }; /** When to send SS message */ enum SendState{ e_ci_sIdle, e_ci_sAttachToSetup, e_ci_sAttachToAlerting, e_ci_sAttachToConnect, e_ci_sAttachToReleseComplete }; /** What to return */ enum ReturnState{ e_ci_rIdle, e_ci_rCallIntrusionImpending, e_ci_rCallIntruded, e_ci_rCallIsolated, e_ci_rCallForceReleased, e_ci_rCallForceReleaseResult, e_ci_rCallIntrusionComplete, e_ci_rCallIntrusionEnd, e_ci_rNotBusy, e_ci_rTempUnavailable, e_ci_rNotAuthorized }; /**Get the current call intrusion state. */ State GetState() const { return ciState; } /** Start the Call Intrusion Timer using the specified time interval. */ void StartciTimer(const PTimeInterval value) { ciTimer = value; } /** Stop the Call Intrusion Timer */ void StopciTimer(); /**Is the Call Intrusion Timer running? */ PBoolean IsctTimerRunning() { return ciTimer.IsRunning(); } /**Callback mechanism for Call Intrusion Timers CI-T1, CI-T2, CI-T3 & CI-T4 & CI-T5 & CI-T6 */ PDECLARE_NOTIFIER(PTimer, H45011Handler, OnCallIntrudeTimeOut); protected: State ciState; // Call state of this connection PTimer ciTimer; // Call Intrusion Timer - Handles all six timers CI-T1 to CI-T6, PString intrudingCallToken; PString intrudingCallIdentity; PString activeCallToken; ReturnState ciReturnState; SendState ciSendState; Generate ciGenerateState; int ciCICL; unsigned intrudingCallCICL; }; #endif // __OPAL_H450PDU_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/h450/h4509.h0000644000175000017500000001343211015524220014127 0ustar markmark// // h4509.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H4509 #ifndef __H4509_H #define __H4509_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "h4501.h" #include "h225.h" #include "h4501.h" #include "h4504.h" #include "h4501.h" #include "h4507.h" // // H323CallCompletionOperations // class H4509_H323CallCompletionOperations : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4509_H323CallCompletionOperations, PASN_Enumeration); #endif public: H4509_H323CallCompletionOperations(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_ccbsRequest = 40, e_ccnrRequest = 27, e_ccCancel, e_ccExecPossible, e_ccRingout = 31, e_ccSuspend, e_ccResume }; H4509_H323CallCompletionOperations & operator=(unsigned v); PObject * Clone() const; }; // // CcArg // class H4509_CcShortArg; class H4509_CcLongArg; class H4509_CcArg : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4509_CcArg, PASN_Choice); #endif public: H4509_CcArg(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_shortArg, e_longArg }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4509_CcShortArg &() const; #else operator H4509_CcShortArg &(); operator const H4509_CcShortArg &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4509_CcLongArg &() const; #else operator H4509_CcLongArg &(); operator const H4509_CcLongArg &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // CallCompletionErrors // class H4509_CallCompletionErrors : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4509_CallCompletionErrors, PASN_Enumeration); #endif public: H4509_CallCompletionErrors(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_shortTermRejection = 1010, e_longTermRejection, e_remoteUserBusyAgain, e_failureToMatch }; H4509_CallCompletionErrors & operator=(unsigned v); PObject * Clone() const; }; // // ArrayOf_MixedExtension // class H4504_MixedExtension; class H4509_ArrayOf_MixedExtension : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4509_ArrayOf_MixedExtension, PASN_Array); #endif public: H4509_ArrayOf_MixedExtension(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H4504_MixedExtension & operator[](PINDEX i) const; PObject * Clone() const; }; // // CcRequestArg // class H4509_CcRequestArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4509_CcRequestArg, PASN_Sequence); #endif public: H4509_CcRequestArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_ccIdentifier, e_retain_sig_connection, e_extension }; H4501_EndpointAddress m_numberA; H4501_EndpointAddress m_numberB; H225_CallIdentifier m_ccIdentifier; H4507_BasicService m_service; PASN_Boolean m_can_retain_service; PASN_Boolean m_retain_sig_connection; H4509_ArrayOf_MixedExtension m_extension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CcRequestRes // class H4509_CcRequestRes : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4509_CcRequestRes, PASN_Sequence); #endif public: H4509_CcRequestRes(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extension }; PASN_Boolean m_retain_service; H4509_ArrayOf_MixedExtension m_extension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CcShortArg // class H4509_CcShortArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4509_CcShortArg, PASN_Sequence); #endif public: H4509_CcShortArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_ccIdentifier, e_extension }; H225_CallIdentifier m_ccIdentifier; H4509_ArrayOf_MixedExtension m_extension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CcLongArg // class H4509_CcLongArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4509_CcLongArg, PASN_Sequence); #endif public: H4509_CcLongArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_numberA, e_numberB, e_ccIdentifier, e_service, e_extension }; H4501_EndpointAddress m_numberA; H4501_EndpointAddress m_numberB; H225_CallIdentifier m_ccIdentifier; H4507_BasicService m_service; H4509_ArrayOf_MixedExtension m_extension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H4509_H #endif // if ! H323_DISABLE_H4509 // End of h4509.h h323plus/include/h450/h4501.h0000644000175000017500000004140311015524204014120 0ustar markmark// // h4501.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H4501 #ifndef __H4501_H #define __H4501_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "h225.h" #include "x880.h" // // EntityType // class H4501_EntityType : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_EntityType, PASN_Choice); #endif public: H4501_EntityType(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_endpoint, e_anyEntity }; PBoolean CreateObject(); PObject * Clone() const; }; // // AddressInformation // class H4501_AddressInformation : public H225_AliasAddress { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_AddressInformation, H225_AliasAddress); #endif public: H4501_AddressInformation(unsigned tag = 0, TagClass tagClass = UniversalTagClass); PObject * Clone() const; }; // // InterpretationApdu // class H4501_InterpretationApdu : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_InterpretationApdu, PASN_Choice); #endif public: H4501_InterpretationApdu(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_discardAnyUnrecognizedInvokePdu, e_clearCallIfAnyInvokePduNotRecognized, e_rejectAnyUnrecognizedInvokePdu }; PBoolean CreateObject(); PObject * Clone() const; }; // // ServiceApdus // class H4501_ArrayOf_ROS; class H4501_ServiceApdus : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_ServiceApdus, PASN_Choice); #endif public: H4501_ServiceApdus(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_rosApdus }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4501_ArrayOf_ROS &() const; #else operator H4501_ArrayOf_ROS &(); operator const H4501_ArrayOf_ROS &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // InvokeIdSet // class H4501_InvokeIdSet : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_InvokeIdSet, PASN_Integer); #endif public: H4501_InvokeIdSet(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H4501_InvokeIdSet & operator=(int v); H4501_InvokeIdSet & operator=(unsigned v); PObject * Clone() const; }; // // InvokeIDs // class H4501_InvokeIDs : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_InvokeIDs, PASN_Integer); #endif public: H4501_InvokeIDs(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H4501_InvokeIDs & operator=(int v); H4501_InvokeIDs & operator=(unsigned v); PObject * Clone() const; }; // // PresentedAddressScreened // class H4501_AddressScreened; class H4501_PresentedAddressScreened : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_PresentedAddressScreened, PASN_Choice); #endif public: H4501_PresentedAddressScreened(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_presentationAllowedAddress, e_presentationRestricted, e_numberNotAvailableDueToInterworking, e_presentationRestrictedAddress }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4501_AddressScreened &() const; #else operator H4501_AddressScreened &(); operator const H4501_AddressScreened &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // PresentedAddressUnscreened // class H4501_Address; class H4501_PresentedAddressUnscreened : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_PresentedAddressUnscreened, PASN_Choice); #endif public: H4501_PresentedAddressUnscreened(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_presentationAllowedAddress, e_presentationRestricted, e_numberNotAvailableDueToInterworking, e_presentationRestrictedAddress }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4501_Address &() const; #else operator H4501_Address &(); operator const H4501_Address &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // PresentedNumberScreened // class H4501_NumberScreened; class H4501_PresentedNumberScreened : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_PresentedNumberScreened, PASN_Choice); #endif public: H4501_PresentedNumberScreened(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_presentationAllowedAddress, e_presentationRestricted, e_numberNotAvailableDueToInterworking, e_presentationRestrictedAddress }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4501_NumberScreened &() const; #else operator H4501_NumberScreened &(); operator const H4501_NumberScreened &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // PresentedNumberUnscreened // class H225_PartyNumber; class H4501_PresentedNumberUnscreened : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_PresentedNumberUnscreened, PASN_Choice); #endif public: H4501_PresentedNumberUnscreened(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_presentationAllowedAddress, e_presentationRestricted, e_numberNotAvailableDueToInterworking, e_presentationRestrictedAddress }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_PartyNumber &() const; #else operator H225_PartyNumber &(); operator const H225_PartyNumber &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // PartySubaddress // class H4501_UserSpecifiedSubaddress; class H4501_NSAPSubaddress; class H4501_PartySubaddress : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_PartySubaddress, PASN_Choice); #endif public: H4501_PartySubaddress(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_userSpecifiedSubaddress, e_nsapSubaddress }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4501_UserSpecifiedSubaddress &() const; #else operator H4501_UserSpecifiedSubaddress &(); operator const H4501_UserSpecifiedSubaddress &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4501_NSAPSubaddress &() const; #else operator H4501_NSAPSubaddress &(); operator const H4501_NSAPSubaddress &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // NSAPSubaddress // class H4501_NSAPSubaddress : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_NSAPSubaddress, PASN_OctetString); #endif public: H4501_NSAPSubaddress(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H4501_NSAPSubaddress(const char * v); H4501_NSAPSubaddress(const PString & v); H4501_NSAPSubaddress(const PBYTEArray & v); H4501_NSAPSubaddress & operator=(const char * v); H4501_NSAPSubaddress & operator=(const PString & v); H4501_NSAPSubaddress & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // SubaddressInformation // class H4501_SubaddressInformation : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_SubaddressInformation, PASN_OctetString); #endif public: H4501_SubaddressInformation(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H4501_SubaddressInformation(const char * v); H4501_SubaddressInformation(const PString & v); H4501_SubaddressInformation(const PBYTEArray & v); H4501_SubaddressInformation & operator=(const char * v); H4501_SubaddressInformation & operator=(const PString & v); H4501_SubaddressInformation & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // ScreeningIndicator // class H4501_ScreeningIndicator : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_ScreeningIndicator, PASN_Enumeration); #endif public: H4501_ScreeningIndicator(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_userProvidedNotScreened, e_userProvidedVerifiedAndPassed, e_userProvidedVerifiedAndFailed, e_networkProvided }; H4501_ScreeningIndicator & operator=(unsigned v); PObject * Clone() const; }; // // PresentationAllowedIndicator // class H4501_PresentationAllowedIndicator : public PASN_Boolean { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_PresentationAllowedIndicator, PASN_Boolean); #endif public: H4501_PresentationAllowedIndicator(unsigned tag = UniversalBoolean, TagClass tagClass = UniversalTagClass); H4501_PresentationAllowedIndicator & operator=(PBoolean v); PObject * Clone() const; }; // // GeneralErrorList // class H4501_GeneralErrorList : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_GeneralErrorList, PASN_Enumeration); #endif public: H4501_GeneralErrorList(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_userNotSubscribed, e_rejectedByNetwork, e_rejectedByUser, e_notAvailable, e_insufficientInformation = 5, e_invalidServedUserNumber, e_invalidCallState, e_basicServiceNotProvided, e_notIncomingCall, e_supplementaryServiceInteractionNotAllowed, e_resourceUnavailable, e_callFailure = 25, e_proceduralError = 43 }; H4501_GeneralErrorList & operator=(unsigned v); PObject * Clone() const; }; // // H225InformationElement // class H4501_H225InformationElement : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_H225InformationElement, PASN_OctetString); #endif public: H4501_H225InformationElement(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H4501_H225InformationElement(const char * v); H4501_H225InformationElement(const PString & v); H4501_H225InformationElement(const PBYTEArray & v); H4501_H225InformationElement & operator=(const char * v); H4501_H225InformationElement & operator=(const PString & v); H4501_H225InformationElement & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // Extension // class H4501_Extension : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_Extension, PASN_Sequence); #endif public: H4501_Extension(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); X880_Code m_extensionId; PASN_OctetString m_extensionArgument; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_ROS // class X880_ROS; class H4501_ArrayOf_ROS : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_ArrayOf_ROS, PASN_Array); #endif public: H4501_ArrayOf_ROS(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; X880_ROS & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_AliasAddress // class H225_AliasAddress; class H4501_ArrayOf_AliasAddress : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_ArrayOf_AliasAddress, PASN_Array); #endif public: H4501_ArrayOf_AliasAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_AliasAddress & operator[](PINDEX i) const; PObject * Clone() const; }; // // NetworkFacilityExtension // class H4501_NetworkFacilityExtension : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_NetworkFacilityExtension, PASN_Sequence); #endif public: H4501_NetworkFacilityExtension(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_sourceEntityAddress, e_destinationEntityAddress }; H4501_EntityType m_sourceEntity; H4501_AddressInformation m_sourceEntityAddress; H4501_EntityType m_destinationEntity; H4501_AddressInformation m_destinationEntityAddress; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AddressScreened // class H4501_AddressScreened : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_AddressScreened, PASN_Sequence); #endif public: H4501_AddressScreened(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_partySubaddress }; H225_PartyNumber m_partyNumber; H4501_ScreeningIndicator m_screeningIndicator; H4501_PartySubaddress m_partySubaddress; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NumberScreened // class H4501_NumberScreened : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_NumberScreened, PASN_Sequence); #endif public: H4501_NumberScreened(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_PartyNumber m_partyNumber; H4501_ScreeningIndicator m_screeningIndicator; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Address // class H4501_Address : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_Address, PASN_Sequence); #endif public: H4501_Address(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_partySubaddress }; H225_PartyNumber m_partyNumber; H4501_PartySubaddress m_partySubaddress; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // EndpointAddress // class H4501_EndpointAddress : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_EndpointAddress, PASN_Sequence); #endif public: H4501_EndpointAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_remoteExtensionAddress }; H4501_ArrayOf_AliasAddress m_destinationAddress; H225_AliasAddress m_remoteExtensionAddress; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UserSpecifiedSubaddress // class H4501_UserSpecifiedSubaddress : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_UserSpecifiedSubaddress, PASN_Sequence); #endif public: H4501_UserSpecifiedSubaddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_oddCountIndicator }; H4501_SubaddressInformation m_subaddressInformation; PASN_Boolean m_oddCountIndicator; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // SupplementaryService // class H4501_SupplementaryService : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4501_SupplementaryService, PASN_Sequence); #endif public: H4501_SupplementaryService(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_networkFacilityExtension, e_interpretationApdu }; H4501_NetworkFacilityExtension m_networkFacilityExtension; H4501_InterpretationApdu m_interpretationApdu; H4501_ServiceApdus m_serviceApdu; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H4501_H #endif // if ! H323_DISABLE_H4501 // End of h4501.h h323plus/include/h450/h45010.h0000644000175000017500000000624711015524206014211 0ustar markmark// // h45010.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H45010 #ifndef __H45010_H #define __H45010_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "h4504.h" #include "h4506.h" // // H323CallOfferOperations // class H45010_H323CallOfferOperations : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45010_H323CallOfferOperations, PASN_Enumeration); #endif public: H45010_H323CallOfferOperations(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_callOfferRequest = 34, e_remoteUserAlerting = 115, e_cfbOverride = 49 }; H45010_H323CallOfferOperations & operator=(unsigned v); PObject * Clone() const; }; // // ArrayOf_MixedExtension // class H4504_MixedExtension; class H45010_ArrayOf_MixedExtension : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45010_ArrayOf_MixedExtension, PASN_Array); #endif public: H45010_ArrayOf_MixedExtension(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H4504_MixedExtension & operator[](PINDEX i) const; PObject * Clone() const; }; // // CoReqOptArg // class H45010_CoReqOptArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45010_CoReqOptArg, PASN_Sequence); #endif public: H45010_CoReqOptArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extension }; H45010_ArrayOf_MixedExtension m_extension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RUAlertOptArg // class H45010_RUAlertOptArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45010_RUAlertOptArg, PASN_Sequence); #endif public: H45010_RUAlertOptArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extension }; H45010_ArrayOf_MixedExtension m_extension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CfbOvrOptArg // class H45010_CfbOvrOptArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45010_CfbOvrOptArg, PASN_Sequence); #endif public: H45010_CfbOvrOptArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extension }; H45010_ArrayOf_MixedExtension m_extension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H45010_H #endif // if ! H323_DISABLE_H45010 // End of h45010.h h323plus/include/h450/h4505.h0000644000175000017500000003604411015524213014131 0ustar markmark// // h4505.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H4505 #ifndef __H4505_H #define __H4505_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "h4501.h" #include "h4501.h" #include "h4501.h" #include "h4504.h" #include "h225.h" // // CallParkPickupOperations // class H4505_CallParkPickupOperations : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4505_CallParkPickupOperations, PASN_Enumeration); #endif public: H4505_CallParkPickupOperations(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_cpRequest = 106, e_cpSetup, e_groupIndicationOn = 8, e_groupIndicationOff, e_pickrequ = 110, e_pickup, e_pickExe, e_cpNotify, e_cpickupNotify }; H4505_CallParkPickupOperations & operator=(unsigned v); PObject * Clone() const; }; // // ParkedToPosition // class H4505_ParkedToPosition : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4505_ParkedToPosition, PASN_Integer); #endif public: H4505_ParkedToPosition(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H4505_ParkedToPosition & operator=(int v); H4505_ParkedToPosition & operator=(unsigned v); PObject * Clone() const; }; // // ParkCondition // class H4505_ParkCondition : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4505_ParkCondition, PASN_Enumeration); #endif public: H4505_ParkCondition(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_unspecified, e_parkedToUserIdle, e_parkedToUserBusy, e_parkedToGroup }; H4505_ParkCondition & operator=(unsigned v); PObject * Clone() const; }; // // CallType // class H4505_CallType : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4505_CallType, PASN_Enumeration); #endif public: H4505_CallType(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_parkedCall, e_alertingCall }; H4505_CallType & operator=(unsigned v); PObject * Clone() const; }; // // CallPickupErrors // class H4505_CallPickupErrors : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4505_CallPickupErrors, PASN_Enumeration); #endif public: H4505_CallPickupErrors(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_callPickupIdInvalid = 2000, e_callAlreadyPickedUp, e_undefined }; H4505_CallPickupErrors & operator=(unsigned v); PObject * Clone() const; }; // // ArrayOf_MixedExtension // class H4504_MixedExtension; class H4505_ArrayOf_MixedExtension : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4505_ArrayOf_MixedExtension, PASN_Array); #endif public: H4505_ArrayOf_MixedExtension(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H4504_MixedExtension & operator[](PINDEX i) const; PObject * Clone() const; }; // // CpRequestArg // class H4505_CpRequestArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4505_CpRequestArg, PASN_Sequence); #endif public: H4505_CpRequestArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_parkedToPosition, e_extensionArg }; H4501_EndpointAddress m_parkingNumber; H4501_EndpointAddress m_parkedNumber; H4501_EndpointAddress m_parkedToNumber; H4505_ParkedToPosition m_parkedToPosition; H4505_ArrayOf_MixedExtension m_extensionArg; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CpRequestRes // class H4505_CpRequestRes : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4505_CpRequestRes, PASN_Sequence); #endif public: H4505_CpRequestRes(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_parkedToPosition, e_extensionRes }; H4501_EndpointAddress m_parkedToNumber; H4505_ParkedToPosition m_parkedToPosition; H4505_ParkCondition m_parkCondition; H4505_ArrayOf_MixedExtension m_extensionRes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CpSetupArg // class H4505_CpSetupArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4505_CpSetupArg, PASN_Sequence); #endif public: H4505_CpSetupArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_parkedToPosition, e_extensionArg }; H4501_EndpointAddress m_parkingNumber; H4501_EndpointAddress m_parkedNumber; H4501_EndpointAddress m_parkedToNumber; H4505_ParkedToPosition m_parkedToPosition; H4505_ArrayOf_MixedExtension m_extensionArg; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CpSetupRes // class H4505_CpSetupRes : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4505_CpSetupRes, PASN_Sequence); #endif public: H4505_CpSetupRes(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_parkedToPosition, e_extensionRes }; H4501_EndpointAddress m_parkedToNumber; H4505_ParkedToPosition m_parkedToPosition; H4505_ParkCondition m_parkCondition; H4505_ArrayOf_MixedExtension m_extensionRes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // GroupIndicationOnArg // class H4505_GroupIndicationOnArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4505_GroupIndicationOnArg, PASN_Sequence); #endif public: H4505_GroupIndicationOnArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_parkPosition, e_extensionArg }; H225_CallIdentifier m_callPickupId; H4501_EndpointAddress m_groupMemberUserNr; H4505_CallType m_retrieveCallType; H4501_EndpointAddress m_partyToRetrieve; H4501_EndpointAddress m_retrieveAddress; H4505_ParkedToPosition m_parkPosition; H4505_ArrayOf_MixedExtension m_extensionArg; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // GroupIndicationOnRes // class H4505_GroupIndicationOnRes : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4505_GroupIndicationOnRes, PASN_Sequence); #endif public: H4505_GroupIndicationOnRes(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extensionRes }; H4505_ArrayOf_MixedExtension m_extensionRes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // GroupIndicationOffArg // class H4505_GroupIndicationOffArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4505_GroupIndicationOffArg, PASN_Sequence); #endif public: H4505_GroupIndicationOffArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extensionArg }; H225_CallIdentifier m_callPickupId; H4501_EndpointAddress m_groupMemberUserNr; H4505_ArrayOf_MixedExtension m_extensionArg; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // GroupIndicationOffRes // class H4505_GroupIndicationOffRes : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4505_GroupIndicationOffRes, PASN_Sequence); #endif public: H4505_GroupIndicationOffRes(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extensionRes }; H4505_ArrayOf_MixedExtension m_extensionRes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PickrequArg // class H4505_PickrequArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4505_PickrequArg, PASN_Sequence); #endif public: H4505_PickrequArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_callPickupId, e_partyToRetrieve, e_parkPosition, e_extensionArg }; H4501_EndpointAddress m_picking_upNumber; H225_CallIdentifier m_callPickupId; H4501_EndpointAddress m_partyToRetrieve; H4501_EndpointAddress m_retrieveAddress; H4505_ParkedToPosition m_parkPosition; H4505_ArrayOf_MixedExtension m_extensionArg; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PickrequRes // class H4505_PickrequRes : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4505_PickrequRes, PASN_Sequence); #endif public: H4505_PickrequRes(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extensionRes }; H225_CallIdentifier m_callPickupId; H4505_ArrayOf_MixedExtension m_extensionRes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PickupArg // class H4505_PickupArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4505_PickupArg, PASN_Sequence); #endif public: H4505_PickupArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extensionArg }; H225_CallIdentifier m_callPickupId; H4501_EndpointAddress m_picking_upNumber; H4505_ArrayOf_MixedExtension m_extensionArg; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PickupRes // class H4505_PickupRes : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4505_PickupRes, PASN_Sequence); #endif public: H4505_PickupRes(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extensionRes }; H4505_ArrayOf_MixedExtension m_extensionRes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PickExeArg // class H4505_PickExeArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4505_PickExeArg, PASN_Sequence); #endif public: H4505_PickExeArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extensionArg }; H225_CallIdentifier m_callPickupId; H4501_EndpointAddress m_picking_upNumber; H4501_EndpointAddress m_partyToRetrieve; H4505_ArrayOf_MixedExtension m_extensionArg; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PickExeRes // class H4505_PickExeRes : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4505_PickExeRes, PASN_Sequence); #endif public: H4505_PickExeRes(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extensionRes }; H4505_ArrayOf_MixedExtension m_extensionRes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CpNotifyArg // class H4505_CpNotifyArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4505_CpNotifyArg, PASN_Sequence); #endif public: H4505_CpNotifyArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_parkingNumber, e_extensionArg }; H4501_EndpointAddress m_parkingNumber; H4505_ArrayOf_MixedExtension m_extensionArg; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CpickupNotifyArg // class H4505_CpickupNotifyArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4505_CpickupNotifyArg, PASN_Sequence); #endif public: H4505_CpickupNotifyArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_picking_upNumber, e_extensionArg }; H4501_EndpointAddress m_picking_upNumber; H4505_ArrayOf_MixedExtension m_extensionArg; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H4505_H #endif // if ! H323_DISABLE_H4505 // End of h4505.h h323plus/include/h450/h45011.h0000644000175000017500000003015611015524207014207 0ustar markmark// // h45011.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H45011 #ifndef __H45011_H #define __H45011_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "h225.h" #include "h4504.h" #include "h4501.h" #include "h4506.h" #include "h45010.h" // // H323CallIntrusionOperations // class H45011_H323CallIntrusionOperations : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45011_H323CallIntrusionOperations, PASN_Enumeration); #endif public: H45011_H323CallIntrusionOperations(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_callIntrusionRequest = 43, e_callIntrusionGetCIPL, e_callIntrusionIsolate, e_callIntrusionForcedRelease, e_callIntrusionWOBRequest, e_callIntrusionSilentMonitor = 116, e_callIntrusionNotification }; H45011_H323CallIntrusionOperations & operator=(unsigned v); PObject * Clone() const; }; // // CICapabilityLevel // class H45011_CICapabilityLevel : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45011_CICapabilityLevel, PASN_Integer); #endif public: H45011_CICapabilityLevel(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H45011_CICapabilityLevel & operator=(int v); H45011_CICapabilityLevel & operator=(unsigned v); PObject * Clone() const; }; // // CIProtectionLevel // class H45011_CIProtectionLevel : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45011_CIProtectionLevel, PASN_Integer); #endif public: H45011_CIProtectionLevel(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H45011_CIProtectionLevel & operator=(int v); H45011_CIProtectionLevel & operator=(unsigned v); PObject * Clone() const; }; // // CIStatusInformation // class H45011_CIStatusInformation : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45011_CIStatusInformation, PASN_Choice); #endif public: H45011_CIStatusInformation(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_callIntrusionImpending, e_callIntruded, e_callIsolated, e_callForceReleased, e_callIntrusionComplete, e_callIntrusionEnd }; PBoolean CreateObject(); PObject * Clone() const; }; // // CallIntrusionErrors // class H45011_CallIntrusionErrors : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45011_CallIntrusionErrors, PASN_Enumeration); #endif public: H45011_CallIntrusionErrors(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_notBusy = 1009, e_temporarilyUnavailable = 1000, e_notAuthorized = 1007 }; H45011_CallIntrusionErrors & operator=(unsigned v); PObject * Clone() const; }; // // ArrayOf_MixedExtension // class H4504_MixedExtension; class H45011_ArrayOf_MixedExtension : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45011_ArrayOf_MixedExtension, PASN_Array); #endif public: H45011_ArrayOf_MixedExtension(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H4504_MixedExtension & operator[](PINDEX i) const; PObject * Clone() const; }; // // CIRequestArg // class H45011_CIRequestArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45011_CIRequestArg, PASN_Sequence); #endif public: H45011_CIRequestArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_argumentExtension }; H45011_CICapabilityLevel m_ciCapabilityLevel; H45011_ArrayOf_MixedExtension m_argumentExtension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CIRequestRes // class H45011_CIRequestRes : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45011_CIRequestRes, PASN_Sequence); #endif public: H45011_CIRequestRes(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_resultExtension }; H45011_CIStatusInformation m_ciStatusInformation; H45011_ArrayOf_MixedExtension m_resultExtension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CIGetCIPLOptArg // class H45011_CIGetCIPLOptArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45011_CIGetCIPLOptArg, PASN_Sequence); #endif public: H45011_CIGetCIPLOptArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_argumentExtension }; H45011_ArrayOf_MixedExtension m_argumentExtension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CIGetCIPLRes // class H45011_CIGetCIPLRes : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45011_CIGetCIPLRes, PASN_Sequence); #endif public: H45011_CIGetCIPLRes(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_silentMonitoringPermitted, e_resultExtension }; H45011_CIProtectionLevel m_ciProtectionLevel; PASN_Null m_silentMonitoringPermitted; H45011_ArrayOf_MixedExtension m_resultExtension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CIIsOptArg // class H45011_CIIsOptArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45011_CIIsOptArg, PASN_Sequence); #endif public: H45011_CIIsOptArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_argumentExtension }; H45011_ArrayOf_MixedExtension m_argumentExtension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CIIsOptRes // class H45011_CIIsOptRes : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45011_CIIsOptRes, PASN_Sequence); #endif public: H45011_CIIsOptRes(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_resultExtension }; H45011_ArrayOf_MixedExtension m_resultExtension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CIFrcRelArg // class H45011_CIFrcRelArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45011_CIFrcRelArg, PASN_Sequence); #endif public: H45011_CIFrcRelArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_argumentExtension }; H45011_CICapabilityLevel m_ciCapabilityLevel; H45011_ArrayOf_MixedExtension m_argumentExtension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CIFrcRelOptRes // class H45011_CIFrcRelOptRes : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45011_CIFrcRelOptRes, PASN_Sequence); #endif public: H45011_CIFrcRelOptRes(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_resultExtension }; H45011_ArrayOf_MixedExtension m_resultExtension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CIWobOptArg // class H45011_CIWobOptArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45011_CIWobOptArg, PASN_Sequence); #endif public: H45011_CIWobOptArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_argumentExtension }; H45011_ArrayOf_MixedExtension m_argumentExtension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CIWobOptRes // class H45011_CIWobOptRes : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45011_CIWobOptRes, PASN_Sequence); #endif public: H45011_CIWobOptRes(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_resultExtension }; H45011_ArrayOf_MixedExtension m_resultExtension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CISilentArg // class H45011_CISilentArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45011_CISilentArg, PASN_Sequence); #endif public: H45011_CISilentArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_specificCall, e_argumentExtension }; H45011_CICapabilityLevel m_ciCapabilityLevel; H225_CallIdentifier m_specificCall; H45011_ArrayOf_MixedExtension m_argumentExtension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CISilentOptRes // class H45011_CISilentOptRes : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45011_CISilentOptRes, PASN_Sequence); #endif public: H45011_CISilentOptRes(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_resultExtension }; H45011_ArrayOf_MixedExtension m_resultExtension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CINotificationArg // class H45011_CINotificationArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H45011_CINotificationArg, PASN_Sequence); #endif public: H45011_CINotificationArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_argumentExtension }; H45011_CIStatusInformation m_ciStatusInformation; H45011_ArrayOf_MixedExtension m_argumentExtension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H45011_H #endif // if ! H323_DISABLE_H45011 // End of h45011.h h323plus/include/h450/h4503.h0000644000175000017500000001776611015524211014137 0ustar markmark// // h4503.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H4503 #ifndef __H4503_H #define __H4503_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "h4501.h" #include "h225.h" #include "h225.h" #include "h4501.h" #include "h4501.h" // // H323CallDiversionOperations // class H4503_H323CallDiversionOperations : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4503_H323CallDiversionOperations, PASN_Enumeration); #endif public: H4503_H323CallDiversionOperations(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_activateDiversionQ = 15, e_deactivateDiversionQ, e_interrogateDiversionQ, e_checkRestriction, e_callRerouting, e_divertingLegInformation1, e_divertingLegInformation2, e_divertingLegInformation3, e_divertingLegInformation4 = 100, e_cfnrDivertedLegFailed = 23 }; H4503_H323CallDiversionOperations & operator=(unsigned v); PObject * Clone() const; }; // // DiversionReason // class H4503_DiversionReason : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4503_DiversionReason, PASN_Enumeration); #endif public: H4503_DiversionReason(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_unknown, e_cfu, e_cfb, e_cfnr }; H4503_DiversionReason & operator=(unsigned v); PObject * Clone() const; }; // // IntResultList // class H4503_IntResult; class H4503_IntResultList : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4503_IntResultList, PASN_Array); #endif public: H4503_IntResultList(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H4503_IntResult & operator[](PINDEX i) const; PObject * Clone() const; }; // // Procedure // class H4503_Procedure : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4503_Procedure, PASN_Enumeration); #endif public: H4503_Procedure(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_cfu, e_cfb, e_cfnr }; H4503_Procedure & operator=(unsigned v); PObject * Clone() const; }; // // SubscriptionOption // class H4503_SubscriptionOption : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4503_SubscriptionOption, PASN_Enumeration); #endif public: H4503_SubscriptionOption(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_noNotification, e_notificationWithoutDivertedToNr, e_notificationWithDivertedToNr }; H4503_SubscriptionOption & operator=(unsigned v); PObject * Clone() const; }; // // CallDiversionErrors // class H4503_CallDiversionErrors : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4503_CallDiversionErrors, PASN_Enumeration); #endif public: H4503_CallDiversionErrors(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_invalidDivertedNumber = 12, e_specialServiceNumber = 14, e_diversionToServedUserNumber, e_numberOfDiversionsExceeded = 24, e_temporarilyUnavailable = 1000, e_notAuthorized = 1007, e_unspecified }; H4503_CallDiversionErrors & operator=(unsigned v); PObject * Clone() const; }; // // BasicService // class H4503_BasicService : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4503_BasicService, PASN_Enumeration); #endif public: H4503_BasicService(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_allServices }; H4503_BasicService & operator=(unsigned v); PObject * Clone() const; }; // // ExtensionSeq // class H4501_Extension; class H4503_ExtensionSeq : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4503_ExtensionSeq, PASN_Array); #endif public: H4503_ExtensionSeq(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H4501_Extension & operator[](PINDEX i) const; PObject * Clone() const; }; // // IntResult_extension // class H4503_ExtensionSeq; class H225_NonStandardParameter; class H4503_IntResult_extension : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4503_IntResult_extension, PASN_Choice); #endif public: H4503_IntResult_extension(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_extensionSeq, e_nonStandardData }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4503_ExtensionSeq &() const; #else operator H4503_ExtensionSeq &(); operator const H4503_ExtensionSeq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardParameter &() const; #else operator H225_NonStandardParameter &(); operator const H225_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // DivertingLegInfo2Arg_extension // class H4503_ExtensionSeq; class H225_NonStandardParameter; class H4503_DivertingLegInfo2Arg_extension : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4503_DivertingLegInfo2Arg_extension, PASN_Choice); #endif public: H4503_DivertingLegInfo2Arg_extension(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_extensionSeq, e_nonStandardData }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H4503_ExtensionSeq &() const; #else operator H4503_ExtensionSeq &(); operator const H4503_ExtensionSeq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardParameter &() const; #else operator H225_NonStandardParameter &(); operator const H225_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // IntResult // class H4503_IntResult : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4503_IntResult, PASN_Sequence); #endif public: H4503_IntResult(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_extension }; H4501_EndpointAddress m_servedUserNr; H4503_BasicService m_basicService; H4503_Procedure m_procedure; H4501_EndpointAddress m_divertedToAddress; PASN_Boolean m_remoteEnabled; H4503_IntResult_extension m_extension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DivertingLegInfo2Arg // class H4503_DivertingLegInfo2Arg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4503_DivertingLegInfo2Arg, PASN_Sequence); #endif public: H4503_DivertingLegInfo2Arg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_originalDiversionReason, e_divertingNr, e_originalCalledNr, e_redirectingInfo, e_originalCalledInfo, e_extension }; PASN_Integer m_diversionCounter; H4503_DiversionReason m_diversionReason; H4503_DiversionReason m_originalDiversionReason; H4501_EndpointAddress m_divertingNr; H4501_EndpointAddress m_originalCalledNr; PASN_BMPString m_redirectingInfo; PASN_BMPString m_originalCalledInfo; H4503_DivertingLegInfo2Arg_extension m_extension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H4503_H #endif // if ! H323_DISABLE_H4503 // End of h4503.h h323plus/include/h450/h4506.h0000644000175000017500000000363611015524214014134 0ustar markmark// // h4506.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H4506 #ifndef __H4506_H #define __H4506_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "h4501.h" #include "h4504.h" // // CallWaitingOperations // class H4506_CallWaitingOperations : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4506_CallWaitingOperations, PASN_Enumeration); #endif public: H4506_CallWaitingOperations(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_callWaiting = 105 }; H4506_CallWaitingOperations & operator=(unsigned v); PObject * Clone() const; }; // // ArrayOf_MixedExtension // class H4504_MixedExtension; class H4506_ArrayOf_MixedExtension : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4506_ArrayOf_MixedExtension, PASN_Array); #endif public: H4506_ArrayOf_MixedExtension(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H4504_MixedExtension & operator[](PINDEX i) const; PObject * Clone() const; }; // // CallWaitingArg // class H4506_CallWaitingArg : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H4506_CallWaitingArg, PASN_Sequence); #endif public: H4506_CallWaitingArg(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nbOfAddWaitingCalls, e_extensionArg }; PASN_Integer m_nbOfAddWaitingCalls; H4506_ArrayOf_MixedExtension m_extensionArg; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H4506_H #endif // if ! H323_DISABLE_H4506 // End of h4506.h h323plus/include/svcctrl.h0000755000175000017500000003154211150136247014373 0ustar markmark/* * svcctrl.h * * H.225 Service Control protocol handler * * Open H323 Library * * Copyright (c) 2003 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * Contributor(s): ______________________________________. * * $Log: svcctrl.h,v $ * Revision 1.5 2009/02/22 02:47:03 shorne * Small H248 tweak * * Revision 1.4 2009/02/22 02:02:05 shorne * Added ability to enable SCI/SCR without needing H248 support * * Revision 1.3 2008/05/23 11:20:04 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.2 2007/08/07 22:25:46 shorne * update for H323_H350 * * Revision 1.1 2007/08/06 20:50:50 shorne * First commit of h323plus * * Revision 1.2.2.1 2007/07/20 22:03:26 shorne * Initial H.350 Support * * Revision 1.2 2006/05/16 11:37:11 shorne * Added ability to detect type of service control * * Revision 1.1 2003/04/01 01:07:22 robertj * Split service control handlers from H.225 RAS header. * */ #ifndef __OPAL_SVCCTRL_H #define __OPAL_SVCCTRL_H #ifdef P_USE_PRAGMA #pragma interface #endif class H225_ServiceControlDescriptor; class H225_ServiceControlIndication; class H225_ServiceControlResponse; class H248_SignalsDescriptor; class H248_SignalRequest; class H323EndPoint; class H323Connection; #ifdef H323_H248 /////////////////////////////////////////////////////////////////////////////// /**This is a base class for H.323 Service Control Session handling. This implements the service class session management as per Annex K/H.323. */ class H323ServiceControlSession : public PObject { PCLASSINFO(H323ServiceControlSession, PObject); public: /**@name Construction */ //@{ /**Create a new handler for a Service Control. */ H323ServiceControlSession(); //@} /**@name Operations */ //@{ /**Determine of the session is valid. That is has all of the data it needs to correctly encode a PDU. Default behaviour is pure. */ virtual PBoolean IsValid() const = 0; /**Get identification name for the Control Service. This function separates the dynamic data from the fundamental type of the control service which will cause a new session ID to be generated by the gatekeeper server. Default behaviour returns the class name. */ virtual PString GetServiceControlType() const; /**Handle a received PDU. Update in the internal state from the received PDU. Returns FALSE is PDU is not sutiable for the class type. Default behaviour is pure. */ virtual PBoolean OnReceivedPDU( const H225_ServiceControlDescriptor & descriptor ) = 0; /**Handle a sent PDU. Set the PDU fields from in the internal state. Returns FALSE is PDU cannot be created. Default behaviour is pure. */ virtual PBoolean OnSendingPDU( H225_ServiceControlDescriptor & descriptor ) const = 0; enum ChangeType { OpenSession, // H225_ServiceControlSession_reason::e_open RefreshSession, // H225_ServiceControlSession_reason::e_refresh CloseSession // H225_ServiceControlSession_reason::e_close }; /**Handle a change of the state of the Service Control Session. Default behaviour is pure. */ virtual void OnChange( unsigned type, unsigned sessionId, H323EndPoint & endpoint, H323Connection * connection ) const = 0; enum serviceType { e_URL, e_Signal, e_NonStandard, e_CallCredit }; virtual serviceType GetType() = 0; //@} }; /**This class is for H.323 Service Control Session handling for HTTP. This implements the HTTP channel management as per Annex K/H.323. */ class H323HTTPServiceControl : public H323ServiceControlSession { PCLASSINFO(H323HTTPServiceControl, H323ServiceControlSession); public: /**@name Construction */ //@{ /**Create a new handler for a Service Control. */ H323HTTPServiceControl( const PString & url ); /**Create a new handler for a Service Control, initialise to PDU. */ H323HTTPServiceControl( const H225_ServiceControlDescriptor & contents ); //@} /**@name Operations */ //@{ /**Determine of the session is valid. That is has all of the data it needs to correctly encode a PDU. Default behaviour returns TRUE if url is not an empty string. */ virtual PBoolean IsValid() const; /**Get identification name for the Control Service. This function separates the dynamic data from the fundamental type of the control service which will cause a new session ID to be generated by the gatekeeper server. Default behaviour returns the class name. */ virtual PString GetServiceControlType() const; /**Handle a received PDU. Update in the internal state from the received PDU. Default behaviour gets the contents for an e_url. */ virtual PBoolean OnReceivedPDU( const H225_ServiceControlDescriptor & contents ); /**Handle a sent PDU. Set the PDU fields from in the internal state. Default behaviour sets the contents to an e_url. */ virtual PBoolean OnSendingPDU( H225_ServiceControlDescriptor & contents ) const; /**Handle a change of the state of the Service Control Session. Default behaviour calls endpoint.OnHTTPServiceControl(). */ virtual void OnChange( unsigned type, unsigned sessionId, H323EndPoint & endpoint, H323Connection * connection ) const; serviceType GetType() { return e_URL; }; void GetValue(PString & _url) { _url = url; } //@} protected: PString url; }; /**This is a base class for H.323 Service Control Session handling for H.248. */ class H323H248ServiceControl : public H323ServiceControlSession { PCLASSINFO(H323H248ServiceControl, H323ServiceControlSession); public: /**@name Construction */ //@{ /**Create a new handler for a Service Control. */ H323H248ServiceControl(); /**Create a new handler for a Service Control, initialise to PDU. */ H323H248ServiceControl( const H225_ServiceControlDescriptor & contents ); //@} /**@name Operations */ //@{ /**Handle a received PDU. Update in the internal state from the received PDU. Default behaviour converts to pdu to H248_SignalsDescriptor and calls that version of OnReceivedPDU(). */ virtual PBoolean OnReceivedPDU( const H225_ServiceControlDescriptor & contents ); /**Handle a sent PDU. Set the PDU fields from in the internal state. Default behaviour calls the H248_SignalsDescriptor version of OnSendingPDU() and converts that to the contents pdu. */ virtual PBoolean OnSendingPDU( H225_ServiceControlDescriptor & contents ) const; /**Handle a received PDU. Update in the internal state from the received PDU. Default behaviour calls the H248_SignalRequest version of OnReceivedPDU() for every element in H248_SignalsDescriptor. */ virtual PBoolean OnReceivedPDU( const H248_SignalsDescriptor & descriptor ); /**Handle a sent PDU. Set the PDU fields from in the internal state. Default behaviour calls the H248_SignalRequest version of OnSendingPDU() and appends it to the H248_SignalsDescriptor. */ virtual PBoolean OnSendingPDU( H248_SignalsDescriptor & descriptor ) const; /**Handle a received PDU. Update in the internal state from the received PDU. Default behaviour is pure. */ virtual PBoolean OnReceivedPDU( const H248_SignalRequest & request ) = 0; /**Handle a sent PDU. Set the PDU fields from in the internal state. Default behaviour is pure. */ virtual PBoolean OnSendingPDU( H248_SignalRequest & request ) const = 0; serviceType GetType() { return e_Signal; }; //@} }; /**This class is for H.323 Service Control Session handling for call credit. */ class H323CallCreditServiceControl : public H323ServiceControlSession { PCLASSINFO(H323CallCreditServiceControl, H323ServiceControlSession); public: /**@name Construction */ //@{ /**Create a new handler for a Service Control. */ H323CallCreditServiceControl( const PString & amount, PBoolean mode, unsigned duration = 0 ); /**Create a new handler for a Service Control, initialise to PDU. */ H323CallCreditServiceControl( const H225_ServiceControlDescriptor & contents ); //@} /**@name Operations */ //@{ /**Determine of the session is valid. That is has all of the data it needs to correctly encode a PDU. Default behaviour returns TRUE if amount or duration is set. */ virtual PBoolean IsValid() const; /**Handle a received PDU. Update in the internal state from the received PDU. Default behaviour gets the contents for an e_callCreditServiceControl. */ virtual PBoolean OnReceivedPDU( const H225_ServiceControlDescriptor & contents ); /**Handle a sent PDU. Set the PDU fields from in the internal state. Default behaviour sets the contents to an e_callCreditServiceControl. */ virtual PBoolean OnSendingPDU( H225_ServiceControlDescriptor & contents ) const; /**Handle a change of the state of the Service Control Session. Default behaviour calls endpoint.OnCallCreditServiceControl() and optionally connection->SetEnforceDurationLimit(). */ virtual void OnChange( unsigned type, unsigned sessionId, H323EndPoint & endpoint, H323Connection * connection ) const; serviceType GetType() { return e_CallCredit; }; void GetValue(PString & _amount,PBoolean & _credit, unsigned & _time) { _amount = amount; _credit = mode; _time = durationLimit;} //@} protected: PString amount; PBoolean mode; unsigned durationLimit; }; #ifdef H323_H350 /**This nonstandard class is for H.323 Service Control Session handling for LDAP directory lookups. */ class H323H350ServiceControl : public H323ServiceControlSession { PCLASSINFO(H323H350ServiceControl, H323ServiceControlSession); public: /**@name Construction */ //@{ /**Create a new handler for a Service Control. */ H323H350ServiceControl( const PString & _ldapURL, const PString & _ldapDN ); /**Create a new handler for a Service Control, initialise to PDU. */ H323H350ServiceControl( const H225_ServiceControlDescriptor & contents ); //@} /**@name Operations */ //@{ /**Determine of the session is valid. That is has all of the data it needs to correctly encode a PDU. Default behaviour returns TRUE if url is not an empty string. */ virtual PBoolean IsValid() const; /**Get identification name for the Control Service. This function separates the dynamic data from the fundamental type of the control service which will cause a new session ID to be generated by the gatekeeper server. Default behaviour returns the class name. */ virtual PString GetServiceControlType() const; /**Handle a received PDU. Update in the internal state from the received PDU. Default behaviour gets the contents for an e_url. */ virtual PBoolean OnReceivedPDU( const H225_ServiceControlDescriptor & contents ); /**Handle a sent PDU. Set the PDU fields from in the internal state. Default behaviour sets the contents to an e_url. */ virtual PBoolean OnSendingPDU( H225_ServiceControlDescriptor & contents ) const; /**Handle a change of the state of the Service Control Session. Default behaviour calls endpoint.OnHTTPServiceControl(). */ virtual void OnChange( unsigned type, unsigned sessionId, H323EndPoint & endpoint, H323Connection * connection ) const; serviceType GetType() { return e_NonStandard; }; void GetValue(PString & _ldapURL,PString & _ldapDN) { _ldapURL = ldapURL; _ldapDN = ldapDN; } //@} protected: PString ldapURL; PString ldapDN; }; #endif // H323_H350 #endif // H323_H248 #endif // __OPAL_SVCCTRL_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/q931.h0000644000175000017500000006062711561714523013420 0ustar markmark/* * q931.h * * Q.931 protocol handler * * Open H323 Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: q931.h,v $ * Revision 1.4 2011/05/09 07:35:47 shorne * updates for changes in PTLIB v2.11. The replacement of PDICTIONARY with H323Dictionary. Updates for the changes in the PNatMethod Class. Alteration in PFactory::Create, Remove redundent code and change change logging * * Revision 1.3 2010/01/04 05:57:22 shorne * Added SetCallingSubAddressIE and SetCalledSubAddressIE support * * Revision 1.2 2008/05/23 11:19:59 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:50:50 shorne * First commit of h323plus * * Revision 1.56 2005/11/30 13:05:01 csoutheren * Changed tags for Doxygen * * Revision 1.55 2004/12/10 00:20:22 csoutheren * Fixed typo * * Revision 1.54 2004/12/09 23:37:14 csoutheren * Added new Q.931 termination codes * * Revision 1.53 2004/07/11 11:37:28 rjongbloed * Added ConnectAck support and fixed bugs in ChannelIdentificationIE, thanks Eize Slange * * Revision 1.52 2003/03/18 05:54:14 robertj * Added ChannelIdentifier IE support, thanks Eize Slange * * Revision 1.51 2003/02/12 00:02:06 robertj * Added more Q.931 cause codes. * Added ability to trace text version of cause codes and IE codes. * * Revision 1.50 2002/11/25 22:40:00 robertj * Added another Q.850 code * * Revision 1.49 2002/11/07 03:49:49 robertj * Added extra "congested" Q.931 codes. * * Revision 1.48 2002/09/16 01:14:15 robertj * Added #define so can select if #pragma interface/implementation is used on * platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan. * * Revision 1.47 2002/09/03 05:42:27 robertj * Normalised the multi-include header prevention ifdef/define symbol. * Removed redundent includes. * * Revision 1.46 2002/08/05 10:03:47 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.45 2002/07/05 03:13:35 robertj * Added copy constructor for Q.931 so makes duplicate instead of reference to IE's. * * Revision 1.44 2002/05/22 23:12:01 robertj * Enhanced the display of Release-Complete cause codes. * * Revision 1.43 2002/05/03 05:38:16 robertj * Added Q.931 Keypad IE mechanism for user indications (DTMF). * * Revision 1.42 2002/04/22 08:03:41 craigs * Added Q931 progress codes * * Revision 1.41 2002/04/22 07:33:02 craigs * Changed GetProgressIndicator to be const * Fixed spelling mistake in SignalType enums list * * Revision 1.40 2002/04/18 09:35:00 robertj * Added CallState IE processing. * * Revision 1.39 2002/03/27 06:04:42 robertj * Added Temporary Failure end code for connection, an application may * immediately retry the call if this occurs. * * Revision 1.38 2002/02/08 00:05:14 robertj * Changed release complete causes so can dsitinguish between unknown * cause and no cause at all. * * Revision 1.37 2002/01/07 04:25:41 robertj * Added support for Connected-Number Information Element, thanks Hans Verbeek * * Revision 1.36 2001/09/17 02:06:38 robertj * Added Redirecting Number IE to Q.931, thanks Frank Derks * * Revision 1.35 2001/09/13 02:41:32 robertj * Fixed call reference generation to use full range and common code, thanks Carlo Kielstra * * Revision 1.34 2001/09/12 02:01:33 robertj * Added "No Circuit" release complete code. * * Revision 1.33 2001/08/20 06:48:26 robertj * Added Q.931 function for setting bearer capabilities, allowing * applications to set the data rate as they require. * * Revision 1.32 2001/08/03 14:12:07 robertj * Fixed value for Call State Information Element * * Revision 1.31 2001/07/24 23:40:15 craigs * Added ability to remove Q931 IE * * Revision 1.30 2001/06/14 06:25:13 robertj * Added further H.225 PDU build functions. * Moved some functionality from connection to PDU class. * * Revision 1.29 2001/05/30 04:38:38 robertj * Added BuildStatusEnquiry() Q.931 function, thanks Markus Storm * * Revision 1.28 2001/04/11 00:12:38 robertj * Added some enums for numbering plans and call types, thanks Markus Storm. * * Revision 1.27 2001/02/09 05:16:24 robertj * Added #pragma interface for GNU C++. * * Revision 1.26 2001/01/19 07:01:42 robertj * Added all of the Q.931 message type codes. * * Revision 1.25 2000/10/13 02:15:23 robertj * Added support for Progress Indicator Q.931/H.225 message. * * Revision 1.24 2000/07/09 14:53:17 robertj * Added facility IE to facility message. * Changed reference to the word "field" to be more correct IE or "Information Element" * * Revision 1.23 2000/06/21 08:07:39 robertj * Added cause/reason to release complete PDU, where relevent. * * Revision 1.22 2000/05/18 11:53:34 robertj * Changes to support doc++ documentation generation. * * Revision 1.21 2000/05/09 12:19:23 robertj * Added ability to get and set "distinctive ring" Q.931 functionality. * * Revision 1.20 2000/05/08 14:07:26 robertj * Improved the provision and detection of calling and caller numbers, aliases and hostnames. * * Revision 1.19 2000/05/06 02:17:49 robertj * Changed the new CallingPartyNumber code so defaults for octet3a are application dependent. * * Revision 1.18 2000/05/05 00:44:05 robertj * Added presentation and screening fields to Calling Party Number field, thanks Dean Anderson. * * Revision 1.17 2000/05/02 04:32:25 robertj * Fixed copyright notice comment. * * Revision 1.16 2000/03/21 01:07:21 robertj * Fixed incorrect call reference code being used in originated call. * * Revision 1.15 1999/12/23 22:43:36 robertj * Added calling party number field. * * Revision 1.14 1999/09/10 03:36:48 robertj * Added simple Q.931 Status response to Q.931 Status Enquiry * * Revision 1.13 1999/08/31 12:34:18 robertj * Added gatekeeper support. * * Revision 1.12 1999/08/13 06:34:38 robertj * Fixed problem in CallPartyNumber Q.931 encoding. * Added field name display to Q.931 protocol. * * Revision 1.11 1999/08/10 13:14:15 robertj * Added Q.931 Called Number field if have "phone number" style destination addres. * * Revision 1.10 1999/07/23 02:36:56 robertj * Finally found correct value for FACILITY message. * * Revision 1.9 1999/07/16 02:15:30 robertj * Fixed more tunneling problems. * * Revision 1.8 1999/07/09 06:09:49 robertj * Major implementation. An ENORMOUS amount of stuff added everywhere. * * Revision 1.7 1999/06/13 12:41:14 robertj * Implement logical channel transmitter. * Fixed H245 connect on receiving call. * * Revision 1.6 1999/06/09 05:26:20 robertj * Major restructuring of classes. * * Revision 1.5 1999/02/23 11:04:29 robertj * Added capability to make outgoing call. * * Revision 1.4 1999/01/16 11:31:46 robertj * Fixed name in header comment. * * Revision 1.3 1999/01/16 01:31:39 robertj * Major implementation. * * Revision 1.2 1999/01/02 04:00:55 robertj * Added higher level protocol negotiations. * * Revision 1.1 1998/12/14 09:13:41 robertj * Initial revision * */ #ifndef __OPAL_Q931_H #define __OPAL_Q931_H #ifdef P_USE_PRAGMA #pragma interface #endif #include "ptlib_extras.h" /////////////////////////////////////////////////////////////////////////////// /**This class embodies a Q.931 Protocol Data Unit. */ class Q931 : public PObject { PCLASSINFO(Q931, PObject) public: enum MsgTypes { NationalEscapeMsg = 0x00, AlertingMsg = 0x01, CallProceedingMsg = 0x02, ConnectMsg = 0x07, ConnectAckMsg = 0x0f, ProgressMsg = 0x03, SetupMsg = 0x05, SetupAckMsg = 0x0d, ResumeMsg = 0x26, ResumeAckMsg = 0x2e, ResumeRejectMsg = 0x22, SuspendMsg = 0x25, SuspendAckMsg = 0x2d, SuspendRejectMsg = 0x21, UserInformationMsg = 0x20, DisconnectMsg = 0x45, ReleaseMsg = 0x4d, ReleaseCompleteMsg = 0x5a, RestartMsg = 0x46, RestartAckMsg = 0x4e, SegmentMsg = 0x60, CongestionCtrlMsg = 0x79, InformationMsg = 0x7b, NotifyMsg = 0x6e, StatusMsg = 0x7d, StatusEnquiryMsg = 0x75, FacilityMsg = 0x62 }; Q931(); Q931(const Q931 & other); Q931 & operator=(const Q931 & other); void BuildFacility(int callRef, PBoolean fromDest); void BuildInformation(int callRef, PBoolean fromDest); void BuildProgress( int callRef, PBoolean fromDest, unsigned description, unsigned codingStandard = 0, unsigned location = 0 ); void BuildNotify(int callRef, PBoolean fromDest); void BuildCallProceeding(int callRef); void BuildSetupAcknowledge(int callRef); void BuildAlerting(int callRef); void BuildSetup(int callRef = -1); void BuildConnect(int callRef); void BuildConnectAck(int callRef, PBoolean fromDest); void BuildStatus(int callRef, PBoolean fromDest); void BuildStatusEnquiry(int callRef, PBoolean fromDest); void BuildReleaseComplete(int callRef, PBoolean fromDest); PBoolean Decode(const PBYTEArray & data); PBoolean Encode(PBYTEArray & data) const; void PrintOn(ostream & strm) const; PString GetMessageTypeName() const; static unsigned GenerateCallReference(); unsigned GetCallReference() const { return callReference; } PBoolean IsFromDestination() const { return fromDestination; } MsgTypes GetMessageType() const { return messageType; } enum InformationElementCodes { BearerCapabilityIE = 0x04, CauseIE = 0x08, ChannelIdentificationIE = 0x18, FacilityIE = 0x1c, ProgressIndicatorIE = 0x1e, CallStateIE = 0x14, DisplayIE = 0x28, KeypadIE = 0x2c, SignalIE = 0x34, ConnectedNumberIE = 0x4c, CallingPartyNumberIE = 0x6c, CallingPartySubAddressIE= 0x6d, CalledPartyNumberIE = 0x70, CalledPartySubAddressIE = 0x71, RedirectingNumberIE = 0x74, UserUserIE = 0x7e }; friend ostream & operator<<(ostream & strm, InformationElementCodes ie); PBoolean HasIE(InformationElementCodes ie) const; PBYTEArray GetIE(InformationElementCodes ie) const; void SetIE(InformationElementCodes ie, const PBYTEArray & userData); void RemoveIE(InformationElementCodes ie); enum InformationTransferCapability { TransferSpeech, TransferUnrestrictedDigital = 8, TransferRestrictedDigital = 9, Transfer3_1kHzAudio = 16, TransferUnrestrictedDigitalWithTones = 17, TransferVideo = 24 }; void SetBearerCapabilities( InformationTransferCapability capability, unsigned transferRate, ///< Number of 64k B channels unsigned codingStandard = 0, ///< 0 = ITU-T standardized coding unsigned userInfoLayer1 = 5 ///< 5 = Recommendations H.221 and H.242 ); PBoolean GetBearerCapabilities( InformationTransferCapability & capability, unsigned & transferRate, ///< Number of 64k B channels unsigned * codingStandard = NULL, unsigned * userInfoLayer1 = NULL ); enum CauseValues { UnknownCauseIE = 0, UnallocatedNumber = 1, NoRouteToNetwork = 2, NoRouteToDestination = 3, SendSpecialTone = 4, MisdialledTrunkPrefix = 5, ChannelUnacceptable = 6, CallAwarded = 7, Preemption = 8, PreemptionCircuitReserved = 9, NormalCallClearing = 16, UserBusy = 17, NoResponse = 18, NoAnswer = 19, SubscriberAbsent = 20, CallRejected = 21, NumberChanged = 22, Redirection = 23, ExchangeRoutingError = 25, NonSelectedUserClearing = 26, DestinationOutOfOrder = 27, InvalidNumberFormat = 28, FacilityRejected = 29, StatusEnquiryResponse = 30, NormalUnspecified = 31, NoCircuitChannelAvailable = 34, CallQueued = 35, NetworkOutOfOrder = 38, FrameModeOOS = 39, FrameModeOperational = 40, TemporaryFailure = 41, Congestion = 42, AccessInformationDiscarded = 43, RequestedCircuitNotAvailable = 44, PrecedenceCallBlocked = 46, ResourceUnavailable = 47, QoSNotAvailable = 49, RequestedFacilityNotSubscribed = 50, OutgoingCallsBarred = 52, OutgoingCallsBarredInCUG = 53, IncomingCallsBarred = 54, IncomingCallsBarredInCUG = 55, BearerCapNotAuthorised = 57, BearerCapNotPresentlyAvailable = 58, InconsistentOutgoingIE = 62, ServiceOptionNotAvailable = 63, BearerCapNotImplemented = 65, ChannelTypeNotImplemented = 66, RequestedFacilityNotImplemented = 69, OnlyRestrictedDigitalBearerCapAvailable = 70, ServiceOrOptionNotImplemented = 79, InvalidCallReference = 81, IdentifiedChannelNonExistent = 82, CallIdentifyNotSuspendedCall = 83, CallIdentifyInUse = 84, NoCallSuspended = 85, ClearedRequestedCallIdentity = 86, UserNotInCUG = 87, IncompatibleDestination = 88, NonexistentCUG = 90, InvalidTransitNetwork = 91, InvalidMessageUnspecified = 95, MandatoryIEMissing = 96, MessageTypeNonexistent = 97, MessageNotCompatible = 98, IENonExistantOrNotImplemented = 99, InvalidIEContents = 100, MessageNotCompatibleWithCallState = 101, TimerExpiry = 102, ParameterNonexistent = 103, UnrecognisedParamaterDiscarded = 110, ProtocolErrorUnspecified = 111, InterworkingUnspecified = 127, ErrorInCauseIE = 0x100 }; friend ostream & operator<<(ostream & strm, CauseValues cause); void SetCause( CauseValues value, unsigned standard = 0, ///< 0 = ITU-T standardized coding unsigned location = 0 ///< 0 = User ); CauseValues GetCause( unsigned * standard = NULL, ///< 0 = ITU-T standardized coding unsigned * location = NULL ///< 0 = User ) const; enum CallStates { CallState_Null = 0, CallState_CallInitiated = 1, CallState_OverlapSending = 2, CallState_OutgoingCallProceeding= 3, CallState_CallDelivered = 4, CallState_CallPresent = 6, CallState_CallReceived = 7, CallState_ConnectRequest = 8, CallState_IncomingCallProceeding= 9, CallState_Active = 10, CallState_DisconnectRequest = 11, CallState_DisconnectIndication = 12, CallState_SuspendRequest = 15, CallState_ResumeRequest = 17, CallState_ReleaseRequest = 19, CallState_OverlapReceiving = 25, CallState_ErrorInIE = 0x100 }; void SetCallState( CallStates value, unsigned standard = 0 ///< 0 = ITU-T standardized coding ); CallStates GetCallState( unsigned * standard = NULL ///< 0 = ITU-T standardized coding ) const; enum SignalInfo { SignalDialToneOn, SignalRingBackToneOn, SignalInterceptToneOn, SignalNetworkCongestionToneOn, SignalBusyToneOn, SignalConfirmToneOn, SignalAnswerToneOn, SignalCallWaitingTone, SignalOffhookWarningTone, SignalPreemptionToneOn, SignalTonesOff = 0x3f, SignalAlertingPattern0 = 0x40, SignalAlertingPattern1, SignalAlertingPattern2, SignalAlertingPattern3, SignalAlertingPattern4, SignalAlertingPattern5, SignalAlertingPattern6, SignalAlertingPattern7, SignalAlertingOff = 0x4f, SignalErrorInIE = 0x100 }; void SetSignalInfo(SignalInfo value); SignalInfo GetSignalInfo() const; void SetKeypad(const PString & digits); PString GetKeypad() const; enum ProgressIndication { ProgressNotEndToEndISDN = 1, // Call is not end-to-end ISDN; // further call progress information may be available in-band ProgressDestinationNonISDN = 2, // Destination address is non ISDN ProgressOriginNotISDN = 3, // Origination address is non ISDN ProgressReturnedToISDN = 4, // Call has returned to the ISDN ProgressServiceChange = 5, // Interworking has occurred and has // resulted in a telecommunication service change ProgressInbandInformationAvailable = 8 // In-band information or an appropriate pattern is now available. }; void SetProgressIndicator( unsigned description, unsigned codingStandard = 0, unsigned location = 0 ); PBoolean GetProgressIndicator( unsigned & description, unsigned * codingStandard = NULL, unsigned * location = NULL ) const; void SetDisplayName(const PString & name); PString GetDisplayName() const; enum NumberingPlanCodes { UnknownPlan = 0x00, ISDNPlan = 0x01, DataPlan = 0x03, TelexPlan = 0x04, NationalStandardPlan = 0x08, PrivatePlan = 0x09, ReservedPlan = 0x0f }; enum TypeOfNumberCodes { UnknownType = 0x00, InternationalType = 0x01, NationalType = 0x02, NetworkSpecificType = 0x03, SubscriberType = 0x04, AbbreviatedType = 0x06, ReservedType = 0x07 }; void SetCallingPartyNumber( const PString & number, ///< Number string unsigned plan = 1, ///< 1 = ISDN/Telephony numbering system unsigned type = 0, ///< 0 = Unknown number type int presentation = -1, ///< 0 = presentation allowed, -1 = no octet3a int screening = -1 ///< 0 = user provided, not screened ); PBoolean GetCallingPartyNumber( PString & number, ///< Number string unsigned * plan = NULL, ///< ISDN/Telephony numbering system unsigned * type = NULL, ///< Number type unsigned * presentation = NULL, ///< Presentation indicator unsigned * screening = NULL, ///< Screening indicator unsigned defPresentation = 0, ///< Default value if octet3a not present unsigned defScreening = 0 ///< Default value if octet3a not present ) const; void SetCallingPartySubAddress( const PString & number, ///< Number string unsigned plan = 1, ///< 1 = ISDN/Telephony numbering system unsigned type = 0 ///< 0 = Unknown number type ); PBoolean GetCallingPartySubAddress( PString & number, ///< Number string unsigned * plan = NULL, ///< ISDN/Telephony numbering system unsigned * type = NULL ///< Number type ) const; void SetCalledPartyNumber( const PString & number, ///< Number string unsigned plan = 1, ///< 1 = ISDN/Telephony numbering system unsigned type = 0 ///< 0 = Unknown number type ); PBoolean GetCalledPartyNumber( PString & number, ///< Number string unsigned * plan = NULL, ///< ISDN/Telephony numbering system unsigned * type = NULL ///< Number type ) const; void SetCalledPartySubAddress( const PString & number, ///< Number string unsigned plan = 1, ///< 1 = ISDN/Telephony numbering system unsigned type = 0 ///< 0 = Unknown number type ); PBoolean GetCalledPartySubAddress( PString & number, ///< Number string unsigned * plan = NULL, ///< ISDN/Telephony numbering system unsigned * type = NULL ///< Number type ) const; void SetRedirectingNumber( const PString & number, ///< Number string unsigned plan = 1, ///< 1 = ISDN/Telephony numbering system unsigned type = 0, ///< 0 = Unknown number type int presentation = -1, ///< 0 = presentation allowed, -1 = no octet3a int screening = -1, ///< 0 = user provided, not screened int reason = -1 ///< 0 = Unknown reason , -1 = no octet 3b ); PBoolean GetRedirectingNumber( PString & number, ///< Number string unsigned * plan = NULL, ///< ISDN/Telephony numbering system unsigned * type = NULL, ///< Number type unsigned * presentation = NULL, ///< Presentation indicator unsigned * screening = NULL, ///< Screening indicator unsigned * reason = NULL, ///< Reason for redirection unsigned defPresentation = 0, ///< Default value if octet3a not present unsigned defScreening = 0, ///< Default value if octet3a not present unsigned defReason =0 ///< Default value if octet 3b not present ) const; void SetConnectedNumber( const PString & number, ///< Number string unsigned plan = 1, ///< 1 = ISDN/Telephony numbering system unsigned type = 0, ///< 0 = Unknown number type int presentation = -1, ///< 0 = presentation allowed, -1 = no octet3a int screening = -1, ///< 0 = user provided, not screened int reason = -1 ///< 0 = Unknown reason , -1 = no octet 3b ); PBoolean GetConnectedNumber( PString & number, ///< Number string unsigned * plan = NULL, ///< ISDN/Telephony numbering system unsigned * type = NULL, ///< Number type unsigned * presentation = NULL, ///< Presentation indicator unsigned * screening = NULL, ///< Screening indicator unsigned * reason = NULL, ///< Reason for redirection unsigned defPresentation = 0, ///< Default value if octet3a not present unsigned defScreening = 0, ///< Default value if octet3a not present unsigned defReason =0 ///< Default value if octet 3b not present ) const; /**Set the limitations to ChannelIdentification. - the interface identifier cannot be specified - channel in PRI can only be indicated by number and cannot be indicated by map - one and only one channel can be indicated - the coding standard is always ITU Q.931 */ void SetChannelIdentification( unsigned interfaceType = 0, ///< 0 = basic, 1 = other (e.g. primary) unsigned preferredOrExclusive = 0, ///< 0 = preferred, 1 = exclusive int channelNumber = 1 ///< -1 = any, 0 = none/D, 1 = channel 1/B1, etc. 1-15,17-31 ); /**Get the limitations to ChannelIdentification. */ PBoolean GetChannelIdentification( unsigned * interfaceType = NULL, ///< Interface type unsigned * preferredOrExclusive = NULL, ///< Channel negotiation preference int * channelNumber = NULL ///< Channel number ) const; protected: unsigned callReference; PBoolean fromDestination; unsigned protocolDiscriminator; MsgTypes messageType; H323DICTIONARY(InternalInformationElements, POrdinalKey, PBYTEArray); InternalInformationElements informationElements; }; #endif // __OPAL_Q931_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/h323trans.h0000644000175000017500000003455511623226321014444 0ustar markmark/* * h323trans.h * * H.323 Transactor handler * * Open H323 Library * * Copyright (c) 2003 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $ Id $ * */ #ifndef __OPAL_H323TRANS_H #define __OPAL_H323TRANS_H #ifdef P_USE_PRAGMA #pragma interface #endif #include "transports.h" #include "h235auth.h" #include class H323TransactionPDU { public: H323TransactionPDU(); H323TransactionPDU(const H235Authenticators & auth); virtual ~H323TransactionPDU() { } virtual PBoolean Read(H323Transport & transport); virtual PBoolean Write(H323Transport & transport); virtual PASN_Object & GetPDU() = 0; virtual PASN_Choice & GetChoice() = 0; virtual const PASN_Object & GetPDU() const = 0; virtual const PASN_Choice & GetChoice() const = 0; virtual unsigned GetSequenceNumber() const = 0; virtual unsigned GetRequestInProgressDelay() const = 0; #if PTRACING virtual const char * GetProtocolName() const = 0; #endif virtual H323TransactionPDU * ClonePDU() const = 0; virtual void DeletePDU() = 0; const H235Authenticators & GetAuthenticators() const { return authenticators; } void SetAuthenticators( const H235Authenticators & auth ) { authenticators = auth; } H235Authenticator::ValidationResult Validate( const PASN_Array & clearTokens, unsigned clearOptionalField, const PASN_Array & cryptoTokens, unsigned cryptoOptionalField ) const { return authenticators.ValidatePDU(*this, clearTokens, clearOptionalField, cryptoTokens, cryptoOptionalField, rawPDU); } void Prepare( PASN_Array & clearTokens, unsigned clearOptionalField, PASN_Array & cryptoTokens, unsigned cryptoOptionalField ) { authenticators.PreparePDU(*this, clearTokens, clearOptionalField, cryptoTokens, cryptoOptionalField); } protected: H235Authenticators authenticators; PPER_Stream rawPDU; }; /////////////////////////////////////////////////////////// class H323Transactor : public PObject { PCLASSINFO(H323Transactor, PObject); public: /**@name Construction */ //@{ /**Create a new protocol handler. */ H323Transactor( H323EndPoint & endpoint, ///< Endpoint gatekeeper is associated with. H323Transport * transport, ///< Transport over which to communicate. WORD localPort, ///< Local port to listen on WORD remotePort ///< Remote port to connect on ); H323Transactor( H323EndPoint & endpoint, ///< Endpoint gatekeeper is associated with. const H323TransportAddress & iface, ///< Local interface over which to communicate. WORD localPort, ///< Local port to listen on WORD remotePort ///< Remote port to connect on ); /**Destroy protocol handler. */ ~H323Transactor(); //@} /**@name Overrides from PObject */ //@{ /**Print the name of the gatekeeper. */ void PrintOn( ostream & strm ///< Stream to print to. ) const; //@} /**@name new operations */ //@{ /**Set a new transport for use by the transactor. */ PBoolean SetTransport( const H323TransportAddress & iface ///< Local interface for transport ); /**Return the list of addresses used for this peer element */ H323TransportAddressArray GetInterfaceAddresses( PBoolean excludeLocalHost = TRUE, ///< Flag to exclude 127.0.0.1 H323Transport * associatedTransport = NULL ///< Associated transport for precedence and translation ); /**Start the channel processing transactions */ virtual PBoolean StartChannel(); /**Stop the channel processing transactions. Must be called in each descendants destructor. */ virtual void StopChannel(); /**Create the transaction PDU for reading. */ virtual H323TransactionPDU * CreateTransactionPDU() const = 0; /**Handle and dispatch a transaction PDU */ virtual PBoolean HandleTransaction( const PASN_Object & rawPDU ) = 0; /**Allow for modifications to PDU on send. */ virtual void OnSendingPDU( PASN_Object & rawPDU ) = 0; /**Write PDU to transport after executing callback. */ virtual PBoolean WritePDU( H323TransactionPDU & pdu ); /**Write PDU to transport after executing callback. */ virtual PBoolean WriteTo( H323TransactionPDU & pdu, const H323TransportAddressArray & addresses, PBoolean callback = TRUE ); //@} /**@name Member variable access */ //@{ /**Get the gatekeepers associated endpoint. */ H323EndPoint & GetEndPoint() const { return endpoint; } /**Get the gatekeepers transport channel. */ H323Transport & GetTransport() const { return *transport; } /**Set flag to check all crypto tokens on responses. */ void SetCheckResponseCryptoTokens( PBoolean value ///< New value for checking crypto tokens. ) { checkResponseCryptoTokens = value; } /**Get flag to check all crypto tokens on responses. */ PBoolean GetCheckResponseCryptoTokens() { return checkResponseCryptoTokens; } //@} class Request : public PObject { PCLASSINFO(Request, PObject); public: Request( unsigned seqNum, H323TransactionPDU & pdu ); Request( unsigned seqNum, H323TransactionPDU & pdu, const H323TransportAddressArray & addresses ); PBoolean Poll(H323Transactor &); void CheckResponse(unsigned, const PASN_Choice *); void OnReceiveRIP(unsigned milliseconds); // Inter-thread transfer variables unsigned rejectReason; void * responseInfo; H323TransportAddressArray requestAddresses; unsigned sequenceNumber; H323TransactionPDU & requestPDU; PTimeInterval whenResponseExpected; PSyncPoint responseHandled; PMutex responseMutex; enum { AwaitingResponse, ConfirmReceived, RejectReceived, TryAlternate, BadCryptoTokens, RequestInProgress, NoResponseReceived } responseResult; }; protected: void Construct(); unsigned GetNextSequenceNumber(); PBoolean SetUpCallSignalAddresses( H225_ArrayOf_TransportAddress & addresses ); //Background thread handler. PDECLARE_NOTIFIER(PThread, H323Transactor, HandleTransactions); virtual PBoolean MakeRequest( Request & request ); PBoolean CheckForResponse( unsigned, unsigned, const PASN_Choice * = NULL ); PBoolean HandleRequestInProgress( const H323TransactionPDU & pdu, unsigned delay ); PBoolean CheckCryptoTokens( const H323TransactionPDU & pdu, const PASN_Array & clearTokens, unsigned clearOptionalField, const PASN_Array & cryptoTokens, unsigned cryptoOptionalField ); void AgeResponses(); PBoolean SendCachedResponse( const H323TransactionPDU & pdu ); class Response : public PString { PCLASSINFO(Response, PString); public: Response(const H323TransportAddress & addr, unsigned seqNum); ~Response(); void SetPDU(const H323TransactionPDU & pdu); PBoolean SendCachedResponse(H323Transport & transport); PTime lastUsedTime; PTimeInterval retirementAge; H323TransactionPDU * replyPDU; }; // Configuration variables H323EndPoint & endpoint; WORD defaultLocalPort; WORD defaultRemotePort; H323Transport * transport; PBoolean checkResponseCryptoTokens; unsigned nextSequenceNumber; PMutex nextSequenceNumberMutex; H323Dictionary requests; PMutex requestsMutex; Request * lastRequest; PMutex pduWriteMutex; PSortedList responses; }; //////////////////////////////////////////////////////////////////////////////////// class H323Transaction : public PObject { PCLASSINFO(H323Transaction, PObject); public: /**@name Construction */ //@{ /**Create a new transaction handler. */ H323Transaction( H323Transactor & transactor, const H323TransactionPDU & requestToCopy, H323TransactionPDU * confirm, H323TransactionPDU * reject ); ~H323Transaction(); //@} enum Response { Ignore = -2, Reject = -1, Confirm = 0 }; inline static Response InProgress(unsigned time) { return (Response)(time&0xffff); } virtual H323TransactionPDU * CreateRIP( unsigned sequenceNumber, unsigned delay ) const = 0; PBoolean HandlePDU(); virtual PBoolean WritePDU( H323TransactionPDU & pdu ); PBoolean CheckCryptoTokens( const H235Authenticators & authenticators ); #if PTRACING virtual const char * GetName() const = 0; #endif virtual H235Authenticator::ValidationResult ValidatePDU() const = 0; virtual void SetRejectReason( unsigned reasonCode ) = 0; PBoolean IsFastResponseRequired() const { return fastResponseRequired && canSendRIP; } PBoolean CanSendRIP() const { return canSendRIP; } H323TransportAddress GetReplyAddress() const { return replyAddresses[0]; } const H323TransportAddressArray & GetReplyAddresses() const { return replyAddresses; } PBoolean IsBehindNAT() const { return isBehindNAT; } H323Transactor & GetTransactor() const { return transactor; } H235Authenticator::ValidationResult GetAuthenticatorResult() const { return authenticatorResult; } protected: virtual Response OnHandlePDU() = 0; PDECLARE_NOTIFIER(PThread, H323Transaction, SlowHandler); H323Transactor & transactor; unsigned requestSequenceNumber; H323TransportAddressArray replyAddresses; PBoolean fastResponseRequired; H323TransactionPDU * request; H323TransactionPDU * confirm; H323TransactionPDU * reject; H235Authenticators authenticators; H235Authenticator::ValidationResult authenticatorResult; PBoolean isBehindNAT; PBoolean canSendRIP; }; /////////////////////////////////////////////////////////// class H323TransactionServer : public PObject { PCLASSINFO(H323TransactionServer, PObject); public: /**@name Construction */ //@{ /**Create a new gatekeeper. */ H323TransactionServer( H323EndPoint & endpoint ); /**Destroy gatekeeper. */ ~H323TransactionServer(); //@} virtual WORD GetDefaultUdpPort() = 0; /**@name Access functions */ //@{ /**Get the owner endpoint. */ H323EndPoint & GetOwnerEndPoint() const { return ownerEndPoint; } /**@name Protocol Handler Operations */ //@{ /**Add listeners to the transaction server. If a listener already exists on the interface specified in the list then it is ignored. If a listener does not yet exist a new one is created and if a listener is running that is not in the list then it is stopped and removed. If the array is empty then the string "*" is assumed which will listen on the standard UDP port on INADDR_ANY. Returns TRUE if at least one interface was successfully started. */ PBoolean AddListeners( const H323TransportAddressArray & ifaces ///< Interfaces to listen on. ); /**Add a gatekeeper listener to this gatekeeper server given the transport address for the local interface. */ PBoolean AddListener( const H323TransportAddress & interfaceName ); /**Add a gatekeeper listener to this gatekeeper server given the transport. Note that the transport is then owned by the listener and will be deleted automatically when the listener is destroyed. Note also the transport is deleted if this function returns FALSE and no listener was created. */ PBoolean AddListener( H323Transport * transport ); /**Add a gatekeeper listener to this gatekeeper server. Note that the gatekeeper listener is then owned by the gatekeeper server and will be deleted automatically when the listener is removed. Note also the listener is deleted if this function returns FALSE and the listener was not used. */ PBoolean AddListener( H323Transactor * listener ); /**Create a new H323GatkeeperListener. The user woiuld not usually use this function as it is used internally by the server when new listeners are added by H323TransportAddress. However, a user may override this function to create objects that are user defined descendants of H323GatekeeperListener so the user can maintain extra information on a interface by interface basis. */ virtual H323Transactor * CreateListener( H323Transport * transport ///< Transport for listener ) = 0; /**Remove a gatekeeper listener from this gatekeeper server. The gatekeeper listener is automatically deleted. */ PBoolean RemoveListener( H323Transactor * listener ); PBoolean SetUpCallSignalAddresses(H225_ArrayOf_TransportAddress & addresses); //@} protected: H323EndPoint & ownerEndPoint; PThread * monitorThread; PSyncPoint monitorExit; PMutex mutex; H323LIST(ListenerList, H323Transactor); ListenerList listeners; PBoolean usingAllInterfaces; }; #endif // __OPAL_H323TRANS_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/h323caps.h0000644000175000017500000030300611636526526014247 0ustar markmark/* * h323caps.h * * H.323 protocol handler * * Open H323 Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Contributor(s): ______________________________________. * * $Id: h323caps.h,v 1.30 2011/09/22 03:36:54 shorne Exp $ * */ #ifndef __OPAL_H323CAPS_H #define __OPAL_H323CAPS_H #ifdef P_USE_PRAGMA #pragma interface #endif #ifdef _MSC_VER #include "../include/codecs.h" #else #include "codecs.h" #endif #include "channels.h" #include "mediafmt.h" /* The following classes have forward references to avoid including the VERY large header files for H225 and H245. If an application requires access to the protocol classes they can include them, but for simple usage their inclusion can be avoided. */ class PASN_Choice; class PASN_Sequence; class H245_Capability; class H245_DataType; class H245_ModeElement; class H245_AudioCapability; class H245_AudioMode; class H245_VideoCapability; class H245_ExtendedVideoCapability; class H245_VideoMode; class H245_DataApplicationCapability; class H245_DataMode; class H245_DataProtocolCapability; class H245_GenericCapability; class H245_CapabilityIdentifier; class H245_GenericParameter; class H245_H2250LogicalChannelParameters; class H245_H223LogicalChannelParameters; class H245_TerminalCapabilitySet; class H245_NonStandardParameter; class H323Connection; class H323Capabilities; /////////////////////////////////////////////////////////////////////////////// /**This class describes the interface to a capability of the endpoint, usually a codec, used to transfer data via the logical channels opened and managed by the H323 control channel. Note that this is not an instance of the codec itself. Merely the description of that codec. There is typically only one instance of this class contained in the capability tables of the endpoint. There may be several instances of the actualy codec managing the conversion of an individual stream of data. An application may create a descendent off this class and override functions as required for describing a codec that it implements. */ class OpalFactoryCodec; class H323Capability : public PObject { PCLASSINFO(H323Capability, PObject); public: /**@name Construction */ //@{ /**Create a new capability specification. */ H323Capability(); //@} /**@name Overrides from class PObject */ //@{ /**Compare two capability instances. This compares the main and sub-types of the capability. */ Comparison Compare(const PObject & obj) const; /**Print out the object to the stream, virtual version of << operator. */ void PrintOn(ostream & strm) const; //@} /**@name Identification functions */ //@{ enum MainTypes { /// Audio codec capability e_Audio, /// Video codec capability e_Video, /// Arbitrary data capability e_Data, /// User Input capability e_UserInput, /// Video Extention e_ExtendVideo, /// Generic Control e_GenericControl, /// Conference Control e_ConferenceControl, /// Security Capability e_Security, /// Count of main types e_NumMainTypes }; /**Get the main type of the capability. This function is overridden by one of the three main sub-classes off which real capabilities would be descendend. */ virtual MainTypes GetMainType() const = 0; /**Get the sub-type of the capability. This is a code dependent on the main type of the capability. */ virtual unsigned GetSubType() const = 0; /**Get Generic Identifier Default returns PString::Empty */ virtual PString GetIdentifier() const; /**Get the name of the media data format this class represents. */ virtual PString GetFormatName() const = 0; //@} /**@name Operations */ //@{ /**Create an H323Capability descendant given a string name. This uses the registration system to create the capability. */ static H323Capability * Create( const PString & name ///< Name of capability ); /** * provided for backwards compatibility */ static H323Capability * Create( H323EndPoint &, ///< endpoint (not used) const PString & name ///< Name of capability ) { return Create(name); } /** *Create a factory codec instance based on the codec name */ static OpalFactoryCodec * CreateCodec(MainTypes ctype, PBoolean isEncoder, const PString & name); /** *List all the codecs loaded in the plugin factory */ static void CodecListing(MainTypes ctype, PBoolean isEncoder, PStringList & listing); /**Get the default RTP session. This function gets the default RTP session ID for the capability type. For example audio capabilities return the value RTP_Session::DefaultAudioSessionID etc. The default behaviour returns zero, indicating it is not an RTP based capability. */ virtual unsigned GetDefaultSessionID() const; /**Set the maximum size (in frames) of data that will be transmitted in a single PDU. This will also be the desired number that will be sent by most codec implemetations. The default behaviour does nothing. */ virtual void SetTxFramesInPacket( unsigned frames ///< Number of frames per packet ); /**Get the maximum size (in frames) of data that will be transmitted in a single PDU. The default behaviour returns the value 1. */ virtual unsigned GetTxFramesInPacket() const; /**Get the maximum size (in frames) of data that can be received in a single PDU. The default behaviour returns the value 1. */ virtual unsigned GetRxFramesInPacket() const; enum CapabilityFrameSize { sqcifMPI, qcifMPI, cifMPI, cif4MPI, cif16MPI, i480MPI, p720MPI, i1080MPI }; /**Set the Maximum Frame Size of the Video Capability. This is used for set Capabilities to only utilise the specified Max FrameSizes. The default behaviour returns False. */ virtual PBoolean SetMaxFrameSize( CapabilityFrameSize /*framesize*/, int /*frameUnits*/) { return FALSE; }; /**Set the custom encoder size. This is used to set the level and bitrate for a given width/Height/frameRate. The default behaviour returns False. */ virtual PBoolean SetCustomEncode( unsigned /*width*/, unsigned /*height*/, unsigned /*rate*/) { return FALSE; }; /**Set the MPI value. This is used to set the individual MPI values for a capability. */ virtual PBoolean SetMPIValue( const PString & /*param*/, int /*value*/, PBoolean /*zero*/ ) { return FALSE; }; /**Create the channel instance, allocating resources as required. This creates a logical channel object appropriate for the parameters provided. Not if param is NULL, sessionID must be provided, otherwise this is taken from the fields in param. */ virtual H323Channel * CreateChannel( H323Connection & connection, ///< Owner connection for channel H323Channel::Directions dir, ///< Direction of channel unsigned sessionID, ///< Session ID for RTP channel const H245_H2250LogicalChannelParameters * param ///< Parameters for channel ) const = 0; /**Create the codec instance, allocating resources as required. */ virtual H323Codec * CreateCodec( H323Codec::Direction direction ///< Direction in which this instance runs ) const = 0; //@} /**@name Protocol manipulation */ //@{ enum CommandType { e_TCS, e_OLC, e_ReqMode }; /**This function is called whenever and outgoing TerminalCapabilitySet PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour is pure. */ virtual PBoolean OnSendingPDU( H245_Capability & pdu ///< PDU to set information on ) const = 0; /**This function is called whenever and outgoing OpenLogicalChannel PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour is pure. */ virtual PBoolean OnSendingPDU( H245_DataType & pdu ///< PDU to set information on ) const = 0; /**This function is called whenever and outgoing RequestMode PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour is pure. */ virtual PBoolean OnSendingPDU( H245_ModeElement & pdu ///< PDU to set information on ) const = 0; /**This function is called whenever and incoming TerminalCapabilitySet PDU is received on the control channel, and a new H323Capability descendent was created. This completes reading fields from the PDU into the classes members. If the function returns FALSE then the received PDU codec description is not supported, so will be ignored. The default behaviour sets the capabilityDirection member variable from the PDU and then returns TRUE. Note that this means it is very important to call the ancestor function when overriding. */ virtual PBoolean OnReceivedPDU( const H245_Capability & pdu ///< PDU to get information from ); /**This function is called whenever and incoming OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. The default behaviour is pure. */ virtual PBoolean OnReceivedPDU( const H245_DataType & pdu, ///< PDU to get information from PBoolean receiver ///< Is receiver OLC ) = 0; /**Compare the PDU part of the capability. */ virtual PBoolean IsMatch( const PASN_Choice & subTypePDU ///< sub-type PDU of H323Capability ) const; /**Validate that the capability is usable given the connection. This checks agains the negotiated protocol version number and remote application to determine if this capability should be used in TCS or OLC pdus. The default behaviour returns TRUE. */ virtual PBoolean IsUsable( const H323Connection & connection ) const; //@} /**@name Member variable access */ //@{ enum CapabilityDirection { e_Unknown, e_Receive, e_Transmit, e_ReceiveAndTransmit, e_NoDirection, NumCapabilityDirections }; /**Get the direction for this capability. */ CapabilityDirection GetCapabilityDirection() const { return capabilityDirection; } /**Set the direction for this capability. */ void SetCapabilityDirection( CapabilityDirection dir ///< New direction code ) { capabilityDirection = dir; } /// Get unique capability number. virtual unsigned GetCapabilityNumber() const { return assignedCapabilityNumber; } /// Set unique capability number. virtual void SetCapabilityNumber(unsigned num) { assignedCapabilityNumber = num; } //// Set Associated Capability Number virtual void SetAssociatedCapability(unsigned) {}; //// Set Capability List virtual void SetCapabilityList(H323Capabilities *) {}; /**Get media format of the media data this class represents. */ const OpalMediaFormat & GetMediaFormat() const; OpalMediaFormat & GetWritableMediaFormat(); /// Get the payload type for the capaibility RTP_DataFrame::PayloadTypes GetPayloadType() const { return rtpPayloadType; } /// Attach a QoS specification to this channel virtual void AttachQoS(RTP_QOS *) {} //@} #if PTRACING friend ostream & operator<<(ostream & o , MainTypes t); friend ostream & operator<<(ostream & o , CapabilityDirection d); #endif protected: unsigned assignedCapabilityNumber; /// Unique ID assigned to capability CapabilityDirection capabilityDirection; RTP_DataFrame::PayloadTypes rtpPayloadType; private: OpalMediaFormat mediaFormat; }; /**This class describes the interface to a non-standard codec used to transfer data via the logical channels opened and managed by the H323 control channel. It is expected that an application makes a descendent off H323NonStandardAudioCapability or H323NonStandardVideoCapability which multiply inherit from this class. */ class H323NonStandardCapabilityInfo { public: typedef PObject::Comparison (*CompareFuncType)(struct PluginCodec_H323NonStandardCodecData *); /**Create a new set of information about a non-standard codec. */ H323NonStandardCapabilityInfo( CompareFuncType compareFunc, const BYTE * dataBlock, ///< Non-Standard data for codec type PINDEX dataSize ///< Size of dataBlock. If 0 and dataBlock != NULL use strlen(dataBlock) ); H323NonStandardCapabilityInfo( const BYTE * dataBlock, ///< Non-Standard data for codec type PINDEX dataSize, ///< Size of dataBlock. If 0 and dataBlock != NULL use strlen(dataBlock) PINDEX comparisonOffset = 0, ///< Offset into dataBlock to compare PINDEX comparisonLength = P_MAX_INDEX ///< Length of bytes to compare ); /**Create a new set of information about a non-standard codec. */ H323NonStandardCapabilityInfo( const PString & oid, const BYTE * dataBlock, ///< Non-Standard data for codec type PINDEX dataSize, ///< Size of dataBlock. If 0 and dataBlock != NULL use strlen(dataBlock) PINDEX comparisonOffset = 0, PINDEX comparisonLength = P_MAX_INDEX ); /**Create a new set of information about a non-standard codec. */ H323NonStandardCapabilityInfo( BYTE country, ///< t35 information BYTE extension, ///< t35 information WORD maufacturer, ///< t35 information const BYTE * dataBlock, ///< Non-Standard data for codec type PINDEX dataSize, ///< Size of dataBlock. If 0 and dataBlock != NULL use strlen(dataBlock) PINDEX comparisonOffset = 0, ///< Offset into dataBlock to compare PINDEX comparisonLength = P_MAX_INDEX ///< Length of bytes to compare ); /**Destroy the capability information */ virtual ~H323NonStandardCapabilityInfo(); /**This function gets the non-standard data field. The default behaviour sets data to fixedData. */ virtual PBoolean OnSendingPDU( PBYTEArray & data ///< Data field in PDU to send ) const; /**This function validates and uses the non-standard data field. The default behaviour returns TRUE if data is equal to fixedData. */ virtual PBoolean OnReceivedPDU( const PBYTEArray & data ///< Data field in PDU received ); PBoolean IsMatch(const H245_NonStandardParameter & param) const; protected: PBoolean OnSendingNonStandardPDU( PASN_Choice & pdu, unsigned nonStandardTag ) const; PBoolean OnReceivedNonStandardPDU( const PASN_Choice & pdu, unsigned nonStandardTag ); PObject::Comparison CompareParam( const H245_NonStandardParameter & param ) const; PObject::Comparison CompareInfo( const H323NonStandardCapabilityInfo & obj ) const; PObject::Comparison CompareData( const PBYTEArray & data ///< Data field in PDU received ) const; PString oid; BYTE t35CountryCode; BYTE t35Extension; WORD manufacturerCode; PBYTEArray nonStandardData; PINDEX comparisonOffset; PINDEX comparisonLength; CompareFuncType compareFunc; }; /**This class describes the interface to a generic codec used to transfer data via the logical channels opened and managed by the H323 control channel. It is expected that an application makes a descendent off H323GenericAudioCapability or H323GenericVideoCapability which multiply inherit from this class. */ class H323GenericCapabilityInfo { public: H323GenericCapabilityInfo( const PString &capabilityId, ///< generic codec identifier PINDEX maxBitRate = 0 ///< maxBitRate parameter for the GenericCapability ); H323GenericCapabilityInfo(const H323GenericCapabilityInfo &obj); virtual ~H323GenericCapabilityInfo(); PBoolean IsMatch( const H245_GenericCapability & param ///< Non standard field in PDU received ) const; protected: virtual PBoolean OnSendingGenericPDU( H245_GenericCapability & pdu, const OpalMediaFormat & mediaFormat, H323Capability::CommandType type ) const; virtual PBoolean OnReceivedGenericPDU( OpalMediaFormat & mediaFormat, const H245_GenericCapability & pdu, H323Capability::CommandType type ); PObject::Comparison CompareInfo( const H323GenericCapabilityInfo & obj ) const; H245_CapabilityIdentifier * identifier; unsigned maxBitRate; }; /**This class describes the interface to a codec that has channels based on the RTP protocol. An application may create a descendent off this class and override functions as required for descibing the codec. */ class PAec; class H323RealTimeCapability : public H323Capability { PCLASSINFO(H323RealTimeCapability, H323Capability); public: /**@name Operations */ //@{ /**Create the channel instance, allocating resources as required. */ virtual H323Channel * CreateChannel( H323Connection & connection, ///< Owner connection for channel H323Channel::Directions dir, ///< Direction of channel unsigned sessionID, ///< Session ID for RTP channel const H245_H2250LogicalChannelParameters * param ///< Parameters for channel ) const; H323RealTimeCapability(); H323RealTimeCapability(const H323RealTimeCapability &rtc); virtual ~H323RealTimeCapability(); virtual void AttachQoS(RTP_QOS * _rtpqos); protected: RTP_QOS * rtpqos; //@} }; #ifndef NO_H323_AUDIO /**This class describes the interface to an audio codec used to transfer data via the logical channels opened and managed by the H323 control channel. An application may create a descendent off this class and override functions as required for descibing the codec. */ class H323AudioCapability : public H323RealTimeCapability { PCLASSINFO(H323AudioCapability, H323RealTimeCapability); public: /**@name Construction */ //@{ /**Create an audio based capability. */ H323AudioCapability( unsigned rxPacketSize, ///< Maximum size of an audio packet in frames unsigned txPacketSize ///< Desired transmit size of an audio packet frames ); //@} /**@name Identification functions */ //@{ /**Get the main type of the capability. Always returns e_Audio. */ virtual MainTypes GetMainType() const; //@} /**@name Operations */ //@{ /**Get the default RTP session. This function gets the default RTP session ID for the capability type. For example audio capabilities return the value RTP_Session::DefaultAudioSessionID etc. The default behaviour returns zero, indicating it is not an RTP based capability. */ virtual unsigned GetDefaultSessionID() const; /**Set the maximum size (in frames) of data that will be transmitted in a single PDU. This will also be the desired number that will be sent by most codec implemetations. The default behaviour sets the txFramesInPacket variable. */ virtual void SetTxFramesInPacket( unsigned frames ///< Number of frames per packet ); /**Get the maximum size (in frames) of data that will be transmitted in a single PDU. The default behaviour sends the txFramesInPacket variable. */ virtual unsigned GetTxFramesInPacket() const; /**Get the maximum size (in frames) of data that can be received in a single PDU. The default behaviour sends the rxFramesInPacket variable. */ virtual unsigned GetRxFramesInPacket() const; /** Set Audio DiffServ Value Use This to override the default DSCP value */ static void SetDSCPvalue(int newValue); /** Get the current Audio DSCP value */ static int GetDSCPvalue(); /**@name Protocol manipulation */ //@{ /**This function is called whenever and outgoing TerminalCapabilitySet PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls the OnSendingPDU() function with a more specific PDU type. */ virtual PBoolean OnSendingPDU( H245_Capability & pdu ///< PDU to set information on ) const; /**This function is called whenever and outgoing OpenLogicalChannel PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls the OnSendingPDU() function with a more specific PDU type. */ virtual PBoolean OnSendingPDU( H245_DataType & pdu ///< PDU to set information on ) const; /**This function is called whenever and outgoing RequestMode PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls the OnSendingPDU() function with a more specific PDU type. */ virtual PBoolean OnSendingPDU( H245_ModeElement & pdu ///< PDU to set information on ) const; /**This function is called whenever and outgoing TerminalCapabilitySet or OpenLogicalChannel PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour assumes the pdu is an integer number of frames per packet. */ virtual PBoolean OnSendingPDU( H245_AudioCapability & pdu, ///< PDU to set information on unsigned packetSize ///< Packet size to use in capability ) const; virtual PBoolean OnSendingPDU( H245_AudioCapability & pdu, ///< PDU to set information on unsigned packetSize, ///< Packet size to use in capability CommandType type ///< Type of PDU to send in ) const; /**This function is called whenever and outgoing RequestMode PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour sets the PDUs tag according to the GetSubType() function (translated to different enum). */ virtual PBoolean OnSendingPDU( H245_AudioMode & pdu ///< PDU to set information on ) const; /**This function is called whenever and incoming TerminalCapabilitySet PDU is received on the control channel, and a new H323Capability descendent was created. This completes reading fields from the PDU into the classes members. If the function returns FALSE then the received PDU codec description is not supported, so will be ignored. The default behaviour calls the OnReceivedPDU() that takes a H245_AudioCapability and clamps the txFramesInPacket. */ virtual PBoolean OnReceivedPDU( const H245_Capability & pdu ///< PDU to get information from ); /**This function is called whenever and incoming OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. The default behaviour calls the OnReceivedPDU() that takes a H245_AudioCapability and clamps the txFramesInPacket or rxFramesInPacket. */ virtual PBoolean OnReceivedPDU( const H245_DataType & pdu, ///< PDU to get information from PBoolean receiver ///< Is receiver OLC ); /**This function is called whenever and incoming TerminalCapabilitySet or OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. The default behaviour assumes the pdu is an integer number of frames per packet. */ virtual PBoolean OnReceivedPDU( const H245_AudioCapability & pdu, ///< PDU to get information from unsigned & packetSize ///< Packet size to use in capability ); virtual PBoolean OnReceivedPDU( const H245_AudioCapability & pdu, ///< PDU to get information from unsigned & packetSize, ///< Packet size to use in capability CommandType type ///< Type of PDU to send in ); //@} protected: unsigned rxFramesInPacket; unsigned txFramesInPacket; static int DSCPvalue; ///< DiffServ Value }; /**This class describes the interface to a non-standard audio codec used to transfer data via the logical channels opened and managed by the H323 control channel. An application may create a descendent off this class and override functions as required for descibing the codec. */ class H323NonStandardAudioCapability : public H323AudioCapability, public H323NonStandardCapabilityInfo { PCLASSINFO(H323NonStandardAudioCapability, H323AudioCapability); public: /**@name Construction */ //@{ /**Create a new set of information about a non-standard codec. */ H323NonStandardAudioCapability( unsigned maxPacketSize, ///< Maximum size of an audio packet in frames unsigned desiredPacketSize, ///< Desired transmit size of an audio packet in frames H323NonStandardCapabilityInfo::CompareFuncType compareFunc, const BYTE * dataBlock, ///< Non-Standard data for codec type PINDEX dataSize ///< Size of dataBlock. If 0 and dataBlock != NULL use strlen(dataBlock) ); H323NonStandardAudioCapability( unsigned maxPacketSize, ///< Maximum size of an audio packet in frames unsigned desiredPacketSize, ///< Desired transmit size of an audio packet in frames const BYTE * dataBlock, ///< Non-Standard data for codec type PINDEX dataSize, ///< Size of dataBlock. If 0 and dataBlock != NULL use strlen(dataBlock) PINDEX comparisonOffset = 0, ///< Offset into dataBlock to compare PINDEX comparisonLength = P_MAX_INDEX ///< Length of bytes to compare ); /** * provided for backwards compatibility */ H323NonStandardAudioCapability( unsigned maxPacketSize, ///< Maximum size of an audio packet in frames unsigned desiredPacketSize, ///< Desired transmit size of an audio packet in frames H323EndPoint &, H323NonStandardCapabilityInfo::CompareFuncType compareFunc, const BYTE * dataBlock, ///< Non-Standard data for codec type PINDEX dataSize ///< Size of dataBlock. If 0 and dataBlock != NULL use strlen(dataBlock) ); H323NonStandardAudioCapability( unsigned maxPacketSize, ///< Maximum size of an audio packet in frames unsigned desiredPacketSize, ///< Desired transmit size of an audio packet in frames H323EndPoint &, const BYTE * dataBlock, ///< Non-Standard data for codec type PINDEX dataSize, ///< Size of dataBlock. If 0 and dataBlock != NULL use strlen(dataBlock) PINDEX comparisonOffset = 0, ///< Offset into dataBlock to compare PINDEX comparisonLength = P_MAX_INDEX ///< Length of bytes to compare ); /**Create a new set of information about a non-standard codec. */ H323NonStandardAudioCapability( unsigned maxPacketSize, ///< Maximum size of an audio packet in frames unsigned desiredPacketSize, ///< Desired transmit size of an audio packet in frames const PString & oid, ///< OID for indentification of codec const BYTE * dataBlock, ///< Non-Standard data for codec type PINDEX dataSize, ///< Size of dataBlock. If 0 and dataBlock != NULL use strlen(dataBlock) PINDEX comparisonOffset = 0, ///< Offset into dataBlock to compare PINDEX comparisonLength = P_MAX_INDEX ///< Length of bytes to compare ); /**Create a new set of information about a non-standard codec. */ H323NonStandardAudioCapability( unsigned maxPacketSize, ///< Maximum size of an audio packet in frames unsigned desiredPacketSize, ///< Desired transmit size of an audio packet in frames BYTE country, ///< t35 information BYTE extension, ///< t35 information WORD maufacturer, ///< t35 information const BYTE * dataBlock, ///< Non-Standard data for codec type PINDEX dataSize, ///< Size of dataBlock. If 0 and dataBlock != NULL use strlen(dataBlock) PINDEX comparisonOffset = 0, ///< Offset into dataBlock to compare PINDEX comparisonLength = P_MAX_INDEX ///< Length of bytes to compare ); //@} /**@name Overrides from class PObject */ //@{ /**Compare two capability instances. This compares the main and sub-types of the capability. */ Comparison Compare(const PObject & obj) const; //@} /**@name Identification functions */ //@{ /**Get the sub-type of the capability. This is a code dependent on the main type of the capability. This returns H245_AudioCapability::e_nonStandard. */ virtual unsigned GetSubType() const; //@} /**@name Protocol manipulation */ //@{ /**This function is called whenever and outgoing TerminalCapabilitySet or OpenLogicalChannel PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls H323NonStandardCapabilityinfo::OnSendingPDU() to handle the PDU. */ virtual PBoolean OnSendingPDU( H245_AudioCapability & pdu, ///< PDU to set information on unsigned packetSize ///< Packet size to use in capability ) const; /**This function is called whenever and outgoing RequestMode PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls H323NonStandardCapabilityinfo::OnSendingPDU() to handle the PDU. */ virtual PBoolean OnSendingPDU( H245_AudioMode & pdu ///< PDU to set information on ) const; /**This function is called whenever and incoming TerminalCapabilitySet or OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. The default behaviour calls H323NonStandardCapabilityinfo::OnReceivedPDU() to handle the provided PDU. */ virtual PBoolean OnReceivedPDU( const H245_AudioCapability & pdu, ///< PDU to get information from unsigned & packetSize ///< Packet size to use in capability ); /**Compare the nonStandardData part of the capability, if applicable. */ virtual PBoolean IsMatch( const PASN_Choice & subTypePDU ///< sub-type PDU of H323Capability ) const; //@} }; /**This class describes the interface to a generic audio codec used to transfer data via the logical channels opened and managed by the H323 control channel. An application may create a descendent off this class and override functions as required for descibing the codec. */ class H323GenericAudioCapability : public H323AudioCapability, public H323GenericCapabilityInfo { PCLASSINFO(H323NonStandardAudioCapability, H323AudioCapability); public: /**@name Construction */ //@{ /**Create a new set of information about a non-standard codec. */ H323GenericAudioCapability( unsigned maxPacketSize, ///< Maximum size of an audio packet in frames unsigned desiredPacketSize, ///< Desired transmit size of an audio packet in frames const PString &capabilityId, ///< generic codec identifier PINDEX maxBitRate = 0 ///< maxBitRate parameter for the GenericCapability ); //@} /**@name Overrides from class PObject */ //@{ /**Compare two capability instances. This compares the main and sub-types of the capability. */ Comparison Compare(const PObject & obj) const; //@} /**@name Identification functions */ //@{ /**Get the sub-type of the capability. This is a code dependent on the main type of the capability. This returns H245_AudioCapability::e_genericCapability. */ virtual unsigned GetSubType() const; /**Get the OID of the capability. This returns a string representation of the capability OID. */ virtual PString GetIdentifier() const; //@} /**@name Protocol manipulation */ //@{ /**This function is called whenever and outgoing TerminalCapabilitySet or OpenLogicalChannel PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls H323GenericCapabilityinfo::OnSendingPDU() to handle the PDU. */ virtual PBoolean OnSendingPDU( H245_AudioCapability & pdu, ///< PDU to set information on unsigned packetSize, ///< Packet size to use in capability CommandType type ///< Type of PDU to send in ) const; /**This function is called whenever and outgoing RequestMode PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour sets the PDUs tag according to the GetSubType() function (translated to different enum). */ virtual PBoolean OnSendingPDU( H245_AudioMode & pdu ///< PDU to set information on ) const; /**This function is called whenever and incoming TerminalCapabilitySet or OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. The default behaviour calls H323GenericCapabilityinfo::OnReceivedPDU() to handle the provided PDU. */ virtual PBoolean OnReceivedPDU( const H245_AudioCapability & pdu, ///< PDU to get information from unsigned & packetSize, ///< Packet size to use in capability CommandType type ///< Type of PDU to send in ); /**Compare the generic part of the capability, if applicable. */ virtual PBoolean IsMatch( const PASN_Choice & subTypePDU ///< sub-type PDU of H323Capability ) const; //@} }; #endif #ifdef H323_VIDEO /**This class describes the interface to a video codec used to transfer data via the logical channels opened and managed by the H323 control channel. An application may create a descendent off this class and override functions as required for descibing a codec. */ class H323VideoCapability : public H323RealTimeCapability { PCLASSINFO(H323VideoCapability, H323RealTimeCapability); public: /**@name Construction */ //@{ /**Create an Video based capability. */ H323VideoCapability(); //@} /**@name Identification functions */ //@{ /**Get the main type of the capability. Always returns e_Video. */ virtual MainTypes GetMainType() const; //@} /**@name Operations */ //@{ /**Get the default RTP session. This function gets the default RTP session ID for the capability type. For example audio capabilities return the value RTP_Session::DefaultAudioSessionID etc. The default behaviour returns zero, indicating it is not an RTP based capability. */ virtual unsigned GetDefaultSessionID() const; /** Set Video DiffServ Value Use This to override the default DSCP value */ static void SetDSCPvalue(int newValue); /** Get the current Video DSCP value */ static int GetDSCPvalue(); //@} /**@name Protocol manipulation */ //@{ /**This function is called whenever and outgoing TerminalCapabilitySet PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls the OnSendingPDU() function with a more specific PDU type. */ virtual PBoolean OnSendingPDU( H245_Capability & pdu ///< PDU to set information on ) const; /**This function is called whenever and outgoing OpenLogicalChannel PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls the OnSendingPDU() function with a more specific PDU type. */ virtual PBoolean OnSendingPDU( H245_DataType & pdu ///< PDU to set information on ) const; /**This function is called whenever and outgoing RequestMode PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls the OnSendingPDU() function with a more specific PDU type. */ virtual PBoolean OnSendingPDU( H245_ModeElement & pdu ///< PDU to set information on ) const; /**This function is called whenever and outgoing TerminalCapabilitySet or OpenLogicalChannel PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour is pure. */ virtual PBoolean OnSendingPDU( H245_VideoCapability & pdu ///< PDU to set information on ) const; virtual PBoolean OnSendingPDU( H245_VideoCapability & pdu, ///< PDU to set information on CommandType type ///< Type of PDU to send in ) const; /**This function is called whenever and outgoing RequestMode PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour sets the PDUs tag according to the GetSubType() function (translated to different enum). */ virtual PBoolean OnSendingPDU( H245_VideoMode & pdu ///< PDU to set information on ) const = 0; /**This function is called whenever and incoming TerminalCapabilitySet PDU is received on the control channel, and a new H323Capability descendent was created. This completes reading fields from the PDU into the classes members. If the function returns FALSE then the received PDU codec description is not supported, so will be ignored. The default behaviour simply returns TRUE. */ virtual PBoolean OnReceivedPDU( const H245_Capability & pdu ///< PDU to get information from ); /**This function is called whenever and incoming OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. The default behaviour is pure. */ virtual PBoolean OnReceivedPDU( const H245_DataType & pdu, ///< PDU to get information from PBoolean receiver ///< Is receiver OLC ); /**This function is called whenever and incoming TerminalCapabilitySet or OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. The default behaviour is pure. */ virtual PBoolean OnReceivedPDU( const H245_VideoCapability & pdu ///< PDU to set information on ); virtual PBoolean OnReceivedPDU( const H245_VideoCapability & pdu, ///< PDU to get information from CommandType type ///< Type of PDU to send in ); //@} protected: static int DSCPvalue; ///< Video DSCP Value }; /**This class describes the interface to a non-standard video codec used to transfer data via the logical channels opened and managed by the H323 control channel. An application may create a descendent off this class and override functions as required for descibing the codec. */ class H323NonStandardVideoCapability : public H323VideoCapability, public H323NonStandardCapabilityInfo { PCLASSINFO(H323NonStandardVideoCapability, H323VideoCapability); public: /**@name Construction */ //@{ /**Create a new set of information about a non-standard codec. */ H323NonStandardVideoCapability( const BYTE * dataBlock, ///< Non-Standard data for codec type PINDEX dataSize, ///< Size of dataBlock. If 0 and dataBlock != NULL use strlen(dataBlock) PINDEX comparisonOffset = 0, ///< Offset into dataBlock to compare PINDEX comparisonLength = P_MAX_INDEX ///< Length of bytes to compare ); /** * provided for backwards compatibility */ H323NonStandardVideoCapability( H323EndPoint &, const BYTE * dataBlock, ///< Non-Standard data for codec type PINDEX dataSize, ///< Size of dataBlock. If 0 and dataBlock != NULL use strlen(dataBlock) PINDEX comparisonOffset = 0, ///< Offset into dataBlock to compare PINDEX comparisonLength = P_MAX_INDEX ///< Length of bytes to compare ); /**Create a new set of information about a non-standard codec. */ H323NonStandardVideoCapability( const PString & oid, ///< OID for indentification of codec const BYTE * dataBlock, ///< Non-Standard data for codec type PINDEX dataSize, ///< Size of dataBlock. If 0 and dataBlock != NULL use strlen(dataBlock) PINDEX comparisonOffset = 0, ///< Offset into dataBlock to compare PINDEX comparisonLength = P_MAX_INDEX ///< Length of bytes to compare ); /**Create a new set of information about a non-standard codec. */ H323NonStandardVideoCapability( BYTE country, ///< t35 information BYTE extension, ///< t35 information WORD maufacturer, ///< t35 information const BYTE * dataBlock, ///< Non-Standard data for codec type PINDEX dataSize, ///< Size of dataBlock. If 0 and dataBlock != NULL use strlen(dataBlock) PINDEX comparisonOffset = 0, ///< Offset into dataBlock to compare PINDEX comparisonLength = P_MAX_INDEX ///< Length of bytes to compare ); //@} /**@name Overrides from class PObject */ //@{ /**Compare two capability instances. This compares the main and sub-types of the capability. */ Comparison Compare(const PObject & obj) const; //@} /**@name Identification functions */ //@{ /**Get the sub-type of the capability. This is a code dependent on the main type of the capability. This returns one of the four possible combinations of mode and speed using the enum values of the protocol ASN H245_AudioCapability class. */ virtual unsigned GetSubType() const; //@} /**@name Protocol manipulation */ //@{ /**This function is called whenever and outgoing TerminalCapabilitySet or OpenLogicalChannel PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls H323NonStandardCapabilityinfo::OnSendingPDU() to handle the PDU. */ virtual PBoolean OnSendingPDU( H245_VideoCapability & pdu ///< PDU to set information on ) const; /**This function is called whenever and outgoing RequestMode PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls H323NonStandardCapabilityinfo::OnSendingPDU() to handle the PDU. */ virtual PBoolean OnSendingPDU( H245_VideoMode & pdu ///< PDU to set information on ) const; /**This function is called whenever and incoming TerminalCapabilitySet or OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. The default behaviour calls H323NonStandardCapabilityinfo::OnReceivedPDU() to handle the provided PDU. */ virtual PBoolean OnReceivedPDU( const H245_VideoCapability & pdu ///< PDU to set information on ); /**Compare the nonStandardData part of the capability, if applicable. */ virtual PBoolean IsMatch( const PASN_Choice & subTypePDU ///< sub-type PDU of H323Capability ) const; //@} }; /**This class describes the interface to an H245 "generic" video codec used to transfer data via the logical channels opened and managed by the H323 control channel. An application may create a descendent off this class and override functions as required for descibing the codec. */ class H323GenericVideoCapability : public H323VideoCapability, public H323GenericCapabilityInfo { PCLASSINFO(H323GenericVideoCapability, H323VideoCapability); public: /**@name Construction */ //@{ /**Create a new set of information about a generic codec. */ H323GenericVideoCapability( const PString &capabilityId, ///< codec identifier, from H245 PINDEX maxBitRate = 0 ///< maxBitRate parameter for the GenericCapability ); //@} /**@name Overrides from class PObject */ //@{ /**Compare two capability instances. This compares the main and sub-types of the capability. */ Comparison Compare(const PObject & obj) const; //@} /**@name Identification functions */ //@{ /**Get the sub-type of the capability. This is a code dependent on the main type of the capability. This returns H245_VideoCapability::e_genericCapability. */ virtual unsigned GetSubType() const; /**Get the OID of the capability. This returns a string representation of the capability OID. */ virtual PString GetIdentifier() const; //@} /**@name Protocol manipulation */ //@{ /**This function is called whenever and outgoing TerminalCapabilitySet or OpenLogicalChannel PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls H323GenericCapabilityinfo::OnSendingPDU() to handle the PDU. */ virtual PBoolean OnSendingPDU( H245_VideoCapability & pdu, ///< PDU to set information on CommandType type ///< Type of PDU to send in ) const; /**This function is called whenever and outgoing RequestMode PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour sets the PDUs tag according to the GetSubType() function (translated to different enum). */ virtual PBoolean OnSendingPDU( H245_VideoMode & pdu ///< PDU to set information on ) const; /**This function is called whenever and incoming TerminalCapabilitySet or OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. The default behaviour calls H323GenericCapabilityinfo::OnReceivedPDU() to handle the provided PDU. */ virtual PBoolean OnReceivedPDU( const H245_VideoCapability & pdu, ///< PDU to get information from CommandType type ///< Type of PDU to send in ); //@} /**Compare the generic part of the capability, if applicable. */ virtual PBoolean IsMatch( const PASN_Choice & subTypePDU ///< sub-type PDU of H323Capability ) const; }; #endif /**This class describes the interface to a data channel used to transfer data via the logical channels opened and managed by the H323 control channel. An application may create a descendent off this class and override functions as required for descibing a codec. */ class H323DataCapability : public H323Capability { PCLASSINFO(H323DataCapability, H323Capability); public: /**@name Construction */ //@{ /**Create a new data capability. */ H323DataCapability( unsigned maxBitRate = 0 ///< Maximum bit rate for data in 100's b/s ); //@} /**@name Identification functions */ //@{ /**Get the main type of the capability. Always returns e_Data. */ virtual MainTypes GetMainType() const; //@} /**@name Operations */ //@{ /**Get the default RTP session. This function gets the default RTP session ID for the capability type. For example audio capabilities return the value RTP_Session::DefaultAudioSessionID etc. The default behaviour returns 3, indicating a data session. */ virtual unsigned GetDefaultSessionID() const; /**Create the codec instance, allocating resources as required. As a data channel has no codec, this always returns NULL. */ virtual H323Codec * CreateCodec( H323Codec::Direction direction ///< Direction in which this instance runs ) const; //@} /**@name Protocol manipulation */ //@{ /**This function is called whenever and outgoing TerminalCapabilitySet PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls the OnSendingPDU() function with a more specific PDU type. */ virtual PBoolean OnSendingPDU( H245_Capability & pdu ///< PDU to set information on ) const; /**This function is called whenever and outgoing OpenLogicalChannel PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls the OnSendingPDU() function with a more specific PDU type. */ virtual PBoolean OnSendingPDU( H245_DataType & pdu ///< PDU to set information on ) const; /**This function is called whenever and outgoing RequestMode PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls the OnSendingPDU() function with a more specific PDU type. */ virtual PBoolean OnSendingPDU( H245_ModeElement & pdu ///< PDU to set information on ) const; /**This function is called whenever and outgoing TerminalCapabilitySet or OpenLogicalChannel PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour is pure. */ virtual PBoolean OnSendingPDU( H245_DataApplicationCapability & pdu ///< PDU to set information on ) const; virtual PBoolean OnSendingPDU( H245_DataApplicationCapability & pdu, ///< PDU to set information on CommandType type ///< Type of PDU to send in ) const; /**This function is called whenever and outgoing RequestMode PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour sets the PDUs tag according to the GetSubType() function (translated to different enum). */ virtual PBoolean OnSendingPDU( H245_DataMode & pdu ///< PDU to set information on ) const = 0; /**This function is called whenever and incoming TerminalCapabilitySet PDU is received on the control channel, and a new H323Capability descendent was created. This completes reading fields from the PDU into the classes members. If the function returns FALSE then the received PDU codec description is not supported, so will be ignored. The default behaviour simply returns TRUE. */ virtual PBoolean OnReceivedPDU( const H245_Capability & pdu ///< PDU to get information from ); /**This function is called whenever and incoming OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. The default behaviour is pure. */ virtual PBoolean OnReceivedPDU( const H245_DataType & pdu, ///< PDU to get information from PBoolean receiver ///< Is receiver OLC ); /**This function is called whenever and incoming TerminalCapabilitySet or OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. The default behaviour is pure. */ virtual PBoolean OnReceivedPDU( const H245_DataApplicationCapability & pdu ///< PDU to set information on ); virtual PBoolean OnReceivedPDU( const H245_DataApplicationCapability & pdu, ///< PDU to set information on CommandType type ///< Type of PDU to send in ); //@} protected: unsigned maxBitRate; }; /**This class describes the interface to a non-standard data codec used to transfer data via the logical channels opened and managed by the H323 control channel. An application may create a descendent off this class and override functions as required for descibing the codec. */ class H323NonStandardDataCapability : public H323DataCapability, public H323NonStandardCapabilityInfo { PCLASSINFO(H323NonStandardDataCapability, H323DataCapability); public: /**@name Construction */ //@{ /**Create a new set of information about a non-standard codec. */ H323NonStandardDataCapability( unsigned maxBitRate, ///< Maximum bit rate for data in 100's b/s const BYTE * dataBlock, ///< Non-Standard data for codec type PINDEX dataSize, ///< Size of dataBlock. If 0 and dataBlock != NULL use strlen(dataBlock) PINDEX comparisonOffset = 0, ///< Offset into dataBlock to compare PINDEX comparisonLength = P_MAX_INDEX ///< Length of bytes to compare ); /**Create a new set of information about a non-standard codec. */ H323NonStandardDataCapability( unsigned maxBitRate, ///< Maximum bit rate for data in 100's b/s const PString & oid, ///< OID for indentification of codec const BYTE * dataBlock, ///< Non-Standard data for codec type PINDEX dataSize, ///< Size of dataBlock. If 0 and dataBlock != NULL use strlen(dataBlock) PINDEX comparisonOffset = 0, ///< Offset into dataBlock to compare PINDEX comparisonLength = P_MAX_INDEX ///< Length of bytes to compare ); /**Create a new set of information about a non-standard codec. */ H323NonStandardDataCapability( unsigned maxBitRate, ///< Maximum bit rate for data in 100's b/s BYTE country, ///< t35 information BYTE extension, ///< t35 information WORD maufacturer, ///< t35 information const BYTE * dataBlock, ///< Non-Standard data for codec type PINDEX dataSize, ///< Size of dataBlock. If 0 and dataBlock != NULL use strlen(dataBlock) PINDEX comparisonOffset = 0, ///< Offset into dataBlock to compare PINDEX comparisonLength = P_MAX_INDEX ///< Length of bytes to compare ); //@} /**@name Overrides from class PObject */ //@{ /**Compare two capability instances. This compares the main and sub-types of the capability. */ Comparison Compare(const PObject & obj) const; //@} /**@name Identification functions */ //@{ /**Get the sub-type of the capability. This is a code dependent on the main type of the capability. This returns one of the four possible combinations of mode and speed using the enum values of the protocol ASN H245_AudioCapability class. */ virtual unsigned GetSubType() const; //@} /**@name Protocol manipulation */ //@{ /**This function is called whenever and outgoing TerminalCapabilitySet or OpenLogicalChannel PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls H323NonStandardCapabilityinfo::OnSendingPDU() to handle the PDU. */ virtual PBoolean OnSendingPDU( H245_DataApplicationCapability & pdu ///< PDU to set information on ) const; /**This function is called whenever and outgoing RequestMode PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls H323NonStandardCapabilityinfo::OnSendingPDU() to handle the PDU. */ virtual PBoolean OnSendingPDU( H245_DataMode & pdu ///< PDU to set information on ) const; /**This function is called whenever and incoming TerminalCapabilitySet or OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. The default behaviour calls H323NonStandardCapabilityinfo::OnReceivedPDU() to handle the provided PDU. */ virtual PBoolean OnReceivedPDU( const H245_DataApplicationCapability & pdu ///< PDU to set information on ); /**Compare the nonStandardData part of the capability, if applicable. */ virtual PBoolean IsMatch( const PASN_Choice & subTypePDU ///< sub-type PDU of H323Capability ) const; //@} }; #ifdef H323_AUDIO_CODECS /////////////////////////////////////////////////////////////////////////////// // The simplest codec is the G.711 PCM codec. /**This class describes the G.711 codec capability. */ class H323_G711Capability : public H323AudioCapability { PCLASSINFO(H323_G711Capability, H323AudioCapability) public: /// Specific G.711 encoding algorithm. enum Mode { /// European standard ALaw, /// American standard muLaw }; /// Specific G.711 encoding bit rates. enum Speed { /// European standard At64k, /// American standard At56k }; /**@name Construction */ //@{ /**Create a new G.711 capability. */ H323_G711Capability( Mode mode = muLaw, ///< Type of encoding. Speed speed = At64k ///< Encoding bit rate. ); //@} /**@name Overrides from class PObject */ //@{ /**Create a copy of the object. */ virtual PObject * Clone() const; //@} /**@name Identification functions */ //@{ /**Get the sub-type of the capability. This is a code dependent on the main type of the capability. This returns one of the four possible combinations of mode and speed using the enum values of the protocol ASN H245_AudioCapability class. */ virtual unsigned GetSubType() const; /**Get the name of the media data format this class represents. */ virtual PString GetFormatName() const; //@} /**@name Operations */ //@{ /**Create the codec instance, allocating resources as required. */ virtual H323Codec * CreateCodec( H323Codec::Direction direction ///< Direction in which this instance runs ) const; //@} protected: Mode mode; Speed speed; }; #endif // NO_H323_AUDIO_CODECS /////////////////////////////////////////////////////////////////////////////// /**This class describes the UserInput psuedo-channel. */ class H245_GenericInformation; class H323_UserInputCapability : public H323Capability { PCLASSINFO(H323_UserInputCapability, H323Capability); public: /**@name Construction */ //@{ enum SubTypes { BasicString, IA5String, GeneralString, SignalToneH245, HookFlashH245, SignalToneRFC2833, H249A_Navigation, H249B_Softkey, H249C_PointDevice, H249D_Modal, NumSubTypes }; static const char * const SubTypeNames[NumSubTypes]; #ifdef H323_H249 static const char * const SubTypeOID[4]; enum NavigateKeyID { NavigateRight =1, NavigateLeft, NavigateUp, NavigateDown, NavigateActivate }; #endif /**Create the capability for User Input. The subType parameter is a value from the enum H245_UserInputCapability::Choices. */ H323_UserInputCapability( SubTypes subType ); //@} /**@name Overrides from class PObject */ //@{ /**Create a copy of the object. */ virtual PObject * Clone() const; //@} /**@name Identification functions */ //@{ /**Get the main type of the capability. This function is overridden by one of the three main sub-classes off which real capabilities would be descendend. */ virtual MainTypes GetMainType() const; /**Get the sub-type of the capability. This is a code dependent on the main type of the capability. */ virtual unsigned GetSubType() const; /**Get the name of the media data format this class represents. */ virtual PString GetFormatName() const; //@} /**@name Operations */ //@{ /**Create the channel instance, allocating resources as required. This creates a logical channel object appropriate for the parameters provided. Not if param is NULL, sessionID must be provided, otherwise this is taken from the fields in param. */ virtual H323Channel * CreateChannel( H323Connection & connection, ///< Owner connection for channel H323Channel::Directions dir, ///< Direction of channel unsigned sessionID, ///< Session ID for RTP channel const H245_H2250LogicalChannelParameters * param ///< Parameters for channel ) const; /**Create the codec instance, allocating resources as required. */ virtual H323Codec * CreateCodec( H323Codec::Direction direction ///< Direction in which this instance runs ) const; #ifdef H323_H249 /** Build Generic UserInputIndication */ static H245_GenericInformation * BuildGenericIndication( const char * oid ///< OID of parameter ); static H245_GenericParameter * BuildGenericParameter( unsigned id, ///< Standard Identifier of the parameter unsigned type, ///< H245_GenericParameter Type const PString & value ///< Value of the parameter ); virtual PString GetIdentifier() const; #endif //@} /**@name Protocol manipulation */ //@{ /**This function is called whenever and outgoing TerminalCapabilitySet PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour is pure. */ virtual PBoolean OnSendingPDU( H245_Capability & pdu ///< PDU to set information on ) const; /**This function is called whenever and outgoing OpenLogicalChannel PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour is pure. */ virtual PBoolean OnSendingPDU( H245_DataType & pdu ///< PDU to set information on ) const; /**This function is called whenever and outgoing RequestMode PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls the OnSendingPDU() function with a more specific PDU type. */ virtual PBoolean OnSendingPDU( H245_ModeElement & pdu ///< PDU to set information on ) const; /**This function is called whenever and incoming TerminalCapabilitySet PDU is received on the control channel, and a new H323Capability descendent was created. This completes reading fields from the PDU into the classes members. If the function returns FALSE then the received PDU codec description is not supported, so will be ignored. The default behaviour simply returns TRUE. */ virtual PBoolean OnReceivedPDU( const H245_Capability & pdu ///< PDU to get information from ); /**This function is called whenever and incoming OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. The default behaviour is pure. */ virtual PBoolean OnReceivedPDU( const H245_DataType & pdu, ///< PDU to get information from PBoolean receiver ///< Is receiver OLC ); /**Validate that the capability is usable given the connection. This checks agains the negotiated protocol version number and remote application to determine if this capability should be used in TCS or OLC pdus. The default behaviour will check for early versions and return FALSE for RFC2833 mode. */ virtual PBoolean IsUsable( const H323Connection & connection ) const; //@} static void AddAllCapabilities( H323Capabilities & capabilities, ///< Table to add capabilities to PINDEX descriptorNum, ///< The member of the capabilityDescriptor to add PINDEX simultaneous ///< The member of the SimultaneousCapabilitySet to add ); protected: SubTypes subType; #ifdef H323_H249 PString subTypeOID; #endif }; /////////////////////////////////////////////////////////////////////////////// H323LIST(H323CapabilitiesList, H323Capability); PARRAY(H323CapabilitiesListArray, H323CapabilitiesList); class H323SimultaneousCapabilities : public H323CapabilitiesListArray { PCLASSINFO(H323SimultaneousCapabilities, H323CapabilitiesListArray); public: PBoolean SetSize(PINDEX newSize); }; PARRAY(H323CapabilitiesSetArray, H323SimultaneousCapabilities); class H323CapabilitiesSet : public H323CapabilitiesSetArray { PCLASSINFO(H323CapabilitiesSet, H323CapabilitiesSetArray); public: /// Set the new size of the table, internal use only. PBoolean SetSize(PINDEX newSize); }; /**This class contains all of the capabilities and their combinations. */ class H323Capabilities : public PObject { PCLASSINFO(H323Capabilities, PObject); public: /**@name Construction */ //@{ /**Construct an empty capability set. */ H323Capabilities(); /**Construct a capability set from the H.245 PDU provided. */ H323Capabilities( const H323Connection & connection, ///< Connection for capabilities const H245_TerminalCapabilitySet & pdu ///< PDU to convert to a capability set. ); /**Construct a copy of a capability set. Note this will completely duplicate the set by making clones of every capability in the original set. */ H323Capabilities( const H323Capabilities & original ///< Original capabilities to duplicate ); /**Assign a copy of a capability set. Note this will completely duplicate the set by making clones of every capability in the original set. */ H323Capabilities & operator=( const H323Capabilities & original ///< Original capabilities to duplicate ); //@} /**@name Overrides from class PObject */ //@{ /**Print out the object to the stream, virtual version of << operator. */ void PrintOn( ostream & strm ///< Stream to print out to. ) const; //@} /**@name Operations */ //@{ /**Get the number of capabilities in the set. */ PINDEX GetSize() const { return table.GetSize(); } /**Get the capability at the specified index. */ H323Capability & operator[](PINDEX i) const { return table[i]; } /**Set the capability descriptor lists. This is three tier set of codecs. The top most level is a list of particular capabilities. Each of these consists of a list of alternatives that can operate simultaneously. The lowest level is a list of codecs that cannot operate together. See H323 section 6.2.8.1 and H245 section 7.2 for details. If descriptorNum is P_MAX_INDEX, the the next available index in the array of descriptors is used. Similarly if simultaneous is P_MAX_INDEX the the next available SimultaneousCapabilitySet is used. The return value is the index used for the new entry. Note if both are P_MAX_INDEX then the return value is the descriptor index as the simultaneous index must be zero. Note that the capability specified here is automatically added to the capability table using the AddCapability() function. A specific instance of a capability is only ever added once, so multiple SetCapability() calls with the same H323Capability pointer will only add that capability once. */ PINDEX SetCapability( PINDEX descriptorNum, ///< The member of the capabilityDescriptor to add PINDEX simultaneous, ///< The member of the SimultaneousCapabilitySet to add H323Capability * cap ///< New capability specification ); /**Add all matching capabilities to descriptor lists. All capabilities that match the specified name are added as in the other form of the SetCapability() function. */ virtual PINDEX AddAllCapabilities( PINDEX descriptorNum, ///< The member of the capabilityDescriptor to add PINDEX simultaneous, ///< The member of the SimultaneousCapabilitySet to add const PString & name ///< New capabilities name, if using "known" one. ); PINDEX AddAllCapabilities( H323EndPoint &, PINDEX descriptorNum, ///< The member of the capabilityDescriptor to add PINDEX simultaneous, ///< The member of the SimultaneousCapabilitySet to add const PString & name ///< New capabilities name, if using "known" one. ) { return AddAllCapabilities(descriptorNum, simultaneous, name); } /**Add a codec to the capabilities table. This will assure that the assignedCapabilityNumber field in the capability is unique for all capabilities installed on this set. If the specific instance of the capability is already in the table, it is not added again. Ther can be multiple instances of the same capability class however. */ void Add( H323Capability * capability ///< New capability specification ); /**Copy a codec to the capabilities table. This will make a clone of the capability and assure that the assignedCapabilityNumber field in the capability is unique for all capabilities installed on this set. Returns the copy that is put in the table. */ H323Capability * Copy( const H323Capability & capability ///< New capability specification ); /**Remove a capability from the table. Note that the the parameter must be the actual instance of the capability in the table. The instance is deleted when removed from the table. */ void Remove( H323Capability * capability ///< Existing capability specification ); /**Remove all capabilities matching the string. This uses FindCapability() to locate the first capability whose format name does a partial match for the argument. */ void Remove( const PString & formatName ///< Format name to search for. ); /**Remove all capabilities matching any of the strings provided. This simply calls Remove() for each string in the list. */ void Remove( const PStringArray & formatNames ///< Array of format names to remove ); /**Remove all of the capabilities. */ void RemoveAll(); /**Manually remove Capability type. This removes the specified Capability type out of the default capability list. */ PBoolean RemoveCapability(H323Capability::MainTypes capabilityType); #ifdef H323_VIDEO /**Set the Video Frame Size. This is used for capabilities that use 1 definition for all Video Frame Sizes. This will remove all capabilities not matching the specified Frame Size and send a message to the remaining video capabilities to set the maximum framesize allowed to the specified value */ PBoolean SetVideoFrameSize(H323Capability::CapabilityFrameSize frameSize, int frameUnits ); /**Set the Video Encoder size and rate. This is used for generic Video Capabilities to set the appropriate level for a given encoder frame size and rate. */ PBoolean SetVideoEncoder(unsigned frameWidth, unsigned frameHeight, unsigned frameRate); #endif /**Find the capability given the capability number. This number is guarenteed to be unique for a give capability table. Note that is may not be the same as the index into the table. Returns: NULL if no capability meeting the criteria was found */ H323Capability * FindCapability( unsigned capabilityNumber ) const; /**Find the capability given the capability format name string. This does a partial match for the supplied argument. If the argument matches a substring of the actual capabilities name, then it is returned. For example "GSM" or "0610" will match "GSM 0610". Note case is not significant. The user should be carefull of using short strings such as "G"! The direction parameter can further refine the search for specific receive or transmit capabilities. The default value of e_Unknown will wildcard that field. Returns: NULL if no capability meeting the criteria was found */ H323Capability * FindCapability( const PString & formatName, ///< Wildcard format name to search for H323Capability::CapabilityDirection direction = H323Capability::e_Unknown ///< Optional direction to include into search criteria ) const; /**Find the first capability in the table of the specified direction. Returns: NULL if no capability meeting the criteria was found */ H323Capability * FindCapability( H323Capability::CapabilityDirection direction ///< Direction to search for ) const; /**Find the capability given the capability. This does a value compare of the two capabilities. Usually this means the mainType and subType are the same. Returns: NULL if no capability meeting the criteria was found */ H323Capability * FindCapability( const H323Capability & capability ///< Capability to search for ) const; /**Find the capability given the H.245 capability PDU. For Backwards interoperability Returns: NULL if no capability meeting the criteria was found */ H323Capability * FindCapability( const H245_Capability & cap ///< H245 capability table entry ) const; /**Find the capability given the H.245 capability PDU (with associcated TCS). Returns: NULL if no capability meeting the criteria was found */ H323Capability * FindCapability( const H245_Capability & cap, ///< H245 capability table entry unsigned capID, ///< Capability ID (of current capability) const H245_TerminalCapabilitySet & pdu ///< Reference PDU (for associated caps) ) const; /**Find the capability given the H.245 data type PDU. Returns: NULL if no capability meeting the criteria was found */ H323Capability * FindCapability( const H245_DataType & dataType ///< H245 data type of codec ) const; /**Find the capability given the H.245 data type PDU. Returns: NULL if no capability meeting the criteria was found */ H323Capability * FindCapability( const H245_ModeElement & modeElement ///< H245 data type of codec ) const; /**Find generic capability. Returns: NULL if no capability meeting the criteria was found */ H323Capability * FindCapability( H323Capability::MainTypes mainType, ///< Main type to find const PASN_Choice & subTypePDU, ///< Sub-type info const H245_GenericCapability & gen ///< Generic cap ) const; /**Find extended video capability. Returns: NULL if no capability meeting the criteria was found */ H323Capability * FindCapability( bool, ///< PlaceHolder const H245_ExtendedVideoCapability & gen ///< extVideo cap ) const; /**Find Associated capability (like Security Capability). Need to match the associated Capability in TCS Returns: NULL if no capability meeting the criteria was found */ H323Capability * FindCapability( H323Capability::MainTypes mainType, ///< Main type to find const PASN_Sequence & subTypePDU, ///< Sub-type info const unsigned & capID, ///< Capability ID (of subType) const H245_TerminalCapabilitySet & tcs ///< Orginal TCS (for associate reference) ) const; /**Find the capability given the sub-type info. Returns: NULL if no capability meeting the criteria was found */ H323Capability * FindCapability( H323Capability::MainTypes mainType, ///< Main type to find const PASN_Choice & subTypePDU, ///< Sub-type info const unsigned * translationTable ///< Translation table sub-type tags ) const; /**Find the capability given the type codecs. Returns: NULL if no capability meeting the criteria was found */ H323Capability * FindCapability( H323Capability::MainTypes mainType, ///< Main type to find unsigned subType = UINT_MAX ///< Sub-type to find (UINT_MAX=ignore) ) const; /**Build a H.245 PDU from the information in the capability set. */ void BuildPDU( const H323Connection & connection, ///< Connection building PDU for H245_TerminalCapabilitySet & pdu ///< PDU to build ) const; /**Merge the capabilities into this set. */ PBoolean Merge( const H323Capabilities & newCaps ); /**Retreive the capability set */ const H323CapabilitiesSet & GetCapabilitySet(); /**Change the order of capabilities in the table to the order specified. Note that this does not change the unique capability numbers assigned when the capability is first added to the set. The string matching rules are as for the FindCapability() function. */ void Reorder( const PStringArray & preferenceOrder ///< New order ); /**Test if the capability is allowed. */ PBoolean IsAllowed( const H323Capability & capability ); /**Test if the capability is allowed. */ PBoolean IsAllowed( unsigned capabilityNumber ); /**Test if the capabilities are an allowed combination. */ PBoolean IsAllowed( const H323Capability & capability1, const H323Capability & capability2 ); /**Test if the capabilities are an allowed combination. */ PBoolean IsAllowed( unsigned capabilityNumber1, unsigned capabilityNumber2 ); /**Access to Capabilities Set */ const H323CapabilitiesSet & GetSet() const; //@} protected: H323CapabilitiesList table; H323CapabilitiesSet set; }; /////////////////////////////////////////////////////////////////////////////// #ifdef H323_VIDEO #ifdef H323_H239 class H323ExtendedVideoCapability : public H323Capability, public H323GenericCapabilityInfo { PCLASSINFO(H323ExtendedVideoCapability, H323Capability); public: /**@name Construction */ //@{ /**Create a new Extended Video capability. */ H323ExtendedVideoCapability( const PString &capabilityId ///< Extended Capability OID ); //@} /**@name Overrides from class PObject */ //@{ /**Compare two capability instances. This compares the main and sub-types of the capability. */ Comparison Compare(const PObject & obj) const; //@} /**@name Identification functions */ //@{ /**Get the main type of the capability. Always returns e_ExtendedVideo. */ virtual H323Capability::MainTypes GetMainType() const; /**Get the sub-type of the capability. This is a code dependent on the main type of the capability. This returns one of the four possible combinations of mode and speed using the enum values of the protocol ASN H245_AudioCapability class. */ virtual unsigned GetSubType() const; /**Get the default RTP session. This function gets the default RTP session ID for the capability type. returns H323Capability::DefaultExtVideoSessionID . */ virtual unsigned GetDefaultSessionID() const; /** Create Channel (not used) */ virtual H323Channel * CreateChannel( H323Connection & connection, ///< Owner connection for channel H323Channel::Directions dir, ///< Direction of channel unsigned sessionID, ///< Session ID for RTP channel const H245_H2250LogicalChannelParameters * param ///< Parameters for channel ) const; /**Create the codec instance, allocating resources as required. Default does nothing */ virtual H323Codec * CreateCodec( H323Codec::Direction direction ///< Direction in which this instance runs ) const; //@} /**@name Protocol manipulation */ //@{ /**This function is called whenever and outgoing TerminalCapabilitySet PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls the OnSendingPDU() function with a more specific PDU type. */ virtual PBoolean OnSendingPDU( H245_Capability & pdu ///< PDU to set information on ) const; /**This function is called whenever and incoming TerminalCapabilitySet PDU is received on the control channel, and a new H323Capability descendent was created. This completes reading fields from the PDU into the classes members. If the function returns FALSE then the received PDU codec description is not supported, so will be ignored. The default behaviour simply returns TRUE. */ virtual PBoolean OnReceivedPDU( const H245_Capability & pdu ///< PDU to get information from ); /**This function is called whenever and incoming TerminalCapabilitySet or OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. The default behaviour does nothing. */ virtual PBoolean OnReceivedPDU( const H245_GenericCapability & cap, ///< PDU to get information from CommandType type ///< Type of PDU to send in ); /**This function is called whenever and outgoing TerminalCapabilitySet or OpenLogicalChannel PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour does nothing. */ virtual PBoolean OnSendingPDU( H245_GenericCapability & cap, ///< PDU to get information from CommandType type ///< Type of PDU to send in ) const; /**This function is called whenever and outgoing OpenLogicalChannel PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour is pure. */ virtual PBoolean OnSendingPDU( H245_DataType & pdu ///< PDU to set information on ) const; /**This function is called whenever and outgoing RequestMode PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour is pure. */ virtual PBoolean OnSendingPDU( H245_ModeElement & pdu ///< PDU to set information on ) const; /**This function is called whenever and incoming OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. The default behaviour is pure. */ virtual PBoolean OnReceivedPDU( const H245_DataType & pdu, ///< PDU to get information from PBoolean receiver ///< Is receiver OLC ); /**Compare the generic part of the capability, if applicable. */ virtual PBoolean IsMatch( const PASN_Choice & subTypePDU ///< sub-type PDU of H323Capability ) const; //@} /**@name Operations */ //@{ /** Get matching Capability from List */ H323Capability & operator[](PINDEX i); H323Capability * GetAt(PINDEX i) const; /** Get Number of matching Capabilities */ PINDEX GetSize() const; /**Add All Capabilities */ static void AddAllCapabilities( H323Capabilities & basecapabilities, ///< Base Table to add capability to PINDEX descriptorNum, ///< The member of the capabilityDescriptor to add PINDEX simultaneous ///< The member of the SimultaneousCapabilitySet to add ); /**Get the capabilities */ const H323Capabilities & GetCapabilities() const; //@} protected: H323Capabilities extCapabilities; ///< local Capability List H323CapabilitiesList table; ///< common Capability List }; ////////////////////////////////////////////////////////////////////////////// // // Class for Handling extended video control class H245_ArrayOf_GenericParameter; class H323ControlExtendedVideoCapability : public H323ExtendedVideoCapability { PCLASSINFO(H323ControlExtendedVideoCapability, H323ExtendedVideoCapability); public: H323ControlExtendedVideoCapability(); /**@name Enumerators */ //@{ /**Generic Messaging. */ enum h245MessageType { e_h245request, e_h245response, e_h245command, e_h245indication }; /**SubMessaging Messaging. */ enum H239SubMessages { e_flowControlReleaseRequest = 1, e_flowControlReleaseResponse, e_presentationTokenRequest, e_presentationTokenResponse, e_presentationTokenRelease, e_presentationTokenIndicateOwner }; /**Generic Paramenters. */ enum H239GenericParameters { h239pReserved = 0, // Type of val - unsigned min h239gpBitRate = 41, // Type of val - unsigned min h239gpChannelId = 42, // Type of val - unsigned min h239gpSymmetryBreaking = 43, // Type of val - unsigned min h239gpTerminalLabel = 44, // Type of val - unsigned min h239gpAcknowledge = 126, // Type of val - boolean h239gpReject = 127 // Type of val - boolean }; //@} virtual PString GetFormatName() const { return "H.239 Control"; } virtual PObject * Clone() const { return new H323ControlExtendedVideoCapability(*this); } PBoolean CloseChannel(H323Connection * connection, H323Capability::CapabilityDirection dir); PBoolean SendGenericMessage(h245MessageType msgtype, H323Connection * connection, PBoolean approved=false); PBoolean HandleGenericMessage(h245MessageType msgtype, H323Connection * connection, const H245_ArrayOf_GenericParameter * pdu); H323ChannelNumber & GetChannelNum(H323Capability::CapabilityDirection dir); void SetChannelNum(unsigned num, H323Capability::CapabilityDirection dir); void SetRequestedChanNum(int num); int GetRequestedChanNum(); protected: H323ChannelNumber m_outgoingChanNum; H323ChannelNumber m_incomingChanNum; int m_requestedChanNum; }; typedef H323ControlExtendedVideoCapability H239Control; ////////////////////////////////////////////////////////////////////////////// // // Class for handling extended video capabilities ie H.239 // class H323CodecExtendedVideoCapability : public H323ExtendedVideoCapability { PCLASSINFO(H323CodecExtendedVideoCapability, H323ExtendedVideoCapability); public: H323CodecExtendedVideoCapability(); ~H323CodecExtendedVideoCapability(); virtual H323Capability::MainTypes GetMainType() const; virtual unsigned GetSubType() const; virtual PObject * Clone() const; virtual void AddCapability(const PString & cap); virtual PBoolean OnReceivedGenericPDU( const H245_GenericCapability &pdu ); virtual PString GetFormatName() const; Comparison Compare(const PObject & obj) const; virtual PBoolean IsMatch(const PASN_Choice & subTypePDU) const; virtual H323Codec * CreateCodec(H323Codec::Direction direction ) const; virtual H323Channel * CreateChannel( H323Connection & connection, ///< Owner connection for channel H323Channel::Directions dir, ///< Direction of channel unsigned sessionID, ///< Session ID for RTP channel const H245_H2250LogicalChannelParameters * param ///< Parameters for channel ) const; virtual PBoolean OnSendingPDU( H245_DataType & pdu ) const; virtual PBoolean OnReceivedPDU( const H245_DataType & pdu, PBoolean receiver ); virtual PBoolean OnSendingPDU( H245_Capability & cap ) const; virtual PBoolean OnReceivedPDU( const H245_Capability & cap ); virtual PBoolean OnSendingPDU( H245_VideoCapability & cap, H323Capability::CommandType type ) const; virtual PBoolean OnReceivedPDU( const H245_VideoCapability & pdu /// PDU to get information from ); const OpalMediaFormat & GetMediaFormat() const; OpalMediaFormat & GetWritableMediaFormat(); }; typedef PFactory H323ExtendedVideoFactory; #endif // H323_H239 #endif // H323_VIDEO ///////////////////////////////////////////////////////////////////////////// #ifdef H323_H230 class H323_ConferenceControlCapability : public H323Capability { PCLASSINFO(H323_ConferenceControlCapability, H323Capability); public: /**@name Construction */ /**Create the Conference capability */ H323_ConferenceControlCapability(); H323_ConferenceControlCapability( PBoolean chairControls, PBoolean T124Extension ); //@} /**@name Overrides from class PObject */ //@{ /**Create a copy of the object. */ virtual PObject * Clone() const; //@} /**@name Identification functions */ //@{ /**Get the main type of the capability. */ virtual MainTypes GetMainType() const; /**Get the sub-type of the capability. This is a code dependent on the main type of the capability. */ virtual unsigned GetSubType() const; /**Get the name of the media data format this class represents. */ virtual PString GetFormatName() const; //@} /**@name Operations */ //@{ /**Create the channel instance, allocating resources as required. This creates a logical channel object appropriate for the parameters provided. Not if param is NULL, sessionID must be provided, otherwise this is taken from the fields in param. */ virtual H323Channel * CreateChannel( H323Connection & connection, ///< Owner connection for channel H323Channel::Directions dir, ///< Direction of channel unsigned sessionID, ///< Session ID for RTP channel const H245_H2250LogicalChannelParameters * param ///< Parameters for channel ) const; /**Create the codec instance, allocating resources as required. */ virtual H323Codec * CreateCodec( H323Codec::Direction direction ///< Direction in which this instance runs ) const; //@} /**@name Protocol manipulation */ //@{ /**This function is called whenever and outgoing TerminalCapabilitySet PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour is pure. */ virtual PBoolean OnSendingPDU( H245_Capability & pdu ///< PDU to set information on ) const; /**This function is called whenever and outgoing OpenLogicalChannel PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour is pure. */ virtual PBoolean OnSendingPDU( H245_DataType & pdu ///< PDU to set information on ) const; /**This function is called whenever and outgoing RequestMode PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls the OnSendingPDU() function with a more specific PDU type. */ virtual PBoolean OnSendingPDU( H245_ModeElement & pdu ///< PDU to set information on ) const; /**This function is called whenever and incoming TerminalCapabilitySet PDU is received on the control channel, and a new H323Capability descendent was created. This completes reading fields from the PDU into the classes members. If the function returns FALSE then the received PDU codec description is not supported, so will be ignored. The default behaviour simply returns TRUE. */ virtual PBoolean OnReceivedPDU( const H245_Capability & pdu ///< PDU to get information from ); /**This function is called whenever and incoming OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. The default behaviour is pure. */ virtual PBoolean OnReceivedPDU( const H245_DataType & pdu, ///< PDU to get information from PBoolean receiver ///< Is receiver OLC ); //@} /**@name Option */ //@{ /**This function indicates whether the remote supports chair controls */ PBoolean SupportChairControls() { return chairControlCapability; } /**This function indicates whether the remote supports extended controls such as T.124 Tunnelling */ PBoolean SupportExtControls() { return nonStandardExtension; } //@} protected: PBoolean chairControlCapability; PBoolean nonStandardExtension; }; #endif // H323_H230 /////////////////////////////////////////////////////////////////////////////// typedef PFactory H323CapabilityFactory; #define H323_REGISTER_CAPABILITY(cls, capName) static H323CapabilityFactory::Worker cls##Factory(capName, true); \ #define H323_DEFINE_CAPABILITY(cls, capName, fmtName) \ class cls : public H323Capability { \ public: \ cls() : H323Capability() { } \ PString GetFormatName() const \ { return fmtName; } \ }; \ H323_REGISTER_CAPABILITY(cls, capName) \ #define H323_DEFINE_CAPABILITY_FROM(cls, ancestor, capName, fmtName) \ class cls : public ancestor { \ public: \ cls() : ancestor() { } \ PString GetFormatName() const \ { return fmtName; } \ }; \ H323_REGISTER_CAPABILITY(cls, capName) \ #endif // __OPAL_H323CAPS_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/t38proto.h0000644000175000017500000001105611623226321014406 0ustar markmark/* * t38proto.h * * T.38 protocol handler * * Open Phone Abstraction Library * * Copyright (c) 2001 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $ Id $ * */ #ifndef __OPAL_T38PROTO_H #define __OPAL_T38PROTO_H #ifdef P_USE_PRAGMA #pragma interface #endif class H323Transport; class T38_IFPPacket; class PASN_OctetString; #include "ptlib_extras.h" /////////////////////////////////////////////////////////////////////////////// /**This class handles the processing of the T.38 protocol. */ class OpalT38Protocol : public PObject { PCLASSINFO(OpalT38Protocol, PObject); public: /**@name Construction */ //@{ /**Create a new protocol handler. */ OpalT38Protocol(); /**Destroy the protocol handler. */ ~OpalT38Protocol(); //@} /**@name Operations */ //@{ /**This is called to clean up any threads on connection termination. */ virtual void CleanUpOnTermination(); /**Handle the origination of a T.38 connection. An application would normally override this. The default just sends "heartbeat" T.30 no signal indicator. */ virtual PBoolean Originate(); /**Write packet to the T.38 connection. */ virtual PBoolean WritePacket( const T38_IFPPacket & pdu ); /**Write T.30 indicator packet to the T.38 connection. */ virtual PBoolean WriteIndicator( unsigned indicator ); /**Write data packet to the T.38 connection. */ virtual PBoolean WriteMultipleData( unsigned mode, PINDEX count, unsigned * type, const PBYTEArray * data ); /**Write data packet to the T.38 connection. */ virtual PBoolean WriteData( unsigned mode, unsigned type, const PBYTEArray & data ); /**Handle the origination of a T.38 connection. */ virtual PBoolean Answer(); /**Handle incoming T.38 packet. If returns FALSE, then the reading loop should be terminated. */ virtual PBoolean HandlePacket( const T38_IFPPacket & pdu ); /**Handle lost T.38 packets. If returns FALSE, then the reading loop should be terminated. */ virtual PBoolean HandlePacketLost( unsigned nLost ); /**Handle incoming T.38 indicator packet. If returns FALSE, then the reading loop should be terminated. */ virtual PBoolean OnIndicator( unsigned indicator ); /**Handle incoming T.38 CNG indicator. If returns FALSE, then the reading loop should be terminated. */ virtual PBoolean OnCNG(); /**Handle incoming T.38 CED indicator. If returns FALSE, then the reading loop should be terminated. */ virtual PBoolean OnCED(); /**Handle incoming T.38 V.21 preamble indicator. If returns FALSE, then the reading loop should be terminated. */ virtual PBoolean OnPreamble(); /**Handle incoming T.38 data mode training indicator. If returns FALSE, then the reading loop should be terminated. */ virtual PBoolean OnTraining( unsigned indicator ); /**Handle incoming T.38 data packet. If returns FALSE, then the reading loop should be terminated. */ virtual PBoolean OnData( unsigned mode, unsigned type, const PBYTEArray & data ); //@} H323Transport * GetTransport() const { return transport; } void SetTransport( H323Transport * transport, PBoolean autoDelete = TRUE ); protected: PBoolean HandleRawIFP( const PASN_OctetString & pdu ); H323Transport * transport; PBoolean autoDeleteTransport; PBoolean corrigendumASN; unsigned indicatorRedundancy; unsigned lowSpeedRedundancy; unsigned highSpeedRedundancy; int lastSentSequenceNumber; H323List redundantIFPs; }; #endif // __OPAL_T38PROTO_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/mediafmt.h0000644000175000017500000006272211647277756014530 0ustar markmark/* * mediafmt.h * * Media Format descriptions * * Open H323 Library * * Copyright (c) 1998-2001 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Id: mediafmt.h,v 1.14 2011/10/18 13:32:30 shorne Exp $ * */ #ifndef __OPAL_MEDIAFMT_H #define __OPAL_MEDIAFMT_H #ifdef P_USE_PRAGMA #pragma interface #endif #include "rtp.h" #include #ifdef min #undef min #endif #ifdef max #undef max #endif class OpalMediaFormat; /////////////////////////////////////////////////////////////////////////////// /**Base class for options attached to an OpalMediaFormat. */ class OpalMediaOption : public PObject { PCLASSINFO(OpalMediaOption, PObject); public: enum MergeType { NoMerge, MinMerge, MaxMerge, EqualMerge, NotEqualMerge, AlwaysMerge, // Synonyms AndMerge = MaxMerge, OrMerge = MinMerge, XorMerge = NotEqualMerge, NotXorMerge = EqualMerge }; protected: OpalMediaOption( const char * name, bool readOnly, MergeType merge ); public: virtual Comparison Compare(const PObject & obj) const; bool Merge( const OpalMediaOption & option ); virtual Comparison CompareValue( const OpalMediaOption & option ) const = 0; virtual void Assign( const OpalMediaOption & option ) = 0; PString AsString() const; bool FromString(const PString & value); const PString & GetName() const { return m_name; } bool IsReadOnly() const { return m_readOnly; } void SetReadOnly(bool readOnly) { m_readOnly = readOnly; } MergeType GetMerge() const { return m_merge; } void SetMerge(MergeType merge) { m_merge = merge; } const PString & GetFMTPName() const { return m_FMTPName; } void SetFMTPName(const char * name) { m_FMTPName = name; } const PString & GetFMTPDefault() const { return m_FMTPDefault; } void SetFMTPDefault(const char * value) { m_FMTPDefault = value; } struct H245GenericInfo { unsigned ordinal:16; enum Modes { None, Collapsing, NonCollapsing } mode:3; enum IntegerTypes { UnsignedInt, Unsigned32, BooleanArray } integerType:3; bool excludeTCS:1; bool excludeOLC:1; bool excludeReqMode:1; }; const H245GenericInfo & GetH245Generic() const { return m_H245Generic; } void SetH245Generic(const H245GenericInfo & gen) { m_H245Generic = gen; } protected: PCaselessString m_name; bool m_readOnly; MergeType m_merge; PCaselessString m_FMTPName; PString m_FMTPDefault; H245GenericInfo m_H245Generic; }; #if PTLIB_VER < 2110 #ifndef __USE_STL__ __inline istream & operator>>(istream & strm, bool& b) { int i;strm >> i;b = i; return strm; } #endif #endif template class OpalMediaOptionValue : public OpalMediaOption { PCLASSINFO(OpalMediaOptionValue, OpalMediaOption); public: OpalMediaOptionValue( const char * name, bool readOnly, MergeType merge = MinMerge, T value = 0, T minimum = std::numeric_limits::min(), T maximum = std::numeric_limits::max() ) : OpalMediaOption(name, readOnly, merge), m_value(value), m_minimum(minimum), m_maximum(maximum) { } virtual PObject * Clone() const { return new OpalMediaOptionValue(*this); } virtual void PrintOn(ostream & strm) const { strm << m_value; } virtual void ReadFrom(istream & strm) { T temp; strm >> temp; if (temp >= m_minimum && temp <= m_maximum) m_value = temp; else { #if PTLIB_VER >= 2110 || defined(__USE_STL__) strm.setstate(ios::badbit); #else strm.setf(ios::badbit , ios::badbit); #endif } } virtual Comparison CompareValue(const OpalMediaOption & option) const { if (!PIsDescendant(&option, OpalMediaOptionValue)) { PTRACE(6,"MediaOpt\t" << option.GetName() << " not compared! Not descendent of OpalMediaOptionValue"); return GreaterThan; } const OpalMediaOptionValue * otherOption = PDownCast(const OpalMediaOptionValue, &option); if (otherOption == NULL) return GreaterThan; if (m_value < otherOption->m_value || otherOption->m_value == 0) return LessThan; if (m_value > otherOption->m_value) return GreaterThan; return EqualTo; } virtual void Assign( const OpalMediaOption & option ) { if (!PIsDescendant(&option, OpalMediaOptionValue)) { PTRACE(6,"MediaOpt\t" << option.GetName() << " not assigned! Not descendent of OpalMediaOptionValue"); return; } const OpalMediaOptionValue * otherOption = PDownCast(const OpalMediaOptionValue, &option); if (otherOption != NULL) m_value = otherOption->m_value; } T GetValue() const { return m_value; } void SetValue(T value) { m_value = value; } protected: T m_value; T m_minimum; T m_maximum; }; typedef OpalMediaOptionValue OpalMediaOptionBoolean; typedef OpalMediaOptionValue OpalMediaOptionInteger; typedef OpalMediaOptionValue OpalMediaOptionUnsigned; typedef OpalMediaOptionValue OpalMediaOptionReal; class OpalMediaOptionEnum : public OpalMediaOption { PCLASSINFO(OpalMediaOptionEnum, OpalMediaOption); public: OpalMediaOptionEnum( const char * name, bool readOnly, const char * const * enumerations, PINDEX count, MergeType merge = EqualMerge, PINDEX value = 0 ); virtual PObject * Clone() const; virtual void PrintOn(ostream & strm) const; virtual void ReadFrom(istream & strm); virtual Comparison CompareValue(const OpalMediaOption & option) const; virtual void Assign(const OpalMediaOption & option); PINDEX GetValue() const { return m_value; } void SetValue(PINDEX value); protected: PStringArray m_enumerations; PINDEX m_value; }; class OpalMediaOptionString : public OpalMediaOption { PCLASSINFO(OpalMediaOptionString, OpalMediaOption); public: OpalMediaOptionString( const char * name, bool readOnly ); OpalMediaOptionString( const char * name, bool readOnly, const PString & value ); virtual PObject * Clone() const; virtual void PrintOn(ostream & strm) const; virtual void ReadFrom(istream & strm); virtual Comparison CompareValue(const OpalMediaOption & option) const; virtual void Assign(const OpalMediaOption & option); const PString & GetValue() const { return m_value; } void SetValue(const PString & value); protected: PString m_value; }; class OpalMediaOptionOctets : public OpalMediaOption { PCLASSINFO(OpalMediaOptionOctets, OpalMediaOption); public: OpalMediaOptionOctets( const char * name, bool readOnly, bool base64 ); OpalMediaOptionOctets( const char * name, bool readOnly, bool base64, const PBYTEArray & value ); OpalMediaOptionOctets( const char * name, bool readOnly, bool base64, const BYTE * data, PINDEX length ); virtual PObject * Clone() const; virtual void PrintOn(ostream & strm) const; virtual void ReadFrom(istream & strm); virtual Comparison CompareValue(const OpalMediaOption & option) const; virtual void Assign(const OpalMediaOption & option); const PBYTEArray & GetValue() const { return m_value; } void SetValue(const PBYTEArray & value); void SetValue(const BYTE * data, PINDEX length); protected: PBYTEArray m_value; bool m_base64; }; /////////////////////////////////////////////////////////////////////////////// /**This class describes a media format as used in the OPAL system. A media format is the type of any media data that is trasferred between OPAL entities. For example an audio codec such as G.723.1 is a media format, a video codec such as H.261 is also a media format. */ class OpalMediaFormat : public PCaselessString { PCLASSINFO(OpalMediaFormat, PCaselessString); public: PLIST(List, OpalMediaFormat); /**Default constructor creates a PCM-16 media format. */ OpalMediaFormat(); /**A constructor that only has a string name will search through the RegisteredMediaFormats list for the full specification so the other information fields can be set from the database. */ OpalMediaFormat( const char * search, ///< Name to search for PBoolean exact = TRUE ///< Flag for if search is to match name exactly ); /**Return TRUE if media format info is valid. This may be used if the single string constructor is used to check that it matched something in the registered media formats database. */ PBoolean IsValid() const { return rtpPayloadType <= RTP_DataFrame::MaxPayloadType; } /**Copy a media format */ OpalMediaFormat & operator=( const OpalMediaFormat & fmt ///< other media format ); /**Merge with another media format. This will alter and validate the options for this media format according to the merge rule for each option. The parameter is typically a "capability" while the current object isthe proposed channel format. This if the current object has a tx number of frames of 3, but the parameter has a value of 1, then the current object will be set to 1. Returns FALSE if the media formats are incompatible and cannot be merged. */ virtual bool Merge( const OpalMediaFormat & mediaFormat ); /**Get the RTP payload type that is to be used for this media format. This will either be an intrinsic one for the media format eg GSM or it will be automatically calculated as a dynamic media format that will be uniqueue amongst the registered media formats. */ RTP_DataFrame::PayloadTypes GetPayloadType() const { return rtpPayloadType; } void SetPayloadType(RTP_DataFrame::PayloadTypes type) { rtpPayloadType = type; } enum { NonRTPSessionID = 0, FirstSessionID = 1, DefaultAudioSessionID = 1, DefaultVideoSessionID = 2, DefaultDataSessionID = 3, DefaultH224SessionID = 3, DefaultExtVideoSessionID = 4, DefaultFileSessionID = 5, LastSessionID = 5 }; /**Get the default session ID for media format. */ unsigned GetDefaultSessionID() const { return defaultSessionID; } /**Determine if the media format requires a jitter buffer. As a rule an audio codec needs a jitter buffer and all others do not. */ PBoolean NeedsJitterBuffer() const { return needsJitter; } /**Get the average bandwidth used in bits/second. */ unsigned GetBandwidth() const { return bandwidth; } /**Get the average bandwidth used in bits/second. */ void SetBandwidth(unsigned newbandwidth) { bandwidth = newbandwidth; } /**Get the maximum frame size in bytes. If this returns zero then the media format has no intrinsic maximum frame size, eg G.711 would return zero but G.723.1 whoud return 24. */ PINDEX GetFrameSize() const { return frameSize; } void SetFrameSize(PINDEX size) { frameSize = size; } /**Get the frame rate in RTP timestamp units. If this returns zero then the media format is not real time and has no intrinsic timing eg */ unsigned GetFrameTime() const { return frameTime; } /**Set the frame rate in RTP timestamp units. */ void SetFrameTime(unsigned ft) { frameTime = ft; } /**Get the number of RTP timestamp units per millisecond. */ virtual unsigned GetTimeUnits() const { return timeUnits; } virtual void SetTimeUnits(unsigned units) { timeUnits = units; } enum StandardTimeUnits { AudioTimeUnits = 8, ///< 8kHz sample rate VideoTimeUnits = 90 ///< 90kHz sample rate }; /**Get the list of media formats that have been registered. */ static List GetRegisteredMediaFormats(); static void GetRegisteredMediaFormats(List & list); friend class OpalStaticMediaFormat; /**This form of the constructor will register the full details of the media format into an internal database. This would typically be used as a static global. In fact it would be very dangerous for an instance to use this constructor in any other way, especially local variables. If the rtpPayloadType is RTP_DataFrame::DynamicBase, then the RTP payload type is actually set to teh first unused dynamic RTP payload type that is in the registers set of media formats. The frameSize parameter indicates that the media format has a maximum size for each data frame, eg G.723.1 frames are no more than 24 bytes long. If zero then there is no intrinsic maximum, eg G.711. */ OpalMediaFormat( const char * fullName, ///< Full name of media format unsigned defaultSessionID, ///< Default session for codec type RTP_DataFrame::PayloadTypes rtpPayloadType, ///< RTP payload type code PBoolean needsJitter, ///< Indicate format requires a jitter buffer unsigned bandwidth, ///< Bandwidth in bits/second PINDEX frameSize = 0, ///< Size of frame in bytes (if applicable) unsigned frameTime = 0, ///< Time for frame in RTP units (if applicable) unsigned timeUnits = 0, ///< RTP units for frameTime (if applicable) time_t timeStamp = 0 ///< timestamp (for versioning) ); bool GetOptionValue( const PString & name, ///< Option name PString & value ///< String to receive option value ) const; /**Set the option value of the specified name as a string. Note the option will not be added if it does not exist, the option must be explicitly added using AddOption(). Returns false of the option is not present. */ bool SetOptionValue( const PString & name, ///< Option name const PString & value ///< New option value as string ); /**Get the option value of the specified name as a boolean. The default value is returned if the option is not present. */ bool GetOptionBoolean( const PString & name, ///< Option name bool dflt = FALSE ///< Default value if option not present ) const; /**Set the option value of the specified name as a boolean. Note the option will not be added if it does not exist, the option must be explicitly added using AddOption(). Returns false of the option is not present or is not of the same type. */ bool SetOptionBoolean( const PString & name, ///< Option name bool value ///< New value for option ); /**Get the option value of the specified name as an integer. The default value is returned if the option is not present. */ int GetOptionInteger( const PString & name, ///< Option name int dflt = 0 ///< Default value if option not present ) const; /**Set the option value of the specified name as an integer. Note the option will not be added if it does not exist, the option must be explicitly added using AddOption(). Returns false of the option is not present, not of the same type or is putside the allowable range. */ bool SetOptionInteger( const PString & name, ///< Option name int value ///< New value for option ); /**Get the option value of the specified name as a real. The default value is returned if the option is not present. */ double GetOptionReal( const PString & name, ///< Option name double dflt = 0 ///< Default value if option not present ) const; /**Set the option value of the specified name as a real. Note the option will not be added if it does not exist, the option must be explicitly added using AddOption(). Returns false of the option is not present or is not of the same type. */ bool SetOptionReal( const PString & name, ///< Option name double value ///< New value for option ); /**Get the option value of the specified name as an index into an enumeration list. The default value is returned if the option is not present. */ PINDEX GetOptionEnum( const PString & name, ///< Option name PINDEX dflt = 0 ///< Default value if option not present ) const; /**Set the option value of the specified name as an index into an enumeration. Note the option will not be added if it does not exist, the option must be explicitly added using AddOption(). Returns false of the option is not present or is not of the same type. */ bool SetOptionEnum( const PString & name, ///< Option name PINDEX value ///< New value for option ); /**Get the option value of the specified name as a string. The default value is returned if the option is not present. */ PString GetOptionString( const PString & name, ///< Option name const PString & dflt = PString::Empty() ///< Default value if option not present ) const; /**Set the option value of the specified name as a string. Note the option will not be added if it does not exist, the option must be explicitly added using AddOption(). Returns false of the option is not present or is not of the same type. */ bool SetOptionString( const PString & name, ///< Option name const PString & value ///< New value for option ); /**Get the option value of the specified name as an octet array. Returns FALSE if not present. */ bool GetOptionOctets( const PString & name, ///< Option name PBYTEArray & octets ///< Octets in option ) const; /**Set the option value of the specified name as an octet array. Note the option will not be added if it does not exist, the option must be explicitly added using AddOption(). Returns false of the option is not present or is not of the same type. */ bool SetOptionOctets( const PString & name, ///< Option name const PBYTEArray & octets ///< Octets in option ); bool SetOptionOctets( const PString & name, ///< Option name const BYTE * data, ///< Octets in option PINDEX length ///< Number of octets ); /**Set the options on the master format list entry. The media format must already be registered. Returns false if not. */ static bool SetRegisteredMediaFormat( const OpalMediaFormat & mediaFormat ///< Media format to copy to master list ); /** * Add a new option to this media format */ bool AddOption( OpalMediaOption * option, PBoolean overwrite = FALSE ); /** * Remove all options */ void RemoveAllOptions() { options.RemoveAll(); } /** * Determine if media format has the specified option. */ bool HasOption(const PString & name) const { return FindOption(name) != NULL; } /** * Get a pointer to the specified media format option. * Returns NULL if thee option does not exist. */ OpalMediaOption * FindOption( const PString & name ) const; OpalMediaOption & GetOption(PINDEX i) const { return options[i]; } PINDEX GetOptionCount() const { return options.GetSize(); } #if PTRACING static void DebugOptionList(const OpalMediaFormat & fmt); #endif protected: RTP_DataFrame::PayloadTypes rtpPayloadType; unsigned defaultSessionID; PBoolean needsJitter; unsigned bandwidth; PINDEX frameSize; unsigned frameTime; unsigned timeUnits; PMutex media_format_mutex; PSortedList options; time_t codecBaseTime; }; #ifdef H323_VIDEO class OpalVideoFormat : public OpalMediaFormat { friend class OpalPluginCodecManager; PCLASSINFO(OpalVideoFormat, OpalMediaFormat); public: OpalVideoFormat( const char * fullName, ///< Full name of media format RTP_DataFrame::PayloadTypes rtpPayloadType, ///< RTP payload type code unsigned frameWidth, ///< Width of video frame unsigned frameHeight, ///< Height of video frame unsigned frameRate, ///< Number of frames per second unsigned bitRate, ///< Maximum bits per second time_t timeStamp = 0 ///< timestamp (for versioning) ); virtual PObject * Clone() const; virtual bool Merge(const OpalMediaFormat & mediaFormat); static const char * const FrameWidthOption; static const char * const FrameHeightOption; static const char * const EncodingQualityOption; static const char * const TargetBitRateOption; static const char * const DynamicVideoQualityOption; static const char * const AdaptivePacketDelayOption; static const char * const NeedsJitterOption; static const char * const MaxBitRateOption; static const char * const MaxFrameSizeOption; static const char * const FrameTimeOption; static const char * const ClockRateOption; }; #endif // List of known media formats #define OPAL_PCM16 "PCM-16" #define OPAL_G711_ULAW_64K "G.711-uLaw-64k" #define OPAL_G711_ULAW_64K_20 "G.711-uLaw-64k-20" #define OPAL_G711_ALAW_64K "G.711-ALaw-64k" #define OPAL_G711_ALAW_64K_20 "G.711-ALaw-64k-20" #define OPAL_G711_ULAW_56K "G.711-uLaw-56k" #define OPAL_G711_ULAW_56K_20 "G.711-uLaw-56k-20" #define OPAL_G711_ALAW_56K "G.711-ALaw-56k" #define OPAL_G711_ALAW_56K_20 "G.711-ALaw-56k-20" #define OPAL_G728 "G.728" #define OPAL_G729 "G.729" #define OPAL_G729A "G.729A" #define OPAL_G729B "G.729B" #define OPAL_G729AB "G.729A/B" #define OPAL_G7231 "G.723.1" #define OPAL_G7231_6k3 OPAL_G7231 #define OPAL_G7231_5k3 "G.723.1(5.3k)" #define OPAL_G7231A_6k3 "G.723.1A(6.3k)" #define OPAL_G7231A_5k3 "G.723.1A(5.3k)" #define OPAL_GSM0610 "GSM-06.10" extern char OpalPCM16[]; extern char OpalG711uLaw64k[]; extern char OpalG711uLaw64k20[]; extern char OpalG711ALaw64k[]; extern char OpalG711ALaw64k20[]; extern char OpalG728[]; extern char OpalG729[]; extern char OpalG729A[]; extern char OpalG729B[]; extern char OpalG729AB[]; extern char OpalG7231_6k3[]; extern char OpalG7231_5k3[]; extern char OpalG7231A_6k3[]; extern char OpalG7231A_5k3[]; extern char OpalGSM0610[]; #define OpalG711uLaw OpalG711uLaw64k #define OpalG711ALaw OpalG711ALaw64k #define OpalG7231 OpalG7231_6k3 // // Originally, the following inplace code was used instead of this macro: // // static PAbstractSingletonFactory // > opalPCM16Factory(OpalPCM16); // // This used the following macro: // // // template < // const char * _fullName, /// Full name of media format // unsigned _defaultSessionID, /// Default session for codec type // RTP_DataFrame::PayloadTypes _rtpPayloadType, /// RTP payload type code // PBoolean _needsJitter, /// Indicate format requires a jitter buffer // unsigned _bandwidth, /// Bandwidth in bits/second // PINDEX _frameSize, /// Size of frame in bytes (if applicable) // unsigned _frameTime, /// Time for frame in RTP units (if applicable) // unsigned _timeUnits, /// RTP units for frameTime (if applicable) // time_t _timeStamp /// timestamp (for versioning) // > // class OpalStaticMediaFormatTemplate : public OpalStaticMediaFormat // { // public: // OpalStaticMediaFormatTemplate() // : OpalStaticMediaFormat(_fullName, _defaultSessionID, _rtpPayloadType, _needsJitter, _bandwidth // , _frameSize, _frameTime, _timeUnits, _timeStamp ) // { } // }; // // Unfortauntely, MSVC 6 did not like this so this crappy macro has to be used instead of a template // typedef PFactory OpalMediaFormatFactory; #define OPAL_MEDIA_FORMAT_DECLARE(classname, _fullName, _defaultSessionID, _rtpPayloadType, _needsJitter,_bandwidth, _frameSize, _frameTime, _timeUnits, _timeStamp) \ class classname : public OpalMediaFormat \ { \ public: \ classname() \ : OpalMediaFormat(_fullName, _defaultSessionID, _rtpPayloadType, _needsJitter, _bandwidth, \ _frameSize, _frameTime, _timeUnits, _timeStamp){} \ }; \ OpalMediaFormatFactory::Worker classname##Factory(_fullName, true); \ #endif // __OPAL_MEDIAFMT_H // End of File /////////////////////////////////////////////////////////////// h323plus/include/rtp.h0000644000175000017500000010375311647277756013547 0ustar markmark/* * rtp.h * * RTP protocol handler * * Open H323 Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Contributor(s): ______________________________________. * * $ Id $ * */ #ifndef __OPAL_RTP_H #define __OPAL_RTP_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include #include "ptlib_extras.h" class RTP_JitterBuffer; class PHandleAggregator; #ifdef P_STUN class PNatMethod; #endif /////////////////////////////////////////////////////////////////////////////// // // class to hold the QoS definitions for an RTP channel #if P_QOS class RTP_QOS : public PObject { PCLASSINFO(RTP_QOS,PObject); public: PQoS dataQoS; PQoS ctrlQoS; }; #else class RTP_QOS; #endif /////////////////////////////////////////////////////////////////////////////// // Real Time Protocol - IETF RFC1889 and RFC1890 /**An RTP data frame encapsulation. */ class RTP_DataFrame : public PBYTEArray { PCLASSINFO(RTP_DataFrame, PBYTEArray); public: RTP_DataFrame(PINDEX payloadSize = 2048, PBoolean dynamicAllocation = TRUE); enum { ProtocolVersion = 2, MinHeaderSize = 12 }; enum PayloadTypes { PCMU, // G.711 u-Law FS1016, // Federal Standard 1016 CELP G721, // ADPCM - Subsumed by G.726 G726 = G721, GSM, // GSM 06.10 G7231, // G.723.1 at 6.3kbps or 5.3 kbps DVI4_8k, // DVI4 at 8kHz sample rate DVI4_16k, // DVI4 at 16kHz sample rate LPC, // LPC-10 Linear Predictive CELP PCMA, // G.711 A-Law G722, // G.722 L16_Stereo, // 16 bit linear PCM L16_Mono, // 16 bit linear PCM G723, // G.723 CN, // Confort Noise MPA, // MPEG1 or MPEG2 audio G728, // G.728 16kbps CELP DVI4_11k, // DVI4 at 11kHz sample rate DVI4_22k, // DVI4 at 22kHz sample rate G729, // G.729 8kbps Cisco_CN, // Cisco systems comfort noise (unofficial) CelB = 25, // Sun Systems Cell-B video JPEG, // Motion JPEG H261 = 31, // H.261 MPV, // MPEG1 or MPEG2 video MP2T, // MPEG2 transport system H263, // H.263 LastKnownPayloadType, DynamicBase = 96, MaxPayloadType = 127, IllegalPayloadType }; unsigned GetVersion() const { return (theArray[0]>>6)&3; } PBoolean GetExtension() const { return (theArray[0]&0x10) != 0; } void SetExtension(PBoolean ext); PBoolean GetMarker() const { return (theArray[1]&0x80) != 0; } void SetMarker(PBoolean m); PayloadTypes GetPayloadType() const { return (PayloadTypes)(theArray[1]&0x7f); } void SetPayloadType(PayloadTypes t); WORD GetSequenceNumber() const { return *(PUInt16b *)&theArray[2]; } void SetSequenceNumber(WORD n) { *(PUInt16b *)&theArray[2] = n; } DWORD GetTimestamp() const { return *(PUInt32b *)&theArray[4]; } void SetTimestamp(DWORD t) { *(PUInt32b *)&theArray[4] = t; } DWORD GetSyncSource() const { return *(PUInt32b *)&theArray[8]; } void SetSyncSource(DWORD s) { *(PUInt32b *)&theArray[8] = s; } PINDEX GetContribSrcCount() const { return theArray[0]&0xf; } DWORD GetContribSource(PINDEX idx) const; void SetContribSource(PINDEX idx, DWORD src); PINDEX GetHeaderSize() const; int GetExtensionType() const; // -1 is no extension void SetExtensionType(int type); PINDEX GetExtensionSize() const; PBoolean SetExtensionSize(PINDEX sz); BYTE * GetExtensionPtr() const; PINDEX GetPayloadSize() const { return payloadSize; } PBoolean SetPayloadSize(PINDEX sz); BYTE * GetPayloadPtr() const { return (BYTE *)(theArray+GetHeaderSize()); } protected: PINDEX payloadSize; #if PTRACING friend ostream & operator<<(ostream & o, PayloadTypes t); #endif }; H323LIST(RTP_DataFrameList, RTP_DataFrame); /**This class is for encapsulating the Multiplexing of RTP Data. */ class RTP_MultiDataFrame : public PBYTEArray { PCLASSINFO(RTP_MultiDataFrame, PBYTEArray); public: RTP_MultiDataFrame( BYTE const * buffer, ///< Pointer to an array of BYTEs. PINDEX length ///< Number of elements pointed to by \p buffer. ); RTP_MultiDataFrame( DWORD id, ///< Mulitplex ID const BYTE * buffer, ///< Pointer to an array of BYTEs. PINDEX rtplen ///< Number of elements pointed to by \p buffer. ); RTP_MultiDataFrame( PINDEX rtplen ///< Length of RTP Frame ); int GetMultiHeaderSize() const; DWORD GetMultiplexID() const; void SetMulitplexID(DWORD id); void GetRTPPayload(RTP_DataFrame & frame) const; void SetRTPPayload(RTP_DataFrame & frame); }; H323LIST(RTP_MultiDataFrameList, RTP_MultiDataFrame); /**An RTP control frame encapsulation. */ class RTP_ControlFrame : public PBYTEArray { PCLASSINFO(RTP_ControlFrame, PBYTEArray); public: RTP_ControlFrame(PINDEX compoundSize = 2048); unsigned GetVersion() const { return (BYTE)theArray[compoundOffset]>>6; } unsigned GetCount() const { return (BYTE)theArray[compoundOffset]&0x1f; } void SetCount(unsigned count); enum PayloadTypes { e_SenderReport = 200, e_ReceiverReport, e_SourceDescription, e_Goodbye, e_ApplDefined }; unsigned GetPayloadType() const { return (BYTE)theArray[compoundOffset+1]; } void SetPayloadType(unsigned t); PINDEX GetPayloadSize() const { return 4*(*(PUInt16b *)&theArray[compoundOffset+2]); } void SetPayloadSize(PINDEX sz); BYTE * GetPayloadPtr() const { return (BYTE *)(theArray+compoundOffset+4); } PBoolean ReadNextCompound(); PBoolean WriteNextCompound(); PINDEX GetCompoundSize() const { return compoundSize; } #pragma pack(1) struct ReceiverReport { PUInt32b ssrc; /* data source being reported */ BYTE fraction; /* fraction lost since last SR/RR */ BYTE lost[3]; /* cumulative number of packets lost (signed!) */ PUInt32b last_seq; /* extended last sequence number received */ PUInt32b jitter; /* interarrival jitter */ PUInt32b lsr; /* last SR packet from this source */ PUInt32b dlsr; /* delay since last SR packet */ unsigned GetLostPackets() const { return (lost[0]<<16U)+(lost[1]<<8U)+lost[2]; } void SetLostPackets(unsigned lost); }; struct SenderReport { PUInt32b ssrc; /* source this RTCP packet refers to */ PUInt32b ntp_sec; /* NTP timestamp */ PUInt32b ntp_frac; PUInt32b rtp_ts; /* RTP timestamp */ PUInt32b psent; /* packets sent */ PUInt32b osent; /* octets sent */ }; enum DescriptionTypes { e_END, e_CNAME, e_NAME, e_EMAIL, e_PHONE, e_LOC, e_TOOL, e_NOTE, e_PRIV, NumDescriptionTypes }; struct SourceDescription { PUInt32b src; /* first SSRC/CSRC */ struct Item { BYTE type; /* type of SDES item (enum DescriptionTypes) */ BYTE length; /* length of SDES item (in octets) */ char data[1]; /* text, not zero-terminated */ const Item * GetNextItem() const { return (const Item *)((char *)this + length + 2); } Item * GetNextItem() { return (Item *)((char *)this + length + 2); } } item[1]; /* list of SDES items */ }; SourceDescription & AddSourceDescription( DWORD src ///< SSRC/CSRC identifier ); SourceDescription::Item & AddSourceDescriptionItem( SourceDescription & sdes, ///< SDES record to add item to unsigned type, ///< Description type const PString & data ///< Data for description ); #pragma pack() protected: PINDEX compoundOffset; PINDEX compoundSize; }; /**This class is for encapsulating the Multiplexing of RTCP. */ class RTP_MultiControlFrame : public PBYTEArray { PCLASSINFO(RTP_MultiControlFrame, PBYTEArray); public: RTP_MultiControlFrame( BYTE const * buffer, ///< Pointer to an array of BYTEs. PINDEX length ///< Number of elements pointed to by \p buffer. ); RTP_MultiControlFrame( PINDEX rtplen ///< Length of RTP Frame ); int GetMultiHeaderSize() const; WORD GetMultiplexID() const; void SetMulitplexID(WORD id); void GetRTCPPayload(RTP_ControlFrame & frame) const; void SetRTCPPayload(RTP_ControlFrame & frame); }; /**This class is for encpsulating the IETF Real Time Protocol interface. */ class RTP_UDP; class RTP_UserData; class RTP_Session : public PObject { PCLASSINFO(RTP_Session, PObject); public: enum { DefaultAudioSessionID = 1, DefaultVideoSessionID = 2, DefaultFaxSessionID = 3, DefaultH224SessionID = 3, DefaultExtVideoSessionID = 4, DefaultFileSessionID = 5 }; /**@name Construction */ //@{ /**Create a new RTP session. */ RTP_Session( #ifdef H323_RTP_AGGREGATE PHandleAggregator * aggregator, ///< RTP aggregator #endif unsigned id, ///< Session ID for RTP channel RTP_UserData * userData = NULL ///< Optional data for session. ); /**Delete a session. This deletes the userData field. */ ~RTP_Session(); //@} /**@name Operations */ //@{ /**Sets the size of the jitter buffer to be used by this RTP session. A session default to not having any jitter buffer enabled for reading and the ReadBufferedData() function simply calls ReadData(). Once a jitter buffer has been created it cannot be removed, though its size may be adjusted. If the jitterDelay paramter is zero, it destroys the jitter buffer attached to this RTP session. */ void SetJitterBufferSize( unsigned minJitterDelay, ///< Minimum jitter buffer delay in RTP timestamp units unsigned maxJitterDelay, ///< Maximum jitter buffer delay in RTP timestamp units PINDEX stackSize = 30000 ///< Stack size for jitter thread ); /**Get current size of the jitter buffer. This returns the currently used jitter buffer delay in RTP timestamp units. It will be some value between the minimum and maximum set in the SetJitterBufferSize() function. */ unsigned GetJitterBufferSize() const; /**Modifies the QOS specifications for this RTP session*/ virtual PBoolean ModifyQOS(RTP_QOS * ) { return FALSE; } /**Read a data frame from the RTP channel. This function will conditionally read data from eth jitter buffer or directly if there is no jitter buffer enabled. An application should generally use this in preference to directly calling ReadData(). */ PBoolean ReadBufferedData( DWORD timestamp, ///< Timestamp to read from buffer. RTP_DataFrame & frame ///< Frame read from the RTP session ); /**Read a data frame from the RTP channel. Any control frames received are dispatched to callbacks and are not returned by this function. It will block until a data frame is available or an error occurs. */ virtual PBoolean ReadData( RTP_DataFrame & frame, ///< Frame read from the RTP session PBoolean loop ///< If TRUE, loop as long as data is available, if FALSE, only process once ) = 0; /**Read a data frame from the RTP channel that did not orginate from the UDPSocket */ virtual PBoolean PseudoRead( int & selectStatus ); /**Write a data frame from the RTP channel. */ virtual PBoolean WriteData( RTP_DataFrame & frame ///< Frame to write to the RTP session ) = 0; /**Write a control frame from the RTP channel. */ virtual PBoolean WriteControl( RTP_ControlFrame & frame ///< Frame to write to the RTP session ) = 0; /**Write the RTCP reports. */ virtual PBoolean SendReport(); /**Close down the RTP session. */ virtual void Close( PBoolean reading ///< Closing the read side of the session ) = 0; /**Get the local host name as used in SDES packes. */ virtual PString GetLocalHostName() = 0; //@} /**@name Call back functions */ //@{ enum SendReceiveStatus { e_ProcessPacket, e_IgnorePacket, e_AbortTransport }; virtual SendReceiveStatus OnSendData(RTP_DataFrame & frame); virtual SendReceiveStatus OnReceiveData(const RTP_DataFrame & frame, const RTP_UDP & rtp); virtual SendReceiveStatus OnReceiveControl(RTP_ControlFrame & frame); class ReceiverReport : public PObject { PCLASSINFO(ReceiverReport, PObject); public: void PrintOn(ostream &) const; DWORD sourceIdentifier; DWORD fractionLost; /* fraction lost since last SR/RR */ DWORD totalLost; /* cumulative number of packets lost (signed!) */ DWORD lastSequenceNumber; /* extended last sequence number received */ DWORD jitter; /* interarrival jitter */ PTimeInterval lastTimestamp;/* last SR packet from this source */ PTimeInterval delay; /* delay since last SR packet */ }; PARRAY(ReceiverReportArray, ReceiverReport); class SenderReport : public PObject { PCLASSINFO(SenderReport, PObject); public: void PrintOn(ostream &) const; DWORD sourceIdentifier; PTime realTimestamp; DWORD rtpTimestamp; DWORD packetsSent; DWORD octetsSent; }; virtual void OnRxSenderReport(const SenderReport & sender, const ReceiverReportArray & reports); virtual void OnRxReceiverReport(DWORD src, const ReceiverReportArray & reports); virtual bool AVSyncData(SenderReport & sender); class SourceDescription : public PObject { PCLASSINFO(SourceDescription, PObject); public: SourceDescription(DWORD src) { sourceIdentifier = src; } void PrintOn(ostream &) const; DWORD sourceIdentifier; POrdinalToString items; }; PARRAY(SourceDescriptionArray, SourceDescription); virtual void OnRxSourceDescription(const SourceDescriptionArray & descriptions); virtual void OnRxGoodbye(const PDWORDArray & sources, const PString & reason); virtual void OnRxApplDefined(const PString & type, unsigned subtype, DWORD src, const BYTE * data, PINDEX size); //@} /**@name Member variable access */ //@{ /**Get the ID for the RTP session. */ unsigned GetSessionID() const { return sessionID; } /**Set the ID for the RTP session. */ void SetSessionID(unsigned id); /**Get the canonical name for the RTP session. */ PString GetCanonicalName() const; /**Set the canonical name for the RTP session. */ void SetCanonicalName(const PString & name); /**Get the tool name for the RTP session. */ PString GetToolName() const; /**Set the tool name for the RTP session. */ void SetToolName(const PString & name); /**Get the user data for the session. */ RTP_UserData * GetUserData() const { return userData; } /**Set the user data for the session. */ void SetUserData( RTP_UserData * data ///< New user data to be used ); /**Get the source output identifier. */ DWORD GetSyncSourceOut() const { return syncSourceOut; } /**Increment reference count for RTP session. */ void IncrementReference() { referenceCount++; } /**Decrement reference count for RTP session. */ PBoolean DecrementReference() { return --referenceCount == 0; } /**Get Reference Count */ unsigned GetReferenceCount() const { return referenceCount; } /**Indicate if will ignore all but first received SSRC value. */ PBoolean WillIgnoreOtherSources() const { return ignoreOtherSources; } /**Indicate if will ignore all but first received SSRC value. */ void SetIgnoreOtherSources( PBoolean ignore ///< Flag for ignore other SSRC values ) { ignoreOtherSources = ignore; } /**Indicate if will ignore out of order packets. */ PBoolean WillIgnoreOutOfOrderPackets() const { return ignoreOutOfOrderPackets; } /**Indicate if will ignore out of order packets. */ void SetIgnoreOutOfOrderPackets( PBoolean ignore ///< Flag for ignore out of order packets ) { ignoreOutOfOrderPackets = ignore; } /**Get the time interval for sending RTCP reports in the session. */ const PTimeInterval & GetReportTimeInterval() { return reportTimeInterval; } /**Set the time interval for sending RTCP reports in the session. */ void SetReportTimeInterval( const PTimeInterval & interval ///< New time interval for reports. ) { reportTimeInterval = interval; } /**Get the current report timer */ PTimeInterval GetReportTimer() { return reportTimer; } /**Get the interval for transmitter statistics in the session. */ unsigned GetTxStatisticsInterval() { return txStatisticsInterval; } /**Set the interval for transmitter statistics in the session. */ void SetTxStatisticsInterval( unsigned packets ///< Number of packets between callbacks ); /**Get the interval for receiver statistics in the session. */ unsigned GetRxStatisticsInterval() { return rxStatisticsInterval; } /**Set the interval for receiver statistics in the session. */ void SetRxStatisticsInterval( unsigned packets ///< Number of packets between callbacks ); /**Get total number of packets sent in session. */ DWORD GetPacketsSent() const { return packetsSent; } /**Get total number of octets sent in session. */ DWORD GetOctetsSent() const { return octetsSent; } /**Get total number of packets received in session. */ DWORD GetPacketsReceived() const { return packetsReceived; } /**Get total number of octets received in session. */ DWORD GetOctetsReceived() const { return octetsReceived; } /**Get total number received packets lost in session. */ DWORD GetPacketsLost() const { return packetsLost; } /**Get total number of packets received out of order in session. */ DWORD GetPacketsOutOfOrder() const { return packetsOutOfOrder; } /**Get total number received packets too late to go into jitter buffer. */ DWORD GetPacketsTooLate() const; /**Get average time between sent packets. This is averaged over the last txStatisticsInterval packets and is in milliseconds. */ DWORD GetAverageSendTime() const { return averageSendTime; } /**Get maximum time between sent packets. This is over the last txStatisticsInterval packets and is in milliseconds. */ DWORD GetMaximumSendTime() const { return maximumSendTime; } /**Get minimum time between sent packets. This is over the last txStatisticsInterval packets and is in milliseconds. */ DWORD GetMinimumSendTime() const { return minimumSendTime; } /**Get average time between received packets. This is averaged over the last rxStatisticsInterval packets and is in milliseconds. */ DWORD GetAverageReceiveTime() const { return averageReceiveTime; } /**Get maximum time between received packets. This is over the last rxStatisticsInterval packets and is in milliseconds. */ DWORD GetMaximumReceiveTime() const { return maximumReceiveTime; } /**Get minimum time between received packets. This is over the last rxStatisticsInterval packets and is in milliseconds. */ DWORD GetMinimumReceiveTime() const { return minimumReceiveTime; } /**Get averaged jitter time for received packets. This is the calculated statistical variance of the interarrival time of received packets in milliseconds. */ DWORD GetAvgJitterTime() const { return jitterLevel>>7; } /**Get averaged jitter time for received packets. This is the maximum value of jitterLevel for the session. */ DWORD GetMaxJitterTime() const { return maximumJitterLevel>>7; } /** * return the timestamp at which the first packet of RTP data was received */ PTime GetFirstDataReceivedTime() const { return firstDataReceivedTime; } /** * return the local Transport Address */ PString GetLocalTransportAddress() const { return localAddress; }; /** * return the remote Transport Address */ PString GetRemoteTransportAddress() const { return remoteAddress; }; //@} /**@name Functions added to RTP aggregator */ //@{ virtual int GetDataSocketHandle() const { return -1; } virtual int GetControlSocketHandle() const { return -1; } //@} protected: void AddReceiverReport(RTP_ControlFrame::ReceiverReport & receiver); unsigned sessionID; PString canonicalName; PString toolName; unsigned referenceCount; RTP_UserData * userData; #ifdef H323_AUDIO_CODECS RTP_JitterBuffer * jitter; #endif PBoolean ignoreOtherSources; PBoolean ignoreOutOfOrderPackets; DWORD syncSourceOut; DWORD syncSourceIn; PTimeInterval reportTimeInterval; unsigned txStatisticsInterval; unsigned rxStatisticsInterval; WORD lastSentSequenceNumber; WORD expectedSequenceNumber; DWORD lastSentTimestamp; PTimeInterval lastSentPacketTime; PTimeInterval lastReceivedPacketTime; WORD lastRRSequenceNumber; PINDEX consecutiveOutOfOrderPackets; // Statistics DWORD packetsSent; DWORD octetsSent; DWORD packetsReceived; DWORD octetsReceived; DWORD packetsLost; DWORD packetsOutOfOrder; DWORD averageSendTime; DWORD maximumSendTime; DWORD minimumSendTime; DWORD averageReceiveTime; DWORD maximumReceiveTime; DWORD minimumReceiveTime; DWORD jitterLevel; DWORD maximumJitterLevel; // Socket information PString localAddress; PString remoteAddress; unsigned txStatisticsCount; unsigned rxStatisticsCount; DWORD averageSendTimeAccum; DWORD maximumSendTimeAccum; DWORD minimumSendTimeAccum; DWORD averageReceiveTimeAccum; DWORD maximumReceiveTimeAccum; DWORD minimumReceiveTimeAccum; DWORD packetsLostSinceLastRR; DWORD lastTransitTime; PTime firstDataReceivedTime; PMutex reportMutex; PTimer reportTimer; // Sync Information PBoolean avSyncData; SenderReport rtpSync; #ifdef H323_RTP_AGGREGATE PHandleAggregator * aggregator; #endif }; /**This class is the base for user data that may be attached to the RTP_session allowing callbacks for statistics and progress monitoring to be passed to an arbitrary object that an RTP consumer may require. */ class RTP_UserData : public PObject { PCLASSINFO(RTP_UserData, PObject); public: /**Callback from the RTP session for transmit statistics monitoring. This is called every RTP_Session::txStatisticsInterval packets on the transmitter indicating that the statistics have been updated. The default behaviour does nothing. */ virtual void OnTxStatistics( const RTP_Session & session ///< Session with statistics ) const; /**Callback from the RTP session for receive statistics monitoring. This is called every RTP_Session::receiverReportInterval packets on the receiver indicating that the statistics have been updated. The default behaviour does nothing. */ virtual void OnRxStatistics( const RTP_Session & session ///< Session with statistics ) const; /**Callback from the RTP session for statistics monitoring. This is called at the end of a call to indicating that the statistics of the call. The default behaviour does nothing. */ virtual void OnFinalStatistics( const RTP_Session & session ///< Session with statistics ) const; /**Callback from the RTP session for statistics monitoring. This is called when a RTPSenderReport is received The default behaviour does nothing. */ virtual void OnRxSenderReport( unsigned sessionID, const RTP_Session::SenderReport & send, const RTP_Session::ReceiverReportArray & recv ) const; }; /**This class is for encpsulating the IETF Real Time Protocol interface. */ class RTP_SessionManager : public PObject { PCLASSINFO(RTP_SessionManager, PObject); public: /**@name Construction */ //@{ /**Construct new session manager database. */ RTP_SessionManager(); RTP_SessionManager(const RTP_SessionManager & sm); RTP_SessionManager & operator=(const RTP_SessionManager & sm); //@} /**@name Operations */ //@{ /**Use an RTP session for the specified ID. If this function returns a non-null value, then the ReleaseSession() function MUST be called or the session is never deleted for the lifetime of the session manager. If there is no session of the specified ID, then you MUST call the AddSession() function with a new RTP_Session. The mutex flag is left locked in this case. The AddSession() expects the mutex to be locked and unlocks it automatically. */ RTP_Session * UseSession( unsigned sessionID ///< Session ID to use. ); /**Add an RTP session for the specified ID. This function MUST be called only after the UseSession() function has returned NULL. The mutex flag is left locked in that case. This function expects the mutex to be locked and unlocks it automatically. */ void AddSession( RTP_Session * session ///< Session to add. ); /**Release the session. If the session ID is not being used any more any clients via the UseSession() function, then the session is deleted. */ void ReleaseSession( unsigned sessionID ///< Session ID to release. ); /**Move the session. */ void MoveSession( unsigned oldSessionID, ///< Session ID from. unsigned newSessionID ///< Session ID to. ); /**Get a session for the specified ID. Unlike UseSession, this does not increment the usage count on the session so may be used to just gain a pointer to an RTP session. */ RTP_Session * GetSession( unsigned sessionID /// Session ID to get. ) const; /**Begin an enumeration of the RTP sessions. This function acquires the mutex for the sessions database and returns the first element in it. eg: RTP_Session * session; for (session = rtpSessions.First(); session != NULL; session = rtpSessions.Next()) { if (session->Something()) { rtpSessions.Exit(); break; } } Note that the Exit() function must be called if the enumeration is stopped prior to Next() returning NULL. */ RTP_Session * First(); /**Get the next session in the enumeration. The session database remains locked until this function returns NULL. Note that the Exit() function must be called if the enumeration is stopped prior to Next() returning NULL. */ RTP_Session * Next(); /**Exit the enumeration of RTP sessions. If the enumeration is desired to be exited before Next() returns NULL this this must be called to unlock the session database. Note that you should NOT call Exit() if Next() HAS returned NULL, or race conditions can result. */ void Exit(); //@} protected: H323DICTIONARY(SessionDict, POrdinalKey, RTP_Session); SessionDict sessions; PMutex mutex; PINDEX enumerationIndex; }; /**This class is for the IETF Real Time Protocol interface on UDP/IP. */ class H323Connection; class RTP_UDP : public RTP_Session { PCLASSINFO(RTP_UDP, RTP_Session); public: /**@name Construction */ //@{ /**Create a new RTP channel. */ RTP_UDP( #ifdef H323_RTP_AGGREGATE PHandleAggregator * aggregator, ///< RTP aggregator #endif unsigned id, ///< Session ID for RTP channel PBoolean remoteIsNat = FALSE ///< If TRUE, we have hints the remote endpoint is behind a NAT ); /// Destroy the RTP ~RTP_UDP(); //@} /**@name Overrides from class RTP_Session */ //@{ /**Read a data frame from the RTP channel. Any control frames received are dispatched to callbacks and are not returned by this function. It will block until a data frame is available or an error occurs. */ virtual PBoolean ReadData(RTP_DataFrame & frame, PBoolean loop); /**Read a data frame from the RTP channel that did not orginate from the UDPSocket */ virtual PBoolean PseudoRead(int & selectStatus); /**Write a data frame from the RTP channel. */ virtual PBoolean WriteData(RTP_DataFrame & frame); /**Write a control frame from the RTP channel. */ virtual PBoolean WriteControl(RTP_ControlFrame & frame); /**Close down the RTP session. */ virtual void Close( PBoolean reading ///< Closing the read side of the session ); /**Get the session description name. */ virtual PString GetLocalHostName(); //@} /**@name QoS Settings */ //@{ /**Change the QoS settings */ virtual PBoolean ModifyQOS(RTP_QOS * rtpqos); /** Enable QOS on Call Basis */ virtual void EnableGQoS(PBoolean success = TRUE); #if P_QOS /** Get the QOS settings */ PQoS & GetQOS(); #endif //@} /**@name New functions for class */ //@{ /**Open the UDP ports for the RTP session. */ PBoolean Open( PIPSocket::Address localAddress, ///< Local interface to bind to WORD portBase, ///< Base of ports to search WORD portMax, ///< end of ports to search (inclusive) BYTE ipTypeOfService, ///< Type of Service byte const H323Connection & connection, ///< Connection #ifdef P_STUN PNatMethod * meth = NULL, ///* Nat Method to use to create sockets (or NULL if no Method) #else void * = NULL, ///< STUN server to use createing sockets (or NULL if no STUN) #endif RTP_QOS * rtpqos = NULL ///< QOS spec (or NULL if no QoS) ); //@} /**Reopens an existing session in the given direction. */ void Reopen(PBoolean isReading); //@} /**@name Member variable access */ //@{ /**Get local address of session. */ PIPSocket::Address GetLocalAddress() const { return localAddress; } /**Set local address of session. */ void SetLocalAddress( const PIPSocket::Address & addr ) { localAddress = addr; } /**Get remote address of session. */ PIPSocket::Address GetRemoteAddress() const { return remoteAddress; } /**Get local data port of session. */ WORD GetLocalDataPort() const { return localDataPort; } /**Get local control port of session. */ WORD GetLocalControlPort() const { return localControlPort; } /**Get remote data port of session. */ WORD GetRemoteDataPort() const { return remoteDataPort; } /**Get remote control port of session. */ WORD GetRemoteControlPort() const { return remoteControlPort; } /**Get data UDP socket of session. */ PUDPSocket & GetDataSocket() { return *dataSocket; } /**Get control UDP socket of session. */ PUDPSocket & GetControlSocket() { return *controlSocket; } /**Set the remote address and port information for session. */ PBoolean SetRemoteSocketInfo( PIPSocket::Address address, ///< Address of remote WORD port, ///< Port on remote PBoolean isDataPort ///< Flag for data or control channel ); /**Apply QOS - requires address to connect the socket on Windows platforms */ void ApplyQOS( const PIPSocket::Address & addr ); /**Whether the remote has been detected as being behind NAT. */ PBoolean IsRemoteNAT() { return remoteIsNAT; } //@} int GetDataSocketHandle() const { return dataSocket != NULL ? dataSocket->GetHandle() : -1; } int GetControlSocketHandle() const { return controlSocket != NULL ? controlSocket->GetHandle() : -1; } protected: SendReceiveStatus ReadDataPDU(RTP_DataFrame & frame); SendReceiveStatus ReadControlPDU(); SendReceiveStatus ReadDataOrControlPDU( PUDPSocket & socket, PBYTEArray & frame, PBoolean fromDataChannel ); PIPSocket::Address localAddress; WORD localDataPort; WORD localControlPort; PIPSocket::Address remoteAddress; WORD remoteDataPort; WORD remoteControlPort; PIPSocket::Address remoteTransmitAddress; PBoolean shutdownRead; PBoolean shutdownWrite; PUDPSocket * dataSocket; PUDPSocket * controlSocket; PBoolean appliedQOS; PBoolean enableGQOS; PBoolean remoteIsNAT; }; #endif // __OPAL_RTP_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/h235.h0000644000175000017500000006706311015524074013377 0ustar markmark// // h235.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H235 #ifndef __H235_H #define __H235_H #ifdef P_USE_PRAGMA #pragma interface #endif #include // // ChallengeString // class H235_ChallengeString : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_ChallengeString, PASN_OctetString); #endif public: H235_ChallengeString(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H235_ChallengeString(const char * v); H235_ChallengeString(const PString & v); H235_ChallengeString(const PBYTEArray & v); H235_ChallengeString & operator=(const char * v); H235_ChallengeString & operator=(const PString & v); H235_ChallengeString & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // TimeStamp // class H235_TimeStamp : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_TimeStamp, PASN_Integer); #endif public: H235_TimeStamp(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H235_TimeStamp & operator=(int v); H235_TimeStamp & operator=(unsigned v); PObject * Clone() const; }; // // RandomVal // class H235_RandomVal : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_RandomVal, PASN_Integer); #endif public: H235_RandomVal(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H235_RandomVal & operator=(int v); H235_RandomVal & operator=(unsigned v); PObject * Clone() const; }; // // Password // class H235_Password : public PASN_BMPString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_Password, PASN_BMPString); #endif public: H235_Password(unsigned tag = UniversalBMPString, TagClass tagClass = UniversalTagClass); H235_Password & operator=(const char * v); H235_Password & operator=(const PString & v); H235_Password & operator=(const PWCharArray & v); H235_Password & operator=(const PASN_BMPString & v); PObject * Clone() const; }; // // Identifier // class H235_Identifier : public PASN_BMPString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_Identifier, PASN_BMPString); #endif public: H235_Identifier(unsigned tag = UniversalBMPString, TagClass tagClass = UniversalTagClass); H235_Identifier & operator=(const char * v); H235_Identifier & operator=(const PString & v); H235_Identifier & operator=(const PWCharArray & v); H235_Identifier & operator=(const PASN_BMPString & v); PObject * Clone() const; }; // // KeyMaterial // class H235_KeyMaterial : public PASN_BitString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_KeyMaterial, PASN_BitString); #endif public: H235_KeyMaterial(unsigned tag = UniversalBitString, TagClass tagClass = UniversalTagClass); PObject * Clone() const; }; // // NonStandardParameter // class H235_NonStandardParameter : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_NonStandardParameter, PASN_Sequence); #endif public: H235_NonStandardParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_ObjectId m_nonStandardIdentifier; PASN_OctetString m_data; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DHset // class H235_DHset : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_DHset, PASN_Sequence); #endif public: H235_DHset(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_BitString m_halfkey; PASN_BitString m_modSize; PASN_BitString m_generator; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ECpoint // class H235_ECpoint : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_ECpoint, PASN_Sequence); #endif public: H235_ECpoint(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_x, e_y }; PASN_BitString m_x; PASN_BitString m_y; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ECKASDH // class H235_ECKASDH_eckasdhp; class H235_ECKASDH_eckasdh2; class H235_ECKASDH : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_ECKASDH, PASN_Choice); #endif public: H235_ECKASDH(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_eckasdhp, e_eckasdh2 }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H235_ECKASDH_eckasdhp &() const; #else operator H235_ECKASDH_eckasdhp &(); operator const H235_ECKASDH_eckasdhp &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H235_ECKASDH_eckasdh2 &() const; #else operator H235_ECKASDH_eckasdh2 &(); operator const H235_ECKASDH_eckasdh2 &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ECGDSASignature // class H235_ECGDSASignature : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_ECGDSASignature, PASN_Sequence); #endif public: H235_ECGDSASignature(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_BitString m_r; PASN_BitString m_s; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TypedCertificate // class H235_TypedCertificate : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_TypedCertificate, PASN_Sequence); #endif public: H235_TypedCertificate(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_ObjectId m_type; PASN_OctetString m_certificate; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AuthenticationBES // class H235_AuthenticationBES : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_AuthenticationBES, PASN_Choice); #endif public: H235_AuthenticationBES(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_default, e_radius }; PBoolean CreateObject(); PObject * Clone() const; }; // // AuthenticationMechanism // class H235_NonStandardParameter; class H235_AuthenticationBES; class H235_AuthenticationMechanism : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_AuthenticationMechanism, PASN_Choice); #endif public: H235_AuthenticationMechanism(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_dhExch, e_pwdSymEnc, e_pwdHash, e_certSign, e_ipsec, e_tls, e_nonStandard, e_authenticationBES, e_keyExch }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H235_NonStandardParameter &() const; #else operator H235_NonStandardParameter &(); operator const H235_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H235_AuthenticationBES &() const; #else operator H235_AuthenticationBES &(); operator const H235_AuthenticationBES &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // Element // class H235_Element : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_Element, PASN_Choice); #endif public: H235_Element(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_octets, e_integer, e_bits, e_name, e_flag }; PBoolean CreateObject(); PObject * Clone() const; }; // // IV8 // class H235_IV8 : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_IV8, PASN_OctetString); #endif public: H235_IV8(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H235_IV8(const char * v); H235_IV8(const PString & v); H235_IV8(const PBYTEArray & v); H235_IV8 & operator=(const char * v); H235_IV8 & operator=(const PString & v); H235_IV8 & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // IV16 // class H235_IV16 : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_IV16, PASN_OctetString); #endif public: H235_IV16(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H235_IV16(const char * v); H235_IV16(const PString & v); H235_IV16(const PBYTEArray & v); H235_IV16 & operator=(const char * v); H235_IV16 & operator=(const PString & v); H235_IV16 & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // Params // class H235_Params : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_Params, PASN_Sequence); #endif public: H235_Params(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_ranInt, e_iv8, e_iv16, e_iv, e_clearSalt }; PASN_Integer m_ranInt; H235_IV8 m_iv8; H235_IV16 m_iv16; PASN_OctetString m_iv; PASN_OctetString m_clearSalt; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ReturnSig // class H235_ReturnSig : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_ReturnSig, PASN_Sequence); #endif public: H235_ReturnSig(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_requestRandom, e_certificate }; H235_Identifier m_generalId; H235_RandomVal m_responseRandom; H235_RandomVal m_requestRandom; H235_TypedCertificate m_certificate; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // EncodedReturnSig // class H235_EncodedReturnSig : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_EncodedReturnSig, PASN_OctetString); #endif public: H235_EncodedReturnSig(unsigned tag = 0, TagClass tagClass = UniversalTagClass); PBoolean DecodeSubType(H235_ReturnSig & obj) { return PASN_OctetString::DecodeSubType(obj); } void EncodeSubType(const H235_ReturnSig & obj) { PASN_OctetString::EncodeSubType(obj); } PObject * Clone() const; }; // // KeySyncMaterial // class H235_KeySyncMaterial : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_KeySyncMaterial, PASN_Sequence); #endif public: H235_KeySyncMaterial(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H235_Identifier m_generalID; H235_KeyMaterial m_keyMaterial; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // EncodedKeySyncMaterial // class H235_EncodedKeySyncMaterial : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_EncodedKeySyncMaterial, PASN_OctetString); #endif public: H235_EncodedKeySyncMaterial(unsigned tag = 0, TagClass tagClass = UniversalTagClass); PBoolean DecodeSubType(H235_KeySyncMaterial & obj) { return PASN_OctetString::DecodeSubType(obj); } void EncodeSubType(const H235_KeySyncMaterial & obj) { PASN_OctetString::EncodeSubType(obj); } PObject * Clone() const; }; // // V3KeySyncMaterial // class H235_V3KeySyncMaterial : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_V3KeySyncMaterial, PASN_Sequence); #endif public: H235_V3KeySyncMaterial(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_generalID, e_algorithmOID, e_encryptedSessionKey, e_encryptedSaltingKey, e_clearSaltingKey, e_paramSsalt, e_keyDerivationOID, e_genericKeyMaterial }; H235_Identifier m_generalID; PASN_ObjectId m_algorithmOID; H235_Params m_paramS; PASN_OctetString m_encryptedSessionKey; PASN_OctetString m_encryptedSaltingKey; PASN_OctetString m_clearSaltingKey; H235_Params m_paramSsalt; PASN_ObjectId m_keyDerivationOID; PASN_OctetString m_genericKeyMaterial; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ECKASDH_eckasdhp // class H235_ECKASDH_eckasdhp : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_ECKASDH_eckasdhp, PASN_Sequence); #endif public: H235_ECKASDH_eckasdhp(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H235_ECpoint m_public_key; PASN_BitString m_modulus; H235_ECpoint m_base; PASN_BitString m_weierstrassA; PASN_BitString m_weierstrassB; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ECKASDH_eckasdh2 // class H235_ECKASDH_eckasdh2 : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_ECKASDH_eckasdh2, PASN_Sequence); #endif public: H235_ECKASDH_eckasdh2(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H235_ECpoint m_public_key; PASN_BitString m_fieldSize; H235_ECpoint m_base; PASN_BitString m_weierstrassA; PASN_BitString m_weierstrassB; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_ProfileElement // class H235_ProfileElement; class H235_ArrayOf_ProfileElement : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_ArrayOf_ProfileElement, PASN_Array); #endif public: H235_ArrayOf_ProfileElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H235_ProfileElement & operator[](PINDEX i) const; PObject * Clone() const; }; // // ProfileElement // class H235_ProfileElement : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_ProfileElement, PASN_Sequence); #endif public: H235_ProfileElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_paramS, e_element }; PASN_Integer m_elementID; H235_Params m_paramS; H235_Element m_element; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // SIGNED // template class H235_SIGNED : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_SIGNED, PASN_Sequence); #endif public: H235_SIGNED(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); ToBeSigned m_toBeSigned; PASN_ObjectId m_algorithmOID; H235_Params m_paramS; PASN_BitString m_signature; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ENCRYPTED // template class H235_ENCRYPTED : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_ENCRYPTED, PASN_Sequence); #endif public: H235_ENCRYPTED(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_ObjectId m_algorithmOID; H235_Params m_paramS; PASN_OctetString m_encryptedData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // HASHED // template class H235_HASHED : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_HASHED, PASN_Sequence); #endif public: H235_HASHED(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_ObjectId m_algorithmOID; H235_Params m_paramS; PASN_BitString m_hash; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // KeySignedMaterial // class H235_KeySignedMaterial : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_KeySignedMaterial, PASN_Sequence); #endif public: H235_KeySignedMaterial(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_srandom, e_timeStamp }; H235_Identifier m_generalId; H235_RandomVal m_mrandom; H235_RandomVal m_srandom; H235_TimeStamp m_timeStamp; H235_ENCRYPTED m_encrptval; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // EncodedKeySignedMaterial // class H235_EncodedKeySignedMaterial : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_EncodedKeySignedMaterial, PASN_OctetString); #endif public: H235_EncodedKeySignedMaterial(unsigned tag = 0, TagClass tagClass = UniversalTagClass); PBoolean DecodeSubType(H235_KeySignedMaterial & obj) { return PASN_OctetString::DecodeSubType(obj); } void EncodeSubType(const H235_KeySignedMaterial & obj) { PASN_OctetString::EncodeSubType(obj); } PObject * Clone() const; }; // // H235CertificateSignature // class H235_H235CertificateSignature : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_H235CertificateSignature, PASN_Sequence); #endif public: H235_H235CertificateSignature(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_requesterRandom }; H235_TypedCertificate m_certificate; H235_RandomVal m_responseRandom; H235_RandomVal m_requesterRandom; H235_SIGNED m_signature; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H235Key // class H235_KeyMaterial; class H235_V3KeySyncMaterial; class H235_H235Key : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_H235Key, PASN_Choice); #endif public: H235_H235Key(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_secureChannel, e_sharedSecret, e_certProtectedKey, e_secureSharedSecret }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H235_KeyMaterial &() const; #else operator H235_KeyMaterial &(); operator const H235_KeyMaterial &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H235_ENCRYPTED &() const; #else operator H235_ENCRYPTED &(); operator const H235_ENCRYPTED &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H235_SIGNED &() const; #else operator H235_SIGNED &(); operator const H235_SIGNED &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H235_V3KeySyncMaterial &() const; #else operator H235_V3KeySyncMaterial &(); operator const H235_V3KeySyncMaterial &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ClearToken // class H235_ClearToken : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_ClearToken, PASN_Sequence); #endif public: H235_ClearToken(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_timeStamp, e_password, e_dhkey, e_challenge, e_random, e_certificate, e_generalID, e_nonStandard, e_eckasdhkey, e_sendersID, e_h235Key, e_profileInfo }; PASN_ObjectId m_tokenOID; H235_TimeStamp m_timeStamp; H235_Password m_password; H235_DHset m_dhkey; H235_ChallengeString m_challenge; H235_RandomVal m_random; H235_TypedCertificate m_certificate; H235_Identifier m_generalID; H235_NonStandardParameter m_nonStandard; H235_ECKASDH m_eckasdhkey; H235_Identifier m_sendersID; H235_H235Key m_h235Key; H235_ArrayOf_ProfileElement m_profileInfo; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // EncodedGeneralToken // class H235_EncodedGeneralToken : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_EncodedGeneralToken, PASN_OctetString); #endif public: H235_EncodedGeneralToken(unsigned tag = 0, TagClass tagClass = UniversalTagClass); PBoolean DecodeSubType(H235_ClearToken & obj) { return PASN_OctetString::DecodeSubType(obj); } void EncodeSubType(const H235_ClearToken & obj) { PASN_OctetString::EncodeSubType(obj); } PObject * Clone() const; }; // // PwdCertToken // class H235_PwdCertToken : public H235_ClearToken { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_PwdCertToken, H235_ClearToken); #endif public: H235_PwdCertToken(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PObject * Clone() const; }; // // EncodedPwdCertToken // class H235_EncodedPwdCertToken : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_EncodedPwdCertToken, PASN_OctetString); #endif public: H235_EncodedPwdCertToken(unsigned tag = 0, TagClass tagClass = UniversalTagClass); PBoolean DecodeSubType(H235_PwdCertToken & obj) { return PASN_OctetString::DecodeSubType(obj); } void EncodeSubType(const H235_PwdCertToken & obj) { PASN_OctetString::EncodeSubType(obj); } PObject * Clone() const; }; // // CryptoToken // class H235_CryptoToken_cryptoEncryptedToken; class H235_CryptoToken_cryptoSignedToken; class H235_CryptoToken_cryptoHashedToken; class H235_CryptoToken : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_CryptoToken, PASN_Choice); #endif public: H235_CryptoToken(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_cryptoEncryptedToken, e_cryptoSignedToken, e_cryptoHashedToken, e_cryptoPwdEncr }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H235_CryptoToken_cryptoEncryptedToken &() const; #else operator H235_CryptoToken_cryptoEncryptedToken &(); operator const H235_CryptoToken_cryptoEncryptedToken &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H235_CryptoToken_cryptoSignedToken &() const; #else operator H235_CryptoToken_cryptoSignedToken &(); operator const H235_CryptoToken_cryptoSignedToken &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H235_CryptoToken_cryptoHashedToken &() const; #else operator H235_CryptoToken_cryptoHashedToken &(); operator const H235_CryptoToken_cryptoHashedToken &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H235_ENCRYPTED &() const; #else operator H235_ENCRYPTED &(); operator const H235_ENCRYPTED &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // CryptoToken_cryptoEncryptedToken // class H235_CryptoToken_cryptoEncryptedToken : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_CryptoToken_cryptoEncryptedToken, PASN_Sequence); #endif public: H235_CryptoToken_cryptoEncryptedToken(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_ObjectId m_tokenOID; H235_ENCRYPTED m_token; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CryptoToken_cryptoSignedToken // class H235_CryptoToken_cryptoSignedToken : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_CryptoToken_cryptoSignedToken, PASN_Sequence); #endif public: H235_CryptoToken_cryptoSignedToken(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_ObjectId m_tokenOID; H235_SIGNED m_token; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CryptoToken_cryptoHashedToken // class H235_CryptoToken_cryptoHashedToken : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H235_CryptoToken_cryptoHashedToken, PASN_Sequence); #endif public: H235_CryptoToken_cryptoHashedToken(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_ObjectId m_tokenOID; H235_ClearToken m_hashedVals; H235_HASHED m_token; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H235_H #endif // if ! H323_DISABLE_H235 // End of h235.h h323plus/include/h224.h0000644000175000017500000000516611015524071013366 0ustar markmark/* * h224.h * * H.224 PDU implementation for the OpenH323 Project. * * Copyright (c) 2006 Network for Educational Technology, ETH Zurich. * Written by Hannes Friederich. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * Contributor(s): ______________________________________. * * $Log: h224.h,v $ * Revision 1.2 2008/05/23 11:19:21 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:50:48 shorne * First commit of h323plus * * Revision 1.1 2006/06/22 11:07:22 shorne * Backport of FECC (H.224) from Opal * * Revision 1.2 2006/04/23 18:52:19 dsandras * Removed warnings when compiling with gcc on Linux. * * Revision 1.1 2006/04/20 16:48:17 hfriederich * Initial version of H.224/H.281 implementation. * */ #ifndef __H323_H224_H #define __H323_H224_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include #define H224_HEADER_SIZE 6 #define H224_BROADCAST 0x0000 class H224_Frame : public Q922_Frame { PCLASSINFO(H224_Frame, Q922_Frame); public: H224_Frame(PINDEX clientDataSize = 254); ~H224_Frame(); PBoolean IsHighPriority() const { return (GetLowOrderAddressOctet() == 0x71); } void SetHighPriority(PBoolean flag); WORD GetDestinationTerminalAddress() const; void SetDestinationTerminalAddress(WORD destination); WORD GetSourceTerminalAddress() const; void SetSourceTerminalAddress(WORD source); // Only standard client IDs are supported at the moment BYTE GetClientID() const; void SetClientID(BYTE clientID); PBoolean GetBS() const; void SetBS(PBoolean bs); PBoolean GetES() const; void SetES(PBoolean es); PBoolean GetC1() const; void SetC1(PBoolean c1); PBoolean GetC0() const; void SetC0(PBoolean c0); BYTE GetSegmentNumber() const; void SetSegmentNumber(BYTE segmentNumber); BYTE *GetClientDataPtr() const { return (GetInformationFieldPtr() + H224_HEADER_SIZE); } PINDEX GetClientDataSize() const { return (GetInformationFieldSize() - H224_HEADER_SIZE); } void SetClientDataSize(PINDEX size) { SetInformationFieldSize(size + H224_HEADER_SIZE); } PBoolean Decode(const BYTE *data, PINDEX size); }; #endif // __H323_H224_H h323plus/include/h323rtp.h0000644000175000017500000003023711367444562014131 0ustar markmark/* * h323rtp.h * * H.323 RTP protocol handler * * Open H323 Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Contributor(s): ______________________________________. * * $Log: h323rtp.h,v $ * Revision 1.7 2010/05/03 03:56:34 shorne * Improved collection of sender reports including identifying session they originated from * * Revision 1.6 2010/04/12 21:39:54 willamowius * give application access to RTP sender reports * * Revision 1.5 2009/07/03 04:14:59 shorne * more H.460.18/19 support * * Revision 1.4 2009/06/28 01:41:52 shorne * Replaced P_HAS_QOS with P_QOS (depreciated in PTLib) * * Revision 1.3 2009/06/28 00:11:03 shorne * Added H.460.18/19 Support * * Revision 1.2 2008/05/23 11:19:46 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:50:49 shorne * First commit of h323plus * * Revision 1.13.2.2 2007/05/23 06:58:02 shorne * Nat Support for EP's nested behind same NAT * * Revision 1.13.2.1 2006/12/23 19:08:02 shorne * Plugin video codecs & sundry * * Revision 1.13 2006/01/26 03:44:53 shorne * added Transport Capability exchange * * Revision 1.12 2005/11/30 13:05:01 csoutheren * Changed tags for Doxygen * * Revision 1.11 2003/10/27 06:03:39 csoutheren * Added support for QoS * Thanks to Henry Harrison of AliceStreet * * Revision 1.10 2003/02/07 00:27:59 robertj * Changed function to virtual to help in using external multiicast RTP stacks. * * Revision 1.9 2002/09/16 01:14:15 robertj * Added #define so can select if #pragma interface/implementation is used on * platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan. * * Revision 1.8 2002/09/03 06:19:37 robertj * Normalised the multi-include header prevention ifdef/define symbol. * * Revision 1.7 2002/08/05 10:03:47 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.6 2001/02/09 05:16:24 robertj * Added #pragma interface for GNU C++. * * Revision 1.5 2000/08/31 08:15:32 robertj * Added support for dynamic RTP payload types in H.245 OpenLogicalChannel negotiations. * * Revision 1.4 2000/05/18 11:53:34 robertj * Changes to support doc++ documentation generation. * * Revision 1.3 2000/05/02 04:32:24 robertj * Fixed copyright notice comment. * * Revision 1.2 2000/04/05 03:17:31 robertj * Added more RTP statistics gathering and H.245 round trip delay calculation. * * Revision 1.1 1999/12/23 23:02:35 robertj * File reorganision for separating RTP from H.323 and creation of LID for VPB support. * */ #ifndef __OPAL_H323RTP_H #define __OPAL_H323RTP_H #ifdef P_USE_PRAGMA #pragma interface #endif #include "rtp.h" class H225_RTPSession; class H245_TransportAddress; class H245_H2250LogicalChannelParameters; class H245_H2250LogicalChannelAckParameters; class H245_ArrayOf_GenericInformation; class H323Connection; class H323_RTPChannel; class H245_TransportCapability; /////////////////////////////////////////////////////////////////////////////// /**This class is for encpsulating the IETF Real Time Protocol interface. */ class H323_RTP_Session : public RTP_UserData { PCLASSINFO(H323_RTP_Session, RTP_UserData); /**@name Overrides from RTP_UserData */ //@{ /**Callback from the RTP session for transmit statistics monitoring. This is called every RTP_Session::senderReportInterval packets on the transmitter indicating that the statistics have been updated. The default behaviour calls H323Connection::OnRTPStatistics(). */ virtual void OnTxStatistics( const RTP_Session & session ///< Session with statistics ) const; /**Callback from the RTP session for receive statistics monitoring. This is called every RTP_Session::receiverReportInterval packets on the receiver indicating that the statistics have been updated. The default behaviour calls H323Connection::OnRTPStatistics(). */ virtual void OnRxStatistics( const RTP_Session & session ///< Session with statistics ) const; /**Callback from the RTP session for statistics monitoring. This is called at the end of a call to indicating that the statistics of the call. The default behaviour calls H323Connection::OnFinalStatistics(). */ virtual void OnFinalStatistics( const RTP_Session & session ///< Session with statistics ) const; //@} /**Callback from the RTP session for statistics monitoring. This is called when a RTPSenderReport is received The default behaviour calls H323Connection::OnRxSenderReport(). */ virtual void OnRxSenderReport( unsigned sessionID, const RTP_Session::SenderReport & send, const RTP_Session::ReceiverReportArray & recv ) const; /**@name Operations */ //@{ /**Fill out the OpenLogicalChannel PDU for the particular channel type. */ virtual PBoolean OnSendingPDU( const H323_RTPChannel & channel, ///< Channel using this session. H245_H2250LogicalChannelParameters & param ///< Open PDU to send. ) const = 0; /**Sending alternate RTP ports if behind same NAT */ virtual PBoolean OnSendingAltPDU( const H323_RTPChannel & channel, ///< Channel using this session. H245_ArrayOf_GenericInformation & alternate ///< Alternate RTP ports ) const = 0; /**This is called when request to create a channel is received from a remote machine and is about to be acknowledged. */ virtual void OnSendingAckPDU( const H323_RTPChannel & channel, ///< Channel using this session. H245_H2250LogicalChannelAckParameters & param ///< Acknowledgement PDU ) const = 0; /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. */ virtual PBoolean OnReceivedPDU( H323_RTPChannel & channel, ///< Channel using this session. const H245_H2250LogicalChannelParameters & param, ///< Acknowledgement PDU unsigned & errorCode ///< Error on failure ) = 0; /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. */ virtual PBoolean OnReceivedAckPDU( H323_RTPChannel & channel, ///< Channel using this session. const H245_H2250LogicalChannelAckParameters & param ///< Acknowledgement PDU ) = 0; /**Alternate RTP port information for Same NAT */ virtual PBoolean OnReceivedAckAltPDU( H323_RTPChannel & channel, ///< Channel using this session. const H245_ArrayOf_GenericInformation & alternate ///< Alternate RTP ports ) = 0; /**This is called when a gatekeeper wants to get status information from the endpoint. The default behaviour fills in the session ID's and SSRC parameters but does not do anything with the transport fields. */ virtual void OnSendRasInfo( H225_RTPSession & info ///< RTP session info PDU ) = 0; //@} protected: /**@name Construction */ //@{ /**Create a new channel. */ H323_RTP_Session( const H323Connection & connection ///< Owner of the RTP session ); //@} const H323Connection & connection; ///< Owner of the RTP session }; /**This class is for the IETF Real Time Protocol interface on UDP/IP. */ class H323_RTP_UDP : public H323_RTP_Session { PCLASSINFO(H323_RTP_UDP, H323_RTP_Session); public: /**@name Construction */ //@{ /**Create a new RTP session H323 info. */ H323_RTP_UDP( const H323Connection & connection, ///< Owner of the RTP session RTP_UDP & rtp, ///< RTP session RTP_QOS * rtpqos = NULL ///< QoS spec if available ); //@} /**@name Operations */ //@{ /**Get the Session ID */ virtual unsigned GetSessionID() const; /**Fill out the OpenLogicalChannel PDU for the particular channel type. */ virtual PBoolean OnSendingPDU( const H323_RTPChannel & channel, ///< Channel using this session. H245_H2250LogicalChannelParameters & param ///< Open PDU to send. ) const; /**Sending alternate RTP ports if behind same NAT */ virtual PBoolean OnSendingAltPDU( const H323_RTPChannel & channel, ///< Channel using this session. H245_ArrayOf_GenericInformation & alternate ///< Alternate RTP ports ) const; /**This is called when request to create a channel is received from a remote machine and is about to be acknowledged. */ virtual void OnSendingAckPDU( const H323_RTPChannel & channel, ///< Channel using this session. H245_H2250LogicalChannelAckParameters & param ///< Acknowledgement PDU ) const; /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. The default behaviour sets the remote ports to send UDP packets to. */ virtual PBoolean OnReceivedPDU( H323_RTPChannel & channel, ///< Channel using this session. const H245_H2250LogicalChannelParameters & param, ///< Acknowledgement PDU unsigned & errorCode ///< Error on failure ); /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. The default behaviour sets the remote ports to send UDP packets to. */ virtual PBoolean OnReceivedAckPDU( H323_RTPChannel & channel, ///< Channel using this session. const H245_H2250LogicalChannelAckParameters & param ///< Acknowledgement PDU ); /**Alternate RTP port information for Same NAT */ virtual PBoolean OnReceivedAckAltPDU( H323_RTPChannel & channel, ///< Channel using this session. const H245_ArrayOf_GenericInformation & alternate ///< Alternate RTP ports ); /**This is called when a gatekeeper wants to get status information from the endpoint. The default behaviour calls the ancestor functon and then fills in the transport fields. */ virtual void OnSendRasInfo( H225_RTPSession & info ///< RTP session info PDU ); //@} #if P_QOS /**@name GQoS Support */ //@{ /**Write the Transport Capability PDU to Include GQoS Support. */ virtual PBoolean WriteTransportCapPDU( H245_TransportCapability & cap, ///* Transport Capability PDU const H323_RTPChannel & channel ///* Channel using this session. ) const; /**Read the Transport Capability PDU to detect GQoS Support. */ virtual void ReadTransportCapPDU( const H245_TransportCapability & cap, ///* Transport Capability PDU H323_RTPChannel & channel ///* Channel using this session. ); //@} #endif protected: virtual PBoolean ExtractTransport( const H245_TransportAddress & pdu, PBoolean isDataPort, unsigned & errorCode ); RTP_UDP & rtp; }; #endif // __OPAL_H323RTP_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/mcspdu.h0000644000175000017500000015500411015524131014174 0ustar markmark// // mcspdu.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_MCS #ifndef __MCS_H #define __MCS_H #ifdef P_USE_PRAGMA #pragma interface #endif #include // // ChannelId // class MCS_ChannelId : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_ChannelId, PASN_Integer); #endif public: MCS_ChannelId(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); MCS_ChannelId & operator=(int v); MCS_ChannelId & operator=(unsigned v); PObject * Clone() const; }; // // StaticChannelId // class MCS_StaticChannelId : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_StaticChannelId, PASN_Integer); #endif public: MCS_StaticChannelId(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); MCS_StaticChannelId & operator=(int v); MCS_StaticChannelId & operator=(unsigned v); PObject * Clone() const; }; // // DynamicChannelId // class MCS_DynamicChannelId : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_DynamicChannelId, PASN_Integer); #endif public: MCS_DynamicChannelId(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); MCS_DynamicChannelId & operator=(int v); MCS_DynamicChannelId & operator=(unsigned v); PObject * Clone() const; }; // // UserId // class MCS_UserId : public MCS_DynamicChannelId { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_UserId, MCS_DynamicChannelId); #endif public: MCS_UserId(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); MCS_UserId & operator=(int v); MCS_UserId & operator=(unsigned v); PObject * Clone() const; }; // // PrivateChannelId // class MCS_PrivateChannelId : public MCS_DynamicChannelId { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_PrivateChannelId, MCS_DynamicChannelId); #endif public: MCS_PrivateChannelId(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); MCS_PrivateChannelId & operator=(int v); MCS_PrivateChannelId & operator=(unsigned v); PObject * Clone() const; }; // // AssignedChannelId // class MCS_AssignedChannelId : public MCS_DynamicChannelId { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_AssignedChannelId, MCS_DynamicChannelId); #endif public: MCS_AssignedChannelId(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); MCS_AssignedChannelId & operator=(int v); MCS_AssignedChannelId & operator=(unsigned v); PObject * Clone() const; }; // // TokenId // class MCS_TokenId : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_TokenId, PASN_Integer); #endif public: MCS_TokenId(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); MCS_TokenId & operator=(int v); MCS_TokenId & operator=(unsigned v); PObject * Clone() const; }; // // TokenStatus // class MCS_TokenStatus : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_TokenStatus, PASN_Enumeration); #endif public: MCS_TokenStatus(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_notInUse, e_selfGrabbed, e_otherGrabbed, e_selfInhibited, e_otherInhibited, e_selfRecipient, e_selfGiving, e_otherGiving }; MCS_TokenStatus & operator=(unsigned v); PObject * Clone() const; }; // // DataPriority // class MCS_DataPriority : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_DataPriority, PASN_Enumeration); #endif public: MCS_DataPriority(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_top, e_high, e_medium, e_low }; MCS_DataPriority & operator=(unsigned v); PObject * Clone() const; }; // // Segmentation // class MCS_Segmentation : public PASN_BitString { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_Segmentation, PASN_BitString); #endif public: MCS_Segmentation(unsigned tag = UniversalBitString, TagClass tagClass = UniversalTagClass); PObject * Clone() const; }; // // DomainParameters // class MCS_DomainParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_DomainParameters, PASN_Sequence); #endif public: MCS_DomainParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_maxChannelIds; PASN_Integer m_maxUserIds; PASN_Integer m_maxTokenIds; PASN_Integer m_numPriorities; PASN_Integer m_minThroughput; PASN_Integer m_maxHeight; PASN_Integer m_maxMCSPDUsize; PASN_Integer m_protocolVersion; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Connect-Initial // class MCS_Connect_Initial : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_Connect_Initial, PASN_Sequence); #endif public: MCS_Connect_Initial(unsigned tag = 101, TagClass tagClass = ApplicationTagClass); PASN_OctetString m_callingDomainSelector; PASN_OctetString m_calledDomainSelector; PASN_Boolean m_upwardFlag; MCS_DomainParameters m_targetParameters; MCS_DomainParameters m_minimumParameters; MCS_DomainParameters m_maximumParameters; PASN_OctetString m_userData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Connect-Additional // class MCS_Connect_Additional : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_Connect_Additional, PASN_Sequence); #endif public: MCS_Connect_Additional(unsigned tag = 103, TagClass tagClass = ApplicationTagClass); PASN_Integer m_calledConnectId; MCS_DataPriority m_dataPriority; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PDin // class MCS_PDin : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_PDin, PASN_Sequence); #endif public: MCS_PDin(unsigned tag = 0, TagClass tagClass = ApplicationTagClass); PASN_Integer m_heightLimit; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // EDrq // class MCS_EDrq : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_EDrq, PASN_Sequence); #endif public: MCS_EDrq(unsigned tag = 1, TagClass tagClass = ApplicationTagClass); PASN_Integer m_subHeight; PASN_Integer m_subInterval; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ChannelAttributes // class MCS_ChannelAttributes_static; class MCS_ChannelAttributes_userId; class MCS_ChannelAttributes_private; class MCS_ChannelAttributes_assigned; class MCS_ChannelAttributes : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_ChannelAttributes, PASN_Choice); #endif public: MCS_ChannelAttributes(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_static, e_userId, e_private, e_assigned }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_ChannelAttributes_static &() const; #else operator MCS_ChannelAttributes_static &(); operator const MCS_ChannelAttributes_static &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_ChannelAttributes_userId &() const; #else operator MCS_ChannelAttributes_userId &(); operator const MCS_ChannelAttributes_userId &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_ChannelAttributes_private &() const; #else operator MCS_ChannelAttributes_private &(); operator const MCS_ChannelAttributes_private &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_ChannelAttributes_assigned &() const; #else operator MCS_ChannelAttributes_assigned &(); operator const MCS_ChannelAttributes_assigned &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // TokenAttributes // class MCS_TokenAttributes_grabbed; class MCS_TokenAttributes_inhibited; class MCS_TokenAttributes_giving; class MCS_TokenAttributes_ungivable; class MCS_TokenAttributes_given; class MCS_TokenAttributes : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_TokenAttributes, PASN_Choice); #endif public: MCS_TokenAttributes(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_grabbed, e_inhibited, e_giving, e_ungivable, e_given }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_TokenAttributes_grabbed &() const; #else operator MCS_TokenAttributes_grabbed &(); operator const MCS_TokenAttributes_grabbed &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_TokenAttributes_inhibited &() const; #else operator MCS_TokenAttributes_inhibited &(); operator const MCS_TokenAttributes_inhibited &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_TokenAttributes_giving &() const; #else operator MCS_TokenAttributes_giving &(); operator const MCS_TokenAttributes_giving &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_TokenAttributes_ungivable &() const; #else operator MCS_TokenAttributes_ungivable &(); operator const MCS_TokenAttributes_ungivable &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_TokenAttributes_given &() const; #else operator MCS_TokenAttributes_given &(); operator const MCS_TokenAttributes_given &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // AUrq // class MCS_AUrq : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_AUrq, PASN_Sequence); #endif public: MCS_AUrq(unsigned tag = 10, TagClass tagClass = ApplicationTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // CJrq // class MCS_CJrq : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_CJrq, PASN_Sequence); #endif public: MCS_CJrq(unsigned tag = 14, TagClass tagClass = ApplicationTagClass); MCS_UserId m_initiator; MCS_ChannelId m_channelId; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CCrq // class MCS_CCrq : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_CCrq, PASN_Sequence); #endif public: MCS_CCrq(unsigned tag = 17, TagClass tagClass = ApplicationTagClass); MCS_UserId m_initiator; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CDrq // class MCS_CDrq : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_CDrq, PASN_Sequence); #endif public: MCS_CDrq(unsigned tag = 19, TagClass tagClass = ApplicationTagClass); MCS_UserId m_initiator; MCS_PrivateChannelId m_channelId; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CDin // class MCS_CDin : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_CDin, PASN_Sequence); #endif public: MCS_CDin(unsigned tag = 20, TagClass tagClass = ApplicationTagClass); MCS_PrivateChannelId m_channelId; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // SDrq // class MCS_SDrq : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_SDrq, PASN_Sequence); #endif public: MCS_SDrq(unsigned tag = 25, TagClass tagClass = ApplicationTagClass); MCS_UserId m_initiator; MCS_ChannelId m_channelId; MCS_DataPriority m_dataPriority; MCS_Segmentation m_segmentation; PASN_OctetString m_userData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // SDin // class MCS_SDin : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_SDin, PASN_Sequence); #endif public: MCS_SDin(unsigned tag = 26, TagClass tagClass = ApplicationTagClass); MCS_UserId m_initiator; MCS_ChannelId m_channelId; MCS_DataPriority m_dataPriority; MCS_Segmentation m_segmentation; PASN_OctetString m_userData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // USrq // class MCS_USrq : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_USrq, PASN_Sequence); #endif public: MCS_USrq(unsigned tag = 27, TagClass tagClass = ApplicationTagClass); MCS_UserId m_initiator; MCS_ChannelId m_channelId; MCS_DataPriority m_dataPriority; MCS_Segmentation m_segmentation; PASN_OctetString m_userData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // USin // class MCS_USin : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_USin, PASN_Sequence); #endif public: MCS_USin(unsigned tag = 28, TagClass tagClass = ApplicationTagClass); MCS_UserId m_initiator; MCS_ChannelId m_channelId; MCS_DataPriority m_dataPriority; MCS_Segmentation m_segmentation; PASN_OctetString m_userData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TGrq // class MCS_TGrq : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_TGrq, PASN_Sequence); #endif public: MCS_TGrq(unsigned tag = 29, TagClass tagClass = ApplicationTagClass); MCS_UserId m_initiator; MCS_TokenId m_tokenId; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TIrq // class MCS_TIrq : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_TIrq, PASN_Sequence); #endif public: MCS_TIrq(unsigned tag = 31, TagClass tagClass = ApplicationTagClass); MCS_UserId m_initiator; MCS_TokenId m_tokenId; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TVrq // class MCS_TVrq : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_TVrq, PASN_Sequence); #endif public: MCS_TVrq(unsigned tag = 33, TagClass tagClass = ApplicationTagClass); MCS_UserId m_initiator; MCS_TokenId m_tokenId; MCS_UserId m_recipient; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TVin // class MCS_TVin : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_TVin, PASN_Sequence); #endif public: MCS_TVin(unsigned tag = 34, TagClass tagClass = ApplicationTagClass); MCS_UserId m_initiator; MCS_TokenId m_tokenId; MCS_UserId m_recipient; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TPrq // class MCS_TPrq : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_TPrq, PASN_Sequence); #endif public: MCS_TPrq(unsigned tag = 37, TagClass tagClass = ApplicationTagClass); MCS_UserId m_initiator; MCS_TokenId m_tokenId; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TPin // class MCS_TPin : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_TPin, PASN_Sequence); #endif public: MCS_TPin(unsigned tag = 38, TagClass tagClass = ApplicationTagClass); MCS_UserId m_initiator; MCS_TokenId m_tokenId; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TRrq // class MCS_TRrq : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_TRrq, PASN_Sequence); #endif public: MCS_TRrq(unsigned tag = 39, TagClass tagClass = ApplicationTagClass); MCS_UserId m_initiator; MCS_TokenId m_tokenId; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TTrq // class MCS_TTrq : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_TTrq, PASN_Sequence); #endif public: MCS_TTrq(unsigned tag = 41, TagClass tagClass = ApplicationTagClass); MCS_UserId m_initiator; MCS_TokenId m_tokenId; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TTcf // class MCS_TTcf : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_TTcf, PASN_Sequence); #endif public: MCS_TTcf(unsigned tag = 42, TagClass tagClass = ApplicationTagClass); MCS_UserId m_initiator; MCS_TokenId m_tokenId; MCS_TokenStatus m_tokenStatus; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Reason // class MCS_Reason : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_Reason, PASN_Enumeration); #endif public: MCS_Reason(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_rn_domain_disconnected, e_rn_provider_initiated, e_rn_token_purged, e_rn_user_requested, e_rn_channel_purged }; MCS_Reason & operator=(unsigned v); PObject * Clone() const; }; // // Result // class MCS_Result : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_Result, PASN_Enumeration); #endif public: MCS_Result(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_rt_successful, e_rt_domain_merging, e_rt_domain_not_hierarchical, e_rt_no_such_channel, e_rt_no_such_domain, e_rt_no_such_user, e_rt_not_admitted, e_rt_other_user_id, e_rt_parameters_unacceptable, e_rt_token_not_available, e_rt_token_not_possessed, e_rt_too_many_channels, e_rt_too_many_tokens, e_rt_too_many_users, e_rt_unspecified_failure, e_rt_user_rejected }; MCS_Result & operator=(unsigned v); PObject * Clone() const; }; // // Diagnostic // class MCS_Diagnostic : public PASN_Enumeration { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_Diagnostic, PASN_Enumeration); #endif public: MCS_Diagnostic(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass); enum Enumerations { e_dc_inconsistent_merge, e_dc_forbidden_PDU_downward, e_dc_forbidden_PDU_upward, e_dc_invalid_BER_encoding, e_dc_invalid_PER_encoding, e_dc_misrouted_user, e_dc_unrequested_confirm, e_dc_wrong_transport_priority, e_dc_channel_id_conflict, e_dc_token_id_conflict, e_dc_not_user_id_channel, e_dc_too_many_channels, e_dc_too_many_tokens, e_dc_too_many_users }; MCS_Diagnostic & operator=(unsigned v); PObject * Clone() const; }; // // ConnectMCSPDU // class MCS_Connect_Initial; class MCS_Connect_Response; class MCS_Connect_Additional; class MCS_Connect_Result; class MCS_ConnectMCSPDU : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_ConnectMCSPDU, PASN_Choice); #endif public: MCS_ConnectMCSPDU(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_connect_initial = 101, e_connect_response, e_connect_additional, e_connect_result }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_Connect_Initial &() const; #else operator MCS_Connect_Initial &(); operator const MCS_Connect_Initial &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_Connect_Response &() const; #else operator MCS_Connect_Response &(); operator const MCS_Connect_Response &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_Connect_Additional &() const; #else operator MCS_Connect_Additional &(); operator const MCS_Connect_Additional &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_Connect_Result &() const; #else operator MCS_Connect_Result &(); operator const MCS_Connect_Result &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // DomainMCSPDU // class MCS_PDin; class MCS_EDrq; class MCS_MCrq; class MCS_MCcf; class MCS_PCin; class MCS_MTrq; class MCS_MTcf; class MCS_PTin; class MCS_DPum; class MCS_RJum; class MCS_AUrq; class MCS_AUcf; class MCS_DUrq; class MCS_DUin; class MCS_CJrq; class MCS_CJcf; class MCS_CLrq; class MCS_CCrq; class MCS_CCcf; class MCS_CDrq; class MCS_CDin; class MCS_CArq; class MCS_CAin; class MCS_CErq; class MCS_CEin; class MCS_SDrq; class MCS_SDin; class MCS_USrq; class MCS_USin; class MCS_TGrq; class MCS_TGcf; class MCS_TIrq; class MCS_TIcf; class MCS_TVrq; class MCS_TVin; class MCS_TVrs; class MCS_TVcf; class MCS_TPrq; class MCS_TPin; class MCS_TRrq; class MCS_TRcf; class MCS_TTrq; class MCS_TTcf; class MCS_DomainMCSPDU : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_DomainMCSPDU, PASN_Choice); #endif public: MCS_DomainMCSPDU(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_pdin, e_edrq, e_mcrq, e_mccf, e_pcin, e_mtrq, e_mtcf, e_ptin, e_dpum, e_rjum, e_aurq, e_aucf, e_durq, e_duin, e_cjrq, e_cjcf, e_clrq, e_ccrq, e_cccf, e_cdrq, e_cdin, e_carq, e_cain, e_cerq, e_cein, e_sdrq, e_sdin, e_usrq, e_usin, e_tgrq, e_tgcf, e_tirq, e_ticf, e_tvrq, e_tvin, e_tvrs, e_tvcf, e_tprq, e_tpin, e_trrq, e_trcf, e_ttrq, e_ttcf }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_PDin &() const; #else operator MCS_PDin &(); operator const MCS_PDin &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_EDrq &() const; #else operator MCS_EDrq &(); operator const MCS_EDrq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_MCrq &() const; #else operator MCS_MCrq &(); operator const MCS_MCrq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_MCcf &() const; #else operator MCS_MCcf &(); operator const MCS_MCcf &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_PCin &() const; #else operator MCS_PCin &(); operator const MCS_PCin &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_MTrq &() const; #else operator MCS_MTrq &(); operator const MCS_MTrq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_MTcf &() const; #else operator MCS_MTcf &(); operator const MCS_MTcf &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_PTin &() const; #else operator MCS_PTin &(); operator const MCS_PTin &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_DPum &() const; #else operator MCS_DPum &(); operator const MCS_DPum &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_RJum &() const; #else operator MCS_RJum &(); operator const MCS_RJum &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_AUrq &() const; #else operator MCS_AUrq &(); operator const MCS_AUrq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_AUcf &() const; #else operator MCS_AUcf &(); operator const MCS_AUcf &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_DUrq &() const; #else operator MCS_DUrq &(); operator const MCS_DUrq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_DUin &() const; #else operator MCS_DUin &(); operator const MCS_DUin &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_CJrq &() const; #else operator MCS_CJrq &(); operator const MCS_CJrq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_CJcf &() const; #else operator MCS_CJcf &(); operator const MCS_CJcf &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_CLrq &() const; #else operator MCS_CLrq &(); operator const MCS_CLrq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_CCrq &() const; #else operator MCS_CCrq &(); operator const MCS_CCrq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_CCcf &() const; #else operator MCS_CCcf &(); operator const MCS_CCcf &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_CDrq &() const; #else operator MCS_CDrq &(); operator const MCS_CDrq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_CDin &() const; #else operator MCS_CDin &(); operator const MCS_CDin &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_CArq &() const; #else operator MCS_CArq &(); operator const MCS_CArq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_CAin &() const; #else operator MCS_CAin &(); operator const MCS_CAin &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_CErq &() const; #else operator MCS_CErq &(); operator const MCS_CErq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_CEin &() const; #else operator MCS_CEin &(); operator const MCS_CEin &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_SDrq &() const; #else operator MCS_SDrq &(); operator const MCS_SDrq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_SDin &() const; #else operator MCS_SDin &(); operator const MCS_SDin &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_USrq &() const; #else operator MCS_USrq &(); operator const MCS_USrq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_USin &() const; #else operator MCS_USin &(); operator const MCS_USin &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_TGrq &() const; #else operator MCS_TGrq &(); operator const MCS_TGrq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_TGcf &() const; #else operator MCS_TGcf &(); operator const MCS_TGcf &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_TIrq &() const; #else operator MCS_TIrq &(); operator const MCS_TIrq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_TIcf &() const; #else operator MCS_TIcf &(); operator const MCS_TIcf &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_TVrq &() const; #else operator MCS_TVrq &(); operator const MCS_TVrq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_TVin &() const; #else operator MCS_TVin &(); operator const MCS_TVin &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_TVrs &() const; #else operator MCS_TVrs &(); operator const MCS_TVrs &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_TVcf &() const; #else operator MCS_TVcf &(); operator const MCS_TVcf &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_TPrq &() const; #else operator MCS_TPrq &(); operator const MCS_TPrq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_TPin &() const; #else operator MCS_TPin &(); operator const MCS_TPin &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_TRrq &() const; #else operator MCS_TRrq &(); operator const MCS_TRrq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_TRcf &() const; #else operator MCS_TRcf &(); operator const MCS_TRcf &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_TTrq &() const; #else operator MCS_TTrq &(); operator const MCS_TTrq &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator MCS_TTcf &() const; #else operator MCS_TTcf &(); operator const MCS_TTcf &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ChannelAttributes_static // class MCS_ChannelAttributes_static : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_ChannelAttributes_static, PASN_Sequence); #endif public: MCS_ChannelAttributes_static(unsigned tag = 0, TagClass tagClass = ContextSpecificTagClass); MCS_StaticChannelId m_channelId; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ChannelAttributes_userId // class MCS_ChannelAttributes_userId : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_ChannelAttributes_userId, PASN_Sequence); #endif public: MCS_ChannelAttributes_userId(unsigned tag = 1, TagClass tagClass = ContextSpecificTagClass); PASN_Boolean m_joined; MCS_UserId m_userId; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ChannelAttributes_assigned // class MCS_ChannelAttributes_assigned : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_ChannelAttributes_assigned, PASN_Sequence); #endif public: MCS_ChannelAttributes_assigned(unsigned tag = 3, TagClass tagClass = ContextSpecificTagClass); MCS_AssignedChannelId m_channelId; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_ChannelAttributes // class MCS_ChannelAttributes; class MCS_ArrayOf_ChannelAttributes : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_ArrayOf_ChannelAttributes, PASN_Array); #endif public: MCS_ArrayOf_ChannelAttributes(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; MCS_ChannelAttributes & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_ChannelId // class MCS_ChannelId; class MCS_ArrayOf_ChannelId : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_ArrayOf_ChannelId, PASN_Array); #endif public: MCS_ArrayOf_ChannelId(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; MCS_ChannelId & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_UserId // class MCS_UserId; class MCS_ArrayOf_UserId : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_ArrayOf_UserId, PASN_Array); #endif public: MCS_ArrayOf_UserId(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; MCS_UserId & operator[](PINDEX i) const; PObject * Clone() const; }; // // TokenAttributes_grabbed // class MCS_TokenAttributes_grabbed : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_TokenAttributes_grabbed, PASN_Sequence); #endif public: MCS_TokenAttributes_grabbed(unsigned tag = 0, TagClass tagClass = ContextSpecificTagClass); MCS_TokenId m_tokenId; MCS_UserId m_grabber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TokenAttributes_inhibited // class MCS_TokenAttributes_inhibited : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_TokenAttributes_inhibited, PASN_Sequence); #endif public: MCS_TokenAttributes_inhibited(unsigned tag = 1, TagClass tagClass = ContextSpecificTagClass); MCS_TokenId m_tokenId; MCS_ArrayOf_UserId m_inhibitors; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TokenAttributes_giving // class MCS_TokenAttributes_giving : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_TokenAttributes_giving, PASN_Sequence); #endif public: MCS_TokenAttributes_giving(unsigned tag = 2, TagClass tagClass = ContextSpecificTagClass); MCS_TokenId m_tokenId; MCS_UserId m_grabber; MCS_UserId m_recipient; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TokenAttributes_ungivable // class MCS_TokenAttributes_ungivable : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_TokenAttributes_ungivable, PASN_Sequence); #endif public: MCS_TokenAttributes_ungivable(unsigned tag = 3, TagClass tagClass = ContextSpecificTagClass); MCS_TokenId m_tokenId; MCS_UserId m_grabber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TokenAttributes_given // class MCS_TokenAttributes_given : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_TokenAttributes_given, PASN_Sequence); #endif public: MCS_TokenAttributes_given(unsigned tag = 4, TagClass tagClass = ContextSpecificTagClass); MCS_TokenId m_tokenId; MCS_UserId m_recipient; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_TokenAttributes // class MCS_TokenAttributes; class MCS_ArrayOf_TokenAttributes : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_ArrayOf_TokenAttributes, PASN_Array); #endif public: MCS_ArrayOf_TokenAttributes(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; MCS_TokenAttributes & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_TokenId // class MCS_TokenId; class MCS_ArrayOf_TokenId : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_ArrayOf_TokenId, PASN_Array); #endif public: MCS_ArrayOf_TokenId(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; MCS_TokenId & operator[](PINDEX i) const; PObject * Clone() const; }; // // Connect-Response // class MCS_Connect_Response : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_Connect_Response, PASN_Sequence); #endif public: MCS_Connect_Response(unsigned tag = 102, TagClass tagClass = ApplicationTagClass); MCS_Result m_result; PASN_Integer m_calledConnectId; MCS_DomainParameters m_domainParameters; PASN_OctetString m_userData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Connect-Result // class MCS_Connect_Result : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_Connect_Result, PASN_Sequence); #endif public: MCS_Connect_Result(unsigned tag = 104, TagClass tagClass = ApplicationTagClass); MCS_Result m_result; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MCrq // class MCS_MCrq : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_MCrq, PASN_Sequence); #endif public: MCS_MCrq(unsigned tag = 2, TagClass tagClass = ApplicationTagClass); MCS_ArrayOf_ChannelAttributes m_mergeChannels; MCS_ArrayOf_ChannelId m_purgeChannelIds; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MCcf // class MCS_MCcf : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_MCcf, PASN_Sequence); #endif public: MCS_MCcf(unsigned tag = 3, TagClass tagClass = ApplicationTagClass); MCS_ArrayOf_ChannelAttributes m_mergeChannels; MCS_ArrayOf_ChannelId m_purgeChannelIds; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PCin // class MCS_PCin : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_PCin, PASN_Sequence); #endif public: MCS_PCin(unsigned tag = 4, TagClass tagClass = ApplicationTagClass); MCS_ArrayOf_UserId m_detachUserIds; MCS_ArrayOf_ChannelId m_purgeChannelIds; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MTrq // class MCS_MTrq : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_MTrq, PASN_Sequence); #endif public: MCS_MTrq(unsigned tag = 5, TagClass tagClass = ApplicationTagClass); MCS_ArrayOf_TokenAttributes m_mergeTokens; MCS_ArrayOf_TokenId m_purgeTokenIds; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MTcf // class MCS_MTcf : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_MTcf, PASN_Sequence); #endif public: MCS_MTcf(unsigned tag = 6, TagClass tagClass = ApplicationTagClass); MCS_ArrayOf_TokenAttributes m_mergeTokens; MCS_ArrayOf_TokenId m_purgeTokenIds; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PTin // class MCS_PTin : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_PTin, PASN_Sequence); #endif public: MCS_PTin(unsigned tag = 7, TagClass tagClass = ApplicationTagClass); MCS_ArrayOf_TokenId m_purgeTokenIds; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DPum // class MCS_DPum : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_DPum, PASN_Sequence); #endif public: MCS_DPum(unsigned tag = 8, TagClass tagClass = ApplicationTagClass); MCS_Reason m_reason; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RJum // class MCS_RJum : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_RJum, PASN_Sequence); #endif public: MCS_RJum(unsigned tag = 9, TagClass tagClass = ApplicationTagClass); MCS_Diagnostic m_diagnostic; PASN_OctetString m_initialOctets; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AUcf // class MCS_AUcf : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_AUcf, PASN_Sequence); #endif public: MCS_AUcf(unsigned tag = 11, TagClass tagClass = ApplicationTagClass); enum OptionalFields { e_initiator }; MCS_Result m_result; MCS_UserId m_initiator; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DUrq // class MCS_DUrq : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_DUrq, PASN_Sequence); #endif public: MCS_DUrq(unsigned tag = 12, TagClass tagClass = ApplicationTagClass); MCS_Reason m_reason; MCS_ArrayOf_UserId m_userIds; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DUin // class MCS_DUin : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_DUin, PASN_Sequence); #endif public: MCS_DUin(unsigned tag = 13, TagClass tagClass = ApplicationTagClass); MCS_Reason m_reason; MCS_ArrayOf_UserId m_userIds; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CJcf // class MCS_CJcf : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_CJcf, PASN_Sequence); #endif public: MCS_CJcf(unsigned tag = 15, TagClass tagClass = ApplicationTagClass); enum OptionalFields { e_channelId }; MCS_Result m_result; MCS_UserId m_initiator; MCS_ChannelId m_requested; MCS_ChannelId m_channelId; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CLrq // class MCS_CLrq : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_CLrq, PASN_Sequence); #endif public: MCS_CLrq(unsigned tag = 16, TagClass tagClass = ApplicationTagClass); MCS_ArrayOf_ChannelId m_channelIds; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CCcf // class MCS_CCcf : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_CCcf, PASN_Sequence); #endif public: MCS_CCcf(unsigned tag = 18, TagClass tagClass = ApplicationTagClass); enum OptionalFields { e_channelId }; MCS_Result m_result; MCS_UserId m_initiator; MCS_PrivateChannelId m_channelId; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CArq // class MCS_CArq : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_CArq, PASN_Sequence); #endif public: MCS_CArq(unsigned tag = 21, TagClass tagClass = ApplicationTagClass); MCS_UserId m_initiator; MCS_PrivateChannelId m_channelId; MCS_ArrayOf_UserId m_userIds; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CAin // class MCS_CAin : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_CAin, PASN_Sequence); #endif public: MCS_CAin(unsigned tag = 22, TagClass tagClass = ApplicationTagClass); MCS_UserId m_initiator; MCS_PrivateChannelId m_channelId; MCS_ArrayOf_UserId m_userIds; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CErq // class MCS_CErq : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_CErq, PASN_Sequence); #endif public: MCS_CErq(unsigned tag = 23, TagClass tagClass = ApplicationTagClass); MCS_UserId m_initiator; MCS_PrivateChannelId m_channelId; MCS_ArrayOf_UserId m_userIds; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CEin // class MCS_CEin : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_CEin, PASN_Sequence); #endif public: MCS_CEin(unsigned tag = 24, TagClass tagClass = ApplicationTagClass); MCS_PrivateChannelId m_channelId; MCS_ArrayOf_UserId m_userIds; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TGcf // class MCS_TGcf : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_TGcf, PASN_Sequence); #endif public: MCS_TGcf(unsigned tag = 30, TagClass tagClass = ApplicationTagClass); MCS_Result m_result; MCS_UserId m_initiator; MCS_TokenId m_tokenId; MCS_TokenStatus m_tokenStatus; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TIcf // class MCS_TIcf : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_TIcf, PASN_Sequence); #endif public: MCS_TIcf(unsigned tag = 32, TagClass tagClass = ApplicationTagClass); MCS_Result m_result; MCS_UserId m_initiator; MCS_TokenId m_tokenId; MCS_TokenStatus m_tokenStatus; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TVrs // class MCS_TVrs : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_TVrs, PASN_Sequence); #endif public: MCS_TVrs(unsigned tag = 35, TagClass tagClass = ApplicationTagClass); MCS_Result m_result; MCS_UserId m_recipient; MCS_TokenId m_tokenId; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TVcf // class MCS_TVcf : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_TVcf, PASN_Sequence); #endif public: MCS_TVcf(unsigned tag = 36, TagClass tagClass = ApplicationTagClass); MCS_Result m_result; MCS_UserId m_initiator; MCS_TokenId m_tokenId; MCS_TokenStatus m_tokenStatus; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TRcf // class MCS_TRcf : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_TRcf, PASN_Sequence); #endif public: MCS_TRcf(unsigned tag = 40, TagClass tagClass = ApplicationTagClass); MCS_Result m_result; MCS_UserId m_initiator; MCS_TokenId m_tokenId; MCS_TokenStatus m_tokenStatus; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ChannelAttributes_private // class MCS_ChannelAttributes_private : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(MCS_ChannelAttributes_private, PASN_Sequence); #endif public: MCS_ChannelAttributes_private(unsigned tag = 2, TagClass tagClass = ContextSpecificTagClass); PASN_Boolean m_joined; MCS_PrivateChannelId m_channelId; MCS_UserId m_manager; MCS_ArrayOf_UserId m_admitted; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __MCS_H #endif // if ! H323_DISABLE_MCS // End of mcspdu.h h323plus/include/h281.h0000644000175000017500000000641110655704651013400 0ustar markmark/* * h281.h * * H.281 PDU implementation for the OpenH323 Project. * * Copyright (c) 2006 Network for Educational Technology, ETH Zurich. * Written by Hannes Friederich. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * Contributor(s): ______________________________________. * * $Log: h281.h,v $ * Revision 1.1 2007/08/06 20:50:49 shorne * First commit of h323plus * * Revision 1.1 2006/06/22 11:07:22 shorne * Backport of FECC (H.224) from Opal * * Revision 1.2 2006/04/23 18:52:19 dsandras * Removed warnings when compiling with gcc on Linux. * * Revision 1.1 2006/04/20 16:48:17 hfriederich * Initial version of H.224/H.281 implementation. * */ #ifndef __OPAL_H281_H #define __OPAL_H281_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include class H281_Frame : public H224_Frame { PCLASSINFO(H281_Frame, H224_Frame); public: enum RequestType { IllegalRequest = 0x00, StartAction = 0x01, ContinueAction = 0x02, StopAction = 0x03, SelectVideoSource = 0x04, VideoSourceSwitched = 0x05, StoreAsPreset = 0x07, ActivatePreset = 0x08 }; enum PanDirection { NoPan = 0x00, IllegalPan = 0x40, PanLeft = 0x80, PanRight = 0xc0, }; enum TiltDirection { NoTilt = 0x00, IllegalTilt = 0x10, TiltDown = 0x20, TiltUp = 0x30, }; enum ZoomDirection { NoZoom = 0x00, IllegalZoom = 0x04, ZoomOut = 0x08, ZoomIn = 0x0c }; enum FocusDirection { NoFocus = 0x00, IllegalFocus = 0x01, FocusOut = 0x02, FocusIn = 0x03 }; enum VideoMode { MotionVideo = 0x00, IllegalVideoMode = 0x01, NormalResolutionStillImage = 0x02, DoubleResolutionStillImage = 0x03 }; H281_Frame(); ~H281_Frame(); RequestType GetRequestType() const { return (RequestType)(GetClientDataPtr())[0]; } void SetRequestType(RequestType requestType); // The following methods are only valid when // request type is either StartAction, ContinueAction or StopAction PanDirection GetPanDirection() const; void SetPanDirection(PanDirection direction); TiltDirection GetTiltDirection() const; void SetTiltDirection(TiltDirection direction); ZoomDirection GetZoomDirection() const; void SetZoomDirection(ZoomDirection direction); FocusDirection GetFocusDirection() const; void SetFocusDirection(FocusDirection direction); // Only valid when RequestType is StartAction BYTE GetTimeout() const; void SetTimeout(BYTE timeout); // Only valid when RequestType is SelectVideoSource or VideoSourceSwitched BYTE GetVideoSourceNumber() const; void SetVideoSourceNumber(BYTE videoSourceNumber); VideoMode GetVideoMode() const; void SetVideoMode(VideoMode videoMode); // Only valid when RequestType is StoreAsPreset or ActivatePreset BYTE GetPresetNumber() const; void SetPresetNumber(BYTE presetNumber); }; #endif // __OPAL_H281_H h323plus/include/channels.h0000644000175000017500000010030011633333642014474 0ustar markmark/* * channels.h * * H.323 protocol handler * * Open H323 Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Contributor(s): ______________________________________. * * $Id: channels.h,v 1.9 2011/09/12 07:41:22 shorne Exp $ * */ #ifndef __OPAL_CHANNELS_H #define __OPAL_CHANNELS_H #ifdef P_USE_PRAGMA #pragma interface #endif #include "rtp.h" #include "transports.h" class H245_OpenLogicalChannel; class H245_OpenLogicalChannelAck; class H245_OpenLogicalChannel_forwardLogicalChannelParameters; class H245_OpenLogicalChannel_reverseLogicalChannelParameters; class H245_H2250LogicalChannelParameters; class H245_H2250LogicalChannelAckParameters; class H245_ArrayOf_GenericInformation; class H245_MiscellaneousCommand_type; class H245_MiscellaneousIndication_type; class H323EndPoint; class H323Connection; class H323Capability; class H323Codec; class H323_RTP_Session; /////////////////////////////////////////////////////////////////////////////// /**Description of a Logical Channel Number. This is used as index into dictionary of logical channels. */ class H323ChannelNumber : public PObject { PCLASSINFO(H323ChannelNumber, PObject); public: H323ChannelNumber() { number = 0; fromRemote = FALSE; } H323ChannelNumber(unsigned number, PBoolean fromRemote); virtual PObject * Clone() const; virtual PINDEX HashFunction() const; virtual void PrintOn(ostream & strm) const; virtual Comparison Compare(const PObject & obj) const; H323ChannelNumber & operator++(int); operator unsigned() const { return number; } PBoolean IsFromRemote() const { return fromRemote; } protected: unsigned number; PBoolean fromRemote; }; /**This class describes a logical channel between the two endpoints. They may be created and deleted as required in the H245 protocol. An application may create a descendent off this class and override functions as required for operating the channel protocol. */ class H323Channel : public PObject { PCLASSINFO(H323Channel, PObject); public: /**@name Construction */ //@{ /**Create a new channel. */ H323Channel( H323Connection & connection, ///< Connection to endpoint for channel const H323Capability & capability ///< Capability channel is using ); /**Destroy new channel. To avoid usage of deleted objects in background threads, this waits for the H323LogicalChannelThread to terminate before continuing. */ ~H323Channel(); //@} /**@name Overrides from PObject */ //@{ virtual void PrintOn( ostream & strm ) const; //@} /**@name Operations */ //@{ enum Directions { IsBidirectional, IsTransmitter, IsReceiver, NumDirections }; #if PTRACING friend ostream & operator<<(ostream & out, Directions dir); #endif /**Indicate the direction of the channel. Return if the channel is bidirectional, or unidirectional, and which direction for the latter case. */ virtual Directions GetDirection() const = 0; /**Indicate the session number of the channel. Return session for channel. This is primarily for use by RTP based channels, for channels for which the concept of a session is not meaningfull, the default simply returns 0. */ virtual unsigned GetSessionID() const; /**Set the session number of the Channel */ virtual void SetSessionID(unsigned id); /**Set the initial bandwidth for the channel. This calculates the initial bandwidth required by the channel and returns TRUE if the connection can support this bandwidth. The default behaviour gets the bandwidth requirement from the codec object created by the channel. */ virtual PBoolean SetInitialBandwidth(); /**Open the channel. The default behaviour just calls connection.OnStartLogicalChannel() and if successful sets the opened member variable. */ virtual PBoolean Open(); /**This is called when the channel can start transferring data. */ virtual PBoolean Start() = 0; /**This is called to clean up any threads on connection termination. */ virtual void CleanUpOnTermination(); /**Indicate if background thread(s) are running. */ virtual PBoolean IsRunning() const; /**Handle channel data reception. This is called by the thread started by the Start() function and is typically a loop writing to the codec and reading from the transport (eg RTP_session). */ virtual void Receive() = 0; /**Handle channel data transmission. This is called by the thread started by the Start() function and is typically a loop reading from the codec and writing to the transport (eg an RTP_session). */ virtual void Transmit() = 0; /**Fill out the OpenLogicalChannel PDU for the particular channel type. */ virtual PBoolean OnSendingPDU( H245_OpenLogicalChannel & openPDU ///< Open PDU to send. ) const = 0; /**This is called when request to create a channel is received from a remote machine and is about to be acknowledged. The default behaviour does nothing. */ virtual void OnSendOpenAck( const H245_OpenLogicalChannel & open, ///< Open PDU H245_OpenLogicalChannelAck & ack ///< Acknowledgement PDU ) const; /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. The default behaviour just returns TRUE. */ virtual PBoolean OnReceivedPDU( const H245_OpenLogicalChannel & pdu, ///< Open PDU unsigned & errorCode ///< Error code on failure ); /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. The default behaviour just returns TRUE. */ virtual PBoolean OnReceivedAckPDU( const H245_OpenLogicalChannelAck & pdu ///< Acknowledgement PDU ); /**Limit bit flow for the logical channel. The default behaviour passes this on to the codec if not NULL. */ virtual void OnFlowControl( long bitRateRestriction ///< Bit rate limitation ); /**Process a miscellaneous command on the logical channel. The default behaviour passes this on to the codec if not NULL. */ virtual void OnMiscellaneousCommand( const H245_MiscellaneousCommand_type & type ///< Command to process ); /**Process a miscellaneous indication on the logical channel. The default behaviour passes this on to the codec if not NULL. */ virtual void OnMiscellaneousIndication( const H245_MiscellaneousIndication_type & type ///< Indication to process ); /**Limit bit flow for the logical channel. The default behaviour does nothing. */ virtual void OnJitterIndication( DWORD jitter, ///< Estimated received jitter in microseconds int skippedFrameCount, ///< Frames skipped by decodec int additionalBuffer ///< Additional size of video decoder buffer ); /** Send a miscellanous command to the remote transmitting video codec. Typically, used to indicate a problem in the received video stream. */ void SendMiscCommand(unsigned command); /** Send a flow control request to the remote */ void SendFlowControlRequest(long restriction); //@} /**@name Member variable access */ //@{ /**Get the number of the channel. */ const H323ChannelNumber & GetNumber() const { return number; } /**Set the number of the channel. */ void SetNumber(const H323ChannelNumber & num) { number = num; } /**Get the number of the reverse channel (if present). */ const H323ChannelNumber & GetReverseChannel() const { return reverseChannel; } /**Set the number of the reverse channel (if present). */ void SetReverseChannel(const H323ChannelNumber & num) { reverseChannel = num; } /**Get the bandwidth used by the channel in 100's of bits/sec. */ unsigned GetBandwidthUsed() const { return bandwidthUsed; } /**Get the bandwidth used by the channel in 100's of bits/sec. */ PBoolean SetBandwidthUsed( unsigned bandwidth ///< New bandwidth ); /**Get the capability that created this channel. */ const H323Capability & GetCapability() const { return *capability; } /**Get the codec, if any, associated with the channel. */ H323Codec * GetCodec() const; /**Get the "pause" flag. A paused channel is one that prevents the annunciation of the channels data. For example for audio this would mute the data, for video it would still frame. Note that channel is not stopped, and may continue to actually receive data, it is just that nothing is done with it. */ PBoolean IsPaused() const { return paused; } /**Set the "pause" flag. A paused channel is one that prevents the annunciation of the channels data. For example for audio this would mute the data, for video it would still frame. Note that channel is not stopped, and may continue to actually receive data, it is just that nothing is done with it. */ void SetPause( PBoolean pause ///< New pause flag ) { paused = pause; } //@} protected: H323EndPoint & endpoint; H323Connection & connection; H323Capability * capability; H323ChannelNumber number; H323ChannelNumber reverseChannel; H323Codec * codec; PThread * receiveThread; PThread * transmitThread; PBoolean opened; PBoolean paused; PBoolean terminating; private: unsigned bandwidthUsed; }; H323LIST(H323LogicalChannelList, H323Channel); /**This class describes a unidirectional logical channel between the two endpoints. They may be created and deleted as required in the H245 protocol. An application may create a descendent off this class and override functions as required for operating the channel protocol. */ class H323UnidirectionalChannel : public H323Channel { PCLASSINFO(H323UnidirectionalChannel, H323Channel); public: /**@name Construction */ //@{ /**Create a new channel. */ H323UnidirectionalChannel( H323Connection & connection, ///< Connection to endpoint for channel const H323Capability & capability, ///< Capability channel is using Directions direction ///< Direction of channel ); //@} /**@name Overrides from class H323Channel */ //@{ /**Indicate the direction of the channel. Return if the channel is bidirectional, or unidirectional, and which direction for th latter case. */ virtual Directions GetDirection() const; /**This is called when the channel can start transferring data. The default action is to start one threads, with it either calling Receive() or Transmit() depending on the receiver member variable. */ virtual PBoolean Start(); //@} protected: PBoolean receiver; }; /**This class describes a bidirectional logical channel between the two endpoints. They may be created and deleted as required in the H245 protocol. An application may create a descendent off this class and override functions as required for operating the channel protocol. */ class H323BidirectionalChannel : public H323Channel { PCLASSINFO(H323BidirectionalChannel, H323Channel); public: /**@name Construction */ //@{ /**Create a new channel. */ H323BidirectionalChannel( H323Connection & connection, ///< Connection to endpoint for channel const H323Capability & capability ///< Capability channel is using ); //@} /**@name Overrides from class H323Channel */ //@{ /**Indicate the direction of the channel. Return if the channel is bidirectional, or unidirectional, and which direction for th latter case. */ virtual Directions GetDirection() const; /**This is called when the channel can start transferring data. The default action is to start two threads, one calls Receive() and the other calls Transmit(). */ virtual PBoolean Start(); //@} }; /////////////////////////////////////////////////////////////////////////////// /**This class is for encpsulating the IETF Real Time Protocol interface. */ class H245_DataType; class H323_RealTimeChannel : public H323UnidirectionalChannel { PCLASSINFO(H323_RealTimeChannel, H323UnidirectionalChannel); public: /**@name Construction */ //@{ /**Create a new channel. */ H323_RealTimeChannel( H323Connection & connection, ///< Connection to endpoint for channel const H323Capability & capability, ///< Capability channel is using Directions direction ///< Direction of channel ); //@} /**@name Overrides from class H323Channel */ //@{ /**Fill out the OpenLogicalChannel PDU for the particular channel type. */ virtual PBoolean OnSendingPDU( H245_OpenLogicalChannel & openPDU ///< Open PDU to send. ) const; /**This is called when request to create a channel is received from a remote machine and is about to be acknowledged. */ virtual void OnSendOpenAck( const H245_OpenLogicalChannel & open, ///< Open PDU H245_OpenLogicalChannelAck & ack ///< Acknowledgement PDU ) const; /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. The default makes sure the parameters are compatible and passes on the PDU to the rtp session. */ virtual PBoolean OnReceivedPDU( const H245_OpenLogicalChannel & pdu, ///< Open PDU unsigned & errorCode ///< Error code on failure ); /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. The default makes sure the parameters are compatible and passes on the PDU to the rtp session. */ virtual PBoolean OnReceivedAckPDU( const H245_OpenLogicalChannelAck & pdu ///< Acknowledgement PDU ); //@} /**@name Operations */ //@{ /**Fill out the OpenLogicalChannel PDU for the particular channel type. */ virtual PBoolean OnSendingPDU( H245_H2250LogicalChannelParameters & param ///< Open PDU to send. ) const = 0; /**Fill out the OpenLogicalChannel PDU for the particular channel type. */ virtual PBoolean OnSendingPDU( H245_DataType & /*dataType*/, ///< DataType Information H245_H2250LogicalChannelParameters & param ///< Open PDU to send. ) const { return OnSendingPDU(param); } /**Alternate RTP port information for Same NAT */ virtual PBoolean OnSendingAltPDU( H245_ArrayOf_GenericInformation & alternate ///< Alternate RTP ports ) const = 0; /**This is called when request to create a channel is received from a remote machine and is about to be acknowledged. */ virtual void OnSendOpenAck( H245_H2250LogicalChannelAckParameters & param ///< Acknowledgement PDU ) const = 0; /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. The default behaviour sets the remote ports to send UDP packets to. */ virtual PBoolean OnReceivedPDU( const H245_H2250LogicalChannelParameters & param, ///< Acknowledgement PDU unsigned & errorCode ///< Error on failure ) = 0; virtual PBoolean OnReceivedPDU( const H245_DataType & /*dataType*/, ///< DataType Information const H245_H2250LogicalChannelParameters & param, ///< Acknowledgement PDU unsigned & errorCode ///< Error on failure ) { return OnReceivedPDU(param, errorCode); } /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. The default behaviour sets the remote ports to send UDP packets to. */ virtual PBoolean OnReceivedAckPDU( const H245_H2250LogicalChannelAckParameters & param ///< Acknowledgement PDU ) = 0; /**Alternate RTP port information for Same NAT */ virtual PBoolean OnReceivedAckAltPDU( const H245_ArrayOf_GenericInformation & alternate ///< Alternate RTP ports ) = 0; /**Get the active payload type used by this channel. This will use the dynamic payload type configured for the channel, or the fixed payload type defined by the media format. */ virtual RTP_DataFrame::PayloadTypes GetRTPPayloadType() const; /**Set the dynamic payload type used by this channel. */ virtual PBoolean SetDynamicRTPPayloadType( int newType ///< New RTP payload type number ); //@} protected: RTP_DataFrame::PayloadTypes rtpPayloadType; }; /////////////////////////////////////////////////////////////////////////////// /**This class is for encpsulating the IETF Real Time Protocol interface. */ class H323_RTPChannel : public H323_RealTimeChannel { PCLASSINFO(H323_RTPChannel, H323_RealTimeChannel); public: /**@name Construction */ //@{ /**Create a new channel. */ H323_RTPChannel( H323Connection & connection, ///< Connection to endpoint for channel const H323Capability & capability, ///< Capability channel is using Directions direction, ///< Direction of channel RTP_Session & rtp ///< RTP session for channel ); /// Destroy the channel ~H323_RTPChannel(); //@} /**@name Overrides from class H323Channel */ //@{ /**This is called to clean up any threads on connection termination. */ virtual void CleanUpOnTermination(); /**Indicate the session number of the channel. Return session for channel. This returns the session ID of the RTP_Session member variable. */ virtual unsigned GetSessionID() const; /**Set the session number of the Channel */ virtual void SetSessionID(unsigned id); /**Open the channel. */ virtual PBoolean Open(); /**Handle channel data reception. This is called by the thread started by the Start() function and is typically a loop writing to the codec and reading from the transport (eg RTP_session). */ virtual void Receive(); /**Handle channel data transmission. This is called by the thread started by the Start() function and is typically a loop reading from the codec and writing to the transport (eg an RTP_session). */ virtual void Transmit(); /**Handle UniChannel Back Probe. When receiving a Unidirectional media stream send back to the originator empty RTPFrames to open necessary pinholes in NAT. */ virtual void SendUniChannelBackProbe(); /** Read a DataFrame */ virtual PBoolean ReadFrame(DWORD & rtpTimestamp, ///< TimeStamp RTP_DataFrame & frame ///< RTP data frame ); /** Write a DataFrame */ virtual PBoolean WriteFrame(RTP_DataFrame & frame ///< RTP data frame ); //@} /**@name Overrides from class H323_RealTimeChannel */ //@{ /**Fill out the OpenLogicalChannel PDU for the particular channel type. */ virtual PBoolean OnSendingPDU( H245_H2250LogicalChannelParameters & param ///< Open PDU to send. ) const; /**Alternate RTP port information for Same NAT */ virtual PBoolean OnSendingAltPDU( H245_ArrayOf_GenericInformation & alternate ///< Alternate RTP ports ) const; /**This is called when request to create a channel is received from a remote machine and is about to be acknowledged. */ virtual void OnSendOpenAck( H245_H2250LogicalChannelAckParameters & param ///< Acknowledgement PDU ) const; /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. The default behaviour sets the remote ports to send UDP packets to. */ virtual PBoolean OnReceivedPDU( const H245_H2250LogicalChannelParameters & param, ///< Acknowledgement PDU unsigned & errorCode ///< Error on failure ); /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. The default behaviour sets the remote ports to send UDP packets to. */ virtual PBoolean OnReceivedAckPDU( const H245_H2250LogicalChannelAckParameters & param ///< Acknowledgement PDU ); /**Alternate RTP port information for Same NAT */ virtual PBoolean OnReceivedAckAltPDU( const H245_ArrayOf_GenericInformation & alternate ///< Alternate RTP ports ); //@} void AddFilter( const PNotifier & filterFunction ); void RemoveFilter( const PNotifier & filterFunction ); PTimeInterval GetSilenceDuration() const; protected: RTP_Session & rtpSession; H323_RTP_Session & rtpCallbacks; H323LIST(FilterList, PNotifier); FilterList filters; PMutex filterMutex; PTimeInterval silenceStartTick; }; /////////////////////////////////////////////////////////////////////////////// /**This class is for encpsulating the IETF Real Time Protocol interface as used by a remote host. */ class H323_ExternalRTPChannel : public H323_RealTimeChannel { PCLASSINFO(H323_ExternalRTPChannel, H323_RealTimeChannel); public: /**@name Construction */ //@{ /**Create a new channel. */ H323_ExternalRTPChannel( H323Connection & connection, ///< Connection to endpoint for channel const H323Capability & capability, ///< Capability channel is using Directions direction, ///< Direction of channel unsigned sessionID ///< Session ID for channel ); /**Create a new channel. */ H323_ExternalRTPChannel( H323Connection & connection, ///< Connection to endpoint for channel const H323Capability & capability, ///< Capability channel is using Directions direction, ///< Direction of channel unsigned sessionID, ///< Session ID for channel const H323TransportAddress & data, ///< Data address const H323TransportAddress & control///< Control address ); /**Create a new channel. */ H323_ExternalRTPChannel( H323Connection & connection, ///< Connection to endpoint for channel const H323Capability & capability, ///< Capability channel is using Directions direction, ///< Direction of channel unsigned sessionID, ///< Session ID for channel const PIPSocket::Address & ip, ///< IP address of media server WORD dataPort ///< Data port (control is dataPort+1) ); //@} /**@name Overrides from class H323Channel */ //@{ /**Indicate the session number of the channel. Return session for channel. This returns the session ID of the RTP_Session member variable. */ virtual unsigned GetSessionID() const; /**Start the channel. */ virtual PBoolean Start(); /**Indicate if is started. */ virtual PBoolean IsRunning() const; /**Handle channel data reception. This is called by the thread started by the Start() function and is typically a loop writing to the codec and reading from the transport (eg RTP_session). */ virtual void Receive(); /**Handle channel data transmission. This is called by the thread started by the Start() function and is typically a loop reading from the codec and writing to the transport (eg an RTP_session). */ virtual void Transmit(); //@} /**@name Overrides from class H323_RealTimeChannel */ //@{ /**Fill out the OpenLogicalChannel PDU for the particular channel type. */ virtual PBoolean OnSendingPDU( H245_H2250LogicalChannelParameters & param ///< Open PDU to send. ) const; /**This is called when request to create a channel is received from a remote machine and is about to be acknowledged. */ virtual void OnSendOpenAck( H245_H2250LogicalChannelAckParameters & param ///< Acknowledgement PDU ) const; /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. The default behaviour sets the remote ports to send UDP packets to. */ virtual PBoolean OnReceivedPDU( const H245_H2250LogicalChannelParameters & param, ///< Acknowledgement PDU unsigned & errorCode ///< Error on failure ); /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. The default behaviour sets the remote ports to send UDP packets to. */ virtual PBoolean OnReceivedAckPDU( const H245_H2250LogicalChannelAckParameters & param ///< Acknowledgement PDU ); /**Sending alternate RTP ports if behind same NAT */ virtual PBoolean OnSendingAltPDU( H245_ArrayOf_GenericInformation & /*alternate*/ ///< Alternate RTP ports ) const { return FALSE; } /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. */ virtual PBoolean OnReceivedAckAltPDU( H323_RTPChannel & /*channel*/, ///< Channel using this session. const H245_ArrayOf_GenericInformation & /*alternate*/ ///< Alternate RTP ports ) { return FALSE; } /**Alternate RTP port information for Same NAT */ virtual PBoolean OnReceivedAckAltPDU( const H245_ArrayOf_GenericInformation & /*alternate*/ ///< Alternate RTP ports ) { return FALSE; }; //@} void SetExternalAddress( const H323TransportAddress & data, ///< Data address const H323TransportAddress & control///< Control address ); const H323TransportAddress & GetRemoteMediaAddress() const { return remoteMediaAddress; } const H323TransportAddress & GetRemoteMediaControlAddress() const { return remoteMediaControlAddress; } PBoolean GetRemoteAddress( PIPSocket::Address & ip, WORD & dataPort ) const; protected: unsigned sessionID; H323TransportAddress externalMediaAddress; H323TransportAddress externalMediaControlAddress; H323TransportAddress remoteMediaAddress; H323TransportAddress remoteMediaControlAddress; PBoolean isRunning; }; /////////////////////////////////////////////////////////////////////////////// /**This class describes a data logical channel between the two endpoints. They may be created and deleted as required in the H245 protocol. An application may create a descendent off this class and override functions as required for operating the channel protocol. */ class H323DataChannel : public H323UnidirectionalChannel { PCLASSINFO(H323DataChannel, H323UnidirectionalChannel); public: /**@name Construction */ //@{ /**Create a new channel. */ H323DataChannel( H323Connection & connection, ///< Connection to endpoint for channel const H323Capability & capability, ///< Capability channel is using Directions direction, ///< Direction of channel unsigned sessionID ///< Session ID for channel ); /**Destroy the channel. */ ~H323DataChannel(); //@} /**@name Overrides from class H323Channel */ //@{ /**This is called to clean up any threads on connection termination. */ virtual void CleanUpOnTermination(); /**Indicate the session number of the channel. Return session for channel. This returns the session ID of the RTP_Session member variable. */ virtual unsigned GetSessionID() const; /**Fill out the OpenLogicalChannel PDU for the particular channel type. */ virtual PBoolean OnSendingPDU( H245_OpenLogicalChannel & openPDU ///< Open PDU to send. ) const; /**This is called when request to create a channel is received from a remote machine and is about to be acknowledged. */ virtual void OnSendOpenAck( const H245_OpenLogicalChannel & open, ///< Open PDU H245_OpenLogicalChannelAck & ack ///< Acknowledgement PDU ) const; /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. The default makes sure the parameters are compatible and passes on the PDU to the rtp session. */ virtual PBoolean OnReceivedPDU( const H245_OpenLogicalChannel & pdu, ///< Open PDU unsigned & errorCode ///< Error code on failure ); /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. The default makes sure the parameters are compatible and passes on the PDU to the rtp session. */ virtual PBoolean OnReceivedAckPDU( const H245_OpenLogicalChannelAck & pdu ///< Acknowledgement PDU ); //@} /**@name Operations */ //@{ /**Create the H323Listener class to be used. This is called on receipt of an OpenLogicalChannel request. The default behaviour creates a compatible listener using the connections control channel as a basis and returns TRUE if successful. */ virtual PBoolean CreateListener(); /**Create the H323Transport class to be used. This is called on receipt of an OpenLogicalChannelAck response. It should not return TRUE unless the transport member variable is set. The default behaviour uses the connection signalling channel to create the transport and returns TRUE if successful. */ virtual PBoolean CreateTransport(); //@} protected: unsigned sessionID; H323Listener * listener; PBoolean autoDeleteListener; H323Transport * transport; PBoolean autoDeleteTransport; PBoolean separateReverseChannel; }; #endif // __OPAL_CHANNELS_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/h245.h0000644000175000017500000151713311015524100013365 0ustar markmark// // h245.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H245 #ifndef __H245_H #define __H245_H #ifdef P_USE_PRAGMA #pragma interface #endif #include // // MultimediaSystemControlMessage // class H245_RequestMessage; class H245_ResponseMessage; class H245_CommandMessage; class H245_IndicationMessage; class H245_MultimediaSystemControlMessage : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultimediaSystemControlMessage, PASN_Choice); #endif public: H245_MultimediaSystemControlMessage(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_request, e_response, e_command, e_indication }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RequestMessage &() const; #else operator H245_RequestMessage &(); operator const H245_RequestMessage &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ResponseMessage &() const; #else operator H245_ResponseMessage &(); operator const H245_ResponseMessage &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_CommandMessage &() const; #else operator H245_CommandMessage &(); operator const H245_CommandMessage &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_IndicationMessage &() const; #else operator H245_IndicationMessage &(); operator const H245_IndicationMessage &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // RequestMessage // class H245_NonStandardMessage; class H245_MasterSlaveDetermination; class H245_TerminalCapabilitySet; class H245_OpenLogicalChannel; class H245_CloseLogicalChannel; class H245_RequestChannelClose; class H245_MultiplexEntrySend; class H245_RequestMultiplexEntry; class H245_RequestMode; class H245_RoundTripDelayRequest; class H245_MaintenanceLoopRequest; class H245_CommunicationModeRequest; class H245_ConferenceRequest; class H245_MultilinkRequest; class H245_LogicalChannelRateRequest; class H245_GenericMessage; class H245_RequestMessage : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RequestMessage, PASN_Choice); #endif public: H245_RequestMessage(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_masterSlaveDetermination, e_terminalCapabilitySet, e_openLogicalChannel, e_closeLogicalChannel, e_requestChannelClose, e_multiplexEntrySend, e_requestMultiplexEntry, e_requestMode, e_roundTripDelayRequest, e_maintenanceLoopRequest, e_communicationModeRequest, e_conferenceRequest, e_multilinkRequest, e_logicalChannelRateRequest, e_genericRequest }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardMessage &() const; #else operator H245_NonStandardMessage &(); operator const H245_NonStandardMessage &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MasterSlaveDetermination &() const; #else operator H245_MasterSlaveDetermination &(); operator const H245_MasterSlaveDetermination &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_TerminalCapabilitySet &() const; #else operator H245_TerminalCapabilitySet &(); operator const H245_TerminalCapabilitySet &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_OpenLogicalChannel &() const; #else operator H245_OpenLogicalChannel &(); operator const H245_OpenLogicalChannel &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_CloseLogicalChannel &() const; #else operator H245_CloseLogicalChannel &(); operator const H245_CloseLogicalChannel &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RequestChannelClose &() const; #else operator H245_RequestChannelClose &(); operator const H245_RequestChannelClose &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultiplexEntrySend &() const; #else operator H245_MultiplexEntrySend &(); operator const H245_MultiplexEntrySend &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RequestMultiplexEntry &() const; #else operator H245_RequestMultiplexEntry &(); operator const H245_RequestMultiplexEntry &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RequestMode &() const; #else operator H245_RequestMode &(); operator const H245_RequestMode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RoundTripDelayRequest &() const; #else operator H245_RoundTripDelayRequest &(); operator const H245_RoundTripDelayRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MaintenanceLoopRequest &() const; #else operator H245_MaintenanceLoopRequest &(); operator const H245_MaintenanceLoopRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_CommunicationModeRequest &() const; #else operator H245_CommunicationModeRequest &(); operator const H245_CommunicationModeRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ConferenceRequest &() const; #else operator H245_ConferenceRequest &(); operator const H245_ConferenceRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultilinkRequest &() const; #else operator H245_MultilinkRequest &(); operator const H245_MultilinkRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_LogicalChannelRateRequest &() const; #else operator H245_LogicalChannelRateRequest &(); operator const H245_LogicalChannelRateRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_GenericMessage &() const; #else operator H245_GenericMessage &(); operator const H245_GenericMessage &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ResponseMessage // class H245_NonStandardMessage; class H245_MasterSlaveDeterminationAck; class H245_MasterSlaveDeterminationReject; class H245_TerminalCapabilitySetAck; class H245_TerminalCapabilitySetReject; class H245_OpenLogicalChannelAck; class H245_OpenLogicalChannelReject; class H245_CloseLogicalChannelAck; class H245_RequestChannelCloseAck; class H245_RequestChannelCloseReject; class H245_MultiplexEntrySendAck; class H245_MultiplexEntrySendReject; class H245_RequestMultiplexEntryAck; class H245_RequestMultiplexEntryReject; class H245_RequestModeAck; class H245_RequestModeReject; class H245_RoundTripDelayResponse; class H245_MaintenanceLoopAck; class H245_MaintenanceLoopReject; class H245_CommunicationModeResponse; class H245_ConferenceResponse; class H245_MultilinkResponse; class H245_LogicalChannelRateAcknowledge; class H245_LogicalChannelRateReject; class H245_GenericMessage; class H245_ResponseMessage : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ResponseMessage, PASN_Choice); #endif public: H245_ResponseMessage(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_masterSlaveDeterminationAck, e_masterSlaveDeterminationReject, e_terminalCapabilitySetAck, e_terminalCapabilitySetReject, e_openLogicalChannelAck, e_openLogicalChannelReject, e_closeLogicalChannelAck, e_requestChannelCloseAck, e_requestChannelCloseReject, e_multiplexEntrySendAck, e_multiplexEntrySendReject, e_requestMultiplexEntryAck, e_requestMultiplexEntryReject, e_requestModeAck, e_requestModeReject, e_roundTripDelayResponse, e_maintenanceLoopAck, e_maintenanceLoopReject, e_communicationModeResponse, e_conferenceResponse, e_multilinkResponse, e_logicalChannelRateAcknowledge, e_logicalChannelRateReject, e_genericResponse }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardMessage &() const; #else operator H245_NonStandardMessage &(); operator const H245_NonStandardMessage &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MasterSlaveDeterminationAck &() const; #else operator H245_MasterSlaveDeterminationAck &(); operator const H245_MasterSlaveDeterminationAck &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MasterSlaveDeterminationReject &() const; #else operator H245_MasterSlaveDeterminationReject &(); operator const H245_MasterSlaveDeterminationReject &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_TerminalCapabilitySetAck &() const; #else operator H245_TerminalCapabilitySetAck &(); operator const H245_TerminalCapabilitySetAck &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_TerminalCapabilitySetReject &() const; #else operator H245_TerminalCapabilitySetReject &(); operator const H245_TerminalCapabilitySetReject &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_OpenLogicalChannelAck &() const; #else operator H245_OpenLogicalChannelAck &(); operator const H245_OpenLogicalChannelAck &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_OpenLogicalChannelReject &() const; #else operator H245_OpenLogicalChannelReject &(); operator const H245_OpenLogicalChannelReject &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_CloseLogicalChannelAck &() const; #else operator H245_CloseLogicalChannelAck &(); operator const H245_CloseLogicalChannelAck &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RequestChannelCloseAck &() const; #else operator H245_RequestChannelCloseAck &(); operator const H245_RequestChannelCloseAck &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RequestChannelCloseReject &() const; #else operator H245_RequestChannelCloseReject &(); operator const H245_RequestChannelCloseReject &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultiplexEntrySendAck &() const; #else operator H245_MultiplexEntrySendAck &(); operator const H245_MultiplexEntrySendAck &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultiplexEntrySendReject &() const; #else operator H245_MultiplexEntrySendReject &(); operator const H245_MultiplexEntrySendReject &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RequestMultiplexEntryAck &() const; #else operator H245_RequestMultiplexEntryAck &(); operator const H245_RequestMultiplexEntryAck &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RequestMultiplexEntryReject &() const; #else operator H245_RequestMultiplexEntryReject &(); operator const H245_RequestMultiplexEntryReject &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RequestModeAck &() const; #else operator H245_RequestModeAck &(); operator const H245_RequestModeAck &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RequestModeReject &() const; #else operator H245_RequestModeReject &(); operator const H245_RequestModeReject &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RoundTripDelayResponse &() const; #else operator H245_RoundTripDelayResponse &(); operator const H245_RoundTripDelayResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MaintenanceLoopAck &() const; #else operator H245_MaintenanceLoopAck &(); operator const H245_MaintenanceLoopAck &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MaintenanceLoopReject &() const; #else operator H245_MaintenanceLoopReject &(); operator const H245_MaintenanceLoopReject &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_CommunicationModeResponse &() const; #else operator H245_CommunicationModeResponse &(); operator const H245_CommunicationModeResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ConferenceResponse &() const; #else operator H245_ConferenceResponse &(); operator const H245_ConferenceResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultilinkResponse &() const; #else operator H245_MultilinkResponse &(); operator const H245_MultilinkResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_LogicalChannelRateAcknowledge &() const; #else operator H245_LogicalChannelRateAcknowledge &(); operator const H245_LogicalChannelRateAcknowledge &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_LogicalChannelRateReject &() const; #else operator H245_LogicalChannelRateReject &(); operator const H245_LogicalChannelRateReject &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_GenericMessage &() const; #else operator H245_GenericMessage &(); operator const H245_GenericMessage &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // CommandMessage // class H245_NonStandardMessage; class H245_MaintenanceLoopOffCommand; class H245_SendTerminalCapabilitySet; class H245_EncryptionCommand; class H245_FlowControlCommand; class H245_EndSessionCommand; class H245_MiscellaneousCommand; class H245_CommunicationModeCommand; class H245_ConferenceCommand; class H245_H223MultiplexReconfiguration; class H245_NewATMVCCommand; class H245_MobileMultilinkReconfigurationCommand; class H245_GenericMessage; class H245_CommandMessage : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CommandMessage, PASN_Choice); #endif public: H245_CommandMessage(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_maintenanceLoopOffCommand, e_sendTerminalCapabilitySet, e_encryptionCommand, e_flowControlCommand, e_endSessionCommand, e_miscellaneousCommand, e_communicationModeCommand, e_conferenceCommand, e_h223MultiplexReconfiguration, e_newATMVCCommand, e_mobileMultilinkReconfigurationCommand, e_genericCommand }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardMessage &() const; #else operator H245_NonStandardMessage &(); operator const H245_NonStandardMessage &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MaintenanceLoopOffCommand &() const; #else operator H245_MaintenanceLoopOffCommand &(); operator const H245_MaintenanceLoopOffCommand &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_SendTerminalCapabilitySet &() const; #else operator H245_SendTerminalCapabilitySet &(); operator const H245_SendTerminalCapabilitySet &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_EncryptionCommand &() const; #else operator H245_EncryptionCommand &(); operator const H245_EncryptionCommand &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_FlowControlCommand &() const; #else operator H245_FlowControlCommand &(); operator const H245_FlowControlCommand &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_EndSessionCommand &() const; #else operator H245_EndSessionCommand &(); operator const H245_EndSessionCommand &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MiscellaneousCommand &() const; #else operator H245_MiscellaneousCommand &(); operator const H245_MiscellaneousCommand &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_CommunicationModeCommand &() const; #else operator H245_CommunicationModeCommand &(); operator const H245_CommunicationModeCommand &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ConferenceCommand &() const; #else operator H245_ConferenceCommand &(); operator const H245_ConferenceCommand &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H223MultiplexReconfiguration &() const; #else operator H245_H223MultiplexReconfiguration &(); operator const H245_H223MultiplexReconfiguration &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NewATMVCCommand &() const; #else operator H245_NewATMVCCommand &(); operator const H245_NewATMVCCommand &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MobileMultilinkReconfigurationCommand &() const; #else operator H245_MobileMultilinkReconfigurationCommand &(); operator const H245_MobileMultilinkReconfigurationCommand &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_GenericMessage &() const; #else operator H245_GenericMessage &(); operator const H245_GenericMessage &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // IndicationMessage // class H245_NonStandardMessage; class H245_FunctionNotUnderstood; class H245_MasterSlaveDeterminationRelease; class H245_TerminalCapabilitySetRelease; class H245_OpenLogicalChannelConfirm; class H245_RequestChannelCloseRelease; class H245_MultiplexEntrySendRelease; class H245_RequestMultiplexEntryRelease; class H245_RequestModeRelease; class H245_MiscellaneousIndication; class H245_JitterIndication; class H245_H223SkewIndication; class H245_NewATMVCIndication; class H245_UserInputIndication; class H245_H2250MaximumSkewIndication; class H245_MCLocationIndication; class H245_ConferenceIndication; class H245_VendorIdentification; class H245_FunctionNotSupported; class H245_MultilinkIndication; class H245_LogicalChannelRateRelease; class H245_FlowControlIndication; class H245_MobileMultilinkReconfigurationIndication; class H245_GenericMessage; class H245_IndicationMessage : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_IndicationMessage, PASN_Choice); #endif public: H245_IndicationMessage(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_functionNotUnderstood, e_masterSlaveDeterminationRelease, e_terminalCapabilitySetRelease, e_openLogicalChannelConfirm, e_requestChannelCloseRelease, e_multiplexEntrySendRelease, e_requestMultiplexEntryRelease, e_requestModeRelease, e_miscellaneousIndication, e_jitterIndication, e_h223SkewIndication, e_newATMVCIndication, e_userInput, e_h2250MaximumSkewIndication, e_mcLocationIndication, e_conferenceIndication, e_vendorIdentification, e_functionNotSupported, e_multilinkIndication, e_logicalChannelRateRelease, e_flowControlIndication, e_mobileMultilinkReconfigurationIndication, e_genericIndication }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardMessage &() const; #else operator H245_NonStandardMessage &(); operator const H245_NonStandardMessage &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_FunctionNotUnderstood &() const; #else operator H245_FunctionNotUnderstood &(); operator const H245_FunctionNotUnderstood &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MasterSlaveDeterminationRelease &() const; #else operator H245_MasterSlaveDeterminationRelease &(); operator const H245_MasterSlaveDeterminationRelease &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_TerminalCapabilitySetRelease &() const; #else operator H245_TerminalCapabilitySetRelease &(); operator const H245_TerminalCapabilitySetRelease &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_OpenLogicalChannelConfirm &() const; #else operator H245_OpenLogicalChannelConfirm &(); operator const H245_OpenLogicalChannelConfirm &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RequestChannelCloseRelease &() const; #else operator H245_RequestChannelCloseRelease &(); operator const H245_RequestChannelCloseRelease &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultiplexEntrySendRelease &() const; #else operator H245_MultiplexEntrySendRelease &(); operator const H245_MultiplexEntrySendRelease &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RequestMultiplexEntryRelease &() const; #else operator H245_RequestMultiplexEntryRelease &(); operator const H245_RequestMultiplexEntryRelease &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RequestModeRelease &() const; #else operator H245_RequestModeRelease &(); operator const H245_RequestModeRelease &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MiscellaneousIndication &() const; #else operator H245_MiscellaneousIndication &(); operator const H245_MiscellaneousIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_JitterIndication &() const; #else operator H245_JitterIndication &(); operator const H245_JitterIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H223SkewIndication &() const; #else operator H245_H223SkewIndication &(); operator const H245_H223SkewIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NewATMVCIndication &() const; #else operator H245_NewATMVCIndication &(); operator const H245_NewATMVCIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_UserInputIndication &() const; #else operator H245_UserInputIndication &(); operator const H245_UserInputIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H2250MaximumSkewIndication &() const; #else operator H245_H2250MaximumSkewIndication &(); operator const H245_H2250MaximumSkewIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MCLocationIndication &() const; #else operator H245_MCLocationIndication &(); operator const H245_MCLocationIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ConferenceIndication &() const; #else operator H245_ConferenceIndication &(); operator const H245_ConferenceIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_VendorIdentification &() const; #else operator H245_VendorIdentification &(); operator const H245_VendorIdentification &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_FunctionNotSupported &() const; #else operator H245_FunctionNotSupported &(); operator const H245_FunctionNotSupported &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultilinkIndication &() const; #else operator H245_MultilinkIndication &(); operator const H245_MultilinkIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_LogicalChannelRateRelease &() const; #else operator H245_LogicalChannelRateRelease &(); operator const H245_LogicalChannelRateRelease &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_FlowControlIndication &() const; #else operator H245_FlowControlIndication &(); operator const H245_FlowControlIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MobileMultilinkReconfigurationIndication &() const; #else operator H245_MobileMultilinkReconfigurationIndication &(); operator const H245_MobileMultilinkReconfigurationIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_GenericMessage &() const; #else operator H245_GenericMessage &(); operator const H245_GenericMessage &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // SequenceNumber // class H245_SequenceNumber : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_SequenceNumber, PASN_Integer); #endif public: H245_SequenceNumber(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H245_SequenceNumber & operator=(int v); H245_SequenceNumber & operator=(unsigned v); PObject * Clone() const; }; // // NonStandardIdentifier // class H245_NonStandardIdentifier_h221NonStandard; class H245_NonStandardIdentifier : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NonStandardIdentifier, PASN_Choice); #endif public: H245_NonStandardIdentifier(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_object, e_h221NonStandard }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardIdentifier_h221NonStandard &() const; #else operator H245_NonStandardIdentifier_h221NonStandard &(); operator const H245_NonStandardIdentifier_h221NonStandard &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // MasterSlaveDetermination // class H245_MasterSlaveDetermination : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MasterSlaveDetermination, PASN_Sequence); #endif public: H245_MasterSlaveDetermination(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_terminalType; PASN_Integer m_statusDeterminationNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MasterSlaveDeterminationRelease // class H245_MasterSlaveDeterminationRelease : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MasterSlaveDeterminationRelease, PASN_Sequence); #endif public: H245_MasterSlaveDeterminationRelease(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // AlternativeCapabilitySet // class H245_CapabilityTableEntryNumber; class H245_AlternativeCapabilitySet : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_AlternativeCapabilitySet, PASN_Array); #endif public: H245_AlternativeCapabilitySet(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_CapabilityTableEntryNumber & operator[](PINDEX i) const; PObject * Clone() const; }; // // CapabilityTableEntryNumber // class H245_CapabilityTableEntryNumber : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CapabilityTableEntryNumber, PASN_Integer); #endif public: H245_CapabilityTableEntryNumber(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H245_CapabilityTableEntryNumber & operator=(int v); H245_CapabilityTableEntryNumber & operator=(unsigned v); PObject * Clone() const; }; // // CapabilityDescriptorNumber // class H245_CapabilityDescriptorNumber : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CapabilityDescriptorNumber, PASN_Integer); #endif public: H245_CapabilityDescriptorNumber(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H245_CapabilityDescriptorNumber & operator=(int v); H245_CapabilityDescriptorNumber & operator=(unsigned v); PObject * Clone() const; }; // // Capability // class H245_NonStandardParameter; class H245_VideoCapability; class H245_AudioCapability; class H245_DataApplicationCapability; class H245_Capability_h233EncryptionReceiveCapability; class H245_ConferenceCapability; class H245_H235SecurityCapability; class H245_UserInputCapability; class H245_GenericCapability; class H245_MultiplexedStreamCapability; class H245_AudioTelephonyEventCapability; class H245_AudioToneCapability; class H245_DepFECCapability; class H245_MultiplePayloadStreamCapability; class H245_FECCapability; class H245_RedundancyEncodingCapability; class H245_AlternativeCapabilitySet; class H245_Capability : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_Capability, PASN_Choice); #endif public: H245_Capability(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_receiveVideoCapability, e_transmitVideoCapability, e_receiveAndTransmitVideoCapability, e_receiveAudioCapability, e_transmitAudioCapability, e_receiveAndTransmitAudioCapability, e_receiveDataApplicationCapability, e_transmitDataApplicationCapability, e_receiveAndTransmitDataApplicationCapability, e_h233EncryptionTransmitCapability, e_h233EncryptionReceiveCapability, e_conferenceCapability, e_h235SecurityCapability, e_maxPendingReplacementFor, e_receiveUserInputCapability, e_transmitUserInputCapability, e_receiveAndTransmitUserInputCapability, e_genericControlCapability, e_receiveMultiplexedStreamCapability, e_transmitMultiplexedStreamCapability, e_receiveAndTransmitMultiplexedStreamCapability, e_receiveRTPAudioTelephonyEventCapability, e_receiveRTPAudioToneCapability, e_depFecCapability, e_multiplePayloadStreamCapability, e_fecCapability, e_redundancyEncodingCap, e_oneOfCapabilities }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_VideoCapability &() const; #else operator H245_VideoCapability &(); operator const H245_VideoCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_AudioCapability &() const; #else operator H245_AudioCapability &(); operator const H245_AudioCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DataApplicationCapability &() const; #else operator H245_DataApplicationCapability &(); operator const H245_DataApplicationCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_Capability_h233EncryptionReceiveCapability &() const; #else operator H245_Capability_h233EncryptionReceiveCapability &(); operator const H245_Capability_h233EncryptionReceiveCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ConferenceCapability &() const; #else operator H245_ConferenceCapability &(); operator const H245_ConferenceCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H235SecurityCapability &() const; #else operator H245_H235SecurityCapability &(); operator const H245_H235SecurityCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_UserInputCapability &() const; #else operator H245_UserInputCapability &(); operator const H245_UserInputCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_GenericCapability &() const; #else operator H245_GenericCapability &(); operator const H245_GenericCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultiplexedStreamCapability &() const; #else operator H245_MultiplexedStreamCapability &(); operator const H245_MultiplexedStreamCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_AudioTelephonyEventCapability &() const; #else operator H245_AudioTelephonyEventCapability &(); operator const H245_AudioTelephonyEventCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_AudioToneCapability &() const; #else operator H245_AudioToneCapability &(); operator const H245_AudioToneCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DepFECCapability &() const; #else operator H245_DepFECCapability &(); operator const H245_DepFECCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultiplePayloadStreamCapability &() const; #else operator H245_MultiplePayloadStreamCapability &(); operator const H245_MultiplePayloadStreamCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_FECCapability &() const; #else operator H245_FECCapability &(); operator const H245_FECCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RedundancyEncodingCapability &() const; #else operator H245_RedundancyEncodingCapability &(); operator const H245_RedundancyEncodingCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_AlternativeCapabilitySet &() const; #else operator H245_AlternativeCapabilitySet &(); operator const H245_AlternativeCapabilitySet &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // MultiplexCapability // class H245_NonStandardParameter; class H245_H222Capability; class H245_H223Capability; class H245_V76Capability; class H245_H2250Capability; class H245_GenericCapability; class H245_MultiplexCapability : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultiplexCapability, PASN_Choice); #endif public: H245_MultiplexCapability(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_h222Capability, e_h223Capability, e_v76Capability, e_h2250Capability, e_genericMultiplexCapability }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H222Capability &() const; #else operator H245_H222Capability &(); operator const H245_H222Capability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H223Capability &() const; #else operator H245_H223Capability &(); operator const H245_H223Capability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_V76Capability &() const; #else operator H245_V76Capability &(); operator const H245_V76Capability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H2250Capability &() const; #else operator H245_H2250Capability &(); operator const H245_H2250Capability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_GenericCapability &() const; #else operator H245_GenericCapability &(); operator const H245_GenericCapability &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // H223AnnexCCapability // class H245_H223AnnexCCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223AnnexCCapability, PASN_Sequence); #endif public: H245_H223AnnexCCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_rsCodeCapability }; PASN_Boolean m_videoWithAL1M; PASN_Boolean m_videoWithAL2M; PASN_Boolean m_videoWithAL3M; PASN_Boolean m_audioWithAL1M; PASN_Boolean m_audioWithAL2M; PASN_Boolean m_audioWithAL3M; PASN_Boolean m_dataWithAL1M; PASN_Boolean m_dataWithAL2M; PASN_Boolean m_dataWithAL3M; PASN_Boolean m_alpduInterleaving; PASN_Integer m_maximumAL1MPDUSize; PASN_Integer m_maximumAL2MSDUSize; PASN_Integer m_maximumAL3MSDUSize; PASN_Boolean m_rsCodeCapability; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // V75Capability // class H245_V75Capability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_V75Capability, PASN_Sequence); #endif public: H245_V75Capability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_audioHeader; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // QOSMode // class H245_QOSMode : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_QOSMode, PASN_Choice); #endif public: H245_QOSMode(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_guaranteedQOS, e_controlledLoad }; PBoolean CreateObject(); PObject * Clone() const; }; // // ATMParameters // class H245_ATMParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ATMParameters, PASN_Sequence); #endif public: H245_ATMParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_maxNTUSize; PASN_Boolean m_atmUBR; PASN_Boolean m_atmrtVBR; PASN_Boolean m_atmnrtVBR; PASN_Boolean m_atmABR; PASN_Boolean m_atmCBR; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // QOSType // class H245_QOSType : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_QOSType, PASN_Choice); #endif public: H245_QOSType(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_desired, e_required }; PBoolean CreateObject(); PObject * Clone() const; }; // // QOSClass // class H245_QOSClass : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_QOSClass, PASN_Choice); #endif public: H245_QOSClass(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_class0, e_class1, e_class2, e_class3, e_class4, e_class5 }; PBoolean CreateObject(); PObject * Clone() const; }; // // MediaTransportType // class H245_MediaTransportType_atm_AAL5_compressed; class H245_MediaTransportType : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MediaTransportType, PASN_Choice); #endif public: H245_MediaTransportType(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_ip_UDP, e_ip_TCP, e_atm_AAL5_UNIDIR, e_atm_AAL5_BIDIR, e_atm_AAL5_compressed }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MediaTransportType_atm_AAL5_compressed &() const; #else operator H245_MediaTransportType_atm_AAL5_compressed &(); operator const H245_MediaTransportType_atm_AAL5_compressed &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // MediaChannelCapability // class H245_MediaChannelCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MediaChannelCapability, PASN_Sequence); #endif public: H245_MediaChannelCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_mediaTransport }; H245_MediaTransportType m_mediaTransport; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RedundancyEncodingMethod // class H245_NonStandardParameter; class H245_RTPH263VideoRedundancyEncoding; class H245_RedundancyEncodingMethod : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RedundancyEncodingMethod, PASN_Choice); #endif public: H245_RedundancyEncodingMethod(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_rtpAudioRedundancyEncoding, e_rtpH263VideoRedundancyEncoding }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RTPH263VideoRedundancyEncoding &() const; #else operator H245_RTPH263VideoRedundancyEncoding &(); operator const H245_RTPH263VideoRedundancyEncoding &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // VideoCapability // class H245_NonStandardParameter; class H245_H261VideoCapability; class H245_H262VideoCapability; class H245_H263VideoCapability; class H245_IS11172VideoCapability; class H245_GenericCapability; class H245_ExtendedVideoCapability; class H245_VideoCapability : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_VideoCapability, PASN_Choice); #endif public: H245_VideoCapability(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_h261VideoCapability, e_h262VideoCapability, e_h263VideoCapability, e_is11172VideoCapability, e_genericVideoCapability, e_extendedVideoCapability }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H261VideoCapability &() const; #else operator H245_H261VideoCapability &(); operator const H245_H261VideoCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H262VideoCapability &() const; #else operator H245_H262VideoCapability &(); operator const H245_H262VideoCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H263VideoCapability &() const; #else operator H245_H263VideoCapability &(); operator const H245_H263VideoCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_IS11172VideoCapability &() const; #else operator H245_IS11172VideoCapability &(); operator const H245_IS11172VideoCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_GenericCapability &() const; #else operator H245_GenericCapability &(); operator const H245_GenericCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ExtendedVideoCapability &() const; #else operator H245_ExtendedVideoCapability &(); operator const H245_ExtendedVideoCapability &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // H261VideoCapability // class H245_H261VideoCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H261VideoCapability, PASN_Sequence); #endif public: H245_H261VideoCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_qcifMPI, e_cifMPI, e_videoBadMBsCap }; PASN_Integer m_qcifMPI; PASN_Integer m_cifMPI; PASN_Boolean m_temporalSpatialTradeOffCapability; PASN_Integer m_maxBitRate; PASN_Boolean m_stillImageTransmission; PASN_Boolean m_videoBadMBsCap; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H262VideoCapability // class H245_H262VideoCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H262VideoCapability, PASN_Sequence); #endif public: H245_H262VideoCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_videoBitRate, e_vbvBufferSize, e_samplesPerLine, e_linesPerFrame, e_framesPerSecond, e_luminanceSampleRate }; PASN_Boolean m_profileAndLevel_SPatML; PASN_Boolean m_profileAndLevel_MPatLL; PASN_Boolean m_profileAndLevel_MPatML; PASN_Boolean m_profileAndLevel_MPatH_14; PASN_Boolean m_profileAndLevel_MPatHL; PASN_Boolean m_profileAndLevel_SNRatLL; PASN_Boolean m_profileAndLevel_SNRatML; PASN_Boolean m_profileAndLevel_SpatialatH_14; PASN_Boolean m_profileAndLevel_HPatML; PASN_Boolean m_profileAndLevel_HPatH_14; PASN_Boolean m_profileAndLevel_HPatHL; PASN_Integer m_videoBitRate; PASN_Integer m_vbvBufferSize; PASN_Integer m_samplesPerLine; PASN_Integer m_linesPerFrame; PASN_Integer m_framesPerSecond; PASN_Integer m_luminanceSampleRate; PASN_Boolean m_videoBadMBsCap; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TransparencyParameters // class H245_TransparencyParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_TransparencyParameters, PASN_Sequence); #endif public: H245_TransparencyParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_presentationOrder; PASN_Integer m_offset_x; PASN_Integer m_offset_y; PASN_Integer m_scale_x; PASN_Integer m_scale_y; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CustomPictureClockFrequency // class H245_CustomPictureClockFrequency : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CustomPictureClockFrequency, PASN_Sequence); #endif public: H245_CustomPictureClockFrequency(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_sqcifMPI, e_qcifMPI, e_cifMPI, e_cif4MPI, e_cif16MPI }; PASN_Integer m_clockConversionCode; PASN_Integer m_clockDivisor; PASN_Integer m_sqcifMPI; PASN_Integer m_qcifMPI; PASN_Integer m_cifMPI; PASN_Integer m_cif4MPI; PASN_Integer m_cif16MPI; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H263Version3Options // class H245_H263Version3Options : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H263Version3Options, PASN_Sequence); #endif public: H245_H263Version3Options(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_dataPartitionedSlices; PASN_Boolean m_fixedPointIDCT0; PASN_Boolean m_interlacedFields; PASN_Boolean m_currentPictureHeaderRepetition; PASN_Boolean m_previousPictureHeaderRepetition; PASN_Boolean m_nextPictureHeaderRepetition; PASN_Boolean m_pictureNumber; PASN_Boolean m_spareReferencePictures; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IS11172VideoCapability // class H245_IS11172VideoCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_IS11172VideoCapability, PASN_Sequence); #endif public: H245_IS11172VideoCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_videoBitRate, e_vbvBufferSize, e_samplesPerLine, e_linesPerFrame, e_pictureRate, e_luminanceSampleRate, e_videoBadMBsCap }; PASN_Boolean m_constrainedBitstream; PASN_Integer m_videoBitRate; PASN_Integer m_vbvBufferSize; PASN_Integer m_samplesPerLine; PASN_Integer m_linesPerFrame; PASN_Integer m_pictureRate; PASN_Integer m_luminanceSampleRate; PASN_Boolean m_videoBadMBsCap; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AudioCapability // class H245_NonStandardParameter; class H245_AudioCapability_g7231; class H245_IS11172AudioCapability; class H245_IS13818AudioCapability; class H245_G7231AnnexCCapability; class H245_GSMAudioCapability; class H245_GenericCapability; class H245_G729Extensions; class H245_VBDCapability; class H245_NoPTAudioTelephonyEventCapability; class H245_NoPTAudioToneCapability; class H245_AudioCapability : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_AudioCapability, PASN_Choice); #endif public: H245_AudioCapability(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_g711Alaw64k, e_g711Alaw56k, e_g711Ulaw64k, e_g711Ulaw56k, e_g722_64k, e_g722_56k, e_g722_48k, e_g7231, e_g728, e_g729, e_g729AnnexA, e_is11172AudioCapability, e_is13818AudioCapability, e_g729wAnnexB, e_g729AnnexAwAnnexB, e_g7231AnnexCCapability, e_gsmFullRate, e_gsmHalfRate, e_gsmEnhancedFullRate, e_genericAudioCapability, e_g729Extensions, e_vbd, e_audioTelephonyEvent, e_audioTone }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_AudioCapability_g7231 &() const; #else operator H245_AudioCapability_g7231 &(); operator const H245_AudioCapability_g7231 &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_IS11172AudioCapability &() const; #else operator H245_IS11172AudioCapability &(); operator const H245_IS11172AudioCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_IS13818AudioCapability &() const; #else operator H245_IS13818AudioCapability &(); operator const H245_IS13818AudioCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_G7231AnnexCCapability &() const; #else operator H245_G7231AnnexCCapability &(); operator const H245_G7231AnnexCCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_GSMAudioCapability &() const; #else operator H245_GSMAudioCapability &(); operator const H245_GSMAudioCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_GenericCapability &() const; #else operator H245_GenericCapability &(); operator const H245_GenericCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_G729Extensions &() const; #else operator H245_G729Extensions &(); operator const H245_G729Extensions &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_VBDCapability &() const; #else operator H245_VBDCapability &(); operator const H245_VBDCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NoPTAudioTelephonyEventCapability &() const; #else operator H245_NoPTAudioTelephonyEventCapability &(); operator const H245_NoPTAudioTelephonyEventCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NoPTAudioToneCapability &() const; #else operator H245_NoPTAudioToneCapability &(); operator const H245_NoPTAudioToneCapability &() const; #endif #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // G729Extensions // class H245_G729Extensions : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_G729Extensions, PASN_Sequence); #endif public: H245_G729Extensions(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_audioUnit }; PASN_Integer m_audioUnit; PASN_Boolean m_annexA; PASN_Boolean m_annexB; PASN_Boolean m_annexD; PASN_Boolean m_annexE; PASN_Boolean m_annexF; PASN_Boolean m_annexG; PASN_Boolean m_annexH; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IS11172AudioCapability // class H245_IS11172AudioCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_IS11172AudioCapability, PASN_Sequence); #endif public: H245_IS11172AudioCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_audioLayer1; PASN_Boolean m_audioLayer2; PASN_Boolean m_audioLayer3; PASN_Boolean m_audioSampling32k; PASN_Boolean m_audioSampling44k1; PASN_Boolean m_audioSampling48k; PASN_Boolean m_singleChannel; PASN_Boolean m_twoChannels; PASN_Integer m_bitRate; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IS13818AudioCapability // class H245_IS13818AudioCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_IS13818AudioCapability, PASN_Sequence); #endif public: H245_IS13818AudioCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_audioLayer1; PASN_Boolean m_audioLayer2; PASN_Boolean m_audioLayer3; PASN_Boolean m_audioSampling16k; PASN_Boolean m_audioSampling22k05; PASN_Boolean m_audioSampling24k; PASN_Boolean m_audioSampling32k; PASN_Boolean m_audioSampling44k1; PASN_Boolean m_audioSampling48k; PASN_Boolean m_singleChannel; PASN_Boolean m_twoChannels; PASN_Boolean m_threeChannels2_1; PASN_Boolean m_threeChannels3_0; PASN_Boolean m_fourChannels2_0_2_0; PASN_Boolean m_fourChannels2_2; PASN_Boolean m_fourChannels3_1; PASN_Boolean m_fiveChannels3_0_2_0; PASN_Boolean m_fiveChannels3_2; PASN_Boolean m_lowFrequencyEnhancement; PASN_Boolean m_multilingual; PASN_Integer m_bitRate; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // GSMAudioCapability // class H245_GSMAudioCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_GSMAudioCapability, PASN_Sequence); #endif public: H245_GSMAudioCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_audioUnitSize; PASN_Boolean m_comfortNoise; PASN_Boolean m_scrambled; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // VBDCapability // class H245_VBDCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_VBDCapability, PASN_Sequence); #endif public: H245_VBDCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_AudioCapability m_type; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DataProtocolCapability // class H245_NonStandardParameter; class H245_DataProtocolCapability_v76wCompression; class H245_DataProtocolCapability : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DataProtocolCapability, PASN_Choice); #endif public: H245_DataProtocolCapability(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_v14buffered, e_v42lapm, e_hdlcFrameTunnelling, e_h310SeparateVCStack, e_h310SingleVCStack, e_transparent, e_segmentationAndReassembly, e_hdlcFrameTunnelingwSAR, e_v120, e_separateLANStack, e_v76wCompression, e_tcp, e_udp }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DataProtocolCapability_v76wCompression &() const; #else operator H245_DataProtocolCapability_v76wCompression &(); operator const H245_DataProtocolCapability_v76wCompression &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // CompressionType // class H245_V42bis; class H245_CompressionType : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CompressionType, PASN_Choice); #endif public: H245_CompressionType(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_v42bis }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_V42bis &() const; #else operator H245_V42bis &(); operator const H245_V42bis &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // V42bis // class H245_V42bis : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_V42bis, PASN_Sequence); #endif public: H245_V42bis(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_numberOfCodewords; PASN_Integer m_maximumStringLength; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // T84Profile // class H245_T84Profile_t84Restricted; class H245_T84Profile : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_T84Profile, PASN_Choice); #endif public: H245_T84Profile(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_t84Unrestricted, e_t84Restricted }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_T84Profile_t84Restricted &() const; #else operator H245_T84Profile_t84Restricted &(); operator const H245_T84Profile_t84Restricted &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // T38FaxRateManagement // class H245_T38FaxRateManagement : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_T38FaxRateManagement, PASN_Choice); #endif public: H245_T38FaxRateManagement(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_localTCF, e_transferredTCF }; PBoolean CreateObject(); PObject * Clone() const; }; // // T38FaxTcpOptions // class H245_T38FaxTcpOptions : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_T38FaxTcpOptions, PASN_Sequence); #endif public: H245_T38FaxTcpOptions(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_t38TCPBidirectionalMode; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // EncryptionCapability // class H245_MediaEncryptionAlgorithm; class H245_EncryptionCapability : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_EncryptionCapability, PASN_Array); #endif public: H245_EncryptionCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_MediaEncryptionAlgorithm & operator[](PINDEX i) const; PObject * Clone() const; }; // // MediaEncryptionAlgorithm // class H245_NonStandardParameter; class H245_MediaEncryptionAlgorithm : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MediaEncryptionAlgorithm, PASN_Choice); #endif public: H245_MediaEncryptionAlgorithm(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_algorithm }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // UserInputCapability // class H245_ArrayOf_NonStandardParameter; class H245_GenericCapability; class H245_UserInputCapability : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_UserInputCapability, PASN_Choice); #endif public: H245_UserInputCapability(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_basicString, e_iA5String, e_generalString, e_dtmf, e_hookflash, e_extendedAlphanumeric, e_encryptedBasicString, e_encryptedIA5String, e_encryptedGeneralString, e_secureDTMF, e_genericUserInputCapability }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ArrayOf_NonStandardParameter &() const; #else operator H245_ArrayOf_NonStandardParameter &(); operator const H245_ArrayOf_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_GenericCapability &() const; #else operator H245_GenericCapability &(); operator const H245_GenericCapability &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // CapabilityIdentifier // class H245_NonStandardParameter; class H245_CapabilityIdentifier : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CapabilityIdentifier, PASN_Choice); #endif public: H245_CapabilityIdentifier(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_standard, e_h221NonStandard, e_uuid, e_domainBased }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ParameterIdentifier // class H245_NonStandardParameter; class H245_ParameterIdentifier : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ParameterIdentifier, PASN_Choice); #endif public: H245_ParameterIdentifier(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_standard, e_h221NonStandard, e_uuid, e_domainBased }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ParameterValue // class H245_ArrayOf_GenericParameter; class H245_ParameterValue : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ParameterValue, PASN_Choice); #endif public: H245_ParameterValue(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_logical, e_booleanArray, e_unsignedMin, e_unsignedMax, e_unsigned32Min, e_unsigned32Max, e_octetString, e_genericParameter }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ArrayOf_GenericParameter &() const; #else operator H245_ArrayOf_GenericParameter &(); operator const H245_ArrayOf_GenericParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // MultiplexFormat // class H245_NonStandardParameter; class H245_H222Capability; class H245_H223Capability; class H245_MultiplexFormat : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultiplexFormat, PASN_Choice); #endif public: H245_MultiplexFormat(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_h222Capability, e_h223Capability }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H222Capability &() const; #else operator H245_H222Capability &(); operator const H245_H222Capability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H223Capability &() const; #else operator H245_H223Capability &(); operator const H245_H223Capability &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // AudioTelephonyEventCapability // class H245_AudioTelephonyEventCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_AudioTelephonyEventCapability, PASN_Sequence); #endif public: H245_AudioTelephonyEventCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_dynamicRTPPayloadType; PASN_GeneralString m_audioTelephoneEvent; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AudioToneCapability // class H245_AudioToneCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_AudioToneCapability, PASN_Sequence); #endif public: H245_AudioToneCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_dynamicRTPPayloadType; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NoPTAudioTelephonyEventCapability // class H245_NoPTAudioTelephonyEventCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NoPTAudioTelephonyEventCapability, PASN_Sequence); #endif public: H245_NoPTAudioTelephonyEventCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_GeneralString m_audioTelephoneEvent; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NoPTAudioToneCapability // class H245_NoPTAudioToneCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NoPTAudioToneCapability, PASN_Sequence); #endif public: H245_NoPTAudioToneCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // DepFECCapability // class H245_DepFECCapability_rfc2733; class H245_DepFECCapability : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DepFECCapability, PASN_Choice); #endif public: H245_DepFECCapability(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_rfc2733 }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DepFECCapability_rfc2733 &() const; #else operator H245_DepFECCapability_rfc2733 &(); operator const H245_DepFECCapability_rfc2733 &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // MaxRedundancy // class H245_MaxRedundancy : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MaxRedundancy, PASN_Integer); #endif public: H245_MaxRedundancy(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H245_MaxRedundancy & operator=(int v); H245_MaxRedundancy & operator=(unsigned v); PObject * Clone() const; }; // // LogicalChannelNumber // class H245_LogicalChannelNumber : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_LogicalChannelNumber, PASN_Integer); #endif public: H245_LogicalChannelNumber(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H245_LogicalChannelNumber & operator=(int v); H245_LogicalChannelNumber & operator=(unsigned v); PObject * Clone() const; }; // // V75Parameters // class H245_V75Parameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_V75Parameters, PASN_Sequence); #endif public: H245_V75Parameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_audioHeaderPresent; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DataType // class H245_NonStandardParameter; class H245_VideoCapability; class H245_AudioCapability; class H245_DataApplicationCapability; class H245_EncryptionMode; class H245_H235Media; class H245_MultiplexedStreamParameter; class H245_RedundancyEncoding; class H245_MultiplePayloadStream; class H245_DepFECData; class H245_FECData; class H245_DataType : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DataType, PASN_Choice); #endif public: H245_DataType(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_nullData, e_videoData, e_audioData, e_data, e_encryptionData, e_h235Control, e_h235Media, e_multiplexedStream, e_redundancyEncoding, e_multiplePayloadStream, e_depFec, e_fec }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_VideoCapability &() const; #else operator H245_VideoCapability &(); operator const H245_VideoCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_AudioCapability &() const; #else operator H245_AudioCapability &(); operator const H245_AudioCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DataApplicationCapability &() const; #else operator H245_DataApplicationCapability &(); operator const H245_DataApplicationCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_EncryptionMode &() const; #else operator H245_EncryptionMode &(); operator const H245_EncryptionMode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H235Media &() const; #else operator H245_H235Media &(); operator const H245_H235Media &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultiplexedStreamParameter &() const; #else operator H245_MultiplexedStreamParameter &(); operator const H245_MultiplexedStreamParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RedundancyEncoding &() const; #else operator H245_RedundancyEncoding &(); operator const H245_RedundancyEncoding &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultiplePayloadStream &() const; #else operator H245_MultiplePayloadStream &(); operator const H245_MultiplePayloadStream &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DepFECData &() const; #else operator H245_DepFECData &(); operator const H245_DepFECData &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_FECData &() const; #else operator H245_FECData &(); operator const H245_FECData &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // MultiplexedStreamParameter // class H245_MultiplexedStreamParameter : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultiplexedStreamParameter, PASN_Sequence); #endif public: H245_MultiplexedStreamParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_MultiplexFormat m_multiplexFormat; PASN_Boolean m_controlOnMuxStream; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H222LogicalChannelParameters // class H245_H222LogicalChannelParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H222LogicalChannelParameters, PASN_Sequence); #endif public: H245_H222LogicalChannelParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_pcr_pid, e_programDescriptors, e_streamDescriptors }; PASN_Integer m_resourceID; PASN_Integer m_subChannelID; PASN_Integer m_pcr_pid; PASN_OctetString m_programDescriptors; PASN_OctetString m_streamDescriptors; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CRCLength // class H245_CRCLength : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CRCLength, PASN_Choice); #endif public: H245_CRCLength(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_crc8bit, e_crc16bit, e_crc32bit }; PBoolean CreateObject(); PObject * Clone() const; }; // // RedundancyEncodingElement // class H245_RedundancyEncodingElement : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RedundancyEncodingElement, PASN_Sequence); #endif public: H245_RedundancyEncodingElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_payloadType }; H245_DataType m_dataType; PASN_Integer m_payloadType; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultiplePayloadStreamElement // class H245_MultiplePayloadStreamElement : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultiplePayloadStreamElement, PASN_Sequence); #endif public: H245_MultiplePayloadStreamElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_payloadType }; H245_DataType m_dataType; PASN_Integer m_payloadType; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DepFECData // class H245_DepFECData_rfc2733; class H245_DepFECData : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DepFECData, PASN_Choice); #endif public: H245_DepFECData(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_rfc2733 }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DepFECData_rfc2733 &() const; #else operator H245_DepFECData_rfc2733 &(); operator const H245_DepFECData_rfc2733 &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // FECData // class H245_FECData_rfc2733; class H245_FECData : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_FECData, PASN_Choice); #endif public: H245_FECData(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_rfc2733 }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_FECData_rfc2733 &() const; #else operator H245_FECData_rfc2733 &(); operator const H245_FECData_rfc2733 &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // TransportAddress // class H245_UnicastAddress; class H245_MulticastAddress; class H245_TransportAddress : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_TransportAddress, PASN_Choice); #endif public: H245_TransportAddress(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_unicastAddress, e_multicastAddress }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_UnicastAddress &() const; #else operator H245_UnicastAddress &(); operator const H245_UnicastAddress &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MulticastAddress &() const; #else operator H245_MulticastAddress &(); operator const H245_MulticastAddress &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // UnicastAddress // class H245_UnicastAddress_iPAddress; class H245_UnicastAddress_iPXAddress; class H245_UnicastAddress_iP6Address; class H245_UnicastAddress_iPSourceRouteAddress; class H245_NonStandardParameter; class H245_UnicastAddress : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_UnicastAddress, PASN_Choice); #endif public: H245_UnicastAddress(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_iPAddress, e_iPXAddress, e_iP6Address, e_netBios, e_iPSourceRouteAddress, e_nsap, e_nonStandardAddress }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_UnicastAddress_iPAddress &() const; #else operator H245_UnicastAddress_iPAddress &(); operator const H245_UnicastAddress_iPAddress &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_UnicastAddress_iPXAddress &() const; #else operator H245_UnicastAddress_iPXAddress &(); operator const H245_UnicastAddress_iPXAddress &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_UnicastAddress_iP6Address &() const; #else operator H245_UnicastAddress_iP6Address &(); operator const H245_UnicastAddress_iP6Address &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_UnicastAddress_iPSourceRouteAddress &() const; #else operator H245_UnicastAddress_iPSourceRouteAddress &(); operator const H245_UnicastAddress_iPSourceRouteAddress &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // MulticastAddress // class H245_MulticastAddress_iPAddress; class H245_MulticastAddress_iP6Address; class H245_NonStandardParameter; class H245_MulticastAddress : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MulticastAddress, PASN_Choice); #endif public: H245_MulticastAddress(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_iPAddress, e_iP6Address, e_nsap, e_nonStandardAddress }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MulticastAddress_iPAddress &() const; #else operator H245_MulticastAddress_iPAddress &(); operator const H245_MulticastAddress_iPAddress &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MulticastAddress_iP6Address &() const; #else operator H245_MulticastAddress_iP6Address &(); operator const H245_MulticastAddress_iP6Address &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // EscrowData // class H245_EscrowData : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_EscrowData, PASN_Sequence); #endif public: H245_EscrowData(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_ObjectId m_escrowID; PASN_BitString m_escrowValue; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CloseLogicalChannelAck // class H245_CloseLogicalChannelAck : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CloseLogicalChannelAck, PASN_Sequence); #endif public: H245_CloseLogicalChannelAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_LogicalChannelNumber m_forwardLogicalChannelNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RequestChannelCloseAck // class H245_RequestChannelCloseAck : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RequestChannelCloseAck, PASN_Sequence); #endif public: H245_RequestChannelCloseAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_LogicalChannelNumber m_forwardLogicalChannelNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RequestChannelCloseRelease // class H245_RequestChannelCloseRelease : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RequestChannelCloseRelease, PASN_Sequence); #endif public: H245_RequestChannelCloseRelease(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_LogicalChannelNumber m_forwardLogicalChannelNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultiplexTableEntryNumber // class H245_MultiplexTableEntryNumber : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultiplexTableEntryNumber, PASN_Integer); #endif public: H245_MultiplexTableEntryNumber(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H245_MultiplexTableEntryNumber & operator=(int v); H245_MultiplexTableEntryNumber & operator=(unsigned v); PObject * Clone() const; }; // // RequestModeRelease // class H245_RequestModeRelease : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RequestModeRelease, PASN_Sequence); #endif public: H245_RequestModeRelease(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // ModeDescription // class H245_ModeElement; class H245_ModeDescription : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ModeDescription, PASN_Array); #endif public: H245_ModeDescription(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_ModeElement & operator[](PINDEX i) const; PObject * Clone() const; }; // // ModeElementType // class H245_NonStandardParameter; class H245_VideoMode; class H245_AudioMode; class H245_DataMode; class H245_EncryptionMode; class H245_H235Mode; class H245_MultiplexedStreamParameter; class H245_RedundancyEncodingDTMode; class H245_MultiplePayloadStreamMode; class H245_DepFECMode; class H245_FECMode; class H245_ModeElementType : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ModeElementType, PASN_Choice); #endif public: H245_ModeElementType(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_videoMode, e_audioMode, e_dataMode, e_encryptionMode, e_h235Mode, e_multiplexedStreamMode, e_redundancyEncodingDTMode, e_multiplePayloadStreamMode, e_depFecMode, e_fecMode }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_VideoMode &() const; #else operator H245_VideoMode &(); operator const H245_VideoMode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_AudioMode &() const; #else operator H245_AudioMode &(); operator const H245_AudioMode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DataMode &() const; #else operator H245_DataMode &(); operator const H245_DataMode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_EncryptionMode &() const; #else operator H245_EncryptionMode &(); operator const H245_EncryptionMode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H235Mode &() const; #else operator H245_H235Mode &(); operator const H245_H235Mode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultiplexedStreamParameter &() const; #else operator H245_MultiplexedStreamParameter &(); operator const H245_MultiplexedStreamParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RedundancyEncodingDTMode &() const; #else operator H245_RedundancyEncodingDTMode &(); operator const H245_RedundancyEncodingDTMode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultiplePayloadStreamMode &() const; #else operator H245_MultiplePayloadStreamMode &(); operator const H245_MultiplePayloadStreamMode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DepFECMode &() const; #else operator H245_DepFECMode &(); operator const H245_DepFECMode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_FECMode &() const; #else operator H245_FECMode &(); operator const H245_FECMode &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // MultiplexedStreamModeParameters // class H245_MultiplexedStreamModeParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultiplexedStreamModeParameters, PASN_Sequence); #endif public: H245_MultiplexedStreamModeParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_LogicalChannelNumber m_logicalChannelNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultiplePayloadStreamElementMode // class H245_MultiplePayloadStreamElementMode : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultiplePayloadStreamElementMode, PASN_Sequence); #endif public: H245_MultiplePayloadStreamElementMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_ModeElementType m_type; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DepFECMode // class H245_DepFECMode_rfc2733Mode; class H245_DepFECMode : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DepFECMode, PASN_Choice); #endif public: H245_DepFECMode(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_rfc2733Mode }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DepFECMode_rfc2733Mode &() const; #else operator H245_DepFECMode_rfc2733Mode &(); operator const H245_DepFECMode_rfc2733Mode &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // V76ModeParameters // class H245_V76ModeParameters : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_V76ModeParameters, PASN_Choice); #endif public: H245_V76ModeParameters(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_suspendResumewAddress, e_suspendResumewoAddress }; PBoolean CreateObject(); PObject * Clone() const; }; // // VideoMode // class H245_NonStandardParameter; class H245_H261VideoMode; class H245_H262VideoMode; class H245_H263VideoMode; class H245_IS11172VideoMode; class H245_GenericCapability; class H245_VideoMode : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_VideoMode, PASN_Choice); #endif public: H245_VideoMode(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_h261VideoMode, e_h262VideoMode, e_h263VideoMode, e_is11172VideoMode, e_genericVideoMode }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H261VideoMode &() const; #else operator H245_H261VideoMode &(); operator const H245_H261VideoMode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H262VideoMode &() const; #else operator H245_H262VideoMode &(); operator const H245_H262VideoMode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H263VideoMode &() const; #else operator H245_H263VideoMode &(); operator const H245_H263VideoMode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_IS11172VideoMode &() const; #else operator H245_IS11172VideoMode &(); operator const H245_IS11172VideoMode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_GenericCapability &() const; #else operator H245_GenericCapability &(); operator const H245_GenericCapability &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // IS11172VideoMode // class H245_IS11172VideoMode : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_IS11172VideoMode, PASN_Sequence); #endif public: H245_IS11172VideoMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_videoBitRate, e_vbvBufferSize, e_samplesPerLine, e_linesPerFrame, e_pictureRate, e_luminanceSampleRate }; PASN_Boolean m_constrainedBitstream; PASN_Integer m_videoBitRate; PASN_Integer m_vbvBufferSize; PASN_Integer m_samplesPerLine; PASN_Integer m_linesPerFrame; PASN_Integer m_pictureRate; PASN_Integer m_luminanceSampleRate; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AudioMode // class H245_NonStandardParameter; class H245_AudioMode_g7231; class H245_IS11172AudioMode; class H245_IS13818AudioMode; class H245_G7231AnnexCMode; class H245_GSMAudioCapability; class H245_GenericCapability; class H245_G729Extensions; class H245_VBDMode; class H245_AudioMode : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_AudioMode, PASN_Choice); #endif public: H245_AudioMode(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_g711Alaw64k, e_g711Alaw56k, e_g711Ulaw64k, e_g711Ulaw56k, e_g722_64k, e_g722_56k, e_g722_48k, e_g728, e_g729, e_g729AnnexA, e_g7231, e_is11172AudioMode, e_is13818AudioMode, e_g729wAnnexB, e_g729AnnexAwAnnexB, e_g7231AnnexCMode, e_gsmFullRate, e_gsmHalfRate, e_gsmEnhancedFullRate, e_genericAudioMode, e_g729Extensions, e_vbd }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_AudioMode_g7231 &() const; #else operator H245_AudioMode_g7231 &(); operator const H245_AudioMode_g7231 &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_IS11172AudioMode &() const; #else operator H245_IS11172AudioMode &(); operator const H245_IS11172AudioMode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_IS13818AudioMode &() const; #else operator H245_IS13818AudioMode &(); operator const H245_IS13818AudioMode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_G7231AnnexCMode &() const; #else operator H245_G7231AnnexCMode &(); operator const H245_G7231AnnexCMode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_GSMAudioCapability &() const; #else operator H245_GSMAudioCapability &(); operator const H245_GSMAudioCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_GenericCapability &() const; #else operator H245_GenericCapability &(); operator const H245_GenericCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_G729Extensions &() const; #else operator H245_G729Extensions &(); operator const H245_G729Extensions &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_VBDMode &() const; #else operator H245_VBDMode &(); operator const H245_VBDMode &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // VBDMode // class H245_VBDMode : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_VBDMode, PASN_Sequence); #endif public: H245_VBDMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_AudioMode m_type; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // EncryptionMode // class H245_NonStandardParameter; class H245_EncryptionMode : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_EncryptionMode, PASN_Choice); #endif public: H245_EncryptionMode(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_h233Encryption }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // RoundTripDelayRequest // class H245_RoundTripDelayRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RoundTripDelayRequest, PASN_Sequence); #endif public: H245_RoundTripDelayRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_SequenceNumber m_sequenceNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RoundTripDelayResponse // class H245_RoundTripDelayResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RoundTripDelayResponse, PASN_Sequence); #endif public: H245_RoundTripDelayResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_SequenceNumber m_sequenceNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MaintenanceLoopOffCommand // class H245_MaintenanceLoopOffCommand : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MaintenanceLoopOffCommand, PASN_Sequence); #endif public: H245_MaintenanceLoopOffCommand(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // CommunicationModeRequest // class H245_CommunicationModeRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CommunicationModeRequest, PASN_Sequence); #endif public: H245_CommunicationModeRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // CommunicationModeResponse // class H245_ArrayOf_CommunicationModeTableEntry; class H245_CommunicationModeResponse : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CommunicationModeResponse, PASN_Choice); #endif public: H245_CommunicationModeResponse(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_communicationModeTable }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ArrayOf_CommunicationModeTableEntry &() const; #else operator H245_ArrayOf_CommunicationModeTableEntry &(); operator const H245_ArrayOf_CommunicationModeTableEntry &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ConferenceRequest // class H245_TerminalLabel; class H245_ConferenceRequest_requestTerminalCertificate; class H245_LogicalChannelNumber; class H245_RemoteMCRequest; class H245_ConferenceRequest : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ConferenceRequest, PASN_Choice); #endif public: H245_ConferenceRequest(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_terminalListRequest, e_makeMeChair, e_cancelMakeMeChair, e_dropTerminal, e_requestTerminalID, e_enterH243Password, e_enterH243TerminalID, e_enterH243ConferenceID, e_enterExtensionAddress, e_requestChairTokenOwner, e_requestTerminalCertificate, e_broadcastMyLogicalChannel, e_makeTerminalBroadcaster, e_sendThisSource, e_requestAllTerminalIDs, e_remoteMCRequest }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_TerminalLabel &() const; #else operator H245_TerminalLabel &(); operator const H245_TerminalLabel &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ConferenceRequest_requestTerminalCertificate &() const; #else operator H245_ConferenceRequest_requestTerminalCertificate &(); operator const H245_ConferenceRequest_requestTerminalCertificate &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_LogicalChannelNumber &() const; #else operator H245_LogicalChannelNumber &(); operator const H245_LogicalChannelNumber &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RemoteMCRequest &() const; #else operator H245_RemoteMCRequest &(); operator const H245_RemoteMCRequest &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // CertSelectionCriteria // class H245_Criteria; class H245_CertSelectionCriteria : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CertSelectionCriteria, PASN_Array); #endif public: H245_CertSelectionCriteria(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_Criteria & operator[](PINDEX i) const; PObject * Clone() const; }; // // Criteria // class H245_Criteria : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_Criteria, PASN_Sequence); #endif public: H245_Criteria(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_ObjectId m_field; PASN_OctetString m_value; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // McuNumber // class H245_McuNumber : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_McuNumber, PASN_Integer); #endif public: H245_McuNumber(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H245_McuNumber & operator=(int v); H245_McuNumber & operator=(unsigned v); PObject * Clone() const; }; // // TerminalNumber // class H245_TerminalNumber : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_TerminalNumber, PASN_Integer); #endif public: H245_TerminalNumber(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H245_TerminalNumber & operator=(int v); H245_TerminalNumber & operator=(unsigned v); PObject * Clone() const; }; // // ConferenceResponse // class H245_ConferenceResponse_mCTerminalIDResponse; class H245_ConferenceResponse_terminalIDResponse; class H245_ConferenceResponse_conferenceIDResponse; class H245_ConferenceResponse_passwordResponse; class H245_ArrayOf_TerminalLabel; class H245_ConferenceResponse_makeMeChairResponse; class H245_ConferenceResponse_extensionAddressResponse; class H245_ConferenceResponse_chairTokenOwnerResponse; class H245_ConferenceResponse_terminalCertificateResponse; class H245_ConferenceResponse_broadcastMyLogicalChannelResponse; class H245_ConferenceResponse_makeTerminalBroadcasterResponse; class H245_ConferenceResponse_sendThisSourceResponse; class H245_RequestAllTerminalIDsResponse; class H245_RemoteMCResponse; class H245_ConferenceResponse : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ConferenceResponse, PASN_Choice); #endif public: H245_ConferenceResponse(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_mCTerminalIDResponse, e_terminalIDResponse, e_conferenceIDResponse, e_passwordResponse, e_terminalListResponse, e_videoCommandReject, e_terminalDropReject, e_makeMeChairResponse, e_extensionAddressResponse, e_chairTokenOwnerResponse, e_terminalCertificateResponse, e_broadcastMyLogicalChannelResponse, e_makeTerminalBroadcasterResponse, e_sendThisSourceResponse, e_requestAllTerminalIDsResponse, e_remoteMCResponse }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ConferenceResponse_mCTerminalIDResponse &() const; #else operator H245_ConferenceResponse_mCTerminalIDResponse &(); operator const H245_ConferenceResponse_mCTerminalIDResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ConferenceResponse_terminalIDResponse &() const; #else operator H245_ConferenceResponse_terminalIDResponse &(); operator const H245_ConferenceResponse_terminalIDResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ConferenceResponse_conferenceIDResponse &() const; #else operator H245_ConferenceResponse_conferenceIDResponse &(); operator const H245_ConferenceResponse_conferenceIDResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ConferenceResponse_passwordResponse &() const; #else operator H245_ConferenceResponse_passwordResponse &(); operator const H245_ConferenceResponse_passwordResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ArrayOf_TerminalLabel &() const; #else operator H245_ArrayOf_TerminalLabel &(); operator const H245_ArrayOf_TerminalLabel &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ConferenceResponse_makeMeChairResponse &() const; #else operator H245_ConferenceResponse_makeMeChairResponse &(); operator const H245_ConferenceResponse_makeMeChairResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ConferenceResponse_extensionAddressResponse &() const; #else operator H245_ConferenceResponse_extensionAddressResponse &(); operator const H245_ConferenceResponse_extensionAddressResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ConferenceResponse_chairTokenOwnerResponse &() const; #else operator H245_ConferenceResponse_chairTokenOwnerResponse &(); operator const H245_ConferenceResponse_chairTokenOwnerResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ConferenceResponse_terminalCertificateResponse &() const; #else operator H245_ConferenceResponse_terminalCertificateResponse &(); operator const H245_ConferenceResponse_terminalCertificateResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ConferenceResponse_broadcastMyLogicalChannelResponse &() const; #else operator H245_ConferenceResponse_broadcastMyLogicalChannelResponse &(); operator const H245_ConferenceResponse_broadcastMyLogicalChannelResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ConferenceResponse_makeTerminalBroadcasterResponse &() const; #else operator H245_ConferenceResponse_makeTerminalBroadcasterResponse &(); operator const H245_ConferenceResponse_makeTerminalBroadcasterResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ConferenceResponse_sendThisSourceResponse &() const; #else operator H245_ConferenceResponse_sendThisSourceResponse &(); operator const H245_ConferenceResponse_sendThisSourceResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RequestAllTerminalIDsResponse &() const; #else operator H245_RequestAllTerminalIDsResponse &(); operator const H245_RequestAllTerminalIDsResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RemoteMCResponse &() const; #else operator H245_RemoteMCResponse &(); operator const H245_RemoteMCResponse &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // TerminalID // class H245_TerminalID : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_TerminalID, PASN_OctetString); #endif public: H245_TerminalID(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H245_TerminalID(const char * v); H245_TerminalID(const PString & v); H245_TerminalID(const PBYTEArray & v); H245_TerminalID & operator=(const char * v); H245_TerminalID & operator=(const PString & v); H245_TerminalID & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // ConferenceID // class H245_ConferenceID : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ConferenceID, PASN_OctetString); #endif public: H245_ConferenceID(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H245_ConferenceID(const char * v); H245_ConferenceID(const PString & v); H245_ConferenceID(const PBYTEArray & v); H245_ConferenceID & operator=(const char * v); H245_ConferenceID & operator=(const PString & v); H245_ConferenceID & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // Password // class H245_Password : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_Password, PASN_OctetString); #endif public: H245_Password(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H245_Password(const char * v); H245_Password(const PString & v); H245_Password(const PBYTEArray & v); H245_Password & operator=(const char * v); H245_Password & operator=(const PString & v); H245_Password & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // RemoteMCRequest // class H245_RemoteMCRequest : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RemoteMCRequest, PASN_Choice); #endif public: H245_RemoteMCRequest(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_masterActivate, e_slaveActivate, e_deActivate }; PBoolean CreateObject(); PObject * Clone() const; }; // // RemoteMCResponse // class H245_RemoteMCResponse_reject; class H245_RemoteMCResponse : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RemoteMCResponse, PASN_Choice); #endif public: H245_RemoteMCResponse(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_accept, e_reject }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RemoteMCResponse_reject &() const; #else operator H245_RemoteMCResponse_reject &(); operator const H245_RemoteMCResponse_reject &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // MultilinkRequest // class H245_NonStandardMessage; class H245_MultilinkRequest_callInformation; class H245_MultilinkRequest_addConnection; class H245_MultilinkRequest_removeConnection; class H245_MultilinkRequest_maximumHeaderInterval; class H245_MultilinkRequest : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultilinkRequest, PASN_Choice); #endif public: H245_MultilinkRequest(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_callInformation, e_addConnection, e_removeConnection, e_maximumHeaderInterval }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardMessage &() const; #else operator H245_NonStandardMessage &(); operator const H245_NonStandardMessage &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultilinkRequest_callInformation &() const; #else operator H245_MultilinkRequest_callInformation &(); operator const H245_MultilinkRequest_callInformation &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultilinkRequest_addConnection &() const; #else operator H245_MultilinkRequest_addConnection &(); operator const H245_MultilinkRequest_addConnection &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultilinkRequest_removeConnection &() const; #else operator H245_MultilinkRequest_removeConnection &(); operator const H245_MultilinkRequest_removeConnection &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultilinkRequest_maximumHeaderInterval &() const; #else operator H245_MultilinkRequest_maximumHeaderInterval &(); operator const H245_MultilinkRequest_maximumHeaderInterval &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // MultilinkResponse // class H245_NonStandardMessage; class H245_MultilinkResponse_callInformation; class H245_MultilinkResponse_addConnection; class H245_MultilinkResponse_removeConnection; class H245_MultilinkResponse_maximumHeaderInterval; class H245_MultilinkResponse : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultilinkResponse, PASN_Choice); #endif public: H245_MultilinkResponse(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_callInformation, e_addConnection, e_removeConnection, e_maximumHeaderInterval }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardMessage &() const; #else operator H245_NonStandardMessage &(); operator const H245_NonStandardMessage &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultilinkResponse_callInformation &() const; #else operator H245_MultilinkResponse_callInformation &(); operator const H245_MultilinkResponse_callInformation &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultilinkResponse_addConnection &() const; #else operator H245_MultilinkResponse_addConnection &(); operator const H245_MultilinkResponse_addConnection &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultilinkResponse_removeConnection &() const; #else operator H245_MultilinkResponse_removeConnection &(); operator const H245_MultilinkResponse_removeConnection &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultilinkResponse_maximumHeaderInterval &() const; #else operator H245_MultilinkResponse_maximumHeaderInterval &(); operator const H245_MultilinkResponse_maximumHeaderInterval &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // MultilinkIndication // class H245_NonStandardMessage; class H245_MultilinkIndication_crcDesired; class H245_MultilinkIndication_excessiveError; class H245_MultilinkIndication : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultilinkIndication, PASN_Choice); #endif public: H245_MultilinkIndication(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_crcDesired, e_excessiveError }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardMessage &() const; #else operator H245_NonStandardMessage &(); operator const H245_NonStandardMessage &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultilinkIndication_crcDesired &() const; #else operator H245_MultilinkIndication_crcDesired &(); operator const H245_MultilinkIndication_crcDesired &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultilinkIndication_excessiveError &() const; #else operator H245_MultilinkIndication_excessiveError &(); operator const H245_MultilinkIndication_excessiveError &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // DialingInformation // class H245_NonStandardMessage; class H245_ArrayOf_DialingInformationNumber; class H245_DialingInformation : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DialingInformation, PASN_Choice); #endif public: H245_DialingInformation(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_differential, e_infoNotAvailable }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardMessage &() const; #else operator H245_NonStandardMessage &(); operator const H245_NonStandardMessage &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ArrayOf_DialingInformationNumber &() const; #else operator H245_ArrayOf_DialingInformationNumber &(); operator const H245_ArrayOf_DialingInformationNumber &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // DialingInformationNetworkType // class H245_NonStandardMessage; class H245_DialingInformationNetworkType : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DialingInformationNetworkType, PASN_Choice); #endif public: H245_DialingInformationNetworkType(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_n_isdn, e_gstn, e_mobile }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardMessage &() const; #else operator H245_NonStandardMessage &(); operator const H245_NonStandardMessage &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ConnectionIdentifier // class H245_ConnectionIdentifier : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ConnectionIdentifier, PASN_Sequence); #endif public: H245_ConnectionIdentifier(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_channelTag; PASN_Integer m_sequenceNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MaximumBitRate // class H245_MaximumBitRate : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MaximumBitRate, PASN_Integer); #endif public: H245_MaximumBitRate(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H245_MaximumBitRate & operator=(int v); H245_MaximumBitRate & operator=(unsigned v); PObject * Clone() const; }; // // LogicalChannelRateRequest // class H245_LogicalChannelRateRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_LogicalChannelRateRequest, PASN_Sequence); #endif public: H245_LogicalChannelRateRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_SequenceNumber m_sequenceNumber; H245_LogicalChannelNumber m_logicalChannelNumber; H245_MaximumBitRate m_maximumBitRate; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // LogicalChannelRateAcknowledge // class H245_LogicalChannelRateAcknowledge : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_LogicalChannelRateAcknowledge, PASN_Sequence); #endif public: H245_LogicalChannelRateAcknowledge(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_SequenceNumber m_sequenceNumber; H245_LogicalChannelNumber m_logicalChannelNumber; H245_MaximumBitRate m_maximumBitRate; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // LogicalChannelRateRejectReason // class H245_LogicalChannelRateRejectReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_LogicalChannelRateRejectReason, PASN_Choice); #endif public: H245_LogicalChannelRateRejectReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_undefinedReason, e_insufficientResources }; PBoolean CreateObject(); PObject * Clone() const; }; // // LogicalChannelRateRelease // class H245_LogicalChannelRateRelease : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_LogicalChannelRateRelease, PASN_Sequence); #endif public: H245_LogicalChannelRateRelease(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // SendTerminalCapabilitySet // class H245_SendTerminalCapabilitySet_specificRequest; class H245_SendTerminalCapabilitySet : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_SendTerminalCapabilitySet, PASN_Choice); #endif public: H245_SendTerminalCapabilitySet(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_specificRequest, e_genericRequest }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_SendTerminalCapabilitySet_specificRequest &() const; #else operator H245_SendTerminalCapabilitySet_specificRequest &(); operator const H245_SendTerminalCapabilitySet_specificRequest &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // EncryptionCommand // class H245_EncryptionCommand_encryptionAlgorithmID; class H245_EncryptionCommand : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_EncryptionCommand, PASN_Choice); #endif public: H245_EncryptionCommand(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_encryptionSE, e_encryptionIVRequest, e_encryptionAlgorithmID }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_EncryptionCommand_encryptionAlgorithmID &() const; #else operator H245_EncryptionCommand_encryptionAlgorithmID &(); operator const H245_EncryptionCommand_encryptionAlgorithmID &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // EndSessionCommand // class H245_NonStandardParameter; class H245_EndSessionCommand_gstnOptions; class H245_EndSessionCommand_isdnOptions; class H245_ArrayOf_GenericInformation; class H245_EndSessionCommand : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_EndSessionCommand, PASN_Choice); #endif public: H245_EndSessionCommand(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_disconnect, e_gstnOptions, e_isdnOptions, e_genericInformation }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_EndSessionCommand_gstnOptions &() const; #else operator H245_EndSessionCommand_gstnOptions &(); operator const H245_EndSessionCommand_gstnOptions &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_EndSessionCommand_isdnOptions &() const; #else operator H245_EndSessionCommand_isdnOptions &(); operator const H245_EndSessionCommand_isdnOptions &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ArrayOf_GenericInformation &() const; #else operator H245_ArrayOf_GenericInformation &(); operator const H245_ArrayOf_GenericInformation &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ConferenceCommand // class H245_LogicalChannelNumber; class H245_TerminalLabel; class H245_SubstituteConferenceIDCommand; class H245_ConferenceCommand : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ConferenceCommand, PASN_Choice); #endif public: H245_ConferenceCommand(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_broadcastMyLogicalChannel, e_cancelBroadcastMyLogicalChannel, e_makeTerminalBroadcaster, e_cancelMakeTerminalBroadcaster, e_sendThisSource, e_cancelSendThisSource, e_dropConference, e_substituteConferenceIDCommand }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_LogicalChannelNumber &() const; #else operator H245_LogicalChannelNumber &(); operator const H245_LogicalChannelNumber &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_TerminalLabel &() const; #else operator H245_TerminalLabel &(); operator const H245_TerminalLabel &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_SubstituteConferenceIDCommand &() const; #else operator H245_SubstituteConferenceIDCommand &(); operator const H245_SubstituteConferenceIDCommand &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // SubstituteConferenceIDCommand // class H245_SubstituteConferenceIDCommand : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_SubstituteConferenceIDCommand, PASN_Sequence); #endif public: H245_SubstituteConferenceIDCommand(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_OctetString m_conferenceIdentifier; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // EncryptionUpdateDirection // class H245_EncryptionUpdateDirection : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_EncryptionUpdateDirection, PASN_Choice); #endif public: H245_EncryptionUpdateDirection(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_masterToSlave, e_slaveToMaster }; PBoolean CreateObject(); PObject * Clone() const; }; // // KeyProtectionMethod // class H245_KeyProtectionMethod : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_KeyProtectionMethod, PASN_Sequence); #endif public: H245_KeyProtectionMethod(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_secureChannel; PASN_Boolean m_sharedSecret; PASN_Boolean m_certProtectedKey; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // EncryptionUpdateRequest // class H245_EncryptionUpdateRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_EncryptionUpdateRequest, PASN_Sequence); #endif public: H245_EncryptionUpdateRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_keyProtectionMethod, e_synchFlag }; H245_KeyProtectionMethod m_keyProtectionMethod; PASN_Integer m_synchFlag; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PictureReference // class H245_PictureReference : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_PictureReference, PASN_Choice); #endif public: H245_PictureReference(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_pictureNumber, e_longTermPictureIndex }; PBoolean CreateObject(); PObject * Clone() const; }; // // H223MultiplexReconfiguration // class H245_H223MultiplexReconfiguration_h223ModeChange; class H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag; class H245_H223MultiplexReconfiguration : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223MultiplexReconfiguration, PASN_Choice); #endif public: H245_H223MultiplexReconfiguration(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_h223ModeChange, e_h223AnnexADoubleFlag }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H223MultiplexReconfiguration_h223ModeChange &() const; #else operator H245_H223MultiplexReconfiguration_h223ModeChange &(); operator const H245_H223MultiplexReconfiguration_h223ModeChange &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag &() const; #else operator H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag &(); operator const H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // FunctionNotUnderstood // class H245_RequestMessage; class H245_ResponseMessage; class H245_CommandMessage; class H245_FunctionNotUnderstood : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_FunctionNotUnderstood, PASN_Choice); #endif public: H245_FunctionNotUnderstood(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_request, e_response, e_command }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RequestMessage &() const; #else operator H245_RequestMessage &(); operator const H245_RequestMessage &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ResponseMessage &() const; #else operator H245_ResponseMessage &(); operator const H245_ResponseMessage &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_CommandMessage &() const; #else operator H245_CommandMessage &(); operator const H245_CommandMessage &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ConferenceIndication // class H245_TerminalLabel; class H245_TerminalYouAreSeeingInSubPictureNumber; class H245_VideoIndicateCompose; class H245_ConferenceIndication : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ConferenceIndication, PASN_Choice); #endif public: H245_ConferenceIndication(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_sbeNumber, e_terminalNumberAssign, e_terminalJoinedConference, e_terminalLeftConference, e_seenByAtLeastOneOther, e_cancelSeenByAtLeastOneOther, e_seenByAll, e_cancelSeenByAll, e_terminalYouAreSeeing, e_requestForFloor, e_withdrawChairToken, e_floorRequested, e_terminalYouAreSeeingInSubPictureNumber, e_videoIndicateCompose }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_TerminalLabel &() const; #else operator H245_TerminalLabel &(); operator const H245_TerminalLabel &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_TerminalYouAreSeeingInSubPictureNumber &() const; #else operator H245_TerminalYouAreSeeingInSubPictureNumber &(); operator const H245_TerminalYouAreSeeingInSubPictureNumber &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_VideoIndicateCompose &() const; #else operator H245_VideoIndicateCompose &(); operator const H245_VideoIndicateCompose &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // TerminalYouAreSeeingInSubPictureNumber // class H245_TerminalYouAreSeeingInSubPictureNumber : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_TerminalYouAreSeeingInSubPictureNumber, PASN_Sequence); #endif public: H245_TerminalYouAreSeeingInSubPictureNumber(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_TerminalNumber m_terminalNumber; PASN_Integer m_subPictureNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // VideoIndicateCompose // class H245_VideoIndicateCompose : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_VideoIndicateCompose, PASN_Sequence); #endif public: H245_VideoIndicateCompose(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_compositionNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H223SkewIndication // class H245_H223SkewIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223SkewIndication, PASN_Sequence); #endif public: H245_H223SkewIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_LogicalChannelNumber m_logicalChannelNumber1; H245_LogicalChannelNumber m_logicalChannelNumber2; PASN_Integer m_skew; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H2250MaximumSkewIndication // class H245_H2250MaximumSkewIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H2250MaximumSkewIndication, PASN_Sequence); #endif public: H245_H2250MaximumSkewIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_LogicalChannelNumber m_logicalChannelNumber1; H245_LogicalChannelNumber m_logicalChannelNumber2; PASN_Integer m_maximumSkew; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MCLocationIndication // class H245_MCLocationIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MCLocationIndication, PASN_Sequence); #endif public: H245_MCLocationIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_TransportAddress m_signalAddress; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // VendorIdentification // class H245_VendorIdentification : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_VendorIdentification, PASN_Sequence); #endif public: H245_VendorIdentification(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_productNumber, e_versionNumber }; H245_NonStandardIdentifier m_vendor; PASN_OctetString m_productNumber; PASN_OctetString m_versionNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IV8 // class H245_IV8 : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_IV8, PASN_OctetString); #endif public: H245_IV8(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H245_IV8(const char * v); H245_IV8(const PString & v); H245_IV8(const PBYTEArray & v); H245_IV8 & operator=(const char * v); H245_IV8 & operator=(const PString & v); H245_IV8 & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // IV16 // class H245_IV16 : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_IV16, PASN_OctetString); #endif public: H245_IV16(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H245_IV16(const char * v); H245_IV16(const PString & v); H245_IV16(const PBYTEArray & v); H245_IV16 & operator=(const char * v); H245_IV16 & operator=(const PString & v); H245_IV16 & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // Params // class H245_Params : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_Params, PASN_Sequence); #endif public: H245_Params(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_iv8, e_iv16, e_iv }; H245_IV8 m_iv8; H245_IV16 m_iv16; PASN_OctetString m_iv; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UserInputIndication // class H245_NonStandardParameter; class H245_UserInputIndication_userInputSupportIndication; class H245_UserInputIndication_signal; class H245_UserInputIndication_signalUpdate; class H245_UserInputIndication_extendedAlphanumeric; class H245_UserInputIndication_encryptedAlphanumeric; class H245_ArrayOf_GenericInformation; class H245_UserInputIndication : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_UserInputIndication, PASN_Choice); #endif public: H245_UserInputIndication(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_alphanumeric, e_userInputSupportIndication, e_signal, e_signalUpdate, e_extendedAlphanumeric, e_encryptedAlphanumeric, e_genericInformation }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_UserInputIndication_userInputSupportIndication &() const; #else operator H245_UserInputIndication_userInputSupportIndication &(); operator const H245_UserInputIndication_userInputSupportIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_UserInputIndication_signal &() const; #else operator H245_UserInputIndication_signal &(); operator const H245_UserInputIndication_signal &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_UserInputIndication_signalUpdate &() const; #else operator H245_UserInputIndication_signalUpdate &(); operator const H245_UserInputIndication_signalUpdate &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_UserInputIndication_extendedAlphanumeric &() const; #else operator H245_UserInputIndication_extendedAlphanumeric &(); operator const H245_UserInputIndication_extendedAlphanumeric &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_UserInputIndication_encryptedAlphanumeric &() const; #else operator H245_UserInputIndication_encryptedAlphanumeric &(); operator const H245_UserInputIndication_encryptedAlphanumeric &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ArrayOf_GenericInformation &() const; #else operator H245_ArrayOf_GenericInformation &(); operator const H245_ArrayOf_GenericInformation &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // MobileMultilinkReconfigurationIndication // class H245_MobileMultilinkReconfigurationIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MobileMultilinkReconfigurationIndication, PASN_Sequence); #endif public: H245_MobileMultilinkReconfigurationIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_sampleSize; PASN_Integer m_samplesPerFrame; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_GenericParameter // class H245_GenericParameter; class H245_ArrayOf_GenericParameter : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_GenericParameter, PASN_Array); #endif public: H245_ArrayOf_GenericParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_GenericParameter & operator[](PINDEX i) const; PObject * Clone() const; }; // // NonStandardIdentifier_h221NonStandard // class H245_NonStandardIdentifier_h221NonStandard : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NonStandardIdentifier_h221NonStandard, PASN_Sequence); #endif public: H245_NonStandardIdentifier_h221NonStandard(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_t35CountryCode; PASN_Integer m_t35Extension; PASN_Integer m_manufacturerCode; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MasterSlaveDeterminationAck_decision // class H245_MasterSlaveDeterminationAck_decision : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MasterSlaveDeterminationAck_decision, PASN_Choice); #endif public: H245_MasterSlaveDeterminationAck_decision(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_master, e_slave }; PBoolean CreateObject(); PObject * Clone() const; }; // // MasterSlaveDeterminationReject_cause // class H245_MasterSlaveDeterminationReject_cause : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MasterSlaveDeterminationReject_cause, PASN_Choice); #endif public: H245_MasterSlaveDeterminationReject_cause(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_identicalNumbers }; PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_CapabilityTableEntry // class H245_CapabilityTableEntry; class H245_ArrayOf_CapabilityTableEntry : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_CapabilityTableEntry, PASN_Array); #endif public: H245_ArrayOf_CapabilityTableEntry(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_CapabilityTableEntry & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_CapabilityDescriptor // class H245_CapabilityDescriptor; class H245_ArrayOf_CapabilityDescriptor : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_CapabilityDescriptor, PASN_Array); #endif public: H245_ArrayOf_CapabilityDescriptor(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_CapabilityDescriptor & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_GenericInformation // class H245_GenericInformation; class H245_ArrayOf_GenericInformation : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_GenericInformation, PASN_Array); #endif public: H245_ArrayOf_GenericInformation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_GenericInformation & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_AlternativeCapabilitySet // class H245_AlternativeCapabilitySet; class H245_ArrayOf_AlternativeCapabilitySet : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_AlternativeCapabilitySet, PASN_Array); #endif public: H245_ArrayOf_AlternativeCapabilitySet(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_AlternativeCapabilitySet & operator[](PINDEX i) const; PObject * Clone() const; }; // // TerminalCapabilitySetReject_cause // class H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded; class H245_TerminalCapabilitySetReject_cause : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_TerminalCapabilitySetReject_cause, PASN_Choice); #endif public: H245_TerminalCapabilitySetReject_cause(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_unspecified, e_undefinedTableEntryUsed, e_descriptorCapacityExceeded, e_tableEntryCapacityExceeded }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded &() const; #else operator H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded &(); operator const H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // Capability_h233EncryptionReceiveCapability // class H245_Capability_h233EncryptionReceiveCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_Capability_h233EncryptionReceiveCapability, PASN_Sequence); #endif public: H245_Capability_h233EncryptionReceiveCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_h233IVResponseTime; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_VCCapability // class H245_VCCapability; class H245_ArrayOf_VCCapability : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_VCCapability, PASN_Array); #endif public: H245_ArrayOf_VCCapability(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_VCCapability & operator[](PINDEX i) const; PObject * Clone() const; }; // // VCCapability_aal1 // class H245_VCCapability_aal1 : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_VCCapability_aal1, PASN_Sequence); #endif public: H245_VCCapability_aal1(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_nullClockRecovery; PASN_Boolean m_srtsClockRecovery; PASN_Boolean m_adaptiveClockRecovery; PASN_Boolean m_nullErrorCorrection; PASN_Boolean m_longInterleaver; PASN_Boolean m_shortInterleaver; PASN_Boolean m_errorCorrectionOnly; PASN_Boolean m_structuredDataTransfer; PASN_Boolean m_partiallyFilledCells; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // VCCapability_aal5 // class H245_VCCapability_aal5 : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_VCCapability_aal5, PASN_Sequence); #endif public: H245_VCCapability_aal5(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_forwardMaximumSDUSize; PASN_Integer m_backwardMaximumSDUSize; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H223Capability_h223MultiplexTableCapability // class H245_H223Capability_h223MultiplexTableCapability_enhanced; class H245_H223Capability_h223MultiplexTableCapability : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223Capability_h223MultiplexTableCapability, PASN_Choice); #endif public: H245_H223Capability_h223MultiplexTableCapability(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_basic, e_enhanced }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H223Capability_h223MultiplexTableCapability_enhanced &() const; #else operator H245_H223Capability_h223MultiplexTableCapability_enhanced &(); operator const H245_H223Capability_h223MultiplexTableCapability_enhanced &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // H223Capability_mobileOperationTransmitCapability // class H245_H223Capability_mobileOperationTransmitCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223Capability_mobileOperationTransmitCapability, PASN_Sequence); #endif public: H245_H223Capability_mobileOperationTransmitCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_modeChangeCapability; PASN_Boolean m_h223AnnexA; PASN_Boolean m_h223AnnexADoubleFlag; PASN_Boolean m_h223AnnexB; PASN_Boolean m_h223AnnexBwithHeader; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H223Capability_mobileMultilinkFrameCapability // class H245_H223Capability_mobileMultilinkFrameCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223Capability_mobileMultilinkFrameCapability, PASN_Sequence); #endif public: H245_H223Capability_mobileMultilinkFrameCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_maximumSampleSize; PASN_Integer m_maximumPayloadLength; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H2250Capability_mcCapability // class H245_H2250Capability_mcCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H2250Capability_mcCapability, PASN_Sequence); #endif public: H245_H2250Capability_mcCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_centralizedConferenceMC; PASN_Boolean m_decentralizedConferenceMC; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_RedundancyEncodingCapability // class H245_RedundancyEncodingCapability; class H245_ArrayOf_RedundancyEncodingCapability : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_RedundancyEncodingCapability, PASN_Array); #endif public: H245_ArrayOf_RedundancyEncodingCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_RedundancyEncodingCapability & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_RTPPayloadType // class H245_RTPPayloadType; class H245_ArrayOf_RTPPayloadType : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_RTPPayloadType, PASN_Array); #endif public: H245_ArrayOf_RTPPayloadType(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_RTPPayloadType & operator[](PINDEX i) const; PObject * Clone() const; }; // // MediaTransportType_atm-AAL5-compressed // class H245_MediaTransportType_atm_AAL5_compressed : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MediaTransportType_atm_AAL5_compressed, PASN_Sequence); #endif public: H245_MediaTransportType_atm_AAL5_compressed(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_variable_delta; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_QOSCapability // class H245_QOSCapability; class H245_ArrayOf_QOSCapability : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_QOSCapability, PASN_Array); #endif public: H245_ArrayOf_QOSCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_QOSCapability & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_MediaChannelCapability // class H245_MediaChannelCapability; class H245_ArrayOf_MediaChannelCapability : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_MediaChannelCapability, PASN_Array); #endif public: H245_ArrayOf_MediaChannelCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_MediaChannelCapability & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_CapabilityTableEntryNumber // class H245_CapabilityTableEntryNumber; class H245_ArrayOf_CapabilityTableEntryNumber : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_CapabilityTableEntryNumber, PASN_Array); #endif public: H245_ArrayOf_CapabilityTableEntryNumber(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_CapabilityTableEntryNumber & operator[](PINDEX i) const; PObject * Clone() const; }; // // RTPH263VideoRedundancyEncoding_frameToThreadMapping // class H245_ArrayOf_RTPH263VideoRedundancyFrameMapping; class H245_RTPH263VideoRedundancyEncoding_frameToThreadMapping : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RTPH263VideoRedundancyEncoding_frameToThreadMapping, PASN_Choice); #endif public: H245_RTPH263VideoRedundancyEncoding_frameToThreadMapping(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_roundrobin, e_custom }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ArrayOf_RTPH263VideoRedundancyFrameMapping &() const; #else operator H245_ArrayOf_RTPH263VideoRedundancyFrameMapping &(); operator const H245_ArrayOf_RTPH263VideoRedundancyFrameMapping &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // RTPH263VideoRedundancyEncoding_containedThreads // class H245_RTPH263VideoRedundancyEncoding_containedThreads : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RTPH263VideoRedundancyEncoding_containedThreads, PASN_Array); #endif public: H245_RTPH263VideoRedundancyEncoding_containedThreads(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; PASN_Integer & operator[](PINDEX i) const; PObject * Clone() const; }; // // RTPH263VideoRedundancyFrameMapping_frameSequence // class H245_RTPH263VideoRedundancyFrameMapping_frameSequence : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RTPH263VideoRedundancyFrameMapping_frameSequence, PASN_Array); #endif public: H245_RTPH263VideoRedundancyFrameMapping_frameSequence(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; PASN_Integer & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_MediaDistributionCapability // class H245_MediaDistributionCapability; class H245_ArrayOf_MediaDistributionCapability : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_MediaDistributionCapability, PASN_Array); #endif public: H245_ArrayOf_MediaDistributionCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_MediaDistributionCapability & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_DataApplicationCapability // class H245_DataApplicationCapability; class H245_ArrayOf_DataApplicationCapability : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_DataApplicationCapability, PASN_Array); #endif public: H245_ArrayOf_DataApplicationCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_DataApplicationCapability & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_VideoCapability // class H245_VideoCapability; class H245_ArrayOf_VideoCapability : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_VideoCapability, PASN_Array); #endif public: H245_ArrayOf_VideoCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_VideoCapability & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_GenericCapability // class H245_GenericCapability; class H245_ArrayOf_GenericCapability : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_GenericCapability, PASN_Array); #endif public: H245_ArrayOf_GenericCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_GenericCapability & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_EnhancementOptions // class H245_EnhancementOptions; class H245_ArrayOf_EnhancementOptions : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_EnhancementOptions, PASN_Array); #endif public: H245_ArrayOf_EnhancementOptions(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_EnhancementOptions & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_BEnhancementParameters // class H245_BEnhancementParameters; class H245_ArrayOf_BEnhancementParameters : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_BEnhancementParameters, PASN_Array); #endif public: H245_ArrayOf_BEnhancementParameters(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_BEnhancementParameters & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_CustomPictureClockFrequency // class H245_CustomPictureClockFrequency; class H245_ArrayOf_CustomPictureClockFrequency : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_CustomPictureClockFrequency, PASN_Array); #endif public: H245_ArrayOf_CustomPictureClockFrequency(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_CustomPictureClockFrequency & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_CustomPictureFormat // class H245_CustomPictureFormat; class H245_ArrayOf_CustomPictureFormat : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_CustomPictureFormat, PASN_Array); #endif public: H245_ArrayOf_CustomPictureFormat(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_CustomPictureFormat & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_H263VideoModeCombos // class H245_H263VideoModeCombos; class H245_ArrayOf_H263VideoModeCombos : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_H263VideoModeCombos, PASN_Array); #endif public: H245_ArrayOf_H263VideoModeCombos(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_H263VideoModeCombos & operator[](PINDEX i) const; PObject * Clone() const; }; // // RefPictureSelection_additionalPictureMemory // class H245_RefPictureSelection_additionalPictureMemory : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RefPictureSelection_additionalPictureMemory, PASN_Sequence); #endif public: H245_RefPictureSelection_additionalPictureMemory(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_sqcifAdditionalPictureMemory, e_qcifAdditionalPictureMemory, e_cifAdditionalPictureMemory, e_cif4AdditionalPictureMemory, e_cif16AdditionalPictureMemory, e_bigCpfAdditionalPictureMemory }; PASN_Integer m_sqcifAdditionalPictureMemory; PASN_Integer m_qcifAdditionalPictureMemory; PASN_Integer m_cifAdditionalPictureMemory; PASN_Integer m_cif4AdditionalPictureMemory; PASN_Integer m_cif16AdditionalPictureMemory; PASN_Integer m_bigCpfAdditionalPictureMemory; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RefPictureSelection_videoBackChannelSend // class H245_RefPictureSelection_videoBackChannelSend : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RefPictureSelection_videoBackChannelSend, PASN_Choice); #endif public: H245_RefPictureSelection_videoBackChannelSend(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_none, e_ackMessageOnly, e_nackMessageOnly, e_ackOrNackMessageOnly, e_ackAndNackMessage }; PBoolean CreateObject(); PObject * Clone() const; }; // // CustomPictureFormat_pixelAspectInformation // class H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode; class H245_CustomPictureFormat_pixelAspectInformation_extendedPAR; class H245_CustomPictureFormat_pixelAspectInformation : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CustomPictureFormat_pixelAspectInformation, PASN_Choice); #endif public: H245_CustomPictureFormat_pixelAspectInformation(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_anyPixelAspectRatio, e_pixelAspectCode, e_extendedPAR }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode &() const; #else operator H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode &(); operator const H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_CustomPictureFormat_pixelAspectInformation_extendedPAR &() const; #else operator H245_CustomPictureFormat_pixelAspectInformation_extendedPAR &(); operator const H245_CustomPictureFormat_pixelAspectInformation_extendedPAR &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_H263ModeComboFlags // class H245_H263ModeComboFlags; class H245_ArrayOf_H263ModeComboFlags : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_H263ModeComboFlags, PASN_Array); #endif public: H245_ArrayOf_H263ModeComboFlags(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_H263ModeComboFlags & operator[](PINDEX i) const; PObject * Clone() const; }; // // AudioCapability_g7231 // class H245_AudioCapability_g7231 : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_AudioCapability_g7231, PASN_Sequence); #endif public: H245_AudioCapability_g7231(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_maxAl_sduAudioFrames; PASN_Boolean m_silenceSuppression; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // G7231AnnexCCapability_g723AnnexCAudioMode // class H245_G7231AnnexCCapability_g723AnnexCAudioMode : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_G7231AnnexCCapability_g723AnnexCAudioMode, PASN_Sequence); #endif public: H245_G7231AnnexCCapability_g723AnnexCAudioMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_highRateMode0; PASN_Integer m_highRateMode1; PASN_Integer m_lowRateMode0; PASN_Integer m_lowRateMode1; PASN_Integer m_sidMode0; PASN_Integer m_sidMode1; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DataApplicationCapability_application // class H245_NonStandardParameter; class H245_DataProtocolCapability; class H245_DataApplicationCapability_application_t84; class H245_DataApplicationCapability_application_nlpid; class H245_DataApplicationCapability_application_t38fax; class H245_GenericCapability; class H245_DataApplicationCapability_application : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DataApplicationCapability_application, PASN_Choice); #endif public: H245_DataApplicationCapability_application(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_t120, e_dsm_cc, e_userData, e_t84, e_t434, e_h224, e_nlpid, e_dsvdControl, e_h222DataPartitioning, e_t30fax, e_t140, e_t38fax, e_genericDataCapability }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DataProtocolCapability &() const; #else operator H245_DataProtocolCapability &(); operator const H245_DataProtocolCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DataApplicationCapability_application_t84 &() const; #else operator H245_DataApplicationCapability_application_t84 &(); operator const H245_DataApplicationCapability_application_t84 &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DataApplicationCapability_application_nlpid &() const; #else operator H245_DataApplicationCapability_application_nlpid &(); operator const H245_DataApplicationCapability_application_nlpid &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DataApplicationCapability_application_t38fax &() const; #else operator H245_DataApplicationCapability_application_t38fax &(); operator const H245_DataApplicationCapability_application_t38fax &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_GenericCapability &() const; #else operator H245_GenericCapability &(); operator const H245_GenericCapability &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // DataProtocolCapability_v76wCompression // class H245_CompressionType; class H245_DataProtocolCapability_v76wCompression : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DataProtocolCapability_v76wCompression, PASN_Choice); #endif public: H245_DataProtocolCapability_v76wCompression(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_transmitCompression, e_receiveCompression, e_transmitAndReceiveCompression }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_CompressionType &() const; #else operator H245_CompressionType &(); operator const H245_CompressionType &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // T84Profile_t84Restricted // class H245_T84Profile_t84Restricted : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_T84Profile_t84Restricted, PASN_Sequence); #endif public: H245_T84Profile_t84Restricted(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_qcif; PASN_Boolean m_cif; PASN_Boolean m_ccir601Seq; PASN_Boolean m_ccir601Prog; PASN_Boolean m_hdtvSeq; PASN_Boolean m_hdtvProg; PASN_Boolean m_g3FacsMH200x100; PASN_Boolean m_g3FacsMH200x200; PASN_Boolean m_g4FacsMMR200x100; PASN_Boolean m_g4FacsMMR200x200; PASN_Boolean m_jbig200x200Seq; PASN_Boolean m_jbig200x200Prog; PASN_Boolean m_jbig300x300Seq; PASN_Boolean m_jbig300x300Prog; PASN_Boolean m_digPhotoLow; PASN_Boolean m_digPhotoMedSeq; PASN_Boolean m_digPhotoMedProg; PASN_Boolean m_digPhotoHighSeq; PASN_Boolean m_digPhotoHighProg; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // T38FaxUdpOptions_t38FaxUdpEC // class H245_T38FaxUdpOptions_t38FaxUdpEC : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_T38FaxUdpOptions_t38FaxUdpEC, PASN_Choice); #endif public: H245_T38FaxUdpOptions_t38FaxUdpEC(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_t38UDPFEC, e_t38UDPRedundancy }; PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_NonStandardParameter // class H245_NonStandardParameter; class H245_ArrayOf_NonStandardParameter : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_NonStandardParameter, PASN_Array); #endif public: H245_ArrayOf_NonStandardParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_NonStandardParameter & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_ParameterIdentifier // class H245_ParameterIdentifier; class H245_ArrayOf_ParameterIdentifier : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_ParameterIdentifier, PASN_Array); #endif public: H245_ArrayOf_ParameterIdentifier(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_ParameterIdentifier & operator[](PINDEX i) const; PObject * Clone() const; }; // // FECCapability_rfc2733Format // class H245_MaxRedundancy; class H245_FECCapability_rfc2733Format : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_FECCapability_rfc2733Format, PASN_Choice); #endif public: H245_FECCapability_rfc2733Format(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_rfc2733rfc2198, e_rfc2733sameport, e_rfc2733diffport }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MaxRedundancy &() const; #else operator H245_MaxRedundancy &(); operator const H245_MaxRedundancy &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // NetworkAccessParameters_distribution // class H245_NetworkAccessParameters_distribution : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NetworkAccessParameters_distribution, PASN_Choice); #endif public: H245_NetworkAccessParameters_distribution(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_unicast, e_multicast }; PBoolean CreateObject(); PObject * Clone() const; }; // // NetworkAccessParameters_networkAddress // class H245_Q2931Address; class H245_TransportAddress; class H245_NetworkAccessParameters_networkAddress : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NetworkAccessParameters_networkAddress, PASN_Choice); #endif public: H245_NetworkAccessParameters_networkAddress(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_q2931Address, e_e164Address, e_localAreaAddress }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_Q2931Address &() const; #else operator H245_Q2931Address &(); operator const H245_Q2931Address &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_TransportAddress &() const; #else operator H245_TransportAddress &(); operator const H245_TransportAddress &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // NetworkAccessParameters_t120SetupProcedure // class H245_NetworkAccessParameters_t120SetupProcedure : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NetworkAccessParameters_t120SetupProcedure, PASN_Choice); #endif public: H245_NetworkAccessParameters_t120SetupProcedure(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_originateCall, e_waitForCall, e_issueQuery }; PBoolean CreateObject(); PObject * Clone() const; }; // // Q2931Address_address // class H245_Q2931Address_address : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_Q2931Address_address, PASN_Choice); #endif public: H245_Q2931Address_address(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_internationalNumber, e_nsapAddress }; PBoolean CreateObject(); PObject * Clone() const; }; // // H235Media_mediaType // class H245_NonStandardParameter; class H245_VideoCapability; class H245_AudioCapability; class H245_DataApplicationCapability; class H245_RedundancyEncoding; class H245_MultiplePayloadStream; class H245_DepFECData; class H245_FECData; class H245_H235Media_mediaType : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H235Media_mediaType, PASN_Choice); #endif public: H245_H235Media_mediaType(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_videoData, e_audioData, e_data, e_redundancyEncoding, e_multiplePayloadStream, e_depFec, e_fec }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_VideoCapability &() const; #else operator H245_VideoCapability &(); operator const H245_VideoCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_AudioCapability &() const; #else operator H245_AudioCapability &(); operator const H245_AudioCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DataApplicationCapability &() const; #else operator H245_DataApplicationCapability &(); operator const H245_DataApplicationCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RedundancyEncoding &() const; #else operator H245_RedundancyEncoding &(); operator const H245_RedundancyEncoding &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultiplePayloadStream &() const; #else operator H245_MultiplePayloadStream &(); operator const H245_MultiplePayloadStream &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DepFECData &() const; #else operator H245_DepFECData &(); operator const H245_DepFECData &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_FECData &() const; #else operator H245_FECData &(); operator const H245_FECData &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // H223LogicalChannelParameters_adaptationLayerType // class H245_NonStandardParameter; class H245_H223LogicalChannelParameters_adaptationLayerType_al3; class H245_H223AL1MParameters; class H245_H223AL2MParameters; class H245_H223AL3MParameters; class H245_H223LogicalChannelParameters_adaptationLayerType : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223LogicalChannelParameters_adaptationLayerType, PASN_Choice); #endif public: H245_H223LogicalChannelParameters_adaptationLayerType(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_al1Framed, e_al1NotFramed, e_al2WithoutSequenceNumbers, e_al2WithSequenceNumbers, e_al3, e_al1M, e_al2M, e_al3M }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H223LogicalChannelParameters_adaptationLayerType_al3 &() const; #else operator H245_H223LogicalChannelParameters_adaptationLayerType_al3 &(); operator const H245_H223LogicalChannelParameters_adaptationLayerType_al3 &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H223AL1MParameters &() const; #else operator H245_H223AL1MParameters &(); operator const H245_H223AL1MParameters &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H223AL2MParameters &() const; #else operator H245_H223AL2MParameters &(); operator const H245_H223AL2MParameters &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H223AL3MParameters &() const; #else operator H245_H223AL3MParameters &(); operator const H245_H223AL3MParameters &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // H223AL1MParameters_transferMode // class H245_H223AL1MParameters_transferMode : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223AL1MParameters_transferMode, PASN_Choice); #endif public: H245_H223AL1MParameters_transferMode(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_framed, e_unframed }; PBoolean CreateObject(); PObject * Clone() const; }; // // H223AL1MParameters_headerFEC // class H245_H223AL1MParameters_headerFEC : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223AL1MParameters_headerFEC, PASN_Choice); #endif public: H245_H223AL1MParameters_headerFEC(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_sebch16_7, e_golay24_12 }; PBoolean CreateObject(); PObject * Clone() const; }; // // H223AL1MParameters_crcLength // class H245_H223AL1MParameters_crcLength : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223AL1MParameters_crcLength, PASN_Choice); #endif public: H245_H223AL1MParameters_crcLength(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_crc4bit, e_crc12bit, e_crc20bit, e_crc28bit, e_crc8bit, e_crc16bit, e_crc32bit, e_crcNotUsed }; PBoolean CreateObject(); PObject * Clone() const; }; // // H223AL1MParameters_arqType // class H245_H223AnnexCArqParameters; class H245_H223AL1MParameters_arqType : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223AL1MParameters_arqType, PASN_Choice); #endif public: H245_H223AL1MParameters_arqType(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_noArq, e_typeIArq, e_typeIIArq }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H223AnnexCArqParameters &() const; #else operator H245_H223AnnexCArqParameters &(); operator const H245_H223AnnexCArqParameters &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // H223AL2MParameters_headerFEC // class H245_H223AL2MParameters_headerFEC : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223AL2MParameters_headerFEC, PASN_Choice); #endif public: H245_H223AL2MParameters_headerFEC(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_sebch16_5, e_golay24_12 }; PBoolean CreateObject(); PObject * Clone() const; }; // // H223AL3MParameters_headerFormat // class H245_H223AL3MParameters_headerFormat : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223AL3MParameters_headerFormat, PASN_Choice); #endif public: H245_H223AL3MParameters_headerFormat(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_sebch16_7, e_golay24_12 }; PBoolean CreateObject(); PObject * Clone() const; }; // // H223AL3MParameters_crcLength // class H245_H223AL3MParameters_crcLength : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223AL3MParameters_crcLength, PASN_Choice); #endif public: H245_H223AL3MParameters_crcLength(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_crc4bit, e_crc12bit, e_crc20bit, e_crc28bit, e_crc8bit, e_crc16bit, e_crc32bit, e_crcNotUsed }; PBoolean CreateObject(); PObject * Clone() const; }; // // H223AL3MParameters_arqType // class H245_H223AnnexCArqParameters; class H245_H223AL3MParameters_arqType : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223AL3MParameters_arqType, PASN_Choice); #endif public: H245_H223AL3MParameters_arqType(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_noArq, e_typeIArq, e_typeIIArq }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H223AnnexCArqParameters &() const; #else operator H245_H223AnnexCArqParameters &(); operator const H245_H223AnnexCArqParameters &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // H223AnnexCArqParameters_numberOfRetransmissions // class H245_H223AnnexCArqParameters_numberOfRetransmissions : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223AnnexCArqParameters_numberOfRetransmissions, PASN_Choice); #endif public: H245_H223AnnexCArqParameters_numberOfRetransmissions(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_finite, e_infinite }; PBoolean CreateObject(); PObject * Clone() const; }; // // V76LogicalChannelParameters_suspendResume // class H245_V76LogicalChannelParameters_suspendResume : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_V76LogicalChannelParameters_suspendResume, PASN_Choice); #endif public: H245_V76LogicalChannelParameters_suspendResume(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_noSuspendResume, e_suspendResumewAddress, e_suspendResumewoAddress }; PBoolean CreateObject(); PObject * Clone() const; }; // // V76LogicalChannelParameters_mode // class H245_V76LogicalChannelParameters_mode_eRM; class H245_V76LogicalChannelParameters_mode : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_V76LogicalChannelParameters_mode, PASN_Choice); #endif public: H245_V76LogicalChannelParameters_mode(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_eRM, e_uNERM }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_V76LogicalChannelParameters_mode_eRM &() const; #else operator H245_V76LogicalChannelParameters_mode_eRM &(); operator const H245_V76LogicalChannelParameters_mode_eRM &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // H2250LogicalChannelParameters_mediaPacketization // class H245_RTPPayloadType; class H245_H2250LogicalChannelParameters_mediaPacketization : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H2250LogicalChannelParameters_mediaPacketization, PASN_Choice); #endif public: H245_H2250LogicalChannelParameters_mediaPacketization(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_h261aVideoPacketization, e_rtpPayloadType }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_RTPPayloadType &() const; #else operator H245_RTPPayloadType &(); operator const H245_RTPPayloadType &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // RTPPayloadType_payloadDescriptor // class H245_NonStandardParameter; class H245_RTPPayloadType_payloadDescriptor : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RTPPayloadType_payloadDescriptor, PASN_Choice); #endif public: H245_RTPPayloadType_payloadDescriptor(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandardIdentifier, e_rfc_number, e_oid }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_MultiplePayloadStreamElement // class H245_MultiplePayloadStreamElement; class H245_ArrayOf_MultiplePayloadStreamElement : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_MultiplePayloadStreamElement, PASN_Array); #endif public: H245_ArrayOf_MultiplePayloadStreamElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_MultiplePayloadStreamElement & operator[](PINDEX i) const; PObject * Clone() const; }; // // UnicastAddress_iPAddress // class H245_UnicastAddress_iPAddress : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_UnicastAddress_iPAddress, PASN_Sequence); #endif public: H245_UnicastAddress_iPAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_OctetString m_network; PASN_Integer m_tsapIdentifier; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UnicastAddress_iPXAddress // class H245_UnicastAddress_iPXAddress : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_UnicastAddress_iPXAddress, PASN_Sequence); #endif public: H245_UnicastAddress_iPXAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_OctetString m_node; PASN_OctetString m_netnum; PASN_OctetString m_tsapIdentifier; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UnicastAddress_iP6Address // class H245_UnicastAddress_iP6Address : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_UnicastAddress_iP6Address, PASN_Sequence); #endif public: H245_UnicastAddress_iP6Address(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_OctetString m_network; PASN_Integer m_tsapIdentifier; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MulticastAddress_iPAddress // class H245_MulticastAddress_iPAddress : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MulticastAddress_iPAddress, PASN_Sequence); #endif public: H245_MulticastAddress_iPAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_OctetString m_network; PASN_Integer m_tsapIdentifier; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MulticastAddress_iP6Address // class H245_MulticastAddress_iP6Address : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MulticastAddress_iP6Address, PASN_Sequence); #endif public: H245_MulticastAddress_iP6Address(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_OctetString m_network; PASN_Integer m_tsapIdentifier; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_EscrowData // class H245_EscrowData; class H245_ArrayOf_EscrowData : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_EscrowData, PASN_Array); #endif public: H245_ArrayOf_EscrowData(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_EscrowData & operator[](PINDEX i) const; PObject * Clone() const; }; // // OpenLogicalChannelAck_forwardMultiplexAckParameters // class H245_H2250LogicalChannelAckParameters; class H245_OpenLogicalChannelAck_forwardMultiplexAckParameters : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_OpenLogicalChannelAck_forwardMultiplexAckParameters, PASN_Choice); #endif public: H245_OpenLogicalChannelAck_forwardMultiplexAckParameters(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_h2250LogicalChannelAckParameters }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H2250LogicalChannelAckParameters &() const; #else operator H245_H2250LogicalChannelAckParameters &(); operator const H245_H2250LogicalChannelAckParameters &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // OpenLogicalChannelReject_cause // class H245_OpenLogicalChannelReject_cause : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_OpenLogicalChannelReject_cause, PASN_Choice); #endif public: H245_OpenLogicalChannelReject_cause(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_unspecified, e_unsuitableReverseParameters, e_dataTypeNotSupported, e_dataTypeNotAvailable, e_unknownDataType, e_dataTypeALCombinationNotSupported, e_multicastChannelNotAllowed, e_insufficientBandwidth, e_separateStackEstablishmentFailed, e_invalidSessionID, e_masterSlaveConflict, e_waitForCommunicationMode, e_invalidDependentChannel, e_replacementForRejected, e_securityDenied }; PBoolean CreateObject(); PObject * Clone() const; }; // // CloseLogicalChannel_source // class H245_CloseLogicalChannel_source : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CloseLogicalChannel_source, PASN_Choice); #endif public: H245_CloseLogicalChannel_source(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_user, e_lcse }; PBoolean CreateObject(); PObject * Clone() const; }; // // CloseLogicalChannel_reason // class H245_CloseLogicalChannel_reason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CloseLogicalChannel_reason, PASN_Choice); #endif public: H245_CloseLogicalChannel_reason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_unknown, e_reopen, e_reservationFailure }; PBoolean CreateObject(); PObject * Clone() const; }; // // RequestChannelClose_reason // class H245_RequestChannelClose_reason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RequestChannelClose_reason, PASN_Choice); #endif public: H245_RequestChannelClose_reason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_unknown, e_normal, e_reopen, e_reservationFailure }; PBoolean CreateObject(); PObject * Clone() const; }; // // RequestChannelCloseReject_cause // class H245_RequestChannelCloseReject_cause : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RequestChannelCloseReject_cause, PASN_Choice); #endif public: H245_RequestChannelCloseReject_cause(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_unspecified }; PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_MultiplexEntryDescriptor // class H245_MultiplexEntryDescriptor; class H245_ArrayOf_MultiplexEntryDescriptor : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_MultiplexEntryDescriptor, PASN_Array); #endif public: H245_ArrayOf_MultiplexEntryDescriptor(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_MultiplexEntryDescriptor & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_MultiplexElement // class H245_MultiplexElement; class H245_ArrayOf_MultiplexElement : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_MultiplexElement, PASN_Array); #endif public: H245_ArrayOf_MultiplexElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_MultiplexElement & operator[](PINDEX i) const; PObject * Clone() const; }; // // MultiplexElement_type // class H245_ArrayOf_MultiplexElement; class H245_MultiplexElement_type : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultiplexElement_type, PASN_Choice); #endif public: H245_MultiplexElement_type(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_logicalChannelNumber, e_subElementList }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ArrayOf_MultiplexElement &() const; #else operator H245_ArrayOf_MultiplexElement &(); operator const H245_ArrayOf_MultiplexElement &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // MultiplexElement_repeatCount // class H245_MultiplexElement_repeatCount : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultiplexElement_repeatCount, PASN_Choice); #endif public: H245_MultiplexElement_repeatCount(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_finite, e_untilClosingFlag }; PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_MultiplexTableEntryNumber // class H245_MultiplexTableEntryNumber; class H245_ArrayOf_MultiplexTableEntryNumber : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_MultiplexTableEntryNumber, PASN_Array); #endif public: H245_ArrayOf_MultiplexTableEntryNumber(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_MultiplexTableEntryNumber & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_MultiplexEntryRejectionDescriptions // class H245_MultiplexEntryRejectionDescriptions; class H245_ArrayOf_MultiplexEntryRejectionDescriptions : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_MultiplexEntryRejectionDescriptions, PASN_Array); #endif public: H245_ArrayOf_MultiplexEntryRejectionDescriptions(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_MultiplexEntryRejectionDescriptions & operator[](PINDEX i) const; PObject * Clone() const; }; // // MultiplexEntryRejectionDescriptions_cause // class H245_MultiplexEntryRejectionDescriptions_cause : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultiplexEntryRejectionDescriptions_cause, PASN_Choice); #endif public: H245_MultiplexEntryRejectionDescriptions_cause(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_unspecifiedCause, e_descriptorTooComplex }; PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_RequestMultiplexEntryRejectionDescriptions // class H245_RequestMultiplexEntryRejectionDescriptions; class H245_ArrayOf_RequestMultiplexEntryRejectionDescriptions : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_RequestMultiplexEntryRejectionDescriptions, PASN_Array); #endif public: H245_ArrayOf_RequestMultiplexEntryRejectionDescriptions(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_RequestMultiplexEntryRejectionDescriptions & operator[](PINDEX i) const; PObject * Clone() const; }; // // RequestMultiplexEntryRejectionDescriptions_cause // class H245_RequestMultiplexEntryRejectionDescriptions_cause : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RequestMultiplexEntryRejectionDescriptions_cause, PASN_Choice); #endif public: H245_RequestMultiplexEntryRejectionDescriptions_cause(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_unspecifiedCause }; PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_ModeDescription // class H245_ModeDescription; class H245_ArrayOf_ModeDescription : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_ModeDescription, PASN_Array); #endif public: H245_ArrayOf_ModeDescription(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_ModeDescription & operator[](PINDEX i) const; PObject * Clone() const; }; // // RequestModeAck_response // class H245_RequestModeAck_response : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RequestModeAck_response, PASN_Choice); #endif public: H245_RequestModeAck_response(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_willTransmitMostPreferredMode, e_willTransmitLessPreferredMode }; PBoolean CreateObject(); PObject * Clone() const; }; // // RequestModeReject_cause // class H245_RequestModeReject_cause : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RequestModeReject_cause, PASN_Choice); #endif public: H245_RequestModeReject_cause(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_modeUnavailable, e_multipointConstraint, e_requestDenied }; PBoolean CreateObject(); PObject * Clone() const; }; // // H235Mode_mediaMode // class H245_NonStandardParameter; class H245_VideoMode; class H245_AudioMode; class H245_DataMode; class H245_H235Mode_mediaMode : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H235Mode_mediaMode, PASN_Choice); #endif public: H245_H235Mode_mediaMode(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_videoMode, e_audioMode, e_dataMode }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_VideoMode &() const; #else operator H245_VideoMode &(); operator const H245_VideoMode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_AudioMode &() const; #else operator H245_AudioMode &(); operator const H245_AudioMode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DataMode &() const; #else operator H245_DataMode &(); operator const H245_DataMode &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_RedundancyEncodingDTModeElement // class H245_RedundancyEncodingDTModeElement; class H245_ArrayOf_RedundancyEncodingDTModeElement : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_RedundancyEncodingDTModeElement, PASN_Array); #endif public: H245_ArrayOf_RedundancyEncodingDTModeElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_RedundancyEncodingDTModeElement & operator[](PINDEX i) const; PObject * Clone() const; }; // // RedundancyEncodingDTModeElement_type // class H245_NonStandardParameter; class H245_VideoMode; class H245_AudioMode; class H245_DataMode; class H245_EncryptionMode; class H245_H235Mode; class H245_FECMode; class H245_RedundancyEncodingDTModeElement_type : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RedundancyEncodingDTModeElement_type, PASN_Choice); #endif public: H245_RedundancyEncodingDTModeElement_type(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_videoMode, e_audioMode, e_dataMode, e_encryptionMode, e_h235Mode, e_fecMode }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_VideoMode &() const; #else operator H245_VideoMode &(); operator const H245_VideoMode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_AudioMode &() const; #else operator H245_AudioMode &(); operator const H245_AudioMode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DataMode &() const; #else operator H245_DataMode &(); operator const H245_DataMode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_EncryptionMode &() const; #else operator H245_EncryptionMode &(); operator const H245_EncryptionMode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H235Mode &() const; #else operator H245_H235Mode &(); operator const H245_H235Mode &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_FECMode &() const; #else operator H245_FECMode &(); operator const H245_FECMode &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_MultiplePayloadStreamElementMode // class H245_MultiplePayloadStreamElementMode; class H245_ArrayOf_MultiplePayloadStreamElementMode : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_MultiplePayloadStreamElementMode, PASN_Array); #endif public: H245_ArrayOf_MultiplePayloadStreamElementMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_MultiplePayloadStreamElementMode & operator[](PINDEX i) const; PObject * Clone() const; }; // // FECMode_rfc2733Format // class H245_MaxRedundancy; class H245_FECMode_rfc2733Format : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_FECMode_rfc2733Format, PASN_Choice); #endif public: H245_FECMode_rfc2733Format(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_rfc2733rfc2198, e_rfc2733sameport, e_rfc2733diffport }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MaxRedundancy &() const; #else operator H245_MaxRedundancy &(); operator const H245_MaxRedundancy &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // H223ModeParameters_adaptationLayerType // class H245_NonStandardParameter; class H245_H223ModeParameters_adaptationLayerType_al3; class H245_H223AL1MParameters; class H245_H223AL2MParameters; class H245_H223AL3MParameters; class H245_H223ModeParameters_adaptationLayerType : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223ModeParameters_adaptationLayerType, PASN_Choice); #endif public: H245_H223ModeParameters_adaptationLayerType(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_al1Framed, e_al1NotFramed, e_al2WithoutSequenceNumbers, e_al2WithSequenceNumbers, e_al3, e_al1M, e_al2M, e_al3M }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H223ModeParameters_adaptationLayerType_al3 &() const; #else operator H245_H223ModeParameters_adaptationLayerType_al3 &(); operator const H245_H223ModeParameters_adaptationLayerType_al3 &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H223AL1MParameters &() const; #else operator H245_H223AL1MParameters &(); operator const H245_H223AL1MParameters &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H223AL2MParameters &() const; #else operator H245_H223AL2MParameters &(); operator const H245_H223AL2MParameters &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H223AL3MParameters &() const; #else operator H245_H223AL3MParameters &(); operator const H245_H223AL3MParameters &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // RedundancyEncodingMode_secondaryEncoding // class H245_NonStandardParameter; class H245_AudioMode; class H245_RedundancyEncodingMode_secondaryEncoding : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RedundancyEncodingMode_secondaryEncoding, PASN_Choice); #endif public: H245_RedundancyEncodingMode_secondaryEncoding(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_audioData }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_AudioMode &() const; #else operator H245_AudioMode &(); operator const H245_AudioMode &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // H261VideoMode_resolution // class H245_H261VideoMode_resolution : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H261VideoMode_resolution, PASN_Choice); #endif public: H245_H261VideoMode_resolution(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_qcif, e_cif }; PBoolean CreateObject(); PObject * Clone() const; }; // // H262VideoMode_profileAndLevel // class H245_H262VideoMode_profileAndLevel : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H262VideoMode_profileAndLevel, PASN_Choice); #endif public: H245_H262VideoMode_profileAndLevel(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_profileAndLevel_SPatML, e_profileAndLevel_MPatLL, e_profileAndLevel_MPatML, e_profileAndLevel_MPatH_14, e_profileAndLevel_MPatHL, e_profileAndLevel_SNRatLL, e_profileAndLevel_SNRatML, e_profileAndLevel_SpatialatH_14, e_profileAndLevel_HPatML, e_profileAndLevel_HPatH_14, e_profileAndLevel_HPatHL }; PBoolean CreateObject(); PObject * Clone() const; }; // // H263VideoMode_resolution // class H245_H263VideoMode_resolution : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H263VideoMode_resolution, PASN_Choice); #endif public: H245_H263VideoMode_resolution(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_sqcif, e_qcif, e_cif, e_cif4, e_cif16, e_custom }; PBoolean CreateObject(); PObject * Clone() const; }; // // AudioMode_g7231 // class H245_AudioMode_g7231 : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_AudioMode_g7231, PASN_Choice); #endif public: H245_AudioMode_g7231(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_noSilenceSuppressionLowRate, e_noSilenceSuppressionHighRate, e_silenceSuppressionLowRate, e_silenceSuppressionHighRate }; PBoolean CreateObject(); PObject * Clone() const; }; // // IS11172AudioMode_audioLayer // class H245_IS11172AudioMode_audioLayer : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_IS11172AudioMode_audioLayer, PASN_Choice); #endif public: H245_IS11172AudioMode_audioLayer(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_audioLayer1, e_audioLayer2, e_audioLayer3 }; PBoolean CreateObject(); PObject * Clone() const; }; // // IS11172AudioMode_audioSampling // class H245_IS11172AudioMode_audioSampling : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_IS11172AudioMode_audioSampling, PASN_Choice); #endif public: H245_IS11172AudioMode_audioSampling(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_audioSampling32k, e_audioSampling44k1, e_audioSampling48k }; PBoolean CreateObject(); PObject * Clone() const; }; // // IS11172AudioMode_multichannelType // class H245_IS11172AudioMode_multichannelType : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_IS11172AudioMode_multichannelType, PASN_Choice); #endif public: H245_IS11172AudioMode_multichannelType(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_singleChannel, e_twoChannelStereo, e_twoChannelDual }; PBoolean CreateObject(); PObject * Clone() const; }; // // IS13818AudioMode_audioLayer // class H245_IS13818AudioMode_audioLayer : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_IS13818AudioMode_audioLayer, PASN_Choice); #endif public: H245_IS13818AudioMode_audioLayer(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_audioLayer1, e_audioLayer2, e_audioLayer3 }; PBoolean CreateObject(); PObject * Clone() const; }; // // IS13818AudioMode_audioSampling // class H245_IS13818AudioMode_audioSampling : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_IS13818AudioMode_audioSampling, PASN_Choice); #endif public: H245_IS13818AudioMode_audioSampling(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_audioSampling16k, e_audioSampling22k05, e_audioSampling24k, e_audioSampling32k, e_audioSampling44k1, e_audioSampling48k }; PBoolean CreateObject(); PObject * Clone() const; }; // // IS13818AudioMode_multichannelType // class H245_IS13818AudioMode_multichannelType : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_IS13818AudioMode_multichannelType, PASN_Choice); #endif public: H245_IS13818AudioMode_multichannelType(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_singleChannel, e_twoChannelStereo, e_twoChannelDual, e_threeChannels2_1, e_threeChannels3_0, e_fourChannels2_0_2_0, e_fourChannels2_2, e_fourChannels3_1, e_fiveChannels3_0_2_0, e_fiveChannels3_2 }; PBoolean CreateObject(); PObject * Clone() const; }; // // G7231AnnexCMode_g723AnnexCAudioMode // class H245_G7231AnnexCMode_g723AnnexCAudioMode : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_G7231AnnexCMode_g723AnnexCAudioMode, PASN_Sequence); #endif public: H245_G7231AnnexCMode_g723AnnexCAudioMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_highRateMode0; PASN_Integer m_highRateMode1; PASN_Integer m_lowRateMode0; PASN_Integer m_lowRateMode1; PASN_Integer m_sidMode0; PASN_Integer m_sidMode1; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DataMode_application // class H245_NonStandardParameter; class H245_DataProtocolCapability; class H245_DataMode_application_nlpid; class H245_DataMode_application_t38fax; class H245_GenericCapability; class H245_DataMode_application : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DataMode_application, PASN_Choice); #endif public: H245_DataMode_application(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_t120, e_dsm_cc, e_userData, e_t84, e_t434, e_h224, e_nlpid, e_dsvdControl, e_h222DataPartitioning, e_t30fax, e_t140, e_t38fax, e_genericDataMode }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DataProtocolCapability &() const; #else operator H245_DataProtocolCapability &(); operator const H245_DataProtocolCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DataMode_application_nlpid &() const; #else operator H245_DataMode_application_nlpid &(); operator const H245_DataMode_application_nlpid &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DataMode_application_t38fax &() const; #else operator H245_DataMode_application_t38fax &(); operator const H245_DataMode_application_t38fax &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_GenericCapability &() const; #else operator H245_GenericCapability &(); operator const H245_GenericCapability &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // MaintenanceLoopRequest_type // class H245_LogicalChannelNumber; class H245_MaintenanceLoopRequest_type : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MaintenanceLoopRequest_type, PASN_Choice); #endif public: H245_MaintenanceLoopRequest_type(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_systemLoop, e_mediaLoop, e_logicalChannelLoop }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_LogicalChannelNumber &() const; #else operator H245_LogicalChannelNumber &(); operator const H245_LogicalChannelNumber &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // MaintenanceLoopAck_type // class H245_LogicalChannelNumber; class H245_MaintenanceLoopAck_type : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MaintenanceLoopAck_type, PASN_Choice); #endif public: H245_MaintenanceLoopAck_type(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_systemLoop, e_mediaLoop, e_logicalChannelLoop }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_LogicalChannelNumber &() const; #else operator H245_LogicalChannelNumber &(); operator const H245_LogicalChannelNumber &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // MaintenanceLoopReject_type // class H245_LogicalChannelNumber; class H245_MaintenanceLoopReject_type : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MaintenanceLoopReject_type, PASN_Choice); #endif public: H245_MaintenanceLoopReject_type(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_systemLoop, e_mediaLoop, e_logicalChannelLoop }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_LogicalChannelNumber &() const; #else operator H245_LogicalChannelNumber &(); operator const H245_LogicalChannelNumber &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // MaintenanceLoopReject_cause // class H245_MaintenanceLoopReject_cause : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MaintenanceLoopReject_cause, PASN_Choice); #endif public: H245_MaintenanceLoopReject_cause(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_canNotPerformLoop }; PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_CommunicationModeTableEntry // class H245_CommunicationModeTableEntry; class H245_ArrayOf_CommunicationModeTableEntry : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_CommunicationModeTableEntry, PASN_Array); #endif public: H245_ArrayOf_CommunicationModeTableEntry(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_CommunicationModeTableEntry & operator[](PINDEX i) const; PObject * Clone() const; }; // // CommunicationModeTableEntry_dataType // class H245_VideoCapability; class H245_AudioCapability; class H245_DataApplicationCapability; class H245_CommunicationModeTableEntry_dataType : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CommunicationModeTableEntry_dataType, PASN_Choice); #endif public: H245_CommunicationModeTableEntry_dataType(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_videoData, e_audioData, e_data }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_VideoCapability &() const; #else operator H245_VideoCapability &(); operator const H245_VideoCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_AudioCapability &() const; #else operator H245_AudioCapability &(); operator const H245_AudioCapability &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DataApplicationCapability &() const; #else operator H245_DataApplicationCapability &(); operator const H245_DataApplicationCapability &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_TerminalLabel // class H245_TerminalLabel; class H245_ArrayOf_TerminalLabel : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_TerminalLabel, PASN_Array); #endif public: H245_ArrayOf_TerminalLabel(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_TerminalLabel & operator[](PINDEX i) const; PObject * Clone() const; }; // // ConferenceResponse_makeMeChairResponse // class H245_ConferenceResponse_makeMeChairResponse : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ConferenceResponse_makeMeChairResponse, PASN_Choice); #endif public: H245_ConferenceResponse_makeMeChairResponse(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_grantedChairToken, e_deniedChairToken }; PBoolean CreateObject(); PObject * Clone() const; }; // // ConferenceResponse_extensionAddressResponse // class H245_ConferenceResponse_extensionAddressResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ConferenceResponse_extensionAddressResponse, PASN_Sequence); #endif public: H245_ConferenceResponse_extensionAddressResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_TerminalID m_extensionAddress; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceResponse_broadcastMyLogicalChannelResponse // class H245_ConferenceResponse_broadcastMyLogicalChannelResponse : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ConferenceResponse_broadcastMyLogicalChannelResponse, PASN_Choice); #endif public: H245_ConferenceResponse_broadcastMyLogicalChannelResponse(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_grantedBroadcastMyLogicalChannel, e_deniedBroadcastMyLogicalChannel }; PBoolean CreateObject(); PObject * Clone() const; }; // // ConferenceResponse_makeTerminalBroadcasterResponse // class H245_ConferenceResponse_makeTerminalBroadcasterResponse : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ConferenceResponse_makeTerminalBroadcasterResponse, PASN_Choice); #endif public: H245_ConferenceResponse_makeTerminalBroadcasterResponse(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_grantedMakeTerminalBroadcaster, e_deniedMakeTerminalBroadcaster }; PBoolean CreateObject(); PObject * Clone() const; }; // // ConferenceResponse_sendThisSourceResponse // class H245_ConferenceResponse_sendThisSourceResponse : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ConferenceResponse_sendThisSourceResponse, PASN_Choice); #endif public: H245_ConferenceResponse_sendThisSourceResponse(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_grantedSendThisSource, e_deniedSendThisSource }; PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_TerminalInformation // class H245_TerminalInformation; class H245_ArrayOf_TerminalInformation : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_TerminalInformation, PASN_Array); #endif public: H245_ArrayOf_TerminalInformation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_TerminalInformation & operator[](PINDEX i) const; PObject * Clone() const; }; // // RemoteMCResponse_reject // class H245_RemoteMCResponse_reject : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RemoteMCResponse_reject, PASN_Choice); #endif public: H245_RemoteMCResponse_reject(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_unspecified, e_functionNotSupported }; PBoolean CreateObject(); PObject * Clone() const; }; // // MultilinkRequest_callInformation // class H245_MultilinkRequest_callInformation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultilinkRequest_callInformation, PASN_Sequence); #endif public: H245_MultilinkRequest_callInformation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_maxNumberOfAdditionalConnections; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultilinkRequest_addConnection // class H245_MultilinkRequest_addConnection : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultilinkRequest_addConnection, PASN_Sequence); #endif public: H245_MultilinkRequest_addConnection(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_SequenceNumber m_sequenceNumber; H245_DialingInformation m_dialingInformation; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultilinkRequest_removeConnection // class H245_MultilinkRequest_removeConnection : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultilinkRequest_removeConnection, PASN_Sequence); #endif public: H245_MultilinkRequest_removeConnection(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_ConnectionIdentifier m_connectionIdentifier; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultilinkResponse_callInformation // class H245_MultilinkResponse_callInformation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultilinkResponse_callInformation, PASN_Sequence); #endif public: H245_MultilinkResponse_callInformation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_DialingInformation m_dialingInformation; PASN_Integer m_callAssociationNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultilinkResponse_removeConnection // class H245_MultilinkResponse_removeConnection : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultilinkResponse_removeConnection, PASN_Sequence); #endif public: H245_MultilinkResponse_removeConnection(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_ConnectionIdentifier m_connectionIdentifier; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultilinkResponse_maximumHeaderInterval // class H245_MultilinkResponse_maximumHeaderInterval : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultilinkResponse_maximumHeaderInterval, PASN_Sequence); #endif public: H245_MultilinkResponse_maximumHeaderInterval(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_currentInterval; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultilinkIndication_crcDesired // class H245_MultilinkIndication_crcDesired : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultilinkIndication_crcDesired, PASN_Sequence); #endif public: H245_MultilinkIndication_crcDesired(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // MultilinkIndication_excessiveError // class H245_MultilinkIndication_excessiveError : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultilinkIndication_excessiveError, PASN_Sequence); #endif public: H245_MultilinkIndication_excessiveError(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_ConnectionIdentifier m_connectionIdentifier; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_DialingInformationNumber // class H245_DialingInformationNumber; class H245_ArrayOf_DialingInformationNumber : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_DialingInformationNumber, PASN_Array); #endif public: H245_ArrayOf_DialingInformationNumber(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_DialingInformationNumber & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_DialingInformationNetworkType // class H245_DialingInformationNetworkType; class H245_ArrayOf_DialingInformationNetworkType : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_DialingInformationNetworkType, PASN_Array); #endif public: H245_ArrayOf_DialingInformationNetworkType(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_DialingInformationNetworkType & operator[](PINDEX i) const; PObject * Clone() const; }; // // FlowControlCommand_scope // class H245_LogicalChannelNumber; class H245_FlowControlCommand_scope : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_FlowControlCommand_scope, PASN_Choice); #endif public: H245_FlowControlCommand_scope(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_logicalChannelNumber, e_resourceID, e_wholeMultiplex }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_LogicalChannelNumber &() const; #else operator H245_LogicalChannelNumber &(); operator const H245_LogicalChannelNumber &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // FlowControlCommand_restriction // class H245_FlowControlCommand_restriction : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_FlowControlCommand_restriction, PASN_Choice); #endif public: H245_FlowControlCommand_restriction(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_maximumBitRate, e_noRestriction }; PBoolean CreateObject(); PObject * Clone() const; }; // // EndSessionCommand_gstnOptions // class H245_EndSessionCommand_gstnOptions : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_EndSessionCommand_gstnOptions, PASN_Choice); #endif public: H245_EndSessionCommand_gstnOptions(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_telephonyMode, e_v8bis, e_v34DSVD, e_v34DuplexFAX, e_v34H324 }; PBoolean CreateObject(); PObject * Clone() const; }; // // EndSessionCommand_isdnOptions // class H245_EndSessionCommand_isdnOptions : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_EndSessionCommand_isdnOptions, PASN_Choice); #endif public: H245_EndSessionCommand_isdnOptions(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_telephonyMode, e_v140, e_terminalOnHold }; PBoolean CreateObject(); PObject * Clone() const; }; // // MiscellaneousCommand_type // class H245_MiscellaneousCommand_type_videoFastUpdateGOB; class H245_MiscellaneousCommand_type_videoFastUpdateMB; class H245_EncryptionSync; class H245_EncryptionUpdateRequest; class H245_MiscellaneousCommand_type_progressiveRefinementStart; class H245_MiscellaneousCommand_type_videoBadMBs; class H245_ArrayOf_PictureReference; class H245_MiscellaneousCommand_type_lostPartialPicture; class H245_MiscellaneousCommand_type_encryptionUpdateCommand; class H245_MiscellaneousCommand_type_encryptionUpdateAck; class H245_MiscellaneousCommand_type : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MiscellaneousCommand_type, PASN_Choice); #endif public: H245_MiscellaneousCommand_type(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_equaliseDelay, e_zeroDelay, e_multipointModeCommand, e_cancelMultipointModeCommand, e_videoFreezePicture, e_videoFastUpdatePicture, e_videoFastUpdateGOB, e_videoTemporalSpatialTradeOff, e_videoSendSyncEveryGOB, e_videoSendSyncEveryGOBCancel, e_videoFastUpdateMB, e_maxH223MUXPDUsize, e_encryptionUpdate, e_encryptionUpdateRequest, e_switchReceiveMediaOff, e_switchReceiveMediaOn, e_progressiveRefinementStart, e_progressiveRefinementAbortOne, e_progressiveRefinementAbortContinuous, e_videoBadMBs, e_lostPicture, e_lostPartialPicture, e_recoveryReferencePicture, e_encryptionUpdateCommand, e_encryptionUpdateAck }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MiscellaneousCommand_type_videoFastUpdateGOB &() const; #else operator H245_MiscellaneousCommand_type_videoFastUpdateGOB &(); operator const H245_MiscellaneousCommand_type_videoFastUpdateGOB &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MiscellaneousCommand_type_videoFastUpdateMB &() const; #else operator H245_MiscellaneousCommand_type_videoFastUpdateMB &(); operator const H245_MiscellaneousCommand_type_videoFastUpdateMB &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_EncryptionSync &() const; #else operator H245_EncryptionSync &(); operator const H245_EncryptionSync &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_EncryptionUpdateRequest &() const; #else operator H245_EncryptionUpdateRequest &(); operator const H245_EncryptionUpdateRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MiscellaneousCommand_type_progressiveRefinementStart &() const; #else operator H245_MiscellaneousCommand_type_progressiveRefinementStart &(); operator const H245_MiscellaneousCommand_type_progressiveRefinementStart &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MiscellaneousCommand_type_videoBadMBs &() const; #else operator H245_MiscellaneousCommand_type_videoBadMBs &(); operator const H245_MiscellaneousCommand_type_videoBadMBs &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_ArrayOf_PictureReference &() const; #else operator H245_ArrayOf_PictureReference &(); operator const H245_ArrayOf_PictureReference &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MiscellaneousCommand_type_lostPartialPicture &() const; #else operator H245_MiscellaneousCommand_type_lostPartialPicture &(); operator const H245_MiscellaneousCommand_type_lostPartialPicture &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MiscellaneousCommand_type_encryptionUpdateCommand &() const; #else operator H245_MiscellaneousCommand_type_encryptionUpdateCommand &(); operator const H245_MiscellaneousCommand_type_encryptionUpdateCommand &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MiscellaneousCommand_type_encryptionUpdateAck &() const; #else operator H245_MiscellaneousCommand_type_encryptionUpdateAck &(); operator const H245_MiscellaneousCommand_type_encryptionUpdateAck &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // H223MultiplexReconfiguration_h223ModeChange // class H245_H223MultiplexReconfiguration_h223ModeChange : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223MultiplexReconfiguration_h223ModeChange, PASN_Choice); #endif public: H245_H223MultiplexReconfiguration_h223ModeChange(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_toLevel0, e_toLevel1, e_toLevel2, e_toLevel2withOptionalHeader }; PBoolean CreateObject(); PObject * Clone() const; }; // // H223MultiplexReconfiguration_h223AnnexADoubleFlag // class H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag, PASN_Choice); #endif public: H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_start, e_stop }; PBoolean CreateObject(); PObject * Clone() const; }; // // NewATMVCCommand_aal // class H245_NewATMVCCommand_aal_aal1; class H245_NewATMVCCommand_aal_aal5; class H245_NewATMVCCommand_aal : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NewATMVCCommand_aal, PASN_Choice); #endif public: H245_NewATMVCCommand_aal(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_aal1, e_aal5 }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NewATMVCCommand_aal_aal1 &() const; #else operator H245_NewATMVCCommand_aal_aal1 &(); operator const H245_NewATMVCCommand_aal_aal1 &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NewATMVCCommand_aal_aal5 &() const; #else operator H245_NewATMVCCommand_aal_aal5 &(); operator const H245_NewATMVCCommand_aal_aal5 &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // NewATMVCCommand_multiplex // class H245_NewATMVCCommand_multiplex : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NewATMVCCommand_multiplex, PASN_Choice); #endif public: H245_NewATMVCCommand_multiplex(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_noMultiplex, e_transportStream, e_programStream }; PBoolean CreateObject(); PObject * Clone() const; }; // // MobileMultilinkReconfigurationCommand_status // class H245_MobileMultilinkReconfigurationCommand_status : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MobileMultilinkReconfigurationCommand_status, PASN_Choice); #endif public: H245_MobileMultilinkReconfigurationCommand_status(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_synchronized, e_reconfiguration }; PBoolean CreateObject(); PObject * Clone() const; }; // // FunctionNotSupported_cause // class H245_FunctionNotSupported_cause : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_FunctionNotSupported_cause, PASN_Choice); #endif public: H245_FunctionNotSupported_cause(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_syntaxError, e_semanticError, e_unknownFunction }; PBoolean CreateObject(); PObject * Clone() const; }; // // MiscellaneousIndication_type // class H245_MiscellaneousIndication_type_videoNotDecodedMBs; class H245_TransportCapability; class H245_MiscellaneousIndication_type : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MiscellaneousIndication_type, PASN_Choice); #endif public: H245_MiscellaneousIndication_type(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_logicalChannelActive, e_logicalChannelInactive, e_multipointConference, e_cancelMultipointConference, e_multipointZeroComm, e_cancelMultipointZeroComm, e_multipointSecondaryStatus, e_cancelMultipointSecondaryStatus, e_videoIndicateReadyToActivate, e_videoTemporalSpatialTradeOff, e_videoNotDecodedMBs, e_transportCapability }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MiscellaneousIndication_type_videoNotDecodedMBs &() const; #else operator H245_MiscellaneousIndication_type_videoNotDecodedMBs &(); operator const H245_MiscellaneousIndication_type_videoNotDecodedMBs &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_TransportCapability &() const; #else operator H245_TransportCapability &(); operator const H245_TransportCapability &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // JitterIndication_scope // class H245_LogicalChannelNumber; class H245_JitterIndication_scope : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_JitterIndication_scope, PASN_Choice); #endif public: H245_JitterIndication_scope(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_logicalChannelNumber, e_resourceID, e_wholeMultiplex }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_LogicalChannelNumber &() const; #else operator H245_LogicalChannelNumber &(); operator const H245_LogicalChannelNumber &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // NewATMVCIndication_aal // class H245_NewATMVCIndication_aal_aal1; class H245_NewATMVCIndication_aal_aal5; class H245_NewATMVCIndication_aal : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NewATMVCIndication_aal, PASN_Choice); #endif public: H245_NewATMVCIndication_aal(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_aal1, e_aal5 }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NewATMVCIndication_aal_aal1 &() const; #else operator H245_NewATMVCIndication_aal_aal1 &(); operator const H245_NewATMVCIndication_aal_aal1 &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NewATMVCIndication_aal_aal5 &() const; #else operator H245_NewATMVCIndication_aal_aal5 &(); operator const H245_NewATMVCIndication_aal_aal5 &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // NewATMVCIndication_multiplex // class H245_NewATMVCIndication_multiplex : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NewATMVCIndication_multiplex, PASN_Choice); #endif public: H245_NewATMVCIndication_multiplex(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_noMultiplex, e_transportStream, e_programStream }; PBoolean CreateObject(); PObject * Clone() const; }; // // UserInputIndication_userInputSupportIndication // class H245_NonStandardParameter; class H245_UserInputIndication_userInputSupportIndication : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_UserInputIndication_userInputSupportIndication, PASN_Choice); #endif public: H245_UserInputIndication_userInputSupportIndication(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nonStandard, e_basicString, e_iA5String, e_generalString, e_encryptedBasicString, e_encryptedIA5String, e_encryptedGeneralString }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_NonStandardParameter &() const; #else operator H245_NonStandardParameter &(); operator const H245_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // UserInputIndication_encryptedAlphanumeric // class H245_UserInputIndication_encryptedAlphanumeric : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_UserInputIndication_encryptedAlphanumeric, PASN_Sequence); #endif public: H245_UserInputIndication_encryptedAlphanumeric(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_paramS }; PASN_ObjectId m_algorithmOID; H245_Params m_paramS; PASN_OctetString m_encrypted; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // FlowControlIndication_scope // class H245_LogicalChannelNumber; class H245_FlowControlIndication_scope : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_FlowControlIndication_scope, PASN_Choice); #endif public: H245_FlowControlIndication_scope(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_logicalChannelNumber, e_resourceID, e_wholeMultiplex }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_LogicalChannelNumber &() const; #else operator H245_LogicalChannelNumber &(); operator const H245_LogicalChannelNumber &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // FlowControlIndication_restriction // class H245_FlowControlIndication_restriction : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_FlowControlIndication_restriction, PASN_Choice); #endif public: H245_FlowControlIndication_restriction(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_maximumBitRate, e_noRestriction }; PBoolean CreateObject(); PObject * Clone() const; }; // // TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded // class H245_CapabilityTableEntryNumber; class H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded, PASN_Choice); #endif public: H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_highestEntryNumberProcessed, e_noneProcessed }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_CapabilityTableEntryNumber &() const; #else operator H245_CapabilityTableEntryNumber &(); operator const H245_CapabilityTableEntryNumber &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // VCCapability_availableBitRates_type // class H245_VCCapability_availableBitRates_type_rangeOfBitRates; class H245_VCCapability_availableBitRates_type : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_VCCapability_availableBitRates_type, PASN_Choice); #endif public: H245_VCCapability_availableBitRates_type(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_singleBitRate, e_rangeOfBitRates }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_VCCapability_availableBitRates_type_rangeOfBitRates &() const; #else operator H245_VCCapability_availableBitRates_type_rangeOfBitRates &(); operator const H245_VCCapability_availableBitRates_type_rangeOfBitRates &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_Q2931Address // class H245_Q2931Address; class H245_ArrayOf_Q2931Address : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_Q2931Address, PASN_Array); #endif public: H245_ArrayOf_Q2931Address(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_Q2931Address & operator[](PINDEX i) const; PObject * Clone() const; }; // // H223Capability_h223MultiplexTableCapability_enhanced // class H245_H223Capability_h223MultiplexTableCapability_enhanced : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223Capability_h223MultiplexTableCapability_enhanced, PASN_Sequence); #endif public: H245_H223Capability_h223MultiplexTableCapability_enhanced(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_maximumNestingDepth; PASN_Integer m_maximumElementListSize; PASN_Integer m_maximumSubElementListSize; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_RTPH263VideoRedundancyFrameMapping // class H245_RTPH263VideoRedundancyFrameMapping; class H245_ArrayOf_RTPH263VideoRedundancyFrameMapping : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_RTPH263VideoRedundancyFrameMapping, PASN_Array); #endif public: H245_ArrayOf_RTPH263VideoRedundancyFrameMapping(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_RTPH263VideoRedundancyFrameMapping & operator[](PINDEX i) const; PObject * Clone() const; }; // // RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters // class H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters, PASN_Sequence); #endif public: H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_mpuHorizMBs; PASN_Integer m_mpuVertMBs; PASN_Integer m_mpuTotalNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CustomPictureFormat_mPI_customPCF // class H245_CustomPictureFormat_mPI_customPCF_subtype; class H245_CustomPictureFormat_mPI_customPCF : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CustomPictureFormat_mPI_customPCF, PASN_Array); #endif public: H245_CustomPictureFormat_mPI_customPCF(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_CustomPictureFormat_mPI_customPCF_subtype & operator[](PINDEX i) const; PObject * Clone() const; }; // // CustomPictureFormat_pixelAspectInformation_pixelAspectCode // class H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode, PASN_Array); #endif public: H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; PASN_Integer & operator[](PINDEX i) const; PObject * Clone() const; }; // // CustomPictureFormat_pixelAspectInformation_extendedPAR // class H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype; class H245_CustomPictureFormat_pixelAspectInformation_extendedPAR : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CustomPictureFormat_pixelAspectInformation_extendedPAR, PASN_Array); #endif public: H245_CustomPictureFormat_pixelAspectInformation_extendedPAR(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype & operator[](PINDEX i) const; PObject * Clone() const; }; // // DataApplicationCapability_application_t84 // class H245_DataApplicationCapability_application_t84 : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DataApplicationCapability_application_t84, PASN_Sequence); #endif public: H245_DataApplicationCapability_application_t84(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_DataProtocolCapability m_t84Protocol; H245_T84Profile m_t84Profile; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DataApplicationCapability_application_nlpid // class H245_DataApplicationCapability_application_nlpid : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DataApplicationCapability_application_nlpid, PASN_Sequence); #endif public: H245_DataApplicationCapability_application_nlpid(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_DataProtocolCapability m_nlpidProtocol; PASN_OctetString m_nlpidData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DepFECCapability_rfc2733_separateStream // class H245_DepFECCapability_rfc2733_separateStream : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DepFECCapability_rfc2733_separateStream, PASN_Sequence); #endif public: H245_DepFECCapability_rfc2733_separateStream(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_separatePort; PASN_Boolean m_samePort; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters // class H245_H222LogicalChannelParameters; class H245_H223LogicalChannelParameters; class H245_V76LogicalChannelParameters; class H245_H2250LogicalChannelParameters; class H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters, PASN_Choice); #endif public: H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_h222LogicalChannelParameters, e_h223LogicalChannelParameters, e_v76LogicalChannelParameters, e_h2250LogicalChannelParameters, e_none }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H222LogicalChannelParameters &() const; #else operator H245_H222LogicalChannelParameters &(); operator const H245_H222LogicalChannelParameters &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H223LogicalChannelParameters &() const; #else operator H245_H223LogicalChannelParameters &(); operator const H245_H223LogicalChannelParameters &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_V76LogicalChannelParameters &() const; #else operator H245_V76LogicalChannelParameters &(); operator const H245_V76LogicalChannelParameters &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H2250LogicalChannelParameters &() const; #else operator H245_H2250LogicalChannelParameters &(); operator const H245_H2250LogicalChannelParameters &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters // class H245_H223LogicalChannelParameters; class H245_V76LogicalChannelParameters; class H245_H2250LogicalChannelParameters; class H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters, PASN_Choice); #endif public: H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_h223LogicalChannelParameters, e_v76LogicalChannelParameters, e_h2250LogicalChannelParameters }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H223LogicalChannelParameters &() const; #else operator H245_H223LogicalChannelParameters &(); operator const H245_H223LogicalChannelParameters &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_V76LogicalChannelParameters &() const; #else operator H245_V76LogicalChannelParameters &(); operator const H245_V76LogicalChannelParameters &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H2250LogicalChannelParameters &() const; #else operator H245_H2250LogicalChannelParameters &(); operator const H245_H2250LogicalChannelParameters &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // H223LogicalChannelParameters_adaptationLayerType_al3 // class H245_H223LogicalChannelParameters_adaptationLayerType_al3 : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223LogicalChannelParameters_adaptationLayerType_al3, PASN_Sequence); #endif public: H245_H223LogicalChannelParameters_adaptationLayerType_al3(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_controlFieldOctets; PASN_Integer m_sendBufferSize; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_RedundancyEncodingElement // class H245_RedundancyEncodingElement; class H245_ArrayOf_RedundancyEncodingElement : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_RedundancyEncodingElement, PASN_Array); #endif public: H245_ArrayOf_RedundancyEncodingElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_RedundancyEncodingElement & operator[](PINDEX i) const; PObject * Clone() const; }; // // DepFECData_rfc2733_mode // class H245_DepFECData_rfc2733_mode_separateStream; class H245_DepFECData_rfc2733_mode : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DepFECData_rfc2733_mode, PASN_Choice); #endif public: H245_DepFECData_rfc2733_mode(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_redundancyEncoding, e_separateStream }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DepFECData_rfc2733_mode_separateStream &() const; #else operator H245_DepFECData_rfc2733_mode_separateStream &(); operator const H245_DepFECData_rfc2733_mode_separateStream &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // FECData_rfc2733_pktMode // class H245_FECData_rfc2733_pktMode_rfc2733sameport; class H245_FECData_rfc2733_pktMode_rfc2733diffport; class H245_FECData_rfc2733_pktMode : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_FECData_rfc2733_pktMode, PASN_Choice); #endif public: H245_FECData_rfc2733_pktMode(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_rfc2198coding, e_rfc2733sameport, e_rfc2733diffport }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_FECData_rfc2733_pktMode_rfc2733sameport &() const; #else operator H245_FECData_rfc2733_pktMode_rfc2733sameport &(); operator const H245_FECData_rfc2733_pktMode_rfc2733sameport &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_FECData_rfc2733_pktMode_rfc2733diffport &() const; #else operator H245_FECData_rfc2733_pktMode_rfc2733diffport &(); operator const H245_FECData_rfc2733_pktMode_rfc2733diffport &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // UnicastAddress_iPSourceRouteAddress_routing // class H245_UnicastAddress_iPSourceRouteAddress_routing : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_UnicastAddress_iPSourceRouteAddress_routing, PASN_Choice); #endif public: H245_UnicastAddress_iPSourceRouteAddress_routing(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_strict, e_loose }; PBoolean CreateObject(); PObject * Clone() const; }; // // UnicastAddress_iPSourceRouteAddress_route // class H245_UnicastAddress_iPSourceRouteAddress_route : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_UnicastAddress_iPSourceRouteAddress_route, PASN_Array); #endif public: H245_UnicastAddress_iPSourceRouteAddress_route(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; PASN_OctetString & operator[](PINDEX i) const; PObject * Clone() const; }; // // OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters // class H245_H222LogicalChannelParameters; class H245_H2250LogicalChannelParameters; class H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters, PASN_Choice); #endif public: H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_h222LogicalChannelParameters, e_h2250LogicalChannelParameters }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H222LogicalChannelParameters &() const; #else operator H245_H222LogicalChannelParameters &(); operator const H245_H222LogicalChannelParameters &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_H2250LogicalChannelParameters &() const; #else operator H245_H2250LogicalChannelParameters &(); operator const H245_H2250LogicalChannelParameters &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // DepFECMode_rfc2733Mode_mode // class H245_DepFECMode_rfc2733Mode_mode_separateStream; class H245_DepFECMode_rfc2733Mode_mode : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DepFECMode_rfc2733Mode_mode, PASN_Choice); #endif public: H245_DepFECMode_rfc2733Mode_mode(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_redundancyEncoding, e_separateStream }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DepFECMode_rfc2733Mode_mode_separateStream &() const; #else operator H245_DepFECMode_rfc2733Mode_mode_separateStream &(); operator const H245_DepFECMode_rfc2733Mode_mode_separateStream &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // H223ModeParameters_adaptationLayerType_al3 // class H245_H223ModeParameters_adaptationLayerType_al3 : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223ModeParameters_adaptationLayerType_al3, PASN_Sequence); #endif public: H245_H223ModeParameters_adaptationLayerType_al3(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_controlFieldOctets; PASN_Integer m_sendBufferSize; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DataMode_application_nlpid // class H245_DataMode_application_nlpid : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DataMode_application_nlpid, PASN_Sequence); #endif public: H245_DataMode_application_nlpid(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_DataProtocolCapability m_nlpidProtocol; PASN_OctetString m_nlpidData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultilinkRequest_maximumHeaderInterval_requestType // class H245_MultilinkRequest_maximumHeaderInterval_requestType : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultilinkRequest_maximumHeaderInterval_requestType, PASN_Choice); #endif public: H245_MultilinkRequest_maximumHeaderInterval_requestType(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_currentIntervalInformation, e_requestedInterval }; PBoolean CreateObject(); PObject * Clone() const; }; // // MultilinkResponse_addConnection_responseCode // class H245_MultilinkResponse_addConnection_responseCode_rejected; class H245_MultilinkResponse_addConnection_responseCode : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultilinkResponse_addConnection_responseCode, PASN_Choice); #endif public: H245_MultilinkResponse_addConnection_responseCode(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_accepted, e_rejected }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_MultilinkResponse_addConnection_responseCode_rejected &() const; #else operator H245_MultilinkResponse_addConnection_responseCode_rejected &(); operator const H245_MultilinkResponse_addConnection_responseCode_rejected &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_CapabilityDescriptorNumber // class H245_CapabilityDescriptorNumber; class H245_ArrayOf_CapabilityDescriptorNumber : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_CapabilityDescriptorNumber, PASN_Array); #endif public: H245_ArrayOf_CapabilityDescriptorNumber(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_CapabilityDescriptorNumber & operator[](PINDEX i) const; PObject * Clone() const; }; // // MiscellaneousCommand_type_videoFastUpdateGOB // class H245_MiscellaneousCommand_type_videoFastUpdateGOB : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MiscellaneousCommand_type_videoFastUpdateGOB, PASN_Sequence); #endif public: H245_MiscellaneousCommand_type_videoFastUpdateGOB(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_firstGOB; PASN_Integer m_numberOfGOBs; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MiscellaneousCommand_type_videoFastUpdateMB // class H245_MiscellaneousCommand_type_videoFastUpdateMB : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MiscellaneousCommand_type_videoFastUpdateMB, PASN_Sequence); #endif public: H245_MiscellaneousCommand_type_videoFastUpdateMB(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_firstGOB, e_firstMB }; PASN_Integer m_firstGOB; PASN_Integer m_firstMB; PASN_Integer m_numberOfMBs; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MiscellaneousCommand_type_videoBadMBs // class H245_MiscellaneousCommand_type_videoBadMBs : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MiscellaneousCommand_type_videoBadMBs, PASN_Sequence); #endif public: H245_MiscellaneousCommand_type_videoBadMBs(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_firstMB; PASN_Integer m_numberOfMBs; PASN_Integer m_temporalReference; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_PictureReference // class H245_PictureReference; class H245_ArrayOf_PictureReference : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ArrayOf_PictureReference, PASN_Array); #endif public: H245_ArrayOf_PictureReference(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H245_PictureReference & operator[](PINDEX i) const; PObject * Clone() const; }; // // MiscellaneousCommand_type_lostPartialPicture // class H245_MiscellaneousCommand_type_lostPartialPicture : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MiscellaneousCommand_type_lostPartialPicture, PASN_Sequence); #endif public: H245_MiscellaneousCommand_type_lostPartialPicture(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_PictureReference m_pictureReference; PASN_Integer m_firstMB; PASN_Integer m_numberOfMBs; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MiscellaneousCommand_type_encryptionUpdateAck // class H245_MiscellaneousCommand_type_encryptionUpdateAck : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MiscellaneousCommand_type_encryptionUpdateAck, PASN_Sequence); #endif public: H245_MiscellaneousCommand_type_encryptionUpdateAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_synchFlag; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NewATMVCCommand_aal_aal5 // class H245_NewATMVCCommand_aal_aal5 : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NewATMVCCommand_aal_aal5, PASN_Sequence); #endif public: H245_NewATMVCCommand_aal_aal5(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_forwardMaximumSDUSize; PASN_Integer m_backwardMaximumSDUSize; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NewATMVCCommand_reverseParameters_multiplex // class H245_NewATMVCCommand_reverseParameters_multiplex : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NewATMVCCommand_reverseParameters_multiplex, PASN_Choice); #endif public: H245_NewATMVCCommand_reverseParameters_multiplex(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_noMultiplex, e_transportStream, e_programStream }; PBoolean CreateObject(); PObject * Clone() const; }; // // MiscellaneousIndication_type_videoNotDecodedMBs // class H245_MiscellaneousIndication_type_videoNotDecodedMBs : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MiscellaneousIndication_type_videoNotDecodedMBs, PASN_Sequence); #endif public: H245_MiscellaneousIndication_type_videoNotDecodedMBs(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_firstMB; PASN_Integer m_numberOfMBs; PASN_Integer m_temporalReference; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NewATMVCIndication_aal_aal5 // class H245_NewATMVCIndication_aal_aal5 : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NewATMVCIndication_aal_aal5, PASN_Sequence); #endif public: H245_NewATMVCIndication_aal_aal5(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_forwardMaximumSDUSize; PASN_Integer m_backwardMaximumSDUSize; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NewATMVCIndication_reverseParameters_multiplex // class H245_NewATMVCIndication_reverseParameters_multiplex : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NewATMVCIndication_reverseParameters_multiplex, PASN_Choice); #endif public: H245_NewATMVCIndication_reverseParameters_multiplex(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_noMultiplex, e_transportStream, e_programStream }; PBoolean CreateObject(); PObject * Clone() const; }; // // UserInputIndication_signal_rtp // class H245_UserInputIndication_signal_rtp : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_UserInputIndication_signal_rtp, PASN_Sequence); #endif public: H245_UserInputIndication_signal_rtp(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_timestamp, e_expirationTime }; PASN_Integer m_timestamp; PASN_Integer m_expirationTime; H245_LogicalChannelNumber m_logicalChannelNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UserInputIndication_signalUpdate_rtp // class H245_UserInputIndication_signalUpdate_rtp : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_UserInputIndication_signalUpdate_rtp, PASN_Sequence); #endif public: H245_UserInputIndication_signalUpdate_rtp(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_LogicalChannelNumber m_logicalChannelNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric // class H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric, PASN_Sequence); #endif public: H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_paramS }; PASN_ObjectId m_algorithmOID; H245_Params m_paramS; PASN_OctetString m_encrypted; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // VCCapability_availableBitRates_type_rangeOfBitRates // class H245_VCCapability_availableBitRates_type_rangeOfBitRates : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_VCCapability_availableBitRates_type_rangeOfBitRates, PASN_Sequence); #endif public: H245_VCCapability_availableBitRates_type_rangeOfBitRates(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_lowerBitRate; PASN_Integer m_higherBitRate; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CustomPictureFormat_mPI_customPCF_subtype // class H245_CustomPictureFormat_mPI_customPCF_subtype : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CustomPictureFormat_mPI_customPCF_subtype, PASN_Sequence); #endif public: H245_CustomPictureFormat_mPI_customPCF_subtype(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_clockConversionCode; PASN_Integer m_clockDivisor; PASN_Integer m_customMPI; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype // class H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype, PASN_Sequence); #endif public: H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_width; PASN_Integer m_height; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // V76LogicalChannelParameters_mode_eRM_recovery // class H245_V76LogicalChannelParameters_mode_eRM_recovery : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_V76LogicalChannelParameters_mode_eRM_recovery, PASN_Choice); #endif public: H245_V76LogicalChannelParameters_mode_eRM_recovery(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_rej, e_sREJ, e_mSREJ }; PBoolean CreateObject(); PObject * Clone() const; }; // // DepFECData_rfc2733_mode_separateStream // class H245_DepFECData_rfc2733_mode_separateStream_differentPort; class H245_DepFECData_rfc2733_mode_separateStream_samePort; class H245_DepFECData_rfc2733_mode_separateStream : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DepFECData_rfc2733_mode_separateStream, PASN_Choice); #endif public: H245_DepFECData_rfc2733_mode_separateStream(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_differentPort, e_samePort }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DepFECData_rfc2733_mode_separateStream_differentPort &() const; #else operator H245_DepFECData_rfc2733_mode_separateStream_differentPort &(); operator const H245_DepFECData_rfc2733_mode_separateStream_differentPort &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DepFECData_rfc2733_mode_separateStream_samePort &() const; #else operator H245_DepFECData_rfc2733_mode_separateStream_samePort &(); operator const H245_DepFECData_rfc2733_mode_separateStream_samePort &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // FECData_rfc2733_pktMode_rfc2733sameport // class H245_FECData_rfc2733_pktMode_rfc2733sameport : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_FECData_rfc2733_pktMode_rfc2733sameport, PASN_Sequence); #endif public: H245_FECData_rfc2733_pktMode_rfc2733sameport(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // FECData_rfc2733_pktMode_rfc2733diffport // class H245_FECData_rfc2733_pktMode_rfc2733diffport : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_FECData_rfc2733_pktMode_rfc2733diffport, PASN_Sequence); #endif public: H245_FECData_rfc2733_pktMode_rfc2733diffport(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_LogicalChannelNumber m_protectedChannel; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DepFECMode_rfc2733Mode_mode_separateStream // class H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort; class H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort; class H245_DepFECMode_rfc2733Mode_mode_separateStream : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DepFECMode_rfc2733Mode_mode_separateStream, PASN_Choice); #endif public: H245_DepFECMode_rfc2733Mode_mode_separateStream(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_differentPort, e_samePort }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort &() const; #else operator H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort &(); operator const H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort &() const; #else operator H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort &(); operator const H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // MultilinkResponse_addConnection_responseCode_rejected // class H245_MultilinkResponse_addConnection_responseCode_rejected : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultilinkResponse_addConnection_responseCode_rejected, PASN_Choice); #endif public: H245_MultilinkResponse_addConnection_responseCode_rejected(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_connectionsNotAvailable, e_userRejected }; PBoolean CreateObject(); PObject * Clone() const; }; // // MiscellaneousCommand_type_progressiveRefinementStart_repeatCount // class H245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCount : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCount, PASN_Choice); #endif public: H245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCount(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_doOneProgression, e_doContinuousProgressions, e_doOneIndependentProgression, e_doContinuousIndependentProgressions }; PBoolean CreateObject(); PObject * Clone() const; }; // // NewATMVCCommand_aal_aal1_clockRecovery // class H245_NewATMVCCommand_aal_aal1_clockRecovery : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NewATMVCCommand_aal_aal1_clockRecovery, PASN_Choice); #endif public: H245_NewATMVCCommand_aal_aal1_clockRecovery(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nullClockRecovery, e_srtsClockRecovery, e_adaptiveClockRecovery }; PBoolean CreateObject(); PObject * Clone() const; }; // // NewATMVCCommand_aal_aal1_errorCorrection // class H245_NewATMVCCommand_aal_aal1_errorCorrection : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NewATMVCCommand_aal_aal1_errorCorrection, PASN_Choice); #endif public: H245_NewATMVCCommand_aal_aal1_errorCorrection(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nullErrorCorrection, e_longInterleaver, e_shortInterleaver, e_errorCorrectionOnly }; PBoolean CreateObject(); PObject * Clone() const; }; // // NewATMVCIndication_aal_aal1_clockRecovery // class H245_NewATMVCIndication_aal_aal1_clockRecovery : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NewATMVCIndication_aal_aal1_clockRecovery, PASN_Choice); #endif public: H245_NewATMVCIndication_aal_aal1_clockRecovery(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nullClockRecovery, e_srtsClockRecovery, e_adaptiveClockRecovery }; PBoolean CreateObject(); PObject * Clone() const; }; // // NewATMVCIndication_aal_aal1_errorCorrection // class H245_NewATMVCIndication_aal_aal1_errorCorrection : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NewATMVCIndication_aal_aal1_errorCorrection, PASN_Choice); #endif public: H245_NewATMVCIndication_aal_aal1_errorCorrection(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_nullErrorCorrection, e_longInterleaver, e_shortInterleaver, e_errorCorrectionOnly }; PBoolean CreateObject(); PObject * Clone() const; }; // // DepFECData_rfc2733_mode_separateStream_differentPort // class H245_DepFECData_rfc2733_mode_separateStream_differentPort : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DepFECData_rfc2733_mode_separateStream_differentPort, PASN_Sequence); #endif public: H245_DepFECData_rfc2733_mode_separateStream_differentPort(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_protectedPayloadType }; PASN_Integer m_protectedSessionID; PASN_Integer m_protectedPayloadType; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DepFECData_rfc2733_mode_separateStream_samePort // class H245_DepFECData_rfc2733_mode_separateStream_samePort : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DepFECData_rfc2733_mode_separateStream_samePort, PASN_Sequence); #endif public: H245_DepFECData_rfc2733_mode_separateStream_samePort(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_protectedPayloadType; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DepFECMode_rfc2733Mode_mode_separateStream_differentPort // class H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort, PASN_Sequence); #endif public: H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_protectedPayloadType }; PASN_Integer m_protectedSessionID; PASN_Integer m_protectedPayloadType; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DepFECMode_rfc2733Mode_mode_separateStream_samePort // class H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort, PASN_Sequence); #endif public: H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_ModeElementType m_protectedType; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // GenericMessage // class H245_GenericMessage : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_GenericMessage, PASN_Sequence); #endif public: H245_GenericMessage(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_subMessageIdentifier, e_messageContent }; H245_CapabilityIdentifier m_messageIdentifier; PASN_Integer m_subMessageIdentifier; H245_ArrayOf_GenericParameter m_messageContent; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // GenericInformation // class H245_GenericInformation : public H245_GenericMessage { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_GenericInformation, H245_GenericMessage); #endif public: H245_GenericInformation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PObject * Clone() const; }; // // NonStandardParameter // class H245_NonStandardParameter : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NonStandardParameter, PASN_Sequence); #endif public: H245_NonStandardParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_NonStandardIdentifier m_nonStandardIdentifier; PASN_OctetString m_data; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MasterSlaveDeterminationAck // class H245_MasterSlaveDeterminationAck : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MasterSlaveDeterminationAck, PASN_Sequence); #endif public: H245_MasterSlaveDeterminationAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_MasterSlaveDeterminationAck_decision m_decision; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MasterSlaveDeterminationReject // class H245_MasterSlaveDeterminationReject : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MasterSlaveDeterminationReject, PASN_Sequence); #endif public: H245_MasterSlaveDeterminationReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_MasterSlaveDeterminationReject_cause m_cause; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TerminalCapabilitySet // class H245_TerminalCapabilitySet : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_TerminalCapabilitySet, PASN_Sequence); #endif public: H245_TerminalCapabilitySet(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_multiplexCapability, e_capabilityTable, e_capabilityDescriptors, e_genericInformation }; H245_SequenceNumber m_sequenceNumber; PASN_ObjectId m_protocolIdentifier; H245_MultiplexCapability m_multiplexCapability; H245_ArrayOf_CapabilityTableEntry m_capabilityTable; H245_ArrayOf_CapabilityDescriptor m_capabilityDescriptors; H245_ArrayOf_GenericInformation m_genericInformation; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CapabilityTableEntry // class H245_CapabilityTableEntry : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CapabilityTableEntry, PASN_Sequence); #endif public: H245_CapabilityTableEntry(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_capability }; H245_CapabilityTableEntryNumber m_capabilityTableEntryNumber; H245_Capability m_capability; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CapabilityDescriptor // class H245_CapabilityDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CapabilityDescriptor, PASN_Sequence); #endif public: H245_CapabilityDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_simultaneousCapabilities }; H245_CapabilityDescriptorNumber m_capabilityDescriptorNumber; H245_ArrayOf_AlternativeCapabilitySet m_simultaneousCapabilities; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TerminalCapabilitySetAck // class H245_TerminalCapabilitySetAck : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_TerminalCapabilitySetAck, PASN_Sequence); #endif public: H245_TerminalCapabilitySetAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_genericInformation }; H245_SequenceNumber m_sequenceNumber; H245_ArrayOf_GenericInformation m_genericInformation; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TerminalCapabilitySetReject // class H245_TerminalCapabilitySetReject : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_TerminalCapabilitySetReject, PASN_Sequence); #endif public: H245_TerminalCapabilitySetReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_genericInformation }; H245_SequenceNumber m_sequenceNumber; H245_TerminalCapabilitySetReject_cause m_cause; H245_ArrayOf_GenericInformation m_genericInformation; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TerminalCapabilitySetRelease // class H245_TerminalCapabilitySetRelease : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_TerminalCapabilitySetRelease, PASN_Sequence); #endif public: H245_TerminalCapabilitySetRelease(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_genericInformation }; H245_ArrayOf_GenericInformation m_genericInformation; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // H222Capability // class H245_H222Capability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H222Capability, PASN_Sequence); #endif public: H245_H222Capability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_numberOfVCs; H245_ArrayOf_VCCapability m_vcCapability; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H223Capability // class H245_H223Capability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223Capability, PASN_Sequence); #endif public: H245_H223Capability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_maxMUXPDUSizeCapability, e_nsrpSupport, e_mobileOperationTransmitCapability, e_h223AnnexCCapability, e_bitRate, e_mobileMultilinkFrameCapability }; PASN_Boolean m_transportWithI_frames; PASN_Boolean m_videoWithAL1; PASN_Boolean m_videoWithAL2; PASN_Boolean m_videoWithAL3; PASN_Boolean m_audioWithAL1; PASN_Boolean m_audioWithAL2; PASN_Boolean m_audioWithAL3; PASN_Boolean m_dataWithAL1; PASN_Boolean m_dataWithAL2; PASN_Boolean m_dataWithAL3; PASN_Integer m_maximumAl2SDUSize; PASN_Integer m_maximumAl3SDUSize; PASN_Integer m_maximumDelayJitter; H245_H223Capability_h223MultiplexTableCapability m_h223MultiplexTableCapability; PASN_Boolean m_maxMUXPDUSizeCapability; PASN_Boolean m_nsrpSupport; H245_H223Capability_mobileOperationTransmitCapability m_mobileOperationTransmitCapability; H245_H223AnnexCCapability m_h223AnnexCCapability; PASN_Integer m_bitRate; H245_H223Capability_mobileMultilinkFrameCapability m_mobileMultilinkFrameCapability; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // V76Capability // class H245_V76Capability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_V76Capability, PASN_Sequence); #endif public: H245_V76Capability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_suspendResumeCapabilitywAddress; PASN_Boolean m_suspendResumeCapabilitywoAddress; PASN_Boolean m_rejCapability; PASN_Boolean m_sREJCapability; PASN_Boolean m_mREJCapability; PASN_Boolean m_crc8bitCapability; PASN_Boolean m_crc16bitCapability; PASN_Boolean m_crc32bitCapability; PASN_Boolean m_uihCapability; PASN_Integer m_numOfDLCS; PASN_Boolean m_twoOctetAddressFieldCapability; PASN_Boolean m_loopBackTestCapability; PASN_Integer m_n401Capability; PASN_Integer m_maxWindowSizeCapability; H245_V75Capability m_v75Capability; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MediaPacketizationCapability // class H245_MediaPacketizationCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MediaPacketizationCapability, PASN_Sequence); #endif public: H245_MediaPacketizationCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_rtpPayloadType }; PASN_Boolean m_h261aVideoPacketization; H245_ArrayOf_RTPPayloadType m_rtpPayloadType; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RSVPParameters // class H245_RSVPParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RSVPParameters, PASN_Sequence); #endif public: H245_RSVPParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_qosMode, e_tokenRate, e_bucketSize, e_peakRate, e_minPoliced, e_maxPktSize }; H245_QOSMode m_qosMode; PASN_Integer m_tokenRate; PASN_Integer m_bucketSize; PASN_Integer m_peakRate; PASN_Integer m_minPoliced; PASN_Integer m_maxPktSize; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ServicePriorityValue // class H245_ServicePriorityValue : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ServicePriorityValue, PASN_Sequence); #endif public: H245_ServicePriorityValue(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardParameter }; H245_NonStandardParameter m_nonStandardParameter; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ServicePriority // class H245_ServicePriority : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ServicePriority, PASN_Sequence); #endif public: H245_ServicePriority(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_servicePriorityValue }; H245_NonStandardParameter m_nonStandardData; PASN_Boolean m_servicePrioritySignalled; H245_ServicePriorityValue m_servicePriorityValue; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AuthorizationParameters // class H245_AuthorizationParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_AuthorizationParameters, PASN_Sequence); #endif public: H245_AuthorizationParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData }; H245_NonStandardParameter m_nonStandardData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // QOSDescriptor // class H245_QOSDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_QOSDescriptor, PASN_Sequence); #endif public: H245_QOSDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData }; H245_NonStandardParameter m_nonStandardData; H245_QOSType m_qosType; H245_QOSClass m_qosClass; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // GenericTransportParameters // class H245_GenericTransportParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_GenericTransportParameters, PASN_Sequence); #endif public: H245_GenericTransportParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_averageRate, e_burst, e_peakRate, e_maxPktSize }; H245_NonStandardParameter m_nonStandardData; PASN_Integer m_averageRate; PASN_Integer m_burst; PASN_Integer m_peakRate; PASN_Integer m_maxPktSize; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // QOSCapability // class H245_QOSCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_QOSCapability, PASN_Sequence); #endif public: H245_QOSCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_rsvpParameters, e_atmParameters, e_localQoS, e_genericTransportParameters, e_servicePriority, e_authorizationParameter, e_qosDescriptor, e_dscpValue }; H245_NonStandardParameter m_nonStandardData; H245_RSVPParameters m_rsvpParameters; H245_ATMParameters m_atmParameters; PASN_Boolean m_localQoS; H245_GenericTransportParameters m_genericTransportParameters; H245_ServicePriority m_servicePriority; H245_AuthorizationParameters m_authorizationParameter; H245_QOSDescriptor m_qosDescriptor; PASN_Integer m_dscpValue; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TransportCapability // class H245_TransportCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_TransportCapability, PASN_Sequence); #endif public: H245_TransportCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandard, e_qOSCapabilities, e_mediaChannelCapabilities }; H245_NonStandardParameter m_nonStandard; H245_ArrayOf_QOSCapability m_qOSCapabilities; H245_ArrayOf_MediaChannelCapability m_mediaChannelCapabilities; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RedundancyEncodingCapability // class H245_RedundancyEncodingCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RedundancyEncodingCapability, PASN_Sequence); #endif public: H245_RedundancyEncodingCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_secondaryEncoding }; H245_RedundancyEncodingMethod m_redundancyEncodingMethod; H245_CapabilityTableEntryNumber m_primaryEncoding; H245_ArrayOf_CapabilityTableEntryNumber m_secondaryEncoding; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RTPH263VideoRedundancyEncoding // class H245_RTPH263VideoRedundancyEncoding : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RTPH263VideoRedundancyEncoding, PASN_Sequence); #endif public: H245_RTPH263VideoRedundancyEncoding(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_containedThreads }; PASN_Integer m_numberOfThreads; PASN_Integer m_framesBetweenSyncPoints; H245_RTPH263VideoRedundancyEncoding_frameToThreadMapping m_frameToThreadMapping; H245_RTPH263VideoRedundancyEncoding_containedThreads m_containedThreads; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RTPH263VideoRedundancyFrameMapping // class H245_RTPH263VideoRedundancyFrameMapping : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RTPH263VideoRedundancyFrameMapping, PASN_Sequence); #endif public: H245_RTPH263VideoRedundancyFrameMapping(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_threadNumber; H245_RTPH263VideoRedundancyFrameMapping_frameSequence m_frameSequence; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultipointCapability // class H245_MultipointCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultipointCapability, PASN_Sequence); #endif public: H245_MultipointCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_multicastCapability; PASN_Boolean m_multiUniCastConference; H245_ArrayOf_MediaDistributionCapability m_mediaDistributionCapability; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MediaDistributionCapability // class H245_MediaDistributionCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MediaDistributionCapability, PASN_Sequence); #endif public: H245_MediaDistributionCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_centralizedData, e_distributedData }; PASN_Boolean m_centralizedControl; PASN_Boolean m_distributedControl; PASN_Boolean m_centralizedAudio; PASN_Boolean m_distributedAudio; PASN_Boolean m_centralizedVideo; PASN_Boolean m_distributedVideo; H245_ArrayOf_DataApplicationCapability m_centralizedData; H245_ArrayOf_DataApplicationCapability m_distributedData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ExtendedVideoCapability // class H245_ExtendedVideoCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ExtendedVideoCapability, PASN_Sequence); #endif public: H245_ExtendedVideoCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_videoCapabilityExtension }; H245_ArrayOf_VideoCapability m_videoCapability; H245_ArrayOf_GenericCapability m_videoCapabilityExtension; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // EnhancementLayerInfo // class H245_EnhancementLayerInfo : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_EnhancementLayerInfo, PASN_Sequence); #endif public: H245_EnhancementLayerInfo(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_snrEnhancement, e_spatialEnhancement, e_bPictureEnhancement }; PASN_Boolean m_baseBitRateConstrained; H245_ArrayOf_EnhancementOptions m_snrEnhancement; H245_ArrayOf_EnhancementOptions m_spatialEnhancement; H245_ArrayOf_BEnhancementParameters m_bPictureEnhancement; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H263ModeComboFlags // class H245_H263ModeComboFlags : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H263ModeComboFlags, PASN_Sequence); #endif public: H245_H263ModeComboFlags(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_enhancedReferencePicSelect, e_h263Version3Options }; PASN_Boolean m_unrestrictedVector; PASN_Boolean m_arithmeticCoding; PASN_Boolean m_advancedPrediction; PASN_Boolean m_pbFrames; PASN_Boolean m_advancedIntraCodingMode; PASN_Boolean m_deblockingFilterMode; PASN_Boolean m_unlimitedMotionVectors; PASN_Boolean m_slicesInOrder_NonRect; PASN_Boolean m_slicesInOrder_Rect; PASN_Boolean m_slicesNoOrder_NonRect; PASN_Boolean m_slicesNoOrder_Rect; PASN_Boolean m_improvedPBFramesMode; PASN_Boolean m_referencePicSelect; PASN_Boolean m_dynamicPictureResizingByFour; PASN_Boolean m_dynamicPictureResizingSixteenthPel; PASN_Boolean m_dynamicWarpingHalfPel; PASN_Boolean m_dynamicWarpingSixteenthPel; PASN_Boolean m_reducedResolutionUpdate; PASN_Boolean m_independentSegmentDecoding; PASN_Boolean m_alternateInterVLCMode; PASN_Boolean m_modifiedQuantizationMode; PASN_Boolean m_enhancedReferencePicSelect; H245_H263Version3Options m_h263Version3Options; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // G7231AnnexCCapability // class H245_G7231AnnexCCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_G7231AnnexCCapability, PASN_Sequence); #endif public: H245_G7231AnnexCCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_g723AnnexCAudioMode }; PASN_Integer m_maxAl_sduAudioFrames; PASN_Boolean m_silenceSuppression; H245_G7231AnnexCCapability_g723AnnexCAudioMode m_g723AnnexCAudioMode; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DataApplicationCapability // class H245_DataApplicationCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DataApplicationCapability, PASN_Sequence); #endif public: H245_DataApplicationCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_DataApplicationCapability_application m_application; PASN_Integer m_maxBitRate; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // T38FaxUdpOptions // class H245_T38FaxUdpOptions : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_T38FaxUdpOptions, PASN_Sequence); #endif public: H245_T38FaxUdpOptions(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_t38FaxMaxBuffer, e_t38FaxMaxDatagram }; PASN_Integer m_t38FaxMaxBuffer; PASN_Integer m_t38FaxMaxDatagram; H245_T38FaxUdpOptions_t38FaxUdpEC m_t38FaxUdpEC; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AuthenticationCapability // class H245_AuthenticationCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_AuthenticationCapability, PASN_Sequence); #endif public: H245_AuthenticationCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandard, e_antiSpamAlgorithm }; H245_NonStandardParameter m_nonStandard; PASN_ObjectId m_antiSpamAlgorithm; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IntegrityCapability // class H245_IntegrityCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_IntegrityCapability, PASN_Sequence); #endif public: H245_IntegrityCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandard }; H245_NonStandardParameter m_nonStandard; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceCapability // class H245_ConferenceCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ConferenceCapability, PASN_Sequence); #endif public: H245_ConferenceCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandardData, e_videoIndicateMixingCapability, e_multipointVisualizationCapability }; H245_ArrayOf_NonStandardParameter m_nonStandardData; PASN_Boolean m_chairControlCapability; PASN_Boolean m_videoIndicateMixingCapability; PASN_Boolean m_multipointVisualizationCapability; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // GenericCapability // class H245_GenericCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_GenericCapability, PASN_Sequence); #endif public: H245_GenericCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_maxBitRate, e_collapsing, e_nonCollapsing, e_nonCollapsingRaw, e_transport }; H245_CapabilityIdentifier m_capabilityIdentifier; PASN_Integer m_maxBitRate; H245_ArrayOf_GenericParameter m_collapsing; H245_ArrayOf_GenericParameter m_nonCollapsing; PASN_OctetString m_nonCollapsingRaw; H245_DataProtocolCapability m_transport; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // GenericParameter // class H245_GenericParameter : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_GenericParameter, PASN_Sequence); #endif public: H245_GenericParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_supersedes }; H245_ParameterIdentifier m_parameterIdentifier; H245_ParameterValue m_parameterValue; H245_ArrayOf_ParameterIdentifier m_supersedes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultiplexedStreamCapability // class H245_MultiplexedStreamCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultiplexedStreamCapability, PASN_Sequence); #endif public: H245_MultiplexedStreamCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_capabilityOnMuxStream }; H245_MultiplexFormat m_multiplexFormat; PASN_Boolean m_controlOnMuxStream; H245_ArrayOf_AlternativeCapabilitySet m_capabilityOnMuxStream; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultiplePayloadStreamCapability // class H245_MultiplePayloadStreamCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultiplePayloadStreamCapability, PASN_Sequence); #endif public: H245_MultiplePayloadStreamCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_ArrayOf_AlternativeCapabilitySet m_capabilities; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // FECCapability // class H245_FECCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_FECCapability, PASN_Sequence); #endif public: H245_FECCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_fecScheme, e_rfc2733Format }; H245_CapabilityTableEntryNumber m_protectedCapability; PASN_ObjectId m_fecScheme; H245_FECCapability_rfc2733Format m_rfc2733Format; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NetworkAccessParameters // class H245_NetworkAccessParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NetworkAccessParameters, PASN_Sequence); #endif public: H245_NetworkAccessParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_distribution, e_externalReference, e_t120SetupProcedure }; H245_NetworkAccessParameters_distribution m_distribution; H245_NetworkAccessParameters_networkAddress m_networkAddress; PASN_Boolean m_associateConference; PASN_OctetString m_externalReference; H245_NetworkAccessParameters_t120SetupProcedure m_t120SetupProcedure; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Q2931Address // class H245_Q2931Address : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_Q2931Address, PASN_Sequence); #endif public: H245_Q2931Address(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_subaddress }; H245_Q2931Address_address m_address; PASN_OctetString m_subaddress; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H223LogicalChannelParameters // class H245_H223LogicalChannelParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223LogicalChannelParameters, PASN_Sequence); #endif public: H245_H223LogicalChannelParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_H223LogicalChannelParameters_adaptationLayerType m_adaptationLayerType; PASN_Boolean m_segmentableFlag; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H223AL1MParameters // class H245_H223AL1MParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223AL1MParameters, PASN_Sequence); #endif public: H245_H223AL1MParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_rsCodeCorrection }; H245_H223AL1MParameters_transferMode m_transferMode; H245_H223AL1MParameters_headerFEC m_headerFEC; H245_H223AL1MParameters_crcLength m_crcLength; PASN_Integer m_rcpcCodeRate; H245_H223AL1MParameters_arqType m_arqType; PASN_Boolean m_alpduInterleaving; PASN_Boolean m_alsduSplitting; PASN_Integer m_rsCodeCorrection; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H223AL2MParameters // class H245_H223AL2MParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223AL2MParameters, PASN_Sequence); #endif public: H245_H223AL2MParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_H223AL2MParameters_headerFEC m_headerFEC; PASN_Boolean m_alpduInterleaving; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H223AL3MParameters // class H245_H223AL3MParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223AL3MParameters, PASN_Sequence); #endif public: H245_H223AL3MParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_rsCodeCorrection }; H245_H223AL3MParameters_headerFormat m_headerFormat; H245_H223AL3MParameters_crcLength m_crcLength; PASN_Integer m_rcpcCodeRate; H245_H223AL3MParameters_arqType m_arqType; PASN_Boolean m_alpduInterleaving; PASN_Integer m_rsCodeCorrection; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H223AnnexCArqParameters // class H245_H223AnnexCArqParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223AnnexCArqParameters, PASN_Sequence); #endif public: H245_H223AnnexCArqParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_H223AnnexCArqParameters_numberOfRetransmissions m_numberOfRetransmissions; PASN_Integer m_sendBufferSize; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // V76HDLCParameters // class H245_V76HDLCParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_V76HDLCParameters, PASN_Sequence); #endif public: H245_V76HDLCParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_CRCLength m_crcLength; PASN_Integer m_n401; PASN_Boolean m_loopbackTestProcedure; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RTPPayloadType // class H245_RTPPayloadType : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RTPPayloadType, PASN_Sequence); #endif public: H245_RTPPayloadType(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_payloadType }; H245_RTPPayloadType_payloadDescriptor m_payloadDescriptor; PASN_Integer m_payloadType; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultiplePayloadStream // class H245_MultiplePayloadStream : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultiplePayloadStream, PASN_Sequence); #endif public: H245_MultiplePayloadStream(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_ArrayOf_MultiplePayloadStreamElement m_elements; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // EncryptionSync // class H245_EncryptionSync : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_EncryptionSync, PASN_Sequence); #endif public: H245_EncryptionSync(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandard, e_escrowentry, e_genericParameter }; H245_NonStandardParameter m_nonStandard; PASN_Integer m_synchFlag; PASN_OctetString m_h235Key; H245_ArrayOf_EscrowData m_escrowentry; H245_GenericParameter m_genericParameter; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // OpenLogicalChannelReject // class H245_OpenLogicalChannelReject : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_OpenLogicalChannelReject, PASN_Sequence); #endif public: H245_OpenLogicalChannelReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_genericInformation }; H245_LogicalChannelNumber m_forwardLogicalChannelNumber; H245_OpenLogicalChannelReject_cause m_cause; H245_ArrayOf_GenericInformation m_genericInformation; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // OpenLogicalChannelConfirm // class H245_OpenLogicalChannelConfirm : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_OpenLogicalChannelConfirm, PASN_Sequence); #endif public: H245_OpenLogicalChannelConfirm(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_genericInformation }; H245_LogicalChannelNumber m_forwardLogicalChannelNumber; H245_ArrayOf_GenericInformation m_genericInformation; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H2250LogicalChannelAckParameters // class H245_H2250LogicalChannelAckParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H2250LogicalChannelAckParameters, PASN_Sequence); #endif public: H245_H2250LogicalChannelAckParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandard, e_sessionID, e_mediaChannel, e_mediaControlChannel, e_dynamicRTPPayloadType, e_flowControlToZero, e_portNumber }; H245_ArrayOf_NonStandardParameter m_nonStandard; PASN_Integer m_sessionID; H245_TransportAddress m_mediaChannel; H245_TransportAddress m_mediaControlChannel; PASN_Integer m_dynamicRTPPayloadType; PASN_Boolean m_flowControlToZero; PASN_Integer m_portNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CloseLogicalChannel // class H245_CloseLogicalChannel : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CloseLogicalChannel, PASN_Sequence); #endif public: H245_CloseLogicalChannel(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_reason }; H245_LogicalChannelNumber m_forwardLogicalChannelNumber; H245_CloseLogicalChannel_source m_source; H245_CloseLogicalChannel_reason m_reason; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RequestChannelClose // class H245_RequestChannelClose : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RequestChannelClose, PASN_Sequence); #endif public: H245_RequestChannelClose(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_qosCapability, e_reason }; H245_LogicalChannelNumber m_forwardLogicalChannelNumber; H245_QOSCapability m_qosCapability; H245_RequestChannelClose_reason m_reason; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RequestChannelCloseReject // class H245_RequestChannelCloseReject : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RequestChannelCloseReject, PASN_Sequence); #endif public: H245_RequestChannelCloseReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_LogicalChannelNumber m_forwardLogicalChannelNumber; H245_RequestChannelCloseReject_cause m_cause; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultiplexEntrySend // class H245_MultiplexEntrySend : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultiplexEntrySend, PASN_Sequence); #endif public: H245_MultiplexEntrySend(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_SequenceNumber m_sequenceNumber; H245_ArrayOf_MultiplexEntryDescriptor m_multiplexEntryDescriptors; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultiplexEntryDescriptor // class H245_MultiplexEntryDescriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultiplexEntryDescriptor, PASN_Sequence); #endif public: H245_MultiplexEntryDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_elementList }; H245_MultiplexTableEntryNumber m_multiplexTableEntryNumber; H245_ArrayOf_MultiplexElement m_elementList; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultiplexElement // class H245_MultiplexElement : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultiplexElement, PASN_Sequence); #endif public: H245_MultiplexElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_MultiplexElement_type m_type; H245_MultiplexElement_repeatCount m_repeatCount; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultiplexEntrySendAck // class H245_MultiplexEntrySendAck : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultiplexEntrySendAck, PASN_Sequence); #endif public: H245_MultiplexEntrySendAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_SequenceNumber m_sequenceNumber; H245_ArrayOf_MultiplexTableEntryNumber m_multiplexTableEntryNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultiplexEntrySendReject // class H245_MultiplexEntrySendReject : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultiplexEntrySendReject, PASN_Sequence); #endif public: H245_MultiplexEntrySendReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_SequenceNumber m_sequenceNumber; H245_ArrayOf_MultiplexEntryRejectionDescriptions m_rejectionDescriptions; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultiplexEntryRejectionDescriptions // class H245_MultiplexEntryRejectionDescriptions : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultiplexEntryRejectionDescriptions, PASN_Sequence); #endif public: H245_MultiplexEntryRejectionDescriptions(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_MultiplexTableEntryNumber m_multiplexTableEntryNumber; H245_MultiplexEntryRejectionDescriptions_cause m_cause; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultiplexEntrySendRelease // class H245_MultiplexEntrySendRelease : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultiplexEntrySendRelease, PASN_Sequence); #endif public: H245_MultiplexEntrySendRelease(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_ArrayOf_MultiplexTableEntryNumber m_multiplexTableEntryNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RequestMultiplexEntry // class H245_RequestMultiplexEntry : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RequestMultiplexEntry, PASN_Sequence); #endif public: H245_RequestMultiplexEntry(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_ArrayOf_MultiplexTableEntryNumber m_entryNumbers; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RequestMultiplexEntryAck // class H245_RequestMultiplexEntryAck : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RequestMultiplexEntryAck, PASN_Sequence); #endif public: H245_RequestMultiplexEntryAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_ArrayOf_MultiplexTableEntryNumber m_entryNumbers; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RequestMultiplexEntryReject // class H245_RequestMultiplexEntryReject : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RequestMultiplexEntryReject, PASN_Sequence); #endif public: H245_RequestMultiplexEntryReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_ArrayOf_MultiplexTableEntryNumber m_entryNumbers; H245_ArrayOf_RequestMultiplexEntryRejectionDescriptions m_rejectionDescriptions; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RequestMultiplexEntryRejectionDescriptions // class H245_RequestMultiplexEntryRejectionDescriptions : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RequestMultiplexEntryRejectionDescriptions, PASN_Sequence); #endif public: H245_RequestMultiplexEntryRejectionDescriptions(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_MultiplexTableEntryNumber m_multiplexTableEntryNumber; H245_RequestMultiplexEntryRejectionDescriptions_cause m_cause; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RequestMultiplexEntryRelease // class H245_RequestMultiplexEntryRelease : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RequestMultiplexEntryRelease, PASN_Sequence); #endif public: H245_RequestMultiplexEntryRelease(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_ArrayOf_MultiplexTableEntryNumber m_entryNumbers; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RequestMode // class H245_RequestMode : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RequestMode, PASN_Sequence); #endif public: H245_RequestMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_SequenceNumber m_sequenceNumber; H245_ArrayOf_ModeDescription m_requestedModes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RequestModeAck // class H245_RequestModeAck : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RequestModeAck, PASN_Sequence); #endif public: H245_RequestModeAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_SequenceNumber m_sequenceNumber; H245_RequestModeAck_response m_response; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RequestModeReject // class H245_RequestModeReject : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RequestModeReject, PASN_Sequence); #endif public: H245_RequestModeReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_SequenceNumber m_sequenceNumber; H245_RequestModeReject_cause m_cause; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RedundancyEncodingDTModeElement // class H245_RedundancyEncodingDTModeElement : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RedundancyEncodingDTModeElement, PASN_Sequence); #endif public: H245_RedundancyEncodingDTModeElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_RedundancyEncodingDTModeElement_type m_type; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultiplePayloadStreamMode // class H245_MultiplePayloadStreamMode : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultiplePayloadStreamMode, PASN_Sequence); #endif public: H245_MultiplePayloadStreamMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_ArrayOf_MultiplePayloadStreamElementMode m_elements; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // FECMode // class H245_FECMode : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_FECMode, PASN_Sequence); #endif public: H245_FECMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_fecScheme, e_rfc2733Format }; H245_ModeElementType m_protectedElement; PASN_ObjectId m_fecScheme; H245_FECMode_rfc2733Format m_rfc2733Format; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H223ModeParameters // class H245_H223ModeParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H223ModeParameters, PASN_Sequence); #endif public: H245_H223ModeParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_H223ModeParameters_adaptationLayerType m_adaptationLayerType; PASN_Boolean m_segmentableFlag; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RedundancyEncodingMode // class H245_RedundancyEncodingMode : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RedundancyEncodingMode, PASN_Sequence); #endif public: H245_RedundancyEncodingMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_secondaryEncoding }; H245_RedundancyEncodingMethod m_redundancyEncodingMethod; H245_RedundancyEncodingMode_secondaryEncoding m_secondaryEncoding; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H261VideoMode // class H245_H261VideoMode : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H261VideoMode, PASN_Sequence); #endif public: H245_H261VideoMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_H261VideoMode_resolution m_resolution; PASN_Integer m_bitRate; PASN_Boolean m_stillImageTransmission; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H262VideoMode // class H245_H262VideoMode : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H262VideoMode, PASN_Sequence); #endif public: H245_H262VideoMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_videoBitRate, e_vbvBufferSize, e_samplesPerLine, e_linesPerFrame, e_framesPerSecond, e_luminanceSampleRate }; H245_H262VideoMode_profileAndLevel m_profileAndLevel; PASN_Integer m_videoBitRate; PASN_Integer m_vbvBufferSize; PASN_Integer m_samplesPerLine; PASN_Integer m_linesPerFrame; PASN_Integer m_framesPerSecond; PASN_Integer m_luminanceSampleRate; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IS11172AudioMode // class H245_IS11172AudioMode : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_IS11172AudioMode, PASN_Sequence); #endif public: H245_IS11172AudioMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_IS11172AudioMode_audioLayer m_audioLayer; H245_IS11172AudioMode_audioSampling m_audioSampling; H245_IS11172AudioMode_multichannelType m_multichannelType; PASN_Integer m_bitRate; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // IS13818AudioMode // class H245_IS13818AudioMode : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_IS13818AudioMode, PASN_Sequence); #endif public: H245_IS13818AudioMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_IS13818AudioMode_audioLayer m_audioLayer; H245_IS13818AudioMode_audioSampling m_audioSampling; H245_IS13818AudioMode_multichannelType m_multichannelType; PASN_Boolean m_lowFrequencyEnhancement; PASN_Boolean m_multilingual; PASN_Integer m_bitRate; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // G7231AnnexCMode // class H245_G7231AnnexCMode : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_G7231AnnexCMode, PASN_Sequence); #endif public: H245_G7231AnnexCMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_maxAl_sduAudioFrames; PASN_Boolean m_silenceSuppression; H245_G7231AnnexCMode_g723AnnexCAudioMode m_g723AnnexCAudioMode; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DataMode // class H245_DataMode : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DataMode, PASN_Sequence); #endif public: H245_DataMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_DataMode_application m_application; PASN_Integer m_bitRate; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MaintenanceLoopRequest // class H245_MaintenanceLoopRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MaintenanceLoopRequest, PASN_Sequence); #endif public: H245_MaintenanceLoopRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_MaintenanceLoopRequest_type m_type; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MaintenanceLoopAck // class H245_MaintenanceLoopAck : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MaintenanceLoopAck, PASN_Sequence); #endif public: H245_MaintenanceLoopAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_MaintenanceLoopAck_type m_type; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MaintenanceLoopReject // class H245_MaintenanceLoopReject : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MaintenanceLoopReject, PASN_Sequence); #endif public: H245_MaintenanceLoopReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_MaintenanceLoopReject_type m_type; H245_MaintenanceLoopReject_cause m_cause; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CommunicationModeCommand // class H245_CommunicationModeCommand : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CommunicationModeCommand, PASN_Sequence); #endif public: H245_CommunicationModeCommand(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_ArrayOf_CommunicationModeTableEntry m_communicationModeTable; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TerminalLabel // class H245_TerminalLabel : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_TerminalLabel, PASN_Sequence); #endif public: H245_TerminalLabel(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_McuNumber m_mcuNumber; H245_TerminalNumber m_terminalNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RequestAllTerminalIDsResponse // class H245_RequestAllTerminalIDsResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RequestAllTerminalIDsResponse, PASN_Sequence); #endif public: H245_RequestAllTerminalIDsResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_ArrayOf_TerminalInformation m_terminalInformation; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // TerminalInformation // class H245_TerminalInformation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_TerminalInformation, PASN_Sequence); #endif public: H245_TerminalInformation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_TerminalLabel m_terminalLabel; H245_TerminalID m_terminalID; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DialingInformationNumber // class H245_DialingInformationNumber : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DialingInformationNumber, PASN_Sequence); #endif public: H245_DialingInformationNumber(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_subAddress }; PASN_NumericString m_networkAddress; PASN_IA5String m_subAddress; H245_ArrayOf_DialingInformationNetworkType m_networkType; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // LogicalChannelRateReject // class H245_LogicalChannelRateReject : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_LogicalChannelRateReject, PASN_Sequence); #endif public: H245_LogicalChannelRateReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_currentMaximumBitRate }; H245_SequenceNumber m_sequenceNumber; H245_LogicalChannelNumber m_logicalChannelNumber; H245_LogicalChannelRateRejectReason m_rejectReason; H245_MaximumBitRate m_currentMaximumBitRate; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // FlowControlCommand // class H245_FlowControlCommand : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_FlowControlCommand, PASN_Sequence); #endif public: H245_FlowControlCommand(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_FlowControlCommand_scope m_scope; H245_FlowControlCommand_restriction m_restriction; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MiscellaneousCommand // class H245_MiscellaneousCommand : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MiscellaneousCommand, PASN_Sequence); #endif public: H245_MiscellaneousCommand(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_direction }; H245_LogicalChannelNumber m_logicalChannelNumber; H245_MiscellaneousCommand_type m_type; H245_EncryptionUpdateDirection m_direction; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MobileMultilinkReconfigurationCommand // class H245_MobileMultilinkReconfigurationCommand : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MobileMultilinkReconfigurationCommand, PASN_Sequence); #endif public: H245_MobileMultilinkReconfigurationCommand(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_sampleSize; PASN_Integer m_samplesPerFrame; H245_MobileMultilinkReconfigurationCommand_status m_status; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // FunctionNotSupported // class H245_FunctionNotSupported : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_FunctionNotSupported, PASN_Sequence); #endif public: H245_FunctionNotSupported(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_returnedFunction }; H245_FunctionNotSupported_cause m_cause; PASN_OctetString m_returnedFunction; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MiscellaneousIndication // class H245_MiscellaneousIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MiscellaneousIndication, PASN_Sequence); #endif public: H245_MiscellaneousIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_LogicalChannelNumber m_logicalChannelNumber; H245_MiscellaneousIndication_type m_type; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // JitterIndication // class H245_JitterIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_JitterIndication, PASN_Sequence); #endif public: H245_JitterIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_skippedFrameCount, e_additionalDecoderBuffer }; H245_JitterIndication_scope m_scope; PASN_Integer m_estimatedReceivedJitterMantissa; PASN_Integer m_estimatedReceivedJitterExponent; PASN_Integer m_skippedFrameCount; PASN_Integer m_additionalDecoderBuffer; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // FlowControlIndication // class H245_FlowControlIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_FlowControlIndication, PASN_Sequence); #endif public: H245_FlowControlIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_FlowControlIndication_scope m_scope; H245_FlowControlIndication_restriction m_restriction; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // VCCapability_availableBitRates // class H245_VCCapability_availableBitRates : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_VCCapability_availableBitRates, PASN_Sequence); #endif public: H245_VCCapability_availableBitRates(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_VCCapability_availableBitRates_type m_type; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // VCCapability_aal1ViaGateway // class H245_VCCapability_aal1ViaGateway : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_VCCapability_aal1ViaGateway, PASN_Sequence); #endif public: H245_VCCapability_aal1ViaGateway(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_ArrayOf_Q2931Address m_gatewayAddress; PASN_Boolean m_nullClockRecovery; PASN_Boolean m_srtsClockRecovery; PASN_Boolean m_adaptiveClockRecovery; PASN_Boolean m_nullErrorCorrection; PASN_Boolean m_longInterleaver; PASN_Boolean m_shortInterleaver; PASN_Boolean m_errorCorrectionOnly; PASN_Boolean m_structuredDataTransfer; PASN_Boolean m_partiallyFilledCells; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RefPictureSelection_enhancedReferencePicSelect // class H245_RefPictureSelection_enhancedReferencePicSelect : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RefPictureSelection_enhancedReferencePicSelect, PASN_Sequence); #endif public: H245_RefPictureSelection_enhancedReferencePicSelect(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_subPictureRemovalParameters }; H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters m_subPictureRemovalParameters; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CustomPictureFormat_mPI // class H245_CustomPictureFormat_mPI : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CustomPictureFormat_mPI, PASN_Sequence); #endif public: H245_CustomPictureFormat_mPI(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_standardMPI, e_customPCF }; PASN_Integer m_standardMPI; H245_CustomPictureFormat_mPI_customPCF m_customPCF; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DepFECCapability_rfc2733 // class H245_DepFECCapability_rfc2733 : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DepFECCapability_rfc2733, PASN_Sequence); #endif public: H245_DepFECCapability_rfc2733(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Boolean m_redundancyEncoding; H245_DepFECCapability_rfc2733_separateStream m_separateStream; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // OpenLogicalChannel_forwardLogicalChannelParameters // class H245_OpenLogicalChannel_forwardLogicalChannelParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_OpenLogicalChannel_forwardLogicalChannelParameters, PASN_Sequence); #endif public: H245_OpenLogicalChannel_forwardLogicalChannelParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_portNumber, e_forwardLogicalChannelDependency, e_replacementFor }; PASN_Integer m_portNumber; H245_DataType m_dataType; H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters m_multiplexParameters; H245_LogicalChannelNumber m_forwardLogicalChannelDependency; H245_LogicalChannelNumber m_replacementFor; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // OpenLogicalChannel_reverseLogicalChannelParameters // class H245_OpenLogicalChannel_reverseLogicalChannelParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_OpenLogicalChannel_reverseLogicalChannelParameters, PASN_Sequence); #endif public: H245_OpenLogicalChannel_reverseLogicalChannelParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_multiplexParameters, e_reverseLogicalChannelDependency, e_replacementFor }; H245_DataType m_dataType; H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters m_multiplexParameters; H245_LogicalChannelNumber m_reverseLogicalChannelDependency; H245_LogicalChannelNumber m_replacementFor; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RedundancyEncoding_rtpRedundancyEncoding // class H245_RedundancyEncoding_rtpRedundancyEncoding : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RedundancyEncoding_rtpRedundancyEncoding, PASN_Sequence); #endif public: H245_RedundancyEncoding_rtpRedundancyEncoding(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_primary, e_secondary }; H245_RedundancyEncodingElement m_primary; H245_ArrayOf_RedundancyEncodingElement m_secondary; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DepFECData_rfc2733 // class H245_DepFECData_rfc2733 : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DepFECData_rfc2733, PASN_Sequence); #endif public: H245_DepFECData_rfc2733(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_DepFECData_rfc2733_mode m_mode; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // FECData_rfc2733 // class H245_FECData_rfc2733 : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_FECData_rfc2733, PASN_Sequence); #endif public: H245_FECData_rfc2733(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_fecScheme }; PASN_Integer m_protectedPayloadType; PASN_ObjectId m_fecScheme; H245_FECData_rfc2733_pktMode m_pktMode; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UnicastAddress_iPSourceRouteAddress // class H245_UnicastAddress_iPSourceRouteAddress : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_UnicastAddress_iPSourceRouteAddress, PASN_Sequence); #endif public: H245_UnicastAddress_iPSourceRouteAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_UnicastAddress_iPSourceRouteAddress_routing m_routing; PASN_OctetString m_network; PASN_Integer m_tsapIdentifier; H245_UnicastAddress_iPSourceRouteAddress_route m_route; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // OpenLogicalChannelAck_reverseLogicalChannelParameters // class H245_OpenLogicalChannelAck_reverseLogicalChannelParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_OpenLogicalChannelAck_reverseLogicalChannelParameters, PASN_Sequence); #endif public: H245_OpenLogicalChannelAck_reverseLogicalChannelParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_portNumber, e_multiplexParameters, e_replacementFor }; H245_LogicalChannelNumber m_reverseLogicalChannelNumber; PASN_Integer m_portNumber; H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters m_multiplexParameters; H245_LogicalChannelNumber m_replacementFor; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DepFECMode_rfc2733Mode // class H245_DepFECMode_rfc2733Mode : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DepFECMode_rfc2733Mode, PASN_Sequence); #endif public: H245_DepFECMode_rfc2733Mode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_DepFECMode_rfc2733Mode_mode m_mode; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceRequest_requestTerminalCertificate // class H245_ConferenceRequest_requestTerminalCertificate : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ConferenceRequest_requestTerminalCertificate, PASN_Sequence); #endif public: H245_ConferenceRequest_requestTerminalCertificate(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_terminalLabel, e_certSelectionCriteria, e_sRandom }; H245_TerminalLabel m_terminalLabel; H245_CertSelectionCriteria m_certSelectionCriteria; PASN_Integer m_sRandom; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceResponse_mCTerminalIDResponse // class H245_ConferenceResponse_mCTerminalIDResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ConferenceResponse_mCTerminalIDResponse, PASN_Sequence); #endif public: H245_ConferenceResponse_mCTerminalIDResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_TerminalLabel m_terminalLabel; H245_TerminalID m_terminalID; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceResponse_terminalIDResponse // class H245_ConferenceResponse_terminalIDResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ConferenceResponse_terminalIDResponse, PASN_Sequence); #endif public: H245_ConferenceResponse_terminalIDResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_TerminalLabel m_terminalLabel; H245_TerminalID m_terminalID; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceResponse_conferenceIDResponse // class H245_ConferenceResponse_conferenceIDResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ConferenceResponse_conferenceIDResponse, PASN_Sequence); #endif public: H245_ConferenceResponse_conferenceIDResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_TerminalLabel m_terminalLabel; H245_ConferenceID m_conferenceID; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceResponse_passwordResponse // class H245_ConferenceResponse_passwordResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ConferenceResponse_passwordResponse, PASN_Sequence); #endif public: H245_ConferenceResponse_passwordResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_TerminalLabel m_terminalLabel; H245_Password m_password; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceResponse_chairTokenOwnerResponse // class H245_ConferenceResponse_chairTokenOwnerResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ConferenceResponse_chairTokenOwnerResponse, PASN_Sequence); #endif public: H245_ConferenceResponse_chairTokenOwnerResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_TerminalLabel m_terminalLabel; H245_TerminalID m_terminalID; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ConferenceResponse_terminalCertificateResponse // class H245_ConferenceResponse_terminalCertificateResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ConferenceResponse_terminalCertificateResponse, PASN_Sequence); #endif public: H245_ConferenceResponse_terminalCertificateResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_terminalLabel, e_certificateResponse }; H245_TerminalLabel m_terminalLabel; PASN_OctetString m_certificateResponse; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultilinkRequest_maximumHeaderInterval // class H245_MultilinkRequest_maximumHeaderInterval : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultilinkRequest_maximumHeaderInterval, PASN_Sequence); #endif public: H245_MultilinkRequest_maximumHeaderInterval(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_MultilinkRequest_maximumHeaderInterval_requestType m_requestType; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MultilinkResponse_addConnection // class H245_MultilinkResponse_addConnection : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MultilinkResponse_addConnection, PASN_Sequence); #endif public: H245_MultilinkResponse_addConnection(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_SequenceNumber m_sequenceNumber; H245_MultilinkResponse_addConnection_responseCode m_responseCode; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // SendTerminalCapabilitySet_specificRequest // class H245_SendTerminalCapabilitySet_specificRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_SendTerminalCapabilitySet_specificRequest, PASN_Sequence); #endif public: H245_SendTerminalCapabilitySet_specificRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_capabilityTableEntryNumbers, e_capabilityDescriptorNumbers }; PASN_Boolean m_multiplexCapability; H245_ArrayOf_CapabilityTableEntryNumber m_capabilityTableEntryNumbers; H245_ArrayOf_CapabilityDescriptorNumber m_capabilityDescriptorNumbers; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // EncryptionCommand_encryptionAlgorithmID // class H245_EncryptionCommand_encryptionAlgorithmID : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_EncryptionCommand_encryptionAlgorithmID, PASN_Sequence); #endif public: H245_EncryptionCommand_encryptionAlgorithmID(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_SequenceNumber m_h233AlgorithmIdentifier; H245_NonStandardParameter m_associatedAlgorithm; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NewATMVCCommand_reverseParameters // class H245_NewATMVCCommand_reverseParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NewATMVCCommand_reverseParameters, PASN_Sequence); #endif public: H245_NewATMVCCommand_reverseParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_bitRate; PASN_Boolean m_bitRateLockedToPCRClock; PASN_Boolean m_bitRateLockedToNetworkClock; H245_NewATMVCCommand_reverseParameters_multiplex m_multiplex; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NewATMVCIndication_reverseParameters // class H245_NewATMVCIndication_reverseParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NewATMVCIndication_reverseParameters, PASN_Sequence); #endif public: H245_NewATMVCIndication_reverseParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_bitRate; PASN_Boolean m_bitRateLockedToPCRClock; PASN_Boolean m_bitRateLockedToNetworkClock; H245_NewATMVCIndication_reverseParameters_multiplex m_multiplex; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UserInputIndication_signal // class H245_UserInputIndication_signal : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_UserInputIndication_signal, PASN_Sequence); #endif public: H245_UserInputIndication_signal(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_duration, e_rtp, e_rtpPayloadIndication, e_paramS, e_encryptedSignalType, e_algorithmOID }; PASN_IA5String m_signalType; PASN_Integer m_duration; H245_UserInputIndication_signal_rtp m_rtp; PASN_Null m_rtpPayloadIndication; H245_Params m_paramS; PASN_OctetString m_encryptedSignalType; PASN_ObjectId m_algorithmOID; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UserInputIndication_signalUpdate // class H245_UserInputIndication_signalUpdate : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_UserInputIndication_signalUpdate, PASN_Sequence); #endif public: H245_UserInputIndication_signalUpdate(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_rtp }; PASN_Integer m_duration; H245_UserInputIndication_signalUpdate_rtp m_rtp; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UserInputIndication_extendedAlphanumeric // class H245_UserInputIndication_extendedAlphanumeric : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_UserInputIndication_extendedAlphanumeric, PASN_Sequence); #endif public: H245_UserInputIndication_extendedAlphanumeric(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_rtpPayloadIndication, e_encryptedAlphanumeric }; PASN_GeneralString m_alphanumeric; PASN_Null m_rtpPayloadIndication; H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric m_encryptedAlphanumeric; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // V76LogicalChannelParameters_mode_eRM // class H245_V76LogicalChannelParameters_mode_eRM : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_V76LogicalChannelParameters_mode_eRM, PASN_Sequence); #endif public: H245_V76LogicalChannelParameters_mode_eRM(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_windowSize; H245_V76LogicalChannelParameters_mode_eRM_recovery m_recovery; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MiscellaneousCommand_type_progressiveRefinementStart // class H245_MiscellaneousCommand_type_progressiveRefinementStart : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MiscellaneousCommand_type_progressiveRefinementStart, PASN_Sequence); #endif public: H245_MiscellaneousCommand_type_progressiveRefinementStart(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCount m_repeatCount; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // MiscellaneousCommand_type_encryptionUpdateCommand // class H245_MiscellaneousCommand_type_encryptionUpdateCommand : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_MiscellaneousCommand_type_encryptionUpdateCommand, PASN_Sequence); #endif public: H245_MiscellaneousCommand_type_encryptionUpdateCommand(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_multiplePayloadStream }; H245_EncryptionSync m_encryptionSync; H245_MultiplePayloadStream m_multiplePayloadStream; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NewATMVCCommand_aal_aal1 // class H245_NewATMVCCommand_aal_aal1 : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NewATMVCCommand_aal_aal1, PASN_Sequence); #endif public: H245_NewATMVCCommand_aal_aal1(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_NewATMVCCommand_aal_aal1_clockRecovery m_clockRecovery; H245_NewATMVCCommand_aal_aal1_errorCorrection m_errorCorrection; PASN_Boolean m_structuredDataTransfer; PASN_Boolean m_partiallyFilledCells; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NewATMVCIndication_aal_aal1 // class H245_NewATMVCIndication_aal_aal1 : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NewATMVCIndication_aal_aal1, PASN_Sequence); #endif public: H245_NewATMVCIndication_aal_aal1(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_NewATMVCIndication_aal_aal1_clockRecovery m_clockRecovery; H245_NewATMVCIndication_aal_aal1_errorCorrection m_errorCorrection; PASN_Boolean m_structuredDataTransfer; PASN_Boolean m_partiallyFilledCells; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NonStandardMessage // class H245_NonStandardMessage : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NonStandardMessage, PASN_Sequence); #endif public: H245_NonStandardMessage(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_NonStandardParameter m_nonStandardData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // VCCapability // class H245_VCCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_VCCapability, PASN_Sequence); #endif public: H245_VCCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_aal1, e_aal5, e_aal1ViaGateway }; H245_VCCapability_aal1 m_aal1; H245_VCCapability_aal5 m_aal5; PASN_Boolean m_transportStream; PASN_Boolean m_programStream; H245_VCCapability_availableBitRates m_availableBitRates; H245_VCCapability_aal1ViaGateway m_aal1ViaGateway; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H2250Capability // class H245_H2250Capability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H2250Capability, PASN_Sequence); #endif public: H245_H2250Capability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_transportCapability, e_redundancyEncodingCapability, e_logicalChannelSwitchingCapability, e_t120DynamicPortCapability }; PASN_Integer m_maximumAudioDelayJitter; H245_MultipointCapability m_receiveMultipointCapability; H245_MultipointCapability m_transmitMultipointCapability; H245_MultipointCapability m_receiveAndTransmitMultipointCapability; H245_H2250Capability_mcCapability m_mcCapability; PASN_Boolean m_rtcpVideoControlCapability; H245_MediaPacketizationCapability m_mediaPacketizationCapability; H245_TransportCapability m_transportCapability; H245_ArrayOf_RedundancyEncodingCapability m_redundancyEncodingCapability; PASN_Boolean m_logicalChannelSwitchingCapability; PASN_Boolean m_t120DynamicPortCapability; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RefPictureSelection // class H245_RefPictureSelection : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RefPictureSelection, PASN_Sequence); #endif public: H245_RefPictureSelection(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_additionalPictureMemory, e_enhancedReferencePicSelect }; H245_RefPictureSelection_additionalPictureMemory m_additionalPictureMemory; PASN_Boolean m_videoMux; H245_RefPictureSelection_videoBackChannelSend m_videoBackChannelSend; H245_RefPictureSelection_enhancedReferencePicSelect m_enhancedReferencePicSelect; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CustomPictureFormat // class H245_CustomPictureFormat : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CustomPictureFormat, PASN_Sequence); #endif public: H245_CustomPictureFormat(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_maxCustomPictureWidth; PASN_Integer m_maxCustomPictureHeight; PASN_Integer m_minCustomPictureWidth; PASN_Integer m_minCustomPictureHeight; H245_CustomPictureFormat_mPI m_mPI; H245_CustomPictureFormat_pixelAspectInformation m_pixelAspectInformation; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H263VideoModeCombos // class H245_H263VideoModeCombos : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H263VideoModeCombos, PASN_Sequence); #endif public: H245_H263VideoModeCombos(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_H263ModeComboFlags m_h263VideoUncoupledModes; H245_ArrayOf_H263ModeComboFlags m_h263VideoCoupledModes; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // T38FaxProfile // class H245_T38FaxProfile : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_T38FaxProfile, PASN_Sequence); #endif public: H245_T38FaxProfile(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_version, e_t38FaxRateManagement, e_t38FaxUdpOptions, e_t38FaxTcpOptions }; PASN_Boolean m_fillBitRemoval; PASN_Boolean m_transcodingJBIG; PASN_Boolean m_transcodingMMR; PASN_Integer m_version; H245_T38FaxRateManagement m_t38FaxRateManagement; H245_T38FaxUdpOptions m_t38FaxUdpOptions; H245_T38FaxTcpOptions m_t38FaxTcpOptions; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // EncryptionAuthenticationAndIntegrity // class H245_EncryptionAuthenticationAndIntegrity : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_EncryptionAuthenticationAndIntegrity, PASN_Sequence); #endif public: H245_EncryptionAuthenticationAndIntegrity(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_encryptionCapability, e_authenticationCapability, e_integrityCapability, e_genericH235SecurityCapability }; H245_EncryptionCapability m_encryptionCapability; H245_AuthenticationCapability m_authenticationCapability; H245_IntegrityCapability m_integrityCapability; H245_GenericCapability m_genericH235SecurityCapability; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // OpenLogicalChannel // class H245_OpenLogicalChannel : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_OpenLogicalChannel, PASN_Sequence); #endif public: H245_OpenLogicalChannel(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_reverseLogicalChannelParameters, e_separateStack, e_encryptionSync, e_genericInformation }; H245_LogicalChannelNumber m_forwardLogicalChannelNumber; H245_OpenLogicalChannel_forwardLogicalChannelParameters m_forwardLogicalChannelParameters; H245_OpenLogicalChannel_reverseLogicalChannelParameters m_reverseLogicalChannelParameters; H245_NetworkAccessParameters m_separateStack; H245_EncryptionSync m_encryptionSync; H245_ArrayOf_GenericInformation m_genericInformation; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H235Media // class H245_H235Media : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H235Media, PASN_Sequence); #endif public: H245_H235Media(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_EncryptionAuthenticationAndIntegrity m_encryptionAuthenticationAndIntegrity; H245_H235Media_mediaType m_mediaType; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // V76LogicalChannelParameters // class H245_V76LogicalChannelParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_V76LogicalChannelParameters, PASN_Sequence); #endif public: H245_V76LogicalChannelParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_V76HDLCParameters m_hdlcParameters; H245_V76LogicalChannelParameters_suspendResume m_suspendResume; PASN_Boolean m_uIH; H245_V76LogicalChannelParameters_mode m_mode; H245_V75Parameters m_v75Parameters; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RedundancyEncoding // class H245_RedundancyEncoding : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RedundancyEncoding, PASN_Sequence); #endif public: H245_RedundancyEncoding(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_secondaryEncoding, e_rtpRedundancyEncoding }; H245_RedundancyEncodingMethod m_redundancyEncodingMethod; H245_DataType m_secondaryEncoding; H245_RedundancyEncoding_rtpRedundancyEncoding m_rtpRedundancyEncoding; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // OpenLogicalChannelAck // class H245_OpenLogicalChannelAck : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_OpenLogicalChannelAck, PASN_Sequence); #endif public: H245_OpenLogicalChannelAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_reverseLogicalChannelParameters, e_separateStack, e_forwardMultiplexAckParameters, e_encryptionSync, e_genericInformation }; H245_LogicalChannelNumber m_forwardLogicalChannelNumber; H245_OpenLogicalChannelAck_reverseLogicalChannelParameters m_reverseLogicalChannelParameters; H245_NetworkAccessParameters m_separateStack; H245_OpenLogicalChannelAck_forwardMultiplexAckParameters m_forwardMultiplexAckParameters; H245_EncryptionSync m_encryptionSync; H245_ArrayOf_GenericInformation m_genericInformation; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H235Mode // class H245_H235Mode : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H235Mode, PASN_Sequence); #endif public: H245_H235Mode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_EncryptionAuthenticationAndIntegrity m_encryptionAuthenticationAndIntegrity; H245_H235Mode_mediaMode m_mediaMode; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RedundancyEncodingDTMode // class H245_RedundancyEncodingDTMode : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_RedundancyEncodingDTMode, PASN_Sequence); #endif public: H245_RedundancyEncodingDTMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_RedundancyEncodingMethod m_redundancyEncodingMethod; H245_RedundancyEncodingDTModeElement m_primary; H245_ArrayOf_RedundancyEncodingDTModeElement m_secondary; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H2250ModeParameters // class H245_H2250ModeParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H2250ModeParameters, PASN_Sequence); #endif public: H245_H2250ModeParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_redundancyEncodingMode }; H245_RedundancyEncodingMode m_redundancyEncodingMode; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // CommunicationModeTableEntry // class H245_CommunicationModeTableEntry : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_CommunicationModeTableEntry, PASN_Sequence); #endif public: H245_CommunicationModeTableEntry(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandard, e_associatedSessionID, e_terminalLabel, e_mediaChannel, e_mediaGuaranteedDelivery, e_mediaControlChannel, e_mediaControlGuaranteedDelivery, e_redundancyEncoding, e_sessionDependency, e_destination }; H245_ArrayOf_NonStandardParameter m_nonStandard; PASN_Integer m_sessionID; PASN_Integer m_associatedSessionID; H245_TerminalLabel m_terminalLabel; PASN_BMPString m_sessionDescription; H245_CommunicationModeTableEntry_dataType m_dataType; H245_TransportAddress m_mediaChannel; PASN_Boolean m_mediaGuaranteedDelivery; H245_TransportAddress m_mediaControlChannel; PASN_Boolean m_mediaControlGuaranteedDelivery; H245_RedundancyEncoding m_redundancyEncoding; PASN_Integer m_sessionDependency; H245_TerminalLabel m_destination; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NewATMVCCommand // class H245_NewATMVCCommand : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NewATMVCCommand, PASN_Sequence); #endif public: H245_NewATMVCCommand(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_resourceID; PASN_Integer m_bitRate; PASN_Boolean m_bitRateLockedToPCRClock; PASN_Boolean m_bitRateLockedToNetworkClock; H245_NewATMVCCommand_aal m_aal; H245_NewATMVCCommand_multiplex m_multiplex; H245_NewATMVCCommand_reverseParameters m_reverseParameters; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NewATMVCIndication // class H245_NewATMVCIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_NewATMVCIndication, PASN_Sequence); #endif public: H245_NewATMVCIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_reverseParameters }; PASN_Integer m_resourceID; PASN_Integer m_bitRate; PASN_Boolean m_bitRateLockedToPCRClock; PASN_Boolean m_bitRateLockedToNetworkClock; H245_NewATMVCIndication_aal m_aal; H245_NewATMVCIndication_multiplex m_multiplex; H245_NewATMVCIndication_reverseParameters m_reverseParameters; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DataApplicationCapability_application_t38fax // class H245_DataApplicationCapability_application_t38fax : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DataApplicationCapability_application_t38fax, PASN_Sequence); #endif public: H245_DataApplicationCapability_application_t38fax(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_DataProtocolCapability m_t38FaxProtocol; H245_T38FaxProfile m_t38FaxProfile; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DataMode_application_t38fax // class H245_DataMode_application_t38fax : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_DataMode_application_t38fax, PASN_Sequence); #endif public: H245_DataMode_application_t38fax(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_DataProtocolCapability m_t38FaxProtocol; H245_T38FaxProfile m_t38FaxProfile; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H235SecurityCapability // class H245_H235SecurityCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H235SecurityCapability, PASN_Sequence); #endif public: H245_H235SecurityCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_EncryptionAuthenticationAndIntegrity m_encryptionAuthenticationAndIntegrity; H245_CapabilityTableEntryNumber m_mediaCapability; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H263Options // class H245_H263Options : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H263Options, PASN_Sequence); #endif public: H245_H263Options(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_transparencyParameters, e_refPictureSelection, e_customPictureClockFrequency, e_customPictureFormat, e_modeCombos, e_videoBadMBsCap, e_h263Version3Options }; PASN_Boolean m_advancedIntraCodingMode; PASN_Boolean m_deblockingFilterMode; PASN_Boolean m_improvedPBFramesMode; PASN_Boolean m_unlimitedMotionVectors; PASN_Boolean m_fullPictureFreeze; PASN_Boolean m_partialPictureFreezeAndRelease; PASN_Boolean m_resizingPartPicFreezeAndRelease; PASN_Boolean m_fullPictureSnapshot; PASN_Boolean m_partialPictureSnapshot; PASN_Boolean m_videoSegmentTagging; PASN_Boolean m_progressiveRefinement; PASN_Boolean m_dynamicPictureResizingByFour; PASN_Boolean m_dynamicPictureResizingSixteenthPel; PASN_Boolean m_dynamicWarpingHalfPel; PASN_Boolean m_dynamicWarpingSixteenthPel; PASN_Boolean m_independentSegmentDecoding; PASN_Boolean m_slicesInOrder_NonRect; PASN_Boolean m_slicesInOrder_Rect; PASN_Boolean m_slicesNoOrder_NonRect; PASN_Boolean m_slicesNoOrder_Rect; PASN_Boolean m_alternateInterVLCMode; PASN_Boolean m_modifiedQuantizationMode; PASN_Boolean m_reducedResolutionUpdate; H245_TransparencyParameters m_transparencyParameters; PASN_Boolean m_separateVideoBackChannel; H245_RefPictureSelection m_refPictureSelection; H245_ArrayOf_CustomPictureClockFrequency m_customPictureClockFrequency; H245_ArrayOf_CustomPictureFormat m_customPictureFormat; H245_ArrayOf_H263VideoModeCombos m_modeCombos; PASN_Boolean m_videoBadMBsCap; H245_H263Version3Options m_h263Version3Options; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H2250LogicalChannelParameters // class H245_H2250LogicalChannelParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H2250LogicalChannelParameters, PASN_Sequence); #endif public: H245_H2250LogicalChannelParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_nonStandard, e_associatedSessionID, e_mediaChannel, e_mediaGuaranteedDelivery, e_mediaControlChannel, e_mediaControlGuaranteedDelivery, e_silenceSuppression, e_destination, e_dynamicRTPPayloadType, e_mediaPacketization, e_transportCapability, e_redundancyEncoding, e_source }; H245_ArrayOf_NonStandardParameter m_nonStandard; PASN_Integer m_sessionID; PASN_Integer m_associatedSessionID; H245_TransportAddress m_mediaChannel; PASN_Boolean m_mediaGuaranteedDelivery; H245_TransportAddress m_mediaControlChannel; PASN_Boolean m_mediaControlGuaranteedDelivery; PASN_Boolean m_silenceSuppression; H245_TerminalLabel m_destination; PASN_Integer m_dynamicRTPPayloadType; H245_H2250LogicalChannelParameters_mediaPacketization m_mediaPacketization; H245_TransportCapability m_transportCapability; H245_RedundancyEncoding m_redundancyEncoding; H245_TerminalLabel m_source; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ModeElement // class H245_ModeElement : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_ModeElement, PASN_Sequence); #endif public: H245_ModeElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_h223ModeParameters, e_v76ModeParameters, e_h2250ModeParameters, e_genericModeParameters, e_multiplexedStreamModeParameters, e_logicalChannelNumber }; H245_ModeElementType m_type; H245_H223ModeParameters m_h223ModeParameters; H245_V76ModeParameters m_v76ModeParameters; H245_H2250ModeParameters m_h2250ModeParameters; H245_GenericCapability m_genericModeParameters; H245_MultiplexedStreamModeParameters m_multiplexedStreamModeParameters; H245_LogicalChannelNumber m_logicalChannelNumber; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H263VideoMode // class H245_H263VideoMode : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H263VideoMode, PASN_Sequence); #endif public: H245_H263VideoMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_errorCompensation, e_enhancementLayerInfo, e_h263Options }; H245_H263VideoMode_resolution m_resolution; PASN_Integer m_bitRate; PASN_Boolean m_unrestrictedVector; PASN_Boolean m_arithmeticCoding; PASN_Boolean m_advancedPrediction; PASN_Boolean m_pbFrames; PASN_Boolean m_errorCompensation; H245_EnhancementLayerInfo m_enhancementLayerInfo; H245_H263Options m_h263Options; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // H263VideoCapability // class H245_H263VideoCapability : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_H263VideoCapability, PASN_Sequence); #endif public: H245_H263VideoCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_sqcifMPI, e_qcifMPI, e_cifMPI, e_cif4MPI, e_cif16MPI, e_hrd_B, e_bppMaxKb, e_slowSqcifMPI, e_slowQcifMPI, e_slowCifMPI, e_slowCif4MPI, e_slowCif16MPI, e_errorCompensation, e_enhancementLayerInfo, e_h263Options }; PASN_Integer m_sqcifMPI; PASN_Integer m_qcifMPI; PASN_Integer m_cifMPI; PASN_Integer m_cif4MPI; PASN_Integer m_cif16MPI; PASN_Integer m_maxBitRate; PASN_Boolean m_unrestrictedVector; PASN_Boolean m_arithmeticCoding; PASN_Boolean m_advancedPrediction; PASN_Boolean m_pbFrames; PASN_Boolean m_temporalSpatialTradeOffCapability; PASN_Integer m_hrd_B; PASN_Integer m_bppMaxKb; PASN_Integer m_slowSqcifMPI; PASN_Integer m_slowQcifMPI; PASN_Integer m_slowCifMPI; PASN_Integer m_slowCif4MPI; PASN_Integer m_slowCif16MPI; PASN_Boolean m_errorCompensation; H245_EnhancementLayerInfo m_enhancementLayerInfo; H245_H263Options m_h263Options; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // EnhancementOptions // class H245_EnhancementOptions : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_EnhancementOptions, PASN_Sequence); #endif public: H245_EnhancementOptions(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_sqcifMPI, e_qcifMPI, e_cifMPI, e_cif4MPI, e_cif16MPI, e_slowSqcifMPI, e_slowQcifMPI, e_slowCifMPI, e_slowCif4MPI, e_slowCif16MPI, e_h263Options }; PASN_Integer m_sqcifMPI; PASN_Integer m_qcifMPI; PASN_Integer m_cifMPI; PASN_Integer m_cif4MPI; PASN_Integer m_cif16MPI; PASN_Integer m_maxBitRate; PASN_Boolean m_unrestrictedVector; PASN_Boolean m_arithmeticCoding; PASN_Boolean m_temporalSpatialTradeOffCapability; PASN_Integer m_slowSqcifMPI; PASN_Integer m_slowQcifMPI; PASN_Integer m_slowCifMPI; PASN_Integer m_slowCif4MPI; PASN_Integer m_slowCif16MPI; PASN_Boolean m_errorCompensation; H245_H263Options m_h263Options; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // BEnhancementParameters // class H245_BEnhancementParameters : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H245_BEnhancementParameters, PASN_Sequence); #endif public: H245_BEnhancementParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H245_EnhancementOptions m_enhancementOptions; PASN_Integer m_numberOfBPictures; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H245_H #endif // if ! H323_DISABLE_H245 // End of h245.h h323plus/include/guid.h0000644000175000017500000001110211015524067013627 0ustar markmark/* * guid.h * * Globally Unique Identifier * * Open H323 Library * * Copyright (c) 1998-2001 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: guid.h,v $ * Revision 1.2 2008/05/23 11:19:19 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:50:48 shorne * First commit of h323plus * * Revision 1.6 2005/11/30 13:05:01 csoutheren * Changed tags for Doxygen * * Revision 1.5 2004/04/18 04:38:16 rjongbloed * Changed all operators that return PBoolean to return standard type bool. This is primarily * for improved compatibility with std STL usage removing many warnings. * * Revision 1.4 2002/09/16 01:14:15 robertj * Added #define so can select if #pragma interface/implementation is used on * platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan. * * Revision 1.3 2002/08/05 10:03:47 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.2 2001/03/19 05:51:35 robertj * Added ! operator to do !IsNULL(), so cannot use it accidentally. * * Revision 1.1 2001/03/02 06:59:57 robertj * Enhanced the globally unique identifier class. * */ #ifndef __OPAL_GUID_H #define __OPAL_GUID_H #ifdef P_USE_PRAGMA #pragma interface #endif class PASN_OctetString; /////////////////////////////////////////////////////////////////////////////// /**Globally unique ID definition. This implements a 128 bit globally unique ID as required by many protocols and software systems. The value is constructed in such a way as to make a duplicate anywhere in the world highly unlikely. */ class OpalGloballyUniqueID : public PBYTEArray { PCLASSINFO(OpalGloballyUniqueID, PBYTEArray); public: /**@name Construction */ //@{ /**Create a new ID. The ID created with this will be initialised to a globally unique ID as per specification. */ OpalGloballyUniqueID(); /**Create an ID from a C string of hex (as produced by AsString()). A useful construct is to construct a OpalGloballyUniqueID() with NULL which produces an all zero GUID, etectable with the isNULL() function. */ OpalGloballyUniqueID( const char * cstr ///< C string to convert ); /**Create an ID from a PString of hex (as produced by AsString()). */ OpalGloballyUniqueID( const PString & str ///< String of hex to convert ); /**Create an ID from an octet string in an ASN PDU. */ OpalGloballyUniqueID( const PASN_OctetString & ostr ///< Octet string from ASN to convert ); //@} /**@name Overrides from PObject */ //@{ /**Standard stream print function. The PObject class has a << operator defined that calls this function polymorphically. */ virtual void PrintOn( ostream & strm ///< Stream to output text representation ) const; /**Standard stream read function. The PObject class has a >> operator defined that calls this function polymorphically. */ virtual void ReadFrom( istream & strm ///< Stream to output text representation ); /**Create a clone of the ID. The duplicate ID has the same value as the source. Required for having this object as a key in dictionaries. */ virtual PObject * Clone() const; /**Get the hash value for the ID. Creates a number based on the ID value for use in the hash table of a dictionary. Required for having this object as a key in dictionaries. */ virtual PINDEX HashFunction() const; //@} /**@name Operations */ //@{ /**Convert the ID to human readable string. */ PString AsString() const; /**Test if the GUID is null, ie consists of all zeros. */ PBoolean IsNULL() const; bool operator!() const { return !IsNULL(); } //@} }; #endif // __OPAL_GUID_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/peclient.h0000644000175000017500000005172211561714523014522 0ustar markmark/* * peclient.h * * H.323 Annex G Peer Element client protocol handler * * Open H323 Library * * Copyright (c) 2003 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: peclient.h,v $ * Revision 1.3 2011/05/09 07:35:47 shorne * updates for changes in PTLIB v2.11. The replacement of PDICTIONARY with H323Dictionary. Updates for the changes in the PNatMethod Class. Alteration in PFactory::Create, Remove redundent code and change change logging * * Revision 1.2 2008/05/23 11:19:56 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:50:50 shorne * First commit of h323plus * * Revision 1.33 2005/11/30 13:05:01 csoutheren * Changed tags for Doxygen * * Revision 1.32 2004/04/01 07:09:07 csoutheren * Fixed sense of default H.501 priority * * Revision 1.31 2004/04/01 04:29:40 csoutheren * Added default priority to all outgoing descriptors unless set by application * * Revision 1.30 2004/03/29 08:13:15 csoutheren * Fixed problem with priorities * * Revision 1.29 2004/03/29 05:35:21 csoutheren * Changed to use default address for descriptor if blank * * Revision 1.28 2003/05/14 03:04:58 rjongbloed * Added another method for removing service relationships. * Added virtual for handling SR requests. * * Revision 1.27 2003/05/05 08:28:45 craigs * Fixed lastUpdate time in descriptors * * Revision 1.26 2003/04/30 04:56:57 craigs * Improved handling for nonexistent routes * * Revision 1.25 2003/04/10 12:37:54 craigs * Improved handling of wildcard entries * * Revision 1.24 2003/04/10 07:05:15 craigs * Allowed access to endpoint type in descriptors * * Revision 1.23 2003/04/10 03:42:16 craigs * Allow AccessRequest to return multiple transport addresses * * Revision 1.22 2003/04/09 10:47:25 craigs * Fixed problems * * Revision 1.21 2003/04/08 12:23:54 craigs * Fixed problem with descriptors not being removed when service relationships go away * * Revision 1.20 2003/04/07 05:11:13 craigs * Added changes to get access to descriptor creates/updates/deletes * * Revision 1.19 2003/04/02 06:05:10 robertj * Added versions of AddDescriptor that contain the GUID. * * Revision 1.18 2003/04/01 05:59:30 robertj * Fixed H.501 transaction code setting members for m_common PDU part. * * Revision 1.17 2003/04/01 04:47:48 robertj * Abstracted H.225 RAS transaction processing (RIP and secondary thread) in * server environment for use by H.501 peer elements. * * Revision 1.16 2003/04/01 01:17:44 robertj * Minor changes to AccessEquest and AddDescriptor API to allow for * string arrays of aliases. * * Revision 1.15 2003/03/28 00:30:23 craigs * Fixed problems with service relationship ordinals and better descriptor update access * * Revision 1.14 2003/03/27 09:24:06 craigs * Rewritten support for descriptors and multiple templates * * Revision 1.13 2003/03/26 07:08:46 robertj * Added default parameters to AddDescriptor() functions * * Revision 1.12 2003/03/25 07:50:11 craigs * Added support for mutiple transports per descriptor * * Revision 1.11 2003/03/25 05:13:13 craigs * More speed enhancements * * Revision 1.10 2003/03/25 01:58:46 robertj * Fixed GNU warnings * * Revision 1.9 2003/03/25 01:47:58 craigs * Changes for new OpenH323 H.501 * * Revision 1.8 2003/03/20 01:51:07 robertj * More abstraction of H.225 RAS and H.501 protocols transaction handling. * * Revision 1.7 2003/03/18 13:58:16 craigs * More H.501 implementation * * Revision 1.6 2003/03/18 02:18:45 craigs * Changed incorrect include * * Revision 1.5 2003/03/17 13:19:49 craigs * More H501 implementation * * Revision 1.4 2003/03/14 06:00:42 craigs * More updates * * Revision 1.3 2003/03/01 00:23:51 craigs * New PeerElement implementation * * Revision 1.2 2003/02/21 07:23:18 robertj * Fixed up some comments * * Revision 1.1 2003/02/21 05:28:39 craigs * Factored out code for user with peer elements * */ #ifndef __OPAL_PECLIENT_H #define __OPAL_PECLIENT_H #ifdef P_USE_PRAGMA #pragma interface #endif #include "h323annexg.h" #include "h323ep.h" #include "h501.h" #include class H323PeerElement; //////////////////////////////////////////////////////////////// class H501Transaction : public H323Transaction { PCLASSINFO(H501Transaction, H323Transaction); public: H501Transaction( H323PeerElement & pe, const H501PDU & pdu, PBoolean hasReject ); virtual H323TransactionPDU * CreateRIP( unsigned sequenceNumber, unsigned delay ) const; virtual H235Authenticator::ValidationResult ValidatePDU() const; H501_MessageCommonInfo & requestCommon; H501_MessageCommonInfo & confirmCommon; protected: H323PeerElement & peerElement; }; //////////////////////////////////////////////////////////////// class H501ServiceRequest : public H501Transaction { PCLASSINFO(H501ServiceRequest, H501Transaction); public: H501ServiceRequest( H323PeerElement & pe, const H501PDU & pdu ); #if PTRACING virtual const char * GetName() const; #endif virtual void SetRejectReason( unsigned reasonCode ); H501_ServiceRequest & srq; H501_ServiceConfirmation & scf; H501_ServiceRejection & srj; protected: virtual Response OnHandlePDU(); }; //////////////////////////////////////////////////////////////// class H501DescriptorUpdate : public H501Transaction { PCLASSINFO(H501DescriptorUpdate, H501Transaction); public: H501DescriptorUpdate( H323PeerElement & pe, const H501PDU & pdu ); #if PTRACING virtual const char * GetName() const; #endif virtual void SetRejectReason( unsigned reasonCode ); H501_DescriptorUpdate & du; H501_DescriptorUpdateAck & ack; protected: virtual Response OnHandlePDU(); }; //////////////////////////////////////////////////////////////// class H501AccessRequest : public H501Transaction { PCLASSINFO(H501AccessRequest, H501Transaction); public: H501AccessRequest( H323PeerElement & pe, const H501PDU & pdu ); #if PTRACING virtual const char * GetName() const; #endif virtual void SetRejectReason( unsigned reasonCode ); H501_AccessRequest & arq; H501_AccessConfirmation & acf; H501_AccessRejection & arj; protected: virtual Response OnHandlePDU(); }; //////////////////////////////////////////////////////////////// class H323PeerElementDescriptor : public PSafeObject { PCLASSINFO(H323PeerElementDescriptor, PSafeObject); public: H323PeerElementDescriptor(const OpalGloballyUniqueID & _descriptorID) : descriptorID(_descriptorID), state(Dirty), creator(0) { } Comparison Compare(const PObject & obj) const; enum Options { Protocol_H323 = 0x0001, Protocol_Voice = 0x0002, Protocol_Max = 0x0002, Option_WildCard = 0x0004, Option_SendAccessRequest = 0x0008, Option_NotAvailable = 0x0010, Option_PrioritySet = 0x0020, Option_PriorityMask = 0x1fc0, }; enum { HighestPriority = 0, DefaultPriority = 80, LowestPriority = 127 }; static inline unsigned SetPriorityOption(unsigned pri) { return Option_PrioritySet | ((pri & 0x7f) << 6); } static inline unsigned GetPriorityOption(unsigned options) { return (options & Option_PrioritySet) ? ((options >> 6) & 0x7f) : DefaultPriority; } void CopyTo(H501_Descriptor & descriptor); static PBoolean CopyToAddressTemplate(H501_AddressTemplate & addressTemplates, const H225_EndpointType & ep, const H225_ArrayOf_AliasAddress & aliases, const H225_ArrayOf_AliasAddress & transportAddress, unsigned options = H323PeerElementDescriptor::Protocol_H323); static void SetProtocolList(H501_ArrayOf_SupportedProtocols & h501Protocols, unsigned protocols); static unsigned GetProtocolList(const H501_ArrayOf_SupportedProtocols & h501Protocols); OpalGloballyUniqueID descriptorID; PBoolean ContainsNonexistent(); enum States { Clean, Dirty, Deleted } state; H501_ArrayOf_AddressTemplate addressTemplates; PString gatekeeperID; PTime lastChanged; POrdinalKey creator; }; //////////////////////////////////////////////////////////////// class H323PeerElementServiceRelationship : public PSafeObject { PCLASSINFO(H323PeerElementServiceRelationship, PSafeObject); public: H323PeerElementServiceRelationship() : ordinal(0) { } H323PeerElementServiceRelationship(const OpalGloballyUniqueID & _serviceID) : serviceID(_serviceID), ordinal(0) { } Comparison Compare(const PObject & obj) const { return serviceID.Compare(((H323PeerElementServiceRelationship&)obj).serviceID); } OpalGloballyUniqueID serviceID; POrdinalKey ordinal; H323TransportAddress peer; PString name; PTime createdTime; PTime lastUpdateTime; PTime expireTime; }; //////////////////////////////////////////////////////////////// /**This class embodies the an H.323 AnnexG server/client */ class H323PeerElement : public H323_AnnexG { PCLASSINFO(H323PeerElement, H323_AnnexG); public: /**@name Construction */ //@{ /**Create a new client. */ H323PeerElement( H323EndPoint & endpoint, ///< Endpoint gatekeeper is associated with. H323Transport * transport = NULL ); H323PeerElement( H323EndPoint & endpoint, ///< Endpoint gatekeeper is associated with. const H323TransportAddress & addr ); /**Destroy client. */ ~H323PeerElement(); //@} enum Error { Confirmed, Rejected, NoResponse, NoServiceRelationship, ServiceRelationshipReestablished }; enum { LocalServiceRelationshipOrdinal = 0, NoServiceRelationshipOrdinal = 1, RemoteServiceRelationshipOrdinal = 2 }; /**@name Overrides from PObject */ //@{ /**Print the name of the peer element. */ void PrintOn( ostream & strm ///< Stream to print to. ) const; //@} PSafePtr GetFirstDescriptor( PSafetyMode mode = PSafeReference ) { return PSafePtr(descriptors, mode); } PSafePtr GetFirstLocalServiceRelationship( PSafetyMode mode = PSafeReference ) { return PSafePtr(localServiceRelationships, mode); } PSafePtr GetFirstRemoteServiceRelationship( PSafetyMode mode = PSafeReference ) { return PSafePtr(remoteServiceRelationships, mode); } void SetLocalName(const PString & name); PString GetLocalName() const; void SetDomainName(const PString & name); PString GetDomainName() const; /********************************************************* functions to establish and break service relationships */ /**Send a service request */ PBoolean SetOnlyServiceRelationship(const PString & peer, PBoolean keepTrying = TRUE); PBoolean AddServiceRelationship(const H323TransportAddress & peer, PBoolean keepTrying = TRUE); PBoolean AddServiceRelationship(const H323TransportAddress & peer, OpalGloballyUniqueID & serviceID, PBoolean keepTrying = TRUE); PBoolean RemoveServiceRelationship(const OpalGloballyUniqueID & serviceID, int reason = H501_ServiceReleaseReason::e_terminated); PBoolean RemoveServiceRelationship(const H323TransportAddress & peer, int reason = H501_ServiceReleaseReason::e_terminated); PBoolean RemoveAllServiceRelationships(); Error ServiceRequestByAddr(const H323TransportAddress & peer); Error ServiceRequestByAddr(const H323TransportAddress & peer, OpalGloballyUniqueID & serviceID); Error ServiceRequestByID(OpalGloballyUniqueID & serviceID); /**Send a service release */ PBoolean ServiceRelease(const OpalGloballyUniqueID & serviceID, unsigned reason); /********************************************************* functions to manipulate the local descriptor table */ PBoolean AddDescriptor( const OpalGloballyUniqueID & descriptorID, const PStringArray & aliases, const H323TransportAddressArray & transportAddrs, unsigned options = H323PeerElementDescriptor::Protocol_H323, PBoolean now = FALSE ); PBoolean AddDescriptor( const OpalGloballyUniqueID & descriptorID, const H225_ArrayOf_AliasAddress & aliases, const H323TransportAddressArray & transportAddrs, unsigned options = H323PeerElementDescriptor::Protocol_H323, PBoolean now = FALSE ); PBoolean AddDescriptor( const OpalGloballyUniqueID & descriptorID, const H225_ArrayOf_AliasAddress & aliases, const H225_ArrayOf_AliasAddress & transportAddr, unsigned options = H323PeerElementDescriptor::Protocol_H323, PBoolean now = FALSE ); PBoolean AddDescriptor( const OpalGloballyUniqueID & descriptorID, const POrdinalKey & creator, const H225_ArrayOf_AliasAddress & alias, const H225_ArrayOf_AliasAddress & transportAddresses, unsigned options = H323PeerElementDescriptor::Protocol_H323, PBoolean now = FALSE ); PBoolean AddDescriptor( const OpalGloballyUniqueID & descriptorID, const POrdinalKey & creator, const H501_ArrayOf_AddressTemplate & addressTemplates, const PTime & updateTime, PBoolean now = FALSE ); /**Remove a descriptor from the local table */ PBoolean DeleteDescriptor(const PString & alias, PBoolean now = FALSE); PBoolean DeleteDescriptor(const H225_AliasAddress & alias, PBoolean now = FALSE); PBoolean DeleteDescriptor(const OpalGloballyUniqueID & descriptorID, PBoolean now = FALSE); /** Request access to an alias */ PBoolean AccessRequest( const PString & searchAlias, PStringArray & destAliases, H323TransportAddress & transportAddress, unsigned options = H323PeerElementDescriptor::Protocol_H323 ); PBoolean AccessRequest( const PString & searchAlias, H225_ArrayOf_AliasAddress & destAliases, H323TransportAddress & transportAddress, unsigned options = H323PeerElementDescriptor::Protocol_H323 ); PBoolean AccessRequest( const H225_AliasAddress & searchAlias, H225_ArrayOf_AliasAddress & destAliases, H323TransportAddress & transportAddress, unsigned options = H323PeerElementDescriptor::Protocol_H323 ); PBoolean AccessRequest( const H225_AliasAddress & alias, H225_ArrayOf_AliasAddress & destAliases, H225_AliasAddress & transportAddress, unsigned options = H323PeerElementDescriptor::Protocol_H323 ); /********************************************************* functions to send send descriptors to another peer element */ PBoolean UpdateDescriptor(H323PeerElementDescriptor * descriptor); PBoolean UpdateDescriptor(H323PeerElementDescriptor * descriptor, H501_UpdateInformation_updateType::Choices updateType); Error SendUpdateDescriptorByID(const OpalGloballyUniqueID & serviceID, H323PeerElementDescriptor * descriptor, H501_UpdateInformation_updateType::Choices updateType); Error SendUpdateDescriptorByAddr(const H323TransportAddress & peer, H323PeerElementDescriptor * descriptor, H501_UpdateInformation_updateType::Choices updateType); Error SendAccessRequestByID(const OpalGloballyUniqueID & peerID, H501PDU & request, H501PDU & confirmPDU); Error SendAccessRequestByAddr(const H323TransportAddress & peerAddr, H501PDU & request, H501PDU & confirmPDU); /********************************************************* low level request functions */ PBoolean MakeRequest(H323_AnnexG::Request & request); virtual void OnAddServiceRelationship(const H323TransportAddress &) { } virtual void OnRemoveServiceRelationship(const H323TransportAddress &) { } virtual void OnNewDescriptor(const H323PeerElementDescriptor &) { } virtual void OnUpdateDescriptor(const H323PeerElementDescriptor &) { } virtual void OnRemoveDescriptor(const H323PeerElementDescriptor &) { } virtual H323Transaction::Response OnServiceRequest(H501ServiceRequest & info); virtual H323Transaction::Response OnDescriptorUpdate(H501DescriptorUpdate & info); virtual H323Transaction::Response OnAccessRequest(H501AccessRequest & info); PBoolean OnReceiveServiceRequest(const H501PDU & pdu, const H501_ServiceRequest & pduBody); PBoolean OnReceiveServiceConfirmation(const H501PDU & pdu, const H501_ServiceConfirmation & pduBody); PBoolean OnReceiveDescriptorUpdate(const H501PDU & pdu, const H501_DescriptorUpdate & pduBody); PBoolean OnReceiveDescriptorUpdateACK(const H501PDU & pdu, const H501_DescriptorUpdateAck & pduBody); PBoolean OnReceiveAccessRequest(const H501PDU & pdu, const H501_AccessRequest & pduBody); PBoolean OnReceiveAccessConfirmation (const H501PDU & pdu, const H501_AccessConfirmation & pduBody); PBoolean OnReceiveAccessRejection(const H501PDU & pdu, const H501_AccessRejection & pduBody); class AliasKey : public H225_AliasAddress { public: AliasKey(const H225_AliasAddress & _alias, const OpalGloballyUniqueID & _id, PINDEX _pos, PBoolean _wild = FALSE) : H225_AliasAddress(_alias), id(_id), pos(_pos), wild(_wild) { } OpalGloballyUniqueID id; PINDEX pos; PBoolean wild; }; protected: void Construct(); Error SendUpdateDescriptor( H501PDU & pdu, const H323TransportAddress & peer, H323PeerElementDescriptor * descriptor, H501_UpdateInformation_updateType::Choices updateType); PBoolean OnRemoteServiceRelationshipDisappeared(OpalGloballyUniqueID & serviceID, const H323TransportAddress & peer); void InternalRemoveServiceRelationship(const H323TransportAddress & peer); H323Transaction::Response HandleServiceRequest(H501ServiceRequest & info); virtual H323PeerElementDescriptor * CreateDescriptor(const OpalGloballyUniqueID & descriptorID); virtual H323PeerElementServiceRelationship * CreateServiceRelationship(); virtual AliasKey * CreateAliasKey(const H225_AliasAddress & alias, const OpalGloballyUniqueID & id, PINDEX pos, PBoolean wild = FALSE); void RemoveDescriptorInformation(const H501_ArrayOf_AddressTemplate & addressTemplates); PDECLARE_NOTIFIER(PThread, H323PeerElement, MonitorMain); PDECLARE_NOTIFIER(PThread, H323PeerElement, UpdateAllDescriptors); PDECLARE_NOTIFIER(PTimer, H323PeerElement, TickleMonitor); PMutex localNameMutex; PString localIdentifier; PString domainName; PSemaphore requestMutex; PThread * monitor; PBoolean monitorStop; PSyncPoint monitorTickle; PMutex basePeerOrdinalMutex; PINDEX basePeerOrdinal; // structures needed to maintain local service relationships (for which we receive a ServiceRequest) PSafeSortedList localServiceRelationships; PMutex localPeerListMutex; POrdinalSet localServiceOrdinals; // structures needed to maintain remote service relationships (for which we send a ServiceRequest) PMutex remotePeerListMutex; PSafeSortedList remoteServiceRelationships; PStringToString remotePeerAddrToServiceID; H323DICTIONARY(StringToOrdinalKey, PString, POrdinalKey); StringToOrdinalKey remotePeerAddrToOrdinalKey; PSafeSortedList descriptors; PSORTED_LIST(AliasKeyList, H225_AliasAddress); PMutex aliasMutex; AliasKeyList transportAddressToDescriptorID; AliasKeyList specificAliasToDescriptorID; AliasKeyList wildcardAliasToDescriptorID; }; #endif // __OPAL_PECLIENT_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/h323ep.h0000644000175000017500000026713411652540116013725 0ustar markmark/* * h323ep.h * * H.323 protocol handler * * Open H323 Library * * Copyright (c) 1998-2001 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Contributor(s): ______________________________________. * * $Id: h323ep.h,v 1.41 2011/10/28 14:46:38 shorne Exp $ * */ #ifndef __OPAL_H323EP_H #define __OPAL_H323EP_H #include "h323.h" #include "h323con.h" #ifdef P_USE_PRAGMA #pragma interface #endif // Add Feature Support #ifdef H323_H460 #include "h460/h4601.h" #endif // Add NAT Method Support #ifdef P_STUN #include class PSTUNClient; #endif class PHandleAggregator; /* The following classes have forward references to avoid including the VERY large header files for H225 and H245. If an application requires access to the protocol classes they can include them, but for simple usage their inclusion can be avoided. */ class H225_EndpointType; class H225_ArrayOf_SupportedProtocols; class H225_VendorIdentifier; class H225_H221NonStandard; class H225_ServiceControlDescriptor; class H225_ArrayOf_AliasAddress; class H323SignalPDU; class H323ConnectionsCleaner; class H323ServiceControlSession; #if H323_H224 class OpalH224Handler; class OpalH281Handler; #endif #ifdef H323_T120 class OpalT120Protocol; #endif #ifdef H323_T38 class OpalT38Protocol; #endif #ifdef H323_H460P class H460PresenceHandler; #endif #ifdef H323_GNUGK class GNUGK_Feature; #endif #ifdef H323_FILE class H323FileTransferHandler; class H323FileTransferList; #endif /////////////////////////////////////////////////////////////////////////////// /**This class manages the H323 endpoint. An endpoint may have zero or more listeners to create incoming connections or zero or more outgoing conenctions initiated via the MakeCall() function. Once a conection exists it is managed by this class instance. The main thing this class embodies is the capabilities of the application, that is the codecs and protocols it is capable of. An application may create a descendent off this class and overide the CreateConnection() function, if they require a descendent of H323Connection to be created. This would be quite likely in most applications. */ class H323EndPoint : public PObject { PCLASSINFO(H323EndPoint, PObject); public: enum { DefaultTcpPort = 1720 }; /**@name Construction */ //@{ /**Create a new endpoint. */ H323EndPoint(); /**Destroy endpoint. */ ~H323EndPoint(); /**Set the endpoint information in H225 PDU's. */ virtual void SetEndpointTypeInfo( H225_EndpointType & info ) const; /**Set the vendor information in H225 PDU's. */ virtual void SetVendorIdentifierInfo( H225_VendorIdentifier & info ) const; /**Set the Gateway supported protocol default always H.323 */ PBoolean SetGatewaySupportedProtocol( H225_ArrayOf_SupportedProtocols & protocols ) const; /**Set the gateway prefixes Override this to set the acceptable prefixes to the gatekeeper */ virtual PBoolean OnSetGatewayPrefixes( PStringList & prefixes ) const; /**Set the H221NonStandard information in H225 PDU's. */ virtual void SetH221NonStandardInfo( H225_H221NonStandard & info ) const; //@} /**@name Capabilities */ //@{ /**Add a codec to the capabilities table. This will assure that the assignedCapabilityNumber field in the codec is unique for all codecs installed on this endpoint. If the specific instnace of the capability is already in the table, it is not added again. Ther can be multiple instances of the same capability class however. */ void AddCapability( H323Capability * capability ///< New codec specification ); /**Set the capability descriptor lists. This is three tier set of codecs. The top most level is a list of particular capabilities. Each of these consists of a list of alternatives that can operate simultaneously. The lowest level is a list of codecs that cannot operate together. See H323 section 6.2.8.1 and H245 section 7.2 for details. If descriptorNum is P_MAX_INDEX, the the next available index in the array of descriptors is used. Similarly if simultaneous is P_MAX_INDEX the the next available SimultaneousCapabilitySet is used. The return value is the index used for the new entry. Note if both are P_MAX_INDEX then the return value is the descriptor index as the simultaneous index must be zero. Note that the capability specified here is automatically added to the capability table using the AddCapability() function. A specific instance of a capability is only ever added once, so multiple SetCapability() calls with the same H323Capability pointer will only add that capability once. */ PINDEX SetCapability( PINDEX descriptorNum, ///< The member of the capabilityDescriptor to add PINDEX simultaneous, ///< The member of the SimultaneousCapabilitySet to add H323Capability * cap ///< New capability specification ); /**Manually remove capability type. This removes the specified Capability type out of the default capability list. */ PBoolean RemoveCapability( H323Capability::MainTypes capabilityType ///< capability type ); #ifdef H323_VIDEO /**Set the Video Frame Size. This is used for capabilities that use 1 definition for all Video Frame Sizes. This will remove all capabilities not matching the specified Frame Size and send a message to the remaining video capabilities to set the maximum framesize allowed to the specified value */ PBoolean SetVideoFrameSize(H323Capability::CapabilityFrameSize frameSize, int frameUnits = 1 ); /**Set the Video Encoder size and rate. This is used for generic Video Capabilities to set the appropriate level for a given encoder frame size and rate. */ PBoolean SetVideoEncoder(unsigned frameWidth, unsigned frameHeight, unsigned frameRate); #endif /**Add all matching capabilities in list. All capabilities that match the specified name are added. See the capabilities code for details on the matching algorithm. */ PINDEX AddAllCapabilities( PINDEX descriptorNum, ///< The member of the capabilityDescriptor to add PINDEX simultaneous, ///< The member of the SimultaneousCapabilitySet to add const PString & name ///< New capabilities name, if using "known" one. ); /**Add all user input capabilities to this endpoints capability table. */ void AddAllUserInputCapabilities( PINDEX descriptorNum, ///< The member of the capabilityDescriptor to add PINDEX simultaneous ///< The member of the SimultaneousCapabilitySet to add ); #ifdef H323_VIDEO #ifdef H323_H239 /** Open Extended Video Session */ PBoolean OpenExtendedVideoSession( const PString & token ///< Connection Token ); /** Open Extended Video Session */ PBoolean OpenExtendedVideoSession( const PString & token, ///< Connection Token H323ChannelNumber & num ///< Opened Channel number ); PBoolean CloseExtendedVideoSession( const PString & token ///< Connection Token ); PBoolean CloseExtendedVideoSession( const PString & token, ///< Connection Token const H323ChannelNumber & num ///< channel number ); /**Add all Extended Video capabilities to this endpoints capability table. */ void AddAllExtendedVideoCapabilities( PINDEX descriptorNum, ///< The member of the capabilityDescriptor to add PINDEX simultaneous ///< The member of the SimultaneousCapabilitySet to add ); #endif #endif /**Remove capabilites in table. */ void RemoveCapabilities( const PStringArray & codecNames ); /**Reorder capabilites in table. */ void ReorderCapabilities( const PStringArray & preferenceOrder ); /**Find a capability that has been registered. */ H323Capability * FindCapability( const H245_Capability & cap ///< H245 capability table entry ) const; /**Find a capability that has been registered. */ H323Capability * FindCapability( const H245_DataType & dataType ///< H245 data type of codec ) const; /**Find a capability that has been registered. */ H323Capability * FindCapability( H323Capability::MainTypes mainType, ///< Main type of codec unsigned subType ///< Subtype of codec ) const; //@} /**@name Gatekeeper management */ //@{ /**Use and register with an explicit gatekeeper. This will call other functions according to the following table: address identifier function empty empty DiscoverGatekeeper() non-empty empty SetGatekeeper() empty non-empty LocateGatekeeper() non-empty non-empty SetGatekeeperZone() The localAddress field, if non-empty, indicates the interface on which to look for the gatekeeper. An empty string is equivalent to "ip$*:*" which is any interface or port. If the endpoint is already registered with a gatekeeper that meets the same criteria then the gatekeeper is not changed, otherwise it is deleted (with unregistration) and new one created and registered to. */ PBoolean UseGatekeeper( const PString & address = PString::Empty(), ///< Address of gatekeeper to use. const PString & identifier = PString::Empty(), ///< Identifier of gatekeeper to use. const PString & localAddress = PString::Empty() ///< Local interface to use. ); /**Select and register with an explicit gatekeeper. This will use the specified transport and a string giving a transport dependent address to locate a specific gatekeeper. The endpoint will register with that gatekeeper and, if successful, set it as the current gatekeeper used by this endpoint. Note the transport being passed in will be deleted by this function or the H323Gatekeeper object it becomes associated with. Also if transport is NULL then a H323TransportUDP is created. */ PBoolean SetGatekeeper( const PString & address, ///< Address of gatekeeper to use. H323Transport * transport = NULL ///< Transport over which to talk to gatekeeper. ); /**Select and register with an explicit gatekeeper and zone. This will use the specified transport and a string giving a transport dependent address to locate a specific gatekeeper. The endpoint will register with that gatekeeper and, if successful, set it as the current gatekeeper used by this endpoint. The gatekeeper identifier is set to the spplied parameter to allow the gatekeeper to either allocate a zone or sub-zone, or refuse to register if the zones do not match. Note the transport being passed in will be deleted by this function or the H323Gatekeeper object it becomes associated with. Also if transport is NULL then a H323TransportUDP is created. */ PBoolean SetGatekeeperZone( const PString & address, ///< Address of gatekeeper to use. const PString & identifier, ///< Identifier of gatekeeper to use. H323Transport * transport = NULL ///< Transport over which to talk to gatekeeper. ); /**Locate and select gatekeeper. This function will use the automatic gatekeeper discovery methods to locate the gatekeeper on the particular transport that has the specified gatekeeper identifier name. This is often the "Zone" for the gatekeeper. Note the transport being passed in will be deleted becomes owned by the H323Gatekeeper created by this function and will be deleted by it. Also if transport is NULL then a H323TransportUDP is created. */ PBoolean LocateGatekeeper( const PString & identifier, ///< Identifier of gatekeeper to locate. H323Transport * transport = NULL ///< Transport over which to talk to gatekeeper. ); /**Discover and select gatekeeper. This function will use the automatic gatekeeper discovery methods to locate the first gatekeeper on a particular transport. Note the transport being passed in will be deleted becomes owned by the H323Gatekeeper created by this function and will be deleted by it. Also if transport is NULL then a H323TransportUDP is created. */ PBoolean DiscoverGatekeeper( H323Transport * transport = NULL ///< Transport over which to talk to gatekeeper. ); /**Create a gatekeeper. This allows the application writer to have the gatekeeper as a descendent of the H323Gatekeeper in order to add functionality to the base capabilities in the library. The default creates an instance of the H323Gatekeeper class. */ virtual H323Gatekeeper * CreateGatekeeper( H323Transport * transport ///< Transport over which gatekeepers communicates. ); /**Get the gatekeeper we are registered with. */ H323Gatekeeper * GetGatekeeper() const { return gatekeeper; } /**Return if endpoint is registered with gatekeeper. */ PBoolean IsRegisteredWithGatekeeper() const; /**Unregister and delete the gatekeeper we are registered with. The return value indicates FALSE if there was an error during the unregistration. However the gatekeeper is still removed and its instance deleted regardless of this error. */ PBoolean RemoveGatekeeper( int reason = -1 ///< Reason for gatekeeper removal ); /**Force the endpoint to reregister with Gatekeeper */ void ForceGatekeeperReRegistration(); /**Set the H.235 password for the gatekeeper. */ virtual void SetGatekeeperPassword( const PString & password ); /**Get the H.235 password for the gatekeeper. */ virtual const PString & GetGatekeeperPassword() const { return gatekeeperPassword; } /** Check the IP of the Gatekeeper on reregistration Use this to check if Gatekeeper IP had changed (used for DDNS type registrations) Default returns FALSE */ virtual PBoolean GatekeeperCheckIP(const H323TransportAddress & oldAddr,H323TransportAddress & newaddress); /**Create a list of authenticators for gatekeeper. */ virtual H235Authenticators CreateAuthenticators(); /**Called when sending a Admission Request to the gatekeeper */ virtual void OnAdmissionRequest(H323Connection & connection); /**Called when the gatekeeper sends a GatekeeperConfirm */ virtual void OnGatekeeperConfirm(); /**Called when the gatekeeper sends a GatekeeperReject */ virtual void OnGatekeeperReject(); /**Called when the gatekeeper sends a RegistrationConfirm */ virtual void OnRegistrationConfirm(const H323TransportAddress & rasAddress); /**Called when the gatekeeper sends a RegistrationReject */ virtual void OnRegistrationReject(); /**Called when Unregistered by Gatekeeper */ virtual void OnUnRegisterRequest(); /**Called when reply Unregister to Gatekeeper */ virtual void OnUnRegisterConfirm(); /**Called when TTL registration fails */ virtual void OnRegisterTTLFail(); //@} /**@name Connection management */ //@{ /**Add a listener to the endpoint. This allows for the automatic creating of incoming call connections. An application should use OnConnectionEstablished() to monitor when calls have arrived and been successfully negotiated. Note if this returns TRUE, then the endpoint is responsible for deleting the H323Listener listener object. If FALSE is returned then the object is not deleted and it is up to the caller to release the memory allocated for the object. If a listener already exists on the same transport address then it is ignored, but TRUE is still returned. The caller does not need to delete the object. */ PBoolean StartListener( H323Listener * listener ///< Transport dependent listener. ); /**Add a listener to the endpoint. This allows for the automatic creating of incoming call connections. An application should use OnConnectionEstablished() to monitor when calls have arrived and been successfully negotiated. If a listener already exists on the same address then it is ignored, but TRUE is still returned. If the iface string is empty then "*" is assumed which will listen on the standard TCP port on INADDR_ANY. */ PBoolean StartListener( const H323TransportAddress & iface ///< Address of interface to listen on. ); /**Add listeners to the endpoint. Set the collection of listeners which will allow the automatic creating of incoming call connections. An application should use OnConnectionEstablished() to monitor when calls have arrived and been successfully negotiated. If a listener already exists on the interface specified in the list then it is ignored. If a listener does not yet exist a new one is created and if a listener is running that is not in the list then it is stopped and removed. If the array is empty then the string "*" is assumed which will listen on the standard TCP port on INADDR_ANY. Returns TRUE if at least one interface was successfully started. */ PBoolean StartListeners( const H323TransportAddressArray & ifaces ///< Interfaces to listen on. ); /**Remove a listener from the endpoint. If the listener parameter is NULL then all listeners are removed. */ PBoolean RemoveListener( H323Listener * listener ///< Transport dependent listener. ); /**Return a list of the transport addresses for all listeners on this endpoint */ H323TransportAddressArray GetInterfaceAddresses( PBoolean excludeLocalHost = TRUE, ///< Flag to exclude 127.0.0.1 H323Transport * associatedTransport = NULL ///< Associated transport for precedence and translation ); #ifndef DISABLE_CALLAUTH /**Make a Authenticated call to a remote party. This Function sets Security Information to be included when calling a EP which requires Authentication */ H323Connection * MakeAuthenticatedCall ( const PString & remoteParty, ///* Remote party to call const PString & UserName, ///* UserName to Use (Default is LocalPartyName) const PString & Password, ///* Password to Use (MUST NOT BE EMPTY) PString & token, ///* String to receive token for connection void * userData = NULL ///* user data to pass to CreateConnection ); #endif /**Make a Supplimentary call to a remote party. This Function makes a Non Call supplimentary connection (lightweight call) for the purpose of delivering H.450 & H.460 non call content such as instant messaging and messagebank messages */ H323Connection * MakeSupplimentaryCall ( const PString & remoteParty, ///* Remote party to call PString & token, ///* String to receive token for connection void * userData = NULL ///* user data to pass to CreateConnection ); /**Make a call to a remote party. An appropriate transport is determined from the remoteParty parameter. The general form for this parameter is [alias@][transport$]host[:port] where the default alias is the same as the host, the default transport is "ip" and the default port is 1720. This function returns almost immediately with the call occurring in a new background thread. Note that the call could be created and cleared ie OnConnectionCleared is called BEFORE this function returns. It is guaranteed that the token variable is set before OnConnectionCleared called. Note, the returned pointer to the connection is not locked and may be deleted at any time. This is extremely unlikely immediately after the function is called, but you should not keep this pointer beyond that brief time. The the FindConnectionWithLock() function for future references to the connection object. It is recommended that MakeCallLocked() be usedin instead. */ H323Connection * MakeCall( const PString & remoteParty, ///< Remote party to call PString & token, ///< String to receive token for connection void * userData = NULL, ///< user data to pass to CreateConnection PBoolean supplimentary = false ///< Whether the call is a supplimentary call ); /**Make a call to a remote party using the specified transport. The remoteParty may be a hostname, alias or other user name that is to be passed to the transport, if present. If the transport parameter is NULL the transport is determined from the remoteParty description. This function returns almost immediately with the call occurring in a new background thread. Note that the call could be created and cleared ie OnConnectionCleared is called BEFORE this function returns. It is guaranteed that the token variable is set before OnConnectionCleared called. Note, the returned pointer to the connection is not locked and may be deleted at any time. This is extremely unlikely immediately after the function is called, but you should not keep this pointer beyond that brief time. The the FindConnectionWithLock() function for future references to the connection object. It is recommended that MakeCallLocked() be usedin instead. */ H323Connection * MakeCall( const PString & remoteParty, ///< Remote party to call H323Transport * transport, ///< Transport to use for call. PString & token, ///< String to receive token for connection void * userData = NULL, ///< user data to pass to CreateConnection PBoolean supplimentary = false ///< Whether the call is a supplimentary call ); /**Make a call to a remote party using the specified transport. The remoteParty may be a hostname, alias or other user name that is to be passed to the transport, if present. If the transport parameter is NULL the transport is determined from the remoteParty description. This function returns almost immediately with the call occurring in a new background thread. However the call will not progress very far */ H323Connection * MakeCallLocked( const PString & remoteParty, ///< Remote party to call PString & token, ///< String to receive token for connection void * userData = NULL, ///< user data to pass to CreateConnection H323Transport * transport = NULL ///< Transport to use for call. ); #ifdef H323_H450 /**Setup the transfer of an existing call (connection) to a new remote party using H.450.2. This sends a Call Transfer Setup Invoke message from the B-Party (transferred endpoint) to the C-Party (transferred-to endpoint). If the transport parameter is NULL the transport is determined from the remoteParty description. The general form for this parameter is [alias@][transport$]host[:port] where the default alias is the same as the host, the default transport is "ip" and the default port is 1720. This function returns almost immediately with the transfer occurring in a new background thread. Note, the returned pointer to the connection is not locked and may be deleted at any time. This is extremely unlikely immediately after the function is called, but you should not keep this pointer beyond that brief time. The the FindConnectionWithLock() function for future references to the connection object. This function is declared virtual to allow an application to override the function and get the new call token of the forwarded call. */ virtual H323Connection * SetupTransfer( const PString & token, ///< Existing connection to be transferred const PString & callIdentity, ///< Call identity of the secondary call (if it exists) const PString & remoteParty, ///< Remote party to transfer the existing call to PString & newToken, ///< String to receive token for the new connection void * userData = NULL ///< user data to pass to CreateConnection ); /**Initiate the transfer of an existing call (connection) to a new remote party using H.450.2. This sends a Call Transfer Initiate Invoke message from the A-Party (transferring endpoint) to the B-Party (transferred endpoint). */ void TransferCall( const PString & token, ///< Existing connection to be transferred const PString & remoteParty, ///< Remote party to transfer the existing call to const PString & callIdentity = PString::Empty() ///< Call Identity of secondary call if present ); /**Transfer the call through consultation so the remote party in the primary call is connected to the called party in the second call using H.450.2. This sends a Call Transfer Identify Invoke message from the A-Party (transferring endpoint) to the C-Party (transferred-to endpoint). */ void ConsultationTransfer( const PString & primaryCallToken, ///< Token of primary call const PString & secondaryCallToken ///< Token of secondary call ); /**Place the call on hold, suspending all media channels (H.450.4) * NOTE: Only Local Hold is implemented so far. */ void HoldCall( const PString & token, ///< Existing connection to be transferred PBoolean localHold ///< true for Local Hold, false for Remote Hold ); /** Initiate Call intrusion Designed similar to MakeCall function */ H323Connection * IntrudeCall( const PString & remoteParty, ///< Remote party to intrude call PString & token, ///< String to receive token for connection unsigned capabilityLevel, ///< Capability level void * userData = NULL ///< user data to pass to CreateConnection ); H323Connection * IntrudeCall( const PString & remoteParty, ///< Remote party to intrude call H323Transport * transport, ///< Transport to use for call. PString & token, ///< String to receive token for connection unsigned capabilityLevel, ///< Capability level void * userData = NULL ///< user data to pass to CreateConnection ); #endif // H323_H450 /** Use DNS SRV and ENUM to resolve all the possible addresses a call party can be found. Only effective if not registered with Gatekeeper */ PBoolean ResolveCallParty( const PString & _remoteParty, PStringList & addresses ); /**Parse a party address into alias and transport components. An appropriate transport is determined from the remoteParty parameter. The general form for this parameter is [alias@][transport$]host[:port] where the default alias is the same as the host, the default transport is "ip" and the default port is 1720. */ PBoolean ParsePartyName( const PString & party, ///< Party name string. PString & alias, ///< Parsed alias name H323TransportAddress & address ///< Parsed transport address ); /**Clear a current connection. This hangs up the connection to a remote endpoint. Note that this function is asynchronous */ virtual PBoolean ClearCall( const PString & token, ///< Token for identifying connection H323Connection::CallEndReason reason = H323Connection::EndedByLocalUser ///< Reason for call clearing ); /**Clearing a current connection. A connection is being cleared callback. This can be used for PBX applications to reallocate the line early without waiting for the cleaner thread to clean-up the connection. */ virtual void OnCallClearing(H323Connection * connection, ///* Connection being Cleared H323Connection::CallEndReason reason ///* Reason for call being cleared ); /**Clear a current connection. This hangs up the connection to a remote endpoint. Note that these functions are synchronous */ virtual PBoolean ClearCallSynchronous( const PString & token, ///< Token for identifying connection H323Connection::CallEndReason reason = H323Connection::EndedByLocalUser ///< Reason for call clearing ); virtual PBoolean ClearCallSynchronous( const PString & token, ///< Token for identifying connection H323Connection::CallEndReason reason, ///< Reason for call clearing PSyncPoint * sync ); /**Clear all current connections. This hangs up all the connections to remote endpoints. The wait parameter is used to wait for all the calls to be cleared and their memory usage cleaned up before returning. This is typically used in the destructor for your descendant of H323EndPoint. */ virtual void ClearAllCalls( H323Connection::CallEndReason reason = H323Connection::EndedByLocalUser, ///< Reason for call clearing PBoolean wait = TRUE ///< Flag for wait for calls to e cleared. ); /**Determine if a connection is active. */ virtual PBoolean HasConnection( const PString & token ///< Token for identifying connection ); /**Find a connection that uses the specified token. This searches the endpoint for the connection that contains the token as provided by functions such as MakeCall() (as built by the BuildConnectionToken() function). if not found it will then search for the string representation of the CallIdentifier for the connection, and finally try for the string representation of the ConferenceIdentifier. Note the caller of this function MUSt call the H323Connection::Unlock() function if this function returns a non-NULL pointer. If it does not then a deadlock can occur. */ H323Connection * FindConnectionWithLock( const PString & token ///< Token to identify connection ); /**Get all calls current on the endpoint. */ PStringList GetAllConnections(); /**Call back for incoming call. This function is called from the OnReceivedSignalSetup() function before it sends the Alerting PDU. It gives an opportunity for an application to alter the reply before transmission to the other endpoint. If FALSE is returned the connection is aborted and a Release Complete PDU is sent. The default behaviour simply returns TRUE. */ virtual PBoolean OnIncomingCall( H323Connection & connection, ///< Connection that was established const H323SignalPDU & setupPDU, ///< Received setup PDU H323SignalPDU & alertingPDU ///< Alerting PDU to send ); virtual PBoolean OnIncomingCall( H323Connection & connection, ///< Connection that was established const H323SignalPDU & setupPDU, ///< Received setup PDU H323SignalPDU & alertingPDU, ///< Alerting PDU to send H323Connection::CallEndReason & reason ///< reason for call refusal, if returned false ); /**Handle a connection transfer. This gives the application an opportunity to abort the transfer. The default behaviour just returns TRUE. */ virtual PBoolean OnCallTransferInitiate( H323Connection & connection, ///< Connection to transfer const PString & remoteParty ///< Party transferring to. ); /**Handle a transfer via consultation. This gives the transferred-to user an opportunity to abort the transfer. The default behaviour just returns TRUE. */ virtual PBoolean OnCallTransferIdentify( H323Connection & connection ///< Connection to transfer ); /** * Callback for ARQ send to a gatekeeper. This allows the endpoint * to change or check fields in the ARQ before it is sent. */ virtual void OnSendARQ( H323Connection & conn, H225_AdmissionRequest & arq ); /** * Callback for ACF sent back from gatekeeper. */ virtual void OnReceivedACF( H323Connection & conn, const H225_AdmissionConfirm & acf ); /** * Callback for ARJ sent back from gatekeeper. */ virtual void OnReceivedARJ( H323Connection & conn, const H225_AdmissionReject & arj ); /**Call back for answering an incoming call. This function is called from the OnReceivedSignalSetup() function before it sends the Connect PDU. It gives an opportunity for an application to alter the reply before transmission to the other endpoint. It also gives an application time to wait for some event before signalling to the endpoint that the connection is to proceed. For example the user pressing an "Answer call" button. If AnswerCallDenied is returned the connection is aborted and a Release Complete PDU is sent. If AnswerCallNow is returned then the H.323 protocol proceeds. Finally if AnswerCallPending is returned then the protocol negotiations are paused until the AnsweringCall() function is called. The default behaviour simply returns AnswerNow. */ virtual H323Connection::AnswerCallResponse OnAnswerCall( H323Connection & connection, ///< Connection that was established const PString & callerName, ///< Name of caller const H323SignalPDU & setupPDU, ///< Received setup PDU H323SignalPDU & connectPDU ///< Connect PDU to send. ); /**Call back for remote party being alerted. This function is called from the SendSignalSetup() function after it receives the optional Alerting PDU from the remote endpoint. That is when the remote "phone" is "ringing". If FALSE is returned the connection is aborted and a Release Complete PDU is sent. The default behaviour simply returns TRUE. */ virtual PBoolean OnAlerting( H323Connection & connection, ///< Connection that was established const H323SignalPDU & alertingPDU, ///< Received Alerting PDU const PString & user ///< Username of remote endpoint ); /**A call back function when a connection indicates it is to be forwarded. An H323 application may handle this call back so it can make complicated decisions on if the call forward ius to take place. If it decides to do so it must call MakeCall() and return TRUE. The default behaviour simply returns FALSE and that the automatic call forwarding should take place. See ForwardConnection() */ virtual PBoolean OnConnectionForwarded( H323Connection & connection, ///< Connection to be forwarded const PString & forwardParty, ///< Remote party to forward to const H323SignalPDU & pdu ///< Full PDU initiating forwarding ); /**Forward the call using the same token as the specified connection. Return TRUE if the call is being redirected. The default behaviour will replace the current call in the endpoints call list using the same token as the call being redirected. Not that even though the same token is being used the actual object is completely mad anew. */ virtual PBoolean ForwardConnection( H323Connection & connection, ///< Connection to be forwarded const PString & forwardParty, ///< Remote party to forward to const H323SignalPDU & pdu ///< Full PDU initiating forwarding ); /**A call back function whenever a connection is established. This indicates that a connection to a remote endpoint was established with a control channel and zero or more logical channels. The default behaviour does nothing. */ virtual void OnConnectionEstablished( H323Connection & connection, ///< Connection that was established const PString & token ///< Token for identifying connection ); /**Determine if a connection is established. */ virtual PBoolean IsConnectionEstablished( const PString & token ///< Token for identifying connection ); /**A call back function whenever a connection is broken. This indicates that a connection to a remote endpoint is no longer available. The default behaviour does nothing. */ virtual void OnConnectionCleared( H323Connection & connection, ///< Connection that was established const PString & token ///< Token for identifying connection ); /**Build a unique token for the connection. This identifies the call using the Q931 transport host name and the Q931 call reference number. */ static PString BuildConnectionToken( const H323Transport & transport, ///< Transport for connection unsigned callReference, ///< Call reference of Q.931 link PBoolean fromRemote ///< Call reference is from remote endpoint ); /**Handle a new incoming connection. This will examine the setup PDU and either attach the signalling transport to an existing connection that has the same Q.931 call reference, or creates a new connection using CreateConnection(). */ virtual H323Connection * OnIncomingConnection( H323Transport * transport, ///< Transport for connection H323SignalPDU & setupPDU ///< Setup PDU ); /**Called when an outgoing call connects If FALSE is returned the connection is aborted and a Release Complete PDU is sent. The default behaviour simply returns TRUE. */ virtual PBoolean OnOutgoingCall( H323Connection & conn, const H323SignalPDU & connectPDU ); /**Create a connection that uses the specified call reference. */ virtual H323Connection * CreateConnection( unsigned callReference, ///< Call reference to use void * userData, ///< user data to pass to CreateConnection H323Transport * transport, ///< Transport for connection H323SignalPDU * setupPDU ///< Setup PDU, NULL if outgoing call ); virtual H323Connection * CreateConnection( unsigned callReference, ///< Call reference to use void * userData ///< user data to pass to CreateConnection ); virtual H323Connection * CreateConnection( unsigned callReference ///< Call reference to use ); /**Clean up connections. This function is called from a background thread and checks for closed connections to clean up. This would not normally be called by an application. */ virtual void CleanUpConnections(); //@} #ifndef DISABLE_CALLAUTH /**@name Caller Authentication */ //@{ /**Create a list of authenticators for Call Authentication. To Create a list of Autheniticators the Endpoint MUST have set EPSecurityPassword (via SetEPCredentials()) and either set CallAuthPolicy (via SetEPSecurityPolicy()) or set isSecureCall to TRUE (via MakeAuthenticatedCall()) */ virtual H235Authenticators CreateEPAuthenticators(); /** Retrieve Password and UserName for EPAuthentication NOTE: Returns FALSE is EPSecurityPassword.IsEmpty() */ virtual PBoolean GetEPCredentials(PString & password, ///* Password to use for call PString & username ///* Username to use for call ); /** Set the Password and UserName for EPAuthentication for Connection */ virtual void SetEPCredentials(PString password, ///* Password to use for call PString username ///* Username to use for call ); enum EPSecurityPolicy { SecNone, ///* Default: Do Not Include Call Authenication SecRequest, ///* Request Authentication but Accept if Missing/Fail SecRequired ///* Calls are Rejected with EndedBySecurityDenial if Authenitication fails. }; /** Set the EP Security Policy */ virtual void SetEPSecurityPolicy(EPSecurityPolicy policy); /** Get the EP Security Policy */ virtual EPSecurityPolicy GetEPSecurityPolicy(); /** Retrieve the List of UserNames/Passwords to be used to Authenticate Incoming Calls. */ H235AuthenticatorList GetAuthenticatorList(); /** Call Authentication Call Back This fires for all the Authentication Methods created by CreateEPAuthenticators() The Function Supplies the Name of the Authentication process and the supplied SenderID (Username) and this is then check against EPAuthList to: 1. Check if the username exists and if so 2. Return the password in the clear to validate. Returning FALSE indicates that Authentication Failed failed for that Method.. */ virtual PBoolean OnCallAuthentication(const PString & username, ///* UserName of Caller PString & password ///* Password related to caller ); //@} #endif /**@name Logical Channels management */ //@{ /**Call back for opening a logical channel. The default behaviour simply returns TRUE. */ virtual PBoolean OnStartLogicalChannel( H323Connection & connection, ///< Connection for the channel H323Channel & channel ///< Channel being started ); /**Call back for closed a logical channel. The default behaviour does nothing. */ virtual void OnClosedLogicalChannel( H323Connection & connection, ///< Connection for the channel const H323Channel & channel ///< Channel being started ); #ifdef H323_AUDIO_CODECS /**Open a channel for use by an audio codec. The H323AudioCodec class will use this function to open the channel to read/write PCM data. The default function creates a PSoundChannel using the member variables soundChannelPlayDevice or soundChannelRecordDevice. */ virtual PBoolean OpenAudioChannel( H323Connection & connection, ///< Connection for the channel PBoolean isEncoding, ///< Direction of data flow unsigned bufferSize, ///< Size of each sound buffer H323AudioCodec & codec ///< codec that is doing the opening ); #endif #ifdef H323_VIDEO /**Open a channel for use by an video codec. The H323VideoCodec class will use this function to open the channel to read/write image data (which is one frame in a video stream - YUV411 format). The default function creates a PVideoChannel using the member variables. */ virtual PBoolean OpenVideoChannel( H323Connection & connection, ///< Connection for the channel PBoolean isEncoding, ///< Direction of data flow H323VideoCodec & codec ///< codec doing the opening ); #ifdef H323_H239 /**Open a channel for use by an application share application. The H323VideoCodec class will use this function to open the channel to read/write image data (which is one frame in a video stream - YUV411 format). The default function creates a PVideoChannel using the member variables. */ virtual PBoolean OpenExtendedVideoChannel( H323Connection & connection, ///< Connection for the channel PBoolean isEncoding, ///< Direction of data flow H323VideoCodec & codec ///< codec doing the opening ); #endif // H323_H239 #endif // NO_H323_VIDEO /**Callback from the RTP session for statistics monitoring. This is called every so many packets on the transmitter and receiver threads of the RTP session indicating that the statistics have been updated. The default behaviour does nothing. */ virtual void OnRTPStatistics( const H323Connection & connection, ///< Connection for the channel const RTP_Session & session ///< Session with statistics ) const; /**Callback from the RTP session for statistics monitoring. This is called at the end of the RTP session indicating that the statistics of the call The default behaviour does nothing. */ virtual void OnRTPFinalStatistics( const H323Connection & connection, ///< Connection for the channel const RTP_Session & session ///< Session with statistics ) const; //@} /**@name Indications */ //@{ /**Call back for remote enpoint has sent user input as a string. The default behaviour does nothing. */ virtual void OnUserInputString( H323Connection & connection, ///< Connection for the input const PString & value ///< String value of indication ); /**Call back for remote enpoint has sent user input. The default behaviour calls H323Connection::OnUserInputTone(). */ virtual void OnUserInputTone( H323Connection & connection, ///< Connection for the input char tone, ///< DTMF tone code unsigned duration, ///< Duration of tone in milliseconds unsigned logicalChannel, ///< Logical channel number for RTP sync. unsigned rtpTimestamp ///< RTP timestamp in logical channel sync. ); #ifdef H323_GNUGK /**Call back from GK admission confirm to notify the Endpoint it is behind a NAT (GNUGK Gatekeeper) The default does nothing. Override this to notify the user they are behind a NAT. */ virtual void OnGatekeeperNATDetect( PIPSocket::Address publicAddr, ///< Public address as returned by the Gatekeeper const PString & gkIdentifier, ///< Identifier at the gatekeeper H323TransportAddress & gkRouteAddress ///< Gatekeeper Route Address ); /**Call back from GK admission confirm to notify the Endpoint it is not detected as being NAT (GNUGK Gatekeeper) The default does nothing. Override this to notify the user they are not NAT so they can confirm that it is true. */ virtual void OnGatekeeperOpenNATDetect( const PString & gkIdentifier, ///< Identifier at the gatekeeper H323TransportAddress & gkRouteAddress ///< Gatekeeper Route Address ); /** Fired with the keep-alive connection to GnuGk fails or is re-established This allows the endpoint to re-register. */ virtual void NATLostConnection(PBoolean lost); #endif /** Call back for GK assigned aliases returned from the gatekeeper in the RCF. The default returns FALSE which appends the new aliases to the existing alias list. By overriding this function and returning TRUE overrides the default operation */ virtual PBoolean OnGatekeeperAliases( const H225_ArrayOf_AliasAddress & aliases ///< Alias List returned from the gatekeeper ); //@} #ifdef H323_H248 /**@name Service Control */ //@{ /**Call back for HTTP based Service Control. An application may override this to use an HTTP link to display call information/CDR's or Billing information. The default behaviour does nothing. */ virtual void OnHTTPServiceControl( unsigned operation, ///< Control operation unsigned sessionId, ///< Session ID for HTTP page const PString & url ///< URL to use. ); /**Call back for Call Credit Service Control. An application may override this to display call credit Information. The default behaviour does nothing. */ virtual void OnCallCreditServiceControl( const PString & amount, ///< UTF-8 string for amount, including currency. PBoolean mode, ///< Flag indicating that calls will debit the account. const unsigned & durationLimit ///< Duration Limit (used to decrement display) ); #ifdef H323_H350 /**Call back for LDAP based Service Control. An application may override this to use an LDAP directory to query White Page searches. The default behaviour does nothing. */ virtual void OnH350ServiceControl( const PString & url, const PString & BaseDN ); #endif /**Call back for call credit information. An application may override this to display call credit information on registration, or when a call is started. The canDisplayAmountString member variable must also be set to TRUE for this to operate. The default behaviour does nothing. */ virtual void OnCallCreditServiceControl( const PString & amount, ///< UTF-8 string for amount, including currency. PBoolean mode ///< Flag indicating that calls will debit the account. ); /**Handle incoming service control session information. Default behaviour calls session.OnChange() */ virtual void OnServiceControlSession( unsigned type, unsigned sessionid, const H323ServiceControlSession & session, H323Connection * connection ); /**Create the service control session object. */ virtual H323ServiceControlSession * CreateServiceControlSession( const H225_ServiceControlDescriptor & contents ); //@} #endif // H323_H248 /**@name Other services */ //@{ #ifdef H323_T120 /**Create an instance of the T.120 protocol handler. This is called when the OpenLogicalChannel subsystem requires that a T.120 channel be established. Note that if the application overrides this it should return a pointer to a heap variable (using new) as it will be automatically deleted when the H323Connection is deleted. The default behavour returns NULL. */ virtual OpalT120Protocol * CreateT120ProtocolHandler( const H323Connection & connection ///< Connection for which T.120 handler created ) const; #endif #ifdef H323_T38 /**Create an instance of the T.38 protocol handler. This is called when the OpenLogicalChannel subsystem requires that a T.38 fax channel be established. Note that if the application overrides this it should return a pointer to a heap variable (using new) as it will be automatically deleted when the H323Connection is deleted. The default behavour returns NULL. */ virtual OpalT38Protocol * CreateT38ProtocolHandler( const H323Connection & connection ///< Connection for which T.38 handler created ) const; //@} #endif #if H323_H224 /** Create an instance of the H.224 protocol handler. This is called when the subsystem requires that a H.224 channel be established. Note that if the application overrides this it should return a pointer to a heap variable (using new) as it will be automatically deleted when the Connection is deleted. The default behaviour creates a new OpalH224Handler. */ virtual OpalH224Handler * CreateH224ProtocolHandler( H323Channel::Directions dir, H323Connection & connection, unsigned sessionID ) const; /** Create an instance of the H.224 protocol handler. This is called when the subsystem requires that a H.224 channel be established. Note that if the application overrides this it should return a pointer to a heap variable (using new) as it will be automatically deleted when the Connection is deleted. The default behaviour creates a new OpalH281Handler. */ virtual OpalH281Handler * CreateH281ProtocolHandler( OpalH224Handler & h224Handler ) const; #endif #ifdef H323_FILE /** Open File Transfer Session Use this to initiate a file transfer. */ PBoolean OpenFileTransferSession( const H323FileTransferList & list, ///< List of Files Requested const PString & token, ///< Connection Token H323ChannelNumber & num ///< Opened Channel number ); /** Open a File Transfer Channel. This is called when the subsystem requires that a File Transfer channel be established. An implementer should override this function to facilitate file transfer. If transmitting, list of files should be populated to notify the channel which files to read. If receiving, the list of files should be altered to include path information for the storage of received files. The default behaviour returns FALSE to indicate File Transfer is not implemented. */ virtual PBoolean OpenFileTransferChannel(H323Connection & connection, ///< Connection PBoolean isEncoder, ///< direction of channel H323FileTransferList & filelist ///< Transfer File List ); #endif /**@name Additional call services */ //@{ /** Called when an endpoint receives a SETUP PDU with a conference goal of "invite" The default behaviour is to return FALSE, which will close the connection */ virtual PBoolean OnConferenceInvite( PBoolean sending, ///< direction const H323Connection * connection, ///< Connection const H323SignalPDU & setupPDU ///< PDU message ); /** Called when an endpoint receives a SETUP PDU with a conference goal of "callIndependentSupplementaryService" The default behaviour is to return FALSE, which will close the connection */ virtual PBoolean OnSendCallIndependentSupplementaryService( const H323Connection * connection, ///< Connection H323SignalPDU & pdu ///< PDU message ); virtual PBoolean OnReceiveCallIndependentSupplementaryService( const H323Connection * connection, ///< Connection const H323SignalPDU & pdu ///< PDU message ); /** Called when an endpoint receives a SETUP PDU with a conference goal of "capability_negotiation" The default behaviour is to return FALSE, which will close the connection */ virtual PBoolean OnNegotiateConferenceCapabilities( const H323SignalPDU & setupPDU ); //@} /**@name Member variable access */ //@{ /**Set the user name to be used for the local end of any connections. This defaults to the logged in user as obtained from the PProcess::GetUserName() function. Note that this name is technically the first alias for the endpoint. Additional aliases may be added by the use of the AddAliasName() function, however that list will be cleared when this function is used. */ virtual void SetLocalUserName( const PString & name ///< Local name of endpoint (prime alias) ); /**Get the user name to be used for the local end of any connections. This defaults to the logged in user as obtained from the PProcess::GetUserName() function. */ virtual const PString & GetLocalUserName() const { return localAliasNames[0]; } /**Add an alias name to be used for the local end of any connections. If the alias name already exists in the list then is is not added again. The list defaults to the value set in the SetLocalUserName() function. Note that calling SetLocalUserName() will clear the alias list. */ PBoolean AddAliasName( const PString & name ///< New alias name to add ); /**Remove an alias name used for the local end of any connections. defaults to an empty list. */ PBoolean RemoveAliasName( const PString & name ///< New alias namer to add ); /**Get the user name to be used for the local end of any connections. This defaults to the logged in user as obtained from the PProcess::GetUserName() function. */ const PStringList & GetAliasNames() const { return localAliasNames; } #if P_LDAP /**Get the default ILS server to use for user lookup. */ const PString & GetDefaultILSServer() const { return ilsServer; } /**Set the default ILS server to use for user lookup. */ void SetDefaultILSServer( const PString & server ) { ilsServer = server; } #endif /**Get the default fast start mode. */ PBoolean IsFastStartDisabled() const { return disableFastStart; } /**Set the default fast start mode. */ void DisableFastStart( PBoolean mode ///< New default mode ) { disableFastStart = mode; } /**Get the default H.245 tunneling mode. */ PBoolean IsH245TunnelingDisabled() const { return disableH245Tunneling; } /**Set the default H.245 tunneling mode. */ void DisableH245Tunneling( PBoolean mode ///< New default mode ) { disableH245Tunneling = mode; } /**Get the default H.245 tunneling mode. */ PBoolean IsH245inSetupDisabled() const { return disableH245inSetup; } /**Set the default H.245 tunneling mode. */ void DisableH245inSetup( PBoolean mode ///< New default mode ) { disableH245inSetup = mode; } /** Get the default H.245 QoS mode. */ PBoolean IsH245QoSDisabled() const { return disableH245QoS; } /** Disable H.245 QoS support */ void DisableH245QoS( PBoolean mode ///< New default mode ) { disableH245QoS = mode; } /**Get the detect in-band DTMF flag. */ PBoolean DetectInBandDTMFDisabled() const { return disableDetectInBandDTMF; } /**Set the detect in-band DTMF flag. */ void DisableDetectInBandDTMF( PBoolean mode ///< New default mode ) { disableDetectInBandDTMF = mode; } /**Get the flag indicating the endpoint can display an amount string. */ PBoolean CanDisplayAmountString() const { return canDisplayAmountString; } /**Set the flag indicating the endpoint can display an amount string. */ void SetCanDisplayAmountString( PBoolean mode ///< New default mode ) { canDisplayAmountString = mode; } /**Get the flag indicating the call will automatically clear after a time. */ PBoolean CanEnforceDurationLimit() const { return canEnforceDurationLimit; } /**Set the flag indicating the call will automatically clear after a time. */ void SetCanEnforceDurationLimit( PBoolean mode ///< New default mode ) { canEnforceDurationLimit = mode; } #ifdef H323_RTP_AGGREGATE /**Set the RTP aggregation size */ void SetRTPAggregatationSize( PINDEX size ///< max connections per aggregation thread. Value of 1 or zero disables aggregation ) { rtpAggregationSize = size; } /**Get the RTP aggregation size */ PINDEX GetRTPAggregationSize() const { return rtpAggregationSize; } /** Get the aggregator used for RTP channels */ PHandleAggregator * GetRTPAggregator(); #endif #ifdef H323_SIGNAL_AGGREGATE /**Set the signalling aggregation size */ void SetSignallingAggregationSize( PINDEX size ///< max connections per aggregation thread. Value of 1 or zero disables aggregation ) { signallingAggregationSize = size; } /**Get the RTP aggregation size */ PINDEX GetSignallingAggregationSize() const { return signallingAggregationSize; } /** Get the aggregator used for signalling channels */ PHandleAggregator * GetSignallingAggregator(); #endif #ifdef H323_H450 /**Get Call Intrusion Protection Level of the end point. */ unsigned GetCallIntrusionProtectionLevel() const { return callIntrusionProtectionLevel; } /**Set Call Intrusion Protection Level of the end point. */ void SetCallIntrusionProtectionLevel( unsigned level ///< New level from 0 to 3 ) { PAssert(level<=3, PInvalidParameter); callIntrusionProtectionLevel = level; } /**Called from H.450 OnReceivedInitiateReturnError */ virtual void OnReceivedInitiateReturnError(); #endif // H323_H450 #ifdef H323_AUDIO_CODECS #ifdef P_AUDIO /**Set the name for the sound channel to be used for output. If the name is not suitable for use with the PSoundChannel class then the function will return FALSE and not change the device. This defaults to the value of the PSoundChannel::GetDefaultDevice() function. */ virtual PBoolean SetSoundChannelPlayDevice(const PString & name); virtual PBoolean SetSoundChannelPlayDriver(const PString & name); /**Get the name for the sound channel to be used for output. This defaults to the value of the PSoundChannel::GetDefaultDevice() function. */ const PString & GetSoundChannelPlayDevice() const { return soundChannelPlayDevice; } const PString & GetSoundChannelPlayDriver() const { return soundChannelPlayDriver; } /**Set the name for the sound channel to be used for input. If the name is not suitable for use with the PSoundChannel class then the function will return FALSE and not change the device. This defaults to the value of the PSoundChannel::GetDefaultDevice() function. */ virtual PBoolean SetSoundChannelRecordDevice(const PString & name); virtual PBoolean SetSoundChannelRecordDriver(const PString & name); /**Get the name for the sound channel to be used for input. This defaults to the value of the PSoundChannel::GetDefaultDevice() function. */ const PString & GetSoundChannelRecordDevice() const { return soundChannelRecordDevice; } const PString & GetSoundChannelRecordDriver() const { return soundChannelRecordDriver; } /**Get default the sound channel buffer depth. */ unsigned GetSoundChannelBufferDepth() const { return soundChannelBuffers; } /**Set the default sound channel buffer depth. */ void SetSoundChannelBufferDepth( unsigned depth ///< New depth ); #endif // P_AUDIO /**Get the default silence detection mode. */ H323AudioCodec::SilenceDetectionMode GetSilenceDetectionMode() const { return defaultSilenceDetection; } /**Set the default silence detection mode. */ void SetSilenceDetectionMode( H323AudioCodec::SilenceDetectionMode mode ///< New default mode ) { defaultSilenceDetection = mode; } #endif // H323_AUDIO_CODECS /**Get the default mode for sending User Input Indications. */ H323Connection::SendUserInputModes GetSendUserInputMode() const { return defaultSendUserInputMode; } /**Set the default mode for sending User Input Indications. */ void SetSendUserInputMode(H323Connection::SendUserInputModes mode) { defaultSendUserInputMode = mode; } #ifdef H323_AUDIO_CODECS /**See if should auto-start receive audio channels on connection. */ PBoolean CanAutoStartReceiveAudio() const { return autoStartReceiveAudio; } /**See if should auto-start transmit audio channels on connection. */ PBoolean CanAutoStartTransmitAudio() const { return autoStartTransmitAudio; } #endif #ifdef H323_VIDEO /**See if should auto-start receive video channels on connection. */ PBoolean CanAutoStartReceiveVideo() const { return autoStartReceiveVideo; } /**See if should auto-start transmit video channels on connection. */ PBoolean CanAutoStartTransmitVideo() const { return autoStartTransmitVideo; } #ifdef H323_H239 /**See if should auto-start receive extended Video channels on connection. */ PBoolean CanAutoStartReceiveExtVideo() const { return autoStartReceiveExtVideo; } /**See if should auto-start transmit extended Video channels on connection. */ PBoolean CanAutoStartTransmitExtVideo() const { return autoStartTransmitExtVideo; } #endif // H323_H239 #endif // H323_VIDEO #ifdef H323_T38 /**See if should auto-start receive fax channels on connection. */ PBoolean CanAutoStartReceiveFax() const { return autoStartReceiveFax; } /**See if should auto-start transmit fax channels on connection. */ PBoolean CanAutoStartTransmitFax() const { return autoStartTransmitFax; } #endif // H323_T38 /**See if should automatically do call forward of connection. */ PBoolean CanAutoCallForward() const { return autoCallForward; } /**Get the set of listeners (incoming call transports) for this endpoint. */ const H323ListenerList & GetListeners() const { return listeners; } /**Get the current capability table for this endpoint. */ const H323Capabilities & GetCapabilities() const { return capabilities; } /**Endpoint types. */ enum TerminalTypes { e_TerminalOnly = 50, e_TerminalAndMC = 70, e_GatewayOnly = 60, e_GatewayAndMC = 80, e_GatewayAndMCWithDataMP = 90, e_GatewayAndMCWithAudioMP = 100, e_GatewayAndMCWithAVMP = 110, e_GatekeeperOnly = 120, e_GatekeeperWithDataMP = 130, e_GatekeeperWithAudioMP = 140, e_GatekeeperWithAVMP = 150, e_MCUOnly = 160, e_MCUWithDataMP = 170, e_MCUWithAudioMP = 180, e_MCUWithAVMP = 190 }; /**Get the endpoint terminal type. */ TerminalTypes GetTerminalType() const { return terminalType; } /**Determine if endpoint is terminal type. */ PBoolean IsTerminal() const; /**Determine if endpoint is gateway type. */ PBoolean IsGateway() const; /**Determine if endpoint is gatekeeper type. */ PBoolean IsGatekeeper() const; /**Determine if endpoint is gatekeeper type. */ PBoolean IsMCU() const; #ifdef H323_AUDIO_CODECS /**Get the default maximum audio jitter delay parameter. Defaults to 50ms */ unsigned GetMinAudioJitterDelay() const { return minAudioJitterDelay; } /**Get the default maximum audio delay jitter parameter. Defaults to 250ms. */ unsigned GetMaxAudioJitterDelay() const { return maxAudioJitterDelay; } /**Set the maximum audio delay jitter parameter. */ void SetAudioJitterDelay( unsigned minDelay, ///< New minimum jitter buffer delay in milliseconds unsigned maxDelay ///< New maximum jitter buffer delay in milliseconds ); #endif /**Get the initial bandwidth parameter. */ unsigned GetInitialBandwidth() const { return initialBandwidth; } /**Get the initial bandwidth parameter. */ void SetInitialBandwidth(unsigned bandwidth) { initialBandwidth = bandwidth; } #ifdef H323_VIDEO virtual void OnSetInitialBandwidth(H323VideoCodec * /*codec*/) {}; #endif /**Called when an outgoing PDU requires a feature set */ virtual PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet &, PBoolean); /**Called when an incoming PDU contains a feature set */ virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &, PBoolean = false); #ifdef H323_H460 /**Get the complete list of Gatekeeper features */ H460_FeatureSet * GetGatekeeperFeatures(); #endif /**Load the Base FeatureSet usually called when you initialise the endpoint prior to registering with a gatekeeper. */ virtual void LoadBaseFeatureSet(); /**Callback when creating Feature Instance. This can be used to disable features on a case by case basis by returning FALSE Default returns TRUE */ virtual PBoolean OnFeatureInstance(int instType, const PString & identifer); /**Handle Unsolicited Information PDU received on the signal listening socket not associated with a connection. */ virtual PBoolean HandleUnsolicitedInformation(const H323SignalPDU & pdu); #ifdef H323_H460 /** Get the Endpoint FeatureSet This creates a new instance of the featureSet */ H460_FeatureSet * GetFeatureSet() { return features.DeriveNewFeatureSet(); }; /** Is the FeatureSet disabled */ PBoolean FeatureSetDisabled() { return disableH460; } /** Disable all FeatureSets. Use this for pre H323v4 interoperability */ void FeatureSetDisable() { disableH460 = TRUE; } /** Feature Callback */ virtual void FeatureCallBack(const PString & FeatID, ///< Feature Identifier PINDEX msgID, ///< Message Identifer const PString & message ///< Message ) {}; #ifdef H323_H46018 /** Disable H.460.18 Feature. (By Default it is enabled) */ void H46018Enable(PBoolean enable); /** Query whether we are using H.460.18 */ PBoolean H46018IsEnabled(); /** Signal that H.460.18 has been received. ie. We are behind a NAT/FW */ void H46018Received() {}; /** Whether H.460.18 is in Operation for this call */ PBoolean H46018InOperation(); #endif #ifdef H323_H46023 /** Disable H.460.23 Feature. (By Default it is enabled) */ void H46023Enable(PBoolean enable); /** Query whether we are using H.460.23 */ PBoolean H46023IsEnabled(); #endif #ifdef H323_H460P /** Get the presence handler. By default it returns NULL Implementor must create an instance of the presencehandler to enable presence */ H460PresenceHandler * GetPresenceHandler() { return presenceHandler; } /** Set the local Presence State. Calling this will enable Presence in the endpoint */ void PresenceSetLocalState(const PStringList & alias, unsigned localstate, const PString & localdisplay = PString(), PBoolean updateOnly = false); enum presenceInstruction { e_subscribe, e_unsubscribe, e_block, e_unblock }; enum presenceFeature { e_preAudio, e_preVideo, e_preExtVideo, e_preData }; struct presenceLocale { PString m_locale; PString m_region; PString m_country; PString m_countryCode; PString m_latitude; PString m_longitude; PString m_elevation; }; void PresenceAddFeature(presenceFeature feat); void PresenceAddFeatureH460(); void PresenceSetLocale(const presenceLocale & info); /** Set Presence Instructions. */ void PresenceSetInstruction(const PString & epalias, unsigned type, const PStringList & list, PBoolean autoSend = true); /** Submit Presence Authorizations. */ void PresenceSendAuthorization(const OpalGloballyUniqueID & id, const PString & epalias, PBoolean approved, const PStringList & subscribe); /** Received Notifications */ virtual void PresenceNotification(const PString & locAlias, const PString & subAlias, unsigned state, const PString & display); /** Received Instructions */ virtual void PresenceInstruction(const PString & locAlias, unsigned type, const PString & subAlias); /** Received Request for authorization */ virtual void PresenceAuthorization(const OpalGloballyUniqueID & id, const PString & locAlias, const PStringList & Aliases); #endif #endif #ifdef H323_AEC PBoolean AECEnabled() { return enableAEC; } void SetAECEnabled(PBoolean enabled) { enableAEC = enabled; } #endif #ifdef P_STUN /**Return the STUN server to use. Returns NULL if address is a local address as per IsLocalAddress(). Always returns the STUN server if address is zero. Note, the pointer is NOT to be deleted by the user. */ PSTUNClient * GetSTUN( const PIPSocket::Address & address = 0 ) const; /**Set the STUN server address, is of the form host[:port] */ void SetSTUNServer( const PString & server ); /**Type of NAT detected (if available) when initialing STUN Client */ virtual PBoolean STUNNatType(int /*type*/) { return FALSE; }; /** Retrieve the first available NAT Traversal Techniques */ PNatMethod * GetPreferedNatMethod( const PIPSocket::Address & address = 0 ); /** Get the Nat Methods List */ PNatStrategy & GetNatMethods(); virtual void NATMethodCallBack(const PString & /*NatID*/, ///< Method Identifier PINDEX /*msgID*/, ///< Message Identifer const PString & /*message*/ ///< Message ) {}; #endif // P_NONCORE virtual PBoolean OnUnsolicitedInformation(const H323SignalPDU & /*pdu*/) { return FALSE; } /**Determine if the address is "local", ie does not need STUN */ virtual PBoolean IsLocalAddress( const PIPSocket::Address & remoteAddress ) const; /**Provide TCP address translation hook */ virtual void TranslateTCPAddress( PIPSocket::Address & /*localAddr*/, const PIPSocket::Address & /*remoteAddr */ ) { } void InternalTranslateTCPAddress( PIPSocket::Address & /*localAddr*/, const PIPSocket::Address & /*remoteAddr */, const H323Connection * conn = NULL ); /**Provide TCP Port translation hook */ virtual void TranslateTCPPort( WORD & /*ListenPort*/, ///* Local listening port const PIPSocket::Address & /*remoteAddr*/ ///* Remote address ) { }; /**Get the TCP port number base for H.245 channels */ WORD GetTCPPortBase() const { return tcpPorts.base; } /**Get the TCP port number base for H.245 channels. */ WORD GetTCPPortMax() const { return tcpPorts.max; } /**Set the TCP port number base and max for H.245 channels. */ void SetTCPPorts(unsigned tcpBase, unsigned tcpMax); /**Get the next TCP port number for H.245 channels */ WORD GetNextTCPPort(); /**Get the UDP port number base for RAS channels */ WORD GetUDPPortBase() const { return udpPorts.base; } /**Get the UDP port number base for RAS channels. */ WORD GetUDPPortMax() const { return udpPorts.max; } /**Set the TCP port number base and max for H.245 channels. */ void SetUDPPorts(unsigned udpBase, unsigned udpMax); /**Get the next UDP port number for RAS channels */ WORD GetNextUDPPort(); /**Get the UDP port number base for RTP channels. */ WORD GetRtpIpPortBase() const { return rtpIpPorts.base; } /**Get the max UDP port number for RTP channels. */ WORD GetRtpIpPortMax() const { return rtpIpPorts.max; } /**Set the UDP port number base and max for RTP channels. */ void SetRtpIpPorts(unsigned udpBase, unsigned udpMax); /**Get the UDP port number pair for RTP channels. */ WORD GetRtpIpPortPair(); #ifdef H323_H46019M /**Set the UDP port number base for Multiplex RTP/RTCP channels. */ void SetMultiplexPort(unsigned rtpPort); /**Get the UDP port number base for Multiplex RTP/RTCP channels. */ WORD GetMultiplexPort(); /**Get next Multiplex RTP/RTCP channel ID. Each call indexes the counter by 1; */ unsigned GetMultiplexID(); #endif /**Get the IP Type Of Service byte for RTP channels. */ BYTE GetRtpIpTypeofService() const { return rtpIpTypeofService; } /**Set the IP Type Of Service byte for RTP channels. */ void SetRtpIpTypeofService(unsigned tos) { rtpIpTypeofService = (BYTE)tos; } /**Get the IP Type Of Service byte for TCP channels. */ BYTE GetTcpIpTypeofService() const { return tcpIpTypeofService; } /**Set the IP Type Of Service byte for TCP channels. */ void SetTcpIpTypeofService(unsigned tos) { tcpIpTypeofService = (BYTE)tos; } /** Get the default timeout for connecting via TCP */ const PTimeInterval & GetSignallingChannelConnectTimeout() const { return signallingChannelConnectTimeout; } /**Get the default timeout for calling another endpoint. */ const PTimeInterval & GetSignallingChannelCallTimeout() const { return signallingChannelCallTimeout; } /**Get the default timeout for incoming H.245 connection. */ const PTimeInterval & GetControlChannelStartTimeout() const { return controlChannelStartTimeout; } /**Get the default timeout for waiting on an end session. */ const PTimeInterval & GetEndSessionTimeout() const { return endSessionTimeout; } /**Get the default timeout for master slave negotiations. */ const PTimeInterval & GetMasterSlaveDeterminationTimeout() const { return masterSlaveDeterminationTimeout; } /**Get the default retries for H245 master slave negotiations. */ unsigned GetMasterSlaveDeterminationRetries() const { return masterSlaveDeterminationRetries; } /**Get the default timeout for H245 capability exchange negotiations. */ const PTimeInterval & GetCapabilityExchangeTimeout() const { return capabilityExchangeTimeout; } /**Get the default timeout for H245 logical channel negotiations. */ const PTimeInterval & GetLogicalChannelTimeout() const { return logicalChannelTimeout; } /**Get the default timeout for H245 request mode negotiations. */ const PTimeInterval & GetRequestModeTimeout() const { return logicalChannelTimeout; } /**Get the default timeout for H245 round trip delay negotiations. */ const PTimeInterval & GetRoundTripDelayTimeout() const { return roundTripDelayTimeout; } /**Get the default rate H245 round trip delay is calculated by connection. */ const PTimeInterval & GetRoundTripDelayRate() const { return roundTripDelayRate; } /**Get the flag for clearing a call if the round trip delay calculation fails. */ PBoolean ShouldClearCallOnRoundTripFail() const { return clearCallOnRoundTripFail; } /**Get the amount of time with no media that should cause call to clear */ const PTimeInterval & GetNoMediaTimeout() const; /**Set the amount of time with no media that should cause call to clear */ PBoolean SetNoMediaTimeout(PTimeInterval newInterval); /**Get the default timeout for GatekeeperRequest and Gatekeeper discovery. */ const PTimeInterval & GetGatekeeperRequestTimeout() const { return gatekeeperRequestTimeout; } /**Get the default retries for GatekeeperRequest and Gatekeeper discovery. */ unsigned GetGatekeeperRequestRetries() const { return gatekeeperRequestRetries; } /**Get the default timeout for RAS protocol transactions. */ const PTimeInterval & GetRasRequestTimeout() const { return rasRequestTimeout; } /**Get the default retries for RAS protocol transations. */ unsigned GetRasRequestRetries() const { return rasRequestRetries; } /**Get the default time for gatekeeper to reregister. A value of zero disables the keep alive facility. */ const PTimeInterval & GetGatekeeperTimeToLive() const { return registrationTimeToLive; } /**Get the iNow Gatekeeper Access Token OID. */ const PString & GetGkAccessTokenOID() const { return gkAccessTokenOID; } /**Set the iNow Gatekeeper Access Token OID. */ void SetGkAccessTokenOID(const PString & token) { gkAccessTokenOID = token; } /**Get flag to indicate whether to send GRQ on gatekeeper registration */ PBoolean GetSendGRQ() const { return sendGRQ; } /**Sent flag to indicate whether to send GRQ on gatekeeper registration */ void SetSendGRQ(PBoolean v) { sendGRQ = v; } #ifdef H323_H450 /**Get the default timeout for Call Transfer Timer CT-T1. */ const PTimeInterval & GetCallTransferT1() const { return callTransferT1; } /**Get the default timeout for Call Transfer Timer CT-T2. */ const PTimeInterval & GetCallTransferT2() const { return callTransferT2; } /**Get the default timeout for Call Transfer Timer CT-T3. */ const PTimeInterval & GetCallTransferT3() const { return callTransferT3; } /**Get the default timeout for Call Transfer Timer CT-T4. */ const PTimeInterval & GetCallTransferT4() const { return callTransferT4; } /** Get Call Intrusion timers timeout */ const PTimeInterval & GetCallIntrusionT1() const { return callIntrusionT1; } const PTimeInterval & GetCallIntrusionT2() const { return callIntrusionT2; } const PTimeInterval & GetCallIntrusionT3() const { return callIntrusionT3; } const PTimeInterval & GetCallIntrusionT4() const { return callIntrusionT4; } const PTimeInterval & GetCallIntrusionT5() const { return callIntrusionT5; } const PTimeInterval & GetCallIntrusionT6() const { return callIntrusionT6; } /**Get the dictionary of */ H323CallIdentityDict& GetCallIdentityDictionary() { return secondaryConnectionsActive; } /**Get the next available invoke Id for H450 operations */ unsigned GetNextH450CallIdentityValue() const { return ++nextH450CallIdentity; } #endif // H323_H450 /**Get the default stack size of cleaner threads. */ PINDEX GetCleanerThreadStackSize() const { return cleanerThreadStackSize; } /**Get the default stack size of listener threads. */ PINDEX GetListenerThreadStackSize() const { return listenerThreadStackSize; } /**Get the default stack size of signalling channel threads. */ PINDEX GetSignallingThreadStackSize() const { return signallingThreadStackSize; } /**Get the default stack size of control channel threads. */ PINDEX GetControlThreadStackSize() const { return controlThreadStackSize; } /**Get the default stack size of logical channel threads. */ PINDEX GetChannelThreadStackSize() const { return logicalThreadStackSize; } /**Get the default stack size of RAS channel threads. */ PINDEX GetRasThreadStackSize() const { return rasThreadStackSize; } /**Get the default stack size of jitter buffer threads. */ PBoolean UseJitterBuffer() const { return useJitterBuffer; } /**Get the default stack size of jitter buffer threads. */ PINDEX GetJitterThreadStackSize() const { return jitterThreadStackSize; } /** Get the priority at which channel threads run */ PThread::Priority GetChannelThreadPriority() const { return channelThreadPriority; } H323ConnectionDict & GetConnections() { return connectionsActive; }; PBoolean EnableH225KeepAlive() const { return m_useH225KeepAlive; } PBoolean EnableH245KeepAlive() const { return m_useH245KeepAlive; } //@} /** * default settings H.221 settings */ static BYTE defaultT35CountryCode; static BYTE defaultT35Extension; static WORD defaultManufacturerCode; protected: H323Gatekeeper * InternalCreateGatekeeper(H323Transport * transport); PBoolean InternalRegisterGatekeeper(H323Gatekeeper * gk, PBoolean discovered); H323Connection * FindConnectionWithoutLocks(const PString & token); virtual H323Connection * InternalMakeCall( const PString & existingToken, /// Existing connection to be transferred const PString & callIdentity, /// Call identity of the secondary call (if it exists) unsigned capabilityLevel, /// Intrusion capability level const PString & remoteParty, /// Remote party to call H323Transport * transport, /// Transport to use for call. PString & token, /// String to use/receive token for connection void * userData, /// user data to pass to CreateConnection PBoolean supplimentary = false ///< Whether the call is a supplimentary call ); // Configuration variables, commonly changed PStringList localAliasNames; #ifdef H323_AUDIO_CODECS H323AudioCodec::SilenceDetectionMode defaultSilenceDetection; unsigned minAudioJitterDelay; unsigned maxAudioJitterDelay; #ifdef P_AUDIO PString soundChannelPlayDevice; PString soundChannelPlayDriver; PString soundChannelRecordDevice; PString soundChannelRecordDriver; unsigned soundChannelBuffers; #endif // P_AUDIO PBoolean autoStartReceiveAudio; PBoolean autoStartTransmitAudio; #endif // H323_AUDIO_CODECS #ifdef H323_VIDEO PString videoChannelPlayDevice; PString videoChannelRecordDevice; PBoolean autoStartReceiveVideo; PBoolean autoStartTransmitVideo; #ifdef H323_H239 PBoolean autoStartReceiveExtVideo; PBoolean autoStartTransmitExtVideo; #endif // H323_H239 #endif // H323_VIDEO #ifdef H323_T38 PBoolean autoStartReceiveFax; PBoolean autoStartTransmitFax; #endif // H323_T38 PBoolean autoCallForward; PBoolean disableFastStart; PBoolean disableH245Tunneling; PBoolean disableH245inSetup; PBoolean disableH245QoS; PBoolean disableDetectInBandDTMF; PBoolean canDisplayAmountString; PBoolean canEnforceDurationLimit; #ifdef H323_H450 unsigned callIntrusionProtectionLevel; #endif // H323_H450 H323Connection::SendUserInputModes defaultSendUserInputMode; #ifdef P_LDAP PString ilsServer; #endif // P_LDAP // Some more configuration variables, rarely changed. BYTE rtpIpTypeofService; BYTE tcpIpTypeofService; PTimeInterval signallingChannelConnectTimeout; PTimeInterval signallingChannelCallTimeout; PTimeInterval controlChannelStartTimeout; PTimeInterval endSessionTimeout; PTimeInterval masterSlaveDeterminationTimeout; unsigned masterSlaveDeterminationRetries; PTimeInterval capabilityExchangeTimeout; PTimeInterval logicalChannelTimeout; PTimeInterval requestModeTimeout; PTimeInterval roundTripDelayTimeout; PTimeInterval roundTripDelayRate; PTimeInterval noMediaTimeout; PTimeInterval gatekeeperRequestTimeout; unsigned gatekeeperRequestRetries; PTimeInterval rasRequestTimeout; unsigned rasRequestRetries; PTimeInterval registrationTimeToLive; PString gkAccessTokenOID; PBoolean sendGRQ; unsigned initialBandwidth; // in 100s of bits/sev PBoolean clearCallOnRoundTripFail; struct PortInfo { void Set( unsigned base, unsigned max, unsigned range, unsigned dflt ); WORD GetNext( unsigned increment ); PMutex mutex; WORD base; WORD max; WORD current; } tcpPorts, udpPorts, rtpIpPorts; #ifdef P_STUN PNatStrategy * natMethods; PSTUNClient * stun; PBoolean disableSTUNTranslate; #endif #ifdef H323_H46019M struct MuxIDInfo { PMutex mutex; unsigned base; unsigned max; unsigned current; unsigned GetNext( unsigned increment ); } rtpMuxID; WORD defaultMultiRTPPort; #endif BYTE t35CountryCode; BYTE t35Extension; WORD manufacturerCode; TerminalTypes terminalType; #ifdef H323_H450 /* Protect against absence of a response to the ctIdentify reqest (Transferring Endpoint - Call Transfer with a secondary Call) */ PTimeInterval callTransferT1; /* Protect against failure of completion of the call transfer operation involving a secondary Call (Transferred-to Endpoint) */ PTimeInterval callTransferT2; /* Protect against failure of the Transferred Endpoint not responding within sufficient time to the ctInitiate APDU (Transferring Endpoint) */ PTimeInterval callTransferT3; /* May optionally operate - protects against absence of a response to the ctSetup request (Transferred Endpoint) */ PTimeInterval callTransferT4; /** Call Intrusion Timers */ PTimeInterval callIntrusionT1; PTimeInterval callIntrusionT2; PTimeInterval callIntrusionT3; PTimeInterval callIntrusionT4; PTimeInterval callIntrusionT5; PTimeInterval callIntrusionT6; H323CallIdentityDict secondaryConnectionsActive; mutable PAtomicInteger nextH450CallIdentity; /// Next available callIdentity for H450 Transfer operations via consultation. #endif // H323_H450 PINDEX cleanerThreadStackSize; PINDEX listenerThreadStackSize; PINDEX signallingThreadStackSize; PINDEX controlThreadStackSize; PINDEX logicalThreadStackSize; PINDEX rasThreadStackSize; PINDEX jitterThreadStackSize; PBoolean useJitterBuffer; #ifdef H323_RTP_AGGREGATE PINDEX rtpAggregationSize; PHandleAggregator * rtpAggregator; #endif #ifdef H323_SIGNAL_AGGREGATE PINDEX signallingAggregationSize; PHandleAggregator * signallingAggregator; #endif PThread::Priority channelThreadPriority; // Dynamic variables H323ListenerList listeners; H323Capabilities capabilities; H323Gatekeeper * gatekeeper; PString gatekeeperPassword; H323ConnectionDict connectionsActive; PMutex connectionsMutex; PMutex noMediaMutex; PStringSet connectionsToBeCleaned; H323ConnectionsCleaner * connectionsCleaner; PSyncPoint connectionsAreCleaned; #ifndef DISABLE_CALLAUTH // Call Authentication PString EPSecurityUserName; /// Local UserName Authenticated Call PString EPSecurityPassword; /// Local Password Authenticated Call PBoolean isSecureCall; /// Flag to Specify Call to make is Authenticated. EPSecurityPolicy CallAuthPolicy; /// Incoming Call Authentication acceptance level H235AuthenticatorList EPAuthList; /// List of Usernames & Password to check incoming call Against #endif #ifdef H323_H460 H460_FeatureSet features; PBoolean disableH460; #ifdef H323_H46018 PBoolean m_h46018enabled; #endif #ifdef H323_H46023 PBoolean m_h46023enabled; #endif #ifdef H323_H460P H460PresenceHandler * presenceHandler; #endif #endif #ifdef H323_AEC PBoolean enableAEC; #endif #ifdef H323_GNUGK GNUGK_Feature * gnugk; #endif void RegInvokeReRegistration(); PMutex reregmutex; PThread * RegThread; PDECLARE_NOTIFIER(PThread, H323EndPoint, RegMethod); PBoolean m_useH225KeepAlive; PBoolean m_useH245KeepAlive; }; ///////////////////////////////////////////////////////////////////// #endif // __OPAL_H323EP_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/rtp2wav.h0000644000175000017500000000536111460271343014316 0ustar markmark/* * rtp2wav.h * * Open Phone Abstraction Library (OPAL) * Formally known as the Open H323 project. * * Copyright (c) 2001 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open Phone Abstraction Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: rtp2wav.h,v $ * Revision 1.3 2010/10/22 11:17:55 willamowius * cleanup comments * * Revision 1.2 2008/05/23 11:20:02 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:50:50 shorne * First commit of h323plus * * Revision 1.4 2003/01/07 07:53:00 craigs * Fixed problem with multi-frame G.723.1 packets * * Revision 1.3 2002/09/16 01:14:15 robertj * Added #define so can select if #pragma interface/implementation is used on * platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan. * * Revision 1.2 2002/05/23 04:22:29 robertj * Fixed problem with detecting correct payload type. Must * wait for first non-empty packet. * Added virtual function so can override record start point. * * Revision 1.1 2002/05/21 02:42:58 robertj * Added class to allow for saving of RTP data to a WAV file. * */ #ifndef __RTP_RTP2WAV_H #define __RTP_RTP2WAV_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "rtp.h" /////////////////////////////////////////////////////////////////////////////// /**This class encapsulates a WAV file that can be used to intercept RTP data in the standard H323_RTPChannel class. */ class OpalRtpToWavFile : public PWAVFile { PCLASSINFO(OpalRtpToWavFile, PWAVFile); public: OpalRtpToWavFile(); OpalRtpToWavFile( const PString & filename ); virtual PBoolean OnFirstPacket(RTP_DataFrame & frame); const PNotifier & GetReceiveHandler() const { return receiveHandler; } protected: PDECLARE_NOTIFIER(RTP_DataFrame, OpalRtpToWavFile, ReceivedPacket); PNotifier receiveHandler; RTP_DataFrame::PayloadTypes payloadType; PBYTEArray lastFrame; PINDEX lastPayloadSize; }; #endif // __RTP_RTP2WAV_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/h501.h0000644000175000017500000021520711015524130013357 0ustar markmark// // h501.h // // Code automatically generated by asnparse. // #if ! H323_DISABLE_H501 #ifndef __H501_H #define __H501_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include "h235.h" #include "h225.h" // // MessageBody // class H501_ServiceRequest; class H501_ServiceConfirmation; class H501_ServiceRejection; class H501_ServiceRelease; class H501_DescriptorRequest; class H501_DescriptorConfirmation; class H501_DescriptorRejection; class H501_DescriptorIDRequest; class H501_DescriptorIDConfirmation; class H501_DescriptorIDRejection; class H501_DescriptorUpdate; class H501_DescriptorUpdateAck; class H501_AccessRequest; class H501_AccessConfirmation; class H501_AccessRejection; class H501_RequestInProgress; class H501_NonStandardRequest; class H501_NonStandardConfirmation; class H501_NonStandardRejection; class H501_UnknownMessageResponse; class H501_UsageRequest; class H501_UsageConfirmation; class H501_UsageIndication; class H501_UsageIndicationConfirmation; class H501_UsageIndicationRejection; class H501_UsageRejection; class H501_ValidationRequest; class H501_ValidationConfirmation; class H501_ValidationRejection; class H501_AuthenticationRequest; class H501_AuthenticationConfirmation; class H501_AuthenticationRejection; class H501_MessageBody : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_MessageBody, PASN_Choice); #endif public: H501_MessageBody(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_serviceRequest, e_serviceConfirmation, e_serviceRejection, e_serviceRelease, e_descriptorRequest, e_descriptorConfirmation, e_descriptorRejection, e_descriptorIDRequest, e_descriptorIDConfirmation, e_descriptorIDRejection, e_descriptorUpdate, e_descriptorUpdateAck, e_accessRequest, e_accessConfirmation, e_accessRejection, e_requestInProgress, e_nonStandardRequest, e_nonStandardConfirmation, e_nonStandardRejection, e_unknownMessageResponse, e_usageRequest, e_usageConfirmation, e_usageIndication, e_usageIndicationConfirmation, e_usageIndicationRejection, e_usageRejection, e_validationRequest, e_validationConfirmation, e_validationRejection, e_authenticationRequest, e_authenticationConfirmation, e_authenticationRejection }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_ServiceRequest &() const; #else operator H501_ServiceRequest &(); operator const H501_ServiceRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_ServiceConfirmation &() const; #else operator H501_ServiceConfirmation &(); operator const H501_ServiceConfirmation &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_ServiceRejection &() const; #else operator H501_ServiceRejection &(); operator const H501_ServiceRejection &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_ServiceRelease &() const; #else operator H501_ServiceRelease &(); operator const H501_ServiceRelease &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_DescriptorRequest &() const; #else operator H501_DescriptorRequest &(); operator const H501_DescriptorRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_DescriptorConfirmation &() const; #else operator H501_DescriptorConfirmation &(); operator const H501_DescriptorConfirmation &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_DescriptorRejection &() const; #else operator H501_DescriptorRejection &(); operator const H501_DescriptorRejection &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_DescriptorIDRequest &() const; #else operator H501_DescriptorIDRequest &(); operator const H501_DescriptorIDRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_DescriptorIDConfirmation &() const; #else operator H501_DescriptorIDConfirmation &(); operator const H501_DescriptorIDConfirmation &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_DescriptorIDRejection &() const; #else operator H501_DescriptorIDRejection &(); operator const H501_DescriptorIDRejection &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_DescriptorUpdate &() const; #else operator H501_DescriptorUpdate &(); operator const H501_DescriptorUpdate &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_DescriptorUpdateAck &() const; #else operator H501_DescriptorUpdateAck &(); operator const H501_DescriptorUpdateAck &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_AccessRequest &() const; #else operator H501_AccessRequest &(); operator const H501_AccessRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_AccessConfirmation &() const; #else operator H501_AccessConfirmation &(); operator const H501_AccessConfirmation &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_AccessRejection &() const; #else operator H501_AccessRejection &(); operator const H501_AccessRejection &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_RequestInProgress &() const; #else operator H501_RequestInProgress &(); operator const H501_RequestInProgress &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_NonStandardRequest &() const; #else operator H501_NonStandardRequest &(); operator const H501_NonStandardRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_NonStandardConfirmation &() const; #else operator H501_NonStandardConfirmation &(); operator const H501_NonStandardConfirmation &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_NonStandardRejection &() const; #else operator H501_NonStandardRejection &(); operator const H501_NonStandardRejection &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_UnknownMessageResponse &() const; #else operator H501_UnknownMessageResponse &(); operator const H501_UnknownMessageResponse &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_UsageRequest &() const; #else operator H501_UsageRequest &(); operator const H501_UsageRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_UsageConfirmation &() const; #else operator H501_UsageConfirmation &(); operator const H501_UsageConfirmation &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_UsageIndication &() const; #else operator H501_UsageIndication &(); operator const H501_UsageIndication &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_UsageIndicationConfirmation &() const; #else operator H501_UsageIndicationConfirmation &(); operator const H501_UsageIndicationConfirmation &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_UsageIndicationRejection &() const; #else operator H501_UsageIndicationRejection &(); operator const H501_UsageIndicationRejection &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_UsageRejection &() const; #else operator H501_UsageRejection &(); operator const H501_UsageRejection &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_ValidationRequest &() const; #else operator H501_ValidationRequest &(); operator const H501_ValidationRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_ValidationConfirmation &() const; #else operator H501_ValidationConfirmation &(); operator const H501_ValidationConfirmation &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_ValidationRejection &() const; #else operator H501_ValidationRejection &(); operator const H501_ValidationRejection &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_AuthenticationRequest &() const; #else operator H501_AuthenticationRequest &(); operator const H501_AuthenticationRequest &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_AuthenticationConfirmation &() const; #else operator H501_AuthenticationConfirmation &(); operator const H501_AuthenticationConfirmation &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_AuthenticationRejection &() const; #else operator H501_AuthenticationRejection &(); operator const H501_AuthenticationRejection &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // ServiceRejectionReason // class H501_ServiceRejectionReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ServiceRejectionReason, PASN_Choice); #endif public: H501_ServiceRejectionReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_serviceUnavailable, e_serviceRedirected, e_security, e_continue, e_undefined, e_unknownServiceID, e_cannotSupportUsageSpec, e_neededFeature, e_genericDataReason, e_usageUnavailable, e_unknownUsageSendTo }; PBoolean CreateObject(); PObject * Clone() const; }; // // ServiceReleaseReason // class H501_ServiceReleaseReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ServiceReleaseReason, PASN_Choice); #endif public: H501_ServiceReleaseReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_outOfService, e_maintenance, e_terminated, e_expired }; PBoolean CreateObject(); PObject * Clone() const; }; // // DescriptorRejectionReason // class H501_DescriptorRejectionReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_DescriptorRejectionReason, PASN_Choice); #endif public: H501_DescriptorRejectionReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_packetSizeExceeded, e_illegalID, e_security, e_hopCountExceeded, e_noServiceRelationship, e_undefined, e_neededFeature, e_genericDataReason, e_unknownServiceID }; PBoolean CreateObject(); PObject * Clone() const; }; // // DescriptorIDRequest // class H501_DescriptorIDRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_DescriptorIDRequest, PASN_Sequence); #endif public: H501_DescriptorIDRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // DescriptorIDRejectionReason // class H501_DescriptorIDRejectionReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_DescriptorIDRejectionReason, PASN_Choice); #endif public: H501_DescriptorIDRejectionReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_noDescriptors, e_security, e_hopCountExceeded, e_noServiceRelationship, e_undefined, e_neededFeature, e_genericDataReason, e_unknownServiceID }; PBoolean CreateObject(); PObject * Clone() const; }; // // DescriptorUpdateAck // class H501_DescriptorUpdateAck : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_DescriptorUpdateAck, PASN_Sequence); #endif public: H501_DescriptorUpdateAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // AccessRejectionReason // class H501_AccessRejectionReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_AccessRejectionReason, PASN_Choice); #endif public: H501_AccessRejectionReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_noMatch, e_packetSizeExceeded, e_security, e_hopCountExceeded, e_needCallInformation, e_noServiceRelationship, e_undefined, e_neededFeature, e_genericDataReason, e_destinationUnavailable, e_aliasesInconsistent, e_resourceUnavailable, e_incompleteAddress, e_unknownServiceID, e_usageUnavailable, e_cannotSupportUsageSpec, e_unknownUsageSendTo }; PBoolean CreateObject(); PObject * Clone() const; }; // // UsageConfirmation // class H501_UsageConfirmation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_UsageConfirmation, PASN_Sequence); #endif public: H501_UsageConfirmation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // UsageField // class H501_UsageField : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_UsageField, PASN_Sequence); #endif public: H501_UsageField(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_ObjectId m_id; PASN_OctetString m_value; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UsageRejectReason // class H501_UsageRejectReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_UsageRejectReason, PASN_Choice); #endif public: H501_UsageRejectReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_invalidCall, e_unavailable, e_security, e_noServiceRelationship, e_undefined, e_neededFeature, e_genericDataReason, e_unknownServiceID }; PBoolean CreateObject(); PObject * Clone() const; }; // // UsageIndicationConfirmation // class H501_UsageIndicationConfirmation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_UsageIndicationConfirmation, PASN_Sequence); #endif public: H501_UsageIndicationConfirmation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // UsageIndicationRejectionReason // class H501_UsageIndicationRejectionReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_UsageIndicationRejectionReason, PASN_Choice); #endif public: H501_UsageIndicationRejectionReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_unknownCall, e_incomplete, e_security, e_noServiceRelationship, e_undefined, e_neededFeature, e_genericDataReason, e_unknownServiceID }; PBoolean CreateObject(); PObject * Clone() const; }; // // ValidationRejectionReason // class H501_ValidationRejectionReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ValidationRejectionReason, PASN_Choice); #endif public: H501_ValidationRejectionReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_tokenNotValid, e_security, e_hopCountExceeded, e_missingSourceInfo, e_missingDestInfo, e_noServiceRelationship, e_undefined, e_neededFeature, e_genericDataReason, e_unknownServiceID }; PBoolean CreateObject(); PObject * Clone() const; }; // // NonStandardRequest // class H501_NonStandardRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_NonStandardRequest, PASN_Sequence); #endif public: H501_NonStandardRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // NonStandardConfirmation // class H501_NonStandardConfirmation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_NonStandardConfirmation, PASN_Sequence); #endif public: H501_NonStandardConfirmation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // NonStandardRejectionReason // class H501_NonStandardRejectionReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_NonStandardRejectionReason, PASN_Choice); #endif public: H501_NonStandardRejectionReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_notSupported, e_noServiceRelationship, e_undefined, e_neededFeature, e_genericDataReason, e_unknownServiceID }; PBoolean CreateObject(); PObject * Clone() const; }; // // UnknownMessageReason // class H501_UnknownMessageReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_UnknownMessageReason, PASN_Choice); #endif public: H501_UnknownMessageReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_notUnderstood, e_undefined }; PBoolean CreateObject(); PObject * Clone() const; }; // // ApplicationMessage // class H501_ApplicationMessage : public PASN_OctetString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ApplicationMessage, PASN_OctetString); #endif public: H501_ApplicationMessage(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass); H501_ApplicationMessage(const char * v); H501_ApplicationMessage(const PString & v); H501_ApplicationMessage(const PBYTEArray & v); H501_ApplicationMessage & operator=(const char * v); H501_ApplicationMessage & operator=(const PString & v); H501_ApplicationMessage & operator=(const PBYTEArray & v); PObject * Clone() const; }; // // AuthenticationConfirmation // class H501_AuthenticationConfirmation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_AuthenticationConfirmation, PASN_Sequence); #endif public: H501_AuthenticationConfirmation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif PObject * Clone() const; }; // // AuthenticationRejectionReason // class H501_AuthenticationRejectionReason : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_AuthenticationRejectionReason, PASN_Choice); #endif public: H501_AuthenticationRejectionReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_security, e_hopCountExceeded, e_noServiceRelationship, e_undefined, e_neededFeature, e_genericDataReason, e_unknownServiceID, e_securityWrongSyncTime, e_securityReplay, e_securityWrongGeneralID, e_securityWrongSendersID, e_securityIntegrityFailed, e_securityWrongOID }; PBoolean CreateObject(); PObject * Clone() const; }; // // Pattern // class H225_AliasAddress; class H501_Pattern_range; class H501_Pattern : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_Pattern, PASN_Choice); #endif public: H501_Pattern(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_specific, e_wildcard, e_range }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_AliasAddress &() const; #else operator H225_AliasAddress &(); operator const H225_AliasAddress &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_Pattern_range &() const; #else operator H501_Pattern_range &(); operator const H501_Pattern_range &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // AccessToken // class H235_ClearToken; class H225_CryptoH323Token; class H225_GenericData; class H501_AccessToken : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_AccessToken, PASN_Choice); #endif public: H501_AccessToken(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_token, e_cryptoToken, e_genericData }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H235_ClearToken &() const; #else operator H235_ClearToken &(); operator const H235_ClearToken &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_CryptoH323Token &() const; #else operator H225_CryptoH323Token &(); operator const H225_CryptoH323Token &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_GenericData &() const; #else operator H225_GenericData &(); operator const H225_GenericData &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // CallInformation // class H501_CallInformation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_CallInformation, PASN_Sequence); #endif public: H501_CallInformation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_circuitID }; H225_CallIdentifier m_callIdentifier; H225_ConferenceIdentifier m_conferenceID; H225_CircuitInfo m_circuitID; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UsageCallStatus // class H501_UsageCallStatus : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_UsageCallStatus, PASN_Choice); #endif public: H501_UsageCallStatus(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_preConnect, e_callInProgress, e_callEnded, e_registrationLost }; PBoolean CreateObject(); PObject * Clone() const; }; // // Role // class H225_NonStandardParameter; class H501_Role : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_Role, PASN_Choice); #endif public: H501_Role(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_originator, e_destination, e_nonStandardData }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_NonStandardParameter &() const; #else operator H225_NonStandardParameter &(); operator const H225_NonStandardParameter &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // TimeZone // class H501_TimeZone : public PASN_Integer { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_TimeZone, PASN_Integer); #endif public: H501_TimeZone(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass); H501_TimeZone & operator=(int v); H501_TimeZone & operator=(unsigned v); PObject * Clone() const; }; // // TerminationCause // class H501_TerminationCause : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_TerminationCause, PASN_Sequence); #endif public: H501_TerminationCause(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_causeIE, e_nonStandardData }; H225_ReleaseCompleteReason m_releaseCompleteReason; PASN_Integer m_causeIE; H225_NonStandardParameter m_nonStandardData; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ProtocolVersion // class H501_ProtocolVersion : public PASN_ObjectId { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ProtocolVersion, PASN_ObjectId); #endif public: H501_ProtocolVersion(unsigned tag = UniversalObjectId, TagClass tagClass = UniversalTagClass); PObject * Clone() const; }; // // ElementIdentifier // class H501_ElementIdentifier : public PASN_BMPString { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ElementIdentifier, PASN_BMPString); #endif public: H501_ElementIdentifier(unsigned tag = UniversalBMPString, TagClass tagClass = UniversalTagClass); H501_ElementIdentifier & operator=(const char * v); H501_ElementIdentifier & operator=(const PString & v); H501_ElementIdentifier & operator=(const PWCharArray & v); H501_ElementIdentifier & operator=(const PASN_BMPString & v); PObject * Clone() const; }; // // GlobalTimeStamp // class H501_GlobalTimeStamp : public PASN_IA5String { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_GlobalTimeStamp, PASN_IA5String); #endif public: H501_GlobalTimeStamp(unsigned tag = UniversalIA5String, TagClass tagClass = UniversalTagClass); H501_GlobalTimeStamp & operator=(const char * v); H501_GlobalTimeStamp & operator=(const PString & v); PObject * Clone() const; }; // // ArrayOf_TransportAddress // class H225_TransportAddress; class H501_ArrayOf_TransportAddress : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_TransportAddress, PASN_Array); #endif public: H501_ArrayOf_TransportAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_TransportAddress & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_ClearToken // class H235_ClearToken; class H501_ArrayOf_ClearToken : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_ClearToken, PASN_Array); #endif public: H501_ArrayOf_ClearToken(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H235_ClearToken & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_CryptoH323Token // class H225_CryptoH323Token; class H501_ArrayOf_CryptoH323Token : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_CryptoH323Token, PASN_Array); #endif public: H501_ArrayOf_CryptoH323Token(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_CryptoH323Token & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_NonStandardParameter // class H225_NonStandardParameter; class H501_ArrayOf_NonStandardParameter : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_NonStandardParameter, PASN_Array); #endif public: H501_ArrayOf_NonStandardParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_NonStandardParameter & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_GenericData // class H225_GenericData; class H501_ArrayOf_GenericData : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_GenericData, PASN_Array); #endif public: H501_ArrayOf_GenericData(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_GenericData & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_SecurityMode // class H501_SecurityMode; class H501_ArrayOf_SecurityMode : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_SecurityMode, PASN_Array); #endif public: H501_ArrayOf_SecurityMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H501_SecurityMode & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_PASN_ObjectId // class H501_ArrayOf_PASN_ObjectId : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_PASN_ObjectId, PASN_Array); #endif public: H501_ArrayOf_PASN_ObjectId(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; PASN_ObjectId & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_GloballyUniqueID // class H225_GloballyUniqueID; class H501_ArrayOf_GloballyUniqueID : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_GloballyUniqueID, PASN_Array); #endif public: H501_ArrayOf_GloballyUniqueID(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_GloballyUniqueID & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_Descriptor // class H501_Descriptor; class H501_ArrayOf_Descriptor : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_Descriptor, PASN_Array); #endif public: H501_ArrayOf_Descriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H501_Descriptor & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_DescriptorInfo // class H501_DescriptorInfo; class H501_ArrayOf_DescriptorInfo : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_DescriptorInfo, PASN_Array); #endif public: H501_ArrayOf_DescriptorInfo(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H501_DescriptorInfo & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_UpdateInformation // class H501_UpdateInformation; class H501_ArrayOf_UpdateInformation : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_UpdateInformation, PASN_Array); #endif public: H501_ArrayOf_UpdateInformation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H501_UpdateInformation & operator[](PINDEX i) const; PObject * Clone() const; }; // // UpdateInformation_descriptorInfo // class H225_GloballyUniqueID; class H501_Descriptor; class H501_UpdateInformation_descriptorInfo : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_UpdateInformation_descriptorInfo, PASN_Choice); #endif public: H501_UpdateInformation_descriptorInfo(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_descriptorID, e_descriptor }; #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H225_GloballyUniqueID &() const; #else operator H225_GloballyUniqueID &(); operator const H225_GloballyUniqueID &() const; #endif #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 operator H501_Descriptor &() const; #else operator H501_Descriptor &(); operator const H501_Descriptor &() const; #endif PBoolean CreateObject(); PObject * Clone() const; }; // // UpdateInformation_updateType // class H501_UpdateInformation_updateType : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_UpdateInformation_updateType, PASN_Choice); #endif public: H501_UpdateInformation_updateType(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_added, e_deleted, e_changed }; PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_SupportedProtocols // class H225_SupportedProtocols; class H501_ArrayOf_SupportedProtocols : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_SupportedProtocols, PASN_Array); #endif public: H501_ArrayOf_SupportedProtocols(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_SupportedProtocols & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_AddressTemplate // class H501_AddressTemplate; class H501_ArrayOf_AddressTemplate : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_AddressTemplate, PASN_Array); #endif public: H501_ArrayOf_AddressTemplate(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H501_AddressTemplate & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_ServiceControlSession // class H225_ServiceControlSession; class H501_ArrayOf_ServiceControlSession : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_ServiceControlSession, PASN_Array); #endif public: H501_ArrayOf_ServiceControlSession(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_ServiceControlSession & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_AccessToken // class H501_AccessToken; class H501_ArrayOf_AccessToken : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_AccessToken, PASN_Array); #endif public: H501_ArrayOf_AccessToken(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H501_AccessToken & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_UsageField // class H501_UsageField; class H501_ArrayOf_UsageField : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_UsageField, PASN_Array); #endif public: H501_ArrayOf_UsageField(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H501_UsageField & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_Pattern // class H501_Pattern; class H501_ArrayOf_Pattern : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_Pattern, PASN_Array); #endif public: H501_ArrayOf_Pattern(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H501_Pattern & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_RouteInformation // class H501_RouteInformation; class H501_ArrayOf_RouteInformation : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_RouteInformation, PASN_Array); #endif public: H501_ArrayOf_RouteInformation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H501_RouteInformation & operator[](PINDEX i) const; PObject * Clone() const; }; // // Pattern_range // class H501_Pattern_range : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_Pattern_range, PASN_Sequence); #endif public: H501_Pattern_range(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_PartyNumber m_startOfRange; H225_PartyNumber m_endOfRange; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RouteInformation_messageType // class H501_RouteInformation_messageType : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_RouteInformation_messageType, PASN_Choice); #endif public: H501_RouteInformation_messageType(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_sendAccessRequest, e_sendSetup, e_nonExistent }; PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_PriceInfoSpec // class H501_PriceInfoSpec; class H501_ArrayOf_PriceInfoSpec : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_PriceInfoSpec, PASN_Array); #endif public: H501_ArrayOf_PriceInfoSpec(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H501_PriceInfoSpec & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_ContactInformation // class H501_ContactInformation; class H501_ArrayOf_ContactInformation : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_ContactInformation, PASN_Array); #endif public: H501_ArrayOf_ContactInformation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H501_ContactInformation & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_CircuitIdentifier // class H225_CircuitIdentifier; class H501_ArrayOf_CircuitIdentifier : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_CircuitIdentifier, PASN_Array); #endif public: H501_ArrayOf_CircuitIdentifier(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_CircuitIdentifier & operator[](PINDEX i) const; PObject * Clone() const; }; // // ArrayOf_PriceElement // class H501_PriceElement; class H501_ArrayOf_PriceElement : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_PriceElement, PASN_Array); #endif public: H501_ArrayOf_PriceElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H501_PriceElement & operator[](PINDEX i) const; PObject * Clone() const; }; // // PriceElement_units // class H501_PriceElement_units : public PASN_Choice { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_PriceElement_units, PASN_Choice); #endif public: H501_PriceElement_units(unsigned tag = 0, TagClass tagClass = UniversalTagClass); enum Choices { e_seconds, e_packets, e_bytes, e_initial, e_minimum, e_maximum }; PBoolean CreateObject(); PObject * Clone() const; }; // // ArrayOf_AlternatePE // class H501_AlternatePE; class H501_ArrayOf_AlternatePE : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_AlternatePE, PASN_Array); #endif public: H501_ArrayOf_AlternatePE(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H501_AlternatePE & operator[](PINDEX i) const; PObject * Clone() const; }; // // UsageSpecification_when // class H501_UsageSpecification_when : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_UsageSpecification_when, PASN_Sequence); #endif public: H501_UsageSpecification_when(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_never, e_start, e_end, e_period, e_failures }; PASN_Null m_never; PASN_Null m_start; PASN_Null m_end; PASN_Integer m_period; PASN_Null m_failures; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ArrayOf_AliasAddress // class H225_AliasAddress; class H501_ArrayOf_AliasAddress : public PASN_Array { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ArrayOf_AliasAddress, PASN_Array); #endif public: H501_ArrayOf_AliasAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Object * CreateObject() const; H225_AliasAddress & operator[](PINDEX i) const; PObject * Clone() const; }; // // MessageCommonInfo // class H501_MessageCommonInfo : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_MessageCommonInfo, PASN_Sequence); #endif public: H501_MessageCommonInfo(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_replyAddress, e_integrityCheckValue, e_tokens, e_cryptoTokens, e_nonStandard, e_serviceID, e_genericData, e_featureSet, e_version }; PASN_Integer m_sequenceNumber; H501_ProtocolVersion m_annexGversion; PASN_Integer m_hopCount; H501_ArrayOf_TransportAddress m_replyAddress; H225_ICV m_integrityCheckValue; H501_ArrayOf_ClearToken m_tokens; H501_ArrayOf_CryptoH323Token m_cryptoTokens; H501_ArrayOf_NonStandardParameter m_nonStandard; H225_GloballyUniqueID m_serviceID; H501_ArrayOf_GenericData m_genericData; H225_FeatureSet m_featureSet; H501_ProtocolVersion m_version; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // SecurityMode // class H501_SecurityMode : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_SecurityMode, PASN_Sequence); #endif public: H501_SecurityMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_authentication, e_integrity, e_algorithmOIDs }; H235_AuthenticationMechanism m_authentication; H225_IntegrityMechanism m_integrity; H501_ArrayOf_PASN_ObjectId m_algorithmOIDs; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DescriptorRequest // class H501_DescriptorRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_DescriptorRequest, PASN_Sequence); #endif public: H501_DescriptorRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H501_ArrayOf_GloballyUniqueID m_descriptorID; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DescriptorConfirmation // class H501_DescriptorConfirmation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_DescriptorConfirmation, PASN_Sequence); #endif public: H501_DescriptorConfirmation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H501_ArrayOf_Descriptor m_descriptor; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DescriptorRejection // class H501_DescriptorRejection : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_DescriptorRejection, PASN_Sequence); #endif public: H501_DescriptorRejection(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_descriptorID }; H501_DescriptorRejectionReason m_reason; H225_GloballyUniqueID m_descriptorID; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DescriptorIDConfirmation // class H501_DescriptorIDConfirmation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_DescriptorIDConfirmation, PASN_Sequence); #endif public: H501_DescriptorIDConfirmation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H501_ArrayOf_DescriptorInfo m_descriptorInfo; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DescriptorIDRejection // class H501_DescriptorIDRejection : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_DescriptorIDRejection, PASN_Sequence); #endif public: H501_DescriptorIDRejection(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H501_DescriptorIDRejectionReason m_reason; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DescriptorUpdate // class H501_DescriptorUpdate : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_DescriptorUpdate, PASN_Sequence); #endif public: H501_DescriptorUpdate(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_AliasAddress m_sender; H501_ArrayOf_UpdateInformation m_updateInfo; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UpdateInformation // class H501_UpdateInformation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_UpdateInformation, PASN_Sequence); #endif public: H501_UpdateInformation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H501_UpdateInformation_descriptorInfo m_descriptorInfo; H501_UpdateInformation_updateType m_updateType; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AccessConfirmation // class H501_AccessConfirmation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_AccessConfirmation, PASN_Sequence); #endif public: H501_AccessConfirmation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_supportedProtocols, e_serviceControl }; H501_ArrayOf_AddressTemplate m_templates; PASN_Boolean m_partialResponse; H501_ArrayOf_SupportedProtocols m_supportedProtocols; H501_ArrayOf_ServiceControlSession m_serviceControl; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AccessRejection // class H501_AccessRejection : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_AccessRejection, PASN_Sequence); #endif public: H501_AccessRejection(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_serviceControl }; H501_AccessRejectionReason m_reason; H501_ArrayOf_ServiceControlSession m_serviceControl; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UsageRejection // class H501_UsageRejection : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_UsageRejection, PASN_Sequence); #endif public: H501_UsageRejection(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H501_UsageRejectReason m_reason; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UsageIndicationRejection // class H501_UsageIndicationRejection : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_UsageIndicationRejection, PASN_Sequence); #endif public: H501_UsageIndicationRejection(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H501_UsageIndicationRejectionReason m_reason; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ValidationRejection // class H501_ValidationRejection : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ValidationRejection, PASN_Sequence); #endif public: H501_ValidationRejection(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H501_ValidationRejectionReason m_reason; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RequestInProgress // class H501_RequestInProgress : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_RequestInProgress, PASN_Sequence); #endif public: H501_RequestInProgress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_serviceControl }; PASN_Integer m_delay; H501_ArrayOf_ServiceControlSession m_serviceControl; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // NonStandardRejection // class H501_NonStandardRejection : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_NonStandardRejection, PASN_Sequence); #endif public: H501_NonStandardRejection(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H501_NonStandardRejectionReason m_reason; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UnknownMessageResponse // class H501_UnknownMessageResponse : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_UnknownMessageResponse, PASN_Sequence); #endif public: H501_UnknownMessageResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_OctetString m_unknownMessage; H501_UnknownMessageReason m_reason; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AuthenticationRequest // class H501_AuthenticationRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_AuthenticationRequest, PASN_Sequence); #endif public: H501_AuthenticationRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H501_ApplicationMessage m_applicationMessage; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AuthenticationRejection // class H501_AuthenticationRejection : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_AuthenticationRejection, PASN_Sequence); #endif public: H501_AuthenticationRejection(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H501_AuthenticationRejectionReason m_reason; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AddressTemplate // class H501_AddressTemplate : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_AddressTemplate, PASN_Sequence); #endif public: H501_AddressTemplate(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_supportedProtocols, e_featureSet }; H501_ArrayOf_Pattern m_pattern; H501_ArrayOf_RouteInformation m_routeInfo; PASN_Integer m_timeToLive; H501_ArrayOf_SupportedProtocols m_supportedProtocols; H225_FeatureSet m_featureSet; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ContactInformation // class H501_ContactInformation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ContactInformation, PASN_Sequence); #endif public: H501_ContactInformation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_transportQoS, e_security, e_accessTokens, e_multipleCalls, e_featureSet, e_circuitID, e_supportedCircuits }; H225_AliasAddress m_transportAddress; PASN_Integer m_priority; H225_TransportQOS m_transportQoS; H501_ArrayOf_SecurityMode m_security; H501_ArrayOf_AccessToken m_accessTokens; PASN_Boolean m_multipleCalls; H225_FeatureSet m_featureSet; H225_CircuitInfo m_circuitID; H501_ArrayOf_CircuitIdentifier m_supportedCircuits; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PriceInfoSpec // class H501_PriceInfoSpec : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_PriceInfoSpec, PASN_Sequence); #endif public: H501_PriceInfoSpec(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_validFrom, e_validUntil, e_hoursFrom, e_hoursUntil, e_priceElement, e_priceFormula }; PASN_IA5String m_currency; PASN_Integer m_currencyScale; H501_GlobalTimeStamp m_validFrom; H501_GlobalTimeStamp m_validUntil; PASN_IA5String m_hoursFrom; PASN_IA5String m_hoursUntil; H501_ArrayOf_PriceElement m_priceElement; PASN_IA5String m_priceFormula; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PriceElement // class H501_PriceElement : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_PriceElement, PASN_Sequence); #endif public: H501_PriceElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Integer m_amount; PASN_Integer m_quantum; H501_PriceElement_units m_units; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // DescriptorInfo // class H501_DescriptorInfo : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_DescriptorInfo, PASN_Sequence); #endif public: H501_DescriptorInfo(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H225_GloballyUniqueID m_descriptorID; H501_GlobalTimeStamp m_lastChanged; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AlternatePEInfo // class H501_AlternatePEInfo : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_AlternatePEInfo, PASN_Sequence); #endif public: H501_AlternatePEInfo(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H501_ArrayOf_AlternatePE m_alternatePE; PASN_Boolean m_alternateIsPermanent; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AlternatePE // class H501_AlternatePE : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_AlternatePE, PASN_Sequence); #endif public: H501_AlternatePE(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_elementIdentifier }; H225_AliasAddress m_contactAddress; PASN_Integer m_priority; H501_ElementIdentifier m_elementIdentifier; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UserInformation // class H501_UserInformation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_UserInformation, PASN_Sequence); #endif public: H501_UserInformation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_userAuthenticator }; H225_AliasAddress m_userIdentifier; H501_ArrayOf_CryptoH323Token m_userAuthenticator; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UsageSpecification // class H501_UsageSpecification : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_UsageSpecification, PASN_Sequence); #endif public: H501_UsageSpecification(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_sendToPEAddress }; H501_ElementIdentifier m_sendTo; H501_UsageSpecification_when m_when; H501_ArrayOf_PASN_ObjectId m_required; H501_ArrayOf_PASN_ObjectId m_preferred; H225_AliasAddress m_sendToPEAddress; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // PartyInformation // class H501_PartyInformation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_PartyInformation, PASN_Sequence); #endif public: H501_PartyInformation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_domainIdentifier, e_transportAddress, e_endpointType, e_userInfo, e_timeZone }; H501_ArrayOf_AliasAddress m_logicalAddresses; H225_AliasAddress m_domainIdentifier; H225_AliasAddress m_transportAddress; H225_EndpointType m_endpointType; H501_UserInformation m_userInfo; H501_TimeZone m_timeZone; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Message // class H501_Message : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_Message, PASN_Sequence); #endif public: H501_Message(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H501_MessageBody m_body; H501_MessageCommonInfo m_common; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ServiceRequest // class H501_ServiceRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ServiceRequest, PASN_Sequence); #endif public: H501_ServiceRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_elementIdentifier, e_domainIdentifier, e_securityMode, e_timeToLive, e_usageSpec }; H501_ElementIdentifier m_elementIdentifier; H225_AliasAddress m_domainIdentifier; H501_ArrayOf_SecurityMode m_securityMode; PASN_Integer m_timeToLive; H501_UsageSpecification m_usageSpec; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ServiceConfirmation // class H501_ServiceConfirmation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ServiceConfirmation, PASN_Sequence); #endif public: H501_ServiceConfirmation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_alternates, e_securityMode, e_timeToLive, e_usageSpec }; H501_ElementIdentifier m_elementIdentifier; H225_AliasAddress m_domainIdentifier; H501_AlternatePEInfo m_alternates; H501_SecurityMode m_securityMode; PASN_Integer m_timeToLive; H501_UsageSpecification m_usageSpec; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ServiceRejection // class H501_ServiceRejection : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ServiceRejection, PASN_Sequence); #endif public: H501_ServiceRejection(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_alternates }; H501_ServiceRejectionReason m_reason; H501_AlternatePEInfo m_alternates; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ServiceRelease // class H501_ServiceRelease : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ServiceRelease, PASN_Sequence); #endif public: H501_ServiceRelease(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_alternates }; H501_ServiceReleaseReason m_reason; H501_AlternatePEInfo m_alternates; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // AccessRequest // class H501_AccessRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_AccessRequest, PASN_Sequence); #endif public: H501_AccessRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_sourceInfo, e_callInfo, e_usageSpec, e_desiredProtocols }; H501_PartyInformation m_destinationInfo; H501_PartyInformation m_sourceInfo; H501_CallInformation m_callInfo; H501_UsageSpecification m_usageSpec; H501_ArrayOf_SupportedProtocols m_desiredProtocols; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UsageRequest // class H501_UsageRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_UsageRequest, PASN_Sequence); #endif public: H501_UsageRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); H501_CallInformation m_callInfo; H501_UsageSpecification m_usageSpec; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // UsageIndication // class H501_UsageIndication : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_UsageIndication, PASN_Sequence); #endif public: H501_UsageIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_accessTokens, e_srcInfo, e_startTime, e_endTime, e_terminationCause }; H501_CallInformation m_callInfo; H501_ArrayOf_AccessToken m_accessTokens; H501_Role m_senderRole; H501_UsageCallStatus m_usageCallStatus; H501_PartyInformation m_srcInfo; H501_PartyInformation m_destAddress; H235_TimeStamp m_startTime; H235_TimeStamp m_endTime; H501_TerminationCause m_terminationCause; H501_ArrayOf_UsageField m_usageFields; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ValidationRequest // class H501_ValidationRequest : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ValidationRequest, PASN_Sequence); #endif public: H501_ValidationRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_accessToken, e_destinationInfo, e_sourceInfo, e_usageSpec }; H501_ArrayOf_AccessToken m_accessToken; H501_PartyInformation m_destinationInfo; H501_PartyInformation m_sourceInfo; H501_CallInformation m_callInfo; H501_UsageSpecification m_usageSpec; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // ValidationConfirmation // class H501_ValidationConfirmation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_ValidationConfirmation, PASN_Sequence); #endif public: H501_ValidationConfirmation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_destinationInfo, e_usageSpec }; H501_PartyInformation m_destinationInfo; H501_UsageSpecification m_usageSpec; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // RouteInformation // class H501_RouteInformation : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_RouteInformation, PASN_Sequence); #endif public: H501_RouteInformation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_usageSpec, e_priceInfo, e_type, e_featureSet, e_circuitID, e_supportedCircuits }; H501_RouteInformation_messageType m_messageType; PASN_Boolean m_callSpecific; H501_UsageSpecification m_usageSpec; H501_ArrayOf_PriceInfoSpec m_priceInfo; H501_ArrayOf_ContactInformation m_contacts; H225_EndpointType m_type; H225_FeatureSet m_featureSet; H225_CircuitInfo m_circuitID; H501_ArrayOf_CircuitIdentifier m_supportedCircuits; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; // // Descriptor // class H501_Descriptor : public PASN_Sequence { #ifndef PASN_LEANANDMEAN PCLASSINFO(H501_Descriptor, PASN_Sequence); #endif public: H501_Descriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); enum OptionalFields { e_gatekeeperID }; H501_DescriptorInfo m_descriptorInfo; H501_ArrayOf_AddressTemplate m_templates; H225_GatekeeperIdentifier m_gatekeeperID; PINDEX GetDataLength() const; PBoolean Decode(PASN_Stream & strm); void Encode(PASN_Stream & strm) const; #ifndef PASN_NOPRINTON void PrintOn(ostream & strm) const; #endif Comparison Compare(const PObject & obj) const; PObject * Clone() const; }; #endif // __H501_H #endif // if ! H323_DISABLE_H501 // End of h501.h h323plus/include/codecs.h0000644000175000017500000010257211623226321014150 0ustar markmark/* * codecs.h * * H.323 protocol handler * * Open H323 Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Contributor(s): ______________________________________. * * $ Id $ * */ #ifndef __CODECS_H #define __CODECS_H #ifdef P_USE_PRAGMA #pragma interface #endif #include #include #include #include "openh323buildopts.h" #include /* The following classes have forward references to avoid including the VERY large header files for H225 and H245. If an application requires access to the protocol classes they can include them, but for simple usage their inclusion can be avoided. */ class H245_MiscellaneousCommand_type; class H245_MiscellaneousIndication_type; class H323Connection; /////////////////////////////////////////////////////////////////////////////// /**This class embodies the implementation of a specific codec instance used to transfer data via the logical channels opened and managed by the H323 control channel. An application may create a descendent off this class and override functions as required for descibing a codec. */ class H323Codec : public PObject { PCLASSINFO(H323Codec, PObject); public: enum Direction { Encoder, Decoder }; struct H323_RTPInformation { int m_sessionID; int m_frameLost; PTime m_sendTime; PTime m_recvTime; const RTP_DataFrame * m_frame; }; struct AVSync { DWORD m_rtpTimeStamp; PTime m_realTimeStamp; }; H323Codec( const OpalMediaFormat & mediaFormat, ///< Media format for codec Direction direction ///< Direction in which this instance runs ); /**Open the codec. This will open the codec for encoding or decoding, it is called after the logical channel have been established and the background threads to drive them have been started. This is primarily used to delay allocation of resources until the last millisecond. A descendent class may be created by the application and it may cast the connection parameter to the application defined descendent of H323Connection to obtain information needed to open the codec. The default behaviour does nothing. */ virtual PBoolean Open( H323Connection & connection ///< Connection between the endpoints ); /**Close the codec. */ virtual void Close() = 0; /**Encode the data from the appropriate device. This will encode data for transmission. The exact size and description of the data placed in the buffer is codec dependent but should be less than OpalMediaFormat::GetFrameSize() in length. The length parameter is filled with the actual length of the encoded data, often this will be the same as OpalMediaFormat::GetFrameSize(). This function is called every GetFrameRate() timestamp units, so MUST take less than (or equal to) that amount of time to complete. It should always return the amount of data that corresponds to the GetFrameRate() timestamp units as well. A returned length of zero indicates that time has passed but there is no data encoded. This is typically used for silence detection in an audio codec. */ virtual PBoolean Read( BYTE * buffer, ///< Buffer of encoded data unsigned & length, ///< Actual length of encoded data buffer RTP_DataFrame & rtpFrame ///< RTP data frame ) = 0; /**Decode the data and output it to appropriate device. This will decode a single frame of received data. The exact size and description of the data required in the buffer is codec dependent but should be at least than OpalMediaFormat::GetFrameSize() in length. It is expected this function anunciates the data. That is, for example with audio data, the sound is output on a speaker. This function is called every GetFrameRate() timestamp units, so MUST take less than that amount of time to complete! */ virtual PBoolean Write( const BYTE * buffer, ///< Buffer of encoded data unsigned length, ///< Length of encoded data buffer const RTP_DataFrame & frame, ///< Entire RTP frame unsigned & written ///< Number of bytes used from data buffer ) = 0; /**Get the frame rate in RTP timestamp units. */ virtual unsigned GetFrameRate() const; /**Limit bit flow for the logical channel. The default behaviour does nothing. */ virtual void OnFlowControl( long bitRateRestriction ///< Bit rate limitation ); /**Process a miscellaneous command on the logical channel. The default behaviour does nothing. */ virtual void OnMiscellaneousCommand( const H245_MiscellaneousCommand_type & type ///< Command to process ); /**Process a miscellaneous indication on the logical channel. The default behaviour does nothing. */ virtual void OnMiscellaneousIndication( const H245_MiscellaneousIndication_type & type ///< Indication to process ); Direction GetDirection() const { return direction; } virtual const OpalMediaFormat & GetMediaFormat() const { return mediaFormat; } OpalMediaFormat & GetWritableMediaFormat() { return mediaFormat; } virtual PBoolean SetFrameSize(int /*frameWidth*/, int /*frameHeight*/) { return FALSE; }; /**Attach the raw data channel for use by codec. Note the channel provided will be deleted on destruction of the codec. The channel connects the codec (audio or video) with hardware to read/write data. Thus, the video codec provides a pointer to the data, which the renderer/grabber then accesses to display/grab the image from/to. */ virtual PBoolean AttachChannel( PChannel * channel, ///< Channel to read/write raw codec data PBoolean autoDelete = TRUE ///< Channel is to be automatically deleted ); /**Attach a new channel and returns the previous one, without neither deleting it nor closing it. This method is used to, for example, when swapping to or from a hold media channel */ virtual PChannel * SwapChannel( PChannel * newChannel, ///< Channel to read/write raw codec data PBoolean autoDelete = TRUE ///< Channel is to be automatically deleted ); /**Close the raw data channel, described in H323Codec::AttachChannel */ virtual PBoolean CloseRawDataChannel(); /**Return a pointer to the raw data channel, which can then be used to access the recording/playing device. (or testing if channel is attached). */ PChannel *GetRawDataChannel() { return rawDataChannel; } /**Return flag indicating raw channel is native. For audio codecs, FALSE typically means that the format is PCM-16. For video codecs, FALSE typically means that the format is YUV411P. The default behaviour returns FALSE. */ virtual PBoolean IsRawDataChannelNative() const; /**Read from the raw data channel. */ PBoolean ReadRaw( void * data, PINDEX size, PINDEX & length ); /**Write from the raw data channel. */ PBoolean WriteRaw( void * data, PINDEX length, void * mark ); /**Attach the logical channel, for use by the codec. The channel provided is not deleted on destruction, it is just used. The logical channel provides a means for the codec to send control messages. E.G. the receive video codec wants to receive a frame update. */ PBoolean AttachLogicalChannel(H323Channel *channel); class FilterInfo : public PObject { PCLASSINFO(FilterInfo, PObject); public: FilterInfo(H323Codec & c, void * b, PINDEX s, PINDEX l) : codec(c), buffer(b), bufferSize(s), bufferLength(l) { } H323Codec & codec; void * buffer; PINDEX bufferSize; PINDEX bufferLength; }; /**Add a filter to the codec. The call back function is executed just after reading from, or just before writing to, the raw data channel. The callback is passed the H323Codec::FilterInfo structure containing the data that is being read or written. To use define: PDECLARE_NOTIFIER(H323Codec::FilterInfo, YourClass, YourFunction); and void YourClass::YourFunction(H323Codec::FilterInfo & info, INT) { // DO something with data } and to connect to a codec: PBoolean YourClass::OnStartLogicalChannel(H323Channel & channel) { H323Codec * codec = channel.GetCodec(); codec->AddFilter(PCREATE_NOTIFIER(YourFunction)); } for example. Other places can be used to set the filter. */ void AddFilter( const PNotifier & notifier ); /**SetRawDataHeld is called when the cuurent call has been held and the raw data channel has been swapped out and released. */ virtual PBoolean SetRawDataHeld(PBoolean hold ); /**On Receive sender report. Use this for AV Synchronisation */ virtual PBoolean OnRxSenderReport(DWORD rtpTimeStamp, const PTime & realTimeStamp); /**Calculate the remote send time */ virtual PTime CalculateRTPSendTime(DWORD timeStamp, unsigned rate) const; protected: Direction direction; OpalMediaFormat mediaFormat; H323Channel * logicalChannel; // sends messages from receive codec to tx codec. PChannel * rawDataChannel; // connection to the hardware for reading/writing data. PBoolean deleteChannel; PMutex rawChannelMutex; PINDEX lastSequenceNumber; // Detects lost RTP packets in the video codec. H323_RTPInformation rtpInformation; AVSync rtpSync; H323LIST(FilterList, PNotifier); FilterList filters; }; #ifdef H323_AUDIO_CODECS /**This class defines a codec class that will use the standard platform PCM output device. An application may create a descendent off this class and override functions as required for descibing a specific codec. */ class PAec; class H323AudioCodec : public H323Codec { PCLASSINFO(H323AudioCodec, H323Codec); public: /** Create a new audio codec. This opens the standard PCM audio output device, for input and output and allows descendent codec classes to do audio I/O after decoding/encoding. */ H323AudioCodec( const OpalMediaFormat & mediaFormat, ///< Media format for codec Direction direction ///< Direction in which this instance runs ); ~H323AudioCodec(); /**Open the codec. This will open the codec for encoding or decoding. This is primarily used to delay allocation of resources until the last minute. The default behaviour calls the H323EndPoint::OpenAudioChannel() function and assigns the result of that function to the raw data channel in the H323Codec class. */ virtual PBoolean Open( H323Connection & connection ///< Connection between the endpoints ); /**Close down the codec. This will close the codec breaking any block on the Read() or Write() functions. The default behaviour will close the rawDataChannel if it is not NULL and thene delete it if delteChannel is TRUE. */ virtual void Close(); /**Get the frame rate in RTP timestamp units. */ virtual unsigned GetFrameRate() const; /**Get the frame time. */ virtual unsigned GetFrameTime() const; enum SilenceDetectionMode { NoSilenceDetection, FixedSilenceDetection, AdaptiveSilenceDetection }; /**Enable/Disable silence detection. The deadband periods are in audio samples of 8kHz. */ void SetSilenceDetectionMode( SilenceDetectionMode mode, ///< New silence detection mode unsigned threshold = 0, ///< Threshold value if FixedSilenceDetection unsigned signalDeadband = 80, ///< 10 milliseconds of signal needed unsigned silenceDeadband = 3200, ///< 400 milliseconds of silence needed unsigned adaptivePeriod = 4800 ///< 600 millisecond window for adaptive threshold ); /**Get silence detection mode The inTalkBurst value is TRUE if packet transmission is enabled and FALSE if it is being suppressed due to silence. The currentThreshold value is the value from 0 to 32767 which is used as the threshold value for 16 bit PCM data. */ SilenceDetectionMode GetSilenceDetectionMode( PBoolean * isInTalkBurst = NULL, ///< Current silence detct state. unsigned * currentThreshold = NULL ///< Current signal/silence threshold ) const; /** for codecs which support it, this sets the quality level of the transmitted audio. In order to have consistency between different codecs, the qlevel parameter is defined to range from 1 (good) to 31 (poor), even if the individual codec defines fewer levels than this. */ virtual void SetTxQualityLevel(int /*qlevel*/) {} /** for codecs which support it, this gets the quality level of the * transmitted audio. */ virtual int GetTxQualityLevel(int /*qlevel*/) { return 1; } /**Check frame for a talk burst. This does the deadband calculations on the average signal levels returned by the GetAverageSignalLevel() function and based on the levelThreshold, signalDeadbandFrames and silenceDeadbandFrames member variables. */ virtual PBoolean DetectSilence(); /**Get the average signal level in the audio stream. This is called from within DetectSilence() to calculate the average signal level since the last call to DetectSilence(). The default behaviour returns UINT_MAX which disables the silence detection algorithm. */ virtual unsigned GetAverageSignalLevel(); /**SetRawDataHeld is called when the call has been held and the raw data channel has been swapped out and released for another connection. */ virtual PBoolean SetRawDataHeld(PBoolean hold); #ifdef H323_AEC /** Attach Acoustic Echo Cancellation. */ virtual void AttachAEC( PAec * /*_ARC*/ ///* Acoustic Echo Cancellation Instance ) {}; #endif protected: unsigned samplesPerFrame; SilenceDetectionMode silenceDetectMode; unsigned signalDeadbandFrames; // Frames of signal before talk burst starts unsigned silenceDeadbandFrames; // Frames of silence before talk burst ends unsigned adaptiveThresholdFrames; // Frames to min/max over for adaptive threshold PBoolean inTalkBurst; // Currently sending RTP data unsigned framesReceived; // Signal/Silence frames received so far. unsigned levelThreshold; // Threshold level for silence/signal unsigned signalMinimum; // Minimum of frames above threshold unsigned silenceMaximum; // Maximum of frames below threshold unsigned signalFramesReceived; // Frames of signal received unsigned silenceFramesReceived; // Frames of silence received PBoolean IsRawDataHeld; }; /**This class defines a codec class that will use the standard platform PCM output device, and the encoding/decoding has fixed blocks. That is each input block of n samples is encoded to exactly the same sized compressed data, eg G.711, GSM etc. An application may create a descendent off this class and override functions as required for descibing a specific codec. */ class PAec; class H323FramedAudioCodec : public H323AudioCodec { PCLASSINFO(H323FramedAudioCodec, H323AudioCodec); public: /** Create a new audio codec. This opens the standard PCM audio output device, for input and output and allows descendent codec classes to do audio I/O after decoding/encoding. */ H323FramedAudioCodec( const OpalMediaFormat & mediaFormat, ///< Media format for codec Direction direction ///< Direction in which this instance runs ); /**Encode the data from the appropriate device. This will encode data for transmission. The exact size and description of the data placed in the buffer is codec dependent but should be less than OpalMediaFormat::GetFrameSize() in length. The length parameter is filled with the actual length of the encoded data, often this will be the same as OpalMediaFormat::GetFrameSize(). This function is called every GetFrameRate() timestamp units, so MUST take less than (or equal to) that amount of time to complete. It should always return the amount of data that corresponds to the GetFrameRate() timestamp units as well. A returned length of zero indicates that time has passed but there is no data encoded. This is typically used for silence detection in an audio codec. */ virtual PBoolean Read( BYTE * buffer, ///< Buffer of encoded data unsigned & length, ///< Actual length of encoded data buffer RTP_DataFrame & rtpFrame ///< RTP data frame ); /**Decode the data and output it to appropriate device. This will decode a single frame of received data. The exact size and description of the data required in the buffer is codec dependent but should be less than H323Capability::GetRxFramesInPacket() * OpalMediaFormat::GetFrameSize() in length. It is expected this function anunciates the data. That is, for example with audio data, the sound is output on a speaker. This function is called every GetFrameRate() timestamp units, so MUST take less than that amount of time to complete! */ virtual PBoolean Write( const BYTE * buffer, ///< Buffer of encoded data unsigned length, ///< Length of encoded data buffer const RTP_DataFrame & rtpFrame, ///< RTP data frame unsigned & written ///< Number of bytes used from data buffer ); /**Get the average signal level in the audio stream. This is called from within DetectSilence() to calculate the average signal level since the last call to DetectSilence(). */ virtual unsigned GetAverageSignalLevel(); /**Encode a sample block into the buffer specified. The samples have been read and are waiting in the readBuffer member variable. it is expected this function will encode exactly bytesPerFrame bytes. */ virtual PBoolean EncodeFrame( BYTE * buffer, ///< Buffer into which encoded bytes are placed unsigned & length ///< Actual length of encoded data buffer ) = 0; /**Decode a sample block from the buffer specified. The samples must be placed into the writeBuffer member variable. It is expected that exactly samplesPerFrame samples is decoded. */ virtual PBoolean DecodeFrame( const BYTE * buffer, ///< Buffer from which encoded data is found unsigned length, ///< Length of encoded data buffer unsigned & written, ///< Number of bytes used from data buffer unsigned & bytesOutput ///< Number of bytes in decoded data ); virtual PBoolean DecodeFrame( const BYTE * buffer, ///< Buffer from which encoded data is found unsigned length, ///< Length of encoded data buffer unsigned & written ///< Number of bytes used from data buffer ); /** Called when a frame is missed due to late arrival or other reasons By default, this function fills the buffer with silence */ virtual void DecodeSilenceFrame( void * buffer, ///< Buffer from which encoded data is found unsigned length ///< Length of encoded data buffer ) { memset(buffer, 0, length); } #ifdef H323_AEC /** Attach Acoustic Echo Cancellation. */ virtual void AttachAEC( PAec * _ARC ///* Acoustic Echo Cancellation Instance ); #endif protected: PAec * aec; // Acoustic Echo Canceller PShortArray sampleBuffer; unsigned bytesPerFrame; }; /**This class defines a codec class that will use the standard platform PCM output device, and the encoding/decoding is streamed. That is each input 16 bit PCM sample is encoded to 8 bits or less of encoded data and no blocking of PCM data is required, eg G.711, G.721 etc. An application may create a descendent off this class and override functions as required for descibing a specific codec. */ class H323StreamedAudioCodec : public H323FramedAudioCodec { PCLASSINFO(H323StreamedAudioCodec, H323FramedAudioCodec); public: /** Create a new audio codec. This opens the standard PCM audio output device, for input and output and allows descendent codec classes to do audio I/O after decoding/encoding. */ H323StreamedAudioCodec( const OpalMediaFormat & mediaFormat, ///< Media format for codec Direction direction, ///< Direction in which this instance runs unsigned samplesPerFrame, ///< Number of samples in a frame unsigned bits ///< Bits per sample ); /**Encode a sample block into the buffer specified. The samples have been read and are waiting in the readBuffer member variable. it is expected this function will encode exactly encodedBlockSize bytes. */ virtual PBoolean EncodeFrame( BYTE * buffer, ///< Buffer into which encoded bytes are placed unsigned & length ///< Actual length of encoded data buffer ); /**Decode a sample block from the buffer specified. The samples must be placed into the writeBuffer member variable. It is expected that no more than frameSamples is decoded. The return value is the number of samples decoded. Zero indicates an error. */ virtual PBoolean DecodeFrame( const BYTE * buffer, ///< Buffer from which encoded data is found unsigned length, ///< Length of encoded data buffer unsigned & written, ///< Number of bytes used from data buffer unsigned & samples ///< Number of sample output from frame ); /**Encode a single sample value. */ virtual int Encode(short sample) const = 0; /**Decode a single sample value. */ virtual short Decode(int sample) const = 0; protected: unsigned bitsPerSample; }; #endif // NO_H323_AUDIO_CODECS #ifdef H323_VIDEO /**This class defines a codec class that will use the standard platform image output device. An application may create a descendent off this class and override functions as required for descibing a specific codec. */ class H323VideoCodec : public H323Codec { PCLASSINFO(H323VideoCodec, H323Codec); public: /** Create a new video codec. This opens the standard image output device, for input and output and allows descendent codec classes to do video I/O after decoding/encoding. */ H323VideoCodec( const OpalMediaFormat & mediaFormat, ///< Media format for codec Direction direction ///< Direction in which this instance runs ); ~H323VideoCodec(); /**Open the codec. This will open the codec for encoding or decoding. This is primarily used to delay allocation of resources until the last minute. The default behaviour calls the H323EndPoint::OpenVideoDevice() function and assigns the result of that function to the raw data channel in the H323Codec class. */ virtual PBoolean Open( H323Connection & connection ///< Connection between the endpoints ); /**Close down the codec. This will close the codec breaking any block on the Read() or Write() functions. The default behaviour will close the rawDataChannel if it is not NULL and thene delete it if delteChannel is TRUE. */ virtual void Close(); /**Process a miscellaneous command on the logical channel. The default behaviour does nothing. */ virtual void OnMiscellaneousCommand( const H245_MiscellaneousCommand_type & type ///< Command to process ); /**Process a miscellaneous indication on the logical channel. The default behaviour does nothing. */ virtual void OnMiscellaneousIndication( const H245_MiscellaneousIndication_type & type ///< Indication to process ); // /**Attach the raw data device for use by codec. // Note the device provided will be deleted on destruction of the codec. // */ // virtual PBoolean AttachDevice( // H323VideoDevice * device, ///< Device to read/write data // PBoolean autoDelete = TRUE ///< Device is to be automatically deleted // ); /**Process a FreezePicture command from remote endpoint. The default behaviour does nothing. */ virtual void OnFreezePicture(); /**Process a FastUpdatePicture command from remote endpoint. The default behaviour does nothing. */ virtual void OnFastUpdatePicture(); /**Process a FastUpdateGOB command from remote endpoint. The default behaviour does nothing. */ virtual void OnFastUpdateGOB(unsigned firstGOB, unsigned numberOfGOBs); /**Process a FastUpdateMB command from remote endpoint. The default behaviour does nothing. */ virtual void OnFastUpdateMB(int firstGOB, int firstMB, unsigned numberOfMBs); /**Process a H.245 videoIndicateReadyToActivate indication from remote endpoint. The default behaviour does nothing. */ virtual void OnVideoIndicateReadyToActivate(); /**Process a H.245 ideoTemporalSpatialTradeOff command from remote endpoint. The default behaviour does nothing. */ virtual void OnVideoTemporalSpatialTradeOffCommand(int newQuality); /**Process a H.245 videoTemporalSpatialTradeOff indication from remote endpoint. The default behaviour does nothing. */ virtual void OnVideoTemporalSpatialTradeOffIndication(int newQuality); /**Process a H.245 videoNotDecodedMBs indication from remote endpoint. The default behaviour does nothing. */ virtual void OnVideoNotDecodedMBs( unsigned firstMB, unsigned numberOfMBs, unsigned temporalReference ); /**Process a request for a new frame, as part of the picture has been lost. */ virtual void OnLostPartialPicture(); /**Process a request for a new frame, as the entire picture has been lost. */ virtual void OnLostPicture(); /** Get width of video */ virtual unsigned GetWidth() const { return frameWidth; } /** Get height of video */ virtual unsigned GetHeight() const { return frameHeight; } /** Get width of sample aspect ratio */ virtual unsigned GetSarWidth() const { return sarWidth; } /** Get height of sample aspect ratio */ virtual unsigned GetSarHeight() const { return sarHeight; } /**Quality of the transmitted video. 1 is good, 31 is poor. */ virtual void SetTxQualityLevel(int qlevel) {videoQuality = qlevel; } /**Minimum quality limit for the transmitted video. * Default is 1. Encode quality will not be set below this value. */ virtual void SetTxMinQuality(int qlevel) {videoQMin = qlevel; } /**Maximum quality limit for the transmitted video. * Default is 24. Encode quality will not be set above this value. */ virtual void SetTxMaxQuality(int qlevel) {videoQMax = qlevel; } /**number of blocks (that haven't changed) transmitted with each frame. These blocks fill in the background */ virtual void SetBackgroundFill(int idle) {fillLevel= idle; } enum BitRateModeBits { None = 0x00, DynamicVideoQuality = 0x01, AdaptivePacketDelay = 0x02 }; /**Get the current value for video control mode */ virtual unsigned GetVideoMode(void) {return videoBitRateControlModes;} /**Set the current value for video control mode * return the resulting value video control mode */ virtual void SetVideoMode(int mode) {videoBitRateControlModes = mode;} /**Set maximum bitrate when transmitting video, in bps. A value of 0 disables bit rate control. The average bitrate will be less depending on channel dead time, i.e. time that the channel could be transmitting bits but is not. @return TRUE if success */ virtual PBoolean SetMaxBitRate( unsigned bitRate ///< New bit rate ); /**Get the current value of the maximum bitrate, in bps. If SetMaxBitRate was never called, the return value depends on the derived class implementation. */ virtual unsigned GetMaxBitRate() const { return bitRateHighLimit; } /**Set target time in milliseconds between video frames going through the channel. This sets the video frame rate through the channel, which is <= grabber frame rate. Encoder quality will be adjusted dynamically by the codec to find a frame size that allows sending at this rate. Default = 167 ms = 6 frames per second. A value of 0 means the channel will attempt to run at the video grabber frame rate Sometimes the channel cannot transmit as fast as the video grabber. */ virtual PBoolean SetTargetFrameTimeMs( unsigned ms ///< new time between frames ); /** Set a miscellaneous option setting in the video codec. This message is used for Video Plugin Codecs. */ virtual void SetGeneralCodecOption( const char * opt, ///< Option string to set int val ///< New Value to set to ); /** Send a miscellaneous command to the remote transmitting video codec. This message is sent via the H245 Logical Channel. */ void SendMiscCommand(unsigned command); /** Returns the number of frames transmitted or received so far. */ virtual int GetFrameNum() { return frameNum; } /** Set the supported Formats the codec is to support */ virtual void SetSupportedFormats(std::list & info); protected: int frameWidth; int frameHeight; int fillLevel; int sarWidth; int sarHeight; // used in h261codec.cxx unsigned videoBitRateControlModes; // variables used for video bit rate control int bitRateHighLimit; // maximum instantaneous bit rate allowed unsigned oldLength; PTimeInterval oldTime; PTimeInterval newTime; // variables used for dynamic video quality control int targetFrameTimeMs; //targetFrameTimeMs = 1000 / videoSendFPS int frameBytes; // accumulate count of bytes per frame int sumFrameTimeMs, sumAdjFrameTimeMs, sumFrameBytes; // accumulate running average int videoQMax, videoQMin; // dynamic video quality min/max limits int videoQuality; // current video encode quality setting, 1..31 PTimeInterval frameStartTime; PTimeInterval grabInterval; int frameNum, packetNum, oldPacketNum; int framesPerSec; PMutex videoHandlerActive; }; #endif // NO_H323_VIDEO #ifdef H323_AUDIO_CODECS /////////////////////////////////////////////////////////////////////////////// // The simplest codec is the G.711 PCM codec. /**This class is a G711 ALaw codec. */ class H323_ALawCodec : public H323StreamedAudioCodec { PCLASSINFO(H323_ALawCodec, H323StreamedAudioCodec) public: /**@name Construction */ //@{ /**Create a new G.711 codec for ALaw. */ H323_ALawCodec( Direction direction, ///< Direction in which this instance runs PBoolean at56kbps, ///< Encoding bit rate. unsigned frameSize ///< Size of frame in bytes ); //@} virtual int Encode(short sample) const { return EncodeSample(sample); } virtual short Decode(int sample) const { return DecodeSample(sample); } static int EncodeSample(short sample); static short DecodeSample(int sample); protected: PBoolean sevenBit; }; /**This class is a G711 uLaw codec. */ class H323_muLawCodec : public H323StreamedAudioCodec { PCLASSINFO(H323_muLawCodec, H323StreamedAudioCodec) public: /**@name Construction */ //@{ /**Create a new G.711 codec for muLaw. */ H323_muLawCodec( Direction direction, ///< Direction in which this instance runs PBoolean at56kbps, ///< Encoding bit rate. unsigned frameSize ///< Size of frame in bytes ); //@} virtual int Encode(short sample) const { return EncodeSample(sample); } virtual short Decode(int sample) const { return DecodeSample(sample); } static int EncodeSample(short sample); static short DecodeSample(int sample); protected: PBoolean sevenBit; }; #endif // NO_H323_AUDIO_CODECS #endif // __CODECS_H ///////////////////////////////////////////////////////////////////////////// h323plus/include/openh323buildopts.h0000644000175000017500000000575411712004251016176 0ustar markmark/* * openh323buildopts.h * * Build options generated by the configure script. * * Portable Windows Library * * Copyright (c) 2003 Equivalence Pty. Ltd. * Copyright (c) 20007-11 ISVO(Asia) Pte Ltd. * * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Portable Windows Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Id: openh323buildopts.h,v 1.7 2012/01/31 15:28:41 shorne Exp $ * */ #ifndef _OPENH323_BUILDOPTS_H #define _OPENH323_BUILDOPTS_H #include #include #if PTLIB_MAJOR == 2 && PTLIB_MINOR < 10 #define PTLIB_VER ( PTLIB_MAJOR*100 + PTLIB_MINOR*10 + PTLIB_BUILD ) #else #define PTLIB_VER ( PTLIB_MAJOR*1000 + PTLIB_MINOR*10 + PTLIB_BUILD ) #endif #define PTLIB_SVN_REVISION SVN_REVISION ///////////////////////////////////////////////// // // Major options // #define OPENH323_MAJOR 1 #define OPENH323_MINOR 24 #define OPENH323_BUILD 0 #define OPENH323_VERSION "1.24.0" #define H323PLUS_VER ( OPENH323_MAJOR*1000 + OPENH323_MINOR*10 + OPENH323_BUILD ) #if PTLIB_VER >= 2110 #define H323_STLDICTIONARY 1 #endif #define H323_AUDIO_CODECS 1 #ifdef P_VIDEO #define H323_VIDEO 1 #endif ////////////////////////////////////////////////// #ifdef H323_AUDIO_CODECS #undef H323_EMBEDDED_GSM #endif // H323_AUDIO_CODECS ///////////////////////////////////////////////// // // Various item support // #undef H323_AEC #define H323_T38 1 #define H323_T120 1 #define H323_H224 1 #define H323_H230 1 #if (PTLIB_VER > 260) && (P_SSL) #undef H323_H235 #undef H323_H235_AES256 #endif #ifdef P_VIDEO #define H323_H239 1 #endif #define H323_H248 1 #define H323_H249 1 #define H323_H341 1 #ifdef P_LDAP #define H323_H350 1 #endif #define H323_H450 1 #define H323_H460 1 #ifdef H323_H460 #define H323_H4609 1 #if (PTLIB_VER > 260) && defined(P_STUN) #undef H323_H46017 #define H323_H46018 1 #if defined(H323_H46018) #undef H323_H46019M #endif #define H323_H46023 1 #if defined(H323_H46018) && defined(H323_H46023) && defined(P_SSL) #define H323_H46024A 1 #define H323_H46024B 1 #endif #if defined(H323_H46023) && (WINVER > 0x500) #define H323_UPnP 1 #endif #endif #define H323_H460P 1 #endif #define H323_H501 1 #if (PTLIB_VER > 260) && (P_STUN) #define H323_GNUGK 1 #endif #define H323_FILE 1 #undef H323_SIGNAL_AGGREGATE #undef H323_RTP_AGGREGATE #endif // End Of File /////////////////////////////////////////////////////////////// h323plus/include/h341/0000755000175000017500000000000011246225230013206 5ustar markmarkh323plus/include/h341/h341.h0000644000175000017500000000624011040237574014046 0ustar markmark/* h341.h * * Copyright (c) 2007 ISVO (Asia) Pte Ltd. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is derived from and used in conjunction with the * h323plus library (www.h323plus.org/) * * The Initial Developer of the Original Code is ISVO (Asia) Pte Ltd. * * * Contributor(s): ______________________________________. * * $Log: h341.h,v $ * Revision 1.6 2008/07/19 01:12:28 willamowius * enable building og H.341 on Linux * * Revision 1.5 2008/05/23 11:20:31 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.4 2008/01/05 11:35:59 shorne * More Fixes for Linux * * Revision 1.3 2008/01/05 07:11:39 shorne * Major overhaul of H.341 code * * Revision 1.2 2008/01/02 19:24:02 shorne * Removed P_SNMP check * * Revision 1.1 2007/08/06 20:50:50 shorne * First commit of h323plus * * Revision 1.1.2.1 2007/08/02 20:11:58 shorne * Added H.341 Support * * * */ #pragma once #include #ifdef H323_H341 #ifndef _H323_H341 #define _H323_H341 #include #include class H323_H341Server : public PSNMPServer { public: H323_H341Server(WORD listenport = 161); ~H323_H341Server(); enum messagetype { e_request, e_nextrequest, e_set }; // Inherited from PSNMPServer PBoolean OnGetRequest (PINDEX reqID, PSNMP::BindingList & vars, PSNMP::ErrorType & errCode); PBoolean OnGetNextRequest (PINDEX reqID, PSNMP::BindingList & vars, PSNMP::ErrorType & errCode); PBoolean OnSetRequest (PINDEX reqID, PSNMP::BindingList & vars, PSNMP::ErrorType & errCode); //Events virtual PBoolean Authorise(const PIPSocket::Address & /*received*/) { return FALSE; } virtual PBoolean OnRequest(H323_H341Server::messagetype /*msgtype*/, PSNMP::BindingList & /*vars*/, PSNMP::ErrorType & /*errCode*/) { return FALSE; } protected: }; #endif // _H323_H341 #endif h323plus/include/h341/h341_oid.h0000644000175000017500000013633611246225230014705 0ustar markmark/* * h341_oid.h * * H.341 MIB Definitions for the h323plus library. * * * Copyright (c) 2007 ISVO (Asia) Pte Ltd. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is derived from and used in conjunction with the * h323plus Project (www.h323plus.org/) * * The Initial Developer of the Original Code is ISVO (Asia) Pte Ltd. * * Note: this file originally auto-generated by mib2c using * : mib2c.openh323.conf,v 1.0 2007/07/29 05:42:47 hardaker Exp $ * * Contributor(s): ______________________________________. * * */ //#include #ifndef H341_OID_H #define H341_OID_H #include // Access permissions #define H341_ReadOnly 1 #define H341_ReadWrite 2 #define H341_Create 3 #define H341_NoAccess 4 // field Types #define ASN_COUNTER PASNObject::Counter #define ASN_INTEGER PASNObject::UInteger32 #define ASN_TIMETICKS PASNObject::TimeTicks #define ASN_UNSIGNED PASNObject::UInteger32 #define ASN_OCTET_STR PASNObject::String #define ASN_ARRAY PASNObject::Sequence /* * Entry definitions for table callSignalConfigTable */ #define H341_CALLSIGNALCONFIGTABLE "0.0.8.341.1.1.1.1.1" #define H341_CALLSIGNALCONFIGMAXCONNECTIONS "0.0.8.341.1.1.1.1.1.1.1" #define H341_CALLSIGNALCONFIGAVAILABLECONNECTIONS "0.0.8.341.1.1.1.1.1.1.2" #define H341_CALLSIGNALCONFIGT303 "0.0.8.341.1.1.1.1.1.1.3" #define H341_CALLSIGNALCONFIGT301 "0.0.8.341.1.1.1.1.1.1.4" #define H341_CALLSIGNALCONFIGENABLENOTIFICATIONS "0.0.8.341.1.1.1.1.1.1.5" /* * Entry definitions for table callSignalStatsTable */ #define H341_CALLSIGNALSTATSTABLE "0.0.8.341.1.1.1.2.1" #define H341_CALLSIGNALSTATSCALLCONNECTIONSIN "0.0.8.341.1.1.1.2.1.1.1" #define H341_CALLSIGNALSTATSCALLCONNECTIONSOUT "0.0.8.341.1.1.1.2.1.1.2" #define H341_CALLSIGNALSTATSALERTINGMSGSIN "0.0.8.341.1.1.1.2.1.1.3" #define H341_CALLSIGNALSTATSALERTINGMSGSOUT "0.0.8.341.1.1.1.2.1.1.4" #define H341_CALLSIGNALSTATSCALLPROCEEDINGSIN "0.0.8.341.1.1.1.2.1.1.5" #define H341_CALLSIGNALSTATSCALLPROCEEDINGSOUT "0.0.8.341.1.1.1.2.1.1.6" #define H341_CALLSIGNALSTATSSETUPMSGSIN "0.0.8.341.1.1.1.2.1.1.7" #define H341_CALLSIGNALSTATSSETUPMSGSOUT "0.0.8.341.1.1.1.2.1.1.8" #define H341_CALLSIGNALSTATSSETUPACKMSGSIN "0.0.8.341.1.1.1.2.1.1.9" #define H341_CALLSIGNALSTATSSETUPACKMSGSOUT "0.0.8.341.1.1.1.2.1.1.10" #define H341_CALLSIGNALSTATSPROGRESSMSGSIN "0.0.8.341.1.1.1.2.1.1.11" #define H341_CALLSIGNALSTATSPROGRESSMSGSOUT "0.0.8.341.1.1.1.2.1.1.12" #define H341_CALLSIGNALSTATSRELEASECOMPLETEMSGSIN "0.0.8.341.1.1.1.2.1.1.13" #define H341_CALLSIGNALSTATSRELEASECOMPLETEMSGSOUT "0.0.8.341.1.1.1.2.1.1.14" #define H341_CALLSIGNALSTATSSTATUSMSGSIN "0.0.8.341.1.1.1.2.1.1.15" #define H341_CALLSIGNALSTATSSTATUSMSGSOUT "0.0.8.341.1.1.1.2.1.1.16" #define H341_CALLSIGNALSTATSSTATUSINQUIRYMSGSIN "0.0.8.341.1.1.1.2.1.1.17" #define H341_CALLSIGNALSTATSSTATUSINQUIRYMSGSOUT "0.0.8.341.1.1.1.2.1.1.18" #define H341_CALLSIGNALSTATSFACILITYMSGSIN "0.0.8.341.1.1.1.2.1.1.19" #define H341_CALLSIGNALSTATSFACILITYMSGSOUT "0.0.8.341.1.1.1.2.1.1.20" #define H341_CALLSIGNALSTATSINFOMSGSIN "0.0.8.341.1.1.1.2.1.1.21" #define H341_CALLSIGNALSTATSINFOMSGSOUT "0.0.8.341.1.1.1.2.1.1.22" #define H341_CALLSIGNALSTATSNOTIFYMSGSIN "0.0.8.341.1.1.1.2.1.1.23" #define H341_CALLSIGNALSTATSNOTIFYMSGSOUT "0.0.8.341.1.1.1.2.1.1.24" #define H341_CALLSIGNALSTATSAVERAGECALLDURATION "0.0.8.341.1.1.1.2.1.1.25" #define H341_CALLSIGNALSTATSCALLCONNECTIONS "0.0.8.341.1.1.1.2.1.1.26" #define H341_CALLSIGNALSTATSALERTINGMSGS "0.0.8.341.1.1.1.2.1.1.27" #define H341_CALLSIGNALSTATSCALLPROCEEDINGS "0.0.8.341.1.1.1.2.1.1.28" #define H341_CALLSIGNALSTATSSETUPMSGS "0.0.8.341.1.1.1.2.1.1.29" #define H341_CALLSIGNALSTATSSETUPACKMSGS "0.0.8.341.1.1.1.2.1.1.30" #define H341_CALLSIGNALSTATSPROGRESSMSGS "0.0.8.341.1.1.1.2.1.1.31" #define H341_CALLSIGNALSTATSRELEASECOMPLETEMSGS "0.0.8.341.1.1.1.2.1.1.32" #define H341_CALLSIGNALSTATSSTATUSMSGS "0.0.8.341.1.1.1.2.1.1.33" #define H341_CALLSIGNALSTATSSTATUSINQUIRYMSGS "0.0.8.341.1.1.1.2.1.1.34" #define H341_CALLSIGNALSTATSFACILITYMSGS "0.0.8.341.1.1.1.2.1.1.35" #define H341_CALLSIGNALSTATSINFOMSGS "0.0.8.341.1.1.1.2.1.1.36" #define H341_CALLSIGNALSTATSNOTIFYMSGS "0.0.8.341.1.1.1.2.1.1.37" /* * Entry definitions for table connectionsTable */ #define H341_CONNECTIONSTABLE "0.0.8.341.1.1.1.3.2" #define H341_CONNECTIONSSRCTRANSPORTADDRESSTAG "0.0.8.341.1.1.1.3.2.1.1" #define H341_CONNECTIONSSRCTRANSPORTADDRESS "0.0.8.341.1.1.1.3.2.1.2" #define H341_CONNECTIONSCALLIDENTIFIER "0.0.8.341.1.1.1.3.2.1.3" #define H341_CONNECTIONSROLE "0.0.8.341.1.1.1.3.2.1.4" #define H341_CONNECTIONSSTATE "0.0.8.341.1.1.1.3.2.1.5" #define H341_CONNECTIONSDESTTRANSPORTADDRESSTAG "0.0.8.341.1.1.1.3.2.1.6" #define H341_CONNECTIONSDESTTRANSPORTADDRESS "0.0.8.341.1.1.1.3.2.1.7" #define H341_CONNECTIONSDESTALIASTAG "0.0.8.341.1.1.1.3.2.1.8" #define H341_CONNECTIONSDESTALIAS "0.0.8.341.1.1.1.3.2.1.9" #define H341_CONNECTIONSSRCH245SIGTRANSPORTADDRESSTAG "0.0.8.341.1.1.1.3.2.1.10" #define H341_CONNECTIONSSRCH245SIGTRANSPORTADDRESS "0.0.8.341.1.1.1.3.2.1.11" #define H341_CONNECTIONSDESTH245SIGTRANSPORTADDRESSTAG "0.0.8.341.1.1.1.3.2.1.12" #define H341_CONNECTIONSDESTH245SIGTRANSPORTADDRESS "0.0.8.341.1.1.1.3.2.1.13" #define H341_CONNECTIONSCONFID "0.0.8.341.1.1.1.3.2.1.14" #define H341_CONNECTIONSCALLEDPARTYNUMBER "0.0.8.341.1.1.1.3.2.1.15" #define H341_CONNECTIONSDESTXTRACALLINGNUMBER1 "0.0.8.341.1.1.1.3.2.1.16" #define H341_CONNECTIONSDESTXTRACALLINGNUMBER2 "0.0.8.341.1.1.1.3.2.1.17" #define H341_CONNECTIONSDESTXTRACALLINGNUMBER3 "0.0.8.341.1.1.1.3.2.1.18" #define H341_CONNECTIONSDESTXTRACALLINGNUMBER4 "0.0.8.341.1.1.1.3.2.1.19" #define H341_CONNECTIONSDESTXTRACALLINGNUMBER5 "0.0.8.341.1.1.1.3.2.1.20" #define H341_CONNECTIONSFASTCALL "0.0.8.341.1.1.1.3.2.1.21" #define H341_CONNECTIONSSECURITY "0.0.8.341.1.1.1.3.2.1.22" #define H341_CONNECTIONSH245TUNNELING "0.0.8.341.1.1.1.3.2.1.23" #define H341_CONNECTIONSCANOVERLAPSEND "0.0.8.341.1.1.1.3.2.1.24" #define H341_CONNECTIONSCRV "0.0.8.341.1.1.1.3.2.1.25" #define H341_CONNECTIONSCALLTYPE "0.0.8.341.1.1.1.3.2.1.26" #define H341_CONNECTIONSREMOTEEXTENSIONADDRESS "0.0.8.341.1.1.1.3.2.1.27" #define H341_CONNECTIONSEXTRACRV1 "0.0.8.341.1.1.1.3.2.1.28" #define H341_CONNECTIONSEXTRACRV2 "0.0.8.341.1.1.1.3.2.1.29" #define H341_CONNECTIONSCONNECTIONSTARTTIME "0.0.8.341.1.1.1.3.2.1.30" #define H341_CONNECTIONSENDPOINTTYPE "0.0.8.341.1.1.1.3.2.1.31" #define H341_CONNECTIONSRELEASECOMPLETEREASON "0.0.8.341.1.1.1.3.2.1.32" /* * Entry definitions for table rasConfigurationTable */ #define H341_RASCONFIGURATIONTABLE "0.0.8.341.1.1.2.1.1" #define H341_RASCONFIGURATIONGATEKEEPERIDENTIFIER "0.0.8.341.1.1.2.1.1.1.1" #define H341_RASCONFIGURATIONTIMER "0.0.8.341.1.1.2.1.1.1.2" #define H341_RASCONFIGURATIONMAXNUMBEROFRETRIES "0.0.8.341.1.1.2.1.1.1.3" #define H341_RASCONFIGURATIONGATEKEEPERDISCOVERYADDRESSTAG "0.0.8.341.1.1.2.1.1.1.4" #define H341_RASCONFIGURATIONGATEKEEPERDISCOVERYADDRESS "0.0.8.341.1.1.2.1.1.1.5" /* * Entry definitions for table rasRegistrationTable */ #define H341_RASREGISTRATIONTABLE "0.0.8.341.1.1.2.2.1" #define H341_RASREGISTRATIONCALLSIGNALLINGADDRESSTAG "0.0.8.341.1.1.2.2.1.1.1" #define H341_RASREGISTRATIONCALLSIGNALLINGADDRESS "0.0.8.341.1.1.2.2.1.1.2" #define H341_RASREGISTRATIONSRCRASADDRESSTAG "0.0.8.341.1.1.2.2.1.1.3" #define H341_RASREGISTRATIONSRCRASADDRESS "0.0.8.341.1.1.2.2.1.1.4" #define H341_RASREGISTRATIONISGATEKEEPER "0.0.8.341.1.1.2.2.1.1.5" #define H341_RASREGISTRATIONGATEKEEPERID "0.0.8.341.1.1.2.2.1.1.6" #define H341_RASREGISTRATIONENDPOINTID "0.0.8.341.1.1.2.2.1.1.7" #define H341_RASREGISTRATIONENCRYPTION "0.0.8.341.1.1.2.2.1.1.8" #define H341_RASREGISTRATIONWILLSUPPLYUUIE "0.0.8.341.1.1.2.2.1.1.9" #define H341_RASREGISTRATIONINTEGRITYCHECKVALUE "0.0.8.341.1.1.2.2.1.1.10" #define H341_RASREGISTRATIONTABLENUMBEROFALIASES "0.0.8.341.1.1.2.2.1.1.11" #define H341_RASREGISTRATIONTABLEROWSTATUS "0.0.8.341.1.1.2.2.1.1.12" #define H341_RASREGISTRATIONENDPOINTTYPE "0.0.8.341.1.1.2.2.1.1.13" #define H341_RASREGISTRATIONPREGRANTEDARQ "0.0.8.341.1.1.2.2.1.1.14" #define H341_RASREGISTRATIONISREGISTEREDBYRRQ "0.0.8.341.1.1.2.2.1.1.15" /* * Entry definitions for table rasRegistrationAliasTable */ #define H341_RASREGISTRATIONALIASTABLE "0.0.8.341.1.1.2.2.2" #define H341_RASREGISTRATIONALIASTABLEINDEX "0.0.8.341.1.1.2.2.2.1.1" #define H341_RASREGISTRATIONALIASTAG "0.0.8.341.1.1.2.2.2.1.2" #define H341_RASREGISTRATIONALIAS "0.0.8.341.1.1.2.2.2.1.3" /* * Entry definitions for table rasRegistrationRasAddressTable */ #define H341_RASREGISTRATIONRASADDRESSTABLE "0.0.8.341.1.1.2.2.3" #define H341_RASREGISTRATIONRASADDRESSTABLEINDEX "0.0.8.341.1.1.2.2.3.1.1" #define H341_RASREGISTRATIONADDITIONALSRCRASADDRESSTAG "0.0.8.341.1.1.2.2.3.1.2" #define H341_RASREGISTRATIONADDITIONALSRCRASADDRESS "0.0.8.341.1.1.2.2.3.1.3" /* * Entry definitions for table rasRegistrationCallSignalingAddressTable */ #define H341_RASREGISTRATIONCALLSIGNALINGADDRESSTABLE "0.0.8.341.1.1.2.2.4" #define H341_RASREGISTRATIONCALLSIGNALINGADDRESSTABLEINDEX "0.0.8.341.1.1.2.2.4.1.1" #define H341_RASREGISTRATIONADDITIONALCALLSIGNALINGADDRESSTAG "0.0.8.341.1.1.2.2.4.1.2" #define H341_RASREGISTRATIONADDITIONALCALLSIGNALINGADDRESS "0.0.8.341.1.1.2.2.4.1.3" /* * Entry definitions for table rasAdmissionTable */ #define H341_RASADMISSIONTABLE "0.0.8.341.1.1.2.3.1" #define H341_RASADMISSIONSRCCALLSIGNALLINGADDRESSTAG "0.0.8.341.1.1.2.3.1.1.1" #define H341_RASADMISSIONSRCCALLSIGNALLINGADDRESS "0.0.8.341.1.1.2.3.1.1.2" #define H341_RASADMISSIONDESTCALLSIGNALLINGADDRESSTAG "0.0.8.341.1.1.2.3.1.1.3" #define H341_RASADMISSIONDESTCALLSIGNALLINGADDRESS "0.0.8.341.1.1.2.3.1.1.4" #define H341_RASADMISSIONCALLIDENTIFIER "0.0.8.341.1.1.2.3.1.1.5" #define H341_RASADMISSIONCONFERENCEID "0.0.8.341.1.1.2.3.1.1.6" #define H341_RASADMISSIONRASADDRESSTAG "0.0.8.341.1.1.2.3.1.1.7" #define H341_RASADMISSIONRASADDRESS "0.0.8.341.1.1.2.3.1.1.8" #define H341_RASADMISSIONCRV "0.0.8.341.1.1.2.3.1.1.9" #define H341_RASADMISSIONISGATEKEEPER "0.0.8.341.1.1.2.3.1.1.10" #define H341_RASADMISSIONSRCALIASADDRESSTAG "0.0.8.341.1.1.2.3.1.1.11" #define H341_RASADMISSIONSRCALIASADDRESS "0.0.8.341.1.1.2.3.1.1.12" #define H341_RASADMISSIONDESTALIASADDRESSTAG "0.0.8.341.1.1.2.3.1.1.13" #define H341_RASADMISSIONDESTALIASADDRESS "0.0.8.341.1.1.2.3.1.1.14" #define H341_RASADMISSIONANSWERCALLINDICATOR "0.0.8.341.1.1.2.3.1.1.15" #define H341_RASADMISSIONTIME "0.0.8.341.1.1.2.3.1.1.16" #define H341_RASADMISSIONENDPOINTID "0.0.8.341.1.1.2.3.1.1.17" #define H341_RASADMISSIONBANDWIDTH "0.0.8.341.1.1.2.3.1.1.18" #define H341_RASADMISSIONIRRFREQUENCY "0.0.8.341.1.1.2.3.1.1.19" #define H341_RASADMISSIONCALLTYPE "0.0.8.341.1.1.2.3.1.1.20" #define H341_RASADMISSIONCALLMODEL "0.0.8.341.1.1.2.3.1.1.21" #define H341_RASADMISSIONSRCHANDLESBANDWIDTH "0.0.8.341.1.1.2.3.1.1.22" #define H341_RASADMISSIONDESTHANDLESBANDWIDTH "0.0.8.341.1.1.2.3.1.1.23" #define H341_RASADMISSIONSECURITY "0.0.8.341.1.1.2.3.1.1.24" #define H341_RASADMISSIONSRCWILLSUPPLYUUIE "0.0.8.341.1.1.2.3.1.1.25" #define H341_RASADMISSIONDESTWILLSUPPLYUUIE "0.0.8.341.1.1.2.3.1.1.26" #define H341_RASADMISSIONTABLEROWSTATUS "0.0.8.341.1.1.2.3.1.1.27" /* * Entry definitions for table rasStatsTable */ #define H341_RASSTATSTABLE "0.0.8.341.1.1.2.4.1" #define H341_RASSTATSGATEKEEPERCONFIRMS "0.0.8.341.1.1.2.4.1.1.1" #define H341_RASSTATSGATEKEEPERREJECTS "0.0.8.341.1.1.2.4.1.1.2" #define H341_RASSTATSREGISTRATIONCONFIRMS "0.0.8.341.1.1.2.4.1.1.3" #define H341_RASSTATSREGISTRATIONREJECTS "0.0.8.341.1.1.2.4.1.1.4" #define H341_RASSTATSUNREGISTRATIONCONFIRMS "0.0.8.341.1.1.2.4.1.1.5" #define H341_RASSTATSUNREGISTRATIONREJECTS "0.0.8.341.1.1.2.4.1.1.6" #define H341_RASSTATSADMISSIONCONFIRMS "0.0.8.341.1.1.2.4.1.1.7" #define H341_RASSTATSADMISSIONREJECTS "0.0.8.341.1.1.2.4.1.1.8" #define H341_RASSTATSBANDWIDTHCONFIRMS "0.0.8.341.1.1.2.4.1.1.9" #define H341_RASSTATSBANDWIDTHREJECTS "0.0.8.341.1.1.2.4.1.1.10" #define H341_RASSTATSDISENGAGECONFIRMS "0.0.8.341.1.1.2.4.1.1.11" #define H341_RASSTATSDISENGAGEREJECTS "0.0.8.341.1.1.2.4.1.1.12" #define H341_RASSTATSLOCATIONCONFIRMS "0.0.8.341.1.1.2.4.1.1.13" #define H341_RASSTATSLOCATIONREJECTS "0.0.8.341.1.1.2.4.1.1.14" #define H341_RASSTATSINFOREQUESTS "0.0.8.341.1.1.2.4.1.1.15" #define H341_RASSTATSINFOREQUESTRESPONSES "0.0.8.341.1.1.2.4.1.1.16" #define H341_RASSTATSNONSTANDARDMESSAGES "0.0.8.341.1.1.2.4.1.1.17" #define H341_RASSTATSUNKNOWNMESSAGES "0.0.8.341.1.1.2.4.1.1.18" #define H341_RASSTATSREQUESTINPROGRESS "0.0.8.341.1.1.2.4.1.1.19" #define H341_RASSTATSRESOURCEAVAILABILITYINDICATOR "0.0.8.341.1.1.2.4.1.1.20" #define H341_RASSTATSRESOURCEAVAILABILITYCONFIRM "0.0.8.341.1.1.2.4.1.1.21" #define H341_RASSTATSREGISTEREDENDPOINTSNO "0.0.8.341.1.1.2.4.1.1.22" #define H341_RASSTATSADMITTEDENDPOINTSNO "0.0.8.341.1.1.2.4.1.1.23" #define H341_RASSTATSINAKS "0.0.8.341.1.1.2.4.1.1.24" #define H341_RASSTATSIACKS "0.0.8.341.1.1.2.4.1.1.25" #define H341_RASSTATSGKROUTEDCALLS "0.0.8.341.1.1.2.4.1.1.26" #define H341_RASSTATSRESOURCEAVAILABILITYINDICATIONS "0.0.8.341.1.1.2.4.1.1.27" #define H341_RASSTATSRESOURCEAVAILABILITYCONFIRMATIONS "0.0.8.341.1.1.2.4.1.1.28" /* * Entry definitions for table h323TermSystemTable */ #define H341_H323TERMSYSTEMTABLE "0.0.8.341.1.1.3.1.1" #define H341_H323TERMSYSTEMDESCR "0.0.8.341.1.1.3.1.1.1.1" #define H341_H323TERMSYSTEMHWVERSIONNO "0.0.8.341.1.1.3.1.1.1.2" #define H341_H323TERMSYSTEMSWVERSIONNO "0.0.8.341.1.1.3.1.1.1.3" #define H341_H323TERMSYSTEMCONTACT "0.0.8.341.1.1.3.1.1.1.4" #define H341_H323TERMSYSTEMT35COUNTRYCODE "0.0.8.341.1.1.3.1.1.1.5" #define H341_H323TERMSYSTEMT35COUNTRYCODEEXTENTION "0.0.8.341.1.1.3.1.1.1.6" #define H341_H323TERMSYSTEMT35MANUFACTURERCODE "0.0.8.341.1.1.3.1.1.1.7" #define H341_H323TERMSYSTEMLOCATION "0.0.8.341.1.1.3.1.1.1.8" #define H341_H323TERMSYSTEMUPTIME "0.0.8.341.1.1.3.1.1.1.9" #define H341_H323TERMSYSTEMLOCALTIME "0.0.8.341.1.1.3.1.1.1.10" #define H341_H323TERMSYSTEMDIAGNOSTICS "0.0.8.341.1.1.3.1.1.1.11" #define H341_H323TERMSYSTEMSTATUS "0.0.8.341.1.1.3.1.1.1.12" /* * Entry definitions for table h323TerminalCapsTable */ #define H341_H323TERMINALCAPSTABLE "0.0.8.341.1.1.3.2.1" #define H341_H323TERMINALCAPSMAXLINERATE "0.0.8.341.1.1.3.2.1.1.1" #define H341_H323TERMINALCAPSVIDEOCAPS "0.0.8.341.1.1.3.2.1.1.2" #define H341_H323TERMINALCAPSMAXVIDEORATE "0.0.8.341.1.1.3.2.1.1.3" #define H341_H323TERMINALCAPSAUDIOCAPS "0.0.8.341.1.1.3.2.1.1.4" #define H341_H323TERMINALCAPSDATACAPS "0.0.8.341.1.1.3.2.1.1.5" #define H341_H323TERMINALCAPSRDCCAPS "0.0.8.341.1.1.3.2.1.1.6" /* * Entry definitions for table h323TerminalControlTable */ #define H341_H323TERMINALCONTROLTABLE "0.0.8.341.1.1.3.3.1" #define H341_H323TERMINALCONTROLADMINCONTROL "0.0.8.341.1.1.3.3.1.1.1" #define H341_H323TERMINALCONTROLENABLELOCALLOOPBACK "0.0.8.341.1.1.3.3.1.1.2" #define H341_H323TERMINALCONTROLENABLEREMOTELOOPBACK "0.0.8.341.1.1.3.3.1.1.3" /* * Entry definitions for table h323McSystemTable */ #define H341_H323MCSYSTEMTABLE "0.0.8.341.1.1.4.1.1" #define H341_H323MCSYSTEMNAMEANDMAKER "0.0.8.341.1.1.4.1.1.1.1" #define H341_H323MCSYSTEMSOFTWAREVERSIONNUMBER "0.0.8.341.1.1.4.1.1.1.2" #define H341_H323MCSYSTEMHARDWAREVERSIONNUMBER "0.0.8.341.1.1.4.1.1.1.3" #define H341_H323MCSYSTEMSTARTUPTIME "0.0.8.341.1.1.4.1.1.1.4" /* * Entry definitions for table h323McConfigTable */ #define H341_H323MCCONFIGTABLE "0.0.8.341.1.1.4.2.1" #define H341_H323MCCONFIGMCCALLSIGNALINGTAG "0.0.8.341.1.1.4.2.1.1.1" #define H341_H323MCCONFIGMCCALLSIGNALINGADDRESS "0.0.8.341.1.1.4.2.1.1.2" #define H341_H323MCCONFIGGATEKEEPERADDRESSTAG "0.0.8.341.1.1.4.2.1.1.3" #define H341_H323MCCONFIGGATEKEEPERADDRESS "0.0.8.341.1.1.4.2.1.1.4" #define H341_H323MCCONFIGISREGISTEREDWITHGATEKEEPER "0.0.8.341.1.1.4.2.1.1.5" #define H341_H323MCCONFIGENABLENOTIFICATIONS "0.0.8.341.1.1.4.2.1.1.6" /* * Entry definitions for table h323McConferenceTable */ #define H341_H323MCCONFERENCETABLE "0.0.8.341.1.1.4.3.1" #define H341_H323MCCONFERENCECONFERENCEID "0.0.8.341.1.1.4.3.1.1.1" #define H341_H323MCCONFERENCECONFERENCESTARTTIME "0.0.8.341.1.1.4.3.1.1.2" #define H341_H323MCCONFERENCECONFERENCEENDTIME "0.0.8.341.1.1.4.3.1.1.3" #define H341_H323MCCONFERENCECENTRALIZEDORDISTRIBUTED "0.0.8.341.1.1.4.3.1.1.4" #define H341_H323MCCONFERENCEUNIORMULTICAST "0.0.8.341.1.1.4.3.1.1.5" #define H341_H323MCCONFERENCEACTIVEMCADDRESS "0.0.8.341.1.1.4.3.1.1.6" /* * Entry definitions for table h323McConferenceParticipantsTable */ #define H341_H323MCCONFERENCEPARTICIPANTSTABLE "0.0.8.341.1.1.4.3.2" #define H341_H323MCCONFERENCEPARTICIPANTSTABLEINDEX "0.0.8.341.1.1.4.3.2.1.1" #define H341_H323MCCONFERENCEPARTICIPANTSTERMINALLABEL "0.0.8.341.1.1.4.3.2.1.2" #define H341_H323MCCONFERENCEPARTICIPANTSCALLSIGNALINGTADDRESSTAG "0.0.8.341.1.1.4.3.2.1.3" #define H341_H323MCCONFERENCEPARTICIPANTSCALLSIGNALINGADDRESS "0.0.8.341.1.1.4.3.2.1.4" #define H341_H323MCCONFERENCEPARTICIPANTSCALLID "0.0.8.341.1.1.4.3.2.1.5" #define H341_H323MCCONFERENCEPARTICIPANTSCONTROLCHANNELINDEX "0.0.8.341.1.1.4.3.2.1.6" #define H341_H323MCCONFERENCEPARTICIPANTSNUMBEROFLOGICALCHANNELS "0.0.8.341.1.1.4.3.2.1.7" #define H341_H323MCCONFERENCEPARTICIPANTSRTPSESSIONINDEX "0.0.8.341.1.1.4.3.2.1.8" /* * Entry definitions for table h323MpConfigTable */ #define H341_H323MPCONFIGTABLE "0.0.8.341.1.1.5.1.1" #define H341_H323MPCONFIGMAXAUDIOMIXCOUNT "0.0.8.341.1.1.5.1.1.1.1" #define H341_H323MPCONFIGMAXVIDEOMIXCOUNT "0.0.8.341.1.1.5.1.1.1.2" /* * Entry definitions for table h323MpConferenceTable */ #define H341_H323MPCONFERENCETABLE "0.0.8.341.1.1.5.2.1" #define H341_H323MPCONFERENCECONFERENCEID "0.0.8.341.1.1.5.2.1.1.1" #define H341_H323MPCONFERENCEAUDIONOISETHRESHOLD "0.0.8.341.1.1.5.2.1.1.2" #define H341_H323MPCONFERENCELIPSYNCENABLE "0.0.8.341.1.1.5.2.1.1.3" /* * Entry definitions for table h323MpConferenceParticipantsTable */ #define H341_H323MPCONFERENCEPARTICIPANTSTABLE "0.0.8.341.1.1.5.2.2" #define H341_H323MPCONFERENCEPARTICIPANTSTABLEINDEX "0.0.8.341.1.1.5.2.2.1.1" #define H341_H323MPCONFERENCEPARTICIPANTSENDPOINTID "0.0.8.341.1.1.5.2.2.1.2" #define H341_H323MPCONFERENCEPARTICIPANTSTRANSMITAUDIOSTATE "0.0.8.341.1.1.5.2.2.1.3" #define H341_H323MPCONFERENCEPARTICIPANTSRECEIVEAUDIOSTATE "0.0.8.341.1.1.5.2.2.1.4" #define H341_H323MPCONFERENCEPARTICIPANTSTRANSMITVIDEOSTATE "0.0.8.341.1.1.5.2.2.1.5" #define H341_H323MPCONFERENCEPARTICIPANTSRECEIVEVIDEOSTATE "0.0.8.341.1.1.5.2.2.1.6" #define H341_H323MPCONFERENCEPARTICIPANTSLOUDNESSMEASUREMENT "0.0.8.341.1.1.5.2.2.1.7" #define H341_H323MPCONFERENCEPARTICIPANTSVOICEACTIVITY "0.0.8.341.1.1.5.2.2.1.8" #define H341_H323MPCONFERENCEPARTICIPANTSINPUTAUDIOGAIN "0.0.8.341.1.1.5.2.2.1.9" #define H341_H323MPCONFERENCEPARTICIPANTSOUTPUTAUDIOGAIN "0.0.8.341.1.1.5.2.2.1.10" #define H341_H323MPCONFERENCEPARTICIPANTSMAXAUDIOENCODERPAYLOADSIZE "0.0.8.341.1.1.5.2.2.1.11" #define H341_H323MPCONFERENCEPARTICIPANTSMAXAUDIODECODERPAYLOADSIZE "0.0.8.341.1.1.5.2.2.1.12" #define H341_H323MPCONFERENCEPARTICIPANTSTOTALPACKETSTRANSMITTED "0.0.8.341.1.1.5.2.2.1.13" #define H341_H323MPCONFERENCEPARTICIPANTSTOTALPACKETSRECEIVED "0.0.8.341.1.1.5.2.2.1.14" #define H341_H323MPCONFERENCEPARTICIPANTSINVALIDPACKETERRORS "0.0.8.341.1.1.5.2.2.1.15" #define H341_H323MPCONFERENCEPARTICIPANTSLATEAUDIOPACKETSDROPPED "0.0.8.341.1.1.5.2.2.1.16" #define H341_H323MPCONFERENCEPARTICIPANTSRECEIVEDSILENCEPACKETS "0.0.8.341.1.1.5.2.2.1.17" #define H341_H323MPCONFERENCEPARTICIPANTSSILENCEPACKETSGENERATED "0.0.8.341.1.1.5.2.2.1.18" #define H341_H323MPCONFERENCEPARTICIPANTSVIDEOFRAMERATE "0.0.8.341.1.1.5.2.2.1.19" #define H341_H323MPCONFERENCEPARTICIPANTSVIDEORESOLUTION "0.0.8.341.1.1.5.2.2.1.20" #define H341_H323MPCONFERENCEPARTICIPANTSFULLPICTURECOUNTER "0.0.8.341.1.1.5.2.2.1.21" /* * Entry definitions for table h323MpConferenceGlobalAudioMixTable */ #define H341_H323MPCONFERENCEGLOBALAUDIOMIXTABLE "0.0.8.341.1.1.5.2.3" #define H341_H323MPCONFERENCEGLOBALAUDIOMIXTABLEINDEX "0.0.8.341.1.1.5.2.3.1.1" #define H341_H323MPCONFERENCEGLOBALAUDIOMIXTERMINALIDENTIFIER "0.0.8.341.1.1.5.2.3.1.2" /* * Entry definitions for table h323MpConferenceGlobalVideoMixTable */ #define H341_H323MPCONFERENCEGLOBALVIDEOMIXTABLE "0.0.8.341.1.1.5.2.4" #define H341_H323MPCONFERENCEGLOBALVIDEOMIXTABLEINDEX "0.0.8.341.1.1.5.2.4.1.1" #define H341_H323MPCONFERENCEGLOBALVIDEOMIXTERMINALIDENTIFIER "0.0.8.341.1.1.5.2.4.1.2" /* * Entry definitions for table h323ZoneTable */ #define H341_H323ZONETABLE "0.0.8.341.1.1.6.1.1" #define H341_H323ZONEINDEX "0.0.8.341.1.1.6.1.1.1.1" #define H341_H323ZONEZONENAME "0.0.8.341.1.1.6.1.1.1.2" #define H341_H323ZONERASSIGNALADDRESSTAG "0.0.8.341.1.1.6.1.1.1.3" #define H341_H323ZONERASSIGNALADDRESS "0.0.8.341.1.1.6.1.1.1.4" #define H341_H323ZONEMAXBANDWIDTH "0.0.8.341.1.1.6.1.1.1.5" #define H341_H323ZONEALLOCATEDBANDWIDTH "0.0.8.341.1.1.6.1.1.1.6" #define H341_H323ZONEIRRFREQUENCY "0.0.8.341.1.1.6.1.1.1.7" #define H341_H323ZONELOCALZONE "0.0.8.341.1.1.6.1.1.1.8" #define H341_H323ZONEADMISSIONS "0.0.8.341.1.1.6.1.1.1.9" #define H341_H323ZONEADMISSIONSREJECTED "0.0.8.341.1.1.6.1.1.1.10" #define H341_H323ZONEROWSTATUS "0.0.8.341.1.1.6.1.1.1.11" /* * Entry definitions for table h323GatekeeperSystemTable */ #define H341_H323GATEKEEPERSYSTEMTABLE "0.0.8.341.1.1.6.2.1" #define H341_H323GATEKEEPERSYSTEMNAMEANDMAKER "0.0.8.341.1.1.6.2.1.1.1" #define H341_H323GATEKEEPERSYSTEMSOFTWAREVERSIONNUMBER "0.0.8.341.1.1.6.2.1.1.2" #define H341_H323GATEKEEPERSYSTEMHARDWAREVERSIONNUMBER "0.0.8.341.1.1.6.2.1.1.3" #define H341_H323GATEKEEPERSYSTEMCONTACT "0.0.8.341.1.1.6.2.1.1.4" #define H341_H323GATEKEEPERSYSTEMT35COUNTRYCODE "0.0.8.341.1.1.6.2.1.1.5" #define H341_H323GATEKEEPERSYSTEMT35COUNTRYCODEEXTENTION "0.0.8.341.1.1.6.2.1.1.6" #define H341_H323GATEKEEPERSYSTEMT35MANUFACTURERCODE "0.0.8.341.1.1.6.2.1.1.7" #define H341_H323GATEKEEPERSYSTEMLOCATION "0.0.8.341.1.1.6.2.1.1.8" #define H341_H323GATEKEEPERSYSTEMUPTIME "0.0.8.341.1.1.6.2.1.1.9" #define H341_H323GATEKEEPERSYSTEMLOCALTIME "0.0.8.341.1.1.6.2.1.1.10" /* * Entry definitions for table h323GatekeeperConfigurationTable */ #define H341_H323GATEKEEPERCONFIGURATIONTABLE "0.0.8.341.1.1.6.3.1" #define H341_H323GATEKEEPERCONFIGURATIONENABLENOTIFICATIONS "0.0.8.341.1.1.6.3.1.1.1" #define H341_H323GATEKEEPERCONFIGURATIONREGISTRATIONMODE "0.0.8.341.1.1.6.3.1.1.2" /* * Entry definitions for table h323GatekeeperStatisticsTable */ #define H341_H323GATEKEEPERSTATISTICSTABLE "0.0.8.341.1.1.6.4.1" #define H341_H323GATEKEEPERSTATISTICSTOTALERRORS "0.0.8.341.1.1.6.4.1.1.1" #define H341_H323GATEKEEPERSTATISTICSLASTERROREVENTTIME "0.0.8.341.1.1.6.4.1.1.2" #define H341_H323GATEKEEPERSTATISTICSLASTERRORSEVERITY "0.0.8.341.1.1.6.4.1.1.3" #define H341_H323GATEKEEPERSTATISTICSLASTERRORPROBABLECAUSE "0.0.8.341.1.1.6.4.1.1.4" #define H341_H323GATEKEEPERSTATISTICSLASTERRORADDITIONALTEXT "0.0.8.341.1.1.6.4.1.1.5" #define H341_H323GATEKEEPERSTATISTICSZONENO "0.0.8.341.1.1.6.4.1.1.6" /* * Table definitions */ typedef PASN_Array H341_CALLSIGNALCONFIGTABLE_Table; typedef PASN_Array H341_CALLSIGNALSTATSTABLE_Table; typedef PASN_Array H341_CONNECTIONSTABLE_Table; typedef PASN_Array H341_RASCONFIGURATIONTABLE_Table; typedef PASN_Array H341_RASREGISTRATIONTABLE_Table; typedef PASN_Array H341_RASREGISTRATIONALIASTABLE_Table; typedef PASN_Array H341_RASREGISTRATIONRASADDRESSTABLE_Table; typedef PASN_Array H341_RASREGISTRATIONCALLSIGNALINGADDRESSTABLE_Table; typedef PASN_Array H341_RASADMISSIONTABLE_Table; typedef PASN_Array H341_RASSTATSTABLE_Table; typedef PASN_Array H341_H323TERMSYSTEMTABLE_Table; typedef PASN_Array H341_H323TERMINALCAPSTABLE_Table; typedef PASN_Array H341_H323TERMINALCONTROLTABLE_Table; typedef PASN_Array H341_H323MCSYSTEMTABLE_Table; typedef PASN_Array H341_H323MCCONFIGTABLE_Table; typedef PASN_Array H341_H323MCCONFERENCETABLE_Table; typedef PASN_Array H341_H323MCCONFERENCEPARTICIPANTSTABLE_Table; typedef PASN_Array H341_H323MPCONFIGTABLE_Table; typedef PASN_Array H341_H323MPCONFERENCETABLE_Table; typedef PASN_Array H341_H323MPCONFERENCEPARTICIPANTSTABLE_Table; typedef PASN_Array H341_H323MPCONFERENCEGLOBALAUDIOMIXTABLE_Table; typedef PASN_Array H341_H323MPCONFERENCEGLOBALVIDEOMIXTABLE_Table; typedef PASN_Array H341_H323ZONETABLE_Table; typedef PASN_Array H341_H323GATEKEEPERSYSTEMTABLE_Table; typedef PASN_Array H341_H323GATEKEEPERCONFIGURATIONTABLE_Table; typedef PASN_Array H341_H323GATEKEEPERSTATISTICSTABLE_Table; /* * Type definitions */ static struct { PString oid; PINDEX type; PINDEX access; } H341_Field[] = { { H341_CALLSIGNALCONFIGTABLE, ASN_ARRAY, H341_NoAccess}, { H341_CALLSIGNALCONFIGMAXCONNECTIONS, ASN_INTEGER, H341_ReadOnly}, { H341_CALLSIGNALCONFIGAVAILABLECONNECTIONS, ASN_INTEGER, H341_ReadOnly}, { H341_CALLSIGNALCONFIGT303, ASN_INTEGER, H341_ReadWrite}, { H341_CALLSIGNALCONFIGT301, ASN_INTEGER, H341_ReadWrite}, { H341_CALLSIGNALCONFIGENABLENOTIFICATIONS, ASN_INTEGER, H341_ReadWrite}, { H341_CALLSIGNALSTATSTABLE, ASN_ARRAY, H341_NoAccess}, { H341_CALLSIGNALSTATSCALLCONNECTIONSIN, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSCALLCONNECTIONSOUT, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSALERTINGMSGSIN, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSALERTINGMSGSOUT, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSCALLPROCEEDINGSIN, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSCALLPROCEEDINGSOUT, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSSETUPMSGSIN, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSSETUPMSGSOUT, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSSETUPACKMSGSIN, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSSETUPACKMSGSOUT, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSPROGRESSMSGSIN, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSPROGRESSMSGSOUT, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSRELEASECOMPLETEMSGSIN, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSRELEASECOMPLETEMSGSOUT, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSSTATUSMSGSIN, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSSTATUSMSGSOUT, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSSTATUSINQUIRYMSGSIN, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSSTATUSINQUIRYMSGSOUT, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSFACILITYMSGSIN, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSFACILITYMSGSOUT, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSINFOMSGSIN, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSINFOMSGSOUT, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSNOTIFYMSGSIN, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSNOTIFYMSGSOUT, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSAVERAGECALLDURATION, ASN_INTEGER, H341_ReadOnly}, { H341_CALLSIGNALSTATSCALLCONNECTIONS, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSALERTINGMSGS, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSCALLPROCEEDINGS, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSSETUPMSGS, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSSETUPACKMSGS, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSPROGRESSMSGS, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSRELEASECOMPLETEMSGS, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSSTATUSMSGS, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSSTATUSINQUIRYMSGS, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSFACILITYMSGS, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSINFOMSGS, ASN_COUNTER, H341_ReadOnly}, { H341_CALLSIGNALSTATSNOTIFYMSGS, ASN_COUNTER, H341_ReadOnly}, { H341_CONNECTIONSTABLE, ASN_ARRAY, H341_NoAccess}, { H341_CONNECTIONSSRCTRANSPORTADDRESSTAG, ASN_INTEGER, H341_NoAccess}, { H341_CONNECTIONSSRCTRANSPORTADDRESS, ASN_OCTET_STR, H341_NoAccess}, { H341_CONNECTIONSCALLIDENTIFIER, ASN_OCTET_STR, H341_NoAccess}, { H341_CONNECTIONSROLE, ASN_INTEGER, H341_ReadOnly}, { H341_CONNECTIONSSTATE, ASN_INTEGER, H341_ReadOnly}, { H341_CONNECTIONSDESTTRANSPORTADDRESSTAG, ASN_INTEGER, H341_ReadOnly}, { H341_CONNECTIONSDESTTRANSPORTADDRESS, ASN_OCTET_STR, H341_ReadOnly}, { H341_CONNECTIONSDESTALIASTAG, ASN_INTEGER, H341_ReadOnly}, { H341_CONNECTIONSDESTALIAS, ASN_OCTET_STR, H341_ReadOnly}, { H341_CONNECTIONSSRCH245SIGTRANSPORTADDRESSTAG, ASN_INTEGER, H341_ReadOnly}, { H341_CONNECTIONSSRCH245SIGTRANSPORTADDRESS, ASN_OCTET_STR, H341_ReadOnly}, { H341_CONNECTIONSDESTH245SIGTRANSPORTADDRESSTAG, ASN_INTEGER, H341_ReadOnly}, { H341_CONNECTIONSDESTH245SIGTRANSPORTADDRESS, ASN_OCTET_STR, H341_ReadOnly}, { H341_CONNECTIONSCONFID, ASN_OCTET_STR, H341_ReadOnly}, { H341_CONNECTIONSCALLEDPARTYNUMBER, ASN_OCTET_STR, H341_ReadOnly}, { H341_CONNECTIONSDESTXTRACALLINGNUMBER1, ASN_OCTET_STR, H341_ReadOnly}, { H341_CONNECTIONSDESTXTRACALLINGNUMBER2, ASN_OCTET_STR, H341_ReadOnly}, { H341_CONNECTIONSDESTXTRACALLINGNUMBER3, ASN_OCTET_STR, H341_ReadOnly}, { H341_CONNECTIONSDESTXTRACALLINGNUMBER4, ASN_OCTET_STR, H341_ReadOnly}, { H341_CONNECTIONSDESTXTRACALLINGNUMBER5, ASN_OCTET_STR, H341_ReadOnly}, { H341_CONNECTIONSFASTCALL, ASN_INTEGER, H341_ReadOnly}, { H341_CONNECTIONSSECURITY, ASN_INTEGER, H341_ReadOnly}, { H341_CONNECTIONSH245TUNNELING, ASN_INTEGER, H341_ReadOnly}, { H341_CONNECTIONSCANOVERLAPSEND, ASN_INTEGER, H341_ReadOnly}, { H341_CONNECTIONSCRV, ASN_INTEGER, H341_ReadOnly}, { H341_CONNECTIONSCALLTYPE, ASN_INTEGER, H341_ReadOnly}, { H341_CONNECTIONSREMOTEEXTENSIONADDRESS, ASN_OCTET_STR, H341_ReadOnly}, { H341_CONNECTIONSEXTRACRV1, ASN_INTEGER, H341_ReadOnly}, { H341_CONNECTIONSEXTRACRV2, ASN_INTEGER, H341_ReadOnly}, { H341_CONNECTIONSCONNECTIONSTARTTIME, ASN_OCTET_STR, H341_ReadOnly}, { H341_CONNECTIONSENDPOINTTYPE, ASN_INTEGER, H341_ReadOnly}, { H341_CONNECTIONSRELEASECOMPLETEREASON, ASN_INTEGER, H341_ReadOnly}, { H341_RASCONFIGURATIONTABLE, ASN_ARRAY, H341_NoAccess}, { H341_RASCONFIGURATIONGATEKEEPERIDENTIFIER, ASN_OCTET_STR, H341_ReadOnly}, { H341_RASCONFIGURATIONTIMER, ASN_INTEGER, H341_ReadWrite}, { H341_RASCONFIGURATIONMAXNUMBEROFRETRIES, ASN_INTEGER, H341_ReadWrite}, { H341_RASCONFIGURATIONGATEKEEPERDISCOVERYADDRESSTAG, ASN_INTEGER, H341_ReadOnly}, { H341_RASCONFIGURATIONGATEKEEPERDISCOVERYADDRESS, ASN_OCTET_STR, H341_ReadOnly}, { H341_RASREGISTRATIONTABLE, ASN_ARRAY, H341_NoAccess}, { H341_RASREGISTRATIONCALLSIGNALLINGADDRESSTAG, ASN_INTEGER, H341_NoAccess}, { H341_RASREGISTRATIONCALLSIGNALLINGADDRESS, ASN_OCTET_STR, H341_NoAccess}, { H341_RASREGISTRATIONSRCRASADDRESSTAG, ASN_INTEGER, H341_NoAccess}, { H341_RASREGISTRATIONSRCRASADDRESS, ASN_OCTET_STR, H341_NoAccess}, { H341_RASREGISTRATIONISGATEKEEPER, ASN_INTEGER, H341_ReadOnly}, { H341_RASREGISTRATIONGATEKEEPERID, ASN_OCTET_STR, H341_ReadOnly}, { H341_RASREGISTRATIONENDPOINTID, ASN_OCTET_STR, H341_ReadOnly}, { H341_RASREGISTRATIONENCRYPTION, ASN_INTEGER, H341_ReadOnly}, { H341_RASREGISTRATIONWILLSUPPLYUUIE, ASN_INTEGER, H341_ReadOnly}, { H341_RASREGISTRATIONINTEGRITYCHECKVALUE, ASN_INTEGER, H341_ReadOnly}, { H341_RASREGISTRATIONTABLENUMBEROFALIASES, ASN_INTEGER, H341_ReadOnly}, { H341_RASREGISTRATIONTABLEROWSTATUS, ASN_INTEGER, H341_Create}, { H341_RASREGISTRATIONENDPOINTTYPE, ASN_INTEGER, H341_ReadOnly}, { H341_RASREGISTRATIONPREGRANTEDARQ, ASN_INTEGER, H341_ReadOnly}, { H341_RASREGISTRATIONISREGISTEREDBYRRQ, ASN_INTEGER, H341_ReadOnly}, { H341_RASREGISTRATIONALIASTABLE, ASN_ARRAY, H341_NoAccess}, { H341_RASREGISTRATIONALIASTABLEINDEX, ASN_INTEGER, H341_NoAccess}, { H341_RASREGISTRATIONALIASTAG, ASN_INTEGER, H341_ReadOnly}, { H341_RASREGISTRATIONALIAS, ASN_OCTET_STR, H341_ReadOnly}, { H341_RASREGISTRATIONRASADDRESSTABLE, ASN_ARRAY, H341_NoAccess}, { H341_RASREGISTRATIONRASADDRESSTABLEINDEX, ASN_INTEGER, H341_NoAccess}, { H341_RASREGISTRATIONADDITIONALSRCRASADDRESSTAG, ASN_INTEGER, H341_ReadOnly}, { H341_RASREGISTRATIONADDITIONALSRCRASADDRESS, ASN_OCTET_STR, H341_ReadOnly}, { H341_RASREGISTRATIONCALLSIGNALINGADDRESSTABLE, ASN_ARRAY, H341_NoAccess}, { H341_RASREGISTRATIONCALLSIGNALINGADDRESSTABLEINDEX, ASN_INTEGER, H341_NoAccess}, { H341_RASREGISTRATIONADDITIONALCALLSIGNALINGADDRESSTAG, ASN_INTEGER, H341_ReadOnly}, { H341_RASREGISTRATIONADDITIONALCALLSIGNALINGADDRESS, ASN_OCTET_STR, H341_ReadOnly}, { H341_RASADMISSIONTABLE, ASN_ARRAY, H341_NoAccess}, { H341_RASADMISSIONSRCCALLSIGNALLINGADDRESSTAG, ASN_INTEGER, H341_ReadOnly}, { H341_RASADMISSIONSRCCALLSIGNALLINGADDRESS, ASN_OCTET_STR, H341_NoAccess}, { H341_RASADMISSIONDESTCALLSIGNALLINGADDRESSTAG, ASN_INTEGER, H341_ReadOnly}, { H341_RASADMISSIONDESTCALLSIGNALLINGADDRESS, ASN_OCTET_STR, H341_ReadOnly}, { H341_RASADMISSIONCALLIDENTIFIER, ASN_OCTET_STR, H341_NoAccess}, { H341_RASADMISSIONCONFERENCEID, ASN_OCTET_STR, H341_ReadOnly}, { H341_RASADMISSIONRASADDRESSTAG, ASN_INTEGER, H341_ReadOnly}, { H341_RASADMISSIONRASADDRESS, ASN_OCTET_STR, H341_NoAccess}, { H341_RASADMISSIONCRV, ASN_INTEGER, H341_ReadOnly}, { H341_RASADMISSIONISGATEKEEPER, ASN_INTEGER, H341_ReadOnly}, { H341_RASADMISSIONSRCALIASADDRESSTAG, ASN_INTEGER, H341_ReadOnly}, { H341_RASADMISSIONSRCALIASADDRESS, ASN_OCTET_STR, H341_ReadOnly}, { H341_RASADMISSIONDESTALIASADDRESSTAG, ASN_INTEGER, H341_ReadOnly}, { H341_RASADMISSIONDESTALIASADDRESS, ASN_OCTET_STR, H341_ReadOnly}, { H341_RASADMISSIONANSWERCALLINDICATOR, ASN_INTEGER, H341_ReadOnly}, { H341_RASADMISSIONTIME, ASN_OCTET_STR, H341_ReadOnly}, { H341_RASADMISSIONENDPOINTID, ASN_OCTET_STR, H341_ReadOnly}, { H341_RASADMISSIONBANDWIDTH, ASN_INTEGER, H341_ReadOnly}, { H341_RASADMISSIONIRRFREQUENCY, ASN_INTEGER, H341_ReadOnly}, { H341_RASADMISSIONCALLTYPE, ASN_INTEGER, H341_ReadOnly}, { H341_RASADMISSIONCALLMODEL, ASN_INTEGER, H341_ReadOnly}, { H341_RASADMISSIONSRCHANDLESBANDWIDTH, ASN_INTEGER, H341_ReadOnly}, { H341_RASADMISSIONDESTHANDLESBANDWIDTH, ASN_INTEGER, H341_ReadOnly}, { H341_RASADMISSIONSECURITY, ASN_INTEGER, H341_ReadOnly}, { H341_RASADMISSIONSRCWILLSUPPLYUUIE, ASN_INTEGER, H341_ReadOnly}, { H341_RASADMISSIONDESTWILLSUPPLYUUIE, ASN_INTEGER, H341_ReadOnly}, { H341_RASADMISSIONTABLEROWSTATUS, ASN_INTEGER, H341_Create}, { H341_RASSTATSTABLE, ASN_ARRAY, H341_NoAccess}, { H341_RASSTATSGATEKEEPERCONFIRMS, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSGATEKEEPERREJECTS, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSREGISTRATIONCONFIRMS, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSREGISTRATIONREJECTS, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSUNREGISTRATIONCONFIRMS, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSUNREGISTRATIONREJECTS, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSADMISSIONCONFIRMS, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSADMISSIONREJECTS, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSBANDWIDTHCONFIRMS, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSBANDWIDTHREJECTS, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSDISENGAGECONFIRMS, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSDISENGAGEREJECTS, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSLOCATIONCONFIRMS, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSLOCATIONREJECTS, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSINFOREQUESTS, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSINFOREQUESTRESPONSES, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSNONSTANDARDMESSAGES, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSUNKNOWNMESSAGES, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSREQUESTINPROGRESS, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSRESOURCEAVAILABILITYINDICATOR, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSRESOURCEAVAILABILITYCONFIRM, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSREGISTEREDENDPOINTSNO, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSADMITTEDENDPOINTSNO, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSINAKS, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSIACKS, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSGKROUTEDCALLS, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSRESOURCEAVAILABILITYINDICATIONS, ASN_COUNTER, H341_ReadOnly}, { H341_RASSTATSRESOURCEAVAILABILITYCONFIRMATIONS, ASN_COUNTER, H341_ReadOnly}, { H341_H323TERMSYSTEMTABLE, ASN_ARRAY, H341_NoAccess}, { H341_H323TERMSYSTEMDESCR, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323TERMSYSTEMHWVERSIONNO, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323TERMSYSTEMSWVERSIONNO, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323TERMSYSTEMCONTACT, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323TERMSYSTEMT35COUNTRYCODE, ASN_INTEGER, H341_ReadOnly}, { H341_H323TERMSYSTEMT35COUNTRYCODEEXTENTION, ASN_INTEGER, H341_ReadOnly}, { H341_H323TERMSYSTEMT35MANUFACTURERCODE, ASN_INTEGER, H341_ReadOnly}, { H341_H323TERMSYSTEMLOCATION, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323TERMSYSTEMUPTIME, ASN_TIMETICKS, H341_ReadOnly}, { H341_H323TERMSYSTEMLOCALTIME, ASN_OCTET_STR, H341_ReadWrite}, { H341_H323TERMSYSTEMDIAGNOSTICS, ASN_INTEGER, H341_ReadOnly}, { H341_H323TERMSYSTEMSTATUS, ASN_INTEGER, H341_ReadOnly}, { H341_H323TERMINALCAPSTABLE, ASN_ARRAY, H341_NoAccess}, { H341_H323TERMINALCAPSMAXLINERATE, ASN_INTEGER, H341_ReadOnly}, { H341_H323TERMINALCAPSVIDEOCAPS, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323TERMINALCAPSMAXVIDEORATE, ASN_INTEGER, H341_ReadOnly}, { H341_H323TERMINALCAPSAUDIOCAPS, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323TERMINALCAPSDATACAPS, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323TERMINALCAPSRDCCAPS, ASN_INTEGER, H341_ReadOnly}, { H341_H323TERMINALCONTROLTABLE, ASN_ARRAY, H341_NoAccess}, { H341_H323TERMINALCONTROLADMINCONTROL, ASN_INTEGER, H341_ReadWrite}, { H341_H323TERMINALCONTROLENABLELOCALLOOPBACK, ASN_INTEGER, H341_ReadWrite}, { H341_H323TERMINALCONTROLENABLEREMOTELOOPBACK, ASN_INTEGER, H341_ReadWrite}, { H341_H323MCSYSTEMTABLE, ASN_ARRAY, H341_NoAccess}, { H341_H323MCSYSTEMNAMEANDMAKER, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323MCSYSTEMSOFTWAREVERSIONNUMBER, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323MCSYSTEMHARDWAREVERSIONNUMBER, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323MCSYSTEMSTARTUPTIME, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323MCCONFIGTABLE, ASN_ARRAY, H341_NoAccess}, { H341_H323MCCONFIGMCCALLSIGNALINGTAG, ASN_INTEGER, H341_ReadOnly}, { H341_H323MCCONFIGMCCALLSIGNALINGADDRESS, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323MCCONFIGGATEKEEPERADDRESSTAG, ASN_INTEGER, H341_ReadWrite}, { H341_H323MCCONFIGGATEKEEPERADDRESS, ASN_OCTET_STR, H341_ReadWrite}, { H341_H323MCCONFIGISREGISTEREDWITHGATEKEEPER, ASN_INTEGER, H341_ReadWrite}, { H341_H323MCCONFIGENABLENOTIFICATIONS, ASN_INTEGER, H341_ReadWrite}, { H341_H323MCCONFERENCETABLE, ASN_ARRAY, H341_NoAccess}, { H341_H323MCCONFERENCECONFERENCEID, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323MCCONFERENCECONFERENCESTARTTIME, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323MCCONFERENCECONFERENCEENDTIME, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323MCCONFERENCECENTRALIZEDORDISTRIBUTED, ASN_INTEGER, H341_ReadOnly}, { H341_H323MCCONFERENCEUNIORMULTICAST, ASN_INTEGER, H341_ReadOnly}, { H341_H323MCCONFERENCEACTIVEMCADDRESS, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323MCCONFERENCEPARTICIPANTSTABLE, ASN_ARRAY, H341_NoAccess}, { H341_H323MCCONFERENCEPARTICIPANTSTABLEINDEX, ASN_INTEGER, H341_NoAccess}, { H341_H323MCCONFERENCEPARTICIPANTSTERMINALLABEL, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323MCCONFERENCEPARTICIPANTSCALLSIGNALINGTADDRESSTAG, ASN_INTEGER, H341_ReadOnly}, { H341_H323MCCONFERENCEPARTICIPANTSCALLSIGNALINGADDRESS, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323MCCONFERENCEPARTICIPANTSCALLID, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323MCCONFERENCEPARTICIPANTSCONTROLCHANNELINDEX, ASN_INTEGER, H341_ReadOnly}, { H341_H323MCCONFERENCEPARTICIPANTSNUMBEROFLOGICALCHANNELS, ASN_INTEGER, H341_ReadOnly}, { H341_H323MCCONFERENCEPARTICIPANTSRTPSESSIONINDEX, ASN_INTEGER, H341_ReadOnly}, { H341_H323MPCONFIGTABLE, ASN_ARRAY, H341_NoAccess}, { H341_H323MPCONFIGMAXAUDIOMIXCOUNT, ASN_INTEGER, H341_ReadOnly}, { H341_H323MPCONFIGMAXVIDEOMIXCOUNT, ASN_INTEGER, H341_ReadOnly}, { H341_H323MPCONFERENCETABLE, ASN_ARRAY, H341_NoAccess}, { H341_H323MPCONFERENCECONFERENCEID, ASN_OCTET_STR, H341_NoAccess}, { H341_H323MPCONFERENCEAUDIONOISETHRESHOLD, ASN_INTEGER, H341_ReadOnly}, { H341_H323MPCONFERENCELIPSYNCENABLE, ASN_INTEGER, H341_ReadOnly}, { H341_H323MPCONFERENCEPARTICIPANTSTABLE, ASN_ARRAY, H341_NoAccess}, { H341_H323MPCONFERENCEPARTICIPANTSTABLEINDEX, ASN_INTEGER, H341_NoAccess}, { H341_H323MPCONFERENCEPARTICIPANTSENDPOINTID, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323MPCONFERENCEPARTICIPANTSTRANSMITAUDIOSTATE, ASN_INTEGER, H341_ReadOnly}, { H341_H323MPCONFERENCEPARTICIPANTSRECEIVEAUDIOSTATE, ASN_INTEGER, H341_ReadOnly}, { H341_H323MPCONFERENCEPARTICIPANTSTRANSMITVIDEOSTATE, ASN_INTEGER, H341_ReadOnly}, { H341_H323MPCONFERENCEPARTICIPANTSRECEIVEVIDEOSTATE, ASN_INTEGER, H341_ReadOnly}, { H341_H323MPCONFERENCEPARTICIPANTSLOUDNESSMEASUREMENT, ASN_INTEGER, H341_ReadOnly}, { H341_H323MPCONFERENCEPARTICIPANTSVOICEACTIVITY, ASN_INTEGER, H341_ReadOnly}, { H341_H323MPCONFERENCEPARTICIPANTSINPUTAUDIOGAIN, ASN_INTEGER, H341_ReadOnly}, { H341_H323MPCONFERENCEPARTICIPANTSOUTPUTAUDIOGAIN, ASN_INTEGER, H341_ReadOnly}, { H341_H323MPCONFERENCEPARTICIPANTSMAXAUDIOENCODERPAYLOADSIZE, ASN_INTEGER, H341_ReadOnly}, { H341_H323MPCONFERENCEPARTICIPANTSMAXAUDIODECODERPAYLOADSIZE, ASN_INTEGER, H341_ReadOnly}, { H341_H323MPCONFERENCEPARTICIPANTSTOTALPACKETSTRANSMITTED, ASN_COUNTER, H341_ReadOnly}, { H341_H323MPCONFERENCEPARTICIPANTSTOTALPACKETSRECEIVED, ASN_COUNTER, H341_ReadOnly}, { H341_H323MPCONFERENCEPARTICIPANTSINVALIDPACKETERRORS, ASN_COUNTER, H341_ReadOnly}, { H341_H323MPCONFERENCEPARTICIPANTSLATEAUDIOPACKETSDROPPED, ASN_COUNTER, H341_ReadOnly}, { H341_H323MPCONFERENCEPARTICIPANTSRECEIVEDSILENCEPACKETS, ASN_COUNTER, H341_ReadOnly}, { H341_H323MPCONFERENCEPARTICIPANTSSILENCEPACKETSGENERATED, ASN_COUNTER, H341_ReadOnly}, { H341_H323MPCONFERENCEPARTICIPANTSVIDEOFRAMERATE, ASN_INTEGER, H341_ReadOnly}, { H341_H323MPCONFERENCEPARTICIPANTSVIDEORESOLUTION, ASN_INTEGER, H341_ReadOnly}, { H341_H323MPCONFERENCEPARTICIPANTSFULLPICTURECOUNTER, ASN_INTEGER, H341_ReadOnly}, { H341_H323MPCONFERENCEGLOBALAUDIOMIXTABLE, ASN_ARRAY, H341_NoAccess}, { H341_H323MPCONFERENCEGLOBALAUDIOMIXTABLEINDEX, ASN_INTEGER, H341_NoAccess}, { H341_H323MPCONFERENCEGLOBALAUDIOMIXTERMINALIDENTIFIER, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323MPCONFERENCEGLOBALVIDEOMIXTABLE, ASN_ARRAY, H341_NoAccess}, { H341_H323MPCONFERENCEGLOBALVIDEOMIXTABLEINDEX, ASN_INTEGER, H341_NoAccess}, { H341_H323MPCONFERENCEGLOBALVIDEOMIXTERMINALIDENTIFIER, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323ZONETABLE, ASN_ARRAY, H341_NoAccess}, { H341_H323ZONEINDEX, ASN_INTEGER, H341_NoAccess}, { H341_H323ZONEZONENAME, ASN_OCTET_STR, H341_Create}, { H341_H323ZONERASSIGNALADDRESSTAG, ASN_INTEGER, H341_Create}, { H341_H323ZONERASSIGNALADDRESS, ASN_OCTET_STR, H341_Create}, { H341_H323ZONEMAXBANDWIDTH, ASN_UNSIGNED, H341_Create}, { H341_H323ZONEALLOCATEDBANDWIDTH, ASN_INTEGER, H341_ReadOnly}, { H341_H323ZONEIRRFREQUENCY, ASN_INTEGER, H341_Create}, { H341_H323ZONELOCALZONE, ASN_INTEGER, H341_Create}, { H341_H323ZONEADMISSIONS, ASN_COUNTER, H341_ReadOnly}, { H341_H323ZONEADMISSIONSREJECTED, ASN_COUNTER, H341_ReadOnly}, { H341_H323ZONEROWSTATUS, ASN_INTEGER, H341_Create}, { H341_H323GATEKEEPERSYSTEMTABLE, ASN_ARRAY, H341_NoAccess}, { H341_H323GATEKEEPERSYSTEMNAMEANDMAKER, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323GATEKEEPERSYSTEMSOFTWAREVERSIONNUMBER, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323GATEKEEPERSYSTEMHARDWAREVERSIONNUMBER, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323GATEKEEPERSYSTEMCONTACT, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323GATEKEEPERSYSTEMT35COUNTRYCODE, ASN_INTEGER, H341_ReadOnly}, { H341_H323GATEKEEPERSYSTEMT35COUNTRYCODEEXTENTION, ASN_INTEGER, H341_ReadOnly}, { H341_H323GATEKEEPERSYSTEMT35MANUFACTURERCODE, ASN_INTEGER, H341_ReadOnly}, { H341_H323GATEKEEPERSYSTEMLOCATION, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323GATEKEEPERSYSTEMUPTIME, ASN_TIMETICKS, H341_ReadOnly}, { H341_H323GATEKEEPERSYSTEMLOCALTIME, ASN_OCTET_STR, H341_ReadWrite}, { H341_H323GATEKEEPERCONFIGURATIONTABLE, ASN_ARRAY, H341_NoAccess}, { H341_H323GATEKEEPERCONFIGURATIONENABLENOTIFICATIONS, ASN_INTEGER, H341_ReadWrite}, { H341_H323GATEKEEPERCONFIGURATIONREGISTRATIONMODE, ASN_INTEGER, H341_ReadWrite}, { H341_H323GATEKEEPERSTATISTICSTABLE, ASN_ARRAY, H341_NoAccess}, { H341_H323GATEKEEPERSTATISTICSTOTALERRORS, ASN_COUNTER, H341_ReadOnly}, { H341_H323GATEKEEPERSTATISTICSLASTERROREVENTTIME, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323GATEKEEPERSTATISTICSLASTERRORSEVERITY, ASN_INTEGER, H341_ReadOnly}, { H341_H323GATEKEEPERSTATISTICSLASTERRORPROBABLECAUSE, ASN_INTEGER, H341_ReadOnly}, { H341_H323GATEKEEPERSTATISTICSLASTERRORADDITIONALTEXT, ASN_OCTET_STR, H341_ReadOnly}, { H341_H323GATEKEEPERSTATISTICSZONENO, ASN_COUNTER, H341_ReadOnly}}; #endif /* H341_OID_H */ h323plus/include/opalwavfile.h0000644000175000017500000001051110655704652015224 0ustar markmark/* * OpalWavFile.h * * WAV file class with auto-PCM conversion * * OpenH323 Library * * Copyright (c) 2002 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * Contributor(s): ______________________________________. * * $Log: opalwavfile.h,v $ * Revision 1.1 2007/08/06 20:50:50 shorne * First commit of h323plus * * Revision 1.9 2005/11/30 13:05:01 csoutheren * Changed tags for Doxygen * * Revision 1.8 2004/08/26 08:05:03 csoutheren * Codecs now appear in abstract factory system * Fixed Windows factory bootstrap system (again) * * Revision 1.7 2004/08/09 11:11:33 csoutheren * Added stupid windows hack to force opalwavfile factories to register * * Revision 1.6 2004/07/15 11:13:49 rjongbloed * Migrated changes from crs_vxnml_devel branch into main trunk * * Revision 1.5.6.1 2004/07/07 07:10:11 csoutheren * Changed to use new factory based PWAVFile * Removed redundant blocking/unblocking when using G.723.1 * * Revision 1.5 2002/09/16 01:14:15 robertj * Added #define so can select if #pragma interface/implementation is used on * platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan. * * Revision 1.4 2002/09/06 06:20:37 robertj * More cosmetic changes * * Revision 1.3 2002/08/08 13:00:02 craigs * Remove unused definition of LastReadCount thanks to Peter 'Luna' Runestig * * Revision 1.2 2002/08/05 10:03:47 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.1 2002/06/20 01:21:03 craigs * Initial version * */ #ifndef __OPALWAVFILE_H #define __OPALWAVFILE_H #ifdef P_USE_PRAGMA #pragma interface #endif #include /**This class is similar to the PWavFile class found in the PWlib components library. However, it will tranparently convert all data to/from PCM format, allowing applications to be unconcerned with the underlying data format. Note that this will only work with sample-based formats that can be converted to/from PCM data, such as uLaw and aLaw */ class OpalWAVFile : public PWAVFile { PCLASSINFO(OpalWAVFile, PWAVFile); public: OpalWAVFile( unsigned format = fmt_PCM ///< Type of WAV File to create ); /**Create a unique temporary file name, and open the file in the specified mode and using the specified options. Note that opening a new, unique, temporary file name in ReadOnly mode will always fail. This would only be usefull in a mode and options that will create the file. If a WAV file is being created, the type parameter can be used to create a PCM Wave file or a G.723.1 Wave file by using #WaveType enum# The #PChannel::IsOpen()# function may be used after object construction to determine if the file was successfully opened. */ OpalWAVFile( OpenMode mode, ///< Mode in which to open the file. int opts = ModeDefault, ///< #OpenOptions enum# for open operation. unsigned format = fmt_PCM ///< Type of WAV File to create ); /**Create a WAV file object with the specified name and open it in the specified mode and with the specified options. If a WAV file is being created, the type parameter can be used to create a PCM Wave file or a G.723.1 Wave file by using #WaveType enum# The #PChannel::IsOpen()# function may be used after object construction to determine if the file was successfully opened. */ OpalWAVFile( const PFilePath & name, ///< Name of file to open. OpenMode mode = ReadWrite, ///< Mode in which to open the file. int opts = ModeDefault, ///< #OpenOptions enum# for open operation. unsigned format = fmt_PCM ///< Type of WAV File to create ); }; #endif // __OPALWAVFILE_H // End of File /////////////////////////////////////////////////////////////// h323plus/include/h323filetransfer.h0000644000175000017500000004527611647277756016033 0ustar markmark/* * h323filetransfer.h * * H323 File Transfer class. * * h323plus library * * Copyright (c) 2008 ISVO (Asia) Pte. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * Contributor(s): ______________________________________. * * $Log: h323filetransfer.h,v $ * Revision 1.4 2011/10/18 13:32:30 shorne * Rearranged Default Session ids so FECC is Session 3 for better interoperability. * * Revision 1.3 2009/02/21 14:06:02 shorne * Major FileTransfer code review and improvement * * Revision 1.2 2008/05/23 11:19:38 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2008/01/01 00:16:12 shorne * Added GnuGknat and FileTransfer support * * * */ #ifdef H323_FILE #include #include ////////////////////////////////////////////////////////////////////////////////// class H323File { public: PString m_Filename; PString m_Directory; long m_Filesize; }; class H323FileTransferList : public list { public: H323FileTransferList(); PINDEX GetSize(); H323File * GetAt(PINDEX i); void Add(const PString & filename, const PDirectory & directory, long filesize); void SetSaveDirectory(const PString directory); const PDirectory & GetSaveDirectory(); void SetDirection(H323Channel::Directions _direction); H323Channel::Directions GetDirection(); void SetMaster(PBoolean state); PBoolean IsMaster(); protected: H323Channel::Directions direction; PDirectory saveDirectory; PBoolean master; }; ////////////////////////////////////////////////////////////////////////////////// /**This class describes the File Transfer logical channel. */ class H323FileTransferHandler; class H323FileTransferChannel : public H323Channel { PCLASSINFO(H323FileTransferChannel, H323Channel); public: /**@name Construction */ //@{ /**Create a new channel. */ H323FileTransferChannel( H323Connection & connection, ///< Connection to endpoint for channel const H323Capability & capability, ///< Capability channel is using Directions theDirection, ///< Direction of channel RTP_UDP & rtp, ///< RTP Session for channel unsigned theSessionID, ///< Session ID for channel const H323FileTransferList & list ///< List of files to Request/Send ); ~H323FileTransferChannel(); //@} /**@name Overrides from class H323Channel */ //@{ /**Indicate the direction of the channel. Return if the channel is bidirectional, or unidirectional, and which direction for the latter case. */ virtual H323Channel::Directions GetDirection() const; /**Set the initial bandwidth for the channel. This calculates the initial bandwidth required by the channel and returns TRUE if the connection can support this bandwidth. The default behaviour does nothing. */ virtual PBoolean SetInitialBandwidth(); /**Fill out the OpenLogicalChannel PDU for the particular channel type. */ virtual PBoolean OnSendingPDU( H245_OpenLogicalChannel & openPDU ///< Open PDU to send. ) const; virtual PBoolean OnSendingPDU(H245_H2250LogicalChannelParameters & param) const; virtual void OnSendOpenAck(const H245_OpenLogicalChannel & openPDU, H245_OpenLogicalChannelAck & ack) const; virtual void OnSendOpenAck(H245_H2250LogicalChannelAckParameters & param) const; /**This is called after a request to create a channel occurs from the local machine via the H245LogicalChannelDict::Open() function, and the request has been acknowledged by the remote endpoint. The default makes sure the parameters are compatible and passes on the PDU to the rtp session. */ virtual PBoolean OnReceivedPDU( const H245_OpenLogicalChannel & pdu, ///< Open PDU unsigned & errorCode ///< Error code on failure ); virtual PBoolean OnReceivedPDU(const H245_H2250LogicalChannelParameters & param, unsigned & errorCode); virtual PBoolean OnReceivedAckPDU(const H245_OpenLogicalChannelAck & pdu); virtual PBoolean OnReceivedAckPDU(const H245_H2250LogicalChannelAckParameters & param); /**Handle channel data reception. This is called by the thread started by the Start() function and is a loop reading from the transport and calling HandlePacket() for each PDU read. */ virtual void Receive(); /**Handle channel data transmission. This is called by the thread started by the Start() function and is typically a loop reading from the codec and writing to the transport (eg an RTP_session). */ virtual void Transmit(); virtual PBoolean Open(); virtual PBoolean Start(); virtual void Close(); virtual PBoolean SetDynamicRTPPayloadType(int newType); RTP_DataFrame::PayloadTypes GetDynamicRTPPayloadType() const { return rtpPayloadType; } H323FileTransferHandler * GetHandler() const { return fileHandler; } //@} protected: PBoolean ExtractTransport(const H245_TransportAddress & pdu, PBoolean isDataPort, unsigned & errorCode ); PBoolean RetreiveFileInfo(const H245_GenericInformation & info, H323FileTransferList & filelist ); void SetFileList(H245_OpenLogicalChannel & open, H323FileTransferList flist) const; PBoolean GetFileList(const H245_OpenLogicalChannel & open); unsigned sessionID; Directions direction; RTP_UDP & rtpSession; H323_RTP_Session & rtpCallbacks; H323FileTransferHandler *fileHandler; H323FileTransferList filelist; RTP_DataFrame::PayloadTypes rtpPayloadType; }; //////////////////////////////////////////////////////////////////// class H323FileTransferCapability : public H323DataCapability { PCLASSINFO(H323FileTransferCapability, H323DataCapability); public: /**@name Construction */ //@{ /**Create a new File Transfer capability with default values. */ H323FileTransferCapability(); /**Create a new File Transfer capability with defined value. */ H323FileTransferCapability(unsigned maxBitRate, unsigned maxBlockSize); //@} /**@name Overrides from class PObject */ //@{ /**Compare two capability instances. This compares the main and sub-types of the capability. */ Comparison Compare(const PObject & obj) const; /**Clone the File Transfer Capability */ PObject * Clone() const; //@} /**@name Identification functions */ //@{ virtual PString GetFormatName() const { return "TFTP over RTP"; } /**Get the sub-type of the capability. This is a code dependent on the main type of the capability. This returns one of the four possible combinations of mode and speed using the enum values of the protocol ASN H245_AudioCapability class. */ virtual unsigned GetSubType() const; /**Get the default RTP session. This function gets the default RTP session ID for the capability type. The default behaviour returns zero, indicating it is not an RTP based capability. */ virtual unsigned GetDefaultSessionID() const; //@} /**@name Protocol manipulation */ //@{ /**This function is called whenever and outgoing TerminalCapabilitySet or OpenLogicalChannel PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour sets the pdu and calls OnSendingPDU with a H245_DataProtocolCapability parameter. */ virtual PBoolean OnSendingPDU( H245_DataApplicationCapability & pdu ) const; /**This function is called whenever and incoming TerminalCapabilitySet or OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. The default behaviour does nothing. */ virtual PBoolean OnReceivedPDU( const H245_DataApplicationCapability & cap ///< PDU to get information from ); /**This function is called whenever and outgoing RequestMode PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour sets the PDUs tag according to the GetSubType() function (translated to different enum). */ virtual PBoolean OnSendingPDU( H245_DataMode & pdu ///< PDU to set information on ) const; /**This function is called whenever and incoming TerminalCapabilitySet or OpenLogicalChannel PDU has been used to construct the control channel. It allows the capability to set from the PDU fields, information in members specific to the class. The default behaviour does nothing. */ PBoolean OnReceivedPDU(const H245_GenericCapability & pdu); /**This function is called whenever and outgoing TerminalCapabilitySet PDU is being constructed for the control channel. It allows the capability to set the PDU fields from information in members specific to the class. The default behaviour calls the OnSendingPDU() function with a more specific PDU type. */ PBoolean OnSendingPDU(H245_GenericCapability & pdu) const; //@} enum blockSizes { e_RFC1350 = 512, e_1024 = 1024, e_1428 = 1428, e_2048 = 2048, e_4096 = 4096, e_8192 = 8192 }; /**@name Operations */ //@{ /**Create the channel instance, allocating resources as required. */ virtual H323Channel * CreateChannel( H323Connection & connection, ///< Owner connection for channel H323Channel::Directions direction, ///< Direction of channel unsigned sessionID, ///< Session ID for RTP channel const H245_H2250LogicalChannelParameters * param ///< Parameters for channel ) const; //@} /**@name Utilities */ //@{ /**Get the BlockSize of data to be sent. */ unsigned GetBlockSize() const { return m_blockSize; } /**Get the BlockSize of data to be sent (as Capability Parameter). */ unsigned GetBlockRate() const { return maxBitRate / m_blockOctets; } /**Get the BlockSize of data to be sent (as Octets size). */ unsigned GetOctetSize() const { return m_blockOctets; } /**Get the Transfer Mode. */ unsigned GetTransferMode() const { return m_transferMode; } /**Set the List of files to send */ void SetFileTransferList(const H323FileTransferList & list); //@} protected: unsigned m_blockSize; ///< Size indicator in capability negotiation unsigned m_blockOctets; ///< Block Octet size unsigned m_transferMode; ///< Mode of transfer Raw Tftp or RTP encaptulated H323FileTransferList m_filelist; ///< File list to Request/Send }; class H323FilePacket : public PBYTEArray { PCLASSINFO(H323FilePacket, PBYTEArray); public: enum opcodes { e_PROB, e_RRQ, e_WRQ, e_DATA, e_ACK, e_ERROR }; enum errCodes { ErrNotDefined, ErrFileNotFound, ErrAccessViolation, ErrDiskFull, ErrIllegalOperation, ErrUnknownID, ErrFileExists, ErrNoSuchUser }; void BuildPROB(); void BuildRequest(opcodes code, const PString & filename, int filesize, int blocksize); void BuildData(int blockid, int size); void BuildACK(int blockid,int filesize = 0); void BuildError(int errorcode,PString errmsg); H323FilePacket::opcodes GetPacketType() const; // for RRQ/WRQ Only PString GetFileName() const; unsigned GetFileSize() const; unsigned GetBlockSize() const; // for DATA only unsigned GetDataSize() const; BYTE * GetDataPtr(); int GetBlockNo() const; // For ACK int GetACKBlockNo() const; // for ERROR messages void GetErrorInformation(int & ErrCode, PString & ErrStr) const; protected: void attach(PString & data); }; class H323FileIOChannel : public PIndirectChannel { public: enum fileError { e_OK, e_NotFound, e_AccessDenied, e_FileExists = 6 }; H323FileIOChannel(PFilePath _file, PBoolean read); ~H323FileIOChannel(); PBoolean IsError(fileError & err); PBoolean Open(); PBoolean Close(); PBoolean Read(void * buffer, PINDEX & amount); PBoolean Write(const void * buf, PINDEX amount); unsigned GetFileSize(); protected: PBoolean CheckFile(PFilePath _file, PBoolean read, fileError & errCode); PMutex chanMutex; PBoolean fileopen; unsigned filesize; fileError IOError; }; ////////////////////////////////////////////////////////////////////////////// // FileTransferHandler // Derive you class from this to set and collect events associated with // the file transfer // class H323FileTransferHandler : public PObject { PCLASSINFO(H323FileTransferHandler, PObject); public: H323FileTransferHandler(H323Connection & connection, unsigned sessionID, H323Channel::Directions dir, H323FileTransferList & filelist ); ~H323FileTransferHandler(); enum transferState { e_probing, ///< Probing for connectivity e_connect, ///< Received a probe packet and confirm e_waiting, ///< Waiting for RRQ/WRQ command e_sending, ///< Sending Data e_receiving, ///< Receiving Data e_completed, ///< Transfer Completed e_error ///< Error Received }; enum receiveStates { recOK, ///< received block OK recPartial, ///< Only partial block received recComplete, ///< File was fully received recIncomplete, ///< Incomplete receival of File. recTimeOut, ///< TimeOut waiting for packet. recReady ///< Ready to receive files }; ////////////////////////// // User override to custom set blocksize and transmission rate virtual void SetBlockSize(H323FileTransferCapability::blockSizes size); virtual void SetMaxBlockRate(unsigned rate); // User override to get events virtual void OnStateChange(transferState newState) {}; virtual void OnFileStart(const PString & filename, unsigned filesize, PBoolean transmit) {}; virtual void OnFileOpenError(const PString & filename, H323FileIOChannel::fileError _err) {}; virtual void OnError(const PString ErrMsg) {}; virtual void OnFileComplete(const PString & filename) {}; virtual void OnFileProgress(const PString & filename, int Blockno, unsigned OctetsSent, PBoolean transmit) {}; virtual void OnFileError(const PString & filename, int Blockno, PBoolean transmit) {}; virtual void OnTransferComplete() {}; ////////////////////////// H323FileTransferCapability::blockSizes GetBlockSize() { return (H323FileTransferCapability::blockSizes)blockSize; } unsigned GetBlockRate() { return blockRate; } PBoolean Start(H323Channel::Directions direction); PBoolean Stop(H323Channel::Directions direction); void SetPayloadType(RTP_DataFrame::PayloadTypes _type); void SetMaster(PBoolean newVal) { master = newVal; } protected: PBoolean TransmitFrame(H323FilePacket & buffer, PBoolean final); PBoolean ReceiveFrame(H323FilePacket & buffer, PBoolean & final); void ChangeState(transferState newState); void SetBlockState(receiveStates state); H323FileTransferList filelist; PThread * TransmitThread; PThread * ReceiveThread; PDECLARE_NOTIFIER(PThread, H323FileTransferHandler, Transmit); PDECLARE_NOTIFIER(PThread, H323FileTransferHandler, Receive); PBoolean transmitRunning; PBoolean receiveRunning; PSyncPointAck exitTransmit; PSyncPointAck exitReceive; PTimer shutdownTimer; RTP_DataFrame transmitFrame; ///< Template RTP Frame for sending/receiving RTP_Session * session; ///< RTP Session PSyncPoint probMutex; ///< probing Mutex PMutex transferMutex; ///< Mutex for read/write operation PMutex stateMutex; ///< Mutex for state change PSyncPoint nextFrame; ///< Wait for confirmation before sending the next block PINDEX responseTimeOut; ///< Time to wait for a response (set at 1.5 sec) PTime *StartTime; PBoolean master; ///< Was Initiator of the channel private: RTP_DataFrame::PayloadTypes rtpPayloadType; ///< Payload Type should be dynamically allocated int msBetweenBlocks; ///< milliseconds between sending next block of data PAdaptiveDelay sendwait; ///< Wait before sending the next block of data unsigned timestamp; ///< TimeStamp of last packet received unsigned blockSize; ///< Size of the Blocks to transmit unsigned blockRate; ///< Rate of Transmission in bits/sec // Transfer states H323FileIOChannel * curFile; ///< Current File being sent H323FileIOChannel::fileError ioerr; ///< Last IO error transferState currentState; ///< Current state of Transmission receiveStates blockState; ///< State of Received block int lastBlockNo; ///< Last Block No sent unsigned lastBlockSize; ///< Last Block Size sent PString curFileName; ///< Current FileName being sent/received unsigned curFileSize; ///< Current File being Transmitted size unsigned curBlockSize; ///< Block size of current transmittion unsigned curProgSize; ///< Current amount of data sent/received }; #endif h323plus/include/x224.h0000644000175000017500000000571511015524161013406 0ustar markmark/* * x224.h * * X.224 protocol handler * * Open H323 Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: x224.h,v $ * Revision 1.2 2008/05/23 11:20:17 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:50:50 shorne * First commit of h323plus * * Revision 1.10 2002/09/16 01:14:15 robertj * Added #define so can select if #pragma interface/implementation is used on * platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan. * * Revision 1.9 2002/09/03 06:19:37 robertj * Normalised the multi-include header prevention ifdef/define symbol. * * Revision 1.8 2002/08/05 10:03:47 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.7 2001/02/09 05:16:24 robertj * Added #pragma interface for GNU C++. * * Revision 1.6 2000/05/18 11:53:35 robertj * Changes to support doc++ documentation generation. * * Revision 1.5 2000/05/02 04:32:25 robertj * Fixed copyright notice comment. * * Revision 1.4 1999/08/31 13:30:20 robertj * Added gatekeeper support. * * Revision 1.3 1999/06/09 05:26:20 robertj * Major restructuring of classes. * * Revision 1.2 1999/01/16 11:31:47 robertj * Fixed name in header comment. * * Revision 1.1 1998/12/14 09:13:51 robertj * Initial revision * */ #ifndef __OPAL_X224_H #define __OPAL_X224_H #ifdef P_USE_PRAGMA #pragma interface #endif #include /////////////////////////////////////////////////////////////////////////////// /**This class embodies X.224 Class Zero Protocol Data Unit. */ class X224 : public PObject { PCLASSINFO(X224, PObject) public: enum Codes { ConnectRequest = 0xe0, ConnectConfirm = 0xd0, DataPDU = 0xf0 }; X224(); void BuildConnectRequest(); void BuildConnectConfirm(); void BuildData(const PBYTEArray & data); void PrintOn(ostream & strm) const; PBoolean Decode(const PBYTEArray & rawData); PBoolean Encode(PBYTEArray & rawData) const; int GetCode() const { return header[0]; } const PBYTEArray & GetData() const { return data; } private: PBYTEArray header; PBYTEArray data; }; #endif // __OPAL_X224_H ///////////////////////////////////////////////////////////////////////////// h323plus/config.sub0000644000175000017500000007340610655704647013117 0ustar markmark#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. timestamp='2003-08-18' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit 0;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | kfreebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32r | m68000 | m68k | m88k | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | msp430 \ | ns16k | ns32k \ | openrisc | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* \ | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32r-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | msp430-* \ | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; crds | unos) basic_machine=m68k-crds ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; mmix*) basic_machine=mmix-knuth os=-mmixware ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nv1) basic_machine=nv1-cray os=-unicosmp ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; or32 | or32-*) basic_machine=or32-unknown os=-coff ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sh64) basic_machine=sh64-unknown ;; sparc | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -kfreebsd* | -freebsd* | -riscix* \ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -ptx*) vendor=sequent ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: h323plus/h323plus_2010.vcxproj0000644000175000017500000031710711712004251014553 0ustar markmarkяЛП Debug Win32 Debug x64 No Trace Win32 No Trace x64 Release Win32 Release x64 h323plus {71C46EAF-48C9-47BA-9532-27B51744548D} h323plus StaticLibrary false StaticLibrary false StaticLibrary false StaticLibrary false StaticLibrary false StaticLibrary false <_ProjectFileVersion>10.0.30319.1 .\lib\ .\lib\ .\lib\Release\ .\lib\Release\ .\lib\ .\lib\ .\lib\Debug\ .\lib\Debug\ .\lib\ .\lib\ .\lib\NoTrace\ .\lib\NoTrace\ ..\ptlib\include;include;$(IncludePath) ..\ptlib\include;include;$(IncludePath) ..\ptlib\lib;lib;$(LibraryPath) ..\ptlib\lib;lib;$(LibraryPath) c:\tools;$(SourcePath) c:\tools;$(SourcePath) $(ProjectName)d $(ProjectName)d $(ProjectName)s $(ProjectName)s ..\ptlib\include;include;$(IncludePath) ..\ptlib\lib;lib;$(LibraryPath) ..\ptlib\include;include;$(IncludePath) ..\ptlib\lib;lib;$(LibraryPath) ..\ptlib\include;include;$(IncludePath) ..\ptlib\lib;lib;$(LibraryPath) ..\ptlib\include;include;$(IncludePath) ..\ptlib\lib;lib;$(LibraryPath) c:\tools;$(SourcePath) c:\tools;$(SourcePath) c:\tools;$(SourcePath) c:\tools;$(SourcePath) MaxSpeed AnySuitable NDEBUG;PTRACING;%(PreprocessorDefinitions) true MultiThreadedDLL true true Use ptlib.h .\lib\Release/h323plus.pch .\lib\Release/ .\lib\Release/ lib\h323plus.pdb Level4 true OldStyle 4244 0x0c09 lib\h323plus.lib true MaxSpeed AnySuitable NDEBUG;PTRACING;%(PreprocessorDefinitions) true MultiThreadedDLL true true Use ptlib.h .\lib\Release/h323plus.pch .\lib\Release/ .\lib\Release/ lib\h323plus.pdb Level4 true OldStyle 4244;4267 0x0c09 lib\h323plus.lib true Disabled _DEBUG;PTRACING;%(PreprocessorDefinitions) MultiThreadedDebugDLL true Use ptlib.h .\lib\Debug/h323plus.pch .\lib\Debug/ .\lib\Debug/ lib\h323plusd.pdb true Level4 true ProgramDatabase 4244 0x0c09 lib\h323plusd.lib true Disabled _DEBUG;PTRACING;%(PreprocessorDefinitions) MultiThreadedDebugDLL true Use ptlib.h .\lib\Debug/h323plus.pch .\lib\Debug/ .\lib\Debug/ lib\h323plusd.pdb true Level4 true ProgramDatabase 4244;4267 0x0c09 lib\h323plusd.lib true MinSpace AnySuitable NDEBUG;PASN_NOPRINTON;PASN_LEANANDMEAN;%(PreprocessorDefinitions) true MultiThreadedDLL true true Use ptlib.h .\lib\NoTrace/h323plus.pch .\lib\NoTrace/ .\lib\NoTrace/ lib\h323plusn.pdb Level4 true 4244 0x0c09 lib\h323plusn.lib true MinSpace AnySuitable NDEBUG;PASN_NOPRINTON;PASN_LEANANDMEAN;%(PreprocessorDefinitions) true MultiThreadedDLL true true Use ptlib.h .\lib\NoTrace/h323plus.pch .\lib\NoTrace/ .\lib\NoTrace/ lib\h323plusn.pdb Level4 true 4244;4267 0x0c09 lib\h323plusn.lib true Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled _DEBUG _DEBUG true true Level1 Level1 MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) Level1 Level1 MaxSpeed MaxSpeed NDEBUG NDEBUG Level1 Level1 Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) Create Create true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) Create Create MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Create Create Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) true true MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) Configuring Build Options Configuring Build Options .\configure --exclude-env=VSNET_PWLIB_CONFIGURE_EXCLUDE_DIRS .\configure --exclude-env=VSNET_PWLIB_CONFIGURE_EXCLUDE_DIRS configure.in;%(AdditionalInputs) configure.in;%(AdditionalInputs) .\include\openh323buildopts.h;%(Outputs) .\include\openh323buildopts.h;%(Outputs) Configuring Build Options Configuring Build Options .\configure --exclude-env=VSNET_PWLIB_CONFIGURE_EXCLUDE_DIRS .\configure --exclude-env=VSNET_PWLIB_CONFIGURE_EXCLUDE_DIRS configure.ac;%(AdditionalInputs) configure.ac;%(AdditionalInputs) .\include\openh323buildopts.h;%(Outputs) .\include\openh323buildopts.h;%(Outputs) Configuring Build Options Configuring Build Options .\configure --exclude-env=VSNET_PWLIB_CONFIGURE_EXCLUDE_DIRS .\configure --exclude-env=VSNET_PWLIB_CONFIGURE_EXCLUDE_DIRS configure.in;%(AdditionalInputs) configure.in;%(AdditionalInputs) .\include\openh323buildopts.h;%(Outputs) .\include\openh323buildopts.h;%(Outputs) h323plus/Openh323libce.vcp0000644000175000017500000201655310655704647014153 0ustar markmark# Microsoft eMbedded Visual Tools Project File - Name="Openh323libce" - Package Owner=<4> # Microsoft eMbedded Visual Tools Generated Build File, Format Version 6.02 # ** DO NOT EDIT ** # TARGTYPE "Win32 (WCE SH4) Static Library" 0x8604 # TARGTYPE "Win32 (WCE x86em) Static Library" 0x7f04 # TARGTYPE "Win32 (WCE ARM) Static Library" 0x8504 # TARGTYPE "Win32 (WCE ARMV4) Static Library" 0xa304 # TARGTYPE "Win32 (WCE emulator) Static Library" 0xa604 CFG=Openh323libce - Win32 (WCE SH4) Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "Openh323libce.vcn". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "Openh323libce.vcn" CFG="Openh323libce - Win32 (WCE SH4) Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "Openh323libce - Win32 (WCE SH4) Release" (based on "Win32 (WCE SH4) Static Library") !MESSAGE "Openh323libce - Win32 (WCE SH4) Debug" (based on "Win32 (WCE SH4) Static Library") !MESSAGE "Openh323libce - Win32 (WCE ARM) Release" (based on "Win32 (WCE ARM) Static Library") !MESSAGE "Openh323libce - Win32 (WCE ARM) Debug" (based on "Win32 (WCE ARM) Static Library") !MESSAGE "Openh323libce - Win32 (WCE x86em) Release" (based on "Win32 (WCE x86em) Static Library") !MESSAGE "Openh323libce - Win32 (WCE x86em) Debug" (based on "Win32 (WCE x86em) Static Library") !MESSAGE "Openh323libce - Win32 (WCE ARMV4) Debug" (based on "Win32 (WCE ARMV4) Static Library") !MESSAGE "Openh323libce - Win32 (WCE emulator) Debug" (based on "Win32 (WCE emulator) Static Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 1 # PROP Scc_ProjName ""$/OpenH323/OpenH323libce", KPSAAAAA" # PROP Scc_LocalPath "." # PROP ATL_Project 2 !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "SH4Rel" # PROP BASE Intermediate_Dir "SH4Rel" # PROP BASE CPU_ID "{D6519021-710F-11D3-99F2-00105A0DF099}" # PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "lib\" # PROP Intermediate_Dir "lib\SH4Rel" # PROP CPU_ID "{D6519021-710F-11D3-99F2-00105A0DF099}" # PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}" # PROP Target_Dir "" CPP=shcl.exe # ADD BASE CPP /nologo /W3 /Oxs /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "SHx" /D "SH4" /D "_SH4_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /Qsh4 /M$(CECrtMT) /c # ADD CPP /nologo /W3 /Oxs /I "\external\ffmpeg\libavcodec" /D "SHx" /D "SH4" /D "_SH4_" /D "NDEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /D "PTRACING" /D PMEMORY_CHECK=0 /D P_USE_INLINES=1 /D "_AFXDLL" /Yu"ptlib.h" /Qsh4 /M$(CECrtMT) /c LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"lib\SH4\Openh323libce.lib" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "SH4Dbg" # PROP BASE Intermediate_Dir "SH4Dbg" # PROP BASE CPU_ID "{D6519021-710F-11D3-99F2-00105A0DF099}" # PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}" # PROP BASE Target_Dir "" # PROP Use_MFC 2 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "lib\" # PROP Intermediate_Dir "lib\SH4Dbg" # PROP CPU_ID "{D6519021-710F-11D3-99F2-00105A0DF099}" # PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}" # PROP Target_Dir "" CPP=shcl.exe # ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "SHx" /D "SH4" /D "_SH4_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /Qsh4 /M$(CECrtMTDebug) /c # ADD CPP /nologo /W3 /Zi /Od /I "\external\ffmpeg\libavcodec" /D "DEBUG" /D "SHx" /D "SH4" /D "_SH4_" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /D "PTRACING" /D PMEMORY_CHECK=0 /D P_USE_INLINES=1 /D "_AFXDLL" /Yu"ptlib.h" /Qsh4 /M$(CECrtMTDebug) /c LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"lib\SH4\Openh323libced.lib" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "ARMRel" # PROP BASE Intermediate_Dir "ARMRel" # PROP BASE CPU_ID "{D6518FFC-710F-11D3-99F2-00105A0DF099}" # PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "lib\" # PROP Intermediate_Dir "lib\ARMRel" # PROP CPU_ID "{D6518FFC-710F-11D3-99F2-00105A0DF099}" # PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}" # PROP Target_Dir "" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"lib\ARM\Openh323libce.lib" CPP=clarm.exe # ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "NDEBUG" /D "ARM" /D "_ARM_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /Oxs /M$(CECrtMT) /c # ADD CPP /nologo /W3 /I "\external\ffmpeg\libavcodec" /D "NDEBUG" /D "ARM" /D "_ARM_" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /D PTRACING=0 /D PMEMORY_CHECK=0 /D P_USE_INLINES=1 /D "_AFXDLL" /Yu"ptlib.h" /Oxs /M$(CECrtMT) /c !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "ARMDbg" # PROP BASE Intermediate_Dir "ARMDbg" # PROP BASE CPU_ID "{D6518FFC-710F-11D3-99F2-00105A0DF099}" # PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "lib\" # PROP Intermediate_Dir "lib\ARMDbg" # PROP CPU_ID "{D6518FFC-710F-11D3-99F2-00105A0DF099}" # PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}" # PROP Target_Dir "" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"lib\ARM\Openh323libced.lib" CPP=clarm.exe # ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "ARM" /D "_ARM_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /M$(CECrtMTDebug) /c # ADD CPP /nologo /W3 /Zi /Od /I "\external\ffmpeg\libavcodec" /D "DEBUG" /D "ARM" /D "_ARM_" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /D "PTRACING" /D PMEMORY_CHECK=0 /D P_USE_INLINES=1 /D "_AFXDLL" /Yu"ptlib.h" /M$(CECrtMTDebug) /c !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "X86EMRel" # PROP BASE Intermediate_Dir "X86EMRel" # PROP BASE CPU_ID "{D6518FF4-710F-11D3-99F2-00105A0DF099}" # PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "lib\" # PROP Intermediate_Dir "lib\X86EMRel" # PROP CPU_ID "{D6518FF4-710F-11D3-99F2-00105A0DF099}" # PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}" # PROP Target_Dir "" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"lib\x86em\Openh323libce.lib" CPP=cl.exe # ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "WIN32" /D "STRICT" /D "_WIN32_WCE_EMULATION" /D "INTERNATIONAL" /D "USA" /D "INTLMSG_CODEPAGE" /D "$(CePlatform)" /D "i486" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "NDEBUG" /D "_LIB" /YX /Oxs /Gz /c # ADD CPP /nologo /W3 /I "\external\ffmpeg\libavcodec" /D "WIN32" /D "STRICT" /D "_WIN32_WCE_EMULATION" /D "INTERNATIONAL" /D "USA" /D "INTLMSG_CODEPAGE" /D "i486" /D "_X86_" /D "x86" /D "NDEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /D "PTRACING" /D PMEMORY_CHECK=0 /D P_USE_INLINES=1 /D "_AFXDLL" /Yu"ptlib.h" /Oxs /c !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "X86EMDbg" # PROP BASE Intermediate_Dir "X86EMDbg" # PROP BASE CPU_ID "{D6518FF4-710F-11D3-99F2-00105A0DF099}" # PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "lib\" # PROP Intermediate_Dir "lib\X86EMDbg" # PROP CPU_ID "{D6518FF4-710F-11D3-99F2-00105A0DF099}" # PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}" # PROP Target_Dir "" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"lib\x86em\Openh323libced.lib" CPP=cl.exe # ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "WIN32" /D "STRICT" /D "_WIN32_WCE_EMULATION" /D "INTERNATIONAL" /D "USA" /D "INTLMSG_CODEPAGE" /D "$(CePlatform)" /D "i486" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "_LIB" /YX /Gz /c # ADD CPP /nologo /W3 /Zi /Od /I "\external\ffmpeg\libavcodec" /D "DEBUG" /D "WIN32" /D "STRICT" /D "_WIN32_WCE_EMULATION" /D "INTERNATIONAL" /D "USA" /D "INTLMSG_CODEPAGE" /D "i486" /D "_X86_" /D "x86" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /D "PTRACING" /D PMEMORY_CHECK=0 /D P_USE_INLINES=1 /Yu"ptlib.h" /Gd /c !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "ARMV4Dbg" # PROP BASE Intermediate_Dir "ARMV4Dbg" # PROP BASE CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}" # PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "ARMV4Dbg" # PROP Intermediate_Dir "ARMV4Dbg" # PROP CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}" # PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}" # PROP Target_Dir "" CPP=clarm.exe # ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /YX /M$(CECrtMTDebug) /c # ADD CPP /nologo /W3 /GR /GX /Zi /Od /Gy /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "P_USE_INLINES" /M$(CECrtMTDebug) /c LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "emulatorDbg" # PROP BASE Intermediate_Dir "emulatorDbg" # PROP BASE CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}" # PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "emulatorDbg" # PROP Intermediate_Dir "emulatorDbg" # PROP CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}" # PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}" # PROP Target_Dir "" CPP=cl.exe # ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /YX /Gs8192 /GF /c # ADD CPP /nologo /W3 /GR /GX /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "P_USE_INLINES" /Gs8192 /GF /c # SUBTRACT CPP /YX LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo !ENDIF # Begin Target # Name "Openh323libce - Win32 (WCE SH4) Release" # Name "Openh323libce - Win32 (WCE SH4) Debug" # Name "Openh323libce - Win32 (WCE ARM) Release" # Name "Openh323libce - Win32 (WCE ARM) Debug" # Name "Openh323libce - Win32 (WCE x86em) Release" # Name "Openh323libce - Win32 (WCE x86em) Debug" # Name "Openh323libce - Win32 (WCE ARMV4) Debug" # Name "Openh323libce - Win32 (WCE emulator) Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\src\channels.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_CHANN=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323rtp.h"\ ".\323trans.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_CHANN=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323rtp.h"\ ".\323trans.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\codecs.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_CODEC=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323pdu.h"\ ".\323trans.h"\ ".\931.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_CODEC=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323pdu.h"\ ".\323trans.h"\ ".\931.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\g711.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" !ENDIF # End Source File # Begin Source File SOURCE=.\src\gccpdu.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_GCCPD=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\ccpdu.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_GCCPD=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\ccpdu.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\gkclient.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_GKCLI=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323rtp.h"\ ".\323trans.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_GKCLI=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323rtp.h"\ ".\323trans.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\gkserver.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_GKSER=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323annexg.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\501.h"\ ".\501pdu.h"\ ".\931.h"\ ".\ceatl.h"\ ".\eclient.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\kserver.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\safecoll.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_GKSER=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323annexg.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\501.h"\ ".\501pdu.h"\ ".\931.h"\ ".\ceatl.h"\ ".\eclient.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\kserver.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\safecoll.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\guid.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_GUID_=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\random.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_GUID_=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\random.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h225_1.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" DEP_CPP_H225_=\ ".\src\h235_t.cxx"\ NODEP_CPP_H225_=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" DEP_CPP_H225_=\ ".\src\h235_t.cxx"\ NODEP_CPP_H225_=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h225_2.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H225_2=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H225_2=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h225ras.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H225R=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\460.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H225R=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\460.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h235.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" DEP_CPP_H235_=\ ".\src\h235_t.cxx"\ NODEP_CPP_H235_=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\235.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" DEP_CPP_H235_=\ ".\src\h235_t.cxx"\ NODEP_CPP_H235_=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\235.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h235auth.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H235A=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323pdu.h"\ ".\323trans.h"\ ".\931.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\cypher.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tclib\random.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H235A=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323pdu.h"\ ".\323trans.h"\ ".\931.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\cypher.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tclib\random.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h235auth1.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H235AU=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323pdu.h"\ ".\323trans.h"\ ".\931.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H235AU=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323pdu.h"\ ".\323trans.h"\ ".\931.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h245_1.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H245_=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\245.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H245_=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\245.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h245_2.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H245_2=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\245.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H245_2=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\245.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h245_3.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H245_3=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\245.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H245_3=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\245.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h248.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H248_=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\248.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H248_=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\248.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h261codec.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H261C=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\245.h"\ ".\261codec.h"\ ".\323caps.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\msystemx.h"\ ".\ransports.h"\ ".\src\vic\bsd-endian.h"\ ".\src\vic\config.h"\ ".\src\vic\crdef.h"\ ".\src\vic\dct.h"\ ".\src\vic\encoder-h261.h"\ ".\src\vic\encoder.h"\ ".\src\vic\p64-huff.h"\ ".\src\vic\p64.h"\ ".\src\vic\p64encoder.h"\ ".\src\vic\transmitter.h"\ ".\src\vic\vid_coder.h"\ ".\src\vic\videoframe.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\ys\param.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H261C=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\245.h"\ ".\261codec.h"\ ".\323caps.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\msystemx.h"\ ".\ransports.h"\ ".\src\vic\bsd-endian.h"\ ".\src\vic\config.h"\ ".\src\vic\crdef.h"\ ".\src\vic\dct.h"\ ".\src\vic\encoder-h261.h"\ ".\src\vic\encoder.h"\ ".\src\vic\p64-huff.h"\ ".\src\vic\p64.h"\ ".\src\vic\p64encoder.h"\ ".\src\vic\transmitter.h"\ ".\src\vic\vid_coder.h"\ ".\src\vic\videoframe.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\ys\param.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h263codec.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H263C=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\245.h"\ ".\263codec.h"\ ".\323caps.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\msystemx.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H263C=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\245.h"\ ".\263codec.h"\ ".\323caps.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\msystemx.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h323.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H323_=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\120proto.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323neg.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323rtp.h"\ ".\323trans.h"\ ".\38proto.h"\ ".\4501.h"\ ".\45010.h"\ ".\45011.h"\ ".\4504.h"\ ".\4506.h"\ ".\450pdu.h"\ ".\460.h"\ ".\880.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\fc2833.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H323_=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\120proto.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323neg.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323rtp.h"\ ".\323trans.h"\ ".\38proto.h"\ ".\4501.h"\ ".\45010.h"\ ".\45011.h"\ ".\4504.h"\ ".\4506.h"\ ".\450pdu.h"\ ".\460.h"\ ".\880.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\fc2833.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h323annexg.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H323A=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323annexg.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\501.h"\ ".\501pdu.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tclib\random.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H323A=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323annexg.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\501.h"\ ".\501pdu.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tclib\random.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h323caps.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H323C=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H323C=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h323ep.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" DEP_CPP_H323E=\ ".\src\opalglobalstatics.cxx"\ ".\version.h"\ NODEP_CPP_H323E=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\38proto.h"\ ".\450pdu.h"\ ".\460.h"\ ".\880.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\enum.h"\ ".\tclib\pdns.h"\ ".\tclib\pils.h"\ ".\tclib\pldap.h"\ ".\tclib\pssl.h"\ ".\tclib\pstun.h"\ ".\tclib\random.h"\ ".\tclib\url.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" DEP_CPP_H323E=\ ".\src\opalglobalstatics.cxx"\ ".\version.h"\ NODEP_CPP_H323E=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\38proto.h"\ ".\450pdu.h"\ ".\460.h"\ ".\880.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\enum.h"\ ".\tclib\pdns.h"\ ".\tclib\pils.h"\ ".\tclib\pldap.h"\ ".\tclib\pssl.h"\ ".\tclib\pstun.h"\ ".\tclib\random.h"\ ".\tclib\url.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h323neg.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H323N=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323neg.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tclib\random.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H323N=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323neg.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tclib\random.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h323pdu.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H323P=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\460.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H323P=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\460.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h323pluginmgr.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H323PL=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\palwavfile.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tclib\pwavfile.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H323PL=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\palwavfile.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tclib\pwavfile.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h323rtp.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H323R=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pluginmgr.h"\ ".\323rtp.h"\ ".\323trans.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H323R=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pluginmgr.h"\ ".\323rtp.h"\ ".\323trans.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h323t120.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H323T=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\120proto.h"\ ".\224.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pluginmgr.h"\ ".\323t120.h"\ ".\323trans.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H323T=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\120proto.h"\ ".\224.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pluginmgr.h"\ ".\323t120.h"\ ".\323trans.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h323trans.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H323TR=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tclib\random.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H323TR=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tclib\random.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h4501.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H4501=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\4501.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H4501=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\4501.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h45010.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H45010=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\4501.h"\ ".\45010.h"\ ".\4504.h"\ ".\4506.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H45010=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\4501.h"\ ".\45010.h"\ ".\4504.h"\ ".\4506.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h45011.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H45011=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\4501.h"\ ".\45010.h"\ ".\45011.h"\ ".\4504.h"\ ".\4506.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H45011=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\4501.h"\ ".\45010.h"\ ".\45011.h"\ ".\4504.h"\ ".\4506.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h4502.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H4502=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\4501.h"\ ".\4502.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H4502=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\4501.h"\ ".\4502.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h4503.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H4503=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\4501.h"\ ".\4503.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H4503=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\4501.h"\ ".\4503.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h4504.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H4504=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\4501.h"\ ".\4504.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H4504=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\4501.h"\ ".\4504.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h4505.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H4505=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\4501.h"\ ".\4504.h"\ ".\4505.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H4505=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\4501.h"\ ".\4504.h"\ ".\4505.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h4506.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H4506=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\4501.h"\ ".\4504.h"\ ".\4506.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H4506=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\4501.h"\ ".\4504.h"\ ".\4506.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h4507.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H4507=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\4501.h"\ ".\4504.h"\ ".\4507.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H4507=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\4501.h"\ ".\4504.h"\ ".\4507.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h4508.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H4508=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\4501.h"\ ".\4504.h"\ ".\4505.h"\ ".\4508.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H4508=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\4501.h"\ ".\4504.h"\ ".\4505.h"\ ".\4508.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h4509.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H4509=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\4501.h"\ ".\4504.h"\ ".\4507.h"\ ".\4509.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H4509=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\4501.h"\ ".\4504.h"\ ".\4507.h"\ ".\4509.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h450pdu.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H450P=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\4501.h"\ ".\45010.h"\ ".\45011.h"\ ".\4502.h"\ ".\4504.h"\ ".\4506.h"\ ".\450pdu.h"\ ".\880.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H450P=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\4501.h"\ ".\45010.h"\ ".\45011.h"\ ".\4502.h"\ ".\4504.h"\ ".\4506.h"\ ".\450pdu.h"\ ".\880.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h501.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H501_=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\501.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H501_=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\501.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\h501pdu.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_H501P=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323pdu.h"\ ".\323trans.h"\ ".\501.h"\ ".\501pdu.h"\ ".\931.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_H501P=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323pdu.h"\ ".\323trans.h"\ ".\501.h"\ ".\501pdu.h"\ ".\931.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\jitter.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_JITTE=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\itter.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_JITTE=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\itter.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\libver.rc # End Source File # Begin Source File SOURCE=.\src\lid.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_LID_C=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\245.h"\ ".\323caps.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\id.h"\ ".\include\lid.h"\ ".\msystemx.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_LID_C=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\245.h"\ ".\323caps.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\id.h"\ ".\include\lid.h"\ ".\msystemx.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\mcspdu.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_MCSPD=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\ceatl.h"\ ".\cspdu.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_MCSPD=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\ceatl.h"\ ".\cspdu.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\mediafmt.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_MEDIA=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\323pluginmgr.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\palplugin.h"\ ".\tbuildopts.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_MEDIA=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\323pluginmgr.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\palplugin.h"\ ".\tbuildopts.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\opalglobalstatics.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_OPALG=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_OPALG=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\opalosp.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_OPALO=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tclib\url.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_OPALO=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tclib\url.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\opalvxml.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_OPALV=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pipechan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\323caps.h"\ ".\323con.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palvxml.h"\ ".\palwavfile.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\cypher.h"\ ".\tclib\delaychan.h"\ ".\tclib\dtmf.h"\ ".\tclib\html.h"\ ".\tclib\http.h"\ ".\tclib\inetprot.h"\ ".\tclib\memfile.h"\ ".\tclib\mime.h"\ ".\tclib\pssl.h"\ ".\tclib\ptts.h"\ ".\tclib\pwavfile.h"\ ".\tclib\pxml.h"\ ".\tclib\url.h"\ ".\tclib\vxml.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pipechan.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\pipechan.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_OPALV=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pipechan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\235.h"\ ".\245.h"\ ".\323caps.h"\ ".\323con.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palvxml.h"\ ".\palwavfile.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\cypher.h"\ ".\tclib\delaychan.h"\ ".\tclib\dtmf.h"\ ".\tclib\html.h"\ ".\tclib\http.h"\ ".\tclib\inetprot.h"\ ".\tclib\memfile.h"\ ".\tclib\mime.h"\ ".\tclib\pssl.h"\ ".\tclib\ptts.h"\ ".\tclib\pwavfile.h"\ ".\tclib\pxml.h"\ ".\tclib\url.h"\ ".\tclib\vxml.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pipechan.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\pipechan.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\opalwavfile.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" DEP_CPP_OPALW=\ ".\include\codecs.h"\ NODEP_CPP_OPALW=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\msystemx.h"\ ".\palwavfile.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\pwavfile.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" DEP_CPP_OPALW=\ ".\include\codecs.h"\ NODEP_CPP_OPALW=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\msystemx.h"\ ".\palwavfile.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\pwavfile.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\peclient.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_PECLI=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323annexg.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\501.h"\ ".\501pdu.h"\ ".\931.h"\ ".\ceatl.h"\ ".\eclient.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\safecoll.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_PECLI=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323annexg.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\501.h"\ ".\501pdu.h"\ ".\931.h"\ ".\ceatl.h"\ ".\eclient.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\safecoll.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\precompile.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_PRECO=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_PRECO=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\q931.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_Q931_=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\931.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\random.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_Q931_=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\931.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\random.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\rfc2833.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_RFC28=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\fc2833.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_RFC28=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\fc2833.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\rtp.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_RTP_C=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\itter.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\pstun.h"\ ".\tclib\random.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_RTP_C=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\itter.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\pstun.h"\ ".\tclib\random.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\rtp2wav.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_RTP2W=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\pwavfile.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\tp2wav.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_RTP2W=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\pwavfile.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\tp2wav.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\svcctrl.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_SVCCT=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\248.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_SVCCT=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\248.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\t120proto.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_T120P=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\120proto.h"\ ".\224.h"\ ".\ceatl.h"\ ".\cspdu.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_T120P=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\120proto.h"\ ".\224.h"\ ".\ceatl.h"\ ".\cspdu.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\t38.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_T38_C=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\38.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_T38_C=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\38.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\t38proto.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_T38PR=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\38.h"\ ".\38proto.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_T38PR=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\38.h"\ ".\38proto.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\transports.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_TRANS=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tclib\pstun.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_TRANS=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\225.h"\ ".\225ras.h"\ ".\235.h"\ ".\235auth.h"\ ".\245.h"\ ".\261codec.h"\ ".\263codec.h"\ ".\323.h"\ ".\323caps.h"\ ".\323con.h"\ ".\323ep.h"\ ".\323pdu.h"\ ".\323pluginmgr.h"\ ".\323trans.h"\ ".\931.h"\ ".\ceatl.h"\ ".\ediafmt.h"\ ".\evfw.h"\ ".\hannels.h"\ ".\kclient.h"\ ".\msystemx.h"\ ".\palosp.h"\ ".\palplugin.h"\ ".\penh323buildopts.h"\ ".\ransports.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tclib\dtmf.h"\ ".\tclib\pssl.h"\ ".\tclib\pstun.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\u30codec.h"\ ".\ucpp.h"\ ".\uid.h"\ ".\vcctrl.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\x224.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_X224_=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\224.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\ys\socket.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_X224_=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ethsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\icmpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipdsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ipsock.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\ipxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\socket.h"\ "..\pwlib\INCLUDE\ptlib\unix\ptlib\spxsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\tcpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\udpsock.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\224.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\ethsock.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\icmpsock.h"\ ".\tlib\indchan.h"\ ".\tlib\ipdsock.h"\ ".\tlib\ipsock.h"\ ".\tlib\ipxsock.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\ethsock.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\icmpsock.h"\ ".\tlib\msos\ptlib\ipdsock.h"\ ".\tlib\msos\ptlib\ipsock.h"\ ".\tlib\msos\ptlib\ipxsock.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\socket.h"\ ".\tlib\msos\ptlib\spxsock.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\tcpsock.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\udpsock.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\qos.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\socket.h"\ ".\tlib\sockets.h"\ ".\tlib\sound.h"\ ".\tlib\spxsock.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\tcpsock.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\udpsock.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ ".\ys\socket.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\x880.cxx !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_X880_=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_X880_=\ "..\PWLib\Include\PtLib\MSOS\ptlib\tpipv6.h"\ "..\pwlib\include\ptlib\unix\ptlib\channel.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\conchan.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\config.h"\ "..\pwlib\include\ptlib\unix\ptlib\contain.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\critsec.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\dynalink.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\file.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\filepath.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\mutex.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pdirect.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\pprocess.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\ptime.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\semaphor.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\sfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\syncpoint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\textfile.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\thread.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timeint.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\timer.h"\ "..\PWLIB\INCLUDE\ptlib\unix\ptlib\video.h"\ ".\880.h"\ ".\ceatl.h"\ ".\evfw.h"\ ".\msystemx.h"\ ".\tbuildopts.h"\ ".\tclib\asnber.h"\ ".\tclib\asner.h"\ ".\tclib\asnper.h"\ ".\tclib\asnxer.h"\ ".\tdlibx.h"\ ".\tlib.h"\ ".\tlib\args.h"\ ".\tlib\array.h"\ ".\tlib\channel.h"\ ".\tlib\conchan.h"\ ".\tlib\config.h"\ ".\tlib\contain.h"\ ".\tlib\contain.inl"\ ".\tlib\critsec.h"\ ".\tlib\dict.h"\ ".\tlib\dynalink.h"\ ".\tlib\file.h"\ ".\tlib\filepath.h"\ ".\tlib\indchan.h"\ ".\tlib\lists.h"\ ".\tlib\msos\ptlib\channel.h"\ ".\tlib\msos\ptlib\conchan.h"\ ".\tlib\msos\ptlib\config.h"\ ".\tlib\msos\ptlib\contain.h"\ ".\tlib\msos\ptlib\critsec.h"\ ".\tlib\msos\ptlib\dynalink.h"\ ".\tlib\msos\ptlib\file.h"\ ".\tlib\msos\ptlib\filepath.h"\ ".\tlib\msos\ptlib\mutex.h"\ ".\tlib\msos\ptlib\pdirect.h"\ ".\tlib\msos\ptlib\pprocess.h"\ ".\tlib\msos\ptlib\ptime.h"\ ".\tlib\msos\ptlib\ptlib.inl"\ ".\tlib\msos\ptlib\semaphor.h"\ ".\tlib\msos\ptlib\sfile.h"\ ".\tlib\msos\ptlib\syncpoint.h"\ ".\tlib\msos\ptlib\textfile.h"\ ".\tlib\msos\ptlib\thread.h"\ ".\tlib\msos\ptlib\timeint.h"\ ".\tlib\msos\ptlib\timer.h"\ ".\tlib\msos\ptlib\video.h"\ ".\tlib\mutex.h"\ ".\tlib\notifier.h"\ ".\tlib\object.h"\ ".\tlib\osutil.inl"\ ".\tlib\pdirect.h"\ ".\tlib\pfactory.h"\ ".\tlib\plugin.h"\ ".\tlib\pluginmgr.h"\ ".\tlib\pprocess.h"\ ".\tlib\psharedptr.h"\ ".\tlib\pstring.h"\ ".\tlib\ptime.h"\ ".\tlib\semaphor.h"\ ".\tlib\sfile.h"\ ".\tlib\smartptr.h"\ ".\tlib\sound.h"\ ".\tlib\syncpoint.h"\ ".\tlib\syncthrd.h"\ ".\tlib\textfile.h"\ ".\tlib\thread.h"\ ".\tlib\timeint.h"\ ".\tlib\timer.h"\ ".\tlib\video.h"\ ".\tlib\videoio.h"\ ".\tlib\wince\time.h"\ ".\trstream.h"\ ".\ucpp.h"\ !ENDIF # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\include\channels.h # End Source File # Begin Source File SOURCE=.\include\codecs.h # End Source File # Begin Source File SOURCE=.\include\cu30codec.h # End Source File # Begin Source File SOURCE=.\include\dynacodec.h # End Source File # Begin Source File SOURCE=.\include\ffh263codec.h # End Source File # Begin Source File SOURCE=.\include\gccpdu.h # End Source File # Begin Source File SOURCE=.\include\gkclient.h # End Source File # Begin Source File SOURCE=.\include\gkserver.h # End Source File # Begin Source File SOURCE=.\include\guid.h # End Source File # Begin Source File SOURCE=.\include\h225.h # End Source File # Begin Source File SOURCE=.\include\h225ras.h # End Source File # Begin Source File SOURCE=.\include\h235.h # End Source File # Begin Source File SOURCE=.\include\h235auth.h # End Source File # Begin Source File SOURCE=.\include\h245.h # End Source File # Begin Source File SOURCE=.\include\h248.h # End Source File # Begin Source File SOURCE=.\include\h261codec.h # End Source File # Begin Source File SOURCE=.\include\h263codec.h # End Source File # Begin Source File SOURCE=.\include\h323.h # End Source File # Begin Source File SOURCE=.\include\h323annexg.h # End Source File # Begin Source File SOURCE=.\include\h323caps.h # End Source File # Begin Source File SOURCE=.\include\h323con.h # End Source File # Begin Source File SOURCE=.\include\h323ep.h # End Source File # Begin Source File SOURCE=.\include\h323neg.h # End Source File # Begin Source File SOURCE=.\include\h323pdu.h # End Source File # Begin Source File SOURCE=.\include\h323pluginmgr.h # End Source File # Begin Source File SOURCE=.\include\h323rtp.h # End Source File # Begin Source File SOURCE=.\include\h323t120.h # End Source File # Begin Source File SOURCE=.\include\h323trans.h # End Source File # Begin Source File SOURCE=.\include\h4501.h # End Source File # Begin Source File SOURCE=.\include\h45010.h # End Source File # Begin Source File SOURCE=.\include\h45011.h # End Source File # Begin Source File SOURCE=.\include\h4502.h # End Source File # Begin Source File SOURCE=.\include\h4503.h # End Source File # Begin Source File SOURCE=.\include\h4504.h # End Source File # Begin Source File SOURCE=.\include\h4505.h # End Source File # Begin Source File SOURCE=.\include\h4506.h # End Source File # Begin Source File SOURCE=.\include\h4507.h # End Source File # Begin Source File SOURCE=.\include\h4508.h # End Source File # Begin Source File SOURCE=.\include\h4509.h # End Source File # Begin Source File SOURCE=.\include\h450pdu.h # End Source File # Begin Source File SOURCE=.\include\h460.h # End Source File # Begin Source File SOURCE=.\include\h501.h # End Source File # Begin Source File SOURCE=.\include\h501pdu.h # End Source File # Begin Source File SOURCE=.\include\ixjDefs.h # End Source File # Begin Source File SOURCE=.\include\ixjidb.h # End Source File # Begin Source File SOURCE=.\include\ixjlid.h # End Source File # Begin Source File SOURCE=.\include\jitter.h # End Source File # Begin Source File SOURCE=.\include\lid.h # End Source File # Begin Source File SOURCE=.\include\mcspdu.h # End Source File # Begin Source File SOURCE=.\include\mediafmt.h # End Source File # Begin Source File SOURCE=.\include\opalosp.h # End Source File # Begin Source File SOURCE=.\include\opalplugin.h # End Source File # Begin Source File SOURCE=.\include\opalvxml.h # End Source File # Begin Source File SOURCE=.\include\opalwavfile.h # End Source File # Begin Source File SOURCE=.\include\openh323buildopts.h # End Source File # Begin Source File SOURCE=.\include\peclient.h # End Source File # Begin Source File SOURCE=.\include\q931.h # End Source File # Begin Source File SOURCE=.\include\QTIoctl.h # End Source File # Begin Source File SOURCE=.\include\rfc2190avcodec.h # End Source File # Begin Source File SOURCE=.\include\rfc2833.h # End Source File # Begin Source File SOURCE=.\include\rtp.h # End Source File # Begin Source File SOURCE=.\include\rtp2wav.h # End Source File # Begin Source File SOURCE=.\include\svcctrl.h # End Source File # Begin Source File SOURCE=.\include\t120proto.h # End Source File # Begin Source File SOURCE=.\include\t38.h # End Source File # Begin Source File SOURCE=.\include\t38proto.h # End Source File # Begin Source File SOURCE=.\include\transports.h # End Source File # Begin Source File SOURCE=.\include\x224.h # End Source File # Begin Source File SOURCE=.\include\x880.h # End Source File # End Group # Begin Group "Speex" # PROP Default_Filter "" # Begin Source File SOURCE=.\src\speex\libspeex\bits.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_BITS_=\ ".\src\speex\libspeex\misc.h"\ ".\src\speex\libspeex\speex_bits.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_BITS_=\ ".\src\speex\libspeex\misc.h"\ ".\src\speex\libspeex\speex_bits.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\cb_search.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_CB_SE=\ ".\src\speex\libspeex\cb_search.h"\ ".\src\speex\libspeex\filters.h"\ ".\src\speex\libspeex\misc.h"\ ".\src\speex\libspeex\speex_bits.h"\ ".\src\speex\libspeex\stack_alloc.h"\ ".\src\speex\libspeex\vq.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_CB_SE=\ ".\src\speex\libspeex\cb_search.h"\ ".\src\speex\libspeex\filters.h"\ ".\src\speex\libspeex\misc.h"\ ".\src\speex\libspeex\speex_bits.h"\ ".\src\speex\libspeex\stack_alloc.h"\ ".\src\speex\libspeex\vq.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\exc_10_16_table.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\exc_10_32_table.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\exc_20_32_table.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\exc_5_256_table.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\exc_5_64_table.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\exc_8_128_table.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\filters.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_FILTE=\ ".\src\speex\libspeex\filters.h"\ ".\src\speex\libspeex\filters_sse.h"\ ".\src\speex\libspeex\stack_alloc.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_FILTE=\ ".\src\speex\libspeex\filters.h"\ ".\src\speex\libspeex\filters_sse.h"\ ".\src\speex\libspeex\stack_alloc.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\gain_table.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\gain_table_lbr.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\hexc_10_32_table.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\hexc_table.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\high_lsp_tables.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\lpc.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_LPC_C=\ ".\src\speex\libspeex\lpc.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_LPC_C=\ ".\src\speex\libspeex\lpc.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\lsp.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_LSP_C=\ ".\src\speex\libspeex\lsp.h"\ ".\src\speex\libspeex\stack_alloc.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_LSP_C=\ ".\src\speex\libspeex\lsp.h"\ ".\src\speex\libspeex\stack_alloc.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\lsp_tables_nb.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\ltp.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_LTP_C=\ ".\src\speex\libspeex\filters.h"\ ".\src\speex\libspeex\ltp.h"\ ".\src\speex\libspeex\ltp_sse.h"\ ".\src\speex\libspeex\speex_bits.h"\ ".\src\speex\libspeex\stack_alloc.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_LTP_C=\ ".\src\speex\libspeex\filters.h"\ ".\src\speex\libspeex\ltp.h"\ ".\src\speex\libspeex\ltp_sse.h"\ ".\src\speex\libspeex\speex_bits.h"\ ".\src\speex\libspeex\stack_alloc.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\math_approx.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_MATH_=\ ".\src\speex\libspeex\math_approx.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_MATH_=\ ".\src\speex\libspeex\math_approx.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\misc.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_MISC_=\ ".\src\speex\libspeex\misc.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_MISC_=\ ".\src\speex\libspeex\misc.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\modes.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_MODES=\ ".\src\speex\libspeex\cb_search.h"\ ".\src\speex\libspeex\filters.h"\ ".\src\speex\libspeex\ltp.h"\ ".\src\speex\libspeex\misc.h"\ ".\src\speex\libspeex\modes.h"\ ".\src\speex\libspeex\nb_celp.h"\ ".\src\speex\libspeex\quant_lsp.h"\ ".\src\speex\libspeex\sb_celp.h"\ ".\src\speex\libspeex\speex.h"\ ".\src\speex\libspeex\speex_bits.h"\ ".\src\speex\libspeex\speex_callbacks.h"\ ".\src\speex\libspeex\vbr.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_MODES=\ ".\src\speex\libspeex\cb_search.h"\ ".\src\speex\libspeex\filters.h"\ ".\src\speex\libspeex\ltp.h"\ ".\src\speex\libspeex\misc.h"\ ".\src\speex\libspeex\modes.h"\ ".\src\speex\libspeex\nb_celp.h"\ ".\src\speex\libspeex\quant_lsp.h"\ ".\src\speex\libspeex\sb_celp.h"\ ".\src\speex\libspeex\speex.h"\ ".\src\speex\libspeex\speex_bits.h"\ ".\src\speex\libspeex\speex_callbacks.h"\ ".\src\speex\libspeex\vbr.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\nb_celp.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_NB_CE=\ ".\src\speex\libspeex\cb_search.h"\ ".\src\speex\libspeex\filters.h"\ ".\src\speex\libspeex\lpc.h"\ ".\src\speex\libspeex\lsp.h"\ ".\src\speex\libspeex\ltp.h"\ ".\src\speex\libspeex\math_approx.h"\ ".\src\speex\libspeex\misc.h"\ ".\src\speex\libspeex\modes.h"\ ".\src\speex\libspeex\nb_celp.h"\ ".\src\speex\libspeex\quant_lsp.h"\ ".\src\speex\libspeex\speex.h"\ ".\src\speex\libspeex\speex_bits.h"\ ".\src\speex\libspeex\speex_callbacks.h"\ ".\src\speex\libspeex\stack_alloc.h"\ ".\src\speex\libspeex\vbr.h"\ ".\src\speex\libspeex\vq.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_NB_CE=\ ".\src\speex\libspeex\cb_search.h"\ ".\src\speex\libspeex\filters.h"\ ".\src\speex\libspeex\lpc.h"\ ".\src\speex\libspeex\lsp.h"\ ".\src\speex\libspeex\ltp.h"\ ".\src\speex\libspeex\math_approx.h"\ ".\src\speex\libspeex\misc.h"\ ".\src\speex\libspeex\modes.h"\ ".\src\speex\libspeex\nb_celp.h"\ ".\src\speex\libspeex\quant_lsp.h"\ ".\src\speex\libspeex\speex.h"\ ".\src\speex\libspeex\speex_bits.h"\ ".\src\speex\libspeex\speex_callbacks.h"\ ".\src\speex\libspeex\stack_alloc.h"\ ".\src\speex\libspeex\vbr.h"\ ".\src\speex\libspeex\vq.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\quant_lsp.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_QUANT=\ ".\src\speex\libspeex\quant_lsp.h"\ ".\src\speex\libspeex\speex_bits.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_QUANT=\ ".\src\speex\libspeex\quant_lsp.h"\ ".\src\speex\libspeex\speex_bits.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\sb_celp.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_SB_CE=\ ".\src\speex\libspeex\cb_search.h"\ ".\src\speex\libspeex\filters.h"\ ".\src\speex\libspeex\lpc.h"\ ".\src\speex\libspeex\lsp.h"\ ".\src\speex\libspeex\ltp.h"\ ".\src\speex\libspeex\misc.h"\ ".\src\speex\libspeex\modes.h"\ ".\src\speex\libspeex\nb_celp.h"\ ".\src\speex\libspeex\quant_lsp.h"\ ".\src\speex\libspeex\sb_celp.h"\ ".\src\speex\libspeex\speex.h"\ ".\src\speex\libspeex\speex_bits.h"\ ".\src\speex\libspeex\speex_callbacks.h"\ ".\src\speex\libspeex\stack_alloc.h"\ ".\src\speex\libspeex\vbr.h"\ ".\src\speex\libspeex\vq.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_SB_CE=\ ".\src\speex\libspeex\cb_search.h"\ ".\src\speex\libspeex\filters.h"\ ".\src\speex\libspeex\lpc.h"\ ".\src\speex\libspeex\lsp.h"\ ".\src\speex\libspeex\ltp.h"\ ".\src\speex\libspeex\misc.h"\ ".\src\speex\libspeex\modes.h"\ ".\src\speex\libspeex\nb_celp.h"\ ".\src\speex\libspeex\quant_lsp.h"\ ".\src\speex\libspeex\sb_celp.h"\ ".\src\speex\libspeex\speex.h"\ ".\src\speex\libspeex\speex_bits.h"\ ".\src\speex\libspeex\speex_callbacks.h"\ ".\src\speex\libspeex\stack_alloc.h"\ ".\src\speex\libspeex\vbr.h"\ ".\src\speex\libspeex\vq.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\speex_callbacks.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_SPEEX=\ ".\src\speex\libspeex\misc.h"\ ".\src\speex\libspeex\speex.h"\ ".\src\speex\libspeex\speex_bits.h"\ ".\src\speex\libspeex\speex_callbacks.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_SPEEX=\ ".\src\speex\libspeex\misc.h"\ ".\src\speex\libspeex\speex.h"\ ".\src\speex\libspeex\speex_bits.h"\ ".\src\speex\libspeex\speex_callbacks.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\speex_header.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_SPEEX_=\ ".\src\speex\libspeex\misc.h"\ ".\src\speex\libspeex\speex.h"\ ".\src\speex\libspeex\speex_bits.h"\ ".\src\speex\libspeex\speex_header.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_SPEEX_=\ ".\src\speex\libspeex\misc.h"\ ".\src\speex\libspeex\speex.h"\ ".\src\speex\libspeex\speex_bits.h"\ ".\src\speex\libspeex\speex_header.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\stereo.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_STERE=\ ".\src\speex\libspeex\speex.h"\ ".\src\speex\libspeex\speex_bits.h"\ ".\src\speex\libspeex\speex_callbacks.h"\ ".\src\speex\libspeex\speex_stereo.h"\ ".\src\speex\libspeex\vq.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_STERE=\ ".\src\speex\libspeex\speex.h"\ ".\src\speex\libspeex\speex_bits.h"\ ".\src\speex\libspeex\speex_callbacks.h"\ ".\src\speex\libspeex\speex_stereo.h"\ ".\src\speex\libspeex\vq.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\vbr.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_VBR_C=\ ".\src\speex\libspeex\vbr.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_VBR_C=\ ".\src\speex\libspeex\vbr.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\speex\libspeex\vq.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_VQ_C9e=\ ".\src\speex\libspeex\vq.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_VQ_C9e=\ ".\src\speex\libspeex\vq.h"\ !ENDIF # End Source File # End Group # Begin Group "G726" # PROP Default_Filter "" # Begin Source File SOURCE=.\src\g726\g726_16.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_G726_=\ ".\src\g726\g72x.h"\ ".\src\g726\private.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_G726_=\ ".\src\g726\g72x.h"\ ".\src\g726\private.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\g726\g726_24.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_G726_2=\ ".\src\g726\g72x.h"\ ".\src\g726\private.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_G726_2=\ ".\src\g726\g72x.h"\ ".\src\g726\private.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\g726\g726_32.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_G726_3=\ ".\src\g726\g72x.h"\ ".\src\g726\private.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_G726_3=\ ".\src\g726\g72x.h"\ ".\src\g726\private.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\g726\g726_40.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_G726_4=\ ".\src\g726\g72x.h"\ ".\src\g726\private.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_G726_4=\ ".\src\g726\g72x.h"\ ".\src\g726\private.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\g726\g72x.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_G72X_=\ ".\src\g726\g72x.h"\ ".\src\g726\private.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_G72X_=\ ".\src\g726\g72x.h"\ ".\src\g726\private.h"\ !ENDIF # End Source File # End Group # Begin Group "iLBC" # PROP Default_Filter "" # Begin Source File SOURCE=.\src\iLBC\anaFilter.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_ANAFI=\ ".\src\iLBC\iLBC_define.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_ANAFI=\ ".\src\iLBC\iLBC_define.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\iLBC\constants.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_CONST=\ ".\src\iLBC\iLBC_define.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_CONST=\ ".\src\iLBC\iLBC_define.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\iLBC\createCB.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_CREAT=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\iLBC_define.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_CREAT=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\iLBC_define.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\iLBC\doCPLC.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_DOCPL=\ ".\src\iLBC\iLBC_define.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_DOCPL=\ ".\src\iLBC\iLBC_define.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\iLBC\enhancer.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_ENHAN=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\iLBC_define.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_ENHAN=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\iLBC_define.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\iLBC\filter.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_FILTER=\ ".\src\iLBC\iLBC_define.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_FILTER=\ ".\src\iLBC\iLBC_define.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\iLBC\FrameClassify.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_FRAME=\ ".\src\iLBC\iLBC_define.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_FRAME=\ ".\src\iLBC\iLBC_define.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\iLBC\gainquant.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_GAINQ=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\iLBC_define.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_GAINQ=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\iLBC_define.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\iLBC\getCBvec.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_GETCB=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\iLBC_define.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_GETCB=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\iLBC_define.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\iLBC\helpfun.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_HELPF=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\iLBC_define.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_HELPF=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\iLBC_define.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\iLBC\hpInput.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_HPINP=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\iLBC_define.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_HPINP=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\iLBC_define.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\iLBC\hpOutput.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_HPOUT=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\iLBC_define.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_HPOUT=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\iLBC_define.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\iLBC\iCBConstruct.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_ICBCO=\ ".\src\iLBC\gainquant.h"\ ".\src\iLBC\getCBvec.h"\ ".\src\iLBC\iLBC_define.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_ICBCO=\ ".\src\iLBC\gainquant.h"\ ".\src\iLBC\getCBvec.h"\ ".\src\iLBC\iLBC_define.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\iLBC\iCBSearch.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_ICBSE=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\createCB.h"\ ".\src\iLBC\gainquant.h"\ ".\src\iLBC\iLBC_define.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_ICBSE=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\createCB.h"\ ".\src\iLBC\gainquant.h"\ ".\src\iLBC\iLBC_define.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\iLBC\iLBC_decode.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_ILBC_=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\doCPLC.h"\ ".\src\iLBC\enhancer.h"\ ".\src\iLBC\helpfun.h"\ ".\src\iLBC\hpOutput.h"\ ".\src\iLBC\iCBConstruct.h"\ ".\src\iLBC\iLBC_define.h"\ ".\src\iLBC\LPCdecode.h"\ ".\src\iLBC\packing.h"\ ".\src\iLBC\StateConstructW.h"\ ".\src\iLBC\syntFilter.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_ILBC_=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\doCPLC.h"\ ".\src\iLBC\enhancer.h"\ ".\src\iLBC\helpfun.h"\ ".\src\iLBC\hpOutput.h"\ ".\src\iLBC\iCBConstruct.h"\ ".\src\iLBC\iLBC_define.h"\ ".\src\iLBC\LPCdecode.h"\ ".\src\iLBC\packing.h"\ ".\src\iLBC\StateConstructW.h"\ ".\src\iLBC\syntFilter.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\iLBC\iLBC_encode.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_ILBC_E=\ ".\src\iLBC\anaFilter.h"\ ".\src\iLBC\constants.h"\ ".\src\iLBC\FrameClassify.h"\ ".\src\iLBC\helpfun.h"\ ".\src\iLBC\hpInput.h"\ ".\src\iLBC\iCBConstruct.h"\ ".\src\iLBC\iCBSearch.h"\ ".\src\iLBC\iLBC_define.h"\ ".\src\iLBC\LPCencode.h"\ ".\src\iLBC\packing.h"\ ".\src\iLBC\StateConstructW.h"\ ".\src\iLBC\StateSearchW.h"\ ".\src\iLBC\syntFilter.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_ILBC_E=\ ".\src\iLBC\anaFilter.h"\ ".\src\iLBC\constants.h"\ ".\src\iLBC\FrameClassify.h"\ ".\src\iLBC\helpfun.h"\ ".\src\iLBC\hpInput.h"\ ".\src\iLBC\iCBConstruct.h"\ ".\src\iLBC\iCBSearch.h"\ ".\src\iLBC\iLBC_define.h"\ ".\src\iLBC\LPCencode.h"\ ".\src\iLBC\packing.h"\ ".\src\iLBC\StateConstructW.h"\ ".\src\iLBC\StateSearchW.h"\ ".\src\iLBC\syntFilter.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\iLBC\LPCdecode.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_LPCDE=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\helpfun.h"\ ".\src\iLBC\iLBC_define.h"\ ".\src\iLBC\lsf.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_LPCDE=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\helpfun.h"\ ".\src\iLBC\iLBC_define.h"\ ".\src\iLBC\lsf.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\iLBC\LPCencode.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_LPCEN=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\helpfun.h"\ ".\src\iLBC\iLBC_define.h"\ ".\src\iLBC\lsf.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_LPCEN=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\helpfun.h"\ ".\src\iLBC\iLBC_define.h"\ ".\src\iLBC\lsf.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\iLBC\lsf.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_LSF_C=\ ".\src\iLBC\iLBC_define.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_LSF_C=\ ".\src\iLBC\iLBC_define.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\iLBC\packing.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_PACKI=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\helpfun.h"\ ".\src\iLBC\iLBC_define.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_PACKI=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\helpfun.h"\ ".\src\iLBC\iLBC_define.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\iLBC\StateConstructW.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_STATE=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\iLBC_define.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_STATE=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\iLBC_define.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\iLBC\StateSearchW.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_STATES=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\helpfun.h"\ ".\src\iLBC\iLBC_define.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_STATES=\ ".\src\iLBC\constants.h"\ ".\src\iLBC\helpfun.h"\ ".\src\iLBC\iLBC_define.h"\ !ENDIF # End Source File # Begin Source File SOURCE=.\src\iLBC\syntFilter.c !IF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE SH4) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARM) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Release" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE x86em) Debug" !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE ARMV4) Debug" NODEP_CPP_SYNTF=\ ".\src\iLBC\iLBC_define.h"\ !ELSEIF "$(CFG)" == "Openh323libce - Win32 (WCE emulator) Debug" NODEP_CPP_SYNTF=\ ".\src\iLBC\iLBC_define.h"\ !ENDIF # End Source File # End Group # End Target # End Project h323plus/Openh323libce.vcw0000644000175000017500000000143210655704647014146 0ustar markmarkMicrosoft eMbedded Visual Tools Workspace File, Format Version 3.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "Openh323libce"=.\Openh323libce.vcp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name pwlibce End Project Dependency }}} ############################################################################### Project: "pwlibce"=..\pwlib\pwlibce.vcp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### h323plus/h323plus_2005.vcproj0000644000175000017500000021622311027336200014365 0ustar markmark h323plus/videonotes.rtf0000644000175000017500000006141710655704650014024 0ustar markmark{\rtf1\ansi\deff0\adeflang1025 {\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman{\*\falt Thorndale};}{\f1\froman\fprq2\fcharset0 Times New Roman{\*\falt Thorndale};}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\froman\fprq2\fcharset0 Times New Roman;}{\f4\fswiss\fprq2\fcharset0 Arial{\*\falt Albany};}{\f5\fnil\fprq0\fcharset0 Courier New;}{\f6\fmodern\fprq1\fcharset0 Courier New;}{\f7\fnil\fprq2\fcharset0 HG Mincho Light J;}{\f8\fnil\fprq2\fcharset0 Arial Unicode MS;}} {\colortbl;\red0\green0\blue0;\red128\green128\blue128;} {\stylesheet{\s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\snext1 Default;} {\s2\sa120\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\sbasedon1\snext2 Text body;} {\s3\sb240\sa120\keepn\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs28\langfe255\loch\f4\fs28\lang255\sbasedon1\snext2 Heading;} {\s4\sb240\sa60\keepn\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs28\langfe255\ab\loch\f2\fs28\lang255\b\sbasedon1\snext1{\*\soutlvl0} Heading 1;} {\s5\sb240\sa60\keepn\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs24\langfe255\ai\ab\loch\f2\fs24\lang255\i\b\sbasedon1\snext1{\*\soutlvl1} Heading 2;} {\s6\sb240\sa60\cf0\qc\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs32\langfe255\ab\loch\f2\fs32\lang255\b\sbasedon1\snext7 Title;} {\s7\sb240\sa120\keepn\cf0\qc\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs28\langfe255\ai\loch\f4\fs28\lang255\i\sbasedon3\snext2 Subtitle;} {\*\cs9\cf1\rtlch\af8\afs24\lang255\ltrch\dbch\af7\afs24\langfe255\loch\f0\fs24\lang1031 WW-Absatz-Standardschriftart;} {\*\cs10\cf1\rtlch\af8\afs24\lang255\ltrch\dbch\af7\afs24\langfe255\loch\f0\fs24\lang1031 WW-Default Paragraph Font;} }{\*\listtable{\list\listtemplateid1 {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'00.;}{\levelnumbers\'01;}\fi-360\li360} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'01.;}{\levelnumbers\'01;}\fi-283\li567} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'02.;}{\levelnumbers\'01;}\fi-283\li850} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'03.;}{\levelnumbers\'01;}\fi-283\li1134} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'04.;}{\levelnumbers\'01;}\fi-283\li1417} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'05.;}{\levelnumbers\'01;}\fi-283\li1701} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'06.;}{\levelnumbers\'01;}\fi-283\li1984} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'07.;}{\levelnumbers\'01;}\fi-283\li2268} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'08.;}{\levelnumbers\'01;}\fi-283\li2551} {\*\soutlvl{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'09.;}{\levelnumbers\'01;}\fi-283\li2835}}\listid1} {\list\listtemplateid2 {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'00.;}{\levelnumbers\'01;}\fi-360\li360} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'01.;}{\levelnumbers\'01;}\fi-283\li567} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'02.;}{\levelnumbers\'01;}\fi-283\li850} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'03.;}{\levelnumbers\'01;}\fi-283\li1134} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'04.;}{\levelnumbers\'01;}\fi-283\li1417} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'05.;}{\levelnumbers\'01;}\fi-283\li1701} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'06.;}{\levelnumbers\'01;}\fi-283\li1984} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'07.;}{\levelnumbers\'01;}\fi-283\li2268} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'08.;}{\levelnumbers\'01;}\fi-283\li2551} {\*\soutlvl{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'09.;}{\levelnumbers\'01;}\fi-283\li2835}}\listid2} {\list\listtemplateid3 {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'00.;}{\levelnumbers\'01;}\fi-360\li360} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'01.;}{\levelnumbers\'01;}\fi-283\li567} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'02.;}{\levelnumbers\'01;}\fi-283\li850} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'03.;}{\levelnumbers\'01;}\fi-283\li1134} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'04.;}{\levelnumbers\'01;}\fi-283\li1417} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'05.;}{\levelnumbers\'01;}\fi-283\li1701} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'06.;}{\levelnumbers\'01;}\fi-283\li1984} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'07.;}{\levelnumbers\'01;}\fi-283\li2268} {\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'08.;}{\levelnumbers\'01;}\fi-283\li2551} {\*\soutlvl{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'09.;}{\levelnumbers\'01;}\fi-283\li2835}}\listid3} }{\listoverridetable{\listoverride\listid1\listoverridecount0\ls0}{\listoverride\listid2\listoverridecount0\ls1}{\listoverride\listid3\listoverridecount0\ls2}} {\info{\title Controlling video bit rate and video encode quality}{\author Walter H. Whitlock}{\creatim\yr2002\mo4\dy11\hr12\min21}{\operator Walter Whitlock}{\revtim\yr2002\mo12\dy14\hr18\min7}{\printim\yr1601\mo1\dy1\hr0\min0}{\comment StarWriter}{\vern6410}}\deftab720 {\*\pgdsctbl {\pgdsc0\pgdscuse195\pgwsxn12240\pghsxn15840\marglsxn1440\margrsxn1440\margtsxn1440\margbsxn1440\pgdscnxt0 Default;}} \paperh15840\paperw12240\margl1440\margr1440\margt1440\margb1440\sectd\sbknone\pgwsxn12240\pghsxn15840\marglsxn1440\margrsxn1440\margtsxn1440\margbsxn1440\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc \pard\plain \s6\sb240\sa60\cf0\qc\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs32\langfe255\ab\loch\f2\fs32\lang255\b\sa60\qc {\ltrch\loch\f2 Controlling video bit rate and video encode quality} \par \pard\plain \sb240\sa60\keepn\cf0\f2\fs28\lang255\b\f3\fs28\b \s4\sb240\sa60\keepn\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs28\langfe255\ab\loch\f2\fs28\lang255\b\sb240\sa60\keepn {\ltrch\loch\f2 Introduction} \par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255 {\ltrch\loch\f3 Controlling video bit rate and adjusting or controlling the quality of encoded video are two separate but related functions that the video codec can attempt to manage in order to achieve better quality of service. } \par \pard\plain \sb240\sa60\keepn\cf0\f2\fs28\lang255\b\f3\fs28\b \s4\sb240\sa60\keepn\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs28\langfe255\ab\loch\f2\fs28\lang255\b\sb240\sa60\keepn {\ltrch\loch\f2 Controlling video bit rate} \par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255 {\ltrch\loch\f3 Every channel has a bit rate limit. However, in many situations, the channel\rquote s bit rate limit is sufficiently above the codec bit rate requirement that the effects of the limited bit rate can be ignored. One just assumes, or makes it a requirement, that the channel will accept bits for transmission at whatever rate the codec wishes to send them. This is the default assumption for both audio and video channels in openH323. } \par \par {\ltrch\loch\f3 When the channel bit rate limit is, in fact, close to or below the codec sending bit rate, the usual consequence is lost or dropped packets. That is, packets are sent from the source end point but never arrive at the destination end point. The channel is limiting bit rate by dropping packets. For both audio and video, the effect of dropped packets is to degrade audio or video quality. Depending on the particular encoding audio codec, the effect of a few dropped packets can range from insignificant and u nnoticed to very significant with very noticeable degrading of audio quality. For video, the effect is similar depending on the particular encoding codec. However, video information is generally not as important for effective communication as audio. Con sequently, the effect of dropped video packets can usually be ignored whereas something must be done to minimize dropped audio packets. } \par \par {\ltrch\loch\f3 Why control the video bit rate if dropped video packets are not especially important? The problem is that audio and video packets will usually pass through the same router when using an IP based channel. If this total bit rate exceeds the IP channel bit rate limit and the router drops packets, it usually does not distinguish between audio and video packets. Consequently, audio packets can be dropped because the video bit rate exceeds the router bit rate limit. Under this condition, the degraded audio q uality can essentially make the channel unusable for communication. } \par \par {\ltrch\loch\f3 The solution to this problem is to manage the total bit rate and keep it from exceeding some maximum. Since video data generally uses a much larger fraction of the IP based channel capacity than audio data, the total bit rate can be managed effectively by controlling only the video channel bit rate. } \par \par {\ltrch\loch\f3 The easiest way to control video channel bit rate is to insert a variable delay between transmitting each packet. The delay time is calculated to ensure that the next packet will not be transmitted until sufficient time has elapsed that the average bit ra te (bits in packet / time before next packet is transmitted) does not exceed the bit rate control target for the channel. This is the approach taken when video bit rate control is enabled in openH323. The channel is limiting bit rate by inserting additio nal time for transmission. Note that if one is clever about it, useful work can still be done during the time interval between packets. } \par \par {\ltrch\loch\f3 If nothing else is done, the immediate consequence of controlling the video bit rate at less than the channel capacity is a drop in video frame rate. Depending on how low the target video bit rate has been set, the frame rate could easily drop below 1 fra me per second. Users, however, will generally prefer a higher frame rate, even if the video quality is degraded to achieve it. This leads naturally into the following discussion about reducing video quality in order to gain a faster frame rate. } \par \pard\plain \sb240\sa60\keepn\cf0\f2\fs28\lang255\b\f3\fs28\b \s4\sb240\sa60\keepn\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs28\langfe255\ab\loch\f2\fs28\lang255\b\sb240\sa60\keepn {\ltrch\loch\f2 Controlling video encode quality } \par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255 {\ltrch\loch\f3 As discussed previously, the need for controlling video encode quality arises when the video bit rate is limited or controlled in a way other than simply dropping packets. If there is no video bit rate limit, there really is no need to control video encod e quality. The encoder can run at maximum encode quality all the time. } \par \par {\ltrch\loch\f3 There are three parameters that control video quality in the H261 codec, frame rate of delivered video, background fill rate, and quantization level used during encode (q, varies from 1 to 31). With a fixed video bit rate, it is not possible to vary these three parameters arbitrarily. Instead, one must find a set of values which results in a video bit rate which both satisfies the target video bit rate requirement and which also maximizes the perceived video quality of the result. This can be thought of as a constrained optimization problem, but note that the solution only applies to one particular frame of video input. In general, the optimum encoding parameters will change with every video frame. } \par \par {\ltrch\loch\f3 The OpenH323 H261codec uses the following strategy in attempting to achieve maximum perceived video quality. This strategy is simple and no doubt can be improved. Note that this strategy is only active if video bit rate control is active. } \par \par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 1.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls2 {\ltrch\loch\f3 The video codec measures and keeps track of the average bit rate achieved while transmitting. This ensures that the codec becomes aware of changes in the actual video bit rate through the channel, no matter what causes these changes. It could be due to a ctive bit rate control by the codec or it could be due to some other reason. } \par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 2.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls2 {\ltrch\loch\f3 The video codec calculates a target value for frame size in bits per frame based on the user requested video frame rate and the measured average video channel bit rate. } \par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 3.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls2 {\ltrch\loch\f3 Before encoding a new frame, the codec calculates the difference between the size of the previous frame and the target frame size. This difference is used to adjust the encode quality up or down in attempt to achieve the target frame size for the next enc oded frame. } \par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255 \par {\ltrch\loch\f3 After encoding, the actual frame size will hardly ever be equal to the target frame size. Transmitting this frame causes a short term variation in the video frame rate. In summary, the encode strategy} \par \par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 1.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls1 {\ltrch\loch\f3 accepts short term variations in the frame rate of delivered video, } \par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 2.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls1 {\ltrch\loch\f3 adjusts video encode quality in an attempt to keep the frame rate close to a user set target frame rate, } \par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 3.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls1 {\ltrch\loch\f3 does not adjust the background fill rate. } \par \pard\plain \sb240\sa60\keepn\cf0\f2\fs28\lang255\b\f3\fs28\b \s4\sb240\sa60\keepn\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs28\langfe255\ab\loch\f2\fs28\lang255\b {\ltrch\loch\f2 Complications and Open issues} \par \pard\plain \sb240\sa60\keepn\cf0\f2\lang255\i\b\f3\i\b \s5\sb240\sa60\keepn\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs24\langfe255\ai\ab\loch\f2\fs24\lang255\i\b {\ltrch\loch\f2 Frame rate control by video grabber} \par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255 {\ltrch\loch\f3 The strategy for controlling video encode quality makes the implicit assumption that decreasing the number of bits per frame will result in an increase in the frame rate. This assumption does not hold true if the frame rate is limited or controlled by som e other mechanism. Specifically, the frame rate could be controlled by the video frame grabber. } \par \par {\ltrch\loch\f3 If the user requested video frame send rate is set higher than the frame rate from the video grabber, the video codec will reduce encode quality in an attempt to decrease the size of each encoded frame and increase the transmitted frame rate. However, the average bit rate achieved while transmitting decreases but the frame rate stays the same (because it is controlled by the video grabber). The codec again decreases the encode quality, the encoded frame size decreases, the average bit rate decreases some more, but the frame rate stays the same. This process continues until the encode quality cannot be decreased further and poor quality video frames are transmitted at the grabber determined frame rate. There is plenty of capacity available in the video ch annel but it is not being used because the codec is measuring and adjusting to a low average channel bit rated due to the control exerted by the video grabber. } \par \par {\ltrch\loch\f3 The problem can be illustrated by viewing one of the moving test patterns and setting a video send rate above 10 frames per second. The test pattern generator limits the frame rate to 10 FPS. } \par \par {\ltrch\loch\f3 The solution is to adjust the way the video codec measures and keeps track of the average bit rate achieved while transmitting so that it ignores any time that passes while the encode thread is blocked by the video grabbing function. This is done by recor ding a time stamp before and after the call to grab a video frame (including time to pre-encode the frame) and subtracting the elapsed time from the total time to transmit that frame. That way, the measured video bit rate measurement is not affected by th e time spent while blocked. } \par \pard\plain \sb240\sa60\keepn\cf0\f2\lang255\i\b\f3\i\b \s5\sb240\sa60\keepn\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs24\langfe255\ai\ab\loch\f2\fs24\lang255\i\b {\ltrch\loch\f2 Effective averaging time for bit rate control} \par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255 {\ltrch\loch\f3 As described earlier, video bit rate control is accomplished by inserting a variable delay between transmission of each video packet. The delay time is calculated to ensure that the next packet will not be sent until sufficient time has elapsed that the p acket bit rate (bits in packet / time before next packet is transmitted) does not exceed the bit rate control target for the channel. This approach effectively controls the average bit rate over the time period required for transmission of one video packe t, or the packet average bit rate. The actual bit rate carried by the channel is most likely much higher during the early part of the packet transmission period followed by a zero bit rate for the later part of the transmission period. } \par \par {\ltrch\loch\f3 For time periods longer that the packet transmission period, the average bit rate will always be equal to or less than the packet average bit rate. } \par \par {\ltrch\loch\f3 Usually it is desirable to control average bit rate using a time period longer than the packet transmission time. } \par \pard\plain \sb240\sa60\keepn\cf0\f2\fs28\lang255\b\f3\fs28\b \s4\sb240\sa60\keepn\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs28\langfe255\ab\loch\f2\fs28\lang255\b {\ltrch\loch\f2 Implementation details} \par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255 {\ltrch\loch\f3 Control variables and default behavior} \par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 1.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls0{\ltrch\loch\f3{\ul targetFrameTimeMs} - contains the target time interval between video frames, in milliseconds, used when video encode quality control is active. The reciprocal of frame rate is used so that frame rates below 1 frame per second can be requested without requi ring a floating point data type. This variable is initialized to 167 ms corresponding to 6 frames per second. } \par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 2.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls0{\ltrch\loch\f3{\ul bitRateHighLimit} - contains the maximum transmitting bit rate, in kbps where 1 kbps = 1024 bits per second, used when video bit rate control is active. This variable is initialized to 2048 kbps. } \par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 3.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls0{\ltrch\loch\f3{\ul videoBitRateControlModes} - contains the currently active video control modes. This variable is initialized to none. Video bit rate control and adaptive video quality control can be enabled or disabled independently. } \par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 4.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls0{\ltrch\loch\f3{\ul videoQuality} - contains the current video quality parameter which can take values between 1 (best video quality) and 31 (worst quality). This variable is initialized to 9. When video encode quality control is active, the value will adjusted between video QMin and videoQMax by the quality control algorithm. } \par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 5.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls0{\ltrch\loch\f3{\ul videoQMin} - contains the minimum value allowed for videoQuality. This variable is initialized to 1. } \par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 6.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls0{\ltrch\loch\f3{\ul videoQMax} - contains the maximum value allowed for videoQuality. This variable is initialized to 24. } \par \pard\plain \sb240\sa60\keepn\cf0\f2\fs28\lang255\b\f3\fs28\b \s4\sb240\sa60\keepn\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs28\langfe255\ab\loch\f2\fs28\lang255\b {\ltrch\loch\f2 Use with ohPhone } \par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255 {\ltrch\loch\f3 The following command line switches have either been added to ohphone or are used differently from before: } \par \par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\rtlch\af5\afs20\ltrch\dbch\af5\afs20\loch\f5\fs16\lang1033 {\ltrch\loch\f5 --videotxminquality n : Select video quality lower limit,(def 1). 1(best)<=n<=31} \par {\ltrch\loch\f5 A value of 4 works best for NetMeeting} \par {\ltrch\loch\f5 --videosendfps n : Target minimum number of video frames sent per sec 0.001<6(def)<30} \par {\ltrch\loch\f5 --videobitrate n : Enable bitrate control. 16< 256(def) <2048 kbit/s (net bw)} \par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\rtlch\af5\afs20\ltrch\dbch\af5\afs20\loch\f3\fs20\lang1033 \par {\ltrch\loch\f3 For example, the following command line,} \par \par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\rtlch\af5\afs20\ltrch\dbch\af5\afs20\loch\f6\fs16\lang1033 {\ltrch\loch\f6 ohphone -nlttt -o trace.txt --videodevice fake --videoinput 2 --videoreceive sdl --videobitrate 32 --videosize large \endash -videotest} \par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\rtlch\af5\afs20\ltrch\dbch\af5\afs20\loch\f3\fs20\lang1033 \par {\ltrch\loch\f3 shows a large bouncing squares test pattern with a 32 kbps bit rate limit. The video quality is degraded (higher q number) in an attempt to maintain at least 6 video frames per second. } \par \par {\ltrch\loch\f3 To run ohphone with netmeeting, use the switch command line \ldblquote {\fs16\f5 --videotxminquality n}\rdblquote . This will ensure that video quality never falls below 4. Netmeeting has problems displaying video at qualities better (lower) than 4. } \par \par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\rtlch\af5\afs20\ltrch\dbch\af5\afs20\loch\f6\fs16\lang1033 {\ltrch\loch\f6 ohphone -fTnl --videodevice 0 --videoreceive sdl {\f5 --videotxminquality n }--videobitrate 320 --videosize large } \par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\ltrch\loch\fs16 \par }h323plus/h323plus_2008.vcproj0000644000175000017500000013165711307347060014406 0ustar markmark h323plus/configure.ac0000644000175000017500000004560611711763145013416 0ustar markmarkAC_INIT(include/h323.h) AC_PROG_CXX AC_HEADER_STDC dnl this must be updated for every minor revision, and for dnl builds when and as necessary REQUIRED_PTLIB_MAJOR=2 REQUIRED_PTLIB_MINOR=6 REQUIRED_PTLIB_BUILD=4 dnl ######################################################################## dnl set the OpenH323 directory to the current directory OPENH323DIR=`pwd` AC_SUBST(OPENH323DIR) dnl ######################################################################## dnl set the PREFIX accordingly if test "x$prefix" = "xNONE"; then INSTALLPREFIX="/usr/local" else INSTALLPREFIX="${prefix}" fi AC_SUBST(INSTALLPREFIX) dnl ######################################################################## dnl set LIBDIR accordingly LIBDIR="${libdir}" AC_SUBST(LIBDIR) dnl ######################################################################## dnl extract the OpenH323 version dnl MSWIN_DISPLAY version,Version dnl MSWIN_VERSION version,OPENH323_MAJOR=MAJOR_VERSION dnl MSWIN_VERSION version,OPENH323_MINOR=MINOR_VERSION dnl MSWIN_VERSION version,OPENH323_BUILD=BUILD_NUMBER dnl MSWIN_VERSION version,OPENH323_VERSION=VERSION MAJOR_VERSION=`cat ${OPENH323DIR}/version.h | grep MAJOR_VERSION | cut -f3 -d' '` MINOR_VERSION=`cat ${OPENH323DIR}/version.h | grep MINOR_VERSION | cut -f3 -d' '` BUILD_NUMBER=`cat ${OPENH323DIR}/version.h | grep BUILD_NUMBER | cut -f3 -d' '` OPENH323_VERSION="${MAJOR_VERSION}.${MINOR_VERSION}.${BUILD_NUMBER}" AC_SUBST(MAJOR_VERSION) AC_SUBST(MINOR_VERSION) AC_SUBST(BUILD_NUMBER) AC_SUBST(OPENH323_VERSION) AC_SUBST(MAJOR_VERSION, $MAJOR_VERSION) AC_SUBST(MINOR_VERSION, $MINOR_VERSION) AC_SUBST(BUILD_NUMBER, $BUILD_NUMBER) echo "OpenH323 version is ${OPENH323_VERSION}" AC_DEFINE_UNQUOTED(OPENH323_MAJOR, ${MAJOR_VERSION}) AC_DEFINE_UNQUOTED(OPENH323_MINOR, ${MINOR_VERSION}) AC_DEFINE_UNQUOTED(OPENH323_BUILD, ${BUILD_NUMBER}) AC_DEFINE_UNQUOTED(OPENH323_VERSION, "$OPENH323_VERSION") dnl ######################################################################## dnl look for ptlib, use a preference order of explicit PTLIBDIR, directory dnl at same level, home directory, /usr/local or /usr. if test "${PTLIBDIR:-unset}" != "unset" ; then AC_CHECK_HEADER(${PTLIBDIR}/version.h, HAS_PTLIB=1) fi if test "${HAS_PTLIB:-unset}" = "unset" ; then AC_CHECK_HEADER(${OPENH323DIR}/../ptlib/version.h, HAS_PTLIB=1) if test "${HAS_PTLIB:-unset}" != "unset" ; then PTLIBDIR="${OPENH323DIR}/../ptlib" else AC_CHECK_HEADER(${HOME}/ptlib/version.h, HAS_PTLIB=1) if test "${HAS_PTLIB:-unset}" != "unset" ; then PTLIBDIR="${HOME}/ptlib" else if test "${HAS_PTLIB:-unset}" = "unset" ; then AC_PATH_PROG(PTLIB_CONFIG, ptlib-config, , /usr/local/bin) else if test "${PTLIB_CONFIG:-unset}" = "unset" ; then AC_PATH_PROG(PTLIB_CONFIG, ptlib-config, , /usr/share/ptlib/make/) else if test "${PTLIB_CONFIG:-unset}" = "unset" ; then AC_PATH_PROG(PTLIB_CONFIG, ptlib-config, , /usr/share/ptlib/make/) fi fi fi fi fi fi if test "${PTLIB_CONFIG:-unset}" != "unset" ; then PTLIBDIR=`$PTLIB_CONFIG --prefix` HAS_PTLIB=1 fi if test "${HAS_PTLIB:-unset}" = "unset" ; then echo "Cannot find ptlib - please install or set PTLIBDIR and try again" exit fi if test "x$PTLIBDIR" = "x/usr" -o "x$PTLIBDIR" = "x/usr/"; then PTLIBDIR="/usr/share/ptlib/" fi if test "x$PTLIBDIR" = "x/usr/local" -o "x$PTLIBDIR" = "x/usr/"; then PTLIBDIR="/usr/local/share/ptlib/" fi echo "PTLib prefix set to.... $PTLIBDIR" if test "${PTLIB_CONFIG:-unset}" != "unset" ; then PTVERSION=`$PTLIB_CONFIG --version` PT_MAJOR_VERSION=`echo $PTVERSION | cut -d'.' -f1` PT_MINOR_VERSION=`echo $PTVERSION | cut -d'.' -f2` PT_BUILD_NUMBER=`echo $PTVERSION | cut -d'.' -f3` else PT_MAJOR_VERSION=`cat ${PTLIBDIR}/version.h | grep MAJOR_VERSION | cut -f3 -d' '` PT_MINOR_VERSION=`cat ${PTLIBDIR}/version.h | grep MINOR_VERSION | cut -f3 -d' '` PT_BUILD_NUMBER=`cat ${PTLIBDIR}/version.h | grep BUILD_NUMBER | cut -f3 -d' '` PTVERSION="${PT_MAJOR_VERSION}.${PT_MINOR_VERSION}.${PT_BUILD_NUMBER}" fi AC_ARG_ENABLE(versioncheck, [ --disable-versioncheck disable PTLib version check], PTLIB_VERSION_CHECK=$enableval) AC_MSG_CHECKING(Checking PTLib version ${PTVERSION}) if test "${PTLIB_VERSION_CHECK}x" = "nox" ; then AC_MSG_RESULT(check disabled) else if test $PT_MAJOR_VERSION -lt $REQUIRED_PTLIB_MAJOR ; then AC_MSG_RESULT(Major version less than required $REQUIRED_PTLIB_MAJOR) exit 1 fi if test $PT_MAJOR_VERSION -eq $REQUIRED_PTLIB_MAJOR ; then if test $PT_MINOR_VERSION -lt $REQUIRED_PTLIB_MINOR ; then AC_MSG_RESULT(Minor version less than required $REQUIRED_PTLIB_MINOR) exit 1 fi fi if test $PT_MAJOR_VERSION -eq $REQUIRED_PTLIB_MAJOR ; then if test $PT_MINOR_VERSION -eq $REQUIRED_PTLIB_MINOR ; then if test $PT_BUILD_NUMBER -lt $REQUIRED_PTLIB_BUILD ; then AC_MSG_RESULT(Build version less than required $REQUIRED_PTLIB_BUILD) exit 1 fi fi fi AC_MSG_RESULT(ok) fi AC_SUBST(PTLIBDIR) dnl ######################################################################## dnl check for setting minimum size AC_ARG_ENABLE(minsize, [ --enable-minsize minimise the size of the lib by disabling least used options]) dnl these are the default configure settings default_audio=yes default_video=yes default_asntracing=yes default_h450=yes default_h501=yes default_t38=yes default_h224=yes default_h230=yes default_h235=no default_h239=yes default_h248=yes default_h249=yes default_h341=yes default_h350=yes default_h460=yes default_h4609=yes default_h46017=no default_h46018=yes default_h46019m=no default_h46023=yes default_h460p=yes default_t120=yes default_gnugk=yes default_file=yes if test "${enable_minsize}x" = "yesx" ; then default_audio=yes default_video=yes default_asntracing=no default_h450=no default_h501=no default_t38=no default_h224=no default_h230=no default_h235=no default_h239=no default_h248=no default_h249=no default_h341=no default_h350=no default_h460=no default_h4609=no default_h46017=no default_h46018=no default_h46019m=no default_h46023=no default_hh460p=no default_t120=no default_gnugk=no default_file=no fi dnl ######################################################################## dnl check for disbling ASN tracing AC_ARG_ENABLE(asntracing, [ --disable-asntracing disable ASN tracing]) if test "${enable_asntracing}z" = "z" ; then enable_asntracing=$default_asntracing fi if test "$enable_asntracing" = "no" ; then AC_MSG_NOTICE(Disabling ASN tracing) AC_SUBST(NOTRACE, 1) fi dnl ######################################################################## dnl Enable audio subsystems dnl MSWIN_DISPLAY audio,Audio Software Codecs dnl MSWIN_DEFINE audio,H323_AUDIO_CODECS AC_ARG_ENABLE(audio, [ --disable-audio disable audio codecs]) if test "${enable_audio}z" = "z" ; then enable_audio=yes fi if test "$enable_audio" = "no" ; then AC_MSG_NOTICE(Disabling audio functions) AC_SUBST(NOAUDIOCODECS, 1) else AC_DEFINE(H323_AUDIO_CODECS, 1) AC_ARG_ENABLE(embeddedgsm, [ --enable-embeddedgsm embed GSM codec via static linking], EMBEDDED_GSM=$enableval) if test "${EMBEDDED_GSM}x" != "x" ; then AC_MSG_NOTICE(Embedding GSM codec) LDFLAGS="$LDFLAGS -L${OPENH323DIR}/plugins/audio/GSM0610" ENDLDLIBS="$ENDLDLIBS -lgsm0610_audio_s" AC_CHECK_LIB(gsm, gsm_create, GSM=1) if test "x$GSM" != "x"; then ENDLDLIBS="$ENDLDLIBS -lgsm" fi AC_DEFINE(H323_EMBEDDED_GSM) fi fi dnl ######################################################################## dnl Enable video subsystems dnl MSWIN_DISPLAY video,Video Software Codecs dnl MSWIN_DEFINE video,H323_VIDEO AC_ARG_ENABLE(video, [ --disable-video disable video functions]) if test "${enable_video}z" = "z" ; then enable_video=$default_video fi if test "$enable_video" = "no" ; then AC_MSG_NOTICE(Disabling video functions) AC_SUBST(NOVIDEO, 1) else AC_DEFINE(H323_VIDEO, 1) fi dnl ######################################################################## dnl check for disabling H.224 dnl MSWIN_DISPLAY h224,H.224 dnl MSWIN_DEFINE h224,H323_H224 AC_ARG_ENABLE(h224, [ --disable-h224 disable H.224]) if test "${enable_h224}x" = "x" ; then enable_h224=$default_h224 fi if test "$enable_h224" = "yes" ; then H323_H224=1 AC_DEFINE(H323_H224, 1) else H323_H224= AC_MSG_NOTICE(Disabling H.224) fi AC_SUBST(H323_H224) dnl ######################################################################## dnl check for disabling H.230 dnl MSWIN_DISPLAY h230,H.230 dnl MSWIN_DEFINE h230,H323_H230 AC_ARG_ENABLE(h230, [ --disable-h230 disable H.230]) if test "${enable_h230}x" = "x" ; then enable_h230=$default_h230 fi if test "$enable_h230" = "yes" ; then H323_H230=1 AC_DEFINE(H323_H230, 1) else H323_H230= AC_MSG_NOTICE(Disabling H.230) fi AC_SUBST(H323_H230) dnl ######################################################################## dnl check for en/disabling H.235 dnl MSWIN_DISPLAY h235,H.235.6 dnl MSWIN_DEFINE h235,H323_H235X AC_ARG_ENABLE(h235, [ --disable-h235 disable H.235.6]) if test "${enable_h235}x" = "x" ; then enable_h235=$default_h235 fi if test "$enable_h235" = "yes" ; then H323_H235=1 AC_DEFINE(H323_H235, 1) else H323_H235= AC_MSG_NOTICE(Disabling H.235.6) fi AC_SUBST(H323_H235) dnl ######################################################################## dnl check for disabling H.239 dnl MSWIN_DISPLAY h239,H.239 dnl MSWIN_DEFINE h239,H323_H239 AC_ARG_ENABLE(h239, [ --disable-h239 disable H.239]) if test "${enable_h239}x" = "x" ; then enable_h239=$default_h239 fi if test "$enable_h239" = "yes" ; then H323_H239=1 AC_DEFINE(H323_H239, 1) else H323_H239= AC_MSG_NOTICE(Disabling H.239) fi AC_SUBST(H323_H239) dnl ######################################################################## dnl check for disabling H.248 dnl MSWIN_DISPLAY h248,H.248 dnl MSWIN_DEFINE h248,H323_H248 AC_ARG_ENABLE(h248, [ --disable-h248 enable H.248]) if test "${enable_h248}x" = "x" ; then enable_h248=$default_h248 fi if test "$enable_h248" = "yes" ; then H323_H248=1 AC_DEFINE(H323_H248, 1) else H323_H248= AC_MSG_NOTICE(Disabling H.248) fi AC_SUBST(H323_H248) dnl ######################################################################## dnl check for disabling H.249 dnl MSWIN_DISPLAY h249,H.249 dnl MSWIN_DEFINE h249,H323_H249 AC_ARG_ENABLE(h249, [ --disable-h249 disable H.249]) if test "${enable_h249}x" = "x" ; then enable_h249=$default_h249 fi if test "$enable_h249" = "yes" ; then H323_H249=1 AC_DEFINE(H323_H249, 1) else H323_H249= AC_MSG_NOTICE(Disabling H.249) fi AC_SUBST(H323_H249) dnl ######################################################################## dnl check for disabling H.341 dnl MSWIN_DISPLAY h341,H.341 dnl MSWIN_DEFINE h341,H323_H341 AC_ARG_ENABLE(h341, [ --disable-h341 disable H.341]) if test "${enable_h341}x" = "x" ; then enable_h341=$default_h341 fi if test "$enable_h341" = "yes" ; then H323_H341=1 AC_DEFINE(H323_H341, 1) else H323_H341= AC_MSG_NOTICE(Disabling H.341) fi AC_SUBST(H323_H341) dnl ######################################################################## dnl check for disabling H.350 dnl MSWIN_DISPLAY h350,H.350 dnl MSWIN_DEFINE h350,H323_H350 AC_ARG_ENABLE(h350, [ --disable-h350 disable H.350]) if test "${enable_h350}x" = "x" ; then enable_h350=$default_h350 fi if test "$enable_h350" = "yes" ; then H323_H350=1 AC_DEFINE(H323_H350, 1) else H323_H350= AC_MSG_NOTICE(Disabling H.350) fi AC_SUBST(H323_H350) dnl ######################################################################## dnl check for disabling H.450 dnl MSWIN_DISPLAY h450,H.450 dnl MSWIN_DEFINE h450,H323_H450 AC_ARG_ENABLE(h450, [ --disable-h450 disable H.450]) if test "${enable_h450}x" = "x" ; then enable_h450=$default_h450 fi if test "$enable_h450" = "yes" ; then H323_H450=1 AC_DEFINE(H323_H450, 1) else H323_H450= AC_MSG_NOTICE(Disabling H.450) fi AC_SUBST(H323_H450) dnl ######################################################################## dnl check for disabling H.460 dnl MSWIN_DISPLAY h460,H.460 dnl MSWIN_DEFINE h460,H323_H460 AC_ARG_ENABLE(h460, [ --disable-h460 disable H.460]) if test "${enable_h460}x" = "x" ; then enable_h460=$default_h460 fi if test "$enable_h460" = "yes" ; then H323_H460=1 AC_DEFINE(H323_H460, 1) else H323_H460= AC_MSG_NOTICE(Disabling H.460) fi AC_SUBST(H323_H460) dnl ######################################################################## dnl check for enabling H.460.9 dnl MSWIN_DISPLAY h4609,H.460.9 dnl MSWIN_DEFINE h4609,H323_H4609 AC_ARG_ENABLE(h4609, [ --disable-h4609 disable H.460.9]) if test "${enable_h4609}x" = "x" ; then enable_h4609=$default_h4609 fi if test "$enable_h4609" = "yes" ; then H323_h4609=1 AC_DEFINE(H323_H4609, 1) else H323_h4609= AC_MSG_NOTICE(Disabling H.460.9) fi AC_SUBST(H323_H4609) dnl ######################################################################## dnl check for enabling H.460.17 dnl MSWIN_DISPLAY h46017,H.460.17 dnl MSWIN_DEFINE h46017,H323_H46017X AC_ARG_ENABLE(h46017, [ --disable-h46017 disable H.460.17]) if test "${enable_h46017}x" = "x" ; then enable_h46017=$default_h46017 fi if test "$enable_h46017" = "yes" ; then H323_H46017=1 AC_DEFINE(H323_H46017, 1) else H323_H46017= AC_MSG_NOTICE(Disabling H.460.17) fi AC_SUBST(H323_H46017) dnl ######################################################################## dnl check for enabling H.460.18/.19 dnl MSWIN_DISPLAY h46018,H.460.18/.19 dnl MSWIN_DEFINE h46018,H323_H46018 AC_ARG_ENABLE(h46018, [ --disable-h46018 disable H.460.18/.19]) if test "${enable_h46018}x" = "x" ; then enable_h46018=$default_h46018 fi if test "$enable_h46018" = "yes" ; then H323_H46018=1 AC_DEFINE(H323_H46018, 1) else H323_H46018= AC_MSG_NOTICE(Disabling H.460.18/.19) fi AC_SUBST(H323_H46018) dnl ######################################################################## dnl check for enabling H.460.19 RTP multiplexing dnl MSWIN_DISPLAY h46019m,H.460.19 RTP multiplexing dnl MSWIN_DEFINE h46019m,H323_H46019MX AC_ARG_ENABLE(h46019m, [ --disable-h46019m disable H.460.19 RTP multiplexing]) if test "${enable_h46019m}x" = "x" ; then enable_h46019m=$default_h46019m fi if test "$enable_h46019m" = "yes" ; then H323_H46019M=1 AC_DEFINE(H323_H46019M, 1) else H323_H46019M= AC_MSG_NOTICE(Disabling H.460.19 RTP multiplexing) fi AC_SUBST(H323_H46019M) dnl ######################################################################## dnl check for disabling H.460.23/.24 dnl MSWIN_DISPLAY h46023,H.460.23/.24 dnl MSWIN_DEFINE h46023,H323_H46023 AC_ARG_ENABLE(h46023, [ --disable-h46023 disable H.460.23/.24]) if test "${enable_h46023}x" = "x" ; then enable_h46023=$default_h46023 fi if test "$enable_h46023" = "yes" ; then H323_H46023=1 AC_DEFINE(H323_H46023, 1) else H323_H46023= AC_MSG_NOTICE(Disabling H.460.23/.24) fi AC_SUBST(H323_H46023) dnl ######################################################################## dnl check for disabling H.460 Presence dnl MSWIN_DISPLAY h460p,H.460 Presence dnl MSWIN_DEFINE h460p,H323_H460P AC_ARG_ENABLE(h460p, [ --disable-h460p disable H.460 Presence]) if test "${enable_h460p}x" = "x" ; then enable_h460p=$default_h460p fi if test "$enable_h460p" = "yes" ; then H323_H460P=1 AC_DEFINE(H323_H460P, 1) else H323_H460P= AC_MSG_NOTICE(Disabling H.460 Presence) fi AC_SUBST(H323_H460P) dnl ######################################################################## dnl check for disabling H.501 dnl MSWIN_DISPLAY h501,H.501 dnl MSWIN_DEFINE h501,H323_H501 AC_ARG_ENABLE(h501, [ --disable-h501 disable H.501]) if test "${enable_h501}x" = "x" ; then enable_h501=$default_h501 fi if test "$enable_h501" = "yes" ; then H323_H501=1 AC_DEFINE(H323_H501, 1) else H323_H501= AC_MSG_NOTICE(Disabling H.501) fi AC_SUBST(H323_H501) dnl ######################################################################## dnl check for disabling T.38 dnl MSWIN_DISPLAY t38,T.38 dnl MSWIN_DEFINE t38,H323_T38 AC_ARG_ENABLE(t38, [ --disable-t38 disable T.38]) if test "${enable_t38}x" = "x" ; then enable_t38=$default_t38 fi if test "$enable_t38" = "yes" ; then AC_MSG_NOTICE(Enabling T.38) H323_T38=1 AC_DEFINE(H323_T38, 1) else H323_T38= AC_MSG_NOTICE(Disabling T.38) fi AC_SUBST(H323_T38) dnl ######################################################################## dnl check for enabling T.120 dnl MSWIN_DISPLAY t120,T.120 dnl MSWIN_DEFINE t120,H323_T120 AC_ARG_ENABLE(t120, [ --disable-t120 disable T.120]) if test "${enable_t120}x" = "x" ; then enable_t120=$default_t120 fi if test "$enable_t120" = "no" ; then H323_T120= AC_MSG_NOTICE(Disabling T.120) else H323_T20=1 AC_DEFINE(H323_T120, 1) fi AC_SUBST(H323_T120) dnl ######################################################################## dnl check for disabling GNUGK Support dnl MSWIN_DISPLAY gnugk,GNUGKnat dnl MSWIN_DEFINE gnugk,H323_GNUGK AC_ARG_ENABLE(gnugk, [ --disable-gnugk disable GnuGk NAT]) if test "${enable_gnugk}x" = "x" ; then enable_gnugk=$default_gnugk fi if test "$enable_gnugk" = "yes" ; then H323_GNUGK=1 AC_DEFINE(H323_GNUGK, 1) else H323_GNUGK= AC_MSG_NOTICE(Disabling GnuGk NAT) fi AC_SUBST(H323_GNUGK) dnl ######################################################################## dnl check for disabling File Transfer Support dnl MSWIN_DISPLAY file,FileTransfer dnl MSWIN_DEFINE file,H323_FILE AC_ARG_ENABLE(file, [ --disable-file disable File Transfer]) if test "${enable_file}x" = "x" ; then enable_file=$default_file fi if test "$enable_file" = "yes" ; then H323_FILE=1 AC_DEFINE(H323_FILE, 1) else H323_FILE= AC_MSG_NOTICE(Disabling File Transfer) fi AC_SUBST(H323_FILE) dnl ######################################################################## dnl make directives AC_SUBST(STDCCFLAGS) AC_SUBST(LDFLAGS) AC_SUBST(LDLIBS) AC_SUBST(ENDLDLIBS) AC_PROG_INSTALL AC_CONFIG_FILES(openh323u.mak) AC_CONFIG_FILES(Makefile) dnl ######################################################################## dnl Header file AC_CONFIG_HEADERS(include/openh323buildopts.h) dnl ######################################################################## dnl Output configured files AC_CONFIG_SUBDIRS(plugins) AC_OUTPUT() dnl ######################################################################## dnl check if upad128_t is defined (Solaris) if test "${OSTYPE:-unknown}" = "solaris"; then AC_MSG_CHECKING(for upad128_t) AC_TRY_COMPILE([#include ], [upad128_t upad; upad._q = 0.0;], has_upad128_t=y) if test ${has_upad128_t} == "y"; then AC_MSG_RESULT(yes) AC_DEFINE(P_HAS_UPAD128_T) else AC_MSG_RESULT(no) fi fi h323plus/h323plus_2005.sln0000644000175000017500000000205010736303114013651 0ustar markmarkMicrosoft Visual Studio Solution File, Format Version 9.00 # Visual C++ Express 2005 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "h323plus", "h323plus_2005.vcproj", "{71C46EAF-48C9-47BA-9532-27B51744548D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 No Trace|Win32 = No Trace|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {71C46EAF-48C9-47BA-9532-27B51744548D}.Debug|Win32.ActiveCfg = Debug|Win32 {71C46EAF-48C9-47BA-9532-27B51744548D}.Debug|Win32.Build.0 = Debug|Win32 {71C46EAF-48C9-47BA-9532-27B51744548D}.No Trace|Win32.ActiveCfg = No Trace|Win32 {71C46EAF-48C9-47BA-9532-27B51744548D}.No Trace|Win32.Build.0 = No Trace|Win32 {71C46EAF-48C9-47BA-9532-27B51744548D}.Release|Win32.ActiveCfg = Release|Win32 {71C46EAF-48C9-47BA-9532-27B51744548D}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal h323plus/samples/0000755000175000017500000000000011712004251012544 5ustar markmarkh323plus/samples/simple/0000755000175000017500000000000011712004251014035 5ustar markmarkh323plus/samples/simple/simple_2008.vcproj0000644000175000017500000001721011712004251017225 0ustar markmark h323plus/samples/simple/Makefile0000644000175000017500000000033111615126031015475 0ustar markmark# # Makefile # # Make file for simple sample application for the H323Plus library. # PROG = simph323 SOURCES := main.cxx ifndef OPENH323DIR OPENH323DIR=$(CURDIR)/../.. endif include $(OPENH323DIR)/openh323u.mak h323plus/samples/simple/main.h0000644000175000017500000000575711615126031015153 0ustar markmark/* * main.h * * A simple H.323 "net telephone" application. * * Copyright (c) 2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Portable Windows Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Id $ * */ #ifndef _SimpleH323_MAIN_H #define _SimpleH323_MAIN_H #include #include #if !defined(P_USE_STANDARD_CXX_BOOL) && !defined(P_USE_INTEGER_BOOL) typedef int PBoolean; #endif class SimpleH323EndPoint : public H323EndPoint { PCLASSINFO(SimpleH323EndPoint, H323EndPoint); public: SimpleH323EndPoint(); ~SimpleH323EndPoint(); // overrides from H323EndPoint virtual H323Connection * CreateConnection(unsigned callReference); virtual PBoolean OnIncomingCall(H323Connection &, const H323SignalPDU &, H323SignalPDU &); virtual H323Connection::AnswerCallResponse OnAnswerCall(H323Connection &, const PString &, const H323SignalPDU &, H323SignalPDU &); virtual PBoolean OnConnectionForwarded(H323Connection &, const PString &, const H323SignalPDU &); virtual void OnConnectionEstablished(H323Connection & connection, const PString & token); virtual void OnConnectionCleared(H323Connection & connection, const PString & clearedCallToken); virtual PBoolean OpenAudioChannel(H323Connection &, PBoolean, unsigned, H323AudioCodec &); #ifdef H323_VIDEO virtual PBoolean OpenVideoChannel(H323Connection &, PBoolean, H323VideoCodec &); #ifdef H323_H239 virtual PBoolean OpenExtendedVideoChannel(H323Connection &, PBoolean,H323VideoCodec &); #endif #endif // New functions PBoolean Initialise(PArgList &); PBoolean SetSoundDevice(PArgList &, const char *, PSoundChannel::Directions); PString currentCallToken; protected: PBoolean autoAnswer; PString busyForwardParty; PString videoDriver; }; class SimpleH323Connection : public H323Connection { PCLASSINFO(SimpleH323Connection, H323Connection); public: SimpleH323Connection(SimpleH323EndPoint &, unsigned); virtual PBoolean OnStartLogicalChannel(H323Channel &); virtual void OnUserInputString(const PString &); protected: PBoolean noFastStart; }; class SimpleH323Process : public PProcess { PCLASSINFO(SimpleH323Process, PProcess) public: SimpleH323Process(); ~SimpleH323Process(); void Main(); protected: SimpleH323EndPoint * endpoint; }; #endif // _SimpleH323_MAIN_H // End of File /////////////////////////////////////////////////////////////// h323plus/samples/simple/simple_2010.vcxproj0000644000175000017500000005464711712004251017425 0ustar markmarkяЛП Debug Win32 Debug x64 No Trace Win32 No Trace x64 Release Win32 Release x64 simpleplus {AC8B99A3-6DEA-48B0-A6A6-31A982FAAD0A} simpleplus Application false Application false Application false Application false Application false Application false <_ProjectFileVersion>10.0.30319.1 .\NoTrace\ .\NoTrace\ .\NoTrace\ .\NoTrace\ false false .\Release\ .\Release\ .\Release\ .\Release\ false false .\Debug\ .\Debug\ .\Debug\ .\Debug\ true true ..\..\..\ptlib_SVN\include;..\..\include;$(IncludePath) ..\..\..\ptlib\include;..\..\include;$(IncludePath) ..\..\..\ptlib_SVN\lib;..\..\lib;$(LibraryPath) ..\..\..\ptlib\lib;..\..\lib;$(LibraryPath) ..\..\..\ptlib\include;..\..\include;$(IncludePath) ..\..\..\ptlib\include;..\..\include ..\..\..\ptlib\lib;..\..\lib;$(LibraryPath) ..\..\..\ptlib\lib;..\..\lib;$(LibraryPath) ..\..\..\ptlib\include;..\..\include;$(IncludePath) ..\..\..\ptlib\lib;..\..\lib;$(LibraryPath) NDEBUG;%(PreprocessorDefinitions) true true Win32 .\NoTrace/simple.tlb MinSpace AnySuitable NDEBUG;PASN_NOPRINTON;PASN_LEANANDMEAN;%(PreprocessorDefinitions) true MultiThreadedDLL true true Use ptlib.h .\NoTrace/simple.pch .\NoTrace/ .\NoTrace/ .\NoTrace/ Level4 true NDEBUG;_AFXDLL;%(PreprocessorDefinitions) 0x0c09 h323plusn.lib;ptlib.lib;wsock32.lib;mpr.lib;%(AdditionalDependencies) .\NoTrace\$(ProjectName).exe true .\NoTrace/simple.pdb Console false MachineX86 NDEBUG;%(PreprocessorDefinitions) true true .\NoTrace/simple.tlb MinSpace AnySuitable NDEBUG;PASN_NOPRINTON;PASN_LEANANDMEAN;%(PreprocessorDefinitions) true MultiThreadedDLL true true Use ptlib.h .\NoTrace/simple.pch .\NoTrace/ .\NoTrace/ .\NoTrace/ Level4 true NDEBUG;_AFXDLL;%(PreprocessorDefinitions) 0x0c09 h323plusn.lib;ptlib.lib;wsock32.lib;mpr.lib;%(AdditionalDependencies) .\NoTrace\$(ProjectName).exe true .\NoTrace/simple.pdb Console false NDEBUG;%(PreprocessorDefinitions) true true Win32 .\Release/simple.tlb MaxSpeed AnySuitable NDEBUG;PTRACING;%(PreprocessorDefinitions) true MultiThreadedDLL true true Use ptlib.h .\Release/simple.pch .\Release/ .\Release/ .\Release/ Level4 true NDEBUG;_AFXDLL;%(PreprocessorDefinitions) 0x0c09 h323plus.lib;ptlibs.lib;wsock32.lib;mpr.lib;%(AdditionalDependencies) .\Release\$(ProjectName).exe true .\Release/simple.pdb Console false MachineX86 NDEBUG;%(PreprocessorDefinitions) true true .\Release/simple.tlb MaxSpeed AnySuitable NDEBUG;PTRACING;%(PreprocessorDefinitions) true MultiThreadedDLL true true Use ptlib.h .\Release/simple.pch .\Release/ .\Release/ .\Release/ Level4 true NDEBUG;_AFXDLL;%(PreprocessorDefinitions) 0x0c09 h323plus.lib;ptlibs.lib;wsock32.lib;mpr.lib;%(AdditionalDependencies) .\Release\$(ProjectName).exe true .\Release/simple.pdb Console false _DEBUG;%(PreprocessorDefinitions) true true Win32 .\Debug/simple.tlb Disabled _DEBUG;PTRACING;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL true NotUsing ptlib.h .\Debug/simple.pch .\Debug/ .\Debug/ .\Debug/ Level4 true EditAndContinue _DEBUG;_AFXDLL;%(PreprocessorDefinitions) 0x0c09 h323plusd.lib;ptlibsd.lib;wsock32.lib;mpr.lib;%(AdditionalDependencies) .\Debug\$(ProjectName).exe true true .\Debug/simple.pdb Console false MachineX86 _DEBUG;%(PreprocessorDefinitions) true true .\Debug/simple.tlb Disabled _DEBUG;PTRACING;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL true NotUsing ptlib.h .\Debug/simple.pch .\Debug/ .\Debug/ .\Debug/ Level4 true ProgramDatabase _DEBUG;_AFXDLL;%(PreprocessorDefinitions) 0x0c09 h323plusd.lib;ptlibsd.lib;wsock32.lib;mpr.lib;%(AdditionalDependencies) .\Debug\$(ProjectName).exe true true .\Debug/simple.pdb Console false Disabled Disabled %(PreprocessorDefinitions) %(PreprocessorDefinitions) EnableFastChecks EnableFastChecks MinSpace MinSpace %(PreprocessorDefinitions) %(PreprocessorDefinitions) MaxSpeed MaxSpeed %(PreprocessorDefinitions) %(PreprocessorDefinitions) h323plus/samples/simple/main.cxx0000644000175000017500000006412411664623355015536 0ustar markmark/* * main.cxx * * A simple H.323 "net telephone" application. * * Copyright (c) 2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Portable Windows Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Id $ * */ #include #include #ifdef __GNUC__ #define H323_STATIC_LIB #endif #include "main.h" #include "../../version.h" #if defined(_MSC_VER) #if PTLIB_VER > 280 #define defVideoDriver "DirectShow" #else #define defVideoDriver "DirectShow2" #endif #else #define defVideoDriver "*" #endif #define new PNEW PCREATE_PROCESS(SimpleH323Process); /////////////////////////////////////////////////////////////// SimpleH323Process::SimpleH323Process() : PProcess("H323Plus", "SimpleH323", MAJOR_VERSION, MINOR_VERSION, BUILD_TYPE, BUILD_NUMBER) { endpoint = NULL; } SimpleH323Process::~SimpleH323Process() { delete endpoint; } void SimpleH323Process::Main() { cout << GetName() << " Version " << GetVersion(TRUE) << " by " << GetManufacturer() << " on " << GetOSClass() << ' ' << GetOSName() << " (" << GetOSVersion() << '-' << GetOSHardware() << ")\n\n"; // Get and parse all of the command line arguments. PArgList & args = GetArguments(); args.Parse( "a-auto-answer." "b-bandwidth:" "B-forward-busy:" "D-disable:" "e-silence." "f-fast-disable." "g-gatekeeper:" "h-help." "i-interface:" "j-jitter:" "l-listen." "n-no-gatekeeper." #if PTRACING "o-output:" #endif "-osptoken." "P-prefer:" "p-password:" "r-require-gatekeeper." "s-sound:" "-sound-in:" "-sound-out:" "-sound-buffers:" #ifdef H323_VIDEO "v-video::" #endif "T-h245tunneldisable." "Q-h245qosdisable." #ifdef H323_H46018 "-h46018disable." #endif #if PTRACING "t-trace." #endif "x-listenport:" "u-user:" , FALSE); if (args.HasOption('h') || (!args.HasOption('l') && args.GetCount() == 0)) { cout << "Usage : " << GetName() << " [options] -l\n" " : " << GetName() << " [options] [alias@]hostname (no gatekeeper)\n" " : " << GetName() << " [options] alias[@hostname] (with gatekeeper)\n" "Options:\n" " -l --listen : Listen for incoming calls.\n" " -g --gatekeeper host : Specify gatekeeper host.\n" " -n --no-gatekeeper : Disable gatekeeper discovery.\n" " -r --require-gatekeeper : Exit if gatekeeper discovery fails.\n" " -a --auto-answer : Automatically answer incoming calls.\n" " -u --user name : Set local alias name(s) (defaults to login name).\n" " -p --password pwd : Set the H.235 password to use for calls.\n" " -b --bandwidth bps : Limit bandwidth usage to bps bits/second.\n" " -j --jitter [min-]max : Set minimum (optional) and maximum jitter buffer (in milliseconds).\n" " -D --disable codec : Disable the specified codec (may be used multiple times)\n" " -P --prefer codec : Prefer the specified codec (may be used multiple times)\n" " -i --interface ipnum : Select interface to bind to.\n" " -B --forward-busy party : Forward to remote party if busy.\n" " -e --silence : Disable transmitter silence detection.\n" " -f --fast-disable : Disable fast start.\n" " -T --h245tunneldisable : Disable H245 tunnelling.\n" " -Q --h245qosdisable : Disable H245 QoS Exchange.\n" #ifdef H323_H46018 " --h46018disable : Disable H.460.18.\n" #endif " -s --sound device : Select sound input/output device.\n" " --sound-in device : Select sound input device.\n" " --sound-out device : Select sound output device.\n" #ifdef H323_VIDEO " -v --video device : Select video input/output device.\n" #endif #if PTRACING " -t --trace : Enable trace, use multiple times for more detail.\n" " -o --output : File for trace output, default is stderr.\n" #endif " -x --listenport : Listening port (default 1720).\n" " -h --help : This help message.\n" << endl; return; } #if PTRACING PTrace::Initialise(args.GetOptionCount('t'), args.HasOption('o') ? (const char *)args.GetOptionString('o') : NULL, PTrace::DateAndTime | PTrace::TraceLevel | PTrace::FileAndLine); #endif // Create the H.323 endpoint and initialise it endpoint = new SimpleH323EndPoint; if (!endpoint->Initialise(args)) return; // See if making a call or just listening. if (args.HasOption('l')) cout << "Waiting for incoming calls for \"" << endpoint->GetLocalUserName() << "\"\n"; else { cout << "Initiating call to \"" << args[0] << "\"\n"; endpoint->MakeCall(args[0], endpoint->currentCallToken); } cout << "Press X to exit." << endl; // Simplest possible user interface for (;;) { cout << "H323> " << flush; PCaselessString cmd; cin >> cmd; if (cmd == "X") break; PStringArray Cmd = cmd.Tokenise(" ",FALSE); if (Cmd[0] == "c") { if (!endpoint->currentCallToken.IsEmpty()) cout << "Cannot make call whilst call in progress\n"; else { PString str; str = Cmd[1].Trim(); endpoint->MakeCall(str, endpoint->currentCallToken); } } else if (cmd.FindOneOf("HYN0123456789ABCDES") != P_MAX_INDEX) { H323Connection * connection = endpoint->FindConnectionWithLock(endpoint->currentCallToken); if (connection != NULL) { if (cmd == "H") connection->ClearCall(); else if (cmd == "Y") connection->AnsweringCall(H323Connection::AnswerCallNow); else if (cmd == "N") connection->AnsweringCall(H323Connection::AnswerCallDenied); #ifdef H323_H239 else if (cmd == "S") { if (connection->OpenH239Channel()) cout << "Application Session Open.." << endl; else cout << "Application Open Error: Remote may not support Feature!" << endl; } else if (cmd == "E") { if (connection->CloseH239Channel()) cout << "Application Session Closed.." << endl; } #endif else connection->SendUserInput(cmd); connection->Unlock(); } } } cout << "Exiting " << GetName() << endl; } /////////////////////////////////////////////////////////////// SimpleH323EndPoint::SimpleH323EndPoint() { } SimpleH323EndPoint::~SimpleH323EndPoint() { } PBoolean SimpleH323EndPoint::Initialise(PArgList & args) { #if 0 PDirectory DefaultDir = PProcess::Current().GetFile().GetDirectory(); PPluginManager & pluginMgr = PPluginManager::GetPluginManager(); pluginMgr.LoadPluginDirectory(DefaultDir); #endif // Get local username, multiple uses of -u indicates additional aliases if (args.HasOption('u')) { PStringArray aliases = args.GetOptionString('u').Tokenise(','); SetLocalUserName(aliases[0]); for (PINDEX i = 1; i < aliases.GetSize(); i++) AddAliasName(aliases[i]); } // Load the base featureSet LoadBaseFeatureSet(); // Set the various options SetSilenceDetectionMode(args.HasOption('e') ? H323AudioCodec::NoSilenceDetection : H323AudioCodec::AdaptiveSilenceDetection); DisableFastStart(args.HasOption('f')); DisableH245Tunneling(args.HasOption('T')); DisableH245QoS(args.HasOption('Q')); autoAnswer = args.HasOption('a'); busyForwardParty = args.GetOptionString('B'); if (args.HasOption('b')) { initialBandwidth = args.GetOptionString('b').AsUnsigned()*100; if (initialBandwidth == 0) { cerr << "Illegal bandwidth specified." << endl; return FALSE; } } if (args.HasOption('j')) { unsigned minJitter; unsigned maxJitter; PStringArray delays = args.GetOptionString('j').Tokenise(",-"); if (delays.GetSize() < 2) { maxJitter = delays[0].AsUnsigned(); minJitter = PMIN(GetMinAudioJitterDelay(), maxJitter); } else { minJitter = delays[0].AsUnsigned(); maxJitter = delays[1].AsUnsigned(); } if (minJitter >= 20 && minJitter <= maxJitter && maxJitter <= 1000) SetAudioJitterDelay(minJitter, maxJitter); else { cerr << "Jitter should be between 20 and 1000 milliseconds." << endl; return FALSE; } } if (!SetSoundDevice(args, "sound", PSoundChannel::Recorder)) return FALSE; if (!SetSoundDevice(args, "sound", PSoundChannel::Player)) return FALSE; if (!SetSoundDevice(args, "sound-in", PSoundChannel::Recorder)) return FALSE; if (!SetSoundDevice(args, "sound-out", PSoundChannel::Player)) return FALSE; PBoolean hasVideo = TRUE; #ifdef H323_VIDEO videoDriver = defVideoDriver; if (args.HasOption("video")) { videoDriver = args.GetOptionString("video"); } cout << "Using video driver " << videoDriver << endl; H323Capability::CapabilityFrameSize MaxVideoFrame = H323Capability::cifMPI; PString inputDriverName = videoDriver; PStringList devices = PVideoInputDevice::GetDriversDeviceNames(inputDriverName); if (devices.GetSize() == 0) { cout << "No Video Grabber available Disabling Video Support!" << endl; hasVideo = FALSE; #if PTLIB_VER >= 2110 } else { PVideoInputDevice::Capabilities caps; if (PVideoInputDevice::GetDeviceCapabilities(devices[0],inputDriverName,&caps)) { cout << "Video Device " << devices[0] << " capabilities." << endl; cout << " Grabber capabilities." << endl; for (std::list::const_iterator r = caps.framesizes.begin(); r != caps.framesizes.end(); ++r) { cout << " w: " << r->GetFrameWidth() << " h: " << r->GetFrameHeight() << " fmt: " << r->GetColourFormat() << " fps: " << r->GetFrameRate() << endl; if ((r->GetFrameWidth() >= 1280) && (r->GetFrameHeight() >= 720)) { MaxVideoFrame = H323Capability::p720MPI; } } cout << " Control capabilities." << endl; if (caps.controls.size() > 0) { for (std::list::const_iterator r = caps.controls.begin(); r != caps.controls.end(); ++r) cout << " " << r->AsString(r->type) << ": max:" << r->max << " min:" << r->min << endl; } else { cout << " No Control capabilities found." << endl; } cout << endl; } else { cout << "InputDevice " << devices[0] << " capabilities not Available." << endl; } #endif } if (MaxVideoFrame == H323Capability::p720MPI) cout << "High Definition Webcam detected." << endl << endl; #else hasVideo = FALSE; #endif // Set the default codecs available on sound cards. AddAllCapabilities(0, P_MAX_INDEX, "*"); if (!hasVideo) RemoveCapability(H323Capability::e_Video); #ifdef H323_VIDEO else SetVideoFrameSize(MaxVideoFrame); #endif AddAllUserInputCapabilities(0, P_MAX_INDEX); RemoveCapabilities(args.GetOptionString('D').Tokenise(',')); ReorderCapabilities(args.GetOptionString('P').Tokenise(',')); cout << "Local username: " << GetLocalUserName() << "\n" << "Silence compression is " << (GetSilenceDetectionMode() == H323AudioCodec::NoSilenceDetection ? "Dis" : "En") << "abled\n" << "Auto answer is " << autoAnswer << "\n" << "FastConnect is " << (IsFastStartDisabled() ? "Dis" : "En") << "abled\n" << "H245Tunnelling is " << (IsH245TunnelingDisabled() ? "Dis" : "En") << "abled\n" << "H245QoS is " << (IsH245QoSDisabled() ? "Dis" : "En") << "abled\n" << "Jitter buffer: " << GetMinAudioJitterDelay() << '-' << GetMaxAudioJitterDelay() << " ms\n" << "Sound output device: \"" << GetSoundChannelPlayDevice() << "\"\n" "Sound input device: \"" << GetSoundChannelRecordDevice() << "\"\n" << "Codecs (in preference order):\n" << setprecision(2) << GetCapabilities() << endl; //////////////////////////////////////// #ifdef H323_H460 // List all the available Features PStringList features = H460_Feature::GetFeatureNames(); cout << "Available Features: " << endl; for (PINDEX i = 0; i < features.GetSize(); i++) { PStringList names = H460_Feature::GetFeatureFriendlyNames(features[i]); for (PINDEX j = 0; j < names.GetSize(); j++) cout << features[i] << "\t" << names[j] << endl; } cout << endl; #ifdef H323_H46018 if (args.HasOption("h46018disable")) { cout << "H.460.18 is Disabled" << endl << endl; H46018Enable(PFalse); } #endif #endif ///////////////////////////////////////// // List all the available Features PStringArray natmethods = PNatStrategy::GetRegisteredList(); cout << "Available NAT Methods: " << endl; for (PINDEX i = 0; i < natmethods.GetSize(); i++) { cout << natmethods[i] << endl; } cout << endl; //////////////////////////////////////// // Start the listener thread for incoming calls. PString iface = args.GetOptionString('i'); PString listenPort = args.GetOptionString('x'); if (listenPort.IsEmpty()) listenPort = "1720"; #if PTLIB_VER >= 2110 if (iface.IsEmpty()) { PIPSocket::InterfaceTable interfaceTable; if (PIPSocket::GetInterfaceTable(interfaceTable)) { for (PINDEX j=0; j < interfaceTable.GetSize(); ++j) { if (interfaceTable[j].GetAddress().GetVersion() == 4) { iface = interfaceTable[j].GetAddress().AsString(); break; } } } } #endif PIPSocket::Address interfaceAddress(iface); WORD interfacePort = (WORD)listenPort.AsInteger(); H323ListenerTCP * listener = new H323ListenerTCP(*this, interfaceAddress, interfacePort); if (iface.IsEmpty()) iface = "*"; if (!StartListener(listener)) { cerr << "Could not open H.323 listener port on \"" << iface << '"' << endl; return FALSE; } //PIPSocket::SetDefaultIpAddressFamilyV6(); // Initialise the security info if (args.HasOption('p')) { SetGatekeeperPassword(args.GetOptionString('p')); cout << "Enabling H.235 security access to gatekeeper." << endl; } // Establish link with gatekeeper if required. if (args.HasOption('g') || !args.HasOption('n')) { H323TransportUDP * rasChannel; if (args.GetOptionString('i').IsEmpty()) rasChannel = new H323TransportUDP(*this); else { PIPSocket::Address interfaceAddress(args.GetOptionString('i')); rasChannel = new H323TransportUDP(*this, interfaceAddress); } if (args.HasOption('g')) { PString gkName = args.GetOptionString('g'); if (SetGatekeeper(gkName, rasChannel)) cout << "Gatekeeper set: " << *gatekeeper << endl; else { cerr << "Error registering with gatekeeper at \"" << gkName << '"' << endl; return FALSE; } } else { cout << "Searching for gatekeeper..." << flush; if (DiscoverGatekeeper(rasChannel)) cout << "\nGatekeeper found: " << *gatekeeper << endl; else { cerr << "\nNo gatekeeper found." << endl; if (args.HasOption('r')) return FALSE; } } } if (args.HasOption("sound-buffers")) { soundChannelBuffers = args.GetOptionString("sound-buffers", "3").AsUnsigned(); if (soundChannelBuffers < 2 || soundChannelBuffers > 99) { cout << "Illegal sound buffers specified." << endl; return FALSE; } } return TRUE; } PBoolean SimpleH323EndPoint::SetSoundDevice(PArgList & args, const char * optionName, PSoundChannel::Directions dir) { if (!args.HasOption(optionName)) return TRUE; PString dev = args.GetOptionString(optionName); if (dir == PSoundChannel::Player) { if (SetSoundChannelPlayDevice(dev)) return TRUE; } else { if (SetSoundChannelRecordDevice(dev)) return TRUE; } cerr << "Device for " << optionName << " (\"" << dev << "\") must be one of:\n"; PStringArray names = PSoundChannel::GetDeviceNames(dir); for (PINDEX i = 0; i < names.GetSize(); i++) cerr << " \"" << names[i] << "\"\n"; return FALSE; } H323Connection * SimpleH323EndPoint::CreateConnection(unsigned callReference) { return new SimpleH323Connection(*this, callReference); } PBoolean SimpleH323EndPoint::OnIncomingCall(H323Connection & connection, const H323SignalPDU &, H323SignalPDU &) { if (currentCallToken.IsEmpty()) return TRUE; if (busyForwardParty.IsEmpty()) { cout << "Incoming call from \"" << connection.GetRemotePartyName() << "\" rejected, line busy!" << endl; return FALSE; } cout << "Forwarding call to \"" << busyForwardParty << "\"." << endl; return !connection.ForwardCall(busyForwardParty); } H323Connection::AnswerCallResponse SimpleH323EndPoint::OnAnswerCall(H323Connection & connection, const PString & caller, const H323SignalPDU &, H323SignalPDU &) { currentCallToken = connection.GetCallToken(); if (autoAnswer) { cout << "Automatically accepting call." << endl; return H323Connection::AnswerCallNow; } cout << "Incoming call from \"" << caller << "\", answer call (Y/n)? " << flush; return H323Connection::AnswerCallPending; } PBoolean SimpleH323EndPoint::OnConnectionForwarded(H323Connection & /*connection*/, const PString & forwardParty, const H323SignalPDU & /*pdu*/) { if (MakeCall(forwardParty, currentCallToken)) { cout << "Call is being forwarded to host " << forwardParty << endl; return TRUE; } cout << "Error forwarding call to \"" << forwardParty << '"' << endl; return FALSE; } void SimpleH323EndPoint::OnConnectionEstablished(H323Connection & connection, const PString & token) { currentCallToken = token; cout << "In call with " << connection.GetRemotePartyName() << endl; } void SimpleH323EndPoint::OnConnectionCleared(H323Connection & connection, const PString & clearedCallToken) { if (currentCallToken == clearedCallToken) currentCallToken = PString(); PString remoteName = '"' + connection.GetRemotePartyName() + '"'; switch (connection.GetCallEndReason()) { case H323Connection::EndedByRemoteUser : cout << remoteName << " has cleared the call"; break; case H323Connection::EndedByCallerAbort : cout << remoteName << " has stopped calling"; break; case H323Connection::EndedByRefusal : cout << remoteName << " did not accept your call"; break; case H323Connection::EndedByNoAnswer : cout << remoteName << " did not answer your call"; break; case H323Connection::EndedByTransportFail : cout << "Call with " << remoteName << " ended abnormally"; break; case H323Connection::EndedByCapabilityExchange : cout << "Could not find common codec with " << remoteName; break; case H323Connection::EndedByNoAccept : cout << "Did not accept incoming call from " << remoteName; break; case H323Connection::EndedByAnswerDenied : cout << "Refused incoming call from " << remoteName; break; case H323Connection::EndedByNoUser : cout << "Gatekeeper could not find user " << remoteName; break; case H323Connection::EndedByNoBandwidth : cout << "Call to " << remoteName << " aborted, insufficient bandwidth."; break; case H323Connection::EndedByUnreachable : cout << remoteName << " could not be reached."; break; case H323Connection::EndedByHostOffline : cout << remoteName << " is not online."; break; case H323Connection::EndedByNoEndPoint : cout << "No phone running for " << remoteName; break; case H323Connection::EndedByConnectFail : cout << "Transport error calling " << remoteName; break; default : cout << "Call with " << remoteName << " completed"; } PTime connectTime = connection.GetConnectionStartTime(); if (connectTime.GetTimeInSeconds() != 0) cout << ", duration " << setprecision(0) << setw(5) << (PTime() - connectTime); cout << endl; } PBoolean SimpleH323EndPoint::OpenAudioChannel(H323Connection & connection, PBoolean isEncoding, unsigned bufferSize, H323AudioCodec & codec) { if (H323EndPoint::OpenAudioChannel(connection, isEncoding, bufferSize, codec)) return TRUE; cerr << "Could not open sound device "; if (isEncoding) cerr << GetSoundChannelRecordDevice(); else cerr << GetSoundChannelPlayDevice(); cerr << " - Check permissions or full duplex capability." << endl; return FALSE; } #ifdef H323_VIDEO PBoolean SimpleH323EndPoint::OpenVideoChannel(H323Connection & /*connection*/, PBoolean isEncoding, H323VideoCodec & codec) { PString deviceDriver = videoDriver; PStringList devices = isEncoding ? PVideoInputDevice::GetDriversDeviceNames(deviceDriver) : PVideoOutputDevice::GetDriversDeviceNames("*"); // Look for a useful device PString deviceName; for (PINDEX i = 0; i < devices.GetSize(); i++) { PTRACE(4, devices[i]); PCaselessString devName = devices[i]; if (devName != "*.yuv" && devName != "fake" && devName != "NULL") { deviceName = devName; break; } } if (deviceName.IsEmpty()) deviceName = isEncoding ? "fake" : "NULL"; PVideoDevice * device = isEncoding ? (PVideoDevice *)PVideoInputDevice::CreateDeviceByName(deviceName) : (PVideoDevice *)PVideoOutputDevice::CreateDeviceByName(deviceName); if (isEncoding) { PVideoInputDevice::Capabilities videoCaps; if (((PVideoInputDevice *)device)->GetDeviceCapabilities(deviceName,deviceDriver,&videoCaps)) codec.SetSupportedFormats(videoCaps.framesizes); } if (!device->SetFrameSize(codec.GetWidth(), codec.GetHeight()) || !device->SetFrameRate(codec.GetFrameRate()) || !device->SetColourFormatConverter("YUV420P") || !device->Open(deviceName, TRUE)) { PTRACE(1, "Failed to open or configure the video device \"" << deviceName << '"'); return FALSE; } PVideoChannel * channel = new PVideoChannel; if (isEncoding) channel->AttachVideoReader((PVideoInputDevice *)device); else channel->AttachVideoPlayer((PVideoOutputDevice *)device); return codec.AttachChannel(channel,TRUE); } #ifdef H323_H239 PBoolean SimpleH323EndPoint::OpenExtendedVideoChannel(H323Connection & connection, PBoolean PTRACE_PARAM(isEncoding), H323VideoCodec & codec) { #ifdef P_APPSHARE PString deviceDriver = "Application"; #else PString deviceDriver = "*"; #endif PStringList devices = isEncoding ? PVideoInputDevice::GetDriversDeviceNames(deviceDriver) : PVideoOutputDevice::GetDriversDeviceNames("*"); // Look for a useful device PString deviceName; for (PINDEX i = 0; i < devices.GetSize(); i++) { PTRACE(4, devices[i]); PCaselessString devName = devices[i]; if (devName != "*.yuv" && devName != "NULL") { deviceName = devName; break; } } if (deviceName.IsEmpty()) deviceName = isEncoding ? "fake" : "NULL"; PVideoDevice * device = isEncoding ? (PVideoDevice *)PVideoInputDevice::CreateOpenedDevice(deviceDriver,deviceName) : (PVideoDevice *)PVideoOutputDevice::CreateOpenedDevice(deviceDriver,deviceName); if (isEncoding) { PVideoInputDevice::Capabilities videoCaps; if (((PVideoInputDevice *)device)->GetDeviceCapabilities(deviceName,deviceDriver,&videoCaps)) codec.SetSupportedFormats(videoCaps.framesizes); } if (!device->SetColourFormatConverter("YUV420P") || !device->SetFrameSizeConverter(codec.GetWidth(), codec.GetHeight(),PVideoFrameInfo::eScale)) { PTRACE(1, "Failed to open or configure the video device \"" << deviceName << '"'); return FALSE; } PVideoChannel * channel = new PVideoChannel; if (isEncoding) channel->AttachVideoReader((PVideoInputDevice *)device); else channel->AttachVideoPlayer((PVideoOutputDevice *)device); return codec.AttachChannel(channel,TRUE); } #endif // H323_H239 #endif // H323_VIDEO /////////////////////////////////////////////////////////////// SimpleH323Connection::SimpleH323Connection(SimpleH323EndPoint & ep, unsigned ref) : H323Connection(ep, ref) { #ifdef H323_H4609 H4609EnableStats(); #endif } PBoolean SimpleH323Connection::OnStartLogicalChannel(H323Channel & channel) { if (!H323Connection::OnStartLogicalChannel(channel)) return FALSE; cout << "Started logical channel: "; switch (channel.GetDirection()) { case H323Channel::IsTransmitter : cout << "sending "; break; case H323Channel::IsReceiver : cout << "receiving "; break; default : break; } cout << channel.GetCapability() << endl; return TRUE; } void SimpleH323Connection::OnUserInputString(const PString & value) { cout << "User input received: \"" << value << '"' << endl; } // End of File /////////////////////////////////////////////////////////////// h323plus/samples/simple/simple_2005.vcproj0000644000175000017500000002046611615126031017234 0ustar markmark h323plus/src/0000755000175000017500000000000011671402217011677 5ustar markmarkh323plus/src/gnugknat.cxx0000644000175000017500000004114411652377422014255 0ustar markmark/* * gnugknat.cxx * * GnuGk NAT Traversal class. * * h323plus library * * Copyright (c) 2008 ISVO (Asia) Pte. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * Contributor(s): ______________________________________. * * $Id: gnugknat.cxx,v 1.14 2011/10/28 01:02:10 shorne Exp $ * * */ #include #include #ifdef H323_GNUGK #include "gnugknat.h" #if defined(_WIN32) && !defined(P_FORCE_STATIC_PLUGIN) #error "gnugknat.cxx must be compiled without precompiled headers" #endif PCREATE_NAT_PLUGIN(GnuGk); WORD GNUGK_Feature::keepalive = 10; GNUGKTransport * GNUGK_Feature::curtransport = NULL; PBoolean GNUGK_Feature::connectionlost = FALSE; /////////////////////////////////////////////////////////////////////////////////// // Listening/Keep Alive Thread class GNUGKTransportThread : public PThread { PCLASSINFO(GNUGKTransportThread, PThread) public: GNUGKTransportThread(H323EndPoint & endpoint, GNUGKTransport * transport, WORD KeepAlive =0); protected: void Main(); PDECLARE_NOTIFIER(PTimer, GNUGKTransportThread, Ping); /// Timer to notify to poll for External IP PTimer Keep; /// Polling Timer PBoolean isConnected; GNUGKTransport * transport; WORD keepAlive; PTime lastupdate; }; ///////////////////////////////////////////////////////////////////////////// GNUGKTransportThread::GNUGKTransportThread(H323EndPoint & ep, GNUGKTransport * t, WORD KeepAlive) : PThread(ep.GetSignallingThreadStackSize(), AutoDeleteThread, NormalPriority, "H225 Answer:%0x"), transport(t) { isConnected = FALSE; keepAlive = KeepAlive; if (keepAlive > 0 ) { // Send the first PDU. transport->InitialPDU(); Keep.SetNotifier(PCREATE_NOTIFIER(Ping)); Keep.RunContinuous(keepAlive * 1000); } // Start the Thread Resume(); } void GNUGKTransportThread::Ping(PTimer &, INT) { // Fix for some PC's that fail on the runcontinuously time interval. PSyncPoint handlewait; PTime curTime = PTime(); if ((curTime - lastupdate) < PTimeInterval(GNUGK_Feature::keepalive * 1000)) handlewait.Wait(lastupdate + PTimeInterval(GNUGK_Feature::keepalive * 1000) - curTime); if (transport->isCall() || /// We have call or we are closing down transport->CloseTransport()) Keep.Stop(); else /// Stop what we are doing transport->InitialPDU(); lastupdate = PTime(); } void GNUGKTransportThread::Main() { PTRACE(3, "GNUGK\tStarted Listening-KeepAlive Thread"); PBoolean ret = TRUE; while ((transport->IsOpen()) && // Transport is Open (!isConnected) && // Does not have a call connection (ret) && // is not a Failed connection (!transport->CloseTransport())) { // not close due to shutdown ret = transport->HandleGNUGKSignallingChannelPDU(this); if (!ret && transport->CloseTransport()) { // Closing down Instruction PTRACE(3, "GNUGK\tShutting down GnuGk Thread"); GNUGK_Feature::curtransport = NULL; transport->ConnectionLost(TRUE); } else if (!ret) { // We have a socket failure wait 1 sec and try again. PTRACE(3, "GNUGK\tConnection Lost! Retrying Connection.."); transport->ConnectionLost(TRUE); while (!transport->CloseTransport() && !transport->Connect()) { PTRACE(3, "GNUGK\tReconnect Failed! Waiting 1 sec"); PProcess::Sleep(1000); } if (!transport->CloseTransport()) { PTRACE(3, "GNUGK\tConnection ReEstablished"); transport->ConnectionLost(FALSE); ret = TRUE; // Signal that the connection has been ReEstablished. } } else { // We are connected to a call on this thread isConnected = TRUE; } } PTRACE(3, "GNUGK\tTransport Closed"); } /////////////////////////////////////////////////////////////////////////////////////// GNUGKTransport::GNUGKTransport(H323EndPoint & endpoint, PIPSocket::Address binding, GNUGK_Feature * feat, PString & gkid ) : H323TransportTCP(endpoint, binding), GKid(gkid), Feature(feat) { GNUGK_Feature::curtransport = this; ReadTimeOut = PMaxTimeInterval; isConnected = FALSE; closeTransport = FALSE; remoteShutDown = FALSE; } GNUGKTransport::~GNUGKTransport() { Close(); } PBoolean GNUGKTransport::HandleGNUGKSignallingSocket(H323SignalPDU & pdu) { for (;;) { if (!IsOpen()) return FALSE; H323SignalPDU rpdu; if (!rpdu.Read(*this)) { PTRACE(3, "GNUGK\tSocket Read Failure"); if (GetErrorNumber(PChannel::LastReadError) == 0) { PTRACE(3, "GNUGK\tRemote SHUT DOWN or Intermediary Shutdown!"); remoteShutDown = TRUE; } return FALSE; } else if ((rpdu.GetQ931().GetMessageType() == Q931::InformationMsg) && (endpoint.HandleUnsolicitedInformation(rpdu))) { // Handle unsolicited Information Message } else if (rpdu.GetQ931().GetMessageType() == Q931::SetupMsg) { pdu = rpdu; return TRUE; } else { PTRACE(3, "GNUGK\tUnknown PDU Received"); return FALSE; } } } PBoolean GNUGKTransport::HandleGNUGKSignallingChannelPDU(PThread * thread) { H323SignalPDU pdu; if (!HandleGNUGKSignallingSocket(pdu)) { if (remoteShutDown) { // Intentional Shutdown? GNUGK_Feature::curtransport = NULL; Close(); } return FALSE; } // Create a new transport to the GK as this one will be closed at the end of the call. isConnected = TRUE; GNUGK_Feature::curtransport = NULL; CreateNewTransport(); // Process the Tokens unsigned callReference = pdu.GetQ931().GetCallReference(); PString token = endpoint.BuildConnectionToken(*this, callReference, TRUE); H323Connection * connection = endpoint.CreateConnection(callReference, NULL, this, &pdu); if (connection == NULL) { PTRACE(1, "GNUGK\tEndpoint could not create connection, " << "sending release complete PDU: callRef=" << callReference); Q931 pdu; pdu.BuildReleaseComplete(callReference, TRUE); PBYTEArray rawData; pdu.Encode(rawData); WritePDU(rawData); return TRUE; } PTRACE(3, "GNUGK\tCreated new connection: " << token); connectionsMutex.Wait(); endpoint.GetConnections().SetAt(token, connection); connectionsMutex.Signal(); connection->AttachSignalChannel(token, this, TRUE); AttachThread(thread); thread->SetNoAutoDelete(); if (connection->HandleSignalPDU(pdu)) { // All subsequent PDU's should wait forever SetReadTimeout(PMaxTimeInterval); connection->HandleSignallingChannel(); } else { connection->ClearCall(H323Connection::EndedByTransportFail); PTRACE(1, "GNUGK\tSignal channel stopped on first PDU."); } return TRUE; } PBoolean GNUGKTransport::WritePDU( const PBYTEArray & pdu ) { PWaitAndSignal m(WriteMutex); return H323TransportTCP::WritePDU(pdu); } PBoolean GNUGKTransport::ReadPDU(PBYTEArray & pdu) { return H323TransportTCP::ReadPDU(pdu); } PBoolean GNUGKTransport::Connect() { PTRACE(4, "GNUGK\tConnecting to GK" ); if (!H323TransportTCP::Connect()) return FALSE; return InitialPDU(); } void GNUGKTransport::ConnectionLost(PBoolean established) { PWaitAndSignal m(shutdownMutex); if (closeTransport) return; PTRACE(4,"GnuGK\tConnection lost " << established << " have " << GNUGK_Feature::connectionlost); if (GNUGK_Feature::connectionlost != established) { GetEndPoint().NATLostConnection(established); GNUGK_Feature::connectionlost = established; } } PBoolean GNUGKTransport::IsConnectionLost() { return GNUGK_Feature::connectionlost; } PBoolean GNUGKTransport::InitialPDU() { PWaitAndSignal mutex(IntMutex); if (!IsOpen()) return FALSE; PBYTEArray bytes(GKid,GKid.GetLength(), false); Q931 qPDU; qPDU.BuildInformation(0,false); qPDU.SetCallState(Q931::CallState_IncomingCallProceeding); qPDU.SetIE(Q931::FacilityIE, bytes); PBYTEArray rawData; if (!qPDU.Encode(rawData)) { PTRACE(4, "GNUGK\tError Encoding PDU."); return FALSE; } if (!WritePDU(rawData)) { PTRACE(4, "GNUGK\tError Writing PDU."); return FALSE; } PTRACE(6, "GNUGK\tSent KeepAlive PDU."); return TRUE; } PBoolean GNUGKTransport::SetGKID(const PString & newid) { if (GKid != newid) { GKid = newid; return TRUE; } return FALSE; } PBoolean GNUGKTransport::CreateNewTransport() { H323TransportAddress remote = GetRemoteAddress(); GNUGKTransport * transport = new GNUGKTransport(GetEndPoint(), PIPSocket::Address::GetAny(remote.GetIpVersion()),Feature,GKid); transport->SetRemoteAddress(remote); if (transport->Connect()) { PTRACE(3, "GNUGK\tConnected to " << transport->GetRemoteAddress()); new GNUGKTransportThread(transport->GetEndPoint(), transport,GNUGK_Feature::keepalive); if (transport->IsConnectionLost()) transport->ConnectionLost(FALSE); return TRUE; } return FALSE; } PBoolean GNUGKTransport::Close() { PWaitAndSignal m(shutdownMutex); PTRACE(4, "GNUGK\tClosing GnuGK NAT channel."); closeTransport = TRUE; return H323TransportTCP::Close(); } PBoolean GNUGKTransport::IsOpen () const { return H323TransportTCP::IsOpen(); } PBoolean GNUGKTransport::IsListening() const { if (isConnected) return FALSE; if (h245listener == NULL) return FALSE; if (GNUGK_Feature::connectionlost) return FALSE; return h245listener->IsOpen(); } ///////////////////////////////////////////////////////////////////////////// GNUGK_Feature::GNUGK_Feature(H323EndPoint & EP, H323TransportAddress & remoteAddress, PString gkid, WORD KeepAlive ) : ep(EP), address(remoteAddress), GKid(gkid) { PTRACE(4, "GNUGK\tCreating GNUGK Feature."); keepalive = KeepAlive; open = CreateNewTransport(); } GNUGK_Feature::~GNUGK_Feature() { if (curtransport != NULL) curtransport->Close(); } PBoolean GNUGK_Feature::CreateNewTransport() { PTRACE(5, "GNUGK\tCreating Transport."); GNUGKTransport * transport = new GNUGKTransport(ep, PIPSocket::Address::GetAny(address.GetIpVersion()), this,GKid); transport->SetRemoteAddress(address); if (transport->Connect()) { PTRACE(3, "GNUGK\tConnected to " << transport->GetRemoteAddress()); new GNUGKTransportThread(transport->GetEndPoint(), transport,keepalive); return TRUE; } PTRACE(3, "GNUGK\tTransport Failure " << transport->GetRemoteAddress()); return FALSE; } PBoolean GNUGK_Feature::ReRegister(const PString & newid) { // If there is a change in the gatekeeper id then notify the update socket if ((GNUGK_Feature::curtransport != NULL) && curtransport->SetGKID(newid)) return curtransport->InitialPDU(); // Send on existing Transport return FALSE; } /////////////////////////////////////////////////////////////////////////////////////////// PNatMethod_GnuGk::PNatMethod_GnuGk() { EP = NULL; available = false; active = true; } PNatMethod_GnuGk::~PNatMethod_GnuGk() { } void PNatMethod_GnuGk::AttachEndPoint(H323EndPoint * ep) { EP = ep; WORD portPairBase = ep->GetRtpIpPortBase(); WORD portPairMax = ep->GetRtpIpPortMax(); // Initialise // ExternalAddress = 0; pairedPortInfo.basePort = 0; pairedPortInfo.maxPort = 0; pairedPortInfo.currentPort = 0; // Set the Port Pair Information pairedPortInfo.mutex.Wait(); pairedPortInfo.basePort = (WORD)((portPairBase+1)&0xfffe); if (portPairBase == 0) { pairedPortInfo.basePort = 0; pairedPortInfo.maxPort = 0; } else if (portPairMax == 0) pairedPortInfo.maxPort = (WORD)(pairedPortInfo.basePort+99); else if (portPairMax < portPairBase) pairedPortInfo.maxPort = portPairBase; else pairedPortInfo.maxPort = portPairMax; pairedPortInfo.currentPort = pairedPortInfo.basePort; pairedPortInfo.mutex.Signal(); available = FALSE; } PBoolean PNatMethod_GnuGk::GetExternalAddress( PIPSocket::Address & /*externalAddress*/, /// External address of router const PTimeInterval & /* maxAge */ /// Maximum age for caching ) { return FALSE; } PBoolean PNatMethod_GnuGk::CreateSocketPair( PUDPSocket * & socket1, PUDPSocket * & socket2, const PIPSocket::Address & binding ) { if (pairedPortInfo.basePort == 0 || pairedPortInfo.basePort > pairedPortInfo.maxPort) { PTRACE(1, "GNUGK\tInvalid local UDP port range " << pairedPortInfo.currentPort << '-' << pairedPortInfo.maxPort); return FALSE; } socket1 = new GNUGKUDPSocket(); /// Data socket2 = new GNUGKUDPSocket(); /// Signal /// Make sure we have sequential ports while ((!OpenSocket(*socket1, pairedPortInfo,binding)) || (!OpenSocket(*socket2, pairedPortInfo,binding)) || (socket2->GetPort() != socket1->GetPort() + 1) ) { delete socket1; delete socket2; socket1 = new GNUGKUDPSocket(); /// Data socket2 = new GNUGKUDPSocket(); /// Signal } PTRACE(5, "GNUGK\tUDP ports " << socket1->GetPort() << '-' << socket2->GetPort()); return TRUE; } PBoolean PNatMethod_GnuGk::OpenSocket(PUDPSocket & socket, PortInfo & portInfo, const PIPSocket::Address & binding) const { PWaitAndSignal mutex(portInfo.mutex); WORD startPort = portInfo.currentPort; do { portInfo.currentPort++; if (portInfo.currentPort > portInfo.maxPort) portInfo.currentPort = portInfo.basePort; if (socket.Listen(binding,1, portInfo.currentPort)) { socket.SetReadTimeout(500); return TRUE; } } while (portInfo.currentPort != startPort); PTRACE(2, "GNUGK\tFailed to bind to local UDP port in range " << portInfo.currentPort << '-' << portInfo.maxPort); return FALSE; } void PNatMethod_GnuGk::SetAvailable() { EP->NATMethodCallBack(GetName(),1,"Available"); available = true; } ///////////////////////////////////////////////////////////////////////////////////////////// GNUGKUDPSocket::GNUGKUDPSocket() { } GNUGKUDPSocket::~GNUGKUDPSocket() { } void GNUGKUDPSocket::SetSendAddress(const Address & address,WORD port) { PUDPSocket::SetSendAddress(address,port); /* PString ping = "ping"; PBYTEArray bytes(ping,ping.GetLength(), false); if (PIPDatagramSocket::WriteTo(bytes, ping.GetLength(), sendAddress, sendPort)) PTRACE(4, "GNUGK\tUDP socket pinged " << sendAddress << '-' << sendPort << " from " << GetPort()); else PTRACE(4, "GNUGK\tUDP socket no ping " << sendAddress << '-' << sendPort << " from " << GetPort()); */ ApplyQoS(); } #endif // H323_GNUGK h323plus/src/h225_1.cxx0000644000175000017500000066037011015524267013341 0ustar markmark// // h225_1.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h225.h" #endif #include #include "h225.h" #define new PNEW #if ! H323_DISABLE_H225 #include "h235_t.cxx" #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_ReleaseCompleteReason[]={ {"noBandwidth",0} ,{"gatekeeperResources",1} ,{"unreachableDestination",2} ,{"destinationRejection",3} ,{"invalidRevision",4} ,{"noPermission",5} ,{"unreachableGatekeeper",6} ,{"gatewayResources",7} ,{"badFormatAddress",8} ,{"adaptiveBusy",9} ,{"inConf",10} ,{"undefinedReason",11} ,{"facilityCallDeflection",12} ,{"securityDenied",13} ,{"calledPartyNotRegistered",14} ,{"callerNotRegistered",15} ,{"newConnectionNeeded",16} ,{"nonStandardReason",17} ,{"replaceWithConferenceInvite",18} ,{"genericDataReason",19} ,{"neededFeatureNotSupported",20} ,{"tunnelledSignallingRejected",21} ,{"invalidCID",22} ,{"securityError",23} ,{"hopCountExceeded",24} }; #endif // // ReleaseCompleteReason // H225_ReleaseCompleteReason::H225_ReleaseCompleteReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 12, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_ReleaseCompleteReason,25 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_ReleaseCompleteReason::operator H225_NonStandardParameter &() const #else H225_ReleaseCompleteReason::operator H225_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } H225_ReleaseCompleteReason::operator const H225_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_ReleaseCompleteReason::operator H225_ConferenceIdentifier &() const #else H225_ReleaseCompleteReason::operator H225_ConferenceIdentifier &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ConferenceIdentifier), PInvalidCast); #endif return *(H225_ConferenceIdentifier *)choice; } H225_ReleaseCompleteReason::operator const H225_ConferenceIdentifier &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ConferenceIdentifier), PInvalidCast); #endif return *(H225_ConferenceIdentifier *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_ReleaseCompleteReason::operator H225_SecurityErrors &() const #else H225_ReleaseCompleteReason::operator H225_SecurityErrors &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SecurityErrors), PInvalidCast); #endif return *(H225_SecurityErrors *)choice; } H225_ReleaseCompleteReason::operator const H225_SecurityErrors &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SecurityErrors), PInvalidCast); #endif return *(H225_SecurityErrors *)choice; } PBoolean H225_ReleaseCompleteReason::CreateObject() { switch (tag) { case e_noBandwidth : case e_gatekeeperResources : case e_unreachableDestination : case e_destinationRejection : case e_invalidRevision : case e_noPermission : case e_unreachableGatekeeper : case e_gatewayResources : case e_badFormatAddress : case e_adaptiveBusy : case e_inConf : case e_undefinedReason : case e_facilityCallDeflection : case e_securityDenied : case e_calledPartyNotRegistered : case e_callerNotRegistered : case e_newConnectionNeeded : case e_genericDataReason : case e_neededFeatureNotSupported : case e_tunnelledSignallingRejected : case e_invalidCID : case e_hopCountExceeded : choice = new PASN_Null(); return TRUE; case e_nonStandardReason : choice = new H225_NonStandardParameter(); return TRUE; case e_replaceWithConferenceInvite : choice = new H225_ConferenceIdentifier(); return TRUE; case e_securityError : choice = new H225_SecurityErrors(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_ReleaseCompleteReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ReleaseCompleteReason::Class()), PInvalidCast); #endif return new H225_ReleaseCompleteReason(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_ScnConnectionType[]={ {"unknown",0} ,{"bChannel",1} ,{"hybrid2x64",2} ,{"hybrid384",3} ,{"hybrid1536",4} ,{"hybrid1920",5} ,{"multirate",6} }; #endif // // ScnConnectionType // H225_ScnConnectionType::H225_ScnConnectionType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 7, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_ScnConnectionType,7 #endif ) { } PBoolean H225_ScnConnectionType::CreateObject() { choice = (tag <= e_multirate) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H225_ScnConnectionType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ScnConnectionType::Class()), PInvalidCast); #endif return new H225_ScnConnectionType(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_ScnConnectionAggregation[]={ {"auto",0} ,{"none",1} ,{"h221",2} ,{"bonded_mode1",3} ,{"bonded_mode2",4} ,{"bonded_mode3",5} }; #endif // // ScnConnectionAggregation // H225_ScnConnectionAggregation::H225_ScnConnectionAggregation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 6, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_ScnConnectionAggregation,6 #endif ) { } PBoolean H225_ScnConnectionAggregation::CreateObject() { choice = (tag <= e_bonded_mode3) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H225_ScnConnectionAggregation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ScnConnectionAggregation::Class()), PInvalidCast); #endif return new H225_ScnConnectionAggregation(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_PresentationIndicator[]={ {"presentationAllowed",0} ,{"presentationRestricted",1} ,{"addressNotAvailable",2} }; #endif // // PresentationIndicator // H225_PresentationIndicator::H225_PresentationIndicator(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_PresentationIndicator,3 #endif ) { } PBoolean H225_PresentationIndicator::CreateObject() { choice = (tag <= e_addressNotAvailable) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H225_PresentationIndicator::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_PresentationIndicator::Class()), PInvalidCast); #endif return new H225_PresentationIndicator(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_ScreeningIndicator[]={ {"userProvidedNotScreened",0} ,{"userProvidedVerifiedAndPassed",1} ,{"userProvidedVerifiedAndFailed",2} ,{"networkProvided",3} }; #endif // // ScreeningIndicator // H225_ScreeningIndicator::H225_ScreeningIndicator(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_ScreeningIndicator,4 #endif ) { } H225_ScreeningIndicator & H225_ScreeningIndicator::operator=(unsigned v) { SetValue(v); return *this; } PObject * H225_ScreeningIndicator::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ScreeningIndicator::Class()), PInvalidCast); #endif return new H225_ScreeningIndicator(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_FacilityReason[]={ {"routeCallToGatekeeper",0} ,{"callForwarded",1} ,{"routeCallToMC",2} ,{"undefinedReason",3} ,{"conferenceListChoice",4} ,{"startH245",5} ,{"noH245",6} ,{"newTokens",7} ,{"featureSetUpdate",8} ,{"forwardedElements",9} ,{"transportedInformation",10} }; #endif // // FacilityReason // H225_FacilityReason::H225_FacilityReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_FacilityReason,11 #endif ) { } PBoolean H225_FacilityReason::CreateObject() { choice = (tag <= e_transportedInformation) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H225_FacilityReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_FacilityReason::Class()), PInvalidCast); #endif return new H225_FacilityReason(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_TransportAddress[]={ {"ipAddress",0} ,{"ipSourceRoute",1} ,{"ipxAddress",2} ,{"ip6Address",3} ,{"netBios",4} ,{"nsap",5} ,{"nonStandardAddress",6} }; #endif // // TransportAddress // H225_TransportAddress::H225_TransportAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 7, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_TransportAddress,7 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_TransportAddress::operator H225_TransportAddress_ipAddress &() const #else H225_TransportAddress::operator H225_TransportAddress_ipAddress &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_TransportAddress_ipAddress), PInvalidCast); #endif return *(H225_TransportAddress_ipAddress *)choice; } H225_TransportAddress::operator const H225_TransportAddress_ipAddress &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_TransportAddress_ipAddress), PInvalidCast); #endif return *(H225_TransportAddress_ipAddress *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_TransportAddress::operator H225_TransportAddress_ipSourceRoute &() const #else H225_TransportAddress::operator H225_TransportAddress_ipSourceRoute &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_TransportAddress_ipSourceRoute), PInvalidCast); #endif return *(H225_TransportAddress_ipSourceRoute *)choice; } H225_TransportAddress::operator const H225_TransportAddress_ipSourceRoute &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_TransportAddress_ipSourceRoute), PInvalidCast); #endif return *(H225_TransportAddress_ipSourceRoute *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_TransportAddress::operator H225_TransportAddress_ipxAddress &() const #else H225_TransportAddress::operator H225_TransportAddress_ipxAddress &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_TransportAddress_ipxAddress), PInvalidCast); #endif return *(H225_TransportAddress_ipxAddress *)choice; } H225_TransportAddress::operator const H225_TransportAddress_ipxAddress &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_TransportAddress_ipxAddress), PInvalidCast); #endif return *(H225_TransportAddress_ipxAddress *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_TransportAddress::operator H225_TransportAddress_ip6Address &() const #else H225_TransportAddress::operator H225_TransportAddress_ip6Address &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_TransportAddress_ip6Address), PInvalidCast); #endif return *(H225_TransportAddress_ip6Address *)choice; } H225_TransportAddress::operator const H225_TransportAddress_ip6Address &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_TransportAddress_ip6Address), PInvalidCast); #endif return *(H225_TransportAddress_ip6Address *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_TransportAddress::operator H225_NonStandardParameter &() const #else H225_TransportAddress::operator H225_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } H225_TransportAddress::operator const H225_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } PBoolean H225_TransportAddress::CreateObject() { switch (tag) { case e_ipAddress : choice = new H225_TransportAddress_ipAddress(); return TRUE; case e_ipSourceRoute : choice = new H225_TransportAddress_ipSourceRoute(); return TRUE; case e_ipxAddress : choice = new H225_TransportAddress_ipxAddress(); return TRUE; case e_ip6Address : choice = new H225_TransportAddress_ip6Address(); return TRUE; case e_netBios : choice = new PASN_OctetString(); choice->SetConstraints(PASN_Object::FixedConstraint, 16); return TRUE; case e_nsap : choice = new PASN_OctetString(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 20); return TRUE; case e_nonStandardAddress : choice = new H225_NonStandardParameter(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_TransportAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_TransportAddress::Class()), PInvalidCast); #endif return new H225_TransportAddress(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_SupportedProtocols[]={ {"nonStandardData",0} ,{"h310",1} ,{"h320",2} ,{"h321",3} ,{"h322",4} ,{"h323",5} ,{"h324",6} ,{"voice",7} ,{"t120_only",8} ,{"nonStandardProtocol",9} ,{"t38FaxAnnexbOnly",10} ,{"sip",11} }; #endif // // SupportedProtocols // H225_SupportedProtocols::H225_SupportedProtocols(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 9, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_SupportedProtocols,12 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_SupportedProtocols::operator H225_NonStandardParameter &() const #else H225_SupportedProtocols::operator H225_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } H225_SupportedProtocols::operator const H225_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_SupportedProtocols::operator H225_H310Caps &() const #else H225_SupportedProtocols::operator H225_H310Caps &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_H310Caps), PInvalidCast); #endif return *(H225_H310Caps *)choice; } H225_SupportedProtocols::operator const H225_H310Caps &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_H310Caps), PInvalidCast); #endif return *(H225_H310Caps *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_SupportedProtocols::operator H225_H320Caps &() const #else H225_SupportedProtocols::operator H225_H320Caps &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_H320Caps), PInvalidCast); #endif return *(H225_H320Caps *)choice; } H225_SupportedProtocols::operator const H225_H320Caps &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_H320Caps), PInvalidCast); #endif return *(H225_H320Caps *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_SupportedProtocols::operator H225_H321Caps &() const #else H225_SupportedProtocols::operator H225_H321Caps &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_H321Caps), PInvalidCast); #endif return *(H225_H321Caps *)choice; } H225_SupportedProtocols::operator const H225_H321Caps &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_H321Caps), PInvalidCast); #endif return *(H225_H321Caps *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_SupportedProtocols::operator H225_H322Caps &() const #else H225_SupportedProtocols::operator H225_H322Caps &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_H322Caps), PInvalidCast); #endif return *(H225_H322Caps *)choice; } H225_SupportedProtocols::operator const H225_H322Caps &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_H322Caps), PInvalidCast); #endif return *(H225_H322Caps *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_SupportedProtocols::operator H225_H323Caps &() const #else H225_SupportedProtocols::operator H225_H323Caps &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_H323Caps), PInvalidCast); #endif return *(H225_H323Caps *)choice; } H225_SupportedProtocols::operator const H225_H323Caps &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_H323Caps), PInvalidCast); #endif return *(H225_H323Caps *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_SupportedProtocols::operator H225_H324Caps &() const #else H225_SupportedProtocols::operator H225_H324Caps &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_H324Caps), PInvalidCast); #endif return *(H225_H324Caps *)choice; } H225_SupportedProtocols::operator const H225_H324Caps &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_H324Caps), PInvalidCast); #endif return *(H225_H324Caps *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_SupportedProtocols::operator H225_VoiceCaps &() const #else H225_SupportedProtocols::operator H225_VoiceCaps &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_VoiceCaps), PInvalidCast); #endif return *(H225_VoiceCaps *)choice; } H225_SupportedProtocols::operator const H225_VoiceCaps &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_VoiceCaps), PInvalidCast); #endif return *(H225_VoiceCaps *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_SupportedProtocols::operator H225_T120OnlyCaps &() const #else H225_SupportedProtocols::operator H225_T120OnlyCaps &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_T120OnlyCaps), PInvalidCast); #endif return *(H225_T120OnlyCaps *)choice; } H225_SupportedProtocols::operator const H225_T120OnlyCaps &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_T120OnlyCaps), PInvalidCast); #endif return *(H225_T120OnlyCaps *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_SupportedProtocols::operator H225_NonStandardProtocol &() const #else H225_SupportedProtocols::operator H225_NonStandardProtocol &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardProtocol), PInvalidCast); #endif return *(H225_NonStandardProtocol *)choice; } H225_SupportedProtocols::operator const H225_NonStandardProtocol &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardProtocol), PInvalidCast); #endif return *(H225_NonStandardProtocol *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_SupportedProtocols::operator H225_T38FaxAnnexbOnlyCaps &() const #else H225_SupportedProtocols::operator H225_T38FaxAnnexbOnlyCaps &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_T38FaxAnnexbOnlyCaps), PInvalidCast); #endif return *(H225_T38FaxAnnexbOnlyCaps *)choice; } H225_SupportedProtocols::operator const H225_T38FaxAnnexbOnlyCaps &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_T38FaxAnnexbOnlyCaps), PInvalidCast); #endif return *(H225_T38FaxAnnexbOnlyCaps *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_SupportedProtocols::operator H225_SIPCaps &() const #else H225_SupportedProtocols::operator H225_SIPCaps &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SIPCaps), PInvalidCast); #endif return *(H225_SIPCaps *)choice; } H225_SupportedProtocols::operator const H225_SIPCaps &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SIPCaps), PInvalidCast); #endif return *(H225_SIPCaps *)choice; } PBoolean H225_SupportedProtocols::CreateObject() { switch (tag) { case e_nonStandardData : choice = new H225_NonStandardParameter(); return TRUE; case e_h310 : choice = new H225_H310Caps(); return TRUE; case e_h320 : choice = new H225_H320Caps(); return TRUE; case e_h321 : choice = new H225_H321Caps(); return TRUE; case e_h322 : choice = new H225_H322Caps(); return TRUE; case e_h323 : choice = new H225_H323Caps(); return TRUE; case e_h324 : choice = new H225_H324Caps(); return TRUE; case e_voice : choice = new H225_VoiceCaps(); return TRUE; case e_t120_only : choice = new H225_T120OnlyCaps(); return TRUE; case e_nonStandardProtocol : choice = new H225_NonStandardProtocol(); return TRUE; case e_t38FaxAnnexbOnly : choice = new H225_T38FaxAnnexbOnlyCaps(); return TRUE; case e_sip : choice = new H225_SIPCaps(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_SupportedProtocols::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_SupportedProtocols::Class()), PInvalidCast); #endif return new H225_SupportedProtocols(*this); } // // H221NonStandard // H225_H221NonStandard::H225_H221NonStandard(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_t35CountryCode.SetConstraints(PASN_Object::FixedConstraint, 0, 255); m_t35Extension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); m_manufacturerCode.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H225_H221NonStandard::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "t35CountryCode = " << setprecision(indent) << m_t35CountryCode << '\n'; strm << setw(indent+15) << "t35Extension = " << setprecision(indent) << m_t35Extension << '\n'; strm << setw(indent+19) << "manufacturerCode = " << setprecision(indent) << m_manufacturerCode << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_H221NonStandard::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_H221NonStandard), PInvalidCast); #endif const H225_H221NonStandard & other = (const H225_H221NonStandard &)obj; Comparison result; if ((result = m_t35CountryCode.Compare(other.m_t35CountryCode)) != EqualTo) return result; if ((result = m_t35Extension.Compare(other.m_t35Extension)) != EqualTo) return result; if ((result = m_manufacturerCode.Compare(other.m_manufacturerCode)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_H221NonStandard::GetDataLength() const { PINDEX length = 0; length += m_t35CountryCode.GetObjectLength(); length += m_t35Extension.GetObjectLength(); length += m_manufacturerCode.GetObjectLength(); return length; } PBoolean H225_H221NonStandard::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_t35CountryCode.Decode(strm)) return FALSE; if (!m_t35Extension.Decode(strm)) return FALSE; if (!m_manufacturerCode.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_H221NonStandard::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_t35CountryCode.Encode(strm); m_t35Extension.Encode(strm); m_manufacturerCode.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_H221NonStandard::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_H221NonStandard::Class()), PInvalidCast); #endif return new H225_H221NonStandard(*this); } // // TunnelledProtocolAlternateIdentifier // H225_TunnelledProtocolAlternateIdentifier::H225_TunnelledProtocolAlternateIdentifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_protocolType.SetConstraints(PASN_Object::FixedConstraint, 1, 64); m_protocolVariant.SetConstraints(PASN_Object::FixedConstraint, 1, 64); } #ifndef PASN_NOPRINTON void H225_TunnelledProtocolAlternateIdentifier::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "protocolType = " << setprecision(indent) << m_protocolType << '\n'; if (HasOptionalField(e_protocolVariant)) strm << setw(indent+18) << "protocolVariant = " << setprecision(indent) << m_protocolVariant << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_TunnelledProtocolAlternateIdentifier::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_TunnelledProtocolAlternateIdentifier), PInvalidCast); #endif const H225_TunnelledProtocolAlternateIdentifier & other = (const H225_TunnelledProtocolAlternateIdentifier &)obj; Comparison result; if ((result = m_protocolType.Compare(other.m_protocolType)) != EqualTo) return result; if ((result = m_protocolVariant.Compare(other.m_protocolVariant)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_TunnelledProtocolAlternateIdentifier::GetDataLength() const { PINDEX length = 0; length += m_protocolType.GetObjectLength(); if (HasOptionalField(e_protocolVariant)) length += m_protocolVariant.GetObjectLength(); return length; } PBoolean H225_TunnelledProtocolAlternateIdentifier::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_protocolType.Decode(strm)) return FALSE; if (HasOptionalField(e_protocolVariant) && !m_protocolVariant.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_TunnelledProtocolAlternateIdentifier::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_protocolType.Encode(strm); if (HasOptionalField(e_protocolVariant)) m_protocolVariant.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_TunnelledProtocolAlternateIdentifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_TunnelledProtocolAlternateIdentifier::Class()), PInvalidCast); #endif return new H225_TunnelledProtocolAlternateIdentifier(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_NonStandardIdentifier[]={ {"object",0} ,{"h221NonStandard",1} }; #endif // // NonStandardIdentifier // H225_NonStandardIdentifier::H225_NonStandardIdentifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_NonStandardIdentifier,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_NonStandardIdentifier::operator H225_H221NonStandard &() const #else H225_NonStandardIdentifier::operator H225_H221NonStandard &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_H221NonStandard), PInvalidCast); #endif return *(H225_H221NonStandard *)choice; } H225_NonStandardIdentifier::operator const H225_H221NonStandard &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_H221NonStandard), PInvalidCast); #endif return *(H225_H221NonStandard *)choice; } PBoolean H225_NonStandardIdentifier::CreateObject() { switch (tag) { case e_object : choice = new PASN_ObjectId(); return TRUE; case e_h221NonStandard : choice = new H225_H221NonStandard(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_NonStandardIdentifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_NonStandardIdentifier::Class()), PInvalidCast); #endif return new H225_NonStandardIdentifier(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_AliasAddress[]={ {"dialedDigits",0} ,{"h323_ID",1} ,{"url_ID",2} ,{"transportID",3} ,{"email_ID",4} ,{"partyNumber",5} ,{"mobileUIM",6} ,{"isupNumber",7} }; #endif // // AliasAddress // H225_AliasAddress::H225_AliasAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_AliasAddress,8 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_AliasAddress::operator H225_TransportAddress &() const #else H225_AliasAddress::operator H225_TransportAddress &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_TransportAddress), PInvalidCast); #endif return *(H225_TransportAddress *)choice; } H225_AliasAddress::operator const H225_TransportAddress &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_TransportAddress), PInvalidCast); #endif return *(H225_TransportAddress *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_AliasAddress::operator H225_PartyNumber &() const #else H225_AliasAddress::operator H225_PartyNumber &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_PartyNumber), PInvalidCast); #endif return *(H225_PartyNumber *)choice; } H225_AliasAddress::operator const H225_PartyNumber &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_PartyNumber), PInvalidCast); #endif return *(H225_PartyNumber *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_AliasAddress::operator H225_MobileUIM &() const #else H225_AliasAddress::operator H225_MobileUIM &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_MobileUIM), PInvalidCast); #endif return *(H225_MobileUIM *)choice; } H225_AliasAddress::operator const H225_MobileUIM &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_MobileUIM), PInvalidCast); #endif return *(H225_MobileUIM *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_AliasAddress::operator H225_IsupNumber &() const #else H225_AliasAddress::operator H225_IsupNumber &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_IsupNumber), PInvalidCast); #endif return *(H225_IsupNumber *)choice; } H225_AliasAddress::operator const H225_IsupNumber &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_IsupNumber), PInvalidCast); #endif return *(H225_IsupNumber *)choice; } PBoolean H225_AliasAddress::CreateObject() { switch (tag) { case e_dialedDigits : choice = new PASN_IA5String(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 128); choice->SetCharacterSet(PASN_Object::FixedConstraint, "0123456789#*,"); return TRUE; case e_h323_ID : choice = new PASN_BMPString(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 256); return TRUE; case e_url_ID : choice = new PASN_IA5String(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 512); return TRUE; case e_transportID : choice = new H225_TransportAddress(); return TRUE; case e_email_ID : choice = new PASN_IA5String(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 512); return TRUE; case e_partyNumber : choice = new H225_PartyNumber(); return TRUE; case e_mobileUIM : choice = new H225_MobileUIM(); return TRUE; case e_isupNumber : choice = new H225_IsupNumber(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_AliasAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_AliasAddress::Class()), PInvalidCast); #endif return new H225_AliasAddress(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_AddressPattern[]={ {"wildcard",0} ,{"range",1} }; #endif // // AddressPattern // H225_AddressPattern::H225_AddressPattern(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_AddressPattern,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_AddressPattern::operator H225_AliasAddress &() const #else H225_AddressPattern::operator H225_AliasAddress &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_AliasAddress), PInvalidCast); #endif return *(H225_AliasAddress *)choice; } H225_AddressPattern::operator const H225_AliasAddress &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_AliasAddress), PInvalidCast); #endif return *(H225_AliasAddress *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_AddressPattern::operator H225_AddressPattern_range &() const #else H225_AddressPattern::operator H225_AddressPattern_range &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_AddressPattern_range), PInvalidCast); #endif return *(H225_AddressPattern_range *)choice; } H225_AddressPattern::operator const H225_AddressPattern_range &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_AddressPattern_range), PInvalidCast); #endif return *(H225_AddressPattern_range *)choice; } PBoolean H225_AddressPattern::CreateObject() { switch (tag) { case e_wildcard : choice = new H225_AliasAddress(); return TRUE; case e_range : choice = new H225_AddressPattern_range(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_AddressPattern::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_AddressPattern::Class()), PInvalidCast); #endif return new H225_AddressPattern(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_PartyNumber[]={ {"e164Number",0} ,{"dataPartyNumber",1} ,{"telexPartyNumber",2} ,{"privateNumber",3} ,{"nationalStandardPartyNumber",4} }; #endif // // PartyNumber // H225_PartyNumber::H225_PartyNumber(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 5, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_PartyNumber,5 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_PartyNumber::operator H225_PublicPartyNumber &() const #else H225_PartyNumber::operator H225_PublicPartyNumber &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_PublicPartyNumber), PInvalidCast); #endif return *(H225_PublicPartyNumber *)choice; } H225_PartyNumber::operator const H225_PublicPartyNumber &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_PublicPartyNumber), PInvalidCast); #endif return *(H225_PublicPartyNumber *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_PartyNumber::operator H225_NumberDigits &() const #else H225_PartyNumber::operator H225_NumberDigits &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NumberDigits), PInvalidCast); #endif return *(H225_NumberDigits *)choice; } H225_PartyNumber::operator const H225_NumberDigits &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NumberDigits), PInvalidCast); #endif return *(H225_NumberDigits *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_PartyNumber::operator H225_PrivatePartyNumber &() const #else H225_PartyNumber::operator H225_PrivatePartyNumber &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_PrivatePartyNumber), PInvalidCast); #endif return *(H225_PrivatePartyNumber *)choice; } H225_PartyNumber::operator const H225_PrivatePartyNumber &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_PrivatePartyNumber), PInvalidCast); #endif return *(H225_PrivatePartyNumber *)choice; } PBoolean H225_PartyNumber::CreateObject() { switch (tag) { case e_e164Number : choice = new H225_PublicPartyNumber(); return TRUE; case e_dataPartyNumber : case e_telexPartyNumber : case e_nationalStandardPartyNumber : choice = new H225_NumberDigits(); return TRUE; case e_privateNumber : choice = new H225_PrivatePartyNumber(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_PartyNumber::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_PartyNumber::Class()), PInvalidCast); #endif return new H225_PartyNumber(*this); } // // NumberDigits // H225_NumberDigits::H225_NumberDigits(unsigned tag, PASN_Object::TagClass tagClass) : PASN_IA5String(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 128); SetCharacterSet(PASN_Object::FixedConstraint, "0123456789#*,"); } H225_NumberDigits & H225_NumberDigits::operator=(const char * v) { SetValue(v); return *this; } H225_NumberDigits & H225_NumberDigits::operator=(const PString & v) { SetValue(v); return *this; } PObject * H225_NumberDigits::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_NumberDigits::Class()), PInvalidCast); #endif return new H225_NumberDigits(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_PublicTypeOfNumber[]={ {"unknown",0} ,{"internationalNumber",1} ,{"nationalNumber",2} ,{"networkSpecificNumber",3} ,{"subscriberNumber",4} ,{"abbreviatedNumber",5} }; #endif // // PublicTypeOfNumber // H225_PublicTypeOfNumber::H225_PublicTypeOfNumber(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 6, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_PublicTypeOfNumber,6 #endif ) { } PBoolean H225_PublicTypeOfNumber::CreateObject() { choice = (tag <= e_abbreviatedNumber) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H225_PublicTypeOfNumber::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_PublicTypeOfNumber::Class()), PInvalidCast); #endif return new H225_PublicTypeOfNumber(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_PrivateTypeOfNumber[]={ {"unknown",0} ,{"level2RegionalNumber",1} ,{"level1RegionalNumber",2} ,{"pISNSpecificNumber",3} ,{"localNumber",4} ,{"abbreviatedNumber",5} }; #endif // // PrivateTypeOfNumber // H225_PrivateTypeOfNumber::H225_PrivateTypeOfNumber(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 6, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_PrivateTypeOfNumber,6 #endif ) { } PBoolean H225_PrivateTypeOfNumber::CreateObject() { choice = (tag <= e_abbreviatedNumber) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H225_PrivateTypeOfNumber::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_PrivateTypeOfNumber::Class()), PInvalidCast); #endif return new H225_PrivateTypeOfNumber(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_MobileUIM[]={ {"ansi_41_uim",0} ,{"gsm_uim",1} }; #endif // // MobileUIM // H225_MobileUIM::H225_MobileUIM(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_MobileUIM,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_MobileUIM::operator H225_ANSI_41_UIM &() const #else H225_MobileUIM::operator H225_ANSI_41_UIM &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ANSI_41_UIM), PInvalidCast); #endif return *(H225_ANSI_41_UIM *)choice; } H225_MobileUIM::operator const H225_ANSI_41_UIM &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ANSI_41_UIM), PInvalidCast); #endif return *(H225_ANSI_41_UIM *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_MobileUIM::operator H225_GSM_UIM &() const #else H225_MobileUIM::operator H225_GSM_UIM &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_GSM_UIM), PInvalidCast); #endif return *(H225_GSM_UIM *)choice; } H225_MobileUIM::operator const H225_GSM_UIM &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_GSM_UIM), PInvalidCast); #endif return *(H225_GSM_UIM *)choice; } PBoolean H225_MobileUIM::CreateObject() { switch (tag) { case e_ansi_41_uim : choice = new H225_ANSI_41_UIM(); return TRUE; case e_gsm_uim : choice = new H225_GSM_UIM(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_MobileUIM::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_MobileUIM::Class()), PInvalidCast); #endif return new H225_MobileUIM(*this); } // // TBCD-STRING // H225_TBCD_STRING::H225_TBCD_STRING(unsigned tag, PASN_Object::TagClass tagClass) : PASN_IA5String(tag, tagClass) { SetCharacterSet(PASN_Object::FixedConstraint, "0123456789#*abc"); } H225_TBCD_STRING & H225_TBCD_STRING::operator=(const char * v) { SetValue(v); return *this; } H225_TBCD_STRING & H225_TBCD_STRING::operator=(const PString & v) { SetValue(v); return *this; } PObject * H225_TBCD_STRING::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_TBCD_STRING::Class()), PInvalidCast); #endif return new H225_TBCD_STRING(*this); } // // GSM-UIM // H225_GSM_UIM::H225_GSM_UIM(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 6, TRUE, 0) { m_imsi.SetConstraints(PASN_Object::FixedConstraint, 3, 16); m_tmsi.SetConstraints(PASN_Object::FixedConstraint, 1, 4); m_msisdn.SetConstraints(PASN_Object::FixedConstraint, 3, 16); m_imei.SetConstraints(PASN_Object::FixedConstraint, 15, 16); m_hplmn.SetConstraints(PASN_Object::FixedConstraint, 1, 4); m_vplmn.SetConstraints(PASN_Object::FixedConstraint, 1, 4); } #ifndef PASN_NOPRINTON void H225_GSM_UIM::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_imsi)) strm << setw(indent+7) << "imsi = " << setprecision(indent) << m_imsi << '\n'; if (HasOptionalField(e_tmsi)) strm << setw(indent+7) << "tmsi = " << setprecision(indent) << m_tmsi << '\n'; if (HasOptionalField(e_msisdn)) strm << setw(indent+9) << "msisdn = " << setprecision(indent) << m_msisdn << '\n'; if (HasOptionalField(e_imei)) strm << setw(indent+7) << "imei = " << setprecision(indent) << m_imei << '\n'; if (HasOptionalField(e_hplmn)) strm << setw(indent+8) << "hplmn = " << setprecision(indent) << m_hplmn << '\n'; if (HasOptionalField(e_vplmn)) strm << setw(indent+8) << "vplmn = " << setprecision(indent) << m_vplmn << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_GSM_UIM::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_GSM_UIM), PInvalidCast); #endif const H225_GSM_UIM & other = (const H225_GSM_UIM &)obj; Comparison result; if ((result = m_imsi.Compare(other.m_imsi)) != EqualTo) return result; if ((result = m_tmsi.Compare(other.m_tmsi)) != EqualTo) return result; if ((result = m_msisdn.Compare(other.m_msisdn)) != EqualTo) return result; if ((result = m_imei.Compare(other.m_imei)) != EqualTo) return result; if ((result = m_hplmn.Compare(other.m_hplmn)) != EqualTo) return result; if ((result = m_vplmn.Compare(other.m_vplmn)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_GSM_UIM::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_imsi)) length += m_imsi.GetObjectLength(); if (HasOptionalField(e_tmsi)) length += m_tmsi.GetObjectLength(); if (HasOptionalField(e_msisdn)) length += m_msisdn.GetObjectLength(); if (HasOptionalField(e_imei)) length += m_imei.GetObjectLength(); if (HasOptionalField(e_hplmn)) length += m_hplmn.GetObjectLength(); if (HasOptionalField(e_vplmn)) length += m_vplmn.GetObjectLength(); return length; } PBoolean H225_GSM_UIM::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_imsi) && !m_imsi.Decode(strm)) return FALSE; if (HasOptionalField(e_tmsi) && !m_tmsi.Decode(strm)) return FALSE; if (HasOptionalField(e_msisdn) && !m_msisdn.Decode(strm)) return FALSE; if (HasOptionalField(e_imei) && !m_imei.Decode(strm)) return FALSE; if (HasOptionalField(e_hplmn) && !m_hplmn.Decode(strm)) return FALSE; if (HasOptionalField(e_vplmn) && !m_vplmn.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_GSM_UIM::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_imsi)) m_imsi.Encode(strm); if (HasOptionalField(e_tmsi)) m_tmsi.Encode(strm); if (HasOptionalField(e_msisdn)) m_msisdn.Encode(strm); if (HasOptionalField(e_imei)) m_imei.Encode(strm); if (HasOptionalField(e_hplmn)) m_hplmn.Encode(strm); if (HasOptionalField(e_vplmn)) m_vplmn.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_GSM_UIM::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_GSM_UIM::Class()), PInvalidCast); #endif return new H225_GSM_UIM(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_IsupNumber[]={ {"e164Number",0} ,{"dataPartyNumber",1} ,{"telexPartyNumber",2} ,{"privateNumber",3} ,{"nationalStandardPartyNumber",4} }; #endif // // IsupNumber // H225_IsupNumber::H225_IsupNumber(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 5, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_IsupNumber,5 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_IsupNumber::operator H225_IsupPublicPartyNumber &() const #else H225_IsupNumber::operator H225_IsupPublicPartyNumber &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_IsupPublicPartyNumber), PInvalidCast); #endif return *(H225_IsupPublicPartyNumber *)choice; } H225_IsupNumber::operator const H225_IsupPublicPartyNumber &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_IsupPublicPartyNumber), PInvalidCast); #endif return *(H225_IsupPublicPartyNumber *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_IsupNumber::operator H225_IsupDigits &() const #else H225_IsupNumber::operator H225_IsupDigits &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_IsupDigits), PInvalidCast); #endif return *(H225_IsupDigits *)choice; } H225_IsupNumber::operator const H225_IsupDigits &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_IsupDigits), PInvalidCast); #endif return *(H225_IsupDigits *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_IsupNumber::operator H225_IsupPrivatePartyNumber &() const #else H225_IsupNumber::operator H225_IsupPrivatePartyNumber &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_IsupPrivatePartyNumber), PInvalidCast); #endif return *(H225_IsupPrivatePartyNumber *)choice; } H225_IsupNumber::operator const H225_IsupPrivatePartyNumber &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_IsupPrivatePartyNumber), PInvalidCast); #endif return *(H225_IsupPrivatePartyNumber *)choice; } PBoolean H225_IsupNumber::CreateObject() { switch (tag) { case e_e164Number : choice = new H225_IsupPublicPartyNumber(); return TRUE; case e_dataPartyNumber : case e_telexPartyNumber : case e_nationalStandardPartyNumber : choice = new H225_IsupDigits(); return TRUE; case e_privateNumber : choice = new H225_IsupPrivatePartyNumber(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_IsupNumber::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_IsupNumber::Class()), PInvalidCast); #endif return new H225_IsupNumber(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_NatureOfAddress[]={ {"unknown",0} ,{"subscriberNumber",1} ,{"nationalNumber",2} ,{"internationalNumber",3} ,{"networkSpecificNumber",4} ,{"routingNumberNationalFormat",5} ,{"routingNumberNetworkSpecificFormat",6} ,{"routingNumberWithCalledDirectoryNumber",7} }; #endif // // NatureOfAddress // H225_NatureOfAddress::H225_NatureOfAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 8, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_NatureOfAddress,8 #endif ) { } PBoolean H225_NatureOfAddress::CreateObject() { choice = (tag <= e_routingNumberWithCalledDirectoryNumber) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H225_NatureOfAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_NatureOfAddress::Class()), PInvalidCast); #endif return new H225_NatureOfAddress(*this); } // // IsupDigits // H225_IsupDigits::H225_IsupDigits(unsigned tag, PASN_Object::TagClass tagClass) : PASN_IA5String(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 128); SetCharacterSet(PASN_Object::FixedConstraint, "0123456789ABCDE"); } H225_IsupDigits & H225_IsupDigits::operator=(const char * v) { SetValue(v); return *this; } H225_IsupDigits & H225_IsupDigits::operator=(const PString & v) { SetValue(v); return *this; } PObject * H225_IsupDigits::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_IsupDigits::Class()), PInvalidCast); #endif return new H225_IsupDigits(*this); } // // ExtendedAliasAddress // H225_ExtendedAliasAddress::H225_ExtendedAliasAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_ExtendedAliasAddress::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "address = " << setprecision(indent) << m_address << '\n'; if (HasOptionalField(e_presentationIndicator)) strm << setw(indent+24) << "presentationIndicator = " << setprecision(indent) << m_presentationIndicator << '\n'; if (HasOptionalField(e_screeningIndicator)) strm << setw(indent+21) << "screeningIndicator = " << setprecision(indent) << m_screeningIndicator << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_ExtendedAliasAddress::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_ExtendedAliasAddress), PInvalidCast); #endif const H225_ExtendedAliasAddress & other = (const H225_ExtendedAliasAddress &)obj; Comparison result; if ((result = m_address.Compare(other.m_address)) != EqualTo) return result; if ((result = m_presentationIndicator.Compare(other.m_presentationIndicator)) != EqualTo) return result; if ((result = m_screeningIndicator.Compare(other.m_screeningIndicator)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_ExtendedAliasAddress::GetDataLength() const { PINDEX length = 0; length += m_address.GetObjectLength(); if (HasOptionalField(e_presentationIndicator)) length += m_presentationIndicator.GetObjectLength(); if (HasOptionalField(e_screeningIndicator)) length += m_screeningIndicator.GetObjectLength(); return length; } PBoolean H225_ExtendedAliasAddress::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_address.Decode(strm)) return FALSE; if (HasOptionalField(e_presentationIndicator) && !m_presentationIndicator.Decode(strm)) return FALSE; if (HasOptionalField(e_screeningIndicator) && !m_screeningIndicator.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_ExtendedAliasAddress::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_address.Encode(strm); if (HasOptionalField(e_presentationIndicator)) m_presentationIndicator.Encode(strm); if (HasOptionalField(e_screeningIndicator)) m_screeningIndicator.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_ExtendedAliasAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ExtendedAliasAddress::Class()), PInvalidCast); #endif return new H225_ExtendedAliasAddress(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_UseSpecifiedTransport[]={ {"tcp",0} ,{"annexE",1} ,{"sctp",2} }; #endif // // UseSpecifiedTransport // H225_UseSpecifiedTransport::H225_UseSpecifiedTransport(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_UseSpecifiedTransport,3 #endif ) { } PBoolean H225_UseSpecifiedTransport::CreateObject() { choice = (tag <= e_sctp) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H225_UseSpecifiedTransport::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_UseSpecifiedTransport::Class()), PInvalidCast); #endif return new H225_UseSpecifiedTransport(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_SecurityServiceMode[]={ {"nonStandard",0} ,{"none",1} ,{"default",2} }; #endif // // SecurityServiceMode // H225_SecurityServiceMode::H225_SecurityServiceMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_SecurityServiceMode,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_SecurityServiceMode::operator H225_NonStandardParameter &() const #else H225_SecurityServiceMode::operator H225_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } H225_SecurityServiceMode::operator const H225_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } PBoolean H225_SecurityServiceMode::CreateObject() { switch (tag) { case e_nonStandard : choice = new H225_NonStandardParameter(); return TRUE; case e_none : case e_default : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_SecurityServiceMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_SecurityServiceMode::Class()), PInvalidCast); #endif return new H225_SecurityServiceMode(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_SecurityErrors[]={ {"securityWrongSyncTime",0} ,{"securityReplay",1} ,{"securityWrongGeneralID",2} ,{"securityWrongSendersID",3} ,{"securityIntegrityFailed",4} ,{"securityWrongOID",5} ,{"securityDHmismatch",6} ,{"securityCertificateExpired",7} ,{"securityCertificateDateInvalid",8} ,{"securityCertificateRevoked",9} ,{"securityCertificateNotReadable",10} ,{"securityCertificateSignatureInvalid",11} ,{"securityCertificateMissing",12} ,{"securityCertificateIncomplete",13} ,{"securityUnsupportedCertificateAlgOID",14} ,{"securityUnknownCA",15} }; #endif // // SecurityErrors // H225_SecurityErrors::H225_SecurityErrors(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 16, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_SecurityErrors,16 #endif ) { } PBoolean H225_SecurityErrors::CreateObject() { choice = (tag <= e_securityUnknownCA) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H225_SecurityErrors::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_SecurityErrors::Class()), PInvalidCast); #endif return new H225_SecurityErrors(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_SecurityErrors2[]={ {"securityWrongSyncTime",0} ,{"securityReplay",1} ,{"securityWrongGeneralID",2} ,{"securityWrongSendersID",3} ,{"securityIntegrityFailed",4} ,{"securityWrongOID",5} }; #endif // // SecurityErrors2 // H225_SecurityErrors2::H225_SecurityErrors2(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 6, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_SecurityErrors2,6 #endif ) { } PBoolean H225_SecurityErrors2::CreateObject() { choice = (tag <= e_securityWrongOID) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H225_SecurityErrors2::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_SecurityErrors2::Class()), PInvalidCast); #endif return new H225_SecurityErrors2(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_H245Security[]={ {"nonStandard",0} ,{"noSecurity",1} ,{"tls",2} ,{"ipsec",3} }; #endif // // H245Security // H225_H245Security::H225_H245Security(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_H245Security,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_H245Security::operator H225_NonStandardParameter &() const #else H225_H245Security::operator H225_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } H225_H245Security::operator const H225_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_H245Security::operator H225_SecurityCapabilities &() const #else H225_H245Security::operator H225_SecurityCapabilities &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SecurityCapabilities), PInvalidCast); #endif return *(H225_SecurityCapabilities *)choice; } H225_H245Security::operator const H225_SecurityCapabilities &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SecurityCapabilities), PInvalidCast); #endif return *(H225_SecurityCapabilities *)choice; } PBoolean H225_H245Security::CreateObject() { switch (tag) { case e_nonStandard : choice = new H225_NonStandardParameter(); return TRUE; case e_noSecurity : choice = new PASN_Null(); return TRUE; case e_tls : case e_ipsec : choice = new H225_SecurityCapabilities(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_H245Security::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_H245Security::Class()), PInvalidCast); #endif return new H225_H245Security(*this); } // // Q954Details // H225_Q954Details::H225_Q954Details(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_Q954Details::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+20) << "conferenceCalling = " << setprecision(indent) << m_conferenceCalling << '\n'; strm << setw(indent+20) << "threePartyService = " << setprecision(indent) << m_threePartyService << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_Q954Details::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_Q954Details), PInvalidCast); #endif const H225_Q954Details & other = (const H225_Q954Details &)obj; Comparison result; if ((result = m_conferenceCalling.Compare(other.m_conferenceCalling)) != EqualTo) return result; if ((result = m_threePartyService.Compare(other.m_threePartyService)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_Q954Details::GetDataLength() const { PINDEX length = 0; length += m_conferenceCalling.GetObjectLength(); length += m_threePartyService.GetObjectLength(); return length; } PBoolean H225_Q954Details::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_conferenceCalling.Decode(strm)) return FALSE; if (!m_threePartyService.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_Q954Details::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_conferenceCalling.Encode(strm); m_threePartyService.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_Q954Details::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_Q954Details::Class()), PInvalidCast); #endif return new H225_Q954Details(*this); } // // GloballyUniqueID // H225_GloballyUniqueID::H225_GloballyUniqueID(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 16); } H225_GloballyUniqueID::H225_GloballyUniqueID(const char * v) { SetValue(v); } H225_GloballyUniqueID::H225_GloballyUniqueID(const PString & v) { SetValue(v); } H225_GloballyUniqueID::H225_GloballyUniqueID(const PBYTEArray & v) { SetValue(v); } H225_GloballyUniqueID & H225_GloballyUniqueID::operator=(const char * v) { SetValue(v); return *this; } H225_GloballyUniqueID & H225_GloballyUniqueID::operator=(const PString & v) { SetValue(v); return *this; } H225_GloballyUniqueID & H225_GloballyUniqueID::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H225_GloballyUniqueID::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_GloballyUniqueID::Class()), PInvalidCast); #endif return new H225_GloballyUniqueID(*this); } // // ConferenceIdentifier // H225_ConferenceIdentifier::H225_ConferenceIdentifier(unsigned tag, PASN_Object::TagClass tagClass) : H225_GloballyUniqueID(tag, tagClass) { } H225_ConferenceIdentifier::H225_ConferenceIdentifier(const char * v) { SetValue(v); } H225_ConferenceIdentifier::H225_ConferenceIdentifier(const PString & v) { SetValue(v); } H225_ConferenceIdentifier::H225_ConferenceIdentifier(const PBYTEArray & v) { SetValue(v); } H225_ConferenceIdentifier & H225_ConferenceIdentifier::operator=(const char * v) { SetValue(v); return *this; } H225_ConferenceIdentifier & H225_ConferenceIdentifier::operator=(const PString & v) { SetValue(v); return *this; } H225_ConferenceIdentifier & H225_ConferenceIdentifier::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H225_ConferenceIdentifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ConferenceIdentifier::Class()), PInvalidCast); #endif return new H225_ConferenceIdentifier(*this); } // // RequestSeqNum // H225_RequestSeqNum::H225_RequestSeqNum(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } H225_RequestSeqNum & H225_RequestSeqNum::operator=(int v) { SetValue(v); return *this; } H225_RequestSeqNum & H225_RequestSeqNum::operator=(unsigned v) { SetValue(v); return *this; } PObject * H225_RequestSeqNum::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_RequestSeqNum::Class()), PInvalidCast); #endif return new H225_RequestSeqNum(*this); } // // GatekeeperIdentifier // H225_GatekeeperIdentifier::H225_GatekeeperIdentifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_BMPString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 128); } H225_GatekeeperIdentifier & H225_GatekeeperIdentifier::operator=(const char * v) { SetValue(v); return *this; } H225_GatekeeperIdentifier & H225_GatekeeperIdentifier::operator=(const PString & v) { SetValue(v); return *this; } H225_GatekeeperIdentifier & H225_GatekeeperIdentifier::operator=(const PWCharArray & v) { SetValue(v); return *this; } H225_GatekeeperIdentifier & H225_GatekeeperIdentifier::operator=(const PASN_BMPString & v) { SetValue(v); return *this; } PObject * H225_GatekeeperIdentifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_GatekeeperIdentifier::Class()), PInvalidCast); #endif return new H225_GatekeeperIdentifier(*this); } // // BandWidth // H225_BandWidth::H225_BandWidth(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); } H225_BandWidth & H225_BandWidth::operator=(int v) { SetValue(v); return *this; } H225_BandWidth & H225_BandWidth::operator=(unsigned v) { SetValue(v); return *this; } PObject * H225_BandWidth::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_BandWidth::Class()), PInvalidCast); #endif return new H225_BandWidth(*this); } // // CallReferenceValue // H225_CallReferenceValue::H225_CallReferenceValue(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } H225_CallReferenceValue & H225_CallReferenceValue::operator=(int v) { SetValue(v); return *this; } H225_CallReferenceValue & H225_CallReferenceValue::operator=(unsigned v) { SetValue(v); return *this; } PObject * H225_CallReferenceValue::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CallReferenceValue::Class()), PInvalidCast); #endif return new H225_CallReferenceValue(*this); } // // EndpointIdentifier // H225_EndpointIdentifier::H225_EndpointIdentifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_BMPString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 128); } H225_EndpointIdentifier & H225_EndpointIdentifier::operator=(const char * v) { SetValue(v); return *this; } H225_EndpointIdentifier & H225_EndpointIdentifier::operator=(const PString & v) { SetValue(v); return *this; } H225_EndpointIdentifier & H225_EndpointIdentifier::operator=(const PWCharArray & v) { SetValue(v); return *this; } H225_EndpointIdentifier & H225_EndpointIdentifier::operator=(const PASN_BMPString & v) { SetValue(v); return *this; } PObject * H225_EndpointIdentifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_EndpointIdentifier::Class()), PInvalidCast); #endif return new H225_EndpointIdentifier(*this); } // // ProtocolIdentifier // H225_ProtocolIdentifier::H225_ProtocolIdentifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_ObjectId(tag, tagClass) { } PObject * H225_ProtocolIdentifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ProtocolIdentifier::Class()), PInvalidCast); #endif return new H225_ProtocolIdentifier(*this); } // // TimeToLive // H225_TimeToLive::H225_TimeToLive(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 4294967295U); } H225_TimeToLive & H225_TimeToLive::operator=(int v) { SetValue(v); return *this; } H225_TimeToLive & H225_TimeToLive::operator=(unsigned v) { SetValue(v); return *this; } PObject * H225_TimeToLive::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_TimeToLive::Class()), PInvalidCast); #endif return new H225_TimeToLive(*this); } // // H248PackagesDescriptor // H225_H248PackagesDescriptor::H225_H248PackagesDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { } H225_H248PackagesDescriptor::H225_H248PackagesDescriptor(const char * v) { SetValue(v); } H225_H248PackagesDescriptor::H225_H248PackagesDescriptor(const PString & v) { SetValue(v); } H225_H248PackagesDescriptor::H225_H248PackagesDescriptor(const PBYTEArray & v) { SetValue(v); } H225_H248PackagesDescriptor & H225_H248PackagesDescriptor::operator=(const char * v) { SetValue(v); return *this; } H225_H248PackagesDescriptor & H225_H248PackagesDescriptor::operator=(const PString & v) { SetValue(v); return *this; } H225_H248PackagesDescriptor & H225_H248PackagesDescriptor::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H225_H248PackagesDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_H248PackagesDescriptor::Class()), PInvalidCast); #endif return new H225_H248PackagesDescriptor(*this); } // // H248SignalsDescriptor // H225_H248SignalsDescriptor::H225_H248SignalsDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { } H225_H248SignalsDescriptor::H225_H248SignalsDescriptor(const char * v) { SetValue(v); } H225_H248SignalsDescriptor::H225_H248SignalsDescriptor(const PString & v) { SetValue(v); } H225_H248SignalsDescriptor::H225_H248SignalsDescriptor(const PBYTEArray & v) { SetValue(v); } H225_H248SignalsDescriptor & H225_H248SignalsDescriptor::operator=(const char * v) { SetValue(v); return *this; } H225_H248SignalsDescriptor & H225_H248SignalsDescriptor::operator=(const PString & v) { SetValue(v); return *this; } H225_H248SignalsDescriptor & H225_H248SignalsDescriptor::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H225_H248SignalsDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_H248SignalsDescriptor::Class()), PInvalidCast); #endif return new H225_H248SignalsDescriptor(*this); } // // CallIdentifier // H225_CallIdentifier::H225_CallIdentifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_CallIdentifier::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "guid = " << setprecision(indent) << m_guid << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_CallIdentifier::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_CallIdentifier), PInvalidCast); #endif const H225_CallIdentifier & other = (const H225_CallIdentifier &)obj; Comparison result; if ((result = m_guid.Compare(other.m_guid)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_CallIdentifier::GetDataLength() const { PINDEX length = 0; length += m_guid.GetObjectLength(); return length; } PBoolean H225_CallIdentifier::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_guid.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_CallIdentifier::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_guid.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_CallIdentifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CallIdentifier::Class()), PInvalidCast); #endif return new H225_CallIdentifier(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_EncryptIntAlg[]={ {"nonStandard",0} ,{"isoAlgorithm",1} }; #endif // // EncryptIntAlg // H225_EncryptIntAlg::H225_EncryptIntAlg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_EncryptIntAlg,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_EncryptIntAlg::operator H225_NonStandardParameter &() const #else H225_EncryptIntAlg::operator H225_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } H225_EncryptIntAlg::operator const H225_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } PBoolean H225_EncryptIntAlg::CreateObject() { switch (tag) { case e_nonStandard : choice = new H225_NonStandardParameter(); return TRUE; case e_isoAlgorithm : choice = new PASN_ObjectId(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_EncryptIntAlg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_EncryptIntAlg::Class()), PInvalidCast); #endif return new H225_EncryptIntAlg(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_NonIsoIntegrityMechanism[]={ {"hMAC_MD5",0} ,{"hMAC_iso10118_2_s",1} ,{"hMAC_iso10118_2_l",2} ,{"hMAC_iso10118_3",3} }; #endif // // NonIsoIntegrityMechanism // H225_NonIsoIntegrityMechanism::H225_NonIsoIntegrityMechanism(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_NonIsoIntegrityMechanism,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_NonIsoIntegrityMechanism::operator H225_EncryptIntAlg &() const #else H225_NonIsoIntegrityMechanism::operator H225_EncryptIntAlg &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_EncryptIntAlg), PInvalidCast); #endif return *(H225_EncryptIntAlg *)choice; } H225_NonIsoIntegrityMechanism::operator const H225_EncryptIntAlg &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_EncryptIntAlg), PInvalidCast); #endif return *(H225_EncryptIntAlg *)choice; } PBoolean H225_NonIsoIntegrityMechanism::CreateObject() { switch (tag) { case e_hMAC_MD5 : choice = new PASN_Null(); return TRUE; case e_hMAC_iso10118_2_s : case e_hMAC_iso10118_2_l : choice = new H225_EncryptIntAlg(); return TRUE; case e_hMAC_iso10118_3 : choice = new PASN_ObjectId(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_NonIsoIntegrityMechanism::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_NonIsoIntegrityMechanism::Class()), PInvalidCast); #endif return new H225_NonIsoIntegrityMechanism(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_IntegrityMechanism[]={ {"nonStandard",0} ,{"digSig",1} ,{"iso9797",2} ,{"nonIsoIM",3} }; #endif // // IntegrityMechanism // H225_IntegrityMechanism::H225_IntegrityMechanism(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_IntegrityMechanism,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_IntegrityMechanism::operator H225_NonStandardParameter &() const #else H225_IntegrityMechanism::operator H225_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } H225_IntegrityMechanism::operator const H225_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_IntegrityMechanism::operator H225_NonIsoIntegrityMechanism &() const #else H225_IntegrityMechanism::operator H225_NonIsoIntegrityMechanism &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonIsoIntegrityMechanism), PInvalidCast); #endif return *(H225_NonIsoIntegrityMechanism *)choice; } H225_IntegrityMechanism::operator const H225_NonIsoIntegrityMechanism &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonIsoIntegrityMechanism), PInvalidCast); #endif return *(H225_NonIsoIntegrityMechanism *)choice; } PBoolean H225_IntegrityMechanism::CreateObject() { switch (tag) { case e_nonStandard : choice = new H225_NonStandardParameter(); return TRUE; case e_digSig : choice = new PASN_Null(); return TRUE; case e_iso9797 : choice = new PASN_ObjectId(); return TRUE; case e_nonIsoIM : choice = new H225_NonIsoIntegrityMechanism(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_IntegrityMechanism::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_IntegrityMechanism::Class()), PInvalidCast); #endif return new H225_IntegrityMechanism(*this); } // // ICV // H225_ICV::H225_ICV(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H225_ICV::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "algorithmOID = " << setprecision(indent) << m_algorithmOID << '\n'; strm << setw(indent+6) << "icv = " << setprecision(indent) << m_icv << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_ICV::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_ICV), PInvalidCast); #endif const H225_ICV & other = (const H225_ICV &)obj; Comparison result; if ((result = m_algorithmOID.Compare(other.m_algorithmOID)) != EqualTo) return result; if ((result = m_icv.Compare(other.m_icv)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_ICV::GetDataLength() const { PINDEX length = 0; length += m_algorithmOID.GetObjectLength(); length += m_icv.GetObjectLength(); return length; } PBoolean H225_ICV::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_algorithmOID.Decode(strm)) return FALSE; if (!m_icv.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_ICV::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_algorithmOID.Encode(strm); m_icv.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_ICV::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ICV::Class()), PInvalidCast); #endif return new H225_ICV(*this); } // // FastStartToken // H225_FastStartToken::H225_FastStartToken(unsigned tag, PASN_Object::TagClass tagClass) : H235_ClearToken(tag, tagClass) { IncludeOptionalField(e_generalID); IncludeOptionalField(e_dhkey); IncludeOptionalField(e_timeStamp); } PObject * H225_FastStartToken::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_FastStartToken::Class()), PInvalidCast); #endif return new H225_FastStartToken(*this); } // // EncodedFastStartToken // H225_EncodedFastStartToken::H225_EncodedFastStartToken(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { } PObject * H225_EncodedFastStartToken::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_EncodedFastStartToken::Class()), PInvalidCast); #endif return new H225_EncodedFastStartToken(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_CryptoH323Token[]={ {"cryptoEPPwdHash",0} ,{"cryptoGKPwdHash",1} ,{"cryptoEPPwdEncr",2} ,{"cryptoGKPwdEncr",3} ,{"cryptoEPCert",4} ,{"cryptoGKCert",5} ,{"cryptoFastStart",6} ,{"nestedcryptoToken",7} }; #endif // // CryptoH323Token // H225_CryptoH323Token::H225_CryptoH323Token(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 8, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_CryptoH323Token,8 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_CryptoH323Token::operator H225_CryptoH323Token_cryptoEPPwdHash &() const #else H225_CryptoH323Token::operator H225_CryptoH323Token_cryptoEPPwdHash &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_CryptoH323Token_cryptoEPPwdHash), PInvalidCast); #endif return *(H225_CryptoH323Token_cryptoEPPwdHash *)choice; } H225_CryptoH323Token::operator const H225_CryptoH323Token_cryptoEPPwdHash &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_CryptoH323Token_cryptoEPPwdHash), PInvalidCast); #endif return *(H225_CryptoH323Token_cryptoEPPwdHash *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_CryptoH323Token::operator H225_CryptoH323Token_cryptoGKPwdHash &() const #else H225_CryptoH323Token::operator H225_CryptoH323Token_cryptoGKPwdHash &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_CryptoH323Token_cryptoGKPwdHash), PInvalidCast); #endif return *(H225_CryptoH323Token_cryptoGKPwdHash *)choice; } H225_CryptoH323Token::operator const H225_CryptoH323Token_cryptoGKPwdHash &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_CryptoH323Token_cryptoGKPwdHash), PInvalidCast); #endif return *(H225_CryptoH323Token_cryptoGKPwdHash *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_CryptoH323Token::operator H235_ENCRYPTED &() const #else H225_CryptoH323Token::operator H235_ENCRYPTED &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_ENCRYPTED), PInvalidCast); #endif return *(H235_ENCRYPTED *)choice; } H225_CryptoH323Token::operator const H235_ENCRYPTED &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_ENCRYPTED), PInvalidCast); #endif return *(H235_ENCRYPTED *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_CryptoH323Token::operator H235_SIGNED &() const #else H225_CryptoH323Token::operator H235_SIGNED &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_SIGNED), PInvalidCast); #endif return *(H235_SIGNED *)choice; } H225_CryptoH323Token::operator const H235_SIGNED &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_SIGNED), PInvalidCast); #endif return *(H235_SIGNED *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_CryptoH323Token::operator H235_SIGNED &() const #else H225_CryptoH323Token::operator H235_SIGNED &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_SIGNED), PInvalidCast); #endif return *(H235_SIGNED *)choice; } H225_CryptoH323Token::operator const H235_SIGNED &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_SIGNED), PInvalidCast); #endif return *(H235_SIGNED *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_CryptoH323Token::operator H235_CryptoToken &() const #else H225_CryptoH323Token::operator H235_CryptoToken &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_CryptoToken), PInvalidCast); #endif return *(H235_CryptoToken *)choice; } H225_CryptoH323Token::operator const H235_CryptoToken &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_CryptoToken), PInvalidCast); #endif return *(H235_CryptoToken *)choice; } PBoolean H225_CryptoH323Token::CreateObject() { switch (tag) { case e_cryptoEPPwdHash : choice = new H225_CryptoH323Token_cryptoEPPwdHash(); return TRUE; case e_cryptoGKPwdHash : choice = new H225_CryptoH323Token_cryptoGKPwdHash(); return TRUE; case e_cryptoEPPwdEncr : case e_cryptoGKPwdEncr : choice = new H235_ENCRYPTED(); return TRUE; case e_cryptoEPCert : case e_cryptoGKCert : choice = new H235_SIGNED(); return TRUE; case e_cryptoFastStart : choice = new H235_SIGNED(); return TRUE; case e_nestedcryptoToken : choice = new H235_CryptoToken(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_CryptoH323Token::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CryptoH323Token::Class()), PInvalidCast); #endif return new H225_CryptoH323Token(*this); } // // CallLinkage // H225_CallLinkage::H225_CallLinkage(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_CallLinkage::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_globalCallId)) strm << setw(indent+15) << "globalCallId = " << setprecision(indent) << m_globalCallId << '\n'; if (HasOptionalField(e_threadId)) strm << setw(indent+11) << "threadId = " << setprecision(indent) << m_threadId << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_CallLinkage::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_CallLinkage), PInvalidCast); #endif const H225_CallLinkage & other = (const H225_CallLinkage &)obj; Comparison result; if ((result = m_globalCallId.Compare(other.m_globalCallId)) != EqualTo) return result; if ((result = m_threadId.Compare(other.m_threadId)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_CallLinkage::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_globalCallId)) length += m_globalCallId.GetObjectLength(); if (HasOptionalField(e_threadId)) length += m_threadId.GetObjectLength(); return length; } PBoolean H225_CallLinkage::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_globalCallId) && !m_globalCallId.Decode(strm)) return FALSE; if (HasOptionalField(e_threadId) && !m_threadId.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_CallLinkage::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_globalCallId)) m_globalCallId.Encode(strm); if (HasOptionalField(e_threadId)) m_threadId.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_CallLinkage::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CallLinkage::Class()), PInvalidCast); #endif return new H225_CallLinkage(*this); } // // CapacityReportingCapability // H225_CapacityReportingCapability::H225_CapacityReportingCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_CapacityReportingCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "canReportCallCapacity = " << setprecision(indent) << m_canReportCallCapacity << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_CapacityReportingCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_CapacityReportingCapability), PInvalidCast); #endif const H225_CapacityReportingCapability & other = (const H225_CapacityReportingCapability &)obj; Comparison result; if ((result = m_canReportCallCapacity.Compare(other.m_canReportCallCapacity)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_CapacityReportingCapability::GetDataLength() const { PINDEX length = 0; length += m_canReportCallCapacity.GetObjectLength(); return length; } PBoolean H225_CapacityReportingCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_canReportCallCapacity.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_CapacityReportingCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_canReportCallCapacity.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_CapacityReportingCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CapacityReportingCapability::Class()), PInvalidCast); #endif return new H225_CapacityReportingCapability(*this); } // // CarrierInfo // H225_CarrierInfo::H225_CarrierInfo(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_carrierIdentificationCode.SetConstraints(PASN_Object::FixedConstraint, 3, 4); m_carrierName.SetConstraints(PASN_Object::FixedConstraint, 1, 128); } #ifndef PASN_NOPRINTON void H225_CarrierInfo::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_carrierIdentificationCode)) strm << setw(indent+28) << "carrierIdentificationCode = " << setprecision(indent) << m_carrierIdentificationCode << '\n'; if (HasOptionalField(e_carrierName)) strm << setw(indent+14) << "carrierName = " << setprecision(indent) << m_carrierName << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_CarrierInfo::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_CarrierInfo), PInvalidCast); #endif const H225_CarrierInfo & other = (const H225_CarrierInfo &)obj; Comparison result; if ((result = m_carrierIdentificationCode.Compare(other.m_carrierIdentificationCode)) != EqualTo) return result; if ((result = m_carrierName.Compare(other.m_carrierName)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_CarrierInfo::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_carrierIdentificationCode)) length += m_carrierIdentificationCode.GetObjectLength(); if (HasOptionalField(e_carrierName)) length += m_carrierName.GetObjectLength(); return length; } PBoolean H225_CarrierInfo::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_carrierIdentificationCode) && !m_carrierIdentificationCode.Decode(strm)) return FALSE; if (HasOptionalField(e_carrierName) && !m_carrierName.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_CarrierInfo::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_carrierIdentificationCode)) m_carrierIdentificationCode.Encode(strm); if (HasOptionalField(e_carrierName)) m_carrierName.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_CarrierInfo::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CarrierInfo::Class()), PInvalidCast); #endif return new H225_CarrierInfo(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_ServiceControlDescriptor[]={ {"url",0} ,{"signal",1} ,{"nonStandard",2} ,{"callCreditServiceControl",3} }; #endif // // ServiceControlDescriptor // H225_ServiceControlDescriptor::H225_ServiceControlDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_ServiceControlDescriptor,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_ServiceControlDescriptor::operator H225_H248SignalsDescriptor &() const #else H225_ServiceControlDescriptor::operator H225_H248SignalsDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_H248SignalsDescriptor), PInvalidCast); #endif return *(H225_H248SignalsDescriptor *)choice; } H225_ServiceControlDescriptor::operator const H225_H248SignalsDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_H248SignalsDescriptor), PInvalidCast); #endif return *(H225_H248SignalsDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_ServiceControlDescriptor::operator H225_NonStandardParameter &() const #else H225_ServiceControlDescriptor::operator H225_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } H225_ServiceControlDescriptor::operator const H225_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_ServiceControlDescriptor::operator H225_CallCreditServiceControl &() const #else H225_ServiceControlDescriptor::operator H225_CallCreditServiceControl &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_CallCreditServiceControl), PInvalidCast); #endif return *(H225_CallCreditServiceControl *)choice; } H225_ServiceControlDescriptor::operator const H225_CallCreditServiceControl &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_CallCreditServiceControl), PInvalidCast); #endif return *(H225_CallCreditServiceControl *)choice; } PBoolean H225_ServiceControlDescriptor::CreateObject() { switch (tag) { case e_url : choice = new PASN_IA5String(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 512); return TRUE; case e_signal : choice = new H225_H248SignalsDescriptor(); return TRUE; case e_nonStandard : choice = new H225_NonStandardParameter(); return TRUE; case e_callCreditServiceControl : choice = new H225_CallCreditServiceControl(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_ServiceControlDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ServiceControlDescriptor::Class()), PInvalidCast); #endif return new H225_ServiceControlDescriptor(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_CallTerminationCause[]={ {"releaseCompleteReason",0} ,{"releaseCompleteCauseIE",1} }; #endif // // CallTerminationCause // H225_CallTerminationCause::H225_CallTerminationCause(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_CallTerminationCause,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_CallTerminationCause::operator H225_ReleaseCompleteReason &() const #else H225_CallTerminationCause::operator H225_ReleaseCompleteReason &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ReleaseCompleteReason), PInvalidCast); #endif return *(H225_ReleaseCompleteReason *)choice; } H225_CallTerminationCause::operator const H225_ReleaseCompleteReason &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ReleaseCompleteReason), PInvalidCast); #endif return *(H225_ReleaseCompleteReason *)choice; } PBoolean H225_CallTerminationCause::CreateObject() { switch (tag) { case e_releaseCompleteReason : choice = new H225_ReleaseCompleteReason(); return TRUE; case e_releaseCompleteCauseIE : choice = new PASN_OctetString(); choice->SetConstraints(PASN_Object::FixedConstraint, 2, 32); return TRUE; } choice = NULL; return FALSE; } PObject * H225_CallTerminationCause::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CallTerminationCause::Class()), PInvalidCast); #endif return new H225_CallTerminationCause(*this); } // // CallCreditCapability // H225_CallCreditCapability::H225_CallCreditCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_CallCreditCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_canDisplayAmountString)) strm << setw(indent+25) << "canDisplayAmountString = " << setprecision(indent) << m_canDisplayAmountString << '\n'; if (HasOptionalField(e_canEnforceDurationLimit)) strm << setw(indent+26) << "canEnforceDurationLimit = " << setprecision(indent) << m_canEnforceDurationLimit << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_CallCreditCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_CallCreditCapability), PInvalidCast); #endif const H225_CallCreditCapability & other = (const H225_CallCreditCapability &)obj; Comparison result; if ((result = m_canDisplayAmountString.Compare(other.m_canDisplayAmountString)) != EqualTo) return result; if ((result = m_canEnforceDurationLimit.Compare(other.m_canEnforceDurationLimit)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_CallCreditCapability::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_canDisplayAmountString)) length += m_canDisplayAmountString.GetObjectLength(); if (HasOptionalField(e_canEnforceDurationLimit)) length += m_canEnforceDurationLimit.GetObjectLength(); return length; } PBoolean H225_CallCreditCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_canDisplayAmountString) && !m_canDisplayAmountString.Decode(strm)) return FALSE; if (HasOptionalField(e_canEnforceDurationLimit) && !m_canEnforceDurationLimit.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_CallCreditCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_canDisplayAmountString)) m_canDisplayAmountString.Encode(strm); if (HasOptionalField(e_canEnforceDurationLimit)) m_canEnforceDurationLimit.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_CallCreditCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CallCreditCapability::Class()), PInvalidCast); #endif return new H225_CallCreditCapability(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_GenericIdentifier[]={ {"standard",0} ,{"oid",1} ,{"nonStandard",2} }; #endif // // GenericIdentifier // H225_GenericIdentifier::H225_GenericIdentifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_GenericIdentifier,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_GenericIdentifier::operator H225_GloballyUniqueID &() const #else H225_GenericIdentifier::operator H225_GloballyUniqueID &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_GloballyUniqueID), PInvalidCast); #endif return *(H225_GloballyUniqueID *)choice; } H225_GenericIdentifier::operator const H225_GloballyUniqueID &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_GloballyUniqueID), PInvalidCast); #endif return *(H225_GloballyUniqueID *)choice; } PBoolean H225_GenericIdentifier::CreateObject() { switch (tag) { case e_standard : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::ExtendableConstraint, 0, 16383); return TRUE; case e_oid : choice = new PASN_ObjectId(); return TRUE; case e_nonStandard : choice = new H225_GloballyUniqueID(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_GenericIdentifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_GenericIdentifier::Class()), PInvalidCast); #endif return new H225_GenericIdentifier(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_Content[]={ {"raw",0} ,{"text",1} ,{"unicode",2} ,{"bool",3} ,{"number8",4} ,{"number16",5} ,{"number32",6} ,{"id",7} ,{"alias",8} ,{"transport",9} ,{"compound",10} ,{"nested",11} }; #endif // // Content // H225_Content::H225_Content(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 12, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_Content,12 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_Content::operator H225_GenericIdentifier &() const #else H225_Content::operator H225_GenericIdentifier &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_GenericIdentifier), PInvalidCast); #endif return *(H225_GenericIdentifier *)choice; } H225_Content::operator const H225_GenericIdentifier &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_GenericIdentifier), PInvalidCast); #endif return *(H225_GenericIdentifier *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_Content::operator H225_AliasAddress &() const #else H225_Content::operator H225_AliasAddress &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_AliasAddress), PInvalidCast); #endif return *(H225_AliasAddress *)choice; } H225_Content::operator const H225_AliasAddress &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_AliasAddress), PInvalidCast); #endif return *(H225_AliasAddress *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_Content::operator H225_TransportAddress &() const #else H225_Content::operator H225_TransportAddress &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_TransportAddress), PInvalidCast); #endif return *(H225_TransportAddress *)choice; } H225_Content::operator const H225_TransportAddress &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_TransportAddress), PInvalidCast); #endif return *(H225_TransportAddress *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_Content::operator H225_ArrayOf_EnumeratedParameter &() const #else H225_Content::operator H225_ArrayOf_EnumeratedParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ArrayOf_EnumeratedParameter), PInvalidCast); #endif return *(H225_ArrayOf_EnumeratedParameter *)choice; } H225_Content::operator const H225_ArrayOf_EnumeratedParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ArrayOf_EnumeratedParameter), PInvalidCast); #endif return *(H225_ArrayOf_EnumeratedParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_Content::operator H225_ArrayOf_GenericData &() const #else H225_Content::operator H225_ArrayOf_GenericData &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ArrayOf_GenericData), PInvalidCast); #endif return *(H225_ArrayOf_GenericData *)choice; } H225_Content::operator const H225_ArrayOf_GenericData &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ArrayOf_GenericData), PInvalidCast); #endif return *(H225_ArrayOf_GenericData *)choice; } PBoolean H225_Content::CreateObject() { switch (tag) { case e_raw : choice = new PASN_OctetString(); return TRUE; case e_text : choice = new PASN_IA5String(); return TRUE; case e_unicode : choice = new PASN_BMPString(); return TRUE; case e_bool : choice = new PASN_Boolean(); return TRUE; case e_number8 : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 255); return TRUE; case e_number16 : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 65535); return TRUE; case e_number32 : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); return TRUE; case e_id : choice = new H225_GenericIdentifier(); return TRUE; case e_alias : choice = new H225_AliasAddress(); return TRUE; case e_transport : choice = new H225_TransportAddress(); return TRUE; case e_compound : choice = new H225_ArrayOf_EnumeratedParameter(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 512); return TRUE; case e_nested : choice = new H225_ArrayOf_GenericData(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 16); return TRUE; } choice = NULL; return FALSE; } PObject * H225_Content::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_Content::Class()), PInvalidCast); #endif return new H225_Content(*this); } // // TransportChannelInfo // H225_TransportChannelInfo::H225_TransportChannelInfo(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_TransportChannelInfo::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_sendAddress)) strm << setw(indent+14) << "sendAddress = " << setprecision(indent) << m_sendAddress << '\n'; if (HasOptionalField(e_recvAddress)) strm << setw(indent+14) << "recvAddress = " << setprecision(indent) << m_recvAddress << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_TransportChannelInfo::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_TransportChannelInfo), PInvalidCast); #endif const H225_TransportChannelInfo & other = (const H225_TransportChannelInfo &)obj; Comparison result; if ((result = m_sendAddress.Compare(other.m_sendAddress)) != EqualTo) return result; if ((result = m_recvAddress.Compare(other.m_recvAddress)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_TransportChannelInfo::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_sendAddress)) length += m_sendAddress.GetObjectLength(); if (HasOptionalField(e_recvAddress)) length += m_recvAddress.GetObjectLength(); return length; } PBoolean H225_TransportChannelInfo::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_sendAddress) && !m_sendAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_recvAddress) && !m_recvAddress.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_TransportChannelInfo::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_sendAddress)) m_sendAddress.Encode(strm); if (HasOptionalField(e_recvAddress)) m_recvAddress.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_TransportChannelInfo::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_TransportChannelInfo::Class()), PInvalidCast); #endif return new H225_TransportChannelInfo(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_RehomingModel[]={ {"gatekeeperBased",0} ,{"endpointBased",1} }; #endif // // RehomingModel // H225_RehomingModel::H225_RehomingModel(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_RehomingModel,2 #endif ) { } PBoolean H225_RehomingModel::CreateObject() { choice = (tag <= e_endpointBased) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H225_RehomingModel::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_RehomingModel::Class()), PInvalidCast); #endif return new H225_RehomingModel(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_RasMessage[]={ {"gatekeeperRequest",0} ,{"gatekeeperConfirm",1} ,{"gatekeeperReject",2} ,{"registrationRequest",3} ,{"registrationConfirm",4} ,{"registrationReject",5} ,{"unregistrationRequest",6} ,{"unregistrationConfirm",7} ,{"unregistrationReject",8} ,{"admissionRequest",9} ,{"admissionConfirm",10} ,{"admissionReject",11} ,{"bandwidthRequest",12} ,{"bandwidthConfirm",13} ,{"bandwidthReject",14} ,{"disengageRequest",15} ,{"disengageConfirm",16} ,{"disengageReject",17} ,{"locationRequest",18} ,{"locationConfirm",19} ,{"locationReject",20} ,{"infoRequest",21} ,{"infoRequestResponse",22} ,{"nonStandardMessage",23} ,{"unknownMessageResponse",24} ,{"requestInProgress",25} ,{"resourcesAvailableIndicate",26} ,{"resourcesAvailableConfirm",27} ,{"infoRequestAck",28} ,{"infoRequestNak",29} ,{"serviceControlIndication",30} ,{"serviceControlResponse",31} ,{"admissionConfirmSequence",32} }; #endif // // RasMessage // H225_RasMessage::H225_RasMessage(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 25, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_RasMessage,33 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_GatekeeperRequest &() const #else H225_RasMessage::operator H225_GatekeeperRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_GatekeeperRequest), PInvalidCast); #endif return *(H225_GatekeeperRequest *)choice; } H225_RasMessage::operator const H225_GatekeeperRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_GatekeeperRequest), PInvalidCast); #endif return *(H225_GatekeeperRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_GatekeeperConfirm &() const #else H225_RasMessage::operator H225_GatekeeperConfirm &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_GatekeeperConfirm), PInvalidCast); #endif return *(H225_GatekeeperConfirm *)choice; } H225_RasMessage::operator const H225_GatekeeperConfirm &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_GatekeeperConfirm), PInvalidCast); #endif return *(H225_GatekeeperConfirm *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_GatekeeperReject &() const #else H225_RasMessage::operator H225_GatekeeperReject &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_GatekeeperReject), PInvalidCast); #endif return *(H225_GatekeeperReject *)choice; } H225_RasMessage::operator const H225_GatekeeperReject &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_GatekeeperReject), PInvalidCast); #endif return *(H225_GatekeeperReject *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_RegistrationRequest &() const #else H225_RasMessage::operator H225_RegistrationRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_RegistrationRequest), PInvalidCast); #endif return *(H225_RegistrationRequest *)choice; } H225_RasMessage::operator const H225_RegistrationRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_RegistrationRequest), PInvalidCast); #endif return *(H225_RegistrationRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_RegistrationConfirm &() const #else H225_RasMessage::operator H225_RegistrationConfirm &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_RegistrationConfirm), PInvalidCast); #endif return *(H225_RegistrationConfirm *)choice; } H225_RasMessage::operator const H225_RegistrationConfirm &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_RegistrationConfirm), PInvalidCast); #endif return *(H225_RegistrationConfirm *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_RegistrationReject &() const #else H225_RasMessage::operator H225_RegistrationReject &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_RegistrationReject), PInvalidCast); #endif return *(H225_RegistrationReject *)choice; } H225_RasMessage::operator const H225_RegistrationReject &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_RegistrationReject), PInvalidCast); #endif return *(H225_RegistrationReject *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_UnregistrationRequest &() const #else H225_RasMessage::operator H225_UnregistrationRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_UnregistrationRequest), PInvalidCast); #endif return *(H225_UnregistrationRequest *)choice; } H225_RasMessage::operator const H225_UnregistrationRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_UnregistrationRequest), PInvalidCast); #endif return *(H225_UnregistrationRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_UnregistrationConfirm &() const #else H225_RasMessage::operator H225_UnregistrationConfirm &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_UnregistrationConfirm), PInvalidCast); #endif return *(H225_UnregistrationConfirm *)choice; } H225_RasMessage::operator const H225_UnregistrationConfirm &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_UnregistrationConfirm), PInvalidCast); #endif return *(H225_UnregistrationConfirm *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_UnregistrationReject &() const #else H225_RasMessage::operator H225_UnregistrationReject &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_UnregistrationReject), PInvalidCast); #endif return *(H225_UnregistrationReject *)choice; } H225_RasMessage::operator const H225_UnregistrationReject &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_UnregistrationReject), PInvalidCast); #endif return *(H225_UnregistrationReject *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_AdmissionRequest &() const #else H225_RasMessage::operator H225_AdmissionRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_AdmissionRequest), PInvalidCast); #endif return *(H225_AdmissionRequest *)choice; } H225_RasMessage::operator const H225_AdmissionRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_AdmissionRequest), PInvalidCast); #endif return *(H225_AdmissionRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_AdmissionConfirm &() const #else H225_RasMessage::operator H225_AdmissionConfirm &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_AdmissionConfirm), PInvalidCast); #endif return *(H225_AdmissionConfirm *)choice; } H225_RasMessage::operator const H225_AdmissionConfirm &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_AdmissionConfirm), PInvalidCast); #endif return *(H225_AdmissionConfirm *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_AdmissionReject &() const #else H225_RasMessage::operator H225_AdmissionReject &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_AdmissionReject), PInvalidCast); #endif return *(H225_AdmissionReject *)choice; } H225_RasMessage::operator const H225_AdmissionReject &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_AdmissionReject), PInvalidCast); #endif return *(H225_AdmissionReject *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_BandwidthRequest &() const #else H225_RasMessage::operator H225_BandwidthRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_BandwidthRequest), PInvalidCast); #endif return *(H225_BandwidthRequest *)choice; } H225_RasMessage::operator const H225_BandwidthRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_BandwidthRequest), PInvalidCast); #endif return *(H225_BandwidthRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_BandwidthConfirm &() const #else H225_RasMessage::operator H225_BandwidthConfirm &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_BandwidthConfirm), PInvalidCast); #endif return *(H225_BandwidthConfirm *)choice; } H225_RasMessage::operator const H225_BandwidthConfirm &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_BandwidthConfirm), PInvalidCast); #endif return *(H225_BandwidthConfirm *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_BandwidthReject &() const #else H225_RasMessage::operator H225_BandwidthReject &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_BandwidthReject), PInvalidCast); #endif return *(H225_BandwidthReject *)choice; } H225_RasMessage::operator const H225_BandwidthReject &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_BandwidthReject), PInvalidCast); #endif return *(H225_BandwidthReject *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_DisengageRequest &() const #else H225_RasMessage::operator H225_DisengageRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_DisengageRequest), PInvalidCast); #endif return *(H225_DisengageRequest *)choice; } H225_RasMessage::operator const H225_DisengageRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_DisengageRequest), PInvalidCast); #endif return *(H225_DisengageRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_DisengageConfirm &() const #else H225_RasMessage::operator H225_DisengageConfirm &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_DisengageConfirm), PInvalidCast); #endif return *(H225_DisengageConfirm *)choice; } H225_RasMessage::operator const H225_DisengageConfirm &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_DisengageConfirm), PInvalidCast); #endif return *(H225_DisengageConfirm *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_DisengageReject &() const #else H225_RasMessage::operator H225_DisengageReject &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_DisengageReject), PInvalidCast); #endif return *(H225_DisengageReject *)choice; } H225_RasMessage::operator const H225_DisengageReject &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_DisengageReject), PInvalidCast); #endif return *(H225_DisengageReject *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_LocationRequest &() const #else H225_RasMessage::operator H225_LocationRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_LocationRequest), PInvalidCast); #endif return *(H225_LocationRequest *)choice; } H225_RasMessage::operator const H225_LocationRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_LocationRequest), PInvalidCast); #endif return *(H225_LocationRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_LocationConfirm &() const #else H225_RasMessage::operator H225_LocationConfirm &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_LocationConfirm), PInvalidCast); #endif return *(H225_LocationConfirm *)choice; } H225_RasMessage::operator const H225_LocationConfirm &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_LocationConfirm), PInvalidCast); #endif return *(H225_LocationConfirm *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_LocationReject &() const #else H225_RasMessage::operator H225_LocationReject &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_LocationReject), PInvalidCast); #endif return *(H225_LocationReject *)choice; } H225_RasMessage::operator const H225_LocationReject &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_LocationReject), PInvalidCast); #endif return *(H225_LocationReject *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_InfoRequest &() const #else H225_RasMessage::operator H225_InfoRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_InfoRequest), PInvalidCast); #endif return *(H225_InfoRequest *)choice; } H225_RasMessage::operator const H225_InfoRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_InfoRequest), PInvalidCast); #endif return *(H225_InfoRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_InfoRequestResponse &() const #else H225_RasMessage::operator H225_InfoRequestResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_InfoRequestResponse), PInvalidCast); #endif return *(H225_InfoRequestResponse *)choice; } H225_RasMessage::operator const H225_InfoRequestResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_InfoRequestResponse), PInvalidCast); #endif return *(H225_InfoRequestResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_NonStandardMessage &() const #else H225_RasMessage::operator H225_NonStandardMessage &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardMessage), PInvalidCast); #endif return *(H225_NonStandardMessage *)choice; } H225_RasMessage::operator const H225_NonStandardMessage &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardMessage), PInvalidCast); #endif return *(H225_NonStandardMessage *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_UnknownMessageResponse &() const #else H225_RasMessage::operator H225_UnknownMessageResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_UnknownMessageResponse), PInvalidCast); #endif return *(H225_UnknownMessageResponse *)choice; } H225_RasMessage::operator const H225_UnknownMessageResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_UnknownMessageResponse), PInvalidCast); #endif return *(H225_UnknownMessageResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_RequestInProgress &() const #else H225_RasMessage::operator H225_RequestInProgress &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_RequestInProgress), PInvalidCast); #endif return *(H225_RequestInProgress *)choice; } H225_RasMessage::operator const H225_RequestInProgress &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_RequestInProgress), PInvalidCast); #endif return *(H225_RequestInProgress *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_ResourcesAvailableIndicate &() const #else H225_RasMessage::operator H225_ResourcesAvailableIndicate &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ResourcesAvailableIndicate), PInvalidCast); #endif return *(H225_ResourcesAvailableIndicate *)choice; } H225_RasMessage::operator const H225_ResourcesAvailableIndicate &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ResourcesAvailableIndicate), PInvalidCast); #endif return *(H225_ResourcesAvailableIndicate *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_ResourcesAvailableConfirm &() const #else H225_RasMessage::operator H225_ResourcesAvailableConfirm &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ResourcesAvailableConfirm), PInvalidCast); #endif return *(H225_ResourcesAvailableConfirm *)choice; } H225_RasMessage::operator const H225_ResourcesAvailableConfirm &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ResourcesAvailableConfirm), PInvalidCast); #endif return *(H225_ResourcesAvailableConfirm *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_InfoRequestAck &() const #else H225_RasMessage::operator H225_InfoRequestAck &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_InfoRequestAck), PInvalidCast); #endif return *(H225_InfoRequestAck *)choice; } H225_RasMessage::operator const H225_InfoRequestAck &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_InfoRequestAck), PInvalidCast); #endif return *(H225_InfoRequestAck *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_InfoRequestNak &() const #else H225_RasMessage::operator H225_InfoRequestNak &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_InfoRequestNak), PInvalidCast); #endif return *(H225_InfoRequestNak *)choice; } H225_RasMessage::operator const H225_InfoRequestNak &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_InfoRequestNak), PInvalidCast); #endif return *(H225_InfoRequestNak *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_ServiceControlIndication &() const #else H225_RasMessage::operator H225_ServiceControlIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ServiceControlIndication), PInvalidCast); #endif return *(H225_ServiceControlIndication *)choice; } H225_RasMessage::operator const H225_ServiceControlIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ServiceControlIndication), PInvalidCast); #endif return *(H225_ServiceControlIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_ServiceControlResponse &() const #else H225_RasMessage::operator H225_ServiceControlResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ServiceControlResponse), PInvalidCast); #endif return *(H225_ServiceControlResponse *)choice; } H225_RasMessage::operator const H225_ServiceControlResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ServiceControlResponse), PInvalidCast); #endif return *(H225_ServiceControlResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RasMessage::operator H225_ArrayOf_AdmissionConfirm &() const #else H225_RasMessage::operator H225_ArrayOf_AdmissionConfirm &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ArrayOf_AdmissionConfirm), PInvalidCast); #endif return *(H225_ArrayOf_AdmissionConfirm *)choice; } H225_RasMessage::operator const H225_ArrayOf_AdmissionConfirm &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ArrayOf_AdmissionConfirm), PInvalidCast); #endif return *(H225_ArrayOf_AdmissionConfirm *)choice; } PBoolean H225_RasMessage::CreateObject() { switch (tag) { case e_gatekeeperRequest : choice = new H225_GatekeeperRequest(); return TRUE; case e_gatekeeperConfirm : choice = new H225_GatekeeperConfirm(); return TRUE; case e_gatekeeperReject : choice = new H225_GatekeeperReject(); return TRUE; case e_registrationRequest : choice = new H225_RegistrationRequest(); return TRUE; case e_registrationConfirm : choice = new H225_RegistrationConfirm(); return TRUE; case e_registrationReject : choice = new H225_RegistrationReject(); return TRUE; case e_unregistrationRequest : choice = new H225_UnregistrationRequest(); return TRUE; case e_unregistrationConfirm : choice = new H225_UnregistrationConfirm(); return TRUE; case e_unregistrationReject : choice = new H225_UnregistrationReject(); return TRUE; case e_admissionRequest : choice = new H225_AdmissionRequest(); return TRUE; case e_admissionConfirm : choice = new H225_AdmissionConfirm(); return TRUE; case e_admissionReject : choice = new H225_AdmissionReject(); return TRUE; case e_bandwidthRequest : choice = new H225_BandwidthRequest(); return TRUE; case e_bandwidthConfirm : choice = new H225_BandwidthConfirm(); return TRUE; case e_bandwidthReject : choice = new H225_BandwidthReject(); return TRUE; case e_disengageRequest : choice = new H225_DisengageRequest(); return TRUE; case e_disengageConfirm : choice = new H225_DisengageConfirm(); return TRUE; case e_disengageReject : choice = new H225_DisengageReject(); return TRUE; case e_locationRequest : choice = new H225_LocationRequest(); return TRUE; case e_locationConfirm : choice = new H225_LocationConfirm(); return TRUE; case e_locationReject : choice = new H225_LocationReject(); return TRUE; case e_infoRequest : choice = new H225_InfoRequest(); return TRUE; case e_infoRequestResponse : choice = new H225_InfoRequestResponse(); return TRUE; case e_nonStandardMessage : choice = new H225_NonStandardMessage(); return TRUE; case e_unknownMessageResponse : choice = new H225_UnknownMessageResponse(); return TRUE; case e_requestInProgress : choice = new H225_RequestInProgress(); return TRUE; case e_resourcesAvailableIndicate : choice = new H225_ResourcesAvailableIndicate(); return TRUE; case e_resourcesAvailableConfirm : choice = new H225_ResourcesAvailableConfirm(); return TRUE; case e_infoRequestAck : choice = new H225_InfoRequestAck(); return TRUE; case e_infoRequestNak : choice = new H225_InfoRequestNak(); return TRUE; case e_serviceControlIndication : choice = new H225_ServiceControlIndication(); return TRUE; case e_serviceControlResponse : choice = new H225_ServiceControlResponse(); return TRUE; case e_admissionConfirmSequence : choice = new H225_ArrayOf_AdmissionConfirm(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_RasMessage::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_RasMessage::Class()), PInvalidCast); #endif return new H225_RasMessage(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_GatekeeperRejectReason[]={ {"resourceUnavailable",0} ,{"terminalExcluded",1} ,{"invalidRevision",2} ,{"undefinedReason",3} ,{"securityDenial",4} ,{"genericDataReason",5} ,{"neededFeatureNotSupported",6} ,{"securityError",7} }; #endif // // GatekeeperRejectReason // H225_GatekeeperRejectReason::H225_GatekeeperRejectReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_GatekeeperRejectReason,8 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_GatekeeperRejectReason::operator H225_SecurityErrors &() const #else H225_GatekeeperRejectReason::operator H225_SecurityErrors &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SecurityErrors), PInvalidCast); #endif return *(H225_SecurityErrors *)choice; } H225_GatekeeperRejectReason::operator const H225_SecurityErrors &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SecurityErrors), PInvalidCast); #endif return *(H225_SecurityErrors *)choice; } PBoolean H225_GatekeeperRejectReason::CreateObject() { switch (tag) { case e_resourceUnavailable : case e_terminalExcluded : case e_invalidRevision : case e_undefinedReason : case e_securityDenial : case e_genericDataReason : case e_neededFeatureNotSupported : choice = new PASN_Null(); return TRUE; case e_securityError : choice = new H225_SecurityErrors(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_GatekeeperRejectReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_GatekeeperRejectReason::Class()), PInvalidCast); #endif return new H225_GatekeeperRejectReason(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_RegistrationRejectReason[]={ {"discoveryRequired",0} ,{"invalidRevision",1} ,{"invalidCallSignalAddress",2} ,{"invalidRASAddress",3} ,{"duplicateAlias",4} ,{"invalidTerminalType",5} ,{"undefinedReason",6} ,{"transportNotSupported",7} ,{"transportQOSNotSupported",8} ,{"resourceUnavailable",9} ,{"invalidAlias",10} ,{"securityDenial",11} ,{"fullRegistrationRequired",12} ,{"additiveRegistrationNotSupported",13} ,{"invalidTerminalAliases",14} ,{"genericDataReason",15} ,{"neededFeatureNotSupported",16} ,{"securityError",17} ,{"registerWithAssignedGK",18} }; #endif // // RegistrationRejectReason // H225_RegistrationRejectReason::H225_RegistrationRejectReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 8, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_RegistrationRejectReason,19 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RegistrationRejectReason::operator H225_ArrayOf_AliasAddress &() const #else H225_RegistrationRejectReason::operator H225_ArrayOf_AliasAddress &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ArrayOf_AliasAddress), PInvalidCast); #endif return *(H225_ArrayOf_AliasAddress *)choice; } H225_RegistrationRejectReason::operator const H225_ArrayOf_AliasAddress &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ArrayOf_AliasAddress), PInvalidCast); #endif return *(H225_ArrayOf_AliasAddress *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RegistrationRejectReason::operator H225_RegistrationRejectReason_invalidTerminalAliases &() const #else H225_RegistrationRejectReason::operator H225_RegistrationRejectReason_invalidTerminalAliases &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_RegistrationRejectReason_invalidTerminalAliases), PInvalidCast); #endif return *(H225_RegistrationRejectReason_invalidTerminalAliases *)choice; } H225_RegistrationRejectReason::operator const H225_RegistrationRejectReason_invalidTerminalAliases &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_RegistrationRejectReason_invalidTerminalAliases), PInvalidCast); #endif return *(H225_RegistrationRejectReason_invalidTerminalAliases *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_RegistrationRejectReason::operator H225_SecurityErrors &() const #else H225_RegistrationRejectReason::operator H225_SecurityErrors &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SecurityErrors), PInvalidCast); #endif return *(H225_SecurityErrors *)choice; } H225_RegistrationRejectReason::operator const H225_SecurityErrors &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SecurityErrors), PInvalidCast); #endif return *(H225_SecurityErrors *)choice; } PBoolean H225_RegistrationRejectReason::CreateObject() { switch (tag) { case e_discoveryRequired : case e_invalidRevision : case e_invalidCallSignalAddress : case e_invalidRASAddress : case e_invalidTerminalType : case e_undefinedReason : case e_transportNotSupported : case e_transportQOSNotSupported : case e_resourceUnavailable : case e_invalidAlias : case e_securityDenial : case e_fullRegistrationRequired : case e_additiveRegistrationNotSupported : case e_genericDataReason : case e_neededFeatureNotSupported : case e_registerWithAssignedGK : choice = new PASN_Null(); return TRUE; case e_duplicateAlias : choice = new H225_ArrayOf_AliasAddress(); return TRUE; case e_invalidTerminalAliases : choice = new H225_RegistrationRejectReason_invalidTerminalAliases(); return TRUE; case e_securityError : choice = new H225_SecurityErrors(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_RegistrationRejectReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_RegistrationRejectReason::Class()), PInvalidCast); #endif return new H225_RegistrationRejectReason(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_UnregRequestReason[]={ {"reregistrationRequired",0} ,{"ttlExpired",1} ,{"securityDenial",2} ,{"undefinedReason",3} ,{"maintenance",4} ,{"securityError",5} ,{"registerWithAssignedGK",6} }; #endif // // UnregRequestReason // H225_UnregRequestReason::H225_UnregRequestReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_UnregRequestReason,7 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_UnregRequestReason::operator H225_SecurityErrors2 &() const #else H225_UnregRequestReason::operator H225_SecurityErrors2 &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SecurityErrors2), PInvalidCast); #endif return *(H225_SecurityErrors2 *)choice; } H225_UnregRequestReason::operator const H225_SecurityErrors2 &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SecurityErrors2), PInvalidCast); #endif return *(H225_SecurityErrors2 *)choice; } PBoolean H225_UnregRequestReason::CreateObject() { switch (tag) { case e_reregistrationRequired : case e_ttlExpired : case e_securityDenial : case e_undefinedReason : case e_maintenance : case e_registerWithAssignedGK : choice = new PASN_Null(); return TRUE; case e_securityError : choice = new H225_SecurityErrors2(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_UnregRequestReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_UnregRequestReason::Class()), PInvalidCast); #endif return new H225_UnregRequestReason(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_UnregRejectReason[]={ {"notCurrentlyRegistered",0} ,{"callInProgress",1} ,{"undefinedReason",2} ,{"permissionDenied",3} ,{"securityDenial",4} ,{"securityError",5} }; #endif // // UnregRejectReason // H225_UnregRejectReason::H225_UnregRejectReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_UnregRejectReason,6 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_UnregRejectReason::operator H225_SecurityErrors2 &() const #else H225_UnregRejectReason::operator H225_SecurityErrors2 &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SecurityErrors2), PInvalidCast); #endif return *(H225_SecurityErrors2 *)choice; } H225_UnregRejectReason::operator const H225_SecurityErrors2 &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SecurityErrors2), PInvalidCast); #endif return *(H225_SecurityErrors2 *)choice; } PBoolean H225_UnregRejectReason::CreateObject() { switch (tag) { case e_notCurrentlyRegistered : case e_callInProgress : case e_undefinedReason : case e_permissionDenied : case e_securityDenial : choice = new PASN_Null(); return TRUE; case e_securityError : choice = new H225_SecurityErrors2(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_UnregRejectReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_UnregRejectReason::Class()), PInvalidCast); #endif return new H225_UnregRejectReason(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_CallType[]={ {"pointToPoint",0} ,{"oneToN",1} ,{"nToOne",2} ,{"nToN",3} }; #endif // // CallType // H225_CallType::H225_CallType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_CallType,4 #endif ) { } PBoolean H225_CallType::CreateObject() { choice = (tag <= e_nToN) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H225_CallType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CallType::Class()), PInvalidCast); #endif return new H225_CallType(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_CallModel[]={ {"direct",0} ,{"gatekeeperRouted",1} }; #endif // // CallModel // H225_CallModel::H225_CallModel(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_CallModel,2 #endif ) { } PBoolean H225_CallModel::CreateObject() { choice = (tag <= e_gatekeeperRouted) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H225_CallModel::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CallModel::Class()), PInvalidCast); #endif return new H225_CallModel(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_TransportQOS[]={ {"endpointControlled",0} ,{"gatekeeperControlled",1} ,{"noControl",2} ,{"qOSCapabilities",3} }; #endif // // TransportQOS // H225_TransportQOS::H225_TransportQOS(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_TransportQOS,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_TransportQOS::operator H225_ArrayOf_QOSCapability &() const #else H225_TransportQOS::operator H225_ArrayOf_QOSCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ArrayOf_QOSCapability), PInvalidCast); #endif return *(H225_ArrayOf_QOSCapability *)choice; } H225_TransportQOS::operator const H225_ArrayOf_QOSCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ArrayOf_QOSCapability), PInvalidCast); #endif return *(H225_ArrayOf_QOSCapability *)choice; } PBoolean H225_TransportQOS::CreateObject() { switch (tag) { case e_endpointControlled : case e_gatekeeperControlled : case e_noControl : choice = new PASN_Null(); return TRUE; case e_qOSCapabilities : choice = new H225_ArrayOf_QOSCapability(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 256); return TRUE; } choice = NULL; return FALSE; } PObject * H225_TransportQOS::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_TransportQOS::Class()), PInvalidCast); #endif return new H225_TransportQOS(*this); } // // UUIEsRequested // H225_UUIEsRequested::H225_UUIEsRequested(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 4) { IncludeOptionalField(e_status); IncludeOptionalField(e_statusInquiry); IncludeOptionalField(e_setupAcknowledge); IncludeOptionalField(e_notify); } #ifndef PASN_NOPRINTON void H225_UUIEsRequested::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+8) << "setup = " << setprecision(indent) << m_setup << '\n'; strm << setw(indent+17) << "callProceeding = " << setprecision(indent) << m_callProceeding << '\n'; strm << setw(indent+10) << "connect = " << setprecision(indent) << m_connect << '\n'; strm << setw(indent+11) << "alerting = " << setprecision(indent) << m_alerting << '\n'; strm << setw(indent+14) << "information = " << setprecision(indent) << m_information << '\n'; strm << setw(indent+18) << "releaseComplete = " << setprecision(indent) << m_releaseComplete << '\n'; strm << setw(indent+11) << "facility = " << setprecision(indent) << m_facility << '\n'; strm << setw(indent+11) << "progress = " << setprecision(indent) << m_progress << '\n'; strm << setw(indent+8) << "empty = " << setprecision(indent) << m_empty << '\n'; if (HasOptionalField(e_status)) strm << setw(indent+9) << "status = " << setprecision(indent) << m_status << '\n'; if (HasOptionalField(e_statusInquiry)) strm << setw(indent+16) << "statusInquiry = " << setprecision(indent) << m_statusInquiry << '\n'; if (HasOptionalField(e_setupAcknowledge)) strm << setw(indent+19) << "setupAcknowledge = " << setprecision(indent) << m_setupAcknowledge << '\n'; if (HasOptionalField(e_notify)) strm << setw(indent+9) << "notify = " << setprecision(indent) << m_notify << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_UUIEsRequested::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_UUIEsRequested), PInvalidCast); #endif const H225_UUIEsRequested & other = (const H225_UUIEsRequested &)obj; Comparison result; if ((result = m_setup.Compare(other.m_setup)) != EqualTo) return result; if ((result = m_callProceeding.Compare(other.m_callProceeding)) != EqualTo) return result; if ((result = m_connect.Compare(other.m_connect)) != EqualTo) return result; if ((result = m_alerting.Compare(other.m_alerting)) != EqualTo) return result; if ((result = m_information.Compare(other.m_information)) != EqualTo) return result; if ((result = m_releaseComplete.Compare(other.m_releaseComplete)) != EqualTo) return result; if ((result = m_facility.Compare(other.m_facility)) != EqualTo) return result; if ((result = m_progress.Compare(other.m_progress)) != EqualTo) return result; if ((result = m_empty.Compare(other.m_empty)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_UUIEsRequested::GetDataLength() const { PINDEX length = 0; length += m_setup.GetObjectLength(); length += m_callProceeding.GetObjectLength(); length += m_connect.GetObjectLength(); length += m_alerting.GetObjectLength(); length += m_information.GetObjectLength(); length += m_releaseComplete.GetObjectLength(); length += m_facility.GetObjectLength(); length += m_progress.GetObjectLength(); length += m_empty.GetObjectLength(); return length; } PBoolean H225_UUIEsRequested::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_setup.Decode(strm)) return FALSE; if (!m_callProceeding.Decode(strm)) return FALSE; if (!m_connect.Decode(strm)) return FALSE; if (!m_alerting.Decode(strm)) return FALSE; if (!m_information.Decode(strm)) return FALSE; if (!m_releaseComplete.Decode(strm)) return FALSE; if (!m_facility.Decode(strm)) return FALSE; if (!m_progress.Decode(strm)) return FALSE; if (!m_empty.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_status, m_status)) return FALSE; if (!KnownExtensionDecode(strm, e_statusInquiry, m_statusInquiry)) return FALSE; if (!KnownExtensionDecode(strm, e_setupAcknowledge, m_setupAcknowledge)) return FALSE; if (!KnownExtensionDecode(strm, e_notify, m_notify)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_UUIEsRequested::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_setup.Encode(strm); m_callProceeding.Encode(strm); m_connect.Encode(strm); m_alerting.Encode(strm); m_information.Encode(strm); m_releaseComplete.Encode(strm); m_facility.Encode(strm); m_progress.Encode(strm); m_empty.Encode(strm); KnownExtensionEncode(strm, e_status, m_status); KnownExtensionEncode(strm, e_statusInquiry, m_statusInquiry); KnownExtensionEncode(strm, e_setupAcknowledge, m_setupAcknowledge); KnownExtensionEncode(strm, e_notify, m_notify); UnknownExtensionsEncode(strm); } PObject * H225_UUIEsRequested::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_UUIEsRequested::Class()), PInvalidCast); #endif return new H225_UUIEsRequested(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_AdmissionRejectReason[]={ {"calledPartyNotRegistered",0} ,{"invalidPermission",1} ,{"requestDenied",2} ,{"undefinedReason",3} ,{"callerNotRegistered",4} ,{"routeCallToGatekeeper",5} ,{"invalidEndpointIdentifier",6} ,{"resourceUnavailable",7} ,{"securityDenial",8} ,{"qosControlNotSupported",9} ,{"incompleteAddress",10} ,{"aliasesInconsistent",11} ,{"routeCallToSCN",12} ,{"exceedsCallCapacity",13} ,{"collectDestination",14} ,{"collectPIN",15} ,{"genericDataReason",16} ,{"neededFeatureNotSupported",17} ,{"securityErrors",18} ,{"securityDHmismatch",19} ,{"noRouteToDestination",20} ,{"unallocatedNumber",21} ,{"registerWithAssignedGK",22} }; #endif // // AdmissionRejectReason // H225_AdmissionRejectReason::H225_AdmissionRejectReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 8, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_AdmissionRejectReason,23 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_AdmissionRejectReason::operator H225_ArrayOf_PartyNumber &() const #else H225_AdmissionRejectReason::operator H225_ArrayOf_PartyNumber &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ArrayOf_PartyNumber), PInvalidCast); #endif return *(H225_ArrayOf_PartyNumber *)choice; } H225_AdmissionRejectReason::operator const H225_ArrayOf_PartyNumber &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ArrayOf_PartyNumber), PInvalidCast); #endif return *(H225_ArrayOf_PartyNumber *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_AdmissionRejectReason::operator H225_SecurityErrors2 &() const #else H225_AdmissionRejectReason::operator H225_SecurityErrors2 &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SecurityErrors2), PInvalidCast); #endif return *(H225_SecurityErrors2 *)choice; } H225_AdmissionRejectReason::operator const H225_SecurityErrors2 &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SecurityErrors2), PInvalidCast); #endif return *(H225_SecurityErrors2 *)choice; } PBoolean H225_AdmissionRejectReason::CreateObject() { switch (tag) { case e_calledPartyNotRegistered : case e_invalidPermission : case e_requestDenied : case e_undefinedReason : case e_callerNotRegistered : case e_routeCallToGatekeeper : case e_invalidEndpointIdentifier : case e_resourceUnavailable : case e_securityDenial : case e_qosControlNotSupported : case e_incompleteAddress : case e_aliasesInconsistent : case e_exceedsCallCapacity : case e_collectDestination : case e_collectPIN : case e_genericDataReason : case e_neededFeatureNotSupported : case e_securityDHmismatch : case e_noRouteToDestination : case e_unallocatedNumber : case e_registerWithAssignedGK : choice = new PASN_Null(); return TRUE; case e_routeCallToSCN : choice = new H225_ArrayOf_PartyNumber(); return TRUE; case e_securityErrors : choice = new H225_SecurityErrors2(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_AdmissionRejectReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_AdmissionRejectReason::Class()), PInvalidCast); #endif return new H225_AdmissionRejectReason(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_BandRejectReason[]={ {"notBound",0} ,{"invalidConferenceID",1} ,{"invalidPermission",2} ,{"insufficientResources",3} ,{"invalidRevision",4} ,{"undefinedReason",5} ,{"securityDenial",6} ,{"securityError",7} }; #endif // // BandRejectReason // H225_BandRejectReason::H225_BandRejectReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 6, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_BandRejectReason,8 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_BandRejectReason::operator H225_SecurityErrors2 &() const #else H225_BandRejectReason::operator H225_SecurityErrors2 &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SecurityErrors2), PInvalidCast); #endif return *(H225_SecurityErrors2 *)choice; } H225_BandRejectReason::operator const H225_SecurityErrors2 &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SecurityErrors2), PInvalidCast); #endif return *(H225_SecurityErrors2 *)choice; } PBoolean H225_BandRejectReason::CreateObject() { switch (tag) { case e_notBound : case e_invalidConferenceID : case e_invalidPermission : case e_insufficientResources : case e_invalidRevision : case e_undefinedReason : case e_securityDenial : choice = new PASN_Null(); return TRUE; case e_securityError : choice = new H225_SecurityErrors2(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_BandRejectReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_BandRejectReason::Class()), PInvalidCast); #endif return new H225_BandRejectReason(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_LocationRejectReason[]={ {"notRegistered",0} ,{"invalidPermission",1} ,{"requestDenied",2} ,{"undefinedReason",3} ,{"securityDenial",4} ,{"aliasesInconsistent",5} ,{"routeCalltoSCN",6} ,{"resourceUnavailable",7} ,{"genericDataReason",8} ,{"neededFeatureNotSupported",9} ,{"hopCountExceeded",10} ,{"incompleteAddress",11} ,{"securityError",12} ,{"securityDHmismatch",13} ,{"noRouteToDestination",14} ,{"unallocatedNumber",15} }; #endif // // LocationRejectReason // H225_LocationRejectReason::H225_LocationRejectReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_LocationRejectReason,16 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_LocationRejectReason::operator H225_ArrayOf_PartyNumber &() const #else H225_LocationRejectReason::operator H225_ArrayOf_PartyNumber &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ArrayOf_PartyNumber), PInvalidCast); #endif return *(H225_ArrayOf_PartyNumber *)choice; } H225_LocationRejectReason::operator const H225_ArrayOf_PartyNumber &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ArrayOf_PartyNumber), PInvalidCast); #endif return *(H225_ArrayOf_PartyNumber *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_LocationRejectReason::operator H225_SecurityErrors2 &() const #else H225_LocationRejectReason::operator H225_SecurityErrors2 &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SecurityErrors2), PInvalidCast); #endif return *(H225_SecurityErrors2 *)choice; } H225_LocationRejectReason::operator const H225_SecurityErrors2 &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SecurityErrors2), PInvalidCast); #endif return *(H225_SecurityErrors2 *)choice; } PBoolean H225_LocationRejectReason::CreateObject() { switch (tag) { case e_notRegistered : case e_invalidPermission : case e_requestDenied : case e_undefinedReason : case e_securityDenial : case e_aliasesInconsistent : case e_resourceUnavailable : case e_genericDataReason : case e_neededFeatureNotSupported : case e_hopCountExceeded : case e_incompleteAddress : case e_securityDHmismatch : case e_noRouteToDestination : case e_unallocatedNumber : choice = new PASN_Null(); return TRUE; case e_routeCalltoSCN : choice = new H225_ArrayOf_PartyNumber(); return TRUE; case e_securityError : choice = new H225_SecurityErrors2(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_LocationRejectReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_LocationRejectReason::Class()), PInvalidCast); #endif return new H225_LocationRejectReason(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_DisengageReason[]={ {"forcedDrop",0} ,{"normalDrop",1} ,{"undefinedReason",2} }; #endif // // DisengageReason // H225_DisengageReason::H225_DisengageReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_DisengageReason,3 #endif ) { } PBoolean H225_DisengageReason::CreateObject() { choice = (tag <= e_undefinedReason) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H225_DisengageReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_DisengageReason::Class()), PInvalidCast); #endif return new H225_DisengageReason(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_DisengageRejectReason[]={ {"notRegistered",0} ,{"requestToDropOther",1} ,{"securityDenial",2} ,{"securityError",3} }; #endif // // DisengageRejectReason // H225_DisengageRejectReason::H225_DisengageRejectReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_DisengageRejectReason,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_DisengageRejectReason::operator H225_SecurityErrors2 &() const #else H225_DisengageRejectReason::operator H225_SecurityErrors2 &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SecurityErrors2), PInvalidCast); #endif return *(H225_SecurityErrors2 *)choice; } H225_DisengageRejectReason::operator const H225_SecurityErrors2 &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SecurityErrors2), PInvalidCast); #endif return *(H225_SecurityErrors2 *)choice; } PBoolean H225_DisengageRejectReason::CreateObject() { switch (tag) { case e_notRegistered : case e_requestToDropOther : case e_securityDenial : choice = new PASN_Null(); return TRUE; case e_securityError : choice = new H225_SecurityErrors2(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_DisengageRejectReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_DisengageRejectReason::Class()), PInvalidCast); #endif return new H225_DisengageRejectReason(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_InfoRequestResponseStatus[]={ {"complete",0} ,{"incomplete",1} ,{"segment",2} ,{"invalidCall",3} }; #endif // // InfoRequestResponseStatus // H225_InfoRequestResponseStatus::H225_InfoRequestResponseStatus(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_InfoRequestResponseStatus,4 #endif ) { } PBoolean H225_InfoRequestResponseStatus::CreateObject() { switch (tag) { case e_complete : case e_incomplete : case e_invalidCall : choice = new PASN_Null(); return TRUE; case e_segment : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 65535); return TRUE; } choice = NULL; return FALSE; } PObject * H225_InfoRequestResponseStatus::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_InfoRequestResponseStatus::Class()), PInvalidCast); #endif return new H225_InfoRequestResponseStatus(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_InfoRequestNakReason[]={ {"notRegistered",0} ,{"securityDenial",1} ,{"undefinedReason",2} ,{"securityError",3} }; #endif // // InfoRequestNakReason // H225_InfoRequestNakReason::H225_InfoRequestNakReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_InfoRequestNakReason,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_InfoRequestNakReason::operator H225_SecurityErrors2 &() const #else H225_InfoRequestNakReason::operator H225_SecurityErrors2 &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SecurityErrors2), PInvalidCast); #endif return *(H225_SecurityErrors2 *)choice; } H225_InfoRequestNakReason::operator const H225_SecurityErrors2 &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SecurityErrors2), PInvalidCast); #endif return *(H225_SecurityErrors2 *)choice; } PBoolean H225_InfoRequestNakReason::CreateObject() { switch (tag) { case e_notRegistered : case e_securityDenial : case e_undefinedReason : choice = new PASN_Null(); return TRUE; case e_securityError : choice = new H225_SecurityErrors2(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_InfoRequestNakReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_InfoRequestNakReason::Class()), PInvalidCast); #endif return new H225_InfoRequestNakReason(*this); } // // H323-UserInformation_user-data // H225_H323_UserInformation_user_data::H225_H323_UserInformation_user_data(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_protocol_discriminator.SetConstraints(PASN_Object::FixedConstraint, 0, 255); m_user_information.SetConstraints(PASN_Object::FixedConstraint, 1, 131); } #ifndef PASN_NOPRINTON void H225_H323_UserInformation_user_data::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+25) << "protocol_discriminator = " << setprecision(indent) << m_protocol_discriminator << '\n'; strm << setw(indent+19) << "user_information = " << setprecision(indent) << m_user_information << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_H323_UserInformation_user_data::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_H323_UserInformation_user_data), PInvalidCast); #endif const H225_H323_UserInformation_user_data & other = (const H225_H323_UserInformation_user_data &)obj; Comparison result; if ((result = m_protocol_discriminator.Compare(other.m_protocol_discriminator)) != EqualTo) return result; if ((result = m_user_information.Compare(other.m_user_information)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_H323_UserInformation_user_data::GetDataLength() const { PINDEX length = 0; length += m_protocol_discriminator.GetObjectLength(); length += m_user_information.GetObjectLength(); return length; } PBoolean H225_H323_UserInformation_user_data::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_protocol_discriminator.Decode(strm)) return FALSE; if (!m_user_information.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_H323_UserInformation_user_data::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_protocol_discriminator.Encode(strm); m_user_information.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_H323_UserInformation_user_data::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_H323_UserInformation_user_data::Class()), PInvalidCast); #endif return new H225_H323_UserInformation_user_data(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_H323_UU_PDU_h323_message_body[]={ {"setup",0} ,{"callProceeding",1} ,{"connect",2} ,{"alerting",3} ,{"information",4} ,{"releaseComplete",5} ,{"facility",6} ,{"progress",7} ,{"empty",8} ,{"status",9} ,{"statusInquiry",10} ,{"setupAcknowledge",11} ,{"notify",12} }; #endif // // H323-UU-PDU_h323-message-body // H225_H323_UU_PDU_h323_message_body::H225_H323_UU_PDU_h323_message_body(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 7, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_H323_UU_PDU_h323_message_body,13 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_H323_UU_PDU_h323_message_body::operator H225_Setup_UUIE &() const #else H225_H323_UU_PDU_h323_message_body::operator H225_Setup_UUIE &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_Setup_UUIE), PInvalidCast); #endif return *(H225_Setup_UUIE *)choice; } H225_H323_UU_PDU_h323_message_body::operator const H225_Setup_UUIE &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_Setup_UUIE), PInvalidCast); #endif return *(H225_Setup_UUIE *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_H323_UU_PDU_h323_message_body::operator H225_CallProceeding_UUIE &() const #else H225_H323_UU_PDU_h323_message_body::operator H225_CallProceeding_UUIE &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_CallProceeding_UUIE), PInvalidCast); #endif return *(H225_CallProceeding_UUIE *)choice; } H225_H323_UU_PDU_h323_message_body::operator const H225_CallProceeding_UUIE &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_CallProceeding_UUIE), PInvalidCast); #endif return *(H225_CallProceeding_UUIE *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_H323_UU_PDU_h323_message_body::operator H225_Connect_UUIE &() const #else H225_H323_UU_PDU_h323_message_body::operator H225_Connect_UUIE &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_Connect_UUIE), PInvalidCast); #endif return *(H225_Connect_UUIE *)choice; } H225_H323_UU_PDU_h323_message_body::operator const H225_Connect_UUIE &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_Connect_UUIE), PInvalidCast); #endif return *(H225_Connect_UUIE *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_H323_UU_PDU_h323_message_body::operator H225_Alerting_UUIE &() const #else H225_H323_UU_PDU_h323_message_body::operator H225_Alerting_UUIE &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_Alerting_UUIE), PInvalidCast); #endif return *(H225_Alerting_UUIE *)choice; } H225_H323_UU_PDU_h323_message_body::operator const H225_Alerting_UUIE &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_Alerting_UUIE), PInvalidCast); #endif return *(H225_Alerting_UUIE *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_H323_UU_PDU_h323_message_body::operator H225_Information_UUIE &() const #else H225_H323_UU_PDU_h323_message_body::operator H225_Information_UUIE &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_Information_UUIE), PInvalidCast); #endif return *(H225_Information_UUIE *)choice; } H225_H323_UU_PDU_h323_message_body::operator const H225_Information_UUIE &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_Information_UUIE), PInvalidCast); #endif return *(H225_Information_UUIE *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_H323_UU_PDU_h323_message_body::operator H225_ReleaseComplete_UUIE &() const #else H225_H323_UU_PDU_h323_message_body::operator H225_ReleaseComplete_UUIE &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ReleaseComplete_UUIE), PInvalidCast); #endif return *(H225_ReleaseComplete_UUIE *)choice; } H225_H323_UU_PDU_h323_message_body::operator const H225_ReleaseComplete_UUIE &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_ReleaseComplete_UUIE), PInvalidCast); #endif return *(H225_ReleaseComplete_UUIE *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_H323_UU_PDU_h323_message_body::operator H225_Facility_UUIE &() const #else H225_H323_UU_PDU_h323_message_body::operator H225_Facility_UUIE &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_Facility_UUIE), PInvalidCast); #endif return *(H225_Facility_UUIE *)choice; } H225_H323_UU_PDU_h323_message_body::operator const H225_Facility_UUIE &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_Facility_UUIE), PInvalidCast); #endif return *(H225_Facility_UUIE *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_H323_UU_PDU_h323_message_body::operator H225_Progress_UUIE &() const #else H225_H323_UU_PDU_h323_message_body::operator H225_Progress_UUIE &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_Progress_UUIE), PInvalidCast); #endif return *(H225_Progress_UUIE *)choice; } H225_H323_UU_PDU_h323_message_body::operator const H225_Progress_UUIE &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_Progress_UUIE), PInvalidCast); #endif return *(H225_Progress_UUIE *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_H323_UU_PDU_h323_message_body::operator H225_Status_UUIE &() const #else H225_H323_UU_PDU_h323_message_body::operator H225_Status_UUIE &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_Status_UUIE), PInvalidCast); #endif return *(H225_Status_UUIE *)choice; } H225_H323_UU_PDU_h323_message_body::operator const H225_Status_UUIE &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_Status_UUIE), PInvalidCast); #endif return *(H225_Status_UUIE *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_H323_UU_PDU_h323_message_body::operator H225_StatusInquiry_UUIE &() const #else H225_H323_UU_PDU_h323_message_body::operator H225_StatusInquiry_UUIE &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_StatusInquiry_UUIE), PInvalidCast); #endif return *(H225_StatusInquiry_UUIE *)choice; } H225_H323_UU_PDU_h323_message_body::operator const H225_StatusInquiry_UUIE &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_StatusInquiry_UUIE), PInvalidCast); #endif return *(H225_StatusInquiry_UUIE *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_H323_UU_PDU_h323_message_body::operator H225_SetupAcknowledge_UUIE &() const #else H225_H323_UU_PDU_h323_message_body::operator H225_SetupAcknowledge_UUIE &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SetupAcknowledge_UUIE), PInvalidCast); #endif return *(H225_SetupAcknowledge_UUIE *)choice; } H225_H323_UU_PDU_h323_message_body::operator const H225_SetupAcknowledge_UUIE &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_SetupAcknowledge_UUIE), PInvalidCast); #endif return *(H225_SetupAcknowledge_UUIE *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_H323_UU_PDU_h323_message_body::operator H225_Notify_UUIE &() const #else H225_H323_UU_PDU_h323_message_body::operator H225_Notify_UUIE &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_Notify_UUIE), PInvalidCast); #endif return *(H225_Notify_UUIE *)choice; } H225_H323_UU_PDU_h323_message_body::operator const H225_Notify_UUIE &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_Notify_UUIE), PInvalidCast); #endif return *(H225_Notify_UUIE *)choice; } PBoolean H225_H323_UU_PDU_h323_message_body::CreateObject() { switch (tag) { case e_setup : choice = new H225_Setup_UUIE(); return TRUE; case e_callProceeding : choice = new H225_CallProceeding_UUIE(); return TRUE; case e_connect : choice = new H225_Connect_UUIE(); return TRUE; case e_alerting : choice = new H225_Alerting_UUIE(); return TRUE; case e_information : choice = new H225_Information_UUIE(); return TRUE; case e_releaseComplete : choice = new H225_ReleaseComplete_UUIE(); return TRUE; case e_facility : choice = new H225_Facility_UUIE(); return TRUE; case e_progress : choice = new H225_Progress_UUIE(); return TRUE; case e_empty : choice = new PASN_Null(); return TRUE; case e_status : choice = new H225_Status_UUIE(); return TRUE; case e_statusInquiry : choice = new H225_StatusInquiry_UUIE(); return TRUE; case e_setupAcknowledge : choice = new H225_SetupAcknowledge_UUIE(); return TRUE; case e_notify : choice = new H225_Notify_UUIE(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_H323_UU_PDU_h323_message_body::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_H323_UU_PDU_h323_message_body::Class()), PInvalidCast); #endif return new H225_H323_UU_PDU_h323_message_body(*this); } // // ArrayOf_PASN_OctetString // H225_ArrayOf_PASN_OctetString::H225_ArrayOf_PASN_OctetString(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_PASN_OctetString::CreateObject() const { return new PASN_OctetString; } PASN_OctetString & H225_ArrayOf_PASN_OctetString::operator[](PINDEX i) const { return (PASN_OctetString &)array[i]; } PObject * H225_ArrayOf_PASN_OctetString::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_PASN_OctetString::Class()), PInvalidCast); #endif return new H225_ArrayOf_PASN_OctetString(*this); } // // ArrayOf_NonStandardParameter // H225_ArrayOf_NonStandardParameter::H225_ArrayOf_NonStandardParameter(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_NonStandardParameter::CreateObject() const { return new H225_NonStandardParameter; } H225_NonStandardParameter & H225_ArrayOf_NonStandardParameter::operator[](PINDEX i) const { return (H225_NonStandardParameter &)array[i]; } PObject * H225_ArrayOf_NonStandardParameter::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_NonStandardParameter::Class()), PInvalidCast); #endif return new H225_ArrayOf_NonStandardParameter(*this); } // // ArrayOf_GenericData // H225_ArrayOf_GenericData::H225_ArrayOf_GenericData(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_GenericData::CreateObject() const { return new H225_GenericData; } H225_GenericData & H225_ArrayOf_GenericData::operator[](PINDEX i) const { return (H225_GenericData &)array[i]; } PObject * H225_ArrayOf_GenericData::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_GenericData::Class()), PInvalidCast); #endif return new H225_ArrayOf_GenericData(*this); } // // ArrayOf_ClearToken // H225_ArrayOf_ClearToken::H225_ArrayOf_ClearToken(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_ClearToken::CreateObject() const { return new H235_ClearToken; } H235_ClearToken & H225_ArrayOf_ClearToken::operator[](PINDEX i) const { return (H235_ClearToken &)array[i]; } PObject * H225_ArrayOf_ClearToken::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_ClearToken::Class()), PInvalidCast); #endif return new H225_ArrayOf_ClearToken(*this); } // // ArrayOf_CryptoH323Token // H225_ArrayOf_CryptoH323Token::H225_ArrayOf_CryptoH323Token(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_CryptoH323Token::CreateObject() const { return new H225_CryptoH323Token; } H225_CryptoH323Token & H225_ArrayOf_CryptoH323Token::operator[](PINDEX i) const { return (H225_CryptoH323Token &)array[i]; } PObject * H225_ArrayOf_CryptoH323Token::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_CryptoH323Token::Class()), PInvalidCast); #endif return new H225_ArrayOf_CryptoH323Token(*this); } // // ArrayOf_AliasAddress // H225_ArrayOf_AliasAddress::H225_ArrayOf_AliasAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_AliasAddress::CreateObject() const { return new H225_AliasAddress; } H225_AliasAddress & H225_ArrayOf_AliasAddress::operator[](PINDEX i) const { return (H225_AliasAddress &)array[i]; } PObject * H225_ArrayOf_AliasAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_AliasAddress::Class()), PInvalidCast); #endif return new H225_ArrayOf_AliasAddress(*this); } // // ArrayOf_ServiceControlSession // H225_ArrayOf_ServiceControlSession::H225_ArrayOf_ServiceControlSession(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_ServiceControlSession::CreateObject() const { return new H225_ServiceControlSession; } H225_ServiceControlSession & H225_ArrayOf_ServiceControlSession::operator[](PINDEX i) const { return (H225_ServiceControlSession &)array[i]; } PObject * H225_ArrayOf_ServiceControlSession::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_ServiceControlSession::Class()), PInvalidCast); #endif return new H225_ArrayOf_ServiceControlSession(*this); } // // Connect-UUIE_language // H225_Connect_UUIE_language::H225_Connect_UUIE_language(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_Connect_UUIE_language::CreateObject() const { PASN_IA5String * obj = new PASN_IA5String; obj->SetConstraints(PASN_Object::FixedConstraint, 1, 32); return obj; } PASN_IA5String & H225_Connect_UUIE_language::operator[](PINDEX i) const { return (PASN_IA5String &)array[i]; } PObject * H225_Connect_UUIE_language::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_Connect_UUIE_language::Class()), PInvalidCast); #endif return new H225_Connect_UUIE_language(*this); } // // ArrayOf_CallReferenceValue // H225_ArrayOf_CallReferenceValue::H225_ArrayOf_CallReferenceValue(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_CallReferenceValue::CreateObject() const { return new H225_CallReferenceValue; } H225_CallReferenceValue & H225_ArrayOf_CallReferenceValue::operator[](PINDEX i) const { return (H225_CallReferenceValue &)array[i]; } PObject * H225_ArrayOf_CallReferenceValue::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_CallReferenceValue::Class()), PInvalidCast); #endif return new H225_ArrayOf_CallReferenceValue(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_Setup_UUIE_conferenceGoal[]={ {"create",0} ,{"join",1} ,{"invite",2} ,{"capability_negotiation",3} ,{"callIndependentSupplementaryService",4} }; #endif // // Setup-UUIE_conferenceGoal // H225_Setup_UUIE_conferenceGoal::H225_Setup_UUIE_conferenceGoal(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_Setup_UUIE_conferenceGoal,5 #endif ) { } PBoolean H225_Setup_UUIE_conferenceGoal::CreateObject() { choice = (tag <= e_callIndependentSupplementaryService) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H225_Setup_UUIE_conferenceGoal::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_Setup_UUIE_conferenceGoal::Class()), PInvalidCast); #endif return new H225_Setup_UUIE_conferenceGoal(*this); } // // ArrayOf_H245Security // H225_ArrayOf_H245Security::H225_ArrayOf_H245Security(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_H245Security::CreateObject() const { return new H225_H245Security; } H225_H245Security & H225_ArrayOf_H245Security::operator[](PINDEX i) const { return (H225_H245Security &)array[i]; } PObject * H225_ArrayOf_H245Security::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_H245Security::Class()), PInvalidCast); #endif return new H225_ArrayOf_H245Security(*this); } // // Setup-UUIE_connectionParameters // H225_Setup_UUIE_connectionParameters::H225_Setup_UUIE_connectionParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_numberOfScnConnections.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H225_Setup_UUIE_connectionParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "connectionType = " << setprecision(indent) << m_connectionType << '\n'; strm << setw(indent+25) << "numberOfScnConnections = " << setprecision(indent) << m_numberOfScnConnections << '\n'; strm << setw(indent+24) << "connectionAggregation = " << setprecision(indent) << m_connectionAggregation << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_Setup_UUIE_connectionParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_Setup_UUIE_connectionParameters), PInvalidCast); #endif const H225_Setup_UUIE_connectionParameters & other = (const H225_Setup_UUIE_connectionParameters &)obj; Comparison result; if ((result = m_connectionType.Compare(other.m_connectionType)) != EqualTo) return result; if ((result = m_numberOfScnConnections.Compare(other.m_numberOfScnConnections)) != EqualTo) return result; if ((result = m_connectionAggregation.Compare(other.m_connectionAggregation)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_Setup_UUIE_connectionParameters::GetDataLength() const { PINDEX length = 0; length += m_connectionType.GetObjectLength(); length += m_numberOfScnConnections.GetObjectLength(); length += m_connectionAggregation.GetObjectLength(); return length; } PBoolean H225_Setup_UUIE_connectionParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_connectionType.Decode(strm)) return FALSE; if (!m_numberOfScnConnections.Decode(strm)) return FALSE; if (!m_connectionAggregation.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_Setup_UUIE_connectionParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_connectionType.Encode(strm); m_numberOfScnConnections.Encode(strm); m_connectionAggregation.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_Setup_UUIE_connectionParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_Setup_UUIE_connectionParameters::Class()), PInvalidCast); #endif return new H225_Setup_UUIE_connectionParameters(*this); } // // Setup-UUIE_language // H225_Setup_UUIE_language::H225_Setup_UUIE_language(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_Setup_UUIE_language::CreateObject() const { PASN_IA5String * obj = new PASN_IA5String; obj->SetConstraints(PASN_Object::FixedConstraint, 1, 32); return obj; } PASN_IA5String & H225_Setup_UUIE_language::operator[](PINDEX i) const { return (PASN_IA5String &)array[i]; } PObject * H225_Setup_UUIE_language::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_Setup_UUIE_language::Class()), PInvalidCast); #endif return new H225_Setup_UUIE_language(*this); } // // ArrayOf_SupportedProtocols // H225_ArrayOf_SupportedProtocols::H225_ArrayOf_SupportedProtocols(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_SupportedProtocols::CreateObject() const { return new H225_SupportedProtocols; } H225_SupportedProtocols & H225_ArrayOf_SupportedProtocols::operator[](PINDEX i) const { return (H225_SupportedProtocols &)array[i]; } PObject * H225_ArrayOf_SupportedProtocols::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_SupportedProtocols::Class()), PInvalidCast); #endif return new H225_ArrayOf_SupportedProtocols(*this); } // // ArrayOf_FeatureDescriptor // H225_ArrayOf_FeatureDescriptor::H225_ArrayOf_FeatureDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_FeatureDescriptor::CreateObject() const { return new H225_FeatureDescriptor; } H225_FeatureDescriptor & H225_ArrayOf_FeatureDescriptor::operator[](PINDEX i) const { return (H225_FeatureDescriptor &)array[i]; } PObject * H225_ArrayOf_FeatureDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_FeatureDescriptor::Class()), PInvalidCast); #endif return new H225_ArrayOf_FeatureDescriptor(*this); } // // ArrayOf_ExtendedAliasAddress // H225_ArrayOf_ExtendedAliasAddress::H225_ArrayOf_ExtendedAliasAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_ExtendedAliasAddress::CreateObject() const { return new H225_ExtendedAliasAddress; } H225_ExtendedAliasAddress & H225_ArrayOf_ExtendedAliasAddress::operator[](PINDEX i) const { return (H225_ExtendedAliasAddress &)array[i]; } PObject * H225_ArrayOf_ExtendedAliasAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_ExtendedAliasAddress::Class()), PInvalidCast); #endif return new H225_ArrayOf_ExtendedAliasAddress(*this); } // // ArrayOf_ConferenceList // H225_ArrayOf_ConferenceList::H225_ArrayOf_ConferenceList(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_ConferenceList::CreateObject() const { return new H225_ConferenceList; } H225_ConferenceList & H225_ArrayOf_ConferenceList::operator[](PINDEX i) const { return (H225_ConferenceList &)array[i]; } PObject * H225_ArrayOf_ConferenceList::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_ConferenceList::Class()), PInvalidCast); #endif return new H225_ArrayOf_ConferenceList(*this); } // // TransportAddress_ipAddress // H225_TransportAddress_ipAddress::H225_TransportAddress_ipAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { m_ip.SetConstraints(PASN_Object::FixedConstraint, 4); m_port.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H225_TransportAddress_ipAddress::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+5) << "ip = " << setprecision(indent) << m_ip << '\n'; strm << setw(indent+7) << "port = " << setprecision(indent) << m_port << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_TransportAddress_ipAddress::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_TransportAddress_ipAddress), PInvalidCast); #endif const H225_TransportAddress_ipAddress & other = (const H225_TransportAddress_ipAddress &)obj; Comparison result; if ((result = m_ip.Compare(other.m_ip)) != EqualTo) return result; if ((result = m_port.Compare(other.m_port)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_TransportAddress_ipAddress::GetDataLength() const { PINDEX length = 0; length += m_ip.GetObjectLength(); length += m_port.GetObjectLength(); return length; } PBoolean H225_TransportAddress_ipAddress::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_ip.Decode(strm)) return FALSE; if (!m_port.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_TransportAddress_ipAddress::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_ip.Encode(strm); m_port.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_TransportAddress_ipAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_TransportAddress_ipAddress::Class()), PInvalidCast); #endif return new H225_TransportAddress_ipAddress(*this); } // // TransportAddress_ipxAddress // H225_TransportAddress_ipxAddress::H225_TransportAddress_ipxAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { m_node.SetConstraints(PASN_Object::FixedConstraint, 6); m_netnum.SetConstraints(PASN_Object::FixedConstraint, 4); m_port.SetConstraints(PASN_Object::FixedConstraint, 2); } #ifndef PASN_NOPRINTON void H225_TransportAddress_ipxAddress::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "node = " << setprecision(indent) << m_node << '\n'; strm << setw(indent+9) << "netnum = " << setprecision(indent) << m_netnum << '\n'; strm << setw(indent+7) << "port = " << setprecision(indent) << m_port << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_TransportAddress_ipxAddress::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_TransportAddress_ipxAddress), PInvalidCast); #endif const H225_TransportAddress_ipxAddress & other = (const H225_TransportAddress_ipxAddress &)obj; Comparison result; if ((result = m_node.Compare(other.m_node)) != EqualTo) return result; if ((result = m_netnum.Compare(other.m_netnum)) != EqualTo) return result; if ((result = m_port.Compare(other.m_port)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_TransportAddress_ipxAddress::GetDataLength() const { PINDEX length = 0; length += m_node.GetObjectLength(); length += m_netnum.GetObjectLength(); length += m_port.GetObjectLength(); return length; } PBoolean H225_TransportAddress_ipxAddress::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_node.Decode(strm)) return FALSE; if (!m_netnum.Decode(strm)) return FALSE; if (!m_port.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_TransportAddress_ipxAddress::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_node.Encode(strm); m_netnum.Encode(strm); m_port.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_TransportAddress_ipxAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_TransportAddress_ipxAddress::Class()), PInvalidCast); #endif return new H225_TransportAddress_ipxAddress(*this); } // // TransportAddress_ip6Address // H225_TransportAddress_ip6Address::H225_TransportAddress_ip6Address(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_ip.SetConstraints(PASN_Object::FixedConstraint, 16); m_port.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H225_TransportAddress_ip6Address::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+5) << "ip = " << setprecision(indent) << m_ip << '\n'; strm << setw(indent+7) << "port = " << setprecision(indent) << m_port << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_TransportAddress_ip6Address::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_TransportAddress_ip6Address), PInvalidCast); #endif const H225_TransportAddress_ip6Address & other = (const H225_TransportAddress_ip6Address &)obj; Comparison result; if ((result = m_ip.Compare(other.m_ip)) != EqualTo) return result; if ((result = m_port.Compare(other.m_port)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_TransportAddress_ip6Address::GetDataLength() const { PINDEX length = 0; length += m_ip.GetObjectLength(); length += m_port.GetObjectLength(); return length; } PBoolean H225_TransportAddress_ip6Address::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_ip.Decode(strm)) return FALSE; if (!m_port.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_TransportAddress_ip6Address::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_ip.Encode(strm); m_port.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_TransportAddress_ip6Address::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_TransportAddress_ip6Address::Class()), PInvalidCast); #endif return new H225_TransportAddress_ip6Address(*this); } // // ArrayOf_TunnelledProtocol // H225_ArrayOf_TunnelledProtocol::H225_ArrayOf_TunnelledProtocol(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_TunnelledProtocol::CreateObject() const { return new H225_TunnelledProtocol; } H225_TunnelledProtocol & H225_ArrayOf_TunnelledProtocol::operator[](PINDEX i) const { return (H225_TunnelledProtocol &)array[i]; } PObject * H225_ArrayOf_TunnelledProtocol::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_TunnelledProtocol::Class()), PInvalidCast); #endif return new H225_ArrayOf_TunnelledProtocol(*this); } // // ArrayOf_DataRate // H225_ArrayOf_DataRate::H225_ArrayOf_DataRate(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_DataRate::CreateObject() const { return new H225_DataRate; } H225_DataRate & H225_ArrayOf_DataRate::operator[](PINDEX i) const { return (H225_DataRate &)array[i]; } PObject * H225_ArrayOf_DataRate::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_DataRate::Class()), PInvalidCast); #endif return new H225_ArrayOf_DataRate(*this); } // // ArrayOf_SupportedPrefix // H225_ArrayOf_SupportedPrefix::H225_ArrayOf_SupportedPrefix(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_SupportedPrefix::CreateObject() const { return new H225_SupportedPrefix; } H225_SupportedPrefix & H225_ArrayOf_SupportedPrefix::operator[](PINDEX i) const { return (H225_SupportedPrefix &)array[i]; } PObject * H225_ArrayOf_SupportedPrefix::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_SupportedPrefix::Class()), PInvalidCast); #endif return new H225_ArrayOf_SupportedPrefix(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_TunnelledProtocol_id[]={ {"tunnelledProtocolObjectID",0} ,{"tunnelledProtocolAlternateID",1} }; #endif // // TunnelledProtocol_id // H225_TunnelledProtocol_id::H225_TunnelledProtocol_id(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_TunnelledProtocol_id,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H225_TunnelledProtocol_id::operator H225_TunnelledProtocolAlternateIdentifier &() const #else H225_TunnelledProtocol_id::operator H225_TunnelledProtocolAlternateIdentifier &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_TunnelledProtocolAlternateIdentifier), PInvalidCast); #endif return *(H225_TunnelledProtocolAlternateIdentifier *)choice; } H225_TunnelledProtocol_id::operator const H225_TunnelledProtocolAlternateIdentifier &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_TunnelledProtocolAlternateIdentifier), PInvalidCast); #endif return *(H225_TunnelledProtocolAlternateIdentifier *)choice; } PBoolean H225_TunnelledProtocol_id::CreateObject() { switch (tag) { case e_tunnelledProtocolObjectID : choice = new PASN_ObjectId(); return TRUE; case e_tunnelledProtocolAlternateID : choice = new H225_TunnelledProtocolAlternateIdentifier(); return TRUE; } choice = NULL; return FALSE; } PObject * H225_TunnelledProtocol_id::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_TunnelledProtocol_id::Class()), PInvalidCast); #endif return new H225_TunnelledProtocol_id(*this); } // // AddressPattern_range // H225_AddressPattern_range::H225_AddressPattern_range(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H225_AddressPattern_range::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "startOfRange = " << setprecision(indent) << m_startOfRange << '\n'; strm << setw(indent+13) << "endOfRange = " << setprecision(indent) << m_endOfRange << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_AddressPattern_range::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_AddressPattern_range), PInvalidCast); #endif const H225_AddressPattern_range & other = (const H225_AddressPattern_range &)obj; Comparison result; if ((result = m_startOfRange.Compare(other.m_startOfRange)) != EqualTo) return result; if ((result = m_endOfRange.Compare(other.m_endOfRange)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_AddressPattern_range::GetDataLength() const { PINDEX length = 0; length += m_startOfRange.GetObjectLength(); length += m_endOfRange.GetObjectLength(); return length; } PBoolean H225_AddressPattern_range::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_startOfRange.Decode(strm)) return FALSE; if (!m_endOfRange.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_AddressPattern_range::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_startOfRange.Encode(strm); m_endOfRange.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_AddressPattern_range::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_AddressPattern_range::Class()), PInvalidCast); #endif return new H225_AddressPattern_range(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_ANSI_41_UIM_system_id[]={ {"sid",0} ,{"mid",1} }; #endif // // ANSI-41-UIM_system-id // H225_ANSI_41_UIM_system_id::H225_ANSI_41_UIM_system_id(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_ANSI_41_UIM_system_id,2 #endif ) { } PBoolean H225_ANSI_41_UIM_system_id::CreateObject() { switch (tag) { case e_sid : choice = new PASN_IA5String(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 4); return TRUE; case e_mid : choice = new PASN_IA5String(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 4); return TRUE; } choice = NULL; return FALSE; } PObject * H225_ANSI_41_UIM_system_id::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ANSI_41_UIM_system_id::Class()), PInvalidCast); #endif return new H225_ANSI_41_UIM_system_id(*this); } // // ArrayOf_TransportAddress // H225_ArrayOf_TransportAddress::H225_ArrayOf_TransportAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_TransportAddress::CreateObject() const { return new H225_TransportAddress; } H225_TransportAddress & H225_ArrayOf_TransportAddress::operator[](PINDEX i) const { return (H225_TransportAddress &)array[i]; } PObject * H225_ArrayOf_TransportAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_TransportAddress::Class()), PInvalidCast); #endif return new H225_ArrayOf_TransportAddress(*this); } // // ArrayOf_AlternateGK // H225_ArrayOf_AlternateGK::H225_ArrayOf_AlternateGK(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_AlternateGK::CreateObject() const { return new H225_AlternateGK; } H225_AlternateGK & H225_ArrayOf_AlternateGK::operator[](PINDEX i) const { return (H225_AlternateGK &)array[i]; } PObject * H225_ArrayOf_AlternateGK::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_AlternateGK::Class()), PInvalidCast); #endif return new H225_ArrayOf_AlternateGK(*this); } // // CryptoH323Token_cryptoEPPwdHash // H225_CryptoH323Token_cryptoEPPwdHash::H225_CryptoH323Token_cryptoEPPwdHash(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H225_CryptoH323Token_cryptoEPPwdHash::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+8) << "alias = " << setprecision(indent) << m_alias << '\n'; strm << setw(indent+12) << "timeStamp = " << setprecision(indent) << m_timeStamp << '\n'; strm << setw(indent+8) << "token = " << setprecision(indent) << m_token << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_CryptoH323Token_cryptoEPPwdHash::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_CryptoH323Token_cryptoEPPwdHash), PInvalidCast); #endif const H225_CryptoH323Token_cryptoEPPwdHash & other = (const H225_CryptoH323Token_cryptoEPPwdHash &)obj; Comparison result; if ((result = m_alias.Compare(other.m_alias)) != EqualTo) return result; if ((result = m_timeStamp.Compare(other.m_timeStamp)) != EqualTo) return result; if ((result = m_token.Compare(other.m_token)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_CryptoH323Token_cryptoEPPwdHash::GetDataLength() const { PINDEX length = 0; length += m_alias.GetObjectLength(); length += m_timeStamp.GetObjectLength(); length += m_token.GetObjectLength(); return length; } PBoolean H225_CryptoH323Token_cryptoEPPwdHash::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_alias.Decode(strm)) return FALSE; if (!m_timeStamp.Decode(strm)) return FALSE; if (!m_token.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_CryptoH323Token_cryptoEPPwdHash::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_alias.Encode(strm); m_timeStamp.Encode(strm); m_token.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_CryptoH323Token_cryptoEPPwdHash::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CryptoH323Token_cryptoEPPwdHash::Class()), PInvalidCast); #endif return new H225_CryptoH323Token_cryptoEPPwdHash(*this); } // // CryptoH323Token_cryptoGKPwdHash // H225_CryptoH323Token_cryptoGKPwdHash::H225_CryptoH323Token_cryptoGKPwdHash(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H225_CryptoH323Token_cryptoGKPwdHash::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "gatekeeperId = " << setprecision(indent) << m_gatekeeperId << '\n'; strm << setw(indent+12) << "timeStamp = " << setprecision(indent) << m_timeStamp << '\n'; strm << setw(indent+8) << "token = " << setprecision(indent) << m_token << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_CryptoH323Token_cryptoGKPwdHash::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_CryptoH323Token_cryptoGKPwdHash), PInvalidCast); #endif const H225_CryptoH323Token_cryptoGKPwdHash & other = (const H225_CryptoH323Token_cryptoGKPwdHash &)obj; Comparison result; if ((result = m_gatekeeperId.Compare(other.m_gatekeeperId)) != EqualTo) return result; if ((result = m_timeStamp.Compare(other.m_timeStamp)) != EqualTo) return result; if ((result = m_token.Compare(other.m_token)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_CryptoH323Token_cryptoGKPwdHash::GetDataLength() const { PINDEX length = 0; length += m_gatekeeperId.GetObjectLength(); length += m_timeStamp.GetObjectLength(); length += m_token.GetObjectLength(); return length; } PBoolean H225_CryptoH323Token_cryptoGKPwdHash::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_gatekeeperId.Decode(strm)) return FALSE; if (!m_timeStamp.Decode(strm)) return FALSE; if (!m_token.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_CryptoH323Token_cryptoGKPwdHash::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_gatekeeperId.Encode(strm); m_timeStamp.Encode(strm); m_token.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_CryptoH323Token_cryptoGKPwdHash::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CryptoH323Token_cryptoGKPwdHash::Class()), PInvalidCast); #endif return new H225_CryptoH323Token_cryptoGKPwdHash(*this); } // // CapacityReportingSpecification_when // H225_CapacityReportingSpecification_when::H225_CapacityReportingSpecification_when(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_CapacityReportingSpecification_when::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_callStart)) strm << setw(indent+12) << "callStart = " << setprecision(indent) << m_callStart << '\n'; if (HasOptionalField(e_callEnd)) strm << setw(indent+10) << "callEnd = " << setprecision(indent) << m_callEnd << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_CapacityReportingSpecification_when::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_CapacityReportingSpecification_when), PInvalidCast); #endif const H225_CapacityReportingSpecification_when & other = (const H225_CapacityReportingSpecification_when &)obj; Comparison result; if ((result = m_callStart.Compare(other.m_callStart)) != EqualTo) return result; if ((result = m_callEnd.Compare(other.m_callEnd)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_CapacityReportingSpecification_when::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_callStart)) length += m_callStart.GetObjectLength(); if (HasOptionalField(e_callEnd)) length += m_callEnd.GetObjectLength(); return length; } PBoolean H225_CapacityReportingSpecification_when::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_callStart) && !m_callStart.Decode(strm)) return FALSE; if (HasOptionalField(e_callEnd) && !m_callEnd.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_CapacityReportingSpecification_when::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_callStart)) m_callStart.Encode(strm); if (HasOptionalField(e_callEnd)) m_callEnd.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_CapacityReportingSpecification_when::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CapacityReportingSpecification_when::Class()), PInvalidCast); #endif return new H225_CapacityReportingSpecification_when(*this); } // // ArrayOf_CallsAvailable // H225_ArrayOf_CallsAvailable::H225_ArrayOf_CallsAvailable(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_CallsAvailable::CreateObject() const { return new H225_CallsAvailable; } H225_CallsAvailable & H225_ArrayOf_CallsAvailable::operator[](PINDEX i) const { return (H225_CallsAvailable &)array[i]; } PObject * H225_ArrayOf_CallsAvailable::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_CallsAvailable::Class()), PInvalidCast); #endif return new H225_ArrayOf_CallsAvailable(*this); } // // CicInfo_cic // H225_CicInfo_cic::H225_CicInfo_cic(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_CicInfo_cic::CreateObject() const { PASN_OctetString * obj = new PASN_OctetString; obj->SetConstraints(PASN_Object::FixedConstraint, 2, 4); return obj; } PASN_OctetString & H225_CicInfo_cic::operator[](PINDEX i) const { return (PASN_OctetString &)array[i]; } PObject * H225_CicInfo_cic::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CicInfo_cic::Class()), PInvalidCast); #endif return new H225_CicInfo_cic(*this); } // // GroupID_member // H225_GroupID_member::H225_GroupID_member(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_GroupID_member::CreateObject() const { PASN_Integer * obj = new PASN_Integer; obj->SetConstraints(PASN_Object::FixedConstraint, 0, 65535); return obj; } PASN_Integer & H225_GroupID_member::operator[](PINDEX i) const { return (PASN_Integer &)array[i]; } PObject * H225_GroupID_member::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_GroupID_member::Class()), PInvalidCast); #endif return new H225_GroupID_member(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_ServiceControlSession_reason[]={ {"open",0} ,{"refresh",1} ,{"close",2} }; #endif // // ServiceControlSession_reason // H225_ServiceControlSession_reason::H225_ServiceControlSession_reason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_ServiceControlSession_reason,3 #endif ) { } PBoolean H225_ServiceControlSession_reason::CreateObject() { choice = (tag <= e_close) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H225_ServiceControlSession_reason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ServiceControlSession_reason::Class()), PInvalidCast); #endif return new H225_ServiceControlSession_reason(*this); } // // RasUsageSpecification_when // H225_RasUsageSpecification_when::H225_RasUsageSpecification_when(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_RasUsageSpecification_when::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_start)) strm << setw(indent+8) << "start = " << setprecision(indent) << m_start << '\n'; if (HasOptionalField(e_end)) strm << setw(indent+6) << "end = " << setprecision(indent) << m_end << '\n'; if (HasOptionalField(e_inIrr)) strm << setw(indent+8) << "inIrr = " << setprecision(indent) << m_inIrr << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_RasUsageSpecification_when::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_RasUsageSpecification_when), PInvalidCast); #endif const H225_RasUsageSpecification_when & other = (const H225_RasUsageSpecification_when &)obj; Comparison result; if ((result = m_start.Compare(other.m_start)) != EqualTo) return result; if ((result = m_end.Compare(other.m_end)) != EqualTo) return result; if ((result = m_inIrr.Compare(other.m_inIrr)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_RasUsageSpecification_when::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_start)) length += m_start.GetObjectLength(); if (HasOptionalField(e_end)) length += m_end.GetObjectLength(); if (HasOptionalField(e_inIrr)) length += m_inIrr.GetObjectLength(); return length; } PBoolean H225_RasUsageSpecification_when::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_start) && !m_start.Decode(strm)) return FALSE; if (HasOptionalField(e_end) && !m_end.Decode(strm)) return FALSE; if (HasOptionalField(e_inIrr) && !m_inIrr.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_RasUsageSpecification_when::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_start)) m_start.Encode(strm); if (HasOptionalField(e_end)) m_end.Encode(strm); if (HasOptionalField(e_inIrr)) m_inIrr.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_RasUsageSpecification_when::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_RasUsageSpecification_when::Class()), PInvalidCast); #endif return new H225_RasUsageSpecification_when(*this); } // // RasUsageSpecification_callStartingPoint // H225_RasUsageSpecification_callStartingPoint::H225_RasUsageSpecification_callStartingPoint(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_RasUsageSpecification_callStartingPoint::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_alerting)) strm << setw(indent+11) << "alerting = " << setprecision(indent) << m_alerting << '\n'; if (HasOptionalField(e_connect)) strm << setw(indent+10) << "connect = " << setprecision(indent) << m_connect << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_RasUsageSpecification_callStartingPoint::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_RasUsageSpecification_callStartingPoint), PInvalidCast); #endif const H225_RasUsageSpecification_callStartingPoint & other = (const H225_RasUsageSpecification_callStartingPoint &)obj; Comparison result; if ((result = m_alerting.Compare(other.m_alerting)) != EqualTo) return result; if ((result = m_connect.Compare(other.m_connect)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_RasUsageSpecification_callStartingPoint::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_alerting)) length += m_alerting.GetObjectLength(); if (HasOptionalField(e_connect)) length += m_connect.GetObjectLength(); return length; } PBoolean H225_RasUsageSpecification_callStartingPoint::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_alerting) && !m_alerting.Decode(strm)) return FALSE; if (HasOptionalField(e_connect) && !m_connect.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_RasUsageSpecification_callStartingPoint::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_alerting)) m_alerting.Encode(strm); if (HasOptionalField(e_connect)) m_connect.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_RasUsageSpecification_callStartingPoint::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_RasUsageSpecification_callStartingPoint::Class()), PInvalidCast); #endif return new H225_RasUsageSpecification_callStartingPoint(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_CallCreditServiceControl_billingMode[]={ {"credit",0} ,{"debit",1} }; #endif // // CallCreditServiceControl_billingMode // H225_CallCreditServiceControl_billingMode::H225_CallCreditServiceControl_billingMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_CallCreditServiceControl_billingMode,2 #endif ) { } PBoolean H225_CallCreditServiceControl_billingMode::CreateObject() { choice = (tag <= e_debit) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H225_CallCreditServiceControl_billingMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CallCreditServiceControl_billingMode::Class()), PInvalidCast); #endif return new H225_CallCreditServiceControl_billingMode(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_CallCreditServiceControl_callStartingPoint[]={ {"alerting",0} ,{"connect",1} }; #endif // // CallCreditServiceControl_callStartingPoint // H225_CallCreditServiceControl_callStartingPoint::H225_CallCreditServiceControl_callStartingPoint(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_CallCreditServiceControl_callStartingPoint,2 #endif ) { } PBoolean H225_CallCreditServiceControl_callStartingPoint::CreateObject() { choice = (tag <= e_connect) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H225_CallCreditServiceControl_callStartingPoint::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CallCreditServiceControl_callStartingPoint::Class()), PInvalidCast); #endif return new H225_CallCreditServiceControl_callStartingPoint(*this); } #endif // if ! H323_DISABLE_H225 // End of h225_1.cxx h323plus/src/h323t38.cxx0000644000175000017500000003462711602326670013457 0ustar markmark/* * h323t38.cxx * * H.323 T.38 logical channel establishment * * Open H323 Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: h323t38.cxx,v $ * Revision 1.4 2011/06/28 10:32:24 shorne * Fix typos in comments * * Revision 1.3 2010/02/24 03:40:07 shorne * Added ability to compile without t.38/t.120 support on windows * * Revision 1.2 2008/05/23 11:22:13 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:51:07 shorne * First commit of h323plus * * Revision 1.27 2004/08/24 14:23:11 csoutheren * Fixed problem with plugin codecs using capability compare functions * * Revision 1.26 2004/05/04 03:33:33 csoutheren * Added guards against comparing certain kinds of Capabilities * * Revision 1.25 2004/04/03 08:28:07 csoutheren * Remove pseudo-RTTI and replaced with real RTTI * * Revision 1.24 2002/08/05 10:03:47 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.23 2002/07/02 10:02:32 robertj * Added H323TransportAddress::GetIpAddress() so don't have to provide port * when you don't need it as in GetIpAndPort(),. * * Revision 1.22 2002/05/21 06:37:55 robertj * Fixed crash if CreateT38Handler returns NULL. * * Revision 1.21 2002/05/15 23:29:31 robertj * Backed out delete of t38 handler, causes race conditions. * * Revision 1.20 2002/05/15 01:31:23 robertj * Added missing delete of t38 handler, thanks thsuk@digitalsis.com. * Changed to allow the T.35 information to be adjusted so it will work for * various vendors version of the non-standard capability. * * Revision 1.19 2002/05/14 08:41:31 robertj * Fixed incorrect class type check for finding reverse T.38 channel and also * fixed possible race condition on channel close, thanks Vyacheslav Frolov * * Revision 1.18 2002/05/10 05:50:02 robertj * Added the max bit rate field to the data channel capability class. * Added session ID to the data logical channel class. * Added capability for old pre-v3 non-standard T.38. * * Revision 1.17 2002/04/17 00:49:04 robertj * Fixed problems with T.38 start up, thanks Vyacheslav Frolov. * * Revision 1.16 2002/02/13 07:41:45 robertj * Fixed missing setting of transport on second H323Channel, thanks Vyacheslav Frolov * * Revision 1.15 2002/02/09 04:39:05 robertj * Changes to allow T.38 logical channels to use single transport which is * now owned by the OpalT38Protocol object instead of H323Channel. * * Revision 1.14 2002/01/10 04:08:42 robertj * Fixed missing bit rate in mode request PDU. * * Revision 1.13 2002/01/09 00:21:40 robertj * Changes to support outgoing H.245 RequstModeChange. * * Revision 1.12 2002/01/01 23:27:50 craigs * Added CleanupOnTermination functions * Thanks to Vyacheslav Frolov * * Revision 1.11 2001/12/22 03:21:58 robertj * Added create protocol function to H323Connection. * * Revision 1.10 2001/12/22 01:55:06 robertj * Removed vast quatities of redundent code that is done by ancestor class. * * Revision 1.9 2001/12/19 09:15:43 craigs * Added changes from Vyacheslav Frolov * * Revision 1.8 2001/12/14 08:36:36 robertj * More implementation of T.38, thanks Adam Lazur * * Revision 1.7 2001/11/20 03:04:30 robertj * Added ability to reuse t38 channels with same session ID. * * Revision 1.6 2001/11/09 05:39:54 craigs * Added initial T.38 support thanks to Adam Lazur * * Revision 1.5 2001/09/12 07:48:05 robertj * Fixed various problems with tracing. * * Revision 1.4 2001/08/06 03:08:57 robertj * Fission of h323.h to h323ep.h & h323con.h, h323.h now just includes files. * * Revision 1.3 2001/07/24 02:26:24 robertj * Added UDP, dual TCP and single TCP modes to T.38 capability. * * Revision 1.2 2001/07/19 10:48:20 robertj * Fixed bandwidth * * Revision 1.1 2001/07/17 04:44:32 robertj * Partial implementation of T.120 and T.38 logical channels. * */ #include #include "openh323buildopts.h" #ifdef H323_T38 #ifdef __GNUC__ #pragma implementation "h323t38.h" #endif #include "h323t38.h" #include "h323con.h" #include "h245.h" #include "t38proto.h" #include "t38.h" #include "h323ep.h" #define new PNEW #define FAX_BIT_RATE 144 //14.4k ///////////////////////////////////////////////////////////////////////////// H323_T38Capability::H323_T38Capability(TransportMode m) : H323DataCapability(FAX_BIT_RATE), mode(m) { } PObject::Comparison H323_T38Capability::Compare(const PObject & obj) const { if (!PIsDescendant(&obj, H323_T38Capability)) return LessThan; Comparison result = H323DataCapability::Compare(obj); if (result != EqualTo) return result; PAssert(PIsDescendant(&obj, H323_T38Capability), PInvalidCast); const H323_T38Capability & other = (const H323_T38Capability &)obj; if (mode < other.mode) return LessThan; if (mode > other.mode) return GreaterThan; return EqualTo; } PObject * H323_T38Capability::Clone() const { return new H323_T38Capability(*this); } unsigned H323_T38Capability::GetSubType() const { return H245_DataApplicationCapability_application::e_t38fax; } PString H323_T38Capability::GetFormatName() const { static const char * const modes[NumTransportModes] = { "UDP", "TCP2", "TCP" }; return PString("T.38-") + modes[mode]; } H323Channel * H323_T38Capability::CreateChannel(H323Connection & connection, H323Channel::Directions direction, unsigned int sessionID, const H245_H2250LogicalChannelParameters * /*params*/) const { PTRACE(1, "H323T38\tCreateChannel, sessionID=" << sessionID << " direction=" << direction); return new H323_T38Channel(connection, *this, direction, sessionID, mode); } PBoolean H323_T38Capability::OnSendingPDU(H245_DataApplicationCapability & pdu) const { PTRACE(3, "H323T38\tOnSendingPDU for capability"); pdu.m_maxBitRate = FAX_BIT_RATE; pdu.m_application.SetTag(H245_DataApplicationCapability_application::e_t38fax); H245_DataApplicationCapability_application_t38fax & fax = pdu.m_application; return OnSendingPDU(fax.m_t38FaxProtocol, fax.m_t38FaxProfile); } PBoolean H323_T38Capability::OnSendingPDU(H245_DataMode & pdu) const { pdu.m_bitRate = FAX_BIT_RATE; pdu.m_application.SetTag(H245_DataMode_application::e_t38fax); H245_DataMode_application_t38fax & fax = pdu.m_application; return OnSendingPDU(fax.m_t38FaxProtocol, fax.m_t38FaxProfile); } PBoolean H323_T38Capability::OnSendingPDU(H245_DataProtocolCapability & proto, H245_T38FaxProfile & profile) const { if (mode == e_UDP) { proto.SetTag(H245_DataProtocolCapability::e_udp); profile.m_t38FaxRateManagement.SetTag(H245_T38FaxRateManagement::e_transferredTCF); // recommended for UDP profile.IncludeOptionalField(H245_T38FaxProfile::e_t38FaxUdpOptions); profile.m_t38FaxUdpOptions.IncludeOptionalField(H245_T38FaxUdpOptions::e_t38FaxMaxBuffer); profile.m_t38FaxUdpOptions.m_t38FaxMaxBuffer = 200; profile.m_t38FaxUdpOptions.IncludeOptionalField(H245_T38FaxUdpOptions::e_t38FaxMaxDatagram); profile.m_t38FaxUdpOptions.m_t38FaxMaxDatagram = 72; profile.m_t38FaxUdpOptions.m_t38FaxUdpEC.SetTag(H245_T38FaxUdpOptions_t38FaxUdpEC::e_t38UDPRedundancy); } else { proto.SetTag(H245_DataProtocolCapability::e_tcp); profile.m_t38FaxRateManagement.SetTag(H245_T38FaxRateManagement::e_localTCF); // recommended for TCP profile.IncludeOptionalField(H245_T38FaxProfile::e_t38FaxTcpOptions); profile.m_t38FaxTcpOptions.m_t38TCPBidirectionalMode = mode == e_SingleTCP; } return TRUE; } PBoolean H323_T38Capability::OnReceivedPDU(const H245_DataApplicationCapability & cap) { PTRACE(3, "H323T38\tOnReceivedPDU for capability"); if (cap.m_application.GetTag() != H245_DataApplicationCapability_application::e_t38fax) return FALSE; const H245_DataApplicationCapability_application_t38fax & fax = cap.m_application; const H245_DataProtocolCapability & proto = fax.m_t38FaxProtocol; if (proto.GetTag() == H245_DataProtocolCapability::e_udp) mode = e_UDP; else { const H245_T38FaxProfile & profile = fax.m_t38FaxProfile; if (profile.m_t38FaxTcpOptions.m_t38TCPBidirectionalMode) mode = e_SingleTCP; else mode = e_DualTCP; } return TRUE; } ////////////////////////////////////////////////////////////// static const char T38NonStandardCapabilityName[] = "T38FaxUDP"; H323_T38NonStandardCapability::H323_T38NonStandardCapability(BYTE country, BYTE extension, WORD manufacturer) : H323NonStandardDataCapability(FAX_BIT_RATE, country, extension, manufacturer, (const BYTE *)T38NonStandardCapabilityName, (PINDEX)sizeof(T38NonStandardCapabilityName)-1) { } PObject * H323_T38NonStandardCapability::Clone() const { return new H323_T38NonStandardCapability(*this); } class PString H323_T38NonStandardCapability::GetFormatName() const { return T38NonStandardCapabilityName; } H323Channel * H323_T38NonStandardCapability::CreateChannel(H323Connection & connection, H323Channel::Directions direction, unsigned int sessionID, const H245_H2250LogicalChannelParameters * /*params*/) const { PTRACE(1, "H323T38\tCreateChannel, sessionID=" << sessionID << " direction=" << direction); return new H323_T38Channel(connection, *this, direction, sessionID, H323_T38Capability::e_UDP); } ////////////////////////////////////////////////////////////// H323_T38Channel::H323_T38Channel(H323Connection & connection, const H323Capability & capability, H323Channel::Directions dir, unsigned sessionID, H323_T38Capability::TransportMode mode) : H323DataChannel(connection, capability, dir, sessionID) { PTRACE(3, "H323T38\tH323 channel created"); // Transport will be owned by OpalT38Protocol autoDeleteTransport = FALSE; separateReverseChannel = mode != H323_T38Capability::e_SingleTCP; usesTCP = mode != H323_T38Capability::e_UDP; t38handler = NULL; H323Channel * chan = connection.FindChannel(sessionID, dir == H323Channel::IsTransmitter); if (chan != NULL) { if (PIsDescendant(chan, H323_T38Channel)) { PTRACE(3, "H323T38\tConnected to existing T.38 handler"); t38handler = ((H323_T38Channel *)chan)->GetHandler(); } else PTRACE(1, "H323T38\tCreateChannel, channel " << *chan << " is not H323_T38Channel"); } if (t38handler == NULL) { PTRACE(3, "H323T38\tCreating new T.38 handler"); t38handler = connection.CreateT38ProtocolHandler(); } if (t38handler != NULL) { transport = t38handler->GetTransport(); if (transport == NULL && !usesTCP && CreateTransport()) t38handler->SetTransport(transport, TRUE); } } H323_T38Channel::~H323_T38Channel() { } void H323_T38Channel::CleanUpOnTermination() { if (terminating) return; PTRACE(3, "H323T38\tCleanUpOnTermination"); if (t38handler != NULL) t38handler->CleanUpOnTermination(); H323DataChannel::CleanUpOnTermination(); } PBoolean H323_T38Channel::OnSendingPDU(H245_OpenLogicalChannel & open) const { if (t38handler != NULL) return H323DataChannel::OnSendingPDU(open); PTRACE(1, "H323T38\tNo protocol handler, aborting OpenLogicalChannel."); return FALSE; } PBoolean H323_T38Channel::OnReceivedPDU(const H245_OpenLogicalChannel & open, unsigned & errorCode) { if (t38handler != NULL) return H323DataChannel::OnReceivedPDU(open, errorCode); errorCode = H245_OpenLogicalChannelReject_cause::e_unspecified; PTRACE(1, "H323T38\tNo protocol handler, refusing OpenLogicalChannel."); return FALSE; } void H323_T38Channel::Receive() { PTRACE(2, "H323T38\tReceive thread started."); if (t38handler != NULL) { if (listener != NULL) { transport = listener->Accept(30000); // 30 second wait for connect back t38handler->SetTransport(transport); } if (transport != NULL) t38handler->Answer(); else { PTRACE(1, "H323T38\tNo transport, aborting thread."); } } else { PTRACE(1, "H323T38\tNo protocol handler, aborting thread."); } if (!terminating) connection.CloseLogicalChannelNumber(number); PTRACE(2, "H323T38\tReceive thread ended"); } void H323_T38Channel::Transmit() { if (terminating) return; PTRACE(2, "H323T38\tTransmit thread starting"); if (t38handler != NULL) t38handler->Originate(); else { PTRACE(1, "H323T38\tTransmit no proto handler"); } if (!terminating) connection.CloseLogicalChannelNumber(number); PTRACE(2, "H323T38\tTransmit thread terminating"); } PBoolean H323_T38Channel::CreateTransport() { if (transport != NULL) return TRUE; if (usesTCP) return H323DataChannel::CreateTransport(); PIPSocket::Address ip; if (!connection.GetControlChannel().GetLocalAddress().GetIpAddress(ip)) { PTRACE(2, "H323T38\tTrying to use UDP when base transport is not IP"); PIPSocket::GetHostAddress(ip); } transport = new H323TransportUDP(connection.GetEndPoint(), ip); PTRACE(3, "H323T38\tCreated transport: " << *transport); return TRUE; } PBoolean H323_T38Channel::CreateListener() { if (listener != NULL) return TRUE; if (usesTCP) { return H323DataChannel::CreateListener(); PTRACE(3, "H323T38\tCreated listener " << *listener); } return CreateTransport(); } #endif // H323_T38 ///////////////////////////////////////////////////////////////////////////// h323plus/src/libver.rc0000644000175000017500000000552310655704673013531 0ustar markmark/* * libver.rc * * Library version resource. * * Copyright (c) 1993-1998 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. */ #include #include "../version.h" #ifndef PRODUCT #define PRODUCT OpenH323 #endif #ifndef MANUFACTURER_NAME #define MANUFACTURER_NAME "Equivalence Pty. Ltd." #endif #ifndef PRODUCT_DESCRIPTION #define PRODUCT_DESCRIPTION "Open H.323 Library" #endif #define AlphaCode alpha #define BetaCode beta #define ReleaseCode pl #define MkStr2(s) #s #define MkStr(s) MkStr2(s) #if BUILD_NUMBER==0 #define VERSION_STRING MkStr(MAJOR_VERSION) "." MkStr(MINOR_VERSION) #else #define VERSION_STRING MkStr(MAJOR_VERSION) "." MkStr(MINOR_VERSION) MkStr(BUILD_TYPE) MkStr(BUILD_NUMBER) #endif #ifndef PRODUCT_NAME #define PRODUCT_NAME MkStr(PRODUCT) #endif #ifndef EXECUTABLE_NAME #ifdef _DEBUG #define EXECUTABLE_NAME PRODUCT_NAME "d.dll" #else #ifdef PTRACING #define EXECUTABLE_NAME PRODUCT_NAME ".dll" #else #define EXECUTABLE_NAME PRODUCT_NAME "n.dll" #endif #endif #endif VS_VERSION_INFO VERSIONINFO #define pl 0 #define beta 1 #define alpha 2 FILEVERSION MAJOR_VERSION,MINOR_VERSION,BUILD_NUMBER,BUILD_TYPE PRODUCTVERSION MAJOR_VERSION,MINOR_VERSION,BUILD_NUMBER,BUILD_TYPE #undef alpha #undef beta #undef pl FILEFLAGSMASK VS_FFI_FILEFLAGSMASK #ifdef _DEBUG FILEFLAGS VS_FF_DEBUG #else FILEFLAGS 0 #endif FILEOS VOS_NT_WINDOWS32 FILETYPE VFT_APP FILESUBTYPE VFT2_UNKNOWN BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "0c0904b0" BEGIN VALUE "CompanyName", MANUFACTURER_NAME "\0" VALUE "FileDescription", PRODUCT_DESCRIPTION "\0" VALUE "FileVersion", VERSION_STRING "\0" VALUE "InternalName", PRODUCT_NAME "\0" VALUE "LegalCopyright", "Copyright Љ " MANUFACTURER_NAME " 1993-2000\0" VALUE "OriginalFilename", EXECUTABLE_NAME "\0" VALUE "ProductName", PRODUCT_DESCRIPTION "\0" VALUE "ProductVersion", VERSION_STRING "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0xc09, 1200 END END /////////////////////////////////////////////////////////////////////////////// h323plus/src/q922.cxx0000644000175000017500000003231211015524367013124 0ustar markmark/* * q922.h * * Q.922 PDU implementation for the OpenH323 Project. * * Copyright (c) 2006 Network for Educational Technology, ETH Zurich. * Written by Hannes Friederich. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * Contributor(s): ______________________________________. * * $Log: q922.cxx,v $ * Revision 1.2 2008/05/23 11:22:31 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:51:07 shorne * First commit of h323plus * * Revision 1.1 2006/06/22 11:07:23 shorne * Backport of FECC (H.224) from Opal * * Revision 1.4 2006/05/03 17:45:51 hfriederich * reverting incorrect byte orderings in fcs from previous patch * * Revision 1.3 2006/05/01 10:29:50 csoutheren * Added pragams for gcc < 4 * * Revision 1.2 2006/04/24 12:53:50 rjongbloed * Port of H.224 Far End Camera Control to DevStudio/Windows * * Revision 1.1 2006/04/20 16:48:17 hfriederich * Initial version of H.224/H.281 implementation. * */ #include #ifdef __GNUC__ #pragma implementation "q922.h" #endif #ifdef _MSC_VER #pragma warning(disable : 4244) #endif #include #define Q922_FCS_SIZE 2 #define Q922_OK 0x00 #define Q922_FLAG 0x7e #define Q922_ERROR 0x7f /* * FCS lookup table. * Code based on implementation in RFC1549 */ static WORD fcstable[256] = { 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 }; Q922_Frame::Q922_Frame(PINDEX size) : PBYTEArray(Q922_HEADER_SIZE + size) { informationFieldSize = size; } Q922_Frame::~Q922_Frame() { } void Q922_Frame::SetInformationFieldSize(PINDEX size) { informationFieldSize = size; SetMinSize(Q922_HEADER_SIZE+informationFieldSize); } PBoolean Q922_Frame::Decode(const BYTE *data, PINDEX size) { // a valid frame must contain at least 2xFLAG, 3 octets Q922 header, // 2 octets FCS and at least 1 octet information if(size < 2+3+2+1) return FALSE; PINDEX octetIndex = 0; BYTE bitIndex = 7; BYTE onesCounter = 0; if(!FindFlagEnd(data, size, octetIndex, bitIndex)) return FALSE; BYTE firstOctet; BYTE secondOctet; // read the two first octets if(octetIndex >= size || DecodeByte(data, &firstOctet, octetIndex, bitIndex, onesCounter) != Q922_OK) return FALSE; if(octetIndex >= size || DecodeByte(data, &secondOctet, octetIndex, bitIndex, onesCounter) != Q922_OK) return FALSE; PINDEX arrayIndex = 0; while(octetIndex < size) { BYTE decodedByte; BYTE result = DecodeByte(data, &decodedByte, octetIndex, bitIndex, onesCounter); if(result == Q922_ERROR) { return FALSE; } else if(result == Q922_FLAG) { // Found end flag // FCS is contained in firstOctet and secondOctet. WORD fcs = (secondOctet << 8) | firstOctet; // Calculate FCS from data to check WORD calculatedFCS = CalculateFCS((const BYTE *)theArray, arrayIndex); if(fcs != calculatedFCS) { PTRACE(3, "Q.922 frame has incorrect checksum"); return FALSE; } if(arrayIndex > Q922_HEADER_SIZE) { SetInformationFieldSize(arrayIndex - Q922_HEADER_SIZE); return TRUE; } return FALSE; } theArray[arrayIndex] = firstOctet; arrayIndex++; firstOctet = secondOctet; secondOctet = decodedByte; // Q922-frames must not exceed an information field size of 260 octets if(arrayIndex >= 260+Q922_HEADER_SIZE) { return FALSE; } } return FALSE; } PINDEX Q922_Frame::GetEncodedSize() const { if(informationFieldSize == 0) { return 0; // cannot encode } // dataSize is High Order Address, Low Order Address, Control, Information and // Frame Check Sequence (FCS, 2 Bytes) PINDEX dataSize = Q922_HEADER_SIZE + informationFieldSize + Q922_FCS_SIZE; // Due to possible need for bit insertion, the size may grow. // For simplicity, we assume twice the data size, which will certainly be enough. // So, encoded size is 3*FLAG + 2*dataSize + 3*FLAG; return 3+2*dataSize+3; } PBoolean Q922_Frame::Encode(BYTE *buffer, PINDEX & size) const { BYTE bitIndex = 7; return Encode(buffer, size, bitIndex); } PBoolean Q922_Frame::Encode(BYTE *buffer, PINDEX & size, BYTE & theBitIndex) const { if(informationFieldSize == 0) { return FALSE; } PINDEX octetIndex = 0; BYTE bitIndex = theBitIndex; BYTE onesCounter = 0; // storing three FLAG sequencs. // since the FLAG sequences may be not byte-aligned, the first FLAG sequence is encoded // into a dummy buffer and extracted from there buffer[0] = 0; BYTE dummy[3]; EncodeOctetNoEscape(Q922_FLAG, dummy, octetIndex, bitIndex); EncodeOctetNoEscape(Q922_FLAG, dummy, octetIndex, bitIndex); buffer[0] = dummy[1]; buffer[1] = dummy[1]; octetIndex = 1; EncodeOctetNoEscape(Q922_FLAG, buffer, octetIndex, bitIndex); EncodeOctetNoEscape(Q922_FLAG, buffer, octetIndex, bitIndex); // calculating the FCS PINDEX dataSize = GetInformationFieldSize() + Q922_HEADER_SIZE; WORD fcs = CalculateFCS((const BYTE *)theArray, dataSize); // Encoding the data byte-by-byte PINDEX i; PINDEX count = Q922_HEADER_SIZE + informationFieldSize; for(i = 0; i < count; i++) { EncodeOctet(theArray[i], buffer, octetIndex, bitIndex, onesCounter); } // Encoding the FCS EncodeOctet((BYTE)fcs, buffer, octetIndex, bitIndex, onesCounter); EncodeOctet((BYTE)(fcs >> 8), buffer, octetIndex, bitIndex, onesCounter); // Appending three FLAG sequences to the buffer // the buffer is not necessary byte aligned! EncodeOctetNoEscape(Q922_FLAG, buffer, octetIndex, bitIndex); EncodeOctetNoEscape(Q922_FLAG, buffer, octetIndex, bitIndex); EncodeOctetNoEscape(Q922_FLAG, buffer, octetIndex, bitIndex); // determining correct number of octets if(bitIndex == 7) { octetIndex--; } size = octetIndex; theBitIndex = bitIndex; return TRUE; } PBoolean Q922_Frame::FindFlagEnd(const BYTE *buffer, PINDEX bufferSize, PINDEX & octetIndex, BYTE & bitIndex) { BYTE positionsCorrect = 0; while(octetIndex < bufferSize) { BYTE bit = DecodeBit(buffer, octetIndex, bitIndex); switch(positionsCorrect) { case 0: if(bit == 0) { positionsCorrect = 1; } break; case 1: case 2: case 3: case 4: case 5: case 6: if(bit == 1) { positionsCorrect++; } else { positionsCorrect = 1; } break; case 7: if(bit == 0) { positionsCorrect = 0xff; } else { // got 0x7f, ABORT sequence return FALSE; } break; default: return FALSE; } if(positionsCorrect == 0xff) { break; } } if(positionsCorrect != 0xff) { return FALSE; } // First FLAG sequence found, bit index determined. // now check for additinal FLAG sequences BYTE octet = Q922_FLAG; while(octet == Q922_FLAG && octetIndex < bufferSize) { PINDEX startOctetIndex = octetIndex; BYTE startBitIndex = bitIndex; BYTE positionsCorrect = 0; unsigned i; for(i = 0; i < 8; i++) { BYTE bit = DecodeBit(buffer, octetIndex, bitIndex); switch(positionsCorrect) { case 0: if(bit == 1) { positionsCorrect = 0xf0; } else { positionsCorrect++; } break; case 1: case 2: case 3: case 4: case 5: case 6: if(bit == 0) { positionsCorrect = 0xf0; } else { positionsCorrect++; } break; case 7: if(bit == 1) { // 0x7f read return FALSE; } break; default: return FALSE; } if(positionsCorrect == 0xf0) { octetIndex = startOctetIndex; bitIndex = startBitIndex; return TRUE; } } } return FALSE; } BYTE Q922_Frame::DecodeByte(const BYTE *buffer, BYTE *destination, PINDEX & octetIndex, BYTE & bitIndex, BYTE & onesCounter) { // decoded byte is copied to destination. // returns Q922_OK if decoding succesful, // returns Q922_FLAG if ending FLAG detected, // returns Q922_ERROR if there was an error BYTE decodedByte = 0x00; PINDEX i; for(i = 0; i < 8; i++) { BYTE bit = DecodeBit(buffer, octetIndex, bitIndex); if(bit) { onesCounter++; if(onesCounter == 6) { // Either FLAG or ERROR bit = DecodeBit(buffer, octetIndex, bitIndex); if(i == 6 && !bit) { // FLAG is byte aligned AND has only 6 consecutive ones return Q922_FLAG; } else { return Q922_ERROR; } } } else { if(onesCounter == 5) { // discard bit, read again bit = DecodeBit(buffer, octetIndex, bitIndex); } onesCounter = 0; } decodedByte |= (bit << i); } *destination = decodedByte; return Q922_OK; } BYTE Q922_Frame::DecodeBit(const BYTE *buffer, PINDEX & octetIndex, BYTE & bitIndex) { BYTE bit = (buffer[octetIndex] >> bitIndex) & 0x01; if(bitIndex == 0) { octetIndex++; bitIndex = 8; } bitIndex--; return bit; } void Q922_Frame::EncodeOctet(BYTE octet, BYTE *buffer, PINDEX & octetIndex, BYTE & bitIndex, BYTE & onesCounter) const { // data is sent out with LSB first, so we need // to reverse the bit direction. // In addition, it is required to insert a zero // bit after 5 consecutive ones to avoid FLAG emulation PINDEX i; for(i = 0; i < 8; i++) { // reading one bit from the octet and write it to the buffer BYTE bit = (BYTE)((octet >> i) & 0x01); EncodeBit(bit, buffer, octetIndex, bitIndex); if(bit) { onesCounter++; if(onesCounter == 5) { // insert a zero bit EncodeBit(0, buffer, octetIndex, bitIndex); onesCounter = 0; } } else { onesCounter = 0; } } } void Q922_Frame::EncodeOctetNoEscape(BYTE octet, BYTE *buffer, PINDEX & octetIndex, BYTE & bitIndex) const { // data is sent out with LSB first, so we need // to reverse the bit direction. PINDEX i; for(i = 0; i < 8; i++) { // reating one bit from the octet and write it to the buffer BYTE bit = (BYTE)((octet >> i) & 0x01); EncodeBit(bit, buffer, octetIndex, bitIndex); } } void Q922_Frame::EncodeBit(BYTE bit, BYTE *buffer, PINDEX & octetIndex, BYTE & bitIndex) const { if(bitIndex == 7) { buffer[octetIndex] = 0; } buffer[octetIndex] |= ((bit & 0x01) << bitIndex); // adjusting bit/byte index if(bitIndex == 0) { octetIndex++; bitIndex = 8; } bitIndex--; } WORD Q922_Frame::CalculateFCS(const BYTE *data, PINDEX length) const { // initial value of FCS is all ones. WORD fcs = 0xffff; while(length--) { fcs = (fcs >> 8) ^ fcstable[(fcs ^ *data++) & 0xff]; } // take one's complement fcs = ~fcs; return fcs; } h323plus/src/mcspdu.cxx0000644000175000017500000047145611015524353013735 0ustar markmark// // mcspdu.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "mcspdu.h" #endif #include #include "mcspdu.h" #define new PNEW #if ! H323_DISABLE_MCS // // ChannelId // MCS_ChannelId::MCS_ChannelId(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } MCS_ChannelId & MCS_ChannelId::operator=(int v) { SetValue(v); return *this; } MCS_ChannelId & MCS_ChannelId::operator=(unsigned v) { SetValue(v); return *this; } PObject * MCS_ChannelId::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_ChannelId::Class()), PInvalidCast); #endif return new MCS_ChannelId(*this); } // // StaticChannelId // MCS_StaticChannelId::MCS_StaticChannelId(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 1000); } MCS_StaticChannelId & MCS_StaticChannelId::operator=(int v) { SetValue(v); return *this; } MCS_StaticChannelId & MCS_StaticChannelId::operator=(unsigned v) { SetValue(v); return *this; } PObject * MCS_StaticChannelId::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_StaticChannelId::Class()), PInvalidCast); #endif return new MCS_StaticChannelId(*this); } // // DynamicChannelId // MCS_DynamicChannelId::MCS_DynamicChannelId(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1001, 65535); } MCS_DynamicChannelId & MCS_DynamicChannelId::operator=(int v) { SetValue(v); return *this; } MCS_DynamicChannelId & MCS_DynamicChannelId::operator=(unsigned v) { SetValue(v); return *this; } PObject * MCS_DynamicChannelId::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_DynamicChannelId::Class()), PInvalidCast); #endif return new MCS_DynamicChannelId(*this); } // // UserId // MCS_UserId::MCS_UserId(unsigned tag, PASN_Object::TagClass tagClass) : MCS_DynamicChannelId(tag, tagClass) { } MCS_UserId & MCS_UserId::operator=(int v) { SetValue(v); return *this; } MCS_UserId & MCS_UserId::operator=(unsigned v) { SetValue(v); return *this; } PObject * MCS_UserId::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_UserId::Class()), PInvalidCast); #endif return new MCS_UserId(*this); } // // PrivateChannelId // MCS_PrivateChannelId::MCS_PrivateChannelId(unsigned tag, PASN_Object::TagClass tagClass) : MCS_DynamicChannelId(tag, tagClass) { } MCS_PrivateChannelId & MCS_PrivateChannelId::operator=(int v) { SetValue(v); return *this; } MCS_PrivateChannelId & MCS_PrivateChannelId::operator=(unsigned v) { SetValue(v); return *this; } PObject * MCS_PrivateChannelId::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_PrivateChannelId::Class()), PInvalidCast); #endif return new MCS_PrivateChannelId(*this); } // // AssignedChannelId // MCS_AssignedChannelId::MCS_AssignedChannelId(unsigned tag, PASN_Object::TagClass tagClass) : MCS_DynamicChannelId(tag, tagClass) { } MCS_AssignedChannelId & MCS_AssignedChannelId::operator=(int v) { SetValue(v); return *this; } MCS_AssignedChannelId & MCS_AssignedChannelId::operator=(unsigned v) { SetValue(v); return *this; } PObject * MCS_AssignedChannelId::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_AssignedChannelId::Class()), PInvalidCast); #endif return new MCS_AssignedChannelId(*this); } // // TokenId // MCS_TokenId::MCS_TokenId(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } MCS_TokenId & MCS_TokenId::operator=(int v) { SetValue(v); return *this; } MCS_TokenId & MCS_TokenId::operator=(unsigned v) { SetValue(v); return *this; } PObject * MCS_TokenId::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_TokenId::Class()), PInvalidCast); #endif return new MCS_TokenId(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_MCS_TokenStatus[]={ {"notInUse",0} ,{"selfGrabbed",1} ,{"otherGrabbed",2} ,{"selfInhibited",3} ,{"otherInhibited",4} ,{"selfRecipient",5} ,{"selfGiving",6} ,{"otherGiving",7} }; #endif // // TokenStatus // MCS_TokenStatus::MCS_TokenStatus(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 7, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_MCS_TokenStatus,8 #endif ) { } MCS_TokenStatus & MCS_TokenStatus::operator=(unsigned v) { SetValue(v); return *this; } PObject * MCS_TokenStatus::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_TokenStatus::Class()), PInvalidCast); #endif return new MCS_TokenStatus(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_MCS_DataPriority[]={ {"top",0} ,{"high",1} ,{"medium",2} ,{"low",3} }; #endif // // DataPriority // MCS_DataPriority::MCS_DataPriority(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 3, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_MCS_DataPriority,4 #endif ) { } MCS_DataPriority & MCS_DataPriority::operator=(unsigned v) { SetValue(v); return *this; } PObject * MCS_DataPriority::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_DataPriority::Class()), PInvalidCast); #endif return new MCS_DataPriority(*this); } // // Segmentation // MCS_Segmentation::MCS_Segmentation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_BitString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 2); } PObject * MCS_Segmentation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_Segmentation::Class()), PInvalidCast); #endif return new MCS_Segmentation(*this); } // // DomainParameters // MCS_DomainParameters::MCS_DomainParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { m_maxChannelIds.SetConstraints(PASN_Object::FixedConstraint, 0, MaximumValue); m_maxUserIds.SetConstraints(PASN_Object::FixedConstraint, 0, MaximumValue); m_maxTokenIds.SetConstraints(PASN_Object::FixedConstraint, 0, MaximumValue); m_numPriorities.SetConstraints(PASN_Object::FixedConstraint, 0, MaximumValue); m_minThroughput.SetConstraints(PASN_Object::FixedConstraint, 0, MaximumValue); m_maxHeight.SetConstraints(PASN_Object::FixedConstraint, 0, MaximumValue); m_maxMCSPDUsize.SetConstraints(PASN_Object::FixedConstraint, 0, MaximumValue); m_protocolVersion.SetConstraints(PASN_Object::FixedConstraint, 0, MaximumValue); } #ifndef PASN_NOPRINTON void MCS_DomainParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "maxChannelIds = " << setprecision(indent) << m_maxChannelIds << '\n'; strm << setw(indent+13) << "maxUserIds = " << setprecision(indent) << m_maxUserIds << '\n'; strm << setw(indent+14) << "maxTokenIds = " << setprecision(indent) << m_maxTokenIds << '\n'; strm << setw(indent+16) << "numPriorities = " << setprecision(indent) << m_numPriorities << '\n'; strm << setw(indent+16) << "minThroughput = " << setprecision(indent) << m_minThroughput << '\n'; strm << setw(indent+12) << "maxHeight = " << setprecision(indent) << m_maxHeight << '\n'; strm << setw(indent+16) << "maxMCSPDUsize = " << setprecision(indent) << m_maxMCSPDUsize << '\n'; strm << setw(indent+18) << "protocolVersion = " << setprecision(indent) << m_protocolVersion << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_DomainParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_DomainParameters), PInvalidCast); #endif const MCS_DomainParameters & other = (const MCS_DomainParameters &)obj; Comparison result; if ((result = m_maxChannelIds.Compare(other.m_maxChannelIds)) != EqualTo) return result; if ((result = m_maxUserIds.Compare(other.m_maxUserIds)) != EqualTo) return result; if ((result = m_maxTokenIds.Compare(other.m_maxTokenIds)) != EqualTo) return result; if ((result = m_numPriorities.Compare(other.m_numPriorities)) != EqualTo) return result; if ((result = m_minThroughput.Compare(other.m_minThroughput)) != EqualTo) return result; if ((result = m_maxHeight.Compare(other.m_maxHeight)) != EqualTo) return result; if ((result = m_maxMCSPDUsize.Compare(other.m_maxMCSPDUsize)) != EqualTo) return result; if ((result = m_protocolVersion.Compare(other.m_protocolVersion)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_DomainParameters::GetDataLength() const { PINDEX length = 0; length += m_maxChannelIds.GetObjectLength(); length += m_maxUserIds.GetObjectLength(); length += m_maxTokenIds.GetObjectLength(); length += m_numPriorities.GetObjectLength(); length += m_minThroughput.GetObjectLength(); length += m_maxHeight.GetObjectLength(); length += m_maxMCSPDUsize.GetObjectLength(); length += m_protocolVersion.GetObjectLength(); return length; } PBoolean MCS_DomainParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_maxChannelIds.Decode(strm)) return FALSE; if (!m_maxUserIds.Decode(strm)) return FALSE; if (!m_maxTokenIds.Decode(strm)) return FALSE; if (!m_numPriorities.Decode(strm)) return FALSE; if (!m_minThroughput.Decode(strm)) return FALSE; if (!m_maxHeight.Decode(strm)) return FALSE; if (!m_maxMCSPDUsize.Decode(strm)) return FALSE; if (!m_protocolVersion.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_DomainParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_maxChannelIds.Encode(strm); m_maxUserIds.Encode(strm); m_maxTokenIds.Encode(strm); m_numPriorities.Encode(strm); m_minThroughput.Encode(strm); m_maxHeight.Encode(strm); m_maxMCSPDUsize.Encode(strm); m_protocolVersion.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_DomainParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_DomainParameters::Class()), PInvalidCast); #endif return new MCS_DomainParameters(*this); } // // Connect-Initial // MCS_Connect_Initial::MCS_Connect_Initial(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_Connect_Initial::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "callingDomainSelector = " << setprecision(indent) << m_callingDomainSelector << '\n'; strm << setw(indent+23) << "calledDomainSelector = " << setprecision(indent) << m_calledDomainSelector << '\n'; strm << setw(indent+13) << "upwardFlag = " << setprecision(indent) << m_upwardFlag << '\n'; strm << setw(indent+19) << "targetParameters = " << setprecision(indent) << m_targetParameters << '\n'; strm << setw(indent+20) << "minimumParameters = " << setprecision(indent) << m_minimumParameters << '\n'; strm << setw(indent+20) << "maximumParameters = " << setprecision(indent) << m_maximumParameters << '\n'; strm << setw(indent+11) << "userData = " << setprecision(indent) << m_userData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_Connect_Initial::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_Connect_Initial), PInvalidCast); #endif const MCS_Connect_Initial & other = (const MCS_Connect_Initial &)obj; Comparison result; if ((result = m_callingDomainSelector.Compare(other.m_callingDomainSelector)) != EqualTo) return result; if ((result = m_calledDomainSelector.Compare(other.m_calledDomainSelector)) != EqualTo) return result; if ((result = m_upwardFlag.Compare(other.m_upwardFlag)) != EqualTo) return result; if ((result = m_targetParameters.Compare(other.m_targetParameters)) != EqualTo) return result; if ((result = m_minimumParameters.Compare(other.m_minimumParameters)) != EqualTo) return result; if ((result = m_maximumParameters.Compare(other.m_maximumParameters)) != EqualTo) return result; if ((result = m_userData.Compare(other.m_userData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_Connect_Initial::GetDataLength() const { PINDEX length = 0; length += m_callingDomainSelector.GetObjectLength(); length += m_calledDomainSelector.GetObjectLength(); length += m_upwardFlag.GetObjectLength(); length += m_targetParameters.GetObjectLength(); length += m_minimumParameters.GetObjectLength(); length += m_maximumParameters.GetObjectLength(); length += m_userData.GetObjectLength(); return length; } PBoolean MCS_Connect_Initial::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_callingDomainSelector.Decode(strm)) return FALSE; if (!m_calledDomainSelector.Decode(strm)) return FALSE; if (!m_upwardFlag.Decode(strm)) return FALSE; if (!m_targetParameters.Decode(strm)) return FALSE; if (!m_minimumParameters.Decode(strm)) return FALSE; if (!m_maximumParameters.Decode(strm)) return FALSE; if (!m_userData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_Connect_Initial::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_callingDomainSelector.Encode(strm); m_calledDomainSelector.Encode(strm); m_upwardFlag.Encode(strm); m_targetParameters.Encode(strm); m_minimumParameters.Encode(strm); m_maximumParameters.Encode(strm); m_userData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_Connect_Initial::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_Connect_Initial::Class()), PInvalidCast); #endif return new MCS_Connect_Initial(*this); } // // Connect-Additional // MCS_Connect_Additional::MCS_Connect_Additional(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { m_calledConnectId.SetConstraints(PASN_Object::FixedConstraint, 0, MaximumValue); } #ifndef PASN_NOPRINTON void MCS_Connect_Additional::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+18) << "calledConnectId = " << setprecision(indent) << m_calledConnectId << '\n'; strm << setw(indent+15) << "dataPriority = " << setprecision(indent) << m_dataPriority << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_Connect_Additional::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_Connect_Additional), PInvalidCast); #endif const MCS_Connect_Additional & other = (const MCS_Connect_Additional &)obj; Comparison result; if ((result = m_calledConnectId.Compare(other.m_calledConnectId)) != EqualTo) return result; if ((result = m_dataPriority.Compare(other.m_dataPriority)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_Connect_Additional::GetDataLength() const { PINDEX length = 0; length += m_calledConnectId.GetObjectLength(); length += m_dataPriority.GetObjectLength(); return length; } PBoolean MCS_Connect_Additional::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_calledConnectId.Decode(strm)) return FALSE; if (!m_dataPriority.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_Connect_Additional::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_calledConnectId.Encode(strm); m_dataPriority.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_Connect_Additional::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_Connect_Additional::Class()), PInvalidCast); #endif return new MCS_Connect_Additional(*this); } // // PDin // MCS_PDin::MCS_PDin(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { m_heightLimit.SetConstraints(PASN_Object::FixedConstraint, 0, MaximumValue); } #ifndef PASN_NOPRINTON void MCS_PDin::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "heightLimit = " << setprecision(indent) << m_heightLimit << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_PDin::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_PDin), PInvalidCast); #endif const MCS_PDin & other = (const MCS_PDin &)obj; Comparison result; if ((result = m_heightLimit.Compare(other.m_heightLimit)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_PDin::GetDataLength() const { PINDEX length = 0; length += m_heightLimit.GetObjectLength(); return length; } PBoolean MCS_PDin::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_heightLimit.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_PDin::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_heightLimit.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_PDin::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_PDin::Class()), PInvalidCast); #endif return new MCS_PDin(*this); } // // EDrq // MCS_EDrq::MCS_EDrq(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { m_subHeight.SetConstraints(PASN_Object::FixedConstraint, 0, MaximumValue); m_subInterval.SetConstraints(PASN_Object::FixedConstraint, 0, MaximumValue); } #ifndef PASN_NOPRINTON void MCS_EDrq::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "subHeight = " << setprecision(indent) << m_subHeight << '\n'; strm << setw(indent+14) << "subInterval = " << setprecision(indent) << m_subInterval << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_EDrq::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_EDrq), PInvalidCast); #endif const MCS_EDrq & other = (const MCS_EDrq &)obj; Comparison result; if ((result = m_subHeight.Compare(other.m_subHeight)) != EqualTo) return result; if ((result = m_subInterval.Compare(other.m_subInterval)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_EDrq::GetDataLength() const { PINDEX length = 0; length += m_subHeight.GetObjectLength(); length += m_subInterval.GetObjectLength(); return length; } PBoolean MCS_EDrq::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_subHeight.Decode(strm)) return FALSE; if (!m_subInterval.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_EDrq::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_subHeight.Encode(strm); m_subInterval.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_EDrq::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_EDrq::Class()), PInvalidCast); #endif return new MCS_EDrq(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_MCS_ChannelAttributes[]={ {"static",0} ,{"userId",1} ,{"private",2} ,{"assigned",3} }; #endif // // ChannelAttributes // MCS_ChannelAttributes::MCS_ChannelAttributes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_MCS_ChannelAttributes,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_ChannelAttributes::operator MCS_ChannelAttributes_static &() const #else MCS_ChannelAttributes::operator MCS_ChannelAttributes_static &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_ChannelAttributes_static), PInvalidCast); #endif return *(MCS_ChannelAttributes_static *)choice; } MCS_ChannelAttributes::operator const MCS_ChannelAttributes_static &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_ChannelAttributes_static), PInvalidCast); #endif return *(MCS_ChannelAttributes_static *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_ChannelAttributes::operator MCS_ChannelAttributes_userId &() const #else MCS_ChannelAttributes::operator MCS_ChannelAttributes_userId &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_ChannelAttributes_userId), PInvalidCast); #endif return *(MCS_ChannelAttributes_userId *)choice; } MCS_ChannelAttributes::operator const MCS_ChannelAttributes_userId &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_ChannelAttributes_userId), PInvalidCast); #endif return *(MCS_ChannelAttributes_userId *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_ChannelAttributes::operator MCS_ChannelAttributes_private &() const #else MCS_ChannelAttributes::operator MCS_ChannelAttributes_private &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_ChannelAttributes_private), PInvalidCast); #endif return *(MCS_ChannelAttributes_private *)choice; } MCS_ChannelAttributes::operator const MCS_ChannelAttributes_private &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_ChannelAttributes_private), PInvalidCast); #endif return *(MCS_ChannelAttributes_private *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_ChannelAttributes::operator MCS_ChannelAttributes_assigned &() const #else MCS_ChannelAttributes::operator MCS_ChannelAttributes_assigned &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_ChannelAttributes_assigned), PInvalidCast); #endif return *(MCS_ChannelAttributes_assigned *)choice; } MCS_ChannelAttributes::operator const MCS_ChannelAttributes_assigned &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_ChannelAttributes_assigned), PInvalidCast); #endif return *(MCS_ChannelAttributes_assigned *)choice; } PBoolean MCS_ChannelAttributes::CreateObject() { switch (tag) { case e_static : choice = new MCS_ChannelAttributes_static(); return TRUE; case e_userId : choice = new MCS_ChannelAttributes_userId(); return TRUE; case e_private : choice = new MCS_ChannelAttributes_private(); return TRUE; case e_assigned : choice = new MCS_ChannelAttributes_assigned(); return TRUE; } choice = NULL; return FALSE; } PObject * MCS_ChannelAttributes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_ChannelAttributes::Class()), PInvalidCast); #endif return new MCS_ChannelAttributes(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_MCS_TokenAttributes[]={ {"grabbed",0} ,{"inhibited",1} ,{"giving",2} ,{"ungivable",3} ,{"given",4} }; #endif // // TokenAttributes // MCS_TokenAttributes::MCS_TokenAttributes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 5, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_MCS_TokenAttributes,5 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_TokenAttributes::operator MCS_TokenAttributes_grabbed &() const #else MCS_TokenAttributes::operator MCS_TokenAttributes_grabbed &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TokenAttributes_grabbed), PInvalidCast); #endif return *(MCS_TokenAttributes_grabbed *)choice; } MCS_TokenAttributes::operator const MCS_TokenAttributes_grabbed &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TokenAttributes_grabbed), PInvalidCast); #endif return *(MCS_TokenAttributes_grabbed *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_TokenAttributes::operator MCS_TokenAttributes_inhibited &() const #else MCS_TokenAttributes::operator MCS_TokenAttributes_inhibited &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TokenAttributes_inhibited), PInvalidCast); #endif return *(MCS_TokenAttributes_inhibited *)choice; } MCS_TokenAttributes::operator const MCS_TokenAttributes_inhibited &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TokenAttributes_inhibited), PInvalidCast); #endif return *(MCS_TokenAttributes_inhibited *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_TokenAttributes::operator MCS_TokenAttributes_giving &() const #else MCS_TokenAttributes::operator MCS_TokenAttributes_giving &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TokenAttributes_giving), PInvalidCast); #endif return *(MCS_TokenAttributes_giving *)choice; } MCS_TokenAttributes::operator const MCS_TokenAttributes_giving &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TokenAttributes_giving), PInvalidCast); #endif return *(MCS_TokenAttributes_giving *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_TokenAttributes::operator MCS_TokenAttributes_ungivable &() const #else MCS_TokenAttributes::operator MCS_TokenAttributes_ungivable &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TokenAttributes_ungivable), PInvalidCast); #endif return *(MCS_TokenAttributes_ungivable *)choice; } MCS_TokenAttributes::operator const MCS_TokenAttributes_ungivable &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TokenAttributes_ungivable), PInvalidCast); #endif return *(MCS_TokenAttributes_ungivable *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_TokenAttributes::operator MCS_TokenAttributes_given &() const #else MCS_TokenAttributes::operator MCS_TokenAttributes_given &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TokenAttributes_given), PInvalidCast); #endif return *(MCS_TokenAttributes_given *)choice; } MCS_TokenAttributes::operator const MCS_TokenAttributes_given &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TokenAttributes_given), PInvalidCast); #endif return *(MCS_TokenAttributes_given *)choice; } PBoolean MCS_TokenAttributes::CreateObject() { switch (tag) { case e_grabbed : choice = new MCS_TokenAttributes_grabbed(); return TRUE; case e_inhibited : choice = new MCS_TokenAttributes_inhibited(); return TRUE; case e_giving : choice = new MCS_TokenAttributes_giving(); return TRUE; case e_ungivable : choice = new MCS_TokenAttributes_ungivable(); return TRUE; case e_given : choice = new MCS_TokenAttributes_given(); return TRUE; } choice = NULL; return FALSE; } PObject * MCS_TokenAttributes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_TokenAttributes::Class()), PInvalidCast); #endif return new MCS_TokenAttributes(*this); } // // AUrq // MCS_AUrq::MCS_AUrq(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_AUrq::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX MCS_AUrq::GetDataLength() const { PINDEX length = 0; return length; } PBoolean MCS_AUrq::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_AUrq::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_AUrq::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_AUrq::Class()), PInvalidCast); #endif return new MCS_AUrq(*this); } // // CJrq // MCS_CJrq::MCS_CJrq(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_CJrq::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+12) << "channelId = " << setprecision(indent) << m_channelId << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_CJrq::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_CJrq), PInvalidCast); #endif const MCS_CJrq & other = (const MCS_CJrq &)obj; Comparison result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_channelId.Compare(other.m_channelId)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_CJrq::GetDataLength() const { PINDEX length = 0; length += m_initiator.GetObjectLength(); length += m_channelId.GetObjectLength(); return length; } PBoolean MCS_CJrq::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_channelId.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_CJrq::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_initiator.Encode(strm); m_channelId.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_CJrq::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_CJrq::Class()), PInvalidCast); #endif return new MCS_CJrq(*this); } // // CCrq // MCS_CCrq::MCS_CCrq(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_CCrq::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_CCrq::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_CCrq), PInvalidCast); #endif const MCS_CCrq & other = (const MCS_CCrq &)obj; Comparison result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_CCrq::GetDataLength() const { PINDEX length = 0; length += m_initiator.GetObjectLength(); return length; } PBoolean MCS_CCrq::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_CCrq::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_initiator.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_CCrq::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_CCrq::Class()), PInvalidCast); #endif return new MCS_CCrq(*this); } // // CDrq // MCS_CDrq::MCS_CDrq(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_CDrq::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+12) << "channelId = " << setprecision(indent) << m_channelId << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_CDrq::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_CDrq), PInvalidCast); #endif const MCS_CDrq & other = (const MCS_CDrq &)obj; Comparison result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_channelId.Compare(other.m_channelId)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_CDrq::GetDataLength() const { PINDEX length = 0; length += m_initiator.GetObjectLength(); length += m_channelId.GetObjectLength(); return length; } PBoolean MCS_CDrq::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_channelId.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_CDrq::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_initiator.Encode(strm); m_channelId.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_CDrq::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_CDrq::Class()), PInvalidCast); #endif return new MCS_CDrq(*this); } // // CDin // MCS_CDin::MCS_CDin(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_CDin::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "channelId = " << setprecision(indent) << m_channelId << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_CDin::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_CDin), PInvalidCast); #endif const MCS_CDin & other = (const MCS_CDin &)obj; Comparison result; if ((result = m_channelId.Compare(other.m_channelId)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_CDin::GetDataLength() const { PINDEX length = 0; length += m_channelId.GetObjectLength(); return length; } PBoolean MCS_CDin::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_channelId.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_CDin::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_channelId.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_CDin::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_CDin::Class()), PInvalidCast); #endif return new MCS_CDin(*this); } // // SDrq // MCS_SDrq::MCS_SDrq(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_SDrq::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+12) << "channelId = " << setprecision(indent) << m_channelId << '\n'; strm << setw(indent+15) << "dataPriority = " << setprecision(indent) << m_dataPriority << '\n'; strm << setw(indent+15) << "segmentation = " << setprecision(indent) << m_segmentation << '\n'; strm << setw(indent+11) << "userData = " << setprecision(indent) << m_userData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_SDrq::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_SDrq), PInvalidCast); #endif const MCS_SDrq & other = (const MCS_SDrq &)obj; Comparison result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_channelId.Compare(other.m_channelId)) != EqualTo) return result; if ((result = m_dataPriority.Compare(other.m_dataPriority)) != EqualTo) return result; if ((result = m_segmentation.Compare(other.m_segmentation)) != EqualTo) return result; if ((result = m_userData.Compare(other.m_userData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_SDrq::GetDataLength() const { PINDEX length = 0; length += m_initiator.GetObjectLength(); length += m_channelId.GetObjectLength(); length += m_dataPriority.GetObjectLength(); length += m_segmentation.GetObjectLength(); length += m_userData.GetObjectLength(); return length; } PBoolean MCS_SDrq::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_channelId.Decode(strm)) return FALSE; if (!m_dataPriority.Decode(strm)) return FALSE; if (!m_segmentation.Decode(strm)) return FALSE; if (!m_userData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_SDrq::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_initiator.Encode(strm); m_channelId.Encode(strm); m_dataPriority.Encode(strm); m_segmentation.Encode(strm); m_userData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_SDrq::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_SDrq::Class()), PInvalidCast); #endif return new MCS_SDrq(*this); } // // SDin // MCS_SDin::MCS_SDin(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_SDin::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+12) << "channelId = " << setprecision(indent) << m_channelId << '\n'; strm << setw(indent+15) << "dataPriority = " << setprecision(indent) << m_dataPriority << '\n'; strm << setw(indent+15) << "segmentation = " << setprecision(indent) << m_segmentation << '\n'; strm << setw(indent+11) << "userData = " << setprecision(indent) << m_userData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_SDin::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_SDin), PInvalidCast); #endif const MCS_SDin & other = (const MCS_SDin &)obj; Comparison result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_channelId.Compare(other.m_channelId)) != EqualTo) return result; if ((result = m_dataPriority.Compare(other.m_dataPriority)) != EqualTo) return result; if ((result = m_segmentation.Compare(other.m_segmentation)) != EqualTo) return result; if ((result = m_userData.Compare(other.m_userData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_SDin::GetDataLength() const { PINDEX length = 0; length += m_initiator.GetObjectLength(); length += m_channelId.GetObjectLength(); length += m_dataPriority.GetObjectLength(); length += m_segmentation.GetObjectLength(); length += m_userData.GetObjectLength(); return length; } PBoolean MCS_SDin::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_channelId.Decode(strm)) return FALSE; if (!m_dataPriority.Decode(strm)) return FALSE; if (!m_segmentation.Decode(strm)) return FALSE; if (!m_userData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_SDin::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_initiator.Encode(strm); m_channelId.Encode(strm); m_dataPriority.Encode(strm); m_segmentation.Encode(strm); m_userData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_SDin::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_SDin::Class()), PInvalidCast); #endif return new MCS_SDin(*this); } // // USrq // MCS_USrq::MCS_USrq(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_USrq::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+12) << "channelId = " << setprecision(indent) << m_channelId << '\n'; strm << setw(indent+15) << "dataPriority = " << setprecision(indent) << m_dataPriority << '\n'; strm << setw(indent+15) << "segmentation = " << setprecision(indent) << m_segmentation << '\n'; strm << setw(indent+11) << "userData = " << setprecision(indent) << m_userData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_USrq::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_USrq), PInvalidCast); #endif const MCS_USrq & other = (const MCS_USrq &)obj; Comparison result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_channelId.Compare(other.m_channelId)) != EqualTo) return result; if ((result = m_dataPriority.Compare(other.m_dataPriority)) != EqualTo) return result; if ((result = m_segmentation.Compare(other.m_segmentation)) != EqualTo) return result; if ((result = m_userData.Compare(other.m_userData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_USrq::GetDataLength() const { PINDEX length = 0; length += m_initiator.GetObjectLength(); length += m_channelId.GetObjectLength(); length += m_dataPriority.GetObjectLength(); length += m_segmentation.GetObjectLength(); length += m_userData.GetObjectLength(); return length; } PBoolean MCS_USrq::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_channelId.Decode(strm)) return FALSE; if (!m_dataPriority.Decode(strm)) return FALSE; if (!m_segmentation.Decode(strm)) return FALSE; if (!m_userData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_USrq::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_initiator.Encode(strm); m_channelId.Encode(strm); m_dataPriority.Encode(strm); m_segmentation.Encode(strm); m_userData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_USrq::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_USrq::Class()), PInvalidCast); #endif return new MCS_USrq(*this); } // // USin // MCS_USin::MCS_USin(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_USin::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+12) << "channelId = " << setprecision(indent) << m_channelId << '\n'; strm << setw(indent+15) << "dataPriority = " << setprecision(indent) << m_dataPriority << '\n'; strm << setw(indent+15) << "segmentation = " << setprecision(indent) << m_segmentation << '\n'; strm << setw(indent+11) << "userData = " << setprecision(indent) << m_userData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_USin::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_USin), PInvalidCast); #endif const MCS_USin & other = (const MCS_USin &)obj; Comparison result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_channelId.Compare(other.m_channelId)) != EqualTo) return result; if ((result = m_dataPriority.Compare(other.m_dataPriority)) != EqualTo) return result; if ((result = m_segmentation.Compare(other.m_segmentation)) != EqualTo) return result; if ((result = m_userData.Compare(other.m_userData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_USin::GetDataLength() const { PINDEX length = 0; length += m_initiator.GetObjectLength(); length += m_channelId.GetObjectLength(); length += m_dataPriority.GetObjectLength(); length += m_segmentation.GetObjectLength(); length += m_userData.GetObjectLength(); return length; } PBoolean MCS_USin::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_channelId.Decode(strm)) return FALSE; if (!m_dataPriority.Decode(strm)) return FALSE; if (!m_segmentation.Decode(strm)) return FALSE; if (!m_userData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_USin::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_initiator.Encode(strm); m_channelId.Encode(strm); m_dataPriority.Encode(strm); m_segmentation.Encode(strm); m_userData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_USin::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_USin::Class()), PInvalidCast); #endif return new MCS_USin(*this); } // // TGrq // MCS_TGrq::MCS_TGrq(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_TGrq::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+10) << "tokenId = " << setprecision(indent) << m_tokenId << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_TGrq::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_TGrq), PInvalidCast); #endif const MCS_TGrq & other = (const MCS_TGrq &)obj; Comparison result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_tokenId.Compare(other.m_tokenId)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_TGrq::GetDataLength() const { PINDEX length = 0; length += m_initiator.GetObjectLength(); length += m_tokenId.GetObjectLength(); return length; } PBoolean MCS_TGrq::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_tokenId.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_TGrq::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_initiator.Encode(strm); m_tokenId.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_TGrq::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_TGrq::Class()), PInvalidCast); #endif return new MCS_TGrq(*this); } // // TIrq // MCS_TIrq::MCS_TIrq(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_TIrq::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+10) << "tokenId = " << setprecision(indent) << m_tokenId << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_TIrq::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_TIrq), PInvalidCast); #endif const MCS_TIrq & other = (const MCS_TIrq &)obj; Comparison result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_tokenId.Compare(other.m_tokenId)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_TIrq::GetDataLength() const { PINDEX length = 0; length += m_initiator.GetObjectLength(); length += m_tokenId.GetObjectLength(); return length; } PBoolean MCS_TIrq::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_tokenId.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_TIrq::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_initiator.Encode(strm); m_tokenId.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_TIrq::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_TIrq::Class()), PInvalidCast); #endif return new MCS_TIrq(*this); } // // TVrq // MCS_TVrq::MCS_TVrq(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_TVrq::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+10) << "tokenId = " << setprecision(indent) << m_tokenId << '\n'; strm << setw(indent+12) << "recipient = " << setprecision(indent) << m_recipient << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_TVrq::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_TVrq), PInvalidCast); #endif const MCS_TVrq & other = (const MCS_TVrq &)obj; Comparison result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_tokenId.Compare(other.m_tokenId)) != EqualTo) return result; if ((result = m_recipient.Compare(other.m_recipient)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_TVrq::GetDataLength() const { PINDEX length = 0; length += m_initiator.GetObjectLength(); length += m_tokenId.GetObjectLength(); length += m_recipient.GetObjectLength(); return length; } PBoolean MCS_TVrq::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_tokenId.Decode(strm)) return FALSE; if (!m_recipient.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_TVrq::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_initiator.Encode(strm); m_tokenId.Encode(strm); m_recipient.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_TVrq::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_TVrq::Class()), PInvalidCast); #endif return new MCS_TVrq(*this); } // // TVin // MCS_TVin::MCS_TVin(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_TVin::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+10) << "tokenId = " << setprecision(indent) << m_tokenId << '\n'; strm << setw(indent+12) << "recipient = " << setprecision(indent) << m_recipient << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_TVin::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_TVin), PInvalidCast); #endif const MCS_TVin & other = (const MCS_TVin &)obj; Comparison result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_tokenId.Compare(other.m_tokenId)) != EqualTo) return result; if ((result = m_recipient.Compare(other.m_recipient)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_TVin::GetDataLength() const { PINDEX length = 0; length += m_initiator.GetObjectLength(); length += m_tokenId.GetObjectLength(); length += m_recipient.GetObjectLength(); return length; } PBoolean MCS_TVin::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_tokenId.Decode(strm)) return FALSE; if (!m_recipient.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_TVin::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_initiator.Encode(strm); m_tokenId.Encode(strm); m_recipient.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_TVin::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_TVin::Class()), PInvalidCast); #endif return new MCS_TVin(*this); } // // TPrq // MCS_TPrq::MCS_TPrq(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_TPrq::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+10) << "tokenId = " << setprecision(indent) << m_tokenId << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_TPrq::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_TPrq), PInvalidCast); #endif const MCS_TPrq & other = (const MCS_TPrq &)obj; Comparison result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_tokenId.Compare(other.m_tokenId)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_TPrq::GetDataLength() const { PINDEX length = 0; length += m_initiator.GetObjectLength(); length += m_tokenId.GetObjectLength(); return length; } PBoolean MCS_TPrq::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_tokenId.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_TPrq::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_initiator.Encode(strm); m_tokenId.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_TPrq::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_TPrq::Class()), PInvalidCast); #endif return new MCS_TPrq(*this); } // // TPin // MCS_TPin::MCS_TPin(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_TPin::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+10) << "tokenId = " << setprecision(indent) << m_tokenId << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_TPin::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_TPin), PInvalidCast); #endif const MCS_TPin & other = (const MCS_TPin &)obj; Comparison result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_tokenId.Compare(other.m_tokenId)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_TPin::GetDataLength() const { PINDEX length = 0; length += m_initiator.GetObjectLength(); length += m_tokenId.GetObjectLength(); return length; } PBoolean MCS_TPin::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_tokenId.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_TPin::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_initiator.Encode(strm); m_tokenId.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_TPin::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_TPin::Class()), PInvalidCast); #endif return new MCS_TPin(*this); } // // TRrq // MCS_TRrq::MCS_TRrq(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_TRrq::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+10) << "tokenId = " << setprecision(indent) << m_tokenId << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_TRrq::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_TRrq), PInvalidCast); #endif const MCS_TRrq & other = (const MCS_TRrq &)obj; Comparison result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_tokenId.Compare(other.m_tokenId)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_TRrq::GetDataLength() const { PINDEX length = 0; length += m_initiator.GetObjectLength(); length += m_tokenId.GetObjectLength(); return length; } PBoolean MCS_TRrq::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_tokenId.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_TRrq::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_initiator.Encode(strm); m_tokenId.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_TRrq::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_TRrq::Class()), PInvalidCast); #endif return new MCS_TRrq(*this); } // // TTrq // MCS_TTrq::MCS_TTrq(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_TTrq::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+10) << "tokenId = " << setprecision(indent) << m_tokenId << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_TTrq::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_TTrq), PInvalidCast); #endif const MCS_TTrq & other = (const MCS_TTrq &)obj; Comparison result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_tokenId.Compare(other.m_tokenId)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_TTrq::GetDataLength() const { PINDEX length = 0; length += m_initiator.GetObjectLength(); length += m_tokenId.GetObjectLength(); return length; } PBoolean MCS_TTrq::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_tokenId.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_TTrq::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_initiator.Encode(strm); m_tokenId.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_TTrq::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_TTrq::Class()), PInvalidCast); #endif return new MCS_TTrq(*this); } // // TTcf // MCS_TTcf::MCS_TTcf(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_TTcf::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+10) << "tokenId = " << setprecision(indent) << m_tokenId << '\n'; strm << setw(indent+14) << "tokenStatus = " << setprecision(indent) << m_tokenStatus << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_TTcf::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_TTcf), PInvalidCast); #endif const MCS_TTcf & other = (const MCS_TTcf &)obj; Comparison result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_tokenId.Compare(other.m_tokenId)) != EqualTo) return result; if ((result = m_tokenStatus.Compare(other.m_tokenStatus)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_TTcf::GetDataLength() const { PINDEX length = 0; length += m_initiator.GetObjectLength(); length += m_tokenId.GetObjectLength(); length += m_tokenStatus.GetObjectLength(); return length; } PBoolean MCS_TTcf::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_tokenId.Decode(strm)) return FALSE; if (!m_tokenStatus.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_TTcf::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_initiator.Encode(strm); m_tokenId.Encode(strm); m_tokenStatus.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_TTcf::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_TTcf::Class()), PInvalidCast); #endif return new MCS_TTcf(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_MCS_Reason[]={ {"rn-domain-disconnected",0} ,{"rn-provider-initiated",1} ,{"rn-token-purged",2} ,{"rn-user-requested",3} ,{"rn-channel-purged",4} }; #endif // // Reason // MCS_Reason::MCS_Reason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 4, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_MCS_Reason,5 #endif ) { } MCS_Reason & MCS_Reason::operator=(unsigned v) { SetValue(v); return *this; } PObject * MCS_Reason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_Reason::Class()), PInvalidCast); #endif return new MCS_Reason(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_MCS_Result[]={ {"rt-successful",0} ,{"rt-domain-merging",1} ,{"rt-domain-not-hierarchical",2} ,{"rt-no-such-channel",3} ,{"rt-no-such-domain",4} ,{"rt-no-such-user",5} ,{"rt-not-admitted",6} ,{"rt-other-user-id",7} ,{"rt-parameters-unacceptable",8} ,{"rt-token-not-available",9} ,{"rt-token-not-possessed",10} ,{"rt-too-many-channels",11} ,{"rt-too-many-tokens",12} ,{"rt-too-many-users",13} ,{"rt-unspecified-failure",14} ,{"rt-user-rejected",15} }; #endif // // Result // MCS_Result::MCS_Result(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 15, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_MCS_Result,16 #endif ) { } MCS_Result & MCS_Result::operator=(unsigned v) { SetValue(v); return *this; } PObject * MCS_Result::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_Result::Class()), PInvalidCast); #endif return new MCS_Result(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_MCS_Diagnostic[]={ {"dc-inconsistent-merge",0} ,{"dc-forbidden-PDU-downward",1} ,{"dc-forbidden-PDU-upward",2} ,{"dc-invalid-BER-encoding",3} ,{"dc-invalid-PER-encoding",4} ,{"dc-misrouted-user",5} ,{"dc-unrequested-confirm",6} ,{"dc-wrong-transport-priority",7} ,{"dc-channel-id-conflict",8} ,{"dc-token-id-conflict",9} ,{"dc-not-user-id-channel",10} ,{"dc-too-many-channels",11} ,{"dc-too-many-tokens",12} ,{"dc-too-many-users",13} }; #endif // // Diagnostic // MCS_Diagnostic::MCS_Diagnostic(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 13, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_MCS_Diagnostic,14 #endif ) { } MCS_Diagnostic & MCS_Diagnostic::operator=(unsigned v) { SetValue(v); return *this; } PObject * MCS_Diagnostic::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_Diagnostic::Class()), PInvalidCast); #endif return new MCS_Diagnostic(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_MCS_ConnectMCSPDU[]={ {"connect_initial",101} ,{"connect_response",102} ,{"connect_additional",103} ,{"connect_result",104} }; #endif // // ConnectMCSPDU // MCS_ConnectMCSPDU::MCS_ConnectMCSPDU(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_MCS_ConnectMCSPDU,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_ConnectMCSPDU::operator MCS_Connect_Initial &() const #else MCS_ConnectMCSPDU::operator MCS_Connect_Initial &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_Connect_Initial), PInvalidCast); #endif return *(MCS_Connect_Initial *)choice; } MCS_ConnectMCSPDU::operator const MCS_Connect_Initial &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_Connect_Initial), PInvalidCast); #endif return *(MCS_Connect_Initial *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_ConnectMCSPDU::operator MCS_Connect_Response &() const #else MCS_ConnectMCSPDU::operator MCS_Connect_Response &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_Connect_Response), PInvalidCast); #endif return *(MCS_Connect_Response *)choice; } MCS_ConnectMCSPDU::operator const MCS_Connect_Response &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_Connect_Response), PInvalidCast); #endif return *(MCS_Connect_Response *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_ConnectMCSPDU::operator MCS_Connect_Additional &() const #else MCS_ConnectMCSPDU::operator MCS_Connect_Additional &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_Connect_Additional), PInvalidCast); #endif return *(MCS_Connect_Additional *)choice; } MCS_ConnectMCSPDU::operator const MCS_Connect_Additional &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_Connect_Additional), PInvalidCast); #endif return *(MCS_Connect_Additional *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_ConnectMCSPDU::operator MCS_Connect_Result &() const #else MCS_ConnectMCSPDU::operator MCS_Connect_Result &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_Connect_Result), PInvalidCast); #endif return *(MCS_Connect_Result *)choice; } MCS_ConnectMCSPDU::operator const MCS_Connect_Result &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_Connect_Result), PInvalidCast); #endif return *(MCS_Connect_Result *)choice; } PBoolean MCS_ConnectMCSPDU::CreateObject() { switch (tag) { case e_connect_initial : choice = new MCS_Connect_Initial(); return TRUE; case e_connect_response : choice = new MCS_Connect_Response(); return TRUE; case e_connect_additional : choice = new MCS_Connect_Additional(); return TRUE; case e_connect_result : choice = new MCS_Connect_Result(); return TRUE; } choice = NULL; return FALSE; } PObject * MCS_ConnectMCSPDU::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_ConnectMCSPDU::Class()), PInvalidCast); #endif return new MCS_ConnectMCSPDU(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_MCS_DomainMCSPDU[]={ {"pdin",0} ,{"edrq",1} ,{"mcrq",2} ,{"mccf",3} ,{"pcin",4} ,{"mtrq",5} ,{"mtcf",6} ,{"ptin",7} ,{"dpum",8} ,{"rjum",9} ,{"aurq",10} ,{"aucf",11} ,{"durq",12} ,{"duin",13} ,{"cjrq",14} ,{"cjcf",15} ,{"clrq",16} ,{"ccrq",17} ,{"cccf",18} ,{"cdrq",19} ,{"cdin",20} ,{"carq",21} ,{"cain",22} ,{"cerq",23} ,{"cein",24} ,{"sdrq",25} ,{"sdin",26} ,{"usrq",27} ,{"usin",28} ,{"tgrq",29} ,{"tgcf",30} ,{"tirq",31} ,{"ticf",32} ,{"tvrq",33} ,{"tvin",34} ,{"tvrs",35} ,{"tvcf",36} ,{"tprq",37} ,{"tpin",38} ,{"trrq",39} ,{"trcf",40} ,{"ttrq",41} ,{"ttcf",42} }; #endif // // DomainMCSPDU // MCS_DomainMCSPDU::MCS_DomainMCSPDU(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 43, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_MCS_DomainMCSPDU,43 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_PDin &() const #else MCS_DomainMCSPDU::operator MCS_PDin &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_PDin), PInvalidCast); #endif return *(MCS_PDin *)choice; } MCS_DomainMCSPDU::operator const MCS_PDin &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_PDin), PInvalidCast); #endif return *(MCS_PDin *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_EDrq &() const #else MCS_DomainMCSPDU::operator MCS_EDrq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_EDrq), PInvalidCast); #endif return *(MCS_EDrq *)choice; } MCS_DomainMCSPDU::operator const MCS_EDrq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_EDrq), PInvalidCast); #endif return *(MCS_EDrq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_MCrq &() const #else MCS_DomainMCSPDU::operator MCS_MCrq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_MCrq), PInvalidCast); #endif return *(MCS_MCrq *)choice; } MCS_DomainMCSPDU::operator const MCS_MCrq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_MCrq), PInvalidCast); #endif return *(MCS_MCrq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_MCcf &() const #else MCS_DomainMCSPDU::operator MCS_MCcf &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_MCcf), PInvalidCast); #endif return *(MCS_MCcf *)choice; } MCS_DomainMCSPDU::operator const MCS_MCcf &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_MCcf), PInvalidCast); #endif return *(MCS_MCcf *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_PCin &() const #else MCS_DomainMCSPDU::operator MCS_PCin &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_PCin), PInvalidCast); #endif return *(MCS_PCin *)choice; } MCS_DomainMCSPDU::operator const MCS_PCin &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_PCin), PInvalidCast); #endif return *(MCS_PCin *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_MTrq &() const #else MCS_DomainMCSPDU::operator MCS_MTrq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_MTrq), PInvalidCast); #endif return *(MCS_MTrq *)choice; } MCS_DomainMCSPDU::operator const MCS_MTrq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_MTrq), PInvalidCast); #endif return *(MCS_MTrq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_MTcf &() const #else MCS_DomainMCSPDU::operator MCS_MTcf &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_MTcf), PInvalidCast); #endif return *(MCS_MTcf *)choice; } MCS_DomainMCSPDU::operator const MCS_MTcf &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_MTcf), PInvalidCast); #endif return *(MCS_MTcf *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_PTin &() const #else MCS_DomainMCSPDU::operator MCS_PTin &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_PTin), PInvalidCast); #endif return *(MCS_PTin *)choice; } MCS_DomainMCSPDU::operator const MCS_PTin &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_PTin), PInvalidCast); #endif return *(MCS_PTin *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_DPum &() const #else MCS_DomainMCSPDU::operator MCS_DPum &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_DPum), PInvalidCast); #endif return *(MCS_DPum *)choice; } MCS_DomainMCSPDU::operator const MCS_DPum &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_DPum), PInvalidCast); #endif return *(MCS_DPum *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_RJum &() const #else MCS_DomainMCSPDU::operator MCS_RJum &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_RJum), PInvalidCast); #endif return *(MCS_RJum *)choice; } MCS_DomainMCSPDU::operator const MCS_RJum &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_RJum), PInvalidCast); #endif return *(MCS_RJum *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_AUrq &() const #else MCS_DomainMCSPDU::operator MCS_AUrq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_AUrq), PInvalidCast); #endif return *(MCS_AUrq *)choice; } MCS_DomainMCSPDU::operator const MCS_AUrq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_AUrq), PInvalidCast); #endif return *(MCS_AUrq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_AUcf &() const #else MCS_DomainMCSPDU::operator MCS_AUcf &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_AUcf), PInvalidCast); #endif return *(MCS_AUcf *)choice; } MCS_DomainMCSPDU::operator const MCS_AUcf &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_AUcf), PInvalidCast); #endif return *(MCS_AUcf *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_DUrq &() const #else MCS_DomainMCSPDU::operator MCS_DUrq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_DUrq), PInvalidCast); #endif return *(MCS_DUrq *)choice; } MCS_DomainMCSPDU::operator const MCS_DUrq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_DUrq), PInvalidCast); #endif return *(MCS_DUrq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_DUin &() const #else MCS_DomainMCSPDU::operator MCS_DUin &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_DUin), PInvalidCast); #endif return *(MCS_DUin *)choice; } MCS_DomainMCSPDU::operator const MCS_DUin &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_DUin), PInvalidCast); #endif return *(MCS_DUin *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_CJrq &() const #else MCS_DomainMCSPDU::operator MCS_CJrq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_CJrq), PInvalidCast); #endif return *(MCS_CJrq *)choice; } MCS_DomainMCSPDU::operator const MCS_CJrq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_CJrq), PInvalidCast); #endif return *(MCS_CJrq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_CJcf &() const #else MCS_DomainMCSPDU::operator MCS_CJcf &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_CJcf), PInvalidCast); #endif return *(MCS_CJcf *)choice; } MCS_DomainMCSPDU::operator const MCS_CJcf &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_CJcf), PInvalidCast); #endif return *(MCS_CJcf *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_CLrq &() const #else MCS_DomainMCSPDU::operator MCS_CLrq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_CLrq), PInvalidCast); #endif return *(MCS_CLrq *)choice; } MCS_DomainMCSPDU::operator const MCS_CLrq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_CLrq), PInvalidCast); #endif return *(MCS_CLrq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_CCrq &() const #else MCS_DomainMCSPDU::operator MCS_CCrq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_CCrq), PInvalidCast); #endif return *(MCS_CCrq *)choice; } MCS_DomainMCSPDU::operator const MCS_CCrq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_CCrq), PInvalidCast); #endif return *(MCS_CCrq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_CCcf &() const #else MCS_DomainMCSPDU::operator MCS_CCcf &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_CCcf), PInvalidCast); #endif return *(MCS_CCcf *)choice; } MCS_DomainMCSPDU::operator const MCS_CCcf &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_CCcf), PInvalidCast); #endif return *(MCS_CCcf *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_CDrq &() const #else MCS_DomainMCSPDU::operator MCS_CDrq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_CDrq), PInvalidCast); #endif return *(MCS_CDrq *)choice; } MCS_DomainMCSPDU::operator const MCS_CDrq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_CDrq), PInvalidCast); #endif return *(MCS_CDrq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_CDin &() const #else MCS_DomainMCSPDU::operator MCS_CDin &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_CDin), PInvalidCast); #endif return *(MCS_CDin *)choice; } MCS_DomainMCSPDU::operator const MCS_CDin &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_CDin), PInvalidCast); #endif return *(MCS_CDin *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_CArq &() const #else MCS_DomainMCSPDU::operator MCS_CArq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_CArq), PInvalidCast); #endif return *(MCS_CArq *)choice; } MCS_DomainMCSPDU::operator const MCS_CArq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_CArq), PInvalidCast); #endif return *(MCS_CArq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_CAin &() const #else MCS_DomainMCSPDU::operator MCS_CAin &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_CAin), PInvalidCast); #endif return *(MCS_CAin *)choice; } MCS_DomainMCSPDU::operator const MCS_CAin &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_CAin), PInvalidCast); #endif return *(MCS_CAin *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_CErq &() const #else MCS_DomainMCSPDU::operator MCS_CErq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_CErq), PInvalidCast); #endif return *(MCS_CErq *)choice; } MCS_DomainMCSPDU::operator const MCS_CErq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_CErq), PInvalidCast); #endif return *(MCS_CErq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_CEin &() const #else MCS_DomainMCSPDU::operator MCS_CEin &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_CEin), PInvalidCast); #endif return *(MCS_CEin *)choice; } MCS_DomainMCSPDU::operator const MCS_CEin &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_CEin), PInvalidCast); #endif return *(MCS_CEin *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_SDrq &() const #else MCS_DomainMCSPDU::operator MCS_SDrq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_SDrq), PInvalidCast); #endif return *(MCS_SDrq *)choice; } MCS_DomainMCSPDU::operator const MCS_SDrq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_SDrq), PInvalidCast); #endif return *(MCS_SDrq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_SDin &() const #else MCS_DomainMCSPDU::operator MCS_SDin &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_SDin), PInvalidCast); #endif return *(MCS_SDin *)choice; } MCS_DomainMCSPDU::operator const MCS_SDin &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_SDin), PInvalidCast); #endif return *(MCS_SDin *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_USrq &() const #else MCS_DomainMCSPDU::operator MCS_USrq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_USrq), PInvalidCast); #endif return *(MCS_USrq *)choice; } MCS_DomainMCSPDU::operator const MCS_USrq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_USrq), PInvalidCast); #endif return *(MCS_USrq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_USin &() const #else MCS_DomainMCSPDU::operator MCS_USin &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_USin), PInvalidCast); #endif return *(MCS_USin *)choice; } MCS_DomainMCSPDU::operator const MCS_USin &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_USin), PInvalidCast); #endif return *(MCS_USin *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_TGrq &() const #else MCS_DomainMCSPDU::operator MCS_TGrq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TGrq), PInvalidCast); #endif return *(MCS_TGrq *)choice; } MCS_DomainMCSPDU::operator const MCS_TGrq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TGrq), PInvalidCast); #endif return *(MCS_TGrq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_TGcf &() const #else MCS_DomainMCSPDU::operator MCS_TGcf &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TGcf), PInvalidCast); #endif return *(MCS_TGcf *)choice; } MCS_DomainMCSPDU::operator const MCS_TGcf &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TGcf), PInvalidCast); #endif return *(MCS_TGcf *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_TIrq &() const #else MCS_DomainMCSPDU::operator MCS_TIrq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TIrq), PInvalidCast); #endif return *(MCS_TIrq *)choice; } MCS_DomainMCSPDU::operator const MCS_TIrq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TIrq), PInvalidCast); #endif return *(MCS_TIrq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_TIcf &() const #else MCS_DomainMCSPDU::operator MCS_TIcf &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TIcf), PInvalidCast); #endif return *(MCS_TIcf *)choice; } MCS_DomainMCSPDU::operator const MCS_TIcf &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TIcf), PInvalidCast); #endif return *(MCS_TIcf *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_TVrq &() const #else MCS_DomainMCSPDU::operator MCS_TVrq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TVrq), PInvalidCast); #endif return *(MCS_TVrq *)choice; } MCS_DomainMCSPDU::operator const MCS_TVrq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TVrq), PInvalidCast); #endif return *(MCS_TVrq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_TVin &() const #else MCS_DomainMCSPDU::operator MCS_TVin &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TVin), PInvalidCast); #endif return *(MCS_TVin *)choice; } MCS_DomainMCSPDU::operator const MCS_TVin &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TVin), PInvalidCast); #endif return *(MCS_TVin *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_TVrs &() const #else MCS_DomainMCSPDU::operator MCS_TVrs &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TVrs), PInvalidCast); #endif return *(MCS_TVrs *)choice; } MCS_DomainMCSPDU::operator const MCS_TVrs &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TVrs), PInvalidCast); #endif return *(MCS_TVrs *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_TVcf &() const #else MCS_DomainMCSPDU::operator MCS_TVcf &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TVcf), PInvalidCast); #endif return *(MCS_TVcf *)choice; } MCS_DomainMCSPDU::operator const MCS_TVcf &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TVcf), PInvalidCast); #endif return *(MCS_TVcf *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_TPrq &() const #else MCS_DomainMCSPDU::operator MCS_TPrq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TPrq), PInvalidCast); #endif return *(MCS_TPrq *)choice; } MCS_DomainMCSPDU::operator const MCS_TPrq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TPrq), PInvalidCast); #endif return *(MCS_TPrq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_TPin &() const #else MCS_DomainMCSPDU::operator MCS_TPin &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TPin), PInvalidCast); #endif return *(MCS_TPin *)choice; } MCS_DomainMCSPDU::operator const MCS_TPin &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TPin), PInvalidCast); #endif return *(MCS_TPin *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_TRrq &() const #else MCS_DomainMCSPDU::operator MCS_TRrq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TRrq), PInvalidCast); #endif return *(MCS_TRrq *)choice; } MCS_DomainMCSPDU::operator const MCS_TRrq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TRrq), PInvalidCast); #endif return *(MCS_TRrq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_TRcf &() const #else MCS_DomainMCSPDU::operator MCS_TRcf &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TRcf), PInvalidCast); #endif return *(MCS_TRcf *)choice; } MCS_DomainMCSPDU::operator const MCS_TRcf &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TRcf), PInvalidCast); #endif return *(MCS_TRcf *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_TTrq &() const #else MCS_DomainMCSPDU::operator MCS_TTrq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TTrq), PInvalidCast); #endif return *(MCS_TTrq *)choice; } MCS_DomainMCSPDU::operator const MCS_TTrq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TTrq), PInvalidCast); #endif return *(MCS_TTrq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 MCS_DomainMCSPDU::operator MCS_TTcf &() const #else MCS_DomainMCSPDU::operator MCS_TTcf &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TTcf), PInvalidCast); #endif return *(MCS_TTcf *)choice; } MCS_DomainMCSPDU::operator const MCS_TTcf &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), MCS_TTcf), PInvalidCast); #endif return *(MCS_TTcf *)choice; } PBoolean MCS_DomainMCSPDU::CreateObject() { switch (tag) { case e_pdin : choice = new MCS_PDin(); return TRUE; case e_edrq : choice = new MCS_EDrq(); return TRUE; case e_mcrq : choice = new MCS_MCrq(); return TRUE; case e_mccf : choice = new MCS_MCcf(); return TRUE; case e_pcin : choice = new MCS_PCin(); return TRUE; case e_mtrq : choice = new MCS_MTrq(); return TRUE; case e_mtcf : choice = new MCS_MTcf(); return TRUE; case e_ptin : choice = new MCS_PTin(); return TRUE; case e_dpum : choice = new MCS_DPum(); return TRUE; case e_rjum : choice = new MCS_RJum(); return TRUE; case e_aurq : choice = new MCS_AUrq(); return TRUE; case e_aucf : choice = new MCS_AUcf(); return TRUE; case e_durq : choice = new MCS_DUrq(); return TRUE; case e_duin : choice = new MCS_DUin(); return TRUE; case e_cjrq : choice = new MCS_CJrq(); return TRUE; case e_cjcf : choice = new MCS_CJcf(); return TRUE; case e_clrq : choice = new MCS_CLrq(); return TRUE; case e_ccrq : choice = new MCS_CCrq(); return TRUE; case e_cccf : choice = new MCS_CCcf(); return TRUE; case e_cdrq : choice = new MCS_CDrq(); return TRUE; case e_cdin : choice = new MCS_CDin(); return TRUE; case e_carq : choice = new MCS_CArq(); return TRUE; case e_cain : choice = new MCS_CAin(); return TRUE; case e_cerq : choice = new MCS_CErq(); return TRUE; case e_cein : choice = new MCS_CEin(); return TRUE; case e_sdrq : choice = new MCS_SDrq(); return TRUE; case e_sdin : choice = new MCS_SDin(); return TRUE; case e_usrq : choice = new MCS_USrq(); return TRUE; case e_usin : choice = new MCS_USin(); return TRUE; case e_tgrq : choice = new MCS_TGrq(); return TRUE; case e_tgcf : choice = new MCS_TGcf(); return TRUE; case e_tirq : choice = new MCS_TIrq(); return TRUE; case e_ticf : choice = new MCS_TIcf(); return TRUE; case e_tvrq : choice = new MCS_TVrq(); return TRUE; case e_tvin : choice = new MCS_TVin(); return TRUE; case e_tvrs : choice = new MCS_TVrs(); return TRUE; case e_tvcf : choice = new MCS_TVcf(); return TRUE; case e_tprq : choice = new MCS_TPrq(); return TRUE; case e_tpin : choice = new MCS_TPin(); return TRUE; case e_trrq : choice = new MCS_TRrq(); return TRUE; case e_trcf : choice = new MCS_TRcf(); return TRUE; case e_ttrq : choice = new MCS_TTrq(); return TRUE; case e_ttcf : choice = new MCS_TTcf(); return TRUE; } choice = NULL; return FALSE; } PObject * MCS_DomainMCSPDU::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_DomainMCSPDU::Class()), PInvalidCast); #endif return new MCS_DomainMCSPDU(*this); } // // ChannelAttributes_static // MCS_ChannelAttributes_static::MCS_ChannelAttributes_static(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_ChannelAttributes_static::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "channelId = " << setprecision(indent) << m_channelId << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_ChannelAttributes_static::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_ChannelAttributes_static), PInvalidCast); #endif const MCS_ChannelAttributes_static & other = (const MCS_ChannelAttributes_static &)obj; Comparison result; if ((result = m_channelId.Compare(other.m_channelId)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_ChannelAttributes_static::GetDataLength() const { PINDEX length = 0; length += m_channelId.GetObjectLength(); return length; } PBoolean MCS_ChannelAttributes_static::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_channelId.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_ChannelAttributes_static::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_channelId.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_ChannelAttributes_static::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_ChannelAttributes_static::Class()), PInvalidCast); #endif return new MCS_ChannelAttributes_static(*this); } // // ChannelAttributes_userId // MCS_ChannelAttributes_userId::MCS_ChannelAttributes_userId(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_ChannelAttributes_userId::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "joined = " << setprecision(indent) << m_joined << '\n'; strm << setw(indent+9) << "userId = " << setprecision(indent) << m_userId << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_ChannelAttributes_userId::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_ChannelAttributes_userId), PInvalidCast); #endif const MCS_ChannelAttributes_userId & other = (const MCS_ChannelAttributes_userId &)obj; Comparison result; if ((result = m_joined.Compare(other.m_joined)) != EqualTo) return result; if ((result = m_userId.Compare(other.m_userId)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_ChannelAttributes_userId::GetDataLength() const { PINDEX length = 0; length += m_joined.GetObjectLength(); length += m_userId.GetObjectLength(); return length; } PBoolean MCS_ChannelAttributes_userId::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_joined.Decode(strm)) return FALSE; if (!m_userId.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_ChannelAttributes_userId::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_joined.Encode(strm); m_userId.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_ChannelAttributes_userId::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_ChannelAttributes_userId::Class()), PInvalidCast); #endif return new MCS_ChannelAttributes_userId(*this); } // // ChannelAttributes_assigned // MCS_ChannelAttributes_assigned::MCS_ChannelAttributes_assigned(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_ChannelAttributes_assigned::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "channelId = " << setprecision(indent) << m_channelId << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_ChannelAttributes_assigned::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_ChannelAttributes_assigned), PInvalidCast); #endif const MCS_ChannelAttributes_assigned & other = (const MCS_ChannelAttributes_assigned &)obj; Comparison result; if ((result = m_channelId.Compare(other.m_channelId)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_ChannelAttributes_assigned::GetDataLength() const { PINDEX length = 0; length += m_channelId.GetObjectLength(); return length; } PBoolean MCS_ChannelAttributes_assigned::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_channelId.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_ChannelAttributes_assigned::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_channelId.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_ChannelAttributes_assigned::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_ChannelAttributes_assigned::Class()), PInvalidCast); #endif return new MCS_ChannelAttributes_assigned(*this); } // // ArrayOf_ChannelAttributes // MCS_ArrayOf_ChannelAttributes::MCS_ArrayOf_ChannelAttributes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * MCS_ArrayOf_ChannelAttributes::CreateObject() const { return new MCS_ChannelAttributes; } MCS_ChannelAttributes & MCS_ArrayOf_ChannelAttributes::operator[](PINDEX i) const { return (MCS_ChannelAttributes &)array[i]; } PObject * MCS_ArrayOf_ChannelAttributes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_ArrayOf_ChannelAttributes::Class()), PInvalidCast); #endif return new MCS_ArrayOf_ChannelAttributes(*this); } // // ArrayOf_ChannelId // MCS_ArrayOf_ChannelId::MCS_ArrayOf_ChannelId(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * MCS_ArrayOf_ChannelId::CreateObject() const { return new MCS_ChannelId; } MCS_ChannelId & MCS_ArrayOf_ChannelId::operator[](PINDEX i) const { return (MCS_ChannelId &)array[i]; } PObject * MCS_ArrayOf_ChannelId::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_ArrayOf_ChannelId::Class()), PInvalidCast); #endif return new MCS_ArrayOf_ChannelId(*this); } // // ArrayOf_UserId // MCS_ArrayOf_UserId::MCS_ArrayOf_UserId(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * MCS_ArrayOf_UserId::CreateObject() const { return new MCS_UserId; } MCS_UserId & MCS_ArrayOf_UserId::operator[](PINDEX i) const { return (MCS_UserId &)array[i]; } PObject * MCS_ArrayOf_UserId::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_ArrayOf_UserId::Class()), PInvalidCast); #endif return new MCS_ArrayOf_UserId(*this); } // // TokenAttributes_grabbed // MCS_TokenAttributes_grabbed::MCS_TokenAttributes_grabbed(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_TokenAttributes_grabbed::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "tokenId = " << setprecision(indent) << m_tokenId << '\n'; strm << setw(indent+10) << "grabber = " << setprecision(indent) << m_grabber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_TokenAttributes_grabbed::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_TokenAttributes_grabbed), PInvalidCast); #endif const MCS_TokenAttributes_grabbed & other = (const MCS_TokenAttributes_grabbed &)obj; Comparison result; if ((result = m_tokenId.Compare(other.m_tokenId)) != EqualTo) return result; if ((result = m_grabber.Compare(other.m_grabber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_TokenAttributes_grabbed::GetDataLength() const { PINDEX length = 0; length += m_tokenId.GetObjectLength(); length += m_grabber.GetObjectLength(); return length; } PBoolean MCS_TokenAttributes_grabbed::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_tokenId.Decode(strm)) return FALSE; if (!m_grabber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_TokenAttributes_grabbed::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_tokenId.Encode(strm); m_grabber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_TokenAttributes_grabbed::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_TokenAttributes_grabbed::Class()), PInvalidCast); #endif return new MCS_TokenAttributes_grabbed(*this); } // // TokenAttributes_inhibited // MCS_TokenAttributes_inhibited::MCS_TokenAttributes_inhibited(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_TokenAttributes_inhibited::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "tokenId = " << setprecision(indent) << m_tokenId << '\n'; strm << setw(indent+13) << "inhibitors = " << setprecision(indent) << m_inhibitors << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_TokenAttributes_inhibited::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_TokenAttributes_inhibited), PInvalidCast); #endif const MCS_TokenAttributes_inhibited & other = (const MCS_TokenAttributes_inhibited &)obj; Comparison result; if ((result = m_tokenId.Compare(other.m_tokenId)) != EqualTo) return result; if ((result = m_inhibitors.Compare(other.m_inhibitors)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_TokenAttributes_inhibited::GetDataLength() const { PINDEX length = 0; length += m_tokenId.GetObjectLength(); length += m_inhibitors.GetObjectLength(); return length; } PBoolean MCS_TokenAttributes_inhibited::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_tokenId.Decode(strm)) return FALSE; if (!m_inhibitors.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_TokenAttributes_inhibited::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_tokenId.Encode(strm); m_inhibitors.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_TokenAttributes_inhibited::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_TokenAttributes_inhibited::Class()), PInvalidCast); #endif return new MCS_TokenAttributes_inhibited(*this); } // // TokenAttributes_giving // MCS_TokenAttributes_giving::MCS_TokenAttributes_giving(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_TokenAttributes_giving::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "tokenId = " << setprecision(indent) << m_tokenId << '\n'; strm << setw(indent+10) << "grabber = " << setprecision(indent) << m_grabber << '\n'; strm << setw(indent+12) << "recipient = " << setprecision(indent) << m_recipient << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_TokenAttributes_giving::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_TokenAttributes_giving), PInvalidCast); #endif const MCS_TokenAttributes_giving & other = (const MCS_TokenAttributes_giving &)obj; Comparison result; if ((result = m_tokenId.Compare(other.m_tokenId)) != EqualTo) return result; if ((result = m_grabber.Compare(other.m_grabber)) != EqualTo) return result; if ((result = m_recipient.Compare(other.m_recipient)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_TokenAttributes_giving::GetDataLength() const { PINDEX length = 0; length += m_tokenId.GetObjectLength(); length += m_grabber.GetObjectLength(); length += m_recipient.GetObjectLength(); return length; } PBoolean MCS_TokenAttributes_giving::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_tokenId.Decode(strm)) return FALSE; if (!m_grabber.Decode(strm)) return FALSE; if (!m_recipient.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_TokenAttributes_giving::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_tokenId.Encode(strm); m_grabber.Encode(strm); m_recipient.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_TokenAttributes_giving::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_TokenAttributes_giving::Class()), PInvalidCast); #endif return new MCS_TokenAttributes_giving(*this); } // // TokenAttributes_ungivable // MCS_TokenAttributes_ungivable::MCS_TokenAttributes_ungivable(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_TokenAttributes_ungivable::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "tokenId = " << setprecision(indent) << m_tokenId << '\n'; strm << setw(indent+10) << "grabber = " << setprecision(indent) << m_grabber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_TokenAttributes_ungivable::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_TokenAttributes_ungivable), PInvalidCast); #endif const MCS_TokenAttributes_ungivable & other = (const MCS_TokenAttributes_ungivable &)obj; Comparison result; if ((result = m_tokenId.Compare(other.m_tokenId)) != EqualTo) return result; if ((result = m_grabber.Compare(other.m_grabber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_TokenAttributes_ungivable::GetDataLength() const { PINDEX length = 0; length += m_tokenId.GetObjectLength(); length += m_grabber.GetObjectLength(); return length; } PBoolean MCS_TokenAttributes_ungivable::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_tokenId.Decode(strm)) return FALSE; if (!m_grabber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_TokenAttributes_ungivable::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_tokenId.Encode(strm); m_grabber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_TokenAttributes_ungivable::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_TokenAttributes_ungivable::Class()), PInvalidCast); #endif return new MCS_TokenAttributes_ungivable(*this); } // // TokenAttributes_given // MCS_TokenAttributes_given::MCS_TokenAttributes_given(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_TokenAttributes_given::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "tokenId = " << setprecision(indent) << m_tokenId << '\n'; strm << setw(indent+12) << "recipient = " << setprecision(indent) << m_recipient << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_TokenAttributes_given::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_TokenAttributes_given), PInvalidCast); #endif const MCS_TokenAttributes_given & other = (const MCS_TokenAttributes_given &)obj; Comparison result; if ((result = m_tokenId.Compare(other.m_tokenId)) != EqualTo) return result; if ((result = m_recipient.Compare(other.m_recipient)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_TokenAttributes_given::GetDataLength() const { PINDEX length = 0; length += m_tokenId.GetObjectLength(); length += m_recipient.GetObjectLength(); return length; } PBoolean MCS_TokenAttributes_given::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_tokenId.Decode(strm)) return FALSE; if (!m_recipient.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_TokenAttributes_given::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_tokenId.Encode(strm); m_recipient.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_TokenAttributes_given::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_TokenAttributes_given::Class()), PInvalidCast); #endif return new MCS_TokenAttributes_given(*this); } // // ArrayOf_TokenAttributes // MCS_ArrayOf_TokenAttributes::MCS_ArrayOf_TokenAttributes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * MCS_ArrayOf_TokenAttributes::CreateObject() const { return new MCS_TokenAttributes; } MCS_TokenAttributes & MCS_ArrayOf_TokenAttributes::operator[](PINDEX i) const { return (MCS_TokenAttributes &)array[i]; } PObject * MCS_ArrayOf_TokenAttributes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_ArrayOf_TokenAttributes::Class()), PInvalidCast); #endif return new MCS_ArrayOf_TokenAttributes(*this); } // // ArrayOf_TokenId // MCS_ArrayOf_TokenId::MCS_ArrayOf_TokenId(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * MCS_ArrayOf_TokenId::CreateObject() const { return new MCS_TokenId; } MCS_TokenId & MCS_ArrayOf_TokenId::operator[](PINDEX i) const { return (MCS_TokenId &)array[i]; } PObject * MCS_ArrayOf_TokenId::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_ArrayOf_TokenId::Class()), PInvalidCast); #endif return new MCS_ArrayOf_TokenId(*this); } // // Connect-Response // MCS_Connect_Response::MCS_Connect_Response(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { m_calledConnectId.SetConstraints(PASN_Object::FixedConstraint, 0, MaximumValue); } #ifndef PASN_NOPRINTON void MCS_Connect_Response::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; strm << setw(indent+18) << "calledConnectId = " << setprecision(indent) << m_calledConnectId << '\n'; strm << setw(indent+19) << "domainParameters = " << setprecision(indent) << m_domainParameters << '\n'; strm << setw(indent+11) << "userData = " << setprecision(indent) << m_userData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_Connect_Response::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_Connect_Response), PInvalidCast); #endif const MCS_Connect_Response & other = (const MCS_Connect_Response &)obj; Comparison result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; if ((result = m_calledConnectId.Compare(other.m_calledConnectId)) != EqualTo) return result; if ((result = m_domainParameters.Compare(other.m_domainParameters)) != EqualTo) return result; if ((result = m_userData.Compare(other.m_userData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_Connect_Response::GetDataLength() const { PINDEX length = 0; length += m_result.GetObjectLength(); length += m_calledConnectId.GetObjectLength(); length += m_domainParameters.GetObjectLength(); length += m_userData.GetObjectLength(); return length; } PBoolean MCS_Connect_Response::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; if (!m_calledConnectId.Decode(strm)) return FALSE; if (!m_domainParameters.Decode(strm)) return FALSE; if (!m_userData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_Connect_Response::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_result.Encode(strm); m_calledConnectId.Encode(strm); m_domainParameters.Encode(strm); m_userData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_Connect_Response::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_Connect_Response::Class()), PInvalidCast); #endif return new MCS_Connect_Response(*this); } // // Connect-Result // MCS_Connect_Result::MCS_Connect_Result(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_Connect_Result::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_Connect_Result::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_Connect_Result), PInvalidCast); #endif const MCS_Connect_Result & other = (const MCS_Connect_Result &)obj; Comparison result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_Connect_Result::GetDataLength() const { PINDEX length = 0; length += m_result.GetObjectLength(); return length; } PBoolean MCS_Connect_Result::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_Connect_Result::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_result.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_Connect_Result::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_Connect_Result::Class()), PInvalidCast); #endif return new MCS_Connect_Result(*this); } // // MCrq // MCS_MCrq::MCS_MCrq(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_MCrq::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "mergeChannels = " << setprecision(indent) << m_mergeChannels << '\n'; strm << setw(indent+18) << "purgeChannelIds = " << setprecision(indent) << m_purgeChannelIds << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_MCrq::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_MCrq), PInvalidCast); #endif const MCS_MCrq & other = (const MCS_MCrq &)obj; Comparison result; if ((result = m_mergeChannels.Compare(other.m_mergeChannels)) != EqualTo) return result; if ((result = m_purgeChannelIds.Compare(other.m_purgeChannelIds)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_MCrq::GetDataLength() const { PINDEX length = 0; length += m_mergeChannels.GetObjectLength(); length += m_purgeChannelIds.GetObjectLength(); return length; } PBoolean MCS_MCrq::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_mergeChannels.Decode(strm)) return FALSE; if (!m_purgeChannelIds.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_MCrq::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_mergeChannels.Encode(strm); m_purgeChannelIds.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_MCrq::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_MCrq::Class()), PInvalidCast); #endif return new MCS_MCrq(*this); } // // MCcf // MCS_MCcf::MCS_MCcf(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_MCcf::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "mergeChannels = " << setprecision(indent) << m_mergeChannels << '\n'; strm << setw(indent+18) << "purgeChannelIds = " << setprecision(indent) << m_purgeChannelIds << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_MCcf::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_MCcf), PInvalidCast); #endif const MCS_MCcf & other = (const MCS_MCcf &)obj; Comparison result; if ((result = m_mergeChannels.Compare(other.m_mergeChannels)) != EqualTo) return result; if ((result = m_purgeChannelIds.Compare(other.m_purgeChannelIds)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_MCcf::GetDataLength() const { PINDEX length = 0; length += m_mergeChannels.GetObjectLength(); length += m_purgeChannelIds.GetObjectLength(); return length; } PBoolean MCS_MCcf::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_mergeChannels.Decode(strm)) return FALSE; if (!m_purgeChannelIds.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_MCcf::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_mergeChannels.Encode(strm); m_purgeChannelIds.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_MCcf::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_MCcf::Class()), PInvalidCast); #endif return new MCS_MCcf(*this); } // // PCin // MCS_PCin::MCS_PCin(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_PCin::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "detachUserIds = " << setprecision(indent) << m_detachUserIds << '\n'; strm << setw(indent+18) << "purgeChannelIds = " << setprecision(indent) << m_purgeChannelIds << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_PCin::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_PCin), PInvalidCast); #endif const MCS_PCin & other = (const MCS_PCin &)obj; Comparison result; if ((result = m_detachUserIds.Compare(other.m_detachUserIds)) != EqualTo) return result; if ((result = m_purgeChannelIds.Compare(other.m_purgeChannelIds)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_PCin::GetDataLength() const { PINDEX length = 0; length += m_detachUserIds.GetObjectLength(); length += m_purgeChannelIds.GetObjectLength(); return length; } PBoolean MCS_PCin::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_detachUserIds.Decode(strm)) return FALSE; if (!m_purgeChannelIds.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_PCin::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_detachUserIds.Encode(strm); m_purgeChannelIds.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_PCin::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_PCin::Class()), PInvalidCast); #endif return new MCS_PCin(*this); } // // MTrq // MCS_MTrq::MCS_MTrq(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_MTrq::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "mergeTokens = " << setprecision(indent) << m_mergeTokens << '\n'; strm << setw(indent+16) << "purgeTokenIds = " << setprecision(indent) << m_purgeTokenIds << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_MTrq::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_MTrq), PInvalidCast); #endif const MCS_MTrq & other = (const MCS_MTrq &)obj; Comparison result; if ((result = m_mergeTokens.Compare(other.m_mergeTokens)) != EqualTo) return result; if ((result = m_purgeTokenIds.Compare(other.m_purgeTokenIds)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_MTrq::GetDataLength() const { PINDEX length = 0; length += m_mergeTokens.GetObjectLength(); length += m_purgeTokenIds.GetObjectLength(); return length; } PBoolean MCS_MTrq::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_mergeTokens.Decode(strm)) return FALSE; if (!m_purgeTokenIds.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_MTrq::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_mergeTokens.Encode(strm); m_purgeTokenIds.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_MTrq::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_MTrq::Class()), PInvalidCast); #endif return new MCS_MTrq(*this); } // // MTcf // MCS_MTcf::MCS_MTcf(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_MTcf::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "mergeTokens = " << setprecision(indent) << m_mergeTokens << '\n'; strm << setw(indent+16) << "purgeTokenIds = " << setprecision(indent) << m_purgeTokenIds << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_MTcf::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_MTcf), PInvalidCast); #endif const MCS_MTcf & other = (const MCS_MTcf &)obj; Comparison result; if ((result = m_mergeTokens.Compare(other.m_mergeTokens)) != EqualTo) return result; if ((result = m_purgeTokenIds.Compare(other.m_purgeTokenIds)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_MTcf::GetDataLength() const { PINDEX length = 0; length += m_mergeTokens.GetObjectLength(); length += m_purgeTokenIds.GetObjectLength(); return length; } PBoolean MCS_MTcf::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_mergeTokens.Decode(strm)) return FALSE; if (!m_purgeTokenIds.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_MTcf::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_mergeTokens.Encode(strm); m_purgeTokenIds.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_MTcf::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_MTcf::Class()), PInvalidCast); #endif return new MCS_MTcf(*this); } // // PTin // MCS_PTin::MCS_PTin(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_PTin::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "purgeTokenIds = " << setprecision(indent) << m_purgeTokenIds << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_PTin::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_PTin), PInvalidCast); #endif const MCS_PTin & other = (const MCS_PTin &)obj; Comparison result; if ((result = m_purgeTokenIds.Compare(other.m_purgeTokenIds)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_PTin::GetDataLength() const { PINDEX length = 0; length += m_purgeTokenIds.GetObjectLength(); return length; } PBoolean MCS_PTin::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_purgeTokenIds.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_PTin::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_purgeTokenIds.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_PTin::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_PTin::Class()), PInvalidCast); #endif return new MCS_PTin(*this); } // // DPum // MCS_DPum::MCS_DPum(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_DPum::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_DPum::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_DPum), PInvalidCast); #endif const MCS_DPum & other = (const MCS_DPum &)obj; Comparison result; if ((result = m_reason.Compare(other.m_reason)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_DPum::GetDataLength() const { PINDEX length = 0; length += m_reason.GetObjectLength(); return length; } PBoolean MCS_DPum::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_reason.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_DPum::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_reason.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_DPum::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_DPum::Class()), PInvalidCast); #endif return new MCS_DPum(*this); } // // RJum // MCS_RJum::MCS_RJum(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_RJum::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "diagnostic = " << setprecision(indent) << m_diagnostic << '\n'; strm << setw(indent+16) << "initialOctets = " << setprecision(indent) << m_initialOctets << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_RJum::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_RJum), PInvalidCast); #endif const MCS_RJum & other = (const MCS_RJum &)obj; Comparison result; if ((result = m_diagnostic.Compare(other.m_diagnostic)) != EqualTo) return result; if ((result = m_initialOctets.Compare(other.m_initialOctets)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_RJum::GetDataLength() const { PINDEX length = 0; length += m_diagnostic.GetObjectLength(); length += m_initialOctets.GetObjectLength(); return length; } PBoolean MCS_RJum::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_diagnostic.Decode(strm)) return FALSE; if (!m_initialOctets.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_RJum::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_diagnostic.Encode(strm); m_initialOctets.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_RJum::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_RJum::Class()), PInvalidCast); #endif return new MCS_RJum(*this); } // // AUcf // MCS_AUcf::MCS_AUcf(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_AUcf::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; if (HasOptionalField(e_initiator)) strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_AUcf::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_AUcf), PInvalidCast); #endif const MCS_AUcf & other = (const MCS_AUcf &)obj; Comparison result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_AUcf::GetDataLength() const { PINDEX length = 0; length += m_result.GetObjectLength(); if (HasOptionalField(e_initiator)) length += m_initiator.GetObjectLength(); return length; } PBoolean MCS_AUcf::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; if (HasOptionalField(e_initiator) && !m_initiator.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_AUcf::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_result.Encode(strm); if (HasOptionalField(e_initiator)) m_initiator.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_AUcf::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_AUcf::Class()), PInvalidCast); #endif return new MCS_AUcf(*this); } // // DUrq // MCS_DUrq::MCS_DUrq(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_DUrq::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; strm << setw(indent+10) << "userIds = " << setprecision(indent) << m_userIds << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_DUrq::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_DUrq), PInvalidCast); #endif const MCS_DUrq & other = (const MCS_DUrq &)obj; Comparison result; if ((result = m_reason.Compare(other.m_reason)) != EqualTo) return result; if ((result = m_userIds.Compare(other.m_userIds)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_DUrq::GetDataLength() const { PINDEX length = 0; length += m_reason.GetObjectLength(); length += m_userIds.GetObjectLength(); return length; } PBoolean MCS_DUrq::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_reason.Decode(strm)) return FALSE; if (!m_userIds.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_DUrq::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_reason.Encode(strm); m_userIds.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_DUrq::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_DUrq::Class()), PInvalidCast); #endif return new MCS_DUrq(*this); } // // DUin // MCS_DUin::MCS_DUin(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_DUin::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; strm << setw(indent+10) << "userIds = " << setprecision(indent) << m_userIds << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_DUin::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_DUin), PInvalidCast); #endif const MCS_DUin & other = (const MCS_DUin &)obj; Comparison result; if ((result = m_reason.Compare(other.m_reason)) != EqualTo) return result; if ((result = m_userIds.Compare(other.m_userIds)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_DUin::GetDataLength() const { PINDEX length = 0; length += m_reason.GetObjectLength(); length += m_userIds.GetObjectLength(); return length; } PBoolean MCS_DUin::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_reason.Decode(strm)) return FALSE; if (!m_userIds.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_DUin::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_reason.Encode(strm); m_userIds.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_DUin::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_DUin::Class()), PInvalidCast); #endif return new MCS_DUin(*this); } // // CJcf // MCS_CJcf::MCS_CJcf(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_CJcf::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+12) << "requested = " << setprecision(indent) << m_requested << '\n'; if (HasOptionalField(e_channelId)) strm << setw(indent+12) << "channelId = " << setprecision(indent) << m_channelId << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_CJcf::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_CJcf), PInvalidCast); #endif const MCS_CJcf & other = (const MCS_CJcf &)obj; Comparison result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_requested.Compare(other.m_requested)) != EqualTo) return result; if ((result = m_channelId.Compare(other.m_channelId)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_CJcf::GetDataLength() const { PINDEX length = 0; length += m_result.GetObjectLength(); length += m_initiator.GetObjectLength(); length += m_requested.GetObjectLength(); if (HasOptionalField(e_channelId)) length += m_channelId.GetObjectLength(); return length; } PBoolean MCS_CJcf::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_requested.Decode(strm)) return FALSE; if (HasOptionalField(e_channelId) && !m_channelId.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_CJcf::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_result.Encode(strm); m_initiator.Encode(strm); m_requested.Encode(strm); if (HasOptionalField(e_channelId)) m_channelId.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_CJcf::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_CJcf::Class()), PInvalidCast); #endif return new MCS_CJcf(*this); } // // CLrq // MCS_CLrq::MCS_CLrq(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_CLrq::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "channelIds = " << setprecision(indent) << m_channelIds << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_CLrq::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_CLrq), PInvalidCast); #endif const MCS_CLrq & other = (const MCS_CLrq &)obj; Comparison result; if ((result = m_channelIds.Compare(other.m_channelIds)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_CLrq::GetDataLength() const { PINDEX length = 0; length += m_channelIds.GetObjectLength(); return length; } PBoolean MCS_CLrq::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_channelIds.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_CLrq::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_channelIds.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_CLrq::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_CLrq::Class()), PInvalidCast); #endif return new MCS_CLrq(*this); } // // CCcf // MCS_CCcf::MCS_CCcf(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_CCcf::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; if (HasOptionalField(e_channelId)) strm << setw(indent+12) << "channelId = " << setprecision(indent) << m_channelId << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_CCcf::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_CCcf), PInvalidCast); #endif const MCS_CCcf & other = (const MCS_CCcf &)obj; Comparison result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_channelId.Compare(other.m_channelId)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_CCcf::GetDataLength() const { PINDEX length = 0; length += m_result.GetObjectLength(); length += m_initiator.GetObjectLength(); if (HasOptionalField(e_channelId)) length += m_channelId.GetObjectLength(); return length; } PBoolean MCS_CCcf::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (HasOptionalField(e_channelId) && !m_channelId.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_CCcf::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_result.Encode(strm); m_initiator.Encode(strm); if (HasOptionalField(e_channelId)) m_channelId.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_CCcf::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_CCcf::Class()), PInvalidCast); #endif return new MCS_CCcf(*this); } // // CArq // MCS_CArq::MCS_CArq(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_CArq::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+12) << "channelId = " << setprecision(indent) << m_channelId << '\n'; strm << setw(indent+10) << "userIds = " << setprecision(indent) << m_userIds << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_CArq::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_CArq), PInvalidCast); #endif const MCS_CArq & other = (const MCS_CArq &)obj; Comparison result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_channelId.Compare(other.m_channelId)) != EqualTo) return result; if ((result = m_userIds.Compare(other.m_userIds)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_CArq::GetDataLength() const { PINDEX length = 0; length += m_initiator.GetObjectLength(); length += m_channelId.GetObjectLength(); length += m_userIds.GetObjectLength(); return length; } PBoolean MCS_CArq::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_channelId.Decode(strm)) return FALSE; if (!m_userIds.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_CArq::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_initiator.Encode(strm); m_channelId.Encode(strm); m_userIds.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_CArq::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_CArq::Class()), PInvalidCast); #endif return new MCS_CArq(*this); } // // CAin // MCS_CAin::MCS_CAin(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_CAin::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+12) << "channelId = " << setprecision(indent) << m_channelId << '\n'; strm << setw(indent+10) << "userIds = " << setprecision(indent) << m_userIds << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_CAin::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_CAin), PInvalidCast); #endif const MCS_CAin & other = (const MCS_CAin &)obj; Comparison result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_channelId.Compare(other.m_channelId)) != EqualTo) return result; if ((result = m_userIds.Compare(other.m_userIds)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_CAin::GetDataLength() const { PINDEX length = 0; length += m_initiator.GetObjectLength(); length += m_channelId.GetObjectLength(); length += m_userIds.GetObjectLength(); return length; } PBoolean MCS_CAin::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_channelId.Decode(strm)) return FALSE; if (!m_userIds.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_CAin::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_initiator.Encode(strm); m_channelId.Encode(strm); m_userIds.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_CAin::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_CAin::Class()), PInvalidCast); #endif return new MCS_CAin(*this); } // // CErq // MCS_CErq::MCS_CErq(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_CErq::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+12) << "channelId = " << setprecision(indent) << m_channelId << '\n'; strm << setw(indent+10) << "userIds = " << setprecision(indent) << m_userIds << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_CErq::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_CErq), PInvalidCast); #endif const MCS_CErq & other = (const MCS_CErq &)obj; Comparison result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_channelId.Compare(other.m_channelId)) != EqualTo) return result; if ((result = m_userIds.Compare(other.m_userIds)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_CErq::GetDataLength() const { PINDEX length = 0; length += m_initiator.GetObjectLength(); length += m_channelId.GetObjectLength(); length += m_userIds.GetObjectLength(); return length; } PBoolean MCS_CErq::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_channelId.Decode(strm)) return FALSE; if (!m_userIds.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_CErq::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_initiator.Encode(strm); m_channelId.Encode(strm); m_userIds.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_CErq::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_CErq::Class()), PInvalidCast); #endif return new MCS_CErq(*this); } // // CEin // MCS_CEin::MCS_CEin(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_CEin::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "channelId = " << setprecision(indent) << m_channelId << '\n'; strm << setw(indent+10) << "userIds = " << setprecision(indent) << m_userIds << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_CEin::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_CEin), PInvalidCast); #endif const MCS_CEin & other = (const MCS_CEin &)obj; Comparison result; if ((result = m_channelId.Compare(other.m_channelId)) != EqualTo) return result; if ((result = m_userIds.Compare(other.m_userIds)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_CEin::GetDataLength() const { PINDEX length = 0; length += m_channelId.GetObjectLength(); length += m_userIds.GetObjectLength(); return length; } PBoolean MCS_CEin::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_channelId.Decode(strm)) return FALSE; if (!m_userIds.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_CEin::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_channelId.Encode(strm); m_userIds.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_CEin::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_CEin::Class()), PInvalidCast); #endif return new MCS_CEin(*this); } // // TGcf // MCS_TGcf::MCS_TGcf(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_TGcf::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+10) << "tokenId = " << setprecision(indent) << m_tokenId << '\n'; strm << setw(indent+14) << "tokenStatus = " << setprecision(indent) << m_tokenStatus << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_TGcf::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_TGcf), PInvalidCast); #endif const MCS_TGcf & other = (const MCS_TGcf &)obj; Comparison result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_tokenId.Compare(other.m_tokenId)) != EqualTo) return result; if ((result = m_tokenStatus.Compare(other.m_tokenStatus)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_TGcf::GetDataLength() const { PINDEX length = 0; length += m_result.GetObjectLength(); length += m_initiator.GetObjectLength(); length += m_tokenId.GetObjectLength(); length += m_tokenStatus.GetObjectLength(); return length; } PBoolean MCS_TGcf::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_tokenId.Decode(strm)) return FALSE; if (!m_tokenStatus.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_TGcf::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_result.Encode(strm); m_initiator.Encode(strm); m_tokenId.Encode(strm); m_tokenStatus.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_TGcf::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_TGcf::Class()), PInvalidCast); #endif return new MCS_TGcf(*this); } // // TIcf // MCS_TIcf::MCS_TIcf(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_TIcf::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+10) << "tokenId = " << setprecision(indent) << m_tokenId << '\n'; strm << setw(indent+14) << "tokenStatus = " << setprecision(indent) << m_tokenStatus << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_TIcf::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_TIcf), PInvalidCast); #endif const MCS_TIcf & other = (const MCS_TIcf &)obj; Comparison result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_tokenId.Compare(other.m_tokenId)) != EqualTo) return result; if ((result = m_tokenStatus.Compare(other.m_tokenStatus)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_TIcf::GetDataLength() const { PINDEX length = 0; length += m_result.GetObjectLength(); length += m_initiator.GetObjectLength(); length += m_tokenId.GetObjectLength(); length += m_tokenStatus.GetObjectLength(); return length; } PBoolean MCS_TIcf::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_tokenId.Decode(strm)) return FALSE; if (!m_tokenStatus.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_TIcf::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_result.Encode(strm); m_initiator.Encode(strm); m_tokenId.Encode(strm); m_tokenStatus.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_TIcf::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_TIcf::Class()), PInvalidCast); #endif return new MCS_TIcf(*this); } // // TVrs // MCS_TVrs::MCS_TVrs(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_TVrs::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; strm << setw(indent+12) << "recipient = " << setprecision(indent) << m_recipient << '\n'; strm << setw(indent+10) << "tokenId = " << setprecision(indent) << m_tokenId << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_TVrs::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_TVrs), PInvalidCast); #endif const MCS_TVrs & other = (const MCS_TVrs &)obj; Comparison result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; if ((result = m_recipient.Compare(other.m_recipient)) != EqualTo) return result; if ((result = m_tokenId.Compare(other.m_tokenId)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_TVrs::GetDataLength() const { PINDEX length = 0; length += m_result.GetObjectLength(); length += m_recipient.GetObjectLength(); length += m_tokenId.GetObjectLength(); return length; } PBoolean MCS_TVrs::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; if (!m_recipient.Decode(strm)) return FALSE; if (!m_tokenId.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_TVrs::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_result.Encode(strm); m_recipient.Encode(strm); m_tokenId.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_TVrs::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_TVrs::Class()), PInvalidCast); #endif return new MCS_TVrs(*this); } // // TVcf // MCS_TVcf::MCS_TVcf(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_TVcf::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+10) << "tokenId = " << setprecision(indent) << m_tokenId << '\n'; strm << setw(indent+14) << "tokenStatus = " << setprecision(indent) << m_tokenStatus << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_TVcf::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_TVcf), PInvalidCast); #endif const MCS_TVcf & other = (const MCS_TVcf &)obj; Comparison result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_tokenId.Compare(other.m_tokenId)) != EqualTo) return result; if ((result = m_tokenStatus.Compare(other.m_tokenStatus)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_TVcf::GetDataLength() const { PINDEX length = 0; length += m_result.GetObjectLength(); length += m_initiator.GetObjectLength(); length += m_tokenId.GetObjectLength(); length += m_tokenStatus.GetObjectLength(); return length; } PBoolean MCS_TVcf::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_tokenId.Decode(strm)) return FALSE; if (!m_tokenStatus.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_TVcf::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_result.Encode(strm); m_initiator.Encode(strm); m_tokenId.Encode(strm); m_tokenStatus.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_TVcf::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_TVcf::Class()), PInvalidCast); #endif return new MCS_TVcf(*this); } // // TRcf // MCS_TRcf::MCS_TRcf(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_TRcf::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; strm << setw(indent+12) << "initiator = " << setprecision(indent) << m_initiator << '\n'; strm << setw(indent+10) << "tokenId = " << setprecision(indent) << m_tokenId << '\n'; strm << setw(indent+14) << "tokenStatus = " << setprecision(indent) << m_tokenStatus << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_TRcf::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_TRcf), PInvalidCast); #endif const MCS_TRcf & other = (const MCS_TRcf &)obj; Comparison result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; if ((result = m_initiator.Compare(other.m_initiator)) != EqualTo) return result; if ((result = m_tokenId.Compare(other.m_tokenId)) != EqualTo) return result; if ((result = m_tokenStatus.Compare(other.m_tokenStatus)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_TRcf::GetDataLength() const { PINDEX length = 0; length += m_result.GetObjectLength(); length += m_initiator.GetObjectLength(); length += m_tokenId.GetObjectLength(); length += m_tokenStatus.GetObjectLength(); return length; } PBoolean MCS_TRcf::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; if (!m_initiator.Decode(strm)) return FALSE; if (!m_tokenId.Decode(strm)) return FALSE; if (!m_tokenStatus.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_TRcf::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_result.Encode(strm); m_initiator.Encode(strm); m_tokenId.Encode(strm); m_tokenStatus.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_TRcf::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_TRcf::Class()), PInvalidCast); #endif return new MCS_TRcf(*this); } // // ChannelAttributes_private // MCS_ChannelAttributes_private::MCS_ChannelAttributes_private(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void MCS_ChannelAttributes_private::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "joined = " << setprecision(indent) << m_joined << '\n'; strm << setw(indent+12) << "channelId = " << setprecision(indent) << m_channelId << '\n'; strm << setw(indent+10) << "manager = " << setprecision(indent) << m_manager << '\n'; strm << setw(indent+11) << "admitted = " << setprecision(indent) << m_admitted << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison MCS_ChannelAttributes_private::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, MCS_ChannelAttributes_private), PInvalidCast); #endif const MCS_ChannelAttributes_private & other = (const MCS_ChannelAttributes_private &)obj; Comparison result; if ((result = m_joined.Compare(other.m_joined)) != EqualTo) return result; if ((result = m_channelId.Compare(other.m_channelId)) != EqualTo) return result; if ((result = m_manager.Compare(other.m_manager)) != EqualTo) return result; if ((result = m_admitted.Compare(other.m_admitted)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX MCS_ChannelAttributes_private::GetDataLength() const { PINDEX length = 0; length += m_joined.GetObjectLength(); length += m_channelId.GetObjectLength(); length += m_manager.GetObjectLength(); length += m_admitted.GetObjectLength(); return length; } PBoolean MCS_ChannelAttributes_private::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_joined.Decode(strm)) return FALSE; if (!m_channelId.Decode(strm)) return FALSE; if (!m_manager.Decode(strm)) return FALSE; if (!m_admitted.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void MCS_ChannelAttributes_private::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_joined.Encode(strm); m_channelId.Encode(strm); m_manager.Encode(strm); m_admitted.Encode(strm); UnknownExtensionsEncode(strm); } PObject * MCS_ChannelAttributes_private::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(MCS_ChannelAttributes_private::Class()), PInvalidCast); #endif return new MCS_ChannelAttributes_private(*this); } #endif // if ! H323_DISABLE_MCS // End of mcspdu.cxx h323plus/src/rtp2wav.cxx0000644000175000017500000001002011015524373014021 0ustar markmark/* * rtp2wav.cxx * * Open Phone Abstraction Library (OPAL) * Formally known as the Open H323 project. * * Copyright (c) 2001 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open Phone Abstraction Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: rtp2wav.cxx,v $ * Revision 1.2 2008/05/23 11:22:35 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:51:08 shorne * First commit of h323plus * * Revision 1.3 2003/01/07 07:52:50 craigs * Fixed problem with multi-frame G.723.1 packets * * Revision 1.2 2002/05/23 04:22:32 robertj * Fixed problem with detecting correct payload type. Must * wait for first non-empty packet. * Added virtual function so can override record start point. * * Revision 1.1 2002/05/21 02:42:58 robertj * Added class to allow for saving of RTP data to a WAV file. * */ #include #ifdef __GNUC__ #pragma implementation "rtp2wav.h" #endif #include "rtp2wav.h" #define new PNEW /////////////////////////////////////////////////////////////////////////////// OpalRtpToWavFile::OpalRtpToWavFile() #ifdef _MSC_VER #pragma warning(disable:4355) #endif : receiveHandler(PCREATE_NOTIFIER(ReceivedPacket)) #ifdef _MSC_VER #pragma warning(default:4355) #endif { payloadType = RTP_DataFrame::IllegalPayloadType; } OpalRtpToWavFile::OpalRtpToWavFile(const PString & filename) #ifdef _MSC_VER #pragma warning(disable:4355) #endif : receiveHandler(PCREATE_NOTIFIER(ReceivedPacket)) #ifdef _MSC_VER #pragma warning(default:4355) #endif { SetFilePath(filename); payloadType = RTP_DataFrame::IllegalPayloadType; lastPayloadSize = 0; } PBoolean OpalRtpToWavFile::OnFirstPacket(RTP_DataFrame & frame) { static int SupportedTypes[] = { PWAVFile::fmt_uLaw, 0, 0, PWAVFile::fmt_GSM, PWAVFile::fmt_VivoG7231, 0, 0, 0, PWAVFile::fmt_ALaw, 0, 0, PWAVFile::fmt_PCM }; payloadType = frame.GetPayloadType(); if (payloadType >= PARRAYSIZE(SupportedTypes) || SupportedTypes[payloadType] == 0) { PTRACE(1, "rtp2wav\tUnsupported payload type: " << payloadType); return FALSE; } if (!SetFormat(SupportedTypes[payloadType])) { PTRACE(1, "rtp2wav\tCould not set WAV file format: " << SupportedTypes[payloadType]); return FALSE; } if (!Open(PFile::WriteOnly)) { PTRACE(1, "rtp2wav\tCould not open WAV file: " << GetErrorText()); return FALSE; } PTRACE(3, "rtp2wav\tStarted recording payload type " << payloadType << " to " << GetFilePath()); return TRUE; } void OpalRtpToWavFile::ReceivedPacket(RTP_DataFrame & frame, INT) { PINDEX payloadSize = frame.GetPayloadSize(); if (payloadType == RTP_DataFrame::IllegalPayloadType) { // Ignore packets until actually get something of jitter buffer if (payloadSize == 0) return; if (!OnFirstPacket(frame)) return; } if (payloadType != frame.GetPayloadType()) return; if (!IsOpen()) return; if (payloadSize > 0) { if (Write(frame.GetPayloadPtr(), payloadSize)) { lastPayloadSize = payloadSize; memcpy(lastFrame.GetPointer(lastPayloadSize), frame.GetPayloadPtr(), payloadSize); return; } } else if (lastPayloadSize == 0) return; else if (Write(lastFrame.GetPointer(), lastPayloadSize)) return; PTRACE(1, "rtp2wav\tError writing to WAV file: " << GetErrorText(PChannel::LastWriteError)); Close(); } ///////////////////////////////////////////////////////////////////////////// h323plus/src/svcctrl.cxx0000644000175000017500000002343211150136226014103 0ustar markmark/* * svcctrl.cxx * * H.225 Service Control protocol handler * * Open H323 Library * * Copyright (c) 2003 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: svcctrl.cxx,v $ * Revision 1.5 2009/02/22 02:46:46 shorne * Small H248 tweak * * Revision 1.4 2009/02/22 02:02:37 shorne * Added ability to enable SCI/SCR without needing H248 support * * Revision 1.3 2008/05/23 11:22:37 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.2 2007/08/07 22:25:47 shorne * update for H323_H350 * * Revision 1.1 2007/08/06 20:51:08 shorne * First commit of h323plus * * Revision 1.2.2.1 2007/07/20 22:03:27 shorne * Initial H.350 Support * * Revision 1.2 2006/05/16 11:37:11 shorne * Added ability to detect type of service control * * Revision 1.1 2003/04/01 01:06:28 robertj * Split service control handlers from H.225 RAS header. * */ #include #ifdef __GNUC__ #pragma implementation "svcctrl.h" #endif #include "h323ep.h" #include "h323pdu.h" #include "h248.h" #include "svcctrl.h" #ifdef H323_H350 #include "h350/h350_service.h" #endif #define new PNEW #ifdef H323_H248 ///////////////////////////////////////////////////////////////////////////// H323ServiceControlSession::H323ServiceControlSession() { } PString H323ServiceControlSession::GetServiceControlType() const { return GetClass(); } ///////////////////////////////////////////////////////////////////////////// H323HTTPServiceControl::H323HTTPServiceControl(const PString & u) : url(u) { } H323HTTPServiceControl::H323HTTPServiceControl(const H225_ServiceControlDescriptor & contents) { OnReceivedPDU(contents); } PBoolean H323HTTPServiceControl::IsValid() const { return !url.IsEmpty(); } PString H323HTTPServiceControl::GetServiceControlType() const { return e_URL; } PBoolean H323HTTPServiceControl::OnReceivedPDU(const H225_ServiceControlDescriptor & contents) { if (contents.GetTag() != H225_ServiceControlDescriptor::e_url) return FALSE; const PASN_IA5String & pdu = contents; url = pdu; return TRUE; } PBoolean H323HTTPServiceControl::OnSendingPDU(H225_ServiceControlDescriptor & contents) const { contents.SetTag(H225_ServiceControlDescriptor::e_url); PASN_IA5String & pdu = contents; pdu = url; return TRUE; } void H323HTTPServiceControl::OnChange(unsigned type, unsigned sessionId, H323EndPoint & endpoint, H323Connection * /*connection*/) const { PTRACE(2, "SvcCtrl\tOnChange HTTP service control " << url); endpoint.OnHTTPServiceControl(type, sessionId, url); } ///////////////////////////////////////////////////////////////////////////// H323H248ServiceControl::H323H248ServiceControl() { } H323H248ServiceControl::H323H248ServiceControl(const H225_ServiceControlDescriptor & contents) { OnReceivedPDU(contents); } PBoolean H323H248ServiceControl::OnReceivedPDU(const H225_ServiceControlDescriptor & contents) { if (contents.GetTag() != H225_ServiceControlDescriptor::e_signal) return FALSE; const H225_H248SignalsDescriptor & pdu = contents; H248_SignalsDescriptor signal; if (!pdu.DecodeSubType(signal)) return FALSE; return OnReceivedPDU(signal); } PBoolean H323H248ServiceControl::OnSendingPDU(H225_ServiceControlDescriptor & contents) const { contents.SetTag(H225_ServiceControlDescriptor::e_signal); H225_H248SignalsDescriptor & pdu = contents; H248_SignalsDescriptor signal; pdu.EncodeSubType(signal); return OnSendingPDU(signal); } PBoolean H323H248ServiceControl::OnReceivedPDU(const H248_SignalsDescriptor & descriptor) { for (PINDEX i = 0; i < descriptor.GetSize(); i++) { if (!OnReceivedPDU(descriptor[i])) return FALSE; } return TRUE; } PBoolean H323H248ServiceControl::OnSendingPDU(H248_SignalsDescriptor & descriptor) const { PINDEX last = descriptor.GetSize(); descriptor.SetSize(last+1); return OnSendingPDU(descriptor[last]); } ///////////////////////////////////////////////////////////////////////////// H323CallCreditServiceControl::H323CallCreditServiceControl(const PString & amt, PBoolean m, unsigned dur) : amount(amt), mode(m), durationLimit(dur) { } H323CallCreditServiceControl::H323CallCreditServiceControl(const H225_ServiceControlDescriptor & contents) { OnReceivedPDU(contents); } PBoolean H323CallCreditServiceControl::IsValid() const { return !amount || durationLimit > 0; } PBoolean H323CallCreditServiceControl::OnReceivedPDU(const H225_ServiceControlDescriptor & contents) { if (contents.GetTag() != H225_ServiceControlDescriptor::e_callCreditServiceControl) return FALSE; const H225_CallCreditServiceControl & credit = contents; if (credit.HasOptionalField(H225_CallCreditServiceControl::e_amountString)) amount = credit.m_amountString; if (credit.HasOptionalField(H225_CallCreditServiceControl::e_billingMode)) mode = credit.m_billingMode.GetTag() == H225_CallCreditServiceControl_billingMode::e_debit; else mode = TRUE; if (credit.HasOptionalField(H225_CallCreditServiceControl::e_callDurationLimit)) durationLimit = credit.m_callDurationLimit; else durationLimit = 0; return TRUE; } PBoolean H323CallCreditServiceControl::OnSendingPDU(H225_ServiceControlDescriptor & contents) const { contents.SetTag(H225_ServiceControlDescriptor::e_callCreditServiceControl); H225_CallCreditServiceControl & credit = contents; if (!amount) { credit.IncludeOptionalField(H225_CallCreditServiceControl::e_amountString); credit.m_amountString = amount; credit.IncludeOptionalField(H225_CallCreditServiceControl::e_billingMode); credit.m_billingMode.SetTag(mode ? H225_CallCreditServiceControl_billingMode::e_debit : H225_CallCreditServiceControl_billingMode::e_credit); } if (durationLimit > 0) { credit.IncludeOptionalField(H225_CallCreditServiceControl::e_callDurationLimit); credit.m_callDurationLimit = durationLimit; credit.IncludeOptionalField(H225_CallCreditServiceControl::e_enforceCallDurationLimit); credit.m_enforceCallDurationLimit = TRUE; } return !amount || durationLimit > 0; } void H323CallCreditServiceControl::OnChange(unsigned /*type*/, unsigned /*sessionId*/, H323EndPoint & endpoint, H323Connection * connection) const { PTRACE(2, "SvcCtrl\tOnChange Call Credit service control " << amount << (mode ? " debit " : " credit ") << durationLimit); endpoint.OnCallCreditServiceControl(amount, mode, durationLimit); if (durationLimit > 0 && connection != NULL) connection->SetEnforcedDurationLimit(durationLimit); } #endif //H323_H248 ///////////////////////////////////////////////////////////////////////////// #ifdef H323_H350 static const char * LDAPServiceOID = "1.3.6.1.4.1.17090.2.1"; H323H350ServiceControl::H323H350ServiceControl(const PString & _ldapURL, const PString & _ldapDN) : ldapURL(_ldapURL),ldapDN(_ldapDN) { } H323H350ServiceControl::H323H350ServiceControl(const H225_ServiceControlDescriptor & contents) { OnReceivedPDU(contents); } PBoolean H323H350ServiceControl::IsValid() const { return !ldapURL.IsEmpty(); } PString H323H350ServiceControl::GetServiceControlType() const { return e_NonStandard; } PBoolean H323H350ServiceControl::OnReceivedPDU(const H225_ServiceControlDescriptor & contents) { if (contents.GetTag() != H225_ServiceControlDescriptor::e_nonStandard) return FALSE; const H225_NonStandardParameter & pdu = contents; const H225_NonStandardIdentifier & id = pdu.m_nonStandardIdentifier; if (id.GetTag() != H225_NonStandardIdentifier::e_object) return FALSE; const PASN_ObjectId & i = id; if (i.AsString() != LDAPServiceOID) return FALSE; const PASN_OctetString & data = pdu.m_data; PPER_Stream argStream(data); H225_H350ServiceControl svc; if (!svc.Decode(argStream)) return FALSE; ldapURL = svc.m_ldapURL; ldapDN = svc.m_ldapDN; return TRUE; } PBoolean H323H350ServiceControl::OnSendingPDU(H225_ServiceControlDescriptor & contents) const { contents.SetTag(H225_ServiceControlDescriptor::e_nonStandard); H225_NonStandardParameter & pdu = contents; H225_NonStandardIdentifier & id = pdu.m_nonStandardIdentifier; id.SetTag(H225_NonStandardIdentifier::e_object); PASN_ObjectId i = id; i.SetValue(LDAPServiceOID); PASN_OctetString & data = pdu.m_data; H225_H350ServiceControl svc; svc.m_ldapURL = ldapURL; svc.m_ldapDN = ldapDN; data.EncodeSubType(svc); return TRUE; } void H323H350ServiceControl::OnChange(unsigned type, unsigned sessionId, H323EndPoint & endpoint, H323Connection * /*connection*/) const { PTRACE(2, "SvcCtrl\tOnChange H350 service control "); endpoint.OnH350ServiceControl(ldapURL,ldapDN); } #endif // H323_H350 ///////////////////////////////////////////////////////////////////////////// h323plus/src/peclient.cxx0000644000175000017500000016777011015524366014252 0ustar markmark/* * peclient.cxx * * H.323 Annex G Peer Element client protocol handler * * Open H323 Library * * Copyright (c) 2003 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: peclient.cxx,v $ * Revision 1.2 2008/05/23 11:22:30 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:51:07 shorne * First commit of h323plus * * Revision 1.45 2004/05/05 14:11:17 csoutheren * Fixed problems with AccessRequest returning wildcards * * Revision 1.44 2004/04/20 01:37:10 csoutheren * Removed uneeded mutex signal * * Revision 1.43 2004/04/14 00:32:13 csoutheren * Quick changes to ensure that non-specific H.501 routes are returned * This will need to be changed later to allow retreiving multiple routes * from an AccessRequest * * Revision 1.42 2004/03/29 08:13:15 csoutheren * Fixed problem with priorities * * Revision 1.41 2004/03/29 06:58:15 csoutheren * Added extra trace messages * * Revision 1.40 2004/03/29 05:35:21 csoutheren * Changed to use default address for descriptor if blank * * Revision 1.39 2003/05/14 03:06:22 rjongbloed * Added another method for removing service relationships. * Added virtual for handling SR requests. * * Revision 1.38 2003/05/05 08:28:25 craigs * Fixed lastUpdate time in descriptors * * Revision 1.37 2003/04/30 07:32:55 craigs * Improve handling of wildcard matches * * Revision 1.36 2003/04/30 04:55:41 craigs * Improved handling for nonexistent routes * * Revision 1.35 2003/04/18 15:16:43 craigs * Fixed problem with creation of alias keys * * Revision 1.34 2003/04/10 14:34:05 craigs * Fixed wild card handling * * Revision 1.33 2003/04/10 09:41:02 robertj * Added some more functions for converting to alias addresses. * * Revision 1.32 2003/04/10 07:05:35 craigs * Allowed access to endpoint type in descriptors * * Revision 1.31 2003/04/10 03:41:58 craigs * Allow AccessRequest to return multiple transport addresses * * Revision 1.30 2003/04/10 00:59:35 craigs * Added support for multiple contact addresses per template * * Revision 1.29 2003/04/09 10:47:06 craigs * Fixed problems * * Revision 1.28 2003/04/09 03:08:10 robertj * Fixed race condition in shutting down transactor (pure virtual call) * * Revision 1.27 2003/04/08 12:23:37 craigs * Fixed problem with descriptors not being removed when service relationships go away * * Revision 1.26 2003/04/07 05:10:50 craigs * Added changes to get access to descriptor creates/updates/deletes * * Revision 1.25 2003/04/02 06:06:01 robertj * Added versions of AddDescriptor that contain the GUID. * Changed default localIdentifier to be the local username of the endpoint. * * Revision 1.24 2003/04/01 05:59:33 robertj * Fixed H.501 transaction code setting members for m_common PDU part. * * Revision 1.23 2003/04/01 04:47:55 robertj * Abstracted H.225 RAS transaction processing (RIP and secondary thread) in * server environment for use by H.501 peer elements. * * Revision 1.22 2003/04/01 01:18:16 robertj * Minor changes to AccessEquest and AddDescriptor API to allow for * string arrays of aliases. * * Revision 1.21 2003/03/28 04:43:05 craigs * Added noCallSpecific flag for compatibility * * Revision 1.20 2003/03/28 00:30:13 craigs * Fixed problems with service relationship ordinals and better descriptor update access * * Revision 1.19 2003/03/27 09:23:41 craigs * Rewritten support for descriptors and multiple templates * * Revision 1.18 2003/03/26 00:46:29 robertj * Had another go at making H323Transactor being able to be created * without having a listener running. * * Revision 1.17 2003/03/25 12:53:00 robertj * Added SetPromiscuous back in * * Revision 1.16 2003/03/25 12:01:30 craigs * Fixed SEGV when no interface specified for peer element * * Revision 1.15 2003/03/25 07:50:23 craigs * Added support for mutiple transports per descriptor * * Revision 1.14 2003/03/25 05:13:00 craigs * More speed enhancements * * Revision 1.13 2003/03/25 02:57:04 craigs * Fixed for update problems * * Revision 1.12 2003/03/25 01:59:13 robertj * Fixed incorrect position of delete. Would do nothing there! * * Revision 1.11 2003/03/25 01:41:02 craigs * Still more signficant H.501 updates * * Revision 1.10 2003/03/20 01:51:12 robertj * More abstraction of H.225 RAS and H.501 protocols transaction handling. * * Revision 1.9 2003/03/19 01:18:38 robertj * Fixed GNU warnings * * Revision 1.8 2003/03/19 01:11:37 robertj * GNU compatibility * * Revision 1.7 2003/03/18 13:57:53 craigs * More H.501 implementation * * Revision 1.6 2003/03/17 13:19:31 craigs * More H501 implementation * * Revision 1.5 2003/03/14 06:01:16 craigs * More updates * * Revision 1.4 2003/03/01 00:22:26 craigs * New PeerElement implementation * * Revision 1.3 2003/02/25 06:48:19 robertj * More work on PDU transaction abstraction. * * Revision 1.2 2003/02/21 07:23:18 robertj * Fixed up some comments * * Revision 1.1 2003/02/21 05:27:06 craigs * Initial version * */ #include #ifdef __GNUC__ #pragma implementation "peclient.h" #endif #include "peclient.h" #include "h323ep.h" #include "h323annexg.h" #include "h323pdu.h" #define new PNEW const unsigned ServiceRequestRetryTime = 60; const unsigned ServiceRequestGracePeriod = 10; const unsigned ServiceRelationshipTimeToLive = 60; //////////////////////////////////////////////////////////////// H501Transaction::H501Transaction(H323PeerElement & pe, const H501PDU & pdu, PBoolean hasReject) : H323Transaction(pe, pdu, new H501PDU, hasReject ? new H501PDU : NULL), requestCommon(((H501PDU &)request->GetPDU()).m_common), confirmCommon(((H501PDU &)confirm->GetPDU()).m_common), peerElement(pe) { } H323TransactionPDU * H501Transaction::CreateRIP(unsigned sequenceNumber, unsigned delay) const { H501PDU * rip = new H501PDU; rip->BuildRequestInProgress(sequenceNumber, delay); return rip; } H235Authenticator::ValidationResult H501Transaction::ValidatePDU() const { return request->Validate(requestCommon.m_tokens, H501_MessageCommonInfo::e_tokens, requestCommon.m_cryptoTokens, H501_MessageCommonInfo::e_cryptoTokens); } //////////////////////////////////////////////////////////////// H501ServiceRequest::H501ServiceRequest(H323PeerElement & pe, const H501PDU & pdu) : H501Transaction(pe, pdu, TRUE), srq((H501_ServiceRequest &)request->GetChoice().GetObject()), scf(((H501PDU &)confirm->GetPDU()).BuildServiceConfirmation(pdu.m_common.m_sequenceNumber)), srj(((H501PDU &)reject->GetPDU()).BuildServiceRejection(pdu.m_common.m_sequenceNumber, H501_ServiceRejectionReason::e_undefined)) { } #if PTRACING const char * H501ServiceRequest::GetName() const { return "ServiceRequest"; } #endif void H501ServiceRequest::SetRejectReason(unsigned reasonCode) { srj.m_reason.SetTag(reasonCode); } H323Transaction::Response H501ServiceRequest::OnHandlePDU() { return peerElement.OnServiceRequest(*this); } //////////////////////////////////////////////////////////////// H501DescriptorUpdate::H501DescriptorUpdate(H323PeerElement & pe, const H501PDU & pdu) : H501Transaction(pe, pdu, FALSE), du((H501_DescriptorUpdate &)request->GetChoice().GetObject()), ack(((H501PDU &)confirm->GetPDU()).BuildDescriptorUpdateAck(pdu.m_common.m_sequenceNumber)) { } #if PTRACING const char * H501DescriptorUpdate::GetName() const { return "DescriptorUpdate"; } #endif void H501DescriptorUpdate::SetRejectReason(unsigned /*reasonCode*/) { // Not possible! } H323Transaction::Response H501DescriptorUpdate::OnHandlePDU() { return peerElement.OnDescriptorUpdate(*this); } //////////////////////////////////////////////////////////////// H501AccessRequest::H501AccessRequest(H323PeerElement & pe, const H501PDU & pdu) : H501Transaction(pe, pdu, TRUE), arq((H501_AccessRequest &)request->GetChoice().GetObject()), acf(((H501PDU &)confirm->GetPDU()).BuildAccessConfirmation(pdu.m_common.m_sequenceNumber)), arj(((H501PDU &)reject->GetPDU()).BuildAccessRejection(pdu.m_common.m_sequenceNumber, H501_AccessRejectionReason::e_undefined)) { } #if PTRACING const char * H501AccessRequest::GetName() const { return "AccessRequest"; } #endif void H501AccessRequest::SetRejectReason(unsigned reasonCode) { arj.m_reason.SetTag(reasonCode); } H323Transaction::Response H501AccessRequest::OnHandlePDU() { return peerElement.OnAccessRequest(*this); } //////////////////////////////////////////////////////////////// H323PeerElement::H323PeerElement(H323EndPoint & ep, H323Transport * trans) : H323_AnnexG(ep, trans), requestMutex(1, 1) { Construct(); } H323PeerElement::H323PeerElement(H323EndPoint & ep, const H323TransportAddress & addr) : H323_AnnexG(ep, addr), requestMutex(1, 1) { Construct(); } void H323PeerElement::Construct() { if (transport != NULL) transport->SetPromiscuous(H323Transport::AcceptFromAny); monitorStop = FALSE; localIdentifier = endpoint.GetLocalUserName(); basePeerOrdinal = RemoteServiceRelationshipOrdinal; StartChannel(); monitor = PThread::Create(PCREATE_NOTIFIER(MonitorMain), 0, PThread::NoAutoDeleteThread, PThread::NormalPriority, "PeerElementMonitor:%x"); } H323PeerElement::~H323PeerElement() { if (monitor != NULL) { monitorStop = TRUE; monitorTickle.Signal(); monitor->WaitForTermination(); delete monitor; } StopChannel(); } void H323PeerElement::SetLocalName(const PString & name) { PWaitAndSignal m(localNameMutex); localIdentifier = name; } PString H323PeerElement::GetLocalName() const { PWaitAndSignal m(localNameMutex); return localIdentifier; } void H323PeerElement::SetDomainName(const PString & name) { PWaitAndSignal m(localNameMutex); domainName = name; } PString H323PeerElement::GetDomainName() const { PWaitAndSignal m(localNameMutex); return domainName; } void H323PeerElement::PrintOn(ostream & strm) const { if (!localIdentifier) strm << localIdentifier << '@'; H323Transactor::PrintOn(strm); } void H323PeerElement::MonitorMain(PThread &, INT) { PTRACE(3, "PeerElement\tBackground thread started"); for (;;) { // refresh and retry remote service relationships by sending new ServiceRequests PTime now; PTime nextExpireTime = now + ServiceRequestRetryTime*1000; { for (PSafePtr sr = GetFirstRemoteServiceRelationship(PSafeReadOnly); sr != NULL; sr++) { if (now >= sr->expireTime) { PTRACE(3, "PeerElement\tRenewing service relationship " << sr->serviceID << "before expiry"); ServiceRequestByID(sr->serviceID); } // get minimum sleep time for next refresh or retry if (sr->expireTime < nextExpireTime) nextExpireTime = sr->expireTime; } } // expire local service relationships we have not received ServiceRequests for { for (PSafePtr sr = GetFirstLocalServiceRelationship(PSafeReadOnly); sr != NULL; sr++) { // check to see if expired or needs refresh scheduled PTime expireTime = sr->expireTime + 1000 * ServiceRequestGracePeriod; if (now >= expireTime) { PTRACE(3, "PeerElement\tService relationship " << sr->serviceID << "expired"); localServiceRelationships.Remove(sr); { PWaitAndSignal m(localPeerListMutex); localServiceOrdinals -= sr->ordinal; } } else if (expireTime < nextExpireTime) nextExpireTime = sr->expireTime; } } // if any descriptor needs updating, then spawn a thread to do it { for (PSafePtr descriptor = GetFirstDescriptor(PSafeReadOnly); descriptor != NULL; descriptor++) { PWaitAndSignal m(localPeerListMutex); if ( (descriptor->state != H323PeerElementDescriptor::Clean) || ( (descriptor->creator >= RemoteServiceRelationshipOrdinal) && !localServiceOrdinals.Contains(descriptor->creator) ) ) { PThread::Create(PCREATE_NOTIFIER(UpdateAllDescriptors), 0, PThread::AutoDeleteThread, PThread::NormalPriority); break; } } } // wait until just before the next expire time; PTimeInterval timeToWait = nextExpireTime - PTime(); if (timeToWait > 60*1000) timeToWait = 60*1000; monitorTickle.Wait(timeToWait); if (monitorStop) break; } PTRACE(3, "PeerElement\tBackground thread ended"); } void H323PeerElement::UpdateAllDescriptors(PThread &, INT) { PTRACE(2, "PeerElement\tDescriptor update thread started"); for (PSafePtr descriptor = GetFirstDescriptor(PSafeReadWrite); descriptor != NULL; descriptor++) { PWaitAndSignal m(localPeerListMutex); // delete any descriptors which belong to service relationships that are now gone if ( (descriptor->state != H323PeerElementDescriptor::Deleted) && (descriptor->creator >= RemoteServiceRelationshipOrdinal) && !localServiceOrdinals.Contains(descriptor->creator) ) descriptor->state = H323PeerElementDescriptor::Deleted; PTRACE(4, "PeerElement\tUpdating descriptor " << descriptor->descriptorID << " in state " << descriptor->state); UpdateDescriptor(descriptor); } monitorTickle.Signal(); PTRACE(2, "PeerElement\tDescriptor update thread ended"); } void H323PeerElement::TickleMonitor(PTimer &, INT) { monitorTickle.Signal(); } /////////////////////////////////////////////////////////// // // service relationship functions // H323PeerElementServiceRelationship * H323PeerElement::CreateServiceRelationship() { return new H323PeerElementServiceRelationship(); } PBoolean H323PeerElement::SetOnlyServiceRelationship(const PString & peer, PBoolean keepTrying) { if (peer.IsEmpty()) { RemoveAllServiceRelationships(); return TRUE; } for (PSafePtr sr = GetFirstRemoteServiceRelationship(PSafeReadOnly); sr != NULL; sr++) if (sr->peer != peer) RemoveServiceRelationship(sr->peer); return AddServiceRelationship(peer, keepTrying); } PBoolean H323PeerElement::AddServiceRelationship(const H323TransportAddress & addr, PBoolean keepTrying) { OpalGloballyUniqueID serviceID; return AddServiceRelationship(addr, serviceID, keepTrying); } PBoolean H323PeerElement::AddServiceRelationship(const H323TransportAddress & addr, OpalGloballyUniqueID & serviceID, PBoolean keepTrying) { switch (ServiceRequestByAddr(addr, serviceID)) { case Confirmed: case ServiceRelationshipReestablished: return TRUE; case NoResponse: if (!keepTrying) return FALSE; break; case Rejected: case NoServiceRelationship: default: return FALSE; } PTRACE(2, "PeerElement\tRetrying ServiceRequest to " << addr << " in " << ServiceRequestRetryTime); // this will cause the polling routines to keep trying to establish a new service relationship H323PeerElementServiceRelationship * sr = CreateServiceRelationship(); sr->peer = addr; sr->expireTime = PTime() + (ServiceRequestRetryTime * 1000); { PWaitAndSignal m(basePeerOrdinalMutex); sr->ordinal = basePeerOrdinal++; } { PWaitAndSignal m(remotePeerListMutex); remotePeerAddrToServiceID.SetAt(addr, sr->serviceID.AsString()); remotePeerAddrToOrdinalKey.SetAt(addr, new POrdinalKey(sr->ordinal)); } remoteServiceRelationships.Append(sr); monitorTickle.Signal(); return TRUE; } PBoolean H323PeerElement::RemoveServiceRelationship(const OpalGloballyUniqueID & serviceID, int reason) { { PWaitAndSignal m(remotePeerListMutex); // if no service relationship exists for this peer, then nothing to do PSafePtr sr = remoteServiceRelationships.FindWithLock(H323PeerElementServiceRelationship(serviceID), PSafeReadOnly); if (sr == NULL) { return FALSE; } } return ServiceRelease(serviceID, reason); } PBoolean H323PeerElement::RemoveServiceRelationship(const H323TransportAddress & peer, int reason) { OpalGloballyUniqueID serviceID; // if no service relationship exists for this peer, then nothing to do { PWaitAndSignal m(remotePeerListMutex); if (!remotePeerAddrToServiceID.Contains(peer)) return FALSE; serviceID = remotePeerAddrToServiceID[peer]; } return ServiceRelease(serviceID, reason); } PBoolean H323PeerElement::RemoveAllServiceRelationships() { // if a service relationship exists for this peer, then reconfirm it for (PSafePtr sr = GetFirstRemoteServiceRelationship(PSafeReadOnly); sr != NULL; sr++) RemoveServiceRelationship(sr->peer); return TRUE; } H323PeerElement::Error H323PeerElement::ServiceRequestByAddr(const H323TransportAddress & peer, OpalGloballyUniqueID & serviceID) { if (PAssertNULL(transport) == NULL) return NoResponse; // if a service relationship exists for this peer, then reconfirm it remotePeerListMutex.Wait(); if (remotePeerAddrToServiceID.Contains(peer)) { serviceID = remotePeerAddrToServiceID[peer]; remotePeerListMutex.Signal(); return ServiceRequestByID(serviceID); } remotePeerListMutex.Signal(); // create a new service relationship H323PeerElementServiceRelationship * sr = CreateServiceRelationship(); // build the service request H501PDU pdu; H323TransportAddressArray interfaces = GetInterfaceAddresses(); H501_ServiceRequest & body = pdu.BuildServiceRequest(GetNextSequenceNumber(), interfaces); // include the element indentifier body.IncludeOptionalField(H501_ServiceRequest::e_elementIdentifier); body.m_elementIdentifier = localIdentifier; // send the request Request request(pdu.GetSequenceNumber(), pdu, peer); H501PDU reply; request.responseInfo = &reply; if (!MakeRequest(request)) { delete sr; switch (request.responseResult) { case Request::NoResponseReceived : PTRACE(2, "PeerElement\tServiceRequest to " << peer << " failed due to no response"); return NoResponse; case Request::RejectReceived: PTRACE(2, "PeerElement\tServiceRequest to " << peer << " rejected for reason " << request.rejectReason); break; default: PTRACE(2, "PeerElement\tServiceRequest to " << peer << " refused with unknown response " << (int)request.responseResult); break; } return Rejected; } // reply must contain a service ID if (!reply.m_common.HasOptionalField(H501_MessageCommonInfo::e_serviceID)) { PTRACE(1, "PeerElement\tServiceConfirmation contains no serviceID"); delete sr; return Rejected; } // create the service relationship H501_ServiceConfirmation & replyBody = reply.m_body; sr->peer = peer; sr->serviceID = reply.m_common.m_serviceID; sr->expireTime = PTime() + 1000 * ((replyBody.m_timeToLive < ServiceRequestRetryTime) ? (int)replyBody.m_timeToLive : ServiceRequestRetryTime); sr->lastUpdateTime = PTime(); serviceID = sr->serviceID; { if (sr->ordinal == LocalServiceRelationshipOrdinal) { { PWaitAndSignal m(basePeerOrdinalMutex); sr->ordinal = basePeerOrdinal++; } { PWaitAndSignal m(remotePeerListMutex); remotePeerAddrToServiceID.SetAt(peer, sr->serviceID.AsString()); remotePeerAddrToOrdinalKey.SetAt(peer, new POrdinalKey(sr->ordinal)); } } } remoteServiceRelationships.Append(sr); PTRACE(2, "PeerElement\tNew service relationship established with " << peer << " - next update in " << replyBody.m_timeToLive); OnAddServiceRelationship(peer); // mark all descriptors as needing an update for (PSafePtr descriptor = GetFirstDescriptor(PSafeReadWrite); descriptor != NULL; descriptor++) { if (descriptor->state == H323PeerElementDescriptor::Clean) descriptor->state = H323PeerElementDescriptor::Dirty; } monitorTickle.Signal(); return Confirmed; } H323PeerElement::Error H323PeerElement::ServiceRequestByID(OpalGloballyUniqueID & serviceID) { if (PAssertNULL(transport) == NULL) return NoResponse; // build the service request H501PDU pdu; H501_ServiceRequest & body = pdu.BuildServiceRequest(GetNextSequenceNumber(), transport->GetLastReceivedAddress()); // include the element indentifier body.IncludeOptionalField(H501_ServiceRequest::e_elementIdentifier); body.m_elementIdentifier = localIdentifier; // check to see if we have a service relationship with the peer already PSafePtr sr = remoteServiceRelationships.FindWithLock(H323PeerElementServiceRelationship(serviceID), PSafeReadWrite); if (sr == NULL) return NoServiceRelationship; // setup to update the old service relationship pdu.m_common.IncludeOptionalField(H501_MessageCommonInfo::e_serviceID); pdu.m_common.m_serviceID = sr->serviceID; Request request(pdu.GetSequenceNumber(), pdu, sr->peer); H501PDU reply; request.responseInfo = &reply; if (MakeRequest(request)) { H501_ServiceConfirmation & replyBody = reply.m_body; sr->expireTime = PTime() + 1000 * ((replyBody.m_timeToLive < ServiceRequestRetryTime) ? (int)replyBody.m_timeToLive : ServiceRequestRetryTime); sr->lastUpdateTime = PTime(); PTRACE(2, "PeerElement\tConfirmed service relationship with " << sr->peer << " - next update in " << replyBody.m_timeToLive); return Confirmed; } // if cannot update, then try again after 60 seconds switch (request.responseResult) { case Request::NoResponseReceived : PTRACE(2, "PeerElement\tNo response to ServiceRequest - trying again in " << ServiceRequestRetryTime); sr->expireTime = PTime() + (ServiceRequestRetryTime * 1000); monitorTickle.Signal(); return NoResponse; case Request::RejectReceived: switch (request.rejectReason) { case H501_ServiceRejectionReason::e_unknownServiceID: if (OnRemoteServiceRelationshipDisappeared(serviceID, sr->peer)) return Confirmed; break; default: PTRACE(2, "PeerElement\tServiceRequest to " << sr->peer << " rejected with unknown reason " << request.rejectReason); break; } break; default: PTRACE(2, "PeerElement\tServiceRequest to " << sr->peer << " failed with unknown response " << (int)request.responseResult); break; } return Rejected; } H323Transaction::Response H323PeerElement::OnServiceRequest(H501ServiceRequest & info) { info.SetRejectReason(H501_ServiceRejectionReason::e_serviceUnavailable); return H323Transaction::Reject; } H323Transaction::Response H323PeerElement::HandleServiceRequest(H501ServiceRequest & info) { // if a serviceID is specified, this is should be an existing service relationship if (info.requestCommon.HasOptionalField(H501_MessageCommonInfo::e_serviceID)) { // check to see if we have a service relationship with the peer already OpalGloballyUniqueID serviceID(info.requestCommon.m_serviceID); PSafePtr sr = localServiceRelationships.FindWithLock(H323PeerElementServiceRelationship(serviceID), PSafeReadWrite); if (sr == NULL) { PTRACE(2, "PeerElement\nRejecting unknown service ID " << serviceID << " received from peer " << info.GetReplyAddress()); info.SetRejectReason(H501_ServiceRejectionReason::e_unknownServiceID); return H323Transaction::Reject; } // include service ID, local and domain identifiers info.confirmCommon.IncludeOptionalField(H501_MessageCommonInfo::e_serviceID); info.confirmCommon.m_serviceID = sr->serviceID; info.scf.m_elementIdentifier = GetLocalName(); H323SetAliasAddress(GetDomainName(), info.scf.m_domainIdentifier); // include time to live info.scf.IncludeOptionalField(H501_ServiceConfirmation::e_timeToLive); info.scf.m_timeToLive = ServiceRelationshipTimeToLive; sr->lastUpdateTime = PTime(); sr->expireTime = PTime() + (info.scf.m_timeToLive * 1000); PTRACE(2, "PeerElement\nService relationship with " << sr->name << " at " << info.GetReplyAddress() << " updated - next update in " << info.scf.m_timeToLive); return H323Transaction::Confirm; } H323PeerElementServiceRelationship * sr = CreateServiceRelationship(); // get the name of the remote element if (info.srq.HasOptionalField(H501_ServiceRequest::e_elementIdentifier)) sr->name = info.srq.m_elementIdentifier; // include service ID, local and domain identifiers info.confirmCommon.IncludeOptionalField(H501_MessageCommonInfo::e_serviceID); info.confirmCommon.m_serviceID = sr->serviceID; info.scf.m_elementIdentifier = GetLocalName(); H323SetAliasAddress(GetDomainName(), info.scf.m_domainIdentifier); // include time to live info.scf.IncludeOptionalField(H501_ServiceConfirmation::e_timeToLive); info.scf.m_timeToLive = ServiceRelationshipTimeToLive; if (info.requestCommon.HasOptionalField(H501_MessageCommonInfo::e_replyAddress) && info.requestCommon.m_replyAddress.GetSize() > 0) sr->peer = info.requestCommon.m_replyAddress[0]; else sr->peer = transport->GetLastReceivedAddress(); sr->lastUpdateTime = PTime(); sr->expireTime = PTime() + (info.scf.m_timeToLive * 1000); { H323TransportAddress addr = transport->GetLastReceivedAddress(); { PWaitAndSignal m(basePeerOrdinalMutex); sr->ordinal = basePeerOrdinal++; } { PWaitAndSignal m(localPeerListMutex); localServiceOrdinals += sr->ordinal; } } // add to the list of known relationships localServiceRelationships.Append(sr); monitorTickle.Signal(); // send the response PTRACE(2, "PeerElement\nNew service relationship with " << sr->name << " at " << info.GetReplyAddress() << " created - next update in " << info.scf.m_timeToLive); return H323Transaction::Confirm; } PBoolean H323PeerElement::OnReceiveServiceRequest(const H501PDU & pdu, const H501_ServiceRequest & /*pduBody*/) { H501ServiceRequest * info = new H501ServiceRequest(*this, pdu); if (!info->HandlePDU()) delete info; return FALSE; } PBoolean H323PeerElement::OnReceiveServiceConfirmation(const H501PDU & pdu, const H501_ServiceConfirmation & pduBody) { if (!H323_AnnexG::OnReceiveServiceConfirmation(pdu, pduBody)) return FALSE; if (lastRequest->responseInfo != NULL) *(H501PDU *)lastRequest->responseInfo = pdu; return TRUE; } PBoolean H323PeerElement::ServiceRelease(const OpalGloballyUniqueID & serviceID, unsigned reason) { // remove any previous check to see if we have a service relationship with the peer already PSafePtr sr = remoteServiceRelationships.FindWithLock(H323PeerElementServiceRelationship(serviceID), PSafeReadWrite); if (sr == NULL) return FALSE; // send the request - no response H501PDU pdu; H501_ServiceRelease & body = pdu.BuildServiceRelease(GetNextSequenceNumber()); pdu.m_common.m_serviceID = sr->serviceID; body.m_reason = reason; WriteTo(pdu, sr->peer); OnRemoveServiceRelationship(sr->peer); InternalRemoveServiceRelationship(sr->peer); remoteServiceRelationships.Remove(sr); return TRUE; } PBoolean H323PeerElement::OnRemoteServiceRelationshipDisappeared(OpalGloballyUniqueID & serviceID, const H323TransportAddress & peer) { OpalGloballyUniqueID oldServiceID = serviceID; // the service ID specified is now gone PSafePtr sr = remoteServiceRelationships.FindWithLock(H323PeerElementServiceRelationship(serviceID), PSafeReadOnly); if (sr != NULL) remoteServiceRelationships.Remove(sr); InternalRemoveServiceRelationship(peer); // attempt to create a new service relationship if (ServiceRequestByAddr(peer, serviceID) != Confirmed) { PTRACE(2, "PeerElement\tService relationship with " << peer << " disappeared and refused new relationship"); OnRemoveServiceRelationship(peer); return FALSE; } // we have a new service ID PTRACE(2, "PeerElement\tService relationship with " << peer << " disappeared and new relationship established"); serviceID = remotePeerAddrToServiceID(peer); return TRUE; } void H323PeerElement::InternalRemoveServiceRelationship(const H323TransportAddress & peer) { { PWaitAndSignal m(remotePeerListMutex); remotePeerAddrToServiceID.RemoveAt(peer); remotePeerAddrToOrdinalKey.RemoveAt(peer); } monitorTickle.Signal(); } /////////////////////////////////////////////////////////// // // descriptor table functions // H323PeerElementDescriptor * H323PeerElement::CreateDescriptor(const OpalGloballyUniqueID & descriptorID) { return new H323PeerElementDescriptor(descriptorID); } PBoolean H323PeerElement::AddDescriptor(const OpalGloballyUniqueID & descriptorID, const PStringArray & aliasStrings, const H323TransportAddressArray & transportAddresses, unsigned options, PBoolean now) { // convert transport addresses to aliases H225_ArrayOf_AliasAddress aliases; H323SetAliasAddresses(aliasStrings, aliases); return AddDescriptor(descriptorID, aliases, transportAddresses, options, now); } PBoolean H323PeerElement::AddDescriptor(const OpalGloballyUniqueID & descriptorID, const H225_ArrayOf_AliasAddress & aliases, const H323TransportAddressArray & transportAddresses, unsigned options, PBoolean now) { H225_ArrayOf_AliasAddress addresses; H323SetAliasAddresses(transportAddresses, addresses); return AddDescriptor(descriptorID, LocalServiceRelationshipOrdinal, aliases, addresses, options, now); } PBoolean H323PeerElement::AddDescriptor(const OpalGloballyUniqueID & descriptorID, const H225_ArrayOf_AliasAddress & aliases, const H225_ArrayOf_AliasAddress & transportAddress, unsigned options, PBoolean now) { // create a new descriptor return AddDescriptor(descriptorID, LocalServiceRelationshipOrdinal, aliases, transportAddress, options, now); } PBoolean H323PeerElement::AddDescriptor(const OpalGloballyUniqueID & descriptorID, const POrdinalKey & creator, const H225_ArrayOf_AliasAddress & aliases, const H225_ArrayOf_AliasAddress & transportAddresses, unsigned options, PBoolean now) { // create an const H501_ArrayOf_AddressTemplate with the template information H501_ArrayOf_AddressTemplate addressTemplates; // copy data into the descriptor addressTemplates.SetSize(1); H225_EndpointType epType; endpoint.SetEndpointTypeInfo(epType); H323PeerElementDescriptor::CopyToAddressTemplate(addressTemplates[0], epType, aliases, transportAddresses, options); return AddDescriptor(descriptorID, creator, addressTemplates, now); } PBoolean H323PeerElement::AddDescriptor(const OpalGloballyUniqueID & descriptorID, const POrdinalKey & creator, const H501_ArrayOf_AddressTemplate & addressTemplates, const PTime & updateTime, PBoolean now) { // see if there is actually a descriptor with this ID PSafePtr descriptor = descriptors.FindWithLock(H323PeerElementDescriptor(descriptorID), PSafeReadWrite); H501_UpdateInformation_updateType::Choices updateType = H501_UpdateInformation_updateType::e_changed; PBoolean add = FALSE; { PWaitAndSignal m(aliasMutex); if (descriptor != NULL) { RemoveDescriptorInformation(descriptor->addressTemplates); // only update if the update time is later than what we already have if (updateTime < descriptor->lastChanged) { PTRACE(4, "PeerElement\tNot updating descriptor " << descriptorID << " as " << updateTime << " < " << descriptor->lastChanged); return TRUE; } } else { add = TRUE; descriptor = CreateDescriptor(descriptorID); descriptor->creator = creator; descriptor->addressTemplates = addressTemplates; updateType = H501_UpdateInformation_updateType::e_added; } descriptor->lastChanged = PTime(); // add all patterns and transport addresses to secondary lookup tables PINDEX i, j, k; for (i = 0; i < descriptor->addressTemplates.GetSize(); i++) { H501_AddressTemplate & addressTemplate = addressTemplates[i]; // add patterns for this descriptor for (j = 0; j < addressTemplate.m_pattern.GetSize(); j++) { H501_Pattern & pattern = addressTemplate.m_pattern[j]; switch (pattern.GetTag()) { case H501_Pattern::e_specific: specificAliasToDescriptorID.Append(CreateAliasKey((H225_AliasAddress &)pattern, descriptorID, i, FALSE)); break; case H501_Pattern::e_wildcard: wildcardAliasToDescriptorID.Append(CreateAliasKey((H225_AliasAddress &)pattern, descriptorID, i, TRUE)); break; case H501_Pattern::e_range: break; } } // add transport addresses for this descriptor H501_ArrayOf_RouteInformation & routeInfos = addressTemplate.m_routeInfo; for (j = 0; j < routeInfos.GetSize(); j++) { H501_ArrayOf_ContactInformation & contacts = routeInfos[j].m_contacts; for (k = 0; k < contacts.GetSize(); k++) { H501_ContactInformation & contact = contacts[k]; H225_AliasAddress & transportAddress = contact.m_transportAddress; transportAddressToDescriptorID.Append(CreateAliasKey((H225_AliasAddress &)transportAddress, descriptorID, i)); } } } } if (!add) OnUpdateDescriptor(*descriptor); else { descriptors.Append(descriptor); OnNewDescriptor(*descriptor); } // do the update now, or later if (now) { PTRACE(2, "PeerElement\tDescriptor " << descriptorID << " added/updated"); UpdateDescriptor(descriptor, updateType); } else if (descriptor->state != H323PeerElementDescriptor::Deleted) { PTRACE(2, "PeerElement\tDescriptor " << descriptorID << " queued to be added"); descriptor->state = H323PeerElementDescriptor::Dirty; monitorTickle.Signal(); } return TRUE; } H323PeerElement::AliasKey * H323PeerElement::CreateAliasKey(const H225_AliasAddress & alias, const OpalGloballyUniqueID & id, PINDEX pos, PBoolean wild) { return new AliasKey(alias, id, pos, wild); } void H323PeerElement::RemoveDescriptorInformation(const H501_ArrayOf_AddressTemplate & addressTemplates) { PWaitAndSignal m(aliasMutex); PINDEX i, j, k, idx; // remove all patterns and transport addresses for this descriptor for (i = 0; i < addressTemplates.GetSize(); i++) { H501_AddressTemplate & addressTemplate = addressTemplates[i]; // remove patterns for this descriptor for (j = 0; j < addressTemplate.m_pattern.GetSize(); j++) { H501_Pattern & pattern = addressTemplate.m_pattern[j]; switch (pattern.GetTag()) { case H501_Pattern::e_specific: idx = specificAliasToDescriptorID.GetValuesIndex((H225_AliasAddress &)pattern); if (idx != P_MAX_INDEX) specificAliasToDescriptorID.RemoveAt(idx); break; case H501_Pattern::e_wildcard: idx = wildcardAliasToDescriptorID.GetValuesIndex((H225_AliasAddress &)pattern); if (idx != P_MAX_INDEX) wildcardAliasToDescriptorID.RemoveAt(idx); break; case H501_Pattern::e_range: break; } } // remove transport addresses for this descriptor H501_ArrayOf_RouteInformation & routeInfos = addressTemplate.m_routeInfo; for (j = 0; j < routeInfos.GetSize(); j++) { H501_ArrayOf_ContactInformation & contacts = routeInfos[i].m_contacts; for (k = 0; k < contacts.GetSize(); k++) { H501_ContactInformation & contact = contacts[k]; H225_AliasAddress & transportAddress = contact.m_transportAddress; idx = transportAddressToDescriptorID.GetValuesIndex(transportAddress); if (idx != P_MAX_INDEX) transportAddressToDescriptorID.RemoveAt(idx); } } } } PBoolean H323PeerElement::DeleteDescriptor(const PString & str, PBoolean now) { H225_AliasAddress alias; H323SetAliasAddress(str, alias); return DeleteDescriptor(alias, now); } PBoolean H323PeerElement::DeleteDescriptor(const H225_AliasAddress & alias, PBoolean now) { OpalGloballyUniqueID descriptorID(""); // find the descriptor ID for the descriptor { PWaitAndSignal m(aliasMutex); PINDEX idx = specificAliasToDescriptorID.GetValuesIndex(alias); if (idx == P_MAX_INDEX) return FALSE; descriptorID = ((AliasKey &)specificAliasToDescriptorID[idx]).id; } return DeleteDescriptor(descriptorID, now); } PBoolean H323PeerElement::DeleteDescriptor(const OpalGloballyUniqueID & descriptorID, PBoolean now) { // see if there is a descriptor with this ID PSafePtr descriptor = descriptors.FindWithLock(H323PeerElementDescriptor(descriptorID), PSafeReadWrite); if (descriptor == NULL) return FALSE; OnRemoveDescriptor(*descriptor); RemoveDescriptorInformation(descriptor->addressTemplates); // delete the descriptor, or mark it as to be deleted if (now) { PTRACE(2, "PeerElement\tDescriptor " << descriptorID << " deleted"); UpdateDescriptor(descriptor, H501_UpdateInformation_updateType::e_deleted); } else { PTRACE(2, "PeerElement\tDescriptor for " << descriptorID << " queued to be deleted"); descriptor->state = H323PeerElementDescriptor::Deleted; monitorTickle.Signal(); } return TRUE; } PBoolean H323PeerElement::UpdateDescriptor(H323PeerElementDescriptor * descriptor) { H501_UpdateInformation_updateType::Choices updateType = H501_UpdateInformation_updateType::e_changed; switch (descriptor->state) { case H323PeerElementDescriptor::Clean: return TRUE; case H323PeerElementDescriptor::Dirty: break; case H323PeerElementDescriptor::Deleted: updateType = H501_UpdateInformation_updateType::e_deleted; break; } return UpdateDescriptor(descriptor, updateType); } PBoolean H323PeerElement::UpdateDescriptor(H323PeerElementDescriptor * descriptor, H501_UpdateInformation_updateType::Choices updateType) { if (updateType == H501_UpdateInformation_updateType::e_deleted) descriptor->state = H323PeerElementDescriptor::Deleted; else if (descriptor->state == H323PeerElementDescriptor::Deleted) updateType = H501_UpdateInformation_updateType::e_deleted; else if (descriptor->state == H323PeerElementDescriptor::Clean) return TRUE; else descriptor->state = H323PeerElementDescriptor::Clean; for (PSafePtr sr = GetFirstRemoteServiceRelationship(PSafeReadOnly); sr != NULL; sr++) { PTRACE(4, "PeerElement\tUpdating descriptor " << descriptor->descriptorID << " for service ID " << sr->serviceID); SendUpdateDescriptorByID(sr->serviceID, descriptor, updateType); } if (descriptor->state == H323PeerElementDescriptor::Deleted) descriptors.Remove(descriptor); return TRUE; } /////////////////////////////////////////////////////////// // // descriptor peer element functions // H323PeerElement::Error H323PeerElement::SendUpdateDescriptorByID(const OpalGloballyUniqueID & serviceID, H323PeerElementDescriptor * descriptor, H501_UpdateInformation_updateType::Choices updateType) { if (PAssertNULL(transport) == NULL) return NoResponse; H501PDU pdu; pdu.BuildDescriptorUpdate(GetNextSequenceNumber(), transport->GetLastReceivedAddress()); H323TransportAddress peer; // put correct service descriptor into the common data { // check to see if we have a service relationship with the peer already PSafePtr sr = remoteServiceRelationships.FindWithLock(H323PeerElementServiceRelationship(serviceID), PSafeReadOnly); // if there is no service relationship, then nothing to do if (sr == NULL) return NoServiceRelationship; pdu.m_common.IncludeOptionalField(H501_MessageCommonInfo::e_serviceID); pdu.m_common.m_serviceID = sr->serviceID; peer = sr->peer; } return SendUpdateDescriptor(pdu, peer, descriptor, updateType); } H323PeerElement::Error H323PeerElement::SendUpdateDescriptorByAddr(const H323TransportAddress & peer, H323PeerElementDescriptor * descriptor, H501_UpdateInformation_updateType::Choices updateType) { if (PAssertNULL(transport) == NULL) return NoResponse; H501PDU pdu; pdu.BuildDescriptorUpdate(GetNextSequenceNumber(), transport->GetLastReceivedAddress()); return SendUpdateDescriptor(pdu, peer, descriptor, updateType); } H323PeerElement::Error H323PeerElement::SendUpdateDescriptor(H501PDU & pdu, const H323TransportAddress & peer, H323PeerElementDescriptor * descriptor, H501_UpdateInformation_updateType::Choices updateType) { if (PAssertNULL(transport) == NULL) return NoResponse; H501_DescriptorUpdate & body = pdu.m_body; // put in sender address H323TransportAddressArray addrs = GetInterfaceAddresses(); PAssert(addrs.GetSize() > 0, "No interface addresses"); H323SetAliasAddress(addrs[0], body.m_sender, H225_AliasAddress::e_transportID); // add information body.m_updateInfo.SetSize(1); H501_UpdateInformation & info = body.m_updateInfo[0]; info.m_descriptorInfo.SetTag(H501_UpdateInformation_descriptorInfo::e_descriptor); info.m_updateType.SetTag(updateType); descriptor->CopyTo(info.m_descriptorInfo); // make the request Request request(pdu.GetSequenceNumber(), pdu, peer); if (MakeRequest(request)) return Confirmed; // if error was no service relationship, then establish relationship and try again switch (request.responseResult) { case Request::NoResponseReceived : PTRACE(2, "PeerElement\tUpdateDescriptor to " << peer << " failed due to no response"); break; default: PTRACE(2, "PeerElement\tUpdateDescriptor to " << peer << " refused with unknown response " << (int)request.responseResult); return Rejected; } return Rejected; } H323Transaction::Response H323PeerElement::OnDescriptorUpdate(H501DescriptorUpdate & /*info*/) { return H323Transaction::Ignore; } PBoolean H323PeerElement::OnReceiveDescriptorUpdate(const H501PDU & pdu, const H501_DescriptorUpdate & /*pduBody*/) { H501DescriptorUpdate * info = new H501DescriptorUpdate(*this, pdu); if (!info->HandlePDU()) delete info; return FALSE; } PBoolean H323PeerElement::OnReceiveDescriptorUpdateACK(const H501PDU & pdu, const H501_DescriptorUpdateAck & pduBody) { if (!H323_AnnexG::OnReceiveDescriptorUpdateACK(pdu, pduBody)) return FALSE; if (lastRequest->responseInfo != NULL) *(H501_MessageCommonInfo *)lastRequest->responseInfo = pdu.m_common; return TRUE; } /////////////////////////////////////////////////////////// // // access request functions // PBoolean H323PeerElement::AccessRequest(const PString & searchAlias, PStringArray & destAliases, H323TransportAddress & transportAddress, unsigned options) { H225_AliasAddress h225searchAlias; H323SetAliasAddress(searchAlias, h225searchAlias); H225_ArrayOf_AliasAddress h225destAliases; if (!AccessRequest(h225searchAlias, h225destAliases, transportAddress, options)) return FALSE; destAliases = H323GetAliasAddressStrings(h225destAliases); return TRUE; } PBoolean H323PeerElement::AccessRequest(const PString & searchAlias, H225_ArrayOf_AliasAddress & destAliases, H323TransportAddress & transportAddress, unsigned options) { H225_AliasAddress h225searchAlias; H323SetAliasAddress(searchAlias, h225searchAlias); return AccessRequest(h225searchAlias, destAliases, transportAddress, options); } PBoolean H323PeerElement::AccessRequest(const H225_AliasAddress & searchAlias, H225_ArrayOf_AliasAddress & destAliases, H323TransportAddress & transportAddress, unsigned options) { H225_AliasAddress h225Address; if (!AccessRequest(searchAlias, destAliases, h225Address, options)) return FALSE; transportAddress = H323GetAliasAddressString(h225Address); return TRUE; } PBoolean H323PeerElement::AccessRequest(const H225_AliasAddress & searchAlias, H225_ArrayOf_AliasAddress & destAliases, H225_AliasAddress & transportAddress, unsigned options) { // try each service relationship in turn POrdinalSet peersTried; for (PSafePtr sr = GetFirstRemoteServiceRelationship(PSafeReadOnly); sr != NULL; sr++) { // create the request H501PDU request; H501_AccessRequest & requestBody = request.BuildAccessRequest(GetNextSequenceNumber(), transport->GetLastReceivedAddress()); // set dest information H501_PartyInformation & destInfo = requestBody.m_destinationInfo; destInfo.m_logicalAddresses.SetSize(1); destInfo.m_logicalAddresses[0] = searchAlias; // set protocols requestBody.IncludeOptionalField(H501_AccessRequest::e_desiredProtocols); H323PeerElementDescriptor::SetProtocolList(requestBody.m_desiredProtocols, options); // make the request H501PDU reply; H323PeerElement::Error error = SendAccessRequestByID(sr->serviceID, request, reply); H323TransportAddress peerAddr = sr->peer; while (error == Confirmed) { // make sure we got at least one template H501_AccessConfirmation & confirm = reply.m_body; H501_ArrayOf_AddressTemplate & addressTemplates = confirm.m_templates; if (addressTemplates.GetSize() == 0) { PTRACE(2, "Main\tAccessRequest for " << searchAlias << " from " << peerAddr << " contains no templates"); break; } H501_AddressTemplate & addressTemplate = addressTemplates[0]; // make sure patterns are returned H501_ArrayOf_Pattern & patterns = addressTemplate.m_pattern; if (patterns.GetSize() == 0) { PTRACE(2, "Main\tAccessRequest for " << searchAlias << " from " << peerAddr << " contains no patterns"); break; } // make sure routes are returned H501_ArrayOf_RouteInformation & routeInfos = addressTemplate.m_routeInfo; if (routeInfos.GetSize() == 0) { PTRACE(2, "Main\tAccessRequest for " << searchAlias << " from " << peerAddr << " contains no routes"); break; } H501_RouteInformation & routeInfo = addressTemplate.m_routeInfo[0]; // make sure routes contain contacts H501_ArrayOf_ContactInformation & contacts = routeInfo.m_contacts; if (contacts.GetSize() == 0) { PTRACE(2, "Main\tAccessRequest for " << searchAlias << " from " << peerAddr << " contains no contacts"); break; } H501_ContactInformation & contact = routeInfo.m_contacts[0]; // get the address H225_AliasAddress contactAddress = contact.m_transportAddress; int tag = routeInfo.m_messageType.GetTag(); if (tag == H501_RouteInformation_messageType::e_sendAccessRequest) { PTRACE(2, "Main\tAccessRequest for " << searchAlias << " redirected from " << peerAddr << " to " << contactAddress); peerAddr = H323GetAliasAddressString(contactAddress); } else if (tag == H501_RouteInformation_messageType::e_sendSetup) { // get the dest aliases destAliases.SetSize(addressTemplate.m_pattern.GetSize()); PINDEX count = 0; PINDEX i; for (i = 0; i < addressTemplate.m_pattern.GetSize(); i++) { if (addressTemplate.m_pattern[i].GetTag() == H501_Pattern::e_specific) { H225_AliasAddress & alias = addressTemplate.m_pattern[i]; destAliases[count++] = alias; } } destAliases.SetSize(count); transportAddress = contactAddress; PTRACE(2, "Main\tAccessRequest for " << searchAlias << " returned " << transportAddress << " from " << peerAddr); return TRUE; } else { // H501_RouteInformation_messageType::e_nonExistent PTRACE(2, "Main\tAccessRequest for " << searchAlias << " from " << peerAddr << " returned nonExistent"); break; } // this is the address to send the new request to H323TransportAddress addr = peerAddr; // create the request H501_AccessRequest & requestBody = request.BuildAccessRequest(GetNextSequenceNumber(), transport->GetLastReceivedAddress()); // set dest information H501_PartyInformation & destInfo = requestBody.m_destinationInfo; destInfo.m_logicalAddresses.SetSize(1); destInfo.m_logicalAddresses[0] = searchAlias; // set protocols requestBody.IncludeOptionalField(H501_AccessRequest::e_desiredProtocols); H323PeerElementDescriptor::SetProtocolList(requestBody.m_desiredProtocols, options); // make the request error = SendAccessRequestByAddr(addr, request, reply); } } return FALSE; } /////////////////////////////////////////////////////////// // // access request functions // H323PeerElement::Error H323PeerElement::SendAccessRequestByID(const OpalGloballyUniqueID & origServiceID, H501PDU & pdu, H501PDU & confirmPDU) { if (PAssertNULL(transport) == NULL) return NoResponse; OpalGloballyUniqueID serviceID = origServiceID; for (;;) { // get the peer address H323TransportAddress peer; { PSafePtr sr = remoteServiceRelationships.FindWithLock(H323PeerElementServiceRelationship(serviceID), PSafeReadOnly); if (sr == NULL) return NoServiceRelationship; peer = sr->peer; } // set the service ID pdu.m_common.IncludeOptionalField(H501_MessageCommonInfo::e_serviceID); pdu.m_common.m_serviceID = serviceID; // make the request Request request(pdu.GetSequenceNumber(), pdu, peer); request.responseInfo = &confirmPDU; if (MakeRequest(request)) return Confirmed; // if error was no service relationship, then establish relationship and try again switch (request.responseResult) { case Request::NoResponseReceived : PTRACE(2, "PeerElement\tAccessRequest to " << peer << " failed due to no response"); return Rejected; case Request::RejectReceived: switch (request.rejectReason) { case H501_ServiceRejectionReason::e_unknownServiceID: if (!OnRemoteServiceRelationshipDisappeared(serviceID, peer)) return Rejected; break; default: return Rejected; } break; default: PTRACE(2, "PeerElement\tAccessRequest to " << peer << " refused with unknown response " << (int)request.responseResult); return Rejected; } } return Rejected; } H323PeerElement::Error H323PeerElement::SendAccessRequestByAddr(const H323TransportAddress & peerAddr, H501PDU & pdu, H501PDU & confirmPDU) { if (PAssertNULL(transport) == NULL) return NoResponse; pdu.m_common.RemoveOptionalField(H501_MessageCommonInfo::e_serviceID); // make the request Request request(pdu.GetSequenceNumber(), pdu, peerAddr); request.responseInfo = &confirmPDU; if (MakeRequest(request)) return Confirmed; // if error was no service relationship, then establish relationship and try again switch (request.responseResult) { case Request::NoResponseReceived : PTRACE(2, "PeerElement\tAccessRequest to " << peerAddr << " failed due to no response"); break; case Request::RejectReceived: PTRACE(2, "PeerElement\tAccessRequest failed due to " << request.rejectReason); break; default: PTRACE(2, "PeerElement\tAccessRequest to " << peerAddr << " refused with unknown response " << (int)request.responseResult); break; } return Rejected; } H323Transaction::Response H323PeerElement::OnAccessRequest(H501AccessRequest & info) { info.SetRejectReason(H501_AccessRejectionReason::e_noServiceRelationship); return H323Transaction::Reject; } PBoolean H323PeerElement::OnReceiveAccessRequest(const H501PDU & pdu, const H501_AccessRequest & /*pduBody*/) { H501AccessRequest * info = new H501AccessRequest(*this, pdu); if (!info->HandlePDU()) delete info; return FALSE; } PBoolean H323PeerElement::OnReceiveAccessConfirmation(const H501PDU & pdu, const H501_AccessConfirmation & pduBody) { if (!H323_AnnexG::OnReceiveAccessConfirmation(pdu, pduBody)) return FALSE; if (lastRequest->responseInfo != NULL) *(H501PDU *)lastRequest->responseInfo = pdu; return TRUE; } PBoolean H323PeerElement::OnReceiveAccessRejection(const H501PDU & pdu, const H501_AccessRejection & pduBody) { if (!H323_AnnexG::OnReceiveAccessRejection(pdu, pduBody)) return FALSE; return TRUE; } PBoolean H323PeerElement::MakeRequest(Request & request) { requestMutex.Wait(); PBoolean stat = H323_AnnexG::MakeRequest(request); requestMutex.Signal(); return stat; } ////////////////////////////////////////////////////////////////////////////// PObject::Comparison H323PeerElementDescriptor::Compare(const PObject & obj) const { H323PeerElementDescriptor & other = (H323PeerElementDescriptor &)obj; return descriptorID.Compare(other.descriptorID); } void H323PeerElementDescriptor::CopyTo(H501_Descriptor & descriptor) { descriptor.m_descriptorInfo.m_descriptorID = descriptorID; descriptor.m_descriptorInfo.m_lastChanged = lastChanged.AsString("yyyyMMddhhmmss", PTime::GMT); descriptor.m_templates = addressTemplates; if (!gatekeeperID.IsEmpty()) { descriptor.IncludeOptionalField(H501_Descriptor::e_gatekeeperID); descriptor.m_gatekeeperID = gatekeeperID; } } PBoolean H323PeerElementDescriptor::ContainsNonexistent() { PBoolean blocked = FALSE; // look for any nonexistent routes, which means this descriptor does NOT match PINDEX k, j; for (k = 0; !blocked && (k < addressTemplates.GetSize()); k++) { H501_ArrayOf_RouteInformation & routeInfo = addressTemplates[k].m_routeInfo; for (j = 0; !blocked && (j < routeInfo.GetSize()); j++) { if (routeInfo[j].m_messageType.GetTag() == H501_RouteInformation_messageType::e_nonExistent) blocked = TRUE; } } return blocked; } PBoolean H323PeerElementDescriptor::CopyToAddressTemplate(H501_AddressTemplate & addressTemplate, const H225_EndpointType & epInfo, const H225_ArrayOf_AliasAddress & aliases, const H225_ArrayOf_AliasAddress & transportAddresses, unsigned options) { // add patterns for this descriptor addressTemplate.m_pattern.SetSize(aliases.GetSize()); PINDEX j; for (j = 0; j < aliases.GetSize(); j++) { H501_Pattern & pattern = addressTemplate.m_pattern[j]; if ((options & Option_WildCard) != 0) pattern.SetTag(H501_Pattern::e_wildcard); else pattern.SetTag(H501_Pattern::e_specific); (H225_AliasAddress &)pattern = aliases[j]; } // add transport addresses for this descriptor H501_ArrayOf_RouteInformation & routeInfos = addressTemplate.m_routeInfo; routeInfos.SetSize(1); H501_RouteInformation & routeInfo = routeInfos[0]; if ((options & Option_NotAvailable) != 0) routeInfo.m_messageType.SetTag(H501_RouteInformation_messageType::e_nonExistent); else if ((options & Option_SendAccessRequest) != 0) routeInfo.m_messageType.SetTag(H501_RouteInformation_messageType::e_sendAccessRequest); else { routeInfo.m_messageType.SetTag(H501_RouteInformation_messageType::e_sendSetup); routeInfo.m_callSpecific = FALSE; routeInfo.IncludeOptionalField(H501_RouteInformation::e_type); routeInfo.m_type = epInfo; } routeInfo.m_callSpecific = FALSE; H501_ArrayOf_ContactInformation & contacts = routeInfos[0].m_contacts; contacts.SetSize(transportAddresses.GetSize()); PINDEX i; for (i = 0; i < transportAddresses.GetSize(); i++) { H501_ContactInformation & contact = contacts[i]; contact.m_transportAddress = transportAddresses[i]; contact.m_priority = H323PeerElementDescriptor::GetPriorityOption(options); } // add protocols addressTemplate.IncludeOptionalField(H501_AddressTemplate::e_supportedProtocols); SetProtocolList(addressTemplate.m_supportedProtocols, options); return TRUE; } /* PBoolean H323PeerElementDescriptor::CopyFrom(const H501_Descriptor & descriptor) { descriptorID = descriptor.m_descriptorInfo.m_descriptorID; //lastChanged.AsString("yyyyMMddhhmmss") = descriptor.m_descriptorInfo.m_lastChanged; addressTemplates = descriptor.m_templates; if (descriptor.HasOptionalField(H501_Descriptor::e_gatekeeperID)) gatekeeperID = descriptor.m_gatekeeperID; else gatekeeperID = PString::Empty(); return TRUE; } */ void H323PeerElementDescriptor::SetProtocolList(H501_ArrayOf_SupportedProtocols & h501Protocols, unsigned options) { h501Protocols.SetSize(0); int mask =1; do { if (options & mask) { int pos = h501Protocols.GetSize(); switch (mask) { case H323PeerElementDescriptor::Protocol_H323: h501Protocols.SetSize(pos+1); h501Protocols[pos].SetTag(H225_SupportedProtocols::e_h323); break; case H323PeerElementDescriptor::Protocol_Voice: h501Protocols.SetSize(pos+1); h501Protocols[pos].SetTag(H225_SupportedProtocols::e_voice); break; default: break; } } mask *= 2; } while (mask != Protocol_Max); } unsigned H323PeerElementDescriptor::GetProtocolList(const H501_ArrayOf_SupportedProtocols & h501Protocols) { unsigned options = 0; PINDEX i; for (i = 0; i < h501Protocols.GetSize(); i++) { switch (h501Protocols[i].GetTag()) { case H225_SupportedProtocols::e_h323: options += Protocol_H323; break; case H225_SupportedProtocols::e_voice: options += Protocol_Voice; break; default: break; } } return options; } // End of file //////////////////////////////////////////////////////////////// h323plus/src/t38.cxx0000644000175000017500000006242211015524377013053 0ustar markmark// // t38.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "t38.h" #endif #include #include "t38.h" #define new PNEW #if ! H323_DISABLE_T38 #ifndef PASN_NOPRINTON const static PASN_Names Names_T38_Type_of_msg[]={ {"t30_indicator",0} ,{"data",1} }; #endif // // Type-of-msg // T38_Type_of_msg::T38_Type_of_msg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_T38_Type_of_msg,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 T38_Type_of_msg::operator T38_Type_of_msg_t30_indicator &() const #else T38_Type_of_msg::operator T38_Type_of_msg_t30_indicator &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), T38_Type_of_msg_t30_indicator), PInvalidCast); #endif return *(T38_Type_of_msg_t30_indicator *)choice; } T38_Type_of_msg::operator const T38_Type_of_msg_t30_indicator &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), T38_Type_of_msg_t30_indicator), PInvalidCast); #endif return *(T38_Type_of_msg_t30_indicator *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 T38_Type_of_msg::operator T38_Type_of_msg_data &() const #else T38_Type_of_msg::operator T38_Type_of_msg_data &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), T38_Type_of_msg_data), PInvalidCast); #endif return *(T38_Type_of_msg_data *)choice; } T38_Type_of_msg::operator const T38_Type_of_msg_data &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), T38_Type_of_msg_data), PInvalidCast); #endif return *(T38_Type_of_msg_data *)choice; } PBoolean T38_Type_of_msg::CreateObject() { switch (tag) { case e_t30_indicator : choice = new T38_Type_of_msg_t30_indicator(); return TRUE; case e_data : choice = new T38_Type_of_msg_data(); return TRUE; } choice = NULL; return FALSE; } PObject * T38_Type_of_msg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(T38_Type_of_msg::Class()), PInvalidCast); #endif return new T38_Type_of_msg(*this); } // // Data-Field // T38_Data_Field::T38_Data_Field(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * T38_Data_Field::CreateObject() const { return new T38_Data_Field_subtype; } T38_Data_Field_subtype & T38_Data_Field::operator[](PINDEX i) const { return (T38_Data_Field_subtype &)array[i]; } PObject * T38_Data_Field::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(T38_Data_Field::Class()), PInvalidCast); #endif return new T38_Data_Field(*this); } // // PreCorrigendum-Data-Field // T38_PreCorrigendum_Data_Field::T38_PreCorrigendum_Data_Field(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * T38_PreCorrigendum_Data_Field::CreateObject() const { return new T38_PreCorrigendum_Data_Field_subtype; } T38_PreCorrigendum_Data_Field_subtype & T38_PreCorrigendum_Data_Field::operator[](PINDEX i) const { return (T38_PreCorrigendum_Data_Field_subtype &)array[i]; } PObject * T38_PreCorrigendum_Data_Field::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(T38_PreCorrigendum_Data_Field::Class()), PInvalidCast); #endif return new T38_PreCorrigendum_Data_Field(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_T38_Type_of_msg_t30_indicator[]={ {"no-signal",0} ,{"cng",1} ,{"ced",2} ,{"v21-preamble",3} ,{"v27-2400-training",4} ,{"v27-4800-training",5} ,{"v29-7200-training",6} ,{"v29-9600-training",7} ,{"v17-7200-short-training",8} ,{"v17-7200-long-training",9} ,{"v17-9600-short-training",10} ,{"v17-9600-long-training",11} ,{"v17-12000-short-training",12} ,{"v17-12000-long-training",13} ,{"v17-14400-short-training",14} ,{"v17-14400-long-training",15} }; #endif // // Type-of-msg_t30-indicator // T38_Type_of_msg_t30_indicator::T38_Type_of_msg_t30_indicator(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 15, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_T38_Type_of_msg_t30_indicator,16 #endif ) { } T38_Type_of_msg_t30_indicator & T38_Type_of_msg_t30_indicator::operator=(unsigned v) { SetValue(v); return *this; } PObject * T38_Type_of_msg_t30_indicator::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(T38_Type_of_msg_t30_indicator::Class()), PInvalidCast); #endif return new T38_Type_of_msg_t30_indicator(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_T38_Type_of_msg_data[]={ {"v21",0} ,{"v27-2400",1} ,{"v27-4800",2} ,{"v29-7200",3} ,{"v29-9600",4} ,{"v17-7200",5} ,{"v17-9600",6} ,{"v17-12000",7} ,{"v17-14400",8} }; #endif // // Type-of-msg_data // T38_Type_of_msg_data::T38_Type_of_msg_data(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 8, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_T38_Type_of_msg_data,9 #endif ) { } T38_Type_of_msg_data & T38_Type_of_msg_data::operator=(unsigned v) { SetValue(v); return *this; } PObject * T38_Type_of_msg_data::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(T38_Type_of_msg_data::Class()), PInvalidCast); #endif return new T38_Type_of_msg_data(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_T38_UDPTLPacket_error_recovery[]={ {"secondary_ifp_packets",0} ,{"fec_info",1} }; #endif // // UDPTLPacket_error-recovery // T38_UDPTLPacket_error_recovery::T38_UDPTLPacket_error_recovery(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_T38_UDPTLPacket_error_recovery,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 T38_UDPTLPacket_error_recovery::operator T38_UDPTLPacket_error_recovery_secondary_ifp_packets &() const #else T38_UDPTLPacket_error_recovery::operator T38_UDPTLPacket_error_recovery_secondary_ifp_packets &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), T38_UDPTLPacket_error_recovery_secondary_ifp_packets), PInvalidCast); #endif return *(T38_UDPTLPacket_error_recovery_secondary_ifp_packets *)choice; } T38_UDPTLPacket_error_recovery::operator const T38_UDPTLPacket_error_recovery_secondary_ifp_packets &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), T38_UDPTLPacket_error_recovery_secondary_ifp_packets), PInvalidCast); #endif return *(T38_UDPTLPacket_error_recovery_secondary_ifp_packets *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 T38_UDPTLPacket_error_recovery::operator T38_UDPTLPacket_error_recovery_fec_info &() const #else T38_UDPTLPacket_error_recovery::operator T38_UDPTLPacket_error_recovery_fec_info &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), T38_UDPTLPacket_error_recovery_fec_info), PInvalidCast); #endif return *(T38_UDPTLPacket_error_recovery_fec_info *)choice; } T38_UDPTLPacket_error_recovery::operator const T38_UDPTLPacket_error_recovery_fec_info &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), T38_UDPTLPacket_error_recovery_fec_info), PInvalidCast); #endif return *(T38_UDPTLPacket_error_recovery_fec_info *)choice; } PBoolean T38_UDPTLPacket_error_recovery::CreateObject() { switch (tag) { case e_secondary_ifp_packets : choice = new T38_UDPTLPacket_error_recovery_secondary_ifp_packets(); return TRUE; case e_fec_info : choice = new T38_UDPTLPacket_error_recovery_fec_info(); return TRUE; } choice = NULL; return FALSE; } PObject * T38_UDPTLPacket_error_recovery::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(T38_UDPTLPacket_error_recovery::Class()), PInvalidCast); #endif return new T38_UDPTLPacket_error_recovery(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_T38_Data_Field_subtype_field_type[]={ {"hdlc-data",0} ,{"hdlc-sig-end",1} ,{"hdlc-fcs-OK",2} ,{"hdlc-fcs-BAD",3} ,{"hdlc-fcs-OK-sig-end",4} ,{"hdlc-fcs-BAD-sig-end",5} ,{"t4-non-ecm-data",6} ,{"t4-non-ecm-sig-end",7} }; #endif // // Data-Field_subtype_field-type // T38_Data_Field_subtype_field_type::T38_Data_Field_subtype_field_type(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 7, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_T38_Data_Field_subtype_field_type,8 #endif ) { } T38_Data_Field_subtype_field_type & T38_Data_Field_subtype_field_type::operator=(unsigned v) { SetValue(v); return *this; } PObject * T38_Data_Field_subtype_field_type::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(T38_Data_Field_subtype_field_type::Class()), PInvalidCast); #endif return new T38_Data_Field_subtype_field_type(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_T38_PreCorrigendum_Data_Field_subtype_field_type[]={ {"hdlc-data",0} ,{"hdlc-sig-end",1} ,{"hdlc-fcs-OK",2} ,{"hdlc-fcs-BAD",3} ,{"hdlc-fcs-OK-sig-end",4} ,{"hdlc-fcs-BAD-sig-end",5} ,{"t4-non-ecm-data",6} ,{"t4-non-ecm-sig-end",7} }; #endif // // PreCorrigendum-Data-Field_subtype_field-type // T38_PreCorrigendum_Data_Field_subtype_field_type::T38_PreCorrigendum_Data_Field_subtype_field_type(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 7, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_T38_PreCorrigendum_Data_Field_subtype_field_type,8 #endif ) { } T38_PreCorrigendum_Data_Field_subtype_field_type & T38_PreCorrigendum_Data_Field_subtype_field_type::operator=(unsigned v) { SetValue(v); return *this; } PObject * T38_PreCorrigendum_Data_Field_subtype_field_type::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(T38_PreCorrigendum_Data_Field_subtype_field_type::Class()), PInvalidCast); #endif return new T38_PreCorrigendum_Data_Field_subtype_field_type(*this); } // // UDPTLPacket_error-recovery_secondary-ifp-packets // T38_UDPTLPacket_error_recovery_secondary_ifp_packets::T38_UDPTLPacket_error_recovery_secondary_ifp_packets(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * T38_UDPTLPacket_error_recovery_secondary_ifp_packets::CreateObject() const { return new T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype; } T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype & T38_UDPTLPacket_error_recovery_secondary_ifp_packets::operator[](PINDEX i) const { return (T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype &)array[i]; } PObject * T38_UDPTLPacket_error_recovery_secondary_ifp_packets::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(T38_UDPTLPacket_error_recovery_secondary_ifp_packets::Class()), PInvalidCast); #endif return new T38_UDPTLPacket_error_recovery_secondary_ifp_packets(*this); } // // ArrayOf_PASN_OctetString // T38_ArrayOf_PASN_OctetString::T38_ArrayOf_PASN_OctetString(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * T38_ArrayOf_PASN_OctetString::CreateObject() const { return new PASN_OctetString; } PASN_OctetString & T38_ArrayOf_PASN_OctetString::operator[](PINDEX i) const { return (PASN_OctetString &)array[i]; } PObject * T38_ArrayOf_PASN_OctetString::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(T38_ArrayOf_PASN_OctetString::Class()), PInvalidCast); #endif return new T38_ArrayOf_PASN_OctetString(*this); } // // IFPPacket // T38_IFPPacket::T38_IFPPacket(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { } #ifndef PASN_NOPRINTON void T38_IFPPacket::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "type_of_msg = " << setprecision(indent) << m_type_of_msg << '\n'; if (HasOptionalField(e_data_field)) strm << setw(indent+13) << "data_field = " << setprecision(indent) << m_data_field << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison T38_IFPPacket::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, T38_IFPPacket), PInvalidCast); #endif const T38_IFPPacket & other = (const T38_IFPPacket &)obj; Comparison result; if ((result = m_type_of_msg.Compare(other.m_type_of_msg)) != EqualTo) return result; if ((result = m_data_field.Compare(other.m_data_field)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX T38_IFPPacket::GetDataLength() const { PINDEX length = 0; length += m_type_of_msg.GetObjectLength(); if (HasOptionalField(e_data_field)) length += m_data_field.GetObjectLength(); return length; } PBoolean T38_IFPPacket::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_type_of_msg.Decode(strm)) return FALSE; if (HasOptionalField(e_data_field) && !m_data_field.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void T38_IFPPacket::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_type_of_msg.Encode(strm); if (HasOptionalField(e_data_field)) m_data_field.Encode(strm); UnknownExtensionsEncode(strm); } PObject * T38_IFPPacket::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(T38_IFPPacket::Class()), PInvalidCast); #endif return new T38_IFPPacket(*this); } // // PreCorrigendum-IFPPacket // T38_PreCorrigendum_IFPPacket::T38_PreCorrigendum_IFPPacket(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { } #ifndef PASN_NOPRINTON void T38_PreCorrigendum_IFPPacket::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "type_of_msg = " << setprecision(indent) << m_type_of_msg << '\n'; if (HasOptionalField(e_data_field)) strm << setw(indent+13) << "data_field = " << setprecision(indent) << m_data_field << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison T38_PreCorrigendum_IFPPacket::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, T38_PreCorrigendum_IFPPacket), PInvalidCast); #endif const T38_PreCorrigendum_IFPPacket & other = (const T38_PreCorrigendum_IFPPacket &)obj; Comparison result; if ((result = m_type_of_msg.Compare(other.m_type_of_msg)) != EqualTo) return result; if ((result = m_data_field.Compare(other.m_data_field)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX T38_PreCorrigendum_IFPPacket::GetDataLength() const { PINDEX length = 0; length += m_type_of_msg.GetObjectLength(); if (HasOptionalField(e_data_field)) length += m_data_field.GetObjectLength(); return length; } PBoolean T38_PreCorrigendum_IFPPacket::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_type_of_msg.Decode(strm)) return FALSE; if (HasOptionalField(e_data_field) && !m_data_field.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void T38_PreCorrigendum_IFPPacket::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_type_of_msg.Encode(strm); if (HasOptionalField(e_data_field)) m_data_field.Encode(strm); UnknownExtensionsEncode(strm); } PObject * T38_PreCorrigendum_IFPPacket::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(T38_PreCorrigendum_IFPPacket::Class()), PInvalidCast); #endif return new T38_PreCorrigendum_IFPPacket(*this); } // // Data-Field_subtype // T38_Data_Field_subtype::T38_Data_Field_subtype(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { m_field_data.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } #ifndef PASN_NOPRINTON void T38_Data_Field_subtype::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "field_type = " << setprecision(indent) << m_field_type << '\n'; if (HasOptionalField(e_field_data)) strm << setw(indent+13) << "field_data = " << setprecision(indent) << m_field_data << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison T38_Data_Field_subtype::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, T38_Data_Field_subtype), PInvalidCast); #endif const T38_Data_Field_subtype & other = (const T38_Data_Field_subtype &)obj; Comparison result; if ((result = m_field_type.Compare(other.m_field_type)) != EqualTo) return result; if ((result = m_field_data.Compare(other.m_field_data)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX T38_Data_Field_subtype::GetDataLength() const { PINDEX length = 0; length += m_field_type.GetObjectLength(); if (HasOptionalField(e_field_data)) length += m_field_data.GetObjectLength(); return length; } PBoolean T38_Data_Field_subtype::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_field_type.Decode(strm)) return FALSE; if (HasOptionalField(e_field_data) && !m_field_data.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void T38_Data_Field_subtype::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_field_type.Encode(strm); if (HasOptionalField(e_field_data)) m_field_data.Encode(strm); UnknownExtensionsEncode(strm); } PObject * T38_Data_Field_subtype::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(T38_Data_Field_subtype::Class()), PInvalidCast); #endif return new T38_Data_Field_subtype(*this); } // // PreCorrigendum-Data-Field_subtype // T38_PreCorrigendum_Data_Field_subtype::T38_PreCorrigendum_Data_Field_subtype(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { m_field_data.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } #ifndef PASN_NOPRINTON void T38_PreCorrigendum_Data_Field_subtype::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "field_type = " << setprecision(indent) << m_field_type << '\n'; if (HasOptionalField(e_field_data)) strm << setw(indent+13) << "field_data = " << setprecision(indent) << m_field_data << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison T38_PreCorrigendum_Data_Field_subtype::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, T38_PreCorrigendum_Data_Field_subtype), PInvalidCast); #endif const T38_PreCorrigendum_Data_Field_subtype & other = (const T38_PreCorrigendum_Data_Field_subtype &)obj; Comparison result; if ((result = m_field_type.Compare(other.m_field_type)) != EqualTo) return result; if ((result = m_field_data.Compare(other.m_field_data)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX T38_PreCorrigendum_Data_Field_subtype::GetDataLength() const { PINDEX length = 0; length += m_field_type.GetObjectLength(); if (HasOptionalField(e_field_data)) length += m_field_data.GetObjectLength(); return length; } PBoolean T38_PreCorrigendum_Data_Field_subtype::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_field_type.Decode(strm)) return FALSE; if (HasOptionalField(e_field_data) && !m_field_data.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void T38_PreCorrigendum_Data_Field_subtype::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_field_type.Encode(strm); if (HasOptionalField(e_field_data)) m_field_data.Encode(strm); UnknownExtensionsEncode(strm); } PObject * T38_PreCorrigendum_Data_Field_subtype::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(T38_PreCorrigendum_Data_Field_subtype::Class()), PInvalidCast); #endif return new T38_PreCorrigendum_Data_Field_subtype(*this); } // // UDPTLPacket_primary-ifp-packet // T38_UDPTLPacket_primary_ifp_packet::T38_UDPTLPacket_primary_ifp_packet(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { } PObject * T38_UDPTLPacket_primary_ifp_packet::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(T38_UDPTLPacket_primary_ifp_packet::Class()), PInvalidCast); #endif return new T38_UDPTLPacket_primary_ifp_packet(*this); } // // UDPTLPacket_error-recovery_fec-info // T38_UDPTLPacket_error_recovery_fec_info::T38_UDPTLPacket_error_recovery_fec_info(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void T38_UDPTLPacket_error_recovery_fec_info::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "fec_npackets = " << setprecision(indent) << m_fec_npackets << '\n'; strm << setw(indent+11) << "fec_data = " << setprecision(indent) << m_fec_data << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison T38_UDPTLPacket_error_recovery_fec_info::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, T38_UDPTLPacket_error_recovery_fec_info), PInvalidCast); #endif const T38_UDPTLPacket_error_recovery_fec_info & other = (const T38_UDPTLPacket_error_recovery_fec_info &)obj; Comparison result; if ((result = m_fec_npackets.Compare(other.m_fec_npackets)) != EqualTo) return result; if ((result = m_fec_data.Compare(other.m_fec_data)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX T38_UDPTLPacket_error_recovery_fec_info::GetDataLength() const { PINDEX length = 0; length += m_fec_npackets.GetObjectLength(); length += m_fec_data.GetObjectLength(); return length; } PBoolean T38_UDPTLPacket_error_recovery_fec_info::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_fec_npackets.Decode(strm)) return FALSE; if (!m_fec_data.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void T38_UDPTLPacket_error_recovery_fec_info::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_fec_npackets.Encode(strm); m_fec_data.Encode(strm); UnknownExtensionsEncode(strm); } PObject * T38_UDPTLPacket_error_recovery_fec_info::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(T38_UDPTLPacket_error_recovery_fec_info::Class()), PInvalidCast); #endif return new T38_UDPTLPacket_error_recovery_fec_info(*this); } // // UDPTLPacket_error-recovery_secondary-ifp-packets_subtype // T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype::T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { } PObject * T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype::Class()), PInvalidCast); #endif return new T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype(*this); } // // UDPTLPacket // T38_UDPTLPacket::T38_UDPTLPacket(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { m_seq_number.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void T38_UDPTLPacket::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "seq_number = " << setprecision(indent) << m_seq_number << '\n'; strm << setw(indent+21) << "primary_ifp_packet = " << setprecision(indent) << m_primary_ifp_packet << '\n'; strm << setw(indent+17) << "error_recovery = " << setprecision(indent) << m_error_recovery << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison T38_UDPTLPacket::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, T38_UDPTLPacket), PInvalidCast); #endif const T38_UDPTLPacket & other = (const T38_UDPTLPacket &)obj; Comparison result; if ((result = m_seq_number.Compare(other.m_seq_number)) != EqualTo) return result; if ((result = m_primary_ifp_packet.Compare(other.m_primary_ifp_packet)) != EqualTo) return result; if ((result = m_error_recovery.Compare(other.m_error_recovery)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX T38_UDPTLPacket::GetDataLength() const { PINDEX length = 0; length += m_seq_number.GetObjectLength(); length += m_primary_ifp_packet.GetObjectLength(); length += m_error_recovery.GetObjectLength(); return length; } PBoolean T38_UDPTLPacket::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_seq_number.Decode(strm)) return FALSE; if (!m_primary_ifp_packet.Decode(strm)) return FALSE; if (!m_error_recovery.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void T38_UDPTLPacket::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_seq_number.Encode(strm); m_primary_ifp_packet.Encode(strm); m_error_recovery.Encode(strm); UnknownExtensionsEncode(strm); } PObject * T38_UDPTLPacket::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(T38_UDPTLPacket::Class()), PInvalidCast); #endif return new T38_UDPTLPacket(*this); } #endif // if ! H323_DISABLE_T38 // End of t38.cxx h323plus/src/mediafmt.cxx0000644000175000017500000006737111634477255014244 0ustar markmark/* * mediafmt.cxx * * Media Format descriptions * * H323Plus Library * * Copyright (c) 1999-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Id: mediafmt.cxx,v 1.15 2011/09/15 22:39:41 shorne Exp $ * */ #include #ifdef __GNUC__ #pragma implementation "mediafmt.h" #endif #include "mediafmt.h" #include "rtp.h" #include "h323pluginmgr.h" #include #ifdef _WIN32 #ifndef _Ios_Fmtflags #define _Ios_Fmtflags ios::fmtflags #endif #endif ///////////////////////////////////////////////////////////////////////////// char OpalPCM16[] = OPAL_PCM16; OPAL_MEDIA_FORMAT_DECLARE(OpalPCM16Format, OpalPCM16, OpalMediaFormat::DefaultAudioSessionID, RTP_DataFrame::L16_Mono, TRUE, // Needs jitter 128000, // bits/sec 16, // bytes/frame 8, // 1 millisecond OpalMediaFormat::AudioTimeUnits, 0) ///////////////////////////////////////////////////////////////////////////// char OpalG711uLaw64k[] = OPAL_G711_ULAW_64K; char OpalG711uLaw64k20[] = OPAL_G711_ULAW_64K_20; OPAL_MEDIA_FORMAT_DECLARE(OpalG711uLaw64kFormat20, OpalG711uLaw64k, OpalMediaFormat::DefaultAudioSessionID, RTP_DataFrame::PCMU, TRUE, // Needs jitter 64000, // bits/sec 8, // bytes/frame 20, // 1 millisecond/frame OpalMediaFormat::AudioTimeUnits, 0) ///////////////////////////////////////////////////////////////////////////// char OpalG711ALaw64k[] = OPAL_G711_ALAW_64K; char OpalG711ALaw64k20[] = OPAL_G711_ALAW_64K_20; OPAL_MEDIA_FORMAT_DECLARE(OpalG711ALaw64kFormat20, OpalG711ALaw64k, OpalMediaFormat::DefaultAudioSessionID, RTP_DataFrame::PCMA, TRUE, // Needs jitter 64000, // bits/sec 8, // bytes/frame 20, // 1 millisecond/frame OpalMediaFormat::AudioTimeUnits, 0) ///////////////////////////////////////////////////////////////////////////// char OpalG728[] = OPAL_G728; OPAL_MEDIA_FORMAT_DECLARE(OpalG728Format, OpalG728, OpalMediaFormat::DefaultAudioSessionID, RTP_DataFrame::G728, TRUE, // Needs jitter 16000,// bits/sec 5, // bytes 20, // 2.5 milliseconds OpalMediaFormat::AudioTimeUnits, 0) ///////////////////////////////////////////////////////////////////////////// char OpalG729[] = OPAL_G729; OPAL_MEDIA_FORMAT_DECLARE(OpalG729Format, OpalG729, OpalMediaFormat::DefaultAudioSessionID, RTP_DataFrame::G729, TRUE, // Needs jitter 8000, // bits/sec 10, // bytes 10, // 10 milliseconds OpalMediaFormat::AudioTimeUnits, 0) ///////////////////////////////////////////////////////////////////////////// char OpalG729A[] = OPAL_G729A; OPAL_MEDIA_FORMAT_DECLARE(OpalG729AFormat, OpalG729A, OpalMediaFormat::DefaultAudioSessionID, RTP_DataFrame::G729, TRUE, // Needs jitter 8000, // bits/sec 10, // bytes 10, // 10 milliseconds OpalMediaFormat::AudioTimeUnits, 0) ///////////////////////////////////////////////////////////////////////////// char OpalG729B[] = OPAL_G729B; OPAL_MEDIA_FORMAT_DECLARE(OpalG729BFormat, OpalG729B, OpalMediaFormat::DefaultAudioSessionID, RTP_DataFrame::G729, TRUE, // Needs jitter 8000, // bits/sec 10, // bytes 10, // 10 milliseconds OpalMediaFormat::AudioTimeUnits, 0) ///////////////////////////////////////////////////////////////////////////// char OpalG729AB[] = OPAL_G729AB; OPAL_MEDIA_FORMAT_DECLARE(OpalG729ABFormat, OpalG729AB, OpalMediaFormat::DefaultAudioSessionID, RTP_DataFrame::G729, TRUE, // Needs jitter 8000, // bits/sec 10, // bytes 10, // 10 milliseconds OpalMediaFormat::AudioTimeUnits, 0) ///////////////////////////////////////////////////////////////////////////// char OpalG7231_6k3[] = OPAL_G7231_6k3; OPAL_MEDIA_FORMAT_DECLARE(OpalG7231_6k3Format, OpalG7231_6k3, OpalMediaFormat::DefaultAudioSessionID, RTP_DataFrame::G7231, TRUE, // Needs jitter 6400, // bits/sec 24, // bytes 30, // 30 milliseconds OpalMediaFormat::AudioTimeUnits, 0) ///////////////////////////////////////////////////////////////////////////// char OpalG7231_5k3[] = OPAL_G7231_5k3; OPAL_MEDIA_FORMAT_DECLARE(OpalG7231_5k3Format, OpalG7231_5k3, OpalMediaFormat::DefaultAudioSessionID, RTP_DataFrame::G7231, TRUE, // Needs jitter 5300, // bits/sec 24, // bytes 30, // 30 milliseconds OpalMediaFormat::AudioTimeUnits, 0) ///////////////////////////////////////////////////////////////////////////// char OpalG7231A_6k3[] = OPAL_G7231A_6k3; OPAL_MEDIA_FORMAT_DECLARE(OpalG7231A_6k3Format, OpalG7231A_6k3, OpalMediaFormat::DefaultAudioSessionID, RTP_DataFrame::G7231, TRUE, // Needs jitter 6400, // bits/sec 24, // bytes 30, // 30 milliseconds OpalMediaFormat::AudioTimeUnits, 0) ///////////////////////////////////////////////////////////////////////////// char OpalG7231A_5k3[] = OPAL_G7231A_5k3; OPAL_MEDIA_FORMAT_DECLARE(OpalG7231A_5k3Format, OpalG7231A_5k3, OpalMediaFormat::DefaultAudioSessionID, RTP_DataFrame::G7231, TRUE, // Needs jitter 5300, // bits/sec 24, // bytes 30, // 30 milliseconds OpalMediaFormat::AudioTimeUnits, 0) ///////////////////////////////////////////////////////////////////////////// char OpalGSM0610[] = OPAL_GSM0610; OPAL_MEDIA_FORMAT_DECLARE(OpalGSM0610Format, OpalGSM0610, OpalMediaFormat::DefaultAudioSessionID, RTP_DataFrame::GSM, TRUE, // Needs jitter 13200, // bits/sec 33, // bytes 20, // 20 milliseconds OpalMediaFormat::AudioTimeUnits, 0) ///////////////////////////////////////////////////////////////////////////// char OpalT120[] = "T.120"; OPAL_MEDIA_FORMAT_DECLARE(OpalT120Format, OpalT120, OpalMediaFormat::DefaultDataSessionID, RTP_DataFrame::IllegalPayloadType, FALSE, // No jitter for data 825000, // 100's bits/sec 0,0,0,0) ///////////////////////////////////////////////////////////////////////////// OpalMediaOption::OpalMediaOption(const char * name, bool readOnly, MergeType merge) : m_name(name), m_readOnly(readOnly), m_merge(merge) { m_name.Replace("=", "_", TRUE); memset(&m_H245Generic, 0, sizeof(m_H245Generic)); } PObject::Comparison OpalMediaOption::Compare(const PObject & obj) const { const OpalMediaOption * otherOption = PDownCast(const OpalMediaOption, &obj); if (otherOption == NULL) return GreaterThan; return m_name.Compare(otherOption->m_name); } bool OpalMediaOption::Merge(const OpalMediaOption & option) { // Local Generic Parameters that are default zero are place holders and you merge // to the value of the other party (option is local, this is remote) if ((option.GetH245Generic().mode != OpalMediaOption::H245GenericInfo::None) && PIsDescendant(&option, OpalMediaOptionUnsigned)) { if (((const OpalMediaOptionUnsigned &)option).GetValue() == 0) return true; } switch (m_merge) { case MinMerge : if (CompareValue(option) == GreaterThan) Assign(option); break; case MaxMerge : if (CompareValue(option) == LessThan) Assign(option); break; case EqualMerge : return CompareValue(option) == EqualTo; case NotEqualMerge : return CompareValue(option) != EqualTo; case AlwaysMerge : Assign(option); break; default : break; } return true; } PString OpalMediaOption::AsString() const { PStringStream strm; PrintOn(strm); return strm; } bool OpalMediaOption::FromString(const PString & value) { PStringStream strm; strm = value; ReadFrom(strm); return !strm.fail(); } OpalMediaOptionEnum::OpalMediaOptionEnum(const char * name, bool readOnly, const char * const * enumerations, PINDEX count, MergeType merge, PINDEX value) : OpalMediaOption(name, readOnly, merge), m_enumerations(count, enumerations), m_value(value) { if (m_value >= count) m_value = count; } PObject * OpalMediaOptionEnum::Clone() const { return new OpalMediaOptionEnum(*this); } void OpalMediaOptionEnum::PrintOn(ostream & strm) const { if (m_value < m_enumerations.GetSize()) strm << m_enumerations[m_value]; else strm << m_value; } void OpalMediaOptionEnum::ReadFrom(istream & strm) { PCaselessString str; while (strm.good()) { char ch; strm.get(ch); str += ch; for (PINDEX i = 0; i < m_enumerations.GetSize(); i++) { if (str == m_enumerations[i]) { m_value = i; return; } } } m_value = m_enumerations.GetSize(); #if PTLIB_VER >= 2110 || defined(__USE_STL__) strm.setstate(ios::badbit); #else strm.setf(ios::badbit , ios::badbit); #endif } PObject::Comparison OpalMediaOptionEnum::CompareValue(const OpalMediaOption & option) const { const OpalMediaOptionEnum * otherOption = PDownCast(const OpalMediaOptionEnum, &option); if (otherOption == NULL) return GreaterThan; if (m_value > otherOption->m_value) return GreaterThan; if (m_value < otherOption->m_value) return LessThan; return EqualTo; } void OpalMediaOptionEnum::Assign(const OpalMediaOption & option) { const OpalMediaOptionEnum * otherOption = PDownCast(const OpalMediaOptionEnum, &option); if (otherOption != NULL) m_value = otherOption->m_value; } void OpalMediaOptionEnum::SetValue(PINDEX value) { if (value < m_enumerations.GetSize()) m_value = value; else m_value = m_enumerations.GetSize(); } OpalMediaOptionString::OpalMediaOptionString(const char * name, bool readOnly) : OpalMediaOption(name, readOnly, MinMerge) { } OpalMediaOptionString::OpalMediaOptionString(const char * name, bool readOnly, const PString & value) : OpalMediaOption(name, readOnly, MinMerge), m_value(value) { } PObject * OpalMediaOptionString::Clone() const { OpalMediaOptionString * newObj = new OpalMediaOptionString(*this); newObj->m_value.MakeUnique(); return newObj; } void OpalMediaOptionString::PrintOn(ostream & strm) const { strm << m_value.ToLiteral(); } void OpalMediaOptionString::ReadFrom(istream & strm) { char c; strm >> c; // Skip whitespace if (c != '"') { strm.putback(c); strm >> m_value; // If no " then read to end of line. } else { // If there was a '"' then assume it is a C style literal string with \ escapes etc PINDEX count = 0; PStringStream str; str << '"'; while (strm.get(c).good()) { str << c; // Keep reading till get a '"' that is not preceded by a '\' that is not itself preceded by a '\' if (c == '"' && count > 0 && (str[count] != '\\' || !(count > 1 && str[count-1] == '\\'))) break; count++; } m_value = PString(PString::Literal, (const char *)str); } } PObject::Comparison OpalMediaOptionString::CompareValue(const OpalMediaOption & option) const { const OpalMediaOptionString * otherOption = PDownCast(const OpalMediaOptionString, &option); if (otherOption == NULL) return GreaterThan; return m_value.Compare(otherOption->m_value); } void OpalMediaOptionString::Assign(const OpalMediaOption & option) { const OpalMediaOptionString * otherOption = PDownCast(const OpalMediaOptionString, &option); if (otherOption != NULL) { m_value = otherOption->m_value; m_value.MakeUnique(); } } void OpalMediaOptionString::SetValue(const PString & value) { m_value = value; m_value.MakeUnique(); } OpalMediaOptionOctets::OpalMediaOptionOctets(const char * name, bool readOnly, bool base64) : OpalMediaOption(name, readOnly, NoMerge) , m_base64(base64) { } OpalMediaOptionOctets::OpalMediaOptionOctets(const char * name, bool readOnly, bool base64, const PBYTEArray & value) : OpalMediaOption(name, readOnly, NoMerge) , m_value(value) , m_base64(base64) { } OpalMediaOptionOctets::OpalMediaOptionOctets(const char * name, bool readOnly, bool base64, const BYTE * data, PINDEX length) : OpalMediaOption(name, readOnly, NoMerge) , m_value(data, length) , m_base64(base64) { } PObject * OpalMediaOptionOctets::Clone() const { OpalMediaOptionOctets * newObj = new OpalMediaOptionOctets(*this); newObj->m_value.MakeUnique(); return newObj; } void OpalMediaOptionOctets::PrintOn(ostream & strm) const { if (m_base64) strm << PBase64::Encode(m_value); else { _Ios_Fmtflags flags = strm.flags(); char fill = strm.fill(); strm << hex << setfill('0'); for (PINDEX i = 0; i < m_value.GetSize(); i++) strm << setw(2) << (unsigned)m_value[i]; strm.fill(fill); strm.flags(flags); } } void OpalMediaOptionOctets::ReadFrom(istream & strm) { if (m_base64) { PString str; strm >> str; PBase64::Decode(str, m_value); } else { char pair[3]; pair[2] = '\0'; PINDEX count = 0; while (isxdigit(strm.peek())) { pair[0] = (char)strm.get(); if (!isxdigit(strm.peek())) { strm.putback(pair[0]); break; } pair[1] = (char)strm.get(); if (!m_value.SetMinSize((count+1+99)%100)) break; m_value[count++] = (BYTE)strtoul(pair, NULL, 16); } m_value.SetSize(count); } } PObject::Comparison OpalMediaOptionOctets::CompareValue(const OpalMediaOption & option) const { const OpalMediaOptionOctets * otherOption = PDownCast(const OpalMediaOptionOctets, &option); if (otherOption == NULL) return GreaterThan; return m_value.Compare(otherOption->m_value); } void OpalMediaOptionOctets::Assign(const OpalMediaOption & option) { const OpalMediaOptionOctets * otherOption = PDownCast(const OpalMediaOptionOctets, &option); if (otherOption != NULL) { m_value = otherOption->m_value; m_value.MakeUnique(); } } void OpalMediaOptionOctets::SetValue(const PBYTEArray & value) { m_value = value; m_value.MakeUnique(); } void OpalMediaOptionOctets::SetValue(const BYTE * data, PINDEX length) { m_value = PBYTEArray(data, length); } ///////////////////////////////////////////////////////////////////////////// OpalMediaFormat::OpalMediaFormat() { rtpPayloadType = RTP_DataFrame::IllegalPayloadType; needsJitter = FALSE; bandwidth = 0; frameSize = 0; frameTime = 0; timeUnits = 0; codecBaseTime = 0; defaultSessionID = NonRTPSessionID; } OpalMediaFormat::OpalMediaFormat(const char * search, PBoolean exact) { rtpPayloadType = RTP_DataFrame::IllegalPayloadType; needsJitter = FALSE; bandwidth = 0; frameSize = 0; frameTime = 0; timeUnits = 0; codecBaseTime = 0; defaultSessionID = NonRTPSessionID; // look for the media type in the factory. // Don't make a copy of the list - lock the list and use the raw data if (exact) { OpalMediaFormat * registeredFormat = OpalMediaFormatFactory::CreateInstance(search); if (registeredFormat != NULL) *this = *registeredFormat; } else { PWaitAndSignal m(OpalMediaFormatFactory::GetMutex()); OpalMediaFormatFactory::KeyMap_T & keyMap = OpalMediaFormatFactory::GetKeyMap(); OpalMediaFormatFactory::KeyMap_T::const_iterator r; for (r = keyMap.begin(); r != keyMap.end(); ++r) { if (r->first.find(search) != std::string::npos) { *this = *OpalMediaFormatFactory::CreateInstance(r->first); break; } } } } OpalMediaFormat::OpalMediaFormat(const char * fullName, unsigned dsid, RTP_DataFrame::PayloadTypes pt, PBoolean nj, unsigned bw, PINDEX fs, unsigned ft, unsigned tu, time_t ts) : PCaselessString(fullName) { rtpPayloadType = pt; defaultSessionID = dsid; needsJitter = nj; bandwidth = bw; frameSize = fs; frameTime = ft; timeUnits = tu; codecBaseTime = ts; // assume non-dynamic payload types are correct and do not need deconflicting if (rtpPayloadType < RTP_DataFrame::DynamicBase || rtpPayloadType == RTP_DataFrame::IllegalPayloadType) return; // find the next unused dynamic number, and find anything with the new // rtp payload type if it is explicitly required PWaitAndSignal m(OpalMediaFormatFactory::GetMutex()); OpalMediaFormatFactory::KeyMap_T & keyMap = OpalMediaFormatFactory::GetKeyMap(); OpalMediaFormat * match = NULL; RTP_DataFrame::PayloadTypes nextUnused = RTP_DataFrame::DynamicBase; OpalMediaFormatFactory::KeyMap_T::iterator r; do { for (r = keyMap.begin(); r != keyMap.end(); ++r) { if (r->first == fullName) continue; OpalMediaFormat & fmt = *OpalMediaFormatFactory::CreateInstance(r->first); if (fmt.GetPayloadType() == nextUnused) { nextUnused = (RTP_DataFrame::PayloadTypes)(nextUnused + 1); break; // restart the search } if (fmt.GetPayloadType() == rtpPayloadType) match = &fmt; } } while (r != keyMap.end()); // If we found a match to the payload type, then it needs to be deconflicted // If the new format is just requesting any dynamic payload number, then give it the next unused one // If it is requesting a specific code (like RFC 2833) then renumber the old format. This could be dangerous // as media formats could be created when there is a session in use with the old media format and payload type // For this reason, any media formats that require specific dynamic codes should be created before any calls are made if (match != NULL) { if (rtpPayloadType == RTP_DataFrame::DynamicBase) rtpPayloadType = nextUnused; else match->rtpPayloadType = nextUnused; } } OpalMediaFormat & OpalMediaFormat::operator=(const OpalMediaFormat &format) { PWaitAndSignal m1(media_format_mutex); PWaitAndSignal m2(format.media_format_mutex); *static_cast(this) = *static_cast(&format); options = format.options; options.MakeUnique(); rtpPayloadType = format.rtpPayloadType; defaultSessionID = format.defaultSessionID; needsJitter = format.NeedsJitterBuffer(); bandwidth = format.GetBandwidth(); frameSize = format.GetFrameSize(); frameTime = format.GetFrameTime(); timeUnits = format.GetTimeUnits(); return *this; } void OpalMediaFormat::GetRegisteredMediaFormats(OpalMediaFormat::List & list) { list.DisallowDeleteObjects(); PWaitAndSignal m(OpalMediaFormatFactory::GetMutex()); OpalMediaFormatFactory::KeyMap_T & keyMap = OpalMediaFormatFactory::GetKeyMap(); OpalMediaFormatFactory::KeyMap_T::const_iterator r; for (r = keyMap.begin(); r != keyMap.end(); ++r) list.Append(OpalMediaFormatFactory::CreateInstance(r->first)); } OpalMediaFormat::List OpalMediaFormat::GetRegisteredMediaFormats() { OpalMediaFormat::List list; GetRegisteredMediaFormats(list); return list; } bool OpalMediaFormat::Merge(const OpalMediaFormat & mediaFormat) { PWaitAndSignal m1(media_format_mutex); PWaitAndSignal m2(mediaFormat.media_format_mutex); for (PINDEX i = 0; i < options.GetSize(); i++) { OpalMediaOption * option = mediaFormat.FindOption(options[i].GetName()); if (option != NULL && !options[i].Merge(*option)) return false; } return true; } bool OpalMediaFormat::GetOptionValue(const PString & name, PString & value) const { PWaitAndSignal m(media_format_mutex); OpalMediaOption * option = FindOption(name); if (option == NULL) return false; value = option->AsString(); return true; } bool OpalMediaFormat::SetOptionValue(const PString & name, const PString & value) { PWaitAndSignal m(media_format_mutex); options.MakeUnique(); OpalMediaOption * option = FindOption(name); if (option == NULL) return false; return option->FromString(value); } bool OpalMediaFormat::GetOptionBoolean(const PString & name, bool dflt) const { PWaitAndSignal m(media_format_mutex); OpalMediaOption * option = FindOption(name); if (option == NULL) return dflt; return PDownCast(OpalMediaOptionBoolean, option)->GetValue(); } bool OpalMediaFormat::SetOptionBoolean(const PString & name, bool value) { PWaitAndSignal m(media_format_mutex); options.MakeUnique(); OpalMediaOption * option = FindOption(name); if (option == NULL) return false; PDownCast(OpalMediaOptionBoolean, option)->SetValue(value); return true; } int OpalMediaFormat::GetOptionInteger(const PString & name, int dflt) const { PWaitAndSignal m(media_format_mutex); OpalMediaOption * option = FindOption(name); if (option == NULL) return dflt; OpalMediaOptionUnsigned * optUnsigned = dynamic_cast(option); if (optUnsigned != NULL) return optUnsigned->GetValue(); OpalMediaOptionInteger * optInteger = dynamic_cast(option); if (optInteger != NULL) return optInteger->GetValue(); return 0; } bool OpalMediaFormat::SetOptionInteger(const PString & name, int value) { PWaitAndSignal m(media_format_mutex); options.MakeUnique(); OpalMediaOption * option = FindOption(name); if (option == NULL) return false; OpalMediaOptionUnsigned * optUnsigned = dynamic_cast(option); if (optUnsigned != NULL) { optUnsigned->SetValue(value); return true; } OpalMediaOptionInteger * optInteger = dynamic_cast(option); if (optInteger != NULL) { optInteger->SetValue(value); return true; } return false; } double OpalMediaFormat::GetOptionReal(const PString & name, double dflt) const { PWaitAndSignal m(media_format_mutex); OpalMediaOption * option = FindOption(name); if (option == NULL) return dflt; return PDownCast(OpalMediaOptionReal, option)->GetValue(); } bool OpalMediaFormat::SetOptionReal(const PString & name, double value) { PWaitAndSignal m(media_format_mutex); options.MakeUnique(); OpalMediaOption * option = FindOption(name); if (option == NULL) return false; PDownCast(OpalMediaOptionReal, option)->SetValue(value); return true; } PINDEX OpalMediaFormat::GetOptionEnum(const PString & name, PINDEX dflt) const { PWaitAndSignal m(media_format_mutex); OpalMediaOption * option = FindOption(name); if (option == NULL) return dflt; return PDownCast(OpalMediaOptionEnum, option)->GetValue(); } bool OpalMediaFormat::SetOptionEnum(const PString & name, PINDEX value) { PWaitAndSignal m(media_format_mutex); options.MakeUnique(); OpalMediaOption * option = FindOption(name); if (option == NULL) return false; PDownCast(OpalMediaOptionEnum, option)->SetValue(value); return true; } PString OpalMediaFormat::GetOptionString(const PString & name, const PString & dflt) const { PWaitAndSignal m(media_format_mutex); OpalMediaOption * option = FindOption(name); if (option == NULL) return dflt; return PDownCast(OpalMediaOptionString, option)->GetValue(); } bool OpalMediaFormat::SetOptionString(const PString & name, const PString & value) { PWaitAndSignal m(media_format_mutex); options.MakeUnique(); OpalMediaOption * option = FindOption(name); if (option == NULL) return false; PDownCast(OpalMediaOptionString, option)->SetValue(value); return true; } bool OpalMediaFormat::AddOption(OpalMediaOption * option, PBoolean overwrite) { PWaitAndSignal m(media_format_mutex); if (PAssertNULL(option) == NULL) return false; PINDEX index = options.GetValuesIndex(*option); if (index != P_MAX_INDEX) { if (!overwrite) { delete option; return false; } options.RemoveAt(index); } options.MakeUnique(); options.Append(option); return true; } OpalMediaOption * OpalMediaFormat::FindOption(const PString & name) const { PWaitAndSignal m(media_format_mutex); OpalMediaOptionString search(name, false); PINDEX index = options.GetValuesIndex(search); if (index == P_MAX_INDEX) return NULL; return &options[index]; } bool OpalMediaFormat::SetRegisteredMediaFormat(const OpalMediaFormat & mediaFormat) { PWaitAndSignal mutex(OpalMediaFormatFactory::GetMutex()); OpalMediaFormat * registeredFormat = OpalMediaFormatFactory::CreateInstance(mediaFormat); if (registeredFormat == NULL) return false; *registeredFormat = mediaFormat; return true; } #if PTRACING void OpalMediaFormat::DebugOptionList(const OpalMediaFormat & fmt) { PStringStream traceStream; traceStream << " " << fmt.GetOptionCount() << " options found:\n"; for (PINDEX i = 0; i < fmt.GetOptionCount(); i++) { const OpalMediaOption & option = fmt.GetOption(i); traceStream << " " << option.GetName() << " = " << option.AsString() << '\n'; } #if PTLIB_VER < 2110 PTRACE(6,traceStream); #else PTRACE2(6,NULL,traceStream); #endif } #endif #ifdef H323_VIDEO const char * const OpalVideoFormat::FrameWidthOption = "Frame Width"; const char * const OpalVideoFormat::FrameHeightOption = "Frame Height"; const char * const OpalVideoFormat::EncodingQualityOption = "Encoding Quality"; const char * const OpalVideoFormat::TargetBitRateOption = "Target Bit Rate"; const char * const OpalVideoFormat::DynamicVideoQualityOption = "Dynamic Video Quality"; const char * const OpalVideoFormat::AdaptivePacketDelayOption = "Adaptive Packet Delay"; const char * const OpalVideoFormat::NeedsJitterOption = "Needs Jitter"; const char * const OpalVideoFormat::MaxBitRateOption = "Max Bit Rate"; const char * const OpalVideoFormat::MaxFrameSizeOption = "Max Frame Size"; const char * const OpalVideoFormat::FrameTimeOption = "Frame Time"; const char * const OpalVideoFormat::ClockRateOption = "Clock Rate"; OpalVideoFormat::OpalVideoFormat(const char * fullName, RTP_DataFrame::PayloadTypes rtpPayloadType, unsigned /*frameWidth*/, unsigned /*frameHeight*/, unsigned frameRate, unsigned bitRate, time_t timeStamp) : OpalMediaFormat(fullName, OpalMediaFormat::DefaultVideoSessionID, rtpPayloadType, FALSE, bitRate, 0, OpalMediaFormat::VideoTimeUnits/frameRate, OpalMediaFormat::VideoTimeUnits, timeStamp) { } PObject * OpalVideoFormat::Clone() const { return new OpalVideoFormat(*this); } bool OpalVideoFormat::Merge(const OpalMediaFormat & mediaFormat) { return OpalMediaFormat::Merge(mediaFormat); } #endif // H323_VIDEO // End of File /////////////////////////////////////////////////////////////// h323plus/src/h235/0000755000175000017500000000000011647456720012373 5ustar markmarkh323plus/src/h235/h235caps.cxx0000644000175000017500000007067511647456720014466 0ustar markmark/* * h235caps.cxx * * H.235 Capability wrapper class. * * h323plus library * * Copyright (c) 2011 Spranto Australia Pty Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * * Contributor(s): ______________________________________. * * $Id: h235caps.cxx,v 1.9 2011/10/19 05:19:12 shorne Exp $ * * */ #include #include "openh323buildopts.h" #ifdef H323_H235 #include "h235/h235caps.h" #include "h235/h235chan.h" #include "h323.h" ///////////////////////////////////////////////////////////////////////////// H235SecurityCapability::H235SecurityCapability(unsigned capabilityNo) : m_capNumber(capabilityNo) { } PObject * H235SecurityCapability::Clone() const { return new H235SecurityCapability(*this); } H323Capability::MainTypes H235SecurityCapability::GetMainType() const { return e_Security; } unsigned H235SecurityCapability::GetSubType() const { return m_capNumber; } PString H235SecurityCapability::GetFormatName() const { PStringStream name; name << "SecCapability [" << m_capNumber << "]"; return name; } H323Channel * H235SecurityCapability::CreateChannel(H323Connection &, H323Channel::Directions, unsigned, const H245_H2250LogicalChannelParameters *) const { PTRACE(1, "Codec\tCannot create Security channel"); return NULL; } H323Codec * H235SecurityCapability::CreateCodec(H323Codec::Direction) const { PTRACE(1, "Codec\tCannot create security codec"); return NULL; } PINDEX H235SecurityCapability::GetAlgorithmCount() { return m_capList.GetSize(); } PString H235SecurityCapability::GetAlgorithm() const { if (m_capList.GetSize() > 0) return m_capList[0]; else return PString(); } PBoolean H235SecurityCapability::OnSendingPDU(H245_EncryptionAuthenticationAndIntegrity & encAuth, H323Capability::CommandType type) const { if (m_capList.GetSize() == 0) return false; encAuth.IncludeOptionalField(H245_EncryptionAuthenticationAndIntegrity::e_encryptionCapability); H245_EncryptionCapability & enc = encAuth.m_encryptionCapability; if (type == e_OLC) { // only the 1st (preferred) Algorithm. enc.SetSize(1); H245_MediaEncryptionAlgorithm & alg = enc[0]; alg.SetTag(H245_MediaEncryptionAlgorithm::e_algorithm); PASN_ObjectId & id = alg; id.SetValue(m_capList[0]); return true; } else if (type == e_TCS) { // all the supported Algorithms enc.SetSize(m_capList.GetSize()); for (PINDEX i=0; i < m_capList.GetSize(); ++i) { H245_MediaEncryptionAlgorithm & alg = enc[i]; alg.SetTag(H245_MediaEncryptionAlgorithm::e_algorithm); PASN_ObjectId & id = alg; id.SetValue(m_capList[i]); } return true; } else return false; } PBoolean H235SecurityCapability::OnSendingPDU(H245_Capability & pdu) const { if (m_capList.GetSize() == 0) return false; pdu.SetTag(H245_Capability::e_h235SecurityCapability); H245_H235SecurityCapability & sec = pdu; if (!OnSendingPDU(sec.m_encryptionAuthenticationAndIntegrity)) return false; H245_CapabilityTableEntryNumber & capNo = sec.m_mediaCapability; capNo = m_capNumber; return TRUE; } PBoolean H235SecurityCapability::OnSendingPDU(H245_DataType &) const { PTRACE(1, "Codec\tCannot have Security Capability in DataType"); return FALSE; } PBoolean H235SecurityCapability::OnSendingPDU(H245_ModeElement &) const { PTRACE(1, "Codec\tCannot have Security Capability in ModeElement"); return FALSE; } PBoolean H235SecurityCapability::OnReceivedPDU(const H245_Capability & pdu) { if (pdu.GetTag() != H245_Capability::e_h235SecurityCapability) return false; const H245_H235SecurityCapability & sec = pdu; if (!OnReceivedPDU(sec.m_encryptionAuthenticationAndIntegrity)) return false; const H245_CapabilityTableEntryNumber & capNo = sec.m_mediaCapability; PRemoveConst(H235SecurityCapability, this)->SetAssociatedCapability(capNo); return true; } PBoolean H235SecurityCapability::OnReceivedPDU(const H245_DataType &, PBoolean) { PTRACE(1, "Codec\tCannot have Security Capability in DataType"); return FALSE; } void H235SecurityCapability::SetAssociatedCapability(unsigned capNumber) { m_capNumber = capNumber; } PBoolean H235SecurityCapability::MergeAlgorithms(const PStringArray & remote) { PStringArray toKeep; for (PINDEX i=0; i< m_capList.GetSize(); ++i) { for (PINDEX j=0; j< remote.GetSize(); ++j) { if (m_capList[i] == remote[j]) { toKeep.AppendString(m_capList[i]); break; } } } m_capList = toKeep; return (m_capList.GetSize() > 0); } PBoolean H235SecurityCapability::OnReceivedPDU(const H245_EncryptionAuthenticationAndIntegrity & encAuth, H323Capability::CommandType type) const { if (type == e_OLC) return true; if (!encAuth.HasOptionalField(H245_EncryptionAuthenticationAndIntegrity::e_encryptionCapability)) return false; PStringArray other; const H245_EncryptionCapability & enc = encAuth.m_encryptionCapability; for (PINDEX i=0; i < enc.GetSize(); ++i) { const H245_MediaEncryptionAlgorithm & alg = enc[i]; if (alg.GetTag() == H245_MediaEncryptionAlgorithm::e_algorithm) { const PASN_ObjectId & id = alg; other.AppendString(id.AsString()); } } return PRemoveConst(H235SecurityCapability, this)->MergeAlgorithms(other); } unsigned H235SecurityCapability::GetDefaultSessionID() const { return OpalMediaFormat::NonRTPSessionID; } PBoolean H235SecurityCapability::IsUsable(const H323Connection & connection) const { const H235Capabilities & caps = (const H235Capabilities &)connection.GetLocalCapabilities(); return caps.GetAlgorithms(m_capList); } ///////////////////////////////////////////////////////////////////////////// H323SecureRealTimeCapability::H323SecureRealTimeCapability(H323Capability & childCapability, H323Capabilities * capabilities, unsigned secNo) : ChildCapability(*(H323Capability *)childCapability.Clone()), m_active(false), m_capabilities(capabilities), m_secNo(secNo), nrtpqos(NULL) { } H323SecureRealTimeCapability::H323SecureRealTimeCapability(RTP_QOS * _rtpqos,H323Capability & childCapability) : ChildCapability(*(H323Capability *)childCapability.Clone()), m_active(false), m_capabilities(NULL), m_secNo(0), nrtpqos(_rtpqos) { } H323SecureRealTimeCapability::~H323SecureRealTimeCapability() { } void H323SecureRealTimeCapability::AttachQoS(RTP_QOS * _rtpqos) { delete nrtpqos; nrtpqos = _rtpqos; } void H323SecureRealTimeCapability::SetAssociatedCapability(unsigned _secNo) { m_secNo = _secNo; } H323Channel * H323SecureRealTimeCapability::CreateChannel(H323Connection & connection, H323Channel::Directions dir, unsigned sessionID, const H245_H2250LogicalChannelParameters * param) const { RTP_Session * session = NULL; // Session if (param != NULL) { session = connection.UseSession(param->m_sessionID, param->m_mediaControlChannel, dir, nrtpqos); } else { // Make a fake transport address from the connection so gets initialised with // the transport type (IP, IPX, multicast etc). H245_TransportAddress addr; connection.GetControlChannel().SetUpTransportPDU(addr, H323Transport::UseLocalTSAP); session = connection.UseSession(sessionID, addr, dir, nrtpqos); } if (!session) return NULL; return new H323SecureRTPChannel(connection, *this, dir, *session); } unsigned H323SecureRealTimeCapability::GetCapabilityNumber() const { return ChildCapability.GetCapabilityNumber(); }; void H323SecureRealTimeCapability::SetCapabilityNumber(unsigned num) { ChildCapability.SetCapabilityNumber(num); } void H323SecureRealTimeCapability::SetCapabilityList(H323Capabilities * capabilities) { m_capabilities = capabilities; } void H323SecureRealTimeCapability::SetActive(PBoolean active) { m_active = active; } PBoolean H323SecureRealTimeCapability::IsActive() const { return m_active; } void H323SecureRealTimeCapability::SetAlgorithm(const PString & alg) { m_algorithm = alg; } PString H323SecureRealTimeCapability::GetAlgorithm() const { return m_algorithm; } ///////////////////////////////////////////////////////////////////////////// H323SecureCapability::H323SecureCapability(H323Capability & childCapability, H235ChType Ch, H323Capabilities * capabilities, unsigned secNo ) : H323SecureRealTimeCapability(childCapability, capabilities, secNo) { chtype = Ch; } H323Capability::MainTypes H323SecureCapability::GetMainType() const { return ChildCapability.GetMainType(); } PObject * H323SecureCapability::Clone() const { PTRACE(4, "H235RTP\tCloning Capability: " << GetFormatName()); PBoolean IsClone = FALSE; H235ChType ch = H235ChNew; switch (chtype) { case H235ChNew: ch = H235ChClone; IsClone = TRUE; break; case H235ChClone: ch = H235Channel; break; case H235Channel: ch = H235Channel; break; } return new H323SecureCapability(*(H323Capability *)ChildCapability.Clone(),ch, m_capabilities, m_secNo); } PBoolean H323SecureCapability::IsMatch(const PASN_Choice & subTypePDU) const { if (PIsDescendant(&subTypePDU, H245_AudioCapability) && ChildCapability.GetMainType() == H323Capability::e_Audio) { const H245_AudioCapability & audio = (const H245_AudioCapability &)subTypePDU; return ChildCapability.IsMatch(audio); } if (PIsDescendant(&subTypePDU, H245_VideoCapability) && ChildCapability.GetMainType() == H323Capability::e_Video) { const H245_VideoCapability & video = (const H245_VideoCapability &)subTypePDU; return ChildCapability.IsMatch(video); } if (PIsDescendant(&subTypePDU, H245_DataApplicationCapability_application) && ChildCapability.GetMainType() == H323Capability::e_Data) { const H245_DataApplicationCapability_application & data = (const H245_DataApplicationCapability_application &)subTypePDU; return ChildCapability.IsMatch(data); } if (PIsDescendant(&subTypePDU, H245_H235Media_mediaType)) { const H245_H235Media_mediaType & data = (const H245_H235Media_mediaType &)subTypePDU; return IsSubMatch(data); } return false; } PBoolean H323SecureCapability::IsSubMatch(const PASN_Choice & subTypePDU) const { const H245_H235Media_mediaType & dataType = (const H245_H235Media_mediaType &)subTypePDU; if (dataType.GetTag() == H245_H235Media_mediaType::e_audioData && ChildCapability.GetMainType() == H323Capability::e_Audio) { const H245_AudioCapability & audio = dataType; return ChildCapability.IsMatch(audio); } if (dataType.GetTag() == H245_H235Media_mediaType::e_videoData && ChildCapability.GetMainType() == H323Capability::e_Video) { const H245_VideoCapability & video = dataType; return ChildCapability.IsMatch(video); } if (dataType.GetTag() == H245_H235Media_mediaType::e_data && ChildCapability.GetMainType() == H323Capability::e_Data) { const H245_DataApplicationCapability & data = dataType; return ChildCapability.IsMatch(data.m_application); } return false; } PObject::Comparison H323SecureCapability::Compare(const PObject & obj) const { if (!PIsDescendant(&obj, H323SecureCapability)) return LessThan; Comparison result = H323Capability::Compare(obj); if (result != EqualTo) return result; const H323SecureCapability & other = (const H323SecureCapability &)obj; return ChildCapability.Compare(other.GetChildCapability()); } unsigned H323SecureCapability::GetDefaultSessionID() const { return ChildCapability.GetDefaultSessionID(); } //////////////////////////////////////////////////////////////////////// // PDU Sending PBoolean H323SecureCapability::OnSendingPDU(H245_ModeElement & mode) const { switch (ChildCapability.GetMainType()) { case H323Capability::e_Audio: return ((H323AudioCapability &)ChildCapability).OnSendingPDU(mode); case H323Capability::e_Video: return ((H323VideoCapability &)ChildCapability).OnSendingPDU(mode); case H323Capability::e_Data: default: return false; } } PBoolean H323SecureCapability::OnSendingPDU(H245_DataType & dataType) const { // find the matching H235SecurityCapability to get the agreed algorithms // if not found or no matching algorithm then assume no encryption. H235SecurityCapability * secCap = NULL; if (m_capabilities) { secCap = (H235SecurityCapability *)m_capabilities->FindCapability(m_secNo); if (secCap && secCap->GetAlgorithmCount() > 0) (PRemoveConst(H323SecureCapability,this))->SetActive(true); (PRemoveConst(H323SecureCapability,this))->SetAlgorithm(secCap->GetAlgorithm()); } if (!IsActive()) { unsigned txFramesInPacket =0; switch (ChildCapability.GetMainType()) { case H323Capability::e_Audio: dataType.SetTag(H245_DataType::e_audioData); txFramesInPacket = ((H323AudioCapability &)ChildCapability).GetTxFramesInPacket(); return ((H323AudioCapability &)ChildCapability).OnSendingPDU((H245_AudioCapability &)dataType, txFramesInPacket, e_OLC); case H323Capability::e_Video: dataType.SetTag(H245_DataType::e_videoData); return ((H323VideoCapability &)ChildCapability).OnSendingPDU((H245_VideoCapability &)dataType, e_OLC); case H323Capability::e_Data: return ((H323DataCapability &)ChildCapability).OnSendingPDU(dataType, e_OLC); default: break; } return false; } dataType.SetTag(H245_DataType::e_h235Media); H245_H235Media & h235Media = dataType; // Load the algorithm secCap->OnSendingPDU(h235Media.m_encryptionAuthenticationAndIntegrity, e_OLC); H245_H235Media_mediaType & cType = h235Media.m_mediaType; unsigned txFramesInPacket =0; switch (ChildCapability.GetMainType()) { case H323Capability::e_Audio: cType.SetTag(H245_H235Media_mediaType::e_audioData); txFramesInPacket = ((H323AudioCapability &)ChildCapability).GetTxFramesInPacket(); return ((H323AudioCapability &)ChildCapability).OnSendingPDU((H245_AudioCapability &)cType, txFramesInPacket, e_OLC); case H323Capability::e_Video: cType.SetTag(H245_H235Media_mediaType::e_videoData); return ((H323VideoCapability &)ChildCapability).OnSendingPDU((H245_VideoCapability &)cType, e_OLC); case H323Capability::e_Data: cType.SetTag(H245_H235Media_mediaType::e_data); return ((H323DataCapability &)ChildCapability).OnSendingPDU((H245_DataApplicationCapability &)cType, e_OLC); default: break; } return false; } PBoolean H323SecureCapability::OnReceivedPDU(const H245_DataType & dataType,PBoolean receiver) { if (dataType.GetTag() != H245_DataType::e_h235Media) return ChildCapability.OnReceivedPDU(dataType, receiver); const H245_H235Media & h235Media = dataType; if (m_capabilities) { H235SecurityCapability * secCap = (H235SecurityCapability *)m_capabilities->FindCapability(m_secNo); if (!secCap || !secCap->OnReceivedPDU(h235Media.m_encryptionAuthenticationAndIntegrity, e_OLC)) return false; if (secCap && secCap->GetAlgorithmCount() > 0) SetActive(true); } const H245_H235Media_mediaType & mediaType = h235Media.m_mediaType; unsigned packetSize = 0; switch (ChildCapability.GetMainType()) { case H323Capability::e_Audio: if (mediaType.GetTag() == H245_H235Media_mediaType::e_audioData) { packetSize = (receiver) ? ChildCapability.GetRxFramesInPacket() : ChildCapability.GetTxFramesInPacket(); return ((H323AudioCapability &)ChildCapability).OnReceivedPDU((const H245_AudioCapability &)mediaType, packetSize, e_OLC); } case H323Capability::e_Video: if (mediaType.GetTag() == H245_H235Media_mediaType::e_videoData) return ((H323VideoCapability &)ChildCapability).OnReceivedPDU((const H245_VideoCapability &)mediaType, e_OLC); case H323Capability::e_Data: if (mediaType.GetTag() == H245_H235Media_mediaType::e_data) return ((H323DataCapability &)ChildCapability).OnReceivedPDU((const H245_DataApplicationCapability &)mediaType, e_OLC); default: break; } return false; } ////////////////////////////////////////////////////////////////////////////// // Child Capability Intercept PBoolean H323SecureCapability::OnSendingPDU(H245_Capability & pdu) const { switch (ChildCapability.GetMainType()) { case H323Capability::e_Audio: return ((H323AudioCapability &)ChildCapability).OnSendingPDU(pdu); case H323Capability::e_Video: return ((H323VideoCapability &)ChildCapability).OnSendingPDU(pdu); case H323Capability::e_Data: case H323Capability::e_UserInput: case H323Capability::e_ExtendVideo: default: return false; } } PBoolean H323SecureCapability::OnReceivedPDU(const H245_Capability & pdu) { switch (ChildCapability.GetMainType()) { case H323Capability::e_Audio: return ((H323AudioCapability &)ChildCapability).OnReceivedPDU(pdu); case H323Capability::e_Video: return ((H323VideoCapability &)ChildCapability).OnReceivedPDU(pdu); case H323Capability::e_Data: case H323Capability::e_UserInput: case H323Capability::e_ExtendVideo: default: return false; } } PString H323SecureCapability::GetFormatName() const { return ChildCapability.GetFormatName() + (m_active ? " #" : ""); } unsigned H323SecureCapability::GetSubType() const { return ChildCapability.GetSubType(); } H323Codec * H323SecureCapability::CreateCodec(H323Codec::Direction direction) const { return ChildCapability.CreateCodec(direction); } ///////////////////////////////////////////////////////////////////////////// H235Capabilities::H235Capabilities() : m_context(NULL), m_DHkey(NULL), m_h245Master(false) { m_algorithms.SetSize(0); } H235Capabilities::H235Capabilities(const H323Capabilities & original) : m_context(NULL), m_DHkey(NULL), m_h245Master(false) { m_algorithms.SetSize(0); const H323CapabilitiesSet rset = original.GetSet(); for (PINDEX i = 0; i < original.GetSize(); i++) { unsigned capabilityNumber = original[i].GetCapabilityNumber(); PINDEX outer=0,middle=0,inner=0; for (outer = 0; outer < rset.GetSize(); outer++) { for (middle = 0; middle < rset[outer].GetSize(); middle++) { for (inner = 0; inner < rset[outer][middle].GetSize(); inner++) { if (rset[outer][middle][inner].GetCapabilityNumber() == capabilityNumber) { WrapCapability(outer, middle, original[i]); break; } } if (rset[outer][middle].GetSize() == 0) { WrapCapability(outer, middle, original[i]); break; } } if (rset[outer].GetSize() == 0) { WrapCapability(outer, middle, original[i]); break; } } } } H235Capabilities::H235Capabilities(const H323Connection & connection, const H245_TerminalCapabilitySet & pdu) : H323Capabilities(connection, pdu), m_context(NULL), m_DHkey(NULL), m_h245Master(false) { const H235Capabilities & localCapabilities = (const H235Capabilities &)connection.GetLocalCapabilities(); PRemoveConst(H235Capabilities,&localCapabilities)->GetDHKeyPair(m_algorithms, m_DHkey, m_h245Master); } static unsigned SetCapabilityNumber(const H323CapabilitiesList & table, unsigned newCapabilityNumber) { // Assign a unique number to the codec, check if the user wants a specific // value and start with that. if (newCapabilityNumber == 0) newCapabilityNumber = 1; PINDEX i = 0; while (i < table.GetSize()) { if (table[i].GetCapabilityNumber() != newCapabilityNumber) i++; else { // If it already in use, increment it newCapabilityNumber++; i = 0; } } return newCapabilityNumber; } void H235Capabilities::AddSecure(PINDEX descriptorNum, PINDEX simultaneous, H323Capability * capability) { if (capability == NULL) return; if (!PIsDescendant(capability,H323SecureCapability) && !PIsDescendant(capability,H235SecurityCapability)) return; // See if already added, confuses things if you add the same instance twice if (table.GetObjectsIndex(capability) != P_MAX_INDEX) return; // Create the secure capability wrapper unsigned capNumber = SetCapabilityNumber(table, capability->GetCapabilityNumber()); capability->SetCapabilityNumber(capNumber); ((H323SecureCapability *)capability)->SetCapabilityList(this); SetCapability(descriptorNum, simultaneous, capability); // Create the security capability unsigned secNumber = 100+capNumber; H235SecurityCapability * secCap = new H235SecurityCapability(capNumber); secCap->SetCapabilityNumber(secNumber); ((H323SecureCapability *)capability)->SetAssociatedCapability(secNumber); SetCapability(descriptorNum, simultaneous, secCap); PTRACE(3, "H323\tAdded Secure Capability: " << *capability); } H323Capability * H235Capabilities::CopySecure(PINDEX descriptorNum, PINDEX simultaneous, const H323Capability & capability) { if (!PIsDescendant(&capability,H323SecureCapability) && !PIsDescendant(&capability,H235SecurityCapability)) return NULL; if (PIsDescendant(&capability,H235SecurityCapability)) { H235SecurityCapability * newCapability = (H235SecurityCapability *)capability.Clone(); newCapability->SetCapabilityNumber(capability.GetCapabilityNumber()); table.Append(newCapability); SetCapability(descriptorNum, simultaneous, newCapability); return newCapability; } else { H323SecureCapability * newCapability = (H323SecureCapability *)capability.Clone(); newCapability->SetCapabilityNumber(capability.GetCapabilityNumber()); newCapability->SetCapabilityList(this); SetCapability(descriptorNum, simultaneous, newCapability); PTRACE(3, "H323\tCopied Secure Capability: " << *newCapability); return newCapability; } } void H235Capabilities::WrapCapability(PINDEX descriptorNum, PINDEX simultaneous, H323Capability & capability) { if (PIsDescendant(&capability,H323SecureCapability) || PIsDescendant(&capability,H235SecurityCapability)) { CopySecure(descriptorNum, simultaneous, capability); return; } switch (capability.GetDefaultSessionID()) { case OpalMediaFormat::DefaultAudioSessionID: case OpalMediaFormat::DefaultVideoSessionID: AddSecure(descriptorNum, simultaneous, new H323SecureCapability(capability, H235ChNew,this)); break; case OpalMediaFormat::NonRTPSessionID: case OpalMediaFormat::DefaultDataSessionID: case OpalMediaFormat::DefaultExtVideoSessionID: case OpalMediaFormat::DefaultFileSessionID: default: SetCapability(descriptorNum, simultaneous, (H323Capability *)capability.Clone()); break; } } static PBoolean MatchWildcard(const PCaselessString & str, const PStringArray & wildcard) { PINDEX last = 0; for (PINDEX i = 0; i < wildcard.GetSize(); i++) { if (wildcard[i].IsEmpty()) last = str.GetLength(); else { PINDEX next = str.Find(wildcard[i], last); if (next == P_MAX_INDEX) return FALSE; last = next + wildcard[i].GetLength(); } } return TRUE; } PINDEX H235Capabilities::AddAllCapabilities(PINDEX descriptorNum, PINDEX simultaneous, const PString & name) { PINDEX reply = descriptorNum == P_MAX_INDEX ? P_MAX_INDEX : simultaneous; PStringArray wildcard = name.Tokenise('*', FALSE); H323CapabilityFactory::KeyList_T stdCaps = H323CapabilityFactory::GetKeyList(); for (unsigned session = OpalMediaFormat::FirstSessionID; session <= OpalMediaFormat::LastSessionID; session++) { for (H323CapabilityFactory::KeyList_T::const_iterator r = stdCaps.begin(); r != stdCaps.end(); ++r) { PString capName(*r); if (MatchWildcard(capName, wildcard) && (FindCapability(capName) == NULL)) { OpalMediaFormat mediaFormat(capName); if (!mediaFormat.IsValid() && (capName.Right(4) == "{sw}") && capName.GetLength() > 4) mediaFormat = OpalMediaFormat(capName.Left(capName.GetLength()-4)); if (mediaFormat.IsValid() && mediaFormat.GetDefaultSessionID() == session) { // add the capability H323Capability * capability = H323Capability::Create(capName); H323SecureCapability * newCapability = NULL; PINDEX num=0; switch (session) { case OpalMediaFormat::DefaultAudioSessionID: case OpalMediaFormat::DefaultVideoSessionID: newCapability = new H323SecureCapability(*capability, H235ChNew, this); num = SetCapability(descriptorNum, simultaneous, newCapability); num = SetCapability(descriptorNum, simultaneous, new H235SecurityCapability(newCapability->GetCapabilityNumber())); delete capability; break; case OpalMediaFormat::DefaultDataSessionID: case OpalMediaFormat::DefaultExtVideoSessionID: case OpalMediaFormat::DefaultFileSessionID: default: num = SetCapability(descriptorNum, simultaneous, capability); break; } if (descriptorNum == P_MAX_INDEX) { reply = num; descriptorNum = num; simultaneous = P_MAX_INDEX; } else if (simultaneous == P_MAX_INDEX) { if (reply == P_MAX_INDEX) reply = num; simultaneous = num; } } } } simultaneous = P_MAX_INDEX; } return reply; } void H235Capabilities::SetDHKeyPair(const PStringList & keyOIDs, H235_DiffieHellman * key, PBoolean isMaster) { m_algorithms = keyOIDs; m_DHkey = key; m_h245Master = isMaster; PTRACE(2,"H235\tDiffieHellman selected. Key " << (isMaster ? "Master" : "Slave")); } void H235Capabilities::GetDHKeyPair(PStringList & keyOIDs, H235_DiffieHellman * key, PBoolean & isMaster) { keyOIDs = m_algorithms; if (m_DHkey) key = new H235_DiffieHellman(*m_DHkey); isMaster = m_h245Master; } PBoolean H235Capabilities::GetAlgorithms(const PStringList & algorithms) const { PStringList * m_localAlgorithms = PRemoveConst(PStringList,&algorithms); *m_localAlgorithms = m_algorithms; return (m_algorithms.GetSize() > 0); } #endif h323plus/src/h235/h235con.cxx0000644000175000017500000004142411642207035014271 0ustar markmark/* * h235con.cxx * * H.235 Encryption Context definitions class. * * h323plus library * * Copyright (c) 2011 Spranto Australia Pty Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * * Contributor(s): ______________________________________. * * $Id: h235con.cxx,v 1.4 2011/10/03 01:21:33 shorne Exp $ * */ #include #include "openh323buildopts.h" #ifdef H323_H235 #include "rtp.h" #include "h235/h235con.h" #include "h235/h235caps.h" #include "h235/h2356.h" extern "C" { #include #include }; //////////////////////////////////////////////////////////////////////// static void tls1_P_hash(const EVP_MD *md, const unsigned char *sec, int sec_len, unsigned char *seed, int seed_len, unsigned char *out, int olen) { int chunk,n; int j; HMAC_CTX ctx; HMAC_CTX ctx_tmp; unsigned char A1[EVP_MAX_MD_SIZE]; unsigned int A1_len; chunk=EVP_MD_size(md); HMAC_CTX_init(&ctx); HMAC_CTX_init(&ctx_tmp); HMAC_Init_ex(&ctx,sec,sec_len,md, NULL); HMAC_Init_ex(&ctx_tmp,sec,sec_len,md, NULL); HMAC_Update(&ctx,seed,seed_len); HMAC_Final(&ctx,A1,&A1_len); n=0; for (;;) { HMAC_Init_ex(&ctx,NULL,0,NULL,NULL); // re-init HMAC_Init_ex(&ctx_tmp,NULL,0,NULL,NULL); // re-init HMAC_Update(&ctx,A1,A1_len); HMAC_Update(&ctx_tmp,A1,A1_len); HMAC_Update(&ctx,seed,seed_len); j = chunk; if (olen > chunk) { HMAC_Final(&ctx,out,(unsigned int *)&j); out+=j; olen-=j; HMAC_Final(&ctx_tmp,A1,&A1_len); // calc the next A1 value } else // last one { HMAC_Final(&ctx,A1,&A1_len); memcpy(out,A1,olen); break; } } HMAC_CTX_cleanup(&ctx); HMAC_CTX_cleanup(&ctx_tmp); OPENSSL_cleanse(A1,sizeof(A1)); } static void tls1_PRF(const EVP_MD *md5, const EVP_MD *sha1, unsigned char *label, int label_len, const unsigned char *sec, int slen, unsigned char *out1, unsigned char *out2, int olen) { int len,i; const unsigned char *S1,*S2; len=slen/2; S1=sec; S2= &(sec[len]); len+=(slen&1); /* add for odd, make longer */ tls1_P_hash(md5 ,S1,len,label,label_len,out1,olen); tls1_P_hash(sha1,S2,len,label,label_len,out2,olen); for (i=0; is3->tmp.new_sym_enc; m=s->s3->tmp.new_hash; comp=s->s3->tmp.new_compression; key_block=s->s3->tmp.key_block; if (which & SSL3_CC_READ) { if (s->enc_read_ctx != NULL) reuse_dd = 1; else if ((s->enc_read_ctx=(EVP_CIPHER_CTX *)OPENSSL_malloc(sizeof(EVP_CIPHER_CTX))) == NULL) goto err; dd= s->enc_read_ctx; s->read_hash=m; if (s->expand != NULL) { COMP_CTX_free(s->expand); s->expand=NULL; } if (comp != NULL) { s->expand=COMP_CTX_new(comp->method); if (s->expand == NULL) { SSLerr(SSL_F_TLS1_CHANGE_CIPHER_STATE,SSL_R_COMPRESSION_LIBRARY_ERROR); goto err2; } if (s->s3->rrec.comp == NULL) s->s3->rrec.comp=(unsigned char *) OPENSSL_malloc(SSL3_RT_MAX_ENCRYPTED_LENGTH); if (s->s3->rrec.comp == NULL) goto err; } memset(&(s->s3->read_sequence[0]),0,8); mac_secret= &(s->s3->read_mac_secret[0]); } else { if (s->enc_write_ctx != NULL) reuse_dd = 1; if ((s->enc_write_ctx == NULL) && ((s->enc_write_ctx=(EVP_CIPHER_CTX *) OPENSSL_malloc(sizeof(EVP_CIPHER_CTX))) == NULL)) goto err; dd= s->enc_write_ctx; s->write_hash=m; if (s->compress != NULL) { COMP_CTX_free(s->compress); s->compress=NULL; } if (comp != NULL) { s->compress=COMP_CTX_new(comp->method); if (s->compress == NULL) { SSLerr(SSL_F_TLS1_CHANGE_CIPHER_STATE,SSL_R_COMPRESSION_LIBRARY_ERROR); goto err2; } } memset(&(s->s3->write_sequence[0]),0,8); mac_secret= &(s->s3->write_mac_secret[0]); } if (reuse_dd) EVP_CIPHER_CTX_cleanup(dd); EVP_CIPHER_CTX_init(dd); p=s->s3->tmp.key_block; i=EVP_MD_size(m); cl=EVP_CIPHER_key_length(c); j=0; // Was j=(exp)?5:EVP_CIPHER_key_length(c); k=EVP_CIPHER_iv_length(c); er1= &(s->s3->client_random[0]); er2= &(s->s3->server_random[0]); if ( (which == SSL3_CHANGE_CIPHER_CLIENT_WRITE) || (which == SSL3_CHANGE_CIPHER_SERVER_READ)) { ms= &(p[ 0]); n=i+i; key= &(p[ n]); n+=j+j; iv= &(p[ n]); n+=k+k; exp_label=(unsigned char *)TLS_MD_CLIENT_WRITE_KEY_CONST; exp_label_len=TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE; client_write=1; } else { n=i; ms= &(p[ n]); n+=i+j; key= &(p[ n]); n+=j+k; iv= &(p[ n]); n+=k; exp_label=(unsigned char *)TLS_MD_SERVER_WRITE_KEY_CONST; exp_label_len=TLS_MD_SERVER_WRITE_KEY_CONST_SIZE; client_write=0; } if (n > s->s3->tmp.key_block_length) { SSLerr(SSL_F_TLS1_CHANGE_CIPHER_STATE,ERR_R_INTERNAL_ERROR); goto err2; } memcpy(mac_secret,ms,i); #if 0 printf("which = %04X\nmac key=",which); { int z; for (z=0; zsession->key_arg_length=0; EVP_CipherInit_ex(dd,c,NULL,key,iv,(which & SSL3_CC_WRITE)); #if 0 printf("which = %04X\nkey=",which); { int z; for (z=0; zGetDiffieHellMan()), m_algorithm(algorithm), m_context(*caps->GetContext()), m_ssl(NULL), m_session(NULL), m_isServer(false), m_isInitialised(false) { } H235Session::~H235Session() { SSL_free(m_ssl); SSL_SESSION_free(m_session); } void H235Session::SetMasterKey(const PBYTEArray & key) { m_session_key = key; m_isServer = true; } const PBYTEArray & H235Session::GetMasterKey() { return m_session_key; } void H235Session::SetCipher(const PString & oid) { STACK_OF(SSL_CIPHER) *ciphers; ssl_cipher_st *c = NULL, *sc = NULL, *lc = NULL; PINDEX i; ciphers = SSL_get_ciphers(m_ssl); for (i=0; iname) // Get the Local Cipher lc = c; } sc = lc; PTRACE(2,"H235SES\tCommon Cipher Set: " << sc->name); m_session->cipher = sc; m_session->cipher_id = sc->id; } PBoolean H235Session::SetDHSharedkey() { unsigned char *buf=NULL; int out=0; buf=(unsigned char *)OPENSSL_malloc(m_session_key.GetSize()); memcpy(buf, m_session_key.GetPointer(), m_session_key.GetSize()); //------------------------------------------------------------------------ // Setup for receiving the DH Shared Secret unsigned char buf1[SSL3_RANDOM_SIZE*2+TLS_MD_MASTER_SECRET_CONST_SIZE]; unsigned char buff[SSL_MAX_MASTER_KEY_LENGTH]; // Setup the stuff to munge memcpy(buf1,TLS_MD_MASTER_SECRET_CONST, TLS_MD_MASTER_SECRET_CONST_SIZE); memcpy(&(buf1[TLS_MD_MASTER_SECRET_CONST_SIZE]), m_ssl->s3->client_random,SSL3_RANDOM_SIZE); memcpy(&(buf1[SSL3_RANDOM_SIZE+TLS_MD_MASTER_SECRET_CONST_SIZE]), m_ssl->s3->server_random,SSL3_RANDOM_SIZE); tls1_PRF(m_ssl->ctx->md5,m_ssl->ctx->sha1, buf1,TLS_MD_MASTER_SECRET_CONST_SIZE+SSL3_RANDOM_SIZE*2,buf,out, m_session->master_key,buff,sizeof buff); memset(buf,0,out); PTRACE(2,"H235SES\tMaster Session Key Set!"); OPENSSL_free(buf); return true; } PBoolean H235Session::IsActive() { return !m_algorithm.IsEmpty(); } PBoolean H235Session::IsInitialised() { return m_isInitialised; } PBoolean H235Session::CreateSession() { #if 0 session_count++; m_session_id = session_count; ssl_ctx_st * ctx = m_context.GetContext(); m_ssl = SSL_new(ctx); if (m_ssl == NULL) { PTRACE(2,"H235SES\tSSL Error in Creation"); return false; } m_session = SSL_get1_session(m_ssl); if (!ssl3_setup_buffers(m_ssl)) { PTRACE(2,"H235SES\tError Setting Buffers!"); return false; } if (!ssl_init_wbio_buffer(m_ssl,0)) { PTRACE(2,"H235SES\tError Setting BIO!"); return false; } ssl3_init_finished_mac(m_ssl); BUF_MEM *xbuf; if ((m_ssl->init_buf == NULL) && ((xbuf=BUF_MEM_new()) == NULL) && (!BUF_MEM_grow(xbuf,SSL3_RT_MAX_PLAIN_LENGTH))) { m_ssl->init_buf=xbuf; xbuf=NULL; } m_session = SSL_SESSION_new(); m_session->key_arg_length = 0; m_session->sid_ctx_length= ctx->sid_ctx_length; if(m_session->sid_ctx_length > SSL_MAX_SID_CTX_LENGTH) { PTRACE(2,"H235SES\tError Setting Context ID!"); SSL_SESSION_free(m_session); return false; } memcpy(m_session->sid_ctx, ctx->sid_ctx, m_session->sid_ctx_length); //Session Cert m_session->sess_cert = ssl_sess_cert_new(); ssl_sess_cert_free(m_session->sess_cert); m_session->timeout=SSL_get_default_timeout(m_ssl); //Set the Session ID m_session->ssl_version=m_ssl->version; m_session->session_id_length=SSL3_SSL_SESSION_ID_LENGTH; PThread::Sleep(50); if (!m_context.Generate_Session_Id(m_ssl, m_session->session_id, &m_session->session_id_length)){ PTRACE(2, "H235SES\tSession ID Allocate Fail!"); SSL_SESSION_free(m_session); return false; } m_session->verify_result = X509_V_OK; SetCipher(m_algorithm); if (m_session_key.GetSize() == 0) { m_dh.ComputeSessionKey(m_session_key); m_isServer = true; } SetDHSharedkey(); int i= SSL_set_session(m_ssl,m_session); if (!i) { PTRACE(2, "H235SES\tTLS Error: Session Init Failure"); return false; } if (!tls1_setup_key_block(m_ssl)) { PTRACE(2, "H235SES\tTLS Error: Setting Key Blocks"); } PTRACE(2, "H235SES\tTLS Session Finalised."); m_isInitialised = true; #endif return true; } PBoolean H235Session::ReadFrame(DWORD & /*rtpTimestamp*/, RTP_DataFrame & frame) { unsigned char * buf; unsigned char * buf1; int size = frame.GetPayloadSize(); if (size > 0) { buf =(unsigned char *)OPENSSL_malloc(size); memmove(buf,frame.GetPayloadPtr(), size); buf1 = RawRead(buf,size); if (size > 0) { frame.SetPayloadSize(size); memmove(frame.GetPayloadPtr(), buf1, size); } OPENSSL_free(buf); } return true; } PBoolean H235Session::WriteFrame(RTP_DataFrame & frame) { unsigned char * buf; unsigned char * buf1; int len = frame.GetPayloadSize(); if (len > 0) { buf =(unsigned char *)OPENSSL_malloc(len); memmove(buf,frame.GetPayloadPtr(),len); buf1 = RawWrite(buf,len); if (len > 0) { frame.SetPayloadSize(len); memmove(frame.GetPayloadPtr(), buf1, len); } OPENSSL_free(buf); } return true; } unsigned char * H235Session::RawRead(unsigned char * /*buffer*/,int & /*length*/) { #if 0 ssl3_record_st * rr; ssl3_buffer_st * rb; int type = SSL3_RT_APPLICATION_DATA; int enc_err, statechg; if (m_ssl->s3->tmp.key_block == NULL) { if (!m_ssl->method->ssl3_enc->setup_key_block(m_ssl)) { length = 0; return NULL; } } if (m_isServer) statechg = SSL3_CHANGE_CIPHER_SERVER_READ; else statechg = SSL3_CHANGE_CIPHER_CLIENT_READ; if (!tls_change_cipher_state(m_ssl,statechg)) { PTRACE(2, "H235SES\tError Setting Cipher State"); length = 0; return NULL; } rr = &(m_ssl->s3->rrec); rb = &(m_ssl->s3->rbuf); rb->buf = buffer; rb->len = length; rb->offset = 0; rr->input= rb->buf; rr->type = type; rr->length = length; rr->off = 0; rr->data=rr->input; enc_err = m_ssl->method->ssl3_enc->enc(m_ssl, 0); if (enc_err <= 0) { if (enc_err == 0) { length = 0; return NULL; } if (enc_err == -1) { length = 0; return NULL; } } #if 0 printf("dec %d\n",rr->length); { unsigned int z; for (z=0; zlength; z++) printf("%02X%c",rr->data[z],((z+1)%16)?' ':'\n'); } printf("\n"); #endif if (rr->length > SSL3_RT_MAX_PLAIN_LENGTH) { PTRACE(2, "H235SES\tError Data too long"); length = 0; return NULL; } length = rr->length; return &rr->input[rr->off]; #else return NULL; #endif } unsigned char * H235Session::RawWrite(unsigned char * /*buffer*/ , int & /*length*/) { #if 0 unsigned char * p; unsigned char * plen; ssl3_record_st * wr; ssl3_buffer_st * wb; int prefix_len = 0; int type = SSL3_RT_APPLICATION_DATA; int mac_size, statechg; if (m_ssl->s3->tmp.key_block == NULL) { if (!m_ssl->method->ssl3_enc->setup_key_block(m_ssl)) { length = 0; return NULL; } } if (m_isServer) statechg = SSL3_CHANGE_CIPHER_SERVER_WRITE; else statechg = SSL3_CHANGE_CIPHER_CLIENT_WRITE; if (!tls_change_cipher_state(m_ssl,statechg)) { PTRACE(2, "H235SES\tError Setting Cipher State"); length = 0; return NULL; } wr= &(m_ssl->s3->wrec); wb= &(m_ssl->s3->wbuf); mac_size = EVP_MD_size(m_ssl->write_hash); p = wb->buf + prefix_len; /* write the header */ *(p++)=type&0xff; wr->type=type; *(p++)=(unsigned char)(m_ssl->version>>8); *(p++)=m_ssl->version&0xff; /* field where we are to write out packet length */ plen=p; p+=2; /* lets setup the record stuff. */ wr->data=p; wr->length=(int)length; wr->input= buffer; length = 0; /* we now 'read' from wr->input, wr->length bytes into * wr->data */ /* first we compress */ if (m_ssl->compress != NULL) { } else { memcpy(wr->data,wr->input,wr->length); wr->input=wr->data; } /* we should still have the output to wr->data and the input * from wr->input. Length should be wr->length. * wr->data still points in the wb->buf */ int writeResult =m_ssl->method->ssl3_enc->enc(m_ssl, 1); if (writeResult < 0) { PTRACE(2, "H235SES\tError Writing"); return NULL; } length = wr->length; return wr->input; #else return NULL; #endif } ///////////////////////////////////////////////////////////////// H235Context::H235Context() : m_isActive(false), m_context(NULL) { } H235Context::~H235Context() { SSL_CTX_free(m_context); } void H235Context::Initialise() { SSL_library_init(); SSL_load_error_strings(); OpenSSL_add_ssl_algorithms(); OpenSSL_add_all_ciphers(); OpenSSL_add_all_digests(); RandomSeed(); m_context = SSL_CTX_new(TLSv1_method()); } PBoolean H235Context::IsActive() { return m_isActive; } void H235Context::RandomSeed() { BYTE seed[256]; for (size_t i = 0; i < sizeof(seed); i++) seed[i] = (BYTE)rand(); RAND_seed(seed, sizeof(seed)); } #define session_id_prefix "vs" #define MAX_SESSION_ID_ATTEMPTS 10 int H235Context::Generate_Session_Id(const ssl_st *ssl, unsigned char *id, unsigned int *id_len) { unsigned int count = 0; do { PTRACE(1,"X"); RAND_pseudo_bytes(id, *id_len); /* Prefix the session_id with the required prefix. NB: If our * prefix is too long, clip it - but there will be worse effects * anyway, eg. the server could only possibly create 1 session * ID (ie. the prefix!) so all future session negotiations will * fail due to conflicts. */ memcpy(id, session_id_prefix, (strlen(session_id_prefix) < *id_len) ? strlen(session_id_prefix) : *id_len); } while(SSL_has_matching_session_id(ssl, id, *id_len) && (++count < MAX_SESSION_ID_ATTEMPTS)); if(count >= MAX_SESSION_ID_ATTEMPTS) return 0; return 1; } #endifh323plus/src/h235/h2356.cxx0000644000175000017500000003634511641502612013663 0ustar markmark/* * h2356.cxx * * H.235.6 Encryption class. * * h323plus library * * Copyright (c) 2011 Spranto Australia Pty Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * * Contributor(s): ______________________________________. * * $Id: h2356.cxx,v 1.10 2011/10/01 03:14:18 shorne Exp $ * * */ #include #include "openh323buildopts.h" #ifdef H323_H235 #include "h235/h2356.h" #include "h235/h2351.h" #include "h323con.h" #include extern "C" { #include #include #include }; //////////////////////////////////////////////////////////////////////////////////// // Diffie Hellman H235_DiffieHellman::H235_DiffieHellman() : dh(NULL), m_remKey(NULL), m_toSend(true), m_keySize(0) { } H235_DiffieHellman::H235_DiffieHellman(const BYTE * pData, PINDEX pSize, const BYTE * gData, PINDEX gSize, PBoolean send) : m_remKey(NULL), m_toSend(send), m_keySize(pSize) { dh = DH_new(); if (dh == NULL) return; dh->p = BN_bin2bn(pData, pSize, NULL); dh->g = BN_bin2bn(gData, gSize, NULL); if (dh->p != NULL && dh->g != NULL) return; DH_free(dh); dh = NULL; } H235_DiffieHellman::H235_DiffieHellman(const H235_DiffieHellman & diffie) { dh = NULL; dh = DHparams_dup(diffie); } H235_DiffieHellman & H235_DiffieHellman::operator=(const H235_DiffieHellman & diffie) { if (dh != NULL) DH_free(dh); dh = NULL; dh = DHparams_dup(diffie); return *this; } H235_DiffieHellman::~H235_DiffieHellman() { if (dh != NULL) DH_free(dh); } PBoolean H235_DiffieHellman::CreateParams() { PWaitAndSignal m(vbMutex); dsa_st *dsaparams; // Digital Signature Algorithm Structure int i; const char *seed[] = { ";-) :-( :-) :-( ", ";-) :-( :-) :-( ", "Random String no. 12", ";-) :-( :-) :-( ", "hackers have no mo", /* from jargon file */ }; unsigned char seedbuf[20]; vbMutex.Wait(); RAND_bytes((unsigned char *) &i, sizeof i); vbMutex.Signal(); // Make sure that i is non-negative if (i<0) i = -i; if (i<0) i= 0; if (i >= 0) { i %= sizeof seed / sizeof seed[0]; if (strlen(seed[i]) != 20) { return FALSE; } vbMutex.Wait(); memcpy(seedbuf, seed[i], 20); dsaparams = DSA_generate_parameters(m_keySize, seedbuf, 20, NULL, NULL, 0, NULL); vbMutex.Signal(); } else { /* Random Parameters (may take awhile) You should never get here ever!!!*/ dsaparams = DSA_generate_parameters(m_keySize, NULL, 0, NULL, NULL, 0, NULL); } if (dsaparams == NULL) { return FALSE; } dh = DH_new(); dh = DSA_dup_DH(dsaparams); DSA_free(dsaparams); if (dh == NULL) { return FALSE; } return TRUE; } PBoolean H235_DiffieHellman::CheckParams() { PWaitAndSignal m(vbMutex); int i; if (!DH_check(dh,&i)) { switch (i) { case DH_CHECK_P_NOT_PRIME: PTRACE(4,"H235_DH\tCHECK: p value is not prime"); case DH_CHECK_P_NOT_SAFE_PRIME: PTRACE(4,"H235_DH\tCHECK: p value is not a safe prime"); case DH_UNABLE_TO_CHECK_GENERATOR: PTRACE(4,"H235_DH\tCHECK: unable to check the generator value"); case DH_NOT_SUITABLE_GENERATOR: PTRACE(4,"H235_DH\tCHECK: the g value is not a generator"); } return FALSE; } return TRUE; } void H235_DiffieHellman::Encode_P(PASN_BitString & p) { PWaitAndSignal m(vbMutex); if (!m_toSend) return; unsigned char *data; int l,len,bits_p; len=BN_num_bytes(dh->p); bits_p=BN_num_bits(dh->p); data=(unsigned char *)OPENSSL_malloc(len+20); if (data != NULL) { l=BN_bn2bin(dh->p,data); p.SetData(bits_p,data); } OPENSSL_free(data); } void H235_DiffieHellman::Decode_P(const PASN_BitString & p) { PWaitAndSignal m(vbMutex); if (p.GetSize() == 0) return; const unsigned char *data = p.GetDataPointer(); dh->p=BN_bin2bn(data,sizeof(data),NULL); } void H235_DiffieHellman::Encode_G(PASN_BitString & g) { PWaitAndSignal m(vbMutex); if (!m_toSend) return; unsigned char *data; int l,len_p,len_g,bits_p; len_p=BN_num_bytes(dh->p); len_g=BN_num_bytes(dh->g); bits_p=BN_num_bits(dh->p); // G is padded out to the length of P data=(unsigned char *)OPENSSL_malloc(len_p+20); memset(data,0,len_p); if (data != NULL) { l=BN_bn2bin(dh->g,data+len_p-len_g); g.SetData(bits_p,data); } OPENSSL_free(data); } void H235_DiffieHellman::Decode_G(const PASN_BitString & g) { PWaitAndSignal m(vbMutex); if (g.GetSize() == 0) return; const unsigned char *data; if (g.GetSize() > 0) { data = g.GetDataPointer(); dh->g=BN_bin2bn(data,sizeof(data),NULL); } } void H235_DiffieHellman::Encode_HalfKey(PASN_BitString & hk) { PWaitAndSignal m(vbMutex); unsigned char *data; int l,len,bits_key; len=BN_num_bytes(dh->pub_key); bits_key=BN_num_bits(dh->pub_key); data=(unsigned char *)OPENSSL_malloc(len+20); if (data != NULL){ l=BN_bn2bin(dh->pub_key,data); hk.SetData(bits_key,data); } OPENSSL_free(data); } void H235_DiffieHellman::Decode_HalfKey(const PASN_BitString & hk) { PWaitAndSignal m(vbMutex); const unsigned char *data = hk.GetDataPointer(); dh->pub_key = BN_bin2bn(data,sizeof(data),NULL); } void H235_DiffieHellman::SetRemoteKey(bignum_st * remKey) { m_remKey = remKey; } PBoolean H235_DiffieHellman::GenerateHalfKey() { PWaitAndSignal m(vbMutex); if (!CheckParams()) return FALSE; if (!DH_generate_key(dh)) { PStringStream ErrStr; char buf[256]; ERR_error_string(ERR_get_error(), buf); PTRACE(4,"H235_DH\tERROR DH Halfkey " << buf); return FALSE; } return TRUE; } PBoolean H235_DiffieHellman::ComputeSessionKey(PBYTEArray & SessionKey) { if (!m_remKey) return false; int len, out; unsigned char *buf=NULL; len=DH_size(dh); buf=(unsigned char *)OPENSSL_malloc(len); out=DH_compute_key(buf, m_remKey, dh); if (out <= 0) { PTRACE(2,"H235_DH\tERROR Generating Shared DH!"); return false; } SessionKey.SetSize(out); memcpy(SessionKey.GetPointer(),(void *)buf,out); OPENSSL_free(buf); return true; } bignum_st * H235_DiffieHellman::GetPublicKey() { return dh->pub_key; } int H235_DiffieHellman::GetKeyLength() { return m_keySize; } //////////////////////////////////////////////////////////////////////////////////// // Helper functions template class deletepair { // PAIR::second_type is a pointer type public: void operator()(const PAIR & p) { if (p.second) delete p.second; } }; template inline void DeleteObjectsInMap(const M & m) { typedef typename M::value_type PAIR; std::for_each(m.begin(), m.end(), deletepair()); } void LoadDiffieHellmanMap(std::map & dhmap) { for (PINDEX i = 0; i < PARRAYSIZE(H235_DHParameters); ++i) { if (H235_DHParameters[i].sz > 0) { dhmap.insert(pair(H235_DHParameters[i].parameterOID, new H235_DiffieHellman(H235_DHParameters[i].dh_p, H235_DHParameters[i].sz, H235_DHParameters[i].dh_g, H235_DHParameters[i].sz, H235_DHParameters[i].send)) ); } else { dhmap.insert(pair(H235_DHParameters[i].parameterOID,NULL)); } } } ///////////////////////////////////////////////////////////////////////////////////// H235SECURITY(Std6); H2356_Authenticator::H2356_Authenticator() : m_enabled(true), m_active(true), m_tokenState(e_clearNone) { usage = MediaEncryption; m_algOIDs.SetSize(0); LoadDiffieHellmanMap(m_dhLocalMap); } H2356_Authenticator::~H2356_Authenticator() { DeleteObjectsInMap(m_dhLocalMap); DeleteObjectsInMap(m_dhRemoteMap); } PStringArray H2356_Authenticator::GetAuthenticatorNames() { return PStringArray("Std6"); } PBoolean H2356_Authenticator::GetAuthenticationCapabilities(H235Authenticator::Capabilities * ids) { for (PINDEX i = 0; i < PARRAYSIZE(H235_Encryptions); ++i) { H235Authenticator::Capability cap; cap.m_identifier = H235_Encryptions[i].algorithmOID; cap.m_cipher = H235_Encryptions[i].sslDesc; cap.m_description= H235_Encryptions[i].desc; ids->capabilityList.push_back(cap); } return true; } PBoolean H2356_Authenticator::IsMatch(const PString & identifier) const { PStringArray ids; for (PINDEX i = 0; i < PARRAYSIZE(H235_DHParameters); ++i) { if (PString(H235_DHParameters[i].parameterOID) == identifier) return true; } return false; } const char * H2356_Authenticator::GetName() const { return H2356_Authenticator::GetAuthenticatorNames()[0]; } PBoolean H2356_Authenticator::PrepareTokens(PASN_Array & clearTokens, PASN_Array & /*cryptoTokens*/) { if (!IsActive() || (m_tokenState == e_clearDisable)) return FALSE; H225_ArrayOf_ClearToken & tokens = (H225_ArrayOf_ClearToken &)clearTokens; int sz = 0; std::map::iterator i = m_dhLocalMap.begin(); while (i != m_dhLocalMap.end()) { sz = tokens.GetSize(); tokens.SetSize(sz+1); H235_ClearToken & clearToken = tokens[sz]; clearToken.m_tokenOID = i->first; H235_DiffieHellman * m_dh = i->second; if (m_dh && m_dh->GenerateHalfKey()) { clearToken.IncludeOptionalField(H235_ClearToken::e_dhkey); H235_DHset & dh = clearToken.m_dhkey; m_dh->Encode_HalfKey(dh.m_halfkey); m_dh->Encode_P(dh.m_modSize); m_dh->Encode_G(dh.m_generator); } i++; } if (m_tokenState == e_clearNone) { m_tokenState = e_clearSent; return true; } if (m_tokenState == e_clearReceived) { m_tokenState = e_clearComplete; InitialiseSecurity(); } return true; } H235Authenticator::ValidationResult H2356_Authenticator::ValidateTokens(const PASN_Array & clearTokens, const PASN_Array & /*cryptoTokens*/, const PBYTEArray & /*rawPDU*/) { if (!IsActive() || (m_tokenState == e_clearDisable)) return e_Disabled; const H225_ArrayOf_ClearToken & tokens = (const H225_ArrayOf_ClearToken &)clearTokens; if (tokens.GetSize() == 0) { DeleteObjectsInMap(m_dhLocalMap); m_tokenState = e_clearDisable; return e_Disabled; } std::map::iterator it = m_dhLocalMap.begin(); while (it != m_dhLocalMap.end()) { PBoolean found = false; for (PINDEX i = 0; i < tokens.GetSize(); ++i) { const H235_ClearToken & token = tokens[i]; PString tokenOID = token.m_tokenOID.AsString(); if (it->first == tokenOID && it->second != NULL ) { H235_DiffieHellman* m_dh = new H235_DiffieHellman(*it->second); const H235_DHset & dh = token.m_dhkey; m_dh->Decode_HalfKey(dh.m_halfkey); if (dh.m_modSize.GetSize() > 0) { m_dh->Decode_P(dh.m_modSize); m_dh->Decode_G(dh.m_generator); } m_dhRemoteMap.insert(pair(tokenOID,m_dh)); found = true; break; } } if (!found) { delete it->second; m_dhLocalMap.erase(it++); } else it++; } if (m_dhLocalMap.size() == 0) { m_tokenState = e_clearDisable; return e_Disabled; } if (m_tokenState == e_clearNone) { m_tokenState = e_clearReceived; return e_OK; } if (m_tokenState == e_clearSent) { m_tokenState = e_clearComplete; InitialiseSecurity(); } return e_OK; } PBoolean H2356_Authenticator::IsSecuredSignalPDU(unsigned signalPDU, PBoolean /*received*/) const { switch (signalPDU) { case H225_H323_UU_PDU_h323_message_body::e_setup: case H225_H323_UU_PDU_h323_message_body::e_connect: return enabled; default : return false; } } PBoolean H2356_Authenticator::IsCapability(const H235_AuthenticationMechanism & /*mechansim*/, const PASN_ObjectId & /*algorithmOID*/) { return false; } PBoolean H2356_Authenticator::SetCapability(H225_ArrayOf_AuthenticationMechanism & /*mechansim*/, H225_ArrayOf_PASN_ObjectId & /*algorithmOIDs*/) { return false; } PBoolean H2356_Authenticator::IsActive() const { return m_active; } void H2356_Authenticator::Disable() { m_enabled = false; m_active = false; } void H2356_Authenticator::InitialiseSecurity() { PString dhOID = PString(); int lastKeyLength = 0; std::map::iterator i = m_dhLocalMap.begin(); while (i != m_dhLocalMap.end()) { if (i->second->GetKeyLength() > lastKeyLength) { dhOID = i->first; lastKeyLength = i->second->GetKeyLength(); } i++; } if (dhOID.IsEmpty()) return; m_algOIDs.SetSize(0); for (PINDEX i=0; i::iterator l = m_dhLocalMap.find(dhOID); std::map::iterator r = m_dhRemoteMap.find(dhOID); if (l == m_dhLocalMap.end() || r == m_dhRemoteMap.end()) return; l->second->SetRemoteKey(r->second->GetPublicKey()); if (connection && (m_algOIDs.GetSize() > 0)) { H235Capabilities * localCaps = (H235Capabilities *)connection->GetLocalCapabilitiesRef(); localCaps->SetDHKeyPair(m_algOIDs,l->second,connection->IsH245Master()); } } PBoolean H2356_Authenticator::GetAlgorithms(PStringList & algorithms) const { algorithms = m_algOIDs; return (m_algOIDs.GetSize() > 0); } PBoolean H2356_Authenticator::GetAlgorithmDetails(const PString & algorithm, PString & sslName, PString & description) { for (PINDEX i=0; i #include "openh323buildopts.h" #ifdef H323_H235 #include "h235/h235chan.h" #include "h235/h235con.h" #include #include H323SecureRTPChannel::H323SecureRTPChannel(H323Connection & conn, const H323SecureRealTimeCapability & cap, Directions direction, RTP_Session & r ) : H323_RTPChannel(conn,cap,direction, r), m_encryption(new H235Session((H235Capabilities*)conn.GetLocalCapabilitiesRef(), cap.GetAlgorithm())) { } H323SecureRTPChannel::~H323SecureRTPChannel() { delete m_encryption; } void H323SecureRTPChannel::CleanUpOnTermination() { if (terminating) return; return H323_RTPChannel::CleanUpOnTermination(); } /* void BuildEncryptionSync(H245_EncryptionSync & sync, H323SecureRTPChannel & chan, H235Session & session) { sync.m_synchFlag = chan.GetRTPPayloadType(); PBYTEArray m_key = m_encryption.GetMasterKey(); H235_EncodedKeySyncMaterial toEncrypt; toEncypt.SetValue(m_key.GetPointer(), m_key.GetSize()); H235_H235Key h235key; h235key.SetTag(H235_H235Key::e_sharedSecret); sync.EncodeSubType(); } */ void ReadEncryptionSync(const H245_EncryptionSync & sync, H235Session & /*session*/) { H235_H235Key h235key; sync.m_h235Key.DecodeSubType(h235key); PBYTEArray key(0); switch (h235key.GetTag()) { case H235_H235Key::e_secureChannel: PTRACE(4,"H235Key\tSecureChannel not supported"); break; case H235_H235Key::e_sharedSecret: PTRACE(4,"H235Key\tShared Secret not supported"); break; case H235_H235Key::e_certProtectedKey: PTRACE(4,"H235Key\tProtected Key not supported"); break; case H235_H235Key::e_secureSharedSecret: { const H235_V3KeySyncMaterial & v3data = h235key; if (v3data.HasOptionalField(H235_V3KeySyncMaterial::e_encryptedSessionKey)) { key = v3data.m_encryptedSessionKey.GetValue(); PTRACE(4,"H235Key\tH235v3 secret received. " << key); } } break; } } PBoolean H323SecureRTPChannel::OnSendingPDU(H245_OpenLogicalChannel & open) const { PTRACE(4, "H235RTP\tOnSendingPDU"); if (connection.IsH245Master() && m_encryption->IsActive()) { /* if (m_encryption->CreateSession()) { open.IncludeOptionalField(H245_OpenLogicalChannel::e_encryptionSync); BuildEncryptionSync(open.m_encryptionSync,*this,*m_encryption); } */ } return H323_RealTimeChannel::OnSendingPDU(open); } void H323SecureRTPChannel::OnSendOpenAck(const H245_OpenLogicalChannel & open, H245_OpenLogicalChannelAck & ack) const { PTRACE(4, "H235RTP\tOnSendOpenAck"); if ( m_encryption->IsInitialised() && connection.IsH245Master()) { /* open.IncludeOptionalField(H245_OpenLogicalChannel::e_encryptionSync); H245_EncryptionSync & sync = open; sync.m_synchFlag; sync.m_encryptionSync; */ } return H323_RealTimeChannel::OnSendOpenAck(open,ack); } PBoolean H323SecureRTPChannel::OnReceivedPDU(const H245_OpenLogicalChannel & open, unsigned & errorCode) { PTRACE(4, "H235RTP\tOnRecievedPDU"); if (open.HasOptionalField(H245_OpenLogicalChannel::e_encryptionSync)) ReadEncryptionSync(open.m_encryptionSync,*m_encryption); return H323_RealTimeChannel::OnReceivedPDU(open,errorCode); } PBoolean H323SecureRTPChannel::OnReceivedAckPDU(const H245_OpenLogicalChannelAck & ack) { PTRACE(3, "H235RTP\tOnReceiveOpenAck"); if (ack.HasOptionalField(H245_OpenLogicalChannel::e_encryptionSync)) ReadEncryptionSync(ack.m_encryptionSync,*m_encryption); return H323_RealTimeChannel::OnReceivedAckPDU(ack); } PBoolean H323SecureRTPChannel::OnSendingPDU(H245_H2250LogicalChannelParameters & param) const { return rtpCallbacks.OnSendingPDU(*this, param); } void H323SecureRTPChannel::OnSendOpenAck(H245_H2250LogicalChannelAckParameters & param) const { rtpCallbacks.OnSendingAckPDU(*this, param); } PBoolean H323SecureRTPChannel::OnReceivedPDU(const H245_H2250LogicalChannelParameters & param, unsigned & errorCode) { return rtpCallbacks.OnReceivedPDU(*this, param, errorCode); } PBoolean H323SecureRTPChannel::OnReceivedAckPDU(const H245_H2250LogicalChannelAckParameters & param) { return rtpCallbacks.OnReceivedAckPDU(*this, param); } PBoolean H323SecureRTPChannel::ReadFrame(DWORD & rtpTimestamp, RTP_DataFrame & frame) { if (H323_RTPChannel::ReadFrame(rtpTimestamp, frame)) { if (m_encryption->IsInitialised()) return m_encryption->ReadFrame(rtpTimestamp,frame); else return true; } else return false; } PBoolean H323SecureRTPChannel::WriteFrame(RTP_DataFrame & frame) { if (m_encryption->IsInitialised()) return m_encryption->WriteFrame(frame); else return H323_RTPChannel::WriteFrame(frame); } #endif // H323_H235 h323plus/src/x880.cxx0000644000175000017500000005115511015524403013133 0ustar markmark// // x880.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "x880.h" #endif #include #include "x880.h" #define new PNEW #if ! H323_DISABLE_X880 #ifndef PASN_NOPRINTON const static PASN_Names Names_X880_ROS[]={ {"invoke",0} ,{"returnResult",1} ,{"returnError",2} ,{"reject",3} }; #endif // // ROS // X880_ROS::X880_ROS(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_X880_ROS,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 X880_ROS::operator X880_Invoke &() const #else X880_ROS::operator X880_Invoke &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), X880_Invoke), PInvalidCast); #endif return *(X880_Invoke *)choice; } X880_ROS::operator const X880_Invoke &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), X880_Invoke), PInvalidCast); #endif return *(X880_Invoke *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 X880_ROS::operator X880_ReturnResult &() const #else X880_ROS::operator X880_ReturnResult &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), X880_ReturnResult), PInvalidCast); #endif return *(X880_ReturnResult *)choice; } X880_ROS::operator const X880_ReturnResult &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), X880_ReturnResult), PInvalidCast); #endif return *(X880_ReturnResult *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 X880_ROS::operator X880_ReturnError &() const #else X880_ROS::operator X880_ReturnError &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), X880_ReturnError), PInvalidCast); #endif return *(X880_ReturnError *)choice; } X880_ROS::operator const X880_ReturnError &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), X880_ReturnError), PInvalidCast); #endif return *(X880_ReturnError *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 X880_ROS::operator X880_Reject &() const #else X880_ROS::operator X880_Reject &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), X880_Reject), PInvalidCast); #endif return *(X880_Reject *)choice; } X880_ROS::operator const X880_Reject &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), X880_Reject), PInvalidCast); #endif return *(X880_Reject *)choice; } PBoolean X880_ROS::CreateObject() { switch (tag) { case e_invoke : choice = new X880_Invoke(1, ContextSpecificTagClass); return TRUE; case e_returnResult : choice = new X880_ReturnResult(2, ContextSpecificTagClass); return TRUE; case e_returnError : choice = new X880_ReturnError(3, ContextSpecificTagClass); return TRUE; case e_reject : choice = new X880_Reject(4, ContextSpecificTagClass); return TRUE; } choice = NULL; return FALSE; } PObject * X880_ROS::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(X880_ROS::Class()), PInvalidCast); #endif return new X880_ROS(*this); } // // GeneralProblem // X880_GeneralProblem::X880_GeneralProblem(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { } X880_GeneralProblem & X880_GeneralProblem::operator=(int v) { SetValue(v); return *this; } X880_GeneralProblem & X880_GeneralProblem::operator=(unsigned v) { SetValue(v); return *this; } PObject * X880_GeneralProblem::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(X880_GeneralProblem::Class()), PInvalidCast); #endif return new X880_GeneralProblem(*this); } // // InvokeProblem // X880_InvokeProblem::X880_InvokeProblem(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { } X880_InvokeProblem & X880_InvokeProblem::operator=(int v) { SetValue(v); return *this; } X880_InvokeProblem & X880_InvokeProblem::operator=(unsigned v) { SetValue(v); return *this; } PObject * X880_InvokeProblem::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(X880_InvokeProblem::Class()), PInvalidCast); #endif return new X880_InvokeProblem(*this); } // // ReturnResultProblem // X880_ReturnResultProblem::X880_ReturnResultProblem(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { } X880_ReturnResultProblem & X880_ReturnResultProblem::operator=(int v) { SetValue(v); return *this; } X880_ReturnResultProblem & X880_ReturnResultProblem::operator=(unsigned v) { SetValue(v); return *this; } PObject * X880_ReturnResultProblem::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(X880_ReturnResultProblem::Class()), PInvalidCast); #endif return new X880_ReturnResultProblem(*this); } // // ReturnErrorProblem // X880_ReturnErrorProblem::X880_ReturnErrorProblem(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { } X880_ReturnErrorProblem & X880_ReturnErrorProblem::operator=(int v) { SetValue(v); return *this; } X880_ReturnErrorProblem & X880_ReturnErrorProblem::operator=(unsigned v) { SetValue(v); return *this; } PObject * X880_ReturnErrorProblem::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(X880_ReturnErrorProblem::Class()), PInvalidCast); #endif return new X880_ReturnErrorProblem(*this); } // // RejectProblem // X880_RejectProblem::X880_RejectProblem(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { } X880_RejectProblem & X880_RejectProblem::operator=(int v) { SetValue(v); return *this; } X880_RejectProblem & X880_RejectProblem::operator=(unsigned v) { SetValue(v); return *this; } PObject * X880_RejectProblem::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(X880_RejectProblem::Class()), PInvalidCast); #endif return new X880_RejectProblem(*this); } // // InvokeId // X880_InvokeId::X880_InvokeId(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { } X880_InvokeId & X880_InvokeId::operator=(int v) { SetValue(v); return *this; } X880_InvokeId & X880_InvokeId::operator=(unsigned v) { SetValue(v); return *this; } PObject * X880_InvokeId::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(X880_InvokeId::Class()), PInvalidCast); #endif return new X880_InvokeId(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_X880_Code[]={ {"local",0} ,{"global",1} }; #endif // // Code // X880_Code::X880_Code(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_X880_Code,2 #endif ) { } PBoolean X880_Code::CreateObject() { switch (tag) { case e_local : choice = new PASN_Integer(); return TRUE; case e_global : choice = new PASN_ObjectId(); return TRUE; } choice = NULL; return FALSE; } PObject * X880_Code::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(X880_Code::Class()), PInvalidCast); #endif return new X880_Code(*this); } // // ReturnResult_result // X880_ReturnResult_result::X880_ReturnResult_result(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void X880_ReturnResult_result::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "opcode = " << setprecision(indent) << m_opcode << '\n'; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison X880_ReturnResult_result::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, X880_ReturnResult_result), PInvalidCast); #endif const X880_ReturnResult_result & other = (const X880_ReturnResult_result &)obj; Comparison result; if ((result = m_opcode.Compare(other.m_opcode)) != EqualTo) return result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX X880_ReturnResult_result::GetDataLength() const { PINDEX length = 0; length += m_opcode.GetObjectLength(); length += m_result.GetObjectLength(); return length; } PBoolean X880_ReturnResult_result::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_opcode.Decode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void X880_ReturnResult_result::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_opcode.Encode(strm); m_result.Encode(strm); UnknownExtensionsEncode(strm); } PObject * X880_ReturnResult_result::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(X880_ReturnResult_result::Class()), PInvalidCast); #endif return new X880_ReturnResult_result(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_X880_Reject_problem[]={ {"general",0} ,{"invoke",1} ,{"returnResult",2} ,{"returnError",3} }; #endif // // Reject_problem // X880_Reject_problem::X880_Reject_problem(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_X880_Reject_problem,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 X880_Reject_problem::operator X880_GeneralProblem &() const #else X880_Reject_problem::operator X880_GeneralProblem &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), X880_GeneralProblem), PInvalidCast); #endif return *(X880_GeneralProblem *)choice; } X880_Reject_problem::operator const X880_GeneralProblem &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), X880_GeneralProblem), PInvalidCast); #endif return *(X880_GeneralProblem *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 X880_Reject_problem::operator X880_InvokeProblem &() const #else X880_Reject_problem::operator X880_InvokeProblem &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), X880_InvokeProblem), PInvalidCast); #endif return *(X880_InvokeProblem *)choice; } X880_Reject_problem::operator const X880_InvokeProblem &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), X880_InvokeProblem), PInvalidCast); #endif return *(X880_InvokeProblem *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 X880_Reject_problem::operator X880_ReturnResultProblem &() const #else X880_Reject_problem::operator X880_ReturnResultProblem &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), X880_ReturnResultProblem), PInvalidCast); #endif return *(X880_ReturnResultProblem *)choice; } X880_Reject_problem::operator const X880_ReturnResultProblem &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), X880_ReturnResultProblem), PInvalidCast); #endif return *(X880_ReturnResultProblem *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 X880_Reject_problem::operator X880_ReturnErrorProblem &() const #else X880_Reject_problem::operator X880_ReturnErrorProblem &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), X880_ReturnErrorProblem), PInvalidCast); #endif return *(X880_ReturnErrorProblem *)choice; } X880_Reject_problem::operator const X880_ReturnErrorProblem &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), X880_ReturnErrorProblem), PInvalidCast); #endif return *(X880_ReturnErrorProblem *)choice; } PBoolean X880_Reject_problem::CreateObject() { switch (tag) { case e_general : choice = new X880_GeneralProblem(); return TRUE; case e_invoke : choice = new X880_InvokeProblem(); return TRUE; case e_returnResult : choice = new X880_ReturnResultProblem(); return TRUE; case e_returnError : choice = new X880_ReturnErrorProblem(); return TRUE; } choice = NULL; return FALSE; } PObject * X880_Reject_problem::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(X880_Reject_problem::Class()), PInvalidCast); #endif return new X880_Reject_problem(*this); } // // Invoke // X880_Invoke::X880_Invoke(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, FALSE, 0) { m_invokeId.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void X880_Invoke::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "invokeId = " << setprecision(indent) << m_invokeId << '\n'; if (HasOptionalField(e_linkedId)) strm << setw(indent+11) << "linkedId = " << setprecision(indent) << m_linkedId << '\n'; strm << setw(indent+9) << "opcode = " << setprecision(indent) << m_opcode << '\n'; if (HasOptionalField(e_argument)) strm << setw(indent+11) << "argument = " << setprecision(indent) << m_argument << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison X880_Invoke::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, X880_Invoke), PInvalidCast); #endif const X880_Invoke & other = (const X880_Invoke &)obj; Comparison result; if ((result = m_invokeId.Compare(other.m_invokeId)) != EqualTo) return result; if ((result = m_linkedId.Compare(other.m_linkedId)) != EqualTo) return result; if ((result = m_opcode.Compare(other.m_opcode)) != EqualTo) return result; if ((result = m_argument.Compare(other.m_argument)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX X880_Invoke::GetDataLength() const { PINDEX length = 0; length += m_invokeId.GetObjectLength(); if (HasOptionalField(e_linkedId)) length += m_linkedId.GetObjectLength(); length += m_opcode.GetObjectLength(); if (HasOptionalField(e_argument)) length += m_argument.GetObjectLength(); return length; } PBoolean X880_Invoke::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_invokeId.Decode(strm)) return FALSE; if (HasOptionalField(e_linkedId) && !m_linkedId.Decode(strm)) return FALSE; if (!m_opcode.Decode(strm)) return FALSE; if (HasOptionalField(e_argument) && !m_argument.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void X880_Invoke::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_invokeId.Encode(strm); if (HasOptionalField(e_linkedId)) m_linkedId.Encode(strm); m_opcode.Encode(strm); if (HasOptionalField(e_argument)) m_argument.Encode(strm); UnknownExtensionsEncode(strm); } PObject * X880_Invoke::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(X880_Invoke::Class()), PInvalidCast); #endif return new X880_Invoke(*this); } // // ReturnResult // X880_ReturnResult::X880_ReturnResult(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { } #ifndef PASN_NOPRINTON void X880_ReturnResult::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "invokeId = " << setprecision(indent) << m_invokeId << '\n'; if (HasOptionalField(e_result)) strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison X880_ReturnResult::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, X880_ReturnResult), PInvalidCast); #endif const X880_ReturnResult & other = (const X880_ReturnResult &)obj; Comparison result; if ((result = m_invokeId.Compare(other.m_invokeId)) != EqualTo) return result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX X880_ReturnResult::GetDataLength() const { PINDEX length = 0; length += m_invokeId.GetObjectLength(); if (HasOptionalField(e_result)) length += m_result.GetObjectLength(); return length; } PBoolean X880_ReturnResult::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_invokeId.Decode(strm)) return FALSE; if (HasOptionalField(e_result) && !m_result.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void X880_ReturnResult::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_invokeId.Encode(strm); if (HasOptionalField(e_result)) m_result.Encode(strm); UnknownExtensionsEncode(strm); } PObject * X880_ReturnResult::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(X880_ReturnResult::Class()), PInvalidCast); #endif return new X880_ReturnResult(*this); } // // ReturnError // X880_ReturnError::X880_ReturnError(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { } #ifndef PASN_NOPRINTON void X880_ReturnError::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "invokeId = " << setprecision(indent) << m_invokeId << '\n'; strm << setw(indent+12) << "errorCode = " << setprecision(indent) << m_errorCode << '\n'; if (HasOptionalField(e_parameter)) strm << setw(indent+12) << "parameter = " << setprecision(indent) << m_parameter << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison X880_ReturnError::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, X880_ReturnError), PInvalidCast); #endif const X880_ReturnError & other = (const X880_ReturnError &)obj; Comparison result; if ((result = m_invokeId.Compare(other.m_invokeId)) != EqualTo) return result; if ((result = m_errorCode.Compare(other.m_errorCode)) != EqualTo) return result; if ((result = m_parameter.Compare(other.m_parameter)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX X880_ReturnError::GetDataLength() const { PINDEX length = 0; length += m_invokeId.GetObjectLength(); length += m_errorCode.GetObjectLength(); if (HasOptionalField(e_parameter)) length += m_parameter.GetObjectLength(); return length; } PBoolean X880_ReturnError::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_invokeId.Decode(strm)) return FALSE; if (!m_errorCode.Decode(strm)) return FALSE; if (HasOptionalField(e_parameter) && !m_parameter.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void X880_ReturnError::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_invokeId.Encode(strm); m_errorCode.Encode(strm); if (HasOptionalField(e_parameter)) m_parameter.Encode(strm); UnknownExtensionsEncode(strm); } PObject * X880_ReturnError::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(X880_ReturnError::Class()), PInvalidCast); #endif return new X880_ReturnError(*this); } // // Reject // X880_Reject::X880_Reject(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void X880_Reject::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "invokeId = " << setprecision(indent) << m_invokeId << '\n'; strm << setw(indent+10) << "problem = " << setprecision(indent) << m_problem << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison X880_Reject::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, X880_Reject), PInvalidCast); #endif const X880_Reject & other = (const X880_Reject &)obj; Comparison result; if ((result = m_invokeId.Compare(other.m_invokeId)) != EqualTo) return result; if ((result = m_problem.Compare(other.m_problem)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX X880_Reject::GetDataLength() const { PINDEX length = 0; length += m_invokeId.GetObjectLength(); length += m_problem.GetObjectLength(); return length; } PBoolean X880_Reject::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_invokeId.Decode(strm)) return FALSE; if (!m_problem.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void X880_Reject::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_invokeId.Encode(strm); m_problem.Encode(strm); UnknownExtensionsEncode(strm); } PObject * X880_Reject::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(X880_Reject::Class()), PInvalidCast); #endif return new X880_Reject(*this); } #endif // if ! H323_DISABLE_X880 // End of x880.cxx h323plus/src/opalvxml.cxx0000644000175000017500000002025211430554032014262 0ustar markmark/* * vxml.cxx * * VXML control for for Opal * * A H.323 IVR application. * * Copyright (C) 2002 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Portable Windows Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: opalvxml.cxx,v $ * Revision 1.4 2010/08/11 17:04:26 willamowius * fix codecs.h include (thanks "Francisco Olarte) * * Revision 1.3 2009/08/21 04:35:47 shorne * Expressly reference codecs.h to avoid problems with windows SDK codecs.h * * Revision 1.2 2008/05/23 11:22:23 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:51:07 shorne * First commit of h323plus * * Revision 1.22 2004/07/15 11:20:38 rjongbloed * Migrated changes from crs_vxnml_devel branch into main trunk * * Revision 1.21 2004/07/15 03:18:00 csoutheren * Migrated changes from crs_vxnml_devel branch into main trunk * * Revision 1.20.2.1 2004/07/07 07:10:11 csoutheren * Changed to use new factory based PWAVFile * Removed redundant blocking/unblocking when using G.723.1 * * Revision 1.20 2004/05/04 23:23:39 csoutheren * Removed usage of lpc10 and mscodecs * * Revision 1.19 2004/05/03 13:21:45 rjongbloed * Converted everything to be codec plug in freindly * Removed GSM and G.729 as now plug ins are "the way"! * * Revision 1.18 2002/12/10 23:50:25 robertj * Fixed some tracing issues * * Revision 1.17 2002/08/27 02:21:31 craigs * Added silence detection capability to fake G.723.1codec * * Revision 1.16 2002/08/15 04:55:26 robertj * Fixed shutdown problems with closing vxml session, leaks a thread. * Fixed potential problems with indirect channel Close() function. * * Revision 1.15 2002/08/15 02:19:42 robertj * Adjusted trace log levels for G.723.1 file codec read/write tracking. * * Revision 1.14 2002/08/07 13:53:05 craigs * Fixed problem with included opalvxml.h thanks to Vladmir Toncar * * Revision 1.13 2002/08/06 05:10:59 craigs * Moved most of stuff to ptclib * * Revision 1.12 2002/08/05 09:43:30 robertj * Added pragma interface/implementation * Moved virtual into .cxx file * * Revision 1.11 2002/07/29 15:10:36 craigs * Added autodelete option to PlayFile * * Revision 1.10 2002/07/29 12:54:42 craigs * Removed usages of cerr * * Revision 1.9 2002/07/18 04:17:12 robertj * Moved virtuals to source and changed name of G.723.1 file capability * * Revision 1.8 2002/07/10 13:16:58 craigs * Moved some VXML classes from Opal back into PTCLib * Added ability to repeat outputted data * * Revision 1.7 2002/07/09 08:48:41 craigs * Fixed trace messages * * Revision 1.6 2002/07/05 06:34:04 craigs * Changed comments and trace messages * * Revision 1.5 2002/07/03 04:58:13 robertj * Changed for compatibility with older GNU compilers * * Revision 1.4 2002/07/02 06:32:51 craigs * Added recording functions * * Revision 1.3 2002/06/28 02:42:11 craigs * Fixed problem with G.723.1 file naming conventions * Fixed problem with incorrect file open mode * * Revision 1.2 2002/06/28 01:24:03 robertj * Fixe dproblem with compiling without expat library. * * Revision 1.1 2002/06/27 05:44:11 craigs * Initial version * * Revision 1.2 2002/06/26 09:05:28 csoutheren * Added ability to utter various "sayas" types within prompts * * Revision 1.1 2002/06/26 01:13:53 csoutheren * Disassociated VXML and Opal/OpenH323 specific elements * * Revision 1.2 2002/06/21 08:18:22 csoutheren * Added start of grammar handling * * Revision 1.1 2002/06/20 06:35:44 csoutheren * Initial version * */ #include #ifdef __GNUC__ #pragma implementation "opalvxml.h" #endif #include "opalvxml.h" #if P_EXPAT #include #include #include #endif #ifdef _MSC_VER #include "../include/codecs.h" #else #include "codecs.h" #endif #define G7231_SAMPLES_PER_BLOCK 240 #define G7231_BANDWIDTH (6300/100) /////////////////////////////////////////////////////////////// G7231_File_Capability::G7231_File_Capability() : H323AudioCapability(8, 4) { } unsigned G7231_File_Capability::GetSubType() const { return H245_AudioCapability::e_g7231; } PString G7231_File_Capability::GetFormatName() const { return "G.723.1{file}"; } PBoolean G7231_File_Capability::OnSendingPDU(H245_AudioCapability & cap, unsigned packetSize) const { // set the choice to the correct type cap.SetTag(GetSubType()); // get choice data H245_AudioCapability_g7231 & g7231 = cap; // max number of audio frames per PDU we want to send g7231.m_maxAl_sduAudioFrames = packetSize; // enable silence suppression g7231.m_silenceSuppression = TRUE; return TRUE; } PBoolean G7231_File_Capability::OnReceivedPDU(const H245_AudioCapability & cap, unsigned & packetSize) { const H245_AudioCapability_g7231 & g7231 = cap; packetSize = g7231.m_maxAl_sduAudioFrames; return TRUE; } PObject * G7231_File_Capability::Clone() const { return new G7231_File_Capability(*this); } H323Codec * G7231_File_Capability::CreateCodec(H323Codec::Direction direction) const { return new G7231_File_Codec(direction); } /////////////////////////////////////////////////////////////// G7231_File_Codec::G7231_File_Codec(Direction dir) : H323AudioCodec(OPAL_G7231_6k3, dir) { lastFrameLen = 4; } int G7231_File_Codec::GetFrameLen(int val) { static const int frameLen[] = { 24, 20, 4, 1 }; return frameLen[val & 3]; } PBoolean G7231_File_Codec::Read(BYTE * buffer, unsigned & length, RTP_DataFrame &) { if (rawDataChannel == NULL) return FALSE; if (!rawDataChannel->Read(buffer, 24)) { PTRACE(1, "G7231WAV\tRead failed"); return FALSE; } lastFrameLen = length = G7231_File_Codec::GetFrameLen(buffer[0]); return TRUE; } PBoolean G7231_File_Codec::Write(const BYTE * buffer, unsigned length, const RTP_DataFrame & /* rtp */, unsigned & writtenLength) { if (rawDataChannel == NULL) return TRUE; static const BYTE silence[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // If the length is zero, output silence to the file.. if (length == 0) { PTRACE(6,"G7231WAV\tZero length frame"); writtenLength = 0; return rawDataChannel->Write(silence, 24); } int writeLen; switch (buffer[0]&3) { case 0: writeLen = 24; break; case 1: writeLen = 20; break; case 2: // Windows Media Player cannot play 4 byte SID (silence) frames. // So write out a 24 byte frame of silence instead. PTRACE(5, "G7231WAV\tReplacing SID with 24 byte frame"); writtenLength = 4; return rawDataChannel->Write(silence, 24); default : writeLen = 1; break; } PTRACE(6, "G7231WAV\tFrame length = " <Write(buffer, writeLen); } unsigned G7231_File_Codec::GetBandwidth() const { return G7231_BANDWIDTH; } PBoolean G7231_File_Codec::IsRawDataChannelNative() const { return TRUE; } unsigned G7231_File_Codec::GetAverageSignalLevel() { if (lastFrameLen == 4) return 0; else return UINT_MAX; } /////////////////////////////////////////////////////////////// #if P_EXPAT OpalVXMLSession::OpalVXMLSession(H323Connection * _conn, PTextToSpeech * tts, PBoolean autoDelete) : PVXMLSession(tts, autoDelete), conn(_conn) { } PBoolean OpalVXMLSession::Close() { PBoolean ok = PVXMLSession::Close(); conn->ClearCall(); return ok; } #endif // End of File ///////////////////////////////////////////////////////////// h323plus/src/h245_1.cxx0000644000175000017500000156560311015524313013337 0ustar markmark// // h245_1.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h245.h" #endif #include #include "h245.h" #define new PNEW #if ! H323_DISABLE_H245 #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MultimediaSystemControlMessage[]={ {"request",0} ,{"response",1} ,{"command",2} ,{"indication",3} }; #endif // // MultimediaSystemControlMessage // H245_MultimediaSystemControlMessage::H245_MultimediaSystemControlMessage(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MultimediaSystemControlMessage,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultimediaSystemControlMessage::operator H245_RequestMessage &() const #else H245_MultimediaSystemControlMessage::operator H245_RequestMessage &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestMessage), PInvalidCast); #endif return *(H245_RequestMessage *)choice; } H245_MultimediaSystemControlMessage::operator const H245_RequestMessage &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestMessage), PInvalidCast); #endif return *(H245_RequestMessage *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultimediaSystemControlMessage::operator H245_ResponseMessage &() const #else H245_MultimediaSystemControlMessage::operator H245_ResponseMessage &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ResponseMessage), PInvalidCast); #endif return *(H245_ResponseMessage *)choice; } H245_MultimediaSystemControlMessage::operator const H245_ResponseMessage &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ResponseMessage), PInvalidCast); #endif return *(H245_ResponseMessage *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultimediaSystemControlMessage::operator H245_CommandMessage &() const #else H245_MultimediaSystemControlMessage::operator H245_CommandMessage &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_CommandMessage), PInvalidCast); #endif return *(H245_CommandMessage *)choice; } H245_MultimediaSystemControlMessage::operator const H245_CommandMessage &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_CommandMessage), PInvalidCast); #endif return *(H245_CommandMessage *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultimediaSystemControlMessage::operator H245_IndicationMessage &() const #else H245_MultimediaSystemControlMessage::operator H245_IndicationMessage &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_IndicationMessage), PInvalidCast); #endif return *(H245_IndicationMessage *)choice; } H245_MultimediaSystemControlMessage::operator const H245_IndicationMessage &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_IndicationMessage), PInvalidCast); #endif return *(H245_IndicationMessage *)choice; } PBoolean H245_MultimediaSystemControlMessage::CreateObject() { switch (tag) { case e_request : choice = new H245_RequestMessage(); return TRUE; case e_response : choice = new H245_ResponseMessage(); return TRUE; case e_command : choice = new H245_CommandMessage(); return TRUE; case e_indication : choice = new H245_IndicationMessage(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_MultimediaSystemControlMessage::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultimediaSystemControlMessage::Class()), PInvalidCast); #endif return new H245_MultimediaSystemControlMessage(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_RequestMessage[]={ {"nonStandard",0} ,{"masterSlaveDetermination",1} ,{"terminalCapabilitySet",2} ,{"openLogicalChannel",3} ,{"closeLogicalChannel",4} ,{"requestChannelClose",5} ,{"multiplexEntrySend",6} ,{"requestMultiplexEntry",7} ,{"requestMode",8} ,{"roundTripDelayRequest",9} ,{"maintenanceLoopRequest",10} ,{"communicationModeRequest",11} ,{"conferenceRequest",12} ,{"multilinkRequest",13} ,{"logicalChannelRateRequest",14} ,{"genericRequest",15} }; #endif // // RequestMessage // H245_RequestMessage::H245_RequestMessage(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 11, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_RequestMessage,16 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RequestMessage::operator H245_NonStandardMessage &() const #else H245_RequestMessage::operator H245_NonStandardMessage &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardMessage), PInvalidCast); #endif return *(H245_NonStandardMessage *)choice; } H245_RequestMessage::operator const H245_NonStandardMessage &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardMessage), PInvalidCast); #endif return *(H245_NonStandardMessage *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RequestMessage::operator H245_MasterSlaveDetermination &() const #else H245_RequestMessage::operator H245_MasterSlaveDetermination &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MasterSlaveDetermination), PInvalidCast); #endif return *(H245_MasterSlaveDetermination *)choice; } H245_RequestMessage::operator const H245_MasterSlaveDetermination &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MasterSlaveDetermination), PInvalidCast); #endif return *(H245_MasterSlaveDetermination *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RequestMessage::operator H245_TerminalCapabilitySet &() const #else H245_RequestMessage::operator H245_TerminalCapabilitySet &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_TerminalCapabilitySet), PInvalidCast); #endif return *(H245_TerminalCapabilitySet *)choice; } H245_RequestMessage::operator const H245_TerminalCapabilitySet &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_TerminalCapabilitySet), PInvalidCast); #endif return *(H245_TerminalCapabilitySet *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RequestMessage::operator H245_OpenLogicalChannel &() const #else H245_RequestMessage::operator H245_OpenLogicalChannel &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_OpenLogicalChannel), PInvalidCast); #endif return *(H245_OpenLogicalChannel *)choice; } H245_RequestMessage::operator const H245_OpenLogicalChannel &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_OpenLogicalChannel), PInvalidCast); #endif return *(H245_OpenLogicalChannel *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RequestMessage::operator H245_CloseLogicalChannel &() const #else H245_RequestMessage::operator H245_CloseLogicalChannel &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_CloseLogicalChannel), PInvalidCast); #endif return *(H245_CloseLogicalChannel *)choice; } H245_RequestMessage::operator const H245_CloseLogicalChannel &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_CloseLogicalChannel), PInvalidCast); #endif return *(H245_CloseLogicalChannel *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RequestMessage::operator H245_RequestChannelClose &() const #else H245_RequestMessage::operator H245_RequestChannelClose &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestChannelClose), PInvalidCast); #endif return *(H245_RequestChannelClose *)choice; } H245_RequestMessage::operator const H245_RequestChannelClose &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestChannelClose), PInvalidCast); #endif return *(H245_RequestChannelClose *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RequestMessage::operator H245_MultiplexEntrySend &() const #else H245_RequestMessage::operator H245_MultiplexEntrySend &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultiplexEntrySend), PInvalidCast); #endif return *(H245_MultiplexEntrySend *)choice; } H245_RequestMessage::operator const H245_MultiplexEntrySend &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultiplexEntrySend), PInvalidCast); #endif return *(H245_MultiplexEntrySend *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RequestMessage::operator H245_RequestMultiplexEntry &() const #else H245_RequestMessage::operator H245_RequestMultiplexEntry &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestMultiplexEntry), PInvalidCast); #endif return *(H245_RequestMultiplexEntry *)choice; } H245_RequestMessage::operator const H245_RequestMultiplexEntry &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestMultiplexEntry), PInvalidCast); #endif return *(H245_RequestMultiplexEntry *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RequestMessage::operator H245_RequestMode &() const #else H245_RequestMessage::operator H245_RequestMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestMode), PInvalidCast); #endif return *(H245_RequestMode *)choice; } H245_RequestMessage::operator const H245_RequestMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestMode), PInvalidCast); #endif return *(H245_RequestMode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RequestMessage::operator H245_RoundTripDelayRequest &() const #else H245_RequestMessage::operator H245_RoundTripDelayRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RoundTripDelayRequest), PInvalidCast); #endif return *(H245_RoundTripDelayRequest *)choice; } H245_RequestMessage::operator const H245_RoundTripDelayRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RoundTripDelayRequest), PInvalidCast); #endif return *(H245_RoundTripDelayRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RequestMessage::operator H245_MaintenanceLoopRequest &() const #else H245_RequestMessage::operator H245_MaintenanceLoopRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MaintenanceLoopRequest), PInvalidCast); #endif return *(H245_MaintenanceLoopRequest *)choice; } H245_RequestMessage::operator const H245_MaintenanceLoopRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MaintenanceLoopRequest), PInvalidCast); #endif return *(H245_MaintenanceLoopRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RequestMessage::operator H245_CommunicationModeRequest &() const #else H245_RequestMessage::operator H245_CommunicationModeRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_CommunicationModeRequest), PInvalidCast); #endif return *(H245_CommunicationModeRequest *)choice; } H245_RequestMessage::operator const H245_CommunicationModeRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_CommunicationModeRequest), PInvalidCast); #endif return *(H245_CommunicationModeRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RequestMessage::operator H245_ConferenceRequest &() const #else H245_RequestMessage::operator H245_ConferenceRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceRequest), PInvalidCast); #endif return *(H245_ConferenceRequest *)choice; } H245_RequestMessage::operator const H245_ConferenceRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceRequest), PInvalidCast); #endif return *(H245_ConferenceRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RequestMessage::operator H245_MultilinkRequest &() const #else H245_RequestMessage::operator H245_MultilinkRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkRequest), PInvalidCast); #endif return *(H245_MultilinkRequest *)choice; } H245_RequestMessage::operator const H245_MultilinkRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkRequest), PInvalidCast); #endif return *(H245_MultilinkRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RequestMessage::operator H245_LogicalChannelRateRequest &() const #else H245_RequestMessage::operator H245_LogicalChannelRateRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelRateRequest), PInvalidCast); #endif return *(H245_LogicalChannelRateRequest *)choice; } H245_RequestMessage::operator const H245_LogicalChannelRateRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelRateRequest), PInvalidCast); #endif return *(H245_LogicalChannelRateRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RequestMessage::operator H245_GenericMessage &() const #else H245_RequestMessage::operator H245_GenericMessage &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericMessage), PInvalidCast); #endif return *(H245_GenericMessage *)choice; } H245_RequestMessage::operator const H245_GenericMessage &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericMessage), PInvalidCast); #endif return *(H245_GenericMessage *)choice; } PBoolean H245_RequestMessage::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardMessage(); return TRUE; case e_masterSlaveDetermination : choice = new H245_MasterSlaveDetermination(); return TRUE; case e_terminalCapabilitySet : choice = new H245_TerminalCapabilitySet(); return TRUE; case e_openLogicalChannel : choice = new H245_OpenLogicalChannel(); return TRUE; case e_closeLogicalChannel : choice = new H245_CloseLogicalChannel(); return TRUE; case e_requestChannelClose : choice = new H245_RequestChannelClose(); return TRUE; case e_multiplexEntrySend : choice = new H245_MultiplexEntrySend(); return TRUE; case e_requestMultiplexEntry : choice = new H245_RequestMultiplexEntry(); return TRUE; case e_requestMode : choice = new H245_RequestMode(); return TRUE; case e_roundTripDelayRequest : choice = new H245_RoundTripDelayRequest(); return TRUE; case e_maintenanceLoopRequest : choice = new H245_MaintenanceLoopRequest(); return TRUE; case e_communicationModeRequest : choice = new H245_CommunicationModeRequest(); return TRUE; case e_conferenceRequest : choice = new H245_ConferenceRequest(); return TRUE; case e_multilinkRequest : choice = new H245_MultilinkRequest(); return TRUE; case e_logicalChannelRateRequest : choice = new H245_LogicalChannelRateRequest(); return TRUE; case e_genericRequest : choice = new H245_GenericMessage(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_RequestMessage::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RequestMessage::Class()), PInvalidCast); #endif return new H245_RequestMessage(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_ResponseMessage[]={ {"nonStandard",0} ,{"masterSlaveDeterminationAck",1} ,{"masterSlaveDeterminationReject",2} ,{"terminalCapabilitySetAck",3} ,{"terminalCapabilitySetReject",4} ,{"openLogicalChannelAck",5} ,{"openLogicalChannelReject",6} ,{"closeLogicalChannelAck",7} ,{"requestChannelCloseAck",8} ,{"requestChannelCloseReject",9} ,{"multiplexEntrySendAck",10} ,{"multiplexEntrySendReject",11} ,{"requestMultiplexEntryAck",12} ,{"requestMultiplexEntryReject",13} ,{"requestModeAck",14} ,{"requestModeReject",15} ,{"roundTripDelayResponse",16} ,{"maintenanceLoopAck",17} ,{"maintenanceLoopReject",18} ,{"communicationModeResponse",19} ,{"conferenceResponse",20} ,{"multilinkResponse",21} ,{"logicalChannelRateAcknowledge",22} ,{"logicalChannelRateReject",23} ,{"genericResponse",24} }; #endif // // ResponseMessage // H245_ResponseMessage::H245_ResponseMessage(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 19, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_ResponseMessage,25 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_NonStandardMessage &() const #else H245_ResponseMessage::operator H245_NonStandardMessage &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardMessage), PInvalidCast); #endif return *(H245_NonStandardMessage *)choice; } H245_ResponseMessage::operator const H245_NonStandardMessage &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardMessage), PInvalidCast); #endif return *(H245_NonStandardMessage *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_MasterSlaveDeterminationAck &() const #else H245_ResponseMessage::operator H245_MasterSlaveDeterminationAck &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MasterSlaveDeterminationAck), PInvalidCast); #endif return *(H245_MasterSlaveDeterminationAck *)choice; } H245_ResponseMessage::operator const H245_MasterSlaveDeterminationAck &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MasterSlaveDeterminationAck), PInvalidCast); #endif return *(H245_MasterSlaveDeterminationAck *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_MasterSlaveDeterminationReject &() const #else H245_ResponseMessage::operator H245_MasterSlaveDeterminationReject &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MasterSlaveDeterminationReject), PInvalidCast); #endif return *(H245_MasterSlaveDeterminationReject *)choice; } H245_ResponseMessage::operator const H245_MasterSlaveDeterminationReject &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MasterSlaveDeterminationReject), PInvalidCast); #endif return *(H245_MasterSlaveDeterminationReject *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_TerminalCapabilitySetAck &() const #else H245_ResponseMessage::operator H245_TerminalCapabilitySetAck &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_TerminalCapabilitySetAck), PInvalidCast); #endif return *(H245_TerminalCapabilitySetAck *)choice; } H245_ResponseMessage::operator const H245_TerminalCapabilitySetAck &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_TerminalCapabilitySetAck), PInvalidCast); #endif return *(H245_TerminalCapabilitySetAck *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_TerminalCapabilitySetReject &() const #else H245_ResponseMessage::operator H245_TerminalCapabilitySetReject &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_TerminalCapabilitySetReject), PInvalidCast); #endif return *(H245_TerminalCapabilitySetReject *)choice; } H245_ResponseMessage::operator const H245_TerminalCapabilitySetReject &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_TerminalCapabilitySetReject), PInvalidCast); #endif return *(H245_TerminalCapabilitySetReject *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_OpenLogicalChannelAck &() const #else H245_ResponseMessage::operator H245_OpenLogicalChannelAck &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_OpenLogicalChannelAck), PInvalidCast); #endif return *(H245_OpenLogicalChannelAck *)choice; } H245_ResponseMessage::operator const H245_OpenLogicalChannelAck &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_OpenLogicalChannelAck), PInvalidCast); #endif return *(H245_OpenLogicalChannelAck *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_OpenLogicalChannelReject &() const #else H245_ResponseMessage::operator H245_OpenLogicalChannelReject &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_OpenLogicalChannelReject), PInvalidCast); #endif return *(H245_OpenLogicalChannelReject *)choice; } H245_ResponseMessage::operator const H245_OpenLogicalChannelReject &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_OpenLogicalChannelReject), PInvalidCast); #endif return *(H245_OpenLogicalChannelReject *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_CloseLogicalChannelAck &() const #else H245_ResponseMessage::operator H245_CloseLogicalChannelAck &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_CloseLogicalChannelAck), PInvalidCast); #endif return *(H245_CloseLogicalChannelAck *)choice; } H245_ResponseMessage::operator const H245_CloseLogicalChannelAck &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_CloseLogicalChannelAck), PInvalidCast); #endif return *(H245_CloseLogicalChannelAck *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_RequestChannelCloseAck &() const #else H245_ResponseMessage::operator H245_RequestChannelCloseAck &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestChannelCloseAck), PInvalidCast); #endif return *(H245_RequestChannelCloseAck *)choice; } H245_ResponseMessage::operator const H245_RequestChannelCloseAck &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestChannelCloseAck), PInvalidCast); #endif return *(H245_RequestChannelCloseAck *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_RequestChannelCloseReject &() const #else H245_ResponseMessage::operator H245_RequestChannelCloseReject &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestChannelCloseReject), PInvalidCast); #endif return *(H245_RequestChannelCloseReject *)choice; } H245_ResponseMessage::operator const H245_RequestChannelCloseReject &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestChannelCloseReject), PInvalidCast); #endif return *(H245_RequestChannelCloseReject *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_MultiplexEntrySendAck &() const #else H245_ResponseMessage::operator H245_MultiplexEntrySendAck &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultiplexEntrySendAck), PInvalidCast); #endif return *(H245_MultiplexEntrySendAck *)choice; } H245_ResponseMessage::operator const H245_MultiplexEntrySendAck &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultiplexEntrySendAck), PInvalidCast); #endif return *(H245_MultiplexEntrySendAck *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_MultiplexEntrySendReject &() const #else H245_ResponseMessage::operator H245_MultiplexEntrySendReject &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultiplexEntrySendReject), PInvalidCast); #endif return *(H245_MultiplexEntrySendReject *)choice; } H245_ResponseMessage::operator const H245_MultiplexEntrySendReject &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultiplexEntrySendReject), PInvalidCast); #endif return *(H245_MultiplexEntrySendReject *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_RequestMultiplexEntryAck &() const #else H245_ResponseMessage::operator H245_RequestMultiplexEntryAck &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestMultiplexEntryAck), PInvalidCast); #endif return *(H245_RequestMultiplexEntryAck *)choice; } H245_ResponseMessage::operator const H245_RequestMultiplexEntryAck &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestMultiplexEntryAck), PInvalidCast); #endif return *(H245_RequestMultiplexEntryAck *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_RequestMultiplexEntryReject &() const #else H245_ResponseMessage::operator H245_RequestMultiplexEntryReject &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestMultiplexEntryReject), PInvalidCast); #endif return *(H245_RequestMultiplexEntryReject *)choice; } H245_ResponseMessage::operator const H245_RequestMultiplexEntryReject &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestMultiplexEntryReject), PInvalidCast); #endif return *(H245_RequestMultiplexEntryReject *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_RequestModeAck &() const #else H245_ResponseMessage::operator H245_RequestModeAck &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestModeAck), PInvalidCast); #endif return *(H245_RequestModeAck *)choice; } H245_ResponseMessage::operator const H245_RequestModeAck &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestModeAck), PInvalidCast); #endif return *(H245_RequestModeAck *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_RequestModeReject &() const #else H245_ResponseMessage::operator H245_RequestModeReject &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestModeReject), PInvalidCast); #endif return *(H245_RequestModeReject *)choice; } H245_ResponseMessage::operator const H245_RequestModeReject &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestModeReject), PInvalidCast); #endif return *(H245_RequestModeReject *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_RoundTripDelayResponse &() const #else H245_ResponseMessage::operator H245_RoundTripDelayResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RoundTripDelayResponse), PInvalidCast); #endif return *(H245_RoundTripDelayResponse *)choice; } H245_ResponseMessage::operator const H245_RoundTripDelayResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RoundTripDelayResponse), PInvalidCast); #endif return *(H245_RoundTripDelayResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_MaintenanceLoopAck &() const #else H245_ResponseMessage::operator H245_MaintenanceLoopAck &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MaintenanceLoopAck), PInvalidCast); #endif return *(H245_MaintenanceLoopAck *)choice; } H245_ResponseMessage::operator const H245_MaintenanceLoopAck &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MaintenanceLoopAck), PInvalidCast); #endif return *(H245_MaintenanceLoopAck *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_MaintenanceLoopReject &() const #else H245_ResponseMessage::operator H245_MaintenanceLoopReject &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MaintenanceLoopReject), PInvalidCast); #endif return *(H245_MaintenanceLoopReject *)choice; } H245_ResponseMessage::operator const H245_MaintenanceLoopReject &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MaintenanceLoopReject), PInvalidCast); #endif return *(H245_MaintenanceLoopReject *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_CommunicationModeResponse &() const #else H245_ResponseMessage::operator H245_CommunicationModeResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_CommunicationModeResponse), PInvalidCast); #endif return *(H245_CommunicationModeResponse *)choice; } H245_ResponseMessage::operator const H245_CommunicationModeResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_CommunicationModeResponse), PInvalidCast); #endif return *(H245_CommunicationModeResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_ConferenceResponse &() const #else H245_ResponseMessage::operator H245_ConferenceResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse), PInvalidCast); #endif return *(H245_ConferenceResponse *)choice; } H245_ResponseMessage::operator const H245_ConferenceResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse), PInvalidCast); #endif return *(H245_ConferenceResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_MultilinkResponse &() const #else H245_ResponseMessage::operator H245_MultilinkResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkResponse), PInvalidCast); #endif return *(H245_MultilinkResponse *)choice; } H245_ResponseMessage::operator const H245_MultilinkResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkResponse), PInvalidCast); #endif return *(H245_MultilinkResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_LogicalChannelRateAcknowledge &() const #else H245_ResponseMessage::operator H245_LogicalChannelRateAcknowledge &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelRateAcknowledge), PInvalidCast); #endif return *(H245_LogicalChannelRateAcknowledge *)choice; } H245_ResponseMessage::operator const H245_LogicalChannelRateAcknowledge &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelRateAcknowledge), PInvalidCast); #endif return *(H245_LogicalChannelRateAcknowledge *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_LogicalChannelRateReject &() const #else H245_ResponseMessage::operator H245_LogicalChannelRateReject &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelRateReject), PInvalidCast); #endif return *(H245_LogicalChannelRateReject *)choice; } H245_ResponseMessage::operator const H245_LogicalChannelRateReject &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelRateReject), PInvalidCast); #endif return *(H245_LogicalChannelRateReject *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ResponseMessage::operator H245_GenericMessage &() const #else H245_ResponseMessage::operator H245_GenericMessage &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericMessage), PInvalidCast); #endif return *(H245_GenericMessage *)choice; } H245_ResponseMessage::operator const H245_GenericMessage &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericMessage), PInvalidCast); #endif return *(H245_GenericMessage *)choice; } PBoolean H245_ResponseMessage::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardMessage(); return TRUE; case e_masterSlaveDeterminationAck : choice = new H245_MasterSlaveDeterminationAck(); return TRUE; case e_masterSlaveDeterminationReject : choice = new H245_MasterSlaveDeterminationReject(); return TRUE; case e_terminalCapabilitySetAck : choice = new H245_TerminalCapabilitySetAck(); return TRUE; case e_terminalCapabilitySetReject : choice = new H245_TerminalCapabilitySetReject(); return TRUE; case e_openLogicalChannelAck : choice = new H245_OpenLogicalChannelAck(); return TRUE; case e_openLogicalChannelReject : choice = new H245_OpenLogicalChannelReject(); return TRUE; case e_closeLogicalChannelAck : choice = new H245_CloseLogicalChannelAck(); return TRUE; case e_requestChannelCloseAck : choice = new H245_RequestChannelCloseAck(); return TRUE; case e_requestChannelCloseReject : choice = new H245_RequestChannelCloseReject(); return TRUE; case e_multiplexEntrySendAck : choice = new H245_MultiplexEntrySendAck(); return TRUE; case e_multiplexEntrySendReject : choice = new H245_MultiplexEntrySendReject(); return TRUE; case e_requestMultiplexEntryAck : choice = new H245_RequestMultiplexEntryAck(); return TRUE; case e_requestMultiplexEntryReject : choice = new H245_RequestMultiplexEntryReject(); return TRUE; case e_requestModeAck : choice = new H245_RequestModeAck(); return TRUE; case e_requestModeReject : choice = new H245_RequestModeReject(); return TRUE; case e_roundTripDelayResponse : choice = new H245_RoundTripDelayResponse(); return TRUE; case e_maintenanceLoopAck : choice = new H245_MaintenanceLoopAck(); return TRUE; case e_maintenanceLoopReject : choice = new H245_MaintenanceLoopReject(); return TRUE; case e_communicationModeResponse : choice = new H245_CommunicationModeResponse(); return TRUE; case e_conferenceResponse : choice = new H245_ConferenceResponse(); return TRUE; case e_multilinkResponse : choice = new H245_MultilinkResponse(); return TRUE; case e_logicalChannelRateAcknowledge : choice = new H245_LogicalChannelRateAcknowledge(); return TRUE; case e_logicalChannelRateReject : choice = new H245_LogicalChannelRateReject(); return TRUE; case e_genericResponse : choice = new H245_GenericMessage(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_ResponseMessage::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ResponseMessage::Class()), PInvalidCast); #endif return new H245_ResponseMessage(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_CommandMessage[]={ {"nonStandard",0} ,{"maintenanceLoopOffCommand",1} ,{"sendTerminalCapabilitySet",2} ,{"encryptionCommand",3} ,{"flowControlCommand",4} ,{"endSessionCommand",5} ,{"miscellaneousCommand",6} ,{"communicationModeCommand",7} ,{"conferenceCommand",8} ,{"h223MultiplexReconfiguration",9} ,{"newATMVCCommand",10} ,{"mobileMultilinkReconfigurationCommand",11} ,{"genericCommand",12} }; #endif // // CommandMessage // H245_CommandMessage::H245_CommandMessage(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 7, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_CommandMessage,13 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_CommandMessage::operator H245_NonStandardMessage &() const #else H245_CommandMessage::operator H245_NonStandardMessage &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardMessage), PInvalidCast); #endif return *(H245_NonStandardMessage *)choice; } H245_CommandMessage::operator const H245_NonStandardMessage &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardMessage), PInvalidCast); #endif return *(H245_NonStandardMessage *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_CommandMessage::operator H245_MaintenanceLoopOffCommand &() const #else H245_CommandMessage::operator H245_MaintenanceLoopOffCommand &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MaintenanceLoopOffCommand), PInvalidCast); #endif return *(H245_MaintenanceLoopOffCommand *)choice; } H245_CommandMessage::operator const H245_MaintenanceLoopOffCommand &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MaintenanceLoopOffCommand), PInvalidCast); #endif return *(H245_MaintenanceLoopOffCommand *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_CommandMessage::operator H245_SendTerminalCapabilitySet &() const #else H245_CommandMessage::operator H245_SendTerminalCapabilitySet &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_SendTerminalCapabilitySet), PInvalidCast); #endif return *(H245_SendTerminalCapabilitySet *)choice; } H245_CommandMessage::operator const H245_SendTerminalCapabilitySet &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_SendTerminalCapabilitySet), PInvalidCast); #endif return *(H245_SendTerminalCapabilitySet *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_CommandMessage::operator H245_EncryptionCommand &() const #else H245_CommandMessage::operator H245_EncryptionCommand &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_EncryptionCommand), PInvalidCast); #endif return *(H245_EncryptionCommand *)choice; } H245_CommandMessage::operator const H245_EncryptionCommand &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_EncryptionCommand), PInvalidCast); #endif return *(H245_EncryptionCommand *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_CommandMessage::operator H245_FlowControlCommand &() const #else H245_CommandMessage::operator H245_FlowControlCommand &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FlowControlCommand), PInvalidCast); #endif return *(H245_FlowControlCommand *)choice; } H245_CommandMessage::operator const H245_FlowControlCommand &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FlowControlCommand), PInvalidCast); #endif return *(H245_FlowControlCommand *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_CommandMessage::operator H245_EndSessionCommand &() const #else H245_CommandMessage::operator H245_EndSessionCommand &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_EndSessionCommand), PInvalidCast); #endif return *(H245_EndSessionCommand *)choice; } H245_CommandMessage::operator const H245_EndSessionCommand &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_EndSessionCommand), PInvalidCast); #endif return *(H245_EndSessionCommand *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_CommandMessage::operator H245_MiscellaneousCommand &() const #else H245_CommandMessage::operator H245_MiscellaneousCommand &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MiscellaneousCommand), PInvalidCast); #endif return *(H245_MiscellaneousCommand *)choice; } H245_CommandMessage::operator const H245_MiscellaneousCommand &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MiscellaneousCommand), PInvalidCast); #endif return *(H245_MiscellaneousCommand *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_CommandMessage::operator H245_CommunicationModeCommand &() const #else H245_CommandMessage::operator H245_CommunicationModeCommand &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_CommunicationModeCommand), PInvalidCast); #endif return *(H245_CommunicationModeCommand *)choice; } H245_CommandMessage::operator const H245_CommunicationModeCommand &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_CommunicationModeCommand), PInvalidCast); #endif return *(H245_CommunicationModeCommand *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_CommandMessage::operator H245_ConferenceCommand &() const #else H245_CommandMessage::operator H245_ConferenceCommand &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceCommand), PInvalidCast); #endif return *(H245_ConferenceCommand *)choice; } H245_CommandMessage::operator const H245_ConferenceCommand &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceCommand), PInvalidCast); #endif return *(H245_ConferenceCommand *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_CommandMessage::operator H245_H223MultiplexReconfiguration &() const #else H245_CommandMessage::operator H245_H223MultiplexReconfiguration &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223MultiplexReconfiguration), PInvalidCast); #endif return *(H245_H223MultiplexReconfiguration *)choice; } H245_CommandMessage::operator const H245_H223MultiplexReconfiguration &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223MultiplexReconfiguration), PInvalidCast); #endif return *(H245_H223MultiplexReconfiguration *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_CommandMessage::operator H245_NewATMVCCommand &() const #else H245_CommandMessage::operator H245_NewATMVCCommand &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NewATMVCCommand), PInvalidCast); #endif return *(H245_NewATMVCCommand *)choice; } H245_CommandMessage::operator const H245_NewATMVCCommand &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NewATMVCCommand), PInvalidCast); #endif return *(H245_NewATMVCCommand *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_CommandMessage::operator H245_MobileMultilinkReconfigurationCommand &() const #else H245_CommandMessage::operator H245_MobileMultilinkReconfigurationCommand &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MobileMultilinkReconfigurationCommand), PInvalidCast); #endif return *(H245_MobileMultilinkReconfigurationCommand *)choice; } H245_CommandMessage::operator const H245_MobileMultilinkReconfigurationCommand &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MobileMultilinkReconfigurationCommand), PInvalidCast); #endif return *(H245_MobileMultilinkReconfigurationCommand *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_CommandMessage::operator H245_GenericMessage &() const #else H245_CommandMessage::operator H245_GenericMessage &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericMessage), PInvalidCast); #endif return *(H245_GenericMessage *)choice; } H245_CommandMessage::operator const H245_GenericMessage &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericMessage), PInvalidCast); #endif return *(H245_GenericMessage *)choice; } PBoolean H245_CommandMessage::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardMessage(); return TRUE; case e_maintenanceLoopOffCommand : choice = new H245_MaintenanceLoopOffCommand(); return TRUE; case e_sendTerminalCapabilitySet : choice = new H245_SendTerminalCapabilitySet(); return TRUE; case e_encryptionCommand : choice = new H245_EncryptionCommand(); return TRUE; case e_flowControlCommand : choice = new H245_FlowControlCommand(); return TRUE; case e_endSessionCommand : choice = new H245_EndSessionCommand(); return TRUE; case e_miscellaneousCommand : choice = new H245_MiscellaneousCommand(); return TRUE; case e_communicationModeCommand : choice = new H245_CommunicationModeCommand(); return TRUE; case e_conferenceCommand : choice = new H245_ConferenceCommand(); return TRUE; case e_h223MultiplexReconfiguration : choice = new H245_H223MultiplexReconfiguration(); return TRUE; case e_newATMVCCommand : choice = new H245_NewATMVCCommand(); return TRUE; case e_mobileMultilinkReconfigurationCommand : choice = new H245_MobileMultilinkReconfigurationCommand(); return TRUE; case e_genericCommand : choice = new H245_GenericMessage(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_CommandMessage::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CommandMessage::Class()), PInvalidCast); #endif return new H245_CommandMessage(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_IndicationMessage[]={ {"nonStandard",0} ,{"functionNotUnderstood",1} ,{"masterSlaveDeterminationRelease",2} ,{"terminalCapabilitySetRelease",3} ,{"openLogicalChannelConfirm",4} ,{"requestChannelCloseRelease",5} ,{"multiplexEntrySendRelease",6} ,{"requestMultiplexEntryRelease",7} ,{"requestModeRelease",8} ,{"miscellaneousIndication",9} ,{"jitterIndication",10} ,{"h223SkewIndication",11} ,{"newATMVCIndication",12} ,{"userInput",13} ,{"h2250MaximumSkewIndication",14} ,{"mcLocationIndication",15} ,{"conferenceIndication",16} ,{"vendorIdentification",17} ,{"functionNotSupported",18} ,{"multilinkIndication",19} ,{"logicalChannelRateRelease",20} ,{"flowControlIndication",21} ,{"mobileMultilinkReconfigurationIndication",22} ,{"genericIndication",23} }; #endif // // IndicationMessage // H245_IndicationMessage::H245_IndicationMessage(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 14, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_IndicationMessage,24 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_NonStandardMessage &() const #else H245_IndicationMessage::operator H245_NonStandardMessage &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardMessage), PInvalidCast); #endif return *(H245_NonStandardMessage *)choice; } H245_IndicationMessage::operator const H245_NonStandardMessage &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardMessage), PInvalidCast); #endif return *(H245_NonStandardMessage *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_FunctionNotUnderstood &() const #else H245_IndicationMessage::operator H245_FunctionNotUnderstood &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FunctionNotUnderstood), PInvalidCast); #endif return *(H245_FunctionNotUnderstood *)choice; } H245_IndicationMessage::operator const H245_FunctionNotUnderstood &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FunctionNotUnderstood), PInvalidCast); #endif return *(H245_FunctionNotUnderstood *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_MasterSlaveDeterminationRelease &() const #else H245_IndicationMessage::operator H245_MasterSlaveDeterminationRelease &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MasterSlaveDeterminationRelease), PInvalidCast); #endif return *(H245_MasterSlaveDeterminationRelease *)choice; } H245_IndicationMessage::operator const H245_MasterSlaveDeterminationRelease &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MasterSlaveDeterminationRelease), PInvalidCast); #endif return *(H245_MasterSlaveDeterminationRelease *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_TerminalCapabilitySetRelease &() const #else H245_IndicationMessage::operator H245_TerminalCapabilitySetRelease &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_TerminalCapabilitySetRelease), PInvalidCast); #endif return *(H245_TerminalCapabilitySetRelease *)choice; } H245_IndicationMessage::operator const H245_TerminalCapabilitySetRelease &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_TerminalCapabilitySetRelease), PInvalidCast); #endif return *(H245_TerminalCapabilitySetRelease *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_OpenLogicalChannelConfirm &() const #else H245_IndicationMessage::operator H245_OpenLogicalChannelConfirm &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_OpenLogicalChannelConfirm), PInvalidCast); #endif return *(H245_OpenLogicalChannelConfirm *)choice; } H245_IndicationMessage::operator const H245_OpenLogicalChannelConfirm &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_OpenLogicalChannelConfirm), PInvalidCast); #endif return *(H245_OpenLogicalChannelConfirm *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_RequestChannelCloseRelease &() const #else H245_IndicationMessage::operator H245_RequestChannelCloseRelease &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestChannelCloseRelease), PInvalidCast); #endif return *(H245_RequestChannelCloseRelease *)choice; } H245_IndicationMessage::operator const H245_RequestChannelCloseRelease &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestChannelCloseRelease), PInvalidCast); #endif return *(H245_RequestChannelCloseRelease *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_MultiplexEntrySendRelease &() const #else H245_IndicationMessage::operator H245_MultiplexEntrySendRelease &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultiplexEntrySendRelease), PInvalidCast); #endif return *(H245_MultiplexEntrySendRelease *)choice; } H245_IndicationMessage::operator const H245_MultiplexEntrySendRelease &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultiplexEntrySendRelease), PInvalidCast); #endif return *(H245_MultiplexEntrySendRelease *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_RequestMultiplexEntryRelease &() const #else H245_IndicationMessage::operator H245_RequestMultiplexEntryRelease &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestMultiplexEntryRelease), PInvalidCast); #endif return *(H245_RequestMultiplexEntryRelease *)choice; } H245_IndicationMessage::operator const H245_RequestMultiplexEntryRelease &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestMultiplexEntryRelease), PInvalidCast); #endif return *(H245_RequestMultiplexEntryRelease *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_RequestModeRelease &() const #else H245_IndicationMessage::operator H245_RequestModeRelease &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestModeRelease), PInvalidCast); #endif return *(H245_RequestModeRelease *)choice; } H245_IndicationMessage::operator const H245_RequestModeRelease &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestModeRelease), PInvalidCast); #endif return *(H245_RequestModeRelease *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_MiscellaneousIndication &() const #else H245_IndicationMessage::operator H245_MiscellaneousIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MiscellaneousIndication), PInvalidCast); #endif return *(H245_MiscellaneousIndication *)choice; } H245_IndicationMessage::operator const H245_MiscellaneousIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MiscellaneousIndication), PInvalidCast); #endif return *(H245_MiscellaneousIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_JitterIndication &() const #else H245_IndicationMessage::operator H245_JitterIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_JitterIndication), PInvalidCast); #endif return *(H245_JitterIndication *)choice; } H245_IndicationMessage::operator const H245_JitterIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_JitterIndication), PInvalidCast); #endif return *(H245_JitterIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_H223SkewIndication &() const #else H245_IndicationMessage::operator H245_H223SkewIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223SkewIndication), PInvalidCast); #endif return *(H245_H223SkewIndication *)choice; } H245_IndicationMessage::operator const H245_H223SkewIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223SkewIndication), PInvalidCast); #endif return *(H245_H223SkewIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_NewATMVCIndication &() const #else H245_IndicationMessage::operator H245_NewATMVCIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NewATMVCIndication), PInvalidCast); #endif return *(H245_NewATMVCIndication *)choice; } H245_IndicationMessage::operator const H245_NewATMVCIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NewATMVCIndication), PInvalidCast); #endif return *(H245_NewATMVCIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_UserInputIndication &() const #else H245_IndicationMessage::operator H245_UserInputIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UserInputIndication), PInvalidCast); #endif return *(H245_UserInputIndication *)choice; } H245_IndicationMessage::operator const H245_UserInputIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UserInputIndication), PInvalidCast); #endif return *(H245_UserInputIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_H2250MaximumSkewIndication &() const #else H245_IndicationMessage::operator H245_H2250MaximumSkewIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H2250MaximumSkewIndication), PInvalidCast); #endif return *(H245_H2250MaximumSkewIndication *)choice; } H245_IndicationMessage::operator const H245_H2250MaximumSkewIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H2250MaximumSkewIndication), PInvalidCast); #endif return *(H245_H2250MaximumSkewIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_MCLocationIndication &() const #else H245_IndicationMessage::operator H245_MCLocationIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MCLocationIndication), PInvalidCast); #endif return *(H245_MCLocationIndication *)choice; } H245_IndicationMessage::operator const H245_MCLocationIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MCLocationIndication), PInvalidCast); #endif return *(H245_MCLocationIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_ConferenceIndication &() const #else H245_IndicationMessage::operator H245_ConferenceIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceIndication), PInvalidCast); #endif return *(H245_ConferenceIndication *)choice; } H245_IndicationMessage::operator const H245_ConferenceIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceIndication), PInvalidCast); #endif return *(H245_ConferenceIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_VendorIdentification &() const #else H245_IndicationMessage::operator H245_VendorIdentification &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VendorIdentification), PInvalidCast); #endif return *(H245_VendorIdentification *)choice; } H245_IndicationMessage::operator const H245_VendorIdentification &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VendorIdentification), PInvalidCast); #endif return *(H245_VendorIdentification *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_FunctionNotSupported &() const #else H245_IndicationMessage::operator H245_FunctionNotSupported &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FunctionNotSupported), PInvalidCast); #endif return *(H245_FunctionNotSupported *)choice; } H245_IndicationMessage::operator const H245_FunctionNotSupported &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FunctionNotSupported), PInvalidCast); #endif return *(H245_FunctionNotSupported *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_MultilinkIndication &() const #else H245_IndicationMessage::operator H245_MultilinkIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkIndication), PInvalidCast); #endif return *(H245_MultilinkIndication *)choice; } H245_IndicationMessage::operator const H245_MultilinkIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkIndication), PInvalidCast); #endif return *(H245_MultilinkIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_LogicalChannelRateRelease &() const #else H245_IndicationMessage::operator H245_LogicalChannelRateRelease &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelRateRelease), PInvalidCast); #endif return *(H245_LogicalChannelRateRelease *)choice; } H245_IndicationMessage::operator const H245_LogicalChannelRateRelease &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelRateRelease), PInvalidCast); #endif return *(H245_LogicalChannelRateRelease *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_FlowControlIndication &() const #else H245_IndicationMessage::operator H245_FlowControlIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FlowControlIndication), PInvalidCast); #endif return *(H245_FlowControlIndication *)choice; } H245_IndicationMessage::operator const H245_FlowControlIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FlowControlIndication), PInvalidCast); #endif return *(H245_FlowControlIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_MobileMultilinkReconfigurationIndication &() const #else H245_IndicationMessage::operator H245_MobileMultilinkReconfigurationIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MobileMultilinkReconfigurationIndication), PInvalidCast); #endif return *(H245_MobileMultilinkReconfigurationIndication *)choice; } H245_IndicationMessage::operator const H245_MobileMultilinkReconfigurationIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MobileMultilinkReconfigurationIndication), PInvalidCast); #endif return *(H245_MobileMultilinkReconfigurationIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_IndicationMessage::operator H245_GenericMessage &() const #else H245_IndicationMessage::operator H245_GenericMessage &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericMessage), PInvalidCast); #endif return *(H245_GenericMessage *)choice; } H245_IndicationMessage::operator const H245_GenericMessage &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericMessage), PInvalidCast); #endif return *(H245_GenericMessage *)choice; } PBoolean H245_IndicationMessage::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardMessage(); return TRUE; case e_functionNotUnderstood : choice = new H245_FunctionNotUnderstood(); return TRUE; case e_masterSlaveDeterminationRelease : choice = new H245_MasterSlaveDeterminationRelease(); return TRUE; case e_terminalCapabilitySetRelease : choice = new H245_TerminalCapabilitySetRelease(); return TRUE; case e_openLogicalChannelConfirm : choice = new H245_OpenLogicalChannelConfirm(); return TRUE; case e_requestChannelCloseRelease : choice = new H245_RequestChannelCloseRelease(); return TRUE; case e_multiplexEntrySendRelease : choice = new H245_MultiplexEntrySendRelease(); return TRUE; case e_requestMultiplexEntryRelease : choice = new H245_RequestMultiplexEntryRelease(); return TRUE; case e_requestModeRelease : choice = new H245_RequestModeRelease(); return TRUE; case e_miscellaneousIndication : choice = new H245_MiscellaneousIndication(); return TRUE; case e_jitterIndication : choice = new H245_JitterIndication(); return TRUE; case e_h223SkewIndication : choice = new H245_H223SkewIndication(); return TRUE; case e_newATMVCIndication : choice = new H245_NewATMVCIndication(); return TRUE; case e_userInput : choice = new H245_UserInputIndication(); return TRUE; case e_h2250MaximumSkewIndication : choice = new H245_H2250MaximumSkewIndication(); return TRUE; case e_mcLocationIndication : choice = new H245_MCLocationIndication(); return TRUE; case e_conferenceIndication : choice = new H245_ConferenceIndication(); return TRUE; case e_vendorIdentification : choice = new H245_VendorIdentification(); return TRUE; case e_functionNotSupported : choice = new H245_FunctionNotSupported(); return TRUE; case e_multilinkIndication : choice = new H245_MultilinkIndication(); return TRUE; case e_logicalChannelRateRelease : choice = new H245_LogicalChannelRateRelease(); return TRUE; case e_flowControlIndication : choice = new H245_FlowControlIndication(); return TRUE; case e_mobileMultilinkReconfigurationIndication : choice = new H245_MobileMultilinkReconfigurationIndication(); return TRUE; case e_genericIndication : choice = new H245_GenericMessage(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_IndicationMessage::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_IndicationMessage::Class()), PInvalidCast); #endif return new H245_IndicationMessage(*this); } // // SequenceNumber // H245_SequenceNumber::H245_SequenceNumber(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 255); } H245_SequenceNumber & H245_SequenceNumber::operator=(int v) { SetValue(v); return *this; } H245_SequenceNumber & H245_SequenceNumber::operator=(unsigned v) { SetValue(v); return *this; } PObject * H245_SequenceNumber::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_SequenceNumber::Class()), PInvalidCast); #endif return new H245_SequenceNumber(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_NonStandardIdentifier[]={ {"object",0} ,{"h221NonStandard",1} }; #endif // // NonStandardIdentifier // H245_NonStandardIdentifier::H245_NonStandardIdentifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_NonStandardIdentifier,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_NonStandardIdentifier::operator H245_NonStandardIdentifier_h221NonStandard &() const #else H245_NonStandardIdentifier::operator H245_NonStandardIdentifier_h221NonStandard &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardIdentifier_h221NonStandard), PInvalidCast); #endif return *(H245_NonStandardIdentifier_h221NonStandard *)choice; } H245_NonStandardIdentifier::operator const H245_NonStandardIdentifier_h221NonStandard &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardIdentifier_h221NonStandard), PInvalidCast); #endif return *(H245_NonStandardIdentifier_h221NonStandard *)choice; } PBoolean H245_NonStandardIdentifier::CreateObject() { switch (tag) { case e_object : choice = new PASN_ObjectId(); return TRUE; case e_h221NonStandard : choice = new H245_NonStandardIdentifier_h221NonStandard(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_NonStandardIdentifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NonStandardIdentifier::Class()), PInvalidCast); #endif return new H245_NonStandardIdentifier(*this); } // // MasterSlaveDetermination // H245_MasterSlaveDetermination::H245_MasterSlaveDetermination(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_terminalType.SetConstraints(PASN_Object::FixedConstraint, 0, 255); m_statusDeterminationNumber.SetConstraints(PASN_Object::FixedConstraint, 0, 16777215); } #ifndef PASN_NOPRINTON void H245_MasterSlaveDetermination::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "terminalType = " << setprecision(indent) << m_terminalType << '\n'; strm << setw(indent+28) << "statusDeterminationNumber = " << setprecision(indent) << m_statusDeterminationNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MasterSlaveDetermination::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MasterSlaveDetermination), PInvalidCast); #endif const H245_MasterSlaveDetermination & other = (const H245_MasterSlaveDetermination &)obj; Comparison result; if ((result = m_terminalType.Compare(other.m_terminalType)) != EqualTo) return result; if ((result = m_statusDeterminationNumber.Compare(other.m_statusDeterminationNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MasterSlaveDetermination::GetDataLength() const { PINDEX length = 0; length += m_terminalType.GetObjectLength(); length += m_statusDeterminationNumber.GetObjectLength(); return length; } PBoolean H245_MasterSlaveDetermination::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_terminalType.Decode(strm)) return FALSE; if (!m_statusDeterminationNumber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MasterSlaveDetermination::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_terminalType.Encode(strm); m_statusDeterminationNumber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MasterSlaveDetermination::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MasterSlaveDetermination::Class()), PInvalidCast); #endif return new H245_MasterSlaveDetermination(*this); } // // MasterSlaveDeterminationRelease // H245_MasterSlaveDeterminationRelease::H245_MasterSlaveDeterminationRelease(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MasterSlaveDeterminationRelease::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX H245_MasterSlaveDeterminationRelease::GetDataLength() const { PINDEX length = 0; return length; } PBoolean H245_MasterSlaveDeterminationRelease::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MasterSlaveDeterminationRelease::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MasterSlaveDeterminationRelease::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MasterSlaveDeterminationRelease::Class()), PInvalidCast); #endif return new H245_MasterSlaveDeterminationRelease(*this); } // // AlternativeCapabilitySet // H245_AlternativeCapabilitySet::H245_AlternativeCapabilitySet(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 256); } PASN_Object * H245_AlternativeCapabilitySet::CreateObject() const { return new H245_CapabilityTableEntryNumber; } H245_CapabilityTableEntryNumber & H245_AlternativeCapabilitySet::operator[](PINDEX i) const { return (H245_CapabilityTableEntryNumber &)array[i]; } PObject * H245_AlternativeCapabilitySet::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_AlternativeCapabilitySet::Class()), PInvalidCast); #endif return new H245_AlternativeCapabilitySet(*this); } // // CapabilityTableEntryNumber // H245_CapabilityTableEntryNumber::H245_CapabilityTableEntryNumber(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } H245_CapabilityTableEntryNumber & H245_CapabilityTableEntryNumber::operator=(int v) { SetValue(v); return *this; } H245_CapabilityTableEntryNumber & H245_CapabilityTableEntryNumber::operator=(unsigned v) { SetValue(v); return *this; } PObject * H245_CapabilityTableEntryNumber::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CapabilityTableEntryNumber::Class()), PInvalidCast); #endif return new H245_CapabilityTableEntryNumber(*this); } // // CapabilityDescriptorNumber // H245_CapabilityDescriptorNumber::H245_CapabilityDescriptorNumber(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 255); } H245_CapabilityDescriptorNumber & H245_CapabilityDescriptorNumber::operator=(int v) { SetValue(v); return *this; } H245_CapabilityDescriptorNumber & H245_CapabilityDescriptorNumber::operator=(unsigned v) { SetValue(v); return *this; } PObject * H245_CapabilityDescriptorNumber::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CapabilityDescriptorNumber::Class()), PInvalidCast); #endif return new H245_CapabilityDescriptorNumber(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_Capability[]={ {"nonStandard",0} ,{"receiveVideoCapability",1} ,{"transmitVideoCapability",2} ,{"receiveAndTransmitVideoCapability",3} ,{"receiveAudioCapability",4} ,{"transmitAudioCapability",5} ,{"receiveAndTransmitAudioCapability",6} ,{"receiveDataApplicationCapability",7} ,{"transmitDataApplicationCapability",8} ,{"receiveAndTransmitDataApplicationCapability",9} ,{"h233EncryptionTransmitCapability",10} ,{"h233EncryptionReceiveCapability",11} ,{"conferenceCapability",12} ,{"h235SecurityCapability",13} ,{"maxPendingReplacementFor",14} ,{"receiveUserInputCapability",15} ,{"transmitUserInputCapability",16} ,{"receiveAndTransmitUserInputCapability",17} ,{"genericControlCapability",18} ,{"receiveMultiplexedStreamCapability",19} ,{"transmitMultiplexedStreamCapability",20} ,{"receiveAndTransmitMultiplexedStreamCapability",21} ,{"receiveRTPAudioTelephonyEventCapability",22} ,{"receiveRTPAudioToneCapability",23} ,{"depFecCapability",24} ,{"multiplePayloadStreamCapability",25} ,{"fecCapability",26} ,{"redundancyEncodingCap",27} ,{"oneOfCapabilities",28} }; #endif // // Capability // H245_Capability::H245_Capability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 12, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_Capability,29 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_Capability::operator H245_NonStandardParameter &() const #else H245_Capability::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_Capability::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_Capability::operator H245_VideoCapability &() const #else H245_Capability::operator H245_VideoCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VideoCapability), PInvalidCast); #endif return *(H245_VideoCapability *)choice; } H245_Capability::operator const H245_VideoCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VideoCapability), PInvalidCast); #endif return *(H245_VideoCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_Capability::operator H245_AudioCapability &() const #else H245_Capability::operator H245_AudioCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioCapability), PInvalidCast); #endif return *(H245_AudioCapability *)choice; } H245_Capability::operator const H245_AudioCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioCapability), PInvalidCast); #endif return *(H245_AudioCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_Capability::operator H245_DataApplicationCapability &() const #else H245_Capability::operator H245_DataApplicationCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataApplicationCapability), PInvalidCast); #endif return *(H245_DataApplicationCapability *)choice; } H245_Capability::operator const H245_DataApplicationCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataApplicationCapability), PInvalidCast); #endif return *(H245_DataApplicationCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_Capability::operator H245_Capability_h233EncryptionReceiveCapability &() const #else H245_Capability::operator H245_Capability_h233EncryptionReceiveCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_Capability_h233EncryptionReceiveCapability), PInvalidCast); #endif return *(H245_Capability_h233EncryptionReceiveCapability *)choice; } H245_Capability::operator const H245_Capability_h233EncryptionReceiveCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_Capability_h233EncryptionReceiveCapability), PInvalidCast); #endif return *(H245_Capability_h233EncryptionReceiveCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_Capability::operator H245_ConferenceCapability &() const #else H245_Capability::operator H245_ConferenceCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceCapability), PInvalidCast); #endif return *(H245_ConferenceCapability *)choice; } H245_Capability::operator const H245_ConferenceCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceCapability), PInvalidCast); #endif return *(H245_ConferenceCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_Capability::operator H245_H235SecurityCapability &() const #else H245_Capability::operator H245_H235SecurityCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H235SecurityCapability), PInvalidCast); #endif return *(H245_H235SecurityCapability *)choice; } H245_Capability::operator const H245_H235SecurityCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H235SecurityCapability), PInvalidCast); #endif return *(H245_H235SecurityCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_Capability::operator H245_UserInputCapability &() const #else H245_Capability::operator H245_UserInputCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UserInputCapability), PInvalidCast); #endif return *(H245_UserInputCapability *)choice; } H245_Capability::operator const H245_UserInputCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UserInputCapability), PInvalidCast); #endif return *(H245_UserInputCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_Capability::operator H245_GenericCapability &() const #else H245_Capability::operator H245_GenericCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericCapability), PInvalidCast); #endif return *(H245_GenericCapability *)choice; } H245_Capability::operator const H245_GenericCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericCapability), PInvalidCast); #endif return *(H245_GenericCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_Capability::operator H245_MultiplexedStreamCapability &() const #else H245_Capability::operator H245_MultiplexedStreamCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultiplexedStreamCapability), PInvalidCast); #endif return *(H245_MultiplexedStreamCapability *)choice; } H245_Capability::operator const H245_MultiplexedStreamCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultiplexedStreamCapability), PInvalidCast); #endif return *(H245_MultiplexedStreamCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_Capability::operator H245_AudioTelephonyEventCapability &() const #else H245_Capability::operator H245_AudioTelephonyEventCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioTelephonyEventCapability), PInvalidCast); #endif return *(H245_AudioTelephonyEventCapability *)choice; } H245_Capability::operator const H245_AudioTelephonyEventCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioTelephonyEventCapability), PInvalidCast); #endif return *(H245_AudioTelephonyEventCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_Capability::operator H245_AudioToneCapability &() const #else H245_Capability::operator H245_AudioToneCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioToneCapability), PInvalidCast); #endif return *(H245_AudioToneCapability *)choice; } H245_Capability::operator const H245_AudioToneCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioToneCapability), PInvalidCast); #endif return *(H245_AudioToneCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_Capability::operator H245_DepFECCapability &() const #else H245_Capability::operator H245_DepFECCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECCapability), PInvalidCast); #endif return *(H245_DepFECCapability *)choice; } H245_Capability::operator const H245_DepFECCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECCapability), PInvalidCast); #endif return *(H245_DepFECCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_Capability::operator H245_MultiplePayloadStreamCapability &() const #else H245_Capability::operator H245_MultiplePayloadStreamCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultiplePayloadStreamCapability), PInvalidCast); #endif return *(H245_MultiplePayloadStreamCapability *)choice; } H245_Capability::operator const H245_MultiplePayloadStreamCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultiplePayloadStreamCapability), PInvalidCast); #endif return *(H245_MultiplePayloadStreamCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_Capability::operator H245_FECCapability &() const #else H245_Capability::operator H245_FECCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FECCapability), PInvalidCast); #endif return *(H245_FECCapability *)choice; } H245_Capability::operator const H245_FECCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FECCapability), PInvalidCast); #endif return *(H245_FECCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_Capability::operator H245_RedundancyEncodingCapability &() const #else H245_Capability::operator H245_RedundancyEncodingCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RedundancyEncodingCapability), PInvalidCast); #endif return *(H245_RedundancyEncodingCapability *)choice; } H245_Capability::operator const H245_RedundancyEncodingCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RedundancyEncodingCapability), PInvalidCast); #endif return *(H245_RedundancyEncodingCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_Capability::operator H245_AlternativeCapabilitySet &() const #else H245_Capability::operator H245_AlternativeCapabilitySet &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AlternativeCapabilitySet), PInvalidCast); #endif return *(H245_AlternativeCapabilitySet *)choice; } H245_Capability::operator const H245_AlternativeCapabilitySet &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AlternativeCapabilitySet), PInvalidCast); #endif return *(H245_AlternativeCapabilitySet *)choice; } PBoolean H245_Capability::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_receiveVideoCapability : case e_transmitVideoCapability : case e_receiveAndTransmitVideoCapability : choice = new H245_VideoCapability(); return TRUE; case e_receiveAudioCapability : case e_transmitAudioCapability : case e_receiveAndTransmitAudioCapability : choice = new H245_AudioCapability(); return TRUE; case e_receiveDataApplicationCapability : case e_transmitDataApplicationCapability : case e_receiveAndTransmitDataApplicationCapability : choice = new H245_DataApplicationCapability(); return TRUE; case e_h233EncryptionTransmitCapability : choice = new PASN_Boolean(); return TRUE; case e_h233EncryptionReceiveCapability : choice = new H245_Capability_h233EncryptionReceiveCapability(); return TRUE; case e_conferenceCapability : choice = new H245_ConferenceCapability(); return TRUE; case e_h235SecurityCapability : choice = new H245_H235SecurityCapability(); return TRUE; case e_maxPendingReplacementFor : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 255); return TRUE; case e_receiveUserInputCapability : case e_transmitUserInputCapability : case e_receiveAndTransmitUserInputCapability : choice = new H245_UserInputCapability(); return TRUE; case e_genericControlCapability : choice = new H245_GenericCapability(); return TRUE; case e_receiveMultiplexedStreamCapability : case e_transmitMultiplexedStreamCapability : case e_receiveAndTransmitMultiplexedStreamCapability : choice = new H245_MultiplexedStreamCapability(); return TRUE; case e_receiveRTPAudioTelephonyEventCapability : choice = new H245_AudioTelephonyEventCapability(); return TRUE; case e_receiveRTPAudioToneCapability : choice = new H245_AudioToneCapability(); return TRUE; case e_depFecCapability : choice = new H245_DepFECCapability(); return TRUE; case e_multiplePayloadStreamCapability : choice = new H245_MultiplePayloadStreamCapability(); return TRUE; case e_fecCapability : choice = new H245_FECCapability(); return TRUE; case e_redundancyEncodingCap : choice = new H245_RedundancyEncodingCapability(); return TRUE; case e_oneOfCapabilities : choice = new H245_AlternativeCapabilitySet(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_Capability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_Capability::Class()), PInvalidCast); #endif return new H245_Capability(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MultiplexCapability[]={ {"nonStandard",0} ,{"h222Capability",1} ,{"h223Capability",2} ,{"v76Capability",3} ,{"h2250Capability",4} ,{"genericMultiplexCapability",5} }; #endif // // MultiplexCapability // H245_MultiplexCapability::H245_MultiplexCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MultiplexCapability,6 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultiplexCapability::operator H245_NonStandardParameter &() const #else H245_MultiplexCapability::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_MultiplexCapability::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultiplexCapability::operator H245_H222Capability &() const #else H245_MultiplexCapability::operator H245_H222Capability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H222Capability), PInvalidCast); #endif return *(H245_H222Capability *)choice; } H245_MultiplexCapability::operator const H245_H222Capability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H222Capability), PInvalidCast); #endif return *(H245_H222Capability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultiplexCapability::operator H245_H223Capability &() const #else H245_MultiplexCapability::operator H245_H223Capability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223Capability), PInvalidCast); #endif return *(H245_H223Capability *)choice; } H245_MultiplexCapability::operator const H245_H223Capability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223Capability), PInvalidCast); #endif return *(H245_H223Capability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultiplexCapability::operator H245_V76Capability &() const #else H245_MultiplexCapability::operator H245_V76Capability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_V76Capability), PInvalidCast); #endif return *(H245_V76Capability *)choice; } H245_MultiplexCapability::operator const H245_V76Capability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_V76Capability), PInvalidCast); #endif return *(H245_V76Capability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultiplexCapability::operator H245_H2250Capability &() const #else H245_MultiplexCapability::operator H245_H2250Capability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H2250Capability), PInvalidCast); #endif return *(H245_H2250Capability *)choice; } H245_MultiplexCapability::operator const H245_H2250Capability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H2250Capability), PInvalidCast); #endif return *(H245_H2250Capability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultiplexCapability::operator H245_GenericCapability &() const #else H245_MultiplexCapability::operator H245_GenericCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericCapability), PInvalidCast); #endif return *(H245_GenericCapability *)choice; } H245_MultiplexCapability::operator const H245_GenericCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericCapability), PInvalidCast); #endif return *(H245_GenericCapability *)choice; } PBoolean H245_MultiplexCapability::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_h222Capability : choice = new H245_H222Capability(); return TRUE; case e_h223Capability : choice = new H245_H223Capability(); return TRUE; case e_v76Capability : choice = new H245_V76Capability(); return TRUE; case e_h2250Capability : choice = new H245_H2250Capability(); return TRUE; case e_genericMultiplexCapability : choice = new H245_GenericCapability(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_MultiplexCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultiplexCapability::Class()), PInvalidCast); #endif return new H245_MultiplexCapability(*this); } // // H223AnnexCCapability // H245_H223AnnexCCapability::H245_H223AnnexCCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 1) { m_maximumAL1MPDUSize.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); m_maximumAL2MSDUSize.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); m_maximumAL3MSDUSize.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H245_H223AnnexCCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "videoWithAL1M = " << setprecision(indent) << m_videoWithAL1M << '\n'; strm << setw(indent+16) << "videoWithAL2M = " << setprecision(indent) << m_videoWithAL2M << '\n'; strm << setw(indent+16) << "videoWithAL3M = " << setprecision(indent) << m_videoWithAL3M << '\n'; strm << setw(indent+16) << "audioWithAL1M = " << setprecision(indent) << m_audioWithAL1M << '\n'; strm << setw(indent+16) << "audioWithAL2M = " << setprecision(indent) << m_audioWithAL2M << '\n'; strm << setw(indent+16) << "audioWithAL3M = " << setprecision(indent) << m_audioWithAL3M << '\n'; strm << setw(indent+15) << "dataWithAL1M = " << setprecision(indent) << m_dataWithAL1M << '\n'; strm << setw(indent+15) << "dataWithAL2M = " << setprecision(indent) << m_dataWithAL2M << '\n'; strm << setw(indent+15) << "dataWithAL3M = " << setprecision(indent) << m_dataWithAL3M << '\n'; strm << setw(indent+20) << "alpduInterleaving = " << setprecision(indent) << m_alpduInterleaving << '\n'; strm << setw(indent+21) << "maximumAL1MPDUSize = " << setprecision(indent) << m_maximumAL1MPDUSize << '\n'; strm << setw(indent+21) << "maximumAL2MSDUSize = " << setprecision(indent) << m_maximumAL2MSDUSize << '\n'; strm << setw(indent+21) << "maximumAL3MSDUSize = " << setprecision(indent) << m_maximumAL3MSDUSize << '\n'; if (HasOptionalField(e_rsCodeCapability)) strm << setw(indent+19) << "rsCodeCapability = " << setprecision(indent) << m_rsCodeCapability << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H223AnnexCCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H223AnnexCCapability), PInvalidCast); #endif const H245_H223AnnexCCapability & other = (const H245_H223AnnexCCapability &)obj; Comparison result; if ((result = m_videoWithAL1M.Compare(other.m_videoWithAL1M)) != EqualTo) return result; if ((result = m_videoWithAL2M.Compare(other.m_videoWithAL2M)) != EqualTo) return result; if ((result = m_videoWithAL3M.Compare(other.m_videoWithAL3M)) != EqualTo) return result; if ((result = m_audioWithAL1M.Compare(other.m_audioWithAL1M)) != EqualTo) return result; if ((result = m_audioWithAL2M.Compare(other.m_audioWithAL2M)) != EqualTo) return result; if ((result = m_audioWithAL3M.Compare(other.m_audioWithAL3M)) != EqualTo) return result; if ((result = m_dataWithAL1M.Compare(other.m_dataWithAL1M)) != EqualTo) return result; if ((result = m_dataWithAL2M.Compare(other.m_dataWithAL2M)) != EqualTo) return result; if ((result = m_dataWithAL3M.Compare(other.m_dataWithAL3M)) != EqualTo) return result; if ((result = m_alpduInterleaving.Compare(other.m_alpduInterleaving)) != EqualTo) return result; if ((result = m_maximumAL1MPDUSize.Compare(other.m_maximumAL1MPDUSize)) != EqualTo) return result; if ((result = m_maximumAL2MSDUSize.Compare(other.m_maximumAL2MSDUSize)) != EqualTo) return result; if ((result = m_maximumAL3MSDUSize.Compare(other.m_maximumAL3MSDUSize)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H223AnnexCCapability::GetDataLength() const { PINDEX length = 0; length += m_videoWithAL1M.GetObjectLength(); length += m_videoWithAL2M.GetObjectLength(); length += m_videoWithAL3M.GetObjectLength(); length += m_audioWithAL1M.GetObjectLength(); length += m_audioWithAL2M.GetObjectLength(); length += m_audioWithAL3M.GetObjectLength(); length += m_dataWithAL1M.GetObjectLength(); length += m_dataWithAL2M.GetObjectLength(); length += m_dataWithAL3M.GetObjectLength(); length += m_alpduInterleaving.GetObjectLength(); length += m_maximumAL1MPDUSize.GetObjectLength(); length += m_maximumAL2MSDUSize.GetObjectLength(); length += m_maximumAL3MSDUSize.GetObjectLength(); return length; } PBoolean H245_H223AnnexCCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_videoWithAL1M.Decode(strm)) return FALSE; if (!m_videoWithAL2M.Decode(strm)) return FALSE; if (!m_videoWithAL3M.Decode(strm)) return FALSE; if (!m_audioWithAL1M.Decode(strm)) return FALSE; if (!m_audioWithAL2M.Decode(strm)) return FALSE; if (!m_audioWithAL3M.Decode(strm)) return FALSE; if (!m_dataWithAL1M.Decode(strm)) return FALSE; if (!m_dataWithAL2M.Decode(strm)) return FALSE; if (!m_dataWithAL3M.Decode(strm)) return FALSE; if (!m_alpduInterleaving.Decode(strm)) return FALSE; if (!m_maximumAL1MPDUSize.Decode(strm)) return FALSE; if (!m_maximumAL2MSDUSize.Decode(strm)) return FALSE; if (!m_maximumAL3MSDUSize.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_rsCodeCapability, m_rsCodeCapability)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H223AnnexCCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_videoWithAL1M.Encode(strm); m_videoWithAL2M.Encode(strm); m_videoWithAL3M.Encode(strm); m_audioWithAL1M.Encode(strm); m_audioWithAL2M.Encode(strm); m_audioWithAL3M.Encode(strm); m_dataWithAL1M.Encode(strm); m_dataWithAL2M.Encode(strm); m_dataWithAL3M.Encode(strm); m_alpduInterleaving.Encode(strm); m_maximumAL1MPDUSize.Encode(strm); m_maximumAL2MSDUSize.Encode(strm); m_maximumAL3MSDUSize.Encode(strm); KnownExtensionEncode(strm, e_rsCodeCapability, m_rsCodeCapability); UnknownExtensionsEncode(strm); } PObject * H245_H223AnnexCCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223AnnexCCapability::Class()), PInvalidCast); #endif return new H245_H223AnnexCCapability(*this); } // // V75Capability // H245_V75Capability::H245_V75Capability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_V75Capability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "audioHeader = " << setprecision(indent) << m_audioHeader << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_V75Capability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_V75Capability), PInvalidCast); #endif const H245_V75Capability & other = (const H245_V75Capability &)obj; Comparison result; if ((result = m_audioHeader.Compare(other.m_audioHeader)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_V75Capability::GetDataLength() const { PINDEX length = 0; length += m_audioHeader.GetObjectLength(); return length; } PBoolean H245_V75Capability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_audioHeader.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_V75Capability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_audioHeader.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_V75Capability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_V75Capability::Class()), PInvalidCast); #endif return new H245_V75Capability(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_QOSMode[]={ {"guaranteedQOS",0} ,{"controlledLoad",1} }; #endif // // QOSMode // H245_QOSMode::H245_QOSMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_QOSMode,2 #endif ) { } PBoolean H245_QOSMode::CreateObject() { choice = (tag <= e_controlledLoad) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_QOSMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_QOSMode::Class()), PInvalidCast); #endif return new H245_QOSMode(*this); } // // ATMParameters // H245_ATMParameters::H245_ATMParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_maxNTUSize.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H245_ATMParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "maxNTUSize = " << setprecision(indent) << m_maxNTUSize << '\n'; strm << setw(indent+9) << "atmUBR = " << setprecision(indent) << m_atmUBR << '\n'; strm << setw(indent+11) << "atmrtVBR = " << setprecision(indent) << m_atmrtVBR << '\n'; strm << setw(indent+12) << "atmnrtVBR = " << setprecision(indent) << m_atmnrtVBR << '\n'; strm << setw(indent+9) << "atmABR = " << setprecision(indent) << m_atmABR << '\n'; strm << setw(indent+9) << "atmCBR = " << setprecision(indent) << m_atmCBR << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_ATMParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_ATMParameters), PInvalidCast); #endif const H245_ATMParameters & other = (const H245_ATMParameters &)obj; Comparison result; if ((result = m_maxNTUSize.Compare(other.m_maxNTUSize)) != EqualTo) return result; if ((result = m_atmUBR.Compare(other.m_atmUBR)) != EqualTo) return result; if ((result = m_atmrtVBR.Compare(other.m_atmrtVBR)) != EqualTo) return result; if ((result = m_atmnrtVBR.Compare(other.m_atmnrtVBR)) != EqualTo) return result; if ((result = m_atmABR.Compare(other.m_atmABR)) != EqualTo) return result; if ((result = m_atmCBR.Compare(other.m_atmCBR)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_ATMParameters::GetDataLength() const { PINDEX length = 0; length += m_maxNTUSize.GetObjectLength(); length += m_atmUBR.GetObjectLength(); length += m_atmrtVBR.GetObjectLength(); length += m_atmnrtVBR.GetObjectLength(); length += m_atmABR.GetObjectLength(); length += m_atmCBR.GetObjectLength(); return length; } PBoolean H245_ATMParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_maxNTUSize.Decode(strm)) return FALSE; if (!m_atmUBR.Decode(strm)) return FALSE; if (!m_atmrtVBR.Decode(strm)) return FALSE; if (!m_atmnrtVBR.Decode(strm)) return FALSE; if (!m_atmABR.Decode(strm)) return FALSE; if (!m_atmCBR.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_ATMParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_maxNTUSize.Encode(strm); m_atmUBR.Encode(strm); m_atmrtVBR.Encode(strm); m_atmnrtVBR.Encode(strm); m_atmABR.Encode(strm); m_atmCBR.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_ATMParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ATMParameters::Class()), PInvalidCast); #endif return new H245_ATMParameters(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_QOSType[]={ {"desired",0} ,{"required",1} }; #endif // // QOSType // H245_QOSType::H245_QOSType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_QOSType,2 #endif ) { } PBoolean H245_QOSType::CreateObject() { choice = (tag <= e_required) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_QOSType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_QOSType::Class()), PInvalidCast); #endif return new H245_QOSType(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_QOSClass[]={ {"class0",0} ,{"class1",1} ,{"class2",2} ,{"class3",3} ,{"class4",4} ,{"class5",5} }; #endif // // QOSClass // H245_QOSClass::H245_QOSClass(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 6, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_QOSClass,6 #endif ) { } PBoolean H245_QOSClass::CreateObject() { choice = (tag <= e_class5) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_QOSClass::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_QOSClass::Class()), PInvalidCast); #endif return new H245_QOSClass(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MediaTransportType[]={ {"ip_UDP",0} ,{"ip_TCP",1} ,{"atm_AAL5_UNIDIR",2} ,{"atm_AAL5_BIDIR",3} ,{"atm_AAL5_compressed",4} }; #endif // // MediaTransportType // H245_MediaTransportType::H245_MediaTransportType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MediaTransportType,5 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MediaTransportType::operator H245_MediaTransportType_atm_AAL5_compressed &() const #else H245_MediaTransportType::operator H245_MediaTransportType_atm_AAL5_compressed &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MediaTransportType_atm_AAL5_compressed), PInvalidCast); #endif return *(H245_MediaTransportType_atm_AAL5_compressed *)choice; } H245_MediaTransportType::operator const H245_MediaTransportType_atm_AAL5_compressed &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MediaTransportType_atm_AAL5_compressed), PInvalidCast); #endif return *(H245_MediaTransportType_atm_AAL5_compressed *)choice; } PBoolean H245_MediaTransportType::CreateObject() { switch (tag) { case e_ip_UDP : case e_ip_TCP : case e_atm_AAL5_UNIDIR : case e_atm_AAL5_BIDIR : choice = new PASN_Null(); return TRUE; case e_atm_AAL5_compressed : choice = new H245_MediaTransportType_atm_AAL5_compressed(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_MediaTransportType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MediaTransportType::Class()), PInvalidCast); #endif return new H245_MediaTransportType(*this); } // // MediaChannelCapability // H245_MediaChannelCapability::H245_MediaChannelCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MediaChannelCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_mediaTransport)) strm << setw(indent+17) << "mediaTransport = " << setprecision(indent) << m_mediaTransport << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MediaChannelCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MediaChannelCapability), PInvalidCast); #endif const H245_MediaChannelCapability & other = (const H245_MediaChannelCapability &)obj; Comparison result; if ((result = m_mediaTransport.Compare(other.m_mediaTransport)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MediaChannelCapability::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_mediaTransport)) length += m_mediaTransport.GetObjectLength(); return length; } PBoolean H245_MediaChannelCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_mediaTransport) && !m_mediaTransport.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MediaChannelCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_mediaTransport)) m_mediaTransport.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MediaChannelCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MediaChannelCapability::Class()), PInvalidCast); #endif return new H245_MediaChannelCapability(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_RedundancyEncodingMethod[]={ {"nonStandard",0} ,{"rtpAudioRedundancyEncoding",1} ,{"rtpH263VideoRedundancyEncoding",2} }; #endif // // RedundancyEncodingMethod // H245_RedundancyEncodingMethod::H245_RedundancyEncodingMethod(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_RedundancyEncodingMethod,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RedundancyEncodingMethod::operator H245_NonStandardParameter &() const #else H245_RedundancyEncodingMethod::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_RedundancyEncodingMethod::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RedundancyEncodingMethod::operator H245_RTPH263VideoRedundancyEncoding &() const #else H245_RedundancyEncodingMethod::operator H245_RTPH263VideoRedundancyEncoding &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RTPH263VideoRedundancyEncoding), PInvalidCast); #endif return *(H245_RTPH263VideoRedundancyEncoding *)choice; } H245_RedundancyEncodingMethod::operator const H245_RTPH263VideoRedundancyEncoding &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RTPH263VideoRedundancyEncoding), PInvalidCast); #endif return *(H245_RTPH263VideoRedundancyEncoding *)choice; } PBoolean H245_RedundancyEncodingMethod::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_rtpAudioRedundancyEncoding : choice = new PASN_Null(); return TRUE; case e_rtpH263VideoRedundancyEncoding : choice = new H245_RTPH263VideoRedundancyEncoding(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_RedundancyEncodingMethod::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RedundancyEncodingMethod::Class()), PInvalidCast); #endif return new H245_RedundancyEncodingMethod(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_VideoCapability[]={ {"nonStandard",0} ,{"h261VideoCapability",1} ,{"h262VideoCapability",2} ,{"h263VideoCapability",3} ,{"is11172VideoCapability",4} ,{"genericVideoCapability",5} ,{"extendedVideoCapability",6} }; #endif // // VideoCapability // H245_VideoCapability::H245_VideoCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 5, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_VideoCapability,7 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_VideoCapability::operator H245_NonStandardParameter &() const #else H245_VideoCapability::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_VideoCapability::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_VideoCapability::operator H245_H261VideoCapability &() const #else H245_VideoCapability::operator H245_H261VideoCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H261VideoCapability), PInvalidCast); #endif return *(H245_H261VideoCapability *)choice; } H245_VideoCapability::operator const H245_H261VideoCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H261VideoCapability), PInvalidCast); #endif return *(H245_H261VideoCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_VideoCapability::operator H245_H262VideoCapability &() const #else H245_VideoCapability::operator H245_H262VideoCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H262VideoCapability), PInvalidCast); #endif return *(H245_H262VideoCapability *)choice; } H245_VideoCapability::operator const H245_H262VideoCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H262VideoCapability), PInvalidCast); #endif return *(H245_H262VideoCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_VideoCapability::operator H245_H263VideoCapability &() const #else H245_VideoCapability::operator H245_H263VideoCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H263VideoCapability), PInvalidCast); #endif return *(H245_H263VideoCapability *)choice; } H245_VideoCapability::operator const H245_H263VideoCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H263VideoCapability), PInvalidCast); #endif return *(H245_H263VideoCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_VideoCapability::operator H245_IS11172VideoCapability &() const #else H245_VideoCapability::operator H245_IS11172VideoCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_IS11172VideoCapability), PInvalidCast); #endif return *(H245_IS11172VideoCapability *)choice; } H245_VideoCapability::operator const H245_IS11172VideoCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_IS11172VideoCapability), PInvalidCast); #endif return *(H245_IS11172VideoCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_VideoCapability::operator H245_GenericCapability &() const #else H245_VideoCapability::operator H245_GenericCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericCapability), PInvalidCast); #endif return *(H245_GenericCapability *)choice; } H245_VideoCapability::operator const H245_GenericCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericCapability), PInvalidCast); #endif return *(H245_GenericCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_VideoCapability::operator H245_ExtendedVideoCapability &() const #else H245_VideoCapability::operator H245_ExtendedVideoCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ExtendedVideoCapability), PInvalidCast); #endif return *(H245_ExtendedVideoCapability *)choice; } H245_VideoCapability::operator const H245_ExtendedVideoCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ExtendedVideoCapability), PInvalidCast); #endif return *(H245_ExtendedVideoCapability *)choice; } PBoolean H245_VideoCapability::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_h261VideoCapability : choice = new H245_H261VideoCapability(); return TRUE; case e_h262VideoCapability : choice = new H245_H262VideoCapability(); return TRUE; case e_h263VideoCapability : choice = new H245_H263VideoCapability(); return TRUE; case e_is11172VideoCapability : choice = new H245_IS11172VideoCapability(); return TRUE; case e_genericVideoCapability : choice = new H245_GenericCapability(); return TRUE; case e_extendedVideoCapability : choice = new H245_ExtendedVideoCapability(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_VideoCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_VideoCapability::Class()), PInvalidCast); #endif return new H245_VideoCapability(*this); } // // H261VideoCapability // H245_H261VideoCapability::H245_H261VideoCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 1) { m_qcifMPI.SetConstraints(PASN_Object::FixedConstraint, 1, 4); m_cifMPI.SetConstraints(PASN_Object::FixedConstraint, 1, 4); m_maxBitRate.SetConstraints(PASN_Object::FixedConstraint, 1, 19200); // IncludeOptionalField(e_videoBadMBsCap); <--- This field is optional Boolean Tandberg interop //***MODIFIED } #ifndef PASN_NOPRINTON void H245_H261VideoCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_qcifMPI)) strm << setw(indent+10) << "qcifMPI = " << setprecision(indent) << m_qcifMPI << '\n'; if (HasOptionalField(e_cifMPI)) strm << setw(indent+9) << "cifMPI = " << setprecision(indent) << m_cifMPI << '\n'; strm << setw(indent+36) << "temporalSpatialTradeOffCapability = " << setprecision(indent) << m_temporalSpatialTradeOffCapability << '\n'; strm << setw(indent+13) << "maxBitRate = " << setprecision(indent) << m_maxBitRate << '\n'; strm << setw(indent+25) << "stillImageTransmission = " << setprecision(indent) << m_stillImageTransmission << '\n'; if (HasOptionalField(e_videoBadMBsCap)) strm << setw(indent+17) << "videoBadMBsCap = " << setprecision(indent) << m_videoBadMBsCap << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H261VideoCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H261VideoCapability), PInvalidCast); #endif const H245_H261VideoCapability & other = (const H245_H261VideoCapability &)obj; Comparison result; if ((result = m_qcifMPI.Compare(other.m_qcifMPI)) != EqualTo) return result; if ((result = m_cifMPI.Compare(other.m_cifMPI)) != EqualTo) return result; if ((result = m_temporalSpatialTradeOffCapability.Compare(other.m_temporalSpatialTradeOffCapability)) != EqualTo) return result; if ((result = m_maxBitRate.Compare(other.m_maxBitRate)) != EqualTo) return result; if ((result = m_stillImageTransmission.Compare(other.m_stillImageTransmission)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H261VideoCapability::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_qcifMPI)) length += m_qcifMPI.GetObjectLength(); if (HasOptionalField(e_cifMPI)) length += m_cifMPI.GetObjectLength(); length += m_temporalSpatialTradeOffCapability.GetObjectLength(); length += m_maxBitRate.GetObjectLength(); length += m_stillImageTransmission.GetObjectLength(); return length; } PBoolean H245_H261VideoCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_qcifMPI) && !m_qcifMPI.Decode(strm)) return FALSE; if (HasOptionalField(e_cifMPI) && !m_cifMPI.Decode(strm)) return FALSE; if (!m_temporalSpatialTradeOffCapability.Decode(strm)) return FALSE; if (!m_maxBitRate.Decode(strm)) return FALSE; if (!m_stillImageTransmission.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_videoBadMBsCap, m_videoBadMBsCap)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H261VideoCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_qcifMPI)) m_qcifMPI.Encode(strm); if (HasOptionalField(e_cifMPI)) m_cifMPI.Encode(strm); m_temporalSpatialTradeOffCapability.Encode(strm); m_maxBitRate.Encode(strm); m_stillImageTransmission.Encode(strm); KnownExtensionEncode(strm, e_videoBadMBsCap, m_videoBadMBsCap); UnknownExtensionsEncode(strm); } PObject * H245_H261VideoCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H261VideoCapability::Class()), PInvalidCast); #endif return new H245_H261VideoCapability(*this); } // // H262VideoCapability // H245_H262VideoCapability::H245_H262VideoCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 6, FALSE, 0) { m_videoBitRate.SetConstraints(PASN_Object::FixedConstraint, 0, 1073741823); m_vbvBufferSize.SetConstraints(PASN_Object::FixedConstraint, 0, 262143); m_samplesPerLine.SetConstraints(PASN_Object::FixedConstraint, 0, 16383); m_linesPerFrame.SetConstraints(PASN_Object::FixedConstraint, 0, 16383); m_framesPerSecond.SetConstraints(PASN_Object::FixedConstraint, 0, 15); m_luminanceSampleRate.SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); } #ifndef PASN_NOPRINTON void H245_H262VideoCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+25) << "profileAndLevel_SPatML = " << setprecision(indent) << m_profileAndLevel_SPatML << '\n'; strm << setw(indent+25) << "profileAndLevel_MPatLL = " << setprecision(indent) << m_profileAndLevel_MPatLL << '\n'; strm << setw(indent+25) << "profileAndLevel_MPatML = " << setprecision(indent) << m_profileAndLevel_MPatML << '\n'; strm << setw(indent+27) << "profileAndLevel_MPatH_14 = " << setprecision(indent) << m_profileAndLevel_MPatH_14 << '\n'; strm << setw(indent+25) << "profileAndLevel_MPatHL = " << setprecision(indent) << m_profileAndLevel_MPatHL << '\n'; strm << setw(indent+26) << "profileAndLevel_SNRatLL = " << setprecision(indent) << m_profileAndLevel_SNRatLL << '\n'; strm << setw(indent+26) << "profileAndLevel_SNRatML = " << setprecision(indent) << m_profileAndLevel_SNRatML << '\n'; strm << setw(indent+32) << "profileAndLevel_SpatialatH_14 = " << setprecision(indent) << m_profileAndLevel_SpatialatH_14 << '\n'; strm << setw(indent+25) << "profileAndLevel_HPatML = " << setprecision(indent) << m_profileAndLevel_HPatML << '\n'; strm << setw(indent+27) << "profileAndLevel_HPatH_14 = " << setprecision(indent) << m_profileAndLevel_HPatH_14 << '\n'; strm << setw(indent+25) << "profileAndLevel_HPatHL = " << setprecision(indent) << m_profileAndLevel_HPatHL << '\n'; if (HasOptionalField(e_videoBitRate)) strm << setw(indent+15) << "videoBitRate = " << setprecision(indent) << m_videoBitRate << '\n'; if (HasOptionalField(e_vbvBufferSize)) strm << setw(indent+16) << "vbvBufferSize = " << setprecision(indent) << m_vbvBufferSize << '\n'; if (HasOptionalField(e_samplesPerLine)) strm << setw(indent+17) << "samplesPerLine = " << setprecision(indent) << m_samplesPerLine << '\n'; if (HasOptionalField(e_linesPerFrame)) strm << setw(indent+16) << "linesPerFrame = " << setprecision(indent) << m_linesPerFrame << '\n'; if (HasOptionalField(e_framesPerSecond)) strm << setw(indent+18) << "framesPerSecond = " << setprecision(indent) << m_framesPerSecond << '\n'; if (HasOptionalField(e_luminanceSampleRate)) strm << setw(indent+22) << "luminanceSampleRate = " << setprecision(indent) << m_luminanceSampleRate << '\n'; strm << setw(indent+17) << "videoBadMBsCap = " << setprecision(indent) << m_videoBadMBsCap << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H262VideoCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H262VideoCapability), PInvalidCast); #endif const H245_H262VideoCapability & other = (const H245_H262VideoCapability &)obj; Comparison result; if ((result = m_profileAndLevel_SPatML.Compare(other.m_profileAndLevel_SPatML)) != EqualTo) return result; if ((result = m_profileAndLevel_MPatLL.Compare(other.m_profileAndLevel_MPatLL)) != EqualTo) return result; if ((result = m_profileAndLevel_MPatML.Compare(other.m_profileAndLevel_MPatML)) != EqualTo) return result; if ((result = m_profileAndLevel_MPatH_14.Compare(other.m_profileAndLevel_MPatH_14)) != EqualTo) return result; if ((result = m_profileAndLevel_MPatHL.Compare(other.m_profileAndLevel_MPatHL)) != EqualTo) return result; if ((result = m_profileAndLevel_SNRatLL.Compare(other.m_profileAndLevel_SNRatLL)) != EqualTo) return result; if ((result = m_profileAndLevel_SNRatML.Compare(other.m_profileAndLevel_SNRatML)) != EqualTo) return result; if ((result = m_profileAndLevel_SpatialatH_14.Compare(other.m_profileAndLevel_SpatialatH_14)) != EqualTo) return result; if ((result = m_profileAndLevel_HPatML.Compare(other.m_profileAndLevel_HPatML)) != EqualTo) return result; if ((result = m_profileAndLevel_HPatH_14.Compare(other.m_profileAndLevel_HPatH_14)) != EqualTo) return result; if ((result = m_profileAndLevel_HPatHL.Compare(other.m_profileAndLevel_HPatHL)) != EqualTo) return result; if ((result = m_videoBitRate.Compare(other.m_videoBitRate)) != EqualTo) return result; if ((result = m_vbvBufferSize.Compare(other.m_vbvBufferSize)) != EqualTo) return result; if ((result = m_samplesPerLine.Compare(other.m_samplesPerLine)) != EqualTo) return result; if ((result = m_linesPerFrame.Compare(other.m_linesPerFrame)) != EqualTo) return result; if ((result = m_framesPerSecond.Compare(other.m_framesPerSecond)) != EqualTo) return result; if ((result = m_luminanceSampleRate.Compare(other.m_luminanceSampleRate)) != EqualTo) return result; if ((result = m_videoBadMBsCap.Compare(other.m_videoBadMBsCap)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H262VideoCapability::GetDataLength() const { PINDEX length = 0; length += m_profileAndLevel_SPatML.GetObjectLength(); length += m_profileAndLevel_MPatLL.GetObjectLength(); length += m_profileAndLevel_MPatML.GetObjectLength(); length += m_profileAndLevel_MPatH_14.GetObjectLength(); length += m_profileAndLevel_MPatHL.GetObjectLength(); length += m_profileAndLevel_SNRatLL.GetObjectLength(); length += m_profileAndLevel_SNRatML.GetObjectLength(); length += m_profileAndLevel_SpatialatH_14.GetObjectLength(); length += m_profileAndLevel_HPatML.GetObjectLength(); length += m_profileAndLevel_HPatH_14.GetObjectLength(); length += m_profileAndLevel_HPatHL.GetObjectLength(); if (HasOptionalField(e_videoBitRate)) length += m_videoBitRate.GetObjectLength(); if (HasOptionalField(e_vbvBufferSize)) length += m_vbvBufferSize.GetObjectLength(); if (HasOptionalField(e_samplesPerLine)) length += m_samplesPerLine.GetObjectLength(); if (HasOptionalField(e_linesPerFrame)) length += m_linesPerFrame.GetObjectLength(); if (HasOptionalField(e_framesPerSecond)) length += m_framesPerSecond.GetObjectLength(); if (HasOptionalField(e_luminanceSampleRate)) length += m_luminanceSampleRate.GetObjectLength(); length += m_videoBadMBsCap.GetObjectLength(); return length; } PBoolean H245_H262VideoCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_profileAndLevel_SPatML.Decode(strm)) return FALSE; if (!m_profileAndLevel_MPatLL.Decode(strm)) return FALSE; if (!m_profileAndLevel_MPatML.Decode(strm)) return FALSE; if (!m_profileAndLevel_MPatH_14.Decode(strm)) return FALSE; if (!m_profileAndLevel_MPatHL.Decode(strm)) return FALSE; if (!m_profileAndLevel_SNRatLL.Decode(strm)) return FALSE; if (!m_profileAndLevel_SNRatML.Decode(strm)) return FALSE; if (!m_profileAndLevel_SpatialatH_14.Decode(strm)) return FALSE; if (!m_profileAndLevel_HPatML.Decode(strm)) return FALSE; if (!m_profileAndLevel_HPatH_14.Decode(strm)) return FALSE; if (!m_profileAndLevel_HPatHL.Decode(strm)) return FALSE; if (HasOptionalField(e_videoBitRate) && !m_videoBitRate.Decode(strm)) return FALSE; if (HasOptionalField(e_vbvBufferSize) && !m_vbvBufferSize.Decode(strm)) return FALSE; if (HasOptionalField(e_samplesPerLine) && !m_samplesPerLine.Decode(strm)) return FALSE; if (HasOptionalField(e_linesPerFrame) && !m_linesPerFrame.Decode(strm)) return FALSE; if (HasOptionalField(e_framesPerSecond) && !m_framesPerSecond.Decode(strm)) return FALSE; if (HasOptionalField(e_luminanceSampleRate) && !m_luminanceSampleRate.Decode(strm)) return FALSE; if (!m_videoBadMBsCap.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H262VideoCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_profileAndLevel_SPatML.Encode(strm); m_profileAndLevel_MPatLL.Encode(strm); m_profileAndLevel_MPatML.Encode(strm); m_profileAndLevel_MPatH_14.Encode(strm); m_profileAndLevel_MPatHL.Encode(strm); m_profileAndLevel_SNRatLL.Encode(strm); m_profileAndLevel_SNRatML.Encode(strm); m_profileAndLevel_SpatialatH_14.Encode(strm); m_profileAndLevel_HPatML.Encode(strm); m_profileAndLevel_HPatH_14.Encode(strm); m_profileAndLevel_HPatHL.Encode(strm); if (HasOptionalField(e_videoBitRate)) m_videoBitRate.Encode(strm); if (HasOptionalField(e_vbvBufferSize)) m_vbvBufferSize.Encode(strm); if (HasOptionalField(e_samplesPerLine)) m_samplesPerLine.Encode(strm); if (HasOptionalField(e_linesPerFrame)) m_linesPerFrame.Encode(strm); if (HasOptionalField(e_framesPerSecond)) m_framesPerSecond.Encode(strm); if (HasOptionalField(e_luminanceSampleRate)) m_luminanceSampleRate.Encode(strm); m_videoBadMBsCap.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H262VideoCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H262VideoCapability::Class()), PInvalidCast); #endif return new H245_H262VideoCapability(*this); } // // TransparencyParameters // H245_TransparencyParameters::H245_TransparencyParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_presentationOrder.SetConstraints(PASN_Object::FixedConstraint, 1, 256); m_offset_x.SetConstraints(PASN_Object::FixedConstraint, -262144, 262143); m_offset_y.SetConstraints(PASN_Object::FixedConstraint, -262144, 262143); m_scale_x.SetConstraints(PASN_Object::FixedConstraint, 1, 255); m_scale_y.SetConstraints(PASN_Object::FixedConstraint, 1, 255); } #ifndef PASN_NOPRINTON void H245_TransparencyParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+20) << "presentationOrder = " << setprecision(indent) << m_presentationOrder << '\n'; strm << setw(indent+11) << "offset_x = " << setprecision(indent) << m_offset_x << '\n'; strm << setw(indent+11) << "offset_y = " << setprecision(indent) << m_offset_y << '\n'; strm << setw(indent+10) << "scale_x = " << setprecision(indent) << m_scale_x << '\n'; strm << setw(indent+10) << "scale_y = " << setprecision(indent) << m_scale_y << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_TransparencyParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_TransparencyParameters), PInvalidCast); #endif const H245_TransparencyParameters & other = (const H245_TransparencyParameters &)obj; Comparison result; if ((result = m_presentationOrder.Compare(other.m_presentationOrder)) != EqualTo) return result; if ((result = m_offset_x.Compare(other.m_offset_x)) != EqualTo) return result; if ((result = m_offset_y.Compare(other.m_offset_y)) != EqualTo) return result; if ((result = m_scale_x.Compare(other.m_scale_x)) != EqualTo) return result; if ((result = m_scale_y.Compare(other.m_scale_y)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_TransparencyParameters::GetDataLength() const { PINDEX length = 0; length += m_presentationOrder.GetObjectLength(); length += m_offset_x.GetObjectLength(); length += m_offset_y.GetObjectLength(); length += m_scale_x.GetObjectLength(); length += m_scale_y.GetObjectLength(); return length; } PBoolean H245_TransparencyParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_presentationOrder.Decode(strm)) return FALSE; if (!m_offset_x.Decode(strm)) return FALSE; if (!m_offset_y.Decode(strm)) return FALSE; if (!m_scale_x.Decode(strm)) return FALSE; if (!m_scale_y.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_TransparencyParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_presentationOrder.Encode(strm); m_offset_x.Encode(strm); m_offset_y.Encode(strm); m_scale_x.Encode(strm); m_scale_y.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_TransparencyParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_TransparencyParameters::Class()), PInvalidCast); #endif return new H245_TransparencyParameters(*this); } // // CustomPictureClockFrequency // H245_CustomPictureClockFrequency::H245_CustomPictureClockFrequency(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 5, TRUE, 0) { m_clockConversionCode.SetConstraints(PASN_Object::FixedConstraint, 1000, 1001); m_clockDivisor.SetConstraints(PASN_Object::FixedConstraint, 1, 127); m_sqcifMPI.SetConstraints(PASN_Object::FixedConstraint, 1, 2048); m_qcifMPI.SetConstraints(PASN_Object::FixedConstraint, 1, 2048); m_cifMPI.SetConstraints(PASN_Object::FixedConstraint, 1, 2048); m_cif4MPI.SetConstraints(PASN_Object::FixedConstraint, 1, 2048); m_cif16MPI.SetConstraints(PASN_Object::FixedConstraint, 1, 2048); } #ifndef PASN_NOPRINTON void H245_CustomPictureClockFrequency::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+22) << "clockConversionCode = " << setprecision(indent) << m_clockConversionCode << '\n'; strm << setw(indent+15) << "clockDivisor = " << setprecision(indent) << m_clockDivisor << '\n'; if (HasOptionalField(e_sqcifMPI)) strm << setw(indent+11) << "sqcifMPI = " << setprecision(indent) << m_sqcifMPI << '\n'; if (HasOptionalField(e_qcifMPI)) strm << setw(indent+10) << "qcifMPI = " << setprecision(indent) << m_qcifMPI << '\n'; if (HasOptionalField(e_cifMPI)) strm << setw(indent+9) << "cifMPI = " << setprecision(indent) << m_cifMPI << '\n'; if (HasOptionalField(e_cif4MPI)) strm << setw(indent+10) << "cif4MPI = " << setprecision(indent) << m_cif4MPI << '\n'; if (HasOptionalField(e_cif16MPI)) strm << setw(indent+11) << "cif16MPI = " << setprecision(indent) << m_cif16MPI << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_CustomPictureClockFrequency::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_CustomPictureClockFrequency), PInvalidCast); #endif const H245_CustomPictureClockFrequency & other = (const H245_CustomPictureClockFrequency &)obj; Comparison result; if ((result = m_clockConversionCode.Compare(other.m_clockConversionCode)) != EqualTo) return result; if ((result = m_clockDivisor.Compare(other.m_clockDivisor)) != EqualTo) return result; if ((result = m_sqcifMPI.Compare(other.m_sqcifMPI)) != EqualTo) return result; if ((result = m_qcifMPI.Compare(other.m_qcifMPI)) != EqualTo) return result; if ((result = m_cifMPI.Compare(other.m_cifMPI)) != EqualTo) return result; if ((result = m_cif4MPI.Compare(other.m_cif4MPI)) != EqualTo) return result; if ((result = m_cif16MPI.Compare(other.m_cif16MPI)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_CustomPictureClockFrequency::GetDataLength() const { PINDEX length = 0; length += m_clockConversionCode.GetObjectLength(); length += m_clockDivisor.GetObjectLength(); if (HasOptionalField(e_sqcifMPI)) length += m_sqcifMPI.GetObjectLength(); if (HasOptionalField(e_qcifMPI)) length += m_qcifMPI.GetObjectLength(); if (HasOptionalField(e_cifMPI)) length += m_cifMPI.GetObjectLength(); if (HasOptionalField(e_cif4MPI)) length += m_cif4MPI.GetObjectLength(); if (HasOptionalField(e_cif16MPI)) length += m_cif16MPI.GetObjectLength(); return length; } PBoolean H245_CustomPictureClockFrequency::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_clockConversionCode.Decode(strm)) return FALSE; if (!m_clockDivisor.Decode(strm)) return FALSE; if (HasOptionalField(e_sqcifMPI) && !m_sqcifMPI.Decode(strm)) return FALSE; if (HasOptionalField(e_qcifMPI) && !m_qcifMPI.Decode(strm)) return FALSE; if (HasOptionalField(e_cifMPI) && !m_cifMPI.Decode(strm)) return FALSE; if (HasOptionalField(e_cif4MPI) && !m_cif4MPI.Decode(strm)) return FALSE; if (HasOptionalField(e_cif16MPI) && !m_cif16MPI.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_CustomPictureClockFrequency::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_clockConversionCode.Encode(strm); m_clockDivisor.Encode(strm); if (HasOptionalField(e_sqcifMPI)) m_sqcifMPI.Encode(strm); if (HasOptionalField(e_qcifMPI)) m_qcifMPI.Encode(strm); if (HasOptionalField(e_cifMPI)) m_cifMPI.Encode(strm); if (HasOptionalField(e_cif4MPI)) m_cif4MPI.Encode(strm); if (HasOptionalField(e_cif16MPI)) m_cif16MPI.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_CustomPictureClockFrequency::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CustomPictureClockFrequency::Class()), PInvalidCast); #endif return new H245_CustomPictureClockFrequency(*this); } // // H263Version3Options // H245_H263Version3Options::H245_H263Version3Options(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_H263Version3Options::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "dataPartitionedSlices = " << setprecision(indent) << m_dataPartitionedSlices << '\n'; strm << setw(indent+18) << "fixedPointIDCT0 = " << setprecision(indent) << m_fixedPointIDCT0 << '\n'; strm << setw(indent+19) << "interlacedFields = " << setprecision(indent) << m_interlacedFields << '\n'; strm << setw(indent+33) << "currentPictureHeaderRepetition = " << setprecision(indent) << m_currentPictureHeaderRepetition << '\n'; strm << setw(indent+34) << "previousPictureHeaderRepetition = " << setprecision(indent) << m_previousPictureHeaderRepetition << '\n'; strm << setw(indent+30) << "nextPictureHeaderRepetition = " << setprecision(indent) << m_nextPictureHeaderRepetition << '\n'; strm << setw(indent+16) << "pictureNumber = " << setprecision(indent) << m_pictureNumber << '\n'; strm << setw(indent+25) << "spareReferencePictures = " << setprecision(indent) << m_spareReferencePictures << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H263Version3Options::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H263Version3Options), PInvalidCast); #endif const H245_H263Version3Options & other = (const H245_H263Version3Options &)obj; Comparison result; if ((result = m_dataPartitionedSlices.Compare(other.m_dataPartitionedSlices)) != EqualTo) return result; if ((result = m_fixedPointIDCT0.Compare(other.m_fixedPointIDCT0)) != EqualTo) return result; if ((result = m_interlacedFields.Compare(other.m_interlacedFields)) != EqualTo) return result; if ((result = m_currentPictureHeaderRepetition.Compare(other.m_currentPictureHeaderRepetition)) != EqualTo) return result; if ((result = m_previousPictureHeaderRepetition.Compare(other.m_previousPictureHeaderRepetition)) != EqualTo) return result; if ((result = m_nextPictureHeaderRepetition.Compare(other.m_nextPictureHeaderRepetition)) != EqualTo) return result; if ((result = m_pictureNumber.Compare(other.m_pictureNumber)) != EqualTo) return result; if ((result = m_spareReferencePictures.Compare(other.m_spareReferencePictures)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H263Version3Options::GetDataLength() const { PINDEX length = 0; length += m_dataPartitionedSlices.GetObjectLength(); length += m_fixedPointIDCT0.GetObjectLength(); length += m_interlacedFields.GetObjectLength(); length += m_currentPictureHeaderRepetition.GetObjectLength(); length += m_previousPictureHeaderRepetition.GetObjectLength(); length += m_nextPictureHeaderRepetition.GetObjectLength(); length += m_pictureNumber.GetObjectLength(); length += m_spareReferencePictures.GetObjectLength(); return length; } PBoolean H245_H263Version3Options::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_dataPartitionedSlices.Decode(strm)) return FALSE; if (!m_fixedPointIDCT0.Decode(strm)) return FALSE; if (!m_interlacedFields.Decode(strm)) return FALSE; if (!m_currentPictureHeaderRepetition.Decode(strm)) return FALSE; if (!m_previousPictureHeaderRepetition.Decode(strm)) return FALSE; if (!m_nextPictureHeaderRepetition.Decode(strm)) return FALSE; if (!m_pictureNumber.Decode(strm)) return FALSE; if (!m_spareReferencePictures.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H263Version3Options::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_dataPartitionedSlices.Encode(strm); m_fixedPointIDCT0.Encode(strm); m_interlacedFields.Encode(strm); m_currentPictureHeaderRepetition.Encode(strm); m_previousPictureHeaderRepetition.Encode(strm); m_nextPictureHeaderRepetition.Encode(strm); m_pictureNumber.Encode(strm); m_spareReferencePictures.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H263Version3Options::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H263Version3Options::Class()), PInvalidCast); #endif return new H245_H263Version3Options(*this); } // // IS11172VideoCapability // H245_IS11172VideoCapability::H245_IS11172VideoCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 6, TRUE, 1) { m_videoBitRate.SetConstraints(PASN_Object::FixedConstraint, 0, 1073741823); m_vbvBufferSize.SetConstraints(PASN_Object::FixedConstraint, 0, 262143); m_samplesPerLine.SetConstraints(PASN_Object::FixedConstraint, 0, 16383); m_linesPerFrame.SetConstraints(PASN_Object::FixedConstraint, 0, 16383); m_pictureRate.SetConstraints(PASN_Object::FixedConstraint, 0, 15); m_luminanceSampleRate.SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); IncludeOptionalField(e_videoBadMBsCap); } #ifndef PASN_NOPRINTON void H245_IS11172VideoCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+23) << "constrainedBitstream = " << setprecision(indent) << m_constrainedBitstream << '\n'; if (HasOptionalField(e_videoBitRate)) strm << setw(indent+15) << "videoBitRate = " << setprecision(indent) << m_videoBitRate << '\n'; if (HasOptionalField(e_vbvBufferSize)) strm << setw(indent+16) << "vbvBufferSize = " << setprecision(indent) << m_vbvBufferSize << '\n'; if (HasOptionalField(e_samplesPerLine)) strm << setw(indent+17) << "samplesPerLine = " << setprecision(indent) << m_samplesPerLine << '\n'; if (HasOptionalField(e_linesPerFrame)) strm << setw(indent+16) << "linesPerFrame = " << setprecision(indent) << m_linesPerFrame << '\n'; if (HasOptionalField(e_pictureRate)) strm << setw(indent+14) << "pictureRate = " << setprecision(indent) << m_pictureRate << '\n'; if (HasOptionalField(e_luminanceSampleRate)) strm << setw(indent+22) << "luminanceSampleRate = " << setprecision(indent) << m_luminanceSampleRate << '\n'; if (HasOptionalField(e_videoBadMBsCap)) strm << setw(indent+17) << "videoBadMBsCap = " << setprecision(indent) << m_videoBadMBsCap << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_IS11172VideoCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_IS11172VideoCapability), PInvalidCast); #endif const H245_IS11172VideoCapability & other = (const H245_IS11172VideoCapability &)obj; Comparison result; if ((result = m_constrainedBitstream.Compare(other.m_constrainedBitstream)) != EqualTo) return result; if ((result = m_videoBitRate.Compare(other.m_videoBitRate)) != EqualTo) return result; if ((result = m_vbvBufferSize.Compare(other.m_vbvBufferSize)) != EqualTo) return result; if ((result = m_samplesPerLine.Compare(other.m_samplesPerLine)) != EqualTo) return result; if ((result = m_linesPerFrame.Compare(other.m_linesPerFrame)) != EqualTo) return result; if ((result = m_pictureRate.Compare(other.m_pictureRate)) != EqualTo) return result; if ((result = m_luminanceSampleRate.Compare(other.m_luminanceSampleRate)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_IS11172VideoCapability::GetDataLength() const { PINDEX length = 0; length += m_constrainedBitstream.GetObjectLength(); if (HasOptionalField(e_videoBitRate)) length += m_videoBitRate.GetObjectLength(); if (HasOptionalField(e_vbvBufferSize)) length += m_vbvBufferSize.GetObjectLength(); if (HasOptionalField(e_samplesPerLine)) length += m_samplesPerLine.GetObjectLength(); if (HasOptionalField(e_linesPerFrame)) length += m_linesPerFrame.GetObjectLength(); if (HasOptionalField(e_pictureRate)) length += m_pictureRate.GetObjectLength(); if (HasOptionalField(e_luminanceSampleRate)) length += m_luminanceSampleRate.GetObjectLength(); return length; } PBoolean H245_IS11172VideoCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_constrainedBitstream.Decode(strm)) return FALSE; if (HasOptionalField(e_videoBitRate) && !m_videoBitRate.Decode(strm)) return FALSE; if (HasOptionalField(e_vbvBufferSize) && !m_vbvBufferSize.Decode(strm)) return FALSE; if (HasOptionalField(e_samplesPerLine) && !m_samplesPerLine.Decode(strm)) return FALSE; if (HasOptionalField(e_linesPerFrame) && !m_linesPerFrame.Decode(strm)) return FALSE; if (HasOptionalField(e_pictureRate) && !m_pictureRate.Decode(strm)) return FALSE; if (HasOptionalField(e_luminanceSampleRate) && !m_luminanceSampleRate.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_videoBadMBsCap, m_videoBadMBsCap)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_IS11172VideoCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_constrainedBitstream.Encode(strm); if (HasOptionalField(e_videoBitRate)) m_videoBitRate.Encode(strm); if (HasOptionalField(e_vbvBufferSize)) m_vbvBufferSize.Encode(strm); if (HasOptionalField(e_samplesPerLine)) m_samplesPerLine.Encode(strm); if (HasOptionalField(e_linesPerFrame)) m_linesPerFrame.Encode(strm); if (HasOptionalField(e_pictureRate)) m_pictureRate.Encode(strm); if (HasOptionalField(e_luminanceSampleRate)) m_luminanceSampleRate.Encode(strm); KnownExtensionEncode(strm, e_videoBadMBsCap, m_videoBadMBsCap); UnknownExtensionsEncode(strm); } PObject * H245_IS11172VideoCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_IS11172VideoCapability::Class()), PInvalidCast); #endif return new H245_IS11172VideoCapability(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_AudioCapability[]={ {"nonStandard",0} ,{"g711Alaw64k",1} ,{"g711Alaw56k",2} ,{"g711Ulaw64k",3} ,{"g711Ulaw56k",4} ,{"g722_64k",5} ,{"g722_56k",6} ,{"g722_48k",7} ,{"g7231",8} ,{"g728",9} ,{"g729",10} ,{"g729AnnexA",11} ,{"is11172AudioCapability",12} ,{"is13818AudioCapability",13} ,{"g729wAnnexB",14} ,{"g729AnnexAwAnnexB",15} ,{"g7231AnnexCCapability",16} ,{"gsmFullRate",17} ,{"gsmHalfRate",18} ,{"gsmEnhancedFullRate",19} ,{"genericAudioCapability",20} ,{"g729Extensions",21} ,{"vbd",22} ,{"audioTelephonyEvent",23} ,{"audioTone",24} }; #endif // // AudioCapability // H245_AudioCapability::H245_AudioCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 14, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_AudioCapability,25 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_AudioCapability::operator H245_NonStandardParameter &() const #else H245_AudioCapability::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_AudioCapability::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_AudioCapability::operator H245_AudioCapability_g7231 &() const #else H245_AudioCapability::operator H245_AudioCapability_g7231 &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioCapability_g7231), PInvalidCast); #endif return *(H245_AudioCapability_g7231 *)choice; } H245_AudioCapability::operator const H245_AudioCapability_g7231 &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioCapability_g7231), PInvalidCast); #endif return *(H245_AudioCapability_g7231 *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_AudioCapability::operator H245_IS11172AudioCapability &() const #else H245_AudioCapability::operator H245_IS11172AudioCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_IS11172AudioCapability), PInvalidCast); #endif return *(H245_IS11172AudioCapability *)choice; } H245_AudioCapability::operator const H245_IS11172AudioCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_IS11172AudioCapability), PInvalidCast); #endif return *(H245_IS11172AudioCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_AudioCapability::operator H245_IS13818AudioCapability &() const #else H245_AudioCapability::operator H245_IS13818AudioCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_IS13818AudioCapability), PInvalidCast); #endif return *(H245_IS13818AudioCapability *)choice; } H245_AudioCapability::operator const H245_IS13818AudioCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_IS13818AudioCapability), PInvalidCast); #endif return *(H245_IS13818AudioCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_AudioCapability::operator H245_G7231AnnexCCapability &() const #else H245_AudioCapability::operator H245_G7231AnnexCCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_G7231AnnexCCapability), PInvalidCast); #endif return *(H245_G7231AnnexCCapability *)choice; } H245_AudioCapability::operator const H245_G7231AnnexCCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_G7231AnnexCCapability), PInvalidCast); #endif return *(H245_G7231AnnexCCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_AudioCapability::operator H245_GSMAudioCapability &() const #else H245_AudioCapability::operator H245_GSMAudioCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GSMAudioCapability), PInvalidCast); #endif return *(H245_GSMAudioCapability *)choice; } H245_AudioCapability::operator const H245_GSMAudioCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GSMAudioCapability), PInvalidCast); #endif return *(H245_GSMAudioCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_AudioCapability::operator H245_GenericCapability &() const #else H245_AudioCapability::operator H245_GenericCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericCapability), PInvalidCast); #endif return *(H245_GenericCapability *)choice; } H245_AudioCapability::operator const H245_GenericCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericCapability), PInvalidCast); #endif return *(H245_GenericCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_AudioCapability::operator H245_G729Extensions &() const #else H245_AudioCapability::operator H245_G729Extensions &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_G729Extensions), PInvalidCast); #endif return *(H245_G729Extensions *)choice; } H245_AudioCapability::operator const H245_G729Extensions &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_G729Extensions), PInvalidCast); #endif return *(H245_G729Extensions *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_AudioCapability::operator H245_VBDCapability &() const #else H245_AudioCapability::operator H245_VBDCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VBDCapability), PInvalidCast); #endif return *(H245_VBDCapability *)choice; } H245_AudioCapability::operator const H245_VBDCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VBDCapability), PInvalidCast); #endif return *(H245_VBDCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_AudioCapability::operator H245_NoPTAudioTelephonyEventCapability &() const #else H245_AudioCapability::operator H245_NoPTAudioTelephonyEventCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NoPTAudioTelephonyEventCapability), PInvalidCast); #endif return *(H245_NoPTAudioTelephonyEventCapability *)choice; } H245_AudioCapability::operator const H245_NoPTAudioTelephonyEventCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NoPTAudioTelephonyEventCapability), PInvalidCast); #endif return *(H245_NoPTAudioTelephonyEventCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_AudioCapability::operator H245_NoPTAudioToneCapability &() const #else H245_AudioCapability::operator H245_NoPTAudioToneCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NoPTAudioToneCapability), PInvalidCast); #endif return *(H245_NoPTAudioToneCapability *)choice; } H245_AudioCapability::operator const H245_NoPTAudioToneCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NoPTAudioToneCapability), PInvalidCast); #endif return *(H245_NoPTAudioToneCapability *)choice; } PBoolean H245_AudioCapability::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_g711Alaw64k : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 256); return TRUE; case e_g711Alaw56k : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 256); return TRUE; case e_g711Ulaw64k : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 256); return TRUE; case e_g711Ulaw56k : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 256); return TRUE; case e_g722_64k : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 256); return TRUE; case e_g722_56k : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 256); return TRUE; case e_g722_48k : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 256); return TRUE; case e_g7231 : choice = new H245_AudioCapability_g7231(); return TRUE; case e_g728 : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 256); return TRUE; case e_g729 : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 256); return TRUE; case e_g729AnnexA : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 256); return TRUE; case e_is11172AudioCapability : choice = new H245_IS11172AudioCapability(); return TRUE; case e_is13818AudioCapability : choice = new H245_IS13818AudioCapability(); return TRUE; case e_g729wAnnexB : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 256); return TRUE; case e_g729AnnexAwAnnexB : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 256); return TRUE; case e_g7231AnnexCCapability : choice = new H245_G7231AnnexCCapability(); return TRUE; case e_gsmFullRate : case e_gsmHalfRate : case e_gsmEnhancedFullRate : choice = new H245_GSMAudioCapability(); return TRUE; case e_genericAudioCapability : choice = new H245_GenericCapability(); return TRUE; case e_g729Extensions : choice = new H245_G729Extensions(); return TRUE; case e_vbd : choice = new H245_VBDCapability(); return TRUE; case e_audioTelephonyEvent : choice = new H245_NoPTAudioTelephonyEventCapability(); return TRUE; case e_audioTone : choice = new H245_NoPTAudioToneCapability(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_AudioCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_AudioCapability::Class()), PInvalidCast); #endif return new H245_AudioCapability(*this); } // // G729Extensions // H245_G729Extensions::H245_G729Extensions(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_audioUnit.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_G729Extensions::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_audioUnit)) strm << setw(indent+12) << "audioUnit = " << setprecision(indent) << m_audioUnit << '\n'; strm << setw(indent+9) << "annexA = " << setprecision(indent) << m_annexA << '\n'; strm << setw(indent+9) << "annexB = " << setprecision(indent) << m_annexB << '\n'; strm << setw(indent+9) << "annexD = " << setprecision(indent) << m_annexD << '\n'; strm << setw(indent+9) << "annexE = " << setprecision(indent) << m_annexE << '\n'; strm << setw(indent+9) << "annexF = " << setprecision(indent) << m_annexF << '\n'; strm << setw(indent+9) << "annexG = " << setprecision(indent) << m_annexG << '\n'; strm << setw(indent+9) << "annexH = " << setprecision(indent) << m_annexH << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_G729Extensions::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_G729Extensions), PInvalidCast); #endif const H245_G729Extensions & other = (const H245_G729Extensions &)obj; Comparison result; if ((result = m_audioUnit.Compare(other.m_audioUnit)) != EqualTo) return result; if ((result = m_annexA.Compare(other.m_annexA)) != EqualTo) return result; if ((result = m_annexB.Compare(other.m_annexB)) != EqualTo) return result; if ((result = m_annexD.Compare(other.m_annexD)) != EqualTo) return result; if ((result = m_annexE.Compare(other.m_annexE)) != EqualTo) return result; if ((result = m_annexF.Compare(other.m_annexF)) != EqualTo) return result; if ((result = m_annexG.Compare(other.m_annexG)) != EqualTo) return result; if ((result = m_annexH.Compare(other.m_annexH)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_G729Extensions::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_audioUnit)) length += m_audioUnit.GetObjectLength(); length += m_annexA.GetObjectLength(); length += m_annexB.GetObjectLength(); length += m_annexD.GetObjectLength(); length += m_annexE.GetObjectLength(); length += m_annexF.GetObjectLength(); length += m_annexG.GetObjectLength(); length += m_annexH.GetObjectLength(); return length; } PBoolean H245_G729Extensions::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_audioUnit) && !m_audioUnit.Decode(strm)) return FALSE; if (!m_annexA.Decode(strm)) return FALSE; if (!m_annexB.Decode(strm)) return FALSE; if (!m_annexD.Decode(strm)) return FALSE; if (!m_annexE.Decode(strm)) return FALSE; if (!m_annexF.Decode(strm)) return FALSE; if (!m_annexG.Decode(strm)) return FALSE; if (!m_annexH.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_G729Extensions::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_audioUnit)) m_audioUnit.Encode(strm); m_annexA.Encode(strm); m_annexB.Encode(strm); m_annexD.Encode(strm); m_annexE.Encode(strm); m_annexF.Encode(strm); m_annexG.Encode(strm); m_annexH.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_G729Extensions::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_G729Extensions::Class()), PInvalidCast); #endif return new H245_G729Extensions(*this); } // // IS11172AudioCapability // H245_IS11172AudioCapability::H245_IS11172AudioCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_bitRate.SetConstraints(PASN_Object::FixedConstraint, 1, 448); } #ifndef PASN_NOPRINTON void H245_IS11172AudioCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "audioLayer1 = " << setprecision(indent) << m_audioLayer1 << '\n'; strm << setw(indent+14) << "audioLayer2 = " << setprecision(indent) << m_audioLayer2 << '\n'; strm << setw(indent+14) << "audioLayer3 = " << setprecision(indent) << m_audioLayer3 << '\n'; strm << setw(indent+19) << "audioSampling32k = " << setprecision(indent) << m_audioSampling32k << '\n'; strm << setw(indent+20) << "audioSampling44k1 = " << setprecision(indent) << m_audioSampling44k1 << '\n'; strm << setw(indent+19) << "audioSampling48k = " << setprecision(indent) << m_audioSampling48k << '\n'; strm << setw(indent+16) << "singleChannel = " << setprecision(indent) << m_singleChannel << '\n'; strm << setw(indent+14) << "twoChannels = " << setprecision(indent) << m_twoChannels << '\n'; strm << setw(indent+10) << "bitRate = " << setprecision(indent) << m_bitRate << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_IS11172AudioCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_IS11172AudioCapability), PInvalidCast); #endif const H245_IS11172AudioCapability & other = (const H245_IS11172AudioCapability &)obj; Comparison result; if ((result = m_audioLayer1.Compare(other.m_audioLayer1)) != EqualTo) return result; if ((result = m_audioLayer2.Compare(other.m_audioLayer2)) != EqualTo) return result; if ((result = m_audioLayer3.Compare(other.m_audioLayer3)) != EqualTo) return result; if ((result = m_audioSampling32k.Compare(other.m_audioSampling32k)) != EqualTo) return result; if ((result = m_audioSampling44k1.Compare(other.m_audioSampling44k1)) != EqualTo) return result; if ((result = m_audioSampling48k.Compare(other.m_audioSampling48k)) != EqualTo) return result; if ((result = m_singleChannel.Compare(other.m_singleChannel)) != EqualTo) return result; if ((result = m_twoChannels.Compare(other.m_twoChannels)) != EqualTo) return result; if ((result = m_bitRate.Compare(other.m_bitRate)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_IS11172AudioCapability::GetDataLength() const { PINDEX length = 0; length += m_audioLayer1.GetObjectLength(); length += m_audioLayer2.GetObjectLength(); length += m_audioLayer3.GetObjectLength(); length += m_audioSampling32k.GetObjectLength(); length += m_audioSampling44k1.GetObjectLength(); length += m_audioSampling48k.GetObjectLength(); length += m_singleChannel.GetObjectLength(); length += m_twoChannels.GetObjectLength(); length += m_bitRate.GetObjectLength(); return length; } PBoolean H245_IS11172AudioCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_audioLayer1.Decode(strm)) return FALSE; if (!m_audioLayer2.Decode(strm)) return FALSE; if (!m_audioLayer3.Decode(strm)) return FALSE; if (!m_audioSampling32k.Decode(strm)) return FALSE; if (!m_audioSampling44k1.Decode(strm)) return FALSE; if (!m_audioSampling48k.Decode(strm)) return FALSE; if (!m_singleChannel.Decode(strm)) return FALSE; if (!m_twoChannels.Decode(strm)) return FALSE; if (!m_bitRate.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_IS11172AudioCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_audioLayer1.Encode(strm); m_audioLayer2.Encode(strm); m_audioLayer3.Encode(strm); m_audioSampling32k.Encode(strm); m_audioSampling44k1.Encode(strm); m_audioSampling48k.Encode(strm); m_singleChannel.Encode(strm); m_twoChannels.Encode(strm); m_bitRate.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_IS11172AudioCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_IS11172AudioCapability::Class()), PInvalidCast); #endif return new H245_IS11172AudioCapability(*this); } // // IS13818AudioCapability // H245_IS13818AudioCapability::H245_IS13818AudioCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_bitRate.SetConstraints(PASN_Object::FixedConstraint, 1, 1130); } #ifndef PASN_NOPRINTON void H245_IS13818AudioCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "audioLayer1 = " << setprecision(indent) << m_audioLayer1 << '\n'; strm << setw(indent+14) << "audioLayer2 = " << setprecision(indent) << m_audioLayer2 << '\n'; strm << setw(indent+14) << "audioLayer3 = " << setprecision(indent) << m_audioLayer3 << '\n'; strm << setw(indent+19) << "audioSampling16k = " << setprecision(indent) << m_audioSampling16k << '\n'; strm << setw(indent+21) << "audioSampling22k05 = " << setprecision(indent) << m_audioSampling22k05 << '\n'; strm << setw(indent+19) << "audioSampling24k = " << setprecision(indent) << m_audioSampling24k << '\n'; strm << setw(indent+19) << "audioSampling32k = " << setprecision(indent) << m_audioSampling32k << '\n'; strm << setw(indent+20) << "audioSampling44k1 = " << setprecision(indent) << m_audioSampling44k1 << '\n'; strm << setw(indent+19) << "audioSampling48k = " << setprecision(indent) << m_audioSampling48k << '\n'; strm << setw(indent+16) << "singleChannel = " << setprecision(indent) << m_singleChannel << '\n'; strm << setw(indent+14) << "twoChannels = " << setprecision(indent) << m_twoChannels << '\n'; strm << setw(indent+19) << "threeChannels2_1 = " << setprecision(indent) << m_threeChannels2_1 << '\n'; strm << setw(indent+19) << "threeChannels3_0 = " << setprecision(indent) << m_threeChannels3_0 << '\n'; strm << setw(indent+22) << "fourChannels2_0_2_0 = " << setprecision(indent) << m_fourChannels2_0_2_0 << '\n'; strm << setw(indent+18) << "fourChannels2_2 = " << setprecision(indent) << m_fourChannels2_2 << '\n'; strm << setw(indent+18) << "fourChannels3_1 = " << setprecision(indent) << m_fourChannels3_1 << '\n'; strm << setw(indent+22) << "fiveChannels3_0_2_0 = " << setprecision(indent) << m_fiveChannels3_0_2_0 << '\n'; strm << setw(indent+18) << "fiveChannels3_2 = " << setprecision(indent) << m_fiveChannels3_2 << '\n'; strm << setw(indent+26) << "lowFrequencyEnhancement = " << setprecision(indent) << m_lowFrequencyEnhancement << '\n'; strm << setw(indent+15) << "multilingual = " << setprecision(indent) << m_multilingual << '\n'; strm << setw(indent+10) << "bitRate = " << setprecision(indent) << m_bitRate << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_IS13818AudioCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_IS13818AudioCapability), PInvalidCast); #endif const H245_IS13818AudioCapability & other = (const H245_IS13818AudioCapability &)obj; Comparison result; if ((result = m_audioLayer1.Compare(other.m_audioLayer1)) != EqualTo) return result; if ((result = m_audioLayer2.Compare(other.m_audioLayer2)) != EqualTo) return result; if ((result = m_audioLayer3.Compare(other.m_audioLayer3)) != EqualTo) return result; if ((result = m_audioSampling16k.Compare(other.m_audioSampling16k)) != EqualTo) return result; if ((result = m_audioSampling22k05.Compare(other.m_audioSampling22k05)) != EqualTo) return result; if ((result = m_audioSampling24k.Compare(other.m_audioSampling24k)) != EqualTo) return result; if ((result = m_audioSampling32k.Compare(other.m_audioSampling32k)) != EqualTo) return result; if ((result = m_audioSampling44k1.Compare(other.m_audioSampling44k1)) != EqualTo) return result; if ((result = m_audioSampling48k.Compare(other.m_audioSampling48k)) != EqualTo) return result; if ((result = m_singleChannel.Compare(other.m_singleChannel)) != EqualTo) return result; if ((result = m_twoChannels.Compare(other.m_twoChannels)) != EqualTo) return result; if ((result = m_threeChannels2_1.Compare(other.m_threeChannels2_1)) != EqualTo) return result; if ((result = m_threeChannels3_0.Compare(other.m_threeChannels3_0)) != EqualTo) return result; if ((result = m_fourChannels2_0_2_0.Compare(other.m_fourChannels2_0_2_0)) != EqualTo) return result; if ((result = m_fourChannels2_2.Compare(other.m_fourChannels2_2)) != EqualTo) return result; if ((result = m_fourChannels3_1.Compare(other.m_fourChannels3_1)) != EqualTo) return result; if ((result = m_fiveChannels3_0_2_0.Compare(other.m_fiveChannels3_0_2_0)) != EqualTo) return result; if ((result = m_fiveChannels3_2.Compare(other.m_fiveChannels3_2)) != EqualTo) return result; if ((result = m_lowFrequencyEnhancement.Compare(other.m_lowFrequencyEnhancement)) != EqualTo) return result; if ((result = m_multilingual.Compare(other.m_multilingual)) != EqualTo) return result; if ((result = m_bitRate.Compare(other.m_bitRate)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_IS13818AudioCapability::GetDataLength() const { PINDEX length = 0; length += m_audioLayer1.GetObjectLength(); length += m_audioLayer2.GetObjectLength(); length += m_audioLayer3.GetObjectLength(); length += m_audioSampling16k.GetObjectLength(); length += m_audioSampling22k05.GetObjectLength(); length += m_audioSampling24k.GetObjectLength(); length += m_audioSampling32k.GetObjectLength(); length += m_audioSampling44k1.GetObjectLength(); length += m_audioSampling48k.GetObjectLength(); length += m_singleChannel.GetObjectLength(); length += m_twoChannels.GetObjectLength(); length += m_threeChannels2_1.GetObjectLength(); length += m_threeChannels3_0.GetObjectLength(); length += m_fourChannels2_0_2_0.GetObjectLength(); length += m_fourChannels2_2.GetObjectLength(); length += m_fourChannels3_1.GetObjectLength(); length += m_fiveChannels3_0_2_0.GetObjectLength(); length += m_fiveChannels3_2.GetObjectLength(); length += m_lowFrequencyEnhancement.GetObjectLength(); length += m_multilingual.GetObjectLength(); length += m_bitRate.GetObjectLength(); return length; } PBoolean H245_IS13818AudioCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_audioLayer1.Decode(strm)) return FALSE; if (!m_audioLayer2.Decode(strm)) return FALSE; if (!m_audioLayer3.Decode(strm)) return FALSE; if (!m_audioSampling16k.Decode(strm)) return FALSE; if (!m_audioSampling22k05.Decode(strm)) return FALSE; if (!m_audioSampling24k.Decode(strm)) return FALSE; if (!m_audioSampling32k.Decode(strm)) return FALSE; if (!m_audioSampling44k1.Decode(strm)) return FALSE; if (!m_audioSampling48k.Decode(strm)) return FALSE; if (!m_singleChannel.Decode(strm)) return FALSE; if (!m_twoChannels.Decode(strm)) return FALSE; if (!m_threeChannels2_1.Decode(strm)) return FALSE; if (!m_threeChannels3_0.Decode(strm)) return FALSE; if (!m_fourChannels2_0_2_0.Decode(strm)) return FALSE; if (!m_fourChannels2_2.Decode(strm)) return FALSE; if (!m_fourChannels3_1.Decode(strm)) return FALSE; if (!m_fiveChannels3_0_2_0.Decode(strm)) return FALSE; if (!m_fiveChannels3_2.Decode(strm)) return FALSE; if (!m_lowFrequencyEnhancement.Decode(strm)) return FALSE; if (!m_multilingual.Decode(strm)) return FALSE; if (!m_bitRate.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_IS13818AudioCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_audioLayer1.Encode(strm); m_audioLayer2.Encode(strm); m_audioLayer3.Encode(strm); m_audioSampling16k.Encode(strm); m_audioSampling22k05.Encode(strm); m_audioSampling24k.Encode(strm); m_audioSampling32k.Encode(strm); m_audioSampling44k1.Encode(strm); m_audioSampling48k.Encode(strm); m_singleChannel.Encode(strm); m_twoChannels.Encode(strm); m_threeChannels2_1.Encode(strm); m_threeChannels3_0.Encode(strm); m_fourChannels2_0_2_0.Encode(strm); m_fourChannels2_2.Encode(strm); m_fourChannels3_1.Encode(strm); m_fiveChannels3_0_2_0.Encode(strm); m_fiveChannels3_2.Encode(strm); m_lowFrequencyEnhancement.Encode(strm); m_multilingual.Encode(strm); m_bitRate.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_IS13818AudioCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_IS13818AudioCapability::Class()), PInvalidCast); #endif return new H245_IS13818AudioCapability(*this); } // // GSMAudioCapability // H245_GSMAudioCapability::H245_GSMAudioCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_audioUnitSize.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_GSMAudioCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "audioUnitSize = " << setprecision(indent) << m_audioUnitSize << '\n'; strm << setw(indent+15) << "comfortNoise = " << setprecision(indent) << m_comfortNoise << '\n'; strm << setw(indent+12) << "scrambled = " << setprecision(indent) << m_scrambled << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_GSMAudioCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_GSMAudioCapability), PInvalidCast); #endif const H245_GSMAudioCapability & other = (const H245_GSMAudioCapability &)obj; Comparison result; if ((result = m_audioUnitSize.Compare(other.m_audioUnitSize)) != EqualTo) return result; if ((result = m_comfortNoise.Compare(other.m_comfortNoise)) != EqualTo) return result; if ((result = m_scrambled.Compare(other.m_scrambled)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_GSMAudioCapability::GetDataLength() const { PINDEX length = 0; length += m_audioUnitSize.GetObjectLength(); length += m_comfortNoise.GetObjectLength(); length += m_scrambled.GetObjectLength(); return length; } PBoolean H245_GSMAudioCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_audioUnitSize.Decode(strm)) return FALSE; if (!m_comfortNoise.Decode(strm)) return FALSE; if (!m_scrambled.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_GSMAudioCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_audioUnitSize.Encode(strm); m_comfortNoise.Encode(strm); m_scrambled.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_GSMAudioCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_GSMAudioCapability::Class()), PInvalidCast); #endif return new H245_GSMAudioCapability(*this); } // // VBDCapability // H245_VBDCapability::H245_VBDCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_VBDCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "type = " << setprecision(indent) << m_type << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_VBDCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_VBDCapability), PInvalidCast); #endif const H245_VBDCapability & other = (const H245_VBDCapability &)obj; Comparison result; if ((result = m_type.Compare(other.m_type)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_VBDCapability::GetDataLength() const { PINDEX length = 0; length += m_type.GetObjectLength(); return length; } PBoolean H245_VBDCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_type.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_VBDCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_type.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_VBDCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_VBDCapability::Class()), PInvalidCast); #endif return new H245_VBDCapability(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_DataProtocolCapability[]={ {"nonStandard",0} ,{"v14buffered",1} ,{"v42lapm",2} ,{"hdlcFrameTunnelling",3} ,{"h310SeparateVCStack",4} ,{"h310SingleVCStack",5} ,{"transparent",6} ,{"segmentationAndReassembly",7} ,{"hdlcFrameTunnelingwSAR",8} ,{"v120",9} ,{"separateLANStack",10} ,{"v76wCompression",11} ,{"tcp",12} ,{"udp",13} }; #endif // // DataProtocolCapability // H245_DataProtocolCapability::H245_DataProtocolCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 7, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_DataProtocolCapability,14 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataProtocolCapability::operator H245_NonStandardParameter &() const #else H245_DataProtocolCapability::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_DataProtocolCapability::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataProtocolCapability::operator H245_DataProtocolCapability_v76wCompression &() const #else H245_DataProtocolCapability::operator H245_DataProtocolCapability_v76wCompression &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataProtocolCapability_v76wCompression), PInvalidCast); #endif return *(H245_DataProtocolCapability_v76wCompression *)choice; } H245_DataProtocolCapability::operator const H245_DataProtocolCapability_v76wCompression &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataProtocolCapability_v76wCompression), PInvalidCast); #endif return *(H245_DataProtocolCapability_v76wCompression *)choice; } PBoolean H245_DataProtocolCapability::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_v14buffered : case e_v42lapm : case e_hdlcFrameTunnelling : case e_h310SeparateVCStack : case e_h310SingleVCStack : case e_transparent : case e_segmentationAndReassembly : case e_hdlcFrameTunnelingwSAR : case e_v120 : case e_separateLANStack : case e_tcp : case e_udp : choice = new PASN_Null(); return TRUE; case e_v76wCompression : choice = new H245_DataProtocolCapability_v76wCompression(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_DataProtocolCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DataProtocolCapability::Class()), PInvalidCast); #endif return new H245_DataProtocolCapability(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_CompressionType[]={ {"v42bis",0} }; #endif // // CompressionType // H245_CompressionType::H245_CompressionType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_CompressionType,1 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_CompressionType::operator H245_V42bis &() const #else H245_CompressionType::operator H245_V42bis &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_V42bis), PInvalidCast); #endif return *(H245_V42bis *)choice; } H245_CompressionType::operator const H245_V42bis &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_V42bis), PInvalidCast); #endif return *(H245_V42bis *)choice; } PBoolean H245_CompressionType::CreateObject() { switch (tag) { case e_v42bis : choice = new H245_V42bis(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_CompressionType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CompressionType::Class()), PInvalidCast); #endif return new H245_CompressionType(*this); } // // V42bis // H245_V42bis::H245_V42bis(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_numberOfCodewords.SetConstraints(PASN_Object::FixedConstraint, 1, 65536); m_maximumStringLength.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_V42bis::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+20) << "numberOfCodewords = " << setprecision(indent) << m_numberOfCodewords << '\n'; strm << setw(indent+22) << "maximumStringLength = " << setprecision(indent) << m_maximumStringLength << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_V42bis::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_V42bis), PInvalidCast); #endif const H245_V42bis & other = (const H245_V42bis &)obj; Comparison result; if ((result = m_numberOfCodewords.Compare(other.m_numberOfCodewords)) != EqualTo) return result; if ((result = m_maximumStringLength.Compare(other.m_maximumStringLength)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_V42bis::GetDataLength() const { PINDEX length = 0; length += m_numberOfCodewords.GetObjectLength(); length += m_maximumStringLength.GetObjectLength(); return length; } PBoolean H245_V42bis::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_numberOfCodewords.Decode(strm)) return FALSE; if (!m_maximumStringLength.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_V42bis::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_numberOfCodewords.Encode(strm); m_maximumStringLength.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_V42bis::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_V42bis::Class()), PInvalidCast); #endif return new H245_V42bis(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_T84Profile[]={ {"t84Unrestricted",0} ,{"t84Restricted",1} }; #endif // // T84Profile // H245_T84Profile::H245_T84Profile(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_T84Profile,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_T84Profile::operator H245_T84Profile_t84Restricted &() const #else H245_T84Profile::operator H245_T84Profile_t84Restricted &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_T84Profile_t84Restricted), PInvalidCast); #endif return *(H245_T84Profile_t84Restricted *)choice; } H245_T84Profile::operator const H245_T84Profile_t84Restricted &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_T84Profile_t84Restricted), PInvalidCast); #endif return *(H245_T84Profile_t84Restricted *)choice; } PBoolean H245_T84Profile::CreateObject() { switch (tag) { case e_t84Unrestricted : choice = new PASN_Null(); return TRUE; case e_t84Restricted : choice = new H245_T84Profile_t84Restricted(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_T84Profile::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_T84Profile::Class()), PInvalidCast); #endif return new H245_T84Profile(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_T38FaxRateManagement[]={ {"localTCF",0} ,{"transferredTCF",1} }; #endif // // T38FaxRateManagement // H245_T38FaxRateManagement::H245_T38FaxRateManagement(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_T38FaxRateManagement,2 #endif ) { } PBoolean H245_T38FaxRateManagement::CreateObject() { choice = (tag <= e_transferredTCF) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_T38FaxRateManagement::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_T38FaxRateManagement::Class()), PInvalidCast); #endif return new H245_T38FaxRateManagement(*this); } // // T38FaxTcpOptions // H245_T38FaxTcpOptions::H245_T38FaxTcpOptions(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_T38FaxTcpOptions::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+26) << "t38TCPBidirectionalMode = " << setprecision(indent) << m_t38TCPBidirectionalMode << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_T38FaxTcpOptions::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_T38FaxTcpOptions), PInvalidCast); #endif const H245_T38FaxTcpOptions & other = (const H245_T38FaxTcpOptions &)obj; Comparison result; if ((result = m_t38TCPBidirectionalMode.Compare(other.m_t38TCPBidirectionalMode)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_T38FaxTcpOptions::GetDataLength() const { PINDEX length = 0; length += m_t38TCPBidirectionalMode.GetObjectLength(); return length; } PBoolean H245_T38FaxTcpOptions::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_t38TCPBidirectionalMode.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_T38FaxTcpOptions::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_t38TCPBidirectionalMode.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_T38FaxTcpOptions::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_T38FaxTcpOptions::Class()), PInvalidCast); #endif return new H245_T38FaxTcpOptions(*this); } // // EncryptionCapability // H245_EncryptionCapability::H245_EncryptionCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 256); } PASN_Object * H245_EncryptionCapability::CreateObject() const { return new H245_MediaEncryptionAlgorithm; } H245_MediaEncryptionAlgorithm & H245_EncryptionCapability::operator[](PINDEX i) const { return (H245_MediaEncryptionAlgorithm &)array[i]; } PObject * H245_EncryptionCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_EncryptionCapability::Class()), PInvalidCast); #endif return new H245_EncryptionCapability(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MediaEncryptionAlgorithm[]={ {"nonStandard",0} ,{"algorithm",1} }; #endif // // MediaEncryptionAlgorithm // H245_MediaEncryptionAlgorithm::H245_MediaEncryptionAlgorithm(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MediaEncryptionAlgorithm,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MediaEncryptionAlgorithm::operator H245_NonStandardParameter &() const #else H245_MediaEncryptionAlgorithm::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_MediaEncryptionAlgorithm::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } PBoolean H245_MediaEncryptionAlgorithm::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_algorithm : choice = new PASN_ObjectId(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_MediaEncryptionAlgorithm::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MediaEncryptionAlgorithm::Class()), PInvalidCast); #endif return new H245_MediaEncryptionAlgorithm(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_UserInputCapability[]={ {"nonStandard",0} ,{"basicString",1} ,{"iA5String",2} ,{"generalString",3} ,{"dtmf",4} ,{"hookflash",5} ,{"extendedAlphanumeric",6} ,{"encryptedBasicString",7} ,{"encryptedIA5String",8} ,{"encryptedGeneralString",9} ,{"secureDTMF",10} ,{"genericUserInputCapability",11} }; #endif // // UserInputCapability // H245_UserInputCapability::H245_UserInputCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 6, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_UserInputCapability,12 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_UserInputCapability::operator H245_ArrayOf_NonStandardParameter &() const #else H245_UserInputCapability::operator H245_ArrayOf_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ArrayOf_NonStandardParameter), PInvalidCast); #endif return *(H245_ArrayOf_NonStandardParameter *)choice; } H245_UserInputCapability::operator const H245_ArrayOf_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ArrayOf_NonStandardParameter), PInvalidCast); #endif return *(H245_ArrayOf_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_UserInputCapability::operator H245_GenericCapability &() const #else H245_UserInputCapability::operator H245_GenericCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericCapability), PInvalidCast); #endif return *(H245_GenericCapability *)choice; } H245_UserInputCapability::operator const H245_GenericCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericCapability), PInvalidCast); #endif return *(H245_GenericCapability *)choice; } PBoolean H245_UserInputCapability::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_ArrayOf_NonStandardParameter(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 16); return TRUE; case e_basicString : case e_iA5String : case e_generalString : case e_dtmf : case e_hookflash : case e_extendedAlphanumeric : case e_encryptedBasicString : case e_encryptedIA5String : case e_encryptedGeneralString : case e_secureDTMF : choice = new PASN_Null(); return TRUE; case e_genericUserInputCapability : choice = new H245_GenericCapability(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_UserInputCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_UserInputCapability::Class()), PInvalidCast); #endif return new H245_UserInputCapability(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_CapabilityIdentifier[]={ {"standard",0} ,{"h221NonStandard",1} ,{"uuid",2} ,{"domainBased",3} }; #endif // // CapabilityIdentifier // H245_CapabilityIdentifier::H245_CapabilityIdentifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_CapabilityIdentifier,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_CapabilityIdentifier::operator H245_NonStandardParameter &() const #else H245_CapabilityIdentifier::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_CapabilityIdentifier::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } PBoolean H245_CapabilityIdentifier::CreateObject() { switch (tag) { case e_standard : choice = new PASN_ObjectId(); return TRUE; case e_h221NonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_uuid : choice = new PASN_OctetString(); choice->SetConstraints(PASN_Object::FixedConstraint, 16); return TRUE; case e_domainBased : choice = new PASN_IA5String(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 64); return TRUE; } choice = NULL; return FALSE; } PObject * H245_CapabilityIdentifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CapabilityIdentifier::Class()), PInvalidCast); #endif return new H245_CapabilityIdentifier(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_ParameterIdentifier[]={ {"standard",0} ,{"h221NonStandard",1} ,{"uuid",2} ,{"domainBased",3} }; #endif // // ParameterIdentifier // H245_ParameterIdentifier::H245_ParameterIdentifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_ParameterIdentifier,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ParameterIdentifier::operator H245_NonStandardParameter &() const #else H245_ParameterIdentifier::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_ParameterIdentifier::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } PBoolean H245_ParameterIdentifier::CreateObject() { switch (tag) { case e_standard : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 127); return TRUE; case e_h221NonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_uuid : choice = new PASN_OctetString(); choice->SetConstraints(PASN_Object::FixedConstraint, 16); return TRUE; case e_domainBased : choice = new PASN_IA5String(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 64); return TRUE; } choice = NULL; return FALSE; } PObject * H245_ParameterIdentifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ParameterIdentifier::Class()), PInvalidCast); #endif return new H245_ParameterIdentifier(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_ParameterValue[]={ {"logical",0} ,{"booleanArray",1} ,{"unsignedMin",2} ,{"unsignedMax",3} ,{"unsigned32Min",4} ,{"unsigned32Max",5} ,{"octetString",6} ,{"genericParameter",7} }; #endif // // ParameterValue // H245_ParameterValue::H245_ParameterValue(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 8, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_ParameterValue,8 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ParameterValue::operator H245_ArrayOf_GenericParameter &() const #else H245_ParameterValue::operator H245_ArrayOf_GenericParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ArrayOf_GenericParameter), PInvalidCast); #endif return *(H245_ArrayOf_GenericParameter *)choice; } H245_ParameterValue::operator const H245_ArrayOf_GenericParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ArrayOf_GenericParameter), PInvalidCast); #endif return *(H245_ArrayOf_GenericParameter *)choice; } PBoolean H245_ParameterValue::CreateObject() { switch (tag) { case e_logical : choice = new PASN_Null(); return TRUE; case e_booleanArray : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 255); return TRUE; case e_unsignedMin : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 65535); return TRUE; case e_unsignedMax : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 65535); return TRUE; case e_unsigned32Min : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); return TRUE; case e_unsigned32Max : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); return TRUE; case e_octetString : choice = new PASN_OctetString(); return TRUE; case e_genericParameter : choice = new H245_ArrayOf_GenericParameter(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_ParameterValue::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ParameterValue::Class()), PInvalidCast); #endif return new H245_ParameterValue(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MultiplexFormat[]={ {"nonStandard",0} ,{"h222Capability",1} ,{"h223Capability",2} }; #endif // // MultiplexFormat // H245_MultiplexFormat::H245_MultiplexFormat(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MultiplexFormat,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultiplexFormat::operator H245_NonStandardParameter &() const #else H245_MultiplexFormat::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_MultiplexFormat::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultiplexFormat::operator H245_H222Capability &() const #else H245_MultiplexFormat::operator H245_H222Capability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H222Capability), PInvalidCast); #endif return *(H245_H222Capability *)choice; } H245_MultiplexFormat::operator const H245_H222Capability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H222Capability), PInvalidCast); #endif return *(H245_H222Capability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultiplexFormat::operator H245_H223Capability &() const #else H245_MultiplexFormat::operator H245_H223Capability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223Capability), PInvalidCast); #endif return *(H245_H223Capability *)choice; } H245_MultiplexFormat::operator const H245_H223Capability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223Capability), PInvalidCast); #endif return *(H245_H223Capability *)choice; } PBoolean H245_MultiplexFormat::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_h222Capability : choice = new H245_H222Capability(); return TRUE; case e_h223Capability : choice = new H245_H223Capability(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_MultiplexFormat::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultiplexFormat::Class()), PInvalidCast); #endif return new H245_MultiplexFormat(*this); } // // AudioTelephonyEventCapability // H245_AudioTelephonyEventCapability::H245_AudioTelephonyEventCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_dynamicRTPPayloadType.SetConstraints(PASN_Object::FixedConstraint, 96, 127); } #ifndef PASN_NOPRINTON void H245_AudioTelephonyEventCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "dynamicRTPPayloadType = " << setprecision(indent) << m_dynamicRTPPayloadType << '\n'; strm << setw(indent+22) << "audioTelephoneEvent = " << setprecision(indent) << m_audioTelephoneEvent << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_AudioTelephonyEventCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_AudioTelephonyEventCapability), PInvalidCast); #endif const H245_AudioTelephonyEventCapability & other = (const H245_AudioTelephonyEventCapability &)obj; Comparison result; if ((result = m_dynamicRTPPayloadType.Compare(other.m_dynamicRTPPayloadType)) != EqualTo) return result; if ((result = m_audioTelephoneEvent.Compare(other.m_audioTelephoneEvent)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_AudioTelephonyEventCapability::GetDataLength() const { PINDEX length = 0; length += m_dynamicRTPPayloadType.GetObjectLength(); length += m_audioTelephoneEvent.GetObjectLength(); return length; } PBoolean H245_AudioTelephonyEventCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_dynamicRTPPayloadType.Decode(strm)) return FALSE; if (!m_audioTelephoneEvent.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_AudioTelephonyEventCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_dynamicRTPPayloadType.Encode(strm); m_audioTelephoneEvent.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_AudioTelephonyEventCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_AudioTelephonyEventCapability::Class()), PInvalidCast); #endif return new H245_AudioTelephonyEventCapability(*this); } // // AudioToneCapability // H245_AudioToneCapability::H245_AudioToneCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_dynamicRTPPayloadType.SetConstraints(PASN_Object::FixedConstraint, 96, 127); } #ifndef PASN_NOPRINTON void H245_AudioToneCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "dynamicRTPPayloadType = " << setprecision(indent) << m_dynamicRTPPayloadType << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_AudioToneCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_AudioToneCapability), PInvalidCast); #endif const H245_AudioToneCapability & other = (const H245_AudioToneCapability &)obj; Comparison result; if ((result = m_dynamicRTPPayloadType.Compare(other.m_dynamicRTPPayloadType)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_AudioToneCapability::GetDataLength() const { PINDEX length = 0; length += m_dynamicRTPPayloadType.GetObjectLength(); return length; } PBoolean H245_AudioToneCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_dynamicRTPPayloadType.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_AudioToneCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_dynamicRTPPayloadType.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_AudioToneCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_AudioToneCapability::Class()), PInvalidCast); #endif return new H245_AudioToneCapability(*this); } // // NoPTAudioTelephonyEventCapability // H245_NoPTAudioTelephonyEventCapability::H245_NoPTAudioTelephonyEventCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_NoPTAudioTelephonyEventCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+22) << "audioTelephoneEvent = " << setprecision(indent) << m_audioTelephoneEvent << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_NoPTAudioTelephonyEventCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_NoPTAudioTelephonyEventCapability), PInvalidCast); #endif const H245_NoPTAudioTelephonyEventCapability & other = (const H245_NoPTAudioTelephonyEventCapability &)obj; Comparison result; if ((result = m_audioTelephoneEvent.Compare(other.m_audioTelephoneEvent)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_NoPTAudioTelephonyEventCapability::GetDataLength() const { PINDEX length = 0; length += m_audioTelephoneEvent.GetObjectLength(); return length; } PBoolean H245_NoPTAudioTelephonyEventCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_audioTelephoneEvent.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_NoPTAudioTelephonyEventCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_audioTelephoneEvent.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_NoPTAudioTelephonyEventCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NoPTAudioTelephonyEventCapability::Class()), PInvalidCast); #endif return new H245_NoPTAudioTelephonyEventCapability(*this); } // // NoPTAudioToneCapability // H245_NoPTAudioToneCapability::H245_NoPTAudioToneCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_NoPTAudioToneCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX H245_NoPTAudioToneCapability::GetDataLength() const { PINDEX length = 0; return length; } PBoolean H245_NoPTAudioToneCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_NoPTAudioToneCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * H245_NoPTAudioToneCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NoPTAudioToneCapability::Class()), PInvalidCast); #endif return new H245_NoPTAudioToneCapability(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_DepFECCapability[]={ {"rfc2733",0} }; #endif // // DepFECCapability // H245_DepFECCapability::H245_DepFECCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_DepFECCapability,1 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DepFECCapability::operator H245_DepFECCapability_rfc2733 &() const #else H245_DepFECCapability::operator H245_DepFECCapability_rfc2733 &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECCapability_rfc2733), PInvalidCast); #endif return *(H245_DepFECCapability_rfc2733 *)choice; } H245_DepFECCapability::operator const H245_DepFECCapability_rfc2733 &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECCapability_rfc2733), PInvalidCast); #endif return *(H245_DepFECCapability_rfc2733 *)choice; } PBoolean H245_DepFECCapability::CreateObject() { switch (tag) { case e_rfc2733 : choice = new H245_DepFECCapability_rfc2733(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_DepFECCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DepFECCapability::Class()), PInvalidCast); #endif return new H245_DepFECCapability(*this); } // // MaxRedundancy // H245_MaxRedundancy::H245_MaxRedundancy(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, MaximumValue); } H245_MaxRedundancy & H245_MaxRedundancy::operator=(int v) { SetValue(v); return *this; } H245_MaxRedundancy & H245_MaxRedundancy::operator=(unsigned v) { SetValue(v); return *this; } PObject * H245_MaxRedundancy::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MaxRedundancy::Class()), PInvalidCast); #endif return new H245_MaxRedundancy(*this); } // // LogicalChannelNumber // H245_LogicalChannelNumber::H245_LogicalChannelNumber(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } H245_LogicalChannelNumber & H245_LogicalChannelNumber::operator=(int v) { SetValue(v); return *this; } H245_LogicalChannelNumber & H245_LogicalChannelNumber::operator=(unsigned v) { SetValue(v); return *this; } PObject * H245_LogicalChannelNumber::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_LogicalChannelNumber::Class()), PInvalidCast); #endif return new H245_LogicalChannelNumber(*this); } // // V75Parameters // H245_V75Parameters::H245_V75Parameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_V75Parameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "audioHeaderPresent = " << setprecision(indent) << m_audioHeaderPresent << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_V75Parameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_V75Parameters), PInvalidCast); #endif const H245_V75Parameters & other = (const H245_V75Parameters &)obj; Comparison result; if ((result = m_audioHeaderPresent.Compare(other.m_audioHeaderPresent)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_V75Parameters::GetDataLength() const { PINDEX length = 0; length += m_audioHeaderPresent.GetObjectLength(); return length; } PBoolean H245_V75Parameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_audioHeaderPresent.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_V75Parameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_audioHeaderPresent.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_V75Parameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_V75Parameters::Class()), PInvalidCast); #endif return new H245_V75Parameters(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_DataType[]={ {"nonStandard",0} ,{"nullData",1} ,{"videoData",2} ,{"audioData",3} ,{"data",4} ,{"encryptionData",5} ,{"h235Control",6} ,{"h235Media",7} ,{"multiplexedStream",8} ,{"redundancyEncoding",9} ,{"multiplePayloadStream",10} ,{"depFec",11} ,{"fec",12} }; #endif // // DataType // H245_DataType::H245_DataType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 6, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_DataType,13 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataType::operator H245_NonStandardParameter &() const #else H245_DataType::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_DataType::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataType::operator H245_VideoCapability &() const #else H245_DataType::operator H245_VideoCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VideoCapability), PInvalidCast); #endif return *(H245_VideoCapability *)choice; } H245_DataType::operator const H245_VideoCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VideoCapability), PInvalidCast); #endif return *(H245_VideoCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataType::operator H245_AudioCapability &() const #else H245_DataType::operator H245_AudioCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioCapability), PInvalidCast); #endif return *(H245_AudioCapability *)choice; } H245_DataType::operator const H245_AudioCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioCapability), PInvalidCast); #endif return *(H245_AudioCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataType::operator H245_DataApplicationCapability &() const #else H245_DataType::operator H245_DataApplicationCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataApplicationCapability), PInvalidCast); #endif return *(H245_DataApplicationCapability *)choice; } H245_DataType::operator const H245_DataApplicationCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataApplicationCapability), PInvalidCast); #endif return *(H245_DataApplicationCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataType::operator H245_EncryptionMode &() const #else H245_DataType::operator H245_EncryptionMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_EncryptionMode), PInvalidCast); #endif return *(H245_EncryptionMode *)choice; } H245_DataType::operator const H245_EncryptionMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_EncryptionMode), PInvalidCast); #endif return *(H245_EncryptionMode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataType::operator H245_H235Media &() const #else H245_DataType::operator H245_H235Media &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H235Media), PInvalidCast); #endif return *(H245_H235Media *)choice; } H245_DataType::operator const H245_H235Media &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H235Media), PInvalidCast); #endif return *(H245_H235Media *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataType::operator H245_MultiplexedStreamParameter &() const #else H245_DataType::operator H245_MultiplexedStreamParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultiplexedStreamParameter), PInvalidCast); #endif return *(H245_MultiplexedStreamParameter *)choice; } H245_DataType::operator const H245_MultiplexedStreamParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultiplexedStreamParameter), PInvalidCast); #endif return *(H245_MultiplexedStreamParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataType::operator H245_RedundancyEncoding &() const #else H245_DataType::operator H245_RedundancyEncoding &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RedundancyEncoding), PInvalidCast); #endif return *(H245_RedundancyEncoding *)choice; } H245_DataType::operator const H245_RedundancyEncoding &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RedundancyEncoding), PInvalidCast); #endif return *(H245_RedundancyEncoding *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataType::operator H245_MultiplePayloadStream &() const #else H245_DataType::operator H245_MultiplePayloadStream &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultiplePayloadStream), PInvalidCast); #endif return *(H245_MultiplePayloadStream *)choice; } H245_DataType::operator const H245_MultiplePayloadStream &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultiplePayloadStream), PInvalidCast); #endif return *(H245_MultiplePayloadStream *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataType::operator H245_DepFECData &() const #else H245_DataType::operator H245_DepFECData &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECData), PInvalidCast); #endif return *(H245_DepFECData *)choice; } H245_DataType::operator const H245_DepFECData &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECData), PInvalidCast); #endif return *(H245_DepFECData *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataType::operator H245_FECData &() const #else H245_DataType::operator H245_FECData &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FECData), PInvalidCast); #endif return *(H245_FECData *)choice; } H245_DataType::operator const H245_FECData &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FECData), PInvalidCast); #endif return *(H245_FECData *)choice; } PBoolean H245_DataType::CreateObject() { switch (tag) { case e_nonStandard : case e_h235Control : choice = new H245_NonStandardParameter(); return TRUE; case e_nullData : choice = new PASN_Null(); return TRUE; case e_videoData : choice = new H245_VideoCapability(); return TRUE; case e_audioData : choice = new H245_AudioCapability(); return TRUE; case e_data : choice = new H245_DataApplicationCapability(); return TRUE; case e_encryptionData : choice = new H245_EncryptionMode(); return TRUE; case e_h235Media : choice = new H245_H235Media(); return TRUE; case e_multiplexedStream : choice = new H245_MultiplexedStreamParameter(); return TRUE; case e_redundancyEncoding : choice = new H245_RedundancyEncoding(); return TRUE; case e_multiplePayloadStream : choice = new H245_MultiplePayloadStream(); return TRUE; case e_depFec : choice = new H245_DepFECData(); return TRUE; case e_fec : choice = new H245_FECData(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_DataType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DataType::Class()), PInvalidCast); #endif return new H245_DataType(*this); } // // MultiplexedStreamParameter // H245_MultiplexedStreamParameter::H245_MultiplexedStreamParameter(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MultiplexedStreamParameter::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+18) << "multiplexFormat = " << setprecision(indent) << m_multiplexFormat << '\n'; strm << setw(indent+21) << "controlOnMuxStream = " << setprecision(indent) << m_controlOnMuxStream << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultiplexedStreamParameter::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultiplexedStreamParameter), PInvalidCast); #endif const H245_MultiplexedStreamParameter & other = (const H245_MultiplexedStreamParameter &)obj; Comparison result; if ((result = m_multiplexFormat.Compare(other.m_multiplexFormat)) != EqualTo) return result; if ((result = m_controlOnMuxStream.Compare(other.m_controlOnMuxStream)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultiplexedStreamParameter::GetDataLength() const { PINDEX length = 0; length += m_multiplexFormat.GetObjectLength(); length += m_controlOnMuxStream.GetObjectLength(); return length; } PBoolean H245_MultiplexedStreamParameter::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_multiplexFormat.Decode(strm)) return FALSE; if (!m_controlOnMuxStream.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultiplexedStreamParameter::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_multiplexFormat.Encode(strm); m_controlOnMuxStream.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultiplexedStreamParameter::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultiplexedStreamParameter::Class()), PInvalidCast); #endif return new H245_MultiplexedStreamParameter(*this); } // // H222LogicalChannelParameters // H245_H222LogicalChannelParameters::H245_H222LogicalChannelParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { m_resourceID.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); m_subChannelID.SetConstraints(PASN_Object::FixedConstraint, 0, 8191); m_pcr_pid.SetConstraints(PASN_Object::FixedConstraint, 0, 8191); } #ifndef PASN_NOPRINTON void H245_H222LogicalChannelParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "resourceID = " << setprecision(indent) << m_resourceID << '\n'; strm << setw(indent+15) << "subChannelID = " << setprecision(indent) << m_subChannelID << '\n'; if (HasOptionalField(e_pcr_pid)) strm << setw(indent+10) << "pcr_pid = " << setprecision(indent) << m_pcr_pid << '\n'; if (HasOptionalField(e_programDescriptors)) strm << setw(indent+21) << "programDescriptors = " << setprecision(indent) << m_programDescriptors << '\n'; if (HasOptionalField(e_streamDescriptors)) strm << setw(indent+20) << "streamDescriptors = " << setprecision(indent) << m_streamDescriptors << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H222LogicalChannelParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H222LogicalChannelParameters), PInvalidCast); #endif const H245_H222LogicalChannelParameters & other = (const H245_H222LogicalChannelParameters &)obj; Comparison result; if ((result = m_resourceID.Compare(other.m_resourceID)) != EqualTo) return result; if ((result = m_subChannelID.Compare(other.m_subChannelID)) != EqualTo) return result; if ((result = m_pcr_pid.Compare(other.m_pcr_pid)) != EqualTo) return result; if ((result = m_programDescriptors.Compare(other.m_programDescriptors)) != EqualTo) return result; if ((result = m_streamDescriptors.Compare(other.m_streamDescriptors)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H222LogicalChannelParameters::GetDataLength() const { PINDEX length = 0; length += m_resourceID.GetObjectLength(); length += m_subChannelID.GetObjectLength(); if (HasOptionalField(e_pcr_pid)) length += m_pcr_pid.GetObjectLength(); if (HasOptionalField(e_programDescriptors)) length += m_programDescriptors.GetObjectLength(); if (HasOptionalField(e_streamDescriptors)) length += m_streamDescriptors.GetObjectLength(); return length; } PBoolean H245_H222LogicalChannelParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_resourceID.Decode(strm)) return FALSE; if (!m_subChannelID.Decode(strm)) return FALSE; if (HasOptionalField(e_pcr_pid) && !m_pcr_pid.Decode(strm)) return FALSE; if (HasOptionalField(e_programDescriptors) && !m_programDescriptors.Decode(strm)) return FALSE; if (HasOptionalField(e_streamDescriptors) && !m_streamDescriptors.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H222LogicalChannelParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_resourceID.Encode(strm); m_subChannelID.Encode(strm); if (HasOptionalField(e_pcr_pid)) m_pcr_pid.Encode(strm); if (HasOptionalField(e_programDescriptors)) m_programDescriptors.Encode(strm); if (HasOptionalField(e_streamDescriptors)) m_streamDescriptors.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H222LogicalChannelParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H222LogicalChannelParameters::Class()), PInvalidCast); #endif return new H245_H222LogicalChannelParameters(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_CRCLength[]={ {"crc8bit",0} ,{"crc16bit",1} ,{"crc32bit",2} }; #endif // // CRCLength // H245_CRCLength::H245_CRCLength(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_CRCLength,3 #endif ) { } PBoolean H245_CRCLength::CreateObject() { choice = (tag <= e_crc32bit) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_CRCLength::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CRCLength::Class()), PInvalidCast); #endif return new H245_CRCLength(*this); } // // RedundancyEncodingElement // H245_RedundancyEncodingElement::H245_RedundancyEncodingElement(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_payloadType.SetConstraints(PASN_Object::FixedConstraint, 0, 127); } #ifndef PASN_NOPRINTON void H245_RedundancyEncodingElement::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "dataType = " << setprecision(indent) << m_dataType << '\n'; if (HasOptionalField(e_payloadType)) strm << setw(indent+14) << "payloadType = " << setprecision(indent) << m_payloadType << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RedundancyEncodingElement::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RedundancyEncodingElement), PInvalidCast); #endif const H245_RedundancyEncodingElement & other = (const H245_RedundancyEncodingElement &)obj; Comparison result; if ((result = m_dataType.Compare(other.m_dataType)) != EqualTo) return result; if ((result = m_payloadType.Compare(other.m_payloadType)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RedundancyEncodingElement::GetDataLength() const { PINDEX length = 0; length += m_dataType.GetObjectLength(); if (HasOptionalField(e_payloadType)) length += m_payloadType.GetObjectLength(); return length; } PBoolean H245_RedundancyEncodingElement::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_dataType.Decode(strm)) return FALSE; if (HasOptionalField(e_payloadType) && !m_payloadType.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RedundancyEncodingElement::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_dataType.Encode(strm); if (HasOptionalField(e_payloadType)) m_payloadType.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RedundancyEncodingElement::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RedundancyEncodingElement::Class()), PInvalidCast); #endif return new H245_RedundancyEncodingElement(*this); } // // MultiplePayloadStreamElement // H245_MultiplePayloadStreamElement::H245_MultiplePayloadStreamElement(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_payloadType.SetConstraints(PASN_Object::FixedConstraint, 0, 127); } #ifndef PASN_NOPRINTON void H245_MultiplePayloadStreamElement::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "dataType = " << setprecision(indent) << m_dataType << '\n'; if (HasOptionalField(e_payloadType)) strm << setw(indent+14) << "payloadType = " << setprecision(indent) << m_payloadType << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultiplePayloadStreamElement::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultiplePayloadStreamElement), PInvalidCast); #endif const H245_MultiplePayloadStreamElement & other = (const H245_MultiplePayloadStreamElement &)obj; Comparison result; if ((result = m_dataType.Compare(other.m_dataType)) != EqualTo) return result; if ((result = m_payloadType.Compare(other.m_payloadType)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultiplePayloadStreamElement::GetDataLength() const { PINDEX length = 0; length += m_dataType.GetObjectLength(); if (HasOptionalField(e_payloadType)) length += m_payloadType.GetObjectLength(); return length; } PBoolean H245_MultiplePayloadStreamElement::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_dataType.Decode(strm)) return FALSE; if (HasOptionalField(e_payloadType) && !m_payloadType.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultiplePayloadStreamElement::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_dataType.Encode(strm); if (HasOptionalField(e_payloadType)) m_payloadType.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultiplePayloadStreamElement::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultiplePayloadStreamElement::Class()), PInvalidCast); #endif return new H245_MultiplePayloadStreamElement(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_DepFECData[]={ {"rfc2733",0} }; #endif // // DepFECData // H245_DepFECData::H245_DepFECData(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 1, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_DepFECData,1 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DepFECData::operator H245_DepFECData_rfc2733 &() const #else H245_DepFECData::operator H245_DepFECData_rfc2733 &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECData_rfc2733), PInvalidCast); #endif return *(H245_DepFECData_rfc2733 *)choice; } H245_DepFECData::operator const H245_DepFECData_rfc2733 &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECData_rfc2733), PInvalidCast); #endif return *(H245_DepFECData_rfc2733 *)choice; } PBoolean H245_DepFECData::CreateObject() { switch (tag) { case e_rfc2733 : choice = new H245_DepFECData_rfc2733(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_DepFECData::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DepFECData::Class()), PInvalidCast); #endif return new H245_DepFECData(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_FECData[]={ {"rfc2733",0} }; #endif // // FECData // H245_FECData::H245_FECData(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_FECData,1 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_FECData::operator H245_FECData_rfc2733 &() const #else H245_FECData::operator H245_FECData_rfc2733 &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FECData_rfc2733), PInvalidCast); #endif return *(H245_FECData_rfc2733 *)choice; } H245_FECData::operator const H245_FECData_rfc2733 &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FECData_rfc2733), PInvalidCast); #endif return *(H245_FECData_rfc2733 *)choice; } PBoolean H245_FECData::CreateObject() { switch (tag) { case e_rfc2733 : choice = new H245_FECData_rfc2733(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_FECData::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_FECData::Class()), PInvalidCast); #endif return new H245_FECData(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_TransportAddress[]={ {"unicastAddress",0} ,{"multicastAddress",1} }; #endif // // TransportAddress // H245_TransportAddress::H245_TransportAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_TransportAddress,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_TransportAddress::operator H245_UnicastAddress &() const #else H245_TransportAddress::operator H245_UnicastAddress &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UnicastAddress), PInvalidCast); #endif return *(H245_UnicastAddress *)choice; } H245_TransportAddress::operator const H245_UnicastAddress &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UnicastAddress), PInvalidCast); #endif return *(H245_UnicastAddress *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_TransportAddress::operator H245_MulticastAddress &() const #else H245_TransportAddress::operator H245_MulticastAddress &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MulticastAddress), PInvalidCast); #endif return *(H245_MulticastAddress *)choice; } H245_TransportAddress::operator const H245_MulticastAddress &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MulticastAddress), PInvalidCast); #endif return *(H245_MulticastAddress *)choice; } PBoolean H245_TransportAddress::CreateObject() { switch (tag) { case e_unicastAddress : choice = new H245_UnicastAddress(); return TRUE; case e_multicastAddress : choice = new H245_MulticastAddress(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_TransportAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_TransportAddress::Class()), PInvalidCast); #endif return new H245_TransportAddress(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_UnicastAddress[]={ {"iPAddress",0} ,{"iPXAddress",1} ,{"iP6Address",2} ,{"netBios",3} ,{"iPSourceRouteAddress",4} ,{"nsap",5} ,{"nonStandardAddress",6} }; #endif // // UnicastAddress // H245_UnicastAddress::H245_UnicastAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 5, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_UnicastAddress,7 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_UnicastAddress::operator H245_UnicastAddress_iPAddress &() const #else H245_UnicastAddress::operator H245_UnicastAddress_iPAddress &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UnicastAddress_iPAddress), PInvalidCast); #endif return *(H245_UnicastAddress_iPAddress *)choice; } H245_UnicastAddress::operator const H245_UnicastAddress_iPAddress &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UnicastAddress_iPAddress), PInvalidCast); #endif return *(H245_UnicastAddress_iPAddress *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_UnicastAddress::operator H245_UnicastAddress_iPXAddress &() const #else H245_UnicastAddress::operator H245_UnicastAddress_iPXAddress &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UnicastAddress_iPXAddress), PInvalidCast); #endif return *(H245_UnicastAddress_iPXAddress *)choice; } H245_UnicastAddress::operator const H245_UnicastAddress_iPXAddress &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UnicastAddress_iPXAddress), PInvalidCast); #endif return *(H245_UnicastAddress_iPXAddress *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_UnicastAddress::operator H245_UnicastAddress_iP6Address &() const #else H245_UnicastAddress::operator H245_UnicastAddress_iP6Address &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UnicastAddress_iP6Address), PInvalidCast); #endif return *(H245_UnicastAddress_iP6Address *)choice; } H245_UnicastAddress::operator const H245_UnicastAddress_iP6Address &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UnicastAddress_iP6Address), PInvalidCast); #endif return *(H245_UnicastAddress_iP6Address *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_UnicastAddress::operator H245_UnicastAddress_iPSourceRouteAddress &() const #else H245_UnicastAddress::operator H245_UnicastAddress_iPSourceRouteAddress &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UnicastAddress_iPSourceRouteAddress), PInvalidCast); #endif return *(H245_UnicastAddress_iPSourceRouteAddress *)choice; } H245_UnicastAddress::operator const H245_UnicastAddress_iPSourceRouteAddress &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UnicastAddress_iPSourceRouteAddress), PInvalidCast); #endif return *(H245_UnicastAddress_iPSourceRouteAddress *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_UnicastAddress::operator H245_NonStandardParameter &() const #else H245_UnicastAddress::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_UnicastAddress::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } PBoolean H245_UnicastAddress::CreateObject() { switch (tag) { case e_iPAddress : choice = new H245_UnicastAddress_iPAddress(); return TRUE; case e_iPXAddress : choice = new H245_UnicastAddress_iPXAddress(); return TRUE; case e_iP6Address : choice = new H245_UnicastAddress_iP6Address(); return TRUE; case e_netBios : choice = new PASN_OctetString(); choice->SetConstraints(PASN_Object::FixedConstraint, 16); return TRUE; case e_iPSourceRouteAddress : choice = new H245_UnicastAddress_iPSourceRouteAddress(); return TRUE; case e_nsap : choice = new PASN_OctetString(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 20); return TRUE; case e_nonStandardAddress : choice = new H245_NonStandardParameter(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_UnicastAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_UnicastAddress::Class()), PInvalidCast); #endif return new H245_UnicastAddress(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MulticastAddress[]={ {"iPAddress",0} ,{"iP6Address",1} ,{"nsap",2} ,{"nonStandardAddress",3} }; #endif // // MulticastAddress // H245_MulticastAddress::H245_MulticastAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MulticastAddress,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MulticastAddress::operator H245_MulticastAddress_iPAddress &() const #else H245_MulticastAddress::operator H245_MulticastAddress_iPAddress &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MulticastAddress_iPAddress), PInvalidCast); #endif return *(H245_MulticastAddress_iPAddress *)choice; } H245_MulticastAddress::operator const H245_MulticastAddress_iPAddress &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MulticastAddress_iPAddress), PInvalidCast); #endif return *(H245_MulticastAddress_iPAddress *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MulticastAddress::operator H245_MulticastAddress_iP6Address &() const #else H245_MulticastAddress::operator H245_MulticastAddress_iP6Address &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MulticastAddress_iP6Address), PInvalidCast); #endif return *(H245_MulticastAddress_iP6Address *)choice; } H245_MulticastAddress::operator const H245_MulticastAddress_iP6Address &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MulticastAddress_iP6Address), PInvalidCast); #endif return *(H245_MulticastAddress_iP6Address *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MulticastAddress::operator H245_NonStandardParameter &() const #else H245_MulticastAddress::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_MulticastAddress::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } PBoolean H245_MulticastAddress::CreateObject() { switch (tag) { case e_iPAddress : choice = new H245_MulticastAddress_iPAddress(); return TRUE; case e_iP6Address : choice = new H245_MulticastAddress_iP6Address(); return TRUE; case e_nsap : choice = new PASN_OctetString(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 20); return TRUE; case e_nonStandardAddress : choice = new H245_NonStandardParameter(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_MulticastAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MulticastAddress::Class()), PInvalidCast); #endif return new H245_MulticastAddress(*this); } // // EscrowData // H245_EscrowData::H245_EscrowData(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_escrowValue.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } #ifndef PASN_NOPRINTON void H245_EscrowData::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "escrowID = " << setprecision(indent) << m_escrowID << '\n'; strm << setw(indent+14) << "escrowValue = " << setprecision(indent) << m_escrowValue << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_EscrowData::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_EscrowData), PInvalidCast); #endif const H245_EscrowData & other = (const H245_EscrowData &)obj; Comparison result; if ((result = m_escrowID.Compare(other.m_escrowID)) != EqualTo) return result; if ((result = m_escrowValue.Compare(other.m_escrowValue)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_EscrowData::GetDataLength() const { PINDEX length = 0; length += m_escrowID.GetObjectLength(); length += m_escrowValue.GetObjectLength(); return length; } PBoolean H245_EscrowData::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_escrowID.Decode(strm)) return FALSE; if (!m_escrowValue.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_EscrowData::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_escrowID.Encode(strm); m_escrowValue.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_EscrowData::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_EscrowData::Class()), PInvalidCast); #endif return new H245_EscrowData(*this); } // // CloseLogicalChannelAck // H245_CloseLogicalChannelAck::H245_CloseLogicalChannelAck(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_CloseLogicalChannelAck::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+30) << "forwardLogicalChannelNumber = " << setprecision(indent) << m_forwardLogicalChannelNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_CloseLogicalChannelAck::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_CloseLogicalChannelAck), PInvalidCast); #endif const H245_CloseLogicalChannelAck & other = (const H245_CloseLogicalChannelAck &)obj; Comparison result; if ((result = m_forwardLogicalChannelNumber.Compare(other.m_forwardLogicalChannelNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_CloseLogicalChannelAck::GetDataLength() const { PINDEX length = 0; length += m_forwardLogicalChannelNumber.GetObjectLength(); return length; } PBoolean H245_CloseLogicalChannelAck::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_forwardLogicalChannelNumber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_CloseLogicalChannelAck::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_forwardLogicalChannelNumber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_CloseLogicalChannelAck::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CloseLogicalChannelAck::Class()), PInvalidCast); #endif return new H245_CloseLogicalChannelAck(*this); } // // RequestChannelCloseAck // H245_RequestChannelCloseAck::H245_RequestChannelCloseAck(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_RequestChannelCloseAck::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+30) << "forwardLogicalChannelNumber = " << setprecision(indent) << m_forwardLogicalChannelNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RequestChannelCloseAck::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RequestChannelCloseAck), PInvalidCast); #endif const H245_RequestChannelCloseAck & other = (const H245_RequestChannelCloseAck &)obj; Comparison result; if ((result = m_forwardLogicalChannelNumber.Compare(other.m_forwardLogicalChannelNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RequestChannelCloseAck::GetDataLength() const { PINDEX length = 0; length += m_forwardLogicalChannelNumber.GetObjectLength(); return length; } PBoolean H245_RequestChannelCloseAck::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_forwardLogicalChannelNumber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RequestChannelCloseAck::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_forwardLogicalChannelNumber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RequestChannelCloseAck::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RequestChannelCloseAck::Class()), PInvalidCast); #endif return new H245_RequestChannelCloseAck(*this); } // // RequestChannelCloseRelease // H245_RequestChannelCloseRelease::H245_RequestChannelCloseRelease(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_RequestChannelCloseRelease::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+30) << "forwardLogicalChannelNumber = " << setprecision(indent) << m_forwardLogicalChannelNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RequestChannelCloseRelease::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RequestChannelCloseRelease), PInvalidCast); #endif const H245_RequestChannelCloseRelease & other = (const H245_RequestChannelCloseRelease &)obj; Comparison result; if ((result = m_forwardLogicalChannelNumber.Compare(other.m_forwardLogicalChannelNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RequestChannelCloseRelease::GetDataLength() const { PINDEX length = 0; length += m_forwardLogicalChannelNumber.GetObjectLength(); return length; } PBoolean H245_RequestChannelCloseRelease::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_forwardLogicalChannelNumber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RequestChannelCloseRelease::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_forwardLogicalChannelNumber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RequestChannelCloseRelease::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RequestChannelCloseRelease::Class()), PInvalidCast); #endif return new H245_RequestChannelCloseRelease(*this); } // // MultiplexTableEntryNumber // H245_MultiplexTableEntryNumber::H245_MultiplexTableEntryNumber(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 15); } H245_MultiplexTableEntryNumber & H245_MultiplexTableEntryNumber::operator=(int v) { SetValue(v); return *this; } H245_MultiplexTableEntryNumber & H245_MultiplexTableEntryNumber::operator=(unsigned v) { SetValue(v); return *this; } PObject * H245_MultiplexTableEntryNumber::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultiplexTableEntryNumber::Class()), PInvalidCast); #endif return new H245_MultiplexTableEntryNumber(*this); } // // RequestModeRelease // H245_RequestModeRelease::H245_RequestModeRelease(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_RequestModeRelease::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX H245_RequestModeRelease::GetDataLength() const { PINDEX length = 0; return length; } PBoolean H245_RequestModeRelease::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RequestModeRelease::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RequestModeRelease::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RequestModeRelease::Class()), PInvalidCast); #endif return new H245_RequestModeRelease(*this); } // // ModeDescription // H245_ModeDescription::H245_ModeDescription(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 256); } PASN_Object * H245_ModeDescription::CreateObject() const { return new H245_ModeElement; } H245_ModeElement & H245_ModeDescription::operator[](PINDEX i) const { return (H245_ModeElement &)array[i]; } PObject * H245_ModeDescription::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ModeDescription::Class()), PInvalidCast); #endif return new H245_ModeDescription(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_ModeElementType[]={ {"nonStandard",0} ,{"videoMode",1} ,{"audioMode",2} ,{"dataMode",3} ,{"encryptionMode",4} ,{"h235Mode",5} ,{"multiplexedStreamMode",6} ,{"redundancyEncodingDTMode",7} ,{"multiplePayloadStreamMode",8} ,{"depFecMode",9} ,{"fecMode",10} }; #endif // // ModeElementType // H245_ModeElementType::H245_ModeElementType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 5, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_ModeElementType,11 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ModeElementType::operator H245_NonStandardParameter &() const #else H245_ModeElementType::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_ModeElementType::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ModeElementType::operator H245_VideoMode &() const #else H245_ModeElementType::operator H245_VideoMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VideoMode), PInvalidCast); #endif return *(H245_VideoMode *)choice; } H245_ModeElementType::operator const H245_VideoMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VideoMode), PInvalidCast); #endif return *(H245_VideoMode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ModeElementType::operator H245_AudioMode &() const #else H245_ModeElementType::operator H245_AudioMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioMode), PInvalidCast); #endif return *(H245_AudioMode *)choice; } H245_ModeElementType::operator const H245_AudioMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioMode), PInvalidCast); #endif return *(H245_AudioMode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ModeElementType::operator H245_DataMode &() const #else H245_ModeElementType::operator H245_DataMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataMode), PInvalidCast); #endif return *(H245_DataMode *)choice; } H245_ModeElementType::operator const H245_DataMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataMode), PInvalidCast); #endif return *(H245_DataMode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ModeElementType::operator H245_EncryptionMode &() const #else H245_ModeElementType::operator H245_EncryptionMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_EncryptionMode), PInvalidCast); #endif return *(H245_EncryptionMode *)choice; } H245_ModeElementType::operator const H245_EncryptionMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_EncryptionMode), PInvalidCast); #endif return *(H245_EncryptionMode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ModeElementType::operator H245_H235Mode &() const #else H245_ModeElementType::operator H245_H235Mode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H235Mode), PInvalidCast); #endif return *(H245_H235Mode *)choice; } H245_ModeElementType::operator const H245_H235Mode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H235Mode), PInvalidCast); #endif return *(H245_H235Mode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ModeElementType::operator H245_MultiplexedStreamParameter &() const #else H245_ModeElementType::operator H245_MultiplexedStreamParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultiplexedStreamParameter), PInvalidCast); #endif return *(H245_MultiplexedStreamParameter *)choice; } H245_ModeElementType::operator const H245_MultiplexedStreamParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultiplexedStreamParameter), PInvalidCast); #endif return *(H245_MultiplexedStreamParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ModeElementType::operator H245_RedundancyEncodingDTMode &() const #else H245_ModeElementType::operator H245_RedundancyEncodingDTMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RedundancyEncodingDTMode), PInvalidCast); #endif return *(H245_RedundancyEncodingDTMode *)choice; } H245_ModeElementType::operator const H245_RedundancyEncodingDTMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RedundancyEncodingDTMode), PInvalidCast); #endif return *(H245_RedundancyEncodingDTMode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ModeElementType::operator H245_MultiplePayloadStreamMode &() const #else H245_ModeElementType::operator H245_MultiplePayloadStreamMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultiplePayloadStreamMode), PInvalidCast); #endif return *(H245_MultiplePayloadStreamMode *)choice; } H245_ModeElementType::operator const H245_MultiplePayloadStreamMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultiplePayloadStreamMode), PInvalidCast); #endif return *(H245_MultiplePayloadStreamMode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ModeElementType::operator H245_DepFECMode &() const #else H245_ModeElementType::operator H245_DepFECMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECMode), PInvalidCast); #endif return *(H245_DepFECMode *)choice; } H245_ModeElementType::operator const H245_DepFECMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECMode), PInvalidCast); #endif return *(H245_DepFECMode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ModeElementType::operator H245_FECMode &() const #else H245_ModeElementType::operator H245_FECMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FECMode), PInvalidCast); #endif return *(H245_FECMode *)choice; } H245_ModeElementType::operator const H245_FECMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FECMode), PInvalidCast); #endif return *(H245_FECMode *)choice; } PBoolean H245_ModeElementType::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_videoMode : choice = new H245_VideoMode(); return TRUE; case e_audioMode : choice = new H245_AudioMode(); return TRUE; case e_dataMode : choice = new H245_DataMode(); return TRUE; case e_encryptionMode : choice = new H245_EncryptionMode(); return TRUE; case e_h235Mode : choice = new H245_H235Mode(); return TRUE; case e_multiplexedStreamMode : choice = new H245_MultiplexedStreamParameter(); return TRUE; case e_redundancyEncodingDTMode : choice = new H245_RedundancyEncodingDTMode(); return TRUE; case e_multiplePayloadStreamMode : choice = new H245_MultiplePayloadStreamMode(); return TRUE; case e_depFecMode : choice = new H245_DepFECMode(); return TRUE; case e_fecMode : choice = new H245_FECMode(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_ModeElementType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ModeElementType::Class()), PInvalidCast); #endif return new H245_ModeElementType(*this); } // // MultiplexedStreamModeParameters // H245_MultiplexedStreamModeParameters::H245_MultiplexedStreamModeParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MultiplexedStreamModeParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+23) << "logicalChannelNumber = " << setprecision(indent) << m_logicalChannelNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultiplexedStreamModeParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultiplexedStreamModeParameters), PInvalidCast); #endif const H245_MultiplexedStreamModeParameters & other = (const H245_MultiplexedStreamModeParameters &)obj; Comparison result; if ((result = m_logicalChannelNumber.Compare(other.m_logicalChannelNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultiplexedStreamModeParameters::GetDataLength() const { PINDEX length = 0; length += m_logicalChannelNumber.GetObjectLength(); return length; } PBoolean H245_MultiplexedStreamModeParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_logicalChannelNumber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultiplexedStreamModeParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_logicalChannelNumber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultiplexedStreamModeParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultiplexedStreamModeParameters::Class()), PInvalidCast); #endif return new H245_MultiplexedStreamModeParameters(*this); } // // MultiplePayloadStreamElementMode // H245_MultiplePayloadStreamElementMode::H245_MultiplePayloadStreamElementMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MultiplePayloadStreamElementMode::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "type = " << setprecision(indent) << m_type << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultiplePayloadStreamElementMode::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultiplePayloadStreamElementMode), PInvalidCast); #endif const H245_MultiplePayloadStreamElementMode & other = (const H245_MultiplePayloadStreamElementMode &)obj; Comparison result; if ((result = m_type.Compare(other.m_type)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultiplePayloadStreamElementMode::GetDataLength() const { PINDEX length = 0; length += m_type.GetObjectLength(); return length; } PBoolean H245_MultiplePayloadStreamElementMode::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_type.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultiplePayloadStreamElementMode::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_type.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultiplePayloadStreamElementMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultiplePayloadStreamElementMode::Class()), PInvalidCast); #endif return new H245_MultiplePayloadStreamElementMode(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_DepFECMode[]={ {"rfc2733Mode",0} }; #endif // // DepFECMode // H245_DepFECMode::H245_DepFECMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_DepFECMode,1 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DepFECMode::operator H245_DepFECMode_rfc2733Mode &() const #else H245_DepFECMode::operator H245_DepFECMode_rfc2733Mode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECMode_rfc2733Mode), PInvalidCast); #endif return *(H245_DepFECMode_rfc2733Mode *)choice; } H245_DepFECMode::operator const H245_DepFECMode_rfc2733Mode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECMode_rfc2733Mode), PInvalidCast); #endif return *(H245_DepFECMode_rfc2733Mode *)choice; } PBoolean H245_DepFECMode::CreateObject() { switch (tag) { case e_rfc2733Mode : choice = new H245_DepFECMode_rfc2733Mode(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_DepFECMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DepFECMode::Class()), PInvalidCast); #endif return new H245_DepFECMode(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_V76ModeParameters[]={ {"suspendResumewAddress",0} ,{"suspendResumewoAddress",1} }; #endif // // V76ModeParameters // H245_V76ModeParameters::H245_V76ModeParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_V76ModeParameters,2 #endif ) { } PBoolean H245_V76ModeParameters::CreateObject() { choice = (tag <= e_suspendResumewoAddress) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_V76ModeParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_V76ModeParameters::Class()), PInvalidCast); #endif return new H245_V76ModeParameters(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_VideoMode[]={ {"nonStandard",0} ,{"h261VideoMode",1} ,{"h262VideoMode",2} ,{"h263VideoMode",3} ,{"is11172VideoMode",4} ,{"genericVideoMode",5} }; #endif // // VideoMode // H245_VideoMode::H245_VideoMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 5, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_VideoMode,6 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_VideoMode::operator H245_NonStandardParameter &() const #else H245_VideoMode::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_VideoMode::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_VideoMode::operator H245_H261VideoMode &() const #else H245_VideoMode::operator H245_H261VideoMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H261VideoMode), PInvalidCast); #endif return *(H245_H261VideoMode *)choice; } H245_VideoMode::operator const H245_H261VideoMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H261VideoMode), PInvalidCast); #endif return *(H245_H261VideoMode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_VideoMode::operator H245_H262VideoMode &() const #else H245_VideoMode::operator H245_H262VideoMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H262VideoMode), PInvalidCast); #endif return *(H245_H262VideoMode *)choice; } H245_VideoMode::operator const H245_H262VideoMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H262VideoMode), PInvalidCast); #endif return *(H245_H262VideoMode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_VideoMode::operator H245_H263VideoMode &() const #else H245_VideoMode::operator H245_H263VideoMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H263VideoMode), PInvalidCast); #endif return *(H245_H263VideoMode *)choice; } H245_VideoMode::operator const H245_H263VideoMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H263VideoMode), PInvalidCast); #endif return *(H245_H263VideoMode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_VideoMode::operator H245_IS11172VideoMode &() const #else H245_VideoMode::operator H245_IS11172VideoMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_IS11172VideoMode), PInvalidCast); #endif return *(H245_IS11172VideoMode *)choice; } H245_VideoMode::operator const H245_IS11172VideoMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_IS11172VideoMode), PInvalidCast); #endif return *(H245_IS11172VideoMode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_VideoMode::operator H245_GenericCapability &() const #else H245_VideoMode::operator H245_GenericCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericCapability), PInvalidCast); #endif return *(H245_GenericCapability *)choice; } H245_VideoMode::operator const H245_GenericCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericCapability), PInvalidCast); #endif return *(H245_GenericCapability *)choice; } PBoolean H245_VideoMode::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_h261VideoMode : choice = new H245_H261VideoMode(); return TRUE; case e_h262VideoMode : choice = new H245_H262VideoMode(); return TRUE; case e_h263VideoMode : choice = new H245_H263VideoMode(); return TRUE; case e_is11172VideoMode : choice = new H245_IS11172VideoMode(); return TRUE; case e_genericVideoMode : choice = new H245_GenericCapability(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_VideoMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_VideoMode::Class()), PInvalidCast); #endif return new H245_VideoMode(*this); } // // IS11172VideoMode // H245_IS11172VideoMode::H245_IS11172VideoMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 6, TRUE, 0) { m_videoBitRate.SetConstraints(PASN_Object::FixedConstraint, 0, 1073741823); m_vbvBufferSize.SetConstraints(PASN_Object::FixedConstraint, 0, 262143); m_samplesPerLine.SetConstraints(PASN_Object::FixedConstraint, 0, 16383); m_linesPerFrame.SetConstraints(PASN_Object::FixedConstraint, 0, 16383); m_pictureRate.SetConstraints(PASN_Object::FixedConstraint, 0, 15); m_luminanceSampleRate.SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); } #ifndef PASN_NOPRINTON void H245_IS11172VideoMode::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+23) << "constrainedBitstream = " << setprecision(indent) << m_constrainedBitstream << '\n'; if (HasOptionalField(e_videoBitRate)) strm << setw(indent+15) << "videoBitRate = " << setprecision(indent) << m_videoBitRate << '\n'; if (HasOptionalField(e_vbvBufferSize)) strm << setw(indent+16) << "vbvBufferSize = " << setprecision(indent) << m_vbvBufferSize << '\n'; if (HasOptionalField(e_samplesPerLine)) strm << setw(indent+17) << "samplesPerLine = " << setprecision(indent) << m_samplesPerLine << '\n'; if (HasOptionalField(e_linesPerFrame)) strm << setw(indent+16) << "linesPerFrame = " << setprecision(indent) << m_linesPerFrame << '\n'; if (HasOptionalField(e_pictureRate)) strm << setw(indent+14) << "pictureRate = " << setprecision(indent) << m_pictureRate << '\n'; if (HasOptionalField(e_luminanceSampleRate)) strm << setw(indent+22) << "luminanceSampleRate = " << setprecision(indent) << m_luminanceSampleRate << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_IS11172VideoMode::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_IS11172VideoMode), PInvalidCast); #endif const H245_IS11172VideoMode & other = (const H245_IS11172VideoMode &)obj; Comparison result; if ((result = m_constrainedBitstream.Compare(other.m_constrainedBitstream)) != EqualTo) return result; if ((result = m_videoBitRate.Compare(other.m_videoBitRate)) != EqualTo) return result; if ((result = m_vbvBufferSize.Compare(other.m_vbvBufferSize)) != EqualTo) return result; if ((result = m_samplesPerLine.Compare(other.m_samplesPerLine)) != EqualTo) return result; if ((result = m_linesPerFrame.Compare(other.m_linesPerFrame)) != EqualTo) return result; if ((result = m_pictureRate.Compare(other.m_pictureRate)) != EqualTo) return result; if ((result = m_luminanceSampleRate.Compare(other.m_luminanceSampleRate)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_IS11172VideoMode::GetDataLength() const { PINDEX length = 0; length += m_constrainedBitstream.GetObjectLength(); if (HasOptionalField(e_videoBitRate)) length += m_videoBitRate.GetObjectLength(); if (HasOptionalField(e_vbvBufferSize)) length += m_vbvBufferSize.GetObjectLength(); if (HasOptionalField(e_samplesPerLine)) length += m_samplesPerLine.GetObjectLength(); if (HasOptionalField(e_linesPerFrame)) length += m_linesPerFrame.GetObjectLength(); if (HasOptionalField(e_pictureRate)) length += m_pictureRate.GetObjectLength(); if (HasOptionalField(e_luminanceSampleRate)) length += m_luminanceSampleRate.GetObjectLength(); return length; } PBoolean H245_IS11172VideoMode::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_constrainedBitstream.Decode(strm)) return FALSE; if (HasOptionalField(e_videoBitRate) && !m_videoBitRate.Decode(strm)) return FALSE; if (HasOptionalField(e_vbvBufferSize) && !m_vbvBufferSize.Decode(strm)) return FALSE; if (HasOptionalField(e_samplesPerLine) && !m_samplesPerLine.Decode(strm)) return FALSE; if (HasOptionalField(e_linesPerFrame) && !m_linesPerFrame.Decode(strm)) return FALSE; if (HasOptionalField(e_pictureRate) && !m_pictureRate.Decode(strm)) return FALSE; if (HasOptionalField(e_luminanceSampleRate) && !m_luminanceSampleRate.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_IS11172VideoMode::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_constrainedBitstream.Encode(strm); if (HasOptionalField(e_videoBitRate)) m_videoBitRate.Encode(strm); if (HasOptionalField(e_vbvBufferSize)) m_vbvBufferSize.Encode(strm); if (HasOptionalField(e_samplesPerLine)) m_samplesPerLine.Encode(strm); if (HasOptionalField(e_linesPerFrame)) m_linesPerFrame.Encode(strm); if (HasOptionalField(e_pictureRate)) m_pictureRate.Encode(strm); if (HasOptionalField(e_luminanceSampleRate)) m_luminanceSampleRate.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_IS11172VideoMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_IS11172VideoMode::Class()), PInvalidCast); #endif return new H245_IS11172VideoMode(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_AudioMode[]={ {"nonStandard",0} ,{"g711Alaw64k",1} ,{"g711Alaw56k",2} ,{"g711Ulaw64k",3} ,{"g711Ulaw56k",4} ,{"g722_64k",5} ,{"g722_56k",6} ,{"g722_48k",7} ,{"g728",8} ,{"g729",9} ,{"g729AnnexA",10} ,{"g7231",11} ,{"is11172AudioMode",12} ,{"is13818AudioMode",13} ,{"g729wAnnexB",14} ,{"g729AnnexAwAnnexB",15} ,{"g7231AnnexCMode",16} ,{"gsmFullRate",17} ,{"gsmHalfRate",18} ,{"gsmEnhancedFullRate",19} ,{"genericAudioMode",20} ,{"g729Extensions",21} ,{"vbd",22} }; #endif // // AudioMode // H245_AudioMode::H245_AudioMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 14, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_AudioMode,23 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_AudioMode::operator H245_NonStandardParameter &() const #else H245_AudioMode::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_AudioMode::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_AudioMode::operator H245_AudioMode_g7231 &() const #else H245_AudioMode::operator H245_AudioMode_g7231 &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioMode_g7231), PInvalidCast); #endif return *(H245_AudioMode_g7231 *)choice; } H245_AudioMode::operator const H245_AudioMode_g7231 &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioMode_g7231), PInvalidCast); #endif return *(H245_AudioMode_g7231 *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_AudioMode::operator H245_IS11172AudioMode &() const #else H245_AudioMode::operator H245_IS11172AudioMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_IS11172AudioMode), PInvalidCast); #endif return *(H245_IS11172AudioMode *)choice; } H245_AudioMode::operator const H245_IS11172AudioMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_IS11172AudioMode), PInvalidCast); #endif return *(H245_IS11172AudioMode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_AudioMode::operator H245_IS13818AudioMode &() const #else H245_AudioMode::operator H245_IS13818AudioMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_IS13818AudioMode), PInvalidCast); #endif return *(H245_IS13818AudioMode *)choice; } H245_AudioMode::operator const H245_IS13818AudioMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_IS13818AudioMode), PInvalidCast); #endif return *(H245_IS13818AudioMode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_AudioMode::operator H245_G7231AnnexCMode &() const #else H245_AudioMode::operator H245_G7231AnnexCMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_G7231AnnexCMode), PInvalidCast); #endif return *(H245_G7231AnnexCMode *)choice; } H245_AudioMode::operator const H245_G7231AnnexCMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_G7231AnnexCMode), PInvalidCast); #endif return *(H245_G7231AnnexCMode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_AudioMode::operator H245_GSMAudioCapability &() const #else H245_AudioMode::operator H245_GSMAudioCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GSMAudioCapability), PInvalidCast); #endif return *(H245_GSMAudioCapability *)choice; } H245_AudioMode::operator const H245_GSMAudioCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GSMAudioCapability), PInvalidCast); #endif return *(H245_GSMAudioCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_AudioMode::operator H245_GenericCapability &() const #else H245_AudioMode::operator H245_GenericCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericCapability), PInvalidCast); #endif return *(H245_GenericCapability *)choice; } H245_AudioMode::operator const H245_GenericCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericCapability), PInvalidCast); #endif return *(H245_GenericCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_AudioMode::operator H245_G729Extensions &() const #else H245_AudioMode::operator H245_G729Extensions &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_G729Extensions), PInvalidCast); #endif return *(H245_G729Extensions *)choice; } H245_AudioMode::operator const H245_G729Extensions &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_G729Extensions), PInvalidCast); #endif return *(H245_G729Extensions *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_AudioMode::operator H245_VBDMode &() const #else H245_AudioMode::operator H245_VBDMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VBDMode), PInvalidCast); #endif return *(H245_VBDMode *)choice; } H245_AudioMode::operator const H245_VBDMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VBDMode), PInvalidCast); #endif return *(H245_VBDMode *)choice; } PBoolean H245_AudioMode::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_g711Alaw64k : case e_g711Alaw56k : case e_g711Ulaw64k : case e_g711Ulaw56k : case e_g722_64k : case e_g722_56k : case e_g722_48k : case e_g728 : case e_g729 : case e_g729AnnexA : choice = new PASN_Null(); return TRUE; case e_g7231 : choice = new H245_AudioMode_g7231(); return TRUE; case e_is11172AudioMode : choice = new H245_IS11172AudioMode(); return TRUE; case e_is13818AudioMode : choice = new H245_IS13818AudioMode(); return TRUE; case e_g729wAnnexB : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 256); return TRUE; case e_g729AnnexAwAnnexB : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 256); return TRUE; case e_g7231AnnexCMode : choice = new H245_G7231AnnexCMode(); return TRUE; case e_gsmFullRate : case e_gsmHalfRate : case e_gsmEnhancedFullRate : choice = new H245_GSMAudioCapability(); return TRUE; case e_genericAudioMode : choice = new H245_GenericCapability(); return TRUE; case e_g729Extensions : choice = new H245_G729Extensions(); return TRUE; case e_vbd : choice = new H245_VBDMode(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_AudioMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_AudioMode::Class()), PInvalidCast); #endif return new H245_AudioMode(*this); } // // VBDMode // H245_VBDMode::H245_VBDMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_VBDMode::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "type = " << setprecision(indent) << m_type << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_VBDMode::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_VBDMode), PInvalidCast); #endif const H245_VBDMode & other = (const H245_VBDMode &)obj; Comparison result; if ((result = m_type.Compare(other.m_type)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_VBDMode::GetDataLength() const { PINDEX length = 0; length += m_type.GetObjectLength(); return length; } PBoolean H245_VBDMode::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_type.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_VBDMode::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_type.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_VBDMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_VBDMode::Class()), PInvalidCast); #endif return new H245_VBDMode(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_EncryptionMode[]={ {"nonStandard",0} ,{"h233Encryption",1} }; #endif // // EncryptionMode // H245_EncryptionMode::H245_EncryptionMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_EncryptionMode,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_EncryptionMode::operator H245_NonStandardParameter &() const #else H245_EncryptionMode::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_EncryptionMode::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } PBoolean H245_EncryptionMode::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_h233Encryption : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_EncryptionMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_EncryptionMode::Class()), PInvalidCast); #endif return new H245_EncryptionMode(*this); } // // RoundTripDelayRequest // H245_RoundTripDelayRequest::H245_RoundTripDelayRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_RoundTripDelayRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "sequenceNumber = " << setprecision(indent) << m_sequenceNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RoundTripDelayRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RoundTripDelayRequest), PInvalidCast); #endif const H245_RoundTripDelayRequest & other = (const H245_RoundTripDelayRequest &)obj; Comparison result; if ((result = m_sequenceNumber.Compare(other.m_sequenceNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RoundTripDelayRequest::GetDataLength() const { PINDEX length = 0; length += m_sequenceNumber.GetObjectLength(); return length; } PBoolean H245_RoundTripDelayRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sequenceNumber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RoundTripDelayRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sequenceNumber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RoundTripDelayRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RoundTripDelayRequest::Class()), PInvalidCast); #endif return new H245_RoundTripDelayRequest(*this); } // // RoundTripDelayResponse // H245_RoundTripDelayResponse::H245_RoundTripDelayResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_RoundTripDelayResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "sequenceNumber = " << setprecision(indent) << m_sequenceNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RoundTripDelayResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RoundTripDelayResponse), PInvalidCast); #endif const H245_RoundTripDelayResponse & other = (const H245_RoundTripDelayResponse &)obj; Comparison result; if ((result = m_sequenceNumber.Compare(other.m_sequenceNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RoundTripDelayResponse::GetDataLength() const { PINDEX length = 0; length += m_sequenceNumber.GetObjectLength(); return length; } PBoolean H245_RoundTripDelayResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sequenceNumber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RoundTripDelayResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sequenceNumber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RoundTripDelayResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RoundTripDelayResponse::Class()), PInvalidCast); #endif return new H245_RoundTripDelayResponse(*this); } // // MaintenanceLoopOffCommand // H245_MaintenanceLoopOffCommand::H245_MaintenanceLoopOffCommand(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MaintenanceLoopOffCommand::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX H245_MaintenanceLoopOffCommand::GetDataLength() const { PINDEX length = 0; return length; } PBoolean H245_MaintenanceLoopOffCommand::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MaintenanceLoopOffCommand::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MaintenanceLoopOffCommand::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MaintenanceLoopOffCommand::Class()), PInvalidCast); #endif return new H245_MaintenanceLoopOffCommand(*this); } // // CommunicationModeRequest // H245_CommunicationModeRequest::H245_CommunicationModeRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_CommunicationModeRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX H245_CommunicationModeRequest::GetDataLength() const { PINDEX length = 0; return length; } PBoolean H245_CommunicationModeRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_CommunicationModeRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * H245_CommunicationModeRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CommunicationModeRequest::Class()), PInvalidCast); #endif return new H245_CommunicationModeRequest(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_CommunicationModeResponse[]={ {"communicationModeTable",0} }; #endif // // CommunicationModeResponse // H245_CommunicationModeResponse::H245_CommunicationModeResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_CommunicationModeResponse,1 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_CommunicationModeResponse::operator H245_ArrayOf_CommunicationModeTableEntry &() const #else H245_CommunicationModeResponse::operator H245_ArrayOf_CommunicationModeTableEntry &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ArrayOf_CommunicationModeTableEntry), PInvalidCast); #endif return *(H245_ArrayOf_CommunicationModeTableEntry *)choice; } H245_CommunicationModeResponse::operator const H245_ArrayOf_CommunicationModeTableEntry &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ArrayOf_CommunicationModeTableEntry), PInvalidCast); #endif return *(H245_ArrayOf_CommunicationModeTableEntry *)choice; } PBoolean H245_CommunicationModeResponse::CreateObject() { switch (tag) { case e_communicationModeTable : choice = new H245_ArrayOf_CommunicationModeTableEntry(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 256); return TRUE; } choice = NULL; return FALSE; } PObject * H245_CommunicationModeResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CommunicationModeResponse::Class()), PInvalidCast); #endif return new H245_CommunicationModeResponse(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_ConferenceRequest[]={ {"terminalListRequest",0} ,{"makeMeChair",1} ,{"cancelMakeMeChair",2} ,{"dropTerminal",3} ,{"requestTerminalID",4} ,{"enterH243Password",5} ,{"enterH243TerminalID",6} ,{"enterH243ConferenceID",7} ,{"enterExtensionAddress",8} ,{"requestChairTokenOwner",9} ,{"requestTerminalCertificate",10} ,{"broadcastMyLogicalChannel",11} ,{"makeTerminalBroadcaster",12} ,{"sendThisSource",13} ,{"requestAllTerminalIDs",14} ,{"remoteMCRequest",15} }; #endif // // ConferenceRequest // H245_ConferenceRequest::H245_ConferenceRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 8, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_ConferenceRequest,16 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceRequest::operator H245_TerminalLabel &() const #else H245_ConferenceRequest::operator H245_TerminalLabel &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_TerminalLabel), PInvalidCast); #endif return *(H245_TerminalLabel *)choice; } H245_ConferenceRequest::operator const H245_TerminalLabel &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_TerminalLabel), PInvalidCast); #endif return *(H245_TerminalLabel *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceRequest::operator H245_ConferenceRequest_requestTerminalCertificate &() const #else H245_ConferenceRequest::operator H245_ConferenceRequest_requestTerminalCertificate &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceRequest_requestTerminalCertificate), PInvalidCast); #endif return *(H245_ConferenceRequest_requestTerminalCertificate *)choice; } H245_ConferenceRequest::operator const H245_ConferenceRequest_requestTerminalCertificate &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceRequest_requestTerminalCertificate), PInvalidCast); #endif return *(H245_ConferenceRequest_requestTerminalCertificate *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceRequest::operator H245_LogicalChannelNumber &() const #else H245_ConferenceRequest::operator H245_LogicalChannelNumber &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelNumber), PInvalidCast); #endif return *(H245_LogicalChannelNumber *)choice; } H245_ConferenceRequest::operator const H245_LogicalChannelNumber &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelNumber), PInvalidCast); #endif return *(H245_LogicalChannelNumber *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceRequest::operator H245_RemoteMCRequest &() const #else H245_ConferenceRequest::operator H245_RemoteMCRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RemoteMCRequest), PInvalidCast); #endif return *(H245_RemoteMCRequest *)choice; } H245_ConferenceRequest::operator const H245_RemoteMCRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RemoteMCRequest), PInvalidCast); #endif return *(H245_RemoteMCRequest *)choice; } PBoolean H245_ConferenceRequest::CreateObject() { switch (tag) { case e_terminalListRequest : case e_makeMeChair : case e_cancelMakeMeChair : case e_enterH243Password : case e_enterH243TerminalID : case e_enterH243ConferenceID : case e_enterExtensionAddress : case e_requestChairTokenOwner : case e_requestAllTerminalIDs : choice = new PASN_Null(); return TRUE; case e_dropTerminal : case e_requestTerminalID : case e_makeTerminalBroadcaster : case e_sendThisSource : choice = new H245_TerminalLabel(); return TRUE; case e_requestTerminalCertificate : choice = new H245_ConferenceRequest_requestTerminalCertificate(); return TRUE; case e_broadcastMyLogicalChannel : choice = new H245_LogicalChannelNumber(); return TRUE; case e_remoteMCRequest : choice = new H245_RemoteMCRequest(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_ConferenceRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ConferenceRequest::Class()), PInvalidCast); #endif return new H245_ConferenceRequest(*this); } // // CertSelectionCriteria // H245_CertSelectionCriteria::H245_CertSelectionCriteria(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 16); } PASN_Object * H245_CertSelectionCriteria::CreateObject() const { return new H245_Criteria; } H245_Criteria & H245_CertSelectionCriteria::operator[](PINDEX i) const { return (H245_Criteria &)array[i]; } PObject * H245_CertSelectionCriteria::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CertSelectionCriteria::Class()), PInvalidCast); #endif return new H245_CertSelectionCriteria(*this); } // // Criteria // H245_Criteria::H245_Criteria(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_value.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } #ifndef PASN_NOPRINTON void H245_Criteria::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+8) << "field = " << setprecision(indent) << m_field << '\n'; strm << setw(indent+8) << "value = " << setprecision(indent) << m_value << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_Criteria::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_Criteria), PInvalidCast); #endif const H245_Criteria & other = (const H245_Criteria &)obj; Comparison result; if ((result = m_field.Compare(other.m_field)) != EqualTo) return result; if ((result = m_value.Compare(other.m_value)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_Criteria::GetDataLength() const { PINDEX length = 0; length += m_field.GetObjectLength(); length += m_value.GetObjectLength(); return length; } PBoolean H245_Criteria::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_field.Decode(strm)) return FALSE; if (!m_value.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_Criteria::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_field.Encode(strm); m_value.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_Criteria::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_Criteria::Class()), PInvalidCast); #endif return new H245_Criteria(*this); } // // McuNumber // H245_McuNumber::H245_McuNumber(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 192); } H245_McuNumber & H245_McuNumber::operator=(int v) { SetValue(v); return *this; } H245_McuNumber & H245_McuNumber::operator=(unsigned v) { SetValue(v); return *this; } PObject * H245_McuNumber::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_McuNumber::Class()), PInvalidCast); #endif return new H245_McuNumber(*this); } // // TerminalNumber // H245_TerminalNumber::H245_TerminalNumber(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 192); } H245_TerminalNumber & H245_TerminalNumber::operator=(int v) { SetValue(v); return *this; } H245_TerminalNumber & H245_TerminalNumber::operator=(unsigned v) { SetValue(v); return *this; } PObject * H245_TerminalNumber::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_TerminalNumber::Class()), PInvalidCast); #endif return new H245_TerminalNumber(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_ConferenceResponse[]={ {"mCTerminalIDResponse",0} ,{"terminalIDResponse",1} ,{"conferenceIDResponse",2} ,{"passwordResponse",3} ,{"terminalListResponse",4} ,{"videoCommandReject",5} ,{"terminalDropReject",6} ,{"makeMeChairResponse",7} ,{"extensionAddressResponse",8} ,{"chairTokenOwnerResponse",9} ,{"terminalCertificateResponse",10} ,{"broadcastMyLogicalChannelResponse",11} ,{"makeTerminalBroadcasterResponse",12} ,{"sendThisSourceResponse",13} ,{"requestAllTerminalIDsResponse",14} ,{"remoteMCResponse",15} }; #endif // // ConferenceResponse // H245_ConferenceResponse::H245_ConferenceResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 8, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_ConferenceResponse,16 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceResponse::operator H245_ConferenceResponse_mCTerminalIDResponse &() const #else H245_ConferenceResponse::operator H245_ConferenceResponse_mCTerminalIDResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse_mCTerminalIDResponse), PInvalidCast); #endif return *(H245_ConferenceResponse_mCTerminalIDResponse *)choice; } H245_ConferenceResponse::operator const H245_ConferenceResponse_mCTerminalIDResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse_mCTerminalIDResponse), PInvalidCast); #endif return *(H245_ConferenceResponse_mCTerminalIDResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceResponse::operator H245_ConferenceResponse_terminalIDResponse &() const #else H245_ConferenceResponse::operator H245_ConferenceResponse_terminalIDResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse_terminalIDResponse), PInvalidCast); #endif return *(H245_ConferenceResponse_terminalIDResponse *)choice; } H245_ConferenceResponse::operator const H245_ConferenceResponse_terminalIDResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse_terminalIDResponse), PInvalidCast); #endif return *(H245_ConferenceResponse_terminalIDResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceResponse::operator H245_ConferenceResponse_conferenceIDResponse &() const #else H245_ConferenceResponse::operator H245_ConferenceResponse_conferenceIDResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse_conferenceIDResponse), PInvalidCast); #endif return *(H245_ConferenceResponse_conferenceIDResponse *)choice; } H245_ConferenceResponse::operator const H245_ConferenceResponse_conferenceIDResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse_conferenceIDResponse), PInvalidCast); #endif return *(H245_ConferenceResponse_conferenceIDResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceResponse::operator H245_ConferenceResponse_passwordResponse &() const #else H245_ConferenceResponse::operator H245_ConferenceResponse_passwordResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse_passwordResponse), PInvalidCast); #endif return *(H245_ConferenceResponse_passwordResponse *)choice; } H245_ConferenceResponse::operator const H245_ConferenceResponse_passwordResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse_passwordResponse), PInvalidCast); #endif return *(H245_ConferenceResponse_passwordResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceResponse::operator H245_ArrayOf_TerminalLabel &() const #else H245_ConferenceResponse::operator H245_ArrayOf_TerminalLabel &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ArrayOf_TerminalLabel), PInvalidCast); #endif return *(H245_ArrayOf_TerminalLabel *)choice; } H245_ConferenceResponse::operator const H245_ArrayOf_TerminalLabel &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ArrayOf_TerminalLabel), PInvalidCast); #endif return *(H245_ArrayOf_TerminalLabel *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceResponse::operator H245_ConferenceResponse_makeMeChairResponse &() const #else H245_ConferenceResponse::operator H245_ConferenceResponse_makeMeChairResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse_makeMeChairResponse), PInvalidCast); #endif return *(H245_ConferenceResponse_makeMeChairResponse *)choice; } H245_ConferenceResponse::operator const H245_ConferenceResponse_makeMeChairResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse_makeMeChairResponse), PInvalidCast); #endif return *(H245_ConferenceResponse_makeMeChairResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceResponse::operator H245_ConferenceResponse_extensionAddressResponse &() const #else H245_ConferenceResponse::operator H245_ConferenceResponse_extensionAddressResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse_extensionAddressResponse), PInvalidCast); #endif return *(H245_ConferenceResponse_extensionAddressResponse *)choice; } H245_ConferenceResponse::operator const H245_ConferenceResponse_extensionAddressResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse_extensionAddressResponse), PInvalidCast); #endif return *(H245_ConferenceResponse_extensionAddressResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceResponse::operator H245_ConferenceResponse_chairTokenOwnerResponse &() const #else H245_ConferenceResponse::operator H245_ConferenceResponse_chairTokenOwnerResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse_chairTokenOwnerResponse), PInvalidCast); #endif return *(H245_ConferenceResponse_chairTokenOwnerResponse *)choice; } H245_ConferenceResponse::operator const H245_ConferenceResponse_chairTokenOwnerResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse_chairTokenOwnerResponse), PInvalidCast); #endif return *(H245_ConferenceResponse_chairTokenOwnerResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceResponse::operator H245_ConferenceResponse_terminalCertificateResponse &() const #else H245_ConferenceResponse::operator H245_ConferenceResponse_terminalCertificateResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse_terminalCertificateResponse), PInvalidCast); #endif return *(H245_ConferenceResponse_terminalCertificateResponse *)choice; } H245_ConferenceResponse::operator const H245_ConferenceResponse_terminalCertificateResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse_terminalCertificateResponse), PInvalidCast); #endif return *(H245_ConferenceResponse_terminalCertificateResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceResponse::operator H245_ConferenceResponse_broadcastMyLogicalChannelResponse &() const #else H245_ConferenceResponse::operator H245_ConferenceResponse_broadcastMyLogicalChannelResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse_broadcastMyLogicalChannelResponse), PInvalidCast); #endif return *(H245_ConferenceResponse_broadcastMyLogicalChannelResponse *)choice; } H245_ConferenceResponse::operator const H245_ConferenceResponse_broadcastMyLogicalChannelResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse_broadcastMyLogicalChannelResponse), PInvalidCast); #endif return *(H245_ConferenceResponse_broadcastMyLogicalChannelResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceResponse::operator H245_ConferenceResponse_makeTerminalBroadcasterResponse &() const #else H245_ConferenceResponse::operator H245_ConferenceResponse_makeTerminalBroadcasterResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse_makeTerminalBroadcasterResponse), PInvalidCast); #endif return *(H245_ConferenceResponse_makeTerminalBroadcasterResponse *)choice; } H245_ConferenceResponse::operator const H245_ConferenceResponse_makeTerminalBroadcasterResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse_makeTerminalBroadcasterResponse), PInvalidCast); #endif return *(H245_ConferenceResponse_makeTerminalBroadcasterResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceResponse::operator H245_ConferenceResponse_sendThisSourceResponse &() const #else H245_ConferenceResponse::operator H245_ConferenceResponse_sendThisSourceResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse_sendThisSourceResponse), PInvalidCast); #endif return *(H245_ConferenceResponse_sendThisSourceResponse *)choice; } H245_ConferenceResponse::operator const H245_ConferenceResponse_sendThisSourceResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ConferenceResponse_sendThisSourceResponse), PInvalidCast); #endif return *(H245_ConferenceResponse_sendThisSourceResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceResponse::operator H245_RequestAllTerminalIDsResponse &() const #else H245_ConferenceResponse::operator H245_RequestAllTerminalIDsResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestAllTerminalIDsResponse), PInvalidCast); #endif return *(H245_RequestAllTerminalIDsResponse *)choice; } H245_ConferenceResponse::operator const H245_RequestAllTerminalIDsResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestAllTerminalIDsResponse), PInvalidCast); #endif return *(H245_RequestAllTerminalIDsResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceResponse::operator H245_RemoteMCResponse &() const #else H245_ConferenceResponse::operator H245_RemoteMCResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RemoteMCResponse), PInvalidCast); #endif return *(H245_RemoteMCResponse *)choice; } H245_ConferenceResponse::operator const H245_RemoteMCResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RemoteMCResponse), PInvalidCast); #endif return *(H245_RemoteMCResponse *)choice; } PBoolean H245_ConferenceResponse::CreateObject() { switch (tag) { case e_mCTerminalIDResponse : choice = new H245_ConferenceResponse_mCTerminalIDResponse(); return TRUE; case e_terminalIDResponse : choice = new H245_ConferenceResponse_terminalIDResponse(); return TRUE; case e_conferenceIDResponse : choice = new H245_ConferenceResponse_conferenceIDResponse(); return TRUE; case e_passwordResponse : choice = new H245_ConferenceResponse_passwordResponse(); return TRUE; case e_terminalListResponse : choice = new H245_ArrayOf_TerminalLabel(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 256); return TRUE; case e_videoCommandReject : case e_terminalDropReject : choice = new PASN_Null(); return TRUE; case e_makeMeChairResponse : choice = new H245_ConferenceResponse_makeMeChairResponse(); return TRUE; case e_extensionAddressResponse : choice = new H245_ConferenceResponse_extensionAddressResponse(); return TRUE; case e_chairTokenOwnerResponse : choice = new H245_ConferenceResponse_chairTokenOwnerResponse(); return TRUE; case e_terminalCertificateResponse : choice = new H245_ConferenceResponse_terminalCertificateResponse(); return TRUE; case e_broadcastMyLogicalChannelResponse : choice = new H245_ConferenceResponse_broadcastMyLogicalChannelResponse(); return TRUE; case e_makeTerminalBroadcasterResponse : choice = new H245_ConferenceResponse_makeTerminalBroadcasterResponse(); return TRUE; case e_sendThisSourceResponse : choice = new H245_ConferenceResponse_sendThisSourceResponse(); return TRUE; case e_requestAllTerminalIDsResponse : choice = new H245_RequestAllTerminalIDsResponse(); return TRUE; case e_remoteMCResponse : choice = new H245_RemoteMCResponse(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_ConferenceResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ConferenceResponse::Class()), PInvalidCast); #endif return new H245_ConferenceResponse(*this); } // // TerminalID // H245_TerminalID::H245_TerminalID(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 128); } H245_TerminalID::H245_TerminalID(const char * v) { SetValue(v); } H245_TerminalID::H245_TerminalID(const PString & v) { SetValue(v); } H245_TerminalID::H245_TerminalID(const PBYTEArray & v) { SetValue(v); } H245_TerminalID & H245_TerminalID::operator=(const char * v) { SetValue(v); return *this; } H245_TerminalID & H245_TerminalID::operator=(const PString & v) { SetValue(v); return *this; } H245_TerminalID & H245_TerminalID::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H245_TerminalID::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_TerminalID::Class()), PInvalidCast); #endif return new H245_TerminalID(*this); } // // ConferenceID // H245_ConferenceID::H245_ConferenceID(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 32); } H245_ConferenceID::H245_ConferenceID(const char * v) { SetValue(v); } H245_ConferenceID::H245_ConferenceID(const PString & v) { SetValue(v); } H245_ConferenceID::H245_ConferenceID(const PBYTEArray & v) { SetValue(v); } H245_ConferenceID & H245_ConferenceID::operator=(const char * v) { SetValue(v); return *this; } H245_ConferenceID & H245_ConferenceID::operator=(const PString & v) { SetValue(v); return *this; } H245_ConferenceID & H245_ConferenceID::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H245_ConferenceID::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ConferenceID::Class()), PInvalidCast); #endif return new H245_ConferenceID(*this); } // // Password // H245_Password::H245_Password(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 32); } H245_Password::H245_Password(const char * v) { SetValue(v); } H245_Password::H245_Password(const PString & v) { SetValue(v); } H245_Password::H245_Password(const PBYTEArray & v) { SetValue(v); } H245_Password & H245_Password::operator=(const char * v) { SetValue(v); return *this; } H245_Password & H245_Password::operator=(const PString & v) { SetValue(v); return *this; } H245_Password & H245_Password::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H245_Password::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_Password::Class()), PInvalidCast); #endif return new H245_Password(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_RemoteMCRequest[]={ {"masterActivate",0} ,{"slaveActivate",1} ,{"deActivate",2} }; #endif // // RemoteMCRequest // H245_RemoteMCRequest::H245_RemoteMCRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_RemoteMCRequest,3 #endif ) { } PBoolean H245_RemoteMCRequest::CreateObject() { choice = (tag <= e_deActivate) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_RemoteMCRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RemoteMCRequest::Class()), PInvalidCast); #endif return new H245_RemoteMCRequest(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_RemoteMCResponse[]={ {"accept",0} ,{"reject",1} }; #endif // // RemoteMCResponse // H245_RemoteMCResponse::H245_RemoteMCResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_RemoteMCResponse,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RemoteMCResponse::operator H245_RemoteMCResponse_reject &() const #else H245_RemoteMCResponse::operator H245_RemoteMCResponse_reject &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RemoteMCResponse_reject), PInvalidCast); #endif return *(H245_RemoteMCResponse_reject *)choice; } H245_RemoteMCResponse::operator const H245_RemoteMCResponse_reject &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RemoteMCResponse_reject), PInvalidCast); #endif return *(H245_RemoteMCResponse_reject *)choice; } PBoolean H245_RemoteMCResponse::CreateObject() { switch (tag) { case e_accept : choice = new PASN_Null(); return TRUE; case e_reject : choice = new H245_RemoteMCResponse_reject(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_RemoteMCResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RemoteMCResponse::Class()), PInvalidCast); #endif return new H245_RemoteMCResponse(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MultilinkRequest[]={ {"nonStandard",0} ,{"callInformation",1} ,{"addConnection",2} ,{"removeConnection",3} ,{"maximumHeaderInterval",4} }; #endif // // MultilinkRequest // H245_MultilinkRequest::H245_MultilinkRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 5, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MultilinkRequest,5 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultilinkRequest::operator H245_NonStandardMessage &() const #else H245_MultilinkRequest::operator H245_NonStandardMessage &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardMessage), PInvalidCast); #endif return *(H245_NonStandardMessage *)choice; } H245_MultilinkRequest::operator const H245_NonStandardMessage &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardMessage), PInvalidCast); #endif return *(H245_NonStandardMessage *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultilinkRequest::operator H245_MultilinkRequest_callInformation &() const #else H245_MultilinkRequest::operator H245_MultilinkRequest_callInformation &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkRequest_callInformation), PInvalidCast); #endif return *(H245_MultilinkRequest_callInformation *)choice; } H245_MultilinkRequest::operator const H245_MultilinkRequest_callInformation &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkRequest_callInformation), PInvalidCast); #endif return *(H245_MultilinkRequest_callInformation *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultilinkRequest::operator H245_MultilinkRequest_addConnection &() const #else H245_MultilinkRequest::operator H245_MultilinkRequest_addConnection &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkRequest_addConnection), PInvalidCast); #endif return *(H245_MultilinkRequest_addConnection *)choice; } H245_MultilinkRequest::operator const H245_MultilinkRequest_addConnection &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkRequest_addConnection), PInvalidCast); #endif return *(H245_MultilinkRequest_addConnection *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultilinkRequest::operator H245_MultilinkRequest_removeConnection &() const #else H245_MultilinkRequest::operator H245_MultilinkRequest_removeConnection &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkRequest_removeConnection), PInvalidCast); #endif return *(H245_MultilinkRequest_removeConnection *)choice; } H245_MultilinkRequest::operator const H245_MultilinkRequest_removeConnection &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkRequest_removeConnection), PInvalidCast); #endif return *(H245_MultilinkRequest_removeConnection *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultilinkRequest::operator H245_MultilinkRequest_maximumHeaderInterval &() const #else H245_MultilinkRequest::operator H245_MultilinkRequest_maximumHeaderInterval &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkRequest_maximumHeaderInterval), PInvalidCast); #endif return *(H245_MultilinkRequest_maximumHeaderInterval *)choice; } H245_MultilinkRequest::operator const H245_MultilinkRequest_maximumHeaderInterval &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkRequest_maximumHeaderInterval), PInvalidCast); #endif return *(H245_MultilinkRequest_maximumHeaderInterval *)choice; } PBoolean H245_MultilinkRequest::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardMessage(); return TRUE; case e_callInformation : choice = new H245_MultilinkRequest_callInformation(); return TRUE; case e_addConnection : choice = new H245_MultilinkRequest_addConnection(); return TRUE; case e_removeConnection : choice = new H245_MultilinkRequest_removeConnection(); return TRUE; case e_maximumHeaderInterval : choice = new H245_MultilinkRequest_maximumHeaderInterval(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_MultilinkRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultilinkRequest::Class()), PInvalidCast); #endif return new H245_MultilinkRequest(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MultilinkResponse[]={ {"nonStandard",0} ,{"callInformation",1} ,{"addConnection",2} ,{"removeConnection",3} ,{"maximumHeaderInterval",4} }; #endif // // MultilinkResponse // H245_MultilinkResponse::H245_MultilinkResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 5, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MultilinkResponse,5 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultilinkResponse::operator H245_NonStandardMessage &() const #else H245_MultilinkResponse::operator H245_NonStandardMessage &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardMessage), PInvalidCast); #endif return *(H245_NonStandardMessage *)choice; } H245_MultilinkResponse::operator const H245_NonStandardMessage &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardMessage), PInvalidCast); #endif return *(H245_NonStandardMessage *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultilinkResponse::operator H245_MultilinkResponse_callInformation &() const #else H245_MultilinkResponse::operator H245_MultilinkResponse_callInformation &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkResponse_callInformation), PInvalidCast); #endif return *(H245_MultilinkResponse_callInformation *)choice; } H245_MultilinkResponse::operator const H245_MultilinkResponse_callInformation &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkResponse_callInformation), PInvalidCast); #endif return *(H245_MultilinkResponse_callInformation *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultilinkResponse::operator H245_MultilinkResponse_addConnection &() const #else H245_MultilinkResponse::operator H245_MultilinkResponse_addConnection &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkResponse_addConnection), PInvalidCast); #endif return *(H245_MultilinkResponse_addConnection *)choice; } H245_MultilinkResponse::operator const H245_MultilinkResponse_addConnection &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkResponse_addConnection), PInvalidCast); #endif return *(H245_MultilinkResponse_addConnection *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultilinkResponse::operator H245_MultilinkResponse_removeConnection &() const #else H245_MultilinkResponse::operator H245_MultilinkResponse_removeConnection &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkResponse_removeConnection), PInvalidCast); #endif return *(H245_MultilinkResponse_removeConnection *)choice; } H245_MultilinkResponse::operator const H245_MultilinkResponse_removeConnection &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkResponse_removeConnection), PInvalidCast); #endif return *(H245_MultilinkResponse_removeConnection *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultilinkResponse::operator H245_MultilinkResponse_maximumHeaderInterval &() const #else H245_MultilinkResponse::operator H245_MultilinkResponse_maximumHeaderInterval &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkResponse_maximumHeaderInterval), PInvalidCast); #endif return *(H245_MultilinkResponse_maximumHeaderInterval *)choice; } H245_MultilinkResponse::operator const H245_MultilinkResponse_maximumHeaderInterval &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkResponse_maximumHeaderInterval), PInvalidCast); #endif return *(H245_MultilinkResponse_maximumHeaderInterval *)choice; } PBoolean H245_MultilinkResponse::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardMessage(); return TRUE; case e_callInformation : choice = new H245_MultilinkResponse_callInformation(); return TRUE; case e_addConnection : choice = new H245_MultilinkResponse_addConnection(); return TRUE; case e_removeConnection : choice = new H245_MultilinkResponse_removeConnection(); return TRUE; case e_maximumHeaderInterval : choice = new H245_MultilinkResponse_maximumHeaderInterval(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_MultilinkResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultilinkResponse::Class()), PInvalidCast); #endif return new H245_MultilinkResponse(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MultilinkIndication[]={ {"nonStandard",0} ,{"crcDesired",1} ,{"excessiveError",2} }; #endif // // MultilinkIndication // H245_MultilinkIndication::H245_MultilinkIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MultilinkIndication,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultilinkIndication::operator H245_NonStandardMessage &() const #else H245_MultilinkIndication::operator H245_NonStandardMessage &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardMessage), PInvalidCast); #endif return *(H245_NonStandardMessage *)choice; } H245_MultilinkIndication::operator const H245_NonStandardMessage &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardMessage), PInvalidCast); #endif return *(H245_NonStandardMessage *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultilinkIndication::operator H245_MultilinkIndication_crcDesired &() const #else H245_MultilinkIndication::operator H245_MultilinkIndication_crcDesired &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkIndication_crcDesired), PInvalidCast); #endif return *(H245_MultilinkIndication_crcDesired *)choice; } H245_MultilinkIndication::operator const H245_MultilinkIndication_crcDesired &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkIndication_crcDesired), PInvalidCast); #endif return *(H245_MultilinkIndication_crcDesired *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultilinkIndication::operator H245_MultilinkIndication_excessiveError &() const #else H245_MultilinkIndication::operator H245_MultilinkIndication_excessiveError &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkIndication_excessiveError), PInvalidCast); #endif return *(H245_MultilinkIndication_excessiveError *)choice; } H245_MultilinkIndication::operator const H245_MultilinkIndication_excessiveError &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkIndication_excessiveError), PInvalidCast); #endif return *(H245_MultilinkIndication_excessiveError *)choice; } PBoolean H245_MultilinkIndication::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardMessage(); return TRUE; case e_crcDesired : choice = new H245_MultilinkIndication_crcDesired(); return TRUE; case e_excessiveError : choice = new H245_MultilinkIndication_excessiveError(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_MultilinkIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultilinkIndication::Class()), PInvalidCast); #endif return new H245_MultilinkIndication(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_DialingInformation[]={ {"nonStandard",0} ,{"differential",1} ,{"infoNotAvailable",2} }; #endif // // DialingInformation // H245_DialingInformation::H245_DialingInformation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_DialingInformation,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DialingInformation::operator H245_NonStandardMessage &() const #else H245_DialingInformation::operator H245_NonStandardMessage &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardMessage), PInvalidCast); #endif return *(H245_NonStandardMessage *)choice; } H245_DialingInformation::operator const H245_NonStandardMessage &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardMessage), PInvalidCast); #endif return *(H245_NonStandardMessage *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DialingInformation::operator H245_ArrayOf_DialingInformationNumber &() const #else H245_DialingInformation::operator H245_ArrayOf_DialingInformationNumber &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ArrayOf_DialingInformationNumber), PInvalidCast); #endif return *(H245_ArrayOf_DialingInformationNumber *)choice; } H245_DialingInformation::operator const H245_ArrayOf_DialingInformationNumber &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ArrayOf_DialingInformationNumber), PInvalidCast); #endif return *(H245_ArrayOf_DialingInformationNumber *)choice; } PBoolean H245_DialingInformation::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardMessage(); return TRUE; case e_differential : choice = new H245_ArrayOf_DialingInformationNumber(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 65535); return TRUE; case e_infoNotAvailable : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 65535); return TRUE; } choice = NULL; return FALSE; } PObject * H245_DialingInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DialingInformation::Class()), PInvalidCast); #endif return new H245_DialingInformation(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_DialingInformationNetworkType[]={ {"nonStandard",0} ,{"n_isdn",1} ,{"gstn",2} ,{"mobile",3} }; #endif // // DialingInformationNetworkType // H245_DialingInformationNetworkType::H245_DialingInformationNetworkType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_DialingInformationNetworkType,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DialingInformationNetworkType::operator H245_NonStandardMessage &() const #else H245_DialingInformationNetworkType::operator H245_NonStandardMessage &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardMessage), PInvalidCast); #endif return *(H245_NonStandardMessage *)choice; } H245_DialingInformationNetworkType::operator const H245_NonStandardMessage &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardMessage), PInvalidCast); #endif return *(H245_NonStandardMessage *)choice; } PBoolean H245_DialingInformationNetworkType::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardMessage(); return TRUE; case e_n_isdn : case e_gstn : case e_mobile : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_DialingInformationNetworkType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DialingInformationNetworkType::Class()), PInvalidCast); #endif return new H245_DialingInformationNetworkType(*this); } // // ConnectionIdentifier // H245_ConnectionIdentifier::H245_ConnectionIdentifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_channelTag.SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); m_sequenceNumber.SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); } #ifndef PASN_NOPRINTON void H245_ConnectionIdentifier::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "channelTag = " << setprecision(indent) << m_channelTag << '\n'; strm << setw(indent+17) << "sequenceNumber = " << setprecision(indent) << m_sequenceNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_ConnectionIdentifier::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_ConnectionIdentifier), PInvalidCast); #endif const H245_ConnectionIdentifier & other = (const H245_ConnectionIdentifier &)obj; Comparison result; if ((result = m_channelTag.Compare(other.m_channelTag)) != EqualTo) return result; if ((result = m_sequenceNumber.Compare(other.m_sequenceNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_ConnectionIdentifier::GetDataLength() const { PINDEX length = 0; length += m_channelTag.GetObjectLength(); length += m_sequenceNumber.GetObjectLength(); return length; } PBoolean H245_ConnectionIdentifier::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_channelTag.Decode(strm)) return FALSE; if (!m_sequenceNumber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_ConnectionIdentifier::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_channelTag.Encode(strm); m_sequenceNumber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_ConnectionIdentifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ConnectionIdentifier::Class()), PInvalidCast); #endif return new H245_ConnectionIdentifier(*this); } // // MaximumBitRate // H245_MaximumBitRate::H245_MaximumBitRate(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); } H245_MaximumBitRate & H245_MaximumBitRate::operator=(int v) { SetValue(v); return *this; } H245_MaximumBitRate & H245_MaximumBitRate::operator=(unsigned v) { SetValue(v); return *this; } PObject * H245_MaximumBitRate::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MaximumBitRate::Class()), PInvalidCast); #endif return new H245_MaximumBitRate(*this); } // // LogicalChannelRateRequest // H245_LogicalChannelRateRequest::H245_LogicalChannelRateRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_LogicalChannelRateRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "sequenceNumber = " << setprecision(indent) << m_sequenceNumber << '\n'; strm << setw(indent+23) << "logicalChannelNumber = " << setprecision(indent) << m_logicalChannelNumber << '\n'; strm << setw(indent+17) << "maximumBitRate = " << setprecision(indent) << m_maximumBitRate << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_LogicalChannelRateRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_LogicalChannelRateRequest), PInvalidCast); #endif const H245_LogicalChannelRateRequest & other = (const H245_LogicalChannelRateRequest &)obj; Comparison result; if ((result = m_sequenceNumber.Compare(other.m_sequenceNumber)) != EqualTo) return result; if ((result = m_logicalChannelNumber.Compare(other.m_logicalChannelNumber)) != EqualTo) return result; if ((result = m_maximumBitRate.Compare(other.m_maximumBitRate)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_LogicalChannelRateRequest::GetDataLength() const { PINDEX length = 0; length += m_sequenceNumber.GetObjectLength(); length += m_logicalChannelNumber.GetObjectLength(); length += m_maximumBitRate.GetObjectLength(); return length; } PBoolean H245_LogicalChannelRateRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sequenceNumber.Decode(strm)) return FALSE; if (!m_logicalChannelNumber.Decode(strm)) return FALSE; if (!m_maximumBitRate.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_LogicalChannelRateRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sequenceNumber.Encode(strm); m_logicalChannelNumber.Encode(strm); m_maximumBitRate.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_LogicalChannelRateRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_LogicalChannelRateRequest::Class()), PInvalidCast); #endif return new H245_LogicalChannelRateRequest(*this); } // // LogicalChannelRateAcknowledge // H245_LogicalChannelRateAcknowledge::H245_LogicalChannelRateAcknowledge(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_LogicalChannelRateAcknowledge::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "sequenceNumber = " << setprecision(indent) << m_sequenceNumber << '\n'; strm << setw(indent+23) << "logicalChannelNumber = " << setprecision(indent) << m_logicalChannelNumber << '\n'; strm << setw(indent+17) << "maximumBitRate = " << setprecision(indent) << m_maximumBitRate << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_LogicalChannelRateAcknowledge::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_LogicalChannelRateAcknowledge), PInvalidCast); #endif const H245_LogicalChannelRateAcknowledge & other = (const H245_LogicalChannelRateAcknowledge &)obj; Comparison result; if ((result = m_sequenceNumber.Compare(other.m_sequenceNumber)) != EqualTo) return result; if ((result = m_logicalChannelNumber.Compare(other.m_logicalChannelNumber)) != EqualTo) return result; if ((result = m_maximumBitRate.Compare(other.m_maximumBitRate)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_LogicalChannelRateAcknowledge::GetDataLength() const { PINDEX length = 0; length += m_sequenceNumber.GetObjectLength(); length += m_logicalChannelNumber.GetObjectLength(); length += m_maximumBitRate.GetObjectLength(); return length; } PBoolean H245_LogicalChannelRateAcknowledge::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sequenceNumber.Decode(strm)) return FALSE; if (!m_logicalChannelNumber.Decode(strm)) return FALSE; if (!m_maximumBitRate.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_LogicalChannelRateAcknowledge::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sequenceNumber.Encode(strm); m_logicalChannelNumber.Encode(strm); m_maximumBitRate.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_LogicalChannelRateAcknowledge::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_LogicalChannelRateAcknowledge::Class()), PInvalidCast); #endif return new H245_LogicalChannelRateAcknowledge(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_LogicalChannelRateRejectReason[]={ {"undefinedReason",0} ,{"insufficientResources",1} }; #endif // // LogicalChannelRateRejectReason // H245_LogicalChannelRateRejectReason::H245_LogicalChannelRateRejectReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_LogicalChannelRateRejectReason,2 #endif ) { } PBoolean H245_LogicalChannelRateRejectReason::CreateObject() { choice = (tag <= e_insufficientResources) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_LogicalChannelRateRejectReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_LogicalChannelRateRejectReason::Class()), PInvalidCast); #endif return new H245_LogicalChannelRateRejectReason(*this); } // // LogicalChannelRateRelease // H245_LogicalChannelRateRelease::H245_LogicalChannelRateRelease(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_LogicalChannelRateRelease::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX H245_LogicalChannelRateRelease::GetDataLength() const { PINDEX length = 0; return length; } PBoolean H245_LogicalChannelRateRelease::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_LogicalChannelRateRelease::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * H245_LogicalChannelRateRelease::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_LogicalChannelRateRelease::Class()), PInvalidCast); #endif return new H245_LogicalChannelRateRelease(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_SendTerminalCapabilitySet[]={ {"specificRequest",0} ,{"genericRequest",1} }; #endif // // SendTerminalCapabilitySet // H245_SendTerminalCapabilitySet::H245_SendTerminalCapabilitySet(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_SendTerminalCapabilitySet,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_SendTerminalCapabilitySet::operator H245_SendTerminalCapabilitySet_specificRequest &() const #else H245_SendTerminalCapabilitySet::operator H245_SendTerminalCapabilitySet_specificRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_SendTerminalCapabilitySet_specificRequest), PInvalidCast); #endif return *(H245_SendTerminalCapabilitySet_specificRequest *)choice; } H245_SendTerminalCapabilitySet::operator const H245_SendTerminalCapabilitySet_specificRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_SendTerminalCapabilitySet_specificRequest), PInvalidCast); #endif return *(H245_SendTerminalCapabilitySet_specificRequest *)choice; } PBoolean H245_SendTerminalCapabilitySet::CreateObject() { switch (tag) { case e_specificRequest : choice = new H245_SendTerminalCapabilitySet_specificRequest(); return TRUE; case e_genericRequest : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_SendTerminalCapabilitySet::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_SendTerminalCapabilitySet::Class()), PInvalidCast); #endif return new H245_SendTerminalCapabilitySet(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_EncryptionCommand[]={ {"encryptionSE",0} ,{"encryptionIVRequest",1} ,{"encryptionAlgorithmID",2} }; #endif // // EncryptionCommand // H245_EncryptionCommand::H245_EncryptionCommand(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_EncryptionCommand,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_EncryptionCommand::operator H245_EncryptionCommand_encryptionAlgorithmID &() const #else H245_EncryptionCommand::operator H245_EncryptionCommand_encryptionAlgorithmID &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_EncryptionCommand_encryptionAlgorithmID), PInvalidCast); #endif return *(H245_EncryptionCommand_encryptionAlgorithmID *)choice; } H245_EncryptionCommand::operator const H245_EncryptionCommand_encryptionAlgorithmID &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_EncryptionCommand_encryptionAlgorithmID), PInvalidCast); #endif return *(H245_EncryptionCommand_encryptionAlgorithmID *)choice; } PBoolean H245_EncryptionCommand::CreateObject() { switch (tag) { case e_encryptionSE : choice = new PASN_OctetString(); return TRUE; case e_encryptionIVRequest : choice = new PASN_Null(); return TRUE; case e_encryptionAlgorithmID : choice = new H245_EncryptionCommand_encryptionAlgorithmID(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_EncryptionCommand::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_EncryptionCommand::Class()), PInvalidCast); #endif return new H245_EncryptionCommand(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_EndSessionCommand[]={ {"nonStandard",0} ,{"disconnect",1} ,{"gstnOptions",2} ,{"isdnOptions",3} ,{"genericInformation",4} }; #endif // // EndSessionCommand // H245_EndSessionCommand::H245_EndSessionCommand(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_EndSessionCommand,5 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_EndSessionCommand::operator H245_NonStandardParameter &() const #else H245_EndSessionCommand::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_EndSessionCommand::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_EndSessionCommand::operator H245_EndSessionCommand_gstnOptions &() const #else H245_EndSessionCommand::operator H245_EndSessionCommand_gstnOptions &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_EndSessionCommand_gstnOptions), PInvalidCast); #endif return *(H245_EndSessionCommand_gstnOptions *)choice; } H245_EndSessionCommand::operator const H245_EndSessionCommand_gstnOptions &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_EndSessionCommand_gstnOptions), PInvalidCast); #endif return *(H245_EndSessionCommand_gstnOptions *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_EndSessionCommand::operator H245_EndSessionCommand_isdnOptions &() const #else H245_EndSessionCommand::operator H245_EndSessionCommand_isdnOptions &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_EndSessionCommand_isdnOptions), PInvalidCast); #endif return *(H245_EndSessionCommand_isdnOptions *)choice; } H245_EndSessionCommand::operator const H245_EndSessionCommand_isdnOptions &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_EndSessionCommand_isdnOptions), PInvalidCast); #endif return *(H245_EndSessionCommand_isdnOptions *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_EndSessionCommand::operator H245_ArrayOf_GenericInformation &() const #else H245_EndSessionCommand::operator H245_ArrayOf_GenericInformation &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ArrayOf_GenericInformation), PInvalidCast); #endif return *(H245_ArrayOf_GenericInformation *)choice; } H245_EndSessionCommand::operator const H245_ArrayOf_GenericInformation &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ArrayOf_GenericInformation), PInvalidCast); #endif return *(H245_ArrayOf_GenericInformation *)choice; } PBoolean H245_EndSessionCommand::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_disconnect : choice = new PASN_Null(); return TRUE; case e_gstnOptions : choice = new H245_EndSessionCommand_gstnOptions(); return TRUE; case e_isdnOptions : choice = new H245_EndSessionCommand_isdnOptions(); return TRUE; case e_genericInformation : choice = new H245_ArrayOf_GenericInformation(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_EndSessionCommand::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_EndSessionCommand::Class()), PInvalidCast); #endif return new H245_EndSessionCommand(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_ConferenceCommand[]={ {"broadcastMyLogicalChannel",0} ,{"cancelBroadcastMyLogicalChannel",1} ,{"makeTerminalBroadcaster",2} ,{"cancelMakeTerminalBroadcaster",3} ,{"sendThisSource",4} ,{"cancelSendThisSource",5} ,{"dropConference",6} ,{"substituteConferenceIDCommand",7} }; #endif // // ConferenceCommand // H245_ConferenceCommand::H245_ConferenceCommand(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 7, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_ConferenceCommand,8 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceCommand::operator H245_LogicalChannelNumber &() const #else H245_ConferenceCommand::operator H245_LogicalChannelNumber &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelNumber), PInvalidCast); #endif return *(H245_LogicalChannelNumber *)choice; } H245_ConferenceCommand::operator const H245_LogicalChannelNumber &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelNumber), PInvalidCast); #endif return *(H245_LogicalChannelNumber *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceCommand::operator H245_TerminalLabel &() const #else H245_ConferenceCommand::operator H245_TerminalLabel &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_TerminalLabel), PInvalidCast); #endif return *(H245_TerminalLabel *)choice; } H245_ConferenceCommand::operator const H245_TerminalLabel &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_TerminalLabel), PInvalidCast); #endif return *(H245_TerminalLabel *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceCommand::operator H245_SubstituteConferenceIDCommand &() const #else H245_ConferenceCommand::operator H245_SubstituteConferenceIDCommand &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_SubstituteConferenceIDCommand), PInvalidCast); #endif return *(H245_SubstituteConferenceIDCommand *)choice; } H245_ConferenceCommand::operator const H245_SubstituteConferenceIDCommand &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_SubstituteConferenceIDCommand), PInvalidCast); #endif return *(H245_SubstituteConferenceIDCommand *)choice; } PBoolean H245_ConferenceCommand::CreateObject() { switch (tag) { case e_broadcastMyLogicalChannel : case e_cancelBroadcastMyLogicalChannel : choice = new H245_LogicalChannelNumber(); return TRUE; case e_makeTerminalBroadcaster : case e_sendThisSource : choice = new H245_TerminalLabel(); return TRUE; case e_cancelMakeTerminalBroadcaster : case e_cancelSendThisSource : case e_dropConference : choice = new PASN_Null(); return TRUE; case e_substituteConferenceIDCommand : choice = new H245_SubstituteConferenceIDCommand(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_ConferenceCommand::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ConferenceCommand::Class()), PInvalidCast); #endif return new H245_ConferenceCommand(*this); } // // SubstituteConferenceIDCommand // H245_SubstituteConferenceIDCommand::H245_SubstituteConferenceIDCommand(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_conferenceIdentifier.SetConstraints(PASN_Object::FixedConstraint, 16); } #ifndef PASN_NOPRINTON void H245_SubstituteConferenceIDCommand::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+23) << "conferenceIdentifier = " << setprecision(indent) << m_conferenceIdentifier << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_SubstituteConferenceIDCommand::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_SubstituteConferenceIDCommand), PInvalidCast); #endif const H245_SubstituteConferenceIDCommand & other = (const H245_SubstituteConferenceIDCommand &)obj; Comparison result; if ((result = m_conferenceIdentifier.Compare(other.m_conferenceIdentifier)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_SubstituteConferenceIDCommand::GetDataLength() const { PINDEX length = 0; length += m_conferenceIdentifier.GetObjectLength(); return length; } PBoolean H245_SubstituteConferenceIDCommand::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_conferenceIdentifier.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_SubstituteConferenceIDCommand::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_conferenceIdentifier.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_SubstituteConferenceIDCommand::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_SubstituteConferenceIDCommand::Class()), PInvalidCast); #endif return new H245_SubstituteConferenceIDCommand(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_EncryptionUpdateDirection[]={ {"masterToSlave",0} ,{"slaveToMaster",1} }; #endif // // EncryptionUpdateDirection // H245_EncryptionUpdateDirection::H245_EncryptionUpdateDirection(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_EncryptionUpdateDirection,2 #endif ) { } PBoolean H245_EncryptionUpdateDirection::CreateObject() { choice = (tag <= e_slaveToMaster) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_EncryptionUpdateDirection::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_EncryptionUpdateDirection::Class()), PInvalidCast); #endif return new H245_EncryptionUpdateDirection(*this); } // // KeyProtectionMethod // H245_KeyProtectionMethod::H245_KeyProtectionMethod(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_KeyProtectionMethod::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "secureChannel = " << setprecision(indent) << m_secureChannel << '\n'; strm << setw(indent+15) << "sharedSecret = " << setprecision(indent) << m_sharedSecret << '\n'; strm << setw(indent+19) << "certProtectedKey = " << setprecision(indent) << m_certProtectedKey << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_KeyProtectionMethod::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_KeyProtectionMethod), PInvalidCast); #endif const H245_KeyProtectionMethod & other = (const H245_KeyProtectionMethod &)obj; Comparison result; if ((result = m_secureChannel.Compare(other.m_secureChannel)) != EqualTo) return result; if ((result = m_sharedSecret.Compare(other.m_sharedSecret)) != EqualTo) return result; if ((result = m_certProtectedKey.Compare(other.m_certProtectedKey)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_KeyProtectionMethod::GetDataLength() const { PINDEX length = 0; length += m_secureChannel.GetObjectLength(); length += m_sharedSecret.GetObjectLength(); length += m_certProtectedKey.GetObjectLength(); return length; } PBoolean H245_KeyProtectionMethod::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_secureChannel.Decode(strm)) return FALSE; if (!m_sharedSecret.Decode(strm)) return FALSE; if (!m_certProtectedKey.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_KeyProtectionMethod::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_secureChannel.Encode(strm); m_sharedSecret.Encode(strm); m_certProtectedKey.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_KeyProtectionMethod::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_KeyProtectionMethod::Class()), PInvalidCast); #endif return new H245_KeyProtectionMethod(*this); } // // EncryptionUpdateRequest // H245_EncryptionUpdateRequest::H245_EncryptionUpdateRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 1) { m_synchFlag.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H245_EncryptionUpdateRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_keyProtectionMethod)) strm << setw(indent+22) << "keyProtectionMethod = " << setprecision(indent) << m_keyProtectionMethod << '\n'; if (HasOptionalField(e_synchFlag)) strm << setw(indent+12) << "synchFlag = " << setprecision(indent) << m_synchFlag << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_EncryptionUpdateRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_EncryptionUpdateRequest), PInvalidCast); #endif const H245_EncryptionUpdateRequest & other = (const H245_EncryptionUpdateRequest &)obj; Comparison result; if ((result = m_keyProtectionMethod.Compare(other.m_keyProtectionMethod)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_EncryptionUpdateRequest::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_keyProtectionMethod)) length += m_keyProtectionMethod.GetObjectLength(); return length; } PBoolean H245_EncryptionUpdateRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_keyProtectionMethod) && !m_keyProtectionMethod.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_synchFlag, m_synchFlag)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_EncryptionUpdateRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_keyProtectionMethod)) m_keyProtectionMethod.Encode(strm); KnownExtensionEncode(strm, e_synchFlag, m_synchFlag); UnknownExtensionsEncode(strm); } PObject * H245_EncryptionUpdateRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_EncryptionUpdateRequest::Class()), PInvalidCast); #endif return new H245_EncryptionUpdateRequest(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_PictureReference[]={ {"pictureNumber",0} ,{"longTermPictureIndex",1} }; #endif // // PictureReference // H245_PictureReference::H245_PictureReference(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_PictureReference,2 #endif ) { } PBoolean H245_PictureReference::CreateObject() { switch (tag) { case e_pictureNumber : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 1023); return TRUE; case e_longTermPictureIndex : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 255); return TRUE; } choice = NULL; return FALSE; } PObject * H245_PictureReference::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_PictureReference::Class()), PInvalidCast); #endif return new H245_PictureReference(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_H223MultiplexReconfiguration[]={ {"h223ModeChange",0} ,{"h223AnnexADoubleFlag",1} }; #endif // // H223MultiplexReconfiguration // H245_H223MultiplexReconfiguration::H245_H223MultiplexReconfiguration(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_H223MultiplexReconfiguration,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H223MultiplexReconfiguration::operator H245_H223MultiplexReconfiguration_h223ModeChange &() const #else H245_H223MultiplexReconfiguration::operator H245_H223MultiplexReconfiguration_h223ModeChange &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223MultiplexReconfiguration_h223ModeChange), PInvalidCast); #endif return *(H245_H223MultiplexReconfiguration_h223ModeChange *)choice; } H245_H223MultiplexReconfiguration::operator const H245_H223MultiplexReconfiguration_h223ModeChange &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223MultiplexReconfiguration_h223ModeChange), PInvalidCast); #endif return *(H245_H223MultiplexReconfiguration_h223ModeChange *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H223MultiplexReconfiguration::operator H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag &() const #else H245_H223MultiplexReconfiguration::operator H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag), PInvalidCast); #endif return *(H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag *)choice; } H245_H223MultiplexReconfiguration::operator const H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag), PInvalidCast); #endif return *(H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag *)choice; } PBoolean H245_H223MultiplexReconfiguration::CreateObject() { switch (tag) { case e_h223ModeChange : choice = new H245_H223MultiplexReconfiguration_h223ModeChange(); return TRUE; case e_h223AnnexADoubleFlag : choice = new H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_H223MultiplexReconfiguration::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223MultiplexReconfiguration::Class()), PInvalidCast); #endif return new H245_H223MultiplexReconfiguration(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_FunctionNotUnderstood[]={ {"request",0} ,{"response",1} ,{"command",2} }; #endif // // FunctionNotUnderstood // H245_FunctionNotUnderstood::H245_FunctionNotUnderstood(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_FunctionNotUnderstood,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_FunctionNotUnderstood::operator H245_RequestMessage &() const #else H245_FunctionNotUnderstood::operator H245_RequestMessage &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestMessage), PInvalidCast); #endif return *(H245_RequestMessage *)choice; } H245_FunctionNotUnderstood::operator const H245_RequestMessage &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RequestMessage), PInvalidCast); #endif return *(H245_RequestMessage *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_FunctionNotUnderstood::operator H245_ResponseMessage &() const #else H245_FunctionNotUnderstood::operator H245_ResponseMessage &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ResponseMessage), PInvalidCast); #endif return *(H245_ResponseMessage *)choice; } H245_FunctionNotUnderstood::operator const H245_ResponseMessage &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ResponseMessage), PInvalidCast); #endif return *(H245_ResponseMessage *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_FunctionNotUnderstood::operator H245_CommandMessage &() const #else H245_FunctionNotUnderstood::operator H245_CommandMessage &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_CommandMessage), PInvalidCast); #endif return *(H245_CommandMessage *)choice; } H245_FunctionNotUnderstood::operator const H245_CommandMessage &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_CommandMessage), PInvalidCast); #endif return *(H245_CommandMessage *)choice; } PBoolean H245_FunctionNotUnderstood::CreateObject() { switch (tag) { case e_request : choice = new H245_RequestMessage(); return TRUE; case e_response : choice = new H245_ResponseMessage(); return TRUE; case e_command : choice = new H245_CommandMessage(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_FunctionNotUnderstood::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_FunctionNotUnderstood::Class()), PInvalidCast); #endif return new H245_FunctionNotUnderstood(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_ConferenceIndication[]={ {"sbeNumber",0} ,{"terminalNumberAssign",1} ,{"terminalJoinedConference",2} ,{"terminalLeftConference",3} ,{"seenByAtLeastOneOther",4} ,{"cancelSeenByAtLeastOneOther",5} ,{"seenByAll",6} ,{"cancelSeenByAll",7} ,{"terminalYouAreSeeing",8} ,{"requestForFloor",9} ,{"withdrawChairToken",10} ,{"floorRequested",11} ,{"terminalYouAreSeeingInSubPictureNumber",12} ,{"videoIndicateCompose",13} }; #endif // // ConferenceIndication // H245_ConferenceIndication::H245_ConferenceIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 10, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_ConferenceIndication,14 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceIndication::operator H245_TerminalLabel &() const #else H245_ConferenceIndication::operator H245_TerminalLabel &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_TerminalLabel), PInvalidCast); #endif return *(H245_TerminalLabel *)choice; } H245_ConferenceIndication::operator const H245_TerminalLabel &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_TerminalLabel), PInvalidCast); #endif return *(H245_TerminalLabel *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceIndication::operator H245_TerminalYouAreSeeingInSubPictureNumber &() const #else H245_ConferenceIndication::operator H245_TerminalYouAreSeeingInSubPictureNumber &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_TerminalYouAreSeeingInSubPictureNumber), PInvalidCast); #endif return *(H245_TerminalYouAreSeeingInSubPictureNumber *)choice; } H245_ConferenceIndication::operator const H245_TerminalYouAreSeeingInSubPictureNumber &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_TerminalYouAreSeeingInSubPictureNumber), PInvalidCast); #endif return *(H245_TerminalYouAreSeeingInSubPictureNumber *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_ConferenceIndication::operator H245_VideoIndicateCompose &() const #else H245_ConferenceIndication::operator H245_VideoIndicateCompose &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VideoIndicateCompose), PInvalidCast); #endif return *(H245_VideoIndicateCompose *)choice; } H245_ConferenceIndication::operator const H245_VideoIndicateCompose &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VideoIndicateCompose), PInvalidCast); #endif return *(H245_VideoIndicateCompose *)choice; } PBoolean H245_ConferenceIndication::CreateObject() { switch (tag) { case e_sbeNumber : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 9); return TRUE; case e_terminalNumberAssign : case e_terminalJoinedConference : case e_terminalLeftConference : case e_terminalYouAreSeeing : case e_floorRequested : choice = new H245_TerminalLabel(); return TRUE; case e_seenByAtLeastOneOther : case e_cancelSeenByAtLeastOneOther : case e_seenByAll : case e_cancelSeenByAll : case e_requestForFloor : case e_withdrawChairToken : choice = new PASN_Null(); return TRUE; case e_terminalYouAreSeeingInSubPictureNumber : choice = new H245_TerminalYouAreSeeingInSubPictureNumber(); return TRUE; case e_videoIndicateCompose : choice = new H245_VideoIndicateCompose(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_ConferenceIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ConferenceIndication::Class()), PInvalidCast); #endif return new H245_ConferenceIndication(*this); } // // TerminalYouAreSeeingInSubPictureNumber // H245_TerminalYouAreSeeingInSubPictureNumber::H245_TerminalYouAreSeeingInSubPictureNumber(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_subPictureNumber.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H245_TerminalYouAreSeeingInSubPictureNumber::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "terminalNumber = " << setprecision(indent) << m_terminalNumber << '\n'; strm << setw(indent+19) << "subPictureNumber = " << setprecision(indent) << m_subPictureNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_TerminalYouAreSeeingInSubPictureNumber::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_TerminalYouAreSeeingInSubPictureNumber), PInvalidCast); #endif const H245_TerminalYouAreSeeingInSubPictureNumber & other = (const H245_TerminalYouAreSeeingInSubPictureNumber &)obj; Comparison result; if ((result = m_terminalNumber.Compare(other.m_terminalNumber)) != EqualTo) return result; if ((result = m_subPictureNumber.Compare(other.m_subPictureNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_TerminalYouAreSeeingInSubPictureNumber::GetDataLength() const { PINDEX length = 0; length += m_terminalNumber.GetObjectLength(); length += m_subPictureNumber.GetObjectLength(); return length; } PBoolean H245_TerminalYouAreSeeingInSubPictureNumber::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_terminalNumber.Decode(strm)) return FALSE; if (!m_subPictureNumber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_TerminalYouAreSeeingInSubPictureNumber::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_terminalNumber.Encode(strm); m_subPictureNumber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_TerminalYouAreSeeingInSubPictureNumber::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_TerminalYouAreSeeingInSubPictureNumber::Class()), PInvalidCast); #endif return new H245_TerminalYouAreSeeingInSubPictureNumber(*this); } // // VideoIndicateCompose // H245_VideoIndicateCompose::H245_VideoIndicateCompose(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_compositionNumber.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H245_VideoIndicateCompose::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+20) << "compositionNumber = " << setprecision(indent) << m_compositionNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_VideoIndicateCompose::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_VideoIndicateCompose), PInvalidCast); #endif const H245_VideoIndicateCompose & other = (const H245_VideoIndicateCompose &)obj; Comparison result; if ((result = m_compositionNumber.Compare(other.m_compositionNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_VideoIndicateCompose::GetDataLength() const { PINDEX length = 0; length += m_compositionNumber.GetObjectLength(); return length; } PBoolean H245_VideoIndicateCompose::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_compositionNumber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_VideoIndicateCompose::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_compositionNumber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_VideoIndicateCompose::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_VideoIndicateCompose::Class()), PInvalidCast); #endif return new H245_VideoIndicateCompose(*this); } // // H223SkewIndication // H245_H223SkewIndication::H245_H223SkewIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_skew.SetConstraints(PASN_Object::FixedConstraint, 0, 4095); } #ifndef PASN_NOPRINTON void H245_H223SkewIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "logicalChannelNumber1 = " << setprecision(indent) << m_logicalChannelNumber1 << '\n'; strm << setw(indent+24) << "logicalChannelNumber2 = " << setprecision(indent) << m_logicalChannelNumber2 << '\n'; strm << setw(indent+7) << "skew = " << setprecision(indent) << m_skew << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H223SkewIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H223SkewIndication), PInvalidCast); #endif const H245_H223SkewIndication & other = (const H245_H223SkewIndication &)obj; Comparison result; if ((result = m_logicalChannelNumber1.Compare(other.m_logicalChannelNumber1)) != EqualTo) return result; if ((result = m_logicalChannelNumber2.Compare(other.m_logicalChannelNumber2)) != EqualTo) return result; if ((result = m_skew.Compare(other.m_skew)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H223SkewIndication::GetDataLength() const { PINDEX length = 0; length += m_logicalChannelNumber1.GetObjectLength(); length += m_logicalChannelNumber2.GetObjectLength(); length += m_skew.GetObjectLength(); return length; } PBoolean H245_H223SkewIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_logicalChannelNumber1.Decode(strm)) return FALSE; if (!m_logicalChannelNumber2.Decode(strm)) return FALSE; if (!m_skew.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H223SkewIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_logicalChannelNumber1.Encode(strm); m_logicalChannelNumber2.Encode(strm); m_skew.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H223SkewIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223SkewIndication::Class()), PInvalidCast); #endif return new H245_H223SkewIndication(*this); } // // H2250MaximumSkewIndication // H245_H2250MaximumSkewIndication::H245_H2250MaximumSkewIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_maximumSkew.SetConstraints(PASN_Object::FixedConstraint, 0, 4095); } #ifndef PASN_NOPRINTON void H245_H2250MaximumSkewIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "logicalChannelNumber1 = " << setprecision(indent) << m_logicalChannelNumber1 << '\n'; strm << setw(indent+24) << "logicalChannelNumber2 = " << setprecision(indent) << m_logicalChannelNumber2 << '\n'; strm << setw(indent+14) << "maximumSkew = " << setprecision(indent) << m_maximumSkew << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H2250MaximumSkewIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H2250MaximumSkewIndication), PInvalidCast); #endif const H245_H2250MaximumSkewIndication & other = (const H245_H2250MaximumSkewIndication &)obj; Comparison result; if ((result = m_logicalChannelNumber1.Compare(other.m_logicalChannelNumber1)) != EqualTo) return result; if ((result = m_logicalChannelNumber2.Compare(other.m_logicalChannelNumber2)) != EqualTo) return result; if ((result = m_maximumSkew.Compare(other.m_maximumSkew)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H2250MaximumSkewIndication::GetDataLength() const { PINDEX length = 0; length += m_logicalChannelNumber1.GetObjectLength(); length += m_logicalChannelNumber2.GetObjectLength(); length += m_maximumSkew.GetObjectLength(); return length; } PBoolean H245_H2250MaximumSkewIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_logicalChannelNumber1.Decode(strm)) return FALSE; if (!m_logicalChannelNumber2.Decode(strm)) return FALSE; if (!m_maximumSkew.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H2250MaximumSkewIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_logicalChannelNumber1.Encode(strm); m_logicalChannelNumber2.Encode(strm); m_maximumSkew.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H2250MaximumSkewIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H2250MaximumSkewIndication::Class()), PInvalidCast); #endif return new H245_H2250MaximumSkewIndication(*this); } // // MCLocationIndication // H245_MCLocationIndication::H245_MCLocationIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MCLocationIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "signalAddress = " << setprecision(indent) << m_signalAddress << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MCLocationIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MCLocationIndication), PInvalidCast); #endif const H245_MCLocationIndication & other = (const H245_MCLocationIndication &)obj; Comparison result; if ((result = m_signalAddress.Compare(other.m_signalAddress)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MCLocationIndication::GetDataLength() const { PINDEX length = 0; length += m_signalAddress.GetObjectLength(); return length; } PBoolean H245_MCLocationIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_signalAddress.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MCLocationIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_signalAddress.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MCLocationIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MCLocationIndication::Class()), PInvalidCast); #endif return new H245_MCLocationIndication(*this); } // // VendorIdentification // H245_VendorIdentification::H245_VendorIdentification(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_productNumber.SetConstraints(PASN_Object::FixedConstraint, 1, 256); m_versionNumber.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_VendorIdentification::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "vendor = " << setprecision(indent) << m_vendor << '\n'; if (HasOptionalField(e_productNumber)) strm << setw(indent+16) << "productNumber = " << setprecision(indent) << m_productNumber << '\n'; if (HasOptionalField(e_versionNumber)) strm << setw(indent+16) << "versionNumber = " << setprecision(indent) << m_versionNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_VendorIdentification::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_VendorIdentification), PInvalidCast); #endif const H245_VendorIdentification & other = (const H245_VendorIdentification &)obj; Comparison result; if ((result = m_vendor.Compare(other.m_vendor)) != EqualTo) return result; if ((result = m_productNumber.Compare(other.m_productNumber)) != EqualTo) return result; if ((result = m_versionNumber.Compare(other.m_versionNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_VendorIdentification::GetDataLength() const { PINDEX length = 0; length += m_vendor.GetObjectLength(); if (HasOptionalField(e_productNumber)) length += m_productNumber.GetObjectLength(); if (HasOptionalField(e_versionNumber)) length += m_versionNumber.GetObjectLength(); return length; } PBoolean H245_VendorIdentification::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_vendor.Decode(strm)) return FALSE; if (HasOptionalField(e_productNumber) && !m_productNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_versionNumber) && !m_versionNumber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_VendorIdentification::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_vendor.Encode(strm); if (HasOptionalField(e_productNumber)) m_productNumber.Encode(strm); if (HasOptionalField(e_versionNumber)) m_versionNumber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_VendorIdentification::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_VendorIdentification::Class()), PInvalidCast); #endif return new H245_VendorIdentification(*this); } // // IV8 // H245_IV8::H245_IV8(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 8); } H245_IV8::H245_IV8(const char * v) { SetValue(v); } H245_IV8::H245_IV8(const PString & v) { SetValue(v); } H245_IV8::H245_IV8(const PBYTEArray & v) { SetValue(v); } H245_IV8 & H245_IV8::operator=(const char * v) { SetValue(v); return *this; } H245_IV8 & H245_IV8::operator=(const PString & v) { SetValue(v); return *this; } H245_IV8 & H245_IV8::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H245_IV8::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_IV8::Class()), PInvalidCast); #endif return new H245_IV8(*this); } // // IV16 // H245_IV16::H245_IV16(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 16); } H245_IV16::H245_IV16(const char * v) { SetValue(v); } H245_IV16::H245_IV16(const PString & v) { SetValue(v); } H245_IV16::H245_IV16(const PBYTEArray & v) { SetValue(v); } H245_IV16 & H245_IV16::operator=(const char * v) { SetValue(v); return *this; } H245_IV16 & H245_IV16::operator=(const PString & v) { SetValue(v); return *this; } H245_IV16 & H245_IV16::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H245_IV16::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_IV16::Class()), PInvalidCast); #endif return new H245_IV16(*this); } // // Params // H245_Params::H245_Params(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_Params::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_iv8)) strm << setw(indent+6) << "iv8 = " << setprecision(indent) << m_iv8 << '\n'; if (HasOptionalField(e_iv16)) strm << setw(indent+7) << "iv16 = " << setprecision(indent) << m_iv16 << '\n'; if (HasOptionalField(e_iv)) strm << setw(indent+5) << "iv = " << setprecision(indent) << m_iv << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_Params::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_Params), PInvalidCast); #endif const H245_Params & other = (const H245_Params &)obj; Comparison result; if ((result = m_iv8.Compare(other.m_iv8)) != EqualTo) return result; if ((result = m_iv16.Compare(other.m_iv16)) != EqualTo) return result; if ((result = m_iv.Compare(other.m_iv)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_Params::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_iv8)) length += m_iv8.GetObjectLength(); if (HasOptionalField(e_iv16)) length += m_iv16.GetObjectLength(); if (HasOptionalField(e_iv)) length += m_iv.GetObjectLength(); return length; } PBoolean H245_Params::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_iv8) && !m_iv8.Decode(strm)) return FALSE; if (HasOptionalField(e_iv16) && !m_iv16.Decode(strm)) return FALSE; if (HasOptionalField(e_iv) && !m_iv.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_Params::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_iv8)) m_iv8.Encode(strm); if (HasOptionalField(e_iv16)) m_iv16.Encode(strm); if (HasOptionalField(e_iv)) m_iv.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_Params::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_Params::Class()), PInvalidCast); #endif return new H245_Params(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_UserInputIndication[]={ {"nonStandard",0} ,{"alphanumeric",1} ,{"userInputSupportIndication",2} ,{"signal",3} ,{"signalUpdate",4} ,{"extendedAlphanumeric",5} ,{"encryptedAlphanumeric",6} ,{"genericInformation",7} }; #endif // // UserInputIndication // H245_UserInputIndication::H245_UserInputIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_UserInputIndication,8 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_UserInputIndication::operator H245_NonStandardParameter &() const #else H245_UserInputIndication::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_UserInputIndication::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_UserInputIndication::operator H245_UserInputIndication_userInputSupportIndication &() const #else H245_UserInputIndication::operator H245_UserInputIndication_userInputSupportIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UserInputIndication_userInputSupportIndication), PInvalidCast); #endif return *(H245_UserInputIndication_userInputSupportIndication *)choice; } H245_UserInputIndication::operator const H245_UserInputIndication_userInputSupportIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UserInputIndication_userInputSupportIndication), PInvalidCast); #endif return *(H245_UserInputIndication_userInputSupportIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_UserInputIndication::operator H245_UserInputIndication_signal &() const #else H245_UserInputIndication::operator H245_UserInputIndication_signal &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UserInputIndication_signal), PInvalidCast); #endif return *(H245_UserInputIndication_signal *)choice; } H245_UserInputIndication::operator const H245_UserInputIndication_signal &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UserInputIndication_signal), PInvalidCast); #endif return *(H245_UserInputIndication_signal *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_UserInputIndication::operator H245_UserInputIndication_signalUpdate &() const #else H245_UserInputIndication::operator H245_UserInputIndication_signalUpdate &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UserInputIndication_signalUpdate), PInvalidCast); #endif return *(H245_UserInputIndication_signalUpdate *)choice; } H245_UserInputIndication::operator const H245_UserInputIndication_signalUpdate &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UserInputIndication_signalUpdate), PInvalidCast); #endif return *(H245_UserInputIndication_signalUpdate *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_UserInputIndication::operator H245_UserInputIndication_extendedAlphanumeric &() const #else H245_UserInputIndication::operator H245_UserInputIndication_extendedAlphanumeric &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UserInputIndication_extendedAlphanumeric), PInvalidCast); #endif return *(H245_UserInputIndication_extendedAlphanumeric *)choice; } H245_UserInputIndication::operator const H245_UserInputIndication_extendedAlphanumeric &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UserInputIndication_extendedAlphanumeric), PInvalidCast); #endif return *(H245_UserInputIndication_extendedAlphanumeric *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_UserInputIndication::operator H245_UserInputIndication_encryptedAlphanumeric &() const #else H245_UserInputIndication::operator H245_UserInputIndication_encryptedAlphanumeric &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UserInputIndication_encryptedAlphanumeric), PInvalidCast); #endif return *(H245_UserInputIndication_encryptedAlphanumeric *)choice; } H245_UserInputIndication::operator const H245_UserInputIndication_encryptedAlphanumeric &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_UserInputIndication_encryptedAlphanumeric), PInvalidCast); #endif return *(H245_UserInputIndication_encryptedAlphanumeric *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_UserInputIndication::operator H245_ArrayOf_GenericInformation &() const #else H245_UserInputIndication::operator H245_ArrayOf_GenericInformation &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ArrayOf_GenericInformation), PInvalidCast); #endif return *(H245_ArrayOf_GenericInformation *)choice; } H245_UserInputIndication::operator const H245_ArrayOf_GenericInformation &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ArrayOf_GenericInformation), PInvalidCast); #endif return *(H245_ArrayOf_GenericInformation *)choice; } PBoolean H245_UserInputIndication::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_alphanumeric : choice = new PASN_GeneralString(); return TRUE; case e_userInputSupportIndication : choice = new H245_UserInputIndication_userInputSupportIndication(); return TRUE; case e_signal : choice = new H245_UserInputIndication_signal(); return TRUE; case e_signalUpdate : choice = new H245_UserInputIndication_signalUpdate(); return TRUE; case e_extendedAlphanumeric : choice = new H245_UserInputIndication_extendedAlphanumeric(); return TRUE; case e_encryptedAlphanumeric : choice = new H245_UserInputIndication_encryptedAlphanumeric(); return TRUE; case e_genericInformation : choice = new H245_ArrayOf_GenericInformation(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_UserInputIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_UserInputIndication::Class()), PInvalidCast); #endif return new H245_UserInputIndication(*this); } // // MobileMultilinkReconfigurationIndication // H245_MobileMultilinkReconfigurationIndication::H245_MobileMultilinkReconfigurationIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_sampleSize.SetConstraints(PASN_Object::FixedConstraint, 1, 255); m_samplesPerFrame.SetConstraints(PASN_Object::FixedConstraint, 1, 255); } #ifndef PASN_NOPRINTON void H245_MobileMultilinkReconfigurationIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "sampleSize = " << setprecision(indent) << m_sampleSize << '\n'; strm << setw(indent+18) << "samplesPerFrame = " << setprecision(indent) << m_samplesPerFrame << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MobileMultilinkReconfigurationIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MobileMultilinkReconfigurationIndication), PInvalidCast); #endif const H245_MobileMultilinkReconfigurationIndication & other = (const H245_MobileMultilinkReconfigurationIndication &)obj; Comparison result; if ((result = m_sampleSize.Compare(other.m_sampleSize)) != EqualTo) return result; if ((result = m_samplesPerFrame.Compare(other.m_samplesPerFrame)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MobileMultilinkReconfigurationIndication::GetDataLength() const { PINDEX length = 0; length += m_sampleSize.GetObjectLength(); length += m_samplesPerFrame.GetObjectLength(); return length; } PBoolean H245_MobileMultilinkReconfigurationIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sampleSize.Decode(strm)) return FALSE; if (!m_samplesPerFrame.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MobileMultilinkReconfigurationIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sampleSize.Encode(strm); m_samplesPerFrame.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MobileMultilinkReconfigurationIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MobileMultilinkReconfigurationIndication::Class()), PInvalidCast); #endif return new H245_MobileMultilinkReconfigurationIndication(*this); } // // ArrayOf_GenericParameter // H245_ArrayOf_GenericParameter::H245_ArrayOf_GenericParameter(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_GenericParameter::CreateObject() const { return new H245_GenericParameter; } H245_GenericParameter & H245_ArrayOf_GenericParameter::operator[](PINDEX i) const { return (H245_GenericParameter &)array[i]; } PObject * H245_ArrayOf_GenericParameter::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_GenericParameter::Class()), PInvalidCast); #endif return new H245_ArrayOf_GenericParameter(*this); } // // NonStandardIdentifier_h221NonStandard // H245_NonStandardIdentifier_h221NonStandard::H245_NonStandardIdentifier_h221NonStandard(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { m_t35CountryCode.SetConstraints(PASN_Object::FixedConstraint, 0, 255); m_t35Extension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); m_manufacturerCode.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H245_NonStandardIdentifier_h221NonStandard::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "t35CountryCode = " << setprecision(indent) << m_t35CountryCode << '\n'; strm << setw(indent+15) << "t35Extension = " << setprecision(indent) << m_t35Extension << '\n'; strm << setw(indent+19) << "manufacturerCode = " << setprecision(indent) << m_manufacturerCode << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_NonStandardIdentifier_h221NonStandard::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_NonStandardIdentifier_h221NonStandard), PInvalidCast); #endif const H245_NonStandardIdentifier_h221NonStandard & other = (const H245_NonStandardIdentifier_h221NonStandard &)obj; Comparison result; if ((result = m_t35CountryCode.Compare(other.m_t35CountryCode)) != EqualTo) return result; if ((result = m_t35Extension.Compare(other.m_t35Extension)) != EqualTo) return result; if ((result = m_manufacturerCode.Compare(other.m_manufacturerCode)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_NonStandardIdentifier_h221NonStandard::GetDataLength() const { PINDEX length = 0; length += m_t35CountryCode.GetObjectLength(); length += m_t35Extension.GetObjectLength(); length += m_manufacturerCode.GetObjectLength(); return length; } PBoolean H245_NonStandardIdentifier_h221NonStandard::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_t35CountryCode.Decode(strm)) return FALSE; if (!m_t35Extension.Decode(strm)) return FALSE; if (!m_manufacturerCode.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_NonStandardIdentifier_h221NonStandard::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_t35CountryCode.Encode(strm); m_t35Extension.Encode(strm); m_manufacturerCode.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_NonStandardIdentifier_h221NonStandard::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NonStandardIdentifier_h221NonStandard::Class()), PInvalidCast); #endif return new H245_NonStandardIdentifier_h221NonStandard(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MasterSlaveDeterminationAck_decision[]={ {"master",0} ,{"slave",1} }; #endif // // MasterSlaveDeterminationAck_decision // H245_MasterSlaveDeterminationAck_decision::H245_MasterSlaveDeterminationAck_decision(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MasterSlaveDeterminationAck_decision,2 #endif ) { } PBoolean H245_MasterSlaveDeterminationAck_decision::CreateObject() { choice = (tag <= e_slave) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_MasterSlaveDeterminationAck_decision::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MasterSlaveDeterminationAck_decision::Class()), PInvalidCast); #endif return new H245_MasterSlaveDeterminationAck_decision(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MasterSlaveDeterminationReject_cause[]={ {"identicalNumbers",0} }; #endif // // MasterSlaveDeterminationReject_cause // H245_MasterSlaveDeterminationReject_cause::H245_MasterSlaveDeterminationReject_cause(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MasterSlaveDeterminationReject_cause,1 #endif ) { } PBoolean H245_MasterSlaveDeterminationReject_cause::CreateObject() { choice = (tag <= e_identicalNumbers) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_MasterSlaveDeterminationReject_cause::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MasterSlaveDeterminationReject_cause::Class()), PInvalidCast); #endif return new H245_MasterSlaveDeterminationReject_cause(*this); } // // ArrayOf_CapabilityTableEntry // H245_ArrayOf_CapabilityTableEntry::H245_ArrayOf_CapabilityTableEntry(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_CapabilityTableEntry::CreateObject() const { return new H245_CapabilityTableEntry; } H245_CapabilityTableEntry & H245_ArrayOf_CapabilityTableEntry::operator[](PINDEX i) const { return (H245_CapabilityTableEntry &)array[i]; } PObject * H245_ArrayOf_CapabilityTableEntry::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_CapabilityTableEntry::Class()), PInvalidCast); #endif return new H245_ArrayOf_CapabilityTableEntry(*this); } // // ArrayOf_CapabilityDescriptor // H245_ArrayOf_CapabilityDescriptor::H245_ArrayOf_CapabilityDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_CapabilityDescriptor::CreateObject() const { return new H245_CapabilityDescriptor; } H245_CapabilityDescriptor & H245_ArrayOf_CapabilityDescriptor::operator[](PINDEX i) const { return (H245_CapabilityDescriptor &)array[i]; } PObject * H245_ArrayOf_CapabilityDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_CapabilityDescriptor::Class()), PInvalidCast); #endif return new H245_ArrayOf_CapabilityDescriptor(*this); } // // ArrayOf_GenericInformation // H245_ArrayOf_GenericInformation::H245_ArrayOf_GenericInformation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_GenericInformation::CreateObject() const { return new H245_GenericInformation; } H245_GenericInformation & H245_ArrayOf_GenericInformation::operator[](PINDEX i) const { return (H245_GenericInformation &)array[i]; } PObject * H245_ArrayOf_GenericInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_GenericInformation::Class()), PInvalidCast); #endif return new H245_ArrayOf_GenericInformation(*this); } // // ArrayOf_AlternativeCapabilitySet // H245_ArrayOf_AlternativeCapabilitySet::H245_ArrayOf_AlternativeCapabilitySet(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_AlternativeCapabilitySet::CreateObject() const { return new H245_AlternativeCapabilitySet; } H245_AlternativeCapabilitySet & H245_ArrayOf_AlternativeCapabilitySet::operator[](PINDEX i) const { return (H245_AlternativeCapabilitySet &)array[i]; } PObject * H245_ArrayOf_AlternativeCapabilitySet::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_AlternativeCapabilitySet::Class()), PInvalidCast); #endif return new H245_ArrayOf_AlternativeCapabilitySet(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_TerminalCapabilitySetReject_cause[]={ {"unspecified",0} ,{"undefinedTableEntryUsed",1} ,{"descriptorCapacityExceeded",2} ,{"tableEntryCapacityExceeded",3} }; #endif // // TerminalCapabilitySetReject_cause // H245_TerminalCapabilitySetReject_cause::H245_TerminalCapabilitySetReject_cause(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_TerminalCapabilitySetReject_cause,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_TerminalCapabilitySetReject_cause::operator H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded &() const #else H245_TerminalCapabilitySetReject_cause::operator H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded), PInvalidCast); #endif return *(H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded *)choice; } H245_TerminalCapabilitySetReject_cause::operator const H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded), PInvalidCast); #endif return *(H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded *)choice; } PBoolean H245_TerminalCapabilitySetReject_cause::CreateObject() { switch (tag) { case e_unspecified : case e_undefinedTableEntryUsed : case e_descriptorCapacityExceeded : choice = new PASN_Null(); return TRUE; case e_tableEntryCapacityExceeded : choice = new H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_TerminalCapabilitySetReject_cause::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_TerminalCapabilitySetReject_cause::Class()), PInvalidCast); #endif return new H245_TerminalCapabilitySetReject_cause(*this); } // // Capability_h233EncryptionReceiveCapability // H245_Capability_h233EncryptionReceiveCapability::H245_Capability_h233EncryptionReceiveCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_h233IVResponseTime.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H245_Capability_h233EncryptionReceiveCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "h233IVResponseTime = " << setprecision(indent) << m_h233IVResponseTime << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_Capability_h233EncryptionReceiveCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_Capability_h233EncryptionReceiveCapability), PInvalidCast); #endif const H245_Capability_h233EncryptionReceiveCapability & other = (const H245_Capability_h233EncryptionReceiveCapability &)obj; Comparison result; if ((result = m_h233IVResponseTime.Compare(other.m_h233IVResponseTime)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_Capability_h233EncryptionReceiveCapability::GetDataLength() const { PINDEX length = 0; length += m_h233IVResponseTime.GetObjectLength(); return length; } PBoolean H245_Capability_h233EncryptionReceiveCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_h233IVResponseTime.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_Capability_h233EncryptionReceiveCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_h233IVResponseTime.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_Capability_h233EncryptionReceiveCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_Capability_h233EncryptionReceiveCapability::Class()), PInvalidCast); #endif return new H245_Capability_h233EncryptionReceiveCapability(*this); } // // ArrayOf_VCCapability // H245_ArrayOf_VCCapability::H245_ArrayOf_VCCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_VCCapability::CreateObject() const { return new H245_VCCapability; } H245_VCCapability & H245_ArrayOf_VCCapability::operator[](PINDEX i) const { return (H245_VCCapability &)array[i]; } PObject * H245_ArrayOf_VCCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_VCCapability::Class()), PInvalidCast); #endif return new H245_ArrayOf_VCCapability(*this); } // // VCCapability_aal1 // H245_VCCapability_aal1::H245_VCCapability_aal1(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_VCCapability_aal1::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+20) << "nullClockRecovery = " << setprecision(indent) << m_nullClockRecovery << '\n'; strm << setw(indent+20) << "srtsClockRecovery = " << setprecision(indent) << m_srtsClockRecovery << '\n'; strm << setw(indent+24) << "adaptiveClockRecovery = " << setprecision(indent) << m_adaptiveClockRecovery << '\n'; strm << setw(indent+22) << "nullErrorCorrection = " << setprecision(indent) << m_nullErrorCorrection << '\n'; strm << setw(indent+18) << "longInterleaver = " << setprecision(indent) << m_longInterleaver << '\n'; strm << setw(indent+19) << "shortInterleaver = " << setprecision(indent) << m_shortInterleaver << '\n'; strm << setw(indent+22) << "errorCorrectionOnly = " << setprecision(indent) << m_errorCorrectionOnly << '\n'; strm << setw(indent+25) << "structuredDataTransfer = " << setprecision(indent) << m_structuredDataTransfer << '\n'; strm << setw(indent+23) << "partiallyFilledCells = " << setprecision(indent) << m_partiallyFilledCells << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_VCCapability_aal1::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_VCCapability_aal1), PInvalidCast); #endif const H245_VCCapability_aal1 & other = (const H245_VCCapability_aal1 &)obj; Comparison result; if ((result = m_nullClockRecovery.Compare(other.m_nullClockRecovery)) != EqualTo) return result; if ((result = m_srtsClockRecovery.Compare(other.m_srtsClockRecovery)) != EqualTo) return result; if ((result = m_adaptiveClockRecovery.Compare(other.m_adaptiveClockRecovery)) != EqualTo) return result; if ((result = m_nullErrorCorrection.Compare(other.m_nullErrorCorrection)) != EqualTo) return result; if ((result = m_longInterleaver.Compare(other.m_longInterleaver)) != EqualTo) return result; if ((result = m_shortInterleaver.Compare(other.m_shortInterleaver)) != EqualTo) return result; if ((result = m_errorCorrectionOnly.Compare(other.m_errorCorrectionOnly)) != EqualTo) return result; if ((result = m_structuredDataTransfer.Compare(other.m_structuredDataTransfer)) != EqualTo) return result; if ((result = m_partiallyFilledCells.Compare(other.m_partiallyFilledCells)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_VCCapability_aal1::GetDataLength() const { PINDEX length = 0; length += m_nullClockRecovery.GetObjectLength(); length += m_srtsClockRecovery.GetObjectLength(); length += m_adaptiveClockRecovery.GetObjectLength(); length += m_nullErrorCorrection.GetObjectLength(); length += m_longInterleaver.GetObjectLength(); length += m_shortInterleaver.GetObjectLength(); length += m_errorCorrectionOnly.GetObjectLength(); length += m_structuredDataTransfer.GetObjectLength(); length += m_partiallyFilledCells.GetObjectLength(); return length; } PBoolean H245_VCCapability_aal1::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nullClockRecovery.Decode(strm)) return FALSE; if (!m_srtsClockRecovery.Decode(strm)) return FALSE; if (!m_adaptiveClockRecovery.Decode(strm)) return FALSE; if (!m_nullErrorCorrection.Decode(strm)) return FALSE; if (!m_longInterleaver.Decode(strm)) return FALSE; if (!m_shortInterleaver.Decode(strm)) return FALSE; if (!m_errorCorrectionOnly.Decode(strm)) return FALSE; if (!m_structuredDataTransfer.Decode(strm)) return FALSE; if (!m_partiallyFilledCells.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_VCCapability_aal1::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nullClockRecovery.Encode(strm); m_srtsClockRecovery.Encode(strm); m_adaptiveClockRecovery.Encode(strm); m_nullErrorCorrection.Encode(strm); m_longInterleaver.Encode(strm); m_shortInterleaver.Encode(strm); m_errorCorrectionOnly.Encode(strm); m_structuredDataTransfer.Encode(strm); m_partiallyFilledCells.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_VCCapability_aal1::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_VCCapability_aal1::Class()), PInvalidCast); #endif return new H245_VCCapability_aal1(*this); } // // VCCapability_aal5 // H245_VCCapability_aal5::H245_VCCapability_aal5(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_forwardMaximumSDUSize.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); m_backwardMaximumSDUSize.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H245_VCCapability_aal5::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "forwardMaximumSDUSize = " << setprecision(indent) << m_forwardMaximumSDUSize << '\n'; strm << setw(indent+25) << "backwardMaximumSDUSize = " << setprecision(indent) << m_backwardMaximumSDUSize << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_VCCapability_aal5::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_VCCapability_aal5), PInvalidCast); #endif const H245_VCCapability_aal5 & other = (const H245_VCCapability_aal5 &)obj; Comparison result; if ((result = m_forwardMaximumSDUSize.Compare(other.m_forwardMaximumSDUSize)) != EqualTo) return result; if ((result = m_backwardMaximumSDUSize.Compare(other.m_backwardMaximumSDUSize)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_VCCapability_aal5::GetDataLength() const { PINDEX length = 0; length += m_forwardMaximumSDUSize.GetObjectLength(); length += m_backwardMaximumSDUSize.GetObjectLength(); return length; } PBoolean H245_VCCapability_aal5::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_forwardMaximumSDUSize.Decode(strm)) return FALSE; if (!m_backwardMaximumSDUSize.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_VCCapability_aal5::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_forwardMaximumSDUSize.Encode(strm); m_backwardMaximumSDUSize.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_VCCapability_aal5::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_VCCapability_aal5::Class()), PInvalidCast); #endif return new H245_VCCapability_aal5(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_H223Capability_h223MultiplexTableCapability[]={ {"basic",0} ,{"enhanced",1} }; #endif // // H223Capability_h223MultiplexTableCapability // H245_H223Capability_h223MultiplexTableCapability::H245_H223Capability_h223MultiplexTableCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_H223Capability_h223MultiplexTableCapability,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H223Capability_h223MultiplexTableCapability::operator H245_H223Capability_h223MultiplexTableCapability_enhanced &() const #else H245_H223Capability_h223MultiplexTableCapability::operator H245_H223Capability_h223MultiplexTableCapability_enhanced &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223Capability_h223MultiplexTableCapability_enhanced), PInvalidCast); #endif return *(H245_H223Capability_h223MultiplexTableCapability_enhanced *)choice; } H245_H223Capability_h223MultiplexTableCapability::operator const H245_H223Capability_h223MultiplexTableCapability_enhanced &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223Capability_h223MultiplexTableCapability_enhanced), PInvalidCast); #endif return *(H245_H223Capability_h223MultiplexTableCapability_enhanced *)choice; } PBoolean H245_H223Capability_h223MultiplexTableCapability::CreateObject() { switch (tag) { case e_basic : choice = new PASN_Null(); return TRUE; case e_enhanced : choice = new H245_H223Capability_h223MultiplexTableCapability_enhanced(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_H223Capability_h223MultiplexTableCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223Capability_h223MultiplexTableCapability::Class()), PInvalidCast); #endif return new H245_H223Capability_h223MultiplexTableCapability(*this); } // // H223Capability_mobileOperationTransmitCapability // H245_H223Capability_mobileOperationTransmitCapability::H245_H223Capability_mobileOperationTransmitCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_H223Capability_mobileOperationTransmitCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+23) << "modeChangeCapability = " << setprecision(indent) << m_modeChangeCapability << '\n'; strm << setw(indent+13) << "h223AnnexA = " << setprecision(indent) << m_h223AnnexA << '\n'; strm << setw(indent+23) << "h223AnnexADoubleFlag = " << setprecision(indent) << m_h223AnnexADoubleFlag << '\n'; strm << setw(indent+13) << "h223AnnexB = " << setprecision(indent) << m_h223AnnexB << '\n'; strm << setw(indent+23) << "h223AnnexBwithHeader = " << setprecision(indent) << m_h223AnnexBwithHeader << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H223Capability_mobileOperationTransmitCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H223Capability_mobileOperationTransmitCapability), PInvalidCast); #endif const H245_H223Capability_mobileOperationTransmitCapability & other = (const H245_H223Capability_mobileOperationTransmitCapability &)obj; Comparison result; if ((result = m_modeChangeCapability.Compare(other.m_modeChangeCapability)) != EqualTo) return result; if ((result = m_h223AnnexA.Compare(other.m_h223AnnexA)) != EqualTo) return result; if ((result = m_h223AnnexADoubleFlag.Compare(other.m_h223AnnexADoubleFlag)) != EqualTo) return result; if ((result = m_h223AnnexB.Compare(other.m_h223AnnexB)) != EqualTo) return result; if ((result = m_h223AnnexBwithHeader.Compare(other.m_h223AnnexBwithHeader)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H223Capability_mobileOperationTransmitCapability::GetDataLength() const { PINDEX length = 0; length += m_modeChangeCapability.GetObjectLength(); length += m_h223AnnexA.GetObjectLength(); length += m_h223AnnexADoubleFlag.GetObjectLength(); length += m_h223AnnexB.GetObjectLength(); length += m_h223AnnexBwithHeader.GetObjectLength(); return length; } PBoolean H245_H223Capability_mobileOperationTransmitCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_modeChangeCapability.Decode(strm)) return FALSE; if (!m_h223AnnexA.Decode(strm)) return FALSE; if (!m_h223AnnexADoubleFlag.Decode(strm)) return FALSE; if (!m_h223AnnexB.Decode(strm)) return FALSE; if (!m_h223AnnexBwithHeader.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H223Capability_mobileOperationTransmitCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_modeChangeCapability.Encode(strm); m_h223AnnexA.Encode(strm); m_h223AnnexADoubleFlag.Encode(strm); m_h223AnnexB.Encode(strm); m_h223AnnexBwithHeader.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H223Capability_mobileOperationTransmitCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223Capability_mobileOperationTransmitCapability::Class()), PInvalidCast); #endif return new H245_H223Capability_mobileOperationTransmitCapability(*this); } // // H223Capability_mobileMultilinkFrameCapability // H245_H223Capability_mobileMultilinkFrameCapability::H245_H223Capability_mobileMultilinkFrameCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_maximumSampleSize.SetConstraints(PASN_Object::FixedConstraint, 1, 255); m_maximumPayloadLength.SetConstraints(PASN_Object::FixedConstraint, 1, 65025); } #ifndef PASN_NOPRINTON void H245_H223Capability_mobileMultilinkFrameCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+20) << "maximumSampleSize = " << setprecision(indent) << m_maximumSampleSize << '\n'; strm << setw(indent+23) << "maximumPayloadLength = " << setprecision(indent) << m_maximumPayloadLength << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H223Capability_mobileMultilinkFrameCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H223Capability_mobileMultilinkFrameCapability), PInvalidCast); #endif const H245_H223Capability_mobileMultilinkFrameCapability & other = (const H245_H223Capability_mobileMultilinkFrameCapability &)obj; Comparison result; if ((result = m_maximumSampleSize.Compare(other.m_maximumSampleSize)) != EqualTo) return result; if ((result = m_maximumPayloadLength.Compare(other.m_maximumPayloadLength)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H223Capability_mobileMultilinkFrameCapability::GetDataLength() const { PINDEX length = 0; length += m_maximumSampleSize.GetObjectLength(); length += m_maximumPayloadLength.GetObjectLength(); return length; } PBoolean H245_H223Capability_mobileMultilinkFrameCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_maximumSampleSize.Decode(strm)) return FALSE; if (!m_maximumPayloadLength.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H223Capability_mobileMultilinkFrameCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_maximumSampleSize.Encode(strm); m_maximumPayloadLength.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H223Capability_mobileMultilinkFrameCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223Capability_mobileMultilinkFrameCapability::Class()), PInvalidCast); #endif return new H245_H223Capability_mobileMultilinkFrameCapability(*this); } // // H2250Capability_mcCapability // H245_H2250Capability_mcCapability::H245_H2250Capability_mcCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_H2250Capability_mcCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+26) << "centralizedConferenceMC = " << setprecision(indent) << m_centralizedConferenceMC << '\n'; strm << setw(indent+28) << "decentralizedConferenceMC = " << setprecision(indent) << m_decentralizedConferenceMC << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H2250Capability_mcCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H2250Capability_mcCapability), PInvalidCast); #endif const H245_H2250Capability_mcCapability & other = (const H245_H2250Capability_mcCapability &)obj; Comparison result; if ((result = m_centralizedConferenceMC.Compare(other.m_centralizedConferenceMC)) != EqualTo) return result; if ((result = m_decentralizedConferenceMC.Compare(other.m_decentralizedConferenceMC)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H2250Capability_mcCapability::GetDataLength() const { PINDEX length = 0; length += m_centralizedConferenceMC.GetObjectLength(); length += m_decentralizedConferenceMC.GetObjectLength(); return length; } PBoolean H245_H2250Capability_mcCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_centralizedConferenceMC.Decode(strm)) return FALSE; if (!m_decentralizedConferenceMC.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H2250Capability_mcCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_centralizedConferenceMC.Encode(strm); m_decentralizedConferenceMC.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H2250Capability_mcCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H2250Capability_mcCapability::Class()), PInvalidCast); #endif return new H245_H2250Capability_mcCapability(*this); } // // ArrayOf_RedundancyEncodingCapability // H245_ArrayOf_RedundancyEncodingCapability::H245_ArrayOf_RedundancyEncodingCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_RedundancyEncodingCapability::CreateObject() const { return new H245_RedundancyEncodingCapability; } H245_RedundancyEncodingCapability & H245_ArrayOf_RedundancyEncodingCapability::operator[](PINDEX i) const { return (H245_RedundancyEncodingCapability &)array[i]; } PObject * H245_ArrayOf_RedundancyEncodingCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_RedundancyEncodingCapability::Class()), PInvalidCast); #endif return new H245_ArrayOf_RedundancyEncodingCapability(*this); } // // ArrayOf_RTPPayloadType // H245_ArrayOf_RTPPayloadType::H245_ArrayOf_RTPPayloadType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_RTPPayloadType::CreateObject() const { return new H245_RTPPayloadType; } H245_RTPPayloadType & H245_ArrayOf_RTPPayloadType::operator[](PINDEX i) const { return (H245_RTPPayloadType &)array[i]; } PObject * H245_ArrayOf_RTPPayloadType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_RTPPayloadType::Class()), PInvalidCast); #endif return new H245_ArrayOf_RTPPayloadType(*this); } // // MediaTransportType_atm-AAL5-compressed // H245_MediaTransportType_atm_AAL5_compressed::H245_MediaTransportType_atm_AAL5_compressed(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MediaTransportType_atm_AAL5_compressed::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "variable_delta = " << setprecision(indent) << m_variable_delta << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MediaTransportType_atm_AAL5_compressed::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MediaTransportType_atm_AAL5_compressed), PInvalidCast); #endif const H245_MediaTransportType_atm_AAL5_compressed & other = (const H245_MediaTransportType_atm_AAL5_compressed &)obj; Comparison result; if ((result = m_variable_delta.Compare(other.m_variable_delta)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MediaTransportType_atm_AAL5_compressed::GetDataLength() const { PINDEX length = 0; length += m_variable_delta.GetObjectLength(); return length; } PBoolean H245_MediaTransportType_atm_AAL5_compressed::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_variable_delta.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MediaTransportType_atm_AAL5_compressed::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_variable_delta.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MediaTransportType_atm_AAL5_compressed::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MediaTransportType_atm_AAL5_compressed::Class()), PInvalidCast); #endif return new H245_MediaTransportType_atm_AAL5_compressed(*this); } // // ArrayOf_QOSCapability // H245_ArrayOf_QOSCapability::H245_ArrayOf_QOSCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_QOSCapability::CreateObject() const { return new H245_QOSCapability; } H245_QOSCapability & H245_ArrayOf_QOSCapability::operator[](PINDEX i) const { return (H245_QOSCapability &)array[i]; } PObject * H245_ArrayOf_QOSCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_QOSCapability::Class()), PInvalidCast); #endif return new H245_ArrayOf_QOSCapability(*this); } // // ArrayOf_MediaChannelCapability // H245_ArrayOf_MediaChannelCapability::H245_ArrayOf_MediaChannelCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_MediaChannelCapability::CreateObject() const { return new H245_MediaChannelCapability; } H245_MediaChannelCapability & H245_ArrayOf_MediaChannelCapability::operator[](PINDEX i) const { return (H245_MediaChannelCapability &)array[i]; } PObject * H245_ArrayOf_MediaChannelCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_MediaChannelCapability::Class()), PInvalidCast); #endif return new H245_ArrayOf_MediaChannelCapability(*this); } // // ArrayOf_CapabilityTableEntryNumber // H245_ArrayOf_CapabilityTableEntryNumber::H245_ArrayOf_CapabilityTableEntryNumber(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_CapabilityTableEntryNumber::CreateObject() const { return new H245_CapabilityTableEntryNumber; } H245_CapabilityTableEntryNumber & H245_ArrayOf_CapabilityTableEntryNumber::operator[](PINDEX i) const { return (H245_CapabilityTableEntryNumber &)array[i]; } PObject * H245_ArrayOf_CapabilityTableEntryNumber::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_CapabilityTableEntryNumber::Class()), PInvalidCast); #endif return new H245_ArrayOf_CapabilityTableEntryNumber(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_RTPH263VideoRedundancyEncoding_frameToThreadMapping[]={ {"roundrobin",0} ,{"custom",1} }; #endif // // RTPH263VideoRedundancyEncoding_frameToThreadMapping // H245_RTPH263VideoRedundancyEncoding_frameToThreadMapping::H245_RTPH263VideoRedundancyEncoding_frameToThreadMapping(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_RTPH263VideoRedundancyEncoding_frameToThreadMapping,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RTPH263VideoRedundancyEncoding_frameToThreadMapping::operator H245_ArrayOf_RTPH263VideoRedundancyFrameMapping &() const #else H245_RTPH263VideoRedundancyEncoding_frameToThreadMapping::operator H245_ArrayOf_RTPH263VideoRedundancyFrameMapping &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ArrayOf_RTPH263VideoRedundancyFrameMapping), PInvalidCast); #endif return *(H245_ArrayOf_RTPH263VideoRedundancyFrameMapping *)choice; } H245_RTPH263VideoRedundancyEncoding_frameToThreadMapping::operator const H245_ArrayOf_RTPH263VideoRedundancyFrameMapping &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ArrayOf_RTPH263VideoRedundancyFrameMapping), PInvalidCast); #endif return *(H245_ArrayOf_RTPH263VideoRedundancyFrameMapping *)choice; } PBoolean H245_RTPH263VideoRedundancyEncoding_frameToThreadMapping::CreateObject() { switch (tag) { case e_roundrobin : choice = new PASN_Null(); return TRUE; case e_custom : choice = new H245_ArrayOf_RTPH263VideoRedundancyFrameMapping(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 256); return TRUE; } choice = NULL; return FALSE; } PObject * H245_RTPH263VideoRedundancyEncoding_frameToThreadMapping::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RTPH263VideoRedundancyEncoding_frameToThreadMapping::Class()), PInvalidCast); #endif return new H245_RTPH263VideoRedundancyEncoding_frameToThreadMapping(*this); } // // RTPH263VideoRedundancyEncoding_containedThreads // H245_RTPH263VideoRedundancyEncoding_containedThreads::H245_RTPH263VideoRedundancyEncoding_containedThreads(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 256); } PASN_Object * H245_RTPH263VideoRedundancyEncoding_containedThreads::CreateObject() const { PASN_Integer * obj = new PASN_Integer; obj->SetConstraints(PASN_Object::FixedConstraint, 0, 15); return obj; } PASN_Integer & H245_RTPH263VideoRedundancyEncoding_containedThreads::operator[](PINDEX i) const { return (PASN_Integer &)array[i]; } PObject * H245_RTPH263VideoRedundancyEncoding_containedThreads::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RTPH263VideoRedundancyEncoding_containedThreads::Class()), PInvalidCast); #endif return new H245_RTPH263VideoRedundancyEncoding_containedThreads(*this); } // // RTPH263VideoRedundancyFrameMapping_frameSequence // H245_RTPH263VideoRedundancyFrameMapping_frameSequence::H245_RTPH263VideoRedundancyFrameMapping_frameSequence(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 256); } PASN_Object * H245_RTPH263VideoRedundancyFrameMapping_frameSequence::CreateObject() const { PASN_Integer * obj = new PASN_Integer; obj->SetConstraints(PASN_Object::FixedConstraint, 0, 255); return obj; } PASN_Integer & H245_RTPH263VideoRedundancyFrameMapping_frameSequence::operator[](PINDEX i) const { return (PASN_Integer &)array[i]; } PObject * H245_RTPH263VideoRedundancyFrameMapping_frameSequence::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RTPH263VideoRedundancyFrameMapping_frameSequence::Class()), PInvalidCast); #endif return new H245_RTPH263VideoRedundancyFrameMapping_frameSequence(*this); } // // ArrayOf_MediaDistributionCapability // H245_ArrayOf_MediaDistributionCapability::H245_ArrayOf_MediaDistributionCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_MediaDistributionCapability::CreateObject() const { return new H245_MediaDistributionCapability; } H245_MediaDistributionCapability & H245_ArrayOf_MediaDistributionCapability::operator[](PINDEX i) const { return (H245_MediaDistributionCapability &)array[i]; } PObject * H245_ArrayOf_MediaDistributionCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_MediaDistributionCapability::Class()), PInvalidCast); #endif return new H245_ArrayOf_MediaDistributionCapability(*this); } // // ArrayOf_DataApplicationCapability // H245_ArrayOf_DataApplicationCapability::H245_ArrayOf_DataApplicationCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_DataApplicationCapability::CreateObject() const { return new H245_DataApplicationCapability; } H245_DataApplicationCapability & H245_ArrayOf_DataApplicationCapability::operator[](PINDEX i) const { return (H245_DataApplicationCapability &)array[i]; } PObject * H245_ArrayOf_DataApplicationCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_DataApplicationCapability::Class()), PInvalidCast); #endif return new H245_ArrayOf_DataApplicationCapability(*this); } // // ArrayOf_VideoCapability // H245_ArrayOf_VideoCapability::H245_ArrayOf_VideoCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_VideoCapability::CreateObject() const { return new H245_VideoCapability; } H245_VideoCapability & H245_ArrayOf_VideoCapability::operator[](PINDEX i) const { return (H245_VideoCapability &)array[i]; } PObject * H245_ArrayOf_VideoCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_VideoCapability::Class()), PInvalidCast); #endif return new H245_ArrayOf_VideoCapability(*this); } // // ArrayOf_GenericCapability // H245_ArrayOf_GenericCapability::H245_ArrayOf_GenericCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_GenericCapability::CreateObject() const { return new H245_GenericCapability; } H245_GenericCapability & H245_ArrayOf_GenericCapability::operator[](PINDEX i) const { return (H245_GenericCapability &)array[i]; } PObject * H245_ArrayOf_GenericCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_GenericCapability::Class()), PInvalidCast); #endif return new H245_ArrayOf_GenericCapability(*this); } // // ArrayOf_EnhancementOptions // H245_ArrayOf_EnhancementOptions::H245_ArrayOf_EnhancementOptions(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_EnhancementOptions::CreateObject() const { return new H245_EnhancementOptions; } H245_EnhancementOptions & H245_ArrayOf_EnhancementOptions::operator[](PINDEX i) const { return (H245_EnhancementOptions &)array[i]; } PObject * H245_ArrayOf_EnhancementOptions::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_EnhancementOptions::Class()), PInvalidCast); #endif return new H245_ArrayOf_EnhancementOptions(*this); } // // ArrayOf_BEnhancementParameters // H245_ArrayOf_BEnhancementParameters::H245_ArrayOf_BEnhancementParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_BEnhancementParameters::CreateObject() const { return new H245_BEnhancementParameters; } H245_BEnhancementParameters & H245_ArrayOf_BEnhancementParameters::operator[](PINDEX i) const { return (H245_BEnhancementParameters &)array[i]; } PObject * H245_ArrayOf_BEnhancementParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_BEnhancementParameters::Class()), PInvalidCast); #endif return new H245_ArrayOf_BEnhancementParameters(*this); } // // ArrayOf_CustomPictureClockFrequency // H245_ArrayOf_CustomPictureClockFrequency::H245_ArrayOf_CustomPictureClockFrequency(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_CustomPictureClockFrequency::CreateObject() const { return new H245_CustomPictureClockFrequency; } H245_CustomPictureClockFrequency & H245_ArrayOf_CustomPictureClockFrequency::operator[](PINDEX i) const { return (H245_CustomPictureClockFrequency &)array[i]; } PObject * H245_ArrayOf_CustomPictureClockFrequency::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_CustomPictureClockFrequency::Class()), PInvalidCast); #endif return new H245_ArrayOf_CustomPictureClockFrequency(*this); } #endif // if ! H323_DISABLE_H245 // End of h245_1.cxx h323plus/src/h323neg.cxx0000644000175000017500000012547411636526526013624 0ustar markmark/* * h323neg.cxx * * H.323 PDU definitions * * Open H323 Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Contributor(s): ______________________________________. * * $Id: h323neg.cxx,v 1.13 2011/09/22 03:36:54 shorne Exp $ * */ #include #ifdef __GNUC__ #pragma implementation "h323neg.h" #endif #include "h323neg.h" #include "h323ep.h" #include #define new PNEW /////////////////////////////////////////////////////////////////////////////// H245Negotiator::H245Negotiator(H323EndPoint & end, H323Connection & conn) : endpoint(end), connection(conn) { replyTimer.SetNotifier(PCREATE_NOTIFIER(HandleTimeout)); } void H245Negotiator::HandleTimeout(PTimer &, INT) { } ///////////////////////////////////////////////////////////////////////////// H245NegMasterSlaveDetermination::H245NegMasterSlaveDetermination(H323EndPoint & end, H323Connection & conn) : H245Negotiator(end, conn) { retryCount = 1; state = e_Idle; status = e_Indeterminate; } PBoolean H245NegMasterSlaveDetermination::Start(PBoolean renegotiate) { PWaitAndSignal wait(mutex); if (state != e_Idle) { PTRACE(3, "H245\tMasterSlaveDetermination already in progress"); return TRUE; } if (!renegotiate && IsDetermined()) return TRUE; retryCount = 1; return Restart(); } PBoolean H245NegMasterSlaveDetermination::Restart() { PTRACE(3, "H245\tSending MasterSlaveDetermination"); // Begin the Master/Slave determination procedure determinationNumber = PRandom::Number()%16777216; replyTimer = endpoint.GetMasterSlaveDeterminationTimeout(); state = e_Outgoing; H323ControlPDU pdu; pdu.BuildMasterSlaveDetermination(endpoint.GetTerminalType(), determinationNumber); return connection.WriteControlPDU(pdu); } void H245NegMasterSlaveDetermination::Stop() { PWaitAndSignal wait(mutex); PTRACE(3, "H245\tStopping MasterSlaveDetermination: state=" << state); if (state == e_Idle) return; replyTimer.Stop(); state = e_Idle; } PBoolean H245NegMasterSlaveDetermination::HandleIncoming(const H245_MasterSlaveDetermination & pdu) { replyTimer.Stop(); PWaitAndSignal wait(mutex); PTRACE(3, "H245\tReceived MasterSlaveDetermination: state=" << state); if (state == e_Incoming) { replyTimer.Stop(); state = e_Idle; return connection.OnControlProtocolError(H323Connection::e_MasterSlaveDetermination, "Duplicate MasterSlaveDetermination"); } replyTimer = endpoint.GetMasterSlaveDeterminationTimeout(); // Determine the master and slave MasterSlaveStatus newStatus; if (pdu.m_terminalType < (unsigned)endpoint.GetTerminalType()) newStatus = e_DeterminedMaster; else if (pdu.m_terminalType > (unsigned)endpoint.GetTerminalType()) newStatus = e_DeterminedSlave; else { DWORD moduloDiff = (pdu.m_statusDeterminationNumber - determinationNumber)&0xffffff; if (moduloDiff == 0 || moduloDiff == 0x800000) newStatus = e_Indeterminate; else if (moduloDiff < 0x800000) newStatus = e_DeterminedMaster; else newStatus = e_DeterminedSlave; } H323ControlPDU reply; if (newStatus != e_Indeterminate) { PTRACE(2, "H245\tMasterSlaveDetermination: local is " << (newStatus == e_DeterminedMaster ? "master" : "slave")); reply.BuildMasterSlaveDeterminationAck(newStatus == e_DeterminedMaster); state = e_Incoming; status = newStatus; } else if (state == e_Outgoing) { retryCount++; if (retryCount < endpoint.GetMasterSlaveDeterminationRetries()) return Restart(); // Try again replyTimer.Stop(); state = e_Idle; return connection.OnControlProtocolError(H323Connection::e_MasterSlaveDetermination, "Retries exceeded"); } else { reply.BuildMasterSlaveDeterminationReject(H245_MasterSlaveDeterminationReject_cause::e_identicalNumbers); } return connection.WriteControlPDU(reply); } PBoolean H245NegMasterSlaveDetermination::HandleAck(const H245_MasterSlaveDeterminationAck & pdu) { replyTimer.Stop(); PWaitAndSignal wait(mutex); PTRACE(3, "H245\tReceived MasterSlaveDeterminationAck: state=" << state); if (state == e_Idle) return TRUE; replyTimer = endpoint.GetMasterSlaveDeterminationTimeout(); MasterSlaveStatus newStatus; if (pdu.m_decision.GetTag() == H245_MasterSlaveDeterminationAck_decision::e_master) newStatus = e_DeterminedMaster; else newStatus = e_DeterminedSlave; H323ControlPDU reply; if (state == e_Outgoing) { status = newStatus; PTRACE(2, "H245\tMasterSlaveDetermination: remote is " << (newStatus == e_DeterminedSlave ? "master" : "slave")); reply.BuildMasterSlaveDeterminationAck(newStatus == e_DeterminedMaster); if (!connection.WriteControlPDU(reply)) return FALSE; } replyTimer.Stop(); state = e_Idle; if (status != newStatus) return connection.OnControlProtocolError(H323Connection::e_MasterSlaveDetermination, "Master/Slave mismatch"); return TRUE; } PBoolean H245NegMasterSlaveDetermination::HandleReject(const H245_MasterSlaveDeterminationReject & pdu) { replyTimer.Stop(); PWaitAndSignal wait(mutex); PTRACE(3, "H245\tReceived MasterSlaveDeterminationReject: state=" << state); switch (state) { case e_Idle : return TRUE; case e_Outgoing : if (pdu.m_cause.GetTag() == H245_MasterSlaveDeterminationReject_cause::e_identicalNumbers) { retryCount++; if (retryCount < endpoint.GetMasterSlaveDeterminationRetries()) return Restart(); } default : break; } replyTimer.Stop(); state = e_Idle; return connection.OnControlProtocolError(H323Connection::e_MasterSlaveDetermination, "Retries exceeded"); } PBoolean H245NegMasterSlaveDetermination::HandleRelease(const H245_MasterSlaveDeterminationRelease & /*pdu*/) { replyTimer.Stop(); PWaitAndSignal wait(mutex); PTRACE(3, "H245\tReceived MasterSlaveDeterminationRelease: state=" << state); if (state == e_Idle) return TRUE; replyTimer.Stop(); state = e_Idle; return connection.OnControlProtocolError(H323Connection::e_MasterSlaveDetermination, "Aborted"); } void H245NegMasterSlaveDetermination::HandleTimeout(PTimer &, INT) { PWaitAndSignal wait(mutex); PTRACE(3, "H245\tTimeout on MasterSlaveDetermination: state=" << state); if (state == e_Outgoing) { H323ControlPDU reply; reply.Build(H245_IndicationMessage::e_masterSlaveDeterminationRelease); connection.WriteControlPDU(reply); } state = e_Idle; connection.OnControlProtocolError(H323Connection::e_MasterSlaveDetermination, "Timeout"); } #if PTRACING const char * const H245NegMasterSlaveDetermination::StateNames[] = { "Idle", "Outgoing", "Incoming" }; const char * const H245NegMasterSlaveDetermination::StatusNames[] = { "Indeterminate", "DeterminedMaster", "DeterminedSlave" }; #endif ///////////////////////////////////////////////////////////////////////////// H245NegTerminalCapabilitySet::H245NegTerminalCapabilitySet(H323EndPoint & end, H323Connection & conn) : H245Negotiator(end, conn) { inSequenceNumber = UINT_MAX; outSequenceNumber = 0; state = e_Idle; receivedCapabilites = FALSE; } PBoolean H245NegTerminalCapabilitySet::Start(PBoolean renegotiate, PBoolean empty) { replyTimer.Stop(); PWaitAndSignal wait(mutex); if (state == e_InProgress) { PTRACE(3, "H245\tTerminalCapabilitySet already in progress: outSeq=" << outSequenceNumber); return TRUE; } if (!renegotiate && state == e_Sent) { PTRACE(3, "H245\tTerminalCapabilitySet already sent."); return TRUE; } // Begin the capability exchange procedure outSequenceNumber = (outSequenceNumber+1)%256; replyTimer = endpoint.GetCapabilityExchangeTimeout(); state = e_InProgress; PTRACE(3, "H245\tSending TerminalCapabilitySet: outSeq=" << outSequenceNumber); H323ControlPDU pdu; connection.OnSendCapabilitySet(pdu.BuildTerminalCapabilitySet(connection, outSequenceNumber, empty)); return connection.WriteControlPDU(pdu); } void H245NegTerminalCapabilitySet::Stop() { PWaitAndSignal wait(mutex); PTRACE(3, "H245\tStopping TerminalCapabilitySet: state=" << state); if (state == e_Idle) return; replyTimer.Stop(); state = e_Idle; receivedCapabilites = FALSE; } PBoolean H245NegTerminalCapabilitySet::HandleIncoming(const H245_TerminalCapabilitySet & pdu) { replyTimer.Stop(); mutex.Wait(); PTRACE(3, "H245\tReceived TerminalCapabilitySet:" " state=" << state << " pduSeq=" << pdu.m_sequenceNumber << " inSeq=" << inSequenceNumber); if (pdu.m_sequenceNumber == inSequenceNumber) { mutex.Signal(); PTRACE(3, "H245\tIgnoring TerminalCapabilitySet, already received sequence number"); return TRUE; // Already had this one } inSequenceNumber = pdu.m_sequenceNumber; mutex.Signal(); // give application a chance to inspect / modify received H.245 capabilities connection.OnReceivedCapabilitySet(pdu); #ifdef H323_H235 H235Capabilities remoteCapabilities(connection, pdu); #else H323Capabilities remoteCapabilities(connection, pdu); #endif const H245_MultiplexCapability * muxCap = NULL; if (pdu.HasOptionalField(H245_TerminalCapabilitySet::e_multiplexCapability)) muxCap = &pdu.m_multiplexCapability; H323ControlPDU reject; if (connection.OnReceivedCapabilitySet(remoteCapabilities, muxCap, reject.BuildTerminalCapabilitySetReject(inSequenceNumber, H245_TerminalCapabilitySetReject_cause::e_unspecified))) { receivedCapabilites = TRUE; H323ControlPDU ack; ack.BuildTerminalCapabilitySetAck(inSequenceNumber); return connection.WriteControlPDU(ack); } connection.WriteControlPDU(reject); connection.ClearCall(H323Connection::EndedByCapabilityExchange); return TRUE; } PBoolean H245NegTerminalCapabilitySet::HandleAck(const H245_TerminalCapabilitySetAck & pdu) { replyTimer.Stop(); PWaitAndSignal wait(mutex); PTRACE(3, "H245\tReceived TerminalCapabilitySetAck:" " state=" << state << " pduSeq=" << pdu.m_sequenceNumber << " outSeq=" << (unsigned)outSequenceNumber); if (state != e_InProgress) return TRUE; if (pdu.m_sequenceNumber != outSequenceNumber) return TRUE; replyTimer.Stop(); state = e_Sent; PTRACE(2, "H245\tTerminalCapabilitySet Sent."); return TRUE; } PBoolean H245NegTerminalCapabilitySet::HandleReject(const H245_TerminalCapabilitySetReject & pdu) { replyTimer.Stop(); PWaitAndSignal wait(mutex); PTRACE(3, "H245\tReceived TerminalCapabilitySetReject:" " state=" << state << " pduSeq=" << pdu.m_sequenceNumber << " outSeq=" << (unsigned)outSequenceNumber); if (state != e_InProgress) return TRUE; if (pdu.m_sequenceNumber != outSequenceNumber) return TRUE; state = e_Idle; replyTimer.Stop(); return connection.OnControlProtocolError(H323Connection::e_CapabilityExchange, "Rejected"); } PBoolean H245NegTerminalCapabilitySet::HandleRelease(const H245_TerminalCapabilitySetRelease & /*pdu*/) { replyTimer.Stop(); PWaitAndSignal wait(mutex); PTRACE(3, "H245\tReceived TerminalCapabilityRelease: state=" << state); receivedCapabilites = FALSE; return connection.OnControlProtocolError(H323Connection::e_CapabilityExchange, "Aborted"); } void H245NegTerminalCapabilitySet::HandleTimeout(PTimer &, INT) { replyTimer.Stop(); PWaitAndSignal wait(mutex); PTRACE(3, "H245\tTimeout on TerminalCapabilitySet: state=" << state); H323ControlPDU reply; reply.Build(H245_IndicationMessage::e_terminalCapabilitySetRelease); connection.WriteControlPDU(reply); connection.OnControlProtocolError(H323Connection::e_CapabilityExchange, "Timeout"); } #if PTRACING const char * const H245NegTerminalCapabilitySet::StateNames[] = { "Idle", "InProgress", "Sent" }; #endif ///////////////////////////////////////////////////////////////////////////// H245NegLogicalChannel::H245NegLogicalChannel(H323EndPoint & end, H323Connection & conn, const H323ChannelNumber & chanNum) : H245Negotiator(end, conn), channelNumber(chanNum) { channel = NULL; state = e_Released; } H245NegLogicalChannel::H245NegLogicalChannel(H323EndPoint & end, H323Connection & conn, H323Channel & chan) : H245Negotiator(end, conn), channelNumber(chan.GetNumber()) { channel = &chan; state = e_Established; } H245NegLogicalChannel::~H245NegLogicalChannel() { replyTimer.Stop(); PThread::Yield(); // Do this to avoid possible race condition with timer mutex.Wait(); delete channel; mutex.Signal(); } PBoolean H245NegLogicalChannel::Open(const H323Capability & capability, unsigned sessionID, unsigned replacementFor, unsigned roleLabel ) { PWaitAndSignal wait(mutex); return OpenWhileLocked(capability, sessionID, replacementFor,roleLabel); } PBoolean H245NegLogicalChannel::OpenWhileLocked(const H323Capability & capability, unsigned sessionID, unsigned replacementFor, unsigned roleLabel ) { if (state != e_Released && state != e_AwaitingRelease) { PTRACE(3, "H245\tOpen of channel currently in negotiations: " << channelNumber); return FALSE; } PTRACE(3, "H245\tOpening channel: " << channelNumber); if (channel != NULL) { channel->CleanUpOnTermination(); delete channel; channel = NULL; } state = e_AwaitingEstablishment; H323ControlPDU pdu; H245_OpenLogicalChannel & open = pdu.BuildOpenLogicalChannel(channelNumber); if (!capability.OnSendingPDU(open.m_forwardLogicalChannelParameters.m_dataType)) { PTRACE(3, "H245\tOpening channel: " << channelNumber << ", capability.OnSendingPDU() failed"); return FALSE; } channel = capability.CreateChannel(connection, H323Channel::IsTransmitter, sessionID, NULL); if (channel == NULL) { PTRACE(3, "H245\tOpening channel: " << channelNumber << ", capability.CreateChannel() failed"); return FALSE; } channel->SetNumber(channelNumber); if (!channel->OnSendingPDU(open)) { PTRACE(3, "H245\tOpening channel: " << channelNumber << ", channel->OnSendingPDU() failed"); return FALSE; } if (replacementFor > 0) { if (open.HasOptionalField(H245_OpenLogicalChannel::e_reverseLogicalChannelParameters)) { open.m_reverseLogicalChannelParameters.IncludeOptionalField(H245_OpenLogicalChannel_reverseLogicalChannelParameters::e_replacementFor); open.m_reverseLogicalChannelParameters.m_replacementFor = replacementFor; } else { open.m_forwardLogicalChannelParameters.IncludeOptionalField(H245_OpenLogicalChannel_forwardLogicalChannelParameters::e_replacementFor); open.m_forwardLogicalChannelParameters.m_replacementFor = replacementFor; } } /* #ifdef H323_H239 if (sessionID == OpalMediaFormat::DefaultExtVideoSessionID) { // extended Video Session open.IncludeOptionalField(H245_OpenLogicalChannel::e_genericInformation); H245_ArrayOf_GenericInformation & cape = open.m_genericInformation; H245_GenericInformation gcap; gcap.m_messageIdentifier = *(new H245_CapabilityIdentifier(H245_CapabilityIdentifier::e_standard)); PASN_ObjectId &object_id = gcap.m_messageIdentifier; object_id = OpalPluginCodec_Identifer_H239_Video; // Indicates H239 (Extended Video) gcap.IncludeOptionalField(H245_GenericMessage::e_messageContent); H245_ArrayOf_GenericParameter & params = gcap.m_messageContent; params.SetSize(1); H245_GenericParameter & content = params[0]; H245_ParameterIdentifier & paramid = content.m_parameterIdentifier; paramid.SetTag(H245_ParameterIdentifier::e_standard); PASN_Integer & pid = paramid; pid.SetValue(1); H245_ParameterValue & paramval = content.m_parameterValue; paramval.SetTag(H245_ParameterValue::e_booleanArray); PASN_Integer & val = paramval; val.SetValue(roleLabel); PINDEX sz = cape.GetSize(); cape.SetSize(sz+1); cape[sz] = gcap; } #endif */ if (!channel->Open()) return FALSE; if (!channel->SetInitialBandwidth()) { PTRACE(3, "H245\tOpening channel: " << channelNumber << ", Insufficient bandwidth"); return FALSE; } replyTimer = endpoint.GetLogicalChannelTimeout(); return connection.WriteControlPDU(pdu); } PBoolean H245NegLogicalChannel::Close() { PWaitAndSignal wait(mutex); return CloseWhileLocked(); } PBoolean H245NegLogicalChannel::CloseWhileLocked() { PTRACE(3, "H245\tClosing channel: " << channelNumber << ", state=" << state); if (state != e_AwaitingEstablishment && state != e_Established) return TRUE; replyTimer = endpoint.GetLogicalChannelTimeout(); H323ControlPDU reply; if (channelNumber.IsFromRemote()) { reply.BuildRequestChannelClose(channelNumber, H245_RequestChannelClose_reason::e_normal); state = e_AwaitingResponse; } else { reply.BuildCloseLogicalChannel(channelNumber); state = e_AwaitingRelease; } return connection.WriteControlPDU(reply); } PBoolean H245NegLogicalChannel::HandleOpen(const H245_OpenLogicalChannel & pdu) { PTRACE(3, "H245\tReceived open channel: " << channelNumber << ", state=" << state); if (channel != NULL) { channel->CleanUpOnTermination(); delete channel; channel = NULL; } state = e_AwaitingEstablishment; H323ControlPDU reply; H245_OpenLogicalChannelAck & ack = reply.BuildOpenLogicalChannelAck(channelNumber); PBoolean ok = FALSE; unsigned cause = H245_OpenLogicalChannelReject_cause::e_unspecified; channel = connection.CreateLogicalChannel(pdu, FALSE, cause); if (channel != NULL) { if (!connection.OnOpenLogicalChannel(pdu, ack, cause, channel->GetSessionID())) { delete channel; channel = NULL; ok = false; } channel->SetNumber(channelNumber); channel->OnSendOpenAck(pdu, ack); if (channel->GetDirection() == H323Channel::IsBidirectional) { state = e_AwaitingConfirmation; replyTimer = endpoint.GetLogicalChannelTimeout(); // T103 ok = TRUE; } else { ok = channel->Start(); if (!ok) { // The correct protocol thing to do is reject the channel if we are // the master. However NetMeeting will not then reopen a channel, so // we act like we are a slave and close our end instead. if (connection.IsH245Master() && ((connection.GetRemoteApplication().Find("NetMeeting") == P_MAX_INDEX) || (connection.GetRemoteApplication().Find("Tandberg 27") == P_MAX_INDEX))) // T1000 cause = H245_OpenLogicalChannelReject_cause::e_masterSlaveConflict; else { connection.OnConflictingLogicalChannel(*channel); ok = channel->Start(); } } if (ok) state = e_Established; } } if (ok) mutex.Signal(); else { reply.BuildOpenLogicalChannelReject(channelNumber, cause); Release(); } if (!connection.WriteControlPDU(reply)) return false; if(ok) return connection.OnInitialFlowRestriction(*channel); return true; } PBoolean H245NegLogicalChannel::HandleOpenAck(const H245_OpenLogicalChannelAck & pdu) { replyTimer.Stop(); PWaitAndSignal wait(mutex); PTRACE(3, "H245\tReceived open channel ack: " << channelNumber << ", state=" << state); switch (state) { case e_Released : return connection.OnControlProtocolError(H323Connection::e_LogicalChannel, "Ack unknown channel"); case e_AwaitingEstablishment : state = e_Established; replyTimer.Stop(); if (!channel->OnReceivedAckPDU(pdu)) return CloseWhileLocked(); // If extended Video channel, then send Channel Active if (channel->GetCapability().GetMainType() == H323Capability::e_Video && channel->GetCapability().GetSubType() == H245_VideoCapability::e_extendedVideoCapability) { H323ControlPDU reply; reply.BuildLogicalChannelActive(channelNumber); if (!connection.WriteControlPDU(reply)) return FALSE; } if (channel->GetDirection() == H323Channel::IsBidirectional) { H323ControlPDU reply; reply.BuildOpenLogicalChannelConfirm(channelNumber); if (!connection.WriteControlPDU(reply)) return FALSE; } // Channel was already opened when OLC sent, if have error here it is // somthing other than an asymmetric codec conflict, so close it down. if (!channel->Start()) return CloseWhileLocked(); default : break; } return TRUE; } PBoolean H245NegLogicalChannel::HandleOpenConfirm(const H245_OpenLogicalChannelConfirm & /*pdu*/) { replyTimer.Stop(); PWaitAndSignal wait(mutex); PTRACE(3, "H245\tReceived open channel confirm: " << channelNumber << ", state=" << state); switch (state) { case e_Released : return connection.OnControlProtocolError(H323Connection::e_LogicalChannel, "Confirm unknown channel"); case e_AwaitingEstablishment : return connection.OnControlProtocolError(H323Connection::e_LogicalChannel, "Confirm established channel"); case e_AwaitingConfirmation : replyTimer.Stop(); state = e_Established; // Channel was already opened when OLC sent, if have error here it is // somthing other than an asymmetric codec conflict, so close it down. if (!channel->Start()) return CloseWhileLocked(); default : break; } return TRUE; } PBoolean H245NegLogicalChannel::HandleReject(const H245_OpenLogicalChannelReject & pdu) { replyTimer.Stop(); mutex.Wait(); PTRACE(3, "H245\tReceived open channel reject: " << channelNumber << ", state=" << state); switch (state) { case e_Released : mutex.Signal(); return connection.OnControlProtocolError(H323Connection::e_LogicalChannel, "Reject unknown channel"); case e_Established : Release(); return connection.OnControlProtocolError(H323Connection::e_LogicalChannel, "Reject established channel"); case e_AwaitingEstablishment : // Master rejected our attempt to open, so try something else. if (pdu.m_cause.GetTag() == H245_OpenLogicalChannelReject_cause::e_masterSlaveConflict) connection.OnConflictingLogicalChannel(*channel); // Do next case case e_AwaitingRelease : Release(); break; default : mutex.Signal(); break; } return TRUE; } PBoolean H245NegLogicalChannel::HandleClose(const H245_CloseLogicalChannel & /*pdu*/) { replyTimer.Stop(); mutex.Wait(); PTRACE(3, "H245\tReceived close channel: " << channelNumber << ", state=" << state); //if (pdu.m_source.GetTag() == H245_CloseLogicalChannel_source::e_user) H323ControlPDU reply; reply.BuildCloseLogicalChannelAck(channelNumber); Release(); return connection.WriteControlPDU(reply); } PBoolean H245NegLogicalChannel::HandleCloseAck(const H245_CloseLogicalChannelAck & /*pdu*/) { replyTimer.Stop(); mutex.Wait(); PTRACE(3, "H245\tReceived close channel ack: " << channelNumber << ", state=" << state); switch (state) { case e_Established : Release(); return connection.OnControlProtocolError(H323Connection::e_LogicalChannel, "Close ack open channel"); case e_AwaitingRelease : Release(); break; default : mutex.Signal(); break; } return TRUE; } PBoolean H245NegLogicalChannel::HandleRequestClose(const H245_RequestChannelClose & pdu) { replyTimer.Stop(); PWaitAndSignal wait(mutex); PTRACE(3, "H245\tReceived request close channel: " << channelNumber << ", state=" << state); if (state != e_Established) return TRUE; // Already closed H323ControlPDU reply; if (connection.OnClosingLogicalChannel(*channel)) { reply.BuildRequestChannelCloseAck(channelNumber); if (!connection.WriteControlPDU(reply)) return FALSE; // Do normal Close procedure replyTimer = endpoint.GetLogicalChannelTimeout(); reply.BuildCloseLogicalChannel(channelNumber); state = e_AwaitingRelease; if (pdu.m_reason.GetTag() == H245_RequestChannelClose_reason::e_reopen) { PTRACE(2, "H245\tReopening channel: " << channelNumber); connection.OpenLogicalChannel(channel->GetCapability(), channel->GetSessionID(), channel->GetDirection()); } } else reply.BuildRequestChannelCloseReject(channelNumber); return connection.WriteControlPDU(reply); } PBoolean H245NegLogicalChannel::HandleRequestCloseAck(const H245_RequestChannelCloseAck & /*pdu*/) { replyTimer.Stop(); mutex.Wait(); PTRACE(3, "H245\tReceived request close ack channel: " << channelNumber << ", state=" << state); if (state == e_AwaitingResponse) Release(); // Other end says close OK, so do so. else mutex.Signal(); return TRUE; } PBoolean H245NegLogicalChannel::HandleRequestCloseReject(const H245_RequestChannelCloseReject & /*pdu*/) { replyTimer.Stop(); PWaitAndSignal wait(mutex); PTRACE(3, "H245\tReceived request close reject channel: " << channelNumber << ", state=" << state); // Other end refused close, so go back to still having channel open if (state == e_AwaitingResponse) state = e_Established; return TRUE; } PBoolean H245NegLogicalChannel::HandleRequestCloseRelease(const H245_RequestChannelCloseRelease & /*pdu*/) { replyTimer.Stop(); PWaitAndSignal wait(mutex); PTRACE(3, "H245\tReceived request close release channel: " << channelNumber << ", state=" << state); // Other end refused close, so go back to still having channel open state = e_Established; return TRUE; } void H245NegLogicalChannel::HandleTimeout(PTimer &, INT) { mutex.Wait(); PTRACE(3, "H245\tTimeout on open channel: " << channelNumber << ", state=" << state); H323ControlPDU reply; switch (state) { case e_AwaitingEstablishment : reply.BuildCloseLogicalChannel(channelNumber); connection.WriteControlPDU(reply); break; case e_AwaitingResponse : reply.BuildRequestChannelCloseRelease(channelNumber); connection.WriteControlPDU(reply); break; case e_Released : mutex.Signal(); return; default : break; } Release(); connection.OnControlProtocolError(H323Connection::e_LogicalChannel, "Timeout"); } void H245NegLogicalChannel::Release() { state = e_Released; H323Channel * chan = channel; channel = NULL; mutex.Signal(); replyTimer.Stop(); if (chan != NULL) { chan->CleanUpOnTermination(); delete chan; } } H323Channel * H245NegLogicalChannel::GetChannel() { return channel; } #if PTRACING const char * const H245NegLogicalChannel::StateNames[] = { "Released", "AwaitingEstablishment", "Established", "AwaitingRelease", "AwatingConfirmation", "AwaitingResponse" }; #endif ///////////////////////////////////////////////////////////////////////////// H245NegLogicalChannels::H245NegLogicalChannels(H323EndPoint & end, H323Connection & conn) : H245Negotiator(end, conn), lastChannelNumber(100, FALSE) { } void H245NegLogicalChannels::Add(H323Channel & channel) { mutex.Wait(); channels.SetAt(channel.GetNumber(), new H245NegLogicalChannel(endpoint, connection, channel)); mutex.Signal(); } PBoolean H245NegLogicalChannels::Open(const H323Capability & capability, unsigned sessionID, unsigned replacementFor ) { H323ChannelNumber channelnumber; return Open(capability,sessionID,channelnumber,replacementFor); } PBoolean H245NegLogicalChannels::Open(const H323Capability & capability, unsigned sessionID, H323ChannelNumber & channelnumber, unsigned replacementFor, unsigned roleLabel ) { mutex.Wait(); lastChannelNumber++; H245NegLogicalChannel * negChan = new H245NegLogicalChannel(endpoint, connection, lastChannelNumber); channels.SetAt(lastChannelNumber, negChan); channelnumber = lastChannelNumber; mutex.Signal(); return negChan->Open(capability, sessionID, replacementFor,roleLabel); } PBoolean H245NegLogicalChannels::Close(unsigned channelNumber, PBoolean fromRemote) { H245NegLogicalChannel * chan = FindNegLogicalChannel(channelNumber, fromRemote); if (chan != NULL) return chan->Close(); return connection.OnControlProtocolError(H323Connection::e_LogicalChannel, "Close unknown"); } PBoolean H245NegLogicalChannels::HandleOpen(const H245_OpenLogicalChannel & pdu) { H323ChannelNumber chanNum(pdu.m_forwardLogicalChannelNumber, TRUE); H245NegLogicalChannel * chan; mutex.Wait(); if (channels.Contains(chanNum)) chan = &channels[chanNum]; else { chan = new H245NegLogicalChannel(endpoint, connection, chanNum); channels.SetAt(chanNum, chan); } chan->mutex.Wait(); mutex.Signal(); return chan->HandleOpen(pdu); } PBoolean H245NegLogicalChannels::HandleOpenAck(const H245_OpenLogicalChannelAck & pdu) { H245NegLogicalChannel * chan = FindNegLogicalChannel(pdu.m_forwardLogicalChannelNumber, FALSE); if (chan != NULL) return chan->HandleOpenAck(pdu); return connection.OnControlProtocolError(H323Connection::e_LogicalChannel, "Ack unknown"); } PBoolean H245NegLogicalChannels::HandleOpenConfirm(const H245_OpenLogicalChannelConfirm & pdu) { H245NegLogicalChannel * chan = FindNegLogicalChannel(pdu.m_forwardLogicalChannelNumber, TRUE); if (chan != NULL) return chan->HandleOpenConfirm(pdu); return connection.OnControlProtocolError(H323Connection::e_LogicalChannel, "Confirm unknown"); } PBoolean H245NegLogicalChannels::HandleReject(const H245_OpenLogicalChannelReject & pdu) { H245NegLogicalChannel * chan = FindNegLogicalChannel(pdu.m_forwardLogicalChannelNumber, FALSE); if (chan != NULL) return chan->HandleReject(pdu); return connection.OnControlProtocolError(H323Connection::e_LogicalChannel, "Reject unknown"); } PBoolean H245NegLogicalChannels::HandleClose(const H245_CloseLogicalChannel & pdu) { H245NegLogicalChannel * chan = FindNegLogicalChannel(pdu.m_forwardLogicalChannelNumber, TRUE); if (chan != NULL) return chan->HandleClose(pdu); return connection.OnControlProtocolError(H323Connection::e_LogicalChannel, "Close unknown"); } PBoolean H245NegLogicalChannels::HandleCloseAck(const H245_CloseLogicalChannelAck & pdu) { H245NegLogicalChannel * chan = FindNegLogicalChannel(pdu.m_forwardLogicalChannelNumber, FALSE); if (chan != NULL) return chan->HandleCloseAck(pdu); return connection.OnControlProtocolError(H323Connection::e_LogicalChannel, "Close Ack unknown"); } PBoolean H245NegLogicalChannels::HandleRequestClose(const H245_RequestChannelClose & pdu) { H245NegLogicalChannel * chan = FindNegLogicalChannel(pdu.m_forwardLogicalChannelNumber, FALSE); if (chan != NULL) return chan->HandleRequestClose(pdu); return connection.OnControlProtocolError(H323Connection::e_LogicalChannel, "Request Close unknown"); } PBoolean H245NegLogicalChannels::HandleRequestCloseAck(const H245_RequestChannelCloseAck & pdu) { H245NegLogicalChannel * chan = FindNegLogicalChannel(pdu.m_forwardLogicalChannelNumber, TRUE); if (chan != NULL) return chan->HandleRequestCloseAck(pdu); return connection.OnControlProtocolError(H323Connection::e_LogicalChannel, "Request Close Ack unknown"); } PBoolean H245NegLogicalChannels::HandleRequestCloseReject(const H245_RequestChannelCloseReject & pdu) { H245NegLogicalChannel * chan = FindNegLogicalChannel(pdu.m_forwardLogicalChannelNumber, TRUE); if (chan != NULL) return chan->HandleRequestCloseReject(pdu); return connection.OnControlProtocolError(H323Connection::e_LogicalChannel, "Request Close Reject unknown"); } PBoolean H245NegLogicalChannels::HandleRequestCloseRelease(const H245_RequestChannelCloseRelease & pdu) { H245NegLogicalChannel * chan = FindNegLogicalChannel(pdu.m_forwardLogicalChannelNumber, FALSE); if (chan != NULL) return chan->HandleRequestCloseRelease(pdu); return connection.OnControlProtocolError(H323Connection::e_LogicalChannel, "Request Close Release unknown"); } H323ChannelNumber H245NegLogicalChannels::GetNextChannelNumber() { PWaitAndSignal wait(mutex); lastChannelNumber++; return lastChannelNumber; } H323ChannelNumber H245NegLogicalChannels::GetLastChannelNumber() { PWaitAndSignal wait(mutex); return lastChannelNumber; } H323Channel * H245NegLogicalChannels::GetChannelAt(PINDEX i) { mutex.Wait(); H323Channel * chan = channels.GetDataAt(i).GetChannel(); mutex.Signal(); return chan; } H323Channel * H245NegLogicalChannels::FindChannel(unsigned channelNumber, PBoolean fromRemote) { PWaitAndSignal wait(mutex); H323ChannelNumber chanNum(channelNumber, fromRemote); if (channels.Contains(chanNum)) return channels[chanNum].GetChannel(); return NULL; } H245NegLogicalChannel & H245NegLogicalChannels::GetNegLogicalChannelAt(PINDEX i) { PWaitAndSignal wait(mutex); return channels.GetDataAt(i); } H245NegLogicalChannel * H245NegLogicalChannels::FindNegLogicalChannel(unsigned channelNumber, PBoolean fromRemote) { H323ChannelNumber chanNum(channelNumber, fromRemote); mutex.Wait(); H245NegLogicalChannel * channel = channels.GetAt(chanNum); mutex.Signal(); return channel; } H323Channel * H245NegLogicalChannels::FindChannelBySession(unsigned rtpSessionId, PBoolean fromRemote) { PWaitAndSignal wait(mutex); PINDEX i; H323Channel::Directions desiredDirection = fromRemote ? H323Channel::IsReceiver : H323Channel::IsTransmitter; for (i = 0; i < GetSize(); i++) { H323Channel * channel = channels.GetDataAt(i).GetChannel(); if (channel != NULL && channel->GetSessionID() == rtpSessionId && channel->GetDirection() == desiredDirection) return channel; } return NULL; } void H245NegLogicalChannels::RemoveAll() { PWaitAndSignal wait(mutex); for (PINDEX i = 0; i < channels.GetSize(); i++) { H245NegLogicalChannel & neg = channels.GetDataAt(i); neg.mutex.Wait(); H323Channel * channel = neg.GetChannel(); if (channel != NULL) channel->CleanUpOnTermination(); neg.mutex.Signal(); } channels.RemoveAll(); } ///////////////////////////////////////////////////////////////////////////// H245NegRequestMode::H245NegRequestMode(H323EndPoint & end, H323Connection & conn) : H245Negotiator(end, conn) { awaitingResponse = FALSE; inSequenceNumber = UINT_MAX; outSequenceNumber = 0; } PBoolean H245NegRequestMode::StartRequest(const PString & newModes) { PStringArray modes = newModes.Lines(); if (modes.IsEmpty()) return FALSE; H245_ArrayOf_ModeDescription descriptions; PINDEX modeCount = 0; const H323Capabilities & localCapabilities = connection.GetLocalCapabilities(); for (PINDEX i = 0; i < modes.GetSize(); i++) { H245_ModeDescription description; PINDEX count = 0; PStringArray caps = modes[i].Tokenise('\t'); for (PINDEX j = 0; j < caps.GetSize(); j++) { H323Capability * capability = localCapabilities.FindCapability(caps[j]); if (capability != NULL) { description.SetSize(count+1); capability->OnSendingPDU(description[count]); count++; } } if (count > 0) { descriptions.SetSize(modeCount+1); descriptions[modeCount] = description; modeCount++; } } if (modeCount == 0) return FALSE; return StartRequest(descriptions); } PBoolean H245NegRequestMode::StartRequest(const H245_ArrayOf_ModeDescription & newModes) { PTRACE(1, "H245\tStarted request mode: outSeq=" << outSequenceNumber << (awaitingResponse ? " awaitingResponse" : " idle")); if (awaitingResponse) return FALSE; // Initiate a mode request outSequenceNumber = (outSequenceNumber+1)%256; replyTimer = endpoint.GetRequestModeTimeout(); awaitingResponse = TRUE; H323ControlPDU pdu; H245_RequestMode & requestMode = pdu.BuildRequestMode(outSequenceNumber); requestMode.m_requestedModes = newModes; requestMode.m_requestedModes.SetConstraints(PASN_Object::FixedConstraint, 1, 256); return connection.WriteControlPDU(pdu); } PBoolean H245NegRequestMode::HandleRequest(const H245_RequestMode & pdu) { replyTimer.Stop(); inSequenceNumber = pdu.m_sequenceNumber; PTRACE(3, "H245\tReceived request mode: inSeq=" << inSequenceNumber); H323ControlPDU reply_ack; H245_RequestModeAck & ack = reply_ack.BuildRequestModeAck(inSequenceNumber, H245_RequestModeAck_response::e_willTransmitMostPreferredMode); H323ControlPDU reply_reject; H245_RequestModeReject & reject = reply_reject.BuildRequestModeReject(inSequenceNumber, H245_RequestModeReject_cause::e_modeUnavailable); PINDEX selectedMode = 0; if (!connection.OnRequestModeChange(pdu, ack, reject, selectedMode)) return connection.WriteControlPDU(reply_reject); if (selectedMode != 0) ack.m_response.SetTag(H245_RequestModeAck_response::e_willTransmitLessPreferredMode); if (!connection.WriteControlPDU(reply_ack)) return FALSE; connection.OnModeChanged(pdu.m_requestedModes[selectedMode]); return TRUE; } PBoolean H245NegRequestMode::HandleAck(const H245_RequestModeAck & pdu) { replyTimer.Stop(); PTRACE(3, "H245\tReceived ack on request mode: outSeq=" << outSequenceNumber << (awaitingResponse ? " awaitingResponse" : " idle")); if (awaitingResponse && pdu.m_sequenceNumber == outSequenceNumber) { awaitingResponse = FALSE; replyTimer.Stop(); connection.OnAcceptModeChange(pdu); } return TRUE; } PBoolean H245NegRequestMode::HandleReject(const H245_RequestModeReject & pdu) { replyTimer.Stop(); PTRACE(3, "H245\tReceived reject on request mode: outSeq=" << outSequenceNumber << (awaitingResponse ? " awaitingResponse" : " idle")); if (awaitingResponse && pdu.m_sequenceNumber == outSequenceNumber) { awaitingResponse = FALSE; replyTimer.Stop(); connection.OnRefusedModeChange(&pdu); } return TRUE; } PBoolean H245NegRequestMode::HandleRelease(const H245_RequestModeRelease & /*pdu*/) { replyTimer.Stop(); PTRACE(3, "H245\tReceived release on request mode: inSeq=" << inSequenceNumber); return TRUE; } void H245NegRequestMode::HandleTimeout(PTimer &, INT) { PTRACE(3, "H245\tTimeout on request mode: outSeq=" << outSequenceNumber << (awaitingResponse ? " awaitingResponse" : " idle")); if (awaitingResponse) { awaitingResponse = FALSE; H323ControlPDU pdu; pdu.Build(H245_IndicationMessage::e_requestModeRelease); connection.WriteControlPDU(pdu); connection.OnRefusedModeChange(NULL); } connection.OnControlProtocolError(H323Connection::e_ModeRequest, "Timeout"); } ///////////////////////////////////////////////////////////////////////////// H245NegRoundTripDelay::H245NegRoundTripDelay(H323EndPoint & end, H323Connection & conn) : H245Negotiator(end, conn) { awaitingResponse = FALSE; sequenceNumber = 0; // Temporary (ie quick) fix for strange Cisco behaviour. If keep trying to // do this it stops sending RTP audio data!! retryCount = 1; } PBoolean H245NegRoundTripDelay::StartRequest() { PWaitAndSignal wait(mutex); replyTimer = endpoint.GetRoundTripDelayTimeout(); sequenceNumber = (sequenceNumber + 1)%256; awaitingResponse = TRUE; PTRACE(3, "H245\tStarted round trip delay: seq=" << sequenceNumber << (awaitingResponse ? " awaitingResponse" : " idle")); H323ControlPDU pdu; pdu.BuildRoundTripDelayRequest(sequenceNumber); if (!connection.WriteControlPDU(pdu)) return FALSE; tripStartTime = PTimer::Tick(); return TRUE; } PBoolean H245NegRoundTripDelay::HandleRequest(const H245_RoundTripDelayRequest & pdu) { PWaitAndSignal wait(mutex); PTRACE(3, "H245\tStarted round trip delay: seq=" << sequenceNumber << (awaitingResponse ? " awaitingResponse" : " idle")); H323ControlPDU reply; reply.BuildRoundTripDelayResponse(pdu.m_sequenceNumber); return connection.WriteControlPDU(reply); } PBoolean H245NegRoundTripDelay::HandleResponse(const H245_RoundTripDelayResponse & pdu) { replyTimer.Stop(); PWaitAndSignal wait(mutex); PTimeInterval tripEndTime = PTimer::Tick(); PTRACE(3, "H245\tHandling round trip delay: seq=" << sequenceNumber << (awaitingResponse ? " awaitingResponse" : " idle")); if (awaitingResponse && pdu.m_sequenceNumber == sequenceNumber) { replyTimer.Stop(); awaitingResponse = FALSE; roundTripTime = tripEndTime - tripStartTime; retryCount = 3; } return TRUE; } void H245NegRoundTripDelay::HandleTimeout(PTimer &, INT) { PWaitAndSignal wait(mutex); PTRACE(3, "H245\tTimeout on round trip delay: seq=" << sequenceNumber << (awaitingResponse ? " awaitingResponse" : " idle")); if (awaitingResponse && retryCount > 0) retryCount--; awaitingResponse = FALSE; connection.OnControlProtocolError(H323Connection::e_RoundTripDelay, "Timeout"); } ///////////////////////////////////////////////////////////////////////////// h323plus/src/rtp.cxx0000644000175000017500000014475311647275674013270 0ustar markmark/* * rtp.cxx * * RTP protocol handler * * H323plus Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Contributor(s): ______________________________________. * * $Id: rtp.cxx,v 1.31 2011/10/18 13:14:36 shorne Exp $ * */ #include #ifdef __GNUC__ #pragma implementation "rtp.h" #endif #if defined(_WIN32) && (_MSC_VER > 1300) #pragma warning(disable:4244) // warning about possible loss of data #endif #include "openh323buildopts.h" #include "rtp.h" #include "h323con.h" #ifdef H323_AUDIO_CODECS #include "jitter.h" #endif #include #ifdef P_STUN #include #endif #if defined(H323_RTP_AGGREGATE) || defined(H323_SIGNAL_AGGREGATE) #include #endif #define new PNEW const unsigned SecondsFrom1900to1970 = (70*365+17)*24*60*60U; #define UDP_BUFFER_SIZE 32768 #define MIN_HEADER_SIZE 12 ///////////////////////////////////////////////////////////////////////////// RTP_DataFrame::RTP_DataFrame(PINDEX sz, PBoolean dynamicAllocation) : PBYTEArray(MIN_HEADER_SIZE+sz) { payloadSize = sz; allocatedDynamically = dynamicAllocation; theArray[0] = '\x80'; } void RTP_DataFrame::SetExtension(PBoolean ext) { if (ext) theArray[0] |= 0x10; else theArray[0] &= 0xef; } void RTP_DataFrame::SetMarker(PBoolean m) { if (m) theArray[1] |= 0x80; else theArray[1] &= 0x7f; } void RTP_DataFrame::SetPayloadType(PayloadTypes t) { PAssert(t <= 0x7f, PInvalidParameter); theArray[1] &= 0x80; theArray[1] |= t; } DWORD RTP_DataFrame::GetContribSource(PINDEX idx) const { PAssert(idx < GetContribSrcCount(), PInvalidParameter); return ((PUInt32b *)&theArray[MIN_HEADER_SIZE])[idx]; } void RTP_DataFrame::SetContribSource(PINDEX idx, DWORD src) { PAssert(idx <= 15, PInvalidParameter); if (idx >= GetContribSrcCount()) { BYTE * oldPayload = GetPayloadPtr(); theArray[0] &= 0xf0; theArray[0] |= idx+1; SetSize(GetHeaderSize()+payloadSize); memmove(GetPayloadPtr(), oldPayload, payloadSize); } ((PUInt32b *)&theArray[MIN_HEADER_SIZE])[idx] = src; } PINDEX RTP_DataFrame::GetHeaderSize() const { PINDEX sz = MIN_HEADER_SIZE + 4*GetContribSrcCount(); if (GetExtension()) sz += 4 + GetExtensionSize(); return sz; } int RTP_DataFrame::GetExtensionType() const { if (GetExtension()) return *(PUInt16b *)&theArray[MIN_HEADER_SIZE + 4*GetContribSrcCount()]; return -1; } void RTP_DataFrame::SetExtensionType(int type) { if (type < 0) SetExtension(FALSE); else { if (!GetExtension()) SetExtensionSize(0); *(PUInt16b *)&theArray[MIN_HEADER_SIZE + 4*GetContribSrcCount()] = (WORD)type; } } PINDEX RTP_DataFrame::GetExtensionSize() const { if (GetExtension()) return *(PUInt16b *)&theArray[MIN_HEADER_SIZE + 4*GetContribSrcCount() + 2]; return 0; } PBoolean RTP_DataFrame::SetExtensionSize(PINDEX sz) { if (!SetMinSize(MIN_HEADER_SIZE + 4*GetContribSrcCount() + 4+4*sz + payloadSize)) return FALSE; SetExtension(TRUE); *(PUInt16b *)&theArray[MIN_HEADER_SIZE + 4*GetContribSrcCount() + 2] = (WORD)sz; return TRUE; } BYTE * RTP_DataFrame::GetExtensionPtr() const { if (GetExtension()) return (BYTE *)&theArray[MIN_HEADER_SIZE + 4*GetContribSrcCount() + 4]; return NULL; } PBoolean RTP_DataFrame::SetPayloadSize(PINDEX sz) { payloadSize = sz; return SetMinSize(GetHeaderSize()+payloadSize); } #if PTRACING static const char * const PayloadTypesNames[RTP_DataFrame::LastKnownPayloadType] = { "PCMU", "FS1016", "G721", "GSM", "G7231", "DVI4_8k", "DVI4_16k", "LPC", "PCMA", "G722", "L16_Stereo", "L16_Mono", "G723", "CN", "MPA", "G728", "DVI4_11k", "DVI4_22k", "G729", "CiscoCN", NULL, NULL, NULL, NULL, NULL, "CelB", "JPEG", NULL, NULL, NULL, NULL, "H261", "MPV", "MP2T", "H263" }; ostream & operator<<(ostream & o, RTP_DataFrame::PayloadTypes t) { if ((PINDEX)t < PARRAYSIZE(PayloadTypesNames) && PayloadTypesNames[t] != NULL) o << PayloadTypesNames[t]; else o << "[pt=" << (int)t << ']'; return o; } #endif ///////////////////////////////////////////////////////////////////////////// RTP_MultiDataFrame::RTP_MultiDataFrame(const BYTE * buffer, PINDEX length) : PBYTEArray(buffer,length) { } RTP_MultiDataFrame::RTP_MultiDataFrame(DWORD id, const BYTE * buffer, PINDEX rtplen) : PBYTEArray(rtplen+4) { memcpy(theArray+4,buffer,rtplen); *(PUInt32b *)&theArray[0] = id; } RTP_MultiDataFrame::RTP_MultiDataFrame(PINDEX rtplen) : PBYTEArray(rtplen+4) { } int RTP_MultiDataFrame::GetMultiHeaderSize() const { return 4; } DWORD RTP_MultiDataFrame::GetMultiplexID() const { return *(PUInt32b *)&theArray[0]; } void RTP_MultiDataFrame::SetMulitplexID(DWORD id) { *(PUInt32b *)&theArray[0] = id; } void RTP_MultiDataFrame::GetRTPPayload(RTP_DataFrame & frame) const { int sz = GetSize()- GetMultiHeaderSize(); frame.SetPayloadSize(sz - frame.GetHeaderSize()); memcpy(theArray+GetMultiHeaderSize(), frame.GetPointer(), sz); } void RTP_MultiDataFrame::SetRTPPayload(RTP_DataFrame & frame) { int sz = frame.GetPayloadSize() + frame.GetHeaderSize(); SetSize(sz+ GetMultiHeaderSize()); memcpy(frame.GetPointer(),theArray+GetMultiHeaderSize(), sz); } ///////////////////////////////////////////////////////////////////////////// RTP_ControlFrame::RTP_ControlFrame(PINDEX sz) : PBYTEArray(sz) { compoundOffset = 0; compoundSize = 0; theArray[0] = '\x80'; // Set version 2 } void RTP_ControlFrame::SetCount(unsigned count) { PAssert(count < 32, PInvalidParameter); theArray[compoundOffset] &= 0xe0; theArray[compoundOffset] |= count; } void RTP_ControlFrame::SetPayloadType(unsigned t) { PAssert(t < 256, PInvalidParameter); theArray[compoundOffset+1] = (BYTE)t; } void RTP_ControlFrame::SetPayloadSize(PINDEX sz) { sz = (sz+3)/4; PAssert(sz <= 0xffff, PInvalidParameter); compoundSize = compoundOffset+4*(sz+1); SetMinSize(compoundSize+1); *(PUInt16b *)&theArray[compoundOffset+2] = (WORD)sz; } PBoolean RTP_ControlFrame::ReadNextCompound() { compoundOffset += GetPayloadSize()+4; if (compoundOffset+4 > GetSize()) return FALSE; return compoundOffset+GetPayloadSize()+4 <= GetSize(); } PBoolean RTP_ControlFrame::WriteNextCompound() { compoundOffset += GetPayloadSize()+4; if (!SetMinSize(compoundOffset+4)) return FALSE; theArray[compoundOffset] = '\x80'; // Set version 2 theArray[compoundOffset+1] = 0; // Set payload type to illegal theArray[compoundOffset+2] = 0; // Set payload size to zero theArray[compoundOffset+3] = 0; return TRUE; } RTP_ControlFrame::SourceDescription & RTP_ControlFrame::AddSourceDescription(DWORD src) { SetPayloadType(RTP_ControlFrame::e_SourceDescription); PINDEX index = GetCount(); SetCount(index+1); PINDEX originalPayloadSize = index != 0 ? GetPayloadSize() : 0; SetPayloadSize(originalPayloadSize+sizeof(SourceDescription)); SourceDescription & sdes = *(SourceDescription *)(GetPayloadPtr()+originalPayloadSize); sdes.src = src; sdes.item[0].type = e_END; return sdes; } RTP_ControlFrame::SourceDescription::Item & RTP_ControlFrame::AddSourceDescriptionItem(SourceDescription & sdes, unsigned type, const PString & data) { PINDEX dataLength = data.GetLength(); SetPayloadSize(GetPayloadSize()+sizeof(SourceDescription::Item)+dataLength-1); SourceDescription::Item * item = sdes.item; while (item->type != e_END) item = item->GetNextItem(); item->type = (BYTE)type; item->length = (BYTE)dataLength; memcpy(item->data, (const char *)data, item->length); item->GetNextItem()->type = e_END; return *item; } void RTP_ControlFrame::ReceiverReport::SetLostPackets(unsigned packets) { lost[0] = (BYTE)(packets >> 16); lost[1] = (BYTE)(packets >> 8); lost[2] = (BYTE)packets; } ///////////////////////////////////////////////////////////////////////////// RTP_MultiControlFrame::RTP_MultiControlFrame(BYTE const * buffer, PINDEX length) : PBYTEArray(buffer,length) { } RTP_MultiControlFrame::RTP_MultiControlFrame(PINDEX rtplen) : PBYTEArray(rtplen+4) { } int RTP_MultiControlFrame::GetMultiHeaderSize() const { return 4; } WORD RTP_MultiControlFrame::GetMultiplexID() const { return *(PUInt16b *)&theArray[0]; } void RTP_MultiControlFrame::SetMulitplexID(WORD id) { *(PUInt16b *)&theArray[0] = id; } void RTP_MultiControlFrame::GetRTCPPayload(RTP_ControlFrame & frame) const { int sz = GetSize()- GetMultiHeaderSize(); frame.SetPayloadSize(sz); memcpy(theArray+GetMultiHeaderSize(), frame.GetPointer(), sz); } void RTP_MultiControlFrame::SetRTCPPayload(RTP_ControlFrame & frame) { int sz = frame.GetSize(); SetSize(sz+ GetMultiHeaderSize()); memcpy(frame.GetPointer(), theArray+GetMultiHeaderSize(), sz); } ///////////////////////////////////////////////////////////////////////////// void RTP_UserData::OnTxStatistics(const RTP_Session & /*session*/) const { } void RTP_UserData::OnRxStatistics(const RTP_Session & /*session*/) const { } void RTP_UserData::OnFinalStatistics(const RTP_Session & /*session*/ ) const { } void RTP_UserData::OnRxSenderReport(unsigned /*sessionID*/, const RTP_Session::SenderReport & /*send*/, const RTP_Session::ReceiverReportArray & /*recv*/ ) const { } ///////////////////////////////////////////////////////////////////////////// RTP_Session::RTP_Session( #ifdef H323_RTP_AGGREGATE PHandleAggregator * _aggregator, #endif unsigned id, RTP_UserData * data) : canonicalName(PProcess::Current().GetUserName()), toolName(PProcess::Current().GetName()), reportTimeInterval(0, 12), // Seconds firstDataReceivedTime(0), reportTimer(reportTimeInterval) #ifdef H323_RTP_AGGREGATE ,aggregator(_aggregator) #endif { sessionID = (BYTE)id; if (sessionID <= 0) { PTRACE(2,"RTP\tWARNING: Session ID <= 0 Invalid SessionID."); } else if (sessionID > 256) { PTRACE(2,"RTP\tWARNING: Session ID " << sessionID << " Invalid SessionID."); } referenceCount = 1; userData = data; #ifdef H323_AUDIO_CODECS jitter = NULL; #endif ignoreOtherSources = TRUE; ignoreOutOfOrderPackets = TRUE; syncSourceOut = PRandom::Number(); syncSourceIn = 0; txStatisticsInterval = 50; //100; // Number of data packets between tx reports rxStatisticsInterval = 50; //100; // Number of data packets between rx reports lastSentSequenceNumber = (WORD)PRandom::Number(); expectedSequenceNumber = 0; lastRRSequenceNumber = 0; consecutiveOutOfOrderPackets = 0; packetsSent = 0; octetsSent = 0; packetsReceived = 0; octetsReceived = 0; packetsLost = 0; packetsOutOfOrder = 0; averageSendTime = 0; maximumSendTime = 0; minimumSendTime = 0; averageReceiveTime = 0; maximumReceiveTime = 0; minimumReceiveTime = 0; jitterLevel = 0; maximumJitterLevel = 0; txStatisticsCount = 0; rxStatisticsCount = 0; averageSendTimeAccum = 0; maximumSendTimeAccum = 0; minimumSendTimeAccum = 0xffffffff; averageReceiveTimeAccum = 0; maximumReceiveTimeAccum = 0; minimumReceiveTimeAccum = 0xffffffff; packetsLostSinceLastRR = 0; lastTransitTime = 0; localAddress = PString(); remoteAddress = PString(); avSyncData = false; } RTP_Session::~RTP_Session() { userData->OnFinalStatistics(*this); PTRACE_IF(2, packetsSent != 0 || packetsReceived != 0, "RTP\tFinal statistics: Session " << sessionID << "\n" " packetsSent = " << packetsSent << "\n" " octetsSent = " << octetsSent << "\n" " averageSendTime = " << averageSendTime << "\n" " maximumSendTime = " << maximumSendTime << "\n" " minimumSendTime = " << minimumSendTime << "\n" " packetsReceived = " << packetsReceived << "\n" " octetsReceived = " << octetsReceived << "\n" " packetsLost = " << packetsLost << "\n" " packetsTooLate = " << GetPacketsTooLate() << "\n" " packetsOutOfOrder = " << packetsOutOfOrder << "\n" " averageReceiveTime= " << averageReceiveTime << "\n" " maximumReceiveTime= " << maximumReceiveTime << "\n" " minimumReceiveTime= " << minimumReceiveTime << "\n" " averageJitter = " << (jitterLevel >> 7) << "\n" " maximumJitter = " << (maximumJitterLevel >> 7) ); delete userData; #ifdef H323_AUDIO_CODECS delete jitter; #endif } void RTP_Session::SetSessionID(unsigned id) { sessionID = id; } PString RTP_Session::GetCanonicalName() const { PWaitAndSignal mutex(reportMutex); PString s = canonicalName; s.MakeUnique(); return s; } void RTP_Session::SetCanonicalName(const PString & name) { PWaitAndSignal mutex(reportMutex); canonicalName = name; } PString RTP_Session::GetToolName() const { PWaitAndSignal mutex(reportMutex); PString s = toolName; s.MakeUnique(); return s; } void RTP_Session::SetToolName(const PString & name) { PWaitAndSignal mutex(reportMutex); toolName = name; } void RTP_Session::SetUserData(RTP_UserData * data) { delete userData; userData = data; } void RTP_Session::SetJitterBufferSize(unsigned minJitterDelay, unsigned maxJitterDelay, PINDEX stackSize) { if (minJitterDelay == 0 && maxJitterDelay == 0) { #ifdef H323_AUDIO_CODECS delete jitter; jitter = NULL; #endif } #ifdef H323_AUDIO_CODECS else if (jitter != NULL) { jitter->SetDelay(minJitterDelay, maxJitterDelay); } #endif else { SetIgnoreOutOfOrderPackets(FALSE); #ifdef H323_AUDIO_CODECS jitter = new RTP_JitterBuffer(*this, minJitterDelay, maxJitterDelay, stackSize); jitter->Resume( #ifdef H323_RTP_AGGREGATE aggregator #endif ); #endif } } unsigned RTP_Session::GetJitterBufferSize() const { return #ifdef H323_AUDIO_CODECS jitter != NULL ? jitter->GetJitterTime() : #endif 0; } PBoolean RTP_Session::ReadBufferedData(DWORD timestamp, RTP_DataFrame & frame) { #ifdef H323_AUDIO_CODECS if (jitter != NULL) return jitter->ReadData(timestamp, frame); else #endif return ReadData(frame, TRUE); } PBoolean RTP_Session::PseudoRead(int & /*selectStatus*/) { return false; } bool RTP_Session::AVSyncData(SenderReport & sender) { if (avSyncData) { sender = rtpSync; avSyncData = false; return true; } return false; } void RTP_Session::SetTxStatisticsInterval(unsigned packets) { txStatisticsInterval = PMAX(packets, 2); txStatisticsCount = 0; averageSendTimeAccum = 0; maximumSendTimeAccum = 0; minimumSendTimeAccum = 0xffffffff; } void RTP_Session::SetRxStatisticsInterval(unsigned packets) { rxStatisticsInterval = PMAX(packets, 2); rxStatisticsCount = 0; averageReceiveTimeAccum = 0; maximumReceiveTimeAccum = 0; minimumReceiveTimeAccum = 0xffffffff; } void RTP_Session::AddReceiverReport(RTP_ControlFrame::ReceiverReport & receiver) { receiver.ssrc = syncSourceIn; receiver.SetLostPackets(packetsLost); if (expectedSequenceNumber > lastRRSequenceNumber) receiver.fraction = (BYTE)((packetsLostSinceLastRR<<8)/(expectedSequenceNumber - lastRRSequenceNumber)); else receiver.fraction = 0; packetsLostSinceLastRR = 0; receiver.last_seq = lastRRSequenceNumber; lastRRSequenceNumber = expectedSequenceNumber; receiver.jitter = jitterLevel >> 4; // Allow for rounding protection bits // The following have not been calculated yet. receiver.lsr = 0; receiver.dlsr = 0; PTRACE(3, "RTP\tSentReceiverReport:" " ssrc=" << receiver.ssrc << " fraction=" << (unsigned)receiver.fraction << " lost=" << receiver.GetLostPackets() << " last_seq=" << receiver.last_seq << " jitter=" << receiver.jitter << " lsr=" << receiver.lsr << " dlsr=" << receiver.dlsr); } RTP_Session::SendReceiveStatus RTP_Session::OnSendData(RTP_DataFrame & frame) { PTimeInterval tick = PTimer::Tick(); // Timestamp set now frame.SetSequenceNumber(++lastSentSequenceNumber); frame.SetSyncSource(syncSourceOut); if (packetsSent != 0 && !frame.GetMarker()) { // Only do statistics on subsequent packets DWORD diff = (tick - lastSentPacketTime).GetInterval(); averageSendTimeAccum += diff; if (diff > maximumSendTimeAccum) maximumSendTimeAccum = diff; if (diff < minimumSendTimeAccum) minimumSendTimeAccum = diff; txStatisticsCount++; } lastSentTimestamp = frame.GetTimestamp(); lastSentPacketTime = tick; octetsSent += frame.GetPayloadSize(); packetsSent++; // Call the statistics call-back on the first PDU with total count == 1 if (packetsSent == 1 && userData != NULL) userData->OnTxStatistics(*this); if (!SendReport()) return e_AbortTransport; if (txStatisticsCount < txStatisticsInterval) return e_ProcessPacket; txStatisticsCount = 0; averageSendTime = averageSendTimeAccum/txStatisticsInterval; maximumSendTime = maximumSendTimeAccum; minimumSendTime = minimumSendTimeAccum; averageSendTimeAccum = 0; maximumSendTimeAccum = 0; minimumSendTimeAccum = 0xffffffff; PTRACE(2, "RTP\tTransmit statistics: " " packets=" << packetsSent << " octets=" << octetsSent << " avgTime=" << averageSendTime << " maxTime=" << maximumSendTime << " minTime=" << minimumSendTime ); if (userData != NULL) userData->OnTxStatistics(*this); return e_ProcessPacket; } RTP_Session::SendReceiveStatus RTP_Session::OnReceiveData(const RTP_DataFrame & frame, const RTP_UDP & rtp) { // Check that the PDU is the right version if (frame.GetVersion() != RTP_DataFrame::ProtocolVersion) return e_IgnorePacket; // Non fatal error, just ignore // Check for if a control packet rather than data packet. if (frame.GetPayloadType() > RTP_DataFrame::MaxPayloadType) return e_IgnorePacket; // Non fatal error, just ignore PTimeInterval tick = PTimer::Tick(); // Get timestamp now // Have not got SSRC yet, so grab it now if (syncSourceIn == 0) syncSourceIn = frame.GetSyncSource(); // Check packet sequence numbers if (packetsReceived == 0) { expectedSequenceNumber = (WORD)(frame.GetSequenceNumber() + 1); firstDataReceivedTime = PTime(); PTRACE(2, "RTP\tFirst data:" " ver=" << frame.GetVersion() << " pt=" << frame.GetPayloadType() << " psz=" << frame.GetPayloadSize() << " m=" << frame.GetMarker() << " x=" << frame.GetExtension() << " seq=" << frame.GetSequenceNumber() << " ts=" << frame.GetTimestamp() << " src=" << frame.GetSyncSource() << " ccnt=" << frame.GetContribSrcCount()); } else { if (ignoreOtherSources && frame.GetSyncSource() != syncSourceIn) { PTRACE(2, "RTP\tPacket from SSRC=" << frame.GetSyncSource() << " ignored, expecting SSRC=" << syncSourceIn); return e_IgnorePacket; // Non fatal error, just ignore } WORD sequenceNumber = frame.GetSequenceNumber(); if (sequenceNumber == expectedSequenceNumber) { expectedSequenceNumber++; consecutiveOutOfOrderPackets = 0; // Only do statistics on packets after first received in talk burst if (!frame.GetMarker()) { DWORD diff = (tick - lastReceivedPacketTime).GetInterval(); averageReceiveTimeAccum += diff; if (diff > maximumReceiveTimeAccum) maximumReceiveTimeAccum = diff; if (diff < minimumReceiveTimeAccum) minimumReceiveTimeAccum = diff; rxStatisticsCount++; // The following has the implicit assumption that something that has jitter // is an audio codec and thus is in 8kHz timestamp units. diff *= 8; long variance = diff - lastTransitTime; lastTransitTime = diff; if (variance < 0) variance = -variance; jitterLevel += variance - ((jitterLevel+8) >> 4); if (jitterLevel > maximumJitterLevel) maximumJitterLevel = jitterLevel; } } else if (sequenceNumber < expectedSequenceNumber) { PTRACE(3, "RTP\tOut of order packet, received " << sequenceNumber << " expected " << expectedSequenceNumber << " ssrc=" << syncSourceIn); packetsOutOfOrder++; // Check for Cisco bug where sequence numbers suddenly start incrementing // from a different base. if (++consecutiveOutOfOrderPackets > 10) { expectedSequenceNumber = (WORD)(sequenceNumber + 1); PTRACE(1, "RTP\tAbnormal change of sequence numbers, adjusting to expect " << expectedSequenceNumber << " ssrc=" << syncSourceIn); } if (ignoreOutOfOrderPackets) return e_IgnorePacket; // Non fatal error, just ignore } else { unsigned dropped = sequenceNumber - expectedSequenceNumber; packetsLost += dropped; packetsLostSinceLastRR += dropped; PTRACE(3, "RTP\tDropped " << dropped << " packet(s) at " << sequenceNumber << ", ssrc=" << syncSourceIn); expectedSequenceNumber = (WORD)(sequenceNumber + 1); consecutiveOutOfOrderPackets = 0; } } lastReceivedPacketTime = tick; octetsReceived += frame.GetPayloadSize(); packetsReceived++; if (rtp.GetRemoteDataPort() > 0 && localAddress.IsEmpty()) { localAddress = rtp.GetLocalAddress().AsString() + ":" + PString(rtp.GetLocalDataPort()); remoteAddress = rtp.GetRemoteAddress().AsString() + ":" + PString(rtp.GetRemoteDataPort()); } // Call the statistics call-back on the first PDU with total count == 1 if (packetsReceived == 1 && userData != NULL) userData->OnRxStatistics(*this); if (!SendReport()) return e_AbortTransport; if (rxStatisticsCount < rxStatisticsInterval) return e_ProcessPacket; rxStatisticsCount = 0; averageReceiveTime = averageReceiveTimeAccum/rxStatisticsInterval; maximumReceiveTime = maximumReceiveTimeAccum; minimumReceiveTime = minimumReceiveTimeAccum; averageReceiveTimeAccum = 0; maximumReceiveTimeAccum = 0; minimumReceiveTimeAccum = 0xffffffff; PTRACE(2, "RTP\tReceive statistics: " " packets=" << packetsReceived << " octets=" << octetsReceived << " lost=" << packetsLost << " tooLate=" << GetPacketsTooLate() << " order=" << packetsOutOfOrder << " avgTime=" << averageReceiveTime << " maxTime=" << maximumReceiveTime << " minTime=" << minimumReceiveTime << " jitter=" << (jitterLevel >> 7) << " maxJitter=" << (maximumJitterLevel >> 7) ); if (userData != NULL) userData->OnRxStatistics(*this); return e_ProcessPacket; } PBoolean RTP_Session::SendReport() { PWaitAndSignal mutex(reportMutex); if (reportTimer.IsRunning()) return TRUE; // Have not got anything yet, do nothing if (packetsSent == 0 && packetsReceived == 0) { reportTimer = reportTimeInterval; return TRUE; } RTP_ControlFrame report; // No packets sent yet, so only send RR if (packetsSent == 0) { // Send RR as we are not transmitting report.SetPayloadType(RTP_ControlFrame::e_ReceiverReport); report.SetPayloadSize(4+sizeof(RTP_ControlFrame::ReceiverReport)); report.SetCount(1); PUInt32b * payload = (PUInt32b *)report.GetPayloadPtr(); *payload = syncSourceOut; AddReceiverReport(*(RTP_ControlFrame::ReceiverReport *)&payload[1]); } else { report.SetPayloadType(RTP_ControlFrame::e_SenderReport); report.SetPayloadSize(sizeof(RTP_ControlFrame::SenderReport)); RTP_ControlFrame::SenderReport * sender = (RTP_ControlFrame::SenderReport *)report.GetPayloadPtr(); sender->ssrc = syncSourceOut; PTime now; sender->ntp_sec = now.GetTimeInSeconds()+SecondsFrom1900to1970; // Convert from 1970 to 1900 sender->ntp_frac = now.GetMicrosecond()*4294; // Scale microseconds to "fraction" from 0 to 2^32 sender->rtp_ts = lastSentTimestamp; sender->psent = packetsSent; sender->osent = octetsSent; PTRACE(3, "RTP\tSentSenderReport: " " ssrc=" << sender->ssrc << " ntp=" << sender->ntp_sec << '.' << sender->ntp_frac << " rtp=" << sender->rtp_ts << " psent=" << sender->psent << " osent=" << sender->osent); if (syncSourceIn != 0) { report.SetPayloadSize(sizeof(RTP_ControlFrame::SenderReport) + sizeof(RTP_ControlFrame::ReceiverReport)); report.SetCount(1); AddReceiverReport(*(RTP_ControlFrame::ReceiverReport *)&sender[1]); } } // Add the SDES part to compound RTCP packet PTRACE(2, "RTP\tSending SDES: " << canonicalName); report.WriteNextCompound(); RTP_ControlFrame::SourceDescription & sdes = report.AddSourceDescription(syncSourceOut); report.AddSourceDescriptionItem(sdes, RTP_ControlFrame::e_CNAME, canonicalName); report.AddSourceDescriptionItem(sdes, RTP_ControlFrame::e_TOOL, toolName); // Wait a fuzzy amount of time so things don't get into lock step int interval = (int)reportTimeInterval.GetMilliSeconds(); int third = interval/3; interval += PRandom::Number()%(2*third); interval -= third; reportTimer = interval; return WriteControl(report); } static RTP_Session::ReceiverReportArray BuildReceiverReportArray(const RTP_ControlFrame & frame, PINDEX offset) { RTP_Session::ReceiverReportArray reports; const RTP_ControlFrame::ReceiverReport * rr = (const RTP_ControlFrame::ReceiverReport *)(frame.GetPayloadPtr()+offset); for (PINDEX repIdx = 0; repIdx < (PINDEX)frame.GetCount(); repIdx++) { RTP_Session::ReceiverReport * report = new RTP_Session::ReceiverReport; report->sourceIdentifier = rr->ssrc; report->fractionLost = rr->fraction; report->totalLost = rr->GetLostPackets(); report->lastSequenceNumber = rr->last_seq; report->jitter = rr->jitter; report->lastTimestamp = (PInt64)(DWORD)rr->lsr; report->delay = ((PInt64)rr->dlsr << 16)/1000; reports.SetAt(repIdx, report); rr++; } return reports; } RTP_Session::SendReceiveStatus RTP_Session::OnReceiveControl(RTP_ControlFrame & frame) { do { BYTE * payload = frame.GetPayloadPtr(); unsigned size = frame.GetPayloadSize(); switch (frame.GetPayloadType()) { case RTP_ControlFrame::e_SenderReport : if (size >= (sizeof(RTP_ControlFrame::SenderReport)+frame.GetCount()*sizeof(RTP_ControlFrame::ReceiverReport))) { SenderReport sender; const RTP_ControlFrame::SenderReport & sr = *(const RTP_ControlFrame::SenderReport *)payload; sender.sourceIdentifier = sr.ssrc; sender.realTimestamp = PTime(sr.ntp_sec-SecondsFrom1900to1970, sr.ntp_frac/4294); sender.rtpTimestamp = sr.rtp_ts; sender.packetsSent = sr.psent; sender.octetsSent = sr.osent; // trace the report ReceiverReportArray RRs = BuildReceiverReportArray(frame, sizeof(RTP_ControlFrame::SenderReport)); OnRxSenderReport(sender, RRs); } else { PTRACE(2, "RTP\tSenderReport packet truncated"); } break; case RTP_ControlFrame::e_ReceiverReport : if (size >= (frame.GetCount()*sizeof(RTP_ControlFrame::ReceiverReport))) OnRxReceiverReport(*(const PUInt32b *)payload, BuildReceiverReportArray(frame, sizeof(PUInt32b))); else { PTRACE(2, "RTP\tReceiverReport packet truncated"); } break; case RTP_ControlFrame::e_SourceDescription : if (size >= frame.GetCount()*sizeof(RTP_ControlFrame::SourceDescription)) { SourceDescriptionArray descriptions; const RTP_ControlFrame::SourceDescription * sdes = (const RTP_ControlFrame::SourceDescription *)payload; for (PINDEX srcIdx = 0; srcIdx < (PINDEX)frame.GetCount(); srcIdx++) { descriptions.SetAt(srcIdx, new SourceDescription(sdes->src)); const RTP_ControlFrame::SourceDescription::Item * item = sdes->item; while (item->type != RTP_ControlFrame::e_END) { descriptions[srcIdx].items.SetAt(item->type, PString(item->data, item->length)); item = item->GetNextItem(); } sdes = (const RTP_ControlFrame::SourceDescription *)item->GetNextItem(); } OnRxSourceDescription(descriptions); } else { PTRACE(2, "RTP\tSourceDescription packet truncated"); } break; case RTP_ControlFrame::e_Goodbye : if (size >= 4) { PString str; unsigned count = frame.GetCount()*4; if (size > count) str = PString((const char *)(payload+count+1), payload[count]); PDWORDArray sources(count); for (PINDEX i = 0; i < (PINDEX)count; i++) sources[i] = ((const PUInt32b *)payload)[i]; OnRxGoodbye(sources, str); } else { PTRACE(2, "RTP\tGoodbye packet truncated"); } break; case RTP_ControlFrame::e_ApplDefined : if (size >= 4) { PString str((const char *)(payload+4), 4); OnRxApplDefined(str, frame.GetCount(), *(const PUInt32b *)payload, payload+8, frame.GetPayloadSize()-8); } else { PTRACE(2, "RTP\tApplDefined packet truncated"); } break; default : PTRACE(2, "RTP\tUnknown control payload type: " << frame.GetPayloadType()); } } while (frame.ReadNextCompound()); return e_ProcessPacket; } void RTP_Session::OnRxSenderReport(const SenderReport & PTRACE_PARAM(sender), const ReceiverReportArray & PTRACE_PARAM(reports)) { userData->OnRxSenderReport(sessionID,sender,reports); #if PTRACING PTRACE(3, "RTP\tOnRxSenderReport: " << sender); for (PINDEX i = 0; i < reports.GetSize(); i++) PTRACE(3, "RTP\tOnRxSenderReport RR: " << reports[i]); #endif } void RTP_Session::OnRxReceiverReport(DWORD PTRACE_PARAM(src), const ReceiverReportArray & PTRACE_PARAM(reports)) { #if PTRACING PTRACE(3, "RTP\tOnReceiverReport: ssrc=" << src); for (PINDEX i = 0; i < reports.GetSize(); i++) PTRACE(3, "RTP\tOnReceiverReport RR: " << reports[i]); #endif } void RTP_Session::OnRxSourceDescription(const SourceDescriptionArray & PTRACE_PARAM(description)) { #if PTRACING for (PINDEX i = 0; i < description.GetSize(); i++) PTRACE(3, "RTP\tOnSourceDescription: " << description[i]); #endif } void RTP_Session::OnRxGoodbye(const PDWORDArray & PTRACE_PARAM(src), const PString & PTRACE_PARAM(reason)) { PTRACE(3, "RTP\tOnGoodbye: \"" << reason << "\" srcs=" << src); } void RTP_Session::OnRxApplDefined(const PString & PTRACE_PARAM(type), unsigned PTRACE_PARAM(subtype), DWORD PTRACE_PARAM(src), const BYTE * /*data*/, PINDEX PTRACE_PARAM(size)) { PTRACE(3, "RTP\tOnApplDefined: \"" << type << "\"-" << subtype << " " << src << " [" << size << ']'); } void RTP_Session::ReceiverReport::PrintOn(ostream & strm) const { strm << "ssrc=" << sourceIdentifier << " fraction=" << fractionLost << " lost=" << totalLost << " last_seq=" << lastSequenceNumber << " jitter=" << jitter << " lsr=" << lastTimestamp << " dlsr=" << delay; } void RTP_Session::SenderReport::PrintOn(ostream & strm) const { strm << "ssrc=" << sourceIdentifier << " ntp=" << realTimestamp.AsString("yyyy/M/d-h:m:s.uuuu") << " rtp=" << rtpTimestamp << " psent=" << packetsSent << " osent=" << octetsSent; } void RTP_Session::SourceDescription::PrintOn(ostream & strm) const { static const char * const DescriptionNames[RTP_ControlFrame::NumDescriptionTypes] = { "END", "CNAME", "NAME", "EMAIL", "PHONE", "LOC", "TOOL", "NOTE", "PRIV" }; strm << "ssrc=" << sourceIdentifier; for (PINDEX i = 0; i < items.GetSize(); i++) { strm << "\n item[" << i << "]: type="; unsigned typeNum = items.GetKeyAt(i); if (typeNum < PARRAYSIZE(DescriptionNames)) strm << DescriptionNames[typeNum]; else strm << typeNum; strm << " data=\"" << items.GetDataAt(i) << '"'; } } DWORD RTP_Session::GetPacketsTooLate() const { return #ifdef H323_AUDIO_CODECS jitter != NULL ? jitter->GetPacketsTooLate() : #endif 0; } ///////////////////////////////////////////////////////////////////////////// RTP_SessionManager::RTP_SessionManager() { enumerationIndex = P_MAX_INDEX; } RTP_SessionManager::RTP_SessionManager(const RTP_SessionManager & sm) : sessions(sm.sessions) { enumerationIndex = P_MAX_INDEX; } RTP_SessionManager & RTP_SessionManager::operator=(const RTP_SessionManager & sm) { PWaitAndSignal m1(mutex); PWaitAndSignal m2(sm.mutex); sessions = sm.sessions; return *this; } RTP_Session * RTP_SessionManager::UseSession(unsigned sessionID) { mutex.Wait(); RTP_Session * session = sessions.GetAt(sessionID); if (session == NULL) return NULL; // Deliberately have not release mutex here! See AddSession. PTRACE(3, "RTP\tFound existing session " << sessionID); session->IncrementReference(); mutex.Signal(); return session; } void RTP_SessionManager::AddSession(RTP_Session * session) { if (PAssertNULL(session) != NULL) { PTRACE(2, "RTP\tAdding session " << *session); sessions.SetAt(session->GetSessionID(), session); } // The following is the mutex.Signal() that was not done in the UseSession() mutex.Signal(); } void RTP_SessionManager::MoveSession(unsigned oldSessionID, unsigned newSessionID) { PTRACE(2, "RTP\tMoving session " << oldSessionID << " to " << newSessionID); mutex.Wait(); if (sessions.Contains(oldSessionID)) { RTP_Session & session = sessions[oldSessionID]; sessions.SetAt(newSessionID, &session); //sessions.RemoveAt(oldSessionID); } mutex.Signal(); } void RTP_SessionManager::ReleaseSession(unsigned sessionID) { PTRACE(2, "RTP\tReleasing session " << sessionID); mutex.Wait(); if (sessions.Contains(sessionID)) { if (sessions[sessionID].DecrementReference()) { PTRACE(3, "RTP\tDeleting session " << sessionID); sessions[sessionID].SetJitterBufferSize(0, 0); sessions.SetAt(sessionID, NULL); } } mutex.Signal(); } RTP_Session * RTP_SessionManager::GetSession(unsigned sessionID) const { PWaitAndSignal wait(mutex); if (!sessions.Contains(sessionID)) return NULL; PTRACE(3, "RTP\tFound existing session " << sessionID); #if PTLIB_VER >= 2110 return const_cast(&sessions[sessionID]); #else return &sessions[sessionID]; #endif } RTP_Session * RTP_SessionManager::First() { mutex.Wait(); enumerationIndex = 0; return Next(); } RTP_Session * RTP_SessionManager::Next() { if (enumerationIndex < sessions.GetSize()) return &sessions.GetDataAt(enumerationIndex++); Exit(); return NULL; } void RTP_SessionManager::Exit() { enumerationIndex = P_MAX_INDEX; mutex.Signal(); } ///////////////////////////////////////////////////////////////////////////// static void SetMinBufferSize(PUDPSocket & sock, int buftype) { int sz = 0; if (sock.GetOption(buftype, sz)) { if (sz >= UDP_BUFFER_SIZE) return; } if (!sock.SetOption(buftype, UDP_BUFFER_SIZE)) { PTRACE(1, "RTP_UDP\tSetOption(" << buftype << ") failed: " << sock.GetErrorText()); } } RTP_UDP::RTP_UDP( #ifdef H323_RTP_AGGREGATE PHandleAggregator * _aggregator, #endif unsigned id, PBoolean _remoteIsNAT) : RTP_Session( #ifdef H323_RTP_AGGREGATE _aggregator, #endif id), remoteAddress(0), remoteTransmitAddress(0), remoteIsNAT(_remoteIsNAT) { remoteDataPort = 0; remoteControlPort = 0; shutdownRead = FALSE; shutdownWrite = FALSE; dataSocket = NULL; controlSocket = NULL; appliedQOS = FALSE; enableGQOS = FALSE; } RTP_UDP::~RTP_UDP() { Close(TRUE); Close(FALSE); delete dataSocket; delete controlSocket; } void RTP_UDP::ApplyQOS(const PIPSocket::Address & addr) { if (dataSocket != NULL) dataSocket->SetSendAddress(addr,GetRemoteDataPort()); else if (controlSocket != NULL) controlSocket->SetSendAddress(addr,GetRemoteControlPort()); appliedQOS = TRUE; } PBoolean RTP_UDP::ModifyQOS(RTP_QOS * rtpqos) { PBoolean retval = FALSE; if (rtpqos == NULL) return retval; #if P_QOS if (dataSocket != NULL) retval &= dataSocket->ModifyQoSSpec(&(rtpqos->dataQoS)); else if (controlSocket != NULL) retval = controlSocket->ModifyQoSSpec(&(rtpqos->ctrlQoS)); #endif appliedQOS = FALSE; return retval; } void RTP_UDP::EnableGQoS(PBoolean success) { enableGQOS = success; } #if P_QOS PQoS & RTP_UDP::GetQOS() { if (dataSocket != NULL) return dataSocket->GetQoSSpec(); else if (controlSocket != NULL) return controlSocket->GetQoSSpec(); else return *new PQoS(); } #endif PBoolean RTP_UDP::Open(PIPSocket::Address _localAddress, WORD portBase, WORD portMax, BYTE tos, #ifdef P_STUN const H323Connection & connection, PNatMethod * meth, #else const H323Connection &, void *, #endif RTP_QOS * rtpQos) { // save local address localAddress = _localAddress; localDataPort = (WORD)(portBase&0xfffe); localControlPort = (WORD)(localDataPort + 1); delete dataSocket; delete controlSocket; dataSocket = NULL; controlSocket = NULL; PQoS * dataQos = NULL; PQoS * ctrlQos = NULL; if (rtpQos != NULL) { #if P_QOS dataQos = &(rtpQos->dataQoS); ctrlQos = &(rtpQos->ctrlQoS); #endif } #ifdef P_STUN if (meth != NULL) { H323Connection::SessionInformation * info = connection.BuildSessionInformation(GetSessionID()); #if PTLIB_VER > 260 if (meth->CreateSocketPair(dataSocket, controlSocket, localAddress,(void *)info)) { #else if (meth->CreateSocketPair(dataSocket, controlSocket, localAddress)) { #endif dataSocket->GetLocalAddress(localAddress, localDataPort); controlSocket->GetLocalAddress(localAddress, localControlPort); PTRACE(4, "RTP\tNAT Method " << meth->GetName() << " created NAT ports " << localDataPort << " " << localControlPort); } else PTRACE(1, "RTP\tNAT could not create socket pair!"); delete info; } #endif if (dataSocket == NULL || controlSocket == NULL) { dataSocket = new PUDPSocket(dataQos); controlSocket = new PUDPSocket(ctrlQos); while (!dataSocket->Listen(localAddress, 1, localDataPort) || !controlSocket->Listen(localAddress, 1, localControlPort)) { dataSocket->Close(); controlSocket->Close(); if ((localDataPort > portMax) || (localDataPort > 0xfffd)) return FALSE; // If it ever gets to here the OS has some SERIOUS problems! localDataPort += 2; localControlPort += 2; } } // Set the IP Type Of Service field for prioritisation of media UDP packets // through some Cisco routers and Linux boxes if (!dataSocket->SetOption(IP_TOS, tos, IPPROTO_IP)) { PTRACE(1, "RTP_UDP\tCould not set TOS field in IP header: " << dataSocket->GetErrorText()); } // Increase internal buffer size on media UDP sockets SetMinBufferSize(*dataSocket, SO_RCVBUF); SetMinBufferSize(*dataSocket, SO_SNDBUF); SetMinBufferSize(*controlSocket, SO_RCVBUF); SetMinBufferSize(*controlSocket, SO_SNDBUF); shutdownRead = FALSE; shutdownWrite = FALSE; if (canonicalName.Find('@') == P_MAX_INDEX) canonicalName += '@' + GetLocalHostName(); PTRACE(2, "RTP_UDP\tSession " << sessionID << " created: " << localAddress << ':' << localDataPort << '-' << localControlPort << " ssrc=" << syncSourceOut); return TRUE; } void RTP_UDP::Reopen(PBoolean reading) { if (reading) shutdownRead = FALSE; else shutdownWrite = FALSE; } void RTP_UDP::Close(PBoolean reading) { if (reading) { if (!shutdownRead) { PTRACE(3, "RTP_UDP\tSession " << sessionID << ", Shutting down read."); syncSourceIn = 0; shutdownRead = TRUE; if (dataSocket != NULL && controlSocket != NULL) { PIPSocket::Address addr; controlSocket->GetLocalAddress(addr); if (addr.IsAny()) PIPSocket::GetHostAddress(addr); dataSocket->WriteTo("", 1, addr, controlSocket->GetPort()); } } } else { PTRACE(3, "RTP_UDP\tSession " << sessionID << ", Shutting down write."); shutdownWrite = TRUE; } } PString RTP_UDP::GetLocalHostName() { return PIPSocket::GetHostName(); } PBoolean RTP_UDP::SetRemoteSocketInfo(PIPSocket::Address address, WORD port, PBoolean isDataPort) { if (remoteIsNAT) { PTRACE(3, "RTP_UDP\tIgnoring remote socket info as remote is behind NAT"); return TRUE; } PTRACE(3, "RTP_UDP\tSetRemoteSocketInfo: session=" << sessionID << ' ' << (isDataPort ? "data" : "control") << " channel, " "new=" << address << ':' << port << ", " "local=" << localAddress << ':' << localDataPort << '-' << localControlPort << ", " "remote=" << remoteAddress << ':' << remoteDataPort << '-' << remoteControlPort); if (localAddress == address && (isDataPort ? localDataPort : localControlPort) == port) return TRUE; remoteAddress = address; if (isDataPort) { remoteDataPort = port; if (remoteControlPort == 0) remoteControlPort = (WORD)(port + 1); } else { remoteControlPort = port; if (remoteDataPort == 0) remoteDataPort = (WORD)(port - 1); } if (!appliedQOS) ApplyQOS(remoteAddress); return remoteAddress != 0 && port != 0; } PBoolean RTP_UDP::PseudoRead(int & selectStatus) { #if PTLIB_VER >= 290 return (controlSocket->DoPseudoRead(selectStatus) || dataSocket->DoPseudoRead(selectStatus)); #else return false; #endif } PBoolean RTP_UDP::ReadData(RTP_DataFrame & frame, PBoolean loop) { do { #ifdef H323_RTP_AGGREGATE PTime start; #endif int selectStatus = 0; if (!PseudoRead(selectStatus)) selectStatus = PSocket::Select(*dataSocket, *controlSocket, reportTimer); #ifdef H323_RTP_AGGREGATE unsigned duration = (unsigned)(PTime() - start).GetMilliSeconds(); if (duration > 50) { PTRACE(4, "Warning: aggregator read routine was of extended duration = " << duration << " msecs"); } #endif if (shutdownRead) { PTRACE(3, "RTP_UDP\tSession " << sessionID << ", Read shutdown."); shutdownRead = FALSE; return FALSE; } switch (selectStatus) { case -2 : if (ReadControlPDU() == e_AbortTransport) return FALSE; break; case -3 : if (ReadControlPDU() == e_AbortTransport) return FALSE; // Then do -1 case case -1 : switch (ReadDataPDU(frame)) { case e_ProcessPacket : if (!shutdownRead) return TRUE; case e_IgnorePacket : break; case e_AbortTransport : return FALSE; } break; case 0 : PTRACE(5, "RTP_UDP\tSession " << sessionID << ", check for sending report."); if (!SendReport()) return FALSE; break; case PSocket::Interrupted: PTRACE(3, "RTP_UDP\tSession " << sessionID << ", Interrupted."); return FALSE; default : PTRACE(1, "RTP_UDP\tSession " << sessionID << ", Select error: " << PChannel::GetErrorText((PChannel::Errors)selectStatus)); return FALSE; } } while (loop); return TRUE; } RTP_Session::SendReceiveStatus RTP_UDP::ReadDataOrControlPDU(PUDPSocket & socket, PBYTEArray & frame, PBoolean fromDataChannel) { #if PTRACING const char * channelName = fromDataChannel ? "Data" : "Control"; #endif PIPSocket::Address addr; WORD port; if (socket.ReadFrom(frame.GetPointer(), frame.GetSize(), addr, port)) { if (ignoreOtherSources) { // If remote address never set from higher levels, then try and figure // it out from the first packet received. if (remoteAddress.IsAny() || !remoteAddress.IsValid()) { remoteAddress = addr; PTRACE(4, "RTP\tSet remote address from first " << channelName << " PDU from " << addr << ':' << port); } if (fromDataChannel) { if (remoteDataPort == 0) remoteDataPort = port; } else { if (remoteControlPort == 0) remoteControlPort = port; } if (remoteTransmitAddress.IsAny() || !remoteTransmitAddress.IsValid()) remoteTransmitAddress = addr; else if (remoteTransmitAddress != addr) { #ifdef H323_H46024A if (socket.IsAlternateAddress(addr,port)) { remoteTransmitAddress = addr; if (fromDataChannel) { remoteDataPort = port; // Fixes to makes sure sync,stats and jitter don't get screwed up syncSourceIn = ((RTP_DataFrame &)frame).GetSyncSource(); expectedSequenceNumber = ((RTP_DataFrame &)frame).GetSequenceNumber(); #ifdef H323_AUDIO_CODECS if (jitter != NULL) jitter->ResetFirstWrite(); #endif } else remoteControlPort = port; } else #endif { PTRACE(1, "RTP_UDP\tSession " << sessionID << ", " << channelName << " PDU from incorrect host, " " is " << addr << " should be " << remoteTransmitAddress); return RTP_Session::e_IgnorePacket; } } } if (!remoteAddress.IsAny() && remoteAddress.IsValid() && !appliedQOS) ApplyQOS(remoteAddress); return RTP_Session::e_ProcessPacket; } switch (socket.GetErrorNumber()) { case ECONNRESET : case ECONNREFUSED : PTRACE(2, "RTP_UDP\tSession " << sessionID << ", " << channelName << " port on remote not ready."); return RTP_Session::e_IgnorePacket; case EMSGSIZE : PTRACE(2, "RTP_UDP\tSession " << sessionID << ", " << channelName << " read packet too large"); return RTP_Session::e_IgnorePacket; case EAGAIN : // Shouldn't happen, but it does. return RTP_Session::e_IgnorePacket; default: PTRACE(1, "RTP_UDP\t" << channelName << " read error (" << socket.GetErrorNumber(PChannel::LastReadError) << "): " << socket.GetErrorText(PChannel::LastReadError)); return RTP_Session::e_AbortTransport; } } RTP_Session::SendReceiveStatus RTP_UDP::ReadDataPDU(RTP_DataFrame & frame) { SendReceiveStatus status = ReadDataOrControlPDU(*dataSocket, frame, TRUE); if (status != e_ProcessPacket) return status; // Check received PDU is big enough PINDEX pduSize = dataSocket->GetLastReadCount(); if (pduSize < RTP_DataFrame::MinHeaderSize || pduSize < frame.GetHeaderSize()) { PTRACE(2, "RTP_UDP\tSession " << sessionID << ", Received data packet too small: " << pduSize << " bytes"); return e_IgnorePacket; } frame.SetPayloadSize(pduSize - frame.GetHeaderSize()); return OnReceiveData(frame,*this); } RTP_Session::SendReceiveStatus RTP_UDP::ReadControlPDU() { RTP_ControlFrame frame(2048); SendReceiveStatus status = ReadDataOrControlPDU(*controlSocket, frame, FALSE); if (status != e_ProcessPacket) return status; PINDEX pduSize = controlSocket->GetLastReadCount(); if (pduSize < 4 || pduSize < 4+frame.GetPayloadSize()) { PTRACE(2, "RTP_UDP\tSession " << sessionID << ", Received control packet too small: " << pduSize << " bytes"); return e_IgnorePacket; } frame.SetSize(pduSize); return OnReceiveControl(frame); } PBoolean RTP_UDP::WriteData(RTP_DataFrame & frame) { if (shutdownWrite) { PTRACE(3, "RTP_UDP\tSession " << sessionID << ", Write shutdown."); shutdownWrite = FALSE; return FALSE; } // Trying to send a PDU before we are set up! if (remoteAddress.IsAny() || !remoteAddress.IsValid() || remoteDataPort == 0) return TRUE; switch (OnSendData(frame)) { case e_ProcessPacket : break; case e_IgnorePacket : return TRUE; case e_AbortTransport : return FALSE; } while (!dataSocket->WriteTo(frame.GetPointer(), frame.GetHeaderSize()+frame.GetPayloadSize(), remoteAddress, remoteDataPort)) { switch (dataSocket->GetErrorNumber()) { case ECONNRESET : case ECONNREFUSED : PTRACE(2, "RTP_UDP\tSession " << sessionID << ", data port on remote not ready."); break; default: PTRACE(1, "RTP_UDP\tSession " << sessionID << ", Write error on data port (" << dataSocket->GetErrorNumber(PChannel::LastWriteError) << "): " << dataSocket->GetErrorText(PChannel::LastWriteError)); return FALSE; } } return TRUE; } PBoolean RTP_UDP::WriteControl(RTP_ControlFrame & frame) { // Trying to send a PDU before we are set up! if (remoteAddress.IsAny() || !remoteAddress.IsValid() || remoteControlPort == 0) return true; while (!controlSocket->WriteTo(frame.GetPointer(), frame.GetCompoundSize(), remoteAddress, remoteControlPort)) { switch (controlSocket->GetErrorNumber()) { case ECONNRESET : case ECONNREFUSED : PTRACE(2, "RTP_UDP\tSession " << sessionID << ", control port on remote not ready."); break; default: PTRACE(1, "RTP_UDP\tSession " << sessionID << ", Write error on control port (" << controlSocket->GetErrorNumber(PChannel::LastWriteError) << "): " << controlSocket->GetErrorText(PChannel::LastWriteError)); return false; } } return true; } ///////////////////////////////////////////////////////////////////////////// h323plus/src/h323rtp.cxx0000644000175000017500000004136611642772500013645 0ustar markmark/* * h323rtp.cxx * * H.323 RTP protocol handler * * Open H323 Library * * Copyright (c) 1999-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Id: h323rtp.cxx,v 1.19 2011/10/05 06:12:16 shorne Exp $ * */ #include #ifdef __GNUC__ #pragma implementation "h323rtp.h" #endif #include "h323rtp.h" #include "h323ep.h" #include "h323pdu.h" #define new PNEW ///////////////////////////////////////////////////////////////////////////// H323_RTP_Session::H323_RTP_Session(const H323Connection & conn) : connection(conn) { } void H323_RTP_Session::OnTxStatistics(const RTP_Session & session) const { //connection.OnRTPStatistics(session); } void H323_RTP_Session::OnRxStatistics(const RTP_Session & session) const { connection.OnRTPStatistics(session); } void H323_RTP_Session::OnFinalStatistics(const RTP_Session & session) const { connection.OnRTPFinalStatistics(session); } void H323_RTP_Session::OnRxSenderReport(unsigned sessionID, const RTP_Session::SenderReport & send, const RTP_Session::ReceiverReportArray & recv ) const { connection.OnRxSenderReport(sessionID,send,recv); } ///////////////////////////////////////////////////////////////////////////// H323_RTP_UDP::H323_RTP_UDP(const H323Connection & conn, RTP_UDP & rtp_udp, RTP_QOS * rtpQos) : H323_RTP_Session(conn), rtp(rtp_udp) { const H323Transport & transport = connection.GetControlChannel(); PIPSocket::Address localAddress; transport.GetLocalAddress().GetIpAddress(localAddress); H323EndPoint & endpoint = connection.GetEndPoint(); PIPSocket::Address remoteAddress; transport.GetRemoteAddress().GetIpAddress(remoteAddress); #ifdef P_STUN PNatMethod * meth = NULL; if (conn.HasNATSupport()) { meth = conn.GetPreferedNatMethod(remoteAddress); if (meth != NULL) { PTRACE(4, "RTP\tNAT Method " << meth->GetName() << " selected for call."); } } #endif WORD firstPort = endpoint.GetRtpIpPortPair(); WORD nextPort = firstPort; while (!rtp.Open(localAddress, nextPort, nextPort, endpoint.GetRtpIpTypeofService(), conn, #ifdef P_STUN meth, #else NULL, #endif rtpQos)) { nextPort = endpoint.GetRtpIpPortPair(); if (nextPort == firstPort) return; } localAddress = rtp.GetLocalAddress(); endpoint.InternalTranslateTCPAddress(localAddress, remoteAddress, &conn); rtp.SetLocalAddress(localAddress); } unsigned H323_RTP_UDP::GetSessionID() const { return rtp.GetSessionID(); } PBoolean H323_RTP_UDP::OnSendingPDU(const H323_RTPChannel & channel, H245_H2250LogicalChannelParameters & param) const { PTRACE(3, "RTP\tOnSendingPDU"); param.m_sessionID = rtp.GetSessionID(); param.IncludeOptionalField(H245_H2250LogicalChannelParameters::e_mediaGuaranteedDelivery); param.m_mediaGuaranteedDelivery = FALSE; // unicast must have mediaControlChannel param.IncludeOptionalField(H245_H2250LogicalChannelParameters::e_mediaControlChannel); H323TransportAddress mediaControlAddress(rtp.GetLocalAddress(), rtp.GetLocalControlPort()); mediaControlAddress.SetPDU(param.m_mediaControlChannel); if (channel.GetDirection() == H323Channel::IsReceiver) { // set mediaChannel param.IncludeOptionalField(H245_H2250LogicalChannelAckParameters::e_mediaChannel); H323TransportAddress mediaAddress(rtp.GetLocalAddress(), rtp.GetLocalDataPort()); mediaAddress.SetPDU(param.m_mediaChannel); } H323Codec * codec = channel.GetCodec(); #ifdef H323_AUDIO_CODECS // Set flag for we are going to stop sending audio on silence if (codec != NULL && PIsDescendant(codec, H323AudioCodec) && channel.GetDirection() != H323Channel::IsReceiver) { param.IncludeOptionalField(H245_H2250LogicalChannelParameters::e_silenceSuppression); param.m_silenceSuppression = ((H323AudioCodec*)codec)->GetSilenceDetectionMode() != H323AudioCodec::NoSilenceDetection; } #endif // Set dynamic payload type, if is one RTP_DataFrame::PayloadTypes rtpPayloadType = channel.GetRTPPayloadType(); if (rtpPayloadType >= RTP_DataFrame::DynamicBase && rtpPayloadType <= RTP_DataFrame::MaxPayloadType) { param.IncludeOptionalField(H245_H2250LogicalChannelParameters::e_dynamicRTPPayloadType); param.m_dynamicRTPPayloadType = rtpPayloadType; } // Set the media packetization field if have an option to describe it. if (codec != NULL) { param.m_mediaPacketization.SetTag(H245_H2250LogicalChannelParameters_mediaPacketization::e_rtpPayloadType); if (H323SetRTPPacketization(param.m_mediaPacketization, codec->GetMediaFormat(), rtpPayloadType)) param.IncludeOptionalField(H245_H2250LogicalChannelParameters::e_mediaPacketization); } // GQoS #if P_QOS if (connection.H245QoSEnabled() && WriteTransportCapPDU(param.m_transportCapability,channel)) { param.IncludeOptionalField(H245_H2250LogicalChannelParameters::e_transportCapability); } #endif return TRUE; } PBoolean H323_RTP_UDP::OnSendingAltPDU(const H323_RTPChannel & channel, H245_ArrayOf_GenericInformation & generic) const { return connection.OnSendingOLCGenericInformation(channel.GetSessionID(),generic,false); } void H323_RTP_UDP::OnSendingAckPDU(const H323_RTPChannel & channel, H245_H2250LogicalChannelAckParameters & param) const { PTRACE(3, "RTP\tOnSendingAckPDU"); // set mediaControlChannel param.IncludeOptionalField(H245_H2250LogicalChannelAckParameters::e_mediaControlChannel); H323TransportAddress mediaControlAddress(rtp.GetLocalAddress(), rtp.GetLocalControlPort()); mediaControlAddress.SetPDU(param.m_mediaControlChannel); // set mediaChannel param.IncludeOptionalField(H245_H2250LogicalChannelAckParameters::e_mediaChannel); H323TransportAddress mediaAddress(rtp.GetLocalAddress(), rtp.GetLocalDataPort()); mediaAddress.SetPDU(param.m_mediaChannel); // Set dynamic payload type, if is one int rtpPayloadType = channel.GetRTPPayloadType(); if (rtpPayloadType >= RTP_DataFrame::DynamicBase && rtpPayloadType <= RTP_DataFrame::MaxPayloadType) { param.IncludeOptionalField(H245_H2250LogicalChannelAckParameters::e_dynamicRTPPayloadType); param.m_dynamicRTPPayloadType = rtpPayloadType; } } PBoolean H323_RTP_UDP::ExtractTransport(const H245_TransportAddress & pdu, PBoolean isDataPort, unsigned & errorCode) { if (pdu.GetTag() != H245_TransportAddress::e_unicastAddress) { PTRACE(1, "RTP_UDP\tOnly unicast supported at this time"); errorCode = H245_OpenLogicalChannelReject_cause::e_multicastChannelNotAllowed; return FALSE; } H323TransportAddress transAddr = pdu; PIPSocket::Address ip; WORD port; if (transAddr.GetIpAndPort(ip, port)) return rtp.SetRemoteSocketInfo(ip, port, isDataPort); return FALSE; } PBoolean H323_RTP_UDP::OnReceivedPDU(H323_RTPChannel & channel, const H245_H2250LogicalChannelParameters & param, unsigned & errorCode) { if (param.m_sessionID != rtp.GetSessionID()) { PTRACE(1, "RTP_UDP\tOpen of " << channel << " with invalid session: " << param.m_sessionID); errorCode = H245_OpenLogicalChannelReject_cause::e_invalidSessionID; return FALSE; } PBoolean ok = FALSE; if (param.HasOptionalField(H245_H2250LogicalChannelParameters::e_mediaControlChannel)) { if (!ExtractTransport(param.m_mediaControlChannel, FALSE, errorCode)) { PTRACE(1, "RTP_UDP\tFailed to extract mediaControl transport for " << channel); return FALSE; } ok = TRUE; } if (param.HasOptionalField(H245_H2250LogicalChannelParameters::e_mediaChannel)) { if (ok && channel.GetDirection() == H323Channel::IsReceiver) PTRACE(3, "RTP_UDP\tIgnoring media transport for " << channel); else if (!ExtractTransport(param.m_mediaChannel, TRUE, errorCode)) { PTRACE(1, "RTP_UDP\tFailed to extract media transport for " << channel); return FALSE; } ok = TRUE; } if (param.HasOptionalField(H245_H2250LogicalChannelParameters::e_dynamicRTPPayloadType)) channel.SetDynamicRTPPayloadType(param.m_dynamicRTPPayloadType); H323Codec * codec = channel.GetCodec(); if (codec != NULL && param.HasOptionalField(H245_H2250LogicalChannelParameters::e_mediaPacketization) && param.m_mediaPacketization.GetTag() == H245_H2250LogicalChannelParameters_mediaPacketization::e_rtpPayloadType) H323GetRTPPacketization(codec->GetWritableMediaFormat(), param.m_mediaPacketization); // GQoS #if P_QOS if (param.HasOptionalField(H245_H2250LogicalChannelParameters::e_transportCapability) && connection.H245QoSEnabled()) { H245_TransportCapability trans = param.m_transportCapability; ReadTransportCapPDU(trans,channel); } #endif if (ok) return TRUE; PTRACE(1, "RTP_UDP\tNo mediaChannel or mediaControlChannel specified for " << channel); errorCode = H245_OpenLogicalChannelReject_cause::e_unspecified; return FALSE; } PBoolean H323_RTP_UDP::OnReceivedAckPDU(H323_RTPChannel & channel, const H245_H2250LogicalChannelAckParameters & param) { if (!param.HasOptionalField(H245_H2250LogicalChannelAckParameters::e_sessionID)) { PTRACE(1, "RTP_UDP\tNo session specified"); } if (param.m_sessionID != rtp.GetSessionID()) { if (rtp.GetSessionID() == 0) { if (param.m_sessionID > 3) { //update SessionID of the channel with the new one //fix for Tandberg as it allows open only with SessioID=0, but then in OLC ACK sends Session ID 32 up PTRACE(2, "RTP_UDP\tAck for invalid session: " << param.m_sessionID << " Change the LC SessionID: "<< rtp.GetSessionID() << " to " << param.m_sessionID); rtp.SetSessionID(param.m_sessionID); } } else { PTRACE(1, "RTP_UDP\tAck for invalid session: " << param.m_sessionID); } } if (!param.HasOptionalField(H245_H2250LogicalChannelAckParameters::e_mediaControlChannel)) { PTRACE(1, "RTP_UDP\tNo mediaControlChannel specified"); return FALSE; } unsigned errorCode; if (!ExtractTransport(param.m_mediaControlChannel, FALSE, errorCode)) return FALSE; if (!param.HasOptionalField(H245_H2250LogicalChannelAckParameters::e_mediaChannel)) { PTRACE(1, "RTP_UDP\tNo mediaChannel specified"); return FALSE; } if (!ExtractTransport(param.m_mediaChannel, TRUE, errorCode)) return FALSE; if (param.HasOptionalField(H245_H2250LogicalChannelAckParameters::e_dynamicRTPPayloadType)) channel.SetDynamicRTPPayloadType(param.m_dynamicRTPPayloadType); return TRUE; } PBoolean H323_RTP_UDP::OnReceivedAckAltPDU(H323_RTPChannel & channel, const H245_ArrayOf_GenericInformation & alternate) { return connection.OnReceiveOLCGenericInformation(channel.GetSessionID(),alternate, true); } void H323_RTP_UDP::OnSendRasInfo(H225_RTPSession & info) { info.m_sessionId = rtp.GetSessionID(); info.m_ssrc = rtp.GetSyncSourceOut(); info.m_cname = rtp.GetCanonicalName(); const H323Transport & transport = connection.GetControlChannel(); transport.SetUpTransportPDU(info.m_rtpAddress.m_recvAddress, rtp.GetLocalDataPort()); H323TransportAddress ta1(rtp.GetRemoteAddress(), rtp.GetRemoteDataPort()); ta1.SetPDU(info.m_rtpAddress.m_sendAddress); transport.SetUpTransportPDU(info.m_rtcpAddress.m_recvAddress, rtp.GetLocalControlPort()); H323TransportAddress ta2(rtp.GetRemoteAddress(), rtp.GetRemoteDataPort()); ta2.SetPDU(info.m_rtcpAddress.m_sendAddress); } #if P_QOS PBoolean H323_RTP_UDP::WriteTransportCapPDU(H245_TransportCapability & cap, const H323_RTPChannel & channel) const { cap.IncludeOptionalField(H245_TransportCapability::e_mediaChannelCapabilities); H245_ArrayOf_MediaChannelCapability & mediaCaps = cap.m_mediaChannelCapabilities; mediaCaps.SetSize(1); H245_MediaChannelCapability & mediaCap = mediaCaps[0]; mediaCap.IncludeOptionalField(H245_MediaChannelCapability::e_mediaTransport); H245_MediaTransportType & transport = mediaCap.m_mediaTransport; transport.SetTag(H245_MediaTransportType::e_ip_UDP); PQoS & qos = rtp.GetQOS(); int m_dscp = qos.GetDSCP(); if (m_dscp == 0) return true; cap.IncludeOptionalField(H245_TransportCapability::e_qOSCapabilities); H245_ArrayOf_QOSCapability & QoSs = cap.m_qOSCapabilities; H245_QOSCapability Cap = H245_QOSCapability(); Cap.IncludeOptionalField(H245_QOSCapability::e_localQoS); PASN_Boolean & localqos = Cap.m_localQoS; localqos.SetValue(TRUE); Cap.IncludeOptionalField(H245_QOSCapability::e_dscpValue); PASN_Integer & dscp = Cap.m_dscpValue; dscp = m_dscp; if (PUDPSocket::SupportQoS(rtp.GetLocalAddress())) { Cap.IncludeOptionalField(H245_QOSCapability::e_rsvpParameters); H245_RSVPParameters & rsvp = Cap.m_rsvpParameters; if (channel.GetDirection() == H323Channel::IsReceiver) { /// If Reply don't have to send body rtp.EnableGQoS(TRUE); return true; } rsvp.IncludeOptionalField(H245_RSVPParameters::e_qosMode); H245_QOSMode & mode = rsvp.m_qosMode; if (qos.GetServiceType() == SERVICETYPE_GUARANTEED) mode.SetTag(H245_QOSMode::e_guaranteedQOS); else mode.SetTag(H245_QOSMode::e_controlledLoad); rsvp.IncludeOptionalField(H245_RSVPParameters::e_tokenRate); rsvp.m_tokenRate = qos.GetTokenRate(); rsvp.IncludeOptionalField(H245_RSVPParameters::e_bucketSize); rsvp.m_bucketSize = qos.GetTokenBucketSize(); rsvp.HasOptionalField(H245_RSVPParameters::e_peakRate); rsvp.m_peakRate = qos.GetPeakBandwidth(); } QoSs.SetSize(1); QoSs[0] = Cap; return true; } void H323_RTP_UDP::ReadTransportCapPDU(const H245_TransportCapability & cap, H323_RTPChannel & channel) { if (!cap.HasOptionalField(H245_TransportCapability::e_qOSCapabilities)) return; const H245_ArrayOf_QOSCapability QoSs = cap.m_qOSCapabilities; for (PINDEX i =0; i < QoSs.GetSize(); i++) { PQoS & qos = rtp.GetQOS(); const H245_QOSCapability & QoS = QoSs[i]; // if (QoS.HasOptionalField(H245_QOSCapability::e_localQoS)) { // PASN_Boolean & localqos = QoS.m_localQoS; // } if (QoS.HasOptionalField(H245_QOSCapability::e_dscpValue)) { const PASN_Integer & dscp = QoS.m_dscpValue; qos.SetDSCP(dscp); } if (PUDPSocket::SupportQoS(rtp.GetLocalAddress())) { if (!QoS.HasOptionalField(H245_QOSCapability::e_rsvpParameters)) { PTRACE(4,"TRANS\tDisabling GQoS"); rtp.EnableGQoS(FALSE); return; } const H245_RSVPParameters & rsvp = QoS.m_rsvpParameters; if (channel.GetDirection() != H323Channel::IsReceiver) { rtp.EnableGQoS(TRUE); return; } if (rsvp.HasOptionalField(H245_RSVPParameters::e_qosMode)) { const H245_QOSMode & mode = rsvp.m_qosMode; if (mode.GetTag() == H245_QOSMode::e_guaranteedQOS) { qos.SetWinServiceType(SERVICETYPE_GUARANTEED); qos.SetDSCP(PQoS::guaranteedDSCP); } else { qos.SetWinServiceType(SERVICETYPE_CONTROLLEDLOAD); qos.SetDSCP(PQoS::controlledLoadDSCP); } } if (rsvp.HasOptionalField(H245_RSVPParameters::e_tokenRate)) qos.SetAvgBytesPerSec(rsvp.m_tokenRate); if (rsvp.HasOptionalField(H245_RSVPParameters::e_bucketSize)) qos.SetMaxFrameBytes(rsvp.m_bucketSize); if (rsvp.HasOptionalField(H245_RSVPParameters::e_peakRate)) qos.SetPeakBytesPerSec(rsvp.m_peakRate); } } } #endif ///////////////////////////////////////////////////////////////////////////// h323plus/src/codecs.cxx0000644000175000017500000013320511516743574013703 0ustar markmark/* * codecs.cxx * * H.323 protocol handler * * Open H323 Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Contributor(s): ______________________________________. * * $Log: codecs.cxx,v $ * Revision 1.16 2011/01/23 06:15:24 shorne * Commented out the RemoveAllOptions for the moment on the codec destructors to avoid occational issues on end of call * * Revision 1.15 2011/01/14 14:59:58 shorne * Moved RemoveAllOptions to the class destructor to resolve issue with transitioning from fast connect to slow connect * * Revision 1.14 2011/01/12 13:11:41 shorne * Added ability to remove all mediaformat options * * Revision 1.13 2010/09/19 05:43:39 shorne * Added SetSupportedFormats * * Revision 1.12 2010/06/06 14:53:26 shorne * Added AVSync support, Aspect Ratio management, flow Control, Video 90k clock, fixes for wideband codecs and generic audio capabilities * * Revision 1.11 2010/05/02 22:43:05 shorne * Added RTP Information structure to be able to support A/V sync * * Revision 1.10 2010/02/10 01:03:06 shorne * Ensure AEC is initialized * * Revision 1.9 2009/08/21 04:35:47 shorne * Expressly reference codecs.h to avoid problems with windows SDK codecs.h * * Revision 1.8 2009/08/20 21:05:49 willamowius * fix comment * * Revision 1.7 2009/07/09 15:11:12 shorne * Simplfied and standardised compiler directives * * Revision 1.6 2008/05/23 11:21:12 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.5 2008/04/25 00:54:12 shorne * Added ability to set the video maximum bitrate * * Revision 1.4 2007/11/14 18:48:44 willamowius * avoid comparing a uninitialized variable * * Revision 1.3 2007/11/10 13:33:51 shorne * Fix reference to the correct AEC library based on the type of build * * Revision 1.2 2007/10/19 19:54:17 shorne * ported latest Video updates in OpenH323 committed after h323plus initial fork thanks * Robert * * Revision 1.1 2007/08/06 20:51:03 shorne * First commit of h323plus * * Revision 1.92.2.8 2007/09/03 09:45:47 rjongbloed * Fixed failure to propagate meda format options to codec. * * Revision 1.92.2.7 2007/07/19 20:10:28 shorne * Changed HAS_AEC to H323_AEC * * Revision 1.92.2.6 2007/03/24 23:39:43 shorne * More H.239 work * * Revision 1.92.2.5 2007/03/06 00:18:13 shorne * Added Debug AEC support * * Revision 1.92.2.4 2007/03/05 11:57:12 shorne * Fixed compile issue with AEC * * Revision 1.92.2.3 2007/02/18 18:59:26 shorne * AEC tweaks * * Revision 1.92.2.2 2007/02/06 11:45:59 shorne * Added ability to send general codec options to Video Plugins * * Revision 1.92.2.1 2006/12/23 19:08:02 shorne * Plugin video codecs & sundry * * Revision 1.92 2006/05/16 11:28:58 shorne * added AEC support and more call hold support. * * Revision 1.91 2006/01/26 03:31:09 shorne * Add the ability to remove a local input device when placing a call on hold * * Revision 1.90 2005/01/03 06:25:54 csoutheren * Added extensive support for disabling code modules at compile time * * Revision 1.89 2004/11/29 06:30:53 csoutheren * Added support for wideband codecs * * Revision 1.88 2004/07/03 06:49:28 rjongbloed * Split video temporal/spatial trade off H.245 packets to separate command and * indication functions and added quality parameter, thanks Guilhem Tardy. * Added PTRACE_PARAM() macro to fix warnings on parameters used in PTRACE * macros only. * * Revision 1.87 2004/05/09 10:22:26 csoutheren * Changed new DecodeFrame to handle bytes per frame * * Revision 1.86 2004/05/09 10:08:36 csoutheren * Changed new DecodeFrame to return bytes decoded rather than samples decoded * Added support for new DecodeFrame to plugin manager * * Revision 1.85 2004/05/02 04:52:24 rjongbloed * Fixed problems with G.711 caused by fixing problem with G.723.1-5k3 mode. * * Revision 1.84 2004/04/16 04:04:28 csoutheren * Prevent codecs with variable length frrames from doing strange things * * Revision 1.83 2004/02/04 10:29:27 rjongbloed * Fixed G.726 by allowing for more bits per pixels sizes in streamed codec, thanks Kevin Bouchard * * Revision 1.82 2003/11/12 11:14:51 csoutheren * Added H323FramedAudioCodec::DecodeSilenceFrame thanks to Henry Harrison of AliceStreet * * Revision 1.81 2003/07/16 10:43:13 csoutheren * Added SwapChannel function to H323Codec to allow media hold channels * to work better. Thanks to Federico Pinna * * Revision 1.80 2002/12/16 09:11:19 robertj * Added new video bit rate control, thanks Walter H. Whitlock * * Revision 1.79 2002/08/05 10:03:47 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.78 2002/05/29 04:48:48 robertj * Changed framed codec so if cannot decode frame just plays silence instead * of returning error and thus shutting down channel, thanks Federico Pinna * * Revision 1.77 2002/04/16 03:27:54 dereks * Correct logical flaw in CloseRawDataChannel method. * * Revision 1.76 2002/04/05 00:52:17 dereks * Minor tweaks to cope with received h261 messages. * * Revision 1.75 2002/02/26 18:00:18 rogerh * Improve the information given in the trace for codec truncation * * Revision 1.74 2002/01/23 06:13:56 robertj * Added filter function hooks to codec raw data channel. * * Revision 1.73 2002/01/23 01:58:28 robertj * Added function to determine if codecs raw data channel is native format. * * Revision 1.72 2002/01/22 16:09:38 rogerh * Back out the DTMF detection from H323FramedAudioCodec::Write(). * There will shortly be a better place for it. * * Revision 1.71 2002/01/22 15:21:47 rogerh * Add DTMF decoding to PCM audio streams. This has been tested with * NetMeeting sending Dial Pad codes, using the G.711 codec. * At this time, DTMF codes (fron NetMeeting) are just displayed on the * screen and are not passed up to the users application. * * Revision 1.70 2002/01/13 23:55:21 robertj * Added mutex so can change raw data channel while reading/writing from codec. * * Revision 1.69 2002/01/06 05:34:05 robertj * Fixed encoding error for 4 bit streamed codecs. * * Revision 1.68 2001/12/04 05:13:12 robertj * Added videa bandwidth limiting code for H.261, thanks Jose Luis Urien. * * Revision 1.67 2001/11/28 00:09:14 dereks * Additional information in PTRACE output. * * Revision 1.66 2001/11/16 01:05:35 craigs * Changed to allow access to uLaw/ALaw to/from linear functions * * Revision 1.65 2001/10/23 02:17:16 dereks * Initial release of cu30 video codec. * * Revision 1.64 2001/09/25 03:14:47 dereks * Add constant bitrate control for the h261 video codec. * Thanks Tiziano Morganti for the code to set bit rate. Good work! * * Revision 1.63 2001/09/21 02:50:06 robertj * Implemented static object for all "known" media formats. * * Revision 1.62 2001/09/12 07:48:05 robertj * Fixed various problems with tracing. * * Revision 1.61 2001/09/11 01:24:36 robertj * Added conditional compilation to remove video and/or audio codecs. * * Revision 1.60 2001/08/06 03:08:56 robertj * Fission of h323.h to h323ep.h & h323con.h, h323.h now just includes files. * * Revision 1.59 2001/04/03 09:34:13 robertj * Fixed output of partial frames when short changed by transmitter with G.711 * * Revision 1.58 2001/03/29 23:45:08 robertj * Added ability to get current silence detect state and threshold. * Changed default signal on deadband time to be much shorter. * * Revision 1.57 2001/02/09 05:13:55 craigs * Added pragma implementation to (hopefully) reduce the executable image size * under Linux * * Revision 1.56 2001/01/25 07:27:16 robertj * Major changes to add more flexible OpalMediaFormat class to normalise * all information about media types, especially codecs. * * Revision 1.55 2000/12/19 22:33:44 dereks * Adjust so that the video channel is used for reading/writing raw video * data, which better modularizes the video codec. * * Revision 1.54 2000/09/22 01:35:49 robertj * Added support for handling LID's that only do symmetric codecs. * * Revision 1.53 2000/08/31 08:15:41 robertj * Added support for dynamic RTP payload types in H.245 OpenLogicalChannel negotiations. * * Revision 1.52 2000/07/14 14:08:10 robertj * Fixed stream based codec so can support stream "frames" less than maximum specified. * * Revision 1.51 2000/05/16 02:04:17 craigs * Added access functions for silence compression mode * * Revision 1.50 2000/05/04 11:52:35 robertj * Added Packets Too Late statistics, requiring major rearrangement of jitter * buffer code, not also changes semantics of codec Write() function slightly. * * Revision 1.49 2000/05/02 04:32:26 robertj * Fixed copyright notice comment. * * Revision 1.48 2000/04/28 12:58:37 robertj * Changed silence detection code so does not PTRACE unless threshold actually changes. * * Revision 1.47 2000/04/10 18:52:45 robertj * Improved "bootstrap" of silence detection algorithm. * * Revision 1.46 2000/03/23 03:00:06 robertj * Changed framed codec so only writes max of bytesPerFrame regardless of length. * * Revision 1.45 2000/02/04 05:11:19 craigs * Updated for new Makefiles and for new video transmission code * * Revision 1.44 2000/01/13 04:03:45 robertj * Added video transmission * * Revision 1.43 1999/12/31 00:05:36 robertj * Added Microsoft ACM G.723.1 codec capability. * * Revision 1.42 1999/12/23 23:02:35 robertj * File reorganision for separating RTP from H.323 and creation of LID for VPB support. * * Revision 1.41 1999/12/21 07:36:43 craigs * Fixed problem in H323VideoCodec destructor that caused hang or segv on exit * * Revision 1.40 1999/11/29 08:59:09 craigs * Added new code for new video code interface * * Revision 1.39 1999/11/29 04:50:11 robertj * Added adaptive threshold calculation to silence detection. * * Revision 1.38 1999/11/20 00:53:47 robertj * Fixed ability to have variable sized frames in single RTP packet under G.723.1 * * Revision 1.37 1999/11/13 14:10:59 robertj * Changes to make silence detection selectable. * * Revision 1.36 1999/11/11 23:28:46 robertj * Added first cut silence detection algorithm. * * Revision 1.35 1999/11/04 00:45:07 robertj * Added extra constructors for nonStandard codecs and fixed receiveAndTransmitAudioCapability problem. * * Revision 1.34 1999/11/01 00:51:13 robertj * Fixed problem where codec close does not dispose of attached channel. * * Revision 1.33 1999/10/19 00:04:57 robertj * Changed OpenAudioChannel and OpenVideoChannel to allow a codec AttachChannel with no autodelete. * * Revision 1.32 1999/10/14 12:02:40 robertj * Fixed assignment of t35 info in nonstandard capabilities (wrong way around). * * Revision 1.31 1999/10/10 23:00:15 craigs * Fixed problem with raw channel ptrs not being NULLed out after deletion * * Revision 1.30 1999/10/09 02:15:08 craigs * Added codec to OpenVideoDevice and OpenAudioChannel * * Revision 1.29 1999/10/09 01:20:48 robertj * Fixed error in G711 packet size and trace message * * Revision 1.28 1999/10/08 09:59:03 robertj * Rewrite of capability for sending multiple audio frames * * Revision 1.27 1999/10/08 08:32:22 robertj * Fixed misleading trace text. * * Revision 1.26 1999/10/08 04:58:38 robertj * Added capability for sending multiple audio frames in single RTP packet * * Revision 1.25 1999/09/23 07:25:12 robertj * Added open audio and video function to connection and started multi-frame codec send functionality. * * Revision 1.24 1999/09/21 14:51:34 robertj * Fixed NonStandardCapabilityInfo class virtual destructor (and name). * * Revision 1.23 1999/09/21 14:14:36 robertj * Added non-standard codec capability classes * * Revision 1.22 1999/09/21 08:10:03 craigs * Added support for video devices and H261 codec * * Revision 1.21 1999/09/18 13:24:38 craigs * Added ability to disable jitter buffer * Added ability to access entire RTP packet in codec Write * * Revision 1.20 1999/09/13 13:59:14 robertj * Removed incorrect comment. * * Revision 1.19 1999/09/08 04:05:49 robertj * Added support for video capabilities & codec, still needs the actual codec itself! * * Revision 1.18 1999/08/31 12:34:18 robertj * Added gatekeeper support. * * Revision 1.17 1999/08/25 05:05:36 robertj * Added UserInput capability. * Allowed the attachment of a channel on a codec to optionally delete the channel object, * Improved opening of audio codecs, PSoundChannel creation now in endpoint. * * Revision 1.16 1999/07/16 16:05:48 robertj * Added "human readable" codec type name display. * * Revision 1.15 1999/07/16 15:01:30 robertj * Added message print when starting GSM codec. * * Revision 1.14 1999/07/15 14:45:36 robertj * Added propagation of codec open error to shut down logical channel. * Fixed control channel start up bug introduced with tunnelling. * * Revision 1.13 1999/07/13 09:53:24 robertj * Fixed some problems with jitter buffer and added more debugging. * * Revision 1.12 1999/07/10 02:42:53 robertj * Fixed interopability problem with NetMetting 2.1 G711 capability. * * Revision 1.11 1999/07/09 06:09:49 robertj * Major implementation. An ENORMOUS amount of stuff added everywhere. * * Revision 1.10 1999/06/24 13:32:45 robertj * Fixed ability to change sound device on codec and fixed NM3 G.711 compatibility * * Revision 1.9 1999/06/22 13:49:40 robertj * Added GSM support and further RTP protocol enhancements. * * Revision 1.8 1999/06/14 15:08:40 robertj * Added GSM codec class frame work (still no actual codec). * * Revision 1.7 1999/06/14 08:44:58 robertj * Fixed sound buffers to be correct size for stream based audio. * GNU C++ compatibility * * Revision 1.6 1999/06/14 06:39:08 robertj * Fixed problem with getting transmit flag to channel from PDU negotiator * * Revision 1.5 1999/06/14 05:15:55 robertj * Changes for using RTP sessions correctly in H323 Logical Channel context * * Revision 1.4 1999/06/13 12:41:14 robertj * Implement logical channel transmitter. * Fixed H245 connect on receiving call. * * Revision 1.3 1999/06/09 05:26:19 robertj * Major restructuring of classes. * * Revision 1.2 1999/06/06 06:06:36 robertj * Changes for new ASN compiler and v2 protocol ASN files. * * Revision 1.1 1999/01/16 01:31:04 robertj * Initial revision * */ #include #ifdef __GNUC__ #pragma implementation "codecs.h" #endif #ifdef _MSC_VER #include "../include/codecs.h" #else #include "codecs.h" #endif #include "channels.h" #include "h323pdu.h" #include "h323con.h" #ifdef H323_AEC #include #if _WIN32 #if _DEBUG #pragma comment(lib,"paecd.lib") #elif PTRACING #pragma comment(lib,"paec.lib") #else #pragma comment(lib,"paecn.lib") #endif #endif #endif // H323_AEC #define new PNEW extern "C" { unsigned char linear2ulaw(int pcm_val); int ulaw2linear(unsigned char u_val); unsigned char linear2alaw(int pcm_val); int alaw2linear(unsigned char u_val); }; ///////////////////////////////////////////////////////////////////////////// H323Codec::H323Codec(const OpalMediaFormat & fmt, Direction dir) : mediaFormat(fmt) { logicalChannel = NULL; direction = dir; lastSequenceNumber = 1; rawDataChannel = NULL; deleteChannel = FALSE; rtpInformation.m_sessionID=0; rtpInformation.m_sendTime = 0; rtpInformation.m_frameLost = 0; rtpInformation.m_recvTime = PTime(); rtpInformation.m_frame=NULL; rtpSync.m_realTimeStamp = 0; rtpSync.m_rtpTimeStamp = 0; } PBoolean H323Codec::Open(H323Connection & /*connection*/) { return TRUE; } unsigned H323Codec::GetFrameRate() const { return mediaFormat.GetFrameTime(); } void H323Codec::OnFlowControl(long PTRACE_PARAM(bitRateRestriction)) { PTRACE(3, "Codec\tOnFlowControl: " << bitRateRestriction); } void H323Codec::OnMiscellaneousCommand(const H245_MiscellaneousCommand_type & PTRACE_PARAM(type)) { PTRACE(3, "Codec\tOnMiscellaneousCommand: " << type.GetTagName()); } void H323Codec::OnMiscellaneousIndication(const H245_MiscellaneousIndication_type & PTRACE_PARAM(type)) { PTRACE(3, "Codec\tOnMiscellaneousIndication: " << type.GetTagName()); } PBoolean H323Codec::AttachChannel(PChannel * channel, PBoolean autoDelete) { PWaitAndSignal mutex(rawChannelMutex); CloseRawDataChannel(); rawDataChannel = channel; deleteChannel = autoDelete; if (channel == NULL){ PTRACE(3, "Codec\tError attaching channel. channel is NULL"); return FALSE; } return channel->IsOpen(); } PChannel * H323Codec::SwapChannel(PChannel * newChannel, PBoolean autoDelete) { PWaitAndSignal mutex(rawChannelMutex); PChannel * oldChannel = rawDataChannel; rawDataChannel = newChannel; deleteChannel = autoDelete; return oldChannel; } PBoolean H323Codec::CloseRawDataChannel() { if (rawDataChannel == NULL) return FALSE; PBoolean closeOK = rawDataChannel->Close(); if (deleteChannel) { delete rawDataChannel; rawDataChannel = NULL; } return closeOK; } PBoolean H323Codec::IsRawDataChannelNative() const { return FALSE; } PBoolean H323Codec::ReadRaw(void * data, PINDEX size, PINDEX & length) { if (rawDataChannel == NULL) { PTRACE(1, "Codec\tNo audio channel for read"); return FALSE; } if (!rawDataChannel->Read(data, size)) { PTRACE(1, "Codec\tAudio read failed: " << rawDataChannel->GetErrorText(PChannel::LastReadError)); return FALSE; } length = rawDataChannel->GetLastReadCount(); for (PINDEX i = 0; i < filters.GetSize(); i++) { FilterInfo info(*this, data, size, length); filters[i](info, 0); length = info.bufferLength; } return TRUE; } PBoolean H323Codec::WriteRaw(void * data, PINDEX length, void * mark) { if (rawDataChannel == NULL) { PTRACE(1, "Codec\tNo audio channel for write"); return FALSE; } for (PINDEX i = 0; i < filters.GetSize(); i++) { FilterInfo info(*this, data, length, length); filters[i](info, 0); length = info.bufferLength; } #if PTLIB_VER < 290 if (rawDataChannel->Write(data, length)) #else if (rawDataChannel->Write(data, length, mark)) #endif return TRUE; PTRACE(1, "Codec\tWrite failed: " << rawDataChannel->GetErrorText(PChannel::LastWriteError)); return FALSE; } PBoolean H323Codec::AttachLogicalChannel(H323Channel *channel) { logicalChannel = channel; rtpInformation.m_sessionID=logicalChannel->GetSessionID(); return TRUE; } void H323Codec::AddFilter(const PNotifier & notifier) { rawChannelMutex.Wait(); filters.Append(new PNotifier(notifier)); rawChannelMutex.Signal(); } PBoolean H323Codec::SetRawDataHeld(PBoolean /*hold*/) { return FALSE; } PBoolean H323Codec::OnRxSenderReport(DWORD rtpTimeStamp, const PTime & realTimeStamp) { rtpSync.m_rtpTimeStamp = rtpTimeStamp; rtpSync.m_realTimeStamp = realTimeStamp; return true; } PTime H323Codec::CalculateRTPSendTime(DWORD timeStamp, unsigned rate) const { if (rtpSync.m_rtpTimeStamp == 0) return 0; // Need to review this DWORD timeDiff = (timeStamp - rtpSync.m_rtpTimeStamp)/rate; return rtpSync.m_realTimeStamp + timeDiff; } ///////////////////////////////////////////////////////////////////////////// #ifdef H323_VIDEO H323VideoCodec::H323VideoCodec(const OpalMediaFormat & fmt, Direction dir) : H323Codec(fmt, dir) { frameWidth = frameHeight = 0; sarWidth = sarHeight = 1; targetFrameTimeMs = 0; videoBitRateControlModes = None; oldLength = 0; oldTime = 0; newTime = 0; } H323VideoCodec::~H323VideoCodec() { Close(); //The close operation may delete the rawDataChannel. //mediaFormat.RemoveAllOptions(); } PBoolean H323VideoCodec::Open(H323Connection & connection) { #ifdef H323_H239 if (rtpInformation.m_sessionID != OpalMediaFormat::DefaultVideoSessionID) return connection.OpenExtendedVideoChannel(direction == Encoder, *this); else #endif return connection.OpenVideoChannel(direction == Encoder, *this); } void H323VideoCodec::OnMiscellaneousCommand(const H245_MiscellaneousCommand_type & type) { switch (type.GetTag()) { case H245_MiscellaneousCommand_type::e_videoFreezePicture : OnFreezePicture(); break; case H245_MiscellaneousCommand_type::e_videoFastUpdatePicture : OnFastUpdatePicture(); break; case H245_MiscellaneousCommand_type::e_videoFastUpdateGOB : { const H245_MiscellaneousCommand_type_videoFastUpdateGOB & fuGOB = type; OnFastUpdateGOB(fuGOB.m_firstGOB, fuGOB.m_numberOfGOBs); break; } case H245_MiscellaneousCommand_type::e_videoFastUpdateMB : { const H245_MiscellaneousCommand_type_videoFastUpdateMB & fuMB = type; OnFastUpdateMB(fuMB.HasOptionalField(H245_MiscellaneousCommand_type_videoFastUpdateMB::e_firstGOB) ? (int)fuMB.m_firstGOB : -1, fuMB.HasOptionalField(H245_MiscellaneousCommand_type_videoFastUpdateMB::e_firstMB) ? (int)fuMB.m_firstMB : -1, fuMB.m_numberOfMBs); break; } case H245_MiscellaneousCommand_type::e_lostPartialPicture : OnLostPartialPicture(); break; case H245_MiscellaneousCommand_type::e_lostPicture : OnLostPicture(); break; case H245_MiscellaneousCommand_type::e_videoTemporalSpatialTradeOff : { const PASN_Integer & newQuality = type; OnVideoTemporalSpatialTradeOffCommand(newQuality); break; } } H323Codec::OnMiscellaneousCommand(type); } void H323VideoCodec::OnFreezePicture() { PTRACE(3, "Codec\tOnFreezePicture()"); } void H323VideoCodec::OnFastUpdatePicture() { PTRACE(3, "Codec\tOnFastUpdatePicture()"); } void H323VideoCodec::OnFastUpdateGOB(unsigned PTRACE_PARAM(firstGOB), unsigned PTRACE_PARAM(numberOfGOBs)) { PTRACE(3, "Codecs\tOnFastUpdateGOB(" << firstGOB << ',' << numberOfGOBs << ')'); } void H323VideoCodec::OnFastUpdateMB(int PTRACE_PARAM(firstGOB), int PTRACE_PARAM(firstMB), unsigned PTRACE_PARAM(numberOfMBs)) { PTRACE(3, "Codecs\tOnFastUpdateMB(" << firstGOB << ',' << firstMB << ',' << numberOfMBs << ')'); } void H323VideoCodec::OnLostPartialPicture() { PTRACE(3, "Codec\tOnLostPartialPicture()"); } void H323VideoCodec::OnLostPicture() { PTRACE(3, "Codec\tOnLostPicture()"); } void H323VideoCodec::OnMiscellaneousIndication(const H245_MiscellaneousIndication_type & type) { switch (type.GetTag()) { case H245_MiscellaneousIndication_type::e_videoIndicateReadyToActivate : OnVideoIndicateReadyToActivate(); break; case H245_MiscellaneousIndication_type::e_videoTemporalSpatialTradeOff : { const PASN_Integer & newQuality = type; OnVideoTemporalSpatialTradeOffIndication(newQuality); break; } case H245_MiscellaneousIndication_type::e_videoNotDecodedMBs : { const H245_MiscellaneousIndication_type_videoNotDecodedMBs & vndMB = type; OnVideoNotDecodedMBs(vndMB.m_firstMB, vndMB.m_numberOfMBs, vndMB.m_temporalReference); break; } } H323Codec::OnMiscellaneousIndication(type); } void H323VideoCodec::OnVideoIndicateReadyToActivate() { PTRACE(3, "Codec\tOnVideoIndicateReadyToActivate()"); } void H323VideoCodec::OnVideoTemporalSpatialTradeOffCommand(int PTRACE_PARAM(newQuality)) { PTRACE(3, "Codecs\tOnVideoTemporalSpatialTradeOffCommand(" << newQuality << ')'); } void H323VideoCodec::OnVideoTemporalSpatialTradeOffIndication(int PTRACE_PARAM(newQuality)) { PTRACE(3, "Codecs\tOnVideoTemporalSpatialTradeOffIndication(" << newQuality << ')'); } void H323VideoCodec::OnVideoNotDecodedMBs(unsigned PTRACE_PARAM(firstMB), unsigned PTRACE_PARAM(numberOfMBs), unsigned PTRACE_PARAM(temporalReference)) { PTRACE(3, "Codecs\tOnVideoNotDecodedMBs(" << firstMB << ',' << numberOfMBs << ',' << temporalReference << ')'); } void H323VideoCodec::Close() { PWaitAndSignal mutex1(videoHandlerActive); CloseRawDataChannel(); } PBoolean H323VideoCodec::SetMaxBitRate(unsigned bitRate) { PTRACE(1,"Set bitRateHighLimit for video to " << bitRate << " bps"); bitRateHighLimit = bitRate; if (0 == bitRateHighLimit) // disable bitrate control videoBitRateControlModes &= ~AdaptivePacketDelay; // Set the maximum bit rate for capability exchange GetWritableMediaFormat().SetBandwidth(bitRate); return TRUE; } PBoolean H323VideoCodec::SetTargetFrameTimeMs(unsigned ms) { PTRACE(1,"Set targetFrameTimeMs for video to " << ms << " milliseconds"); targetFrameTimeMs = ms; if (0 == targetFrameTimeMs) videoBitRateControlModes &= ~DynamicVideoQuality; return TRUE; } void H323VideoCodec::SetGeneralCodecOption(const char * /*opt*/, int /*val*/) { } void H323VideoCodec::SendMiscCommand(unsigned command) { if (logicalChannel != NULL) logicalChannel->SendMiscCommand(command); } void H323VideoCodec::SetSupportedFormats(std::list & /*info*/) { } #endif // H323_VIDEO ///////////////////////////////////////////////////////////////////////////// #ifdef H323_AUDIO_CODECS H323AudioCodec::H323AudioCodec(const OpalMediaFormat & fmt, Direction dir) : H323Codec(fmt, dir) { framesReceived = 0; samplesPerFrame = mediaFormat.GetFrameTime() * mediaFormat.GetTimeUnits(); if (samplesPerFrame == 0) samplesPerFrame = 8; // Default for non-frame based codecs. // Start off in silent mode inTalkBurst = FALSE; IsRawDataHeld = FALSE; // Initialise the adaptive threshold variables. SetSilenceDetectionMode(AdaptiveSilenceDetection); } H323AudioCodec::~H323AudioCodec() { Close(); CloseRawDataChannel(); //mediaFormat.RemoveAllOptions(); } PBoolean H323AudioCodec::Open(H323Connection & connection) { return connection.OpenAudioChannel(direction == Encoder, samplesPerFrame*2, *this); } void H323AudioCodec::Close() { PWaitAndSignal mutex(rawChannelMutex); if (rawDataChannel != NULL) rawDataChannel->Close(); } unsigned H323AudioCodec::GetFrameRate() const { return samplesPerFrame; } unsigned H323AudioCodec::GetFrameTime() const { return mediaFormat.GetFrameTime(); } H323AudioCodec::SilenceDetectionMode H323AudioCodec::GetSilenceDetectionMode( PBoolean * isInTalkBurst, unsigned * currentThreshold) const { if (isInTalkBurst != NULL) *isInTalkBurst = inTalkBurst; if (currentThreshold != NULL) *currentThreshold = ulaw2linear((BYTE)(levelThreshold ^ 0xff)); return silenceDetectMode; } void H323AudioCodec::SetSilenceDetectionMode(SilenceDetectionMode mode, unsigned threshold, unsigned signalDeadband, unsigned silenceDeadband, unsigned adaptivePeriod) { silenceDetectMode = mode; // The silence deadband is the number of frames of low energy that have to // occur before the system stops sending data over the RTP link. signalDeadbandFrames = (signalDeadband+samplesPerFrame-1)/samplesPerFrame; silenceDeadbandFrames = (silenceDeadband+samplesPerFrame-1)/samplesPerFrame; // This is the period over which the adaptive algorithm operates adaptiveThresholdFrames = (adaptivePeriod+samplesPerFrame-1)/samplesPerFrame; if (mode != AdaptiveSilenceDetection) { levelThreshold = threshold; return; } // Initials threshold levels levelThreshold = 0; // Initialise the adaptive threshold variables. signalMinimum = UINT_MAX; silenceMaximum = 0; signalFramesReceived = 0; silenceFramesReceived = 0; // Restart in silent mode inTalkBurst = FALSE; } PBoolean H323AudioCodec::DetectSilence() { // Can never have silence if NoSilenceDetection if (silenceDetectMode == NoSilenceDetection) return FALSE; // Can never have average signal level that high, this indicates that the // hardware cannot do silence detection. unsigned level = GetAverageSignalLevel(); if (level == UINT_MAX) return FALSE; // Convert to a logarithmic scale - use uLaw which is complemented level = linear2ulaw(level) ^ 0xff; // Now if signal level above threshold we are "talking" PBoolean haveSignal = level > levelThreshold; // If no change ie still talking or still silent, resent frame counter if (inTalkBurst == haveSignal) framesReceived = 0; else { framesReceived++; // If have had enough consecutive frames talking/silent, swap modes. if (framesReceived >= (inTalkBurst ? silenceDeadbandFrames : signalDeadbandFrames)) { inTalkBurst = !inTalkBurst; PTRACE(4, "Codec\tSilence detection transition: " << (inTalkBurst ? "Talk" : "Silent") << " level=" << level << " threshold=" << levelThreshold); // If we had talk/silence transition restart adaptive threshold measurements signalMinimum = UINT_MAX; silenceMaximum = 0; signalFramesReceived = 0; silenceFramesReceived = 0; } } if (silenceDetectMode == FixedSilenceDetection) return !inTalkBurst; if (levelThreshold == 0) { if (level > 1) { // Bootstrap condition, use first frame level as silence level levelThreshold = level/2; PTRACE(4, "Codec\tSilence detection threshold initialised to: " << levelThreshold); } return TRUE; // inTalkBurst always FALSE here, so return silent } // Count the number of silent and signal frames and calculate min/max if (haveSignal) { if (level < signalMinimum) signalMinimum = level; signalFramesReceived++; } else { if (level > silenceMaximum) silenceMaximum = level; silenceFramesReceived++; } // See if we have had enough frames to look at proportions of silence/signal if ((signalFramesReceived + silenceFramesReceived) > adaptiveThresholdFrames) { /* Now we have had a period of time to look at some average values we can make some adjustments to the threshold. There are four cases: */ if (signalFramesReceived >= adaptiveThresholdFrames) { /* If every frame was noisy, move threshold up. Don't want to move too fast so only go a quarter of the way to minimum signal value over the period. This avoids oscillations, and time will continue to make the level go up if there really is a lot of background noise. */ int delta = (signalMinimum - levelThreshold)/4; if (delta != 0) { levelThreshold += delta; PTRACE(4, "Codec\tSilence detection threshold increased to: " << levelThreshold); } } else if (silenceFramesReceived >= adaptiveThresholdFrames) { /* If every frame was silent, move threshold down. Again do not want to move too quickly, but we do want it to move faster down than up, so move to halfway to maximum value of the quiet period. As a rule the lower the threshold the better as it would improve response time to the start of a talk burst. */ unsigned newThreshold = (levelThreshold + silenceMaximum)/2 + 1; if (levelThreshold != newThreshold) { levelThreshold = newThreshold; PTRACE(4, "Codec\tSilence detection threshold decreased to: " << levelThreshold); } } else if (signalFramesReceived > silenceFramesReceived) { /* We haven't got a definitive silent or signal period, but if we are constantly hovering at the threshold and have more signal than silence we should creep up a bit. */ levelThreshold++; PTRACE(4, "Codec\tSilence detection threshold incremented to: " << levelThreshold << " signal=" << signalFramesReceived << ' ' << signalMinimum << " silence=" << silenceFramesReceived << ' ' << silenceMaximum); } signalMinimum = UINT_MAX; silenceMaximum = 0; signalFramesReceived = 0; silenceFramesReceived = 0; } return !inTalkBurst; } unsigned H323AudioCodec::GetAverageSignalLevel() { return UINT_MAX; } PBoolean H323AudioCodec::SetRawDataHeld(PBoolean hold) { PTimedMutex m; m.Wait(50); // wait for 50ms to avoid current locks IsRawDataHeld = hold; m.Wait(50); // wait for 50ms to avoid any further locks return TRUE; } ///////////////////////////////////////////////////////////////////////////// H323FramedAudioCodec::H323FramedAudioCodec(const OpalMediaFormat & fmt, Direction dir) : H323AudioCodec(fmt, dir), sampleBuffer(samplesPerFrame) { bytesPerFrame = mediaFormat.GetFrameSize(); aec = NULL; } PBoolean H323FramedAudioCodec::Read(BYTE * buffer, unsigned & length, RTP_DataFrame &) { PWaitAndSignal mutex(rawChannelMutex); if (direction != Encoder) { PTRACE(1, "Codec\tAttempt to decode from encoder"); return FALSE; } if (IsRawDataHeld) { // If connection is onHold PProcess::Sleep(5); // Sleep to avoid CPU overload. <--Should be a better method but it works :) length = 0; return TRUE; } PINDEX numBytes = samplesPerFrame*2; PINDEX count; if (!ReadRaw(sampleBuffer.GetPointer(samplesPerFrame), numBytes, count)) return FALSE; #ifdef H323_AEC if (aec != NULL) { PTRACE(6,"AEC\tSend " << numBytes); aec->Send((BYTE*)sampleBuffer.GetPointer(samplesPerFrame),(unsigned &)numBytes); } #endif if (IsRawDataHeld) { length = 0; return TRUE; } if (count != numBytes) { PTRACE(1, "Codec\tRead truncated frame of raw data. Wanted " << numBytes << " and got "< 0) ? rtpFrame.GetSequenceNumber() -lastSequence-1 : 0; lastSequence = rtpFrame.GetSequenceNumber(); rtpInformation.m_recvTime = PTime(); rtpInformation.m_sendTime = CalculateRTPSendTime(rtpFrame.GetTimestamp(),GetFrameRate()); rtpInformation.m_frame = &rtpFrame; unsigned bytesDecoded = samplesPerFrame*2; if (length != 0) { if (length > bytesPerFrame) length = bytesPerFrame; written = bytesPerFrame; // Decode the data if (!DecodeFrame(buffer, length, written, bytesDecoded)) { written = length; length = 0; } } // was memset(sampleBuffer.GetPointer(samplesPerFrame), 0, bytesDecoded); if (length == 0) DecodeSilenceFrame(sampleBuffer.GetPointer(bytesDecoded), bytesDecoded); // Write as 16bit PCM to sound channel if (IsRawDataHeld) { // If Connection om Hold PProcess::Sleep(5); // Sleep to avoid CPU Overload <--- Must be a better way but need it to work. return TRUE; } else { #ifdef H323_AEC if (aec != NULL) { PTRACE(6,"AEC\tReceive " << bytesDecoded); aec->Receive((BYTE *)sampleBuffer.GetPointer(), bytesDecoded); } #endif if (!WriteRaw(sampleBuffer.GetPointer(), bytesDecoded, &rtpInformation)) return FALSE; } return TRUE; } unsigned H323FramedAudioCodec::GetAverageSignalLevel() { // Calculate the average signal level of this frame int sum = 0; const short * pcm = sampleBuffer; const short * end = pcm + samplesPerFrame; while (pcm != end) { if (*pcm < 0) sum -= *pcm++; else sum += *pcm++; } return sum/samplesPerFrame; } PBoolean H323FramedAudioCodec::DecodeFrame(const BYTE * buffer, unsigned length, unsigned & written, unsigned & /*decodedBytes*/) { return DecodeFrame(buffer, length, written); } PBoolean H323FramedAudioCodec::DecodeFrame(const BYTE * /*buffer*/, unsigned /*length*/, unsigned & /*written*/) { PAssertAlways(PUnimplementedFunction); return FALSE; } #ifdef H323_AEC void H323FramedAudioCodec::AttachAEC(PAec * _aec) { aec = _aec; } #endif ///////////////////////////////////////////////////////////////////////////// H323StreamedAudioCodec::H323StreamedAudioCodec(const OpalMediaFormat & fmt, Direction dir, unsigned samples, unsigned bits) : H323FramedAudioCodec(fmt, dir) { samplesPerFrame = samples; bytesPerFrame = (samples*bits+7)/8; bitsPerSample = bits; } PBoolean H323StreamedAudioCodec::EncodeFrame(BYTE * buffer, unsigned &) { PINDEX i; unsigned short position = 0; BYTE encoded; switch (bitsPerSample) { case 8 : for (i = 0; i < (PINDEX)samplesPerFrame; i++) *buffer++ = (BYTE)Encode(sampleBuffer[i]); break; case 5 : // g.726-40 payload encoding.... for (i = 0; i < (PINDEX)samplesPerFrame;i++) { // based on a 40 bits encoding, we have 8 words of 5 bits each encoded = (BYTE)Encode(sampleBuffer[i]); switch(position) { case 0: // 0 bits overflow *buffer = encoded; position++; break; case 1: // 2 bits overflow *buffer++ |= (encoded << 5); *buffer = (BYTE)(encoded >> 3); position++; break; case 2: *buffer |= (encoded << 2); position++; break; case 3: // one bit left for word 4 *buffer++ |= (encoded << 7); *buffer = (BYTE)(encoded >> 1); position++; break; case 4: *buffer++ |= (encoded << 4); *buffer = (BYTE)(encoded >> 4); position++; break; case 5: *buffer |= (encoded << 1); position++; break; case 6: //two bits left for the new encoded word *buffer++ |= (encoded << 6); *buffer = (BYTE)(encoded >> 2); position++; break; case 7: // now five bits left for the last word *buffer++ |= (encoded << 3); position = 0; break; } } break; case 4 : for (i = 0; i < (PINDEX)samplesPerFrame; i++) { if ((i&1) == 0) *buffer = (BYTE)Encode(sampleBuffer[i]); else *buffer++ |= (BYTE)(Encode(sampleBuffer[i]) << 4); } break; case 3 : for (i = 0;i < (PINDEX)samplesPerFrame;i++) { encoded = (BYTE)Encode(sampleBuffer[i]); switch(position) { case 0: // 0 bits overflow *buffer = encoded; position++; break; case 1: // 2 bits overflow *buffer |= (encoded << 3); position++; break; case 2: *buffer++ |= (encoded << 6); *buffer = (BYTE)(encoded >> 2); position++; break; case 3: // one bit left for word 4 *buffer |= (encoded << 1); position++; break; case 4: *buffer |= (encoded << 4); position++; break; case 5: *buffer++ |= (encoded << 7); *buffer = (BYTE)(encoded >> 1); position++; break; case 6: //two bits left for the new encoded word *buffer |= (encoded << 2); position++; break; case 7: // now five bits left for the last word *buffer++ |= (encoded << 5); position = 0; break; } } break; case 2: for (i = 0; i < (PINDEX)samplesPerFrame; i++) { switch(position) { case 0: *buffer = (BYTE)Encode(sampleBuffer[i]); position++; break; case 1: *buffer |= (BYTE)(Encode(sampleBuffer[i]) << 2); position++; break; case 2: *buffer |= (BYTE)(Encode(sampleBuffer[i]) << 4); position++; break; case 3: *buffer++ |= (BYTE)(Encode(sampleBuffer[i]) << 6); position = 0; break; } } break; default : PAssertAlways("Unsupported bit size"); return FALSE; } return TRUE; } PBoolean H323StreamedAudioCodec::DecodeFrame(const BYTE * buffer, unsigned length, unsigned & written, unsigned & decodedBytes) { unsigned i; short * sampleBufferPtr = sampleBuffer.GetPointer(samplesPerFrame); short * out = sampleBufferPtr; unsigned short position = 0; unsigned remaining = 0; switch (bitsPerSample) { case 8 : for (i = 0; i < length; i++) *out++ = Decode(*buffer++); break; // those case are for ADPCM G.726 case 5 : for (i = 0; i < length; i++) { switch(position) { case 0: *out++ = Decode(*buffer & 31); remaining = *buffer >> 5; // get the three remaining bytes for the next word buffer++; position++; break; case 1: // we can decode more than one word in second buffer *out++ = Decode (((*buffer&3) << 3) | remaining); *out++ = Decode( (*buffer >> 2) & 31); remaining = *buffer >> 7; buffer++; position++; break; case 2: *out++ = Decode( remaining | ((*buffer&15) << 1)); remaining = *buffer >> 4; buffer++; position++; break; case 3: *out++ = Decode( remaining | ((*buffer&1) << 4)); *out++ = Decode( (*buffer >> 1) & 31); remaining = *buffer >> 6; buffer++; position++; break; case 4 : *out++ = Decode( remaining | ((*buffer&7) << 2)); *out++ = Decode(*buffer >> 3); buffer++; position = 0; break; } } break; case 4 : for (i = 0; i < length; i++) { *out++ = Decode(*buffer & 15); *out++ = Decode(*buffer >> 4); buffer++; } break; case 3: for (i = 0; i < length; i++) { switch(position) { case 0: *out++ = Decode(*buffer & 7); *out++ = Decode((*buffer>>3)&7); remaining = *buffer >> 6; buffer++; position++; break; case 1: *out++ = Decode(remaining | ((*buffer&1) << 2)); *out++ = Decode((*buffer >> 1) & 7); *out++ = Decode((*buffer >> 4)&7); remaining = *buffer >> 7; buffer++; position++; break; case 2: *out++ = Decode(remaining | ((*buffer&3) << 1)); *out++ = Decode((*buffer >> 2) & 7); *out++ = Decode((*buffer >> 5) & 7); buffer++; position = 0; break; } } break; case 2: for (i = 0; i < length; i++) { *out++ = Decode(*buffer & 3); *out++ = Decode((*buffer >> 2) & 3); *out++ = Decode((*buffer >> 4) & 3); *out++ = Decode((*buffer >> 6) & 3); buffer++; } break; default : PAssertAlways("Unsupported bit size"); return FALSE; } written = length; decodedBytes = (out - sampleBufferPtr)*2; return TRUE; } ///////////////////////////////////////////////////////////////////////////// H323_ALawCodec::H323_ALawCodec(Direction dir, PBoolean at56kbps, unsigned frameSize) : H323StreamedAudioCodec(OpalG711ALaw, dir, frameSize, 8) { sevenBit = at56kbps; PTRACE(3, "Codec\tG711 ALaw " << (dir == Encoder ? "en" : "de") << "coder created for at " << (sevenBit ? "56k" : "64k") << ", " << frameSize << " samples"); } int H323_ALawCodec::EncodeSample(short sample) { return linear2alaw(sample); } short H323_ALawCodec::DecodeSample(int sample) { return (short)alaw2linear((unsigned char)sample); } ///////////////////////////////////////////////////////////////////////////// H323_muLawCodec::H323_muLawCodec(Direction dir, PBoolean at56kbps, unsigned frameSize) : H323StreamedAudioCodec(OpalG711uLaw, dir, frameSize, 8) { sevenBit = at56kbps; PTRACE(3, "Codec\tG711 uLaw " << (dir == Encoder ? "en" : "de") << "coder created for at " << (sevenBit ? "56k" : "64k") << ", frame of " << frameSize << " samples"); } int H323_muLawCodec::EncodeSample(short sample) { return linear2ulaw(sample); } short H323_muLawCodec::DecodeSample(int sample) { return (short)ulaw2linear((unsigned char)sample); } ///////////////////////////////////////////////////////////////////////////// #endif // NO_H323_AUDIO_CODECS h323plus/src/Makefile0000644000175000017500000003222711671402217013345 0ustar markmark# # Makefile # # Make file for Open H323 library # # Copyright (c) 1998-2000 Equivalence Pty. Ltd. # # The contents of this file are subject to the Mozilla Public License # Version 1.0 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is Open H323 Library. # # The Initial Developer of the Original Code is Equivalence Pty. Ltd. # # Contributor(s): ______________________________________. # # $Id: Makefile,v 1.27 2011/12/12 13:41:35 shorne Exp $ # # ifndef OPENH323DIR OPENH323DIR=$(CURDIR)/.. endif LIBRARY_MAKEFILE:=1 include $(OPENH323DIR)/openh323u.mak # turn off strict-aliasing optimization, because it breaks the PDynaLink code STDCCFLAGS += -fno-strict-aliasing OH323_OBJDIR = $(OH323_LIBDIR)/$(PT_OBJBASE) ifdef NOTRACE OH323_OBJDIR := $(OH323_OBJDIR)n endif OBJDIR = $(OH323_OBJDIR) LIBDIR = $(OH323_LIBDIR) TARGET = $(LIBDIR)/$(OH323_FILE) VERSION_FILE = $(OPENH323DIR)/version.h ######################################## SOURCES += \ $(OH323_SRCDIR)/h225_1.cxx \ $(OH323_SRCDIR)/h225_2.cxx \ $(OH323_SRCDIR)/h245_1.cxx \ $(OH323_SRCDIR)/h245_2.cxx \ $(OH323_SRCDIR)/h245_3.cxx HEADER_FILES += $(OH323_INCDIR)/h323.h COMMON_SOURCES += $(OH323_SRCDIR)/h323.cxx $(OH323_SRCDIR)/h323ep.cxx HEADER_FILES += $(OH323_INCDIR)/h323neg.h COMMON_SOURCES += $(OH323_SRCDIR)/h323neg.cxx HEADER_FILES += $(OH323_INCDIR)/h323pdu.h COMMON_SOURCES += $(OH323_SRCDIR)/h323pdu.cxx HEADER_FILES += $(OH323_INCDIR)/h323rtp.h COMMON_SOURCES += $(OH323_SRCDIR)/h323rtp.cxx HEADER_FILES += $(OH323_INCDIR)/h323caps.h COMMON_SOURCES += $(OH323_SRCDIR)/h323caps.cxx HEADER_FILES += $(OH323_INCDIR)/q931.h COMMON_SOURCES += $(OH323_SRCDIR)/q931.cxx HEADER_FILES += $(OH323_INCDIR)/codecs.h COMMON_SOURCES += $(OH323_SRCDIR)/codecs.cxx HEADER_FILES += $(OH323_INCDIR)/channels.h COMMON_SOURCES += $(OH323_SRCDIR)/channels.cxx HEADER_FILES += $(OH323_INCDIR)/transports.h COMMON_SOURCES += $(OH323_SRCDIR)/transports.cxx HEADER_FILES += $(OH323_INCDIR)/rtp.h COMMON_SOURCES += $(OH323_SRCDIR)/rtp.cxx HEADER_FILES += $(OH323_INCDIR)/gkclient.h COMMON_SOURCES += $(OH323_SRCDIR)/gkclient.cxx HEADER_FILES += $(OH323_INCDIR)/gkserver.h COMMON_SOURCES += $(OH323_SRCDIR)/gkserver.cxx HEADER_FILES += $(OH323_INCDIR)/mediafmt.h COMMON_SOURCES += $(OH323_SRCDIR)/mediafmt.cxx HEADER_FILES += $(OH323_INCDIR)/guid.h COMMON_SOURCES += $(OH323_SRCDIR)/guid.cxx HEADER_FILES += $(OH323_INCDIR)/h225ras.h COMMON_SOURCES += $(OH323_SRCDIR)/h225ras.cxx HEADER_FILES += $(OH323_INCDIR)/h323trans.h COMMON_SOURCES += $(OH323_SRCDIR)/h323trans.cxx HEADER_FILES += $(OH323_INCDIR)/h235auth.h COMMON_SOURCES += $(OH323_SRCDIR)/h235auth.cxx HEADER_FILES += $(OH323_INCDIR)/h235pluginmgr.h COMMON_SOURCES += $(OH323_SRCDIR)/h235pluginmgr.cxx HEADER_FILES += $(OH323_INCDIR)/rfc2833.h COMMON_SOURCES += $(OH323_SRCDIR)/rfc2833.cxx ifdef H323_H224 HEADER_FILES += $(OH323_INCDIR)/h224.h HEADER_FILES += $(OH323_INCDIR)/h224handler.h COMMON_SOURCES += $(OH323_SRCDIR)/h224.cxx HEADER_FILES += $(OH323_INCDIR)/h281.h HEADER_FILES += $(OH323_INCDIR)/h281handler.h COMMON_SOURCES += $(OH323_SRCDIR)/h281.cxx COMMON_SOURCES += $(OH323_SRCDIR)/h323h224.cxx COMMON_SOURCES += $(OH323_SRCDIR)/q922.cxx endif ifdef HAS_PLUGINS HEADER_FILES += $(OH323_INCDIR)/h323pluginmgr.h COMMON_SOURCES += $(OH323_SRCDIR)/h323pluginmgr.cxx endif ifdef HAS_WAVFILE HEADER_FILES += $(OH323_INCDIR)/opalwavfile.h COMMON_SOURCES += $(OH323_SRCDIR)/opalwavfile.cxx HEADER_FILES += $(OH323_INCDIR)/rtp2wav.h COMMON_SOURCES += $(OH323_SRCDIR)/rtp2wav.cxx endif ifdef HAS_VXML HEADER_FILES += $(OH323_INCDIR)/opalvxml.h COMMON_SOURCES += $(OH323_SRCDIR)/opalvxml.cxx endif ########### H.230 ifdef H323_H230 HEADER_FILES += $(OH323_INCDIR)/gccpdu.h \ $(OH323_INCDIR)/h230/h230.h SOURCES += $(OH323_SRCDIR)/gccpdu.cxx \ $(OH323_INCDIR)/h230/OID2.cxx COMMON_SOURCES += $(OH323_SRCDIR)/h230/h230.cxx endif ########### H.235 ifndef OH323_SUPPRESS_H235 SOURCES += $(OH323_SRCDIR)/h235.cxx endif ifdef HAS_OPENSSL COMMON_SOURCES += $(OH323_SRCDIR)/h235auth1.cxx endif ifdef H323_H235 HEADER_FILES += $(OH323_INCDIR)/h235/h2351.h \ $(OH323_INCDIR)/h235/h2356.h \ $(OH323_INCDIR)/h235/h235caps.h \ $(OH323_INCDIR)/h235/h235chan.h \ $(OH323_INCDIR)/h235/h235con.h COMMON_SOURCES += $(OH323_SRCDIR)/h235/h2356.cxx \ $(OH323_SRCDIR)/h235/h235caps.cxx \ $(OH323_SRCDIR)/h235/h235chan.cxx \ $(OH323_SRCDIR)/h235/h235con.cxx endif ########### H.248 ifdef H323_H248 SOURCES += $(OH323_SRCDIR)/h248.cxx HEADER_FILES += $(OH323_INCDIR)/svcctrl.h COMMON_SOURCES += $(OH323_SRCDIR)/svcctrl.cxx endif ########### H.341 ifdef H323_H341 HEADER_FILES += $(OH323_INCDIR)/h341/h341.h COMMON_SOURCES += $(OH323_SRCDIR)/h341/h341.cxx endif ########### H.350 ifdef H323_H350 HEADER_FILES += $(OH323_INCDIR)/h350/h350.h \ $(OH323_INCDIR)/h350/h350_service.h SOURCES += $(OH323_INCDIR)/h350/h350_service.cxx COMMON_SOURCES += $(OH323_SRCDIR)/h350/h350.cxx endif ########### H.450 ifdef H323_H450 SOURCES += \ $(OH323_SRCDIR)/x880.cxx \ $(OH323_SRCDIR)/h450/h4501.cxx \ $(OH323_SRCDIR)/h450/h4502.cxx \ $(OH323_SRCDIR)/h450/h4503.cxx \ $(OH323_SRCDIR)/h450/h4504.cxx \ $(OH323_SRCDIR)/h450/h4505.cxx \ $(OH323_SRCDIR)/h450/h4506.cxx \ $(OH323_SRCDIR)/h450/h4507.cxx \ $(OH323_SRCDIR)/h450/h4508.cxx \ $(OH323_SRCDIR)/h450/h4509.cxx \ $(OH323_SRCDIR)/h450/h45010.cxx \ $(OH323_SRCDIR)/h450/h45011.cxx HEADER_FILES += $(OH323_INCDIR)/h450/h450pdu.h COMMON_SOURCES += $(OH323_SRCDIR)/h450/h450pdu.cxx endif ########### H.460 ifdef H323_H460 HEADER_FILES += $(OH323_INCDIR)/h460/h460.h \ $(OH323_INCDIR)/h460/h4601.h \ $(OH323_INCDIR)/h460/h4609.h \ $(OH323_INCDIR)/h460/h460_std9.h \ $(OH323_INCDIR)/h460/h46015.h \ $(OH323_INCDIR)/h460/h46017a.h \ $(OH323_INCDIR)/h460/h460_std17.h \ $(OH323_INCDIR)/h460/h46018.h \ $(OH323_INCDIR)/h460/h460_std18.h \ $(OH323_INCDIR)/h460/h46018_h225.h \ $(OH323_INCDIR)/h460/h46019.h \ $(OH323_INCDIR)/h460/h460_std23.h \ $(OH323_INCDIR)/h460/h46024b.h \ $(OH323_INCDIR)/h460/h460_oid3.h \ $(OH323_INCDIR)/h460/h460p.h \ $(OH323_INCDIR)/h460/h460pres.h SOURCES += \ $(OH323_SRCDIR)/h460/h4609.cxx \ $(OH323_INCDIR)/h460/h46015.cxx \ $(OH323_SRCDIR)/h460/h46017a.cxx \ $(OH323_SRCDIR)/h460/h46019.cxx \ $(OH323_INCDIR)/h460/h46024b.cxx \ $(OH323_INCDIR)/h460/h460pres.cxx COMMON_SOURCES += \ $(OH323_SRCDIR)/h460/h4601.cxx \ $(OH323_INCDIR)/h460/h460_std9.cxx \ $(OH323_SRCDIR)/h460/h460_std17.cxx \ $(OH323_SRCDIR)/h460/h46018.cxx \ $(OH323_SRCDIR)/h460/h460_std18.cxx \ $(OH323_SRCDIR)/h460/h46018_h225.cxx \ $(OH323_SRCDIR)/h460/h460_std23.cxx \ $(OH323_INCDIR)/h460/h460_oid3.cxx \ $(OH323_INCDIR)/h460/h460p.cxx endif ########### H.501 ifdef H323_H501 SOURCES += $(OH323_SRCDIR)/h501.cxx HEADER_FILES += $(OH323_INCDIR)/peclient.h COMMON_SOURCES += $(OH323_SRCDIR)/peclient.cxx HEADER_FILES += $(OH323_INCDIR)/h323annexg.h COMMON_SOURCES += $(OH323_SRCDIR)/h323annexg.cxx HEADER_FILES += $(OH323_INCDIR)/h501pdu.h COMMON_SOURCES += $(OH323_SRCDIR)/h501pdu.cxx endif ########### T.120 ifdef H323_T120 HEADER_FILES += $(OH323_INCDIR)/mcspdu.h SOURCES += $(OH323_SRCDIR)/mcspdu.cxx HEADER_FILES += $(OH323_INCDIR)/h323t120.h COMMON_SOURCES += $(OH323_SRCDIR)/h323t120.cxx HEADER_FILES += $(OH323_INCDIR)/t120proto.h COMMON_SOURCES += $(OH323_SRCDIR)/t120proto.cxx HEADER_FILES += $(OH323_INCDIR)/x224.h COMMON_SOURCES += $(OH323_SRCDIR)/x224.cxx endif ########### GNUGK ifdef H323_GNUGK HEADER_FILES += $(OH323_INCDIR)/gnugknat.h COMMON_SOURCES += $(OH323_SRCDIR)/gnugknat.cxx endif ########### FILE ifdef H323_FILE HEADER_FILES += $(OH323_INCDIR)/h323filetransfer.h COMMON_SOURCES += $(OH323_SRCDIR)/h323filetransfer.cxx endif ########### FAX ifdef H323_T38 SOURCES += $(OH323_SRCDIR)/t38.cxx HEADER_FILES += $(OH323_INCDIR)/h323t38.h COMMON_SOURCES += $(OH323_SRCDIR)/h323t38.cxx HEADER_FILES += $(OH323_INCDIR)/t38proto.h COMMON_SOURCES += $(OH323_SRCDIR)/t38proto.cxx endif ########### AUDIO ifndef NOAUDIOCODECS HEADER_FILES += $(OH323_INCDIR)/jitter.h COMMON_SOURCES += $(OH323_SRCDIR)/jitter.cxx COMMON_SOURCES += $(OH323_SRCDIR)/g711.c endif # NOAUDIOCODECS ########### VIDEO ifndef NOVIDEO ##### NOW PLUGINS endif # NOVIDEO CLEAN_FILES = $(OH323_LIB) ifeq ($(NOTRACE), 0) STDCCFLAGS += -DPTRACING endif VPATH_CXX := $(OH323_SRCDIR) \ $(OH323_SRCDIR)/h230 \ $(OH323_SRCDIR)/h235 \ $(OH323_SRCDIR)/h341 \ $(OH323_SRCDIR)/h350 \ $(OH323_SRCDIR)/h450 \ $(OH323_SRCDIR)/h460 VPATH_C := $(OH323_SRCDIR) SOURCES += $(COMMON_SOURCES) #################################################### include $(PTLIBDIR)/make/common.mak #################################################### # make sure pwlib is in the list of external libraries # this ensures pwlib is not statically linked ifndef PT_LIBDIR PT_LIBDIR=$(PW_LIBDIR) endif LDFLAGS += -L$(PT_LIBDIR) SYSLIBS += -l$(PTLIB_BASE)$(LIB_TYPE) LIB_BASENAME=$(OH323_BASE) LIB_FILENAME=$(OH323_FILE) include $(PTLIBDIR)/make/lib.mak #################################################### # Make sure the asnparser is built and if new version force recompiles # Use a different variable here to support cross compiling ifndef HOSTPTLIBDIR HOSTPTLIBDIR=$(PTLIBDIR) endif ifndef HOST_PLATFORM_TYPE HOST_PLATFORM_TYPE=$(PLATFORM_TYPE) endif # Set library path so asnparser will run ifdef LD_LIBRARY_PATH LD_LIBRARY_PATH:=$(LD_LIBRARY_PATH):$(HOSTPTLIBDIR)/lib else LD_LIBRARY_PATH:=$(HOSTPTLIBDIR)/lib endif export LD_LIBRARY_PATH # If we're cross compiling, we want the host's asnparser # otherwise use the one for the current platform ASNPARSE_DIR = $(HOSTPTLIBDIR)/tools/asnparser ASNPARSER = $(ASNPARSE_DIR)/obj_$(HOST_PLATFORM_TYPE)_d/asnparser # If not cross compiling then make sure asnparser is built ifeq ($(PLATFORM_TYPE),$(HOST_PLATFORM_TYPE)) $(ASNPARSER): $(MAKE) -C $(ASNPARSE_DIR) opt endif asnparser.version: $(ASNPARSER) $(ASNPARSER) --version | awk '{print $$1,$$2,$$3}' > asnparser.version.new if test -f asnparser.version && diff asnparser.version.new asnparser.version >/dev/null 2>&1 ; \ then rm asnparser.version.new ; \ else mv asnparser.version.new asnparser.version ; \ fi asnfiles: $(ASNPARSER) $(ASNPARSER) -s3 -m H245 -c --classheader "H245_AudioCapability=#ifndef PASN_NOPRINTON\nvoid PrintOn(ostream & strm) const;\n#endif" h245.asn mv $(OH323_SRCDIR)/h245.h $(OH323_INCDIR)/h245.h $(ASNPARSER) -m H235 -c h235.asn mv $(OH323_SRCDIR)/h235.h $(OH323_INCDIR)/h235.h $(ASNPARSER) -s2 -m H225 -r MULTIMEDIA-SYSTEM-CONTROL=H245 -c h225.asn mv $(OH323_SRCDIR)/h225.h $(OH323_INCDIR)/h225.h $(ASNPARSER) -m H248 -c h248.asn mv $(OH323_SRCDIR)/h248.h $(OH323_INCDIR)/h248.h $(ASNPARSER) -m H4501 -c h4501.asn mv $(OH323_SRCDIR)/h4501.h $(OH323_INCDIR)/h4501.h $(ASNPARSER) -m H4502 -c h4502.asn mv $(OH323_SRCDIR)/h4502.h $(OH323_INCDIR)/h4502.h $(ASNPARSER) -m H4503 -c h4503.asn mv $(OH323_SRCDIR)/h4503.h $(OH323_INCDIR)/h4503.h $(ASNPARSER) -m H4504 -c h4504.asn mv $(OH323_SRCDIR)/h4504.h $(OH323_INCDIR)/h4504.h $(ASNPARSER) -m H4505 -c h4505.asn mv $(OH323_SRCDIR)/h4505.h $(OH323_INCDIR)/h4505.h $(ASNPARSER) -m H4506 -c h4506.asn mv $(OH323_SRCDIR)/h4506.h $(OH323_INCDIR)/h4506.h $(ASNPARSER) -m H4507 -c h4507.asn mv $(OH323_SRCDIR)/h4507.h $(OH323_INCDIR)/h4507.h $(ASNPARSER) -m H4508 -c h4508.asn mv $(OH323_SRCDIR)/h4508.h $(OH323_INCDIR)/h4508.h $(ASNPARSER) -m H4509 -c h4509.asn mv $(OH323_SRCDIR)/h4509.h $(OH323_INCDIR)/h4509.h $(ASNPARSER) -m H45010 -c h45010.asn mv $(OH323_SRCDIR)/h45010.h $(OH323_INCDIR)/h45010.h $(ASNPARSER) -m H45011 -c h45011.asn mv $(OH323_SRCDIR)/h45011.h $(OH323_INCDIR)/h45011.h $(ASNPARSER) -m X880 -c x880.asn mv $(OH323_SRCDIR)/x880.h $(OH323_INCDIR)/x880.h $(ASNPARSER) -m H501 -c h501.asn mv $(OH323_SRCDIR)/h501.h $(OH323_INCDIR)/h501.h $(ASNPARSER) -m T38 -c t38.asn mv $(OH323_SRCDIR)/t38.h $(OH323_INCDIR)/t38.h $(ASNPARSER) -m MCS -c mcspdu.asn mv $(OH323_SRCDIR)/mcspdu.h $(OH323_INCDIR)/mcspdu.h $(ASNPARSER) -m GCC -c gccpdu.asn mv $(OH323_SRCDIR)/gccpdu.h $(OH323_INCDIR)/gccpdu.h notrace:: $(MAKE) NOTRACE=1 opt h323plus/src/h460/0000755000175000017500000000000011663152255012365 5ustar markmarkh323plus/src/h460/h460_std17.cxx0000644000175000017500000010361411652377422014624 0ustar markmark/* * H46017.cxx * * H46017 NAT Traversal class. * * h323plus library * * Copyright (c) 2011 ISVO (Asia) Pte. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * Contributor(s): ______________________________________. * * $Id: h460_std17.cxx,v 1.7 2011/10/28 01:02:10 shorne Exp $ * */ #include #include "openh323buildopts.h" #ifdef H323_H46017 #include #include #include "h460/h460_std17.h" #include "h460/h46017a.h" #include #include //#define PACKET_ANALYSIS 1 #define LOCAL_FASTUPDATE 1 #define MAX_AUDIO_FRAMES 3 #define MAX_VIDEO_PAYLOAD 4000 // 4k Frame #define REC_FRAME_RATE 15.0 #define REC_FRAME_TIME (1.0/REC_FRAME_RATE) * 1000 #define MAX_STACK_DESCRETION REC_FRAME_TIME * 2 #define FAST_UPDATE_INTERVAL REC_FRAME_TIME * 3 #define MAX_VIDEO_KBPS 384000 #define MAX_PIPE_SHAPING MAX_VIDEO_KBPS * 0.5 //175000.0 <- Agressive #define MAX_STACK_DELAY 350 struct LookupRecord { PIPSocket::Address addr; WORD port; }; static PBoolean FindSRVRecords(std::vector & recs, const PString & domain, const PString & srv) { PDNS::SRVRecordList srvRecords; PString srvLookupStr = srv + domain; PBoolean found = PDNS::GetRecords(srvLookupStr, srvRecords); if (found) { PDNS::SRVRecord * recPtr = srvRecords.GetFirst(); while (recPtr != NULL) { LookupRecord rec; rec.addr = recPtr->hostAddress; rec.port = recPtr->port; recs.push_back(rec); recPtr = srvRecords.GetNext(); PTRACE(4, "H323\tFound " << rec.addr << ":" << rec.port << " with SRV " << srv << " for domain " << domain); } } return found; } static PBoolean FindRoutes(const PString & domain, std::vector & routes) { FindSRVRecords(routes, domain, "_h323rs._tcp."); return routes.size() != 0; } static PInt64 lastFUP =0; static PBoolean HandleH245Command(PBoolean /*remote*/, const H245_CommandMessage & pdu) { if (pdu.GetTag() != H245_CommandMessage::e_miscellaneousCommand) return true; const H245_MiscellaneousCommand & misc = pdu; #ifndef LOCAL_FASTUPDATE PInt64 now = PTimer::Tick().GetMilliSeconds(); #endif switch (misc.m_type.GetTag()) { case H245_MiscellaneousCommand_type::e_videoFastUpdatePicture : #ifdef LOCAL_FASTUPDATE return false; #else if (now - lastFUP < FAST_UPDATE_INTERVAL) { PTRACE(2,"H46017\tFastPicture request blocked!"); return false; } else { lastFUP = now; PTRACE(2,"H46017\tFastPicture request..."); return true; } #endif case H245_MiscellaneousCommand_type::e_videoFreezePicture : case H245_MiscellaneousCommand_type::e_videoFastUpdateGOB : case H245_MiscellaneousCommand_type::e_videoFastUpdateMB : case H245_MiscellaneousCommand_type::e_lostPartialPicture : case H245_MiscellaneousCommand_type::e_lostPicture : case H245_MiscellaneousCommand_type::e_videoTemporalSpatialTradeOff : default: break; } return true; } static void BuildFastUpdatePicture(unsigned sessionId, H323ControlPDU & pdu) { H245_CommandMessage & command = pdu.Build(H245_CommandMessage::e_miscellaneousCommand); H245_MiscellaneousCommand & miscCommand = command; miscCommand.m_logicalChannelNumber = sessionId; miscCommand.m_type.SetTag(H245_MiscellaneousCommand_type::e_videoFastUpdatePicture); } #ifdef PACKET_ANALYSIS static void AnalysePacket(PBoolean out, int session, const RTP_DataFrame & frame) { PTRACE(1, "RTP\t" << (out ? "> " : "< ") << " s=" << session << " ver=" << frame.GetVersion() << " pt=" << frame.GetPayloadType() << " psz=" << frame.GetPayloadSize() << " m=" << frame.GetMarker() << " x=" << frame.GetExtension() << " seq=" << frame.GetSequenceNumber() << " ts=" << frame.GetTimestamp() << " src=" << frame.GetSyncSource() << " ccnt=" << frame.GetContribSrcCount()); } #endif /////////////////////////////////////////////////////////////////////////////////// // Must Declare for Factory Loader. H460_FEATURE(Std17); H460_FeatureStd17::H460_FeatureStd17() : H460_FeatureStd(17), EP(NULL), CON(NULL), m_handler(NULL), isEnabled(false) { } H460_FeatureStd17::~H460_FeatureStd17() { delete m_handler; } void H460_FeatureStd17::AttachEndPoint(H323EndPoint * _ep) { if (!EP) EP = _ep; } void H460_FeatureStd17::AttachConnection(H323Connection * _con) { CON = _con; if (!EP) EP = &CON->GetEndPoint(); } PBoolean H460_FeatureStd17::Initialise(const PString & remoteAddr) { std::vector routes; if (!FindRoutes(remoteAddr,routes)) { PTRACE(2,"H46017\tNo Gatekeeper SRV Records (_h323rs._tcp.) found!"); return false; } std::vector::const_iterator r; for (r = routes.begin(); r != routes.end(); ++r) { const LookupRecord & rec = *r; H323TransportAddress rem(rec.addr,rec.port); if (!InitialiseTunnel(rem)) { PTRACE(2,"H46017\tTunnel to " << rem << " Failed!"); continue; } if (!m_handler->RegisterGatekeeper()) continue; return true; } return false; } PBoolean H460_FeatureStd17::OnSendGatekeeperRequest(H225_FeatureDescriptor & pdu) { H460_FeatureStd feat = H460_FeatureStd(17); pdu = feat; return true; } void H460_FeatureStd17::OnReceiveGatekeeperConfirm(const H225_FeatureDescriptor & /*pdu*/) { isEnabled = true; } PBoolean H460_FeatureStd17::OnSendRegistrationRequest(H225_FeatureDescriptor & pdu) { H460_FeatureStd feat = H460_FeatureStd(17); pdu = feat; return true; } void H460_FeatureStd17::OnReceiveRegistrationConfirm(const H225_FeatureDescriptor & /*pdu*/) { isEnabled = true; } PBoolean H460_FeatureStd17::OnSendSetup_UUIE(H225_FeatureDescriptor & pdu) { if (isEnabled) { H460_FeatureStd feat = H460_FeatureStd(17); pdu = feat; return true; } return false; } void H460_FeatureStd17::OnReceiveSetup_UUIE(const H225_FeatureDescriptor & pdu) { isEnabled = true; } PBoolean H460_FeatureStd17::OnSendCallProceeding_UUIE(H225_FeatureDescriptor & pdu) { H460_FeatureStd feat = H460_FeatureStd(17); pdu = feat; return true; } void H460_FeatureStd17::OnReceiveCallProceeding_UUIE(const H225_FeatureDescriptor & pdu) { isEnabled = true; } PBoolean H460_FeatureStd17::OnSendAlerting_UUIE(H225_FeatureDescriptor & pdu) { H460_FeatureStd feat = H460_FeatureStd(17); pdu = feat; return true; } void H460_FeatureStd17::OnReceiveAlerting_UUIE(const H225_FeatureDescriptor & pdu) { if (!isEnabled) isEnabled = true; } PBoolean H460_FeatureStd17::OnSendCallConnect_UUIE(H225_FeatureDescriptor & pdu) { H460_FeatureStd feat = H460_FeatureStd(17); pdu = feat; return true; } void H460_FeatureStd17::OnReceiveCallConnect_UUIE(const H225_FeatureDescriptor & pdu) { if (!isEnabled) isEnabled = true; } PBoolean H460_FeatureStd17::InitialiseTunnel(const H323TransportAddress & remoteAddr) { if (!m_handler) m_handler = new H46017Handler(*EP, remoteAddr); return m_handler->CreateNewTransport(); } /////////////////////////////////////////////////////////////////////////////////// // Listening/Keep Alive Thread class H46017TransportThread : public PThread { PCLASSINFO(H46017TransportThread, PThread) public: H46017TransportThread(H323EndPoint & endpoint, H46017Transport * transport); protected: void Main(); H46017Transport * transport; }; ///////////////////////////////////////////////////////////////////////////// H46017TransportThread::H46017TransportThread(H323EndPoint & ep, H46017Transport * t) : PThread(ep.GetSignallingThreadStackSize(), AutoDeleteThread, NormalPriority, "H46017 Answer:%0x"), transport(t) { transport->AttachThread(this); // Start the Thread Resume(); } void H46017TransportThread::Main() { PTRACE(3, "H46017\tStarted Listening Thread"); PBoolean ret = TRUE; while ((transport->IsOpen()) && (!transport->CloseTransport())) { ret = transport->HandleH46017SignallingChannelPDU(this); if (!ret && transport->CloseTransport()) { // Closing down Instruction PTRACE(3, "H46017\tShutting down H46017 Thread"); transport->ConnectionLost(TRUE); } else if (!ret) { // We have a socket failure wait 1 sec and try again. PTRACE(3, "H46017\tConnection Lost! Retrying Connection.."); transport->ConnectionLost(TRUE); if (transport->CloseTransport()) { PTRACE(3, "H46017\tConnection Lost"); break; } else { PTRACE(3, "H46017\tConnection ReEstablished"); transport->ConnectionLost(FALSE); ret = TRUE; // Signal that the connection has been ReEstablished. } } } PTRACE(3, "H46017\tTransport Closed"); } /////////////////////////////////////////////////////////////////////////////////////// H46017Transport::H46017Transport(H323EndPoint & endpoint, PIPSocket::Address binding, H46017Handler * feat ) : H323TransportTCP(endpoint,binding), con(NULL), Feature(feat) { ReadTimeOut = PMaxTimeInterval; isConnected = FALSE; closeTransport = FALSE; remoteShutDown = FALSE; m_socketWrite = PThread::Create(PCREATE_NOTIFIER(SocketWrite), 0, PThread::AutoDeleteThread); } H46017Transport::~H46017Transport() { Close(); } static PBoolean FindH46017RAS(const H225_H323_UU_PDU & pdu, PBYTEArray & ras) { H225_GenericData fid = H460_FeatureStd(17); if (pdu.HasOptionalField(H225_H323_UU_PDU::e_genericData)) { const H225_ArrayOf_GenericData & data = pdu.m_genericData; for (PINDEX i=0; i < data.GetSize(); i++) { if (fid.m_id == data[i].m_id) { H460_Feature feat((const H225_FeatureDescriptor &)data[i]); if (feat.HasFeatureParameter(1)) { PASN_OctetString data = feat.GetFeatureParameter(1); ras = data.GetValue(); return true; } } } } return false; } PBoolean H46017Transport::WriteRasPDU(const PBYTEArray & pdu) { H323SignalPDU rasPDU; rasPDU.BuildFacility(*con, true, H225_FacilityReason::e_featureSetUpdate); rasPDU.m_h323_uu_pdu.IncludeOptionalField(H225_H323_UU_PDU::e_genericData); H225_ArrayOf_GenericData & gdata = rasPDU.m_h323_uu_pdu.m_genericData; int sz = gdata.GetSize(); gdata.SetSize(sz+1); H225_GenericData & data = gdata[sz]; H460_FeatureStd feat = H460_FeatureStd(17); PASN_OctetString encFrame; encFrame.SetValue(pdu); feat.Add(1,H460_FeatureContent(encFrame)); data = feat; rasPDU.BuildQ931(); h225Order::MessageHeader prior; prior.sessionId = 0; prior.priority = h225Order::Priority_High; prior.packTime = PTimer::Tick().GetMilliSeconds(); return WriteTunnel(rasPDU,prior); } PBoolean H46017Transport::HandleH46017RAS(const H323SignalPDU & pdu) { PBYTEArray ras; if ((pdu.GetQ931().GetMessageType() == Q931::FacilityMsg) && FindH46017RAS(pdu.m_h323_uu_pdu,ras)) { H46017RasTransport * rasTransport = Feature->GetRasTransport(); return rasTransport->ReceivedPDU(ras); } return false; } PBoolean H46017Transport::HandleH46017SignallingSocket(H323SignalPDU & pdu) { for (;;) { if (!IsOpen()) return false; H323SignalPDU rpdu; if (!rpdu.Read(*this)) { PTRACE(3, "H46017\tSocket Read Failure"); if (GetErrorNumber(PChannel::LastReadError) == 0) { PTRACE(3, "H46017\tRemote SHUT DOWN or Intermediary Shutdown!"); remoteShutDown = TRUE; } return FALSE; } else { // Inspect the signalling message to see if RAS if (HandleH46017RAS(rpdu)) continue; // return if a call is starting pdu = rpdu; return TRUE; } } } PBoolean H46017Transport::HandleH46017SignallingChannelPDU(PThread * thread) { H323SignalPDU pdu; if (!HandleH46017SignallingSocket(pdu)) { if (remoteShutDown) // Intentional Shutdown? Close(); return false; } // Create a new transport to the GK as this one will be closed at the end of the call. isConnected = TRUE; H46017Handler::curtransport = NULL; Feature->CreateNewTransport(); // Process the Tokens unsigned callReference = pdu.GetQ931().GetCallReference(); PString token = endpoint.BuildConnectionToken(*this, callReference, TRUE); con = endpoint.CreateConnection(callReference, NULL, this, &pdu); if (con == NULL) { PTRACE(1, "H46017\tEndpoint could not create connection, " << "sending release complete PDU: callRef=" << callReference); Q931 pdu; pdu.BuildReleaseComplete(callReference, TRUE); PBYTEArray rawData; pdu.Encode(rawData); WritePDU(rawData); return true; } PTRACE(3, "H46017\tCreated new connection: " << token); connectionsMutex.Wait(); endpoint.GetConnections().SetAt(token, con); connectionsMutex.Signal(); con->AttachSignalChannel(token, this, TRUE); AttachThread(thread); thread->SetNoAutoDelete(); if (con->HandleSignalPDU(pdu)) { // All subsequent PDU's should wait forever SetReadTimeout(PMaxTimeInterval); ReadTunnel(); } else { con->ClearCall(H323Connection::EndedByTransportFail); PTRACE(1, "H46017\tSignal channel stopped on first PDU."); } return true; } PBoolean H46017Transport::WritePDU(const PBYTEArray & pdu) { PWaitAndSignal m(WriteMutex); return H323TransportTCP::WritePDU(pdu); } PBoolean H46017Transport::WriteSignalPDU( const H323SignalPDU & pdu ) { PPER_Stream strm; pdu.Encode(strm); strm.CompleteEncoding(); if (WritePDU(strm)) return true; PTRACE(1, "TUNNEL\tWrite PDU failed (" << GetErrorNumber(PChannel::LastWriteError) << "): " << GetErrorText(PChannel::LastWriteError)); return false; } PBoolean H46017Transport::ReadPDU(PBYTEArray & pdu) { return H323TransportTCP::ReadPDU(pdu); } PBoolean H46017Transport::Connect() { PTRACE(4, "H46017\tConnecting to remote" ); if (!H323TransportTCP::Connect()) return false; return true; } void H46017Transport::ConnectionLost(PBoolean established) { PWaitAndSignal m(shutdownMutex); if (closeTransport) return; PBoolean lost = IsConnectionLost(); PTRACE(4,"H46017\tConnection lost " << established << " have " << lost); } PBoolean H46017Transport::IsConnectionLost() const { return Feature->IsConnectionLost(); } PBoolean H46017Transport::Close() { PWaitAndSignal m(shutdownMutex); PTRACE(4, "H46017\tClosing H46017 NAT channel."); closeTransport = TRUE; if (con) con->EndHandleControlChannel(); return H323TransportTCP::Close(); } PBoolean H46017Transport::IsOpen () const { return H323TransportTCP::IsOpen(); } PBoolean H46017Transport::IsListening() const { if (isConnected) return FALSE; if (h245listener == NULL) return FALSE; if (IsConnectionLost()) return FALSE; return h245listener->IsOpen(); } PBoolean H46017Transport::PostFrame(unsigned sessionID,bool rtp, const void * buf, PINDEX len) { if (!con) return false; H46017UDPSocket * socket = (H46017UDPSocket *)con->GetNatSocket(sessionID,rtp); if (socket) return ((H46017UDPSocket *)socket)->WriteBuffer(buf,len); PTRACE(3,"H46017\tCannot find Socket " << sessionID << " " << (rtp ? "RTP" : "RTCP")); return false; } void H46017Transport::GenerateFastUpdatePicture(int session) { PInt64 now = PTimer::Tick().GetMilliSeconds(); if (now - lastFUP > FAST_UPDATE_INTERVAL) { H323ControlPDU pdu; BuildFastUpdatePicture(session, pdu); con->HandleControlPDU(pdu); lastFUP = now; } } PBoolean H46017Transport::WriteTunnel(const H323SignalPDU & msg, const h225Order::MessageHeader & prior) { if (!IsOpen()) return false; queueMutex.Wait(); signalQueue.push(pair(H323SignalPDU(msg), prior) ); queueMutex.Signal(); return true; } PBoolean H46017Transport::ReadTunnel() { while (IsOpen()) { H323SignalPDU pdu; if (!pdu.Read(*this)) { PTRACE(3, "H46017\tSocket Read Failure"); return false; } PTRACE(6,"H46017\tTunnel Message Rec'd"); switch (pdu.GetQ931().GetMessageType()) { case Q931::FacilityMsg: if (ReadControl(pdu)) continue; case Q931::InformationMsg: if (ReadMedia(pdu)) continue; default: break; } if (!con->HandleReceivedSignalPDU(true, pdu)) { PTRACE(2,"H46017\tError in Tunnel Message"); return false; } } return true; } PBoolean H46017Transport::HandleControlPDU(const H323ControlPDU & pdu) { switch (pdu.GetTag()) { case H245_MultimediaSystemControlMessage::e_command: if (!HandleH245Command(false,pdu)) return true; // Disgard message case H245_MultimediaSystemControlMessage::e_request: case H245_MultimediaSystemControlMessage::e_response: case H245_MultimediaSystemControlMessage::e_indication: default: break; } return false; // Handle normally } PBoolean H46017Transport::ReadControl(const H323SignalPDU & msg) { if (!msg.m_h323_uu_pdu.HasOptionalField(H225_H323_UU_PDU::e_h245Control)) return false; for (PINDEX i = 0; i < msg.m_h323_uu_pdu.m_h245Control.GetSize(); i++) { PPER_Stream strm = msg.m_h323_uu_pdu.m_h245Control[i].GetValue(); H323ControlPDU pdu; if (pdu.Decode(strm)) return HandleControlPDU(pdu); } return true; } PBoolean H46017Transport::ReadMedia(const H323SignalPDU & msg) { if (msg.GetQ931().GetMessageType() != Q931::InformationMsg) return false; const H225_H323_UU_PDU & information = msg.m_h323_uu_pdu; if (!information.HasOptionalField(H225_H323_UU_PDU::e_genericData)) return false; if (information.m_genericData.GetSize() == 0) return false; const H225_GenericData & data = information.m_genericData[0]; H460_FeatureStd & feat = (H460_FeatureStd &)data; PASN_OctetString & media = feat.Value(H460_FeatureID(1)); H46017A_UDPFrame frame; media.DecodeSubType(frame); int session = frame.m_sessionId; bool rtp = frame.m_dataFrame; for (PINDEX i=0; i < frame.m_frame.GetSize(); i++) { const H46017A_FrameData & xdata = frame.m_frame[i]; const PASN_OctetString & payload = xdata; #if PACKET_ANALYSIS if (rtp) { RTP_DataFrame frameData(payload.GetSize()-12); memcpy(frameData.GetPointer(), payload.GetValue(), payload.GetSize()); AnalysePacket(false, session, frameData); } #endif PostFrame(session,rtp, payload.GetValue(), payload.GetSize()); } return true; } void H46017Transport::SocketWrite(PThread &, INT) { PAdaptiveDelay delay; int buffersz = 0; h225Order::MessageHeader msg; msg.sessionId = 0; msg.priority = 0; msg.packTime = PTimer::Tick().GetMilliSeconds(); H323SignalPDU pdu; for (;;) { if (!IsOpen()) break; queueMutex.Wait(); buffersz = signalQueue.size(); if (buffersz > 0) { msg = signalQueue.top().second; pdu = signalQueue.top().first; signalQueue.pop(); } queueMutex.Signal(); if (buffersz == 0) continue; PInt64 stackTime = (PTimer::Tick().GetMilliSeconds() - msg.packTime); PTRACE(1,"TEST\tP: " << msg.priority << " pack " << msg.packTime << " delay " << stackTime ); if ((stackTime > MAX_STACK_DESCRETION) && (msg.priority == h225Order::Priority_Discretion)) { #ifdef LOCAL_FASTUPDATE GenerateFastUpdatePicture(100+msg.sessionId); #endif PTRACE(1,"TEST\tFrame Dropped!"); continue; } if (stackTime > MAX_STACK_DELAY) { int sz = 0; queueMutex.Wait(); while (signalQueue.size() > 0) signalQueue.pop(); sz++; queueMutex.Signal(); PTRACE(1,"TEST\t" << sz << " Packets Dropped!"); continue; } if (!pdu.Write(*this,NULL)) { PTRACE(1,"H46017\tTunnel Write Failure!"); break; } PAdaptiveDelay wait; double sz = pdu.GetQ931().GetIE(Q931::UserUserIE).GetSize(); int delay = int((sz / MAX_PIPE_SHAPING) * 1000.0); PTRACE(1,"TEST\tWait " << delay << " sz " << int(sz)); wait.Delay(delay); } PTRACE(2,"H46017\tTunnel Write Thread ended"); } ///////////////////////////////////////////////////////////////////////////// H46017Transport * H46017Handler::curtransport = NULL; H46017Handler::H46017Handler(H323EndPoint & _ep, const H323TransportAddress & _remoteAddress) : ep(_ep), ras(NULL), remoteAddress(_remoteAddress) { PTRACE(4, "H46017\tCreating H46017 Feature."); PIPSocket::Address remAddr; remoteAddress.GetIpAddress(remAddr); localBindAddress = PIPSocket::GetRouteInterfaceAddress(remAddr); } H46017Handler::~H46017Handler() { callEnded = true; if (curtransport != NULL) { curtransport->Close(); curtransport = NULL; } if (ras != NULL) { delete ras; ras = NULL; } } PBoolean H46017Handler::CreateNewTransport() { PTRACE(5, "H46017\tCreating Transport."); curtransport = new H46017Transport(ep, PIPSocket::Address::GetAny(remoteAddress.GetIpVersion()), this); curtransport->SetRemoteAddress(remoteAddress); if (curtransport->Connect()) { PTRACE(3, "H46017\tConnected to " << curtransport->GetRemoteAddress()); new H46017TransportThread(curtransport->GetEndPoint(), curtransport); openTransport = true; return TRUE; } PTRACE(3, "H46017\tTransport Failure " << curtransport->GetRemoteAddress()); delete curtransport; return FALSE; } H323EndPoint * H46017Handler::GetEndPoint() { return &ep; } H323TransportAddress H46017Handler::GetTunnelBindAddress() const { return curtransport->GetLocalAddress(); } void H46017Handler::AttachRasTransport(H46017RasTransport * _ras) { ras = _ras; } H46017RasTransport * H46017Handler::GetRasTransport() { return ras; } PBoolean H46017Handler::RegisterGatekeeper() { if (!curtransport->IsOpen()) return false; if (ras) delete ras; ras = new H46017RasTransport(ep, this); PString dummyAddress("127.0.0.1:1719"); return ep.SetGatekeeper(dummyAddress, ras); } /////////////////////////////////////////////////////////////////////////////////////////// PCREATE_NAT_PLUGIN(H46017); PNatMethod_H46017::PNatMethod_H46017() : available(false), active(false), handler(NULL) { } PNatMethod_H46017::~PNatMethod_H46017() { } void PNatMethod_H46017::AttachEndPoint(H323EndPoint * ep) { WORD portPairBase = ep->GetRtpIpPortBase(); WORD portPairMax = ep->GetRtpIpPortMax(); // Initialise // ExternalAddress = 0; pairedPortInfo.basePort = 0; pairedPortInfo.maxPort = 0; pairedPortInfo.currentPort = 0; // Set the Port Pair Information pairedPortInfo.mutex.Wait(); pairedPortInfo.basePort = (WORD)((portPairBase+1)&0xfffe); if (portPairBase == 0) { pairedPortInfo.basePort = 0; pairedPortInfo.maxPort = 0; } else if (portPairMax == 0) pairedPortInfo.maxPort = (WORD)(pairedPortInfo.basePort+99); else if (portPairMax < portPairBase) pairedPortInfo.maxPort = portPairBase; else pairedPortInfo.maxPort = portPairMax; pairedPortInfo.currentPort = pairedPortInfo.basePort; pairedPortInfo.mutex.Signal(); available = FALSE; } PBoolean PNatMethod_H46017::GetExternalAddress( PIPSocket::Address & /*externalAddress*/, /// External address of router const PTimeInterval & /* maxAge */ /// Maximum age for caching ) { return FALSE; } PBoolean PNatMethod_H46017::CreateSocketPair( PUDPSocket * & socket1, PUDPSocket * & socket2, const PIPSocket::Address & binding, void * userData ) { if (pairedPortInfo.basePort == 0 || pairedPortInfo.basePort > pairedPortInfo.maxPort) { PTRACE(1, "H46017\tInvalid local UDP port range " << pairedPortInfo.currentPort << '-' << pairedPortInfo.maxPort); return FALSE; } H323Connection::SessionInformation * info = (H323Connection::SessionInformation *)userData; socket1 = new H46017UDPSocket(*handler,info,true); /// Data socket2 = new H46017UDPSocket(*handler,info,false); /// Signal /// Make sure we have sequential ports while ((!OpenSocket(*socket1, pairedPortInfo, binding)) || (!OpenSocket(*socket2, pairedPortInfo, binding)) || (socket2->GetPort() != socket1->GetPort() + 1) ) { delete socket1; delete socket2; socket1 = new H46017UDPSocket(*handler,info,true); /// Data socket2 = new H46017UDPSocket(*handler,info,false); /// Signal } SetInformationHeader(*socket1,*socket2,info); PTRACE(3, "H46017\tUDP Ports Opened " << socket1->GetPort() << "-" << socket2->GetPort()); return TRUE; } PBoolean PNatMethod_H46017::OpenSocket(PUDPSocket & socket, PortInfo & portInfo, const PIPSocket::Address & binding) const { PWaitAndSignal mutex(portInfo.mutex); WORD startPort = portInfo.currentPort; do { portInfo.currentPort++; if (portInfo.currentPort > portInfo.maxPort) portInfo.currentPort = portInfo.basePort; if (socket.Listen(binding, 1, portInfo.currentPort)) { socket.SetReadTimeout(500); return TRUE; } } while (portInfo.currentPort != startPort); PTRACE(2, "H46017\tFailed to bind to local UDP port in range " << portInfo.currentPort << '-' << portInfo.maxPort); return FALSE; } void PNatMethod_H46017::SetInformationHeader(PUDPSocket & data, PUDPSocket & control, H323Connection::SessionInformation * info) { if (!handler || handler->GetEndPoint() == NULL) return; const H323Transport * transport = NULL; H323SignalPDU informationMsg; H323Connection * connection = PRemoveConst(H323Connection, info->GetConnection()); if (connection != NULL) { informationMsg.BuildInformation(*connection); transport = connection->GetSignallingChannel(); } ((H46017UDPSocket &)data).SetInformationHeader(informationMsg, transport); ((H46017UDPSocket &)control).SetInformationHeader(informationMsg, transport); } ///////////////////////////////////////////////////////////////////////////////////////////// H46017UDPSocket::H46017UDPSocket(H46017Handler & _handler, H323Connection::SessionInformation * info, bool _rtpSocket) : m_transport(NULL), m_Session(info->GetSessionID()), rtpSocket(_rtpSocket), m_frameCount(0), m_payloadSize(0), m_frame(NULL), shutDown(false) { } H46017UDPSocket::~H46017UDPSocket() { shutDown = true; writeMutex.Wait(); while (!rtpQueue.empty()) { delete rtpQueue.front(); rtpQueue.pop(); } writeMutex.Signal(); delete m_frame; } void H46017UDPSocket::SetInformationHeader(const H323SignalPDU & _InformationMsg, const H323Transport * _transport) { msg = _InformationMsg; m_transport = (H46017Transport *)PRemoveConst(H323Transport,_transport); } PBoolean H46017UDPSocket::BuildTunnelMediaPacket(const void * buf, PINDEX len) { PBoolean toSend = true; m_frameCount++; H46017A_FrameData fdata; fdata.SetTag(!rtpSocket); PASN_OctetString & raw = fdata; if (rtpSocket) { #if PACKET_ANALYSIS RTP_DataFrame testFrame(len-12); memcpy(testFrame.GetPointer(),buf,len); AnalysePacket(true, m_Session, testFrame); #endif if (m_Session == 1) { // Audio frame bundling toSend = (m_frameCount + 1 >= MAX_AUDIO_FRAMES); m_frameCount++; } else { // 1 complete frame per packet if possible RTP_DataFrame dataFrame(len-12); m_payloadSize += len; memcpy(dataFrame.GetPointer(),buf,len); toSend = ((m_payloadSize + dataFrame.GetSize() >= MAX_VIDEO_PAYLOAD) || dataFrame.GetMarker()); } } raw.SetValue((const BYTE *)buf,len); if (!m_frame) { m_frame = new H46017A_UDPFrame(); m_frame->m_sessionId.SetValue(m_Session); m_frame->m_dataFrame = rtpSocket; } // add it to the message stack int sz = m_frame->m_frame.GetSize(); m_frame->m_frame.SetSize(sz+1); m_frame->m_frame[sz] = fdata; if (toSend) { PTRACE(1,"TEST\tTUNNEL SEND " << m_Session << " " << m_frame->m_frame.GetSize() << " frames."); H323SignalPDU * tunnelmsg = new H323SignalPDU(msg); H225_H323_UU_PDU & information = tunnelmsg->m_h323_uu_pdu; information.IncludeOptionalField(H225_H323_UU_PDU::e_genericData); information.m_genericData.SetSize(1); H225_GenericData & data = information.m_genericData[0]; H460_FeatureStd feat = H460_FeatureStd(17); PASN_OctetString encFrame; encFrame.EncodeSubType(*m_frame); feat.Add(1,H460_FeatureContent(encFrame)); data = feat; // Encode the message tunnelmsg->BuildQ931(); h225Order::MessageHeader prior; prior.sessionId = m_Session; if (rtpSocket) prior.priority = ((m_Session == 1) ? h225Order::Priority_Critical : h225Order::Priority_Discretion); else prior.priority = h225Order::Priority_low; prior.packTime = PTimer::Tick().GetMilliSeconds(); if (m_transport) m_transport->WriteTunnel(*tunnelmsg,prior); delete tunnelmsg; m_frameCount=0; m_payloadSize=0; delete m_frame; m_frame = NULL; } return (toSend); } PBoolean H46017UDPSocket::WriteBuffer(const void * buf, PINDEX len) { PWaitAndSignal m(writeMutex); if (!shutDown) { rtpQueue.push(new PBYTEArray((BYTE *)buf,len)); return true; } else return false; } PBoolean H46017UDPSocket::DoPseudoRead(int & selectStatus) { PAdaptiveDelay selectBlock; while (rtpSocket && rtpQueue.size() == 0) { selectBlock.Delay(2); if (shutDown) break; } selectStatus += ((rtpQueue.size() > 0) ? (rtpSocket ? -1 : -2) : 0); return rtpSocket; } PBoolean H46017UDPSocket::ReadFrom(void * buf, PINDEX len, Address & addr, WORD & port) { addr = "0.0.0.0"; port = 0; while (!shutDown) { if (rtpQueue.empty()) { PThread::Sleep(5); continue; } writeMutex.Wait(); PBYTEArray * rtp = rtpQueue.front(); rtpQueue.pop(); writeMutex.Signal(); buf = rtp->GetPointer(); len = rtp->GetSize(); break; } return true; } PBoolean H46017UDPSocket::WriteTo(const void * buf, PINDEX len, const Address & /*addr*/, WORD /*port*/) { BuildTunnelMediaPacket(buf, len); return true; } void H46017UDPSocket::GetLocalAddress(H245_TransportAddress & add) { PIPSocket::Address m_locAddr = PIPSocket::GetDefaultIpAny(); WORD m_locPort = 0; H323TransportAddress ladd(m_locAddr,m_locPort); ladd.SetPDU(add); } void H46017UDPSocket::SetRemoteAddress(const H245_TransportAddress & add) { // Ignore! } ///////////////////////////////////////////////////////////////////////// H46017RasTransport::H46017RasTransport(H323EndPoint & endpoint, H46017Handler * handler) : H323TransportUDP(endpoint), m_handler(handler) { m_handler->AttachRasTransport(this); } H46017RasTransport::~H46017RasTransport() { } PBoolean H46017RasTransport::SetRemoteAddress(const H323TransportAddress & /*address*/) { return true; } PBoolean H46017RasTransport::Connect() { return true; } PBoolean H46017RasTransport::ReceivedPDU(const PBYTEArray & pdu) { recdpdu = pdu; msgRecd.Signal(); return true; } PBoolean H46017RasTransport::ReadPDU(PBYTEArray & pdu) { msgRecd.Wait(); pdu = recdpdu; return true; } PBoolean H46017RasTransport::WritePDU(const PBYTEArray & pdu) { return H46017Handler::curtransport->WriteRasPDU(pdu); } PBoolean H46017RasTransport::DiscoverGatekeeper(H323Gatekeeper & /*gk*/, H323RasPDU & /*pdu*/, const H323TransportAddress & /*address*/) { return true; } H323TransportAddress H46017RasTransport::GetLocalAddress() const { return m_handler->GetTunnelBindAddress(); } #endif // H323_H46017 h323plus/src/h460/upnpcp.cxx0000644000175000017500000011000711653741600014412 0ustar markmark/* * upnpcp.cxx * * UPnP NAT Traversal class. * * h323plus library * * Copyright (c) 2009 ISVO (Asia) Pte. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * * Contributor(s): ______________________________________. * * $Id: upnpcp.cxx,v 1.7 2011/11/01 10:01:36 shorne Exp $ * * */ #include "ptlib.h" #include "h323.h" #ifdef H323_UPnP #include "h460/upnpcp.h" #ifdef H323_H46019M #include "h460/h46018_h225.h" #endif #include #include #include ///////////////////////////////////////////////////////////////////// #define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } } #define UPnPBasePort 55001 // Utilities template class deletepair { // PAIR::second_type is a pointer type public: void operator()(const PAIR & p) { delete p.second; } }; template inline void DeleteObjectsInMap(const M & m) { typedef typename M::value_type PAIR; std::for_each(m.begin(), m.end(), deletepair()); } //////////////////////////////////////////////////////////////////// class DeviceInformationContainer { public: DeviceInformationContainer() : Children(""), Description(""), FriendlyName(""), HasChildren(""), IconURL(""), IsRootDevice(""), ManufacturerName(""), ManufacturerURL(""), ModelName(""), ModelNumber(""), ModelURL(""), ParentDevice(""), PresentationURL(""), RootDevice(""), SerialNumber(""), Services(""), Type(""), UniqueDeviceName(""), UPC("") { }; // see http://msdn.microsoft.com/library/en-us/upnp/upnp/iupnpdevice.asp PString Children; // Child devices of the device. PString Description; // Human-readable form of the summary of a device's functionality. PString FriendlyName; // Device display name. PString HasChildren; // Indicates whether the device has any child devices. PString IconURL; // URL of icon PString IsRootDevice; // Indicates whether the device is the top-most device in the device tree. PString ManufacturerName; // Human-readable form of the manufacturer name. PString ManufacturerURL; // URL for the manufacturer's Web site. PString ModelName; // Human-readable form of the model name. PString ModelNumber; // Human-readable form of the model number. PString ModelURL; // URL for a Web page that contains model-specific information. PString ParentDevice; // Parent of the device. PString PresentationURL; // Presentation URL for a Web page that can be used to control the device. PString RootDevice; // Top-most device in the device tree. PString SerialNumber; // Human-readable form of the serial number. PString Services; // List of services provided by the device. PString Type; // Uniform resource identifier (URI) for the device type. PString UniqueDeviceName; // Unique device name (UDN) of the device. PString UPC; // Human-readable form of the product code. }; ////////////////////////////////////////////////////////////////////// class PortMappingContainer : public PObject { public: PortMappingContainer() : ExternalIPAddress(""), ExternalPort(0), InternalPort(0), Protocol("UDP"), InternalClient(""), Enabled(true), Description("") { }; PObject * Clone() const; PString ExternalIPAddress; WORD ExternalPort; WORD InternalPort; PString Protocol; PString InternalClient; bool Enabled; PString Description; }; PObject * PortMappingContainer::Clone() const { return new PortMappingContainer(*this); } ///////////////////////////////////////////////////////////////////// class UPnPThread; class UPnPCallbacks : public PObject { public: UPnPCallbacks(UPnPThread * upnp); virtual HRESULT OnNewNumberOfEntries(long lNewNumberOfEntries); virtual HRESULT OnNewExternalIPAddress( const PString & extIPAddress); protected: UPnPThread * m_upnp; }; interface IxNATExternalIPAddressCallback : public INATExternalIPAddressCallback { IxNATExternalIPAddressCallback(UPnPCallbacks* p ) : m_pointer( p ), m_dwRef( 0 ) { }; ~IxNATExternalIPAddressCallback() { delete m_pointer; } HRESULT STDMETHODCALLTYPE NewExternalIPAddress( BSTR bstrNewExternalIPAddress ) { PAssert(m_pointer != NULL,PLogicError); return m_pointer->OnNewExternalIPAddress(bstrNewExternalIPAddress); } HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void ** ppvObject); ULONG STDMETHODCALLTYPE AddRef() { return ++m_dwRef; } ULONG STDMETHODCALLTYPE Release() { if ( --m_dwRef == 0 ) delete this; return m_dwRef; } DWORD m_dwRef; UPnPCallbacks* m_pointer; }; HRESULT STDMETHODCALLTYPE IxNATExternalIPAddressCallback::QueryInterface(REFIID iid, void ** ppvObject) { HRESULT hr = S_OK; *ppvObject = NULL; if ( iid == IID_IUnknown || iid == IID_INATExternalIPAddressCallback ) { *ppvObject = this; AddRef(); hr = NOERROR; } else { hr = E_NOINTERFACE; } return hr; } ///////////////////////////////////////////////////////////////////////////////////////// interface IxNATNumberOfEntriesCallback : public INATNumberOfEntriesCallback { IxNATNumberOfEntriesCallback(UPnPCallbacks* p ) : m_pointer( p ), m_dwRef( 0 ) { }; ~IxNATNumberOfEntriesCallback() { delete m_pointer; } HRESULT STDMETHODCALLTYPE NewNumberOfEntries( long lNewNumberOfEntries ) { PAssert(m_pointer != NULL,PLogicError); return m_pointer->OnNewNumberOfEntries( lNewNumberOfEntries ); } HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void ** ppvObject); ULONG STDMETHODCALLTYPE AddRef() { return ++m_dwRef; } ULONG STDMETHODCALLTYPE Release() { if ( --m_dwRef == 0 ) delete this; return m_dwRef; } DWORD m_dwRef; UPnPCallbacks* m_pointer; }; HRESULT STDMETHODCALLTYPE IxNATNumberOfEntriesCallback::QueryInterface(REFIID iid, void ** ppvObject) { HRESULT hr = S_OK; *ppvObject = NULL; if ( iid == IID_IUnknown || iid == IID_INATNumberOfEntriesCallback ) { *ppvObject = this; AddRef(); hr = NOERROR; } else { hr = E_NOINTERFACE; } return hr; } //////////////////////////////////////////////////////////////////// class UPnPThread : public PThread { public: UPnPThread(PNatMethod_UPnP * nat); ~UPnPThread(); void Main(); bool CreateMap(bool pair, const PString & protocol, const PIPSocket::Address & localIP, const WORD & locPort, PIPSocket::Address & extIP , WORD & extPort); bool RemoveMap(WORD port); void SetExtIPAddress(const PString & newAddr); void SetMappingEnum(); void Shutdown(); protected: bool Initialise(); bool DetectDevice(PStringList & devNames); bool PopulateDeviceInfoContainer( IUPnPDevice* piDevice, DeviceInformationContainer& deviceInfo); bool AddMapping(PortMappingContainer& newMapping); bool RemoveMapping(PortMappingContainer& newMapping); WORD GetNextFreePort(bool pair); void Close(); bool EnumMaps(); bool TestMapping(); private: IUPnPNAT* m_piNAT; INATEventManager* m_piEventManager; map m_piMaps; map m_piUPnPMaps; PNatMethod_UPnP* m_piNatMethod; UPnPCallbacks* m_piCallbacks; PMutex m_MapMutex; PSyncPoint m_ThreadSync; bool m_piNewMapping; bool m_piShutdown; }; UPnPThread::UPnPThread(PNatMethod_UPnP * nat) : PThread(1000,NoAutoDeleteThread, NormalPriority, "UPnP Thread"), m_piNatMethod(nat) { m_piNAT = NULL; m_piEventManager = NULL; m_piCallbacks = NULL; m_piNewMapping = false; m_piShutdown = false; Resume(); } bool UPnPThread::Initialise() { PTRACE(4,"UPnP\tInitialising UPnP"); m_piCallbacks = new UPnPCallbacks(this); CoUninitialize(); // Unitialise MTA HRESULT result = CoInitialize(NULL); // Initialise STA if (FAILED(result)) { PTRACE(4,"UPnP\tInitialization Failure"); return false; } result = CoCreateInstance(__uuidof(UPnPNAT), NULL, CLSCTX_ALL, __uuidof(IUPnPNAT), (void **)&m_piNAT); if (FAILED(result)) { PTRACE(4,"UPnP\tError initialising UPnP Instance"); return false; } result = m_piNAT->get_NATEventManager(&m_piEventManager); if (FAILED(result)) { PTRACE(4,"UPnP\tError UPnP EventManager.."); SAFE_RELEASE(m_piNAT); return false; } if (m_piEventManager) { result = m_piEventManager->put_ExternalIPAddressCallback(new IxNATExternalIPAddressCallback(m_piCallbacks)); if (FAILED(result)) { SAFE_RELEASE(m_piEventManager); SAFE_RELEASE(m_piNAT); return false; } result = m_piEventManager->put_NumberOfEntriesCallback(new IxNATNumberOfEntriesCallback(m_piCallbacks)); if (FAILED(result)) { SAFE_RELEASE(m_piEventManager); SAFE_RELEASE(m_piNAT); return false; } } else { PTRACE(4,"UPnP\tUPnP EventManager unavailable"); return false; } return true; } UPnPThread::~UPnPThread() { Shutdown(); } void UPnPThread::Main() { if (!Initialise()) { PTRACE(4,"UPnP\tError in Initialising Method Aborted!"); return; } PStringList IGDdevices; if (DetectDevice(IGDdevices) && TestMapping()) { m_piNatMethod->SetAvailable(IGDdevices[0]); while (!m_piShutdown) { if (m_piNewMapping) EnumMaps(); m_ThreadSync.Wait(200); } } Close(); } void UPnPThread::Shutdown() { m_piShutdown = true; m_ThreadSync.Signal(); } void UPnPThread::Close() { for each(pair c in m_piMaps) RemoveMapping(*c.second); DeleteObjectsInMap(m_piMaps); DeleteObjectsInMap(m_piUPnPMaps); SAFE_RELEASE(m_piEventManager); SAFE_RELEASE(m_piNAT); } bool UPnPThread::RemoveMap(WORD port) { PWaitAndSignal m(m_MapMutex); map::iterator it = m_piMaps.find(port); if (it != m_piMaps.end()) { RemoveMapping(*it->second); m_piMaps.erase(it); } return true; } WORD UPnPThread::GetNextFreePort(bool pair) { WORD port = UPnPBasePort; bool found = false; // find a free port while (!found) { if ((m_piMaps.find(port) == m_piMaps.end()) && (m_piUPnPMaps.find(port) == m_piUPnPMaps.end())) { if (pair) { if ((m_piMaps.find(port+1) == m_piMaps.end()) && (m_piUPnPMaps.find(port+1)== m_piUPnPMaps.end())) found = true; } else found = true; } if (!found) port++; } return port; } bool UPnPThread::CreateMap(bool pair, const PString & protocol, const PIPSocket::Address & localIP, const WORD & locPort, PIPSocket::Address & extIP , WORD & extPort) { PWaitAndSignal m(m_MapMutex); PINDEX size = 1; if (pair) size = 2; WORD port = GetNextFreePort(pair); bool success = false; PortMappingContainer umap; for (WORD i=0; i < size; i++) { umap.Protocol = protocol; umap.InternalClient = localIP.AsString(); umap.InternalPort = locPort + i; umap.Description = "h323plus"; umap.ExternalPort = port + i; if (AddMapping(umap)) { PTRACE(4,"UPnP\tCreated map " << protocol << " " << umap.InternalClient << ":" << umap.InternalPort << " to " << umap.ExternalIPAddress << ":" << umap.ExternalPort); m_piMaps.insert(std::pair(umap.ExternalPort,(PortMappingContainer*)umap.Clone())); if (i == 0) { extIP = umap.ExternalIPAddress; extPort = umap.ExternalPort; } success = true; } } return success; } bool GetNextMapping(IEnumVARIANT* piEnumerator, PortMappingContainer& mappingContainer) { // uses the enumerator to get the next mapping and fill in a mapping container structure if (!piEnumerator) return false; VARIANT varCurMapping; VariantInit(&varCurMapping); HRESULT result = piEnumerator->Next( 1, &varCurMapping, NULL); if (FAILED(result) || varCurMapping.vt == VT_EMPTY) return false; IStaticPortMapping* piMapping = NULL; IDispatch* piDispMap = V_DISPATCH(&varCurMapping); result = piDispMap->QueryInterface(IID_IStaticPortMapping, (void **)&piMapping); if (FAILED(result)) return false; // get external address BSTR bStr = NULL; result = piMapping->get_ExternalIPAddress(&bStr); if (FAILED(result) || !bStr) { SAFE_RELEASE(piMapping); return false; } mappingContainer.ExternalIPAddress = bStr; SysFreeString(bStr); // get external port long lValue = 0; result = piMapping->get_ExternalPort( &lValue ); if (FAILED(result)) { SAFE_RELEASE(piMapping); return false; } mappingContainer.ExternalPort = (WORD)lValue; // get internal port result = piMapping->get_InternalPort( &lValue ); if (FAILED(result)) { SAFE_RELEASE(piMapping); return false; } mappingContainer.InternalPort = (WORD)lValue; // get protocol result = piMapping->get_Protocol(&bStr); if (FAILED(result) || !bStr) { SAFE_RELEASE(piMapping); return false; } mappingContainer.Protocol = bStr; SysFreeString(bStr); // get internal client result = piMapping->get_InternalClient(&bStr); if (FAILED(result) || !bStr) { SAFE_RELEASE(piMapping); return false; } mappingContainer.InternalClient = bStr; SysFreeString(bStr); // determine whether it's enabled VARIANT_BOOL bValue = VARIANT_FALSE; result = piMapping->get_Enabled(&bValue); if (FAILED(result)) { SAFE_RELEASE(piMapping); return false; } mappingContainer.Enabled = (bValue==VARIANT_FALSE) ? false : true; // get description result = piMapping->get_Description( &bStr ); if (FAILED(result) || !bStr) { SAFE_RELEASE(piMapping); return false; } mappingContainer.Description = bStr; SysFreeString(bStr); SAFE_RELEASE(piMapping); VariantClear(&varCurMapping); return true; } bool UPnPThread::EnumMaps() { PWaitAndSignal m(m_MapMutex); IStaticPortMappingCollection* piPortMappingCollection = NULL; if (FAILED(m_piNAT->get_StaticPortMappingCollection(&piPortMappingCollection) ) || (piPortMappingCollection==NULL ) ) { PTRACE(4,"UPnP\tError: Could not access Static Mapping Collection!"); return false; } IUnknown* piUnk = NULL; IEnumVARIANT* piEnumerator = NULL; if (FAILED(piPortMappingCollection->get__NewEnum(&piUnk)) || piUnk==NULL ) { PTRACE(4,"UPnP\tError: Could not access Static Mapping Collection!"); SAFE_RELEASE(piPortMappingCollection); return false; } if (FAILED(piUnk->QueryInterface(IID_IEnumVARIANT, (void **)&piEnumerator) ) || piEnumerator==NULL ) { PTRACE(4,"UPnP\tError: Could not enumerate Static Mapping Collection!"); SAFE_RELEASE(piPortMappingCollection); return false; } if (FAILED(piEnumerator->Reset())) { PTRACE(4,"UPnP\tError: Could not reset enumeration"); SAFE_RELEASE(piPortMappingCollection); return false; } DeleteObjectsInMap(m_piUPnPMaps); PortMappingContainer mapCont; while (GetNextMapping(piEnumerator, mapCont)) { if (mapCont.Protocol == "UDP") m_piUPnPMaps.insert(std::pair(mapCont.ExternalPort, (PortMappingContainer*)mapCont.Clone())); } m_piNewMapping = false; return true; } bool UPnPThread::AddMapping(PortMappingContainer& newMapping) { if (!m_piNAT) return false; IStaticPortMappingCollection* m_piPortMappingCollection = NULL; if (FAILED(m_piNAT->get_StaticPortMappingCollection(&m_piPortMappingCollection)) || !m_piPortMappingCollection) { PTRACE(4,"UPnP\tError: Could not access Static Mapping Collection!"); return false; } bool success = false; IStaticPortMapping* m_piStaticPortMapping = NULL; if (SUCCEEDED(m_piPortMappingCollection->Add(newMapping.ExternalPort, SysAllocString(newMapping.Protocol.AsUCS2()), newMapping.InternalPort, SysAllocString(newMapping.InternalClient.AsUCS2()), newMapping.Enabled , SysAllocString(newMapping.Description.AsUCS2()), &m_piStaticPortMapping))) { BSTR extIP; m_piStaticPortMapping->get_ExternalIPAddress(&extIP); newMapping.ExternalIPAddress = extIP; PIPSocket::Address mapaddr(newMapping.ExternalIPAddress); success = (mapaddr.IsValid() && !mapaddr.IsLoopback() && !mapaddr.IsAny()); } SAFE_RELEASE(m_piStaticPortMapping); SAFE_RELEASE(m_piPortMappingCollection); return success; } bool UPnPThread::RemoveMapping(PortMappingContainer& newMapping) { if (!m_piNAT) return false; IStaticPortMappingCollection* m_piPortMappingCollection = NULL; if (FAILED(m_piNAT->get_StaticPortMappingCollection(&m_piPortMappingCollection)) || !m_piPortMappingCollection) { PTRACE(4,"UPnP\tError: Could not access Static Mapping Collection!"); return false; } bool success = false; IStaticPortMapping* m_piStaticPortMapping = NULL; if (SUCCEEDED(m_piPortMappingCollection->Remove(newMapping.ExternalPort, SysAllocString(newMapping.Protocol.AsUCS2())))) { success = true; PTRACE(4,"UPnP\tMap removed " << newMapping.Protocol << " " << newMapping.ExternalPort); } SAFE_RELEASE(m_piStaticPortMapping); SAFE_RELEASE(m_piPortMappingCollection); return success; } void UPnPThread::SetMappingEnum() { m_piNewMapping = true; m_ThreadSync.Signal(); } void UPnPThread::SetExtIPAddress(const PString & newAddr) { m_piNatMethod->SetExtIPAddress(newAddr); } bool UPnPThread::PopulateDeviceInfoContainer( IUPnPDevice* piDevice, DeviceInformationContainer& deviceInfo) { HRESULT result=S_OK, hrReturn=S_OK; long lValue = 0; BSTR bStr = NULL; VARIANT_BOOL bValue = VARIANT_FALSE; IUPnPDevices* piDevices = NULL; result = piDevice->get_Children( &piDevices ); hrReturn |= result; if ( SUCCEEDED(result) && (piDevices!=NULL) ) { piDevices->get_Count( &lValue ); if ( lValue==0 ) { deviceInfo.Children = "No: Zero children"; } else if ( lValue==1 ) { deviceInfo.Children = "Yes: One child"; } else if ( lValue>=1 ) { deviceInfo.Children = "Yes: " + lValue; } SAFE_RELEASE(piDevices); lValue = 0; } // Get Description result = piDevice->get_Description( &bStr ); hrReturn |= result; if ( SUCCEEDED(result) ) { deviceInfo.Description = bStr; SysFreeString(bStr); } // Get FriendlyName result = piDevice->get_FriendlyName( &bStr ); hrReturn |= result; if ( SUCCEEDED(result) ) { deviceInfo.FriendlyName = bStr; SysFreeString(bStr); } // Get HasChildren result = piDevice->get_HasChildren( &bValue ); hrReturn |= result; if ( SUCCEEDED(result) ) { deviceInfo.HasChildren = (bValue==VARIANT_FALSE ? "No" : "Yes"); bValue = VARIANT_FALSE; } // Get IconURL BSTR bStrMime = SysAllocString(L"image/gif"); result = piDevice->IconURL( bStrMime, 32, 32, 8, &bStr ); hrReturn |= result; if ( SUCCEEDED(result) ) { deviceInfo.IconURL = bStr; SysFreeString(bStr); } SysFreeString(bStrMime); bStrMime = NULL; // Get IsRootDevice result = piDevice->get_IsRootDevice(&bValue); hrReturn |= result; if ( SUCCEEDED(result) ) { deviceInfo.IsRootDevice = (bValue==VARIANT_FALSE ? "No": "Yes"); bValue = VARIANT_FALSE; } // Get ManufacturerName result = piDevice->get_ManufacturerName(&bStr); hrReturn |= result; if ( SUCCEEDED(result) ) { deviceInfo.ManufacturerName = bStr; SysFreeString(bStr); } // Get ManufacturerURL result = piDevice->get_ManufacturerURL(&bStr); hrReturn |= result; if ( SUCCEEDED(result) ) { deviceInfo.ManufacturerURL = bStr; SysFreeString(bStr); } // Get ModelName result = piDevice->get_ModelName(&bStr); hrReturn |= result; if (SUCCEEDED(result)) { deviceInfo.ModelName = bStr; SysFreeString(bStr); } // Get ModelNumber result = piDevice->get_ModelNumber(&bStr); hrReturn |= result; if ( SUCCEEDED(result) ) { deviceInfo.ModelNumber = bStr; SysFreeString(bStr); } // Get ModelURL result = piDevice->get_ModelURL(&bStr); hrReturn |= result; if ( SUCCEEDED(result) ) { deviceInfo.ModelURL = bStr; SysFreeString(bStr); } IUPnPDevice* piDev = NULL; result = piDevice->get_ParentDevice( &piDev ); hrReturn |= result; if ( SUCCEEDED(result) ){ if (!piDev) { deviceInfo.ParentDevice = "This is a topmost device"; } else { if (SUCCEEDED(piDev->get_FriendlyName(&bStr))) { deviceInfo.ParentDevice = bStr; SysFreeString(bStr); } SAFE_RELEASE(piDev); } } // Get PresentationURL result = piDevice->get_PresentationURL(&bStr); hrReturn |= result; if (SUCCEEDED(result)) { deviceInfo.PresentationURL = bStr; SysFreeString(bStr); } // Get RootDevice. Actually, we will only get the FriendlyName of the root device, result = piDevice->get_RootDevice(&piDev); hrReturn |= result; if ( SUCCEEDED(result) ) { if (!piDev) { deviceInfo.RootDevice = "This is a topmost device"; } else { if (SUCCEEDED(piDev->get_FriendlyName(&bStr))) { deviceInfo.RootDevice = bStr; SysFreeString(bStr); } SAFE_RELEASE(piDev); } } // Get SerialNumber result = piDevice->get_SerialNumber(&bStr); hrReturn |= result; if ( SUCCEEDED(result) ) { deviceInfo.SerialNumber = bStr; SysFreeString(bStr); } // Get Services. Actually, we will NOT enumerate through all the services that are contained // in the IUPnPServices collection. Rather, we will only get a count of services IUPnPServices* piServices = NULL; result = piDevice->get_Services(&piServices); hrReturn |= result; if (SUCCEEDED(result) && (piServices!=NULL)) { piServices->get_Count(&lValue); if (lValue==0) deviceInfo.Services = "No: Zero services"; else if (lValue==1) deviceInfo.Services = "Yes: One service"; else if (lValue>=1) deviceInfo.Services = "Yes: " + lValue; SAFE_RELEASE(piServices); lValue = 0; } // Get Type result = piDevice->get_Type(&bStr); hrReturn |= result; if (SUCCEEDED(result)) { deviceInfo.Type = bStr; SysFreeString(bStr); } // Get UniqueDeviceName result = piDevice->get_UniqueDeviceName( &bStr ); hrReturn |= result; if ( SUCCEEDED(result) ) { deviceInfo.UniqueDeviceName = bStr; SysFreeString(bStr); } // Get UPC result = piDevice->get_UPC(&bStr); hrReturn |= result; if ( SUCCEEDED(result) ) { deviceInfo.UPC = bStr; SysFreeString(bStr); } return true; } bool UPnPThread::DetectDevice(PStringList & devNames) { IUPnPDeviceFinder* piDeviceFinder = NULL; if (FAILED( CoCreateInstance( CLSID_UPnPDeviceFinder, NULL, CLSCTX_ALL, IID_IUPnPDeviceFinder, (void**) &piDeviceFinder ) ) || ( piDeviceFinder==NULL ) ) { PTRACE(4,"UPnP\tError Initialising Device Finder"); return false; } BSTR bStrDev = SysAllocString( L"urn:schemas-upnp-org:device:InternetGatewayDevice:1" ); IUPnPDevices* piFoundDevices = NULL; if (FAILED(piDeviceFinder->FindByType(bStrDev, 0, &piFoundDevices))) { PTRACE(4,"UPnP\tNo IGD device found!"); SysFreeString(bStrDev); return false; } SysFreeString(bStrDev); if (!piFoundDevices) { PTRACE(4,"UPnP\tError IGD Device is NULL"); return false; } HRESULT result = S_OK; IUnknown * pUnk = NULL; DeviceInformationContainer deviceInfo; if (SUCCEEDED( piFoundDevices->get__NewEnum(&pUnk) ) && ( pUnk!=NULL ) ) { IEnumVARIANT * pEnumVar = NULL; result = pUnk->QueryInterface(IID_IEnumVARIANT, (void **) &pEnumVar); if (SUCCEEDED(result)) { VARIANT varCurDevice; VariantInit(&varCurDevice); pEnumVar->Reset(); // Loop through each device in the collection while (S_OK == pEnumVar->Next(1, &varCurDevice, NULL)) { IUPnPDevice * pDevice = NULL; IDispatch * pdispDevice = V_DISPATCH(&varCurDevice); if (SUCCEEDED(pdispDevice->QueryInterface(IID_IUPnPDevice, (void **) &pDevice))) { // finally, post interval notification message and get all the needed information result = PopulateDeviceInfoContainer(pDevice, deviceInfo); PTRACE(6,"UPnP\tDevice detected " << deviceInfo.FriendlyName << "\n" << deviceInfo.ManufacturerName << " " << deviceInfo.ModelName << " " << deviceInfo.ModelNumber); devNames.AppendString(deviceInfo.FriendlyName); } VariantClear(&varCurDevice); } pEnumVar->Release(); } pUnk->Release(); } SAFE_RELEASE(piDeviceFinder); return (devNames.GetSize() > 0); } PBoolean UPnPThread::TestMapping() { WORD locPort,extPort; PIPSocket::Address locAddr, extAddr; PTRACE(4,"UPnP\tPerforming Port Mapping Test"); locAddr = PIPSocket::GetGatewayInterfaceAddress(4); locPort = m_piNatMethod->GetEndPoint()->GetRtpIpPortBase(); if (CreateMap(true,"UDP",locAddr,locPort,extAddr,extPort)) { RemoveMap(extPort); RemoveMap(extPort+1); PTRACE(4,"UPnP\tPort Mapping Test successful!"); return true; } PTRACE(4,"UPnP\tError in Port Mapping Test ABORT!"); return false; } //////////////////////////////////////////////////////////////////// UPnPCallbacks::UPnPCallbacks(UPnPThread * upnp) : m_upnp(upnp) { } HRESULT UPnPCallbacks::OnNewNumberOfEntries(long lNewNumberOfEntries) { m_upnp->SetMappingEnum(); return S_OK; } HRESULT UPnPCallbacks::OnNewExternalIPAddress(const PString & extIPAddress) { m_upnp->SetExtIPAddress(extIPAddress); return S_OK; } //////////////////////////////////////////////////////////////////// PCREATE_NAT_PLUGIN(UPnP); PNatMethod_UPnP::PNatMethod_UPnP() { available = false; active = false; m_pShutdown = false; m_pExtIP = PIPSocket::GetDefaultIpAny(); ep = NULL; m_pUPnP = NULL; } PNatMethod_UPnP::~PNatMethod_UPnP() { m_pShutdown = true; if (m_pUPnP) { m_pUPnP->Shutdown(); m_pUPnP->WaitForTermination(2000); delete m_pUPnP; } } void PNatMethod_UPnP::AttachEndPoint(H323EndPoint * _ep) { ep = _ep; SetPortRanges(ep->GetUDPPortBase(), ep->GetUDPPortMax(), ep->GetRtpIpPortBase(), ep->GetRtpIpPortMax()); m_pUPnP = new UPnPThread(this); } PBoolean PNatMethod_UPnP::GetExternalAddress(PIPSocket::Address & externalAddress, const PTimeInterval & /*maxAge*/) { if (available) externalAddress = m_pExtIP; return available; } PBoolean PNatMethod_UPnP::CreateSocketPair(PUDPSocket * & socket1, PUDPSocket * & socket2, const PIPSocket::Address & binding, void * userData) { #ifdef H323_H46019M H323Connection::SessionInformation * info = (H323Connection::SessionInformation *)userData; PNatMethod_H46019 * handler = (PNatMethod_H46019 *)ep->GetNatMethods().GetMethodByName("H46019"); if (handler && info->GetRecvMultiplexID() > 0) { if (!handler->IsMultiplexed()) { H46019MultiplexSocket * & muxSocket1 = (H46019MultiplexSocket * &)handler->GetMultiplexSocket(true); H46019MultiplexSocket * & muxSocket2 = (H46019MultiplexSocket * &)handler->GetMultiplexSocket(false); muxSocket1 = new H46019MultiplexSocket(true); muxSocket2 = new H46019MultiplexSocket(false); pairedPortInfo.basePort = ep->GetMultiplexPort(); pairedPortInfo.maxPort = pairedPortInfo.basePort+1; pairedPortInfo.currentPort = pairedPortInfo.basePort-1; while ((!OpenSocket(*muxSocket1, pairedPortInfo,binding)) || (!OpenSocket(*muxSocket2, pairedPortInfo,binding)) || (socket2->GetPort() != socket1->GetPort() + 1) ) { delete muxSocket1; delete muxSocket2; socket1 = new UPnPUDPSocket(this); /// Data socket2 = new UPnPUDPSocket(this); /// Signal } // Open UPnP mappings WORD locPort,extPort; PIPSocket::Address locAddr, extAddr; socket1->GetLocalAddress(locAddr,locPort); if (m_pUPnP->CreateMap(true,"UDP",locAddr,locPort,extAddr,extPort)) { ((UPnPUDPSocket*)socket1)->SetMasqAddress(extAddr,extPort); ((UPnPUDPSocket*)socket2)->SetMasqAddress(extAddr,extPort+1); } else { PTRACE(3, "UPnP\tError mapped ports. Abort Creating socket pair."); return false; } handler->StartMultiplexListener(); // Start Multiplexing Listening thread; handler->EnableMultiplex(true); } socket1 = new H46019UDPSocket(*handler->GetHandler(),info,true); /// Data socket2 = new H46019UDPSocket(*handler->GetHandler(),info,false); /// Signal PNatMethod_H46019::RegisterSocket(true ,info->GetRecvMultiplexID(), socket1); PNatMethod_H46019::RegisterSocket(false,info->GetRecvMultiplexID(), socket2); } else #endif { if (pairedPortInfo.basePort == 0 || pairedPortInfo.basePort > pairedPortInfo.maxPort) { PTRACE(1, "UPnP\tInvalid local UDP port range " << pairedPortInfo.currentPort << '-' << pairedPortInfo.maxPort); return FALSE; } socket1 = new UPnPUDPSocket(this); /// Data socket2 = new UPnPUDPSocket(this); /// Signal /// Make sure we have sequential ports while ((!OpenSocket(*socket1, pairedPortInfo,binding)) || (!OpenSocket(*socket2, pairedPortInfo,binding)) || (socket2->GetPort() != socket1->GetPort() + 1) ) { delete socket1; delete socket2; socket1 = new UPnPUDPSocket(this); /// Data socket2 = new UPnPUDPSocket(this); /// Signal } // Open UPnP mappings WORD locPort,extPort; PIPSocket::Address locAddr, extAddr; socket1->GetLocalAddress(locAddr,locPort); if (m_pUPnP->CreateMap(true,"UDP",locAddr,locPort,extAddr,extPort)) { ((UPnPUDPSocket*)socket1)->SetMasqAddress(extAddr,extPort); ((UPnPUDPSocket*)socket2)->SetMasqAddress(extAddr,extPort+1); } else { PTRACE(3, "UPnP\tError mapped ports. Abort Creating socket pair."); return false; } PTRACE(3, "UPnP\tUDP mapped ports " << locAddr << " " << locPort << "-" << locPort+1 << " to " << extAddr << " " << extPort << "-" << extPort+1 ); } return true; } PBoolean PNatMethod_UPnP::OpenSocket(PUDPSocket & socket, PortInfo & portInfo, const PIPSocket::Address & binding) const { PWaitAndSignal mutex(portInfo.mutex); WORD startPort = portInfo.currentPort; do { portInfo.currentPort++; if (portInfo.currentPort > portInfo.maxPort) portInfo.currentPort = portInfo.basePort; if (socket.Listen(binding,1, portInfo.currentPort)) { socket.SetReadTimeout(500); return true; } } while (portInfo.currentPort != startPort); PTRACE(2, "UPnP\tFailed to bind to local UDP port in range " << portInfo.currentPort << '-' << portInfo.maxPort); return false; } void PNatMethod_UPnP::SetExtIPAddress(const PString & newAddr) { PTRACE(4,"UPnP\tDetected external IP address " << newAddr); m_pExtIP = newAddr; } void PNatMethod_UPnP::RemoveUPnPMap(WORD port) { if (m_pUPnP && !m_pShutdown) m_pUPnP->RemoveMap(port); } void PNatMethod_UPnP::SetAvailable(const PString & devName) { if (m_pShutdown) return; PTRACE(2,"UPnP\tUPnP set " << devName); SetAvailable(); } void PNatMethod_UPnP::SetAvailable() { if (!available) available = true; // Force a reRegistration to allow Gatekeeper to // receive updated information. if (ep) ep->ForceGatekeeperReRegistration(); } PNatMethod::RTPSupportTypes PNatMethod_UPnP::GetRTPSupport(PBoolean force) { if (available) return PNatMethod::RTPSupported; else return PNatMethod::RTPUnsupported; }; H323EndPoint * PNatMethod_UPnP::GetEndPoint() { return ep; } //////////////////////////////////////////////////////////////////// UPnPUDPSocket::UPnPUDPSocket(PNatMethod_UPnP * nat) : natMethod(nat), extIP(0), extPort(0) { } UPnPUDPSocket::~UPnPUDPSocket() { // Remove the UPnP Mapping if (natMethod) natMethod->RemoveUPnPMap(extPort); } void UPnPUDPSocket::SetMasqAddress(const PIPSocket::Address & ip, WORD port) { extIP = ip; extPort = port; } PBoolean UPnPUDPSocket::GetLocalAddress(Address & addr) { if (extIP.IsAny() || !extIP.IsValid()) return PUDPSocket::GetLocalAddress(addr); addr = extIP; return true; } PBoolean UPnPUDPSocket::GetLocalAddress(Address & addr, WORD & port) { if (extIP.IsAny() || !extIP.IsValid()) return PUDPSocket::GetLocalAddress(addr, port); addr = extIP; port = extPort; return true; } #endif h323plus/src/h460/h460tm.cxx0000644000175000017500000000674011015524444014134 0ustar markmark// // H460tm.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h460tm.h" #endif #include #include "h460/h460tm.h" #define new PNEW #if ! H323_DISABLE_H460TM #ifndef PASN_NOPRINTON const static PASN_Names Names_H460TM_TMmode[]={ {"tmOpen",1} ,{"tmPublic",2} ,{"tmPrivate",3} ,{"tmBroadcast",4} ,{"tmReceive",5} }; #endif // // TMmode // H460TM_TMmode::H460TM_TMmode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 5, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H460TM_TMmode,5 #endif ) { } H460TM_TMmode & H460TM_TMmode::operator=(unsigned v) { SetValue(v); return *this; } PObject * H460TM_TMmode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460TM_TMmode::Class()), PInvalidCast); #endif return new H460TM_TMmode(*this); } // // MultipointTM // H460TM_MultipointTM::H460TM_MultipointTM(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_message.SetConstraints(PASN_Object::FixedConstraint, 1, 256); m_sender.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); m_receiver.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } #ifndef PASN_NOPRINTON void H460TM_MultipointTM::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "message = " << setprecision(indent) << m_message << '\n'; if (HasOptionalField(e_sender)) strm << setw(indent+9) << "sender = " << setprecision(indent) << m_sender << '\n'; if (HasOptionalField(e_receiver)) strm << setw(indent+11) << "receiver = " << setprecision(indent) << m_receiver << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H460TM_MultipointTM::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H460TM_MultipointTM), PInvalidCast); #endif const H460TM_MultipointTM & other = (const H460TM_MultipointTM &)obj; Comparison result; if ((result = m_message.Compare(other.m_message)) != EqualTo) return result; if ((result = m_sender.Compare(other.m_sender)) != EqualTo) return result; if ((result = m_receiver.Compare(other.m_receiver)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H460TM_MultipointTM::GetDataLength() const { PINDEX length = 0; length += m_message.GetObjectLength(); if (HasOptionalField(e_sender)) length += m_sender.GetObjectLength(); if (HasOptionalField(e_receiver)) length += m_receiver.GetObjectLength(); return length; } PBoolean H460TM_MultipointTM::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_message.Decode(strm)) return FALSE; if (HasOptionalField(e_sender) && !m_sender.Decode(strm)) return FALSE; if (HasOptionalField(e_receiver) && !m_receiver.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H460TM_MultipointTM::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_message.Encode(strm); if (HasOptionalField(e_sender)) m_sender.Encode(strm); if (HasOptionalField(e_receiver)) m_receiver.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H460TM_MultipointTM::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460TM_MultipointTM::Class()), PInvalidCast); #endif return new H460TM_MultipointTM(*this); } #endif // if ! H323_DISABLE_H460TM // End of H460tm.cxx h323plus/src/h460/h46017a.cxx0000644000175000017500000000755411561716521014115 0ustar markmark// // h46017a.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h46017a.h" #endif #include #include "h460/h46017a.h" #define new PNEW #if ! H323_DISABLE_H46017A #ifndef PASN_NOPRINTON const static PASN_Names Names_H46017A_FrameData[]={ {"rtp",0} ,{"rtcp",1} }; #endif // // FrameData // H46017A_FrameData::H46017A_FrameData(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H46017A_FrameData,2 #endif ) { } PBoolean H46017A_FrameData::CreateObject() { switch (tag) { case e_rtp : choice = new PASN_OctetString(); choice->SetConstraints(PASN_Object::FixedConstraint, 12, 1456); return TRUE; case e_rtcp : choice = new PASN_OctetString(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 1456); return TRUE; } choice = NULL; return FALSE; } PObject * H46017A_FrameData::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H46017A_FrameData::Class()), PInvalidCast); #endif return new H46017A_FrameData(*this); } // // ArrayOf_FrameData // H46017A_ArrayOf_FrameData::H46017A_ArrayOf_FrameData(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H46017A_ArrayOf_FrameData::CreateObject() const { return new H46017A_FrameData; } H46017A_FrameData & H46017A_ArrayOf_FrameData::operator[](PINDEX i) const { return (H46017A_FrameData &)array[i]; } PObject * H46017A_ArrayOf_FrameData::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H46017A_ArrayOf_FrameData::Class()), PInvalidCast); #endif return new H46017A_ArrayOf_FrameData(*this); } // // UDPFrame // H46017A_UDPFrame::H46017A_UDPFrame(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { m_sessionId.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H46017A_UDPFrame::PrintOn(ostream & strm) const { int indent = (int)strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "sessionId = " << setprecision(indent) << m_sessionId << '\n'; strm << setw(indent+12) << "dataFrame = " << setprecision(indent) << m_dataFrame << '\n'; strm << setw(indent+8) << "frame = " << setprecision(indent) << m_frame << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H46017A_UDPFrame::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H46017A_UDPFrame), PInvalidCast); #endif const H46017A_UDPFrame & other = (const H46017A_UDPFrame &)obj; Comparison result; if ((result = m_sessionId.Compare(other.m_sessionId)) != EqualTo) return result; if ((result = m_dataFrame.Compare(other.m_dataFrame)) != EqualTo) return result; if ((result = m_frame.Compare(other.m_frame)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H46017A_UDPFrame::GetDataLength() const { PINDEX length = 0; length += m_sessionId.GetObjectLength(); length += m_dataFrame.GetObjectLength(); length += m_frame.GetObjectLength(); return length; } PBoolean H46017A_UDPFrame::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sessionId.Decode(strm)) return FALSE; if (!m_dataFrame.Decode(strm)) return FALSE; if (!m_frame.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H46017A_UDPFrame::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sessionId.Encode(strm); m_dataFrame.Encode(strm); m_frame.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H46017A_UDPFrame::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H46017A_UDPFrame::Class()), PInvalidCast); #endif return new H46017A_UDPFrame(*this); } #endif // if ! H323_DISABLE_H46017A // End of h46017a.cxx h323plus/src/h460/h46024b.cxx0000644000175000017500000001317611653372226014113 0ustar markmark// // H46024B.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h46024b.h" #endif #include #include "h460/h46024b.h" #define new PNEW #if ! H323_DISABLE_H46024B // // AlternateAddress // H46024B_AlternateAddress::H46024B_AlternateAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { m_sessionID.SetConstraints(PASN_Object::FixedConstraint, 0, 255); m_multiplexID.SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); } #ifndef PASN_NOPRINTON void H46024B_AlternateAddress::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "sessionID = " << setprecision(indent) << m_sessionID << '\n'; if (HasOptionalField(e_rtpAddress)) strm << setw(indent+13) << "rtpAddress = " << setprecision(indent) << m_rtpAddress << '\n'; if (HasOptionalField(e_rtcpAddress)) strm << setw(indent+14) << "rtcpAddress = " << setprecision(indent) << m_rtcpAddress << '\n'; if (HasOptionalField(e_multiplexID)) strm << setw(indent+14) << "multiplexID = " << setprecision(indent) << m_multiplexID << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H46024B_AlternateAddress::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H46024B_AlternateAddress), PInvalidCast); #endif const H46024B_AlternateAddress & other = (const H46024B_AlternateAddress &)obj; Comparison result; if ((result = m_sessionID.Compare(other.m_sessionID)) != EqualTo) return result; if ((result = m_rtpAddress.Compare(other.m_rtpAddress)) != EqualTo) return result; if ((result = m_rtcpAddress.Compare(other.m_rtcpAddress)) != EqualTo) return result; if ((result = m_multiplexID.Compare(other.m_multiplexID)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H46024B_AlternateAddress::GetDataLength() const { PINDEX length = 0; length += m_sessionID.GetObjectLength(); if (HasOptionalField(e_rtpAddress)) length += m_rtpAddress.GetObjectLength(); if (HasOptionalField(e_rtcpAddress)) length += m_rtcpAddress.GetObjectLength(); if (HasOptionalField(e_multiplexID)) length += m_multiplexID.GetObjectLength(); return length; } PBoolean H46024B_AlternateAddress::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sessionID.Decode(strm)) return FALSE; if (HasOptionalField(e_rtpAddress) && !m_rtpAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_rtcpAddress) && !m_rtcpAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_multiplexID) && !m_multiplexID.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H46024B_AlternateAddress::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sessionID.Encode(strm); if (HasOptionalField(e_rtpAddress)) m_rtpAddress.Encode(strm); if (HasOptionalField(e_rtcpAddress)) m_rtcpAddress.Encode(strm); if (HasOptionalField(e_multiplexID)) m_multiplexID.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H46024B_AlternateAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H46024B_AlternateAddress::Class()), PInvalidCast); #endif return new H46024B_AlternateAddress(*this); } // // ArrayOf_AlternateAddress // H46024B_ArrayOf_AlternateAddress::H46024B_ArrayOf_AlternateAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H46024B_ArrayOf_AlternateAddress::CreateObject() const { return new H46024B_AlternateAddress; } H46024B_AlternateAddress & H46024B_ArrayOf_AlternateAddress::operator[](PINDEX i) const { return (H46024B_AlternateAddress &)array[i]; } PObject * H46024B_ArrayOf_AlternateAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H46024B_ArrayOf_AlternateAddress::Class()), PInvalidCast); #endif return new H46024B_ArrayOf_AlternateAddress(*this); } // // AlternateAddresses // H46024B_AlternateAddresses::H46024B_AlternateAddresses(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H46024B_AlternateAddresses::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "addresses = " << setprecision(indent) << m_addresses << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H46024B_AlternateAddresses::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H46024B_AlternateAddresses), PInvalidCast); #endif const H46024B_AlternateAddresses & other = (const H46024B_AlternateAddresses &)obj; Comparison result; if ((result = m_addresses.Compare(other.m_addresses)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H46024B_AlternateAddresses::GetDataLength() const { PINDEX length = 0; length += m_addresses.GetObjectLength(); return length; } PBoolean H46024B_AlternateAddresses::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_addresses.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H46024B_AlternateAddresses::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_addresses.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H46024B_AlternateAddresses::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H46024B_AlternateAddresses::Class()), PInvalidCast); #endif return new H46024B_AlternateAddresses(*this); } #endif // if ! H323_DISABLE_H46024B // End of H46024B.cxx h323plus/src/h460/h4601.cxx0000644000175000017500000014604511652540117013661 0ustar markmark// H4601.cxx: implementation of the H460 class. /* * H.460 Implementation for the h323plus Library. * * Copyright (c) 2004 ISVO (Asia) Pte Ltd. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is derived from and used in conjunction with the * OpenH323 Project (www.openh323.org/) * * The Initial Developer of the Original Code is ISVO (Asia) Pte Ltd. * * * Contributor(s): ______________________________________. * * $Id: h4601.cxx,v 1.30 2011/10/28 14:46:39 shorne Exp $ * * */ #include #include "openh323buildopts.h" #ifdef H323_H460 #ifdef __GNUC__ #pragma implementation "h4601.h" #endif #include #include "h460/h460.h" #include "h460/h4601.h" #include #include /////////////////////////////////////////////////////////////////////// OpalOID::OpalOID() { } OpalOID::OpalOID(const char * str ) { SetValue(str); } OpalOID OpalOID::operator+(const char * str) { PString nStr = AsString() + "." + str; OpalOID newVal(nStr); return newVal; } H460_FeatureID::H460_FeatureID() { SetTag(H225_GenericIdentifier::e_standard); PASN_Integer & val = *this; val.SetValue(0); } H460_FeatureID::H460_FeatureID(unsigned ID) { SetTag(H225_GenericIdentifier::e_standard); PASN_Integer & val = *this; val.SetValue(ID); } H460_FeatureID::H460_FeatureID(OpalOID ID) { SetTag(H225_GenericIdentifier::e_oid); PASN_ObjectId & val = *this; val = ID; } H460_FeatureID::H460_FeatureID(PString ID) { SetTag(H225_GenericIdentifier::e_nonStandard); OpalGloballyUniqueID uid(ID); H225_GloballyUniqueID & val = *this; val = uid; } H460_FeatureID::H460_FeatureID(H225_GenericIdentifier ID) { SetTag(ID.GetTag()); H225_GenericIdentifier & val = *this; val= ID; } PObject * H460_FeatureID::Clone() const { return new H460_FeatureID(*this); } PObject::Comparison H460_FeatureID::Compare(const PObject & obj) const { PAssert(PIsDescendant(&obj, H460_FeatureID), PInvalidCast); const H460_FeatureID & id = (const H460_FeatureID &)obj; if (id.IDString() == IDString()) return EqualTo; else return LessThan; } PINLINE H460_FeatureID & H460_FeatureID::operator=(unsigned ID) { SetTag(H225_GenericIdentifier::e_standard); PASN_Integer & val = *this; val.SetValue(ID); return *this; }; PINLINE H460_FeatureID & H460_FeatureID::operator=(OpalOID ID) { SetTag(H225_GenericIdentifier::e_oid); PASN_ObjectId & val = *this; val.SetValue(ID.AsString()); return *this; }; PINLINE H460_FeatureID & H460_FeatureID::operator=(PString ID) { SetTag(H225_GenericIdentifier::e_nonStandard); OpalGloballyUniqueID uid(ID); H225_GloballyUniqueID & val = *this; val = uid; return *this; }; PString H460_FeatureID::IDString() const { if (GetFeatureType() == H225_GenericIdentifier::e_standard) { const PASN_Integer & jint = *this; return "Std " + PString(jint); } if (GetFeatureType() == H225_GenericIdentifier::e_oid) { const PASN_ObjectId & obj = *this; return "OID " + obj.AsString(); } if (GetFeatureType() == H225_GenericIdentifier::e_nonStandard) { const H225_GloballyUniqueID & gui = *this; const OpalGloballyUniqueID opalguid(gui); return "NonStd " + opalguid.AsString(); } return PString("unknown"); } ////////////////////////////////////////////////////////////////////// H460_FeatureContent::H460_FeatureContent() { } H460_FeatureContent::H460_FeatureContent(const PASN_OctetString & param) { SetTag(H225_Content::e_raw); PASN_OctetString & val = *this; val.SetValue(param); } H460_FeatureContent::H460_FeatureContent(const PString & param) { SetTag(H225_Content::e_text); PASN_IA5String & val = *this; val = param; } H460_FeatureContent::H460_FeatureContent(PASN_BMPString & param) { SetTag(H225_Content::e_unicode); PASN_BMPString & val = *this; val.SetValue(param); } H460_FeatureContent::H460_FeatureContent(const PBoolean & param) { SetTag(H225_Content::e_bool); PASN_Boolean & val = *this; val.SetValue(param); } H460_FeatureContent::H460_FeatureContent(unsigned param, unsigned len) { if (len == 8) { SetTag(H225_Content::e_number8); PASN_Integer & val = *this; val.SetConstraints(PASN_Object::FixedConstraint, 0, 255); val.SetValue(param); } else if (len == 16) { SetTag(H225_Content::e_number16); PASN_Integer & val = *this; val.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); val.SetValue(param); } else if (len == 32) { SetTag(H225_Content::e_number32); PASN_Integer & val = *this; val.SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); val.SetValue(param); } else { SetTag(H225_Content::e_number8); PASN_Integer & val = *this; val.SetConstraints(PASN_Object::FixedConstraint, 0, 255); val.SetValue(param); } } H460_FeatureContent::H460_FeatureContent(const H460_FeatureID & id) { SetTag(H225_Content::e_id); H225_GenericIdentifier & val = *this; val = id; } H460_FeatureContent::H460_FeatureContent(const H225_AliasAddress & add) { SetTag(H225_Content::e_alias); H225_AliasAddress & val = *this; val = add; } H460_FeatureContent::H460_FeatureContent(const PURL & add) { H225_AliasAddress alias; alias.SetTag(H225_AliasAddress::e_url_ID); PASN_IA5String & url = alias; url = add.AsString(); SetTag(H225_Content::e_alias); H225_AliasAddress & val = *this; val = alias; } H460_FeatureContent::H460_FeatureContent(const H323TransportAddress & add) { SetTag(H225_Content::e_transport); H225_TransportAddress & val = *this; add.SetPDU(val); } H460_FeatureContent::H460_FeatureContent(const OpalGloballyUniqueID & guid) { SetTag(H225_Content::e_id); H225_GenericIdentifier & val = *this; val.SetTag(H225_GenericIdentifier::e_nonStandard); H225_GloballyUniqueID & id = val; id.SetValue(guid.AsString()); } H460_FeatureContent::H460_FeatureContent(const H460_FeatureTable & table) { SetTag(H225_Content::e_compound); H225_ArrayOf_EnumeratedParameter & val = *this; //val.SetConstraints(PASN_Object::FixedConstraint, 1, 512); val = table; } H460_FeatureContent::H460_FeatureContent(H460_Feature * add) { SetTag(H225_Content::e_nested); H225_ArrayOf_GenericData & val = *this; //val.SetConstraints(PASN_Object::FixedConstraint, 1, 16); val.Append(add); val.SetSize(val.GetSize()+1); } H460_FeatureContent::H460_FeatureContent(const H225_Content & param) { // OnReceivedPDU(param); } ///////////////////////////////////////////////////////////////////// H460_FeatureParameter::H460_FeatureParameter() { m_id = H460_FeatureID(0); } H460_FeatureParameter::H460_FeatureParameter(unsigned Identifier) { m_id = H460_FeatureID(Identifier); } H460_FeatureParameter::H460_FeatureParameter(const PString & Identifier) { m_id = H460_FeatureID(Identifier); } H460_FeatureParameter::H460_FeatureParameter(const OpalOID & Identifier) { m_id = H460_FeatureID(Identifier); } H460_FeatureParameter::H460_FeatureParameter(const H225_EnumeratedParameter & param) { // OnReceivedPDU(param); } H460_FeatureParameter::H460_FeatureParameter(const H460_FeatureID & ID) { m_id = ID; } H460_FeatureContent H460_FeatureParameter::operator=( const PASN_OctetString & value) { SetTag(e_content); m_content = H460_FeatureContent(value); return m_content; } H460_FeatureContent H460_FeatureParameter::operator=( const PString & value ) { // Check if url; PURL * url = new PURL(); // BUG ? if (url->Parse(value,"http")) // Parameter is an Http Address m_content = H460_FeatureContent(*url); if (value.Find(":") != P_MAX_INDEX) { PStringArray Cmd = value.Tokenise(":", FALSE); if (Cmd.GetSize() == 2) { // Parameter is an Address H323TransportAddress * add = new H323TransportAddress(Cmd[0],(short)Cmd[1].AsUnsigned()); // BUG: leak ? m_content = H460_FeatureContent(*add); } } SetTag(e_content); return m_content; } H460_FeatureContent H460_FeatureParameter::operator=( const PASN_BMPString & value) { m_content = H460_FeatureContent(value); SetTag(e_content); return m_content; } H460_FeatureContent H460_FeatureParameter::operator=( const PBoolean & value ) { m_content = H460_FeatureContent(value); SetTag(e_content); return m_content; } H460_FeatureContent H460_FeatureParameter::operator=( const unsigned & value ) { if (value == 0) m_content = H460_FeatureContent(value,32); else if (value < 16) m_content = H460_FeatureContent(value,8); else if (value < 256) m_content = H460_FeatureContent(value,16); else m_content = H460_FeatureContent(value,32); SetTag(e_content); return m_content; } H460_FeatureContent H460_FeatureParameter::operator=( const H460_FeatureID & value ) { m_content = H460_FeatureContent(value); SetTag(e_content); return m_content; } H460_FeatureContent H460_FeatureParameter::operator=( const H225_AliasAddress & value ) { m_content = H460_FeatureContent(value); SetTag(e_content); return m_content; } H460_FeatureContent H460_FeatureParameter::operator=( const H323TransportAddress & value ) { m_content = H460_FeatureContent(value); SetTag(e_content); return m_content; } H460_FeatureContent H460_FeatureParameter::operator=( const H460_FeatureTable & value ) { m_content = H460_FeatureContent(value); SetTag(e_content); return m_content; } H460_FeatureContent H460_FeatureParameter::operator=( H460_Feature * value ) { m_content = H460_FeatureContent(value); SetTag(e_content); return m_content; } H460_FeatureParameter::operator PASN_OctetString &() { PASN_OctetString & content = m_content; return content; }; H460_FeatureParameter::operator PString () { PASN_IA5String & content = m_content; return content.GetValue(); }; H460_FeatureParameter::operator PASN_BMPString &() { PASN_BMPString & content = m_content; return content; }; H460_FeatureParameter::operator PBoolean () { PASN_Boolean & content = m_content; PBoolean con = content; return con; }; H460_FeatureParameter::operator unsigned() { PASN_Integer & content = m_content; return content; }; H460_FeatureParameter::operator H460_FeatureID &() { H225_GenericIdentifier & content = m_content; return (H460_FeatureID &)content; }; H460_FeatureParameter::operator H225_AliasAddress &() { H225_AliasAddress & content = m_content; return content; }; H460_FeatureParameter::operator H323TransportAddress () { H225_TransportAddress & content = m_content; return content; }; H460_FeatureParameter::operator H225_ArrayOf_EnumeratedParameter &() { H225_ArrayOf_EnumeratedParameter & content = m_content; return content; }; H460_FeatureParameter::operator PURL () { H225_AliasAddress & content = m_content; PASN_IA5String & Surl = content; return Surl.GetValue(); }; H460_FeatureParameter::operator OpalGloballyUniqueID () { H225_GenericIdentifier & content = m_content; if (content.GetTag() == H225_GenericIdentifier::e_nonStandard) { H225_GloballyUniqueID & id = content; return OpalGloballyUniqueID((PASN_OctetString &)id); } return OpalGloballyUniqueID(); }; ///////////////////////////////////////////////////////////////////// H460_FeatureTable::H460_FeatureTable() { SetSize(0); } H460_FeatureTable::H460_FeatureTable(const H225_ArrayOf_EnumeratedParameter & Xparams) { // OnReceivedPDU(Xparams); } H460_FeatureParameter & H460_FeatureTable::AddParameter(const H460_FeatureID & id) { PTRACE(6, "H460\tAdd ID: " << id ); H460_FeatureParameter param = H460_FeatureParameter(id); PINDEX i = GetSize(); SetSize(i+1); (*this)[i] = param; return (*this)[i]; } H460_FeatureParameter & H460_FeatureTable::AddParameter(const H460_FeatureID & id, const H460_FeatureContent & con) { PTRACE(6, "H460\tAdd ID: " << id << " content " << con); H460_FeatureParameter & Nparam = AddParameter(id); Nparam.addContent(con); return Nparam; } void H460_FeatureTable::AddParameter(H225_EnumeratedParameter & Xparam) { PINDEX i = GetSize(); SetSize(i+1); (*this)[i] = Xparam; } //void H460_FeatureTable::SetParameter(H460_FeatureParameter & Nparam, H225_EnumeratedParameter & Xparam) const //{ // Nparam.OnSendingPDU(Xparam); //} H460_FeatureParameter & H460_FeatureTable::GetParameter(PINDEX id) { return (*this)[id]; } H460_FeatureParameter & H460_FeatureTable::GetParameter(const H460_FeatureID & id) { PINDEX num = GetParameterIndex(id); return GetParameter(num); } PINDEX H460_FeatureTable::GetParameterIndex(const H460_FeatureID & id) { PINDEX i; for (i = 0; i < GetSize(); i++) { H460_FeatureParameter & fparam = (*this)[i]; H460_FeatureID param = fparam.ID(); if (param == id) return i; } return GetSize(); } PBoolean H460_FeatureTable::HasParameter(const H460_FeatureID & id) { PTRACE(6, "H460\tCheck has Parameter " << id); if (GetParameterIndex(id) < GetSize()) return TRUE; return FALSE; } void H460_FeatureTable::RemoveParameter(PINDEX id) { RemoveAt(id); } void H460_FeatureTable::RemoveParameter(const H460_FeatureID & id) { PINDEX j = GetParameterIndex(id); if (j < GetSize()) RemoveParameter(j); } void H460_FeatureTable::ReplaceParameter(const H460_FeatureID & id, const H460_FeatureContent & con) { PTRACE(6, "H460\tReplace ID: " << id << " content " << con); PINDEX j = GetParameterIndex(id); if (j == GetSize()) return; RemoveAt(j); AddParameter(id,con); } PBoolean H460_FeatureTable::ParameterIsUnique(const H460_FeatureID & id) { PINDEX i; PINDEX j =0; for (i = 0; i < GetSize(); i++) { H460_FeatureParameter & param = GetParameter(i); if (param.ID() == id) { j++; } } if (j <= 1) return TRUE; else return FALSE; } H460_FeatureParameter & H460_FeatureTable::operator[](PINDEX id) { return (H460_FeatureParameter &)array[id]; } ///////////////////////////////////////////////////////////////////// H460_Feature::H460_Feature() : CurrentTable((H460_FeatureTable*)&m_parameters) { // IncludeOptionalField(e_parameters); // CurrentTable = (H460_FeatureTable*)&m_parameters; ep = NULL; con = NULL; FeatureCategory = FeatureSupported; } H460_Feature::H460_Feature(unsigned identifier) : CurrentTable((H460_FeatureTable*)&m_parameters) { SetFeatureID(H460_FeatureID(identifier)); // IncludeOptionalField(e_parameters); // CurrentTable = (H460_FeatureTable*)&m_parameters; ep = NULL; con = NULL; FeatureCategory = FeatureSupported; } H460_Feature::H460_Feature(PString identifier) : CurrentTable((H460_FeatureTable*)&m_parameters) { SetFeatureID(H460_FeatureID(identifier)); // IncludeOptionalField(e_parameters); // CurrentTable = (H460_FeatureTable*)&m_parameters; ep = NULL; con = NULL; FeatureCategory = FeatureSupported; } H460_Feature::H460_Feature(OpalOID identifier) : CurrentTable((H460_FeatureTable*)&m_parameters) { SetFeatureID(H460_FeatureID(identifier)); // IncludeOptionalField(e_parameters); // CurrentTable = (H460_FeatureTable *)&m_parameters; ep = NULL; con = NULL; FeatureCategory = FeatureSupported; } H460_Feature::H460_Feature(const H225_FeatureDescriptor & descriptor) { SetFeatureID(descriptor.m_id); if (descriptor.HasOptionalField(H225_FeatureDescriptor::e_parameters)) { IncludeOptionalField(H225_FeatureDescriptor::e_parameters); m_parameters = descriptor.m_parameters; } CurrentTable = (H460_FeatureTable *)&m_parameters; ep = NULL; con = NULL; FeatureCategory = FeatureSupported; } PString H460_Feature::GetFeatureIDAsString() { return ((H460_FeatureID)m_id).IDString(); } PBoolean H460_Feature::FeatureAdvertised(int mtype) { switch (mtype) { case H460_MessageType::e_gatekeeperRequest: case H460_MessageType::e_gatekeeperConfirm: case H460_MessageType::e_gatekeeperReject: case H460_MessageType::e_registrationRequest: case H460_MessageType::e_registrationConfirm: case H460_MessageType::e_registrationReject: case H460_MessageType::e_setup: case H460_MessageType::e_callProceeding: return true; default: return false; } } H460_FeatureParameter & H460_Feature::AddParameter(H460_FeatureID * id, const H460_FeatureContent & con) { if (!HasOptionalField(e_parameters)) { IncludeOptionalField(e_parameters); CurrentTable = (H460_FeatureTable*)&m_parameters; CurrentTable->SetSize(0); } return CurrentTable->AddParameter(*id, con); } H460_FeatureParameter & H460_Feature::AddParameter(H460_FeatureID * id) { if (!HasOptionalField(e_parameters)) { IncludeOptionalField(e_parameters); CurrentTable = (H460_FeatureTable*)&m_parameters; CurrentTable->SetSize(0); } return CurrentTable->AddParameter(*id); } void H460_Feature::AddParameter(H460_FeatureParameter * param) { if (!HasOptionalField(e_parameters)) { IncludeOptionalField(e_parameters); CurrentTable = (H460_FeatureTable*)&m_parameters; CurrentTable->SetSize(0); } CurrentTable->AddParameter(*param); } void H460_Feature::RemoveParameter(PINDEX id) { CurrentTable->RemoveParameter(id); if (CurrentTable->ParameterCount() == 0) { RemoveOptionalField(e_parameters); } } void H460_Feature::ReplaceParameter(const H460_FeatureID & id, const H460_FeatureContent & con) { CurrentTable->ReplaceParameter(id, con); } H460_FeatureParameter & H460_Feature::GetFeatureParameter(PINDEX id) { return CurrentTable->GetParameter(id); } H460_FeatureParameter & H460_Feature::GetFeatureParameter(const H460_FeatureID & id) { return CurrentTable->GetParameter(id); } PBoolean H460_Feature::HasFeatureParameter(const H460_FeatureID & id) { return CurrentTable->HasParameter(id); } PBoolean H460_Feature::Contains(const H460_FeatureID & id) { PTRACE(6, "H460\tCheck for Parameter " << id); if (HasOptionalField(e_parameters)) { H460_FeatureTable & Table = (H460_FeatureTable &)m_parameters; if (Table.HasParameter(id)) return TRUE; } return FALSE; } H460_FeatureParameter & H460_Feature::Value(const H460_FeatureID & id) { if (HasOptionalField(e_parameters)) { H460_FeatureTable & Table = (H460_FeatureTable &)m_parameters; if (Table.HasParameter(id)) return Table.GetParameter(id); } PAssertAlways("LOGIC ERROR: Must call before .Value"); return *(new H460_FeatureParameter()); // BUG: memory leak but is never called - SH } H460_FeatureParameter & H460_Feature::operator()(PINDEX id) { return CurrentTable->GetParameter(id); } H460_FeatureParameter & H460_Feature::operator()(const H460_FeatureID & id) { return GetFeatureParameter(id); } H460_FeatureTable & H460_Feature::GetCurrentTable() { return *CurrentTable; } void H460_Feature::SetCurrentTable(H460_FeatureTable & table) { CurrentTable = &table; } void H460_Feature::SetCurrentTable(H460_FeatureParameter & param) { H225_ArrayOf_EnumeratedParameter & table = param; SetCurrentTable((H460_FeatureTable &)table); } void H460_Feature::SetDefaultTable() { CurrentTable = (H460_FeatureTable*)&m_parameters; } void H460_Feature::AttachEndPoint(H323EndPoint * _ep) { ep = _ep; } void H460_Feature::AttachConnection(H323Connection * _con) { con = _con; } ///////////////////////////////////////////////////////////////////// static const char H460FeaturePluginBaseClass[] = "H460_Feature"; #if PTLIB_VER >= 2110 template <> H460_Feature * PDevicePluginFactory::Worker::Create(const PDefaultPFactoryKey & type) const #else template <> H460_Feature * PDevicePluginFactory::Worker::Create(const PString & type) const #endif { return H460_Feature::CreateFeature(type); } typedef PDevicePluginAdapter PDevicePluginH460; PFACTORY_CREATE(PFactory, PDevicePluginH460, H460FeaturePluginBaseClass, true); PStringList H460_Feature::GetFeatureNames(PPluginManager * pluginMgr) { if (pluginMgr == NULL) pluginMgr = &PPluginManager::GetPluginManager(); return pluginMgr->GetPluginsProviding(H460FeaturePluginBaseClass); } PStringList H460_Feature::GetFeatureFriendlyNames(const PString & feature, PPluginManager * pluginMgr) { if (pluginMgr == NULL) pluginMgr = &PPluginManager::GetPluginManager(); return pluginMgr->GetPluginsDeviceNames(feature, H460FeaturePluginBaseClass); } H460_Feature * H460_Feature::CreateFeature(const PString & featurename, int pduType, PPluginManager * pluginMgr) { if (pluginMgr == NULL) pluginMgr = &PPluginManager::GetPluginManager(); return (H460_Feature *)pluginMgr->CreatePluginsDeviceByName(featurename, H460FeaturePluginBaseClass,pduType); } PBoolean H460_Feature::PresenceFeatureList(std::map & plist, H323EndPoint * ep, PPluginManager * pluginMgr) { if (pluginMgr == NULL) pluginMgr = &PPluginManager::GetPluginManager(); PStringList featurelist = H460_Feature::GetFeatureNames(pluginMgr); int count = 0; for (PINDEX i=0; iOnFeatureInstance(H460_Feature::FeaturePresence,featurelist[i])) continue; PDevicePluginServiceDescriptor * desc = (PDevicePluginServiceDescriptor *)pluginMgr->GetServiceDescriptor(featurelist[i], H460FeaturePluginBaseClass); if (desc != NULL && desc->ValidateDeviceName(featurelist[i], H460_Feature::FeaturePresence)) { PStringArray id = desc->GetDeviceNames(H460_Feature::FeaturePresence); PStringArray display = desc->GetDeviceNames(0); if (featurelist[i].Left(3) == "Std") { // Std feature plist.insert(pair(*(PString*)display[0].Clone(),new H460_FeatureID(id[0].AsInteger()))); } else if (featurelist[i].Left(3) == "OID") { // OID feature OpalOID feat(id[0]); plist.insert(pair(*(PString*)display[0].Clone(), new H460_FeatureID(feat))); } else { // NonStd Feature plist.insert(pair(*(PString*)display[0].Clone(),new H460_FeatureID(id[0]))); } count++; } } return (count > 0); } ///////////////////////////////////////////////////////////////////// H460_FeatureStd::H460_FeatureStd(unsigned Identifier) : H460_Feature(Identifier) { } void H460_FeatureStd::Add(unsigned id) { H460_FeatureID * feat_id = new H460_FeatureID(id); AddParameter(feat_id); delete feat_id; } void H460_FeatureStd::Add(unsigned id, const H460_FeatureContent & con) { H460_FeatureID * feat_id = new H460_FeatureID(id); AddParameter(feat_id, con); delete feat_id; } void H460_FeatureStd::Remove(unsigned id) { RemoveParameter(H460_FeatureID(id)); } void H460_FeatureStd::Replace(unsigned id, const H460_FeatureContent & con) { ReplaceParameter(H460_FeatureID(id),con); } PBoolean H460_FeatureStd::HasParameter(unsigned id) { return HasFeatureParameter(H460_FeatureID(id)); } H460_FeatureParameter & H460_FeatureStd::GetParameter(unsigned id) { return GetFeatureParameter(H460_FeatureID(id)); } ///////////////////////////////////////////////////////////////////// H460_FeatureNonStd::H460_FeatureNonStd(PString Identifier) : H460_Feature(Identifier) { } void H460_FeatureNonStd::Add(const PString & id) { H460_FeatureID * feat_id = new H460_FeatureID(id); AddParameter(feat_id); delete feat_id; } void H460_FeatureNonStd::Add(const PString & id, const H460_FeatureContent & con) { H460_FeatureID * feat_id = new H460_FeatureID(id); AddParameter(feat_id, con); delete feat_id; } void H460_FeatureNonStd::Remove(const PString & id) { RemoveParameter(H460_FeatureID(id)); } void H460_FeatureNonStd::Replace(const PString & id, const H460_FeatureContent & con) { ReplaceParameter(H460_FeatureID(id),con); } PBoolean H460_FeatureNonStd::HasParameter(PString id) { return HasFeatureParameter(H460_FeatureID(id)); } H460_FeatureParameter & H460_FeatureNonStd::operator[](PString id) { return GetFeatureParameter(H460_FeatureID(id)); } ///////////////////////////////////////////////////////////////////// H460_FeatureOID::H460_FeatureOID(OpalOID Identifier) : H460_Feature(Identifier) { } void H460_FeatureOID::Add(const PString & id) { PString val = GetBase() + "." + id; H460_FeatureID * feat_id = new H460_FeatureID(OpalOID(val)); AddParameter(feat_id); delete feat_id; } void H460_FeatureOID::Add(const PString & id, const H460_FeatureContent & con) { PString val = GetBase() + "." + id; H460_FeatureID * feat_id = new H460_FeatureID(OpalOID(val)); AddParameter(feat_id, con); delete feat_id; } void H460_FeatureOID::Remove(const PString & id) { PString val = GetBase() + "." + id; RemoveParameter(H460_FeatureID(OpalOID(val))); } void H460_FeatureOID::Replace(const PString & id, const H460_FeatureContent & con) { PString val = GetBase() + "." + id; ReplaceParameter(H460_FeatureID(OpalOID(val)),con); } PBoolean H460_FeatureOID::HasParameter(OpalOID id) { return HasFeatureParameter(H460_FeatureID(id)); } H460_FeatureParameter & H460_FeatureOID::operator[](OpalOID id) { PString val = GetBase() + "." + id.AsString(); return GetFeatureParameter(H460_FeatureID(OpalOID(val))); } PBoolean H460_FeatureOID::Contains(const PString & id) { PString val = GetBase() + "." + id; return H460_Feature::Contains(OpalOID(val)); } H460_FeatureParameter & H460_FeatureOID::Value(const PString & id) { PString val = GetBase() + "." + id; return H460_Feature::Value(OpalOID(val)); } PString H460_FeatureOID::GetBase() { OpalOID id = (H460_FeatureID)m_id; return id.AsString(); } ///////////////////////////////////////////////////////////////////// H460_FeatureSet::H460_FeatureSet() { ep = NULL; baseSet = NULL; } H460_FeatureSet::H460_FeatureSet(H460_FeatureSet * _base) { Features.DisallowDeleteObjects(); // Derived FeatureSets should not delete Objects. AttachBaseFeatureSet(_base); AttachEndPoint(_base->GetEndPoint()); } H460_FeatureSet::H460_FeatureSet(const H225_FeatureSet & fs) { Features.DisallowDeleteObjects(); // Built FeatureSet should not delete Objects. ep = NULL; baseSet = NULL; CreateFeatureSet(fs); } H460_FeatureSet::H460_FeatureSet(const H225_ArrayOf_GenericData & generic) { Features.DisallowDeleteObjects(); // Built FeatureSet should not delete Objects. ep = NULL; baseSet = NULL; for (PINDEX i=0; i < generic.GetSize(); i++) { AddFeature((H460_Feature *)&generic[i]); } } PBoolean H460_FeatureSet::ProcessFirstPDU(const H225_FeatureSet & fs) { PTRACE(6,"H460\tCreate Common FeatureSet"); H460_FeatureSet remote = H460_FeatureSet(fs); /// Remove the features the remote does not support. for (PINDEX i=Features.GetSize()-1; i > -1; i--) { H460_Feature & feat = Features.GetDataAt(i); H460_FeatureID id = feat.GetFeatureID(); if (!remote.HasFeature(id)) RemoveFeature(id); else PTRACE(4,"H460\tUse Common Feature " << id); } return TRUE; } PBoolean H460_FeatureSet::RemoveUnCommonFeatures() { PTRACE(4,"H460\tRemoving UnCommon Features"); /// Remove the features that have not been negotiated for the call. for (PINDEX i=Features.GetSize()-1; i > -1; i--) { H460_Feature & feat = Features.GetDataAt(i); H460_FeatureID id = feat.GetFeatureID(); if (!feat.CommonFeature()) RemoveFeature(id); } return TRUE; } PBoolean H460_FeatureSet::CreateFeatureSet(const H225_FeatureSet & fs) { PTRACE(6,"H460\tCreate FeatureSet from FeatureSet PDU"); if (fs.HasOptionalField(H225_FeatureSet::e_neededFeatures)) { const H225_ArrayOf_FeatureDescriptor & fsn = fs.m_neededFeatures; for (PINDEX i=0; i < fsn.GetSize(); i++) { AddFeature((H460_Feature *)&fsn[i]); } } if (fs.HasOptionalField(H225_FeatureSet::e_desiredFeatures)) { const H225_ArrayOf_FeatureDescriptor & fsd = fs.m_desiredFeatures; for (PINDEX i=0; i < fsd.GetSize(); i++) { AddFeature((H460_Feature *)&fsd[i]); } } if (fs.HasOptionalField(H225_FeatureSet::e_supportedFeatures)) { const H225_ArrayOf_FeatureDescriptor & fss = fs.m_supportedFeatures; for (PINDEX i=0; i < fss.GetSize(); i++) { AddFeature((H460_Feature *)&fss[i]); } } return TRUE; } PBoolean H460_FeatureSet::LoadFeatureSet(int inst, H323Connection * con) { if ((ep) && (ep->FeatureSetDisabled())) return FALSE; PStringList featurelist = H460_Feature::GetFeatureNames(); // We need to reorder the features so that the std ones are first. // This is needed as some H.323 devices will not recognise the feature PStringList features; PINDEX i; for (i = 0; i < featurelist.GetSize(); i++) { if (featurelist[i].Left(3) == "Std") features.AppendString(featurelist[i]); } for (i = 0; i < featurelist.GetSize(); i++) { if (featurelist[i].Left(3) == "OID") features.AppendString(featurelist[i]); } for (i = 0; i < featurelist.GetSize(); i++) { if (featurelist[i].Left(3) == "Non") features.AppendString(featurelist[i]); } for (i = 0; i < features.GetSize(); i++) { if ((ep) && (!ep->OnFeatureInstance(inst,features[i]))) { PTRACE(4,"H460\tFeature " << features[i] << " disabled due to policy."); continue; } H460_FeatureID id; H460_Feature * feat = NULL; if (baseSet && baseSet->HasFeature(features[i])) { H460_Feature * tempfeat = baseSet->GetFeature(features[i]); if ((tempfeat->GetPurpose() >= inst) && (tempfeat->GetPurpose() < inst*2)) feat = tempfeat; } else { feat = H460_Feature::CreateFeature(features[i],inst); if ((feat) && (ep)) feat->AttachEndPoint(ep); } if (feat) { if (con) feat->AttachConnection(con); AddFeature(feat); PTRACE(4,"H460\tLoaded Feature " << features[i]); } } return TRUE; } PBoolean H460_FeatureSet::LoadFeature(const PString & featid) { H460_Feature * newfeat = H460_Feature::CreateFeature(featid); if (newfeat != NULL) return AddFeature(newfeat); else return FALSE; } H460_FeatureSet * H460_FeatureSet::DeriveNewFeatureSet() { return new H460_FeatureSet(this); } PBoolean H460_FeatureSet::AddFeature(H460_Feature * Nfeat) { PTRACE(4, "H460\tLoaded " << Nfeat->GetFeatureIDAsString()); return Features.SetAt(Nfeat->GetFeatureID(),Nfeat); } void H460_FeatureSet::RemoveFeature(H460_FeatureID id) { PStringStream info; info << "H460\tRemoved "; switch (id.GetFeatureType()) { case H460_FeatureID::e_standard: info << "Std Feature " << (unsigned)id << "\n"; break; case H460_FeatureID::e_oid: info << "OID Feature " << (OpalOID)id << "\n"; break; case H460_FeatureID::e_nonStandard: const H225_GloballyUniqueID h225_guid = ((H225_GloballyUniqueID &)(id)); const OpalGloballyUniqueID guid(h225_guid); info << "NonStd Feature " << guid.AsString() << "\n"; break; } PTRACE(4, info); Features.RemoveAt(id); } #if PTRACING PString featureType(PINDEX id) { switch (id) { case 1: return "Needed"; case 2: return "Desired"; case 3: return "Supported"; default: return "?"; } } #endif PBoolean H460_FeatureSet::CreateFeatureSetPDU(H225_FeatureSet & fs, unsigned MessageID, PBoolean advertise) { PTRACE(6,"H460\tCreate FeatureSet " << PTracePDU(MessageID) << " PDU"); PBoolean buildPDU = FALSE; for (PINDEX i = 0; i < Features.GetSize(); i++) { // Iterate thro the features H460_Feature & feat = Features.GetDataAt(i); if (advertise != feat.FeatureAdvertised(MessageID)) continue; PTRACE(6,"H460\tExamining " << feat.GetFeatureIDAsString()); PINDEX lastPos; H225_FeatureDescriptor featdesc; if (CreateFeaturePDU(feat,featdesc,MessageID)) { #if PTRACING PTRACE(6,"H460\tLoading Feature " << feat.GetFeatureIDAsString() << " as " << featureType(feat.FeatureCategory) << " feature to " << PTracePDU(MessageID) << " PDU\n" << featdesc ); #endif /// For some completely silly reason the ITU decided to send/receive H460 Messages in two places, /// for some messages it is included in the messsage body FeatureSet (to Advertise it) and others /// in the genericData field (as actual information). Even though a Feature is generic data. It is beyond /// me to determine Why it is so. Anyway if a message is to be carried in the genericData field it is given /// the default category of supported. PINDEX cat; if (advertise) cat = feat.FeatureCategory; else cat = H460_Feature::FeatureSupported; buildPDU = TRUE; switch (cat) { // Add it to the correct feature list case H460_Feature::FeatureNeeded: if (featdesc.GetDataLength() > 0) { if (!fs.HasOptionalField(H225_FeatureSet::e_neededFeatures)) fs.IncludeOptionalField(H225_FeatureSet::e_neededFeatures); H225_ArrayOf_FeatureDescriptor & fsn = fs.m_neededFeatures; lastPos = fsn.GetSize(); fsn.SetSize(lastPos+1); fsn[lastPos] = featdesc; } break; case H460_Feature::FeatureDesired: if (featdesc.GetDataLength() > 0) { if (!fs.HasOptionalField(H225_FeatureSet::e_desiredFeatures)) fs.IncludeOptionalField(H225_FeatureSet::e_desiredFeatures); H225_ArrayOf_FeatureDescriptor & fsd = fs.m_desiredFeatures; lastPos = fsd.GetSize(); fsd.SetSize(lastPos+1); fsd[lastPos] = featdesc; } break; case H460_Feature::FeatureSupported: if (featdesc.GetDataLength() > 0) { if (!fs.HasOptionalField(H225_FeatureSet::e_supportedFeatures)) fs.IncludeOptionalField(H225_FeatureSet::e_supportedFeatures); H225_ArrayOf_FeatureDescriptor & fss = fs.m_supportedFeatures; lastPos = fss.GetSize(); fss.SetSize(lastPos+1); fss[lastPos] = featdesc; } break; } } } #if PTRACING PTRACE(6,"H460\tFeatureSet for " << PTracePDU(MessageID) << " PDU\n" << fs); #endif return buildPDU; } void H460_FeatureSet::ReadFeatureSetPDU(const H225_FeatureSet & fs, unsigned MessageID, PBoolean genericData) { PTRACE(6,"H460\tRead FeatureSet " << PTracePDU(MessageID) << " PDU"); if (!genericData) { // Generate Common Set of Features. switch (MessageID) { case H460_MessageType::e_gatekeeperRequest: case H460_MessageType::e_gatekeeperConfirm: case H460_MessageType::e_registrationRequest: case H460_MessageType::e_registrationConfirm: case H460_MessageType::e_setup: ProcessFirstPDU(fs); break; default: break; } } H460_FeatureID ID; if (fs.HasOptionalField(H225_FeatureSet::e_neededFeatures)) { const H225_ArrayOf_FeatureDescriptor & fsn = fs.m_neededFeatures; for (PINDEX i=0; i < fsn.GetSize(); i++) { H225_FeatureDescriptor & fd = fsn[i]; ID = GetFeatureIDPDU(fd); if (HasFeature(ID)) ReadFeaturePDU(Features[ID],fd,MessageID); } } if (fs.HasOptionalField(H225_FeatureSet::e_desiredFeatures)) { const H225_ArrayOf_FeatureDescriptor & fsd = fs.m_desiredFeatures; for (PINDEX i=0; i < fsd.GetSize(); i++) { H225_FeatureDescriptor & fd = fsd[i]; ID = GetFeatureIDPDU(fd); if (HasFeature(ID)) ReadFeaturePDU(Features[ID],fd,MessageID); } } if (fs.HasOptionalField(H225_FeatureSet::e_supportedFeatures)) { const H225_ArrayOf_FeatureDescriptor & fss = fs.m_supportedFeatures; for (PINDEX i=0; i < fss.GetSize(); i++) { H225_FeatureDescriptor & fd = fss[i]; ID = GetFeatureIDPDU(fd); if (HasFeature(ID)) ReadFeaturePDU(Features[ID],fd,MessageID); } } if (MessageID == H460_MessageType::e_connect) RemoveUnCommonFeatures(); } PBoolean H460_FeatureSet::SupportNonCallService(const H225_FeatureSet & fs) { H460_FeatureID ID; if (fs.HasOptionalField(H225_FeatureSet::e_neededFeatures)) { const H225_ArrayOf_FeatureDescriptor & fsn = fs.m_neededFeatures; for (PINDEX i=0; i < fsn.GetSize(); i++) { H225_FeatureDescriptor & fd = fsn[i]; ID = GetFeatureIDPDU(fd); return SupportNonCallService(ID); } } if (fs.HasOptionalField(H225_FeatureSet::e_desiredFeatures)) { const H225_ArrayOf_FeatureDescriptor & fsd = fs.m_desiredFeatures; for (PINDEX i=0; i < fsd.GetSize(); i++) { H225_FeatureDescriptor & fd = fsd[i]; ID = GetFeatureIDPDU(fd); return SupportNonCallService(ID); } } if (fs.HasOptionalField(H225_FeatureSet::e_supportedFeatures)) { const H225_ArrayOf_FeatureDescriptor & fss = fs.m_supportedFeatures; for (PINDEX i=0; i < fss.GetSize(); i++) { H225_FeatureDescriptor & fd = fss[i]; ID = GetFeatureIDPDU(fd); return SupportNonCallService(ID); } } return false; } H460_FeatureID H460_FeatureSet::GetFeatureIDPDU(H225_FeatureDescriptor & pdu) { H460_FeatureID fid; H225_GenericIdentifier & id = pdu.m_id; if ((id.GetTag() == H225_GenericIdentifier::e_standard)) { PASN_Integer & sid = id; unsigned iid = sid.GetValue(); fid = H460_FeatureID(iid); } if ((id.GetTag() == H225_GenericIdentifier::e_oid)) { PASN_ObjectId & oid = id; OpalOID & aid = (OpalOID &)oid; fid = H460_FeatureID(aid); } if ((id.GetTag() == H225_GenericIdentifier::e_nonStandard)) { H225_GloballyUniqueID & uns = id; PString uid = uns.AsString(); fid = H460_FeatureID(uid); } return fid; } PBoolean H460_FeatureSet::CreateFeaturePDU(H460_Feature & Feat, H225_FeatureDescriptor & pdu,unsigned MessageID) { PTRACE(6,"H460\tEncoding " << PTracePDU(MessageID) << " PDU for " << Feat.GetFeatureIDAsString() ); switch (MessageID) { case H460_MessageType::e_gatekeeperRequest: return Feat.OnSendGatekeeperRequest(pdu); case H460_MessageType::e_gatekeeperConfirm: return Feat.OnSendGatekeeperConfirm(pdu); case H460_MessageType::e_gatekeeperReject: return Feat.OnSendGatekeeperReject(pdu); case H460_MessageType::e_registrationRequest: return Feat.OnSendRegistrationRequest(pdu); case H460_MessageType::e_registrationConfirm: return Feat.OnSendRegistrationConfirm(pdu); case H460_MessageType::e_registrationReject: return Feat.OnSendRegistrationReject(pdu); case H460_MessageType::e_admissionRequest: return Feat.OnSendAdmissionRequest(pdu); case H460_MessageType::e_admissionConfirm: return Feat.OnSendAdmissionConfirm(pdu); case H460_MessageType::e_admissionReject: return Feat.OnSendAdmissionReject(pdu); case H460_MessageType::e_locationRequest: return Feat.OnSendLocationRequest(pdu); case H460_MessageType::e_locationConfirm: return Feat.OnSendLocationConfirm(pdu); case H460_MessageType::e_locationReject: return Feat.OnSendLocationReject(pdu); case H460_MessageType::e_nonStandardMessage: return Feat.OnSendNonStandardMessage(pdu); case H460_MessageType::e_serviceControlIndication: return Feat.OnSendServiceControlIndication(pdu); case H460_MessageType::e_serviceControlResponse: return Feat.OnSendServiceControlResponse(pdu); case H460_MessageType::e_unregistrationRequest: Feat.OnSendUnregistrationRequest(pdu); break; case H460_MessageType::e_inforequest: return Feat.OnSendInfoRequestMessage(pdu); case H460_MessageType::e_inforequestresponse: return Feat.OnSendInfoRequestResponseMessage(pdu); case H460_MessageType::e_disengagerequest: return Feat.OnSendDisengagementRequestMessage(pdu); case H460_MessageType::e_disengageconfirm: return Feat.OnSendDisengagementConfirmMessage(pdu); /* case H460_MessageType::e_Endpoint: return Feat.OnSendEndpoint(pdu); */ case H460_MessageType::e_setup: return Feat.OnSendSetup_UUIE(pdu); case H460_MessageType::e_alerting: return Feat.OnSendAlerting_UUIE(pdu); case H460_MessageType::e_callProceeding: return Feat.OnSendCallProceeding_UUIE(pdu); case H460_MessageType::e_connect: return Feat.OnSendCallConnect_UUIE(pdu); case H460_MessageType::e_facility: return Feat.OnSendFacility_UUIE(pdu); case H460_MessageType::e_releaseComplete: return Feat.OnSendReleaseComplete_UUIE(pdu); default: return Feat.OnSendUnAllocatedPDU(pdu); } return FALSE; } void H460_FeatureSet::ReadFeaturePDU(H460_Feature & Feat, const H225_FeatureDescriptor & pdu,unsigned MessageID) { PTRACE(6,"H460\tDecoding " << PTracePDU(MessageID) << " PDU for " << Feat.GetFeatureIDAsString() ); switch (MessageID) { case H460_MessageType::e_gatekeeperRequest: Feat.OnReceiveGatekeeperRequest(pdu); break; case H460_MessageType::e_gatekeeperConfirm: Feat.OnReceiveGatekeeperConfirm(pdu); break; case H460_MessageType::e_gatekeeperReject: Feat.OnReceiveGatekeeperReject(pdu); break; case H460_MessageType::e_registrationRequest: Feat.OnReceiveRegistrationRequest(pdu); break; case H460_MessageType::e_registrationConfirm: Feat.OnReceiveRegistrationConfirm(pdu); break; case H460_MessageType::e_registrationReject: Feat.OnReceiveRegistrationReject(pdu); break; case H460_MessageType::e_admissionRequest: Feat.OnReceiveAdmissionRequest(pdu); break; case H460_MessageType::e_admissionConfirm: Feat.OnReceiveAdmissionConfirm(pdu); break; case H460_MessageType::e_admissionReject: Feat.OnReceiveAdmissionReject(pdu); break; case H460_MessageType::e_locationRequest: Feat.OnReceiveLocationRequest(pdu); break; case H460_MessageType::e_locationConfirm: Feat.OnReceiveLocationConfirm(pdu); break; case H460_MessageType::e_locationReject: Feat.OnReceiveLocationReject(pdu); break; case H460_MessageType::e_nonStandardMessage: Feat.OnReceiveNonStandardMessage(pdu); break; case H460_MessageType::e_serviceControlIndication: Feat.OnReceiveServiceControlIndication(pdu); break; case H460_MessageType::e_serviceControlResponse: Feat.OnReceiveServiceControlResponse(pdu); break; case H460_MessageType::e_unregistrationRequest: Feat.OnReceiveUnregistrationRequest(pdu); break; case H460_MessageType::e_inforequest: Feat.OnReceiveInfoRequestMessage(pdu); break; case H460_MessageType::e_inforequestresponse: Feat.OnReceiveInfoRequestResponseMessage(pdu); break; case H460_MessageType::e_disengagerequest: Feat.OnReceiveDisengagementRequestMessage(pdu); break; case H460_MessageType::e_disengageconfirm: Feat.OnReceiveDisengagementConfirmMessage(pdu); break; // case H460_MessageType::e_Endpoint: // return Feat.OnReceiveEndpoint(pdu); case H460_MessageType::e_setup: Feat.OnReceiveSetup_UUIE(pdu); break; case H460_MessageType::e_alerting: Feat.OnReceiveAlerting_UUIE(pdu); break; case H460_MessageType::e_callProceeding: Feat.OnReceiveCallProceeding_UUIE(pdu); break; case H460_MessageType::e_connect: Feat.OnReceiveCallConnect_UUIE(pdu); break; case H460_MessageType::e_facility: Feat.OnReceiveFacility_UUIE(pdu); break; case H460_MessageType::e_releaseComplete : Feat.OnReceiveReleaseComplete_UUIE(pdu); break; default: Feat.OnReceivedUnAllocatedPDU(pdu); } } PString H460_FeatureSet::PTracePDU(PINDEX id) const { switch (id) { case H460_MessageType::e_gatekeeperRequest : return "GK Request"; case H460_MessageType::e_gatekeeperConfirm : return "GK Confirm"; case H460_MessageType::e_gatekeeperReject : return "GK Reject"; case H460_MessageType::e_registrationRequest : return "Reg Request"; case H460_MessageType::e_registrationConfirm : return "Reg Confirm"; case H460_MessageType::e_registrationReject : return "Reg Reject"; case H460_MessageType::e_admissionRequest : return "Adm Reqest"; case H460_MessageType::e_admissionConfirm : return "Adm Confirm"; case H460_MessageType::e_admissionReject : return "Adm Reject"; case H460_MessageType::e_locationRequest : return "Loc Request"; case H460_MessageType::e_locationConfirm : return "Loc Confirm"; case H460_MessageType::e_locationReject : return "Loc Reject"; case H460_MessageType::e_nonStandardMessage : return "NonStd"; case H460_MessageType::e_serviceControlIndication :return "Ctrl Indication"; case H460_MessageType::e_serviceControlResponse :return "Ctrl Response"; case H460_MessageType::e_unregistrationRequest:return "Unreg Request"; case H460_MessageType::e_inforequest:return "Info Request"; case H460_MessageType::e_inforequestresponse:return "Info Response"; case H460_MessageType::e_disengagerequest:return "Dis Request"; case H460_MessageType::e_disengageconfirm:return "Dis Confirm"; // case H460_MessageType::e_Endpoint :return "Endpoint"; case H460_MessageType::e_setup :return "Setup"; case H460_MessageType::e_alerting :return "Alerting"; case H460_MessageType::e_callProceeding :return "CallProceed"; case H460_MessageType::e_connect :return "Connect"; case H460_MessageType::e_facility :return "Facility"; case H460_MessageType::e_releaseComplete : return "ReleaseComplete"; default: return "?"; } } void H460_FeatureSet::DisableAllFeatures(int msgtype) { if (Features.GetSize() > 0) { PTRACE(4,"H460\tRemoving all H.460 Features remote/Gk expected to advertise " << PTracePDU(msgtype)); std::list removelist; for (PINDEX i =0; i < Features.GetSize(); i++) { H460_Feature & feat = Features.GetDataAt(i); if (feat.FeatureAdvertised(msgtype)) { PTRACE(4,"H460\tRemoving " << feat.GetFeatureIDAsString()); removelist.push_back(feat.GetFeatureID()); } else { PTRACE(4,"H460\tPreserving " << feat.GetFeatureIDAsString()); } } while (!removelist.empty()) { Features.RemoveAt(removelist.front()); removelist.pop_front(); } } } void H460_FeatureSet::ReceiveFeature(unsigned id, const H225_FeatureSet & Message, PBoolean genericData) { ReadFeatureSetPDU(Message,id, genericData); } PBoolean H460_FeatureSet::SendFeature(unsigned id, H225_FeatureSet & Message, PBoolean advertise) { return CreateFeatureSetPDU(Message,id, advertise); } void H460_FeatureSet::AttachEndPoint(H323EndPoint * _ep) { PTRACE(4,"H460\tEndpoint Attached"); ep = _ep; } void H460_FeatureSet::AttachBaseFeatureSet(H460_FeatureSet * _baseSet) { baseSet = _baseSet; } PBoolean H460_FeatureSet::HasFeature(const H460_FeatureID & id) { for (PINDEX i =0; i < Features.GetSize(); i++) { H460_Feature & feat = Features.GetDataAt(i); if (feat.GetFeatureID() == id) { return TRUE; } } return FALSE; } PBoolean H460_FeatureSet::SupportNonCallService(const H460_FeatureID & id) { for (PINDEX i =0; i < Features.GetSize(); i++) { H460_Feature & feat = Features.GetDataAt(i); if (feat.GetFeatureID() == id) { return feat.SupportNonCallService(); } } return FALSE; } H460_Feature * H460_FeatureSet::GetFeature(const H460_FeatureID & id) { if (HasFeature(id)) return &Features[id]; else return NULL; } #endif // H323_H460 h323plus/src/h460/h460_std18.cxx0000644000175000017500000002051011637352077014620 0ustar markmark/* H460_std18.cxx * * h323plus library * * Copyright (c) 2008 ISVO (Asia) Pte. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * Portions of this code were written with the assisance of funding from * triple-IT. http://www.triple-it.nl. * * Contributor(s): ______________________________________. * * $Id: h460_std18.cxx,v 1.13 2011/09/24 12:59:43 shorne Exp $ * * */ #include "ptlib.h" #include "openh323buildopts.h" #ifdef H323_H46018 #include #include #include #include #if _WIN32 #pragma message("H.460.18/.19 Enabled. See Tandberg Patent License. http://www.tandberg.com/collateral/tandberg-ITU-license.pdf") #else #warning("H.460.18/.19 Enabled. See Tandberg Patent License. http://www.tandberg.com/collateral/tandberg-ITU-license.pdf") #endif /////////////////////////////////////////////////////// // H.460.18 // // Must Declare for Factory Loader. H460_FEATURE(Std18); H460_FeatureStd18::H460_FeatureStd18() : H460_FeatureStd(18) { PTRACE(6,"Std18\tInstance Created"); EP = NULL; handler = NULL; isEnabled = FALSE; FeatureCategory = FeatureSupported; } H460_FeatureStd18::~H460_FeatureStd18() { if (handler != NULL) delete handler; } void H460_FeatureStd18::AttachEndPoint(H323EndPoint * _ep) { EP =_ep; handler = NULL; isEnabled = EP->H46018IsEnabled(); if (isEnabled) { PTRACE(6,"Std18\tEnabling and Initialising H.460.18 Handler"); handler = new H46018Handler(*EP); } } PBoolean H460_FeatureStd18::OnSendGatekeeperRequest(H225_FeatureDescriptor & pdu) { if (!isEnabled) return false; // Ignore if already manually using STUN PNatStrategy & natMethods = EP->GetNatMethods(); const PNatList & list = natMethods.GetNATList(); if (list.GetSize() > 0) { for (PINDEX i=0; i < list.GetSize(); i++) { if (list[i].GetName() == "STUN" && list[i].IsAvailable(PIPSocket::GetDefaultIpAny())) { return false; } } } H460_FeatureStd feat = H460_FeatureStd(18); pdu = feat; return TRUE; } void H460_FeatureStd18::OnReceiveGatekeeperConfirm(const H225_FeatureDescriptor & pdu) { isEnabled = true; } PBoolean H460_FeatureStd18::OnSendRegistrationRequest(H225_FeatureDescriptor & pdu) { if (!isEnabled) return FALSE; H460_FeatureStd feat = H460_FeatureStd(18); pdu = feat; return TRUE; } void H460_FeatureStd18::OnReceiveRegistrationConfirm(const H225_FeatureDescriptor & pdu) { isEnabled = true; handler->Enable(); EP->H46018Received(); } void H460_FeatureStd18::OnReceiveServiceControlIndication(const H225_FeatureDescriptor & pdu) { if (handler == NULL) return; H460_FeatureStd & feat = (H460_FeatureStd &)pdu; if (!feat.Contains(H460_FeatureID(1))) { PTRACE(4,"Std18\tERROR: Received SCI without Call Indication!"); return; } PTRACE(4,"Std18\tSCI: Processing Incoming call request."); PASN_OctetString raw = feat.Value(H460_FeatureID(1)); handler->CreateH225Transport(raw); } /////////////////////////////////////////////////////// // H.460.19 // // Must Declare for Factory Loader. H460_FEATURE(Std19); #define H46019_Multiplex 1 #define H46019_MultiServer 2 H460_FeatureStd19::H460_FeatureStd19() : H460_FeatureStd(19), EP(NULL), CON(NULL), isEnabled(false), isAvailable(true), remoteSupport(false), multiSupport(false) { PTRACE(6,"Std19\tInstance Created"); FeatureCategory = FeatureSupported; } H460_FeatureStd19::~H460_FeatureStd19() { } void H460_FeatureStd19::AttachEndPoint(H323EndPoint * _ep) { PTRACE(6,"Std19\tEndPoint Attached"); EP = _ep; // We only enable IF the gatekeeper supports H.460.18 H460_FeatureSet * gkfeat = EP->GetGatekeeperFeatures(); if (gkfeat && gkfeat->HasFeature(18)) { isEnabled = true; } else { PTRACE(4,"Std19\tH.460.19 disabled as GK does not support H.460.18"); isEnabled = false; } } void H460_FeatureStd19::AttachConnection(H323Connection * _con) { CON = _con; } PBoolean H460_FeatureStd19::OnSendSetup_UUIE(H225_FeatureDescriptor & pdu) { if (!isEnabled || !isAvailable) return FALSE; CON->H46019Enabled(); H460_FeatureStd feat = H460_FeatureStd(19); #ifdef H323_H46019M feat.Add(H46019_Multiplex); #endif pdu = feat; return TRUE; } void H460_FeatureStd19::OnReceiveSetup_UUIE(const H225_FeatureDescriptor & pdu) { if (isEnabled && isAvailable) { remoteSupport = TRUE; CON->H46019Enabled(); CON->H46019SetCallReceiver(); #ifdef H323_H46019M H460_FeatureStd & feat = (H460_FeatureStd &)pdu; if (feat.Contains(H46019_Multiplex)) { multiSupport = true; CON->H46019MultiEnabled(); } /// MultiServer? // if (feat.Contains(H46019_MultiServer)) // Do we need to do anything? - SH #endif } } PBoolean H460_FeatureStd19::OnSendCallProceeding_UUIE(H225_FeatureDescriptor & pdu) { if (!isEnabled || !isAvailable || !remoteSupport) return FALSE; H460_FeatureStd feat = H460_FeatureStd(19); #ifdef H323_H46019M if (multiSupport) feat.Add(H46019_Multiplex); #endif pdu = feat; return TRUE; } void H460_FeatureStd19::OnReceiveCallProceeding_UUIE(const H225_FeatureDescriptor & pdu) { if (isEnabled && isAvailable) { remoteSupport = TRUE; CON->H46019Enabled(); #ifdef H323_H46019M H460_FeatureStd & feat = (H460_FeatureStd &)pdu; if (feat.Contains(H46019_Multiplex)) { CON->H46019MultiEnabled(); multiSupport = true; } #endif } } PBoolean H460_FeatureStd19::OnSendAlerting_UUIE(H225_FeatureDescriptor & pdu) { if (!isEnabled || !isAvailable || !remoteSupport) return FALSE; H460_FeatureStd feat = H460_FeatureStd(19); #ifdef H323_H46019M if (multiSupport) feat.Add(H46019_Multiplex); #endif pdu = feat; return TRUE; } void H460_FeatureStd19::OnReceiveAlerting_UUIE(const H225_FeatureDescriptor & pdu) { if (!remoteSupport) { remoteSupport = TRUE; CON->H46019Enabled(); #ifdef H323_H46019M H460_FeatureStd & feat = (H460_FeatureStd &)pdu; if (feat.Contains(H46019_Multiplex)) { multiSupport = true; CON->H46019MultiEnabled(); } #endif } } PBoolean H460_FeatureStd19::OnSendCallConnect_UUIE(H225_FeatureDescriptor & pdu) { if (!isEnabled || !isAvailable || !remoteSupport) return FALSE; H460_FeatureStd feat = H460_FeatureStd(19); #ifdef H323_H46019M if (multiSupport) feat.Add(H46019_Multiplex); #endif pdu = feat; return TRUE; } void H460_FeatureStd19::OnReceiveCallConnect_UUIE(const H225_FeatureDescriptor & pdu) { if (!remoteSupport) { remoteSupport = TRUE; CON->H46019Enabled(); #ifdef H323_H46019M H460_FeatureStd & feat = (H460_FeatureStd &)pdu; if (feat.Contains(H46019_Multiplex)) { multiSupport = true; CON->H46019MultiEnabled(); } #endif } } void H460_FeatureStd19::SetAvailable(bool avail) { isAvailable = avail; } #endif h323plus/src/h460/h46015.cxx0000644000175000017500000004433311561716521013746 0ustar markmark// // H46015.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "H46015.h" #endif #include #include "h460/h46015.h" #define new PNEW #if ! H323_DISABLE_H46015 // // ChannelSuspendConfirm // H46015_ChannelSuspendConfirm::H46015_ChannelSuspendConfirm(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H46015_ChannelSuspendConfirm::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX H46015_ChannelSuspendConfirm::GetDataLength() const { PINDEX length = 0; return length; } PBoolean H46015_ChannelSuspendConfirm::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H46015_ChannelSuspendConfirm::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * H46015_ChannelSuspendConfirm::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H46015_ChannelSuspendConfirm::Class()), PInvalidCast); #endif return new H46015_ChannelSuspendConfirm(*this); } // // ChannelSuspendCancel // H46015_ChannelSuspendCancel::H46015_ChannelSuspendCancel(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H46015_ChannelSuspendCancel::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX H46015_ChannelSuspendCancel::GetDataLength() const { PINDEX length = 0; return length; } PBoolean H46015_ChannelSuspendCancel::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H46015_ChannelSuspendCancel::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * H46015_ChannelSuspendCancel::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H46015_ChannelSuspendCancel::Class()), PInvalidCast); #endif return new H46015_ChannelSuspendCancel(*this); } // // ChannelResumeRequest // H46015_ChannelResumeRequest::H46015_ChannelResumeRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_randomNumber.SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); } #ifndef PASN_NOPRINTON void H46015_ChannelResumeRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "randomNumber = " << setprecision(indent) << m_randomNumber << '\n'; if (HasOptionalField(e_resetH245)) strm << setw(indent+12) << "resetH245 = " << setprecision(indent) << m_resetH245 << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H46015_ChannelResumeRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H46015_ChannelResumeRequest), PInvalidCast); #endif const H46015_ChannelResumeRequest & other = (const H46015_ChannelResumeRequest &)obj; Comparison result; if ((result = m_randomNumber.Compare(other.m_randomNumber)) != EqualTo) return result; if ((result = m_resetH245.Compare(other.m_resetH245)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H46015_ChannelResumeRequest::GetDataLength() const { PINDEX length = 0; length += m_randomNumber.GetObjectLength(); if (HasOptionalField(e_resetH245)) length += m_resetH245.GetObjectLength(); return length; } PBoolean H46015_ChannelResumeRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_randomNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_resetH245) && !m_resetH245.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H46015_ChannelResumeRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_randomNumber.Encode(strm); if (HasOptionalField(e_resetH245)) m_resetH245.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H46015_ChannelResumeRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H46015_ChannelResumeRequest::Class()), PInvalidCast); #endif return new H46015_ChannelResumeRequest(*this); } // // ChannelResumeResponse // H46015_ChannelResumeResponse::H46015_ChannelResumeResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H46015_ChannelResumeResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX H46015_ChannelResumeResponse::GetDataLength() const { PINDEX length = 0; return length; } PBoolean H46015_ChannelResumeResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H46015_ChannelResumeResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * H46015_ChannelResumeResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H46015_ChannelResumeResponse::Class()), PInvalidCast); #endif return new H46015_ChannelResumeResponse(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H46015_SignallingChannelData_signallingChannelData[]={ {"channelSuspendRequest",0} ,{"channelSuspendResponse",1} ,{"channelSuspendConfirm",2} ,{"channelSuspendCancel",3} ,{"channelResumeRequest",4} ,{"channelResumeResponse",5} }; #endif // // SignallingChannelData_signallingChannelData // H46015_SignallingChannelData_signallingChannelData::H46015_SignallingChannelData_signallingChannelData(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 6, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H46015_SignallingChannelData_signallingChannelData,6 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H46015_SignallingChannelData_signallingChannelData::operator H46015_ChannelSuspendRequest &() const #else H46015_SignallingChannelData_signallingChannelData::operator H46015_ChannelSuspendRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H46015_ChannelSuspendRequest), PInvalidCast); #endif return *(H46015_ChannelSuspendRequest *)choice; } H46015_SignallingChannelData_signallingChannelData::operator const H46015_ChannelSuspendRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H46015_ChannelSuspendRequest), PInvalidCast); #endif return *(H46015_ChannelSuspendRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H46015_SignallingChannelData_signallingChannelData::operator H46015_ChannelSuspendResponse &() const #else H46015_SignallingChannelData_signallingChannelData::operator H46015_ChannelSuspendResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H46015_ChannelSuspendResponse), PInvalidCast); #endif return *(H46015_ChannelSuspendResponse *)choice; } H46015_SignallingChannelData_signallingChannelData::operator const H46015_ChannelSuspendResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H46015_ChannelSuspendResponse), PInvalidCast); #endif return *(H46015_ChannelSuspendResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H46015_SignallingChannelData_signallingChannelData::operator H46015_ChannelSuspendConfirm &() const #else H46015_SignallingChannelData_signallingChannelData::operator H46015_ChannelSuspendConfirm &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H46015_ChannelSuspendConfirm), PInvalidCast); #endif return *(H46015_ChannelSuspendConfirm *)choice; } H46015_SignallingChannelData_signallingChannelData::operator const H46015_ChannelSuspendConfirm &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H46015_ChannelSuspendConfirm), PInvalidCast); #endif return *(H46015_ChannelSuspendConfirm *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H46015_SignallingChannelData_signallingChannelData::operator H46015_ChannelSuspendCancel &() const #else H46015_SignallingChannelData_signallingChannelData::operator H46015_ChannelSuspendCancel &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H46015_ChannelSuspendCancel), PInvalidCast); #endif return *(H46015_ChannelSuspendCancel *)choice; } H46015_SignallingChannelData_signallingChannelData::operator const H46015_ChannelSuspendCancel &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H46015_ChannelSuspendCancel), PInvalidCast); #endif return *(H46015_ChannelSuspendCancel *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H46015_SignallingChannelData_signallingChannelData::operator H46015_ChannelResumeRequest &() const #else H46015_SignallingChannelData_signallingChannelData::operator H46015_ChannelResumeRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H46015_ChannelResumeRequest), PInvalidCast); #endif return *(H46015_ChannelResumeRequest *)choice; } H46015_SignallingChannelData_signallingChannelData::operator const H46015_ChannelResumeRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H46015_ChannelResumeRequest), PInvalidCast); #endif return *(H46015_ChannelResumeRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H46015_SignallingChannelData_signallingChannelData::operator H46015_ChannelResumeResponse &() const #else H46015_SignallingChannelData_signallingChannelData::operator H46015_ChannelResumeResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H46015_ChannelResumeResponse), PInvalidCast); #endif return *(H46015_ChannelResumeResponse *)choice; } H46015_SignallingChannelData_signallingChannelData::operator const H46015_ChannelResumeResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H46015_ChannelResumeResponse), PInvalidCast); #endif return *(H46015_ChannelResumeResponse *)choice; } PBoolean H46015_SignallingChannelData_signallingChannelData::CreateObject() { switch (tag) { case e_channelSuspendRequest : choice = new H46015_ChannelSuspendRequest(); return TRUE; case e_channelSuspendResponse : choice = new H46015_ChannelSuspendResponse(); return TRUE; case e_channelSuspendConfirm : choice = new H46015_ChannelSuspendConfirm(); return TRUE; case e_channelSuspendCancel : choice = new H46015_ChannelSuspendCancel(); return TRUE; case e_channelResumeRequest : choice = new H46015_ChannelResumeRequest(); return TRUE; case e_channelResumeResponse : choice = new H46015_ChannelResumeResponse(); return TRUE; } choice = NULL; return FALSE; } PObject * H46015_SignallingChannelData_signallingChannelData::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H46015_SignallingChannelData_signallingChannelData::Class()), PInvalidCast); #endif return new H46015_SignallingChannelData_signallingChannelData(*this); } // // ArrayOf_TransportAddress // H46015_ArrayOf_TransportAddress::H46015_ArrayOf_TransportAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H46015_ArrayOf_TransportAddress::CreateObject() const { return new H225_TransportAddress; } H225_TransportAddress & H46015_ArrayOf_TransportAddress::operator[](PINDEX i) const { return (H225_TransportAddress &)array[i]; } PObject * H46015_ArrayOf_TransportAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H46015_ArrayOf_TransportAddress::Class()), PInvalidCast); #endif return new H46015_ArrayOf_TransportAddress(*this); } // // SignallingChannelData // H46015_SignallingChannelData::H46015_SignallingChannelData(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H46015_SignallingChannelData::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "signallingChannelData = " << setprecision(indent) << m_signallingChannelData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H46015_SignallingChannelData::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H46015_SignallingChannelData), PInvalidCast); #endif const H46015_SignallingChannelData & other = (const H46015_SignallingChannelData &)obj; Comparison result; if ((result = m_signallingChannelData.Compare(other.m_signallingChannelData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H46015_SignallingChannelData::GetDataLength() const { PINDEX length = 0; length += m_signallingChannelData.GetObjectLength(); return length; } PBoolean H46015_SignallingChannelData::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_signallingChannelData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H46015_SignallingChannelData::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_signallingChannelData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H46015_SignallingChannelData::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H46015_SignallingChannelData::Class()), PInvalidCast); #endif return new H46015_SignallingChannelData(*this); } // // ChannelSuspendRequest // H46015_ChannelSuspendRequest::H46015_ChannelSuspendRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H46015_ChannelSuspendRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+23) << "channelResumeAddress = " << setprecision(indent) << m_channelResumeAddress << '\n'; strm << setw(indent+18) << "immediateResume = " << setprecision(indent) << m_immediateResume << '\n'; if (HasOptionalField(e_resetH245)) strm << setw(indent+12) << "resetH245 = " << setprecision(indent) << m_resetH245 << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H46015_ChannelSuspendRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H46015_ChannelSuspendRequest), PInvalidCast); #endif const H46015_ChannelSuspendRequest & other = (const H46015_ChannelSuspendRequest &)obj; Comparison result; if ((result = m_channelResumeAddress.Compare(other.m_channelResumeAddress)) != EqualTo) return result; if ((result = m_immediateResume.Compare(other.m_immediateResume)) != EqualTo) return result; if ((result = m_resetH245.Compare(other.m_resetH245)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H46015_ChannelSuspendRequest::GetDataLength() const { PINDEX length = 0; length += m_channelResumeAddress.GetObjectLength(); length += m_immediateResume.GetObjectLength(); if (HasOptionalField(e_resetH245)) length += m_resetH245.GetObjectLength(); return length; } PBoolean H46015_ChannelSuspendRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_channelResumeAddress.Decode(strm)) return FALSE; if (!m_immediateResume.Decode(strm)) return FALSE; if (HasOptionalField(e_resetH245) && !m_resetH245.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H46015_ChannelSuspendRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_channelResumeAddress.Encode(strm); m_immediateResume.Encode(strm); if (HasOptionalField(e_resetH245)) m_resetH245.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H46015_ChannelSuspendRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H46015_ChannelSuspendRequest::Class()), PInvalidCast); #endif return new H46015_ChannelSuspendRequest(*this); } // // ChannelSuspendResponse // H46015_ChannelSuspendResponse::H46015_ChannelSuspendResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H46015_ChannelSuspendResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "okToSuspend = " << setprecision(indent) << m_okToSuspend << '\n'; strm << setw(indent+23) << "channelResumeAddress = " << setprecision(indent) << m_channelResumeAddress << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H46015_ChannelSuspendResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H46015_ChannelSuspendResponse), PInvalidCast); #endif const H46015_ChannelSuspendResponse & other = (const H46015_ChannelSuspendResponse &)obj; Comparison result; if ((result = m_okToSuspend.Compare(other.m_okToSuspend)) != EqualTo) return result; if ((result = m_channelResumeAddress.Compare(other.m_channelResumeAddress)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H46015_ChannelSuspendResponse::GetDataLength() const { PINDEX length = 0; length += m_okToSuspend.GetObjectLength(); length += m_channelResumeAddress.GetObjectLength(); return length; } PBoolean H46015_ChannelSuspendResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_okToSuspend.Decode(strm)) return FALSE; if (!m_channelResumeAddress.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H46015_ChannelSuspendResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_okToSuspend.Encode(strm); m_channelResumeAddress.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H46015_ChannelSuspendResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H46015_ChannelSuspendResponse::Class()), PInvalidCast); #endif return new H46015_ChannelSuspendResponse(*this); } #endif // if ! H323_DISABLE_H46015 // End of H46015.cxx h323plus/src/h460/h460_std9.cxx0000644000175000017500000002102611531065174014533 0ustar markmark/* h460_std9.cxx * * Copyright (c) 2009 ISVO (Asia) Pte Ltd. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte Ltd. * * * Contributor(s): ______________________________________. * * $Log: h460_std9.cxx,v $ * Revision 1.6 2011/02/23 02:01:32 shorne * Fixes for H.460.9 so the statistics get loaded correctly. * * Revision 1.5 2011/02/20 06:55:46 shorne * Fixes for H.460 to allow better selection of mesasage location in PDU. Features or Generic Data. Corrected H.460.9 * * Revision 1.4 2010/08/27 03:07:26 shorne * Fix compile warning of GCC 4.4 * * Revision 1.3 2010/05/18 07:44:39 willamowius * add newline at end of file * * Revision 1.2 2009/09/29 07:23:03 shorne * Change the way unmatched features are cleaned up in call signalling. Removed advertisement of H.460.19 in Alerting and Connecting PDU * * Revision 1.1 2009/08/21 07:01:06 shorne * Added H.460.9 Support * * * * */ #include "ptlib.h" #include "openh323buildopts.h" #ifdef H323_H4609 #include #include #include #include #include #ifdef _MSC_VER #pragma warning(disable : 4239) #endif // Must Declare for Factory Loader. H460_FEATURE(Std9); ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// H460_FeatureStd9::H460_FeatureStd9() : H460_FeatureStd(9) { PTRACE(6,"Std9\tInstance Created"); qossupport = false; finalonly = false; EP = NULL; CON = NULL; FeatureCategory = FeatureSupported; } H460_FeatureStd9::~H460_FeatureStd9() { } void H460_FeatureStd9::AttachEndPoint(H323EndPoint * _ep) { PTRACE(6,"Std9\tEndpoint Attached"); EP = _ep; } void H460_FeatureStd9::AttachConnection(H323Connection * _con) { CON = _con; } PBoolean H460_FeatureStd9::FeatureAdvertised(int mtype) { switch (mtype) { case H460_MessageType::e_admissionRequest: case H460_MessageType::e_admissionConfirm: case H460_MessageType::e_admissionReject: return true; default: return false; } } PBoolean H460_FeatureStd9::OnSendAdmissionRequest(H225_FeatureDescriptor & pdu) { // Build Message H460_FeatureStd feat = H460_FeatureStd(9); pdu = feat; return true; } void H460_FeatureStd9::OnReceiveAdmissionConfirm(const H225_FeatureDescriptor & pdu) { qossupport = true; CON->H4609EnableStats(); H460_FeatureStd & feat = (H460_FeatureStd &)pdu; if (feat.Contains(0)) finalonly = true; CON->H4609StatsFinal(finalonly); } PBoolean H460_FeatureStd9::GenerateReport(H4609_ArrayOf_RTCPMeasures & report) { H323Connection::H4609Statistics stat; PBoolean hasStats = CON->H4609DequeueStats(stat); while (hasStats) { H4609_RTCPMeasures info; // RTP Information H225_TransportChannelInfo & rtp = info.m_rtpAddress; rtp.IncludeOptionalField(H225_TransportChannelInfo::e_sendAddress); stat.sendRTPaddr.SetPDU(rtp.m_sendAddress); rtp.IncludeOptionalField(H225_TransportChannelInfo::e_recvAddress); stat.recvRTPaddr.SetPDU(rtp.m_recvAddress); // RTCP Information /* H225_TransportChannelInfo & rtcp = info.m_rtcpAddress; rtp.IncludeOptionalField(H225_TransportChannelInfo::e_sendAddress); stat.sendRTCPaddr.SetPDU(rtp.m_sendAddress); rtp.IncludeOptionalField(H225_TransportChannelInfo::e_recvAddress); stat.recvRTCPaddr.SetPDU(rtp.m_recvAddress); */ // Session ID info.m_sessionId.SetValue(stat.sessionid); if (stat.meanEndToEndDelay > 0) { info.IncludeOptionalField(H4609_RTCPMeasures::e_mediaSenderMeasures); H4609_RTCPMeasures_mediaSenderMeasures & send = info.m_mediaSenderMeasures; if (stat.meanEndToEndDelay > 0) { send.IncludeOptionalField(H4609_RTCPMeasures_mediaSenderMeasures::e_meanEstimatedEnd2EndDelay); send.m_meanEstimatedEnd2EndDelay = stat.meanEndToEndDelay; } if (stat.worstEndToEndDelay > 0) { send.IncludeOptionalField(H4609_RTCPMeasures_mediaSenderMeasures::e_worstEstimatedEnd2EndDelay); send.m_worstEstimatedEnd2EndDelay = stat.worstEndToEndDelay; } } if (stat.packetsReceived > 0) { info.IncludeOptionalField(H4609_RTCPMeasures::e_mediaReceiverMeasures); H4609_RTCPMeasures_mediaReceiverMeasures & recv = info.m_mediaReceiverMeasures; if (stat.accumPacketLost > 0) { recv.IncludeOptionalField(H4609_RTCPMeasures_mediaReceiverMeasures::e_cumulativeNumberOfPacketsLost); recv.m_cumulativeNumberOfPacketsLost = stat.accumPacketLost; } if (stat.packetLossRate > 0) { recv.IncludeOptionalField(H4609_RTCPMeasures_mediaReceiverMeasures::e_packetLostRate); recv.m_packetLostRate = stat.packetLossRate; } if (stat.worstJitter > 0) { recv.IncludeOptionalField(H4609_RTCPMeasures_mediaReceiverMeasures::e_worstJitter); recv.m_worstJitter = stat.worstJitter; } if (stat.bandwidth > 0) { recv.IncludeOptionalField(H4609_RTCPMeasures_mediaReceiverMeasures::e_estimatedThroughput); recv.m_estimatedThroughput = stat.bandwidth; } if (stat.fractionLostRate > 0) { recv.IncludeOptionalField(H4609_RTCPMeasures_mediaReceiverMeasures::e_fractionLostRate); recv.m_fractionLostRate = stat.fractionLostRate; } if (stat.meanJitter > 0) { recv.IncludeOptionalField(H4609_RTCPMeasures_mediaReceiverMeasures::e_meanJitter); recv.m_meanJitter = stat.meanJitter; } } PINDEX size = report.GetSize(); report.SetSize(size+1); report[size] = info; // Get next call statistics record hasStats = CON->H4609DequeueStats(stat); } return (report.GetSize() > 0); } PBoolean H460_FeatureStd9::WriteStatisticsReport(H460_FeatureStd & msg, PBoolean final) { // Generate the report PBoolean success = FALSE; H4609_QosMonitoringReportData qosdata; if (!final) { qosdata.SetTag(H4609_QosMonitoringReportData::e_periodic); H4609_PeriodicQoSMonReport & rep = qosdata; H4609_ArrayOf_PerCallQoSReport & percall = rep.m_perCallInfo; percall.SetSize(1); H4609_PerCallQoSReport & period = percall[0]; period.m_callReferenceValue = CON->GetCallReference(); period.m_conferenceID = CON->GetConferenceIdentifier(); period.m_callIdentifier.m_guid = CON->GetCallIdentifier(); if (GenerateReport(period.m_mediaChannelsQoS)) { period.IncludeOptionalField(H4609_PerCallQoSReport::e_mediaChannelsQoS); success = true; } } else { qosdata.SetTag(H4609_QosMonitoringReportData::e_final); H4609_FinalQosMonReport & rep = qosdata; success = GenerateReport(rep.m_mediaInfo); } if (success) { PTRACE(6,"Std9\tStatistics Report\n" << qosdata); PASN_OctetString rawstats; rawstats.EncodeSubType(qosdata); msg.Add(1,H460_FeatureContent(rawstats)); } return success; } PBoolean H460_FeatureStd9::OnSendInfoRequestResponseMessage(H225_FeatureDescriptor & pdu) { if (!qossupport) return false; H460_FeatureStd feat = H460_FeatureStd(9); if (WriteStatisticsReport(feat,finalonly)) { pdu = feat; return true; } return true; } PBoolean H460_FeatureStd9::OnSendDisengagementRequestMessage(H225_FeatureDescriptor & pdu) { if (!qossupport) return false; H460_FeatureStd feat = H460_FeatureStd(9); if (WriteStatisticsReport(feat,finalonly)) { pdu = feat; return true; } return false; } #ifdef _MSC_VER #pragma warning(default : 4239) #endif #endif h323plus/src/h460/h46018.cxx0000644000175000017500000000764211015524440013742 0ustar markmark// // h46018.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h46018.h" #endif #include #include "h460/h46018.h" #define new PNEW #if ! H323_DISABLE_H46018 // // IncomingCallIndication // H46018_IncomingCallIndication::H46018_IncomingCallIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H46018_IncomingCallIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "callSignallingAddress = " << setprecision(indent) << m_callSignallingAddress << '\n'; strm << setw(indent+9) << "callID = " << setprecision(indent) << m_callID << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H46018_IncomingCallIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H46018_IncomingCallIndication), PInvalidCast); #endif const H46018_IncomingCallIndication & other = (const H46018_IncomingCallIndication &)obj; Comparison result; if ((result = m_callSignallingAddress.Compare(other.m_callSignallingAddress)) != EqualTo) return result; if ((result = m_callID.Compare(other.m_callID)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H46018_IncomingCallIndication::GetDataLength() const { PINDEX length = 0; length += m_callSignallingAddress.GetObjectLength(); length += m_callID.GetObjectLength(); return length; } PBoolean H46018_IncomingCallIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_callSignallingAddress.Decode(strm)) return FALSE; if (!m_callID.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H46018_IncomingCallIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_callSignallingAddress.Encode(strm); m_callID.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H46018_IncomingCallIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H46018_IncomingCallIndication::Class()), PInvalidCast); #endif return new H46018_IncomingCallIndication(*this); } // // LRQKeepAliveData // H46018_LRQKeepAliveData::H46018_LRQKeepAliveData(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H46018_LRQKeepAliveData::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+23) << "lrqKeepAliveInterval = " << setprecision(indent) << m_lrqKeepAliveInterval << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H46018_LRQKeepAliveData::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H46018_LRQKeepAliveData), PInvalidCast); #endif const H46018_LRQKeepAliveData & other = (const H46018_LRQKeepAliveData &)obj; Comparison result; if ((result = m_lrqKeepAliveInterval.Compare(other.m_lrqKeepAliveInterval)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H46018_LRQKeepAliveData::GetDataLength() const { PINDEX length = 0; length += m_lrqKeepAliveInterval.GetObjectLength(); return length; } PBoolean H46018_LRQKeepAliveData::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_lrqKeepAliveInterval.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H46018_LRQKeepAliveData::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_lrqKeepAliveInterval.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H46018_LRQKeepAliveData::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H46018_LRQKeepAliveData::Class()), PInvalidCast); #endif return new H46018_LRQKeepAliveData(*this); } #endif // if ! H323_DISABLE_H46018 // End of h46018.cxx h323plus/src/h460/h460pres.cxx0000644000175000017500000016430011313546035014463 0ustar markmark// // H460pres.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h460pres.h" #endif #include #include "h460/h460pres.h" #define new PNEW #if ! H323_DISABLE_H460P #ifndef PASN_NOPRINTON const static PASN_Names Names_H460P_PresenceMessage[]={ {"presenceStatus",0} ,{"presenceInstruct",1} ,{"presenceAuthorize",2} ,{"presenceNotify",3} ,{"presenceRequest",4} ,{"presenceResponse",5} ,{"presenceAlive",6} ,{"presenceRemove",7} ,{"presenceAlert",8} }; #endif // // PresenceMessage // H460P_PresenceMessage::H460P_PresenceMessage(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 9, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H460P_PresenceMessage,9 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H460P_PresenceMessage::operator H460P_PresenceStatus &() const #else H460P_PresenceMessage::operator H460P_PresenceStatus &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceStatus), PInvalidCast); #endif return *(H460P_PresenceStatus *)choice; } H460P_PresenceMessage::operator const H460P_PresenceStatus &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceStatus), PInvalidCast); #endif return *(H460P_PresenceStatus *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H460P_PresenceMessage::operator H460P_PresenceInstruct &() const #else H460P_PresenceMessage::operator H460P_PresenceInstruct &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceInstruct), PInvalidCast); #endif return *(H460P_PresenceInstruct *)choice; } H460P_PresenceMessage::operator const H460P_PresenceInstruct &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceInstruct), PInvalidCast); #endif return *(H460P_PresenceInstruct *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H460P_PresenceMessage::operator H460P_PresenceAuthorize &() const #else H460P_PresenceMessage::operator H460P_PresenceAuthorize &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceAuthorize), PInvalidCast); #endif return *(H460P_PresenceAuthorize *)choice; } H460P_PresenceMessage::operator const H460P_PresenceAuthorize &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceAuthorize), PInvalidCast); #endif return *(H460P_PresenceAuthorize *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H460P_PresenceMessage::operator H460P_PresenceNotify &() const #else H460P_PresenceMessage::operator H460P_PresenceNotify &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceNotify), PInvalidCast); #endif return *(H460P_PresenceNotify *)choice; } H460P_PresenceMessage::operator const H460P_PresenceNotify &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceNotify), PInvalidCast); #endif return *(H460P_PresenceNotify *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H460P_PresenceMessage::operator H460P_PresenceRequest &() const #else H460P_PresenceMessage::operator H460P_PresenceRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceRequest), PInvalidCast); #endif return *(H460P_PresenceRequest *)choice; } H460P_PresenceMessage::operator const H460P_PresenceRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceRequest), PInvalidCast); #endif return *(H460P_PresenceRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H460P_PresenceMessage::operator H460P_PresenceResponse &() const #else H460P_PresenceMessage::operator H460P_PresenceResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceResponse), PInvalidCast); #endif return *(H460P_PresenceResponse *)choice; } H460P_PresenceMessage::operator const H460P_PresenceResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceResponse), PInvalidCast); #endif return *(H460P_PresenceResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H460P_PresenceMessage::operator H460P_PresenceAlive &() const #else H460P_PresenceMessage::operator H460P_PresenceAlive &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceAlive), PInvalidCast); #endif return *(H460P_PresenceAlive *)choice; } H460P_PresenceMessage::operator const H460P_PresenceAlive &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceAlive), PInvalidCast); #endif return *(H460P_PresenceAlive *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H460P_PresenceMessage::operator H460P_PresenceRemove &() const #else H460P_PresenceMessage::operator H460P_PresenceRemove &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceRemove), PInvalidCast); #endif return *(H460P_PresenceRemove *)choice; } H460P_PresenceMessage::operator const H460P_PresenceRemove &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceRemove), PInvalidCast); #endif return *(H460P_PresenceRemove *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H460P_PresenceMessage::operator H460P_PresenceAlert &() const #else H460P_PresenceMessage::operator H460P_PresenceAlert &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceAlert), PInvalidCast); #endif return *(H460P_PresenceAlert *)choice; } H460P_PresenceMessage::operator const H460P_PresenceAlert &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceAlert), PInvalidCast); #endif return *(H460P_PresenceAlert *)choice; } PBoolean H460P_PresenceMessage::CreateObject() { switch (tag) { case e_presenceStatus : choice = new H460P_PresenceStatus(); return TRUE; case e_presenceInstruct : choice = new H460P_PresenceInstruct(); return TRUE; case e_presenceAuthorize : choice = new H460P_PresenceAuthorize(); return TRUE; case e_presenceNotify : choice = new H460P_PresenceNotify(); return TRUE; case e_presenceRequest : choice = new H460P_PresenceRequest(); return TRUE; case e_presenceResponse : choice = new H460P_PresenceResponse(); return TRUE; case e_presenceAlive : choice = new H460P_PresenceAlive(); return TRUE; case e_presenceRemove : choice = new H460P_PresenceRemove(); return TRUE; case e_presenceAlert : choice = new H460P_PresenceAlert(); return TRUE; } choice = NULL; return FALSE; } PObject * H460P_PresenceMessage::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_PresenceMessage::Class()), PInvalidCast); #endif return new H460P_PresenceMessage(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H460P_PresencePDU[]={ {"instruction",0} ,{"notification",1} ,{"subscription",2} ,{"identifier",3} }; #endif // // PresencePDU // H460P_PresencePDU::H460P_PresencePDU(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H460P_PresencePDU,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H460P_PresencePDU::operator H460P_PresenceInstruction &() const #else H460P_PresencePDU::operator H460P_PresenceInstruction &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceInstruction), PInvalidCast); #endif return *(H460P_PresenceInstruction *)choice; } H460P_PresencePDU::operator const H460P_PresenceInstruction &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceInstruction), PInvalidCast); #endif return *(H460P_PresenceInstruction *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H460P_PresencePDU::operator H460P_PresenceNotification &() const #else H460P_PresencePDU::operator H460P_PresenceNotification &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceNotification), PInvalidCast); #endif return *(H460P_PresenceNotification *)choice; } H460P_PresencePDU::operator const H460P_PresenceNotification &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceNotification), PInvalidCast); #endif return *(H460P_PresenceNotification *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H460P_PresencePDU::operator H460P_PresenceSubscription &() const #else H460P_PresencePDU::operator H460P_PresenceSubscription &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceSubscription), PInvalidCast); #endif return *(H460P_PresenceSubscription *)choice; } H460P_PresencePDU::operator const H460P_PresenceSubscription &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceSubscription), PInvalidCast); #endif return *(H460P_PresenceSubscription *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H460P_PresencePDU::operator H460P_PresenceIdentifier &() const #else H460P_PresencePDU::operator H460P_PresenceIdentifier &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceIdentifier), PInvalidCast); #endif return *(H460P_PresenceIdentifier *)choice; } H460P_PresencePDU::operator const H460P_PresenceIdentifier &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceIdentifier), PInvalidCast); #endif return *(H460P_PresenceIdentifier *)choice; } PBoolean H460P_PresencePDU::CreateObject() { switch (tag) { case e_instruction : choice = new H460P_PresenceInstruction(); return TRUE; case e_notification : choice = new H460P_PresenceNotification(); return TRUE; case e_subscription : choice = new H460P_PresenceSubscription(); return TRUE; case e_identifier : choice = new H460P_PresenceIdentifier(); return TRUE; } choice = NULL; return FALSE; } PObject * H460P_PresencePDU::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_PresencePDU::Class()), PInvalidCast); #endif return new H460P_PresencePDU(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H460P_PresenceInstruction[]={ {"subscribe",0} ,{"unsubscribe",1} ,{"block",2} ,{"unblock",3} ,{"pending",4} }; #endif // // PresenceInstruction // H460P_PresenceInstruction::H460P_PresenceInstruction(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 5, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H460P_PresenceInstruction,5 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H460P_PresenceInstruction::operator H225_AliasAddress &() const #else H460P_PresenceInstruction::operator H225_AliasAddress &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_AliasAddress), PInvalidCast); #endif return *(H225_AliasAddress *)choice; } H460P_PresenceInstruction::operator const H225_AliasAddress &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_AliasAddress), PInvalidCast); #endif return *(H225_AliasAddress *)choice; } PBoolean H460P_PresenceInstruction::CreateObject() { switch (tag) { case e_subscribe : case e_unsubscribe : case e_block : case e_unblock : case e_pending : choice = new H225_AliasAddress(); return TRUE; } choice = NULL; return FALSE; } PObject * H460P_PresenceInstruction::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_PresenceInstruction::Class()), PInvalidCast); #endif return new H460P_PresenceInstruction(*this); } // // PresenceIdentifier // H460P_PresenceIdentifier::H460P_PresenceIdentifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H460P_PresenceIdentifier::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "guid = " << setprecision(indent) << m_guid << '\n'; if (HasOptionalField(e_remove)) strm << setw(indent+9) << "remove = " << setprecision(indent) << m_remove << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H460P_PresenceIdentifier::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H460P_PresenceIdentifier), PInvalidCast); #endif const H460P_PresenceIdentifier & other = (const H460P_PresenceIdentifier &)obj; Comparison result; if ((result = m_guid.Compare(other.m_guid)) != EqualTo) return result; if ((result = m_remove.Compare(other.m_remove)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H460P_PresenceIdentifier::GetDataLength() const { PINDEX length = 0; length += m_guid.GetObjectLength(); if (HasOptionalField(e_remove)) length += m_remove.GetObjectLength(); return length; } PBoolean H460P_PresenceIdentifier::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_guid.Decode(strm)) return FALSE; if (HasOptionalField(e_remove) && !m_remove.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H460P_PresenceIdentifier::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_guid.Encode(strm); if (HasOptionalField(e_remove)) m_remove.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H460P_PresenceIdentifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_PresenceIdentifier::Class()), PInvalidCast); #endif return new H460P_PresenceIdentifier(*this); } // // PresenceDisplay // H460P_PresenceDisplay::H460P_PresenceDisplay(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { m_display.SetConstraints(PASN_Object::FixedConstraint, 1, 128); } #ifndef PASN_NOPRINTON void H460P_PresenceDisplay::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_language)) strm << setw(indent+11) << "language = " << setprecision(indent) << m_language << '\n'; strm << setw(indent+10) << "display = " << setprecision(indent) << m_display << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H460P_PresenceDisplay::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H460P_PresenceDisplay), PInvalidCast); #endif const H460P_PresenceDisplay & other = (const H460P_PresenceDisplay &)obj; Comparison result; if ((result = m_language.Compare(other.m_language)) != EqualTo) return result; if ((result = m_display.Compare(other.m_display)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H460P_PresenceDisplay::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_language)) length += m_language.GetObjectLength(); length += m_display.GetObjectLength(); return length; } PBoolean H460P_PresenceDisplay::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_language) && !m_language.Decode(strm)) return FALSE; if (!m_display.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H460P_PresenceDisplay::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_language)) m_language.Encode(strm); m_display.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H460P_PresenceDisplay::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_PresenceDisplay::Class()), PInvalidCast); #endif return new H460P_PresenceDisplay(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H460P_PresenceState[]={ {"hidden",0} ,{"available",1} ,{"online",2} ,{"offline",3} ,{"onCall",4} ,{"voiceMail",5} ,{"notAvailable",6} ,{"away",7} ,{"generic",8} }; #endif // // PresenceState // H460P_PresenceState::H460P_PresenceState(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 8, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H460P_PresenceState,9 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H460P_PresenceState::operator H460P_ArrayOf_PresenceDisplay &() const #else H460P_PresenceState::operator H460P_ArrayOf_PresenceDisplay &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_ArrayOf_PresenceDisplay), PInvalidCast); #endif return *(H460P_ArrayOf_PresenceDisplay *)choice; } H460P_PresenceState::operator const H460P_ArrayOf_PresenceDisplay &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_ArrayOf_PresenceDisplay), PInvalidCast); #endif return *(H460P_ArrayOf_PresenceDisplay *)choice; } PBoolean H460P_PresenceState::CreateObject() { switch (tag) { case e_hidden : case e_available : case e_online : case e_offline : case e_onCall : case e_voiceMail : case e_notAvailable : case e_away : choice = new PASN_Null(); return TRUE; case e_generic : choice = new H460P_ArrayOf_PresenceDisplay(); return TRUE; } choice = NULL; return FALSE; } PObject * H460P_PresenceState::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_PresenceState::Class()), PInvalidCast); #endif return new H460P_PresenceState(*this); } // // PresenceFeatureGeneric // H460P_PresenceFeatureGeneric::H460P_PresenceFeatureGeneric(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H460P_PresenceFeatureGeneric::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "identifier = " << setprecision(indent) << m_identifier << '\n'; if (HasOptionalField(e_display)) strm << setw(indent+10) << "display = " << setprecision(indent) << m_display << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H460P_PresenceFeatureGeneric::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H460P_PresenceFeatureGeneric), PInvalidCast); #endif const H460P_PresenceFeatureGeneric & other = (const H460P_PresenceFeatureGeneric &)obj; Comparison result; if ((result = m_identifier.Compare(other.m_identifier)) != EqualTo) return result; if ((result = m_display.Compare(other.m_display)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H460P_PresenceFeatureGeneric::GetDataLength() const { PINDEX length = 0; length += m_identifier.GetObjectLength(); if (HasOptionalField(e_display)) length += m_display.GetObjectLength(); return length; } PBoolean H460P_PresenceFeatureGeneric::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_identifier.Decode(strm)) return FALSE; if (HasOptionalField(e_display) && !m_display.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H460P_PresenceFeatureGeneric::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_identifier.Encode(strm); if (HasOptionalField(e_display)) m_display.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H460P_PresenceFeatureGeneric::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_PresenceFeatureGeneric::Class()), PInvalidCast); #endif return new H460P_PresenceFeatureGeneric(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H460P_PresenceFeature[]={ {"audio",0} ,{"video",1} ,{"data",2} ,{"extVideo",3} ,{"generic",4} }; #endif // // PresenceFeature // H460P_PresenceFeature::H460P_PresenceFeature(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H460P_PresenceFeature,5 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H460P_PresenceFeature::operator H460P_PresenceFeatureGeneric &() const #else H460P_PresenceFeature::operator H460P_PresenceFeatureGeneric &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceFeatureGeneric), PInvalidCast); #endif return *(H460P_PresenceFeatureGeneric *)choice; } H460P_PresenceFeature::operator const H460P_PresenceFeatureGeneric &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H460P_PresenceFeatureGeneric), PInvalidCast); #endif return *(H460P_PresenceFeatureGeneric *)choice; } PBoolean H460P_PresenceFeature::CreateObject() { switch (tag) { case e_audio : case e_video : case e_data : case e_extVideo : choice = new PASN_Null(); return TRUE; case e_generic : choice = new H460P_PresenceFeatureGeneric(); return TRUE; } choice = NULL; return FALSE; } PObject * H460P_PresenceFeature::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_PresenceFeature::Class()), PInvalidCast); #endif return new H460P_PresenceFeature(*this); } // // PresenceGeoLocation // H460P_PresenceGeoLocation::H460P_PresenceGeoLocation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 7, TRUE, 0) { } #ifndef PASN_NOPRINTON void H460P_PresenceGeoLocation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_locale)) strm << setw(indent+9) << "locale = " << setprecision(indent) << m_locale << '\n'; if (HasOptionalField(e_region)) strm << setw(indent+9) << "region = " << setprecision(indent) << m_region << '\n'; if (HasOptionalField(e_country)) strm << setw(indent+10) << "country = " << setprecision(indent) << m_country << '\n'; if (HasOptionalField(e_countryCode)) strm << setw(indent+14) << "countryCode = " << setprecision(indent) << m_countryCode << '\n'; if (HasOptionalField(e_latitude)) strm << setw(indent+11) << "latitude = " << setprecision(indent) << m_latitude << '\n'; if (HasOptionalField(e_longitude)) strm << setw(indent+12) << "longitude = " << setprecision(indent) << m_longitude << '\n'; if (HasOptionalField(e_elevation)) strm << setw(indent+12) << "elevation = " << setprecision(indent) << m_elevation << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H460P_PresenceGeoLocation::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H460P_PresenceGeoLocation), PInvalidCast); #endif const H460P_PresenceGeoLocation & other = (const H460P_PresenceGeoLocation &)obj; Comparison result; if ((result = m_locale.Compare(other.m_locale)) != EqualTo) return result; if ((result = m_region.Compare(other.m_region)) != EqualTo) return result; if ((result = m_country.Compare(other.m_country)) != EqualTo) return result; if ((result = m_countryCode.Compare(other.m_countryCode)) != EqualTo) return result; if ((result = m_latitude.Compare(other.m_latitude)) != EqualTo) return result; if ((result = m_longitude.Compare(other.m_longitude)) != EqualTo) return result; if ((result = m_elevation.Compare(other.m_elevation)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H460P_PresenceGeoLocation::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_locale)) length += m_locale.GetObjectLength(); if (HasOptionalField(e_region)) length += m_region.GetObjectLength(); if (HasOptionalField(e_country)) length += m_country.GetObjectLength(); if (HasOptionalField(e_countryCode)) length += m_countryCode.GetObjectLength(); if (HasOptionalField(e_latitude)) length += m_latitude.GetObjectLength(); if (HasOptionalField(e_longitude)) length += m_longitude.GetObjectLength(); if (HasOptionalField(e_elevation)) length += m_elevation.GetObjectLength(); return length; } PBoolean H460P_PresenceGeoLocation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_locale) && !m_locale.Decode(strm)) return FALSE; if (HasOptionalField(e_region) && !m_region.Decode(strm)) return FALSE; if (HasOptionalField(e_country) && !m_country.Decode(strm)) return FALSE; if (HasOptionalField(e_countryCode) && !m_countryCode.Decode(strm)) return FALSE; if (HasOptionalField(e_latitude) && !m_latitude.Decode(strm)) return FALSE; if (HasOptionalField(e_longitude) && !m_longitude.Decode(strm)) return FALSE; if (HasOptionalField(e_elevation) && !m_elevation.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H460P_PresenceGeoLocation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_locale)) m_locale.Encode(strm); if (HasOptionalField(e_region)) m_region.Encode(strm); if (HasOptionalField(e_country)) m_country.Encode(strm); if (HasOptionalField(e_countryCode)) m_countryCode.Encode(strm); if (HasOptionalField(e_latitude)) m_latitude.Encode(strm); if (HasOptionalField(e_longitude)) m_longitude.Encode(strm); if (HasOptionalField(e_elevation)) m_elevation.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H460P_PresenceGeoLocation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_PresenceGeoLocation::Class()), PInvalidCast); #endif return new H460P_PresenceGeoLocation(*this); } // // ArrayOf_PresenceMessage // H460P_ArrayOf_PresenceMessage::H460P_ArrayOf_PresenceMessage(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H460P_ArrayOf_PresenceMessage::CreateObject() const { return new H460P_PresenceMessage; } H460P_PresenceMessage & H460P_ArrayOf_PresenceMessage::operator[](PINDEX i) const { return (H460P_PresenceMessage &)array[i]; } PObject * H460P_ArrayOf_PresenceMessage::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_ArrayOf_PresenceMessage::Class()), PInvalidCast); #endif return new H460P_ArrayOf_PresenceMessage(*this); } // // ArrayOf_AliasAddress // H460P_ArrayOf_AliasAddress::H460P_ArrayOf_AliasAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H460P_ArrayOf_AliasAddress::CreateObject() const { return new H225_AliasAddress; } H225_AliasAddress & H460P_ArrayOf_AliasAddress::operator[](PINDEX i) const { return (H225_AliasAddress &)array[i]; } PObject * H460P_ArrayOf_AliasAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_ArrayOf_AliasAddress::Class()), PInvalidCast); #endif return new H460P_ArrayOf_AliasAddress(*this); } // // ArrayOf_PresenceNotification // H460P_ArrayOf_PresenceNotification::H460P_ArrayOf_PresenceNotification(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H460P_ArrayOf_PresenceNotification::CreateObject() const { return new H460P_PresenceNotification; } H460P_PresenceNotification & H460P_ArrayOf_PresenceNotification::operator[](PINDEX i) const { return (H460P_PresenceNotification &)array[i]; } PObject * H460P_ArrayOf_PresenceNotification::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_ArrayOf_PresenceNotification::Class()), PInvalidCast); #endif return new H460P_ArrayOf_PresenceNotification(*this); } // // ArrayOf_PresenceInstruction // H460P_ArrayOf_PresenceInstruction::H460P_ArrayOf_PresenceInstruction(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H460P_ArrayOf_PresenceInstruction::CreateObject() const { return new H460P_PresenceInstruction; } H460P_PresenceInstruction & H460P_ArrayOf_PresenceInstruction::operator[](PINDEX i) const { return (H460P_PresenceInstruction &)array[i]; } PObject * H460P_ArrayOf_PresenceInstruction::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_ArrayOf_PresenceInstruction::Class()), PInvalidCast); #endif return new H460P_ArrayOf_PresenceInstruction(*this); } // // ArrayOf_PresenceSubscription // H460P_ArrayOf_PresenceSubscription::H460P_ArrayOf_PresenceSubscription(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H460P_ArrayOf_PresenceSubscription::CreateObject() const { return new H460P_PresenceSubscription; } H460P_PresenceSubscription & H460P_ArrayOf_PresenceSubscription::operator[](PINDEX i) const { return (H460P_PresenceSubscription &)array[i]; } PObject * H460P_ArrayOf_PresenceSubscription::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_ArrayOf_PresenceSubscription::Class()), PInvalidCast); #endif return new H460P_ArrayOf_PresenceSubscription(*this); } // // ArrayOf_PresenceIdentifier // H460P_ArrayOf_PresenceIdentifier::H460P_ArrayOf_PresenceIdentifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H460P_ArrayOf_PresenceIdentifier::CreateObject() const { return new H460P_PresenceIdentifier; } H460P_PresenceIdentifier & H460P_ArrayOf_PresenceIdentifier::operator[](PINDEX i) const { return (H460P_PresenceIdentifier &)array[i]; } PObject * H460P_ArrayOf_PresenceIdentifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_ArrayOf_PresenceIdentifier::Class()), PInvalidCast); #endif return new H460P_ArrayOf_PresenceIdentifier(*this); } // // ArrayOf_GenericData // H460P_ArrayOf_GenericData::H460P_ArrayOf_GenericData(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H460P_ArrayOf_GenericData::CreateObject() const { return new H225_GenericData; } H225_GenericData & H460P_ArrayOf_GenericData::operator[](PINDEX i) const { return (H225_GenericData &)array[i]; } PObject * H460P_ArrayOf_GenericData::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_ArrayOf_GenericData::Class()), PInvalidCast); #endif return new H460P_ArrayOf_GenericData(*this); } // // ArrayOf_PresenceDisplay // H460P_ArrayOf_PresenceDisplay::H460P_ArrayOf_PresenceDisplay(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H460P_ArrayOf_PresenceDisplay::CreateObject() const { return new H460P_PresenceDisplay; } H460P_PresenceDisplay & H460P_ArrayOf_PresenceDisplay::operator[](PINDEX i) const { return (H460P_PresenceDisplay &)array[i]; } PObject * H460P_ArrayOf_PresenceDisplay::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_ArrayOf_PresenceDisplay::Class()), PInvalidCast); #endif return new H460P_ArrayOf_PresenceDisplay(*this); } // // ArrayOf_PresenceFeature // H460P_ArrayOf_PresenceFeature::H460P_ArrayOf_PresenceFeature(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H460P_ArrayOf_PresenceFeature::CreateObject() const { return new H460P_PresenceFeature; } H460P_PresenceFeature & H460P_ArrayOf_PresenceFeature::operator[](PINDEX i) const { return (H460P_PresenceFeature &)array[i]; } PObject * H460P_ArrayOf_PresenceFeature::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_ArrayOf_PresenceFeature::Class()), PInvalidCast); #endif return new H460P_ArrayOf_PresenceFeature(*this); } // // PresenceElement // H460P_PresenceElement::H460P_PresenceElement(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H460P_PresenceElement::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "message = " << setprecision(indent) << m_message << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H460P_PresenceElement::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H460P_PresenceElement), PInvalidCast); #endif const H460P_PresenceElement & other = (const H460P_PresenceElement &)obj; Comparison result; if ((result = m_message.Compare(other.m_message)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H460P_PresenceElement::GetDataLength() const { PINDEX length = 0; length += m_message.GetObjectLength(); return length; } PBoolean H460P_PresenceElement::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_message.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H460P_PresenceElement::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_message.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H460P_PresenceElement::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_PresenceElement::Class()), PInvalidCast); #endif return new H460P_PresenceElement(*this); } // // PresenceStatus // H460P_PresenceStatus::H460P_PresenceStatus(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H460P_PresenceStatus::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+8) << "alias = " << setprecision(indent) << m_alias << '\n'; strm << setw(indent+15) << "notification = " << setprecision(indent) << m_notification << '\n'; if (HasOptionalField(e_instruction)) strm << setw(indent+14) << "instruction = " << setprecision(indent) << m_instruction << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H460P_PresenceStatus::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H460P_PresenceStatus), PInvalidCast); #endif const H460P_PresenceStatus & other = (const H460P_PresenceStatus &)obj; Comparison result; if ((result = m_alias.Compare(other.m_alias)) != EqualTo) return result; if ((result = m_notification.Compare(other.m_notification)) != EqualTo) return result; if ((result = m_instruction.Compare(other.m_instruction)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H460P_PresenceStatus::GetDataLength() const { PINDEX length = 0; length += m_alias.GetObjectLength(); length += m_notification.GetObjectLength(); if (HasOptionalField(e_instruction)) length += m_instruction.GetObjectLength(); return length; } PBoolean H460P_PresenceStatus::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_alias.Decode(strm)) return FALSE; if (!m_notification.Decode(strm)) return FALSE; if (HasOptionalField(e_instruction) && !m_instruction.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H460P_PresenceStatus::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_alias.Encode(strm); m_notification.Encode(strm); if (HasOptionalField(e_instruction)) m_instruction.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H460P_PresenceStatus::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_PresenceStatus::Class()), PInvalidCast); #endif return new H460P_PresenceStatus(*this); } // // PresenceInstruct // H460P_PresenceInstruct::H460P_PresenceInstruct(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H460P_PresenceInstruct::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+8) << "alias = " << setprecision(indent) << m_alias << '\n'; strm << setw(indent+14) << "instruction = " << setprecision(indent) << m_instruction << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H460P_PresenceInstruct::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H460P_PresenceInstruct), PInvalidCast); #endif const H460P_PresenceInstruct & other = (const H460P_PresenceInstruct &)obj; Comparison result; if ((result = m_alias.Compare(other.m_alias)) != EqualTo) return result; if ((result = m_instruction.Compare(other.m_instruction)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H460P_PresenceInstruct::GetDataLength() const { PINDEX length = 0; length += m_alias.GetObjectLength(); length += m_instruction.GetObjectLength(); return length; } PBoolean H460P_PresenceInstruct::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_alias.Decode(strm)) return FALSE; if (!m_instruction.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H460P_PresenceInstruct::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_alias.Encode(strm); m_instruction.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H460P_PresenceInstruct::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_PresenceInstruct::Class()), PInvalidCast); #endif return new H460P_PresenceInstruct(*this); } // // PresenceAuthorize // H460P_PresenceAuthorize::H460P_PresenceAuthorize(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H460P_PresenceAuthorize::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+8) << "alias = " << setprecision(indent) << m_alias << '\n'; strm << setw(indent+15) << "subscription = " << setprecision(indent) << m_subscription << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H460P_PresenceAuthorize::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H460P_PresenceAuthorize), PInvalidCast); #endif const H460P_PresenceAuthorize & other = (const H460P_PresenceAuthorize &)obj; Comparison result; if ((result = m_alias.Compare(other.m_alias)) != EqualTo) return result; if ((result = m_subscription.Compare(other.m_subscription)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H460P_PresenceAuthorize::GetDataLength() const { PINDEX length = 0; length += m_alias.GetObjectLength(); length += m_subscription.GetObjectLength(); return length; } PBoolean H460P_PresenceAuthorize::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_alias.Decode(strm)) return FALSE; if (!m_subscription.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H460P_PresenceAuthorize::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_alias.Encode(strm); m_subscription.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H460P_PresenceAuthorize::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_PresenceAuthorize::Class()), PInvalidCast); #endif return new H460P_PresenceAuthorize(*this); } // // PresenceNotify // H460P_PresenceNotify::H460P_PresenceNotify(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H460P_PresenceNotify::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+8) << "alias = " << setprecision(indent) << m_alias << '\n'; strm << setw(indent+15) << "notification = " << setprecision(indent) << m_notification << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H460P_PresenceNotify::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H460P_PresenceNotify), PInvalidCast); #endif const H460P_PresenceNotify & other = (const H460P_PresenceNotify &)obj; Comparison result; if ((result = m_alias.Compare(other.m_alias)) != EqualTo) return result; if ((result = m_notification.Compare(other.m_notification)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H460P_PresenceNotify::GetDataLength() const { PINDEX length = 0; length += m_alias.GetObjectLength(); length += m_notification.GetObjectLength(); return length; } PBoolean H460P_PresenceNotify::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_alias.Decode(strm)) return FALSE; if (!m_notification.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H460P_PresenceNotify::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_alias.Encode(strm); m_notification.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H460P_PresenceNotify::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_PresenceNotify::Class()), PInvalidCast); #endif return new H460P_PresenceNotify(*this); } // // PresenceRequest // H460P_PresenceRequest::H460P_PresenceRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H460P_PresenceRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "subscription = " << setprecision(indent) << m_subscription << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H460P_PresenceRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H460P_PresenceRequest), PInvalidCast); #endif const H460P_PresenceRequest & other = (const H460P_PresenceRequest &)obj; Comparison result; if ((result = m_subscription.Compare(other.m_subscription)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H460P_PresenceRequest::GetDataLength() const { PINDEX length = 0; length += m_subscription.GetObjectLength(); return length; } PBoolean H460P_PresenceRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_subscription.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H460P_PresenceRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_subscription.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H460P_PresenceRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_PresenceRequest::Class()), PInvalidCast); #endif return new H460P_PresenceRequest(*this); } // // PresenceResponse // H460P_PresenceResponse::H460P_PresenceResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H460P_PresenceResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "subscription = " << setprecision(indent) << m_subscription << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H460P_PresenceResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H460P_PresenceResponse), PInvalidCast); #endif const H460P_PresenceResponse & other = (const H460P_PresenceResponse &)obj; Comparison result; if ((result = m_subscription.Compare(other.m_subscription)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H460P_PresenceResponse::GetDataLength() const { PINDEX length = 0; length += m_subscription.GetObjectLength(); return length; } PBoolean H460P_PresenceResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_subscription.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H460P_PresenceResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_subscription.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H460P_PresenceResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_PresenceResponse::Class()), PInvalidCast); #endif return new H460P_PresenceResponse(*this); } // // PresenceAlive // H460P_PresenceAlive::H460P_PresenceAlive(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H460P_PresenceAlive::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "identifier = " << setprecision(indent) << m_identifier << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H460P_PresenceAlive::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H460P_PresenceAlive), PInvalidCast); #endif const H460P_PresenceAlive & other = (const H460P_PresenceAlive &)obj; Comparison result; if ((result = m_identifier.Compare(other.m_identifier)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H460P_PresenceAlive::GetDataLength() const { PINDEX length = 0; length += m_identifier.GetObjectLength(); return length; } PBoolean H460P_PresenceAlive::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_identifier.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H460P_PresenceAlive::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_identifier.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H460P_PresenceAlive::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_PresenceAlive::Class()), PInvalidCast); #endif return new H460P_PresenceAlive(*this); } // // PresenceRemove // H460P_PresenceRemove::H460P_PresenceRemove(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H460P_PresenceRemove::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "identifier = " << setprecision(indent) << m_identifier << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H460P_PresenceRemove::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H460P_PresenceRemove), PInvalidCast); #endif const H460P_PresenceRemove & other = (const H460P_PresenceRemove &)obj; Comparison result; if ((result = m_identifier.Compare(other.m_identifier)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H460P_PresenceRemove::GetDataLength() const { PINDEX length = 0; length += m_identifier.GetObjectLength(); return length; } PBoolean H460P_PresenceRemove::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_identifier.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H460P_PresenceRemove::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_identifier.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H460P_PresenceRemove::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_PresenceRemove::Class()), PInvalidCast); #endif return new H460P_PresenceRemove(*this); } // // PresenceAlert // H460P_PresenceAlert::H460P_PresenceAlert(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H460P_PresenceAlert::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "notification = " << setprecision(indent) << m_notification << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H460P_PresenceAlert::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H460P_PresenceAlert), PInvalidCast); #endif const H460P_PresenceAlert & other = (const H460P_PresenceAlert &)obj; Comparison result; if ((result = m_notification.Compare(other.m_notification)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H460P_PresenceAlert::GetDataLength() const { PINDEX length = 0; length += m_notification.GetObjectLength(); return length; } PBoolean H460P_PresenceAlert::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_notification.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H460P_PresenceAlert::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_notification.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H460P_PresenceAlert::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_PresenceAlert::Class()), PInvalidCast); #endif return new H460P_PresenceAlert(*this); } // // PresenceSubscription // H460P_PresenceSubscription::H460P_PresenceSubscription(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 4, TRUE, 0) { } #ifndef PASN_NOPRINTON void H460P_PresenceSubscription::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "identifier = " << setprecision(indent) << m_identifier << '\n'; strm << setw(indent+12) << "subscribe = " << setprecision(indent) << m_subscribe << '\n'; strm << setw(indent+10) << "aliases = " << setprecision(indent) << m_aliases << '\n'; if (HasOptionalField(e_approved)) strm << setw(indent+11) << "approved = " << setprecision(indent) << m_approved << '\n'; if (HasOptionalField(e_rasAddress)) strm << setw(indent+13) << "rasAddress = " << setprecision(indent) << m_rasAddress << '\n'; if (HasOptionalField(e_timeToLive)) strm << setw(indent+13) << "timeToLive = " << setprecision(indent) << m_timeToLive << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H460P_PresenceSubscription::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H460P_PresenceSubscription), PInvalidCast); #endif const H460P_PresenceSubscription & other = (const H460P_PresenceSubscription &)obj; Comparison result; if ((result = m_identifier.Compare(other.m_identifier)) != EqualTo) return result; if ((result = m_subscribe.Compare(other.m_subscribe)) != EqualTo) return result; if ((result = m_aliases.Compare(other.m_aliases)) != EqualTo) return result; if ((result = m_approved.Compare(other.m_approved)) != EqualTo) return result; if ((result = m_rasAddress.Compare(other.m_rasAddress)) != EqualTo) return result; if ((result = m_timeToLive.Compare(other.m_timeToLive)) != EqualTo) return result; if ((result = m_genericData.Compare(other.m_genericData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H460P_PresenceSubscription::GetDataLength() const { PINDEX length = 0; length += m_identifier.GetObjectLength(); length += m_subscribe.GetObjectLength(); length += m_aliases.GetObjectLength(); if (HasOptionalField(e_approved)) length += m_approved.GetObjectLength(); if (HasOptionalField(e_rasAddress)) length += m_rasAddress.GetObjectLength(); if (HasOptionalField(e_timeToLive)) length += m_timeToLive.GetObjectLength(); if (HasOptionalField(e_genericData)) length += m_genericData.GetObjectLength(); return length; } PBoolean H460P_PresenceSubscription::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_identifier.Decode(strm)) return FALSE; if (!m_subscribe.Decode(strm)) return FALSE; if (!m_aliases.Decode(strm)) return FALSE; if (HasOptionalField(e_approved) && !m_approved.Decode(strm)) return FALSE; if (HasOptionalField(e_rasAddress) && !m_rasAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_timeToLive) && !m_timeToLive.Decode(strm)) return FALSE; if (HasOptionalField(e_genericData) && !m_genericData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H460P_PresenceSubscription::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_identifier.Encode(strm); m_subscribe.Encode(strm); m_aliases.Encode(strm); if (HasOptionalField(e_approved)) m_approved.Encode(strm); if (HasOptionalField(e_rasAddress)) m_rasAddress.Encode(strm); if (HasOptionalField(e_timeToLive)) m_timeToLive.Encode(strm); if (HasOptionalField(e_genericData)) m_genericData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H460P_PresenceSubscription::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_PresenceSubscription::Class()), PInvalidCast); #endif return new H460P_PresenceSubscription(*this); } // // Presentity // H460P_Presentity::H460P_Presentity(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 4, TRUE, 0) { } #ifndef PASN_NOPRINTON void H460P_Presentity::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+8) << "state = " << setprecision(indent) << m_state << '\n'; if (HasOptionalField(e_supportedFeatures)) strm << setw(indent+20) << "supportedFeatures = " << setprecision(indent) << m_supportedFeatures << '\n'; if (HasOptionalField(e_geolocation)) strm << setw(indent+14) << "geolocation = " << setprecision(indent) << m_geolocation << '\n'; if (HasOptionalField(e_display)) strm << setw(indent+10) << "display = " << setprecision(indent) << m_display << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H460P_Presentity::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H460P_Presentity), PInvalidCast); #endif const H460P_Presentity & other = (const H460P_Presentity &)obj; Comparison result; if ((result = m_state.Compare(other.m_state)) != EqualTo) return result; if ((result = m_supportedFeatures.Compare(other.m_supportedFeatures)) != EqualTo) return result; if ((result = m_geolocation.Compare(other.m_geolocation)) != EqualTo) return result; if ((result = m_display.Compare(other.m_display)) != EqualTo) return result; if ((result = m_genericData.Compare(other.m_genericData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H460P_Presentity::GetDataLength() const { PINDEX length = 0; length += m_state.GetObjectLength(); if (HasOptionalField(e_supportedFeatures)) length += m_supportedFeatures.GetObjectLength(); if (HasOptionalField(e_geolocation)) length += m_geolocation.GetObjectLength(); if (HasOptionalField(e_display)) length += m_display.GetObjectLength(); if (HasOptionalField(e_genericData)) length += m_genericData.GetObjectLength(); return length; } PBoolean H460P_Presentity::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_state.Decode(strm)) return FALSE; if (HasOptionalField(e_supportedFeatures) && !m_supportedFeatures.Decode(strm)) return FALSE; if (HasOptionalField(e_geolocation) && !m_geolocation.Decode(strm)) return FALSE; if (HasOptionalField(e_display) && !m_display.Decode(strm)) return FALSE; if (HasOptionalField(e_genericData) && !m_genericData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H460P_Presentity::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_state.Encode(strm); if (HasOptionalField(e_supportedFeatures)) m_supportedFeatures.Encode(strm); if (HasOptionalField(e_geolocation)) m_geolocation.Encode(strm); if (HasOptionalField(e_display)) m_display.Encode(strm); if (HasOptionalField(e_genericData)) m_genericData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H460P_Presentity::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_Presentity::Class()), PInvalidCast); #endif return new H460P_Presentity(*this); } // // PresenceNotification // H460P_PresenceNotification::H460P_PresenceNotification(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H460P_PresenceNotification::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_aliasAddress)) strm << setw(indent+15) << "aliasAddress = " << setprecision(indent) << m_aliasAddress << '\n'; if (HasOptionalField(e_subscribers)) strm << setw(indent+14) << "subscribers = " << setprecision(indent) << m_subscribers << '\n'; strm << setw(indent+13) << "presentity = " << setprecision(indent) << m_presentity << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H460P_PresenceNotification::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H460P_PresenceNotification), PInvalidCast); #endif const H460P_PresenceNotification & other = (const H460P_PresenceNotification &)obj; Comparison result; if ((result = m_aliasAddress.Compare(other.m_aliasAddress)) != EqualTo) return result; if ((result = m_subscribers.Compare(other.m_subscribers)) != EqualTo) return result; if ((result = m_presentity.Compare(other.m_presentity)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H460P_PresenceNotification::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_aliasAddress)) length += m_aliasAddress.GetObjectLength(); if (HasOptionalField(e_subscribers)) length += m_subscribers.GetObjectLength(); length += m_presentity.GetObjectLength(); return length; } PBoolean H460P_PresenceNotification::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_aliasAddress) && !m_aliasAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_subscribers) && !m_subscribers.Decode(strm)) return FALSE; if (!m_presentity.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H460P_PresenceNotification::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_aliasAddress)) m_aliasAddress.Encode(strm); if (HasOptionalField(e_subscribers)) m_subscribers.Encode(strm); m_presentity.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H460P_PresenceNotification::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H460P_PresenceNotification::Class()), PInvalidCast); #endif return new H460P_PresenceNotification(*this); } #endif // if ! H323_DISABLE_H460P // End of H460pres.cxx h323plus/src/h460/h46018_h225.cxx0000644000175000017500000013706211663152255014514 0ustar markmark/* * h460_h225.cxx * * H.460.18 H225 NAT Traversal class. * * h323plus library * * Copyright (c) 2008 ISVO (Asia) Pte. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * Portions of this code were written with the assisance of funding from * triple-IT. http://www.triple-it.nl. * * Contributor(s): ______________________________________. * * $Id: h46018_h225.cxx,v 1.39 2011/11/23 11:10:37 willamowius Exp $ * * */ #include "ptlib.h" #include "openh323buildopts.h" #ifdef H323_H46018 #include #include #include #include #include #include #include #define H46024A_MAX_PROBE_COUNT 10 #define H46024A_PROBE_INTERVAL 150 PCREATE_NAT_PLUGIN(H46019); /////////////////////////////////////////////////////////////////////////////////// // Listening/Keep Alive Thread class H46018TransportThread : public PThread { PCLASSINFO(H46018TransportThread, PThread) public: H46018TransportThread(H323EndPoint & endpoint, H46018Transport * transport); protected: void Main(); PBoolean isConnected; H46018Transport * transport; PTime lastupdate; }; ///////////////////////////////////////////////////////////////////////////// H46018TransportThread::H46018TransportThread(H323EndPoint & ep, H46018Transport * t) : PThread(ep.GetSignallingThreadStackSize(), AutoDeleteThread, NormalPriority,"H46019 Answer:%0x"),transport(t) { isConnected = false; // Start the Thread Resume(); } void H46018TransportThread::Main() { PTRACE(3, "H46018\tStarted Listening Thread"); PBoolean ret = true; while (transport->IsOpen()) { // not close due to shutdown ret = transport->HandleH46018SignallingChannelPDU(this); if (!ret && transport->CloseTransport()) { // Closing down Instruction PTRACE(3, "H46018\tShutting down H46018 Thread"); transport->ConnectionLost(true); break; } } PTRACE(3, "H46018\tTransport Closed"); } /////////////////////////////////////////////////////////////////////////////////////// H46018SignalPDU::H46018SignalPDU(const OpalGloballyUniqueID & callIdentifier) { // Build facility msg q931pdu.BuildFacility(0, FALSE); // Build the UUIE m_h323_uu_pdu.m_h323_message_body.SetTag(H225_H323_UU_PDU_h323_message_body::e_facility); H225_Facility_UUIE & fac = m_h323_uu_pdu.m_h323_message_body; PString version = "0.0.8.2250.0." + PString(H225_PROTOCOL_VERSION); fac.m_protocolIdentifier.SetValue(version); fac.m_reason.SetTag(H225_FacilityReason::e_undefinedReason); fac.IncludeOptionalField(H225_Facility_UUIE::e_callIdentifier); fac.m_callIdentifier.m_guid = callIdentifier; // Put UUIE into user-user of Q931 BuildQ931(); } ////////////////////////////////////////////////////////////////////////////////////// H46018Transport::H46018Transport(H323EndPoint & endpoint, PIPSocket::Address binding) : H323TransportTCP(endpoint, binding) { ReadTimeOut = PMaxTimeInterval; isConnected = false; closeTransport = false; remoteShutDown = false; } H46018Transport::~H46018Transport() { Close(); } PBoolean H46018Transport::HandleH46018SignallingSocket(H323SignalPDU & pdu) { for (;;) { if (!IsOpen()) return false; H323SignalPDU rpdu; if (!rpdu.Read(*this)) { PTRACE(3, "H46018\tSocket Read Failure"); if (GetErrorNumber(PChannel::LastReadError) == 0) { PTRACE(3, "H46018\tRemote SHUT DOWN or Intermediary Shutdown!"); remoteShutDown = true; } return false; } else if (rpdu.GetQ931().GetMessageType() == Q931::SetupMsg) { pdu = rpdu; return true; } else { PTRACE(3, "H46018\tUnknown PDU Received"); return false; } } } PBoolean H46018Transport::HandleH46018SignallingChannelPDU(PThread * thread) { H323SignalPDU pdu; if (!HandleH46018SignallingSocket(pdu)) { if (remoteShutDown) { // Intentional Shutdown? Close(); } return false; } // We are connected isConnected = true; // Process the Tokens unsigned callReference = pdu.GetQ931().GetCallReference(); PString token = endpoint.BuildConnectionToken(*this, callReference, true); H323Connection * connection = endpoint.CreateConnection(callReference, NULL, this, &pdu); if (connection == NULL) { PTRACE(1, "H46018\tEndpoint could not create connection, " << "sending release complete PDU: callRef=" << callReference); Q931 pdu; pdu.BuildReleaseComplete(callReference, true); PBYTEArray rawData; pdu.Encode(rawData); WritePDU(rawData); return true; } PTRACE(3, "H46018\tCreated new connection: " << token); connectionsMutex.Wait(); endpoint.GetConnections().SetAt(token, connection); connectionsMutex.Signal(); connection->AttachSignalChannel(token, this, true); if (connection->HandleSignalPDU(pdu)) { // All subsequent PDU's should wait forever SetReadTimeout(PMaxTimeInterval); connection->HandleSignallingChannel(); } else { connection->ClearCall(H323Connection::EndedByTransportFail); PTRACE(1, "H46018\tSignal channel stopped on first PDU."); } return true; } PBoolean H46018Transport::WritePDU( const PBYTEArray & pdu ) { PWaitAndSignal m(WriteMutex); return H323TransportTCP::WritePDU(pdu); } PBoolean H46018Transport::ReadPDU(PBYTEArray & pdu) { return H323TransportTCP::ReadPDU(pdu); } PBoolean H46018Transport::Connect(const OpalGloballyUniqueID & callIdentifier) { PTRACE(4, "H46018\tConnecting to H.460.18 Server"); if (!H323TransportTCP::Connect()) return false; return InitialPDU(callIdentifier); } void H46018Transport::ConnectionLost(PBoolean established) { if (closeTransport) return; } PBoolean H46018Transport::IsConnectionLost() { return false; } PBoolean H46018Transport::InitialPDU(const OpalGloballyUniqueID & callIdentifier) { PWaitAndSignal mutex(IntMutex); if (!IsOpen()) return false; H46018SignalPDU pdu(callIdentifier); PTRACE(6, "H46018\tCall Facility PDU: " << pdu); PBYTEArray rawData; pdu.GetQ931().Encode(rawData); if (!WritePDU(rawData)) { PTRACE(3, "H46018\tError Writing PDU."); return false; } PTRACE(4, "H46018\tSent PDU Call: " << callIdentifier.AsString() << " awaiting response."); return true; } PBoolean H46018Transport::Close() { PTRACE(4, "H46018\tClosing H46018 NAT channel."); closeTransport = true; return H323TransportTCP::Close(); } PBoolean H46018Transport::IsOpen () const { return H323TransportTCP::IsOpen(); } PBoolean H46018Transport::IsListening() const { if (isConnected) return false; if (h245listener == NULL) return false; return h245listener->IsOpen(); } ///////////////////////////////////////////////////////////////////////////// H46018Handler::H46018Handler(H323EndPoint & ep) : EP(ep) { PTRACE(4, "H46018\tCreating H46018 Handler."); nat = (PNatMethod_H46019 *)EP.GetNatMethods().LoadNatMethod("H46019"); lastCallIdentifer = PString(); m_h46018inOperation = false; if (nat != NULL) { nat->AttachHandler(this); EP.GetNatMethods().AddMethod(nat); } #ifdef H323_H46024A m_h46024a = false; #endif SocketCreateThread = NULL; } H46018Handler::~H46018Handler() { PTRACE(4, "H46018\tClosing H46018 Handler."); EP.GetNatMethods().RemoveMethod("H46019"); } PBoolean H46018Handler::CreateH225Transport(const PASN_OctetString & information) { H46018_IncomingCallIndication callinfo; PPER_Stream raw(information); if (!callinfo.Decode(raw)) { PTRACE(2,"H46018\tUnable to decode incoming call Indication."); return false; } PTRACE(4, "H46018\t" << callinfo ); m_address = H323TransportAddress(callinfo.m_callSignallingAddress); m_callId = OpalGloballyUniqueID(callinfo.m_callID.m_guid); // Fix for Tandberg boxes that send duplicate SCI messages. if (m_callId.AsString() == lastCallIdentifer) { PTRACE(2,"H46018\tDuplicate Call Identifer " << lastCallIdentifer << " Ignoring request!"); return false; } PTRACE(5, "H46018\tCreating H225 Channel"); // We throw the socket creation onto another thread as with UMTS networks it may take several // seconds to actually create the connection and we don't want to wait before signalling back // to the gatekeeper. This also speeds up connection time which is also nice :) - SH SocketCreateThread = PThread::Create(PCREATE_NOTIFIER(SocketThread), 0, PThread::AutoDeleteThread); return true; } void H46018Handler::SocketThread(PThread &, INT) { if (m_callId == PString()) { PTRACE(3, "H46018\tTCP Connect Abort: No Call identifier"); return; } H46018Transport * transport = new H46018Transport(EP, PIPSocket::Address::GetAny(m_address.GetIpVersion())); transport->SetRemoteAddress(m_address); if (transport->Connect(m_callId)) { PTRACE(3, "H46018\tConnected to " << transport->GetRemoteAddress()); new H46018TransportThread(EP, transport); lastCallIdentifer = m_callId.AsString(); } else { PTRACE(3, "H46018\tCALL ABORTED: Failed to TCP Connect to " << transport->GetRemoteAddress()); } m_address = H323TransportAddress(); m_callId = PString(); } void H46018Handler::Enable() { m_h46018inOperation = true; if (nat) nat->SetAvailable(); } PBoolean H46018Handler::IsEnabled() { return m_h46018inOperation; } H323EndPoint * H46018Handler::GetEndPoint() { return &EP; } #ifdef H323_H46019M void H46018Handler::EnableMultiplex(bool enable) { if (nat) nat->EnableMultiplex(enable); } #endif #ifdef H323_H46024A void H46018Handler::H46024ADirect(bool reply, const PString & token) { PWaitAndSignal m(m_h46024aMutex); H323Connection * connection = EP.FindConnectionWithLock(token); if (connection != NULL) { connection->SendH46024AMessage(reply); connection->Unlock(); } } #endif /////////////////////////////////////////////////////////////////////////////////////////// #ifdef H323_H46019M H323Connection::NAT_Sockets PNatMethod_H46019::muxSockets; PBoolean PNatMethod_H46019::multiplex=false; muxSocketMap PNatMethod_H46019::rtpSocketMap; muxSocketMap PNatMethod_H46019::rtcpSocketMap; PBoolean PNatMethod_H46019::muxShutdown; PMutex PNatMethod_H46019::muxMutex; #endif PNatMethod_H46019::PNatMethod_H46019() : available(false), active(true), handler(NULL) #ifdef H323_H46019M , m_readThread(NULL) #endif { } PNatMethod_H46019::~PNatMethod_H46019() { #ifdef H323_H46019M PWaitAndSignal m(muxMutex); if (IsMultiplexed()) { muxShutdown = true; EnableMultiplex(false); m_readThread = NULL; rtpSocketMap.clear(); rtcpSocketMap.clear(); if (muxSockets.rtp) { muxSockets.rtp->Close(); delete muxSockets.rtp; muxSockets.rtp = NULL; } if (muxSockets.rtcp) { muxSockets.rtcp->Close(); delete muxSockets.rtcp; muxSockets.rtcp = NULL; } } #endif } void PNatMethod_H46019::AttachHandler(H46018Handler * _handler) { handler = _handler; if (handler->GetEndPoint() == NULL) return; WORD portPairBase = handler->GetEndPoint()->GetRtpIpPortBase(); WORD portPairMax = handler->GetEndPoint()->GetRtpIpPortMax(); // Initialise // ExternalAddress = 0; pairedPortInfo.basePort = 0; pairedPortInfo.maxPort = 0; pairedPortInfo.currentPort = 0; // Set the Port Pair Information pairedPortInfo.mutex.Wait(); pairedPortInfo.basePort = (WORD)((portPairBase+1)&0xfffe); if (portPairBase == 0) { pairedPortInfo.basePort = 0; pairedPortInfo.maxPort = 0; } else if (portPairMax == 0) pairedPortInfo.maxPort = (WORD)(pairedPortInfo.basePort+99); else if (portPairMax < portPairBase) pairedPortInfo.maxPort = portPairBase; else pairedPortInfo.maxPort = portPairMax; pairedPortInfo.currentPort = pairedPortInfo.basePort; pairedPortInfo.mutex.Signal(); #ifdef H323_H46019M muxPortInfo.basePort = handler->GetEndPoint()->GetMultiplexPort(); muxPortInfo.maxPort = muxPortInfo.basePort+1; muxPortInfo.currentPort = muxPortInfo.basePort-1; #endif available = FALSE; } H46018Handler * PNatMethod_H46019::GetHandler() { return handler; } PBoolean PNatMethod_H46019::GetExternalAddress(PIPSocket::Address & /*externalAddress*/, /// External address of router const PTimeInterval & /* maxAge */ /// Maximum age for caching ) { return FALSE; } PBoolean PNatMethod_H46019::CreateSocketPair(PUDPSocket * & socket1, PUDPSocket * & socket2, const PIPSocket::Address & binding, void * userData ) { if (pairedPortInfo.basePort == 0 || pairedPortInfo.basePort > pairedPortInfo.maxPort) { PTRACE(1, "H46019\tInvalid local UDP port range " << pairedPortInfo.currentPort << '-' << pairedPortInfo.maxPort); return FALSE; } H323Connection::SessionInformation * info = (H323Connection::SessionInformation *)userData; #ifdef H323_H46019M if (info->GetRecvMultiplexID() > 0) { if (!multiplex) { muxSockets.rtp = new H46019MultiplexSocket(true); muxSockets.rtcp = new H46019MultiplexSocket(false); muxPortInfo.currentPort = muxPortInfo.basePort-1; while ((!OpenSocket(*muxSockets.rtp, muxPortInfo, binding)) || (!OpenSocket(*muxSockets.rtcp, muxPortInfo, binding)) || (muxSockets.rtcp->GetPort() != muxSockets.rtp->GetPort() + 1) ) { delete muxSockets.rtp; delete muxSockets.rtcp; muxSockets.rtp = new H46019MultiplexSocket(true); /// Data muxSockets.rtcp = new H46019MultiplexSocket(false); /// Signal } PTRACE(4, "H46019\tMultiplex UDP ports " << muxSockets.rtp->GetPort() << '-' << muxSockets.rtcp->GetPort()); StartMultiplexListener(); // Start Multiplexing Listening thread; EnableMultiplex(true); } socket1 = new H46019UDPSocket(*handler,info,true); /// Data socket2 = new H46019UDPSocket(*handler,info,false); /// Signal PNatMethod_H46019::RegisterSocket(true ,info->GetRecvMultiplexID(), socket1); PNatMethod_H46019::RegisterSocket(false,info->GetRecvMultiplexID(), socket2); } else #endif { socket1 = new H46019UDPSocket(*handler,info,true); /// Data socket2 = new H46019UDPSocket(*handler,info,false); /// Signal /// Make sure we have sequential ports while ((!OpenSocket(*socket1, pairedPortInfo,binding)) || (!OpenSocket(*socket2, pairedPortInfo,binding)) || (socket2->GetPort() != socket1->GetPort() + 1) ) { delete socket1; delete socket2; socket1 = new H46019UDPSocket(*handler,info,true); /// Data socket2 = new H46019UDPSocket(*handler,info,false); /// Signal } PTRACE(5, "H46019\tUDP ports " << socket1->GetPort() << '-' << socket2->GetPort()); } SetConnectionSockets(socket1,socket2,info); return TRUE; } PBoolean PNatMethod_H46019::OpenSocket(PUDPSocket & socket, PortInfo & portInfo, const PIPSocket::Address & binding) const { PWaitAndSignal mutex(portInfo.mutex); WORD startPort = portInfo.currentPort; do { portInfo.currentPort++; if (portInfo.currentPort > portInfo.maxPort) portInfo.currentPort = portInfo.basePort; if (socket.Listen(binding,1, portInfo.currentPort)) { socket.SetReadTimeout(500); return true; } } while (portInfo.currentPort != startPort); PTRACE(2, "H46019\tFailed to bind to local UDP port in range " << portInfo.currentPort << '-' << portInfo.maxPort); return false; } void PNatMethod_H46019::SetConnectionSockets(PUDPSocket * data, PUDPSocket * control, H323Connection::SessionInformation * info) { if (handler->GetEndPoint() == NULL) return; H323Connection * connection = PRemoveConst(H323Connection, info->GetConnection()); if (connection != NULL) { connection->SetRTPNAT(info->GetSessionID(),data,control); connection->H46019Enabled(); // make sure H.460.19 is enabled } } bool PNatMethod_H46019::IsAvailable(const PIPSocket::Address & /*address*/) { return handler->IsEnabled() && active; } void PNatMethod_H46019::SetAvailable() { if (!available) { handler->GetEndPoint()->NATMethodCallBack(GetName(),1,"Available"); available = TRUE; } } #ifdef H323_H46019M void PNatMethod_H46019::EnableMultiplex(bool enable) { multiplex = enable; } PBoolean PNatMethod_H46019::IsMultiplexed() { return multiplex; } PUDPSocket * & PNatMethod_H46019::GetMultiplexSocket(bool rtp) { if (rtp) return (PUDPSocket * &)muxSockets.rtp; else return (PUDPSocket * &)muxSockets.rtcp; } unsigned ResolveSession(muxSocketMap & socMap, unsigned muxID, PBoolean rtp, const PIPSocket::Address addr, WORD port, unsigned & correctMUX) { std::map< unsigned, PUDPSocket*>::const_iterator i; unsigned eraseID = 0; H46019UDPSocket * mapSocket = NULL; if (PNatMethod_H46019::IsMultiplexed()) { // Check the send/receive multiplex is around the wrong way for (i = socMap.begin(); i != socMap.end(); ++i) { if (((H46019UDPSocket *)i->second)->GetSendMultiplexID() == muxID) { mapSocket = (H46019UDPSocket *)i->second; eraseID = i->first; correctMUX = eraseID; break; } } // Due to some disagreement GnuGk send the send multiplex id // If we detect it then swap out the socket map with the receiver mux id if (eraseID > 0) { mapSocket->SetMultiplexID(muxID,true); PNatMethod_H46019::RegisterSocket(rtp,muxID, mapSocket); PNatMethod_H46019::UnregisterSocket(rtp, eraseID); return muxID; } } else { // Check source address PIPSocketAddressAndPort daddr; daddr.SetAddress(addr,port); for (i = socMap.begin(); i != socMap.end(); ++i) { PIPSocketAddressAndPort raddr; i->second->GetPeerAddress(raddr); if (raddr.AsString() == daddr.AsString()) return i->first; } } return 0; } void PNatMethod_H46019::StartMultiplexListener() { if (m_readThread) return; muxShutdown = false; m_readThread = PThread::Create(PCREATE_NOTIFIER(ReadThread), 0, PThread::AutoDeleteThread, PThread::NormalPriority, "GkMonitor:%x"); } void PNatMethod_H46019::ReadThread(PThread &, INT) { PINDEX bufferLen = 2000; RTP_MultiDataFrame buffer(bufferLen); PINDEX len = bufferLen; PIPSocket::Address addr; WORD port=0; H46019MultiplexSocket * socket = NULL; PSocket::SelectList readList; readList += *GetMultiplexSocket(true); //readList += *GetMultiplexSocket(false); -- disabled temporarily SH while (!muxShutdown && PIPSocket::Select(readList) == PChannel::NoError){ if (readList.IsEmpty()) continue; // TimeOut socket = (H46019MultiplexSocket *)&readList.front(); if (socket && socket->ReadFrom(buffer.GetPointer(),len,addr,port) && !muxShutdown) { PTRACE(2,"H46019M\tReading from " << socket->GetLocalAddress()); int actRead = socket->GetLastReadCount(); std::map::const_iterator it; switch (socket->GetMultiplexType()) { case H46019MultiplexSocket::e_rtp: it = rtpSocketMap.find(buffer.GetMultiplexID()); if (it == rtpSocketMap.end()) { unsigned badMUXid = buffer.GetMultiplexID(); PTRACE(2,"H46019M\tReceived RTP packet with unknown MUX ID " << badMUXid << " " << addr << ":" << port); unsigned rightMUXid=0; unsigned detected = ResolveSession(rtpSocketMap,badMUXid, true,addr,port, rightMUXid); if (!detected) continue; it = rtpSocketMap.find(detected); if (it == rtpSocketMap.end()) continue; PTRACE(2,"H46019M\tERROR: Recover Receive Multiplex Session " << rightMUXid << " incorrectly sent as " << badMUXid); } break; case H46019MultiplexSocket::e_rtcp: it = rtcpSocketMap.find(buffer.GetMultiplexID()); if (it == rtcpSocketMap.end()) { PTRACE(2,"H46019M\tReceived RTCP packet with unknown MUX ID " << buffer.GetMultiplexID() << " " << addr << ":" << port); continue; } break; default: PTRACE(2,"H46019M\tUnknown Muxed RTP packet received from " << addr << ":" << port); continue; } ((H46019UDPSocket *)it->second)->WriteMultiplexBuffer(buffer.GetPointer()+4,actRead-4,addr,port); len = bufferLen; } else { if (muxShutdown) continue; switch (socket->GetErrorNumber(PChannel::LastReadError)) { case ECONNRESET : case ECONNREFUSED : PTRACE(2, "H46019M\tUDP Port on remote not ready."); continue; case EMSGSIZE : PTRACE(2, "H46019M\tRead UDP packet too large for buffer of " << len << " bytes."); continue; case EBADF : // Interface went down case EINTR : case EAGAIN : // Shouldn't happen, but it does. continue; } } } m_readThread = NULL; PTRACE(4, "H46019M\tMultiplex Read Shutdown"); } void PNatMethod_H46019::RegisterSocket(bool rtp, unsigned id, PUDPSocket * socket) { if (rtp) rtpSocketMap.insert(pair(id,socket)); else rtcpSocketMap.insert(pair(id,socket)); } void PNatMethod_H46019::UnregisterSocket(bool rtp, unsigned id) { if (rtp) { std::map::iterator it = rtpSocketMap.find(id); if (it != rtpSocketMap.end()) rtpSocketMap.erase(it); } else { std::map::iterator it = rtcpSocketMap.find(id); if (it != rtcpSocketMap.end()) rtcpSocketMap.erase(it); } if (rtp && rtpSocketMap.size() == 0) { muxShutdown = true; if (muxSockets.rtp) { muxSockets.rtp->Close(); delete muxSockets.rtp; muxSockets.rtp = NULL; } if (muxSockets.rtcp) { muxSockets.rtcp->Close(); delete muxSockets.rtcp; muxSockets.rtcp = NULL; } EnableMultiplex(false); } } #endif ///////////////////////////////////////////////////////////////////////////////////////////// #ifdef H323_H46019M H46019MultiplexSocket::H46019MultiplexSocket() : m_subSocket(NULL), m_plexType(e_unknown) { } H46019MultiplexSocket::H46019MultiplexSocket(bool rtp) : m_subSocket(NULL), m_plexType(rtp ? e_rtp : e_rtcp) { } H46019MultiplexSocket::~H46019MultiplexSocket() { Close(); if (m_subSocket) delete m_subSocket; } H46019MultiplexSocket::MuxType H46019MultiplexSocket::GetMultiplexType() const { return m_plexType; } void H46019MultiplexSocket::SetMultiplexType(H46019MultiplexSocket::MuxType type) { m_plexType = type; } PBoolean H46019MultiplexSocket::ReadFrom(void *buf, PINDEX len, Address & addr, WORD & pt) { if (m_subSocket) return m_subSocket->ReadFrom(buf,len,addr,pt); else return PUDPSocket::ReadFrom(buf,len,addr,pt); } PBoolean H46019MultiplexSocket::WriteTo(const void *buf, PINDEX len, const Address & addr, WORD pt) { PWaitAndSignal m(m_mutex); if (m_subSocket) return m_subSocket->WriteTo(buf,len,addr,pt); else return PUDPSocket::WriteTo(buf,len,addr,pt); } PBoolean H46019MultiplexSocket::Close() { if (m_subSocket) return m_subSocket->Close(); return PUDPSocket::Close(); } #endif ///////////////////////////////////////////////////////////////////////////////////////////// H46019UDPSocket::H46019UDPSocket(H46018Handler & _handler, H323Connection::SessionInformation * info, bool _rtpSocket) : m_Handler(_handler), m_Session(info->GetSessionID()), m_Token(info->GetCallToken()), m_CallId(info->GetCallIdentifer()), m_CUI(info->GetCUI()), rtpSocket(_rtpSocket) { keeppayload = 0; keepTTL = 0; keepStartTime = NULL; #ifdef H323_H46019M m_recvMultiplexID = info->GetRecvMultiplexID(); m_sendMultiplexID = 0; m_multiBuffer = 0; m_shutDown = false; #endif #ifdef H323_H46024A m_CUIrem = PString(); m_locAddr = PIPSocket::GetDefaultIpAny(); m_remAddr = PIPSocket::GetDefaultIpAny(); m_detAddr = PIPSocket::GetDefaultIpAny(); m_pendAddr= PIPSocket::GetDefaultIpAny(); m_state = e_notRequired; SSRC = PRandom::Number(); #endif m_altAddr = PIPSocket::GetDefaultIpAny(); m_altPort=0; m_altMuxID=0; #ifdef H323_H46024B m_h46024b = false; #endif } H46019UDPSocket::~H46019UDPSocket() { Close(); Keep.Stop(); delete keepStartTime; #ifdef H323_H46019M m_shutDown = true; if (PNatMethod_H46019::IsMultiplexed()) { PNatMethod_H46019::UnregisterSocket(rtpSocket, m_recvMultiplexID); ClearMultiplexBuffer(); } #endif #ifdef H323_H46024A m_Probe.Stop(); #endif } void H46019UDPSocket::Allocate(const H323TransportAddress & keepalive, unsigned _payload, unsigned _ttl) { PIPSocket::Address ip; WORD port = 0; keepalive.GetIpAndPort(ip,port); if (ip.IsValid() && !ip.IsLoopback() && !ip.IsAny() && port > 0) { keepip = ip; keepport = port; } if (_payload > 0) keeppayload = _payload; if (_ttl > 0) keepTTL = _ttl; PTRACE(4,"H46019UDP\tSetting " << keepip << ":" << keepport << " ping " << keepTTL << " secs."); } void H46019UDPSocket::Activate() { InitialiseKeepAlive(); } void H46019UDPSocket::Activate(const H323TransportAddress & keepalive, unsigned _payload, unsigned _ttl) { Allocate(keepalive,_payload,_ttl); InitialiseKeepAlive(); } void H46019UDPSocket::InitialiseKeepAlive() { PWaitAndSignal m(PingMutex); if (Keep.IsRunning()) { PTRACE(6,"H46019UDP\t" << (rtpSocket ? "RTP" : "RTCP") << " ping already running."); return; } if (keepTTL > 0 && keepip.IsValid() && !keepip.IsLoopback() && !keepip.IsAny()) { keepseqno = 100; // Some arbitrary number keepStartTime = new PTime(); PTRACE(4,"H46019UDP\tStart " << (rtpSocket ? "RTP" : "RTCP") << " pinging " << keepip << ":" << keepport << " every " << keepTTL << " secs."); rtpSocket ? SendRTPPing(keepip,keepport) : SendRTCPPing(); Keep.SetNotifier(PCREATE_NOTIFIER(Ping)); Keep.RunContinuous(keepTTL * 1000); } else { PTRACE(2,"H46019UDP\t" << (rtpSocket ? "RTP" : "RTCP") << " PING NOT Ready " << keepip << ":" << keepport << " - " << keepTTL << " secs."); } } void H46019UDPSocket::Ping(PTimer &, INT) { rtpSocket ? SendRTPPing(keepip,keepport) : SendRTCPPing(); } void H46019UDPSocket::SendRTPPing(const PIPSocket::Address & ip, const WORD & port) { RTP_DataFrame rtp; rtp.SetSequenceNumber(keepseqno); rtp.SetPayloadType((RTP_DataFrame::PayloadTypes)keeppayload); rtp.SetPayloadSize(0); // determining correct timestamp PTime currentTime = PTime(); PTimeInterval timePassed = currentTime - *keepStartTime; rtp.SetTimestamp((DWORD)timePassed.GetMilliSeconds() * 8); rtp.SetMarker(TRUE); if (!WriteTo(rtp.GetPointer(), rtp.GetHeaderSize()+rtp.GetPayloadSize(), ip, port)) { switch (GetErrorNumber()) { case ECONNRESET : case ECONNREFUSED : PTRACE(2, "H46019UDP\t" << ip << ":" << port << " not ready."); break; default: PTRACE(1, "H46019UDP\t" << ip << ":" << port << ", Write error on port (" << GetErrorNumber(PChannel::LastWriteError) << "): " << GetErrorText(PChannel::LastWriteError)); } } else { PTRACE(6, "H46019UDP\tRTP KeepAlive sent: " << ip << ":" << port << " seq: " << keepseqno); keepseqno++; } } void H46019UDPSocket::SendRTCPPing() { RTP_ControlFrame report; report.SetPayloadType(RTP_ControlFrame::e_SenderReport); report.SetPayloadSize(sizeof(RTP_ControlFrame::SenderReport)); if (SendRTCPFrame(report, keepip, keepport)) { PTRACE(6, "H46019UDP\tRTCP KeepAlive sent: " << keepip << ":" << keepport); } } PBoolean H46019UDPSocket::SendRTCPFrame(RTP_ControlFrame & report, const PIPSocket::Address & ip, WORD port) { if (!WriteTo(report.GetPointer(),report.GetSize(), ip, port)) { switch (GetErrorNumber()) { case ECONNRESET : case ECONNREFUSED : PTRACE(2, "H46019UDP\t" << ip << ":" << port << " not ready."); break; default: PTRACE(1, "H46019UDP\t" << ip << ":" << port << ", Write error on port (" << GetErrorNumber(PChannel::LastWriteError) << "): " << GetErrorText(PChannel::LastWriteError)); } return false; } return true; } PBoolean H46019UDPSocket::GetLocalAddress(PIPSocket::Address & addr, WORD & port) { #ifdef H323_H46019M if (PNatMethod_H46019::IsMultiplexed()) { PNatMethod_H46019::GetMultiplexSocket(rtpSocket)->GetLocalAddress(addr, port); return true; } #endif if (PUDPSocket::GetLocalAddress(addr, port)) { #ifdef H323_H46024A m_locAddr = addr; m_locPort = port; #endif return true; } return false; } unsigned H46019UDPSocket::GetPingPayload() { return keeppayload; } void H46019UDPSocket::SetPingPayLoad(unsigned val) { keeppayload = val; } unsigned H46019UDPSocket::GetTTL() { return keepTTL; } void H46019UDPSocket::SetTTL(unsigned val) { keepTTL = val; } #ifdef H323_H46019M void H46019UDPSocket::GetMultiplexAddress(H323TransportAddress & address, unsigned & multiID, PBoolean OLCack) { // Get the local IP/Port of the underlying Multiplexed RTP; if (PNatMethod_H46019::IsMultiplexed()) { Address addr; WORD port; PNatMethod_H46019::GetMultiplexSocket(rtpSocket)->GetLocalAddress(addr,port); address = H323TransportAddress(addr,port); } multiID = m_recvMultiplexID; } unsigned H46019UDPSocket::GetRecvMultiplexID() const { return m_recvMultiplexID; } unsigned H46019UDPSocket::GetSendMultiplexID() const { return m_sendMultiplexID; } void H46019UDPSocket::SetMultiplexID(unsigned id, PBoolean isAck) { if (!m_sendMultiplexID) { PTRACE(3,"H46019\t" << (rtpSocket ? "RTP" : "RTCP") << " MultiplexID for send Session " << m_Session << " set to " << id); m_sendMultiplexID = id; } else { if (id != m_sendMultiplexID) { PTRACE(1,"H46019\tERROR: " << (rtpSocket ? "RTP" : "RTCP") << " MultiplexID OLCack for Send Session " << m_Session << " not match OLC " << id << " was " << m_sendMultiplexID); } else { PTRACE(3,"H46019\t" << (rtpSocket ? "RTP" : "RTCP") << " MultiplexID send Session " << m_Session << " already set to " << id); } } } PBoolean H46019UDPSocket::WriteMultiplexBuffer(const void * buf, PINDEX len, const Address & addr, WORD port) { H46019MultiPacket packet; packet.fromAddr = addr; packet.fromPort = port; packet.frame.SetSize(len); memcpy(packet.frame.GetPointer(), buf, len); m_multiMutex.Wait(); m_multQueue.push(packet); m_multiMutex.Signal(); m_multiBuffer++; return true; } PBoolean H46019UDPSocket::ReadMultiplexBuffer(void * buf, PINDEX & len, Address & addr, WORD & port) { if (m_multiBuffer == 0 || m_multQueue.size() == 0) return false; H46019MultiPacket & packet = m_multQueue.front(); len = packet.frame.GetSize(); memcpy(buf, packet.frame.GetPointer(), len); addr = packet.fromAddr; port = packet.fromPort; m_multiMutex.Wait(); m_multQueue.pop(); m_multiMutex.Signal(); m_multiBuffer--; return true; } void H46019UDPSocket::ClearMultiplexBuffer() { if (m_multiBuffer > 0) { m_multiMutex.Wait(); while (!m_multQueue.empty()) { m_multQueue.pop(); } m_multiMutex.Signal(); } m_multiBuffer = 0; } PBoolean H46019UDPSocket::DoPseudoRead(int & selectStatus) { if (m_recvMultiplexID == 0) return false; PAdaptiveDelay selectBlock; while (rtpSocket && m_multiBuffer == 0) { selectBlock.Delay(2); if (m_shutDown) break; } selectStatus += ((m_multiBuffer > 0) ? (rtpSocket ? -1 : -2) : 0); return rtpSocket; } PBoolean H46019UDPSocket::ReadSocket(void * buf, PINDEX & len, Address & addr, WORD & port) { // TODO: Support for receive side only multiplex...SH if (m_recvMultiplexID == 0) return PUDPSocket::ReadFrom(buf, len, addr, port); else if (ReadMultiplexBuffer(buf, len, addr, port)) { lastReadCount = len; return true; } else return false; } PBoolean H46019UDPSocket::WriteSocket(const void * buf, PINDEX len, const Address & addr, WORD port, unsigned altMux) { unsigned mux = m_sendMultiplexID; if (altMux) mux = m_altMuxID; if (!PNatMethod_H46019::IsMultiplexed() && !mux) // No Multiplex Rec'v or Send return PUDPSocket::WriteTo(buf,len, addr, port); else { #ifdef H323_H46024A if (m_remAddr.IsAny()) { m_remAddr = addr; m_remPort = port; } #endif PUDPSocket * muxSocket = PNatMethod_H46019::GetMultiplexSocket(rtpSocket); if (muxSocket && !mux) // Rec'v Multiplex return muxSocket->WriteTo(buf,len, addr, port); RTP_MultiDataFrame frame(mux,(const BYTE *)buf,len); if (!muxSocket) // Send Multiplex return PUDPSocket::WriteTo(frame.GetPointer(), frame.GetSize(), addr, port); else // Send & Rec'v Multiplexed return muxSocket->WriteTo(frame.GetPointer(), frame.GetSize(), addr, port); } } #endif #ifdef H323_H46024A void H46019UDPSocket::SetProbeState(probe_state newstate) { PWaitAndSignal m(probeMutex); PTRACE(4,"H46024\tChanging state for " << m_Session << " from " << m_state << " to " << newstate); m_state = newstate; } int H46019UDPSocket::GetProbeState() const { PWaitAndSignal m(probeMutex); return m_state; } void H46019UDPSocket::SetAlternateAddresses(const H323TransportAddress & address, const PString & cui, unsigned muxID) { address.GetIpAndPort(m_altAddr,m_altPort); m_altMuxID = muxID; PTRACE(6,"H46024A\ts: " << m_Session << (rtpSocket ? " RTP " : " RTCP ") << "Remote Alt: " << m_altAddr << ":" << m_altPort << " CUI: " << cui); if (!rtpSocket) { m_CUIrem = cui; if (GetProbeState() < e_idle) { SetProbeState(e_idle); StartProbe(); // We Already have a direct connection but we are waiting on the CUI for the reply } else if (GetProbeState() == e_verify_receiver) ProbeReceived(false,m_pendAddr,m_pendPort); } } void H46019UDPSocket::GetAlternateAddresses(H323TransportAddress & address, PString & cui, unsigned & muxID) { address = H323TransportAddress(m_locAddr,m_locPort); #ifdef H323_H46019M muxID = m_recvMultiplexID; #else muxID = 0; #endif if (!rtpSocket) cui = m_CUI; else cui = PString(); if (GetProbeState() < e_idle) SetProbeState(e_initialising); PTRACE(6,"H46024A\ts:" << m_Session << (rtpSocket ? " RTP " : " RTCP ") << " Alt:" << address << " CUI " << cui); } #ifdef H323_H46019M PBoolean H46019UDPSocket::GetPeerAddress(PIPSocketAddressAndPort & addr) { addr.SetAddress(m_remAddr,m_remPort); return true; } #endif PBoolean H46019UDPSocket::IsAlternateAddress(const Address & address,WORD port) { return ((address == m_detAddr) && (port == m_detPort)); } void H46019UDPSocket::StartProbe() { PTRACE(4,"H46024A\ts: " << m_Session << " Starting direct connection probe."); SetProbeState(e_probing); m_probes = 0; m_Probe.SetNotifier(PCREATE_NOTIFIER(Probe)); m_Probe.RunContinuous(H46024A_PROBE_INTERVAL); } void H46019UDPSocket::BuildProbe(RTP_ControlFrame & report, bool probing) { report.SetPayloadType(RTP_ControlFrame::e_ApplDefined); report.SetCount((probing ? 0 : 1)); // SubType Probe report.SetPayloadSize(sizeof(probe_packet)); probe_packet data; data.SSRC = SSRC; data.Length = sizeof(probe_packet); PString id = "24.1"; PBYTEArray bytes(id,id.GetLength(), false); memcpy(&data.name[0], bytes, 4); PMessageDigest::Result bin_digest; PMessageDigestSHA1::Encode(m_CallId.AsString() + m_CUIrem, bin_digest); memcpy(&data.cui[0], bin_digest.GetPointer(), bin_digest.GetSize()); memcpy(report.GetPayloadPtr(),&data,sizeof(probe_packet)); } void H46019UDPSocket::Probe(PTimer &, INT) { m_probes++; if (m_probes > H46024A_MAX_PROBE_COUNT) { m_Probe.Stop(); return; } if (GetProbeState() != e_probing) return; RTP_ControlFrame report; report.SetSize(4+sizeof(probe_packet)); BuildProbe(report, true); if (!WriteTo(report.GetPointer(),report.GetSize(), m_altAddr, m_altPort)) { switch (GetErrorNumber()) { case ECONNRESET : case ECONNREFUSED : PTRACE(2, "H46024A\t" << m_altAddr << ":" << m_altPort << " not ready."); break; default: PTRACE(1, "H46024A\t" << m_altAddr << ":" << m_altPort << ", Write error on port (" << GetErrorNumber(PChannel::LastWriteError) << "): " << GetErrorText(PChannel::LastWriteError)); } } else { PTRACE(6, "H46024A\ts" << m_Session <<" RTCP Probe sent: " << m_altAddr << ":" << m_altPort); } } void H46019UDPSocket::ProbeReceived(bool probe, const PIPSocket::Address & addr, WORD & port) { if (probe) { m_Handler.H46024ADirect(false,m_Token); //< Tell remote to wait for connection } else { RTP_ControlFrame reply; reply.SetSize(4+sizeof(probe_packet)); BuildProbe(reply, false); if (SendRTCPFrame(reply,addr,port)) { PTRACE(4, "H46024A\tRTCP Reply packet sent: " << addr << ":" << port); } } } void H46019UDPSocket::H46024Adirect(bool starter) { if (starter) { // We start the direct channel m_detAddr = m_altAddr; m_detPort = m_altPort; PTRACE(4, "H46024A\ts:" << m_Session << (rtpSocket ? " RTP " : " RTCP ") << "Switching to " << m_detAddr << ":" << m_detPort); SetProbeState(e_direct); } else // We wait for the remote to start channel SetProbeState(e_wait); Keep.Stop(); // Stop the keepAlive Packets } PBoolean H46019UDPSocket::ReadFrom(void * buf, PINDEX len, Address & addr, WORD & port) { bool probe = false; bool success = false; RTP_ControlFrame frame(2048); #ifdef H323_H46019M while (ReadSocket(buf, len, addr, port)) { #else while (PUDPSocket::ReadFrom(buf, len, addr, port)) { #endif /// Set the detected routed remote address (on first packet received) if (m_remAddr.IsAny()) { m_remAddr = addr; m_remPort = port; } #if H323_H46024B if (m_h46024b && addr == m_altAddr && port == m_altPort) { PTRACE(4, "H46024B\ts:" << m_Session << (rtpSocket ? " RTP " : " RTCP ") << "Switching to " << addr << ":" << port << " from " << m_remAddr << ":" << m_remPort); m_detAddr = addr; m_detPort = port; SetProbeState(e_direct); Keep.Stop(); // Stop the keepAlive Packets m_h46024b = false; continue; } #endif /// Check the probe state switch (GetProbeState()) { case e_initialising: // RTCP only case e_idle: // RTCP only case e_probing: // RTCP only case e_verify_receiver: // RTCP only frame.SetSize(len); memcpy(frame.GetPointer(),buf,len); if (ReceivedProbePacket(frame,probe,success)) { if (success) ProbeReceived(probe,addr,port); else { m_pendAddr = addr; m_pendPort = port; } continue; // don't forward on probe packets. } break; case e_wait: if (addr == keepip) {// We got a keepalive ping... Keep.Stop(); // Stop the keepAlive Packets } else if ((addr == m_altAddr) && (port == m_altPort)) { PTRACE(4, "H46024A\ts:" << m_Session << (rtpSocket ? " RTP " : " RTCP ") << "Already sending direct!"); m_detAddr = addr; m_detPort = port; SetProbeState(e_direct); } else if ((addr == m_pendAddr) && (port == m_pendPort)) { PTRACE(4, "H46024A\ts:" << m_Session << (rtpSocket ? " RTP " : " RTCP ") << "Switching to Direct " << addr << ":" << port); m_detAddr = addr; m_detPort = port; SetProbeState(e_direct); } else if ((addr != m_remAddr) || (port != m_remPort)) { PTRACE(4, "H46024A\ts:" << m_Session << (rtpSocket ? " RTP " : " RTCP ") << "Switching to " << addr << ":" << port << " from " << m_remAddr << ":" << m_remPort); m_detAddr = addr; m_detPort = port; SetProbeState(e_direct); } break; case e_direct: default: break; } return true; } return false; } PBoolean H46019UDPSocket::WriteTo(const void * buf, PINDEX len, const Address & addr, WORD port) { if (GetProbeState() == e_direct) #ifdef H323_H46019M return WriteSocket(buf,len, m_detAddr, m_detPort, m_altMuxID); #else return PUDPSocket::WriteTo(buf,len, m_detAddr, m_detPort); #endif else #ifdef H323_H46019M return WriteSocket(buf,len, addr, port); #else return PUDPSocket::WriteTo(buf,len, addr, port); #endif } PBoolean H46019UDPSocket::ReceivedProbePacket(const RTP_ControlFrame & frame, bool & probe, bool & success) { success = false; //Inspect the probe packet if (frame.GetPayloadType() == RTP_ControlFrame::e_ApplDefined) { int cstate = GetProbeState(); if (cstate == e_notRequired) { PTRACE(6, "H46024A\ts:" << m_Session <<" received RTCP probe packet. LOGIC ERROR!"); return true; } if (cstate > e_probing) { PTRACE(6, "H46024A\ts:" << m_Session <<" received RTCP probe packet. IGNORING! Already authenticated."); return true; } probe = (frame.GetCount() > 0); PTRACE(4, "H46024A\ts:" << m_Session <<" RTCP Probe " << (probe ? "Reply" : "Request") << " received."); BYTE * data = frame.GetPayloadPtr(); PBYTEArray bytes(20); memcpy(bytes.GetPointer(),data+12, 20); PMessageDigest::Result bin_digest; PMessageDigestSHA1::Encode(m_CallId.AsString() + m_CUI, bin_digest); PBYTEArray val(bin_digest.GetPointer(),bin_digest.GetSize()); if (bytes == val) { if (probe) // We have a reply SetProbeState(e_verify_sender); else SetProbeState(e_verify_receiver); m_Probe.Stop(); PTRACE(4, "H46024A\ts" << m_Session <<" RTCP Probe " << (probe ? "Reply" : "Request") << " verified."); if (!m_CUIrem.IsEmpty()) success = true; else { PTRACE(4, "H46024A\ts" << m_Session <<" Remote not ready."); } } else { PTRACE(4, "H46024A\ts" << m_Session <<" RTCP Probe " << (probe ? "Reply" : "Request") << " verify FAILURE"); } return true; } else return false; } #endif #ifdef H323_H46024B void H46019UDPSocket::H46024Bdirect(const H323TransportAddress & address, unsigned muxID) { address.GetIpAndPort(m_altAddr,m_altPort); m_altMuxID = muxID; PTRACE(6,"H46024b\ts: " << m_Session << " RTP Remote Alt: " << m_altAddr << ":" << m_altPort << " " << m_altMuxID); m_h46024b = true; // Sending an empty RTP frame to the alternate address // will add a mapping to the router to receive RTP from // the remote SendRTPPing(m_altAddr, m_altPort); } #endif // H323_H46024B #endif // H323_H460 h323plus/src/h460/h4609.cxx0000644000175000017500000007560211015524442013665 0ustar markmark// // h4609.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h4609.h" #endif #include #include "h460/h4609.h" #define new PNEW #if ! H323_DISABLE_H4609 // // EstimatedEnd2EndDelay // H4609_EstimatedEnd2EndDelay::H4609_EstimatedEnd2EndDelay(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); } H4609_EstimatedEnd2EndDelay & H4609_EstimatedEnd2EndDelay::operator=(int v) { SetValue(v); return *this; } H4609_EstimatedEnd2EndDelay & H4609_EstimatedEnd2EndDelay::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4609_EstimatedEnd2EndDelay::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4609_EstimatedEnd2EndDelay::Class()), PInvalidCast); #endif return new H4609_EstimatedEnd2EndDelay(*this); } // // CalculatedJitter // H4609_CalculatedJitter::H4609_CalculatedJitter(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); } H4609_CalculatedJitter & H4609_CalculatedJitter::operator=(int v) { SetValue(v); return *this; } H4609_CalculatedJitter & H4609_CalculatedJitter::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4609_CalculatedJitter::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4609_CalculatedJitter::Class()), PInvalidCast); #endif return new H4609_CalculatedJitter(*this); } // // Extension // H4609_Extension::H4609_Extension(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H4609_Extension::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "extensionId = " << setprecision(indent) << m_extensionId << '\n'; if (HasOptionalField(e_extensionContent)) strm << setw(indent+19) << "extensionContent = " << setprecision(indent) << m_extensionContent << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4609_Extension::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4609_Extension), PInvalidCast); #endif const H4609_Extension & other = (const H4609_Extension &)obj; Comparison result; if ((result = m_extensionId.Compare(other.m_extensionId)) != EqualTo) return result; if ((result = m_extensionContent.Compare(other.m_extensionContent)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4609_Extension::GetDataLength() const { PINDEX length = 0; length += m_extensionId.GetObjectLength(); if (HasOptionalField(e_extensionContent)) length += m_extensionContent.GetObjectLength(); return length; } PBoolean H4609_Extension::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_extensionId.Decode(strm)) return FALSE; if (HasOptionalField(e_extensionContent) && !m_extensionContent.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4609_Extension::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_extensionId.Encode(strm); if (HasOptionalField(e_extensionContent)) m_extensionContent.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4609_Extension::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4609_Extension::Class()), PInvalidCast); #endif return new H4609_Extension(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4609_QosMonitoringReportData[]={ {"periodic",0} ,{"final",1} ,{"interGK",2} }; #endif // // QosMonitoringReportData // H4609_QosMonitoringReportData::H4609_QosMonitoringReportData(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4609_QosMonitoringReportData,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4609_QosMonitoringReportData::operator H4609_PeriodicQoSMonReport &() const #else H4609_QosMonitoringReportData::operator H4609_PeriodicQoSMonReport &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4609_PeriodicQoSMonReport), PInvalidCast); #endif return *(H4609_PeriodicQoSMonReport *)choice; } H4609_QosMonitoringReportData::operator const H4609_PeriodicQoSMonReport &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4609_PeriodicQoSMonReport), PInvalidCast); #endif return *(H4609_PeriodicQoSMonReport *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4609_QosMonitoringReportData::operator H4609_FinalQosMonReport &() const #else H4609_QosMonitoringReportData::operator H4609_FinalQosMonReport &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4609_FinalQosMonReport), PInvalidCast); #endif return *(H4609_FinalQosMonReport *)choice; } H4609_QosMonitoringReportData::operator const H4609_FinalQosMonReport &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4609_FinalQosMonReport), PInvalidCast); #endif return *(H4609_FinalQosMonReport *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4609_QosMonitoringReportData::operator H4609_InterGKQosMonReport &() const #else H4609_QosMonitoringReportData::operator H4609_InterGKQosMonReport &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4609_InterGKQosMonReport), PInvalidCast); #endif return *(H4609_InterGKQosMonReport *)choice; } H4609_QosMonitoringReportData::operator const H4609_InterGKQosMonReport &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4609_InterGKQosMonReport), PInvalidCast); #endif return *(H4609_InterGKQosMonReport *)choice; } PBoolean H4609_QosMonitoringReportData::CreateObject() { switch (tag) { case e_periodic : choice = new H4609_PeriodicQoSMonReport(); return TRUE; case e_final : choice = new H4609_FinalQosMonReport(); return TRUE; case e_interGK : choice = new H4609_InterGKQosMonReport(); return TRUE; } choice = NULL; return FALSE; } PObject * H4609_QosMonitoringReportData::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4609_QosMonitoringReportData::Class()), PInvalidCast); #endif return new H4609_QosMonitoringReportData(*this); } // // RTCPMeasures_mediaSenderMeasures // H4609_RTCPMeasures_mediaSenderMeasures::H4609_RTCPMeasures_mediaSenderMeasures(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H4609_RTCPMeasures_mediaSenderMeasures::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_worstEstimatedEnd2EndDelay)) strm << setw(indent+29) << "worstEstimatedEnd2EndDelay = " << setprecision(indent) << m_worstEstimatedEnd2EndDelay << '\n'; if (HasOptionalField(e_meanEstimatedEnd2EndDelay)) strm << setw(indent+28) << "meanEstimatedEnd2EndDelay = " << setprecision(indent) << m_meanEstimatedEnd2EndDelay << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4609_RTCPMeasures_mediaSenderMeasures::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4609_RTCPMeasures_mediaSenderMeasures), PInvalidCast); #endif const H4609_RTCPMeasures_mediaSenderMeasures & other = (const H4609_RTCPMeasures_mediaSenderMeasures &)obj; Comparison result; if ((result = m_worstEstimatedEnd2EndDelay.Compare(other.m_worstEstimatedEnd2EndDelay)) != EqualTo) return result; if ((result = m_meanEstimatedEnd2EndDelay.Compare(other.m_meanEstimatedEnd2EndDelay)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4609_RTCPMeasures_mediaSenderMeasures::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_worstEstimatedEnd2EndDelay)) length += m_worstEstimatedEnd2EndDelay.GetObjectLength(); if (HasOptionalField(e_meanEstimatedEnd2EndDelay)) length += m_meanEstimatedEnd2EndDelay.GetObjectLength(); return length; } PBoolean H4609_RTCPMeasures_mediaSenderMeasures::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_worstEstimatedEnd2EndDelay) && !m_worstEstimatedEnd2EndDelay.Decode(strm)) return FALSE; if (HasOptionalField(e_meanEstimatedEnd2EndDelay) && !m_meanEstimatedEnd2EndDelay.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4609_RTCPMeasures_mediaSenderMeasures::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_worstEstimatedEnd2EndDelay)) m_worstEstimatedEnd2EndDelay.Encode(strm); if (HasOptionalField(e_meanEstimatedEnd2EndDelay)) m_meanEstimatedEnd2EndDelay.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4609_RTCPMeasures_mediaSenderMeasures::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4609_RTCPMeasures_mediaSenderMeasures::Class()), PInvalidCast); #endif return new H4609_RTCPMeasures_mediaSenderMeasures(*this); } // // RTCPMeasures_mediaReceiverMeasures // H4609_RTCPMeasures_mediaReceiverMeasures::H4609_RTCPMeasures_mediaReceiverMeasures(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 6, TRUE, 0) { m_cumulativeNumberOfPacketsLost.SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); m_packetLostRate.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); m_fractionLostRate.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H4609_RTCPMeasures_mediaReceiverMeasures::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_cumulativeNumberOfPacketsLost)) strm << setw(indent+32) << "cumulativeNumberOfPacketsLost = " << setprecision(indent) << m_cumulativeNumberOfPacketsLost << '\n'; if (HasOptionalField(e_packetLostRate)) strm << setw(indent+17) << "packetLostRate = " << setprecision(indent) << m_packetLostRate << '\n'; if (HasOptionalField(e_worstJitter)) strm << setw(indent+14) << "worstJitter = " << setprecision(indent) << m_worstJitter << '\n'; if (HasOptionalField(e_estimatedThroughput)) strm << setw(indent+22) << "estimatedThroughput = " << setprecision(indent) << m_estimatedThroughput << '\n'; if (HasOptionalField(e_fractionLostRate)) strm << setw(indent+19) << "fractionLostRate = " << setprecision(indent) << m_fractionLostRate << '\n'; if (HasOptionalField(e_meanJitter)) strm << setw(indent+13) << "meanJitter = " << setprecision(indent) << m_meanJitter << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4609_RTCPMeasures_mediaReceiverMeasures::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4609_RTCPMeasures_mediaReceiverMeasures), PInvalidCast); #endif const H4609_RTCPMeasures_mediaReceiverMeasures & other = (const H4609_RTCPMeasures_mediaReceiverMeasures &)obj; Comparison result; if ((result = m_cumulativeNumberOfPacketsLost.Compare(other.m_cumulativeNumberOfPacketsLost)) != EqualTo) return result; if ((result = m_packetLostRate.Compare(other.m_packetLostRate)) != EqualTo) return result; if ((result = m_worstJitter.Compare(other.m_worstJitter)) != EqualTo) return result; if ((result = m_estimatedThroughput.Compare(other.m_estimatedThroughput)) != EqualTo) return result; if ((result = m_fractionLostRate.Compare(other.m_fractionLostRate)) != EqualTo) return result; if ((result = m_meanJitter.Compare(other.m_meanJitter)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4609_RTCPMeasures_mediaReceiverMeasures::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_cumulativeNumberOfPacketsLost)) length += m_cumulativeNumberOfPacketsLost.GetObjectLength(); if (HasOptionalField(e_packetLostRate)) length += m_packetLostRate.GetObjectLength(); if (HasOptionalField(e_worstJitter)) length += m_worstJitter.GetObjectLength(); if (HasOptionalField(e_estimatedThroughput)) length += m_estimatedThroughput.GetObjectLength(); if (HasOptionalField(e_fractionLostRate)) length += m_fractionLostRate.GetObjectLength(); if (HasOptionalField(e_meanJitter)) length += m_meanJitter.GetObjectLength(); return length; } PBoolean H4609_RTCPMeasures_mediaReceiverMeasures::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_cumulativeNumberOfPacketsLost) && !m_cumulativeNumberOfPacketsLost.Decode(strm)) return FALSE; if (HasOptionalField(e_packetLostRate) && !m_packetLostRate.Decode(strm)) return FALSE; if (HasOptionalField(e_worstJitter) && !m_worstJitter.Decode(strm)) return FALSE; if (HasOptionalField(e_estimatedThroughput) && !m_estimatedThroughput.Decode(strm)) return FALSE; if (HasOptionalField(e_fractionLostRate) && !m_fractionLostRate.Decode(strm)) return FALSE; if (HasOptionalField(e_meanJitter) && !m_meanJitter.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4609_RTCPMeasures_mediaReceiverMeasures::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_cumulativeNumberOfPacketsLost)) m_cumulativeNumberOfPacketsLost.Encode(strm); if (HasOptionalField(e_packetLostRate)) m_packetLostRate.Encode(strm); if (HasOptionalField(e_worstJitter)) m_worstJitter.Encode(strm); if (HasOptionalField(e_estimatedThroughput)) m_estimatedThroughput.Encode(strm); if (HasOptionalField(e_fractionLostRate)) m_fractionLostRate.Encode(strm); if (HasOptionalField(e_meanJitter)) m_meanJitter.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4609_RTCPMeasures_mediaReceiverMeasures::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4609_RTCPMeasures_mediaReceiverMeasures::Class()), PInvalidCast); #endif return new H4609_RTCPMeasures_mediaReceiverMeasures(*this); } // // ArrayOf_Extension // H4609_ArrayOf_Extension::H4609_ArrayOf_Extension(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H4609_ArrayOf_Extension::CreateObject() const { return new H4609_Extension; } H4609_Extension & H4609_ArrayOf_Extension::operator[](PINDEX i) const { return (H4609_Extension &)array[i]; } PObject * H4609_ArrayOf_Extension::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4609_ArrayOf_Extension::Class()), PInvalidCast); #endif return new H4609_ArrayOf_Extension(*this); } // // ArrayOf_RTCPMeasures // H4609_ArrayOf_RTCPMeasures::H4609_ArrayOf_RTCPMeasures(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H4609_ArrayOf_RTCPMeasures::CreateObject() const { return new H4609_RTCPMeasures; } H4609_RTCPMeasures & H4609_ArrayOf_RTCPMeasures::operator[](PINDEX i) const { return (H4609_RTCPMeasures &)array[i]; } PObject * H4609_ArrayOf_RTCPMeasures::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4609_ArrayOf_RTCPMeasures::Class()), PInvalidCast); #endif return new H4609_ArrayOf_RTCPMeasures(*this); } // // ArrayOf_PerCallQoSReport // H4609_ArrayOf_PerCallQoSReport::H4609_ArrayOf_PerCallQoSReport(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H4609_ArrayOf_PerCallQoSReport::CreateObject() const { return new H4609_PerCallQoSReport; } H4609_PerCallQoSReport & H4609_ArrayOf_PerCallQoSReport::operator[](PINDEX i) const { return (H4609_PerCallQoSReport &)array[i]; } PObject * H4609_ArrayOf_PerCallQoSReport::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4609_ArrayOf_PerCallQoSReport::Class()), PInvalidCast); #endif return new H4609_ArrayOf_PerCallQoSReport(*this); } // // RTCPMeasures // H4609_RTCPMeasures::H4609_RTCPMeasures(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 4, TRUE, 0) { m_sessionId.SetConstraints(PASN_Object::FixedConstraint, 1, 255); } #ifndef PASN_NOPRINTON void H4609_RTCPMeasures::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "rtpAddress = " << setprecision(indent) << m_rtpAddress << '\n'; strm << setw(indent+14) << "rtcpAddress = " << setprecision(indent) << m_rtcpAddress << '\n'; strm << setw(indent+12) << "sessionId = " << setprecision(indent) << m_sessionId << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_mediaSenderMeasures)) strm << setw(indent+22) << "mediaSenderMeasures = " << setprecision(indent) << m_mediaSenderMeasures << '\n'; if (HasOptionalField(e_mediaReceiverMeasures)) strm << setw(indent+24) << "mediaReceiverMeasures = " << setprecision(indent) << m_mediaReceiverMeasures << '\n'; if (HasOptionalField(e_extensions)) strm << setw(indent+13) << "extensions = " << setprecision(indent) << m_extensions << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4609_RTCPMeasures::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4609_RTCPMeasures), PInvalidCast); #endif const H4609_RTCPMeasures & other = (const H4609_RTCPMeasures &)obj; Comparison result; if ((result = m_rtpAddress.Compare(other.m_rtpAddress)) != EqualTo) return result; if ((result = m_rtcpAddress.Compare(other.m_rtcpAddress)) != EqualTo) return result; if ((result = m_sessionId.Compare(other.m_sessionId)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_mediaSenderMeasures.Compare(other.m_mediaSenderMeasures)) != EqualTo) return result; if ((result = m_mediaReceiverMeasures.Compare(other.m_mediaReceiverMeasures)) != EqualTo) return result; if ((result = m_extensions.Compare(other.m_extensions)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4609_RTCPMeasures::GetDataLength() const { PINDEX length = 0; length += m_rtpAddress.GetObjectLength(); length += m_rtcpAddress.GetObjectLength(); length += m_sessionId.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); if (HasOptionalField(e_mediaSenderMeasures)) length += m_mediaSenderMeasures.GetObjectLength(); if (HasOptionalField(e_mediaReceiverMeasures)) length += m_mediaReceiverMeasures.GetObjectLength(); if (HasOptionalField(e_extensions)) length += m_extensions.GetObjectLength(); return length; } PBoolean H4609_RTCPMeasures::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_rtpAddress.Decode(strm)) return FALSE; if (!m_rtcpAddress.Decode(strm)) return FALSE; if (!m_sessionId.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (HasOptionalField(e_mediaSenderMeasures) && !m_mediaSenderMeasures.Decode(strm)) return FALSE; if (HasOptionalField(e_mediaReceiverMeasures) && !m_mediaReceiverMeasures.Decode(strm)) return FALSE; if (HasOptionalField(e_extensions) && !m_extensions.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4609_RTCPMeasures::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_rtpAddress.Encode(strm); m_rtcpAddress.Encode(strm); m_sessionId.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); if (HasOptionalField(e_mediaSenderMeasures)) m_mediaSenderMeasures.Encode(strm); if (HasOptionalField(e_mediaReceiverMeasures)) m_mediaReceiverMeasures.Encode(strm); if (HasOptionalField(e_extensions)) m_extensions.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4609_RTCPMeasures::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4609_RTCPMeasures::Class()), PInvalidCast); #endif return new H4609_RTCPMeasures(*this); } // // PerCallQoSReport // H4609_PerCallQoSReport::H4609_PerCallQoSReport(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { } #ifndef PASN_NOPRINTON void H4609_PerCallQoSReport::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent+21) << "callReferenceValue = " << setprecision(indent) << m_callReferenceValue << '\n'; strm << setw(indent+15) << "conferenceID = " << setprecision(indent) << m_conferenceID << '\n'; strm << setw(indent+17) << "callIdentifier = " << setprecision(indent) << m_callIdentifier << '\n'; if (HasOptionalField(e_mediaChannelsQoS)) strm << setw(indent+19) << "mediaChannelsQoS = " << setprecision(indent) << m_mediaChannelsQoS << '\n'; if (HasOptionalField(e_extensions)) strm << setw(indent+13) << "extensions = " << setprecision(indent) << m_extensions << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4609_PerCallQoSReport::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4609_PerCallQoSReport), PInvalidCast); #endif const H4609_PerCallQoSReport & other = (const H4609_PerCallQoSReport &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_callReferenceValue.Compare(other.m_callReferenceValue)) != EqualTo) return result; if ((result = m_conferenceID.Compare(other.m_conferenceID)) != EqualTo) return result; if ((result = m_callIdentifier.Compare(other.m_callIdentifier)) != EqualTo) return result; if ((result = m_mediaChannelsQoS.Compare(other.m_mediaChannelsQoS)) != EqualTo) return result; if ((result = m_extensions.Compare(other.m_extensions)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4609_PerCallQoSReport::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); length += m_callReferenceValue.GetObjectLength(); length += m_conferenceID.GetObjectLength(); length += m_callIdentifier.GetObjectLength(); if (HasOptionalField(e_mediaChannelsQoS)) length += m_mediaChannelsQoS.GetObjectLength(); if (HasOptionalField(e_extensions)) length += m_extensions.GetObjectLength(); return length; } PBoolean H4609_PerCallQoSReport::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!m_callReferenceValue.Decode(strm)) return FALSE; if (!m_conferenceID.Decode(strm)) return FALSE; if (!m_callIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_mediaChannelsQoS) && !m_mediaChannelsQoS.Decode(strm)) return FALSE; if (HasOptionalField(e_extensions) && !m_extensions.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4609_PerCallQoSReport::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); m_callReferenceValue.Encode(strm); m_conferenceID.Encode(strm); m_callIdentifier.Encode(strm); if (HasOptionalField(e_mediaChannelsQoS)) m_mediaChannelsQoS.Encode(strm); if (HasOptionalField(e_extensions)) m_extensions.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4609_PerCallQoSReport::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4609_PerCallQoSReport::Class()), PInvalidCast); #endif return new H4609_PerCallQoSReport(*this); } // // PeriodicQoSMonReport // H4609_PeriodicQoSMonReport::H4609_PeriodicQoSMonReport(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H4609_PeriodicQoSMonReport::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "perCallInfo = " << setprecision(indent) << m_perCallInfo << '\n'; if (HasOptionalField(e_extensions)) strm << setw(indent+13) << "extensions = " << setprecision(indent) << m_extensions << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4609_PeriodicQoSMonReport::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4609_PeriodicQoSMonReport), PInvalidCast); #endif const H4609_PeriodicQoSMonReport & other = (const H4609_PeriodicQoSMonReport &)obj; Comparison result; if ((result = m_perCallInfo.Compare(other.m_perCallInfo)) != EqualTo) return result; if ((result = m_extensions.Compare(other.m_extensions)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4609_PeriodicQoSMonReport::GetDataLength() const { PINDEX length = 0; length += m_perCallInfo.GetObjectLength(); if (HasOptionalField(e_extensions)) length += m_extensions.GetObjectLength(); return length; } PBoolean H4609_PeriodicQoSMonReport::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_perCallInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_extensions) && !m_extensions.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4609_PeriodicQoSMonReport::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_perCallInfo.Encode(strm); if (HasOptionalField(e_extensions)) m_extensions.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4609_PeriodicQoSMonReport::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4609_PeriodicQoSMonReport::Class()), PInvalidCast); #endif return new H4609_PeriodicQoSMonReport(*this); } // // FinalQosMonReport // H4609_FinalQosMonReport::H4609_FinalQosMonReport(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H4609_FinalQosMonReport::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "mediaInfo = " << setprecision(indent) << m_mediaInfo << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_extensions)) strm << setw(indent+13) << "extensions = " << setprecision(indent) << m_extensions << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4609_FinalQosMonReport::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4609_FinalQosMonReport), PInvalidCast); #endif const H4609_FinalQosMonReport & other = (const H4609_FinalQosMonReport &)obj; Comparison result; if ((result = m_mediaInfo.Compare(other.m_mediaInfo)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_extensions.Compare(other.m_extensions)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4609_FinalQosMonReport::GetDataLength() const { PINDEX length = 0; length += m_mediaInfo.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); if (HasOptionalField(e_extensions)) length += m_extensions.GetObjectLength(); return length; } PBoolean H4609_FinalQosMonReport::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_mediaInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (HasOptionalField(e_extensions) && !m_extensions.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4609_FinalQosMonReport::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_mediaInfo.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); if (HasOptionalField(e_extensions)) m_extensions.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4609_FinalQosMonReport::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4609_FinalQosMonReport::Class()), PInvalidCast); #endif return new H4609_FinalQosMonReport(*this); } // // InterGKQosMonReport // H4609_InterGKQosMonReport::H4609_InterGKQosMonReport(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H4609_InterGKQosMonReport::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "mediaInfo = " << setprecision(indent) << m_mediaInfo << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_extensions)) strm << setw(indent+13) << "extensions = " << setprecision(indent) << m_extensions << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4609_InterGKQosMonReport::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4609_InterGKQosMonReport), PInvalidCast); #endif const H4609_InterGKQosMonReport & other = (const H4609_InterGKQosMonReport &)obj; Comparison result; if ((result = m_mediaInfo.Compare(other.m_mediaInfo)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_extensions.Compare(other.m_extensions)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4609_InterGKQosMonReport::GetDataLength() const { PINDEX length = 0; length += m_mediaInfo.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); if (HasOptionalField(e_extensions)) length += m_extensions.GetObjectLength(); return length; } PBoolean H4609_InterGKQosMonReport::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_mediaInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (HasOptionalField(e_extensions) && !m_extensions.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4609_InterGKQosMonReport::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_mediaInfo.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); if (HasOptionalField(e_extensions)) m_extensions.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4609_InterGKQosMonReport::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4609_InterGKQosMonReport::Class()), PInvalidCast); #endif return new H4609_InterGKQosMonReport(*this); } #endif // if ! H323_DISABLE_H4609 // End of h4609.cxx h323plus/src/h460/h46019.cxx0000644000175000017500000001207111015524441013734 0ustar markmark// // h46019.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h46019.h" #endif #include #include "h460/h46019.h" #define new PNEW #if ! H323_DISABLE_H46019 // // TraversalParameters // H46019_TraversalParameters::H46019_TraversalParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 6, TRUE, 0) { m_multiplexID.SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); m_keepAlivePayloadType.SetConstraints(PASN_Object::FixedConstraint, 0, 127); } #ifndef PASN_NOPRINTON void H46019_TraversalParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_multiplexedMediaChannel)) strm << setw(indent+26) << "multiplexedMediaChannel = " << setprecision(indent) << m_multiplexedMediaChannel << '\n'; if (HasOptionalField(e_multiplexedMediaControlChannel)) strm << setw(indent+33) << "multiplexedMediaControlChannel = " << setprecision(indent) << m_multiplexedMediaControlChannel << '\n'; if (HasOptionalField(e_multiplexID)) strm << setw(indent+14) << "multiplexID = " << setprecision(indent) << m_multiplexID << '\n'; if (HasOptionalField(e_keepAliveChannel)) strm << setw(indent+19) << "keepAliveChannel = " << setprecision(indent) << m_keepAliveChannel << '\n'; if (HasOptionalField(e_keepAlivePayloadType)) strm << setw(indent+23) << "keepAlivePayloadType = " << setprecision(indent) << m_keepAlivePayloadType << '\n'; if (HasOptionalField(e_keepAliveInterval)) strm << setw(indent+20) << "keepAliveInterval = " << setprecision(indent) << m_keepAliveInterval << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H46019_TraversalParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H46019_TraversalParameters), PInvalidCast); #endif const H46019_TraversalParameters & other = (const H46019_TraversalParameters &)obj; Comparison result; if ((result = m_multiplexedMediaChannel.Compare(other.m_multiplexedMediaChannel)) != EqualTo) return result; if ((result = m_multiplexedMediaControlChannel.Compare(other.m_multiplexedMediaControlChannel)) != EqualTo) return result; if ((result = m_multiplexID.Compare(other.m_multiplexID)) != EqualTo) return result; if ((result = m_keepAliveChannel.Compare(other.m_keepAliveChannel)) != EqualTo) return result; if ((result = m_keepAlivePayloadType.Compare(other.m_keepAlivePayloadType)) != EqualTo) return result; if ((result = m_keepAliveInterval.Compare(other.m_keepAliveInterval)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H46019_TraversalParameters::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_multiplexedMediaChannel)) length += m_multiplexedMediaChannel.GetObjectLength(); if (HasOptionalField(e_multiplexedMediaControlChannel)) length += m_multiplexedMediaControlChannel.GetObjectLength(); if (HasOptionalField(e_multiplexID)) length += m_multiplexID.GetObjectLength(); if (HasOptionalField(e_keepAliveChannel)) length += m_keepAliveChannel.GetObjectLength(); if (HasOptionalField(e_keepAlivePayloadType)) length += m_keepAlivePayloadType.GetObjectLength(); if (HasOptionalField(e_keepAliveInterval)) length += m_keepAliveInterval.GetObjectLength(); return length; } PBoolean H46019_TraversalParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_multiplexedMediaChannel) && !m_multiplexedMediaChannel.Decode(strm)) return FALSE; if (HasOptionalField(e_multiplexedMediaControlChannel) && !m_multiplexedMediaControlChannel.Decode(strm)) return FALSE; if (HasOptionalField(e_multiplexID) && !m_multiplexID.Decode(strm)) return FALSE; if (HasOptionalField(e_keepAliveChannel) && !m_keepAliveChannel.Decode(strm)) return FALSE; if (HasOptionalField(e_keepAlivePayloadType) && !m_keepAlivePayloadType.Decode(strm)) return FALSE; if (HasOptionalField(e_keepAliveInterval) && !m_keepAliveInterval.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H46019_TraversalParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_multiplexedMediaChannel)) m_multiplexedMediaChannel.Encode(strm); if (HasOptionalField(e_multiplexedMediaControlChannel)) m_multiplexedMediaControlChannel.Encode(strm); if (HasOptionalField(e_multiplexID)) m_multiplexID.Encode(strm); if (HasOptionalField(e_keepAliveChannel)) m_keepAliveChannel.Encode(strm); if (HasOptionalField(e_keepAlivePayloadType)) m_keepAlivePayloadType.Encode(strm); if (HasOptionalField(e_keepAliveInterval)) m_keepAliveInterval.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H46019_TraversalParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H46019_TraversalParameters::Class()), PInvalidCast); #endif return new H46019_TraversalParameters(*this); } #endif // if ! H323_DISABLE_H46019 // End of h46019.cxx h323plus/src/h460/h460_std23.cxx0000644000175000017500000005614011653741600014614 0ustar markmark/* H460_std23.cxx * * Copyright (c) 2009 ISVO (Asia) Pte Ltd. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is derived from and used in conjunction with the * H323Plus Project (www.h323plus.org/) * * The Initial Developer of the Original Code is ISVO (Asia) Pte Ltd. * * * Contributor(s): ______________________________________. * * $Id: h460_std23.cxx,v 1.19 2011/11/01 10:01:36 shorne Exp $ * */ #include #include #ifdef H323_H46023 #include "h460/h460_std23.h" #include #include #include #ifdef H323_H46018 #include #endif #ifdef H323_H46019M #include #endif #ifdef H323_UPnP #include "h460/upnpcp.h" #endif #if _WIN32 #pragma message("H.460.23/.24 Enabled. Contact consulting@h323plus.org for licensing terms.") #else #warning("H.460.23/.24 Enabled. Contact consulting@h323plus.org for licensing terms.") #endif #ifdef _MSC_VER #pragma warning(disable : 4239) #endif // H.460.23 NAT Detection Feature #define remoteNATOID 1 // bool if endpoint has remote NAT support #define AnnexAOID 2 // bool if endpoint supports H.460.24 Annex A #define localNATOID 3 // bool if endpoint is NATed #define NATDetRASOID 4 // Detected RAS H225_TransportAddress #define STUNServOID 5 // H225_TransportAddress of STUN Server #define NATTypeOID 6 // integer 8 Endpoint NAT Type #define AnnexBOID 7 // bool if endpoint supports H.460.24 Annex B // H.460.24 P2Pnat Feature #define NATProxyOID 1 // PBoolean if gatekeeper will proxy #define remoteMastOID 2 // PBoolean if remote endpoint can assist local endpoint directly #define mustProxyOID 3 // PBoolean if gatekeeper must proxy to reach local endpoint #define calledIsNatOID 4 // PBoolean if local endpoint is behind a NAT/FW #define NatRemoteTypeOID 5 // integer 8 reported NAT type #define apparentSourceOID 6 // H225_TransportAddress of apparent source address of endpoint #define SupAnnexAOID 7 // PBoolean if local endpoint supports H.460.24 Annex A #define NATInstOID 8 // integer 8 Instruction on how NAT is to be Traversed #define SupAnnexBOID 9 // bool if endpoint supports H.460.24 Annex B ////////////////////////////////////////////////////////////////////// PCREATE_NAT_PLUGIN(H46024); PNatMethod_H46024::PNatMethod_H46024() : PThread(1000, NoAutoDeleteThread, LowPriority ,"H.460.24") { natType = PSTUNClient::UnknownNat; isAvailable = false; isActive = false; feat = NULL; } PNatMethod_H46024::~PNatMethod_H46024() { natType = PSTUNClient::UnknownNat; } void PNatMethod_H46024::Start(const PString & server,H460_FeatureStd23 * _feat) { feat = _feat; H323EndPoint * ep = feat->GetEndPoint(); SetServer(server); SetPortRanges(ep->GetRtpIpPortBase(), ep->GetRtpIpPortMax(), ep->GetRtpIpPortBase(), ep->GetRtpIpPortMax()); Resume(); } PSTUNClient::NatTypes PNatMethod_H46024::NATTest() { PRandom rand; WORD testport = (WORD)rand.Generate(singlePortInfo.basePort , singlePortInfo.maxPort); PSTUNClient::NatTypes testtype; singlePortInfo.currentPort = testport; testtype = GetNatType(true); //PTRACE(4,"Std23\tSTUN Test Port " << singlePortInfo.currentPort << " result: " << testtype); -BUG in PTLIB v2.11 SH return testtype; } int recheckTime = 300000; // 5 minutes void PNatMethod_H46024::Main() { while (natType == PSTUNClient::UnknownNat || natType == PSTUNClient::ConeNat) { PSTUNClient::NatTypes testtype = NATTest(); if (natType != testtype) { natType = testtype; PIPSocket::Address extIP; GetExternalAddress(extIP); feat->GetEndPoint()->NATMethodCallBack(GetName(),2,natType); feat->OnNATTypeDetection(natType, extIP); } if (natType == PSTUNClient::ConeNat) { isAvailable = true; PProcess::Sleep(recheckTime); } else { isAvailable = false; } } } bool PNatMethod_H46024::IsAvailable(const PIPSocket::Address & /*binding*/) { if (!isActive) return false; return isAvailable; } void PNatMethod_H46024::SetAvailable() { feat->GetEndPoint()->NATMethodCallBack(GetName(),1,"Available"); isAvailable = true; } void PNatMethod_H46024::Activate(bool act) { isActive = act; } PSTUNClient::NatTypes PNatMethod_H46024::GetNATType() { return natType; } PBoolean PNatMethod_H46024::CreateSocketPair(PUDPSocket * & socket1, PUDPSocket * & socket2, const PIPSocket::Address & binding, void * userData ) { #ifdef H323_H46019M H323Connection::SessionInformation * info = (H323Connection::SessionInformation *)userData; PNatMethod_H46019 * handler = (PNatMethod_H46019 *)feat->GetEndPoint()->GetNatMethods().GetMethodByName("H46019"); if (handler && info->GetRecvMultiplexID() > 0) { if (!handler->IsMultiplexed()) { H46019MultiplexSocket * & muxSocket1 = (H46019MultiplexSocket * &)handler->GetMultiplexSocket(true); H46019MultiplexSocket * & muxSocket2 = (H46019MultiplexSocket * &)handler->GetMultiplexSocket(false); muxSocket1 = new H46019MultiplexSocket(true); muxSocket2 = new H46019MultiplexSocket(false); pairedPortInfo.basePort = feat->GetEndPoint()->GetMultiplexPort(); pairedPortInfo.maxPort = pairedPortInfo.basePort+1; pairedPortInfo.currentPort = pairedPortInfo.basePort-1; if (!PSTUNClient::CreateSocketPair(muxSocket1->GetSubSocket(), muxSocket2->GetSubSocket(), binding)) return false; handler->StartMultiplexListener(); // Start Multiplexing Listening thread; handler->EnableMultiplex(true); } socket1 = new H46019UDPSocket(*handler->GetHandler(),info,true); /// Data socket2 = new H46019UDPSocket(*handler->GetHandler(),info,false); /// Signal PNatMethod_H46019::RegisterSocket(true ,info->GetRecvMultiplexID(), socket1); PNatMethod_H46019::RegisterSocket(false,info->GetRecvMultiplexID(), socket2); return true; } else #endif { #if (PTLIB_VER > 260) pairedPortInfo.currentPort = RandomPortPair(pairedPortInfo.basePort-1,pairedPortInfo.maxPort-2); #endif return PSTUNClient::CreateSocketPair(socket1,socket2,binding); } } ////////////////////////////////////////////////////////////////////// H460_FEATURE(Std23); H460_FeatureStd23::H460_FeatureStd23() : H460_FeatureStd(23) { PTRACE(6,"Std23\tInstance Created"); FeatureCategory = FeatureSupported; EP = NULL; alg = false; isavailable = true; isEnabled = false; natType = PSTUNClient::UnknownNat; externalIP = PIPSocket::GetDefaultIpAny(); useAlternate = 0; natNotify = false; } H460_FeatureStd23::~H460_FeatureStd23() { } void H460_FeatureStd23::AttachEndPoint(H323EndPoint * _ep) { EP = _ep; isEnabled = EP->H46023IsEnabled(); } PBoolean H460_FeatureStd23::OnSendGatekeeperRequest(H225_FeatureDescriptor & pdu) { if (!isEnabled) return false; // Ignore if already manually using STUN isavailable = (EP->GetSTUN() == NULL); if (!isavailable) return FALSE; H460_FeatureStd feat = H460_FeatureStd(23); pdu = feat; return TRUE; } PBoolean H460_FeatureStd23::OnSendRegistrationRequest(H225_FeatureDescriptor & pdu) { if (!isEnabled) return false; // Ignore if already manually using STUN if (isavailable) isavailable = (EP->GetSTUN() == NULL); if (!isavailable) return FALSE; // Build Message H460_FeatureStd feat = H460_FeatureStd(23); if ((EP->GetGatekeeper() == NULL) || (!EP->GetGatekeeper()->IsRegistered())) { // First time registering // We always support remote feat.Add(remoteNATOID,H460_FeatureContent(true)); #ifdef H323_H46024A feat.Add(AnnexAOID,H460_FeatureContent(true)); #endif #ifdef H323_H46024B feat.Add(AnnexBOID,H460_FeatureContent(true)); #endif } else { if (alg) { // We should be disabling H.460.23/.24 support but // we will disable H.460.18/.19 instead :) and say we have no NAT.. feat.Add(NATTypeOID,H460_FeatureContent(1,8)); feat.Add(remoteNATOID,H460_FeatureContent(false)); isavailable = false; alg = false; } else { if (natNotify || AlternateNATMethod()) { feat.Add(NATTypeOID,H460_FeatureContent(natType,8)); natNotify = false; } } } pdu = feat; return true; } void H460_FeatureStd23::OnReceiveGatekeeperConfirm(const H225_FeatureDescriptor & /*pdu*/) { isEnabled = true; } void H460_FeatureStd23::OnReceiveRegistrationConfirm(const H225_FeatureDescriptor & pdu) { isEnabled = true; H460_FeatureStd & feat = (H460_FeatureStd &)pdu; PBoolean NATdetect = false; if (feat.Contains(localNATOID)) NATdetect = feat.Value(localNATOID); if (feat.Contains(STUNServOID)) { H323TransportAddress addr = feat.Value(STUNServOID); StartSTUNTest(addr.Mid(3)); } if (feat.Contains(NATDetRASOID)) { H323TransportAddress addr = feat.Value(NATDetRASOID); PIPSocket::Address ip; addr.GetIpAddress(ip); if (DetectALG(ip)) { // if we have an ALG then to be on the safe side // disable .23/.24 so that the ALG has more chance // of behaving properly... alg = true; DelayedReRegistration(); } } } #ifdef H323_UPnP void H460_FeatureStd23::InitialiseUPnP() { PTRACE(4,"Std23\tStarting Alternate UPnP"); PNatMethod_UPnP * natMethod = (PNatMethod_UPnP *)EP->GetNatMethods().LoadNatMethod("UPnP"); if (natMethod) { natMethod->AttachEndPoint(EP); EP->GetNatMethods().AddMethod(natMethod); } } #endif void H460_FeatureStd23::OnNATTypeDetection(PSTUNClient::NatTypes type, const PIPSocket::Address & ExtIP) { if (natType == type) return; externalIP = ExtIP; if (natType == PSTUNClient::UnknownNat) { PTRACE(4,"Std23\tSTUN Test Result: " << type << " forcing reregistration."); #ifdef H323_UPnP if (type > PSTUNClient::ConeNat) InitialiseUPnP(); #endif natType = type; // first time detection } else { PTRACE(2,"Std23\tBAD NAT Detected: Was " << natType << " Now " << type << " Disabling H.460.23/.24"); natType = PSTUNClient::UnknownNat; // Leopard changed it spots (disable H.460.23/.24) } natNotify = true; EP->ForceGatekeeperReRegistration(); } bool H460_FeatureStd23::DetectALG(const PIPSocket::Address & detectAddress) { #if P_HAS_IPV6 // Again horrible code should be able to get interface listing for a given protocol - SH PBoolean ipv6IPv4Discover = false; if (detectAddress.GetVersion() == 4 && PIPSocket::GetDefaultIpAddressFamily() == AF_INET6) { PIPSocket::SetDefaultIpAddressFamilyV4(); ipv6IPv4Discover = true; } #endif bool found = true; PIPSocket::InterfaceTable if_table; if (!PIPSocket::GetInterfaceTable(if_table)) { PTRACE(1, "Std23\tERROR: Can't get interface table"); found = false; } else { for (PINDEX i=0; i< if_table.GetSize(); i++) { if (detectAddress == if_table[i].GetAddress()) { PTRACE(4, "Std23\tNo Intermediary device detected between EP and GK"); found = false; break; } } } #if P_HAS_IPV6 if (ipv6IPv4Discover) PIPSocket::SetDefaultIpAddressFamilyV6(); #endif if (found) { PTRACE(4, "Std23\tWARNING: Intermediary device detected!"); EP->NATMethodCallBack("ALG",1,"Available"); return true; } return false; } void H460_FeatureStd23::StartSTUNTest(const PString & server) { PString s; PStringList SRVs; PStringList x = server.Tokenise(":"); PString number = "h323:user@" + x[0]; if (PDNS::LookupSRV(number,"_stun._udp.",SRVs)) s = SRVs[0]; else s = server; // Remove any previous NAT methods. EP->GetNatMethods().RemoveMethod("H46024"); natType = PSTUNClient::UnknownNat; PNatMethod_H46024 * xnat = (PNatMethod_H46024 *)EP->GetNatMethods().LoadNatMethod("H46024"); xnat->Start(s,this); EP->GetNatMethods().AddMethod(xnat); } bool H460_FeatureStd23::IsAvailable() { return isavailable; } void H460_FeatureStd23::DelayedReRegistration() { RegThread = PThread::Create(PCREATE_NOTIFIER(RegMethod), 0, PThread::AutoDeleteThread, PThread::NormalPriority, "regmeth23"); } void H460_FeatureStd23::RegMethod(PThread &, INT) { PProcess::Sleep(1000); EP->ForceGatekeeperReRegistration(); // We have an ALG so notify the gatekeeper } bool H460_FeatureStd23::AlternateNATMethod() { #ifdef H323_UPnP if (natType <= PSTUNClient::ConeNat || useAlternate > 0) return false; PNatList & natlist = EP->GetNatMethods().GetNATList(); for (PINDEX i=0; i< natlist.GetSize(); i++) { if (natlist[i].GetName() == "UPnP" && natlist[i].GetRTPSupport() == PSTUNClient::RTPSupported) { PIPSocket::Address extIP; natlist[i].GetExternalAddress(extIP); if (extIP.IsAny() || !extIP.IsValid() || extIP == externalIP) { PTRACE(4,"H46023\tUPnP Change NAT from " << natType << " to " << PSTUNClient::ConeNat); natType = PSTUNClient::ConeNat; useAlternate = 1; EP->NATMethodCallBack(natlist[i].GetName(),1,"Available"); return true; } else { PTRACE(4,"H46023\tUPnP Unavailable subNAT STUN: " << externalIP << " UPnP " << extIP); useAlternate = 2; } } } #endif return false; } bool H460_FeatureStd23::UseAlternate() { return (useAlternate == 1); } /////////////////////////////////////////////////////////////////// H460_FEATURE(Std24); H460_FeatureStd24::H460_FeatureStd24() : H460_FeatureStd(24) { PTRACE(6,"Std24\tInstance Created"); EP = NULL; CON = NULL; natconfig = H460_FeatureStd24::e_unknown; FeatureCategory = FeatureSupported; isEnabled = false; useAlternate = false; } H460_FeatureStd24::~H460_FeatureStd24() { } void H460_FeatureStd24::AttachEndPoint(H323EndPoint * _ep) { EP = _ep; // We only enable IF the gatekeeper supports H.460.23 H460_FeatureSet * gkfeat = EP->GetGatekeeperFeatures(); if (gkfeat && gkfeat->HasFeature(23)) { H460_FeatureStd23 * feat = (H460_FeatureStd23 *)gkfeat->GetFeature(23); isEnabled = feat->IsAvailable(); useAlternate = feat->UseAlternate(); } else { PTRACE(4,"Std24\tH.460.24 disabled as H.460.23 is disabled!"); isEnabled = false; } } void H460_FeatureStd24::AttachConnection(H323Connection * _conn) { CON = _conn; } PBoolean H460_FeatureStd24::OnSendAdmissionRequest(H225_FeatureDescriptor & pdu) { // Ignore if already not enabled or manually using STUN if (!isEnabled) return FALSE; PWaitAndSignal m(h460mute); // Build Message PTRACE(6,"Std24\tSending ARQ "); H460_FeatureStd feat = H460_FeatureStd(24); if (natconfig != e_unknown) { feat.Add(NATInstOID,H460_FeatureContent((unsigned)natconfig,8)); } pdu = feat; return TRUE; } void H460_FeatureStd24::OnReceiveAdmissionConfirm(const H225_FeatureDescriptor & pdu) { H460_FeatureStd & feat = (H460_FeatureStd &)pdu; if (feat.Contains(NATInstOID)) { PTRACE(6,"Std24\tReading ACF"); unsigned NATinst = feat.Value(NATInstOID); natconfig = (NatInstruct)NATinst; HandleNATInstruction(natconfig); } } void H460_FeatureStd24::OnReceiveAdmissionReject(const H225_FeatureDescriptor & pdu) { PTRACE(6,"Std24\tARJ Received"); HandleNATInstruction(H460_FeatureStd24::e_natFailure); } PBoolean H460_FeatureStd24::OnSendSetup_UUIE(H225_FeatureDescriptor & pdu) { // Ignore if already not enabled or manually using STUN if (!isEnabled) return FALSE; PTRACE(6,"Std24\tSend Setup"); if (natconfig == H460_FeatureStd24::e_unknown) return FALSE; H460_FeatureStd feat = H460_FeatureStd(24); int remoteconfig; switch (natconfig) { case H460_FeatureStd24::e_noassist: remoteconfig = H460_FeatureStd24::e_noassist; break; case H460_FeatureStd24::e_localMaster: remoteconfig = H460_FeatureStd24::e_remoteMaster; break; case H460_FeatureStd24::e_remoteMaster: remoteconfig = H460_FeatureStd24::e_localMaster; break; case H460_FeatureStd24::e_localProxy: remoteconfig = H460_FeatureStd24::e_remoteProxy; break; case H460_FeatureStd24::e_remoteProxy: remoteconfig = H460_FeatureStd24::e_localProxy; break; default: remoteconfig = natconfig; } feat.Add(NATInstOID,H460_FeatureContent(remoteconfig,8)); pdu = feat; return TRUE; } void H460_FeatureStd24::OnReceiveSetup_UUIE(const H225_FeatureDescriptor & pdu) { PWaitAndSignal m(h460mute); H460_FeatureStd & feat = (H460_FeatureStd &)pdu; if (feat.Contains(NATInstOID)) { PTRACE(6,"Std24\tReceive Setup"); unsigned NATinst = feat.Value(NATInstOID); natconfig = (NatInstruct)NATinst; HandleNATInstruction(natconfig); } } void H460_FeatureStd24::HandleNATInstruction(NatInstruct _config) { PTRACE(4,"Std24\tNAT Instruction Received: " << _config); switch (_config) { case H460_FeatureStd24::e_localMaster: PTRACE(4,"Std24\tLocal NAT Support: H.460.24 ENABLED"); CON->SetRemoteNAT(); SetNATMethods(e_enable); break; case H460_FeatureStd24::e_remoteMaster: PTRACE(4,"Std24\tRemote NAT Support: ALL NAT DISABLED"); SetNATMethods(e_disable); break; case H460_FeatureStd24::e_remoteProxy: PTRACE(4,"Std24\tRemote Proxy Support: H.460.24 DISABLED"); SetNATMethods(e_default); break; case H460_FeatureStd24::e_localProxy: PTRACE(4,"Std24\tCall Local Proxy: H.460.24 DISABLED"); SetNATMethods(e_default); break; #ifdef H323_H46024A case H460_FeatureStd24::e_natAnnexA: PTRACE(4,"Std24\tSame NAT: H.460.24 AnnexA ENABLED"); CON->H46024AEnabled(); SetNATMethods(e_AnnexA); break; #endif #ifdef H323_H46024B case H460_FeatureStd24::e_natAnnexB: PTRACE(4,"Std24\tSame NAT: H.460.24 AnnexA ENABLED"); CON->H46024BEnabled(); SetNATMethods(e_AnnexB); break; #endif case H460_FeatureStd24::e_natFailure: PTRACE(4,"Std24\tCall Failure Detected"); EP->FeatureCallBack(GetFeatureName()[0],1,"Call Failure"); break; case H460_FeatureStd24::e_noassist: PTRACE(4,"Std24\tNAT Call direct"); default: PTRACE(4,"Std24\tNo Assist: H.460.24 DISABLED."); CON->DisableNATSupport(); SetNATMethods(e_default); break; } } void H460_FeatureStd24::SetH46019State(bool state) { #ifdef H323_H46018 if (CON->GetFeatureSet()->HasFeature(19)) { H460_Feature * feat = CON->GetFeatureSet()->GetFeature(19); PTRACE(4,"H46024\t" << (state ? "En" : "Dis") << "abling H.460.19 support for call"); ((H460_FeatureStd19 *)feat)->SetAvailable(state); } #endif } void H460_FeatureStd24::SetNATMethods(H46024NAT state) { PNatList & natlist = EP->GetNatMethods().GetNATList(); if ((state == H460_FeatureStd24::e_default) || (state == H460_FeatureStd24::e_AnnexA) || (state == H460_FeatureStd24::e_AnnexB)) SetH46019State(true); else SetH46019State(false); for (PINDEX i=0; i< natlist.GetSize(); i++) { switch (state) { case H460_FeatureStd24::e_AnnexA: // To do Annex A Implementation. case H460_FeatureStd24::e_AnnexB: // To do Annex B Implementation. case H460_FeatureStd24::e_default: if (natlist[i].GetName() == "H46024") natlist[i].Activate(false); else natlist[i].Activate(true); break; case H460_FeatureStd24::e_enable: if (natlist[i].GetName() == "H46024" && !useAlternate) natlist[i].Activate(true); else if (natlist[i].GetName() == "UPnP" && useAlternate) natlist[i].Activate(true); else natlist[i].Activate(false); break; case H460_FeatureStd24::e_disable: natlist[i].Activate(false); break; default: break; } } } PString H460_FeatureStd24::GetNATStrategyString(NatInstruct method) { static const char * const Names[10] = { "Unknown Strategy", "No Assistance", "Local Master", "Remote Master", "Local Proxy", "Remote Proxy", "Full Proxy", "AnnexA SameNAT", "AnnexB NAToffload", "Call Failure!" }; if (method < 10) return Names[method]; return psprintf("", method); } #ifdef _MSC_VER #pragma warning(default : 4239) #endif #endif // Win32_WCE h323plus/src/h460/h460p.cxx0000644000175000017500000013166711637212573013771 0ustar markmark/* * h460p.cxx * * H460 Presence class. * * h323plus library * * Copyright (c) 2009 ISVO (Asia) Pte. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * Contributor(s): ______________________________________. * * $Id: h460p.cxx,v 1.9 2011/09/23 23:25:47 shorne Exp $ * */ #include #include #include "h460/h460p.h" #ifdef H323_H460 static struct { unsigned msgid; int preStatus; int preInstruct; int preAuthorize; int preNotify; int preRequest; int preResponse; int preAlive; int preRemove; int preAlert; } RASMessage_attributes[] = { // st ins aut not req res alv rem alt { H225_RasMessage::e_gatekeeperRequest,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_gatekeeperConfirm,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_gatekeeperReject,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_registrationRequest,1,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_registrationConfirm,0,1,0,0,0,0,0,0,0}, { H225_RasMessage::e_registrationReject,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_unregistrationRequest,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_unregistrationConfirm,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_unregistrationReject,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_admissionRequest,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_admissionConfirm,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_admissionReject,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_bandwidthRequest,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_bandwidthConfirm,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_bandwidthReject,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_disengageRequest,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_disengageConfirm,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_disengageReject,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_locationRequest,0,0,0,0,1,1,1,1,1}, { H225_RasMessage::e_locationConfirm,0,0,0,0,0,2,0,2,0}, { H225_RasMessage::e_locationReject,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_infoRequest,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_infoRequestResponse,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_nonStandardMessage,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_unknownMessageResponse,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_requestInProgress,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_resourcesAvailableIndicate,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_resourcesAvailableConfirm,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_infoRequestAck,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_infoRequestNak,0,0,0,0,0,0,0,0,0}, { H225_RasMessage::e_serviceControlIndication,0,1,1,1,0,0,0,0,0}, { H225_RasMessage::e_serviceControlResponse,0,0,0,0,0,0,0,0,0} }; static struct { unsigned id; int notification; int subscription; int instruction; int identifier; int cryptoTokens; } PresenceMessage_attributes[] = { //messageId Notification Subscription Instruction Identifier Crypto/Tokens { H460P_PresenceMessage::e_presenceStatus,1,0,2,0,0}, { H460P_PresenceMessage::e_presenceInstruct,0,0,1,0,0}, { H460P_PresenceMessage::e_presenceAuthorize,0,1,0,0,0}, { H460P_PresenceMessage::e_presenceNotify,1,0,0,0,0}, { H460P_PresenceMessage::e_presenceRequest,0,1,0,0,3}, { H460P_PresenceMessage::e_presenceResponse,0,1,0,0,2}, { H460P_PresenceMessage::e_presenceAlive,0,0,0,1,0}, { H460P_PresenceMessage::e_presenceRemove,0,0,0,1,0}, { H460P_PresenceMessage::e_presenceAlert,1,0,0,0,0} }; // 0 - not used 1 - mandatory 2 - optional 3 - recommended // Presence message abbreviations const char *PresName[] = { "Status", "Instruct", "Authorize", "Notify", "Request", "Response", "Alive", "Remove", "Alert", "NotRecognized" // for new messages }; const unsigned MaxPresTag = H460P_PresenceMessage::e_presenceAlert; /////////////////////////////////////////////////////////////////// struct H323PresenceMessage { H460P_PresenceMessage m_recvPDU; H323PresenceHandler * m_handler; unsigned GetTag() const { return m_recvPDU.GetTag(); } const char *GetTagName() const; }; const char *H323PresenceMessage::GetTagName() const { return (GetTag() <= MaxPresTag) ? PresName[GetTag()] : PresName[MaxPresTag+1]; } /////////////////////////////////////////////////////////////////// class H323PresenceBase { public: H323PresenceBase(const H323PresenceMessage & m); H323PresenceBase(); virtual ~H323PresenceBase() {}; virtual bool Process(); protected: bool ReadNotification(const H460P_ArrayOf_PresenceNotification & notify, const H225_AliasAddress & addr); bool ReadSubscription(const H460P_ArrayOf_PresenceSubscription & subscription, const H225_AliasAddress & addr); bool ReadInstruction(const H460P_ArrayOf_PresenceInstruction & instruction, const H225_AliasAddress & addr); bool ReadNotification(const H460P_ArrayOf_PresenceNotification & notify, H225_TransportAddress * ip = NULL); bool ReadSubscription(const H460P_ArrayOf_PresenceSubscription & subscription, H225_TransportAddress * ip = NULL); bool ReadIdentifier(const H460P_ArrayOf_PresenceIdentifier & identifier, H225_TransportAddress * ip = NULL); virtual bool HandleNotification(bool /*opt*/) { return false; } virtual bool HandleSubscription(bool /*opt*/) { return false; } virtual bool HandleInstruction(bool /*opt*/) { return false; } virtual bool HandleIdentifier(bool /*opt*/) { return false; } virtual bool HandleCryptoTokens(bool /*opt*/) { return false; } unsigned tag; H323PresenceHandler * handler; }; H323PresenceBase::H323PresenceBase() : tag(100), handler(NULL) { } H323PresenceBase::H323PresenceBase(const H323PresenceMessage & m) : tag(m.GetTag()), handler(m.m_handler) { } bool H323PresenceBase::Process() { if (tag > MaxPresTag) { PTRACE(2,"PRESENCE\tReceived unrecognised Presence Message!"); return false; } bool success = false; if (PresenceMessage_attributes[tag].notification > 0) success |= HandleNotification((PresenceMessage_attributes[tag].notification >1)); if (PresenceMessage_attributes[tag].subscription > 0) success |= HandleSubscription((PresenceMessage_attributes[tag].subscription >1)); if (PresenceMessage_attributes[tag].instruction > 0) success |= HandleInstruction((PresenceMessage_attributes[tag].instruction >1)); if (PresenceMessage_attributes[tag].identifier > 0) success |= HandleIdentifier((PresenceMessage_attributes[tag].identifier >1)); if (PresenceMessage_attributes[tag].cryptoTokens > 0) success |= HandleCryptoTokens((PresenceMessage_attributes[tag].cryptoTokens >1)); return success; } bool H323PresenceBase::ReadNotification(const H460P_ArrayOf_PresenceNotification & notify, const H225_AliasAddress & addr) { for (PINDEX i = 0; i < notify.GetSize(); i++) handler->OnNotification((H323PresenceHandler::MsgType)tag, notify[i],addr); return true; } bool H323PresenceBase::ReadSubscription(const H460P_ArrayOf_PresenceSubscription & subscription, const H225_AliasAddress & addr) { for (PINDEX i = 0; i < subscription.GetSize(); i++) handler->OnSubscription((H323PresenceHandler::MsgType)tag, subscription[i],addr); return true; } bool H323PresenceBase::ReadInstruction(const H460P_ArrayOf_PresenceInstruction & instruction, const H225_AliasAddress & addr) { handler->OnInstructions((H323PresenceHandler::MsgType)tag, instruction,addr); return true; } bool H323PresenceBase::ReadNotification(const H460P_ArrayOf_PresenceNotification & notify, H225_TransportAddress * ip) { if (ip == NULL) return false; for (PINDEX i = 0; i < notify.GetSize(); i++) handler->OnNotification((H323PresenceHandler::MsgType)tag, notify[i],*ip); return true; } bool H323PresenceBase::ReadSubscription(const H460P_ArrayOf_PresenceSubscription & subscription, H225_TransportAddress * ip) { if (ip == NULL) return false; for (PINDEX i = 0; i < subscription.GetSize(); i++) handler->OnSubscription((H323PresenceHandler::MsgType)tag, subscription[i],*ip); return true; } bool H323PresenceBase::ReadIdentifier(const H460P_ArrayOf_PresenceIdentifier & identifier, H225_TransportAddress * ip) { if (ip == NULL) return false; for (PINDEX i = 0; i < identifier.GetSize(); i++) handler->OnIdentifiers((H323PresenceHandler::MsgType)tag, identifier[i],*ip); return true; } //////////////////////////////////////////////////////////////////////// template class H323PresencePDU : public H323PresenceBase { public: H323PresencePDU(const H323PresenceMessage & m) : H323PresenceBase(m), request(m.m_recvPDU) {} H323PresencePDU(unsigned tag) : request(*new Msg) {} operator Msg & () { return request; } operator const Msg & () const { return request; } virtual bool Process() { return H323PresenceBase::Process(); } protected: Msg request; }; class H323PresenceStatus : public H323PresencePDU { public: H323PresenceStatus(const H323PresenceMessage & m) : H323PresencePDU(m) {} protected: virtual bool HandleNotification(bool opt); virtual bool HandleInstruction(bool opt); }; class H323PresenceInstruct : public H323PresencePDU { public: H323PresenceInstruct(const H323PresenceMessage & m) : H323PresencePDU(m) {} protected: virtual bool HandleInstruction(bool opt); }; class H323PresenceAuthorize : public H323PresencePDU { public: H323PresenceAuthorize(const H323PresenceMessage & m) : H323PresencePDU(m) {} protected: virtual bool HandleSubscription(bool opt); }; class H323PresenceNotify : public H323PresencePDU { public: H323PresenceNotify(const H323PresenceMessage & m) : H323PresencePDU(m) {} protected: virtual bool HandleNotification(bool opt); }; class H323PresenceRequest : public H323PresencePDU { public: H323PresenceRequest(const H323PresenceMessage & m, H225_TransportAddress * ip) : H323PresencePDU(m), remoteIP(ip) {} protected: virtual bool HandleSubscription(bool opt); private: H225_TransportAddress * remoteIP; }; class H323PresenceResponse : public H323PresencePDU { public: H323PresenceResponse(const H323PresenceMessage & m, H225_TransportAddress * ip) : H323PresencePDU(m), remoteIP(ip) {} protected: virtual bool HandleSubscription(bool opt); private: H225_TransportAddress * remoteIP; }; class H323PresenceAlive : public H323PresencePDU { public: H323PresenceAlive(const H323PresenceMessage & m, H225_TransportAddress * ip) : H323PresencePDU(m), remoteIP(ip) {} protected: virtual bool HandleIdentifier(bool opt); private: H225_TransportAddress * remoteIP; }; class H323PresenceRemove : public H323PresencePDU { public: H323PresenceRemove(const H323PresenceMessage & m, H225_TransportAddress * ip) : H323PresencePDU(m), remoteIP(ip) {} protected: virtual bool HandleIdentifier(bool opt); private: H225_TransportAddress * remoteIP; }; class H323PresenceAlert : public H323PresencePDU { public: H323PresenceAlert(const H323PresenceMessage & m, H225_TransportAddress * ip) : H323PresencePDU(m), remoteIP(ip) {} protected: virtual bool HandleNotification(bool opt); private: H225_TransportAddress * remoteIP; }; //////////////////////////////////////////////////////////////////////////// bool H323PresenceHandler::ReceivedPDU(const PASN_OctetString & pdu, H225_TransportAddress * ip) { H460P_PresenceElement element; PPER_Stream raw(pdu); if (!element.Decode(raw) || element.m_message.GetSize() == 0) { PTRACE(2,"PRES\tError Decoding Element. Malformed or no messages."); return false; } PTRACE(5,"PRES\tReceived PDU\n" << element); for (PINDEX i=0; i < element.m_message.GetSize(); i++) { H323PresenceMessage m; m.m_recvPDU = element.m_message[i]; m.m_handler = this; H323PresenceBase handler; switch (m.GetTag()) { case H460P_PresenceMessage::e_presenceStatus: return H323PresenceStatus(m).Process(); case H460P_PresenceMessage::e_presenceInstruct: return H323PresenceInstruct(m).Process(); case H460P_PresenceMessage::e_presenceAuthorize: return H323PresenceAuthorize(m).Process(); case H460P_PresenceMessage::e_presenceNotify: return H323PresenceNotify(m).Process(); case H460P_PresenceMessage::e_presenceRequest: return H323PresenceRequest(m,ip).Process(); case H460P_PresenceMessage::e_presenceResponse: return H323PresenceResponse(m,ip).Process(); case H460P_PresenceMessage::e_presenceAlive: return H323PresenceAlive(m,ip).Process(); case H460P_PresenceMessage::e_presenceRemove: return H323PresenceRemove(m,ip).Process(); case H460P_PresenceMessage::e_presenceAlert: return H323PresenceAlert(m,ip).Process(); default: break; } } return false; } PBoolean H323PresenceHandler::BuildPresenceMessage(unsigned id, H323PresenceStore & store, H460P_ArrayOf_PresenceMessage & msgs) { bool dataToSend = false; H323PresenceStore::iterator iter = store.begin(); while (iter != m_presenceStore.end()) { H323PresenceEndpoint & ep = iter->second; bool ok = false; if ((PresenceMessage_attributes[id].notification == 1) && (ep.m_Notify.GetSize() > 0)) ok = true; if ((PresenceMessage_attributes[id].subscription == 1) && (ep.m_Authorize.GetSize() > 0)) ok = true; if ((PresenceMessage_attributes[id].instruction == 1) && (ep.m_Instruction.GetSize() > 0)) ok = true; if ((PresenceMessage_attributes[id].identifier == 1) && (ep.m_Identifiers.GetSize() > 0)) ok = true; if (ok) { dataToSend = true; int sz = msgs.GetSize(); msgs.SetSize(sz+1); switch (id) { case H460P_PresenceMessage::e_presenceStatus: BuildStatus(msgs[sz], ep.m_Notify, ep.m_Instruction); break; case H460P_PresenceMessage::e_presenceInstruct: BuildInstruct(msgs[sz],ep.m_Instruction); break; case H460P_PresenceMessage::e_presenceAuthorize: BuildAuthorize(msgs[sz],ep.m_Authorize); break; case H460P_PresenceMessage::e_presenceNotify: BuildNotify(msgs[sz], ep.m_Notify); break; case H460P_PresenceMessage::e_presenceRequest: BuildRequest(msgs[sz],ep.m_Authorize); break; case H460P_PresenceMessage::e_presenceResponse: BuildResponse(msgs[sz],ep.m_Authorize); break; case H460P_PresenceMessage::e_presenceAlive: BuildAlive(msgs[sz], ep.m_Identifiers); break; case H460P_PresenceMessage::e_presenceRemove: BuildRemove(msgs[sz], ep.m_Identifiers); break; case H460P_PresenceMessage::e_presenceAlert: BuildAlert(msgs[sz], ep.m_Notify); break; default: break; } if (ep.m_Notify.GetSize() > 0) ep.m_Notify.SetSize(0); if (ep.m_Authorize.GetSize() > 0) ep.m_Authorize.SetSize(0); if (ep.m_Instruction.GetSize() > 0) ep.m_Instruction.SetSize(0); if (ep.m_Identifiers.GetSize() > 0) ep.m_Identifiers.SetSize(0); } iter++; } return dataToSend; } PBoolean H323PresenceHandler::BuildPresenceElement(unsigned msgtag, PASN_OctetString & pdu) { bool success = false; H460P_PresenceElement element; H460P_ArrayOf_PresenceMessage & msgs = element.m_message; H323PresenceStore & store = GetPresenceStoreLocked(msgtag); if (RASMessage_attributes[msgtag].preStatus >0) BuildPresenceMessage(H460P_PresenceMessage::e_presenceStatus,store,msgs); if (RASMessage_attributes[msgtag].preInstruct >0) BuildPresenceMessage(H460P_PresenceMessage::e_presenceInstruct,store,msgs); if (RASMessage_attributes[msgtag].preAuthorize >0) BuildPresenceMessage(H460P_PresenceMessage::e_presenceAuthorize,store,msgs); if (RASMessage_attributes[msgtag].preNotify >0) BuildPresenceMessage(H460P_PresenceMessage::e_presenceNotify,store,msgs); if (RASMessage_attributes[msgtag].preRequest >0) BuildPresenceMessage(H460P_PresenceMessage::e_presenceRequest,store,msgs); if (RASMessage_attributes[msgtag].preResponse >0) BuildPresenceMessage(H460P_PresenceMessage::e_presenceResponse,store,msgs); if (RASMessage_attributes[msgtag].preAlive >0) BuildPresenceMessage(H460P_PresenceMessage::e_presenceAlive,store,msgs); if (RASMessage_attributes[msgtag].preRemove >0) BuildPresenceMessage(H460P_PresenceMessage::e_presenceRemove,store,msgs); if (RASMessage_attributes[msgtag].preAlert >0) BuildPresenceMessage(H460P_PresenceMessage::e_presenceAlert,store,msgs); success = (msgs.GetSize() > 0); if (success) { PTRACE(6,"PRES\tPDU to send\n" << element); pdu.EncodeSubType(element); } PresenceStoreUnLock(msgtag); return success; } H323PresenceStore & H323PresenceHandler::GetPresenceStoreLocked(unsigned /*msgtag*/) { storeMutex.Wait(); return m_presenceStore; } void H323PresenceHandler::PresenceStoreUnLock(unsigned /*msgtag*/) { storeMutex.Signal(); } PBoolean H323PresenceHandler::BuildPresenceMessage(unsigned id, const H225_EndpointIdentifier & ep, H460P_ArrayOf_PresenceMessage & msgs) { bool dataToSend = false; int sz = 0; H323PresenceStore Pep; H323PresenceStore::iterator i; switch (id) { case H460P_PresenceMessage::e_presenceStatus: if (BuildNotification(ep,Pep) || BuildInstructions(ep,Pep)) { for(i= Pep.begin(); i != Pep.end(); ++i) { sz = msgs.GetSize(); msgs.SetSize(sz+1); H460P_PresenceStatus & xm = BuildStatus(msgs[sz], i->second.m_Notify, i->second.m_Instruction); if (xm.m_alias.GetSize() == 0) { xm.m_alias.SetSize(1); xm.m_alias[0] = i->first; } } dataToSend = true; } break; case H460P_PresenceMessage::e_presenceInstruct: if (BuildInstructions(ep,Pep)) { for(i= Pep.begin(); i != Pep.end(); ++i) { sz = msgs.GetSize(); msgs.SetSize(sz+1); H460P_PresenceInstruct & xm = BuildInstruct(msgs[sz], i->second.m_Instruction); xm.m_alias = i->first; } dataToSend = true; } break; case H460P_PresenceMessage::e_presenceAuthorize: if (BuildSubscription(ep,Pep)) { for(i= Pep.begin(); i != Pep.end(); ++i) { sz = msgs.GetSize(); msgs.SetSize(sz+1); H460P_PresenceAuthorize & xm = BuildAuthorize(msgs[sz], i->second.m_Authorize); xm.m_alias = i->first; } dataToSend = true; } break; case H460P_PresenceMessage::e_presenceNotify: if (BuildNotification(ep,Pep)) { for(i= Pep.begin(); i != Pep.end(); ++i) { sz = msgs.GetSize(); msgs.SetSize(sz+1); H460P_PresenceNotify & xm = BuildNotify(msgs[sz], i->second.m_Notify); xm.m_alias = i->first; } dataToSend = true; } break; default: break; } return dataToSend; } PBoolean H323PresenceHandler::BuildPresenceMessage(unsigned id, const H225_TransportAddress & ip, H460P_ArrayOf_PresenceMessage & msgs) { bool dataToSend = false; int sz = 0; H323PresenceGkStore Pep; H323PresenceGkStore::iterator i; switch (id) { case H460P_PresenceMessage::e_presenceRequest: if (BuildSubscription(true,ip,Pep)) { for(i= Pep.begin(); i != Pep.end(); ++i) { sz = msgs.GetSize(); msgs.SetSize(sz+1); BuildRequest(msgs[sz], i->second.m_Authorize); } dataToSend = true; } break; case H460P_PresenceMessage::e_presenceResponse: if (BuildSubscription(false,ip,Pep)) { for(i= Pep.begin(); i != Pep.end(); ++i) { sz = msgs.GetSize(); msgs.SetSize(sz+1); BuildResponse(msgs[sz], i->second.m_Authorize); } dataToSend = true; } break; case H460P_PresenceMessage::e_presenceAlive: if (BuildIdentifiers(true,ip,Pep)) { for(i= Pep.begin(); i != Pep.end(); ++i) { sz = msgs.GetSize(); msgs.SetSize(sz+1); BuildAlive(msgs[sz], i->second.m_Identifiers); } dataToSend = true; } break; case H460P_PresenceMessage::e_presenceRemove: if (BuildIdentifiers(false,ip,Pep)) { for(i= Pep.begin(); i != Pep.end(); ++i) { sz = msgs.GetSize(); msgs.SetSize(sz+1); BuildRemove(msgs[sz], i->second.m_Identifiers); } dataToSend = true; } break; case H460P_PresenceMessage::e_presenceAlert: if (BuildNotification(ip,Pep)) { for(i= Pep.begin(); i != Pep.end(); ++i) { sz = msgs.GetSize(); msgs.SetSize(sz+1); BuildAlert(msgs[sz], i->second.m_Notify); } dataToSend = true; } break; default: break; } return dataToSend; } PBoolean H323PresenceHandler::BuildPresenceElement(unsigned msgtag,const H225_EndpointIdentifier & ep, PASN_OctetString & pdu) { bool success = false; H460P_PresenceElement element; H460P_ArrayOf_PresenceMessage & msgs = element.m_message; if (RASMessage_attributes[msgtag].preStatus >0) BuildPresenceMessage(H460P_PresenceMessage::e_presenceStatus,ep,msgs); if (RASMessage_attributes[msgtag].preInstruct >0) BuildPresenceMessage(H460P_PresenceMessage::e_presenceInstruct,ep,msgs); if (RASMessage_attributes[msgtag].preAuthorize >0) BuildPresenceMessage(H460P_PresenceMessage::e_presenceAuthorize,ep,msgs); if (RASMessage_attributes[msgtag].preNotify >0) BuildPresenceMessage(H460P_PresenceMessage::e_presenceNotify,ep,msgs); success = (msgs.GetSize() > 0); if (success) { PTRACE(6,"PRES\tPDU to send to " << ep << "\n" << element); pdu.EncodeSubType(element); } return success; } PBoolean H323PresenceHandler::BuildPresenceElement(unsigned msgtag,const H225_TransportAddress & ip,PASN_OctetString & pdu) { bool success = false; H460P_PresenceElement element; H460P_ArrayOf_PresenceMessage & msgs = element.m_message; if (RASMessage_attributes[msgtag].preRequest >0) BuildPresenceMessage(H460P_PresenceMessage::e_presenceRequest,ip,msgs); if (RASMessage_attributes[msgtag].preResponse >0) BuildPresenceMessage(H460P_PresenceMessage::e_presenceResponse,ip,msgs); if (RASMessage_attributes[msgtag].preAlive >0) BuildPresenceMessage(H460P_PresenceMessage::e_presenceAlive,ip,msgs); if (RASMessage_attributes[msgtag].preRemove >0) BuildPresenceMessage(H460P_PresenceMessage::e_presenceRemove,ip,msgs); if (RASMessage_attributes[msgtag].preAlert >0) BuildPresenceMessage(H460P_PresenceMessage::e_presenceAlert,ip,msgs); success = (msgs.GetSize() > 0); if (success) { PTRACE(6,"PRES\tPDU to send to " << ip << "\n" << element); pdu.EncodeSubType(element); } return success; } /////////////////////////////////////////////////////////////////////// template class H323PresenceMsg : public H460P_PresenceMessage { public: Msg & Build(unsigned _tag) { SetTag(_tag); Msg & msg = *this; return msg; } }; H460P_PresenceStatus & H323PresenceHandler::BuildStatus(H460P_PresenceMessage & msg, const H323PresenceNotifications & notify, const H323PresenceInstructions & inst) { H323PresenceMsg m; H460P_PresenceStatus & pdu = m.Build(H460P_PresenceMessage::e_presenceStatus); pdu.m_notification = notify.m_notification; PStringList aliases; notify.GetAliasList(aliases); for (PINDEX i=0; i 0) { pdu.IncludeOptionalField(H460P_PresenceStatus::e_instruction); pdu.m_instruction = inst.m_instruction; } msg = *(H460P_PresenceMessage *)m.Clone(); return msg; } H460P_PresenceInstruct & H323PresenceHandler::BuildInstruct(H460P_PresenceMessage & msg, const H323PresenceInstructions & inst) { H323PresenceMsg m; H460P_PresenceInstruct & pdu = m.Build(H460P_PresenceMessage::e_presenceInstruct); pdu = inst; msg = *(H460P_PresenceMessage *)m.Clone(); return msg; } H460P_PresenceAuthorize & H323PresenceHandler::BuildAuthorize(H460P_PresenceMessage & msg, const H323PresenceSubscriptions & subs) { H323PresenceMsg m; H460P_PresenceAuthorize & pdu = m.Build(H460P_PresenceMessage::e_presenceAuthorize); pdu = subs; msg = *(H460P_PresenceMessage *)m.Clone(); return msg; } H460P_PresenceNotify & H323PresenceHandler::BuildNotify(H460P_PresenceMessage & msg, const H323PresenceNotifications & notify) { H323PresenceMsg m; H460P_PresenceNotify & pdu = m.Build(H460P_PresenceMessage::e_presenceNotify); pdu = notify; msg = *(H460P_PresenceMessage *)m.Clone(); return msg; } H460P_PresenceRequest & H323PresenceHandler::BuildRequest(H460P_PresenceMessage & msg, const H323PresenceSubscriptions & subs) { H323PresenceMsg m; H460P_PresenceRequest & pdu = m.Build(H460P_PresenceMessage::e_presenceRequest); pdu.m_subscription = subs.m_subscription; msg = *(H460P_PresenceMessage *)m.Clone(); return msg; } H460P_PresenceResponse & H323PresenceHandler::BuildResponse(H460P_PresenceMessage & msg, const H323PresenceSubscriptions & subs) { H323PresenceMsg m; H460P_PresenceResponse & pdu = m.Build(H460P_PresenceMessage::e_presenceResponse); pdu.m_subscription = subs.m_subscription; msg = *(H460P_PresenceMessage *)m.Clone(); return msg;; } H460P_PresenceAlive & H323PresenceHandler::BuildAlive(H460P_PresenceMessage & msg, const H323PresenceIdentifiers & id) { H323PresenceMsg m; H460P_PresenceAlive & pdu = m.Build(H460P_PresenceMessage::e_presenceAlive); pdu.m_identifier = id; msg = *(H460P_PresenceMessage *)m.Clone(); return msg; } H460P_PresenceRemove & H323PresenceHandler::BuildRemove(H460P_PresenceMessage & msg, const H323PresenceIdentifiers & id) { H323PresenceMsg m; H460P_PresenceRemove & pdu = m.Build(H460P_PresenceMessage::e_presenceRemove); pdu.m_identifier = id; msg = *(H460P_PresenceMessage *)m.Clone(); return msg; } H460P_PresenceAlert & H323PresenceHandler::BuildAlert(H460P_PresenceMessage & msg, const H323PresenceNotifications & notify) { H323PresenceMsg m; H460P_PresenceAlert & pdu = m.Build(H460P_PresenceMessage::e_presenceAlert); pdu.m_notification = notify.m_notification; msg = *(H460P_PresenceMessage *)m.Clone(); return msg; } ///////////////////////////////////////////////////////////////////////////// H323PresenceHandler::localeInfo::localeInfo() : m_locale(""), m_region(""),m_country(""), m_countryCode(""), m_latitude(""), m_longitude(""), m_elevation("") { } bool H323PresenceHandler::localeInfo::BuildLocalePDU(H460P_PresenceGeoLocation & pdu) { bool contents = false; if (!m_locale) { pdu.IncludeOptionalField(H460P_PresenceGeoLocation::e_locale); pdu.m_locale.SetValue(m_locale); contents = true; } if (!m_region) { pdu.IncludeOptionalField(H460P_PresenceGeoLocation::e_region); pdu.m_region.SetValue(m_region); contents = true; } if (!m_country) { pdu.IncludeOptionalField(H460P_PresenceGeoLocation::e_country); pdu.m_country.SetValue(m_country); contents = true; } if (!m_countryCode) { pdu.IncludeOptionalField(H460P_PresenceGeoLocation::e_countryCode); pdu.m_countryCode.SetValue(m_countryCode); contents = true; } if (!m_latitude) { pdu.IncludeOptionalField(H460P_PresenceGeoLocation::e_latitude); pdu.m_latitude.SetValue(m_latitude); contents = true; } if (!m_longitude) { pdu.IncludeOptionalField(H460P_PresenceGeoLocation::e_longitude); pdu.m_longitude.SetValue(m_longitude); contents = true; } if (!m_elevation) { pdu.IncludeOptionalField(H460P_PresenceGeoLocation::e_elevation); pdu.m_elevation.SetValue(m_elevation); contents = true; } return contents; } //////////////////////////////////////////////////////////////////////// bool H323PresenceStatus::HandleNotification(bool opt) { bool success = false; if (!opt) { for (PINDEX i=0; i 0) { H460P_PresenceDisplay disp; disp.IncludeOptionalField(H460P_PresenceDisplay::e_language); disp.m_language = "en-US"; disp.m_display = display; e.IncludeOptionalField(H460P_Presentity::e_display); e.m_display.SetSize(1); e.m_display[0] = disp; } } void H323PresenceNotification::AddSupportedFeature(int id) { H460P_Presentity & e = m_presentity; e.IncludeOptionalField(H460P_Presentity::e_supportedFeatures); H460P_ArrayOf_PresenceFeature & f = e.m_supportedFeatures; H460P_PresenceFeature pf; pf.SetTag(id); int sz = f.GetSize(); f.SetSize(sz+1); f[sz] = pf; } void H323PresenceNotification::AddSupportedFeature(const H460P_PresenceFeature & id) { H460P_Presentity & e = m_presentity; if (!e.HasOptionalField(H460P_Presentity::e_supportedFeatures)) e.IncludeOptionalField(H460P_Presentity::e_supportedFeatures); H460P_ArrayOf_PresenceFeature & f = e.m_supportedFeatures; int sz = f.GetSize(); f.SetSize(sz+1); f[sz] = id; } void H323PresenceNotification::AddEndpointLocale(const H460P_PresenceGeoLocation & loc) { H460P_Presentity & e = m_presentity; e.IncludeOptionalField(H460P_Presentity::e_geolocation); e.m_geolocation = loc; } void H323PresenceNotification::AddGenericData(const H225_ArrayOf_GenericData & data) { int sz = data.GetSize(); if (sz == 0) return; H460P_Presentity & e = m_presentity; e.IncludeOptionalField(H460P_Presentity::e_genericData); e.m_genericData.SetSize(sz); for (PINDEX i=0; i < sz; ++i) { e.m_genericData[i] = data[i]; } } void H323PresenceNotification::GetPresenceState(H323PresenceNotification::States & state, PString & display) const { const H460P_Presentity & e = m_presentity; state = (H323PresenceNotification::States)e.m_state.GetTag(); display = PString(); if (state != e_generic) { if (e.HasOptionalField(H460P_Presentity::e_display) && e.m_display.GetSize() > 0) display = e.m_display[0].m_display; } else { const PASN_BMPString & m = e.m_state; display = m; } } void H323PresenceNotification::SetGenericState(const PString & state) { H460P_Presentity & e = m_presentity; e.m_state.SetTag(H460P_PresenceState::e_generic); PASN_BMPString & display = e.m_state; display = state; } void H323PresenceNotification::AddSubscriber(const OpalGloballyUniqueID & guid) { if (!HasOptionalField(H460P_PresenceNotification::e_subscribers)) IncludeOptionalField(H460P_PresenceNotification::e_subscribers); H460P_PresenceIdentifier id; id.m_guid = guid; int size = m_subscribers.GetSize(); m_subscribers.SetSize(size+1); m_subscribers[size] = id; } void H323PresenceNotification::RemoveSubscribers() { if (HasOptionalField(H460P_PresenceNotification::e_subscribers)) { RemoveOptionalField(H460P_PresenceNotification::e_subscribers); m_subscribers.RemoveAll(); } } OpalGloballyUniqueID H323PresenceNotification::GetSubscriber(PINDEX i) { if (HasOptionalField(H460P_PresenceNotification::e_subscribers)) { H460P_PresenceIdentifier & id = m_subscribers[i]; return OpalGloballyUniqueID(id.m_guid); } return OpalGloballyUniqueID(); } void H323PresenceNotification::AddAlias(const PString & alias) { if (!HasOptionalField(H460P_PresenceNotification::e_aliasAddress)) IncludeOptionalField(H460P_PresenceNotification::e_aliasAddress); H323SetAliasAddress(alias, m_aliasAddress); } PString H323PresenceNotification::GetAlias() const { if (HasOptionalField(H460P_PresenceNotification::e_aliasAddress)) return H323GetAliasAddressString(m_aliasAddress); return PString(); } static const char *PresState[] = { "Hidden", "Available", "Online", "Offline", "OnCall", "VoiceMail", "NotAvailable", "Generic" }; PString H323PresenceNotification::GetStateString(unsigned state) { return PresState[state]; } /////////////////////////////////////////////////////////////////////// void H323PresenceSubscriptions::Add(const H323PresenceSubscription & sub) { int size = m_subscription.GetSize(); m_subscription.SetSize(size+1); m_subscription[size] = sub; } H323PresenceSubscription & H323PresenceSubscriptions::operator[](PINDEX i) const { return (H323PresenceSubscription &)m_subscription[i]; } void H323PresenceSubscriptions::SetAlias(const PString & alias) { if (!alias) H323SetAliasAddress(alias,m_alias); } void H323PresenceSubscriptions::GetAlias(PString & alias) { alias = H323GetAliasAddressString(m_alias); } void H323PresenceSubscriptions::SetSize(PINDEX newSize) { m_subscription.SetSize(newSize); } PINDEX H323PresenceSubscriptions::GetSize() const { return m_subscription.GetSize(); } /////////////////////////////////////////////////////////////////////// H323PresenceSubscription::H323PresenceSubscription() { } H323PresenceSubscription::H323PresenceSubscription(const OpalGloballyUniqueID & guid) { m_identifier.m_guid = guid; } void H323PresenceSubscription::SetSubscriptionDetails(const PString & subscribe, const PStringList & aliases) { H323SetAliasAddress(subscribe, m_subscribe); for (PINDEX i=0; i< aliases.GetSize(); i++) { H225_AliasAddress alias; H323SetAliasAddress(aliases[i],alias); int size = m_aliases.GetSize(); m_aliases.SetSize(size+1); m_aliases[i] = alias; } } void H323PresenceSubscription::SetSubscriptionDetails(const H225_AliasAddress & subscribe, const H225_AliasAddress & subscriber) { m_subscribe = subscribe; int sz = m_aliases.GetSize(); m_aliases.SetSize(sz+1); m_aliases[sz] = subscriber; } void H323PresenceSubscription::GetSubscriberDetails(PStringList & aliases) const { for (PINDEX i=0; i< m_aliases.GetSize(); i++) { PString a = H323GetAliasAddressString(m_aliases[i]); aliases.AppendString(a); } } PString H323PresenceSubscription::GetSubscribed() { return H323GetAliasAddressString(m_subscribe); } void H323PresenceSubscription::SetGatekeeperRAS(const H323TransportAddress & address) { IncludeOptionalField(H460P_PresenceSubscription::e_rasAddress); address.SetPDU(m_rasAddress); } H323TransportAddress H323PresenceSubscription::GetGatekeeperRAS() { if (!HasOptionalField(H460P_PresenceSubscription::e_rasAddress)) return H323TransportAddress(); return H323TransportAddress(m_rasAddress); } void H323PresenceSubscription::SetApproved(bool success) { if (!HasOptionalField(H460P_PresenceSubscription::e_approved)) IncludeOptionalField(H460P_PresenceSubscription::e_approved); m_approved = success; } int H323PresenceSubscription::IsApproved() { if (HasOptionalField(H460P_PresenceSubscription::e_approved)) return (int)m_approved; else return -1; } void H323PresenceSubscription::SetTimeToLive(int t) { IncludeOptionalField(H460P_PresenceSubscription::e_timeToLive); m_timeToLive = t; } void H323PresenceSubscription::SetSubscription(const OpalGloballyUniqueID & guid) { m_identifier.m_guid = guid; } OpalGloballyUniqueID H323PresenceSubscription::GetSubscription() const { return OpalGloballyUniqueID(m_identifier.m_guid); } void H323PresenceSubscription::MakeDecision(bool approve) { SetApproved(approve); } bool H323PresenceSubscription::IsDecisionMade() { return HasOptionalField(H460P_PresenceSubscription::e_approved); } void H323PresenceSubscription::AddGenericData(const H225_ArrayOf_GenericData & data) { int sz = data.GetSize(); if (sz >0) return; IncludeOptionalField(H460P_PresenceSubscription::e_genericData); m_genericData.SetSize(sz); for (PINDEX i=0; i #include #ifdef H323_H460P #include "h460/h460_oid3.h" #include #include /////////////////////////////////////////////////////////////////////// int PRETIME = 2; H460PresenceHandler::H460PresenceHandler(H323EndPoint & _ep) : ep(_ep) { PTRACE(4,"OID3\tPresence Handler created!"); feat = NULL; presenceRegistration = false; pendingMessages = false; genericData.SetSize(0); QueueTimer.SetNotifier(PCREATE_NOTIFIER(dequeue)); QueueTimer.RunContinuous(PRETIME * 1000); } void H460PresenceHandler::dequeue(PTimer &, INT) { if (pendingMessages) { if (ep.GetGatekeeper() && ep.GetGatekeeper()->IsRegistered()) ep.GetGatekeeper()->SendServiceControlIndication(); pendingMessages = false; } } void H460PresenceHandler::AttachFeature(H460_FeatureOID3 * _feat) { feat = _feat; if (ep.GetGatekeeper()) presenceRegistration = true; } void PostSubscription(H323PresenceStore & gw, const H323PresenceSubscriptions & list) { H323PresenceStore::iterator inf = gw.find(list.m_alias); if (inf == gw.end()) { H323PresenceEndpoint epRecord; epRecord.m_Authorize.m_alias = list.m_alias; for (PINDEX i=0; i(list.m_alias, epRecord)); } else { H323PresenceEndpoint & epRecord = inf->second; epRecord.m_Authorize.m_alias = list.m_alias; for (PINDEX i=0; i(list.m_alias, epRecord)); } else { H323PresenceEndpoint & epRecord = inf->second; for (PINDEX i=0; i 0) epRecord.m_Notify.SetAliasList(aliases); for (PINDEX i=0; i(list.m_alias, epRecord)); } else { H323PresenceEndpoint & epRecord = inf->second; for (PINDEX i=0; iCommonFeature()) return; H323PresenceNotification notification; notification.SetPresenceState((H323PresenceNotification::States)localstate,localdisplay); if (!updateOnly) { // Add Geoloation Information H460P_PresenceGeoLocation loc; if (EndpointLocale.BuildLocalePDU(loc)) notification.AddEndpointLocale(loc); // Add the features the endpoint supports list::iterator i = EndpointFeatures.begin(); while (i != EndpointFeatures.end()) { notification.AddSupportedFeature(*i); i++; } // Add any generic data notification.AddGenericData(genericData); } for (PINDEX i = 0; i< alias.GetSize(); ++i) { H323PresenceNotifications notify; notify.Add(notification); notify.SetAlias(alias[i]); notify.SetAliasList(alias); H323PresenceStore & store = GetPresenceStoreLocked(); PostNotification(store,notify); PresenceStoreUnLock(); } if (ep.GetGatekeeper() && ep.GetGatekeeper()->IsRegistered()) pendingMessages = true; } void H460PresenceHandler::AddInstruction(const PString & epalias, H323PresenceHandler::InstType instType, const PStringList & subscribe, PBoolean autoSend) { H323PresenceInstructions instruct; instruct.SetAlias(epalias); for (PINDEX i=0; i< subscribe.GetSize(); i++) { unsigned t = (int)instType; H323PresenceInstruction inst((H323PresenceInstruction::Instruction)t, subscribe[i]); instruct.Add(inst); } H323PresenceStore & store = GetPresenceStoreLocked(); PostInstruction(store,instruct); PresenceStoreUnLock(); if (ep.GetGatekeeper() && ep.GetGatekeeper()->IsRegistered() && autoSend) pendingMessages = true; } void H460PresenceHandler::AddAuthorization(const OpalGloballyUniqueID id, const PString & epalias, PBoolean approved, const PStringList & subscribe) { H323PresenceSubscriptions sub; sub.SetAlias(epalias); for (PINDEX i=0; i< subscribe.GetSize(); i++) { H323PresenceSubscription subs(id); subs.SetSubscriptionDetails(epalias,subscribe); subs.SetApproved(approved); sub.Add(subs); } H323PresenceStore & store = GetPresenceStoreLocked(); PostSubscription(store,sub); PresenceStoreUnLock(); if (ep.GetGatekeeper() && ep.GetGatekeeper()->IsRegistered()) pendingMessages = true; } PStringList & H460PresenceHandler::GetSubscriptionList() { return PresenceSubscriptions; } PStringList & H460PresenceHandler::GetBlockList() { return PresenceBlockList; } void H460PresenceHandler::OnNotification(H323PresenceHandler::MsgType tag, const H460P_PresenceNotification & notify, const H225_AliasAddress & addr) { switch (tag) { case H323PresenceHandler::e_Notify: PresenceRcvNotification(addr,(const H323PresenceNotification &)notify); break; default: break; } } void H460PresenceHandler::OnSubscription(H323PresenceHandler::MsgType tag, const H460P_PresenceSubscription & subscription, const H225_AliasAddress & addr) { switch (tag) { case H323PresenceHandler::e_Authorize: PresenceRcvAuthorization(addr,(const H323PresenceSubscription &)subscription); default: break; } } void H460PresenceHandler::OnInstructions(H323PresenceHandler::MsgType tag, const H460P_ArrayOf_PresenceInstruction & instruction, const H225_AliasAddress & addr) { PINDEX j = 0; switch (tag) { case H323PresenceHandler::e_Status: PTRACE(4,"OID3\tReceived Gatekeeper Status update!"); for (j=0; j < instruction.GetSize(); j++) { PresenceRcvInstruction(addr,(const H323PresenceInstruction &)instruction[j]); } break; default: break; } } void H460PresenceHandler::PresenceRcvNotification(const H225_AliasAddress & addr, const H323PresenceNotification & notify) { PString alias = notify.GetAlias(); H323PresenceNotification::States s; PString display = PString(); notify.GetPresenceState(s,display); ep.PresenceNotification(H323GetAliasAddressString(addr),alias,s,display); } void H460PresenceHandler::PresenceRcvAuthorization(const H225_AliasAddress & addr, const H323PresenceSubscription & subscript) { PStringList aliases; subscript.GetSubscriberDetails(aliases); OpalGloballyUniqueID id = subscript.GetSubscription(); ep.PresenceAuthorization(id,H323GetAliasAddressString(addr),aliases); } void H460PresenceHandler::PresenceRcvInstruction(const H225_AliasAddress & addr, const H323PresenceInstruction & instruct) { PString alias = instruct.GetAlias(); unsigned i = instruct.GetTag(); ep.PresenceInstruction(H323GetAliasAddressString(addr),i, alias); } void H460PresenceHandler::AddEndpointFeature(int feat) { H460P_PresenceFeature f; f.SetTag(feat); EndpointFeatures.push_back(f); } void H460PresenceHandler::AddEndpointH460Feature(const H225_GenericIdentifier & featid, const PString & display) { H460P_PresenceFeature f; f.SetTag(H460P_PresenceFeature::e_generic); H460P_PresenceFeatureGeneric & g = f; g.m_identifier = featid; g.IncludeOptionalField(H460P_PresenceFeatureGeneric::e_display); g.m_display.SetValue(display); EndpointFeatures.push_back(f); } void H460PresenceHandler::AddEndpointGenericData(const H225_GenericData & data) { int sz = genericData.GetSize(); genericData.SetSize(sz+1); genericData[sz] = data; } /////////////////////////////////////////////////////////////////////// static const char * OID_3 = "1.3.6.1.4.1.17090.0.3"; // Advertised Feature static const char * OID3_ID = "1"; /////////////////////////////////////////////////////////////////////// H460_FEATURE(OID3); H460_FeatureOID3::H460_FeatureOID3() : H460_FeatureOID(OID_3) { PTRACE(4,"OID3\tInstance Created"); handler = NULL; remoteSupport = false; FeatureCategory = FeatureSupported; } H460_FeatureOID3::~H460_FeatureOID3() { } PStringArray H460_FeatureOID3::GetIdentifier() { return PStringArray(OID_3); } void H460_FeatureOID3::AttachEndPoint(H323EndPoint * _ep) { handler = _ep->GetPresenceHandler(); if (handler != NULL) handler->AttachFeature(this); } PBoolean H460_FeatureOID3::OnSendGatekeeperRequest(H225_FeatureDescriptor & pdu) { if (handler == NULL) return false; H460_FeatureOID feat = H460_FeatureOID(OID_3); pdu = feat; return TRUE; } PBoolean H460_FeatureOID3::OnSendRegistrationRequest(H225_FeatureDescriptor & pdu) { if (handler == NULL) return false; H460_FeatureOID feat = H460_FeatureOID(OID_3); PASN_OctetString raw; if (handler->BuildPresenceElement(H225_RasMessage::e_registrationRequest, raw)) feat.Add(OID3_ID,H460_FeatureContent(raw)); pdu = feat; return true; } void H460_FeatureOID3::OnReceiveRegistrationConfirm(const H225_FeatureDescriptor & pdu) { if (handler == NULL) return; remoteSupport = true; H460_FeatureOID & feat = (H460_FeatureOID &)pdu; if (feat.Contains(OID3_ID)) { PASN_OctetString & data = feat.Value(OID3_ID); handler->ReceivedPDU(data); } } PBoolean H460_FeatureOID3::OnSendServiceControlIndication(H225_FeatureDescriptor & pdu) { if (!remoteSupport) return false; H460_FeatureOID feat = H460_FeatureOID(OID_3); PASN_OctetString raw; if (handler->BuildPresenceElement(H225_RasMessage::e_serviceControlIndication, raw)) { feat.Add(OID3_ID,H460_FeatureContent(raw)); pdu = feat; return true; } return false; }; void H460_FeatureOID3::OnReceiveServiceControlIndication(const H225_FeatureDescriptor & pdu) { H460_FeatureOID & feat = (H460_FeatureOID &)pdu; if (feat.Contains(OID3_ID)) { PASN_OctetString & data = feat.Value(OID3_ID); handler->ReceivedPDU(data); } }; #endif // H323_H460P h323plus/src/gkclient.cxx0000644000175000017500000017177711647300515014250 0ustar markmark/* * gkclient.cxx * * Gatekeeper client protocol handler * * Open H323 Library * * Copyright (c) 1999-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * iFace In, http://www.iface.com * * Contributor(s): ______________________________________. * * $Id: gkclient.cxx,v 1.22 2011/10/18 13:38:21 shorne Exp $ * */ #include #ifdef __GNUC__ #pragma implementation "gkclient.h" #endif #if defined(_WIN32) && (_MSC_VER > 1300) #pragma warning(disable:4244) // warning about possible loss of data #endif #include "gkclient.h" #include "h323ep.h" #include "h323rtp.h" #include "h323pdu.h" #ifdef H323_H460 #include "h460/h4601.h" #endif #define new PNEW static PTimeInterval AdjustTimeout(unsigned seconds) { // Allow for an incredible amount of system/network latency static unsigned TimeoutDeadband = 5; // seconds return PTimeInterval(0, seconds > TimeoutDeadband ? (seconds - TimeoutDeadband) : TimeoutDeadband); } ///////////////////////////////////////////////////////////////////////////// H323Gatekeeper::H323Gatekeeper(H323EndPoint & ep, H323Transport * trans) : H225_RAS(ep, trans), requestMutex(1, 1), authenticators(ep.CreateAuthenticators()) #ifdef H323_H460 ,features(ep.GetFeatureSet()) #endif { alternatePermanent = FALSE; discoveryComplete = FALSE; registrationFailReason = UnregisteredLocally; pregrantMakeCall = pregrantAnswerCall = RequireARQ; autoReregister = TRUE; reregisterNow = FALSE; requiresDiscovery = FALSE; timeToLive.SetNotifier(PCREATE_NOTIFIER(TickleMonitor)); infoRequestRate.SetNotifier(PCREATE_NOTIFIER(TickleMonitor)); willRespondToIRR = FALSE; monitorStop = FALSE; monitor = PThread::Create(PCREATE_NOTIFIER(MonitorMain), 0, PThread::NoAutoDeleteThread, PThread::NormalPriority, "GkMonitor:%x"); #ifdef H323_H460 features->AttachEndPoint(&ep); features->LoadFeatureSet(H460_Feature::FeatureRas); #endif localId = PString(); assignedGK = NULL; } H323Gatekeeper::~H323Gatekeeper() { if (monitor != NULL) { monitorStop = TRUE; monitorTickle.Signal(); monitor->WaitForTermination(); delete monitor; } #ifdef H323_H460 delete features; #endif StopChannel(); } PString H323Gatekeeper::GetName() const { PStringStream s; s << *this; return s; } PBoolean H323Gatekeeper::DiscoverAny() { gatekeeperIdentifier = PString(); return StartDiscovery(H323TransportAddress()); } PBoolean H323Gatekeeper::DiscoverByName(const PString & identifier) { gatekeeperIdentifier = identifier; return StartDiscovery(H323TransportAddress()); } PBoolean H323Gatekeeper::DiscoverByAddress(const H323TransportAddress & address) { gatekeeperIdentifier = PString(); return StartDiscovery(address); } PBoolean H323Gatekeeper::DiscoverByNameAndAddress(const PString & identifier, const H323TransportAddress & address) { gatekeeperIdentifier = identifier; return StartDiscovery(address); } PBoolean H323Gatekeeper::StartDiscovery(const H323TransportAddress & initialAddress) { if (PAssertNULL(transport) == NULL) return FALSE; /// don't send GRQ if not requested if (!endpoint.GetSendGRQ() && !initialAddress.IsEmpty()) { transport->SetRemoteAddress(initialAddress); if (!transport->Connect()) { PTRACE(2, "RAS\tUnable to connect to gatekeeper at " << initialAddress); return FALSE; } transport->SetPromiscuous(H323Transport::AcceptFromRemoteOnly); StartChannel(); PTRACE(2, "RAS\tSkipping gatekeeper discovery for " << initialAddress); return TRUE; } H323RasPDU pdu; Request request(SetupGatekeeperRequest(pdu), pdu); H323TransportAddress address = initialAddress; request.responseInfo = &address; requestsMutex.Wait(); requests.SetAt(request.sequenceNumber, &request); requestsMutex.Signal(); discoveryComplete = FALSE; unsigned retries = endpoint.GetGatekeeperRequestRetries(); while (!discoveryComplete) { if (transport->DiscoverGatekeeper(*this, pdu, address)) { if (address == initialAddress) break; /// If get here must have been GRJ with an alternate gk, start again } else { // Transport failure, retry if (--retries == 0) break; } } requestsMutex.Wait(); requests.SetAt(request.sequenceNumber, NULL); requestsMutex.Signal(); if (discoveryComplete) { if (transport->Connect()) StartChannel(); } return discoveryComplete; } unsigned H323Gatekeeper::SetupGatekeeperRequest(H323RasPDU & request) { if (PAssertNULL(transport) == NULL) return 0; H225_GatekeeperRequest & grq = request.BuildGatekeeperRequest(GetNextSequenceNumber()); endpoint.SetEndpointTypeInfo(grq.m_endpointType); transport->SetUpTransportPDU(grq.m_rasAddress, TRUE); grq.IncludeOptionalField(H225_GatekeeperRequest::e_endpointAlias); H323SetAliasAddresses(endpoint.GetAliasNames(), grq.m_endpointAlias); if (!gatekeeperIdentifier) { grq.IncludeOptionalField(H225_GatekeeperRequest::e_gatekeeperIdentifier); grq.m_gatekeeperIdentifier = gatekeeperIdentifier; } grq.IncludeOptionalField(H225_GatekeeperRequest::e_supportsAltGK); grq.IncludeOptionalField(H225_GatekeeperRequest::e_supportsAssignedGK); grq.m_supportsAssignedGK = TRUE; OnSendGatekeeperRequest(grq); discoveryComplete = FALSE; return grq.m_requestSeqNum; } void H323Gatekeeper::OnSendGatekeeperRequest(H225_GatekeeperRequest & grq) { H225_RAS::OnSendGatekeeperRequest(grq); for (PINDEX i = 0; i < authenticators.GetSize(); i++) { if (authenticators[i].SetCapability(grq.m_authenticationCapability, grq.m_algorithmOIDs)) { grq.IncludeOptionalField(H225_GatekeeperRequest::e_authenticationCapability); grq.IncludeOptionalField(H225_GatekeeperRequest::e_algorithmOIDs); } } } PBoolean H323Gatekeeper::OnReceiveGatekeeperConfirm(const H225_GatekeeperConfirm & gcf) { if (!H225_RAS::OnReceiveGatekeeperConfirm(gcf)) return FALSE; PINDEX i; for (i = 0; i < authenticators.GetSize(); i++) { H235Authenticator & authenticator = authenticators[i]; if (authenticator.UseGkAndEpIdentifiers()) authenticator.SetRemoteId(gatekeeperIdentifier); } if (gcf.HasOptionalField(H225_GatekeeperConfirm::e_authenticationMode) && gcf.HasOptionalField(H225_GatekeeperConfirm::e_algorithmOID)) { for (i = 0; i < authenticators.GetSize(); i++) { H235Authenticator & authenticator = authenticators[i]; authenticator.Enable(authenticator.IsCapability(gcf.m_authenticationMode, gcf.m_algorithmOID)); PTRACE(4,"RAS\tAuthenticator " << authenticator.GetName() << (authenticator.IsActive() ? " ACTIVATED" : " disabled")); } } H323TransportAddress locatedAddress = gcf.m_rasAddress; PTRACE(2, "RAS\tGatekeeper discovery found " << locatedAddress); if (!transport->SetRemoteAddress(locatedAddress)) { PTRACE(2, "RAS\tInvalid gatekeeper discovery address: \"" << locatedAddress << '"'); return FALSE; } if (gcf.HasOptionalField(H225_GatekeeperConfirm::e_alternateGatekeeper)) SetAlternates(gcf.m_alternateGatekeeper, FALSE); if (gcf.HasOptionalField(H225_GatekeeperConfirm::e_assignedGatekeeper)) { SetAssignedGatekeeper(gcf.m_assignedGatekeeper); PTRACE(2, "RAS\tAssigned Gatekeeper redirected " << assignedGK); // This will force the gatekeeper to register to the assigned Gatekeeper. if (lastRequest->responseInfo != NULL) { H323TransportAddress & gkAddress = *(H323TransportAddress *)lastRequest->responseInfo; gkAddress = assignedGK->rasAddress; gatekeeperIdentifier = PString(); } } else { endpoint.OnGatekeeperConfirm(); discoveryComplete = TRUE; } return TRUE; } PBoolean H323Gatekeeper::OnReceiveGatekeeperReject(const H225_GatekeeperReject & grj) { if (!H225_RAS::OnReceiveGatekeeperReject(grj)) return FALSE; if (grj.HasOptionalField(H225_GatekeeperReject::e_altGKInfo)) { SetAlternates(grj.m_altGKInfo.m_alternateGatekeeper, grj.m_altGKInfo.m_altGKisPermanent); } if ((alternates.GetSize() > 0) && (lastRequest->responseInfo != NULL)) { H323TransportAddress & gkAddress = *(H323TransportAddress *)lastRequest->responseInfo; gkAddress = alternates[0].rasAddress; } endpoint.OnGatekeeperReject(); return TRUE; } PBoolean H323Gatekeeper::RegistrationRequest(PBoolean autoReg) { PWaitAndSignal m(RegisterMutex); if (PAssertNULL(transport) == NULL) return FALSE; autoReregister = autoReg; H323RasPDU pdu; H225_RegistrationRequest & rrq = pdu.BuildRegistrationRequest(GetNextSequenceNumber()); // If discoveryComplete flag is FALSE then do lightweight reregister rrq.m_discoveryComplete = discoveryComplete; // Check if the IP address might of changed since last registration (for DDNS Type registrations) H323TransportAddress newaddress; if ((!discoveryComplete) && (endpoint.GatekeeperCheckIP(transport->GetRemoteAddress(),newaddress))) transport->SetRemoteAddress(newaddress); rrq.m_rasAddress.SetSize(1); transport->SetUpTransportPDU(rrq.m_rasAddress[0], TRUE); H323TransportAddressArray listeners = endpoint.GetInterfaceAddresses(TRUE, transport); if (listeners.IsEmpty()) { PTRACE(1, "RAS\tCannot register with Gatekeeper without a H323Listener!"); return FALSE; } H323SetTransportAddresses(*transport, listeners, rrq.m_callSignalAddress); endpoint.SetEndpointTypeInfo(rrq.m_terminalType); endpoint.SetVendorIdentifierInfo(rrq.m_endpointVendor); if (!IsRegistered()) { // only send terminal aliases on full registration reset localId rrq.IncludeOptionalField(H225_RegistrationRequest::e_terminalAlias); H323SetAliasAddresses(endpoint.GetAliasNames(), rrq.m_terminalAlias); for (PINDEX i = 0; i < authenticators.GetSize(); i++) { H235Authenticator & authenticator = authenticators[i]; if (authenticator.UseGkAndEpIdentifiers()) authenticator.SetLocalId(localId); } } rrq.m_willSupplyUUIEs = TRUE; rrq.IncludeOptionalField(H225_RegistrationRequest::e_usageReportingCapability); rrq.m_usageReportingCapability.IncludeOptionalField(H225_RasUsageInfoTypes::e_startTime); rrq.m_usageReportingCapability.IncludeOptionalField(H225_RasUsageInfoTypes::e_endTime); rrq.m_usageReportingCapability.IncludeOptionalField(H225_RasUsageInfoTypes::e_terminationCause); rrq.IncludeOptionalField(H225_RegistrationRequest::e_supportsAltGK); if (!gatekeeperIdentifier) { rrq.IncludeOptionalField(H225_RegistrationRequest::e_gatekeeperIdentifier); rrq.m_gatekeeperIdentifier = gatekeeperIdentifier; } if (!endpointIdentifier.GetValue().IsEmpty()) { rrq.IncludeOptionalField(H225_RegistrationRequest::e_endpointIdentifier); rrq.m_endpointIdentifier = endpointIdentifier; } PTimeInterval ttl = endpoint.GetGatekeeperTimeToLive(); if (ttl > 0) { rrq.IncludeOptionalField(H225_RegistrationRequest::e_timeToLive); rrq.m_timeToLive = (int)ttl.GetSeconds(); } if (endpoint.CanDisplayAmountString()) { rrq.IncludeOptionalField(H225_RegistrationRequest::e_callCreditCapability); rrq.m_callCreditCapability.IncludeOptionalField(H225_CallCreditCapability::e_canDisplayAmountString); rrq.m_callCreditCapability.m_canDisplayAmountString = TRUE; } if (endpoint.CanEnforceDurationLimit()) { rrq.IncludeOptionalField(H225_RegistrationRequest::e_callCreditCapability); rrq.m_callCreditCapability.IncludeOptionalField(H225_CallCreditCapability::e_canEnforceDurationLimit); rrq.m_callCreditCapability.m_canEnforceDurationLimit = TRUE; } if (assignedGK != NULL) { rrq.IncludeOptionalField(H225_RegistrationRequest::e_assignedGatekeeper); rrq.m_assignedGatekeeper = assignedGK->GetAlternate(); } if (IsRegistered()) { rrq.IncludeOptionalField(H225_RegistrationRequest::e_keepAlive); rrq.m_keepAlive = TRUE; } // After doing full register, do lightweight reregisters from now on discoveryComplete = FALSE; Request request(rrq.m_requestSeqNum, pdu); if (MakeRequest(request)) return TRUE; PTRACE(3, "RAS\tFailed registration of " << endpointIdentifier << " with " << gatekeeperIdentifier); switch (request.responseResult) { case Request::RejectReceived : switch (request.rejectReason) { case H225_RegistrationRejectReason::e_discoveryRequired : // If have been told by GK that we need to discover it again, set flag // for next register done by timeToLive handler to do discovery requiresDiscovery = TRUE; // Do next case case H225_RegistrationRejectReason::e_fullRegistrationRequired : registrationFailReason = GatekeeperLostRegistration; // Set timer to retry registration reregisterNow = TRUE; monitorTickle.Signal(); break; // Onse below here are permananent errors, so don't try again case H225_RegistrationRejectReason::e_invalidCallSignalAddress : registrationFailReason = InvalidListener; break; case H225_RegistrationRejectReason::e_duplicateAlias : registrationFailReason = DuplicateAlias; break; case H225_RegistrationRejectReason::e_securityDenial : registrationFailReason = SecurityDenied; break; case H225_RegistrationRejectReason::e_neededFeatureNotSupported : registrationFailReason = NeededFeatureNotSupported; break; default : registrationFailReason = (RegistrationFailReasons)(request.rejectReason|RegistrationRejectReasonMask); break; } break; case Request::BadCryptoTokens : registrationFailReason = SecurityDenied; break; default : registrationFailReason = TransportError; break; } return FALSE; } PBoolean H323Gatekeeper::OnReceiveRegistrationConfirm(const H225_RegistrationConfirm & rcf) { if (!H225_RAS::OnReceiveRegistrationConfirm(rcf)) return FALSE; registrationFailReason = RegistrationSuccessful; endpointIdentifier = rcf.m_endpointIdentifier; PTRACE(3, "RAS\tRegistered " << endpointIdentifier << " with " << gatekeeperIdentifier); if (rcf.HasOptionalField(H225_RegistrationConfirm::e_assignedGatekeeper)) SetAssignedGatekeeper(rcf.m_assignedGatekeeper); if (rcf.HasOptionalField(H225_RegistrationConfirm::e_alternateGatekeeper)) SetAlternates(rcf.m_alternateGatekeeper, FALSE); if (rcf.HasOptionalField(H225_RegistrationConfirm::e_timeToLive)) timeToLive = AdjustTimeout(rcf.m_timeToLive); else timeToLive = 0; // zero disables lightweight RRQ // At present only support first call signal address to GK if (rcf.m_callSignalAddress.GetSize() > 0) gkRouteAddress = rcf.m_callSignalAddress[0]; willRespondToIRR = rcf.m_willRespondToIRR; pregrantMakeCall = pregrantAnswerCall = RequireARQ; if (rcf.HasOptionalField(H225_RegistrationConfirm::e_preGrantedARQ)) { if (rcf.m_preGrantedARQ.m_makeCall) pregrantMakeCall = rcf.m_preGrantedARQ.m_useGKCallSignalAddressToMakeCall ? PreGkRoutedARQ : PregrantARQ; if (rcf.m_preGrantedARQ.m_answerCall) pregrantAnswerCall = rcf.m_preGrantedARQ.m_useGKCallSignalAddressToAnswer ? PreGkRoutedARQ : PregrantARQ; if (rcf.m_preGrantedARQ.HasOptionalField(H225_RegistrationConfirm_preGrantedARQ::e_irrFrequencyInCall)) SetInfoRequestRate(AdjustTimeout(rcf.m_preGrantedARQ.m_irrFrequencyInCall)); else ClearInfoRequestRate(); } else ClearInfoRequestRate(); // Remove the endpoint aliases that the gatekeeper did not like and add the // ones that it really wants us to be. if (rcf.HasOptionalField(H225_RegistrationConfirm::e_terminalAlias) && !endpoint.OnGatekeeperAliases(rcf.m_terminalAlias)) { const PStringList & currentAliases = endpoint.GetAliasNames(); PStringList aliasesToChange; PINDEX i, j; for (i = 0; i < rcf.m_terminalAlias.GetSize(); i++) { PString alias = H323GetAliasAddressString(rcf.m_terminalAlias[i]); if (!alias) { for (j = 0; j < currentAliases.GetSize(); j++) { if (alias *= currentAliases[j]) break; } if (j >= currentAliases.GetSize()) aliasesToChange.AppendString(alias); } } for (i = 0; i < aliasesToChange.GetSize(); i++) { PTRACE(2, "RAS\tGatekeeper add of alias \"" << aliasesToChange[i] << '"'); endpoint.AddAliasName(aliasesToChange[i]); } aliasesToChange.RemoveAll(); for (i = 0; i < currentAliases.GetSize(); i++) { for (j = 0; j < rcf.m_terminalAlias.GetSize(); j++) { if (currentAliases[i] *= H323GetAliasAddressString(rcf.m_terminalAlias[j])) break; } if (j >= rcf.m_terminalAlias.GetSize()) aliasesToChange.AppendString(currentAliases[i]); } for (i = 0; i < aliasesToChange.GetSize(); i++) { PTRACE(2, "RAS\tGatekeeper removal of alias \"" << aliasesToChange[i] << '"'); endpoint.RemoveAliasName(aliasesToChange[i]); } } #ifdef H323_H248 if (rcf.HasOptionalField(H225_RegistrationConfirm::e_serviceControl)) OnServiceControlSessions(rcf.m_serviceControl, NULL); #endif // NAT Detection with GNUGK #ifdef H323_GNUGK if (rcf.HasOptionalField(H225_RegistrationConfirm::e_nonStandardData)) { PString NATaddr = rcf.m_nonStandardData.m_data.AsString(); if (!NATaddr.IsEmpty()) { if (NATaddr.Left(4) == "NAT=") { endpoint.OnGatekeeperNATDetect(NATaddr.Right(NATaddr.GetLength()-4),endpointIdentifier.GetValue(),gkRouteAddress); } else { endpoint.OnGatekeeperOpenNATDetect(endpointIdentifier.GetValue(),gkRouteAddress); } } } #endif endpoint.OnRegistrationConfirm(gkRouteAddress); return TRUE; } PBoolean H323Gatekeeper::OnReceiveRegistrationReject(const H225_RegistrationReject & rrj) { if (!H225_RAS::OnReceiveRegistrationReject(rrj)) return FALSE; if (rrj.HasOptionalField(H225_RegistrationReject::e_assignedGatekeeper)) SetAssignedGatekeeper(rrj.m_assignedGatekeeper); else if (rrj.HasOptionalField(H225_RegistrationReject::e_altGKInfo)) SetAlternates(rrj.m_altGKInfo.m_alternateGatekeeper, rrj.m_altGKInfo.m_altGKisPermanent); else endpoint.OnRegistrationReject(); return TRUE; } void H323Gatekeeper::ReRegisterNow() { PTRACE(3, "RAS\tforcing reregistration"); RegistrationTimeToLive(); } void H323Gatekeeper::RegistrationTimeToLive() { PTRACE(3, "RAS\tTime To Live reregistration"); if (requiresDiscovery) { PTRACE(2, "RAS\tRepeating discovery on gatekeepers request."); H323RasPDU pdu; Request request(SetupGatekeeperRequest(pdu), pdu); if (!MakeRequest(request) || !discoveryComplete) { PTRACE(2, "RAS\tRediscovery failed, retrying in 1 minute."); timeToLive = PTimeInterval(0, 0, 1); return; } requiresDiscovery = FALSE; } if (!RegistrationRequest(autoReregister)) { PTRACE(2,"RAS\tTime To Live reregistration failed, continue retrying."); endpoint.OnRegisterTTLFail(); } } PBoolean H323Gatekeeper::UnregistrationRequest(int reason) { if (PAssertNULL(transport) == NULL) return FALSE; PINDEX i; H323RasPDU pdu; H225_UnregistrationRequest & urq = pdu.BuildUnregistrationRequest(GetNextSequenceNumber()); H225_TransportAddress rasAddress; transport->SetUpTransportPDU(rasAddress, TRUE); H323SetTransportAddresses(*transport, endpoint.GetInterfaceAddresses(TRUE, transport), urq.m_callSignalAddress); urq.IncludeOptionalField(H225_UnregistrationRequest::e_endpointAlias); H323SetAliasAddresses(endpoint.GetAliasNames(), urq.m_endpointAlias); if (!gatekeeperIdentifier) { urq.IncludeOptionalField(H225_UnregistrationRequest::e_gatekeeperIdentifier); urq.m_gatekeeperIdentifier = gatekeeperIdentifier; } if (!endpointIdentifier.GetValue().IsEmpty()) { urq.IncludeOptionalField(H225_UnregistrationRequest::e_endpointIdentifier); urq.m_endpointIdentifier = endpointIdentifier; } if (reason >= 0) { urq.IncludeOptionalField(H225_UnregistrationRequest::e_reason); urq.m_reason = reason; } Request request(urq.m_requestSeqNum, pdu); PBoolean requestResult = MakeRequest(request); for (i = 0; i < alternates.GetSize(); i++) { AlternateInfo & altgk = alternates[i]; if (altgk.registrationState == AlternateInfo::IsRegistered) { Connect(altgk.rasAddress,altgk.gatekeeperIdentifier); UnregistrationRequest(reason); } } if (requestResult) return TRUE; switch (request.responseResult) { case Request::NoResponseReceived : registrationFailReason = TransportError; timeToLive = 0; // zero disables lightweight RRQ break; case Request::BadCryptoTokens : registrationFailReason = SecurityDenied; timeToLive = 0; // zero disables lightweight RRQ break; default : break; } return !IsRegistered(); } PBoolean H323Gatekeeper::OnReceiveUnregistrationConfirm(const H225_UnregistrationConfirm & ucf) { if (!H225_RAS::OnReceiveUnregistrationConfirm(ucf)) return FALSE; registrationFailReason = UnregisteredLocally; timeToLive = 0; // zero disables lightweight RRQ endpoint.OnUnRegisterConfirm(); return TRUE; } PBoolean H323Gatekeeper::OnReceiveUnregistrationRequest(const H225_UnregistrationRequest & urq) { if (!H225_RAS::OnReceiveUnregistrationRequest(urq)) return FALSE; PTRACE(2, "RAS\tUnregistration received"); if (!urq.HasOptionalField(H225_UnregistrationRequest::e_gatekeeperIdentifier) || urq.m_gatekeeperIdentifier.GetValue() != gatekeeperIdentifier) { PTRACE(1, "RAS\tInconsistent gatekeeperIdentifier!"); return FALSE; } if (!urq.HasOptionalField(H225_UnregistrationRequest::e_endpointIdentifier) || urq.m_endpointIdentifier != endpointIdentifier) { PTRACE(1, "RAS\tInconsistent endpointIdentifier!"); return FALSE; } endpoint.ClearAllCalls(H323Connection::EndedByGatekeeper, FALSE); PTRACE(3, "RAS\tUnregistered, calls cleared"); registrationFailReason = UnregisteredByGatekeeper; // timeToLive = 0; // zero disables lightweight RRQ if (urq.HasOptionalField(H225_UnregistrationRequest::e_alternateGatekeeper)) SetAlternates(urq.m_alternateGatekeeper, FALSE); H323RasPDU response(authenticators); response.BuildUnregistrationConfirm(urq.m_requestSeqNum); PBoolean ok = WritePDU(response); if (autoReregister) { PTRACE(3, "RAS\tReregistering by setting timeToLive"); reregisterNow = TRUE; monitorTickle.Signal(); } else timeToLive = 0; // zero disables lightweight RRQ endpoint.OnUnRegisterRequest(); return ok; } PBoolean H323Gatekeeper::OnReceiveUnregistrationReject(const H225_UnregistrationReject & urj) { if (!H225_RAS::OnReceiveUnregistrationReject(urj)) return FALSE; if (lastRequest->rejectReason != H225_UnregRejectReason::e_callInProgress) { registrationFailReason = UnregisteredLocally; timeToLive = 0; // zero disables lightweight RRQ } return TRUE; } PBoolean H323Gatekeeper::LocationRequest(const PString & alias, H323TransportAddress & address) { PStringList aliases; aliases.AppendString(alias); return LocationRequest(aliases, address); } PBoolean H323Gatekeeper::LocationRequest(const PStringList & aliases, H323TransportAddress & address) { if (PAssertNULL(transport) == NULL) return FALSE; H323RasPDU pdu; H225_LocationRequest & lrq = pdu.BuildLocationRequest(GetNextSequenceNumber()); H323SetAliasAddresses(aliases, lrq.m_destinationInfo); if (!endpointIdentifier.GetValue().IsEmpty()) { lrq.IncludeOptionalField(H225_LocationRequest::e_endpointIdentifier); lrq.m_endpointIdentifier = endpointIdentifier; } transport->SetUpTransportPDU(lrq.m_replyAddress, TRUE); lrq.IncludeOptionalField(H225_LocationRequest::e_sourceInfo); H323SetAliasAddresses(endpoint.GetAliasNames(), lrq.m_sourceInfo); if (!gatekeeperIdentifier) { lrq.IncludeOptionalField(H225_LocationRequest::e_gatekeeperIdentifier); lrq.m_gatekeeperIdentifier = gatekeeperIdentifier; } Request request(lrq.m_requestSeqNum, pdu); request.responseInfo = &address; if (!MakeRequest(request)) return FALSE; // sanity check the address - some Gks return address 0.0.0.0 and port 0 PIPSocket::Address ipAddr; WORD port; return address.GetIpAndPort(ipAddr, port) && (port != 0); } H323Gatekeeper::AdmissionResponse::AdmissionResponse() { rejectReason = UINT_MAX; gatekeeperRouted = FALSE; endpointCount = 1; transportAddress = NULL; accessTokenData = NULL; aliasAddresses = NULL; destExtraCallInfo = NULL; } struct AdmissionRequestResponseInfo { AdmissionRequestResponseInfo( H323Gatekeeper::AdmissionResponse & r, H323Connection & c ) : param(r), connection(c) { } H323Gatekeeper::AdmissionResponse & param; H323Connection & connection; unsigned allocatedBandwidth; unsigned uuiesRequested; PString accessTokenOID1; PString accessTokenOID2; }; PBoolean H323Gatekeeper::AdmissionRequest(H323Connection & connection, AdmissionResponse & response, PBoolean ignorePreGrantedARQ) { PBoolean answeringCall = connection.HadAnsweredCall(); if (!ignorePreGrantedARQ) { switch (answeringCall ? pregrantAnswerCall : pregrantMakeCall) { case RequireARQ : break; case PregrantARQ : return TRUE; case PreGkRoutedARQ : if (gkRouteAddress.IsEmpty()) { response.rejectReason = UINT_MAX; return FALSE; } if (response.transportAddress != NULL) *response.transportAddress = gkRouteAddress; response.gatekeeperRouted = TRUE; return TRUE; } } H323RasPDU pdu; H225_AdmissionRequest & arq = pdu.BuildAdmissionRequest(GetNextSequenceNumber()); arq.m_callType.SetTag(H225_CallType::e_pointToPoint); arq.m_endpointIdentifier = endpointIdentifier; arq.m_answerCall = answeringCall; arq.m_canMapAlias = TRUE; // Stack supports receiving a different number in the ACF // to the one sent in the ARQ arq.m_willSupplyUUIEs = TRUE; if (!gatekeeperIdentifier) { arq.IncludeOptionalField(H225_AdmissionRequest::e_gatekeeperIdentifier); arq.m_gatekeeperIdentifier = gatekeeperIdentifier; } PString destInfo = connection.GetRemotePartyName(); arq.m_srcInfo.SetSize(1); if (answeringCall) { H323SetAliasAddress(destInfo, arq.m_srcInfo[0]); if (!connection.GetLocalPartyName()) { arq.IncludeOptionalField(H225_AdmissionRequest::e_destinationInfo); H323SetAliasAddresses(connection.GetLocalAliasNames(), arq.m_destinationInfo); } } else { H323SetAliasAddresses(connection.GetLocalAliasNames(), arq.m_srcInfo); if (response.transportAddress == NULL || destInfo != *response.transportAddress) { arq.IncludeOptionalField(H225_AdmissionRequest::e_destinationInfo); arq.m_destinationInfo.SetSize(1); H323SetAliasAddress(destInfo, arq.m_destinationInfo[0]); } } const H323Transport * signallingChannel = connection.GetSignallingChannel(); if (answeringCall) { arq.IncludeOptionalField(H225_AdmissionRequest::e_srcCallSignalAddress); signallingChannel->SetUpTransportPDU(arq.m_srcCallSignalAddress, FALSE); arq.IncludeOptionalField(H225_AdmissionRequest::e_destCallSignalAddress); signallingChannel->SetUpTransportPDU(arq.m_destCallSignalAddress, TRUE); } else { if (signallingChannel != NULL && signallingChannel->IsOpen()) { arq.IncludeOptionalField(H225_AdmissionRequest::e_srcCallSignalAddress); signallingChannel->SetUpTransportPDU(arq.m_srcCallSignalAddress, TRUE); } if (response.transportAddress != NULL && !response.transportAddress->IsEmpty()) { arq.IncludeOptionalField(H225_AdmissionRequest::e_destCallSignalAddress); response.transportAddress->SetPDU(arq.m_destCallSignalAddress); } } arq.m_bandWidth = connection.GetBandwidthRequired(); arq.m_callReferenceValue = connection.GetCallReference(); arq.m_conferenceID = connection.GetConferenceIdentifier(); arq.m_callIdentifier.m_guid = connection.GetCallIdentifier(); #ifdef H323_H450 connection.SetCallLinkage(pdu); #endif AdmissionRequestResponseInfo info(response, connection); info.accessTokenOID1 = connection.GetGkAccessTokenOID(); PINDEX comma = info.accessTokenOID1.Find(','); if (comma == P_MAX_INDEX) info.accessTokenOID2 = info.accessTokenOID1; else { info.accessTokenOID2 = info.accessTokenOID1.Mid(comma+1); info.accessTokenOID1.Delete(comma, P_MAX_INDEX); } connection.OnSendARQ(arq); Request request(arq.m_requestSeqNum, pdu); request.responseInfo = &info; if (!authenticators.IsEmpty()) { pdu.Prepare(arq.m_tokens, H225_AdmissionRequest::e_tokens, arq.m_cryptoTokens, H225_AdmissionRequest::e_cryptoTokens); H235Authenticators adjustedAuthenticators; if (connection.GetAdmissionRequestAuthentication(arq, adjustedAuthenticators)) { PTRACE(3, "RAS\tAuthenticators credentials replaced with \"" << setfill(',') << adjustedAuthenticators << setfill(' ') << "\" during ARQ"); for (PINDEX i = 0; i < adjustedAuthenticators.GetSize(); i++) { H235Authenticator & authenticator = adjustedAuthenticators[i]; if (authenticator.UseGkAndEpIdentifiers()) authenticator.SetRemoteId(gatekeeperIdentifier); } adjustedAuthenticators.PreparePDU(pdu, arq.m_tokens, H225_AdmissionRequest::e_tokens, arq.m_cryptoTokens, H225_AdmissionRequest::e_cryptoTokens); pdu.SetAuthenticators(adjustedAuthenticators); } } if (!MakeRequest(request)) { response.rejectReason = request.rejectReason; // See if we are registered. if (request.responseResult == Request::RejectReceived && response.rejectReason != H225_AdmissionRejectReason::e_callerNotRegistered && response.rejectReason != H225_AdmissionRejectReason::e_invalidEndpointIdentifier) return FALSE; PTRACE(2, "RAS\tEndpoint has become unregistered during ARQ from gatekeeper " << gatekeeperIdentifier); // Have been told we are not registered (or gk offline) switch (request.responseResult) { case Request::NoResponseReceived : registrationFailReason = TransportError; response.rejectReason = UINT_MAX; break; case Request::BadCryptoTokens : registrationFailReason = SecurityDenied; response.rejectReason = H225_AdmissionRejectReason::e_securityDenial; break; default : registrationFailReason = GatekeeperLostRegistration; } // If we are not registered and auto register is set ... if (!autoReregister) return FALSE; // Then immediately reregister. if (!RegistrationRequest(autoReregister)) return FALSE; // Reset the gk info in ARQ arq.m_endpointIdentifier = endpointIdentifier; if (!gatekeeperIdentifier) { arq.IncludeOptionalField(H225_AdmissionRequest::e_gatekeeperIdentifier); arq.m_gatekeeperIdentifier = gatekeeperIdentifier; } else arq.RemoveOptionalField(H225_AdmissionRequest::e_gatekeeperIdentifier); // Is new request so need new sequence number as well. arq.m_requestSeqNum = GetNextSequenceNumber(); request.sequenceNumber = arq.m_requestSeqNum; if (!MakeRequest(request)) { response.rejectReason = request.responseResult == Request::RejectReceived ? request.rejectReason : UINT_MAX; return FALSE; } } connection.SetBandwidthAvailable(info.allocatedBandwidth); connection.SetUUIEsRequested(info.uuiesRequested); return TRUE; } void H323Gatekeeper::OnSendAdmissionRequest(H225_AdmissionRequest & /*arq*/) { // Override default function as it sets crypto tokens and this is really // done by the AdmissionRequest() function. } static unsigned GetUUIEsRequested(const H225_UUIEsRequested & pdu) { unsigned uuiesRequested = 0; if ((PBoolean)pdu.m_setup) uuiesRequested |= (1< 0) { PTRACE(4, "Looking for OID " << info.accessTokenOID1 << " in ACF to copy."); for (PINDEX i = 0; i < tokens.GetSize(); i++) { if (tokens[i].m_tokenOID == info.accessTokenOID1) { PTRACE(4, "Looking for OID " << info.accessTokenOID2 << " in token to copy."); if (tokens[i].HasOptionalField(H235_ClearToken::e_nonStandard) && tokens[i].m_nonStandard.m_nonStandardIdentifier == info.accessTokenOID2) { PTRACE(4, "Copying ACF nonStandard OctetString."); accessTokenData = tokens[i].m_nonStandard.m_data; break; } } } } } PBoolean H323Gatekeeper::OnReceiveAdmissionConfirm(const H225_AdmissionConfirm & acf) { if (!H225_RAS::OnReceiveAdmissionConfirm(acf)) return FALSE; AdmissionRequestResponseInfo & info = *(AdmissionRequestResponseInfo *)lastRequest->responseInfo; info.allocatedBandwidth = acf.m_bandWidth; if (info.param.transportAddress != NULL) *info.param.transportAddress = acf.m_destCallSignalAddress; info.param.gatekeeperRouted = acf.m_callModel.GetTag() == H225_CallModel::e_gatekeeperRouted; // Remove the endpoint aliases that the gatekeeper did not like and add the // ones that it really wants us to be. if (info.param.aliasAddresses != NULL && acf.HasOptionalField(H225_AdmissionConfirm::e_destinationInfo)) { PTRACE(3, "RAS\tGatekeeper specified " << acf.m_destinationInfo.GetSize() << " aliases in ACF"); *info.param.aliasAddresses = acf.m_destinationInfo; } if (acf.HasOptionalField(H225_AdmissionConfirm::e_uuiesRequested)) info.uuiesRequested = GetUUIEsRequested(acf.m_uuiesRequested); if (info.param.destExtraCallInfo != NULL && acf.HasOptionalField(H225_AdmissionConfirm::e_destExtraCallInfo)) *info.param.destExtraCallInfo = acf.m_destExtraCallInfo; if (info.param.accessTokenData != NULL && acf.HasOptionalField(H225_AdmissionConfirm::e_tokens)) ExtractToken(info, acf.m_tokens, *info.param.accessTokenData); if (info.param.transportAddress != NULL) { PINDEX count = 1; for (PINDEX i = 0; i < acf.m_alternateEndpoints.GetSize() && count < info.param.endpointCount; i++) { if (acf.m_alternateEndpoints[i].HasOptionalField(H225_Endpoint::e_callSignalAddress) && acf.m_alternateEndpoints[i].m_callSignalAddress.GetSize() > 0) { info.param.transportAddress[count] = acf.m_alternateEndpoints[i].m_callSignalAddress[0]; if (info.param.accessTokenData != NULL) ExtractToken(info, acf.m_alternateEndpoints[i].m_tokens, info.param.accessTokenData[count]); count++; } } info.param.endpointCount = count; } if (acf.HasOptionalField(H225_AdmissionConfirm::e_irrFrequency)) SetInfoRequestRate(AdjustTimeout(acf.m_irrFrequency)); willRespondToIRR = acf.m_willRespondToIRR; info.connection.OnReceivedACF(acf); #ifdef H323_H248 if (acf.HasOptionalField(H225_AdmissionConfirm::e_serviceControl)) OnServiceControlSessions(acf.m_serviceControl, &info.connection); #endif return TRUE; } PBoolean H323Gatekeeper::OnReceiveAdmissionReject(const H225_AdmissionReject & arj) { if (!H225_RAS::OnReceiveAdmissionReject(arj)) return FALSE; AdmissionRequestResponseInfo & info = *(AdmissionRequestResponseInfo *)lastRequest->responseInfo; info.connection.OnReceivedARJ(arj); #ifdef H323_H248 if (arj.HasOptionalField(H225_AdmissionConfirm::e_serviceControl)) OnServiceControlSessions(arj.m_serviceControl,&info.connection); #endif return TRUE; } static void SetRasUsageInformation(const H323Connection & connection, H225_RasUsageInformation & usage) { unsigned time = connection.GetAlertingTime().GetTimeInSeconds(); if (time != 0) { usage.IncludeOptionalField(H225_RasUsageInformation::e_alertingTime); usage.m_alertingTime = time; } time = connection.GetConnectionStartTime().GetTimeInSeconds(); if (time != 0) { usage.IncludeOptionalField(H225_RasUsageInformation::e_connectTime); usage.m_connectTime = time; } time = connection.GetConnectionEndTime().GetTimeInSeconds(); if (time != 0) { usage.IncludeOptionalField(H225_RasUsageInformation::e_endTime); usage.m_endTime = time; } } PBoolean H323Gatekeeper::DisengageRequest(const H323Connection & connection, unsigned reason) { H323RasPDU pdu; H225_DisengageRequest & drq = pdu.BuildDisengageRequest(GetNextSequenceNumber()); drq.m_endpointIdentifier = endpointIdentifier; drq.m_conferenceID = connection.GetConferenceIdentifier(); drq.m_callReferenceValue = connection.GetCallReference(); drq.m_callIdentifier.m_guid = connection.GetCallIdentifier(); drq.m_disengageReason.SetTag(reason); drq.m_answeredCall = connection.HadAnsweredCall(); drq.IncludeOptionalField(H225_DisengageRequest::e_usageInformation); SetRasUsageInformation(connection, drq.m_usageInformation); drq.IncludeOptionalField(H225_DisengageRequest::e_terminationCause); drq.m_terminationCause.SetTag(H225_CallTerminationCause::e_releaseCompleteReason); Q931::CauseValues cause = H323TranslateFromCallEndReason(connection, drq.m_terminationCause); if (cause != Q931::ErrorInCauseIE) { drq.m_terminationCause.SetTag(H225_CallTerminationCause::e_releaseCompleteCauseIE); PASN_OctetString & rcReason = drq.m_terminationCause; rcReason.SetSize(2); rcReason[0] = 0x80; rcReason[1] = (BYTE)(0x80|cause); } if (!gatekeeperIdentifier) { drq.IncludeOptionalField(H225_DisengageRequest::e_gatekeeperIdentifier); drq.m_gatekeeperIdentifier = gatekeeperIdentifier; } connection.OnSendDRQ(drq); Request request(drq.m_requestSeqNum, pdu); return MakeRequestWithReregister(request, H225_DisengageRejectReason::e_notRegistered); } PBoolean H323Gatekeeper::OnReceiveDisengageRequest(const H225_DisengageRequest & drq) { if (!H225_RAS::OnReceiveDisengageRequest(drq)) return FALSE; OpalGloballyUniqueID id = NULL; if (drq.HasOptionalField(H225_DisengageRequest::e_callIdentifier)) id = drq.m_callIdentifier.m_guid; if (id == NULL) id = drq.m_conferenceID; H323RasPDU response(authenticators); H323Connection * connection = endpoint.FindConnectionWithLock(id.AsString()); if (connection == NULL) response.BuildDisengageReject(drq.m_requestSeqNum, H225_DisengageRejectReason::e_requestToDropOther); else { H225_DisengageConfirm & dcf = response.BuildDisengageConfirm(drq.m_requestSeqNum); dcf.IncludeOptionalField(H225_DisengageConfirm::e_usageInformation); SetRasUsageInformation(*connection, dcf.m_usageInformation); connection->ClearCall(H323Connection::EndedByGatekeeper); connection->Unlock(); } #ifdef H323_H248 if (drq.HasOptionalField(H225_DisengageRequest::e_serviceControl)) OnServiceControlSessions(drq.m_serviceControl, connection); #endif return WritePDU(response); } PBoolean H323Gatekeeper::BandwidthRequest(H323Connection & connection, unsigned requestedBandwidth) { H323RasPDU pdu; H225_BandwidthRequest & brq = pdu.BuildBandwidthRequest(GetNextSequenceNumber()); brq.m_endpointIdentifier = endpointIdentifier; brq.m_conferenceID = connection.GetConferenceIdentifier(); brq.m_callReferenceValue = connection.GetCallReference(); brq.m_callIdentifier.m_guid = connection.GetCallIdentifier(); brq.m_bandWidth = requestedBandwidth; brq.IncludeOptionalField(H225_BandwidthRequest::e_usageInformation); SetRasUsageInformation(connection, brq.m_usageInformation); Request request(brq.m_requestSeqNum, pdu); unsigned allocatedBandwidth; request.responseInfo = &allocatedBandwidth; if (!MakeRequestWithReregister(request, H225_BandRejectReason::e_notBound)) return FALSE; connection.SetBandwidthAvailable(allocatedBandwidth); return TRUE; } PBoolean H323Gatekeeper::OnReceiveBandwidthConfirm(const H225_BandwidthConfirm & bcf) { if (!H225_RAS::OnReceiveBandwidthConfirm(bcf)) return FALSE; if (lastRequest->responseInfo != NULL) *(unsigned *)lastRequest->responseInfo = bcf.m_bandWidth; return TRUE; } PBoolean H323Gatekeeper::OnReceiveBandwidthRequest(const H225_BandwidthRequest & brq) { if (!H225_RAS::OnReceiveBandwidthRequest(brq)) return FALSE; OpalGloballyUniqueID id = brq.m_callIdentifier.m_guid; H323Connection * connection = endpoint.FindConnectionWithLock(id.AsString()); H323RasPDU response(authenticators); if (connection == NULL) response.BuildBandwidthReject(brq.m_requestSeqNum, H225_BandRejectReason::e_invalidConferenceID); else { if (connection->SetBandwidthAvailable(brq.m_bandWidth)) response.BuildBandwidthConfirm(brq.m_requestSeqNum, brq.m_bandWidth); else response.BuildBandwidthReject(brq.m_requestSeqNum, H225_BandRejectReason::e_insufficientResources); connection->Unlock(); } return WritePDU(response); } void H323Gatekeeper::SetInfoRequestRate(const PTimeInterval & rate) { if (rate < infoRequestRate.GetResetTime() || infoRequestRate.GetResetTime() == 0) { // Have to be sneaky here becuase we do not want to actually change the // amount of time to run on the timer. PTimeInterval timeToGo = infoRequestRate; infoRequestRate = rate; if (rate > timeToGo) infoRequestRate.PTimeInterval::operator=(timeToGo); } } void H323Gatekeeper::ClearInfoRequestRate() { // Only reset rate to zero (disabled) if no calls present if (endpoint.GetAllConnections().IsEmpty()) infoRequestRate = 0; } H225_InfoRequestResponse & H323Gatekeeper::BuildInfoRequestResponse(H323RasPDU & response, unsigned seqNum) { H225_InfoRequestResponse & irr = response.BuildInfoRequestResponse(seqNum); endpoint.SetEndpointTypeInfo(irr.m_endpointType); irr.m_endpointIdentifier = endpointIdentifier; transport->SetUpTransportPDU(irr.m_rasAddress, TRUE); H323SetTransportAddresses(*transport, endpoint.GetInterfaceAddresses(TRUE, transport), irr.m_callSignalAddress); irr.IncludeOptionalField(H225_InfoRequestResponse::e_endpointAlias); H323SetAliasAddresses(endpoint.GetAliasNames(), irr.m_endpointAlias); return irr; } PBoolean H323Gatekeeper::SendUnsolicitedIRR(H225_InfoRequestResponse & irr, H323RasPDU & response) { irr.m_unsolicited = TRUE; if (willRespondToIRR) { PTRACE(4, "RAS\tSending unsolicited IRR and awaiting acknowledgement"); Request request(irr.m_requestSeqNum, response); return MakeRequest(request); } PTRACE(4, "RAS\tSending unsolicited IRR and without acknowledgement"); response.SetAuthenticators(authenticators); return WritePDU(response); } static void AddInfoRequestResponseCall(H225_InfoRequestResponse & irr, const H323Connection & connection) { irr.IncludeOptionalField(H225_InfoRequestResponse::e_perCallInfo); PINDEX sz = irr.m_perCallInfo.GetSize(); if (!irr.m_perCallInfo.SetSize(sz+1)) return; H225_InfoRequestResponse_perCallInfo_subtype & info = irr.m_perCallInfo[sz]; info.m_callReferenceValue = connection.GetCallReference(); info.m_callIdentifier.m_guid = connection.GetCallIdentifier(); info.m_conferenceID = connection.GetConferenceIdentifier(); info.IncludeOptionalField(H225_InfoRequestResponse_perCallInfo_subtype::e_originator); info.m_originator = !connection.HadAnsweredCall(); H323_RTP_Session * session = connection.GetSessionCallbacks(RTP_Session::DefaultAudioSessionID); if (session != NULL) { info.IncludeOptionalField(H225_InfoRequestResponse_perCallInfo_subtype::e_audio); info.m_audio.SetSize(1); session->OnSendRasInfo(info.m_audio[0]); } session = connection.GetSessionCallbacks(RTP_Session::DefaultVideoSessionID); if (session != NULL) { info.IncludeOptionalField(H225_InfoRequestResponse_perCallInfo_subtype::e_video); info.m_video.SetSize(1); session->OnSendRasInfo(info.m_video[0]); } const H323Transport & controlChannel = connection.GetControlChannel(); controlChannel.SetUpTransportPDU(info.m_h245.m_recvAddress, TRUE); controlChannel.SetUpTransportPDU(info.m_h245.m_sendAddress, FALSE); info.m_callType.SetTag(H225_CallType::e_pointToPoint); info.m_bandWidth = connection.GetBandwidthUsed(); info.m_callModel.SetTag(connection.IsGatekeeperRouted() ? H225_CallModel::e_gatekeeperRouted : H225_CallModel::e_direct); info.IncludeOptionalField(H225_InfoRequestResponse_perCallInfo_subtype::e_usageInformation); SetRasUsageInformation(connection, info.m_usageInformation); } static PBoolean AddAllInfoRequestResponseCall(H225_InfoRequestResponse & irr, H323EndPoint & endpoint, const PStringList & tokens) { PBoolean addedOne = FALSE; for (PINDEX i = 0; i < tokens.GetSize(); i++) { H323Connection * connection = endpoint.FindConnectionWithLock(tokens[i]); if (connection != NULL) { AddInfoRequestResponseCall(irr, *connection); connection->OnSendIRR(irr); connection->Unlock(); addedOne = TRUE; } } return addedOne; } void H323Gatekeeper::InfoRequestResponse() { PStringList tokens = endpoint.GetAllConnections(); if (tokens.IsEmpty()) return; H323RasPDU response; H225_InfoRequestResponse & irr = BuildInfoRequestResponse(response, GetNextSequenceNumber()); if (AddAllInfoRequestResponseCall(irr, endpoint, tokens)) SendUnsolicitedIRR(irr, response); } void H323Gatekeeper::InfoRequestResponse(const H323Connection & connection) { H323RasPDU response; H225_InfoRequestResponse & irr = BuildInfoRequestResponse(response, GetNextSequenceNumber()); AddInfoRequestResponseCall(irr, connection); connection.OnSendIRR(irr); SendUnsolicitedIRR(irr, response); } void H323Gatekeeper::InfoRequestResponse(const H323Connection & connection, const H225_H323_UU_PDU & pdu, PBoolean sent) { // Are unknown Q.931 PDU if (pdu.m_h323_message_body.GetTag() == P_MAX_INDEX) return; // Check mask of things to report on if ((connection.GetUUIEsRequested() & (1<SetUUIEsRequested(::GetUUIEsRequested(irq.m_uuiesRequested)); AddInfoRequestResponseCall(irr, *connection); connection->Unlock(); } } if (!irq.HasOptionalField(H225_InfoRequest::e_replyAddress)) return WritePDU(response); H323TransportAddress replyAddress = irq.m_replyAddress; if (replyAddress.IsEmpty()) return FALSE; H323TransportAddress oldAddress = transport->GetRemoteAddress(); PBoolean ok = transport->ConnectTo(replyAddress) && WritePDU(response); transport->ConnectTo(oldAddress); return ok; } PBoolean H323Gatekeeper::SendServiceControlIndication() { PTRACE(3, "RAS\tSending Empty ServiceControlIndication"); H323RasPDU pdu; H225_ServiceControlIndication & sci = pdu.BuildServiceControlIndication(GetNextSequenceNumber()); sci.m_serviceControl.SetSize(0); Request request(sci.m_requestSeqNum, pdu); return MakeRequest(request); } PBoolean H323Gatekeeper::OnReceiveServiceControlIndication(const H225_ServiceControlIndication & sci) { if (!H225_RAS::OnReceiveServiceControlIndication(sci)) return FALSE; H323Connection * connection = NULL; if (sci.HasOptionalField(H225_ServiceControlIndication::e_callSpecific)) { OpalGloballyUniqueID id = sci.m_callSpecific.m_callIdentifier.m_guid; if (id.IsNULL()) id = sci.m_callSpecific.m_conferenceID; connection = endpoint.FindConnectionWithLock(id.AsString()); } #ifdef H323_H248 OnServiceControlSessions(sci.m_serviceControl, connection); #endif H323RasPDU response(authenticators); response.BuildServiceControlResponse(sci.m_requestSeqNum); return WritePDU(response); } #ifdef H323_H248 void H323Gatekeeper::OnServiceControlSessions(const H225_ArrayOf_ServiceControlSession & serviceControl, H323Connection * connection) { for (PINDEX i = 0; i < serviceControl.GetSize(); i++) { H225_ServiceControlSession & pdu = serviceControl[i]; H323ServiceControlSession * session = NULL; unsigned sessionId = pdu.m_sessionId; if (serviceControlSessions.Contains(sessionId)) { session = &serviceControlSessions[sessionId]; if (pdu.HasOptionalField(H225_ServiceControlSession::e_contents)) { if (!session->OnReceivedPDU(pdu.m_contents)) { PTRACE(2, "SvcCtrl\tService control for session has changed!"); session = NULL; } } } if (session == NULL && pdu.HasOptionalField(H225_ServiceControlSession::e_contents)) { session = endpoint.CreateServiceControlSession(pdu.m_contents); serviceControlSessions.SetAt(sessionId, session); } if (session != NULL) endpoint.OnServiceControlSession(pdu.m_reason.GetTag(),sessionId, *session, connection); } } #endif // H323_H248 void H323Gatekeeper::SetPassword(const PString & password, const PString & username) { localId = username; if (localId.IsEmpty()) localId = endpoint.GetLocalUserName(); for (PINDEX i = 0; i < authenticators.GetSize(); i++) { authenticators[i].SetLocalId(localId); authenticators[i].SetPassword(password); } } void H323Gatekeeper::MonitorMain(PThread &, INT) { PTRACE(3, "RAS\tBackground thread started"); for (;;) { monitorTickle.Wait(); if (monitorStop) break; if (reregisterNow || (!timeToLive.IsRunning() && timeToLive.GetResetTime() > 0)) { RegistrationTimeToLive(); timeToLive.Reset(); } if (!infoRequestRate.IsRunning() && infoRequestRate.GetResetTime() > 0) { InfoRequestResponse(); infoRequestRate.Reset(); } } PTRACE(3, "RAS\tBackground thread ended"); } void H323Gatekeeper::TickleMonitor(PTimer &, INT) { monitorTickle.Signal(); } void H323Gatekeeper::SetAlternates(const H225_ArrayOf_AlternateGK & alts, PBoolean permanent) { PINDEX i; if (!alternatePermanent) { // don't want to replace alternates gatekeepers if this is an alternate and it's not permanent for (i = 0; i < alternates.GetSize(); i++) { if (transport->GetRemoteAddress().IsEquivalent(alternates[i].rasAddress) && gatekeeperIdentifier == alternates[i].gatekeeperIdentifier) return; } } alternates.RemoveAll(); if (assignedGK != NULL) alternates.Append(assignedGK); for (i = 0; i < alts.GetSize(); i++) { AlternateInfo * alt = new AlternateInfo(alts[i]); if (alt->rasAddress.IsEmpty()) delete alt; else alternates.Append(alt); } alternatePermanent = permanent; PTRACE(3, "RAS\tSet alternate gatekeepers:\n" << setfill('\n') << alternates << setfill(' ')); } void H323Gatekeeper::SetAssignedGatekeeper(const H225_AlternateGK & gk) { assignedGK = new AlternateInfo(gk); } PBoolean H323Gatekeeper::GetAssignedGatekeeper(H225_AlternateGK & gk) { if (assignedGK == NULL) return FALSE; gk = assignedGK->GetAlternate(); return TRUE; } PBoolean H323Gatekeeper::MakeRequestWithReregister(Request & request, unsigned unregisteredTag) { if (MakeRequest(request)) return TRUE; if (request.responseResult == Request::RejectReceived && request.rejectReason != unregisteredTag) return FALSE; PTRACE(2, "RAS\tEndpoint has become unregistered from gatekeeper " << gatekeeperIdentifier); // Have been told we are not registered (or gk offline) switch (request.responseResult) { case Request::NoResponseReceived : registrationFailReason = TransportError; break; case Request::BadCryptoTokens : registrationFailReason = SecurityDenied; break; default : registrationFailReason = GatekeeperLostRegistration; } // If we are not registered and auto register is set ... if (!autoReregister) return FALSE; reregisterNow = TRUE; monitorTickle.Signal(); return FALSE; } void H323Gatekeeper::Connect(const H323TransportAddress & address, const PString & gkid) { if (transport == NULL) transport = new H323TransportUDP(endpoint, PIPSocket::Address::GetAny(4)); transport->SetRemoteAddress(address); transport->Connect(); gatekeeperIdentifier = gkid; } PBoolean H323Gatekeeper::MakeRequest(Request & request) { if (PAssertNULL(transport) == NULL) return FALSE; // Set authenticators if not already set by caller requestMutex.Wait(); if (request.requestPDU.GetAuthenticators().IsEmpty()) request.requestPDU.SetAuthenticators(authenticators); /* To be sure that the H323 Cleaner, H225 Caller or Monitor don't set the transport address of the alternate while the other is in timeout. We have to block the function */ H323TransportAddress tempAddr = transport->GetRemoteAddress(); PString tempIdentifier = gatekeeperIdentifier; PINDEX alt = 0; for (;;) { if (H225_RAS::MakeRequest(request)) { if (!alternatePermanent && (transport->GetRemoteAddress() != tempAddr || gatekeeperIdentifier != tempIdentifier)) Connect(tempAddr, tempIdentifier); requestMutex.Signal(); return TRUE; } if (request.responseResult != Request::NoResponseReceived && request.responseResult != Request::TryAlternate) { // try alternate in those cases and see if it's successful requestMutex.Signal(); return FALSE; } AlternateInfo * altInfo; PIPSocket::Address localAddress; WORD localPort; do { if (alt >= alternates.GetSize()) { if (!alternatePermanent) Connect(tempAddr,tempIdentifier); requestMutex.Signal(); return FALSE; } altInfo = &alternates[alt++]; transport->GetLocalAddress().GetIpAndPort(localAddress,localPort); transport->CleanUpOnTermination(); delete transport; transport = new H323TransportUDP(endpoint,localAddress,localPort); transport->SetRemoteAddress (altInfo->rasAddress); transport->Connect(); gatekeeperIdentifier = altInfo->gatekeeperIdentifier; StartChannel(); } while (altInfo->registrationState == AlternateInfo::RegistrationFailed); if (altInfo->registrationState == AlternateInfo::NeedToRegister) { altInfo->registrationState = AlternateInfo::RegistrationFailed; registrationFailReason = TransportError; discoveryComplete = FALSE; H323RasPDU pdu; Request req(SetupGatekeeperRequest(pdu), pdu); if (H225_RAS::MakeRequest(req)) { requestMutex.Signal(); // avoid deadlock... if (RegistrationRequest(autoReregister)) { altInfo->registrationState = AlternateInfo::IsRegistered; // The wanted registration is done, we can return if (request.requestPDU.GetChoice().GetTag() == H225_RasMessage::e_registrationRequest) { if (!alternatePermanent) Connect(tempAddr,tempIdentifier); return TRUE; } } requestMutex.Wait(); } } } } H323Gatekeeper::AlternateInfo::AlternateInfo(const H225_AlternateGK & alt) : rasAddress(alt.m_rasAddress), gatekeeperIdentifier(alt.m_gatekeeperIdentifier.GetValue()), priority(alt.m_priority) { registrationState = alt.m_needToRegister ? NeedToRegister : NoRegistrationNeeded; } H323Gatekeeper::AlternateInfo::~AlternateInfo () { } PObject::Comparison H323Gatekeeper::AlternateInfo::Compare(const PObject & obj) { PAssert(PIsDescendant(&obj, H323Gatekeeper), PInvalidCast); unsigned otherPriority = ((const AlternateInfo & )obj).priority; if (priority < otherPriority) return LessThan; if (priority > otherPriority) return GreaterThan; return EqualTo; } H225_AlternateGK H323Gatekeeper::AlternateInfo::GetAlternate() { H225_AlternateGK gk; rasAddress.SetPDU(gk.m_rasAddress); gk.m_gatekeeperIdentifier = gatekeeperIdentifier; gk.m_priority = priority; gk.m_needToRegister = registrationState; return gk; } void H323Gatekeeper::AlternateInfo::PrintOn(ostream & strm) const { if (!gatekeeperIdentifier) strm << gatekeeperIdentifier << '@'; strm << rasAddress; if (priority > 0) strm << ";priority=" << priority; } PBoolean H323Gatekeeper::OnSendFeatureSet(unsigned pduType, H225_FeatureSet & feats, PBoolean advertise) const { #ifdef H323_H460 return features->SendFeature(pduType, feats, advertise); #else return endpoint.OnSendFeatureSet(pduType, feats, advertise); #endif } void H323Gatekeeper::OnReceiveFeatureSet(unsigned pduType, const H225_FeatureSet & feats) const { #ifdef H323_H460 features->ReceiveFeature(pduType, feats); #else endpoint.OnReceiveFeatureSet(pduType, feats); #endif } #ifdef H323_H460 void H323Gatekeeper::DisableFeatureSet(int msgtype) const { features->DisableAllFeatures(msgtype); } H460_FeatureSet & H323Gatekeeper::GetFeatures() { return *features; } #endif ///////////////////////////////////////////////////////////////////////////// h323plus/src/h323filetransfer.cxx0000644000175000017500000014152211647277756015541 0ustar markmark/* * h323filetransfer.cxx * * H323 File Transfer class. * * h323plus library * * Copyright (c) 2008 ISVO (Asia) Pte. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * Contributor(s): ______________________________________. * * $Log: h323filetransfer.cxx,v $ * Revision 1.10 2011/10/18 13:32:30 shorne * Rearranged Default Session ids so FECC is Session 3 for better interoperability. * * Revision 1.9 2011/04/08 15:54:47 willamowius * avoid using PString::GetPointer() * * Revision 1.8 2011/01/10 10:31:16 shorne * fixed bug wth maxBitRate values in the TCS * * Revision 1.7 2010/01/18 21:24:06 shorne * Fixes to send complete filie paths & filenames with '0' in the name * * Revision 1.6 2009/10/21 10:04:02 shorne * Update OID value to bring into line with OCS * * Revision 1.5 2009/02/21 14:16:32 shorne * Major overhaul of the FileTransfer code * * Revision 1.4 2008/05/23 11:22:00 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.3 2008/04/25 01:08:31 shorne * Correct FileTransfer Capability OID * * Revision 1.2 2008/02/12 05:47:42 shorne * Fix compiling on older GCC versions * * Revision 1.1 2008/01/01 00:16:12 shorne * Added GnuGknat and FileTransfer support * * * */ #include #include #ifdef H323_FILE #ifdef __GNUC__ #pragma implementation "h323filetransfer.h" #endif #include "h323filetransfer.h" #include static const char * FileTransferOID = "1.3.6.1.4.1.17090.1.2"; static const char * FileTransferListOID = "1.3.6.1.4.1.17090.1.2.1"; static struct { int blocksize; int identifier; } paramBlockSize[8] = { { 512, 1 }, { 1024, 2 }, { 1428, 4 }, { 2048, 8 }, { 4096, 16 }, { 8192, 32 }, { 16384, 64 }, { 32768, 128 }, }; static int SetParameterBlockSize(int size) { for (PINDEX i = 0; i < 8 ; i++) { if (paramBlockSize[i].blocksize == size) return paramBlockSize[i].identifier; } return 16; } static int GetParameterBlockSize(int size) { for (PINDEX i = 0; i < 8 ; i++) { if (paramBlockSize[i].identifier == size) return paramBlockSize[i].blocksize; } return 16; } H323FileTransferCapability::H323FileTransferCapability() : H323DataCapability(132000), m_blockOctets(4096) { m_blockSize = SetParameterBlockSize(m_blockOctets); // parameter block size m_transferMode = 1; // Transfer mode is RTP encaptulated } H323FileTransferCapability::H323FileTransferCapability(unsigned maxBitRate, unsigned maxBlockSize) : H323DataCapability(maxBitRate), m_blockOctets(maxBlockSize) { m_blockSize = SetParameterBlockSize(m_blockOctets); // parameter block size m_transferMode = 1; // Transfer mode is RTP encaptulated } PBoolean H323FileTransferCapability::OnReceivedPDU(const H245_DataApplicationCapability & pdu) { if (pdu.m_application.GetTag() != H245_DataApplicationCapability_application::e_genericDataCapability) return FALSE; //maxBitRate = pdu.m_maxBitRate*100; const H245_GenericCapability & genCapability = (const H245_GenericCapability &)pdu.m_application; return OnReceivedPDU(genCapability); } PBoolean H323FileTransferCapability::OnSendingPDU(H245_DataApplicationCapability & pdu) const { pdu.m_maxBitRate = maxBitRate/100; pdu.m_application.SetTag(H245_DataApplicationCapability_application::e_genericDataCapability); H245_GenericCapability & genCapability = (H245_GenericCapability &)pdu.m_application; return OnSendingPDU(genCapability); } PObject::Comparison H323FileTransferCapability::Compare(const PObject & obj) const { if (!PIsDescendant(&obj, H323FileTransferCapability)) return LessThan; const H323FileTransferCapability & other = (const H323FileTransferCapability &)obj; if (//(m_blockSize == other.GetBlockSize()) && 'We don't need to check the Max Block size (m_transferMode == other.GetTransferMode())) return EqualTo; return GreaterThan; } PObject * H323FileTransferCapability::Clone() const { return new H323FileTransferCapability(*this); } PBoolean H323FileTransferCapability::OnReceivedPDU(const H245_GenericCapability & pdu) { const H245_CapabilityIdentifier & capId = pdu.m_capabilityIdentifier; if (capId.GetTag() != H245_CapabilityIdentifier::e_standard) return FALSE; const PASN_ObjectId & id = capId; if (id.AsString() != FileTransferOID) return FALSE; if (pdu.HasOptionalField(H245_GenericCapability::e_maxBitRate)) { const PASN_Integer & bitRate = pdu.m_maxBitRate; maxBitRate = bitRate*100; } if (!pdu.HasOptionalField(H245_GenericCapability::e_collapsing)) return FALSE; const H245_ArrayOf_GenericParameter & params = pdu.m_collapsing; for (PINDEX j=0; jm_parameterIdentifier.SetTag(H245_ParameterIdentifier::e_standard); (PASN_Integer &)blockparam->m_parameterIdentifier = 1; blockparam->m_parameterValue.SetTag(H245_ParameterValue::e_booleanArray); (PASN_Integer &)blockparam->m_parameterValue = SetParameterBlockSize(m_blockOctets); // Add the Transfer Mode parameter H245_GenericParameter * modeparam = new H245_GenericParameter; modeparam->m_parameterIdentifier.SetTag(H245_ParameterIdentifier::e_standard); (PASN_Integer &)modeparam->m_parameterIdentifier = 2; modeparam->m_parameterValue.SetTag(H245_ParameterValue::e_booleanArray); (PASN_Integer &)modeparam->m_parameterValue = m_transferMode; pdu.IncludeOptionalField(H245_GenericCapability::e_collapsing); pdu.m_collapsing.Append(blockparam); pdu.m_collapsing.Append(modeparam); return TRUE; } void H323FileTransferCapability::SetFileTransferList(const H323FileTransferList & list) { m_filelist.clear(); m_filelist = list; m_filelist.SetMaster(true); } unsigned H323FileTransferCapability::GetDefaultSessionID() const { return OpalMediaFormat::DefaultFileSessionID; } unsigned H323FileTransferCapability::GetSubType() const { return H245_DataApplicationCapability_application::e_genericDataCapability; } H323Channel * H323FileTransferCapability::CreateChannel(H323Connection & connection, H323Channel::Directions direction,unsigned sessionID,const H245_H2250LogicalChannelParameters * /*param*/ ) const { RTP_Session *session; H245_TransportAddress addr; connection.GetControlChannel().SetUpTransportPDU(addr, H323Transport::UseLocalTSAP); session = connection.UseSession(sessionID, addr, direction); if(session == NULL) { return NULL; } return new H323FileTransferChannel(connection, *this, direction, (RTP_UDP &)*session, sessionID, m_filelist); } ///////////////////////////////////////////////////////////////////////////////// H323FileTransferChannel::H323FileTransferChannel(H323Connection & connection, const H323Capability & capability, H323Channel::Directions theDirection, RTP_UDP & rtp, unsigned theSessionID, const H323FileTransferList & list ) : H323Channel(connection, capability), rtpSession(rtp), rtpCallbacks(*(H323_RTP_Session *)rtp.GetUserData()), filelist(list) { direction = theDirection; sessionID = theSessionID; rtpPayloadType = (RTP_DataFrame::PayloadTypes)101; // We create the fileHandler here if we are transmitting (ie. Opening a file Transfer request) if (theDirection == H323Channel::IsTransmitter) fileHandler = connection.CreateFileTransferHandler(sessionID, theDirection,filelist); else fileHandler = NULL; } H323FileTransferChannel::~H323FileTransferChannel() { } H323Channel::Directions H323FileTransferChannel::GetDirection() const { return direction; } PBoolean H323FileTransferChannel::SetInitialBandwidth() { return TRUE; } void H323FileTransferChannel::Receive() { } void H323FileTransferChannel::Transmit() { } PBoolean H323FileTransferChannel::Open() { return H323Channel::Open(); } PBoolean H323FileTransferChannel::Start() { if (fileHandler == NULL) return FALSE; if (!Open()) return FALSE; fileHandler->SetPayloadType(rtpPayloadType); if (fileHandler->GetBlockSize() == 0) fileHandler->SetBlockSize((H323FileTransferCapability::blockSizes) ((H323FileTransferCapability *)capability)->GetOctetSize()); if (fileHandler->GetBlockRate() == 0) fileHandler->SetMaxBlockRate(((H323FileTransferCapability *)capability)->GetBlockRate()); return fileHandler->Start(direction); } void H323FileTransferChannel::Close() { if (terminating) return; if (fileHandler != NULL) fileHandler->Stop(direction); } PBoolean H323FileTransferChannel::OnSendingPDU(H245_OpenLogicalChannel & open) const { open.m_forwardLogicalChannelNumber = (unsigned)number; if (direction == H323Channel::IsTransmitter) SetFileList(open,filelist); if (open.HasOptionalField(H245_OpenLogicalChannel::e_reverseLogicalChannelParameters)) { open.m_reverseLogicalChannelParameters.IncludeOptionalField( H245_OpenLogicalChannel_reverseLogicalChannelParameters::e_multiplexParameters); open.m_reverseLogicalChannelParameters.m_multiplexParameters.SetTag( H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::e_h2250LogicalChannelParameters); return OnSendingPDU(open.m_reverseLogicalChannelParameters.m_multiplexParameters); } else { open.m_forwardLogicalChannelParameters.m_multiplexParameters.SetTag( H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::e_h2250LogicalChannelParameters); return OnSendingPDU(open.m_forwardLogicalChannelParameters.m_multiplexParameters); } } void H323FileTransferChannel::OnSendOpenAck(const H245_OpenLogicalChannel & openPDU, H245_OpenLogicalChannelAck & ack) const { // set forwardMultiplexAckParameters option ack.IncludeOptionalField(H245_OpenLogicalChannelAck::e_forwardMultiplexAckParameters); // select H225 choice ack.m_forwardMultiplexAckParameters.SetTag( H245_OpenLogicalChannelAck_forwardMultiplexAckParameters::e_h2250LogicalChannelAckParameters); // get H225 params H245_H2250LogicalChannelAckParameters & param = ack.m_forwardMultiplexAckParameters; // set session ID param.IncludeOptionalField(H245_H2250LogicalChannelAckParameters::e_sessionID); const H245_H2250LogicalChannelParameters & openparam = openPDU.m_forwardLogicalChannelParameters.m_multiplexParameters; unsigned sessionID = openparam.m_sessionID; param.m_sessionID = sessionID; OnSendOpenAck(param); } PBoolean H323FileTransferChannel::OnReceivedPDU(const H245_OpenLogicalChannel & open, unsigned & errorCode) { if (direction == H323Channel::IsReceiver) { number = H323ChannelNumber(open.m_forwardLogicalChannelNumber, TRUE); if (!GetFileList(open)) return FALSE; } PBoolean reverse = open.HasOptionalField(H245_OpenLogicalChannel::e_reverseLogicalChannelParameters); const H245_DataType & dataType = reverse ? open.m_reverseLogicalChannelParameters.m_dataType : open.m_forwardLogicalChannelParameters.m_dataType; if (!capability->OnReceivedPDU(dataType, direction)) { errorCode = H245_OpenLogicalChannelReject_cause::e_dataTypeNotSupported; return FALSE; } if (reverse) { if (open.m_reverseLogicalChannelParameters.m_multiplexParameters.GetTag() == H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::e_h2250LogicalChannelParameters) { return OnReceivedPDU(open.m_reverseLogicalChannelParameters.m_multiplexParameters, errorCode); } } else { if (open.m_forwardLogicalChannelParameters.m_multiplexParameters.GetTag() == H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::e_h2250LogicalChannelParameters) { return OnReceivedPDU(open.m_forwardLogicalChannelParameters.m_multiplexParameters, errorCode); } } errorCode = H245_OpenLogicalChannelReject_cause::e_unsuitableReverseParameters; return FALSE; } PBoolean H323FileTransferChannel::OnReceivedAckPDU(const H245_OpenLogicalChannelAck & ack) { if (!ack.HasOptionalField(H245_OpenLogicalChannelAck::e_forwardMultiplexAckParameters)) { return FALSE; } if (ack.m_forwardMultiplexAckParameters.GetTag() != H245_OpenLogicalChannelAck_forwardMultiplexAckParameters::e_h2250LogicalChannelAckParameters) { return FALSE; } return OnReceivedAckPDU(ack.m_forwardMultiplexAckParameters); } PBoolean H323FileTransferChannel::OnSendingPDU(H245_H2250LogicalChannelParameters & param) const { param.m_sessionID = sessionID; param.IncludeOptionalField(H245_H2250LogicalChannelParameters::e_mediaGuaranteedDelivery); param.m_mediaGuaranteedDelivery = FALSE; // unicast must have mediaControlChannel H323TransportAddress mediaControlAddress(rtpSession.GetLocalAddress(), rtpSession.GetLocalControlPort()); param.IncludeOptionalField(H245_H2250LogicalChannelParameters::e_mediaControlChannel); mediaControlAddress.SetPDU(param.m_mediaControlChannel); if (direction == H323Channel::IsReceiver) { // set mediaChannel H323TransportAddress mediaAddress(rtpSession.GetLocalAddress(), rtpSession.GetLocalDataPort()); param.IncludeOptionalField(H245_H2250LogicalChannelAckParameters::e_mediaChannel); mediaAddress.SetPDU(param.m_mediaChannel); } else { } // Set dynamic payload type, if is one int rtpPayloadType = GetDynamicRTPPayloadType(); if (rtpPayloadType >= RTP_DataFrame::DynamicBase && rtpPayloadType < RTP_DataFrame::IllegalPayloadType) { param.IncludeOptionalField(H245_H2250LogicalChannelParameters::e_dynamicRTPPayloadType); param.m_dynamicRTPPayloadType = rtpPayloadType; } return TRUE; } void H323FileTransferChannel::OnSendOpenAck(H245_H2250LogicalChannelAckParameters & param) const { // set mediaControlChannel H323TransportAddress mediaControlAddress(rtpSession.GetLocalAddress(), rtpSession.GetLocalControlPort()); param.IncludeOptionalField(H245_H2250LogicalChannelAckParameters::e_mediaControlChannel); mediaControlAddress.SetPDU(param.m_mediaControlChannel); // set mediaChannel H323TransportAddress mediaAddress(rtpSession.GetLocalAddress(), rtpSession.GetLocalDataPort()); param.IncludeOptionalField(H245_H2250LogicalChannelAckParameters::e_mediaChannel); mediaAddress.SetPDU(param.m_mediaChannel); // Set dynamic payload type, if is one int rtpPayloadType = GetDynamicRTPPayloadType(); if (rtpPayloadType >= RTP_DataFrame::DynamicBase && rtpPayloadType < RTP_DataFrame::IllegalPayloadType) { param.IncludeOptionalField(H245_H2250LogicalChannelAckParameters::e_dynamicRTPPayloadType); param.m_dynamicRTPPayloadType = rtpPayloadType; } } PBoolean H323FileTransferChannel::OnReceivedPDU(const H245_H2250LogicalChannelParameters & param, unsigned & errorCode) { if (param.m_sessionID != sessionID) { errorCode = H245_OpenLogicalChannelReject_cause::e_invalidSessionID; return FALSE; } PBoolean ok = FALSE; if (param.HasOptionalField(H245_H2250LogicalChannelParameters::e_mediaControlChannel)) { if (!ExtractTransport(param.m_mediaControlChannel, FALSE, errorCode)) { return FALSE; } ok = TRUE; } if (param.HasOptionalField(H245_H2250LogicalChannelParameters::e_mediaChannel)) { if (ok && direction == H323Channel::IsReceiver) { } else if (!ExtractTransport(param.m_mediaChannel, TRUE, errorCode)) { return FALSE; } ok = TRUE; } if (param.HasOptionalField(H245_H2250LogicalChannelParameters::e_dynamicRTPPayloadType)) { SetDynamicRTPPayloadType(param.m_dynamicRTPPayloadType); } if (ok) { return TRUE; } errorCode = H245_OpenLogicalChannelReject_cause::e_unspecified; return FALSE; } PBoolean H323FileTransferChannel::OnReceivedAckPDU(const H245_H2250LogicalChannelAckParameters & param) { if (!param.HasOptionalField(H245_H2250LogicalChannelAckParameters::e_sessionID)) { } if (!param.HasOptionalField(H245_H2250LogicalChannelAckParameters::e_mediaControlChannel)) { return FALSE; } unsigned errorCode; if (!ExtractTransport(param.m_mediaControlChannel, FALSE, errorCode)) { return FALSE; } if (!param.HasOptionalField(H245_H2250LogicalChannelAckParameters::e_mediaChannel)) { return FALSE; } if (!ExtractTransport(param.m_mediaChannel, TRUE, errorCode)) { return FALSE; } if (param.HasOptionalField(H245_H2250LogicalChannelAckParameters::e_dynamicRTPPayloadType)) { SetDynamicRTPPayloadType(param.m_dynamicRTPPayloadType); } return TRUE; } PBoolean H323FileTransferChannel::SetDynamicRTPPayloadType(int newType) { if (newType == -1) { return TRUE; } if (newType < RTP_DataFrame::DynamicBase || newType >= RTP_DataFrame::IllegalPayloadType) { return FALSE; } if (rtpPayloadType < RTP_DataFrame::DynamicBase) { return FALSE; } rtpPayloadType = (RTP_DataFrame::PayloadTypes)newType; return TRUE; } PBoolean H323FileTransferChannel::ExtractTransport(const H245_TransportAddress & pdu, PBoolean isDataPort, unsigned & errorCode) { if (pdu.GetTag() != H245_TransportAddress::e_unicastAddress) { errorCode = H245_OpenLogicalChannelReject_cause::e_multicastChannelNotAllowed; return FALSE; } H323TransportAddress transAddr = pdu; PIPSocket::Address ip; WORD port; if (transAddr.GetIpAndPort(ip, port)) { return rtpSession.SetRemoteSocketInfo(ip, port, isDataPort); } return FALSE; } PBoolean H323FileTransferChannel::RetreiveFileInfo(const H245_GenericInformation & info, H323FileTransferList & filelist) { if (info.m_messageIdentifier.GetTag() != H245_CapabilityIdentifier::e_standard) return FALSE; const PASN_ObjectId &object_id = info.m_messageIdentifier; if (object_id != FileTransferListOID) // Indicates File Information return FALSE; if (!info.HasOptionalField(H245_GenericInformation::e_messageContent)) return FALSE; const H245_ArrayOf_GenericParameter & params = info.m_messageContent; int direction=0; long size =0; PString name = PString(); for (PINDEX i =0; i < params.GetSize(); i++) { PASN_Integer & pid = params[i].m_parameterIdentifier; H245_ParameterValue & paramval = params[i].m_parameterValue; int val = pid.GetValue(); if (val == 1) { // tftpDirection PASN_Integer & val = paramval; direction = val.GetValue(); } else if (val == 2) { // tftpFilename PASN_OctetString & val = paramval; name = val.AsString(); } else if (val == 3) { // tftpFilesize PASN_Integer & val = paramval; size = val.GetValue(); } } filelist.Add(name,"",size); if ((direction > 0) && (direction != filelist.GetDirection())) filelist.SetDirection((H323Channel::Directions)direction); return TRUE; } PBoolean H323FileTransferChannel::GetFileList(const H245_OpenLogicalChannel & open) { if (!open.HasOptionalField(H245_OpenLogicalChannel::e_genericInformation)) return FALSE; const H245_ArrayOf_GenericInformation & cape = open.m_genericInformation; for (PINDEX i=0; im_parameterIdentifier; paramid.SetTag(H245_ParameterIdentifier::e_standard); PASN_Integer & pid = paramid; pid.SetValue(id); H245_ParameterValue & paramval = content->m_parameterValue; paramval.SetTag(type); if ((type == H245_ParameterValue::e_unsignedMin) || (type == H245_ParameterValue::e_unsignedMax) || (type == H245_ParameterValue::e_unsigned32Min) || (type == H245_ParameterValue::e_unsigned32Max)) { PASN_Integer & val = paramval; val.SetValue(value.AsUnsigned()); } else if (type == H245_ParameterValue::e_octetString) { PASN_OctetString & val = paramval; val.SetValue(value); } // H245_ParameterValue::e_logical, // H245_ParameterValue::e_booleanArray, // H245_ParameterValue::e_genericParameter return content; } void H323FileTransferChannel::SetFileList(H245_OpenLogicalChannel & open, H323FileTransferList flist) const { if (flist.GetSize() == 0) return; PINDEX i = 0; open.IncludeOptionalField(H245_OpenLogicalChannel::e_genericInformation); H245_ArrayOf_GenericInformation & cape = open.m_genericInformation; for (H323FileTransferList::const_iterator r = filelist.begin(); r != filelist.end(); ++r) { H245_GenericInformation * gcap = new H245_GenericInformation(); gcap->m_messageIdentifier = *(new H245_CapabilityIdentifier(H245_CapabilityIdentifier::e_standard)); PASN_ObjectId &object_id = gcap->m_messageIdentifier; object_id = FileTransferListOID; // Indicates File Information i++; gcap->IncludeOptionalField(H245_GenericInformation::e_subMessageIdentifier); PASN_Integer & sub_id = gcap->m_subMessageIdentifier; sub_id = i; gcap->IncludeOptionalField(H245_GenericInformation::e_messageContent); H245_ArrayOf_GenericParameter & params = gcap->m_messageContent; // tftpDirection params.Append(BuildGenericParameter(1,H245_ParameterValue::e_unsignedMin,flist.GetDirection())); // tftpFilename params.Append(BuildGenericParameter(2,H245_ParameterValue::e_octetString,r->m_Filename)); // tftpFilesize if (flist.GetDirection() == H323Channel::IsTransmitter) params.Append(BuildGenericParameter(3,H245_ParameterValue::e_unsigned32Max,r->m_Filesize)); cape.Append(gcap); } } /////////////////////////////////////////////////////////////////////////////////// H323FileTransferList::H323FileTransferList() { saveDirectory = PProcess::Current().GetFile().GetDirectory(); direction = H323Channel::IsBidirectional; master = false; } void H323FileTransferList::Add(const PString & filename, const PDirectory & directory, long filesize) { H323File file; file.m_Filename = filename; file.m_Directory = directory; file.m_Filesize = filesize; push_back(file); } void H323FileTransferList::SetSaveDirectory(const PString directory) { saveDirectory = directory; } const PDirectory & H323FileTransferList::GetSaveDirectory() { return saveDirectory; } void H323FileTransferList::SetDirection(H323Channel::Directions _direction) { direction = _direction; } H323Channel::Directions H323FileTransferList::GetDirection() { return direction; } PINDEX H323FileTransferList::GetSize() { return size(); } H323File * H323FileTransferList::GetAt(PINDEX i) { PINDEX c=0; for (H323FileTransferList::iterator r = begin(); r != end(); ++r) { if (c == i) return &(*r); c++; } return NULL; } void H323FileTransferList::SetMaster(PBoolean state) { master = state; } PBoolean H323FileTransferList::IsMaster() { return master; } /////////////////////////////////////////////////////////////////////////////////// static PString errString[] = { "Not Defined.", "File Not Found.", "Access Violation.", "Disk Full/Allocation exceeded.", "Illegal TFTP operation.", "Unknown transfer ID.", "File Already Exists.", "No such user.", "Incomplete Block." }; static PString tranState[] = { "Probing", "Connected", "Waiting", "Sending", "Receiving", "Completed", "Error" }; static PString blkState[] = { "ok", "partial", "complete", "Incomplete", "Timeout", "Ready" }; #if PTRACING PString DataPacketAnalysis(PBoolean isEncoder, const H323FilePacket & packet, PBoolean final) { PString direct = (isEncoder ? "<- " : "-> " ); if (!final) return direct + "blk partial size : " + PString(packet.GetSize()) + " bytes"; PString pload; int errcode = 0; PString errstr; switch (packet.GetPacketType()) { case H323FilePacket::e_PROB: pload = direct + "prb size : " + PString(packet.GetSize()) + " bytes"; break; case H323FilePacket::e_RRQ: pload = direct + "rrq file " + packet.GetFileName() + " : " + PString(packet.GetFileSize()) + " bytes"; break; case H323FilePacket::e_WRQ: pload = direct + "wrq file " + packet.GetFileName() + " : " + PString(packet.GetFileSize()) + " bytes"; break; case H323FilePacket::e_DATA: pload = direct + "blk " + PString(packet.GetBlockNo()) + " : " + PString(packet.GetSize()) + " bytes"; break; case H323FilePacket::e_ACK: pload = direct + "ack " + PString(packet.GetACKBlockNo()); if (packet.GetFileSize() > 0) pload = pload + " : " + PString(packet.GetFileSize()) + " bytes"; break; case H323FilePacket::e_ERROR: packet.GetErrorInformation(errcode,errstr); pload = direct + "err " + PString(errcode) + ": " + errstr; break; default: break; } return pload; } #endif H323FileTransferHandler::H323FileTransferHandler(H323Connection & connection, unsigned sessionID, H323Channel::Directions dir, H323FileTransferList & _filelist ) :filelist(_filelist), master(_filelist.IsMaster()) { H245_TransportAddress addr; connection.GetControlChannel().SetUpTransportPDU(addr, H323Transport::UseLocalTSAP); session = connection.UseSession(sessionID,addr,H323Channel::IsBidirectional); TransmitThread = NULL; ReceiveThread = NULL; blockRate = 0; blockSize = 0; msBetweenBlocks = 0; // Transmission Settings curFile = NULL; timestamp = 0; lastBlockNo = 0; lastBlockSize = 0; curFileName = PString(); curFileSize = 0; curBlockSize = 0; curProgSize = 0; rtpPayloadType = (RTP_DataFrame::PayloadTypes)101; responseTimeOut = 1500; transmitRunning = FALSE; receiveRunning = FALSE; } H323FileTransferHandler::~H323FileTransferHandler() { // order is important session->Close(true); if (receiveRunning) exitReceive.Signal(); if (transmitRunning) exitTransmit.Signal(); } PBoolean H323FileTransferHandler::Start(H323Channel::Directions direction) { // reset the current state currentState = e_probing; StartTime = new PTime(); transmitFrame.SetPayloadType(rtpPayloadType); TransmitThread = PThread::Create(PCREATE_NOTIFIER(Transmit), 0, PThread::AutoDeleteThread); ReceiveThread = PThread::Create(PCREATE_NOTIFIER(Receive), 0, PThread::AutoDeleteThread); return TRUE; } PBoolean H323FileTransferHandler::Stop(H323Channel::Directions direction) { PWaitAndSignal m(transferMutex); delete StartTime; StartTime = NULL; // CloseDown the Transmit/Receive Threads nextFrame.Signal(); session->Close(true); if (direction == H323Channel::IsReceiver && receiveRunning) exitReceive.Signal(); if (direction == H323Channel::IsTransmitter && transmitRunning) exitTransmit.Signal(); return TRUE; } void H323FileTransferHandler::SetPayloadType(RTP_DataFrame::PayloadTypes _type) { rtpPayloadType = _type; } void H323FileTransferHandler::SetBlockSize(H323FileTransferCapability::blockSizes size) { blockSize = size; } void H323FileTransferHandler::SetMaxBlockRate(unsigned rate) { blockRate = rate; msBetweenBlocks = (int)((1.000/((double)rate))*1000); } void H323FileTransferHandler::ChangeState(transferState newState) { PWaitAndSignal m(stateMutex); if (currentState == newState) return; PTRACE(4,"FT\tState Change to " << tranState[newState]); currentState = newState; OnStateChange(currentState); } void H323FileTransferHandler::SetBlockState(receiveStates state) { PWaitAndSignal m(stateMutex); if (blockState == state) return; PTRACE(6,"FT\t blk: " << blkState[state]); blockState = state; } PBoolean H323FileTransferHandler::TransmitFrame(H323FilePacket & buffer, PBoolean final) { // determining correct timestamp PTime currentTime = PTime(); PTimeInterval timePassed = currentTime - *StartTime; transmitFrame.SetTimestamp((DWORD)timePassed.GetMilliSeconds() * 8); transmitFrame.SetMarker(final); transmitFrame.SetPayloadSize(buffer.GetSize()); memmove(transmitFrame.GetPayloadPtr(),buffer.GetPointer(), buffer.GetSize()); return (session && session->WriteData(transmitFrame)); } PBoolean H323FileTransferHandler::ReceiveFrame(H323FilePacket & buffer, PBoolean & final) { RTP_DataFrame packet = RTP_DataFrame(1440); if(!session->ReadBufferedData(timestamp, packet)) return FALSE; timestamp = packet.GetTimestamp(); final = packet.GetMarker(); buffer.SetSize(packet.GetPayloadSize()); memmove(buffer.GetPointer(),packet.GetPayloadPtr(), packet.GetPayloadSize()); return TRUE; } PBoolean Segment(PBYTEArray & lastBlock, const int size, int & segment, PBYTEArray & thearray) { int bsize = lastBlock.GetSize(); int newsize=0; if (bsize < (segment + size)) newsize = bsize - segment; else newsize = size; BYTE * seg = lastBlock.GetPointer(); thearray.SetSize(newsize); memcpy(thearray.GetPointer(),seg+segment, newsize); segment = segment + newsize; if (segment == bsize) { segment = 0; return TRUE; } return FALSE; } void H323FileTransferHandler::Transmit(PThread &, INT) { PBoolean success = TRUE; PBoolean datapacket = FALSE; H323File * f = NULL; PFilePath p; PBoolean read = (filelist.GetDirection() == H323Channel::IsTransmitter); PBoolean waitforResponse = FALSE; PBoolean lastFrame = FALSE; int fileid = 0; H323FilePacket lastBlock; PBYTEArray lastSegment; int offset = 0; int sentBlock = 0; transmitRunning = TRUE; while (success && !exitTransmit.Wait(0)) { H323FilePacket packet; PBoolean final = FALSE; switch (currentState) { case e_probing: probMutex.Wait(50); if (currentState != e_probing) continue; packet.BuildPROB(); final = TRUE; break; case e_connect: packet.BuildACK(99); final = TRUE; ChangeState(e_waiting); break; case e_waiting: // if we have something to send/Receive if (master) { if (waitforResponse) { if (blockState != recTimeOut) { waitforResponse = FALSE; if (read) ChangeState(e_sending); break; } } else { fileid++; if (fileid > filelist.GetSize()) { OnTransferComplete(); ChangeState(e_completed); break; } //delete f; f = filelist.GetAt(fileid-1); if (f == NULL) { ioerr = H323FileIOChannel::e_NotFound; OnFileOpenError("",ioerr); ChangeState(e_error); break; } p = f->m_Directory + PDIR_SEPARATOR + f->m_Filename; curFileName = f->m_Filename; if (read) { curFileSize = f->m_Filesize; delete curFile; curFile = new H323FileIOChannel(p,read); if (curFile->IsError(ioerr)) { OnFileOpenError(p,ioerr); ChangeState(e_error); break; } OnFileStart(p, curFileSize,read); // Notify to start send } } if (!read) { packet.BuildRequest(H323FilePacket::e_RRQ ,f->m_Filename, f->m_Filesize, blockSize); final = TRUE; waitforResponse = TRUE; } else { packet.BuildRequest(H323FilePacket::e_WRQ ,f->m_Filename, f->m_Filesize, blockSize); final = TRUE; waitforResponse = TRUE; } } else { if (blockState == recComplete) { // We are waiting to shutdown if (shutdownTimer.GetResetTime() == 0) shutdownTimer.SetInterval(responseTimeOut); else { if (shutdownTimer == 0) // We have waited long enough without response ChangeState(e_completed); else continue; } } else continue; } break; case e_sending: // Signal we are ready to send file if (blockState == recReady) { packet.BuildACK(0,curFileSize); final = TRUE; SetBlockState(recOK); break; } if (blockState != recPartial) { if (blockState == recOK) { if (lastFrame) { // We have successfully sent the last frame of data. // switch back to waiting to queue the next file OnFileComplete(curFileName); delete curFile; curFile = NULL; curFileName = PString(); waitforResponse = FALSE; lastFrame = FALSE; lastBlockSize = 0; lastBlockNo = 0; SetBlockState(recComplete); ChangeState(e_waiting); continue; } offset = 0; lastBlockNo++; if (lastBlockNo > 99) lastBlockNo = 1; lastBlock.BuildData(lastBlockNo,blockSize); int size = blockSize; curFile->Read(lastBlock.GetDataPtr(),size); // Wait for Bandwidth limits sendwait.Delay(msBetweenBlocks); if (size < (int)blockSize) { lastBlock.SetSize(4+size); lastFrame = TRUE; } lastBlockSize = lastBlock.GetDataSize(); PTRACE(5,"FT\t" << DataPacketAnalysis(true,lastBlock,true)); } else if (blockState != recComplete) { OnFileError(curFileName,lastBlockNo, TRUE); } } // Segment and mark as recPartial datapacket = true; if (blockSize > H323FileTransferCapability::e_1428) final = Segment(lastBlock, H323FileTransferCapability::e_1428, offset, packet); else { packet.Attach(lastBlock.GetPointer(),lastBlock.GetSize()); final = TRUE; } if (final) { SetBlockState(recComplete); waitforResponse = TRUE; } else { SetBlockState(recPartial); waitforResponse = FALSE; } break; case e_receiving: // Signal we are ready to receive file. if (blockState == recReady) { packet.BuildACK(0); final = TRUE; SetBlockState(recOK); break; } else if (sentBlock == lastBlockNo) { nextFrame.Wait(responseTimeOut); } if (curFileSize == curProgSize) SetBlockState(recComplete); if ((blockState == recOK) || (blockState == recComplete)) { packet.BuildACK(lastBlockNo); if (lastBlockNo == 99) lastBlockNo = 0; sentBlock = lastBlockNo; final = TRUE; if (blockState == recComplete) { // Switch to wait for next instruction lastBlockNo = 0; curProgSize = 0; curFile->Close(); ChangeState(e_waiting); waitforResponse = FALSE; } } else if (blockState == recIncomplete) { OnFileError(curFileName,lastBlockNo, TRUE); packet.BuildError(0,""); // Indicate to remote to resend the last block } else { // Do nothing continue; } break; case e_error: packet.BuildError(ioerr,errString[ioerr]); final = TRUE; ChangeState(e_completed); break; case e_completed: default: success = false; break; } if (success && packet.GetSize() > 0) { success = TransmitFrame(packet,final); if (!datapacket) { #if PTRACING PTRACE(5,"FT\t" << DataPacketAnalysis(true,packet,final)); #endif packet.SetSize(0); } datapacket = false; if (waitforResponse) { SetBlockState(recTimeOut); nextFrame.Wait(responseTimeOut); } } } session->Close(false); exitTransmit.Acknowledge(); transmitRunning = FALSE; PTRACE(6,"FILE\tClosing Transmit Thread"); // close down the channel which will // release the thread to close automatically if (receiveRunning) session->Close(true); } void H323FileTransferHandler::Receive(PThread &, INT) { PBoolean success = TRUE; H323FilePacket packet; packet.SetSize(0); PFilePath p; receiveRunning = TRUE; while (success && !exitReceive.Wait(0)) { PBoolean final = FALSE; H323FilePacket buffer; success = ReceiveFrame(buffer, final); if (!success || buffer.GetSize() == 0) continue; if (currentState == e_receiving) { packet.Concatenate(buffer); if (!final) continue; else { buffer.SetSize(0); } } else { packet = buffer; } if (packet.GetSize() == 0) continue; #if PTRACING PTRACE(5,"FT\t" << DataPacketAnalysis(false,packet,final)); #endif int ptype = packet.GetPacketType(); if (ptype == H323FilePacket::e_ERROR) { int errCode; PString errString; packet.GetErrorInformation(errCode,errString); if (errCode > 0) { OnError(errString); ChangeState(e_completed); nextFrame.Signal(); } } switch (currentState) { case e_probing: ChangeState(e_connect); probMutex.Signal(); break; case e_connect: // Do nothing break; case e_waiting: if (ptype == H323FilePacket::e_WRQ) { p = filelist.GetSaveDirectory() + PDIR_SEPARATOR + packet.GetFileName(); curFileName = packet.GetFileName(); curFileSize = packet.GetFileSize(); curBlockSize = packet.GetBlockSize(); delete curFile; curFile = new H323FileIOChannel(p,FALSE); if (curFile->IsError(ioerr)) { OnFileOpenError(p,ioerr); ChangeState(e_error); break; } SetBlockState(recReady); ChangeState(e_receiving); OnFileStart(p, curFileSize,FALSE); // Notify to start receive shutdownTimer.SetInterval(0); } else if (ptype == H323FilePacket::e_RRQ) { p = filelist.GetSaveDirectory() + PDIR_SEPARATOR + packet.GetFileName(); delete curFile; curFile = new H323FileIOChannel(p,TRUE); if (curFile->IsError(ioerr)) { OnFileOpenError(p,ioerr); ChangeState(e_error); break; } curFileSize = curFile->GetFileSize(); SetBlockState(recReady); ChangeState(e_sending); OnFileStart(p, curFileSize,TRUE); // Notify to start send shutdownTimer.SetInterval(0); } else if ((ptype == H323FilePacket::e_ACK) && (packet.GetACKBlockNo() == 0)) { // We have received acknowledgement int size = packet.GetFileSize(); if (size > 0) { curFileSize = size; PStringList saveFile; saveFile = curFileName.Tokenise(PDIR_SEPARATOR); p = filelist.GetSaveDirectory() + PDIR_SEPARATOR + saveFile[saveFile.GetSize()-1]; delete curFile; curFile = new H323FileIOChannel(p,false); if (curFile->IsError(ioerr)) { delete curFile; curFile = NULL; OnFileOpenError(p,ioerr); ChangeState(e_error); break; } SetBlockState(recOK); ChangeState(e_receiving); OnFileStart(curFileName, curFileSize, false); // Notify to start receive nextFrame.Signal(); } else { SetBlockState(recOK); if (!master || (master && (filelist.GetDirection() == H323Channel::IsTransmitter))) nextFrame.Signal(); } break; } break; case e_receiving: if (ptype == H323FilePacket::e_DATA) { PBoolean OKtoWrite = FALSE; int blockNo = 0; if ((packet.GetDataSize() == blockSize) || // We have complete block (curFileSize == (curProgSize + packet.GetDataSize()))) { // We have the last block if (packet.GetBlockNo() > lastBlockNo) { // Make sure we have not already received this block if (packet.GetBlockNo() != lastBlockNo + 1) { // This is not the next block request to resend. We are in trouble if we are here! SetBlockState(recIncomplete); OnFileError(curFileName,lastBlockNo, FALSE); packet.SetSize(0); nextFrame.Signal(); break; } lastBlockNo = packet.GetBlockNo(); curProgSize = curProgSize + packet.GetDataSize(); blockNo = lastBlockNo; OKtoWrite = TRUE; } SetBlockState(recOK); } else { SetBlockState(recIncomplete); OnFileError(curFileName,lastBlockNo, FALSE); } // Now write away block to file. if (OKtoWrite) { curFile->Write(packet.GetDataPtr(),packet.GetDataSize()); OnFileProgress(curFileName,blockNo,curProgSize, FALSE); } // Signal to send confirmation nextFrame.Signal(); } packet.SetSize(0); break; case e_sending: if (ptype == H323FilePacket::e_ACK) { if (packet.GetACKBlockNo() == 0) // Control ACKs = 0 so ignore. continue; if (packet.GetACKBlockNo() == lastBlockNo) { curProgSize = curProgSize + lastBlockSize; OnFileProgress(curFileName,lastBlockNo,curProgSize, TRUE); SetBlockState(recOK); } else { PTRACE(6,"FT\tExpecting block " << lastBlockNo << " Received " << packet.GetACKBlockNo()); } } else if (ptype == H323FilePacket::e_ERROR) { OnFileError(curFileName,lastBlockNo, TRUE); SetBlockState(recIncomplete); } nextFrame.Signal(); break; case e_error: case e_completed: default: success = FALSE; break; } packet.SetSize(0); } exitReceive.Acknowledge(); receiveRunning = FALSE; PTRACE(6,"FILE\tClosing Receive Thread"); } /////////////////////////////////////////////////////////////////////////// static PString opStr[] = { "00", "01", "02", "03", "04", "05" }; void H323FilePacket::attach(PString & data) { SetSize(data.GetSize()); memcpy(theArray, (const char *)data, data.GetSize()); } void H323FilePacket::BuildPROB() { PString header = opStr[e_PROB]; Attach(header,header.GetSize()); } void H323FilePacket::BuildRequest(opcodes code, const PString & filename, int filesize, int blocksize) { PString fn = filename; fn.Replace("0","*",true); PString header = opStr[code] + fn + "0octet0blksize0" + PString(blocksize) + "0tsize0" + PString(filesize) + "0"; attach(header); } void H323FilePacket::BuildData(int blockid, int size) { PString blkstr; if (blockid < 10) blkstr = "0" + PString(blockid); else blkstr = blockid; PString data = opStr[e_DATA] + blkstr; SetSize(size+4); memcpy(theArray, (const char *)data, data.GetSize()); } void H323FilePacket::BuildACK(int blockid, int filesize) { PString blkstr; if (blockid < 10) blkstr = "0" + PString(blockid); else blkstr = blockid; PString header = opStr[e_ACK] + blkstr; if (filesize > 0) header = header + "0tsize0" + PString(filesize) + "0"; attach(header); } void H323FilePacket::BuildError(int errorcode,PString errmsg) { PString blkerr; if (errorcode < 10) blkerr = "0" + PString(errorcode); else blkerr = PString(errorcode); PString header = opStr[e_ERROR] + blkerr + errmsg + "0"; attach(header); } PString H323FilePacket::GetFileName() const { if ((GetPacketType() != e_RRQ) && (GetPacketType() != e_WRQ)) return PString(); PString data(theArray, GetSize()); PStringArray ar = (data.Mid(2)).Tokenise('0'); ar[0].Replace("*","0",true); return ar[0]; } unsigned H323FilePacket::GetFileSize() const { if ((GetPacketType() != e_RRQ) && (GetPacketType() != e_WRQ) && (GetPacketType() != e_ACK)) return 0; PString data(theArray, GetSize()); int i = data.Find("tsize"); if (i == P_MAX_INDEX) return 0; i = data.Find('0',i); int l = data.GetLength()-1-i; return data.Mid(i,l).AsUnsigned(); } unsigned H323FilePacket::GetBlockSize() const { if ((GetPacketType() != e_RRQ) && (GetPacketType() != e_WRQ)) return 0; PString data(theArray, GetSize()); int i = data.Find("blksize"); i = data.Find('0',i); int j = data.Find("tsize",i)-1; int l = j-i; return data.Mid(i,l).AsUnsigned(); } void H323FilePacket::GetErrorInformation(int & ErrCode, PString & ErrStr) const { if (GetPacketType() != e_ERROR) return; PString data(theArray, GetSize()); PString ar = data.Mid(2); ErrCode = (ar.Left(2)).AsInteger(); ErrStr = ar.Mid(2,ar.GetLength()-3); } BYTE * H323FilePacket::GetDataPtr() { return (BYTE *)(theArray+4); } unsigned H323FilePacket::GetDataSize() const { if (GetPacketType() == e_DATA) return GetSize() - 4; else return 0; } int H323FilePacket::GetBlockNo() const { if (GetPacketType() != e_DATA) return 0; PString data(theArray, GetSize()); return data.Mid(2,2).AsInteger(); } int H323FilePacket::GetACKBlockNo() const { if (GetPacketType() != e_ACK) return 0; PString data(theArray, GetSize()); return data.Mid(2,2).AsInteger(); } H323FilePacket::opcodes H323FilePacket::GetPacketType() const { PString data(theArray, GetSize()); return (opcodes)data.Mid(1,1).AsUnsigned(); } //////////////////////////////////////////////////////////////////// H323FileIOChannel::H323FileIOChannel(PFilePath _file, PBoolean read) { if (!CheckFile(_file,read,IOError)) return; PFile::OpenMode mode; if (read) mode = PFile::ReadOnly; else mode = PFile::WriteOnly; PFile * file = new PFile(_file,mode); fileopen = file->IsOpen(); if (!fileopen) { IOError = e_AccessDenied; delete file; file = NULL; filesize = 0; return; } filesize = file->GetLength(); if (read) SetReadChannel(file, TRUE); else SetWriteChannel(file, TRUE); } H323FileIOChannel::~H323FileIOChannel() { } PBoolean H323FileIOChannel::IsError(fileError & err) { err = IOError; return (err > 0); } PBoolean H323FileIOChannel::CheckFile(PFilePath _file, PBoolean read, fileError & errCode) { PBoolean exists = PFile::Exists(_file); if (read && !exists) { errCode = e_NotFound; return FALSE; } if (!read && exists) { errCode = e_FileExists; return FALSE; } PFileInfo info; PFile::GetInfo(_file,info); if (read && (info.permissions < PFileInfo::UserRead)) { errCode = e_AccessDenied; return FALSE; } errCode = e_OK; return TRUE; } PBoolean H323FileIOChannel::Open() { PWaitAndSignal mutex(chanMutex); if (fileopen) return TRUE; return TRUE; } PBoolean H323FileIOChannel::Close() { PWaitAndSignal mutex(chanMutex); if (!fileopen) return TRUE; PIndirectChannel::Close(); return TRUE; } unsigned H323FileIOChannel::GetFileSize() { return filesize; } PBoolean H323FileIOChannel::Read(void * buffer, PINDEX & amount) { PWaitAndSignal mutex(chanMutex); if (!fileopen) return FALSE; PBoolean result = PIndirectChannel::Read(buffer, amount); amount = GetLastReadCount(); return result; } PBoolean H323FileIOChannel::Write(const void * buf, PINDEX amount) { PWaitAndSignal mutex(chanMutex); if (!fileopen) return FALSE; return PIndirectChannel::Write(buf, amount); } #endif // H323_FILE h323plus/src/opalglobalstatics.cxx0000644000175000017500000000300211561712073016127 0ustar markmark/* * opalglobalstatics.cxx * * Various global statics that need to be instantiated upon startup * * Portable Windows Library * * Copyright (C) 2004 Post Increment * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Portable Windows Library. * * The Initial Developer of the Original Code is Post Increment * * Contributor(s): ______________________________________. * * $Id: opalglobalstatics.cxx,v 1.2 2011/05/09 07:14:03 shorne Exp $ */ #ifndef _OPALGLOBALSTATIC_CXX #define _OPALGLOBALSTATIC_CXX #if defined(P_HAS_PLUGINS) class PluginLoader : public PProcessStartup { PCLASSINFO(PluginLoader, PProcessStartup); public: void OnStartup() { H323PluginCodecManager::Bootstrap(); } }; #endif ////////////////////////////////// #if defined(P_HAS_PLUGINS) static PFactory::Worker h323PluginCodecManagerFactory("H323PluginCodecManager", true); static PFactory::Worker h323pluginStartupFactory("H323PluginLoader", true); #endif ////////////////////////////////// #endif h323plus/src/h230/0000755000175000017500000000000011602326670012355 5ustar markmarkh323plus/src/h230/OID2.asn0000644000175000017500000000070010705164140013545 0ustar markmarkH230-CONFERENCE-CONTROL {iso(1) organisation(3) dod(6) internet(1) private(4) packetizer(17090) h323(0) oid(2) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN Participant ::= SEQUENCE { token INTEGER (0..255), number BMPString (SIZE (1..256)), name BMPString (SIZE (1..256)) OPTIONAL, vCard BMPString (SIZE (1..256)) OPTIONAL, ... } ParticipantList ::= SEQUENCE { list SEQUENCE (SIZE (0..65535)) OF Participant, ... } ENDh323plus/src/h230/h230.cxx0000644000175000017500000013453111602326670013564 0ustar markmark/* * h230.cxx * * H.230 Conference control class. * * h323plus library * * Copyright (c) 2007 ISVO (Asia) Pte. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * Contributor(s): ______________________________________. * * $Log: h230.cxx,v $ * Revision 1.7 2011/06/28 10:32:24 shorne * Fix typos in comments * * Revision 1.6 2008/05/23 11:22:45 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.5 2008/01/22 01:17:11 shorne * Fixes to the H.230 system * * Revision 1.4 2007/11/19 18:06:32 shorne * changed lists from PList to std::list * * Revision 1.3 2007/11/07 15:45:43 willamowius * linux compile fix * * Revision 1.2 2007/10/18 17:44:21 shorne * Small fixes during test compile * * Revision 1.1 2007/10/16 16:35:44 shorne * Added H.230 Support * * * * */ #include #include "h230/h230.h" #include "h230/OID2.h" #ifdef H323_H230 static const char * h230OID = "0.0.8.230.2"; // Advertised Feature static const char * T124OID = "0.0.20.124.2"; // Advertised Feature static const char * PACKOID = "1.3.6.1.4.1.17090.0.2.0"; // Advertised Feature H230Control::H230Control(const PString & _h323token) : m_h323token(_h323token) { m_userID = -1; m_mcuID = 0; m_ConferenceChair = FALSE; m_ConferenceFloor = FALSE; } PBoolean H230Control::OnHandleConferenceRequest(const H245_ConferenceRequest & req) { switch (req.GetTag()) { case H245_ConferenceRequest::e_terminalListRequest : case H245_ConferenceRequest::e_makeMeChair : case H245_ConferenceRequest::e_cancelMakeMeChair : return OnGeneralRequest(req.GetTag()); case H245_ConferenceRequest::e_requestChairTokenOwner : return OnReceiveChairTokenRequest(); case H245_ConferenceRequest::e_requestTerminalID : // highjacked for chair assign return OnReceiveChairAssignRequest(req); case H245_ConferenceRequest::e_sendThisSource : // highjacked for floor assign return OnReceiveFloorAssignRequest(req); // Not Supported case H245_ConferenceRequest::e_dropTerminal : case H245_ConferenceRequest::e_requestAllTerminalIDs : case H245_ConferenceRequest::e_enterH243Password : case H245_ConferenceRequest::e_enterH243TerminalID : case H245_ConferenceRequest::e_enterH243ConferenceID : case H245_ConferenceRequest::e_enterExtensionAddress : case H245_ConferenceRequest::e_makeTerminalBroadcaster : case H245_ConferenceRequest::e_requestTerminalCertificate : case H245_ConferenceRequest::e_broadcastMyLogicalChannel : case H245_ConferenceRequest::e_remoteMCRequest : default: return FALSE; } } PBoolean H230Control::TerminalListRequest() { if (m_userID < 0) { PTRACE(4,"H230\tRequest denied: No conference token"); return FALSE; } H323ControlPDU pdu; H245_ConferenceRequest & req = pdu.Build(H245_RequestMessage::e_conferenceRequest); req.SetTag(H245_ConferenceRequest::e_terminalListRequest); return WriteControlPDU(pdu); } PBoolean H230Control::ChairRequest(PBoolean revoke) { if (m_userID < 0) { PTRACE(4,"H230\tRequest denied: No conference token"); return FALSE; } H323ControlPDU pdu; H245_ConferenceRequest & req = pdu.Build(H245_RequestMessage::e_conferenceRequest); if (revoke) req.SetTag(H245_ConferenceRequest::e_cancelMakeMeChair); else req.SetTag(H245_ConferenceRequest::e_makeMeChair); return WriteControlPDU(pdu); } PBoolean H230Control::ChairAssign(int node) { if (!m_ConferenceChair) { // only a conference chair can assign another PTRACE(4,"H230\tRequest denied: Not conference chair"); return FALSE; } H323ControlPDU pdu; H245_ConferenceRequest & req = pdu.Build(H245_RequestMessage::e_conferenceRequest); req.SetTag(H245_ConferenceRequest::e_requestTerminalID); H245_TerminalLabel & label = req; label.m_mcuNumber = m_mcuID; label.m_terminalNumber = node; return WriteControlPDU(pdu); } PBoolean H230Control::FloorAssign(int node) { if (!m_ConferenceChair) { // only a conference chair can assign another PTRACE(4,"H230\tRequest denied: Not conference chair"); return FALSE; } H323ControlPDU pdu; H245_ConferenceRequest & req = pdu.Build(H245_RequestMessage::e_conferenceRequest); req.SetTag(H245_ConferenceRequest::e_requestTerminalID); H245_TerminalLabel & label = req; label.m_mcuNumber = m_mcuID; label.m_terminalNumber = node; return WriteControlPDU(pdu); } PBoolean H230Control::WhoIsChair() { if (m_userID < 0) { PTRACE(4,"H230\tRequest denied: No conference token"); return FALSE; } H323ControlPDU pdu; H245_ConferenceRequest & req = pdu.Build(H245_RequestMessage::e_conferenceRequest); req.SetTag(H245_ConferenceRequest::e_requestChairTokenOwner); return WriteControlPDU(pdu); } PBoolean H230Control::OnReceiveChairAssignRequest(const H245_TerminalLabel & req) { const H245_TerminalNumber & num = req.m_terminalNumber; OnChairAssign(num); return TRUE; } PBoolean H230Control::OnReceiveFloorAssignRequest(const H245_TerminalLabel & req) { const H245_TerminalNumber & num = req.m_terminalNumber; OnFloorAssign(num); return TRUE; } PBoolean H230Control::OnReceiveChairTokenRequest() { OnChairTokenRequest(); return TRUE; } PBoolean H230Control::OnGeneralRequest(int request) { switch (request) { case H245_ConferenceRequest::e_terminalListRequest : OnTerminalListRequest(); case H245_ConferenceRequest::e_makeMeChair : ChairRequested(m_userID,FALSE); break; case H245_ConferenceRequest::e_cancelMakeMeChair : ChairRequested(m_userID,TRUE); break; default: break; } return TRUE; } PBoolean H230Control::OnHandleConferenceResponse(const H245_ConferenceResponse & resp) { switch (resp.GetTag()) { case H245_ConferenceResponse::e_terminalListResponse : return OnReceiveTerminalListResponse(resp); case H245_ConferenceResponse::e_makeMeChairResponse : return OnReceiveChairResponse(resp); case H245_ConferenceResponse::e_chairTokenOwnerResponse : return OnReceiveChairTokenResponse(resp); case H245_ConferenceResponse::e_terminalIDResponse : // Hijack for Chair Assign return OnReceiveChairAssignResponse(resp); case H245_ConferenceResponse::e_conferenceIDResponse : // Hijack for Floor Assign return OnReceiveFloorAssignResponse(resp); case H245_ConferenceResponse::e_mCTerminalIDResponse : case H245_ConferenceResponse::e_passwordResponse : case H245_ConferenceResponse::e_videoCommandReject : case H245_ConferenceResponse::e_terminalDropReject : // Not Implemented case H245_ConferenceResponse::e_extensionAddressResponse : case H245_ConferenceResponse::e_terminalCertificateResponse : case H245_ConferenceResponse::e_broadcastMyLogicalChannelResponse : case H245_ConferenceResponse::e_makeTerminalBroadcasterResponse : case H245_ConferenceResponse::e_sendThisSourceResponse : case H245_ConferenceResponse::e_requestAllTerminalIDsResponse : case H245_ConferenceResponse::e_remoteMCResponse : default: return FALSE; } } PBoolean H230Control::OnReceiveChairTokenResponse(const H245_ConferenceResponse_chairTokenOwnerResponse & resp) { const H245_TerminalLabel & label = resp.m_terminalLabel; const H245_TerminalNumber & number = label.m_terminalNumber; int num = number; const H245_TerminalID & id = resp.m_terminalID; PString name = id.AsString(); OnChairTokenResponse(num, name); return TRUE; } PBoolean H230Control::OnReceiveChairAssignResponse(const H245_ConferenceResponse_terminalIDResponse & resp) { const H245_TerminalLabel & label = resp.m_terminalLabel; const H245_TerminalNumber & number = label.m_terminalNumber; int num = number; if (num < m_userID) { m_ConferenceChair = TRUE; OnConferenceChair(TRUE); } else if (m_ConferenceChair) { m_ConferenceChair = FALSE; OnConferenceChair(FALSE); } ChairAssigned(num); return TRUE; } PBoolean H230Control::OnReceiveFloorAssignResponse(const H245_ConferenceResponse_conferenceIDResponse & resp) { const H245_TerminalLabel & label = resp.m_terminalLabel; const H245_TerminalNumber & number = label.m_terminalNumber; int num = number; if (num < m_userID) { m_ConferenceFloor = TRUE; OnConferenceFloor(TRUE); } else if (m_ConferenceChair) { m_ConferenceFloor = FALSE; OnConferenceFloor(FALSE); } FloorAssigned(num); return TRUE; } PBoolean H230Control::ChairTokenResponse(int termid , const PString & name) { H323ControlPDU pdu; H245_ConferenceResponse & resp = pdu.Build(H245_ResponseMessage::e_conferenceResponse); resp.SetTag(H245_ConferenceResponse::e_chairTokenOwnerResponse); H245_ConferenceResponse_chairTokenOwnerResponse & chair = resp; H245_TerminalLabel & label = chair.m_terminalLabel; H245_TerminalNumber & number = label.m_terminalNumber; number = termid; H245_McuNumber & mcu = label.m_mcuNumber; mcu = m_mcuID; H245_TerminalID & id = chair.m_terminalID; id = name; return WriteControlPDU(pdu); } PBoolean H230Control::ChairAssignResponse(int termid , const PString & termname) { H323ControlPDU pdu; H245_ConferenceResponse & resp = pdu.Build(H245_ResponseMessage::e_conferenceResponse); resp.SetTag(H245_ConferenceResponse::e_terminalIDResponse); H245_ConferenceResponse_terminalIDResponse & rep = resp; H245_TerminalLabel & label = rep.m_terminalLabel; H245_TerminalNumber & number = label.m_terminalNumber; number = termid; H245_McuNumber & mcu = label.m_mcuNumber; mcu = m_mcuID; H245_TerminalID & id = rep.m_terminalID; id.SetValue(termname); return WriteControlPDU(pdu); } PBoolean H230Control::FloorAssignResponse(int termid,const PString & termname) { H323ControlPDU pdu; H245_ConferenceResponse & resp = pdu.Build(H245_ResponseMessage::e_conferenceResponse); resp.SetTag(H245_ConferenceResponse::e_conferenceIDResponse); H245_ConferenceResponse_conferenceIDResponse & rep = resp; H245_TerminalLabel & label = rep.m_terminalLabel; H245_TerminalNumber & number = label.m_terminalNumber; number = termid; H245_McuNumber & mcu = label.m_mcuNumber; mcu = m_mcuID; H245_ConferenceID & id = rep.m_conferenceID; id.SetValue(termname); return WriteControlPDU(pdu); } PBoolean H230Control::OnReceiveChairResponse(const H245_ConferenceResponse_makeMeChairResponse & resp) { switch (resp.GetTag()) { case H245_ConferenceResponse_makeMeChairResponse::e_grantedChairToken: MakeChairResponse(TRUE); break; case H245_ConferenceResponse_makeMeChairResponse::e_deniedChairToken: MakeChairResponse(FALSE); break; } return TRUE; } PBoolean H230Control::OnReceiveTerminalListResponse(const H245_ArrayOf_TerminalLabel & termlist) { list node; for (PINDEX i = 0; i < termlist.GetSize(); i++) node.push_back(termlist[i].m_terminalNumber); OnTerminalListResponse(node); return TRUE; } PBoolean H230Control::TerminalListResponse(list node) { H323ControlPDU pdu; H245_ConferenceResponse & resp = pdu.Build(H245_ResponseMessage::e_conferenceResponse); resp.SetTag(H245_ConferenceResponse::e_terminalListResponse); H245_ArrayOf_TerminalLabel & termlist = resp; termlist.SetSize(node.size()); int i = 0; for (list::iterator r = node.begin(); r != node.end(); ++r) { termlist[i].m_mcuNumber = m_mcuID; termlist[i].m_terminalNumber = *r; i++; } return WriteControlPDU(pdu); } PBoolean H230Control::OnHandleConferenceCommand(const H245_ConferenceCommand & command) { switch (command.GetTag()) { case H245_ConferenceCommand::e_broadcastMyLogicalChannel : case H245_ConferenceCommand::e_cancelBroadcastMyLogicalChannel : case H245_ConferenceCommand::e_makeTerminalBroadcaster : case H245_ConferenceCommand::e_sendThisSource : case H245_ConferenceCommand::e_cancelMakeTerminalBroadcaster : case H245_ConferenceCommand::e_cancelSendThisSource : case H245_ConferenceCommand::e_dropConference : case H245_ConferenceCommand::e_substituteConferenceIDCommand : default: return FALSE; } } PBoolean H230Control::OnHandleConferenceIndication(const H245_ConferenceIndication & ind) { switch (ind.GetTag()) { case H245_ConferenceIndication::e_terminalNumberAssign : case H245_ConferenceIndication::e_terminalJoinedConference : case H245_ConferenceIndication::e_terminalLeftConference : case H245_ConferenceIndication::e_floorRequested : case H245_ConferenceIndication::e_requestForFloor : return OnGeneralIndication(ind.GetTag(),ind); // Not Implemented case H245_ConferenceIndication::e_sbeNumber : case H245_ConferenceIndication::e_seenByAtLeastOneOther : case H245_ConferenceIndication::e_cancelSeenByAtLeastOneOther : case H245_ConferenceIndication::e_seenByAll : case H245_ConferenceIndication::e_cancelSeenByAll : case H245_ConferenceIndication::e_terminalYouAreSeeing : case H245_ConferenceIndication::e_withdrawChairToken : case H245_ConferenceIndication::e_terminalYouAreSeeingInSubPictureNumber : case H245_ConferenceIndication::e_videoIndicateCompose : default: return FALSE; } } PBoolean H230Control::ConferenceJoinedInd(int termId) { H323ControlPDU pdu; H245_ConferenceIndication & ind = pdu.Build(H245_IndicationMessage::e_conferenceIndication); ind.SetTag(H245_ConferenceIndication::e_terminalJoinedConference); H245_TerminalLabel & terminalId = ind; terminalId.m_mcuNumber = m_mcuID; terminalId.m_terminalNumber = termId; return WriteControlPDU(pdu); } PBoolean H230Control::ConferenceLeftInd(int termId) { H323ControlPDU pdu; H245_ConferenceIndication & ind = pdu.Build(H245_IndicationMessage::e_conferenceIndication); ind.SetTag(H245_ConferenceIndication::e_terminalLeftConference); H245_TerminalLabel & terminalId = ind; terminalId.m_mcuNumber = m_mcuID; terminalId.m_terminalNumber = termId; return WriteControlPDU(pdu); } PBoolean H230Control::ConferenceTokenAssign(int mcuId, int termId) { m_userID = termId; m_mcuID = mcuId; H323ControlPDU pdu; H245_ConferenceIndication & ind = pdu.Build(H245_IndicationMessage::e_conferenceIndication); ind.SetTag(H245_ConferenceIndication::e_terminalNumberAssign); H245_TerminalLabel & terminalId = ind; terminalId.m_mcuNumber = m_mcuID; terminalId.m_terminalNumber = termId; return WriteControlPDU(pdu); } PBoolean H230Control::FloorRequest() { if (m_userID < 0) { PTRACE(4,"H230\tRequest denied: No conference token"); return FALSE; } H323ControlPDU pdu; H245_ConferenceIndication & req = pdu.Build(H245_IndicationMessage::e_conferenceIndication); req.SetTag(H245_ConferenceIndication::e_requestForFloor); return WriteControlPDU(pdu); } PBoolean H230Control::OnGeneralIndication(int req, const H245_TerminalLabel & label) { const H245_McuNumber & mcu = label.m_mcuNumber; const H245_TerminalNumber & number = label.m_terminalNumber; int num = number; switch (req) { case H245_ConferenceIndication::e_terminalNumberAssign : PTRACE(4,"H230\tUser assigned confID: " << num); SetLocalID(mcu,num); break; case H245_ConferenceIndication::e_terminalJoinedConference : ConferenceJoined(num); break; case H245_ConferenceIndication::e_terminalLeftConference : ConferenceLeft(num); break; case H245_ConferenceIndication::e_floorRequested : OnFloorRequested(num,FALSE); break; case H245_ConferenceIndication::e_requestForFloor : OnFloorRequest(); break; } return TRUE; } void H230Control::SetLocalID(int mcu, int num) { m_mcuID = mcu; m_userID = num; OnControlsEnabled(TRUE); } void H230Control::RemoveLocalID() { m_userID = 0; OnControlsEnabled(FALSE); } int H230Control::GetLocalID() { return m_userID; } /////////////////////////////////////////////////////////////////////////////////// PBoolean H230Control::OnHandleGenericPDU(const H245_GenericMessage & msg) { const H245_CapabilityIdentifier & id = msg.m_messageIdentifier; if (id.GetTag() != H245_CapabilityIdentifier::e_standard) return FALSE; const PASN_ObjectId & val = id; PString oid = val.AsString(); if ((oid != h230OID) && (oid != T124OID) && (oid != PACKOID)) { PTRACE(5,"H230\tReceived unknown Identifier " << oid); return FALSE; } if (!msg.HasOptionalField(H245_GenericMessage::e_messageContent)) { PTRACE(5,"H230\tReceived No Message contents!"); return FALSE; } PTRACE(5,"H230\tHandling Incoming PDU"); unsigned msgid; const PASN_Integer & num = msg.m_subMessageIdentifier; msgid = num; const H245_ArrayOf_GenericParameter & content = msg.m_messageContent; if (content.GetSize() > 0) { for (PINDEX i=0; i < content.GetSize(); i++) { const H245_GenericParameter & param = content[i]; const H245_ParameterIdentifier & id = param.m_parameterIdentifier; const PASN_Integer & idx = id; const H245_ParameterValue & genvalue = param.m_parameterValue; if (oid == h230OID) return ReceivedH230PDU(msgid, idx, genvalue); else if (oid == T124OID) return ReceivedT124PDU(msgid, idx, genvalue); else if (oid == PACKOID) return ReceivedPACKPDU(msgid, idx, genvalue); } } else return FALSE; return TRUE; } PBoolean H230Control::ReceivedH230PDU(unsigned /*msgId*/, unsigned /*paramId*/, const H245_ParameterValue & /*value*/) { return FALSE; } PBoolean H230Control::WriteControlPDU(const H323ControlPDU & /*pdu*/) { return FALSE; } ////////////////////////////////////////////////////////////////////////////////////////////// // T.124 Tunnelling PBoolean H230Control::ReceivedT124PDU(unsigned msgId, unsigned paramId, const H245_ParameterValue & value) { if ((msgId != 1) || (paramId != 1) || (value.GetTag() != H245_ParameterValue::e_octetString)) { PTRACE(4, "H230T124\tError: Message Incorrect Format"); return FALSE; } PASN_OctetString val = value; PPER_Stream argStream(val); GCC_GCCPDU pdu; if (!pdu.Decode(argStream)) { PTRACE(4, "H230T124\tError decoding Message"); return FALSE; } switch (pdu.GetTag()) { case GCC_GCCPDU::e_request: return OnReceivedT124Request(pdu); case GCC_GCCPDU::e_response: return OnReceivedT124Response(pdu); case GCC_GCCPDU::e_indication: return OnReceivedT124Indication(pdu); } return FALSE; } PBoolean H230Control::OnReceivedT124Request(const GCC_RequestPDU & pdu) { switch (pdu.GetTag()) { case GCC_RequestPDU::e_conferenceJoinRequest: return OnConferenceJoinRequest(pdu); case GCC_RequestPDU::e_conferenceAddRequest: return OnConferenceAddRequest(pdu); case GCC_RequestPDU::e_conferenceLockRequest: return OnConferenceAddRequest(pdu); case GCC_RequestPDU::e_conferenceUnlockRequest: return OnConferenceLockRequest(pdu); case GCC_RequestPDU::e_conferenceTerminateRequest: return OnConferenceUnlockRequest(pdu); case GCC_RequestPDU::e_conferenceEjectUserRequest: return OnConferenceTerminateRequest(pdu); case GCC_RequestPDU::e_conferenceTransferRequest: return OnConferenceTransferRequest(pdu); // not supported case GCC_RequestPDU::e_registryRegisterChannelRequest: case GCC_RequestPDU::e_registryAssignTokenRequest: case GCC_RequestPDU::e_registrySetParameterRequest: case GCC_RequestPDU::e_registryRetrieveEntryRequest: case GCC_RequestPDU::e_registryDeleteEntryRequest: case GCC_RequestPDU::e_registryMonitorEntryRequest: case GCC_RequestPDU::e_registryAllocateHandleRequest: case GCC_RequestPDU::e_nonStandardRequest: default: return FALSE; } } PBoolean H230Control::OnReceivedT124Response(const GCC_ResponsePDU & pdu) { switch (pdu.GetTag()) { case GCC_ResponsePDU::e_conferenceJoinResponse: return OnConferenceJoinResponse(pdu); case GCC_ResponsePDU::e_conferenceAddResponse: return OnConferenceAddResponse(pdu); case GCC_ResponsePDU::e_conferenceLockResponse: return OnConferenceLockResponse(pdu); case GCC_ResponsePDU::e_conferenceUnlockResponse: return OnConferenceUnlockResponse(pdu); case GCC_ResponsePDU::e_conferenceEjectUserResponse: return OnConferenceEjectUserResponse(pdu); case GCC_ResponsePDU::e_conferenceTransferResponse: return OnConferenceTransferResponse(pdu); case GCC_ResponsePDU::e_functionNotSupportedResponse: return OnFunctionNotSupportedResponse(pdu); // Not Suppported case GCC_ResponsePDU::e_registryResponse: case GCC_ResponsePDU::e_conferenceTerminateResponse: case GCC_ResponsePDU::e_registryAllocateHandleResponse: case GCC_ResponsePDU::e_nonStandardResponse: default: return FALSE; } } PBoolean H230Control::OnReceivedT124Indication(const GCC_IndicationPDU & pdu) { switch (pdu.GetTag()) { // Not yet Implemented case GCC_IndicationPDU::e_userIDIndication: case GCC_IndicationPDU::e_conferenceLockIndication: case GCC_IndicationPDU::e_conferenceUnlockIndication: case GCC_IndicationPDU::e_conferenceTerminateIndication: case GCC_IndicationPDU::e_conferenceEjectUserIndication: case GCC_IndicationPDU::e_conferenceTransferIndication: case GCC_IndicationPDU::e_rosterUpdateIndication: case GCC_IndicationPDU::e_applicationInvokeIndication: // Not Implemented case GCC_IndicationPDU::e_registryMonitorEntryIndication: case GCC_IndicationPDU::e_conductorAssignIndication: case GCC_IndicationPDU::e_conductorReleaseIndication: case GCC_IndicationPDU::e_conductorPermissionAskIndication: case GCC_IndicationPDU::e_conductorPermissionGrantIndication: case GCC_IndicationPDU::e_conferenceTimeRemainingIndication: case GCC_IndicationPDU::e_conferenceTimeInquireIndication: case GCC_IndicationPDU::e_conferenceTimeExtendIndication: case GCC_IndicationPDU::e_conferenceAssistanceIndication: case GCC_IndicationPDU::e_textMessageIndication: case GCC_IndicationPDU::e_nonStandardIndication: default: return FALSE; } return FALSE; } PBoolean H230Control::OnConferenceJoinRequest(const GCC_ConferenceJoinRequest & /*pdu*/) { if (!m_ConferenceChair) { // only a conference chair can request. PTRACE(4,"H230T124\tRequest denied: Not conference chair"); return FALSE; } // Unimplemented instead use the add request. return FALSE; } PBoolean H230Control::Invite(const PStringList & aliases) { if (!m_ConferenceChair) { // only a conference chair can add user PTRACE(4,"H230T124\tInvite Fail: Not conference chair"); return FALSE; } GCC_RequestPDU req; req.SetTag(GCC_RequestPDU::e_conferenceAddRequest); GCC_ConferenceAddRequest & pdu = req; GCC_UserID & id = pdu.m_requestingNode; id = m_userID; PASN_Integer & tag = pdu.m_tag; tag = 1; GCC_NetworkAddress & addr = pdu.m_networkAddress; addr.SetSize(aliases.GetSize()); for (PINDEX i=0; i < aliases.GetSize(); i++) { GCC_NetworkAddress_subtype & ad = addr[i]; ad.SetTag(GCC_NetworkAddress_subtype::e_nonStandard); GCC_NonStandardParameter & num = ad; num.m_key.SetTag(GCC_Key::e_object); PASN_ObjectId & idp = num.m_key; idp = PString(i); num.m_data.SetValue(aliases[i]); } H230T124PDU gpdu; gpdu.BuildRequest(req); return WriteControlPDU(gpdu); } PBoolean H230Control::OnConferenceAddRequest(const GCC_ConferenceAddRequest & pdu) { if (!m_ConferenceChair) { // only a conference chair can add user PTRACE(4,"H230T124\tRequest denied: Not conference chair"); return FALSE; } const GCC_NetworkAddress & addr = pdu.m_networkAddress; if (addr.GetSize()==0) { PTRACE(4,"H230T124\tRequest denied: No numbers to Add"); return FALSE; } PStringList addresses; for (PINDEX i=0; i < addr.GetSize(); i++) { const GCC_NetworkAddress_subtype & ad = (GCC_NetworkAddress_subtype &)addr[i]; if (ad.GetTag() == GCC_NetworkAddress_subtype::e_nonStandard) { const GCC_NonStandardParameter & num = ad; addresses.AppendString(num.m_data.AsString()); } } if (addresses.GetSize() > 0) OnInvite(addresses); return TRUE; } PBoolean H230Control::LockConference() { if (!m_ConferenceChair) { // only a conference chair can add user PTRACE(4,"H230T124\tInvite Fail: Not conference chair"); return FALSE; } GCC_RequestPDU req; req.SetTag(GCC_RequestPDU::e_conferenceLockRequest); H230T124PDU gpdu; gpdu.BuildRequest(req); return WriteControlPDU(gpdu); } PBoolean H230Control::OnConferenceLockRequest(const GCC_ConferenceLockRequest & /*pdu*/) { if (!m_ConferenceChair) { // only a conference chair can add user PTRACE(4,"H230T124\tRequest denied: Not conference chair"); return FALSE; } OnLockConference(TRUE); return TRUE; } PBoolean H230Control::UnLockConference() { if (!m_ConferenceChair) { // only a conference chair can add user PTRACE(4,"H230T124\tInvite Fail: Not conference chair"); return FALSE; } GCC_RequestPDU req; req.SetTag(GCC_RequestPDU::e_conferenceUnlockRequest); H230T124PDU gpdu; gpdu.BuildRequest(req); return WriteControlPDU(gpdu); } PBoolean H230Control::OnConferenceUnlockRequest(const GCC_ConferenceUnlockRequest & /*pdu*/) { if (!m_ConferenceChair) { // only a conference chair can add user PTRACE(4,"H230T124\tRequest denied: Not conference chair"); return FALSE; } OnLockConference(FALSE); return TRUE; } PBoolean H230Control::OnConferenceTerminateRequest(const GCC_ConferenceTerminateRequest & /*pdu*/) { return FALSE; } PBoolean H230Control::EjectUser(int node) { if (!m_ConferenceChair) { // only a conference chair can add user PTRACE(4,"H230T124\tInvite Fail: Not conference chair"); return FALSE; } GCC_RequestPDU req; req.SetTag(GCC_RequestPDU::e_conferenceEjectUserRequest); GCC_ConferenceEjectUserRequest & pdu = req; GCC_UserID & id = pdu.m_nodeToEject; id = node; GCC_ConferenceEjectUserRequest_reason & reason = pdu.m_reason; reason = GCC_ConferenceEjectUserRequest_reason::e_userInitiated; H230T124PDU gpdu; gpdu.BuildRequest(req); return WriteControlPDU(gpdu); } PBoolean H230Control::OnConferenceEjectUserRequest(const GCC_ConferenceEjectUserRequest & pdu) { if (!m_ConferenceChair) { // only a conference chair can add user PTRACE(4,"H230T124\tRequest denied: Not conference chair"); return FALSE; } OnEjectUser(pdu.m_nodeToEject); return TRUE; } PBoolean H230Control::TransferUser(list node,const PString & number) { if (!m_ConferenceChair) { // only a conference chair can add user PTRACE(4,"H230T124\tInvite Fail: Not conference chair"); return FALSE; } GCC_RequestPDU req; req.SetTag(GCC_RequestPDU::e_conferenceTransferRequest); GCC_ConferenceTransferRequest & pdu = req; GCC_ConferenceNameSelector & name = pdu.m_conferenceName; name.SetTag(GCC_ConferenceNameSelector::e_text); GCC_SimpleTextString & str = name; str.SetValue(number); pdu.IncludeOptionalField(GCC_ConferenceTransferRequest::e_transferringNodes); GCC_ArrayOf_UserID & nodes = pdu.m_transferringNodes; nodes.SetSize(node.size()); int i = 0; for (list::iterator r = node.begin(); r != node.end(); ++r) { nodes[i] = *r; i++; } H230T124PDU gpdu; gpdu.BuildRequest(req); return WriteControlPDU(gpdu); } PBoolean H230Control::OnConferenceTransferRequest(const GCC_ConferenceTransferRequest & pdu) { if (!m_ConferenceChair) { // only a conference chair can add user PTRACE(4,"H230T124\tInvite Fail: Not conference chair"); return FALSE; } const GCC_ConferenceNameSelector & name = pdu.m_conferenceName; PString destination = PString(); if (name.GetTag() == GCC_ConferenceNameSelector::e_text) { const GCC_SimpleTextString & str = name; destination = str; } list node; if (pdu.HasOptionalField(GCC_ConferenceTransferRequest::e_transferringNodes)) { const GCC_ArrayOf_UserID & nodes = pdu.m_transferringNodes; for (PINDEX i=0; i < nodes.GetSize(); i++) node.push_back(nodes[i]); } OnTransferUser(node,destination); return TRUE; } PBoolean H230Control::OnConferenceJoinResponse(const GCC_ConferenceJoinResponse & /*pdu*/) { return FALSE; } PBoolean H230Control::InviteResponse(int id, const PString & calledNo, AddResponse response, int errCode) { GCC_ResponsePDU resp; resp.SetTag(GCC_ResponsePDU::e_conferenceAddResponse); GCC_ConferenceAddResponse & pdu = resp; PASN_Integer & tag = pdu.m_tag; tag = id; GCC_ConferenceAddResponse_result & result = pdu.m_result; result = response; pdu.IncludeOptionalField(GCC_ConferenceAddResponse::e_userData); GCC_UserData & data = pdu.m_userData; data.SetSize(2); for (PINDEX i=0; i < 2; i++) { GCC_UserData_subtype entry; entry.IncludeOptionalField(GCC_UserData_subtype::e_value); GCC_Key & key = entry.m_key; key.SetTag(GCC_Key::e_object); PASN_OctetString & id =key; id.SetValue(PString(i)); switch (i) { case 0: entry.m_value.SetValue(calledNo); case 1: entry.m_value.SetValue(PString(errCode)); } data[i] = entry; } H230T124PDU gpdu; gpdu.BuildResponse(resp); return WriteControlPDU(gpdu); } PBoolean H230Control::OnConferenceAddResponse(const GCC_ConferenceAddResponse & pdu) { const PASN_Integer & tag = pdu.m_tag; int id = tag; const GCC_ConferenceAddResponse_result & result = pdu.m_result; int response = result; PString calledNo = PString(); PString errCode = "0"; if (pdu.HasOptionalField(GCC_ConferenceAddResponse::e_userData)) { const GCC_UserData & data = pdu.m_userData; for (PINDEX i = 0; i < data.GetSize(); i++) { const GCC_UserData_subtype & entry = pdu.m_userData[i]; if (entry.HasOptionalField(GCC_UserData_subtype::e_value)) { const GCC_Key & key = entry.m_key; if (key.GetTag() == GCC_Key::e_object) { const PASN_OctetString & id = key; PString k = id.AsString(); switch (k.AsInteger()) { case 0: calledNo = entry.m_value.AsString(); case 1: errCode = entry.m_value.AsString(); } } } } } OnInviteResponse(id,calledNo,(AddResponse)response, errCode.AsInteger()); return TRUE; } PBoolean H230Control::LockConferenceResponse(LockResponse lock) { GCC_ResponsePDU resp; resp.SetTag(GCC_ResponsePDU::e_conferenceLockResponse); GCC_ConferenceLockResponse & pdu = resp; pdu.m_result = lock; H230T124PDU gpdu; gpdu.BuildResponse(resp); return WriteControlPDU(gpdu); } PBoolean H230Control::OnConferenceLockResponse(const GCC_ConferenceLockResponse & pdu) { int resp = pdu.m_result; OnLockConferenceResponse((LockResponse)resp); return TRUE; } PBoolean H230Control::UnLockConferenceResponse(LockResponse lock) { GCC_ResponsePDU resp; resp.SetTag(GCC_ResponsePDU::e_conferenceUnlockResponse); GCC_ConferenceUnlockResponse & pdu = resp; pdu.m_result = lock; H230T124PDU gpdu; gpdu.BuildResponse(resp); return WriteControlPDU(gpdu); } PBoolean H230Control::OnConferenceUnlockResponse(const GCC_ConferenceUnlockResponse & pdu) { int resp = pdu.m_result; OnUnLockConferenceResponse((LockResponse)resp); return TRUE; } PBoolean H230Control::EjectUserResponse(int node, EjectResponse lock) { GCC_ResponsePDU resp; resp.SetTag(GCC_ResponsePDU::e_conferenceEjectUserResponse); GCC_ConferenceEjectUserResponse & pdu = resp; pdu.m_nodeToEject = node; pdu.m_result = lock; H230T124PDU gpdu; gpdu.BuildResponse(resp); return WriteControlPDU(gpdu); } PBoolean H230Control::OnConferenceEjectUserResponse(const GCC_ConferenceEjectUserResponse & pdu) { int result = pdu.m_result; OnEjectUserResponse(pdu.m_nodeToEject, (EjectResponse)result); return TRUE; } PBoolean H230Control::TransferUserResponse(list node,const PString & number,TransferResponse result) { GCC_ResponsePDU resp; resp.SetTag(GCC_ResponsePDU::e_conferenceTransferResponse); GCC_ConferenceTransferResponse & pdu = resp; GCC_ConferenceNameSelector & name = pdu.m_conferenceName; name.SetTag(GCC_ConferenceNameSelector::e_text); GCC_SimpleTextString & str = name; str.SetValue(number); pdu.IncludeOptionalField(GCC_ConferenceTransferRequest::e_transferringNodes); GCC_ArrayOf_UserID & nodes = pdu.m_transferringNodes; nodes.SetSize(node.size()); int i = 0; for (list::iterator r = node.begin(); r != node.end(); ++r) { nodes[i] = *r; i++; } GCC_ConferenceTransferResponse_result & rst = pdu.m_result; rst = result; H230T124PDU gpdu; gpdu.BuildResponse(resp); return WriteControlPDU(gpdu); } PBoolean H230Control::OnConferenceTransferResponse(const GCC_ConferenceTransferResponse & pdu) { const GCC_ConferenceNameSelector & name = pdu.m_conferenceName; PString destination = PString(); if (name.GetTag() == GCC_ConferenceNameSelector::e_text) { const GCC_SimpleTextString & str = name; destination = str; } list node; if (pdu.HasOptionalField(GCC_ConferenceTransferRequest::e_transferringNodes)) { const GCC_ArrayOf_UserID & nodes = pdu.m_transferringNodes; for (PINDEX i=0; i < nodes.GetSize(); i++) node.push_back(nodes[i]); } const GCC_ConferenceTransferResponse_result & rst = pdu.m_result; int response = rst; OnTransferUserResponse(node,destination,(TransferResponse)response); return TRUE; } PBoolean H230Control::OnFunctionNotSupportedResponse(const GCC_FunctionNotSupportedResponse & /*pdu*/) { return FALSE; } /////////////////////////////////////////////////////////////////////////// PBoolean H230Control::UserEnquiry(list node) { if (m_userID < 0) { PTRACE(4,"H230\tRequest denied: No conference token"); return FALSE; } PASN_OctetString rawpdu; H245_ArrayOf_TerminalLabel labels; labels.SetSize(node.size()); int i = 0; for (list::iterator r = node.begin(); r != node.end(); ++r) { H245_TerminalLabel id; H245_McuNumber & mcu = id.m_mcuNumber; mcu = m_mcuID; H245_TerminalNumber lab = id.m_terminalNumber; lab = (int)*r; labels[i] = id; i++; } rawpdu.EncodeSubType(labels); PTRACE(6,"CONF\t" << labels); return SendPACKGenericRequest(1,rawpdu); } PBoolean H230Control::UserEnquiryResponse(const list & userlist) { PASN_OctetString rawpdu; H230OID2_ParticipantList ulist; H230OID2_ArrayOf_Participant & users = ulist.m_list; users.SetSize(userlist.size()); int i = 0; for (std::list::const_iterator r = userlist.begin(); r != userlist.end(); ++r) { userInfo u = *r; H230OID2_Participant & user = users[i]; user.m_token = u.m_Token; user.m_number = u.m_Number; if (u.m_Name.GetLength() > 0) { user.IncludeOptionalField(H230OID2_Participant::e_name); user.m_name = u.m_Name; } if (u.m_vCard.GetLength() > 0) { user.IncludeOptionalField(H230OID2_Participant::e_vCard); user.m_vCard = u.m_vCard; } i++; } PTRACE(4,"H230PACK\tSending UserList " << ulist); rawpdu.EncodeSubType(ulist); return SendPACKGenericResponse(2,rawpdu); } PBoolean H230Control::SendPACKGenericRequest(int paramid,const PASN_OctetString & rawpdu) { H323ControlPDU pdu; H245_GenericMessage & msg = pdu.Build(H245_RequestMessage::e_genericRequest); msg.IncludeOptionalField(H245_GenericMessage::e_subMessageIdentifier); msg.IncludeOptionalField(H245_GenericMessage::e_messageContent); H245_CapabilityIdentifier & id = msg.m_messageIdentifier; id.SetTag(H245_CapabilityIdentifier::e_standard); PASN_ObjectId & val = id; val.SetValue(PACKOID); PASN_Integer & num = msg.m_subMessageIdentifier; num = 1; msg.SetTag(H245_GenericMessage::e_messageContent); H245_ArrayOf_GenericParameter & content = msg.m_messageContent; content.SetSize(1); H245_GenericParameter & param = content[0]; H245_ParameterIdentifier & idm = param.m_parameterIdentifier; idm.SetTag(H245_ParameterIdentifier::e_standard); PASN_Integer & idx = idm; idx = paramid; H245_ParameterValue & genvalue = param.m_parameterValue; genvalue.SetTag(H245_ParameterValue::e_octetString); PASN_OctetString & valg = param.m_parameterValue; valg = rawpdu; return WriteControlPDU(pdu); } PBoolean H230Control::SendPACKGenericResponse(int paramid, const PASN_OctetString & rawpdu) { H323ControlPDU pdu; H245_GenericMessage & msg = pdu.Build(H245_ResponseMessage::e_genericResponse); msg.IncludeOptionalField(H245_GenericMessage::e_subMessageIdentifier); msg.IncludeOptionalField(H245_GenericMessage::e_messageContent); H245_CapabilityIdentifier & id = msg.m_messageIdentifier; id.SetTag(H245_CapabilityIdentifier::e_standard); PASN_ObjectId & val = id; val.SetValue(PACKOID); PASN_Integer & num = msg.m_subMessageIdentifier; num = 2; msg.SetTag(H245_GenericMessage::e_messageContent); H245_ArrayOf_GenericParameter & content = msg.m_messageContent; content.SetSize(1); H245_GenericParameter & param = content[0]; H245_ParameterIdentifier & idm = param.m_parameterIdentifier; idm.SetTag(H245_ParameterIdentifier::e_standard); PASN_Integer & idx = idm; idx = paramid; H245_ParameterValue & genvalue = param.m_parameterValue; genvalue.SetTag(H245_ParameterValue::e_octetString); PASN_OctetString & valg = param.m_parameterValue; valg = rawpdu; return WriteControlPDU(pdu); } PBoolean H230Control::ReceivedPACKPDU(unsigned msgId, unsigned paramId, const H245_ParameterValue & value) { if (value.GetTag() != H245_ParameterValue::e_octetString) { PTRACE(4, "H230PACK\tError: Message Incorrect Format"); return FALSE; } PTRACE(4, "H230PACK\tProcessing message " << paramId); switch (msgId) { case 1: return OnReceivePACKRequest(value); case 2: return OnReceivePACKResponse(value); default: return FALSE; } } PBoolean H230Control::OnReceivePACKRequest(const PASN_OctetString & rawpdu) { PPER_Stream argStream(rawpdu); H245_ArrayOf_TerminalLabel pdu; if (!pdu.Decode(argStream)) { PTRACE(4, "H230PACK\tError decoding Message"); return FALSE; } PTRACE(5, "H230PACK\tDecoded Message " << pdu); list req; for (PINDEX i =0; i < pdu.GetSize(); i++) { H245_TerminalNumber lab = pdu[i].m_terminalNumber; req.push_back(lab); } OnUserEnquiry(req); return TRUE; } PBoolean H230Control::OnReceivePACKResponse(const PASN_OctetString & rawpdu) { PPER_Stream argStream(rawpdu); H230OID2_ParticipantList list; if (!list.Decode(argStream)) { PTRACE(4, "H230PACK\tError decoding Message"); return FALSE; } PTRACE(5, "H230PACK\tDecoded Message " << list); H230OID2_ArrayOf_Participant & users = list.m_list; std::list userlist; for (PINDEX i=0; i < users.GetSize(); ++i) { userInfo * u = new userInfo(); H230OID2_Participant & user = users[i]; u->m_Token = user.m_token; u->m_Number = user.m_number; if (user.HasOptionalField(H230OID2_Participant::e_name)) u->m_Name = user.m_name; else u->m_Name = PString(); if (user.HasOptionalField(H230OID2_Participant::e_vCard)) u->m_vCard = user.m_vCard.AsString(); else u->m_vCard = PString(); PTRACE(4,"H230PACK\tReading " << u->m_Number); userlist.push_back(*u); } if (userlist.size() > 0) OnUserEnquiryResponse(userlist); return TRUE; } void H230Control::SetChair(PBoolean success) { m_ConferenceChair = success; } void H230Control::SetFloor(PBoolean success) { m_ConferenceFloor = success; } ////////////////////////////////////////////////////////////////////// void H230T124PDU::BuildRequest(GCC_RequestPDU & pdu) { Build(H245_RequestMessage::e_genericRequest); PASN_OctetString raw; raw.EncodeSubType(pdu); BuildGeneric(raw); } void H230T124PDU::BuildResponse(GCC_ResponsePDU & pdu) { Build(H245_ResponseMessage::e_genericResponse); PASN_OctetString raw; raw.EncodeSubType(pdu); BuildGeneric(raw); } void H230T124PDU::BuildIndication(GCC_IndicationPDU & pdu) { Build(H245_IndicationMessage::e_genericIndication); PASN_OctetString raw; raw.EncodeSubType(pdu); BuildGeneric(raw); } void H230T124PDU::BuildGeneric(PASN_OctetString & pdu) { H245_GenericMessage & msg = (H245_GenericMessage &)(*this); msg.IncludeOptionalField(H245_GenericMessage::e_subMessageIdentifier); msg.IncludeOptionalField(H245_GenericMessage::e_messageContent); H245_CapabilityIdentifier & id = msg.m_messageIdentifier; id.SetTag(H245_CapabilityIdentifier::e_standard); PASN_ObjectId & val = id; val.SetValue(T124OID); PASN_Integer & num = msg.m_subMessageIdentifier; num = 1; msg.SetTag(H245_GenericMessage::e_messageContent); H245_ArrayOf_GenericParameter & content = msg.m_messageContent; content.SetSize(1); H245_GenericParameter & param = content[0]; H245_ParameterIdentifier & idm = param.m_parameterIdentifier; idm.SetTag(H245_ParameterIdentifier::e_standard); PASN_Integer & idx = idm; idx = 1; H245_ParameterValue & genvalue = param.m_parameterValue; genvalue.SetTag(H245_ParameterValue::e_octetString); PASN_OctetString & valg = genvalue; valg = pdu; } /////////////////////////////////////////////////////////////////////////// const int requestTimeout = 15; H230Control_EndPoint::result::result() { errCode = -1; node = -1; cancel = FALSE; name = PString(); } PBoolean H230Control_EndPoint::ReqInvite(const PStringList & aliases) { PWaitAndSignal m(requestMutex); return Invite(aliases); } PBoolean H230Control_EndPoint::ReqLockConference() { PWaitAndSignal m(requestMutex); delete res; res = new result(); if (LockConference()) { responseMutex.Wait(requestTimeout); return (res->errCode == 0); } return FALSE; } PBoolean H230Control_EndPoint::ReqUnLockConference() { PWaitAndSignal m(requestMutex); delete res; res = new result(); if (UnLockConference()) { responseMutex.Wait(requestTimeout); return (res->errCode == 0); } return FALSE; } PBoolean H230Control_EndPoint::ReqEjectUser(int node) { PWaitAndSignal m(requestMutex); delete res; res = new result(); if (EjectUser(node)) { responseMutex.Wait(requestTimeout); return (res->errCode == 0); } return FALSE; } PBoolean H230Control_EndPoint::ReqTransferUser(list node,const PString & number) { PWaitAndSignal m(requestMutex); delete res; res = new result(); if (TransferUser(node,number)) { responseMutex.Wait(requestTimeout); return (res->errCode == 0); } return FALSE; } PBoolean H230Control_EndPoint::ReqTerminalList(list & node) { PWaitAndSignal m(requestMutex); delete res; res = new result(); if (TerminalListRequest()) { responseMutex.Wait(requestTimeout); node = res->ids; return (res->errCode == 0); } return FALSE; } PBoolean H230Control_EndPoint::ReqChair(PBoolean revoke) { PWaitAndSignal m(requestMutex); delete res; res = new result(); if (ChairRequest(revoke)) { responseMutex.Wait(requestTimeout); return (res->cancel); } return FALSE; } PBoolean H230Control_EndPoint::ReqChairAssign(int node) { PWaitAndSignal m(requestMutex); delete res; res = new result(); if (ChairAssign(node)) { responseMutex.Wait(requestTimeout); return (res->node == node); } return FALSE; } PBoolean H230Control_EndPoint::ReqFloor() { PWaitAndSignal m(requestMutex); delete res; res = new result(); if (FloorRequest()) { responseMutex.Wait(requestTimeout); return (res->errCode == 0); } return FALSE; } PBoolean H230Control_EndPoint::ReqFloorAssign(int node) { PWaitAndSignal m(requestMutex); delete res; res = new result(); if (FloorAssign(node)) { responseMutex.Wait(requestTimeout); return (res->node == node); } return FALSE; } PBoolean H230Control_EndPoint::ReqWhoIsChair(int & node) { PWaitAndSignal m(requestMutex); delete res; res = new result(); if (WhoIsChair()) { responseMutex.Wait(requestTimeout); node = res->node; return (res->errCode == 0); } return FALSE; } PBoolean H230Control_EndPoint::ReqUserEnquiry(list node, list & info) { PWaitAndSignal m(requestMutex); delete res; res = new result(); if (UserEnquiry(node)) { responseMutex.Wait(requestTimeout); info = res->info; return (res->errCode == 0); } return FALSE; } H230Control_EndPoint::H230Control_EndPoint(const PString & _h323token) : H230Control(_h323token) { } H230Control_EndPoint::~H230Control_EndPoint() { if (GetLocalID() > 0) OnControlsEnabled(FALSE); } void H230Control_EndPoint::OnLockConferenceResponse(LockResponse lock) { res->errCode = lock; responseMutex.Signal(); } void H230Control_EndPoint::OnUnLockConferenceResponse(LockResponse lock) { res->errCode = lock; responseMutex.Signal(); } void H230Control_EndPoint::OnEjectUserResponse(int node, EjectResponse lock) { res->node = node; res->errCode = lock; responseMutex.Signal(); } void H230Control_EndPoint::OnTransferUserResponse(list node,const PString & number, TransferResponse result) { res->ids = node; res->name = number; res->errCode = result; responseMutex.Signal(); } void H230Control_EndPoint::OnTerminalListResponse(list node) { // res->ids = node; // res->errCode = 0; for (list::iterator r = node.begin(); r != node.end(); ++r) ConferenceJoined(*r); responseMutex.Signal(); } void H230Control_EndPoint::MakeChairResponse(PBoolean success) { res->cancel = success; res->errCode = 0; responseMutex.Signal(); } void H230Control_EndPoint::ChairAssigned(int node) { // res->node = node; // res->errCode = 0; OnChairAssigned(node); responseMutex.Signal(); } void H230Control_EndPoint::FloorAssigned(int node) { // res->node = node; // res->errCode = 0; OnFloorAssigned(node); responseMutex.Signal(); } void H230Control_EndPoint::OnChairTokenResponse(int id, const PString & name) { res->node = id; res->name = name; res->errCode = 0; responseMutex.Signal(); } void H230Control_EndPoint::OnUserEnquiryResponse(const list & info) { // res->info = info; // res->errCode = 0; std::list::const_iterator r = info.begin(); while (r != info.end()) { ConferenceJoinInfo(r->m_Token,r->m_Number,r->m_Name,r->m_vCard); r++; } responseMutex.Signal(); } #endif h323plus/src/h230/OID2.cxx0000644000175000017500000001232511015524404013572 0ustar markmark// // OID2.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "OID2.h" #endif #include #include "h230/OID2.h" #define new PNEW #if ! H323_DISABLE_H230OID2 // // Participant // H230OID2_Participant::H230OID2_Participant(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_token.SetConstraints(PASN_Object::FixedConstraint, 0, 255); m_number.SetConstraints(PASN_Object::FixedConstraint, 1, 256); m_name.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H230OID2_Participant::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+8) << "token = " << setprecision(indent) << m_token << '\n'; strm << setw(indent+9) << "number = " << setprecision(indent) << m_number << '\n'; if (HasOptionalField(e_name)) strm << setw(indent+7) << "name = " << setprecision(indent) << m_name << '\n'; if (HasOptionalField(e_vCard)) strm << setw(indent+8) << "vCard = " << setprecision(indent) << m_vCard << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H230OID2_Participant::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H230OID2_Participant), PInvalidCast); #endif const H230OID2_Participant & other = (const H230OID2_Participant &)obj; Comparison result; if ((result = m_token.Compare(other.m_token)) != EqualTo) return result; if ((result = m_number.Compare(other.m_number)) != EqualTo) return result; if ((result = m_name.Compare(other.m_name)) != EqualTo) return result; if ((result = m_vCard.Compare(other.m_vCard)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H230OID2_Participant::GetDataLength() const { PINDEX length = 0; length += m_token.GetObjectLength(); length += m_number.GetObjectLength(); if (HasOptionalField(e_name)) length += m_name.GetObjectLength(); if (HasOptionalField(e_vCard)) length += m_vCard.GetObjectLength(); return length; } PBoolean H230OID2_Participant::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_token.Decode(strm)) return FALSE; if (!m_number.Decode(strm)) return FALSE; if (HasOptionalField(e_name) && !m_name.Decode(strm)) return FALSE; if (HasOptionalField(e_vCard) && !m_vCard.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H230OID2_Participant::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_token.Encode(strm); m_number.Encode(strm); if (HasOptionalField(e_name)) m_name.Encode(strm); if (HasOptionalField(e_vCard)) m_vCard.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H230OID2_Participant::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H230OID2_Participant::Class()), PInvalidCast); #endif return new H230OID2_Participant(*this); } // // ArrayOf_Participant // H230OID2_ArrayOf_Participant::H230OID2_ArrayOf_Participant(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H230OID2_ArrayOf_Participant::CreateObject() const { return new H230OID2_Participant; } H230OID2_Participant & H230OID2_ArrayOf_Participant::operator[](PINDEX i) const { return (H230OID2_Participant &)array[i]; } PObject * H230OID2_ArrayOf_Participant::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H230OID2_ArrayOf_Participant::Class()), PInvalidCast); #endif return new H230OID2_ArrayOf_Participant(*this); } // // ParticipantList // H230OID2_ParticipantList::H230OID2_ParticipantList(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_list.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H230OID2_ParticipantList::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "list = " << setprecision(indent) << m_list << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H230OID2_ParticipantList::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H230OID2_ParticipantList), PInvalidCast); #endif const H230OID2_ParticipantList & other = (const H230OID2_ParticipantList &)obj; Comparison result; if ((result = m_list.Compare(other.m_list)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H230OID2_ParticipantList::GetDataLength() const { PINDEX length = 0; length += m_list.GetObjectLength(); return length; } PBoolean H230OID2_ParticipantList::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_list.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H230OID2_ParticipantList::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_list.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H230OID2_ParticipantList::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H230OID2_ParticipantList::Class()), PInvalidCast); #endif return new H230OID2_ParticipantList(*this); } #endif // if ! H323_DISABLE_H230OID2 // End of OID2.cxx h323plus/src/h235.cxx0000644000175000017500000021444211015524273013112 0ustar markmark// // h235.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h235.h" #endif #include #include "h235.h" #define new PNEW #if ! H323_DISABLE_H235 #include "h235_t.cxx" // // ChallengeString // H235_ChallengeString::H235_ChallengeString(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 8, 128); } H235_ChallengeString::H235_ChallengeString(const char * v) { SetValue(v); } H235_ChallengeString::H235_ChallengeString(const PString & v) { SetValue(v); } H235_ChallengeString::H235_ChallengeString(const PBYTEArray & v) { SetValue(v); } H235_ChallengeString & H235_ChallengeString::operator=(const char * v) { SetValue(v); return *this; } H235_ChallengeString & H235_ChallengeString::operator=(const PString & v) { SetValue(v); return *this; } H235_ChallengeString & H235_ChallengeString::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H235_ChallengeString::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_ChallengeString::Class()), PInvalidCast); #endif return new H235_ChallengeString(*this); } // // TimeStamp // H235_TimeStamp::H235_TimeStamp(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 4294967295U); } H235_TimeStamp & H235_TimeStamp::operator=(int v) { SetValue(v); return *this; } H235_TimeStamp & H235_TimeStamp::operator=(unsigned v) { SetValue(v); return *this; } PObject * H235_TimeStamp::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_TimeStamp::Class()), PInvalidCast); #endif return new H235_TimeStamp(*this); } // // RandomVal // H235_RandomVal::H235_RandomVal(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { } H235_RandomVal & H235_RandomVal::operator=(int v) { SetValue(v); return *this; } H235_RandomVal & H235_RandomVal::operator=(unsigned v) { SetValue(v); return *this; } PObject * H235_RandomVal::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_RandomVal::Class()), PInvalidCast); #endif return new H235_RandomVal(*this); } // // Password // H235_Password::H235_Password(unsigned tag, PASN_Object::TagClass tagClass) : PASN_BMPString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 128); } H235_Password & H235_Password::operator=(const char * v) { SetValue(v); return *this; } H235_Password & H235_Password::operator=(const PString & v) { SetValue(v); return *this; } H235_Password & H235_Password::operator=(const PWCharArray & v) { SetValue(v); return *this; } H235_Password & H235_Password::operator=(const PASN_BMPString & v) { SetValue(v); return *this; } PObject * H235_Password::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_Password::Class()), PInvalidCast); #endif return new H235_Password(*this); } // // Identifier // H235_Identifier::H235_Identifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_BMPString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 128); } H235_Identifier & H235_Identifier::operator=(const char * v) { SetValue(v); return *this; } H235_Identifier & H235_Identifier::operator=(const PString & v) { SetValue(v); return *this; } H235_Identifier & H235_Identifier::operator=(const PWCharArray & v) { SetValue(v); return *this; } H235_Identifier & H235_Identifier::operator=(const PASN_BMPString & v) { SetValue(v); return *this; } PObject * H235_Identifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_Identifier::Class()), PInvalidCast); #endif return new H235_Identifier(*this); } // // KeyMaterial // H235_KeyMaterial::H235_KeyMaterial(unsigned tag, PASN_Object::TagClass tagClass) : PASN_BitString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 2048); } PObject * H235_KeyMaterial::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_KeyMaterial::Class()), PInvalidCast); #endif return new H235_KeyMaterial(*this); } // // NonStandardParameter // H235_NonStandardParameter::H235_NonStandardParameter(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H235_NonStandardParameter::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "nonStandardIdentifier = " << setprecision(indent) << m_nonStandardIdentifier << '\n'; strm << setw(indent+7) << "data = " << setprecision(indent) << m_data << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H235_NonStandardParameter::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H235_NonStandardParameter), PInvalidCast); #endif const H235_NonStandardParameter & other = (const H235_NonStandardParameter &)obj; Comparison result; if ((result = m_nonStandardIdentifier.Compare(other.m_nonStandardIdentifier)) != EqualTo) return result; if ((result = m_data.Compare(other.m_data)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H235_NonStandardParameter::GetDataLength() const { PINDEX length = 0; length += m_nonStandardIdentifier.GetObjectLength(); length += m_data.GetObjectLength(); return length; } PBoolean H235_NonStandardParameter::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nonStandardIdentifier.Decode(strm)) return FALSE; if (!m_data.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H235_NonStandardParameter::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nonStandardIdentifier.Encode(strm); m_data.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H235_NonStandardParameter::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_NonStandardParameter::Class()), PInvalidCast); #endif return new H235_NonStandardParameter(*this); } // // DHset // H235_DHset::H235_DHset(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_halfkey.SetConstraints(PASN_Object::FixedConstraint, 0, 2048); m_modSize.SetConstraints(PASN_Object::FixedConstraint, 0, 2048); m_generator.SetConstraints(PASN_Object::FixedConstraint, 0, 2048); } #ifndef PASN_NOPRINTON void H235_DHset::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "halfkey = " << setprecision(indent) << m_halfkey << '\n'; strm << setw(indent+10) << "modSize = " << setprecision(indent) << m_modSize << '\n'; strm << setw(indent+12) << "generator = " << setprecision(indent) << m_generator << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H235_DHset::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H235_DHset), PInvalidCast); #endif const H235_DHset & other = (const H235_DHset &)obj; Comparison result; if ((result = m_halfkey.Compare(other.m_halfkey)) != EqualTo) return result; if ((result = m_modSize.Compare(other.m_modSize)) != EqualTo) return result; if ((result = m_generator.Compare(other.m_generator)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H235_DHset::GetDataLength() const { PINDEX length = 0; length += m_halfkey.GetObjectLength(); length += m_modSize.GetObjectLength(); length += m_generator.GetObjectLength(); return length; } PBoolean H235_DHset::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_halfkey.Decode(strm)) return FALSE; if (!m_modSize.Decode(strm)) return FALSE; if (!m_generator.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H235_DHset::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_halfkey.Encode(strm); m_modSize.Encode(strm); m_generator.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H235_DHset::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_DHset::Class()), PInvalidCast); #endif return new H235_DHset(*this); } // // ECpoint // H235_ECpoint::H235_ECpoint(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_x.SetConstraints(PASN_Object::FixedConstraint, 0, 511); m_y.SetConstraints(PASN_Object::FixedConstraint, 0, 511); } #ifndef PASN_NOPRINTON void H235_ECpoint::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_x)) strm << setw(indent+4) << "x = " << setprecision(indent) << m_x << '\n'; if (HasOptionalField(e_y)) strm << setw(indent+4) << "y = " << setprecision(indent) << m_y << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H235_ECpoint::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H235_ECpoint), PInvalidCast); #endif const H235_ECpoint & other = (const H235_ECpoint &)obj; Comparison result; if ((result = m_x.Compare(other.m_x)) != EqualTo) return result; if ((result = m_y.Compare(other.m_y)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H235_ECpoint::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_x)) length += m_x.GetObjectLength(); if (HasOptionalField(e_y)) length += m_y.GetObjectLength(); return length; } PBoolean H235_ECpoint::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_x) && !m_x.Decode(strm)) return FALSE; if (HasOptionalField(e_y) && !m_y.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H235_ECpoint::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_x)) m_x.Encode(strm); if (HasOptionalField(e_y)) m_y.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H235_ECpoint::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_ECpoint::Class()), PInvalidCast); #endif return new H235_ECpoint(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H235_ECKASDH[]={ {"eckasdhp",0} ,{"eckasdh2",1} }; #endif // // ECKASDH // H235_ECKASDH::H235_ECKASDH(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H235_ECKASDH,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H235_ECKASDH::operator H235_ECKASDH_eckasdhp &() const #else H235_ECKASDH::operator H235_ECKASDH_eckasdhp &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_ECKASDH_eckasdhp), PInvalidCast); #endif return *(H235_ECKASDH_eckasdhp *)choice; } H235_ECKASDH::operator const H235_ECKASDH_eckasdhp &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_ECKASDH_eckasdhp), PInvalidCast); #endif return *(H235_ECKASDH_eckasdhp *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H235_ECKASDH::operator H235_ECKASDH_eckasdh2 &() const #else H235_ECKASDH::operator H235_ECKASDH_eckasdh2 &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_ECKASDH_eckasdh2), PInvalidCast); #endif return *(H235_ECKASDH_eckasdh2 *)choice; } H235_ECKASDH::operator const H235_ECKASDH_eckasdh2 &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_ECKASDH_eckasdh2), PInvalidCast); #endif return *(H235_ECKASDH_eckasdh2 *)choice; } PBoolean H235_ECKASDH::CreateObject() { switch (tag) { case e_eckasdhp : choice = new H235_ECKASDH_eckasdhp(); return TRUE; case e_eckasdh2 : choice = new H235_ECKASDH_eckasdh2(); return TRUE; } choice = NULL; return FALSE; } PObject * H235_ECKASDH::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_ECKASDH::Class()), PInvalidCast); #endif return new H235_ECKASDH(*this); } // // ECGDSASignature // H235_ECGDSASignature::H235_ECGDSASignature(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { m_r.SetConstraints(PASN_Object::FixedConstraint, 0, 511); m_s.SetConstraints(PASN_Object::FixedConstraint, 0, 511); } #ifndef PASN_NOPRINTON void H235_ECGDSASignature::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+4) << "r = " << setprecision(indent) << m_r << '\n'; strm << setw(indent+4) << "s = " << setprecision(indent) << m_s << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H235_ECGDSASignature::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H235_ECGDSASignature), PInvalidCast); #endif const H235_ECGDSASignature & other = (const H235_ECGDSASignature &)obj; Comparison result; if ((result = m_r.Compare(other.m_r)) != EqualTo) return result; if ((result = m_s.Compare(other.m_s)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H235_ECGDSASignature::GetDataLength() const { PINDEX length = 0; length += m_r.GetObjectLength(); length += m_s.GetObjectLength(); return length; } PBoolean H235_ECGDSASignature::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_r.Decode(strm)) return FALSE; if (!m_s.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H235_ECGDSASignature::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_r.Encode(strm); m_s.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H235_ECGDSASignature::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_ECGDSASignature::Class()), PInvalidCast); #endif return new H235_ECGDSASignature(*this); } // // TypedCertificate // H235_TypedCertificate::H235_TypedCertificate(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H235_TypedCertificate::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "type = " << setprecision(indent) << m_type << '\n'; strm << setw(indent+14) << "certificate = " << setprecision(indent) << m_certificate << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H235_TypedCertificate::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H235_TypedCertificate), PInvalidCast); #endif const H235_TypedCertificate & other = (const H235_TypedCertificate &)obj; Comparison result; if ((result = m_type.Compare(other.m_type)) != EqualTo) return result; if ((result = m_certificate.Compare(other.m_certificate)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H235_TypedCertificate::GetDataLength() const { PINDEX length = 0; length += m_type.GetObjectLength(); length += m_certificate.GetObjectLength(); return length; } PBoolean H235_TypedCertificate::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_type.Decode(strm)) return FALSE; if (!m_certificate.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H235_TypedCertificate::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_type.Encode(strm); m_certificate.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H235_TypedCertificate::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_TypedCertificate::Class()), PInvalidCast); #endif return new H235_TypedCertificate(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H235_AuthenticationBES[]={ {"default",0} ,{"radius",1} }; #endif // // AuthenticationBES // H235_AuthenticationBES::H235_AuthenticationBES(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H235_AuthenticationBES,2 #endif ) { } PBoolean H235_AuthenticationBES::CreateObject() { choice = (tag <= e_radius) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H235_AuthenticationBES::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_AuthenticationBES::Class()), PInvalidCast); #endif return new H235_AuthenticationBES(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H235_AuthenticationMechanism[]={ {"dhExch",0} ,{"pwdSymEnc",1} ,{"pwdHash",2} ,{"certSign",3} ,{"ipsec",4} ,{"tls",5} ,{"nonStandard",6} ,{"authenticationBES",7} ,{"keyExch",8} }; #endif // // AuthenticationMechanism // H235_AuthenticationMechanism::H235_AuthenticationMechanism(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 7, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H235_AuthenticationMechanism,9 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H235_AuthenticationMechanism::operator H235_NonStandardParameter &() const #else H235_AuthenticationMechanism::operator H235_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_NonStandardParameter), PInvalidCast); #endif return *(H235_NonStandardParameter *)choice; } H235_AuthenticationMechanism::operator const H235_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_NonStandardParameter), PInvalidCast); #endif return *(H235_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H235_AuthenticationMechanism::operator H235_AuthenticationBES &() const #else H235_AuthenticationMechanism::operator H235_AuthenticationBES &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_AuthenticationBES), PInvalidCast); #endif return *(H235_AuthenticationBES *)choice; } H235_AuthenticationMechanism::operator const H235_AuthenticationBES &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_AuthenticationBES), PInvalidCast); #endif return *(H235_AuthenticationBES *)choice; } PBoolean H235_AuthenticationMechanism::CreateObject() { switch (tag) { case e_dhExch : case e_pwdSymEnc : case e_pwdHash : case e_certSign : case e_ipsec : case e_tls : choice = new PASN_Null(); return TRUE; case e_nonStandard : choice = new H235_NonStandardParameter(); return TRUE; case e_authenticationBES : choice = new H235_AuthenticationBES(); return TRUE; case e_keyExch : choice = new PASN_ObjectId(); return TRUE; } choice = NULL; return FALSE; } PObject * H235_AuthenticationMechanism::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_AuthenticationMechanism::Class()), PInvalidCast); #endif return new H235_AuthenticationMechanism(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H235_Element[]={ {"octets",0} ,{"integer",1} ,{"bits",2} ,{"name",3} ,{"flag",4} }; #endif // // Element // H235_Element::H235_Element(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 5, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H235_Element,5 #endif ) { } PBoolean H235_Element::CreateObject() { switch (tag) { case e_octets : choice = new PASN_OctetString(); return TRUE; case e_integer : choice = new PASN_Integer(); return TRUE; case e_bits : choice = new PASN_BitString(); return TRUE; case e_name : choice = new PASN_BMPString(); return TRUE; case e_flag : choice = new PASN_Boolean(); return TRUE; } choice = NULL; return FALSE; } PObject * H235_Element::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_Element::Class()), PInvalidCast); #endif return new H235_Element(*this); } // // IV8 // H235_IV8::H235_IV8(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 8); } H235_IV8::H235_IV8(const char * v) { SetValue(v); } H235_IV8::H235_IV8(const PString & v) { SetValue(v); } H235_IV8::H235_IV8(const PBYTEArray & v) { SetValue(v); } H235_IV8 & H235_IV8::operator=(const char * v) { SetValue(v); return *this; } H235_IV8 & H235_IV8::operator=(const PString & v) { SetValue(v); return *this; } H235_IV8 & H235_IV8::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H235_IV8::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_IV8::Class()), PInvalidCast); #endif return new H235_IV8(*this); } // // IV16 // H235_IV16::H235_IV16(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 16); } H235_IV16::H235_IV16(const char * v) { SetValue(v); } H235_IV16::H235_IV16(const PString & v) { SetValue(v); } H235_IV16::H235_IV16(const PBYTEArray & v) { SetValue(v); } H235_IV16 & H235_IV16::operator=(const char * v) { SetValue(v); return *this; } H235_IV16 & H235_IV16::operator=(const PString & v) { SetValue(v); return *this; } H235_IV16 & H235_IV16::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H235_IV16::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_IV16::Class()), PInvalidCast); #endif return new H235_IV16(*this); } // // Params // H235_Params::H235_Params(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 3) { } #ifndef PASN_NOPRINTON void H235_Params::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_ranInt)) strm << setw(indent+9) << "ranInt = " << setprecision(indent) << m_ranInt << '\n'; if (HasOptionalField(e_iv8)) strm << setw(indent+6) << "iv8 = " << setprecision(indent) << m_iv8 << '\n'; if (HasOptionalField(e_iv16)) strm << setw(indent+7) << "iv16 = " << setprecision(indent) << m_iv16 << '\n'; if (HasOptionalField(e_iv)) strm << setw(indent+5) << "iv = " << setprecision(indent) << m_iv << '\n'; if (HasOptionalField(e_clearSalt)) strm << setw(indent+12) << "clearSalt = " << setprecision(indent) << m_clearSalt << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H235_Params::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H235_Params), PInvalidCast); #endif const H235_Params & other = (const H235_Params &)obj; Comparison result; if ((result = m_ranInt.Compare(other.m_ranInt)) != EqualTo) return result; if ((result = m_iv8.Compare(other.m_iv8)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H235_Params::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_ranInt)) length += m_ranInt.GetObjectLength(); if (HasOptionalField(e_iv8)) length += m_iv8.GetObjectLength(); return length; } PBoolean H235_Params::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_ranInt) && !m_ranInt.Decode(strm)) return FALSE; if (HasOptionalField(e_iv8) && !m_iv8.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_iv16, m_iv16)) return FALSE; if (!KnownExtensionDecode(strm, e_iv, m_iv)) return FALSE; if (!KnownExtensionDecode(strm, e_clearSalt, m_clearSalt)) return FALSE; return UnknownExtensionsDecode(strm); } void H235_Params::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_ranInt)) m_ranInt.Encode(strm); if (HasOptionalField(e_iv8)) m_iv8.Encode(strm); KnownExtensionEncode(strm, e_iv16, m_iv16); KnownExtensionEncode(strm, e_iv, m_iv); KnownExtensionEncode(strm, e_clearSalt, m_clearSalt); UnknownExtensionsEncode(strm); } PObject * H235_Params::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_Params::Class()), PInvalidCast); #endif return new H235_Params(*this); } // // ReturnSig // H235_ReturnSig::H235_ReturnSig(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, FALSE, 0) { } #ifndef PASN_NOPRINTON void H235_ReturnSig::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "generalId = " << setprecision(indent) << m_generalId << '\n'; strm << setw(indent+17) << "responseRandom = " << setprecision(indent) << m_responseRandom << '\n'; if (HasOptionalField(e_requestRandom)) strm << setw(indent+16) << "requestRandom = " << setprecision(indent) << m_requestRandom << '\n'; if (HasOptionalField(e_certificate)) strm << setw(indent+14) << "certificate = " << setprecision(indent) << m_certificate << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H235_ReturnSig::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H235_ReturnSig), PInvalidCast); #endif const H235_ReturnSig & other = (const H235_ReturnSig &)obj; Comparison result; if ((result = m_generalId.Compare(other.m_generalId)) != EqualTo) return result; if ((result = m_responseRandom.Compare(other.m_responseRandom)) != EqualTo) return result; if ((result = m_requestRandom.Compare(other.m_requestRandom)) != EqualTo) return result; if ((result = m_certificate.Compare(other.m_certificate)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H235_ReturnSig::GetDataLength() const { PINDEX length = 0; length += m_generalId.GetObjectLength(); length += m_responseRandom.GetObjectLength(); if (HasOptionalField(e_requestRandom)) length += m_requestRandom.GetObjectLength(); if (HasOptionalField(e_certificate)) length += m_certificate.GetObjectLength(); return length; } PBoolean H235_ReturnSig::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_generalId.Decode(strm)) return FALSE; if (!m_responseRandom.Decode(strm)) return FALSE; if (HasOptionalField(e_requestRandom) && !m_requestRandom.Decode(strm)) return FALSE; if (HasOptionalField(e_certificate) && !m_certificate.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H235_ReturnSig::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_generalId.Encode(strm); m_responseRandom.Encode(strm); if (HasOptionalField(e_requestRandom)) m_requestRandom.Encode(strm); if (HasOptionalField(e_certificate)) m_certificate.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H235_ReturnSig::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_ReturnSig::Class()), PInvalidCast); #endif return new H235_ReturnSig(*this); } // // EncodedReturnSig // H235_EncodedReturnSig::H235_EncodedReturnSig(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { } PObject * H235_EncodedReturnSig::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_EncodedReturnSig::Class()), PInvalidCast); #endif return new H235_EncodedReturnSig(*this); } // // KeySyncMaterial // H235_KeySyncMaterial::H235_KeySyncMaterial(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H235_KeySyncMaterial::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "generalID = " << setprecision(indent) << m_generalID << '\n'; strm << setw(indent+14) << "keyMaterial = " << setprecision(indent) << m_keyMaterial << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H235_KeySyncMaterial::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H235_KeySyncMaterial), PInvalidCast); #endif const H235_KeySyncMaterial & other = (const H235_KeySyncMaterial &)obj; Comparison result; if ((result = m_generalID.Compare(other.m_generalID)) != EqualTo) return result; if ((result = m_keyMaterial.Compare(other.m_keyMaterial)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H235_KeySyncMaterial::GetDataLength() const { PINDEX length = 0; length += m_generalID.GetObjectLength(); length += m_keyMaterial.GetObjectLength(); return length; } PBoolean H235_KeySyncMaterial::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_generalID.Decode(strm)) return FALSE; if (!m_keyMaterial.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H235_KeySyncMaterial::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_generalID.Encode(strm); m_keyMaterial.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H235_KeySyncMaterial::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_KeySyncMaterial::Class()), PInvalidCast); #endif return new H235_KeySyncMaterial(*this); } // // EncodedKeySyncMaterial // H235_EncodedKeySyncMaterial::H235_EncodedKeySyncMaterial(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { } PObject * H235_EncodedKeySyncMaterial::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_EncodedKeySyncMaterial::Class()), PInvalidCast); #endif return new H235_EncodedKeySyncMaterial(*this); } // // V3KeySyncMaterial // H235_V3KeySyncMaterial::H235_V3KeySyncMaterial(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 7, TRUE, 1) { } #ifndef PASN_NOPRINTON void H235_V3KeySyncMaterial::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_generalID)) strm << setw(indent+12) << "generalID = " << setprecision(indent) << m_generalID << '\n'; if (HasOptionalField(e_algorithmOID)) strm << setw(indent+15) << "algorithmOID = " << setprecision(indent) << m_algorithmOID << '\n'; strm << setw(indent+9) << "paramS = " << setprecision(indent) << m_paramS << '\n'; if (HasOptionalField(e_encryptedSessionKey)) strm << setw(indent+22) << "encryptedSessionKey = " << setprecision(indent) << m_encryptedSessionKey << '\n'; if (HasOptionalField(e_encryptedSaltingKey)) strm << setw(indent+22) << "encryptedSaltingKey = " << setprecision(indent) << m_encryptedSaltingKey << '\n'; if (HasOptionalField(e_clearSaltingKey)) strm << setw(indent+18) << "clearSaltingKey = " << setprecision(indent) << m_clearSaltingKey << '\n'; if (HasOptionalField(e_paramSsalt)) strm << setw(indent+13) << "paramSsalt = " << setprecision(indent) << m_paramSsalt << '\n'; if (HasOptionalField(e_keyDerivationOID)) strm << setw(indent+19) << "keyDerivationOID = " << setprecision(indent) << m_keyDerivationOID << '\n'; if (HasOptionalField(e_genericKeyMaterial)) strm << setw(indent+21) << "genericKeyMaterial = " << setprecision(indent) << m_genericKeyMaterial << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H235_V3KeySyncMaterial::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H235_V3KeySyncMaterial), PInvalidCast); #endif const H235_V3KeySyncMaterial & other = (const H235_V3KeySyncMaterial &)obj; Comparison result; if ((result = m_generalID.Compare(other.m_generalID)) != EqualTo) return result; if ((result = m_algorithmOID.Compare(other.m_algorithmOID)) != EqualTo) return result; if ((result = m_paramS.Compare(other.m_paramS)) != EqualTo) return result; if ((result = m_encryptedSessionKey.Compare(other.m_encryptedSessionKey)) != EqualTo) return result; if ((result = m_encryptedSaltingKey.Compare(other.m_encryptedSaltingKey)) != EqualTo) return result; if ((result = m_clearSaltingKey.Compare(other.m_clearSaltingKey)) != EqualTo) return result; if ((result = m_paramSsalt.Compare(other.m_paramSsalt)) != EqualTo) return result; if ((result = m_keyDerivationOID.Compare(other.m_keyDerivationOID)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H235_V3KeySyncMaterial::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_generalID)) length += m_generalID.GetObjectLength(); if (HasOptionalField(e_algorithmOID)) length += m_algorithmOID.GetObjectLength(); length += m_paramS.GetObjectLength(); if (HasOptionalField(e_encryptedSessionKey)) length += m_encryptedSessionKey.GetObjectLength(); if (HasOptionalField(e_encryptedSaltingKey)) length += m_encryptedSaltingKey.GetObjectLength(); if (HasOptionalField(e_clearSaltingKey)) length += m_clearSaltingKey.GetObjectLength(); if (HasOptionalField(e_paramSsalt)) length += m_paramSsalt.GetObjectLength(); if (HasOptionalField(e_keyDerivationOID)) length += m_keyDerivationOID.GetObjectLength(); return length; } PBoolean H235_V3KeySyncMaterial::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_generalID) && !m_generalID.Decode(strm)) return FALSE; if (HasOptionalField(e_algorithmOID) && !m_algorithmOID.Decode(strm)) return FALSE; if (!m_paramS.Decode(strm)) return FALSE; if (HasOptionalField(e_encryptedSessionKey) && !m_encryptedSessionKey.Decode(strm)) return FALSE; if (HasOptionalField(e_encryptedSaltingKey) && !m_encryptedSaltingKey.Decode(strm)) return FALSE; if (HasOptionalField(e_clearSaltingKey) && !m_clearSaltingKey.Decode(strm)) return FALSE; if (HasOptionalField(e_paramSsalt) && !m_paramSsalt.Decode(strm)) return FALSE; if (HasOptionalField(e_keyDerivationOID) && !m_keyDerivationOID.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_genericKeyMaterial, m_genericKeyMaterial)) return FALSE; return UnknownExtensionsDecode(strm); } void H235_V3KeySyncMaterial::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_generalID)) m_generalID.Encode(strm); if (HasOptionalField(e_algorithmOID)) m_algorithmOID.Encode(strm); m_paramS.Encode(strm); if (HasOptionalField(e_encryptedSessionKey)) m_encryptedSessionKey.Encode(strm); if (HasOptionalField(e_encryptedSaltingKey)) m_encryptedSaltingKey.Encode(strm); if (HasOptionalField(e_clearSaltingKey)) m_clearSaltingKey.Encode(strm); if (HasOptionalField(e_paramSsalt)) m_paramSsalt.Encode(strm); if (HasOptionalField(e_keyDerivationOID)) m_keyDerivationOID.Encode(strm); KnownExtensionEncode(strm, e_genericKeyMaterial, m_genericKeyMaterial); UnknownExtensionsEncode(strm); } PObject * H235_V3KeySyncMaterial::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_V3KeySyncMaterial::Class()), PInvalidCast); #endif return new H235_V3KeySyncMaterial(*this); } // // ECKASDH_eckasdhp // H235_ECKASDH_eckasdhp::H235_ECKASDH_eckasdhp(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { m_modulus.SetConstraints(PASN_Object::FixedConstraint, 0, 511); m_weierstrassA.SetConstraints(PASN_Object::FixedConstraint, 0, 511); m_weierstrassB.SetConstraints(PASN_Object::FixedConstraint, 0, 511); } #ifndef PASN_NOPRINTON void H235_ECKASDH_eckasdhp::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "public_key = " << setprecision(indent) << m_public_key << '\n'; strm << setw(indent+10) << "modulus = " << setprecision(indent) << m_modulus << '\n'; strm << setw(indent+7) << "base = " << setprecision(indent) << m_base << '\n'; strm << setw(indent+15) << "weierstrassA = " << setprecision(indent) << m_weierstrassA << '\n'; strm << setw(indent+15) << "weierstrassB = " << setprecision(indent) << m_weierstrassB << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H235_ECKASDH_eckasdhp::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H235_ECKASDH_eckasdhp), PInvalidCast); #endif const H235_ECKASDH_eckasdhp & other = (const H235_ECKASDH_eckasdhp &)obj; Comparison result; if ((result = m_public_key.Compare(other.m_public_key)) != EqualTo) return result; if ((result = m_modulus.Compare(other.m_modulus)) != EqualTo) return result; if ((result = m_base.Compare(other.m_base)) != EqualTo) return result; if ((result = m_weierstrassA.Compare(other.m_weierstrassA)) != EqualTo) return result; if ((result = m_weierstrassB.Compare(other.m_weierstrassB)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H235_ECKASDH_eckasdhp::GetDataLength() const { PINDEX length = 0; length += m_public_key.GetObjectLength(); length += m_modulus.GetObjectLength(); length += m_base.GetObjectLength(); length += m_weierstrassA.GetObjectLength(); length += m_weierstrassB.GetObjectLength(); return length; } PBoolean H235_ECKASDH_eckasdhp::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_public_key.Decode(strm)) return FALSE; if (!m_modulus.Decode(strm)) return FALSE; if (!m_base.Decode(strm)) return FALSE; if (!m_weierstrassA.Decode(strm)) return FALSE; if (!m_weierstrassB.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H235_ECKASDH_eckasdhp::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_public_key.Encode(strm); m_modulus.Encode(strm); m_base.Encode(strm); m_weierstrassA.Encode(strm); m_weierstrassB.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H235_ECKASDH_eckasdhp::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_ECKASDH_eckasdhp::Class()), PInvalidCast); #endif return new H235_ECKASDH_eckasdhp(*this); } // // ECKASDH_eckasdh2 // H235_ECKASDH_eckasdh2::H235_ECKASDH_eckasdh2(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { m_fieldSize.SetConstraints(PASN_Object::FixedConstraint, 0, 511); m_weierstrassA.SetConstraints(PASN_Object::FixedConstraint, 0, 511); m_weierstrassB.SetConstraints(PASN_Object::FixedConstraint, 0, 511); } #ifndef PASN_NOPRINTON void H235_ECKASDH_eckasdh2::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "public_key = " << setprecision(indent) << m_public_key << '\n'; strm << setw(indent+12) << "fieldSize = " << setprecision(indent) << m_fieldSize << '\n'; strm << setw(indent+7) << "base = " << setprecision(indent) << m_base << '\n'; strm << setw(indent+15) << "weierstrassA = " << setprecision(indent) << m_weierstrassA << '\n'; strm << setw(indent+15) << "weierstrassB = " << setprecision(indent) << m_weierstrassB << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H235_ECKASDH_eckasdh2::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H235_ECKASDH_eckasdh2), PInvalidCast); #endif const H235_ECKASDH_eckasdh2 & other = (const H235_ECKASDH_eckasdh2 &)obj; Comparison result; if ((result = m_public_key.Compare(other.m_public_key)) != EqualTo) return result; if ((result = m_fieldSize.Compare(other.m_fieldSize)) != EqualTo) return result; if ((result = m_base.Compare(other.m_base)) != EqualTo) return result; if ((result = m_weierstrassA.Compare(other.m_weierstrassA)) != EqualTo) return result; if ((result = m_weierstrassB.Compare(other.m_weierstrassB)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H235_ECKASDH_eckasdh2::GetDataLength() const { PINDEX length = 0; length += m_public_key.GetObjectLength(); length += m_fieldSize.GetObjectLength(); length += m_base.GetObjectLength(); length += m_weierstrassA.GetObjectLength(); length += m_weierstrassB.GetObjectLength(); return length; } PBoolean H235_ECKASDH_eckasdh2::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_public_key.Decode(strm)) return FALSE; if (!m_fieldSize.Decode(strm)) return FALSE; if (!m_base.Decode(strm)) return FALSE; if (!m_weierstrassA.Decode(strm)) return FALSE; if (!m_weierstrassB.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H235_ECKASDH_eckasdh2::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_public_key.Encode(strm); m_fieldSize.Encode(strm); m_base.Encode(strm); m_weierstrassA.Encode(strm); m_weierstrassB.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H235_ECKASDH_eckasdh2::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_ECKASDH_eckasdh2::Class()), PInvalidCast); #endif return new H235_ECKASDH_eckasdh2(*this); } // // ArrayOf_ProfileElement // H235_ArrayOf_ProfileElement::H235_ArrayOf_ProfileElement(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H235_ArrayOf_ProfileElement::CreateObject() const { return new H235_ProfileElement; } H235_ProfileElement & H235_ArrayOf_ProfileElement::operator[](PINDEX i) const { return (H235_ProfileElement &)array[i]; } PObject * H235_ArrayOf_ProfileElement::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_ArrayOf_ProfileElement::Class()), PInvalidCast); #endif return new H235_ArrayOf_ProfileElement(*this); } // // ProfileElement // H235_ProfileElement::H235_ProfileElement(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_elementID.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H235_ProfileElement::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "elementID = " << setprecision(indent) << m_elementID << '\n'; if (HasOptionalField(e_paramS)) strm << setw(indent+9) << "paramS = " << setprecision(indent) << m_paramS << '\n'; if (HasOptionalField(e_element)) strm << setw(indent+10) << "element = " << setprecision(indent) << m_element << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H235_ProfileElement::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H235_ProfileElement), PInvalidCast); #endif const H235_ProfileElement & other = (const H235_ProfileElement &)obj; Comparison result; if ((result = m_elementID.Compare(other.m_elementID)) != EqualTo) return result; if ((result = m_paramS.Compare(other.m_paramS)) != EqualTo) return result; if ((result = m_element.Compare(other.m_element)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H235_ProfileElement::GetDataLength() const { PINDEX length = 0; length += m_elementID.GetObjectLength(); if (HasOptionalField(e_paramS)) length += m_paramS.GetObjectLength(); if (HasOptionalField(e_element)) length += m_element.GetObjectLength(); return length; } PBoolean H235_ProfileElement::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_elementID.Decode(strm)) return FALSE; if (HasOptionalField(e_paramS) && !m_paramS.Decode(strm)) return FALSE; if (HasOptionalField(e_element) && !m_element.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H235_ProfileElement::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_elementID.Encode(strm); if (HasOptionalField(e_paramS)) m_paramS.Encode(strm); if (HasOptionalField(e_element)) m_element.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H235_ProfileElement::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_ProfileElement::Class()), PInvalidCast); #endif return new H235_ProfileElement(*this); } // // KeySignedMaterial // H235_KeySignedMaterial::H235_KeySignedMaterial(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, FALSE, 0) { } #ifndef PASN_NOPRINTON void H235_KeySignedMaterial::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "generalId = " << setprecision(indent) << m_generalId << '\n'; strm << setw(indent+10) << "mrandom = " << setprecision(indent) << m_mrandom << '\n'; if (HasOptionalField(e_srandom)) strm << setw(indent+10) << "srandom = " << setprecision(indent) << m_srandom << '\n'; if (HasOptionalField(e_timeStamp)) strm << setw(indent+12) << "timeStamp = " << setprecision(indent) << m_timeStamp << '\n'; strm << setw(indent+12) << "encrptval = " << setprecision(indent) << m_encrptval << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H235_KeySignedMaterial::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H235_KeySignedMaterial), PInvalidCast); #endif const H235_KeySignedMaterial & other = (const H235_KeySignedMaterial &)obj; Comparison result; if ((result = m_generalId.Compare(other.m_generalId)) != EqualTo) return result; if ((result = m_mrandom.Compare(other.m_mrandom)) != EqualTo) return result; if ((result = m_srandom.Compare(other.m_srandom)) != EqualTo) return result; if ((result = m_timeStamp.Compare(other.m_timeStamp)) != EqualTo) return result; if ((result = m_encrptval.Compare(other.m_encrptval)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H235_KeySignedMaterial::GetDataLength() const { PINDEX length = 0; length += m_generalId.GetObjectLength(); length += m_mrandom.GetObjectLength(); if (HasOptionalField(e_srandom)) length += m_srandom.GetObjectLength(); if (HasOptionalField(e_timeStamp)) length += m_timeStamp.GetObjectLength(); length += m_encrptval.GetObjectLength(); return length; } PBoolean H235_KeySignedMaterial::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_generalId.Decode(strm)) return FALSE; if (!m_mrandom.Decode(strm)) return FALSE; if (HasOptionalField(e_srandom) && !m_srandom.Decode(strm)) return FALSE; if (HasOptionalField(e_timeStamp) && !m_timeStamp.Decode(strm)) return FALSE; if (!m_encrptval.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H235_KeySignedMaterial::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_generalId.Encode(strm); m_mrandom.Encode(strm); if (HasOptionalField(e_srandom)) m_srandom.Encode(strm); if (HasOptionalField(e_timeStamp)) m_timeStamp.Encode(strm); m_encrptval.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H235_KeySignedMaterial::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_KeySignedMaterial::Class()), PInvalidCast); #endif return new H235_KeySignedMaterial(*this); } // // EncodedKeySignedMaterial // H235_EncodedKeySignedMaterial::H235_EncodedKeySignedMaterial(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { } PObject * H235_EncodedKeySignedMaterial::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_EncodedKeySignedMaterial::Class()), PInvalidCast); #endif return new H235_EncodedKeySignedMaterial(*this); } // // H235CertificateSignature // H235_H235CertificateSignature::H235_H235CertificateSignature(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H235_H235CertificateSignature::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "certificate = " << setprecision(indent) << m_certificate << '\n'; strm << setw(indent+17) << "responseRandom = " << setprecision(indent) << m_responseRandom << '\n'; if (HasOptionalField(e_requesterRandom)) strm << setw(indent+18) << "requesterRandom = " << setprecision(indent) << m_requesterRandom << '\n'; strm << setw(indent+12) << "signature = " << setprecision(indent) << m_signature << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H235_H235CertificateSignature::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H235_H235CertificateSignature), PInvalidCast); #endif const H235_H235CertificateSignature & other = (const H235_H235CertificateSignature &)obj; Comparison result; if ((result = m_certificate.Compare(other.m_certificate)) != EqualTo) return result; if ((result = m_responseRandom.Compare(other.m_responseRandom)) != EqualTo) return result; if ((result = m_requesterRandom.Compare(other.m_requesterRandom)) != EqualTo) return result; if ((result = m_signature.Compare(other.m_signature)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H235_H235CertificateSignature::GetDataLength() const { PINDEX length = 0; length += m_certificate.GetObjectLength(); length += m_responseRandom.GetObjectLength(); if (HasOptionalField(e_requesterRandom)) length += m_requesterRandom.GetObjectLength(); length += m_signature.GetObjectLength(); return length; } PBoolean H235_H235CertificateSignature::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_certificate.Decode(strm)) return FALSE; if (!m_responseRandom.Decode(strm)) return FALSE; if (HasOptionalField(e_requesterRandom) && !m_requesterRandom.Decode(strm)) return FALSE; if (!m_signature.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H235_H235CertificateSignature::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_certificate.Encode(strm); m_responseRandom.Encode(strm); if (HasOptionalField(e_requesterRandom)) m_requesterRandom.Encode(strm); m_signature.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H235_H235CertificateSignature::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_H235CertificateSignature::Class()), PInvalidCast); #endif return new H235_H235CertificateSignature(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H235_H235Key[]={ {"secureChannel",0} ,{"sharedSecret",1} ,{"certProtectedKey",2} ,{"secureSharedSecret",3} }; #endif // // H235Key // H235_H235Key::H235_H235Key(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H235_H235Key,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H235_H235Key::operator H235_KeyMaterial &() const #else H235_H235Key::operator H235_KeyMaterial &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_KeyMaterial), PInvalidCast); #endif return *(H235_KeyMaterial *)choice; } H235_H235Key::operator const H235_KeyMaterial &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_KeyMaterial), PInvalidCast); #endif return *(H235_KeyMaterial *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H235_H235Key::operator H235_ENCRYPTED &() const #else H235_H235Key::operator H235_ENCRYPTED &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_ENCRYPTED), PInvalidCast); #endif return *(H235_ENCRYPTED *)choice; } H235_H235Key::operator const H235_ENCRYPTED &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_ENCRYPTED), PInvalidCast); #endif return *(H235_ENCRYPTED *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H235_H235Key::operator H235_SIGNED &() const #else H235_H235Key::operator H235_SIGNED &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_SIGNED), PInvalidCast); #endif return *(H235_SIGNED *)choice; } H235_H235Key::operator const H235_SIGNED &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_SIGNED), PInvalidCast); #endif return *(H235_SIGNED *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H235_H235Key::operator H235_V3KeySyncMaterial &() const #else H235_H235Key::operator H235_V3KeySyncMaterial &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_V3KeySyncMaterial), PInvalidCast); #endif return *(H235_V3KeySyncMaterial *)choice; } H235_H235Key::operator const H235_V3KeySyncMaterial &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_V3KeySyncMaterial), PInvalidCast); #endif return *(H235_V3KeySyncMaterial *)choice; } PBoolean H235_H235Key::CreateObject() { switch (tag) { case e_secureChannel : choice = new H235_KeyMaterial(); return TRUE; case e_sharedSecret : choice = new H235_ENCRYPTED(); return TRUE; case e_certProtectedKey : choice = new H235_SIGNED(); return TRUE; case e_secureSharedSecret : choice = new H235_V3KeySyncMaterial(); return TRUE; } choice = NULL; return FALSE; } PObject * H235_H235Key::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_H235Key::Class()), PInvalidCast); #endif return new H235_H235Key(*this); } // // ClearToken // H235_ClearToken::H235_ClearToken(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 8, TRUE, 4) { } #ifndef PASN_NOPRINTON void H235_ClearToken::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "tokenOID = " << setprecision(indent) << m_tokenOID << '\n'; if (HasOptionalField(e_timeStamp)) strm << setw(indent+12) << "timeStamp = " << setprecision(indent) << m_timeStamp << '\n'; if (HasOptionalField(e_password)) strm << setw(indent+11) << "password = " << setprecision(indent) << m_password << '\n'; if (HasOptionalField(e_dhkey)) strm << setw(indent+8) << "dhkey = " << setprecision(indent) << m_dhkey << '\n'; if (HasOptionalField(e_challenge)) strm << setw(indent+12) << "challenge = " << setprecision(indent) << m_challenge << '\n'; if (HasOptionalField(e_random)) strm << setw(indent+9) << "random = " << setprecision(indent) << m_random << '\n'; if (HasOptionalField(e_certificate)) strm << setw(indent+14) << "certificate = " << setprecision(indent) << m_certificate << '\n'; if (HasOptionalField(e_generalID)) strm << setw(indent+12) << "generalID = " << setprecision(indent) << m_generalID << '\n'; if (HasOptionalField(e_nonStandard)) strm << setw(indent+14) << "nonStandard = " << setprecision(indent) << m_nonStandard << '\n'; if (HasOptionalField(e_eckasdhkey)) strm << setw(indent+13) << "eckasdhkey = " << setprecision(indent) << m_eckasdhkey << '\n'; if (HasOptionalField(e_sendersID)) strm << setw(indent+12) << "sendersID = " << setprecision(indent) << m_sendersID << '\n'; if (HasOptionalField(e_h235Key)) strm << setw(indent+10) << "h235Key = " << setprecision(indent) << m_h235Key << '\n'; if (HasOptionalField(e_profileInfo)) strm << setw(indent+14) << "profileInfo = " << setprecision(indent) << m_profileInfo << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H235_ClearToken::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H235_ClearToken), PInvalidCast); #endif const H235_ClearToken & other = (const H235_ClearToken &)obj; Comparison result; if ((result = m_tokenOID.Compare(other.m_tokenOID)) != EqualTo) return result; if ((result = m_timeStamp.Compare(other.m_timeStamp)) != EqualTo) return result; if ((result = m_password.Compare(other.m_password)) != EqualTo) return result; if ((result = m_dhkey.Compare(other.m_dhkey)) != EqualTo) return result; if ((result = m_challenge.Compare(other.m_challenge)) != EqualTo) return result; if ((result = m_random.Compare(other.m_random)) != EqualTo) return result; if ((result = m_certificate.Compare(other.m_certificate)) != EqualTo) return result; if ((result = m_generalID.Compare(other.m_generalID)) != EqualTo) return result; if ((result = m_nonStandard.Compare(other.m_nonStandard)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H235_ClearToken::GetDataLength() const { PINDEX length = 0; length += m_tokenOID.GetObjectLength(); if (HasOptionalField(e_timeStamp)) length += m_timeStamp.GetObjectLength(); if (HasOptionalField(e_password)) length += m_password.GetObjectLength(); if (HasOptionalField(e_dhkey)) length += m_dhkey.GetObjectLength(); if (HasOptionalField(e_challenge)) length += m_challenge.GetObjectLength(); if (HasOptionalField(e_random)) length += m_random.GetObjectLength(); if (HasOptionalField(e_certificate)) length += m_certificate.GetObjectLength(); if (HasOptionalField(e_generalID)) length += m_generalID.GetObjectLength(); if (HasOptionalField(e_nonStandard)) length += m_nonStandard.GetObjectLength(); return length; } PBoolean H235_ClearToken::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_tokenOID.Decode(strm)) return FALSE; if (HasOptionalField(e_timeStamp) && !m_timeStamp.Decode(strm)) return FALSE; if (HasOptionalField(e_password) && !m_password.Decode(strm)) return FALSE; if (HasOptionalField(e_dhkey) && !m_dhkey.Decode(strm)) return FALSE; if (HasOptionalField(e_challenge) && !m_challenge.Decode(strm)) return FALSE; if (HasOptionalField(e_random) && !m_random.Decode(strm)) return FALSE; if (HasOptionalField(e_certificate) && !m_certificate.Decode(strm)) return FALSE; if (HasOptionalField(e_generalID) && !m_generalID.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandard) && !m_nonStandard.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_eckasdhkey, m_eckasdhkey)) return FALSE; if (!KnownExtensionDecode(strm, e_sendersID, m_sendersID)) return FALSE; if (!KnownExtensionDecode(strm, e_h235Key, m_h235Key)) return FALSE; if (!KnownExtensionDecode(strm, e_profileInfo, m_profileInfo)) return FALSE; return UnknownExtensionsDecode(strm); } void H235_ClearToken::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_tokenOID.Encode(strm); if (HasOptionalField(e_timeStamp)) m_timeStamp.Encode(strm); if (HasOptionalField(e_password)) m_password.Encode(strm); if (HasOptionalField(e_dhkey)) m_dhkey.Encode(strm); if (HasOptionalField(e_challenge)) m_challenge.Encode(strm); if (HasOptionalField(e_random)) m_random.Encode(strm); if (HasOptionalField(e_certificate)) m_certificate.Encode(strm); if (HasOptionalField(e_generalID)) m_generalID.Encode(strm); if (HasOptionalField(e_nonStandard)) m_nonStandard.Encode(strm); KnownExtensionEncode(strm, e_eckasdhkey, m_eckasdhkey); KnownExtensionEncode(strm, e_sendersID, m_sendersID); KnownExtensionEncode(strm, e_h235Key, m_h235Key); KnownExtensionEncode(strm, e_profileInfo, m_profileInfo); UnknownExtensionsEncode(strm); } PObject * H235_ClearToken::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_ClearToken::Class()), PInvalidCast); #endif return new H235_ClearToken(*this); } // // EncodedGeneralToken // H235_EncodedGeneralToken::H235_EncodedGeneralToken(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { } PObject * H235_EncodedGeneralToken::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_EncodedGeneralToken::Class()), PInvalidCast); #endif return new H235_EncodedGeneralToken(*this); } // // PwdCertToken // H235_PwdCertToken::H235_PwdCertToken(unsigned tag, PASN_Object::TagClass tagClass) : H235_ClearToken(tag, tagClass) { IncludeOptionalField(e_generalID); IncludeOptionalField(e_timeStamp); } PObject * H235_PwdCertToken::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_PwdCertToken::Class()), PInvalidCast); #endif return new H235_PwdCertToken(*this); } // // EncodedPwdCertToken // H235_EncodedPwdCertToken::H235_EncodedPwdCertToken(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { } PObject * H235_EncodedPwdCertToken::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_EncodedPwdCertToken::Class()), PInvalidCast); #endif return new H235_EncodedPwdCertToken(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H235_CryptoToken[]={ {"cryptoEncryptedToken",0} ,{"cryptoSignedToken",1} ,{"cryptoHashedToken",2} ,{"cryptoPwdEncr",3} }; #endif // // CryptoToken // H235_CryptoToken::H235_CryptoToken(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H235_CryptoToken,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H235_CryptoToken::operator H235_CryptoToken_cryptoEncryptedToken &() const #else H235_CryptoToken::operator H235_CryptoToken_cryptoEncryptedToken &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_CryptoToken_cryptoEncryptedToken), PInvalidCast); #endif return *(H235_CryptoToken_cryptoEncryptedToken *)choice; } H235_CryptoToken::operator const H235_CryptoToken_cryptoEncryptedToken &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_CryptoToken_cryptoEncryptedToken), PInvalidCast); #endif return *(H235_CryptoToken_cryptoEncryptedToken *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H235_CryptoToken::operator H235_CryptoToken_cryptoSignedToken &() const #else H235_CryptoToken::operator H235_CryptoToken_cryptoSignedToken &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_CryptoToken_cryptoSignedToken), PInvalidCast); #endif return *(H235_CryptoToken_cryptoSignedToken *)choice; } H235_CryptoToken::operator const H235_CryptoToken_cryptoSignedToken &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_CryptoToken_cryptoSignedToken), PInvalidCast); #endif return *(H235_CryptoToken_cryptoSignedToken *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H235_CryptoToken::operator H235_CryptoToken_cryptoHashedToken &() const #else H235_CryptoToken::operator H235_CryptoToken_cryptoHashedToken &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_CryptoToken_cryptoHashedToken), PInvalidCast); #endif return *(H235_CryptoToken_cryptoHashedToken *)choice; } H235_CryptoToken::operator const H235_CryptoToken_cryptoHashedToken &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_CryptoToken_cryptoHashedToken), PInvalidCast); #endif return *(H235_CryptoToken_cryptoHashedToken *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H235_CryptoToken::operator H235_ENCRYPTED &() const #else H235_CryptoToken::operator H235_ENCRYPTED &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_ENCRYPTED), PInvalidCast); #endif return *(H235_ENCRYPTED *)choice; } H235_CryptoToken::operator const H235_ENCRYPTED &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_ENCRYPTED), PInvalidCast); #endif return *(H235_ENCRYPTED *)choice; } PBoolean H235_CryptoToken::CreateObject() { switch (tag) { case e_cryptoEncryptedToken : choice = new H235_CryptoToken_cryptoEncryptedToken(); return TRUE; case e_cryptoSignedToken : choice = new H235_CryptoToken_cryptoSignedToken(); return TRUE; case e_cryptoHashedToken : choice = new H235_CryptoToken_cryptoHashedToken(); return TRUE; case e_cryptoPwdEncr : choice = new H235_ENCRYPTED(); return TRUE; } choice = NULL; return FALSE; } PObject * H235_CryptoToken::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_CryptoToken::Class()), PInvalidCast); #endif return new H235_CryptoToken(*this); } // // CryptoToken_cryptoEncryptedToken // H235_CryptoToken_cryptoEncryptedToken::H235_CryptoToken_cryptoEncryptedToken(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H235_CryptoToken_cryptoEncryptedToken::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "tokenOID = " << setprecision(indent) << m_tokenOID << '\n'; strm << setw(indent+8) << "token = " << setprecision(indent) << m_token << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H235_CryptoToken_cryptoEncryptedToken::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H235_CryptoToken_cryptoEncryptedToken), PInvalidCast); #endif const H235_CryptoToken_cryptoEncryptedToken & other = (const H235_CryptoToken_cryptoEncryptedToken &)obj; Comparison result; if ((result = m_tokenOID.Compare(other.m_tokenOID)) != EqualTo) return result; if ((result = m_token.Compare(other.m_token)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H235_CryptoToken_cryptoEncryptedToken::GetDataLength() const { PINDEX length = 0; length += m_tokenOID.GetObjectLength(); length += m_token.GetObjectLength(); return length; } PBoolean H235_CryptoToken_cryptoEncryptedToken::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_tokenOID.Decode(strm)) return FALSE; if (!m_token.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H235_CryptoToken_cryptoEncryptedToken::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_tokenOID.Encode(strm); m_token.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H235_CryptoToken_cryptoEncryptedToken::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_CryptoToken_cryptoEncryptedToken::Class()), PInvalidCast); #endif return new H235_CryptoToken_cryptoEncryptedToken(*this); } // // CryptoToken_cryptoSignedToken // H235_CryptoToken_cryptoSignedToken::H235_CryptoToken_cryptoSignedToken(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H235_CryptoToken_cryptoSignedToken::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "tokenOID = " << setprecision(indent) << m_tokenOID << '\n'; strm << setw(indent+8) << "token = " << setprecision(indent) << m_token << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H235_CryptoToken_cryptoSignedToken::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H235_CryptoToken_cryptoSignedToken), PInvalidCast); #endif const H235_CryptoToken_cryptoSignedToken & other = (const H235_CryptoToken_cryptoSignedToken &)obj; Comparison result; if ((result = m_tokenOID.Compare(other.m_tokenOID)) != EqualTo) return result; if ((result = m_token.Compare(other.m_token)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H235_CryptoToken_cryptoSignedToken::GetDataLength() const { PINDEX length = 0; length += m_tokenOID.GetObjectLength(); length += m_token.GetObjectLength(); return length; } PBoolean H235_CryptoToken_cryptoSignedToken::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_tokenOID.Decode(strm)) return FALSE; if (!m_token.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H235_CryptoToken_cryptoSignedToken::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_tokenOID.Encode(strm); m_token.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H235_CryptoToken_cryptoSignedToken::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_CryptoToken_cryptoSignedToken::Class()), PInvalidCast); #endif return new H235_CryptoToken_cryptoSignedToken(*this); } // // CryptoToken_cryptoHashedToken // H235_CryptoToken_cryptoHashedToken::H235_CryptoToken_cryptoHashedToken(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H235_CryptoToken_cryptoHashedToken::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "tokenOID = " << setprecision(indent) << m_tokenOID << '\n'; strm << setw(indent+13) << "hashedVals = " << setprecision(indent) << m_hashedVals << '\n'; strm << setw(indent+8) << "token = " << setprecision(indent) << m_token << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H235_CryptoToken_cryptoHashedToken::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H235_CryptoToken_cryptoHashedToken), PInvalidCast); #endif const H235_CryptoToken_cryptoHashedToken & other = (const H235_CryptoToken_cryptoHashedToken &)obj; Comparison result; if ((result = m_tokenOID.Compare(other.m_tokenOID)) != EqualTo) return result; if ((result = m_hashedVals.Compare(other.m_hashedVals)) != EqualTo) return result; if ((result = m_token.Compare(other.m_token)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H235_CryptoToken_cryptoHashedToken::GetDataLength() const { PINDEX length = 0; length += m_tokenOID.GetObjectLength(); length += m_hashedVals.GetObjectLength(); length += m_token.GetObjectLength(); return length; } PBoolean H235_CryptoToken_cryptoHashedToken::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_tokenOID.Decode(strm)) return FALSE; if (!m_hashedVals.Decode(strm)) return FALSE; if (!m_token.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H235_CryptoToken_cryptoHashedToken::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_tokenOID.Encode(strm); m_hashedVals.Encode(strm); m_token.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H235_CryptoToken_cryptoHashedToken::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_CryptoToken_cryptoHashedToken::Class()), PInvalidCast); #endif return new H235_CryptoToken_cryptoHashedToken(*this); } #endif // if ! H323_DISABLE_H235 // End of h235.cxx h323plus/src/channels.cxx0000644000175000017500000014164711647744275014253 0ustar markmark/* * channels.cxx * * H.323 protocol handler * * Open H323 Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Contributor(s): ______________________________________. * * $Id: channels.cxx,v 1.21 2011/10/20 07:07:41 shorne Exp $ * */ #include #ifdef __GNUC__ #pragma implementation "channels.h" #endif #include "channels.h" #include "h323pdu.h" #include "h323ep.h" #include "h323rtp.h" #include #include #define MAX_PAYLOAD_TYPE_MISMATCHES 8 #define RTP_TRACE_DISPLAY_RATE 16000 // 2 seconds class H323LogicalChannelThread : public PThread { PCLASSINFO(H323LogicalChannelThread, PThread) public: H323LogicalChannelThread(H323EndPoint & endpoint, H323Channel & channel, PBoolean rx); void Main(); private: H323Channel & channel; PBoolean receiver; }; #define new PNEW #if PTRACING ostream & operator<<(ostream & out, H323Channel::Directions dir) { static const char * const DirNames[H323Channel::NumDirections] = { "IsBidirectional", "IsTransmitter", "IsReceiver" }; if (dir < H323Channel::NumDirections && DirNames[dir] != NULL) out << DirNames[dir]; else out << "Direction<" << (unsigned)dir << '>'; return out; } #endif ///////////////////////////////////////////////////////////////////////////// H323LogicalChannelThread::H323LogicalChannelThread(H323EndPoint & endpoint, H323Channel & c, PBoolean rx) : PThread(endpoint.GetChannelThreadStackSize(), NoAutoDeleteThread, endpoint.GetChannelThreadPriority(), rx ? "LogChanRx:%0x" : "LogChanTx:%0x"), channel(c) { PTRACE(4, "LogChan\tStarting logical channel thread " << this); receiver = rx; Resume(); } void H323LogicalChannelThread::Main() { PTRACE(4, "LogChan\tStarted logical channel thread " << this); if (receiver) channel.Receive(); else channel.Transmit(); #ifdef _WIN32_WCE Sleep(0); // Relinquish control to other thread #endif } ///////////////////////////////////////////////////////////////////////////// H323ChannelNumber::H323ChannelNumber(unsigned num, PBoolean fromRem) { PAssert(num < 0x10000, PInvalidParameter); number = num; fromRemote = fromRem; } PObject * H323ChannelNumber::Clone() const { return new H323ChannelNumber(number, fromRemote); } PINDEX H323ChannelNumber::HashFunction() const { PINDEX hash = (number%17) << 1; if (fromRemote) hash++; return hash; } void H323ChannelNumber::PrintOn(ostream & strm) const { strm << (fromRemote ? 'R' : 'T') << '-' << number; } PObject::Comparison H323ChannelNumber::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(this, H323ChannelNumber), PInvalidCast); #endif const H323ChannelNumber & other = (const H323ChannelNumber &)obj; if (number < other.number) return LessThan; if (number > other.number) return GreaterThan; if (fromRemote && !other.fromRemote) return LessThan; if (!fromRemote && other.fromRemote) return GreaterThan; return EqualTo; } H323ChannelNumber & H323ChannelNumber::operator++(int) { number++; return *this; } ///////////////////////////////////////////////////////////////////////////// H323Channel::H323Channel(H323Connection & conn, const H323Capability & cap) : endpoint(conn.GetEndPoint()), connection(conn) { capability = (H323Capability *)cap.Clone(); codec = NULL; bandwidthUsed = 0; receiveThread = NULL; transmitThread = NULL; terminating = FALSE; opened = FALSE; paused = FALSE; } H323Channel::~H323Channel() { connection.UseBandwidth(bandwidthUsed, TRUE); delete codec; delete capability; } void H323Channel::PrintOn(ostream & strm) const { strm << number; } unsigned H323Channel::GetSessionID() const { return 0; } void H323Channel::SetSessionID(unsigned /*id*/) { } void H323Channel::CleanUpOnTermination() { if (!opened || terminating) return; PTRACE(3, "LogChan\tCleaning up " << number); terminating = TRUE; // If we have a codec, then close it, this allows the transmitThread to be // broken out of any I/O block on reading the codec. if (codec != NULL) codec->Close(); // If we have a receiver thread, wait for it to die. if (receiveThread != NULL) { PTRACE(4, "LogChan\tAwaiting termination of " << receiveThread << ' ' << receiveThread->GetThreadName()); PAssert(receiveThread->WaitForTermination(10000), "Receive media thread did not terminate"); delete receiveThread; receiveThread = NULL; } // If we have a transmitter thread, wait for it to die. if (transmitThread != NULL) { PTRACE(4, "LogChan\tAwaiting termination of " << transmitThread << ' ' << transmitThread->GetThreadName()); PAssert(transmitThread->WaitForTermination(10000), "Transmit media thread did not terminate"); delete transmitThread; transmitThread = NULL; } // Signal to the connection that this channel is on the way out connection.OnClosedLogicalChannel(*this); PTRACE(3, "LogChan\tCleaned up " << number); } PBoolean H323Channel::IsRunning() const { if (receiveThread != NULL && !receiveThread ->IsTerminated()) return TRUE; if (transmitThread != NULL && !transmitThread->IsTerminated()) return TRUE; return FALSE; } PBoolean H323Channel::OnReceivedPDU(const H245_OpenLogicalChannel & /*pdu*/, unsigned & /*errorCode*/) { return TRUE; } PBoolean H323Channel::OnReceivedAckPDU(const H245_OpenLogicalChannelAck & /*pdu*/) { return TRUE; } void H323Channel::OnSendOpenAck(const H245_OpenLogicalChannel & /*pdu*/, H245_OpenLogicalChannelAck & /* pdu*/) const { } void H323Channel::OnFlowControl(long bitRateRestriction) { if (GetCodec() != NULL) codec->OnFlowControl(bitRateRestriction); else PTRACE(3, "LogChan\tOnFlowControl: " << bitRateRestriction); } void H323Channel::OnMiscellaneousCommand(const H245_MiscellaneousCommand_type & type) { if (GetCodec() != NULL) codec->OnMiscellaneousCommand(type); else PTRACE(3, "LogChan\tOnMiscellaneousCommand: chan=" << number << ", type=" << type.GetTagName()); } void H323Channel::OnMiscellaneousIndication(const H245_MiscellaneousIndication_type & type) { if (GetCodec() != NULL) codec->OnMiscellaneousIndication(type); else PTRACE(3, "LogChan\tOnMiscellaneousIndication: chan=" << number << ", type=" << type.GetTagName()); } void H323Channel::OnJitterIndication(DWORD PTRACE_PARAM(jitter), int PTRACE_PARAM(skippedFrameCount), int PTRACE_PARAM(additionalBuffer)) { PTRACE(3, "LogChan\tOnJitterIndication:" " jitter=" << jitter << " skippedFrameCount=" << skippedFrameCount << " additionalBuffer=" << additionalBuffer); } PBoolean H323Channel::SetInitialBandwidth() { if (GetCodec() == NULL) return TRUE; #ifdef H323_VIDEO if (GetSessionID() == OpalMediaFormat::DefaultVideoSessionID) { if (GetDirection() == H323Channel::IsTransmitter) connection.OnSetInitialBandwidth((H323VideoCodec *)codec); return SetBandwidthUsed( codec->GetMediaFormat().GetOptionInteger(OpalVideoFormat::MaxBitRateOption)/100); } else #endif { return SetBandwidthUsed(codec->GetMediaFormat().GetBandwidth()/100); } } PBoolean H323Channel::SetBandwidthUsed(unsigned bandwidth) { PTRACE(3, "LogChan\tBandwidth requested/used = " << bandwidth/10 << '.' << bandwidth%10 << '/' << bandwidthUsed/10 << '.' << bandwidthUsed%10 << " kb/s"); connection.UseBandwidth(bandwidthUsed, TRUE); bandwidthUsed = 0; if (!connection.UseBandwidth(bandwidth, FALSE)) return FALSE; bandwidthUsed = bandwidth; return TRUE; } PBoolean H323Channel::Open() { if (opened) return TRUE; // Give the connection (or endpoint) a chance to do something with // the opening of the codec. Default sets up various filters. if (!connection.OnStartLogicalChannel(*this)) { PTRACE(1, "LogChan\tOnStartLogicalChannel failed"); return FALSE; } opened = TRUE; return TRUE; } H323Codec * H323Channel::GetCodec() const { if (codec == NULL) { ((H323Channel*)this)->codec = capability->CreateCodec( GetDirection() == IsReceiver ? H323Codec::Decoder : H323Codec::Encoder); #ifdef H323_AUDIO_CODECS if (codec && PIsDescendant(codec, H323AudioCodec)) ((H323AudioCodec*)codec)->SetSilenceDetectionMode(endpoint.GetSilenceDetectionMode()); #endif } return codec; } void H323Channel::SendMiscCommand(unsigned command) { connection.SendLogicalChannelMiscCommand(*this, command); } void H323Channel::SendFlowControlRequest(long restriction) { connection.SendLogicalChannelFlowControl(*this, restriction); } ///////////////////////////////////////////////////////////////////////////// H323UnidirectionalChannel::H323UnidirectionalChannel(H323Connection & conn, const H323Capability & cap, Directions direction) : H323Channel(conn, cap), receiver(direction == IsReceiver) { } H323Channel::Directions H323UnidirectionalChannel::GetDirection() const { return receiver ? IsReceiver : IsTransmitter; } PBoolean H323UnidirectionalChannel::Start() { if (!Open()) return FALSE; PThread * thread = new H323LogicalChannelThread(endpoint, *this, receiver); if (receiver) receiveThread = thread; else transmitThread = thread; return TRUE; } ///////////////////////////////////////////////////////////////////////////// H323BidirectionalChannel::H323BidirectionalChannel(H323Connection & conn, const H323Capability & cap) : H323Channel(conn, cap) { } H323Channel::Directions H323BidirectionalChannel::GetDirection() const { return IsBidirectional; } PBoolean H323BidirectionalChannel::Start() { receiveThread = new H323LogicalChannelThread(endpoint, *this, TRUE); transmitThread = new H323LogicalChannelThread(endpoint, *this, FALSE); return TRUE; } ///////////////////////////////////////////////////////////////////////////// H323_RealTimeChannel::H323_RealTimeChannel(H323Connection & connection, const H323Capability & capability, Directions direction) : H323UnidirectionalChannel(connection, capability, direction) { rtpPayloadType = RTP_DataFrame::IllegalPayloadType; } PBoolean H323_RealTimeChannel::OnSendingPDU(H245_OpenLogicalChannel & open) const { PTRACE(3, "H323RTP\tOnSendingPDU"); open.m_forwardLogicalChannelNumber = (unsigned)number; if (open.HasOptionalField(H245_OpenLogicalChannel::e_reverseLogicalChannelParameters)) { open.m_reverseLogicalChannelParameters.IncludeOptionalField( H245_OpenLogicalChannel_reverseLogicalChannelParameters::e_multiplexParameters); // Set the communications information for unicast IPv4 open.m_reverseLogicalChannelParameters.m_multiplexParameters.SetTag( H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters ::e_h2250LogicalChannelParameters); connection.OnSendH245_OpenLogicalChannel(open, PFalse); return OnSendingPDU(open.m_reverseLogicalChannelParameters.m_dataType, open.m_reverseLogicalChannelParameters.m_multiplexParameters); } else { // Set the communications information for unicast IPv4 open.m_forwardLogicalChannelParameters.m_multiplexParameters.SetTag( H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters ::e_h2250LogicalChannelParameters); if (OnSendingAltPDU(open.m_genericInformation)) open.IncludeOptionalField(H245_OpenLogicalChannel::e_genericInformation); connection.OnSendH245_OpenLogicalChannel(open, PTrue); return OnSendingPDU(open.m_forwardLogicalChannelParameters.m_dataType, open.m_forwardLogicalChannelParameters.m_multiplexParameters); } } void H323_RealTimeChannel::OnSendOpenAck(const H245_OpenLogicalChannel & open, H245_OpenLogicalChannelAck & ack) const { PTRACE(3, "H323RTP\tOnSendOpenAck"); // set forwardMultiplexAckParameters option ack.IncludeOptionalField(H245_OpenLogicalChannelAck::e_forwardMultiplexAckParameters); // select H225 choice ack.m_forwardMultiplexAckParameters.SetTag( H245_OpenLogicalChannelAck_forwardMultiplexAckParameters::e_h2250LogicalChannelAckParameters); // get H225 parms H245_H2250LogicalChannelAckParameters & param = ack.m_forwardMultiplexAckParameters; // set session ID param.IncludeOptionalField(H245_H2250LogicalChannelAckParameters::e_sessionID); const H245_H2250LogicalChannelParameters & openparam = open.m_forwardLogicalChannelParameters.m_multiplexParameters; unsigned sessionID = openparam.m_sessionID; param.m_sessionID = sessionID; OnSendOpenAck(param); PTRACE(2, "H323RTP\tSending open logical channel ACK: sessionID=" << sessionID); } PBoolean H323_RealTimeChannel::OnReceivedPDU(const H245_OpenLogicalChannel & open, unsigned & errorCode) { if (receiver) number = H323ChannelNumber(open.m_forwardLogicalChannelNumber, TRUE); PTRACE(3, "H323RTP\tOnReceivedPDU for channel: " << number); unsigned prevTxFrames = capability->GetTxFramesInPacket(); unsigned prevRxFrames = capability->GetRxFramesInPacket(); PString prevFormat = capability->GetFormatName(); PBoolean reverse = open.HasOptionalField(H245_OpenLogicalChannel::e_reverseLogicalChannelParameters); const H245_DataType & dataType = reverse ? open.m_reverseLogicalChannelParameters.m_dataType : open.m_forwardLogicalChannelParameters.m_dataType; if (!capability->OnReceivedPDU(dataType, receiver)) { PTRACE(1, "H323RTP\tData type not supported"); errorCode = H245_OpenLogicalChannelReject_cause::e_dataTypeNotSupported; return FALSE; } // If we have already created a codec, and the new parameters indicate that // the capability limits have changed, then kill off the old codec it will // be wrongly constructed. if (codec != NULL && (prevTxFrames != capability->GetTxFramesInPacket() || prevRxFrames != capability->GetRxFramesInPacket() || prevFormat != capability->GetFormatName())) { delete codec; codec = NULL; } if (reverse) { if (open.m_reverseLogicalChannelParameters.m_multiplexParameters.GetTag() == H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::e_h2250LogicalChannelParameters) return OnReceivedPDU(dataType, open.m_reverseLogicalChannelParameters.m_multiplexParameters, errorCode); } else { if (open.m_forwardLogicalChannelParameters.m_multiplexParameters.GetTag() == H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::e_h2250LogicalChannelParameters) return OnReceivedPDU(dataType, open.m_forwardLogicalChannelParameters.m_multiplexParameters, errorCode); } PTRACE(1, "H323RTP\tOnly H.225.0 multiplex supported"); errorCode = H245_OpenLogicalChannelReject_cause::e_unsuitableReverseParameters; return FALSE; } PBoolean H323_RealTimeChannel::OnReceivedAckPDU(const H245_OpenLogicalChannelAck & ack) { PTRACE(3, "H323RTP\tOnReceiveOpenAck"); if (!ack.HasOptionalField(H245_OpenLogicalChannelAck::e_forwardMultiplexAckParameters)) { PTRACE(1, "H323RTP\tNo forwardMultiplexAckParameters"); return FALSE; } if (ack.m_forwardMultiplexAckParameters.GetTag() != H245_OpenLogicalChannelAck_forwardMultiplexAckParameters::e_h2250LogicalChannelAckParameters) { PTRACE(1, "H323RTP\tOnly H.225.0 multiplex supported"); return FALSE; } if (ack.HasOptionalField(H245_OpenLogicalChannelAck::e_genericInformation)) OnReceivedAckAltPDU(ack.m_genericInformation); return OnReceivedAckPDU(ack.m_forwardMultiplexAckParameters); } RTP_DataFrame::PayloadTypes H323_RealTimeChannel::GetRTPPayloadType() const { RTP_DataFrame::PayloadTypes pt = rtpPayloadType; if (pt == RTP_DataFrame::IllegalPayloadType) { pt = capability->GetPayloadType(); if (pt == RTP_DataFrame::IllegalPayloadType) { PAssertNULL(codec); pt = codec->GetMediaFormat().GetPayloadType(); } } return pt; } PBoolean H323_RealTimeChannel::SetDynamicRTPPayloadType(int newType) { PTRACE(1, "H323RTP\tSetting dynamic RTP payload type: " << newType); // This is "no change" if (newType == -1) return TRUE; // Check for illegal type if (newType < RTP_DataFrame::DynamicBase || newType > RTP_DataFrame::MaxPayloadType) return FALSE; // Check for overwriting "known" type if (rtpPayloadType < RTP_DataFrame::DynamicBase) return FALSE; rtpPayloadType = (RTP_DataFrame::PayloadTypes)newType; PTRACE(3, "H323RTP\tSetting dynamic payload type to " << rtpPayloadType); return TRUE; } ///////////////////////////////////////////////////////////////////////////// H323_RTPChannel::H323_RTPChannel(H323Connection & conn, const H323Capability & cap, Directions direction, RTP_Session & r) : H323_RealTimeChannel(conn, cap, direction), rtpSession(r), rtpCallbacks(*(H323_RTP_Session *)r.GetUserData()) { PTRACE(3, "H323RTP\t" << (receiver ? "Receiver" : "Transmitter") << " created using session " << GetSessionID()); } H323_RTPChannel::~H323_RTPChannel() { // Finished with the RTP session, this will delete the session if it is no // longer referenced by any logical channels. connection.ReleaseSession(GetSessionID()); } void H323_RTPChannel::CleanUpOnTermination() { if (terminating) return; PTRACE(3, "H323RTP\tCleaning up RTP " << number); // Break any I/O blocks and wait for the thread that uses this object to // terminate before we allow it to be deleted. if ((receiver ? receiveThread : transmitThread) != NULL) rtpSession.Close(receiver); H323Channel::CleanUpOnTermination(); } unsigned H323_RTPChannel::GetSessionID() const { return rtpSession.GetSessionID(); } void H323_RTPChannel::SetSessionID(unsigned id) { rtpSession.SetSessionID(id); } PBoolean H323_RTPChannel::Open() { if (opened) return TRUE; if (GetCodec() == NULL) { PTRACE(1, "LogChan\t" << (GetDirection() == IsReceiver ? "Receive" : "Transmit") << " thread aborted (could not create codec)"); return FALSE; } if (!codec->GetMediaFormat().IsValid()) { PTRACE(1, "LogChan\t" << (GetDirection() == IsReceiver ? "Receive" : "Transmit") << " thread aborted (invalid media format)"); return FALSE; } codec->AttachLogicalChannel((H323Channel*)this); // Open the codec if (!codec->Open(connection)) { PTRACE(1, "LogChan\t" << (GetDirection() == IsReceiver ? "Receive" : "Transmit") << " thread aborted (open fail) for "<< *capability); return FALSE; } // Give the connection (or endpoint) a chance to do something with // the opening of the codec. Default sets up various filters. if (!connection.OnStartLogicalChannel(*this)) { PTRACE(1, "LogChan\t" << (GetDirection() == IsReceiver ? "Receive" : "Transmit") << " thread aborted (OnStartLogicalChannel fail)"); return FALSE; } PTRACE(3, "LogChan\tOpened using capability " << *capability); opened = TRUE; return TRUE; } PBoolean H323_RTPChannel::OnSendingPDU(H245_H2250LogicalChannelParameters & param) const { return rtpCallbacks.OnSendingPDU(*this, param); } PBoolean H323_RTPChannel::OnSendingAltPDU(H245_ArrayOf_GenericInformation & alternate) const { return rtpCallbacks.OnSendingAltPDU(*this, alternate); } void H323_RTPChannel::OnSendOpenAck(H245_H2250LogicalChannelAckParameters & param) const { rtpCallbacks.OnSendingAckPDU(*this, param); } PBoolean H323_RTPChannel::OnReceivedPDU(const H245_H2250LogicalChannelParameters & param, unsigned & errorCode) { return rtpCallbacks.OnReceivedPDU(*this, param, errorCode); } PBoolean H323_RTPChannel::OnReceivedAckPDU(const H245_H2250LogicalChannelAckParameters & param) { return rtpCallbacks.OnReceivedAckPDU(*this, param); } PBoolean H323_RTPChannel::OnReceivedAckAltPDU(const H245_ArrayOf_GenericInformation & alternate) { return rtpCallbacks.OnReceivedAckAltPDU(*this, alternate); } PBoolean H323_RTPChannel::ReadFrame(DWORD & rtpTimestamp, RTP_DataFrame & frame) { return rtpSession.ReadBufferedData(rtpTimestamp, frame); } PBoolean H323_RTPChannel::WriteFrame(RTP_DataFrame & frame) { return rtpSession.WriteData(frame); } #if PTRACING class CodecReadAnalyser { enum { MaxSamples = 1000 }; public: CodecReadAnalyser() { count = 0; } void AddSample(DWORD timestamp) { if (count < MaxSamples) { tick[count] = PTimer::Tick(); rtp[count] = timestamp; count++; } } friend ostream & operator<<(ostream & strm, const CodecReadAnalyser & analysis) { PTimeInterval minimum = PMaxTimeInterval; PTimeInterval maximum; for (PINDEX i = 1; i < analysis.count; i++) { PTimeInterval delta = analysis.tick[i] - analysis.tick[i-1]; strm << setw(6) << analysis.rtp[i] << ' ' << setw(6) << (analysis.tick[i] - analysis.tick[0]) << ' ' << setw(6) << delta << '\n'; if (delta > maximum) maximum = delta; if (delta < minimum) minimum = delta; } strm << "Maximum delta time: " << maximum << "\n" "Minimum delta time: " << minimum << '\n'; return strm; } private: PTimeInterval tick[MaxSamples]; DWORD rtp[MaxSamples]; PINDEX count; }; #endif void H323_RTPChannel::Transmit() { if (terminating) { PTRACE(3, "H323RTP\tTransmit thread terminated on start up"); return; } const OpalMediaFormat & mediaFormat = codec->GetMediaFormat(); // Get parameters from the codec on time and data sizes PBoolean isAudio = mediaFormat.NeedsJitterBuffer(); unsigned framesInPacket = capability->GetTxFramesInPacket(); unsigned maxFrameSize = mediaFormat.GetFrameSize(); if (maxFrameSize == 0) maxFrameSize = isAudio ? 8 : 2000; RTP_DataFrame frame(framesInPacket*maxFrameSize); rtpPayloadType = GetRTPPayloadType(); if (rtpPayloadType == RTP_DataFrame::IllegalPayloadType) { PTRACE(1, "H323RTP\tReceive " << mediaFormat << " thread ended (illegal payload type)"); return; } frame.SetPayloadType(rtpPayloadType); PTRACE(2, "H323RTP\tTransmit " << mediaFormat << " thread started:" " rate=" << codec->GetFrameRate() << " time=" << (codec->GetFrameRate()/(mediaFormat.GetTimeUnits() > 0 ? mediaFormat.GetTimeUnits() : 1)) << "ms" << " size=" << framesInPacket << '*' << maxFrameSize << '=' << (framesInPacket*maxFrameSize) ); // This is real time so need to keep track of elapsed milliseconds PBoolean silent = TRUE; unsigned length; unsigned frameOffset = 0; unsigned frameCount = 0; DWORD rtpTimestamp = PRandom(); DWORD nextTimestamp = 0; frame.SetPayloadSize(0); #if PTRACING DWORD lastDisplayedTimestamp = 0; CodecReadAnalyser * codecReadAnalysis = NULL; if (PTrace::GetLevel() >= 5) codecReadAnalysis = new CodecReadAnalyser; #endif /* Now keep getting encoded frames from the codec, it is expected that the Read() function will maintain the Real Time aspects of the transmission. That is for GSM codec say with a single frame, this function will take 20 milliseconds to complete. */ while (codec->Read(frame.GetPayloadPtr()+frameOffset, length, frame)) { // Calculate the timestamp and real time to take in processing if(isAudio) { rtpTimestamp += codec->GetFrameRate(); } else { if(frame.GetMarker()) { // Video uses a 90khz clock. Note that framerate should really be a float. nextTimestamp = rtpTimestamp + 90000/codec->GetFrameRate(); } } #if PTRACING if (rtpTimestamp - lastDisplayedTimestamp > RTP_TRACE_DISPLAY_RATE) { PTRACE(3, "H323RTP\tTransmitter sent timestamp " << rtpTimestamp); lastDisplayedTimestamp = rtpTimestamp; } if (codecReadAnalysis != NULL) codecReadAnalysis->AddSample(rtpTimestamp); #endif if (paused) length = 0; // Act as though silent/no video // Handle marker bit for audio codec if (isAudio) { // If switching from silence to signal if (silent && length > 0) { silent = FALSE; frame.SetMarker(TRUE); // Set flag for start of sound PTRACE(3, "H323RTP\tTransmit start of talk burst: " << rtpTimestamp); } // If switching from signal to silence else if (!silent && length == 0) { silent = TRUE; // If had some data waiting to go out if (frameOffset > 0) frameCount = framesInPacket; // Force the RTP write PTRACE(3, "H323RTP\tTransmit end of talk burst: " << rtpTimestamp); } } // See if is silence or have some audio data to stuff in the RTP packet if (length == 0) frame.SetTimestamp(rtpTimestamp); else { silenceStartTick = PTimer::Tick(); // If first read frame in packet, set timestamp for it if (frameOffset == 0) frame.SetTimestamp(rtpTimestamp); frameOffset += length; // Look for special cases if (rtpPayloadType == RTP_DataFrame::G729 && length == 2) { /* If we have a G729 sid frame (ie 2 bytes instead of 10) then we must not send any more frames in the RTP packet. */ frameCount = framesInPacket; } else { /* Increment by number of frames that were read in one hit Note a codec that does variable length frames should never return more than one frame per Read() call or confusion will result. */ frameCount += (length + maxFrameSize - 1)/maxFrameSize; } } PBoolean sendPacket = FALSE; // Have read number of frames for packet (or just went silent) if (frameCount >= framesInPacket) { // Set payload size to frame offset, now length of frame. frame.SetPayloadSize(frameOffset); frame.SetPayloadType(rtpPayloadType); frameOffset = 0; frameCount = 0; sendPacket = TRUE; } filterMutex.Wait(); for (PINDEX i = 0; i < filters.GetSize(); i++) filters[i](frame, (INT)&sendPacket); filterMutex.Signal(); if (sendPacket || (silent && frame.GetPayloadSize() > 0)) { // Send the frame of coded data we have so far to RTP transport if (!WriteFrame(frame)) break; // video frames produce many packets per frame especially at // higher resolutions and can easily overload the link if sent // without delay if (!isAudio) { PThread::Sleep(5); if (frame.GetMarker()) rtpTimestamp = nextTimestamp; } // Reset flag for in talk burst if (isAudio) frame.SetMarker(FALSE); frame.SetPayloadSize(0); frameOffset = 0; frameCount = 0; } if (terminating) break; } #if PTRACING PTRACE_IF(5, codecReadAnalysis != NULL, "Codec read timing:\n" << *codecReadAnalysis); delete codecReadAnalysis; #endif if (!terminating) connection.CloseLogicalChannelNumber(number); PTRACE(2, "H323RTP\tTransmit " << mediaFormat << " thread ended"); } void H323_RTPChannel::SendUniChannelBackProbe() { // When we are receiving media on a unidirectional Channel // we need to send media on the backchannel to ensure that // we open any necessary pinholes in NAT. if (capability->GetCapabilityDirection() != H323Capability::e_Transmit) return; RTP_DataFrame frame; frame.SetPayloadSize(0); frame.SetPayloadType(rtpPayloadType); frame.SetTimestamp(PRandom()); frame.SetMarker(false); WORD sequenceNumber = (WORD)PRandom::Number(); int packetCount = 4; for (PINDEX i= 0; i < packetCount; ++i) { frame.SetSequenceNumber(++sequenceNumber); if (i == packetCount-1) frame.SetMarker(true); if (!WriteFrame(frame)) { PTRACE(2, "H323RTP\tERROR: BackChannel Probe Failed."); return; } } PTRACE(4, "H323RTP\tReceiving Unidirectional Channel: NAT Support Packets sent."); } void H323_RTPChannel::Receive() { if (terminating) { PTRACE(3, "H323RTP\tReceive thread terminated on start up"); return; } const OpalMediaFormat & mediaFormat = codec->GetMediaFormat(); PTRACE(2, "H323RTP\tReceive " << mediaFormat << " thread started."); // if jitter buffer required, start the thread that is on the other end of it if (mediaFormat.NeedsJitterBuffer() && endpoint.UseJitterBuffer()) rtpSession.SetJitterBufferSize(connection.GetMinAudioJitterDelay()*mediaFormat.GetTimeUnits(), connection.GetMaxAudioJitterDelay()*mediaFormat.GetTimeUnits(), endpoint.GetJitterThreadStackSize()); // Keep time using th RTP timestamps. DWORD codecFrameRate = codec->GetFrameRate(); DWORD rtpTimestamp = 0; #if PTRACING DWORD lastDisplayedTimestamp = 0; #endif // keep track of consecutive payload type mismatches int consecutiveMismatches = 0; rtpPayloadType = GetRTPPayloadType(); if (rtpPayloadType == RTP_DataFrame::IllegalPayloadType) { PTRACE(1, "H323RTP\tTransmit " << mediaFormat << " thread ended (illegal payload type)"); return; } // UniDirectional Channel NAT support SendUniChannelBackProbe(); PBoolean allowRtpPayloadChange = codec->GetMediaFormat().GetDefaultSessionID() == OpalMediaFormat::DefaultAudioSessionID; RTP_DataFrame frame; while (ReadFrame(rtpTimestamp, frame)) { filterMutex.Wait(); for (PINDEX i = 0; i < filters.GetSize(); i++) filters[i](frame, 0); filterMutex.Signal(); int size = frame.GetPayloadSize(); rtpTimestamp = frame.GetTimestamp(); RTP_Session::SenderReport avData; if (rtpSession.AVSyncData(avData)) codec->OnRxSenderReport(avData.rtpTimestamp, avData.realTimestamp); #if PTRACING if (rtpTimestamp - lastDisplayedTimestamp > RTP_TRACE_DISPLAY_RATE) { PTRACE(3, "H323RTP\tReceiver written timestamp " << rtpTimestamp); lastDisplayedTimestamp = rtpTimestamp; } #endif unsigned written; PBoolean ok = TRUE; if (size == 0) { ok = codec->Write(NULL, 0, frame, written); rtpTimestamp += codecFrameRate; } else { silenceStartTick = PTimer::Tick(); PBoolean isCodecPacket = TRUE; if (frame.GetPayloadType() == rtpPayloadType) { PTRACE_IF(2, consecutiveMismatches > 0, "H323RTP\tPayload type matched again " << rtpPayloadType); consecutiveMismatches = 0; } else { consecutiveMismatches++; if (allowRtpPayloadChange && consecutiveMismatches >= MAX_PAYLOAD_TYPE_MISMATCHES) { rtpPayloadType = frame.GetPayloadType(); consecutiveMismatches = 0; PTRACE(1, "H323RTP\tResetting expected payload type to " << rtpPayloadType); } PTRACE_IF(2, consecutiveMismatches < MAX_PAYLOAD_TYPE_MISMATCHES, "H323RTP\tPayload type mismatch: expected " << rtpPayloadType << ", got " << frame.GetPayloadType() << ". Ignoring packet."); } if (isCodecPacket && consecutiveMismatches == 0) { const BYTE * ptr = frame.GetPayloadPtr(); while (ok && size > 0) { /* Now write data to the codec, it is expected that the Write() function will maintain the Real Time aspects of the system. That is for GSM codec, say with a single frame, this function will take 20 milliseconds to complete. It is very important that this occurs for audio codecs or the jitter buffer will not operate correctly. */ ok = codec->Write(ptr, paused ? 0 : size, frame, written); rtpTimestamp += codecFrameRate; size -= written != 0 ? written : size; ptr += written; } PTRACE_IF(1, size < 0, "H323RTP\tPayload size too small, short " << -size << " bytes."); } } if (terminating) break; if (!ok) { connection.CloseLogicalChannelNumber(number); break; } } PTRACE(2, "H323RTP\tReceive " << mediaFormat << " thread ended"); } void H323_RTPChannel::AddFilter(const PNotifier & filterFunction) { filterMutex.Wait(); filters.Append(new PNotifier(filterFunction)); filterMutex.Signal(); } void H323_RTPChannel::RemoveFilter(const PNotifier & filterFunction) { filterMutex.Wait(); PINDEX idx = filters.GetValuesIndex(filterFunction); if (idx != P_MAX_INDEX) filters.RemoveAt(idx); filterMutex.Signal(); } PTimeInterval H323_RTPChannel::GetSilenceDuration() const { if (silenceStartTick == 0) return silenceStartTick; return PTimer::Tick() - silenceStartTick; } ///////////////////////////////////////////////////////////////////////////// H323_ExternalRTPChannel::H323_ExternalRTPChannel(H323Connection & connection, const H323Capability & capability, Directions direction, unsigned id) : H323_RealTimeChannel(connection, capability, direction) { sessionID = id; isRunning = FALSE; } H323_ExternalRTPChannel::H323_ExternalRTPChannel(H323Connection & connection, const H323Capability & capability, Directions direction, unsigned id, const H323TransportAddress & data, const H323TransportAddress & control) : H323_RealTimeChannel(connection, capability, direction), externalMediaAddress(data), externalMediaControlAddress(control) { sessionID = id; isRunning = FALSE; } H323_ExternalRTPChannel::H323_ExternalRTPChannel(H323Connection & connection, const H323Capability & capability, Directions direction, unsigned id, const PIPSocket::Address & ip, WORD dataPort) : H323_RealTimeChannel(connection, capability, direction), externalMediaAddress(ip, dataPort), externalMediaControlAddress(ip, (WORD)(dataPort+1)) { sessionID = id; isRunning = FALSE; } unsigned H323_ExternalRTPChannel::GetSessionID() const { return sessionID; } PBoolean H323_ExternalRTPChannel::Start() { isRunning = TRUE; return Open(); } PBoolean H323_ExternalRTPChannel::IsRunning() const { return opened && isRunning; } void H323_ExternalRTPChannel::Receive() { // Do nothing } void H323_ExternalRTPChannel::Transmit() { // Do nothing } PBoolean H323_ExternalRTPChannel::OnSendingPDU(H245_H2250LogicalChannelParameters & param) const { param.m_sessionID = sessionID; param.IncludeOptionalField(H245_H2250LogicalChannelParameters::e_mediaGuaranteedDelivery); param.m_mediaGuaranteedDelivery = FALSE; param.IncludeOptionalField(H245_H2250LogicalChannelParameters::e_silenceSuppression); param.m_silenceSuppression = FALSE; // unicast must have mediaControlChannel param.IncludeOptionalField(H245_H2250LogicalChannelParameters::e_mediaControlChannel); externalMediaControlAddress.SetPDU(param.m_mediaControlChannel); if (receiver) { // set mediaChannel param.IncludeOptionalField(H245_H2250LogicalChannelAckParameters::e_mediaChannel); externalMediaAddress.SetPDU(param.m_mediaChannel); } return TRUE; } void H323_ExternalRTPChannel::OnSendOpenAck(H245_H2250LogicalChannelAckParameters & param) const { // set mediaControlChannel param.IncludeOptionalField(H245_H2250LogicalChannelAckParameters::e_mediaControlChannel); externalMediaControlAddress.SetPDU(param.m_mediaControlChannel); // set mediaChannel param.IncludeOptionalField(H245_H2250LogicalChannelAckParameters::e_mediaChannel); externalMediaAddress.SetPDU(param.m_mediaChannel); } PBoolean H323_ExternalRTPChannel::OnReceivedPDU(const H245_H2250LogicalChannelParameters & param, unsigned & errorCode) { // Only support a single audio session if (param.m_sessionID != sessionID) { PTRACE(1, "LogChan\tOpen for invalid session: " << param.m_sessionID); errorCode = H245_OpenLogicalChannelReject_cause::e_invalidSessionID; return FALSE; } if (!param.HasOptionalField(H245_H2250LogicalChannelParameters::e_mediaControlChannel)) { PTRACE(1, "LogChan\tNo mediaControlChannel specified"); errorCode = H245_OpenLogicalChannelReject_cause::e_unspecified; return FALSE; } remoteMediaControlAddress = param.m_mediaControlChannel; if (remoteMediaControlAddress.IsEmpty()) return FALSE; if (param.HasOptionalField(H245_H2250LogicalChannelParameters::e_mediaChannel)) { remoteMediaAddress = param.m_mediaChannel; if (remoteMediaAddress.IsEmpty()) return FALSE; } return TRUE; } PBoolean H323_ExternalRTPChannel::OnReceivedAckPDU(const H245_H2250LogicalChannelAckParameters & param) { if (param.HasOptionalField(H245_H2250LogicalChannelAckParameters::e_sessionID) && (param.m_sessionID != sessionID)) { PTRACE(1, "LogChan\twarning: Ack for invalid session: " << param.m_sessionID); } if (!param.HasOptionalField(H245_H2250LogicalChannelAckParameters::e_mediaControlChannel)) { PTRACE(1, "LogChan\tNo mediaControlChannel specified"); return FALSE; } remoteMediaControlAddress = param.m_mediaControlChannel; if (remoteMediaControlAddress.IsEmpty()) return FALSE; if (!param.HasOptionalField(H245_H2250LogicalChannelAckParameters::e_mediaChannel)) { PTRACE(1, "LogChan\tNo mediaChannel specified"); return FALSE; } remoteMediaAddress = param.m_mediaChannel; if (remoteMediaAddress.IsEmpty()) return FALSE; return TRUE; } void H323_ExternalRTPChannel::SetExternalAddress(const H323TransportAddress & data, const H323TransportAddress & control) { externalMediaAddress = data; externalMediaControlAddress = control; if (data.IsEmpty() || control.IsEmpty()) { PIPSocket::Address ip; WORD port; if (data.GetIpAndPort(ip, port)) externalMediaControlAddress = H323TransportAddress(ip, (WORD)(port+1)); else if (control.GetIpAndPort(ip, port)) externalMediaAddress = H323TransportAddress(ip, (WORD)(port-1)); } } PBoolean H323_ExternalRTPChannel::GetRemoteAddress(PIPSocket::Address & ip, WORD & dataPort) const { if (!remoteMediaControlAddress) { if (remoteMediaControlAddress.GetIpAndPort(ip, dataPort)) { dataPort--; return TRUE; } } if (!remoteMediaAddress) return remoteMediaAddress.GetIpAndPort(ip, dataPort); return FALSE; } ///////////////////////////////////////////////////////////////////////////// H323DataChannel::H323DataChannel(H323Connection & conn, const H323Capability & cap, Directions dir, unsigned id) : H323UnidirectionalChannel(conn, cap, dir) { sessionID = id; listener = NULL; autoDeleteListener = TRUE; transport = NULL; autoDeleteTransport = TRUE; separateReverseChannel = FALSE; } H323DataChannel::~H323DataChannel() { if (autoDeleteListener) delete listener; if (autoDeleteTransport) delete transport; } void H323DataChannel::CleanUpOnTermination() { if (terminating) return; PTRACE(3, "LogChan\tCleaning up data channel " << number); // Break any I/O blocks and wait for the thread that uses this object to // terminate before we allow it to be deleted. if (listener != NULL) listener->Close(); if (transport != NULL) transport->Close(); H323UnidirectionalChannel::CleanUpOnTermination(); } unsigned H323DataChannel::GetSessionID() const { return sessionID; } PBoolean H323DataChannel::OnSendingPDU(H245_OpenLogicalChannel & open) const { PTRACE(3, "LogChan\tOnSendingPDU for channel: " << number); open.m_forwardLogicalChannelNumber = (unsigned)number; open.m_forwardLogicalChannelParameters.m_multiplexParameters.SetTag( H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters ::e_h2250LogicalChannelParameters); H245_H2250LogicalChannelParameters & fparam = open.m_forwardLogicalChannelParameters.m_multiplexParameters; fparam.m_sessionID = GetSessionID(); if (connection.OnSendingOLCGenericInformation(GetSessionID(),open.m_genericInformation,false)) open.IncludeOptionalField(H245_OpenLogicalChannel::e_genericInformation); if (separateReverseChannel) return TRUE; open.IncludeOptionalField(H245_OpenLogicalChannel::e_reverseLogicalChannelParameters); open.m_reverseLogicalChannelParameters.IncludeOptionalField( H245_OpenLogicalChannel_reverseLogicalChannelParameters::e_multiplexParameters); open.m_reverseLogicalChannelParameters.m_multiplexParameters.SetTag( H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters ::e_h2250LogicalChannelParameters); H245_H2250LogicalChannelParameters & rparam = open.m_reverseLogicalChannelParameters.m_multiplexParameters; rparam.m_sessionID = GetSessionID(); return capability->OnSendingPDU(open.m_reverseLogicalChannelParameters.m_dataType); } void H323DataChannel::OnSendOpenAck(const H245_OpenLogicalChannel & /*open*/, H245_OpenLogicalChannelAck & ack) const { if (listener == NULL && transport == NULL) { PTRACE(2, "LogChan\tOnSendOpenAck without a listener or transport"); return; } PTRACE(3, "LogChan\tOnSendOpenAck for channel: " << number); H245_H2250LogicalChannelAckParameters * param; if (separateReverseChannel) { ack.IncludeOptionalField(H245_OpenLogicalChannelAck::e_forwardMultiplexAckParameters); ack.m_forwardMultiplexAckParameters.SetTag( H245_OpenLogicalChannelAck_forwardMultiplexAckParameters::e_h2250LogicalChannelAckParameters); param = (H245_H2250LogicalChannelAckParameters*)&ack.m_forwardMultiplexAckParameters.GetObject(); } else { ack.IncludeOptionalField(H245_OpenLogicalChannelAck::e_reverseLogicalChannelParameters); ack.m_reverseLogicalChannelParameters.m_multiplexParameters.SetTag( H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters ::e_h2250LogicalChannelParameters); param = (H245_H2250LogicalChannelAckParameters*) &ack.m_reverseLogicalChannelParameters.m_multiplexParameters.GetObject(); } unsigned session = GetSessionID(); if (session != 0) { param->IncludeOptionalField(H245_H2250LogicalChannelAckParameters::e_sessionID); param->m_sessionID = GetSessionID(); if (connection.OnSendingOLCGenericInformation(session,ack.m_genericInformation,true)) ack.IncludeOptionalField(H245_OpenLogicalChannel::e_genericInformation); } param->IncludeOptionalField(H245_H2250LogicalChannelAckParameters::e_mediaChannel); if (listener != NULL) listener->SetUpTransportPDU(param->m_mediaChannel, connection.GetControlChannel()); else transport->SetUpTransportPDU(param->m_mediaChannel, H323Transport::UseLocalTSAP); } PBoolean H323DataChannel::OnReceivedPDU(const H245_OpenLogicalChannel & open, unsigned & errorCode) { number = H323ChannelNumber(open.m_forwardLogicalChannelNumber, TRUE); PTRACE(3, "LogChan\tOnReceivedPDU for data channel: " << number); if (!CreateListener()) { PTRACE(1, "LogChan\tCould not create listener"); errorCode = H245_OpenLogicalChannelReject_cause::e_unspecified; return FALSE; } if (separateReverseChannel && open.HasOptionalField(H245_OpenLogicalChannel::e_reverseLogicalChannelParameters)) { errorCode = H245_OpenLogicalChannelReject_cause::e_unsuitableReverseParameters; PTRACE(2, "LogChan\tOnReceivedPDU has unexpected reverse parameters"); return FALSE; } if (open.HasOptionalField(H245_OpenLogicalChannel::e_genericInformation) && !connection.OnReceiveOLCGenericInformation(GetSessionID(),open.m_genericInformation, false)) { errorCode = H245_OpenLogicalChannelReject_cause::e_unspecified; PTRACE(2, "LogChan\tOnReceivedPDU Invalid Generic Parameters"); return FALSE; } if (!capability->OnReceivedPDU(open.m_forwardLogicalChannelParameters.m_dataType, receiver)) { PTRACE(1, "H323RTP\tData type not supported"); errorCode = H245_OpenLogicalChannelReject_cause::e_dataTypeNotSupported; return FALSE; } return TRUE; } PBoolean H323DataChannel::OnReceivedAckPDU(const H245_OpenLogicalChannelAck & ack) { PTRACE(3, "LogChan\tOnReceivedAckPDU"); const H245_TransportAddress * address; if (separateReverseChannel) { PTRACE(3, "LogChan\tseparateReverseChannels"); if (!ack.HasOptionalField(H245_OpenLogicalChannelAck::e_forwardMultiplexAckParameters)) { PTRACE(1, "LogChan\tNo forwardMultiplexAckParameters"); return FALSE; } if (ack.m_forwardMultiplexAckParameters.GetTag() != H245_OpenLogicalChannelAck_forwardMultiplexAckParameters::e_h2250LogicalChannelAckParameters) { PTRACE(1, "LogChan\tOnly H.225.0 multiplex supported"); return FALSE; } const H245_H2250LogicalChannelAckParameters & param = ack.m_forwardMultiplexAckParameters; if (!param.HasOptionalField(H245_H2250LogicalChannelAckParameters::e_mediaChannel)) { PTRACE(1, "LogChan\tNo media channel address provided"); return FALSE; } address = ¶m.m_mediaChannel; if (ack.HasOptionalField(H245_OpenLogicalChannelAck::e_reverseLogicalChannelParameters)) { PTRACE(3, "LogChan\treverseLogicalChannelParameters set"); reverseChannel = H323ChannelNumber(ack.m_reverseLogicalChannelParameters.m_reverseLogicalChannelNumber, TRUE); } } else { if (!ack.HasOptionalField(H245_OpenLogicalChannelAck::e_reverseLogicalChannelParameters)) { PTRACE(1, "LogChan\tNo reverseLogicalChannelParameters"); return FALSE; } if (ack.m_reverseLogicalChannelParameters.m_multiplexParameters.GetTag() != H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters ::e_h2250LogicalChannelParameters) { PTRACE(1, "LogChan\tOnly H.225.0 multiplex supported"); return FALSE; } const H245_H2250LogicalChannelParameters & param = ack.m_reverseLogicalChannelParameters.m_multiplexParameters; if (!param.HasOptionalField(H245_H2250LogicalChannelParameters::e_mediaChannel)) { PTRACE(1, "LogChan\tNo media channel address provided"); return FALSE; } if (ack.HasOptionalField(H245_OpenLogicalChannelAck::e_genericInformation) && !connection.OnReceiveOLCGenericInformation(GetSessionID(), ack.m_genericInformation, true)) { PTRACE(1, "LogChan\tOnReceivedPDUAck Invalid Generic Parameters"); return FALSE; } address = ¶m.m_mediaChannel; } if (!CreateTransport()) { PTRACE(1, "LogChan\tCould not create transport"); return FALSE; } if (!transport->ConnectTo(*address)) { PTRACE(1, "LogChan\tCould not connect to remote transport address: " << *address); return FALSE; } return TRUE; } PBoolean H323DataChannel::CreateListener() { if (listener == NULL) { listener = connection.GetControlChannel().GetLocalAddress().CreateCompatibleListener(connection.GetEndPoint()); if (listener == NULL) return FALSE; PTRACE(3, "LogChan\tCreated listener for data channel: " << *listener); } return listener->Open(); } PBoolean H323DataChannel::CreateTransport() { if (transport == NULL) { transport = connection.GetControlChannel().GetLocalAddress().CreateTransport(connection.GetEndPoint()); if (transport == NULL) return FALSE; PTRACE(3, "LogChan\tCreated transport for data channel: " << *transport); } return transport != NULL; } ///////////////////////////////////////////////////////////////////////////// h323plus/src/jitter.cxx0000644000175000017500000006631011561721270013733 0ustar markmark/* * jitter.cxx * * Jitter buffer support * * Open H323 Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Contributor(s): ______________________________________. * * $Id $ * */ #include #ifdef __GNUC__ #pragma implementation "jitter.h" #endif #include "openh323buildopts.h" #include "jitter.h" #if defined(H323_RTP_AGGREGATE) || defined(H323_SIGNAL_AGGREGATE) #include #endif /*Number of consecutive attempts to add a packet to the jitter buffer while it is full before the system clears the jitter buffer and starts over again. */ #define MAX_BUFFER_OVERRUNS 20 /**How much time must elapse with lower jitter before jitter buffer size is reduced */ #define DECREASE_JITTER_PERIOD 5000 // milliseconds /* Percentage of current jitter buffer size that constitutes a "genuinely" smaller jitter */ #define LOWER_JITTER_MAX_PCNT 80 /* Minimum number of packets that constitute a reliable sample for setting a lower jitter buffer target */ #define DECREASE_JITTER_MIN_PACKETS 50 #if PTRACING && !defined(NO_ANALYSER) class RTP_JitterBufferAnalyser : public PObject { PCLASSINFO(RTP_JitterBufferAnalyser, PObject); public: RTP_JitterBufferAnalyser(); void In(DWORD time, unsigned depth, const char * extra); void Out(DWORD time, unsigned depth, const char * extra); void PrintOn(ostream & strm) const; struct Info { Info() { } DWORD time; PTimeInterval tick; int depth; const char * extra; } in[1000], out[1000]; PINDEX inPos, outPos; }; #endif #ifdef H323_RTP_AGGREGATE class RTP_AggregatedHandle : public PAggregatedHandle { public: RTP_AggregatedHandle(PHandleAggregator * _owner, RTP_JitterBuffer & _jitterBuffer) : jitterBuffer(_jitterBuffer), dataFd(jitterBuffer.session.GetDataSocketHandle()), controlFd(jitterBuffer.session.GetControlSocketHandle()), owner(_owner) { } ~RTP_AggregatedHandle() { } PAggregatorFDList_t GetFDs() { PAggregatorFDList_t list; list.push_back(&controlFd); list.push_back(&dataFd); return list; } PBoolean Init() { return jitterBuffer.Init(currentReadFrame, markerWarning); } PBoolean PreRead() { return jitterBuffer.PreRead(currentReadFrame, markerWarning); } PBoolean OnRead() { return jitterBuffer.OnRead(currentReadFrame, markerWarning, FALSE); } void DeInit() { return jitterBuffer.DeInit(currentReadFrame, markerWarning); } PTimeInterval GetTimeout() { return jitterBuffer.session.GetReportTimer(); } PBoolean Remove() { return owner->RemoveHandle(this); } RTP_JitterBuffer & jitterBuffer; RTP_JitterBuffer::Entry * currentReadFrame; PBoolean markerWarning; protected: PAggregatorFD dataFd, controlFd; PHandleAggregator * owner; }; #endif #define new PNEW ///////////////////////////////////////////////////////////////////////////// RTP_JitterBuffer::RTP_JitterBuffer(RTP_Session & sess, unsigned minJitterDelay, unsigned maxJitterDelay, PINDEX stackSize) : session(sess), jitterThread(NULL), jitterStackSize(stackSize) { // Jitter buffer is a queue of frames waiting for playback, a list of // free frames, and a couple of place holders for the frame that is // currently beeing read from the RTP transport or written to the codec. oldestFrame = newestFrame = currentWriteFrame = NULL; // Calculate the maximum amount of timestamp units for the jitter buffer minJitterTime = minJitterDelay; maxJitterTime = maxJitterDelay; currentJitterTime = minJitterDelay; targetJitterTime = currentJitterTime; // Calculate number of frames to allocate, we make the assumption that the // smallest packet we can possibly get is 5ms long (assuming audio 8kHz unit). bufferSize = maxJitterTime/40+1; // Nothing in the buffer so far currentDepth = 0; packetsTooLate = 0; bufferOverruns = 0; consecutiveBufferOverruns = 0; maxConsecutiveMarkerBits = 10; consecutiveMarkerBits = 0; consecutiveEarlyPacketStartTime = 0; doJitterReductionImmediately = FALSE; doneFreeTrash = FALSE; lastWriteTimestamp = 0; lastWriteTick = 0; jitterCalc = 0; jitterCalcPacketCount = 0; shuttingDown = FALSE; preBuffering = TRUE; doneFirstWrite = FALSE; // Allocate the frames and put them all into the free list freeFrames = new Entry; freeFrames->next = freeFrames->prev = NULL; for (PINDEX i = 0; i < bufferSize; i++) { Entry * frame = new Entry; frame->prev = NULL; frame->next = freeFrames; freeFrames->prev = frame; freeFrames = frame; } PTRACE(2, "RTP\tJitter buffer created:" " size=" << bufferSize << " delay=" << minJitterTime << '-' << maxJitterTime << '/' << currentJitterTime << " (" << (currentJitterTime/8) << "ms)" " obj=" << this); #if PTRACING && !defined(NO_ANALYSER) analyser = new RTP_JitterBufferAnalyser; #else analyser = NULL; #endif #ifdef H323_RTP_AGGREGATE aggregratedHandle = NULL; #endif } RTP_JitterBuffer::~RTP_JitterBuffer() { shuttingDown = TRUE; #ifdef H323_RTP_AGGREGATE if (jitterThread == NULL) { aggregratedHandle->Remove(); delete aggregratedHandle; aggregratedHandle = NULL; } else #endif { PTRACE(3, "RTP\tRemoving jitter buffer " << this << ' ' << jitterThread->GetThreadName()); PAssert(jitterThread->WaitForTermination(10000), "Jitter buffer thread did not terminate"); delete jitterThread; jitterThread = NULL; } bufferMutex.Wait(); // Free up all the memory allocated while (oldestFrame != NULL) { Entry * frame = oldestFrame; oldestFrame = oldestFrame->next; delete frame; } while (freeFrames != NULL) { Entry * frame = freeFrames; freeFrames = freeFrames->next; delete frame; } delete currentWriteFrame; bufferMutex.Signal(); #if PTRACING && !defined(NO_ANALYSER) PTRACE(5, "Jitter buffer analysis: size=" << bufferSize << " time=" << currentJitterTime << '\n' << *analyser); delete analyser; #endif } void RTP_JitterBuffer::SetDelay(unsigned minJitterDelay, unsigned maxJitterDelay) { if (shuttingDown && jitterThread != NULL) { PAssert(jitterThread->WaitForTermination(10000), "Jitter buffer thread did not terminate"); } bufferMutex.Wait(); minJitterTime = minJitterDelay; maxJitterTime = maxJitterDelay; currentJitterTime = minJitterDelay; targetJitterTime = currentJitterTime; PINDEX newBufferSize = maxJitterTime/40+1; while (bufferSize < newBufferSize) { Entry * frame = new Entry; frame->prev = NULL; frame->next = freeFrames; freeFrames->prev = frame; freeFrames = frame; bufferSize++; } if (jitterThread != NULL) { if (jitterThread->IsTerminated()) { packetsTooLate = 0; bufferOverruns = 0; consecutiveBufferOverruns = 0; consecutiveMarkerBits = 0; consecutiveEarlyPacketStartTime = 0; shuttingDown = FALSE; preBuffering = TRUE; PTRACE(2, "RTP\tJitter buffer restarted:" " size=" << bufferSize << " delay=" << minJitterTime << '-' << maxJitterTime << '/' << currentJitterTime << " (" << (currentJitterTime/8) << "ms)"); jitterThread->Restart(); } } bufferMutex.Signal(); } void RTP_JitterBuffer::Resume( #ifdef H323_RTP_AGGREGATE PHandleAggregator * aggregator #endif ) { #ifdef H323_RTP_AGGREGATE // if we are aggregating RTP threads, add the socket to the RTP aggregator if (aggregator != NULL) { aggregratedHandle = new RTP_AggregatedHandle(aggregator, *this); aggregator->AddHandle(aggregratedHandle); return; } #endif // otherwise create a seperate thread as per the old design jitterThread = PThread::Create(PCREATE_NOTIFIER(JitterThreadMain), 0, PThread::NoAutoDeleteThread, PThread::HighestPriority, "RTP Jitter:%x", jitterStackSize); jitterThread->Resume(); } void RTP_JitterBuffer::JitterThreadMain(PThread &, INT) { RTP_JitterBuffer::Entry * currentReadFrame; PBoolean markerWarning; PTRACE(3, "RTP\tJitter RTP receive thread started: " << this); if (Init(currentReadFrame, markerWarning)) { for (;;) { if (!PreRead(currentReadFrame, markerWarning)) break; if (!OnRead(currentReadFrame, markerWarning, TRUE)) break; } DeInit(currentReadFrame, markerWarning); } PTRACE(3, "RTP\tJitter RTP receive thread finished: " << this); } PBoolean RTP_JitterBuffer::Init(Entry * & /*currentReadFrame*/, PBoolean & markerWarning) { bufferMutex.Wait(); markerWarning = FALSE; return TRUE; } void RTP_JitterBuffer::DeInit(Entry * & /*currentReadFrame*/, PBoolean & /*markerWarning*/) { } PBoolean RTP_JitterBuffer::PreRead(RTP_JitterBuffer::Entry * & currentReadFrame, PBoolean & /*markerWarning*/) { // Get the next free frame available for use for reading from the RTP // transport. Place it into a parking spot. if (freeFrames != NULL) { // Take the next free frame and make it the current for reading currentReadFrame = freeFrames; freeFrames = freeFrames->next; if (freeFrames != NULL) freeFrames->prev = NULL; PTRACE_IF(2, consecutiveBufferOverruns > 1, "RTP\tJitter buffer full, threw away " << consecutiveBufferOverruns << " oldest frames"); consecutiveBufferOverruns = 0; } else { // We have a full jitter buffer, need a new frame so take the oldest one currentReadFrame = oldestFrame; oldestFrame = oldestFrame->next; if (oldestFrame != NULL) oldestFrame->prev = NULL; currentDepth--; bufferOverruns++; consecutiveBufferOverruns++; if (consecutiveBufferOverruns > MAX_BUFFER_OVERRUNS) { PTRACE(2, "RTP\tJitter buffer continuously full, throwing away entire buffer."); freeFrames = oldestFrame; oldestFrame = newestFrame = NULL; preBuffering = TRUE; } else { PTRACE_IF(2, consecutiveBufferOverruns == 1, "RTP\tJitter buffer full, throwing away oldest frame (" << currentReadFrame->GetTimestamp() << ')'); } } currentReadFrame->next = NULL; bufferMutex.Signal(); return TRUE; } PBoolean RTP_JitterBuffer::OnRead(RTP_JitterBuffer::Entry * & currentReadFrame, PBoolean & markerWarning, PBoolean loop) { // Keep reading from the RTP transport frames if (!session.ReadData(*currentReadFrame, loop)) { delete currentReadFrame; // Destructor won't delete this one, so do it here. currentReadFrame = FALSE; shuttingDown = TRUE; // Flag to stop the reading side thread PTRACE(3, "RTP\tJitter RTP receive thread ended"); return FALSE; } currentReadFrame->tick = PTimer::Tick(); if (consecutiveMarkerBits < maxConsecutiveMarkerBits) { if (currentReadFrame->GetMarker()) { PTRACE(3, "RTP\tReceived start of talk burst: " << currentReadFrame->GetTimestamp()); //preBuffering = TRUE; consecutiveMarkerBits++; } else consecutiveMarkerBits = 0; } else { if (currentReadFrame->GetMarker()) currentReadFrame->SetMarker(FALSE); if (!markerWarning && (consecutiveMarkerBits == maxConsecutiveMarkerBits)) { markerWarning = TRUE; PTRACE(3, "RTP\tEvery packet has Marker bit, ignoring them from this client!"); } } #if PTRACING && !defined(NO_ANALYSER) analyser->In(currentReadFrame->GetTimestamp(), currentDepth, preBuffering ? "PreBuf" : ""); #endif // Queue the frame for playing by the thread at other end of jitter buffer bufferMutex.Wait(); // Have been reading a frame, put it into the queue now, at correct position if (newestFrame == NULL) oldestFrame = newestFrame = currentReadFrame; // Was empty else { DWORD time = currentReadFrame->GetTimestamp(); if (time > newestFrame->GetTimestamp()) { // Is newer than newst, put at that end of queue currentReadFrame->prev = newestFrame; newestFrame->next = currentReadFrame; newestFrame = currentReadFrame; } else if (time <= oldestFrame->GetTimestamp()) { // Is older than the oldest, put at that end of queue currentReadFrame->next = oldestFrame; oldestFrame->prev = currentReadFrame; oldestFrame = currentReadFrame; } else { // Somewhere in between, locate its position Entry * frame = newestFrame->prev; while (time < frame->GetTimestamp()) frame = frame->prev; currentReadFrame->prev = frame; currentReadFrame->next = frame->next; frame->next->prev = currentReadFrame; frame->next = currentReadFrame; } } currentDepth++; return TRUE; } void RTP_JitterBuffer::ResetFirstWrite() { doneFirstWrite = FALSE; } PBoolean RTP_JitterBuffer::ReadData(DWORD timestamp, RTP_DataFrame & frame) { if (shuttingDown) return FALSE; /*Free the frame just written to codec, putting it back into the free list and clearing the parking spot for it. */ bufferMutex.Wait(); if (currentWriteFrame != NULL) { // Move frame from current to free list currentWriteFrame->next = freeFrames; if (freeFrames != NULL) freeFrames->prev = currentWriteFrame; freeFrames = currentWriteFrame; currentWriteFrame = NULL; } bufferMutex.Signal(); // Default response is an empty frame, ie silence frame.SetPayloadSize(0); PWaitAndSignal mutex(bufferMutex); /*Get the next frame to write to the codec. Takes it from the oldest position in the queue, if it is time to do so, and parks it in the special member so can unlock the mutex while the writer thread has its way with the buffer. */ if (oldestFrame == NULL) { /*No data to play! We ran the buffer down to empty, restart buffer by setting flag that will fill it again before returning any data. */ preBuffering = TRUE; currentJitterTime = targetJitterTime; #if PTRACING && !defined(NO_ANALYSER) analyser->Out(0, currentDepth, "Empty"); #endif return TRUE; } DWORD oldestTimestamp = oldestFrame->GetTimestamp(); DWORD newestTimestamp = newestFrame->GetTimestamp(); /* If there is an opportunity (due to silence in the buffer) to implement a desired reduction in the size of the jitter buffer, effect it */ if (targetJitterTime < currentJitterTime && (newestTimestamp - oldestTimestamp) < currentJitterTime) { currentJitterTime = ( targetJitterTime > (newestTimestamp - oldestTimestamp)) ? targetJitterTime : (newestTimestamp - oldestTimestamp); PTRACE(3, "RTP\tJitter buffer size decreased to " << currentJitterTime << " (" << (currentJitterTime/8) << "ms)"); } /* See if time for this packet, if our oldest frame is older than the required age, then use it. If it is not time yet, make sure that the writer thread isn't falling behind (not enough MIPS). If the time between the oldest and the newest entries in the jitter buffer is greater than the size specified for the buffer, then return the oldest entry regardless, making the writer thread catch up. */ if (preBuffering) { // Reset jitter baseline (should be handled by GetMarker() condition, but just in case...) lastWriteTimestamp = 0; lastWriteTick = 0; /* // Check for requesting something that already exceeds the maximum time, // or have filled the jitter buffer, not filling if this is so if ((timestamp - oldestTimestamp) < currentJitterTime && (newestTimestamp - oldestTimestamp) < currentJitterTime/2) { */ // If oldest frame has not been in the buffer long enough, don't return anything yet if ((PTimer::Tick() - oldestFrame->tick).GetInterval() * 8 < currentJitterTime / 2) { #if PTRACING && !defined(NO_ANALYSER) analyser->Out(oldestTimestamp, currentDepth, "PreBuf"); #endif return TRUE; } preBuffering = FALSE; } //Handle short silence bursts in the middle of the buffer // - if we think we're getting marker bit information, use that PBoolean shortSilence = FALSE; if (consecutiveMarkerBits < maxConsecutiveMarkerBits) { if (oldestFrame->GetMarker() && (PTimer::Tick() - oldestFrame->tick).GetInterval()* 8 < currentJitterTime / 2) shortSilence = TRUE; } else if (timestamp < oldestTimestamp && timestamp > (newestTimestamp - currentJitterTime)) shortSilence = TRUE; if (shortSilence) { // It is not yet time for something in the buffer #if PTRACING && !defined(NO_ANALYSER) analyser->Out(oldestTimestamp, currentDepth, "Wait"); #endif lastWriteTimestamp = 0; lastWriteTick = 0; return TRUE; } // Detatch oldest packet from the list, put into parking space currentDepth--; #if PTRACING && !defined(NO_ANALYSER) analyser->Out(oldestTimestamp, currentDepth, timestamp >= oldestTimestamp ? "" : "Late"); #endif currentWriteFrame = oldestFrame; oldestFrame = currentWriteFrame->next; currentWriteFrame->next = NULL; // Calculate the jitter contribution of this frame // - don't count if start of a talk burst if (currentWriteFrame->GetMarker()) { lastWriteTimestamp = 0; lastWriteTick = 0; } if (lastWriteTimestamp != 0 && lastWriteTick !=0) { int thisJitter = 0; if (currentWriteFrame->GetTimestamp() < lastWriteTimestamp) { //Not too sure how to handle this situation... thisJitter = 0; } else if (currentWriteFrame->tick < lastWriteTick) { //Not too sure how to handle this situation either! thisJitter = 0; } else { thisJitter = (currentWriteFrame->tick - lastWriteTick).GetInterval()*8 + lastWriteTimestamp - currentWriteFrame->GetTimestamp(); } if (thisJitter < 0) thisJitter *=(-1); thisJitter *=2; //currentJitterTime needs to be at least TWICE the maximum jitter if (thisJitter > (int) currentJitterTime * LOWER_JITTER_MAX_PCNT / 100) { targetJitterTime = currentJitterTime; PTRACE(3, "RTP\tJitter buffer target realigned to current jitter buffer"); consecutiveEarlyPacketStartTime = PTimer::Tick(); jitterCalcPacketCount = 0; jitterCalc = 0; } else { if (thisJitter > (int) jitterCalc) jitterCalc = thisJitter; jitterCalcPacketCount++; //If it's bigger than the target we're currently trying to set, adapt that target. //Note: this will never make targetJitterTime larger than currentJitterTime due to //previous if condition if (thisJitter > (int) targetJitterTime * LOWER_JITTER_MAX_PCNT / 100) { targetJitterTime = thisJitter * 100 / LOWER_JITTER_MAX_PCNT; PTRACE(3, "RTP\tJitter buffer target size increased to " << targetJitterTime << " (" << (targetJitterTime/8) << "ms)"); } } } lastWriteTimestamp = currentWriteFrame->GetTimestamp(); lastWriteTick = currentWriteFrame->tick; if (oldestFrame == NULL) newestFrame = NULL; else { oldestFrame->prev = NULL; // If exceeded current jitter buffer time delay: if ((newestTimestamp - currentWriteFrame->GetTimestamp()) > currentJitterTime) { PTRACE(4, "RTP\tJitter buffer length exceeded"); consecutiveEarlyPacketStartTime = PTimer::Tick(); jitterCalcPacketCount = 0; jitterCalc = 0; lastWriteTimestamp = 0; lastWriteTick = 0; // If we haven't yet written a frame, we get one free overrun if (!doneFirstWrite) { PTRACE(4, "RTP\tJitter buffer length exceed was prior to first write. Not increasing buffer size"); while ((newestTimestamp - currentWriteFrame->GetTimestamp()) > currentJitterTime) { Entry * wastedFrame = currentWriteFrame; currentWriteFrame = oldestFrame; oldestFrame = oldestFrame->next; currentDepth--; currentWriteFrame->next = NULL; //currentWriteFrame should never be able to be NULL wastedFrame->next = freeFrames; if (freeFrames != NULL) freeFrames->prev = wastedFrame; freeFrames = wastedFrame; if (oldestFrame == NULL) { newestFrame = NULL; break; } oldestFrame->prev = NULL; } doneFirstWrite = TRUE; frame = *currentWriteFrame; return TRUE; } // See if exceeded maximum jitter buffer time delay, waste them if so while ((newestFrame->GetTimestamp() - currentWriteFrame->GetTimestamp()) > maxJitterTime) { PTRACE(4, "RTP\tJitter buffer oldest packet (" << oldestFrame->GetTimestamp() << " < " << (newestTimestamp - maxJitterTime) << ") too late, throwing away"); currentJitterTime = maxJitterTime; //Throw away the oldest frame and move everything up Entry * wastedFrame = currentWriteFrame; currentWriteFrame = oldestFrame; oldestFrame = oldestFrame->next; currentDepth--; currentWriteFrame->next = NULL; //currentWriteFrame should never be able to be NULL wastedFrame->next = freeFrames; if (freeFrames != NULL) freeFrames->prev = wastedFrame; freeFrames = wastedFrame; if (oldestFrame == NULL) { newestFrame = NULL; break; } } // Now change the jitter time to cope with the new size // unless already set to maxJitterTime if (newestTimestamp - currentWriteFrame->GetTimestamp() > currentJitterTime) currentJitterTime = newestTimestamp - currentWriteFrame->GetTimestamp(); targetJitterTime = currentJitterTime; PTRACE(3, "RTP\tJitter buffer size increased to " << currentJitterTime << " (" << (currentJitterTime/8) << "ms)"); } } if ((PTimer::Tick() - consecutiveEarlyPacketStartTime).GetInterval() > DECREASE_JITTER_PERIOD && jitterCalcPacketCount >= DECREASE_JITTER_MIN_PACKETS){ jitterCalc = jitterCalc * 100 / LOWER_JITTER_MAX_PCNT; if (jitterCalc < targetJitterTime / 2) jitterCalc = targetJitterTime / 2; if (jitterCalc < minJitterTime) jitterCalc = minJitterTime; targetJitterTime = jitterCalc; PTRACE(3, "RTP\tJitter buffer target size decreased to " << targetJitterTime << " (" << (targetJitterTime/8) << "ms)"); jitterCalc = 0; jitterCalcPacketCount = 0; consecutiveEarlyPacketStartTime = PTimer::Tick(); } /* If using immediate jitter reduction (rather than waiting for silence opportunities) then trash oldest frames as necessary to reduce the size of the jitter buffer */ if (targetJitterTime < currentJitterTime && doJitterReductionImmediately && newestFrame != NULL) { while ((newestFrame->GetTimestamp() - currentWriteFrame->GetTimestamp()) > targetJitterTime){ // Throw away the newest entries Entry * wastedFrame = newestFrame; newestFrame = newestFrame->prev; if (newestFrame != NULL) newestFrame->next = NULL; wastedFrame->prev = NULL; // Put thrown away frame on free list wastedFrame->next = freeFrames; if (freeFrames != NULL) freeFrames->prev = wastedFrame; freeFrames = wastedFrame; // Reset jitter calculation baseline lastWriteTimestamp = 0; lastWriteTick = 0; currentDepth--; if (newestFrame == NULL) { oldestFrame = NULL; break; } } currentJitterTime = targetJitterTime; PTRACE(3, "RTP\tJitter buffer size decreased to " << currentJitterTime << " (" << (currentJitterTime/8) << "ms)"); } doneFirstWrite = TRUE; frame = *currentWriteFrame; return TRUE; } ///////////////////////////////////////////////////////////////////////////////// #if PTRACING && !defined(NO_ANALYSER) RTP_JitterBufferAnalyser::RTP_JitterBufferAnalyser() { inPos = outPos = 1; in[0].time = out[0].time = 0; in[0].tick = out[0].tick = PTimer::Tick(); in[0].depth = out[0].depth = 0; } void RTP_JitterBufferAnalyser::In(DWORD time, unsigned depth, const char * extra) { if (inPos < PARRAYSIZE(in)) { in[inPos].tick = PTimer::Tick(); in[inPos].time = time; in[inPos].depth = depth; in[inPos++].extra = extra; } } void RTP_JitterBufferAnalyser::Out(DWORD time, unsigned depth, const char * extra) { if (outPos < PARRAYSIZE(out)) { out[outPos].tick = PTimer::Tick(); if (time == 0 && outPos > 0) out[outPos].time = out[outPos-1].time; else out[outPos].time = time; out[outPos].depth = depth; out[outPos++].extra = extra; } } void RTP_JitterBufferAnalyser::PrintOn(ostream & strm) const { strm << "Input samples: " << inPos << " Output samples: " << outPos << "\n" "Dir\tRTPTime\tInDiff\tOutDiff\tInMode\tOutMode\t" "InDepth\tOutDep\tInTick\tInDelay\tOutTick\tOutDel\tIODelay\n"; PINDEX ix = 1; PINDEX ox = 1; while (ix < inPos || ox < outPos) { while (ix < inPos && (ox >= outPos || in[ix].time < out[ox].time)) { strm << "In\t" << in[ix].time << '\t' << (in[ix].time - in[ix-1].time) << "\t" "\t" << in[ix].extra << "\t" "\t" << in[ix].depth << "\t" "\t" << (in[ix].tick - in[0].tick) << '\t' << (in[ix].tick - in[ix-1].tick) << "\t" "\t" "\t" "\n"; ix++; } while (ox < outPos && (ix >= inPos || out[ox].time < in[ix].time)) { strm << "Out\t" << out[ox].time << "\t" "\t" << (out[ox].time - out[ox-1].time) << "\t" "\t" << out[ox].extra << "\t" "\t" << out[ox].depth << "\t" "\t" "\t" << (out[ox].tick - out[0].tick) << '\t' << (out[ox].tick - out[ox-1].tick) << "\t" "\n"; ox++; } while (ix < inPos && ox < outPos && in[ix].time == out[ox].time) { strm << "I/O\t" << in[ix].time << '\t' << (in[ix].time - in[ix-1].time) << '\t' << (out[ox].time - out[ox-1].time) << '\t' << in[ix].extra << '\t' << out[ox].extra << '\t' << in[ix].depth << '\t' << out[ox].depth << '\t' << (in[ix].tick - in[0].tick) << '\t' << (in[ix].tick - in[ix-1].tick) << '\t' << (out[ox].tick - out[0].tick) << '\t' << (out[ox].tick - out[ox-1].tick) << '\t' << (out[ox].tick - in[ix].tick) << '\n'; ox++; ix++; } } } #endif ///////////////////////////////////////////////////////////////////////////// h323plus/src/transports.cxx0000644000175000017500000015006011647545243014656 0ustar markmark/* * transports.cxx * * H.323 transports handler * * H323Plus Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Contributor(s): ______________________________________. * * $Id: transports.cxx,v 1.12 2011/10/19 13:03:31 shorne Exp $ * */ #include #ifdef __GNUC__ #pragma implementation "transports.h" #endif #include "transports.h" #include "h323pdu.h" #include "h323ep.h" #include "gkclient.h" #ifdef P_STUN #include #ifdef _MSC_VER #pragma warning(disable : 4701) // initialisation warning #endif #endif // TCP KeepAlive static int KeepAliveInterval = 19; class H225TransportThread : public PThread { PCLASSINFO(H225TransportThread, PThread) public: H225TransportThread(H323EndPoint & endpoint, H323Transport * transport); ~H225TransportThread(); void ConnectionEstablished(); protected: void Main(); H323Transport * transport; PDECLARE_NOTIFIER(PTimer, H225TransportThread, KeepAlive); PTimer m_keepAlive; PBoolean useKeepAlive; }; class H245TransportThread : public PThread { PCLASSINFO(H245TransportThread, PThread) public: H245TransportThread(H323EndPoint & endpoint, H323Connection & connection, H323Transport & transport); ~H245TransportThread(); protected: void Main(); H323Connection & connection; H323Transport & transport; #ifdef H323_SIGNAL_AGGREGATE PBoolean useAggregator; #endif PDECLARE_NOTIFIER(PTimer, H245TransportThread, KeepAlive); PTimer m_keepAlive; }; #define new PNEW ///////////////////////////////////////////////////////////////////////////// H225TransportThread::H225TransportThread(H323EndPoint & ep, H323Transport * t) : PThread(ep.GetSignallingThreadStackSize(), AutoDeleteThread, NormalPriority, "H225 Answer:%0x"), transport(t) { useKeepAlive = ep.EnableH225KeepAlive(); Resume(); } H225TransportThread::~H225TransportThread() { if (useKeepAlive) m_keepAlive.Stop(); } void H225TransportThread::ConnectionEstablished() { if (useKeepAlive) { PTRACE(3, "H225\tStarted KeepAlive"); m_keepAlive.SetNotifier(PCREATE_NOTIFIER(KeepAlive)); m_keepAlive.RunContinuous(KeepAliveInterval * 1000); } } void H225TransportThread::Main() { PTRACE(3, "H225\tStarted incoming call thread"); if (!transport->HandleFirstSignallingChannelPDU(this)) delete transport; } void H225TransportThread::KeepAlive(PTimer &, INT) { // Send empty RFC1006 TPKT int packetLength = 4; PBYTEArray tpkt(packetLength); memset(tpkt.GetPointer(),0 , packetLength); tpkt[0] = 3; tpkt[1] = 0; tpkt[2] = (BYTE)(packetLength >> 8); tpkt[3] = (BYTE)packetLength; PTRACE(6, "H225\tSending KeepAlive TPKT packet"); if (transport) transport->Write((const BYTE *)tpkt, packetLength); } ///////////////////////////////////////////////////////////////////////////// H245TransportThread::H245TransportThread(H323EndPoint & endpoint, H323Connection & c, H323Transport & t) : PThread(endpoint.GetSignallingThreadStackSize(), NoAutoDeleteThread, NormalPriority, "H245:%0x"), connection(c), transport(t) { #ifdef H323_SIGNAL_AGGREGATE useAggregator = endpoint.GetSignallingAggregator() != NULL; if (!useAggregator) #endif { transport.AttachThread(this); if (endpoint.EnableH245KeepAlive()) { m_keepAlive.SetNotifier(PCREATE_NOTIFIER(KeepAlive)); m_keepAlive.RunContinuous(KeepAliveInterval * 1000); } } Resume(); } H245TransportThread::~H245TransportThread() { m_keepAlive.Stop(); } void H245TransportThread::Main() { PTRACE(3, "H245\tStarted thread"); if (transport.AcceptControlChannel(connection)) { #ifdef H323_SIGNAL_AGGREGATE // if the endpoint is using signalling aggregation, we need to add this connection // to the signalling aggregator. if (useAggregator) { connection.AggregateControlChannel(&transport); SetAutoDelete(AutoDeleteThread); return; } #endif connection.HandleControlChannel(); } } void H245TransportThread::KeepAlive(PTimer &, INT) { // Send empty RFC1006 TPKT int packetLength = 4; PBYTEArray tpkt(packetLength); tpkt[0] = 3; tpkt[1] = 0; tpkt[2] = 0; tpkt[3] = (BYTE)packetLength; PTRACE(6, "H245\tSending KeepAlive TPKT packet"); transport.Write((const BYTE *)tpkt, packetLength); } ///////////////////////////////////////////////////////////////////////////// static const char IpPrefix[] = "ip$"; H323TransportAddress::H323TransportAddress(const char * cstr) : PString(cstr) { Validate(); } H323TransportAddress::H323TransportAddress(const PString & str) : PString(str) { Validate(); } static PString BuildIP(const PIPSocket::Address & ip, unsigned port) { PStringStream str; str << IpPrefix; if (ip.IsAny() || !ip.IsValid()) str << '*'; else #if P_HAS_IPV6 if (ip.GetVersion() == 6) str << '[' << ip << ']'; else #endif str << ip; if (port != 0) str << ':' << port; return str; } H323TransportAddress::H323TransportAddress(const H225_TransportAddress & transport) { switch (transport.GetTag()) { case H225_TransportAddress::e_ipAddress : { const H225_TransportAddress_ipAddress & ip = transport; *this = BuildIP(PIPSocket::Address(ip.m_ip.GetSize(), ip.m_ip.GetValue()), ip.m_port); m_version = 4; break; } #if P_HAS_IPV6 case H225_TransportAddress::e_ip6Address : { const H225_TransportAddress_ip6Address & ip = transport; *this = BuildIP(PIPSocket::Address(ip.m_ip.GetSize(), ip.m_ip.GetValue()), ip.m_port); m_version = 6; break; } #endif } } H323TransportAddress::H323TransportAddress(const H245_TransportAddress & transport) { switch (transport.GetTag()) { case H245_TransportAddress::e_unicastAddress : { const H245_UnicastAddress & unicast = transport; switch (unicast.GetTag()) { case H245_UnicastAddress::e_iPAddress : { const H245_UnicastAddress_iPAddress & ip = unicast; *this = BuildIP(PIPSocket::Address(ip.m_network.GetSize(), ip.m_network.GetValue()), ip.m_tsapIdentifier); m_version = 4; break; } #if P_HAS_IPV6 case H245_UnicastAddress::e_iP6Address : { const H245_UnicastAddress_iP6Address & ip = unicast; *this = BuildIP(PIPSocket::Address(ip.m_network.GetSize(), ip.m_network.GetValue()), ip.m_tsapIdentifier); m_version = 6; break; } #endif } break; } } } H323TransportAddress::H323TransportAddress(const PIPSocket::Address & ip, WORD port) { #if P_HAS_IPV6 m_version = ip.GetVersion(); #else m_version = 4; #endif *this = BuildIP(ip, port); } void H323TransportAddress::Validate() { if (IsEmpty()) return; if (Find(']') != P_MAX_INDEX) m_version = 6; else m_version = 4; if (Find('$') == P_MAX_INDEX) { Splice(IpPrefix, 0, 0); return; } if (strncmp(theArray, IpPrefix, 3) == 0) { return; } *this = PString(); } PBoolean H323TransportAddress::SetPDU(H225_TransportAddress & pdu) const { PIPSocket::Address ip; WORD port = H323EndPoint::DefaultTcpPort; if (GetIpAndPort(ip, port)) { #if P_HAS_IPV6 if (ip.GetVersion() == 6) { pdu.SetTag(H225_TransportAddress::e_ip6Address); H225_TransportAddress_ip6Address & addr = pdu; for (PINDEX i = 0; i < ip.GetSize(); i++) addr.m_ip[i] = ip[i]; addr.m_port = port; return TRUE; } #endif pdu.SetTag(H225_TransportAddress::e_ipAddress); H225_TransportAddress_ipAddress & addr = pdu; for (PINDEX i = 0; i < 4; i++) addr.m_ip[i] = ip[i]; addr.m_port = port; return TRUE; } return FALSE; } PBoolean H323TransportAddress::SetPDU(H245_TransportAddress & pdu) const { PIPSocket::Address ip; WORD port = 0; if (GetIpAndPort(ip, port)) { pdu.SetTag(H245_TransportAddress::e_unicastAddress); H245_UnicastAddress & unicast = pdu; #if P_HAS_IPV6 if (ip.GetVersion() == 6) { unicast.SetTag(H245_UnicastAddress::e_iP6Address); H245_UnicastAddress_iP6Address & addr = unicast; for (PINDEX i = 0; i < ip.GetSize(); i++) addr.m_network[i] = ip[i]; addr.m_tsapIdentifier = port; return TRUE; } #endif unicast.SetTag(H245_UnicastAddress::e_iPAddress); H245_UnicastAddress_iPAddress & addr = unicast; for (PINDEX i = 0; i < 4; i++) addr.m_network[i] = ip[i]; addr.m_tsapIdentifier = port; return TRUE; } return FALSE; } PBoolean H323TransportAddress::IsEquivalent(const H323TransportAddress & address) { if (*this == address) return TRUE; if (IsEmpty() || address.IsEmpty()) return FALSE; PIPSocket::Address ip1, ip2; WORD port1 = 65535, port2 = 65535; return GetIpAndPort(ip1, port1) && address.GetIpAndPort(ip2, port2) && (ip1.IsAny() || ip2.IsAny() || ip1 == ip2) && (port1 == 65535 || port2 == 65535 || port1 == port2); } PBoolean H323TransportAddress::GetIpAddress(PIPSocket::Address & ip) const { WORD dummy = 65535; return GetIpAndPort(ip, dummy); } static PBoolean SplitAddress(const PString & addr, PString & host, PString & service) { if (strncmp(addr, IpPrefix, 3) != 0) { PTRACE(2, "H323\tUse of non IP transport address: \"" << addr << '"'); return FALSE; } PINDEX lastChar = addr.GetLength()-1; if (addr[lastChar] == '+') lastChar--; PINDEX bracket = addr.FindLast(']'); if (bracket == P_MAX_INDEX) bracket = 0; PINDEX colon = addr.Find(':', bracket); if (colon == P_MAX_INDEX) host = addr(3, lastChar); else { host = addr.Mid(3, colon-3); service = addr.Mid(colon+1, lastChar); } return TRUE; } PBoolean H323TransportAddress::GetIpAndPort(PIPSocket::Address & ip, WORD & port, const char * proto) const { PString host, service; if (!SplitAddress(*this, host, service)) return FALSE; if (host.IsEmpty()) { PTRACE(2, "H323\tIllegal IP transport address: \"" << *this << '"'); return FALSE; } if (service == "*") port = 0; else { if (!service) port = PIPSocket::GetPortByService(proto, service); if (port == 0) { PTRACE(2, "H323\tIllegal IP transport port/service: \"" << *this << '"'); return FALSE; } } if (host == "*") { ip = PIPSocket::GetDefaultIpAny(); return TRUE; } if (PIPSocket::GetHostAddress(host, ip)) return TRUE; #if P_HAS_IPV6 // This is really horrible // You first attempt to get an IPv6 (default) record then if the fails // Set the defaultIPAddress family to v4, Clear the cache then resolve the address via IPv4. // This really needs to be cleaned up in PTLIB - SH if (PIPSocket::GetDefaultIpAddressFamily() == AF_INET6) { PTRACE(3, "H323\tCould not resolve IPv6 Address for : \"" << host << '"' << " Trying IPv4:"); PIPSocket::SetDefaultIpAddressFamilyV4(); PIPSocket::ClearNameCache(); // clear the IPv6 record bool success = PIPSocket::GetHostAddress(host, ip); PIPSocket::SetDefaultIpAddressFamilyV6(); if (success) return TRUE; } #endif PTRACE(1, "H323\tCould not find host : \"" << host << '"'); return FALSE; } unsigned H323TransportAddress::GetIpVersion() const { return m_version; } PString H323TransportAddress::GetHostName() const { PString host, service; if (!SplitAddress(*this, host, service)) return *this; PIPSocket::Address ip; if (PIPSocket::GetHostAddress(host, ip)) return ip.AsString(); return host; } H323Listener * H323TransportAddress::CreateListener(H323EndPoint & endpoint) const { /*Have transport type name, create the transport object. Hard coded at the moment but would like to add some sort of "registration" of transport classes so new transports can be added without changing this source file every time. As we have one transport type at the moment and may never actually have another, we hard code it for now. */ PIPSocket::Address ip; WORD port = H323EndPoint::DefaultTcpPort; if (GetIpAndPort(ip, port)) return new H323ListenerTCP(endpoint, ip, port, theArray[GetLength()-1] != '+'); return NULL; } H323Listener * H323TransportAddress::CreateCompatibleListener(H323EndPoint & endpoint) const { /*Have transport type name, create the transport object. Hard coded at the moment but would like to add some sort of "registration" of transport classes so new transports can be added without changing this source file every time. As we have one transport type at the moment and may never actually have another, we hard code it for now. */ PIPSocket::Address ip; if (GetIpAddress(ip)) return new H323ListenerTCP(endpoint, ip, 0, FALSE); return NULL; } H323Transport * H323TransportAddress::CreateTransport(H323EndPoint & endpoint) const { /*Have transport type name, create the transport object. Hard coded at the moment but would like to add some sort of "registration" of transport classes so new transports can be added without changing this source file every time. As we have one transport type at the moment and may never actually have another, we hard code it for now. */ if (strncmp(theArray, IpPrefix, 3) == 0) return new H323TransportTCP(endpoint,PIPSocket::Address::GetAny(m_version)); return NULL; } H323TransportAddressArray H323GetInterfaceAddresses(const H323ListenerList & listeners, PBoolean excludeLocalHost, H323Transport * associatedTransport) { H323TransportAddressArray interfaceAddresses; PINDEX i; for (i = 0; i < listeners.GetSize(); i++) { H323TransportAddressArray newAddrs = H323GetInterfaceAddresses(listeners[i].GetTransportAddress(), excludeLocalHost, associatedTransport); PINDEX size = interfaceAddresses.GetSize(); PINDEX nsize = newAddrs.GetSize(); interfaceAddresses.SetSize(size + nsize); PINDEX j; for (j = 0; j < nsize; j++) interfaceAddresses.SetAt(size + j, new H323TransportAddress(newAddrs[j])); } return interfaceAddresses; } H323TransportAddressArray H323GetInterfaceAddresses(const H323TransportAddress & addr, PBoolean excludeLocalHost, H323Transport * associatedTransport) { PIPSocket::Address ip; WORD port; if (!addr.GetIpAndPort(ip, port) || !ip.IsAny()) return addr; PIPSocket::InterfaceTable interfaces; if (!PIPSocket::GetInterfaceTable(interfaces)) return addr; if (interfaces.GetSize() == 1) return H323TransportAddress(interfaces[0].GetAddress(), port); PINDEX i; H323TransportAddressArray interfaceAddresses; PIPSocket::Address firstAddress(0); if (associatedTransport != NULL) { if (associatedTransport->GetLocalAddress().GetIpAddress(firstAddress)) { for (i = 0; i < interfaces.GetSize(); i++) { PIPSocket::Address ip = interfaces[i].GetAddress(); if (ip == firstAddress) interfaceAddresses.Append(new H323TransportAddress(ip, port)); } } } for (i = 0; i < interfaces.GetSize(); i++) { PIPSocket::Address ip = interfaces[i].GetAddress(); if (ip != firstAddress && !(excludeLocalHost && ip.IsLoopback())) interfaceAddresses.Append(new H323TransportAddress(ip, port)); } return interfaceAddresses; } void H323SetTransportAddresses(const H323Transport & associatedTransport, const H323TransportAddressArray & addresses, H225_ArrayOf_TransportAddress & pdu) { for (PINDEX i = 0; i < addresses.GetSize(); i++) { H323TransportAddress addr = addresses[i]; PIPSocket::Address ip; WORD port; if (addr.GetIpAndPort(ip, port)) { PIPSocket::Address remoteIP; if (associatedTransport.GetRemoteAddress().GetIpAddress(remoteIP)) { associatedTransport.GetEndPoint().InternalTranslateTCPAddress(ip, remoteIP); associatedTransport.GetEndPoint().TranslateTCPPort(port,remoteIP); addr = H323TransportAddress(ip, port); } } if (addresses.GetSize() > 1 && ip.IsLoopback()) continue; PTRACE(4, "TCP\tAppending H.225 transport " << addr << " using associated transport " << associatedTransport); H225_TransportAddress pduAddr; addr.SetPDU(pduAddr); PINDEX lastPos = pdu.GetSize(); // Check for already have had that address. PINDEX j; for (j = 0; j < lastPos; j++) { if (pdu[j] == pduAddr) break; } if (j >= lastPos) { // Put new listener into array pdu.SetSize(lastPos+1); pdu[lastPos] = pduAddr; } } } ///////////////////////////////////////////////////////////////////////////// H323TransportAddressArray::H323TransportAddressArray(const H225_ArrayOf_TransportAddress & addresses) { for (PINDEX i = 0; i < addresses.GetSize(); i++) AppendAddress(H323TransportAddress(addresses[i])); } void H323TransportAddressArray::AppendString(const char * str) { AppendAddress(H323TransportAddress(str)); } void H323TransportAddressArray::AppendString(const PString & str) { AppendAddress(H323TransportAddress(str)); } void H323TransportAddressArray::AppendAddress(const H323TransportAddress & addr) { if (!addr) Append(new H323TransportAddress(addr)); } void H323TransportAddressArray::AppendStringCollection(const PCollection & coll) { for (PINDEX i = 0; i < coll.GetSize(); i++) { PObject * obj = coll.GetAt(i); if (obj != NULL && PIsDescendant(obj, PString)) AppendAddress(H323TransportAddress(*(PString *)obj)); } } ///////////////////////////////////////////////////////////////////////////// H323Listener::H323Listener(H323EndPoint & end) : PThread(end.GetListenerThreadStackSize(), NoAutoDeleteThread, NormalPriority, "H323 Listener:%0x"), endpoint(end) { } void H323Listener::PrintOn(ostream & strm) const { strm << "Listener[" << GetTransportAddress() << ']'; } ///////////////////////////////////////////////////////////////////////////// H323Transport::H323Transport(H323EndPoint & end) : endpoint(end) { thread = NULL; canGetInterface = FALSE; } H323Transport::~H323Transport() { PAssert(thread == NULL, PLogicError); } void H323Transport::PrintOn(ostream & strm) const { strm << "Transport["; H323TransportAddress addr = GetRemoteAddress(); if (!addr) strm << "remote=" << addr << ' '; strm << "if=" << GetLocalAddress() << ']'; } PBoolean H323Transport::Close() { PTRACE(3, "H323\tH323Transport::Close"); /* Do not use PIndirectChannel::Close() as this deletes the sub-channel member field crashing the background thread. Just close the base sub-channel so breaks the threads I/O block. */ if (IsOpen()) { channelPointerMutex.StartRead(); GetBaseReadChannel()->Close(); channelPointerMutex.EndRead(); } return TRUE; } PBoolean H323Transport::HandleSignallingSocket(H323SignalPDU & pdu) { for (;;) { H323SignalPDU rpdu; if (!rpdu.Read(*this)) { return FALSE; } else if ((rpdu.GetQ931().GetMessageType() == Q931::InformationMsg) && endpoint.OnUnsolicitedInformation(rpdu)) { // Handle unsolicited Information Message ; } else { pdu = rpdu; return TRUE; } } return FALSE; } PBoolean H323Transport::HandleFirstSignallingChannelPDU(PThread * thread) { PTRACE(3, "H225\tAwaiting first PDU"); SetReadTimeout(15000); // Await 15 seconds after connect for first byte H323SignalPDU pdu; // if (!pdu.Read(*this)) { if (!HandleSignallingSocket(pdu)) { PTRACE(1, "H225\tFailed to get initial Q.931 PDU, connection not started."); return FALSE; } unsigned callReference = pdu.GetQ931().GetCallReference(); PTRACE(3, "H225\tIncoming call, first PDU: callReference=" << callReference); // Get a new (or old) connection from the endpoint H323Connection * connection = endpoint.OnIncomingConnection(this, pdu); if (connection == NULL) { PTRACE(1, "H225\tEndpoint could not create connection, " "sending release complete PDU: callRef=" << callReference); H323SignalPDU releaseComplete; Q931 &q931PDU = releaseComplete.GetQ931(); q931PDU.BuildReleaseComplete(callReference, TRUE); releaseComplete.m_h323_uu_pdu.m_h323_message_body.SetTag(H225_H323_UU_PDU_h323_message_body::e_releaseComplete); H225_ReleaseComplete_UUIE &release = releaseComplete.m_h323_uu_pdu.m_h323_message_body; release.m_protocolIdentifier.SetValue(psprintf("0.0.8.2250.0.%u", H225_PROTOCOL_VERSION)); H225_Setup_UUIE &setup = pdu.m_h323_uu_pdu.m_h323_message_body; if (setup.HasOptionalField(H225_Setup_UUIE::e_callIdentifier)) { release.IncludeOptionalField(H225_Setup_UUIE::e_callIdentifier); release.m_callIdentifier = setup.m_callIdentifier; } // Set the cause value q931PDU.SetCause(Q931::TemporaryFailure); // Send the PDU releaseComplete.Write(*this); return FALSE; } connection->Lock(); // handle the first PDU if (connection->HandleSignalPDU(pdu)) { #ifdef H323_SIGNAL_AGGREGATE // if the endpoint is using signalling aggregation, we need to add this connection // to the signalling aggregator. if (connection != NULL && endpoint.GetSignallingAggregator() != NULL) { connection->AggregateSignalChannel(this); connection->Unlock(); return TRUE; } #endif // If aggregation is not being used, then this thread is attached to the transport, // which is in turn attached to the connection so everything from gets cleaned up by the // H323 cleaner thread from now on. So thread must not auto delete and the "transport" // variable is not deleted either PAssert(PIsDescendant(thread, H225TransportThread), PInvalidCast); ((H225TransportThread *)thread)->ConnectionEstablished(); AttachThread(thread); thread->SetNoAutoDelete(); connection->Unlock(); // All subsequent PDU's should wait forever SetReadTimeout(PMaxTimeInterval); connection->HandleSignallingChannel(); } else { connection->ClearCall(H323Connection::EndedByTransportFail); connection->Unlock(); PTRACE(1, "H225\tSignal channel stopped on first PDU."); } return TRUE; } void H323Transport::StartControlChannel(H323Connection & connection) { new H245TransportThread(endpoint, connection, *this); } void H323Transport::AttachThread(PThread * thrd) { PAssert(thread == NULL, PLogicError); thread = thrd; } void H323Transport::CleanUpOnTermination() { Close(); if (thread != NULL) { PTRACE(3, "H323\tH323Transport::CleanUpOnTermination for " << thread->GetThreadName()); PAssert(thread->WaitForTermination(10000), "Transport thread did not terminate"); delete thread; thread = NULL; } } PBoolean H323Transport::IsCompatibleTransport(const H225_TransportAddress & /*pdu*/) const { PAssertAlways(PUnimplementedFunction); return FALSE; } void H323Transport::SetUpTransportPDU(H225_TransportAddress & /*pdu*/, PBoolean /*localTsap*/, H323Connection * /*connection*/ ) const { PAssertAlways(PUnimplementedFunction); } void H323Transport::SetUpTransportPDU(H245_TransportAddress & /*pdu*/, unsigned /*port*/) const { PAssertAlways(PUnimplementedFunction); } void H323Transport::SetPromiscuous(PromisciousModes /*promiscuous*/) { } H323TransportAddress H323Transport::GetLastReceivedAddress() const { return GetRemoteAddress(); } H323Transport * H323Transport::CreateControlChannel(H323Connection & /*connection*/) { PAssertAlways(PUnimplementedFunction); return NULL; } PBoolean H323Transport::AcceptControlChannel(H323Connection & /*connection*/) { PAssertAlways(PUnimplementedFunction); return FALSE; } PBoolean H323Transport::DiscoverGatekeeper(H323Gatekeeper & /*gk*/, H323RasPDU & /*pdu*/, const H323TransportAddress & /*address*/) { PAssertAlways(PUnimplementedFunction); return FALSE; } ///////////////////////////////////////////////////////////////////////////// H323ListenerTCP::H323ListenerTCP(H323EndPoint & end, PIPSocket::Address binding, WORD port, PBoolean exclusive) : H323Listener(end), listener((port == 0) ? (WORD)H323EndPoint::DefaultTcpPort : port), localAddress(binding) { exclusiveListener = exclusive; } H323ListenerTCP::~H323ListenerTCP() { Close(); } PBoolean H323ListenerTCP::Open() { if (listener.Listen(localAddress, 100, 0, exclusiveListener ? PSocket::AddressIsExclusive : PSocket::CanReuseAddress)) return TRUE; PTRACE(1, "TCP\tListen on " << localAddress << ':' << listener.GetPort() << " failed: " << listener.GetErrorText()); return FALSE; } PBoolean H323ListenerTCP::Close() { PBoolean ok = listener.Close(); PAssert(PThread::Current() != this, PLogicError); if (!IsTerminated() && !IsSuspended()) PAssert(WaitForTermination(10000), "Listener thread did not terminate"); return ok; } H323Transport * H323ListenerTCP::Accept(const PTimeInterval & timeout) { if (!listener.IsOpen()) return NULL; listener.SetReadTimeout(timeout); // Wait for remote connect PTRACE(4, "TCP\tWaiting on socket accept on " << GetTransportAddress()); PTCPSocket * socket = new PTCPSocket; if (socket->Accept(listener)) { unsigned m_version = GetTransportAddress().GetIpVersion(); H323TransportTCP * transport = new H323TransportTCP(endpoint, PIPSocket::Address::GetAny(m_version)); if (transport->Open(socket)) return transport; PTRACE(1, "TCP\tFailed to open transport, connection not started."); delete transport; return NULL; } if (socket->GetErrorCode() != PChannel::Interrupted) { PTRACE(1, "TCP\tAccept error:" << socket->GetErrorText()); listener.Close(); } delete socket; return NULL; } H323TransportAddress H323ListenerTCP::GetTransportAddress() const { return H323TransportAddress(localAddress, listener.GetPort()); } PBoolean H323ListenerTCP::SetUpTransportPDU(H245_TransportAddress & pdu, const H323Transport & associatedTransport) { if (!localAddress.IsAny()) return GetTransportAddress().SetPDU(pdu); PIPSocket::Address addressOfExistingInterface; if (!associatedTransport.GetLocalAddress().GetIpAddress(addressOfExistingInterface)) return FALSE; H323TransportAddress transAddr(addressOfExistingInterface, listener.GetPort()); transAddr.SetPDU(pdu); return TRUE; } void H323ListenerTCP::Main() { PTRACE(2, "H323\tAwaiting TCP connections on port " << listener.GetPort()); while (listener.IsOpen()) { H323Transport * transport = Accept(PMaxTimeInterval); if (transport != NULL) new H225TransportThread(endpoint, transport); } } ///////////////////////////////////////////////////////////////////////////// H323TransportIP::H323TransportIP(H323EndPoint & end, PIPSocket::Address binding, WORD remPort) : H323Transport(end), localAddress(binding), remoteAddress(0) { localPort = 0; remotePort = remPort; } H323TransportAddress H323TransportIP::GetLocalAddress() const { return H323TransportAddress(localAddress, localPort); } H323TransportAddress H323TransportIP::GetRemoteAddress() const { return H323TransportAddress(remoteAddress, remotePort); } PBoolean H323TransportIP::IsCompatibleTransport(const H225_TransportAddress & pdu) const { return pdu.GetTag() == H225_TransportAddress::e_ipAddress #if P_HAS_IPV6 || pdu.GetTag() == H225_TransportAddress::e_ip6Address #endif ; } void H323TransportIP::SetUpTransportPDU(H225_TransportAddress & pdu, PBoolean localTsap,H323Connection * connection) const { H323TransportAddress transAddr; if (!localTsap) transAddr = H323TransportAddress(remoteAddress, remotePort); else { H323TransportAddress tAddr = GetLocalAddress(); PIPSocket::Address ipAddr; tAddr.GetIpAddress(ipAddr); endpoint.InternalTranslateTCPAddress(ipAddr, remoteAddress,connection); WORD tPort = localPort; endpoint.TranslateTCPPort(tPort,remoteAddress); transAddr = H323TransportAddress(ipAddr, tPort); } transAddr.SetPDU(pdu); } void H323TransportIP::SetUpTransportPDU(H245_TransportAddress & pdu, unsigned port) const { PIPSocket::Address ipAddr = localAddress; endpoint.InternalTranslateTCPAddress(ipAddr, remoteAddress); switch (port) { case UseLocalTSAP : port = localPort; break; case UseRemoteTSAP : port = remotePort; break; } H323TransportAddress transAddr(ipAddr, (WORD)port); transAddr.SetPDU(pdu); } ///////////////////////////////////////////////////////////////////////////// H323TransportTCP::H323TransportTCP(H323EndPoint & end, PIPSocket::Address binding, PBoolean listen) : H323TransportIP(end, binding, H323EndPoint::DefaultTcpPort) { h245listener = NULL; // construct listener socket if required if (listen) { h245listener = new PTCPSocket; localPort = end.GetNextTCPPort(); WORD firstPort = localPort; while (!h245listener->Listen(binding, 5, localPort)) { localPort = end.GetNextTCPPort(); if (localPort == firstPort) break; } if (h245listener->IsOpen()) { localPort = h245listener->GetPort(); PTRACE(3, "H225\tTCP Listen for H245 on " << binding << ':' << localPort); } else { PTRACE(1, "H225\tTCP Listen for H245 failed: " << h245listener->GetErrorText()); delete h245listener; h245listener = NULL; } } } H323TransportTCP::~H323TransportTCP() { delete h245listener; // Delete any H245 listener that may be present } PBoolean H323TransportTCP::OnOpen() { PIPSocket * socket = (PIPSocket *)GetReadChannel(); // Get name of the remote computer for information purposes if (!socket->GetPeerAddress(remoteAddress, remotePort)) { PTRACE(1, "H323TCP\tGetPeerAddress() failed: " << socket->GetErrorText()); return FALSE; } // get local address of incoming socket to ensure that multi-homed machines // use a NIC address that is guaranteed to be addressable to destination if (!socket->GetLocalAddress(localAddress, localPort)) { PTRACE(1, "H323TCP\tGetLocalAddress() failed: " << socket->GetErrorText()); return FALSE; } if (!socket->SetOption(TCP_NODELAY, 1, IPPROTO_TCP)) { PTRACE(1, "H323TCP\tSetOption(TCP_NODELAY) failed: " << socket->GetErrorText()); } //if (!socket->SetOption(IP_TOS, endpoint.GetTcpIpTypeofService(), IPPROTO_IP)) { // PTRACE(1, "H323TCP\tSetOption(IP_TOS) failed: " << socket->GetErrorText()); //} #ifndef P_VXWORKS // VxWorks has alternative behaviour, so skip it // make sure do not lose outgoing packets on close const linger ling = { 1, 3 }; if (!socket->SetOption(SO_LINGER, &ling, sizeof(ling))) { PTRACE(1, "H323TCP\tSetOption(SO_LINGER) failed: " << socket->GetErrorText()); return FALSE; } #endif //P_VXWORKS PTRACE(2, "H323TCP\tStarted connection: " " host=" << remoteAddress << ':' << remotePort << "," " if=" << localAddress << ':' << localPort << "," " handle=" << socket->GetHandle()); return TRUE; } PBoolean H323TransportTCP::Close() { // Close listening socket to break waiting accept if (IsListening()) h245listener->Close(); return H323Transport::Close(); } PBoolean H323TransportTCP::SetRemoteAddress(const H323TransportAddress & address) { return address.GetIpAndPort(remoteAddress, remotePort, "tcp"); } PBoolean H323TransportTCP::ExtractPDU(const PBYTEArray & pdu, PINDEX & pduLen) { // // TPKT format is : // byte 0 = type identifier - always 0x03 // byte 1 = ignored // byte 2 = msb of data length // byte 3 = lsb of data length // byte xx = data of length // // this gives minimum length of 4 bytes // ensure length is at least one byte if (pduLen < 1) { pduLen = 0; return TRUE; } // only accept TPKT of type 3 if (pdu[0] != 3) return SetErrorValues(Miscellaneous, 0x41000000); // check for minimum header length if (pduLen < 4) { pduLen = 0; return TRUE; } // see if complete PDU received yet PINDEX dataLen = (pdu[2] << 8)|pdu[3]; // dwarf PDUs are errors if (dataLen < 4) { PTRACE(1, "H323TCP\tDwarf PDU received (length " << dataLen << ")"); return FALSE; } // wait for data to arrive if (pduLen < dataLen) { pduLen = 0; return TRUE; } // set the length of the complete PDU pduLen = dataLen; return TRUE; } PBoolean H323TransportTCP::ReadPDU(PBYTEArray & pdu) { // Make sure is a RFC1006 TPKT switch (ReadChar()) { case -1 : return FALSE; case 3 : // Only support version 3 break; default : // Unknown version number return SetErrorValues(Miscellaneous, 0x41000000); } // Save timeout PTimeInterval oldTimeout = GetReadTimeout(); // Should get all of PDU in 5 seconds or something is seriously wrong, SetReadTimeout(5000); // Get TPKT length BYTE header[3]; PBoolean ok = ReadBlock(header, sizeof(header)); if (ok) { PINDEX packetLength = ((header[1] << 8)|header[2]); if (packetLength < 4) { PTRACE(1, "H323TCP\tDwarf PDU received (length " << packetLength << ")"); ok = FALSE; } else { packetLength -= 4; ok = ReadBlock(pdu.GetPointer(packetLength), packetLength); } } SetReadTimeout(oldTimeout); return ok; } PBoolean H323TransportTCP::WritePDU(const PBYTEArray & pdu) { // We copy the data into a new buffer so we can do a single write call. This // is necessary as we have disabled the Nagle TCP delay algorithm to improve // network performance. int packetLength = pdu.GetSize() + 4; // Send RFC1006 TPKT length PBYTEArray tpkt(packetLength); tpkt[0] = 3; tpkt[1] = 0; tpkt[2] = (BYTE)(packetLength >> 8); tpkt[3] = (BYTE)packetLength; memcpy(tpkt.GetPointer()+4, (const BYTE *)pdu, pdu.GetSize()); return Write((const BYTE *)tpkt, packetLength); } PBoolean H323TransportTCP::Connect() { if (IsListening()) return TRUE; PTCPSocket * socket = new PTCPSocket(remotePort); Open(socket); channelPointerMutex.StartRead(); socket->SetReadTimeout(endpoint.GetSignallingChannelConnectTimeout()); localPort = endpoint.GetNextTCPPort(); WORD firstPort = localPort; for (;;) { PTRACE(4, "H323TCP\tConnecting to " << remoteAddress << ':' << remotePort << " (local port=" << localPort << ')'); if (socket->Connect(localAddress, localPort, remoteAddress)) break; int errnum = socket->GetErrorNumber(); if (localPort == 0 || (errnum != EADDRINUSE && errnum != EADDRNOTAVAIL)) { PTRACE(1, "H323TCP\tCould not connect to " << remoteAddress << ':' << remotePort << " (local port=" << localPort << ") - " << socket->GetErrorText() << '(' << errnum << ')'); channelPointerMutex.EndRead(); return SetErrorValues(socket->GetErrorCode(), errnum); } localPort = endpoint.GetNextTCPPort(); if (localPort == firstPort) { PTRACE(1, "H323TCP\tCould not bind to any port in range " << endpoint.GetTCPPortBase() << " to " << endpoint.GetTCPPortMax()); channelPointerMutex.EndRead(); return SetErrorValues(socket->GetErrorCode(), errnum); } } socket->SetReadTimeout(PMaxTimeInterval); channelPointerMutex.EndRead(); return OnOpen(); } H323Transport * H323TransportTCP::CreateControlChannel(H323Connection & connection) { H323TransportTCP * tcpTransport = new H323TransportTCP(endpoint, localAddress, TRUE); tcpTransport->SetRemoteAddress(GetRemoteAddress()); if (tcpTransport->IsListening()) // Listen() failed return tcpTransport; delete tcpTransport; connection.ClearCall(H323Connection::EndedByTransportFail); return FALSE; } PBoolean H323TransportTCP::AcceptControlChannel(H323Connection & connection) { if (IsOpen()) return TRUE; if (h245listener == NULL) { PAssertAlways(PLogicError); return FALSE; } PTRACE(3, "H245\tTCP Accept wait"); PTCPSocket * h245Socket = new PTCPSocket; h245listener->SetReadTimeout(endpoint.GetControlChannelStartTimeout()); if (h245Socket->Accept(*h245listener)) return Open(h245Socket); PTRACE(1, "H225\tAccept for H245 failed: " << h245Socket->GetErrorText()); delete h245Socket; if (h245listener->IsOpen() && connection.IsConnected() && connection.FindChannel(RTP_Session::DefaultAudioSessionID, TRUE) == NULL && connection.FindChannel(RTP_Session::DefaultAudioSessionID, FALSE) == NULL) connection.ClearCall(H323Connection::EndedByTransportFail); return FALSE; } PBoolean H323TransportTCP::IsListening() const { if (IsOpen()) return FALSE; if (h245listener == NULL) return FALSE; return h245listener->IsOpen(); } ///////////////////////////////////////////////////////////////////////////// static PBoolean ListenUDP(PUDPSocket & socket, H323EndPoint & endpoint, PIPSocket::Address binding, WORD localPort) { if (localPort > 0) { if (socket.Listen(binding, 0, localPort)) return TRUE; } else { localPort = endpoint.GetNextUDPPort(); WORD firstPort = localPort; for (;;) { if (socket.Listen(binding, 0, localPort)) return TRUE; int errnum = socket.GetErrorNumber(); if (errnum != EADDRINUSE && errnum != EADDRNOTAVAIL) break; localPort = endpoint.GetNextUDPPort(); if (localPort == firstPort) { PTRACE(1, "H323UDP\tCould not bind to any port in range " << endpoint.GetUDPPortBase() << " to " << endpoint.GetUDPPortMax()); return FALSE; } } } PTRACE(1, "H323UDP\tCould not bind to " << binding << ':' << localPort << " - " << socket.GetErrorText() << '(' << socket.GetErrorNumber() << ')'); return FALSE; } H323TransportUDP::H323TransportUDP(H323EndPoint & ep, PIPSocket::Address binding, WORD local_port, WORD remote_port) : H323TransportIP(ep, binding, remote_port) { if (remotePort == 0) remotePort = H225_RAS::DefaultRasUdpPort; // For backward compatibility promiscuousReads = AcceptFromRemoteOnly; PUDPSocket * udp = new PUDPSocket; ListenUDP(*udp, ep, binding, local_port); interfacePort = localPort = udp->GetPort(); Open(udp); PTRACE(3, "H323UDP\tBinding to interface: " << binding << ':' << localPort); #if PTLIB_VER >= 2110 canGetInterface = binding.IsAny(); #else canGetInterface = (binding.IsAny()) && udp->SetCaptureReceiveToAddress(); #endif } H323TransportUDP::~H323TransportUDP() { Close(); } PBoolean H323TransportUDP::SetRemoteAddress(const H323TransportAddress & address) { return address.GetIpAndPort(remoteAddress, remotePort, "udp"); } PBoolean H323TransportUDP::Connect() { if (remoteAddress == 0 || remotePort == 0) return FALSE; PUDPSocket * socket; #ifdef P_STUN PSTUNClient * stun = endpoint.GetSTUN(remoteAddress); if (stun != NULL) { #if PTLIB_VER >= 2110 if (stun->CreateSocket(PNatMethod::eComponent_Unknown,socket)) { #else if (stun->CreateSocket(socket)) { #endif Open(socket); socket->GetLocalAddress(localAddress, localPort); PTRACE(4, "H323UDP\tSTUN created socket: " << localAddress << ':' << localPort); } else PTRACE(4, "H323UDP\tSTUN could not create socket!"); } #endif socket = (PUDPSocket *)GetReadChannel(); socket->SetSendAddress(remoteAddress, remotePort); return TRUE; } void H323TransportUDP::SetPromiscuous(PromisciousModes promiscuous) { promiscuousReads = promiscuous; } H323TransportAddress H323TransportUDP::GetLastReceivedAddress() const { if (!lastReceivedAddress) return lastReceivedAddress; return H323Transport::GetLastReceivedAddress(); } PBoolean H323TransportUDP::ExtractPDU(const PBYTEArray & /*pdu*/, PINDEX & /*len*/) { return TRUE; } PBoolean H323TransportUDP::ReadPDU(PBYTEArray & pdu) { for (;;) { if (!Read(pdu.GetPointer(10000), 10000)) { pdu.SetSize(0); return FALSE; } pdu.SetSize(GetLastReadCount()); PUDPSocket * socket = (PUDPSocket *)GetReadChannel(); #if PTLIB_VER >= 2110 if (canGetInterface) { WORD notused; // TODO: verify that this actually does the same as the pre 2.11.x version socket->GetLastReceiveAddress(lastReceivedInterface, notused); } #else if (canGetInterface) lastReceivedInterface = socket->GetLastReceiveToAddress(); #endif PIPSocket::Address address; WORD port; socket->GetLastReceiveAddress(address, port); switch (promiscuousReads) { case AcceptFromRemoteOnly : if (remoteAddress *= address) goto accept; break; case AcceptFromAnyAutoSet : remoteAddress = address; remotePort = port; socket->SetSendAddress(remoteAddress, remotePort); goto accept; case AcceptFromLastReceivedOnly : if (!lastReceivedAddress.IsEmpty()) { PIPSocket::Address lastAddr; WORD lastPort; if (lastReceivedAddress.GetIpAndPort(lastAddr, lastPort, "udp") && (lastAddr *= address) && lastPort == port) goto accept; } break; default : //AcceptFromAny accept: lastReceivedAddress = H323TransportAddress(address, port); return TRUE; } PTRACE(1, "UDP\tReceived PDU from incorrect host: " << address << ':' << port); } } PBoolean H323TransportUDP::WritePDU(const PBYTEArray & pdu) { return Write((const BYTE *)pdu, pdu.GetSize()); } PBoolean H323TransportUDP::DiscoverGatekeeper(H323Gatekeeper & gk, H323RasPDU & request, const H323TransportAddress & address) { PINDEX i; PTRACE(3, "H225\tStarted gatekeeper discovery of \"" << address << '"'); PIPSocket::Address destAddr; #if P_HAS_IPV6 if (address.GetIpVersion() == 6) destAddr = PIPSocket::Address::GetBroadcast(6); else #endif destAddr = INADDR_BROADCAST; // Skip over the H323Transport::Close to make sure PUDPSocket is deleted. PIndirectChannel::Close(); WORD destPort = H225_RAS::DefaultRasUdpPort; if (!address) { if (!address.GetIpAndPort(destAddr, destPort, "udp")) { PTRACE(2, "RAS\tError decoding address"); return FALSE; } remoteAddress = destAddr; remotePort = destPort; } else { remoteAddress = 0; remotePort = 0; } // Remember the original info for pre-bound socket PIPSocket::Address originalLocalAddress = localAddress; WORD originalLocalPort = 0; #if P_HAS_IPV6 // Again horrible code should be able to get interface listing for a given protocol - SH PBoolean ipv6IPv4Discover = false; if (address.GetIpVersion() == 4 && PIPSocket::GetDefaultIpAddressFamily() == AF_INET6) { PIPSocket::SetDefaultIpAddressFamilyV4(); ipv6IPv4Discover = true; } #endif // Get the interfaces to try PIPSocket::InterfaceTable interfaces; PIPSocket::InterfaceTable InterfaceList; // See if prebound to interface, only use that if so if (destAddr.IsLoopback()) { PTRACE(3, "RAS\tGatekeeper discovery on loopback interface"); localAddress = destAddr; } else if (!PIPSocket::GetInterfaceTable(InterfaceList)) { PTRACE(1, "RAS\tNo interfaces on system!"); } else if (!localAddress.IsAny() && !localAddress.IsLoopback()) { PTRACE(3, "RAS\tGatekeeper discovery on pre-bound interface: " << localAddress.AsString(true) << ':' << localPort); originalLocalPort = localPort; for (i = 0; i < InterfaceList.GetSize(); i++) { if (InterfaceList[i].GetAddress() == localAddress) { PTRACE(3, "RAS\tGatekeeper local interface set: " << localAddress.AsString(true)); interfaces.Append(new PIPSocket::InterfaceEntry(InterfaceList[i].GetName(), InterfaceList[i].GetAddress(), InterfaceList[i].GetNetMask(), InterfaceList[i].GetMACAddress())); } } InterfaceList.RemoveAll(); } else { for (i = 0; i < InterfaceList.GetSize(); i++) { if (!InterfaceList[i].GetAddress().IsLoopback() && InterfaceList[i].GetAddress().GetVersion() == destAddr.GetVersion()) { interfaces.Append(new PIPSocket::InterfaceEntry(InterfaceList[i].GetName(), InterfaceList[i].GetAddress(), InterfaceList[i].GetNetMask(), InterfaceList[i].GetMACAddress())); } } InterfaceList.RemoveAll(); } #if P_HAS_IPV6 if (ipv6IPv4Discover) PIPSocket::SetDefaultIpAddressFamilyV6(); #endif if (interfaces.IsEmpty()) interfaces.Append(new PIPSocket::InterfaceEntry("", localAddress, PIPSocket::Address(0xffffffff), "")); #ifdef P_STUN PSTUNClient * stun = endpoint.GetSTUN(remoteAddress); #endif PSocketList sockets; PSocket::SelectList selection; H225_GatekeeperRequest & grq = request; for (i = 0; i < interfaces.GetSize(); i++) { localAddress = interfaces[i].GetAddress(); // don't try to use IPv4 interface to reach IPv6 gatekeeper or IPv6 interface to reach IPv4 gatekeeper if (localAddress.GetVersion() != destAddr.GetVersion()) continue; if (localAddress == 0 || (destAddr != localAddress && localAddress.IsLoopback())) continue; // Check for already have had that IP address. PINDEX j; for (j = 0; j < i; j++) { if (localAddress == interfaces[j].GetAddress()) break; } if (j < i) continue; PUDPSocket * socket; static PIPSocket::Address MulticastRasAddress(224, 0, 1, 41); if (destAddr != MulticastRasAddress) { #ifdef P_STUN // Not explicitly multicast #if PTLIB_VER >= 2110 if (stun != NULL && stun->CreateSocket(PNatMethod::eComponent_Unknown,socket)) { #else if (stun != NULL && stun->CreateSocket(socket)) { #endif socket->GetLocalAddress(localAddress, localPort); PTRACE(4, "H323UDP\tSTUN created socket: " << localAddress << ':' << localPort); } else #endif { socket = new PUDPSocket; if (!ListenUDP(*socket, endpoint, localAddress, originalLocalPort)) { delete socket; return FALSE; } localPort = socket->GetPort(); } sockets.Append(socket); if (destAddr == INADDR_BROADCAST) { if (!socket->SetOption(SO_BROADCAST, 1)) { PTRACE(2, "RAS\tError allowing broadcast: " << socket->GetErrorText()); return FALSE; } } // Adjust the PDU to reflect the interface we are writing to. PIPSocket::Address ipAddr = localAddress; endpoint.InternalTranslateTCPAddress(ipAddr, destAddr); endpoint.TranslateTCPPort(localPort, destAddr); H323TransportAddress(ipAddr, localPort).SetPDU(grq.m_rasAddress); PTRACE(3, "RAS\tGatekeeper discovery on interface: " << localAddress << ':' << localPort); socket->SetSendAddress(destAddr, destPort); writeChannel = socket; if (request.Write(*this)) selection.Append(socket); else PTRACE(2, "RAS\tError writing discovery PDU: " << socket->GetErrorText()); if (destAddr == INADDR_BROADCAST) socket->SetOption(SO_BROADCAST, 0); } #ifdef IP_ADD_MEMBERSHIP // Now do it again for Multicast if (destAddr == INADDR_BROADCAST || destAddr == MulticastRasAddress) { socket = new PUDPSocket; sockets.Append(socket); if (!ListenUDP(*socket, endpoint, localAddress, 0)) { writeChannel = NULL; return FALSE; } localPort = socket->GetPort(); struct ip_mreq mreq; mreq.imr_multiaddr = MulticastRasAddress; mreq.imr_interface = localAddress; // ip address of host if (socket->SetOption(IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq), IPPROTO_IP)) { // Adjust the PDU to reflect the interface we are writing to. SetUpTransportPDU(grq.m_rasAddress, TRUE); socket->SetOption(SO_BROADCAST, 1); socket->SetSendAddress(INADDR_BROADCAST, H225_RAS::DefaultRasMulticastPort); writeChannel = socket; if (request.Write(*this)) selection.Append(socket); else PTRACE(2, "RAS\tError writing discovery PDU: " << socket->GetErrorText()); socket->SetOption(SO_BROADCAST, 0); } else PTRACE(2, "RAS\tError allowing multicast: " << socket->GetErrorText()); } #endif writeChannel = NULL; } if (sockets.IsEmpty()) { PTRACE(1, "RAS\tNo suitable interfaces for discovery!"); return FALSE; } if (PSocket::Select(selection, endpoint.GetGatekeeperRequestTimeout()) != NoError) { PTRACE(3, "RAS\tError on discover request select"); return FALSE; } SetReadTimeout(0); for (i = 0; i < selection.GetSize(); i++) { readChannel = &selection[i]; promiscuousReads = AcceptFromAnyAutoSet; H323RasPDU response; if (!response.Read(*this)) { PTRACE(3, "RAS\tError on discover request read: " << readChannel->GetErrorText()); break; } do { if (gk.HandleTransaction(response)) { if (!gk.IsDiscoveryComplete()) { localAddress = originalLocalAddress; localPort = originalLocalPort; promiscuousReads = AcceptFromRemoteOnly; readChannel = NULL; return TRUE; } PUDPSocket * socket = (PUDPSocket *)readChannel; socket->GetLocalAddress(localAddress, localPort); readChannel = NULL; if (Open(socket) && Connect()) { sockets.DisallowDeleteObjects(); sockets.Remove(socket); sockets.AllowDeleteObjects(); promiscuousReads = AcceptFromRemoteOnly; PTRACE(2, "RAS\tGatekeeper discovered at: " << remoteAddress << ':' << remotePort << " (if=" << localAddress << ':' << localPort << ')'); return TRUE; } } } while (response.Read(*this)); } PTRACE(2, "RAS\tGatekeeper discovery failed"); localAddress = originalLocalAddress; localPort = originalLocalPort; promiscuousReads = AcceptFromRemoteOnly; readChannel = NULL; return FALSE; } H323TransportAddress H323TransportUDP::GetLocalAddress() const { if (canGetInterface && !lastReceivedInterface.IsLoopback()) return H323TransportAddress(lastReceivedInterface, interfacePort); // check for special case of local interface, which means the PDU came from the same machine H323TransportAddress taddr = H323TransportIP::GetLocalAddress(); if (!lastReceivedAddress.IsEmpty()) { PIPSocket::Address tipAddr; WORD tipPort; taddr.GetIpAndPort(tipAddr, tipPort); if (tipAddr == PIPSocket::Address(0)) { PIPSocket::Address lastRxIPAddr; lastReceivedAddress.GetIpAddress(lastRxIPAddr); if (lastRxIPAddr != PIPSocket::Address()) taddr = H323TransportAddress(lastRxIPAddr, tipPort); } } return taddr; } ///////////////////////////////////////////////////////////////////////////// #ifdef _MSC_VER #pragma warning(default : 4244) #endif h323plus/src/h235_t.cxx0000644000175000017500000001667411015524276013447 0ustar markmark// // h235_t.cxx // // Code automatically generated by asnparse. // // // SIGNED // template H235_SIGNED::H235_SIGNED(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON template void H235_SIGNED::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "toBeSigned = " << setprecision(indent) << m_toBeSigned << '\n'; strm << setw(indent+15) << "algorithmOID = " << setprecision(indent) << m_algorithmOID << '\n'; strm << setw(indent+9) << "paramS = " << setprecision(indent) << m_paramS << '\n'; strm << setw(indent+12) << "signature = " << setprecision(indent) << m_signature << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif template PObject::Comparison H235_SIGNED::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H235_SIGNED), PInvalidCast); #endif const H235_SIGNED & other = (const H235_SIGNED &)obj; Comparison result; if ((result = m_toBeSigned.Compare(other.m_toBeSigned)) != EqualTo) return result; if ((result = m_algorithmOID.Compare(other.m_algorithmOID)) != EqualTo) return result; if ((result = m_paramS.Compare(other.m_paramS)) != EqualTo) return result; if ((result = m_signature.Compare(other.m_signature)) != EqualTo) return result; return PASN_Sequence::Compare(other); } template PINDEX H235_SIGNED::GetDataLength() const { PINDEX length = 0; length += m_toBeSigned.GetObjectLength(); length += m_algorithmOID.GetObjectLength(); length += m_paramS.GetObjectLength(); length += m_signature.GetObjectLength(); return length; } template PBoolean H235_SIGNED::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_toBeSigned.Decode(strm)) return FALSE; if (!m_algorithmOID.Decode(strm)) return FALSE; if (!m_paramS.Decode(strm)) return FALSE; if (!m_signature.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } template void H235_SIGNED::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_toBeSigned.Encode(strm); m_algorithmOID.Encode(strm); m_paramS.Encode(strm); m_signature.Encode(strm); UnknownExtensionsEncode(strm); } template PObject * H235_SIGNED::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_SIGNED::Class()), PInvalidCast); #endif return new H235_SIGNED(*this); } // // ENCRYPTED // template H235_ENCRYPTED::H235_ENCRYPTED(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON template void H235_ENCRYPTED::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "algorithmOID = " << setprecision(indent) << m_algorithmOID << '\n'; strm << setw(indent+9) << "paramS = " << setprecision(indent) << m_paramS << '\n'; strm << setw(indent+16) << "encryptedData = " << setprecision(indent) << m_encryptedData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif template PObject::Comparison H235_ENCRYPTED::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H235_ENCRYPTED), PInvalidCast); #endif const H235_ENCRYPTED & other = (const H235_ENCRYPTED &)obj; Comparison result; if ((result = m_algorithmOID.Compare(other.m_algorithmOID)) != EqualTo) return result; if ((result = m_paramS.Compare(other.m_paramS)) != EqualTo) return result; if ((result = m_encryptedData.Compare(other.m_encryptedData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } template PINDEX H235_ENCRYPTED::GetDataLength() const { PINDEX length = 0; length += m_algorithmOID.GetObjectLength(); length += m_paramS.GetObjectLength(); length += m_encryptedData.GetObjectLength(); return length; } template PBoolean H235_ENCRYPTED::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_algorithmOID.Decode(strm)) return FALSE; if (!m_paramS.Decode(strm)) return FALSE; if (!m_encryptedData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } template void H235_ENCRYPTED::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_algorithmOID.Encode(strm); m_paramS.Encode(strm); m_encryptedData.Encode(strm); UnknownExtensionsEncode(strm); } template PObject * H235_ENCRYPTED::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_ENCRYPTED::Class()), PInvalidCast); #endif return new H235_ENCRYPTED(*this); } // // HASHED // template H235_HASHED::H235_HASHED(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON template void H235_HASHED::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "algorithmOID = " << setprecision(indent) << m_algorithmOID << '\n'; strm << setw(indent+9) << "paramS = " << setprecision(indent) << m_paramS << '\n'; strm << setw(indent+7) << "hash = " << setprecision(indent) << m_hash << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif template PObject::Comparison H235_HASHED::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H235_HASHED), PInvalidCast); #endif const H235_HASHED & other = (const H235_HASHED &)obj; Comparison result; if ((result = m_algorithmOID.Compare(other.m_algorithmOID)) != EqualTo) return result; if ((result = m_paramS.Compare(other.m_paramS)) != EqualTo) return result; if ((result = m_hash.Compare(other.m_hash)) != EqualTo) return result; return PASN_Sequence::Compare(other); } template PINDEX H235_HASHED::GetDataLength() const { PINDEX length = 0; length += m_algorithmOID.GetObjectLength(); length += m_paramS.GetObjectLength(); length += m_hash.GetObjectLength(); return length; } template PBoolean H235_HASHED::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_algorithmOID.Decode(strm)) return FALSE; if (!m_paramS.Decode(strm)) return FALSE; if (!m_hash.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } template void H235_HASHED::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_algorithmOID.Encode(strm); m_paramS.Encode(strm); m_hash.Encode(strm); UnknownExtensionsEncode(strm); } template PObject * H235_HASHED::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H235_HASHED::Class()), PInvalidCast); #endif return new H235_HASHED(*this); } // End of h235_t.cxx h323plus/src/h248.cxx0000644000175000017500000104241711015524316013116 0ustar markmark// // h248.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h248.h" #endif #include #include "h248.h" #define new PNEW #if ! H323_DISABLE_H248 // // SecurityParmIndex // H248_SecurityParmIndex::H248_SecurityParmIndex(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 4); } H248_SecurityParmIndex::H248_SecurityParmIndex(const char * v) { SetValue(v); } H248_SecurityParmIndex::H248_SecurityParmIndex(const PString & v) { SetValue(v); } H248_SecurityParmIndex::H248_SecurityParmIndex(const PBYTEArray & v) { SetValue(v); } H248_SecurityParmIndex & H248_SecurityParmIndex::operator=(const char * v) { SetValue(v); return *this; } H248_SecurityParmIndex & H248_SecurityParmIndex::operator=(const PString & v) { SetValue(v); return *this; } H248_SecurityParmIndex & H248_SecurityParmIndex::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H248_SecurityParmIndex::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_SecurityParmIndex::Class()), PInvalidCast); #endif return new H248_SecurityParmIndex(*this); } // // SequenceNum // H248_SequenceNum::H248_SequenceNum(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 4); } H248_SequenceNum::H248_SequenceNum(const char * v) { SetValue(v); } H248_SequenceNum::H248_SequenceNum(const PString & v) { SetValue(v); } H248_SequenceNum::H248_SequenceNum(const PBYTEArray & v) { SetValue(v); } H248_SequenceNum & H248_SequenceNum::operator=(const char * v) { SetValue(v); return *this; } H248_SequenceNum & H248_SequenceNum::operator=(const PString & v) { SetValue(v); return *this; } H248_SequenceNum & H248_SequenceNum::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H248_SequenceNum::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_SequenceNum::Class()), PInvalidCast); #endif return new H248_SequenceNum(*this); } // // AuthData // H248_AuthData::H248_AuthData(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 12, 32); } H248_AuthData::H248_AuthData(const char * v) { SetValue(v); } H248_AuthData::H248_AuthData(const PString & v) { SetValue(v); } H248_AuthData::H248_AuthData(const PBYTEArray & v) { SetValue(v); } H248_AuthData & H248_AuthData::operator=(const char * v) { SetValue(v); return *this; } H248_AuthData & H248_AuthData::operator=(const PString & v) { SetValue(v); return *this; } H248_AuthData & H248_AuthData::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H248_AuthData::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_AuthData::Class()), PInvalidCast); #endif return new H248_AuthData(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_MId[]={ {"ip4Address",0} ,{"ip6Address",1} ,{"domainName",2} ,{"deviceName",3} ,{"mtpAddress",4} }; #endif // // MId // H248_MId::H248_MId(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 5, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_MId,5 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_MId::operator H248_IP4Address &() const #else H248_MId::operator H248_IP4Address &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IP4Address), PInvalidCast); #endif return *(H248_IP4Address *)choice; } H248_MId::operator const H248_IP4Address &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IP4Address), PInvalidCast); #endif return *(H248_IP4Address *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_MId::operator H248_IP6Address &() const #else H248_MId::operator H248_IP6Address &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IP6Address), PInvalidCast); #endif return *(H248_IP6Address *)choice; } H248_MId::operator const H248_IP6Address &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IP6Address), PInvalidCast); #endif return *(H248_IP6Address *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_MId::operator H248_DomainName &() const #else H248_MId::operator H248_DomainName &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_DomainName), PInvalidCast); #endif return *(H248_DomainName *)choice; } H248_MId::operator const H248_DomainName &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_DomainName), PInvalidCast); #endif return *(H248_DomainName *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_MId::operator H248_PathName &() const #else H248_MId::operator H248_PathName &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_PathName), PInvalidCast); #endif return *(H248_PathName *)choice; } H248_MId::operator const H248_PathName &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_PathName), PInvalidCast); #endif return *(H248_PathName *)choice; } PBoolean H248_MId::CreateObject() { switch (tag) { case e_ip4Address : choice = new H248_IP4Address(); return TRUE; case e_ip6Address : choice = new H248_IP6Address(); return TRUE; case e_domainName : choice = new H248_DomainName(); return TRUE; case e_deviceName : choice = new H248_PathName(); return TRUE; case e_mtpAddress : choice = new PASN_OctetString(); choice->SetConstraints(PASN_Object::FixedConstraint, 2, 4); return TRUE; } choice = NULL; return FALSE; } PObject * H248_MId::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_MId::Class()), PInvalidCast); #endif return new H248_MId(*this); } // // DomainName // H248_DomainName::H248_DomainName(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { m_portNumber.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H248_DomainName::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "name = " << setprecision(indent) << m_name << '\n'; if (HasOptionalField(e_portNumber)) strm << setw(indent+13) << "portNumber = " << setprecision(indent) << m_portNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_DomainName::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_DomainName), PInvalidCast); #endif const H248_DomainName & other = (const H248_DomainName &)obj; Comparison result; if ((result = m_name.Compare(other.m_name)) != EqualTo) return result; if ((result = m_portNumber.Compare(other.m_portNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_DomainName::GetDataLength() const { PINDEX length = 0; length += m_name.GetObjectLength(); if (HasOptionalField(e_portNumber)) length += m_portNumber.GetObjectLength(); return length; } PBoolean H248_DomainName::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_name.Decode(strm)) return FALSE; if (HasOptionalField(e_portNumber) && !m_portNumber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_DomainName::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_name.Encode(strm); if (HasOptionalField(e_portNumber)) m_portNumber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_DomainName::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_DomainName::Class()), PInvalidCast); #endif return new H248_DomainName(*this); } // // IP4Address // H248_IP4Address::H248_IP4Address(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { m_address.SetConstraints(PASN_Object::FixedConstraint, 4); m_portNumber.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H248_IP4Address::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "address = " << setprecision(indent) << m_address << '\n'; if (HasOptionalField(e_portNumber)) strm << setw(indent+13) << "portNumber = " << setprecision(indent) << m_portNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_IP4Address::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_IP4Address), PInvalidCast); #endif const H248_IP4Address & other = (const H248_IP4Address &)obj; Comparison result; if ((result = m_address.Compare(other.m_address)) != EqualTo) return result; if ((result = m_portNumber.Compare(other.m_portNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_IP4Address::GetDataLength() const { PINDEX length = 0; length += m_address.GetObjectLength(); if (HasOptionalField(e_portNumber)) length += m_portNumber.GetObjectLength(); return length; } PBoolean H248_IP4Address::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_address.Decode(strm)) return FALSE; if (HasOptionalField(e_portNumber) && !m_portNumber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_IP4Address::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_address.Encode(strm); if (HasOptionalField(e_portNumber)) m_portNumber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_IP4Address::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_IP4Address::Class()), PInvalidCast); #endif return new H248_IP4Address(*this); } // // IP6Address // H248_IP6Address::H248_IP6Address(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { m_address.SetConstraints(PASN_Object::FixedConstraint, 16); m_portNumber.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H248_IP6Address::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "address = " << setprecision(indent) << m_address << '\n'; if (HasOptionalField(e_portNumber)) strm << setw(indent+13) << "portNumber = " << setprecision(indent) << m_portNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_IP6Address::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_IP6Address), PInvalidCast); #endif const H248_IP6Address & other = (const H248_IP6Address &)obj; Comparison result; if ((result = m_address.Compare(other.m_address)) != EqualTo) return result; if ((result = m_portNumber.Compare(other.m_portNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_IP6Address::GetDataLength() const { PINDEX length = 0; length += m_address.GetObjectLength(); if (HasOptionalField(e_portNumber)) length += m_portNumber.GetObjectLength(); return length; } PBoolean H248_IP6Address::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_address.Decode(strm)) return FALSE; if (HasOptionalField(e_portNumber) && !m_portNumber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_IP6Address::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_address.Encode(strm); if (HasOptionalField(e_portNumber)) m_portNumber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_IP6Address::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_IP6Address::Class()), PInvalidCast); #endif return new H248_IP6Address(*this); } // // PathName // H248_PathName::H248_PathName(unsigned tag, PASN_Object::TagClass tagClass) : PASN_IA5String(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 64); } H248_PathName & H248_PathName::operator=(const char * v) { SetValue(v); return *this; } H248_PathName & H248_PathName::operator=(const PString & v) { SetValue(v); return *this; } PObject * H248_PathName::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_PathName::Class()), PInvalidCast); #endif return new H248_PathName(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_Transaction[]={ {"transactionRequest",0} ,{"transactionPending",1} ,{"transactionReply",2} ,{"transactionResponseAck",3} }; #endif // // Transaction // H248_Transaction::H248_Transaction(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_Transaction,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_Transaction::operator H248_TransactionRequest &() const #else H248_Transaction::operator H248_TransactionRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_TransactionRequest), PInvalidCast); #endif return *(H248_TransactionRequest *)choice; } H248_Transaction::operator const H248_TransactionRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_TransactionRequest), PInvalidCast); #endif return *(H248_TransactionRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_Transaction::operator H248_TransactionPending &() const #else H248_Transaction::operator H248_TransactionPending &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_TransactionPending), PInvalidCast); #endif return *(H248_TransactionPending *)choice; } H248_Transaction::operator const H248_TransactionPending &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_TransactionPending), PInvalidCast); #endif return *(H248_TransactionPending *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_Transaction::operator H248_TransactionReply &() const #else H248_Transaction::operator H248_TransactionReply &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_TransactionReply), PInvalidCast); #endif return *(H248_TransactionReply *)choice; } H248_Transaction::operator const H248_TransactionReply &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_TransactionReply), PInvalidCast); #endif return *(H248_TransactionReply *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_Transaction::operator H248_TransactionResponseAck &() const #else H248_Transaction::operator H248_TransactionResponseAck &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_TransactionResponseAck), PInvalidCast); #endif return *(H248_TransactionResponseAck *)choice; } H248_Transaction::operator const H248_TransactionResponseAck &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_TransactionResponseAck), PInvalidCast); #endif return *(H248_TransactionResponseAck *)choice; } PBoolean H248_Transaction::CreateObject() { switch (tag) { case e_transactionRequest : choice = new H248_TransactionRequest(); return TRUE; case e_transactionPending : choice = new H248_TransactionPending(); return TRUE; case e_transactionReply : choice = new H248_TransactionReply(); return TRUE; case e_transactionResponseAck : choice = new H248_TransactionResponseAck(); return TRUE; } choice = NULL; return FALSE; } PObject * H248_Transaction::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_Transaction::Class()), PInvalidCast); #endif return new H248_Transaction(*this); } // // TransactionId // H248_TransactionId::H248_TransactionId(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); } H248_TransactionId & H248_TransactionId::operator=(int v) { SetValue(v); return *this; } H248_TransactionId & H248_TransactionId::operator=(unsigned v) { SetValue(v); return *this; } PObject * H248_TransactionId::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_TransactionId::Class()), PInvalidCast); #endif return new H248_TransactionId(*this); } // // TransactionPending // H248_TransactionPending::H248_TransactionPending(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_TransactionPending::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "transactionId = " << setprecision(indent) << m_transactionId << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_TransactionPending::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_TransactionPending), PInvalidCast); #endif const H248_TransactionPending & other = (const H248_TransactionPending &)obj; Comparison result; if ((result = m_transactionId.Compare(other.m_transactionId)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_TransactionPending::GetDataLength() const { PINDEX length = 0; length += m_transactionId.GetObjectLength(); return length; } PBoolean H248_TransactionPending::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_transactionId.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_TransactionPending::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_transactionId.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_TransactionPending::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_TransactionPending::Class()), PInvalidCast); #endif return new H248_TransactionPending(*this); } // // TransactionResponseAck // H248_TransactionResponseAck::H248_TransactionResponseAck(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_TransactionResponseAck::CreateObject() const { return new H248_TransactionAck; } H248_TransactionAck & H248_TransactionResponseAck::operator[](PINDEX i) const { return (H248_TransactionAck &)array[i]; } PObject * H248_TransactionResponseAck::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_TransactionResponseAck::Class()), PInvalidCast); #endif return new H248_TransactionResponseAck(*this); } // // TransactionAck // H248_TransactionAck::H248_TransactionAck(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { } #ifndef PASN_NOPRINTON void H248_TransactionAck::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "firstAck = " << setprecision(indent) << m_firstAck << '\n'; if (HasOptionalField(e_lastAck)) strm << setw(indent+10) << "lastAck = " << setprecision(indent) << m_lastAck << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_TransactionAck::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_TransactionAck), PInvalidCast); #endif const H248_TransactionAck & other = (const H248_TransactionAck &)obj; Comparison result; if ((result = m_firstAck.Compare(other.m_firstAck)) != EqualTo) return result; if ((result = m_lastAck.Compare(other.m_lastAck)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_TransactionAck::GetDataLength() const { PINDEX length = 0; length += m_firstAck.GetObjectLength(); if (HasOptionalField(e_lastAck)) length += m_lastAck.GetObjectLength(); return length; } PBoolean H248_TransactionAck::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_firstAck.Decode(strm)) return FALSE; if (HasOptionalField(e_lastAck) && !m_lastAck.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_TransactionAck::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_firstAck.Encode(strm); if (HasOptionalField(e_lastAck)) m_lastAck.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_TransactionAck::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_TransactionAck::Class()), PInvalidCast); #endif return new H248_TransactionAck(*this); } // // ErrorCode // H248_ErrorCode::H248_ErrorCode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } H248_ErrorCode & H248_ErrorCode::operator=(int v) { SetValue(v); return *this; } H248_ErrorCode & H248_ErrorCode::operator=(unsigned v) { SetValue(v); return *this; } PObject * H248_ErrorCode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ErrorCode::Class()), PInvalidCast); #endif return new H248_ErrorCode(*this); } // // ErrorText // H248_ErrorText::H248_ErrorText(unsigned tag, PASN_Object::TagClass tagClass) : PASN_IA5String(tag, tagClass) { } H248_ErrorText & H248_ErrorText::operator=(const char * v) { SetValue(v); return *this; } H248_ErrorText & H248_ErrorText::operator=(const PString & v) { SetValue(v); return *this; } PObject * H248_ErrorText::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ErrorText::Class()), PInvalidCast); #endif return new H248_ErrorText(*this); } // // ContextID // H248_ContextID::H248_ContextID(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); } H248_ContextID & H248_ContextID::operator=(int v) { SetValue(v); return *this; } H248_ContextID & H248_ContextID::operator=(unsigned v) { SetValue(v); return *this; } PObject * H248_ContextID::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ContextID::Class()), PInvalidCast); #endif return new H248_ContextID(*this); } // // ContextAttrAuditRequest // H248_ContextAttrAuditRequest::H248_ContextAttrAuditRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_ContextAttrAuditRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_topology)) strm << setw(indent+11) << "topology = " << setprecision(indent) << m_topology << '\n'; if (HasOptionalField(e_emergency)) strm << setw(indent+12) << "emergency = " << setprecision(indent) << m_emergency << '\n'; if (HasOptionalField(e_priority)) strm << setw(indent+11) << "priority = " << setprecision(indent) << m_priority << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_ContextAttrAuditRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_ContextAttrAuditRequest), PInvalidCast); #endif const H248_ContextAttrAuditRequest & other = (const H248_ContextAttrAuditRequest &)obj; Comparison result; if ((result = m_topology.Compare(other.m_topology)) != EqualTo) return result; if ((result = m_emergency.Compare(other.m_emergency)) != EqualTo) return result; if ((result = m_priority.Compare(other.m_priority)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_ContextAttrAuditRequest::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_topology)) length += m_topology.GetObjectLength(); if (HasOptionalField(e_emergency)) length += m_emergency.GetObjectLength(); if (HasOptionalField(e_priority)) length += m_priority.GetObjectLength(); return length; } PBoolean H248_ContextAttrAuditRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_topology) && !m_topology.Decode(strm)) return FALSE; if (HasOptionalField(e_emergency) && !m_emergency.Decode(strm)) return FALSE; if (HasOptionalField(e_priority) && !m_priority.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_ContextAttrAuditRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_topology)) m_topology.Encode(strm); if (HasOptionalField(e_emergency)) m_emergency.Encode(strm); if (HasOptionalField(e_priority)) m_priority.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_ContextAttrAuditRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ContextAttrAuditRequest::Class()), PInvalidCast); #endif return new H248_ContextAttrAuditRequest(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_Command[]={ {"addReq",0} ,{"moveReq",1} ,{"modReq",2} ,{"subtractReq",3} ,{"auditCapRequest",4} ,{"auditValueRequest",5} ,{"notifyReq",6} ,{"serviceChangeReq",7} }; #endif // // Command // H248_Command::H248_Command(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 8, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_Command,8 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_Command::operator H248_AmmRequest &() const #else H248_Command::operator H248_AmmRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_AmmRequest), PInvalidCast); #endif return *(H248_AmmRequest *)choice; } H248_Command::operator const H248_AmmRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_AmmRequest), PInvalidCast); #endif return *(H248_AmmRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_Command::operator H248_SubtractRequest &() const #else H248_Command::operator H248_SubtractRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_SubtractRequest), PInvalidCast); #endif return *(H248_SubtractRequest *)choice; } H248_Command::operator const H248_SubtractRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_SubtractRequest), PInvalidCast); #endif return *(H248_SubtractRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_Command::operator H248_AuditRequest &() const #else H248_Command::operator H248_AuditRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_AuditRequest), PInvalidCast); #endif return *(H248_AuditRequest *)choice; } H248_Command::operator const H248_AuditRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_AuditRequest), PInvalidCast); #endif return *(H248_AuditRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_Command::operator H248_NotifyRequest &() const #else H248_Command::operator H248_NotifyRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_NotifyRequest), PInvalidCast); #endif return *(H248_NotifyRequest *)choice; } H248_Command::operator const H248_NotifyRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_NotifyRequest), PInvalidCast); #endif return *(H248_NotifyRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_Command::operator H248_ServiceChangeRequest &() const #else H248_Command::operator H248_ServiceChangeRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ServiceChangeRequest), PInvalidCast); #endif return *(H248_ServiceChangeRequest *)choice; } H248_Command::operator const H248_ServiceChangeRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ServiceChangeRequest), PInvalidCast); #endif return *(H248_ServiceChangeRequest *)choice; } PBoolean H248_Command::CreateObject() { switch (tag) { case e_addReq : case e_moveReq : case e_modReq : choice = new H248_AmmRequest(); return TRUE; case e_subtractReq : choice = new H248_SubtractRequest(); return TRUE; case e_auditCapRequest : case e_auditValueRequest : choice = new H248_AuditRequest(); return TRUE; case e_notifyReq : choice = new H248_NotifyRequest(); return TRUE; case e_serviceChangeReq : choice = new H248_ServiceChangeRequest(); return TRUE; } choice = NULL; return FALSE; } PObject * H248_Command::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_Command::Class()), PInvalidCast); #endif return new H248_Command(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_CommandReply[]={ {"addReply",0} ,{"moveReply",1} ,{"modReply",2} ,{"subtractReply",3} ,{"auditCapReply",4} ,{"auditValueReply",5} ,{"notifyReply",6} ,{"serviceChangeReply",7} }; #endif // // CommandReply // H248_CommandReply::H248_CommandReply(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 8, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_CommandReply,8 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_CommandReply::operator H248_AmmsReply &() const #else H248_CommandReply::operator H248_AmmsReply &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_AmmsReply), PInvalidCast); #endif return *(H248_AmmsReply *)choice; } H248_CommandReply::operator const H248_AmmsReply &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_AmmsReply), PInvalidCast); #endif return *(H248_AmmsReply *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_CommandReply::operator H248_AuditReply &() const #else H248_CommandReply::operator H248_AuditReply &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_AuditReply), PInvalidCast); #endif return *(H248_AuditReply *)choice; } H248_CommandReply::operator const H248_AuditReply &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_AuditReply), PInvalidCast); #endif return *(H248_AuditReply *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_CommandReply::operator H248_NotifyReply &() const #else H248_CommandReply::operator H248_NotifyReply &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_NotifyReply), PInvalidCast); #endif return *(H248_NotifyReply *)choice; } H248_CommandReply::operator const H248_NotifyReply &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_NotifyReply), PInvalidCast); #endif return *(H248_NotifyReply *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_CommandReply::operator H248_ServiceChangeReply &() const #else H248_CommandReply::operator H248_ServiceChangeReply &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ServiceChangeReply), PInvalidCast); #endif return *(H248_ServiceChangeReply *)choice; } H248_CommandReply::operator const H248_ServiceChangeReply &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ServiceChangeReply), PInvalidCast); #endif return *(H248_ServiceChangeReply *)choice; } PBoolean H248_CommandReply::CreateObject() { switch (tag) { case e_addReply : case e_moveReply : case e_modReply : case e_subtractReply : choice = new H248_AmmsReply(); return TRUE; case e_auditCapReply : case e_auditValueReply : choice = new H248_AuditReply(); return TRUE; case e_notifyReply : choice = new H248_NotifyReply(); return TRUE; case e_serviceChangeReply : choice = new H248_ServiceChangeReply(); return TRUE; } choice = NULL; return FALSE; } PObject * H248_CommandReply::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_CommandReply::Class()), PInvalidCast); #endif return new H248_CommandReply(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_AmmDescriptor[]={ {"mediaDescriptor",0} ,{"modemDescriptor",1} ,{"muxDescriptor",2} ,{"eventsDescriptor",3} ,{"eventBufferDescriptor",4} ,{"signalsDescriptor",5} ,{"digitMapDescriptor",6} ,{"auditDescriptor",7} }; #endif // // AmmDescriptor // H248_AmmDescriptor::H248_AmmDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 8, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_AmmDescriptor,8 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AmmDescriptor::operator H248_MediaDescriptor &() const #else H248_AmmDescriptor::operator H248_MediaDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_MediaDescriptor), PInvalidCast); #endif return *(H248_MediaDescriptor *)choice; } H248_AmmDescriptor::operator const H248_MediaDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_MediaDescriptor), PInvalidCast); #endif return *(H248_MediaDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AmmDescriptor::operator H248_ModemDescriptor &() const #else H248_AmmDescriptor::operator H248_ModemDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ModemDescriptor), PInvalidCast); #endif return *(H248_ModemDescriptor *)choice; } H248_AmmDescriptor::operator const H248_ModemDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ModemDescriptor), PInvalidCast); #endif return *(H248_ModemDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AmmDescriptor::operator H248_MuxDescriptor &() const #else H248_AmmDescriptor::operator H248_MuxDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_MuxDescriptor), PInvalidCast); #endif return *(H248_MuxDescriptor *)choice; } H248_AmmDescriptor::operator const H248_MuxDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_MuxDescriptor), PInvalidCast); #endif return *(H248_MuxDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AmmDescriptor::operator H248_EventsDescriptor &() const #else H248_AmmDescriptor::operator H248_EventsDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_EventsDescriptor), PInvalidCast); #endif return *(H248_EventsDescriptor *)choice; } H248_AmmDescriptor::operator const H248_EventsDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_EventsDescriptor), PInvalidCast); #endif return *(H248_EventsDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AmmDescriptor::operator H248_EventBufferDescriptor &() const #else H248_AmmDescriptor::operator H248_EventBufferDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_EventBufferDescriptor), PInvalidCast); #endif return *(H248_EventBufferDescriptor *)choice; } H248_AmmDescriptor::operator const H248_EventBufferDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_EventBufferDescriptor), PInvalidCast); #endif return *(H248_EventBufferDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AmmDescriptor::operator H248_SignalsDescriptor &() const #else H248_AmmDescriptor::operator H248_SignalsDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_SignalsDescriptor), PInvalidCast); #endif return *(H248_SignalsDescriptor *)choice; } H248_AmmDescriptor::operator const H248_SignalsDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_SignalsDescriptor), PInvalidCast); #endif return *(H248_SignalsDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AmmDescriptor::operator H248_DigitMapDescriptor &() const #else H248_AmmDescriptor::operator H248_DigitMapDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_DigitMapDescriptor), PInvalidCast); #endif return *(H248_DigitMapDescriptor *)choice; } H248_AmmDescriptor::operator const H248_DigitMapDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_DigitMapDescriptor), PInvalidCast); #endif return *(H248_DigitMapDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AmmDescriptor::operator H248_AuditDescriptor &() const #else H248_AmmDescriptor::operator H248_AuditDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_AuditDescriptor), PInvalidCast); #endif return *(H248_AuditDescriptor *)choice; } H248_AmmDescriptor::operator const H248_AuditDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_AuditDescriptor), PInvalidCast); #endif return *(H248_AuditDescriptor *)choice; } PBoolean H248_AmmDescriptor::CreateObject() { switch (tag) { case e_mediaDescriptor : choice = new H248_MediaDescriptor(); return TRUE; case e_modemDescriptor : choice = new H248_ModemDescriptor(); return TRUE; case e_muxDescriptor : choice = new H248_MuxDescriptor(); return TRUE; case e_eventsDescriptor : choice = new H248_EventsDescriptor(); return TRUE; case e_eventBufferDescriptor : choice = new H248_EventBufferDescriptor(); return TRUE; case e_signalsDescriptor : choice = new H248_SignalsDescriptor(); return TRUE; case e_digitMapDescriptor : choice = new H248_DigitMapDescriptor(); return TRUE; case e_auditDescriptor : choice = new H248_AuditDescriptor(); return TRUE; } choice = NULL; return FALSE; } PObject * H248_AmmDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_AmmDescriptor::Class()), PInvalidCast); #endif return new H248_AmmDescriptor(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_AuditReply[]={ {"contextAuditResult",0} ,{"error",1} ,{"auditResult",2} }; #endif // // AuditReply // H248_AuditReply::H248_AuditReply(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_AuditReply,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AuditReply::operator H248_TerminationIDList &() const #else H248_AuditReply::operator H248_TerminationIDList &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_TerminationIDList), PInvalidCast); #endif return *(H248_TerminationIDList *)choice; } H248_AuditReply::operator const H248_TerminationIDList &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_TerminationIDList), PInvalidCast); #endif return *(H248_TerminationIDList *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AuditReply::operator H248_ErrorDescriptor &() const #else H248_AuditReply::operator H248_ErrorDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ErrorDescriptor), PInvalidCast); #endif return *(H248_ErrorDescriptor *)choice; } H248_AuditReply::operator const H248_ErrorDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ErrorDescriptor), PInvalidCast); #endif return *(H248_ErrorDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AuditReply::operator H248_AuditResult &() const #else H248_AuditReply::operator H248_AuditResult &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_AuditResult), PInvalidCast); #endif return *(H248_AuditResult *)choice; } H248_AuditReply::operator const H248_AuditResult &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_AuditResult), PInvalidCast); #endif return *(H248_AuditResult *)choice; } PBoolean H248_AuditReply::CreateObject() { switch (tag) { case e_contextAuditResult : choice = new H248_TerminationIDList(); return TRUE; case e_error : choice = new H248_ErrorDescriptor(); return TRUE; case e_auditResult : choice = new H248_AuditResult(); return TRUE; } choice = NULL; return FALSE; } PObject * H248_AuditReply::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_AuditReply::Class()), PInvalidCast); #endif return new H248_AuditReply(*this); } // // TerminationAudit // H248_TerminationAudit::H248_TerminationAudit(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_TerminationAudit::CreateObject() const { return new H248_AuditReturnParameter; } H248_AuditReturnParameter & H248_TerminationAudit::operator[](PINDEX i) const { return (H248_AuditReturnParameter &)array[i]; } PObject * H248_TerminationAudit::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_TerminationAudit::Class()), PInvalidCast); #endif return new H248_TerminationAudit(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_AuditReturnParameter[]={ {"errorDescriptor",0} ,{"mediaDescriptor",1} ,{"modemDescriptor",2} ,{"muxDescriptor",3} ,{"eventsDescriptor",4} ,{"eventBufferDescriptor",5} ,{"signalsDescriptor",6} ,{"digitMapDescriptor",7} ,{"observedEventsDescriptor",8} ,{"statisticsDescriptor",9} ,{"packagesDescriptor",10} ,{"emptyDescriptors",11} }; #endif // // AuditReturnParameter // H248_AuditReturnParameter::H248_AuditReturnParameter(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 12, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_AuditReturnParameter,12 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AuditReturnParameter::operator H248_ErrorDescriptor &() const #else H248_AuditReturnParameter::operator H248_ErrorDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ErrorDescriptor), PInvalidCast); #endif return *(H248_ErrorDescriptor *)choice; } H248_AuditReturnParameter::operator const H248_ErrorDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ErrorDescriptor), PInvalidCast); #endif return *(H248_ErrorDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AuditReturnParameter::operator H248_MediaDescriptor &() const #else H248_AuditReturnParameter::operator H248_MediaDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_MediaDescriptor), PInvalidCast); #endif return *(H248_MediaDescriptor *)choice; } H248_AuditReturnParameter::operator const H248_MediaDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_MediaDescriptor), PInvalidCast); #endif return *(H248_MediaDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AuditReturnParameter::operator H248_ModemDescriptor &() const #else H248_AuditReturnParameter::operator H248_ModemDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ModemDescriptor), PInvalidCast); #endif return *(H248_ModemDescriptor *)choice; } H248_AuditReturnParameter::operator const H248_ModemDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ModemDescriptor), PInvalidCast); #endif return *(H248_ModemDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AuditReturnParameter::operator H248_MuxDescriptor &() const #else H248_AuditReturnParameter::operator H248_MuxDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_MuxDescriptor), PInvalidCast); #endif return *(H248_MuxDescriptor *)choice; } H248_AuditReturnParameter::operator const H248_MuxDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_MuxDescriptor), PInvalidCast); #endif return *(H248_MuxDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AuditReturnParameter::operator H248_EventsDescriptor &() const #else H248_AuditReturnParameter::operator H248_EventsDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_EventsDescriptor), PInvalidCast); #endif return *(H248_EventsDescriptor *)choice; } H248_AuditReturnParameter::operator const H248_EventsDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_EventsDescriptor), PInvalidCast); #endif return *(H248_EventsDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AuditReturnParameter::operator H248_EventBufferDescriptor &() const #else H248_AuditReturnParameter::operator H248_EventBufferDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_EventBufferDescriptor), PInvalidCast); #endif return *(H248_EventBufferDescriptor *)choice; } H248_AuditReturnParameter::operator const H248_EventBufferDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_EventBufferDescriptor), PInvalidCast); #endif return *(H248_EventBufferDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AuditReturnParameter::operator H248_SignalsDescriptor &() const #else H248_AuditReturnParameter::operator H248_SignalsDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_SignalsDescriptor), PInvalidCast); #endif return *(H248_SignalsDescriptor *)choice; } H248_AuditReturnParameter::operator const H248_SignalsDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_SignalsDescriptor), PInvalidCast); #endif return *(H248_SignalsDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AuditReturnParameter::operator H248_DigitMapDescriptor &() const #else H248_AuditReturnParameter::operator H248_DigitMapDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_DigitMapDescriptor), PInvalidCast); #endif return *(H248_DigitMapDescriptor *)choice; } H248_AuditReturnParameter::operator const H248_DigitMapDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_DigitMapDescriptor), PInvalidCast); #endif return *(H248_DigitMapDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AuditReturnParameter::operator H248_ObservedEventsDescriptor &() const #else H248_AuditReturnParameter::operator H248_ObservedEventsDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ObservedEventsDescriptor), PInvalidCast); #endif return *(H248_ObservedEventsDescriptor *)choice; } H248_AuditReturnParameter::operator const H248_ObservedEventsDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ObservedEventsDescriptor), PInvalidCast); #endif return *(H248_ObservedEventsDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AuditReturnParameter::operator H248_StatisticsDescriptor &() const #else H248_AuditReturnParameter::operator H248_StatisticsDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_StatisticsDescriptor), PInvalidCast); #endif return *(H248_StatisticsDescriptor *)choice; } H248_AuditReturnParameter::operator const H248_StatisticsDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_StatisticsDescriptor), PInvalidCast); #endif return *(H248_StatisticsDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AuditReturnParameter::operator H248_PackagesDescriptor &() const #else H248_AuditReturnParameter::operator H248_PackagesDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_PackagesDescriptor), PInvalidCast); #endif return *(H248_PackagesDescriptor *)choice; } H248_AuditReturnParameter::operator const H248_PackagesDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_PackagesDescriptor), PInvalidCast); #endif return *(H248_PackagesDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_AuditReturnParameter::operator H248_AuditDescriptor &() const #else H248_AuditReturnParameter::operator H248_AuditDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_AuditDescriptor), PInvalidCast); #endif return *(H248_AuditDescriptor *)choice; } H248_AuditReturnParameter::operator const H248_AuditDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_AuditDescriptor), PInvalidCast); #endif return *(H248_AuditDescriptor *)choice; } PBoolean H248_AuditReturnParameter::CreateObject() { switch (tag) { case e_errorDescriptor : choice = new H248_ErrorDescriptor(); return TRUE; case e_mediaDescriptor : choice = new H248_MediaDescriptor(); return TRUE; case e_modemDescriptor : choice = new H248_ModemDescriptor(); return TRUE; case e_muxDescriptor : choice = new H248_MuxDescriptor(); return TRUE; case e_eventsDescriptor : choice = new H248_EventsDescriptor(); return TRUE; case e_eventBufferDescriptor : choice = new H248_EventBufferDescriptor(); return TRUE; case e_signalsDescriptor : choice = new H248_SignalsDescriptor(); return TRUE; case e_digitMapDescriptor : choice = new H248_DigitMapDescriptor(); return TRUE; case e_observedEventsDescriptor : choice = new H248_ObservedEventsDescriptor(); return TRUE; case e_statisticsDescriptor : choice = new H248_StatisticsDescriptor(); return TRUE; case e_packagesDescriptor : choice = new H248_PackagesDescriptor(); return TRUE; case e_emptyDescriptors : choice = new H248_AuditDescriptor(); return TRUE; } choice = NULL; return FALSE; } PObject * H248_AuditReturnParameter::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_AuditReturnParameter::Class()), PInvalidCast); #endif return new H248_AuditReturnParameter(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_IndAuditParameter[]={ {"indaudmediaDescriptor",0} ,{"indaudeventsDescriptor",1} ,{"indaudeventBufferDescriptor",2} ,{"indaudsignalsDescriptor",3} ,{"indauddigitMapDescriptor",4} ,{"indaudstatisticsDescriptor",5} ,{"indaudpackagesDescriptor",6} }; #endif // // IndAuditParameter // H248_IndAuditParameter::H248_IndAuditParameter(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 7, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_IndAuditParameter,7 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_IndAuditParameter::operator H248_IndAudMediaDescriptor &() const #else H248_IndAuditParameter::operator H248_IndAudMediaDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IndAudMediaDescriptor), PInvalidCast); #endif return *(H248_IndAudMediaDescriptor *)choice; } H248_IndAuditParameter::operator const H248_IndAudMediaDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IndAudMediaDescriptor), PInvalidCast); #endif return *(H248_IndAudMediaDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_IndAuditParameter::operator H248_IndAudEventsDescriptor &() const #else H248_IndAuditParameter::operator H248_IndAudEventsDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IndAudEventsDescriptor), PInvalidCast); #endif return *(H248_IndAudEventsDescriptor *)choice; } H248_IndAuditParameter::operator const H248_IndAudEventsDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IndAudEventsDescriptor), PInvalidCast); #endif return *(H248_IndAudEventsDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_IndAuditParameter::operator H248_IndAudEventBufferDescriptor &() const #else H248_IndAuditParameter::operator H248_IndAudEventBufferDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IndAudEventBufferDescriptor), PInvalidCast); #endif return *(H248_IndAudEventBufferDescriptor *)choice; } H248_IndAuditParameter::operator const H248_IndAudEventBufferDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IndAudEventBufferDescriptor), PInvalidCast); #endif return *(H248_IndAudEventBufferDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_IndAuditParameter::operator H248_IndAudSignalsDescriptor &() const #else H248_IndAuditParameter::operator H248_IndAudSignalsDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IndAudSignalsDescriptor), PInvalidCast); #endif return *(H248_IndAudSignalsDescriptor *)choice; } H248_IndAuditParameter::operator const H248_IndAudSignalsDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IndAudSignalsDescriptor), PInvalidCast); #endif return *(H248_IndAudSignalsDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_IndAuditParameter::operator H248_IndAudDigitMapDescriptor &() const #else H248_IndAuditParameter::operator H248_IndAudDigitMapDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IndAudDigitMapDescriptor), PInvalidCast); #endif return *(H248_IndAudDigitMapDescriptor *)choice; } H248_IndAuditParameter::operator const H248_IndAudDigitMapDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IndAudDigitMapDescriptor), PInvalidCast); #endif return *(H248_IndAudDigitMapDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_IndAuditParameter::operator H248_IndAudStatisticsDescriptor &() const #else H248_IndAuditParameter::operator H248_IndAudStatisticsDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IndAudStatisticsDescriptor), PInvalidCast); #endif return *(H248_IndAudStatisticsDescriptor *)choice; } H248_IndAuditParameter::operator const H248_IndAudStatisticsDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IndAudStatisticsDescriptor), PInvalidCast); #endif return *(H248_IndAudStatisticsDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_IndAuditParameter::operator H248_IndAudPackagesDescriptor &() const #else H248_IndAuditParameter::operator H248_IndAudPackagesDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IndAudPackagesDescriptor), PInvalidCast); #endif return *(H248_IndAudPackagesDescriptor *)choice; } H248_IndAuditParameter::operator const H248_IndAudPackagesDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IndAudPackagesDescriptor), PInvalidCast); #endif return *(H248_IndAudPackagesDescriptor *)choice; } PBoolean H248_IndAuditParameter::CreateObject() { switch (tag) { case e_indaudmediaDescriptor : choice = new H248_IndAudMediaDescriptor(); return TRUE; case e_indaudeventsDescriptor : choice = new H248_IndAudEventsDescriptor(); return TRUE; case e_indaudeventBufferDescriptor : choice = new H248_IndAudEventBufferDescriptor(); return TRUE; case e_indaudsignalsDescriptor : choice = new H248_IndAudSignalsDescriptor(); return TRUE; case e_indauddigitMapDescriptor : choice = new H248_IndAudDigitMapDescriptor(); return TRUE; case e_indaudstatisticsDescriptor : choice = new H248_IndAudStatisticsDescriptor(); return TRUE; case e_indaudpackagesDescriptor : choice = new H248_IndAudPackagesDescriptor(); return TRUE; } choice = NULL; return FALSE; } PObject * H248_IndAuditParameter::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_IndAuditParameter::Class()), PInvalidCast); #endif return new H248_IndAuditParameter(*this); } // // IndAudPropertyGroup // H248_IndAudPropertyGroup::H248_IndAudPropertyGroup(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_IndAudPropertyGroup::CreateObject() const { return new H248_IndAudPropertyParm; } H248_IndAudPropertyParm & H248_IndAudPropertyGroup::operator[](PINDEX i) const { return (H248_IndAudPropertyParm &)array[i]; } PObject * H248_IndAudPropertyGroup::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_IndAudPropertyGroup::Class()), PInvalidCast); #endif return new H248_IndAudPropertyGroup(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_IndAudSignalsDescriptor[]={ {"signal",0} ,{"seqSigList",1} }; #endif // // IndAudSignalsDescriptor // H248_IndAudSignalsDescriptor::H248_IndAudSignalsDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_IndAudSignalsDescriptor,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_IndAudSignalsDescriptor::operator H248_IndAudSignal &() const #else H248_IndAudSignalsDescriptor::operator H248_IndAudSignal &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IndAudSignal), PInvalidCast); #endif return *(H248_IndAudSignal *)choice; } H248_IndAudSignalsDescriptor::operator const H248_IndAudSignal &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IndAudSignal), PInvalidCast); #endif return *(H248_IndAudSignal *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_IndAudSignalsDescriptor::operator H248_IndAudSeqSigList &() const #else H248_IndAudSignalsDescriptor::operator H248_IndAudSeqSigList &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IndAudSeqSigList), PInvalidCast); #endif return *(H248_IndAudSeqSigList *)choice; } H248_IndAudSignalsDescriptor::operator const H248_IndAudSeqSigList &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IndAudSeqSigList), PInvalidCast); #endif return *(H248_IndAudSeqSigList *)choice; } PBoolean H248_IndAudSignalsDescriptor::CreateObject() { switch (tag) { case e_signal : choice = new H248_IndAudSignal(); return TRUE; case e_seqSigList : choice = new H248_IndAudSeqSigList(); return TRUE; } choice = NULL; return FALSE; } PObject * H248_IndAudSignalsDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_IndAudSignalsDescriptor::Class()), PInvalidCast); #endif return new H248_IndAudSignalsDescriptor(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_ServiceChangeResult[]={ {"errorDescriptor",0} ,{"serviceChangeResParms",1} }; #endif // // ServiceChangeResult // H248_ServiceChangeResult::H248_ServiceChangeResult(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_ServiceChangeResult,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_ServiceChangeResult::operator H248_ErrorDescriptor &() const #else H248_ServiceChangeResult::operator H248_ErrorDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ErrorDescriptor), PInvalidCast); #endif return *(H248_ErrorDescriptor *)choice; } H248_ServiceChangeResult::operator const H248_ErrorDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ErrorDescriptor), PInvalidCast); #endif return *(H248_ErrorDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_ServiceChangeResult::operator H248_ServiceChangeResParm &() const #else H248_ServiceChangeResult::operator H248_ServiceChangeResParm &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ServiceChangeResParm), PInvalidCast); #endif return *(H248_ServiceChangeResParm *)choice; } H248_ServiceChangeResult::operator const H248_ServiceChangeResParm &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ServiceChangeResParm), PInvalidCast); #endif return *(H248_ServiceChangeResParm *)choice; } PBoolean H248_ServiceChangeResult::CreateObject() { switch (tag) { case e_errorDescriptor : choice = new H248_ErrorDescriptor(); return TRUE; case e_serviceChangeResParms : choice = new H248_ServiceChangeResParm(); return TRUE; } choice = NULL; return FALSE; } PObject * H248_ServiceChangeResult::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ServiceChangeResult::Class()), PInvalidCast); #endif return new H248_ServiceChangeResult(*this); } // // WildcardField // H248_WildcardField::H248_WildcardField(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1); } H248_WildcardField::H248_WildcardField(const char * v) { SetValue(v); } H248_WildcardField::H248_WildcardField(const PString & v) { SetValue(v); } H248_WildcardField::H248_WildcardField(const PBYTEArray & v) { SetValue(v); } H248_WildcardField & H248_WildcardField::operator=(const char * v) { SetValue(v); return *this; } H248_WildcardField & H248_WildcardField::operator=(const PString & v) { SetValue(v); return *this; } H248_WildcardField & H248_WildcardField::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H248_WildcardField::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_WildcardField::Class()), PInvalidCast); #endif return new H248_WildcardField(*this); } // // TerminationIDList // H248_TerminationIDList::H248_TerminationIDList(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_TerminationIDList::CreateObject() const { return new H248_TerminationID; } H248_TerminationID & H248_TerminationIDList::operator[](PINDEX i) const { return (H248_TerminationID &)array[i]; } PObject * H248_TerminationIDList::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_TerminationIDList::Class()), PInvalidCast); #endif return new H248_TerminationIDList(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_StreamMode[]={ {"sendOnly",0} ,{"recvOnly",1} ,{"sendRecv",2} ,{"inactive",3} ,{"loopBack",4} }; #endif // // StreamMode // H248_StreamMode::H248_StreamMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_StreamMode,5 #endif ) { } H248_StreamMode & H248_StreamMode::operator=(unsigned v) { SetValue(v); return *this; } PObject * H248_StreamMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_StreamMode::Class()), PInvalidCast); #endif return new H248_StreamMode(*this); } // // Name // H248_Name::H248_Name(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 2); } H248_Name::H248_Name(const char * v) { SetValue(v); } H248_Name::H248_Name(const PString & v) { SetValue(v); } H248_Name::H248_Name(const PBYTEArray & v) { SetValue(v); } H248_Name & H248_Name::operator=(const char * v) { SetValue(v); return *this; } H248_Name & H248_Name::operator=(const PString & v) { SetValue(v); return *this; } H248_Name & H248_Name::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H248_Name::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_Name::Class()), PInvalidCast); #endif return new H248_Name(*this); } // // PkgdName // H248_PkgdName::H248_PkgdName(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 4); } H248_PkgdName::H248_PkgdName(const char * v) { SetValue(v); } H248_PkgdName::H248_PkgdName(const PString & v) { SetValue(v); } H248_PkgdName::H248_PkgdName(const PBYTEArray & v) { SetValue(v); } H248_PkgdName & H248_PkgdName::operator=(const char * v) { SetValue(v); return *this; } H248_PkgdName & H248_PkgdName::operator=(const PString & v) { SetValue(v); return *this; } H248_PkgdName & H248_PkgdName::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H248_PkgdName::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_PkgdName::Class()), PInvalidCast); #endif return new H248_PkgdName(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_Relation[]={ {"greaterThan",0} ,{"smallerThan",1} ,{"unequalTo",2} }; #endif // // Relation // H248_Relation::H248_Relation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_Relation,3 #endif ) { } H248_Relation & H248_Relation::operator=(unsigned v) { SetValue(v); return *this; } PObject * H248_Relation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_Relation::Class()), PInvalidCast); #endif return new H248_Relation(*this); } // // PropertyGroup // H248_PropertyGroup::H248_PropertyGroup(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_PropertyGroup::CreateObject() const { return new H248_PropertyParm; } H248_PropertyParm & H248_PropertyGroup::operator[](PINDEX i) const { return (H248_PropertyParm &)array[i]; } PObject * H248_PropertyGroup::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_PropertyGroup::Class()), PInvalidCast); #endif return new H248_PropertyGroup(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_EventBufferControl[]={ {"off",0} ,{"lockStep",1} }; #endif // // EventBufferControl // H248_EventBufferControl::H248_EventBufferControl(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_EventBufferControl,2 #endif ) { } H248_EventBufferControl & H248_EventBufferControl::operator=(unsigned v) { SetValue(v); return *this; } PObject * H248_EventBufferControl::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_EventBufferControl::Class()), PInvalidCast); #endif return new H248_EventBufferControl(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_ServiceState[]={ {"test",0} ,{"outOfSvc",1} ,{"inSvc",2} }; #endif // // ServiceState // H248_ServiceState::H248_ServiceState(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_ServiceState,3 #endif ) { } H248_ServiceState & H248_ServiceState::operator=(unsigned v) { SetValue(v); return *this; } PObject * H248_ServiceState::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ServiceState::Class()), PInvalidCast); #endif return new H248_ServiceState(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_MuxType[]={ {"h221",0} ,{"h223",1} ,{"h226",2} ,{"v76",3} ,{"nx64k",4} }; #endif // // MuxType // H248_MuxType::H248_MuxType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_MuxType,5 #endif ) { } H248_MuxType & H248_MuxType::operator=(unsigned v) { SetValue(v); return *this; } PObject * H248_MuxType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_MuxType::Class()), PInvalidCast); #endif return new H248_MuxType(*this); } // // StreamID // H248_StreamID::H248_StreamID(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } H248_StreamID & H248_StreamID::operator=(int v) { SetValue(v); return *this; } H248_StreamID & H248_StreamID::operator=(unsigned v) { SetValue(v); return *this; } PObject * H248_StreamID::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_StreamID::Class()), PInvalidCast); #endif return new H248_StreamID(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_EventDM[]={ {"digitMapName",0} ,{"digitMapValue",1} }; #endif // // EventDM // H248_EventDM::H248_EventDM(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_EventDM,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_EventDM::operator H248_DigitMapName &() const #else H248_EventDM::operator H248_DigitMapName &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_DigitMapName), PInvalidCast); #endif return *(H248_DigitMapName *)choice; } H248_EventDM::operator const H248_DigitMapName &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_DigitMapName), PInvalidCast); #endif return *(H248_DigitMapName *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_EventDM::operator H248_DigitMapValue &() const #else H248_EventDM::operator H248_DigitMapValue &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_DigitMapValue), PInvalidCast); #endif return *(H248_DigitMapValue *)choice; } H248_EventDM::operator const H248_DigitMapValue &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_DigitMapValue), PInvalidCast); #endif return *(H248_DigitMapValue *)choice; } PBoolean H248_EventDM::CreateObject() { switch (tag) { case e_digitMapName : choice = new H248_DigitMapName(); return TRUE; case e_digitMapValue : choice = new H248_DigitMapValue(); return TRUE; } choice = NULL; return FALSE; } PObject * H248_EventDM::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_EventDM::Class()), PInvalidCast); #endif return new H248_EventDM(*this); } // // EventBufferDescriptor // H248_EventBufferDescriptor::H248_EventBufferDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_EventBufferDescriptor::CreateObject() const { return new H248_EventSpec; } H248_EventSpec & H248_EventBufferDescriptor::operator[](PINDEX i) const { return (H248_EventSpec &)array[i]; } PObject * H248_EventBufferDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_EventBufferDescriptor::Class()), PInvalidCast); #endif return new H248_EventBufferDescriptor(*this); } // // SignalsDescriptor // H248_SignalsDescriptor::H248_SignalsDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_SignalsDescriptor::CreateObject() const { return new H248_SignalRequest; } H248_SignalRequest & H248_SignalsDescriptor::operator[](PINDEX i) const { return (H248_SignalRequest &)array[i]; } PObject * H248_SignalsDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_SignalsDescriptor::Class()), PInvalidCast); #endif return new H248_SignalsDescriptor(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_SignalRequest[]={ {"signal",0} ,{"seqSigList",1} }; #endif // // SignalRequest // H248_SignalRequest::H248_SignalRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_SignalRequest,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_SignalRequest::operator H248_Signal &() const #else H248_SignalRequest::operator H248_Signal &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_Signal), PInvalidCast); #endif return *(H248_Signal *)choice; } H248_SignalRequest::operator const H248_Signal &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_Signal), PInvalidCast); #endif return *(H248_Signal *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_SignalRequest::operator H248_SeqSigList &() const #else H248_SignalRequest::operator H248_SeqSigList &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_SeqSigList), PInvalidCast); #endif return *(H248_SeqSigList *)choice; } H248_SignalRequest::operator const H248_SeqSigList &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_SeqSigList), PInvalidCast); #endif return *(H248_SeqSigList *)choice; } PBoolean H248_SignalRequest::CreateObject() { switch (tag) { case e_signal : choice = new H248_Signal(); return TRUE; case e_seqSigList : choice = new H248_SeqSigList(); return TRUE; } choice = NULL; return FALSE; } PObject * H248_SignalRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_SignalRequest::Class()), PInvalidCast); #endif return new H248_SignalRequest(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_SignalType[]={ {"brief",0} ,{"onOff",1} ,{"timeOut",2} }; #endif // // SignalType // H248_SignalType::H248_SignalType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_SignalType,3 #endif ) { } H248_SignalType & H248_SignalType::operator=(unsigned v) { SetValue(v); return *this; } PObject * H248_SignalType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_SignalType::Class()), PInvalidCast); #endif return new H248_SignalType(*this); } // // SignalName // H248_SignalName::H248_SignalName(unsigned tag, PASN_Object::TagClass tagClass) : H248_PkgdName(tag, tagClass) { } H248_SignalName::H248_SignalName(const char * v) { SetValue(v); } H248_SignalName::H248_SignalName(const PString & v) { SetValue(v); } H248_SignalName::H248_SignalName(const PBYTEArray & v) { SetValue(v); } H248_SignalName & H248_SignalName::operator=(const char * v) { SetValue(v); return *this; } H248_SignalName & H248_SignalName::operator=(const PString & v) { SetValue(v); return *this; } H248_SignalName & H248_SignalName::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H248_SignalName::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_SignalName::Class()), PInvalidCast); #endif return new H248_SignalName(*this); } // // NotifyCompletion // H248_NotifyCompletion::H248_NotifyCompletion(unsigned tag, PASN_Object::TagClass tagClass) : PASN_BitString(tag, tagClass) { } PObject * H248_NotifyCompletion::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_NotifyCompletion::Class()), PInvalidCast); #endif return new H248_NotifyCompletion(*this); } // // RequestID // H248_RequestID::H248_RequestID(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); } H248_RequestID & H248_RequestID::operator=(int v) { SetValue(v); return *this; } H248_RequestID & H248_RequestID::operator=(unsigned v) { SetValue(v); return *this; } PObject * H248_RequestID::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_RequestID::Class()), PInvalidCast); #endif return new H248_RequestID(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_ModemType[]={ {"v18",0} ,{"v22",1} ,{"v22bis",2} ,{"v32",3} ,{"v32bis",4} ,{"v34",5} ,{"v90",6} ,{"v91",7} ,{"synchISDN",8} }; #endif // // ModemType // H248_ModemType::H248_ModemType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 8, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_ModemType,9 #endif ) { } H248_ModemType & H248_ModemType::operator=(unsigned v) { SetValue(v); return *this; } PObject * H248_ModemType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ModemType::Class()), PInvalidCast); #endif return new H248_ModemType(*this); } // // DigitMapName // H248_DigitMapName::H248_DigitMapName(unsigned tag, PASN_Object::TagClass tagClass) : H248_Name(tag, tagClass) { } H248_DigitMapName::H248_DigitMapName(const char * v) { SetValue(v); } H248_DigitMapName::H248_DigitMapName(const PString & v) { SetValue(v); } H248_DigitMapName::H248_DigitMapName(const PBYTEArray & v) { SetValue(v); } H248_DigitMapName & H248_DigitMapName::operator=(const char * v) { SetValue(v); return *this; } H248_DigitMapName & H248_DigitMapName::operator=(const PString & v) { SetValue(v); return *this; } H248_DigitMapName & H248_DigitMapName::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H248_DigitMapName::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_DigitMapName::Class()), PInvalidCast); #endif return new H248_DigitMapName(*this); } // // DigitMapValue // H248_DigitMapValue::H248_DigitMapValue(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 1) { m_startTimer.SetConstraints(PASN_Object::FixedConstraint, 0, 99); m_shortTimer.SetConstraints(PASN_Object::FixedConstraint, 0, 99); m_longTimer.SetConstraints(PASN_Object::FixedConstraint, 0, 99); m_durationTimer.SetConstraints(PASN_Object::FixedConstraint, 0, 99); } #ifndef PASN_NOPRINTON void H248_DigitMapValue::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_startTimer)) strm << setw(indent+13) << "startTimer = " << setprecision(indent) << m_startTimer << '\n'; if (HasOptionalField(e_shortTimer)) strm << setw(indent+13) << "shortTimer = " << setprecision(indent) << m_shortTimer << '\n'; if (HasOptionalField(e_longTimer)) strm << setw(indent+12) << "longTimer = " << setprecision(indent) << m_longTimer << '\n'; strm << setw(indent+15) << "digitMapBody = " << setprecision(indent) << m_digitMapBody << '\n'; if (HasOptionalField(e_durationTimer)) strm << setw(indent+16) << "durationTimer = " << setprecision(indent) << m_durationTimer << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_DigitMapValue::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_DigitMapValue), PInvalidCast); #endif const H248_DigitMapValue & other = (const H248_DigitMapValue &)obj; Comparison result; if ((result = m_startTimer.Compare(other.m_startTimer)) != EqualTo) return result; if ((result = m_shortTimer.Compare(other.m_shortTimer)) != EqualTo) return result; if ((result = m_longTimer.Compare(other.m_longTimer)) != EqualTo) return result; if ((result = m_digitMapBody.Compare(other.m_digitMapBody)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_DigitMapValue::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_startTimer)) length += m_startTimer.GetObjectLength(); if (HasOptionalField(e_shortTimer)) length += m_shortTimer.GetObjectLength(); if (HasOptionalField(e_longTimer)) length += m_longTimer.GetObjectLength(); length += m_digitMapBody.GetObjectLength(); return length; } PBoolean H248_DigitMapValue::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_startTimer) && !m_startTimer.Decode(strm)) return FALSE; if (HasOptionalField(e_shortTimer) && !m_shortTimer.Decode(strm)) return FALSE; if (HasOptionalField(e_longTimer) && !m_longTimer.Decode(strm)) return FALSE; if (!m_digitMapBody.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_durationTimer, m_durationTimer)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_DigitMapValue::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_startTimer)) m_startTimer.Encode(strm); if (HasOptionalField(e_shortTimer)) m_shortTimer.Encode(strm); if (HasOptionalField(e_longTimer)) m_longTimer.Encode(strm); m_digitMapBody.Encode(strm); KnownExtensionEncode(strm, e_durationTimer, m_durationTimer); UnknownExtensionsEncode(strm); } PObject * H248_DigitMapValue::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_DigitMapValue::Class()), PInvalidCast); #endif return new H248_DigitMapValue(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_ServiceChangeAddress[]={ {"portNumber",0} ,{"ip4Address",1} ,{"ip6Address",2} ,{"domainName",3} ,{"deviceName",4} ,{"mtpAddress",5} }; #endif // // ServiceChangeAddress // H248_ServiceChangeAddress::H248_ServiceChangeAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 6, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_ServiceChangeAddress,6 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_ServiceChangeAddress::operator H248_IP4Address &() const #else H248_ServiceChangeAddress::operator H248_IP4Address &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IP4Address), PInvalidCast); #endif return *(H248_IP4Address *)choice; } H248_ServiceChangeAddress::operator const H248_IP4Address &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IP4Address), PInvalidCast); #endif return *(H248_IP4Address *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_ServiceChangeAddress::operator H248_IP6Address &() const #else H248_ServiceChangeAddress::operator H248_IP6Address &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IP6Address), PInvalidCast); #endif return *(H248_IP6Address *)choice; } H248_ServiceChangeAddress::operator const H248_IP6Address &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IP6Address), PInvalidCast); #endif return *(H248_IP6Address *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_ServiceChangeAddress::operator H248_DomainName &() const #else H248_ServiceChangeAddress::operator H248_DomainName &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_DomainName), PInvalidCast); #endif return *(H248_DomainName *)choice; } H248_ServiceChangeAddress::operator const H248_DomainName &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_DomainName), PInvalidCast); #endif return *(H248_DomainName *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_ServiceChangeAddress::operator H248_PathName &() const #else H248_ServiceChangeAddress::operator H248_PathName &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_PathName), PInvalidCast); #endif return *(H248_PathName *)choice; } H248_ServiceChangeAddress::operator const H248_PathName &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_PathName), PInvalidCast); #endif return *(H248_PathName *)choice; } PBoolean H248_ServiceChangeAddress::CreateObject() { switch (tag) { case e_portNumber : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 65535); return TRUE; case e_ip4Address : choice = new H248_IP4Address(); return TRUE; case e_ip6Address : choice = new H248_IP6Address(); return TRUE; case e_domainName : choice = new H248_DomainName(); return TRUE; case e_deviceName : choice = new H248_PathName(); return TRUE; case e_mtpAddress : choice = new PASN_OctetString(); choice->SetConstraints(PASN_Object::FixedConstraint, 2, 4); return TRUE; } choice = NULL; return FALSE; } PObject * H248_ServiceChangeAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ServiceChangeAddress::Class()), PInvalidCast); #endif return new H248_ServiceChangeAddress(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_ServiceChangeMethod[]={ {"failover",0} ,{"forced",1} ,{"graceful",2} ,{"restart",3} ,{"disconnected",4} ,{"handOff",5} }; #endif // // ServiceChangeMethod // H248_ServiceChangeMethod::H248_ServiceChangeMethod(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 5, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_ServiceChangeMethod,6 #endif ) { } H248_ServiceChangeMethod & H248_ServiceChangeMethod::operator=(unsigned v) { SetValue(v); return *this; } PObject * H248_ServiceChangeMethod::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ServiceChangeMethod::Class()), PInvalidCast); #endif return new H248_ServiceChangeMethod(*this); } // // ServiceChangeProfile // H248_ServiceChangeProfile::H248_ServiceChangeProfile(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { m_profileName.SetConstraints(PASN_Object::FixedConstraint, 1, 67); } #ifndef PASN_NOPRINTON void H248_ServiceChangeProfile::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "profileName = " << setprecision(indent) << m_profileName << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_ServiceChangeProfile::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_ServiceChangeProfile), PInvalidCast); #endif const H248_ServiceChangeProfile & other = (const H248_ServiceChangeProfile &)obj; Comparison result; if ((result = m_profileName.Compare(other.m_profileName)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_ServiceChangeProfile::GetDataLength() const { PINDEX length = 0; length += m_profileName.GetObjectLength(); return length; } PBoolean H248_ServiceChangeProfile::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_profileName.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_ServiceChangeProfile::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_profileName.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_ServiceChangeProfile::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ServiceChangeProfile::Class()), PInvalidCast); #endif return new H248_ServiceChangeProfile(*this); } // // PackagesDescriptor // H248_PackagesDescriptor::H248_PackagesDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_PackagesDescriptor::CreateObject() const { return new H248_PackagesItem; } H248_PackagesItem & H248_PackagesDescriptor::operator[](PINDEX i) const { return (H248_PackagesItem &)array[i]; } PObject * H248_PackagesDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_PackagesDescriptor::Class()), PInvalidCast); #endif return new H248_PackagesDescriptor(*this); } // // PackagesItem // H248_PackagesItem::H248_PackagesItem(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_packageVersion.SetConstraints(PASN_Object::FixedConstraint, 0, 99); } #ifndef PASN_NOPRINTON void H248_PackagesItem::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "packageName = " << setprecision(indent) << m_packageName << '\n'; strm << setw(indent+17) << "packageVersion = " << setprecision(indent) << m_packageVersion << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_PackagesItem::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_PackagesItem), PInvalidCast); #endif const H248_PackagesItem & other = (const H248_PackagesItem &)obj; Comparison result; if ((result = m_packageName.Compare(other.m_packageName)) != EqualTo) return result; if ((result = m_packageVersion.Compare(other.m_packageVersion)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_PackagesItem::GetDataLength() const { PINDEX length = 0; length += m_packageName.GetObjectLength(); length += m_packageVersion.GetObjectLength(); return length; } PBoolean H248_PackagesItem::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_packageName.Decode(strm)) return FALSE; if (!m_packageVersion.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_PackagesItem::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_packageName.Encode(strm); m_packageVersion.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_PackagesItem::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_PackagesItem::Class()), PInvalidCast); #endif return new H248_PackagesItem(*this); } // // StatisticsDescriptor // H248_StatisticsDescriptor::H248_StatisticsDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_StatisticsDescriptor::CreateObject() const { return new H248_StatisticsParameter; } H248_StatisticsParameter & H248_StatisticsDescriptor::operator[](PINDEX i) const { return (H248_StatisticsParameter &)array[i]; } PObject * H248_StatisticsDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_StatisticsDescriptor::Class()), PInvalidCast); #endif return new H248_StatisticsDescriptor(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_NonStandardIdentifier[]={ {"object",0} ,{"h221NonStandard",1} ,{"experimental",2} }; #endif // // NonStandardIdentifier // H248_NonStandardIdentifier::H248_NonStandardIdentifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_NonStandardIdentifier,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_NonStandardIdentifier::operator H248_H221NonStandard &() const #else H248_NonStandardIdentifier::operator H248_H221NonStandard &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_H221NonStandard), PInvalidCast); #endif return *(H248_H221NonStandard *)choice; } H248_NonStandardIdentifier::operator const H248_H221NonStandard &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_H221NonStandard), PInvalidCast); #endif return *(H248_H221NonStandard *)choice; } PBoolean H248_NonStandardIdentifier::CreateObject() { switch (tag) { case e_object : choice = new PASN_ObjectId(); return TRUE; case e_h221NonStandard : choice = new H248_H221NonStandard(); return TRUE; case e_experimental : choice = new PASN_IA5String(); choice->SetConstraints(PASN_Object::FixedConstraint, 8); return TRUE; } choice = NULL; return FALSE; } PObject * H248_NonStandardIdentifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_NonStandardIdentifier::Class()), PInvalidCast); #endif return new H248_NonStandardIdentifier(*this); } // // H221NonStandard // H248_H221NonStandard::H248_H221NonStandard(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_t35CountryCode1.SetConstraints(PASN_Object::FixedConstraint, 0, 255); m_t35CountryCode2.SetConstraints(PASN_Object::FixedConstraint, 0, 255); m_t35Extension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); m_manufacturerCode.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H248_H221NonStandard::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+18) << "t35CountryCode1 = " << setprecision(indent) << m_t35CountryCode1 << '\n'; strm << setw(indent+18) << "t35CountryCode2 = " << setprecision(indent) << m_t35CountryCode2 << '\n'; strm << setw(indent+15) << "t35Extension = " << setprecision(indent) << m_t35Extension << '\n'; strm << setw(indent+19) << "manufacturerCode = " << setprecision(indent) << m_manufacturerCode << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_H221NonStandard::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_H221NonStandard), PInvalidCast); #endif const H248_H221NonStandard & other = (const H248_H221NonStandard &)obj; Comparison result; if ((result = m_t35CountryCode1.Compare(other.m_t35CountryCode1)) != EqualTo) return result; if ((result = m_t35CountryCode2.Compare(other.m_t35CountryCode2)) != EqualTo) return result; if ((result = m_t35Extension.Compare(other.m_t35Extension)) != EqualTo) return result; if ((result = m_manufacturerCode.Compare(other.m_manufacturerCode)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_H221NonStandard::GetDataLength() const { PINDEX length = 0; length += m_t35CountryCode1.GetObjectLength(); length += m_t35CountryCode2.GetObjectLength(); length += m_t35Extension.GetObjectLength(); length += m_manufacturerCode.GetObjectLength(); return length; } PBoolean H248_H221NonStandard::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_t35CountryCode1.Decode(strm)) return FALSE; if (!m_t35CountryCode2.Decode(strm)) return FALSE; if (!m_t35Extension.Decode(strm)) return FALSE; if (!m_manufacturerCode.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_H221NonStandard::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_t35CountryCode1.Encode(strm); m_t35CountryCode2.Encode(strm); m_t35Extension.Encode(strm); m_manufacturerCode.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_H221NonStandard::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_H221NonStandard::Class()), PInvalidCast); #endif return new H248_H221NonStandard(*this); } // // TimeNotation // H248_TimeNotation::H248_TimeNotation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { m_date.SetConstraints(PASN_Object::FixedConstraint, 8); m_time.SetConstraints(PASN_Object::FixedConstraint, 8); } #ifndef PASN_NOPRINTON void H248_TimeNotation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "date = " << setprecision(indent) << m_date << '\n'; strm << setw(indent+7) << "time = " << setprecision(indent) << m_time << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_TimeNotation::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_TimeNotation), PInvalidCast); #endif const H248_TimeNotation & other = (const H248_TimeNotation &)obj; Comparison result; if ((result = m_date.Compare(other.m_date)) != EqualTo) return result; if ((result = m_time.Compare(other.m_time)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_TimeNotation::GetDataLength() const { PINDEX length = 0; length += m_date.GetObjectLength(); length += m_time.GetObjectLength(); return length; } PBoolean H248_TimeNotation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_date.Decode(strm)) return FALSE; if (!m_time.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_TimeNotation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_date.Encode(strm); m_time.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_TimeNotation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_TimeNotation::Class()), PInvalidCast); #endif return new H248_TimeNotation(*this); } // // Value // H248_Value::H248_Value(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_Value::CreateObject() const { return new PASN_OctetString; } PASN_OctetString & H248_Value::operator[](PINDEX i) const { return (PASN_OctetString &)array[i]; } PObject * H248_Value::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_Value::Class()), PInvalidCast); #endif return new H248_Value(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_Message_messageBody[]={ {"messageError",0} ,{"transactions",1} }; #endif // // Message_messageBody // H248_Message_messageBody::H248_Message_messageBody(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_Message_messageBody,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_Message_messageBody::operator H248_ErrorDescriptor &() const #else H248_Message_messageBody::operator H248_ErrorDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ErrorDescriptor), PInvalidCast); #endif return *(H248_ErrorDescriptor *)choice; } H248_Message_messageBody::operator const H248_ErrorDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ErrorDescriptor), PInvalidCast); #endif return *(H248_ErrorDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_Message_messageBody::operator H248_ArrayOf_Transaction &() const #else H248_Message_messageBody::operator H248_ArrayOf_Transaction &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ArrayOf_Transaction), PInvalidCast); #endif return *(H248_ArrayOf_Transaction *)choice; } H248_Message_messageBody::operator const H248_ArrayOf_Transaction &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ArrayOf_Transaction), PInvalidCast); #endif return *(H248_ArrayOf_Transaction *)choice; } PBoolean H248_Message_messageBody::CreateObject() { switch (tag) { case e_messageError : choice = new H248_ErrorDescriptor(); return TRUE; case e_transactions : choice = new H248_ArrayOf_Transaction(); return TRUE; } choice = NULL; return FALSE; } PObject * H248_Message_messageBody::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_Message_messageBody::Class()), PInvalidCast); #endif return new H248_Message_messageBody(*this); } // // ArrayOf_ActionRequest // H248_ArrayOf_ActionRequest::H248_ArrayOf_ActionRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_ActionRequest::CreateObject() const { return new H248_ActionRequest; } H248_ActionRequest & H248_ArrayOf_ActionRequest::operator[](PINDEX i) const { return (H248_ActionRequest &)array[i]; } PObject * H248_ArrayOf_ActionRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_ActionRequest::Class()), PInvalidCast); #endif return new H248_ArrayOf_ActionRequest(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_TransactionReply_transactionResult[]={ {"transactionError",0} ,{"actionReplies",1} }; #endif // // TransactionReply_transactionResult // H248_TransactionReply_transactionResult::H248_TransactionReply_transactionResult(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_TransactionReply_transactionResult,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_TransactionReply_transactionResult::operator H248_ErrorDescriptor &() const #else H248_TransactionReply_transactionResult::operator H248_ErrorDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ErrorDescriptor), PInvalidCast); #endif return *(H248_ErrorDescriptor *)choice; } H248_TransactionReply_transactionResult::operator const H248_ErrorDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ErrorDescriptor), PInvalidCast); #endif return *(H248_ErrorDescriptor *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_TransactionReply_transactionResult::operator H248_ArrayOf_ActionReply &() const #else H248_TransactionReply_transactionResult::operator H248_ArrayOf_ActionReply &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ArrayOf_ActionReply), PInvalidCast); #endif return *(H248_ArrayOf_ActionReply *)choice; } H248_TransactionReply_transactionResult::operator const H248_ArrayOf_ActionReply &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ArrayOf_ActionReply), PInvalidCast); #endif return *(H248_ArrayOf_ActionReply *)choice; } PBoolean H248_TransactionReply_transactionResult::CreateObject() { switch (tag) { case e_transactionError : choice = new H248_ErrorDescriptor(); return TRUE; case e_actionReplies : choice = new H248_ArrayOf_ActionReply(); return TRUE; } choice = NULL; return FALSE; } PObject * H248_TransactionReply_transactionResult::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_TransactionReply_transactionResult::Class()), PInvalidCast); #endif return new H248_TransactionReply_transactionResult(*this); } // // ArrayOf_CommandRequest // H248_ArrayOf_CommandRequest::H248_ArrayOf_CommandRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_CommandRequest::CreateObject() const { return new H248_CommandRequest; } H248_CommandRequest & H248_ArrayOf_CommandRequest::operator[](PINDEX i) const { return (H248_CommandRequest &)array[i]; } PObject * H248_ArrayOf_CommandRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_CommandRequest::Class()), PInvalidCast); #endif return new H248_ArrayOf_CommandRequest(*this); } // // ArrayOf_CommandReply // H248_ArrayOf_CommandReply::H248_ArrayOf_CommandReply(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_CommandReply::CreateObject() const { return new H248_CommandReply; } H248_CommandReply & H248_ArrayOf_CommandReply::operator[](PINDEX i) const { return (H248_CommandReply &)array[i]; } PObject * H248_ArrayOf_CommandReply::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_CommandReply::Class()), PInvalidCast); #endif return new H248_ArrayOf_CommandReply(*this); } // // ArrayOf_TopologyRequest // H248_ArrayOf_TopologyRequest::H248_ArrayOf_TopologyRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_TopologyRequest::CreateObject() const { return new H248_TopologyRequest; } H248_TopologyRequest & H248_ArrayOf_TopologyRequest::operator[](PINDEX i) const { return (H248_TopologyRequest &)array[i]; } PObject * H248_ArrayOf_TopologyRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_TopologyRequest::Class()), PInvalidCast); #endif return new H248_ArrayOf_TopologyRequest(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_TopologyRequest_topologyDirection[]={ {"bothway",0} ,{"isolate",1} ,{"oneway",2} }; #endif // // TopologyRequest_topologyDirection // H248_TopologyRequest_topologyDirection::H248_TopologyRequest_topologyDirection(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_TopologyRequest_topologyDirection,3 #endif ) { } H248_TopologyRequest_topologyDirection & H248_TopologyRequest_topologyDirection::operator=(unsigned v) { SetValue(v); return *this; } PObject * H248_TopologyRequest_topologyDirection::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_TopologyRequest_topologyDirection::Class()), PInvalidCast); #endif return new H248_TopologyRequest_topologyDirection(*this); } // // ArrayOf_AmmDescriptor // H248_ArrayOf_AmmDescriptor::H248_ArrayOf_AmmDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_AmmDescriptor::CreateObject() const { return new H248_AmmDescriptor; } H248_AmmDescriptor & H248_ArrayOf_AmmDescriptor::operator[](PINDEX i) const { return (H248_AmmDescriptor &)array[i]; } PObject * H248_ArrayOf_AmmDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_AmmDescriptor::Class()), PInvalidCast); #endif return new H248_ArrayOf_AmmDescriptor(*this); } // // ArrayOf_IndAuditParameter // H248_ArrayOf_IndAuditParameter::H248_ArrayOf_IndAuditParameter(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_IndAuditParameter::CreateObject() const { return new H248_IndAuditParameter; } H248_IndAuditParameter & H248_ArrayOf_IndAuditParameter::operator[](PINDEX i) const { return (H248_IndAuditParameter &)array[i]; } PObject * H248_ArrayOf_IndAuditParameter::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_IndAuditParameter::Class()), PInvalidCast); #endif return new H248_ArrayOf_IndAuditParameter(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_IndAudMediaDescriptor_streams[]={ {"oneStream",0} ,{"multiStream",1} }; #endif // // IndAudMediaDescriptor_streams // H248_IndAudMediaDescriptor_streams::H248_IndAudMediaDescriptor_streams(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_IndAudMediaDescriptor_streams,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_IndAudMediaDescriptor_streams::operator H248_IndAudStreamParms &() const #else H248_IndAudMediaDescriptor_streams::operator H248_IndAudStreamParms &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IndAudStreamParms), PInvalidCast); #endif return *(H248_IndAudStreamParms *)choice; } H248_IndAudMediaDescriptor_streams::operator const H248_IndAudStreamParms &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_IndAudStreamParms), PInvalidCast); #endif return *(H248_IndAudStreamParms *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_IndAudMediaDescriptor_streams::operator H248_ArrayOf_IndAudStreamDescriptor &() const #else H248_IndAudMediaDescriptor_streams::operator H248_ArrayOf_IndAudStreamDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ArrayOf_IndAudStreamDescriptor), PInvalidCast); #endif return *(H248_ArrayOf_IndAudStreamDescriptor *)choice; } H248_IndAudMediaDescriptor_streams::operator const H248_ArrayOf_IndAudStreamDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ArrayOf_IndAudStreamDescriptor), PInvalidCast); #endif return *(H248_ArrayOf_IndAudStreamDescriptor *)choice; } PBoolean H248_IndAudMediaDescriptor_streams::CreateObject() { switch (tag) { case e_oneStream : choice = new H248_IndAudStreamParms(); return TRUE; case e_multiStream : choice = new H248_ArrayOf_IndAudStreamDescriptor(); return TRUE; } choice = NULL; return FALSE; } PObject * H248_IndAudMediaDescriptor_streams::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_IndAudMediaDescriptor_streams::Class()), PInvalidCast); #endif return new H248_IndAudMediaDescriptor_streams(*this); } // // ArrayOf_IndAudPropertyParm // H248_ArrayOf_IndAudPropertyParm::H248_ArrayOf_IndAudPropertyParm(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_IndAudPropertyParm::CreateObject() const { return new H248_IndAudPropertyParm; } H248_IndAudPropertyParm & H248_ArrayOf_IndAudPropertyParm::operator[](PINDEX i) const { return (H248_IndAudPropertyParm &)array[i]; } PObject * H248_ArrayOf_IndAudPropertyParm::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_IndAudPropertyParm::Class()), PInvalidCast); #endif return new H248_ArrayOf_IndAudPropertyParm(*this); } // // ArrayOf_ObservedEvent // H248_ArrayOf_ObservedEvent::H248_ArrayOf_ObservedEvent(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_ObservedEvent::CreateObject() const { return new H248_ObservedEvent; } H248_ObservedEvent & H248_ArrayOf_ObservedEvent::operator[](PINDEX i) const { return (H248_ObservedEvent &)array[i]; } PObject * H248_ArrayOf_ObservedEvent::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_ObservedEvent::Class()), PInvalidCast); #endif return new H248_ArrayOf_ObservedEvent(*this); } // // ArrayOf_EventParameter // H248_ArrayOf_EventParameter::H248_ArrayOf_EventParameter(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_EventParameter::CreateObject() const { return new H248_EventParameter; } H248_EventParameter & H248_ArrayOf_EventParameter::operator[](PINDEX i) const { return (H248_EventParameter &)array[i]; } PObject * H248_ArrayOf_EventParameter::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_EventParameter::Class()), PInvalidCast); #endif return new H248_ArrayOf_EventParameter(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_EventParameter_extraInfo[]={ {"relation",0} ,{"range",1} ,{"sublist",2} }; #endif // // EventParameter_extraInfo // H248_EventParameter_extraInfo::H248_EventParameter_extraInfo(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_EventParameter_extraInfo,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_EventParameter_extraInfo::operator H248_Relation &() const #else H248_EventParameter_extraInfo::operator H248_Relation &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_Relation), PInvalidCast); #endif return *(H248_Relation *)choice; } H248_EventParameter_extraInfo::operator const H248_Relation &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_Relation), PInvalidCast); #endif return *(H248_Relation *)choice; } PBoolean H248_EventParameter_extraInfo::CreateObject() { switch (tag) { case e_relation : choice = new H248_Relation(); return TRUE; case e_range : case e_sublist : choice = new PASN_Boolean(); return TRUE; } choice = NULL; return FALSE; } PObject * H248_EventParameter_extraInfo::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_EventParameter_extraInfo::Class()), PInvalidCast); #endif return new H248_EventParameter_extraInfo(*this); } // // ArrayOf_WildcardField // H248_ArrayOf_WildcardField::H248_ArrayOf_WildcardField(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_WildcardField::CreateObject() const { return new H248_WildcardField; } H248_WildcardField & H248_ArrayOf_WildcardField::operator[](PINDEX i) const { return (H248_WildcardField &)array[i]; } PObject * H248_ArrayOf_WildcardField::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_WildcardField::Class()), PInvalidCast); #endif return new H248_ArrayOf_WildcardField(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_MediaDescriptor_streams[]={ {"oneStream",0} ,{"multiStream",1} }; #endif // // MediaDescriptor_streams // H248_MediaDescriptor_streams::H248_MediaDescriptor_streams(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_MediaDescriptor_streams,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_MediaDescriptor_streams::operator H248_StreamParms &() const #else H248_MediaDescriptor_streams::operator H248_StreamParms &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_StreamParms), PInvalidCast); #endif return *(H248_StreamParms *)choice; } H248_MediaDescriptor_streams::operator const H248_StreamParms &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_StreamParms), PInvalidCast); #endif return *(H248_StreamParms *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_MediaDescriptor_streams::operator H248_ArrayOf_StreamDescriptor &() const #else H248_MediaDescriptor_streams::operator H248_ArrayOf_StreamDescriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ArrayOf_StreamDescriptor), PInvalidCast); #endif return *(H248_ArrayOf_StreamDescriptor *)choice; } H248_MediaDescriptor_streams::operator const H248_ArrayOf_StreamDescriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_ArrayOf_StreamDescriptor), PInvalidCast); #endif return *(H248_ArrayOf_StreamDescriptor *)choice; } PBoolean H248_MediaDescriptor_streams::CreateObject() { switch (tag) { case e_oneStream : choice = new H248_StreamParms(); return TRUE; case e_multiStream : choice = new H248_ArrayOf_StreamDescriptor(); return TRUE; } choice = NULL; return FALSE; } PObject * H248_MediaDescriptor_streams::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_MediaDescriptor_streams::Class()), PInvalidCast); #endif return new H248_MediaDescriptor_streams(*this); } // // ArrayOf_PropertyParm // H248_ArrayOf_PropertyParm::H248_ArrayOf_PropertyParm(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_PropertyParm::CreateObject() const { return new H248_PropertyParm; } H248_PropertyParm & H248_ArrayOf_PropertyParm::operator[](PINDEX i) const { return (H248_PropertyParm &)array[i]; } PObject * H248_ArrayOf_PropertyParm::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_PropertyParm::Class()), PInvalidCast); #endif return new H248_ArrayOf_PropertyParm(*this); } // // ArrayOf_PASN_OctetString // H248_ArrayOf_PASN_OctetString::H248_ArrayOf_PASN_OctetString(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_PASN_OctetString::CreateObject() const { return new PASN_OctetString; } PASN_OctetString & H248_ArrayOf_PASN_OctetString::operator[](PINDEX i) const { return (PASN_OctetString &)array[i]; } PObject * H248_ArrayOf_PASN_OctetString::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_PASN_OctetString::Class()), PInvalidCast); #endif return new H248_ArrayOf_PASN_OctetString(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_PropertyParm_extraInfo[]={ {"relation",0} ,{"range",1} ,{"sublist",2} }; #endif // // PropertyParm_extraInfo // H248_PropertyParm_extraInfo::H248_PropertyParm_extraInfo(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_PropertyParm_extraInfo,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_PropertyParm_extraInfo::operator H248_Relation &() const #else H248_PropertyParm_extraInfo::operator H248_Relation &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_Relation), PInvalidCast); #endif return *(H248_Relation *)choice; } H248_PropertyParm_extraInfo::operator const H248_Relation &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_Relation), PInvalidCast); #endif return *(H248_Relation *)choice; } PBoolean H248_PropertyParm_extraInfo::CreateObject() { switch (tag) { case e_relation : choice = new H248_Relation(); return TRUE; case e_range : case e_sublist : choice = new PASN_Boolean(); return TRUE; } choice = NULL; return FALSE; } PObject * H248_PropertyParm_extraInfo::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_PropertyParm_extraInfo::Class()), PInvalidCast); #endif return new H248_PropertyParm_extraInfo(*this); } // // ArrayOf_PropertyGroup // H248_ArrayOf_PropertyGroup::H248_ArrayOf_PropertyGroup(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_PropertyGroup::CreateObject() const { return new H248_PropertyGroup; } H248_PropertyGroup & H248_ArrayOf_PropertyGroup::operator[](PINDEX i) const { return (H248_PropertyGroup &)array[i]; } PObject * H248_ArrayOf_PropertyGroup::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_PropertyGroup::Class()), PInvalidCast); #endif return new H248_ArrayOf_PropertyGroup(*this); } // // ArrayOf_TerminationID // H248_ArrayOf_TerminationID::H248_ArrayOf_TerminationID(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_TerminationID::CreateObject() const { return new H248_TerminationID; } H248_TerminationID & H248_ArrayOf_TerminationID::operator[](PINDEX i) const { return (H248_TerminationID &)array[i]; } PObject * H248_ArrayOf_TerminationID::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_TerminationID::Class()), PInvalidCast); #endif return new H248_ArrayOf_TerminationID(*this); } // // ArrayOf_RequestedEvent // H248_ArrayOf_RequestedEvent::H248_ArrayOf_RequestedEvent(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_RequestedEvent::CreateObject() const { return new H248_RequestedEvent; } H248_RequestedEvent & H248_ArrayOf_RequestedEvent::operator[](PINDEX i) const { return (H248_RequestedEvent &)array[i]; } PObject * H248_ArrayOf_RequestedEvent::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_RequestedEvent::Class()), PInvalidCast); #endif return new H248_ArrayOf_RequestedEvent(*this); } // // ArrayOf_SecondRequestedEvent // H248_ArrayOf_SecondRequestedEvent::H248_ArrayOf_SecondRequestedEvent(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_SecondRequestedEvent::CreateObject() const { return new H248_SecondRequestedEvent; } H248_SecondRequestedEvent & H248_ArrayOf_SecondRequestedEvent::operator[](PINDEX i) const { return (H248_SecondRequestedEvent &)array[i]; } PObject * H248_ArrayOf_SecondRequestedEvent::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_SecondRequestedEvent::Class()), PInvalidCast); #endif return new H248_ArrayOf_SecondRequestedEvent(*this); } // // ArrayOf_Signal // H248_ArrayOf_Signal::H248_ArrayOf_Signal(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_Signal::CreateObject() const { return new H248_Signal; } H248_Signal & H248_ArrayOf_Signal::operator[](PINDEX i) const { return (H248_Signal &)array[i]; } PObject * H248_ArrayOf_Signal::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_Signal::Class()), PInvalidCast); #endif return new H248_ArrayOf_Signal(*this); } // // ArrayOf_SigParameter // H248_ArrayOf_SigParameter::H248_ArrayOf_SigParameter(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_SigParameter::CreateObject() const { return new H248_SigParameter; } H248_SigParameter & H248_ArrayOf_SigParameter::operator[](PINDEX i) const { return (H248_SigParameter &)array[i]; } PObject * H248_ArrayOf_SigParameter::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_SigParameter::Class()), PInvalidCast); #endif return new H248_ArrayOf_SigParameter(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H248_SigParameter_extraInfo[]={ {"relation",0} ,{"range",1} ,{"sublist",2} }; #endif // // SigParameter_extraInfo // H248_SigParameter_extraInfo::H248_SigParameter_extraInfo(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H248_SigParameter_extraInfo,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H248_SigParameter_extraInfo::operator H248_Relation &() const #else H248_SigParameter_extraInfo::operator H248_Relation &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_Relation), PInvalidCast); #endif return *(H248_Relation *)choice; } H248_SigParameter_extraInfo::operator const H248_Relation &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H248_Relation), PInvalidCast); #endif return *(H248_Relation *)choice; } PBoolean H248_SigParameter_extraInfo::CreateObject() { switch (tag) { case e_relation : choice = new H248_Relation(); return TRUE; case e_range : case e_sublist : choice = new PASN_Boolean(); return TRUE; } choice = NULL; return FALSE; } PObject * H248_SigParameter_extraInfo::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_SigParameter_extraInfo::Class()), PInvalidCast); #endif return new H248_SigParameter_extraInfo(*this); } // // ArrayOf_ModemType // H248_ArrayOf_ModemType::H248_ArrayOf_ModemType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_ModemType::CreateObject() const { return new H248_ModemType; } H248_ModemType & H248_ArrayOf_ModemType::operator[](PINDEX i) const { return (H248_ModemType &)array[i]; } PObject * H248_ArrayOf_ModemType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_ModemType::Class()), PInvalidCast); #endif return new H248_ArrayOf_ModemType(*this); } // // ArrayOf_Transaction // H248_ArrayOf_Transaction::H248_ArrayOf_Transaction(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_Transaction::CreateObject() const { return new H248_Transaction; } H248_Transaction & H248_ArrayOf_Transaction::operator[](PINDEX i) const { return (H248_Transaction &)array[i]; } PObject * H248_ArrayOf_Transaction::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_Transaction::Class()), PInvalidCast); #endif return new H248_ArrayOf_Transaction(*this); } // // ArrayOf_ActionReply // H248_ArrayOf_ActionReply::H248_ArrayOf_ActionReply(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_ActionReply::CreateObject() const { return new H248_ActionReply; } H248_ActionReply & H248_ArrayOf_ActionReply::operator[](PINDEX i) const { return (H248_ActionReply &)array[i]; } PObject * H248_ArrayOf_ActionReply::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_ActionReply::Class()), PInvalidCast); #endif return new H248_ArrayOf_ActionReply(*this); } // // ArrayOf_IndAudStreamDescriptor // H248_ArrayOf_IndAudStreamDescriptor::H248_ArrayOf_IndAudStreamDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_IndAudStreamDescriptor::CreateObject() const { return new H248_IndAudStreamDescriptor; } H248_IndAudStreamDescriptor & H248_ArrayOf_IndAudStreamDescriptor::operator[](PINDEX i) const { return (H248_IndAudStreamDescriptor &)array[i]; } PObject * H248_ArrayOf_IndAudStreamDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_IndAudStreamDescriptor::Class()), PInvalidCast); #endif return new H248_ArrayOf_IndAudStreamDescriptor(*this); } // // ArrayOf_StreamDescriptor // H248_ArrayOf_StreamDescriptor::H248_ArrayOf_StreamDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H248_ArrayOf_StreamDescriptor::CreateObject() const { return new H248_StreamDescriptor; } H248_StreamDescriptor & H248_ArrayOf_StreamDescriptor::operator[](PINDEX i) const { return (H248_StreamDescriptor &)array[i]; } PObject * H248_ArrayOf_StreamDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ArrayOf_StreamDescriptor::Class()), PInvalidCast); #endif return new H248_ArrayOf_StreamDescriptor(*this); } // // AuthenticationHeader // H248_AuthenticationHeader::H248_AuthenticationHeader(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H248_AuthenticationHeader::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "secParmIndex = " << setprecision(indent) << m_secParmIndex << '\n'; strm << setw(indent+9) << "seqNum = " << setprecision(indent) << m_seqNum << '\n'; strm << setw(indent+5) << "ad = " << setprecision(indent) << m_ad << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_AuthenticationHeader::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_AuthenticationHeader), PInvalidCast); #endif const H248_AuthenticationHeader & other = (const H248_AuthenticationHeader &)obj; Comparison result; if ((result = m_secParmIndex.Compare(other.m_secParmIndex)) != EqualTo) return result; if ((result = m_seqNum.Compare(other.m_seqNum)) != EqualTo) return result; if ((result = m_ad.Compare(other.m_ad)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_AuthenticationHeader::GetDataLength() const { PINDEX length = 0; length += m_secParmIndex.GetObjectLength(); length += m_seqNum.GetObjectLength(); length += m_ad.GetObjectLength(); return length; } PBoolean H248_AuthenticationHeader::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_secParmIndex.Decode(strm)) return FALSE; if (!m_seqNum.Decode(strm)) return FALSE; if (!m_ad.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_AuthenticationHeader::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_secParmIndex.Encode(strm); m_seqNum.Encode(strm); m_ad.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_AuthenticationHeader::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_AuthenticationHeader::Class()), PInvalidCast); #endif return new H248_AuthenticationHeader(*this); } // // Message // H248_Message::H248_Message(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_version.SetConstraints(PASN_Object::FixedConstraint, 0, 99); } #ifndef PASN_NOPRINTON void H248_Message::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "version = " << setprecision(indent) << m_version << '\n'; strm << setw(indent+6) << "mId = " << setprecision(indent) << m_mId << '\n'; strm << setw(indent+14) << "messageBody = " << setprecision(indent) << m_messageBody << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_Message::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_Message), PInvalidCast); #endif const H248_Message & other = (const H248_Message &)obj; Comparison result; if ((result = m_version.Compare(other.m_version)) != EqualTo) return result; if ((result = m_mId.Compare(other.m_mId)) != EqualTo) return result; if ((result = m_messageBody.Compare(other.m_messageBody)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_Message::GetDataLength() const { PINDEX length = 0; length += m_version.GetObjectLength(); length += m_mId.GetObjectLength(); length += m_messageBody.GetObjectLength(); return length; } PBoolean H248_Message::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_version.Decode(strm)) return FALSE; if (!m_mId.Decode(strm)) return FALSE; if (!m_messageBody.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_Message::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_version.Encode(strm); m_mId.Encode(strm); m_messageBody.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_Message::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_Message::Class()), PInvalidCast); #endif return new H248_Message(*this); } // // TransactionRequest // H248_TransactionRequest::H248_TransactionRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_TransactionRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "transactionId = " << setprecision(indent) << m_transactionId << '\n'; strm << setw(indent+10) << "actions = " << setprecision(indent) << m_actions << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_TransactionRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_TransactionRequest), PInvalidCast); #endif const H248_TransactionRequest & other = (const H248_TransactionRequest &)obj; Comparison result; if ((result = m_transactionId.Compare(other.m_transactionId)) != EqualTo) return result; if ((result = m_actions.Compare(other.m_actions)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_TransactionRequest::GetDataLength() const { PINDEX length = 0; length += m_transactionId.GetObjectLength(); length += m_actions.GetObjectLength(); return length; } PBoolean H248_TransactionRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_transactionId.Decode(strm)) return FALSE; if (!m_actions.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_TransactionRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_transactionId.Encode(strm); m_actions.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_TransactionRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_TransactionRequest::Class()), PInvalidCast); #endif return new H248_TransactionRequest(*this); } // // TransactionReply // H248_TransactionReply::H248_TransactionReply(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_TransactionReply::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "transactionId = " << setprecision(indent) << m_transactionId << '\n'; if (HasOptionalField(e_immAckRequired)) strm << setw(indent+17) << "immAckRequired = " << setprecision(indent) << m_immAckRequired << '\n'; strm << setw(indent+20) << "transactionResult = " << setprecision(indent) << m_transactionResult << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_TransactionReply::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_TransactionReply), PInvalidCast); #endif const H248_TransactionReply & other = (const H248_TransactionReply &)obj; Comparison result; if ((result = m_transactionId.Compare(other.m_transactionId)) != EqualTo) return result; if ((result = m_immAckRequired.Compare(other.m_immAckRequired)) != EqualTo) return result; if ((result = m_transactionResult.Compare(other.m_transactionResult)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_TransactionReply::GetDataLength() const { PINDEX length = 0; length += m_transactionId.GetObjectLength(); if (HasOptionalField(e_immAckRequired)) length += m_immAckRequired.GetObjectLength(); length += m_transactionResult.GetObjectLength(); return length; } PBoolean H248_TransactionReply::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_transactionId.Decode(strm)) return FALSE; if (HasOptionalField(e_immAckRequired) && !m_immAckRequired.Decode(strm)) return FALSE; if (!m_transactionResult.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_TransactionReply::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_transactionId.Encode(strm); if (HasOptionalField(e_immAckRequired)) m_immAckRequired.Encode(strm); m_transactionResult.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_TransactionReply::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_TransactionReply::Class()), PInvalidCast); #endif return new H248_TransactionReply(*this); } // // ErrorDescriptor // H248_ErrorDescriptor::H248_ErrorDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { } #ifndef PASN_NOPRINTON void H248_ErrorDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "errorCode = " << setprecision(indent) << m_errorCode << '\n'; if (HasOptionalField(e_errorText)) strm << setw(indent+12) << "errorText = " << setprecision(indent) << m_errorText << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_ErrorDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_ErrorDescriptor), PInvalidCast); #endif const H248_ErrorDescriptor & other = (const H248_ErrorDescriptor &)obj; Comparison result; if ((result = m_errorCode.Compare(other.m_errorCode)) != EqualTo) return result; if ((result = m_errorText.Compare(other.m_errorText)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_ErrorDescriptor::GetDataLength() const { PINDEX length = 0; length += m_errorCode.GetObjectLength(); if (HasOptionalField(e_errorText)) length += m_errorText.GetObjectLength(); return length; } PBoolean H248_ErrorDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_errorCode.Decode(strm)) return FALSE; if (HasOptionalField(e_errorText) && !m_errorText.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_ErrorDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_errorCode.Encode(strm); if (HasOptionalField(e_errorText)) m_errorText.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_ErrorDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ErrorDescriptor::Class()), PInvalidCast); #endif return new H248_ErrorDescriptor(*this); } // // ContextRequest // H248_ContextRequest::H248_ContextRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { m_priority.SetConstraints(PASN_Object::FixedConstraint, 0, 15); } #ifndef PASN_NOPRINTON void H248_ContextRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_priority)) strm << setw(indent+11) << "priority = " << setprecision(indent) << m_priority << '\n'; if (HasOptionalField(e_emergency)) strm << setw(indent+12) << "emergency = " << setprecision(indent) << m_emergency << '\n'; if (HasOptionalField(e_topologyReq)) strm << setw(indent+14) << "topologyReq = " << setprecision(indent) << m_topologyReq << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_ContextRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_ContextRequest), PInvalidCast); #endif const H248_ContextRequest & other = (const H248_ContextRequest &)obj; Comparison result; if ((result = m_priority.Compare(other.m_priority)) != EqualTo) return result; if ((result = m_emergency.Compare(other.m_emergency)) != EqualTo) return result; if ((result = m_topologyReq.Compare(other.m_topologyReq)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_ContextRequest::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_priority)) length += m_priority.GetObjectLength(); if (HasOptionalField(e_emergency)) length += m_emergency.GetObjectLength(); if (HasOptionalField(e_topologyReq)) length += m_topologyReq.GetObjectLength(); return length; } PBoolean H248_ContextRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_priority) && !m_priority.Decode(strm)) return FALSE; if (HasOptionalField(e_emergency) && !m_emergency.Decode(strm)) return FALSE; if (HasOptionalField(e_topologyReq) && !m_topologyReq.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_ContextRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_priority)) m_priority.Encode(strm); if (HasOptionalField(e_emergency)) m_emergency.Encode(strm); if (HasOptionalField(e_topologyReq)) m_topologyReq.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_ContextRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ContextRequest::Class()), PInvalidCast); #endif return new H248_ContextRequest(*this); } // // CommandRequest // H248_CommandRequest::H248_CommandRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_CommandRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "command = " << setprecision(indent) << m_command << '\n'; if (HasOptionalField(e_optional)) strm << setw(indent+11) << "optional = " << setprecision(indent) << m_optional << '\n'; if (HasOptionalField(e_wildcardReturn)) strm << setw(indent+17) << "wildcardReturn = " << setprecision(indent) << m_wildcardReturn << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_CommandRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_CommandRequest), PInvalidCast); #endif const H248_CommandRequest & other = (const H248_CommandRequest &)obj; Comparison result; if ((result = m_command.Compare(other.m_command)) != EqualTo) return result; if ((result = m_optional.Compare(other.m_optional)) != EqualTo) return result; if ((result = m_wildcardReturn.Compare(other.m_wildcardReturn)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_CommandRequest::GetDataLength() const { PINDEX length = 0; length += m_command.GetObjectLength(); if (HasOptionalField(e_optional)) length += m_optional.GetObjectLength(); if (HasOptionalField(e_wildcardReturn)) length += m_wildcardReturn.GetObjectLength(); return length; } PBoolean H248_CommandRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_command.Decode(strm)) return FALSE; if (HasOptionalField(e_optional) && !m_optional.Decode(strm)) return FALSE; if (HasOptionalField(e_wildcardReturn) && !m_wildcardReturn.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_CommandRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_command.Encode(strm); if (HasOptionalField(e_optional)) m_optional.Encode(strm); if (HasOptionalField(e_wildcardReturn)) m_wildcardReturn.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_CommandRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_CommandRequest::Class()), PInvalidCast); #endif return new H248_CommandRequest(*this); } // // AmmRequest // H248_AmmRequest::H248_AmmRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_AmmRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "terminationID = " << setprecision(indent) << m_terminationID << '\n'; strm << setw(indent+14) << "descriptors = " << setprecision(indent) << m_descriptors << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_AmmRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_AmmRequest), PInvalidCast); #endif const H248_AmmRequest & other = (const H248_AmmRequest &)obj; Comparison result; if ((result = m_terminationID.Compare(other.m_terminationID)) != EqualTo) return result; if ((result = m_descriptors.Compare(other.m_descriptors)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_AmmRequest::GetDataLength() const { PINDEX length = 0; length += m_terminationID.GetObjectLength(); length += m_descriptors.GetObjectLength(); return length; } PBoolean H248_AmmRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_terminationID.Decode(strm)) return FALSE; if (!m_descriptors.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_AmmRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_terminationID.Encode(strm); m_descriptors.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_AmmRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_AmmRequest::Class()), PInvalidCast); #endif return new H248_AmmRequest(*this); } // // AmmsReply // H248_AmmsReply::H248_AmmsReply(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_AmmsReply::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "terminationID = " << setprecision(indent) << m_terminationID << '\n'; if (HasOptionalField(e_terminationAudit)) strm << setw(indent+19) << "terminationAudit = " << setprecision(indent) << m_terminationAudit << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_AmmsReply::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_AmmsReply), PInvalidCast); #endif const H248_AmmsReply & other = (const H248_AmmsReply &)obj; Comparison result; if ((result = m_terminationID.Compare(other.m_terminationID)) != EqualTo) return result; if ((result = m_terminationAudit.Compare(other.m_terminationAudit)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_AmmsReply::GetDataLength() const { PINDEX length = 0; length += m_terminationID.GetObjectLength(); if (HasOptionalField(e_terminationAudit)) length += m_terminationAudit.GetObjectLength(); return length; } PBoolean H248_AmmsReply::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_terminationID.Decode(strm)) return FALSE; if (HasOptionalField(e_terminationAudit) && !m_terminationAudit.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_AmmsReply::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_terminationID.Encode(strm); if (HasOptionalField(e_terminationAudit)) m_terminationAudit.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_AmmsReply::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_AmmsReply::Class()), PInvalidCast); #endif return new H248_AmmsReply(*this); } // // AuditDescriptor // H248_AuditDescriptor::H248_AuditDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 1) { } #ifndef PASN_NOPRINTON void H248_AuditDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_auditToken)) strm << setw(indent+13) << "auditToken = " << setprecision(indent) << m_auditToken << '\n'; if (HasOptionalField(e_auditPropertyToken)) strm << setw(indent+21) << "auditPropertyToken = " << setprecision(indent) << m_auditPropertyToken << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_AuditDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_AuditDescriptor), PInvalidCast); #endif const H248_AuditDescriptor & other = (const H248_AuditDescriptor &)obj; Comparison result; if ((result = m_auditToken.Compare(other.m_auditToken)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_AuditDescriptor::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_auditToken)) length += m_auditToken.GetObjectLength(); return length; } PBoolean H248_AuditDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_auditToken) && !m_auditToken.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_auditPropertyToken, m_auditPropertyToken)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_AuditDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_auditToken)) m_auditToken.Encode(strm); KnownExtensionEncode(strm, e_auditPropertyToken, m_auditPropertyToken); UnknownExtensionsEncode(strm); } PObject * H248_AuditDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_AuditDescriptor::Class()), PInvalidCast); #endif return new H248_AuditDescriptor(*this); } // // IndAudLocalControlDescriptor // H248_IndAudLocalControlDescriptor::H248_IndAudLocalControlDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 4, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_IndAudLocalControlDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_streamMode)) strm << setw(indent+13) << "streamMode = " << setprecision(indent) << m_streamMode << '\n'; if (HasOptionalField(e_reserveValue)) strm << setw(indent+15) << "reserveValue = " << setprecision(indent) << m_reserveValue << '\n'; if (HasOptionalField(e_reserveGroup)) strm << setw(indent+15) << "reserveGroup = " << setprecision(indent) << m_reserveGroup << '\n'; if (HasOptionalField(e_propertyParms)) strm << setw(indent+16) << "propertyParms = " << setprecision(indent) << m_propertyParms << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_IndAudLocalControlDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_IndAudLocalControlDescriptor), PInvalidCast); #endif const H248_IndAudLocalControlDescriptor & other = (const H248_IndAudLocalControlDescriptor &)obj; Comparison result; if ((result = m_streamMode.Compare(other.m_streamMode)) != EqualTo) return result; if ((result = m_reserveValue.Compare(other.m_reserveValue)) != EqualTo) return result; if ((result = m_reserveGroup.Compare(other.m_reserveGroup)) != EqualTo) return result; if ((result = m_propertyParms.Compare(other.m_propertyParms)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_IndAudLocalControlDescriptor::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_streamMode)) length += m_streamMode.GetObjectLength(); if (HasOptionalField(e_reserveValue)) length += m_reserveValue.GetObjectLength(); if (HasOptionalField(e_reserveGroup)) length += m_reserveGroup.GetObjectLength(); if (HasOptionalField(e_propertyParms)) length += m_propertyParms.GetObjectLength(); return length; } PBoolean H248_IndAudLocalControlDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_streamMode) && !m_streamMode.Decode(strm)) return FALSE; if (HasOptionalField(e_reserveValue) && !m_reserveValue.Decode(strm)) return FALSE; if (HasOptionalField(e_reserveGroup) && !m_reserveGroup.Decode(strm)) return FALSE; if (HasOptionalField(e_propertyParms) && !m_propertyParms.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_IndAudLocalControlDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_streamMode)) m_streamMode.Encode(strm); if (HasOptionalField(e_reserveValue)) m_reserveValue.Encode(strm); if (HasOptionalField(e_reserveGroup)) m_reserveGroup.Encode(strm); if (HasOptionalField(e_propertyParms)) m_propertyParms.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_IndAudLocalControlDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_IndAudLocalControlDescriptor::Class()), PInvalidCast); #endif return new H248_IndAudLocalControlDescriptor(*this); } // // IndAudPropertyParm // H248_IndAudPropertyParm::H248_IndAudPropertyParm(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_IndAudPropertyParm::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "name = " << setprecision(indent) << m_name << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_IndAudPropertyParm::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_IndAudPropertyParm), PInvalidCast); #endif const H248_IndAudPropertyParm & other = (const H248_IndAudPropertyParm &)obj; Comparison result; if ((result = m_name.Compare(other.m_name)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_IndAudPropertyParm::GetDataLength() const { PINDEX length = 0; length += m_name.GetObjectLength(); return length; } PBoolean H248_IndAudPropertyParm::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_name.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_IndAudPropertyParm::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_name.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_IndAudPropertyParm::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_IndAudPropertyParm::Class()), PInvalidCast); #endif return new H248_IndAudPropertyParm(*this); } // // IndAudLocalRemoteDescriptor // H248_IndAudLocalRemoteDescriptor::H248_IndAudLocalRemoteDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_propGroupID.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H248_IndAudLocalRemoteDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_propGroupID)) strm << setw(indent+14) << "propGroupID = " << setprecision(indent) << m_propGroupID << '\n'; strm << setw(indent+11) << "propGrps = " << setprecision(indent) << m_propGrps << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_IndAudLocalRemoteDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_IndAudLocalRemoteDescriptor), PInvalidCast); #endif const H248_IndAudLocalRemoteDescriptor & other = (const H248_IndAudLocalRemoteDescriptor &)obj; Comparison result; if ((result = m_propGroupID.Compare(other.m_propGroupID)) != EqualTo) return result; if ((result = m_propGrps.Compare(other.m_propGrps)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_IndAudLocalRemoteDescriptor::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_propGroupID)) length += m_propGroupID.GetObjectLength(); length += m_propGrps.GetObjectLength(); return length; } PBoolean H248_IndAudLocalRemoteDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_propGroupID) && !m_propGroupID.Decode(strm)) return FALSE; if (!m_propGrps.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_IndAudLocalRemoteDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_propGroupID)) m_propGroupID.Encode(strm); m_propGrps.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_IndAudLocalRemoteDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_IndAudLocalRemoteDescriptor::Class()), PInvalidCast); #endif return new H248_IndAudLocalRemoteDescriptor(*this); } // // IndAudTerminationStateDescriptor // H248_IndAudTerminationStateDescriptor::H248_IndAudTerminationStateDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_IndAudTerminationStateDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "propertyParms = " << setprecision(indent) << m_propertyParms << '\n'; if (HasOptionalField(e_eventBufferControl)) strm << setw(indent+21) << "eventBufferControl = " << setprecision(indent) << m_eventBufferControl << '\n'; if (HasOptionalField(e_serviceState)) strm << setw(indent+15) << "serviceState = " << setprecision(indent) << m_serviceState << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_IndAudTerminationStateDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_IndAudTerminationStateDescriptor), PInvalidCast); #endif const H248_IndAudTerminationStateDescriptor & other = (const H248_IndAudTerminationStateDescriptor &)obj; Comparison result; if ((result = m_propertyParms.Compare(other.m_propertyParms)) != EqualTo) return result; if ((result = m_eventBufferControl.Compare(other.m_eventBufferControl)) != EqualTo) return result; if ((result = m_serviceState.Compare(other.m_serviceState)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_IndAudTerminationStateDescriptor::GetDataLength() const { PINDEX length = 0; length += m_propertyParms.GetObjectLength(); if (HasOptionalField(e_eventBufferControl)) length += m_eventBufferControl.GetObjectLength(); if (HasOptionalField(e_serviceState)) length += m_serviceState.GetObjectLength(); return length; } PBoolean H248_IndAudTerminationStateDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_propertyParms.Decode(strm)) return FALSE; if (HasOptionalField(e_eventBufferControl) && !m_eventBufferControl.Decode(strm)) return FALSE; if (HasOptionalField(e_serviceState) && !m_serviceState.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_IndAudTerminationStateDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_propertyParms.Encode(strm); if (HasOptionalField(e_eventBufferControl)) m_eventBufferControl.Encode(strm); if (HasOptionalField(e_serviceState)) m_serviceState.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_IndAudTerminationStateDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_IndAudTerminationStateDescriptor::Class()), PInvalidCast); #endif return new H248_IndAudTerminationStateDescriptor(*this); } // // IndAudEventsDescriptor // H248_IndAudEventsDescriptor::H248_IndAudEventsDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_IndAudEventsDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_requestID)) strm << setw(indent+12) << "requestID = " << setprecision(indent) << m_requestID << '\n'; strm << setw(indent+11) << "pkgdName = " << setprecision(indent) << m_pkgdName << '\n'; if (HasOptionalField(e_streamID)) strm << setw(indent+11) << "streamID = " << setprecision(indent) << m_streamID << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_IndAudEventsDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_IndAudEventsDescriptor), PInvalidCast); #endif const H248_IndAudEventsDescriptor & other = (const H248_IndAudEventsDescriptor &)obj; Comparison result; if ((result = m_requestID.Compare(other.m_requestID)) != EqualTo) return result; if ((result = m_pkgdName.Compare(other.m_pkgdName)) != EqualTo) return result; if ((result = m_streamID.Compare(other.m_streamID)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_IndAudEventsDescriptor::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_requestID)) length += m_requestID.GetObjectLength(); length += m_pkgdName.GetObjectLength(); if (HasOptionalField(e_streamID)) length += m_streamID.GetObjectLength(); return length; } PBoolean H248_IndAudEventsDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_requestID) && !m_requestID.Decode(strm)) return FALSE; if (!m_pkgdName.Decode(strm)) return FALSE; if (HasOptionalField(e_streamID) && !m_streamID.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_IndAudEventsDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_requestID)) m_requestID.Encode(strm); m_pkgdName.Encode(strm); if (HasOptionalField(e_streamID)) m_streamID.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_IndAudEventsDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_IndAudEventsDescriptor::Class()), PInvalidCast); #endif return new H248_IndAudEventsDescriptor(*this); } // // IndAudEventBufferDescriptor // H248_IndAudEventBufferDescriptor::H248_IndAudEventBufferDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_IndAudEventBufferDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "eventName = " << setprecision(indent) << m_eventName << '\n'; if (HasOptionalField(e_streamID)) strm << setw(indent+11) << "streamID = " << setprecision(indent) << m_streamID << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_IndAudEventBufferDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_IndAudEventBufferDescriptor), PInvalidCast); #endif const H248_IndAudEventBufferDescriptor & other = (const H248_IndAudEventBufferDescriptor &)obj; Comparison result; if ((result = m_eventName.Compare(other.m_eventName)) != EqualTo) return result; if ((result = m_streamID.Compare(other.m_streamID)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_IndAudEventBufferDescriptor::GetDataLength() const { PINDEX length = 0; length += m_eventName.GetObjectLength(); if (HasOptionalField(e_streamID)) length += m_streamID.GetObjectLength(); return length; } PBoolean H248_IndAudEventBufferDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_eventName.Decode(strm)) return FALSE; if (HasOptionalField(e_streamID) && !m_streamID.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_IndAudEventBufferDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_eventName.Encode(strm); if (HasOptionalField(e_streamID)) m_streamID.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_IndAudEventBufferDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_IndAudEventBufferDescriptor::Class()), PInvalidCast); #endif return new H248_IndAudEventBufferDescriptor(*this); } // // IndAudSignal // H248_IndAudSignal::H248_IndAudSignal(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_IndAudSignal::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "signalName = " << setprecision(indent) << m_signalName << '\n'; if (HasOptionalField(e_streamID)) strm << setw(indent+11) << "streamID = " << setprecision(indent) << m_streamID << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_IndAudSignal::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_IndAudSignal), PInvalidCast); #endif const H248_IndAudSignal & other = (const H248_IndAudSignal &)obj; Comparison result; if ((result = m_signalName.Compare(other.m_signalName)) != EqualTo) return result; if ((result = m_streamID.Compare(other.m_streamID)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_IndAudSignal::GetDataLength() const { PINDEX length = 0; length += m_signalName.GetObjectLength(); if (HasOptionalField(e_streamID)) length += m_streamID.GetObjectLength(); return length; } PBoolean H248_IndAudSignal::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_signalName.Decode(strm)) return FALSE; if (HasOptionalField(e_streamID) && !m_streamID.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_IndAudSignal::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_signalName.Encode(strm); if (HasOptionalField(e_streamID)) m_streamID.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_IndAudSignal::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_IndAudSignal::Class()), PInvalidCast); #endif return new H248_IndAudSignal(*this); } // // IndAudDigitMapDescriptor // H248_IndAudDigitMapDescriptor::H248_IndAudDigitMapDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { } #ifndef PASN_NOPRINTON void H248_IndAudDigitMapDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_digitMapName)) strm << setw(indent+15) << "digitMapName = " << setprecision(indent) << m_digitMapName << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_IndAudDigitMapDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_IndAudDigitMapDescriptor), PInvalidCast); #endif const H248_IndAudDigitMapDescriptor & other = (const H248_IndAudDigitMapDescriptor &)obj; Comparison result; if ((result = m_digitMapName.Compare(other.m_digitMapName)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_IndAudDigitMapDescriptor::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_digitMapName)) length += m_digitMapName.GetObjectLength(); return length; } PBoolean H248_IndAudDigitMapDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_digitMapName) && !m_digitMapName.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_IndAudDigitMapDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_digitMapName)) m_digitMapName.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_IndAudDigitMapDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_IndAudDigitMapDescriptor::Class()), PInvalidCast); #endif return new H248_IndAudDigitMapDescriptor(*this); } // // IndAudStatisticsDescriptor // H248_IndAudStatisticsDescriptor::H248_IndAudStatisticsDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H248_IndAudStatisticsDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "statName = " << setprecision(indent) << m_statName << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_IndAudStatisticsDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_IndAudStatisticsDescriptor), PInvalidCast); #endif const H248_IndAudStatisticsDescriptor & other = (const H248_IndAudStatisticsDescriptor &)obj; Comparison result; if ((result = m_statName.Compare(other.m_statName)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_IndAudStatisticsDescriptor::GetDataLength() const { PINDEX length = 0; length += m_statName.GetObjectLength(); return length; } PBoolean H248_IndAudStatisticsDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_statName.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_IndAudStatisticsDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_statName.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_IndAudStatisticsDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_IndAudStatisticsDescriptor::Class()), PInvalidCast); #endif return new H248_IndAudStatisticsDescriptor(*this); } // // IndAudPackagesDescriptor // H248_IndAudPackagesDescriptor::H248_IndAudPackagesDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_packageVersion.SetConstraints(PASN_Object::FixedConstraint, 0, 99); } #ifndef PASN_NOPRINTON void H248_IndAudPackagesDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "packageName = " << setprecision(indent) << m_packageName << '\n'; strm << setw(indent+17) << "packageVersion = " << setprecision(indent) << m_packageVersion << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_IndAudPackagesDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_IndAudPackagesDescriptor), PInvalidCast); #endif const H248_IndAudPackagesDescriptor & other = (const H248_IndAudPackagesDescriptor &)obj; Comparison result; if ((result = m_packageName.Compare(other.m_packageName)) != EqualTo) return result; if ((result = m_packageVersion.Compare(other.m_packageVersion)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_IndAudPackagesDescriptor::GetDataLength() const { PINDEX length = 0; length += m_packageName.GetObjectLength(); length += m_packageVersion.GetObjectLength(); return length; } PBoolean H248_IndAudPackagesDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_packageName.Decode(strm)) return FALSE; if (!m_packageVersion.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_IndAudPackagesDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_packageName.Encode(strm); m_packageVersion.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_IndAudPackagesDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_IndAudPackagesDescriptor::Class()), PInvalidCast); #endif return new H248_IndAudPackagesDescriptor(*this); } // // NotifyReply // H248_NotifyReply::H248_NotifyReply(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_NotifyReply::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "terminationID = " << setprecision(indent) << m_terminationID << '\n'; if (HasOptionalField(e_errorDescriptor)) strm << setw(indent+18) << "errorDescriptor = " << setprecision(indent) << m_errorDescriptor << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_NotifyReply::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_NotifyReply), PInvalidCast); #endif const H248_NotifyReply & other = (const H248_NotifyReply &)obj; Comparison result; if ((result = m_terminationID.Compare(other.m_terminationID)) != EqualTo) return result; if ((result = m_errorDescriptor.Compare(other.m_errorDescriptor)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_NotifyReply::GetDataLength() const { PINDEX length = 0; length += m_terminationID.GetObjectLength(); if (HasOptionalField(e_errorDescriptor)) length += m_errorDescriptor.GetObjectLength(); return length; } PBoolean H248_NotifyReply::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_terminationID.Decode(strm)) return FALSE; if (HasOptionalField(e_errorDescriptor) && !m_errorDescriptor.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_NotifyReply::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_terminationID.Encode(strm); if (HasOptionalField(e_errorDescriptor)) m_errorDescriptor.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_NotifyReply::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_NotifyReply::Class()), PInvalidCast); #endif return new H248_NotifyReply(*this); } // // ObservedEventsDescriptor // H248_ObservedEventsDescriptor::H248_ObservedEventsDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H248_ObservedEventsDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "requestId = " << setprecision(indent) << m_requestId << '\n'; strm << setw(indent+19) << "observedEventLst = " << setprecision(indent) << m_observedEventLst << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_ObservedEventsDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_ObservedEventsDescriptor), PInvalidCast); #endif const H248_ObservedEventsDescriptor & other = (const H248_ObservedEventsDescriptor &)obj; Comparison result; if ((result = m_requestId.Compare(other.m_requestId)) != EqualTo) return result; if ((result = m_observedEventLst.Compare(other.m_observedEventLst)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_ObservedEventsDescriptor::GetDataLength() const { PINDEX length = 0; length += m_requestId.GetObjectLength(); length += m_observedEventLst.GetObjectLength(); return length; } PBoolean H248_ObservedEventsDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestId.Decode(strm)) return FALSE; if (!m_observedEventLst.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_ObservedEventsDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestId.Encode(strm); m_observedEventLst.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_ObservedEventsDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ObservedEventsDescriptor::Class()), PInvalidCast); #endif return new H248_ObservedEventsDescriptor(*this); } // // EventName // H248_EventName::H248_EventName(unsigned tag, PASN_Object::TagClass tagClass) : H248_PkgdName(tag, tagClass) { } H248_EventName::H248_EventName(const char * v) { SetValue(v); } H248_EventName::H248_EventName(const PString & v) { SetValue(v); } H248_EventName::H248_EventName(const PBYTEArray & v) { SetValue(v); } H248_EventName & H248_EventName::operator=(const char * v) { SetValue(v); return *this; } H248_EventName & H248_EventName::operator=(const PString & v) { SetValue(v); return *this; } H248_EventName & H248_EventName::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H248_EventName::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_EventName::Class()), PInvalidCast); #endif return new H248_EventName(*this); } // // EventParameter // H248_EventParameter::H248_EventParameter(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_EventParameter::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "eventParameterName = " << setprecision(indent) << m_eventParameterName << '\n'; strm << setw(indent+8) << "value = " << setprecision(indent) << m_value << '\n'; if (HasOptionalField(e_extraInfo)) strm << setw(indent+12) << "extraInfo = " << setprecision(indent) << m_extraInfo << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_EventParameter::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_EventParameter), PInvalidCast); #endif const H248_EventParameter & other = (const H248_EventParameter &)obj; Comparison result; if ((result = m_eventParameterName.Compare(other.m_eventParameterName)) != EqualTo) return result; if ((result = m_value.Compare(other.m_value)) != EqualTo) return result; if ((result = m_extraInfo.Compare(other.m_extraInfo)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_EventParameter::GetDataLength() const { PINDEX length = 0; length += m_eventParameterName.GetObjectLength(); length += m_value.GetObjectLength(); if (HasOptionalField(e_extraInfo)) length += m_extraInfo.GetObjectLength(); return length; } PBoolean H248_EventParameter::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_eventParameterName.Decode(strm)) return FALSE; if (!m_value.Decode(strm)) return FALSE; if (HasOptionalField(e_extraInfo) && !m_extraInfo.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_EventParameter::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_eventParameterName.Encode(strm); m_value.Encode(strm); if (HasOptionalField(e_extraInfo)) m_extraInfo.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_EventParameter::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_EventParameter::Class()), PInvalidCast); #endif return new H248_EventParameter(*this); } // // ServiceChangeReply // H248_ServiceChangeReply::H248_ServiceChangeReply(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_ServiceChangeReply::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "terminationID = " << setprecision(indent) << m_terminationID << '\n'; strm << setw(indent+22) << "serviceChangeResult = " << setprecision(indent) << m_serviceChangeResult << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_ServiceChangeReply::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_ServiceChangeReply), PInvalidCast); #endif const H248_ServiceChangeReply & other = (const H248_ServiceChangeReply &)obj; Comparison result; if ((result = m_terminationID.Compare(other.m_terminationID)) != EqualTo) return result; if ((result = m_serviceChangeResult.Compare(other.m_serviceChangeResult)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_ServiceChangeReply::GetDataLength() const { PINDEX length = 0; length += m_terminationID.GetObjectLength(); length += m_serviceChangeResult.GetObjectLength(); return length; } PBoolean H248_ServiceChangeReply::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_terminationID.Decode(strm)) return FALSE; if (!m_serviceChangeResult.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_ServiceChangeReply::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_terminationID.Encode(strm); m_serviceChangeResult.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_ServiceChangeReply::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ServiceChangeReply::Class()), PInvalidCast); #endif return new H248_ServiceChangeReply(*this); } // // TerminationID // H248_TerminationID::H248_TerminationID(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_id.SetConstraints(PASN_Object::FixedConstraint, 1, 8); } #ifndef PASN_NOPRINTON void H248_TerminationID::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "wildcard = " << setprecision(indent) << m_wildcard << '\n'; strm << setw(indent+5) << "id = " << setprecision(indent) << m_id << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_TerminationID::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_TerminationID), PInvalidCast); #endif const H248_TerminationID & other = (const H248_TerminationID &)obj; Comparison result; if ((result = m_wildcard.Compare(other.m_wildcard)) != EqualTo) return result; if ((result = m_id.Compare(other.m_id)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_TerminationID::GetDataLength() const { PINDEX length = 0; length += m_wildcard.GetObjectLength(); length += m_id.GetObjectLength(); return length; } PBoolean H248_TerminationID::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_wildcard.Decode(strm)) return FALSE; if (!m_id.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_TerminationID::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_wildcard.Encode(strm); m_id.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_TerminationID::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_TerminationID::Class()), PInvalidCast); #endif return new H248_TerminationID(*this); } // // LocalControlDescriptor // H248_LocalControlDescriptor::H248_LocalControlDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_LocalControlDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_streamMode)) strm << setw(indent+13) << "streamMode = " << setprecision(indent) << m_streamMode << '\n'; if (HasOptionalField(e_reserveValue)) strm << setw(indent+15) << "reserveValue = " << setprecision(indent) << m_reserveValue << '\n'; if (HasOptionalField(e_reserveGroup)) strm << setw(indent+15) << "reserveGroup = " << setprecision(indent) << m_reserveGroup << '\n'; strm << setw(indent+16) << "propertyParms = " << setprecision(indent) << m_propertyParms << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_LocalControlDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_LocalControlDescriptor), PInvalidCast); #endif const H248_LocalControlDescriptor & other = (const H248_LocalControlDescriptor &)obj; Comparison result; if ((result = m_streamMode.Compare(other.m_streamMode)) != EqualTo) return result; if ((result = m_reserveValue.Compare(other.m_reserveValue)) != EqualTo) return result; if ((result = m_reserveGroup.Compare(other.m_reserveGroup)) != EqualTo) return result; if ((result = m_propertyParms.Compare(other.m_propertyParms)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_LocalControlDescriptor::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_streamMode)) length += m_streamMode.GetObjectLength(); if (HasOptionalField(e_reserveValue)) length += m_reserveValue.GetObjectLength(); if (HasOptionalField(e_reserveGroup)) length += m_reserveGroup.GetObjectLength(); length += m_propertyParms.GetObjectLength(); return length; } PBoolean H248_LocalControlDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_streamMode) && !m_streamMode.Decode(strm)) return FALSE; if (HasOptionalField(e_reserveValue) && !m_reserveValue.Decode(strm)) return FALSE; if (HasOptionalField(e_reserveGroup) && !m_reserveGroup.Decode(strm)) return FALSE; if (!m_propertyParms.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_LocalControlDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_streamMode)) m_streamMode.Encode(strm); if (HasOptionalField(e_reserveValue)) m_reserveValue.Encode(strm); if (HasOptionalField(e_reserveGroup)) m_reserveGroup.Encode(strm); m_propertyParms.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_LocalControlDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_LocalControlDescriptor::Class()), PInvalidCast); #endif return new H248_LocalControlDescriptor(*this); } // // PropertyParm // H248_PropertyParm::H248_PropertyParm(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_PropertyParm::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "name = " << setprecision(indent) << m_name << '\n'; strm << setw(indent+8) << "value = " << setprecision(indent) << m_value << '\n'; if (HasOptionalField(e_extraInfo)) strm << setw(indent+12) << "extraInfo = " << setprecision(indent) << m_extraInfo << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_PropertyParm::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_PropertyParm), PInvalidCast); #endif const H248_PropertyParm & other = (const H248_PropertyParm &)obj; Comparison result; if ((result = m_name.Compare(other.m_name)) != EqualTo) return result; if ((result = m_value.Compare(other.m_value)) != EqualTo) return result; if ((result = m_extraInfo.Compare(other.m_extraInfo)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_PropertyParm::GetDataLength() const { PINDEX length = 0; length += m_name.GetObjectLength(); length += m_value.GetObjectLength(); if (HasOptionalField(e_extraInfo)) length += m_extraInfo.GetObjectLength(); return length; } PBoolean H248_PropertyParm::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_name.Decode(strm)) return FALSE; if (!m_value.Decode(strm)) return FALSE; if (HasOptionalField(e_extraInfo) && !m_extraInfo.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_PropertyParm::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_name.Encode(strm); m_value.Encode(strm); if (HasOptionalField(e_extraInfo)) m_extraInfo.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_PropertyParm::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_PropertyParm::Class()), PInvalidCast); #endif return new H248_PropertyParm(*this); } // // LocalRemoteDescriptor // H248_LocalRemoteDescriptor::H248_LocalRemoteDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_LocalRemoteDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "propGrps = " << setprecision(indent) << m_propGrps << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_LocalRemoteDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_LocalRemoteDescriptor), PInvalidCast); #endif const H248_LocalRemoteDescriptor & other = (const H248_LocalRemoteDescriptor &)obj; Comparison result; if ((result = m_propGrps.Compare(other.m_propGrps)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_LocalRemoteDescriptor::GetDataLength() const { PINDEX length = 0; length += m_propGrps.GetObjectLength(); return length; } PBoolean H248_LocalRemoteDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_propGrps.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_LocalRemoteDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_propGrps.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_LocalRemoteDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_LocalRemoteDescriptor::Class()), PInvalidCast); #endif return new H248_LocalRemoteDescriptor(*this); } // // TerminationStateDescriptor // H248_TerminationStateDescriptor::H248_TerminationStateDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_TerminationStateDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "propertyParms = " << setprecision(indent) << m_propertyParms << '\n'; if (HasOptionalField(e_eventBufferControl)) strm << setw(indent+21) << "eventBufferControl = " << setprecision(indent) << m_eventBufferControl << '\n'; if (HasOptionalField(e_serviceState)) strm << setw(indent+15) << "serviceState = " << setprecision(indent) << m_serviceState << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_TerminationStateDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_TerminationStateDescriptor), PInvalidCast); #endif const H248_TerminationStateDescriptor & other = (const H248_TerminationStateDescriptor &)obj; Comparison result; if ((result = m_propertyParms.Compare(other.m_propertyParms)) != EqualTo) return result; if ((result = m_eventBufferControl.Compare(other.m_eventBufferControl)) != EqualTo) return result; if ((result = m_serviceState.Compare(other.m_serviceState)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_TerminationStateDescriptor::GetDataLength() const { PINDEX length = 0; length += m_propertyParms.GetObjectLength(); if (HasOptionalField(e_eventBufferControl)) length += m_eventBufferControl.GetObjectLength(); if (HasOptionalField(e_serviceState)) length += m_serviceState.GetObjectLength(); return length; } PBoolean H248_TerminationStateDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_propertyParms.Decode(strm)) return FALSE; if (HasOptionalField(e_eventBufferControl) && !m_eventBufferControl.Decode(strm)) return FALSE; if (HasOptionalField(e_serviceState) && !m_serviceState.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_TerminationStateDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_propertyParms.Encode(strm); if (HasOptionalField(e_eventBufferControl)) m_eventBufferControl.Encode(strm); if (HasOptionalField(e_serviceState)) m_serviceState.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_TerminationStateDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_TerminationStateDescriptor::Class()), PInvalidCast); #endif return new H248_TerminationStateDescriptor(*this); } // // EventsDescriptor // H248_EventsDescriptor::H248_EventsDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_EventsDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_requestID)) strm << setw(indent+12) << "requestID = " << setprecision(indent) << m_requestID << '\n'; strm << setw(indent+12) << "eventList = " << setprecision(indent) << m_eventList << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_EventsDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_EventsDescriptor), PInvalidCast); #endif const H248_EventsDescriptor & other = (const H248_EventsDescriptor &)obj; Comparison result; if ((result = m_requestID.Compare(other.m_requestID)) != EqualTo) return result; if ((result = m_eventList.Compare(other.m_eventList)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_EventsDescriptor::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_requestID)) length += m_requestID.GetObjectLength(); length += m_eventList.GetObjectLength(); return length; } PBoolean H248_EventsDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_requestID) && !m_requestID.Decode(strm)) return FALSE; if (!m_eventList.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_EventsDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_requestID)) m_requestID.Encode(strm); m_eventList.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_EventsDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_EventsDescriptor::Class()), PInvalidCast); #endif return new H248_EventsDescriptor(*this); } // // SecondEventsDescriptor // H248_SecondEventsDescriptor::H248_SecondEventsDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_SecondEventsDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_requestID)) strm << setw(indent+12) << "requestID = " << setprecision(indent) << m_requestID << '\n'; strm << setw(indent+12) << "eventList = " << setprecision(indent) << m_eventList << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_SecondEventsDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_SecondEventsDescriptor), PInvalidCast); #endif const H248_SecondEventsDescriptor & other = (const H248_SecondEventsDescriptor &)obj; Comparison result; if ((result = m_requestID.Compare(other.m_requestID)) != EqualTo) return result; if ((result = m_eventList.Compare(other.m_eventList)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_SecondEventsDescriptor::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_requestID)) length += m_requestID.GetObjectLength(); length += m_eventList.GetObjectLength(); return length; } PBoolean H248_SecondEventsDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_requestID) && !m_requestID.Decode(strm)) return FALSE; if (!m_eventList.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_SecondEventsDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_requestID)) m_requestID.Encode(strm); m_eventList.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_SecondEventsDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_SecondEventsDescriptor::Class()), PInvalidCast); #endif return new H248_SecondEventsDescriptor(*this); } // // SecondRequestedActions // H248_SecondRequestedActions::H248_SecondRequestedActions(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_SecondRequestedActions::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_keepActive)) strm << setw(indent+13) << "keepActive = " << setprecision(indent) << m_keepActive << '\n'; if (HasOptionalField(e_eventDM)) strm << setw(indent+10) << "eventDM = " << setprecision(indent) << m_eventDM << '\n'; if (HasOptionalField(e_signalsDescriptor)) strm << setw(indent+20) << "signalsDescriptor = " << setprecision(indent) << m_signalsDescriptor << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_SecondRequestedActions::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_SecondRequestedActions), PInvalidCast); #endif const H248_SecondRequestedActions & other = (const H248_SecondRequestedActions &)obj; Comparison result; if ((result = m_keepActive.Compare(other.m_keepActive)) != EqualTo) return result; if ((result = m_eventDM.Compare(other.m_eventDM)) != EqualTo) return result; if ((result = m_signalsDescriptor.Compare(other.m_signalsDescriptor)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_SecondRequestedActions::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_keepActive)) length += m_keepActive.GetObjectLength(); if (HasOptionalField(e_eventDM)) length += m_eventDM.GetObjectLength(); if (HasOptionalField(e_signalsDescriptor)) length += m_signalsDescriptor.GetObjectLength(); return length; } PBoolean H248_SecondRequestedActions::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_keepActive) && !m_keepActive.Decode(strm)) return FALSE; if (HasOptionalField(e_eventDM) && !m_eventDM.Decode(strm)) return FALSE; if (HasOptionalField(e_signalsDescriptor) && !m_signalsDescriptor.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_SecondRequestedActions::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_keepActive)) m_keepActive.Encode(strm); if (HasOptionalField(e_eventDM)) m_eventDM.Encode(strm); if (HasOptionalField(e_signalsDescriptor)) m_signalsDescriptor.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_SecondRequestedActions::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_SecondRequestedActions::Class()), PInvalidCast); #endif return new H248_SecondRequestedActions(*this); } // // EventSpec // H248_EventSpec::H248_EventSpec(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_EventSpec::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "eventName = " << setprecision(indent) << m_eventName << '\n'; if (HasOptionalField(e_streamID)) strm << setw(indent+11) << "streamID = " << setprecision(indent) << m_streamID << '\n'; strm << setw(indent+15) << "eventParList = " << setprecision(indent) << m_eventParList << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_EventSpec::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_EventSpec), PInvalidCast); #endif const H248_EventSpec & other = (const H248_EventSpec &)obj; Comparison result; if ((result = m_eventName.Compare(other.m_eventName)) != EqualTo) return result; if ((result = m_streamID.Compare(other.m_streamID)) != EqualTo) return result; if ((result = m_eventParList.Compare(other.m_eventParList)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_EventSpec::GetDataLength() const { PINDEX length = 0; length += m_eventName.GetObjectLength(); if (HasOptionalField(e_streamID)) length += m_streamID.GetObjectLength(); length += m_eventParList.GetObjectLength(); return length; } PBoolean H248_EventSpec::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_eventName.Decode(strm)) return FALSE; if (HasOptionalField(e_streamID) && !m_streamID.Decode(strm)) return FALSE; if (!m_eventParList.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_EventSpec::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_eventName.Encode(strm); if (HasOptionalField(e_streamID)) m_streamID.Encode(strm); m_eventParList.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_EventSpec::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_EventSpec::Class()), PInvalidCast); #endif return new H248_EventSpec(*this); } // // SeqSigList // H248_SeqSigList::H248_SeqSigList(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { m_id.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H248_SeqSigList::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+5) << "id = " << setprecision(indent) << m_id << '\n'; strm << setw(indent+13) << "signalList = " << setprecision(indent) << m_signalList << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_SeqSigList::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_SeqSigList), PInvalidCast); #endif const H248_SeqSigList & other = (const H248_SeqSigList &)obj; Comparison result; if ((result = m_id.Compare(other.m_id)) != EqualTo) return result; if ((result = m_signalList.Compare(other.m_signalList)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_SeqSigList::GetDataLength() const { PINDEX length = 0; length += m_id.GetObjectLength(); length += m_signalList.GetObjectLength(); return length; } PBoolean H248_SeqSigList::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_id.Decode(strm)) return FALSE; if (!m_signalList.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_SeqSigList::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_id.Encode(strm); m_signalList.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_SeqSigList::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_SeqSigList::Class()), PInvalidCast); #endif return new H248_SeqSigList(*this); } // // Signal // H248_Signal::H248_Signal(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 5, TRUE, 0) { m_duration.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H248_Signal::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "signalName = " << setprecision(indent) << m_signalName << '\n'; if (HasOptionalField(e_streamID)) strm << setw(indent+11) << "streamID = " << setprecision(indent) << m_streamID << '\n'; if (HasOptionalField(e_sigType)) strm << setw(indent+10) << "sigType = " << setprecision(indent) << m_sigType << '\n'; if (HasOptionalField(e_duration)) strm << setw(indent+11) << "duration = " << setprecision(indent) << m_duration << '\n'; if (HasOptionalField(e_notifyCompletion)) strm << setw(indent+19) << "notifyCompletion = " << setprecision(indent) << m_notifyCompletion << '\n'; if (HasOptionalField(e_keepActive)) strm << setw(indent+13) << "keepActive = " << setprecision(indent) << m_keepActive << '\n'; strm << setw(indent+13) << "sigParList = " << setprecision(indent) << m_sigParList << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_Signal::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_Signal), PInvalidCast); #endif const H248_Signal & other = (const H248_Signal &)obj; Comparison result; if ((result = m_signalName.Compare(other.m_signalName)) != EqualTo) return result; if ((result = m_streamID.Compare(other.m_streamID)) != EqualTo) return result; if ((result = m_sigType.Compare(other.m_sigType)) != EqualTo) return result; if ((result = m_duration.Compare(other.m_duration)) != EqualTo) return result; if ((result = m_notifyCompletion.Compare(other.m_notifyCompletion)) != EqualTo) return result; if ((result = m_keepActive.Compare(other.m_keepActive)) != EqualTo) return result; if ((result = m_sigParList.Compare(other.m_sigParList)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_Signal::GetDataLength() const { PINDEX length = 0; length += m_signalName.GetObjectLength(); if (HasOptionalField(e_streamID)) length += m_streamID.GetObjectLength(); if (HasOptionalField(e_sigType)) length += m_sigType.GetObjectLength(); if (HasOptionalField(e_duration)) length += m_duration.GetObjectLength(); if (HasOptionalField(e_notifyCompletion)) length += m_notifyCompletion.GetObjectLength(); if (HasOptionalField(e_keepActive)) length += m_keepActive.GetObjectLength(); length += m_sigParList.GetObjectLength(); return length; } PBoolean H248_Signal::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_signalName.Decode(strm)) return FALSE; if (HasOptionalField(e_streamID) && !m_streamID.Decode(strm)) return FALSE; if (HasOptionalField(e_sigType) && !m_sigType.Decode(strm)) return FALSE; if (HasOptionalField(e_duration) && !m_duration.Decode(strm)) return FALSE; if (HasOptionalField(e_notifyCompletion) && !m_notifyCompletion.Decode(strm)) return FALSE; if (HasOptionalField(e_keepActive) && !m_keepActive.Decode(strm)) return FALSE; if (!m_sigParList.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_Signal::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_signalName.Encode(strm); if (HasOptionalField(e_streamID)) m_streamID.Encode(strm); if (HasOptionalField(e_sigType)) m_sigType.Encode(strm); if (HasOptionalField(e_duration)) m_duration.Encode(strm); if (HasOptionalField(e_notifyCompletion)) m_notifyCompletion.Encode(strm); if (HasOptionalField(e_keepActive)) m_keepActive.Encode(strm); m_sigParList.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_Signal::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_Signal::Class()), PInvalidCast); #endif return new H248_Signal(*this); } // // SigParameter // H248_SigParameter::H248_SigParameter(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_SigParameter::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+19) << "sigParameterName = " << setprecision(indent) << m_sigParameterName << '\n'; strm << setw(indent+8) << "value = " << setprecision(indent) << m_value << '\n'; if (HasOptionalField(e_extraInfo)) strm << setw(indent+12) << "extraInfo = " << setprecision(indent) << m_extraInfo << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_SigParameter::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_SigParameter), PInvalidCast); #endif const H248_SigParameter & other = (const H248_SigParameter &)obj; Comparison result; if ((result = m_sigParameterName.Compare(other.m_sigParameterName)) != EqualTo) return result; if ((result = m_value.Compare(other.m_value)) != EqualTo) return result; if ((result = m_extraInfo.Compare(other.m_extraInfo)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_SigParameter::GetDataLength() const { PINDEX length = 0; length += m_sigParameterName.GetObjectLength(); length += m_value.GetObjectLength(); if (HasOptionalField(e_extraInfo)) length += m_extraInfo.GetObjectLength(); return length; } PBoolean H248_SigParameter::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sigParameterName.Decode(strm)) return FALSE; if (!m_value.Decode(strm)) return FALSE; if (HasOptionalField(e_extraInfo) && !m_extraInfo.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_SigParameter::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sigParameterName.Encode(strm); m_value.Encode(strm); if (HasOptionalField(e_extraInfo)) m_extraInfo.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_SigParameter::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_SigParameter::Class()), PInvalidCast); #endif return new H248_SigParameter(*this); } // // DigitMapDescriptor // H248_DigitMapDescriptor::H248_DigitMapDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, FALSE, 0) { } #ifndef PASN_NOPRINTON void H248_DigitMapDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_digitMapName)) strm << setw(indent+15) << "digitMapName = " << setprecision(indent) << m_digitMapName << '\n'; if (HasOptionalField(e_digitMapValue)) strm << setw(indent+16) << "digitMapValue = " << setprecision(indent) << m_digitMapValue << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_DigitMapDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_DigitMapDescriptor), PInvalidCast); #endif const H248_DigitMapDescriptor & other = (const H248_DigitMapDescriptor &)obj; Comparison result; if ((result = m_digitMapName.Compare(other.m_digitMapName)) != EqualTo) return result; if ((result = m_digitMapValue.Compare(other.m_digitMapValue)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_DigitMapDescriptor::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_digitMapName)) length += m_digitMapName.GetObjectLength(); if (HasOptionalField(e_digitMapValue)) length += m_digitMapValue.GetObjectLength(); return length; } PBoolean H248_DigitMapDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_digitMapName) && !m_digitMapName.Decode(strm)) return FALSE; if (HasOptionalField(e_digitMapValue) && !m_digitMapValue.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_DigitMapDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_digitMapName)) m_digitMapName.Encode(strm); if (HasOptionalField(e_digitMapValue)) m_digitMapValue.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_DigitMapDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_DigitMapDescriptor::Class()), PInvalidCast); #endif return new H248_DigitMapDescriptor(*this); } // // ServiceChangeResParm // H248_ServiceChangeResParm::H248_ServiceChangeResParm(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 5, TRUE, 0) { m_serviceChangeVersion.SetConstraints(PASN_Object::FixedConstraint, 0, 99); } #ifndef PASN_NOPRINTON void H248_ServiceChangeResParm::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_serviceChangeMgcId)) strm << setw(indent+21) << "serviceChangeMgcId = " << setprecision(indent) << m_serviceChangeMgcId << '\n'; if (HasOptionalField(e_serviceChangeAddress)) strm << setw(indent+23) << "serviceChangeAddress = " << setprecision(indent) << m_serviceChangeAddress << '\n'; if (HasOptionalField(e_serviceChangeVersion)) strm << setw(indent+23) << "serviceChangeVersion = " << setprecision(indent) << m_serviceChangeVersion << '\n'; if (HasOptionalField(e_serviceChangeProfile)) strm << setw(indent+23) << "serviceChangeProfile = " << setprecision(indent) << m_serviceChangeProfile << '\n'; if (HasOptionalField(e_timestamp)) strm << setw(indent+12) << "timestamp = " << setprecision(indent) << m_timestamp << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_ServiceChangeResParm::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_ServiceChangeResParm), PInvalidCast); #endif const H248_ServiceChangeResParm & other = (const H248_ServiceChangeResParm &)obj; Comparison result; if ((result = m_serviceChangeMgcId.Compare(other.m_serviceChangeMgcId)) != EqualTo) return result; if ((result = m_serviceChangeAddress.Compare(other.m_serviceChangeAddress)) != EqualTo) return result; if ((result = m_serviceChangeVersion.Compare(other.m_serviceChangeVersion)) != EqualTo) return result; if ((result = m_serviceChangeProfile.Compare(other.m_serviceChangeProfile)) != EqualTo) return result; if ((result = m_timestamp.Compare(other.m_timestamp)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_ServiceChangeResParm::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_serviceChangeMgcId)) length += m_serviceChangeMgcId.GetObjectLength(); if (HasOptionalField(e_serviceChangeAddress)) length += m_serviceChangeAddress.GetObjectLength(); if (HasOptionalField(e_serviceChangeVersion)) length += m_serviceChangeVersion.GetObjectLength(); if (HasOptionalField(e_serviceChangeProfile)) length += m_serviceChangeProfile.GetObjectLength(); if (HasOptionalField(e_timestamp)) length += m_timestamp.GetObjectLength(); return length; } PBoolean H248_ServiceChangeResParm::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_serviceChangeMgcId) && !m_serviceChangeMgcId.Decode(strm)) return FALSE; if (HasOptionalField(e_serviceChangeAddress) && !m_serviceChangeAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_serviceChangeVersion) && !m_serviceChangeVersion.Decode(strm)) return FALSE; if (HasOptionalField(e_serviceChangeProfile) && !m_serviceChangeProfile.Decode(strm)) return FALSE; if (HasOptionalField(e_timestamp) && !m_timestamp.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_ServiceChangeResParm::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_serviceChangeMgcId)) m_serviceChangeMgcId.Encode(strm); if (HasOptionalField(e_serviceChangeAddress)) m_serviceChangeAddress.Encode(strm); if (HasOptionalField(e_serviceChangeVersion)) m_serviceChangeVersion.Encode(strm); if (HasOptionalField(e_serviceChangeProfile)) m_serviceChangeProfile.Encode(strm); if (HasOptionalField(e_timestamp)) m_timestamp.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_ServiceChangeResParm::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ServiceChangeResParm::Class()), PInvalidCast); #endif return new H248_ServiceChangeResParm(*this); } // // StatisticsParameter // H248_StatisticsParameter::H248_StatisticsParameter(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { } #ifndef PASN_NOPRINTON void H248_StatisticsParameter::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "statName = " << setprecision(indent) << m_statName << '\n'; if (HasOptionalField(e_statValue)) strm << setw(indent+12) << "statValue = " << setprecision(indent) << m_statValue << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_StatisticsParameter::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_StatisticsParameter), PInvalidCast); #endif const H248_StatisticsParameter & other = (const H248_StatisticsParameter &)obj; Comparison result; if ((result = m_statName.Compare(other.m_statName)) != EqualTo) return result; if ((result = m_statValue.Compare(other.m_statValue)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_StatisticsParameter::GetDataLength() const { PINDEX length = 0; length += m_statName.GetObjectLength(); if (HasOptionalField(e_statValue)) length += m_statValue.GetObjectLength(); return length; } PBoolean H248_StatisticsParameter::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_statName.Decode(strm)) return FALSE; if (HasOptionalField(e_statValue) && !m_statValue.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_StatisticsParameter::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_statName.Encode(strm); if (HasOptionalField(e_statValue)) m_statValue.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_StatisticsParameter::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_StatisticsParameter::Class()), PInvalidCast); #endif return new H248_StatisticsParameter(*this); } // // NonStandardData // H248_NonStandardData::H248_NonStandardData(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H248_NonStandardData::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "nonStandardIdentifier = " << setprecision(indent) << m_nonStandardIdentifier << '\n'; strm << setw(indent+7) << "data = " << setprecision(indent) << m_data << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_NonStandardData::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_NonStandardData), PInvalidCast); #endif const H248_NonStandardData & other = (const H248_NonStandardData &)obj; Comparison result; if ((result = m_nonStandardIdentifier.Compare(other.m_nonStandardIdentifier)) != EqualTo) return result; if ((result = m_data.Compare(other.m_data)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_NonStandardData::GetDataLength() const { PINDEX length = 0; length += m_nonStandardIdentifier.GetObjectLength(); length += m_data.GetObjectLength(); return length; } PBoolean H248_NonStandardData::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nonStandardIdentifier.Decode(strm)) return FALSE; if (!m_data.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_NonStandardData::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nonStandardIdentifier.Encode(strm); m_data.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_NonStandardData::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_NonStandardData::Class()), PInvalidCast); #endif return new H248_NonStandardData(*this); } // // MegacoMessage // H248_MegacoMessage::H248_MegacoMessage(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { } #ifndef PASN_NOPRINTON void H248_MegacoMessage::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_authHeader)) strm << setw(indent+13) << "authHeader = " << setprecision(indent) << m_authHeader << '\n'; strm << setw(indent+7) << "mess = " << setprecision(indent) << m_mess << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_MegacoMessage::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_MegacoMessage), PInvalidCast); #endif const H248_MegacoMessage & other = (const H248_MegacoMessage &)obj; Comparison result; if ((result = m_authHeader.Compare(other.m_authHeader)) != EqualTo) return result; if ((result = m_mess.Compare(other.m_mess)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_MegacoMessage::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_authHeader)) length += m_authHeader.GetObjectLength(); length += m_mess.GetObjectLength(); return length; } PBoolean H248_MegacoMessage::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_authHeader) && !m_authHeader.Decode(strm)) return FALSE; if (!m_mess.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_MegacoMessage::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_authHeader)) m_authHeader.Encode(strm); m_mess.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_MegacoMessage::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_MegacoMessage::Class()), PInvalidCast); #endif return new H248_MegacoMessage(*this); } // // ActionRequest // H248_ActionRequest::H248_ActionRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, FALSE, 0) { } #ifndef PASN_NOPRINTON void H248_ActionRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "contextId = " << setprecision(indent) << m_contextId << '\n'; if (HasOptionalField(e_contextRequest)) strm << setw(indent+17) << "contextRequest = " << setprecision(indent) << m_contextRequest << '\n'; if (HasOptionalField(e_contextAttrAuditReq)) strm << setw(indent+22) << "contextAttrAuditReq = " << setprecision(indent) << m_contextAttrAuditReq << '\n'; strm << setw(indent+18) << "commandRequests = " << setprecision(indent) << m_commandRequests << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_ActionRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_ActionRequest), PInvalidCast); #endif const H248_ActionRequest & other = (const H248_ActionRequest &)obj; Comparison result; if ((result = m_contextId.Compare(other.m_contextId)) != EqualTo) return result; if ((result = m_contextRequest.Compare(other.m_contextRequest)) != EqualTo) return result; if ((result = m_contextAttrAuditReq.Compare(other.m_contextAttrAuditReq)) != EqualTo) return result; if ((result = m_commandRequests.Compare(other.m_commandRequests)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_ActionRequest::GetDataLength() const { PINDEX length = 0; length += m_contextId.GetObjectLength(); if (HasOptionalField(e_contextRequest)) length += m_contextRequest.GetObjectLength(); if (HasOptionalField(e_contextAttrAuditReq)) length += m_contextAttrAuditReq.GetObjectLength(); length += m_commandRequests.GetObjectLength(); return length; } PBoolean H248_ActionRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_contextId.Decode(strm)) return FALSE; if (HasOptionalField(e_contextRequest) && !m_contextRequest.Decode(strm)) return FALSE; if (HasOptionalField(e_contextAttrAuditReq) && !m_contextAttrAuditReq.Decode(strm)) return FALSE; if (!m_commandRequests.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_ActionRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_contextId.Encode(strm); if (HasOptionalField(e_contextRequest)) m_contextRequest.Encode(strm); if (HasOptionalField(e_contextAttrAuditReq)) m_contextAttrAuditReq.Encode(strm); m_commandRequests.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_ActionRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ActionRequest::Class()), PInvalidCast); #endif return new H248_ActionRequest(*this); } // // ActionReply // H248_ActionReply::H248_ActionReply(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, FALSE, 0) { } #ifndef PASN_NOPRINTON void H248_ActionReply::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "contextId = " << setprecision(indent) << m_contextId << '\n'; if (HasOptionalField(e_errorDescriptor)) strm << setw(indent+18) << "errorDescriptor = " << setprecision(indent) << m_errorDescriptor << '\n'; if (HasOptionalField(e_contextReply)) strm << setw(indent+15) << "contextReply = " << setprecision(indent) << m_contextReply << '\n'; strm << setw(indent+15) << "commandReply = " << setprecision(indent) << m_commandReply << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_ActionReply::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_ActionReply), PInvalidCast); #endif const H248_ActionReply & other = (const H248_ActionReply &)obj; Comparison result; if ((result = m_contextId.Compare(other.m_contextId)) != EqualTo) return result; if ((result = m_errorDescriptor.Compare(other.m_errorDescriptor)) != EqualTo) return result; if ((result = m_contextReply.Compare(other.m_contextReply)) != EqualTo) return result; if ((result = m_commandReply.Compare(other.m_commandReply)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_ActionReply::GetDataLength() const { PINDEX length = 0; length += m_contextId.GetObjectLength(); if (HasOptionalField(e_errorDescriptor)) length += m_errorDescriptor.GetObjectLength(); if (HasOptionalField(e_contextReply)) length += m_contextReply.GetObjectLength(); length += m_commandReply.GetObjectLength(); return length; } PBoolean H248_ActionReply::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_contextId.Decode(strm)) return FALSE; if (HasOptionalField(e_errorDescriptor) && !m_errorDescriptor.Decode(strm)) return FALSE; if (HasOptionalField(e_contextReply) && !m_contextReply.Decode(strm)) return FALSE; if (!m_commandReply.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_ActionReply::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_contextId.Encode(strm); if (HasOptionalField(e_errorDescriptor)) m_errorDescriptor.Encode(strm); if (HasOptionalField(e_contextReply)) m_contextReply.Encode(strm); m_commandReply.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_ActionReply::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ActionReply::Class()), PInvalidCast); #endif return new H248_ActionReply(*this); } // // TopologyRequest // H248_TopologyRequest::H248_TopologyRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 1) { } #ifndef PASN_NOPRINTON void H248_TopologyRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+18) << "terminationFrom = " << setprecision(indent) << m_terminationFrom << '\n'; strm << setw(indent+16) << "terminationTo = " << setprecision(indent) << m_terminationTo << '\n'; strm << setw(indent+20) << "topologyDirection = " << setprecision(indent) << m_topologyDirection << '\n'; if (HasOptionalField(e_streamID)) strm << setw(indent+11) << "streamID = " << setprecision(indent) << m_streamID << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_TopologyRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_TopologyRequest), PInvalidCast); #endif const H248_TopologyRequest & other = (const H248_TopologyRequest &)obj; Comparison result; if ((result = m_terminationFrom.Compare(other.m_terminationFrom)) != EqualTo) return result; if ((result = m_terminationTo.Compare(other.m_terminationTo)) != EqualTo) return result; if ((result = m_topologyDirection.Compare(other.m_topologyDirection)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_TopologyRequest::GetDataLength() const { PINDEX length = 0; length += m_terminationFrom.GetObjectLength(); length += m_terminationTo.GetObjectLength(); length += m_topologyDirection.GetObjectLength(); return length; } PBoolean H248_TopologyRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_terminationFrom.Decode(strm)) return FALSE; if (!m_terminationTo.Decode(strm)) return FALSE; if (!m_topologyDirection.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_streamID, m_streamID)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_TopologyRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_terminationFrom.Encode(strm); m_terminationTo.Encode(strm); m_topologyDirection.Encode(strm); KnownExtensionEncode(strm, e_streamID, m_streamID); UnknownExtensionsEncode(strm); } PObject * H248_TopologyRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_TopologyRequest::Class()), PInvalidCast); #endif return new H248_TopologyRequest(*this); } // // SubtractRequest // H248_SubtractRequest::H248_SubtractRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_SubtractRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "terminationID = " << setprecision(indent) << m_terminationID << '\n'; if (HasOptionalField(e_auditDescriptor)) strm << setw(indent+18) << "auditDescriptor = " << setprecision(indent) << m_auditDescriptor << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_SubtractRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_SubtractRequest), PInvalidCast); #endif const H248_SubtractRequest & other = (const H248_SubtractRequest &)obj; Comparison result; if ((result = m_terminationID.Compare(other.m_terminationID)) != EqualTo) return result; if ((result = m_auditDescriptor.Compare(other.m_auditDescriptor)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_SubtractRequest::GetDataLength() const { PINDEX length = 0; length += m_terminationID.GetObjectLength(); if (HasOptionalField(e_auditDescriptor)) length += m_auditDescriptor.GetObjectLength(); return length; } PBoolean H248_SubtractRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_terminationID.Decode(strm)) return FALSE; if (HasOptionalField(e_auditDescriptor) && !m_auditDescriptor.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_SubtractRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_terminationID.Encode(strm); if (HasOptionalField(e_auditDescriptor)) m_auditDescriptor.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_SubtractRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_SubtractRequest::Class()), PInvalidCast); #endif return new H248_SubtractRequest(*this); } // // AuditRequest // H248_AuditRequest::H248_AuditRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_AuditRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "terminationID = " << setprecision(indent) << m_terminationID << '\n'; strm << setw(indent+18) << "auditDescriptor = " << setprecision(indent) << m_auditDescriptor << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_AuditRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_AuditRequest), PInvalidCast); #endif const H248_AuditRequest & other = (const H248_AuditRequest &)obj; Comparison result; if ((result = m_terminationID.Compare(other.m_terminationID)) != EqualTo) return result; if ((result = m_auditDescriptor.Compare(other.m_auditDescriptor)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_AuditRequest::GetDataLength() const { PINDEX length = 0; length += m_terminationID.GetObjectLength(); length += m_auditDescriptor.GetObjectLength(); return length; } PBoolean H248_AuditRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_terminationID.Decode(strm)) return FALSE; if (!m_auditDescriptor.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_AuditRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_terminationID.Encode(strm); m_auditDescriptor.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_AuditRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_AuditRequest::Class()), PInvalidCast); #endif return new H248_AuditRequest(*this); } // // AuditResult // H248_AuditResult::H248_AuditResult(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H248_AuditResult::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "terminationID = " << setprecision(indent) << m_terminationID << '\n'; strm << setw(indent+25) << "terminationAuditResult = " << setprecision(indent) << m_terminationAuditResult << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_AuditResult::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_AuditResult), PInvalidCast); #endif const H248_AuditResult & other = (const H248_AuditResult &)obj; Comparison result; if ((result = m_terminationID.Compare(other.m_terminationID)) != EqualTo) return result; if ((result = m_terminationAuditResult.Compare(other.m_terminationAuditResult)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_AuditResult::GetDataLength() const { PINDEX length = 0; length += m_terminationID.GetObjectLength(); length += m_terminationAuditResult.GetObjectLength(); return length; } PBoolean H248_AuditResult::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_terminationID.Decode(strm)) return FALSE; if (!m_terminationAuditResult.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_AuditResult::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_terminationID.Encode(strm); m_terminationAuditResult.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_AuditResult::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_AuditResult::Class()), PInvalidCast); #endif return new H248_AuditResult(*this); } // // IndAudMediaDescriptor // H248_IndAudMediaDescriptor::H248_IndAudMediaDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_IndAudMediaDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_termStateDescr)) strm << setw(indent+17) << "termStateDescr = " << setprecision(indent) << m_termStateDescr << '\n'; if (HasOptionalField(e_streams)) strm << setw(indent+10) << "streams = " << setprecision(indent) << m_streams << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_IndAudMediaDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_IndAudMediaDescriptor), PInvalidCast); #endif const H248_IndAudMediaDescriptor & other = (const H248_IndAudMediaDescriptor &)obj; Comparison result; if ((result = m_termStateDescr.Compare(other.m_termStateDescr)) != EqualTo) return result; if ((result = m_streams.Compare(other.m_streams)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_IndAudMediaDescriptor::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_termStateDescr)) length += m_termStateDescr.GetObjectLength(); if (HasOptionalField(e_streams)) length += m_streams.GetObjectLength(); return length; } PBoolean H248_IndAudMediaDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_termStateDescr) && !m_termStateDescr.Decode(strm)) return FALSE; if (HasOptionalField(e_streams) && !m_streams.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_IndAudMediaDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_termStateDescr)) m_termStateDescr.Encode(strm); if (HasOptionalField(e_streams)) m_streams.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_IndAudMediaDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_IndAudMediaDescriptor::Class()), PInvalidCast); #endif return new H248_IndAudMediaDescriptor(*this); } // // IndAudStreamParms // H248_IndAudStreamParms::H248_IndAudStreamParms(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_IndAudStreamParms::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_localControlDescriptor)) strm << setw(indent+25) << "localControlDescriptor = " << setprecision(indent) << m_localControlDescriptor << '\n'; if (HasOptionalField(e_localDescriptor)) strm << setw(indent+18) << "localDescriptor = " << setprecision(indent) << m_localDescriptor << '\n'; if (HasOptionalField(e_remoteDescriptor)) strm << setw(indent+19) << "remoteDescriptor = " << setprecision(indent) << m_remoteDescriptor << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_IndAudStreamParms::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_IndAudStreamParms), PInvalidCast); #endif const H248_IndAudStreamParms & other = (const H248_IndAudStreamParms &)obj; Comparison result; if ((result = m_localControlDescriptor.Compare(other.m_localControlDescriptor)) != EqualTo) return result; if ((result = m_localDescriptor.Compare(other.m_localDescriptor)) != EqualTo) return result; if ((result = m_remoteDescriptor.Compare(other.m_remoteDescriptor)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_IndAudStreamParms::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_localControlDescriptor)) length += m_localControlDescriptor.GetObjectLength(); if (HasOptionalField(e_localDescriptor)) length += m_localDescriptor.GetObjectLength(); if (HasOptionalField(e_remoteDescriptor)) length += m_remoteDescriptor.GetObjectLength(); return length; } PBoolean H248_IndAudStreamParms::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_localControlDescriptor) && !m_localControlDescriptor.Decode(strm)) return FALSE; if (HasOptionalField(e_localDescriptor) && !m_localDescriptor.Decode(strm)) return FALSE; if (HasOptionalField(e_remoteDescriptor) && !m_remoteDescriptor.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_IndAudStreamParms::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_localControlDescriptor)) m_localControlDescriptor.Encode(strm); if (HasOptionalField(e_localDescriptor)) m_localDescriptor.Encode(strm); if (HasOptionalField(e_remoteDescriptor)) m_remoteDescriptor.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_IndAudStreamParms::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_IndAudStreamParms::Class()), PInvalidCast); #endif return new H248_IndAudStreamParms(*this); } // // IndAudSeqSigList // H248_IndAudSeqSigList::H248_IndAudSeqSigList(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { m_id.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H248_IndAudSeqSigList::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+5) << "id = " << setprecision(indent) << m_id << '\n'; if (HasOptionalField(e_signalList)) strm << setw(indent+13) << "signalList = " << setprecision(indent) << m_signalList << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_IndAudSeqSigList::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_IndAudSeqSigList), PInvalidCast); #endif const H248_IndAudSeqSigList & other = (const H248_IndAudSeqSigList &)obj; Comparison result; if ((result = m_id.Compare(other.m_id)) != EqualTo) return result; if ((result = m_signalList.Compare(other.m_signalList)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_IndAudSeqSigList::GetDataLength() const { PINDEX length = 0; length += m_id.GetObjectLength(); if (HasOptionalField(e_signalList)) length += m_signalList.GetObjectLength(); return length; } PBoolean H248_IndAudSeqSigList::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_id.Decode(strm)) return FALSE; if (HasOptionalField(e_signalList) && !m_signalList.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_IndAudSeqSigList::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_id.Encode(strm); if (HasOptionalField(e_signalList)) m_signalList.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_IndAudSeqSigList::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_IndAudSeqSigList::Class()), PInvalidCast); #endif return new H248_IndAudSeqSigList(*this); } // // NotifyRequest // H248_NotifyRequest::H248_NotifyRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_NotifyRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "terminationID = " << setprecision(indent) << m_terminationID << '\n'; strm << setw(indent+27) << "observedEventsDescriptor = " << setprecision(indent) << m_observedEventsDescriptor << '\n'; if (HasOptionalField(e_errorDescriptor)) strm << setw(indent+18) << "errorDescriptor = " << setprecision(indent) << m_errorDescriptor << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_NotifyRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_NotifyRequest), PInvalidCast); #endif const H248_NotifyRequest & other = (const H248_NotifyRequest &)obj; Comparison result; if ((result = m_terminationID.Compare(other.m_terminationID)) != EqualTo) return result; if ((result = m_observedEventsDescriptor.Compare(other.m_observedEventsDescriptor)) != EqualTo) return result; if ((result = m_errorDescriptor.Compare(other.m_errorDescriptor)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_NotifyRequest::GetDataLength() const { PINDEX length = 0; length += m_terminationID.GetObjectLength(); length += m_observedEventsDescriptor.GetObjectLength(); if (HasOptionalField(e_errorDescriptor)) length += m_errorDescriptor.GetObjectLength(); return length; } PBoolean H248_NotifyRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_terminationID.Decode(strm)) return FALSE; if (!m_observedEventsDescriptor.Decode(strm)) return FALSE; if (HasOptionalField(e_errorDescriptor) && !m_errorDescriptor.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_NotifyRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_terminationID.Encode(strm); m_observedEventsDescriptor.Encode(strm); if (HasOptionalField(e_errorDescriptor)) m_errorDescriptor.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_NotifyRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_NotifyRequest::Class()), PInvalidCast); #endif return new H248_NotifyRequest(*this); } // // ObservedEvent // H248_ObservedEvent::H248_ObservedEvent(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_ObservedEvent::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "eventName = " << setprecision(indent) << m_eventName << '\n'; if (HasOptionalField(e_streamID)) strm << setw(indent+11) << "streamID = " << setprecision(indent) << m_streamID << '\n'; strm << setw(indent+15) << "eventParList = " << setprecision(indent) << m_eventParList << '\n'; if (HasOptionalField(e_timeNotation)) strm << setw(indent+15) << "timeNotation = " << setprecision(indent) << m_timeNotation << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_ObservedEvent::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_ObservedEvent), PInvalidCast); #endif const H248_ObservedEvent & other = (const H248_ObservedEvent &)obj; Comparison result; if ((result = m_eventName.Compare(other.m_eventName)) != EqualTo) return result; if ((result = m_streamID.Compare(other.m_streamID)) != EqualTo) return result; if ((result = m_eventParList.Compare(other.m_eventParList)) != EqualTo) return result; if ((result = m_timeNotation.Compare(other.m_timeNotation)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_ObservedEvent::GetDataLength() const { PINDEX length = 0; length += m_eventName.GetObjectLength(); if (HasOptionalField(e_streamID)) length += m_streamID.GetObjectLength(); length += m_eventParList.GetObjectLength(); if (HasOptionalField(e_timeNotation)) length += m_timeNotation.GetObjectLength(); return length; } PBoolean H248_ObservedEvent::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_eventName.Decode(strm)) return FALSE; if (HasOptionalField(e_streamID) && !m_streamID.Decode(strm)) return FALSE; if (!m_eventParList.Decode(strm)) return FALSE; if (HasOptionalField(e_timeNotation) && !m_timeNotation.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_ObservedEvent::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_eventName.Encode(strm); if (HasOptionalField(e_streamID)) m_streamID.Encode(strm); m_eventParList.Encode(strm); if (HasOptionalField(e_timeNotation)) m_timeNotation.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_ObservedEvent::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ObservedEvent::Class()), PInvalidCast); #endif return new H248_ObservedEvent(*this); } // // MediaDescriptor // H248_MediaDescriptor::H248_MediaDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_MediaDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_termStateDescr)) strm << setw(indent+17) << "termStateDescr = " << setprecision(indent) << m_termStateDescr << '\n'; if (HasOptionalField(e_streams)) strm << setw(indent+10) << "streams = " << setprecision(indent) << m_streams << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_MediaDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_MediaDescriptor), PInvalidCast); #endif const H248_MediaDescriptor & other = (const H248_MediaDescriptor &)obj; Comparison result; if ((result = m_termStateDescr.Compare(other.m_termStateDescr)) != EqualTo) return result; if ((result = m_streams.Compare(other.m_streams)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_MediaDescriptor::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_termStateDescr)) length += m_termStateDescr.GetObjectLength(); if (HasOptionalField(e_streams)) length += m_streams.GetObjectLength(); return length; } PBoolean H248_MediaDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_termStateDescr) && !m_termStateDescr.Decode(strm)) return FALSE; if (HasOptionalField(e_streams) && !m_streams.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_MediaDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_termStateDescr)) m_termStateDescr.Encode(strm); if (HasOptionalField(e_streams)) m_streams.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_MediaDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_MediaDescriptor::Class()), PInvalidCast); #endif return new H248_MediaDescriptor(*this); } // // StreamParms // H248_StreamParms::H248_StreamParms(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_StreamParms::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_localControlDescriptor)) strm << setw(indent+25) << "localControlDescriptor = " << setprecision(indent) << m_localControlDescriptor << '\n'; if (HasOptionalField(e_localDescriptor)) strm << setw(indent+18) << "localDescriptor = " << setprecision(indent) << m_localDescriptor << '\n'; if (HasOptionalField(e_remoteDescriptor)) strm << setw(indent+19) << "remoteDescriptor = " << setprecision(indent) << m_remoteDescriptor << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_StreamParms::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_StreamParms), PInvalidCast); #endif const H248_StreamParms & other = (const H248_StreamParms &)obj; Comparison result; if ((result = m_localControlDescriptor.Compare(other.m_localControlDescriptor)) != EqualTo) return result; if ((result = m_localDescriptor.Compare(other.m_localDescriptor)) != EqualTo) return result; if ((result = m_remoteDescriptor.Compare(other.m_remoteDescriptor)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_StreamParms::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_localControlDescriptor)) length += m_localControlDescriptor.GetObjectLength(); if (HasOptionalField(e_localDescriptor)) length += m_localDescriptor.GetObjectLength(); if (HasOptionalField(e_remoteDescriptor)) length += m_remoteDescriptor.GetObjectLength(); return length; } PBoolean H248_StreamParms::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_localControlDescriptor) && !m_localControlDescriptor.Decode(strm)) return FALSE; if (HasOptionalField(e_localDescriptor) && !m_localDescriptor.Decode(strm)) return FALSE; if (HasOptionalField(e_remoteDescriptor) && !m_remoteDescriptor.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_StreamParms::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_localControlDescriptor)) m_localControlDescriptor.Encode(strm); if (HasOptionalField(e_localDescriptor)) m_localDescriptor.Encode(strm); if (HasOptionalField(e_remoteDescriptor)) m_remoteDescriptor.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_StreamParms::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_StreamParms::Class()), PInvalidCast); #endif return new H248_StreamParms(*this); } // // MuxDescriptor // H248_MuxDescriptor::H248_MuxDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_MuxDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "muxType = " << setprecision(indent) << m_muxType << '\n'; strm << setw(indent+11) << "termList = " << setprecision(indent) << m_termList << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_MuxDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_MuxDescriptor), PInvalidCast); #endif const H248_MuxDescriptor & other = (const H248_MuxDescriptor &)obj; Comparison result; if ((result = m_muxType.Compare(other.m_muxType)) != EqualTo) return result; if ((result = m_termList.Compare(other.m_termList)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_MuxDescriptor::GetDataLength() const { PINDEX length = 0; length += m_muxType.GetObjectLength(); length += m_termList.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H248_MuxDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_muxType.Decode(strm)) return FALSE; if (!m_termList.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_MuxDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_muxType.Encode(strm); m_termList.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_MuxDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_MuxDescriptor::Class()), PInvalidCast); #endif return new H248_MuxDescriptor(*this); } // // RequestedActions // H248_RequestedActions::H248_RequestedActions(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 4, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_RequestedActions::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_keepActive)) strm << setw(indent+13) << "keepActive = " << setprecision(indent) << m_keepActive << '\n'; if (HasOptionalField(e_eventDM)) strm << setw(indent+10) << "eventDM = " << setprecision(indent) << m_eventDM << '\n'; if (HasOptionalField(e_secondEvent)) strm << setw(indent+14) << "secondEvent = " << setprecision(indent) << m_secondEvent << '\n'; if (HasOptionalField(e_signalsDescriptor)) strm << setw(indent+20) << "signalsDescriptor = " << setprecision(indent) << m_signalsDescriptor << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_RequestedActions::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_RequestedActions), PInvalidCast); #endif const H248_RequestedActions & other = (const H248_RequestedActions &)obj; Comparison result; if ((result = m_keepActive.Compare(other.m_keepActive)) != EqualTo) return result; if ((result = m_eventDM.Compare(other.m_eventDM)) != EqualTo) return result; if ((result = m_secondEvent.Compare(other.m_secondEvent)) != EqualTo) return result; if ((result = m_signalsDescriptor.Compare(other.m_signalsDescriptor)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_RequestedActions::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_keepActive)) length += m_keepActive.GetObjectLength(); if (HasOptionalField(e_eventDM)) length += m_eventDM.GetObjectLength(); if (HasOptionalField(e_secondEvent)) length += m_secondEvent.GetObjectLength(); if (HasOptionalField(e_signalsDescriptor)) length += m_signalsDescriptor.GetObjectLength(); return length; } PBoolean H248_RequestedActions::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_keepActive) && !m_keepActive.Decode(strm)) return FALSE; if (HasOptionalField(e_eventDM) && !m_eventDM.Decode(strm)) return FALSE; if (HasOptionalField(e_secondEvent) && !m_secondEvent.Decode(strm)) return FALSE; if (HasOptionalField(e_signalsDescriptor) && !m_signalsDescriptor.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_RequestedActions::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_keepActive)) m_keepActive.Encode(strm); if (HasOptionalField(e_eventDM)) m_eventDM.Encode(strm); if (HasOptionalField(e_secondEvent)) m_secondEvent.Encode(strm); if (HasOptionalField(e_signalsDescriptor)) m_signalsDescriptor.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_RequestedActions::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_RequestedActions::Class()), PInvalidCast); #endif return new H248_RequestedActions(*this); } // // SecondRequestedEvent // H248_SecondRequestedEvent::H248_SecondRequestedEvent(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_SecondRequestedEvent::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "pkgdName = " << setprecision(indent) << m_pkgdName << '\n'; if (HasOptionalField(e_streamID)) strm << setw(indent+11) << "streamID = " << setprecision(indent) << m_streamID << '\n'; if (HasOptionalField(e_eventAction)) strm << setw(indent+14) << "eventAction = " << setprecision(indent) << m_eventAction << '\n'; strm << setw(indent+12) << "evParList = " << setprecision(indent) << m_evParList << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_SecondRequestedEvent::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_SecondRequestedEvent), PInvalidCast); #endif const H248_SecondRequestedEvent & other = (const H248_SecondRequestedEvent &)obj; Comparison result; if ((result = m_pkgdName.Compare(other.m_pkgdName)) != EqualTo) return result; if ((result = m_streamID.Compare(other.m_streamID)) != EqualTo) return result; if ((result = m_eventAction.Compare(other.m_eventAction)) != EqualTo) return result; if ((result = m_evParList.Compare(other.m_evParList)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_SecondRequestedEvent::GetDataLength() const { PINDEX length = 0; length += m_pkgdName.GetObjectLength(); if (HasOptionalField(e_streamID)) length += m_streamID.GetObjectLength(); if (HasOptionalField(e_eventAction)) length += m_eventAction.GetObjectLength(); length += m_evParList.GetObjectLength(); return length; } PBoolean H248_SecondRequestedEvent::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_pkgdName.Decode(strm)) return FALSE; if (HasOptionalField(e_streamID) && !m_streamID.Decode(strm)) return FALSE; if (HasOptionalField(e_eventAction) && !m_eventAction.Decode(strm)) return FALSE; if (!m_evParList.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_SecondRequestedEvent::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_pkgdName.Encode(strm); if (HasOptionalField(e_streamID)) m_streamID.Encode(strm); if (HasOptionalField(e_eventAction)) m_eventAction.Encode(strm); m_evParList.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_SecondRequestedEvent::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_SecondRequestedEvent::Class()), PInvalidCast); #endif return new H248_SecondRequestedEvent(*this); } // // ModemDescriptor // H248_ModemDescriptor::H248_ModemDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { } #ifndef PASN_NOPRINTON void H248_ModemDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+6) << "mtl = " << setprecision(indent) << m_mtl << '\n'; strm << setw(indent+6) << "mpl = " << setprecision(indent) << m_mpl << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_ModemDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_ModemDescriptor), PInvalidCast); #endif const H248_ModemDescriptor & other = (const H248_ModemDescriptor &)obj; Comparison result; if ((result = m_mtl.Compare(other.m_mtl)) != EqualTo) return result; if ((result = m_mpl.Compare(other.m_mpl)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_ModemDescriptor::GetDataLength() const { PINDEX length = 0; length += m_mtl.GetObjectLength(); length += m_mpl.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H248_ModemDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_mtl.Decode(strm)) return FALSE; if (!m_mpl.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_ModemDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_mtl.Encode(strm); m_mpl.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_ModemDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ModemDescriptor::Class()), PInvalidCast); #endif return new H248_ModemDescriptor(*this); } // // ServiceChangeParm // H248_ServiceChangeParm::H248_ServiceChangeParm(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 7, TRUE, 1) { m_serviceChangeVersion.SetConstraints(PASN_Object::FixedConstraint, 0, 99); m_serviceChangeDelay.SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); } #ifndef PASN_NOPRINTON void H248_ServiceChangeParm::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+22) << "serviceChangeMethod = " << setprecision(indent) << m_serviceChangeMethod << '\n'; if (HasOptionalField(e_serviceChangeAddress)) strm << setw(indent+23) << "serviceChangeAddress = " << setprecision(indent) << m_serviceChangeAddress << '\n'; if (HasOptionalField(e_serviceChangeVersion)) strm << setw(indent+23) << "serviceChangeVersion = " << setprecision(indent) << m_serviceChangeVersion << '\n'; if (HasOptionalField(e_serviceChangeProfile)) strm << setw(indent+23) << "serviceChangeProfile = " << setprecision(indent) << m_serviceChangeProfile << '\n'; strm << setw(indent+22) << "serviceChangeReason = " << setprecision(indent) << m_serviceChangeReason << '\n'; if (HasOptionalField(e_serviceChangeDelay)) strm << setw(indent+21) << "serviceChangeDelay = " << setprecision(indent) << m_serviceChangeDelay << '\n'; if (HasOptionalField(e_serviceChangeMgcId)) strm << setw(indent+21) << "serviceChangeMgcId = " << setprecision(indent) << m_serviceChangeMgcId << '\n'; if (HasOptionalField(e_timeStamp)) strm << setw(indent+12) << "timeStamp = " << setprecision(indent) << m_timeStamp << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_serviceChangeInfo)) strm << setw(indent+20) << "serviceChangeInfo = " << setprecision(indent) << m_serviceChangeInfo << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_ServiceChangeParm::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_ServiceChangeParm), PInvalidCast); #endif const H248_ServiceChangeParm & other = (const H248_ServiceChangeParm &)obj; Comparison result; if ((result = m_serviceChangeMethod.Compare(other.m_serviceChangeMethod)) != EqualTo) return result; if ((result = m_serviceChangeAddress.Compare(other.m_serviceChangeAddress)) != EqualTo) return result; if ((result = m_serviceChangeVersion.Compare(other.m_serviceChangeVersion)) != EqualTo) return result; if ((result = m_serviceChangeProfile.Compare(other.m_serviceChangeProfile)) != EqualTo) return result; if ((result = m_serviceChangeReason.Compare(other.m_serviceChangeReason)) != EqualTo) return result; if ((result = m_serviceChangeDelay.Compare(other.m_serviceChangeDelay)) != EqualTo) return result; if ((result = m_serviceChangeMgcId.Compare(other.m_serviceChangeMgcId)) != EqualTo) return result; if ((result = m_timeStamp.Compare(other.m_timeStamp)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_ServiceChangeParm::GetDataLength() const { PINDEX length = 0; length += m_serviceChangeMethod.GetObjectLength(); if (HasOptionalField(e_serviceChangeAddress)) length += m_serviceChangeAddress.GetObjectLength(); if (HasOptionalField(e_serviceChangeVersion)) length += m_serviceChangeVersion.GetObjectLength(); if (HasOptionalField(e_serviceChangeProfile)) length += m_serviceChangeProfile.GetObjectLength(); length += m_serviceChangeReason.GetObjectLength(); if (HasOptionalField(e_serviceChangeDelay)) length += m_serviceChangeDelay.GetObjectLength(); if (HasOptionalField(e_serviceChangeMgcId)) length += m_serviceChangeMgcId.GetObjectLength(); if (HasOptionalField(e_timeStamp)) length += m_timeStamp.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H248_ServiceChangeParm::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_serviceChangeMethod.Decode(strm)) return FALSE; if (HasOptionalField(e_serviceChangeAddress) && !m_serviceChangeAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_serviceChangeVersion) && !m_serviceChangeVersion.Decode(strm)) return FALSE; if (HasOptionalField(e_serviceChangeProfile) && !m_serviceChangeProfile.Decode(strm)) return FALSE; if (!m_serviceChangeReason.Decode(strm)) return FALSE; if (HasOptionalField(e_serviceChangeDelay) && !m_serviceChangeDelay.Decode(strm)) return FALSE; if (HasOptionalField(e_serviceChangeMgcId) && !m_serviceChangeMgcId.Decode(strm)) return FALSE; if (HasOptionalField(e_timeStamp) && !m_timeStamp.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_serviceChangeInfo, m_serviceChangeInfo)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_ServiceChangeParm::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_serviceChangeMethod.Encode(strm); if (HasOptionalField(e_serviceChangeAddress)) m_serviceChangeAddress.Encode(strm); if (HasOptionalField(e_serviceChangeVersion)) m_serviceChangeVersion.Encode(strm); if (HasOptionalField(e_serviceChangeProfile)) m_serviceChangeProfile.Encode(strm); m_serviceChangeReason.Encode(strm); if (HasOptionalField(e_serviceChangeDelay)) m_serviceChangeDelay.Encode(strm); if (HasOptionalField(e_serviceChangeMgcId)) m_serviceChangeMgcId.Encode(strm); if (HasOptionalField(e_timeStamp)) m_timeStamp.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_serviceChangeInfo, m_serviceChangeInfo); UnknownExtensionsEncode(strm); } PObject * H248_ServiceChangeParm::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ServiceChangeParm::Class()), PInvalidCast); #endif return new H248_ServiceChangeParm(*this); } // // IndAudStreamDescriptor // H248_IndAudStreamDescriptor::H248_IndAudStreamDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H248_IndAudStreamDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "streamID = " << setprecision(indent) << m_streamID << '\n'; strm << setw(indent+14) << "streamParms = " << setprecision(indent) << m_streamParms << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_IndAudStreamDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_IndAudStreamDescriptor), PInvalidCast); #endif const H248_IndAudStreamDescriptor & other = (const H248_IndAudStreamDescriptor &)obj; Comparison result; if ((result = m_streamID.Compare(other.m_streamID)) != EqualTo) return result; if ((result = m_streamParms.Compare(other.m_streamParms)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_IndAudStreamDescriptor::GetDataLength() const { PINDEX length = 0; length += m_streamID.GetObjectLength(); length += m_streamParms.GetObjectLength(); return length; } PBoolean H248_IndAudStreamDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_streamID.Decode(strm)) return FALSE; if (!m_streamParms.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_IndAudStreamDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_streamID.Encode(strm); m_streamParms.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_IndAudStreamDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_IndAudStreamDescriptor::Class()), PInvalidCast); #endif return new H248_IndAudStreamDescriptor(*this); } // // ServiceChangeRequest // H248_ServiceChangeRequest::H248_ServiceChangeRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_ServiceChangeRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "terminationID = " << setprecision(indent) << m_terminationID << '\n'; strm << setw(indent+21) << "serviceChangeParms = " << setprecision(indent) << m_serviceChangeParms << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_ServiceChangeRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_ServiceChangeRequest), PInvalidCast); #endif const H248_ServiceChangeRequest & other = (const H248_ServiceChangeRequest &)obj; Comparison result; if ((result = m_terminationID.Compare(other.m_terminationID)) != EqualTo) return result; if ((result = m_serviceChangeParms.Compare(other.m_serviceChangeParms)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_ServiceChangeRequest::GetDataLength() const { PINDEX length = 0; length += m_terminationID.GetObjectLength(); length += m_serviceChangeParms.GetObjectLength(); return length; } PBoolean H248_ServiceChangeRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_terminationID.Decode(strm)) return FALSE; if (!m_serviceChangeParms.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_ServiceChangeRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_terminationID.Encode(strm); m_serviceChangeParms.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_ServiceChangeRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_ServiceChangeRequest::Class()), PInvalidCast); #endif return new H248_ServiceChangeRequest(*this); } // // StreamDescriptor // H248_StreamDescriptor::H248_StreamDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H248_StreamDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "streamID = " << setprecision(indent) << m_streamID << '\n'; strm << setw(indent+14) << "streamParms = " << setprecision(indent) << m_streamParms << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_StreamDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_StreamDescriptor), PInvalidCast); #endif const H248_StreamDescriptor & other = (const H248_StreamDescriptor &)obj; Comparison result; if ((result = m_streamID.Compare(other.m_streamID)) != EqualTo) return result; if ((result = m_streamParms.Compare(other.m_streamParms)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_StreamDescriptor::GetDataLength() const { PINDEX length = 0; length += m_streamID.GetObjectLength(); length += m_streamParms.GetObjectLength(); return length; } PBoolean H248_StreamDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_streamID.Decode(strm)) return FALSE; if (!m_streamParms.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_StreamDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_streamID.Encode(strm); m_streamParms.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_StreamDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_StreamDescriptor::Class()), PInvalidCast); #endif return new H248_StreamDescriptor(*this); } // // RequestedEvent // H248_RequestedEvent::H248_RequestedEvent(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H248_RequestedEvent::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "pkgdName = " << setprecision(indent) << m_pkgdName << '\n'; if (HasOptionalField(e_streamID)) strm << setw(indent+11) << "streamID = " << setprecision(indent) << m_streamID << '\n'; if (HasOptionalField(e_eventAction)) strm << setw(indent+14) << "eventAction = " << setprecision(indent) << m_eventAction << '\n'; strm << setw(indent+12) << "evParList = " << setprecision(indent) << m_evParList << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H248_RequestedEvent::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H248_RequestedEvent), PInvalidCast); #endif const H248_RequestedEvent & other = (const H248_RequestedEvent &)obj; Comparison result; if ((result = m_pkgdName.Compare(other.m_pkgdName)) != EqualTo) return result; if ((result = m_streamID.Compare(other.m_streamID)) != EqualTo) return result; if ((result = m_eventAction.Compare(other.m_eventAction)) != EqualTo) return result; if ((result = m_evParList.Compare(other.m_evParList)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H248_RequestedEvent::GetDataLength() const { PINDEX length = 0; length += m_pkgdName.GetObjectLength(); if (HasOptionalField(e_streamID)) length += m_streamID.GetObjectLength(); if (HasOptionalField(e_eventAction)) length += m_eventAction.GetObjectLength(); length += m_evParList.GetObjectLength(); return length; } PBoolean H248_RequestedEvent::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_pkgdName.Decode(strm)) return FALSE; if (HasOptionalField(e_streamID) && !m_streamID.Decode(strm)) return FALSE; if (HasOptionalField(e_eventAction) && !m_eventAction.Decode(strm)) return FALSE; if (!m_evParList.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H248_RequestedEvent::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_pkgdName.Encode(strm); if (HasOptionalField(e_streamID)) m_streamID.Encode(strm); if (HasOptionalField(e_eventAction)) m_eventAction.Encode(strm); m_evParList.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H248_RequestedEvent::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H248_RequestedEvent::Class()), PInvalidCast); #endif return new H248_RequestedEvent(*this); } #endif // if ! H323_DISABLE_H248 // End of h248.cxx h323plus/src/h281.cxx0000644000175000017500000004547011530136244013115 0ustar markmark/* * h281.h * * H.281 implementation for the OpenH323 Project. * * Copyright (c) 2006 Network for Educational Technology, ETH Zurich. * Written by Hannes Friederich. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * Contributor(s): ______________________________________. * * $Log: h281.cxx,v $ * Revision 1.4 2011/02/20 07:03:00 shorne * Improving H.224 stability by ensuring correct initialization and removing nested mutexes. * * Revision 1.3 2011/01/12 12:51:52 shorne * H.224 bi-directional support added * * Revision 1.2 2008/05/23 11:21:52 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:51:05 shorne * First commit of h323plus * * Revision 1.1 2006/06/22 11:07:23 shorne * Backport of FECC (H.224) from Opal * * Revision 1.3 2006/05/01 10:29:50 csoutheren * Added pragams for gcc < 4 * * Revision 1.2 2006/04/24 12:53:50 rjongbloed * Port of H.224 Far End Camera Control to DevStudio/Windows * * Revision 1.1 2006/04/20 16:48:17 hfriederich * Initial version of H.224/H.281 implementation. * */ #include #ifdef __GNUC__ #pragma implementation "h281.h" #pragma implementation "h281handler.h" #endif #ifdef _MSC_VER #pragma warning(disable : 4244) #endif #include #include #include #define MAX_H281_DATA_SIZE H281_Frame::H281_Frame() : H224_Frame(3) { SetHighPriority(TRUE); BYTE *data = GetClientDataPtr(); // Setting RequestType to StartAction SetRequestType(StartAction); // Setting Pan / Tilt / Zoom and Focus Off // Setting timeout to zero data[1] = 0x00; data[2] = 0x00; } H281_Frame::~H281_Frame() { } void H281_Frame::SetRequestType(RequestType requestType) { BYTE *data = GetClientDataPtr(); data[0] = (BYTE)requestType; switch(requestType) { case StartAction: SetClientDataSize(3); break; default: SetClientDataSize(2); break; } } H281_Frame::PanDirection H281_Frame::GetPanDirection() const { RequestType requestType = GetRequestType(); if(requestType != StartAction && requestType != ContinueAction && requestType != StopAction) { // not valid return IllegalPan; } BYTE *data = GetClientDataPtr(); return (PanDirection)(data[1] & 0xc0); } void H281_Frame::SetPanDirection(PanDirection direction) { RequestType requestType = GetRequestType(); if(requestType != StartAction && requestType != ContinueAction && requestType != StopAction) { // not valid return; } BYTE *data = GetClientDataPtr(); data[1] &= 0x3f; data[1] |= (direction & 0xc0); } H281_Frame::TiltDirection H281_Frame::GetTiltDirection() const { RequestType requestType = GetRequestType(); if(requestType != StartAction && requestType != ContinueAction && requestType != StopAction) { // not valid return IllegalTilt; } BYTE *data = GetClientDataPtr(); return (TiltDirection)(data[1] & 0x30); } void H281_Frame::SetTiltDirection(TiltDirection direction) { RequestType requestType = GetRequestType(); if(requestType != StartAction && requestType != ContinueAction && requestType != StopAction) { // not valid return; } BYTE *data = GetClientDataPtr(); data[1] &= 0xcf; data[1] |= (direction & 0x30); } H281_Frame::ZoomDirection H281_Frame::GetZoomDirection() const { RequestType requestType = GetRequestType(); if(requestType != StartAction && requestType != ContinueAction && requestType != StopAction) { // not valid return IllegalZoom; } BYTE *data = GetClientDataPtr(); return (ZoomDirection)(data[1] & 0x0c); } void H281_Frame::SetZoomDirection(ZoomDirection direction) { RequestType requestType = GetRequestType(); if(requestType != StartAction && requestType != ContinueAction && requestType != StopAction) { // not valid return; } BYTE *data = GetClientDataPtr(); data[1] &= 0xf3; data[1] |= (direction & 0x0c); } H281_Frame::FocusDirection H281_Frame::GetFocusDirection() const { RequestType requestType = GetRequestType(); if(requestType != StartAction && requestType != ContinueAction && requestType != StopAction) { // not valid return IllegalFocus; } BYTE *data = GetClientDataPtr(); return (FocusDirection)(data[1] & 0x03); } void H281_Frame::SetFocusDirection(FocusDirection direction) { RequestType requestType = GetRequestType(); if(requestType != StartAction && requestType != ContinueAction && requestType != StopAction) { // not valid return; } BYTE *data = GetClientDataPtr(); data[1] &= 0xfc; data[1] |= (direction & 0x03); } BYTE H281_Frame::GetTimeout() const { RequestType requestType = GetRequestType(); if(requestType != StartAction) { return 0x00; } BYTE *data = GetClientDataPtr(); return (data[2] & 0x0f); } void H281_Frame::SetTimeout(BYTE timeout) { RequestType requestType = GetRequestType(); if(requestType != StartAction) { return; } BYTE *data = GetClientDataPtr(); data[2] = (timeout & 0x0f); } BYTE H281_Frame::GetVideoSourceNumber() const { RequestType requestType = GetRequestType(); if(requestType != SelectVideoSource && requestType != VideoSourceSwitched) { return 0x00; } BYTE *data = GetClientDataPtr(); return (data[1] >> 4) & 0x0f; } void H281_Frame::SetVideoSourceNumber(BYTE videoSourceNumber) { RequestType requestType = GetRequestType(); if(requestType != SelectVideoSource && requestType != VideoSourceSwitched) { return; } BYTE *data = GetClientDataPtr(); data[1] &= 0x0f; data[1] |= (videoSourceNumber << 4) & 0xf0; } H281_Frame::VideoMode H281_Frame::GetVideoMode() const { RequestType requestType = GetRequestType(); if(requestType != SelectVideoSource && requestType != VideoSourceSwitched) { return IllegalVideoMode; } BYTE *data = GetClientDataPtr(); return (VideoMode)(data[1] & 0x03); } void H281_Frame::SetVideoMode(VideoMode mode) { RequestType requestType = GetRequestType(); if(requestType != SelectVideoSource && requestType != VideoSourceSwitched) { return; } BYTE *data = GetClientDataPtr(); data[1] &= 0xfc; data[1] |= (mode & 0x03); } BYTE H281_Frame::GetPresetNumber() const { RequestType requestType = GetRequestType(); if(requestType != StoreAsPreset && requestType != ActivatePreset) { return 0x00; } BYTE *data = GetClientDataPtr(); return (data[1] >> 4) & 0x0f; } void H281_Frame::SetPresetNumber(BYTE presetNumber) { RequestType requestType = GetRequestType(); if(requestType != StoreAsPreset && requestType != ActivatePreset) { return; } BYTE *data = GetClientDataPtr(); data[1] &= 0x0f; data[1] |= (presetNumber << 4) & 0xf0; } ///////////////////////////////////// H281VideoSource::H281VideoSource() { // disabled camera with no options isEnabled = FALSE; firstOctet = 0x00; secondOctet = 0x00; } H281VideoSource::~H281VideoSource() { } void H281VideoSource::SetVideoSourceNumber(BYTE number) { // only accepting the default camera types if(number > 5) { return; } firstOctet &= 0x0f; firstOctet |= (number << 4) & 0xf0; } void H281VideoSource::SetCanMotionVideo(PBoolean flag) { if(flag) { firstOctet |= 0x04; } else { firstOctet &= 0xfb; } } void H281VideoSource::SetCanNormalResolutionStillImage(PBoolean flag) { if(flag) { firstOctet |= 0x02; } else { firstOctet &= 0xfd; } } void H281VideoSource::SetCanDoubleResolutionStillImage(PBoolean flag) { if(flag) { firstOctet |= 0x01; } else { firstOctet &= 0xfe; } } void H281VideoSource::SetCanPan(PBoolean flag) { if(flag) { secondOctet |= 0x80; } else { secondOctet &= 0x7f; } } void H281VideoSource::SetCanTilt(PBoolean flag) { if(flag) { secondOctet |= 0x40; } else { secondOctet &= 0xbf; } } void H281VideoSource::SetCanZoom(PBoolean flag) { if(flag) { secondOctet |= 0x20; } else { secondOctet &= 0xdf; } } void H281VideoSource::SetCanFocus(PBoolean flag) { if(flag) { secondOctet |= 0x10; } else { secondOctet &= 0xef; } } void H281VideoSource::Encode(BYTE *data) const { data[0] = firstOctet; data[1] = secondOctet; } PBoolean H281VideoSource::Decode(const BYTE *data) { // only accepting the standard video sources BYTE videoSourceNumber = (data[0] >> 4) & 0x0f; if(videoSourceNumber > 5) { return FALSE; } firstOctet = data[0]; secondOctet = data[1]; return TRUE; } /////////////////////////////// OpalH281Handler::OpalH281Handler(OpalH224Handler & theH224Handler) : h224Handler(theH224Handler) { remoteHasH281 = FALSE; localNumberOfPresets = 0; remoteNumberOfPresets = 0; shutDown = false; // set correct video source numbers for(BYTE srcnum = 0; srcnum < 6; srcnum++) { localVideoSources[srcnum].SetVideoSourceNumber(srcnum); remoteVideoSources[srcnum].SetVideoSourceNumber(srcnum); } // initiate the local cameras so that the main camera is enabled // and provides motion video (nothing more) localVideoSources[MainCamera].SetEnabled(TRUE); localVideoSources[MainCamera].SetCanMotionVideo(TRUE); //localVideoSources[MainCamera].SetCanPan(TRUE); //localVideoSources[MainCamera].SetCanTilt(TRUE); //localVideoSources[MainCamera].SetCanZoom(TRUE); transmitFrame.SetRequestType(H281_Frame::IllegalRequest); transmitFrame.SetBS(TRUE); transmitFrame.SetES(TRUE); transmitTimer.SetNotifier(PCREATE_NOTIFIER(ContinueAction)); requestedPanDirection = H281_Frame::NoPan; requestedTiltDirection = H281_Frame::NoTilt; requestedZoomDirection = H281_Frame::NoZoom; requestedFocusDirection = H281_Frame::NoFocus; receiveTimer.SetNotifier(PCREATE_NOTIFIER(StopActionLocally)); } OpalH281Handler::~OpalH281Handler() { // PWaitAndSignal m(h224Handler.GetTransmitMutex()); shutDown = true; transmitTimer.Stop(); receiveTimer.Stop(); } H281VideoSource & OpalH281Handler::GetLocalVideoSource(VideoSource source) { return localVideoSources[source]; } H281VideoSource & OpalH281Handler::GetRemoteVideoSource(VideoSource source) { return remoteVideoSources[source]; } void OpalH281Handler::StartAction(H281_Frame::PanDirection panDirection, H281_Frame::TiltDirection tiltDirection, H281_Frame::ZoomDirection zoomDirection, H281_Frame::FocusDirection focusDirection) { //PWaitAndSignal m(h224Handler.GetTransmitMutex()); if(transmitFrame.GetRequestType() != H281_Frame::IllegalRequest) { if (transmitFrame.GetPanDirection() == panDirection && transmitFrame.GetTiltDirection() == tiltDirection && transmitFrame.GetZoomDirection() == zoomDirection && transmitFrame.GetFocusDirection() == focusDirection) { // same request as before, simply continuing return; } StopAction(); } transmitFrame.SetRequestType(H281_Frame::StartAction); transmitFrame.SetPanDirection(panDirection); transmitFrame.SetTiltDirection(tiltDirection); transmitFrame.SetZoomDirection(zoomDirection); transmitFrame.SetFocusDirection(focusDirection); transmitFrame.SetTimeout(0); //800msec h224Handler.TransmitClientFrame(H281_CLIENT_ID, transmitFrame); // send a ContinueAction every 400msec transmitTimer.RunContinuous(400); } void OpalH281Handler::StopAction() { //PWaitAndSignal m(h224Handler.GetTransmitMutex()); transmitFrame.SetRequestType(H281_Frame::StopAction); h224Handler.TransmitClientFrame(H281_CLIENT_ID, transmitFrame); transmitFrame.SetRequestType(H281_Frame::IllegalRequest); transmitTimer.Stop(); } void OpalH281Handler::SelectVideoSource(BYTE videoSourceNumber, H281_Frame::VideoMode videoMode) { //PWaitAndSignal m(h224Handler.GetTransmitMutex()); if(transmitFrame.GetRequestType() != H281_Frame::IllegalRequest) { StopAction(); } transmitFrame.SetRequestType(H281_Frame::SelectVideoSource); transmitFrame.SetVideoSourceNumber(videoSourceNumber); transmitFrame.SetVideoMode(videoMode); h224Handler.TransmitClientFrame(H281_CLIENT_ID, transmitFrame); transmitFrame.SetRequestType(H281_Frame::IllegalRequest); } void OpalH281Handler::StoreAsPreset(BYTE presetNumber) { //PWaitAndSignal m(h224Handler.GetTransmitMutex()); if(transmitFrame.GetRequestType() != H281_Frame::IllegalRequest) { StopAction(); } transmitFrame.SetRequestType(H281_Frame::StoreAsPreset); transmitFrame.SetPresetNumber(presetNumber); h224Handler.TransmitClientFrame(H281_CLIENT_ID, transmitFrame); transmitFrame.SetRequestType(H281_Frame::IllegalRequest); } void OpalH281Handler::ActivatePreset(BYTE presetNumber) { //PWaitAndSignal m(h224Handler.GetTransmitMutex()); if(transmitFrame.GetRequestType() != H281_Frame::IllegalRequest) { StopAction(); } transmitFrame.SetRequestType(H281_Frame::ActivatePreset); transmitFrame.SetPresetNumber(presetNumber); h224Handler.TransmitClientFrame(H281_CLIENT_ID, transmitFrame); transmitFrame.SetRequestType(H281_Frame::IllegalRequest); } void OpalH281Handler::SendExtraCapabilities() const { BYTE capabilities[11]; // The default implementation has no presets capabilities[0] = 0x00; PINDEX size = 1; for(PINDEX i = 1; i < 6; i++) { if(localVideoSources[i].IsEnabled()) { localVideoSources[i].Encode(capabilities+size); size += 2; } } h224Handler.SendExtraCapabilitiesMessage(H281_CLIENT_ID, capabilities, size); } void OpalH281Handler::OnReceivedExtraCapabilities(const BYTE *capabilities, PINDEX size) { remoteHasH281 = TRUE; remoteNumberOfPresets = (capabilities[0] & 0x0f); PINDEX i = 1; while(i < size) { BYTE videoSource = (capabilities[i] >> 4) & 0x0f; if(videoSource <= 5) { remoteVideoSources[videoSource].SetEnabled(TRUE); remoteVideoSources[videoSource].Decode(capabilities + i); i += 2; } else { // video sources from 6 to 15 are not supported but still need to be parsed do { i++; } while(capabilities[i] != 0); // scan past the pan/tilt/zoom/focus field i++; } } OnRemoteCapabilitiesUpdated(); } void OpalH281Handler::OnReceivedMessage(const H281_Frame & message) { H281_Frame::RequestType requestType = message.GetRequestType(); if(requestType == H281_Frame::StartAction) { if(requestedPanDirection != H281_Frame::NoPan || requestedTiltDirection != H281_Frame::NoTilt || requestedZoomDirection != H281_Frame::NoZoom || requestedFocusDirection != H281_Frame::NoFocus) { // an action is already running and thus is stopped OnStopAction(); } requestedPanDirection = message.GetPanDirection(); requestedTiltDirection = message.GetTiltDirection(); requestedZoomDirection = message.GetZoomDirection(); requestedFocusDirection = message.GetFocusDirection(); OnStartAction(requestedPanDirection, requestedTiltDirection, requestedZoomDirection, requestedFocusDirection); // timeout is always 800 msec receiveTimer = 800; } else if(requestType == H281_Frame::ContinueAction) { H281_Frame::PanDirection panDirection = message.GetPanDirection(); H281_Frame::TiltDirection tiltDirection = message.GetTiltDirection(); H281_Frame::ZoomDirection zoomDirection = message.GetZoomDirection(); H281_Frame::FocusDirection focusDirection = message.GetFocusDirection(); // if request is valid, reset the timer. Otherwise ignore if(panDirection == requestedPanDirection && tiltDirection == requestedTiltDirection && zoomDirection == requestedZoomDirection && focusDirection == requestedFocusDirection && (panDirection != H281_Frame::NoPan || tiltDirection != H281_Frame::NoTilt || zoomDirection != H281_Frame::NoZoom || focusDirection != H281_Frame::NoFocus)) { receiveTimer = 800; } } else if(requestType == H281_Frame::StopAction){ H281_Frame::PanDirection panDirection = message.GetPanDirection(); H281_Frame::TiltDirection tiltDirection = message.GetTiltDirection(); H281_Frame::ZoomDirection zoomDirection = message.GetZoomDirection(); H281_Frame::FocusDirection focusDirection = message.GetFocusDirection(); // if request is valid, stop the action. Otherwise ignore if(panDirection == requestedPanDirection && tiltDirection == requestedTiltDirection && zoomDirection == requestedZoomDirection && focusDirection == requestedFocusDirection && (panDirection != H281_Frame::NoPan || tiltDirection != H281_Frame::NoTilt || zoomDirection != H281_Frame::NoZoom || focusDirection != H281_Frame::NoFocus)) { requestedPanDirection = H281_Frame::NoPan; requestedTiltDirection = H281_Frame::NoTilt; requestedZoomDirection = H281_Frame::NoZoom; requestedFocusDirection = H281_Frame::NoFocus; OnStopAction(); } } else if(requestType == H281_Frame::SelectVideoSource) { OnSelectVideoSource(message.GetVideoSourceNumber(), message.GetVideoMode()); } else if(requestType == H281_Frame::StoreAsPreset) { OnStoreAsPreset(message.GetPresetNumber()); } else if(requestType == H281_Frame::ActivatePreset) { OnActivatePreset(message.GetPresetNumber()); } else { PTRACE(3, "H.281: Unknown Request: " << requestType); } } void OpalH281Handler::OnRemoteCapabilitiesUpdated() { } void OpalH281Handler::OnStartAction(H281_Frame::PanDirection /*panDirection*/, H281_Frame::TiltDirection /*tiltDirection*/, H281_Frame::ZoomDirection /*zoomDirection*/, H281_Frame::FocusDirection /*focusDirection*/) { // not handled } void OpalH281Handler::OnStopAction() { // not handled } void OpalH281Handler::OnSelectVideoSource(BYTE /*videoSourceNumber*/, H281_Frame::VideoMode /*videoMode*/) { // not handled } void OpalH281Handler::OnStoreAsPreset(BYTE /*presetNumber*/) { // not handled } void OpalH281Handler::OnActivatePreset(BYTE /*presetNumber*/) { // not handled } void OpalH281Handler::ContinueAction(PTimer &, INT) { //PWaitAndSignal(h224Handler.GetTransmitMutex()); if (shutDown) return; transmitFrame.SetRequestType(H281_Frame::ContinueAction); h224Handler.TransmitClientFrame(H281_CLIENT_ID, transmitFrame); } void OpalH281Handler::StopActionLocally(PTimer &, INT) { requestedPanDirection = H281_Frame::NoPan; requestedTiltDirection = H281_Frame::NoTilt; requestedZoomDirection = H281_Frame::NoZoom; requestedFocusDirection = H281_Frame::NoFocus; OnStopAction(); } h323plus/src/g711.c0000644000175000017500000002036510655704670012541 0ustar markmark/* * This source code is a product of Sun Microsystems, Inc. and is provided * for unrestricted use. Users may copy or modify this source code without * charge. * * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. * * Sun source code is provided with no support and without any obligation on * the part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. * * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE * OR ANY PART THEREOF. * * In no event will Sun Microsystems, Inc. be liable for any lost revenue * or profits or other special, indirect and consequential damages, even if * Sun has been advised of the possibility of such damages. * * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 */ /* * g711.c * * u-law, A-law and linear PCM conversions. */ /* * December 30, 1994: * Functions linear2alaw, linear2ulaw have been updated to correctly * convert unquantized 16 bit values. * Tables for direct u- to A-law and A- to u-law conversions have been * corrected. * Borge Lindberg, Center for PersonKommunikation, Aalborg University. * bli@cpk.auc.dk * */ #define SIGN_BIT (0x80) /* Sign bit for a A-law byte. */ #define QUANT_MASK (0xf) /* Quantization field mask. */ #define NSEGS (8) /* Number of A-law segments. */ #define SEG_SHIFT (4) /* Left shift for segment number. */ #define SEG_MASK (0x70) /* Segment field mask. */ static int seg_aend[8] = {0x1F, 0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF, 0xFFF}; static int seg_uend[8] = {0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF, 0xFFF, 0x1FFF}; /* copy from CCITT G.711 specifications */ unsigned char u2a[128] = { /* u- to A-law conversions */ 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, /* corrected: 81, 82, 83, 84, 85, 86, 87, 88, should be: */ 80, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128}; unsigned char a2u[128] = { /* A- to u-law conversions */ 1, 3, 5, 7, 9, 11, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 48, 49, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 64, 65, 66, 67, 68, 69, 70, 71, 72, /* corrected: 73, 74, 75, 76, 77, 78, 79, 79, should be: */ 73, 74, 75, 76, 77, 78, 79, 80, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127}; static int search( int val, /* changed from "short" *drago* */ int * table, int size) /* changed from "short" *drago* */ { int i; /* changed from "short" *drago* */ for (i = 0; i < size; i++) { if (val <= *table++) return (i); } return (size); } /* * linear2alaw() - Convert a 16-bit linear PCM value to 8-bit A-law * * linear2alaw() accepts an 16-bit integer and encodes it as A-law data. * * Linear Input Code Compressed Code * ------------------------ --------------- * 0000000wxyza 000wxyz * 0000001wxyza 001wxyz * 000001wxyzab 010wxyz * 00001wxyzabc 011wxyz * 0001wxyzabcd 100wxyz * 001wxyzabcde 101wxyz * 01wxyzabcdef 110wxyz * 1wxyzabcdefg 111wxyz * * For further information see John C. Bellamy's Digital Telephony, 1982, * John Wiley & Sons, pps 98-111 and 472-476. */ int linear2alaw(int pcm_val) /* 2's complement (16-bit range) */ /* changed from "short" *drago* */ { int mask; /* changed from "short" *drago* */ int seg; /* changed from "short" *drago* */ int aval; pcm_val = pcm_val >> 3; if (pcm_val >= 0) { mask = 0xD5; /* sign (7th) bit = 1 */ } else { mask = 0x55; /* sign bit = 0 */ pcm_val = -pcm_val - 1; } /* Convert the scaled magnitude to segment number. */ seg = search(pcm_val, seg_aend, 8); /* Combine the sign, segment, and quantization bits. */ if (seg >= 8) /* out of range, return maximum value. */ return (0x7F ^ mask); else { aval = seg << SEG_SHIFT; if (seg < 2) aval |= (pcm_val >> 1) & QUANT_MASK; else aval |= (pcm_val >> seg) & QUANT_MASK; return (aval ^ mask); } } /* * alaw2linear() - Convert an A-law value to 16-bit linear PCM * */ int alaw2linear(int a_val) { int t; /* changed from "short" *drago* */ int seg; /* changed from "short" *drago* */ a_val ^= 0x55; t = (a_val & QUANT_MASK) << 4; seg = ((unsigned)a_val & SEG_MASK) >> SEG_SHIFT; switch (seg) { case 0: t += 8; break; case 1: t += 0x108; break; default: t += 0x108; t <<= seg - 1; } return ((a_val & SIGN_BIT) ? t : -t); } #define BIAS (0x84) /* Bias for linear code. */ #define CLIP 8159 /* * linear2ulaw() - Convert a linear PCM value to u-law * * In order to simplify the encoding process, the original linear magnitude * is biased by adding 33 which shifts the encoding range from (0 - 8158) to * (33 - 8191). The result can be seen in the following encoding table: * * Biased Linear Input Code Compressed Code * ------------------------ --------------- * 00000001wxyza 000wxyz * 0000001wxyzab 001wxyz * 000001wxyzabc 010wxyz * 00001wxyzabcd 011wxyz * 0001wxyzabcde 100wxyz * 001wxyzabcdef 101wxyz * 01wxyzabcdefg 110wxyz * 1wxyzabcdefgh 111wxyz * * Each biased linear code has a leading 1 which identifies the segment * number. The value of the segment number is equal to 7 minus the number * of leading 0's. The quantization interval is directly available as the * four bits wxyz. * The trailing bits (a - h) are ignored. * * Ordinarily the complement of the resulting code word is used for * transmission, and so the code word is complemented before it is returned. * * For further information see John C. Bellamy's Digital Telephony, 1982, * John Wiley & Sons, pps 98-111 and 472-476. */ int linear2ulaw( int pcm_val) /* 2's complement (16-bit range) */ { int mask; int seg; int uval; /* Get the sign and the magnitude of the value. */ pcm_val = pcm_val >> 2; if (pcm_val < 0) { pcm_val = -pcm_val; mask = 0x7F; } else { mask = 0xFF; } if ( pcm_val > CLIP ) pcm_val = CLIP; /* clip the magnitude */ pcm_val += (BIAS >> 2); /* Convert the scaled magnitude to segment number. */ seg = search(pcm_val, seg_uend, 8); /* * Combine the sign, segment, quantization bits; * and complement the code word. */ if (seg >= 8) /* out of range, return maximum value. */ return (0x7F ^ mask); else { uval = (seg << 4) | ((pcm_val >> (seg + 1)) & 0xF); return (uval ^ mask); } } /* * ulaw2linear() - Convert a u-law value to 16-bit linear PCM * * First, a biased linear code is derived from the code word. An unbiased * output can then be obtained by subtracting 33 from the biased code. * * Note that this function expects to be passed the complement of the * original code word. This is in keeping with ISDN conventions. */ int ulaw2linear( int u_val) { int t; /* Complement to obtain normal u-law value. */ u_val = ~u_val; /* * Extract and bias the quantization bits. Then * shift up by the segment number and subtract out the bias. */ t = ((u_val & QUANT_MASK) << 3) + BIAS; t <<= (u_val & SEG_MASK) >> SEG_SHIFT; return ((u_val & SIGN_BIT) ? (BIAS - t) : (t - BIAS)); } #if 0 /* A-law to u-law conversion */ static int alaw2ulaw (int aval) { aval &= 0xff; return ((aval & 0x80) ? (0xFF ^ a2u[aval ^ 0xD5]) : (0x7F ^ a2u[aval ^ 0x55])); } /* u-law to A-law conversion */ static int ulaw2alaw (int uval) { uval &= 0xff; return ((uval & 0x80) ? (0xD5 ^ (u2a[0xFF ^ uval] - 1)) : (0x55 ^ (u2a[0x7F ^ uval] - 1))); } #endif h323plus/src/h350/0000755000175000017500000000000011561755667012400 5ustar markmarkh323plus/src/h350/h323person.schema0000644000175000017500000001125210737626223015456 0ustar markmark# # # This defines the h323Person object class # # Supports PacPhone White Pages lookup # # # 1.3.6.1.4.1.17090.2 is the toplevel OID for this work # .2 = LDAP Directory # .2.1 = persona # .2.1.1 = attributes # .2.1.2 = objectclass # .2.1.3 = syntax # # # h323personorgLogo # Used to store one or more images of a organisation logo using the JPEG File # Interchange Format [JFIF]. # Note that the jpegPhoto attribute type was defined for use in the # Internet X.500 pilots but no referencable definition for it could be # located. attributetype ( 1.3.6.1.4.1.17090.2.1.1.1 NAME 'h323personorgLogo' DESC 'H323 organisation JPEG image' SYNTAX 1.3.6.1.4.1.1466.115.121.1.28 ) # h323personorgName # When displaying an entry, especially within a one-line summary list, it # is useful to be able to identify the organisation. h323orgName is defined # for this purpose. attributetype ( 1.3.6.1.4.1.17090.2.1.1.2 NAME 'h323personorgName' DESC 'H323 organisation Name' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) # h323personPKCS12 # PKCS #12 [PKCS12] provides a format for exchange of personal identity # information. When such information is stored in a directory service, # the userPKCS12 attribute should be used. This attribute is to be stored # and requested in binary form, as 'h323personPKCS12;binary'. The attribute # values are PFX PDUs stored as binary data. attributetype ( 1.3.6.1.4.1.17090.2.1.1.3 NAME 'h323personPKCS12' DESC 'Personal identity information, a PKCS #12 PFX' SYNTAX 1.3.6.1.4.1.1466.115.121.1.5 ) # h323personPhoto # Image must not exceed 64x64 pixels attributetype ( 1.3.6.1.4.1.17090.2.1.1.4 NAME 'h323personPhoto' DESC 'H323 user JPEG image' SYNTAX 1.3.6.1.4.1.1466.115.121.1.28 ) # h323personName attributetype ( 1.3.6.1.4.1.17090.2.1.1.5 NAME 'h323personName' DESC 'H323 UserName' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) # h323personTitle attributetype ( 1.3.6.1.4.1.17090.2.1.1.6 NAME 'h323personTitle' DESC 'H323 person Title' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) # h323personStreet attributetype (1.3.6.1.4.1.17090.2.1.1.7 NAME 'h323personStreet' DESC 'h323 person Street' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15) # h323personLocation attributetype ( 1.3.6.1.4.1.17090.2.1.1.8 NAME 'h323personLocation' DESC 'H323 person Location' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) # h323personPostcode attributetype ( 1.3.6.1.4.1.17090.2.1.1.9 NAME 'h323personPostcode' DESC 'H323 person Postcode' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) # h323personEmail attributetype ( 1.3.6.1.4.1.17090.2.1.1.10 NAME 'h323personEmail' DESC 'H323 person Email' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) # h323personPhone attributetype ( 1.3.6.1.4.1.17090.2.1.1.11 NAME 'h323personPhone' DESC 'H323 person Phone' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) # h323personCell attributetype ( 1.3.6.1.4.1.17090.2.1.1.12 NAME 'h323personCell' DESC 'H323 person Cell' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) # h323personFax attributetype ( 1.3.6.1.4.1.17090.2.1.1.13 NAME 'h323personFax' DESC 'H323 person Fax' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) # h323personURL attributetype ( 1.3.6.1.4.1.17090.2.1.1.14 NAME 'h323personURL' DESC 'H323 person URL' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) # h323personGUID attributetype ( 1.3.6.1.4.1.17090.2.1.1.15 NAME 'h323personGUID' DESC 'H323 person GUID' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) objectclass ( 1.3.6.1.4.1.17090.2.1.2 NAME 'h323Person' SUP top AUXILIARY MAY ( h323personorgLogo $ h323personorgName $ h323personPKCS12 $ h323personPhoto $ h323personName $ h323personTitle $ h323personStreet $ h323personLocation $ h323personPostcode $ h323personEmail $ h323personPhone $ h323personCell $ h323personFax $ h323personURL $ h323personGUID ) )h323plus/src/h350/h350_service.cxx0000644000175000017500000000416611015524412015302 0ustar markmark// // h350_service.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h350_service.h" #endif #include #include "h350/h350_service.h" #define new PNEW #if ! H323_DISABLE_H225 // // H350ServiceControl // H225_H350ServiceControl::H225_H350ServiceControl(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H225_H350ServiceControl::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "ldapURL = " << setprecision(indent) << m_ldapURL << '\n'; strm << setw(indent+9) << "ldapDN = " << setprecision(indent) << m_ldapDN << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_H350ServiceControl::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_H350ServiceControl), PInvalidCast); #endif const H225_H350ServiceControl & other = (const H225_H350ServiceControl &)obj; Comparison result; if ((result = m_ldapURL.Compare(other.m_ldapURL)) != EqualTo) return result; if ((result = m_ldapDN.Compare(other.m_ldapDN)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_H350ServiceControl::GetDataLength() const { PINDEX length = 0; length += m_ldapURL.GetObjectLength(); length += m_ldapDN.GetObjectLength(); return length; } PBoolean H225_H350ServiceControl::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_ldapURL.Decode(strm)) return FALSE; if (!m_ldapDN.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_H350ServiceControl::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_ldapURL.Encode(strm); m_ldapDN.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_H350ServiceControl::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_H350ServiceControl::Class()), PInvalidCast); #endif return new H225_H350ServiceControl(*this); } #endif // if ! H323_DISABLE_H225 // End of h350_service.cxx h323plus/src/h350/h235Identity.schema0000644000175000017500000000306110737626222015741 0ustar markmark # h235Identity Object Schema # # Schema for representing h235Identity Object in an LDAP Directory # # Abstract # # This document defines the schema for representing h235Identity # object in an LDAP directory [LDAPv3]. It defines schema elements # to represent an h235Identity object [h235Identity]. # # .1 = Communication related work # .1.4 = h235Identity # .1.4.1 = attributes # .1.4.2 = objectclass # .1.4.3 = syntax # # # # Attribute Type Definitions # # The following attribute types are defined in this document: # # h235IdentityEndpointID # h235IdentityPassword # attributetype (0.0.8.350.1.1.4.1.1 NAME 'h235IdentityEndpointID' DESC 'The Sender ID as defined in ITU-H235v2.' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' ) attributetype (0.0.8.350.1.1.4.1.2 NAME 'h235IdentityPassword' DESC 'The endpoint H.323 password as defined in ITU-H235v2.' EQUALITY octetStringMatch SYNTAX '1.3.6.1.4.1.1466.115.121.1.40' ) # Object Class Definitions # # The following object class is defined in this document: # # h235Identity # # objectclass (0.0.8.350.1.1.4.2.1 NAME 'h235Identity' DESC 'h235Identity object' SUP commObject STRUCTURAL MAY ( h235IdentityEndpointID $ h235IdentityPassword $ userCertificate $ cACertificate $ authorityRevocationList $ certificateRevocationList $ crossCertificatePair ) ) h323plus/src/h350/commURI.schema0000644000175000017500000000251210737626222015061 0ustar markmark # Communication Object Schema # # Schema for Representing Communication Objects in an LDAP Directory # # Abstract # # This document defines the schema for representing Communication # objects in an LDAP directory [LDAPv3]. It defines schema elements # to represent a communication object URI [commURIObject]. # # # # .1 = Communication related work # .1.1 = commURIObject # .1.1.1 = attributes # .1.1.2 = objectclass # .1.1.3 = syntax # # Attribute Type Definitions # # The following attribute types are defined in this document: # # commURI # attributetype (0.0.8.350.1.1.1.1.1 NAME 'commURI' DESC 'Labeled URI format to point to the distinguished name of the commUniqueId' EQUALITY caseExactMatch SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' ) # EQUALITY caseIgnoreIA5Match # SUBSTR caseIgnoreIA5SubstringsMatch # SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) # Object Class Definitions # # The following object classes are defined in this document: # # commURIObject # # commURIObject # # This auxiliary object class represents a URI attribute type # objectclass (0.0.8.350.1.1.1.2.1 NAME 'commURIObject' DESC 'object that contains the URI attribute type' SUP top AUXILIARY MAY ( commURI ) ) h323plus/src/h350/h323Identity.schema0000644000175000017500000000754010737626222015745 0ustar markmark# h323Identity Object Schema # # Schema for representing h323Identity Object in an LDAP Directory # # Abstract # # This document defines the schema for representing h323Identity # object in an LDAP directory [LDAPv3]. It defines schema elements # to represent an h323Identity object [h323Identity]. # # .1 = Communication related work # .1.3 = h323Identity # .1.3.1 = attributes # .1.3.2 = objectclass # .1.3.3 = syntax # # # # Attribute Type Definitions # # The following attribute types are defined in this document: # # h323IdentityGKDomain # h323Identityh323-ID # h323IdentitydialedDigits # h323Identityemail-ID # h323IdentityURL-ID # h323IdentitytransportID # h323IdentitypartyNumber # h323IdentitymobileUIM # h323IdentityEndpointType # h323IdentityServiceLevel # attributetype (0.0.8.350.1.1.3.1.1 NAME 'h323IdentityGKDomain' DESC 'FQDN of the Gatekeeper' EQUALITY caseIgnoreIA5Match SYNTAX '1.3.6.1.4.1.1466.115.121.1.26' ) attributetype (0.0.8.350.1.1.3.1.2 NAME 'h323Identityh323-ID' DESC 'specifies the endpoint address alias as specified in H.323' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX '1.3.6.1.4.1.1466.115.121.1.26' ) attributetype (0.0.8.350.1.1.3.1.3 NAME 'h323IdentitydialedDigits' DESC 'Specifies the endpoint dialled digits as specified in H.323' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX '1.3.6.1.4.1.1466.115.121.1.26' ) attributetype (0.0.8.350.1.1.3.1.4 NAME 'h323Identityemail-ID' DESC 'Specifies an H.323 entity that can be reached using H.323' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX '1.3.6.1.4.1.1466.115.121.1.26' ) attributetype (0.0.8.350.1.1.3.1.5 NAME 'h323IdentityURL-ID' DESC 'H.323 specs' EQUALITY caseExactMatch SUBSTR caseExactSubstringsMatch SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' ) attributetype (0.0.8.350.1.1.3.1.6 NAME 'h323IdentitytransportID' DESC 'specifies endpoint transport Id as defined in H.323' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX '1.3.6.1.4.1.1466.115.121.1.26' ) attributetype (0.0.8.350.1.1.3.1.7 NAME 'h323IdentitypartyNumber' DESC 'endpoint party Number as defined in H.323' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX '1.3.6.1.4.1.1466.115.121.1.26' ) attributetype (0.0.8.350.1.1.3.1.8 NAME 'h323IdentitymobileUIM' DESC 'endpoint mobile UIM as defined in H.323 document' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX '1.3.6.1.4.1.1466.115.121.1.26' ) attributetype (0.0.8.350.1.1.3.1.9 NAME 'h323IdentityEndpointType' DESC 'The endpoint H.323 type as defined in ITU-T H.323v4.' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' ) attributetype (0.0.8.350.1.1.3.1.10 NAME 'h323IdentityServiceLevel' DESC 'To define services a user can belong to.' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' ) # Object Class Definitions # # The following object class is defined in this document: # # h323Identity # objectclass (0.0.8.350.1.1.3.2.1 NAME 'h323Identity' DESC 'h323Identity object' SUP top AUXILIARY MAY ( h323IdentityGKDomain $ h323Identityh323-ID $ h323IdentitydialedDigits $ h323Identityemail-ID $ h323IdentityURL-ID $ h323IdentitytransportID $ h323IdentitypartyNumber $ h323IdentitymobileUIM $ h323IdentityEndpointType $ h323IdentityServiceLevel ) ) h323plus/src/h350/h350.cxx0000644000175000017500000002000711561755667013602 0ustar markmark /* * h350.cxx * * H.350 LDAP interface class. * * h323plus Library * * Copyright (c) 2007 ISVO (Asia) Pte. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd. * * Contributor(s): ______________________________________. * * $Id $ * */ #ifndef _WIN32 #define P_FORCE_STATIC_PLUGIN 1 #endif #include #include "openh323buildopts.h" #ifdef H323_H350 #include #include "h350/h350.h" #if P_DNS #include #endif ////////////////////////////////////////////////////////////////////////// // Define H.350 schemas for H.350, H.350.1, H.350.2 static const char * commObject_SchemaName = "commObject"; static struct { const char * name; unsigned type; } commObject_attributes[] = { {"commUniqueId" ,0}, {"commOwner" ,0}, {"commPrivate" ,0} }; H350_Schema(commObject); //----- static const char * commURIObject_SchemaName = "commURI"; static struct { const char * name; unsigned type; } commURIObject_attributes[] = { {"commURI" ,0} }; H350_Schema(commURIObject); //----- static const char * H323Identity_SchemaName = "H323Identity"; static struct { const char * name; unsigned type; } H323Identity_attributes[] = { {"h323IdentityGKDomain" ,0}, {"h323Identityh323-ID" ,0}, {"h323IdentitydialedDigits" ,0}, {"h323Identityemail-ID" ,0}, {"h323IdentityURL-ID" ,0}, {"h323IdentitytransportID" ,0}, {"h323IdentitypartyNumber" ,0}, {"h323IdentitymobileUIM" ,0}, {"h323IdentityEndpointType" ,0}, {"h323IdentityServiceLevel" ,0} }; H350_Schema(H323Identity); //----- static const char * H235Identity_SchemaName = "H235Identity"; static struct { const char * name; unsigned type; } H235Identity_attributes[] = { {"h235IdentityEndpointID" ,0}, {"h235IdentityPassword" ,0} }; H350_Schema(H235Identity); ///////////////////////////////////////////////////////////////////////////////////////////// PBoolean H350_Session::Open(const PString & hostname, WORD port) { #if P_DNS PDNS::SRVRecordList srvRecords; if (PDNS::GetSRVRecords(PString("_ldap._tcp.") + hostname, srvRecords)) { PDNS::SRVRecord * rec = srvRecords.GetFirst(); while (rec != NULL) { if (PLDAPSession::Open(rec->hostName,rec->port)) return TRUE; rec = srvRecords.GetNext(); } } #endif return PLDAPSession::Open(hostname,port); } PBoolean H350_Session::Login(const PString & who,const PString & passwd,AuthenticationMethod authMethod) { return Bind(who,passwd,authMethod); } int H350_Session::Search(const PString & base, const PString & filter, LDAP_RecordList & results, const PStringArray & attributes) { int records=0; PLDAPSession::SearchContext context; std::map att; SetBaseDN(base); if (PLDAPSession::Search(context,filter,attributes)) { do { LDAP_Record rec; PStringToString attributeList; if (GetSearchResult(context, attributeList)) { PString key = PString(); if (attributeList.GetSize() > 0) { key = attributeList.GetKeyAt(0) + PString("=") + attributeList.GetDataAt(0); } for (PINDEX i=0; i::const_iterator r = att.begin(); r != att.end(); ++r) { if (r->first == PString("objectClass")) { PStringList s = r->second.Lines(); for (PINDEX j=0; j < s.GetSize(); j++) { PLDAPSchema * schema = PLDAPSchema::CreateSchema(s[j]); if (schema != NULL) { schema->LoadSchema(); rec.push_back(*schema); PTRACE(4, "H350\tSchema Loaded " << s[j]); } } } } for (LDAP_Record::iterator y = rec.begin(); y != rec.end(); ++y) { for (std::map::const_iterator x = att.begin(); x != att.end(); ++x) { PTRACE(6, "H350\tChecking " << y->GetSchemaNames()[0] << " for " << x->first); PLDAPSchema::AttributeType type = y->GetAttributeType(x->first); if (type == PLDAPSchema::AttibuteUnknown) continue; else if (type == PLDAPSchema::AttributeBinary) { PArray data; if (GetSearchResult(context,x->first,data)) y->SetAttribute(x->first, data[0]); } else y->OnReceivedAttribute(x->first,x->second); } } results.insert(make_pair(key,rec)); records++; } } while (GetNextSearchResult(context)); } return records; } void H350_Session::NewRecord(LDAP_Record & rec) { PStringList s = PLDAPSchema::GetSchemaNames(); for (PINDEX j=0; j < s.GetSize(); j++) { PLDAPSchema * schema = PLDAPSchema::CreateSchema(s[j]); if (schema != NULL) { schema->LoadSchema(); rec.push_back(*schema); PTRACE(4, "H350\tSchema Loaded " << s[j]); } } } PBoolean H350_Session::PostNew(const PString & dn, const LDAP_Record & record) { PArray attrib; PLDAPSession::ModAttrib::Operation mode = PLDAPSession::ModAttrib::Add; for (std::list::const_iterator r = record.begin(); r != record.end(); ++r) { PLDAPSchema schema = *r; schema.OnSendSchema(attrib,mode); } return Add(dn,attrib); } PBoolean H350_Session::PostUpdate(const PString & dn, const LDAP_Record & record) { PArray attrib; PLDAPSession::ModAttrib::Operation mode = PLDAPSession::ModAttrib::Replace; for (std::list::const_iterator r = record.begin(); r != record.end(); ++r) { PLDAPSchema schema = *r; schema.OnSendSchema(attrib,mode); } return Modify(dn,attrib); } PBoolean H350_Session::SetAttribute(LDAP_Record & record,const PString & attrib, const PString & value) { for (std::list::const_iterator r = record.begin(); r != record.end(); ++r) { PLDAPSchema schema = *r; if (schema.SetAttribute(attrib,value)) return TRUE; } return FALSE; } PBoolean H350_Session::SetAttribute(LDAP_Record & record,const PString & attrib, const PBYTEArray & value) { for (std::list::const_iterator r = record.begin(); r != record.end(); ++r) { PLDAPSchema schema = *r; if (schema.SetAttribute(attrib,value)) return TRUE; } return FALSE; } PBoolean H350_Session::GetAttribute(LDAP_Record & record,const PString & attrib, PString & value) { for (std::list::const_iterator r = record.begin(); r != record.end(); ++r) { PLDAPSchema schema = *r; if (schema.GetAttribute(attrib,value)) return TRUE; } return FALSE; } PBoolean H350_Session::GetAttribute(LDAP_Record & record,const PString & attrib, PBYTEArray & value) { for (std::list::const_iterator r = record.begin(); r != record.end(); ++r) { PLDAPSchema schema = *r; if (schema.GetAttribute(attrib,value)) return TRUE; } return FALSE; } #endif h323plus/src/h350/commObject.schema0000644000175000017500000000312510737626222015631 0ustar markmark # Communication Object Schema # # Schema for Representing Communication Objects in an LDAP Directory # # Abstract # # This document defines the schema for representing Communication # objects in an LDAP directory [LDAPv3]. It defines schema elements # to represent a communication object [commObject]. # # # .1 = Communication related work # .1.2 = commObject # .1.2.1 = attributes # .1.2.2 = objectclass # .1.2.3 = syntax # # # Attribute Type Definitions # # The following attribute types are defined in this document: # # commUniqueId # commOwner # commPrivate # attributetype (0.0.8.350.1.1.2.1.1 NAME 'commUniqueId' DESC 'To hold the endpoints unique Id' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX '1.3.6.1.4.1.1466.115.121.1.26' ) attributetype (0.0.8.350.1.1.2.1.2 NAME 'commOwner' DESC 'Labeled URI to point back to the original owner' EQUALITY caseExactMatch SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' ) attributetype (0.0.8.350.1.1.2.1.3 NAME 'commPrivate' DESC 'To decide whether the entry is visible to world or not' SYNTAX '1.3.6.1.4.1.1466.115.121.1.26' ) # Object Class Definitions # # The following object classes are defined in this document: # # commObject # # commObject # objectclass (0.0.8.350.1.1.2.2.1 NAME 'commObject' DESC 'object that contains the Communication attributes' SUP top STRUCTURAL MUST commUniqueId MAY ( commOwner $ commPrivate ) ) h323plus/src/h323ep.cxx0000644000175000017500000026371611652540117013447 0ustar markmark/* * h323ep.cxx * * H.323 protocol handler * * H323Plus Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Contributor(s): ______________________________________. * * $Id: h323ep.cxx,v 1.64 2011/10/28 14:46:39 shorne Exp $ * */ #include #include #ifdef __GNUC__ #pragma implementation "h323ep.h" #endif #include "openh323buildopts.h" #include "h323ep.h" #include "h323pdu.h" #ifdef H323_H450 #include "h450/h450pdu.h" #endif #ifdef H323_H460 #include "h460/h460.h" #include "h225.h" #ifdef H323_H4609 #include "h460/h460_std9.h" #endif #ifdef H323_H46017 #include "h460/h460_std17.h" #endif #ifdef H323_H46018 #include "h460/h460_std18.h" #include "h460/h46018_h225.h" #endif #ifdef H323_H46023 #include "h460/h460_std23.h" #endif #ifdef H323_H460P #include "h460/h460_oid3.h" #endif #endif // H323_H460 #include "gkclient.h" #ifdef H323_T38 #include "t38proto.h" #endif #include "../version.h" #include "h323pluginmgr.h" #include #include #include #include #include #include #ifdef H323_H224 #include #endif #ifdef H323_FILE #include "h323filetransfer.h" #endif #ifdef H323_GNUGK #include "gnugknat.h" #endif #if defined(H323_RTP_AGGREGATE) || defined(H323_SIGNAL_AGGREGATE) #include #endif #ifndef IPTOS_PREC_CRITIC_ECP #define IPTOS_PREC_CRITIC_ECP (5 << 5) #endif #ifndef IPTOS_LOWDELAY #define IPTOS_LOWDELAY 0x10 #endif #include "opalglobalstatics.cxx" #include ////////////////////////////////////////////////////////////////////////////////////// BYTE H323EndPoint::defaultT35CountryCode = 9; // Country code for Australia BYTE H323EndPoint::defaultT35Extension = 0; WORD H323EndPoint::defaultManufacturerCode = 61; // Allocated by Australian Communications Authority, Oct 2000; ////////////////////////////////////////////////////////////////////////////////////// class H225CallThread : public PThread { PCLASSINFO(H225CallThread, PThread) public: H225CallThread(H323EndPoint & endpoint, H323Connection & connection, H323Transport & transport, const PString & alias, const H323TransportAddress & address); protected: void Main(); H323Connection & connection; H323Transport & transport; PString alias; H323TransportAddress address; #ifdef H323_SIGNAL_AGGREGATE PBoolean useAggregator; #endif }; class H323ConnectionsCleaner : public PThread { PCLASSINFO(H323ConnectionsCleaner, PThread) public: H323ConnectionsCleaner(H323EndPoint & endpoint); ~H323ConnectionsCleaner(); void Signal() { wakeupFlag.Signal(); } protected: void Main(); H323EndPoint & endpoint; PBoolean stopFlag; PSyncPoint wakeupFlag; }; #define new PNEW ///////////////////////////////////////////////////////////////////////////// PString OpalGetVersion() { #define AlphaCode "alpha" #define BetaCode "beta" #define ReleaseCode "." return psprintf("%u.%u%s%u", MAJOR_VERSION, MINOR_VERSION, BUILD_TYPE, BUILD_NUMBER); } unsigned OpalGetMajorVersion() { return MAJOR_VERSION; } unsigned OpalGetMinorVersion() { return MINOR_VERSION; } unsigned OpalGetBuildNumber() { return BUILD_NUMBER; } ///////////////////////////////////////////////////////////////////////////// H225CallThread::H225CallThread(H323EndPoint & endpoint, H323Connection & c, H323Transport & t, const PString & a, const H323TransportAddress & addr) : PThread(endpoint.GetSignallingThreadStackSize(), NoAutoDeleteThread, NormalPriority, "H225 Caller:%0x"), connection(c), transport(t), alias(a), address(addr) { #ifdef H323_SIGNAL_AGGREGATE useAggregator = endpoint.GetSignallingAggregator() != NULL; if (!useAggregator) #endif { transport.AttachThread(this); } Resume(); } void H225CallThread::Main() { PTRACE(3, "H225\tStarted call thread"); if (connection.Lock()) { H323Connection::CallEndReason reason = connection.SendSignalSetup(alias, address); // Special case, if we aborted the call then already will be unlocked if (reason != H323Connection::EndedByCallerAbort) connection.Unlock(); // Check if had an error, clear call if so if (reason != H323Connection::NumCallEndReasons) connection.ClearCall(reason); else { #ifdef H323_SIGNAL_AGGREGATE if (useAggregator) { connection.AggregateSignalChannel(&transport); SetAutoDelete(AutoDeleteThread); return; } #endif connection.HandleSignallingChannel(); } } } ///////////////////////////////////////////////////////////////////////////// H323ConnectionsCleaner::H323ConnectionsCleaner(H323EndPoint & ep) : PThread(ep.GetCleanerThreadStackSize(), NoAutoDeleteThread, NormalPriority, "H323 Cleaner"), endpoint(ep) { Resume(); stopFlag = FALSE; } H323ConnectionsCleaner::~H323ConnectionsCleaner() { stopFlag = TRUE; wakeupFlag.Signal(); PAssert(WaitForTermination(10000), "Cleaner thread did not terminate"); } void H323ConnectionsCleaner::Main() { PTRACE(3, "H323\tStarted cleaner thread"); for (;;) { wakeupFlag.Wait(); if (stopFlag) break; endpoint.CleanUpConnections(); } PTRACE(3, "H323\tStopped cleaner thread"); } ///////////////////////////////////////////////////////////////////////////// H323EndPoint::H323EndPoint() : #ifdef H323_AUDIO_CODECS #ifdef P_AUDIO soundChannelPlayDevice(PSoundChannel::GetDefaultDevice(PSoundChannel::Player)), soundChannelRecordDevice(PSoundChannel::GetDefaultDevice(PSoundChannel::Recorder)), #endif #endif signallingChannelConnectTimeout(0, 10, 0), // seconds signallingChannelCallTimeout(0, 0, 1), // Minutes controlChannelStartTimeout(0, 0, 2), // Minutes endSessionTimeout(0, 3), // Seconds masterSlaveDeterminationTimeout(0, 30), // Seconds capabilityExchangeTimeout(0, 30), // Seconds logicalChannelTimeout(0, 30), // Seconds requestModeTimeout(0, 30), // Seconds roundTripDelayTimeout(0, 10), // Seconds roundTripDelayRate(0, 0, 1), // Minutes noMediaTimeout(0, 0, 5), // Minutes gatekeeperRequestTimeout(0, 5), // Seconds rasRequestTimeout(0, 3) // Seconds #ifdef H323_H450 , callTransferT1(0,10), // Seconds callTransferT2(0,10), // Seconds callTransferT3(0,10), // Seconds callTransferT4(0,10), // Seconds callIntrusionT1(0,30), // Seconds callIntrusionT2(0,30), // Seconds callIntrusionT3(0,30), // Seconds callIntrusionT4(0,30), // Seconds callIntrusionT5(0,10), // Seconds callIntrusionT6(0,10), // Seconds nextH450CallIdentity(0) #endif { PString username = PProcess::Current().GetUserName(); if (username.IsEmpty()) username = PProcess::Current().GetName() & "User"; localAliasNames.AppendString(username); #if defined(P_AUDIO) && defined(_WIN32) PString DefaultAudioDriver = "WindowsMultimedia"; SetSoundChannelPlayDriver(DefaultAudioDriver); SetSoundChannelRecordDriver(DefaultAudioDriver); #endif #ifdef H323_AUDIO_CODECS autoStartReceiveAudio = autoStartTransmitAudio = TRUE; #endif #ifdef H323_VIDEO autoStartReceiveVideo = autoStartTransmitVideo = TRUE; #ifdef H323_H239 autoStartReceiveExtVideo = autoStartTransmitExtVideo = FALSE; #endif #endif #ifdef H323_T38 autoStartReceiveFax = autoStartTransmitFax = FALSE; #endif #ifdef H323_AUDIO_CODECS minAudioJitterDelay = 50; // milliseconds maxAudioJitterDelay = 250; // milliseconds #endif autoCallForward = TRUE; disableFastStart = FALSE; disableH245Tunneling = FALSE; disableH245inSetup = TRUE; disableH245QoS = TRUE; disableDetectInBandDTMF = FALSE; canDisplayAmountString = FALSE; canEnforceDurationLimit = TRUE; #ifdef H323_H450 callIntrusionProtectionLevel = 3; //H45011_CIProtectionLevel::e_fullProtection; #endif #ifdef H323_AUDIO_CODECS defaultSilenceDetection = H323AudioCodec::AdaptiveSilenceDetection; #endif defaultSendUserInputMode = H323Connection::SendUserInputAsString; terminalType = e_TerminalOnly; initialBandwidth = 100000; // Standard 10base LAN in 100's of bits/sec clearCallOnRoundTripFail = FALSE; t35CountryCode = defaultT35CountryCode; // Country code for Australia t35Extension = defaultT35Extension; manufacturerCode = defaultManufacturerCode; // Allocated by Australian Communications Authority, Oct 2000 rtpIpPorts.current = rtpIpPorts.base = 5001; rtpIpPorts.max = 5999; // use dynamic port allocation by default tcpPorts.current = tcpPorts.base = tcpPorts.max = 0; udpPorts.current = udpPorts.base = udpPorts.max = 0; #ifdef P_STUN natMethods = new PNatStrategy(); stun = NULL; disableSTUNTranslate = FALSE; #endif #ifdef H323_H46019M defaultMultiRTPPort = 2776; rtpMuxID.current = rtpMuxID.base = PRandom::Number(999900); rtpMuxID.max = (unsigned)1000000; #endif #ifdef _WIN32 # if defined(H323_AUDIO_CODECS) && defined(P_AUDIO) // Windows MultiMedia stuff seems to need greater depth due to enormous // latencies in its operation, need to use DirectSound maybe? // for Win2000 and XP you need 5, for Vista you need 10! so set to 10! -SH soundChannelBuffers = 10; # endif rtpIpTypeofService = IPTOS_PREC_CRITIC_ECP|IPTOS_LOWDELAY; #else # ifdef H323_AUDIO_CODECS #ifdef P_AUDIO // Should only need double buffering for Unix platforms soundChannelBuffers = 2; #endif # endif // Don't use IPTOS_PREC_CRITIC_ECP on Unix platforms as then need to be root rtpIpTypeofService = IPTOS_LOWDELAY; #endif tcpIpTypeofService = IPTOS_LOWDELAY; masterSlaveDeterminationRetries = 10; gatekeeperRequestRetries = 2; rasRequestRetries = 2; sendGRQ = TRUE; cleanerThreadStackSize = 30000; listenerThreadStackSize = 30000; signallingThreadStackSize = 30000; controlThreadStackSize = 30000; logicalThreadStackSize = 30000; rasThreadStackSize = 30000; jitterThreadStackSize = 30000; useJitterBuffer = true; #ifdef H323_SIGNAL_AGGREGATE signallingAggregationSize = 25; signallingAggregator = NULL; #endif #ifdef H323_RTP_AGGREGATE rtpAggregationSize = 10; rtpAggregator = NULL; #endif channelThreadPriority = PThread::HighestPriority; gatekeeper = NULL; connectionsActive.DisallowDeleteObjects(); #ifdef H323_H450 secondaryConnectionsActive.DisallowDeleteObjects(); #endif connectionsCleaner = new H323ConnectionsCleaner(*this); srand((unsigned)time(NULL)+clock()); #ifndef DISABLE_CALLAUTH SetEPSecurityPolicy(SecNone); SetEPCredentials(PString(),PString()); isSecureCall = FALSE; #endif #ifdef H323_H460 disableH460 = false; #ifdef H323_H46018 // We must set time to live to 30 to ensure pinhole open registrationTimeToLive = PTimeInterval(0, 30); m_h46018enabled = true; #endif #ifdef H323_H46023 m_h46023enabled = true; #endif #ifdef H323_H460P presenceHandler = NULL; #endif #endif #ifdef H323_AEC enableAEC = false; #endif #ifdef H323_GNUGK gnugk = NULL; #endif m_useH225KeepAlive = PFalse; m_useH245KeepAlive = PFalse; PTRACE(3, "H323\tCreated endpoint."); } H323EndPoint::~H323EndPoint() { #if defined(H323_RTP_AGGREGATE) || defined (H323_SIGNAL_AGGREGATE) // delete aggregators { PWaitAndSignal m(connectionsMutex); #ifdef H323_RTP_AGGREGATE if (rtpAggregator != NULL) { delete rtpAggregator; rtpAggregator = NULL; } #endif #ifdef H323_SIGNAL_AGGREGATE if (signallingAggregator != NULL) { delete signallingAggregator; signallingAggregator = NULL; } #endif } #endif // And shut down the gatekeeper (if there was one) RemoveGatekeeper(); #if H323_GNUGK delete gnugk; #endif // Shut down the listeners as soon as possible to avoid race conditions listeners.RemoveAll(); // Clear any pending calls on this endpoint ClearAllCalls(); // Shut down the cleaner thread delete connectionsCleaner; // Clean up any connections that the cleaner thread missed CleanUpConnections(); #ifdef P_STUN delete natMethods; #endif #ifdef H323_H460P delete presenceHandler; #endif PTRACE(3, "H323\tDeleted endpoint."); } void H323EndPoint::SetEndpointTypeInfo(H225_EndpointType & info) const { info.IncludeOptionalField(H225_EndpointType::e_vendor); SetVendorIdentifierInfo(info.m_vendor); switch (terminalType) { case e_TerminalOnly : case e_TerminalAndMC : info.IncludeOptionalField(H225_EndpointType::e_terminal); break; case e_GatewayOnly : case e_GatewayAndMC : case e_GatewayAndMCWithDataMP : case e_GatewayAndMCWithAudioMP : case e_GatewayAndMCWithAVMP : info.IncludeOptionalField(H225_EndpointType::e_gateway); if (SetGatewaySupportedProtocol(info.m_gateway.m_protocol)) info.m_gateway.IncludeOptionalField(H225_GatewayInfo::e_protocol); break; case e_GatekeeperOnly : case e_GatekeeperWithDataMP : case e_GatekeeperWithAudioMP : case e_GatekeeperWithAVMP : info.IncludeOptionalField(H225_EndpointType::e_gatekeeper); break; case e_MCUOnly : case e_MCUWithDataMP : case e_MCUWithAudioMP : case e_MCUWithAVMP : info.IncludeOptionalField(H225_EndpointType::e_mcu); info.m_mc = TRUE; if (SetGatewaySupportedProtocol(info.m_mcu.m_protocol)) info.m_mcu.IncludeOptionalField(H225_McuInfo::e_protocol); } } PBoolean H323EndPoint::SetGatewaySupportedProtocol(H225_ArrayOf_SupportedProtocols & protocols) const { PStringList prefixes; if (OnSetGatewayPrefixes(prefixes)) { H225_SupportedProtocols proto; proto.SetTag(H225_SupportedProtocols::e_h323); H225_H323Caps & caps = proto; caps.IncludeOptionalField(H225_H323Caps::e_supportedPrefixes); H225_ArrayOf_SupportedPrefix & pre = caps.m_supportedPrefixes; pre.SetSize(prefixes.GetSize()); for (PINDEX i=0; i < prefixes.GetSize(); i++) { H225_SupportedPrefix p; H225_AliasAddress & alias = p.m_prefix; H323SetAliasAddress(prefixes[i],alias); pre[i] = p; } protocols.SetSize(1); protocols[0] = proto; return TRUE; } return FALSE; } PBoolean H323EndPoint::OnSetGatewayPrefixes(PStringList & /*prefixes*/) const { return FALSE; } void H323EndPoint::SetVendorIdentifierInfo(H225_VendorIdentifier & info) const { SetH221NonStandardInfo(info.m_vendor); info.IncludeOptionalField(H225_VendorIdentifier::e_productId); info.m_productId = PProcess::Current().GetManufacturer() & PProcess::Current().GetName(); info.m_productId.SetSize(info.m_productId.GetSize()+2); info.IncludeOptionalField(H225_VendorIdentifier::e_versionId); info.m_versionId = PProcess::Current().GetVersion(TRUE) + " (H323plus v" + OpalGetVersion() + ')'; info.m_versionId.SetSize(info.m_versionId.GetSize()+2); } void H323EndPoint::SetH221NonStandardInfo(H225_H221NonStandard & info) const { info.m_t35CountryCode = t35CountryCode; info.m_t35Extension = t35Extension; info.m_manufacturerCode = manufacturerCode; } H323Capability * H323EndPoint::FindCapability(const H245_Capability & cap) const { return capabilities.FindCapability(cap); } H323Capability * H323EndPoint::FindCapability(const H245_DataType & dataType) const { return capabilities.FindCapability(dataType); } H323Capability * H323EndPoint::FindCapability(H323Capability::MainTypes mainType, unsigned subType) const { return capabilities.FindCapability(mainType, subType); } void H323EndPoint::AddCapability(H323Capability * capability) { capabilities.Add(capability); } PINDEX H323EndPoint::SetCapability(PINDEX descriptorNum, PINDEX simultaneousNum, H323Capability * capability) { return capabilities.SetCapability(descriptorNum, simultaneousNum, capability); } PBoolean H323EndPoint::RemoveCapability(H323Capability::MainTypes capabilityType) { return capabilities.RemoveCapability(capabilityType); } #ifdef H323_VIDEO PBoolean H323EndPoint::SetVideoEncoder(unsigned frameWidth, unsigned frameHeight, unsigned frameRate) { return capabilities.SetVideoEncoder(frameWidth, frameHeight, frameRate); } PBoolean H323EndPoint::SetVideoFrameSize(H323Capability::CapabilityFrameSize frameSize, int frameUnits) { return capabilities.SetVideoFrameSize(frameSize,frameUnits); } #endif PINDEX H323EndPoint::AddAllCapabilities(PINDEX descriptorNum, PINDEX simultaneous, const PString & name) { PINDEX reply = simultaneous; reply = capabilities.AddAllCapabilities(descriptorNum, simultaneous, name); #ifdef H323_VIDEO #ifdef H323_H239 AddAllExtendedVideoCapabilities(descriptorNum, simultaneous); #endif #endif return reply; } void H323EndPoint::AddAllUserInputCapabilities(PINDEX descriptorNum, PINDEX simultaneous) { H323_UserInputCapability::AddAllCapabilities(capabilities, descriptorNum, simultaneous); } #ifdef H323_VIDEO #ifdef H323_H239 PBoolean H323EndPoint::OpenExtendedVideoSession(const PString & token) { H323Connection * connection = FindConnectionWithLock(token); PBoolean success = FALSE; if (connection != NULL) { success = connection->OpenH239Channel(); connection->Unlock(); } return success; } PBoolean H323EndPoint::OpenExtendedVideoSession(const PString & token,H323ChannelNumber & /*num*/) { return OpenExtendedVideoSession(token); } PBoolean H323EndPoint::CloseExtendedVideoSession( const PString & token ) { H323Connection * connection = FindConnectionWithLock(token); PBoolean success = FALSE; if (connection != NULL) { success = connection->CloseH239Channel(); connection->Unlock(); } return success; } PBoolean H323EndPoint::CloseExtendedVideoSession( const PString & token, const H323ChannelNumber & /*num*/ ) { return CloseExtendedVideoSession(token); } void H323EndPoint::AddAllExtendedVideoCapabilities(PINDEX descriptorNum, PINDEX simultaneous) { H323ExtendedVideoCapability::AddAllCapabilities(capabilities, descriptorNum, simultaneous); } #endif // H323_H239 #endif // H323_VIDEO void H323EndPoint::RemoveCapabilities(const PStringArray & codecNames) { capabilities.Remove(codecNames); } void H323EndPoint::ReorderCapabilities(const PStringArray & preferenceOrder) { capabilities.Reorder(preferenceOrder); } PBoolean H323EndPoint::UseGatekeeper(const PString & address, const PString & identifier, const PString & localAddress) { if (gatekeeper != NULL) { PBoolean same = TRUE; if (!address) same = gatekeeper->GetTransport().GetRemoteAddress().IsEquivalent(address); if (!same && !identifier) same = gatekeeper->GetIdentifier() == identifier; if (!same && !localAddress) same = gatekeeper->GetTransport().GetLocalAddress().IsEquivalent(localAddress); if (same) { PTRACE(2, "H323\tUsing existing gatekeeper " << *gatekeeper); return TRUE; } } H323Transport * transport = NULL; if (!localAddress.IsEmpty()) { H323TransportAddress iface(localAddress); PIPSocket::Address ip; WORD port = H225_RAS::DefaultRasUdpPort; if (iface.GetIpAndPort(ip, port)) transport = new H323TransportUDP(*this, ip, port); } if (address.IsEmpty()) { if (identifier.IsEmpty()) return DiscoverGatekeeper(transport); else return LocateGatekeeper(identifier, transport); } else { if (identifier.IsEmpty()) return SetGatekeeper(address, transport); else return SetGatekeeperZone(address, identifier, transport); } } PBoolean H323EndPoint::SetGatekeeper(const PString & address, H323Transport * transport) { H323Gatekeeper * gk = InternalCreateGatekeeper(transport); return InternalRegisterGatekeeper(gk, gk->DiscoverByAddress(address)); } PBoolean H323EndPoint::SetGatekeeperZone(const PString & address, const PString & identifier, H323Transport * transport) { H323Gatekeeper * gk = InternalCreateGatekeeper(transport); return InternalRegisterGatekeeper(gk, gk->DiscoverByNameAndAddress(identifier, address)); } PBoolean H323EndPoint::LocateGatekeeper(const PString & identifier, H323Transport * transport) { H323Gatekeeper * gk = InternalCreateGatekeeper(transport); return InternalRegisterGatekeeper(gk, gk->DiscoverByName(identifier)); } PBoolean H323EndPoint::DiscoverGatekeeper(H323Transport * transport) { H323Gatekeeper * gk = InternalCreateGatekeeper(transport); return InternalRegisterGatekeeper(gk, gk->DiscoverAny()); } H323Gatekeeper * H323EndPoint::InternalCreateGatekeeper(H323Transport * transport) { RemoveGatekeeper(H225_UnregRequestReason::e_reregistrationRequired); if (transport == NULL) transport = new H323TransportUDP(*this, PIPSocket::Address::GetAny(4)); H323Gatekeeper * gk = CreateGatekeeper(transport); gk->SetPassword(gatekeeperPassword); return gk; } PBoolean H323EndPoint::InternalRegisterGatekeeper(H323Gatekeeper * gk, PBoolean discovered) { if (discovered) { if (gk->RegistrationRequest()) { gatekeeper = gk; return TRUE; } // RRQ was rejected continue trying gatekeeper = gk; } else // Only stop listening if the GRQ was rejected delete gk; return FALSE; } H323Gatekeeper * H323EndPoint::CreateGatekeeper(H323Transport * transport) { return new H323Gatekeeper(*this, transport); } PBoolean H323EndPoint::IsRegisteredWithGatekeeper() const { if (gatekeeper == NULL) return FALSE; return gatekeeper->IsRegistered(); } PBoolean H323EndPoint::RemoveGatekeeper(int reason) { PBoolean ok = TRUE; if (gatekeeper == NULL) return ok; ClearAllCalls(); if (gatekeeper->IsRegistered()) // If we are registered send a URQ ok = gatekeeper->UnregistrationRequest(reason); delete gatekeeper; gatekeeper = NULL; return ok; } void H323EndPoint::ForceGatekeeperReRegistration() { if (gatekeeper != NULL) RegInvokeReRegistration(); } void H323EndPoint::SetGatekeeperPassword(const PString & password) { gatekeeperPassword = password; if (gatekeeper != NULL) { gatekeeper->SetPassword(gatekeeperPassword); if (gatekeeper->IsRegistered()) // If we are registered send a URQ gatekeeper->UnregistrationRequest(H225_UnregRequestReason::e_reregistrationRequired); InternalRegisterGatekeeper(gatekeeper, TRUE); } } PBoolean H323EndPoint::GatekeeperCheckIP(const H323TransportAddress & /*oldAddr*/, H323TransportAddress & /*newaddress*/) { return FALSE; } void H323EndPoint::OnAdmissionRequest(H323Connection & /*connection*/) { } void H323EndPoint::OnGatekeeperConfirm() { } void H323EndPoint::OnGatekeeperReject() { } void H323EndPoint::OnRegistrationConfirm(const H323TransportAddress & /*rasAddress*/) { } void H323EndPoint::OnRegistrationReject() { } void H323EndPoint::OnUnRegisterRequest() { } void H323EndPoint::OnUnRegisterConfirm() { } void H323EndPoint::OnRegisterTTLFail() { } H235Authenticators H323EndPoint::CreateAuthenticators() { H235Authenticators authenticators; PFactory::KeyList_T keyList = PFactory::GetKeyList(); PFactory::KeyList_T::const_iterator r; for (r = keyList.begin(); r != keyList.end(); ++r) { H235Authenticator * Auth = PFactory::CreateInstance(*r); if ((Auth->GetApplication() == H235Authenticator::GKAdmission) || (Auth->GetApplication() == H235Authenticator::AnyApplication)) authenticators.Append(Auth); } return authenticators; } #ifndef DISABLE_CALLAUTH H235Authenticators H323EndPoint::CreateEPAuthenticators() { H235Authenticators authenticators; PString username; PString password; PFactory::KeyList_T keyList = PFactory::GetKeyList(); PFactory::KeyList_T::const_iterator r; for (r = keyList.begin(); r != keyList.end(); ++r) { H235Authenticator * Auth = PFactory::CreateInstance(*r); if ((Auth->GetApplication() == H235Authenticator::EPAuthentication || Auth->GetApplication() == H235Authenticator::AnyApplication)) { if (GetEPCredentials(password, username)) { Auth->SetLocalId(username); Auth->SetPassword(password); authenticators.Append(Auth); } } else authenticators.Append(Auth); } SetEPCredentials(PString(),PString()); return authenticators; } PBoolean H323EndPoint::GetEPCredentials(PString & password, PString & username) { if (EPSecurityPassword.IsEmpty()) return FALSE; else password = EPSecurityPassword; if (EPSecurityUserName.IsEmpty()) username = GetLocalUserName(); else username = EPSecurityUserName; return TRUE; } void H323EndPoint::SetEPCredentials(PString password, PString username) { EPSecurityPassword = password; EPSecurityUserName = username; } void H323EndPoint::SetEPSecurityPolicy(EPSecurityPolicy policy) { CallAuthPolicy = policy; } H323EndPoint::EPSecurityPolicy H323EndPoint::GetEPSecurityPolicy() { return CallAuthPolicy; } H235AuthenticatorList H323EndPoint::GetAuthenticatorList() { return EPAuthList; } PBoolean H323EndPoint::OnCallAuthentication(const PString & username, PString & password) { if (EPAuthList.HasUserName(username)) { EPAuthList.LoadPassword(username, password); return TRUE; } return FALSE; } H323Connection * H323EndPoint::MakeAuthenticatedCall(const PString & remoteParty, const PString & UserName, const PString & Password, PString & token, void * userData) { isSecureCall = TRUE; SetEPCredentials(Password,UserName); return MakeCall(remoteParty, token, userData); } #endif #ifdef H323_H460 H323Connection * H323EndPoint::MakeSupplimentaryCall ( const PString & remoteParty, ///* Remote party to call PString & token, ///* String to receive token for connection void * userData ///* user data to pass to CreateConnection ) { return MakeCall(remoteParty, token, userData,true); } #endif PBoolean H323EndPoint::StartListeners(const H323TransportAddressArray & ifaces) { if (ifaces.IsEmpty()) return StartListener("*"); PINDEX i; for (i = 0; i < listeners.GetSize(); i++) { PBoolean remove = TRUE; for (PINDEX j = 0; j < ifaces.GetSize(); j++) { if (listeners[i].GetTransportAddress().IsEquivalent(ifaces[j])) { remove = FALSE; break; } } if (remove) { PTRACE(3, "H323\tRemoving listener " << listeners[i]); listeners.RemoveAt(i--); } } for (i = 0; i < ifaces.GetSize(); i++) { if (!ifaces[i]) StartListener(ifaces[i]); } return listeners.GetSize() > 0; } PBoolean H323EndPoint::StartListener(const H323TransportAddress & iface) { H323Listener * listener; if (iface.IsEmpty()) listener = new H323ListenerTCP(*this, PIPSocket::GetDefaultIpAny(), DefaultTcpPort); else listener = iface.CreateListener(*this); if (H323EndPoint::StartListener(listener)) return TRUE; PTRACE(1, "H323\tCould not start listener: " << iface); delete listener; return FALSE; } PBoolean H323EndPoint::StartListener(H323Listener * listener) { if (listener == NULL) return FALSE; for (PINDEX i = 0; i < listeners.GetSize(); i++) { if (listeners[i].GetTransportAddress() == listener->GetTransportAddress()) { PTRACE(2, "H323\tAlready have listener for " << *listener); delete listener; return TRUE; } } // as the listener is not open, this will have the effect of immediately // stopping the listener thread. This is good - it means that the // listener Close function will appear to have stopped the thread if (!listener->Open()) { listener->Resume(); // set the thread running so we can delete it later return FALSE; } PTRACE(3, "H323\tStarted listener " << *listener); listeners.Append(listener); listener->Resume(); return TRUE; } PBoolean H323EndPoint::RemoveListener(H323Listener * listener) { if (listener != NULL) { PTRACE(3, "H323\tRemoving listener " << *listener); return listeners.Remove(listener); } PTRACE(3, "H323\tRemoving all listeners"); listeners.RemoveAll(); return TRUE; } H323TransportAddressArray H323EndPoint::GetInterfaceAddresses(PBoolean excludeLocalHost, H323Transport * associatedTransport) { return H323GetInterfaceAddresses(listeners, excludeLocalHost, associatedTransport); } H323Connection * H323EndPoint::MakeCall(const PString & remoteParty, PString & token, void * userData, PBoolean supplimentary ) { return MakeCall(remoteParty, NULL, token, userData, supplimentary); } H323Connection * H323EndPoint::MakeCall(const PString & remoteParty, H323Transport * transport, PString & token, void * userData, PBoolean supplimentary ) { token = PString::Empty(); PStringList Addresses; if (!ResolveCallParty(remoteParty, Addresses)) return NULL; H323Connection * connection = NULL; for (PINDEX i = 0; i < Addresses.GetSize(); i++) { connection = InternalMakeCall(PString::Empty(), PString::Empty(), UINT_MAX, Addresses[i], transport, token, userData, supplimentary ); if (connection != NULL) { connection->Unlock(); break; } } return connection; } H323Connection * H323EndPoint::MakeCallLocked(const PString & remoteParty, PString & token, void * userData, H323Transport * transport) { token = PString::Empty(); PStringList Addresses; if (!ResolveCallParty(remoteParty, Addresses)) return NULL; H323Connection * connection = NULL; for (PINDEX i = 0; i < Addresses.GetSize(); i++) { connection = InternalMakeCall(PString::Empty(), PString::Empty(), UINT_MAX, Addresses[i], transport, token, userData); if (connection != NULL) break; } return connection; } H323Connection * H323EndPoint::InternalMakeCall(const PString & trasferFromToken, const PString & callIdentity, unsigned capabilityLevel, const PString & remoteParty, H323Transport * transport, PString & newToken, void * userData, PBoolean supplimentary ) { PTRACE(2, "H323\tMaking call to: " << remoteParty); PString alias; H323TransportAddress address; if (!ParsePartyName(remoteParty, alias, address)) { PTRACE(2, "H323\tCould not parse \"" << remoteParty << '"'); return NULL; } if (transport == NULL) { // Restriction: the call must be made on the same transport as the one // that the gatekeeper is using. if (gatekeeper != NULL) transport = gatekeeper->GetTransport().GetRemoteAddress().CreateTransport(*this); // assume address is an IP address/hostname else transport = address.CreateTransport(*this); if (transport == NULL) { PTRACE(1, "H323\tInvalid transport in \"" << remoteParty << '"'); return NULL; } } H323Connection * connection; connectionsMutex.Wait(); unsigned lastReference; if (newToken.IsEmpty()) { do { lastReference = Q931::GenerateCallReference(); newToken = BuildConnectionToken(*transport, lastReference, FALSE); } while (connectionsActive.Contains(newToken)); } else { lastReference = newToken.Mid(newToken.Find('/')+1).AsUnsigned(); // Move old connection on token to new value and flag for removal PString adjustedToken; unsigned tieBreaker = 0; do { adjustedToken = newToken + "-replaced"; adjustedToken.sprintf("-%u", ++tieBreaker); } while (connectionsActive.Contains(adjustedToken)); connectionsActive.SetAt(adjustedToken, connectionsActive.RemoveAt(newToken)); connectionsToBeCleaned += adjustedToken; PTRACE(3, "H323\tOverwriting call " << newToken << ", renamed to " << adjustedToken); } connectionsMutex.Signal(); connection = CreateConnection(lastReference, userData, transport, NULL); if (connection == NULL) { PTRACE(1, "H323\tCreateConnection returned NULL"); connectionsMutex.Signal(); return NULL; } if (supplimentary) connection->SetNonCallConnection(); connection->Lock(); connectionsMutex.Wait(); connectionsActive.SetAt(newToken, connection); connectionsMutex.Signal(); connection->AttachSignalChannel(newToken, transport, FALSE); #ifdef H323_H450 if (capabilityLevel == UINT_MAX) connection->HandleTransferCall(trasferFromToken, callIdentity); else { connection->HandleIntrudeCall(trasferFromToken, callIdentity); connection->IntrudeCall(capabilityLevel); } #endif PTRACE(3, "H323\tCreated new connection: " << newToken); new H225CallThread(*this, *connection, *transport, alias, address); return connection; } #if P_DNS struct LookupRecord { enum { CallDirect, LRQ }; int type; PIPSocket::Address addr; WORD port; }; /* static PBoolean FindSRVRecords(std::vector & recs, const PString & domain, int type, const PString & srv) { PDNS::SRVRecordList srvRecords; PString srvLookupStr = srv + domain; PBoolean found = PDNS::GetRecords(srvLookupStr, srvRecords); if (found) { PDNS::SRVRecord * recPtr = srvRecords.GetFirst(); while (recPtr != NULL) { LookupRecord rec; rec.addr = recPtr->hostAddress; rec.port = recPtr->port; rec.type = type; recs.push_back(rec); recPtr = srvRecords.GetNext(); PTRACE(4, "H323\tFound " << rec.addr << ":" << rec.port << " with SRV " << srv << " using domain " << domain); } } return found; } static PBoolean FindRoutes(const PString & domain, WORD port, std::vector & routes) { PBoolean hasGK = FindSRVRecords( routes, domain, LookupRecord::LRQ, "_h323ls._udp."); hasGK = hasGK || FindSRVRecords(routes, domain, LookupRecord::LRQ, "_h323rs._udp."); FindSRVRecords( routes, domain, LookupRecord::CallDirect, "_h323cs._tcp."); // see if the domain is actually a host PIPSocket::Address addr; if (PIPSocket::GetHostAddress(domain, addr)) { LookupRecord rec; rec.addr = addr; rec.port = port; rec.type = LookupRecord::CallDirect; PTRACE(4, "H323\tDomain " << domain << " is a host - using as call signal address"); routes.push_back(rec); } if (routes.size() != 0) { PDNS::MXRecordList mxRecords; if (PDNS::GetRecords(domain, mxRecords)) { PDNS::MXRecord * recPtr = mxRecords.GetFirst(); while (recPtr != NULL) { LookupRecord rec; rec.addr = recPtr->hostAddress; rec.port = 1719; rec.type = LookupRecord::LRQ; routes.push_back(rec); recPtr = mxRecords.GetNext(); PTRACE(4, "H323\tFound " << rec.addr << ":" << rec.port << " with MX for domain " << domain); } } } return routes.size() != 0; } */ #endif PBoolean H323EndPoint::ResolveCallParty(const PString & _remoteParty, PStringList & addresses) { PString remoteParty = _remoteParty; #if P_DNS // if there is no gatekeeper, if (gatekeeper == NULL) { //if there is no '@', and there is no URL scheme, then attempt to use ENUM if ((_remoteParty.Find(':') == P_MAX_INDEX) && (remoteParty.Find('@') == P_MAX_INDEX)) { PString number = _remoteParty; if (number.Left(5) *= "h323:") number = number.Mid(5); PINDEX i; for (i = 0; i < number.GetLength(); ++i) if (!isdigit(number[i])) break; if (i >= number.GetLength()) { PString str; if (PDNS::ENUMLookup(number, "E2U+h323", str)) { if ((str.Find("//1") != P_MAX_INDEX) && (str.Find('@') != P_MAX_INDEX)) { remoteParty = "h323:" + number + str.Mid(str.Find('@')-1); } else { remoteParty = str; } PTRACE(4, "H323\tENUM converted remote party " << _remoteParty << " to " << remoteParty); } else { PTRACE(4, "H323\tENUM Cannot resolve remote party " << _remoteParty); return false; } } } // attempt a DNS SRV lookup to detect a call signalling entry PBoolean found = FALSE; if (remoteParty.Find('@') != P_MAX_INDEX) { PString number = remoteParty; if (number.Left(5) != "h323:") number = "h323:" + number; PStringList str; if (!found) str.RemoveAll(); if (!found && (PDNS::LookupSRV(number,"_h323cs._tcp.",str))) { for (PINDEX i=0; iDiscoverByAddress(gkAddr); if (ok) ok = gk->LocationRequest(remoteParty, newAddr); delete gk; if (ok) { PTRACE(3, "H323\tDNS SRV LR of \"" << remoteParty << "\" on gk " << gkAddr << " found " << newAddr); addresses.AppendString(newAddr); found = TRUE; } } } */ if (!found) { PTRACE(4, "H323\tDNS SRV Cannot resolve remote party " << remoteParty); addresses = PStringList(remoteParty); } } else { addresses = PStringList(remoteParty); } return TRUE; } #endif addresses = PStringList(remoteParty); return TRUE; } PBoolean H323EndPoint::ParsePartyName(const PString & _remoteParty, PString & alias, H323TransportAddress & address) { PString remoteParty = _remoteParty; // Support [address]##[Alias] dialing PINDEX hash = _remoteParty.Find("##"); if (hash != P_MAX_INDEX) { remoteParty = "h323:" + _remoteParty.Mid(hash+2) + "@" + _remoteParty.Left(hash); PTRACE(4, "H323\tConverted " << _remoteParty << " to " << remoteParty); } //check if IPv6 address PINDEX ipv6 = remoteParty.Find("::"); if (ipv6 != P_MAX_INDEX) { PINDEX at = remoteParty.Find('@'); if (at != P_MAX_INDEX) { remoteParty = remoteParty.Left(at+1) + "[" + remoteParty.Mid(at+1) + "]"; } else remoteParty = "[" + remoteParty + "]"; } // convert the remote party string to a URL, with a default URL of "h323:" PURL url(remoteParty, "h323"); // if the scheme does not match the prefix of the remote party, then // the URL parser got confused, so force the URL to be of type "h323" if ((remoteParty.Find('@') == P_MAX_INDEX) && (remoteParty.NumCompare(url.GetScheme()) != EqualTo)) { if (gatekeeper == NULL) url.Parse("h323:@" + remoteParty); else url.Parse("h323:" + remoteParty); } // get the various parts of the name PString hostOnly = PString(); if (remoteParty.Find('@') != P_MAX_INDEX) { if (gatekeeper != NULL) alias = url.AsString(); else { alias = remoteParty.Left(remoteParty.Find('@')); hostOnly = remoteParty.Mid(remoteParty.Find('@')+1); } } else { alias = url.GetUserName(); hostOnly = url.GetHostName(); } address = hostOnly; // make sure the address contains the port, if not default if (!address && (url.GetPort() != 0)) address.sprintf(":%u", url.GetPort()); if (alias.IsEmpty() && address.IsEmpty()) { PTRACE(1, "H323\tAttempt to use invalid URL \"" << remoteParty << '"'); return FALSE; } PBoolean gatekeeperSpecified = FALSE; PBoolean gatewaySpecified = FALSE; PCaselessString type = url.GetParamVars()("type"); if (url.GetScheme() == "callto") { // Do not yet support ILS if (type == "directory") { #if P_LDAP PString server = url.GetHostName(); if (server.IsEmpty()) server = ilsServer; if (server.IsEmpty()) return FALSE; PILSSession ils; if (!ils.Open(server, url.GetPort())) { PTRACE(1, "H323\tCould not open ILS server at \"" << server << "\" - " << ils.GetErrorText()); return FALSE; } PILSSession::RTPerson person; if (!ils.SearchPerson(alias, person)) { PTRACE(1, "H323\tCould not find " << server << '/' << alias << ": " << ils.GetErrorText()); return FALSE; } if (!person.sipAddress.IsValid()) { PTRACE(1, "H323\tILS user " << server << '/' << alias << " does not have a valid IP address"); return FALSE; } // Get the IP address address = H323TransportAddress(person.sipAddress); // Get the port if provided for (PINDEX i = 0; i < person.sport.GetSize(); i++) { if (person.sport[i] != 1503) { // Dont use the T.120 port address = H323TransportAddress(person.sipAddress, person.sport[i]); break; } } alias = PString::Empty(); // No alias for ILS lookup, only host return TRUE; #else return FALSE; #endif } if (url.GetParamVars().Contains("gateway")) gatewaySpecified = TRUE; } else if (url.GetScheme() == "h323") { if (type == "gw") gatewaySpecified = TRUE; else if (type == "gk") gatekeeperSpecified = TRUE; else if (!type) { PTRACE(1, "H323\tUnsupported host type \"" << type << "\" in h323 URL"); return FALSE; } } // User explicitly asked to use a GK for lookup if (gatekeeperSpecified) { if (alias.IsEmpty()) { PTRACE(1, "H323\tAttempt to use explicit gatekeeper without alias!"); return FALSE; } if (address.IsEmpty()) { PTRACE(1, "H323\tAttempt to use explicit gatekeeper without address!"); return FALSE; } H323TransportAddress gkAddr = address; PTRACE(3, "H323\tLooking for \"" << alias << "\" on gatekeeper at " << gkAddr); H323Gatekeeper * gk = CreateGatekeeper(new H323TransportUDP(*this)); PBoolean ok = gk->DiscoverByAddress(gkAddr); if (ok) { ok = gk->LocationRequest(alias, address); if (ok) { PTRACE(3, "H323\tLocation Request of \"" << alias << "\" on gk " << gkAddr << " found " << address); } else { PTRACE(1, "H323\tLocation Request failed for \"" << alias << "\" on gk " << gkAddr); } } else { PTRACE(1, "H323\tLocation Request discovery failed for gk " << gkAddr); } delete gk; return ok; } // User explicitly said to use a gw, or we do not have a gk to do look up if (gatekeeper == NULL || gatewaySpecified) { // If URL did not have a host, but user said to use gw, or we do not have // a gk to do a lookup so we MUST have a host, use alias must be host if (address.IsEmpty()) { address = alias; alias = PString::Empty(); return TRUE; } /* #if P_DNS // if we have an address and the correct scheme, then check DNS if (!address && (url.GetScheme() *= "h323")) { std::vector routes; if (FindRoutes(hostOnly, url.GetPort(), routes)) { std::vector::const_iterator r; for (r = routes.begin(); r != routes.end(); ++r) { const LookupRecord & rec = *r; switch (rec.type) { case LookupRecord::CallDirect: address = H323TransportAddress(rec.addr, rec.port); PTRACE(3, "H323\tParty name \"" << url << "\" mapped to \"" << alias << "@" << address); return TRUE; break; case LookupRecord::LRQ: { H323TransportAddress newAddr, gkAddr(rec.addr, rec.port); H323Gatekeeper * gk = CreateGatekeeper(new H323TransportUDP(*this)); PBoolean ok = gk->DiscoverByAddress(gkAddr); if (ok) ok = gk->LocationRequest(alias, newAddr); delete gk; if (ok) { address = newAddr; PTRACE(3, "H323\tLocation Request of \"" << alias << "\" on gk " << gkAddr << " found " << address); return TRUE; } } break; default: break; } } } } #endif // P_DNS */ } if (!address) return TRUE; // We have a gk and user did not explicitly supply a host, so lets // do a check to see if it is an IP address or hostname if (alias.FindOneOf("$.:[") != P_MAX_INDEX) { H323TransportAddress test = alias; PIPSocket::Address ip; if (test.GetIpAddress(ip) && ip.IsValid() && !ip.IsAny()) { // The alias was a valid internet address, use it as such alias = PString::Empty(); address = test; } } return TRUE; } #ifdef H323_H450 H323Connection * H323EndPoint::SetupTransfer(const PString & oldToken, const PString & callIdentity, const PString & remoteParty, PString & newToken, void * userData) { newToken = PString::Empty(); PStringList Addresses; if (!ResolveCallParty(remoteParty, Addresses)) return NULL; H323Connection * connection = NULL; for (PINDEX i = 0; i < Addresses.GetSize(); i++) { connection = InternalMakeCall(oldToken, callIdentity, UINT_MAX, Addresses[i], NULL, newToken, userData); if (connection != NULL) { connection->Unlock(); break; } } return connection; } void H323EndPoint::TransferCall(const PString & token, const PString & remoteParty, const PString & callIdentity) { H323Connection * connection = FindConnectionWithLock(token); if (connection != NULL) { connection->TransferCall(remoteParty, callIdentity); connection->Unlock(); } } void H323EndPoint::ConsultationTransfer(const PString & primaryCallToken, const PString & secondaryCallToken) { H323Connection * secondaryCall = FindConnectionWithLock(secondaryCallToken); if (secondaryCall != NULL) { secondaryCall->ConsultationTransfer(primaryCallToken); secondaryCall->Unlock(); } } void H323EndPoint::HoldCall(const PString & token, PBoolean localHold) { H323Connection * connection = FindConnectionWithLock(token); if (connection != NULL) { connection->HoldCall(localHold); connection->Unlock(); } } H323Connection * H323EndPoint::IntrudeCall(const PString & remoteParty, PString & token, unsigned capabilityLevel, void * userData) { return IntrudeCall(remoteParty, NULL, token, capabilityLevel, userData); } H323Connection * H323EndPoint::IntrudeCall(const PString & remoteParty, H323Transport * transport, PString & token, unsigned capabilityLevel, void * userData) { token = PString::Empty(); PStringList Addresses; if (!ResolveCallParty(remoteParty, Addresses)) return NULL; H323Connection * connection = NULL; for (PINDEX i = 0; i < Addresses.GetSize(); i++) { connection = InternalMakeCall(PString::Empty(), PString::Empty(), capabilityLevel, Addresses[i], transport, token, userData); if (connection != NULL) { connection->Unlock(); break; } } return connection; } void H323EndPoint::OnReceivedInitiateReturnError() { } #endif // H323_H450 PBoolean H323EndPoint::ClearCall(const PString & token, H323Connection::CallEndReason reason) { return ClearCallSynchronous(token, reason, NULL); } void H323EndPoint::OnCallClearing(H323Connection * /*connection*/, H323Connection::CallEndReason /*reason*/) { } PBoolean H323EndPoint::ClearCallSynchronous(const PString & token, H323Connection::CallEndReason reason) { PSyncPoint sync; return ClearCallSynchronous(token, reason, &sync); } PBoolean H323EndPoint::ClearCallSynchronous(const PString & token, H323Connection::CallEndReason reason, PSyncPoint * sync) { if (PThread::Current() == connectionsCleaner) sync = NULL; /*The hugely multi-threaded nature of the H323Connection objects means that to avoid many forms of race condition, a call is cleared by moving it from the "active" call dictionary to a list of calls to be cleared that will be processed by a background thread specifically for the purpose of cleaning up cleared connections. So that is all that this function actually does. The real work is done in the H323ConnectionsCleaner thread. */ { PWaitAndSignal wait(connectionsMutex); // Find the connection by token, callid or conferenceid H323Connection * connection = FindConnectionWithoutLocks(token); if (connection == NULL) { PTRACE(3, "H323\tAttempt to clear unknown call " << token); return FALSE; } PTRACE(3, "H323\tClearing connection " << connection->GetCallToken() << " reason=" << reason); OnCallClearing(connection,reason); // Add this to the set of connections being cleaned, if not in already if (!connectionsToBeCleaned.Contains(connection->GetCallToken())) connectionsToBeCleaned += connection->GetCallToken(); // Now set reason for the connection close connection->SetCallEndReason(reason, sync); // Signal the background threads that there is some stuff to process. connectionsCleaner->Signal(); } if (sync != NULL) sync->Wait(); return TRUE; } void H323EndPoint::ClearAllCalls(H323Connection::CallEndReason reason, PBoolean wait) { /*The hugely multi-threaded nature of the H323Connection objects means that to avoid many forms of race condition, a call is cleared by moving it from the "active" call dictionary to a list of calls to be cleared that will be processed by a background thread specifically for the purpose of cleaning up cleared connections. So that is all that this function actually does. The real work is done in the H323ConnectionsCleaner thread. */ connectionsMutex.Wait(); // Add all connections to the to be deleted set PINDEX i; for (i = 0; i < connectionsActive.GetSize(); i++) { H323Connection & connection = connectionsActive.GetDataAt(i); connectionsToBeCleaned += connection.GetCallToken(); // Now set reason for the connection close connection.SetCallEndReason(reason, NULL); } // Signal the background threads that there is some stuff to process. connectionsCleaner->Signal(); // Make sure any previous signals are removed before waiting later while (connectionsAreCleaned.Wait(0)) ; connectionsMutex.Signal(); if (wait) connectionsAreCleaned.Wait(); } void H323EndPoint::CleanUpConnections() { PTRACE(3, "H323\tCleaning up connections"); // Lock the connections database. connectionsMutex.Wait(); // Continue cleaning up until no more connections to clean while (connectionsToBeCleaned.GetSize() > 0) { // Just get the first entry in the set of tokens to clean up. PString token = connectionsToBeCleaned.GetKeyAt(0); H323Connection & connection = connectionsActive[token]; // Unlock the structures here so does not block other uses of ClearCall() // for the possibly long time it takes to CleanUpOnCallEnd(). connectionsMutex.Signal(); // Clean up the connection, waiting for all threads to terminate connection.CleanUpOnCallEnd(); connection.OnCleared(); // Get the lock again as we remove the connection from our database connectionsMutex.Wait(); // Remove the token from the set of connections to be cleaned up connectionsToBeCleaned -= token; // And remove the connection instance itself from the dictionary which will // cause its destructor to be called. H323Connection * connectionToDelete = connectionsActive.RemoveAt(token); // Unlock the structures yet again to avoid possible race conditions when // deleting the connection as well as the delte of a conncetion descendent // is application writer dependent and may cause deadlocks or just consume // lots of time. connectionsMutex.Signal(); // Finally we get to delete it! delete connectionToDelete; // Get the lock again as we continue around the loop connectionsMutex.Wait(); } // Finished with loop, unlock the connections database. connectionsMutex.Signal(); // Signal thread that may be waiting on ClearAllCalls() connectionsAreCleaned.Signal(); } PBoolean H323EndPoint::HasConnection(const PString & token) { PWaitAndSignal wait(connectionsMutex); return FindConnectionWithoutLocks(token) != NULL; } H323Connection * H323EndPoint::FindConnectionWithLock(const PString & token) { PWaitAndSignal mutex(connectionsMutex); /*We have a very yucky polling loop here as a semi permanant measure. Why? We cannot call Lock() inside the connectionsMutex critical section as it will cause a deadlock with something like a RELEASE-COMPLETE coming in on separate thread. But if we put it outside there is a small window where the connection could get deleted before the Lock() test is done. The solution is to attempt to get the mutex while inside the connectionsMutex but not block. That means a polling loop. There is probably a way to do this properly with mutexes but I don't have time to figure it out. */ H323Connection * connection; while ((connection = FindConnectionWithoutLocks(token)) != NULL) { switch (connection->TryLock()) { case 0 : return NULL; case 1 : return connection; } // Could not get connection lock, unlock the endpoint lists so a thread // that has the connection lock gets a chance at the endpoint lists. connectionsMutex.Signal(); PThread::Sleep(20); connectionsMutex.Wait(); } return NULL; } H323Connection * H323EndPoint::FindConnectionWithoutLocks(const PString & token) { if (token.IsEmpty()) return NULL; H323Connection * conn_ptr = connectionsActive.GetAt(token); if (conn_ptr != NULL) return conn_ptr; PINDEX i; for (i = 0; i < connectionsActive.GetSize(); i++) { H323Connection & conn = connectionsActive.GetDataAt(i); if (conn.GetCallIdentifier().AsString() == token) return &conn; } for (i = 0; i < connectionsActive.GetSize(); i++) { H323Connection & conn = connectionsActive.GetDataAt(i); if (conn.GetConferenceIdentifier().AsString() == token) return &conn; } return NULL; } PStringList H323EndPoint::GetAllConnections() { PStringList tokens; connectionsMutex.Wait(); for (PINDEX i = 0; i < connectionsActive.GetSize(); i++) tokens.AppendString(connectionsActive.GetKeyAt(i)); connectionsMutex.Signal(); return tokens; } PBoolean H323EndPoint::OnIncomingCall(H323Connection & /*connection*/, const H323SignalPDU & /*setupPDU*/, H323SignalPDU & /*alertingPDU*/) { return TRUE; } PBoolean H323EndPoint::OnIncomingCall(H323Connection & connection, const H323SignalPDU & setupPDU, H323SignalPDU & alertingPDU, H323Connection::CallEndReason & reason) { reason = H323Connection::EndedByNoAccept; return connection.OnIncomingCall(setupPDU, alertingPDU); } PBoolean H323EndPoint::OnCallTransferInitiate(H323Connection & /*connection*/, const PString & /*remoteParty*/) { return TRUE; } PBoolean H323EndPoint::OnCallTransferIdentify(H323Connection & /*connection*/) { return TRUE; } void H323EndPoint::OnSendARQ(H323Connection & /*conn*/, H225_AdmissionRequest & /*arq*/) { } void H323EndPoint::OnReceivedACF(H323Connection & /*conn*/, const H225_AdmissionConfirm & /*arq*/) { } void H323EndPoint::OnReceivedARJ(H323Connection & /*conn*/, const H225_AdmissionReject & /*arq*/) { } H323Connection::AnswerCallResponse H323EndPoint::OnAnswerCall(H323Connection & /*connection*/, const PString & PTRACE_PARAM(caller), const H323SignalPDU & /*setupPDU*/, H323SignalPDU & /*connectPDU*/) { PTRACE(2, "H225\tOnAnswerCall from \"" << caller << '"'); return H323Connection::AnswerCallNow; } PBoolean H323EndPoint::OnAlerting(H323Connection & /*connection*/, const H323SignalPDU & /*alertingPDU*/, const PString & /*username*/) { PTRACE(1, "H225\tReceived alerting PDU."); return TRUE; } PBoolean H323EndPoint::OnConnectionForwarded(H323Connection & /*connection*/, const PString & /*forwardParty*/, const H323SignalPDU & /*pdu*/) { return FALSE; } PBoolean H323EndPoint::ForwardConnection(H323Connection & connection, const PString & forwardParty, const H323SignalPDU & /*pdu*/) { PString token = connection.GetCallToken(); PStringList Addresses; if (!ResolveCallParty(forwardParty, Addresses)) return FALSE; H323Connection * newConnection = NULL; for (PINDEX i = 0; i < Addresses.GetSize(); i++) { newConnection = InternalMakeCall(PString::Empty(), PString::Empty(), UINT_MAX, Addresses[i], NULL, token, NULL); if (newConnection != NULL) break; } if (newConnection == NULL) return FALSE; connection.SetCallEndReason(H323Connection::EndedByCallForwarded); newConnection->Unlock(); return TRUE; } void H323EndPoint::OnConnectionEstablished(H323Connection & /*connection*/, const PString & /*token*/) { } PBoolean H323EndPoint::IsConnectionEstablished(const PString & token) { H323Connection * connection = FindConnectionWithLock(token); if (connection == NULL) return FALSE; PBoolean established = connection->IsEstablished(); connection->Unlock(); return established; } PBoolean H323EndPoint::OnOutgoingCall(H323Connection & /*connection*/, const H323SignalPDU & /*connectPDU*/) { PTRACE(1, "H225\tReceived connect PDU."); return TRUE; } void H323EndPoint::OnConnectionCleared(H323Connection & /*connection*/, const PString & /*token*/) { } PString H323EndPoint::BuildConnectionToken(const H323Transport & transport, unsigned callReference, PBoolean fromRemote) { PString token; if (fromRemote) token = transport.GetRemoteAddress(); else token = "ip$localhost"; token.sprintf("/%u", callReference); return token; } H323Connection * H323EndPoint::OnIncomingConnection(H323Transport * transport, H323SignalPDU & setupPDU) { unsigned callReference = setupPDU.GetQ931().GetCallReference(); PString token = BuildConnectionToken(*transport, callReference, TRUE); connectionsMutex.Wait(); H323Connection * connection = connectionsActive.GetAt(token); connectionsMutex.Signal(); if (connection == NULL) { connection = CreateConnection(callReference, NULL, transport, &setupPDU); if (connection == NULL) { PTRACE(1, "H323\tCreateConnection returned NULL"); return NULL; } PTRACE(3, "H323\tCreated new connection: " << token); connectionsMutex.Wait(); connectionsActive.SetAt(token, connection); connectionsMutex.Signal(); } connection->AttachSignalChannel(token, transport, TRUE); return connection; } H323Connection * H323EndPoint::CreateConnection(unsigned callReference, void * userData, H323Transport * /*transport*/, H323SignalPDU * /*setupPDU*/) { return CreateConnection(callReference, userData); } H323Connection * H323EndPoint::CreateConnection(unsigned callReference, void * /*userData*/) { return CreateConnection(callReference); } H323Connection * H323EndPoint::CreateConnection(unsigned callReference) { return new H323Connection(*this, callReference); } #if PTRACING static void OnStartStopChannel(const char * startstop, const H323Channel & channel) { const char * dir; switch (channel.GetDirection()) { case H323Channel::IsTransmitter : dir = "send"; break; case H323Channel::IsReceiver : dir = "receiv"; break; default : dir = "us"; break; } PTRACE(2, "H323\t" << startstop << "ed " << dir << "ing logical channel: " << channel.GetCapability()); } #endif PBoolean H323EndPoint::OnStartLogicalChannel(H323Connection & /*connection*/, H323Channel & PTRACE_PARAM(channel)) { #if PTRACING OnStartStopChannel("Start", channel); #endif return TRUE; } void H323EndPoint::OnClosedLogicalChannel(H323Connection & /*connection*/, const H323Channel & PTRACE_PARAM(channel)) { #if PTRACING OnStartStopChannel("Stopp", channel); #endif } #ifdef H323_AUDIO_CODECS PBoolean H323EndPoint::OpenAudioChannel(H323Connection & /*connection*/, PBoolean isEncoding, unsigned bufferSize, H323AudioCodec & codec) { codec.SetSilenceDetectionMode(GetSilenceDetectionMode()); #ifdef P_AUDIO int rate = codec.GetMediaFormat().GetTimeUnits() * 1000; PString deviceName; PString deviceDriver; if (isEncoding) { deviceName = GetSoundChannelRecordDevice(); deviceDriver = GetSoundChannelRecordDriver(); } else { deviceName = GetSoundChannelPlayDevice(); deviceDriver = GetSoundChannelPlayDriver(); } PSoundChannel * soundChannel; if (!deviceDriver.IsEmpty()) soundChannel = PSoundChannel::CreateChannel(deviceDriver); else { soundChannel = new PSoundChannel; deviceDriver = "default"; } if (soundChannel == NULL) { PTRACE(1, "Codec\tCould not open a sound channel for " << deviceDriver); return FALSE; } if (soundChannel->Open(deviceName, isEncoding ? PSoundChannel::Recorder : PSoundChannel::Player, 1, rate, 16)) { PTRACE(3, "Codec\tOpened sound channel \"" << deviceName << "\" for " << (isEncoding ? "record" : "play") << "ing at " << rate << " samples/second using " << soundChannelBuffers << 'x' << bufferSize << " byte buffers."); soundChannel->SetBuffers(bufferSize, soundChannelBuffers); return codec.AttachChannel(soundChannel); } PTRACE(1, "Codec\tCould not open " << deviceDriver << " sound channel \"" << deviceName << "\" for " << (isEncoding ? "record" : "play") << "ing: " << soundChannel->GetErrorText()); delete soundChannel; #endif return FALSE; } #endif // H323_AUDIO_CODECS #ifdef H323_VIDEO PBoolean H323EndPoint::OpenVideoChannel(H323Connection & /*connection*/, PBoolean PTRACE_PARAM(isEncoding), H323VideoCodec & /*codec*/) { PTRACE(1, "Codec\tCould not open video channel for " << (isEncoding ? "captur" : "display") << "ing: not yet implemented"); return FALSE; } #ifdef H323_H239 PBoolean H323EndPoint::OpenExtendedVideoChannel(H323Connection & /*connection*/, PBoolean PTRACE_PARAM(isEncoding), H323VideoCodec & /*codec*/) { PTRACE(1, "Codec\tCould not open extended video channel for " << (isEncoding ? "captur" : "display") << "ing: not yet implemented"); return FALSE; } #endif // H323_H239 #endif // NO_H323_VIDEO void H323EndPoint::OnRTPStatistics(const H323Connection & /*connection*/, const RTP_Session & /*session*/) const { } void H323EndPoint::OnRTPFinalStatistics(const H323Connection & /*connection*/, const RTP_Session & /*session*/) const { } void H323EndPoint::OnUserInputString(H323Connection & /*connection*/, const PString & /*value*/) { } void H323EndPoint::OnUserInputTone(H323Connection & connection, char tone, unsigned /*duration*/, unsigned /*logicalChannel*/, unsigned /*rtpTimestamp*/) { // don't pass through signalUpdate messages if (tone != ' ') connection.OnUserInputString(PString(tone)); } #ifdef H323_GNUGK void H323EndPoint::OnGatekeeperNATDetect( PIPSocket::Address publicAddr, const PString & gkIdentifier, H323TransportAddress & gkRouteAddress ) { if (gnugk != NULL) { if (gnugk->ReRegister(gkIdentifier)) return; else { PTRACE(4, "GNUGK\tReRegistration Failure. Attempting new connection"); if (!gnugk->CreateNewTransport()) { PTRACE(4, "GNUGK\tNAT Support Failure: Retry from scratch"); delete gnugk; gnugk = NULL; } } } gnugk = new GNUGK_Feature(*this,gkRouteAddress,gkIdentifier); #ifdef P_STUN if (gnugk->IsOpen()) { PTRACE(4, "GNUGK\tNat Address " << gkRouteAddress); PNatMethod_GnuGk * natMethod = (PNatMethod_GnuGk *)natMethods->LoadNatMethod("GnuGk"); if (natMethods) { natMethod->AttachEndPoint(this); natMethod->SetAvailable(); natMethods->AddMethod(natMethod); } return; } #endif PTRACE(4, "GNUGK\tConnection failed. Disabling support."); delete gnugk; gnugk = NULL; } void H323EndPoint::OnGatekeeperOpenNATDetect( const PString & /*gkIdentifier*/, H323TransportAddress & /*gkRouteAddress*/ ) { } #endif PBoolean H323EndPoint::OnGatekeeperAliases( const H225_ArrayOf_AliasAddress & /*aliases*/ ) { return FALSE; } #ifdef H323_H248 void H323EndPoint::OnHTTPServiceControl(unsigned /*opeartion*/, unsigned /*sessionId*/, const PString & /*url*/) { } void H323EndPoint::OnCallCreditServiceControl(const PString & amount, PBoolean mode, const unsigned & /*durationLimit*/) { OnCallCreditServiceControl(amount, mode); } void H323EndPoint::OnCallCreditServiceControl(const PString & /*amount*/, PBoolean /*mode*/) { } #ifdef H323_H350 void H323EndPoint::OnH350ServiceControl(const PString & /*url*/, const PString & /*BaseDN*/) { } #endif void H323EndPoint::OnServiceControlSession(unsigned type, unsigned sessionId, const H323ServiceControlSession & session, H323Connection * connection) { session.OnChange(type, sessionId, *this, connection); } H323ServiceControlSession * H323EndPoint::CreateServiceControlSession(const H225_ServiceControlDescriptor & contents) { switch (contents.GetTag()) { case H225_ServiceControlDescriptor::e_url : return new H323HTTPServiceControl(contents); case H225_ServiceControlDescriptor::e_callCreditServiceControl : return new H323CallCreditServiceControl(contents); #ifdef H323_H350 case H225_ServiceControlDescriptor::e_nonStandard : return new H323H350ServiceControl(contents); #endif } return NULL; } #endif // H323_H248 PBoolean H323EndPoint::OnConferenceInvite(PBoolean /*sending*/, const H323Connection * /*connection*/, const H323SignalPDU & /*setupPDU */) { return FALSE; } PBoolean H323EndPoint::OnSendCallIndependentSupplementaryService(const H323Connection * connection, H323SignalPDU & pdu ) { #ifdef H323_H460 if (!connection->IsNonCallConnection()) return false; H225_Setup_UUIE & setup = pdu.m_h323_uu_pdu.m_h323_message_body; setup.m_conferenceGoal.SetTag(H225_Setup_UUIE_conferenceGoal::e_callIndependentSupplementaryService); /* // This is horrible however it's the easiest way to get the connection featureSet. H460_FeatureSet * featset = NULL; H323Connection* conn = FindConnectionWithLock(connection->GetCallToken()); if (conn != NULL) { featset = conn->GetFeatureSet(); conn->Unlock(); } if (featset == NULL) return false; H225_FeatureSet fs; if (featset->SendFeature(H460_MessageType::e_setup, fs)) { if (fs.HasOptionalField(H225_FeatureSet::e_supportedFeatures)) { setup.IncludeOptionalField(H225_Setup_UUIE::e_supportedFeatures); H225_ArrayOf_FeatureDescriptor & fsn = setup.m_supportedFeatures; fsn = fs.m_supportedFeatures; } */ PTRACE(6,"MyEP\tSending H.460 Call Independent Supplementary Service"); return true; // } else #endif // { return false; // } } PBoolean H323EndPoint::OnReceiveCallIndependentSupplementaryService(const H323Connection * connection, const H323SignalPDU & pdu) { #ifdef H323_H450 if (pdu.m_h323_uu_pdu.HasOptionalField(H225_H323_UU_PDU::e_h4501SupplementaryService)) { PTRACE(6,"MyEP\tReceived H.450 Call Independent Supplementary Service"); return true; } #endif #ifdef H323_H460 if (disableH460) return false; H225_FeatureSet fs; const H225_Setup_UUIE & setup = pdu.m_h323_uu_pdu.m_h323_message_body; if (setup.HasOptionalField(H225_Setup_UUIE::e_supportedFeatures)) { fs.IncludeOptionalField(H225_FeatureSet::e_supportedFeatures); fs.m_supportedFeatures = setup.m_supportedFeatures; } if (setup.HasOptionalField(H225_Setup_UUIE::e_neededFeatures)) { fs.IncludeOptionalField(H225_FeatureSet::e_neededFeatures); fs.m_supportedFeatures = setup.m_neededFeatures; } if (setup.HasOptionalField(H225_Setup_UUIE::e_desiredFeatures)) { fs.IncludeOptionalField(H225_FeatureSet::e_desiredFeatures); fs.m_supportedFeatures = setup.m_desiredFeatures; } H460_FeatureSet * featset = NULL; H323Connection* conn = FindConnectionWithLock(connection->GetCallToken()); if (conn != NULL) { featset = conn->GetFeatureSet(); conn->Unlock(); } if (featset->SupportNonCallService(fs)) { PTRACE(6,"MyEP\tReceived H.460 Call Independent Supplementary Service"); return true; } else #endif { PTRACE(6,"MyEP\tRejected CallIndependentSupplementaryService as no support in EndPoint."); return false; } } PBoolean H323EndPoint::OnNegotiateConferenceCapabilities(const H323SignalPDU & /* setupPDU */) { return FALSE; } #ifdef H323_T120 OpalT120Protocol * H323EndPoint::CreateT120ProtocolHandler(const H323Connection &) const { return NULL; } #endif #ifdef H323_T38 OpalT38Protocol * H323EndPoint::CreateT38ProtocolHandler(const H323Connection &) const { return NULL; } #endif #ifdef H323_H224 OpalH224Handler * H323EndPoint::CreateH224ProtocolHandler(H323Channel::Directions dir, H323Connection & connection, unsigned sessionID) const { return new OpalH224Handler(dir, connection, sessionID); } OpalH281Handler * H323EndPoint::CreateH281ProtocolHandler(OpalH224Handler & h224Handler) const { return new OpalH281Handler(h224Handler); } #endif #ifdef H323_FILE PBoolean H323EndPoint::OpenFileTransferSession( const H323FileTransferList & list, const PString & token, H323ChannelNumber & num ) { H323Connection * connection = FindConnectionWithLock(token); PBoolean success = FALSE; if (connection != NULL) { success = connection->OpenFileTransferSession(list,num); connection->Unlock(); } return success; } PBoolean H323EndPoint::OpenFileTransferChannel(H323Connection & connection, PBoolean PTRACE_PARAM(isEncoder), H323FileTransferList & filelist ) { PTRACE(2,"FT\tAttempt to open File Transfer session! Not implemented Yet!"); return FALSE; } #endif void H323EndPoint::SetLocalUserName(const PString & name) { PAssert(!name, "Must have non-empty string in AliasAddress!"); if (name.IsEmpty()) return; localAliasNames.RemoveAll(); localAliasNames.SetSize(0); localAliasNames.AppendString(name); } PBoolean H323EndPoint::AddAliasName(const PString & name) { PAssert(!name, "Must have non-empty string in AliasAddress!"); if (localAliasNames.GetValuesIndex(name) != P_MAX_INDEX) return FALSE; localAliasNames.AppendString(name); return TRUE; } PBoolean H323EndPoint::RemoveAliasName(const PString & name) { PINDEX pos = localAliasNames.GetValuesIndex(name); if (pos == P_MAX_INDEX) return FALSE; PAssert(localAliasNames.GetSize() > 1, "Must have at least one AliasAddress!"); if (localAliasNames.GetSize() < 2) return FALSE; #if PTLIB_VER >= 2110 localAliasNames.Remove(&name); #else localAliasNames.RemoveAt(pos); #endif return TRUE; } #ifdef H323_AUDIO_CODECS #ifdef P_AUDIO PBoolean H323EndPoint::SetSoundChannelPlayDevice(const PString & name) { if (PSoundChannel::GetDeviceNames(soundChannelPlayDriver,PSoundChannel::Player).GetValuesIndex(name) == P_MAX_INDEX) return FALSE; soundChannelPlayDevice = name; return TRUE; } PBoolean H323EndPoint::SetSoundChannelRecordDevice(const PString & name) { if (PSoundChannel::GetDeviceNames(soundChannelRecordDriver,PSoundChannel::Recorder).GetValuesIndex(name) == P_MAX_INDEX) return FALSE; soundChannelRecordDevice = name; return TRUE; } PBoolean H323EndPoint::SetSoundChannelPlayDriver(const PString & name) { PPluginManager & pluginMgr = PPluginManager::GetPluginManager(); PStringList list = pluginMgr.GetPluginsProviding("PSoundChannel"); if (list.GetValuesIndex(name) == P_MAX_INDEX) return FALSE; soundChannelPlayDriver = name; soundChannelPlayDevice.MakeEmpty(); list = PSoundChannel::GetDeviceNames(name, PSoundChannel::Player); if (list.GetSize() == 0) return FALSE; soundChannelPlayDevice = list[0]; return TRUE; } PBoolean H323EndPoint::SetSoundChannelRecordDriver(const PString & name) { PPluginManager & pluginMgr = PPluginManager::GetPluginManager(); PStringList list = pluginMgr.GetPluginsProviding("PSoundChannel"); if (list.GetValuesIndex(name) == P_MAX_INDEX) return FALSE; soundChannelRecordDriver = name; list = PSoundChannel::GetDeviceNames(name, PSoundChannel::Recorder); if (list.GetSize() == 0) return FALSE; soundChannelRecordDevice = list[0]; return TRUE; } void H323EndPoint::SetSoundChannelBufferDepth(unsigned depth) { PAssert(depth > 1, PInvalidParameter); soundChannelBuffers = depth; } #endif // P_AUDIO #endif // H323_AUDIO_CODECS PBoolean H323EndPoint::IsTerminal() const { switch (terminalType) { case e_TerminalOnly : case e_TerminalAndMC : return TRUE; default : return FALSE; } } PBoolean H323EndPoint::IsGateway() const { switch (terminalType) { case e_GatewayOnly : case e_GatewayAndMC : case e_GatewayAndMCWithDataMP : case e_GatewayAndMCWithAudioMP : case e_GatewayAndMCWithAVMP : return TRUE; default : return FALSE; } } PBoolean H323EndPoint::IsGatekeeper() const { switch (terminalType) { case e_GatekeeperOnly : case e_GatekeeperWithDataMP : case e_GatekeeperWithAudioMP : case e_GatekeeperWithAVMP : return TRUE; default : return FALSE; } } PBoolean H323EndPoint::IsMCU() const { switch (terminalType) { case e_MCUOnly : case e_MCUWithDataMP : case e_MCUWithAudioMP : case e_MCUWithAVMP : return TRUE; default : return FALSE; } } #ifdef H323_AUDIO_CODECS void H323EndPoint::SetAudioJitterDelay(unsigned minDelay, unsigned maxDelay) { if (minDelay == 0 && maxDelay == 0) { // Disable jitter buffer minAudioJitterDelay = 0; maxAudioJitterDelay = 0; return; } PAssert(minDelay <= 10000 && maxDelay <= 10000, PInvalidParameter); if (minDelay < 10) minDelay = 10; minAudioJitterDelay = minDelay; if (maxDelay < minDelay) maxDelay = minDelay; maxAudioJitterDelay = maxDelay; } #endif #ifdef P_STUN PSTUNClient * H323EndPoint::GetSTUN(const PIPSocket::Address & ip) const { if (ip.IsValid() && IsLocalAddress(ip)) return NULL; return stun; } PNatMethod * H323EndPoint::GetPreferedNatMethod(const PIPSocket::Address & ip) { #if PTRACING PNatMethod * meth = NULL; const PNatList & list = natMethods->GetNATList(); if (list.GetSize() > 0) { for (PINDEX i=0; i < list.GetSize(); i++) { PTRACE(6, "H323\tNAT Method " << i << " " << list[i].GetName() << " Ready: " << (list[i].IsAvailable(ip) ? "Yes" : "No")); if (list[i].IsAvailable(ip)) { meth = &list[i]; break; } } } else { PTRACE(6, "H323\tNo NAT Methods!"); } return meth; #else return natMethods->GetMethod(ip); #endif } PNatStrategy & H323EndPoint::GetNatMethods() { return *natMethods; } void H323EndPoint::SetSTUNServer(const PString & server) { natMethods->RemoveMethod("STUN"); delete stun; if (server.IsEmpty()) stun = NULL; else { #if PTLIB_VER >= 2110 stun = new PSTUNClient(); stun->SetServer(server); stun->SetPortRanges(GetUDPPortBase(), GetUDPPortMax(), GetRtpIpPortBase(), GetRtpIpPortMax()); #else stun = new PSTUNClient(server, GetUDPPortBase(), GetUDPPortMax(), GetRtpIpPortBase(), GetRtpIpPortMax()); #endif natMethods->AddMethod(stun); PTRACE(2, "H323\tSTUN server \"" << server << "\" replies " << stun->GetNatTypeName()); STUNNatType((int)stun->GetNatType()); } } #endif // P_STUN void H323EndPoint::InternalTranslateTCPAddress(PIPSocket::Address & localAddr, const PIPSocket::Address & remoteAddr, const H323Connection * connection) { #ifdef P_STUN // if using STUN server, then translate internal local address to external if required PBoolean disableSTUN; if (connection != NULL) disableSTUN = !connection->HasNATSupport(); else disableSTUN = disableSTUNTranslate; PIPSocket::Address addr; if ( stun != NULL && !disableSTUN && ( (stun->GetRTPSupport() == PSTUNClient::RTPSupported) || (stun->GetRTPSupport() == PSTUNClient::RTPIfSendMedia) ) && localAddr.IsRFC1918() && !remoteAddr.IsRFC1918() && stun->GetExternalAddress(addr) ) { localAddr = addr; } else #endif // P_STUN TranslateTCPAddress(localAddr, remoteAddr); } PBoolean H323EndPoint::IsLocalAddress(const PIPSocket::Address & ip) const { /* Check if the remote address is a private IP, broadcast, or us */ return ip.IsRFC1918() || ip.IsBroadcast() || PIPSocket::IsLocalHost(ip); } void H323EndPoint::PortInfo::Set(unsigned newBase, unsigned newMax, unsigned range, unsigned dflt) { if (newBase == 0) { newBase = dflt; newMax = dflt; if (dflt > 0) newMax += range; } else { if (newBase < 1024) newBase = 1024; else if (newBase > 65500) newBase = 65500; if (newMax <= newBase) newMax = newBase + range; if (newMax > 65535) newMax = 65535; } mutex.Wait(); current = base = (WORD)newBase; max = (WORD)newMax; mutex.Signal(); } WORD H323EndPoint::PortInfo::GetNext(unsigned increment) { PWaitAndSignal m(mutex); if (current < base || current > (max-increment)) current = base; if (current == 0) return 0; WORD p = current; current = (WORD)(current + increment); return p; } #ifdef H323_H46019M unsigned H323EndPoint::MuxIDInfo::GetNext(unsigned increment) { PWaitAndSignal m(mutex); if (current < base || current > (max-increment)) current = base; if (current == 0) return 0; current = current + increment; return current; } #endif void H323EndPoint::SetTCPPorts(unsigned tcpBase, unsigned tcpMax) { tcpPorts.Set(tcpBase, tcpMax, 99, 0); } WORD H323EndPoint::GetNextTCPPort() { return tcpPorts.GetNext(1); } void H323EndPoint::SetUDPPorts(unsigned udpBase, unsigned udpMax) { udpPorts.Set(udpBase, udpMax, 199, 0); #ifdef P_STUN natMethods->SetPortRanges(GetUDPPortBase(), GetUDPPortMax(), GetRtpIpPortBase(), GetRtpIpPortMax()); #endif } WORD H323EndPoint::GetNextUDPPort() { return udpPorts.GetNext(1); } void H323EndPoint::SetRtpIpPorts(unsigned rtpIpBase, unsigned rtpIpMax) { rtpIpPorts.Set((rtpIpBase+1)&0xfffe, rtpIpMax&0xfffe, 999, 5000); #ifdef P_STUN natMethods->SetPortRanges(GetUDPPortBase(), GetUDPPortMax(), GetRtpIpPortBase(), GetRtpIpPortMax()); #endif } WORD H323EndPoint::GetRtpIpPortPair() { return rtpIpPorts.GetNext(2); } #ifdef H323_H46019M void H323EndPoint::SetMultiplexPort(unsigned rtpPort) { defaultMultiRTPPort = rtpPort; } WORD H323EndPoint::GetMultiplexPort() { return defaultMultiRTPPort; } unsigned H323EndPoint::GetMultiplexID() { return rtpMuxID.GetNext(1); } #endif const PTimeInterval & H323EndPoint::GetNoMediaTimeout() const { PWaitAndSignal m(noMediaMutex); return noMediaTimeout; } PBoolean H323EndPoint::SetNoMediaTimeout(PTimeInterval newInterval) { PWaitAndSignal m(noMediaMutex); if (newInterval < 0) return FALSE; noMediaTimeout = newInterval; return TRUE; } PBoolean H323EndPoint::OnSendFeatureSet(unsigned pdu, H225_FeatureSet & feats, PBoolean advertise) { #ifdef H323_H460 return features.SendFeature(pdu,feats,advertise); #else return FALSE; #endif } void H323EndPoint::OnReceiveFeatureSet(unsigned pdu, const H225_FeatureSet & feats, PBoolean genericData) { #ifdef H323_H460 features.ReceiveFeature(pdu,feats,genericData); #endif } #ifdef H323_H460 H460_FeatureSet * H323EndPoint::GetGatekeeperFeatures() { if (gatekeeper != NULL) { return &gatekeeper->GetFeatures(); } return NULL; } #endif void H323EndPoint::LoadBaseFeatureSet() { #ifdef H323_H460 features.AttachEndPoint(this); features.LoadFeatureSet(H460_Feature::FeatureBase); #endif } #ifdef H323_H46018 void H323EndPoint::H46018Enable(PBoolean enable) { m_h46018enabled = enable; if (enable) { // Must set reregistrations at between 15 and 45 sec // otherwise the Pinhole in NAT will close registrationTimeToLive = PTimeInterval(0, 30); } else { // Set timer to whatever gk allocates... registrationTimeToLive = PTimeInterval(); } } PBoolean H323EndPoint::H46018IsEnabled() { return m_h46018enabled; } #endif // H323_H46018 #ifdef H323_H46023 void H323EndPoint::H46023Enable(PBoolean enable) { m_h46023enabled = enable; } PBoolean H323EndPoint::H46023IsEnabled() { return m_h46023enabled; } #endif // H323_H46018 #ifdef H323_H460P void H323EndPoint::PresenceSetLocalState(const PStringList & alias, unsigned localstate, const PString & localdisplay, PBoolean updateOnly) { if (presenceHandler == NULL) presenceHandler = new H460PresenceHandler(*this); presenceHandler->SetPresenceState(alias,localstate, localdisplay, updateOnly); } void H323EndPoint::PresenceAddFeature(presenceFeature feat) { if (presenceHandler == NULL) presenceHandler = new H460PresenceHandler(*this); presenceHandler->AddEndpointFeature(feat); } template class deletepair { // PAIR::second_type is a pointer type public: void operator()(const PAIR & p) { delete p.second; } }; template inline void DeleteMap(const M & m) { typedef typename M::value_type PAIR; std::for_each(m.begin(), m.end(), deletepair()); } void H323EndPoint::PresenceAddFeatureH460() { if (presenceHandler == NULL) presenceHandler = new H460PresenceHandler(*this); std::map plist; if (H460_Feature::PresenceFeatureList(plist,this)) { std::map::const_iterator it = plist.begin(); while (it != plist.end()) { presenceHandler->AddEndpointH460Feature(*(it->second), it->first); it++; } } DeleteMap(plist); } void H323EndPoint::PresenceSetLocale(const presenceLocale & info) { if (presenceHandler == NULL) presenceHandler = new H460PresenceHandler(*this); H460PresenceHandler::localeInfo & loc = presenceHandler->GetLocationInfo(); loc.m_region = info.m_region; loc.m_country = info.m_country; loc.m_locale = info.m_locale; loc.m_countryCode = info.m_countryCode; loc.m_latitude = info.m_latitude; loc.m_longitude = info.m_longitude; loc.m_elevation = info.m_elevation; } void H323EndPoint::PresenceSetInstruction(const PString & epalias, unsigned type, const PStringList & list, PBoolean autoSend) { if (presenceHandler == NULL) return; presenceHandler->AddInstruction(epalias,(H323PresenceHandler::InstType)type,list,autoSend); } void H323EndPoint::PresenceSendAuthorization(const OpalGloballyUniqueID & id, const PString & epalias,PBoolean approved, const PStringList & list) { if (presenceHandler == NULL) return; presenceHandler->AddAuthorization(id,epalias,approved,list); } void H323EndPoint::PresenceNotification(const PString & locAlias, const PString & subAlias, unsigned state, const PString & display) { PTRACE(4,"EP\tAlias " << subAlias << " PresenceState now " << state << " - " << H323PresenceNotification::GetStateString(state) << " " << display); } void H323EndPoint::PresenceInstruction(const PString & locAlias, unsigned type, const PString & subAlias) { PTRACE(4,"EP\tReceived Gatekeeper Instruction to " << H323PresenceInstruction::GetInstructionString(type) << " " << subAlias); } void H323EndPoint::PresenceAuthorization(const OpalGloballyUniqueID & id, const PString & locAlias, const PStringList & Aliases) { PTRACE(4,"EP\tReceived Presence Authorization " << id.AsString() << " from " << Aliases); } #endif // H323_H460P PBoolean H323EndPoint::OnFeatureInstance(int /*instType*/, const PString & /*identifer*/) { return TRUE; } PBoolean H323EndPoint::HandleUnsolicitedInformation(const H323SignalPDU & ) { return FALSE; } #ifdef H323_RTP_AGGREGATE PHandleAggregator * H323EndPoint::GetRTPAggregator() { PWaitAndSignal m(connectionsMutex); if (rtpAggregationSize == 0) return NULL; if (rtpAggregator == NULL) rtpAggregator = new PHandleAggregator(rtpAggregationSize); return rtpAggregator; } #endif #ifdef H323_SIGNAL_AGGREGATE PHandleAggregator * H323EndPoint::GetSignallingAggregator() { PWaitAndSignal m(connectionsMutex); if (signallingAggregationSize == 0) return NULL; if (signallingAggregator == NULL) signallingAggregator = new PHandleAggregator(signallingAggregationSize); return signallingAggregator; } #endif #ifdef H323_GNUGK void H323EndPoint::NATLostConnection(PBoolean lost) { PTRACE(4,"GNUGK\tNAT Connection" << (lost ? "Lost" : " Re-established")); if (!lost) RegInvokeReRegistration(); } #endif void H323EndPoint::RegInvokeReRegistration() { RegThread = PThread::Create(PCREATE_NOTIFIER(RegMethod), 0, PThread::AutoDeleteThread, PThread::NormalPriority, "regmeth:%x"); } void H323EndPoint::RegMethod(PThread &, INT) { PWaitAndSignal m(reregmutex); gatekeeper->ReRegisterNow(); } h323plus/src/h323pluginmgr.cxx0000644000175000017500000044143311602327044015036 0ustar markmark/* * h323pluginmgr.cxx * * H.323 codec plugins handler * * Open H323 Library * * Copyright (C) 2004 Post Increment * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Post Increment * * Contributor(s): ______________________________________. * * $Id: h323pluginmgr.cxx,v 1.54 2011/06/28 10:34:12 shorne Exp $ * */ #ifdef __GNUC__ #pragma implementation "h323pluginmgr.h" #endif #include #include #include #include #include #include #include #include #include #include #define H323CAP_TAG_PREFIX "h323" static const char GET_CODEC_OPTIONS_CONTROL[] = "get_codec_options"; static const char FREE_CODEC_OPTIONS_CONTROL[] = "free_codec_options"; static const char GET_OUTPUT_DATA_SIZE_CONTROL[] = "get_output_data_size"; static const char SET_CODEC_OPTIONS_CONTROL[] = "set_codec_options"; static const char SET_CODEC_CUSTOMISED_OPTIONS[] = "to_customised_options"; static const char SET_CODEC_FLOWCONTROL_OPTIONS[] = "to_flowcontrol_options"; static const char EVENT_CODEC_CONTROL[] = "event_codec"; static const char SET_CODEC_FORMAT_OPTIONS[] = "set_format_options"; #ifdef H323_VIDEO #define CIF_WIDTH 352 #define CIF_HEIGHT 288 #define CIF4_WIDTH (CIF_WIDTH*2) #define CIF4_HEIGHT (CIF_HEIGHT*2) #define CIF16_WIDTH (CIF_WIDTH*4) #define CIF16_HEIGHT (CIF_HEIGHT*4) #define QCIF_WIDTH (CIF_WIDTH/2) #define QCIF_HEIGHT (CIF_HEIGHT/2) #define SQCIF_WIDTH 128 #define SQCIF_HEIGHT 96 static const char * sqcifMPI_tag = "SQCIF MPI"; static const char * qcifMPI_tag = "QCIF MPI"; static const char * cifMPI_tag = "CIF MPI"; static const char * cif4MPI_tag = "CIF4 MPI"; static const char * cif16MPI_tag = "CIF16 MPI"; // H.261 only static const char * h323_stillImageTransmission_tag = H323CAP_TAG_PREFIX "_stillImageTransmission"; // H.261/H.263/H.264 tags static const char * h323_qcifMPI_tag = H323CAP_TAG_PREFIX "_qcifMPI"; static const char * h323_cifMPI_tag = H323CAP_TAG_PREFIX "_cifMPI"; // H.263/H.264 tags static const char * h323_sqcifMPI_tag = H323CAP_TAG_PREFIX "_sqcifMPI"; static const char * h323_cif4MPI_tag = H323CAP_TAG_PREFIX "_cif4MPI"; static const char * h323_cif16MPI_tag = H323CAP_TAG_PREFIX "_cif16MPI"; //static const char * h323_slowSqcifMPI_tag = H323CAP_TAG_PREFIX "_slowSqcifMPI"; //static const char * h323_slowQcifMPI_tag = H323CAP_TAG_PREFIX "_slowQcifMPI"; //static const char * h323_slowCifMPI_tag = H323CAP_TAG_PREFIX "slowCifMPI"; //static const char * h323_slowCif4MPI_tag = H323CAP_TAG_PREFIX "_slowCif4MPI"; //static const char * h323_slowCif16MPI_tag = H323CAP_TAG_PREFIX "_slowCif16MPI"; // H.263 only static const char * h323_temporalSpatialTradeOffCapability_tag = H323CAP_TAG_PREFIX "_temporalSpatialTradeOffCapability"; static const char * h323_unrestrictedVector_tag = H323CAP_TAG_PREFIX "_unrestrictedVector"; static const char * h323_arithmeticCoding_tag = H323CAP_TAG_PREFIX "_arithmeticCoding"; static const char * h323_advancedPrediction_tag = H323CAP_TAG_PREFIX "_advancedPrediction"; static const char * h323_pbFrames_tag = H323CAP_TAG_PREFIX "_pbFrames"; static const char * h323_hrdB_tag = H323CAP_TAG_PREFIX "_hrdB"; static const char * h323_bppMaxKb_tag = H323CAP_TAG_PREFIX "_bppMaxKb"; static const char * h323_errorCompensation_tag = H323CAP_TAG_PREFIX "_errorCompensation"; static const char * h323_advancedIntra_tag = H323CAP_TAG_PREFIX "_advancedIntra"; static const char * h323_modifiedQuantization_tag = H323CAP_TAG_PREFIX "_modifiedQuantization"; inline static bool IsValidMPI(int mpi) { return (mpi > 0) && (mpi < 5); } #endif // H323_VIDEO typedef PFactory OpalPluginCodecFactory; class OpalPluginCodec : public OpalFactoryCodec { PCLASSINFO(OpalPluginCodec, PObject) public: OpalPluginCodec(PluginCodec_Definition * _codecDefn) : codecDefn(_codecDefn) { if (codecDefn->createCodec == NULL) context = NULL; else context = (codecDefn->createCodec)(codecDefn); } ~OpalPluginCodec() { (codecDefn->destroyCodec)(codecDefn, context); } const struct PluginCodec_Definition * GetDefinition() { return codecDefn; } PString GetInputFormat() const { return codecDefn->sourceFormat; } PString GetOutputFormat() const { return codecDefn->destFormat; } int Encode(const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { return (*codecDefn->codecFunction)(codecDefn, context, from, fromLen, to, toLen, flag); } unsigned int GetSampleRate() const { return codecDefn->sampleRate; } unsigned int GetBitsPerSec() const { return codecDefn->bitsPerSec; } unsigned int GetFrameTime() const { return codecDefn->usPerFrame; } unsigned int GetSamplesPerFrame() const { return codecDefn->parm.audio.samplesPerFrame; } unsigned int GetBytesPerFrame() const { return codecDefn->parm.audio.bytesPerFrame; } unsigned int GetRecommendedFramesPerPacket() const { return codecDefn->parm.audio.recommendedFramesPerPacket; } unsigned int GetMaxFramesPerPacket() const { return codecDefn->parm.audio.maxFramesPerPacket; } BYTE GetRTPPayload() const { return (BYTE)codecDefn->rtpPayload; } PString GetSDPFormat() const { return codecDefn->sampleRate; } bool SetCustomFormat(unsigned frameWidth, unsigned frameHeight, unsigned frameRate); bool SetCustomFormat(unsigned bitrate, unsigned samplerate); #ifdef H323_VIDEO /** Set Media Format */ bool SetMediaFormat(OpalMediaFormat & fmt); /** Update Media Options */ bool UpdateMediaOptions(OpalMediaFormat & fmt); /** codec control */ bool CodecControl(const char * name, void * parm, unsigned int * parmLen, int & retVal); #endif // H323_VIDEO protected: PluginCodec_Definition * codecDefn; void * context; }; ///////////////////////////////////////////////////////////////////////////// #ifdef H323_AUDIO_CODECS extern "C" { unsigned char linear2ulaw(int pcm_val); int ulaw2linear(unsigned char u_val); unsigned char linear2alaw(int pcm_val); int alaw2linear(unsigned char u_val); }; #define DECLARE_FIXED_CODEC(name, format, bps, frameTime, samples, bytes, fpp, maxfpp, payload, sdp) \ class name##_Base : public OpalFactoryCodec { \ PCLASSINFO(name##_Base, OpalFactoryCodec) \ public: \ name##_Base() \ { } \ unsigned int GetSampleRate() const { return 8000; } \ unsigned int GetBitsPerSec() const { return bps; } \ unsigned int GetFrameTime() const { return frameTime; } \ unsigned int GetSamplesPerFrame() const { return samples; } \ unsigned int GetBytesPerFrame() const { return bytes; } \ unsigned int GetRecommendedFramesPerPacket() const { return fpp; } \ unsigned int GetMaxFramesPerPacket() const { return maxfpp; } \ BYTE GetRTPPayload() const { return payload; } \ PString GetSDPFormat() const { return sdp; } \ }; \ class name##_Encoder : public name##_Base { \ PCLASSINFO(name##_Encoder, name##_Base) \ public: \ name##_Encoder() \ { } \ virtual PString GetInputFormat() const \ { return format; } \ virtual PString GetOutputFormat() const \ { return "L16"; } \ static PString GetFactoryName() \ { return PString("L16") + "|" + format; } \ int Encode(const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag); \ }; \ class name##_Decoder : public name##_Base { \ PCLASSINFO(name##_Decoder, name##_Base) \ public: \ name##_Decoder() \ { } \ virtual PString GetInputFormat() const \ { return "L16"; } \ virtual PString GetOutputFormat() const \ { return format; } \ static PString GetFactoryName() \ { return PString(format) + "|" + "L16"; } \ int Encode(const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag); \ }; \ DECLARE_FIXED_CODEC(OpalG711ALaw64k, OpalG711ALaw64k, 64000, 30000, 240, 240, 30, 30, RTP_DataFrame::PCMA, "PCMA") int OpalG711ALaw64k_Encoder::Encode(const void * _from, unsigned * fromLen, void * _to, unsigned * toLen, unsigned int * ) { if (*fromLen/2 > *toLen) return 0; const short * from = (short *)_from; BYTE * to = (BYTE *)_to; unsigned count = *fromLen / 2; *toLen = count; while (count-- > 0) *to++ = linear2alaw(*from++); return 1; } int OpalG711ALaw64k_Decoder::Encode(const void * _from, unsigned * fromLen, void * _to, unsigned * toLen, unsigned int * ) { if (*fromLen*2 > *toLen) return 0; const BYTE * from = (BYTE *)_from; short * to = (short *)_to; unsigned count = *fromLen; *toLen = count * 2; while (count-- > 0) *to++ = (short)alaw2linear(*from++); return 1; } DECLARE_FIXED_CODEC(OpalG711ALaw64k20, OpalG711ALaw64k20, 64000, 20000, 160, 160, 20, 20, RTP_DataFrame::PCMU, "PCMA") int OpalG711ALaw64k20_Encoder::Encode(const void * _from, unsigned * fromLen, void * _to, unsigned * toLen, unsigned int * ) { if (*fromLen/2 > *toLen) return 0; const short * from = (short *)_from; BYTE * to = (BYTE *)_to; unsigned count = *fromLen / 2; *toLen = count; while (count-- > 0) *to++ = linear2alaw(*from++); return 1; } int OpalG711ALaw64k20_Decoder::Encode(const void * _from, unsigned * fromLen, void * _to, unsigned * toLen, unsigned int * ) { if (*fromLen*2 > *toLen) return 0; const BYTE * from = (BYTE *)_from; short * to = (short *)_to; unsigned count = *fromLen; *toLen = count * 2; while (count-- > 0) *to++ = (short)alaw2linear(*from++); return 1; } DECLARE_FIXED_CODEC(OpalG711uLaw64k, OpalG711uLaw64k, 64000, 30000, 240, 240, 30, 30, RTP_DataFrame::PCMU, "PCMU") int OpalG711uLaw64k_Encoder::Encode(const void * _from, unsigned * fromLen, void * _to, unsigned * toLen, unsigned int * ) { if (*fromLen/2 > *toLen) return 0; const short * from = (short *)_from; BYTE * to = (BYTE *)_to; unsigned count = *fromLen / 2; *toLen = count; while (count-- > 0) *to++ = linear2ulaw(*from++); return 1; } int OpalG711uLaw64k_Decoder::Encode(const void * _from, unsigned * fromLen, void * _to, unsigned * toLen, unsigned int * ) { if (*fromLen*2 > *toLen) return 0; const BYTE * from = (BYTE *)_from; short * to = (short *)_to; unsigned count = *fromLen; *toLen = count * 2; while (count-- > 0) *to++ = (short)ulaw2linear(*from++); return 1; } DECLARE_FIXED_CODEC(OpalG711uLaw64k20, OpalG711uLaw64k20, 64000, 20000, 160, 160, 20, 20, RTP_DataFrame::PCMU, "PCMU") int OpalG711uLaw64k20_Encoder::Encode(const void * _from, unsigned * fromLen, void * _to, unsigned * toLen, unsigned int * ) { if (*fromLen/2 > *toLen) return 0; const short * from = (short *)_from; BYTE * to = (BYTE *)_to; unsigned count = *fromLen / 2; *toLen = count; while (count-- > 0) *to++ = linear2ulaw(*from++); return 1; } int OpalG711uLaw64k20_Decoder::Encode(const void * _from, unsigned * fromLen, void * _to, unsigned * toLen, unsigned int * ) { if (*fromLen*2 > *toLen) return 0; const BYTE * from = (BYTE *)_from; short * to = (short *)_to; unsigned count = *fromLen; *toLen = count * 2; while (count-- > 0) *to++ = (short)ulaw2linear(*from++); return 1; } #endif // NO_H323_AUDIO_CODECS ////////////////////////////////////////////////////////////////////////////// // // Helper functions for codec control operators // static PluginCodec_ControlDefn * GetCodecControl(const PluginCodec_Definition * codec, const char * name) { PluginCodec_ControlDefn * codecControls = codec->codecControls; if (codecControls == NULL) return NULL; while (codecControls->name != NULL) { if (strcasecmp(codecControls->name, name) == 0) return codecControls; codecControls++; } return NULL; } static bool SetCustomisedOptions(const PluginCodec_Definition * codec, void * context, unsigned frameWidth, unsigned frameHeight, unsigned frameRate) { if (context == NULL) return false; PStringArray list; list.AppendString(PLUGINCODEC_OPTION_FRAME_WIDTH); list.AppendString(frameWidth); list.AppendString(PLUGINCODEC_OPTION_FRAME_HEIGHT); list.AppendString(frameHeight); list.AppendString(PLUGINCODEC_OPTION_FRAME_TIME); list.AppendString(OpalMediaFormat::VideoTimeUnits * 1000 * 100 * frameRate / 2997); char ** _options = list.ToCharArray(); unsigned int optionsLen = sizeof(_options); PluginCodec_ControlDefn * ctl = GetCodecControl(codec, SET_CODEC_CUSTOMISED_OPTIONS); if (ctl != NULL) { (*ctl->control)(codec, context ,SET_CODEC_CUSTOMISED_OPTIONS, _options, &optionsLen); return true; } return false; } static bool SetCustomisedOptions(const PluginCodec_Definition * codec, void * context, unsigned bitRate, unsigned sampleRate) { if (context == NULL) return false; PStringArray list; if (bitRate > 0) { list.AppendString(PLUGINCODEC_OPTION_MAX_BIT_RATE); list.AppendString(bitRate); } if (sampleRate > 0) { list.AppendString(PLUGINCODEC_OPTION_MAX_FRAME_SIZE); list.AppendString(sampleRate); } char ** _options = list.ToCharArray(); unsigned int optionsLen = sizeof(_options); PluginCodec_ControlDefn * ctl = GetCodecControl(codec, SET_CODEC_CUSTOMISED_OPTIONS); if (ctl != NULL) { (*ctl->control)(codec, context ,SET_CODEC_CUSTOMISED_OPTIONS, _options, &optionsLen); return true; } return false; } bool OpalPluginCodec::SetCustomFormat(unsigned frameWidth, unsigned frameHeight, unsigned frameRate) { return SetCustomisedOptions(codecDefn, context, frameWidth, frameHeight, frameRate); } bool OpalPluginCodec::SetCustomFormat(unsigned bitrate, unsigned samplerate) { return SetCustomisedOptions(codecDefn, context, bitrate, samplerate); } static PBoolean SetCodecControl(const PluginCodec_Definition * codec, void * context, const char * name, const char * parm, const char * value) { PluginCodec_ControlDefn * codecControls = GetCodecControl(codec, name); if (codecControls == NULL) return FALSE; PStringArray list; list += parm; list += value; char ** options = list.ToCharArray(); unsigned int optionsLen = sizeof(options); return (*codecControls->control)(codec, context, SET_CODEC_OPTIONS_CONTROL, options, &optionsLen); } static PBoolean SetCodecControl(const PluginCodec_Definition * codec, void * context, const char * name, const char * parm, int value) { return SetCodecControl(codec, context, name, parm, PString(PString::Signed, value)); } #ifdef H323_VIDEO static PBoolean CallCodecControl(PluginCodec_Definition * codec, void * context, const char * name, void * parm, unsigned int * parmLen, int & retVal) { PluginCodec_ControlDefn * codecControls = codec->codecControls; if (codecControls == NULL) return FALSE; while (codecControls->name != NULL) { if (strcasecmp(codecControls->name, name) == 0) { retVal = (*codecControls->control)(codec, context, name, parm, parmLen); return TRUE; } codecControls++; } return FALSE; } static PBoolean EventCodecControl(PluginCodec_Definition * codec, void * context, const char * name, const char * parm ) { PStringArray list; list += name; list += parm; char ** parms = list.ToCharArray(); unsigned int parmsLen = sizeof(parms); int retVal=0; return CallCodecControl(codec,context,EVENT_CODEC_CONTROL, parms, &parmsLen, retVal); } static void PopulateMediaFormatOptions(PluginCodec_Definition * _encoderCodec, OpalMediaFormat & format) { char ** _options = NULL; unsigned int optionsLen = sizeof(_options); int retVal; if (CallCodecControl(_encoderCodec, NULL, GET_CODEC_OPTIONS_CONTROL, &_options, &optionsLen, retVal) && (_options != NULL)) { if (_encoderCodec->version < PLUGIN_CODEC_VERSION_OPTIONS) { PTRACE(3, "OpalPlugin\tAdding options to OpalMediaFormat " << format << " using old style method"); // Old scheme char ** options = _options; while (options[0] != NULL && options[1] != NULL && options[2] != NULL) { const char * key = options[0]; // Backward compatibility tests if (strcasecmp(key, h323_qcifMPI_tag) == 0) key = qcifMPI_tag; else if (strcasecmp(key, h323_cifMPI_tag) == 0) key = cifMPI_tag; else if (strcasecmp(key, h323_sqcifMPI_tag) == 0) key = sqcifMPI_tag; else if (strcasecmp(key, h323_cif4MPI_tag) == 0) key = cif4MPI_tag; else if (strcasecmp(key, h323_cif16MPI_tag) == 0) key = cif16MPI_tag; const char * val = options[1]; const char * type = options[2]; OpalMediaOption::MergeType op = OpalMediaOption::NoMerge; if (val != NULL && val[0] != '\0' && val[1] != '\0') { switch (val[0]) { case '<': op = OpalMediaOption::MinMerge; ++val; break; case '>': op = OpalMediaOption::MaxMerge; ++val; break; case '=': op = OpalMediaOption::EqualMerge; ++val; break; case '!': op = OpalMediaOption::NotEqualMerge; ++val; break; case '*': op = OpalMediaOption::AlwaysMerge; ++val; break; default: break; } } if (type != NULL && type[0] != '\0') { PStringArray tokens = PString(val+1).Tokenise(':', FALSE); char ** array = tokens.ToCharArray(); switch (toupper(type[0])) { case 'E': if (format.HasOption(key)) format.SetOptionEnum(key,tokens.GetStringsIndex(val)); else format.AddOption(new OpalMediaOptionEnum(key, false, array, tokens.GetSize(), op, tokens.GetStringsIndex(val))); break; case 'B': if (format.HasOption(key)) format.SetOptionBoolean(key, val != NULL && (val[0] == '1' || toupper(val[0]) == 'T')); else format.AddOption(new OpalMediaOptionBoolean(key, false, op, val != NULL && (val[0] == '1' || toupper(val[0]) == 'T'))); break; case 'R': if (format.HasOption(key)) format.SetOptionReal(key, PString(val).AsReal()); else if (tokens.GetSize() < 2) format.AddOption(new OpalMediaOptionReal(key, false, op, PString(val).AsReal())); else format.AddOption(new OpalMediaOptionReal(key, false, op, PString(val).AsReal(), tokens[0].AsReal(), tokens[1].AsReal())); break; case 'I': if (format.HasOption(key)) format.SetOptionInteger(key,PString(val).AsInteger()); else if (tokens.GetSize() < 2) format.AddOption(new OpalMediaOptionInteger(key, false, op, PString(val).AsInteger())); else format.AddOption(new OpalMediaOptionInteger(key, false, op, PString(val).AsInteger(), tokens[0].AsInteger(), tokens[1].AsInteger())); break; case 'S': default: if (format.HasOption(key)) format.SetOptionString(key, val); else format.AddOption(new OpalMediaOptionString(key, false, val)); break; } free(array); } options += 3; } } else { // New scheme struct PluginCodec_Option const * const * options = (struct PluginCodec_Option const * const *)_options; PTRACE_IF(5, options != NULL, "Adding options to OpalMediaFormat " << format << " using new style method"); while (*options != NULL) { struct PluginCodec_Option const * option = *options++; OpalMediaOption * newOption; switch (option->m_type) { case PluginCodec_StringOption : newOption = new OpalMediaOptionString(option->m_name, option->m_readOnly != 0, option->m_value); break; case PluginCodec_BoolOption : newOption = new OpalMediaOptionBoolean(option->m_name, option->m_readOnly != 0, (OpalMediaOption::MergeType)option->m_merge, option->m_value != NULL && *option->m_value == 'T'); break; case PluginCodec_IntegerOption : newOption = new OpalMediaOptionUnsigned(option->m_name, option->m_readOnly != 0, (OpalMediaOption::MergeType)option->m_merge, PString(option->m_value).AsInteger(), PString(option->m_minimum).AsInteger(), PString(option->m_maximum).AsInteger()); break; case PluginCodec_RealOption : newOption = new OpalMediaOptionReal(option->m_name, option->m_readOnly != 0, (OpalMediaOption::MergeType)option->m_merge, PString(option->m_value).AsReal(), PString(option->m_minimum).AsReal(), PString(option->m_maximum).AsReal()); break; case PluginCodec_EnumOption : { PStringArray valueTokens = PString(option->m_minimum).Tokenise(':'); char ** enumValues = valueTokens.ToCharArray(); newOption = new OpalMediaOptionEnum(option->m_name, option->m_readOnly != 0, enumValues, valueTokens.GetSize(), (OpalMediaOption::MergeType)option->m_merge, valueTokens.GetStringsIndex(option->m_value)); free(enumValues); } break; case PluginCodec_OctetsOption : newOption = new OpalMediaOptionOctets(option->m_name, option->m_readOnly != 0, option->m_minimum != NULL); // Use minimum to indicate Base64 newOption->FromString(option->m_value); break; default : // Huh? continue; } newOption->SetFMTPName(option->m_FMTPName); newOption->SetFMTPDefault(option->m_FMTPDefault); OpalMediaOption::H245GenericInfo genericInfo; genericInfo.ordinal = option->m_H245Generic&PluginCodec_H245_OrdinalMask; if (option->m_H245Generic&PluginCodec_H245_Collapsing) genericInfo.mode = OpalMediaOption::H245GenericInfo::Collapsing; else if (option->m_H245Generic&PluginCodec_H245_NonCollapsing) genericInfo.mode = OpalMediaOption::H245GenericInfo::NonCollapsing; else genericInfo.mode = OpalMediaOption::H245GenericInfo::None; if (option->m_H245Generic&PluginCodec_H245_Unsigned32) genericInfo.integerType = OpalMediaOption::H245GenericInfo::Unsigned32; else if (option->m_H245Generic&PluginCodec_H245_BooleanArray) genericInfo.integerType = OpalMediaOption::H245GenericInfo::BooleanArray; else genericInfo.integerType = OpalMediaOption::H245GenericInfo::UnsignedInt; genericInfo.excludeTCS = (option->m_H245Generic&PluginCodec_H245_TCS) == 0; genericInfo.excludeOLC = (option->m_H245Generic&PluginCodec_H245_OLC) == 0; genericInfo.excludeReqMode = (option->m_H245Generic&PluginCodec_H245_ReqMode) == 0; newOption->SetH245Generic(genericInfo); format.AddOption(newOption, TRUE); } } CallCodecControl(_encoderCodec, NULL, FREE_CODEC_OPTIONS_CONTROL, _options, &optionsLen, retVal); } else { PTRACE(4,"PLUGIN\tUnable to read default options"); } } static void SetDefaultVideoOptions(OpalMediaFormat & mediaFormat) { mediaFormat.AddOption(new OpalMediaOptionInteger(qcifMPI_tag, false, OpalMediaOption::MinMerge, 0)); mediaFormat.AddOption(new OpalMediaOptionInteger(cifMPI_tag, false, OpalMediaOption::MinMerge, 0)); mediaFormat.AddOption(new OpalMediaOptionInteger(sqcifMPI_tag, false, OpalMediaOption::MinMerge, 0)); mediaFormat.AddOption(new OpalMediaOptionInteger(cif4MPI_tag, false, OpalMediaOption::MinMerge, 0)); mediaFormat.AddOption(new OpalMediaOptionInteger(cif16MPI_tag, false, OpalMediaOption::MinMerge, 0)); mediaFormat.AddOption(new OpalMediaOptionInteger(OpalVideoFormat::FrameWidthOption, true, OpalMediaOption::MinMerge, CIF_WIDTH, 11, 32767)); mediaFormat.AddOption(new OpalMediaOptionInteger(OpalVideoFormat::FrameHeightOption, true, OpalMediaOption::MinMerge, CIF_HEIGHT, 9, 32767)); mediaFormat.AddOption(new OpalMediaOptionInteger(OpalVideoFormat::EncodingQualityOption, false, OpalMediaOption::MinMerge, 15, 1, 31)); mediaFormat.AddOption(new OpalMediaOptionInteger(OpalVideoFormat::TargetBitRateOption, false, OpalMediaOption::MinMerge, mediaFormat.GetBandwidth(), 1000)); mediaFormat.AddOption(new OpalMediaOptionInteger(OpalVideoFormat::MaxBitRateOption, false, OpalMediaOption::MinMerge, mediaFormat.GetBandwidth(), 1000)); mediaFormat.AddOption(new OpalMediaOptionBoolean(OpalVideoFormat::DynamicVideoQualityOption, false, OpalMediaOption::NoMerge, false)); mediaFormat.AddOption(new OpalMediaOptionBoolean(OpalVideoFormat::AdaptivePacketDelayOption, false, OpalMediaOption::NoMerge, false)); mediaFormat.AddOption(new OpalMediaOptionInteger(OpalVideoFormat::FrameTimeOption, false, OpalMediaOption::NoMerge, 9000)); mediaFormat.AddOption(new OpalMediaOptionBoolean(h323_temporalSpatialTradeOffCapability_tag, false, OpalMediaOption::NoMerge, false)); mediaFormat.AddOption(new OpalMediaOptionBoolean(h323_stillImageTransmission_tag , false, OpalMediaOption::NoMerge, false)); } #endif // #ifdef H323_VIDEO static void PopulateMediaFormatFromGenericData(OpalMediaFormat & mediaFormat, const PluginCodec_H323GenericCodecData * genericData) { const PluginCodec_H323GenericParameterDefinition *ptr = genericData->params; for (unsigned i = 0; i < genericData->nParameters; i++, ptr++) { OpalMediaOption::H245GenericInfo generic; generic.ordinal = ptr->id; generic.mode = ptr->collapsing ? OpalMediaOption::H245GenericInfo::Collapsing : OpalMediaOption::H245GenericInfo::NonCollapsing; generic.excludeTCS = ptr->excludeTCS; generic.excludeOLC = ptr->excludeOLC; generic.excludeReqMode = ptr->excludeReqMode; generic.integerType = OpalMediaOption::H245GenericInfo::UnsignedInt; PString name(PString::Printf, "Generic Parameter %u", ptr->id); OpalMediaOption * mediaOption; switch (ptr->type) { case PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_logical : mediaOption = new OpalMediaOptionBoolean(name, ptr->readOnly, OpalMediaOption::NoMerge, ptr->value.integer != 0); break; case PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_booleanArray : generic.integerType = OpalMediaOption::H245GenericInfo::BooleanArray; mediaOption = new OpalMediaOptionUnsigned(name, ptr->readOnly, OpalMediaOption::AndMerge, ptr->value.integer, 0, 255); break; case PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_unsigned32Min : generic.integerType = OpalMediaOption::H245GenericInfo::Unsigned32; // Do next case case PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_unsignedMin : mediaOption = new OpalMediaOptionUnsigned(name, ptr->readOnly, OpalMediaOption::MinMerge, ptr->value.integer); break; case PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_unsigned32Max : generic.integerType = OpalMediaOption::H245GenericInfo::Unsigned32; // Do next case case PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_unsignedMax : mediaOption = new OpalMediaOptionUnsigned(name, ptr->readOnly, OpalMediaOption::MaxMerge, ptr->value.integer); break; case PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_octetString : mediaOption = new OpalMediaOptionString(name, ptr->readOnly, ptr->value.octetstring); break; default : mediaOption = NULL; } if (mediaOption != NULL) { mediaOption->SetH245Generic(generic); mediaFormat.AddOption(mediaOption); } } } static PString CreateCodecName(PluginCodec_Definition * codec, PBoolean addSW) { PString str; if (codec->destFormat != NULL) str = codec->destFormat; else str = PString(codec->descr); if (addSW) str += "{sw}"; return str; } static PString CreateCodecName(const PString & baseName, PBoolean addSW) { PString str(baseName); if (addSW) str += "{sw}"; return str; } static void SetDefaultAudioOptions(OpalMediaFormat & mediaFormat) { #ifdef H323_VIDEO mediaFormat.AddOption(new OpalMediaOptionInteger(OpalVideoFormat::MaxBitRateOption, false, OpalMediaOption::MinMerge, mediaFormat.GetBandwidth()*100, 1000)); #endif } class OpalPluginAudioMediaFormat : public OpalMediaFormat { public: friend class H323PluginCodecManager; OpalPluginAudioMediaFormat( PluginCodec_Definition * _encoderCodec, unsigned defaultSessionID, /// Default session for codec type PBoolean needsJitter, /// Indicate format requires a jitter buffer unsigned frameTime, /// Time for frame in RTP units (if applicable) unsigned timeUnits, /// RTP units for frameTime (if applicable) time_t timeStamp /// timestamp (for versioning) ) : OpalMediaFormat( CreateCodecName(_encoderCodec, FALSE), defaultSessionID, (RTP_DataFrame::PayloadTypes)(((_encoderCodec->flags & PluginCodec_RTPTypeMask) == PluginCodec_RTPTypeDynamic) ? RTP_DataFrame::DynamicBase : _encoderCodec->rtpPayload), needsJitter, _encoderCodec->bitsPerSec, _encoderCodec->parm.audio.bytesPerFrame, frameTime, timeUnits, timeStamp ) , encoderCodec(_encoderCodec) { SetDefaultAudioOptions(*this); // manually register the new singleton type, as we do not have a concrete type OpalMediaFormatFactory::Register(*this, this); } ~OpalPluginAudioMediaFormat() { OpalMediaFormatFactory::Unregister(*this); } PluginCodec_Definition * encoderCodec; }; #ifdef H323_AUDIO_CODECS static H323Capability * CreateG7231Cap( PluginCodec_Definition * encoderCodec, PluginCodec_Definition * decoderCodec, int subType ); static H323Capability * CreateGenericAudioCap( PluginCodec_Definition * encoderCodec, PluginCodec_Definition * decoderCodec, int subType ); static H323Capability * CreateNonStandardAudioCap( PluginCodec_Definition * encoderCodec, PluginCodec_Definition * decoderCodec, int subType ); static H323Capability * CreateGSMCap( PluginCodec_Definition * encoderCodec, PluginCodec_Definition * decoderCodec, int subType ); #endif // NO_H323_AUDIO ///////////////////////////////////////////////////// #ifdef H323_VIDEO class OpalPluginVideoMediaFormat : public OpalVideoFormat { public: friend class OpalPluginCodecManager; OpalPluginVideoMediaFormat( PluginCodec_Definition * _encoderCodec, const char * /*rtpEncodingName*/, /// rtp encoding name. Not required time_t timeStamp /// timestamp (for versioning) ) : OpalVideoFormat( CreateCodecName(_encoderCodec, FALSE), (RTP_DataFrame::PayloadTypes)(((_encoderCodec->flags & PluginCodec_RTPTypeMask) == PluginCodec_RTPTypeDynamic) ? RTP_DataFrame::DynamicBase : _encoderCodec->rtpPayload), _encoderCodec->parm.video.maxFrameWidth, _encoderCodec->parm.video.maxFrameHeight, _encoderCodec->parm.video.maxFrameRate, _encoderCodec->bitsPerSec, timeStamp ) , encoderCodec(_encoderCodec) { SetDefaultVideoOptions(*this); rtpPayloadType = (RTP_DataFrame::PayloadTypes)(((_encoderCodec->flags & PluginCodec_RTPTypeMask) == PluginCodec_RTPTypeDynamic) ? RTP_DataFrame::DynamicBase : _encoderCodec->rtpPayload); frameTime = (VideoTimeUnits * encoderCodec->usPerFrame) / 1000; timeUnits = encoderCodec->sampleRate / 1000; // manually register the new singleton type, as we do not have a concrete type OpalMediaFormatFactory::Register(*this, this); } ~OpalPluginVideoMediaFormat() { OpalMediaFormatFactory::Unregister(*this); } PObject * Clone() const { return new OpalPluginVideoMediaFormat(*this); } PluginCodec_Definition * encoderCodec; }; static H323Capability * CreateNonStandardVideoCap( PluginCodec_Definition * encoderCodec, PluginCodec_Definition * decoderCodec, int subType ); static H323Capability * CreateGenericVideoCap( PluginCodec_Definition * encoderCodec, PluginCodec_Definition * decoderCodec, int subType ); static H323Capability * CreateH261Cap( PluginCodec_Definition * encoderCodec, PluginCodec_Definition * decoderCodec, int subType ); static H323Capability * CreateH263Cap( PluginCodec_Definition * encoderCodec, PluginCodec_Definition * decoderCodec, int subType ); #endif // H323_VIDEO /* ////////////////////////////////////////////////////////////////////////////// // // Class to auto-register plugin capabilities // class H323CodecPluginCapabilityRegistration : public PObject { public: H323CodecPluginCapabilityRegistration( PluginCodec_Definition * _encoderCodec, PluginCodec_Definition * _decoderCodec ); H323Capability * Create(H323EndPoint & ep) const; static H323Capability * CreateG7231Cap (H323EndPoint & ep, int subType) const; static H323Capability * CreateNonStandardAudioCap(H323EndPoint & ep, int subType) const; //H323Capability * CreateNonStandardVideoCap(H323EndPoint & ep, int subType) const; static H323Capability * CreateGSMCap (H323EndPoint & ep, int subType) const; static H323Capability * CreateH261Cap (H323EndPoint & ep, int subType) const; protected: PluginCodec_Definition * encoderCodec; PluginCodec_Definition * decoderCodec; }; */ class H323CodecPluginCapabilityMapEntry { public: int pluginCapType; int h323SubType; H323Capability * (* createFunc)(PluginCodec_Definition * encoderCodec, PluginCodec_Definition * decoderCodec, int subType); }; #ifdef H323_AUDIO_CODECS static H323CodecPluginCapabilityMapEntry audioMaps[] = { { PluginCodec_H323Codec_nonStandard, H245_AudioCapability::e_nonStandard, &CreateNonStandardAudioCap }, { PluginCodec_H323AudioCodec_gsmFullRate, H245_AudioCapability::e_gsmFullRate, &CreateGSMCap }, { PluginCodec_H323AudioCodec_gsmHalfRate, H245_AudioCapability::e_gsmHalfRate, &CreateGSMCap }, { PluginCodec_H323AudioCodec_gsmEnhancedFullRate, H245_AudioCapability::e_gsmEnhancedFullRate, &CreateGSMCap }, { PluginCodec_H323AudioCodec_g711Alaw_64k, H245_AudioCapability::e_g711Alaw64k }, { PluginCodec_H323AudioCodec_g711Alaw_56k, H245_AudioCapability::e_g711Alaw56k }, { PluginCodec_H323AudioCodec_g711Ulaw_64k, H245_AudioCapability::e_g711Ulaw64k }, { PluginCodec_H323AudioCodec_g711Ulaw_56k, H245_AudioCapability::e_g711Ulaw56k }, { PluginCodec_H323AudioCodec_g7231, H245_AudioCapability::e_g7231, &CreateG7231Cap }, { PluginCodec_H323AudioCodec_g729, H245_AudioCapability::e_g729 }, { PluginCodec_H323AudioCodec_g729AnnexA, H245_AudioCapability::e_g729AnnexA }, { PluginCodec_H323AudioCodec_g728, H245_AudioCapability::e_g728 }, { PluginCodec_H323AudioCodec_g722_64k, H245_AudioCapability::e_g722_64k }, { PluginCodec_H323AudioCodec_g722_56k, H245_AudioCapability::e_g722_56k }, { PluginCodec_H323AudioCodec_g722_48k, H245_AudioCapability::e_g722_48k }, { PluginCodec_H323AudioCodec_g729wAnnexB, H245_AudioCapability::e_g729wAnnexB }, { PluginCodec_H323AudioCodec_g729AnnexAwAnnexB, H245_AudioCapability::e_g729AnnexAwAnnexB }, { PluginCodec_H323Codec_generic, H245_AudioCapability::e_genericAudioCapability, &CreateGenericAudioCap }, // not implemented //{ PluginCodec_H323AudioCodec_g729Extensions, H245_AudioCapability::e_g729Extensions, 0 }, //{ PluginCodec_H323AudioCodec_g7231AnnexC, H245_AudioCapability::e_g7231AnnexCMode 0 }, //{ PluginCodec_H323AudioCodec_is11172, H245_AudioCapability::e_is11172AudioMode, 0 }, //{ PluginCodec_H323AudioCodec_is13818Audio, H245_AudioCapability::e_is13818AudioMode, 0 }, { -1 } }; #endif #ifdef H323_VIDEO static H323CodecPluginCapabilityMapEntry videoMaps[] = { // video codecs { PluginCodec_H323Codec_nonStandard, H245_VideoCapability::e_nonStandard, &CreateNonStandardVideoCap }, { PluginCodec_H323VideoCodec_h261, H245_VideoCapability::e_h261VideoCapability, &CreateH261Cap }, { PluginCodec_H323VideoCodec_h263, H245_VideoCapability::e_h263VideoCapability, &CreateH263Cap }, { PluginCodec_H323Codec_generic, H245_VideoCapability::e_genericVideoCapability, &CreateGenericVideoCap }, /* PluginCodec_H323VideoCodec_h262, // not yet implemented PluginCodec_H323VideoCodec_is11172, // not yet implemented */ { -1 } }; #endif // H323_VIDEO static bool UpdatePluginOptions(const PluginCodec_Definition * codec, void * context, OpalMediaFormat & mediaFormat) { PluginCodec_ControlDefn * ctl = GetCodecControl(codec, SET_CODEC_OPTIONS_CONTROL); if (ctl != NULL) { PStringArray list(mediaFormat.GetOptionCount()*2); for (PINDEX i = 0; i < mediaFormat.GetOptionCount(); i++) { const OpalMediaOption & option = mediaFormat.GetOption(i); list[i*2] = option.GetName(); list[(i*2)+1] = option.AsString(); } char ** _options = list.ToCharArray(); unsigned int optionsLen = sizeof(_options); (*ctl->control)(codec, context, SET_CODEC_OPTIONS_CONTROL, _options, &optionsLen); for (int i = 0; _options[i] != NULL; i += 2) { const char * key = _options[i]; int val = atoi(_options[i+1]); if (mediaFormat.HasOption(key)) mediaFormat.SetOptionInteger(key,val); } #ifdef H323_VIDEO mediaFormat.SetBandwidth(mediaFormat.GetOptionInteger(OpalVideoFormat::MaxBitRateOption)); #endif free(_options); return true; } return false; } ////////////////////////////////////////////////////////////////////////////// // // Plugin framed audio codec classes // #ifdef H323_AUDIO_CODECS class H323PluginFramedAudioCodec : public H323FramedAudioCodec { PCLASSINFO(H323PluginFramedAudioCodec, H323FramedAudioCodec); public: H323PluginFramedAudioCodec(const OpalMediaFormat & fmtName, Direction direction, PluginCodec_Definition * _codec) : H323FramedAudioCodec(fmtName, direction), codec(_codec) { if (codec != NULL && codec->createCodec != NULL) { context = (*codec->createCodec)(codec); UpdatePluginOptions(codec,context,GetWritableMediaFormat()); } else context = NULL; } ~H323PluginFramedAudioCodec() { if (codec != NULL && codec->destroyCodec != NULL) (*codec->destroyCodec)(codec, context); } PBoolean EncodeFrame( BYTE * buffer, /// Buffer into which encoded bytes are placed unsigned int & toLen /// Actual length of encoded data buffer ) { if (codec == NULL || direction != Encoder) return FALSE; unsigned int fromLen = codec->parm.audio.samplesPerFrame*2; toLen = codec->parm.audio.bytesPerFrame; unsigned flags = 0; return (codec->codecFunction)(codec, context, (const unsigned char *)sampleBuffer.GetPointer(), &fromLen, buffer, &toLen, &flags) != 0; }; PBoolean DecodeFrame( const BYTE * buffer, /// Buffer from which encoded data is found unsigned length, /// Length of encoded data buffer unsigned & written, /// Number of bytes used from data buffer unsigned & bytesDecoded /// Number of bytes output from frame ) { if (codec == NULL || direction != Decoder) return FALSE; unsigned flags = 0; if ((codec->codecFunction)(codec, context, buffer, &length, (unsigned char *)sampleBuffer.GetPointer(), &bytesDecoded, &flags) == 0) return FALSE; written = length; return TRUE; } void DecodeSilenceFrame( void * buffer, /// Buffer from which encoded data is found unsigned length /// Length of encoded data buffer ) { if ((codec->flags & PluginCodec_DecodeSilence) == 0) memset(buffer, 0, length); else { unsigned flags = PluginCodec_CoderSilenceFrame; (codec->codecFunction)(codec, context, NULL, NULL, buffer, &length, &flags); } } virtual void SetTxQualityLevel(int qlevel) { SetCodecControl(codec, context, SET_CODEC_OPTIONS_CONTROL, "set_quality", qlevel); } protected: void * context; PluginCodec_Definition * codec; }; ////////////////////////////////////////////////////////////////////////////// // // Plugin streamed audio codec classes // class H323StreamedPluginAudioCodec : public H323StreamedAudioCodec { PCLASSINFO(H323StreamedPluginAudioCodec, H323StreamedAudioCodec); public: H323StreamedPluginAudioCodec( const OpalMediaFormat & fmtName, H323Codec::Direction direction, unsigned samplesPerFrame, /// Number of samples in a frame unsigned bits, /// Bits per sample PluginCodec_Definition * _codec ) : H323StreamedAudioCodec(fmtName, direction, samplesPerFrame, bits), codec(_codec) { if (codec != NULL && codec->createCodec != NULL) context = (*codec->createCodec)(codec); else context = NULL; } ~H323StreamedPluginAudioCodec() { if (codec != NULL && codec->destroyCodec != NULL) (*codec->destroyCodec)(codec, context); } int Encode(short sample) const { if (codec == NULL || direction != Encoder) return 0; unsigned int fromLen = sizeof(sample); int to; unsigned toLen = sizeof(to); unsigned flags = 0; (codec->codecFunction)(codec, context, (const unsigned char *)&sample, &fromLen, (unsigned char *)&to, &toLen, &flags); return to; } short Decode(int sample) const { if (codec == NULL || direction != Decoder) return 0; unsigned fromLen = sizeof(sample); short to; unsigned toLen = sizeof(to); unsigned flags = 0; (codec->codecFunction)(codec, context, (const unsigned char *)&sample, &fromLen, (unsigned char *)&to, &toLen, &flags); return to; } virtual void SetTxQualityLevel(int qlevel) { SetCodecControl(codec, context, SET_CODEC_OPTIONS_CONTROL, "set_quality", qlevel); } protected: void * context; PluginCodec_Definition * codec; }; #endif // NO_H323_AUDIO_CODECS ////////////////////////////////////////////////////////////////////////////// // // Plugin video codec class // #ifdef H323_VIDEO class H323PluginVideoCodec : public H323VideoCodec { PCLASSINFO(H323PluginVideoCodec, H323VideoCodec); public: H323PluginVideoCodec(const OpalMediaFormat & fmt, Direction direction, PluginCodec_Definition * _codec, const H323Capability * cap = NULL ); ~H323PluginVideoCodec(); virtual PBoolean Read( BYTE * buffer, ///< Buffer of encoded data unsigned & length, ///< Actual length of encoded data buffer RTP_DataFrame & dst ///< RTP data frame ); virtual PBoolean Write( const BYTE * buffer, ///< Buffer of encoded data unsigned length, ///< Length of encoded data buffer const RTP_DataFrame & src, ///< RTP data frame unsigned & written ///< Number of bytes used from data buffer ); PBoolean RenderFrame( const BYTE * buffer, ///< Buffer of data to render void * mark ///< WaterMark ); virtual unsigned GetFrameRate() const { return targetFrameTimeMs ? 90000/targetFrameTimeMs : 30; } PBoolean SetTargetFrameTimeMs(unsigned ms) // Requires implementing { targetFrameTimeMs = ms; return TRUE; } virtual PBoolean SetFrameSize(int width, int height); virtual PBoolean SetFrameSize(int width, int height,int sarwidth, int sarheight); void SetTxQualityLevel(int qlevel) { SetCodecControl(codec, context, SET_CODEC_OPTIONS_CONTROL, "Encoding Quality", qlevel); } void SetTxMinQuality(int qlevel) { SetCodecControl(codec, context, SET_CODEC_OPTIONS_CONTROL, "set_min_quality", qlevel); } void SetTxMaxQuality(int qlevel) { SetCodecControl(codec, context, SET_CODEC_OPTIONS_CONTROL, "set_max_quality", qlevel); } void SetBackgroundFill(int fillLevel) { SetCodecControl(codec, context, SET_CODEC_OPTIONS_CONTROL, "set_background_fill", fillLevel); } virtual unsigned GetMaxBitRate() const { return mediaFormat.GetOptionInteger(OpalVideoFormat::MaxBitRateOption); } PBoolean SetMaxBitRate(unsigned bitRate); void SetGeneralCodecOption(const char * opt, int val) { SetCodecControl(codec, context, SET_CODEC_OPTIONS_CONTROL, opt, val);} unsigned GetVideoMode(void); void SetVideoMode(int mode); // The following require implementation in the plugin codec virtual void OnFastUpdatePicture() { EventCodecControl(codec, context, "on_fast_update", ""); sendIntra = true; } virtual void OnFlowControl(long bitRateRestriction); virtual void SetSupportedFormats(std::list & info); virtual void OnLostPartialPicture() { EventCodecControl(codec, context, "on_lost_partial", ""); } virtual void OnLostPicture() { EventCodecControl(codec, context, "on_lost_picture", ""); } protected: void * context; PluginCodec_Definition * codec; long flowRequest; RTP_DataFrame bufferRTP; PBoolean lastPacketSent; unsigned bytesPerFrame; unsigned lastFrameTimeRTP; unsigned targetFrameTimeMs; int maxWidth; int maxHeight; bool sendIntra; mutable PTimeInterval lastFrameTick; }; static bool SetFlowControl(const PluginCodec_Definition * codec, void * context, OpalMediaFormat & mediaFormat, long bitRate) { if (context == NULL) return false; if (mediaFormat.GetOptionInteger(OpalVideoFormat::MaxBitRateOption) < (bitRate*100)) { PTRACE(3,"H323\tFlow Control request exceeds codec limits Ignored! Max: " << mediaFormat.GetOptionInteger(OpalVideoFormat::MaxBitRateOption) << " Req: " << bitRate*100); return false; } if (mediaFormat.GetOptionInteger(OpalVideoFormat::TargetBitRateOption) == (bitRate*100)) { PTRACE(3,"H323\tFlow Control request ignored already doing " << bitRate*100); return false; } PluginCodec_ControlDefn * ctl = GetCodecControl(codec, SET_CODEC_FLOWCONTROL_OPTIONS); if (ctl != NULL) { mediaFormat.SetOptionInteger(OpalVideoFormat::TargetBitRateOption,(int)bitRate * 100); PStringArray strlist(mediaFormat.GetOptionCount()*2); for (PINDEX i = 0; i < mediaFormat.GetOptionCount(); i++) { const OpalMediaOption & option = mediaFormat.GetOption(i); strlist[i*2] = option.GetName(); strlist[(i*2)+1] = option.AsString(); } char ** _options = strlist.ToCharArray(); unsigned int optionsLen = sizeof(_options); (*ctl->control)(codec, context ,SET_CODEC_FLOWCONTROL_OPTIONS, _options, &optionsLen); for (int i = 0; _options[i] != NULL; i += 2) { const char * key = _options[i]; int val = atoi(_options[i+1]); if (mediaFormat.HasOption(key)) mediaFormat.SetOptionInteger(key,val); } free(_options); strlist.SetSize(0); #if PTRACING PTRACE(6, "H323\tFlow Control applied: "); OpalMediaFormat::DebugOptionList(mediaFormat); #endif return true; } PTRACE(3, "H323\tNo Flow Control supported in codec:"); return false; } static bool SetCustomLevel(const PluginCodec_Definition * codec, OpalMediaFormat & mediaFormat, unsigned width, unsigned height, unsigned rate) { mediaFormat.SetOptionInteger(OpalVideoFormat::FrameWidthOption,width); mediaFormat.SetOptionInteger(OpalVideoFormat::FrameHeightOption,height); mediaFormat.SetOptionInteger(OpalVideoFormat::FrameTimeOption, (int)(OpalMediaFormat::VideoTimeUnits * 1000 * 100 * rate / 2997)); PluginCodec_ControlDefn * ctl = GetCodecControl(codec, SET_CODEC_CUSTOMISED_OPTIONS); if (ctl != NULL) { PStringArray list; for (PINDEX i = 0; i < mediaFormat.GetOptionCount(); i++) { const OpalMediaOption & option = mediaFormat.GetOption(i); list += option.GetName(); list += option.AsString(); } char ** _options = list.ToCharArray(); unsigned int optionsLen = sizeof(_options); (*ctl->control)(codec, NULL,SET_CODEC_CUSTOMISED_OPTIONS, _options, &optionsLen); while (_options[0] != NULL && _options[1] != NULL) { const char * key = _options[0]; int val = atoi(_options[1]); if (strcasecmp(key, OpalVideoFormat::TargetBitRateOption) == 0) { mediaFormat.SetOptionInteger(OpalVideoFormat::TargetBitRateOption,val); mediaFormat.SetOptionInteger(OpalVideoFormat::MaxBitRateOption,val); } else if (strcasecmp(key, "Generic Parameter 42") == 0) mediaFormat.SetOptionInteger("Generic Parameter 42",val); else if (strcasecmp(key, "Generic Parameter 10") == 0) mediaFormat.SetOptionInteger("Generic Parameter 10",13); // 16:9 Ratio _options += 2; } //free(_options); #if PTRACING PTRACE(6, "H323\tCustom Video Format: "); OpalMediaFormat::DebugOptionList(mediaFormat); #endif return true; } return false; } bool OpalPluginCodec::SetMediaFormat(OpalMediaFormat & fmt) { switch (codecDefn->flags & PluginCodec_MediaTypeMask) { case PluginCodec_MediaTypeVideo: SetDefaultVideoOptions(fmt); break; case PluginCodec_MediaTypeAudio: case PluginCodec_MediaTypeAudioStreamed: default: return false; } PopulateMediaFormatOptions(codecDefn, fmt); PopulateMediaFormatFromGenericData(fmt, (PluginCodec_H323GenericCodecData *)codecDefn->h323CapabilityData); OpalMediaFormat::DebugOptionList(fmt); return true; } ///////////////////////////////////////////////////////////////////////////////////////// bool OpalPluginCodec::UpdateMediaOptions(OpalMediaFormat & fmt) { switch (codecDefn->flags & PluginCodec_MediaTypeMask) { case PluginCodec_MediaTypeVideo: case PluginCodec_MediaTypeAudio: return UpdatePluginOptions(codecDefn, context, fmt); case PluginCodec_MediaTypeAudioStreamed: default: return false; } } bool OpalPluginCodec::CodecControl(const char * name, void * parm, unsigned int * parmLen, int & retVal) { return CallCodecControl(codecDefn, context, name, parm, parmLen, retVal); } /////////////////////////////////////////////////////////////////////////////////////////// H323PluginVideoCodec::H323PluginVideoCodec(const OpalMediaFormat & fmt, Direction direction, PluginCodec_Definition * _codec, const H323Capability * cap) : H323VideoCodec(fmt, direction), codec(_codec), flowRequest(0) { if (codec != NULL && codec->createCodec != NULL) context = (*codec->createCodec)(codec); else context = NULL; UpdatePluginOptions(codec,context,GetWritableMediaFormat()); if (cap) { OpalMediaFormat & capFmt = PRemoveConst(H323Capability, cap)->GetWritableMediaFormat(); capFmt = GetMediaFormat(); } sendIntra = TRUE; lastPacketSent = TRUE; lastFrameTimeRTP = 0; frameWidth = maxWidth = mediaFormat.GetOptionInteger(OpalVideoFormat::FrameWidthOption); frameHeight = maxHeight = mediaFormat.GetOptionInteger(OpalVideoFormat::FrameHeightOption); targetFrameTimeMs = mediaFormat.GetOptionInteger(OpalVideoFormat::FrameTimeOption); // TODO: setup sar for standard size. // Need to allocate buffer to the maximum framesize statically // and clear the memory in the destructor to avoid segfault in destructor bytesPerFrame = (maxHeight * maxWidth * 3)/2; bufferRTP = RTP_DataFrame(sizeof(PluginCodec_Video_FrameHeader) + bytesPerFrame, TRUE); #if PTRACING PTRACE(6,"Agreed Codec Options"); OpalMediaFormat::DebugOptionList(mediaFormat); #endif } H323PluginVideoCodec::~H323PluginVideoCodec() { //PWaitAndSignal mutex(videoHandlerActive); // Set the buffer memory to zero to prevent // memory leak bufferRTP.SetSize(0); if (codec != NULL && codec->destroyCodec != NULL) (*codec->destroyCodec)(codec, context); } PBoolean H323PluginVideoCodec::SetMaxBitRate(unsigned bitRate) { if (SetFlowControl(codec,context,mediaFormat,bitRate/100)) { frameWidth = mediaFormat.GetOptionInteger(OpalVideoFormat::FrameWidthOption); frameHeight = mediaFormat.GetOptionInteger(OpalVideoFormat::FrameHeightOption); targetFrameTimeMs = mediaFormat.GetOptionInteger(OpalVideoFormat::FrameTimeOption); mediaFormat.SetBandwidth(bitRate); return true; } return false; } PStringArray LoadInputDeviceOptions(const OpalMediaFormat & fmt) { PStringArray list; list += OpalVideoFormat::FrameHeightOption; list += PString(fmt.GetOptionInteger(OpalVideoFormat::FrameHeightOption)); list += OpalVideoFormat::FrameWidthOption; list += PString(fmt.GetOptionInteger(OpalVideoFormat::FrameWidthOption)); list += OpalVideoFormat::FrameTimeOption; list += PString(fmt.GetOptionInteger(OpalVideoFormat::FrameTimeOption)); return list; } void H323PluginVideoCodec::OnFlowControl(long bitRateRestriction) { if (direction != Encoder) { PTRACE(1, "PLUGIN\tAttempt to flowControl the decoder!"); return; } flowRequest = bitRateRestriction; } void H323PluginVideoCodec::SetSupportedFormats(std::list & info) { PluginCodec_ControlDefn * ctl = GetCodecControl(codec, SET_CODEC_FORMAT_OPTIONS); int i=0; if (ctl != NULL && info.size() > 0) { PStringArray list(info.size()*2 + mediaFormat.GetOptionCount()*2); for (std::list::const_iterator r = info.begin(); r != info.end(); ++r) { PString option(PString(r->GetFrameWidth()) + "," + PString(r->GetFrameHeight()) + "," + PString(r->GetFrameRate())); list[i*2] = PString("InputFmt"+ PString(i+1)); list[(i*2)+1] = option; i++; } for (PINDEX j = 0; j < mediaFormat.GetOptionCount(); j++) { const OpalMediaOption & option = mediaFormat.GetOption(j); list[i*2] = option.GetName(); list[(i*2)+1] = option.AsString(); i++; } int nw = frameWidth; int nh = frameHeight; char ** _options = list.ToCharArray(); unsigned int optionsLen = sizeof(_options); (*ctl->control)(codec, context, SET_CODEC_FORMAT_OPTIONS, _options, &optionsLen); for (i = 0; _options[i] != NULL; i += 2) { const char * key = _options[i]; int val = atoi(_options[i+1]);; if (mediaFormat.HasOption(key)) { mediaFormat.SetOptionInteger(key,val); if (strcmp(key, OpalVideoFormat::FrameWidthOption) == 0) nw = val; else if (strcmp(key, OpalVideoFormat::FrameHeightOption) == 0) nh = val; else if (strcmp(key, OpalVideoFormat::FrameTimeOption) == 0) targetFrameTimeMs = val; } } SetFrameSize(nw,nh); } else { PTRACE(4,"PLUGIN\tUnable to set format options in codec"); } } PBoolean H323PluginVideoCodec::Read(BYTE * /*buffer*/, unsigned & length, RTP_DataFrame & dst) { PWaitAndSignal mutex(videoHandlerActive); if (direction != Encoder) { PTRACE(1, "Plugin\tAttempt to decode from encoder"); return FALSE; } if (rawDataChannel == NULL) { PTRACE(1, "PLUGIN\tNo channel to grab from, close down video transmission thread"); return FALSE; } PVideoChannel *videoIn = (PVideoChannel *)rawDataChannel; #if 0 //PTLIB_VER >= 2110 if (videoIn->SourceEncoded(lastPacketSent,length)) { int maxDataSize = 1518-14-4-8-20-16; // Max Ethernet packet (1518 bytes) minus 802.3/CRC, 802.3, IP, UDP headers dst.SetMinSize(maxDataSize); if (rawDataChannel->Read(dst.GetPayloadPtr(), length)) { dst.SetMarker(lastPacketSent); return true; } else return false; } #endif PluginCodec_Video_FrameHeader * frameHeader = (PluginCodec_Video_FrameHeader *)bufferRTP.GetPayloadPtr(); frameHeader->x = 0; frameHeader->y = 0; frameHeader->width = videoIn->GetGrabWidth(); frameHeader->height = videoIn->GetGrabHeight(); if (frameHeader->width == 0 || frameHeader->height == 0) { PTRACE(1,"PLUGIN\tVideo grab dimension is 0, close down video transmission thread"); videoIn->EnableAccess(); return FALSE; } if (lastPacketSent) { videoIn->RestrictAccess(); if (!videoIn->IsGrabberOpen()) { PTRACE(1, "PLUGIN\tVideo grabber is not initialised, close down video transmission thread"); videoIn->EnableAccess(); return FALSE; } #if PTLIB_VER >= 290 PStringArray options; if (flowRequest && lastFrameTimeRTP && videoIn->FlowControl((void *)&options) // test if implemented with empty options && SetFlowControl(codec,context,mediaFormat, flowRequest)) { PTRACE(4, "PLUGIN\tApplying Flow Control " << flowRequest); options = LoadInputDeviceOptions(mediaFormat); if (videoIn->FlowControl((void *)&options)) { frameHeader->width = videoIn->GetGrabWidth(); frameHeader->height = videoIn->GetGrabHeight(); sendIntra = true; // Send a FPU when setting flow control. } } #endif flowRequest = 0; if (!SetFrameSize(frameHeader->width, frameHeader->height)) { PTRACE(1, "PLUGIN\tFailed to resize, close down video transmission thread"); videoIn->EnableAccess(); return FALSE; } unsigned char * data = OPAL_VIDEO_FRAME_DATA_PTR(frameHeader); unsigned byteRead = bytesPerFrame; if (!rawDataChannel->Read(data, byteRead)) { PTRACE(3, "PLUGIN\tFailed to read data from video grabber"); videoIn->EnableAccess(); length=0; dst.SetPayloadSize(0); return TRUE; // and hope the error condition will fix itself } videoIn->EnableAccess(); RenderFrame(data, &rtpInformation); PTimeInterval now = PTimer::Tick(); if (lastFrameTick != 0) lastFrameTimeRTP = (now - lastFrameTick).GetInterval()*90; lastFrameTick = now; } else lastFrameTimeRTP = 0; // get the size of the output buffer int outputDataSize; if (!CallCodecControl(codec, context, GET_OUTPUT_DATA_SIZE_CONTROL, NULL, NULL, outputDataSize)) outputDataSize = 1518-14-4-8-20-16; // Max Ethernet packet (1518 bytes) minus 802.3/CRC, 802.3, IP, UDP headers dst.SetMinSize(outputDataSize); bytesPerFrame = outputDataSize; unsigned int fromLen = bufferRTP.GetHeaderSize() + bufferRTP.GetPayloadSize(); unsigned int toLen = outputDataSize; unsigned int flags = sendIntra ? PluginCodec_CoderForceIFrame : 0; int retval = (codec->codecFunction)(codec, context, bufferRTP.GetPointer(), &fromLen, dst.GetPointer(), &toLen, &flags); if (retval == 0) { PTRACE(3,"PLUGIN\tError encoding frame from plugin " << codec->descr); length = 0; return FALSE; } if ((flags & PluginCodec_ReturnCoderIFrame) != 0) { PTRACE(sendIntra ? 3 : 5,"PLUGIN\tSent I-Frame" << (sendIntra ? ", in response to VideoFastUpdate" : "")); sendIntra = false; } if (toLen > 0) length = toLen - dst.GetHeaderSize(); else length = 0; lastPacketSent = (flags & PluginCodec_ReturnCoderLastFrame); return TRUE; } PBoolean H323PluginVideoCodec::Write(const BYTE * /*buffer*/, unsigned length, const RTP_DataFrame & src, unsigned & written) { PWaitAndSignal mutex(videoHandlerActive); if (direction != Decoder) { PTRACE(1, "PLUGIN\tAttempt to decode from decoder"); return FALSE; } if (rawDataChannel == NULL) { PTRACE(1, "PLUGIN\tNo channel to render to, close down video reception thread"); return FALSE; } // Prepare AVSync Information rtpInformation.m_recvTime = PTime(); rtpInformation.m_sendTime = CalculateRTPSendTime(src.GetTimestamp(),90000/GetFrameRate()); rtpInformation.m_frame = &src; #if PTLIB_VER >= 290 if (((PVideoChannel *)rawDataChannel)->DisableDecode()) { if (RenderFrame(src.GetPayloadPtr(), &rtpInformation)) { written = length; // pretend we wrote the data, to avoid error message return TRUE; } else return FALSE; } #endif // get the size of the output buffer int outputDataSize; if (!CallCodecControl(codec, context, GET_OUTPUT_DATA_SIZE_CONTROL, NULL, NULL, outputDataSize)) return FALSE; bufferRTP.SetMinSize(outputDataSize); bytesPerFrame = outputDataSize; #if 0 PTRACE(6,"RTP\t pt=" << src.GetPayloadType() << " m=" << src.GetMarker() << " sn=" << src.GetSequenceNumber() << " ts=" << src.GetTimestamp() << " sz=" << src.GetPayloadSize()); #endif unsigned int fromLen = src.GetHeaderSize() + src.GetPayloadSize(); unsigned int toLen = bufferRTP.GetSize(); unsigned int flags=0; int retval = (codec->codecFunction)(codec, context, (const BYTE *)src, &fromLen, bufferRTP.GetPointer(toLen), &toLen, &flags); for(;;) { if (retval == 0) { PTRACE(3,"PLUGIN\tError decoding frame from plugin " << codec->descr); return FALSE; } if (flags & PluginCodec_ReturnCoderRequestIFrame) { PTRACE(6,"PLUGIN\tIFrame Request Decoder."); logicalChannel->SendMiscCommand(H245_MiscellaneousCommand_type::e_videoFastUpdatePicture); } if (flags & PluginCodec_ReturnCoderLastFrame) { PluginCodec_Video_FrameHeader * header = (PluginCodec_Video_FrameHeader *)(bufferRTP.GetPayloadPtr()); if (!SetFrameSize(header->width,header->height)) return false; if (!RenderFrame(OPAL_VIDEO_FRAME_DATA_PTR(header), &rtpInformation)) return false; if(flags & PluginCodec_ReturnCoderMoreFrame) { PTRACE(6,"PLUGIN\tMore Frames to decode"); flags=0; retval = (codec->codecFunction)(codec, context, (const BYTE *)0, &fromLen, bufferRTP.GetPointer(toLen), &toLen, &flags); } else break; } else if (toLen < (unsigned)bufferRTP.GetHeaderSize()) { PTRACE(6,"PLUGIN\tPartial Frame received " << codec->descr << " Ignoring rendering."); written = length; return TRUE; } else break; } written = length; return TRUE; } PBoolean H323PluginVideoCodec::RenderFrame(const BYTE * buffer, void * mark) { PVideoChannel *videoOut = (PVideoChannel *)rawDataChannel; // guaranteed to be non-NULL when called from Read() or Write() if (!videoOut->IsRenderOpen()) return TRUE; #if PTLIB_VER >= 290 videoOut->SetRenderFrameSize(frameWidth, frameHeight,sarWidth,sarHeight); #else videoOut->SetRenderFrameSize(frameWidth, frameHeight); #endif PTRACE(6, "PLUGIN\tWrite data to video renderer"); #if PTLIB_VER < 290 return videoOut->Write(buffer, 0); #else return videoOut->Write(buffer, 0, mark); #endif } PBoolean H323PluginVideoCodec::SetFrameSize(int _width, int _height) { return SetFrameSize(_width, _height, 1, 1); } PBoolean H323PluginVideoCodec::SetFrameSize(int _width, int _height,int _sar_width, int _sar_height) { if ((frameWidth == _width) && (frameHeight == _height)) return TRUE; if ((_width == 0) || (_height == 0)) return FALSE; // TODO MAN: this might not be codec for non H.264 codec if ((_width*_height > maxWidth * maxHeight)) { PTRACE(3, "PLUGIN\tERROR: Frame Size " << _width << "x" << _height << " exceeds codec limits (" << maxWidth << "x" << maxHeight << ")"); return FALSE; } frameWidth = _width; frameHeight = _height; sarWidth = _sar_width; sarHeight = _sar_height; PTRACE(3,"PLUGIN\tResize to w:" << frameWidth << " h:" << frameHeight); mediaFormat.SetOptionInteger(OpalVideoFormat::FrameWidthOption,frameWidth); mediaFormat.SetOptionInteger(OpalVideoFormat::FrameHeightOption,frameHeight); bytesPerFrame = (frameHeight * frameWidth * 3)/2; if (direction == Encoder) { bufferRTP.SetPayloadSize(sizeof(PluginCodec_Video_FrameHeader) + bytesPerFrame); PluginCodec_Video_FrameHeader * header = (PluginCodec_Video_FrameHeader *)(bufferRTP.GetPayloadPtr()); header->x = header->y = 0; header->width = frameWidth; header->height = frameHeight; } return TRUE; } unsigned H323PluginVideoCodec::GetVideoMode(void) { if (mediaFormat.GetOptionBoolean(OpalVideoFormat::DynamicVideoQualityOption)) return H323VideoCodec::DynamicVideoQuality; else if (mediaFormat.GetOptionBoolean(OpalVideoFormat::AdaptivePacketDelayOption)) return H323VideoCodec::AdaptivePacketDelay; else return H323VideoCodec::None; } void H323PluginVideoCodec::SetVideoMode(int mode) { switch (mode) { case H323VideoCodec::DynamicVideoQuality : SetCodecControl(codec, context, SET_CODEC_OPTIONS_CONTROL, "Dynamic Video Quality", mode); break; case H323VideoCodec::AdaptivePacketDelay : SetCodecControl(codec, context, SET_CODEC_OPTIONS_CONTROL, "Adaptive Packet Delay", mode); break; default: break; } } #endif // H323_VIDEO ////////////////////////////////////////////////////////////////////////////// // // Helper class for handling plugin capabilities // class H323PluginCapabilityInfo { public: H323PluginCapabilityInfo(PluginCodec_Definition * _encoderCodec, PluginCodec_Definition * _decoderCodec); H323PluginCapabilityInfo(const PString & _mediaFormat, const PString & _baseName); const PString & GetFormatName() const { return capabilityFormatName; } H323Codec * CreateCodec(const OpalMediaFormat & mediaFormat, H323Codec::Direction direction, const H323Capability * cap = NULL ) const; protected: PluginCodec_Definition * encoderCodec; PluginCodec_Definition * decoderCodec; PString capabilityFormatName; PString mediaFormatName; }; #ifndef NO_H323_AUDIO ////////////////////////////////////////////////////////////////////////////// // // Class for handling most audio plugin capabilities // class H323AudioPluginCapability : public H323AudioCapability, public H323PluginCapabilityInfo { PCLASSINFO(H323AudioPluginCapability, H323AudioCapability); public: H323AudioPluginCapability(PluginCodec_Definition * _encoderCodec, PluginCodec_Definition * _decoderCodec, unsigned _pluginSubType) : H323AudioCapability(_decoderCodec->parm.audio.maxFramesPerPacket, _encoderCodec->parm.audio.recommendedFramesPerPacket), H323PluginCapabilityInfo(_encoderCodec, _decoderCodec), pluginSubType(_pluginSubType) { rtpPayloadType = (RTP_DataFrame::PayloadTypes)(((_encoderCodec->flags & PluginCodec_RTPTypeMask) == PluginCodec_RTPTypeDynamic) ? RTP_DataFrame::DynamicBase : _encoderCodec->rtpPayload); } // this constructor is only used when creating a capability without a codec H323AudioPluginCapability(const PString & _mediaFormat, const PString & _baseName, unsigned maxFramesPerPacket, unsigned recommendedFramesPerPacket, unsigned _pluginSubType) : H323AudioCapability(maxFramesPerPacket, recommendedFramesPerPacket), H323PluginCapabilityInfo(_mediaFormat, _baseName), pluginSubType(_pluginSubType) { #ifdef H323_AUDIO_CODECS for (PINDEX i = 0; audioMaps[i].pluginCapType >= 0; i++) { if (audioMaps[i].pluginCapType == (int)_pluginSubType) { h323subType = audioMaps[i].h323SubType; break; } } #endif rtpPayloadType = OpalMediaFormat(_mediaFormat).GetPayloadType(); } virtual PObject * Clone() const { return new H323AudioPluginCapability(*this); } virtual PString GetFormatName() const { return H323PluginCapabilityInfo::GetFormatName();} virtual H323Codec * CreateCodec(H323Codec::Direction direction) const { return H323PluginCapabilityInfo::CreateCodec(GetMediaFormat(), direction); } virtual unsigned GetSubType() const { return pluginSubType; } protected: unsigned pluginSubType; unsigned h323subType; // only set if using capability without codec }; #ifdef H323_AUDIO_CODECS ////////////////////////////////////////////////////////////////////////////// // // Class for handling non standard audio capabilities // class H323CodecPluginNonStandardAudioCapability : public H323NonStandardAudioCapability, public H323PluginCapabilityInfo { PCLASSINFO(H323CodecPluginNonStandardAudioCapability, H323NonStandardAudioCapability); public: H323CodecPluginNonStandardAudioCapability( PluginCodec_Definition * _encoderCodec, PluginCodec_Definition * _decoderCodec, H323NonStandardCapabilityInfo::CompareFuncType compareFunc, const unsigned char * data, unsigned dataLen); H323CodecPluginNonStandardAudioCapability( PluginCodec_Definition * _encoderCodec, PluginCodec_Definition * _decoderCodec, const unsigned char * data, unsigned dataLen); virtual PObject * Clone() const { return new H323CodecPluginNonStandardAudioCapability(*this); } virtual PString GetFormatName() const { return H323PluginCapabilityInfo::GetFormatName();} virtual H323Codec * CreateCodec(H323Codec::Direction direction) const { return H323PluginCapabilityInfo::CreateCodec(GetMediaFormat(), direction); } }; ////////////////////////////////////////////////////////////////////////////// // // Class for handling generic audio capabilities // class H323CodecPluginGenericAudioCapability : public H323GenericAudioCapability, public H323PluginCapabilityInfo { PCLASSINFO(H323CodecPluginGenericAudioCapability, H323GenericAudioCapability); public: H323CodecPluginGenericAudioCapability( const PluginCodec_Definition * _encoderCodec, const PluginCodec_Definition * _decoderCodec, const PluginCodec_H323GenericCodecData * data ); virtual PObject * Clone() const { return new H323CodecPluginGenericAudioCapability(*this); } virtual PString GetFormatName() const { return H323PluginCapabilityInfo::GetFormatName();} virtual H323Codec * CreateCodec(H323Codec::Direction direction) const { return H323PluginCapabilityInfo::CreateCodec(GetMediaFormat(), direction); } }; ////////////////////////////////////////////////////////////////////////////// // // Class for handling G.723.1 codecs // class H323PluginG7231Capability : public H323AudioPluginCapability { PCLASSINFO(H323PluginG7231Capability, H323AudioPluginCapability); public: H323PluginG7231Capability(PluginCodec_Definition * _encoderCodec, PluginCodec_Definition * _decoderCodec, PBoolean _annexA = TRUE) : H323AudioPluginCapability(_encoderCodec, _decoderCodec, H245_AudioCapability::e_g7231), annexA(_annexA) { } Comparison Compare(const PObject & obj) const { if (!PIsDescendant(&obj, H323PluginG7231Capability)) return LessThan; Comparison result = H323AudioCapability::Compare(obj); if (result != EqualTo) return result; PBoolean otherAnnexA = ((const H323PluginG7231Capability &)obj).annexA; if (annexA == otherAnnexA) return EqualTo; if (annexA) return GreaterThan; return EqualTo; } virtual PObject * Clone() const { return new H323PluginG7231Capability(*this); } virtual PBoolean OnSendingPDU(H245_AudioCapability & cap, unsigned packetSize) const { cap.SetTag(H245_AudioCapability::e_g7231); H245_AudioCapability_g7231 & g7231 = cap; g7231.m_maxAl_sduAudioFrames = packetSize; g7231.m_silenceSuppression = annexA; return TRUE; } virtual PBoolean OnReceivedPDU(const H245_AudioCapability & cap, unsigned & packetSize) { if (cap.GetTag() != H245_AudioCapability::e_g7231) return FALSE; const H245_AudioCapability_g7231 & g7231 = cap; packetSize = g7231.m_maxAl_sduAudioFrames; annexA = g7231.m_silenceSuppression; return TRUE; } protected: PBoolean annexA; }; ////////////////////////////////////////////////////////////////////////////// // // Class for handling GSM plugin capabilities // class H323GSMPluginCapability : public H323AudioPluginCapability { PCLASSINFO(H323GSMPluginCapability, H323AudioPluginCapability); public: H323GSMPluginCapability(PluginCodec_Definition * _encoderCodec, PluginCodec_Definition * _decoderCodec, int _pluginSubType, int _comfortNoise, int _scrambled) : H323AudioPluginCapability(_encoderCodec, _decoderCodec, _pluginSubType), comfortNoise(_comfortNoise), scrambled(_scrambled) { } Comparison Compare(const PObject & obj) const; virtual PObject * Clone() const { return new H323GSMPluginCapability(*this); } virtual PBoolean OnSendingPDU( H245_AudioCapability & pdu, /// PDU to set information on unsigned packetSize /// Packet size to use in capability ) const; virtual PBoolean OnReceivedPDU( const H245_AudioCapability & pdu, /// PDU to get information from unsigned & packetSize /// Packet size to use in capability ); protected: int comfortNoise; int scrambled; }; #endif // NO_H323_AUDIO_CODECS #endif // NO_H323_AUDIO #ifdef H323_VIDEO ////////////////////////////////////////////////////////////////////////////// // // Class for handling most video plugin capabilities // class H323VideoPluginCapability : public H323VideoCapability, public H323PluginCapabilityInfo { PCLASSINFO(H323VideoPluginCapability, H323VideoCapability); public: H323VideoPluginCapability(PluginCodec_Definition * _encoderCodec, PluginCodec_Definition * _decoderCodec, unsigned _pluginSubType) : H323VideoCapability(), H323PluginCapabilityInfo(_encoderCodec, _decoderCodec), pluginSubType(_pluginSubType) { SetCommonOptions(GetWritableMediaFormat(),encoderCodec->parm.video.maxFrameWidth,encoderCodec->parm.video.maxFrameHeight, encoderCodec->parm.video.recommendedFrameRate); PopulateMediaFormatOptions(encoderCodec,GetWritableMediaFormat()); rtpPayloadType = (RTP_DataFrame::PayloadTypes)(((_encoderCodec->flags & PluginCodec_RTPTypeMask) == PluginCodec_RTPTypeDynamic) ? RTP_DataFrame::DynamicBase : _encoderCodec->rtpPayload); } #if 0 // this constructor is only used when creating a capability without a codec H323VideoPluginCapability(const PString & _mediaFormat, const PString & _baseName, unsigned maxFramesPerPacket, unsigned /*recommendedFramesPerPacket*/, unsigned _pluginSubType) : H323VideoCapability(), H323PluginCapabilityInfo(_mediaFormat, _baseName), pluginSubType(_pluginSubType) { for (PINDEX i = 0; audioMaps[i].pluginCapType >= 0; i++) { if (videoMaps[i].pluginCapType == (int)_pluginSubType) { h323subType = audioMaps[i].h323SubType; break; } } rtpPayloadType = OpalMediaFormat(_mediaFormat).GetPayloadType(); } #endif virtual PString GetFormatName() const { return H323PluginCapabilityInfo::GetFormatName();} virtual unsigned GetSubType() const { return pluginSubType; } static PBoolean SetCommonOptions(OpalMediaFormat & mediaFormat, int frameWidth, int frameHeight, int frameRate) { if (!mediaFormat.SetOptionInteger(OpalVideoFormat::FrameWidthOption, frameWidth)) { // PTRACE(3,"PLUGIN Error setting " << OpalVideoFormat::FrameWidthOption << " to " << frameWidth); BUG in PTLIB v2.11? SH return FALSE; } if (!mediaFormat.SetOptionInteger(OpalVideoFormat::FrameHeightOption, frameHeight)) { // PTRACE(3,"PLUGIN Error setting " << OpalVideoFormat::FrameHeightOption << " to " << frameHeight); BUG in PTLIB v2.11? SH return FALSE; } if (!mediaFormat.SetOptionInteger(OpalVideoFormat::FrameTimeOption, (int)(OpalMediaFormat::VideoTimeUnits * 1000 * 100 * frameRate / 2997))){ // PTRACE(3,"PLUGIN Error setting " << OpalVideoFormat::FrameTimeOption << " to " << (int)(OpalMediaFormat::VideoTimeUnits * 100 * frameRate / 2997)); BUG in PTLIB v2.11? SH return FALSE; } return TRUE; } virtual PBoolean SetMaxFrameSize(CapabilityFrameSize framesize, int frameunits = 1) { const OpalMediaFormat & mediaFormat = GetMediaFormat(); int sqcifMPI = mediaFormat.GetOptionInteger(sqcifMPI_tag); int qcifMPI = mediaFormat.GetOptionInteger(qcifMPI_tag); int cifMPI = mediaFormat.GetOptionInteger(cifMPI_tag); int cif4MPI = mediaFormat.GetOptionInteger(cif4MPI_tag); int cif16MPI = mediaFormat.GetOptionInteger(cif16MPI_tag); PString param; int w=0; int h=0; switch (framesize) { case H323Capability::sqcifMPI : sqcifMPI =frameunits; qcifMPI=0; cifMPI=0; cif4MPI=0; cif16MPI=0; w = SQCIF_WIDTH; h = SQCIF_HEIGHT; break; case H323Capability::qcifMPI : if (qcifMPI==0 || cifMPI==0 || cif4MPI==0 || cif16MPI==0) return true; qcifMPI =frameunits; cifMPI=0; cif4MPI=0; cif16MPI=0; w = QCIF_WIDTH; h = QCIF_HEIGHT; break; case H323Capability::cifMPI : if (cifMPI==0 || cif4MPI==0 || cif16MPI==0) return true; cifMPI =frameunits; cif4MPI=0; cif16MPI=0; w = CIF_WIDTH; h = CIF_HEIGHT; break; case H323Capability::cif4MPI : case H323Capability::i480MPI : if (cif4MPI==0 || cif16MPI==0) return true; cif4MPI =frameunits; cif16MPI=0; w = CIF4_WIDTH; h = CIF4_HEIGHT; break; case H323Capability::cif16MPI : case H323Capability::p720MPI : if (cif16MPI==0) return true; break; w = CIF16_WIDTH; h = CIF16_HEIGHT; default: return false; } OpalMediaFormat & fmt = GetWritableMediaFormat(); fmt.SetOptionInteger(sqcifMPI_tag, sqcifMPI); fmt.SetOptionInteger(qcifMPI_tag, qcifMPI ); fmt.SetOptionInteger(cifMPI_tag, cifMPI ); fmt.SetOptionInteger(cif4MPI_tag, cif4MPI ); fmt.SetOptionInteger(cif16MPI_tag, cif16MPI); fmt.SetOptionInteger(OpalVideoFormat::FrameWidthOption,w); fmt.SetOptionInteger(OpalVideoFormat::FrameHeightOption,h); return true; } virtual H323Codec * CreateCodec(H323Codec::Direction direction) const { return H323PluginCapabilityInfo::CreateCodec(GetMediaFormat(), direction, this); } protected: unsigned pluginSubType; unsigned h323subType; // only set if using capability without codec }; ////////////////////////////////////////////////////////////////////////////// // // Class for handling non standard video capabilities // class H323CodecPluginNonStandardVideoCapability : public H323NonStandardVideoCapability, public H323PluginCapabilityInfo { PCLASSINFO(H323CodecPluginNonStandardVideoCapability, H323NonStandardVideoCapability); public: H323CodecPluginNonStandardVideoCapability( PluginCodec_Definition * _encoderCodec, PluginCodec_Definition * _decoderCodec, H323NonStandardCapabilityInfo::CompareFuncType compareFunc, const unsigned char * data, unsigned dataLen); H323CodecPluginNonStandardVideoCapability( PluginCodec_Definition * _encoderCodec, PluginCodec_Definition * _decoderCodec, const unsigned char * data, unsigned dataLen); virtual PObject * Clone() const { return new H323CodecPluginNonStandardVideoCapability(*this); } virtual PString GetFormatName() const { return H323PluginCapabilityInfo::GetFormatName();} virtual H323Codec * CreateCodec(H323Codec::Direction direction) const { return H323PluginCapabilityInfo::CreateCodec(GetMediaFormat(), direction); } }; ////////////////////////////////////////////////////////////////////////////// // // Class for handling generic video capabilities ie H.264 / MPEG4 part 2 // class H323CodecPluginGenericVideoCapability : public H323GenericVideoCapability, public H323PluginCapabilityInfo { PCLASSINFO(H323CodecPluginGenericVideoCapability, H323GenericVideoCapability); public: H323CodecPluginGenericVideoCapability( const PluginCodec_Definition * _encoderCodec, const PluginCodec_Definition * _decoderCodec, const PluginCodec_H323GenericCodecData * data ); virtual PObject * Clone() const { return new H323CodecPluginGenericVideoCapability(*this); } virtual PString GetFormatName() const { return H323PluginCapabilityInfo::GetFormatName();} virtual H323Codec * CreateCodec(H323Codec::Direction direction) const { return H323PluginCapabilityInfo::CreateCodec(GetMediaFormat(), direction); } virtual void LoadGenericData(const PluginCodec_H323GenericCodecData *ptr); virtual PBoolean SetMaxFrameSize(CapabilityFrameSize framesize, int frameunits = 1); virtual PBoolean SetCustomEncode(unsigned width, unsigned height, unsigned rate); protected: OpalMediaFormat encoderMediaFormat; }; ////////////////////////////////////////////////////////////////////////////// // // Class for handling H.261 plugin capabilities // class H323H261PluginCapability : public H323VideoPluginCapability { PCLASSINFO(H323H261PluginCapability, H323VideoPluginCapability); public: H323H261PluginCapability(PluginCodec_Definition * _encoderCodec, PluginCodec_Definition * _decoderCodec); Comparison Compare(const PObject & obj) const; virtual PObject * Clone() const { return new H323H261PluginCapability(*this); } virtual PBoolean OnSendingPDU( H245_VideoCapability & pdu /// PDU to set information on ) const; virtual PBoolean OnSendingPDU( H245_VideoMode & pdu ) const; virtual PBoolean OnReceivedPDU( const H245_VideoCapability & pdu /// PDU to get information from ); PluginCodec_Definition * enc; }; ////////////////////////////////////////////////////////////////////////////// // // Class for handling H.263 plugin capabilities // class H323H263PluginCapability : public H323VideoPluginCapability { PCLASSINFO(H323H263PluginCapability, H323VideoPluginCapability); public: H323H263PluginCapability(PluginCodec_Definition * _encoderCodec, PluginCodec_Definition * _decoderCodec); Comparison Compare(const PObject & obj) const; virtual PObject * Clone() const { return new H323H263PluginCapability(*this); } virtual PBoolean IsMatch(const PASN_Choice & subTypePDU) const; virtual PBoolean OnSendingPDU( H245_VideoCapability & pdu /// PDU to set information on ) const; virtual PBoolean OnSendingPDU( H245_VideoMode & pdu ) const; virtual PBoolean OnReceivedPDU( const H245_VideoCapability & pdu /// PDU to get information from ); }; #endif // H323_VIDEO ///////////////////////////////////////////////////////////////////////////// class H323StaticPluginCodec { public: virtual ~H323StaticPluginCodec() { } virtual PluginCodec_GetAPIVersionFunction Get_GetAPIFn() = 0; virtual PluginCodec_GetCodecFunction Get_GetCodecFn() = 0; }; PMutex & H323PluginCodecManager::GetMediaFormatMutex() { static PMutex mutex; return mutex; } H323PluginCodecManager::H323PluginCodecManager(PPluginManager * _pluginMgr) : PPluginModuleManager(PLUGIN_CODEC_GET_CODEC_FN_STR, _pluginMgr) { // instantiate all of the media formats { OpalMediaFormatFactory::KeyList_T keyList = OpalMediaFormatFactory::GetKeyList(); OpalMediaFormatFactory::KeyList_T::const_iterator r; for (r = keyList.begin(); r != keyList.end(); ++r) { OpalMediaFormat * instance = OpalMediaFormatFactory::CreateInstance(*r); if (instance == NULL) { PTRACE(4, "H323PLUGIN\tCannot instantiate opal media format " << *r); } else { PTRACE(4, "H323PLUGIN\tCreating media format " << *r); } } } // instantiate all of the static codecs { PFactory::KeyList_T keyList = PFactory::GetKeyList(); PFactory::KeyList_T::const_iterator r; for (r = keyList.begin(); r != keyList.end(); ++r) { H323StaticPluginCodec * instance = PFactory::CreateInstance(*r); if (instance == NULL) { PTRACE(4, "H323PLUGIN\tCannot instantiate static codec plugin " << *r); } else { PTRACE(4, "H323PLUGIN\tLoading static codec plugin " << *r); RegisterStaticCodec(r->c_str(), instance->Get_GetAPIFn(), instance->Get_GetCodecFn()); } } } // cause the plugin manager to load all dynamic plugins pluginMgr->AddNotifier(PCREATE_NOTIFIER(OnLoadModule), TRUE); } H323PluginCodecManager::~H323PluginCodecManager() { } void H323PluginCodecManager::OnShutdown() { // unregister the plugin media formats OpalMediaFormatFactory::UnregisterAll(); // Unregister the codec factory OpalPluginCodecFactory::UnregisterAll(); #ifdef H323_VIDEO #ifdef H323_H239 H323ExtendedVideoFactory::UnregisterAll(); #endif #endif // unregister the plugin capabilities H323CapabilityFactory::UnregisterAll(); } void H323PluginCodecManager::OnLoadPlugin(PDynaLink & dll, INT code) { PluginCodec_GetCodecFunction getCodecs; if (!dll.GetFunction(PString(signatureFunctionName), (PDynaLink::Function &)getCodecs)) { PTRACE(3, "H323PLUGIN\tPlugin Codec DLL " << dll.GetName() << " is not a plugin codec"); return; } unsigned int count; PluginCodec_Definition * codecs = (*getCodecs)(&count, PLUGIN_CODEC_VERSION_OPTIONS); if (codecs == NULL || count == 0) { PTRACE(3, "H323PLUGIN\tPlugin Codec DLL " << dll.GetName() << " contains no codec definitions"); return; } PTRACE(3, "H323PLUGIN\tLoading plugin codec " << dll.GetName()); switch (code) { // plugin loaded case 0: RegisterCodecs(count, codecs); break; // plugin unloaded case 1: UnregisterCodecs(count, codecs); break; default: break; } } void H323PluginCodecManager::RegisterStaticCodec( const char * name, PluginCodec_GetAPIVersionFunction /*getApiVerFn*/, PluginCodec_GetCodecFunction getCodecFn) { unsigned int count; PluginCodec_Definition * codecs = (*getCodecFn)(&count, PLUGIN_CODEC_VERSION); if (codecs == NULL || count == 0) { PTRACE(3, "H323PLUGIN\tStatic codec " << name << " contains no codec definitions"); return; } RegisterCodecs(count, codecs); } void H323PluginCodecManager::RegisterCodecs(unsigned int count, void * _codecList) { // make sure all non-timestamped codecs have the same concept of "now" static time_t codecNow = ::time(NULL); PluginCodec_Definition * codecList = (PluginCodec_Definition *)_codecList; unsigned i, j ; for (i = 0; i < count; i++) { PluginCodec_Definition & encoder = codecList[i]; PBoolean videoSupported = encoder.version >= PLUGIN_CODEC_VERSION_VIDEO; // for every encoder, we need a decoder PBoolean found = FALSE; PBoolean isEncoder = FALSE; if ((encoder.h323CapabilityType != PluginCodec_H323Codec_undefined) && (( ((encoder.flags & PluginCodec_MediaTypeMask) == PluginCodec_MediaTypeAudio) && (strcmp(encoder.sourceFormat, "L16") == 0) ) || ( ((encoder.flags & PluginCodec_MediaTypeMask) == PluginCodec_MediaTypeAudioStreamed) && (strcmp(encoder.sourceFormat, "L16") == 0) ) || ( videoSupported && (((encoder.flags & PluginCodec_MediaTypeMask) == PluginCodec_MediaTypeVideo) || ((encoder.flags & PluginCodec_MediaTypeMask) == PluginCodec_MediaTypeExtended)) && (strcmp(encoder.sourceFormat, "YUV420P") == 0) ) ) ) { isEncoder = TRUE; for (j = 0; j < count; j++) { PluginCodec_Definition & decoder = codecList[j]; if ( (decoder.h323CapabilityType == encoder.h323CapabilityType) && ((decoder.flags & PluginCodec_MediaTypeMask) == (encoder.flags & PluginCodec_MediaTypeMask)) && (strcmp(decoder.sourceFormat, encoder.destFormat) == 0) && (strcmp(decoder.destFormat, encoder.sourceFormat) == 0) ) { // deal with codec having no info, or timestamp in future time_t timeStamp = codecList[i].info == NULL ? codecNow : codecList[i].info->timestamp; if (timeStamp > codecNow) timeStamp = codecNow; // create the capability and media format associated with this plugin CreateCapabilityAndMediaFormat(&encoder, &decoder); found = TRUE; PTRACE(5, "H323PLUGIN\tPlugin codec " << encoder.descr << " defined"); break; } } } if (!found && isEncoder) { PTRACE(2, "H323PLUGIN\tCannot find decoder for plugin encoder " << encoder.descr); } } } void H323PluginCodecManager::UnregisterCodecs(unsigned int /*count*/, void * /*codec*/) { } void H323PluginCodecManager::AddFormat(OpalMediaFormat * fmt) { PWaitAndSignal m(H323PluginCodecManager::GetMediaFormatMutex()); H323PluginCodecManager::GetMediaFormatList().Append(fmt); } void H323PluginCodecManager::AddFormat(const OpalMediaFormat & fmt) { PWaitAndSignal m(H323PluginCodecManager::GetMediaFormatMutex()); H323PluginCodecManager::GetMediaFormatList().Append(new OpalMediaFormat(fmt)); } OpalMediaFormat::List H323PluginCodecManager::GetMediaFormats() { PWaitAndSignal m(H323PluginCodecManager::GetMediaFormatMutex()); OpalMediaFormat::List & list = H323PluginCodecManager::GetMediaFormatList(); OpalMediaFormat::List copy; for (PINDEX i = 0; i < list.GetSize(); i++) copy.Append(new OpalMediaFormat(list[i])); return copy; } OpalMediaFormat::List & H323PluginCodecManager::GetMediaFormatList() { static OpalMediaFormat::List mediaFormatList; return mediaFormatList; } void H323PluginCodecManager::CreateCapabilityAndMediaFormat( PluginCodec_Definition * encoderCodec, PluginCodec_Definition * decoderCodec ) { // make sure all non-timestamped codecs have the same concept of "now" static time_t mediaNow = time(NULL); // deal with codec having no info, or timestamp in future time_t timeStamp = encoderCodec->info == NULL ? mediaNow : encoderCodec->info->timestamp; if (timeStamp > mediaNow) timeStamp = mediaNow; unsigned defaultSessionID = 0; PBoolean jitter = FALSE; #ifdef H323_VIDEO PBoolean extended = FALSE; PBoolean extendedOnly = FALSE; #endif unsigned frameTime = 0; unsigned timeUnits = 0; switch (encoderCodec->flags & PluginCodec_MediaTypeMask) { #ifdef H323_VIDEO case PluginCodec_MediaTypeVideo: defaultSessionID = OpalMediaFormat::DefaultVideoSessionID; switch (encoderCodec->flags & PluginCodec_MediaExtensionMask) { case PluginCodec_MediaTypeExtVideo: case PluginCodec_MediaTypeH239: extended = TRUE; break; default: break; } jitter = FALSE; break; case PluginCodec_MediaTypeExtended: extendedOnly = TRUE; defaultSessionID = OpalMediaFormat::DefaultExtVideoSessionID; jitter = FALSE; break; #endif #ifndef NO_H323_AUDIO case PluginCodec_MediaTypeAudio: case PluginCodec_MediaTypeAudioStreamed: defaultSessionID = OpalMediaFormat::DefaultAudioSessionID; jitter = TRUE; frameTime = encoderCodec->usPerFrame / 1000; timeUnits = encoderCodec->sampleRate / 1000; break; #endif default: break; } // add the media format if (defaultSessionID == 0) { PTRACE(3, "H323PLUGIN\tCodec DLL provides unknown media format " << (int)(encoderCodec->flags & PluginCodec_MediaTypeMask)); } else { PString fmtName = CreateCodecName(encoderCodec, FALSE); OpalMediaFormat existingFormat(fmtName, TRUE); if (existingFormat.IsValid()) { PTRACE(5, "H323PLUGIN\tMedia format " << fmtName << " already exists"); H323PluginCodecManager::AddFormat(existingFormat); } else { PTRACE(5, "H323PLUGIN\tCreating new media format " << fmtName); OpalMediaFormat * mediaFormat = NULL; // manually register the new singleton type, as we do not have a concrete type switch (encoderCodec->flags & PluginCodec_MediaTypeMask) { #ifdef H323_VIDEO case PluginCodec_MediaTypeVideo: case PluginCodec_MediaTypeExtended: mediaFormat = new OpalPluginVideoMediaFormat( encoderCodec, encoderCodec->sdpFormat, timeStamp); break; #endif #ifndef NO_H323_AUDIO case PluginCodec_MediaTypeAudio: case PluginCodec_MediaTypeAudioStreamed: mediaFormat = new OpalPluginAudioMediaFormat( encoderCodec, defaultSessionID, jitter, frameTime, timeUnits, timeStamp); break; #endif default: break; } // if the codec has been flagged to use a shared RTP payload type, then find a codec with the same SDP name // and use that RTP code rather than creating a new one. That prevents codecs (like Speex) from consuming // dozens of dynamic RTP types if ((encoderCodec->flags & PluginCodec_RTPTypeShared) != 0) { PWaitAndSignal m(H323PluginCodecManager::GetMediaFormatMutex()); OpalMediaFormat::List & list = H323PluginCodecManager::GetMediaFormatList(); for (PINDEX i = 0; i < list.GetSize(); i++) { OpalMediaFormat * opalFmt = &list[i]; #ifndef NO_H323_AUDIO { OpalPluginAudioMediaFormat * fmt = dynamic_cast(opalFmt); if ( (encoderCodec->sdpFormat != NULL) && (fmt != NULL) && (fmt->encoderCodec->sdpFormat != NULL) && (strcasecmp(encoderCodec->sdpFormat, fmt->encoderCodec->sdpFormat) == 0) ) { mediaFormat->SetPayloadType(fmt->GetPayloadType()); break; } } #endif #ifdef H323_VIDEO { OpalPluginVideoMediaFormat * fmt = dynamic_cast(opalFmt); if ( (fmt != NULL) && (encoderCodec->sampleRate == fmt->encoderCodec->sampleRate) && (fmt->encoderCodec->sdpFormat != NULL) && (strcasecmp(encoderCodec->sdpFormat, fmt->encoderCodec->sdpFormat) == 0) ) { mediaFormat->SetPayloadType(fmt->GetPayloadType()); break; } } #endif } } // save the format H323PluginCodecManager::AddFormat(mediaFormat); } } // add the capability H323CodecPluginCapabilityMapEntry * map = NULL; switch (encoderCodec->flags & PluginCodec_MediaTypeMask) { #ifdef H323_AUDIO_CODECS case PluginCodec_MediaTypeAudio: case PluginCodec_MediaTypeAudioStreamed: map = audioMaps; break; #endif #ifdef H323_VIDEO case PluginCodec_MediaTypeVideo: case PluginCodec_MediaTypeExtended: map = videoMaps; break; #endif default: break; } if (map == NULL) { PTRACE(3, "H323PLUGIN\tCannot create capability for unknown plugin codec media format " << (int)(encoderCodec->flags & PluginCodec_MediaTypeMask)); } else { for (PINDEX i = 0; map[i].pluginCapType >= 0; i++) { if (map[i].pluginCapType == encoderCodec->h323CapabilityType) { H323Capability * cap = NULL; if (map[i].createFunc != NULL) cap = (*map[i].createFunc)(encoderCodec, decoderCodec, map[i].h323SubType); else { switch (encoderCodec->flags & PluginCodec_MediaTypeMask) { #ifndef NO_H323_AUDIO case PluginCodec_MediaTypeAudio: case PluginCodec_MediaTypeAudioStreamed: cap = new H323AudioPluginCapability(encoderCodec, decoderCodec, map[i].h323SubType); break; #endif // NO_H323_AUDIO #ifdef H323_VIDEO case PluginCodec_MediaTypeVideo: case PluginCodec_MediaTypeExtended: // all video caps are created using the create functions break; #endif // H323_VIDEO default: break; } } // manually register the new singleton type, as we do not have a concrete type if (cap != NULL){ #ifdef H323_VIDEO if (!extendedOnly) #endif H323CapabilityFactory::Register(CreateCodecName(encoderCodec, TRUE), cap); #ifdef H323_H239 if (extendedOnly || extended) H323ExtendedVideoFactory::Register(CreateCodecName(encoderCodec, FALSE), (H323VideoCapability *)cap); #endif } break; } } } // create the factories for the codecs OpalPluginCodecFactory::Register(PString(encoderCodec->sourceFormat) + "|" + encoderCodec->destFormat, new OpalPluginCodec(encoderCodec)); OpalPluginCodecFactory::Register(PString(decoderCodec->sourceFormat) + "|" + decoderCodec->destFormat, new OpalPluginCodec(decoderCodec)); } ///////////////////////////////////////////////////////////////////////////// #ifdef H323_AUDIO_CODECS H323Capability * CreateNonStandardAudioCap( PluginCodec_Definition * encoderCodec, PluginCodec_Definition * decoderCodec, int /*subType*/) { PluginCodec_H323NonStandardCodecData * pluginData = (PluginCodec_H323NonStandardCodecData *)encoderCodec->h323CapabilityData; if (pluginData == NULL) { return new H323CodecPluginNonStandardAudioCapability( encoderCodec, decoderCodec, (const unsigned char *)encoderCodec->descr, strlen(encoderCodec->descr)); } else if (pluginData->capabilityMatchFunction != NULL) return new H323CodecPluginNonStandardAudioCapability(encoderCodec, decoderCodec, (H323NonStandardCapabilityInfo::CompareFuncType)pluginData->capabilityMatchFunction, pluginData->data, pluginData->dataLength); else return new H323CodecPluginNonStandardAudioCapability( encoderCodec, decoderCodec, pluginData->data, pluginData->dataLength); } H323Capability *CreateGenericAudioCap( PluginCodec_Definition * encoderCodec, PluginCodec_Definition * decoderCodec, int /*subType*/) { PluginCodec_H323GenericCodecData * pluginData = (PluginCodec_H323GenericCodecData *)encoderCodec->h323CapabilityData; if(pluginData == NULL ) { PTRACE(1, "Generic codec information for codec '"<descr<<"' has NULL data field"); return NULL; } return new H323CodecPluginGenericAudioCapability(encoderCodec, decoderCodec, pluginData); } H323Capability * CreateG7231Cap( PluginCodec_Definition * encoderCodec, PluginCodec_Definition * decoderCodec, int /*subType*/) { return new H323PluginG7231Capability(encoderCodec, decoderCodec, decoderCodec->h323CapabilityData != 0); } H323Capability * CreateGSMCap( PluginCodec_Definition * encoderCodec, PluginCodec_Definition * decoderCodec, int subType) { PluginCodec_H323AudioGSMData * pluginData = (PluginCodec_H323AudioGSMData *)encoderCodec->h323CapabilityData; return new H323GSMPluginCapability(encoderCodec, decoderCodec, subType, pluginData->comfortNoise, pluginData->scrambled); } #endif #ifdef H323_VIDEO H323Capability * CreateNonStandardVideoCap( PluginCodec_Definition * encoderCodec, PluginCodec_Definition * decoderCodec, int /*subType*/) { PluginCodec_H323NonStandardCodecData * pluginData = (PluginCodec_H323NonStandardCodecData *)encoderCodec->h323CapabilityData; if (pluginData == NULL) { return new H323CodecPluginNonStandardVideoCapability( encoderCodec, decoderCodec, (const unsigned char *)encoderCodec->descr, strlen(encoderCodec->descr)); } else if (pluginData->capabilityMatchFunction != NULL) return new H323CodecPluginNonStandardVideoCapability(encoderCodec, decoderCodec, (H323NonStandardCapabilityInfo::CompareFuncType)pluginData->capabilityMatchFunction, pluginData->data, pluginData->dataLength); else return new H323CodecPluginNonStandardVideoCapability( encoderCodec, decoderCodec, pluginData->data, pluginData->dataLength); } H323Capability *CreateGenericVideoCap( PluginCodec_Definition * encoderCodec, PluginCodec_Definition * decoderCodec, int /*subType*/) { PluginCodec_H323GenericCodecData * pluginData = (PluginCodec_H323GenericCodecData *)encoderCodec->h323CapabilityData; if (pluginData == NULL ) { PTRACE(1, "Generic codec information for codec '"<descr<<"' has NULL data field"); return NULL; } return new H323CodecPluginGenericVideoCapability(encoderCodec, decoderCodec, pluginData); } H323Capability * CreateH261Cap( PluginCodec_Definition * encoderCodec, PluginCodec_Definition * decoderCodec, int /*subType*/) { return new H323H261PluginCapability(encoderCodec, decoderCodec); } H323Capability * CreateH263Cap( PluginCodec_Definition * encoderCodec, PluginCodec_Definition * decoderCodec, int /*subType*/) { return new H323H263PluginCapability(encoderCodec, decoderCodec); } #endif // H323_VIDEO ///////////////////////////////////////////////////////////////////////////// H323Codec * H323PluginCapabilityInfo::CreateCodec(const OpalMediaFormat & mediaFormat, H323Codec::Direction direction, const H323Capability * cap) const { // allow use of this class for external codec capabilities if (encoderCodec == NULL || decoderCodec == NULL) return NULL; PluginCodec_Definition * codec = (direction == H323Codec::Encoder) ? encoderCodec : decoderCodec; switch (codec->flags & PluginCodec_MediaTypeMask) { case PluginCodec_MediaTypeAudio: #ifdef H323_AUDIO_CODECS PTRACE(3, "H323PLUGIN\tCreating framed audio codec " << mediaFormatName << " from plugin"); return new H323PluginFramedAudioCodec(mediaFormat, direction, codec); #endif // NO_H323_AUDIO_CODECS case PluginCodec_MediaTypeAudioStreamed: #ifdef NO_H323_AUDIO_CODECS PTRACE(3, "H323PLUGIN\tAudio plugins disabled"); return NULL; #else { PTRACE(3, "H323PLUGIN\tCreating audio codec " << mediaFormatName << " from plugin"); int bitsPerSample = (codec->flags & PluginCodec_BitsPerSampleMask) >> PluginCodec_BitsPerSamplePos; if (bitsPerSample == 0) bitsPerSample = 16; return new H323StreamedPluginAudioCodec( mediaFormat, direction, codec->parm.audio.samplesPerFrame, bitsPerSample, codec); } #endif // NO_H323_AUDIO_CODECS case PluginCodec_MediaTypeVideo: case PluginCodec_MediaTypeExtended: #ifndef H323_VIDEO PTRACE(3, "H323PLUGIN\tVideo plugins disabled"); return NULL; #else if ((((codec->flags & PluginCodec_MediaTypeMask) != PluginCodec_MediaTypeVideo) && ((codec->flags & PluginCodec_MediaTypeMask) != PluginCodec_MediaTypeExtended)) || (((codec->flags & PluginCodec_RTPTypeMask) != PluginCodec_RTPTypeExplicit) && (codec->flags & PluginCodec_RTPTypeMask) != PluginCodec_RTPTypeDynamic)) { PTRACE(3, "H323PLUGIN\tVideo codec " << mediaFormatName << " has incorrect format types"); return NULL; } PTRACE(3, "H323PLUGIN\tCreating video codec " << mediaFormatName << " from plugin"); return new H323PluginVideoCodec(mediaFormat, direction, codec, cap); #endif // H323_VIDEO default: break; } PTRACE(3, "H323PLUGIN\tCannot create codec for unknown plugin codec media format " << (int)(codec->flags & PluginCodec_MediaTypeMask)); return NULL; } ///////////////////////////////////////////////////////////////////////////// H323PluginCapabilityInfo::H323PluginCapabilityInfo(PluginCodec_Definition * _encoderCodec, PluginCodec_Definition * _decoderCodec) : encoderCodec(_encoderCodec), decoderCodec(_decoderCodec), capabilityFormatName(CreateCodecName(_encoderCodec, TRUE)), mediaFormatName(CreateCodecName(_encoderCodec, FALSE)) { } H323PluginCapabilityInfo::H323PluginCapabilityInfo(const PString & _mediaFormat, const PString & _baseName) : encoderCodec(NULL), decoderCodec(NULL), capabilityFormatName(CreateCodecName(_baseName, TRUE)), mediaFormatName(_mediaFormat) { } #ifdef H323_AUDIO_CODECS ///////////////////////////////////////////////////////////////////////////// H323CodecPluginNonStandardAudioCapability::H323CodecPluginNonStandardAudioCapability( PluginCodec_Definition * _encoderCodec, PluginCodec_Definition * _decoderCodec, H323NonStandardCapabilityInfo::CompareFuncType compareFunc, const unsigned char * data, unsigned dataLen) : H323NonStandardAudioCapability(_decoderCodec->parm.audio.maxFramesPerPacket, _encoderCodec->parm.audio.maxFramesPerPacket, compareFunc, data, dataLen), H323PluginCapabilityInfo(_encoderCodec, _decoderCodec) { PluginCodec_H323NonStandardCodecData * nonStdData = (PluginCodec_H323NonStandardCodecData *)_encoderCodec->h323CapabilityData; if (nonStdData->objectId != NULL) { oid = PString(nonStdData->objectId); } else { t35CountryCode = nonStdData->t35CountryCode; t35Extension = nonStdData->t35Extension; manufacturerCode = nonStdData->manufacturerCode; } } H323CodecPluginNonStandardAudioCapability::H323CodecPluginNonStandardAudioCapability( PluginCodec_Definition * _encoderCodec, PluginCodec_Definition * _decoderCodec, const unsigned char * data, unsigned dataLen) : H323NonStandardAudioCapability(_decoderCodec->parm.audio.maxFramesPerPacket, _encoderCodec->parm.audio.maxFramesPerPacket, data, dataLen), H323PluginCapabilityInfo(_encoderCodec, _decoderCodec) { PluginCodec_H323NonStandardCodecData * nonStdData = (PluginCodec_H323NonStandardCodecData *)_encoderCodec->h323CapabilityData; if (nonStdData->objectId != NULL) { oid = PString(nonStdData->objectId); } else { t35CountryCode = nonStdData->t35CountryCode; t35Extension = nonStdData->t35Extension; manufacturerCode = nonStdData->manufacturerCode; } rtpPayloadType = (RTP_DataFrame::PayloadTypes)(((_encoderCodec->flags & PluginCodec_RTPTypeMask) == PluginCodec_RTPTypeDynamic) ? RTP_DataFrame::DynamicBase : _encoderCodec->rtpPayload); } ///////////////////////////////////////////////////////////////////////////// H323CodecPluginGenericAudioCapability::H323CodecPluginGenericAudioCapability( const PluginCodec_Definition * _encoderCodec, const PluginCodec_Definition * _decoderCodec, const PluginCodec_H323GenericCodecData *data ) : H323GenericAudioCapability(_decoderCodec->parm.audio.maxFramesPerPacket, _encoderCodec->parm.audio.maxFramesPerPacket, data -> standardIdentifier, data -> maxBitRate), H323PluginCapabilityInfo((PluginCodec_Definition *)_encoderCodec, (PluginCodec_Definition *) _decoderCodec) { PopulateMediaFormatFromGenericData(GetWritableMediaFormat(), data); rtpPayloadType = (RTP_DataFrame::PayloadTypes)(((_encoderCodec->flags & PluginCodec_RTPTypeMask) == PluginCodec_RTPTypeDynamic) ? RTP_DataFrame::DynamicBase : _encoderCodec->rtpPayload); } ///////////////////////////////////////////////////////////////////////////// PObject::Comparison H323GSMPluginCapability::Compare(const PObject & obj) const { if (!PIsDescendant(&obj, H323GSMPluginCapability)) return LessThan; Comparison result = H323AudioCapability::Compare(obj); if (result != EqualTo) return result; const H323GSMPluginCapability& other = (const H323GSMPluginCapability&)obj; if (scrambled < other.scrambled) return LessThan; if (comfortNoise < other.comfortNoise) return LessThan; return EqualTo; } PBoolean H323GSMPluginCapability::OnSendingPDU(H245_AudioCapability & cap, unsigned packetSize) const { cap.SetTag(pluginSubType); H245_GSMAudioCapability & gsm = cap; gsm.m_audioUnitSize = packetSize * encoderCodec->parm.audio.bytesPerFrame; gsm.m_comfortNoise = comfortNoise; gsm.m_scrambled = scrambled; return TRUE; } PBoolean H323GSMPluginCapability::OnReceivedPDU(const H245_AudioCapability & cap, unsigned & packetSize) { const H245_GSMAudioCapability & gsm = cap; packetSize = gsm.m_audioUnitSize / encoderCodec->parm.audio.bytesPerFrame; if (packetSize == 0) packetSize = 1; scrambled = gsm.m_scrambled; comfortNoise = gsm.m_comfortNoise; return TRUE; } ///////////////////////////////////////////////////////////////////////////// #endif // H323_AUDIO_CODECS #ifdef H323_VIDEO ///////////////////////////////////////////////////////////////////////////// H323H261PluginCapability::H323H261PluginCapability(PluginCodec_Definition * _encoderCodec, PluginCodec_Definition * _decoderCodec) : H323VideoPluginCapability(_encoderCodec, _decoderCodec, H245_VideoCapability::e_h261VideoCapability), enc(_encoderCodec) { } PObject::Comparison H323H261PluginCapability::Compare(const PObject & obj) const { if (!PIsDescendant(&obj, H323H261PluginCapability)) return LessThan; Comparison result = H323Capability::Compare(obj); if (result != EqualTo) return result; const H323H261PluginCapability & other = (const H323H261PluginCapability &)obj; const OpalMediaFormat & myFormat = GetMediaFormat(); int qcifMPI = myFormat.GetOptionInteger(qcifMPI_tag); int cifMPI = myFormat.GetOptionInteger(cifMPI_tag); int cif4MPI = myFormat.GetOptionInteger(cif4MPI_tag); int cif16MPI = myFormat.GetOptionInteger(cif16MPI_tag); const OpalMediaFormat & otherFormat = other.GetMediaFormat(); int other_qcifMPI = otherFormat.GetOptionInteger(qcifMPI_tag); int other_cifMPI = otherFormat.GetOptionInteger(cifMPI_tag); int other_cif4MPI = otherFormat.GetOptionInteger(cif4MPI_tag); int other_cif16MPI = otherFormat.GetOptionInteger(cif16MPI_tag); if ((IsValidMPI(qcifMPI) && IsValidMPI(other_qcifMPI)) || (IsValidMPI(cifMPI) && IsValidMPI(other_cifMPI)) || (IsValidMPI(cif4MPI) && IsValidMPI(other_cif4MPI)) || (IsValidMPI(cif16MPI) && IsValidMPI(other_cif16MPI))) return EqualTo; if ((!IsValidMPI(cif16MPI) && IsValidMPI(other_cif16MPI)) || (!IsValidMPI(cif4MPI) && IsValidMPI(other_cif4MPI)) || (!IsValidMPI(cifMPI) && IsValidMPI(other_cifMPI)) || (!IsValidMPI(qcifMPI) && IsValidMPI(other_qcifMPI))) return LessThan; return GreaterThan; } PBoolean H323H261PluginCapability::OnSendingPDU(H245_VideoCapability & cap) const { cap.SetTag(H245_VideoCapability::e_h261VideoCapability); H245_H261VideoCapability & h261 = cap; const OpalMediaFormat & fmt = GetMediaFormat(); int qcifMPI = fmt.GetOptionInteger(qcifMPI_tag, 0); if (qcifMPI > 0) { h261.IncludeOptionalField(H245_H261VideoCapability::e_qcifMPI); h261.m_qcifMPI = qcifMPI; } int cifMPI = fmt.GetOptionInteger(cifMPI_tag); if (cifMPI > 0 || qcifMPI == 0) { h261.IncludeOptionalField(H245_H261VideoCapability::e_cifMPI); h261.m_cifMPI = cifMPI; } h261.m_temporalSpatialTradeOffCapability = fmt.GetOptionBoolean(h323_temporalSpatialTradeOffCapability_tag, FALSE); h261.m_maxBitRate = (fmt.GetOptionInteger(OpalVideoFormat::MaxBitRateOption, 621700)+50)/100; h261.m_stillImageTransmission = fmt.GetOptionBoolean(h323_stillImageTransmission_tag, FALSE); return TRUE; } PBoolean H323H261PluginCapability::OnSendingPDU(H245_VideoMode & pdu) const { pdu.SetTag(H245_VideoMode::e_h261VideoMode); H245_H261VideoMode & mode = pdu; const OpalMediaFormat & fmt = GetMediaFormat(); int qcifMPI = fmt.GetOptionInteger(qcifMPI_tag); mode.m_resolution.SetTag(qcifMPI > 0 ? H245_H261VideoMode_resolution::e_qcif : H245_H261VideoMode_resolution::e_cif); mode.m_bitRate = (fmt.GetOptionInteger(OpalVideoFormat::MaxBitRateOption, 621700) + 50) / 1000; mode.m_stillImageTransmission = fmt.GetOptionBoolean(h323_stillImageTransmission_tag, FALSE); return TRUE; } PBoolean H323H261PluginCapability::OnReceivedPDU(const H245_VideoCapability & cap) { if (cap.GetTag() != H245_VideoCapability::e_h261VideoCapability) return FALSE; OpalMediaFormat & fmt = GetWritableMediaFormat(); const H245_H261VideoCapability & h261 = cap; if (h261.HasOptionalField(H245_H261VideoCapability::e_qcifMPI)) { if (!fmt.SetOptionInteger(qcifMPI_tag, h261.m_qcifMPI)) return FALSE; if (!H323VideoPluginCapability::SetCommonOptions(fmt, QCIF_WIDTH, QCIF_HEIGHT, h261.m_qcifMPI)) return FALSE; } if (h261.HasOptionalField(H245_H261VideoCapability::e_cifMPI)) { if (!fmt.SetOptionInteger(cifMPI_tag, h261.m_cifMPI)) return FALSE; if (!H323VideoPluginCapability::SetCommonOptions(fmt, CIF_WIDTH, CIF_HEIGHT, h261.m_cifMPI)) return FALSE; } fmt.SetOptionInteger(OpalVideoFormat::MaxBitRateOption, h261.m_maxBitRate*100); fmt.SetOptionBoolean(h323_temporalSpatialTradeOffCapability_tag, h261.m_temporalSpatialTradeOffCapability); fmt.SetOptionBoolean(h323_stillImageTransmission_tag, h261.m_stillImageTransmission); return TRUE; } ///////////////////////////////////////////////////////////////////////////// H323H263PluginCapability::H323H263PluginCapability(PluginCodec_Definition * _encoderCodec, PluginCodec_Definition * _decoderCodec) : H323VideoPluginCapability(_encoderCodec, _decoderCodec, H245_VideoCapability::e_h263VideoCapability) { } PObject::Comparison H323H263PluginCapability::Compare(const PObject & obj) const { if (!PIsDescendant(&obj, H323H263PluginCapability)) return LessThan; Comparison result = H323Capability::Compare(obj); if (result != EqualTo) return result; const H323H263PluginCapability & other = (const H323H263PluginCapability &)obj; const OpalMediaFormat & myFormat = GetMediaFormat(); int sqcifMPI = myFormat.GetOptionInteger(sqcifMPI_tag); int qcifMPI = myFormat.GetOptionInteger(qcifMPI_tag); int cifMPI = myFormat.GetOptionInteger(cifMPI_tag); int cif4MPI = myFormat.GetOptionInteger(cif4MPI_tag); int cif16MPI = myFormat.GetOptionInteger(cif16MPI_tag); const OpalMediaFormat & otherFormat = other.GetMediaFormat(); int other_sqcifMPI = otherFormat.GetOptionInteger(sqcifMPI_tag); int other_qcifMPI = otherFormat.GetOptionInteger(qcifMPI_tag); int other_cifMPI = otherFormat.GetOptionInteger(cifMPI_tag); int other_cif4MPI = otherFormat.GetOptionInteger(cif4MPI_tag); int other_cif16MPI = otherFormat.GetOptionInteger(cif16MPI_tag); if ((IsValidMPI(sqcifMPI) && IsValidMPI(other_sqcifMPI)) || (IsValidMPI(qcifMPI) && IsValidMPI(other_qcifMPI)) || (IsValidMPI(cifMPI) && IsValidMPI(other_cifMPI)) || (IsValidMPI(cif4MPI) && IsValidMPI(other_cif4MPI)) || (IsValidMPI(cif16MPI) && IsValidMPI(other_cif16MPI))) return EqualTo; if ((!IsValidMPI(cif16MPI) && IsValidMPI(other_cif16MPI)) || (!IsValidMPI(cif4MPI) && IsValidMPI(other_cif4MPI)) || (!IsValidMPI(cifMPI) && IsValidMPI(other_cifMPI)) || (!IsValidMPI(qcifMPI) && IsValidMPI(other_qcifMPI)) || (!IsValidMPI(sqcifMPI) && IsValidMPI(other_sqcifMPI))) return LessThan; return GreaterThan; } PBoolean H323H263PluginCapability::IsMatch(const PASN_Choice & subTypePDU) const { if (!H323Capability::IsMatch(subTypePDU)) return false; const H245_H263VideoCapability & cap = (const H245_H263VideoCapability &)subTypePDU.GetObject(); const OpalMediaFormat & format = GetMediaFormat(); PString packetization = format.GetOptionString(PLUGINCODEC_MEDIA_PACKETIZATION); PBoolean explicitMatch = format.GetOptionBoolean(H263_EXPLICIT_MATCH); // By the standard the method to distinguish H.263 and H.263+ is by the packetization element // however some endpoints do not include the packetization element so the common practise indicator // is the inclusion of the the h263Options field. if (packetization == "RFC2429" && cap.HasOptionalField(H245_H263VideoCapability::e_h263Options)) return true; // H.263 Exact Match.. if (packetization == "RFC2190" && !cap.HasOptionalField(H245_H263VideoCapability::e_h263Options)) return true; return !explicitMatch; } static void SetTransmittedCap(const OpalMediaFormat & mediaFormat, H245_H263VideoCapability & h263, const char * mpiTag, int mpiEnum, PASN_Integer & mpi, int slowMpiEnum, PASN_Integer & slowMpi) { int mpiVal = mediaFormat.GetOptionInteger(mpiTag); if (mpiVal > 0) { h263.IncludeOptionalField(mpiEnum); mpi = mpiVal; } else if (mpiVal < 0) { h263.IncludeOptionalField(slowMpiEnum); slowMpi = -mpiVal; } } PBoolean SetH263Options(const OpalMediaFormat & fmt, H245_H263Options & options) { PString mediaPacketization = fmt.GetOptionString(PLUGINCODEC_MEDIA_PACKETIZATION); if (mediaPacketization.IsEmpty() || mediaPacketization != "RFC2429") return false; options.m_advancedIntraCodingMode = fmt.GetOptionBoolean(h323_advancedIntra_tag, FALSE); options.m_deblockingFilterMode = false; options.m_improvedPBFramesMode = false; options.m_unlimitedMotionVectors = false; options.m_fullPictureFreeze = false; options.m_partialPictureFreezeAndRelease = false; options.m_resizingPartPicFreezeAndRelease = false; options.m_fullPictureSnapshot = false; options.m_partialPictureSnapshot = false; options.m_videoSegmentTagging = false; options.m_progressiveRefinement = false; options.m_dynamicPictureResizingByFour = false; options.m_dynamicPictureResizingSixteenthPel = false; options.m_dynamicWarpingHalfPel = false; options.m_dynamicWarpingSixteenthPel = false; options.m_independentSegmentDecoding = false; options.m_slicesInOrder_NonRect = false; options.m_slicesInOrder_Rect = false; options.m_slicesNoOrder_NonRect = false; options.m_slicesNoOrder_Rect = false; options.m_alternateInterVLCMode = false; options.m_modifiedQuantizationMode = fmt.GetOptionBoolean(h323_modifiedQuantization_tag, FALSE);; options.m_reducedResolutionUpdate = false; options.m_separateVideoBackChannel = false; H245_ArrayOf_CustomPictureFormat & customFormats = options.m_customPictureFormat; customFormats.RemoveAll(); for (PINDEX i = 0; i 0) options.IncludeOptionalField(H245_H263Options::e_customPictureFormat); options.IncludeOptionalField(H245_H263Options::e_h263Version3Options); options.m_h263Version3Options.m_dataPartitionedSlices = false; options.m_h263Version3Options.m_fixedPointIDCT0 = false; options.m_h263Version3Options.m_interlacedFields = false; options.m_h263Version3Options.m_currentPictureHeaderRepetition = false; options.m_h263Version3Options.m_previousPictureHeaderRepetition = false; options.m_h263Version3Options.m_nextPictureHeaderRepetition = false; options.m_h263Version3Options.m_pictureNumber = false; options.m_h263Version3Options.m_spareReferencePictures = false; return true; } PBoolean H323H263PluginCapability::OnSendingPDU(H245_VideoCapability & cap) const { cap.SetTag(H245_VideoCapability::e_h263VideoCapability); H245_H263VideoCapability & h263 = cap; const OpalMediaFormat & fmt = GetMediaFormat(); SetTransmittedCap(fmt, cap, sqcifMPI_tag, H245_H263VideoCapability::e_sqcifMPI, h263.m_sqcifMPI, H245_H263VideoCapability::e_slowSqcifMPI, h263.m_slowSqcifMPI); SetTransmittedCap(fmt, cap, qcifMPI_tag, H245_H263VideoCapability::e_qcifMPI, h263.m_qcifMPI, H245_H263VideoCapability::e_slowQcifMPI, h263.m_slowQcifMPI); SetTransmittedCap(fmt, cap, cifMPI_tag, H245_H263VideoCapability::e_cifMPI, h263.m_cifMPI, H245_H263VideoCapability::e_slowCifMPI, h263.m_slowCifMPI); SetTransmittedCap(fmt, cap, cif4MPI_tag, H245_H263VideoCapability::e_cif4MPI, h263.m_cif4MPI, H245_H263VideoCapability::e_slowCif4MPI, h263.m_slowCif4MPI); SetTransmittedCap(fmt, cap, cif16MPI_tag, H245_H263VideoCapability::e_cif16MPI, h263.m_cif16MPI, H245_H263VideoCapability::e_slowCif16MPI, h263.m_slowCif16MPI); h263.m_maxBitRate = (fmt.GetOptionInteger(OpalVideoFormat::MaxBitRateOption, 327600) + 50) / 100; h263.m_temporalSpatialTradeOffCapability = fmt.GetOptionBoolean(h323_temporalSpatialTradeOffCapability_tag, FALSE); h263.m_unrestrictedVector = fmt.GetOptionBoolean(h323_unrestrictedVector_tag, FALSE); h263.m_arithmeticCoding = fmt.GetOptionBoolean(h323_arithmeticCoding_tag, FALSE); h263.m_advancedPrediction = fmt.GetOptionBoolean(h323_advancedPrediction_tag, FALSE); h263.m_pbFrames = fmt.GetOptionBoolean(h323_pbFrames_tag, FALSE); h263.m_errorCompensation = fmt.GetOptionBoolean(h323_errorCompensation_tag, FALSE); H245_H263Options & options = h263.m_h263Options; if(SetH263Options(fmt,options)) h263.IncludeOptionalField(H245_H263VideoCapability::e_h263Options); { int hrdB = fmt.GetOptionInteger(h323_hrdB_tag, -1); if (hrdB >= 0) { h263.IncludeOptionalField(H245_H263VideoCapability::e_hrd_B); h263.m_hrd_B = hrdB; } } { int bppMaxKb = fmt.GetOptionInteger(h323_bppMaxKb_tag, -1); if (bppMaxKb >= 0) { h263.IncludeOptionalField(H245_H263VideoCapability::e_bppMaxKb); h263.m_bppMaxKb = bppMaxKb; } } return TRUE; } PBoolean H323H263PluginCapability::OnSendingPDU(H245_VideoMode & pdu) const { pdu.SetTag(H245_VideoMode::e_h263VideoMode); H245_H263VideoMode & mode = pdu; const OpalMediaFormat & fmt = GetMediaFormat(); int qcifMPI = fmt.GetOptionInteger(qcifMPI_tag); int cifMPI = fmt.GetOptionInteger(cifMPI_tag); int cif4MPI = fmt.GetOptionInteger(cif4MPI_tag); int cif16MPI = fmt.GetOptionInteger(cif16MPI_tag); mode.m_resolution.SetTag(cif16MPI ? H245_H263VideoMode_resolution::e_cif16 :(cif4MPI ? H245_H263VideoMode_resolution::e_cif4 :(cifMPI ? H245_H263VideoMode_resolution::e_cif :(qcifMPI ? H245_H263VideoMode_resolution::e_qcif : H245_H263VideoMode_resolution::e_sqcif)))); mode.m_bitRate = (fmt.GetOptionInteger(OpalVideoFormat::MaxBitRateOption, 327600) + 50) / 100; mode.m_unrestrictedVector = fmt.GetOptionBoolean(h323_unrestrictedVector_tag, FALSE); mode.m_arithmeticCoding = fmt.GetOptionBoolean(h323_arithmeticCoding_tag, FALSE); mode.m_advancedPrediction = fmt.GetOptionBoolean(h323_advancedPrediction_tag, FALSE); mode.m_pbFrames = fmt.GetOptionBoolean(h323_pbFrames_tag, FALSE); mode.m_errorCompensation = fmt.GetOptionBoolean(h323_errorCompensation_tag, FALSE); if (SetH263Options(fmt,mode.m_h263Options)) mode.IncludeOptionalField(H245_H263VideoMode::e_h263Options); return TRUE; } static PBoolean SetReceivedH263Cap(OpalMediaFormat & mediaFormat, const H245_H263VideoCapability & h263, const char * mpiTag, int mpiEnum, const PASN_Integer & mpi, int slowMpiEnum, const PASN_Integer & slowMpi, int frameWidth, int frameHeight, PBoolean & formatDefined) { if (h263.HasOptionalField(mpiEnum)) { if (!mediaFormat.SetOptionInteger(mpiTag, mpi)) return FALSE; if (!H323VideoPluginCapability::SetCommonOptions(mediaFormat, frameWidth, frameHeight, mpi)) return FALSE; formatDefined = TRUE; } else if (h263.HasOptionalField(slowMpiEnum)) { if (!mediaFormat.SetOptionInteger(mpiTag, -(signed)slowMpi)) return FALSE; if (!H323VideoPluginCapability::SetCommonOptions(mediaFormat, frameWidth, frameHeight, -(signed)slowMpi)) return FALSE; formatDefined = TRUE; } return TRUE; } PBoolean GetH263Options(OpalMediaFormat & fmt, const H245_H263Options & options) { fmt.SetOptionBoolean(h323_advancedIntra_tag, options.m_advancedIntraCodingMode); fmt.SetOptionBoolean(h323_modifiedQuantization_tag, options.m_modifiedQuantizationMode); if (options.HasOptionalField(H245_H263Options::e_customPictureFormat)) { int opts[4]; for (PINDEX j = 0; j < options.m_customPictureFormat.GetSize(); ++j) { opts[2] = 1; opts[3] = 0; const H245_CustomPictureFormat & customFormat = options.m_customPictureFormat[j]; opts[0] = customFormat.m_maxCustomPictureHeight; opts[1] = customFormat.m_maxCustomPictureWidth; const H245_CustomPictureFormat_mPI & mpi = customFormat.m_mPI; if (mpi.HasOptionalField(H245_CustomPictureFormat_mPI::e_standardMPI)) opts[2] = mpi.m_standardMPI; if (customFormat.m_pixelAspectInformation.GetTag() == H245_CustomPictureFormat_pixelAspectInformation::e_pixelAspectCode) { const H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode & pixel = customFormat.m_pixelAspectInformation; if (pixel.GetSize() > 0) opts[3] = pixel[0]; } PString val = PString(opts[0]) + ',' + PString(opts[1]) + ',' + PString(opts[2]) + ',' + PString(opts[3]); PString key = "CustomFmt"+ PString((j+1)); if (fmt.HasOption(key)) fmt.SetOptionString(key,val); else fmt.AddOption(new OpalMediaOptionString(key,false,val)); } } /* Not Supported options.m_deblockingFilterMode; options.m_improvedPBFramesMode; options.m_unlimitedMotionVectors; options.m_fullPictureFreeze; options.m_partialPictureFreezeAndRelease; options.m_resizingPartPicFreezeAndRelease; options.m_fullPictureSnapshot; options.m_partialPictureSnapshot; options.m_videoSegmentTagging; options.m_progressiveRefinement; options.m_dynamicPictureResizingByFour; options.m_dynamicPictureResizingSixteenthPel; options.m_dynamicWarpingHalfPel; options.m_dynamicWarpingSixteenthPel; options.m_independentSegmentDecoding; options.m_slicesInOrder_NonRect; options.m_slicesInOrder_Rect; options.m_slicesNoOrder_NonRect; options.m_slicesNoOrder_Rect; options.m_alternateInterVLCMode; options.m_reducedResolutionUpdate; options.m_separateVideoBackChannel; if (options.HasOptionalField(H245_H263Options::e_h263Version3Options)) { options.m_h263Version3Options.m_dataPartitionedSlices; options.m_h263Version3Options.m_fixedPointIDCT0; options.m_h263Version3Options.m_interlacedFields; options.m_h263Version3Options.m_currentPictureHeaderRepetition; options.m_h263Version3Options.m_previousPictureHeaderRepetition; options.m_h263Version3Options.m_nextPictureHeaderRepetition; options.m_h263Version3Options.m_pictureNumber; options.m_h263Version3Options.m_spareReferencePictures; } */ return true; } PBoolean H323H263PluginCapability::OnReceivedPDU(const H245_VideoCapability & cap) { if (cap.GetTag() != H245_VideoCapability::e_h263VideoCapability) return FALSE; OpalMediaFormat & fmt = GetWritableMediaFormat(); PBoolean formatDefined = FALSE; const H245_H263VideoCapability & h263 = cap; if (!SetReceivedH263Cap(fmt, cap, sqcifMPI_tag, H245_H263VideoCapability::e_sqcifMPI, h263.m_sqcifMPI, H245_H263VideoCapability::e_slowSqcifMPI, h263.m_slowSqcifMPI, SQCIF_WIDTH, SQCIF_HEIGHT, formatDefined)) return FALSE; if (!SetReceivedH263Cap(fmt, cap, qcifMPI_tag, H245_H263VideoCapability::e_qcifMPI, h263.m_qcifMPI, H245_H263VideoCapability::e_slowQcifMPI, h263.m_slowQcifMPI, QCIF_WIDTH, QCIF_HEIGHT, formatDefined)) return FALSE; if (!SetReceivedH263Cap(fmt, cap, cifMPI_tag, H245_H263VideoCapability::e_cifMPI, h263.m_cifMPI, H245_H263VideoCapability::e_slowCifMPI, h263.m_slowCifMPI, CIF_WIDTH, CIF_HEIGHT, formatDefined)) return FALSE; if (!SetReceivedH263Cap(fmt, cap, cif4MPI_tag, H245_H263VideoCapability::e_cif4MPI, h263.m_cif4MPI, H245_H263VideoCapability::e_slowCif4MPI, h263.m_slowCif4MPI, CIF4_WIDTH, CIF4_HEIGHT, formatDefined)) return FALSE; if (!SetReceivedH263Cap(fmt, cap, cif16MPI_tag, H245_H263VideoCapability::e_cif16MPI, h263.m_cif16MPI, H245_H263VideoCapability::e_slowCif16MPI, h263.m_slowCif16MPI, CIF16_WIDTH, CIF16_HEIGHT, formatDefined)) return FALSE; if (!fmt.SetOptionInteger(OpalVideoFormat::MaxBitRateOption, h263.m_maxBitRate*100)) return FALSE; fmt.SetOptionBoolean(h323_unrestrictedVector_tag, h263.m_unrestrictedVector); fmt.SetOptionBoolean(h323_arithmeticCoding_tag, h263.m_arithmeticCoding); fmt.SetOptionBoolean(h323_advancedPrediction_tag, h263.m_advancedPrediction); fmt.SetOptionBoolean(h323_pbFrames_tag, h263.m_pbFrames); fmt.SetOptionBoolean(h323_errorCompensation_tag, h263.m_errorCompensation); if (h263.HasOptionalField(H245_H263VideoCapability::e_hrd_B)) fmt.SetOptionInteger(h323_hrdB_tag, h263.m_hrd_B); if (h263.HasOptionalField(H245_H263VideoCapability::e_bppMaxKb)) fmt.SetOptionInteger(h323_bppMaxKb_tag, h263.m_bppMaxKb); // zero out all (if any) custom formats for (PINDEX i = 0; ih323CapabilityData; if (nonStdData->objectId != NULL) { oid = PString(nonStdData->objectId); } else { t35CountryCode = nonStdData->t35CountryCode; t35Extension = nonStdData->t35Extension; manufacturerCode = nonStdData->manufacturerCode; } PopulateMediaFormatOptions(encoderCodec,GetWritableMediaFormat()); rtpPayloadType = (RTP_DataFrame::PayloadTypes)(((_encoderCodec->flags & PluginCodec_RTPTypeMask) == PluginCodec_RTPTypeDynamic) ? RTP_DataFrame::DynamicBase : _encoderCodec->rtpPayload); } H323CodecPluginNonStandardVideoCapability::H323CodecPluginNonStandardVideoCapability( PluginCodec_Definition * _encoderCodec, PluginCodec_Definition * _decoderCodec, const unsigned char * data, unsigned dataLen) : H323NonStandardVideoCapability(data, dataLen), H323PluginCapabilityInfo(_encoderCodec, _decoderCodec) { PluginCodec_H323NonStandardCodecData * nonStdData = (PluginCodec_H323NonStandardCodecData *)_encoderCodec->h323CapabilityData; if (nonStdData->objectId != NULL) { oid = PString(nonStdData->objectId); } else { t35CountryCode = nonStdData->t35CountryCode; t35Extension = nonStdData->t35Extension; manufacturerCode = nonStdData->manufacturerCode; } rtpPayloadType = (RTP_DataFrame::PayloadTypes)(((_encoderCodec->flags & PluginCodec_RTPTypeMask) == PluginCodec_RTPTypeDynamic) ? RTP_DataFrame::DynamicBase : _encoderCodec->rtpPayload); } ///////////////////////////////////////////////////////////////////////////// H323CodecPluginGenericVideoCapability::H323CodecPluginGenericVideoCapability( const PluginCodec_Definition * _encoderCodec, const PluginCodec_Definition * _decoderCodec, const PluginCodec_H323GenericCodecData *data ) : H323GenericVideoCapability(data -> standardIdentifier, data -> maxBitRate), H323PluginCapabilityInfo((PluginCodec_Definition *)_encoderCodec, (PluginCodec_Definition *) _decoderCodec) { H323VideoPluginCapability::SetCommonOptions(GetWritableMediaFormat(),encoderCodec->parm.video.maxFrameWidth, encoderCodec->parm.video.maxFrameHeight, encoderCodec->parm.video.recommendedFrameRate); LoadGenericData(data); rtpPayloadType = (RTP_DataFrame::PayloadTypes)(((_encoderCodec->flags & PluginCodec_RTPTypeMask) == PluginCodec_RTPTypeDynamic) ? RTP_DataFrame::DynamicBase : _encoderCodec->rtpPayload); } void H323CodecPluginGenericVideoCapability::LoadGenericData(const PluginCodec_H323GenericCodecData *data) { PopulateMediaFormatOptions(encoderCodec,GetWritableMediaFormat()); PopulateMediaFormatFromGenericData(GetWritableMediaFormat(), data); } PBoolean H323CodecPluginGenericVideoCapability::SetMaxFrameSize(CapabilityFrameSize framesize, int frameunits) { /* PString param; switch (framesize) { case sqcifMPI : param = sqcifMPI_tag; break; case qcifMPI : param = qcifMPI_tag; break; case cifMPI : param = cifMPI_tag; break; case cif4MPI : param = cif4MPI_tag; break; case cif16MPI: param = cif16MPI_tag; break; default: return FALSE; } SetCodecControl(encoderCodec, NULL, SET_CODEC_OPTIONS_CONTROL, param,frameunits); SetCodecControl(decoderCodec, NULL, SET_CODEC_OPTIONS_CONTROL, param, frameunits); LoadGenericData((PluginCodec_H323GenericCodecData *)encoderCodec->h323CapabilityData); */ return TRUE; } PBoolean H323CodecPluginGenericVideoCapability::SetCustomEncode(unsigned width, unsigned height, unsigned rate) { return SetCustomLevel(encoderCodec, GetWritableMediaFormat(), width, height, rate); } ///////////////////////////////////////////////////////////////////////////// #endif // H323_VIDEO ///////////////////////////////////////////////////////////////////////////// static PAtomicInteger bootStrapCount; void H323PluginCodecManager::Bootstrap() { if (++bootStrapCount != 1) return; #if defined(H323_AUDIO_CODECS) OpalMediaFormat::List & mediaFormatList = H323PluginCodecManager::GetMediaFormatList(); mediaFormatList.Append(new OpalMediaFormat(OpalG711uLaw)); mediaFormatList.Append(new OpalMediaFormat(OpalG711ALaw)); /* OpalPluginCodecFactory::Register("L16|OpalG711ALaw64k", new OpalG711ALaw64k_Encoder()); OpalPluginCodecFactory::Register("OpalG711ALaw64k|L16", new OpalG711ALaw64k_Decoder()); OpalPluginCodecFactory::Register("L16|G.711-uLaw-64k", new OpalG711uLaw64k_Encoder()); OpalPluginCodecFactory::Register("G.711-uLaw-64k|L16", new OpalG711uLaw64k_Decoder()); */ OpalPluginCodecFactory::Register("L16|OpalG711ALaw64k20", new OpalG711ALaw64k20_Encoder()); OpalPluginCodecFactory::Register("OpalG711ALaw64k20|L16", new OpalG711ALaw64k20_Decoder()); OpalPluginCodecFactory::Register("L16|G.711-uLaw-64k-20", new OpalG711uLaw64k20_Encoder()); OpalPluginCodecFactory::Register("G.711-uLaw-64k-20|L16", new OpalG711uLaw64k20_Decoder()); #endif } void H323PluginCodecManager::Reboot() { // unregister the plugin media formats OpalMediaFormatFactory::UnregisterAll(); // Unregister the codec factory OpalPluginCodecFactory::UnregisterAll(); #ifdef H323_VIDEO #ifdef H323_H239 H323ExtendedVideoFactory::UnregisterAll(); #endif #endif // unregister the plugin capabilities H323CapabilityFactory::UnregisterAll(); bootStrapCount--; Bootstrap(); } OpalFactoryCodec * H323PluginCodecManager::CreateCodec(const PString & name) { // OpalPluginCodecFactory is not being loaded from Bootstrap // This needs to be fixed - SH if (name =="L16|OpalG711ALaw64k") return new OpalG711ALaw64k_Encoder(); if (name =="OpalG711ALaw64k|L16") return new OpalG711ALaw64k_Decoder(); if (name =="L16|G.711-uLaw-64k") return new OpalG711uLaw64k_Encoder(); if (name =="G.711-uLaw-64k|L16") return new OpalG711uLaw64k_Decoder(); if (name =="L16|OpalG711ALaw64k20") return new OpalG711ALaw64k20_Encoder(); if (name =="OpalG711ALaw64k20|L16") return new OpalG711ALaw64k20_Decoder(); if (name =="L16|G.711-uLaw-64k-20") return new OpalG711uLaw64k20_Encoder(); if (name =="G.711-uLaw-64k-20|L16") return new OpalG711uLaw64k20_Decoder(); OpalPluginCodecFactory::KeyList_T keyList = OpalPluginCodecFactory::GetKeyList(); OpalPluginCodecFactory::KeyList_T::const_iterator r; for (r = keyList.begin(); r != keyList.end(); ++r) { if (*r == name) return OpalPluginCodecFactory::CreateInstance(*r); } return NULL; } void H323PluginCodecManager::CodecListing(const PString & matchStr, PStringList & listing) { OpalPluginCodecFactory::KeyList_T keyList = OpalPluginCodecFactory::GetKeyList(); OpalPluginCodecFactory::KeyList_T::const_iterator r; for (r = keyList.begin(); r != keyList.end(); ++r) { int i = r->Find(matchStr); if (i != P_MAX_INDEX) { if (i == 0) listing.AppendString((*r).Mid(matchStr.GetLength())); else { listing.AppendString((*r).Left((*r).GetLength() - matchStr.GetLength())); } } } } ///////////////////////////////////////////////////////////////////////////// #define INCLUDE_STATIC_CODEC(name) \ extern "C" { \ extern unsigned int Opal_StaticCodec_##name##_GetAPIVersion(); \ extern struct PluginCodec_Definition * Opal_StaticCodec_##name##_GetCodecs(unsigned *,unsigned); \ }; \ class H323StaticPluginCodec_##name : public H323StaticPluginCodec \ { \ public: \ PluginCodec_GetAPIVersionFunction Get_GetAPIFn() \ { return &Opal_StaticCodec_##name##_GetAPIVersion; } \ PluginCodec_GetCodecFunction Get_GetCodecFn() \ { return &Opal_StaticCodec_##name##_GetCodecs; } \ }; \ static PFactory::Worker static##name##CodecFactory( #name ); \ #ifdef H323_EMBEDDED_GSM INCLUDE_STATIC_CODEC(GSM_0610) #endif h323plus/src/precompile.cxx0000644000175000017500000000216611245765526014603 0ustar markmark/* * precompile.cxx * * Precompiled header generation file. * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. */ #define P_DISABLE_FACTORY_INSTANCES #include #ifndef PTLIB_VERSION_CHECK #define PTLIB_VERSION_CHECK 1 #if PTLIB_MAJOR <= 2 && PTLIB_MINOR < 6 #error "You require PTLib v2.6.x or above to compile this version of H323plus") #endif #endif // End of File /////////////////////////////////////////////////////////////// h323plus/src/h235auth1.cxx0000644000175000017500000003611311641502613014051 0ustar markmark/* * h235auth1.cxx * * H.235 security PDU's * * H323Plus Library * * Copyright (c) 1998-2001 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): Fќrbass Franz * * $Id: h235auth1.cxx,v 1.10 2011/10/01 03:14:19 shorne Exp $ * */ #include #if P_SSL #include #include "h235auth.h" #include "h323pdu.h" #ifdef _MSC_VER #pragma comment(lib, P_SSL_LIB1) #pragma comment(lib, P_SSL_LIB2) #endif #define REPLY_BUFFER_SIZE 1024 static const char OID_A[] = "0.0.8.235.0.2.1"; static const char OID_T[] = "0.0.8.235.0.2.5"; static const char OID_U[] = "0.0.8.235.0.2.6"; #define OID_VERSION_OFFSET 5 #define HASH_SIZE 12 static const BYTE SearchPattern[HASH_SIZE] = { // Must be 12 bytes 't', 'W', 'e', 'l', 'V', 'e', '~', 'b', 'y', 't', 'e', 'S' }; #ifndef SHA_DIGESTSIZE #define SHA_DIGESTSIZE 20 #endif #ifndef SHA_BLOCKSIZE #define SHA_BLOCKSIZE 64 #endif #define new PNEW ///////////////////////////////////////////////////////////////////////////// /* Function to print the digest */ #if 0 static void pr_sha(FILE* fp, char* s, int t) { int i ; fprintf(fp, "0x") ; for (i = 0 ; i < t ; i++) fprintf(fp, "%02x", s[i]) ; fprintf(fp, "0x") ; } #endif static void truncate(unsigned char* d1, /* data to be truncated */ char* d2, /* truncated data */ int len) /* length in bytes to keep */ { int i ; for (i = 0 ; i < len ; i++) d2[i] = d1[i]; } /* Function to compute the digest */ static void hmac_sha (const unsigned char* k, /* secret key */ int lk, /* length of the key in bytes */ const unsigned char* d, /* data */ int ld, /* length of data in bytes */ char* out, /* output buffer, at least "t" bytes */ int t) { SHA_CTX ictx, octx ; unsigned char isha[SHA_DIGESTSIZE], osha[SHA_DIGESTSIZE] ; unsigned char key[SHA_DIGESTSIZE] ; char buf[SHA_BLOCKSIZE] ; int i ; if (lk > SHA_BLOCKSIZE) { SHA_CTX tctx ; SHA1_Init(&tctx) ; SHA1_Update(&tctx, k, lk) ; SHA1_Final(key, &tctx) ; k = key ; lk = SHA_DIGESTSIZE ; } /**** Inner Digest ****/ SHA1_Init(&ictx) ; /* Pad the key for inner digest */ for (i = 0 ; i < lk ; ++i) buf[i] = (char)(k[i] ^ 0x36); for (i = lk ; i < SHA_BLOCKSIZE ; ++i) buf[i] = 0x36; SHA1_Update(&ictx, buf, SHA_BLOCKSIZE) ; SHA1_Update(&ictx, d, ld) ; SHA1_Final(isha, &ictx) ; /**** Outter Digest ****/ SHA1_Init(&octx) ; /* Pad the key for outter digest */ for (i = 0 ; i < lk ; ++i) buf[i] = (char)(k[i] ^ 0x5C); for (i = lk ; i < SHA_BLOCKSIZE ; ++i) buf[i] = 0x5C; SHA1_Update(&octx, buf, SHA_BLOCKSIZE) ; SHA1_Update(&octx, isha, SHA_DIGESTSIZE) ; SHA1_Final(osha, &octx) ; /* truncate and print the results */ t = t > SHA_DIGESTSIZE ? SHA_DIGESTSIZE : t ; truncate(osha, out, t) ; } ///////////////////////////////////////////////////////////////////////////// #ifdef H323_H235 H235SECURITY(Std1); #endif H2351_Authenticator::H2351_Authenticator() { usage = GKAdmission; // Can be used either for GKAdmission (not EPAuthentication) } PObject * H2351_Authenticator::Clone() const { H2351_Authenticator * auth = new H2351_Authenticator(*this); // We do NOT copy these fields in Clone() auth->lastRandomSequenceNumber = 0; auth->lastTimestamp = 0; return auth; } const char * H2351_Authenticator::GetName() const { return "H.235.1"; } PStringArray H2351_Authenticator::GetAuthenticatorNames() { return PStringArray("Std1"); } #ifdef H323_H235 PBoolean H2351_Authenticator::GetAuthenticationCapabilities(H235Authenticator::Capabilities * ids) { H235Authenticator::Capability cap; cap.m_identifier = OID_A; cap.m_cipher = "H2351"; cap.m_description= "h2351"; ids->capabilityList.push_back(cap); return true; } #endif PBoolean H2351_Authenticator::IsMatch(const PString & identifier) const { return (identifier == PString(OID_A)); } H225_CryptoH323Token * H2351_Authenticator::CreateCryptoToken() { if (!IsActive()) return NULL; H225_CryptoH323Token * cryptoToken = new H225_CryptoH323Token; // Create the H.225 crypto token in the H323 crypto token cryptoToken->SetTag(H225_CryptoH323Token::e_nestedcryptoToken); H235_CryptoToken & nestedCryptoToken = *cryptoToken; // We are doing hashed password nestedCryptoToken.SetTag(H235_CryptoToken::e_cryptoHashedToken); H235_CryptoToken_cryptoHashedToken & cryptoHashedToken = nestedCryptoToken; // tokenOID = "A" cryptoHashedToken.m_tokenOID = OID_A; //ClearToken H235_ClearToken & clearToken = cryptoHashedToken.m_hashedVals; // tokenOID = "T" clearToken.m_tokenOID = OID_T; if (!remoteId) { clearToken.IncludeOptionalField(H235_ClearToken::e_generalID); clearToken.m_generalID = remoteId; } if (!localId) { clearToken.IncludeOptionalField(H235_ClearToken::e_sendersID); clearToken.m_sendersID = localId; } clearToken.IncludeOptionalField(H235_ClearToken::e_timeStamp); clearToken.m_timeStamp = (int)PTime().GetTimeInSeconds(); clearToken.IncludeOptionalField(H235_ClearToken::e_random); clearToken.m_random = ++sentRandomSequenceNumber; //H235_HASHED H235_HASHED & encodedToken = cryptoHashedToken.m_token; // algorithmOID = "U" encodedToken.m_algorithmOID = OID_U; /******* * step 1 * * set a pattern for the hash value * */ encodedToken.m_hash.SetData(HASH_SIZE*8, SearchPattern); return cryptoToken; } PBoolean H2351_Authenticator::Finalise(PBYTEArray & rawPDU) { if (!IsActive()) return FALSE; // Find the pattern int foundat = -1; for (PINDEX i = 0; i <= rawPDU.GetSize() - HASH_SIZE; i++) { if (memcmp(&rawPDU[i], SearchPattern, HASH_SIZE) == 0) { // i'v found it ! foundat = i; break; } } if (foundat == -1) { //Can't find the search pattern in the ASN1 packet. PTRACE(2, "H235RAS\tPDU not prepared for H2351_Authenticator"); return FALSE; } // Zero out the search pattern memset(&rawPDU[foundat], 0, HASH_SIZE); /******* * * generate a HMAC-SHA1 key over the hole message * and save it in at (step 3) located position. * in the asn1 packet. */ char key[HASH_SIZE]; /** make a SHA1 hash before send to the hmac_sha1 */ unsigned char secretkey[20]; SHA1(password, password.GetLength(), secretkey); hmac_sha(secretkey, 20, rawPDU.GetPointer(), rawPDU.GetSize(), key, HASH_SIZE); memcpy(&rawPDU[foundat], key, HASH_SIZE); PTRACE(4, "H235RAS\tH2351_Authenticator hashing completed: \"" << password << '"'); return TRUE; } static PBoolean CheckOID(const PASN_ObjectId & oid1, const PASN_ObjectId & oid2) { if (oid1.GetSize() != oid2.GetSize()) return FALSE; PINDEX i; for (i = 0; i < OID_VERSION_OFFSET; i++) { if (oid1[i] != oid2[i]) return FALSE; } for (i++; i < oid1.GetSize(); i++) { if (oid1[i] != oid2[i]) return FALSE; } return TRUE; } H235Authenticator::ValidationResult H2351_Authenticator::ValidateCryptoToken( const H225_CryptoH323Token & cryptoToken, const PBYTEArray & rawPDU) { //verify the token is of correct type if (cryptoToken.GetTag() != H225_CryptoH323Token::e_nestedcryptoToken) { PTRACE(4, "H235\tNo nested crypto token!"); return e_Absent; } const H235_CryptoToken & crNested = cryptoToken; if (crNested.GetTag() != H235_CryptoToken::e_cryptoHashedToken) { PTRACE(4, "H235\tNo crypto hash token!"); return e_Absent; } const H235_CryptoToken_cryptoHashedToken & crHashed = crNested; //verify the crypto OIDs // "A" indicates that the whole messages is used for authentication. if (!CheckOID(crHashed.m_tokenOID, OID_A)) { PTRACE(2, "H235RAS\tH2351_Authenticator requires all fields are hashed, got OID " << crHashed.m_tokenOID); return e_Absent; } // "T" indicates that the hashed token of the CryptoToken is used for authentication. if (!CheckOID(crHashed.m_hashedVals.m_tokenOID, OID_T)) { PTRACE(2, "H235RAS\tH2351_Authenticator requires ClearToken, got OID " << crHashed.m_hashedVals.m_tokenOID); return e_Absent; } // "U" indicates that the HMAC-SHA1-96 alorigthm is used. if (!CheckOID(crHashed.m_token.m_algorithmOID, OID_U)) { PTRACE(2, "H235RAS\tH2351_Authenticator requires HMAC-SHA1-96, got OID " << crHashed.m_token.m_algorithmOID); return e_Absent; } //first verify the timestamp PTime now; int deltaTime = (int)now.GetTimeInSeconds() - crHashed.m_hashedVals.m_timeStamp; if (PABS(deltaTime) > timestampGracePeriod) { PTRACE(1, "H235RAS\tInvalid timestamp ABS(" << now.GetTimeInSeconds() << '-' << (int)crHashed.m_hashedVals.m_timeStamp << ") > " << timestampGracePeriod); //the time has elapsed return e_InvalidTime; } //verify the randomnumber if (lastTimestamp == crHashed.m_hashedVals.m_timeStamp && lastRandomSequenceNumber == crHashed.m_hashedVals.m_random) { //a message with this timespamp and the same random number was already verified PTRACE(1, "H235RAS\tConsecutive messages with the same random and timestamp"); return e_ReplyAttack; } #ifndef DISABLE_CALLAUTH // If has connection then EP Authenticator so CallBack to Check SenderID and Set Password if (connection != NULL) { // Senders ID is required for signal authentication if (!crHashed.m_hashedVals.HasOptionalField(H235_ClearToken::e_sendersID)) { PTRACE(1, "H235RAS\tH2351_Authenticator requires senders ID."); return e_Error; } localId = crHashed.m_hashedVals.m_sendersID.GetValue(); remoteId = PString::Empty(); if (!connection->OnCallAuthentication(localId,password)) { PTRACE(1, "H235EP\tH2351_Authenticator Authentication Fail UserName \"" << localId << "\", not Authorised. \""); return e_BadPassword; } } else { #endif //verify the username if (!localId && crHashed.m_tokenOID[OID_VERSION_OFFSET] > 1) { if (!crHashed.m_hashedVals.HasOptionalField(H235_ClearToken::e_generalID)) { PTRACE(1, "H235RAS\tH2351_Authenticator requires general ID."); return e_Error; } if (crHashed.m_hashedVals.m_generalID.GetValue() != localId) { PTRACE(1, "H235RAS\tGeneral ID is \"" << crHashed.m_hashedVals.m_generalID.GetValue() << "\", should be \"" << localId << '"'); return e_Error; } } #ifndef DISABLE_CALLAUTH } #endif if (!remoteId) { if (!crHashed.m_hashedVals.HasOptionalField(H235_ClearToken::e_sendersID)) { PTRACE(1, "H235RAS\tH2351_Authenticator requires senders ID."); return e_Error; } if (crHashed.m_hashedVals.m_sendersID.GetValue() != remoteId) { PTRACE(1, "H235RAS\tSenders ID is \"" << crHashed.m_hashedVals.m_sendersID.GetValue() << "\", should be \"" << remoteId << '"'); return e_Error; } } /**** * step 1 * extract the variable hash and save it * */ BYTE RV[HASH_SIZE]; if (crHashed.m_token.m_hash.GetSize() != HASH_SIZE*8) { PTRACE(2, "H235RAS\tH2351_Authenticator requires a hash!"); return e_Error; } const unsigned char *data = crHashed.m_token.m_hash.GetDataPointer(); memcpy(RV, data, HASH_SIZE); unsigned char secretkey[20]; SHA1(password, password.GetLength(), secretkey); /**** * step 4 * lookup the variable int the orginal ASN1 packet * and set it to 0. */ PINDEX foundat = 0; bool found = false; const BYTE * asnPtr = rawPDU; PINDEX asnLen = rawPDU.GetSize(); while (foundat < asnLen - HASH_SIZE) { for (PINDEX i = foundat; i <= asnLen - HASH_SIZE; i++) { if (memcmp(asnPtr+i, data, HASH_SIZE) == 0) { // i'v found it ! foundat = i; found = true; break; } } if (!found) { if (foundat != 0) break; PTRACE(2, "H235RAS\tH2351_Authenticator could not locate embedded hash!"); return e_Error; } found = false; memset((BYTE *)asnPtr+foundat, 0, HASH_SIZE); /**** * step 5 * generate a HMAC-SHA1 key over the hole packet * */ char key[HASH_SIZE]; hmac_sha(secretkey, 20, asnPtr, asnLen, key, HASH_SIZE); /**** * step 6 * compare the two keys * */ if (memcmp(key, RV, HASH_SIZE) == 0) { // Keys are the same !! Ok // save the values for the next call lastRandomSequenceNumber = crHashed.m_hashedVals.m_random; lastTimestamp = crHashed.m_hashedVals.m_timeStamp; return e_OK; } // Put it back and look for another memcpy((BYTE *)asnPtr+foundat, data, HASH_SIZE); foundat++; } PTRACE(1, "H235RAS\tH2351_Authenticator hash does not match."); return e_BadPassword; } PBoolean H2351_Authenticator::IsCapability(const H235_AuthenticationMechanism & mechansim, const PASN_ObjectId & algorithmOID) { return mechansim.GetTag() == H235_AuthenticationMechanism::e_pwdHash && algorithmOID.AsString() == OID_U; } PBoolean H2351_Authenticator::SetCapability(H225_ArrayOf_AuthenticationMechanism & mechanisms, H225_ArrayOf_PASN_ObjectId & algorithmOIDs) { return AddCapability(H235_AuthenticationMechanism::e_pwdHash, OID_U, mechanisms, algorithmOIDs); } PBoolean H2351_Authenticator::IsSecuredPDU(unsigned rasPDU, PBoolean received) const { switch (rasPDU) { case H225_RasMessage::e_registrationRequest : case H225_RasMessage::e_admissionRequest : return received ? !remoteId.IsEmpty() : !localId.IsEmpty(); default : return FALSE; } } PBoolean H2351_Authenticator::IsSecuredSignalPDU(unsigned signalPDU, PBoolean received) const { switch (signalPDU) { case H225_H323_UU_PDU_h323_message_body::e_setup: return received ? !remoteId.IsEmpty() : !localId.IsEmpty(); default : return FALSE; } } PBoolean H2351_Authenticator::UseGkAndEpIdentifiers() const { return TRUE; } #endif // P_SSL ///////////////////////////////////////////////////////////////////////////// h323plus/src/h323.cxx0000644000175000017500000070206611653372226013123 0ustar markmark/* * h323.cxx * * H.323 protocol handler * * H323plus Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Id: h323.cxx,v 1.93 2011/10/31 01:06:30 shorne Exp $ */ #include #ifdef __GNUC__ #pragma implementation "h323con.h" #endif #include "h323con.h" #include "h323ep.h" #include "h323neg.h" #include "h323rtp.h" #ifdef H323_H450 #include "h450/h4501.h" #include "h450/h4503.h" #include "h450/h4504.h" #include "h450/h45011.h" #include "h450/h450pdu.h" #endif #ifdef H323_H460 #include "h460/h460.h" #include "h460/h4601.h" #ifdef H323_H46018 #include "h460/h46018_h225.h" #include "h460/h46019.h" #endif #ifdef H323_H46024B #include "h460/h46024b.h" #endif #endif #ifdef P_STUN #include #endif #include "gkclient.h" #include "rfc2833.h" #ifdef H323_T120 #include "t120proto.h" #endif #ifdef H323_T38 #include "t38proto.h" #endif #ifdef H323_H224 #include "h323h224.h" #endif #ifdef H323_FILE #include "h323filetransfer.h" #endif #ifdef H323_AEC #include #endif #include "h235auth.h" const PTimeInterval MonitorCallStatusTime(0, 10); // Seconds #define new PNEW #ifdef H323_SIGNAL_AGGREGATE class AggregatedH225Handle : public H323AggregatedH2x5Handle { // PCLASSINFO(AggregatedH225Handle, H323AggregatedH2x5Handle) public: AggregatedH225Handle(H323Transport & _transport, H323Connection & _connection) : H323AggregatedH2x5Handle(_transport, _connection) { } ~AggregatedH225Handle() { } PBoolean OnRead() { PBoolean ret = H323AggregatedH2x5Handle::OnRead(); if (connection.controlChannel == NULL) connection.MonitorCallStatus(); return ret; } PBoolean HandlePDU(PBoolean ok, PBYTEArray & dataPDU) { H323SignalPDU pdu; if (ok && dataPDU.GetSize() > 0) ok = pdu.ProcessReadData(transport, dataPDU); return connection.HandleReceivedSignalPDU(ok, pdu); } void OnClose() { DeInit(); } void DeInit() { if (connection.controlChannel == NULL) { connection.endSessionReceived.Signal(); } } }; class AggregatedH245Handle : public H323AggregatedH2x5Handle { // PCLASSINFO(AggregatedH245Handle, H323AggregatedH2x5Handle) public: AggregatedH245Handle(H323Transport & _transport, H323Connection & _connection) : H323AggregatedH2x5Handle(_transport, _connection) { } ~AggregatedH245Handle() { } PBoolean OnRead() { PBoolean ret = H323AggregatedH2x5Handle::OnRead(); connection.MonitorCallStatus(); return ret; } PBoolean HandlePDU(PBoolean ok, PBYTEArray & pdu) { PPER_Stream strm(pdu); return connection.HandleReceivedControlPDU(ok, strm); } void OnClose() { PPER_Stream strm; connection.HandleReceivedControlPDU(FALSE, strm); } void DeInit() { connection.EndHandleControlChannel(); } }; #endif ///////////////////////////////////////////////////////////////////////////// #if PTRACING ostream & operator<<(ostream & o, H323Connection::CallEndReason r) { static const char * const CallEndReasonNames[H323Connection::NumCallEndReasons] = { "EndedByLocalUser", /// Local endpoint application cleared call "EndedByNoAccept", /// Local endpoint did not accept call OnIncomingCall()=FALSE "EndedByAnswerDenied", /// Local endpoint declined to answer call "EndedByRemoteUser", /// Remote endpoint application cleared call "EndedByRefusal", /// Remote endpoint refused call "EndedByNoAnswer", /// Remote endpoint did not answer in required time "EndedByCallerAbort", /// Remote endpoint stopped calling "EndedByTransportFail", /// Transport error cleared call "EndedByConnectFail", /// Transport connection failed to establish call "EndedByGatekeeper", /// Gatekeeper has cleared call "EndedByNoUser", /// Call failed as could not find user (in GK) "EndedByNoBandwidth", /// Call failed as could not get enough bandwidth "EndedByCapabilityExchange",/// Could not find common capabilities "EndedByCallForwarded", /// Call was forwarded using FACILITY message "EndedBySecurityDenial", /// Call failed a security check and was ended "EndedByLocalBusy", /// Local endpoint busy "EndedByLocalCongestion", /// Local endpoint congested "EndedByRemoteBusy", /// Remote endpoint busy "EndedByRemoteCongestion", /// Remote endpoint congested "EndedByUnreachable", /// Could not reach the remote party "EndedByNoEndPoint", /// The remote party is not running an endpoint "EndedByHostOffline", /// The remote party host off line "EndedByTemporaryFailure", /// The remote failed temporarily app may retry "EndedByQ931Cause", /// The remote ended the call with unmapped Q.931 cause code "EndedByDurationLimit", /// Call cleared due to an enforced duration limit "EndedByInvalidConferenceID", /// Call cleared due to invalid conference ID "EndedByOSPRefusal" // Call cleared as OSP server unable or unwilling to route }; if ((PINDEX)r >= PARRAYSIZE(CallEndReasonNames)) o << "InvalidCallEndReason<" << (unsigned)r << '>'; else if (CallEndReasonNames[r] == NULL) o << "CallEndReason<" << (unsigned)r << '>'; else o << CallEndReasonNames[r]; return o; } ostream & operator<<(ostream & o, H323Connection::AnswerCallResponse s) { static const char * const AnswerCallResponseNames[H323Connection::NumAnswerCallResponses] = { "AnswerCallNow", "AnswerCallDenied", "AnswerCallPending", "AnswerCallDeferred", "AnswerCallAlertWithMedia", "AnswerCallDeferredWithMedia", "AnswerCallNowWithAlert" }; if ((PINDEX)s >= PARRAYSIZE(AnswerCallResponseNames)) o << "InvalidAnswerCallResponse<" << (unsigned)s << '>'; else if (AnswerCallResponseNames[s] == NULL) o << "AnswerCallResponse<" << (unsigned)s << '>'; else o << AnswerCallResponseNames[s]; return o; } ostream & operator<<(ostream & o, H323Connection::SendUserInputModes m) { static const char * const SendUserInputModeNames[H323Connection::NumSendUserInputModes] = { "SendUserInputAsQ931", "SendUserInputAsString", "SendUserInputAsTone", "SendUserInputAsRFC2833", "SendUserInputAsSeparateRFC2833" #ifdef H323_H249 ,"SendUserInputAsNavigation", "SendUserInputAsSoftkey", "SendUserInputAsPointDevice", "SendUserInputAsModal" #endif }; if ((PINDEX)m >= PARRAYSIZE(SendUserInputModeNames)) o << "InvalidSendUserInputMode<" << (unsigned)m << '>'; else if (SendUserInputModeNames[m] == NULL) o << "SendUserInputMode<" << (unsigned)m << '>'; else o << SendUserInputModeNames[m]; return o; } const char * const H323Connection::ConnectionStatesNames[NumConnectionStates] = { "NoConnectionActive", "AwaitingGatekeeperAdmission", "AwaitingTransportConnect", "AwaitingSignalConnect", "AwaitingLocalAnswer", "HasExecutedSignalConnect", "EstablishedConnection", "ShuttingDownConnection" }; const char * const H323Connection::FastStartStateNames[NumFastStartStates] = { "FastStartDisabled", "FastStartInitiate", "FastStartResponse", "FastStartAcknowledged" }; #endif #ifdef H323_H460 static void ReceiveSetupFeatureSet(const H323Connection * connection, const H225_Setup_UUIE & pdu) { H225_FeatureSet fs; PBoolean hasFeaturePDU = FALSE; if (pdu.HasOptionalField(H225_Setup_UUIE::e_neededFeatures)) { fs.IncludeOptionalField(H225_FeatureSet::e_neededFeatures); H225_ArrayOf_FeatureDescriptor & fsn = fs.m_neededFeatures; fsn = pdu.m_neededFeatures; hasFeaturePDU = TRUE; } if (pdu.HasOptionalField(H225_Setup_UUIE::e_desiredFeatures)) { fs.IncludeOptionalField(H225_FeatureSet::e_desiredFeatures); H225_ArrayOf_FeatureDescriptor & fsn = fs.m_desiredFeatures; fsn = pdu.m_desiredFeatures; hasFeaturePDU = TRUE; } if (pdu.HasOptionalField(H225_Setup_UUIE::e_supportedFeatures)) { fs.IncludeOptionalField(H225_FeatureSet::e_supportedFeatures); H225_ArrayOf_FeatureDescriptor & fsn = fs.m_supportedFeatures; fsn = pdu.m_supportedFeatures; hasFeaturePDU = TRUE; } if (hasFeaturePDU) connection->OnReceiveFeatureSet(H460_MessageType::e_setup, fs); else connection->DisableFeatureSet(H460_MessageType::e_setup); } template static void ReceiveFeatureData(const H323Connection * connection, unsigned code, const PDUType & pdu) { if (pdu.m_h323_uu_pdu.HasOptionalField(H225_H323_UU_PDU::e_genericData)) { H225_FeatureSet fs; fs.IncludeOptionalField(H225_FeatureSet::e_supportedFeatures); H225_ArrayOf_FeatureDescriptor & fsn = fs.m_supportedFeatures; const H225_ArrayOf_GenericData & data = pdu.m_h323_uu_pdu.m_genericData; for (PINDEX i=0; i < data.GetSize(); i++) { PINDEX lastPos = fsn.GetSize(); fsn.SetSize(lastPos+1); fsn[lastPos] = (H225_FeatureDescriptor &)data[i]; } connection->OnReceiveFeatureSet(code, fs, true); } } #endif template static void ReceiveFeatureSet(const H323Connection * connection, unsigned code, const PDUType & pdu) { if (pdu.HasOptionalField(PDUType::e_featureSet)) connection->OnReceiveFeatureSet(code, pdu.m_featureSet); } #ifndef DISABLE_CALLAUTH template static PBoolean ReceiveAuthenticatorPDU(const H323Connection * connection, const PDUType & pdu, unsigned code) { PBoolean AuthResult = FALSE; H235Authenticators authenticators = connection->GetEPAuthenticators(); PBYTEArray strm; if (!pdu.HasOptionalField(PDUType::e_tokens) && !pdu.HasOptionalField(PDUType::e_cryptoTokens)) { PTRACE(2, "H235EP\tReceived unsecured EPAuthentication message (no crypto tokens)," " expected one of:\n" << setfill(',') << connection->GetEPAuthenticators() << setfill(' ')); return connection->OnEPAuthenticationFailed(H235Authenticator::e_Absent); } else { H235Authenticator::ValidationResult result = authenticators.ValidateSignalPDU(code, pdu.m_tokens, pdu.m_cryptoTokens,strm); if (result == H235Authenticator::e_OK) { PTRACE(4, "H235EP\tAuthentication succeeded"); AuthResult = TRUE; } return AuthResult ? TRUE : connection->OnEPAuthenticationFailed(result); } return AuthResult; } #ifdef H323_H46018 const char * H46018OID = "0.0.8.460.18.0.1"; const char * H46019OID = "0.0.8.460.19.0.1"; const unsigned defH46019payload = 127; const unsigned defH46019TTL = 20; #endif #ifdef H323_H46024A const char * H46024AOID = "0.0.8.460.24.1"; #endif #ifdef H323_H46024B const char * H46024BOID = "0.0.8.460.24.2"; #endif #endif // H323_H460 H323Connection::H323Connection(H323EndPoint & ep, unsigned ref, unsigned options) : endpoint(ep), localAliasNames(ep.GetAliasNames()), localPartyName(ep.GetLocalUserName()), localCapabilities(ep.GetCapabilities()), gkAccessTokenOID(ep.GetGkAccessTokenOID()), alertingTime(0), connectedTime(0), callEndTime(0), reverseMediaOpenTime(0), releaseSequence(ReleaseSequenceUnknown) #ifndef DISABLE_CALLAUTH ,EPAuthenticators(ep.CreateEPAuthenticators()) #endif #ifdef H323_H460 ,features(ep.GetFeatureSet()) #endif { localAliasNames.MakeUnique(); callAnswered = FALSE; gatekeeperRouted = FALSE; distinctiveRing = 0; callReference = ref; remoteCallWaiting = -1; h225version = H225_PROTOCOL_VERSION; h245version = H245_PROTOCOL_VERSION; h245versionSet = FALSE; signallingChannel = NULL; controlChannel = NULL; #ifdef H323_H450 holdAudioMediaChannel = NULL; holdVideoMediaChannel = NULL; isConsultationTransfer = FALSE; isCallIntrusion = FALSE; callIntrusionProtectionLevel = endpoint.GetCallIntrusionProtectionLevel(); #endif switch (options&H245TunnelingOptionMask) { case H245TunnelingOptionDisable : h245Tunneling = FALSE; break; case H245TunnelingOptionEnable : h245Tunneling = TRUE; break; default : h245Tunneling = !ep.IsH245TunnelingDisabled(); break; } h245TunnelTxPDU = NULL; h245TunnelRxPDU = NULL; alertingPDU = NULL; connectPDU = NULL; connectionState = NoConnectionActive; callEndReason = NumCallEndReasons; q931Cause = Q931::ErrorInCauseIE; bandwidthAvailable = endpoint.GetInitialBandwidth(); uuiesRequested = 0; // Empty set addAccessTokenToSetup = TRUE; // Automatic inclusion of ACF access token in SETUP sendUserInputMode = endpoint.GetSendUserInputMode(); mediaWaitForConnect = FALSE; transmitterSidePaused = FALSE; switch (options&FastStartOptionMask) { case FastStartOptionDisable : fastStartState = FastStartDisabled; break; case FastStartOptionEnable : fastStartState = FastStartInitiate; break; default : fastStartState = ep.IsFastStartDisabled() ? FastStartDisabled : FastStartInitiate; break; } mustSendDRQ = FALSE; earlyStart = FALSE; enableMERAHack = FALSE; #ifdef H323_T120 startT120 = TRUE; #endif #ifdef H323_H224 startH224 = FALSE; #endif lastPDUWasH245inSETUP = FALSE; endSessionNeeded = FALSE; endSessionSent = FALSE; switch (options&H245inSetupOptionMask) { case H245inSetupOptionDisable : doH245inSETUP = FALSE; break; case H245inSetupOptionEnable : doH245inSETUP = TRUE; break; default : doH245inSETUP = !ep.IsH245inSetupDisabled(); break; } doH245QoS = !ep.IsH245QoSDisabled(); #ifdef H323_AUDIO_CODECS remoteMaxAudioDelayJitter = 0; minAudioJitterDelay = endpoint.GetMinAudioJitterDelay(); maxAudioJitterDelay = endpoint.GetMaxAudioJitterDelay(); #endif switch (options&DetectInBandDTMFOptionMask) { case DetectInBandDTMFOptionDisable : detectInBandDTMF = FALSE; break; case DetectInBandDTMFOptionEnable : detectInBandDTMF = TRUE; break; default : detectInBandDTMF = !ep.DetectInBandDTMFDisabled(); break; } masterSlaveDeterminationProcedure = new H245NegMasterSlaveDetermination(endpoint, *this); capabilityExchangeProcedure = new H245NegTerminalCapabilitySet(endpoint, *this); logicalChannels = new H245NegLogicalChannels(endpoint, *this); requestModeProcedure = new H245NegRequestMode(endpoint, *this); roundTripDelayProcedure = new H245NegRoundTripDelay(endpoint, *this); #ifdef H323_H450 h450dispatcher = new H450xDispatcher(*this); h4502handler = new H4502Handler(*this, *h450dispatcher); h4503handler = new H4503Handler(*this, *h450dispatcher); h4504handler = new H4504Handler(*this, *h450dispatcher); h4506handler = new H4506Handler(*this, *h450dispatcher); h45011handler = new H45011Handler(*this, *h450dispatcher); #endif rfc2833handler = new OpalRFC2833(PCREATE_NOTIFIER(OnUserInputInlineRFC2833)); #ifdef H323_T120 t120handler = NULL; #endif #ifdef H323_T38 t38handler = NULL; #endif endSync = NULL; remoteIsNAT = false; NATsupport = true; sameNAT = false; #ifndef DISABLE_CALLAUTH AuthenticationFailed = FALSE; hasAuthentication = FALSE; #endif // set aggregation options #ifdef H323_RTP_AGGREGATE useRTPAggregation = (options & RTPAggregationMask) != RTPAggregationDisable; #endif #ifdef H323_SIGNAL_AGGREGATE signalAggregator = NULL; controlAggregator = NULL; useSignallingAggregation = (options & SignallingAggregationMask) != SignallingAggregationDisable; #endif #ifdef H323_AEC aec = NULL; #endif #ifdef H323_H460 disableH460 = ep.FeatureSetDisabled(); features->LoadFeatureSet(H460_Feature::FeatureSignal,this); #ifdef H323_H4609 m_h4609Stats = NULL; m_h4609enabled = false; m_h4609Final = false; #endif #ifdef H323_H46018 m_H46019CallReceiver = false; m_H46019enabled = false; m_H46019multiplex = false; m_h245Connect = false; #endif #ifdef H323_H46024A m_H46024Aenabled = false; m_H46024Ainitator = false; m_H46024Astate = 0; m_H46024Benabled = false; m_H46024Bstate = 0; #endif #endif nonCallConnection = FALSE; } H323Connection::~H323Connection() { delete masterSlaveDeterminationProcedure; delete capabilityExchangeProcedure; delete logicalChannels; delete requestModeProcedure; delete roundTripDelayProcedure; #ifdef H323_AEC delete aec; #endif #ifdef H323_H450 delete h450dispatcher; #endif delete rfc2833handler; #ifdef H323_T120 delete t120handler; #endif #ifdef H323_T38 delete t38handler; #endif delete signallingChannel; delete controlChannel; delete alertingPDU; delete connectPDU; #ifdef H323_H450 delete holdAudioMediaChannel; delete holdVideoMediaChannel; #endif #ifdef H323_H460 delete features; #ifdef H323_H4609 delete m_h4609Stats; m_h4609Stats = NULL; #endif #endif #ifdef P_STUN m_NATSockets.clear(); #endif PTRACE(3, "H323\tConnection " << callToken << " deleted."); if (endSync != NULL) endSync->Signal(); } PBoolean H323Connection::Lock() { outerMutex.Wait(); // If shutting down don't try and lock, just return failed. If not then lock // it but do second test for shut down to avoid a possible race condition. if (connectionState == ShuttingDownConnection) { outerMutex.Signal(); return FALSE; } innerMutex.Wait(); return TRUE; } int H323Connection::TryLock() { if (!outerMutex.Wait(0)) return -1; if (connectionState == ShuttingDownConnection) { outerMutex.Signal(); return 0; } innerMutex.Wait(); return 1; } void H323Connection::Unlock() { innerMutex.Signal(); outerMutex.Signal(); } void H323Connection::SetCallEndReason(CallEndReason reason, PSyncPoint * sync) { // Only set reason if not already set to something if (callEndReason == NumCallEndReasons) { PTRACE(3, "H323\tCall end reason for " << callToken << " set to " << reason); callEndReason = reason; } // only set the sync point if it is NULL if (endSync == NULL) endSync = sync; else PAssert(sync == NULL, "SendCallEndReason called to overwrite syncpoint"); if (!callEndTime.IsValid()) callEndTime = PTime(); if (endSessionSent) return; endSessionSent = TRUE; PTRACE(2, "H225\tSending release complete PDU: callRef=" << callReference); H323SignalPDU rcPDU; rcPDU.BuildReleaseComplete(*this); #ifdef H323_H450 h450dispatcher->AttachToReleaseComplete(rcPDU); #endif PBoolean sendingReleaseComplete = OnSendReleaseComplete(rcPDU); if (endSessionNeeded) { if (sendingReleaseComplete) h245TunnelTxPDU = &rcPDU; // Piggy back H245 on this reply // Send an H.245 end session to the remote endpoint. H323ControlPDU pdu; pdu.BuildEndSessionCommand(H245_EndSessionCommand::e_disconnect); WriteControlPDU(pdu); } if (sendingReleaseComplete) { h245TunnelTxPDU = NULL; if (releaseSequence == ReleaseSequenceUnknown) releaseSequence = ReleaseSequence_Local; WriteSignalPDU(rcPDU); } } PBoolean H323Connection::ClearCall(H323Connection::CallEndReason reason) { return endpoint.ClearCall(callToken, reason); } PBoolean H323Connection::ClearCallSynchronous(PSyncPoint * sync, H323Connection::CallEndReason reason) { return endpoint.ClearCallSynchronous(callToken, reason, sync); } void H323Connection::CleanUpOnCallEnd() { PTRACE(3, "H323\tConnection " << callToken << " closing: connectionState=" << connectionState); /* The following double mutex is designed to guarentee that there is no deadlock or access of deleted object with a random thread that may have just called Lock() at the instant we are trying to get rid of the connection. */ outerMutex.Wait(); connectionState = ShuttingDownConnection; outerMutex.Signal(); innerMutex.Wait(); // Unblock sync points digitsWaitFlag.Signal(); // stop various timers masterSlaveDeterminationProcedure->Stop(); capabilityExchangeProcedure->Stop(); // Clean up any fast start "pending" channels we may have running. PINDEX i; for (i = 0; i < fastStartChannels.GetSize(); i++) fastStartChannels[i].CleanUpOnTermination(); fastStartChannels.RemoveAll(); // Dispose of all the logical channels logicalChannels->RemoveAll(); if (endSessionNeeded) { // Calculate time since we sent the end session command so we do not actually // wait for returned endSession if it has already been that long PTimeInterval waitTime = endpoint.GetEndSessionTimeout(); if (callEndTime.IsValid()) { PTime now; if (now > callEndTime) { // Allow for backward motion in time (DST change) waitTime -= now - callEndTime; if (waitTime < 0) waitTime = 0; } } // Wait a while for the remote to send an endSession PTRACE(4, "H323\tAwaiting end session from remote for " << waitTime << " seconds"); if (!endSessionReceived.Wait(waitTime)) { PTRACE(3, "H323\tDid not receive an end session from remote."); } } // Wait for control channel to be cleaned up (thread ended). if (controlChannel != NULL) controlChannel->CleanUpOnTermination(); #ifdef H323_SIGNAL_AGGREGATE if (controlAggregator != NULL) endpoint.GetSignallingAggregator()->RemoveHandle(controlAggregator); #endif // Wait for signalling channel to be cleaned up (thread ended). if (signallingChannel != NULL) signallingChannel->CleanUpOnTermination(); #ifdef H323_SIGNAL_AGGREGATE if (signalAggregator != NULL) endpoint.GetSignallingAggregator()->RemoveHandle(signalAggregator); #endif // Check for gatekeeper and do disengage if have one if (mustSendDRQ) { H323Gatekeeper * gatekeeper = endpoint.GetGatekeeper(); if (gatekeeper != NULL) gatekeeper->DisengageRequest(*this, H225_DisengageReason::e_normalDrop); } PTRACE(1, "H323\tConnection " << callToken << " terminated."); } void H323Connection::AttachSignalChannel(const PString & token, H323Transport * channel, PBoolean answeringCall) { callAnswered = answeringCall; if (signallingChannel != NULL && signallingChannel->IsOpen()) { PAssertAlways(PLogicError); return; } delete signallingChannel; signallingChannel = channel; // Set our call token for identification in endpoint dictionary callToken = token; #ifndef DISABLE_CALLAUTH SetAuthenticationConnection(); #endif } void H323Connection::ChangeSignalChannel(H323Transport * channel) { if (signallingChannel == NULL || controlChannel == NULL || !h245Tunneling) { PAssertAlways(PLogicError); return; } signallingMutex.Wait(); H323Transport * oldTransport = signallingChannel; signallingChannel = channel; controlMutex.Wait(); H323Transport * oldControl = controlChannel; StartControlChannel(); controlMutex.Signal(); signallingMutex.Signal(); oldControl->CleanUpOnTermination(); delete oldControl; oldTransport->CleanUpOnTermination(); delete oldTransport; } PBoolean H323Connection::WriteSignalPDU(H323SignalPDU & pdu) { PWaitAndSignal m(signallingMutex); lastPDUWasH245inSETUP = FALSE; if (signallingChannel != NULL && signallingChannel->IsOpen()) { pdu.m_h323_uu_pdu.m_h245Tunneling = h245Tunneling; H323Gatekeeper * gk = endpoint.GetGatekeeper(); if (gk != NULL) gk->InfoRequestResponse(*this, pdu.m_h323_uu_pdu, TRUE); // We don't have to take down the call if the signalling channel fails. // We may want to wait until the media fails or the local hangs up. if (!pdu.Write(*signallingChannel,this)) { PTRACE(2,"H225\tERROR: Signalling Channel Failure: PDU was not sent!"); return HandleSignalChannelFailure(); } return TRUE; } ClearCall(EndedByTransportFail); return FALSE; } void H323Connection::HandleSignallingChannel() { PAssert(signallingChannel != NULL, PLogicError); PTRACE(2, "H225\tReading PDUs: callRef=" << callReference); while (signallingChannel->IsOpen()) { H323SignalPDU pdu; if (!HandleReceivedSignalPDU(pdu.Read(*signallingChannel), pdu)) break; } // If we are the only link to the far end then indicate that we have // received endSession even if we hadn't, because we are now never going // to get one so there is no point in having CleanUpOnCallEnd wait. if (controlChannel == NULL) endSessionReceived.Signal(); PTRACE(2, "H225\tSignal channel closed."); } PBoolean H323Connection::HandleReceivedSignalPDU(PBoolean readStatus, H323SignalPDU & pdu) { if (readStatus) { if (!HandleSignalPDU(pdu)) { #ifndef DISABLE_CALLAUTH if (AuthenticationFailed) ClearCall(EndedBySecurityDenial); else #endif ClearCall(EndedByTransportFail); return FALSE; } switch (connectionState) { case EstablishedConnection : signallingChannel->SetReadTimeout(MonitorCallStatusTime); break; default: break; } } else if (signallingChannel->GetErrorCode() != PChannel::Timeout) { if (controlChannel == NULL || !controlChannel->IsOpen()) ClearCall(EndedByTransportFail); signallingChannel->Close(); return FALSE; } else { switch (connectionState) { case AwaitingSignalConnect : // Had time out waiting for remote to send a CONNECT ClearCall(EndedByNoAnswer); break; case HasExecutedSignalConnect : // Have had minimum MonitorCallStatusTime delay since CONNECT but // still no media to move it to EstablishedConnection state. Must // thus not have any common codecs to use! ClearCall(EndedByCapabilityExchange); break; default : break; } } if (controlChannel == NULL) MonitorCallStatus(); return TRUE; } PBoolean H323Connection::HandleSignalPDU(H323SignalPDU & pdu) { // Process the PDU. const Q931 & q931 = pdu.GetQ931(); PTRACE(3, "H225\tHandling PDU: " << q931.GetMessageTypeName() << " callRef=" << q931.GetCallReference()); if (!Lock()) { // Continue to look for endSession/releaseComplete pdus if (pdu.m_h323_uu_pdu.m_h245Tunneling) { for (PINDEX i = 0; i < pdu.m_h323_uu_pdu.m_h245Control.GetSize(); i++) { PPER_Stream strm = pdu.m_h323_uu_pdu.m_h245Control[i].GetValue(); if (!InternalEndSessionCheck(strm)) break; } } if (q931.GetMessageType() == Q931::ReleaseCompleteMsg) endSessionReceived.Signal(); return FALSE; } // If remote does not do tunneling, so we don't either. Note that if it // gets turned off once, it stays off for good. // GNUGK NAT may accidently send an information PDU if (q931.GetMessageType() != Q931::InformationMsg) { if (h245Tunneling && !pdu.m_h323_uu_pdu.m_h245Tunneling) { masterSlaveDeterminationProcedure->Stop(); capabilityExchangeProcedure->Stop(); PTRACE(3, "H225\tFast Start DISABLED!"); h245Tunneling = FALSE; } } h245TunnelRxPDU = &pdu; #ifdef H323_H450 // Check for presence of supplementary services if (pdu.m_h323_uu_pdu.HasOptionalField(H225_H323_UU_PDU::e_h4501SupplementaryService)) { if (!h450dispatcher->HandlePDU(pdu)) // Process H4501SupplementaryService APDU return FALSE; } #endif #ifdef H323_H460 ReceiveFeatureData(this,q931.GetMessageType(),pdu); #endif // Add special code to detect if call is from a Cisco and remoteApplication needs setting if (remoteApplication.IsEmpty() && pdu.m_h323_uu_pdu.HasOptionalField(H225_H323_UU_PDU::e_nonStandardControl)) { for (PINDEX i = 0; i < pdu.m_h323_uu_pdu.m_nonStandardControl.GetSize(); i++) { const H225_NonStandardIdentifier & id = pdu.m_h323_uu_pdu.m_nonStandardControl[i].m_nonStandardIdentifier; if (id.GetTag() == H225_NonStandardIdentifier::e_h221NonStandard) { const H225_H221NonStandard & h221 = id; if (h221.m_t35CountryCode == 181 && h221.m_t35Extension == 0 && h221.m_manufacturerCode == 18) { remoteApplication = "Cisco IOS\t12.x\t181/18"; PTRACE(2, "H225\tSet remote application name: \"" << remoteApplication << '"'); break; } } } } PBoolean ok; switch (q931.GetMessageType()) { case Q931::SetupMsg : setupTime = PTime(); ok = OnReceivedSignalSetup(pdu); break; case Q931::CallProceedingMsg : ok = OnReceivedCallProceeding(pdu); break; case Q931::ProgressMsg : ok = OnReceivedProgress(pdu); break; case Q931::AlertingMsg : ok = OnReceivedAlerting(pdu); break; case Q931::ConnectMsg : connectedTime = PTime(); ok = OnReceivedSignalConnect(pdu); break; case Q931::FacilityMsg : ok = OnReceivedFacility(pdu); break; case Q931::SetupAckMsg : ok = OnReceivedSignalSetupAck(pdu); break; case Q931::InformationMsg : ok = OnReceivedSignalInformation(pdu); break; case Q931::NotifyMsg : ok = OnReceivedSignalNotify(pdu); break; case Q931::StatusMsg : ok = OnReceivedSignalStatus(pdu); break; case Q931::StatusEnquiryMsg : ok = OnReceivedStatusEnquiry(pdu); break; case Q931::ReleaseCompleteMsg : if (releaseSequence == ReleaseSequenceUnknown) releaseSequence = ReleaseSequence_Remote; OnReceivedReleaseComplete(pdu); ok = FALSE; break; default : ok = OnUnknownSignalPDU(pdu); } if (ok) { // Process tunnelled H245 PDU, if present. HandleTunnelPDU(NULL); // Check for establishment criteria met InternalEstablishedConnectionCheck(); } h245TunnelRxPDU = NULL; PString digits = pdu.GetQ931().GetKeypad(); if (!digits) OnUserInputString(digits); H323Gatekeeper * gk = endpoint.GetGatekeeper(); if (gk != NULL) gk->InfoRequestResponse(*this, pdu.m_h323_uu_pdu, FALSE); Unlock(); return ok; } void H323Connection::HandleTunnelPDU(H323SignalPDU * txPDU) { if (h245TunnelRxPDU == NULL || !h245TunnelRxPDU->m_h323_uu_pdu.m_h245Tunneling) return; if (!h245Tunneling && h245TunnelRxPDU->m_h323_uu_pdu.m_h323_message_body.GetTag() == H225_H323_UU_PDU_h323_message_body::e_setup) return; H323SignalPDU localTunnelPDU; if (txPDU != NULL) h245TunnelTxPDU = txPDU; else { /* Compensate for Cisco bug. IOS cannot seem to accept multiple tunnelled H.245 PDUs insode the same facility message */ if (remoteApplication.Find("Cisco IOS") == P_MAX_INDEX) { // Not Cisco, so OK to tunnel multiple PDUs localTunnelPDU.BuildFacility(*this, TRUE); h245TunnelTxPDU = &localTunnelPDU; } } // if a response to a SETUP PDU containing TCS/MSD was ignored, then shutdown negotiations PINDEX i; if (lastPDUWasH245inSETUP && (h245TunnelRxPDU->m_h323_uu_pdu.m_h245Control.GetSize() == 0) && (h245TunnelRxPDU->GetQ931().GetMessageType() != Q931::CallProceedingMsg)) { PTRACE(4, "H225\tH.245 in SETUP ignored - resetting H.245 negotiations"); masterSlaveDeterminationProcedure->Stop(); lastPDUWasH245inSETUP = FALSE; capabilityExchangeProcedure->Stop(); } else { for (i = 0; i < h245TunnelRxPDU->m_h323_uu_pdu.m_h245Control.GetSize(); i++) { PPER_Stream strm = h245TunnelRxPDU->m_h323_uu_pdu.m_h245Control[i].GetValue(); HandleControlData(strm); } } // Make sure does not get repeated, clear tunnelled H.245 PDU's h245TunnelRxPDU->m_h323_uu_pdu.m_h245Control.SetSize(0); if (h245TunnelRxPDU->m_h323_uu_pdu.m_h323_message_body.GetTag() == H225_H323_UU_PDU_h323_message_body::e_setup) { H225_Setup_UUIE & setup = h245TunnelRxPDU->m_h323_uu_pdu.m_h323_message_body; if (setup.HasOptionalField(H225_Setup_UUIE::e_parallelH245Control)) { for (i = 0; i < setup.m_parallelH245Control.GetSize(); i++) { PPER_Stream strm = setup.m_parallelH245Control[i].GetValue(); HandleControlData(strm); } // Make sure does not get repeated, clear tunnelled H.245 PDU's setup.m_parallelH245Control.SetSize(0); } } h245TunnelTxPDU = NULL; // If had replies, then send them off in their own packet if (txPDU == NULL && localTunnelPDU.m_h323_uu_pdu.m_h245Control.GetSize() > 0) WriteSignalPDU(localTunnelPDU); } static PBoolean BuildFastStartList(const H323Channel & channel, H225_ArrayOf_PASN_OctetString & array, H323Channel::Directions reverseDirection) { H245_OpenLogicalChannel open; const H323Capability & capability = channel.GetCapability(); if (channel.GetDirection() != reverseDirection) { if (!capability.OnSendingPDU(open.m_forwardLogicalChannelParameters.m_dataType)) return FALSE; } else { if (!capability.OnSendingPDU(open.m_reverseLogicalChannelParameters.m_dataType)) return FALSE; open.m_forwardLogicalChannelParameters.m_multiplexParameters.SetTag( H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::e_none); open.m_forwardLogicalChannelParameters.m_dataType.SetTag(H245_DataType::e_nullData); open.IncludeOptionalField(H245_OpenLogicalChannel::e_reverseLogicalChannelParameters); } if (!channel.OnSendingPDU(open)) return FALSE; PTRACE(4, "H225\tBuild fastStart:\n " << setprecision(2) << open); PINDEX last = array.GetSize(); array.SetSize(last+1); array[last].EncodeSubType(open); PTRACE(3, "H225\tBuilt fastStart for " << capability); return TRUE; } void H323Connection::OnEstablished() { endpoint.OnConnectionEstablished(*this, callToken); } void H323Connection::OnCleared() { endpoint.OnConnectionCleared(*this, callToken); } void H323Connection::SetRemoteVersions(const H225_ProtocolIdentifier & protocolIdentifier) { if (protocolIdentifier.GetSize() < 6) return; h225version = protocolIdentifier[5]; if (h245versionSet) { PTRACE(3, "H225\tSet protocol version to " << h225version); return; } // If has not been told explicitly what the H.245 version use, make an // assumption based on the H.225 version switch (h225version) { case 1 : h245version = 2; // H.323 version 1 break; case 2 : h245version = 3; // H.323 version 2 break; case 3 : h245version = 5; // H.323 version 3 break; case 4 : h245version = 7; // H.323 version 4 break; case 5 : h245version = 9; // H.323 version 5 break; default: h245version = 13; // H.323 version 6 break; } PTRACE(3, "H225\tSet protocol version to " << h225version << " and implying H.245 version " << h245version); } PBoolean H323Connection::DecodeFastStartCaps(const H225_ArrayOf_PASN_OctetString & fastStartCaps) { if (!capabilityExchangeProcedure->HasReceivedCapabilities()) remoteCapabilities.RemoveAll(); PTRACE(3, "H225\tFast start detected"); // Extract capabilities from the fast start OpenLogicalChannel structures PINDEX i; for (i = 0; i < fastStartCaps.GetSize(); i++) { H245_OpenLogicalChannel open; if (fastStartCaps[i].DecodeSubType(open)) { PTRACE(4, "H225\tFast start open:\n " << setprecision(2) << open); unsigned error; H323Channel * channel = CreateLogicalChannel(open, TRUE, error); if (channel != NULL) { if (channel->GetDirection() == H323Channel::IsTransmitter) channel->SetNumber(logicalChannels->GetNextChannelNumber()); fastStartChannels.Append(channel); } } else { PTRACE(1, "H225\tInvalid fast start PDU decode:\n " << open); } } PTRACE(3, "H225\tOpened " << fastStartChannels.GetSize() << " fast start channels"); // If we are incapable of ANY of the fast start channels, don't do fast start if (!fastStartChannels.IsEmpty()) fastStartState = FastStartResponse; return !fastStartChannels.IsEmpty(); } PBoolean H323Connection::OnReceivedSignalSetup(const H323SignalPDU & setupPDU) { if (setupPDU.m_h323_uu_pdu.m_h323_message_body.GetTag() != H225_H323_UU_PDU_h323_message_body::e_setup) return FALSE; const H225_Setup_UUIE & setup = setupPDU.m_h323_uu_pdu.m_h323_message_body; #ifndef DISABLE_CALLAUTH /// Do Authentication of Incoming Call before anything else if (!ReceiveAuthenticatorPDU(this,setup, H225_H323_UU_PDU_h323_message_body::e_setup)) { if (GetEndPoint().GetEPSecurityPolicy() == H323EndPoint::SecRequired) { PTRACE(4, "H235EP\tAuthentication Failed. Ending Call"); AuthenticationFailed = TRUE; return FALSE; } PTRACE(6, "H235EP\tAuthentication Failed but allowed by policy"); } else { hasAuthentication = TRUE; } #endif switch (setup.m_conferenceGoal.GetTag()) { case H225_Setup_UUIE_conferenceGoal::e_create: case H225_Setup_UUIE_conferenceGoal::e_join: break; case H225_Setup_UUIE_conferenceGoal::e_invite: return endpoint.OnConferenceInvite(FALSE,this,setupPDU); case H225_Setup_UUIE_conferenceGoal::e_callIndependentSupplementaryService: nonCallConnection = endpoint.OnReceiveCallIndependentSupplementaryService(this,setupPDU); if (!nonCallConnection) return FALSE; break; case H225_Setup_UUIE_conferenceGoal::e_capability_negotiation: return endpoint.OnNegotiateConferenceCapabilities(setupPDU); } SetRemoteVersions(setup.m_protocolIdentifier); // Get the ring pattern distinctiveRing = setupPDU.GetDistinctiveRing(); // Save the identifiers sent by caller if (setup.HasOptionalField(H225_Setup_UUIE::e_callIdentifier)) callIdentifier = setup.m_callIdentifier.m_guid; conferenceIdentifier = setup.m_conferenceID; SetRemoteApplication(setup.m_sourceInfo); // Determine the remote parties name/number/address as best we can setupPDU.GetQ931().GetCallingPartyNumber(remotePartyNumber); remotePartyName = setupPDU.GetSourceAliases(signallingChannel); remoteAliasNames = setupPDU.GetSourceAliasNames(); // get the peer address remotePartyAddress = signallingChannel->GetRemoteAddress(); if (setup.m_sourceAddress.GetSize() > 0) remotePartyAddress = H323GetAliasAddressString(setup.m_sourceAddress[0]) + '@' + signallingChannel->GetRemoteAddress(); #ifdef H323_H460 ReceiveSetupFeatureSet(this, setup); #endif // compare the source call signalling address if (setup.HasOptionalField(H225_Setup_UUIE::e_sourceCallSignalAddress)) { PIPSocket::Address srcAddr, sigAddr; H323TransportAddress sourceAddress(setup.m_sourceCallSignalAddress); sourceAddress.GetIpAddress(srcAddr); signallingChannel->GetRemoteAddress().GetIpAddress(sigAddr); NatDetection(srcAddr, sigAddr); } // Anything else we need from setup PDU mediaWaitForConnect = setup.m_mediaWaitForConnect; // Get the local capabilities before fast start or tunnelled TCS is handled if (!nonCallConnection) OnSetLocalCapabilities(); // Send back a H323 Call Proceeding PDU in case OnIncomingCall() takes a while PTRACE(3, "H225\tSending call proceeding PDU"); H323SignalPDU callProceedingPDU; H225_CallProceeding_UUIE & callProceeding = callProceedingPDU.BuildCallProceeding(*this); #ifdef H323_H450 if (!isConsultationTransfer) { #endif if (OnSendCallProceeding(callProceedingPDU)) { if (fastStartState == FastStartDisabled) callProceeding.IncludeOptionalField(H225_CallProceeding_UUIE::e_fastConnectRefused); if (!WriteSignalPDU(callProceedingPDU)) return FALSE; } /** Here is a spot where we should wait in case of Call Intrusion for CIPL from other endpoints if (isCallIntrusion) return TRUE; */ // if the application indicates not to contine, then send a Q931 Release Complete PDU alertingPDU = new H323SignalPDU; alertingPDU->BuildAlerting(*this); if (nonCallConnection) { if (!WriteSignalPDU(*alertingPDU)) return FALSE; } else { /** If we have a case of incoming call intrusion we should not Clear the Call*/ { CallEndReason incomingCallEndReason = EndedByNoAccept; if (!OnIncomingCall(setupPDU, *alertingPDU, incomingCallEndReason) #ifdef H323_H450 && (!isCallIntrusion) #endif ) { ClearCall(incomingCallEndReason); PTRACE(1, "H225\tApplication not accepting calls"); return FALSE; } } // send Q931 Alerting PDU PTRACE(3, "H225\tIncoming call accepted"); } // Check for gatekeeper and do admission check if have one H323Gatekeeper * gatekeeper = endpoint.GetGatekeeper(); if (gatekeeper != NULL) { H225_ArrayOf_AliasAddress destExtraCallInfoArray; H323Gatekeeper::AdmissionResponse response; response.destExtraCallInfo = &destExtraCallInfoArray; if (!gatekeeper->AdmissionRequest(*this, response)) { PTRACE(1, "H225\tGatekeeper refused admission: " << (response.rejectReason == UINT_MAX ? PString("Transport error") : H225_AdmissionRejectReason(response.rejectReason).GetTagName())); switch (response.rejectReason) { case H225_AdmissionRejectReason::e_calledPartyNotRegistered : ClearCall(EndedByNoUser); break; case H225_AdmissionRejectReason::e_requestDenied : ClearCall(EndedByNoBandwidth); break; case H225_AdmissionRejectReason::e_invalidPermission : case H225_AdmissionRejectReason::e_securityDenial : ClearCall(EndedBySecurityDenial); break; case H225_AdmissionRejectReason::e_resourceUnavailable : ClearCall(EndedByRemoteBusy); break; default : ClearCall(EndedByGatekeeper); } return FALSE; } if (destExtraCallInfoArray.GetSize() > 0) destExtraCallInfo = H323GetAliasAddressString(destExtraCallInfoArray[0]); mustSendDRQ = TRUE; gatekeeperRouted = response.gatekeeperRouted; } #ifdef H323_H450 } #endif if (nonCallConnection) return TRUE; // See if remote endpoint wants to start fast if (fastStartState != FastStartDisabled && setup.HasOptionalField(H225_Setup_UUIE::e_fastStart) && localCapabilities.GetSize() > 0) { DecodeFastStartCaps(setup.m_fastStart); } // Check that if we are not doing Fast Connect that we have H.245 channel info if (fastStartState != FastStartResponse && setup.HasOptionalField(H225_Setup_UUIE::e_h245Address)) { if (!StartControlChannel(setup.m_h245Address)) return FALSE; } // Build the reply with the channels we are actually using connectPDU = new H323SignalPDU; connectPDU->BuildConnect(*this); #ifdef H323_H450 /** If Call Intrusion is allowed we must answer the call*/ if (IsCallIntrusion()) { AnsweringCall(AnswerCallDeferred); } else { if (!isConsultationTransfer) { #endif // call the application callback to determine if to answer the call or not connectionState = AwaitingLocalAnswer; AnsweringCall(OnAnswerCall(remotePartyName, setupPDU, *connectPDU)); #ifdef H323_H450 } else AnsweringCall(AnswerCallNow); } #endif return connectionState != ShuttingDownConnection; } void H323Connection::SetLocalPartyName(const PString & name) { localPartyName = name; if (!name.IsEmpty()) { localAliasNames.RemoveAll(); localAliasNames.SetSize(0); localAliasNames.AppendString(name); } } void H323Connection::SetRemotePartyInfo(const H323SignalPDU & pdu) { PString newNumber; if (pdu.GetQ931().GetCalledPartyNumber(newNumber)) remotePartyNumber = newNumber; PString newRemotePartyName = pdu.GetQ931().GetDisplayName(); if (!newRemotePartyName.IsEmpty()) remotePartyName = newRemotePartyName; else if (!remotePartyNumber.IsEmpty()) remotePartyName = remotePartyNumber; else remotePartyName = signallingChannel->GetRemoteAddress().GetHostName(); PTRACE(2, "H225\tSet remote party name: \"" << remotePartyName << '"'); } void H323Connection::SetRemoteApplication(const H225_EndpointType & pdu) { if (pdu.HasOptionalField(H225_EndpointType::e_vendor)) { remoteApplication = H323GetApplicationInfo(pdu.m_vendor); PTRACE(2, "H225\tSet remote application name: \"" << remoteApplication << '"'); } } PBoolean H323Connection::OnReceivedSignalSetupAck(const H323SignalPDU & /*setupackPDU*/) { OnInsufficientDigits(); return TRUE; } PBoolean H323Connection::OnReceivedSignalInformation(const H323SignalPDU & /*infoPDU*/) { return TRUE; } PBoolean H323Connection::OnReceivedCallProceeding(const H323SignalPDU & pdu) { if (pdu.m_h323_uu_pdu.m_h323_message_body.GetTag() != H225_H323_UU_PDU_h323_message_body::e_callProceeding) return FALSE; const H225_CallProceeding_UUIE & call = pdu.m_h323_uu_pdu.m_h323_message_body; SetRemoteVersions(call.m_protocolIdentifier); SetRemotePartyInfo(pdu); SetRemoteApplication(call.m_destinationInfo); #ifndef DISABLE_CALLAUTH if (!ReceiveAuthenticatorPDU(this,call, H225_H323_UU_PDU_h323_message_body::e_callProceeding)) { // don't do anything } #endif #ifdef H323_H460 ReceiveFeatureSet(this, H460_MessageType::e_callProceeding, call); #endif // Check for fastStart data and start fast /* MERA gatekeepers send fast start in call proceeding then decide to send a different one in either Alert,Progress or Connect and has assumed you have ignored the one in the CallProceeding.. Very Frustrating - S.H. */ if (!enableMERAHack && call.HasOptionalField(H225_CallProceeding_UUIE::e_fastStart)) HandleFastStartAcknowledge(call.m_fastStart); if (fastStartState == FastStartAcknowledged) { lastPDUWasH245inSETUP = FALSE; masterSlaveDeterminationProcedure->Stop(); capabilityExchangeProcedure->Stop(); } else { if (call.HasOptionalField(H225_CallProceeding_UUIE::e_h245Address)) return StartControlChannel(call.m_h245Address); } return TRUE; } PBoolean H323Connection::OnReceivedProgress(const H323SignalPDU & pdu) { if (pdu.m_h323_uu_pdu.m_h323_message_body.GetTag() != H225_H323_UU_PDU_h323_message_body::e_progress) return FALSE; const H225_Progress_UUIE & progress = pdu.m_h323_uu_pdu.m_h323_message_body; SetRemoteVersions(progress.m_protocolIdentifier); SetRemotePartyInfo(pdu); SetRemoteApplication(progress.m_destinationInfo); // Check for fastStart data and start fast if (progress.HasOptionalField(H225_Progress_UUIE::e_fastStart)) HandleFastStartAcknowledge(progress.m_fastStart); // Check that it has the H.245 channel connection info if (progress.HasOptionalField(H225_Progress_UUIE::e_h245Address)) return StartControlChannel(progress.m_h245Address); return TRUE; } PBoolean H323Connection::OnReceivedAlerting(const H323SignalPDU & pdu) { if (pdu.m_h323_uu_pdu.m_h323_message_body.GetTag() != H225_H323_UU_PDU_h323_message_body::e_alerting) return FALSE; const H225_Alerting_UUIE & alert = pdu.m_h323_uu_pdu.m_h323_message_body; SetRemoteVersions(alert.m_protocolIdentifier); SetRemotePartyInfo(pdu); SetRemoteApplication(alert.m_destinationInfo); #ifndef DISABLE_CALLAUTH if (!ReceiveAuthenticatorPDU(this,alert, H225_H323_UU_PDU_h323_message_body::e_alerting)){ // don't do anything } #endif #ifdef H323_H248 if (alert.HasOptionalField(H225_Alerting_UUIE::e_serviceControl)) OnReceiveServiceControlSessions(alert.m_serviceControl); #endif #ifdef H323_H460 ReceiveFeatureSet(this, H460_MessageType::e_alerting, alert); #endif // Check for fastStart data and start fast if (alert.HasOptionalField(H225_Alerting_UUIE::e_fastStart)) HandleFastStartAcknowledge(alert.m_fastStart); // Check that it has the H.245 channel connection info if (alert.HasOptionalField(H225_Alerting_UUIE::e_h245Address)) if (!StartControlChannel(alert.m_h245Address)) return FALSE; alertingTime = PTime(); if (nonCallConnection) return true; else return OnAlerting(pdu, remotePartyName); } PBoolean H323Connection::OnReceivedSignalConnect(const H323SignalPDU & pdu) { if (nonCallConnection) { connectedTime = PTime(); connectionState = EstablishedConnection; return TRUE; } if (connectionState == ShuttingDownConnection) return FALSE; connectionState = HasExecutedSignalConnect; if (pdu.m_h323_uu_pdu.m_h323_message_body.GetTag() != H225_H323_UU_PDU_h323_message_body::e_connect) return FALSE; const H225_Connect_UUIE & connect = pdu.m_h323_uu_pdu.m_h323_message_body; SetRemoteVersions(connect.m_protocolIdentifier); SetRemotePartyInfo(pdu); SetRemoteApplication(connect.m_destinationInfo); #ifndef DISABLE_CALLAUTH if (!ReceiveAuthenticatorPDU(this,connect, H225_H323_UU_PDU_h323_message_body::e_connect)) { // don't do anything } #endif #ifdef H323_H460 ReceiveFeatureSet(this, H460_MessageType::e_connect, connect); #endif if (!OnOutgoingCall(pdu)) { ClearCall(EndedByNoAccept); return FALSE; } #ifdef H323_H450 // Are we involved in a transfer with a non H.450.2 compatible transferred-to endpoint? if (h4502handler->GetState() == H4502Handler::e_ctAwaitSetupResponse && h4502handler->IsctTimerRunning()) { PTRACE(4, "H4502\tRemote Endpoint does not support H.450.2."); h4502handler->OnReceivedSetupReturnResult(); } #endif // have answer, so set timeout to interval for monitoring calls health signallingChannel->SetReadTimeout(MonitorCallStatusTime); // If we are already faststartacknowledged (early media) // there is no need to proceed any further if (fastStartState == FastStartAcknowledged) { PTRACE(4, "H225\tConnect Accepted: Early Media already negotiated."); return TRUE; } // Check for fastStart data and start fast if (connect.HasOptionalField(H225_Connect_UUIE::e_fastStart)) HandleFastStartAcknowledge(connect.m_fastStart); // Check that it has the H.245 channel connection info // ignore if we already have a Fast Start connection if (connect.HasOptionalField(H225_Connect_UUIE::e_h245Address) && fastStartState != FastStartAcknowledged) { if (!StartControlChannel(connect.m_h245Address)) return FALSE; } // If didn't get fast start channels accepted by remote then clear our // proposed channels so we can renegotiate if (fastStartState != FastStartAcknowledged) { fastStartState = FastStartDisabled; fastStartChannels.RemoveAll(); #ifdef P_STUN m_NATSockets.clear(); #endif } PTRACE(4, "H225\tFast Start " << (h245Tunneling ? "TRUE" : "FALSE") << " fastStartState " << fastStartState); // If we have a H.245 channel available, bring it up. We either have media // and this is just so user indications work, or we don't have media and // desperately need it! if (h245Tunneling || controlChannel != NULL) return OnStartHandleControlChannel(); // We have no tunnelling and not separate channel, but we really want one // so we will start one using a facility message PTRACE(2, "H225\tNo H245 address provided by remote, starting control channel"); if (!StartControlChannel()) return FALSE; H323SignalPDU want245PDU; H225_Facility_UUIE * fac = want245PDU.BuildFacility(*this, FALSE, H225_FacilityReason::e_startH245); fac->IncludeOptionalField(H225_Facility_UUIE::e_h245Address); controlChannel->SetUpTransportPDU(fac->m_h245Address, TRUE); return WriteSignalPDU(want245PDU); } PBoolean H323Connection::OnReceivedFacility(const H323SignalPDU & pdu) { if (pdu.m_h323_uu_pdu.m_h323_message_body.GetTag() == H225_H323_UU_PDU_h323_message_body::e_empty) return TRUE; if (pdu.m_h323_uu_pdu.m_h323_message_body.GetTag() != H225_H323_UU_PDU_h323_message_body::e_facility) return FALSE; const H225_Facility_UUIE & fac = pdu.m_h323_uu_pdu.m_h323_message_body; #ifndef DISABLE_CALLAUTH if (!ReceiveAuthenticatorPDU(this,fac, H225_H323_UU_PDU_h323_message_body::e_facility)) { // don't do anything } #endif #ifdef H323_H248 if (fac.HasOptionalField(H225_Facility_UUIE::e_serviceControl)) OnReceiveServiceControlSessions(fac.m_serviceControl); #endif #ifdef H323_H460 // Do not process H.245 Control PDU's if (!pdu.m_h323_uu_pdu.HasOptionalField(H225_H323_UU_PDU::e_h245Control)) ReceiveFeatureSet(this, H460_MessageType::e_facility, fac); #endif SetRemoteVersions(fac.m_protocolIdentifier); // Check for fastStart data and start fast if (fac.HasOptionalField(H225_Facility_UUIE::e_fastStart)) HandleFastStartAcknowledge(fac.m_fastStart); // Check that it has the H.245 channel connection info if (fac.HasOptionalField(H225_Facility_UUIE::e_h245Address)) { if (controlChannel != NULL && !controlChannel->IsOpen()) { // Fix race condition where both side want to open H.245 channel. we have // channel bit it is not open (ie we are listening) and the remote has // sent us an address to connect to. To resolve we compare the addresses. H225_TransportAddress myAddress; controlChannel->GetLocalAddress().SetPDU(myAddress); PPER_Stream myBuffer; myAddress.Encode(myBuffer); PPER_Stream otherBuffer; fac.m_h245Address.Encode(otherBuffer); if (myBuffer < otherBuffer || OnH245AddressConflict()) { PTRACE(2, "H225\tSimultaneous start of H.245 channel, connecting to remote."); controlChannel->CleanUpOnTermination(); delete controlChannel; controlChannel = NULL; } else { PTRACE(2, "H225\tSimultaneous start of H.245 channel, using local listener."); } } if (!StartControlChannel(fac.m_h245Address)) return FALSE; } if ((fac.m_reason.GetTag() != H225_FacilityReason::e_callForwarded) && (fac.m_reason.GetTag() != H225_FacilityReason::e_routeCallToGatekeeper) && (fac.m_reason.GetTag() != H225_FacilityReason::e_routeCallToMC)) return TRUE; PString address; if (fac.m_reason.GetTag() == H225_FacilityReason::e_routeCallToGatekeeper) { PIPSocket::Address add; H323TransportAddress(remotePartyAddress).GetIpAddress(add); address = add.AsString(); } if (fac.HasOptionalField(H225_Facility_UUIE::e_alternativeAliasAddress) && fac.m_alternativeAliasAddress.GetSize() > 0) address = H323GetAliasAddressString(fac.m_alternativeAliasAddress[0]); if (fac.HasOptionalField(H225_Facility_UUIE::e_alternativeAddress)) { if (!address) address += '@'; address += H323TransportAddress(fac.m_alternativeAddress); } if (endpoint.OnConnectionForwarded(*this, address, pdu)) { ClearCall(EndedByCallForwarded); return FALSE; } if (!endpoint.CanAutoCallForward()) return TRUE; if (!endpoint.ForwardConnection(*this, address, pdu)) return TRUE; // This connection is on the way out and a new one has the same token now // so change our token to make sure no accidents can happen clearing the // wrong call callToken += "-forwarded"; return FALSE; } PBoolean H323Connection::OnReceivedSignalNotify(const H323SignalPDU & pdu) { if (pdu.m_h323_uu_pdu.m_h323_message_body.GetTag() == H225_H323_UU_PDU_h323_message_body::e_notify) { const H225_Notify_UUIE & notify = pdu.m_h323_uu_pdu.m_h323_message_body; SetRemoteVersions(notify.m_protocolIdentifier); } return TRUE; } PBoolean H323Connection::OnReceivedSignalStatus(const H323SignalPDU & pdu) { if (pdu.m_h323_uu_pdu.m_h323_message_body.GetTag() == H225_H323_UU_PDU_h323_message_body::e_status) { const H225_Status_UUIE & status = pdu.m_h323_uu_pdu.m_h323_message_body; SetRemoteVersions(status.m_protocolIdentifier); } return TRUE; } PBoolean H323Connection::OnReceivedStatusEnquiry(const H323SignalPDU & pdu) { if (pdu.m_h323_uu_pdu.m_h323_message_body.GetTag() == H225_H323_UU_PDU_h323_message_body::e_statusInquiry) { const H225_StatusInquiry_UUIE & status = pdu.m_h323_uu_pdu.m_h323_message_body; SetRemoteVersions(status.m_protocolIdentifier); } H323SignalPDU reply; reply.BuildStatus(*this); return reply.Write(*signallingChannel,this); } void H323Connection::OnReceivedReleaseComplete(const H323SignalPDU & pdu) { if (!callEndTime.IsValid()) callEndTime = PTime(); endSessionReceived.Signal(); if (q931Cause == Q931::ErrorInCauseIE) q931Cause = pdu.GetQ931().GetCause(); const H225_ReleaseComplete_UUIE & rc = pdu.m_h323_uu_pdu.m_h323_message_body; switch (connectionState) { case EstablishedConnection : if (rc.m_reason.GetTag() == H225_ReleaseCompleteReason::e_facilityCallDeflection) ClearCall(EndedByCallForwarded); else ClearCall(EndedByRemoteUser); break; case AwaitingLocalAnswer : if (rc.m_reason.GetTag() == H225_ReleaseCompleteReason::e_facilityCallDeflection) ClearCall(EndedByCallForwarded); else ClearCall(EndedByCallerAbort); break; default : if (callEndReason == EndedByRefusal) callEndReason = NumCallEndReasons; #ifdef H323_H450 // Are we involved in a transfer with a non H.450.2 compatible transferred-to endpoint? if (h4502handler->GetState() == H4502Handler::e_ctAwaitSetupResponse && h4502handler->IsctTimerRunning()) { PTRACE(4, "H4502\tThe Remote Endpoint has rejected our transfer request and does not support H.450.2."); h4502handler->OnReceivedSetupReturnError(H4501_GeneralErrorList::e_notAvailable); } #endif #ifdef H323_H460 ReceiveFeatureSet(this, H460_MessageType::e_releaseComplete, rc); #endif if (pdu.m_h323_uu_pdu.m_h323_message_body.GetTag() != H225_H323_UU_PDU_h323_message_body::e_releaseComplete) ClearCall(EndedByRefusal); else { SetRemoteVersions(rc.m_protocolIdentifier); ClearCall(H323TranslateToCallEndReason(pdu.GetQ931().GetCause(), rc.m_reason)); } } } PBoolean H323Connection::OnIncomingCall(const H323SignalPDU & setupPDU, H323SignalPDU & alertingPDU, CallEndReason & reason) { return endpoint.OnIncomingCall(*this, setupPDU, alertingPDU, reason); } PBoolean H323Connection::OnIncomingCall(const H323SignalPDU & setupPDU, H323SignalPDU & alertingPDU) { return endpoint.OnIncomingCall(*this, setupPDU, alertingPDU); } PBoolean H323Connection::ForwardCall(const PString & forwardParty) { if (forwardParty.IsEmpty()) return FALSE; PString alias; H323TransportAddress address; PStringList Addresses; if (!endpoint.ResolveCallParty(forwardParty, Addresses)) return FALSE; if (!endpoint.ParsePartyName(Addresses[0], alias, address)) { PTRACE(2, "H323\tCould not parse forward party \"" << forwardParty << '"'); return FALSE; } H323SignalPDU redirectPDU; H225_Facility_UUIE * fac = redirectPDU.BuildFacility(*this, FALSE, H225_FacilityReason::e_callForwarded); if (!address) { fac->IncludeOptionalField(H225_Facility_UUIE::e_alternativeAddress); address.SetPDU(fac->m_alternativeAddress); } if (!alias) { fac->IncludeOptionalField(H225_Facility_UUIE::e_alternativeAliasAddress); fac->m_alternativeAliasAddress.SetSize(1); H323SetAliasAddress(alias, fac->m_alternativeAliasAddress[0]); } return WriteSignalPDU(redirectPDU); } PBoolean H323Connection::RouteCallToMC(const PString & forwardParty, const H225_ConferenceIdentifier & confID) { if (forwardParty.IsEmpty()) return FALSE; PString alias; H323TransportAddress address; PStringList Addresses; if (!endpoint.ResolveCallParty(forwardParty, Addresses)) return FALSE; if (!endpoint.ParsePartyName(Addresses[0], alias, address)) { PTRACE(2, "H323\tCould not parse forward party \"" << forwardParty << '"'); return FALSE; } H323SignalPDU redirectPDU; H225_Facility_UUIE * fac = redirectPDU.BuildFacility(*this, FALSE, H225_FacilityReason::e_routeCallToMC); if (!address) { fac->IncludeOptionalField(H225_Facility_UUIE::e_alternativeAddress); address.SetPDU(fac->m_alternativeAddress); } if (!alias) { fac->IncludeOptionalField(H225_Facility_UUIE::e_alternativeAliasAddress); fac->m_alternativeAliasAddress.SetSize(1); H323SetAliasAddress(alias, fac->m_alternativeAliasAddress[0]); } fac->IncludeOptionalField(H225_Facility_UUIE::e_conferenceID); fac->m_conferenceID = confID; return WriteSignalPDU(redirectPDU); } H323Connection::AnswerCallResponse H323Connection::OnAnswerCall(const PString & caller, const H323SignalPDU & setupPDU, H323SignalPDU & connectPDU) { return endpoint.OnAnswerCall(*this, caller, setupPDU, connectPDU); } void H323Connection::AnsweringCall(AnswerCallResponse response) { PTRACE(2, "H323\tAnswering call: " << response); if (!Lock()) return; switch (response) { default : // AnswerCallDeferred break; case AnswerCallDeferredWithMedia : if (!mediaWaitForConnect) { // create a new facility PDU if doing AnswerDeferredWithMedia H323SignalPDU want245PDU; H225_Progress_UUIE & prog = want245PDU.BuildProgress(*this); PBoolean sendPDU = TRUE; if (SendFastStartAcknowledge(prog.m_fastStart)) prog.IncludeOptionalField(H225_Progress_UUIE::e_fastStart); else { // See if aborted call if (connectionState == ShuttingDownConnection) break; // Do early H.245 start H225_Facility_UUIE & fac = *want245PDU.BuildFacility(*this, FALSE, H225_FacilityReason::e_startH245); earlyStart = TRUE; if (!h245Tunneling && (controlChannel == NULL)) { if (!StartControlChannel()) break; fac.IncludeOptionalField(H225_Facility_UUIE::e_h245Address); controlChannel->SetUpTransportPDU(fac.m_h245Address, TRUE); } else sendPDU = FALSE; } if (sendPDU) { HandleTunnelPDU(&want245PDU); WriteSignalPDU(want245PDU); } } break; case AnswerCallAlertWithMedia : if (alertingPDU != NULL && !mediaWaitForConnect) { H225_Alerting_UUIE & alerting = alertingPDU->m_h323_uu_pdu.m_h323_message_body; PBoolean sendPDU = TRUE; if (SendFastStartAcknowledge(alerting.m_fastStart)) alerting.IncludeOptionalField(H225_Alerting_UUIE::e_fastStart); else { alerting.IncludeOptionalField(H225_Alerting_UUIE::e_fastConnectRefused); // See if aborted call if (connectionState == ShuttingDownConnection) break; // Do early H.245 start earlyStart = TRUE; if (!h245Tunneling && (controlChannel == NULL)) { if (!StartControlChannel()) break; alerting.IncludeOptionalField(H225_Alerting_UUIE::e_h245Address); controlChannel->SetUpTransportPDU(alerting.m_h245Address, TRUE); } else sendPDU = FALSE; } if (sendPDU) { HandleTunnelPDU(alertingPDU); #ifdef H323_H450 h450dispatcher->AttachToAlerting(*alertingPDU); #endif WriteSignalPDU(*alertingPDU); alertingTime = PTime(); } break; } // else clause falls into AnswerCallPending case case AnswerCallPending : if (alertingPDU != NULL) { // send Q931 Alerting PDU PTRACE(3, "H225\tSending Alerting PDU"); HandleTunnelPDU(alertingPDU); #ifdef H323_H450 h450dispatcher->AttachToAlerting(*alertingPDU); #endif // commented out by CRS: no need to check for lack of fastStart channels // as this Alerting is not associated with media channel. And doing so // screws up deferred fastStart setup // //if (fastStartChannels.IsEmpty()) { // H225_Alerting_UUIE & alerting = alertingPDU->m_h323_uu_pdu.m_h323_message_body; // alerting.IncludeOptionalField(H225_Alerting_UUIE::e_fastConnectRefused); //} WriteSignalPDU(*alertingPDU); alertingTime = PTime(); } break; case AnswerCallDenied : // If response is denied, abort the call PTRACE(1, "H225\tApplication has declined to answer incoming call"); ClearCall(EndedByAnswerDenied); break; case AnswerCallDeniedByInvalidCID : // If response is denied, abort the call PTRACE(1, "H225\tApplication has refused to answer incoming call due to invalid conference ID"); ClearCall(EndedByInvalidConferenceID); break; case AnswerCallNowWithAlert : if (alertingPDU != NULL) { // send Q931 Alerting PDU PTRACE(3, "H225\tSending Alerting PDU prior to AnswerCall Now"); HandleTunnelPDU(alertingPDU); #ifdef H323_H450 h450dispatcher->AttachToAlerting(*alertingPDU); #endif WriteSignalPDU(*alertingPDU); alertingTime = PTime(); } // Now we progress with AnswerCallNow. case AnswerCallNow : if (connectPDU != NULL) { H225_Connect_UUIE & connect = connectPDU->m_h323_uu_pdu.m_h323_message_body; // If we have not already negotiated Fast Connect (early media) if (fastStartState != FastStartAcknowledged) { // Now ask the application to select which channels to start if (SendFastStartAcknowledge(connect.m_fastStart)) connect.IncludeOptionalField(H225_Connect_UUIE::e_fastStart); else connect.IncludeOptionalField(H225_Connect_UUIE::e_fastConnectRefused); } // See if aborted call if (connectionState == ShuttingDownConnection) break; // Set flag that we are up to CONNECT stage connectionState = HasExecutedSignalConnect; #ifdef H323_H450 h450dispatcher->AttachToConnect(*connectPDU); #endif if (h245Tunneling) { // If no channels selected (or never provided) do traditional H245 start if (fastStartState == FastStartDisabled) { h245TunnelTxPDU = connectPDU; // Piggy back H245 on this reply PBoolean ok = StartControlNegotiations(); h245TunnelTxPDU = NULL; if (!ok) break; } HandleTunnelPDU(connectPDU); } else { // Start separate H.245 channel if not tunneling. if (!StartControlChannel()) break; connect.IncludeOptionalField(H225_Connect_UUIE::e_h245Address); controlChannel->SetUpTransportPDU(connect.m_h245Address, TRUE); } connectedTime = PTime(); WriteSignalPDU(*connectPDU); // Send H323 Connect PDU delete connectPDU; connectPDU = NULL; delete alertingPDU; alertingPDU = NULL; } } InternalEstablishedConnectionCheck(); Unlock(); } H323Connection::CallEndReason H323Connection::SendSignalSetup(const PString & alias, const H323TransportAddress & address) { // Start the call, first state is asking gatekeeper connectionState = AwaitingGatekeeperAdmission; // Indicate the direction of call. if (alias.IsEmpty()) remotePartyName = remotePartyAddress = address; else { remotePartyName = alias; remoteAliasNames.AppendString(alias); remotePartyAddress = alias + '@' + address; } // Start building the setup PDU to get various ID's H323SignalPDU setupPDU; H225_Setup_UUIE & setup = setupPDU.BuildSetup(*this, address); #ifdef H323_H450 h450dispatcher->AttachToSetup(setupPDU); #endif // Save the identifiers generated by BuildSetup setupPDU.GetQ931().GetCalledPartyNumber(remotePartyNumber); H323TransportAddress gatekeeperRoute = address; // Check for gatekeeper and do admission check if have one H323Gatekeeper * gatekeeper = endpoint.GetGatekeeper(); H225_ArrayOf_AliasAddress newAliasAddresses; if (gatekeeper != NULL) { H323Gatekeeper::AdmissionResponse response; response.transportAddress = &gatekeeperRoute; response.aliasAddresses = &newAliasAddresses; if (!gkAccessTokenOID) response.accessTokenData = &gkAccessTokenData; while (!gatekeeper->AdmissionRequest(*this, response, alias.IsEmpty())) { PTRACE(1, "H225\tGatekeeper refused admission: " << (response.rejectReason == UINT_MAX ? PString("Transport error") : H225_AdmissionRejectReason(response.rejectReason).GetTagName())); #ifdef H323_H450 h4502handler->onReceivedAdmissionReject(H4501_GeneralErrorList::e_notAvailable); #endif switch (response.rejectReason) { case H225_AdmissionRejectReason::e_calledPartyNotRegistered : return EndedByNoUser; case H225_AdmissionRejectReason::e_requestDenied : return EndedByNoBandwidth; case H225_AdmissionRejectReason::e_invalidPermission : case H225_AdmissionRejectReason::e_securityDenial : return EndedBySecurityDenial; case H225_AdmissionRejectReason::e_resourceUnavailable : return EndedByRemoteBusy; case H225_AdmissionRejectReason::e_incompleteAddress : if (OnInsufficientDigits()) break; // Then default case default : return EndedByGatekeeper; } PString lastRemotePartyName = remotePartyName; while (lastRemotePartyName == remotePartyName) { Unlock(); // Release the mutex as can deadlock trying to clear call during connect. digitsWaitFlag.Wait(); if (!Lock()) // Lock while checking for shutting down. return EndedByCallerAbort; } } mustSendDRQ = TRUE; if (response.gatekeeperRouted) { setup.IncludeOptionalField(H225_Setup_UUIE::e_endpointIdentifier); setup.m_endpointIdentifier = gatekeeper->GetEndpointIdentifier(); gatekeeperRouted = TRUE; } } // Update the field e_destinationAddress in the SETUP PDU to reflect the new // alias received in the ACF (m_destinationInfo). if (newAliasAddresses.GetSize() > 0) { setup.IncludeOptionalField(H225_Setup_UUIE::e_destinationAddress); setup.m_destinationAddress = newAliasAddresses; // Update the Q.931 Information Element (if is an E.164 address) PString e164 = H323GetAliasAddressE164(newAliasAddresses); if (!e164) remotePartyNumber = e164; } if (addAccessTokenToSetup && !gkAccessTokenOID && !gkAccessTokenData.IsEmpty()) { PString oid1, oid2; PINDEX comma = gkAccessTokenOID.Find(','); if (comma == P_MAX_INDEX) oid1 = oid2 = gkAccessTokenOID; else { oid1 = gkAccessTokenOID.Left(comma); oid2 = gkAccessTokenOID.Mid(comma+1); } setup.IncludeOptionalField(H225_Setup_UUIE::e_tokens); PINDEX last = setup.m_tokens.GetSize(); setup.m_tokens.SetSize(last+1); setup.m_tokens[last].m_tokenOID = oid1; setup.m_tokens[last].IncludeOptionalField(H235_ClearToken::e_nonStandard); setup.m_tokens[last].m_nonStandard.m_nonStandardIdentifier = oid2; setup.m_tokens[last].m_nonStandard.m_data = gkAccessTokenData; } if (!signallingChannel->SetRemoteAddress(gatekeeperRoute)) { PTRACE(1, "H225\tInvalid " << (gatekeeperRoute != address ? "gatekeeper" : "user") << " supplied address: \"" << gatekeeperRoute << '"'); connectionState = AwaitingTransportConnect; return EndedByConnectFail; } // Do the transport connect connectionState = AwaitingTransportConnect; // Release the mutex as can deadlock trying to clear call during connect. Unlock(); signallingChannel->SetWriteTimeout(100); PBoolean connectFailed = !signallingChannel->Connect(); // Lock while checking for shutting down. if (!Lock()) return EndedByCallerAbort; // See if transport connect failed, abort if so. if (connectFailed) { connectionState = NoConnectionActive; switch (signallingChannel->GetErrorNumber()) { case ENETUNREACH : return EndedByUnreachable; case ECONNREFUSED : return EndedByNoEndPoint; case ETIMEDOUT : return EndedByHostOffline; } return EndedByConnectFail; } PTRACE(3, "H225\tSending Setup PDU"); connectionState = AwaitingSignalConnect; // Add CryptoTokens and H460 features if available (need to do this after the ARQ/ACF) #ifndef DISABLE_CALLAUTH setupPDU.InsertCryptoTokensSetup(*this,setup); #endif #ifdef H323_H460 if (!disableH460) setupPDU.InsertH460Setup(*this,setup); #endif // Put in all the signalling addresses for link setup.IncludeOptionalField(H225_Setup_UUIE::e_sourceCallSignalAddress); signallingChannel->SetUpTransportPDU(setup.m_sourceCallSignalAddress, TRUE, this); if (!setup.HasOptionalField(H225_Setup_UUIE::e_destCallSignalAddress)) { setup.IncludeOptionalField(H225_Setup_UUIE::e_destCallSignalAddress); signallingChannel->SetUpTransportPDU(setup.m_destCallSignalAddress, FALSE, this); } // If a standard call do Fast Start (if required) if (setup.m_conferenceGoal.GetTag() == H225_Setup_UUIE_conferenceGoal::e_create) { // Get the local capabilities before fast start is handled OnSetLocalCapabilities(); // Ask the application what channels to open PTRACE(3, "H225\tCheck for Fast start by local endpoint"); fastStartChannels.RemoveAll(); OnSelectLogicalChannels(); // If application called OpenLogicalChannel, put in the fastStart field if (!fastStartChannels.IsEmpty()) { PTRACE(3, "H225\tFast start begun by local endpoint"); for (PINDEX i = 0; i < fastStartChannels.GetSize(); i++) BuildFastStartList(fastStartChannels[i], setup.m_fastStart, H323Channel::IsReceiver); if (setup.m_fastStart.GetSize() > 0) setup.IncludeOptionalField(H225_Setup_UUIE::e_fastStart); } // Search the capability set and see if we have video capability for (PINDEX i = 0; i < localCapabilities.GetSize(); i++) { switch (localCapabilities[i].GetMainType()) { case H323Capability::e_Audio : case H323Capability::e_UserInput : break; default : // Is video or other data (eg T.120) setupPDU.GetQ931().SetBearerCapabilities(Q931::TransferUnrestrictedDigital, 6); i = localCapabilities.GetSize(); // Break out of the for loop break; } } } if (!OnSendSignalSetup(setupPDU)) return EndedByNoAccept; setupPDU.GetQ931().GetCalledPartyNumber(remotePartyNumber); //fastStartState = FastStartDisabled; PBoolean set_lastPDUWasH245inSETUP = FALSE; if (h245Tunneling && doH245inSETUP) { h245TunnelTxPDU = &setupPDU; // Try and start the master/slave and capability exchange through the tunnel // Note: this used to be disallowed but is now allowed as of H323v4 PBoolean ok = StartControlNegotiations(); h245TunnelTxPDU = NULL; if (!ok) return EndedByTransportFail; if (setup.m_fastStart.GetSize() > 0) { // Now if fast start as well need to put this in setup specific field // and not the generic H.245 tunneling field setup.IncludeOptionalField(H225_Setup_UUIE::e_parallelH245Control); setup.m_parallelH245Control = setupPDU.m_h323_uu_pdu.m_h245Control; setupPDU.m_h323_uu_pdu.RemoveOptionalField(H225_H323_UU_PDU::e_h245Control); set_lastPDUWasH245inSETUP = TRUE; } } // Send the initial PDU setupTime = PTime(); if (!WriteSignalPDU(setupPDU)) return EndedByTransportFail; // WriteSignalPDU always resets lastPDUWasH245inSETUP. // So set it here if required if (set_lastPDUWasH245inSETUP) lastPDUWasH245inSETUP = TRUE; // Set timeout for remote party to answer the call signallingChannel->SetReadTimeout(endpoint.GetSignallingChannelCallTimeout()); return NumCallEndReasons; } void H323Connection::NatDetection(const PIPSocket::Address & srcAddress, const PIPSocket::Address & sigAddress) { // if the peer address is a public address, but the advertised source address is a private address // then there is a good chance the remote endpoint is behind a NAT but does not know it. // in this case, we active the NAT mode and wait for incoming RTP to provide the media address before // sending anything to the remote endpoint if ((!sigAddress.IsRFC1918() && srcAddress.IsRFC1918()) || // Internet Address ((sigAddress.IsRFC1918() && srcAddress.IsRFC1918()) && (sigAddress != srcAddress))) // LAN on another LAN { PTRACE(3, "H225\tSource signal address " << srcAddress << " and TCP peer address " << sigAddress << " indicate remote endpoint is behind NAT"); if (OnNatDetected()) remoteIsNAT = true; } } PBoolean H323Connection::OnNatDetected() { #ifdef H323_H46018 if (m_H46019enabled) return false; #endif return true; } #ifdef P_STUN PNatMethod * H323Connection::GetPreferedNatMethod(const PIPSocket::Address & ip) const { return endpoint.GetPreferedNatMethod(ip); } PUDPSocket * H323Connection::GetNatSocket(unsigned session, PBoolean rtp) { std::map::const_iterator sockets_iter = m_NATSockets.find(session); if (sockets_iter != m_NATSockets.end()) { NAT_Sockets sockets = sockets_iter->second; if (rtp) return sockets.rtp; else return sockets.rtcp; } return NULL; } void H323Connection::SetRTPNAT(unsigned sessionid, PUDPSocket * _rtp, PUDPSocket * _rtcp) { PWaitAndSignal m(NATSocketMutex); PTRACE(4,"H323\tRTP NAT Connection Callback! Session: " << sessionid); NAT_Sockets sockets; sockets.rtp = _rtp; sockets.rtcp = _rtcp; sockets.isActive = false; m_NATSockets.insert(pair(sessionid, sockets)); } void H323Connection::SetNATChannelActive(unsigned sessionid) { std::map::iterator sockets_iter = m_NATSockets.find(sessionid); if (sockets_iter != m_NATSockets.end()) { NAT_Sockets socket = sockets_iter->second; socket.isActive = true; } } PBoolean H323Connection::IsNATMethodActive(unsigned sessionid) { for (std::map::const_iterator r = m_NATSockets.begin(); r != m_NATSockets.end(); ++r) { NAT_Sockets socket = r->second; if (!socket.isActive) return false; } return true; } #endif void H323Connection::SetEndpointTypeInfo(H225_EndpointType & info) const { return endpoint.SetEndpointTypeInfo(info); } PBoolean H323Connection::OnSendSignalSetup(H323SignalPDU & /*setupPDU*/) { return TRUE; } PBoolean H323Connection::OnSendCallProceeding(H323SignalPDU & /*callProceedingPDU*/) { return TRUE; } PBoolean H323Connection::OnSendReleaseComplete(H323SignalPDU & /*releaseCompletePDU*/) { return TRUE; } PBoolean H323Connection::OnAlerting(const H323SignalPDU & alertingPDU, const PString & username) { return endpoint.OnAlerting(*this, alertingPDU, username); } PBoolean H323Connection::OnInsufficientDigits() { return FALSE; } void H323Connection::SendMoreDigits(const PString & digits) { remotePartyNumber += digits; remotePartyName = remotePartyNumber; if (connectionState == AwaitingGatekeeperAdmission) digitsWaitFlag.Signal(); else { H323SignalPDU infoPDU; infoPDU.BuildInformation(*this); infoPDU.GetQ931().SetCalledPartyNumber(digits); if (!WriteSignalPDU(infoPDU)) ClearCall(EndedByTransportFail); } } PBoolean H323Connection::OnOutgoingCall(const H323SignalPDU & connectPDU) { return endpoint.OnOutgoingCall(*this, connectPDU); } PBoolean H323Connection::SendFastStartAcknowledge(H225_ArrayOf_PASN_OctetString & array) { PINDEX i; // See if we have already added the fast start OLC's if (array.GetSize() > 0) return TRUE; // See if we need to select our fast start channels if (fastStartState == FastStartResponse) OnSelectLogicalChannels(); // Remove any channels that were not started by OnSelectLogicalChannels(), // those that were started are put into the logical channel dictionary for (i = 0; i < fastStartChannels.GetSize(); i++) { if (fastStartChannels[i].IsRunning()) logicalChannels->Add(fastStartChannels[i]); else fastStartChannels.RemoveAt(i--); } // None left, so didn't open any channels fast if (fastStartChannels.IsEmpty()) { fastStartState = FastStartDisabled; return FALSE; } // The channels we just transferred to the logical channels dictionary // should not be deleted via this structure now. fastStartChannels.DisallowDeleteObjects(); PTRACE(3, "H225\tAccepting fastStart for " << fastStartChannels.GetSize() << " channels"); for (i = 0; i < fastStartChannels.GetSize(); i++) BuildFastStartList(fastStartChannels[i], array, H323Channel::IsTransmitter); // Have moved open channels to logicalChannels structure, remove all others. fastStartChannels.RemoveAll(); // Last minute check to see that the remote has not decided // to send slow connect while we are doing fast! if (fastStartState == FastStartDisabled) return FALSE; // Set flag so internal establishment check does not require H.245 fastStartState = FastStartAcknowledged; endSessionNeeded = FALSE; return TRUE; } PBoolean H323Connection::HandleFastStartAcknowledge(const H225_ArrayOf_PASN_OctetString & array) { if (fastStartChannels.IsEmpty()) { PTRACE(3, "H225\tFast start response with no channels to open"); return FALSE; } // record the time at which media was opened reverseMediaOpenTime = PTime(); PTRACE(3, "H225\tFast start accepted by remote endpoint"); PINDEX i; // Go through provided list of structures, if can decode it and match it up // with a channel we requested AND it has all the information needed in the // m_multiplexParameters, then we can start the channel. for (i = 0; i < array.GetSize(); i++) { H245_OpenLogicalChannel open; if (array[i].DecodeSubType(open)) { PTRACE(4, "H225\tFast start open:\n " << setprecision(2) << open); PBoolean reverse = open.HasOptionalField(H245_OpenLogicalChannel::e_reverseLogicalChannelParameters); const H245_DataType & dataType = reverse ? open.m_reverseLogicalChannelParameters.m_dataType : open.m_forwardLogicalChannelParameters.m_dataType; H323Capability * replyCapability = localCapabilities.FindCapability(dataType); if (replyCapability != NULL) { for (PINDEX ch = 0; ch < fastStartChannels.GetSize(); ch++) { H323Channel & channelToStart = fastStartChannels[ch]; H323Channel::Directions dir = channelToStart.GetDirection(); if ((dir == H323Channel::IsReceiver) == reverse && channelToStart.GetCapability() == *replyCapability) { unsigned error = 1000; if (channelToStart.OnReceivedPDU(open, error)) { H323Capability * channelCapability; if (dir == H323Channel::IsReceiver) channelCapability = replyCapability; else { // For transmitter, need to fake a capability into the remote table channelCapability = remoteCapabilities.FindCapability(channelToStart.GetCapability()); if (channelCapability == NULL) { channelCapability = remoteCapabilities.Copy(channelToStart.GetCapability()); remoteCapabilities.SetCapability(0, channelCapability->GetDefaultSessionID()-1, channelCapability); } } // Must use the actual capability instance from the // localCapability or remoteCapability structures. if (OnCreateLogicalChannel(*channelCapability, dir, error)) { if (channelToStart.SetInitialBandwidth()) { if (open.HasOptionalField(H245_OpenLogicalChannel::e_genericInformation)) OnReceiveOLCGenericInformation(channelToStart.GetSessionID(),open.m_genericInformation,true); channelToStart.Start(); break; } else PTRACE(2, "H225\tFast start channel open fail: insufficent bandwidth"); } else PTRACE(2, "H225\tFast start channel open error: " << error); } else PTRACE(2, "H225\tFast start capability error: " << error); } } } } else { PTRACE(1, "H225\tInvalid fast start PDU decode:\n " << setprecision(2) << open); } } // Remove any channels that were not started by above, those that were // started are put into the logical channel dictionary for (i = 0; i < fastStartChannels.GetSize(); i++) { if (fastStartChannels[i].IsRunning()) logicalChannels->Add(fastStartChannels[i]); else fastStartChannels.RemoveAt(i--); } // The channels we just transferred to the logical channels dictionary // should not be deleted via this structure now. fastStartChannels.DisallowDeleteObjects(); PTRACE(2, "H225\tFast starting " << fastStartChannels.GetSize() << " channels"); if (fastStartChannels.IsEmpty()) return FALSE; // Have moved open channels to logicalChannels structure, remove them now. fastStartChannels.RemoveAll(); fastStartState = FastStartAcknowledged; endSessionNeeded = FALSE; return TRUE; } PBoolean H323Connection::StartControlChannel() { // Already have the H245 channel up. if (controlChannel != NULL) return TRUE; controlChannel = signallingChannel->CreateControlChannel(*this); if (controlChannel == NULL) { ClearCall(EndedByTransportFail); return FALSE; } controlChannel->StartControlChannel(*this); return TRUE; } PBoolean H323Connection::StartControlChannel(const H225_TransportAddress & h245Address) { // Check that it is an IP address, all we support at the moment if (h245Address.GetTag() != H225_TransportAddress::e_ipAddress #if P_HAS_IPV6 && h245Address.GetTag() != H225_TransportAddress::e_ip6Address #endif ) { PTRACE(1, "H225\tConnect of H245 failed: Unsupported transport"); return FALSE; } // Already have the H245 channel up. if (controlChannel != NULL) return TRUE; unsigned m_version = 4; if (h245Address.GetTag() == H225_TransportAddress::e_ip6Address) m_version = 6; controlChannel = new H323TransportTCP(endpoint, PIPSocket::Address::GetAny(m_version)); if (!controlChannel->SetRemoteAddress(h245Address)) { PTRACE(1, "H225\tCould not extract H245 address"); delete controlChannel; controlChannel = NULL; return FALSE; } if (!controlChannel->Connect()) { PTRACE(1, "H225\tConnect of H245 failed: " << controlChannel->GetErrorText()); delete controlChannel; controlChannel = NULL; return FALSE; } controlChannel->StartControlChannel(*this); return TRUE; } PBoolean H323Connection::OnUnknownSignalPDU(const H323SignalPDU & PTRACE_PARAM(pdu)) { PTRACE(2, "H225\tUnknown signalling PDU: " << pdu); return TRUE; } PBoolean H323Connection::WriteControlPDU(const H323ControlPDU & pdu) { PWaitAndSignal m(controlMutex); PPER_Stream strm; pdu.Encode(strm); strm.CompleteEncoding(); H323TraceDumpPDU("H245", TRUE, strm, pdu, pdu, 0, (controlChannel == NULL) ? H323TransportAddress("") : controlChannel->GetLocalAddress(), (controlChannel == NULL) ? H323TransportAddress("") : controlChannel->GetRemoteAddress() ); if (!h245Tunneling) { if (controlChannel == NULL) { PTRACE(1, "H245\tWrite PDU fail: no control channel."); return FALSE; } if (controlChannel->IsOpen() && controlChannel->WritePDU(strm)) return TRUE; PTRACE(1, "H245\tWrite PDU fail: " << controlChannel->GetErrorText(PChannel::LastWriteError)); return HandleControlChannelFailure(); } // If have a pending signalling PDU, use it rather than separate write H323SignalPDU localTunnelPDU; H323SignalPDU * tunnelPDU; if (h245TunnelTxPDU != NULL) tunnelPDU = h245TunnelTxPDU; else { localTunnelPDU.BuildFacility(*this, TRUE); tunnelPDU = &localTunnelPDU; } tunnelPDU->m_h323_uu_pdu.IncludeOptionalField(H225_H323_UU_PDU::e_h245Control); PINDEX last = tunnelPDU->m_h323_uu_pdu.m_h245Control.GetSize(); tunnelPDU->m_h323_uu_pdu.m_h245Control.SetSize(last+1); tunnelPDU->m_h323_uu_pdu.m_h245Control[last] = strm; if (h245TunnelTxPDU != NULL) return TRUE; return WriteSignalPDU(localTunnelPDU); } PBoolean H323Connection::StartControlNegotiations(PBoolean renegotiate) { PTRACE(2, "H245\tStart control negotiations"); if(renegotiate) // makes reopening of media channels possible connectionState = HasExecutedSignalConnect; // Begin the capability exchange procedure if (!capabilityExchangeProcedure->Start(renegotiate)) { PTRACE(1, "H245\tStart of Capability Exchange failed"); return FALSE; } // Begin the Master/Slave determination procedure if (!masterSlaveDeterminationProcedure->Start(renegotiate)) { PTRACE(1, "H245\tStart of Master/Slave determination failed"); return FALSE; } endSessionNeeded = TRUE; return TRUE; } PBoolean H323Connection::OnStartHandleControlChannel() { if (fastStartState == FastStartAcknowledged) return true; if (controlChannel == NULL) return StartControlNegotiations(); #ifndef H323_H46018 else { PTRACE(2, "H245\tHandle control channel"); return StartHandleControlChannel(); } #else if (!m_H46019enabled) { PTRACE(2, "H245\tHandle control channel"); return StartHandleControlChannel(); } // according to H.460.18 cl.11 we have to send a generic Indication on the opening of a // H.245 control channel. Details are specified in H.460.18 cl.16 // This must be the first PDU otherwise gatekeeper/proxy will close the channel. PTRACE(2, "H46018\tStarted control channel"); if (endpoint.H46018IsEnabled() && !m_h245Connect) { H323ControlPDU pdu; H245_GenericMessage & cap = pdu.Build(H245_IndicationMessage::e_genericIndication); H245_CapabilityIdentifier & id = cap.m_messageIdentifier; id.SetTag(H245_CapabilityIdentifier::e_standard); PASN_ObjectId & gid = id; gid.SetValue(H46018OID); cap.IncludeOptionalField(H245_GenericMessage::e_subMessageIdentifier); PASN_Integer & sub = cap.m_subMessageIdentifier; sub = 1; cap.IncludeOptionalField(H245_GenericMessage::e_messageContent); H245_ArrayOf_GenericParameter & msg = cap.m_messageContent; // callIdentifer H245_GenericParameter call; H245_ParameterIdentifier & idx = call.m_parameterIdentifier; idx.SetTag(H245_ParameterIdentifier::e_standard); PASN_Integer & m = idx; m =1; H245_ParameterValue & conx = call.m_parameterValue; conx.SetTag(H245_ParameterValue::e_octetString); PASN_OctetString & raw = conx; raw.SetValue(callIdentifier); msg.SetSize(1); msg[0] = call; // Is receiver if (m_H46019CallReceiver) { H245_GenericParameter answer; H245_ParameterIdentifier & an = answer.m_parameterIdentifier; an.SetTag(H245_ParameterIdentifier::e_standard); PASN_Integer & n = an; n =2; H245_ParameterValue & aw = answer.m_parameterValue; aw.SetTag(H245_ParameterValue::e_logical); msg.SetSize(2); msg[1] = answer; } PTRACE(4,"H46018\tSending H.245 Control PDU " << pdu); if (!WriteControlPDU(pdu)) return false; m_h245Connect = true; } return StartHandleControlChannel(); #endif } PBoolean H323Connection::StartHandleControlChannel() { // If have started separate H.245 channel then don't tunnel any more h245Tunneling = FALSE; // Start the TCS and MSD operations on new H.245 channel. if (!StartControlNegotiations()) return FALSE; // Disable the signalling channels timeout for monitoring call status and // start up one in this thread instead. Then the Q.931 channel can be closed // without affecting the call. signallingChannel->SetReadTimeout(PMaxTimeInterval); controlChannel->SetReadTimeout(MonitorCallStatusTime); return TRUE; } void H323Connection::EndHandleControlChannel() { // If we are the only link to the far end or if we have already sent our // endSession command then indicate that we have received endSession even // if we hadn't, because we are now never going to get one so there is no // point in having CleanUpOnCallEnd wait. if (signallingChannel == NULL || endSessionSent == TRUE) endSessionReceived.Signal(); } void H323Connection::HandleControlChannel() { if (!OnStartHandleControlChannel()) return; PBoolean ok = TRUE; while (ok) { MonitorCallStatus(); PPER_Stream strm; PBoolean readStatus = controlChannel->ReadPDU(strm); ok = HandleReceivedControlPDU(readStatus, strm); } EndHandleControlChannel(); PTRACE(2, "H245\tControl channel closed."); } PBoolean H323Connection::HandleReceivedControlPDU(PBoolean readStatus, PPER_Stream & strm) { PBoolean ok = FALSE; if (readStatus) { // Lock while checking for shutting down. if (Lock()) { // Process the received PDU PTRACE(4, "H245\tReceived TPKT: " << strm); ok = HandleControlData(strm); Unlock(); // Unlock connection } else ok = InternalEndSessionCheck(strm); } else if (controlChannel->GetErrorCode() == PChannel::Timeout) { ok = TRUE; } else { PTRACE(1, "H245\tRead error: " << controlChannel->GetErrorText(PChannel::LastReadError) << " endSessionSent=" << endSessionSent); // If the connection is already shutting down then don't overwrite the // call end reason. This could happen if the remote end point misbehaves // and simply closes the H.245 TCP connection rather than sending an // endSession. if(endSessionSent == FALSE) ClearCall(EndedByTransportFail); else PTRACE(1, "H245\tendSession already sent assuming H245 connection closed by remote side"); ok = FALSE; } return ok; } PBoolean H323Connection::InternalEndSessionCheck(PPER_Stream & strm) { H323ControlPDU pdu; if (!pdu.Decode(strm)) { PTRACE(1, "H245\tInvalid PDU decode:\n " << setprecision(2) << pdu); return FALSE; } PTRACE(3, "H245\tChecking for end session on PDU: " << pdu.GetTagName() << ' ' << ((PASN_Choice &)pdu.GetObject()).GetTagName()); if (pdu.GetTag() != H245_MultimediaSystemControlMessage::e_command) return TRUE; H245_CommandMessage & command = pdu; if (command.GetTag() == H245_CommandMessage::e_endSessionCommand) endSessionReceived.Signal(); return FALSE; } PBoolean H323Connection::HandleControlData(PPER_Stream & strm) { while (!strm.IsAtEnd()) { H323ControlPDU pdu; if (!pdu.Decode(strm)) { PTRACE(1, "H245\tInvalid PDU decode!" "\nRaw PDU:\n" << hex << setfill('0') << setprecision(2) << strm << dec << setfill(' ') << "\nPartial PDU:\n " << setprecision(2) << pdu); return TRUE; } H323TraceDumpPDU("H245", FALSE, strm, pdu, pdu, 0, (controlChannel == NULL) ? H323TransportAddress("") : controlChannel->GetLocalAddress(), (controlChannel == NULL) ? H323TransportAddress("") : controlChannel->GetRemoteAddress() ); if (!HandleControlPDU(pdu)) return FALSE; InternalEstablishedConnectionCheck(); strm.ByteAlign(); } return TRUE; } PBoolean H323Connection::HandleControlPDU(const H323ControlPDU & pdu) { switch (pdu.GetTag()) { case H245_MultimediaSystemControlMessage::e_request : return OnH245Request(pdu); case H245_MultimediaSystemControlMessage::e_response : return OnH245Response(pdu); case H245_MultimediaSystemControlMessage::e_command : return OnH245Command(pdu); case H245_MultimediaSystemControlMessage::e_indication : return OnH245Indication(pdu); } return OnUnknownControlPDU(pdu); } PBoolean H323Connection::OnUnknownControlPDU(const H323ControlPDU & pdu) { PTRACE(2, "H245\tUnknown Control PDU: " << pdu); H323ControlPDU reply; reply.BuildFunctionNotUnderstood(pdu); return WriteControlPDU(reply); } PBoolean H323Connection::OnH245Request(const H323ControlPDU & pdu) { const H245_RequestMessage & request = pdu; switch (request.GetTag()) { case H245_RequestMessage::e_masterSlaveDetermination : if (fastStartState == FastStartResponse) { PTRACE(4,"H245\tIgnoring masterSlaveDetermination, already doing Fast Connect"); return TRUE; } return masterSlaveDeterminationProcedure->HandleIncoming(request); case H245_RequestMessage::e_terminalCapabilitySet : { if (fastStartState == FastStartResponse) { PTRACE(4,"H245\tIgnoring TerminalCapabilitySet, already doing Fast Connect"); return TRUE; } const H245_TerminalCapabilitySet & tcs = request; if (tcs.m_protocolIdentifier.GetSize() >= 6) { h245version = tcs.m_protocolIdentifier[5]; h245versionSet = TRUE; PTRACE(3, "H245\tSet protocol version to " << h245version); } return capabilityExchangeProcedure->HandleIncoming(tcs); } case H245_RequestMessage::e_openLogicalChannel : return logicalChannels->HandleOpen(request); case H245_RequestMessage::e_closeLogicalChannel : return logicalChannels->HandleClose(request); case H245_RequestMessage::e_requestChannelClose : return logicalChannels->HandleRequestClose(request); case H245_RequestMessage::e_requestMode : return requestModeProcedure->HandleRequest(request); case H245_RequestMessage::e_roundTripDelayRequest : return roundTripDelayProcedure->HandleRequest(request); case H245_RequestMessage::e_conferenceRequest : if (OnHandleConferenceRequest(request)) return TRUE; break; case H245_RequestMessage::e_genericRequest : if (OnHandleH245GenericMessage(h245request,request)) return TRUE; break; } return OnUnknownControlPDU(pdu); } PBoolean H323Connection::OnH245Response(const H323ControlPDU & pdu) { const H245_ResponseMessage & response = pdu; switch (response.GetTag()) { case H245_ResponseMessage::e_masterSlaveDeterminationAck : return masterSlaveDeterminationProcedure->HandleAck(response); case H245_ResponseMessage::e_masterSlaveDeterminationReject : return masterSlaveDeterminationProcedure->HandleReject(response); case H245_ResponseMessage::e_terminalCapabilitySetAck : return capabilityExchangeProcedure->HandleAck(response); case H245_ResponseMessage::e_terminalCapabilitySetReject : return capabilityExchangeProcedure->HandleReject(response); case H245_ResponseMessage::e_openLogicalChannelAck : return logicalChannels->HandleOpenAck(response); case H245_ResponseMessage::e_openLogicalChannelReject : return logicalChannels->HandleReject(response); case H245_ResponseMessage::e_closeLogicalChannelAck : return logicalChannels->HandleCloseAck(response); case H245_ResponseMessage::e_requestChannelCloseAck : return logicalChannels->HandleRequestCloseAck(response); case H245_ResponseMessage::e_requestChannelCloseReject : return logicalChannels->HandleRequestCloseReject(response); case H245_ResponseMessage::e_requestModeAck : return requestModeProcedure->HandleAck(response); case H245_ResponseMessage::e_requestModeReject : return requestModeProcedure->HandleReject(response); case H245_ResponseMessage::e_roundTripDelayResponse : return roundTripDelayProcedure->HandleResponse(response); case H245_ResponseMessage::e_conferenceResponse : if (OnHandleConferenceResponse(response)) return TRUE; break; case H245_ResponseMessage::e_genericResponse : if (OnHandleH245GenericMessage(h245response,response)) return TRUE; break; } return OnUnknownControlPDU(pdu); } PBoolean H323Connection::OnH245Command(const H323ControlPDU & pdu) { const H245_CommandMessage & command = pdu; switch (command.GetTag()) { case H245_CommandMessage::e_sendTerminalCapabilitySet : return OnH245_SendTerminalCapabilitySet(command); case H245_CommandMessage::e_flowControlCommand : return OnH245_FlowControlCommand(command); case H245_CommandMessage::e_miscellaneousCommand : return OnH245_MiscellaneousCommand(command); case H245_CommandMessage::e_endSessionCommand : endSessionNeeded = TRUE; endSessionReceived.Signal(); switch (connectionState) { case EstablishedConnection : ClearCall(EndedByRemoteUser); break; case AwaitingLocalAnswer : ClearCall(EndedByCallerAbort); break; default : ClearCall(EndedByRefusal); } return FALSE; case H245_CommandMessage::e_conferenceCommand: if (OnHandleConferenceCommand(command)) return TRUE; break; case H245_CommandMessage::e_genericCommand : if (OnHandleH245GenericMessage(h245command,command)) return TRUE; break; } return OnUnknownControlPDU(pdu); } PBoolean H323Connection::OnH245Indication(const H323ControlPDU & pdu) { const H245_IndicationMessage & indication = pdu; switch (indication.GetTag()) { case H245_IndicationMessage::e_masterSlaveDeterminationRelease : return masterSlaveDeterminationProcedure->HandleRelease(indication); case H245_IndicationMessage::e_terminalCapabilitySetRelease : return capabilityExchangeProcedure->HandleRelease(indication); case H245_IndicationMessage::e_openLogicalChannelConfirm : return logicalChannels->HandleOpenConfirm(indication); case H245_IndicationMessage::e_requestChannelCloseRelease : return logicalChannels->HandleRequestCloseRelease(indication); case H245_IndicationMessage::e_requestModeRelease : return requestModeProcedure->HandleRelease(indication); case H245_IndicationMessage::e_miscellaneousIndication : return OnH245_MiscellaneousIndication(indication); case H245_IndicationMessage::e_jitterIndication : return OnH245_JitterIndication(indication); case H245_IndicationMessage::e_userInput : OnUserInputIndication(indication); break; case H245_IndicationMessage::e_conferenceIndication : if (OnHandleConferenceIndication(indication)) return TRUE; break; case H245_IndicationMessage::e_flowControlIndication : PTRACE(3,"H245\tFlow Indication received NOT HANDLED!"); return TRUE; break; case H245_IndicationMessage::e_genericIndication : if (OnHandleH245GenericMessage(h245indication,indication)) return TRUE; break; } return TRUE; // Do NOT call OnUnknownControlPDU for indications } PBoolean H323Connection::OnH245_SendTerminalCapabilitySet( const H245_SendTerminalCapabilitySet & pdu) { if (pdu.GetTag() == H245_SendTerminalCapabilitySet::e_genericRequest) return capabilityExchangeProcedure->Start(TRUE); PTRACE(2, "H245\tUnhandled SendTerminalCapabilitySet: " << pdu); return TRUE; } PBoolean H323Connection::OnH245_FlowControlCommand( const H245_FlowControlCommand & pdu) { PTRACE(3, "H245\tFlowControlCommand: scope=" << pdu.m_scope.GetTagName()); long restriction; if (pdu.m_restriction.GetTag() == H245_FlowControlCommand_restriction::e_maximumBitRate) restriction = (const PASN_Integer &)pdu.m_restriction; else restriction = -1; // H245_FlowControlCommand_restriction::e_noRestriction switch (pdu.m_scope.GetTag()) { case H245_FlowControlCommand_scope::e_wholeMultiplex : OnLogicalChannelFlowControl(NULL, restriction); break; case H245_FlowControlCommand_scope::e_logicalChannelNumber : { H323Channel * chan = logicalChannels->FindChannel((unsigned)(const H245_LogicalChannelNumber &)pdu.m_scope, FALSE); if (chan != NULL) OnLogicalChannelFlowControl(chan, restriction); } } return TRUE; } PBoolean H323Connection::OnH245_MiscellaneousCommand( const H245_MiscellaneousCommand & pdu) { H323Channel * chan = logicalChannels->FindChannel((unsigned)pdu.m_logicalChannelNumber, FALSE); if (chan != NULL) chan->OnMiscellaneousCommand(pdu.m_type); else PTRACE(3, "H245\tMiscellaneousCommand: is ignored chan=" << pdu.m_logicalChannelNumber << ", type=" << pdu.m_type.GetTagName()); return TRUE; } PBoolean H323Connection::OnH245_MiscellaneousIndication( const H245_MiscellaneousIndication & pdu) { H323Channel * chan = logicalChannels->FindChannel((unsigned)pdu.m_logicalChannelNumber, TRUE); if (chan != NULL) chan->OnMiscellaneousIndication(pdu.m_type); else PTRACE(3, "H245\tMiscellaneousIndication is ignored. chan=" << pdu.m_logicalChannelNumber << ", type=" << pdu.m_type.GetTagName()); return TRUE; } PBoolean H323Connection::OnH245_JitterIndication( const H245_JitterIndication & pdu) { PTRACE(3, "H245\tJitterIndication: scope=" << pdu.m_scope.GetTagName()); static const DWORD mantissas[8] = { 0, 1, 10, 100, 1000, 10000, 100000, 1000000 }; static const DWORD exponents[8] = { 10, 25, 50, 75 }; DWORD jitter = mantissas[pdu.m_estimatedReceivedJitterMantissa]* exponents[pdu.m_estimatedReceivedJitterExponent]/10; int skippedFrameCount = -1; if (pdu.HasOptionalField(H245_JitterIndication::e_skippedFrameCount)) skippedFrameCount = pdu.m_skippedFrameCount; int additionalBuffer = -1; if (pdu.HasOptionalField(H245_JitterIndication::e_additionalDecoderBuffer)) additionalBuffer = pdu.m_additionalDecoderBuffer; switch (pdu.m_scope.GetTag()) { case H245_JitterIndication_scope::e_wholeMultiplex : OnLogicalChannelJitter(NULL, jitter, skippedFrameCount, additionalBuffer); break; case H245_JitterIndication_scope::e_logicalChannelNumber : { H323Channel * chan = logicalChannels->FindChannel((unsigned)(const H245_LogicalChannelNumber &)pdu.m_scope, FALSE); if (chan != NULL) OnLogicalChannelJitter(chan, jitter, skippedFrameCount, additionalBuffer); } } return TRUE; } H323Channel * H323Connection::GetLogicalChannel(unsigned number, PBoolean fromRemote) const { return logicalChannels->FindChannel(number, fromRemote); } H323Channel * H323Connection::FindChannel(unsigned rtpSessionId, PBoolean fromRemote) const { return logicalChannels->FindChannelBySession(rtpSessionId, fromRemote); } #ifdef H323_H450 void H323Connection::TransferCall(const PString & remoteParty, const PString & callIdentity) { // According to H.450.4, if prior to consultation the primary call has been put on hold, the // transferring endpoint shall first retrieve the call before Call Transfer is invoked. if (!callIdentity.IsEmpty() && IsLocalHold()) RetrieveCall(); h4502handler->TransferCall(remoteParty, callIdentity); } void H323Connection::OnReceivedInitiateReturnError() { endpoint.OnReceivedInitiateReturnError(); } void H323Connection::ConsultationTransfer(const PString & primaryCallToken) { h4502handler->ConsultationTransfer(primaryCallToken); } void H323Connection::HandleConsultationTransfer(const PString & callIdentity, H323Connection& incoming) { h4502handler->HandleConsultationTransfer(callIdentity, incoming); } PBoolean H323Connection::IsTransferringCall() const { switch (h4502handler->GetState()) { case H4502Handler::e_ctAwaitIdentifyResponse : case H4502Handler::e_ctAwaitInitiateResponse : case H4502Handler::e_ctAwaitSetupResponse : return TRUE; default : return FALSE; } } PBoolean H323Connection::IsTransferredCall() const { return (h4502handler->GetInvokeId() != 0 && h4502handler->GetState() == H4502Handler::e_ctIdle) || h4502handler->isConsultationTransferSuccess(); } void H323Connection::HandleTransferCall(const PString & token, const PString & identity) { if (!token.IsEmpty() || !identity) h4502handler->AwaitSetupResponse(token, identity); } int H323Connection::GetCallTransferInvokeId() { return h4502handler->GetInvokeId(); } void H323Connection::HandleCallTransferFailure(const int returnError) { h4502handler->HandleCallTransferFailure(returnError); } void H323Connection::SetAssociatedCallToken(const PString& token) { h4502handler->SetAssociatedCallToken(token); } void H323Connection::OnConsultationTransferSuccess(H323Connection& /*secondaryCall*/) { h4502handler->SetConsultationTransferSuccess(); } void H323Connection::SetCallLinkage(H225_AdmissionRequest& /*arq*/ ) { } void H323Connection::GetCallLinkage(const H225_AdmissionRequest& /*arq*/) { } void H323Connection::HoldCall(PBoolean localHold) { h4504handler->HoldCall(localHold); holdAudioMediaChannel = SwapHoldMediaChannels(holdAudioMediaChannel,RTP_Session::DefaultAudioSessionID); holdVideoMediaChannel = SwapHoldMediaChannels(holdVideoMediaChannel,RTP_Session::DefaultVideoSessionID); } PBoolean H323Connection::GetRedirectingNumber( PString &originalCalledNr, PString &lastDivertingNr, int &divCounter, int &originaldivReason, int &divReason) { return h4503handler->GetRedirectingNumber(originalCalledNr,lastDivertingNr, divCounter,originaldivReason,divReason); } void H323Connection::RetrieveCall() { // Is the current call on hold? if (IsLocalHold()) { h4504handler->RetrieveCall(); holdAudioMediaChannel = SwapHoldMediaChannels(holdAudioMediaChannel,RTP_Session::DefaultAudioSessionID); holdVideoMediaChannel = SwapHoldMediaChannels(holdVideoMediaChannel,RTP_Session::DefaultVideoSessionID); } else if (IsRemoteHold()) { PTRACE(4, "H4504\tRemote-end Call Hold not implemented."); } else { PTRACE(4, "H4504\tCall is not on Hold."); } } void H323Connection::SetHoldMedia(PChannel * audioChannel) { holdAudioMediaChannel = audioChannel; } void H323Connection::SetVideoHoldMedia(PChannel * videoChannel) { holdVideoMediaChannel = videoChannel; } PBoolean H323Connection::IsMediaOnHold() const { return holdAudioMediaChannel != NULL; } PChannel * H323Connection::SwapHoldMediaChannels(PChannel * newChannel,unsigned sessionId) { if (IsMediaOnHold()) { if (newChannel == NULL) { PTRACE(4, "H4504\tCannot Retrieve session " << sessionId << " as hold media is NULL."); return NULL; } } PChannel * existingTransmitChannel = NULL; PINDEX count = logicalChannels->GetSize(); for (PINDEX i = 0; i < count; ++i) { H323Channel* channel = logicalChannels->GetChannelAt(i); if (!channel) { PTRACE(4, "H4504\tLogical Channel " << i << " Empty or closed! Session ID: " << sessionId); // Fire off to ensure if channel is being Held that it is retrieved in derived application OnCallRetrieve(TRUE,sessionId,0,newChannel); return NULL; } unsigned int session_id = channel->GetSessionID(); if (session_id == sessionId) { const H323ChannelNumber & channelNumber = channel->GetNumber(); H323_RTPChannel * chan2 = reinterpret_cast(channel); H323Codec & codec = *channel->GetCodec(); PChannel * rawChannel = codec.GetRawDataChannel(); unsigned frameRate = codec.GetFrameRate()*2; if (!channelNumber.IsFromRemote()) { // Transmit channel if (IsMediaOnHold()) { if (IsCallOnHold()) { PTRACE(4, "H4504\tHold Media OnHold Transmit " << i); existingTransmitChannel = codec.SwapChannel(newChannel); existingTransmitChannel = OnCallHold(TRUE,session_id,frameRate,existingTransmitChannel); } else { PTRACE(4, "H4504\tRetrieve Media OnHold Transmit " << i); existingTransmitChannel = codec.SwapChannel(OnCallRetrieve(TRUE,session_id,frameRate,existingTransmitChannel)); } } else { // Enable/mute the transmit channel depending on whether the remote end is held if (IsCallOnHold()) { PTRACE(4, "H4504\tHold Transmit " << i); chan2->SetPause(TRUE); if (codec.SetRawDataHeld(TRUE)) codec.SwapChannel(OnCallHold(TRUE,session_id,frameRate,rawChannel)); } else { PTRACE(4, "H4504\tRetreive Transmit " << i); codec.SwapChannel(OnCallRetrieve(TRUE,session_id,frameRate,rawChannel)); if (codec.SetRawDataHeld(FALSE)) chan2->SetPause(FALSE); } } } else { // Enable/mute the receive channel depending on whether the remote endis held if (IsCallOnHold()) { PTRACE(4, "H4504\tHold Receive " << i); chan2->SetPause(TRUE); if (codec.SetRawDataHeld(TRUE)) codec.SwapChannel(OnCallHold(FALSE,session_id,frameRate,rawChannel)); } else { PTRACE(4, "H4504\tRetrieve Receive " << i); codec.SwapChannel(OnCallRetrieve(FALSE,session_id,frameRate,rawChannel)); if (codec.SetRawDataHeld(FALSE)) chan2->SetPause(FALSE); } } } } return existingTransmitChannel; } PChannel * H323Connection::OnCallHold(PBoolean /*IsEncoder*/, unsigned /*sessionId*/, unsigned /*bufferSize*/, PChannel * channel) { return channel; } PChannel * H323Connection::OnCallRetrieve(PBoolean /*IsEncoder*/, unsigned /*sessionId*/, unsigned bufferSize, PChannel * channel) { if (bufferSize == 0) return NULL; else return channel; } PBoolean H323Connection::IsLocalHold() const { return h4504handler->GetState() == H4504Handler::e_ch_NE_Held; } PBoolean H323Connection::IsRemoteHold() const { return h4504handler->GetState() == H4504Handler::e_ch_RE_Held; } PBoolean H323Connection::IsCallOnHold() const { return h4504handler->GetState() != H4504Handler::e_ch_Idle; } void H323Connection::IntrudeCall(unsigned capabilityLevel) { h45011handler->IntrudeCall(capabilityLevel); } void H323Connection::HandleIntrudeCall(const PString & token, const PString & identity) { if (!token.IsEmpty() || !identity) h45011handler->AwaitSetupResponse(token, identity); } PBoolean H323Connection::GetRemoteCallIntrusionProtectionLevel(const PString & intrusionCallToken, unsigned intrusionCICL) { return h45011handler->GetRemoteCallIntrusionProtectionLevel(intrusionCallToken, intrusionCICL); } void H323Connection::SetIntrusionImpending() { h45011handler->SetIntrusionImpending(); } void H323Connection::SetForcedReleaseAccepted() { h45011handler->SetForcedReleaseAccepted(); } void H323Connection::SetIntrusionNotAuthorized() { h45011handler->SetIntrusionNotAuthorized(); } void H323Connection::SendCallWaitingIndication(const unsigned nbOfAddWaitingCalls) { h4506handler->AttachToAlerting(*alertingPDU, nbOfAddWaitingCalls); } #endif // H323_H450 PBoolean H323Connection::OnControlProtocolError(ControlProtocolErrors /*errorSource*/, const void * /*errorData*/) { return TRUE; } static void SetRFC2833PayloadType(H323Capabilities & capabilities, OpalRFC2833 & rfc2833handler) { H323Capability * capability = capabilities.FindCapability(H323_UserInputCapability::SubTypeNames[H323_UserInputCapability::SignalToneRFC2833]); if (capability != NULL) { RTP_DataFrame::PayloadTypes pt = ((H323_UserInputCapability*)capability)->GetPayloadType(); if (rfc2833handler.GetPayloadType() != pt) { PTRACE(2, "H323\tUser Input RFC2833 payload type set to " << pt); rfc2833handler.SetPayloadType(pt); } } } void H323Connection::OnSendCapabilitySet(H245_TerminalCapabilitySet & /*pdu*/) { // If we originated call, then check for RFC2833 capability and set payload type if (!callAnswered) SetRFC2833PayloadType(localCapabilities, *rfc2833handler); } void H323Connection::OnReceivedCapabilitySet(const H245_TerminalCapabilitySet & /*pdu*/) { // do nothing } PBoolean H323Connection::OnReceivedCapabilitySet(const H323Capabilities & remoteCaps, const H245_MultiplexCapability * muxCap, H245_TerminalCapabilitySetReject & /*rejectPDU*/) { if (muxCap != NULL) { if (muxCap->GetTag() != H245_MultiplexCapability::e_h2250Capability) { PTRACE(1, "H323\tCapabilitySet contains unsupported multiplex."); return FALSE; } const H245_H2250Capability & h225_0 = *muxCap; remoteMaxAudioDelayJitter = h225_0.m_maximumAudioDelayJitter; } // save this time as being when the reverse media channel was opened if (!reverseMediaOpenTime.IsValid()) reverseMediaOpenTime = PTime(); if (remoteCaps.GetSize() == 0) { // Received empty TCS, so close all transmit channels for (PINDEX i = 0; i < logicalChannels->GetSize(); i++) { H245NegLogicalChannel & negChannel = logicalChannels->GetNegLogicalChannelAt(i); H323Channel * channel = negChannel.GetChannel(); if (channel != NULL && !channel->GetNumber().IsFromRemote()) negChannel.Close(); } transmitterSidePaused = TRUE; } else { // Received non-empty TCS // If we had received a TCS=0 previously, or we have a remoteCapabilities which // was "faked" from the fast start data, overwrite it, don't merge it. if (transmitterSidePaused || !capabilityExchangeProcedure->HasReceivedCapabilities()) remoteCapabilities.RemoveAll(); if (!remoteCapabilities.Merge(remoteCaps)) return FALSE; if (transmitterSidePaused) { transmitterSidePaused = FALSE; connectionState = HasExecutedSignalConnect; capabilityExchangeProcedure->Start(TRUE); } else { if (localCapabilities.GetSize() > 0) capabilityExchangeProcedure->Start(FALSE); // If we terminated call, then check for RFC2833 capability and set payload type if (callAnswered) SetRFC2833PayloadType(remoteCapabilities, *rfc2833handler); } } return OnCommonCapabilitySet(remoteCapabilities); } PBoolean H323Connection::OnCommonCapabilitySet(H323Capabilities & caps) const { return TRUE; } void H323Connection::SendCapabilitySet(PBoolean empty) { capabilityExchangeProcedure->Start(TRUE, empty); } void H323Connection::SetInitialBandwidth(H323Capability::MainTypes captype, int bitRate) { #ifdef H323_VIDEO for (PINDEX i=0; i< localCapabilities.GetSize(); ++i) { if (localCapabilities[i].GetMainType() == captype) { OpalMediaFormat & fmt = localCapabilities[i].GetWritableMediaFormat(); if (fmt.GetOptionInteger(OpalVideoFormat::MaxBitRateOption) > bitRate) fmt.SetOptionInteger(OpalVideoFormat::MaxBitRateOption,bitRate); } } #endif } void H323Connection::OnSetLocalCapabilities() { } PBoolean H323Connection::IsH245Master() const { return masterSlaveDeterminationProcedure->IsMaster(); } void H323Connection::StartRoundTripDelay() { if (Lock()) { if (masterSlaveDeterminationProcedure->IsDetermined() && capabilityExchangeProcedure->HasSentCapabilities()) { if (roundTripDelayProcedure->IsRemoteOffline()) { PTRACE(2, "H245\tRemote failed to respond to PDU."); if (endpoint.ShouldClearCallOnRoundTripFail()) ClearCall(EndedByTransportFail); } else roundTripDelayProcedure->StartRequest(); } Unlock(); } } PTimeInterval H323Connection::GetRoundTripDelay() const { return roundTripDelayProcedure->GetRoundTripDelay(); } void H323Connection::InternalEstablishedConnectionCheck() { PTRACE(3, "H323\tInternalEstablishedConnectionCheck: " "connectionState=" << connectionState << " " "fastStartState=" << fastStartState); PBoolean h245_available = masterSlaveDeterminationProcedure->IsDetermined() && capabilityExchangeProcedure->HasSentCapabilities() && capabilityExchangeProcedure->HasReceivedCapabilities(); if (h245_available) endSessionNeeded = TRUE; // Check for if all the 245 conditions are met so can start up logical // channels and complete the connection establishment. if (fastStartState != FastStartAcknowledged) { if (!h245_available) return; // If we are early starting, start channels as soon as possible instead of // waiting for connect PDU if (earlyStart && FindChannel(RTP_Session::DefaultAudioSessionID, FALSE) == NULL) OnSelectLogicalChannels(); } #ifdef H323_T120 if (h245_available && startT120) { if (remoteCapabilities.FindCapability("T.120") != NULL) { H323Capability * capability = localCapabilities.FindCapability("T.120"); if (capability != NULL) OpenLogicalChannel(*capability, 3, H323Channel::IsBidirectional); } startT120 = FALSE; } #endif #ifdef H323_H224 if (h245_available && startH224) { if(remoteCapabilities.FindCapability("H.224") != NULL) { H323Capability * capability = localCapabilities.FindCapability("H.224"); if(capability != NULL) OpenLogicalChannel(*capability,RTP_Session::DefaultH224SessionID, H323Channel::IsBidirectional); } startH224 = FALSE; } #endif // Special case for Cisco CCM, when it does "early start" and opens its audio // channel to us, we better open one back or it hangs up! if ( h245_available && !mediaWaitForConnect && connectionState == AwaitingSignalConnect && FindChannel(RTP_Session::DefaultAudioSessionID, TRUE) != NULL && FindChannel(RTP_Session::DefaultAudioSessionID, FALSE) == NULL) OnSelectLogicalChannels(); if (connectionState != HasExecutedSignalConnect) return; // Check if we have already got a transmitter running, select one if not if (FindChannel(RTP_Session::DefaultAudioSessionID, FALSE) == NULL) OnSelectLogicalChannels(); connectionState = EstablishedConnection; OnEstablished(); } #if defined(H323_AUDIO_CODECS) || defined(H323_VIDEO) || defined(H323_T38) || defined(H323_FILE) static void StartFastStartChannel(H323LogicalChannelList & fastStartChannels, unsigned sessionID, H323Channel::Directions direction) { for (PINDEX i = 0; i < fastStartChannels.GetSize(); i++) { H323Channel & channel = fastStartChannels[i]; if (channel.GetSessionID() == sessionID && channel.GetDirection() == direction) { fastStartChannels[i].Start(); break; } } } #endif void H323Connection::OnSelectLogicalChannels() { PTRACE(2, "H245\tDefault OnSelectLogicalChannels, " << fastStartState); // Select the first codec that uses the "standard" audio session. switch (fastStartState) { default : //FastStartDisabled : #ifdef H323_AUDIO_CODECS if (endpoint.CanAutoStartTransmitAudio()) SelectDefaultLogicalChannel(RTP_Session::DefaultAudioSessionID); #endif #ifdef H323_VIDEO if (endpoint.CanAutoStartTransmitVideo()) SelectDefaultLogicalChannel(RTP_Session::DefaultVideoSessionID); #ifdef H323_H239 if (endpoint.CanAutoStartTransmitExtVideo()) SelectDefaultLogicalChannel(RTP_Session::DefaultExtVideoSessionID); #endif #endif // H323_VIDEO #ifdef H323_T38 if (endpoint.CanAutoStartTransmitFax()) SelectDefaultLogicalChannel(RTP_Session::DefaultFaxSessionID); #endif break; case FastStartInitiate : #ifdef H323_AUDIO_CODECS SelectFastStartChannels(RTP_Session::DefaultAudioSessionID, endpoint.CanAutoStartTransmitAudio(), endpoint.CanAutoStartReceiveAudio()); #endif #ifdef H323_VIDEO SelectFastStartChannels(RTP_Session::DefaultVideoSessionID, endpoint.CanAutoStartTransmitVideo(), endpoint.CanAutoStartReceiveVideo()); #ifdef H323_H239 SelectFastStartChannels(RTP_Session::DefaultExtVideoSessionID, endpoint.CanAutoStartTransmitExtVideo(), endpoint.CanAutoStartReceiveExtVideo()); #endif #endif // H323_VIDEO #if defined(H323_T38) || defined(H323_FILE) SelectFastStartChannels(RTP_Session::DefaultFaxSessionID, endpoint.CanAutoStartTransmitFax(), endpoint.CanAutoStartReceiveFax()); #endif break; case FastStartResponse : #ifdef H323_AUDIO_CODECS if (endpoint.CanAutoStartTransmitAudio()) StartFastStartChannel(fastStartChannels, RTP_Session::DefaultAudioSessionID, H323Channel::IsTransmitter); if (endpoint.CanAutoStartReceiveAudio()) StartFastStartChannel(fastStartChannels, RTP_Session::DefaultAudioSessionID, H323Channel::IsReceiver); #endif #ifdef H323_VIDEO if (endpoint.CanAutoStartTransmitVideo()) StartFastStartChannel(fastStartChannels, RTP_Session::DefaultVideoSessionID, H323Channel::IsTransmitter); if (endpoint.CanAutoStartReceiveVideo()) StartFastStartChannel(fastStartChannels, RTP_Session::DefaultVideoSessionID, H323Channel::IsReceiver); #ifdef H323_H239 if (endpoint.CanAutoStartTransmitExtVideo()) StartFastStartChannel(fastStartChannels, RTP_Session::DefaultExtVideoSessionID, H323Channel::IsTransmitter); if (endpoint.CanAutoStartReceiveExtVideo()) StartFastStartChannel(fastStartChannels, RTP_Session::DefaultExtVideoSessionID, H323Channel::IsReceiver); #endif #endif // H323_VIDEO #ifdef H323_T38 if (endpoint.CanAutoStartTransmitFax()) StartFastStartChannel(fastStartChannels, RTP_Session::DefaultFaxSessionID, H323Channel::IsTransmitter); if (endpoint.CanAutoStartReceiveFax()) StartFastStartChannel(fastStartChannels, RTP_Session::DefaultFaxSessionID, H323Channel::IsReceiver); #endif break; } } void H323Connection::SelectDefaultLogicalChannel(unsigned sessionID) { if (FindChannel (sessionID, FALSE)) return; for (PINDEX i = 0; i < localCapabilities.GetSize(); i++) { H323Capability & localCapability = localCapabilities[i]; if (localCapability.GetDefaultSessionID() == sessionID) { H323Capability * remoteCapability = remoteCapabilities.FindCapability(localCapability); if (remoteCapability != NULL) { PTRACE(3, "H323\tSelecting " << *remoteCapability); MergeCapabilities(sessionID, localCapability, remoteCapability); if (OpenLogicalChannel(*remoteCapability, sessionID, H323Channel::IsTransmitter)) break; PTRACE(2, "H323\tOnSelectLogicalChannels, OpenLogicalChannel failed: " << *remoteCapability); } } } } PBoolean H323Connection::MergeCapabilities(unsigned sessionID, const H323Capability & local, H323Capability * remote) { OpalMediaFormat & remoteFormat = remote->GetWritableMediaFormat(); const OpalMediaFormat & localFormat = local.GetMediaFormat(); if (remoteFormat.Merge(localFormat)) { #ifdef H323_VIDEO unsigned maxBitRate = remoteFormat.GetOptionInteger(OpalVideoFormat::MaxBitRateOption); unsigned targetBitRate = remoteFormat.GetOptionInteger(OpalVideoFormat::TargetBitRateOption); if (targetBitRate > maxBitRate) remoteFormat.SetOptionInteger(OpalVideoFormat::TargetBitRateOption, maxBitRate); #endif #if PTRACING PTRACE(6, "H323\tCapability Merge: "); OpalMediaFormat::DebugOptionList(remoteFormat); #endif return TRUE; } return FALSE; } void H323Connection::DisableFastStart() { fastStartState = FastStartDisabled; } void H323Connection::SelectFastStartChannels(unsigned sessionID, PBoolean transmitter, PBoolean receiver) { // Select all of the fast start channels to offer to the remote when initiating a call. for (PINDEX i = 0; i < localCapabilities.GetSize(); i++) { H323Capability & capability = localCapabilities[i]; if (capability.GetDefaultSessionID() == sessionID) { if (receiver) { if (!OpenLogicalChannel(capability, sessionID, H323Channel::IsReceiver)) { PTRACE(2, "H323\tOnSelectLogicalChannels, OpenLogicalChannel rx failed: " << capability); } } if (transmitter) { if (!OpenLogicalChannel(capability, sessionID, H323Channel::IsTransmitter)) { PTRACE(2, "H323\tOnSelectLogicalChannels, OpenLogicalChannel tx failed: " << capability); } } } } } PBoolean H323Connection::OpenLogicalChannel(const H323Capability & capability, unsigned sessionID, H323Channel::Directions dir) { switch (fastStartState) { default : // FastStartDisabled if (dir == H323Channel::IsReceiver) return FALSE; // Traditional H245 handshake return logicalChannels->Open(capability, sessionID); case FastStartResponse : // Do not use OpenLogicalChannel for starting these. return FALSE; case FastStartInitiate : break; } /*If starting a receiver channel and are initiating the fast start call, indicated by the remoteCapabilities being empty, we do a "trial" listen on the channel. That is, for example, the UDP sockets are created to receive data in the RTP session, but no thread is started to read the packets and pass them to the codec. This is because at this point in time, we do not know which of the codecs is to be used, and more than one thread cannot read from the RTP ports at the same time. */ H323Channel * channel = capability.CreateChannel(*this, dir, sessionID, NULL); if (channel == NULL) return FALSE; if (dir != H323Channel::IsReceiver) channel->SetNumber(logicalChannels->GetNextChannelNumber()); fastStartChannels.Append(channel); return TRUE; } PBoolean H323Connection::OnOpenLogicalChannel(const H245_OpenLogicalChannel & openPDU, H245_OpenLogicalChannelAck & ackPDU, unsigned & /*errorCode*/, const unsigned & sessionID) { // If get a OLC via H.245 stop trying to do fast start fastStartState = FastStartDisabled; if (!fastStartChannels.IsEmpty()) { fastStartChannels.RemoveAll(); #ifdef P_STUN m_NATSockets.clear(); #endif PTRACE(1, "H245\tReceived early start OLC, aborting fast start"); } #ifdef H323_H46018 PTRACE(4,"H323\tOnOpenLogicalChannel"); if (openPDU.HasOptionalField(H245_OpenLogicalChannel::e_genericInformation)) { OnReceiveOLCGenericInformation(sessionID,openPDU.m_genericInformation,false); if (OnSendingOLCGenericInformation(sessionID,ackPDU.m_genericInformation,true)) ackPDU.IncludeOptionalField(H245_OpenLogicalChannelAck::e_genericInformation); } #endif //errorCode = H245_OpenLogicalChannelReject_cause::e_unspecified; return true; } PBoolean H323Connection::OnConflictingLogicalChannel(H323Channel & conflictingChannel) { unsigned session = conflictingChannel.GetSessionID(); PTRACE(2, "H323\tLogical channel " << conflictingChannel << " conflict on session " << session << ", codec: " << conflictingChannel.GetCapability()); /* Matrix of conflicts: Local EP is master and conflicting channel from remote (OLC) Reject remote transmitter (function is not called) Local EP is master and conflicting channel to remote (OLCAck) Should not happen (function is not called) Local EP is slave and conflicting channel from remote (OLC) Close sessions reverse channel from remote Start new reverse channel using codec in conflicting channel Accept the OLC for masters transmitter Local EP is slave and conflicting channel to remote (OLCRej) Start transmitter channel using codec in sessions reverse channel Upshot is this is only called if a slave and require a restart of some channel. Possibly closing channels as master has precedence. */ PBoolean fromRemote = conflictingChannel.GetNumber().IsFromRemote(); H323Channel * channel = FindChannel(session, !fromRemote); if (channel == NULL) { PTRACE(1, "H323\tCould not resolve conflict, no reverse channel."); return FALSE; } if (!fromRemote) { conflictingChannel.CleanUpOnTermination(); H323Capability * capability = remoteCapabilities.FindCapability(channel->GetCapability()); if (capability == NULL) { PTRACE(1, "H323\tCould not resolve conflict, capability not available on remote."); return FALSE; } OpenLogicalChannel(*capability, session, H323Channel::IsTransmitter); return TRUE; } // Shut down the conflicting channel that got in before our transmitter channel->CleanUpOnTermination(); // Get the conflisting channel number to close H323ChannelNumber number = channel->GetNumber(); // Must be slave and conflict from something we are sending, so try starting a // new channel using the master endpoints transmitter codec. logicalChannels->Open(conflictingChannel.GetCapability(), session, number); // Now close the conflicting channel CloseLogicalChannelNumber(number); return TRUE; } H323Channel * H323Connection::CreateLogicalChannel(const H245_OpenLogicalChannel & open, PBoolean startingFast, unsigned & errorCode) { const H245_H2250LogicalChannelParameters * param; const H245_DataType * dataType; H323Channel::Directions direction; if (startingFast && open.HasOptionalField(H245_OpenLogicalChannel::e_reverseLogicalChannelParameters)) { if (open.m_reverseLogicalChannelParameters.m_multiplexParameters.GetTag() != H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters ::e_h2250LogicalChannelParameters) { errorCode = H245_OpenLogicalChannelReject_cause::e_unsuitableReverseParameters; PTRACE(2, "H323\tCreateLogicalChannel - reverse channel, H225.0 only supported"); return NULL; } PTRACE(3, "H323\tCreateLogicalChannel - reverse channel"); dataType = &open.m_reverseLogicalChannelParameters.m_dataType; param = &(const H245_H2250LogicalChannelParameters &) open.m_reverseLogicalChannelParameters.m_multiplexParameters; direction = H323Channel::IsTransmitter; } else { if (open.m_forwardLogicalChannelParameters.m_multiplexParameters.GetTag() != H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters ::e_h2250LogicalChannelParameters) { PTRACE(2, "H323\tCreateLogicalChannel - forward channel, H225.0 only supported"); errorCode = H245_OpenLogicalChannelReject_cause::e_unspecified; return NULL; } PTRACE(3, "H323\tCreateLogicalChannel - forward channel"); dataType = &open.m_forwardLogicalChannelParameters.m_dataType; param = &(const H245_H2250LogicalChannelParameters &) open.m_forwardLogicalChannelParameters.m_multiplexParameters; direction = H323Channel::IsReceiver; } unsigned sessionID = param->m_sessionID; #ifdef H323_VIDEO #ifdef H323_H239 if (!startingFast && open.HasOptionalField(H245_OpenLogicalChannel::e_genericInformation)) { // check for extended Video OLC unsigned roleLabel = 0; H323ChannelNumber channelnum = H323ChannelNumber(open.m_forwardLogicalChannelNumber, TRUE); const H245_ArrayOf_GenericInformation & cape = open.m_genericInformation; for (PINDEX i=0; iOnReceivedPDU(*dataType, direction == H323Channel::IsReceiver)) { errorCode = H245_OpenLogicalChannelReject_cause::e_dataTypeNotSupported; PTRACE(2, "H323\tCreateLogicalChannel - data type not supported"); return NULL; // If codec not supported, return error } if (startingFast && (direction == H323Channel::IsTransmitter)) { H323Capability * remoteCapability = remoteCapabilities.FindCapability(*capability); if (remoteCapability != NULL) capability = remoteCapability; else { capability = remoteCapabilities.Copy(*capability); remoteCapabilities.SetCapability(0, 0, capability); } } if (!OnCreateLogicalChannel(*capability, direction, errorCode)) return NULL; // If codec combination not supported, return error H323Channel * channel = capability->CreateChannel(*this, direction, sessionID, param); if (channel == NULL) { errorCode = H245_OpenLogicalChannelReject_cause::e_dataTypeNotAvailable; PTRACE(2, "H323\tCreateLogicalChannel - data type not available"); return NULL; } if (startingFast && open.HasOptionalField(H245_OpenLogicalChannel::e_genericInformation)) OnReceiveOLCGenericInformation(sessionID,open.m_genericInformation, false); if (!channel->SetInitialBandwidth()) errorCode = H245_OpenLogicalChannelReject_cause::e_insufficientBandwidth; else if (channel->OnReceivedPDU(open, errorCode)) return channel; PTRACE(2, "H323\tOnReceivedPDU gave error " << errorCode); delete channel; return NULL; } H323Channel * H323Connection::CreateRealTimeLogicalChannel(const H323Capability & capability, H323Channel::Directions dir, unsigned sessionID, const H245_H2250LogicalChannelParameters * param, RTP_QOS * rtpqos) { RTP_Session * session = NULL; if (param != NULL && param->HasOptionalField(H245_H2250LogicalChannelParameters::e_mediaControlChannel)) session = UseSession(param->m_sessionID, param->m_mediaControlChannel, dir, rtpqos); else { // Make a fake transmprt address from the connection so gets initialised with // the transport type (IP, IPX, multicast etc). H245_TransportAddress addr; GetControlChannel().SetUpTransportPDU(addr, H323Transport::UseLocalTSAP); session = UseSession(sessionID, addr, dir, rtpqos); } if (session == NULL) return NULL; return new H323_RTPChannel(*this, capability, dir, *session); } PBoolean H323Connection::OnCreateLogicalChannel(const H323Capability & capability, H323Channel::Directions dir, unsigned & errorCode) { if (connectionState == ShuttingDownConnection) { errorCode = H245_OpenLogicalChannelReject_cause::e_unspecified; return FALSE; } // Default error if returns FALSE errorCode = H245_OpenLogicalChannelReject_cause::e_dataTypeALCombinationNotSupported; // Check if in set at all if (dir != H323Channel::IsReceiver) { if (!remoteCapabilities.IsAllowed(capability)) { PTRACE(2, "H323\tOnCreateLogicalChannel - transmit capability " << capability << " not allowed."); return FALSE; } } else { if (!localCapabilities.IsAllowed(capability)) { PTRACE(2, "H323\tOnCreateLogicalChannel - receive capability " << capability << " not allowed."); return FALSE; } } // Check all running channels, and if new one can't run with it return FALSE for (PINDEX i = 0; i < logicalChannels->GetSize(); i++) { H323Channel * channel = logicalChannels->GetChannelAt(i); if (channel != NULL && channel->GetDirection() == dir) { if (dir != H323Channel::IsReceiver) { if (!remoteCapabilities.IsAllowed(capability, channel->GetCapability())) { PTRACE(2, "H323\tOnCreateLogicalChannel - transmit capability " << capability << " and " << channel->GetCapability() << " incompatible."); return FALSE; } } else { if (!localCapabilities.IsAllowed(capability, channel->GetCapability())) { PTRACE(2, "H323\tOnCreateLogicalChannel - receive capability " << capability << " and " << channel->GetCapability() << " incompatible."); return FALSE; } } } } return TRUE; } PBoolean H323Connection::OnStartLogicalChannel(H323Channel & channel) { if (channel.GetSessionID() == OpalMediaFormat::DefaultAudioSessionID && PIsDescendant(&channel, H323_RTPChannel)) { H323_RTPChannel & rtp = (H323_RTPChannel &)channel; if (channel.GetNumber().IsFromRemote()) { rtp.AddFilter(rfc2833handler->GetReceiveHandler()); if (detectInBandDTMF) { H323Codec * codec = channel.GetCodec(); if (codec != NULL) codec->AddFilter(PCREATE_NOTIFIER(OnUserInputInBandDTMF)); } } else rtp.AddFilter(rfc2833handler->GetTransmitHandler()); } #ifdef H323_H239 if ((channel.GetCapability().GetMainType() == H323Capability::e_Video) && (channel.GetCapability().GetSubType() == H245_VideoCapability::e_extendedVideoCapability)) { OnH239SessionStarted(channel.GetNumber(), channel.GetNumber().IsFromRemote() ? H323Capability::e_Receive : H323Capability::e_Transmit); } #endif return endpoint.OnStartLogicalChannel(*this, channel); } PBoolean H323Connection::OnInitialFlowRestriction(H323Channel & channel) { #if H323_VIDEO if (channel.GetSessionID() == OpalMediaFormat::DefaultAudioSessionID) return true; if (!channel.GetNumber().IsFromRemote()) return true; H323Codec * codec = channel.GetCodec(); if (codec == NULL) return true; const OpalMediaFormat & fmt = codec->GetMediaFormat(); unsigned maxBitRate = fmt.GetOptionInteger(OpalVideoFormat::MaxBitRateOption); unsigned targetBitRate = fmt.GetOptionInteger(OpalVideoFormat::TargetBitRateOption); if (targetBitRate < maxBitRate) { return SendLogicalChannelFlowControl(channel,targetBitRate/100); } #endif return true; } #ifdef H323_AUDIO_CODECS PBoolean H323Connection::OpenAudioChannel(PBoolean isEncoding, unsigned bufferSize, H323AudioCodec & codec) { #ifdef H323_AEC if (endpoint.AECEnabled() && (aec == NULL)) { PTRACE(2, "H323\tCreating AEC instance."); int rate = codec.GetMediaFormat().GetTimeUnits() * 1000; aec = new PAec(rate); } codec.AttachAEC(aec); #endif return endpoint.OpenAudioChannel(*this, isEncoding, bufferSize, codec); } #endif #ifdef H323_VIDEO PBoolean H323Connection::OpenVideoChannel(PBoolean isEncoding, H323VideoCodec & codec) { return endpoint.OpenVideoChannel(*this, isEncoding, codec); } #endif // NO_H323_VIDEO void H323Connection::CloseLogicalChannel(unsigned number, PBoolean fromRemote) { if (connectionState != ShuttingDownConnection) logicalChannels->Close(number, fromRemote); } void H323Connection::CloseLogicalChannelNumber(const H323ChannelNumber & number) { CloseLogicalChannel(number, number.IsFromRemote()); } void H323Connection::CloseAllLogicalChannels(PBoolean fromRemote) { for (PINDEX i = 0; i < logicalChannels->GetSize(); i++) { H245NegLogicalChannel & negChannel = logicalChannels->GetNegLogicalChannelAt(i); H323Channel * channel = negChannel.GetChannel(); if (channel != NULL && channel->GetNumber().IsFromRemote() == fromRemote) negChannel.Close(); } } PBoolean H323Connection::OnClosingLogicalChannel(H323Channel & /*channel*/) { return TRUE; } void H323Connection::OnClosedLogicalChannel(const H323Channel & channel) { #ifdef H323_H239 if ((channel.GetCapability().GetMainType() == H323Capability::e_Video) && (channel.GetCapability().GetSubType() == H245_VideoCapability::e_extendedVideoCapability)) { OnH239SessionEnded(channel.GetNumber(), channel.GetNumber().IsFromRemote() ? H323Capability::e_Receive : H323Capability::e_Transmit); } #endif endpoint.OnClosedLogicalChannel(*this, channel); } void H323Connection::OnLogicalChannelFlowControl(H323Channel * channel, long bitRateRestriction) { if (channel != NULL) channel->OnFlowControl(bitRateRestriction); } PBoolean H323Connection::SendLogicalChannelFlowControl(const H323Channel & channel, long restriction) { H323ControlPDU pdu; H245_CommandMessage & command = pdu.Build(H245_CommandMessage::e_flowControlCommand); H245_FlowControlCommand & flowCommand = command; H245_FlowControlCommand_scope & scope = flowCommand.m_scope; scope.SetTag(H245_FlowControlCommand_scope::e_logicalChannelNumber); H245_LogicalChannelNumber & lc = scope; lc = channel.GetNumber(); H245_FlowControlCommand_restriction & restrict = flowCommand.m_restriction; restrict.SetTag(H245_FlowControlCommand_restriction::e_maximumBitRate); PASN_Integer & bitRate = restrict; bitRate = restriction; return WriteControlPDU(pdu); } void H323Connection::OnLogicalChannelJitter(H323Channel * channel, DWORD jitter, int skippedFrameCount, int additionalBuffer) { if (channel != NULL) channel->OnJitterIndication(jitter, skippedFrameCount, additionalBuffer); } unsigned H323Connection::GetBandwidthUsed() const { unsigned used = 0; for (PINDEX i = 0; i < logicalChannels->GetSize(); i++) { H323Channel * channel = logicalChannels->GetChannelAt(i); if (channel != NULL) used += channel->GetBandwidthUsed(); } PTRACE(3, "H323\tBandwidth used: " << used); return used; } #ifdef H323_VIDEO void H323Connection::OnSetInitialBandwidth(H323VideoCodec * codec) { endpoint.OnSetInitialBandwidth(codec); } #endif PBoolean H323Connection::UseBandwidth(unsigned bandwidth, PBoolean removing) { PTRACE(3, "H323\tBandwidth request: " << (removing ? '-' : '+') << bandwidth/10 << '.' << bandwidth%10 << "kb/s, available: " << bandwidthAvailable/10 << '.' << bandwidthAvailable%10 << "kb/s"); if (removing) bandwidthAvailable += bandwidth; else { if (bandwidth > bandwidthAvailable) { PTRACE(2, "H323\tAvailable bandwidth exceeded"); return FALSE; } bandwidthAvailable -= bandwidth; } return TRUE; } PBoolean H323Connection::SetBandwidthAvailable(unsigned newBandwidth, PBoolean force) { unsigned used = GetBandwidthUsed(); if (used > newBandwidth) { if (!force) return FALSE; // Go through logical channels and close down some. PINDEX chanIdx = logicalChannels->GetSize(); while (used > newBandwidth && chanIdx-- > 0) { H323Channel * channel = logicalChannels->GetChannelAt(chanIdx); if (channel != NULL) { used -= channel->GetBandwidthUsed(); CloseLogicalChannelNumber(channel->GetNumber()); } } } bandwidthAvailable = newBandwidth - used; return TRUE; } void H323Connection::SetSendUserInputMode(SendUserInputModes mode) { PAssert(mode != SendUserInputAsSeparateRFC2833, PUnimplementedFunction); PTRACE(2, "H323\tSetting default User Input send mode to " << mode); sendUserInputMode = mode; } static PBoolean CheckSendUserInputMode(const H323Capabilities & caps, H323Connection::SendUserInputModes mode) { // If have remote capabilities, then verify we can send selected mode, // otherwise just return and accept it for future validation static const H323_UserInputCapability::SubTypes types[H323Connection::NumSendUserInputModes] = { H323_UserInputCapability::NumSubTypes, H323_UserInputCapability::BasicString, H323_UserInputCapability::SignalToneH245, H323_UserInputCapability::SignalToneRFC2833 #ifdef H323_H249 // H323_UserInputCapability::SignalToneSeperateRFC2833, // Not implemented ,H323_UserInputCapability::H249A_Navigation, H323_UserInputCapability::H249B_Softkey, H323_UserInputCapability::H249C_PointDevice, H323_UserInputCapability::H249D_Modal, H323_UserInputCapability::NumSubTypes #endif }; if (types[mode] == H323_UserInputCapability::NumSubTypes) return mode == H323Connection::SendUserInputAsQ931; return caps.FindCapability(H323_UserInputCapability::SubTypeNames[types[mode]]) != NULL; } H323Connection::SendUserInputModes H323Connection::GetRealSendUserInputMode() const { // If have not yet exchanged capabilities (ie not finished setting up the // H.245 channel) then the only thing we can do is Q.931 if (!capabilityExchangeProcedure->HasReceivedCapabilities()) return SendUserInputAsQ931; // First try recommended mode if (CheckSendUserInputMode(remoteCapabilities, sendUserInputMode)) return sendUserInputMode; // Then try H.245 tones if (CheckSendUserInputMode(remoteCapabilities, SendUserInputAsTone)) return SendUserInputAsTone; // Finally if is H.245 alphanumeric or does not indicate it could do other // modes we use H.245 alphanumeric as per spec. return SendUserInputAsString; } void H323Connection::SendUserInput(const PString & value) { SendUserInputModes mode = GetRealSendUserInputMode(); PTRACE(2, "H323\tSendUserInput(\"" << value << "\"), using mode " << mode); PINDEX i; switch (mode) { case SendUserInputAsQ931 : SendUserInputIndicationQ931(value); break; case SendUserInputAsString : SendUserInputIndicationString(value); break; case SendUserInputAsTone : for (i = 0; i < value.GetLength(); i++) SendUserInputIndicationTone(value[i]); break; case SendUserInputAsInlineRFC2833 : for (i = 0; i < value.GetLength(); i++) rfc2833handler->SendTone(value[i], 180); break; default : ; } } void H323Connection::OnUserInputString(const PString & value) { endpoint.OnUserInputString(*this, value); } void H323Connection::SendUserInputTone(char tone, unsigned duration, unsigned logicalChannel, unsigned rtpTimestamp) { SendUserInputModes mode = GetRealSendUserInputMode(); PTRACE(2, "H323\tSendUserInputTone(" << tone << ',' << duration << ',' << logicalChannel << ',' << rtpTimestamp << "), using mode " << mode); switch (mode) { case SendUserInputAsQ931 : SendUserInputIndicationQ931(PString(tone)); break; case SendUserInputAsString : SendUserInputIndicationString(PString(tone)); break; case SendUserInputAsTone : SendUserInputIndicationTone(tone, duration, logicalChannel, rtpTimestamp); break; case SendUserInputAsInlineRFC2833 : rfc2833handler->SendTone(tone, duration); break; default : ; } } void H323Connection::OnUserInputTone(char tone, unsigned duration, unsigned logicalChannel, unsigned rtpTimestamp) { endpoint.OnUserInputTone(*this, tone, duration, logicalChannel, rtpTimestamp); } void H323Connection::SendUserInputIndicationQ931(const PString & value) { PTRACE(2, "H323\tSendUserInputIndicationQ931(\"" << value << "\")"); H323SignalPDU pdu; pdu.BuildInformation(*this); pdu.GetQ931().SetKeypad(value); if (!WriteSignalPDU(pdu)) ClearCall(EndedByTransportFail); } void H323Connection::SendUserInputIndicationString(const PString & value) { PTRACE(2, "H323\tSendUserInputIndicationString(\"" << value << "\")"); H323ControlPDU pdu; PASN_GeneralString & str = pdu.BuildUserInputIndication(value); if (!str.GetValue()) WriteControlPDU(pdu); else { PTRACE(1, "H323\tInvalid characters for UserInputIndication"); } } void H323Connection::SendUserInputIndicationTone(char tone, unsigned duration, unsigned logicalChannel, unsigned rtpTimestamp) { PTRACE(2, "H323\tSendUserInputIndicationTone(" << tone << ',' << duration << ',' << logicalChannel << ',' << rtpTimestamp << ')'); H323ControlPDU pdu; pdu.BuildUserInputIndication(tone, duration, logicalChannel, rtpTimestamp); WriteControlPDU(pdu); } #ifdef H323_H249 void H323Connection::SendUserInputIndicationNavigate(H323_UserInputCapability::NavigateKeyID keyID) { if (!CheckSendUserInputMode(remoteCapabilities,SendUserInputAsNavigation)) return; PTRACE(2, "H323\tSendUserInputIndicationNavigate(" << keyID << ')'); H323ControlPDU pdu; H245_UserInputIndication & ind = pdu.Build(H245_IndicationMessage::e_userInput); ind.SetTag(H245_UserInputIndication::e_genericInformation); H245_ArrayOf_GenericInformation & infolist = ind; H245_GenericInformation * info = H323_UserInputCapability::BuildGenericIndication(H323_UserInputCapability::SubTypeOID[0]); info->IncludeOptionalField(H245_GenericMessage::e_messageContent); H245_ArrayOf_GenericParameter & contents = info->m_messageContent; H245_GenericParameter * content = H323_UserInputCapability::BuildGenericParameter(1,H245_ParameterValue::e_unsignedMin,keyID); contents.Append(content); contents.SetSize(contents.GetSize()+1); infolist.Append(info); infolist.SetSize(infolist.GetSize()+1); WriteControlPDU(pdu); } void H323Connection::SendUserInputIndicationSoftkey(unsigned key, const PString & keyName) { if (!CheckSendUserInputMode(remoteCapabilities,SendUserInputAsSoftkey)) return; PTRACE(2, "H323\tSendUserInputIndicationSoftkey(" << key << ')'); H323ControlPDU pdu; H245_UserInputIndication & ind = pdu.Build(H245_IndicationMessage::e_userInput); ind.SetTag(H245_UserInputIndication::e_genericInformation); H245_ArrayOf_GenericInformation & infolist = ind; H245_GenericInformation * info = H323_UserInputCapability::BuildGenericIndication(H323_UserInputCapability::SubTypeOID[1]); info->IncludeOptionalField(H245_GenericMessage::e_messageContent); H245_ArrayOf_GenericParameter & contents = info->m_messageContent; H245_GenericParameter * content = H323_UserInputCapability::BuildGenericParameter(2,H245_ParameterValue::e_unsignedMin,key); contents.Append(content); contents.SetSize(contents.GetSize()+1); if (keyName.GetLength() > 0) { H245_GenericParameter * contentstr = H323_UserInputCapability::BuildGenericParameter(1,H245_ParameterValue::e_octetString,keyName); contents.Append(contentstr); contents.SetSize(contents.GetSize()+1); } infolist.Append(info); infolist.SetSize(infolist.GetSize()+1); WriteControlPDU(pdu); } void H323Connection::SendUserInputIndicationPointDevice(unsigned x, unsigned y, unsigned button, unsigned buttonstate, unsigned clickcount) { if (!CheckSendUserInputMode(remoteCapabilities,SendUserInputAsPointDevice)) return; PTRACE(6, "H323\tSendUserInputIndicationPointDevice"); H323ControlPDU pdu; H245_UserInputIndication & ind = pdu.Build(H245_IndicationMessage::e_userInput); ind.SetTag(H245_UserInputIndication::e_genericInformation); H245_ArrayOf_GenericInformation & infolist = ind; H245_GenericInformation * info = H323_UserInputCapability::BuildGenericIndication(H323_UserInputCapability::SubTypeOID[2]); info->IncludeOptionalField(H245_GenericMessage::e_messageContent); H245_ArrayOf_GenericParameter & contents = info->m_messageContent; /// Add X and Y co-ords H245_GenericParameter * X = H323_UserInputCapability::BuildGenericParameter(1,H245_ParameterValue::e_unsignedMin,x); contents.Append(X); contents.SetSize(contents.GetSize()+1); H245_GenericParameter * Y = H323_UserInputCapability::BuildGenericParameter(2,H245_ParameterValue::e_unsignedMin,y); contents.Append(Y); contents.SetSize(contents.GetSize()+1); /// Optional values if (button > 0) { H245_GenericParameter * but = H323_UserInputCapability::BuildGenericParameter(3,H245_ParameterValue::e_unsignedMin,button); contents.Append(but); contents.SetSize(contents.GetSize()+1); } if (buttonstate > 0) { H245_GenericParameter * butstate = H323_UserInputCapability::BuildGenericParameter(4,H245_ParameterValue::e_unsignedMin,buttonstate); contents.Append(butstate); contents.SetSize(contents.GetSize()+1); } if (clickcount > 0) { H245_GenericParameter * cc = H323_UserInputCapability::BuildGenericParameter(5,H245_ParameterValue::e_unsignedMin,clickcount); contents.Append(cc); contents.SetSize(contents.GetSize()+1); } infolist.Append(info); infolist.SetSize(infolist.GetSize()+1); WriteControlPDU(pdu); } void H323Connection::SendUserInputIndicationModal() { if (!CheckSendUserInputMode(remoteCapabilities,SendUserInputAsModal)) return; } #endif void H323Connection::SendUserInputIndication(const H245_UserInputIndication & indication) { H323ControlPDU pdu; H245_UserInputIndication & ind = pdu.Build(H245_IndicationMessage::e_userInput); ind = indication; WriteControlPDU(pdu); } void H323Connection::OnUserInputIndication(const H245_UserInputIndication & ind) { switch (ind.GetTag()) { case H245_UserInputIndication::e_alphanumeric : OnUserInputString((const PASN_GeneralString &)ind); break; case H245_UserInputIndication::e_signal : { const H245_UserInputIndication_signal & sig = ind; OnUserInputTone(sig.m_signalType[0], sig.HasOptionalField(H245_UserInputIndication_signal::e_duration) ? (unsigned)sig.m_duration : 0, sig.m_rtp.m_logicalChannelNumber, sig.m_rtp.m_timestamp); break; } case H245_UserInputIndication::e_signalUpdate : { const H245_UserInputIndication_signalUpdate & sig = ind; OnUserInputTone(' ', sig.m_duration, sig.m_rtp.m_logicalChannelNumber, 0); break; } #ifdef H323_H249 case H245_UserInputIndication::e_genericInformation : { const H245_ArrayOf_GenericInformation & sig = ind; if ((sig.GetSize() > 0) && sig[0].HasOptionalField(H245_GenericMessage::e_subMessageIdentifier)) { const H245_CapabilityIdentifier & id = sig[0].m_messageIdentifier; if (id.GetTag() == H245_CapabilityIdentifier::e_standard) { const PASN_ObjectId & gid = id; PString sid = gid.AsString(); if (sid == H323_UserInputCapability::SubTypeOID[0]) { // Navigation OnUserInputIndicationNavigate(sig[0].m_messageContent); } else if (sid == H323_UserInputCapability::SubTypeOID[1]) { // Softkey OnUserInputIndicationSoftkey(sig[0].m_messageContent); } else if (sid == H323_UserInputCapability::SubTypeOID[2]) { // PointingDevice OnUserInputIndicationPointDevice(sig[0].m_messageContent); } else if (sid == H323_UserInputCapability::SubTypeOID[3]) { // Mode interface OnUserInputIndicationModal(sig[0].m_messageContent); } } } } #endif } } void H323Connection::OnUserInputInlineRFC2833(OpalRFC2833Info & info, INT) { if (!info.IsToneStart()) OnUserInputTone(info.GetTone(), info.GetDuration(), 0, info.GetTimestamp()); } void H323Connection::OnUserInputInBandDTMF(H323Codec::FilterInfo & info, INT) { // This function is set up as an 'audio filter'. // This allows us to access the 16 bit PCM audio (at 8Khz sample rate) // before the audio is passed on to the sound card (or other output device) #ifdef P_DTMF // Pass the 16 bit PCM audio through the DTMF decoder PString tones = dtmfDecoder.Decode((short *)info.buffer, info.bufferLength/sizeof(short)); if (!tones.IsEmpty()) { PTRACE(1, "DTMF detected. " << tones); PINDEX i; for (i = 0; i < tones.GetLength(); i++) { #if PTLIB_VER < 270 OnUserInputTone(tones[i], 0, 0, 0); #else OnUserInputTone(tones[i], 0, 0, PDTMFDecoder::DetectTime); #endif } } #endif } #ifdef H323_H249 void H323Connection::OnUserInputIndicationNavigate(const H245_ArrayOf_GenericParameter & contents) { } void H323Connection::OnUserInputIndicationSoftkey(const H245_ArrayOf_GenericParameter & contents) { } void H323Connection::OnUserInputIndicationPointDevice(const H245_ArrayOf_GenericParameter & contents) { } void H323Connection::OnUserInputIndicationModal(const H245_ArrayOf_GenericParameter & contents) { } #endif RTP_Session * H323Connection::GetSession(unsigned sessionID) const { return rtpSessions.GetSession(sessionID); } H323_RTP_Session * H323Connection::GetSessionCallbacks(unsigned sessionID) const { RTP_Session * session = rtpSessions.GetSession(sessionID); if (session == NULL) return NULL; PTRACE(3, "RTP\tFound existing session " << sessionID); PObject * data = session->GetUserData(); PAssert(PIsDescendant(data, H323_RTP_Session), PInvalidCast); return (H323_RTP_Session *)data; } RTP_Session * H323Connection::UseSession(unsigned sessionID, const H245_TransportAddress & taddr, H323Channel::Directions dir, RTP_QOS * rtpqos) { // We only support unicast IP at this time. if (taddr.GetTag() != H245_TransportAddress::e_unicastAddress) { return NULL; } // We must have a valid sessionID H.239 sometimes negotiates 0 if (sessionID < 0 || sessionID > 255) return NULL; const H245_UnicastAddress & uaddr = taddr; if (uaddr.GetTag() != H245_UnicastAddress::e_iPAddress #if P_HAS_IPV6 && uaddr.GetTag() != H245_UnicastAddress::e_iP6Address #endif ) { return NULL; } RTP_Session * session = rtpSessions.UseSession(sessionID); if (session != NULL) { ((RTP_UDP *) session)->Reopen(dir == H323Channel::IsReceiver); return session; } RTP_UDP * udp_session = new RTP_UDP( #ifdef H323_RTP_AGGREGATE useRTPAggregation ? endpoint.GetRTPAggregator() : NULL, #endif sessionID, remoteIsNAT); udp_session->SetUserData(new H323_RTP_UDP(*this, *udp_session, rtpqos)); rtpSessions.AddSession(udp_session); return udp_session; } PBoolean H323Connection::OnHandleH245GenericMessage(h245MessageType type, const H245_GenericMessage & pdu) { if (!pdu.HasOptionalField(H245_GenericMessage::e_subMessageIdentifier)) { PTRACE(2,"H323\tUnIdentified Generic Message Received!"); return false; } PString guid = PString(); const H245_CapabilityIdentifier & id = pdu.m_messageIdentifier; if (id.GetTag() == H245_CapabilityIdentifier::e_standard) { const PASN_ObjectId & gid = id; guid = gid.AsString(); } else if (id.GetTag() == H245_CapabilityIdentifier::e_h221NonStandard) { PTRACE(2,"H323\tUnknown NonStandard Generic Message Received!"); return false; } else if (id.GetTag() == H245_CapabilityIdentifier::e_uuid) { const PASN_OctetString & gid = id; guid = gid.AsString(); } else if (id.GetTag() == H245_CapabilityIdentifier::e_domainBased) { const PASN_IA5String & gid = id; guid = gid; } if (pdu.HasOptionalField(H245_GenericMessage::e_messageContent)) return OnReceivedGenericMessage(type,guid,pdu.m_messageContent); else return OnReceivedGenericMessage(type,guid); } #ifdef H323_H46024A PBoolean H323Connection::ReceivedH46024AMessage(bool toStart) { if (m_H46024Astate < 3) { if (m_H46024Ainitator && !toStart) { PTRACE(4,"H46024A\tCONFLICT: wait for Media initiate Indication"); return true; } else { PTRACE(4,"H46024A\tReceived Indication to " << (toStart ? "initiate" : "wait for") << " direct connection"); if (m_H46024Astate == 0) // We are the receiver m_H46024Astate = (toStart ? 1 : 2); for (std::map::const_iterator r = m_NATSockets.begin(); r != m_NATSockets.end(); ++r) { NAT_Sockets sockets = r->second; ((H46019UDPSocket *)sockets.rtp)->H46024Adirect(toStart); ((H46019UDPSocket *)sockets.rtcp)->H46024Adirect(toStart); } } if (!toStart) { PTRACE(4,"H46024A\tReply for remote to " << (!toStart ? "initiate" : "wait for") << " direct connection"); SendH46024AMessage(!toStart); } m_H46024Astate = 3; } return true; } bool GetUnsignedGenericMessage(unsigned id, const H245_ArrayOf_GenericParameter & params, unsigned & val) { for (PINDEX i=0; i < params.GetSize(); i++) { const H245_GenericParameter & param = params[i]; const H245_ParameterIdentifier & idm = param.m_parameterIdentifier; if (idm.GetTag() == H245_ParameterIdentifier::e_standard) { const PASN_Integer & idx = idm; if (idx == id) { const H245_ParameterValue & genvalue = params[i].m_parameterValue; if ((genvalue.GetTag() == H245_ParameterValue::e_unsignedMin) || (genvalue.GetTag() == H245_ParameterValue::e_unsignedMax) || (genvalue.GetTag() == H245_ParameterValue::e_unsigned32Min) || (genvalue.GetTag() == H245_ParameterValue::e_unsigned32Max)) { const PASN_Integer & xval = genvalue; val = xval; return true; } } } } PTRACE(4,"H46024A\tError finding Transport parameter " << id); return false; } bool GetStringGenericOctetString(unsigned id, const H245_ArrayOf_GenericParameter & params, PString & str) { for (PINDEX i=0; i < params.GetSize(); i++) { const H245_GenericParameter & param = params[i]; const H245_ParameterIdentifier & idm = param.m_parameterIdentifier; if (idm.GetTag() == H245_ParameterIdentifier::e_standard) { const PASN_Integer & idx = idm; if (idx == id) { const H245_ParameterValue & genvalue = params[i].m_parameterValue; if (genvalue.GetTag() == H245_ParameterValue::e_octetString) { const PASN_OctetString & valg = genvalue; PASN_IA5String data; valg.DecodeSubType(data); str = data; return true; } } } } PTRACE(4,"H46024A\tError finding String parameter " << id); return false; } bool GetUnsignedGeneric(unsigned id, const H245_ArrayOf_GenericParameter & params, unsigned & num) { for (PINDEX i=0; i < params.GetSize(); i++) { const H245_GenericParameter & param = params[i]; const H245_ParameterIdentifier & idm = param.m_parameterIdentifier; if (idm.GetTag() == H245_ParameterIdentifier::e_standard) { const PASN_Integer & idx = idm; if (idx == id) { const H245_ParameterValue & genvalue = params[i].m_parameterValue; if (genvalue.GetTag() == H245_ParameterValue::e_unsigned32Min) { const PASN_Integer & valg = genvalue; num = valg; return true; } } } } PTRACE(4,"H46024A\tError finding unsigned parameter " << id); return false; } bool GetTransportGenericOctetString(unsigned id, const H245_ArrayOf_GenericParameter & params, H323TransportAddress & str) { for (PINDEX i=0; i < params.GetSize(); i++) { const H245_GenericParameter & param = params[i]; const H245_ParameterIdentifier & idm = param.m_parameterIdentifier; if (idm.GetTag() == H245_ParameterIdentifier::e_standard) { const PASN_Integer & idx = idm; if (idx == id) { const H245_ParameterValue & genvalue = params[i].m_parameterValue; if (genvalue.GetTag() == H245_ParameterValue::e_octetString) { const PASN_OctetString & valg = genvalue; H245_TransportAddress addr; valg.DecodeSubType(addr); str = H323TransportAddress(addr); return true; } } } } return false; } H245_GenericParameter & BuildGenericOctetString(H245_GenericParameter & param, unsigned id, const PASN_Object & data) { H245_ParameterIdentifier & idm = param.m_parameterIdentifier; idm.SetTag(H245_ParameterIdentifier::e_standard); PASN_Integer & idx = idm; idx = id; H245_ParameterValue & genvalue = param.m_parameterValue; genvalue.SetTag(H245_ParameterValue::e_octetString); PASN_OctetString & valg = genvalue; valg.EncodeSubType(data); return param; } H245_GenericParameter & BuildGenericOctetString(H245_GenericParameter & param, unsigned id, const H323TransportAddress & transport) { H245_TransportAddress data; transport.SetPDU(data); return BuildGenericOctetString(param, id, data); } H245_GenericParameter & BuildGenericInteger(H245_GenericParameter & param, unsigned id, unsigned val) { H245_ParameterIdentifier & idm = param.m_parameterIdentifier; idm.SetTag(H245_ParameterIdentifier::e_standard); PASN_Integer & idx = idm; idx = id; H245_ParameterValue & genvalue = param.m_parameterValue; genvalue.SetTag(H245_ParameterValue::e_unsignedMin); PASN_Integer & xval = genvalue; xval = val; return param; } H245_GenericParameter & BuildGenericUnsigned(H245_GenericParameter & param, unsigned id, unsigned val) { H245_ParameterIdentifier & idm = param.m_parameterIdentifier; idm.SetTag(H245_ParameterIdentifier::e_standard); PASN_Integer & idx = idm; idx = id; H245_ParameterValue & genvalue = param.m_parameterValue; genvalue.SetTag(H245_ParameterValue::e_unsigned32Min); PASN_Integer & xval = genvalue; xval = val; return param; } void BuildH46024AIndication(H323ControlPDU & pdu, const PString & oid, bool sender) { H245_GenericMessage & cap = pdu.Build(H245_IndicationMessage::e_genericIndication); cap.IncludeOptionalField(H245_GenericMessage::e_subMessageIdentifier); H245_CapabilityIdentifier & id = cap.m_messageIdentifier; id.SetTag(H245_CapabilityIdentifier::e_standard); PASN_ObjectId & gid = id; gid.SetValue(oid); // Indicate whether remote can start channel. cap.IncludeOptionalField(H245_GenericMessage::e_messageContent); H245_ArrayOf_GenericParameter & data = cap.m_messageContent; data.SetSize(1); BuildGenericInteger(data[0], 0, (sender ? 1 : 0)); } #endif // H323_H46024A #ifdef H323_H46024B bool DecodeH46024BRequest(unsigned id, const H245_ArrayOf_GenericParameter & params, H46024B_ArrayOf_AlternateAddress & val) { for (PINDEX i=0; i < params.GetSize(); i++) { const H245_GenericParameter & param = params[i]; const H245_ParameterIdentifier & idm = param.m_parameterIdentifier; if (idm.GetTag() == H245_ParameterIdentifier::e_standard) { const PASN_Integer & idx = idm; if (idx == id) { const H245_ParameterValue & genvalue = params[i].m_parameterValue; if (genvalue.GetTag() == H245_ParameterValue::e_octetString) { const PASN_OctetString & xval = genvalue; xval.DecodeSubType(val); return true; } } } } PTRACE(4,"H46024B\tError finding H46024BRequest " << id); return false; } void BuildH46024BResponse(H323ControlPDU & pdu) { H245_GenericMessage & cap = pdu.Build(H245_ResponseMessage::e_genericResponse); H245_CapabilityIdentifier & id = cap.m_messageIdentifier; id.SetTag(H245_CapabilityIdentifier::e_standard); PASN_ObjectId & gid = id; gid.SetValue(H46024BOID); cap.IncludeOptionalField(H245_GenericMessage::e_subMessageIdentifier); PASN_Integer & num = cap.m_subMessageIdentifier; num = 1; } void BuildH46024BIndication(H323ControlPDU & pdu) { H245_GenericMessage & cap = pdu.Build(H245_IndicationMessage::e_genericIndication); H245_CapabilityIdentifier & id = cap.m_messageIdentifier; id.SetTag(H245_CapabilityIdentifier::e_standard); PASN_ObjectId & gid = id; gid.SetValue(H46024BOID); } #endif // H323_H46024B #ifdef H323_H46024A PBoolean H323Connection::SendH46024AMessage(bool sender) { if ((sender && m_H46024Astate == 1) || // Message already sent (!sender && m_H46024Astate == 2)) // Message already sent return false; m_H46024Ainitator = sender; if (m_H46024Astate == 0) // We are instigator m_H46024Astate = (sender ? 2 : 1); PTRACE(4,"H46024A\tSending Control DirectMedia " << (sender ? "Initiate" : "Respond")); H323ControlPDU pdu; BuildH46024AIndication(pdu,H46024AOID,sender); return WriteControlPDU(pdu); } #endif PBoolean H323Connection::OnReceivedGenericMessage(h245MessageType type, const PString & id ) { #ifdef H323_H46024A if (id == H46024AOID && type == h245indication) { PTRACE(4,"H46024A\tReceived Generic Message."); return ReceivedH46024AMessage(true); } #endif #ifdef H323_H46024B if (id == H46024BOID && type == h245response) { PTRACE(4,"H46024B\tReceived Generic Response."); return true; } #endif return false; } PBoolean H323Connection::OnReceivedGenericMessage(h245MessageType type, const PString & id, const H245_ArrayOf_GenericParameter & content) { #ifdef H323_H46024A if (id == H46024AOID && type == h245indication) { PTRACE(4,"H46024A\tReceived Generic Indication."); unsigned start=0; if (GetUnsignedGenericMessage(0,content,start)) return ReceivedH46024AMessage((bool)start); } #endif #ifdef H323_H46024B if (id == H46024BOID && type == h245request) { H46024B_ArrayOf_AlternateAddress address; if (DecodeH46024BRequest(1, content, address)) { PTRACE(4,"H46024B\tReceived\n" << address); for (PINDEX i=0; i < address.GetSize(); ++i) { unsigned muxID = 0; if (address[i].HasOptionalField(H46024B_AlternateAddress::e_multiplexID)) muxID = address[i].m_multiplexID; std::map::const_iterator sockets_iter = m_NATSockets.find(address[i].m_sessionID); if (sockets_iter != m_NATSockets.end()) { NAT_Sockets sockets = sockets_iter->second; if (address[i].HasOptionalField(H46024B_AlternateAddress::e_rtpAddress)) { H323TransportAddress add = H323TransportAddress(address[i].m_rtpAddress); ((H46019UDPSocket *)sockets.rtp)->H46024Bdirect(add,muxID); } } } H323ControlPDU pdu; BuildH46024BResponse(pdu); return WriteControlPDU(pdu); } } #endif #ifdef H323_H239 if (id == OpalPluginCodec_Identifer_H239_GenericMessage) { H239Control * ctrl = (H239Control *)remoteCapabilities.FindCapability("H.239 Control"); if (!ctrl) return false; switch (type) { case h245request: return ctrl->HandleGenericMessage(H239Control::e_h245request,this, &content); case h245response: return ctrl->HandleGenericMessage(H239Control::e_h245response,this, &content); case h245command: return ctrl->HandleGenericMessage(H239Control::e_h245command,this, &content); case h245indication: return ctrl->HandleGenericMessage(H239Control::e_h245indication,this, &content); } } #endif return false; } #ifdef H323_H239 PBoolean H323Connection::SendH239GenericResponse(PBoolean response) { H239Control * ctrl = (H239Control *)remoteCapabilities.FindCapability("H.239 Control"); if (ctrl) return ctrl->SendGenericMessage(H239Control::e_h245response,this,response); return false; } H245NegLogicalChannels * H323Connection::GetLogicalChannels() { return logicalChannels; } #endif PBoolean H323Connection::OnReceiveOLCGenericInformation(unsigned sessionID, const H245_ArrayOf_GenericInformation & alternate, PBoolean isAck ) const { PBoolean success = false; #ifdef H323_H460 PTRACE(4,"Handling Generic OLC Session " << sessionID ); for (PINDEX i=0; i 0) { PTRACE(2,"H46019\tMultiplex remote detected. To send Multiplexed!"); } #endif H323TransportAddress RTPaddress; H323TransportAddress RTCPaddress; bool keepAliveAddress = false; if (params.HasOptionalField(H46019_TraversalParameters::e_keepAliveChannel)) { H245_TransportAddress & k = params.m_keepAliveChannel; RTPaddress = H323TransportAddress(k); PIPSocket::Address add; WORD port; RTPaddress.GetIpAndPort(add,port); RTCPaddress = H323TransportAddress(add,port+1); // Compute the RTCP Address keepAliveAddress = true; } unsigned payload = 0; if (params.HasOptionalField(H46019_TraversalParameters::e_keepAlivePayloadType)) { PASN_Integer & p = params.m_keepAlivePayloadType; payload = p; } unsigned ttl = 0; if (params.HasOptionalField(H46019_TraversalParameters::e_keepAliveInterval)) { H225_TimeToLive & a = params.m_keepAliveInterval; ttl = a; } std::map::const_iterator sockets_iter = m_NATSockets.find(sessionID); if (sockets_iter != m_NATSockets.end()) { NAT_Sockets sockets = sockets_iter->second; #ifdef H323_H46019M if (multiID > 0) { ((H46019UDPSocket *)sockets.rtp)->SetMultiplexID(multiID, isAck); ((H46019UDPSocket *)sockets.rtcp)->SetMultiplexID(multiID, isAck); if (keepAliveAddress) { PIPSocket::Address multiAddr; multiRTPaddress.GetIpAddress(multiAddr); // Sanity check.... if (!multiAddr.IsValid() || multiAddr.IsAny()|| multiAddr.IsLoopback()) { PTRACE(2,"H46019M\tInvalid Multiplex Address! Use Keepalive Address"); multiRTPaddress = RTPaddress; multiRTCPaddress = RTCPaddress; } ((H46019UDPSocket *)sockets.rtp)->Activate(multiRTPaddress,payload,ttl); ((H46019UDPSocket *)sockets.rtcp)->Activate(multiRTCPaddress,payload,ttl); } } else #endif { if (keepAliveAddress) { ((H46019UDPSocket *)sockets.rtp)->Activate(RTPaddress,payload,ttl); ((H46019UDPSocket *)sockets.rtcp)->Activate(RTCPaddress,payload,ttl); } } } success = true; } #ifdef H323_H46024A if (m_H46024Aenabled && (oid.AsString() == H46024AOID)) { PTRACE(4,"H46024A\tAlt Port Info:\n" << msg); PString m_CUI = PString(); H323TransportAddress m_altAddr1, m_altAddr2; unsigned m_altMuxID=0; bool error = false; if (!GetStringGenericOctetString(0,msg,m_CUI)) error = true; if (!GetTransportGenericOctetString(1,msg,m_altAddr1)) error = true; if (!GetTransportGenericOctetString(2,msg,m_altAddr2)) error = true; GetUnsignedGeneric(3,msg,m_altMuxID); if (!error) { std::map::const_iterator sockets_iter = m_NATSockets.find(sessionID); if (sockets_iter != m_NATSockets.end()) { NAT_Sockets sockets = sockets_iter->second; ((H46019UDPSocket *)sockets.rtp)->SetAlternateAddresses(m_altAddr1,m_CUI,m_altMuxID); ((H46019UDPSocket *)sockets.rtcp)->SetAlternateAddresses(m_altAddr2,m_CUI,m_altMuxID); success = true; } } } #endif #endif // H323_H46018 } #endif // H323_H460 return success; } PBoolean H323Connection::OnSendingOLCGenericInformation(const unsigned & sessionID, H245_ArrayOf_GenericInformation & generic, PBoolean isAck) const { #ifdef H323_H46018 PTRACE(4,"Set Generic " << (isAck ? "OLCack" : "OLC") << " Session " << sessionID ); if (m_H46019enabled) { unsigned payload=0; unsigned ttl=0; //H323TransportAddress m_keepAlive; #ifdef H323_H46019M H323TransportAddress m_multiRTPAddress, m_multiRTCPAddress; unsigned multiID=0; #endif #ifdef H323_H46024A PString m_cui = PString(); H323TransportAddress m_altAddr1, m_altAddr2; unsigned m_altMuxID=0; #endif std::map::const_iterator sockets_iter = m_NATSockets.find(sessionID); if (sockets_iter != m_NATSockets.end()) { NAT_Sockets sockets = sockets_iter->second; H46019UDPSocket * rtp = ((H46019UDPSocket *)sockets.rtp); H46019UDPSocket * rtcp = ((H46019UDPSocket *)sockets.rtcp); if (rtp->GetPingPayload() == 0) rtp->SetPingPayLoad(defH46019payload); payload = rtp->GetPingPayload(); if (rtp->GetTTL() == 0) rtp->SetTTL(ttl); ttl = rtp->GetTTL(); // Traversal Clients do not need to send a keepalive address // ToDo Server implementation - SH //PIPSocket::Address addr; WORD port=0; //if (rtp->GetLocalAddress(addr,port)) { // m_keepAlive = H323TransportAddress(addr,port); //} #ifdef H323_H46019M if (/*!isAck &&*/ m_H46019multiplex) { rtp->GetMultiplexAddress(m_multiRTPAddress,multiID, isAck); rtcp->GetMultiplexAddress(m_multiRTCPAddress,multiID, isAck); } #endif if (isAck) { rtp->Activate(); // Start the RTP Channel if not already started rtcp->Activate(); // Start the RTCP Channel if not already started } #ifdef H323_H46024A if (m_H46024Aenabled) { rtp->GetAlternateAddresses(m_altAddr1,m_cui, m_altMuxID); rtcp->GetAlternateAddresses(m_altAddr2,m_cui, m_altMuxID); } #endif } else { PTRACE(4,"H46019\tERROR NAT Socket not found for " << sessionID << " ABORTING!" ); return false; } H245_GenericInformation info; H245_CapabilityIdentifier & id = info.m_messageIdentifier; id.SetTag(H245_CapabilityIdentifier::e_standard); PASN_ObjectId & oid = id; oid.SetValue(H46019OID); bool h46019msg = false; H46019_TraversalParameters params; #ifdef H323_H46019M if (m_H46019multiplex) { // TODO: Change bool to direction multiplex to go params.IncludeOptionalField(H46019_TraversalParameters::e_multiplexedMediaChannel); H245_TransportAddress & mRTP = params.m_multiplexedMediaChannel; m_multiRTPAddress.SetPDU(mRTP); params.IncludeOptionalField(H46019_TraversalParameters::e_multiplexedMediaControlChannel); H245_TransportAddress & mRTCP = params.m_multiplexedMediaControlChannel; m_multiRTCPAddress.SetPDU(mRTCP); params.IncludeOptionalField(H46019_TraversalParameters::e_multiplexID); PASN_Integer & mID = params.m_multiplexID; mID = multiID; h46019msg = true; } #endif // Traversal Clients do not need to send a keepalive address only Servers - SH //if (!isAck) { // params.IncludeOptionalField(H46019_TraversalParameters::e_keepAliveChannel); // H245_TransportAddress & mKeep = params.m_keepAliveChannel; // m_keepAlive.SetPDU(mKeep); // h46019msg = true; //} if (!isAck && ttl > 0) { params.IncludeOptionalField(H46019_TraversalParameters::e_keepAliveInterval); H225_TimeToLive & a = params.m_keepAliveInterval; a = ttl; h46019msg = true; } if (isAck && payload > 0) { params.IncludeOptionalField(H46019_TraversalParameters::e_keepAlivePayloadType); PASN_Integer & p = params.m_keepAlivePayloadType; p = payload; h46019msg = true; } if (h46019msg) { PTRACE(4,"H46019\tTraversal Parameters: Send Session " << sessionID << " " << (isAck ? "OLCack" : "OLC") << "\n" << params); info.IncludeOptionalField(H245_GenericMessage::e_messageContent); H245_ArrayOf_GenericParameter & msg = info.m_messageContent; H245_GenericParameter genericParameter; H245_ParameterIdentifier & idm = genericParameter.m_parameterIdentifier; idm.SetTag(H245_ParameterIdentifier::e_standard); PASN_Integer & idx = idm; idx = 1; genericParameter.m_parameterValue.SetTag(H245_ParameterValue::e_octetString); H245_ParameterValue & octetValue = genericParameter.m_parameterValue; PASN_OctetString & raw = octetValue; raw.EncodeSubType(params); msg.SetSize(1); msg[0] = genericParameter; } PINDEX sz = generic.GetSize(); generic.SetSize(sz+1); generic[sz] = info; #ifdef H323_H46024A if (m_H46024Aenabled) { H245_GenericInformation alt; H245_CapabilityIdentifier & altid = alt.m_messageIdentifier; id.SetTag(H245_CapabilityIdentifier::e_standard); PASN_ObjectId & oid = altid; oid.SetValue(H46024AOID); alt.IncludeOptionalField(H245_GenericMessage::e_messageContent); H245_ArrayOf_GenericParameter & msg = alt.m_messageContent; msg.SetSize(3); BuildGenericOctetString(msg[0],0,(PASN_IA5String)m_cui); BuildGenericOctetString(msg[1],1,m_altAddr1); BuildGenericOctetString(msg[2],2,m_altAddr2); if (m_altMuxID) { msg.SetSize(4); BuildGenericUnsigned(msg[3],3,m_altMuxID); } PTRACE(5,"H46024A\tAltInfo:\n" << alt); PINDEX sz = generic.GetSize(); generic.SetSize(sz+1); generic[sz] = alt; } #endif if (generic.GetSize() > 0) return true; } #endif return false; } void H323Connection::ReleaseSession(unsigned sessionID) { // Clunge for H.239 which opens with a sessionID of 0 if ((rtpSessions.GetSession(sessionID) == NULL) && (sessionID > 3)) sessionID = 0; #ifdef H323_H46024A const RTP_Session * sess = GetSession(sessionID); if (sess && sess->GetReferenceCount() == 1) { // last session reference std::map::iterator sockets_iter = m_NATSockets.find(sessionID); if (sockets_iter != m_NATSockets.end()) m_NATSockets.erase(sockets_iter); else { sockets_iter = m_NATSockets.find(0); if (sockets_iter != m_NATSockets.end()) m_NATSockets.erase(sockets_iter); } } #endif rtpSessions.ReleaseSession(sessionID); } void H323Connection::UpdateSession(unsigned oldSessionID, unsigned newSessionID) { rtpSessions.MoveSession(oldSessionID,newSessionID); } void H323Connection::OnRTPStatistics(const RTP_Session & session) const { #ifdef H323_H4609 if (!m_h4609Final && session.GetPacketsReceived() > 0) H4609QueueStats(session); #endif endpoint.OnRTPStatistics(*this, session); } void H323Connection::OnRTPFinalStatistics(const RTP_Session & session) const { #ifdef H323_H4609 if (session.GetPacketsReceived() > 0) H4609QueueStats(session); #endif endpoint.OnRTPFinalStatistics(*this, session); } void H323Connection::OnRxSenderReport(unsigned sessionID, const RTP_Session::SenderReport & send, const RTP_Session::ReceiverReportArray & recv) const { } #ifdef H323_H4609 H323Connection::H4609Statistics::H4609Statistics() { meanEndToEndDelay = 0; worstEndToEndDelay = 0; packetsReceived = 0; accumPacketLost = 0; packetLossRate = 0; fractionLostRate = 0; meanJitter = 0; worstJitter = 0; bandwidth = 0; sessionid = 1; } void H323Connection::H4609QueueStats(const RTP_Session & session) const { if (!m_h4609enabled || (m_h4609Stats == NULL)) return; H4609Statistics * stat = new H4609Statistics(); stat->sendRTPaddr = H323TransportAddress(session.GetLocalTransportAddress()); stat->recvRTPaddr = H323TransportAddress(session.GetRemoteTransportAddress()); // stat->sendRTCPaddr = H323TransportAddress(); // stat->recvRTCPaddr = H323TransportAddress(); stat->sessionid = session.GetSessionID(); stat->meanEndToEndDelay = session.GetAverageSendTime(); stat->worstEndToEndDelay = session.GetMaximumSendTime(); stat->packetsReceived = session.GetPacketsReceived(); stat->accumPacketLost = session.GetPacketsLost(); stat->packetLossRate = session.GetPacketsLost() / session.GetPacketsReceived(); stat->fractionLostRate = stat->packetLossRate * 100; stat->meanJitter = session.GetAvgJitterTime(); stat->worstJitter = session.GetMaxJitterTime(); if (session.GetPacketsReceived() > 0 && session.GetAverageReceiveTime() > 0) stat->bandwidth = (unsigned)((session.GetOctetsReceived()/session.GetPacketsReceived()/session.GetAverageReceiveTime())*1000); if (m_h4609Stats) m_h4609Stats->Enqueue(stat); } PBoolean H323Connection::H4609DequeueStats(H4609Statistics & stat) { if (m_h4609Stats == NULL) return false; H4609Statistics * s = m_h4609Stats->Dequeue(); if (s != NULL) stat = *s; return (s != NULL); } void H323Connection::H4609EnableStats() { m_h4609enabled = true; m_h4609Stats = new PQueue; } void H323Connection::H4609StatsFinal(PBoolean final) { m_h4609Final = final; } #endif static void AddSessionCodecName(PStringStream & name, H323Channel * channel) { if (channel == NULL) return; H323Codec * codec = channel->GetCodec(); if (codec == NULL) return; OpalMediaFormat mediaFormat = codec->GetMediaFormat(); if (mediaFormat.IsEmpty()) return; if (name.IsEmpty()) name << mediaFormat; else if (name != mediaFormat) name << " / " << mediaFormat; } PString H323Connection::GetSessionCodecNames(unsigned sessionID) const { PStringStream name; AddSessionCodecName(name, FindChannel(sessionID, FALSE)); AddSessionCodecName(name, FindChannel(sessionID, TRUE)); return name; } PBoolean H323Connection::RequestModeChange(const PString & newModes) { return requestModeProcedure->StartRequest(newModes); } PBoolean H323Connection::RequestModeChange(const H245_ArrayOf_ModeDescription & newModes) { return requestModeProcedure->StartRequest(newModes); } PBoolean H323Connection::OnRequestModeChange(const H245_RequestMode & pdu, H245_RequestModeAck & /*ack*/, H245_RequestModeReject & /*reject*/, PINDEX & selectedMode) { for (selectedMode = 0; selectedMode < pdu.m_requestedModes.GetSize(); selectedMode++) { PBoolean ok = TRUE; for (PINDEX i = 0; i < pdu.m_requestedModes[selectedMode].GetSize(); i++) { if (localCapabilities.FindCapability(pdu.m_requestedModes[selectedMode][i]) == NULL) { ok = FALSE; break; } } if (ok) return TRUE; } PTRACE(1, "H245\tMode change rejected as does not have capabilities"); return FALSE; } void H323Connection::OnModeChanged(const H245_ModeDescription & newMode) { CloseAllLogicalChannels(FALSE); // Start up the new ones for (PINDEX i = 0; i < newMode.GetSize(); i++) { H323Capability * capability = localCapabilities.FindCapability(newMode[i]); if (PAssertNULL(capability) != NULL) {// Should not occur as OnRequestModeChange checks them if (!OpenLogicalChannel(*capability, capability->GetDefaultSessionID(), H323Channel::IsTransmitter)) { PTRACE(1, "H245\tCould not open channel after mode change: " << *capability); } } } } void H323Connection::OnAcceptModeChange(const H245_RequestModeAck & pdu) { #if H323_T38 if (t38ModeChangeCapabilities.IsEmpty()) return; PTRACE(2, "H323\tT.38 mode change accepted."); // Now we have conviced the other side to send us T.38 data we should do the // same assuming the RequestModeChangeT38() function provided a list of \n // separaete capability names to start. Only one will be. CloseAllLogicalChannels(FALSE); PStringArray modes = t38ModeChangeCapabilities.Lines(); PINDEX first, last; if (pdu.m_response.GetTag() == H245_RequestModeAck_response::e_willTransmitMostPreferredMode) { first = 0; last = 1; } else { first = 1; last = modes.GetSize(); } for (PINDEX i = first; i < last; i++) { H323Capability * capability = localCapabilities.FindCapability(modes[i]); if (capability != NULL && OpenLogicalChannel(*capability, capability->GetDefaultSessionID(), H323Channel::IsTransmitter)) { PTRACE(1, "H245\tOpened " << *capability << " after T.38 mode change"); break; } PTRACE(1, "H245\tCould not open channel after T.38 mode change"); } t38ModeChangeCapabilities = PString::Empty(); #endif } void H323Connection::OnRefusedModeChange(const H245_RequestModeReject * /*pdu*/) { #ifdef H323_T38 if (!t38ModeChangeCapabilities) { PTRACE(2, "H323\tT.38 mode change rejected."); t38ModeChangeCapabilities = PString::Empty(); } #endif } void H323Connection::OnSendARQ(H225_AdmissionRequest & arq) { #ifdef H323_H460 if (OnSendFeatureSet(H460_MessageType::e_admissionRequest, arq.m_featureSet, true)) arq.IncludeOptionalField(H225_AdmissionRequest::e_featureSet); H225_FeatureSet fs; if (OnSendFeatureSet(H460_MessageType::e_admissionRequest, fs, false)) { if (fs.HasOptionalField(H225_FeatureSet::e_supportedFeatures)) { arq.IncludeOptionalField(H225_AdmissionRequest::e_genericData); H225_ArrayOf_FeatureDescriptor & fsn = fs.m_supportedFeatures; H225_ArrayOf_GenericData & data = arq.m_genericData; for (PINDEX i=0; i < fsn.GetSize(); i++) { PINDEX lastPos = data.GetSize(); data.SetSize(lastPos+1); data[lastPos] = fsn[i]; } } } #endif endpoint.OnSendARQ(*this, arq); } void H323Connection::OnReceivedACF(const H225_AdmissionConfirm & acf) { #ifdef H323_H460 if (acf.HasOptionalField(H225_AdmissionConfirm::e_featureSet)) OnReceiveFeatureSet(H460_MessageType::e_admissionConfirm, acf.m_featureSet); if (acf.HasOptionalField(H225_AdmissionConfirm::e_genericData)) { const H225_ArrayOf_GenericData & data = acf.m_genericData; if (data.GetSize() > 0) { H225_FeatureSet fs; fs.IncludeOptionalField(H225_FeatureSet::e_supportedFeatures); H225_ArrayOf_FeatureDescriptor & fsn = fs.m_supportedFeatures; fsn.SetSize(data.GetSize()); for (PINDEX i=0; i < data.GetSize(); i++) fsn[i] = (H225_FeatureDescriptor &)data[i]; OnReceiveFeatureSet(H460_MessageType::e_admissionConfirm, fs); } } #endif endpoint.OnReceivedACF(*this, acf); } void H323Connection::OnReceivedARJ(const H225_AdmissionReject & arj) { if (arj.m_rejectReason.GetTag() == H225_AdmissionRejectReason::e_routeCallToGatekeeper) { H323SignalPDU facilityPDU; H225_Facility_UUIE * fac = facilityPDU.BuildFacility(*this,false, H225_FacilityReason::e_routeCallToGatekeeper); H323Gatekeeper * gatekeeper = endpoint.GetGatekeeper(); if (gatekeeper) { H323TransportAddress add = gatekeeper->GetGatekeeperRouteAddress(); fac->IncludeOptionalField(H225_Facility_UUIE::e_alternativeAddress); add.SetPDU(fac->m_alternativeAddress); WriteSignalPDU(facilityPDU); } } #ifdef H323_H460 if (arj.HasOptionalField(H225_AdmissionReject::e_featureSet)) OnReceiveFeatureSet(H460_MessageType::e_admissionConfirm, arj.m_featureSet); if (arj.HasOptionalField(H225_AdmissionReject::e_genericData)) { const H225_ArrayOf_GenericData & data = arj.m_genericData; if (data.GetSize() > 0) { H225_FeatureSet fs; fs.IncludeOptionalField(H225_FeatureSet::e_supportedFeatures); H225_ArrayOf_FeatureDescriptor & fsn = fs.m_supportedFeatures; fsn.SetSize(data.GetSize()); for (PINDEX i=0; i < data.GetSize(); i++) fsn[i] = (H225_FeatureDescriptor &)data[i]; OnReceiveFeatureSet(H460_MessageType::e_admissionReject, fs); } } #endif endpoint.OnReceivedARJ(*this, arj); } void H323Connection::OnSendIRR(H225_InfoRequestResponse & irr) const { #ifdef H323_H460 H225_FeatureSet fs; if (OnSendFeatureSet(H460_MessageType::e_inforequestresponse, fs, false)) { if (fs.HasOptionalField(H225_FeatureSet::e_supportedFeatures)) { irr.IncludeOptionalField(H225_InfoRequestResponse::e_genericData); H225_ArrayOf_FeatureDescriptor & fsn = fs.m_supportedFeatures; H225_ArrayOf_GenericData & data = irr.m_genericData; for (PINDEX i=0; i < fsn.GetSize(); i++) { PINDEX lastPos = data.GetSize(); data.SetSize(lastPos+1); data[lastPos] = fsn[i]; } } } #endif } void H323Connection::OnSendDRQ(H225_DisengageRequest & drq) const { #ifdef H323_H460 H225_FeatureSet fs; if (OnSendFeatureSet(H460_MessageType::e_disengagerequest, fs, false)) { if (fs.HasOptionalField(H225_FeatureSet::e_supportedFeatures)) { drq.IncludeOptionalField(H225_DisengageRequest::e_genericData); H225_ArrayOf_FeatureDescriptor & fsn = fs.m_supportedFeatures; H225_ArrayOf_GenericData & data = drq.m_genericData; for (PINDEX i=0; i < fsn.GetSize(); i++) { PINDEX lastPos = data.GetSize(); data.SetSize(lastPos+1); data[lastPos] = fsn[i]; } } } #endif } #ifdef H323_T120 OpalT120Protocol * H323Connection::CreateT120ProtocolHandler() { if (t120handler == NULL) t120handler = endpoint.CreateT120ProtocolHandler(*this); return t120handler; } #endif #ifdef H323_T38 OpalT38Protocol * H323Connection::CreateT38ProtocolHandler() { if (t38handler == NULL) t38handler = endpoint.CreateT38ProtocolHandler(*this); return t38handler; } PBoolean H323Connection::RequestModeChangeT38(const char * capabilityNames) { t38ModeChangeCapabilities = capabilityNames; if (RequestModeChange(t38ModeChangeCapabilities)) return TRUE; t38ModeChangeCapabilities = PString::Empty(); return FALSE; } #endif // H323_T38 #ifdef H323_H224 OpalH224Handler * H323Connection::CreateH224ProtocolHandler(H323Channel::Directions dir, unsigned sessionID) { return endpoint.CreateH224ProtocolHandler(dir, *this, sessionID); } OpalH281Handler * H323Connection::CreateH281ProtocolHandler(OpalH224Handler & h224Handler) { return endpoint.CreateH281ProtocolHandler(h224Handler); } #endif #ifdef H323_FILE PBoolean H323Connection::OpenFileTransferSession(const H323FileTransferList & list, H323ChannelNumber & num) { PBoolean filetransferOpen = FALSE; for (PINDEX i = 0; i < localCapabilities.GetSize(); i++) { H323Capability & localCapability = localCapabilities[i]; if ((localCapability.GetMainType() == H323Capability::e_Data) && (localCapability.GetSubType() == H245_DataApplicationCapability_application::e_genericDataCapability)) { H323FileTransferCapability * remoteCapability = (H323FileTransferCapability *)remoteCapabilities.FindCapability(localCapability); if (remoteCapability != NULL) { PTRACE(3, "H323\tFile Transfer Available " << *remoteCapability); remoteCapability->SetFileTransferList(list); if (logicalChannels->Open(*remoteCapability, OpalMediaFormat::DefaultFileSessionID,num)) { filetransferOpen = TRUE; break; } PTRACE(2, "H323\tFileTranfer OpenLogicalChannel failed: " << *remoteCapability); } break; } } return filetransferOpen; } PBoolean H323Connection::CloseFileTransferSession(unsigned num) { CloseLogicalChannel(num,false); return TRUE; } H323FileTransferHandler * H323Connection::CreateFileTransferHandler(unsigned sessionID, H323Channel::Directions dir, H323FileTransferList & filelist) { if (!filelist.IsMaster() && !OpenFileTransferChannel(dir == H323Channel::IsTransmitter, filelist)) return NULL; return OnCreateFileTransferHandler(sessionID,dir,filelist); } H323FileTransferHandler * H323Connection::OnCreateFileTransferHandler(unsigned sessionID, H323Channel::Directions dir, H323FileTransferList & filelist) { return new H323FileTransferHandler(*this, sessionID, dir, filelist); } PBoolean H323Connection::OpenFileTransferChannel( PBoolean isEncoder, H323FileTransferList & filelist ) { return endpoint.OpenFileTransferChannel(*this,isEncoder,filelist); } #endif PBoolean H323Connection::GetAdmissionRequestAuthentication(const H225_AdmissionRequest & /*arq*/, H235Authenticators & /*authenticators*/) { return FALSE; } const H323Transport & H323Connection::GetControlChannel() const { return *(controlChannel != NULL ? controlChannel : signallingChannel); } void H323Connection::SetAudioJitterDelay(unsigned minDelay, unsigned maxDelay) { PAssert(minDelay <= 1000 && maxDelay <= 1000, PInvalidParameter); if (minDelay < 10) minDelay = 10; minAudioJitterDelay = minDelay; if (maxDelay < minDelay) maxDelay = minDelay; maxAudioJitterDelay = maxDelay; } void H323Connection::SendLogicalChannelMiscCommand(H323Channel & channel, unsigned commandIdentifier) { if (channel.GetDirection() == H323Channel::IsReceiver) { H323ControlPDU pdu; H245_CommandMessage & command = pdu.Build(H245_CommandMessage::e_miscellaneousCommand); H245_MiscellaneousCommand & miscCommand = command; miscCommand.m_logicalChannelNumber = (unsigned)channel.GetNumber(); miscCommand.m_type.SetTag(commandIdentifier); WriteControlPDU(pdu); } } void H323Connection::SetEnforcedDurationLimit(unsigned seconds) { enforcedDurationLimit.SetInterval(0, seconds); } void H323Connection::MonitorCallStatus() { if (!Lock()) return; if (endpoint.GetRoundTripDelayRate() > 0 && !roundTripDelayTimer.IsRunning()) { roundTripDelayTimer = endpoint.GetRoundTripDelayRate(); StartRoundTripDelay(); } if (endpoint.GetNoMediaTimeout() > 0) { PBoolean oneRunning = FALSE; PBoolean allSilent = TRUE; for (PINDEX i = 0; i < logicalChannels->GetSize(); i++) { H323Channel * channel = logicalChannels->GetChannelAt(i); if (channel != NULL && PIsDescendant(channel, H323_RTPChannel)) { if (channel->IsRunning()) { oneRunning = TRUE; if (((H323_RTPChannel *)channel)->GetSilenceDuration() < endpoint.GetNoMediaTimeout()) { allSilent = FALSE; break; } } } } if (oneRunning && allSilent) ClearCall(EndedByTransportFail); } if (enforcedDurationLimit.GetResetTime() > 0 && enforcedDurationLimit == 0) ClearCall(EndedByDurationLimit); Unlock(); } #ifdef P_STUN H323Connection::SessionInformation::SessionInformation(const OpalGloballyUniqueID & id, const PString & token, unsigned session, const H323Connection * conn) : m_callID(id), m_callToken(token), m_sessionID(session), m_recvMultiID(0), m_sendMultiID(0), m_connection(conn) { #ifdef H323_H46019M if (conn->IsH46019Multiplexed()) m_recvMultiID = conn->GetEndPoint().GetMultiplexID(); #endif #ifdef H323_H46024A // Some random number bases on the session id (for H.460.24A) int rand = PRandom::Number((session *100),((session+1)*100)-1); m_CUI = PString(rand); PTRACE(4,"H46024A\tGenerated CUI s: " << session << " value: " << m_CUI); #else m_CUI = PString(); #endif } const PString & H323Connection::SessionInformation::GetCallToken() { return m_callToken; } unsigned H323Connection::SessionInformation::GetSessionID() const { return m_sessionID; } void H323Connection::SessionInformation::SetSendMultiplexID(unsigned id) { m_sendMultiID = id; } unsigned H323Connection::SessionInformation::GetRecvMultiplexID() const { return m_recvMultiID; } H323Connection::SessionInformation * H323Connection::BuildSessionInformation(unsigned sessionID) const { return new SessionInformation(GetCallIdentifier(),GetCallToken(),sessionID, this); } const OpalGloballyUniqueID & H323Connection::SessionInformation::GetCallIdentifer() { return m_callID; } const PString & H323Connection::SessionInformation::GetCUI() { return m_CUI; } const H323Connection * H323Connection::SessionInformation::GetConnection() { return m_connection; } #endif #ifdef H323_H460 void H323Connection::DisableFeatures(PBoolean disable) { disableH460 = disable; } #ifdef H323_H46018 void H323Connection::H46019SetCallReceiver() { PTRACE(4,"H46019\tCall is receiver."); m_H46019CallReceiver = true; } void H323Connection::H46019Enabled() { m_H46019enabled = true; } void H323Connection::H46019MultiEnabled() { m_H46019multiplex = true; } PBoolean H323Connection::IsH46019Multiplexed() const { return m_H46019multiplex; } #endif // H323_H46018 #ifdef H323_H46024A void H323Connection::H46024AEnabled() { m_H46024Aenabled = true; } #endif // H323_H46024A #ifdef H323_H46024B void H323Connection::H46024BEnabled() { m_H46024Benabled = true; } #endif // H323_H46024A #endif // H323_H460 PBoolean H323Connection::OnH245AddressConflict() { #ifdef H323_H46018 return m_H46019enabled; #else return false; #endif } PBoolean H323Connection::OnSendFeatureSet(unsigned code, H225_FeatureSet & feats, PBoolean advertise) const { #ifdef H323_H460 if (disableH460) return FALSE; return features->SendFeature(code, feats, advertise); #else return endpoint.OnSendFeatureSet(code, feats, advertise); #endif } void H323Connection::OnReceiveFeatureSet(unsigned code, const H225_FeatureSet & feats, PBoolean genericData) const { #ifdef H323_H460 if (disableH460) return; features->ReceiveFeature(code, feats, genericData); #else endpoint.OnReceiveFeatureSet(code, feats, genericData); #endif } #ifdef H323_H460 void H323Connection::DisableFeatureSet(int msgtype) const { features->DisableAllFeatures(msgtype); } #endif #ifndef DISABLE_CALLAUTH void H323Connection::SetAuthenticationConnection() { for (PINDEX i = 0; i < EPAuthenticators.GetSize(); i++) { EPAuthenticators[i].SetConnection(this); } } const H235Authenticators & H323Connection::GetEPAuthenticators() const { return EPAuthenticators; } PBoolean H323Connection::OnCallAuthentication(const PString & username, PString & password) { return endpoint.OnCallAuthentication(username,password); } PBoolean H323Connection::OnEPAuthenticationFailed(H235Authenticator::ValidationResult result) const { return FALSE; } void H323Connection::OnAuthenticationFinalise(unsigned pdu,PBYTEArray & rawData) { for (PINDEX i = 0; i < EPAuthenticators.GetSize(); i++) { if (EPAuthenticators[i].IsSecuredSignalPDU(pdu,FALSE)) EPAuthenticators[i].Finalise(rawData); } } #endif #ifdef H323_SIGNAL_AGGREGATE void H323Connection::AggregateSignalChannel(H323Transport * transport) { signalAggregator = new AggregatedH225Handle(*transport, *this); endpoint.GetSignallingAggregator()->AddHandle(signalAggregator); } void H323Connection::AggregateControlChannel(H323Transport * transport) { if (!OnStartHandleControlChannel()) return; controlAggregator = new AggregatedH245Handle(*transport, *this); endpoint.GetSignallingAggregator()->AddHandle(controlAggregator); } H323AggregatedH2x5Handle::H323AggregatedH2x5Handle(H323Transport & _transport, H323Connection & _connection) : PAggregatedHandle(TRUE), fd(((PIPSocket *)_transport.GetBaseReadChannel())->GetHandle()), transport(_transport), connection(_connection) { pduDataLen = 0; } H323AggregatedH2x5Handle::~H323AggregatedH2x5Handle() { } PAggregatorFDList_t H323AggregatedH2x5Handle::GetFDs() { PAggregatorFDList_t list; list.push_back(&fd); return list; } PBoolean H323AggregatedH2x5Handle::OnRead() { // // pduDataLen : size of PDU data read so far, always less than pduBufferLen , always same as pduBuffer.GetSize() // // if the transport is not open, then there is no need process it further if (!transport.IsOpen()) return FALSE; // make sure have a minimum headroom in the PDU buffer PINDEX pduSize = pduBuffer.GetSize(); if ((pduSize - pduDataLen) < 100) { pduSize += 1000; pduBuffer.SetSize(pduSize); } // save the timeout PTimeInterval oldTimeout = transport.GetReadTimeout(); transport.SetReadTimeout(0); // read PDU until no more data is available PINDEX numRead = 0; PBoolean ok = TRUE; { char * ptr = (char *)(pduBuffer.GetPointer() + pduDataLen); int lenLeftInBuffer = pduSize - pduDataLen; while (ok && (lenLeftInBuffer > numRead) && transport.Read(ptr + numRead, lenLeftInBuffer - numRead)) { ok = transport.GetLastReadCount() > 0; if (ok) numRead += transport.GetLastReadCount(); } if (pduBuffer[0] != 0x03) { PTRACE(1, "Error"); ok = FALSE; } } // reset timeout transport.SetReadTimeout(oldTimeout); // if data was actually received, then process it if (ok) { // if PDU length was zero, must be timeout if (numRead == 0) { PBYTEArray dataPDU; ok = HandlePDU(FALSE, dataPDU); } else { // update pdu size for new data that was read pduDataLen += numRead; while (pduDataLen > 0) { // convert data to PDU. If PDU is invalid, return error PINDEX pduLen = pduDataLen; if (!transport.ExtractPDU(pduBuffer, pduLen)) { ok = FALSE; break; } // if PDU is not yet complete, then no error but stop looping else if (pduLen <= 0) { ok = TRUE; break; } // otherwise process the data else { transport.SetErrorValues(PChannel::NoError, 0, PChannel::LastReadError); { // create the new PDU PBYTEArray dataPDU((const BYTE *)pduBuffer+4, pduLen-4, FALSE); ok = HandlePDU(ok, dataPDU); } // remove processed data if (pduLen == pduDataLen) pduDataLen = 0; else { pduDataLen -= pduLen; memcpy(pduBuffer.GetPointer(), pduBuffer.GetPointer() + pduLen, pduDataLen); } } } } } return ok; } #endif #ifdef H323_H248 PBoolean H323Connection::OnSendServiceControlSessions( H225_ArrayOf_ServiceControlSession & serviceControl, H225_ServiceControlSession_reason reason) const { PString amount; PBoolean credit=TRUE; unsigned time; PString url; if (!OnSendServiceControl(amount, credit,time, url) && (serviceControlSessions.GetSize() == 0)) return FALSE; H323Dictionary SCS = serviceControlSessions; if (!amount) { H323CallCreditServiceControl * csc = new H323CallCreditServiceControl(amount,credit,time); SCS.SetAt(H323ServiceControlSession::e_CallCredit, csc); } if (!url) { H323HTTPServiceControl * scs = new H323HTTPServiceControl(url); SCS.SetAt(H323ServiceControlSession::e_URL, scs); } for (PINDEX j = 0; j < SCS.GetSize(); j++) { PINDEX last = serviceControl.GetSize(); serviceControl.SetSize(last+1); H225_ServiceControlSession & pdu = serviceControl[last]; unsigned type = ((H323ServiceControlSession *)SCS.GetAt(j))->GetType(); pdu.m_sessionId = type; pdu.m_reason = reason; if (SCS[type].OnSendingPDU(pdu.m_contents)) pdu.IncludeOptionalField(H225_ServiceControlSession::e_contents); } return TRUE; } void H323Connection::OnReceiveServiceControlSessions(const H225_ArrayOf_ServiceControlSession & serviceControl) { PBoolean isContent=FALSE; for (PINDEX i = 0; i < serviceControl.GetSize(); i++) { H225_ServiceControlSession & pdu = serviceControl[i]; H323ServiceControlSession * session = NULL; unsigned sessionId = pdu.m_sessionId; if (serviceControlSessions.Contains(sessionId)) { session = &serviceControlSessions[sessionId]; if (pdu.HasOptionalField(H225_ServiceControlSession::e_contents)) { if (session->OnReceivedPDU(pdu.m_contents)) isContent = TRUE; } } if (session == NULL && pdu.HasOptionalField(H225_ServiceControlSession::e_contents)) { session = endpoint.CreateServiceControlSession(pdu.m_contents); serviceControlSessions.SetAt(sessionId, session); } } if (isContent) { PString amount; PBoolean credit=TRUE; unsigned time; PString url; PString ldapURL; PString baseDN; for (PINDEX j = 0; j < serviceControlSessions.GetSize(); j++) { H323ServiceControlSession & sess = serviceControlSessions[j]; switch (sess.GetType()) { case H323ServiceControlSession::e_CallCredit: ((H323CallCreditServiceControl &)sess).GetValue(amount,credit,time); break; case H323ServiceControlSession::e_URL: ((H323HTTPServiceControl &)sess).GetValue(url); break; #ifdef H323_H350 case H323ServiceControlSession::e_NonStandard: ((H323H350ServiceControl &)sess).GetValue(ldapURL,baseDN); break; #endif default: break; } } OnReceiveServiceControl(amount,credit,time,url,ldapURL,baseDN); } } void H323Connection::OnReceiveServiceControl(const PString & amount, PBoolean credit, const unsigned & timelimit, const PString & url, const PString & ldapURL, const PString & baseDN ) { if (!amount) endpoint.OnCallCreditServiceControl(amount,credit,timelimit); if (!url) endpoint.OnHTTPServiceControl(0, 0, url); #ifdef H323_H350 if (!ldapURL) endpoint.OnH350ServiceControl(ldapURL,baseDN); #endif } PBoolean H323Connection::OnSendServiceControl(PString & /*amount*/, PBoolean /*credit*/, unsigned & /*timelimit*/, PString & /*url*/ ) const { return FALSE; } #endif void H323Connection::DisableH245inSETUP() { doH245inSETUP = FALSE; } void H323Connection::DisableH245QoS() { doH245QoS = FALSE; } PBoolean H323Connection::H245QoSEnabled() const { return doH245QoS; } void H323Connection::SetNonCallConnection() { nonCallConnection = TRUE; } PBoolean H323Connection::IsNonCallConnection() const { return nonCallConnection; } #ifdef H323_H460 H460_FeatureSet * H323Connection::GetFeatureSet() { return features; } #endif #ifdef H323_VIDEO #ifdef H323_H239 PBoolean H323Connection::AcceptH239ControlRequest(PBoolean & delay) { delay = false; return true; } PBoolean H323Connection::OnH239ControlRequest(H239Control * ctrl) { if (!ctrl) return false; PBoolean delay = false; if (AcceptH239ControlRequest(delay)) { if (delay) return true; return ctrl->SendGenericMessage(H239Control::e_h245response, this, true); } else return ctrl->SendGenericMessage(H239Control::e_h245response, this, false); } PBoolean H323Connection::OnH239ControlCommand(H239Control * ctrl) { return true; } PBoolean H323Connection::OpenH239Channel() { if (callToken.IsEmpty()) { PTRACE(2,"H239\tERROR Open Channel. Not in a call"); return false; } H239Control * ctrl = (H239Control *)remoteCapabilities.FindCapability("H.239 Control"); if (ctrl) return ctrl->SendGenericMessage(H239Control::e_h245request, this); PTRACE(2,"H239\tERROR Open Channel. No Remote Support"); return false; } PBoolean H323Connection::CloseH239Channel(H323Capability::CapabilityDirection dir) { H239Control * ctrl = (H239Control *)remoteCapabilities.FindCapability("H.239 Control"); if (ctrl) return ctrl->CloseChannel(this, dir); return false; } void H323Connection::OnH239SessionStarted(int sessionNum, H323Capability::CapabilityDirection dir) { if (!sessionNum) return; H239Control * ctrl = (H239Control *)remoteCapabilities.FindCapability("H.239 Control"); if (ctrl) return ctrl->SetChannelNum(sessionNum,dir); } void H323Connection::OnH239SessionEnded(int sessionNum, H323Capability::CapabilityDirection dir) { if (!sessionNum) return; H239Control * ctrl = (H239Control *)remoteCapabilities.FindCapability("H.239 Control"); if (ctrl) return ctrl->SetChannelNum(0,dir); } void H323Connection::OpenExtendedVideoSessionDenied() { PTRACE(2,"H239\tOpen Request denied from remote"); } PBoolean H323Connection::OpenExtendedVideoSession(H323ChannelNumber & num, int defaultSession) { PBoolean applicationOpen = false; for (PINDEX i = 0; i < localCapabilities.GetSize(); i++) { H323Capability & localCapability = localCapabilities[i]; if ((localCapability.GetMainType() == H323Capability::e_Video) && (localCapability.GetSubType() == H245_VideoCapability::e_extendedVideoCapability)) { H323ExtendedVideoCapability * remoteCapability = (H323ExtendedVideoCapability *)remoteCapabilities.FindCapability(localCapability); if (remoteCapability != NULL) { PTRACE(3, "H323\tApplication Available " << *remoteCapability); for (PINDEX j = 0; j < remoteCapability->GetSize(); j++) { // SessionID must be 0 becouse otherwise Tandberg will reject the OLC. if (logicalChannels->Open(remoteCapability[j], defaultSession ,num)) { applicationOpen = TRUE; break; } else { PTRACE(2, "H323\tApplication OpenLogicalChannel failed: " << *remoteCapability); } } if (applicationOpen) break; } } } return applicationOpen; } PBoolean H323Connection::CloseExtendedVideoSession(const H323ChannelNumber & num) { CloseLogicalChannel(num,num.IsFromRemote()); return TRUE; } PBoolean H323Connection::OpenExtendedVideoChannel(PBoolean isEncoding,H323VideoCodec & codec) { return endpoint.OpenExtendedVideoChannel(*this, isEncoding, codec); } #endif // H323_H239 #endif // NO_H323_VIDEO #ifdef H323_H230 PBoolean H323Connection::OpenConferenceControlSession(PBoolean & chairControl, PBoolean & extControls) { chairControl = FALSE; extControls = FALSE; for (PINDEX i = 0; i < localCapabilities.GetSize(); i++) { H323Capability & localCapability = localCapabilities[i]; if (localCapability.GetMainType() == H323Capability::e_ConferenceControl) { H323_ConferenceControlCapability * remoteCapability = (H323_ConferenceControlCapability *)remoteCapabilities.FindCapability(localCapability); if (remoteCapability != NULL) { chairControl = remoteCapability->SupportChairControls(); extControls = remoteCapability->SupportExtControls(); PTRACE(3, "H323\tConference Controls Available for " << GetCallToken() << " Chair " << chairControl << " T124 " << extControls); return TRUE; } } } PTRACE(4, "H323\tConference Controls not available for " << GetCallToken()); return FALSE; } #endif // H323_H230 ///////////////////////////////////////////////////////////////////////////// h323plus/src/h450/0000755000175000017500000000000011430554061012355 5ustar markmarkh323plus/src/h450/h4502.cxx0000644000175000017500000012762011015524417013654 0ustar markmark// // h4502.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h4502.h" #endif #include #include "h450/h4502.h" #define new PNEW #if ! H323_DISABLE_H4502 #ifndef PASN_NOPRINTON const static PASN_Names Names_H4502_DummyArg[]={ {"extensionSeq",0} ,{"nonStandardData",1} }; #endif // // DummyArg // H4502_DummyArg::H4502_DummyArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4502_DummyArg,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4502_DummyArg::operator H4502_ExtensionSeq &() const #else H4502_DummyArg::operator H4502_ExtensionSeq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4502_ExtensionSeq), PInvalidCast); #endif return *(H4502_ExtensionSeq *)choice; } H4502_DummyArg::operator const H4502_ExtensionSeq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4502_ExtensionSeq), PInvalidCast); #endif return *(H4502_ExtensionSeq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4502_DummyArg::operator H225_NonStandardParameter &() const #else H4502_DummyArg::operator H225_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } H4502_DummyArg::operator const H225_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } PBoolean H4502_DummyArg::CreateObject() { switch (tag) { case e_extensionSeq : choice = new H4502_ExtensionSeq(); return TRUE; case e_nonStandardData : choice = new H225_NonStandardParameter(); return TRUE; } choice = NULL; return FALSE; } PObject * H4502_DummyArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4502_DummyArg::Class()), PInvalidCast); #endif return new H4502_DummyArg(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4502_DummyRes[]={ {"extensionSeq",0} ,{"nonStandardData",1} }; #endif // // DummyRes // H4502_DummyRes::H4502_DummyRes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4502_DummyRes,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4502_DummyRes::operator H4502_ExtensionSeq &() const #else H4502_DummyRes::operator H4502_ExtensionSeq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4502_ExtensionSeq), PInvalidCast); #endif return *(H4502_ExtensionSeq *)choice; } H4502_DummyRes::operator const H4502_ExtensionSeq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4502_ExtensionSeq), PInvalidCast); #endif return *(H4502_ExtensionSeq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4502_DummyRes::operator H225_NonStandardParameter &() const #else H4502_DummyRes::operator H225_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } H4502_DummyRes::operator const H225_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } PBoolean H4502_DummyRes::CreateObject() { switch (tag) { case e_extensionSeq : choice = new H4502_ExtensionSeq(); return TRUE; case e_nonStandardData : choice = new H225_NonStandardParameter(); return TRUE; } choice = NULL; return FALSE; } PObject * H4502_DummyRes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4502_DummyRes::Class()), PInvalidCast); #endif return new H4502_DummyRes(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4502_EndDesignation[]={ {"primaryEnd",0} ,{"secondaryEnd",1} }; #endif // // EndDesignation // H4502_EndDesignation::H4502_EndDesignation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4502_EndDesignation,2 #endif ) { } H4502_EndDesignation & H4502_EndDesignation::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4502_EndDesignation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4502_EndDesignation::Class()), PInvalidCast); #endif return new H4502_EndDesignation(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4502_CallStatus[]={ {"answered",0} ,{"alerting",1} }; #endif // // CallStatus // H4502_CallStatus::H4502_CallStatus(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4502_CallStatus,2 #endif ) { } H4502_CallStatus & H4502_CallStatus::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4502_CallStatus::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4502_CallStatus::Class()), PInvalidCast); #endif return new H4502_CallStatus(*this); } // // CallIdentity // H4502_CallIdentity::H4502_CallIdentity(unsigned tag, PASN_Object::TagClass tagClass) : PASN_NumericString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 4); } H4502_CallIdentity & H4502_CallIdentity::operator=(const char * v) { SetValue(v); return *this; } H4502_CallIdentity & H4502_CallIdentity::operator=(const PString & v) { SetValue(v); return *this; } PObject * H4502_CallIdentity::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4502_CallIdentity::Class()), PInvalidCast); #endif return new H4502_CallIdentity(*this); } // // ExtensionSeq // H4502_ExtensionSeq::H4502_ExtensionSeq(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H4502_ExtensionSeq::CreateObject() const { return new H4501_Extension; } H4501_Extension & H4502_ExtensionSeq::operator[](PINDEX i) const { return (H4501_Extension &)array[i]; } PObject * H4502_ExtensionSeq::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4502_ExtensionSeq::Class()), PInvalidCast); #endif return new H4502_ExtensionSeq(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4502_CallTransferOperation[]={ {"callTransferIdentify",7} ,{"callTransferAbandon",8} ,{"callTransferInitiate",9} ,{"callTransferSetup",10} ,{"callTransferUpdate",13} ,{"subaddressTransfer",14} ,{"callTransferComplete",12} ,{"callTransferActive",11} }; #endif // // CallTransferOperation // H4502_CallTransferOperation::H4502_CallTransferOperation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 14, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4502_CallTransferOperation,8 #endif ) { } H4502_CallTransferOperation & H4502_CallTransferOperation::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4502_CallTransferOperation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4502_CallTransferOperation::Class()), PInvalidCast); #endif return new H4502_CallTransferOperation(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4502_CallTransferErrors[]={ {"unspecified",1008} ,{"invalidReroutingNumber",1004} ,{"unrecognizedCallIdentity",1005} ,{"establishmentFailure",1006} }; #endif // // CallTransferErrors // H4502_CallTransferErrors::H4502_CallTransferErrors(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 1008, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4502_CallTransferErrors,4 #endif ) { } H4502_CallTransferErrors & H4502_CallTransferErrors::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4502_CallTransferErrors::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4502_CallTransferErrors::Class()), PInvalidCast); #endif return new H4502_CallTransferErrors(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4502_CTInitiateArg_argumentExtension[]={ {"extensionSeq",0} ,{"nonStandardData",1} }; #endif // // CTInitiateArg_argumentExtension // H4502_CTInitiateArg_argumentExtension::H4502_CTInitiateArg_argumentExtension(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4502_CTInitiateArg_argumentExtension,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4502_CTInitiateArg_argumentExtension::operator H4502_ExtensionSeq &() const #else H4502_CTInitiateArg_argumentExtension::operator H4502_ExtensionSeq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4502_ExtensionSeq), PInvalidCast); #endif return *(H4502_ExtensionSeq *)choice; } H4502_CTInitiateArg_argumentExtension::operator const H4502_ExtensionSeq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4502_ExtensionSeq), PInvalidCast); #endif return *(H4502_ExtensionSeq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4502_CTInitiateArg_argumentExtension::operator H225_NonStandardParameter &() const #else H4502_CTInitiateArg_argumentExtension::operator H225_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } H4502_CTInitiateArg_argumentExtension::operator const H225_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } PBoolean H4502_CTInitiateArg_argumentExtension::CreateObject() { switch (tag) { case e_extensionSeq : choice = new H4502_ExtensionSeq(); return TRUE; case e_nonStandardData : choice = new H225_NonStandardParameter(); return TRUE; } choice = NULL; return FALSE; } PObject * H4502_CTInitiateArg_argumentExtension::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4502_CTInitiateArg_argumentExtension::Class()), PInvalidCast); #endif return new H4502_CTInitiateArg_argumentExtension(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4502_CTSetupArg_argumentExtension[]={ {"extensionSeq",0} ,{"nonStandardData",1} }; #endif // // CTSetupArg_argumentExtension // H4502_CTSetupArg_argumentExtension::H4502_CTSetupArg_argumentExtension(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4502_CTSetupArg_argumentExtension,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4502_CTSetupArg_argumentExtension::operator H4502_ExtensionSeq &() const #else H4502_CTSetupArg_argumentExtension::operator H4502_ExtensionSeq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4502_ExtensionSeq), PInvalidCast); #endif return *(H4502_ExtensionSeq *)choice; } H4502_CTSetupArg_argumentExtension::operator const H4502_ExtensionSeq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4502_ExtensionSeq), PInvalidCast); #endif return *(H4502_ExtensionSeq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4502_CTSetupArg_argumentExtension::operator H225_NonStandardParameter &() const #else H4502_CTSetupArg_argumentExtension::operator H225_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } H4502_CTSetupArg_argumentExtension::operator const H225_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } PBoolean H4502_CTSetupArg_argumentExtension::CreateObject() { switch (tag) { case e_extensionSeq : choice = new H4502_ExtensionSeq(); return TRUE; case e_nonStandardData : choice = new H225_NonStandardParameter(); return TRUE; } choice = NULL; return FALSE; } PObject * H4502_CTSetupArg_argumentExtension::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4502_CTSetupArg_argumentExtension::Class()), PInvalidCast); #endif return new H4502_CTSetupArg_argumentExtension(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4502_CTIdentifyRes_resultExtension[]={ {"extensionSeq",0} ,{"nonStandardData",1} }; #endif // // CTIdentifyRes_resultExtension // H4502_CTIdentifyRes_resultExtension::H4502_CTIdentifyRes_resultExtension(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4502_CTIdentifyRes_resultExtension,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4502_CTIdentifyRes_resultExtension::operator H4502_ExtensionSeq &() const #else H4502_CTIdentifyRes_resultExtension::operator H4502_ExtensionSeq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4502_ExtensionSeq), PInvalidCast); #endif return *(H4502_ExtensionSeq *)choice; } H4502_CTIdentifyRes_resultExtension::operator const H4502_ExtensionSeq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4502_ExtensionSeq), PInvalidCast); #endif return *(H4502_ExtensionSeq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4502_CTIdentifyRes_resultExtension::operator H225_NonStandardParameter &() const #else H4502_CTIdentifyRes_resultExtension::operator H225_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } H4502_CTIdentifyRes_resultExtension::operator const H225_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } PBoolean H4502_CTIdentifyRes_resultExtension::CreateObject() { switch (tag) { case e_extensionSeq : choice = new H4502_ExtensionSeq(); return TRUE; case e_nonStandardData : choice = new H225_NonStandardParameter(); return TRUE; } choice = NULL; return FALSE; } PObject * H4502_CTIdentifyRes_resultExtension::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4502_CTIdentifyRes_resultExtension::Class()), PInvalidCast); #endif return new H4502_CTIdentifyRes_resultExtension(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4502_CTUpdateArg_argumentExtension[]={ {"extensionSeq",0} ,{"nonStandardData",1} }; #endif // // CTUpdateArg_argumentExtension // H4502_CTUpdateArg_argumentExtension::H4502_CTUpdateArg_argumentExtension(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4502_CTUpdateArg_argumentExtension,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4502_CTUpdateArg_argumentExtension::operator H4502_ExtensionSeq &() const #else H4502_CTUpdateArg_argumentExtension::operator H4502_ExtensionSeq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4502_ExtensionSeq), PInvalidCast); #endif return *(H4502_ExtensionSeq *)choice; } H4502_CTUpdateArg_argumentExtension::operator const H4502_ExtensionSeq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4502_ExtensionSeq), PInvalidCast); #endif return *(H4502_ExtensionSeq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4502_CTUpdateArg_argumentExtension::operator H225_NonStandardParameter &() const #else H4502_CTUpdateArg_argumentExtension::operator H225_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } H4502_CTUpdateArg_argumentExtension::operator const H225_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } PBoolean H4502_CTUpdateArg_argumentExtension::CreateObject() { switch (tag) { case e_extensionSeq : choice = new H4502_ExtensionSeq(); return TRUE; case e_nonStandardData : choice = new H225_NonStandardParameter(); return TRUE; } choice = NULL; return FALSE; } PObject * H4502_CTUpdateArg_argumentExtension::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4502_CTUpdateArg_argumentExtension::Class()), PInvalidCast); #endif return new H4502_CTUpdateArg_argumentExtension(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4502_SubaddressTransferArg_argumentExtension[]={ {"extensionSeq",0} ,{"nonStandardData",1} }; #endif // // SubaddressTransferArg_argumentExtension // H4502_SubaddressTransferArg_argumentExtension::H4502_SubaddressTransferArg_argumentExtension(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4502_SubaddressTransferArg_argumentExtension,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4502_SubaddressTransferArg_argumentExtension::operator H4502_ExtensionSeq &() const #else H4502_SubaddressTransferArg_argumentExtension::operator H4502_ExtensionSeq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4502_ExtensionSeq), PInvalidCast); #endif return *(H4502_ExtensionSeq *)choice; } H4502_SubaddressTransferArg_argumentExtension::operator const H4502_ExtensionSeq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4502_ExtensionSeq), PInvalidCast); #endif return *(H4502_ExtensionSeq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4502_SubaddressTransferArg_argumentExtension::operator H225_NonStandardParameter &() const #else H4502_SubaddressTransferArg_argumentExtension::operator H225_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } H4502_SubaddressTransferArg_argumentExtension::operator const H225_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } PBoolean H4502_SubaddressTransferArg_argumentExtension::CreateObject() { switch (tag) { case e_extensionSeq : choice = new H4502_ExtensionSeq(); return TRUE; case e_nonStandardData : choice = new H225_NonStandardParameter(); return TRUE; } choice = NULL; return FALSE; } PObject * H4502_SubaddressTransferArg_argumentExtension::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4502_SubaddressTransferArg_argumentExtension::Class()), PInvalidCast); #endif return new H4502_SubaddressTransferArg_argumentExtension(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4502_CTCompleteArg_argumentExtension[]={ {"extensionSeq",0} ,{"nonStandardData",1} }; #endif // // CTCompleteArg_argumentExtension // H4502_CTCompleteArg_argumentExtension::H4502_CTCompleteArg_argumentExtension(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4502_CTCompleteArg_argumentExtension,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4502_CTCompleteArg_argumentExtension::operator H4502_ExtensionSeq &() const #else H4502_CTCompleteArg_argumentExtension::operator H4502_ExtensionSeq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4502_ExtensionSeq), PInvalidCast); #endif return *(H4502_ExtensionSeq *)choice; } H4502_CTCompleteArg_argumentExtension::operator const H4502_ExtensionSeq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4502_ExtensionSeq), PInvalidCast); #endif return *(H4502_ExtensionSeq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4502_CTCompleteArg_argumentExtension::operator H225_NonStandardParameter &() const #else H4502_CTCompleteArg_argumentExtension::operator H225_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } H4502_CTCompleteArg_argumentExtension::operator const H225_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } PBoolean H4502_CTCompleteArg_argumentExtension::CreateObject() { switch (tag) { case e_extensionSeq : choice = new H4502_ExtensionSeq(); return TRUE; case e_nonStandardData : choice = new H225_NonStandardParameter(); return TRUE; } choice = NULL; return FALSE; } PObject * H4502_CTCompleteArg_argumentExtension::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4502_CTCompleteArg_argumentExtension::Class()), PInvalidCast); #endif return new H4502_CTCompleteArg_argumentExtension(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4502_CTActiveArg_argumentExtension[]={ {"extensionSeq",0} ,{"nonStandardData",1} }; #endif // // CTActiveArg_argumentExtension // H4502_CTActiveArg_argumentExtension::H4502_CTActiveArg_argumentExtension(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4502_CTActiveArg_argumentExtension,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4502_CTActiveArg_argumentExtension::operator H4502_ExtensionSeq &() const #else H4502_CTActiveArg_argumentExtension::operator H4502_ExtensionSeq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4502_ExtensionSeq), PInvalidCast); #endif return *(H4502_ExtensionSeq *)choice; } H4502_CTActiveArg_argumentExtension::operator const H4502_ExtensionSeq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4502_ExtensionSeq), PInvalidCast); #endif return *(H4502_ExtensionSeq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4502_CTActiveArg_argumentExtension::operator H225_NonStandardParameter &() const #else H4502_CTActiveArg_argumentExtension::operator H225_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } H4502_CTActiveArg_argumentExtension::operator const H225_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } PBoolean H4502_CTActiveArg_argumentExtension::CreateObject() { switch (tag) { case e_extensionSeq : choice = new H4502_ExtensionSeq(); return TRUE; case e_nonStandardData : choice = new H225_NonStandardParameter(); return TRUE; } choice = NULL; return FALSE; } PObject * H4502_CTActiveArg_argumentExtension::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4502_CTActiveArg_argumentExtension::Class()), PInvalidCast); #endif return new H4502_CTActiveArg_argumentExtension(*this); } // // CTInitiateArg // H4502_CTInitiateArg::H4502_CTInitiateArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H4502_CTInitiateArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "callIdentity = " << setprecision(indent) << m_callIdentity << '\n'; strm << setw(indent+18) << "reroutingNumber = " << setprecision(indent) << m_reroutingNumber << '\n'; if (HasOptionalField(e_argumentExtension)) strm << setw(indent+20) << "argumentExtension = " << setprecision(indent) << m_argumentExtension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4502_CTInitiateArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4502_CTInitiateArg), PInvalidCast); #endif const H4502_CTInitiateArg & other = (const H4502_CTInitiateArg &)obj; Comparison result; if ((result = m_callIdentity.Compare(other.m_callIdentity)) != EqualTo) return result; if ((result = m_reroutingNumber.Compare(other.m_reroutingNumber)) != EqualTo) return result; if ((result = m_argumentExtension.Compare(other.m_argumentExtension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4502_CTInitiateArg::GetDataLength() const { PINDEX length = 0; length += m_callIdentity.GetObjectLength(); length += m_reroutingNumber.GetObjectLength(); if (HasOptionalField(e_argumentExtension)) length += m_argumentExtension.GetObjectLength(); return length; } PBoolean H4502_CTInitiateArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_callIdentity.Decode(strm)) return FALSE; if (!m_reroutingNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_argumentExtension) && !m_argumentExtension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4502_CTInitiateArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_callIdentity.Encode(strm); m_reroutingNumber.Encode(strm); if (HasOptionalField(e_argumentExtension)) m_argumentExtension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4502_CTInitiateArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4502_CTInitiateArg::Class()), PInvalidCast); #endif return new H4502_CTInitiateArg(*this); } // // CTSetupArg // H4502_CTSetupArg::H4502_CTSetupArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H4502_CTSetupArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "callIdentity = " << setprecision(indent) << m_callIdentity << '\n'; if (HasOptionalField(e_transferringNumber)) strm << setw(indent+21) << "transferringNumber = " << setprecision(indent) << m_transferringNumber << '\n'; if (HasOptionalField(e_argumentExtension)) strm << setw(indent+20) << "argumentExtension = " << setprecision(indent) << m_argumentExtension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4502_CTSetupArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4502_CTSetupArg), PInvalidCast); #endif const H4502_CTSetupArg & other = (const H4502_CTSetupArg &)obj; Comparison result; if ((result = m_callIdentity.Compare(other.m_callIdentity)) != EqualTo) return result; if ((result = m_transferringNumber.Compare(other.m_transferringNumber)) != EqualTo) return result; if ((result = m_argumentExtension.Compare(other.m_argumentExtension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4502_CTSetupArg::GetDataLength() const { PINDEX length = 0; length += m_callIdentity.GetObjectLength(); if (HasOptionalField(e_transferringNumber)) length += m_transferringNumber.GetObjectLength(); if (HasOptionalField(e_argumentExtension)) length += m_argumentExtension.GetObjectLength(); return length; } PBoolean H4502_CTSetupArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_callIdentity.Decode(strm)) return FALSE; if (HasOptionalField(e_transferringNumber) && !m_transferringNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_argumentExtension) && !m_argumentExtension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4502_CTSetupArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_callIdentity.Encode(strm); if (HasOptionalField(e_transferringNumber)) m_transferringNumber.Encode(strm); if (HasOptionalField(e_argumentExtension)) m_argumentExtension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4502_CTSetupArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4502_CTSetupArg::Class()), PInvalidCast); #endif return new H4502_CTSetupArg(*this); } // // CTIdentifyRes // H4502_CTIdentifyRes::H4502_CTIdentifyRes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H4502_CTIdentifyRes::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "callIdentity = " << setprecision(indent) << m_callIdentity << '\n'; strm << setw(indent+18) << "reroutingNumber = " << setprecision(indent) << m_reroutingNumber << '\n'; if (HasOptionalField(e_resultExtension)) strm << setw(indent+18) << "resultExtension = " << setprecision(indent) << m_resultExtension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4502_CTIdentifyRes::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4502_CTIdentifyRes), PInvalidCast); #endif const H4502_CTIdentifyRes & other = (const H4502_CTIdentifyRes &)obj; Comparison result; if ((result = m_callIdentity.Compare(other.m_callIdentity)) != EqualTo) return result; if ((result = m_reroutingNumber.Compare(other.m_reroutingNumber)) != EqualTo) return result; if ((result = m_resultExtension.Compare(other.m_resultExtension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4502_CTIdentifyRes::GetDataLength() const { PINDEX length = 0; length += m_callIdentity.GetObjectLength(); length += m_reroutingNumber.GetObjectLength(); if (HasOptionalField(e_resultExtension)) length += m_resultExtension.GetObjectLength(); return length; } PBoolean H4502_CTIdentifyRes::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_callIdentity.Decode(strm)) return FALSE; if (!m_reroutingNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_resultExtension) && !m_resultExtension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4502_CTIdentifyRes::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_callIdentity.Encode(strm); m_reroutingNumber.Encode(strm); if (HasOptionalField(e_resultExtension)) m_resultExtension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4502_CTIdentifyRes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4502_CTIdentifyRes::Class()), PInvalidCast); #endif return new H4502_CTIdentifyRes(*this); } // // CTUpdateArg // H4502_CTUpdateArg::H4502_CTUpdateArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { m_redirectionInfo.SetConstraints(PASN_Object::FixedConstraint, 1, 128); } #ifndef PASN_NOPRINTON void H4502_CTUpdateArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+20) << "redirectionNumber = " << setprecision(indent) << m_redirectionNumber << '\n'; if (HasOptionalField(e_redirectionInfo)) strm << setw(indent+18) << "redirectionInfo = " << setprecision(indent) << m_redirectionInfo << '\n'; if (HasOptionalField(e_basicCallInfoElements)) strm << setw(indent+24) << "basicCallInfoElements = " << setprecision(indent) << m_basicCallInfoElements << '\n'; if (HasOptionalField(e_argumentExtension)) strm << setw(indent+20) << "argumentExtension = " << setprecision(indent) << m_argumentExtension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4502_CTUpdateArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4502_CTUpdateArg), PInvalidCast); #endif const H4502_CTUpdateArg & other = (const H4502_CTUpdateArg &)obj; Comparison result; if ((result = m_redirectionNumber.Compare(other.m_redirectionNumber)) != EqualTo) return result; if ((result = m_redirectionInfo.Compare(other.m_redirectionInfo)) != EqualTo) return result; if ((result = m_basicCallInfoElements.Compare(other.m_basicCallInfoElements)) != EqualTo) return result; if ((result = m_argumentExtension.Compare(other.m_argumentExtension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4502_CTUpdateArg::GetDataLength() const { PINDEX length = 0; length += m_redirectionNumber.GetObjectLength(); if (HasOptionalField(e_redirectionInfo)) length += m_redirectionInfo.GetObjectLength(); if (HasOptionalField(e_basicCallInfoElements)) length += m_basicCallInfoElements.GetObjectLength(); if (HasOptionalField(e_argumentExtension)) length += m_argumentExtension.GetObjectLength(); return length; } PBoolean H4502_CTUpdateArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_redirectionNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_redirectionInfo) && !m_redirectionInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_basicCallInfoElements) && !m_basicCallInfoElements.Decode(strm)) return FALSE; if (HasOptionalField(e_argumentExtension) && !m_argumentExtension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4502_CTUpdateArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_redirectionNumber.Encode(strm); if (HasOptionalField(e_redirectionInfo)) m_redirectionInfo.Encode(strm); if (HasOptionalField(e_basicCallInfoElements)) m_basicCallInfoElements.Encode(strm); if (HasOptionalField(e_argumentExtension)) m_argumentExtension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4502_CTUpdateArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4502_CTUpdateArg::Class()), PInvalidCast); #endif return new H4502_CTUpdateArg(*this); } // // SubaddressTransferArg // H4502_SubaddressTransferArg::H4502_SubaddressTransferArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H4502_SubaddressTransferArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "redirectionSubaddress = " << setprecision(indent) << m_redirectionSubaddress << '\n'; if (HasOptionalField(e_argumentExtension)) strm << setw(indent+20) << "argumentExtension = " << setprecision(indent) << m_argumentExtension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4502_SubaddressTransferArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4502_SubaddressTransferArg), PInvalidCast); #endif const H4502_SubaddressTransferArg & other = (const H4502_SubaddressTransferArg &)obj; Comparison result; if ((result = m_redirectionSubaddress.Compare(other.m_redirectionSubaddress)) != EqualTo) return result; if ((result = m_argumentExtension.Compare(other.m_argumentExtension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4502_SubaddressTransferArg::GetDataLength() const { PINDEX length = 0; length += m_redirectionSubaddress.GetObjectLength(); if (HasOptionalField(e_argumentExtension)) length += m_argumentExtension.GetObjectLength(); return length; } PBoolean H4502_SubaddressTransferArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_redirectionSubaddress.Decode(strm)) return FALSE; if (HasOptionalField(e_argumentExtension) && !m_argumentExtension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4502_SubaddressTransferArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_redirectionSubaddress.Encode(strm); if (HasOptionalField(e_argumentExtension)) m_argumentExtension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4502_SubaddressTransferArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4502_SubaddressTransferArg::Class()), PInvalidCast); #endif return new H4502_SubaddressTransferArg(*this); } // // CTCompleteArg // H4502_CTCompleteArg::H4502_CTCompleteArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { m_redirectionInfo.SetConstraints(PASN_Object::FixedConstraint, 1, 128); } #ifndef PASN_NOPRINTON void H4502_CTCompleteArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "endDesignation = " << setprecision(indent) << m_endDesignation << '\n'; strm << setw(indent+20) << "redirectionNumber = " << setprecision(indent) << m_redirectionNumber << '\n'; if (HasOptionalField(e_basicCallInfoElements)) strm << setw(indent+24) << "basicCallInfoElements = " << setprecision(indent) << m_basicCallInfoElements << '\n'; if (HasOptionalField(e_redirectionInfo)) strm << setw(indent+18) << "redirectionInfo = " << setprecision(indent) << m_redirectionInfo << '\n'; strm << setw(indent+13) << "callStatus = " << setprecision(indent) << m_callStatus << '\n'; if (HasOptionalField(e_argumentExtension)) strm << setw(indent+20) << "argumentExtension = " << setprecision(indent) << m_argumentExtension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4502_CTCompleteArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4502_CTCompleteArg), PInvalidCast); #endif const H4502_CTCompleteArg & other = (const H4502_CTCompleteArg &)obj; Comparison result; if ((result = m_endDesignation.Compare(other.m_endDesignation)) != EqualTo) return result; if ((result = m_redirectionNumber.Compare(other.m_redirectionNumber)) != EqualTo) return result; if ((result = m_basicCallInfoElements.Compare(other.m_basicCallInfoElements)) != EqualTo) return result; if ((result = m_redirectionInfo.Compare(other.m_redirectionInfo)) != EqualTo) return result; if ((result = m_callStatus.Compare(other.m_callStatus)) != EqualTo) return result; if ((result = m_argumentExtension.Compare(other.m_argumentExtension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4502_CTCompleteArg::GetDataLength() const { PINDEX length = 0; length += m_endDesignation.GetObjectLength(); length += m_redirectionNumber.GetObjectLength(); if (HasOptionalField(e_basicCallInfoElements)) length += m_basicCallInfoElements.GetObjectLength(); if (HasOptionalField(e_redirectionInfo)) length += m_redirectionInfo.GetObjectLength(); length += m_callStatus.GetObjectLength(); if (HasOptionalField(e_argumentExtension)) length += m_argumentExtension.GetObjectLength(); return length; } PBoolean H4502_CTCompleteArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_endDesignation.Decode(strm)) return FALSE; if (!m_redirectionNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_basicCallInfoElements) && !m_basicCallInfoElements.Decode(strm)) return FALSE; if (HasOptionalField(e_redirectionInfo) && !m_redirectionInfo.Decode(strm)) return FALSE; if (!m_callStatus.Decode(strm)) return FALSE; if (HasOptionalField(e_argumentExtension) && !m_argumentExtension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4502_CTCompleteArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_endDesignation.Encode(strm); m_redirectionNumber.Encode(strm); if (HasOptionalField(e_basicCallInfoElements)) m_basicCallInfoElements.Encode(strm); if (HasOptionalField(e_redirectionInfo)) m_redirectionInfo.Encode(strm); m_callStatus.Encode(strm); if (HasOptionalField(e_argumentExtension)) m_argumentExtension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4502_CTCompleteArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4502_CTCompleteArg::Class()), PInvalidCast); #endif return new H4502_CTCompleteArg(*this); } // // CTActiveArg // H4502_CTActiveArg::H4502_CTActiveArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { m_connectedInfo.SetConstraints(PASN_Object::FixedConstraint, 1, 128); } #ifndef PASN_NOPRINTON void H4502_CTActiveArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+19) << "connectedAddress = " << setprecision(indent) << m_connectedAddress << '\n'; if (HasOptionalField(e_basicCallInfoElements)) strm << setw(indent+24) << "basicCallInfoElements = " << setprecision(indent) << m_basicCallInfoElements << '\n'; if (HasOptionalField(e_connectedInfo)) strm << setw(indent+16) << "connectedInfo = " << setprecision(indent) << m_connectedInfo << '\n'; if (HasOptionalField(e_argumentExtension)) strm << setw(indent+20) << "argumentExtension = " << setprecision(indent) << m_argumentExtension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4502_CTActiveArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4502_CTActiveArg), PInvalidCast); #endif const H4502_CTActiveArg & other = (const H4502_CTActiveArg &)obj; Comparison result; if ((result = m_connectedAddress.Compare(other.m_connectedAddress)) != EqualTo) return result; if ((result = m_basicCallInfoElements.Compare(other.m_basicCallInfoElements)) != EqualTo) return result; if ((result = m_connectedInfo.Compare(other.m_connectedInfo)) != EqualTo) return result; if ((result = m_argumentExtension.Compare(other.m_argumentExtension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4502_CTActiveArg::GetDataLength() const { PINDEX length = 0; length += m_connectedAddress.GetObjectLength(); if (HasOptionalField(e_basicCallInfoElements)) length += m_basicCallInfoElements.GetObjectLength(); if (HasOptionalField(e_connectedInfo)) length += m_connectedInfo.GetObjectLength(); if (HasOptionalField(e_argumentExtension)) length += m_argumentExtension.GetObjectLength(); return length; } PBoolean H4502_CTActiveArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_connectedAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_basicCallInfoElements) && !m_basicCallInfoElements.Decode(strm)) return FALSE; if (HasOptionalField(e_connectedInfo) && !m_connectedInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_argumentExtension) && !m_argumentExtension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4502_CTActiveArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_connectedAddress.Encode(strm); if (HasOptionalField(e_basicCallInfoElements)) m_basicCallInfoElements.Encode(strm); if (HasOptionalField(e_connectedInfo)) m_connectedInfo.Encode(strm); if (HasOptionalField(e_argumentExtension)) m_argumentExtension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4502_CTActiveArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4502_CTActiveArg::Class()), PInvalidCast); #endif return new H4502_CTActiveArg(*this); } #endif // if ! H323_DISABLE_H4502 // End of h4502.cxx h323plus/src/h450/h4508.cxx0000644000175000017500000002217411015524434013657 0ustar markmark// // h4508.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h4508.h" #endif #include #include "h450/h4508.h" #define new PNEW #if ! H323_DISABLE_H4508 #ifndef PASN_NOPRINTON const static PASN_Names Names_H4508_NameOperations[]={ {"callingName",0} ,{"alertingName",1} ,{"connectedName",2} ,{"busyName",3} }; #endif // // NameOperations // H4508_NameOperations::H4508_NameOperations(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 3, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4508_NameOperations,4 #endif ) { } H4508_NameOperations & H4508_NameOperations::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4508_NameOperations::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4508_NameOperations::Class()), PInvalidCast); #endif return new H4508_NameOperations(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4508_Name[]={ {"namePresentationAllowed",0} ,{"namePresentationRestricted",1} ,{"nameNotAvailable",2} }; #endif // // Name // H4508_Name::H4508_Name(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4508_Name,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4508_Name::operator H4508_NamePresentationAllowed &() const #else H4508_Name::operator H4508_NamePresentationAllowed &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4508_NamePresentationAllowed), PInvalidCast); #endif return *(H4508_NamePresentationAllowed *)choice; } H4508_Name::operator const H4508_NamePresentationAllowed &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4508_NamePresentationAllowed), PInvalidCast); #endif return *(H4508_NamePresentationAllowed *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4508_Name::operator H4508_NamePresentationRestricted &() const #else H4508_Name::operator H4508_NamePresentationRestricted &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4508_NamePresentationRestricted), PInvalidCast); #endif return *(H4508_NamePresentationRestricted *)choice; } H4508_Name::operator const H4508_NamePresentationRestricted &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4508_NamePresentationRestricted), PInvalidCast); #endif return *(H4508_NamePresentationRestricted *)choice; } PBoolean H4508_Name::CreateObject() { switch (tag) { case e_namePresentationAllowed : choice = new H4508_NamePresentationAllowed(); return TRUE; case e_namePresentationRestricted : choice = new H4508_NamePresentationRestricted(); return TRUE; case e_nameNotAvailable : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * H4508_Name::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4508_Name::Class()), PInvalidCast); #endif return new H4508_Name(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4508_NamePresentationAllowed[]={ {"simpleName",0} ,{"extendedName",1} }; #endif // // NamePresentationAllowed // H4508_NamePresentationAllowed::H4508_NamePresentationAllowed(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4508_NamePresentationAllowed,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4508_NamePresentationAllowed::operator H4508_SimpleName &() const #else H4508_NamePresentationAllowed::operator H4508_SimpleName &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4508_SimpleName), PInvalidCast); #endif return *(H4508_SimpleName *)choice; } H4508_NamePresentationAllowed::operator const H4508_SimpleName &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4508_SimpleName), PInvalidCast); #endif return *(H4508_SimpleName *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4508_NamePresentationAllowed::operator H4508_ExtendedName &() const #else H4508_NamePresentationAllowed::operator H4508_ExtendedName &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4508_ExtendedName), PInvalidCast); #endif return *(H4508_ExtendedName *)choice; } H4508_NamePresentationAllowed::operator const H4508_ExtendedName &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4508_ExtendedName), PInvalidCast); #endif return *(H4508_ExtendedName *)choice; } PBoolean H4508_NamePresentationAllowed::CreateObject() { switch (tag) { case e_simpleName : choice = new H4508_SimpleName(); return TRUE; case e_extendedName : choice = new H4508_ExtendedName(); return TRUE; } choice = NULL; return FALSE; } PObject * H4508_NamePresentationAllowed::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4508_NamePresentationAllowed::Class()), PInvalidCast); #endif return new H4508_NamePresentationAllowed(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4508_NamePresentationRestricted[]={ {"simpleName",0} ,{"extendedName",1} ,{"restrictedNull",2} }; #endif // // NamePresentationRestricted // H4508_NamePresentationRestricted::H4508_NamePresentationRestricted(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4508_NamePresentationRestricted,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4508_NamePresentationRestricted::operator H4508_SimpleName &() const #else H4508_NamePresentationRestricted::operator H4508_SimpleName &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4508_SimpleName), PInvalidCast); #endif return *(H4508_SimpleName *)choice; } H4508_NamePresentationRestricted::operator const H4508_SimpleName &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4508_SimpleName), PInvalidCast); #endif return *(H4508_SimpleName *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4508_NamePresentationRestricted::operator H4508_ExtendedName &() const #else H4508_NamePresentationRestricted::operator H4508_ExtendedName &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4508_ExtendedName), PInvalidCast); #endif return *(H4508_ExtendedName *)choice; } H4508_NamePresentationRestricted::operator const H4508_ExtendedName &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4508_ExtendedName), PInvalidCast); #endif return *(H4508_ExtendedName *)choice; } PBoolean H4508_NamePresentationRestricted::CreateObject() { switch (tag) { case e_simpleName : choice = new H4508_SimpleName(); return TRUE; case e_extendedName : choice = new H4508_ExtendedName(); return TRUE; case e_restrictedNull : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * H4508_NamePresentationRestricted::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4508_NamePresentationRestricted::Class()), PInvalidCast); #endif return new H4508_NamePresentationRestricted(*this); } // // SimpleName // H4508_SimpleName::H4508_SimpleName(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 50); } H4508_SimpleName::H4508_SimpleName(const char * v) { SetValue(v); } H4508_SimpleName::H4508_SimpleName(const PString & v) { SetValue(v); } H4508_SimpleName::H4508_SimpleName(const PBYTEArray & v) { SetValue(v); } H4508_SimpleName & H4508_SimpleName::operator=(const char * v) { SetValue(v); return *this; } H4508_SimpleName & H4508_SimpleName::operator=(const PString & v) { SetValue(v); return *this; } H4508_SimpleName & H4508_SimpleName::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H4508_SimpleName::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4508_SimpleName::Class()), PInvalidCast); #endif return new H4508_SimpleName(*this); } // // ExtendedName // H4508_ExtendedName::H4508_ExtendedName(unsigned tag, PASN_Object::TagClass tagClass) : PASN_BMPString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 256); } H4508_ExtendedName & H4508_ExtendedName::operator=(const char * v) { SetValue(v); return *this; } H4508_ExtendedName & H4508_ExtendedName::operator=(const PString & v) { SetValue(v); return *this; } H4508_ExtendedName & H4508_ExtendedName::operator=(const PWCharArray & v) { SetValue(v); return *this; } H4508_ExtendedName & H4508_ExtendedName::operator=(const PASN_BMPString & v) { SetValue(v); return *this; } PObject * H4508_ExtendedName::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4508_ExtendedName::Class()), PInvalidCast); #endif return new H4508_ExtendedName(*this); } #endif // if ! H323_DISABLE_H4508 // End of h4508.cxx h323plus/src/h450/h450pdu.cxx0000644000175000017500000022445111430554061014302 0ustar markmark/* * h450pdu.cxx * * H.450 Helper functions * * Open H323 Library * * Copyright (c) 2001 Norwood Systems Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: h450pdu.cxx,v $ * Revision 1.4 2010/08/11 17:04:49 willamowius * someone needs to check this alias type * * Revision 1.3 2010/06/24 14:13:05 willamowius * fix crash if H.450.2 transfer destination can't be resolved * * Revision 1.2 2008/05/23 11:23:11 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:51:39 shorne * First commit of h323plus * * Revision 1.1.2.1 2006/12/24 05:32:55 shorne * File restructuring * * Revision 1.30 2006/06/27 12:35:03 csoutheren * Patch 1366328 - Support for H.450.3 divertingLegInformation2 * Thanks to Norbert Bartalsky * * Revision 1.29 2006/05/16 11:38:27 shorne * Added DNS SRV support * * Revision 1.28 2006/01/26 03:43:06 shorne * Fix typo * * Revision 1.27 2005/07/12 12:28:57 csoutheren * Fixes for H.450 errors and return values * Thanks to Iker Perez San Roman * * Revision 1.26 2005/06/27 00:36:45 csoutheren * Added missing return after error * Thanks to Iker Pщrez de San Romсn * * Revision 1.25 2005/03/10 07:01:30 csoutheren * Fixed problem with H.450 call identifiers not being unique across all calls on an * endpoint. Thanks to Thien Nguyen * * Revision 1.24 2004/07/03 06:51:37 rjongbloed * Added PTRACE_PARAM() macro to fix warnings on parameters used in PTRACE * macros only. * * Revision 1.23 2004/04/25 01:52:47 rjongbloed * Fixed GCC 3.4 warnings * * Revision 1.22 2004/02/17 09:53:54 csoutheren * Removed incorrect assignment of m_silentMonitoringPermitted to FALSE * See SourceForge bug 832371 * Thanks to Vyacheslav E. Andrejev * * Revision 1.21 2004/02/07 03:35:56 rjongbloed * Fixed missing unlocks in some H.240 operations, in particular consultation transfer never being cleaned up. Thanks Sщbastien Annedouche * * Revision 1.20 2003/07/15 11:22:07 csoutheren * Improved handling of alias addresses thanks to Federico Pinna * * Revision 1.19 2002/11/21 22:37:47 robertj * Fixed problems with unrecognized invoke APDU, thanks Andrea Bondavalli * * Revision 1.18 2002/10/01 06:47:39 robertj * Fixed GNU compiler warning * * Revision 1.17 2002/09/25 05:21:11 robertj * Fixed warning on no trace version. * * Revision 1.16 2002/08/05 10:03:47 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.15 2002/07/04 00:40:34 robertj * More H.450.11 call intrusion implementation, thanks Aleksandar Todorovic * * Revision 1.14 2002/06/25 09:56:07 robertj * Fixed GNU warnings * * Revision 1.13 2002/06/22 05:48:42 robertj * Added partial implementation for H.450.11 Call Intrusion * * Revision 1.12 2002/06/13 06:13:28 robertj * Added trace dumps for outgoing H.450 supplementary service APDU's. * * Revision 1.11 2002/02/04 07:17:56 robertj * Added H.450.2 Consultation Transfer, thanks Norwood Systems. * * Revision 1.10 2002/01/14 00:03:01 robertj * Added H.450.6 * Added extra "failure mode" parts of H.250.2. * Various other bug fixes. * Thanks Ben Madsen of Norwood Systems * * Revision 1.9 2001/11/19 07:40:44 robertj * Fixed problem with error detection & state change in Call Transfer, thanks Graeme Reid * * Revision 1.8 2001/08/27 03:59:16 robertj * Fixed GNU warnings. * * Revision 1.7 2001/08/16 07:49:19 robertj * Changed the H.450 support to be more extensible. Protocol handlers * are now in separate classes instead of all in H323Connection. * * Revision 1.6 2001/08/06 03:08:57 robertj * Fission of h323.h to h323ep.h & h323con.h, h323.h now just includes files. * * Revision 1.5 2001/06/14 06:25:16 robertj * Added further H.225 PDU build functions. * Moved some functionality from connection to PDU class. * * Revision 1.4 2001/06/05 03:14:41 robertj * Upgraded H.225 ASN to v4 and H.245 ASN to v7. * * Revision 1.3 2001/05/09 04:59:04 robertj * Bug fixes in H.450.2, thanks Klein Stefan. * * Revision 1.2 2001/04/20 02:16:53 robertj * Removed GNU C++ warnings. * * Revision 1.1 2001/04/11 03:01:29 robertj * Added H.450.2 (call transfer), thanks a LOT to Graeme Reid & Norwood Systems * */ #include #ifdef __GNUC__ #pragma implementation "h450pdu.h" #endif #include "h450/h450pdu.h" #include "h450/h4501.h" #include "h450/h4502.h" #include "h450/h4503.h" #include "h450/h4504.h" #include "h450/h4506.h" #include "h450/h45010.h" #include "h450/h45011.h" #include "h323pdu.h" #include "h323ep.h" #include "h323con.h" X880_Invoke& H450ServiceAPDU::BuildInvoke(int invokeId, int operation) { SetTag(X880_ROS::e_invoke); X880_Invoke& invoke = (X880_Invoke&) *this; invoke.m_invokeId = invokeId; invoke.m_opcode.SetTag(X880_Code::e_local); PASN_Integer& opcode = (PASN_Integer&) invoke.m_opcode; opcode.SetValue(operation); return invoke; } X880_ReturnResult& H450ServiceAPDU::BuildReturnResult(int invokeId) { SetTag(X880_ROS::e_returnResult); X880_ReturnResult& returnResult = (X880_ReturnResult&) *this; returnResult.m_invokeId = invokeId; return returnResult; } X880_ReturnError& H450ServiceAPDU::BuildReturnError(int invokeId, int error) { SetTag(X880_ROS::e_returnError); X880_ReturnError& returnError = (X880_ReturnError&) *this; returnError.m_invokeId = invokeId; returnError.m_errorCode.SetTag(X880_Code::e_local); PASN_Integer& errorCode = (PASN_Integer&) returnError.m_errorCode; errorCode.SetValue(error); return returnError; } X880_Reject& H450ServiceAPDU::BuildReject(int invokeId) { SetTag(X880_ROS::e_reject); X880_Reject& reject = (X880_Reject&) *this; reject.m_invokeId = invokeId; return reject; } void H450ServiceAPDU::BuildCallTransferInitiate(int invokeId, const PString & callIdentity, const PString & alias, const H323TransportAddress & address) { X880_Invoke& invoke = BuildInvoke(invokeId, H4502_CallTransferOperation::e_callTransferInitiate); H4502_CTInitiateArg argument; argument.m_callIdentity = callIdentity; H4501_ArrayOf_AliasAddress& aliasAddress = argument.m_reroutingNumber.m_destinationAddress; // We have to have at least a destination transport address or alias. if (!alias.IsEmpty() && !address.IsEmpty()) { aliasAddress.SetSize(2); // Set the alias aliasAddress[1].SetTag(H225_AliasAddress::e_dialedDigits); // TODO: can't this also be another alias type ??? H323SetAliasAddress(alias, aliasAddress[1]); // Set the transport aliasAddress[0].SetTag(H225_AliasAddress::e_transportID); H225_TransportAddress& cPartyTransport = (H225_TransportAddress&) aliasAddress[0]; address.SetPDU(cPartyTransport); } else { aliasAddress.SetSize(1); if (alias.IsEmpty()) { // Set the transport, no alias present aliasAddress[0].SetTag(H225_AliasAddress::e_transportID); H225_TransportAddress& cPartyTransport = (H225_TransportAddress&) aliasAddress[0]; address.SetPDU(cPartyTransport); } else { // Set the alias, no transport aliasAddress[0].SetTag(H225_AliasAddress::e_dialedDigits); H323SetAliasAddress(alias, aliasAddress[0]); } } PTRACE(4, "H4502\tSending supplementary service PDU argument:\n " << setprecision(2) << argument); invoke.IncludeOptionalField(X880_Invoke::e_argument); invoke.m_argument.EncodeSubType(argument); } void H450ServiceAPDU::BuildCallTransferSetup(int invokeId, const PString & callIdentity) { X880_Invoke& invoke = BuildInvoke(invokeId, H4502_CallTransferOperation::e_callTransferSetup); H4502_CTSetupArg argument; argument.m_callIdentity = callIdentity; PTRACE(4, "H4502\tSending supplementary service PDU argument:\n " << setprecision(2) << argument); invoke.IncludeOptionalField(X880_Invoke::e_argument); invoke.m_argument.EncodeSubType(argument); } void H450ServiceAPDU::BuildCallTransferIdentify(int invokeId) { X880_Invoke invoke = BuildInvoke(invokeId, H4502_CallTransferOperation::e_callTransferIdentify); } void H450ServiceAPDU::BuildCallTransferAbandon(int invokeId) { X880_Invoke invoke = BuildInvoke(invokeId, H4502_CallTransferOperation::e_callTransferAbandon); } void H450ServiceAPDU::BuildCallWaiting(int invokeId, int numCallsWaiting) { X880_Invoke& invoke = BuildInvoke(invokeId, H4506_CallWaitingOperations::e_callWaiting); H4506_CallWaitingArg argument; argument.IncludeOptionalField(H4506_CallWaitingArg::e_nbOfAddWaitingCalls); argument.m_nbOfAddWaitingCalls = numCallsWaiting; PTRACE(4, "H4502\tSending supplementary service PDU argument:\n " << setprecision(2) << argument); invoke.IncludeOptionalField(X880_Invoke::e_argument); invoke.m_argument.EncodeSubType(argument); } void H450ServiceAPDU::BuildCallIntrusionForcedRelease(int invokeId, int CICL) { X880_Invoke& invoke = BuildInvoke(invokeId, H45011_H323CallIntrusionOperations::e_callIntrusionForcedRelease); H45011_CIFrcRelArg argument; argument.m_ciCapabilityLevel = CICL; invoke.IncludeOptionalField(X880_Invoke::e_argument); invoke.m_argument.EncodeSubType(argument); } X880_ReturnResult& H450ServiceAPDU::BuildCallIntrusionForcedReleaseResult(int invokeId) { PTRACE(1 ,"H450.11\tH450ServiceAPDU::BuildCallIntrusionForcedReleaseResult BEGIN"); X880_ReturnResult& result = BuildReturnResult(invokeId); result.IncludeOptionalField(X880_ReturnResult::e_result); result.m_result.m_opcode.SetTag(X880_Code::e_local); PASN_Integer& operation = (PASN_Integer&) result.m_result.m_opcode; operation.SetValue(H45011_H323CallIntrusionOperations::e_callIntrusionForcedRelease); H45011_CIFrcRelOptRes ciCIPLRes; PPER_Stream resultStream; ciCIPLRes.Encode(resultStream); resultStream.CompleteEncoding(); result.m_result.m_result.SetValue(resultStream); PTRACE(4 ,"H450.11\tH450ServiceAPDU::BuildCallIntrusionForcedReleaseResult END"); return result; } void H450ServiceAPDU::BuildCallIntrusionForcedReleaseError() { /** TBD */ } void H450ServiceAPDU::BuildCallIntrusionGetCIPL(int invokeId) { PTRACE(4, "H450.11\tBuildCallIntrusionGetCIPL invokeId=" << invokeId); X880_Invoke invoke = BuildInvoke(invokeId, H45011_H323CallIntrusionOperations::e_callIntrusionGetCIPL); } void H450ServiceAPDU::BuildCallIntrusionImpending(int invokeId) { PTRACE(4, "H450.11\tBuildCallIntrusionImpending invokeId=" << invokeId); X880_Invoke& invoke = BuildInvoke(invokeId, H45011_H323CallIntrusionOperations::e_callIntrusionNotification); H45011_CINotificationArg argument; argument.m_ciStatusInformation = H45011_CIStatusInformation::e_callIntrusionImpending; invoke.IncludeOptionalField(X880_Invoke::e_argument); invoke.m_argument.EncodeSubType(argument); } void H450ServiceAPDU::BuildCallIntrusionForceRelesed(int invokeId) { PTRACE(4, "H450.11\tBuildCallIntrusionForceRelesed invokeId=" << invokeId); X880_Invoke& invoke = BuildInvoke(invokeId, H45011_H323CallIntrusionOperations::e_callIntrusionNotification); H45011_CINotificationArg argument; argument.m_ciStatusInformation = H45011_CIStatusInformation::e_callForceReleased; invoke.IncludeOptionalField(X880_Invoke::e_argument); invoke.m_argument.EncodeSubType(argument); } void H450ServiceAPDU::AttachSupplementaryServiceAPDU(H323SignalPDU & pdu) { H4501_SupplementaryService supplementaryService; // Create an H.450.1 supplementary service object // and store the H450ServiceAPDU in the ROS array. supplementaryService.m_serviceApdu.SetTag(H4501_ServiceApdus::e_rosApdus); H4501_ArrayOf_ROS & operations = (H4501_ArrayOf_ROS &)supplementaryService.m_serviceApdu; operations.SetSize(1); operations[0] = *this; PTRACE(4, "H4501\tSending supplementary service PDU:\n " << setprecision(2) << supplementaryService); // Add the H.450 PDU to the H.323 User-to-User PDU as an OCTET STRING pdu.m_h323_uu_pdu.IncludeOptionalField(H225_H323_UU_PDU::e_h4501SupplementaryService); pdu.m_h323_uu_pdu.m_h4501SupplementaryService.SetSize(1); pdu.m_h323_uu_pdu.m_h4501SupplementaryService[0].EncodeSubType(supplementaryService); } PBoolean H450ServiceAPDU::WriteFacilityPDU(H323Connection & connection) { H323SignalPDU facilityPDU; facilityPDU.BuildFacility(connection, TRUE); AttachSupplementaryServiceAPDU(facilityPDU); return connection.WriteSignalPDU(facilityPDU); } void H450ServiceAPDU::ParseEndpointAddress(H4501_EndpointAddress& endpointAddress, PString& remoteParty) { H4501_ArrayOf_AliasAddress& destinationAddress = endpointAddress.m_destinationAddress; PString alias; H323TransportAddress transportAddress; for (PINDEX i = 0; i < destinationAddress.GetSize(); i++) { H225_AliasAddress& aliasAddress = destinationAddress[i]; if (aliasAddress.GetTag() == H225_AliasAddress::e_transportID) transportAddress = (H225_TransportAddress &)aliasAddress; else alias = ::H323GetAliasAddressString(aliasAddress); } if (alias.IsEmpty()) { remoteParty = transportAddress; } else if (transportAddress.IsEmpty()) { remoteParty = alias; } else { remoteParty = alias + '@' + transportAddress; } } ///////////////////////////////////////////////////////////////////////////// H450xDispatcher::H450xDispatcher(H323Connection & conn) : connection(conn) { opcodeHandler.DisallowDeleteObjects(); nextInvokeId = 0; } void H450xDispatcher::AddOpCode(unsigned opcode, H450xHandler * handler) { if (PAssertNULL(handler) == NULL) return; if (handlers.GetObjectsIndex(handler) == P_MAX_INDEX) handlers.Append(handler); opcodeHandler.SetAt(opcode, handler); } void H450xDispatcher::AttachToSetup(H323SignalPDU & pdu) { for (PINDEX i = 0; i < handlers.GetSize(); i++) handlers[i].AttachToSetup(pdu); } void H450xDispatcher::AttachToAlerting(H323SignalPDU & pdu) { for (PINDEX i = 0; i < handlers.GetSize(); i++) handlers[i].AttachToAlerting(pdu); } void H450xDispatcher::AttachToConnect(H323SignalPDU & pdu) { for (PINDEX i = 0; i < handlers.GetSize(); i++) handlers[i].AttachToConnect(pdu); } void H450xDispatcher::AttachToReleaseComplete(H323SignalPDU & pdu) { for (PINDEX i = 0; i < handlers.GetSize(); i++) handlers[i].AttachToReleaseComplete(pdu); } PBoolean H450xDispatcher::HandlePDU(const H323SignalPDU & pdu) { PBoolean result = TRUE; for (PINDEX i = 0; i < pdu.m_h323_uu_pdu.m_h4501SupplementaryService.GetSize(); i++) { H4501_SupplementaryService supplementaryService; // Decode the supplementary service PDU from the PPER Stream if (pdu.m_h323_uu_pdu.m_h4501SupplementaryService[i].DecodeSubType(supplementaryService)) { PTRACE(4, "H4501\tReceived supplementary service PDU:\n " << setprecision(2) << supplementaryService); } else { PTRACE(1, "H4501\tInvalid supplementary service PDU decode:\n " << setprecision(2) << supplementaryService); continue; } H4501_InterpretationApdu & interpretation = supplementaryService.m_interpretationApdu; if (supplementaryService.m_serviceApdu.GetTag() == H4501_ServiceApdus::e_rosApdus) { H4501_ArrayOf_ROS& operations = (H4501_ArrayOf_ROS&) supplementaryService.m_serviceApdu; for (PINDEX j = 0; j < operations.GetSize(); j ++) { X880_ROS& operation = operations[j]; PTRACE(3, "H4501\tX880 ROS " << operation.GetTagName()); switch (operation.GetTag()) { case X880_ROS::e_invoke: result = OnReceivedInvoke((X880_Invoke &)operation, interpretation); break; case X880_ROS::e_returnResult: result = OnReceivedReturnResult((X880_ReturnResult &)operation); break; case X880_ROS::e_returnError: result = OnReceivedReturnError((X880_ReturnError &)operation); break; case X880_ROS::e_reject: result = OnReceivedReject((X880_Reject &)operation); break; default : break; } } } } return result; } PBoolean H450xDispatcher::OnReceivedInvoke(X880_Invoke & invoke, H4501_InterpretationApdu & interpretation) { PBoolean result = TRUE; // Get the invokeId int invokeId = invoke.m_invokeId.GetValue(); // Get the linkedId if present int linkedId = -1; if (invoke.HasOptionalField(X880_Invoke::e_linkedId)) { linkedId = invoke.m_linkedId.GetValue(); } // Get the argument if present PASN_OctetString * argument = NULL; if (invoke.HasOptionalField(X880_Invoke::e_argument)) { argument = &invoke.m_argument; } // Get the opcode if (invoke.m_opcode.GetTag() == X880_Code::e_local) { int opcode = ((PASN_Integer&) invoke.m_opcode).GetValue(); if (!opcodeHandler.Contains(opcode)) { PTRACE(2, "H4501\tInvoke of unsupported local opcode:\n " << invoke); if (interpretation.GetTag() != H4501_InterpretationApdu::e_discardAnyUnrecognizedInvokePdu) SendInvokeReject(invokeId, 1 /*X880_InvokeProblem::e_unrecognisedOperation*/); if (interpretation.GetTag() == H4501_InterpretationApdu::e_clearCallIfAnyInvokePduNotRecognized) result = FALSE; } else result = opcodeHandler[opcode].OnReceivedInvoke(opcode, invokeId, linkedId, argument); } else { if (interpretation.GetTag() != H4501_InterpretationApdu::e_discardAnyUnrecognizedInvokePdu) SendInvokeReject(invokeId, 1 /*X880_InvokeProblem::e_unrecognisedOperation*/); PTRACE(2, "H4501\tInvoke of unsupported global opcode:\n " << invoke); if (interpretation.GetTag() == H4501_InterpretationApdu::e_clearCallIfAnyInvokePduNotRecognized) result = FALSE; } return result; } PBoolean H450xDispatcher::OnReceivedReturnResult(X880_ReturnResult & returnResult) { unsigned invokeId = returnResult.m_invokeId.GetValue(); for (PINDEX i = 0; i < handlers.GetSize(); i++) { if (handlers[i].GetInvokeId() == invokeId) { handlers[i].OnReceivedReturnResult(returnResult); break; } } return TRUE; } PBoolean H450xDispatcher::OnReceivedReturnError(X880_ReturnError & returnError) { PBoolean result=TRUE; unsigned invokeId = returnError.m_invokeId.GetValue(); int errorCode = 0; if (returnError.m_errorCode.GetTag() == X880_Code::e_local) errorCode = ((PASN_Integer&) returnError.m_errorCode).GetValue(); for (PINDEX i = 0; i < handlers.GetSize(); i++) { if (handlers[i].GetInvokeId() == invokeId) { result = handlers[i].OnReceivedReturnError(errorCode, returnError); break; } } return result; } PBoolean H450xDispatcher::OnReceivedReject(X880_Reject & reject) { int problem = 0; switch (reject.m_problem.GetTag()) { case X880_Reject_problem::e_general: { X880_GeneralProblem & generalProblem = reject.m_problem; problem = generalProblem.GetValue(); } break; case X880_Reject_problem::e_invoke: { X880_InvokeProblem & invokeProblem = reject.m_problem; problem = invokeProblem.GetValue(); } break; case X880_Reject_problem::e_returnResult: { X880_ReturnResultProblem & returnResultProblem = reject.m_problem; problem = returnResultProblem.GetValue(); } break; case X880_Reject_problem::e_returnError: { X880_ReturnErrorProblem & returnErrorProblem = reject.m_problem; problem = returnErrorProblem.GetValue(); } break; default: break; } unsigned invokeId = reject.m_invokeId; for (PINDEX i = 0; i < handlers.GetSize(); i++) { if (handlers[i].GetInvokeId() == invokeId) { handlers[i].OnReceivedReject(reject.m_problem.GetTag(), problem); break; } } return TRUE; } void H450xDispatcher::SendReturnError(int invokeId, int returnError) { H450ServiceAPDU serviceAPDU; serviceAPDU.BuildReturnError(invokeId, returnError); serviceAPDU.WriteFacilityPDU(connection); } void H450xDispatcher::SendGeneralReject(int invokeId, int problem) { H450ServiceAPDU serviceAPDU; X880_Reject & reject = serviceAPDU.BuildReject(invokeId); reject.m_problem.SetTag(X880_Reject_problem::e_general); X880_GeneralProblem & generalProblem = (X880_GeneralProblem &) reject.m_problem; generalProblem = problem; serviceAPDU.WriteFacilityPDU(connection); } void H450xDispatcher::SendInvokeReject(int invokeId, int problem) { H450ServiceAPDU serviceAPDU; X880_Reject & reject = serviceAPDU.BuildReject(invokeId); reject.m_problem.SetTag(X880_Reject_problem::e_invoke); X880_InvokeProblem & invokeProblem = (X880_InvokeProblem &) reject.m_problem; invokeProblem = problem; serviceAPDU.WriteFacilityPDU(connection); } void H450xDispatcher::SendReturnResultReject(int invokeId, int problem) { H450ServiceAPDU serviceAPDU; X880_Reject & reject = serviceAPDU.BuildReject(invokeId); reject.m_problem.SetTag(X880_Reject_problem::e_returnResult); X880_ReturnResultProblem & returnResultProblem = reject.m_problem; returnResultProblem = problem; serviceAPDU.WriteFacilityPDU(connection); } void H450xDispatcher::SendReturnErrorReject(int invokeId, int problem) { H450ServiceAPDU serviceAPDU; X880_Reject & reject = serviceAPDU.BuildReject(invokeId); reject.m_problem.SetTag(X880_Reject_problem::e_returnError); X880_ReturnErrorProblem & returnErrorProblem = reject.m_problem; returnErrorProblem = problem; serviceAPDU.WriteFacilityPDU(connection); } ///////////////////////////////////////////////////////////////////////////// H450xHandler::H450xHandler(H323Connection & conn, H450xDispatcher & disp) : endpoint(conn.GetEndPoint()), connection(conn), dispatcher(disp) { currentInvokeId = 0; } void H450xHandler::AttachToSetup(H323SignalPDU &) { } void H450xHandler::AttachToAlerting(H323SignalPDU &) { } void H450xHandler::AttachToConnect(H323SignalPDU &) { } void H450xHandler::AttachToReleaseComplete(H323SignalPDU &) { } PBoolean H450xHandler::OnReceivedReturnResult(X880_ReturnResult & /*returnResult*/) { return TRUE; } PBoolean H450xHandler::OnReceivedReturnError(int /*errorCode*/, X880_ReturnError & /*returnError*/) { return TRUE; } PBoolean H450xHandler::OnReceivedReject(int /*problemType*/, int /*problemNumber*/) { return TRUE; } void H450xHandler::SendReturnError(int returnError) { dispatcher.SendReturnError(currentInvokeId, returnError); currentInvokeId = 0; } void H450xHandler::SendGeneralReject(int problem) { dispatcher.SendGeneralReject(currentInvokeId, problem); currentInvokeId = 0; } void H450xHandler::SendInvokeReject(int problem) { dispatcher.SendInvokeReject(currentInvokeId, problem); currentInvokeId = 0; } void H450xHandler::SendReturnResultReject(int problem) { dispatcher.SendReturnResultReject(currentInvokeId, problem); currentInvokeId = 0; } void H450xHandler::SendReturnErrorReject(int problem) { dispatcher.SendReturnErrorReject(currentInvokeId, problem); currentInvokeId = 0; } PBoolean H450xHandler::DecodeArguments(PASN_OctetString * argString, PASN_Object & argObject, int absentErrorCode) { if (argString == NULL) { if (absentErrorCode >= 0) SendReturnError(absentErrorCode); return FALSE; } PPER_Stream argStream(*argString); if (argObject.Decode(argStream)) { PTRACE(4, "H4501\tSupplementary service argument:\n " << setprecision(2) << argObject); return TRUE; } PTRACE(1, "H4501\tInvalid supplementary service argument:\n " << setprecision(2) << argObject); return FALSE; } ///////////////////////////////////////////////////////////////////////////// H4502Handler::H4502Handler(H323Connection & conn, H450xDispatcher & disp) : H450xHandler(conn, disp) { dispatcher.AddOpCode(H4502_CallTransferOperation::e_callTransferIdentify, this); dispatcher.AddOpCode(H4502_CallTransferOperation::e_callTransferAbandon, this); dispatcher.AddOpCode(H4502_CallTransferOperation::e_callTransferInitiate, this); dispatcher.AddOpCode(H4502_CallTransferOperation::e_callTransferSetup, this); dispatcher.AddOpCode(H4502_CallTransferOperation::e_callTransferUpdate, this); dispatcher.AddOpCode(H4502_CallTransferOperation::e_subaddressTransfer, this); dispatcher.AddOpCode(H4502_CallTransferOperation::e_callTransferComplete, this); dispatcher.AddOpCode(H4502_CallTransferOperation::e_callTransferActive, this); transferringCallToken = ""; ctState = e_ctIdle; ctResponseSent = FALSE; CallToken = PString(); consultationTransfer = FALSE; ctTimer.SetNotifier(PCREATE_NOTIFIER(OnCallTransferTimeOut)); } void H4502Handler::AttachToSetup(H323SignalPDU & pdu) { // Do we need to attach a call transfer setup invoke APDU? if (ctState != e_ctAwaitSetupResponse) return; H450ServiceAPDU serviceAPDU; // Store the outstanding invokeID associated with this connection currentInvokeId = dispatcher.GetNextInvokeId(); // Use the call identity from the ctInitiateArg serviceAPDU.BuildCallTransferSetup(currentInvokeId, transferringCallIdentity); serviceAPDU.AttachSupplementaryServiceAPDU(pdu); } void H4502Handler::AttachToAlerting(H323SignalPDU & pdu) { // Do we need to send a callTransferSetup return result APDU? if (currentInvokeId == 0 || ctResponseSent) return; H450ServiceAPDU serviceAPDU; serviceAPDU.BuildReturnResult(currentInvokeId); serviceAPDU.AttachSupplementaryServiceAPDU(pdu); ctResponseSent = TRUE; currentInvokeId = 0; } void H4502Handler::AttachToConnect(H323SignalPDU & pdu) { // Do we need to include a ctInitiateReturnResult APDU in our Release Complete Message? if (currentInvokeId == 0 || ctResponseSent) return; H450ServiceAPDU serviceAPDU; serviceAPDU.BuildReturnResult(currentInvokeId); serviceAPDU.AttachSupplementaryServiceAPDU(pdu); ctResponseSent = TRUE; currentInvokeId = 0; } void H4502Handler::AttachToReleaseComplete(H323SignalPDU & pdu) { // Do we need to include a ctInitiateReturnResult APDU in our Release Complete Message? if (currentInvokeId == 0) return; // If the SETUP message we received from the other end had a callTransferSetup APDU // in it, then we need to send back a RELEASE COMPLETE PDU with a callTransferSetup // ReturnError. // Else normal call - clear it down H450ServiceAPDU serviceAPDU; if (ctResponseSent) { serviceAPDU.BuildReturnResult(currentInvokeId); ctResponseSent = FALSE; currentInvokeId = 0; } else { serviceAPDU.BuildReturnError(currentInvokeId, H4501_GeneralErrorList::e_notAvailable); ctResponseSent = TRUE; currentInvokeId = 0; } serviceAPDU.AttachSupplementaryServiceAPDU(pdu); } PBoolean H4502Handler::OnReceivedInvoke(int opcode, int invokeId, int linkedId, PASN_OctetString * argument) { currentInvokeId = invokeId; switch (opcode) { case H4502_CallTransferOperation::e_callTransferIdentify: OnReceivedCallTransferIdentify(linkedId); break; case H4502_CallTransferOperation::e_callTransferAbandon: OnReceivedCallTransferAbandon(linkedId); break; case H4502_CallTransferOperation::e_callTransferInitiate: OnReceivedCallTransferInitiate(linkedId, argument); break; case H4502_CallTransferOperation::e_callTransferSetup: OnReceivedCallTransferSetup(linkedId, argument); break; case H4502_CallTransferOperation::e_callTransferUpdate: OnReceivedCallTransferUpdate(linkedId, argument); break; case H4502_CallTransferOperation::e_subaddressTransfer: OnReceivedSubaddressTransfer(linkedId, argument); break; case H4502_CallTransferOperation::e_callTransferComplete: OnReceivedCallTransferComplete(linkedId, argument); break; case H4502_CallTransferOperation::e_callTransferActive: OnReceivedCallTransferActive(linkedId, argument); break; default: currentInvokeId = 0; return FALSE; } return TRUE; } void H4502Handler::OnReceivedCallTransferIdentify(int /*linkedId*/) { if (!endpoint.OnCallTransferIdentify(connection)) { SendReturnError(H4501_GeneralErrorList::e_notAvailable); return; } // Send a FACILITY message with a callTransferIdentify return result // Supplementary Service PDU to the transferring endpoint. H450ServiceAPDU serviceAPDU; X880_ReturnResult& result = serviceAPDU.BuildReturnResult(currentInvokeId); result.IncludeOptionalField(X880_ReturnResult::e_result); result.m_result.m_opcode.SetTag(X880_Code::e_local); PASN_Integer& operation = (PASN_Integer&) result.m_result.m_opcode; operation.SetValue(H4502_CallTransferOperation::e_callTransferIdentify); H4502_CTIdentifyRes ctIdentifyResult; // Restrict the generated value to 4 digits (13 bits) unsigned int id = endpoint.GetNextH450CallIdentityValue() & 0x1FFF; PString pstrId(PString::Unsigned, id); ctIdentifyResult.m_callIdentity = pstrId; // Store the callIdentity of this connection in the dictionary endpoint.GetCallIdentityDictionary().SetAt(pstrId, &connection); H4501_ArrayOf_AliasAddress& aliasAddress = ctIdentifyResult.m_reroutingNumber.m_destinationAddress; PString localName = connection.GetLocalPartyName(); if (localName.IsEmpty()) aliasAddress.SetSize(1); else { aliasAddress.SetSize(2); aliasAddress[1].SetTag(H225_AliasAddress::e_dialedDigits); H323SetAliasAddress(localName, aliasAddress[1]); // Will encode as h323-Id if not E.164 } H323TransportAddress address; address = connection.GetSignallingChannel()->GetLocalAddress(); aliasAddress[0].SetTag(H225_AliasAddress::e_transportID); H225_TransportAddress& cPartyTransport = (H225_TransportAddress&) aliasAddress[0]; address.SetPDU(cPartyTransport); PPER_Stream resultStream; ctIdentifyResult.Encode(resultStream); resultStream.CompleteEncoding(); result.m_result.m_result.SetValue(resultStream); serviceAPDU.WriteFacilityPDU(connection); ctState = e_ctAwaitSetup; // start timer CT-T2 PTRACE(4, "H450.2\tStarting timer CT-T2"); StartctTimer(endpoint.GetCallTransferT2()); } void H4502Handler::OnReceivedCallTransferAbandon(int /*linkedId*/) { switch (ctState) { case e_ctAwaitSetup: { // Stop Timer CT-T2 and enter state e_ctIdle StopctTimer(); PTRACE(4, "H4502\tStopping timer CT-T2"); currentInvokeId = 0; ctState = e_ctIdle; } break; default: break; } } void H4502Handler::OnReceivedCallTransferInitiate(int /*linkedId*/, PASN_OctetString * argument) { // TBD: Check Call Hold status. If call is held, it must first be // retrieved before being transferred. -- dcassel 4/01 H4502_CTInitiateArg ctInitiateArg; if (!DecodeArguments(argument, ctInitiateArg, H4502_CallTransferErrors::e_invalidReroutingNumber)) return; ctResponseSent = TRUE; PString remoteParty; H450ServiceAPDU::ParseEndpointAddress(ctInitiateArg.m_reroutingNumber, remoteParty); PString newToken; if (!endpoint.OnCallTransferInitiate(connection, remoteParty) || endpoint.SetupTransfer(connection.GetCallToken(), ctInitiateArg.m_callIdentity.GetValue(), remoteParty, newToken) == NULL) SendReturnError(H4502_CallTransferErrors::e_establishmentFailure); } void H4502Handler::OnReceivedCallTransferSetup(int /*linkedId*/, PASN_OctetString * argument) { H4502_CTSetupArg ctSetupArg; if (!DecodeArguments(argument, ctSetupArg, H4502_CallTransferErrors::e_unrecognizedCallIdentity)) return; // Get the Transferring User's details if present PString transferringParty; if (ctSetupArg.HasOptionalField(H4502_CTSetupArg::e_transferringNumber)) { H450ServiceAPDU::ParseEndpointAddress(ctSetupArg.m_transferringNumber, transferringParty); } PString callIdentity; callIdentity = ctSetupArg.m_callIdentity; if (callIdentity.IsEmpty()) { // Blind Transfer switch (ctState) { case e_ctIdle: ctState = e_ctAwaitSetupResponse; break; // Wrong State default : break; } } else { // Transfer through Consultation // We need to check that the call identity and destination address information match those in the // second call. For the time being we just check that the call identities match as there does not // appear to be an elegant solution to compare the destination address information. // Get this callIdentity from our dictionary (if present) H323Connection *secondaryCall = endpoint.GetCallIdentityDictionary().GetAt(callIdentity); if (secondaryCall != NULL) secondaryCall->HandleConsultationTransfer(callIdentity, connection); else // Mismatched callIdentity SendReturnError(H4502_CallTransferErrors::e_unrecognizedCallIdentity); } } void H4502Handler::OnReceivedCallTransferUpdate(int /*linkedId*/, PASN_OctetString * argument) { H4502_CTUpdateArg ctUpdateArg; if (!DecodeArguments(argument, ctUpdateArg, -1)) return; } void H4502Handler::OnReceivedSubaddressTransfer(int /*linkedId*/, PASN_OctetString * argument) { H4502_SubaddressTransferArg subaddressTransferArg; if (!DecodeArguments(argument, subaddressTransferArg, -1)) return; } void H4502Handler::OnReceivedCallTransferComplete(int /*linkedId*/, PASN_OctetString * argument) { H4502_CTCompleteArg ctCompleteArg; if (!DecodeArguments(argument, ctCompleteArg, -1)) return; } void H4502Handler::OnReceivedCallTransferActive(int /*linkedId*/, PASN_OctetString * argument) { H4502_CTActiveArg ctActiveArg; if (!DecodeArguments(argument, ctActiveArg, -1)) return; } PBoolean H4502Handler::OnReceivedReturnResult(X880_ReturnResult & returnResult) { if (currentInvokeId == returnResult.m_invokeId.GetValue()) { switch (ctState) { case e_ctAwaitInitiateResponse: OnReceivedInitiateReturnResult(); break; case e_ctAwaitSetupResponse: OnReceivedSetupReturnResult(); break; case e_ctAwaitIdentifyResponse: OnReceivedIdentifyReturnResult(returnResult); break; default : break; } } return TRUE; } void H4502Handler::OnReceivedInitiateReturnResult() { // stop timer CT-T3 StopctTimer(); PTRACE(4, "H4502\tStopping timer CT-T3"); ctState = e_ctIdle; currentInvokeId = 0; // clear the primary and secondary call if not already cleared, } void H4502Handler::OnReceivedSetupReturnResult() { // stop timer CT-T4 StopctTimer(); PTRACE(4, "H4502\tStopping timer CT-T4"); ctState = e_ctIdle; currentInvokeId = 0; // Clear the primary call endpoint.ClearCall(transferringCallToken, H323Connection::EndedByCallForwarded); } void H4502Handler::OnReceivedIdentifyReturnResult(X880_ReturnResult &returnResult) { // stop timer CT-T1 StopctTimer(); PTRACE(4, "H4502\tStopping timer CT-T1"); // Have received response. ctState = e_ctIdle; // Get the return result if present PASN_OctetString * result = NULL; if (returnResult.HasOptionalField(X880_ReturnResult::e_result)) { result = &returnResult.m_result.m_result; // Extract the C Party Details H4502_CTIdentifyRes ctIdentifyResult; PPER_Stream resultStream(*result); ctIdentifyResult.Decode(resultStream); PString callIdentity = ctIdentifyResult.m_callIdentity.GetValue(); PString remoteParty; H450ServiceAPDU::ParseEndpointAddress(ctIdentifyResult.m_reroutingNumber, remoteParty); // Store the secondary call token on the primary connection so we can send a // callTransferAbandon invoke APDU on the secondary call at a later stage if we // get back a callTransferInitiateReturnError H323Connection* primaryConnection = endpoint.FindConnectionWithLock(CallToken); if (primaryConnection != NULL) { primaryConnection->SetAssociatedCallToken(connection.GetCallToken()); // Send a callTransferInitiate invoke APDU in a FACILITY message // to the transferred endpoint on the primary call endpoint.TransferCall(primaryConnection->GetCallToken(), remoteParty, callIdentity); primaryConnection->Unlock(); } } } PBoolean H4502Handler::OnReceivedReturnError(int errorCode, X880_ReturnError &returnError) { if (currentInvokeId == returnError.m_invokeId.GetValue()) { switch (ctState) { case e_ctAwaitInitiateResponse: OnReceivedInitiateReturnError(); break; case e_ctAwaitSetupResponse: OnReceivedSetupReturnError(errorCode); break; case e_ctAwaitIdentifyResponse: OnReceivedIdentifyReturnError(); break; default : break; } } return TRUE; } void H4502Handler::OnReceivedInitiateReturnError(const bool timerExpiry) { if (!timerExpiry) { // stop timer CT-T3 StopctTimer(); PTRACE(4, "H4502\tStopping timer CT-T3 on Error"); } else PTRACE(4, "H4502\tTimer CT-T3 has expired on the Transferring Endpoint awaiting a response to a callTransferInitiate APDU."); currentInvokeId = 0; ctState = e_ctIdle; // Send a callTransferAbandon invoke APDU in a FACILITY message on the secondary call // (if it exists) and enter state CT-Idle. H323Connection* secondaryConnection = endpoint.FindConnectionWithLock(CallToken); if (secondaryConnection != NULL) { H450ServiceAPDU serviceAPDU; serviceAPDU.BuildCallTransferAbandon(dispatcher.GetNextInvokeId()); serviceAPDU.WriteFacilityPDU(*secondaryConnection); secondaryConnection->Unlock(); } if (!transferringCallToken) { H323Connection* primaryConnection = endpoint.FindConnectionWithLock(transferringCallToken); primaryConnection->OnReceivedInitiateReturnError(); primaryConnection->Unlock(); } else { endpoint.OnReceivedInitiateReturnError(); } } void H4502Handler::OnReceivedSetupReturnError(int errorCode, const bool timerExpiry) { ctState = e_ctIdle; currentInvokeId = 0; if (!timerExpiry) { // stop timer CT-T4 if it is running StopctTimer(); PTRACE(4, "H4502\tStopping timer CT-T4"); } else { PTRACE(3, "H4502\tTimer CT-T4 has expired on the Transferred Endpoint awaiting a response to a callTransferSetup APDU."); // Clear the transferred call. endpoint.ClearCall(connection.GetCallToken()); } // Send a facility message to the transferring endpoint // containing a call transfer initiate return error H323Connection* primaryConnection = endpoint.FindConnectionWithLock(transferringCallToken); if (primaryConnection != NULL) { primaryConnection->HandleCallTransferFailure(errorCode); primaryConnection->Unlock(); } } void H4502Handler::OnReceivedIdentifyReturnError(const bool timerExpiry) { // The transferred-to user cannot participate in our transfer request ctState = e_ctIdle; currentInvokeId = 0; if (!timerExpiry) { // stop timer CT-T1 StopctTimer(); PTRACE(4, "H4502\tStopping timer CT-T1"); } else { PTRACE(4, "H4502\tTimer CT-T1 has expired on the Transferring Endpoint awaiting a response to a callTransferIdentify APDU."); // send a callTransferAbandon invoke APDU in a FACILITY message on the secondary call // and enter state CT-Idle. connection.Lock(); H450ServiceAPDU serviceAPDU; serviceAPDU.BuildCallTransferAbandon(dispatcher.GetNextInvokeId()); serviceAPDU.WriteFacilityPDU(connection); connection.Unlock(); } } void H4502Handler::TransferCall(const PString & remoteParty, const PString & callIdentity) { currentInvokeId = dispatcher.GetNextInvokeId(); // Send a FACILITY message with a callTransferInitiate Invoke // Supplementary Service PDU to the transferred endpoint. H450ServiceAPDU serviceAPDU; PString alias; H323TransportAddress address; PStringList Addresses; endpoint.ResolveCallParty(remoteParty, Addresses); if (Addresses.GetSize() > 0) endpoint.ParsePartyName(Addresses[0], alias, address); else PTRACE(1, "H4502\tCould not resolve transfer destination " << remoteParty); serviceAPDU.BuildCallTransferInitiate(currentInvokeId, callIdentity, alias, address); serviceAPDU.WriteFacilityPDU(connection); ctState = e_ctAwaitInitiateResponse; // start timer CT-T3 PTRACE(4, "H4502\tStarting timer CT-T3"); StartctTimer(connection.GetEndPoint().GetCallTransferT3()); } void H4502Handler::ConsultationTransfer(const PString & primaryCallToken) { currentInvokeId = dispatcher.GetNextInvokeId(); // Store the call token of the primary call on the secondary call. SetAssociatedCallToken(primaryCallToken); // Send a FACILITY message with a callTransferIdentify Invoke // Supplementary Service PDU to the transferred-to endpoint. H450ServiceAPDU serviceAPDU; serviceAPDU.BuildCallTransferIdentify(currentInvokeId); serviceAPDU.WriteFacilityPDU(connection); ctState = e_ctAwaitIdentifyResponse; // start timer CT-T1 PTRACE(4, "H4502\tStarting timer CT-T1"); StartctTimer(endpoint.GetCallTransferT1()); } void H4502Handler::HandleConsultationTransfer(const PString & callIdentity, H323Connection& incoming) { switch (ctState) { case e_ctAwaitSetup: { // Remove this callIdentity, connection pair from our dictionary as we no longer need it endpoint.GetCallIdentityDictionary().RemoveAt(callIdentity); // Stop timer CT-T2 StopctTimer(); PTRACE(4, "H4502\tStopping timer CT-T2"); PTRACE(4, "H450.2\tConsultation Transfer successful, clearing secondary call"); incoming.OnConsultationTransferSuccess(connection); currentInvokeId = 0; ctState = e_ctIdle; endpoint.ClearCall(connection.GetCallToken()); } break; // Wrong Call Transfer State default : break; } } void H4502Handler::AwaitSetupResponse(const PString & token, const PString & identity) { transferringCallToken = token; transferringCallIdentity = identity; ctState = e_ctAwaitSetupResponse; // start timer CT-T4 PTRACE(4, "H450.2\tStarting timer CT-T4"); StartctTimer(connection.GetEndPoint().GetCallTransferT4()); } void H4502Handler::onReceivedAdmissionReject(const int returnError) { if (ctState == e_ctAwaitSetupResponse) { ctState = e_ctIdle; // Stop timer CT-T4 if it is running StopctTimer(); PTRACE(3, "H4502\tStopping timer CT-T4"); // Send a FACILITY message back to the transferring party on the primary connection H323Connection * primaryConnection = endpoint.FindConnectionWithLock(transferringCallToken); if (primaryConnection != NULL) { PTRACE(3, "H4502\tReceived an Admission Reject at the Transferred Endpoint - aborting the transfer."); primaryConnection->HandleCallTransferFailure(returnError); primaryConnection->Unlock(); } } } void H4502Handler::HandleCallTransferFailure(const int returnError) { SendReturnError(returnError); } void H4502Handler::StopctTimer() { if (ctTimer.IsRunning()) ctTimer.Stop(); } void H4502Handler::OnCallTransferTimeOut(PTimer &, INT) { switch (ctState) { // CT-T3 Timeout case e_ctAwaitInitiateResponse: OnReceivedInitiateReturnError(true); break; // CT-T1 Timeout case e_ctAwaitIdentifyResponse: OnReceivedIdentifyReturnError(true); break; // CT-T2 Timeout case e_ctAwaitSetup: { // Abort the call transfer ctState = e_ctIdle; currentInvokeId = 0; PTRACE(4, "H450.2\tTimer CT-T2 has expired on the Transferred-to endpoint awaiting a callTransferSetup APDU."); } break; // CT-T4 Timeout case e_ctAwaitSetupResponse: OnReceivedSetupReturnError(H4502_CallTransferErrors::e_establishmentFailure, true); break; default: break; } } ///////////////////////////////////////////////////////////////////////////// H4503Handler::H4503Handler(H323Connection & conn, H450xDispatcher & disp) : H450xHandler(conn, disp) { dispatcher.AddOpCode(H4503_H323CallDiversionOperations::e_divertingLegInformation2, this); } PBoolean H4503Handler::OnReceivedInvoke(int opcode, int invokeId, int linkedId, PASN_OctetString *argument) { currentInvokeId = invokeId; switch (opcode) { case H4503_H323CallDiversionOperations::e_divertingLegInformation2: OnReceivedDivertingLegInfo2(linkedId, argument); break; default: currentInvokeId = 0; return FALSE; } return TRUE; } void H4503Handler::OnReceivedDivertingLegInfo2(int /* linkedId*/, PASN_OctetString * argument) { PTRACE(4, "H4503\tReceived a DivertingLegInfo2 Invoke APDU from the remote endpoint."); H4503_DivertingLegInfo2Arg divertingLegInfo2Arg; DecodeArguments(argument, divertingLegInfo2Arg, -1); if(divertingLegInfo2Arg.HasOptionalField(H4503_DivertingLegInfo2Arg::e_originalCalledNr)) { //m_originalCalledNr = divertingLegInfo2Arg.m_originalCalledNr.GetTypeAsString(); H450ServiceAPDU::ParseEndpointAddress(divertingLegInfo2Arg.m_originalCalledNr, m_originalCalledNr); } if(divertingLegInfo2Arg.HasOptionalField(H4503_DivertingLegInfo2Arg::e_divertingNr)) m_lastDivertingNr = divertingLegInfo2Arg.m_divertingNr.GetTypeAsString(); m_diversionCounter = divertingLegInfo2Arg.m_diversionCounter.GetValue(); m_diversionReason = divertingLegInfo2Arg.m_diversionReason.GetValue(); PTRACE(4, "H450.3\tOnReceivedDivertingLegInfo2 redirNUm=" << m_originalCalledNr); } PBoolean H4503Handler::GetRedirectingNumber(PString &originalCalledNr, PString &lastDivertingNr, int &divCounter, int &origdivReason, int &divReason) { PBoolean bRedirAvail=false; if(!m_originalCalledNr.IsEmpty()) { originalCalledNr = m_originalCalledNr; bRedirAvail = true; } if(!m_lastDivertingNr.IsEmpty()) { lastDivertingNr = m_lastDivertingNr; bRedirAvail = true; } divCounter = m_diversionCounter; divReason = m_diversionReason; origdivReason = m_origdiversionReason; return bRedirAvail; } ///////////////////////////////////////////////////////////////////////////// H4504Handler::H4504Handler(H323Connection & conn, H450xDispatcher & disp) : H450xHandler(conn, disp) { dispatcher.AddOpCode(H4504_CallHoldOperation::e_holdNotific, this); dispatcher.AddOpCode(H4504_CallHoldOperation::e_retrieveNotific, this); dispatcher.AddOpCode(H4504_CallHoldOperation::e_remoteHold, this); dispatcher.AddOpCode(H4504_CallHoldOperation::e_remoteRetrieve, this); holdState = e_ch_Idle; } PBoolean H4504Handler::OnReceivedInvoke(int opcode, int invokeId, int linkedId, PASN_OctetString *) { currentInvokeId = invokeId; switch (opcode) { case H4504_CallHoldOperation::e_holdNotific: OnReceivedLocalCallHold(linkedId); break; case H4504_CallHoldOperation::e_retrieveNotific: OnReceivedLocalCallRetrieve(linkedId); break; case H4504_CallHoldOperation::e_remoteHold: OnReceivedRemoteCallHold(linkedId); break; case H4504_CallHoldOperation::e_remoteRetrieve: OnReceivedRemoteCallRetrieve(linkedId); break; default: currentInvokeId = 0; return FALSE; } return TRUE; } void H4504Handler::OnReceivedLocalCallHold(int /*linkedId*/) { PTRACE(4, "H4504\tReceived a holdNotific Invoke APDU from the remote endpoint."); // Optionally close our transmit channel. } void H4504Handler::OnReceivedLocalCallRetrieve(int /*linkedId*/) { PTRACE(4, "H4504\tReceived a retrieveNotific Invoke APDU from the remote endpoint."); // Re-open our transmit channel if we previously closed it. } void H4504Handler::OnReceivedRemoteCallHold(int /*linkedId*/) { // TBD } void H4504Handler::OnReceivedRemoteCallRetrieve(int /*linkedId*/) { // TBD } void H4504Handler::HoldCall(PBoolean localHold) { // TBD: Implement Remote Hold. This implementation only does // local hold. -- dcassel 4/01. if (!localHold) return; // Send a FACILITY message with a callNotific Invoke // Supplementary Service PDU to the held endpoint. PTRACE(4, "H4504\tTransmitting a holdNotific Invoke APDU to the remote endpoint."); H450ServiceAPDU serviceAPDU; currentInvokeId = dispatcher.GetNextInvokeId(); serviceAPDU.BuildInvoke(currentInvokeId, H4504_CallHoldOperation::e_holdNotific); serviceAPDU.WriteFacilityPDU(connection); // Update hold state holdState = e_ch_NE_Held; } void H4504Handler::RetrieveCall() { // TBD: Implement Remote Hold. This implementation only does // Send a FACILITY message with a retrieveNotific Invoke // Supplementary Service PDU to the held endpoint. PTRACE(4, "H4504\tTransmitting a retrieveNotific Invoke APDU to the remote endpoint."); H450ServiceAPDU serviceAPDU; currentInvokeId = dispatcher.GetNextInvokeId(); serviceAPDU.BuildInvoke(currentInvokeId, H4504_CallHoldOperation::e_retrieveNotific); serviceAPDU.WriteFacilityPDU(connection); // Update hold state holdState = e_ch_Idle; } ///////////////////////////////////////////////////////////////////////////// H4506Handler::H4506Handler(H323Connection & conn, H450xDispatcher & disp) : H450xHandler(conn, disp) { dispatcher.AddOpCode(H4506_CallWaitingOperations::e_callWaiting, this); cwState = e_cw_Idle; } PBoolean H4506Handler::OnReceivedInvoke(int opcode, int invokeId, int linkedId, PASN_OctetString *argument) { currentInvokeId = invokeId; switch (opcode) { case H4506_CallWaitingOperations::e_callWaiting: OnReceivedCallWaitingIndication(linkedId, argument); break; default: currentInvokeId = 0; return FALSE; } return TRUE; } void H4506Handler::OnReceivedCallWaitingIndication(int /*linkedId*/, PASN_OctetString *argument) { H4506_CallWaitingArg cwArg; if(!DecodeArguments(argument, cwArg, -1)) return; connection.SetRemoteCallWaiting(cwArg.m_nbOfAddWaitingCalls.GetValue()); return; } void H4506Handler::AttachToAlerting(H323SignalPDU & pdu, unsigned numberOfCallsWaiting) { PTRACE(4, "H450.6\tAttaching a Call Waiting Invoke PDU to this Alerting message."); H450ServiceAPDU serviceAPDU; // Store the call waiting invokeID associated with this connection currentInvokeId = dispatcher.GetNextInvokeId(); serviceAPDU.BuildCallWaiting(currentInvokeId, numberOfCallsWaiting); serviceAPDU.AttachSupplementaryServiceAPDU(pdu); cwState = e_cw_Invoked; } ///////////////////////////////////////////////////////////////////////////// H45011Handler::H45011Handler(H323Connection & conn, H450xDispatcher & disp) : H450xHandler(conn, disp) { dispatcher.AddOpCode(H45011_H323CallIntrusionOperations::e_callIntrusionRequest, this); dispatcher.AddOpCode(H45011_H323CallIntrusionOperations::e_callIntrusionGetCIPL, this); dispatcher.AddOpCode(H45011_H323CallIntrusionOperations::e_callIntrusionIsolate, this); dispatcher.AddOpCode(H45011_H323CallIntrusionOperations::e_callIntrusionForcedRelease, this); dispatcher.AddOpCode(H45011_H323CallIntrusionOperations::e_callIntrusionWOBRequest, this); dispatcher.AddOpCode(H45011_H323CallIntrusionOperations::e_callIntrusionSilentMonitor, this); dispatcher.AddOpCode(H45011_H323CallIntrusionOperations::e_callIntrusionNotification, this); dispatcher.AddOpCode(H45010_H323CallOfferOperations::e_cfbOverride, this); dispatcher.AddOpCode(H45010_H323CallOfferOperations::e_remoteUserAlerting, this); dispatcher.AddOpCode(H4506_CallWaitingOperations::e_callWaiting, this); ciState = e_ci_Idle; ciSendState = e_ci_sIdle; ciReturnState = e_ci_rIdle; ciTimer.SetNotifier(PCREATE_NOTIFIER(OnCallIntrudeTimeOut)); } PBoolean H45011Handler::OnReceivedInvoke(int opcode, int invokeId, int linkedId, PASN_OctetString * argument) { PBoolean result = TRUE; currentInvokeId = invokeId; switch (opcode) { case H45011_H323CallIntrusionOperations::e_callIntrusionRequest: OnReceivedCallIntrusionRequest(linkedId, argument); break; case H45011_H323CallIntrusionOperations::e_callIntrusionGetCIPL: OnReceivedCallIntrusionGetCIPL(linkedId, argument); break; case H45011_H323CallIntrusionOperations::e_callIntrusionIsolate: OnReceivedCallIntrusionIsolate(linkedId, argument); break; case H45011_H323CallIntrusionOperations::e_callIntrusionForcedRelease: result = OnReceivedCallIntrusionForcedRelease(linkedId, argument); break; case H45011_H323CallIntrusionOperations::e_callIntrusionWOBRequest: OnReceivedCallIntrusionWOBRequest(linkedId, argument); break; case H45011_H323CallIntrusionOperations::e_callIntrusionSilentMonitor: OnReceivedCallIntrusionSilentMonitor(linkedId, argument); break; case H45011_H323CallIntrusionOperations::e_callIntrusionNotification: OnReceivedCallIntrusionNotification(linkedId, argument); break; case H45010_H323CallOfferOperations::e_cfbOverride: OnReceivedCfbOverride(linkedId, argument); break; case H45010_H323CallOfferOperations::e_remoteUserAlerting: OnReceivedRemoteUserAlerting(linkedId, argument); break; case H4506_CallWaitingOperations::e_callWaiting: OnReceivedCallWaiting(linkedId, argument); break; default: currentInvokeId = 0; return FALSE; } return result; } void H45011Handler::AttachToSetup(H323SignalPDU & pdu) { // Do we need to attach a call transfer setup invoke APDU? if (ciSendState != e_ci_sAttachToSetup) return; H450ServiceAPDU serviceAPDU; // Store the outstanding invokeID associated with this connection currentInvokeId = dispatcher.GetNextInvokeId(); PTRACE(4, "H450.11\tAttachToSetup Invoke ID=" << currentInvokeId); switch (ciGenerateState){ case e_ci_gConferenceRequest: break; case e_ci_gHeldRequest: break; case e_ci_gSilentMonitorRequest: break; case e_ci_gIsolationRequest: break; case e_ci_gForcedReleaseRequest: serviceAPDU.BuildCallIntrusionForcedRelease(currentInvokeId, ciCICL); break; case e_ci_gWOBRequest: break; default: break; } if(ciGenerateState != e_ci_gIdle){ // Use the call identity from the ctInitiateArg serviceAPDU.AttachSupplementaryServiceAPDU(pdu); // start timer CT-T1 PTRACE(4, "H450.11\tStarting timer CI-T1"); StartciTimer(connection.GetEndPoint().GetCallIntrusionT1()); ciState = e_ci_WaitAck; } ciSendState = e_ci_sIdle; ciGenerateState = e_ci_gIdle; } void H45011Handler::AttachToAlerting(H323SignalPDU & pdu) { if (ciSendState != e_ci_sAttachToAlerting) return; PTRACE(4, "H450.11\tAttachToAlerting Invoke ID=" << currentInvokeId); // Store the outstanding invokeID associated with this connection currentInvokeId = dispatcher.GetNextInvokeId(); PTRACE(4, "H450.11\tAttachToAlerting Invoke ID=" << currentInvokeId); if(ciReturnState!=e_ci_rIdle){ H450ServiceAPDU serviceAPDU; switch (ciReturnState){ case e_ci_rCallIntrusionImpending: serviceAPDU.BuildCallIntrusionImpending(currentInvokeId); PTRACE(4, "H450.11\tReturned e_ci_rCallIntrusionImpending"); break; case e_ci_rCallIntruded: break; case e_ci_rCallIsolated: break; case e_ci_rCallForceReleased: break; case e_ci_rCallForceReleaseResult: serviceAPDU.BuildCallIntrusionForcedReleaseResult(currentInvokeId); PTRACE(4, "H450.11\tReturned H45011_CallIntrusionForced Release Result"); break; case e_ci_rCallIntrusionComplete: break; case e_ci_rCallIntrusionEnd: break; case e_ci_rNotBusy: serviceAPDU.BuildReturnError(currentInvokeId, H45011_CallIntrusionErrors::e_notBusy); PTRACE(4, "H450.11\tReturned H45011_CallIntrusionErrors::e_notBusy"); break; case e_ci_rTempUnavailable: PTRACE(4, "H450.11\tReturned H45011_CallIntrusionErrors::e_temporarilyUnavailable"); serviceAPDU.BuildReturnError(currentInvokeId, H45011_CallIntrusionErrors::e_temporarilyUnavailable); break; case e_ci_rNotAuthorized: PTRACE(4, "H450.11\tReturned H45011_CallIntrusionErrors::e_notAuthorized"); serviceAPDU.BuildReturnError(currentInvokeId, H45011_CallIntrusionErrors::e_notAuthorized); break; default : break; } serviceAPDU.AttachSupplementaryServiceAPDU(pdu); } ciState = e_ci_Idle; ciSendState = e_ci_sIdle; ciReturnState = e_ci_rIdle; } void H45011Handler::AttachToConnect(H323SignalPDU & pdu) { if ((currentInvokeId == 0) || (ciSendState != e_ci_sAttachToConnect)) return; currentInvokeId = dispatcher.GetNextInvokeId(); PTRACE(4, "H450.11\tAttachToConnect Invoke ID=" << currentInvokeId); if(ciReturnState!=e_ci_rIdle){ H450ServiceAPDU serviceAPDU; switch (ciReturnState){ case e_ci_rCallIntrusionImpending: break; case e_ci_rCallIntruded: break; case e_ci_rCallIsolated: break; case e_ci_rCallForceReleased: break; case e_ci_rCallForceReleaseResult: serviceAPDU.BuildCallIntrusionForcedReleaseResult(currentInvokeId); PTRACE(4, "H450.11\tReturned H45011_CallIntrusionForced Release Result"); break; case e_ci_rCallIntrusionComplete: break; case e_ci_rCallIntrusionEnd: break; case e_ci_rNotBusy: serviceAPDU.BuildReturnError(currentInvokeId, H45011_CallIntrusionErrors::e_notBusy); PTRACE(4, "H450.11\tReturned H45011_CallIntrusionErrors::e_notBusy"); break; case e_ci_rTempUnavailable: PTRACE(4, "H450.11\tReturned H45011_CallIntrusionErrors::e_temporarilyUnavailable"); serviceAPDU.BuildReturnError(currentInvokeId, H45011_CallIntrusionErrors::e_temporarilyUnavailable); break; case e_ci_rNotAuthorized: PTRACE(4, "H450.11\tReturned H45011_CallIntrusionErrors::e_notAuthorized"); serviceAPDU.BuildReturnError(currentInvokeId, H45011_CallIntrusionErrors::e_notAuthorized); break; default : break; } serviceAPDU.AttachSupplementaryServiceAPDU(pdu); } ciState = e_ci_Idle; ciSendState = e_ci_sIdle; ciReturnState = e_ci_rIdle; currentInvokeId = 0; } void H45011Handler::AttachToReleaseComplete(H323SignalPDU & pdu) { // Do we need to attach a call transfer setup invoke APDU? if (ciSendState != e_ci_sAttachToReleseComplete) return; PTRACE(4, "H450.11\tAttachToSetup Invoke ID=" << currentInvokeId); if(ciReturnState!=e_ci_rIdle){ H450ServiceAPDU serviceAPDU; switch (ciReturnState){ case e_ci_rNotBusy: serviceAPDU.BuildReturnError(currentInvokeId, H45011_CallIntrusionErrors::e_notBusy); PTRACE(4, "H450.11\tReturned H45011_CallIntrusionErrors::e_notBusy"); break; case e_ci_rTempUnavailable: PTRACE(4, "H450.11\tReturned H45011_CallIntrusionErrors::e_temporarilyUnavailable"); serviceAPDU.BuildReturnError(currentInvokeId, H45011_CallIntrusionErrors::e_temporarilyUnavailable); break; case e_ci_rNotAuthorized: PTRACE(4, "H450.11\tReturned H45011_CallIntrusionErrors::e_notAuthorized"); serviceAPDU.BuildReturnError(currentInvokeId, H45011_CallIntrusionErrors::e_notAuthorized); break; case e_ci_rCallForceReleased: PTRACE(4, "H450.11\tReturned H45011_CallIntrusionForceRelease::e_ci_rCallForceReleased"); serviceAPDU.BuildCallIntrusionForceRelesed(currentInvokeId); break; default : break; } serviceAPDU.AttachSupplementaryServiceAPDU(pdu); } ciState = e_ci_Idle; ciSendState = e_ci_sIdle; ciReturnState = e_ci_rIdle; } void H45011Handler::OnReceivedCallIntrusionRequest(int /*linkedId*/, PASN_OctetString *argument) { H45011_CIRequestArg ciArg; if(!DecodeArguments(argument, ciArg, -1)) return; /* TBD */ return; } void H45011Handler::OnReceivedCallIntrusionGetCIPL(int /*linkedId*/, PASN_OctetString *argument) { PTRACE(4, "H450.11\tReceived GetCIPL Invoke"); H45011_CIGetCIPLOptArg ciArg; // !!!!!!!! DecodeArguments(argument, ciArg, -1); /* if(!DecodeArguments(argument, ciArg, -1)) return; */ // Send a FACILITY message with a callTransferIdentify return result // Supplementary Service PDU to the transferring endpoint. H450ServiceAPDU serviceAPDU; X880_ReturnResult& result = serviceAPDU.BuildReturnResult(currentInvokeId); result.IncludeOptionalField(X880_ReturnResult::e_result); result.m_result.m_opcode.SetTag(X880_Code::e_local); PASN_Integer& operation = (PASN_Integer&) result.m_result.m_opcode; operation.SetValue(H45011_H323CallIntrusionOperations::e_callIntrusionGetCIPL); H45011_CIGetCIPLRes ciCIPLRes; ciCIPLRes.m_ciProtectionLevel = endpoint.GetCallIntrusionProtectionLevel(); ciCIPLRes.IncludeOptionalField(H45011_CIGetCIPLRes::e_silentMonitoringPermitted); PPER_Stream resultStream; ciCIPLRes.Encode(resultStream); resultStream.CompleteEncoding(); result.m_result.m_result.SetValue(resultStream); serviceAPDU.WriteFacilityPDU(connection); PTRACE(4, "H450.11\tSent GetCIPL Result CIPL=" << ciCIPLRes.m_ciProtectionLevel); /* TBD */ return; } void H45011Handler::OnReceivedCallIntrusionIsolate(int /*linkedId*/, PASN_OctetString *argument) { H45011_CIIsOptArg ciArg; if(!DecodeArguments(argument, ciArg, -1)) return; /* TBD */ return; } PBoolean H45011Handler::OnReceivedCallIntrusionForcedRelease(int /*linkedId*/, PASN_OctetString *argument) { PBoolean result = TRUE; PTRACE(4, "H450.11\tReceived ForcedRelease Invoke"); H45011_CIFrcRelArg ciArg; if(!DecodeArguments(argument, ciArg, -1)) return FALSE; PStringList tokens = endpoint.GetAllConnections(); if(tokens.GetSize() >1) { for (PINDEX i = 0; i < tokens.GetSize(); i++) { if(endpoint.HasConnection(tokens[i])){ H323Connection* conn = endpoint.FindConnectionWithLock(tokens[i]); if (conn != NULL){ if (conn->IsEstablished()){ if((conn->GetLocalCallIntrusionProtectionLevel() < ciArg.m_ciCapabilityLevel)){ activeCallToken = conn->GetCallToken(); intrudingCallToken = connection.GetCallToken(); conn->GetRemoteCallIntrusionProtectionLevel(connection.GetCallToken (), (unsigned)ciArg.m_ciCapabilityLevel); result = TRUE; conn->Unlock (); break; } else result = FALSE; } conn->Unlock (); } } } if(result){ ciSendState = e_ci_sAttachToConnect; ciReturnState = e_ci_rCallForceReleaseResult; connection.SetCallIntrusion (); } else { ciSendState = e_ci_sAttachToReleseComplete; ciReturnState = e_ci_rNotAuthorized; connection.ClearCall(H323Connection::EndedByLocalBusy); } } else{ ciSendState = e_ci_sAttachToAlerting; ciReturnState = e_ci_rNotBusy; } return result; } void H45011Handler::OnReceivedCallIntrusionWOBRequest(int /*linkedId*/, PASN_OctetString *argument) { H45011_CIWobOptArg ciArg; if(!DecodeArguments(argument, ciArg, -1)) return; /* TBD */ return; } void H45011Handler::OnReceivedCallIntrusionSilentMonitor(int /*linkedId*/, PASN_OctetString *argument) { H45011_CISilentArg ciArg; if(!DecodeArguments(argument, ciArg, -1)) return; /* TBD */ return; } void H45011Handler::OnReceivedCallIntrusionNotification(int /*linkedId*/, PASN_OctetString *argument) { H45011_CINotificationArg ciArg; if(!DecodeArguments(argument, ciArg, -1)) return; /* TBD */ return; } void H45011Handler::OnReceivedCfbOverride(int /*linkedId*/, PASN_OctetString *argument) { H45010_CfbOvrOptArg ciArg; if(!DecodeArguments(argument, ciArg, -1)) return; /* TBD */ return; } void H45011Handler::OnReceivedRemoteUserAlerting(int /*linkedId*/, PASN_OctetString *argument) { H45010_RUAlertOptArg ciArg; if(!DecodeArguments(argument, ciArg, -1)) return; /* TBD */ return; } void H45011Handler::OnReceivedCallWaiting(int /*linkedId*/, PASN_OctetString *argument) { H4506_CallWaitingArg ciArg; if(!DecodeArguments(argument, ciArg, -1)) return; /* TBD */ return; } PBoolean H45011Handler::OnReceivedReturnResult(X880_ReturnResult & returnResult) { PTRACE(4, "H450.11\tReceived Return Result"); if (currentInvokeId == returnResult.m_invokeId.GetValue()) { PTRACE(4, "H450.11\tReceived Return Result Invoke ID=" << currentInvokeId); switch (ciState) { case e_ci_WaitAck: OnReceivedCIRequestResult(); break; case e_ci_GetCIPL: OnReceivedCIGetCIPLResult(returnResult); break; default : break; } } return TRUE; } void H45011Handler::OnReceivedCIRequestResult() { PTRACE(4, "H450.11\tOnReceivedCIRequestResult"); // stop timer CI-T1 PTRACE(4, "H450.11\tTrying to stop timer CI-T1"); StopciTimer(); } void H45011Handler::OnReceivedCIGetCIPLResult(X880_ReturnResult & returnResult) { PTRACE(4, "H450.11\tOnReceivedCIRequestResult"); // Get the return result if present PASN_OctetString * result = NULL; if (returnResult.HasOptionalField(X880_ReturnResult::e_result)) { result = &returnResult.m_result.m_result; // Extract the C Party Details H45011_CIGetCIPLRes ciGetCIPLResult; PPER_Stream resultStream(*result); ciGetCIPLResult.Decode(resultStream); PTRACE(4 ,"H450.11\tReceived CIPL=" << ciGetCIPLResult.m_ciProtectionLevel ); if (intrudingCallCICL > ciGetCIPLResult.m_ciProtectionLevel){ // Send ciNotification.inv (ciImpending) To C connection.Lock(); H450ServiceAPDU serviceAPDU; currentInvokeId = dispatcher.GetNextInvokeId(); serviceAPDU.BuildCallIntrusionImpending(currentInvokeId); serviceAPDU.WriteFacilityPDU(connection); connection.Unlock(); // Send ciNotification.inv (ciImpending) to intruding (A) H323Connection* conn = endpoint.FindConnectionWithLock(intrudingCallToken); conn->SetIntrusionImpending (); //Send Ringing to intruding (A) conn->AnsweringCall (conn->AnswerCallPending); // MUST RETURN ciNotification.inv (callForceRelesed) to active call (C) when releasing call !!!!!! ciSendState = e_ci_sAttachToReleseComplete; ciReturnState = e_ci_rCallForceReleased; //Send Forced Release Accepted when Answering call to intruding (A) conn->SetForcedReleaseAccepted(); conn->Unlock (); } else { PTRACE(4 ,"H450.11\tCICL Clear Call"); // Clear Call with intruding (A) H323Connection* conn = endpoint.FindConnectionWithLock(intrudingCallToken); conn->SetIntrusionNotAuthorized(); conn->Unlock(); endpoint.ClearCall (intrudingCallToken); } } // stop timer CI-T5 PTRACE(4, "H450.11\tTrying to stop timer CI-T5"); StopciTimer(); } PBoolean H45011Handler::OnReceivedReturnError(int errorCode, X880_ReturnError &returnError) { PBoolean result = TRUE; PTRACE(4, "H450.11\tReceived Return Error CODE=" <SetIntrusionImpending (); //Send Ringing to intruding (A) conn->AnsweringCall (conn->AnswerCallPending); ciSendState = e_ci_sAttachToReleseComplete; ciReturnState = e_ci_rCallForceReleased; //Forced Release Accepted to send when Answering call to intruding (A) conn->SetForcedReleaseAccepted(); conn->Unlock (); return FALSE; } void H45011Handler::IntrudeCall(int CICL) { ciSendState = e_ci_sAttachToSetup; ciGenerateState = e_ci_gForcedReleaseRequest; ciCICL = CICL; } void H45011Handler::AwaitSetupResponse(const PString & token, const PString & identity) { intrudingCallToken = token; intrudingCallIdentity = identity; ciState = e_ci_WaitAck; } PBoolean H45011Handler::GetRemoteCallIntrusionProtectionLevel(const PString & token, unsigned intrusionCICL) { if (!connection.Lock()) return FALSE; intrudingCallToken = token; intrudingCallCICL = intrusionCICL; H450ServiceAPDU serviceAPDU; currentInvokeId = dispatcher.GetNextInvokeId(); serviceAPDU.BuildCallIntrusionGetCIPL(currentInvokeId); connection.Unlock(); if (!serviceAPDU.WriteFacilityPDU(connection)) return FALSE; PTRACE(4, "H450.11\tStarting timer CI-T5"); StartciTimer(connection.GetEndPoint().GetCallIntrusionT5()); ciState = e_ci_GetCIPL; return TRUE; } void H45011Handler::SetIntrusionNotAuthorized() { ciSendState = e_ci_sAttachToReleseComplete; ciReturnState = e_ci_rNotAuthorized; } void H45011Handler::SetIntrusionImpending() { ciSendState = e_ci_sAttachToAlerting; ciReturnState = e_ci_rCallIntrusionImpending; } void H45011Handler::SetForcedReleaseAccepted() { ciSendState = e_ci_sAttachToConnect; ciReturnState = e_ci_rCallForceReleaseResult; ciState = e_ci_DestNotify; StartciTimer(connection.GetEndPoint().GetCallIntrusionT6()); } void H45011Handler::StopciTimer() { if (ciTimer.IsRunning()){ ciTimer.Stop(); PTRACE(4, "H450.11\tStopping timer CI-TX"); } } void H45011Handler::OnCallIntrudeTimeOut(PTimer &, INT) { switch (ciState) { // CI-T1 Timeout case e_ci_WaitAck: PTRACE(4, "H450.11\tTimer CI-T1 has expired"); OnReceivedInvokeReturnError(0,true); break; case e_ci_GetCIPL: PTRACE(4, "H450.11\tTimer CI-T5 has expired"); OnReceivedGetCIPLReturnError(0,true); break; case e_ci_DestNotify: { PTRACE(4, "H450.11\tOnCallIntrudeTimeOut Timer CI-T6 has expired"); // Clear the active call (call with C) PSyncPoint sync; endpoint.ClearCallSynchronous(activeCallToken, H323Connection::EndedByLocalUser, &sync); // Answer intruding call (call with A) PTRACE(4, "H450.11\tOnCallIntrudeTimeOut Trying to answer Call"); if(endpoint.HasConnection(intrudingCallToken)){ H323Connection* conn = endpoint.FindConnectionWithLock(intrudingCallToken); conn->AnsweringCall (conn->AnswerCallNow); conn->Unlock (); } } break; default: break; } } PBoolean H45011Handler::OnReceivedReject(int PTRACE_PARAM(problemType), int PTRACE_PARAM(problemNumber)) { PTRACE(4, "H450.11\tH45011Handler::OnReceivedReject - problemType= " << problemType << ", problemNumber= " << problemNumber); if (ciTimer.IsRunning()){ ciTimer.Stop(); PTRACE(4, "H450.11\tStopping timer CI-TX"); } switch (ciState) { case e_ci_GetCIPL: { H323Connection* conn = endpoint.FindConnectionWithLock(intrudingCallToken); conn->SetIntrusionImpending (); //Send Ringing to intruding (A) conn->AnsweringCall (conn->AnswerCallPending); conn->SetForcedReleaseAccepted(); conn->Unlock (); break; } default: break; } ciState = e_ci_Idle; return TRUE; }; h323plus/src/h450/h4501.cxx0000644000175000017500000011500511015524412013640 0ustar markmark// // h4501.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h4501.h" #endif #include #include "h450/h4501.h" #define new PNEW #if ! H323_DISABLE_H4501 #ifndef PASN_NOPRINTON const static PASN_Names Names_H4501_EntityType[]={ {"endpoint",0} ,{"anyEntity",1} }; #endif // // EntityType // H4501_EntityType::H4501_EntityType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4501_EntityType,2 #endif ) { } PBoolean H4501_EntityType::CreateObject() { choice = (tag <= e_anyEntity) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H4501_EntityType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_EntityType::Class()), PInvalidCast); #endif return new H4501_EntityType(*this); } // // AddressInformation // H4501_AddressInformation::H4501_AddressInformation(unsigned tag, PASN_Object::TagClass tagClass) : H225_AliasAddress(tag, tagClass) { } PObject * H4501_AddressInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_AddressInformation::Class()), PInvalidCast); #endif return new H4501_AddressInformation(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4501_InterpretationApdu[]={ {"discardAnyUnrecognizedInvokePdu",0} ,{"clearCallIfAnyInvokePduNotRecognized",1} ,{"rejectAnyUnrecognizedInvokePdu",2} }; #endif // // InterpretationApdu // H4501_InterpretationApdu::H4501_InterpretationApdu(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4501_InterpretationApdu,3 #endif ) { } PBoolean H4501_InterpretationApdu::CreateObject() { choice = (tag <= e_rejectAnyUnrecognizedInvokePdu) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H4501_InterpretationApdu::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_InterpretationApdu::Class()), PInvalidCast); #endif return new H4501_InterpretationApdu(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4501_ServiceApdus[]={ {"rosApdus",0} }; #endif // // ServiceApdus // H4501_ServiceApdus::H4501_ServiceApdus(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4501_ServiceApdus,1 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4501_ServiceApdus::operator H4501_ArrayOf_ROS &() const #else H4501_ServiceApdus::operator H4501_ArrayOf_ROS &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4501_ArrayOf_ROS), PInvalidCast); #endif return *(H4501_ArrayOf_ROS *)choice; } H4501_ServiceApdus::operator const H4501_ArrayOf_ROS &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4501_ArrayOf_ROS), PInvalidCast); #endif return *(H4501_ArrayOf_ROS *)choice; } PBoolean H4501_ServiceApdus::CreateObject() { switch (tag) { case e_rosApdus : choice = new H4501_ArrayOf_ROS(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, MaximumValue); return TRUE; } choice = NULL; return FALSE; } PObject * H4501_ServiceApdus::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_ServiceApdus::Class()), PInvalidCast); #endif return new H4501_ServiceApdus(*this); } // // InvokeIdSet // H4501_InvokeIdSet::H4501_InvokeIdSet(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { } H4501_InvokeIdSet & H4501_InvokeIdSet::operator=(int v) { SetValue(v); return *this; } H4501_InvokeIdSet & H4501_InvokeIdSet::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4501_InvokeIdSet::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_InvokeIdSet::Class()), PInvalidCast); #endif return new H4501_InvokeIdSet(*this); } // // InvokeIDs // H4501_InvokeIDs::H4501_InvokeIDs(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } H4501_InvokeIDs & H4501_InvokeIDs::operator=(int v) { SetValue(v); return *this; } H4501_InvokeIDs & H4501_InvokeIDs::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4501_InvokeIDs::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_InvokeIDs::Class()), PInvalidCast); #endif return new H4501_InvokeIDs(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4501_PresentedAddressScreened[]={ {"presentationAllowedAddress",0} ,{"presentationRestricted",1} ,{"numberNotAvailableDueToInterworking",2} ,{"presentationRestrictedAddress",3} }; #endif // // PresentedAddressScreened // H4501_PresentedAddressScreened::H4501_PresentedAddressScreened(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4501_PresentedAddressScreened,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4501_PresentedAddressScreened::operator H4501_AddressScreened &() const #else H4501_PresentedAddressScreened::operator H4501_AddressScreened &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4501_AddressScreened), PInvalidCast); #endif return *(H4501_AddressScreened *)choice; } H4501_PresentedAddressScreened::operator const H4501_AddressScreened &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4501_AddressScreened), PInvalidCast); #endif return *(H4501_AddressScreened *)choice; } PBoolean H4501_PresentedAddressScreened::CreateObject() { switch (tag) { case e_presentationAllowedAddress : case e_presentationRestrictedAddress : choice = new H4501_AddressScreened(); return TRUE; case e_presentationRestricted : case e_numberNotAvailableDueToInterworking : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * H4501_PresentedAddressScreened::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_PresentedAddressScreened::Class()), PInvalidCast); #endif return new H4501_PresentedAddressScreened(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4501_PresentedAddressUnscreened[]={ {"presentationAllowedAddress",0} ,{"presentationRestricted",1} ,{"numberNotAvailableDueToInterworking",2} ,{"presentationRestrictedAddress",3} }; #endif // // PresentedAddressUnscreened // H4501_PresentedAddressUnscreened::H4501_PresentedAddressUnscreened(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4501_PresentedAddressUnscreened,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4501_PresentedAddressUnscreened::operator H4501_Address &() const #else H4501_PresentedAddressUnscreened::operator H4501_Address &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4501_Address), PInvalidCast); #endif return *(H4501_Address *)choice; } H4501_PresentedAddressUnscreened::operator const H4501_Address &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4501_Address), PInvalidCast); #endif return *(H4501_Address *)choice; } PBoolean H4501_PresentedAddressUnscreened::CreateObject() { switch (tag) { case e_presentationAllowedAddress : case e_presentationRestrictedAddress : choice = new H4501_Address(); return TRUE; case e_presentationRestricted : case e_numberNotAvailableDueToInterworking : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * H4501_PresentedAddressUnscreened::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_PresentedAddressUnscreened::Class()), PInvalidCast); #endif return new H4501_PresentedAddressUnscreened(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4501_PresentedNumberScreened[]={ {"presentationAllowedAddress",0} ,{"presentationRestricted",1} ,{"numberNotAvailableDueToInterworking",2} ,{"presentationRestrictedAddress",3} }; #endif // // PresentedNumberScreened // H4501_PresentedNumberScreened::H4501_PresentedNumberScreened(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4501_PresentedNumberScreened,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4501_PresentedNumberScreened::operator H4501_NumberScreened &() const #else H4501_PresentedNumberScreened::operator H4501_NumberScreened &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4501_NumberScreened), PInvalidCast); #endif return *(H4501_NumberScreened *)choice; } H4501_PresentedNumberScreened::operator const H4501_NumberScreened &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4501_NumberScreened), PInvalidCast); #endif return *(H4501_NumberScreened *)choice; } PBoolean H4501_PresentedNumberScreened::CreateObject() { switch (tag) { case e_presentationAllowedAddress : case e_presentationRestrictedAddress : choice = new H4501_NumberScreened(); return TRUE; case e_presentationRestricted : case e_numberNotAvailableDueToInterworking : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * H4501_PresentedNumberScreened::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_PresentedNumberScreened::Class()), PInvalidCast); #endif return new H4501_PresentedNumberScreened(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4501_PresentedNumberUnscreened[]={ {"presentationAllowedAddress",0} ,{"presentationRestricted",1} ,{"numberNotAvailableDueToInterworking",2} ,{"presentationRestrictedAddress",3} }; #endif // // PresentedNumberUnscreened // H4501_PresentedNumberUnscreened::H4501_PresentedNumberUnscreened(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4501_PresentedNumberUnscreened,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4501_PresentedNumberUnscreened::operator H225_PartyNumber &() const #else H4501_PresentedNumberUnscreened::operator H225_PartyNumber &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_PartyNumber), PInvalidCast); #endif return *(H225_PartyNumber *)choice; } H4501_PresentedNumberUnscreened::operator const H225_PartyNumber &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_PartyNumber), PInvalidCast); #endif return *(H225_PartyNumber *)choice; } PBoolean H4501_PresentedNumberUnscreened::CreateObject() { switch (tag) { case e_presentationAllowedAddress : case e_presentationRestrictedAddress : choice = new H225_PartyNumber(); return TRUE; case e_presentationRestricted : case e_numberNotAvailableDueToInterworking : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * H4501_PresentedNumberUnscreened::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_PresentedNumberUnscreened::Class()), PInvalidCast); #endif return new H4501_PresentedNumberUnscreened(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4501_PartySubaddress[]={ {"userSpecifiedSubaddress",0} ,{"nsapSubaddress",1} }; #endif // // PartySubaddress // H4501_PartySubaddress::H4501_PartySubaddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4501_PartySubaddress,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4501_PartySubaddress::operator H4501_UserSpecifiedSubaddress &() const #else H4501_PartySubaddress::operator H4501_UserSpecifiedSubaddress &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4501_UserSpecifiedSubaddress), PInvalidCast); #endif return *(H4501_UserSpecifiedSubaddress *)choice; } H4501_PartySubaddress::operator const H4501_UserSpecifiedSubaddress &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4501_UserSpecifiedSubaddress), PInvalidCast); #endif return *(H4501_UserSpecifiedSubaddress *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4501_PartySubaddress::operator H4501_NSAPSubaddress &() const #else H4501_PartySubaddress::operator H4501_NSAPSubaddress &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4501_NSAPSubaddress), PInvalidCast); #endif return *(H4501_NSAPSubaddress *)choice; } H4501_PartySubaddress::operator const H4501_NSAPSubaddress &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4501_NSAPSubaddress), PInvalidCast); #endif return *(H4501_NSAPSubaddress *)choice; } PBoolean H4501_PartySubaddress::CreateObject() { switch (tag) { case e_userSpecifiedSubaddress : choice = new H4501_UserSpecifiedSubaddress(); return TRUE; case e_nsapSubaddress : choice = new H4501_NSAPSubaddress(); return TRUE; } choice = NULL; return FALSE; } PObject * H4501_PartySubaddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_PartySubaddress::Class()), PInvalidCast); #endif return new H4501_PartySubaddress(*this); } // // NSAPSubaddress // H4501_NSAPSubaddress::H4501_NSAPSubaddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 20); } H4501_NSAPSubaddress::H4501_NSAPSubaddress(const char * v) { SetValue(v); } H4501_NSAPSubaddress::H4501_NSAPSubaddress(const PString & v) { SetValue(v); } H4501_NSAPSubaddress::H4501_NSAPSubaddress(const PBYTEArray & v) { SetValue(v); } H4501_NSAPSubaddress & H4501_NSAPSubaddress::operator=(const char * v) { SetValue(v); return *this; } H4501_NSAPSubaddress & H4501_NSAPSubaddress::operator=(const PString & v) { SetValue(v); return *this; } H4501_NSAPSubaddress & H4501_NSAPSubaddress::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H4501_NSAPSubaddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_NSAPSubaddress::Class()), PInvalidCast); #endif return new H4501_NSAPSubaddress(*this); } // // SubaddressInformation // H4501_SubaddressInformation::H4501_SubaddressInformation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 20); } H4501_SubaddressInformation::H4501_SubaddressInformation(const char * v) { SetValue(v); } H4501_SubaddressInformation::H4501_SubaddressInformation(const PString & v) { SetValue(v); } H4501_SubaddressInformation::H4501_SubaddressInformation(const PBYTEArray & v) { SetValue(v); } H4501_SubaddressInformation & H4501_SubaddressInformation::operator=(const char * v) { SetValue(v); return *this; } H4501_SubaddressInformation & H4501_SubaddressInformation::operator=(const PString & v) { SetValue(v); return *this; } H4501_SubaddressInformation & H4501_SubaddressInformation::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H4501_SubaddressInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_SubaddressInformation::Class()), PInvalidCast); #endif return new H4501_SubaddressInformation(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4501_ScreeningIndicator[]={ {"userProvidedNotScreened",0} ,{"userProvidedVerifiedAndPassed",1} ,{"userProvidedVerifiedAndFailed",2} ,{"networkProvided",3} }; #endif // // ScreeningIndicator // H4501_ScreeningIndicator::H4501_ScreeningIndicator(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4501_ScreeningIndicator,4 #endif ) { } H4501_ScreeningIndicator & H4501_ScreeningIndicator::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4501_ScreeningIndicator::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_ScreeningIndicator::Class()), PInvalidCast); #endif return new H4501_ScreeningIndicator(*this); } // // PresentationAllowedIndicator // H4501_PresentationAllowedIndicator::H4501_PresentationAllowedIndicator(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Boolean(tag, tagClass) { } H4501_PresentationAllowedIndicator & H4501_PresentationAllowedIndicator::operator=(PBoolean v) { SetValue(v); return *this; } PObject * H4501_PresentationAllowedIndicator::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_PresentationAllowedIndicator::Class()), PInvalidCast); #endif return new H4501_PresentationAllowedIndicator(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4501_GeneralErrorList[]={ {"userNotSubscribed",0} ,{"rejectedByNetwork",1} ,{"rejectedByUser",2} ,{"notAvailable",3} ,{"insufficientInformation",5} ,{"invalidServedUserNumber",6} ,{"invalidCallState",7} ,{"basicServiceNotProvided",8} ,{"notIncomingCall",9} ,{"supplementaryServiceInteractionNotAllowed",10} ,{"resourceUnavailable",11} ,{"callFailure",25} ,{"proceduralError",43} }; #endif // // GeneralErrorList // H4501_GeneralErrorList::H4501_GeneralErrorList(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 43, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4501_GeneralErrorList,13 #endif ) { } H4501_GeneralErrorList & H4501_GeneralErrorList::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4501_GeneralErrorList::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_GeneralErrorList::Class()), PInvalidCast); #endif return new H4501_GeneralErrorList(*this); } // // H225InformationElement // H4501_H225InformationElement::H4501_H225InformationElement(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { } H4501_H225InformationElement::H4501_H225InformationElement(const char * v) { SetValue(v); } H4501_H225InformationElement::H4501_H225InformationElement(const PString & v) { SetValue(v); } H4501_H225InformationElement::H4501_H225InformationElement(const PBYTEArray & v) { SetValue(v); } H4501_H225InformationElement & H4501_H225InformationElement::operator=(const char * v) { SetValue(v); return *this; } H4501_H225InformationElement & H4501_H225InformationElement::operator=(const PString & v) { SetValue(v); return *this; } H4501_H225InformationElement & H4501_H225InformationElement::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H4501_H225InformationElement::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_H225InformationElement::Class()), PInvalidCast); #endif return new H4501_H225InformationElement(*this); } // // Extension // H4501_Extension::H4501_Extension(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H4501_Extension::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "extensionId = " << setprecision(indent) << m_extensionId << '\n'; strm << setw(indent+20) << "extensionArgument = " << setprecision(indent) << m_extensionArgument << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4501_Extension::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4501_Extension), PInvalidCast); #endif const H4501_Extension & other = (const H4501_Extension &)obj; Comparison result; if ((result = m_extensionId.Compare(other.m_extensionId)) != EqualTo) return result; if ((result = m_extensionArgument.Compare(other.m_extensionArgument)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4501_Extension::GetDataLength() const { PINDEX length = 0; length += m_extensionId.GetObjectLength(); length += m_extensionArgument.GetObjectLength(); return length; } PBoolean H4501_Extension::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_extensionId.Decode(strm)) return FALSE; if (!m_extensionArgument.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4501_Extension::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_extensionId.Encode(strm); m_extensionArgument.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4501_Extension::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_Extension::Class()), PInvalidCast); #endif return new H4501_Extension(*this); } // // ArrayOf_ROS // H4501_ArrayOf_ROS::H4501_ArrayOf_ROS(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H4501_ArrayOf_ROS::CreateObject() const { return new X880_ROS; } X880_ROS & H4501_ArrayOf_ROS::operator[](PINDEX i) const { return (X880_ROS &)array[i]; } PObject * H4501_ArrayOf_ROS::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_ArrayOf_ROS::Class()), PInvalidCast); #endif return new H4501_ArrayOf_ROS(*this); } // // ArrayOf_AliasAddress // H4501_ArrayOf_AliasAddress::H4501_ArrayOf_AliasAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H4501_ArrayOf_AliasAddress::CreateObject() const { return new H225_AliasAddress; } H225_AliasAddress & H4501_ArrayOf_AliasAddress::operator[](PINDEX i) const { return (H225_AliasAddress &)array[i]; } PObject * H4501_ArrayOf_AliasAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_ArrayOf_AliasAddress::Class()), PInvalidCast); #endif return new H4501_ArrayOf_AliasAddress(*this); } // // NetworkFacilityExtension // H4501_NetworkFacilityExtension::H4501_NetworkFacilityExtension(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H4501_NetworkFacilityExtension::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "sourceEntity = " << setprecision(indent) << m_sourceEntity << '\n'; if (HasOptionalField(e_sourceEntityAddress)) strm << setw(indent+22) << "sourceEntityAddress = " << setprecision(indent) << m_sourceEntityAddress << '\n'; strm << setw(indent+20) << "destinationEntity = " << setprecision(indent) << m_destinationEntity << '\n'; if (HasOptionalField(e_destinationEntityAddress)) strm << setw(indent+27) << "destinationEntityAddress = " << setprecision(indent) << m_destinationEntityAddress << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4501_NetworkFacilityExtension::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4501_NetworkFacilityExtension), PInvalidCast); #endif const H4501_NetworkFacilityExtension & other = (const H4501_NetworkFacilityExtension &)obj; Comparison result; if ((result = m_sourceEntity.Compare(other.m_sourceEntity)) != EqualTo) return result; if ((result = m_sourceEntityAddress.Compare(other.m_sourceEntityAddress)) != EqualTo) return result; if ((result = m_destinationEntity.Compare(other.m_destinationEntity)) != EqualTo) return result; if ((result = m_destinationEntityAddress.Compare(other.m_destinationEntityAddress)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4501_NetworkFacilityExtension::GetDataLength() const { PINDEX length = 0; length += m_sourceEntity.GetObjectLength(); if (HasOptionalField(e_sourceEntityAddress)) length += m_sourceEntityAddress.GetObjectLength(); length += m_destinationEntity.GetObjectLength(); if (HasOptionalField(e_destinationEntityAddress)) length += m_destinationEntityAddress.GetObjectLength(); return length; } PBoolean H4501_NetworkFacilityExtension::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sourceEntity.Decode(strm)) return FALSE; if (HasOptionalField(e_sourceEntityAddress) && !m_sourceEntityAddress.Decode(strm)) return FALSE; if (!m_destinationEntity.Decode(strm)) return FALSE; if (HasOptionalField(e_destinationEntityAddress) && !m_destinationEntityAddress.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4501_NetworkFacilityExtension::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sourceEntity.Encode(strm); if (HasOptionalField(e_sourceEntityAddress)) m_sourceEntityAddress.Encode(strm); m_destinationEntity.Encode(strm); if (HasOptionalField(e_destinationEntityAddress)) m_destinationEntityAddress.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4501_NetworkFacilityExtension::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_NetworkFacilityExtension::Class()), PInvalidCast); #endif return new H4501_NetworkFacilityExtension(*this); } // // AddressScreened // H4501_AddressScreened::H4501_AddressScreened(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H4501_AddressScreened::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "partyNumber = " << setprecision(indent) << m_partyNumber << '\n'; strm << setw(indent+21) << "screeningIndicator = " << setprecision(indent) << m_screeningIndicator << '\n'; if (HasOptionalField(e_partySubaddress)) strm << setw(indent+18) << "partySubaddress = " << setprecision(indent) << m_partySubaddress << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4501_AddressScreened::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4501_AddressScreened), PInvalidCast); #endif const H4501_AddressScreened & other = (const H4501_AddressScreened &)obj; Comparison result; if ((result = m_partyNumber.Compare(other.m_partyNumber)) != EqualTo) return result; if ((result = m_screeningIndicator.Compare(other.m_screeningIndicator)) != EqualTo) return result; if ((result = m_partySubaddress.Compare(other.m_partySubaddress)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4501_AddressScreened::GetDataLength() const { PINDEX length = 0; length += m_partyNumber.GetObjectLength(); length += m_screeningIndicator.GetObjectLength(); if (HasOptionalField(e_partySubaddress)) length += m_partySubaddress.GetObjectLength(); return length; } PBoolean H4501_AddressScreened::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_partyNumber.Decode(strm)) return FALSE; if (!m_screeningIndicator.Decode(strm)) return FALSE; if (HasOptionalField(e_partySubaddress) && !m_partySubaddress.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4501_AddressScreened::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_partyNumber.Encode(strm); m_screeningIndicator.Encode(strm); if (HasOptionalField(e_partySubaddress)) m_partySubaddress.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4501_AddressScreened::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_AddressScreened::Class()), PInvalidCast); #endif return new H4501_AddressScreened(*this); } // // NumberScreened // H4501_NumberScreened::H4501_NumberScreened(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H4501_NumberScreened::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "partyNumber = " << setprecision(indent) << m_partyNumber << '\n'; strm << setw(indent+21) << "screeningIndicator = " << setprecision(indent) << m_screeningIndicator << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4501_NumberScreened::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4501_NumberScreened), PInvalidCast); #endif const H4501_NumberScreened & other = (const H4501_NumberScreened &)obj; Comparison result; if ((result = m_partyNumber.Compare(other.m_partyNumber)) != EqualTo) return result; if ((result = m_screeningIndicator.Compare(other.m_screeningIndicator)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4501_NumberScreened::GetDataLength() const { PINDEX length = 0; length += m_partyNumber.GetObjectLength(); length += m_screeningIndicator.GetObjectLength(); return length; } PBoolean H4501_NumberScreened::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_partyNumber.Decode(strm)) return FALSE; if (!m_screeningIndicator.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4501_NumberScreened::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_partyNumber.Encode(strm); m_screeningIndicator.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4501_NumberScreened::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_NumberScreened::Class()), PInvalidCast); #endif return new H4501_NumberScreened(*this); } // // Address // H4501_Address::H4501_Address(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H4501_Address::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "partyNumber = " << setprecision(indent) << m_partyNumber << '\n'; if (HasOptionalField(e_partySubaddress)) strm << setw(indent+18) << "partySubaddress = " << setprecision(indent) << m_partySubaddress << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4501_Address::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4501_Address), PInvalidCast); #endif const H4501_Address & other = (const H4501_Address &)obj; Comparison result; if ((result = m_partyNumber.Compare(other.m_partyNumber)) != EqualTo) return result; if ((result = m_partySubaddress.Compare(other.m_partySubaddress)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4501_Address::GetDataLength() const { PINDEX length = 0; length += m_partyNumber.GetObjectLength(); if (HasOptionalField(e_partySubaddress)) length += m_partySubaddress.GetObjectLength(); return length; } PBoolean H4501_Address::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_partyNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_partySubaddress) && !m_partySubaddress.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4501_Address::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_partyNumber.Encode(strm); if (HasOptionalField(e_partySubaddress)) m_partySubaddress.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4501_Address::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_Address::Class()), PInvalidCast); #endif return new H4501_Address(*this); } // // EndpointAddress // H4501_EndpointAddress::H4501_EndpointAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H4501_EndpointAddress::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "destinationAddress = " << setprecision(indent) << m_destinationAddress << '\n'; if (HasOptionalField(e_remoteExtensionAddress)) strm << setw(indent+25) << "remoteExtensionAddress = " << setprecision(indent) << m_remoteExtensionAddress << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4501_EndpointAddress::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4501_EndpointAddress), PInvalidCast); #endif const H4501_EndpointAddress & other = (const H4501_EndpointAddress &)obj; Comparison result; if ((result = m_destinationAddress.Compare(other.m_destinationAddress)) != EqualTo) return result; if ((result = m_remoteExtensionAddress.Compare(other.m_remoteExtensionAddress)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4501_EndpointAddress::GetDataLength() const { PINDEX length = 0; length += m_destinationAddress.GetObjectLength(); if (HasOptionalField(e_remoteExtensionAddress)) length += m_remoteExtensionAddress.GetObjectLength(); return length; } PBoolean H4501_EndpointAddress::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_destinationAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_remoteExtensionAddress) && !m_remoteExtensionAddress.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4501_EndpointAddress::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_destinationAddress.Encode(strm); if (HasOptionalField(e_remoteExtensionAddress)) m_remoteExtensionAddress.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4501_EndpointAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_EndpointAddress::Class()), PInvalidCast); #endif return new H4501_EndpointAddress(*this); } // // UserSpecifiedSubaddress // H4501_UserSpecifiedSubaddress::H4501_UserSpecifiedSubaddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H4501_UserSpecifiedSubaddress::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "subaddressInformation = " << setprecision(indent) << m_subaddressInformation << '\n'; if (HasOptionalField(e_oddCountIndicator)) strm << setw(indent+20) << "oddCountIndicator = " << setprecision(indent) << m_oddCountIndicator << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4501_UserSpecifiedSubaddress::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4501_UserSpecifiedSubaddress), PInvalidCast); #endif const H4501_UserSpecifiedSubaddress & other = (const H4501_UserSpecifiedSubaddress &)obj; Comparison result; if ((result = m_subaddressInformation.Compare(other.m_subaddressInformation)) != EqualTo) return result; if ((result = m_oddCountIndicator.Compare(other.m_oddCountIndicator)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4501_UserSpecifiedSubaddress::GetDataLength() const { PINDEX length = 0; length += m_subaddressInformation.GetObjectLength(); if (HasOptionalField(e_oddCountIndicator)) length += m_oddCountIndicator.GetObjectLength(); return length; } PBoolean H4501_UserSpecifiedSubaddress::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_subaddressInformation.Decode(strm)) return FALSE; if (HasOptionalField(e_oddCountIndicator) && !m_oddCountIndicator.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4501_UserSpecifiedSubaddress::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_subaddressInformation.Encode(strm); if (HasOptionalField(e_oddCountIndicator)) m_oddCountIndicator.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4501_UserSpecifiedSubaddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_UserSpecifiedSubaddress::Class()), PInvalidCast); #endif return new H4501_UserSpecifiedSubaddress(*this); } // // SupplementaryService // H4501_SupplementaryService::H4501_SupplementaryService(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H4501_SupplementaryService::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_networkFacilityExtension)) strm << setw(indent+27) << "networkFacilityExtension = " << setprecision(indent) << m_networkFacilityExtension << '\n'; if (HasOptionalField(e_interpretationApdu)) strm << setw(indent+21) << "interpretationApdu = " << setprecision(indent) << m_interpretationApdu << '\n'; strm << setw(indent+14) << "serviceApdu = " << setprecision(indent) << m_serviceApdu << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4501_SupplementaryService::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4501_SupplementaryService), PInvalidCast); #endif const H4501_SupplementaryService & other = (const H4501_SupplementaryService &)obj; Comparison result; if ((result = m_networkFacilityExtension.Compare(other.m_networkFacilityExtension)) != EqualTo) return result; if ((result = m_interpretationApdu.Compare(other.m_interpretationApdu)) != EqualTo) return result; if ((result = m_serviceApdu.Compare(other.m_serviceApdu)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4501_SupplementaryService::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_networkFacilityExtension)) length += m_networkFacilityExtension.GetObjectLength(); if (HasOptionalField(e_interpretationApdu)) length += m_interpretationApdu.GetObjectLength(); length += m_serviceApdu.GetObjectLength(); return length; } PBoolean H4501_SupplementaryService::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_networkFacilityExtension) && !m_networkFacilityExtension.Decode(strm)) return FALSE; if (HasOptionalField(e_interpretationApdu) && !m_interpretationApdu.Decode(strm)) return FALSE; if (!m_serviceApdu.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4501_SupplementaryService::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_networkFacilityExtension)) m_networkFacilityExtension.Encode(strm); if (HasOptionalField(e_interpretationApdu)) m_interpretationApdu.Encode(strm); m_serviceApdu.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4501_SupplementaryService::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4501_SupplementaryService::Class()), PInvalidCast); #endif return new H4501_SupplementaryService(*this); } #endif // if ! H323_DISABLE_H4501 // End of h4501.cxx h323plus/src/h450/h4505.cxx0000644000175000017500000013356611015524424013663 0ustar markmark// // h4505.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h4505.h" #endif #include #include "h450/h4505.h" #define new PNEW #if ! H323_DISABLE_H4505 #ifndef PASN_NOPRINTON const static PASN_Names Names_H4505_CallParkPickupOperations[]={ {"cpRequest",106} ,{"cpSetup",107} ,{"groupIndicationOn",8} ,{"groupIndicationOff",9} ,{"pickrequ",110} ,{"pickup",111} ,{"pickExe",112} ,{"cpNotify",113} ,{"cpickupNotify",114} }; #endif // // CallParkPickupOperations // H4505_CallParkPickupOperations::H4505_CallParkPickupOperations(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 114, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4505_CallParkPickupOperations,9 #endif ) { } H4505_CallParkPickupOperations & H4505_CallParkPickupOperations::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4505_CallParkPickupOperations::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4505_CallParkPickupOperations::Class()), PInvalidCast); #endif return new H4505_CallParkPickupOperations(*this); } // // ParkedToPosition // H4505_ParkedToPosition::H4505_ParkedToPosition(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } H4505_ParkedToPosition & H4505_ParkedToPosition::operator=(int v) { SetValue(v); return *this; } H4505_ParkedToPosition & H4505_ParkedToPosition::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4505_ParkedToPosition::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4505_ParkedToPosition::Class()), PInvalidCast); #endif return new H4505_ParkedToPosition(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4505_ParkCondition[]={ {"unspecified",0} ,{"parkedToUserIdle",1} ,{"parkedToUserBusy",2} ,{"parkedToGroup",3} }; #endif // // ParkCondition // H4505_ParkCondition::H4505_ParkCondition(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4505_ParkCondition,4 #endif ) { } H4505_ParkCondition & H4505_ParkCondition::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4505_ParkCondition::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4505_ParkCondition::Class()), PInvalidCast); #endif return new H4505_ParkCondition(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4505_CallType[]={ {"parkedCall",0} ,{"alertingCall",1} }; #endif // // CallType // H4505_CallType::H4505_CallType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4505_CallType,2 #endif ) { } H4505_CallType & H4505_CallType::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4505_CallType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4505_CallType::Class()), PInvalidCast); #endif return new H4505_CallType(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4505_CallPickupErrors[]={ {"callPickupIdInvalid",2000} ,{"callAlreadyPickedUp",2001} ,{"undefined",2002} }; #endif // // CallPickupErrors // H4505_CallPickupErrors::H4505_CallPickupErrors(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 2002, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4505_CallPickupErrors,3 #endif ) { } H4505_CallPickupErrors & H4505_CallPickupErrors::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4505_CallPickupErrors::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4505_CallPickupErrors::Class()), PInvalidCast); #endif return new H4505_CallPickupErrors(*this); } // // ArrayOf_MixedExtension // H4505_ArrayOf_MixedExtension::H4505_ArrayOf_MixedExtension(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H4505_ArrayOf_MixedExtension::CreateObject() const { return new H4504_MixedExtension; } H4504_MixedExtension & H4505_ArrayOf_MixedExtension::operator[](PINDEX i) const { return (H4504_MixedExtension &)array[i]; } PObject * H4505_ArrayOf_MixedExtension::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4505_ArrayOf_MixedExtension::Class()), PInvalidCast); #endif return new H4505_ArrayOf_MixedExtension(*this); } // // CpRequestArg // H4505_CpRequestArg::H4505_CpRequestArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_extensionArg.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4505_CpRequestArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "parkingNumber = " << setprecision(indent) << m_parkingNumber << '\n'; strm << setw(indent+15) << "parkedNumber = " << setprecision(indent) << m_parkedNumber << '\n'; strm << setw(indent+17) << "parkedToNumber = " << setprecision(indent) << m_parkedToNumber << '\n'; if (HasOptionalField(e_parkedToPosition)) strm << setw(indent+19) << "parkedToPosition = " << setprecision(indent) << m_parkedToPosition << '\n'; if (HasOptionalField(e_extensionArg)) strm << setw(indent+15) << "extensionArg = " << setprecision(indent) << m_extensionArg << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4505_CpRequestArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4505_CpRequestArg), PInvalidCast); #endif const H4505_CpRequestArg & other = (const H4505_CpRequestArg &)obj; Comparison result; if ((result = m_parkingNumber.Compare(other.m_parkingNumber)) != EqualTo) return result; if ((result = m_parkedNumber.Compare(other.m_parkedNumber)) != EqualTo) return result; if ((result = m_parkedToNumber.Compare(other.m_parkedToNumber)) != EqualTo) return result; if ((result = m_parkedToPosition.Compare(other.m_parkedToPosition)) != EqualTo) return result; if ((result = m_extensionArg.Compare(other.m_extensionArg)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4505_CpRequestArg::GetDataLength() const { PINDEX length = 0; length += m_parkingNumber.GetObjectLength(); length += m_parkedNumber.GetObjectLength(); length += m_parkedToNumber.GetObjectLength(); if (HasOptionalField(e_parkedToPosition)) length += m_parkedToPosition.GetObjectLength(); if (HasOptionalField(e_extensionArg)) length += m_extensionArg.GetObjectLength(); return length; } PBoolean H4505_CpRequestArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_parkingNumber.Decode(strm)) return FALSE; if (!m_parkedNumber.Decode(strm)) return FALSE; if (!m_parkedToNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_parkedToPosition) && !m_parkedToPosition.Decode(strm)) return FALSE; if (HasOptionalField(e_extensionArg) && !m_extensionArg.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4505_CpRequestArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_parkingNumber.Encode(strm); m_parkedNumber.Encode(strm); m_parkedToNumber.Encode(strm); if (HasOptionalField(e_parkedToPosition)) m_parkedToPosition.Encode(strm); if (HasOptionalField(e_extensionArg)) m_extensionArg.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4505_CpRequestArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4505_CpRequestArg::Class()), PInvalidCast); #endif return new H4505_CpRequestArg(*this); } // // CpRequestRes // H4505_CpRequestRes::H4505_CpRequestRes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_extensionRes.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4505_CpRequestRes::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "parkedToNumber = " << setprecision(indent) << m_parkedToNumber << '\n'; if (HasOptionalField(e_parkedToPosition)) strm << setw(indent+19) << "parkedToPosition = " << setprecision(indent) << m_parkedToPosition << '\n'; strm << setw(indent+16) << "parkCondition = " << setprecision(indent) << m_parkCondition << '\n'; if (HasOptionalField(e_extensionRes)) strm << setw(indent+15) << "extensionRes = " << setprecision(indent) << m_extensionRes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4505_CpRequestRes::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4505_CpRequestRes), PInvalidCast); #endif const H4505_CpRequestRes & other = (const H4505_CpRequestRes &)obj; Comparison result; if ((result = m_parkedToNumber.Compare(other.m_parkedToNumber)) != EqualTo) return result; if ((result = m_parkedToPosition.Compare(other.m_parkedToPosition)) != EqualTo) return result; if ((result = m_parkCondition.Compare(other.m_parkCondition)) != EqualTo) return result; if ((result = m_extensionRes.Compare(other.m_extensionRes)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4505_CpRequestRes::GetDataLength() const { PINDEX length = 0; length += m_parkedToNumber.GetObjectLength(); if (HasOptionalField(e_parkedToPosition)) length += m_parkedToPosition.GetObjectLength(); length += m_parkCondition.GetObjectLength(); if (HasOptionalField(e_extensionRes)) length += m_extensionRes.GetObjectLength(); return length; } PBoolean H4505_CpRequestRes::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_parkedToNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_parkedToPosition) && !m_parkedToPosition.Decode(strm)) return FALSE; if (!m_parkCondition.Decode(strm)) return FALSE; if (HasOptionalField(e_extensionRes) && !m_extensionRes.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4505_CpRequestRes::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_parkedToNumber.Encode(strm); if (HasOptionalField(e_parkedToPosition)) m_parkedToPosition.Encode(strm); m_parkCondition.Encode(strm); if (HasOptionalField(e_extensionRes)) m_extensionRes.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4505_CpRequestRes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4505_CpRequestRes::Class()), PInvalidCast); #endif return new H4505_CpRequestRes(*this); } // // CpSetupArg // H4505_CpSetupArg::H4505_CpSetupArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_extensionArg.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4505_CpSetupArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "parkingNumber = " << setprecision(indent) << m_parkingNumber << '\n'; strm << setw(indent+15) << "parkedNumber = " << setprecision(indent) << m_parkedNumber << '\n'; strm << setw(indent+17) << "parkedToNumber = " << setprecision(indent) << m_parkedToNumber << '\n'; if (HasOptionalField(e_parkedToPosition)) strm << setw(indent+19) << "parkedToPosition = " << setprecision(indent) << m_parkedToPosition << '\n'; if (HasOptionalField(e_extensionArg)) strm << setw(indent+15) << "extensionArg = " << setprecision(indent) << m_extensionArg << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4505_CpSetupArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4505_CpSetupArg), PInvalidCast); #endif const H4505_CpSetupArg & other = (const H4505_CpSetupArg &)obj; Comparison result; if ((result = m_parkingNumber.Compare(other.m_parkingNumber)) != EqualTo) return result; if ((result = m_parkedNumber.Compare(other.m_parkedNumber)) != EqualTo) return result; if ((result = m_parkedToNumber.Compare(other.m_parkedToNumber)) != EqualTo) return result; if ((result = m_parkedToPosition.Compare(other.m_parkedToPosition)) != EqualTo) return result; if ((result = m_extensionArg.Compare(other.m_extensionArg)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4505_CpSetupArg::GetDataLength() const { PINDEX length = 0; length += m_parkingNumber.GetObjectLength(); length += m_parkedNumber.GetObjectLength(); length += m_parkedToNumber.GetObjectLength(); if (HasOptionalField(e_parkedToPosition)) length += m_parkedToPosition.GetObjectLength(); if (HasOptionalField(e_extensionArg)) length += m_extensionArg.GetObjectLength(); return length; } PBoolean H4505_CpSetupArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_parkingNumber.Decode(strm)) return FALSE; if (!m_parkedNumber.Decode(strm)) return FALSE; if (!m_parkedToNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_parkedToPosition) && !m_parkedToPosition.Decode(strm)) return FALSE; if (HasOptionalField(e_extensionArg) && !m_extensionArg.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4505_CpSetupArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_parkingNumber.Encode(strm); m_parkedNumber.Encode(strm); m_parkedToNumber.Encode(strm); if (HasOptionalField(e_parkedToPosition)) m_parkedToPosition.Encode(strm); if (HasOptionalField(e_extensionArg)) m_extensionArg.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4505_CpSetupArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4505_CpSetupArg::Class()), PInvalidCast); #endif return new H4505_CpSetupArg(*this); } // // CpSetupRes // H4505_CpSetupRes::H4505_CpSetupRes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_extensionRes.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4505_CpSetupRes::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "parkedToNumber = " << setprecision(indent) << m_parkedToNumber << '\n'; if (HasOptionalField(e_parkedToPosition)) strm << setw(indent+19) << "parkedToPosition = " << setprecision(indent) << m_parkedToPosition << '\n'; strm << setw(indent+16) << "parkCondition = " << setprecision(indent) << m_parkCondition << '\n'; if (HasOptionalField(e_extensionRes)) strm << setw(indent+15) << "extensionRes = " << setprecision(indent) << m_extensionRes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4505_CpSetupRes::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4505_CpSetupRes), PInvalidCast); #endif const H4505_CpSetupRes & other = (const H4505_CpSetupRes &)obj; Comparison result; if ((result = m_parkedToNumber.Compare(other.m_parkedToNumber)) != EqualTo) return result; if ((result = m_parkedToPosition.Compare(other.m_parkedToPosition)) != EqualTo) return result; if ((result = m_parkCondition.Compare(other.m_parkCondition)) != EqualTo) return result; if ((result = m_extensionRes.Compare(other.m_extensionRes)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4505_CpSetupRes::GetDataLength() const { PINDEX length = 0; length += m_parkedToNumber.GetObjectLength(); if (HasOptionalField(e_parkedToPosition)) length += m_parkedToPosition.GetObjectLength(); length += m_parkCondition.GetObjectLength(); if (HasOptionalField(e_extensionRes)) length += m_extensionRes.GetObjectLength(); return length; } PBoolean H4505_CpSetupRes::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_parkedToNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_parkedToPosition) && !m_parkedToPosition.Decode(strm)) return FALSE; if (!m_parkCondition.Decode(strm)) return FALSE; if (HasOptionalField(e_extensionRes) && !m_extensionRes.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4505_CpSetupRes::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_parkedToNumber.Encode(strm); if (HasOptionalField(e_parkedToPosition)) m_parkedToPosition.Encode(strm); m_parkCondition.Encode(strm); if (HasOptionalField(e_extensionRes)) m_extensionRes.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4505_CpSetupRes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4505_CpSetupRes::Class()), PInvalidCast); #endif return new H4505_CpSetupRes(*this); } // // GroupIndicationOnArg // H4505_GroupIndicationOnArg::H4505_GroupIndicationOnArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_extensionArg.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4505_GroupIndicationOnArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "callPickupId = " << setprecision(indent) << m_callPickupId << '\n'; strm << setw(indent+20) << "groupMemberUserNr = " << setprecision(indent) << m_groupMemberUserNr << '\n'; strm << setw(indent+19) << "retrieveCallType = " << setprecision(indent) << m_retrieveCallType << '\n'; strm << setw(indent+18) << "partyToRetrieve = " << setprecision(indent) << m_partyToRetrieve << '\n'; strm << setw(indent+18) << "retrieveAddress = " << setprecision(indent) << m_retrieveAddress << '\n'; if (HasOptionalField(e_parkPosition)) strm << setw(indent+15) << "parkPosition = " << setprecision(indent) << m_parkPosition << '\n'; if (HasOptionalField(e_extensionArg)) strm << setw(indent+15) << "extensionArg = " << setprecision(indent) << m_extensionArg << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4505_GroupIndicationOnArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4505_GroupIndicationOnArg), PInvalidCast); #endif const H4505_GroupIndicationOnArg & other = (const H4505_GroupIndicationOnArg &)obj; Comparison result; if ((result = m_callPickupId.Compare(other.m_callPickupId)) != EqualTo) return result; if ((result = m_groupMemberUserNr.Compare(other.m_groupMemberUserNr)) != EqualTo) return result; if ((result = m_retrieveCallType.Compare(other.m_retrieveCallType)) != EqualTo) return result; if ((result = m_partyToRetrieve.Compare(other.m_partyToRetrieve)) != EqualTo) return result; if ((result = m_retrieveAddress.Compare(other.m_retrieveAddress)) != EqualTo) return result; if ((result = m_parkPosition.Compare(other.m_parkPosition)) != EqualTo) return result; if ((result = m_extensionArg.Compare(other.m_extensionArg)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4505_GroupIndicationOnArg::GetDataLength() const { PINDEX length = 0; length += m_callPickupId.GetObjectLength(); length += m_groupMemberUserNr.GetObjectLength(); length += m_retrieveCallType.GetObjectLength(); length += m_partyToRetrieve.GetObjectLength(); length += m_retrieveAddress.GetObjectLength(); if (HasOptionalField(e_parkPosition)) length += m_parkPosition.GetObjectLength(); if (HasOptionalField(e_extensionArg)) length += m_extensionArg.GetObjectLength(); return length; } PBoolean H4505_GroupIndicationOnArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_callPickupId.Decode(strm)) return FALSE; if (!m_groupMemberUserNr.Decode(strm)) return FALSE; if (!m_retrieveCallType.Decode(strm)) return FALSE; if (!m_partyToRetrieve.Decode(strm)) return FALSE; if (!m_retrieveAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_parkPosition) && !m_parkPosition.Decode(strm)) return FALSE; if (HasOptionalField(e_extensionArg) && !m_extensionArg.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4505_GroupIndicationOnArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_callPickupId.Encode(strm); m_groupMemberUserNr.Encode(strm); m_retrieveCallType.Encode(strm); m_partyToRetrieve.Encode(strm); m_retrieveAddress.Encode(strm); if (HasOptionalField(e_parkPosition)) m_parkPosition.Encode(strm); if (HasOptionalField(e_extensionArg)) m_extensionArg.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4505_GroupIndicationOnArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4505_GroupIndicationOnArg::Class()), PInvalidCast); #endif return new H4505_GroupIndicationOnArg(*this); } // // GroupIndicationOnRes // H4505_GroupIndicationOnRes::H4505_GroupIndicationOnRes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_extensionRes.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4505_GroupIndicationOnRes::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_extensionRes)) strm << setw(indent+15) << "extensionRes = " << setprecision(indent) << m_extensionRes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4505_GroupIndicationOnRes::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4505_GroupIndicationOnRes), PInvalidCast); #endif const H4505_GroupIndicationOnRes & other = (const H4505_GroupIndicationOnRes &)obj; Comparison result; if ((result = m_extensionRes.Compare(other.m_extensionRes)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4505_GroupIndicationOnRes::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_extensionRes)) length += m_extensionRes.GetObjectLength(); return length; } PBoolean H4505_GroupIndicationOnRes::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_extensionRes) && !m_extensionRes.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4505_GroupIndicationOnRes::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_extensionRes)) m_extensionRes.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4505_GroupIndicationOnRes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4505_GroupIndicationOnRes::Class()), PInvalidCast); #endif return new H4505_GroupIndicationOnRes(*this); } // // GroupIndicationOffArg // H4505_GroupIndicationOffArg::H4505_GroupIndicationOffArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_extensionArg.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4505_GroupIndicationOffArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "callPickupId = " << setprecision(indent) << m_callPickupId << '\n'; strm << setw(indent+20) << "groupMemberUserNr = " << setprecision(indent) << m_groupMemberUserNr << '\n'; if (HasOptionalField(e_extensionArg)) strm << setw(indent+15) << "extensionArg = " << setprecision(indent) << m_extensionArg << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4505_GroupIndicationOffArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4505_GroupIndicationOffArg), PInvalidCast); #endif const H4505_GroupIndicationOffArg & other = (const H4505_GroupIndicationOffArg &)obj; Comparison result; if ((result = m_callPickupId.Compare(other.m_callPickupId)) != EqualTo) return result; if ((result = m_groupMemberUserNr.Compare(other.m_groupMemberUserNr)) != EqualTo) return result; if ((result = m_extensionArg.Compare(other.m_extensionArg)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4505_GroupIndicationOffArg::GetDataLength() const { PINDEX length = 0; length += m_callPickupId.GetObjectLength(); length += m_groupMemberUserNr.GetObjectLength(); if (HasOptionalField(e_extensionArg)) length += m_extensionArg.GetObjectLength(); return length; } PBoolean H4505_GroupIndicationOffArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_callPickupId.Decode(strm)) return FALSE; if (!m_groupMemberUserNr.Decode(strm)) return FALSE; if (HasOptionalField(e_extensionArg) && !m_extensionArg.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4505_GroupIndicationOffArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_callPickupId.Encode(strm); m_groupMemberUserNr.Encode(strm); if (HasOptionalField(e_extensionArg)) m_extensionArg.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4505_GroupIndicationOffArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4505_GroupIndicationOffArg::Class()), PInvalidCast); #endif return new H4505_GroupIndicationOffArg(*this); } // // GroupIndicationOffRes // H4505_GroupIndicationOffRes::H4505_GroupIndicationOffRes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_extensionRes.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4505_GroupIndicationOffRes::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_extensionRes)) strm << setw(indent+15) << "extensionRes = " << setprecision(indent) << m_extensionRes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4505_GroupIndicationOffRes::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4505_GroupIndicationOffRes), PInvalidCast); #endif const H4505_GroupIndicationOffRes & other = (const H4505_GroupIndicationOffRes &)obj; Comparison result; if ((result = m_extensionRes.Compare(other.m_extensionRes)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4505_GroupIndicationOffRes::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_extensionRes)) length += m_extensionRes.GetObjectLength(); return length; } PBoolean H4505_GroupIndicationOffRes::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_extensionRes) && !m_extensionRes.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4505_GroupIndicationOffRes::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_extensionRes)) m_extensionRes.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4505_GroupIndicationOffRes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4505_GroupIndicationOffRes::Class()), PInvalidCast); #endif return new H4505_GroupIndicationOffRes(*this); } // // PickrequArg // H4505_PickrequArg::H4505_PickrequArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 4, TRUE, 0) { m_extensionArg.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4505_PickrequArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+19) << "picking_upNumber = " << setprecision(indent) << m_picking_upNumber << '\n'; if (HasOptionalField(e_callPickupId)) strm << setw(indent+15) << "callPickupId = " << setprecision(indent) << m_callPickupId << '\n'; if (HasOptionalField(e_partyToRetrieve)) strm << setw(indent+18) << "partyToRetrieve = " << setprecision(indent) << m_partyToRetrieve << '\n'; strm << setw(indent+18) << "retrieveAddress = " << setprecision(indent) << m_retrieveAddress << '\n'; if (HasOptionalField(e_parkPosition)) strm << setw(indent+15) << "parkPosition = " << setprecision(indent) << m_parkPosition << '\n'; if (HasOptionalField(e_extensionArg)) strm << setw(indent+15) << "extensionArg = " << setprecision(indent) << m_extensionArg << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4505_PickrequArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4505_PickrequArg), PInvalidCast); #endif const H4505_PickrequArg & other = (const H4505_PickrequArg &)obj; Comparison result; if ((result = m_picking_upNumber.Compare(other.m_picking_upNumber)) != EqualTo) return result; if ((result = m_callPickupId.Compare(other.m_callPickupId)) != EqualTo) return result; if ((result = m_partyToRetrieve.Compare(other.m_partyToRetrieve)) != EqualTo) return result; if ((result = m_retrieveAddress.Compare(other.m_retrieveAddress)) != EqualTo) return result; if ((result = m_parkPosition.Compare(other.m_parkPosition)) != EqualTo) return result; if ((result = m_extensionArg.Compare(other.m_extensionArg)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4505_PickrequArg::GetDataLength() const { PINDEX length = 0; length += m_picking_upNumber.GetObjectLength(); if (HasOptionalField(e_callPickupId)) length += m_callPickupId.GetObjectLength(); if (HasOptionalField(e_partyToRetrieve)) length += m_partyToRetrieve.GetObjectLength(); length += m_retrieveAddress.GetObjectLength(); if (HasOptionalField(e_parkPosition)) length += m_parkPosition.GetObjectLength(); if (HasOptionalField(e_extensionArg)) length += m_extensionArg.GetObjectLength(); return length; } PBoolean H4505_PickrequArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_picking_upNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_callPickupId) && !m_callPickupId.Decode(strm)) return FALSE; if (HasOptionalField(e_partyToRetrieve) && !m_partyToRetrieve.Decode(strm)) return FALSE; if (!m_retrieveAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_parkPosition) && !m_parkPosition.Decode(strm)) return FALSE; if (HasOptionalField(e_extensionArg) && !m_extensionArg.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4505_PickrequArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_picking_upNumber.Encode(strm); if (HasOptionalField(e_callPickupId)) m_callPickupId.Encode(strm); if (HasOptionalField(e_partyToRetrieve)) m_partyToRetrieve.Encode(strm); m_retrieveAddress.Encode(strm); if (HasOptionalField(e_parkPosition)) m_parkPosition.Encode(strm); if (HasOptionalField(e_extensionArg)) m_extensionArg.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4505_PickrequArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4505_PickrequArg::Class()), PInvalidCast); #endif return new H4505_PickrequArg(*this); } // // PickrequRes // H4505_PickrequRes::H4505_PickrequRes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_extensionRes.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4505_PickrequRes::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "callPickupId = " << setprecision(indent) << m_callPickupId << '\n'; if (HasOptionalField(e_extensionRes)) strm << setw(indent+15) << "extensionRes = " << setprecision(indent) << m_extensionRes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4505_PickrequRes::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4505_PickrequRes), PInvalidCast); #endif const H4505_PickrequRes & other = (const H4505_PickrequRes &)obj; Comparison result; if ((result = m_callPickupId.Compare(other.m_callPickupId)) != EqualTo) return result; if ((result = m_extensionRes.Compare(other.m_extensionRes)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4505_PickrequRes::GetDataLength() const { PINDEX length = 0; length += m_callPickupId.GetObjectLength(); if (HasOptionalField(e_extensionRes)) length += m_extensionRes.GetObjectLength(); return length; } PBoolean H4505_PickrequRes::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_callPickupId.Decode(strm)) return FALSE; if (HasOptionalField(e_extensionRes) && !m_extensionRes.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4505_PickrequRes::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_callPickupId.Encode(strm); if (HasOptionalField(e_extensionRes)) m_extensionRes.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4505_PickrequRes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4505_PickrequRes::Class()), PInvalidCast); #endif return new H4505_PickrequRes(*this); } // // PickupArg // H4505_PickupArg::H4505_PickupArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_extensionArg.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4505_PickupArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "callPickupId = " << setprecision(indent) << m_callPickupId << '\n'; strm << setw(indent+19) << "picking_upNumber = " << setprecision(indent) << m_picking_upNumber << '\n'; if (HasOptionalField(e_extensionArg)) strm << setw(indent+15) << "extensionArg = " << setprecision(indent) << m_extensionArg << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4505_PickupArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4505_PickupArg), PInvalidCast); #endif const H4505_PickupArg & other = (const H4505_PickupArg &)obj; Comparison result; if ((result = m_callPickupId.Compare(other.m_callPickupId)) != EqualTo) return result; if ((result = m_picking_upNumber.Compare(other.m_picking_upNumber)) != EqualTo) return result; if ((result = m_extensionArg.Compare(other.m_extensionArg)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4505_PickupArg::GetDataLength() const { PINDEX length = 0; length += m_callPickupId.GetObjectLength(); length += m_picking_upNumber.GetObjectLength(); if (HasOptionalField(e_extensionArg)) length += m_extensionArg.GetObjectLength(); return length; } PBoolean H4505_PickupArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_callPickupId.Decode(strm)) return FALSE; if (!m_picking_upNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_extensionArg) && !m_extensionArg.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4505_PickupArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_callPickupId.Encode(strm); m_picking_upNumber.Encode(strm); if (HasOptionalField(e_extensionArg)) m_extensionArg.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4505_PickupArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4505_PickupArg::Class()), PInvalidCast); #endif return new H4505_PickupArg(*this); } // // PickupRes // H4505_PickupRes::H4505_PickupRes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_extensionRes.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4505_PickupRes::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_extensionRes)) strm << setw(indent+15) << "extensionRes = " << setprecision(indent) << m_extensionRes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4505_PickupRes::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4505_PickupRes), PInvalidCast); #endif const H4505_PickupRes & other = (const H4505_PickupRes &)obj; Comparison result; if ((result = m_extensionRes.Compare(other.m_extensionRes)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4505_PickupRes::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_extensionRes)) length += m_extensionRes.GetObjectLength(); return length; } PBoolean H4505_PickupRes::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_extensionRes) && !m_extensionRes.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4505_PickupRes::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_extensionRes)) m_extensionRes.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4505_PickupRes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4505_PickupRes::Class()), PInvalidCast); #endif return new H4505_PickupRes(*this); } // // PickExeArg // H4505_PickExeArg::H4505_PickExeArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_extensionArg.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4505_PickExeArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "callPickupId = " << setprecision(indent) << m_callPickupId << '\n'; strm << setw(indent+19) << "picking_upNumber = " << setprecision(indent) << m_picking_upNumber << '\n'; strm << setw(indent+18) << "partyToRetrieve = " << setprecision(indent) << m_partyToRetrieve << '\n'; if (HasOptionalField(e_extensionArg)) strm << setw(indent+15) << "extensionArg = " << setprecision(indent) << m_extensionArg << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4505_PickExeArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4505_PickExeArg), PInvalidCast); #endif const H4505_PickExeArg & other = (const H4505_PickExeArg &)obj; Comparison result; if ((result = m_callPickupId.Compare(other.m_callPickupId)) != EqualTo) return result; if ((result = m_picking_upNumber.Compare(other.m_picking_upNumber)) != EqualTo) return result; if ((result = m_partyToRetrieve.Compare(other.m_partyToRetrieve)) != EqualTo) return result; if ((result = m_extensionArg.Compare(other.m_extensionArg)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4505_PickExeArg::GetDataLength() const { PINDEX length = 0; length += m_callPickupId.GetObjectLength(); length += m_picking_upNumber.GetObjectLength(); length += m_partyToRetrieve.GetObjectLength(); if (HasOptionalField(e_extensionArg)) length += m_extensionArg.GetObjectLength(); return length; } PBoolean H4505_PickExeArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_callPickupId.Decode(strm)) return FALSE; if (!m_picking_upNumber.Decode(strm)) return FALSE; if (!m_partyToRetrieve.Decode(strm)) return FALSE; if (HasOptionalField(e_extensionArg) && !m_extensionArg.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4505_PickExeArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_callPickupId.Encode(strm); m_picking_upNumber.Encode(strm); m_partyToRetrieve.Encode(strm); if (HasOptionalField(e_extensionArg)) m_extensionArg.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4505_PickExeArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4505_PickExeArg::Class()), PInvalidCast); #endif return new H4505_PickExeArg(*this); } // // PickExeRes // H4505_PickExeRes::H4505_PickExeRes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_extensionRes.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4505_PickExeRes::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_extensionRes)) strm << setw(indent+15) << "extensionRes = " << setprecision(indent) << m_extensionRes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4505_PickExeRes::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4505_PickExeRes), PInvalidCast); #endif const H4505_PickExeRes & other = (const H4505_PickExeRes &)obj; Comparison result; if ((result = m_extensionRes.Compare(other.m_extensionRes)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4505_PickExeRes::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_extensionRes)) length += m_extensionRes.GetObjectLength(); return length; } PBoolean H4505_PickExeRes::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_extensionRes) && !m_extensionRes.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4505_PickExeRes::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_extensionRes)) m_extensionRes.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4505_PickExeRes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4505_PickExeRes::Class()), PInvalidCast); #endif return new H4505_PickExeRes(*this); } // // CpNotifyArg // H4505_CpNotifyArg::H4505_CpNotifyArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_extensionArg.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4505_CpNotifyArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_parkingNumber)) strm << setw(indent+16) << "parkingNumber = " << setprecision(indent) << m_parkingNumber << '\n'; if (HasOptionalField(e_extensionArg)) strm << setw(indent+15) << "extensionArg = " << setprecision(indent) << m_extensionArg << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4505_CpNotifyArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4505_CpNotifyArg), PInvalidCast); #endif const H4505_CpNotifyArg & other = (const H4505_CpNotifyArg &)obj; Comparison result; if ((result = m_parkingNumber.Compare(other.m_parkingNumber)) != EqualTo) return result; if ((result = m_extensionArg.Compare(other.m_extensionArg)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4505_CpNotifyArg::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_parkingNumber)) length += m_parkingNumber.GetObjectLength(); if (HasOptionalField(e_extensionArg)) length += m_extensionArg.GetObjectLength(); return length; } PBoolean H4505_CpNotifyArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_parkingNumber) && !m_parkingNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_extensionArg) && !m_extensionArg.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4505_CpNotifyArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_parkingNumber)) m_parkingNumber.Encode(strm); if (HasOptionalField(e_extensionArg)) m_extensionArg.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4505_CpNotifyArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4505_CpNotifyArg::Class()), PInvalidCast); #endif return new H4505_CpNotifyArg(*this); } // // CpickupNotifyArg // H4505_CpickupNotifyArg::H4505_CpickupNotifyArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_extensionArg.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4505_CpickupNotifyArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_picking_upNumber)) strm << setw(indent+19) << "picking_upNumber = " << setprecision(indent) << m_picking_upNumber << '\n'; if (HasOptionalField(e_extensionArg)) strm << setw(indent+15) << "extensionArg = " << setprecision(indent) << m_extensionArg << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4505_CpickupNotifyArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4505_CpickupNotifyArg), PInvalidCast); #endif const H4505_CpickupNotifyArg & other = (const H4505_CpickupNotifyArg &)obj; Comparison result; if ((result = m_picking_upNumber.Compare(other.m_picking_upNumber)) != EqualTo) return result; if ((result = m_extensionArg.Compare(other.m_extensionArg)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4505_CpickupNotifyArg::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_picking_upNumber)) length += m_picking_upNumber.GetObjectLength(); if (HasOptionalField(e_extensionArg)) length += m_extensionArg.GetObjectLength(); return length; } PBoolean H4505_CpickupNotifyArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_picking_upNumber) && !m_picking_upNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_extensionArg) && !m_extensionArg.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4505_CpickupNotifyArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_picking_upNumber)) m_picking_upNumber.Encode(strm); if (HasOptionalField(e_extensionArg)) m_extensionArg.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4505_CpickupNotifyArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4505_CpickupNotifyArg::Class()), PInvalidCast); #endif return new H4505_CpickupNotifyArg(*this); } #endif // if ! H323_DISABLE_H4505 // End of h4505.cxx h323plus/src/h450/h4504.cxx0000644000175000017500000004015511015524422013647 0ustar markmark// // h4504.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h4504.h" #endif #include #include "h450/h4504.h" #define new PNEW #if ! H323_DISABLE_H4504 #ifndef PASN_NOPRINTON const static PASN_Names Names_H4504_CallHoldOperation[]={ {"holdNotific",101} ,{"retrieveNotific",102} ,{"remoteHold",103} ,{"remoteRetrieve",104} }; #endif // // CallHoldOperation // H4504_CallHoldOperation::H4504_CallHoldOperation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 104, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4504_CallHoldOperation,4 #endif ) { } H4504_CallHoldOperation & H4504_CallHoldOperation::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4504_CallHoldOperation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4504_CallHoldOperation::Class()), PInvalidCast); #endif return new H4504_CallHoldOperation(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4504_MixedExtension[]={ {"extension",0} ,{"nonStandardData",1} }; #endif // // MixedExtension // H4504_MixedExtension::H4504_MixedExtension(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4504_MixedExtension,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4504_MixedExtension::operator H4501_Extension &() const #else H4504_MixedExtension::operator H4501_Extension &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4501_Extension), PInvalidCast); #endif return *(H4501_Extension *)choice; } H4504_MixedExtension::operator const H4501_Extension &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4501_Extension), PInvalidCast); #endif return *(H4501_Extension *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4504_MixedExtension::operator H225_NonStandardParameter &() const #else H4504_MixedExtension::operator H225_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } H4504_MixedExtension::operator const H225_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } PBoolean H4504_MixedExtension::CreateObject() { switch (tag) { case e_extension : choice = new H4501_Extension(); return TRUE; case e_nonStandardData : choice = new H225_NonStandardParameter(); return TRUE; } choice = NULL; return FALSE; } PObject * H4504_MixedExtension::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4504_MixedExtension::Class()), PInvalidCast); #endif return new H4504_MixedExtension(*this); } // // Extension // H4504_Extension::H4504_Extension(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H4504_Extension::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "extensionId = " << setprecision(indent) << m_extensionId << '\n'; strm << setw(indent+11) << "argument = " << setprecision(indent) << m_argument << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4504_Extension::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4504_Extension), PInvalidCast); #endif const H4504_Extension & other = (const H4504_Extension &)obj; Comparison result; if ((result = m_extensionId.Compare(other.m_extensionId)) != EqualTo) return result; if ((result = m_argument.Compare(other.m_argument)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4504_Extension::GetDataLength() const { PINDEX length = 0; length += m_extensionId.GetObjectLength(); length += m_argument.GetObjectLength(); return length; } PBoolean H4504_Extension::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_extensionId.Decode(strm)) return FALSE; if (!m_argument.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4504_Extension::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_extensionId.Encode(strm); m_argument.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4504_Extension::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4504_Extension::Class()), PInvalidCast); #endif return new H4504_Extension(*this); } // // ArrayOf_MixedExtension // H4504_ArrayOf_MixedExtension::H4504_ArrayOf_MixedExtension(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H4504_ArrayOf_MixedExtension::CreateObject() const { return new H4504_MixedExtension; } H4504_MixedExtension & H4504_ArrayOf_MixedExtension::operator[](PINDEX i) const { return (H4504_MixedExtension &)array[i]; } PObject * H4504_ArrayOf_MixedExtension::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4504_ArrayOf_MixedExtension::Class()), PInvalidCast); #endif return new H4504_ArrayOf_MixedExtension(*this); } // // HoldNotificArg // H4504_HoldNotificArg::H4504_HoldNotificArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_extensionArg.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4504_HoldNotificArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_extensionArg)) strm << setw(indent+15) << "extensionArg = " << setprecision(indent) << m_extensionArg << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4504_HoldNotificArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4504_HoldNotificArg), PInvalidCast); #endif const H4504_HoldNotificArg & other = (const H4504_HoldNotificArg &)obj; Comparison result; if ((result = m_extensionArg.Compare(other.m_extensionArg)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4504_HoldNotificArg::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_extensionArg)) length += m_extensionArg.GetObjectLength(); return length; } PBoolean H4504_HoldNotificArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_extensionArg) && !m_extensionArg.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4504_HoldNotificArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_extensionArg)) m_extensionArg.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4504_HoldNotificArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4504_HoldNotificArg::Class()), PInvalidCast); #endif return new H4504_HoldNotificArg(*this); } // // RetrieveNotificArg // H4504_RetrieveNotificArg::H4504_RetrieveNotificArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_extensionArg.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4504_RetrieveNotificArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_extensionArg)) strm << setw(indent+15) << "extensionArg = " << setprecision(indent) << m_extensionArg << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4504_RetrieveNotificArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4504_RetrieveNotificArg), PInvalidCast); #endif const H4504_RetrieveNotificArg & other = (const H4504_RetrieveNotificArg &)obj; Comparison result; if ((result = m_extensionArg.Compare(other.m_extensionArg)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4504_RetrieveNotificArg::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_extensionArg)) length += m_extensionArg.GetObjectLength(); return length; } PBoolean H4504_RetrieveNotificArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_extensionArg) && !m_extensionArg.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4504_RetrieveNotificArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_extensionArg)) m_extensionArg.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4504_RetrieveNotificArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4504_RetrieveNotificArg::Class()), PInvalidCast); #endif return new H4504_RetrieveNotificArg(*this); } // // RemoteHoldArg // H4504_RemoteHoldArg::H4504_RemoteHoldArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_extensionArg.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4504_RemoteHoldArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_extensionArg)) strm << setw(indent+15) << "extensionArg = " << setprecision(indent) << m_extensionArg << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4504_RemoteHoldArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4504_RemoteHoldArg), PInvalidCast); #endif const H4504_RemoteHoldArg & other = (const H4504_RemoteHoldArg &)obj; Comparison result; if ((result = m_extensionArg.Compare(other.m_extensionArg)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4504_RemoteHoldArg::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_extensionArg)) length += m_extensionArg.GetObjectLength(); return length; } PBoolean H4504_RemoteHoldArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_extensionArg) && !m_extensionArg.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4504_RemoteHoldArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_extensionArg)) m_extensionArg.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4504_RemoteHoldArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4504_RemoteHoldArg::Class()), PInvalidCast); #endif return new H4504_RemoteHoldArg(*this); } // // RemoteHoldRes // H4504_RemoteHoldRes::H4504_RemoteHoldRes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_extensionRes.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4504_RemoteHoldRes::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_extensionRes)) strm << setw(indent+15) << "extensionRes = " << setprecision(indent) << m_extensionRes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4504_RemoteHoldRes::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4504_RemoteHoldRes), PInvalidCast); #endif const H4504_RemoteHoldRes & other = (const H4504_RemoteHoldRes &)obj; Comparison result; if ((result = m_extensionRes.Compare(other.m_extensionRes)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4504_RemoteHoldRes::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_extensionRes)) length += m_extensionRes.GetObjectLength(); return length; } PBoolean H4504_RemoteHoldRes::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_extensionRes) && !m_extensionRes.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4504_RemoteHoldRes::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_extensionRes)) m_extensionRes.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4504_RemoteHoldRes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4504_RemoteHoldRes::Class()), PInvalidCast); #endif return new H4504_RemoteHoldRes(*this); } // // RemoteRetrieveArg // H4504_RemoteRetrieveArg::H4504_RemoteRetrieveArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_extensionArg.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4504_RemoteRetrieveArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_extensionArg)) strm << setw(indent+15) << "extensionArg = " << setprecision(indent) << m_extensionArg << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4504_RemoteRetrieveArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4504_RemoteRetrieveArg), PInvalidCast); #endif const H4504_RemoteRetrieveArg & other = (const H4504_RemoteRetrieveArg &)obj; Comparison result; if ((result = m_extensionArg.Compare(other.m_extensionArg)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4504_RemoteRetrieveArg::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_extensionArg)) length += m_extensionArg.GetObjectLength(); return length; } PBoolean H4504_RemoteRetrieveArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_extensionArg) && !m_extensionArg.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4504_RemoteRetrieveArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_extensionArg)) m_extensionArg.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4504_RemoteRetrieveArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4504_RemoteRetrieveArg::Class()), PInvalidCast); #endif return new H4504_RemoteRetrieveArg(*this); } // // RemoteRetrieveRes // H4504_RemoteRetrieveRes::H4504_RemoteRetrieveRes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_extensionRes.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4504_RemoteRetrieveRes::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_extensionRes)) strm << setw(indent+15) << "extensionRes = " << setprecision(indent) << m_extensionRes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4504_RemoteRetrieveRes::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4504_RemoteRetrieveRes), PInvalidCast); #endif const H4504_RemoteRetrieveRes & other = (const H4504_RemoteRetrieveRes &)obj; Comparison result; if ((result = m_extensionRes.Compare(other.m_extensionRes)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4504_RemoteRetrieveRes::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_extensionRes)) length += m_extensionRes.GetObjectLength(); return length; } PBoolean H4504_RemoteRetrieveRes::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_extensionRes) && !m_extensionRes.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4504_RemoteRetrieveRes::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_extensionRes)) m_extensionRes.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4504_RemoteRetrieveRes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4504_RemoteRetrieveRes::Class()), PInvalidCast); #endif return new H4504_RemoteRetrieveRes(*this); } #endif // if ! H323_DISABLE_H4504 // End of h4504.cxx h323plus/src/h450/h4506.cxx0000644000175000017500000000777011015524431013657 0ustar markmark// // h4506.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h4506.h" #endif #include #include "h450/h4506.h" #define new PNEW #if ! H323_DISABLE_H4506 #ifndef PASN_NOPRINTON const static PASN_Names Names_H4506_CallWaitingOperations[]={ {"callWaiting",105} }; #endif // // CallWaitingOperations // H4506_CallWaitingOperations::H4506_CallWaitingOperations(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 105, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4506_CallWaitingOperations,1 #endif ) { } H4506_CallWaitingOperations & H4506_CallWaitingOperations::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4506_CallWaitingOperations::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4506_CallWaitingOperations::Class()), PInvalidCast); #endif return new H4506_CallWaitingOperations(*this); } // // ArrayOf_MixedExtension // H4506_ArrayOf_MixedExtension::H4506_ArrayOf_MixedExtension(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H4506_ArrayOf_MixedExtension::CreateObject() const { return new H4504_MixedExtension; } H4504_MixedExtension & H4506_ArrayOf_MixedExtension::operator[](PINDEX i) const { return (H4504_MixedExtension &)array[i]; } PObject * H4506_ArrayOf_MixedExtension::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4506_ArrayOf_MixedExtension::Class()), PInvalidCast); #endif return new H4506_ArrayOf_MixedExtension(*this); } // // CallWaitingArg // H4506_CallWaitingArg::H4506_CallWaitingArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_nbOfAddWaitingCalls.SetConstraints(PASN_Object::FixedConstraint, 0, 255); m_extensionArg.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4506_CallWaitingArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nbOfAddWaitingCalls)) strm << setw(indent+22) << "nbOfAddWaitingCalls = " << setprecision(indent) << m_nbOfAddWaitingCalls << '\n'; if (HasOptionalField(e_extensionArg)) strm << setw(indent+15) << "extensionArg = " << setprecision(indent) << m_extensionArg << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4506_CallWaitingArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4506_CallWaitingArg), PInvalidCast); #endif const H4506_CallWaitingArg & other = (const H4506_CallWaitingArg &)obj; Comparison result; if ((result = m_nbOfAddWaitingCalls.Compare(other.m_nbOfAddWaitingCalls)) != EqualTo) return result; if ((result = m_extensionArg.Compare(other.m_extensionArg)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4506_CallWaitingArg::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nbOfAddWaitingCalls)) length += m_nbOfAddWaitingCalls.GetObjectLength(); if (HasOptionalField(e_extensionArg)) length += m_extensionArg.GetObjectLength(); return length; } PBoolean H4506_CallWaitingArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nbOfAddWaitingCalls) && !m_nbOfAddWaitingCalls.Decode(strm)) return FALSE; if (HasOptionalField(e_extensionArg) && !m_extensionArg.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4506_CallWaitingArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nbOfAddWaitingCalls)) m_nbOfAddWaitingCalls.Encode(strm); if (HasOptionalField(e_extensionArg)) m_extensionArg.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4506_CallWaitingArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4506_CallWaitingArg::Class()), PInvalidCast); #endif return new H4506_CallWaitingArg(*this); } #endif // if ! H323_DISABLE_H4506 // End of h4506.cxx h323plus/src/h450/h45010.cxx0000644000175000017500000001556211015524415013732 0ustar markmark// // h45010.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h45010.h" #endif #include #include "h450/h45010.h" #define new PNEW #if ! H323_DISABLE_H45010 #ifndef PASN_NOPRINTON const static PASN_Names Names_H45010_H323CallOfferOperations[]={ {"callOfferRequest",34} ,{"remoteUserAlerting",115} ,{"cfbOverride",49} }; #endif // // H323CallOfferOperations // H45010_H323CallOfferOperations::H45010_H323CallOfferOperations(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 115, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H45010_H323CallOfferOperations,3 #endif ) { } H45010_H323CallOfferOperations & H45010_H323CallOfferOperations::operator=(unsigned v) { SetValue(v); return *this; } PObject * H45010_H323CallOfferOperations::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45010_H323CallOfferOperations::Class()), PInvalidCast); #endif return new H45010_H323CallOfferOperations(*this); } // // ArrayOf_MixedExtension // H45010_ArrayOf_MixedExtension::H45010_ArrayOf_MixedExtension(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H45010_ArrayOf_MixedExtension::CreateObject() const { return new H4504_MixedExtension; } H4504_MixedExtension & H45010_ArrayOf_MixedExtension::operator[](PINDEX i) const { return (H4504_MixedExtension &)array[i]; } PObject * H45010_ArrayOf_MixedExtension::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45010_ArrayOf_MixedExtension::Class()), PInvalidCast); #endif return new H45010_ArrayOf_MixedExtension(*this); } // // CoReqOptArg // H45010_CoReqOptArg::H45010_CoReqOptArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_extension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H45010_CoReqOptArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_extension)) strm << setw(indent+12) << "extension = " << setprecision(indent) << m_extension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H45010_CoReqOptArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H45010_CoReqOptArg), PInvalidCast); #endif const H45010_CoReqOptArg & other = (const H45010_CoReqOptArg &)obj; Comparison result; if ((result = m_extension.Compare(other.m_extension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H45010_CoReqOptArg::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_extension)) length += m_extension.GetObjectLength(); return length; } PBoolean H45010_CoReqOptArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_extension) && !m_extension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H45010_CoReqOptArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_extension)) m_extension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H45010_CoReqOptArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45010_CoReqOptArg::Class()), PInvalidCast); #endif return new H45010_CoReqOptArg(*this); } // // RUAlertOptArg // H45010_RUAlertOptArg::H45010_RUAlertOptArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_extension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H45010_RUAlertOptArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_extension)) strm << setw(indent+12) << "extension = " << setprecision(indent) << m_extension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H45010_RUAlertOptArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H45010_RUAlertOptArg), PInvalidCast); #endif const H45010_RUAlertOptArg & other = (const H45010_RUAlertOptArg &)obj; Comparison result; if ((result = m_extension.Compare(other.m_extension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H45010_RUAlertOptArg::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_extension)) length += m_extension.GetObjectLength(); return length; } PBoolean H45010_RUAlertOptArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_extension) && !m_extension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H45010_RUAlertOptArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_extension)) m_extension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H45010_RUAlertOptArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45010_RUAlertOptArg::Class()), PInvalidCast); #endif return new H45010_RUAlertOptArg(*this); } // // CfbOvrOptArg // H45010_CfbOvrOptArg::H45010_CfbOvrOptArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_extension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H45010_CfbOvrOptArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_extension)) strm << setw(indent+12) << "extension = " << setprecision(indent) << m_extension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H45010_CfbOvrOptArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H45010_CfbOvrOptArg), PInvalidCast); #endif const H45010_CfbOvrOptArg & other = (const H45010_CfbOvrOptArg &)obj; Comparison result; if ((result = m_extension.Compare(other.m_extension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H45010_CfbOvrOptArg::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_extension)) length += m_extension.GetObjectLength(); return length; } PBoolean H45010_CfbOvrOptArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_extension) && !m_extension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H45010_CfbOvrOptArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_extension)) m_extension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H45010_CfbOvrOptArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45010_CfbOvrOptArg::Class()), PInvalidCast); #endif return new H45010_CfbOvrOptArg(*this); } #endif // if ! H323_DISABLE_H45010 // End of h45010.cxx h323plus/src/h450/h4503.cxx0000644000175000017500000004565611015524421013660 0ustar markmark// // h4503.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h4503.h" #endif #include #include "h450/h4503.h" #define new PNEW #if ! H323_DISABLE_H4503 #ifndef PASN_NOPRINTON const static PASN_Names Names_H4503_H323CallDiversionOperations[]={ {"activateDiversionQ",15} ,{"deactivateDiversionQ",16} ,{"interrogateDiversionQ",17} ,{"checkRestriction",18} ,{"callRerouting",19} ,{"divertingLegInformation1",20} ,{"divertingLegInformation2",21} ,{"divertingLegInformation3",22} ,{"divertingLegInformation4",100} ,{"cfnrDivertedLegFailed",23} }; #endif // // H323CallDiversionOperations // H4503_H323CallDiversionOperations::H4503_H323CallDiversionOperations(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 100, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4503_H323CallDiversionOperations,10 #endif ) { } H4503_H323CallDiversionOperations & H4503_H323CallDiversionOperations::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4503_H323CallDiversionOperations::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4503_H323CallDiversionOperations::Class()), PInvalidCast); #endif return new H4503_H323CallDiversionOperations(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4503_DiversionReason[]={ {"unknown",0} ,{"cfu",1} ,{"cfb",2} ,{"cfnr",3} }; #endif // // DiversionReason // H4503_DiversionReason::H4503_DiversionReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4503_DiversionReason,4 #endif ) { } H4503_DiversionReason & H4503_DiversionReason::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4503_DiversionReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4503_DiversionReason::Class()), PInvalidCast); #endif return new H4503_DiversionReason(*this); } // // IntResultList // H4503_IntResultList::H4503_IntResultList(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 29); } PASN_Object * H4503_IntResultList::CreateObject() const { return new H4503_IntResult; } H4503_IntResult & H4503_IntResultList::operator[](PINDEX i) const { return (H4503_IntResult &)array[i]; } PObject * H4503_IntResultList::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4503_IntResultList::Class()), PInvalidCast); #endif return new H4503_IntResultList(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4503_Procedure[]={ {"cfu",0} ,{"cfb",1} ,{"cfnr",2} }; #endif // // Procedure // H4503_Procedure::H4503_Procedure(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4503_Procedure,3 #endif ) { } H4503_Procedure & H4503_Procedure::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4503_Procedure::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4503_Procedure::Class()), PInvalidCast); #endif return new H4503_Procedure(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4503_SubscriptionOption[]={ {"noNotification",0} ,{"notificationWithoutDivertedToNr",1} ,{"notificationWithDivertedToNr",2} }; #endif // // SubscriptionOption // H4503_SubscriptionOption::H4503_SubscriptionOption(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4503_SubscriptionOption,3 #endif ) { } H4503_SubscriptionOption & H4503_SubscriptionOption::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4503_SubscriptionOption::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4503_SubscriptionOption::Class()), PInvalidCast); #endif return new H4503_SubscriptionOption(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4503_CallDiversionErrors[]={ {"invalidDivertedNumber",12} ,{"specialServiceNumber",14} ,{"diversionToServedUserNumber",15} ,{"numberOfDiversionsExceeded",24} ,{"temporarilyUnavailable",1000} ,{"notAuthorized",1007} ,{"unspecified",1008} }; #endif // // CallDiversionErrors // H4503_CallDiversionErrors::H4503_CallDiversionErrors(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 1008, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4503_CallDiversionErrors,7 #endif ) { } H4503_CallDiversionErrors & H4503_CallDiversionErrors::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4503_CallDiversionErrors::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4503_CallDiversionErrors::Class()), PInvalidCast); #endif return new H4503_CallDiversionErrors(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4503_BasicService[]={ {"allServices",0} }; #endif // // BasicService // H4503_BasicService::H4503_BasicService(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 0, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4503_BasicService,1 #endif ) { } H4503_BasicService & H4503_BasicService::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4503_BasicService::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4503_BasicService::Class()), PInvalidCast); #endif return new H4503_BasicService(*this); } // // ExtensionSeq // H4503_ExtensionSeq::H4503_ExtensionSeq(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H4503_ExtensionSeq::CreateObject() const { return new H4501_Extension; } H4501_Extension & H4503_ExtensionSeq::operator[](PINDEX i) const { return (H4501_Extension &)array[i]; } PObject * H4503_ExtensionSeq::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4503_ExtensionSeq::Class()), PInvalidCast); #endif return new H4503_ExtensionSeq(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4503_IntResult_extension[]={ {"extensionSeq",0} ,{"nonStandardData",1} }; #endif // // IntResult_extension // H4503_IntResult_extension::H4503_IntResult_extension(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4503_IntResult_extension,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4503_IntResult_extension::operator H4503_ExtensionSeq &() const #else H4503_IntResult_extension::operator H4503_ExtensionSeq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4503_ExtensionSeq), PInvalidCast); #endif return *(H4503_ExtensionSeq *)choice; } H4503_IntResult_extension::operator const H4503_ExtensionSeq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4503_ExtensionSeq), PInvalidCast); #endif return *(H4503_ExtensionSeq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4503_IntResult_extension::operator H225_NonStandardParameter &() const #else H4503_IntResult_extension::operator H225_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } H4503_IntResult_extension::operator const H225_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } PBoolean H4503_IntResult_extension::CreateObject() { switch (tag) { case e_extensionSeq : choice = new H4503_ExtensionSeq(); return TRUE; case e_nonStandardData : choice = new H225_NonStandardParameter(); return TRUE; } choice = NULL; return FALSE; } PObject * H4503_IntResult_extension::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4503_IntResult_extension::Class()), PInvalidCast); #endif return new H4503_IntResult_extension(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4503_DivertingLegInfo2Arg_extension[]={ {"extensionSeq",0} ,{"nonStandardData",1} }; #endif // // DivertingLegInfo2Arg_extension // H4503_DivertingLegInfo2Arg_extension::H4503_DivertingLegInfo2Arg_extension(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4503_DivertingLegInfo2Arg_extension,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4503_DivertingLegInfo2Arg_extension::operator H4503_ExtensionSeq &() const #else H4503_DivertingLegInfo2Arg_extension::operator H4503_ExtensionSeq &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4503_ExtensionSeq), PInvalidCast); #endif return *(H4503_ExtensionSeq *)choice; } H4503_DivertingLegInfo2Arg_extension::operator const H4503_ExtensionSeq &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4503_ExtensionSeq), PInvalidCast); #endif return *(H4503_ExtensionSeq *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4503_DivertingLegInfo2Arg_extension::operator H225_NonStandardParameter &() const #else H4503_DivertingLegInfo2Arg_extension::operator H225_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } H4503_DivertingLegInfo2Arg_extension::operator const H225_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } PBoolean H4503_DivertingLegInfo2Arg_extension::CreateObject() { switch (tag) { case e_extensionSeq : choice = new H4503_ExtensionSeq(); return TRUE; case e_nonStandardData : choice = new H225_NonStandardParameter(); return TRUE; } choice = NULL; return FALSE; } PObject * H4503_DivertingLegInfo2Arg_extension::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4503_DivertingLegInfo2Arg_extension::Class()), PInvalidCast); #endif return new H4503_DivertingLegInfo2Arg_extension(*this); } // // IntResult // H4503_IntResult::H4503_IntResult(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H4503_IntResult::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "servedUserNr = " << setprecision(indent) << m_servedUserNr << '\n'; strm << setw(indent+15) << "basicService = " << setprecision(indent) << m_basicService << '\n'; strm << setw(indent+12) << "procedure = " << setprecision(indent) << m_procedure << '\n'; strm << setw(indent+20) << "divertedToAddress = " << setprecision(indent) << m_divertedToAddress << '\n'; strm << setw(indent+16) << "remoteEnabled = " << setprecision(indent) << m_remoteEnabled << '\n'; if (HasOptionalField(e_extension)) strm << setw(indent+12) << "extension = " << setprecision(indent) << m_extension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4503_IntResult::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4503_IntResult), PInvalidCast); #endif const H4503_IntResult & other = (const H4503_IntResult &)obj; Comparison result; if ((result = m_servedUserNr.Compare(other.m_servedUserNr)) != EqualTo) return result; if ((result = m_basicService.Compare(other.m_basicService)) != EqualTo) return result; if ((result = m_procedure.Compare(other.m_procedure)) != EqualTo) return result; if ((result = m_divertedToAddress.Compare(other.m_divertedToAddress)) != EqualTo) return result; if ((result = m_remoteEnabled.Compare(other.m_remoteEnabled)) != EqualTo) return result; if ((result = m_extension.Compare(other.m_extension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4503_IntResult::GetDataLength() const { PINDEX length = 0; length += m_servedUserNr.GetObjectLength(); length += m_basicService.GetObjectLength(); length += m_procedure.GetObjectLength(); length += m_divertedToAddress.GetObjectLength(); length += m_remoteEnabled.GetObjectLength(); if (HasOptionalField(e_extension)) length += m_extension.GetObjectLength(); return length; } PBoolean H4503_IntResult::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_servedUserNr.Decode(strm)) return FALSE; if (!m_basicService.Decode(strm)) return FALSE; if (!m_procedure.Decode(strm)) return FALSE; if (!m_divertedToAddress.Decode(strm)) return FALSE; if (!m_remoteEnabled.Decode(strm)) return FALSE; if (HasOptionalField(e_extension) && !m_extension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4503_IntResult::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_servedUserNr.Encode(strm); m_basicService.Encode(strm); m_procedure.Encode(strm); m_divertedToAddress.Encode(strm); m_remoteEnabled.Encode(strm); if (HasOptionalField(e_extension)) m_extension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4503_IntResult::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4503_IntResult::Class()), PInvalidCast); #endif return new H4503_IntResult(*this); } // // DivertingLegInfo2Arg // H4503_DivertingLegInfo2Arg::H4503_DivertingLegInfo2Arg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 6, TRUE, 0) { m_diversionCounter.SetConstraints(PASN_Object::FixedConstraint, 1, 15); m_redirectingInfo.SetConstraints(PASN_Object::FixedConstraint, 1, 128); m_originalCalledInfo.SetConstraints(PASN_Object::FixedConstraint, 1, 128); } #ifndef PASN_NOPRINTON void H4503_DivertingLegInfo2Arg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+19) << "diversionCounter = " << setprecision(indent) << m_diversionCounter << '\n'; strm << setw(indent+18) << "diversionReason = " << setprecision(indent) << m_diversionReason << '\n'; if (HasOptionalField(e_originalDiversionReason)) strm << setw(indent+26) << "originalDiversionReason = " << setprecision(indent) << m_originalDiversionReason << '\n'; if (HasOptionalField(e_divertingNr)) strm << setw(indent+14) << "divertingNr = " << setprecision(indent) << m_divertingNr << '\n'; if (HasOptionalField(e_originalCalledNr)) strm << setw(indent+19) << "originalCalledNr = " << setprecision(indent) << m_originalCalledNr << '\n'; if (HasOptionalField(e_redirectingInfo)) strm << setw(indent+18) << "redirectingInfo = " << setprecision(indent) << m_redirectingInfo << '\n'; if (HasOptionalField(e_originalCalledInfo)) strm << setw(indent+21) << "originalCalledInfo = " << setprecision(indent) << m_originalCalledInfo << '\n'; if (HasOptionalField(e_extension)) strm << setw(indent+12) << "extension = " << setprecision(indent) << m_extension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4503_DivertingLegInfo2Arg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4503_DivertingLegInfo2Arg), PInvalidCast); #endif const H4503_DivertingLegInfo2Arg & other = (const H4503_DivertingLegInfo2Arg &)obj; Comparison result; if ((result = m_diversionCounter.Compare(other.m_diversionCounter)) != EqualTo) return result; if ((result = m_diversionReason.Compare(other.m_diversionReason)) != EqualTo) return result; if ((result = m_originalDiversionReason.Compare(other.m_originalDiversionReason)) != EqualTo) return result; if ((result = m_divertingNr.Compare(other.m_divertingNr)) != EqualTo) return result; if ((result = m_originalCalledNr.Compare(other.m_originalCalledNr)) != EqualTo) return result; if ((result = m_redirectingInfo.Compare(other.m_redirectingInfo)) != EqualTo) return result; if ((result = m_originalCalledInfo.Compare(other.m_originalCalledInfo)) != EqualTo) return result; if ((result = m_extension.Compare(other.m_extension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4503_DivertingLegInfo2Arg::GetDataLength() const { PINDEX length = 0; length += m_diversionCounter.GetObjectLength(); length += m_diversionReason.GetObjectLength(); if (HasOptionalField(e_originalDiversionReason)) length += m_originalDiversionReason.GetObjectLength(); if (HasOptionalField(e_divertingNr)) length += m_divertingNr.GetObjectLength(); if (HasOptionalField(e_originalCalledNr)) length += m_originalCalledNr.GetObjectLength(); if (HasOptionalField(e_redirectingInfo)) length += m_redirectingInfo.GetObjectLength(); if (HasOptionalField(e_originalCalledInfo)) length += m_originalCalledInfo.GetObjectLength(); if (HasOptionalField(e_extension)) length += m_extension.GetObjectLength(); return length; } PBoolean H4503_DivertingLegInfo2Arg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_diversionCounter.Decode(strm)) return FALSE; if (!m_diversionReason.Decode(strm)) return FALSE; if (HasOptionalField(e_originalDiversionReason) && !m_originalDiversionReason.Decode(strm)) return FALSE; if (HasOptionalField(e_divertingNr) && !m_divertingNr.Decode(strm)) return FALSE; if (HasOptionalField(e_originalCalledNr) && !m_originalCalledNr.Decode(strm)) return FALSE; if (HasOptionalField(e_redirectingInfo) && !m_redirectingInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_originalCalledInfo) && !m_originalCalledInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_extension) && !m_extension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4503_DivertingLegInfo2Arg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_diversionCounter.Encode(strm); m_diversionReason.Encode(strm); if (HasOptionalField(e_originalDiversionReason)) m_originalDiversionReason.Encode(strm); if (HasOptionalField(e_divertingNr)) m_divertingNr.Encode(strm); if (HasOptionalField(e_originalCalledNr)) m_originalCalledNr.Encode(strm); if (HasOptionalField(e_redirectingInfo)) m_redirectingInfo.Encode(strm); if (HasOptionalField(e_originalCalledInfo)) m_originalCalledInfo.Encode(strm); if (HasOptionalField(e_extension)) m_extension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4503_DivertingLegInfo2Arg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4503_DivertingLegInfo2Arg::Class()), PInvalidCast); #endif return new H4503_DivertingLegInfo2Arg(*this); } #endif // if ! H323_DISABLE_H4503 // End of h4503.cxx h323plus/src/h450/h4509.cxx0000644000175000017500000003766411015524436013674 0ustar markmark// // h4509.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h4509.h" #endif #include #include "h450/h4509.h" #define new PNEW #if ! H323_DISABLE_H4509 #ifndef PASN_NOPRINTON const static PASN_Names Names_H4509_H323CallCompletionOperations[]={ {"ccbsRequest",40} ,{"ccnrRequest",27} ,{"ccCancel",28} ,{"ccExecPossible",29} ,{"ccRingout",31} ,{"ccSuspend",32} ,{"ccResume",33} }; #endif // // H323CallCompletionOperations // H4509_H323CallCompletionOperations::H4509_H323CallCompletionOperations(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 40, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4509_H323CallCompletionOperations,7 #endif ) { } H4509_H323CallCompletionOperations & H4509_H323CallCompletionOperations::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4509_H323CallCompletionOperations::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4509_H323CallCompletionOperations::Class()), PInvalidCast); #endif return new H4509_H323CallCompletionOperations(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4509_CcArg[]={ {"shortArg",0} ,{"longArg",1} }; #endif // // CcArg // H4509_CcArg::H4509_CcArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4509_CcArg,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4509_CcArg::operator H4509_CcShortArg &() const #else H4509_CcArg::operator H4509_CcShortArg &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4509_CcShortArg), PInvalidCast); #endif return *(H4509_CcShortArg *)choice; } H4509_CcArg::operator const H4509_CcShortArg &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4509_CcShortArg), PInvalidCast); #endif return *(H4509_CcShortArg *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4509_CcArg::operator H4509_CcLongArg &() const #else H4509_CcArg::operator H4509_CcLongArg &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4509_CcLongArg), PInvalidCast); #endif return *(H4509_CcLongArg *)choice; } H4509_CcArg::operator const H4509_CcLongArg &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4509_CcLongArg), PInvalidCast); #endif return *(H4509_CcLongArg *)choice; } PBoolean H4509_CcArg::CreateObject() { switch (tag) { case e_shortArg : choice = new H4509_CcShortArg(); return TRUE; case e_longArg : choice = new H4509_CcLongArg(); return TRUE; } choice = NULL; return FALSE; } PObject * H4509_CcArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4509_CcArg::Class()), PInvalidCast); #endif return new H4509_CcArg(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4509_CallCompletionErrors[]={ {"shortTermRejection",1010} ,{"longTermRejection",1011} ,{"remoteUserBusyAgain",1012} ,{"failureToMatch",1013} }; #endif // // CallCompletionErrors // H4509_CallCompletionErrors::H4509_CallCompletionErrors(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 1013, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4509_CallCompletionErrors,4 #endif ) { } H4509_CallCompletionErrors & H4509_CallCompletionErrors::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4509_CallCompletionErrors::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4509_CallCompletionErrors::Class()), PInvalidCast); #endif return new H4509_CallCompletionErrors(*this); } // // ArrayOf_MixedExtension // H4509_ArrayOf_MixedExtension::H4509_ArrayOf_MixedExtension(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H4509_ArrayOf_MixedExtension::CreateObject() const { return new H4504_MixedExtension; } H4504_MixedExtension & H4509_ArrayOf_MixedExtension::operator[](PINDEX i) const { return (H4504_MixedExtension &)array[i]; } PObject * H4509_ArrayOf_MixedExtension::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4509_ArrayOf_MixedExtension::Class()), PInvalidCast); #endif return new H4509_ArrayOf_MixedExtension(*this); } // // CcRequestArg // H4509_CcRequestArg::H4509_CcRequestArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { m_extension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4509_CcRequestArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "numberA = " << setprecision(indent) << m_numberA << '\n'; strm << setw(indent+10) << "numberB = " << setprecision(indent) << m_numberB << '\n'; if (HasOptionalField(e_ccIdentifier)) strm << setw(indent+15) << "ccIdentifier = " << setprecision(indent) << m_ccIdentifier << '\n'; strm << setw(indent+10) << "service = " << setprecision(indent) << m_service << '\n'; strm << setw(indent+21) << "can_retain_service = " << setprecision(indent) << m_can_retain_service << '\n'; if (HasOptionalField(e_retain_sig_connection)) strm << setw(indent+24) << "retain_sig_connection = " << setprecision(indent) << m_retain_sig_connection << '\n'; if (HasOptionalField(e_extension)) strm << setw(indent+12) << "extension = " << setprecision(indent) << m_extension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4509_CcRequestArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4509_CcRequestArg), PInvalidCast); #endif const H4509_CcRequestArg & other = (const H4509_CcRequestArg &)obj; Comparison result; if ((result = m_numberA.Compare(other.m_numberA)) != EqualTo) return result; if ((result = m_numberB.Compare(other.m_numberB)) != EqualTo) return result; if ((result = m_ccIdentifier.Compare(other.m_ccIdentifier)) != EqualTo) return result; if ((result = m_service.Compare(other.m_service)) != EqualTo) return result; if ((result = m_can_retain_service.Compare(other.m_can_retain_service)) != EqualTo) return result; if ((result = m_retain_sig_connection.Compare(other.m_retain_sig_connection)) != EqualTo) return result; if ((result = m_extension.Compare(other.m_extension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4509_CcRequestArg::GetDataLength() const { PINDEX length = 0; length += m_numberA.GetObjectLength(); length += m_numberB.GetObjectLength(); if (HasOptionalField(e_ccIdentifier)) length += m_ccIdentifier.GetObjectLength(); length += m_service.GetObjectLength(); length += m_can_retain_service.GetObjectLength(); if (HasOptionalField(e_retain_sig_connection)) length += m_retain_sig_connection.GetObjectLength(); if (HasOptionalField(e_extension)) length += m_extension.GetObjectLength(); return length; } PBoolean H4509_CcRequestArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_numberA.Decode(strm)) return FALSE; if (!m_numberB.Decode(strm)) return FALSE; if (HasOptionalField(e_ccIdentifier) && !m_ccIdentifier.Decode(strm)) return FALSE; if (!m_service.Decode(strm)) return FALSE; if (!m_can_retain_service.Decode(strm)) return FALSE; if (HasOptionalField(e_retain_sig_connection) && !m_retain_sig_connection.Decode(strm)) return FALSE; if (HasOptionalField(e_extension) && !m_extension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4509_CcRequestArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_numberA.Encode(strm); m_numberB.Encode(strm); if (HasOptionalField(e_ccIdentifier)) m_ccIdentifier.Encode(strm); m_service.Encode(strm); m_can_retain_service.Encode(strm); if (HasOptionalField(e_retain_sig_connection)) m_retain_sig_connection.Encode(strm); if (HasOptionalField(e_extension)) m_extension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4509_CcRequestArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4509_CcRequestArg::Class()), PInvalidCast); #endif return new H4509_CcRequestArg(*this); } // // CcRequestRes // H4509_CcRequestRes::H4509_CcRequestRes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_extension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4509_CcRequestRes::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "retain_service = " << setprecision(indent) << m_retain_service << '\n'; if (HasOptionalField(e_extension)) strm << setw(indent+12) << "extension = " << setprecision(indent) << m_extension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4509_CcRequestRes::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4509_CcRequestRes), PInvalidCast); #endif const H4509_CcRequestRes & other = (const H4509_CcRequestRes &)obj; Comparison result; if ((result = m_retain_service.Compare(other.m_retain_service)) != EqualTo) return result; if ((result = m_extension.Compare(other.m_extension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4509_CcRequestRes::GetDataLength() const { PINDEX length = 0; length += m_retain_service.GetObjectLength(); if (HasOptionalField(e_extension)) length += m_extension.GetObjectLength(); return length; } PBoolean H4509_CcRequestRes::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_retain_service.Decode(strm)) return FALSE; if (HasOptionalField(e_extension) && !m_extension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4509_CcRequestRes::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_retain_service.Encode(strm); if (HasOptionalField(e_extension)) m_extension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4509_CcRequestRes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4509_CcRequestRes::Class()), PInvalidCast); #endif return new H4509_CcRequestRes(*this); } // // CcShortArg // H4509_CcShortArg::H4509_CcShortArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_extension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4509_CcShortArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_ccIdentifier)) strm << setw(indent+15) << "ccIdentifier = " << setprecision(indent) << m_ccIdentifier << '\n'; if (HasOptionalField(e_extension)) strm << setw(indent+12) << "extension = " << setprecision(indent) << m_extension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4509_CcShortArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4509_CcShortArg), PInvalidCast); #endif const H4509_CcShortArg & other = (const H4509_CcShortArg &)obj; Comparison result; if ((result = m_ccIdentifier.Compare(other.m_ccIdentifier)) != EqualTo) return result; if ((result = m_extension.Compare(other.m_extension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4509_CcShortArg::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_ccIdentifier)) length += m_ccIdentifier.GetObjectLength(); if (HasOptionalField(e_extension)) length += m_extension.GetObjectLength(); return length; } PBoolean H4509_CcShortArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_ccIdentifier) && !m_ccIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_extension) && !m_extension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4509_CcShortArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_ccIdentifier)) m_ccIdentifier.Encode(strm); if (HasOptionalField(e_extension)) m_extension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4509_CcShortArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4509_CcShortArg::Class()), PInvalidCast); #endif return new H4509_CcShortArg(*this); } // // CcLongArg // H4509_CcLongArg::H4509_CcLongArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 5, TRUE, 0) { m_extension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4509_CcLongArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_numberA)) strm << setw(indent+10) << "numberA = " << setprecision(indent) << m_numberA << '\n'; if (HasOptionalField(e_numberB)) strm << setw(indent+10) << "numberB = " << setprecision(indent) << m_numberB << '\n'; if (HasOptionalField(e_ccIdentifier)) strm << setw(indent+15) << "ccIdentifier = " << setprecision(indent) << m_ccIdentifier << '\n'; if (HasOptionalField(e_service)) strm << setw(indent+10) << "service = " << setprecision(indent) << m_service << '\n'; if (HasOptionalField(e_extension)) strm << setw(indent+12) << "extension = " << setprecision(indent) << m_extension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4509_CcLongArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4509_CcLongArg), PInvalidCast); #endif const H4509_CcLongArg & other = (const H4509_CcLongArg &)obj; Comparison result; if ((result = m_numberA.Compare(other.m_numberA)) != EqualTo) return result; if ((result = m_numberB.Compare(other.m_numberB)) != EqualTo) return result; if ((result = m_ccIdentifier.Compare(other.m_ccIdentifier)) != EqualTo) return result; if ((result = m_service.Compare(other.m_service)) != EqualTo) return result; if ((result = m_extension.Compare(other.m_extension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4509_CcLongArg::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_numberA)) length += m_numberA.GetObjectLength(); if (HasOptionalField(e_numberB)) length += m_numberB.GetObjectLength(); if (HasOptionalField(e_ccIdentifier)) length += m_ccIdentifier.GetObjectLength(); if (HasOptionalField(e_service)) length += m_service.GetObjectLength(); if (HasOptionalField(e_extension)) length += m_extension.GetObjectLength(); return length; } PBoolean H4509_CcLongArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_numberA) && !m_numberA.Decode(strm)) return FALSE; if (HasOptionalField(e_numberB) && !m_numberB.Decode(strm)) return FALSE; if (HasOptionalField(e_ccIdentifier) && !m_ccIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_service) && !m_service.Decode(strm)) return FALSE; if (HasOptionalField(e_extension) && !m_extension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4509_CcLongArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_numberA)) m_numberA.Encode(strm); if (HasOptionalField(e_numberB)) m_numberB.Encode(strm); if (HasOptionalField(e_ccIdentifier)) m_ccIdentifier.Encode(strm); if (HasOptionalField(e_service)) m_service.Encode(strm); if (HasOptionalField(e_extension)) m_extension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4509_CcLongArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4509_CcLongArg::Class()), PInvalidCast); #endif return new H4509_CcLongArg(*this); } #endif // if ! H323_DISABLE_H4509 // End of h4509.cxx h323plus/src/h450/h45011.cxx0000644000175000017500000007662711015524417013746 0ustar markmark// // h45011.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h45011.h" #endif #include #include "h450/h45011.h" #define new PNEW #if ! H323_DISABLE_H45011 #ifndef PASN_NOPRINTON const static PASN_Names Names_H45011_H323CallIntrusionOperations[]={ {"callIntrusionRequest",43} ,{"callIntrusionGetCIPL",44} ,{"callIntrusionIsolate",45} ,{"callIntrusionForcedRelease",46} ,{"callIntrusionWOBRequest",47} ,{"callIntrusionSilentMonitor",116} ,{"callIntrusionNotification",117} }; #endif // // H323CallIntrusionOperations // H45011_H323CallIntrusionOperations::H45011_H323CallIntrusionOperations(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 117, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H45011_H323CallIntrusionOperations,7 #endif ) { } H45011_H323CallIntrusionOperations & H45011_H323CallIntrusionOperations::operator=(unsigned v) { SetValue(v); return *this; } PObject * H45011_H323CallIntrusionOperations::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45011_H323CallIntrusionOperations::Class()), PInvalidCast); #endif return new H45011_H323CallIntrusionOperations(*this); } // // CICapabilityLevel // H45011_CICapabilityLevel::H45011_CICapabilityLevel(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { } H45011_CICapabilityLevel & H45011_CICapabilityLevel::operator=(int v) { SetValue(v); return *this; } H45011_CICapabilityLevel & H45011_CICapabilityLevel::operator=(unsigned v) { SetValue(v); return *this; } PObject * H45011_CICapabilityLevel::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45011_CICapabilityLevel::Class()), PInvalidCast); #endif return new H45011_CICapabilityLevel(*this); } // // CIProtectionLevel // H45011_CIProtectionLevel::H45011_CIProtectionLevel(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { } H45011_CIProtectionLevel & H45011_CIProtectionLevel::operator=(int v) { SetValue(v); return *this; } H45011_CIProtectionLevel & H45011_CIProtectionLevel::operator=(unsigned v) { SetValue(v); return *this; } PObject * H45011_CIProtectionLevel::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45011_CIProtectionLevel::Class()), PInvalidCast); #endif return new H45011_CIProtectionLevel(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H45011_CIStatusInformation[]={ {"callIntrusionImpending",0} ,{"callIntruded",1} ,{"callIsolated",2} ,{"callForceReleased",3} ,{"callIntrusionComplete",4} ,{"callIntrusionEnd",5} }; #endif // // CIStatusInformation // H45011_CIStatusInformation::H45011_CIStatusInformation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 6, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H45011_CIStatusInformation,6 #endif ) { } PBoolean H45011_CIStatusInformation::CreateObject() { choice = (tag <= e_callIntrusionEnd) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H45011_CIStatusInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45011_CIStatusInformation::Class()), PInvalidCast); #endif return new H45011_CIStatusInformation(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H45011_CallIntrusionErrors[]={ {"notBusy",1009} ,{"temporarilyUnavailable",1000} ,{"notAuthorized",1007} }; #endif // // CallIntrusionErrors // H45011_CallIntrusionErrors::H45011_CallIntrusionErrors(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 1009, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H45011_CallIntrusionErrors,3 #endif ) { } H45011_CallIntrusionErrors & H45011_CallIntrusionErrors::operator=(unsigned v) { SetValue(v); return *this; } PObject * H45011_CallIntrusionErrors::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45011_CallIntrusionErrors::Class()), PInvalidCast); #endif return new H45011_CallIntrusionErrors(*this); } // // ArrayOf_MixedExtension // H45011_ArrayOf_MixedExtension::H45011_ArrayOf_MixedExtension(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H45011_ArrayOf_MixedExtension::CreateObject() const { return new H4504_MixedExtension; } H4504_MixedExtension & H45011_ArrayOf_MixedExtension::operator[](PINDEX i) const { return (H4504_MixedExtension &)array[i]; } PObject * H45011_ArrayOf_MixedExtension::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45011_ArrayOf_MixedExtension::Class()), PInvalidCast); #endif return new H45011_ArrayOf_MixedExtension(*this); } // // CIRequestArg // H45011_CIRequestArg::H45011_CIRequestArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_argumentExtension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H45011_CIRequestArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+20) << "ciCapabilityLevel = " << setprecision(indent) << m_ciCapabilityLevel << '\n'; if (HasOptionalField(e_argumentExtension)) strm << setw(indent+20) << "argumentExtension = " << setprecision(indent) << m_argumentExtension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H45011_CIRequestArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H45011_CIRequestArg), PInvalidCast); #endif const H45011_CIRequestArg & other = (const H45011_CIRequestArg &)obj; Comparison result; if ((result = m_ciCapabilityLevel.Compare(other.m_ciCapabilityLevel)) != EqualTo) return result; if ((result = m_argumentExtension.Compare(other.m_argumentExtension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H45011_CIRequestArg::GetDataLength() const { PINDEX length = 0; length += m_ciCapabilityLevel.GetObjectLength(); if (HasOptionalField(e_argumentExtension)) length += m_argumentExtension.GetObjectLength(); return length; } PBoolean H45011_CIRequestArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_ciCapabilityLevel.Decode(strm)) return FALSE; if (HasOptionalField(e_argumentExtension) && !m_argumentExtension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H45011_CIRequestArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_ciCapabilityLevel.Encode(strm); if (HasOptionalField(e_argumentExtension)) m_argumentExtension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H45011_CIRequestArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45011_CIRequestArg::Class()), PInvalidCast); #endif return new H45011_CIRequestArg(*this); } // // CIRequestRes // H45011_CIRequestRes::H45011_CIRequestRes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_resultExtension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H45011_CIRequestRes::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+22) << "ciStatusInformation = " << setprecision(indent) << m_ciStatusInformation << '\n'; if (HasOptionalField(e_resultExtension)) strm << setw(indent+18) << "resultExtension = " << setprecision(indent) << m_resultExtension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H45011_CIRequestRes::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H45011_CIRequestRes), PInvalidCast); #endif const H45011_CIRequestRes & other = (const H45011_CIRequestRes &)obj; Comparison result; if ((result = m_ciStatusInformation.Compare(other.m_ciStatusInformation)) != EqualTo) return result; if ((result = m_resultExtension.Compare(other.m_resultExtension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H45011_CIRequestRes::GetDataLength() const { PINDEX length = 0; length += m_ciStatusInformation.GetObjectLength(); if (HasOptionalField(e_resultExtension)) length += m_resultExtension.GetObjectLength(); return length; } PBoolean H45011_CIRequestRes::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_ciStatusInformation.Decode(strm)) return FALSE; if (HasOptionalField(e_resultExtension) && !m_resultExtension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H45011_CIRequestRes::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_ciStatusInformation.Encode(strm); if (HasOptionalField(e_resultExtension)) m_resultExtension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H45011_CIRequestRes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45011_CIRequestRes::Class()), PInvalidCast); #endif return new H45011_CIRequestRes(*this); } // // CIGetCIPLOptArg // H45011_CIGetCIPLOptArg::H45011_CIGetCIPLOptArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_argumentExtension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H45011_CIGetCIPLOptArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_argumentExtension)) strm << setw(indent+20) << "argumentExtension = " << setprecision(indent) << m_argumentExtension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H45011_CIGetCIPLOptArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H45011_CIGetCIPLOptArg), PInvalidCast); #endif const H45011_CIGetCIPLOptArg & other = (const H45011_CIGetCIPLOptArg &)obj; Comparison result; if ((result = m_argumentExtension.Compare(other.m_argumentExtension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H45011_CIGetCIPLOptArg::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_argumentExtension)) length += m_argumentExtension.GetObjectLength(); return length; } PBoolean H45011_CIGetCIPLOptArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_argumentExtension) && !m_argumentExtension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H45011_CIGetCIPLOptArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_argumentExtension)) m_argumentExtension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H45011_CIGetCIPLOptArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45011_CIGetCIPLOptArg::Class()), PInvalidCast); #endif return new H45011_CIGetCIPLOptArg(*this); } // // CIGetCIPLRes // H45011_CIGetCIPLRes::H45011_CIGetCIPLRes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_resultExtension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H45011_CIGetCIPLRes::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+20) << "ciProtectionLevel = " << setprecision(indent) << m_ciProtectionLevel << '\n'; if (HasOptionalField(e_silentMonitoringPermitted)) strm << setw(indent+28) << "silentMonitoringPermitted = " << setprecision(indent) << m_silentMonitoringPermitted << '\n'; if (HasOptionalField(e_resultExtension)) strm << setw(indent+18) << "resultExtension = " << setprecision(indent) << m_resultExtension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H45011_CIGetCIPLRes::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H45011_CIGetCIPLRes), PInvalidCast); #endif const H45011_CIGetCIPLRes & other = (const H45011_CIGetCIPLRes &)obj; Comparison result; if ((result = m_ciProtectionLevel.Compare(other.m_ciProtectionLevel)) != EqualTo) return result; if ((result = m_silentMonitoringPermitted.Compare(other.m_silentMonitoringPermitted)) != EqualTo) return result; if ((result = m_resultExtension.Compare(other.m_resultExtension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H45011_CIGetCIPLRes::GetDataLength() const { PINDEX length = 0; length += m_ciProtectionLevel.GetObjectLength(); if (HasOptionalField(e_silentMonitoringPermitted)) length += m_silentMonitoringPermitted.GetObjectLength(); if (HasOptionalField(e_resultExtension)) length += m_resultExtension.GetObjectLength(); return length; } PBoolean H45011_CIGetCIPLRes::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_ciProtectionLevel.Decode(strm)) return FALSE; if (HasOptionalField(e_silentMonitoringPermitted) && !m_silentMonitoringPermitted.Decode(strm)) return FALSE; if (HasOptionalField(e_resultExtension) && !m_resultExtension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H45011_CIGetCIPLRes::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_ciProtectionLevel.Encode(strm); if (HasOptionalField(e_silentMonitoringPermitted)) m_silentMonitoringPermitted.Encode(strm); if (HasOptionalField(e_resultExtension)) m_resultExtension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H45011_CIGetCIPLRes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45011_CIGetCIPLRes::Class()), PInvalidCast); #endif return new H45011_CIGetCIPLRes(*this); } // // CIIsOptArg // H45011_CIIsOptArg::H45011_CIIsOptArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_argumentExtension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H45011_CIIsOptArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_argumentExtension)) strm << setw(indent+20) << "argumentExtension = " << setprecision(indent) << m_argumentExtension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H45011_CIIsOptArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H45011_CIIsOptArg), PInvalidCast); #endif const H45011_CIIsOptArg & other = (const H45011_CIIsOptArg &)obj; Comparison result; if ((result = m_argumentExtension.Compare(other.m_argumentExtension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H45011_CIIsOptArg::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_argumentExtension)) length += m_argumentExtension.GetObjectLength(); return length; } PBoolean H45011_CIIsOptArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_argumentExtension) && !m_argumentExtension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H45011_CIIsOptArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_argumentExtension)) m_argumentExtension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H45011_CIIsOptArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45011_CIIsOptArg::Class()), PInvalidCast); #endif return new H45011_CIIsOptArg(*this); } // // CIIsOptRes // H45011_CIIsOptRes::H45011_CIIsOptRes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_resultExtension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H45011_CIIsOptRes::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_resultExtension)) strm << setw(indent+18) << "resultExtension = " << setprecision(indent) << m_resultExtension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H45011_CIIsOptRes::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H45011_CIIsOptRes), PInvalidCast); #endif const H45011_CIIsOptRes & other = (const H45011_CIIsOptRes &)obj; Comparison result; if ((result = m_resultExtension.Compare(other.m_resultExtension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H45011_CIIsOptRes::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_resultExtension)) length += m_resultExtension.GetObjectLength(); return length; } PBoolean H45011_CIIsOptRes::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_resultExtension) && !m_resultExtension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H45011_CIIsOptRes::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_resultExtension)) m_resultExtension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H45011_CIIsOptRes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45011_CIIsOptRes::Class()), PInvalidCast); #endif return new H45011_CIIsOptRes(*this); } // // CIFrcRelArg // H45011_CIFrcRelArg::H45011_CIFrcRelArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_argumentExtension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H45011_CIFrcRelArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+20) << "ciCapabilityLevel = " << setprecision(indent) << m_ciCapabilityLevel << '\n'; if (HasOptionalField(e_argumentExtension)) strm << setw(indent+20) << "argumentExtension = " << setprecision(indent) << m_argumentExtension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H45011_CIFrcRelArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H45011_CIFrcRelArg), PInvalidCast); #endif const H45011_CIFrcRelArg & other = (const H45011_CIFrcRelArg &)obj; Comparison result; if ((result = m_ciCapabilityLevel.Compare(other.m_ciCapabilityLevel)) != EqualTo) return result; if ((result = m_argumentExtension.Compare(other.m_argumentExtension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H45011_CIFrcRelArg::GetDataLength() const { PINDEX length = 0; length += m_ciCapabilityLevel.GetObjectLength(); if (HasOptionalField(e_argumentExtension)) length += m_argumentExtension.GetObjectLength(); return length; } PBoolean H45011_CIFrcRelArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_ciCapabilityLevel.Decode(strm)) return FALSE; if (HasOptionalField(e_argumentExtension) && !m_argumentExtension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H45011_CIFrcRelArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_ciCapabilityLevel.Encode(strm); if (HasOptionalField(e_argumentExtension)) m_argumentExtension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H45011_CIFrcRelArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45011_CIFrcRelArg::Class()), PInvalidCast); #endif return new H45011_CIFrcRelArg(*this); } // // CIFrcRelOptRes // H45011_CIFrcRelOptRes::H45011_CIFrcRelOptRes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_resultExtension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H45011_CIFrcRelOptRes::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_resultExtension)) strm << setw(indent+18) << "resultExtension = " << setprecision(indent) << m_resultExtension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H45011_CIFrcRelOptRes::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H45011_CIFrcRelOptRes), PInvalidCast); #endif const H45011_CIFrcRelOptRes & other = (const H45011_CIFrcRelOptRes &)obj; Comparison result; if ((result = m_resultExtension.Compare(other.m_resultExtension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H45011_CIFrcRelOptRes::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_resultExtension)) length += m_resultExtension.GetObjectLength(); return length; } PBoolean H45011_CIFrcRelOptRes::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_resultExtension) && !m_resultExtension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H45011_CIFrcRelOptRes::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_resultExtension)) m_resultExtension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H45011_CIFrcRelOptRes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45011_CIFrcRelOptRes::Class()), PInvalidCast); #endif return new H45011_CIFrcRelOptRes(*this); } // // CIWobOptArg // H45011_CIWobOptArg::H45011_CIWobOptArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_argumentExtension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H45011_CIWobOptArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_argumentExtension)) strm << setw(indent+20) << "argumentExtension = " << setprecision(indent) << m_argumentExtension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H45011_CIWobOptArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H45011_CIWobOptArg), PInvalidCast); #endif const H45011_CIWobOptArg & other = (const H45011_CIWobOptArg &)obj; Comparison result; if ((result = m_argumentExtension.Compare(other.m_argumentExtension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H45011_CIWobOptArg::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_argumentExtension)) length += m_argumentExtension.GetObjectLength(); return length; } PBoolean H45011_CIWobOptArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_argumentExtension) && !m_argumentExtension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H45011_CIWobOptArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_argumentExtension)) m_argumentExtension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H45011_CIWobOptArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45011_CIWobOptArg::Class()), PInvalidCast); #endif return new H45011_CIWobOptArg(*this); } // // CIWobOptRes // H45011_CIWobOptRes::H45011_CIWobOptRes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_resultExtension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H45011_CIWobOptRes::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_resultExtension)) strm << setw(indent+18) << "resultExtension = " << setprecision(indent) << m_resultExtension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H45011_CIWobOptRes::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H45011_CIWobOptRes), PInvalidCast); #endif const H45011_CIWobOptRes & other = (const H45011_CIWobOptRes &)obj; Comparison result; if ((result = m_resultExtension.Compare(other.m_resultExtension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H45011_CIWobOptRes::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_resultExtension)) length += m_resultExtension.GetObjectLength(); return length; } PBoolean H45011_CIWobOptRes::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_resultExtension) && !m_resultExtension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H45011_CIWobOptRes::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_resultExtension)) m_resultExtension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H45011_CIWobOptRes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45011_CIWobOptRes::Class()), PInvalidCast); #endif return new H45011_CIWobOptRes(*this); } // // CISilentArg // H45011_CISilentArg::H45011_CISilentArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_argumentExtension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H45011_CISilentArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+20) << "ciCapabilityLevel = " << setprecision(indent) << m_ciCapabilityLevel << '\n'; if (HasOptionalField(e_specificCall)) strm << setw(indent+15) << "specificCall = " << setprecision(indent) << m_specificCall << '\n'; if (HasOptionalField(e_argumentExtension)) strm << setw(indent+20) << "argumentExtension = " << setprecision(indent) << m_argumentExtension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H45011_CISilentArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H45011_CISilentArg), PInvalidCast); #endif const H45011_CISilentArg & other = (const H45011_CISilentArg &)obj; Comparison result; if ((result = m_ciCapabilityLevel.Compare(other.m_ciCapabilityLevel)) != EqualTo) return result; if ((result = m_specificCall.Compare(other.m_specificCall)) != EqualTo) return result; if ((result = m_argumentExtension.Compare(other.m_argumentExtension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H45011_CISilentArg::GetDataLength() const { PINDEX length = 0; length += m_ciCapabilityLevel.GetObjectLength(); if (HasOptionalField(e_specificCall)) length += m_specificCall.GetObjectLength(); if (HasOptionalField(e_argumentExtension)) length += m_argumentExtension.GetObjectLength(); return length; } PBoolean H45011_CISilentArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_ciCapabilityLevel.Decode(strm)) return FALSE; if (HasOptionalField(e_specificCall) && !m_specificCall.Decode(strm)) return FALSE; if (HasOptionalField(e_argumentExtension) && !m_argumentExtension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H45011_CISilentArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_ciCapabilityLevel.Encode(strm); if (HasOptionalField(e_specificCall)) m_specificCall.Encode(strm); if (HasOptionalField(e_argumentExtension)) m_argumentExtension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H45011_CISilentArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45011_CISilentArg::Class()), PInvalidCast); #endif return new H45011_CISilentArg(*this); } // // CISilentOptRes // H45011_CISilentOptRes::H45011_CISilentOptRes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_resultExtension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H45011_CISilentOptRes::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_resultExtension)) strm << setw(indent+18) << "resultExtension = " << setprecision(indent) << m_resultExtension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H45011_CISilentOptRes::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H45011_CISilentOptRes), PInvalidCast); #endif const H45011_CISilentOptRes & other = (const H45011_CISilentOptRes &)obj; Comparison result; if ((result = m_resultExtension.Compare(other.m_resultExtension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H45011_CISilentOptRes::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_resultExtension)) length += m_resultExtension.GetObjectLength(); return length; } PBoolean H45011_CISilentOptRes::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_resultExtension) && !m_resultExtension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H45011_CISilentOptRes::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_resultExtension)) m_resultExtension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H45011_CISilentOptRes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45011_CISilentOptRes::Class()), PInvalidCast); #endif return new H45011_CISilentOptRes(*this); } // // CINotificationArg // H45011_CINotificationArg::H45011_CINotificationArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_argumentExtension.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H45011_CINotificationArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+22) << "ciStatusInformation = " << setprecision(indent) << m_ciStatusInformation << '\n'; if (HasOptionalField(e_argumentExtension)) strm << setw(indent+20) << "argumentExtension = " << setprecision(indent) << m_argumentExtension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H45011_CINotificationArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H45011_CINotificationArg), PInvalidCast); #endif const H45011_CINotificationArg & other = (const H45011_CINotificationArg &)obj; Comparison result; if ((result = m_ciStatusInformation.Compare(other.m_ciStatusInformation)) != EqualTo) return result; if ((result = m_argumentExtension.Compare(other.m_argumentExtension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H45011_CINotificationArg::GetDataLength() const { PINDEX length = 0; length += m_ciStatusInformation.GetObjectLength(); if (HasOptionalField(e_argumentExtension)) length += m_argumentExtension.GetObjectLength(); return length; } PBoolean H45011_CINotificationArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_ciStatusInformation.Decode(strm)) return FALSE; if (HasOptionalField(e_argumentExtension) && !m_argumentExtension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H45011_CINotificationArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_ciStatusInformation.Encode(strm); if (HasOptionalField(e_argumentExtension)) m_argumentExtension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H45011_CINotificationArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H45011_CINotificationArg::Class()), PInvalidCast); #endif return new H45011_CINotificationArg(*this); } #endif // if ! H323_DISABLE_H45011 // End of h45011.cxx h323plus/src/h450/h4507.cxx0000644000175000017500000005613511015524433013661 0ustar markmark// // h4507.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h4507.h" #endif #include #include "h450/h4507.h" #define new PNEW #if ! H323_DISABLE_H4507 #ifndef PASN_NOPRINTON const static PASN_Names Names_H4507_H323_MWI_Operations[]={ {"mwiActivate",80} ,{"mwiDeactivate",81} ,{"mwiInterrogate",82} }; #endif // // H323-MWI-Operations // H4507_H323_MWI_Operations::H4507_H323_MWI_Operations(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 82, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4507_H323_MWI_Operations,3 #endif ) { } H4507_H323_MWI_Operations & H4507_H323_MWI_Operations::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4507_H323_MWI_Operations::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4507_H323_MWI_Operations::Class()), PInvalidCast); #endif return new H4507_H323_MWI_Operations(*this); } // // DummyRes // H4507_DummyRes::H4507_DummyRes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 255); } PASN_Object * H4507_DummyRes::CreateObject() const { return new H4504_MixedExtension; } H4504_MixedExtension & H4507_DummyRes::operator[](PINDEX i) const { return (H4504_MixedExtension &)array[i]; } PObject * H4507_DummyRes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4507_DummyRes::Class()), PInvalidCast); #endif return new H4507_DummyRes(*this); } // // MWIInterrogateRes // H4507_MWIInterrogateRes::H4507_MWIInterrogateRes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 64); } PASN_Object * H4507_MWIInterrogateRes::CreateObject() const { return new H4507_MWIInterrogateResElt; } H4507_MWIInterrogateResElt & H4507_MWIInterrogateRes::operator[](PINDEX i) const { return (H4507_MWIInterrogateResElt &)array[i]; } PObject * H4507_MWIInterrogateRes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4507_MWIInterrogateRes::Class()), PInvalidCast); #endif return new H4507_MWIInterrogateRes(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4507_MsgCentreId[]={ {"integer",0} ,{"partyNumber",1} ,{"numericString",2} }; #endif // // MsgCentreId // H4507_MsgCentreId::H4507_MsgCentreId(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4507_MsgCentreId,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H4507_MsgCentreId::operator H4501_EndpointAddress &() const #else H4507_MsgCentreId::operator H4501_EndpointAddress &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4501_EndpointAddress), PInvalidCast); #endif return *(H4501_EndpointAddress *)choice; } H4507_MsgCentreId::operator const H4501_EndpointAddress &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H4501_EndpointAddress), PInvalidCast); #endif return *(H4501_EndpointAddress *)choice; } PBoolean H4507_MsgCentreId::CreateObject() { switch (tag) { case e_integer : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 65535); return TRUE; case e_partyNumber : choice = new H4501_EndpointAddress(); return TRUE; case e_numericString : choice = new PASN_NumericString(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 10); return TRUE; } choice = NULL; return FALSE; } PObject * H4507_MsgCentreId::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4507_MsgCentreId::Class()), PInvalidCast); #endif return new H4507_MsgCentreId(*this); } // // NbOfMessages // H4507_NbOfMessages::H4507_NbOfMessages(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } H4507_NbOfMessages & H4507_NbOfMessages::operator=(int v) { SetValue(v); return *this; } H4507_NbOfMessages & H4507_NbOfMessages::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4507_NbOfMessages::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4507_NbOfMessages::Class()), PInvalidCast); #endif return new H4507_NbOfMessages(*this); } // // TimeStamp // H4507_TimeStamp::H4507_TimeStamp(unsigned tag, PASN_Object::TagClass tagClass) : PASN_GeneralisedTime(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 12, 19); } PObject * H4507_TimeStamp::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4507_TimeStamp::Class()), PInvalidCast); #endif return new H4507_TimeStamp(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4507_MessageWaitingIndicationErrors[]={ {"notActivated",31} ,{"undefined",2002} ,{"invalidMsgCentreId",1018} }; #endif // // MessageWaitingIndicationErrors // H4507_MessageWaitingIndicationErrors::H4507_MessageWaitingIndicationErrors(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 2002, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4507_MessageWaitingIndicationErrors,3 #endif ) { } H4507_MessageWaitingIndicationErrors & H4507_MessageWaitingIndicationErrors::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4507_MessageWaitingIndicationErrors::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4507_MessageWaitingIndicationErrors::Class()), PInvalidCast); #endif return new H4507_MessageWaitingIndicationErrors(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H4507_BasicService[]={ {"allServices",0} ,{"speech",1} ,{"unrestrictedDigitalInformation",2} ,{"audio3100Hz",3} ,{"telephony",32} ,{"teletex",33} ,{"telefaxGroup4Class1",34} ,{"videotexSyntaxBased",35} ,{"videotelephony",36} }; #endif // // BasicService // H4507_BasicService::H4507_BasicService(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 36, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H4507_BasicService,9 #endif ) { } H4507_BasicService & H4507_BasicService::operator=(unsigned v) { SetValue(v); return *this; } PObject * H4507_BasicService::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4507_BasicService::Class()), PInvalidCast); #endif return new H4507_BasicService(*this); } // // ArrayOf_MixedExtension // H4507_ArrayOf_MixedExtension::H4507_ArrayOf_MixedExtension(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H4507_ArrayOf_MixedExtension::CreateObject() const { return new H4504_MixedExtension; } H4504_MixedExtension & H4507_ArrayOf_MixedExtension::operator[](PINDEX i) const { return (H4504_MixedExtension &)array[i]; } PObject * H4507_ArrayOf_MixedExtension::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4507_ArrayOf_MixedExtension::Class()), PInvalidCast); #endif return new H4507_ArrayOf_MixedExtension(*this); } // // MWIActivateArg // H4507_MWIActivateArg::H4507_MWIActivateArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 6, TRUE, 0) { m_priority.SetConstraints(PASN_Object::FixedConstraint, 0, 9); m_extensionArg.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4507_MWIActivateArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "servedUserNr = " << setprecision(indent) << m_servedUserNr << '\n'; strm << setw(indent+15) << "basicService = " << setprecision(indent) << m_basicService << '\n'; if (HasOptionalField(e_msgCentreId)) strm << setw(indent+14) << "msgCentreId = " << setprecision(indent) << m_msgCentreId << '\n'; if (HasOptionalField(e_nbOfMessages)) strm << setw(indent+15) << "nbOfMessages = " << setprecision(indent) << m_nbOfMessages << '\n'; if (HasOptionalField(e_originatingNr)) strm << setw(indent+16) << "originatingNr = " << setprecision(indent) << m_originatingNr << '\n'; if (HasOptionalField(e_timestamp)) strm << setw(indent+12) << "timestamp = " << setprecision(indent) << m_timestamp << '\n'; if (HasOptionalField(e_priority)) strm << setw(indent+11) << "priority = " << setprecision(indent) << m_priority << '\n'; if (HasOptionalField(e_extensionArg)) strm << setw(indent+15) << "extensionArg = " << setprecision(indent) << m_extensionArg << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4507_MWIActivateArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4507_MWIActivateArg), PInvalidCast); #endif const H4507_MWIActivateArg & other = (const H4507_MWIActivateArg &)obj; Comparison result; if ((result = m_servedUserNr.Compare(other.m_servedUserNr)) != EqualTo) return result; if ((result = m_basicService.Compare(other.m_basicService)) != EqualTo) return result; if ((result = m_msgCentreId.Compare(other.m_msgCentreId)) != EqualTo) return result; if ((result = m_nbOfMessages.Compare(other.m_nbOfMessages)) != EqualTo) return result; if ((result = m_originatingNr.Compare(other.m_originatingNr)) != EqualTo) return result; if ((result = m_timestamp.Compare(other.m_timestamp)) != EqualTo) return result; if ((result = m_priority.Compare(other.m_priority)) != EqualTo) return result; if ((result = m_extensionArg.Compare(other.m_extensionArg)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4507_MWIActivateArg::GetDataLength() const { PINDEX length = 0; length += m_servedUserNr.GetObjectLength(); length += m_basicService.GetObjectLength(); if (HasOptionalField(e_msgCentreId)) length += m_msgCentreId.GetObjectLength(); if (HasOptionalField(e_nbOfMessages)) length += m_nbOfMessages.GetObjectLength(); if (HasOptionalField(e_originatingNr)) length += m_originatingNr.GetObjectLength(); if (HasOptionalField(e_timestamp)) length += m_timestamp.GetObjectLength(); if (HasOptionalField(e_priority)) length += m_priority.GetObjectLength(); if (HasOptionalField(e_extensionArg)) length += m_extensionArg.GetObjectLength(); return length; } PBoolean H4507_MWIActivateArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_servedUserNr.Decode(strm)) return FALSE; if (!m_basicService.Decode(strm)) return FALSE; if (HasOptionalField(e_msgCentreId) && !m_msgCentreId.Decode(strm)) return FALSE; if (HasOptionalField(e_nbOfMessages) && !m_nbOfMessages.Decode(strm)) return FALSE; if (HasOptionalField(e_originatingNr) && !m_originatingNr.Decode(strm)) return FALSE; if (HasOptionalField(e_timestamp) && !m_timestamp.Decode(strm)) return FALSE; if (HasOptionalField(e_priority) && !m_priority.Decode(strm)) return FALSE; if (HasOptionalField(e_extensionArg) && !m_extensionArg.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4507_MWIActivateArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_servedUserNr.Encode(strm); m_basicService.Encode(strm); if (HasOptionalField(e_msgCentreId)) m_msgCentreId.Encode(strm); if (HasOptionalField(e_nbOfMessages)) m_nbOfMessages.Encode(strm); if (HasOptionalField(e_originatingNr)) m_originatingNr.Encode(strm); if (HasOptionalField(e_timestamp)) m_timestamp.Encode(strm); if (HasOptionalField(e_priority)) m_priority.Encode(strm); if (HasOptionalField(e_extensionArg)) m_extensionArg.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4507_MWIActivateArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4507_MWIActivateArg::Class()), PInvalidCast); #endif return new H4507_MWIActivateArg(*this); } // // MWIDeactivateArg // H4507_MWIDeactivateArg::H4507_MWIDeactivateArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { m_extensionArg.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4507_MWIDeactivateArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "servedUserNr = " << setprecision(indent) << m_servedUserNr << '\n'; strm << setw(indent+15) << "basicService = " << setprecision(indent) << m_basicService << '\n'; if (HasOptionalField(e_msgCentreId)) strm << setw(indent+14) << "msgCentreId = " << setprecision(indent) << m_msgCentreId << '\n'; if (HasOptionalField(e_callbackReq)) strm << setw(indent+14) << "callbackReq = " << setprecision(indent) << m_callbackReq << '\n'; if (HasOptionalField(e_extensionArg)) strm << setw(indent+15) << "extensionArg = " << setprecision(indent) << m_extensionArg << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4507_MWIDeactivateArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4507_MWIDeactivateArg), PInvalidCast); #endif const H4507_MWIDeactivateArg & other = (const H4507_MWIDeactivateArg &)obj; Comparison result; if ((result = m_servedUserNr.Compare(other.m_servedUserNr)) != EqualTo) return result; if ((result = m_basicService.Compare(other.m_basicService)) != EqualTo) return result; if ((result = m_msgCentreId.Compare(other.m_msgCentreId)) != EqualTo) return result; if ((result = m_callbackReq.Compare(other.m_callbackReq)) != EqualTo) return result; if ((result = m_extensionArg.Compare(other.m_extensionArg)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4507_MWIDeactivateArg::GetDataLength() const { PINDEX length = 0; length += m_servedUserNr.GetObjectLength(); length += m_basicService.GetObjectLength(); if (HasOptionalField(e_msgCentreId)) length += m_msgCentreId.GetObjectLength(); if (HasOptionalField(e_callbackReq)) length += m_callbackReq.GetObjectLength(); if (HasOptionalField(e_extensionArg)) length += m_extensionArg.GetObjectLength(); return length; } PBoolean H4507_MWIDeactivateArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_servedUserNr.Decode(strm)) return FALSE; if (!m_basicService.Decode(strm)) return FALSE; if (HasOptionalField(e_msgCentreId) && !m_msgCentreId.Decode(strm)) return FALSE; if (HasOptionalField(e_callbackReq) && !m_callbackReq.Decode(strm)) return FALSE; if (HasOptionalField(e_extensionArg) && !m_extensionArg.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4507_MWIDeactivateArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_servedUserNr.Encode(strm); m_basicService.Encode(strm); if (HasOptionalField(e_msgCentreId)) m_msgCentreId.Encode(strm); if (HasOptionalField(e_callbackReq)) m_callbackReq.Encode(strm); if (HasOptionalField(e_extensionArg)) m_extensionArg.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4507_MWIDeactivateArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4507_MWIDeactivateArg::Class()), PInvalidCast); #endif return new H4507_MWIDeactivateArg(*this); } // // MWIInterrogateArg // H4507_MWIInterrogateArg::H4507_MWIInterrogateArg(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { m_extensionArg.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4507_MWIInterrogateArg::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "servedUserNr = " << setprecision(indent) << m_servedUserNr << '\n'; strm << setw(indent+15) << "basicService = " << setprecision(indent) << m_basicService << '\n'; if (HasOptionalField(e_msgCentreId)) strm << setw(indent+14) << "msgCentreId = " << setprecision(indent) << m_msgCentreId << '\n'; if (HasOptionalField(e_callbackReq)) strm << setw(indent+14) << "callbackReq = " << setprecision(indent) << m_callbackReq << '\n'; if (HasOptionalField(e_extensionArg)) strm << setw(indent+15) << "extensionArg = " << setprecision(indent) << m_extensionArg << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4507_MWIInterrogateArg::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4507_MWIInterrogateArg), PInvalidCast); #endif const H4507_MWIInterrogateArg & other = (const H4507_MWIInterrogateArg &)obj; Comparison result; if ((result = m_servedUserNr.Compare(other.m_servedUserNr)) != EqualTo) return result; if ((result = m_basicService.Compare(other.m_basicService)) != EqualTo) return result; if ((result = m_msgCentreId.Compare(other.m_msgCentreId)) != EqualTo) return result; if ((result = m_callbackReq.Compare(other.m_callbackReq)) != EqualTo) return result; if ((result = m_extensionArg.Compare(other.m_extensionArg)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4507_MWIInterrogateArg::GetDataLength() const { PINDEX length = 0; length += m_servedUserNr.GetObjectLength(); length += m_basicService.GetObjectLength(); if (HasOptionalField(e_msgCentreId)) length += m_msgCentreId.GetObjectLength(); if (HasOptionalField(e_callbackReq)) length += m_callbackReq.GetObjectLength(); if (HasOptionalField(e_extensionArg)) length += m_extensionArg.GetObjectLength(); return length; } PBoolean H4507_MWIInterrogateArg::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_servedUserNr.Decode(strm)) return FALSE; if (!m_basicService.Decode(strm)) return FALSE; if (HasOptionalField(e_msgCentreId) && !m_msgCentreId.Decode(strm)) return FALSE; if (HasOptionalField(e_callbackReq) && !m_callbackReq.Decode(strm)) return FALSE; if (HasOptionalField(e_extensionArg) && !m_extensionArg.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4507_MWIInterrogateArg::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_servedUserNr.Encode(strm); m_basicService.Encode(strm); if (HasOptionalField(e_msgCentreId)) m_msgCentreId.Encode(strm); if (HasOptionalField(e_callbackReq)) m_callbackReq.Encode(strm); if (HasOptionalField(e_extensionArg)) m_extensionArg.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4507_MWIInterrogateArg::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4507_MWIInterrogateArg::Class()), PInvalidCast); #endif return new H4507_MWIInterrogateArg(*this); } // // MWIInterrogateResElt // H4507_MWIInterrogateResElt::H4507_MWIInterrogateResElt(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 6, TRUE, 0) { m_priority.SetConstraints(PASN_Object::FixedConstraint, 0, 9); m_extensionArg.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H4507_MWIInterrogateResElt::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "basicService = " << setprecision(indent) << m_basicService << '\n'; if (HasOptionalField(e_msgCentreId)) strm << setw(indent+14) << "msgCentreId = " << setprecision(indent) << m_msgCentreId << '\n'; if (HasOptionalField(e_nbOfMessages)) strm << setw(indent+15) << "nbOfMessages = " << setprecision(indent) << m_nbOfMessages << '\n'; if (HasOptionalField(e_originatingNr)) strm << setw(indent+16) << "originatingNr = " << setprecision(indent) << m_originatingNr << '\n'; if (HasOptionalField(e_timestamp)) strm << setw(indent+12) << "timestamp = " << setprecision(indent) << m_timestamp << '\n'; if (HasOptionalField(e_priority)) strm << setw(indent+11) << "priority = " << setprecision(indent) << m_priority << '\n'; if (HasOptionalField(e_extensionArg)) strm << setw(indent+15) << "extensionArg = " << setprecision(indent) << m_extensionArg << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H4507_MWIInterrogateResElt::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H4507_MWIInterrogateResElt), PInvalidCast); #endif const H4507_MWIInterrogateResElt & other = (const H4507_MWIInterrogateResElt &)obj; Comparison result; if ((result = m_basicService.Compare(other.m_basicService)) != EqualTo) return result; if ((result = m_msgCentreId.Compare(other.m_msgCentreId)) != EqualTo) return result; if ((result = m_nbOfMessages.Compare(other.m_nbOfMessages)) != EqualTo) return result; if ((result = m_originatingNr.Compare(other.m_originatingNr)) != EqualTo) return result; if ((result = m_timestamp.Compare(other.m_timestamp)) != EqualTo) return result; if ((result = m_priority.Compare(other.m_priority)) != EqualTo) return result; if ((result = m_extensionArg.Compare(other.m_extensionArg)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H4507_MWIInterrogateResElt::GetDataLength() const { PINDEX length = 0; length += m_basicService.GetObjectLength(); if (HasOptionalField(e_msgCentreId)) length += m_msgCentreId.GetObjectLength(); if (HasOptionalField(e_nbOfMessages)) length += m_nbOfMessages.GetObjectLength(); if (HasOptionalField(e_originatingNr)) length += m_originatingNr.GetObjectLength(); if (HasOptionalField(e_timestamp)) length += m_timestamp.GetObjectLength(); if (HasOptionalField(e_priority)) length += m_priority.GetObjectLength(); if (HasOptionalField(e_extensionArg)) length += m_extensionArg.GetObjectLength(); return length; } PBoolean H4507_MWIInterrogateResElt::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_basicService.Decode(strm)) return FALSE; if (HasOptionalField(e_msgCentreId) && !m_msgCentreId.Decode(strm)) return FALSE; if (HasOptionalField(e_nbOfMessages) && !m_nbOfMessages.Decode(strm)) return FALSE; if (HasOptionalField(e_originatingNr) && !m_originatingNr.Decode(strm)) return FALSE; if (HasOptionalField(e_timestamp) && !m_timestamp.Decode(strm)) return FALSE; if (HasOptionalField(e_priority) && !m_priority.Decode(strm)) return FALSE; if (HasOptionalField(e_extensionArg) && !m_extensionArg.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H4507_MWIInterrogateResElt::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_basicService.Encode(strm); if (HasOptionalField(e_msgCentreId)) m_msgCentreId.Encode(strm); if (HasOptionalField(e_nbOfMessages)) m_nbOfMessages.Encode(strm); if (HasOptionalField(e_originatingNr)) m_originatingNr.Encode(strm); if (HasOptionalField(e_timestamp)) m_timestamp.Encode(strm); if (HasOptionalField(e_priority)) m_priority.Encode(strm); if (HasOptionalField(e_extensionArg)) m_extensionArg.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H4507_MWIInterrogateResElt::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H4507_MWIInterrogateResElt::Class()), PInvalidCast); #endif return new H4507_MWIInterrogateResElt(*this); } #endif // if ! H323_DISABLE_H4507 // End of h4507.cxx h323plus/src/h323pdu.cxx0000644000175000017500000026374011561714523013633 0ustar markmark/* * h323pdu.cxx * * H.323 PDU definitions * * Open H323 Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Contributor(s): ______________________________________. * * $Log: h323pdu.cxx,v $ * Revision 1.14 2011/05/09 07:35:47 shorne * updates for changes in PTLIB v2.11. The replacement of PDICTIONARY with H323Dictionary. Updates for the changes in the PNatMethod Class. Alteration in PFactory::Create, Remove redundent code and change change logging * * Revision 1.13 2011/03/24 13:17:51 willamowius * avoid uninitialized memory access and minor speedup * * Revision 1.12 2011/02/20 06:55:46 shorne * Fixes for H.460 to allow better selection of mesasage location in PDU. Features or Generic Data. Corrected H.460.9 * * Revision 1.11 2011/01/12 13:05:04 shorne * Added detection of keep-alive packets in signalling channel * * Revision 1.10 2010/08/31 04:00:49 shorne * Improved H.263/H.263+ interworking * * Revision 1.9 2010/08/26 15:12:39 shorne * Major H.239 upgrade. Special thx again to Marek Domaracky and Igor Pavlov * * Revision 1.8 2010/05/02 22:44:31 shorne * Added support to be able to set NAT Method on a call by call basis * * Revision 1.7 2008/09/27 06:18:57 shorne * BUG FIX: H323SignalPDU::Write to correctly handle NULL H323Connection Thx Nir Soffer * * Revision 1.6 2008/05/23 11:22:05 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.5 2008/02/20 03:07:43 shorne * Added comma to allowable E164 numbers for T38Modem * * Revision 1.4 2007/10/19 19:54:17 shorne * ported latest Video updates in OpenH323 committed after h323plus initial fork thanks * Robert * * Revision 1.3 2007/10/16 17:05:38 shorne * Allow cryptoTokens to be insert in the setup after receiving ARQ * * Revision 1.2 2007/08/20 19:13:28 shorne * Added Generic Capability support. Fixed Linux compile errors * * Revision 1.1 2007/08/06 20:51:07 shorne * First commit of h323plus * * Revision 1.154.2.3 2007/09/05 04:14:40 rjongbloed * Back ported from OPAL media packetization in TCS * * Revision 1.154.2.1 2006/12/23 19:08:02 shorne * Plugin video codecs & sundry * * Revision 1.154 2006/07/17 09:52:57 shorne * Added more support URL alias Addresses * * Revision 1.153 2006/06/23 20:19:39 shorne * More H460 support * * Revision 1.152 2006/05/30 11:14:56 hfriederich * Switch from DISABLE_H460 to H323_H460 * * Revision 1.151 2006/05/17 03:36:52 shorne * DISABLE_H460 default under linux * * Revision 1.150 2006/05/16 18:46:50 shorne * Fixed H460 ReleaseComplete missing call * * Revision 1.149 2006/05/16 11:45:17 shorne * more H460 support and non-call services * * Revision 1.148 2006/01/26 03:28:10 shorne * Caller Authentication added * * Revision 1.147 2006/01/20 00:32:24 csoutheren * First check-in of signalling aggregation code - incomplete and disabled by default * * Revision 1.146 2005/12/09 05:20:07 csoutheren * Added ability to set explicit Q.931 cause code on call end * * Revision 1.145 2005/11/21 20:59:59 shorne * Adjusted Call End Reasons * * Revision 1.144 2005/09/16 08:12:50 csoutheren * Added ability to set timeout for connect * * Revision 1.143 2005/08/30 08:29:31 csoutheren * Added new error code * * Revision 1.142 2005/03/04 03:21:21 csoutheren * Added local and remote addresses to all PDU logs to assist in debugging * * Revision 1.141 2005/01/04 08:08:45 csoutheren * More changes to implement the new configuration methodology, and also to * attack the global static problem * * Revision 1.140 2005/01/03 06:26:09 csoutheren * Added extensive support for disabling code modules at compile time * * Revision 1.139 2004/12/21 23:33:47 csoutheren * Fixed #defines for H.460, thanks to Simon Horne * * Revision 1.138 2004/12/14 06:22:22 csoutheren * More OSP implementation * * Revision 1.137 2004/12/08 01:59:23 csoutheren * initial support for Transnexus OSP toolkit * * Revision 1.136 2004/09/03 01:06:10 csoutheren * Added initial hooks for H.460 GEF * Thanks to Simon Horne and ISVO (Asia) Pte Ltd. for this contribution * * Revision 1.135 2004/05/07 06:44:16 csoutheren * Fixed problem with empty Q>931 DisplayName * * Revision 1.134 2004/04/20 05:24:54 csoutheren * Added ability to specify Q.931 DisplayName * * Revision 1.133 2004/04/03 08:28:06 csoutheren * Remove pseudo-RTTI and replaced with real RTTI * * Revision 1.132 2004/04/03 06:56:52 rjongbloed * Many and various changes to support new Visual C++ 2003 * * Revision 1.131 2004/02/26 08:32:47 csoutheren * Added release complete codes for MCU * * Revision 1.130 2003/12/11 05:41:00 csoutheren * Added storage of H.225 version in endpoint structure * Disabled sending RIPs to endpoints that cannot handle them * * Revision 1.129 2003/05/29 09:19:52 rjongbloed * Fixed minor problem with including DisplayName IE if localPartyName * is blank, now does not include it, thanks Auri Vizgaitis * * Revision 1.128 2003/05/06 06:24:16 robertj * Added continuous DTMF tone support (H.245 UserInputIndication - signalUpdate) * as per header documentation, thanks Auri Vizgaitis * * Revision 1.127 2003/04/10 09:37:20 robertj * Added some more functions for converting to alias addresses. * * Revision 1.126 2003/04/01 03:11:51 robertj * Added function to get array of AliasAddress into PStringArray. * * Revision 1.125 2003/03/25 04:56:21 robertj * Fixed issues to do with multiple inheritence in transaction reply cache. * * Revision 1.124 2003/03/20 01:51:12 robertj * More abstraction of H.225 RAS and H.501 protocols transaction handling. * * Revision 1.123 2003/02/25 06:48:19 robertj * More work on PDU transaction abstraction. * * Revision 1.122 2003/02/21 05:25:45 craigs * Abstracted out underlying transports for use with peerelements * * Revision 1.121 2003/02/03 04:31:05 robertj * Added special case for Cisco vendor field, they leave it rather incomplete, * * Revision 1.120 2003/01/26 02:57:58 craigs * Fixed oops in last checkin * * Revision 1.119 2003/01/26 02:50:38 craigs * Change so SETUP PDU uses conference and callIdentifier from H323Connection, * rather than both doing seperately and then overwriting * * Revision 1.118 2002/11/28 04:41:48 robertj * Added support for RAS ServiceControlIndication command. * * Revision 1.117 2002/11/27 06:54:57 robertj * Added Service Control Session management as per Annex K/H.323 via RAS * only at this stage. * Added H.248 ASN and very primitive infrastructure for linking into the * Service Control Session management system. * Added basic infrastructure for Annex K/H.323 HTTP transport system. * Added Call Credit Service Control to display account balances. * * Revision 1.116 2002/11/21 05:21:42 robertj * Fixed bug where get lots of zeros at the end of some PDU's * * Revision 1.115 2002/11/21 04:15:36 robertj * Added some changes to help interop with brain dead ASN decoders that do not * know to ignore fields (eg greater than version 2) they do not understand. * * Revision 1.114 2002/11/13 04:38:17 robertj * Added ability to get (and set) Q.931 release complete cause codes. * * Revision 1.113 2002/11/07 03:50:28 robertj * Added extra "congested" Q.931 codes. * * Revision 1.112 2002/10/31 00:45:22 robertj * Enhanced jitter buffer system so operates dynamically between minimum and * maximum values. Altered API to assure app writers note the change! * * Revision 1.111 2002/10/08 13:08:21 robertj * Changed for IPv6 support, thanks Sщbastien Josset. * * Revision 1.110 2002/08/14 01:07:22 robertj * Added translation of Q.931 unallocated number release complete code to * OpenH323 EndedByNoUser which is the nearest match. * * Revision 1.109 2002/08/12 05:38:24 robertj * Changes to the RAS subsystem to support ability to make requests to client * from gkserver without causing bottlenecks and race conditions. * * Revision 1.108 2002/08/05 10:03:47 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.107 2002/08/05 05:17:41 robertj * Fairly major modifications to support different authentication credentials * in ARQ to the logged in ones on RRQ. For both client and server. * Various other H.235 authentication bugs and anomalies fixed on the way. * * Revision 1.106 2002/07/31 02:25:04 robertj * Fixed translation of some call end reasons for to Q.931 codes. * * Revision 1.105 2002/07/25 10:55:44 robertj * Changes to allow more granularity in PDU dumps, hex output increasing * with increasing trace level. * * Revision 1.104 2002/07/11 07:04:12 robertj * Added build InfoRequest pdu type to RAS. * * Revision 1.103 2002/06/13 03:59:56 craigs * Added codes to progress messages to allow inband audio before connect * * Revision 1.102 2002/05/29 03:55:21 robertj * Added protocol version number checking infrastructure, primarily to improve * interoperability with stacks that are unforgiving of new features. * * Revision 1.101 2002/05/29 00:03:19 robertj * Fixed unsolicited IRR support in gk client and server, * including support for IACK and INAK. * * Revision 1.100 2002/05/21 09:32:49 robertj * Added ability to set multiple alias names ona connection by connection * basis, defaults to endpoint list, thanks Artis Kugevics * * Revision 1.99 2002/05/07 03:18:15 robertj * Added application info (name/version etc) into registered endpoint data. * * Revision 1.98 2002/05/03 09:18:49 robertj * Added automatic retransmission of RAS responses to retried requests. * * Revision 1.97 2002/04/24 01:08:09 robertj * Added output of RAS pdu sequence number to level 3 trace output. * * Revision 1.96 2002/03/27 06:04:43 robertj * Added Temporary Failure end code for connection, an application may * immediately retry the call if this occurs. * * Revision 1.95 2002/03/14 07:56:48 robertj * Added ability to specify alias type in H323SetAliasAddress, if not specified * then defaults to previous behaviour, thanks Nils Bokerman. * * Revision 1.94 2002/02/13 07:52:30 robertj * Fixed missing parameters on Q.931 calling number, thanks Markus Rydh * * Revision 1.93 2002/02/01 01:48:45 robertj * Some more fixes for T.120 channel establishment, more to do! * * Revision 1.92 2002/01/18 06:01:23 robertj * Added some H323v4 functions (fastConnectRefused & TCS in SETUP) * * Revision 1.91 2001/12/15 07:10:59 robertj * Added functions to get E.164 address from alias address or addresses. * * Revision 1.90 2001/12/14 08:36:36 robertj * More implementation of T.38, thanks Adam Lazur * * Revision 1.89 2001/12/14 06:38:35 robertj * Broke out conversion of Q.850 and H.225 release complete codes to * OpenH323 call end reasons enum. * * Revision 1.88 2001/12/13 10:56:28 robertj * Added build of request in progress pdu. * * Revision 1.87 2001/10/18 00:58:51 robertj * Fixed problem with GetDestinationAlias() adding source aliases instead * of the destination from the setup PDU, thanks Mikael Stolt. * * Revision 1.86 2001/10/09 06:55:26 robertj * Fixed separating destCallSignalAddress fields with tabs in * GetDestinationAlias() function, thanks Lee Kirchhoff * * Revision 1.85 2001/09/26 07:05:29 robertj * Fixed incorrect tags in building some PDU's, thanks Chris Purvis. * * Revision 1.84 2001/09/14 00:08:20 robertj * Optimised H323SetAliasAddress to use IsE164 function. * * Revision 1.83 2001/09/12 07:48:05 robertj * Fixed various problems with tracing. * * Revision 1.82 2001/08/16 07:49:19 robertj * Changed the H.450 support to be more extensible. Protocol handlers * are now in separate classes instead of all in H323Connection. * * Revision 1.81 2001/08/10 11:03:52 robertj * Major changes to H.235 support in RAS to support server. * * Revision 1.80 2001/08/06 03:08:56 robertj * Fission of h323.h to h323ep.h & h323con.h, h323.h now just includes files. * * Revision 1.79 2001/06/14 06:25:16 robertj * Added further H.225 PDU build functions. * Moved some functionality from connection to PDU class. * * Revision 1.78 2001/06/14 00:45:21 robertj * Added extra parameters for Q.931 fields, thanks Rani Assaf * * Revision 1.77 2001/06/05 03:14:41 robertj * Upgraded H.225 ASN to v4 and H.245 ASN to v7. * * Revision 1.76 2001/05/30 23:34:54 robertj * Added functions to send TCS=0 for transmitter side pause. * * Revision 1.75 2001/05/09 04:07:55 robertj * Added more call end codes for busy and congested. * * Revision 1.74 2001/05/03 06:45:21 robertj * Changed trace so dumps PDU if gets an error in decode. * * Revision 1.73 2001/04/11 03:01:29 robertj * Added H.450.2 (call transfer), thanks a LOT to Graeme Reid & Norwood Systems * * Revision 1.72 2001/03/24 00:58:03 robertj * Fixed MSVC warnings. * * Revision 1.71 2001/03/24 00:34:49 robertj * Added read/write hook functions so don't have to duplicate code in * H323RasH235PDU descendant class of H323RasPDU. * * Revision 1.70 2001/03/23 05:38:30 robertj * Added PTRACE_IF to output trace if a conditional is TRUE. * * Revision 1.69 2001/03/02 06:59:59 robertj * Enhanced the globally unique identifier class. * * Revision 1.68 2001/02/09 05:13:56 craigs * Added pragma implementation to (hopefully) reduce the executable image size * under Linux * * Revision 1.67 2001/01/18 06:04:46 robertj * Bullet proofed code so local alias can not be empty string. This actually * fixes an ASN PER encoding bug causing an assert. * * Revision 1.66 2000/10/12 05:11:54 robertj * Added trace log if get transport error on writing PDU. * * Revision 1.65 2000/09/25 06:48:11 robertj * Removed use of alias if there is no alias present, ie only have transport address. * * Revision 1.64 2000/09/22 01:35:51 robertj * Added support for handling LID's that only do symmetric codecs. * * Revision 1.63 2000/09/20 01:50:22 craigs * Added ability to set jitter buffer on a per-connection basis * * Revision 1.62 2000/09/05 01:16:20 robertj * Added "security" call end reason code. * * Revision 1.61 2000/07/15 09:51:41 robertj * Changed adding of Q.931 party numbers to only occur in SETUP. * * Revision 1.60 2000/07/13 12:29:49 robertj * Added some more cause codes on release complete, * * Revision 1.59 2000/07/12 10:20:43 robertj * Fixed incorrect tag code in H.245 ModeChange reject PDU. * * Revision 1.58 2000/07/09 15:21:11 robertj * Changed reference to the word "field" to be more correct IE or "Information Element" * Fixed return value of Q.931/H.225 PDU read so returns TRUE if no H.225 data in the * User-User IE. Just flag it as empty and continue processing PDU's. * * Revision 1.57 2000/06/21 23:59:44 robertj * Fixed copy/paste error setting Q.931 display name to incorrect value. * * Revision 1.56 2000/06/21 08:07:47 robertj * Added cause/reason to release complete PDU, where relevent. * * Revision 1.55 2000/06/07 05:48:06 robertj * Added call forwarding. * * Revision 1.54 2000/05/25 01:59:05 robertj * Fixed bugs in calculation of GlLobally Uniqie ID according to DCE/H.225 rules. * * Revision 1.53 2000/05/23 11:32:37 robertj * Rewrite of capability table to combine 2 structures into one and move functionality into that class * allowing some normalisation of usage across several applications. * Changed H323Connection so gets a copy of capabilities instead of using endponts, allows adjustments * to be done depending on the remote client application. * * Revision 1.52 2000/05/15 08:38:59 robertj * Removed addition of calling/called party number field in Q.931 if there isn't one. * * Revision 1.51 2000/05/09 12:19:31 robertj * Added ability to get and set "distinctive ring" Q.931 functionality. * * Revision 1.50 2000/05/08 14:07:35 robertj * Improved the provision and detection of calling and caller numbers, aliases and hostnames. * * Revision 1.49 2000/05/08 05:06:27 robertj * Fixed bug in H.245 close logical channel timeout, thanks XuPeili. * * Revision 1.48 2000/05/02 04:32:27 robertj * Fixed copyright notice comment. * * Revision 1.47 2000/04/14 17:29:43 robertj * Fixed display of error message on timeout when timeouts are not errors. * * Revision 1.46 2000/04/10 20:39:18 robertj * Added support for more sophisticated DTMF and hook flash user indication. * Added function to extract E164 address from Q.931/H.225 PDU. * * Revision 1.45 2000/03/29 04:42:19 robertj * Improved some trace logging messages. * * Revision 1.44 2000/03/25 02:01:07 robertj * Added adjustable caller name on connection by connection basis. * * Revision 1.43 2000/03/21 01:08:10 robertj * Fixed incorrect call reference code being used in originated call. * * Revision 1.42 2000/02/17 12:07:43 robertj * Used ne wPWLib random number generator after finding major problem in MSVC rand(). * * Revision 1.41 1999/12/23 22:47:09 robertj * Added calling party number field. * * Revision 1.40 1999/12/11 02:21:00 robertj * Added ability to have multiple aliases on local endpoint. * * Revision 1.39 1999/11/16 13:21:38 robertj * Removed extraneous error trace when doing asynchronous answer call. * * Revision 1.38 1999/11/15 14:11:29 robertj * Fixed trace output stream being put back after setting hex/fillchar modes. * * Revision 1.37 1999/11/10 23:30:20 robertj * Fixed unexpected closing of transport on PDU read error. * * Revision 1.36 1999/11/01 00:48:31 robertj * Added assert for illegal condition in capabilities, must have set if have table. * * Revision 1.35 1999/10/30 23:48:21 robertj * Fixed incorrect PDU type for H225 RAS location request. * * Revision 1.34 1999/10/29 03:35:06 robertj * Fixed setting of unique ID using fake MAC address from Win32 PPP device. * * Revision 1.33 1999/09/21 14:09:49 robertj * Removed warnings when no tracing enabled. * * Revision 1.32 1999/09/10 09:03:01 robertj * Used new GetInterfaceTable() function to get ethernet address for UniqueID * * Revision 1.31 1999/09/10 03:36:48 robertj * Added simple Q.931 Status response to Q.931 Status Enquiry * * Revision 1.30 1999/08/31 12:34:19 robertj * Added gatekeeper support. * * Revision 1.29 1999/08/31 11:37:30 robertj * Fixed problem with apparently randomly losing signalling channel. * * Revision 1.28 1999/08/25 05:08:14 robertj * File fission (critical mass reached). * * Revision 1.27 1999/08/13 06:34:38 robertj * Fixed problem in CallPartyNumber Q.931 encoding. * Added field name display to Q.931 protocol. * * Revision 1.26 1999/08/10 13:14:15 robertj * Added Q.931 Called Number field if have "phone number" style destination addres. * * Revision 1.25 1999/08/10 11:38:03 robertj * Changed population of setup UUIE destinationAddress if can be IA5 string. * * Revision 1.24 1999/07/26 05:10:30 robertj * Fixed yet another race condition on connection termination. * * Revision 1.23 1999/07/16 14:03:52 robertj * Fixed bug in Master/Slave negotiation that can cause looping. * * Revision 1.22 1999/07/16 06:15:59 robertj * Corrected semantics for tunnelled master/slave determination in fast start. * * Revision 1.21 1999/07/16 02:15:30 robertj * Fixed more tunneling problems. * * Revision 1.20 1999/07/15 14:45:36 robertj * Added propagation of codec open error to shut down logical channel. * Fixed control channel start up bug introduced with tunnelling. * * Revision 1.19 1999/07/15 09:08:04 robertj * Added extra debugging for if have PDU decoding error. * * Revision 1.18 1999/07/15 09:04:31 robertj * Fixed some fast start bugs * * Revision 1.17 1999/07/10 02:51:36 robertj * Added mutexing in H245 procedures. Also fixed MSD state bug. * * Revision 1.16 1999/07/09 06:09:50 robertj * Major implementation. An ENORMOUS amount of stuff added everywhere. * * Revision 1.15 1999/06/25 10:25:35 robertj * Added maintentance of callIdentifier variable in H.225 channel. * * Revision 1.14 1999/06/22 13:45:40 robertj * Fixed conferenceIdentifier generation algorithm to bas as in spec. * * Revision 1.13 1999/06/19 15:18:38 robertj * Fixed bug in MasterSlaveDeterminationAck pdu has incorrect master/slave state. * * Revision 1.12 1999/06/14 15:08:40 robertj * Added GSM codec class frame work (still no actual codec). * * Revision 1.11 1999/06/14 06:39:08 robertj * Fixed problem with getting transmit flag to channel from PDU negotiator * * Revision 1.10 1999/06/14 05:15:56 robertj * Changes for using RTP sessions correctly in H323 Logical Channel context * * Revision 1.9 1999/06/13 12:41:14 robertj * Implement logical channel transmitter. * Fixed H245 connect on receiving call. * * Revision 1.8 1999/06/09 05:26:19 robertj * Major restructuring of classes. * * Revision 1.7 1999/06/06 06:06:36 robertj * Changes for new ASN compiler and v2 protocol ASN files. * * Revision 1.6 1999/04/26 06:20:22 robertj * Fixed bugs in protocol * * Revision 1.5 1999/04/26 06:14:47 craigs * Initial implementation for RTP decoding and lots of stuff * As a whole, these changes are called "First Noise" * * Revision 1.4 1999/02/23 11:04:28 robertj * Added capability to make outgoing call. * * Revision 1.3 1999/02/06 09:23:39 robertj * BeOS port * * Revision 1.2 1999/01/16 02:34:57 robertj * GNU compiler compatibility. * * Revision 1.1 1999/01/16 01:30:54 robertj * Initial revision * */ #include #ifdef __GNUC__ #pragma implementation "h323pdu.h" #endif #include "h323pdu.h" #include "h323ep.h" #include "h225ras.h" #ifdef H323_H460 #include "h460/h460.h" #endif #ifdef _MSC_VER #pragma warning(disable : 4100) #endif #define new PNEW const unsigned H225_ProtocolID[] = { 0,0,8,2250,0,H225_PROTOCOL_VERSION }; const unsigned H245_ProtocolID[] = { 0,0,8,245 ,0,H245_PROTOCOL_VERSION }; static const char E164NumberPrefix[] = "E164:"; static const char PrivatePartyPrefix[] = "Private:"; static const char DataPartyPrefix[] = "Data:"; static const char TelexPartyPrefix[] = "Telex:"; static const char NSPNumberPrefix[] = "NSP:"; /////////////////////////////////////////////////////////////////////////////// #if PTRACING void H323TraceDumpPDU(const char * proto, PBoolean writing, const PBYTEArray & rawData, const PASN_Object & pdu, const PASN_Choice & tags, unsigned seqNum, const H323TransportAddress & locAddr, const H323TransportAddress & remAddr) { if (!PTrace::CanTrace(3)) return; ostream & trace = PTrace::Begin(3, __FILE__, __LINE__); trace << proto << '\t' << (writing ? "Send" : "Receiv") << "ing PDU ["; if (locAddr.IsEmpty()) trace << "(noaddr)"; else trace << locAddr; trace << "/"; if (remAddr.IsEmpty()) trace << "(noaddr)"; else trace << remAddr; trace << "] :"; if (PTrace::CanTrace(4)) { trace << "\n " << resetiosflags(ios::floatfield); if (!PTrace::CanTrace(5)) trace << setiosflags(ios::fixed); // Will truncate hex dumps to 32 bytes trace << setprecision(2) << pdu << resetiosflags(ios::floatfield); if (PTrace::CanTrace(6)) trace << "\nRaw PDU:\n" << hex << setfill('0') << setprecision(2) << rawData << dec << setfill(' '); } else { trace << ' ' << tags.GetTagName(); PASN_Object & next = tags.GetObject(); if (PIsDescendant(&next, PASN_Choice)) trace << ' ' << ((PASN_Choice &)next).GetTagName(); if (seqNum > 0) trace << ' ' << seqNum; } trace << PTrace::End; } #endif /////////////////////////////////////////////////////////////////////////////// void H323SetAliasAddresses(const H323TransportAddressArray & addresses, H225_ArrayOf_AliasAddress & aliases) { aliases.SetSize(addresses.GetSize()); for (PINDEX i = 0; i < addresses.GetSize(); i++) H323SetAliasAddress(addresses[i], aliases[i]); } void H323SetAliasAddresses(const PStringArray & names, H225_ArrayOf_AliasAddress & aliases, int tag) { aliases.SetSize(names.GetSize()); for (PINDEX i = 0; i < names.GetSize(); i++) H323SetAliasAddress(names[i], aliases[i], tag); } void H323SetAliasAddresses(const PStringList & names, H225_ArrayOf_AliasAddress & aliases, int tag) { aliases.SetSize(names.GetSize()); for (PINDEX i = 0; i < names.GetSize(); i++) H323SetAliasAddress(names[i], aliases[i], tag); } static PBoolean IsE164(const PString & str) { return !str.IsEmpty() && (str.FindSpan("1234567890*#,") == P_MAX_INDEX); } static PBoolean IsURL(const PString & str) { return !str && str.Find("@") != P_MAX_INDEX; } void H323SetAliasAddress(const H323TransportAddress & address, H225_AliasAddress & alias) { alias.SetTag(H225_AliasAddress::e_transportID); address.SetPDU(alias); } static struct { const char * name; int tag; } aliasAddressTypes[5] = { { "e164", H225_AliasAddress::e_dialedDigits }, { "h323", H225_AliasAddress::e_h323_ID }, { "url", H225_AliasAddress::e_url_ID }, { "ip", H225_AliasAddress::e_transportID }, { "email", H225_AliasAddress::e_email_ID }, // { "???", H225_AliasAddresse_partyNumber }, // { "???", H225_AliasAddresse_mobileUIM } }; void H323SetAliasAddress(const PString & _name, H225_AliasAddress & alias, int tag) { PString name = _name; // See if alias type was explicitly specified if (tag < 0) { PINDEX colon = name.Find(':'); if (colon != P_MAX_INDEX && colon > 0) { PString type = name.Left(colon); for (PINDEX i = 0; tag < 0 && i < 5; i++) { if (type == aliasAddressTypes[i].name) { tag = aliasAddressTypes[i].tag; name = name.Mid(colon+1); } } } } if (tag < 0 || tag == 1) { if (IsE164(name)) tag = H225_AliasAddress::e_dialedDigits; else if (IsURL(name)) tag = H225_AliasAddress::e_url_ID; else tag =H225_AliasAddress::e_h323_ID; } alias.SetTag(tag); switch (alias.GetTag()) { case H225_AliasAddress::e_dialedDigits : case H225_AliasAddress::e_url_ID : case H225_AliasAddress::e_email_ID : (PASN_IA5String &)alias = name; break; case H225_AliasAddress::e_h323_ID : (PASN_BMPString &)alias = name; break; case H225_AliasAddress::e_transportID : { H323TransportAddress addr = name; addr.SetPDU(alias); break; } case H225_AliasAddress::e_partyNumber : { H225_PartyNumber & party = alias; if (strncmp(name, E164NumberPrefix, sizeof(E164NumberPrefix)-1) == 0) { party.SetTag(H225_PartyNumber::e_e164Number); H225_PublicPartyNumber & number = party; number.m_publicNumberDigits = name.Mid(sizeof(E164NumberPrefix)-1); } else if (strncmp(name, PrivatePartyPrefix, sizeof(PrivatePartyPrefix)-1) == 0) { party.SetTag(H225_PartyNumber::e_privateNumber); H225_PrivatePartyNumber & number = party; number.m_privateNumberDigits = name.Mid(sizeof(PrivatePartyPrefix)-1); } else if (strncmp(name, DataPartyPrefix, sizeof(DataPartyPrefix)-1) == 0) { party.SetTag(H225_PartyNumber::e_dataPartyNumber); (H225_NumberDigits &)party = name.Mid(sizeof(DataPartyPrefix)-1); } else if (strncmp(name, TelexPartyPrefix, sizeof(TelexPartyPrefix)-1) == 0) { party.SetTag(H225_PartyNumber::e_telexPartyNumber); (H225_NumberDigits &)party = name.Mid(sizeof(TelexPartyPrefix)-1); } else if (strncmp(name, NSPNumberPrefix, sizeof(NSPNumberPrefix)-1) == 0) { party.SetTag(H225_PartyNumber::e_nationalStandardPartyNumber); (H225_NumberDigits &)party = name.Mid(sizeof(NSPNumberPrefix)-1); } } default : break; } } ///////////////////////////////////////////////////////////////////////////// PStringArray H323GetAliasAddressStrings(const H225_ArrayOf_AliasAddress & aliases) { PStringArray strings(aliases.GetSize()); for (PINDEX i = 0; i < aliases.GetSize(); i++) strings[i] = H323GetAliasAddressString(aliases[i]); return strings; } PString H323GetAliasAddressString(const H225_AliasAddress & alias) { switch (alias.GetTag()) { case H225_AliasAddress::e_dialedDigits : case H225_AliasAddress::e_url_ID : case H225_AliasAddress::e_email_ID : return ((const PASN_IA5String &)alias).GetValue(); case H225_AliasAddress::e_h323_ID : return ((const PASN_BMPString &)alias).GetValue(); case H225_AliasAddress::e_transportID : return H323TransportAddress(alias); case H225_AliasAddress::e_partyNumber : { const H225_PartyNumber & party = alias; switch (party.GetTag()) { case H225_PartyNumber::e_e164Number : { const H225_PublicPartyNumber & number = party; return E164NumberPrefix + (PString)number.m_publicNumberDigits; } case H225_PartyNumber::e_privateNumber : { const H225_PrivatePartyNumber & number = party; return PrivatePartyPrefix + (PString)number.m_privateNumberDigits; } case H225_PartyNumber::e_dataPartyNumber : return DataPartyPrefix + (PString)(const H225_NumberDigits &)party; case H225_PartyNumber::e_telexPartyNumber : return TelexPartyPrefix + (PString)(const H225_NumberDigits &)party; case H225_PartyNumber::e_nationalStandardPartyNumber : return NSPNumberPrefix + (PString)(const H225_NumberDigits &)party; } break; } default : break; } return PString(); } PString H323GetAliasAddressE164(const H225_AliasAddress & alias) { PString str = H323GetAliasAddressString(alias); if (IsE164(str)) return str; return PString(); } PString H323GetAliasAddressE164(const H225_ArrayOf_AliasAddress & aliases) { for (PINDEX i = 0; i < aliases.GetSize(); i++) { PString alias = H323GetAliasAddressE164(aliases[i]); if (!alias) return alias; } return PString(); } /////////////////////////////////////////////////////////////////////////////// PString H323GetApplicationInfo(const H225_VendorIdentifier & vendor) { PStringStream str; PString product = vendor.m_productId.AsString(); PString version = vendor.m_versionId.AsString(); // Special case, Cisco IOS does not put in the product and version fields if (vendor.m_vendor.m_t35CountryCode == 181 && vendor.m_vendor.m_t35Extension == 0 && vendor.m_vendor.m_manufacturerCode == 18) { if (product.IsEmpty()) product = "Cisco IOS"; if (version.IsEmpty()) version = "12.2"; } str << product << '\t' << version << '\t' << vendor.m_vendor.m_t35CountryCode; if (vendor.m_vendor.m_t35Extension != 0) str << '.' << vendor.m_vendor.m_t35Extension; str << '/' << vendor.m_vendor.m_manufacturerCode; str.MakeMinimumSize(); return str; } /////////////////////////////////////////////////////////////////////////////// PBoolean H323SetRTPPacketization(H245_RTPPayloadType & rtpPacketization, const OpalMediaFormat & mediaFormat, RTP_DataFrame::PayloadTypes payloadType) { PString mediaPacketization = mediaFormat.GetOptionString(PLUGINCODEC_MEDIA_PACKETIZATION); if (mediaPacketization.IsEmpty()) return FALSE; if (mediaPacketization.NumCompare("RFC") == PObject::EqualTo) { rtpPacketization.m_payloadDescriptor.SetTag(H245_RTPPayloadType_payloadDescriptor::e_rfc_number); ((PASN_Integer &)rtpPacketization.m_payloadDescriptor) = mediaPacketization.Mid(3).AsUnsigned(); } else if (mediaPacketization.FindSpan("0123456789.") == P_MAX_INDEX) { rtpPacketization.m_payloadDescriptor.SetTag(H245_RTPPayloadType_payloadDescriptor::e_oid); ((PASN_ObjectId &)rtpPacketization.m_payloadDescriptor) = mediaPacketization; } else { rtpPacketization.m_payloadDescriptor.SetTag(H245_RTPPayloadType_payloadDescriptor::e_nonStandardIdentifier); H245_NonStandardParameter & nonstd = rtpPacketization.m_payloadDescriptor; nonstd.m_nonStandardIdentifier.SetTag(H245_NonStandardIdentifier::e_h221NonStandard); H245_NonStandardIdentifier_h221NonStandard & h221 = nonstd.m_nonStandardIdentifier; h221.m_t35CountryCode = 9; h221.m_t35Extension = 0; h221.m_manufacturerCode = 61; nonstd.m_data = mediaPacketization; } if (payloadType == RTP_DataFrame::MaxPayloadType) payloadType = mediaFormat.GetPayloadType(); rtpPacketization.IncludeOptionalField(H245_RTPPayloadType::e_payloadType); rtpPacketization.m_payloadType = payloadType; return TRUE; } PBoolean H323GetRTPPacketization(OpalMediaFormat & mediaFormat, const H245_RTPPayloadType & rtpPacketization) { PString mediaPacketization; switch (rtpPacketization.m_payloadDescriptor.GetTag()) { case H245_RTPPayloadType_payloadDescriptor::e_rfc_number : mediaPacketization.sprintf("RFC%u", ((const PASN_Integer &)rtpPacketization.m_payloadDescriptor).GetValue()); break; case H245_RTPPayloadType_payloadDescriptor::e_oid : mediaPacketization = ((const PASN_ObjectId &)rtpPacketization.m_payloadDescriptor).AsString(); if (mediaPacketization.IsEmpty()) { PTRACE(1, "RTP_UDP\tInvalid OID in packetization type."); return FALSE; } break; case H245_RTPPayloadType_payloadDescriptor::e_nonStandardIdentifier : mediaPacketization = ((const H245_NonStandardParameter &)rtpPacketization.m_payloadDescriptor).m_data.AsString(); if (mediaPacketization.IsEmpty()) { PTRACE(1, "RTP_UDP\tInvalid non-standard identifier in packetization type."); return FALSE; } break; default : PTRACE(1, "RTP_UDP\tUnknown packetization type."); return FALSE; } mediaFormat.SetOptionString(PLUGINCODEC_MEDIA_PACKETIZATION, mediaPacketization); return TRUE; } /////////////////////////////////////////////////////////////////////////////// #ifdef H323_H460 static void SendSetupFeatureSet(const H323Connection * connection, H225_Setup_UUIE & pdu) { H225_FeatureSet fs; if (!connection->OnSendFeatureSet(H460_MessageType::e_setup, fs, true)) return; if (fs.HasOptionalField(H225_FeatureSet::e_neededFeatures)) { pdu.IncludeOptionalField(H225_Setup_UUIE::e_neededFeatures); H225_ArrayOf_FeatureDescriptor & fsn = pdu.m_neededFeatures; fsn = fs.m_neededFeatures; } if (fs.HasOptionalField(H225_FeatureSet::e_desiredFeatures)) { pdu.IncludeOptionalField(H225_Setup_UUIE::e_desiredFeatures); H225_ArrayOf_FeatureDescriptor & fsn = pdu.m_desiredFeatures; fsn = fs.m_desiredFeatures; } if (fs.HasOptionalField(H225_FeatureSet::e_supportedFeatures)) { pdu.IncludeOptionalField(H225_Setup_UUIE::e_supportedFeatures); H225_ArrayOf_FeatureDescriptor & fsn = pdu.m_supportedFeatures; fsn = fs.m_supportedFeatures; } } template static void SendFeatureSet(const H323Connection * connection, unsigned code, H225_H323_UU_PDU & msg, PDUType & pdu) { H225_FeatureSet fs; if (connection->OnSendFeatureSet(code,fs,true)) { pdu.IncludeOptionalField(PDUType::e_featureSet); pdu.m_featureSet = fs; } if (connection->OnSendFeatureSet(code,fs,false)) { if (fs.HasOptionalField(H225_FeatureSet::e_supportedFeatures)) { msg.IncludeOptionalField(H225_H323_UU_PDU::e_genericData); H225_ArrayOf_FeatureDescriptor & fsn = fs.m_supportedFeatures; H225_ArrayOf_GenericData & data = msg.m_genericData; for (PINDEX i=0; i < fsn.GetSize(); i++) { PINDEX lastPos = data.GetSize(); data.SetSize(lastPos+1); data[lastPos] = fsn[i]; } } } } #endif #ifndef DISABLE_CALLAUTH template static void BuildAuthenticatorPDU(PDUType & pdu, unsigned code, const H323Connection * connection) { H235Authenticators authenticators = connection->GetEPAuthenticators(); if (!authenticators.IsEmpty()) { connection->GetEPAuthenticators().PrepareSignalPDU(code,pdu.m_tokens,pdu.m_cryptoTokens); if (pdu.m_tokens.GetSize() > 0) pdu.IncludeOptionalField(PDUType::e_tokens); if (pdu.m_cryptoTokens.GetSize() > 0) pdu.IncludeOptionalField(PDUType::e_cryptoTokens); } } #endif /////////////////////////////////////////////////////////////////////////////// H323SignalPDU::H323SignalPDU() { } static unsigned SetH225Version(const H323Connection & connection, H225_ProtocolIdentifier & protocolIdentifier) { unsigned version = connection.GetSignallingVersion(); protocolIdentifier.SetValue(psprintf("0.0.8.2250.0.%u", version)); return version; } H225_Setup_UUIE & H323SignalPDU::BuildSetup(const H323Connection & connection, const H323TransportAddress & destAddr) { q931pdu.BuildSetup(connection.GetCallReference()); SetQ931Fields(connection, TRUE); m_h323_uu_pdu.m_h323_message_body.SetTag(H225_H323_UU_PDU_h323_message_body::e_setup); H225_Setup_UUIE & setup = m_h323_uu_pdu.m_h323_message_body; if (SetH225Version(connection, setup.m_protocolIdentifier) < 3) { setup.RemoveOptionalField(H225_Setup_UUIE::e_multipleCalls); setup.RemoveOptionalField(H225_Setup_UUIE::e_maintainConnection); } setup.IncludeOptionalField(H225_Setup_UUIE::e_sourceAddress); H323SetAliasAddresses(connection.GetLocalAliasNames(), setup.m_sourceAddress); setup.m_conferenceID = connection.GetConferenceIdentifier(); if (connection.GetEndPoint().OnSendCallIndependentSupplementaryService(&connection,*this)) setup.m_conferenceGoal.SetTag(H225_Setup_UUIE_conferenceGoal::e_callIndependentSupplementaryService); else if (connection.GetEndPoint().OnConferenceInvite(TRUE,&connection,*this)) setup.m_conferenceGoal.SetTag(H225_Setup_UUIE_conferenceGoal::e_invite); else setup.m_conferenceGoal.SetTag(H225_Setup_UUIE_conferenceGoal::e_create); setup.m_callType.SetTag(H225_CallType::e_pointToPoint); setup.m_callIdentifier.m_guid = connection.GetCallIdentifier(); setup.m_mediaWaitForConnect = FALSE; setup.m_canOverlapSend = FALSE; if (!destAddr) { setup.IncludeOptionalField(H225_Setup_UUIE::e_destCallSignalAddress); destAddr.SetPDU(setup.m_destCallSignalAddress); } PString destAlias = connection.GetRemotePartyName(); if (!destAlias && destAlias != destAddr) { setup.IncludeOptionalField(H225_Setup_UUIE::e_destinationAddress); setup.m_destinationAddress.SetSize(1); // Try and encode it as a phone number H323SetAliasAddress(destAlias, setup.m_destinationAddress[0]); if (setup.m_destinationAddress[0].GetTag() == H225_AliasAddress::e_dialedDigits) q931pdu.SetCalledPartyNumber(destAlias); } connection.SetEndpointTypeInfo(setup.m_sourceInfo); return setup; } #ifndef DISABLE_CALLAUTH void H323SignalPDU::InsertCryptoTokensSetup(const H323Connection & connection, H225_Setup_UUIE & setup) { BuildAuthenticatorPDU(setup,H225_H323_UU_PDU_h323_message_body::e_setup, &connection); } #endif #ifdef H323_H460 void H323SignalPDU::InsertH460Setup(const H323Connection & connection, H225_Setup_UUIE & setup) { SendSetupFeatureSet(&connection,setup); } #endif H225_CallProceeding_UUIE & H323SignalPDU::BuildCallProceeding(const H323Connection & connection) { q931pdu.BuildCallProceeding(connection.GetCallReference()); SetQ931Fields(connection); m_h323_uu_pdu.m_h323_message_body.SetTag(H225_H323_UU_PDU_h323_message_body::e_callProceeding); H225_CallProceeding_UUIE & proceeding = m_h323_uu_pdu.m_h323_message_body; if (SetH225Version(connection, proceeding.m_protocolIdentifier) < 3) { proceeding.RemoveOptionalField(H225_CallProceeding_UUIE::e_multipleCalls); proceeding.RemoveOptionalField(H225_CallProceeding_UUIE::e_maintainConnection); } proceeding.m_callIdentifier.m_guid = connection.GetCallIdentifier(); connection.SetEndpointTypeInfo(proceeding.m_destinationInfo); #ifdef H323_H460 SendFeatureSet(&connection,H460_MessageType::e_callProceeding, m_h323_uu_pdu, proceeding); #endif #ifndef DISABLE_CALLAUTH if (connection.HasAuthentication()) { BuildAuthenticatorPDU(proceeding,H225_H323_UU_PDU_h323_message_body::e_callProceeding, &connection); } #endif return proceeding; } H225_Connect_UUIE & H323SignalPDU::BuildConnect(const H323Connection & connection) { q931pdu.BuildConnect(connection.GetCallReference()); SetQ931Fields(connection); m_h323_uu_pdu.m_h323_message_body.SetTag(H225_H323_UU_PDU_h323_message_body::e_connect); H225_Connect_UUIE & connect = m_h323_uu_pdu.m_h323_message_body; if (SetH225Version(connection, connect.m_protocolIdentifier) < 3) { connect.RemoveOptionalField(H225_Connect_UUIE::e_multipleCalls); connect.RemoveOptionalField(H225_Connect_UUIE::e_maintainConnection); } connect.m_callIdentifier.m_guid = connection.GetCallIdentifier(); connect.m_conferenceID = connection.GetConferenceIdentifier(); connection.SetEndpointTypeInfo(connect.m_destinationInfo); #ifdef H323_H460 SendFeatureSet(&connection,H460_MessageType::e_connect, m_h323_uu_pdu,connect); #endif #ifndef DISABLE_CALLAUTH BuildAuthenticatorPDU(connect,H225_H323_UU_PDU_h323_message_body::e_connect, &connection); #endif return connect; } H225_Connect_UUIE & H323SignalPDU::BuildConnect(const H323Connection & connection, const PIPSocket::Address & h245Address, WORD port) { H225_Connect_UUIE & connect = BuildConnect(connection); // indicate we are including the optional H245 address in the PDU connect.IncludeOptionalField(H225_Connect_UUIE::e_h245Address); // convert IP address into the correct H245 type H323TransportAddress transAddr(h245Address, port); transAddr.SetPDU(connect.m_h245Address); return connect; } H225_Alerting_UUIE & H323SignalPDU::BuildAlerting(const H323Connection & connection) { q931pdu.BuildAlerting(connection.GetCallReference()); SetQ931Fields(connection); m_h323_uu_pdu.m_h323_message_body.SetTag(H225_H323_UU_PDU_h323_message_body::e_alerting); H225_Alerting_UUIE & alerting = m_h323_uu_pdu.m_h323_message_body; if (SetH225Version(connection, alerting.m_protocolIdentifier) < 3) { alerting.RemoveOptionalField(H225_Alerting_UUIE::e_multipleCalls); alerting.RemoveOptionalField(H225_Alerting_UUIE::e_maintainConnection); } alerting.m_callIdentifier.m_guid = connection.GetCallIdentifier(); connection.SetEndpointTypeInfo(alerting.m_destinationInfo); #ifdef H323_H460 SendFeatureSet(&connection,H460_MessageType::e_alerting, m_h323_uu_pdu,alerting); #endif #ifdef H323_H248 if(connection.OnSendServiceControlSessions(alerting.m_serviceControl, H225_ServiceControlSession_reason::e_open)) alerting.IncludeOptionalField(H225_Alerting_UUIE::e_serviceControl); #endif #ifndef DISABLE_CALLAUTH BuildAuthenticatorPDU(alerting,H225_H323_UU_PDU_h323_message_body::e_alerting, &connection); #endif return alerting; } H225_Information_UUIE & H323SignalPDU::BuildInformation(const H323Connection & connection) { q931pdu.BuildInformation(connection.GetCallReference(), connection.HadAnsweredCall()); SetQ931Fields(connection); m_h323_uu_pdu.m_h323_message_body.SetTag(H225_H323_UU_PDU_h323_message_body::e_information); H225_Information_UUIE & information = m_h323_uu_pdu.m_h323_message_body; SetH225Version(connection, information.m_protocolIdentifier); information.m_callIdentifier.m_guid = connection.GetCallIdentifier(); return information; } H323Connection::CallEndReason H323TranslateToCallEndReason(Q931::CauseValues cause, const H225_ReleaseCompleteReason & reason) { PTRACE(4,"H225\tCall End Reason " << cause); switch (cause) { case Q931::ErrorInCauseIE : switch (reason.GetTag()) { case H225_ReleaseCompleteReason::e_noBandwidth : return H323Connection::EndedByNoBandwidth; case H225_ReleaseCompleteReason::e_gatekeeperResources : case H225_ReleaseCompleteReason::e_gatewayResources : case H225_ReleaseCompleteReason::e_adaptiveBusy : return H323Connection::EndedByRemoteCongestion; case H225_ReleaseCompleteReason::e_unreachableDestination : return H323Connection::EndedByUnreachable; case H225_ReleaseCompleteReason::e_calledPartyNotRegistered : return H323Connection::EndedByNoUser; case H225_ReleaseCompleteReason::e_callerNotRegistered: return H323Connection::EndedByGatekeeper; case H225_ReleaseCompleteReason::e_securityDenied: return H323Connection::EndedBySecurityDenial; case H225_ReleaseCompleteReason::e_newConnectionNeeded: return H323Connection::EndedByTemporaryFailure; } // Do next case case Q931::UnknownCauseIE : case Q931::CallRejected : return H323Connection::EndedByRefusal; case Q931::NormalCallClearing : return H323Connection::EndedByRemoteUser; case Q931::UserBusy : return H323Connection::EndedByRemoteBusy; case Q931::Congestion : case Q931::ResourceUnavailable : return H323Connection::EndedByRemoteCongestion; case Q931::NoResponse : return H323Connection::EndedByHostOffline; case Q931::NoAnswer : return H323Connection::EndedByNoAnswer; case Q931::NoRouteToNetwork : case Q931::RequestedCircuitNotAvailable : case Q931::ChannelUnacceptable : return H323Connection::EndedByUnreachable; case Q931::UnallocatedNumber : case Q931::NoRouteToDestination : case Q931::SubscriberAbsent : return H323Connection::EndedByNoUser; case Q931::Redirection : return H323Connection::EndedByCallForwarded; case Q931::DestinationOutOfOrder : case Q931::NoCircuitChannelAvailable : return H323Connection::EndedByConnectFail; case Q931::TemporaryFailure : return H323Connection::EndedByTemporaryFailure; case Q931::InvalidNumberFormat : return H323Connection::EndedByInvalidNumberFormat; default: return H323Connection::EndedByQ931Cause; } } Q931::CauseValues H323TranslateFromCallEndReason(H323Connection::CallEndReason callEndReason, H225_ReleaseCompleteReason & reason) { static int const ReasonCodes[H323Connection::NumCallEndReasons] = { Q931::NormalCallClearing, /// EndedByLocalUser, Local endpoint application cleared call Q931::UserBusy, /// EndedByNoAccept, Local endpoint did not accept call Q931::CallRejected, /// EndedByAnswerDenied, Local endpoint declined to answer call Q931::NormalCallClearing, /// EndedByRemoteUser, Remote endpoint application cleared call -H225_ReleaseCompleteReason::e_destinationRejection, /// EndedByRefusal, Remote endpoint refused call Q931::NoAnswer, /// EndedByNoAnswer, Remote endpoint did not answer in required time Q931::NormalCallClearing, /// EndedByCallerAbort, Remote endpoint stopped calling -H225_ReleaseCompleteReason::e_undefinedReason, /// EndedByTransportFail, Transport error cleared call -H225_ReleaseCompleteReason::e_unreachableDestination, /// EndedByConnectFail, Transport connection failed to establish call -H225_ReleaseCompleteReason::e_gatekeeperResources, /// EndedByGatekeeper, Gatekeeper has cleared call -H225_ReleaseCompleteReason::e_calledPartyNotRegistered,/// EndedByNoUser, Call failed as could not find user (in GK) -H225_ReleaseCompleteReason::e_noBandwidth, /// EndedByNoBandwidth, Call failed as could not get enough bandwidth -H225_ReleaseCompleteReason::e_undefinedReason, /// EndedByCapabilityExchange,Could not find common capabilities -H225_ReleaseCompleteReason::e_facilityCallDeflection, /// EndedByCallForwarded, Call was forwarded using FACILITY message -H225_ReleaseCompleteReason::e_securityDenied, /// EndedBySecurityDenial, Call failed a security check and was ended Q931::UserBusy, /// EndedByLocalBusy, Local endpoint busy Q931::Congestion, /// EndedByLocalCongestion, Local endpoint congested Q931::UserBusy, /// EndedByRemoteBusy, Remote endpoint busy Q931::Congestion, /// EndedByRemoteCongestion, Remote endpoint congested Q931::NoRouteToDestination, /// EndedByUnreachable, Could not reach the remote party Q931::InvalidCallReference, /// EndedByNoEndPoint, The remote party is not running an endpoint Q931::NoResponse, /// EndedByHostOffline, The remote party host off line Q931::TemporaryFailure, /// EndedByTemporaryFailure The remote failed temporarily app may retry Q931::UnknownCauseIE, /// EndedByQ931Cause, The remote ended the call with unmapped Q.931 cause code Q931::NormalUnspecified, /// EndedByDurationLimit, Call cleared due to an enforced duration limit -H225_ReleaseCompleteReason::e_invalidCID, /// EndedByInvalidConferenceID Call cleared due to invalid conference ID -H225_ReleaseCompleteReason::e_calledPartyNotRegistered, /// EndedByOSPRefusal Call cleared as OSP server unable or unwilling to route Q931::InvalidNumberFormat, /// EndedByInvalidNumberFormat Call cleared as number was invalid format Q931::ProtocolErrorUnspecified /// EndedByUnspecifiedProtocolError Call cleared due to unspecified protocol error }; int code = ReasonCodes[callEndReason]; //if (code == Q931::UnknownCauseIE) // return (Q931::CauseValues)connection.GetCallEndReason(); if (code >= 0) return (Q931::CauseValues)code; reason.SetTag(-code); return Q931::ErrorInCauseIE; } Q931::CauseValues H323TranslateFromCallEndReason(const H323Connection & connection, H225_ReleaseCompleteReason & reason) { return H323TranslateFromCallEndReason(connection.GetCallEndReason(), reason); } H225_ReleaseComplete_UUIE & H323SignalPDU::BuildReleaseComplete(const H323Connection & connection) { q931pdu.BuildReleaseComplete(connection.GetCallReference(), connection.HadAnsweredCall()); m_h323_uu_pdu.m_h323_message_body.SetTag(H225_H323_UU_PDU_h323_message_body::e_releaseComplete); H225_ReleaseComplete_UUIE & release = m_h323_uu_pdu.m_h323_message_body; SetH225Version(connection, release.m_protocolIdentifier); release.m_callIdentifier.m_guid = connection.GetCallIdentifier(); Q931::CauseValues cause = (Q931::CauseValues)connection.GetQ931Cause(); if (cause == Q931::ErrorInCauseIE) cause = H323TranslateFromCallEndReason(connection, release.m_reason); if (cause != Q931::ErrorInCauseIE) q931pdu.SetCause(cause); else release.IncludeOptionalField(H225_ReleaseComplete_UUIE::e_reason); #ifndef DISABLE_CALLAUTH BuildAuthenticatorPDU(release,H225_H323_UU_PDU_h323_message_body::e_releaseComplete, &connection); #endif #ifdef H323_H460 SendFeatureSet(&connection,H460_MessageType::e_releaseComplete, m_h323_uu_pdu,release); #endif return release; } H225_Facility_UUIE * H323SignalPDU::BuildFacility(const H323Connection & connection, PBoolean empty, unsigned reason) { q931pdu.BuildFacility(connection.GetCallReference(), connection.HadAnsweredCall()); if (empty) { m_h323_uu_pdu.m_h323_message_body.SetTag(H225_H323_UU_PDU_h323_message_body::e_empty); return NULL; } m_h323_uu_pdu.m_h323_message_body.SetTag(H225_H323_UU_PDU_h323_message_body::e_facility); H225_Facility_UUIE & fac = m_h323_uu_pdu.m_h323_message_body; if (reason != H225_FacilityReason::e_undefinedReason) fac.m_reason.SetTag(reason); SetH225Version(connection, fac.m_protocolIdentifier); fac.IncludeOptionalField(H225_Facility_UUIE::e_callIdentifier); fac.m_callIdentifier.m_guid = connection.GetCallIdentifier(); #ifdef H323_H460 if (reason == H225_FacilityReason::e_featureSetUpdate) SendFeatureSet(&connection,H460_MessageType::e_facility, m_h323_uu_pdu,fac); #endif #ifndef DISABLE_CALLAUTH BuildAuthenticatorPDU(fac,H225_H323_UU_PDU_h323_message_body::e_facility, &connection); #endif return &fac; } H225_Progress_UUIE & H323SignalPDU::BuildProgress(const H323Connection & connection) { q931pdu.BuildProgress(connection.GetCallReference(), connection.HadAnsweredCall(), Q931::ProgressInbandInformationAvailable); SetQ931Fields(connection); m_h323_uu_pdu.m_h323_message_body.SetTag(H225_H323_UU_PDU_h323_message_body::e_progress); H225_Progress_UUIE & progress = m_h323_uu_pdu.m_h323_message_body; SetH225Version(connection, progress.m_protocolIdentifier); progress.m_callIdentifier.m_guid = connection.GetCallIdentifier(); connection.SetEndpointTypeInfo(progress.m_destinationInfo); return progress; } H225_Status_UUIE & H323SignalPDU::BuildStatus(const H323Connection & connection) { q931pdu.BuildStatus(connection.GetCallReference(), connection.HadAnsweredCall()); m_h323_uu_pdu.m_h323_message_body.SetTag(H225_H323_UU_PDU_h323_message_body::e_status); H225_Status_UUIE & status = m_h323_uu_pdu.m_h323_message_body; SetH225Version(connection, status.m_protocolIdentifier); status.m_callIdentifier.m_guid = connection.GetCallIdentifier(); return status; } H225_StatusInquiry_UUIE & H323SignalPDU::BuildStatusInquiry(const H323Connection & connection) { q931pdu.BuildStatusEnquiry(connection.GetCallReference(), connection.HadAnsweredCall()); m_h323_uu_pdu.m_h323_message_body.SetTag(H225_H323_UU_PDU_h323_message_body::e_statusInquiry); H225_StatusInquiry_UUIE & inquiry = m_h323_uu_pdu.m_h323_message_body; SetH225Version(connection, inquiry.m_protocolIdentifier); inquiry.m_callIdentifier.m_guid = connection.GetCallIdentifier(); return inquiry; } H225_SetupAcknowledge_UUIE & H323SignalPDU::BuildSetupAcknowledge(const H323Connection & connection) { q931pdu.BuildSetupAcknowledge(connection.GetCallReference()); m_h323_uu_pdu.m_h323_message_body.SetTag(H225_H323_UU_PDU_h323_message_body::e_setupAcknowledge); H225_SetupAcknowledge_UUIE & setupAck = m_h323_uu_pdu.m_h323_message_body; SetH225Version(connection, setupAck.m_protocolIdentifier); setupAck.m_callIdentifier.m_guid = connection.GetCallIdentifier(); return setupAck; } H225_Notify_UUIE & H323SignalPDU::BuildNotify(const H323Connection & connection) { q931pdu.BuildNotify(connection.GetCallReference(), connection.HadAnsweredCall()); m_h323_uu_pdu.m_h323_message_body.SetTag(H225_H323_UU_PDU_h323_message_body::e_notify); H225_Notify_UUIE & notify = m_h323_uu_pdu.m_h323_message_body; SetH225Version(connection, notify.m_protocolIdentifier); notify.m_callIdentifier.m_guid = connection.GetCallIdentifier(); return notify; } void H323SignalPDU::BuildQ931() { // Encode the H225 PDu into the Q931 PDU as User-User data PPER_Stream strm; Encode(strm); strm.CompleteEncoding(); q931pdu.SetIE(Q931::UserUserIE, strm); } void H323SignalPDU::PrintOn(ostream & strm) const { int indent = (int)strm.precision() + 2; strm << "{\n" << setw(indent+10) << "q931pdu = " << setprecision(indent) << q931pdu << '\n' << setw(indent+10) << "h225pdu = " << setprecision(indent); H225_H323_UserInformation::PrintOn(strm); strm << '\n' << setw(indent-1) << "}"; } PBoolean H323SignalPDU::Read(H323Transport & transport) { PBYTEArray rawData; if (!transport.ReadPDU(rawData)) { PTRACE_IF(1, transport.GetErrorCode(PChannel::LastReadError) != PChannel::Timeout, "H225\tRead error (" << transport.GetErrorNumber(PChannel::LastReadError) << "): " << transport.GetErrorText(PChannel::LastReadError)); return FALSE; } return ProcessReadData(transport, rawData); } PBoolean H323SignalPDU::ProcessReadData(H323Transport & transport, const PBYTEArray & rawData) { if (rawData.GetSize() < 5) { PTRACE(4,"H225\tSignalling Channel KeepAlive Rec'vd"); return TRUE; } if (!q931pdu.Decode(rawData)) { PTRACE(1, "H225\tParse error of Q931 PDU:\n" << hex << setfill('0') << setprecision(2) << rawData << dec << setfill(' ')); return FALSE; } if (!q931pdu.HasIE(Q931::UserUserIE)) { m_h323_uu_pdu.m_h323_message_body.SetTag(H225_H323_UU_PDU_h323_message_body::e_empty); PTRACE(1, "H225\tNo Q931 User-User Information Element," "\nRaw PDU:\n" << hex << setfill('0') << setprecision(2) << rawData << dec << setfill(' ') << "\nQ.931 PDU:\n " << setprecision(2) << q931pdu); return TRUE; } PPER_Stream strm = q931pdu.GetIE(Q931::UserUserIE); if (!Decode(strm)) { PTRACE(1, "H225\tRead error: PER decode failure in Q.931 User-User Information Element," "\nRaw PDU:\n" << hex << setfill('0') << setprecision(2) << rawData << dec << setfill(' ') << "\nQ.931 PDU:\n " << setprecision(2) << q931pdu << "\nPartial PDU:\n " << setprecision(2) << *this); m_h323_uu_pdu.m_h323_message_body.SetTag(H225_H323_UU_PDU_h323_message_body::e_empty); return TRUE; } H323TraceDumpPDU("H225", FALSE, rawData, *this, m_h323_uu_pdu.m_h323_message_body, 0, transport.GetLocalAddress(), transport.GetRemoteAddress()); return TRUE; } PBoolean H323SignalPDU::Write(H323Transport & transport, H323Connection * connection) { if (!q931pdu.HasIE(Q931::UserUserIE) && m_h323_uu_pdu.m_h323_message_body.IsValid()) BuildQ931(); PBYTEArray rawData; if (!q931pdu.Encode(rawData)) return FALSE; #ifndef DISABLE_CALLAUTH if (connection != NULL) { int tag = m_h323_uu_pdu.m_h323_message_body.GetTag(); connection->OnAuthenticationFinalise(tag,rawData); } #endif H323TraceDumpPDU("H225", TRUE, rawData, *this, m_h323_uu_pdu.m_h323_message_body, 0, transport.GetLocalAddress(), transport.GetRemoteAddress()); if (transport.WritePDU(rawData)) return TRUE; PTRACE(1, "H225\tWrite PDU failed (" << transport.GetErrorNumber(PChannel::LastWriteError) << "): " << transport.GetErrorText(PChannel::LastWriteError)); return FALSE; } PString H323SignalPDU::GetSourceURL() const { PString url = PString(); if (m_h323_uu_pdu.m_h323_message_body.GetTag() == H225_H323_UU_PDU_h323_message_body::e_setup) { const H225_Setup_UUIE & setup = m_h323_uu_pdu.m_h323_message_body; if (setup.HasOptionalField(H225_Setup_UUIE::e_sourceCallSignalAddress)) { const H225_ArrayOf_AliasAddress & aliases = setup.e_sourceCallSignalAddress; if (aliases.GetSize() > 0) { for (PINDEX i = 0; i < aliases.GetSize(); i++) { switch (aliases[i].GetTag()) { case H225_AliasAddress::e_url_ID : case H225_AliasAddress::e_email_ID: url = H323GetAliasAddressString(aliases[i]); default: break; } } } } } return url; } PStringArray H323SignalPDU::GetSourceAliasNames() const { PStringArray srcAliases; if (m_h323_uu_pdu.m_h323_message_body.GetTag() == H225_H323_UU_PDU_h323_message_body::e_setup) { const H225_Setup_UUIE & setup = m_h323_uu_pdu.m_h323_message_body; if (setup.m_sourceAddress.GetSize() > 0) { for (PINDEX i = 0; i < setup.m_sourceAddress.GetSize(); i++) { PString alias = H323GetAliasAddressString(setup.m_sourceAddress[i]); srcAliases.AppendString(alias); } } } return srcAliases; } PString H323SignalPDU::GetSourceAliases(const H323Transport * transport) const { PString remoteHostName; if (transport != NULL) remoteHostName = transport->GetRemoteAddress().GetHostName(); PString displayName = GetQ931().GetDisplayName(); PStringStream aliases; if (displayName != remoteHostName) aliases << displayName; if (m_h323_uu_pdu.m_h323_message_body.GetTag() == H225_H323_UU_PDU_h323_message_body::e_setup) { const H225_Setup_UUIE & setup = m_h323_uu_pdu.m_h323_message_body; if (remoteHostName.IsEmpty() && setup.HasOptionalField(H225_Setup_UUIE::e_sourceCallSignalAddress)) { H323TransportAddress remoteAddress(setup.m_sourceCallSignalAddress); remoteHostName = remoteAddress.GetHostName(); } if (setup.m_sourceAddress.GetSize() > 0) { PBoolean needParen = !aliases.IsEmpty(); PBoolean needComma = FALSE; for (PINDEX i = 0; i < setup.m_sourceAddress.GetSize(); i++) { PString alias = H323GetAliasAddressString(setup.m_sourceAddress[i]); if (alias != displayName && alias != remoteHostName) { if (needComma) aliases << ", "; else if (needParen) aliases << " ("; aliases << alias; needComma = TRUE; } } if (needParen && needComma) aliases << ')'; } } if (aliases.IsEmpty()) return remoteHostName; aliases << " [" << remoteHostName << ']'; aliases.MakeMinimumSize(); return aliases; } PString H323SignalPDU::GetDestinationAlias(PBoolean firstAliasOnly) const { PStringStream aliases; PString number; if (GetQ931().GetCalledPartyNumber(number)) { if (firstAliasOnly) return number; aliases << number; } if (m_h323_uu_pdu.m_h323_message_body.GetTag() == H225_H323_UU_PDU_h323_message_body::e_setup) { const H225_Setup_UUIE & setup = m_h323_uu_pdu.m_h323_message_body; if (setup.m_destinationAddress.GetSize() > 0) { if (firstAliasOnly) return H323GetAliasAddressString(setup.m_destinationAddress[0]); for (PINDEX i = 0; i < setup.m_destinationAddress.GetSize(); i++) { if (!aliases.IsEmpty()) aliases << '\t'; aliases << H323GetAliasAddressString(setup.m_destinationAddress[i]); } } if (setup.HasOptionalField(H225_Setup_UUIE::e_destCallSignalAddress)) { if (!aliases.IsEmpty()) aliases << '\t'; aliases << H323TransportAddress(setup.m_destCallSignalAddress); } } aliases.MakeMinimumSize(); return aliases; } PBoolean H323SignalPDU::GetSourceE164(PString & number) const { if (GetQ931().GetCallingPartyNumber(number)) return TRUE; if (m_h323_uu_pdu.m_h323_message_body.GetTag() != H225_H323_UU_PDU_h323_message_body::e_setup) return FALSE; const H225_Setup_UUIE & setup = m_h323_uu_pdu.m_h323_message_body; if (!setup.HasOptionalField(H225_Setup_UUIE::e_sourceAddress)) return FALSE; PINDEX i; for (i = 0; i < setup.m_sourceAddress.GetSize(); i++) { if (setup.m_sourceAddress[i].GetTag() == H225_AliasAddress::e_dialedDigits) { number = (PASN_IA5String &)setup.m_sourceAddress[i]; return TRUE; } } for (i = 0; i < setup.m_sourceAddress.GetSize(); i++) { PString str = H323GetAliasAddressString(setup.m_sourceAddress[i]); if (IsE164(str)) { number = str; return TRUE; } } return FALSE; } PBoolean H323SignalPDU::GetDestinationE164(PString & number) const { if (GetQ931().GetCalledPartyNumber(number)) return TRUE; if (m_h323_uu_pdu.m_h323_message_body.GetTag() != H225_H323_UU_PDU_h323_message_body::e_setup) return FALSE; const H225_Setup_UUIE & setup = m_h323_uu_pdu.m_h323_message_body; if (!setup.HasOptionalField(H225_Setup_UUIE::e_destinationAddress)) return FALSE; PINDEX i; for (i = 0; i < setup.m_destinationAddress.GetSize(); i++) { if (setup.m_destinationAddress[i].GetTag() == H225_AliasAddress::e_dialedDigits) { number = (PASN_IA5String &)setup.m_destinationAddress[i]; return TRUE; } } for (i = 0; i < setup.m_destinationAddress.GetSize(); i++) { PString str = H323GetAliasAddressString(setup.m_destinationAddress[i]); if (IsE164(str)) { number = str; return TRUE; } } return FALSE; } unsigned H323SignalPDU::GetDistinctiveRing() const { Q931::SignalInfo sig = GetQ931().GetSignalInfo(); if (sig < Q931::SignalAlertingPattern0 || sig > Q931::SignalAlertingPattern7) return 0; return sig - Q931::SignalAlertingPattern0; } void H323SignalPDU::SetQ931Fields(const H323Connection & connection, PBoolean insertPartyNumbers, unsigned plan, unsigned type, int presentation, int screening) { PINDEX i; const PStringList & aliases = connection.GetLocalAliasNames(); PString number; PString localName = connection.GetLocalPartyName(); PString displayName; if (IsE164(localName)) { number = localName; for (i = 0; i < aliases.GetSize(); i++) { if (!IsE164(aliases[i])) { displayName = aliases[i]; break; } } } else { if (!localName) displayName = localName; for (i = 0; i < aliases.GetSize(); i++) { if (IsE164(aliases[i])) { number = aliases[i]; break; } } } if (!connection.GetDisplayName().IsEmpty()) displayName = connection.GetDisplayName(); if (displayName.IsEmpty()) displayName = number; q931pdu.SetDisplayName(displayName); if (insertPartyNumbers) { PString otherNumber = connection.GetRemotePartyNumber(); if (otherNumber.IsEmpty()) { PString otherName = connection.GetRemotePartyName(); if (IsE164(otherName)) otherNumber = otherName; } if (connection.HadAnsweredCall()) { if (!number) q931pdu.SetCalledPartyNumber(number, plan, type); if (!otherNumber) q931pdu.SetCallingPartyNumber(otherNumber, plan, type, presentation, screening); } else { if (!number) q931pdu.SetCallingPartyNumber(number, plan, type, presentation, screening); if (!otherNumber) q931pdu.SetCalledPartyNumber(otherNumber, plan, type); } } unsigned ring = connection.GetDistinctiveRing(); if (ring != 0) q931pdu.SetSignalInfo((Q931::SignalInfo)(ring + Q931::SignalAlertingPattern0)); } ///////////////////////////////////////////////////////////////////////////// H245_RequestMessage & H323ControlPDU::Build(H245_RequestMessage::Choices request) { SetTag(e_request); H245_RequestMessage & msg = *this; msg.SetTag(request); return msg; } H245_ResponseMessage & H323ControlPDU::Build(H245_ResponseMessage::Choices response) { SetTag(e_response); H245_ResponseMessage & resp = *this; resp.SetTag(response); return resp; } H245_CommandMessage & H323ControlPDU::Build(H245_CommandMessage::Choices command) { SetTag(e_command); H245_CommandMessage & cmd = *this; cmd.SetTag(command); return cmd; } H245_IndicationMessage & H323ControlPDU::Build(H245_IndicationMessage::Choices indication) { SetTag(e_indication); H245_IndicationMessage & ind = *this; ind.SetTag(indication); return ind; } H245_MasterSlaveDetermination & H323ControlPDU::BuildMasterSlaveDetermination(unsigned terminalType, unsigned statusDeterminationNumber) { H245_MasterSlaveDetermination & msd = Build(H245_RequestMessage::e_masterSlaveDetermination); msd.m_terminalType = terminalType; msd.m_statusDeterminationNumber = statusDeterminationNumber; return msd; } H245_MasterSlaveDeterminationAck & H323ControlPDU::BuildMasterSlaveDeterminationAck(PBoolean isMaster) { H245_MasterSlaveDeterminationAck & msda = Build(H245_ResponseMessage::e_masterSlaveDeterminationAck); msda.m_decision.SetTag(isMaster ? H245_MasterSlaveDeterminationAck_decision::e_slave : H245_MasterSlaveDeterminationAck_decision::e_master); return msda; } H245_MasterSlaveDeterminationReject & H323ControlPDU::BuildMasterSlaveDeterminationReject(unsigned cause) { H245_MasterSlaveDeterminationReject & msdr = Build(H245_ResponseMessage::e_masterSlaveDeterminationReject); msdr.m_cause.SetTag(cause); return msdr; } H245_TerminalCapabilitySet & H323ControlPDU::BuildTerminalCapabilitySet(const H323Connection & connection, unsigned sequenceNumber, PBoolean empty) { H245_TerminalCapabilitySet & cap = Build(H245_RequestMessage::e_terminalCapabilitySet); cap.m_sequenceNumber = sequenceNumber; cap.m_protocolIdentifier.SetValue(H245_ProtocolID, PARRAYSIZE(H245_ProtocolID)); if (empty) return cap; cap.IncludeOptionalField(H245_TerminalCapabilitySet::e_multiplexCapability); cap.m_multiplexCapability.SetTag(H245_MultiplexCapability::e_h2250Capability); H245_H2250Capability & h225_0 = cap.m_multiplexCapability; h225_0.m_maximumAudioDelayJitter = connection.GetMaxAudioJitterDelay(); h225_0.m_receiveMultipointCapability.m_mediaDistributionCapability.SetSize(1); h225_0.m_transmitMultipointCapability.m_mediaDistributionCapability.SetSize(1); h225_0.m_receiveAndTransmitMultipointCapability.m_mediaDistributionCapability.SetSize(1); h225_0.m_t120DynamicPortCapability = TRUE; // Set the table of capabilities connection.GetLocalCapabilities().BuildPDU(connection, cap); return cap; } H245_TerminalCapabilitySetAck & H323ControlPDU::BuildTerminalCapabilitySetAck(unsigned sequenceNumber) { H245_TerminalCapabilitySetAck & cap = Build(H245_ResponseMessage::e_terminalCapabilitySetAck); cap.m_sequenceNumber = sequenceNumber; return cap; } H245_TerminalCapabilitySetReject & H323ControlPDU::BuildTerminalCapabilitySetReject(unsigned sequenceNumber, unsigned cause) { H245_TerminalCapabilitySetReject & cap = Build(H245_ResponseMessage::e_terminalCapabilitySetReject); cap.m_sequenceNumber = sequenceNumber; cap.m_cause.SetTag(cause); return cap; } H245_OpenLogicalChannel & H323ControlPDU::BuildOpenLogicalChannel(unsigned forwardLogicalChannelNumber) { H245_OpenLogicalChannel & open = Build(H245_RequestMessage::e_openLogicalChannel); open.m_forwardLogicalChannelNumber = forwardLogicalChannelNumber; return open; } H245_RequestChannelClose & H323ControlPDU::BuildRequestChannelClose(unsigned channelNumber, unsigned reason) { H245_RequestChannelClose & rcc = Build(H245_RequestMessage::e_requestChannelClose); rcc.m_forwardLogicalChannelNumber = channelNumber; rcc.IncludeOptionalField(H245_RequestChannelClose::e_reason); rcc.m_reason.SetTag(reason); return rcc; } H245_CloseLogicalChannel & H323ControlPDU::BuildCloseLogicalChannel(unsigned channelNumber) { H245_CloseLogicalChannel & clc = Build(H245_RequestMessage::e_closeLogicalChannel); clc.m_forwardLogicalChannelNumber = channelNumber; clc.m_source.SetTag(H245_CloseLogicalChannel_source::e_lcse); return clc; } H245_OpenLogicalChannelAck & H323ControlPDU::BuildOpenLogicalChannelAck(unsigned channelNumber) { H245_OpenLogicalChannelAck & ack = Build(H245_ResponseMessage::e_openLogicalChannelAck); ack.m_forwardLogicalChannelNumber = channelNumber; return ack; } H245_OpenLogicalChannelReject & H323ControlPDU::BuildOpenLogicalChannelReject(unsigned channelNumber, unsigned cause) { H245_OpenLogicalChannelReject & reject = Build(H245_ResponseMessage::e_openLogicalChannelReject); reject.m_forwardLogicalChannelNumber = channelNumber; reject.m_cause.SetTag(cause); return reject; } H245_OpenLogicalChannelConfirm & H323ControlPDU::BuildOpenLogicalChannelConfirm(unsigned channelNumber) { H245_OpenLogicalChannelConfirm & chan = Build(H245_IndicationMessage::e_openLogicalChannelConfirm); chan.m_forwardLogicalChannelNumber = channelNumber; return chan; } H245_IndicationMessage & H323ControlPDU::BuildLogicalChannelActive(unsigned channelNumber) { H245_IndicationMessage & lca = Build(H245_IndicationMessage::e_miscellaneousIndication); H245_MiscellaneousIndication & miscIndication = lca; miscIndication.m_logicalChannelNumber = channelNumber; miscIndication.m_type.SetTag(H245_MiscellaneousIndication_type::e_logicalChannelActive); return lca; } H245_CloseLogicalChannelAck & H323ControlPDU::BuildCloseLogicalChannelAck(unsigned channelNumber) { H245_CloseLogicalChannelAck & chan = Build(H245_ResponseMessage::e_closeLogicalChannelAck); chan.m_forwardLogicalChannelNumber = channelNumber; return chan; } H245_RequestChannelCloseAck & H323ControlPDU::BuildRequestChannelCloseAck(unsigned channelNumber) { H245_RequestChannelCloseAck & rcca = Build(H245_ResponseMessage::e_requestChannelCloseAck); rcca.m_forwardLogicalChannelNumber = channelNumber; return rcca; } H245_RequestChannelCloseReject & H323ControlPDU::BuildRequestChannelCloseReject(unsigned channelNumber) { H245_RequestChannelCloseReject & rccr = Build(H245_ResponseMessage::e_requestChannelCloseReject); rccr.m_forwardLogicalChannelNumber = channelNumber; return rccr; } H245_RequestChannelCloseRelease & H323ControlPDU::BuildRequestChannelCloseRelease(unsigned channelNumber) { H245_RequestChannelCloseRelease & rccr = Build(H245_IndicationMessage::e_requestChannelCloseRelease); rccr.m_forwardLogicalChannelNumber = channelNumber; return rccr; } H245_RequestMode & H323ControlPDU::BuildRequestMode(unsigned sequenceNumber) { H245_RequestMode & rm = Build(H245_RequestMessage::e_requestMode); rm.m_sequenceNumber = sequenceNumber; return rm; } H245_RequestModeAck & H323ControlPDU::BuildRequestModeAck(unsigned sequenceNumber, unsigned response) { H245_RequestModeAck & ack = Build(H245_ResponseMessage::e_requestModeAck); ack.m_sequenceNumber = sequenceNumber; ack.m_response.SetTag(response); return ack; } H245_RequestModeReject & H323ControlPDU::BuildRequestModeReject(unsigned sequenceNumber, unsigned cause) { H245_RequestModeReject & reject = Build(H245_ResponseMessage::e_requestModeReject); reject.m_sequenceNumber = sequenceNumber; reject.m_cause.SetTag(cause); return reject; } H245_RoundTripDelayRequest & H323ControlPDU::BuildRoundTripDelayRequest(unsigned sequenceNumber) { H245_RoundTripDelayRequest & req = Build(H245_RequestMessage::e_roundTripDelayRequest); req.m_sequenceNumber = sequenceNumber; return req; } H245_RoundTripDelayResponse & H323ControlPDU::BuildRoundTripDelayResponse(unsigned sequenceNumber) { H245_RoundTripDelayResponse & resp = Build(H245_ResponseMessage::e_roundTripDelayResponse); resp.m_sequenceNumber = sequenceNumber; return resp; } H245_UserInputIndication & H323ControlPDU::BuildUserInputIndication(const PString & value) { H245_UserInputIndication & ind = Build(H245_IndicationMessage::e_userInput); ind.SetTag(H245_UserInputIndication::e_alphanumeric); (PASN_GeneralString &)ind = value; return ind; } H245_UserInputIndication & H323ControlPDU::BuildUserInputIndication(char tone, unsigned duration, unsigned logicalChannel, unsigned rtpTimestamp) { H245_UserInputIndication & ind = Build(H245_IndicationMessage::e_userInput); if (tone != ' ') { ind.SetTag(H245_UserInputIndication::e_signal); H245_UserInputIndication_signal & sig = ind; sig.m_signalType.SetValue(tone); if (duration > 0) { sig.IncludeOptionalField(H245_UserInputIndication_signal::e_duration); sig.m_duration = duration; } if (logicalChannel > 0) { sig.IncludeOptionalField(H245_UserInputIndication_signal::e_rtp); sig.m_rtp.m_logicalChannelNumber = logicalChannel; sig.m_rtp.m_timestamp = rtpTimestamp; } } else { ind.SetTag(H245_UserInputIndication::e_signalUpdate); H245_UserInputIndication_signalUpdate & sig = ind; sig.m_duration = duration; if (logicalChannel > 0) { sig.IncludeOptionalField(H245_UserInputIndication_signalUpdate::e_rtp); sig.m_rtp.m_logicalChannelNumber = logicalChannel; } } return ind; } H245_FunctionNotUnderstood & H323ControlPDU::BuildFunctionNotUnderstood(const H323ControlPDU & pdu) { H245_FunctionNotUnderstood & fnu = Build(H245_IndicationMessage::e_functionNotUnderstood); switch (pdu.GetTag()) { case H245_MultimediaSystemControlMessage::e_request : fnu.SetTag(H245_FunctionNotUnderstood::e_request); (H245_RequestMessage &)fnu = (const H245_RequestMessage &)pdu; break; case H245_MultimediaSystemControlMessage::e_response : fnu.SetTag(H245_FunctionNotUnderstood::e_response); (H245_ResponseMessage &)fnu = (const H245_ResponseMessage &)pdu; break; case H245_MultimediaSystemControlMessage::e_command : fnu.SetTag(H245_FunctionNotUnderstood::e_command); (H245_CommandMessage &)fnu = (const H245_CommandMessage &)pdu; break; } return fnu; } H245_EndSessionCommand & H323ControlPDU::BuildEndSessionCommand(unsigned reason) { H245_EndSessionCommand & end = Build(H245_CommandMessage::e_endSessionCommand); end.SetTag(reason); return end; } ///////////////////////////////////////////////////////////////////////////// H323RasPDU::H323RasPDU() { } H323RasPDU::H323RasPDU(const H235Authenticators & auth) : H323TransactionPDU(auth) { } PObject * H323RasPDU::Clone() const { return new H323RasPDU(*this); } PASN_Object & H323RasPDU::GetPDU() { return *this; } PASN_Choice & H323RasPDU::GetChoice() { return *this; } const PASN_Object & H323RasPDU::GetPDU() const { return *this; } const PASN_Choice & H323RasPDU::GetChoice() const { return *this; } unsigned H323RasPDU::GetSequenceNumber() const { switch (GetTag()) { case H225_RasMessage::e_gatekeeperRequest : return ((const H225_GatekeeperRequest &)*this).m_requestSeqNum; case H225_RasMessage::e_gatekeeperConfirm : return ((const H225_GatekeeperConfirm &)*this).m_requestSeqNum; case H225_RasMessage::e_gatekeeperReject : return ((const H225_GatekeeperReject &)*this).m_requestSeqNum; case H225_RasMessage::e_registrationRequest : return ((const H225_RegistrationRequest &)*this).m_requestSeqNum; case H225_RasMessage::e_registrationConfirm : return ((const H225_RegistrationConfirm &)*this).m_requestSeqNum; case H225_RasMessage::e_registrationReject : return ((const H225_RegistrationReject &)*this).m_requestSeqNum; case H225_RasMessage::e_unregistrationRequest : return ((const H225_UnregistrationRequest &)*this).m_requestSeqNum; case H225_RasMessage::e_unregistrationConfirm : return ((const H225_UnregistrationConfirm &)*this).m_requestSeqNum; case H225_RasMessage::e_unregistrationReject : return ((const H225_UnregistrationReject &)*this).m_requestSeqNum; case H225_RasMessage::e_admissionRequest : return ((const H225_AdmissionRequest &)*this).m_requestSeqNum; case H225_RasMessage::e_admissionConfirm : return ((const H225_AdmissionConfirm &)*this).m_requestSeqNum; case H225_RasMessage::e_admissionReject : return ((const H225_AdmissionReject &)*this).m_requestSeqNum; case H225_RasMessage::e_bandwidthRequest : return ((const H225_BandwidthRequest &)*this).m_requestSeqNum; case H225_RasMessage::e_bandwidthConfirm : return ((const H225_BandwidthConfirm &)*this).m_requestSeqNum; case H225_RasMessage::e_bandwidthReject : return ((const H225_BandwidthReject &)*this).m_requestSeqNum; case H225_RasMessage::e_disengageRequest : return ((const H225_DisengageRequest &)*this).m_requestSeqNum; case H225_RasMessage::e_disengageConfirm : return ((const H225_DisengageConfirm &)*this).m_requestSeqNum; case H225_RasMessage::e_disengageReject : return ((const H225_DisengageReject &)*this).m_requestSeqNum; case H225_RasMessage::e_locationRequest : return ((const H225_LocationRequest &)*this).m_requestSeqNum; case H225_RasMessage::e_locationConfirm : return ((const H225_LocationConfirm &)*this).m_requestSeqNum; case H225_RasMessage::e_locationReject : return ((const H225_LocationReject &)*this).m_requestSeqNum; case H225_RasMessage::e_infoRequest : return ((const H225_InfoRequest &)*this).m_requestSeqNum; case H225_RasMessage::e_infoRequestResponse : return ((const H225_InfoRequestResponse &)*this).m_requestSeqNum; case H225_RasMessage::e_nonStandardMessage : return ((const H225_NonStandardMessage &)*this).m_requestSeqNum; case H225_RasMessage::e_unknownMessageResponse : return ((const H225_UnknownMessageResponse &)*this).m_requestSeqNum; case H225_RasMessage::e_requestInProgress : return ((const H225_RequestInProgress &)*this).m_requestSeqNum; case H225_RasMessage::e_resourcesAvailableIndicate : return ((const H225_ResourcesAvailableIndicate &)*this).m_requestSeqNum; case H225_RasMessage::e_resourcesAvailableConfirm : return ((const H225_ResourcesAvailableConfirm &)*this).m_requestSeqNum; case H225_RasMessage::e_infoRequestAck : return ((const H225_InfoRequestAck &)*this).m_requestSeqNum; case H225_RasMessage::e_infoRequestNak : return ((const H225_InfoRequestNak &)*this).m_requestSeqNum; case H225_RasMessage::e_serviceControlIndication : return ((const H225_ServiceControlIndication &)*this).m_requestSeqNum; case H225_RasMessage::e_serviceControlResponse : return ((const H225_ServiceControlResponse &)*this).m_requestSeqNum; default : return 0; } } unsigned H323RasPDU::GetRequestInProgressDelay() const { if (GetTag() != H225_RasMessage::e_requestInProgress) return 0; return ((const H225_RequestInProgress &)*this).m_delay; } #if PTRACING const char * H323RasPDU::GetProtocolName() const { return "H225RAS"; } #endif H323TransactionPDU * H323RasPDU::ClonePDU() const { return new H323RasPDU(*this); } void H323RasPDU::DeletePDU() { delete this; } H225_GatekeeperRequest & H323RasPDU::BuildGatekeeperRequest(unsigned seqNum) { SetTag(e_gatekeeperRequest); H225_GatekeeperRequest & grq = *this; grq.m_requestSeqNum = seqNum; grq.m_protocolIdentifier.SetValue(H225_ProtocolID, PARRAYSIZE(H225_ProtocolID)); return grq; } H225_GatekeeperConfirm & H323RasPDU::BuildGatekeeperConfirm(unsigned seqNum) { SetTag(e_gatekeeperConfirm); H225_GatekeeperConfirm & gcf = *this; gcf.m_requestSeqNum = seqNum; gcf.m_protocolIdentifier.SetValue(H225_ProtocolID, PARRAYSIZE(H225_ProtocolID)); return gcf; } H225_GatekeeperReject & H323RasPDU::BuildGatekeeperReject(unsigned seqNum, unsigned reason) { SetTag(e_gatekeeperReject); H225_GatekeeperReject & grj = *this; grj.m_requestSeqNum = seqNum; grj.m_protocolIdentifier.SetValue(H225_ProtocolID, PARRAYSIZE(H225_ProtocolID)); grj.m_rejectReason.SetTag(reason); return grj; } H225_RegistrationRequest & H323RasPDU::BuildRegistrationRequest(unsigned seqNum) { SetTag(e_registrationRequest); H225_RegistrationRequest & rrq = *this; rrq.m_requestSeqNum = seqNum; rrq.m_protocolIdentifier.SetValue(H225_ProtocolID, PARRAYSIZE(H225_ProtocolID)); return rrq; } H225_RegistrationConfirm & H323RasPDU::BuildRegistrationConfirm(unsigned seqNum) { SetTag(e_registrationConfirm); H225_RegistrationConfirm & rcf = *this; rcf.m_requestSeqNum = seqNum; rcf.m_protocolIdentifier.SetValue(H225_ProtocolID, PARRAYSIZE(H225_ProtocolID)); return rcf; } H225_RegistrationReject & H323RasPDU::BuildRegistrationReject(unsigned seqNum, unsigned reason) { SetTag(e_registrationReject); H225_RegistrationReject & rrj = *this; rrj.m_requestSeqNum = seqNum; rrj.m_protocolIdentifier.SetValue(H225_ProtocolID, PARRAYSIZE(H225_ProtocolID)); rrj.m_rejectReason.SetTag(reason); return rrj; } H225_UnregistrationRequest & H323RasPDU::BuildUnregistrationRequest(unsigned seqNum) { SetTag(e_unregistrationRequest); H225_UnregistrationRequest & urq = *this; urq.m_requestSeqNum = seqNum; return urq; } H225_UnregistrationConfirm & H323RasPDU::BuildUnregistrationConfirm(unsigned seqNum) { SetTag(e_unregistrationConfirm); H225_UnregistrationConfirm & ucf = *this; ucf.m_requestSeqNum = seqNum; return ucf; } H225_UnregistrationReject & H323RasPDU::BuildUnregistrationReject(unsigned seqNum, unsigned reason) { SetTag(e_unregistrationReject); H225_UnregistrationReject & urj = *this; urj.m_requestSeqNum = seqNum; urj.m_rejectReason.SetTag(reason); return urj; } H225_LocationRequest & H323RasPDU::BuildLocationRequest(unsigned seqNum) { SetTag(e_locationRequest); H225_LocationRequest & lrq = *this; lrq.m_requestSeqNum = seqNum; return lrq; } H225_LocationConfirm & H323RasPDU::BuildLocationConfirm(unsigned seqNum) { SetTag(e_locationConfirm); H225_LocationConfirm & lcf = *this; lcf.m_requestSeqNum = seqNum; return lcf; } H225_LocationReject & H323RasPDU::BuildLocationReject(unsigned seqNum, unsigned reason) { SetTag(e_locationReject); H225_LocationReject & lrj = *this; lrj.m_requestSeqNum = seqNum; lrj.m_rejectReason.SetTag(reason); return lrj; } H225_AdmissionRequest & H323RasPDU::BuildAdmissionRequest(unsigned seqNum) { SetTag(e_admissionRequest); H225_AdmissionRequest & arq = *this; arq.m_requestSeqNum = seqNum; return arq; } H225_AdmissionConfirm & H323RasPDU::BuildAdmissionConfirm(unsigned seqNum) { SetTag(e_admissionConfirm); H225_AdmissionConfirm & acf = *this; acf.m_requestSeqNum = seqNum; return acf; } H225_AdmissionReject & H323RasPDU::BuildAdmissionReject(unsigned seqNum, unsigned reason) { SetTag(e_admissionReject); H225_AdmissionReject & arj = *this; arj.m_requestSeqNum = seqNum; arj.m_rejectReason.SetTag(reason); return arj; } H225_DisengageRequest & H323RasPDU::BuildDisengageRequest(unsigned seqNum) { SetTag(e_disengageRequest); H225_DisengageRequest & drq = *this; drq.m_requestSeqNum = seqNum; return drq; } H225_DisengageConfirm & H323RasPDU::BuildDisengageConfirm(unsigned seqNum) { SetTag(e_disengageConfirm); H225_DisengageConfirm & dcf = *this; dcf.m_requestSeqNum = seqNum; return dcf; } H225_DisengageReject & H323RasPDU::BuildDisengageReject(unsigned seqNum, unsigned reason) { SetTag(e_disengageReject); H225_DisengageReject & drj = *this; drj.m_requestSeqNum = seqNum; drj.m_rejectReason.SetTag(reason); return drj; } H225_BandwidthRequest & H323RasPDU::BuildBandwidthRequest(unsigned seqNum) { SetTag(e_bandwidthRequest); H225_BandwidthRequest & brq = *this; brq.m_requestSeqNum = seqNum; return brq; } H225_BandwidthConfirm & H323RasPDU::BuildBandwidthConfirm(unsigned seqNum, unsigned bandWidth) { SetTag(e_bandwidthConfirm); H225_BandwidthConfirm & bcf = *this; bcf.m_requestSeqNum = seqNum; bcf.m_bandWidth = bandWidth; return bcf; } H225_BandwidthReject & H323RasPDU::BuildBandwidthReject(unsigned seqNum, unsigned reason) { SetTag(e_bandwidthReject); H225_BandwidthReject & brj = *this; brj.m_requestSeqNum = seqNum; brj.m_rejectReason.SetTag(reason); return brj; } H225_InfoRequest & H323RasPDU::BuildInfoRequest(unsigned seqNum, unsigned callRef, const OpalGloballyUniqueID * id) { SetTag(e_infoRequest); H225_InfoRequest & irq = *this; irq.m_requestSeqNum = seqNum; irq.m_callReferenceValue = callRef; if (callRef != 0 && id != NULL) irq.m_callIdentifier.m_guid = *id; return irq; } H225_InfoRequestResponse & H323RasPDU::BuildInfoRequestResponse(unsigned seqNum) { SetTag(e_infoRequestResponse); H225_InfoRequestResponse & irr = *this; irr.m_requestSeqNum = seqNum; return irr; } H225_InfoRequestAck & H323RasPDU::BuildInfoRequestAck(unsigned seqNum) { SetTag(e_infoRequestAck); H225_InfoRequestAck & iack = *this; iack.m_requestSeqNum = seqNum; return iack; } H225_InfoRequestNak & H323RasPDU::BuildInfoRequestNak(unsigned seqNum, unsigned reason) { SetTag(e_infoRequestNak); H225_InfoRequestNak & inak = *this; inak.m_requestSeqNum = seqNum; inak.m_nakReason.SetTag(reason); return inak; } H225_UnknownMessageResponse & H323RasPDU::BuildUnknownMessageResponse(unsigned seqNum) { SetTag(e_unknownMessageResponse); H225_UnknownMessageResponse & umr = *this; umr.m_requestSeqNum = seqNum; return umr; } H225_RequestInProgress & H323RasPDU::BuildRequestInProgress(unsigned seqNum, unsigned delay) { SetTag(e_requestInProgress); H225_RequestInProgress & rip = *this; rip.m_requestSeqNum = seqNum; rip.m_delay = delay; return rip; } H225_ServiceControlIndication & H323RasPDU::BuildServiceControlIndication(unsigned seqNum, const OpalGloballyUniqueID * id) { SetTag(e_serviceControlIndication); H225_ServiceControlIndication & sci = *this; sci.m_requestSeqNum = seqNum; if (id != NULL && !id->IsNULL()) { sci.IncludeOptionalField(H225_ServiceControlIndication::e_callSpecific); sci.m_callSpecific.m_callIdentifier.m_guid = *id; } return sci; } H225_ServiceControlResponse & H323RasPDU::BuildServiceControlResponse(unsigned seqNum) { SetTag(e_serviceControlResponse); H225_ServiceControlResponse & scr = *this; scr.m_requestSeqNum = seqNum; return scr; } #ifdef _MSC_VER #pragma warning(default : 4100) #endif ///////////////////////////////////////////////////////////////////////////// h323plus/src/h225ras.cxx0000644000175000017500000015224211530641771013623 0ustar markmark/* * H225_RAS.cxx * * H.225 RAS protocol handler * * Open H323 Library * * Copyright (c) 2001 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * iFace In, http://www.iface.com * * Contributor(s): ______________________________________. * * $Log: h225ras.cxx,v $ * Revision 1.8 2011/02/22 05:04:57 shorne * Enable selectively removing capabilities based on the features PDU's advertising feature. H.460.9 now advertises in ARQ when receiving call. * * Revision 1.7 2011/02/20 06:55:46 shorne * Fixes for H.460 to allow better selection of mesasage location in PDU. Features or Generic Data. Corrected H.460.9 * * Revision 1.6 2009/11/29 23:31:13 shorne * BUG FIX : completely disable H.460 support if remote does not support it. * * Revision 1.5 2009/02/22 02:02:37 shorne * Added ability to enable SCI/SCR without needing H248 support * * Revision 1.4 2008/05/23 11:21:29 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.3 2008/02/04 00:15:54 shorne * BUGFIX: Features being sent on GRQ * * Revision 1.2 2007/11/10 23:07:50 willamowius * fix --disable-h460 * * Revision 1.1 2007/08/06 20:51:05 shorne * First commit of h323plus * * Revision 1.60.2.3 2007/07/23 08:17:07 shorne * Expanded H.460 Support * * Revision 1.60.2.2 2007/01/30 17:28:12 shorne * Fix for compiling on linux * * Revision 1.60.2.1 2006/12/23 19:08:02 shorne * Plugin video codecs & sundry * * Revision 1.60 2006/06/23 20:19:39 shorne * More H460 support * * Revision 1.59 2006/05/30 11:14:56 hfriederich * Switch from DISABLE_H460 to H323_H460 * * Revision 1.58 2005/01/03 14:03:21 csoutheren * Added new configure options and ability to disable/enable modules * * Revision 1.57 2005/01/03 06:25:55 csoutheren * Added extensive support for disabling code modules at compile time * * Revision 1.56 2004/09/07 22:50:55 rjongbloed * Changed usage of template function as MSVC6 will not compile it. * * Revision 1.55 2004/09/03 01:06:10 csoutheren * Added initial hooks for H.460 GEF * Thanks to Simon Horne and ISVO (Asia) Pte Ltd. for this contribution * * Revision 1.54 2003/04/09 03:08:10 robertj * Fixed race condition in shutting down transactor (pure virtual call) * * Revision 1.53 2003/04/01 01:05:17 robertj * Split service control handlers from H.225 RAS header. * * Revision 1.52 2003/03/26 00:46:28 robertj * Had another go at making H323Transactor being able to be created * without having a listener running. * * Revision 1.51 2003/03/21 05:25:47 robertj * Added setting of remote port in UDP transport constructor. * * Revision 1.50 2003/03/20 01:51:11 robertj * More abstraction of H.225 RAS and H.501 protocols transaction handling. * * Revision 1.49 2003/03/01 00:21:01 craigs * Fixed spelling mistake! * * Revision 1.48 2003/02/21 05:25:45 craigs * Abstracted out underlying transports for use with peerelements * * Revision 1.47 2003/02/10 04:18:55 robertj * Made RAS read loop more robust. * * Revision 1.46 2003/02/01 13:31:21 robertj * Changes to support CAT authentication in RAS. * * Revision 1.45 2002/12/18 06:24:52 robertj * Improved logging around the RAS poll function, on timeouts etc * * Revision 1.44 2002/12/13 02:52:19 robertj * Fixed failure to release mutex on call confirm/reject. * * Revision 1.43 2002/11/28 23:39:36 robertj * Fixed race condition for if RAS reply arrives very VERY quickly after * sending packet. Introduced in previous change. * * Revision 1.42 2002/11/28 04:41:48 robertj * Added support for RAS ServiceControlIndication command. * * Revision 1.41 2002/11/28 02:13:28 robertj * Fixed copy and paste errors. * * Revision 1.40 2002/11/28 02:10:26 robertj * Changed order of function so OnSendXXX(pdu) can change the security * credentials in descendant classes. * * Revision 1.39 2002/11/27 06:54:56 robertj * Added Service Control Session management as per Annex K/H.323 via RAS * only at this stage. * Added H.248 ASN and very primitive infrastructure for linking into the * Service Control Session management system. * Added basic infrastructure for Annex K/H.323 HTTP transport system. * Added Call Credit Service Control to display account balances. * * Revision 1.38 2002/11/21 22:26:20 robertj * Changed promiscuous mode to be three way. Fixes race condition in gkserver * which can cause crashes or more PDUs to be sent to the wrong place. * * Revision 1.37 2002/11/21 07:21:49 robertj * Improvements to alternate gatekeeper client code, thanks Kevin Bouchard * * Revision 1.36 2002/11/11 08:13:40 robertj * Fixed GNU warning * * Revision 1.35 2002/11/11 07:20:12 robertj * Minor clean up of API for doing RAS requests suing authentication. * * Revision 1.34 2002/11/10 08:10:43 robertj * Moved constants for "well known" ports to better place (OPAL change). * * Revision 1.33 2002/10/17 02:10:55 robertj * Backed out previous change for including PDU tag, doesn't work! * * Revision 1.32 2002/10/16 03:46:05 robertj * Added PDU tag to cache look up key. * * Revision 1.31 2002/10/09 05:38:50 robertj * Fixed correct mutexing of response cache buffer. * Fixed correct setting of remote address when cached response transmitted. * * Revision 1.30 2002/09/19 09:16:01 robertj * Fixed problem with making (and assuring with multi-threading) IRQ and DRQ * requests are sent to the correct endpoint address, thanks Martijn Roest. * * Revision 1.29 2002/08/29 06:58:37 robertj * Fixed (again) cached response age timeout adjusted to RIP time. * * Revision 1.28 2002/08/12 06:29:42 robertj * Fixed problem with cached responses being aged before the RIP time which * made retries by client appear as "new" requests when they were not. * * Revision 1.27 2002/08/12 05:35:48 robertj * Changes to the RAS subsystem to support ability to make requests to client * from gkserver without causing bottlenecks and race conditions. * * Revision 1.26 2002/08/05 10:03:47 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.25 2002/08/05 05:17:41 robertj * Fairly major modifications to support different authentication credentials * in ARQ to the logged in ones on RRQ. For both client and server. * Various other H.235 authentication bugs and anomalies fixed on the way. * * Revision 1.24 2002/07/29 11:36:08 robertj * Fixed race condition if RIP is followed very quickly by actual response. * * Revision 1.23 2002/07/16 04:18:38 robertj * Fixed incorrect check for GRQ in reject processing, thanks Thien Nguyen * * Revision 1.22 2002/06/28 03:34:28 robertj * Fixed issues with address translation on gatekeeper RAS channel. * * Revision 1.21 2002/06/24 00:11:21 robertj * Clarified error message during GRQ authentication. * * Revision 1.20 2002/06/12 03:50:25 robertj * Added PrintOn function for trace output of RAS channel. * * Revision 1.19 2002/05/29 00:03:19 robertj * Fixed unsolicited IRR support in gk client and server, * including support for IACK and INAK. * * Revision 1.18 2002/05/17 03:41:00 robertj * Fixed problems with H.235 authentication on RAS for server and client. * * Revision 1.17 2002/05/03 09:18:49 robertj * Added automatic retransmission of RAS responses to retried requests. * * Revision 1.16 2002/03/10 19:34:13 robertj * Added random starting point for sequence numbers, thanks Chris Purvis * * Revision 1.15 2002/01/29 02:38:31 robertj * Fixed nasty race condition when getting RIP, end up with wrong timeout. * Improved tracing (included sequence numbers) * * Revision 1.14 2002/01/24 01:02:04 robertj * Removed trace when authenticator not used, implied error when wasn't one. * * Revision 1.13 2001/10/09 12:03:30 robertj * Fixed uninitialised variable for H.235 authentication checking. * * Revision 1.12 2001/10/09 08:04:59 robertj * Fixed unregistration so still unregisters if gk goes offline, thanks Chris Purvis * * Revision 1.11 2001/09/18 10:36:57 robertj * Allowed multiple overlapping requests in RAS channel. * * Revision 1.10 2001/09/12 07:48:05 robertj * Fixed various problems with tracing. * * Revision 1.9 2001/09/12 03:12:38 robertj * Added ability to disable the checking of RAS responses against * security authenticators. * Fixed bug in having multiple authentications if have a retry. * * Revision 1.8 2001/08/10 11:03:52 robertj * Major changes to H.235 support in RAS to support server. * * Revision 1.7 2001/08/06 07:44:55 robertj * Fixed problems with building without SSL * * Revision 1.6 2001/08/06 03:18:38 robertj * Fission of h323.h to h323ep.h & h323con.h, h323.h now just includes files. * Improved access to H.235 secure RAS functionality. * Changes to H.323 secure RAS contexts to help use with gk server. * * Revision 1.5 2001/08/03 05:56:04 robertj * Fixed RAS read of UDP when get ICMP error for host unreachabe. * * Revision 1.4 2001/06/25 01:06:40 robertj * Fixed resolution of RAS timeout so not rounded down to second. * * Revision 1.3 2001/06/22 00:21:10 robertj * Fixed bug in H.225 RAS protocol with 16 versus 32 bit sequence numbers. * * Revision 1.2 2001/06/18 07:44:21 craigs * Made to compile with h225ras.cxx under Linux * * Revision 1.1 2001/06/18 06:23:50 robertj * Split raw H.225 RAS protocol out of gatekeeper client class. * */ #include #ifdef __GNUC__ #pragma implementation "h225ras.h" #endif #include "h323.h" #include "h225ras.h" #include "h323ep.h" #include "h323pdu.h" #include "h235auth.h" #ifdef H323_H460 #include "h460/h460.h" #endif #define new PNEW ///////////////////////////////////////////////////////////////////////////// H225_RAS::H225_RAS(H323EndPoint & ep, H323Transport * trans) : H323Transactor(ep, trans, DefaultRasUdpPort, DefaultRasUdpPort) { } H225_RAS::~H225_RAS() { StopChannel(); } void H225_RAS::PrintOn(ostream & strm) const { if (gatekeeperIdentifier.IsEmpty()) strm << "H225-RAS@"; else strm << gatekeeperIdentifier << '@'; H323Transactor::PrintOn(strm); } H323TransactionPDU * H225_RAS::CreateTransactionPDU() const { return new H323RasPDU; } PBoolean H225_RAS::HandleTransaction(const PASN_Object & rawPDU) { const H323RasPDU & pdu = (const H323RasPDU &)rawPDU; switch (pdu.GetTag()) { case H225_RasMessage::e_gatekeeperRequest : if (SendCachedResponse(pdu)) return FALSE; OnReceiveGatekeeperRequest(pdu, pdu); break; case H225_RasMessage::e_gatekeeperConfirm : return OnReceiveGatekeeperConfirm(pdu, pdu); case H225_RasMessage::e_gatekeeperReject : return OnReceiveGatekeeperReject(pdu, pdu); case H225_RasMessage::e_registrationRequest : if (SendCachedResponse(pdu)) return FALSE; OnReceiveRegistrationRequest(pdu, pdu); break; case H225_RasMessage::e_registrationConfirm : return OnReceiveRegistrationConfirm(pdu, pdu); case H225_RasMessage::e_registrationReject : return OnReceiveRegistrationReject(pdu, pdu); case H225_RasMessage::e_unregistrationRequest : if (SendCachedResponse(pdu)) return FALSE; OnReceiveUnregistrationRequest(pdu, pdu); break; case H225_RasMessage::e_unregistrationConfirm : return OnReceiveUnregistrationConfirm(pdu, pdu); case H225_RasMessage::e_unregistrationReject : return OnReceiveUnregistrationReject(pdu, pdu); case H225_RasMessage::e_admissionRequest : if (SendCachedResponse(pdu)) return FALSE; OnReceiveAdmissionRequest(pdu, pdu); break; case H225_RasMessage::e_admissionConfirm : return OnReceiveAdmissionConfirm(pdu, pdu); case H225_RasMessage::e_admissionReject : return OnReceiveAdmissionReject(pdu, pdu); case H225_RasMessage::e_bandwidthRequest : if (SendCachedResponse(pdu)) return FALSE; OnReceiveBandwidthRequest(pdu, pdu); break; case H225_RasMessage::e_bandwidthConfirm : return OnReceiveBandwidthConfirm(pdu, pdu); case H225_RasMessage::e_bandwidthReject : return OnReceiveBandwidthReject(pdu, pdu); case H225_RasMessage::e_disengageRequest : if (SendCachedResponse(pdu)) return FALSE; OnReceiveDisengageRequest(pdu, pdu); break; case H225_RasMessage::e_disengageConfirm : return OnReceiveDisengageConfirm(pdu, pdu); case H225_RasMessage::e_disengageReject : return OnReceiveDisengageReject(pdu, pdu); case H225_RasMessage::e_locationRequest : if (SendCachedResponse(pdu)) return FALSE; OnReceiveLocationRequest(pdu, pdu); break; case H225_RasMessage::e_locationConfirm : return OnReceiveLocationConfirm(pdu, pdu); case H225_RasMessage::e_locationReject : return OnReceiveLocationReject(pdu, pdu); case H225_RasMessage::e_infoRequest : if (SendCachedResponse(pdu)) return FALSE; OnReceiveInfoRequest(pdu, pdu); break; case H225_RasMessage::e_infoRequestResponse : return OnReceiveInfoRequestResponse(pdu, pdu); case H225_RasMessage::e_nonStandardMessage : OnReceiveNonStandardMessage(pdu, pdu); break; case H225_RasMessage::e_unknownMessageResponse : OnReceiveUnknownMessageResponse(pdu, pdu); break; case H225_RasMessage::e_requestInProgress : return OnReceiveRequestInProgress(pdu, pdu); case H225_RasMessage::e_resourcesAvailableIndicate : if (SendCachedResponse(pdu)) return FALSE; OnReceiveResourcesAvailableIndicate(pdu, pdu); break; case H225_RasMessage::e_resourcesAvailableConfirm : return OnReceiveResourcesAvailableConfirm(pdu, pdu); case H225_RasMessage::e_infoRequestAck : return OnReceiveInfoRequestAck(pdu, pdu); case H225_RasMessage::e_infoRequestNak : return OnReceiveInfoRequestNak(pdu, pdu); case H225_RasMessage::e_serviceControlIndication : if (SendCachedResponse(pdu)) return FALSE; OnReceiveServiceControlIndication(pdu, pdu); break; case H225_RasMessage::e_serviceControlResponse : return OnReceiveServiceControlResponse(pdu, pdu); default : OnReceiveUnknown(pdu); } return FALSE; } void H225_RAS::OnSendingPDU(PASN_Object & rawPDU) { H323RasPDU & pdu = (H323RasPDU &)rawPDU; switch (pdu.GetTag()) { case H225_RasMessage::e_gatekeeperRequest : OnSendGatekeeperRequest(pdu, pdu); break; case H225_RasMessage::e_gatekeeperConfirm : OnSendGatekeeperConfirm(pdu, pdu); break; case H225_RasMessage::e_gatekeeperReject : OnSendGatekeeperReject(pdu, pdu); break; case H225_RasMessage::e_registrationRequest : OnSendRegistrationRequest(pdu, pdu); break; case H225_RasMessage::e_registrationConfirm : OnSendRegistrationConfirm(pdu, pdu); break; case H225_RasMessage::e_registrationReject : OnSendRegistrationReject(pdu, pdu); break; case H225_RasMessage::e_unregistrationRequest : OnSendUnregistrationRequest(pdu, pdu); break; case H225_RasMessage::e_unregistrationConfirm : OnSendUnregistrationConfirm(pdu, pdu); break; case H225_RasMessage::e_unregistrationReject : OnSendUnregistrationReject(pdu, pdu); break; case H225_RasMessage::e_admissionRequest : OnSendAdmissionRequest(pdu, pdu); break; case H225_RasMessage::e_admissionConfirm : OnSendAdmissionConfirm(pdu, pdu); break; case H225_RasMessage::e_admissionReject : OnSendAdmissionReject(pdu, pdu); break; case H225_RasMessage::e_bandwidthRequest : OnSendBandwidthRequest(pdu, pdu); break; case H225_RasMessage::e_bandwidthConfirm : OnSendBandwidthConfirm(pdu, pdu); break; case H225_RasMessage::e_bandwidthReject : OnSendBandwidthReject(pdu, pdu); break; case H225_RasMessage::e_disengageRequest : OnSendDisengageRequest(pdu, pdu); break; case H225_RasMessage::e_disengageConfirm : OnSendDisengageConfirm(pdu, pdu); break; case H225_RasMessage::e_disengageReject : OnSendDisengageReject(pdu, pdu); break; case H225_RasMessage::e_locationRequest : OnSendLocationRequest(pdu, pdu); break; case H225_RasMessage::e_locationConfirm : OnSendLocationConfirm(pdu, pdu); break; case H225_RasMessage::e_locationReject : OnSendLocationReject(pdu, pdu); break; case H225_RasMessage::e_infoRequest : OnSendInfoRequest(pdu, pdu); break; case H225_RasMessage::e_infoRequestResponse : OnSendInfoRequestResponse(pdu, pdu); break; case H225_RasMessage::e_nonStandardMessage : OnSendNonStandardMessage(pdu, pdu); break; case H225_RasMessage::e_unknownMessageResponse : OnSendUnknownMessageResponse(pdu, pdu); break; case H225_RasMessage::e_requestInProgress : OnSendRequestInProgress(pdu, pdu); break; case H225_RasMessage::e_resourcesAvailableIndicate : OnSendResourcesAvailableIndicate(pdu, pdu); break; case H225_RasMessage::e_resourcesAvailableConfirm : OnSendResourcesAvailableConfirm(pdu, pdu); break; case H225_RasMessage::e_infoRequestAck : OnSendInfoRequestAck(pdu, pdu); break; case H225_RasMessage::e_infoRequestNak : OnSendInfoRequestNak(pdu, pdu); break; case H225_RasMessage::e_serviceControlIndication : OnSendServiceControlIndication(pdu, pdu); break; case H225_RasMessage::e_serviceControlResponse : OnSendServiceControlResponse(pdu, pdu); break; default : break; } } PBoolean H225_RAS::OnReceiveRequestInProgress(const H323RasPDU & pdu, const H225_RequestInProgress & rip) { if (!HandleRequestInProgress(pdu, rip.m_delay)) return FALSE; return OnReceiveRequestInProgress(rip); } PBoolean H225_RAS::OnReceiveRequestInProgress(const H225_RequestInProgress & /*rip*/) { return TRUE; } template static void SendGenericData(const H225_RAS * ras, unsigned code, PDUType & pdu) { H225_FeatureSet fs; if (ras->OnSendFeatureSet(code,fs,false)) { if (fs.HasOptionalField(H225_FeatureSet::e_supportedFeatures)) { pdu.IncludeOptionalField(PDUType::e_genericData); H225_ArrayOf_FeatureDescriptor & fsn = fs.m_supportedFeatures; H225_ArrayOf_GenericData & data = pdu.m_genericData; for (PINDEX i=0; i < fsn.GetSize(); i++) { PINDEX lastPos = data.GetSize(); data.SetSize(lastPos+1); data[lastPos] = fsn[i]; } } } } template static void SendFeatureSet(const H225_RAS * ras, unsigned code, PDUType & pdu) { H225_FeatureSet fs; if (ras->OnSendFeatureSet(code,fs,true)) { pdu.IncludeOptionalField(PDUType::e_featureSet); pdu.m_featureSet = fs; } if (ras->OnSendFeatureSet(code,fs,false)) { if (fs.HasOptionalField(H225_FeatureSet::e_supportedFeatures)) { pdu.IncludeOptionalField(PDUType::e_genericData); H225_ArrayOf_FeatureDescriptor & fsn = fs.m_supportedFeatures; H225_ArrayOf_GenericData & data = pdu.m_genericData; for (PINDEX i=0; i < fsn.GetSize(); i++) { PINDEX lastPos = data.GetSize(); data.SetSize(lastPos+1); data[lastPos] = fsn[i]; } } } } void H225_RAS::OnSendGatekeeperRequest(H323RasPDU &, H225_GatekeeperRequest & grq) { // This function is never called during sending GRQ if (!gatekeeperIdentifier) { grq.IncludeOptionalField(H225_GatekeeperRequest::e_gatekeeperIdentifier); grq.m_gatekeeperIdentifier = gatekeeperIdentifier; } OnSendGatekeeperRequest(grq); } void H225_RAS::OnSendGatekeeperRequest(H225_GatekeeperRequest & grq) { #ifdef H323_H460 SendFeatureSet(this, H460_MessageType::e_gatekeeperRequest, grq); #endif } void H225_RAS::OnSendGatekeeperConfirm(H323RasPDU &, H225_GatekeeperConfirm & gcf) { if (!gatekeeperIdentifier) { gcf.IncludeOptionalField(H225_GatekeeperConfirm::e_gatekeeperIdentifier); gcf.m_gatekeeperIdentifier = gatekeeperIdentifier; } #ifdef H323_H460 SendFeatureSet(this, H460_MessageType::e_gatekeeperConfirm, gcf); #endif OnSendGatekeeperConfirm(gcf); } void H225_RAS::OnSendGatekeeperConfirm(H225_GatekeeperConfirm & /*gcf*/) { } void H225_RAS::OnSendGatekeeperReject(H323RasPDU &, H225_GatekeeperReject & grj) { if (!gatekeeperIdentifier) { grj.IncludeOptionalField(H225_GatekeeperReject::e_gatekeeperIdentifier); grj.m_gatekeeperIdentifier = gatekeeperIdentifier; } #ifdef H323_H460 SendFeatureSet(this, H460_MessageType::e_gatekeeperReject, grj); #endif OnSendGatekeeperReject(grj); } void H225_RAS::OnSendGatekeeperReject(H225_GatekeeperReject & /*grj*/) { } template static void ProcessFeatureSet(const H225_RAS * ras, unsigned code, const PDUType & pdu) { if (pdu.HasOptionalField(PDUType::e_genericData)) { H225_FeatureSet fs; fs.IncludeOptionalField(H225_FeatureSet::e_supportedFeatures); H225_ArrayOf_FeatureDescriptor & fsn = fs.m_supportedFeatures; const H225_ArrayOf_GenericData & data = pdu.m_genericData; for (PINDEX i=0; i < data.GetSize(); i++) { PINDEX lastPos = fsn.GetSize(); fsn.SetSize(lastPos+1); fsn[lastPos] = (H225_FeatureDescriptor &)data[i]; } ras->OnReceiveFeatureSet(code, fs); } } template static void ReceiveGenericData(const H225_RAS * ras, unsigned code, const PDUType & pdu) { ProcessFeatureSet(ras,code,pdu); } template static void ReceiveFeatureSet(const H225_RAS * ras, unsigned code, const PDUType & pdu) { if (pdu.HasOptionalField(PDUType::e_featureSet)) ras->OnReceiveFeatureSet(code, pdu.m_featureSet); ProcessFeatureSet(ras,code,pdu); } PBoolean H225_RAS::OnReceiveGatekeeperRequest(const H323RasPDU &, const H225_GatekeeperRequest & grq) { #ifdef H323_H460 ReceiveFeatureSet(this, H460_MessageType::e_gatekeeperRequest, grq); #endif return OnReceiveGatekeeperRequest(grq); } PBoolean H225_RAS::OnReceiveGatekeeperRequest(const H225_GatekeeperRequest &) { return TRUE; } PBoolean H225_RAS::OnReceiveGatekeeperConfirm(const H323RasPDU &, const H225_GatekeeperConfirm & gcf) { if (!CheckForResponse(H225_RasMessage::e_gatekeeperRequest, gcf.m_requestSeqNum)) return FALSE; if (gatekeeperIdentifier.IsEmpty()) gatekeeperIdentifier = gcf.m_gatekeeperIdentifier; else { PString gkid = gcf.m_gatekeeperIdentifier; if (gatekeeperIdentifier *= gkid) gatekeeperIdentifier = gkid; else { PTRACE(2, "RAS\tReceived a GCF from " << gkid << " but wanted it from " << gatekeeperIdentifier); return FALSE; } } #ifdef H323_H460 if (gcf.HasOptionalField(H225_GatekeeperConfirm::e_featureSet)) ReceiveFeatureSet(this, H460_MessageType::e_gatekeeperConfirm, gcf); else DisableFeatureSet(H460_MessageType::e_gatekeeperConfirm); #endif return OnReceiveGatekeeperConfirm(gcf); } PBoolean H225_RAS::OnReceiveGatekeeperConfirm(const H225_GatekeeperConfirm & /*gcf*/) { return TRUE; } PBoolean H225_RAS::OnReceiveGatekeeperReject(const H323RasPDU &, const H225_GatekeeperReject & grj) { if (!CheckForResponse(H225_RasMessage::e_gatekeeperRequest, grj.m_requestSeqNum, &grj.m_rejectReason)) return FALSE; #ifdef H323_H460 ReceiveFeatureSet(this, H460_MessageType::e_gatekeeperReject, grj); #endif return OnReceiveGatekeeperReject(grj); } PBoolean H225_RAS::OnReceiveGatekeeperReject(const H225_GatekeeperReject & /*grj*/) { return TRUE; } void H225_RAS::OnSendRegistrationRequest(H323RasPDU & pdu, H225_RegistrationRequest & rrq) { OnSendRegistrationRequest(rrq); #ifdef H323_H460 SendFeatureSet(this, H460_MessageType::e_registrationRequest, rrq); #endif pdu.Prepare(rrq.m_tokens, H225_RegistrationRequest::e_tokens, rrq.m_cryptoTokens, H225_RegistrationRequest::e_cryptoTokens); } void H225_RAS::OnSendRegistrationRequest(H225_RegistrationRequest & /*rrq*/) { } void H225_RAS::OnSendRegistrationConfirm(H323RasPDU & pdu, H225_RegistrationConfirm & rcf) { if (!gatekeeperIdentifier) { rcf.IncludeOptionalField(H225_RegistrationConfirm::e_gatekeeperIdentifier); rcf.m_gatekeeperIdentifier = gatekeeperIdentifier; } OnSendRegistrationConfirm(rcf); #ifdef H323_H460 SendFeatureSet(this, H460_MessageType::e_registrationConfirm, rcf); #endif pdu.Prepare(rcf.m_tokens, H225_RegistrationConfirm::e_tokens, rcf.m_cryptoTokens, H225_RegistrationConfirm::e_cryptoTokens); } void H225_RAS::OnSendRegistrationConfirm(H225_RegistrationConfirm & /*rcf*/) { } void H225_RAS::OnSendRegistrationReject(H323RasPDU & pdu, H225_RegistrationReject & rrj) { if (!gatekeeperIdentifier) { rrj.IncludeOptionalField(H225_RegistrationReject::e_gatekeeperIdentifier); rrj.m_gatekeeperIdentifier = gatekeeperIdentifier; } OnSendRegistrationReject(rrj); #ifdef H323_H460 SendFeatureSet(this, H460_MessageType::e_registrationReject, rrj); #endif pdu.Prepare(rrj.m_tokens, H225_RegistrationReject::e_tokens, rrj.m_cryptoTokens, H225_RegistrationReject::e_cryptoTokens); } void H225_RAS::OnSendRegistrationReject(H225_RegistrationReject & /*rrj*/) { } PBoolean H225_RAS::OnReceiveRegistrationRequest(const H323RasPDU &, const H225_RegistrationRequest & rrq) { #ifdef H323_H460 ReceiveFeatureSet(this, H460_MessageType::e_registrationRequest, rrq); #endif return OnReceiveRegistrationRequest(rrq); } PBoolean H225_RAS::OnReceiveRegistrationRequest(const H225_RegistrationRequest &) { return TRUE; } PBoolean H225_RAS::OnReceiveRegistrationConfirm(const H323RasPDU & pdu, const H225_RegistrationConfirm & rcf) { if (!CheckForResponse(H225_RasMessage::e_registrationRequest, rcf.m_requestSeqNum)) return FALSE; if (lastRequest != NULL) { PString endpointIdentifier = rcf.m_endpointIdentifier; const H235Authenticators & authenticators = lastRequest->requestPDU.GetAuthenticators(); for (PINDEX i = 0; i < authenticators.GetSize(); i++) { H235Authenticator & authenticator = authenticators[i]; if (authenticator.UseGkAndEpIdentifiers()) authenticator.SetLocalId(endpointIdentifier); } } if (!CheckCryptoTokens(pdu, rcf.m_tokens, H225_RegistrationConfirm::e_tokens, rcf.m_cryptoTokens, H225_RegistrationConfirm::e_cryptoTokens)) return FALSE; #ifdef H323_H460 if (rcf.HasOptionalField(H225_RegistrationConfirm::e_featureSet)) ReceiveFeatureSet(this, H460_MessageType::e_registrationConfirm, rcf); else DisableFeatureSet(H460_MessageType::e_registrationConfirm); #endif return OnReceiveRegistrationConfirm(rcf); } PBoolean H225_RAS::OnReceiveRegistrationConfirm(const H225_RegistrationConfirm & /*rcf*/) { return TRUE; } PBoolean H225_RAS::OnReceiveRegistrationReject(const H323RasPDU & pdu, const H225_RegistrationReject & rrj) { if (!CheckForResponse(H225_RasMessage::e_registrationRequest, rrj.m_requestSeqNum, &rrj.m_rejectReason)) return FALSE; if (!CheckCryptoTokens(pdu, rrj.m_tokens, H225_RegistrationReject::e_tokens, rrj.m_cryptoTokens, H225_RegistrationReject::e_cryptoTokens)) return FALSE; #ifdef H323_H460 ReceiveFeatureSet(this, H460_MessageType::e_registrationReject, rrj); #endif return OnReceiveRegistrationReject(rrj); } PBoolean H225_RAS::OnReceiveRegistrationReject(const H225_RegistrationReject & /*rrj*/) { return TRUE; } void H225_RAS::OnSendUnregistrationRequest(H323RasPDU & pdu, H225_UnregistrationRequest & urq) { OnSendUnregistrationRequest(urq); pdu.Prepare(urq.m_tokens, H225_UnregistrationRequest::e_tokens, urq.m_cryptoTokens, H225_UnregistrationRequest::e_cryptoTokens); } void H225_RAS::OnSendUnregistrationRequest(H225_UnregistrationRequest & /*urq*/) { } void H225_RAS::OnSendUnregistrationConfirm(H323RasPDU & pdu, H225_UnregistrationConfirm & ucf) { OnSendUnregistrationConfirm(ucf); pdu.Prepare(ucf.m_tokens, H225_UnregistrationConfirm::e_tokens, ucf.m_cryptoTokens, H225_UnregistrationConfirm::e_cryptoTokens); } void H225_RAS::OnSendUnregistrationConfirm(H225_UnregistrationConfirm & /*ucf*/) { } void H225_RAS::OnSendUnregistrationReject(H323RasPDU & pdu, H225_UnregistrationReject & urj) { OnSendUnregistrationReject(urj); pdu.Prepare(urj.m_tokens, H225_UnregistrationReject::e_tokens, urj.m_cryptoTokens, H225_UnregistrationReject::e_cryptoTokens); } void H225_RAS::OnSendUnregistrationReject(H225_UnregistrationReject & /*urj*/) { } PBoolean H225_RAS::OnReceiveUnregistrationRequest(const H323RasPDU & pdu, const H225_UnregistrationRequest & urq) { if (!CheckCryptoTokens(pdu, urq.m_tokens, H225_UnregistrationRequest::e_tokens, urq.m_cryptoTokens, H225_UnregistrationRequest::e_cryptoTokens)) return FALSE; #ifdef H323_H460 ProcessFeatureSet(this, H460_MessageType::e_unregistrationRequest, urq); #endif return OnReceiveUnregistrationRequest(urq); } PBoolean H225_RAS::OnReceiveUnregistrationRequest(const H225_UnregistrationRequest & /*urq*/) { return TRUE; } PBoolean H225_RAS::OnReceiveUnregistrationConfirm(const H323RasPDU & pdu, const H225_UnregistrationConfirm & ucf) { if (!CheckForResponse(H225_RasMessage::e_unregistrationRequest, ucf.m_requestSeqNum)) return FALSE; if (!CheckCryptoTokens(pdu, ucf.m_tokens, H225_UnregistrationConfirm::e_tokens, ucf.m_cryptoTokens, H225_UnregistrationConfirm::e_cryptoTokens)) return FALSE; return OnReceiveUnregistrationConfirm(ucf); } PBoolean H225_RAS::OnReceiveUnregistrationConfirm(const H225_UnregistrationConfirm & /*ucf*/) { return TRUE; } PBoolean H225_RAS::OnReceiveUnregistrationReject(const H323RasPDU & pdu, const H225_UnregistrationReject & urj) { if (!CheckForResponse(H225_RasMessage::e_unregistrationRequest, urj.m_requestSeqNum, &urj.m_rejectReason)) return FALSE; if (!CheckCryptoTokens(pdu, urj.m_tokens, H225_UnregistrationReject::e_tokens, urj.m_cryptoTokens, H225_UnregistrationReject::e_cryptoTokens)) return FALSE; return OnReceiveUnregistrationReject(urj); } PBoolean H225_RAS::OnReceiveUnregistrationReject(const H225_UnregistrationReject & /*urj*/) { return TRUE; } void H225_RAS::OnSendAdmissionRequest(H323RasPDU & pdu, H225_AdmissionRequest & arq) { OnSendAdmissionRequest(arq); #ifdef H323_H460 SendFeatureSet(this, H460_MessageType::e_admissionRequest, arq); #endif pdu.Prepare(arq.m_tokens, H225_AdmissionRequest::e_tokens, arq.m_cryptoTokens, H225_AdmissionRequest::e_cryptoTokens); } void H225_RAS::OnSendAdmissionRequest(H225_AdmissionRequest & /*arq*/) { } void H225_RAS::OnSendAdmissionConfirm(H323RasPDU & pdu, H225_AdmissionConfirm & acf) { OnSendAdmissionConfirm(acf); pdu.Prepare(acf.m_tokens, H225_AdmissionConfirm::e_tokens, acf.m_cryptoTokens, H225_AdmissionConfirm::e_cryptoTokens); } void H225_RAS::OnSendAdmissionConfirm(H225_AdmissionConfirm & /*acf*/) { } void H225_RAS::OnSendAdmissionReject(H323RasPDU & pdu, H225_AdmissionReject & arj) { OnSendAdmissionReject(arj); #ifdef H323_H460 SendFeatureSet(this, H460_MessageType::e_admissionReject, arj); #endif pdu.Prepare(arj.m_tokens, H225_AdmissionReject::e_tokens, arj.m_cryptoTokens, H225_AdmissionReject::e_cryptoTokens); } void H225_RAS::OnSendAdmissionReject(H225_AdmissionReject & /*arj*/) { } PBoolean H225_RAS::OnReceiveAdmissionRequest(const H323RasPDU & pdu, const H225_AdmissionRequest & arq) { if (!CheckCryptoTokens(pdu, arq.m_tokens, H225_AdmissionRequest::e_tokens, arq.m_cryptoTokens, H225_AdmissionRequest::e_cryptoTokens)) return FALSE; #ifdef H323_H460 ReceiveFeatureSet(this, H460_MessageType::e_admissionRequest, arq); #endif return OnReceiveAdmissionRequest(arq); } PBoolean H225_RAS::OnReceiveAdmissionRequest(const H225_AdmissionRequest & /*arq*/) { return TRUE; } PBoolean H225_RAS::OnReceiveAdmissionConfirm(const H323RasPDU & pdu, const H225_AdmissionConfirm & acf) { if (!CheckForResponse(H225_RasMessage::e_admissionRequest, acf.m_requestSeqNum)) return FALSE; if (!CheckCryptoTokens(pdu, acf.m_tokens, H225_AdmissionConfirm::e_tokens, acf.m_cryptoTokens, H225_AdmissionConfirm::e_cryptoTokens)) return FALSE; return OnReceiveAdmissionConfirm(acf); } PBoolean H225_RAS::OnReceiveAdmissionConfirm(const H225_AdmissionConfirm & /*acf*/) { return TRUE; } PBoolean H225_RAS::OnReceiveAdmissionReject(const H323RasPDU & pdu, const H225_AdmissionReject & arj) { if (!CheckForResponse(H225_RasMessage::e_admissionRequest, arj.m_requestSeqNum, &arj.m_rejectReason)) return FALSE; if (!CheckCryptoTokens(pdu, arj.m_tokens, H225_AdmissionReject::e_tokens, arj.m_cryptoTokens, H225_AdmissionReject::e_cryptoTokens)) return FALSE; return OnReceiveAdmissionReject(arj); } PBoolean H225_RAS::OnReceiveAdmissionReject(const H225_AdmissionReject & /*arj*/) { return TRUE; } void H225_RAS::OnSendBandwidthRequest(H323RasPDU & pdu, H225_BandwidthRequest & brq) { OnSendBandwidthRequest(brq); pdu.Prepare(brq.m_tokens, H225_BandwidthRequest::e_tokens, brq.m_cryptoTokens, H225_BandwidthRequest::e_cryptoTokens); } void H225_RAS::OnSendBandwidthRequest(H225_BandwidthRequest & /*brq*/) { } PBoolean H225_RAS::OnReceiveBandwidthRequest(const H323RasPDU & pdu, const H225_BandwidthRequest & brq) { if (!CheckCryptoTokens(pdu, brq.m_tokens, H225_BandwidthRequest::e_tokens, brq.m_cryptoTokens, H225_BandwidthRequest::e_cryptoTokens)) return FALSE; return OnReceiveBandwidthRequest(brq); } PBoolean H225_RAS::OnReceiveBandwidthRequest(const H225_BandwidthRequest & /*brq*/) { return TRUE; } void H225_RAS::OnSendBandwidthConfirm(H323RasPDU & pdu, H225_BandwidthConfirm & bcf) { OnSendBandwidthConfirm(bcf); pdu.Prepare(bcf.m_tokens, H225_BandwidthConfirm::e_tokens, bcf.m_cryptoTokens, H225_BandwidthConfirm::e_cryptoTokens); } void H225_RAS::OnSendBandwidthConfirm(H225_BandwidthConfirm & /*bcf*/) { } PBoolean H225_RAS::OnReceiveBandwidthConfirm(const H323RasPDU & pdu, const H225_BandwidthConfirm & bcf) { if (!CheckForResponse(H225_RasMessage::e_bandwidthRequest, bcf.m_requestSeqNum)) return FALSE; if (!CheckCryptoTokens(pdu, bcf.m_tokens, H225_BandwidthConfirm::e_tokens, bcf.m_cryptoTokens, H225_BandwidthConfirm::e_cryptoTokens)) return FALSE; return OnReceiveBandwidthConfirm(bcf); } PBoolean H225_RAS::OnReceiveBandwidthConfirm(const H225_BandwidthConfirm & /*bcf*/) { return TRUE; } void H225_RAS::OnSendBandwidthReject(H323RasPDU & pdu, H225_BandwidthReject & brj) { OnSendBandwidthReject(brj); pdu.Prepare(brj.m_tokens, H225_BandwidthReject::e_tokens, brj.m_cryptoTokens, H225_BandwidthReject::e_cryptoTokens); } void H225_RAS::OnSendBandwidthReject(H225_BandwidthReject & /*brj*/) { } PBoolean H225_RAS::OnReceiveBandwidthReject(const H323RasPDU & pdu, const H225_BandwidthReject & brj) { if (!CheckForResponse(H225_RasMessage::e_bandwidthRequest, brj.m_requestSeqNum, &brj.m_rejectReason)) return FALSE; if (!CheckCryptoTokens(pdu, brj.m_tokens, H225_BandwidthReject::e_tokens, brj.m_cryptoTokens, H225_BandwidthReject::e_cryptoTokens)) return FALSE; return OnReceiveBandwidthReject(brj); } PBoolean H225_RAS::OnReceiveBandwidthReject(const H225_BandwidthReject & /*brj*/) { return TRUE; } void H225_RAS::OnSendDisengageRequest(H323RasPDU & pdu, H225_DisengageRequest & drq) { OnSendDisengageRequest(drq); pdu.Prepare(drq.m_tokens, H225_DisengageRequest::e_tokens, drq.m_cryptoTokens, H225_DisengageRequest::e_cryptoTokens); #ifdef H323_H460 SendGenericData(this, H460_MessageType::e_disengagerequest, drq); #endif } void H225_RAS::OnSendDisengageRequest(H225_DisengageRequest & /*drq*/) { } PBoolean H225_RAS::OnReceiveDisengageRequest(const H323RasPDU & pdu, const H225_DisengageRequest & drq) { if (!CheckCryptoTokens(pdu, drq.m_tokens, H225_DisengageRequest::e_tokens, drq.m_cryptoTokens, H225_DisengageRequest::e_cryptoTokens)) return FALSE; #ifdef H323_H460 ReceiveGenericData(this, H460_MessageType::e_disengagerequest, drq); #endif return OnReceiveDisengageRequest(drq); } PBoolean H225_RAS::OnReceiveDisengageRequest(const H225_DisengageRequest & /*drq*/) { return TRUE; } void H225_RAS::OnSendDisengageConfirm(H323RasPDU & pdu, H225_DisengageConfirm & dcf) { OnSendDisengageConfirm(dcf); pdu.Prepare(dcf.m_tokens, H225_DisengageConfirm::e_tokens, dcf.m_cryptoTokens, H225_DisengageConfirm::e_cryptoTokens); #ifdef H323_H460 SendGenericData(this, H460_MessageType::e_disengageconfirm, dcf); #endif } void H225_RAS::OnSendDisengageConfirm(H225_DisengageConfirm & /*dcf*/) { } PBoolean H225_RAS::OnReceiveDisengageConfirm(const H323RasPDU & pdu, const H225_DisengageConfirm & dcf) { if (!CheckForResponse(H225_RasMessage::e_disengageRequest, dcf.m_requestSeqNum)) return FALSE; if (!CheckCryptoTokens(pdu, dcf.m_tokens, H225_DisengageConfirm::e_tokens, dcf.m_cryptoTokens, H225_DisengageConfirm::e_cryptoTokens)) return FALSE; #ifdef H323_H460 ReceiveGenericData(this, H460_MessageType::e_disengageconfirm, dcf); #endif return OnReceiveDisengageConfirm(dcf); } PBoolean H225_RAS::OnReceiveDisengageConfirm(const H225_DisengageConfirm & /*dcf*/) { return TRUE; } void H225_RAS::OnSendDisengageReject(H323RasPDU & pdu, H225_DisengageReject & drj) { OnSendDisengageReject(drj); pdu.Prepare(drj.m_tokens, H225_DisengageReject::e_tokens, drj.m_cryptoTokens, H225_DisengageReject::e_cryptoTokens); } void H225_RAS::OnSendDisengageReject(H225_DisengageReject & /*drj*/) { } PBoolean H225_RAS::OnReceiveDisengageReject(const H323RasPDU & pdu, const H225_DisengageReject & drj) { if (!CheckForResponse(H225_RasMessage::e_disengageRequest, drj.m_requestSeqNum, &drj.m_rejectReason)) return FALSE; if (!CheckCryptoTokens(pdu, drj.m_tokens, H225_DisengageReject::e_tokens, drj.m_cryptoTokens, H225_DisengageReject::e_cryptoTokens)) return FALSE; return OnReceiveDisengageReject(drj); } PBoolean H225_RAS::OnReceiveDisengageReject(const H225_DisengageReject & /*drj*/) { return TRUE; } void H225_RAS::OnSendLocationRequest(H323RasPDU & pdu, H225_LocationRequest & lrq) { OnSendLocationRequest(lrq); #ifdef H323_H460 SendFeatureSet(this, H460_MessageType::e_locationRequest, lrq); #endif pdu.Prepare(lrq.m_tokens, H225_LocationRequest::e_tokens, lrq.m_cryptoTokens, H225_LocationRequest::e_cryptoTokens); } void H225_RAS::OnSendLocationRequest(H225_LocationRequest & /*lrq*/) { } PBoolean H225_RAS::OnReceiveLocationRequest(const H323RasPDU & pdu, const H225_LocationRequest & lrq) { if (!CheckCryptoTokens(pdu, lrq.m_tokens, H225_LocationRequest::e_tokens, lrq.m_cryptoTokens, H225_LocationRequest::e_cryptoTokens)) return FALSE; #ifdef H323_H460 ReceiveFeatureSet(this, H460_MessageType::e_locationRequest, lrq); #endif return OnReceiveLocationRequest(lrq); } PBoolean H225_RAS::OnReceiveLocationRequest(const H225_LocationRequest & /*lrq*/) { return TRUE; } void H225_RAS::OnSendLocationConfirm(H323RasPDU & pdu, H225_LocationConfirm & lcf) { OnSendLocationConfirm(lcf); #ifdef H323_H460 SendFeatureSet(this, H460_MessageType::e_locationConfirm, lcf); #endif pdu.Prepare(lcf.m_tokens, H225_LocationRequest::e_tokens, lcf.m_cryptoTokens, H225_LocationRequest::e_cryptoTokens); } void H225_RAS::OnSendLocationConfirm(H225_LocationConfirm & /*lcf*/) { } PBoolean H225_RAS::OnReceiveLocationConfirm(const H323RasPDU &, const H225_LocationConfirm & lcf) { if (!CheckForResponse(H225_RasMessage::e_locationRequest, lcf.m_requestSeqNum)) return FALSE; if (lastRequest->responseInfo != NULL) { H323TransportAddress & locatedAddress = *(H323TransportAddress *)lastRequest->responseInfo; locatedAddress = lcf.m_callSignalAddress; } #ifdef H323_H460 ReceiveFeatureSet(this, H460_MessageType::e_locationConfirm, lcf); #endif return OnReceiveLocationConfirm(lcf); } PBoolean H225_RAS::OnReceiveLocationConfirm(const H225_LocationConfirm & /*lcf*/) { return TRUE; } void H225_RAS::OnSendLocationReject(H323RasPDU & pdu, H225_LocationReject & lrj) { OnSendLocationReject(lrj); #ifdef H323_H460 SendFeatureSet(this, H460_MessageType::e_locationReject, lrj); #endif pdu.Prepare(lrj.m_tokens, H225_LocationReject::e_tokens, lrj.m_cryptoTokens, H225_LocationReject::e_cryptoTokens); } void H225_RAS::OnSendLocationReject(H225_LocationReject & /*lrj*/) { } PBoolean H225_RAS::OnReceiveLocationReject(const H323RasPDU & pdu, const H225_LocationReject & lrj) { if (!CheckForResponse(H225_RasMessage::e_locationRequest, lrj.m_requestSeqNum, &lrj.m_rejectReason)) return FALSE; if (!CheckCryptoTokens(pdu, lrj.m_tokens, H225_LocationReject::e_tokens, lrj.m_cryptoTokens, H225_LocationReject::e_cryptoTokens)) return FALSE; #ifdef H323_H460 ReceiveFeatureSet(this, H460_MessageType::e_locationReject, lrj); #endif return OnReceiveLocationReject(lrj); } PBoolean H225_RAS::OnReceiveLocationReject(const H225_LocationReject & /*lrj*/) { return TRUE; } void H225_RAS::OnSendInfoRequest(H323RasPDU & pdu, H225_InfoRequest & irq) { OnSendInfoRequest(irq); pdu.Prepare(irq.m_tokens, H225_InfoRequest::e_tokens, irq.m_cryptoTokens, H225_InfoRequest::e_cryptoTokens); #ifdef H323_H460 SendGenericData(this, H460_MessageType::e_inforequest, irq); #endif } void H225_RAS::OnSendInfoRequest(H225_InfoRequest & /*irq*/) { } PBoolean H225_RAS::OnReceiveInfoRequest(const H323RasPDU & pdu, const H225_InfoRequest & irq) { if (!CheckCryptoTokens(pdu, irq.m_tokens, H225_InfoRequest::e_tokens, irq.m_cryptoTokens, H225_InfoRequest::e_cryptoTokens)) return FALSE; #ifdef H323_H460 ReceiveGenericData(this, H460_MessageType::e_inforequest, irq); #endif return OnReceiveInfoRequest(irq); } PBoolean H225_RAS::OnReceiveInfoRequest(const H225_InfoRequest & /*irq*/) { return TRUE; } void H225_RAS::OnSendInfoRequestResponse(H323RasPDU & pdu, H225_InfoRequestResponse & irr) { OnSendInfoRequestResponse(irr); pdu.Prepare(irr.m_tokens, H225_InfoRequestResponse::e_tokens, irr.m_cryptoTokens, H225_InfoRequestResponse::e_cryptoTokens); #ifdef H323_H460 SendGenericData(this, H460_MessageType::e_inforequestresponse, irr); #endif } void H225_RAS::OnSendInfoRequestResponse(H225_InfoRequestResponse & /*irr*/) { } PBoolean H225_RAS::OnReceiveInfoRequestResponse(const H323RasPDU & pdu, const H225_InfoRequestResponse & irr) { if (!CheckForResponse(H225_RasMessage::e_infoRequest, irr.m_requestSeqNum)) return FALSE; if (!CheckCryptoTokens(pdu, irr.m_tokens, H225_InfoRequestResponse::e_tokens, irr.m_cryptoTokens, H225_InfoRequestResponse::e_cryptoTokens)) return FALSE; #ifdef H323_H460 ReceiveGenericData(this, H460_MessageType::e_inforequestresponse, irr); #endif return OnReceiveInfoRequestResponse(irr); } PBoolean H225_RAS::OnReceiveInfoRequestResponse(const H225_InfoRequestResponse & /*irr*/) { return TRUE; } void H225_RAS::OnSendNonStandardMessage(H323RasPDU & pdu, H225_NonStandardMessage & nsm) { OnSendNonStandardMessage(nsm); #ifdef H323_H460 SendFeatureSet(this, H460_MessageType::e_nonStandardMessage, nsm); #endif pdu.Prepare(nsm.m_tokens, H225_InfoRequestResponse::e_tokens, nsm.m_cryptoTokens, H225_InfoRequestResponse::e_cryptoTokens); } void H225_RAS::OnSendNonStandardMessage(H225_NonStandardMessage & /*nsm*/) { } PBoolean H225_RAS::OnReceiveNonStandardMessage(const H323RasPDU & pdu, const H225_NonStandardMessage & nsm) { if (!CheckCryptoTokens(pdu, nsm.m_tokens, H225_NonStandardMessage::e_tokens, nsm.m_cryptoTokens, H225_NonStandardMessage::e_cryptoTokens)) return FALSE; #ifdef H323_H460 ReceiveFeatureSet(this, H460_MessageType::e_nonStandardMessage, nsm); #endif return OnReceiveNonStandardMessage(nsm); } PBoolean H225_RAS::OnReceiveNonStandardMessage(const H225_NonStandardMessage & /*nsm*/) { return TRUE; } void H225_RAS::OnSendUnknownMessageResponse(H323RasPDU & pdu, H225_UnknownMessageResponse & umr) { OnSendUnknownMessageResponse(umr); pdu.Prepare(umr.m_tokens, H225_UnknownMessageResponse::e_tokens, umr.m_cryptoTokens, H225_UnknownMessageResponse::e_cryptoTokens); } void H225_RAS::OnSendUnknownMessageResponse(H225_UnknownMessageResponse & /*umr*/) { } PBoolean H225_RAS::OnReceiveUnknownMessageResponse(const H323RasPDU & pdu, const H225_UnknownMessageResponse & umr) { if (!CheckCryptoTokens(pdu, umr.m_tokens, H225_UnknownMessageResponse::e_tokens, umr.m_cryptoTokens, H225_UnknownMessageResponse::e_cryptoTokens)) return FALSE; return OnReceiveUnknownMessageResponse(umr); } PBoolean H225_RAS::OnReceiveUnknownMessageResponse(const H225_UnknownMessageResponse & /*umr*/) { return TRUE; } void H225_RAS::OnSendRequestInProgress(H323RasPDU & pdu, H225_RequestInProgress & rip) { OnSendRequestInProgress(rip); pdu.Prepare(rip.m_tokens, H225_RequestInProgress::e_tokens, rip.m_cryptoTokens, H225_RequestInProgress::e_cryptoTokens); } void H225_RAS::OnSendRequestInProgress(H225_RequestInProgress & /*rip*/) { } void H225_RAS::OnSendResourcesAvailableIndicate(H323RasPDU & pdu, H225_ResourcesAvailableIndicate & rai) { OnSendResourcesAvailableIndicate(rai); pdu.Prepare(rai.m_tokens, H225_ResourcesAvailableIndicate::e_tokens, rai.m_cryptoTokens, H225_ResourcesAvailableIndicate::e_cryptoTokens); } void H225_RAS::OnSendResourcesAvailableIndicate(H225_ResourcesAvailableIndicate & /*rai*/) { } PBoolean H225_RAS::OnReceiveResourcesAvailableIndicate(const H323RasPDU & pdu, const H225_ResourcesAvailableIndicate & rai) { if (!CheckCryptoTokens(pdu, rai.m_tokens, H225_ResourcesAvailableIndicate::e_tokens, rai.m_cryptoTokens, H225_ResourcesAvailableIndicate::e_cryptoTokens)) return FALSE; return OnReceiveResourcesAvailableIndicate(rai); } PBoolean H225_RAS::OnReceiveResourcesAvailableIndicate(const H225_ResourcesAvailableIndicate & /*rai*/) { return TRUE; } void H225_RAS::OnSendResourcesAvailableConfirm(H323RasPDU & pdu, H225_ResourcesAvailableConfirm & rac) { OnSendResourcesAvailableConfirm(rac); pdu.Prepare(rac.m_tokens, H225_ResourcesAvailableConfirm::e_tokens, rac.m_cryptoTokens, H225_ResourcesAvailableConfirm::e_cryptoTokens); } void H225_RAS::OnSendResourcesAvailableConfirm(H225_ResourcesAvailableConfirm & /*rac*/) { } PBoolean H225_RAS::OnReceiveResourcesAvailableConfirm(const H323RasPDU & pdu, const H225_ResourcesAvailableConfirm & rac) { if (!CheckForResponse(H225_RasMessage::e_resourcesAvailableIndicate, rac.m_requestSeqNum)) return FALSE; if (!CheckCryptoTokens(pdu, rac.m_tokens, H225_ResourcesAvailableConfirm::e_tokens, rac.m_cryptoTokens, H225_ResourcesAvailableConfirm::e_cryptoTokens)) return FALSE; return OnReceiveResourcesAvailableConfirm(rac); } PBoolean H225_RAS::OnReceiveResourcesAvailableConfirm(const H225_ResourcesAvailableConfirm & /*rac*/) { return TRUE; } void H225_RAS::OnSendServiceControlIndication(H323RasPDU & pdu, H225_ServiceControlIndication & sci) { OnSendServiceControlIndication(sci); #ifdef H323_H460 SendFeatureSet(this, H460_MessageType::e_serviceControlIndication, sci); #endif pdu.Prepare(sci.m_tokens, H225_ServiceControlIndication::e_tokens, sci.m_cryptoTokens, H225_ServiceControlIndication::e_cryptoTokens); } void H225_RAS::OnSendServiceControlIndication(H225_ServiceControlIndication & /*sci*/) { } PBoolean H225_RAS::OnReceiveServiceControlIndication(const H323RasPDU & pdu, const H225_ServiceControlIndication & sci) { if (!CheckCryptoTokens(pdu, sci.m_tokens, H225_ServiceControlIndication::e_tokens, sci.m_cryptoTokens, H225_ServiceControlIndication::e_cryptoTokens)) return FALSE; #ifdef H323_H460 ReceiveFeatureSet(this, H460_MessageType::e_serviceControlIndication, sci); #endif return OnReceiveServiceControlIndication(sci); } PBoolean H225_RAS::OnReceiveServiceControlIndication(const H225_ServiceControlIndication & /*sci*/) { return TRUE; } void H225_RAS::OnSendServiceControlResponse(H323RasPDU & pdu, H225_ServiceControlResponse & scr) { OnSendServiceControlResponse(scr); #ifdef H323_H460 SendFeatureSet(this, H460_MessageType::e_serviceControlResponse, scr); #endif pdu.Prepare(scr.m_tokens, H225_ResourcesAvailableConfirm::e_tokens, scr.m_cryptoTokens, H225_ResourcesAvailableConfirm::e_cryptoTokens); } void H225_RAS::OnSendServiceControlResponse(H225_ServiceControlResponse & /*scr*/) { } PBoolean H225_RAS::OnReceiveServiceControlResponse(const H323RasPDU & pdu, const H225_ServiceControlResponse & scr) { if (!CheckForResponse(H225_RasMessage::e_serviceControlIndication, scr.m_requestSeqNum)) return FALSE; if (!CheckCryptoTokens(pdu, scr.m_tokens, H225_ServiceControlResponse::e_tokens, scr.m_cryptoTokens, H225_ServiceControlResponse::e_cryptoTokens)) return FALSE; #ifdef H323_H460 ReceiveFeatureSet(this, H460_MessageType::e_serviceControlResponse, scr); #endif return OnReceiveServiceControlResponse(scr); } PBoolean H225_RAS::OnReceiveServiceControlResponse(const H225_ServiceControlResponse & /*scr*/) { return TRUE; } void H225_RAS::OnSendInfoRequestAck(H323RasPDU & pdu, H225_InfoRequestAck & iack) { OnSendInfoRequestAck(iack); pdu.Prepare(iack.m_tokens, H225_InfoRequestAck::e_tokens, iack.m_cryptoTokens, H225_InfoRequestAck::e_cryptoTokens); } void H225_RAS::OnSendInfoRequestAck(H225_InfoRequestAck & /*iack*/) { } PBoolean H225_RAS::OnReceiveInfoRequestAck(const H323RasPDU & pdu, const H225_InfoRequestAck & iack) { if (!CheckForResponse(H225_RasMessage::e_infoRequestResponse, iack.m_requestSeqNum)) return FALSE; if (!CheckCryptoTokens(pdu, iack.m_tokens, H225_InfoRequestAck::e_tokens, iack.m_cryptoTokens, H225_InfoRequestAck::e_cryptoTokens)) return FALSE; return OnReceiveInfoRequestAck(iack); } PBoolean H225_RAS::OnReceiveInfoRequestAck(const H225_InfoRequestAck & /*iack*/) { return TRUE; } void H225_RAS::OnSendInfoRequestNak(H323RasPDU & pdu, H225_InfoRequestNak & inak) { OnSendInfoRequestNak(inak); pdu.Prepare(inak.m_tokens, H225_InfoRequestAck::e_tokens, inak.m_cryptoTokens, H225_InfoRequestAck::e_cryptoTokens); } void H225_RAS::OnSendInfoRequestNak(H225_InfoRequestNak & /*inak*/) { } PBoolean H225_RAS::OnReceiveInfoRequestNak(const H323RasPDU & pdu, const H225_InfoRequestNak & inak) { if (!CheckForResponse(H225_RasMessage::e_infoRequestResponse, inak.m_requestSeqNum, &inak.m_nakReason)) return FALSE; if (!CheckCryptoTokens(pdu, inak.m_tokens, H225_InfoRequestNak::e_tokens, inak.m_cryptoTokens, H225_InfoRequestNak::e_cryptoTokens)) return FALSE; return OnReceiveInfoRequestNak(inak); } PBoolean H225_RAS::OnReceiveInfoRequestNak(const H225_InfoRequestNak & /*inak*/) { return TRUE; } PBoolean H225_RAS::OnReceiveUnknown(const H323RasPDU &) { H323RasPDU response; response.BuildUnknownMessageResponse(0); return response.Write(*transport); } ///////////////////////////////////////////////////////////////////////////// h323plus/src/h245_3.cxx0000644000175000017500000171745711015524315013351 0ustar markmark// // h245_3.cxx // // Code automatically generated by asnparse. // #include #include "h245.h" #define new PNEW #if ! H323_DISABLE_H245 // // FECData_rfc2733_pktMode_rfc2733diffport // H245_FECData_rfc2733_pktMode_rfc2733diffport::H245_FECData_rfc2733_pktMode_rfc2733diffport(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_FECData_rfc2733_pktMode_rfc2733diffport::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+19) << "protectedChannel = " << setprecision(indent) << m_protectedChannel << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_FECData_rfc2733_pktMode_rfc2733diffport::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_FECData_rfc2733_pktMode_rfc2733diffport), PInvalidCast); #endif const H245_FECData_rfc2733_pktMode_rfc2733diffport & other = (const H245_FECData_rfc2733_pktMode_rfc2733diffport &)obj; Comparison result; if ((result = m_protectedChannel.Compare(other.m_protectedChannel)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_FECData_rfc2733_pktMode_rfc2733diffport::GetDataLength() const { PINDEX length = 0; length += m_protectedChannel.GetObjectLength(); return length; } PBoolean H245_FECData_rfc2733_pktMode_rfc2733diffport::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_protectedChannel.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_FECData_rfc2733_pktMode_rfc2733diffport::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_protectedChannel.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_FECData_rfc2733_pktMode_rfc2733diffport::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_FECData_rfc2733_pktMode_rfc2733diffport::Class()), PInvalidCast); #endif return new H245_FECData_rfc2733_pktMode_rfc2733diffport(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_DepFECMode_rfc2733Mode_mode_separateStream[]={ {"differentPort",0} ,{"samePort",1} }; #endif // // DepFECMode_rfc2733Mode_mode_separateStream // H245_DepFECMode_rfc2733Mode_mode_separateStream::H245_DepFECMode_rfc2733Mode_mode_separateStream(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_DepFECMode_rfc2733Mode_mode_separateStream,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DepFECMode_rfc2733Mode_mode_separateStream::operator H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort &() const #else H245_DepFECMode_rfc2733Mode_mode_separateStream::operator H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort), PInvalidCast); #endif return *(H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort *)choice; } H245_DepFECMode_rfc2733Mode_mode_separateStream::operator const H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort), PInvalidCast); #endif return *(H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DepFECMode_rfc2733Mode_mode_separateStream::operator H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort &() const #else H245_DepFECMode_rfc2733Mode_mode_separateStream::operator H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort), PInvalidCast); #endif return *(H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort *)choice; } H245_DepFECMode_rfc2733Mode_mode_separateStream::operator const H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort), PInvalidCast); #endif return *(H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort *)choice; } PBoolean H245_DepFECMode_rfc2733Mode_mode_separateStream::CreateObject() { switch (tag) { case e_differentPort : choice = new H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort(); return TRUE; case e_samePort : choice = new H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_DepFECMode_rfc2733Mode_mode_separateStream::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DepFECMode_rfc2733Mode_mode_separateStream::Class()), PInvalidCast); #endif return new H245_DepFECMode_rfc2733Mode_mode_separateStream(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MultilinkResponse_addConnection_responseCode_rejected[]={ {"connectionsNotAvailable",0} ,{"userRejected",1} }; #endif // // MultilinkResponse_addConnection_responseCode_rejected // H245_MultilinkResponse_addConnection_responseCode_rejected::H245_MultilinkResponse_addConnection_responseCode_rejected(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MultilinkResponse_addConnection_responseCode_rejected,2 #endif ) { } PBoolean H245_MultilinkResponse_addConnection_responseCode_rejected::CreateObject() { choice = (tag <= e_userRejected) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_MultilinkResponse_addConnection_responseCode_rejected::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultilinkResponse_addConnection_responseCode_rejected::Class()), PInvalidCast); #endif return new H245_MultilinkResponse_addConnection_responseCode_rejected(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCount[]={ {"doOneProgression",0} ,{"doContinuousProgressions",1} ,{"doOneIndependentProgression",2} ,{"doContinuousIndependentProgressions",3} }; #endif // // MiscellaneousCommand_type_progressiveRefinementStart_repeatCount // H245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCount::H245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCount(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCount,4 #endif ) { } PBoolean H245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCount::CreateObject() { choice = (tag <= e_doContinuousIndependentProgressions) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCount::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCount::Class()), PInvalidCast); #endif return new H245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCount(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_NewATMVCCommand_aal_aal1_clockRecovery[]={ {"nullClockRecovery",0} ,{"srtsClockRecovery",1} ,{"adaptiveClockRecovery",2} }; #endif // // NewATMVCCommand_aal_aal1_clockRecovery // H245_NewATMVCCommand_aal_aal1_clockRecovery::H245_NewATMVCCommand_aal_aal1_clockRecovery(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_NewATMVCCommand_aal_aal1_clockRecovery,3 #endif ) { } PBoolean H245_NewATMVCCommand_aal_aal1_clockRecovery::CreateObject() { choice = (tag <= e_adaptiveClockRecovery) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_NewATMVCCommand_aal_aal1_clockRecovery::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NewATMVCCommand_aal_aal1_clockRecovery::Class()), PInvalidCast); #endif return new H245_NewATMVCCommand_aal_aal1_clockRecovery(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_NewATMVCCommand_aal_aal1_errorCorrection[]={ {"nullErrorCorrection",0} ,{"longInterleaver",1} ,{"shortInterleaver",2} ,{"errorCorrectionOnly",3} }; #endif // // NewATMVCCommand_aal_aal1_errorCorrection // H245_NewATMVCCommand_aal_aal1_errorCorrection::H245_NewATMVCCommand_aal_aal1_errorCorrection(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_NewATMVCCommand_aal_aal1_errorCorrection,4 #endif ) { } PBoolean H245_NewATMVCCommand_aal_aal1_errorCorrection::CreateObject() { choice = (tag <= e_errorCorrectionOnly) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_NewATMVCCommand_aal_aal1_errorCorrection::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NewATMVCCommand_aal_aal1_errorCorrection::Class()), PInvalidCast); #endif return new H245_NewATMVCCommand_aal_aal1_errorCorrection(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_NewATMVCIndication_aal_aal1_clockRecovery[]={ {"nullClockRecovery",0} ,{"srtsClockRecovery",1} ,{"adaptiveClockRecovery",2} }; #endif // // NewATMVCIndication_aal_aal1_clockRecovery // H245_NewATMVCIndication_aal_aal1_clockRecovery::H245_NewATMVCIndication_aal_aal1_clockRecovery(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_NewATMVCIndication_aal_aal1_clockRecovery,3 #endif ) { } PBoolean H245_NewATMVCIndication_aal_aal1_clockRecovery::CreateObject() { choice = (tag <= e_adaptiveClockRecovery) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_NewATMVCIndication_aal_aal1_clockRecovery::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NewATMVCIndication_aal_aal1_clockRecovery::Class()), PInvalidCast); #endif return new H245_NewATMVCIndication_aal_aal1_clockRecovery(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_NewATMVCIndication_aal_aal1_errorCorrection[]={ {"nullErrorCorrection",0} ,{"longInterleaver",1} ,{"shortInterleaver",2} ,{"errorCorrectionOnly",3} }; #endif // // NewATMVCIndication_aal_aal1_errorCorrection // H245_NewATMVCIndication_aal_aal1_errorCorrection::H245_NewATMVCIndication_aal_aal1_errorCorrection(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_NewATMVCIndication_aal_aal1_errorCorrection,4 #endif ) { } PBoolean H245_NewATMVCIndication_aal_aal1_errorCorrection::CreateObject() { choice = (tag <= e_errorCorrectionOnly) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_NewATMVCIndication_aal_aal1_errorCorrection::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NewATMVCIndication_aal_aal1_errorCorrection::Class()), PInvalidCast); #endif return new H245_NewATMVCIndication_aal_aal1_errorCorrection(*this); } // // DepFECData_rfc2733_mode_separateStream_differentPort // H245_DepFECData_rfc2733_mode_separateStream_differentPort::H245_DepFECData_rfc2733_mode_separateStream_differentPort(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_protectedSessionID.SetConstraints(PASN_Object::FixedConstraint, 1, 255); m_protectedPayloadType.SetConstraints(PASN_Object::FixedConstraint, 0, 127); } #ifndef PASN_NOPRINTON void H245_DepFECData_rfc2733_mode_separateStream_differentPort::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "protectedSessionID = " << setprecision(indent) << m_protectedSessionID << '\n'; if (HasOptionalField(e_protectedPayloadType)) strm << setw(indent+23) << "protectedPayloadType = " << setprecision(indent) << m_protectedPayloadType << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_DepFECData_rfc2733_mode_separateStream_differentPort::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_DepFECData_rfc2733_mode_separateStream_differentPort), PInvalidCast); #endif const H245_DepFECData_rfc2733_mode_separateStream_differentPort & other = (const H245_DepFECData_rfc2733_mode_separateStream_differentPort &)obj; Comparison result; if ((result = m_protectedSessionID.Compare(other.m_protectedSessionID)) != EqualTo) return result; if ((result = m_protectedPayloadType.Compare(other.m_protectedPayloadType)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_DepFECData_rfc2733_mode_separateStream_differentPort::GetDataLength() const { PINDEX length = 0; length += m_protectedSessionID.GetObjectLength(); if (HasOptionalField(e_protectedPayloadType)) length += m_protectedPayloadType.GetObjectLength(); return length; } PBoolean H245_DepFECData_rfc2733_mode_separateStream_differentPort::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_protectedSessionID.Decode(strm)) return FALSE; if (HasOptionalField(e_protectedPayloadType) && !m_protectedPayloadType.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_DepFECData_rfc2733_mode_separateStream_differentPort::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_protectedSessionID.Encode(strm); if (HasOptionalField(e_protectedPayloadType)) m_protectedPayloadType.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_DepFECData_rfc2733_mode_separateStream_differentPort::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DepFECData_rfc2733_mode_separateStream_differentPort::Class()), PInvalidCast); #endif return new H245_DepFECData_rfc2733_mode_separateStream_differentPort(*this); } // // DepFECData_rfc2733_mode_separateStream_samePort // H245_DepFECData_rfc2733_mode_separateStream_samePort::H245_DepFECData_rfc2733_mode_separateStream_samePort(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_protectedPayloadType.SetConstraints(PASN_Object::FixedConstraint, 0, 127); } #ifndef PASN_NOPRINTON void H245_DepFECData_rfc2733_mode_separateStream_samePort::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+23) << "protectedPayloadType = " << setprecision(indent) << m_protectedPayloadType << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_DepFECData_rfc2733_mode_separateStream_samePort::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_DepFECData_rfc2733_mode_separateStream_samePort), PInvalidCast); #endif const H245_DepFECData_rfc2733_mode_separateStream_samePort & other = (const H245_DepFECData_rfc2733_mode_separateStream_samePort &)obj; Comparison result; if ((result = m_protectedPayloadType.Compare(other.m_protectedPayloadType)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_DepFECData_rfc2733_mode_separateStream_samePort::GetDataLength() const { PINDEX length = 0; length += m_protectedPayloadType.GetObjectLength(); return length; } PBoolean H245_DepFECData_rfc2733_mode_separateStream_samePort::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_protectedPayloadType.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_DepFECData_rfc2733_mode_separateStream_samePort::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_protectedPayloadType.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_DepFECData_rfc2733_mode_separateStream_samePort::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DepFECData_rfc2733_mode_separateStream_samePort::Class()), PInvalidCast); #endif return new H245_DepFECData_rfc2733_mode_separateStream_samePort(*this); } // // DepFECMode_rfc2733Mode_mode_separateStream_differentPort // H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort::H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_protectedSessionID.SetConstraints(PASN_Object::FixedConstraint, 1, 255); m_protectedPayloadType.SetConstraints(PASN_Object::FixedConstraint, 0, 127); } #ifndef PASN_NOPRINTON void H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "protectedSessionID = " << setprecision(indent) << m_protectedSessionID << '\n'; if (HasOptionalField(e_protectedPayloadType)) strm << setw(indent+23) << "protectedPayloadType = " << setprecision(indent) << m_protectedPayloadType << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort), PInvalidCast); #endif const H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort & other = (const H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort &)obj; Comparison result; if ((result = m_protectedSessionID.Compare(other.m_protectedSessionID)) != EqualTo) return result; if ((result = m_protectedPayloadType.Compare(other.m_protectedPayloadType)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort::GetDataLength() const { PINDEX length = 0; length += m_protectedSessionID.GetObjectLength(); if (HasOptionalField(e_protectedPayloadType)) length += m_protectedPayloadType.GetObjectLength(); return length; } PBoolean H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_protectedSessionID.Decode(strm)) return FALSE; if (HasOptionalField(e_protectedPayloadType) && !m_protectedPayloadType.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_protectedSessionID.Encode(strm); if (HasOptionalField(e_protectedPayloadType)) m_protectedPayloadType.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort::Class()), PInvalidCast); #endif return new H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort(*this); } // // DepFECMode_rfc2733Mode_mode_separateStream_samePort // H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort::H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "protectedType = " << setprecision(indent) << m_protectedType << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort), PInvalidCast); #endif const H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort & other = (const H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort &)obj; Comparison result; if ((result = m_protectedType.Compare(other.m_protectedType)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort::GetDataLength() const { PINDEX length = 0; length += m_protectedType.GetObjectLength(); return length; } PBoolean H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_protectedType.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_protectedType.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort::Class()), PInvalidCast); #endif return new H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort(*this); } // // GenericMessage // H245_GenericMessage::H245_GenericMessage(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_subMessageIdentifier.SetConstraints(PASN_Object::FixedConstraint, 0, 127); } #ifndef PASN_NOPRINTON void H245_GenericMessage::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+20) << "messageIdentifier = " << setprecision(indent) << m_messageIdentifier << '\n'; if (HasOptionalField(e_subMessageIdentifier)) strm << setw(indent+23) << "subMessageIdentifier = " << setprecision(indent) << m_subMessageIdentifier << '\n'; if (HasOptionalField(e_messageContent)) strm << setw(indent+17) << "messageContent = " << setprecision(indent) << m_messageContent << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_GenericMessage::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_GenericMessage), PInvalidCast); #endif const H245_GenericMessage & other = (const H245_GenericMessage &)obj; Comparison result; if ((result = m_messageIdentifier.Compare(other.m_messageIdentifier)) != EqualTo) return result; if ((result = m_subMessageIdentifier.Compare(other.m_subMessageIdentifier)) != EqualTo) return result; if ((result = m_messageContent.Compare(other.m_messageContent)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_GenericMessage::GetDataLength() const { PINDEX length = 0; length += m_messageIdentifier.GetObjectLength(); if (HasOptionalField(e_subMessageIdentifier)) length += m_subMessageIdentifier.GetObjectLength(); if (HasOptionalField(e_messageContent)) length += m_messageContent.GetObjectLength(); return length; } PBoolean H245_GenericMessage::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_messageIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_subMessageIdentifier) && !m_subMessageIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_messageContent) && !m_messageContent.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_GenericMessage::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_messageIdentifier.Encode(strm); if (HasOptionalField(e_subMessageIdentifier)) m_subMessageIdentifier.Encode(strm); if (HasOptionalField(e_messageContent)) m_messageContent.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_GenericMessage::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_GenericMessage::Class()), PInvalidCast); #endif return new H245_GenericMessage(*this); } // // GenericInformation // H245_GenericInformation::H245_GenericInformation(unsigned tag, PASN_Object::TagClass tagClass) : H245_GenericMessage(tag, tagClass) { } PObject * H245_GenericInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_GenericInformation::Class()), PInvalidCast); #endif return new H245_GenericInformation(*this); } // // NonStandardParameter // H245_NonStandardParameter::H245_NonStandardParameter(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H245_NonStandardParameter::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "nonStandardIdentifier = " << setprecision(indent) << m_nonStandardIdentifier << '\n'; strm << setw(indent+7) << "data = " << setprecision(indent) << m_data << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_NonStandardParameter::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_NonStandardParameter), PInvalidCast); #endif const H245_NonStandardParameter & other = (const H245_NonStandardParameter &)obj; Comparison result; if ((result = m_nonStandardIdentifier.Compare(other.m_nonStandardIdentifier)) != EqualTo) return result; if ((result = m_data.Compare(other.m_data)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_NonStandardParameter::GetDataLength() const { PINDEX length = 0; length += m_nonStandardIdentifier.GetObjectLength(); length += m_data.GetObjectLength(); return length; } PBoolean H245_NonStandardParameter::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nonStandardIdentifier.Decode(strm)) return FALSE; if (!m_data.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_NonStandardParameter::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nonStandardIdentifier.Encode(strm); m_data.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_NonStandardParameter::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NonStandardParameter::Class()), PInvalidCast); #endif return new H245_NonStandardParameter(*this); } // // MasterSlaveDeterminationAck // H245_MasterSlaveDeterminationAck::H245_MasterSlaveDeterminationAck(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MasterSlaveDeterminationAck::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "decision = " << setprecision(indent) << m_decision << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MasterSlaveDeterminationAck::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MasterSlaveDeterminationAck), PInvalidCast); #endif const H245_MasterSlaveDeterminationAck & other = (const H245_MasterSlaveDeterminationAck &)obj; Comparison result; if ((result = m_decision.Compare(other.m_decision)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MasterSlaveDeterminationAck::GetDataLength() const { PINDEX length = 0; length += m_decision.GetObjectLength(); return length; } PBoolean H245_MasterSlaveDeterminationAck::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_decision.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MasterSlaveDeterminationAck::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_decision.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MasterSlaveDeterminationAck::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MasterSlaveDeterminationAck::Class()), PInvalidCast); #endif return new H245_MasterSlaveDeterminationAck(*this); } // // MasterSlaveDeterminationReject // H245_MasterSlaveDeterminationReject::H245_MasterSlaveDeterminationReject(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MasterSlaveDeterminationReject::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+8) << "cause = " << setprecision(indent) << m_cause << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MasterSlaveDeterminationReject::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MasterSlaveDeterminationReject), PInvalidCast); #endif const H245_MasterSlaveDeterminationReject & other = (const H245_MasterSlaveDeterminationReject &)obj; Comparison result; if ((result = m_cause.Compare(other.m_cause)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MasterSlaveDeterminationReject::GetDataLength() const { PINDEX length = 0; length += m_cause.GetObjectLength(); return length; } PBoolean H245_MasterSlaveDeterminationReject::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_cause.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MasterSlaveDeterminationReject::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_cause.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MasterSlaveDeterminationReject::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MasterSlaveDeterminationReject::Class()), PInvalidCast); #endif return new H245_MasterSlaveDeterminationReject(*this); } // // TerminalCapabilitySet // H245_TerminalCapabilitySet::H245_TerminalCapabilitySet(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 1) { m_capabilityTable.SetConstraints(PASN_Object::FixedConstraint, 1, 256); m_capabilityDescriptors.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_TerminalCapabilitySet::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "sequenceNumber = " << setprecision(indent) << m_sequenceNumber << '\n'; strm << setw(indent+21) << "protocolIdentifier = " << setprecision(indent) << m_protocolIdentifier << '\n'; if (HasOptionalField(e_multiplexCapability)) strm << setw(indent+22) << "multiplexCapability = " << setprecision(indent) << m_multiplexCapability << '\n'; if (HasOptionalField(e_capabilityTable)) strm << setw(indent+18) << "capabilityTable = " << setprecision(indent) << m_capabilityTable << '\n'; if (HasOptionalField(e_capabilityDescriptors)) strm << setw(indent+24) << "capabilityDescriptors = " << setprecision(indent) << m_capabilityDescriptors << '\n'; if (HasOptionalField(e_genericInformation)) strm << setw(indent+21) << "genericInformation = " << setprecision(indent) << m_genericInformation << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_TerminalCapabilitySet::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_TerminalCapabilitySet), PInvalidCast); #endif const H245_TerminalCapabilitySet & other = (const H245_TerminalCapabilitySet &)obj; Comparison result; if ((result = m_sequenceNumber.Compare(other.m_sequenceNumber)) != EqualTo) return result; if ((result = m_protocolIdentifier.Compare(other.m_protocolIdentifier)) != EqualTo) return result; if ((result = m_multiplexCapability.Compare(other.m_multiplexCapability)) != EqualTo) return result; if ((result = m_capabilityTable.Compare(other.m_capabilityTable)) != EqualTo) return result; if ((result = m_capabilityDescriptors.Compare(other.m_capabilityDescriptors)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_TerminalCapabilitySet::GetDataLength() const { PINDEX length = 0; length += m_sequenceNumber.GetObjectLength(); length += m_protocolIdentifier.GetObjectLength(); if (HasOptionalField(e_multiplexCapability)) length += m_multiplexCapability.GetObjectLength(); if (HasOptionalField(e_capabilityTable)) length += m_capabilityTable.GetObjectLength(); if (HasOptionalField(e_capabilityDescriptors)) length += m_capabilityDescriptors.GetObjectLength(); return length; } PBoolean H245_TerminalCapabilitySet::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sequenceNumber.Decode(strm)) return FALSE; if (!m_protocolIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_multiplexCapability) && !m_multiplexCapability.Decode(strm)) return FALSE; if (HasOptionalField(e_capabilityTable) && !m_capabilityTable.Decode(strm)) return FALSE; if (HasOptionalField(e_capabilityDescriptors) && !m_capabilityDescriptors.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_genericInformation, m_genericInformation)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_TerminalCapabilitySet::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sequenceNumber.Encode(strm); m_protocolIdentifier.Encode(strm); if (HasOptionalField(e_multiplexCapability)) m_multiplexCapability.Encode(strm); if (HasOptionalField(e_capabilityTable)) m_capabilityTable.Encode(strm); if (HasOptionalField(e_capabilityDescriptors)) m_capabilityDescriptors.Encode(strm); KnownExtensionEncode(strm, e_genericInformation, m_genericInformation); UnknownExtensionsEncode(strm); } PObject * H245_TerminalCapabilitySet::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_TerminalCapabilitySet::Class()), PInvalidCast); #endif return new H245_TerminalCapabilitySet(*this); } // // CapabilityTableEntry // H245_CapabilityTableEntry::H245_CapabilityTableEntry(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { } #ifndef PASN_NOPRINTON void H245_CapabilityTableEntry::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+29) << "capabilityTableEntryNumber = " << setprecision(indent) << m_capabilityTableEntryNumber << '\n'; if (HasOptionalField(e_capability)) strm << setw(indent+13) << "capability = " << setprecision(indent) << m_capability << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_CapabilityTableEntry::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_CapabilityTableEntry), PInvalidCast); #endif const H245_CapabilityTableEntry & other = (const H245_CapabilityTableEntry &)obj; Comparison result; if ((result = m_capabilityTableEntryNumber.Compare(other.m_capabilityTableEntryNumber)) != EqualTo) return result; if ((result = m_capability.Compare(other.m_capability)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_CapabilityTableEntry::GetDataLength() const { PINDEX length = 0; length += m_capabilityTableEntryNumber.GetObjectLength(); if (HasOptionalField(e_capability)) length += m_capability.GetObjectLength(); return length; } PBoolean H245_CapabilityTableEntry::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_capabilityTableEntryNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_capability) && !m_capability.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_CapabilityTableEntry::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_capabilityTableEntryNumber.Encode(strm); if (HasOptionalField(e_capability)) m_capability.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_CapabilityTableEntry::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CapabilityTableEntry::Class()), PInvalidCast); #endif return new H245_CapabilityTableEntry(*this); } // // CapabilityDescriptor // H245_CapabilityDescriptor::H245_CapabilityDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { m_simultaneousCapabilities.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_CapabilityDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+29) << "capabilityDescriptorNumber = " << setprecision(indent) << m_capabilityDescriptorNumber << '\n'; if (HasOptionalField(e_simultaneousCapabilities)) strm << setw(indent+27) << "simultaneousCapabilities = " << setprecision(indent) << m_simultaneousCapabilities << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_CapabilityDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_CapabilityDescriptor), PInvalidCast); #endif const H245_CapabilityDescriptor & other = (const H245_CapabilityDescriptor &)obj; Comparison result; if ((result = m_capabilityDescriptorNumber.Compare(other.m_capabilityDescriptorNumber)) != EqualTo) return result; if ((result = m_simultaneousCapabilities.Compare(other.m_simultaneousCapabilities)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_CapabilityDescriptor::GetDataLength() const { PINDEX length = 0; length += m_capabilityDescriptorNumber.GetObjectLength(); if (HasOptionalField(e_simultaneousCapabilities)) length += m_simultaneousCapabilities.GetObjectLength(); return length; } PBoolean H245_CapabilityDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_capabilityDescriptorNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_simultaneousCapabilities) && !m_simultaneousCapabilities.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_CapabilityDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_capabilityDescriptorNumber.Encode(strm); if (HasOptionalField(e_simultaneousCapabilities)) m_simultaneousCapabilities.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_CapabilityDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CapabilityDescriptor::Class()), PInvalidCast); #endif return new H245_CapabilityDescriptor(*this); } // // TerminalCapabilitySetAck // H245_TerminalCapabilitySetAck::H245_TerminalCapabilitySetAck(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 1) { } #ifndef PASN_NOPRINTON void H245_TerminalCapabilitySetAck::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "sequenceNumber = " << setprecision(indent) << m_sequenceNumber << '\n'; if (HasOptionalField(e_genericInformation)) strm << setw(indent+21) << "genericInformation = " << setprecision(indent) << m_genericInformation << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_TerminalCapabilitySetAck::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_TerminalCapabilitySetAck), PInvalidCast); #endif const H245_TerminalCapabilitySetAck & other = (const H245_TerminalCapabilitySetAck &)obj; Comparison result; if ((result = m_sequenceNumber.Compare(other.m_sequenceNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_TerminalCapabilitySetAck::GetDataLength() const { PINDEX length = 0; length += m_sequenceNumber.GetObjectLength(); return length; } PBoolean H245_TerminalCapabilitySetAck::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sequenceNumber.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_genericInformation, m_genericInformation)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_TerminalCapabilitySetAck::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sequenceNumber.Encode(strm); KnownExtensionEncode(strm, e_genericInformation, m_genericInformation); UnknownExtensionsEncode(strm); } PObject * H245_TerminalCapabilitySetAck::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_TerminalCapabilitySetAck::Class()), PInvalidCast); #endif return new H245_TerminalCapabilitySetAck(*this); } // // TerminalCapabilitySetReject // H245_TerminalCapabilitySetReject::H245_TerminalCapabilitySetReject(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 1) { } #ifndef PASN_NOPRINTON void H245_TerminalCapabilitySetReject::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "sequenceNumber = " << setprecision(indent) << m_sequenceNumber << '\n'; strm << setw(indent+8) << "cause = " << setprecision(indent) << m_cause << '\n'; if (HasOptionalField(e_genericInformation)) strm << setw(indent+21) << "genericInformation = " << setprecision(indent) << m_genericInformation << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_TerminalCapabilitySetReject::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_TerminalCapabilitySetReject), PInvalidCast); #endif const H245_TerminalCapabilitySetReject & other = (const H245_TerminalCapabilitySetReject &)obj; Comparison result; if ((result = m_sequenceNumber.Compare(other.m_sequenceNumber)) != EqualTo) return result; if ((result = m_cause.Compare(other.m_cause)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_TerminalCapabilitySetReject::GetDataLength() const { PINDEX length = 0; length += m_sequenceNumber.GetObjectLength(); length += m_cause.GetObjectLength(); return length; } PBoolean H245_TerminalCapabilitySetReject::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sequenceNumber.Decode(strm)) return FALSE; if (!m_cause.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_genericInformation, m_genericInformation)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_TerminalCapabilitySetReject::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sequenceNumber.Encode(strm); m_cause.Encode(strm); KnownExtensionEncode(strm, e_genericInformation, m_genericInformation); UnknownExtensionsEncode(strm); } PObject * H245_TerminalCapabilitySetReject::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_TerminalCapabilitySetReject::Class()), PInvalidCast); #endif return new H245_TerminalCapabilitySetReject(*this); } // // TerminalCapabilitySetRelease // H245_TerminalCapabilitySetRelease::H245_TerminalCapabilitySetRelease(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 1) { } #ifndef PASN_NOPRINTON void H245_TerminalCapabilitySetRelease::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_genericInformation)) strm << setw(indent+21) << "genericInformation = " << setprecision(indent) << m_genericInformation << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX H245_TerminalCapabilitySetRelease::GetDataLength() const { PINDEX length = 0; return length; } PBoolean H245_TerminalCapabilitySetRelease::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_genericInformation, m_genericInformation)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_TerminalCapabilitySetRelease::Encode(PASN_Stream & strm) const { PreambleEncode(strm); KnownExtensionEncode(strm, e_genericInformation, m_genericInformation); UnknownExtensionsEncode(strm); } PObject * H245_TerminalCapabilitySetRelease::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_TerminalCapabilitySetRelease::Class()), PInvalidCast); #endif return new H245_TerminalCapabilitySetRelease(*this); } // // H222Capability // H245_H222Capability::H245_H222Capability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_numberOfVCs.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_H222Capability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "numberOfVCs = " << setprecision(indent) << m_numberOfVCs << '\n'; strm << setw(indent+15) << "vcCapability = " << setprecision(indent) << m_vcCapability << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H222Capability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H222Capability), PInvalidCast); #endif const H245_H222Capability & other = (const H245_H222Capability &)obj; Comparison result; if ((result = m_numberOfVCs.Compare(other.m_numberOfVCs)) != EqualTo) return result; if ((result = m_vcCapability.Compare(other.m_vcCapability)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H222Capability::GetDataLength() const { PINDEX length = 0; length += m_numberOfVCs.GetObjectLength(); length += m_vcCapability.GetObjectLength(); return length; } PBoolean H245_H222Capability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_numberOfVCs.Decode(strm)) return FALSE; if (!m_vcCapability.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H222Capability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_numberOfVCs.Encode(strm); m_vcCapability.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H222Capability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H222Capability::Class()), PInvalidCast); #endif return new H245_H222Capability(*this); } // // H223Capability // H245_H223Capability::H245_H223Capability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 6) { m_maximumAl2SDUSize.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); m_maximumAl3SDUSize.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); m_maximumDelayJitter.SetConstraints(PASN_Object::FixedConstraint, 0, 1023); IncludeOptionalField(e_maxMUXPDUSizeCapability); IncludeOptionalField(e_nsrpSupport); m_bitRate.SetConstraints(PASN_Object::FixedConstraint, 1, 19200); } #ifndef PASN_NOPRINTON void H245_H223Capability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "transportWithI_frames = " << setprecision(indent) << m_transportWithI_frames << '\n'; strm << setw(indent+15) << "videoWithAL1 = " << setprecision(indent) << m_videoWithAL1 << '\n'; strm << setw(indent+15) << "videoWithAL2 = " << setprecision(indent) << m_videoWithAL2 << '\n'; strm << setw(indent+15) << "videoWithAL3 = " << setprecision(indent) << m_videoWithAL3 << '\n'; strm << setw(indent+15) << "audioWithAL1 = " << setprecision(indent) << m_audioWithAL1 << '\n'; strm << setw(indent+15) << "audioWithAL2 = " << setprecision(indent) << m_audioWithAL2 << '\n'; strm << setw(indent+15) << "audioWithAL3 = " << setprecision(indent) << m_audioWithAL3 << '\n'; strm << setw(indent+14) << "dataWithAL1 = " << setprecision(indent) << m_dataWithAL1 << '\n'; strm << setw(indent+14) << "dataWithAL2 = " << setprecision(indent) << m_dataWithAL2 << '\n'; strm << setw(indent+14) << "dataWithAL3 = " << setprecision(indent) << m_dataWithAL3 << '\n'; strm << setw(indent+20) << "maximumAl2SDUSize = " << setprecision(indent) << m_maximumAl2SDUSize << '\n'; strm << setw(indent+20) << "maximumAl3SDUSize = " << setprecision(indent) << m_maximumAl3SDUSize << '\n'; strm << setw(indent+21) << "maximumDelayJitter = " << setprecision(indent) << m_maximumDelayJitter << '\n'; strm << setw(indent+31) << "h223MultiplexTableCapability = " << setprecision(indent) << m_h223MultiplexTableCapability << '\n'; if (HasOptionalField(e_maxMUXPDUSizeCapability)) strm << setw(indent+26) << "maxMUXPDUSizeCapability = " << setprecision(indent) << m_maxMUXPDUSizeCapability << '\n'; if (HasOptionalField(e_nsrpSupport)) strm << setw(indent+14) << "nsrpSupport = " << setprecision(indent) << m_nsrpSupport << '\n'; if (HasOptionalField(e_mobileOperationTransmitCapability)) strm << setw(indent+36) << "mobileOperationTransmitCapability = " << setprecision(indent) << m_mobileOperationTransmitCapability << '\n'; if (HasOptionalField(e_h223AnnexCCapability)) strm << setw(indent+23) << "h223AnnexCCapability = " << setprecision(indent) << m_h223AnnexCCapability << '\n'; if (HasOptionalField(e_bitRate)) strm << setw(indent+10) << "bitRate = " << setprecision(indent) << m_bitRate << '\n'; if (HasOptionalField(e_mobileMultilinkFrameCapability)) strm << setw(indent+33) << "mobileMultilinkFrameCapability = " << setprecision(indent) << m_mobileMultilinkFrameCapability << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H223Capability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H223Capability), PInvalidCast); #endif const H245_H223Capability & other = (const H245_H223Capability &)obj; Comparison result; if ((result = m_transportWithI_frames.Compare(other.m_transportWithI_frames)) != EqualTo) return result; if ((result = m_videoWithAL1.Compare(other.m_videoWithAL1)) != EqualTo) return result; if ((result = m_videoWithAL2.Compare(other.m_videoWithAL2)) != EqualTo) return result; if ((result = m_videoWithAL3.Compare(other.m_videoWithAL3)) != EqualTo) return result; if ((result = m_audioWithAL1.Compare(other.m_audioWithAL1)) != EqualTo) return result; if ((result = m_audioWithAL2.Compare(other.m_audioWithAL2)) != EqualTo) return result; if ((result = m_audioWithAL3.Compare(other.m_audioWithAL3)) != EqualTo) return result; if ((result = m_dataWithAL1.Compare(other.m_dataWithAL1)) != EqualTo) return result; if ((result = m_dataWithAL2.Compare(other.m_dataWithAL2)) != EqualTo) return result; if ((result = m_dataWithAL3.Compare(other.m_dataWithAL3)) != EqualTo) return result; if ((result = m_maximumAl2SDUSize.Compare(other.m_maximumAl2SDUSize)) != EqualTo) return result; if ((result = m_maximumAl3SDUSize.Compare(other.m_maximumAl3SDUSize)) != EqualTo) return result; if ((result = m_maximumDelayJitter.Compare(other.m_maximumDelayJitter)) != EqualTo) return result; if ((result = m_h223MultiplexTableCapability.Compare(other.m_h223MultiplexTableCapability)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H223Capability::GetDataLength() const { PINDEX length = 0; length += m_transportWithI_frames.GetObjectLength(); length += m_videoWithAL1.GetObjectLength(); length += m_videoWithAL2.GetObjectLength(); length += m_videoWithAL3.GetObjectLength(); length += m_audioWithAL1.GetObjectLength(); length += m_audioWithAL2.GetObjectLength(); length += m_audioWithAL3.GetObjectLength(); length += m_dataWithAL1.GetObjectLength(); length += m_dataWithAL2.GetObjectLength(); length += m_dataWithAL3.GetObjectLength(); length += m_maximumAl2SDUSize.GetObjectLength(); length += m_maximumAl3SDUSize.GetObjectLength(); length += m_maximumDelayJitter.GetObjectLength(); length += m_h223MultiplexTableCapability.GetObjectLength(); return length; } PBoolean H245_H223Capability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_transportWithI_frames.Decode(strm)) return FALSE; if (!m_videoWithAL1.Decode(strm)) return FALSE; if (!m_videoWithAL2.Decode(strm)) return FALSE; if (!m_videoWithAL3.Decode(strm)) return FALSE; if (!m_audioWithAL1.Decode(strm)) return FALSE; if (!m_audioWithAL2.Decode(strm)) return FALSE; if (!m_audioWithAL3.Decode(strm)) return FALSE; if (!m_dataWithAL1.Decode(strm)) return FALSE; if (!m_dataWithAL2.Decode(strm)) return FALSE; if (!m_dataWithAL3.Decode(strm)) return FALSE; if (!m_maximumAl2SDUSize.Decode(strm)) return FALSE; if (!m_maximumAl3SDUSize.Decode(strm)) return FALSE; if (!m_maximumDelayJitter.Decode(strm)) return FALSE; if (!m_h223MultiplexTableCapability.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_maxMUXPDUSizeCapability, m_maxMUXPDUSizeCapability)) return FALSE; if (!KnownExtensionDecode(strm, e_nsrpSupport, m_nsrpSupport)) return FALSE; if (!KnownExtensionDecode(strm, e_mobileOperationTransmitCapability, m_mobileOperationTransmitCapability)) return FALSE; if (!KnownExtensionDecode(strm, e_h223AnnexCCapability, m_h223AnnexCCapability)) return FALSE; if (!KnownExtensionDecode(strm, e_bitRate, m_bitRate)) return FALSE; if (!KnownExtensionDecode(strm, e_mobileMultilinkFrameCapability, m_mobileMultilinkFrameCapability)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H223Capability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_transportWithI_frames.Encode(strm); m_videoWithAL1.Encode(strm); m_videoWithAL2.Encode(strm); m_videoWithAL3.Encode(strm); m_audioWithAL1.Encode(strm); m_audioWithAL2.Encode(strm); m_audioWithAL3.Encode(strm); m_dataWithAL1.Encode(strm); m_dataWithAL2.Encode(strm); m_dataWithAL3.Encode(strm); m_maximumAl2SDUSize.Encode(strm); m_maximumAl3SDUSize.Encode(strm); m_maximumDelayJitter.Encode(strm); m_h223MultiplexTableCapability.Encode(strm); KnownExtensionEncode(strm, e_maxMUXPDUSizeCapability, m_maxMUXPDUSizeCapability); KnownExtensionEncode(strm, e_nsrpSupport, m_nsrpSupport); KnownExtensionEncode(strm, e_mobileOperationTransmitCapability, m_mobileOperationTransmitCapability); KnownExtensionEncode(strm, e_h223AnnexCCapability, m_h223AnnexCCapability); KnownExtensionEncode(strm, e_bitRate, m_bitRate); KnownExtensionEncode(strm, e_mobileMultilinkFrameCapability, m_mobileMultilinkFrameCapability); UnknownExtensionsEncode(strm); } PObject * H245_H223Capability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223Capability::Class()), PInvalidCast); #endif return new H245_H223Capability(*this); } // // V76Capability // H245_V76Capability::H245_V76Capability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_numOfDLCS.SetConstraints(PASN_Object::FixedConstraint, 2, 8191); m_n401Capability.SetConstraints(PASN_Object::FixedConstraint, 1, 4095); m_maxWindowSizeCapability.SetConstraints(PASN_Object::FixedConstraint, 1, 127); } #ifndef PASN_NOPRINTON void H245_V76Capability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+34) << "suspendResumeCapabilitywAddress = " << setprecision(indent) << m_suspendResumeCapabilitywAddress << '\n'; strm << setw(indent+35) << "suspendResumeCapabilitywoAddress = " << setprecision(indent) << m_suspendResumeCapabilitywoAddress << '\n'; strm << setw(indent+16) << "rejCapability = " << setprecision(indent) << m_rejCapability << '\n'; strm << setw(indent+17) << "sREJCapability = " << setprecision(indent) << m_sREJCapability << '\n'; strm << setw(indent+17) << "mREJCapability = " << setprecision(indent) << m_mREJCapability << '\n'; strm << setw(indent+20) << "crc8bitCapability = " << setprecision(indent) << m_crc8bitCapability << '\n'; strm << setw(indent+21) << "crc16bitCapability = " << setprecision(indent) << m_crc16bitCapability << '\n'; strm << setw(indent+21) << "crc32bitCapability = " << setprecision(indent) << m_crc32bitCapability << '\n'; strm << setw(indent+16) << "uihCapability = " << setprecision(indent) << m_uihCapability << '\n'; strm << setw(indent+12) << "numOfDLCS = " << setprecision(indent) << m_numOfDLCS << '\n'; strm << setw(indent+33) << "twoOctetAddressFieldCapability = " << setprecision(indent) << m_twoOctetAddressFieldCapability << '\n'; strm << setw(indent+25) << "loopBackTestCapability = " << setprecision(indent) << m_loopBackTestCapability << '\n'; strm << setw(indent+17) << "n401Capability = " << setprecision(indent) << m_n401Capability << '\n'; strm << setw(indent+26) << "maxWindowSizeCapability = " << setprecision(indent) << m_maxWindowSizeCapability << '\n'; strm << setw(indent+16) << "v75Capability = " << setprecision(indent) << m_v75Capability << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_V76Capability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_V76Capability), PInvalidCast); #endif const H245_V76Capability & other = (const H245_V76Capability &)obj; Comparison result; if ((result = m_suspendResumeCapabilitywAddress.Compare(other.m_suspendResumeCapabilitywAddress)) != EqualTo) return result; if ((result = m_suspendResumeCapabilitywoAddress.Compare(other.m_suspendResumeCapabilitywoAddress)) != EqualTo) return result; if ((result = m_rejCapability.Compare(other.m_rejCapability)) != EqualTo) return result; if ((result = m_sREJCapability.Compare(other.m_sREJCapability)) != EqualTo) return result; if ((result = m_mREJCapability.Compare(other.m_mREJCapability)) != EqualTo) return result; if ((result = m_crc8bitCapability.Compare(other.m_crc8bitCapability)) != EqualTo) return result; if ((result = m_crc16bitCapability.Compare(other.m_crc16bitCapability)) != EqualTo) return result; if ((result = m_crc32bitCapability.Compare(other.m_crc32bitCapability)) != EqualTo) return result; if ((result = m_uihCapability.Compare(other.m_uihCapability)) != EqualTo) return result; if ((result = m_numOfDLCS.Compare(other.m_numOfDLCS)) != EqualTo) return result; if ((result = m_twoOctetAddressFieldCapability.Compare(other.m_twoOctetAddressFieldCapability)) != EqualTo) return result; if ((result = m_loopBackTestCapability.Compare(other.m_loopBackTestCapability)) != EqualTo) return result; if ((result = m_n401Capability.Compare(other.m_n401Capability)) != EqualTo) return result; if ((result = m_maxWindowSizeCapability.Compare(other.m_maxWindowSizeCapability)) != EqualTo) return result; if ((result = m_v75Capability.Compare(other.m_v75Capability)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_V76Capability::GetDataLength() const { PINDEX length = 0; length += m_suspendResumeCapabilitywAddress.GetObjectLength(); length += m_suspendResumeCapabilitywoAddress.GetObjectLength(); length += m_rejCapability.GetObjectLength(); length += m_sREJCapability.GetObjectLength(); length += m_mREJCapability.GetObjectLength(); length += m_crc8bitCapability.GetObjectLength(); length += m_crc16bitCapability.GetObjectLength(); length += m_crc32bitCapability.GetObjectLength(); length += m_uihCapability.GetObjectLength(); length += m_numOfDLCS.GetObjectLength(); length += m_twoOctetAddressFieldCapability.GetObjectLength(); length += m_loopBackTestCapability.GetObjectLength(); length += m_n401Capability.GetObjectLength(); length += m_maxWindowSizeCapability.GetObjectLength(); length += m_v75Capability.GetObjectLength(); return length; } PBoolean H245_V76Capability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_suspendResumeCapabilitywAddress.Decode(strm)) return FALSE; if (!m_suspendResumeCapabilitywoAddress.Decode(strm)) return FALSE; if (!m_rejCapability.Decode(strm)) return FALSE; if (!m_sREJCapability.Decode(strm)) return FALSE; if (!m_mREJCapability.Decode(strm)) return FALSE; if (!m_crc8bitCapability.Decode(strm)) return FALSE; if (!m_crc16bitCapability.Decode(strm)) return FALSE; if (!m_crc32bitCapability.Decode(strm)) return FALSE; if (!m_uihCapability.Decode(strm)) return FALSE; if (!m_numOfDLCS.Decode(strm)) return FALSE; if (!m_twoOctetAddressFieldCapability.Decode(strm)) return FALSE; if (!m_loopBackTestCapability.Decode(strm)) return FALSE; if (!m_n401Capability.Decode(strm)) return FALSE; if (!m_maxWindowSizeCapability.Decode(strm)) return FALSE; if (!m_v75Capability.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_V76Capability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_suspendResumeCapabilitywAddress.Encode(strm); m_suspendResumeCapabilitywoAddress.Encode(strm); m_rejCapability.Encode(strm); m_sREJCapability.Encode(strm); m_mREJCapability.Encode(strm); m_crc8bitCapability.Encode(strm); m_crc16bitCapability.Encode(strm); m_crc32bitCapability.Encode(strm); m_uihCapability.Encode(strm); m_numOfDLCS.Encode(strm); m_twoOctetAddressFieldCapability.Encode(strm); m_loopBackTestCapability.Encode(strm); m_n401Capability.Encode(strm); m_maxWindowSizeCapability.Encode(strm); m_v75Capability.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_V76Capability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_V76Capability::Class()), PInvalidCast); #endif return new H245_V76Capability(*this); } // // MediaPacketizationCapability // H245_MediaPacketizationCapability::H245_MediaPacketizationCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 1) { m_rtpPayloadType.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_MediaPacketizationCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+26) << "h261aVideoPacketization = " << setprecision(indent) << m_h261aVideoPacketization << '\n'; if (HasOptionalField(e_rtpPayloadType)) strm << setw(indent+17) << "rtpPayloadType = " << setprecision(indent) << m_rtpPayloadType << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MediaPacketizationCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MediaPacketizationCapability), PInvalidCast); #endif const H245_MediaPacketizationCapability & other = (const H245_MediaPacketizationCapability &)obj; Comparison result; if ((result = m_h261aVideoPacketization.Compare(other.m_h261aVideoPacketization)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MediaPacketizationCapability::GetDataLength() const { PINDEX length = 0; length += m_h261aVideoPacketization.GetObjectLength(); return length; } PBoolean H245_MediaPacketizationCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_h261aVideoPacketization.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_rtpPayloadType, m_rtpPayloadType)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MediaPacketizationCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_h261aVideoPacketization.Encode(strm); KnownExtensionEncode(strm, e_rtpPayloadType, m_rtpPayloadType); UnknownExtensionsEncode(strm); } PObject * H245_MediaPacketizationCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MediaPacketizationCapability::Class()), PInvalidCast); #endif return new H245_MediaPacketizationCapability(*this); } // // RSVPParameters // H245_RSVPParameters::H245_RSVPParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 6, TRUE, 0) { m_tokenRate.SetConstraints(PASN_Object::FixedConstraint, 1, 4294967295U); m_bucketSize.SetConstraints(PASN_Object::FixedConstraint, 1, 4294967295U); m_peakRate.SetConstraints(PASN_Object::FixedConstraint, 1, 4294967295U); m_minPoliced.SetConstraints(PASN_Object::FixedConstraint, 1, 4294967295U); m_maxPktSize.SetConstraints(PASN_Object::FixedConstraint, 1, 4294967295U); } #ifndef PASN_NOPRINTON void H245_RSVPParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_qosMode)) strm << setw(indent+10) << "qosMode = " << setprecision(indent) << m_qosMode << '\n'; if (HasOptionalField(e_tokenRate)) strm << setw(indent+12) << "tokenRate = " << setprecision(indent) << m_tokenRate << '\n'; if (HasOptionalField(e_bucketSize)) strm << setw(indent+13) << "bucketSize = " << setprecision(indent) << m_bucketSize << '\n'; if (HasOptionalField(e_peakRate)) strm << setw(indent+11) << "peakRate = " << setprecision(indent) << m_peakRate << '\n'; if (HasOptionalField(e_minPoliced)) strm << setw(indent+13) << "minPoliced = " << setprecision(indent) << m_minPoliced << '\n'; if (HasOptionalField(e_maxPktSize)) strm << setw(indent+13) << "maxPktSize = " << setprecision(indent) << m_maxPktSize << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RSVPParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RSVPParameters), PInvalidCast); #endif const H245_RSVPParameters & other = (const H245_RSVPParameters &)obj; Comparison result; if ((result = m_qosMode.Compare(other.m_qosMode)) != EqualTo) return result; if ((result = m_tokenRate.Compare(other.m_tokenRate)) != EqualTo) return result; if ((result = m_bucketSize.Compare(other.m_bucketSize)) != EqualTo) return result; if ((result = m_peakRate.Compare(other.m_peakRate)) != EqualTo) return result; if ((result = m_minPoliced.Compare(other.m_minPoliced)) != EqualTo) return result; if ((result = m_maxPktSize.Compare(other.m_maxPktSize)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RSVPParameters::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_qosMode)) length += m_qosMode.GetObjectLength(); if (HasOptionalField(e_tokenRate)) length += m_tokenRate.GetObjectLength(); if (HasOptionalField(e_bucketSize)) length += m_bucketSize.GetObjectLength(); if (HasOptionalField(e_peakRate)) length += m_peakRate.GetObjectLength(); if (HasOptionalField(e_minPoliced)) length += m_minPoliced.GetObjectLength(); if (HasOptionalField(e_maxPktSize)) length += m_maxPktSize.GetObjectLength(); return length; } PBoolean H245_RSVPParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_qosMode) && !m_qosMode.Decode(strm)) return FALSE; if (HasOptionalField(e_tokenRate) && !m_tokenRate.Decode(strm)) return FALSE; if (HasOptionalField(e_bucketSize) && !m_bucketSize.Decode(strm)) return FALSE; if (HasOptionalField(e_peakRate) && !m_peakRate.Decode(strm)) return FALSE; if (HasOptionalField(e_minPoliced) && !m_minPoliced.Decode(strm)) return FALSE; if (HasOptionalField(e_maxPktSize) && !m_maxPktSize.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RSVPParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_qosMode)) m_qosMode.Encode(strm); if (HasOptionalField(e_tokenRate)) m_tokenRate.Encode(strm); if (HasOptionalField(e_bucketSize)) m_bucketSize.Encode(strm); if (HasOptionalField(e_peakRate)) m_peakRate.Encode(strm); if (HasOptionalField(e_minPoliced)) m_minPoliced.Encode(strm); if (HasOptionalField(e_maxPktSize)) m_maxPktSize.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RSVPParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RSVPParameters::Class()), PInvalidCast); #endif return new H245_RSVPParameters(*this); } // // ServicePriorityValue // H245_ServicePriorityValue::H245_ServicePriorityValue(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_ServicePriorityValue::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardParameter)) strm << setw(indent+23) << "nonStandardParameter = " << setprecision(indent) << m_nonStandardParameter << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_ServicePriorityValue::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_ServicePriorityValue), PInvalidCast); #endif const H245_ServicePriorityValue & other = (const H245_ServicePriorityValue &)obj; Comparison result; if ((result = m_nonStandardParameter.Compare(other.m_nonStandardParameter)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_ServicePriorityValue::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardParameter)) length += m_nonStandardParameter.GetObjectLength(); return length; } PBoolean H245_ServicePriorityValue::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardParameter) && !m_nonStandardParameter.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_ServicePriorityValue::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardParameter)) m_nonStandardParameter.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_ServicePriorityValue::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ServicePriorityValue::Class()), PInvalidCast); #endif return new H245_ServicePriorityValue(*this); } // // ServicePriority // H245_ServicePriority::H245_ServicePriority(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_ServicePriority::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent+27) << "servicePrioritySignalled = " << setprecision(indent) << m_servicePrioritySignalled << '\n'; if (HasOptionalField(e_servicePriorityValue)) strm << setw(indent+23) << "servicePriorityValue = " << setprecision(indent) << m_servicePriorityValue << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_ServicePriority::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_ServicePriority), PInvalidCast); #endif const H245_ServicePriority & other = (const H245_ServicePriority &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_servicePrioritySignalled.Compare(other.m_servicePrioritySignalled)) != EqualTo) return result; if ((result = m_servicePriorityValue.Compare(other.m_servicePriorityValue)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_ServicePriority::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); length += m_servicePrioritySignalled.GetObjectLength(); if (HasOptionalField(e_servicePriorityValue)) length += m_servicePriorityValue.GetObjectLength(); return length; } PBoolean H245_ServicePriority::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!m_servicePrioritySignalled.Decode(strm)) return FALSE; if (HasOptionalField(e_servicePriorityValue) && !m_servicePriorityValue.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_ServicePriority::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); m_servicePrioritySignalled.Encode(strm); if (HasOptionalField(e_servicePriorityValue)) m_servicePriorityValue.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_ServicePriority::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ServicePriority::Class()), PInvalidCast); #endif return new H245_ServicePriority(*this); } // // AuthorizationParameters // H245_AuthorizationParameters::H245_AuthorizationParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_AuthorizationParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_AuthorizationParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_AuthorizationParameters), PInvalidCast); #endif const H245_AuthorizationParameters & other = (const H245_AuthorizationParameters &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_AuthorizationParameters::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H245_AuthorizationParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_AuthorizationParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_AuthorizationParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_AuthorizationParameters::Class()), PInvalidCast); #endif return new H245_AuthorizationParameters(*this); } // // QOSDescriptor // H245_QOSDescriptor::H245_QOSDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_QOSDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent+10) << "qosType = " << setprecision(indent) << m_qosType << '\n'; strm << setw(indent+11) << "qosClass = " << setprecision(indent) << m_qosClass << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_QOSDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_QOSDescriptor), PInvalidCast); #endif const H245_QOSDescriptor & other = (const H245_QOSDescriptor &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_qosType.Compare(other.m_qosType)) != EqualTo) return result; if ((result = m_qosClass.Compare(other.m_qosClass)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_QOSDescriptor::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); length += m_qosType.GetObjectLength(); length += m_qosClass.GetObjectLength(); return length; } PBoolean H245_QOSDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!m_qosType.Decode(strm)) return FALSE; if (!m_qosClass.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_QOSDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); m_qosType.Encode(strm); m_qosClass.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_QOSDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_QOSDescriptor::Class()), PInvalidCast); #endif return new H245_QOSDescriptor(*this); } // // GenericTransportParameters // H245_GenericTransportParameters::H245_GenericTransportParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 5, TRUE, 0) { m_averageRate.SetConstraints(PASN_Object::FixedConstraint, 1, 4294967295U); m_burst.SetConstraints(PASN_Object::FixedConstraint, 1, 4294967295U); m_peakRate.SetConstraints(PASN_Object::FixedConstraint, 1, 4294967295U); m_maxPktSize.SetConstraints(PASN_Object::FixedConstraint, 1, 4294967295U); } #ifndef PASN_NOPRINTON void H245_GenericTransportParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_averageRate)) strm << setw(indent+14) << "averageRate = " << setprecision(indent) << m_averageRate << '\n'; if (HasOptionalField(e_burst)) strm << setw(indent+8) << "burst = " << setprecision(indent) << m_burst << '\n'; if (HasOptionalField(e_peakRate)) strm << setw(indent+11) << "peakRate = " << setprecision(indent) << m_peakRate << '\n'; if (HasOptionalField(e_maxPktSize)) strm << setw(indent+13) << "maxPktSize = " << setprecision(indent) << m_maxPktSize << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_GenericTransportParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_GenericTransportParameters), PInvalidCast); #endif const H245_GenericTransportParameters & other = (const H245_GenericTransportParameters &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_averageRate.Compare(other.m_averageRate)) != EqualTo) return result; if ((result = m_burst.Compare(other.m_burst)) != EqualTo) return result; if ((result = m_peakRate.Compare(other.m_peakRate)) != EqualTo) return result; if ((result = m_maxPktSize.Compare(other.m_maxPktSize)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_GenericTransportParameters::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); if (HasOptionalField(e_averageRate)) length += m_averageRate.GetObjectLength(); if (HasOptionalField(e_burst)) length += m_burst.GetObjectLength(); if (HasOptionalField(e_peakRate)) length += m_peakRate.GetObjectLength(); if (HasOptionalField(e_maxPktSize)) length += m_maxPktSize.GetObjectLength(); return length; } PBoolean H245_GenericTransportParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (HasOptionalField(e_averageRate) && !m_averageRate.Decode(strm)) return FALSE; if (HasOptionalField(e_burst) && !m_burst.Decode(strm)) return FALSE; if (HasOptionalField(e_peakRate) && !m_peakRate.Decode(strm)) return FALSE; if (HasOptionalField(e_maxPktSize) && !m_maxPktSize.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_GenericTransportParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); if (HasOptionalField(e_averageRate)) m_averageRate.Encode(strm); if (HasOptionalField(e_burst)) m_burst.Encode(strm); if (HasOptionalField(e_peakRate)) m_peakRate.Encode(strm); if (HasOptionalField(e_maxPktSize)) m_maxPktSize.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_GenericTransportParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_GenericTransportParameters::Class()), PInvalidCast); #endif return new H245_GenericTransportParameters(*this); } // // QOSCapability // H245_QOSCapability::H245_QOSCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 6) { m_dscpValue.SetConstraints(PASN_Object::FixedConstraint, 0, 63); } #ifndef PASN_NOPRINTON void H245_QOSCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_rsvpParameters)) strm << setw(indent+17) << "rsvpParameters = " << setprecision(indent) << m_rsvpParameters << '\n'; if (HasOptionalField(e_atmParameters)) strm << setw(indent+16) << "atmParameters = " << setprecision(indent) << m_atmParameters << '\n'; if (HasOptionalField(e_localQoS)) strm << setw(indent+11) << "localQoS = " << setprecision(indent) << m_localQoS << '\n'; if (HasOptionalField(e_genericTransportParameters)) strm << setw(indent+29) << "genericTransportParameters = " << setprecision(indent) << m_genericTransportParameters << '\n'; if (HasOptionalField(e_servicePriority)) strm << setw(indent+18) << "servicePriority = " << setprecision(indent) << m_servicePriority << '\n'; if (HasOptionalField(e_authorizationParameter)) strm << setw(indent+25) << "authorizationParameter = " << setprecision(indent) << m_authorizationParameter << '\n'; if (HasOptionalField(e_qosDescriptor)) strm << setw(indent+16) << "qosDescriptor = " << setprecision(indent) << m_qosDescriptor << '\n'; if (HasOptionalField(e_dscpValue)) strm << setw(indent+12) << "dscpValue = " << setprecision(indent) << m_dscpValue << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_QOSCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_QOSCapability), PInvalidCast); #endif const H245_QOSCapability & other = (const H245_QOSCapability &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_rsvpParameters.Compare(other.m_rsvpParameters)) != EqualTo) return result; if ((result = m_atmParameters.Compare(other.m_atmParameters)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_QOSCapability::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); if (HasOptionalField(e_rsvpParameters)) length += m_rsvpParameters.GetObjectLength(); if (HasOptionalField(e_atmParameters)) length += m_atmParameters.GetObjectLength(); return length; } PBoolean H245_QOSCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (HasOptionalField(e_rsvpParameters) && !m_rsvpParameters.Decode(strm)) return FALSE; if (HasOptionalField(e_atmParameters) && !m_atmParameters.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_localQoS, m_localQoS)) return FALSE; if (!KnownExtensionDecode(strm, e_genericTransportParameters, m_genericTransportParameters)) return FALSE; if (!KnownExtensionDecode(strm, e_servicePriority, m_servicePriority)) return FALSE; if (!KnownExtensionDecode(strm, e_authorizationParameter, m_authorizationParameter)) return FALSE; if (!KnownExtensionDecode(strm, e_qosDescriptor, m_qosDescriptor)) return FALSE; if (!KnownExtensionDecode(strm, e_dscpValue, m_dscpValue)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_QOSCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); if (HasOptionalField(e_rsvpParameters)) m_rsvpParameters.Encode(strm); if (HasOptionalField(e_atmParameters)) m_atmParameters.Encode(strm); KnownExtensionEncode(strm, e_localQoS, m_localQoS); KnownExtensionEncode(strm, e_genericTransportParameters, m_genericTransportParameters); KnownExtensionEncode(strm, e_servicePriority, m_servicePriority); KnownExtensionEncode(strm, e_authorizationParameter, m_authorizationParameter); KnownExtensionEncode(strm, e_qosDescriptor, m_qosDescriptor); KnownExtensionEncode(strm, e_dscpValue, m_dscpValue); UnknownExtensionsEncode(strm); } PObject * H245_QOSCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_QOSCapability::Class()), PInvalidCast); #endif return new H245_QOSCapability(*this); } // // TransportCapability // H245_TransportCapability::H245_TransportCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { m_qOSCapabilities.SetConstraints(PASN_Object::FixedConstraint, 1, 256); m_mediaChannelCapabilities.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_TransportCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandard)) strm << setw(indent+14) << "nonStandard = " << setprecision(indent) << m_nonStandard << '\n'; if (HasOptionalField(e_qOSCapabilities)) strm << setw(indent+18) << "qOSCapabilities = " << setprecision(indent) << m_qOSCapabilities << '\n'; if (HasOptionalField(e_mediaChannelCapabilities)) strm << setw(indent+27) << "mediaChannelCapabilities = " << setprecision(indent) << m_mediaChannelCapabilities << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_TransportCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_TransportCapability), PInvalidCast); #endif const H245_TransportCapability & other = (const H245_TransportCapability &)obj; Comparison result; if ((result = m_nonStandard.Compare(other.m_nonStandard)) != EqualTo) return result; if ((result = m_qOSCapabilities.Compare(other.m_qOSCapabilities)) != EqualTo) return result; if ((result = m_mediaChannelCapabilities.Compare(other.m_mediaChannelCapabilities)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_TransportCapability::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandard)) length += m_nonStandard.GetObjectLength(); if (HasOptionalField(e_qOSCapabilities)) length += m_qOSCapabilities.GetObjectLength(); if (HasOptionalField(e_mediaChannelCapabilities)) length += m_mediaChannelCapabilities.GetObjectLength(); return length; } PBoolean H245_TransportCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandard) && !m_nonStandard.Decode(strm)) return FALSE; if (HasOptionalField(e_qOSCapabilities) && !m_qOSCapabilities.Decode(strm)) return FALSE; if (HasOptionalField(e_mediaChannelCapabilities) && !m_mediaChannelCapabilities.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_TransportCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandard)) m_nonStandard.Encode(strm); if (HasOptionalField(e_qOSCapabilities)) m_qOSCapabilities.Encode(strm); if (HasOptionalField(e_mediaChannelCapabilities)) m_mediaChannelCapabilities.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_TransportCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_TransportCapability::Class()), PInvalidCast); #endif return new H245_TransportCapability(*this); } // // RedundancyEncodingCapability // H245_RedundancyEncodingCapability::H245_RedundancyEncodingCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_secondaryEncoding.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_RedundancyEncodingCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+27) << "redundancyEncodingMethod = " << setprecision(indent) << m_redundancyEncodingMethod << '\n'; strm << setw(indent+18) << "primaryEncoding = " << setprecision(indent) << m_primaryEncoding << '\n'; if (HasOptionalField(e_secondaryEncoding)) strm << setw(indent+20) << "secondaryEncoding = " << setprecision(indent) << m_secondaryEncoding << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RedundancyEncodingCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RedundancyEncodingCapability), PInvalidCast); #endif const H245_RedundancyEncodingCapability & other = (const H245_RedundancyEncodingCapability &)obj; Comparison result; if ((result = m_redundancyEncodingMethod.Compare(other.m_redundancyEncodingMethod)) != EqualTo) return result; if ((result = m_primaryEncoding.Compare(other.m_primaryEncoding)) != EqualTo) return result; if ((result = m_secondaryEncoding.Compare(other.m_secondaryEncoding)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RedundancyEncodingCapability::GetDataLength() const { PINDEX length = 0; length += m_redundancyEncodingMethod.GetObjectLength(); length += m_primaryEncoding.GetObjectLength(); if (HasOptionalField(e_secondaryEncoding)) length += m_secondaryEncoding.GetObjectLength(); return length; } PBoolean H245_RedundancyEncodingCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_redundancyEncodingMethod.Decode(strm)) return FALSE; if (!m_primaryEncoding.Decode(strm)) return FALSE; if (HasOptionalField(e_secondaryEncoding) && !m_secondaryEncoding.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RedundancyEncodingCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_redundancyEncodingMethod.Encode(strm); m_primaryEncoding.Encode(strm); if (HasOptionalField(e_secondaryEncoding)) m_secondaryEncoding.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RedundancyEncodingCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RedundancyEncodingCapability::Class()), PInvalidCast); #endif return new H245_RedundancyEncodingCapability(*this); } // // RTPH263VideoRedundancyEncoding // H245_RTPH263VideoRedundancyEncoding::H245_RTPH263VideoRedundancyEncoding(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_numberOfThreads.SetConstraints(PASN_Object::FixedConstraint, 1, 16); m_framesBetweenSyncPoints.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_RTPH263VideoRedundancyEncoding::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+18) << "numberOfThreads = " << setprecision(indent) << m_numberOfThreads << '\n'; strm << setw(indent+26) << "framesBetweenSyncPoints = " << setprecision(indent) << m_framesBetweenSyncPoints << '\n'; strm << setw(indent+23) << "frameToThreadMapping = " << setprecision(indent) << m_frameToThreadMapping << '\n'; if (HasOptionalField(e_containedThreads)) strm << setw(indent+19) << "containedThreads = " << setprecision(indent) << m_containedThreads << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RTPH263VideoRedundancyEncoding::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RTPH263VideoRedundancyEncoding), PInvalidCast); #endif const H245_RTPH263VideoRedundancyEncoding & other = (const H245_RTPH263VideoRedundancyEncoding &)obj; Comparison result; if ((result = m_numberOfThreads.Compare(other.m_numberOfThreads)) != EqualTo) return result; if ((result = m_framesBetweenSyncPoints.Compare(other.m_framesBetweenSyncPoints)) != EqualTo) return result; if ((result = m_frameToThreadMapping.Compare(other.m_frameToThreadMapping)) != EqualTo) return result; if ((result = m_containedThreads.Compare(other.m_containedThreads)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RTPH263VideoRedundancyEncoding::GetDataLength() const { PINDEX length = 0; length += m_numberOfThreads.GetObjectLength(); length += m_framesBetweenSyncPoints.GetObjectLength(); length += m_frameToThreadMapping.GetObjectLength(); if (HasOptionalField(e_containedThreads)) length += m_containedThreads.GetObjectLength(); return length; } PBoolean H245_RTPH263VideoRedundancyEncoding::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_numberOfThreads.Decode(strm)) return FALSE; if (!m_framesBetweenSyncPoints.Decode(strm)) return FALSE; if (!m_frameToThreadMapping.Decode(strm)) return FALSE; if (HasOptionalField(e_containedThreads) && !m_containedThreads.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RTPH263VideoRedundancyEncoding::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_numberOfThreads.Encode(strm); m_framesBetweenSyncPoints.Encode(strm); m_frameToThreadMapping.Encode(strm); if (HasOptionalField(e_containedThreads)) m_containedThreads.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RTPH263VideoRedundancyEncoding::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RTPH263VideoRedundancyEncoding::Class()), PInvalidCast); #endif return new H245_RTPH263VideoRedundancyEncoding(*this); } // // RTPH263VideoRedundancyFrameMapping // H245_RTPH263VideoRedundancyFrameMapping::H245_RTPH263VideoRedundancyFrameMapping(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_threadNumber.SetConstraints(PASN_Object::FixedConstraint, 0, 15); } #ifndef PASN_NOPRINTON void H245_RTPH263VideoRedundancyFrameMapping::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "threadNumber = " << setprecision(indent) << m_threadNumber << '\n'; strm << setw(indent+16) << "frameSequence = " << setprecision(indent) << m_frameSequence << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RTPH263VideoRedundancyFrameMapping::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RTPH263VideoRedundancyFrameMapping), PInvalidCast); #endif const H245_RTPH263VideoRedundancyFrameMapping & other = (const H245_RTPH263VideoRedundancyFrameMapping &)obj; Comparison result; if ((result = m_threadNumber.Compare(other.m_threadNumber)) != EqualTo) return result; if ((result = m_frameSequence.Compare(other.m_frameSequence)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RTPH263VideoRedundancyFrameMapping::GetDataLength() const { PINDEX length = 0; length += m_threadNumber.GetObjectLength(); length += m_frameSequence.GetObjectLength(); return length; } PBoolean H245_RTPH263VideoRedundancyFrameMapping::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_threadNumber.Decode(strm)) return FALSE; if (!m_frameSequence.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RTPH263VideoRedundancyFrameMapping::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_threadNumber.Encode(strm); m_frameSequence.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RTPH263VideoRedundancyFrameMapping::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RTPH263VideoRedundancyFrameMapping::Class()), PInvalidCast); #endif return new H245_RTPH263VideoRedundancyFrameMapping(*this); } // // MultipointCapability // H245_MultipointCapability::H245_MultipointCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MultipointCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+22) << "multicastCapability = " << setprecision(indent) << m_multicastCapability << '\n'; strm << setw(indent+25) << "multiUniCastConference = " << setprecision(indent) << m_multiUniCastConference << '\n'; strm << setw(indent+30) << "mediaDistributionCapability = " << setprecision(indent) << m_mediaDistributionCapability << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultipointCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultipointCapability), PInvalidCast); #endif const H245_MultipointCapability & other = (const H245_MultipointCapability &)obj; Comparison result; if ((result = m_multicastCapability.Compare(other.m_multicastCapability)) != EqualTo) return result; if ((result = m_multiUniCastConference.Compare(other.m_multiUniCastConference)) != EqualTo) return result; if ((result = m_mediaDistributionCapability.Compare(other.m_mediaDistributionCapability)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultipointCapability::GetDataLength() const { PINDEX length = 0; length += m_multicastCapability.GetObjectLength(); length += m_multiUniCastConference.GetObjectLength(); length += m_mediaDistributionCapability.GetObjectLength(); return length; } PBoolean H245_MultipointCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_multicastCapability.Decode(strm)) return FALSE; if (!m_multiUniCastConference.Decode(strm)) return FALSE; if (!m_mediaDistributionCapability.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultipointCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_multicastCapability.Encode(strm); m_multiUniCastConference.Encode(strm); m_mediaDistributionCapability.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultipointCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultipointCapability::Class()), PInvalidCast); #endif return new H245_MultipointCapability(*this); } // // MediaDistributionCapability // H245_MediaDistributionCapability::H245_MediaDistributionCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MediaDistributionCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "centralizedControl = " << setprecision(indent) << m_centralizedControl << '\n'; strm << setw(indent+21) << "distributedControl = " << setprecision(indent) << m_distributedControl << '\n'; strm << setw(indent+19) << "centralizedAudio = " << setprecision(indent) << m_centralizedAudio << '\n'; strm << setw(indent+19) << "distributedAudio = " << setprecision(indent) << m_distributedAudio << '\n'; strm << setw(indent+19) << "centralizedVideo = " << setprecision(indent) << m_centralizedVideo << '\n'; strm << setw(indent+19) << "distributedVideo = " << setprecision(indent) << m_distributedVideo << '\n'; if (HasOptionalField(e_centralizedData)) strm << setw(indent+18) << "centralizedData = " << setprecision(indent) << m_centralizedData << '\n'; if (HasOptionalField(e_distributedData)) strm << setw(indent+18) << "distributedData = " << setprecision(indent) << m_distributedData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MediaDistributionCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MediaDistributionCapability), PInvalidCast); #endif const H245_MediaDistributionCapability & other = (const H245_MediaDistributionCapability &)obj; Comparison result; if ((result = m_centralizedControl.Compare(other.m_centralizedControl)) != EqualTo) return result; if ((result = m_distributedControl.Compare(other.m_distributedControl)) != EqualTo) return result; if ((result = m_centralizedAudio.Compare(other.m_centralizedAudio)) != EqualTo) return result; if ((result = m_distributedAudio.Compare(other.m_distributedAudio)) != EqualTo) return result; if ((result = m_centralizedVideo.Compare(other.m_centralizedVideo)) != EqualTo) return result; if ((result = m_distributedVideo.Compare(other.m_distributedVideo)) != EqualTo) return result; if ((result = m_centralizedData.Compare(other.m_centralizedData)) != EqualTo) return result; if ((result = m_distributedData.Compare(other.m_distributedData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MediaDistributionCapability::GetDataLength() const { PINDEX length = 0; length += m_centralizedControl.GetObjectLength(); length += m_distributedControl.GetObjectLength(); length += m_centralizedAudio.GetObjectLength(); length += m_distributedAudio.GetObjectLength(); length += m_centralizedVideo.GetObjectLength(); length += m_distributedVideo.GetObjectLength(); if (HasOptionalField(e_centralizedData)) length += m_centralizedData.GetObjectLength(); if (HasOptionalField(e_distributedData)) length += m_distributedData.GetObjectLength(); return length; } PBoolean H245_MediaDistributionCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_centralizedControl.Decode(strm)) return FALSE; if (!m_distributedControl.Decode(strm)) return FALSE; if (!m_centralizedAudio.Decode(strm)) return FALSE; if (!m_distributedAudio.Decode(strm)) return FALSE; if (!m_centralizedVideo.Decode(strm)) return FALSE; if (!m_distributedVideo.Decode(strm)) return FALSE; if (HasOptionalField(e_centralizedData) && !m_centralizedData.Decode(strm)) return FALSE; if (HasOptionalField(e_distributedData) && !m_distributedData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MediaDistributionCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_centralizedControl.Encode(strm); m_distributedControl.Encode(strm); m_centralizedAudio.Encode(strm); m_distributedAudio.Encode(strm); m_centralizedVideo.Encode(strm); m_distributedVideo.Encode(strm); if (HasOptionalField(e_centralizedData)) m_centralizedData.Encode(strm); if (HasOptionalField(e_distributedData)) m_distributedData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MediaDistributionCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MediaDistributionCapability::Class()), PInvalidCast); #endif return new H245_MediaDistributionCapability(*this); } // // ExtendedVideoCapability // H245_ExtendedVideoCapability::H245_ExtendedVideoCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_ExtendedVideoCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+18) << "videoCapability = " << setprecision(indent) << m_videoCapability << '\n'; if (HasOptionalField(e_videoCapabilityExtension)) strm << setw(indent+27) << "videoCapabilityExtension = " << setprecision(indent) << m_videoCapabilityExtension << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_ExtendedVideoCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_ExtendedVideoCapability), PInvalidCast); #endif const H245_ExtendedVideoCapability & other = (const H245_ExtendedVideoCapability &)obj; Comparison result; if ((result = m_videoCapability.Compare(other.m_videoCapability)) != EqualTo) return result; if ((result = m_videoCapabilityExtension.Compare(other.m_videoCapabilityExtension)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_ExtendedVideoCapability::GetDataLength() const { PINDEX length = 0; length += m_videoCapability.GetObjectLength(); if (HasOptionalField(e_videoCapabilityExtension)) length += m_videoCapabilityExtension.GetObjectLength(); return length; } PBoolean H245_ExtendedVideoCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_videoCapability.Decode(strm)) return FALSE; if (HasOptionalField(e_videoCapabilityExtension) && !m_videoCapabilityExtension.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_ExtendedVideoCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_videoCapability.Encode(strm); if (HasOptionalField(e_videoCapabilityExtension)) m_videoCapabilityExtension.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_ExtendedVideoCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ExtendedVideoCapability::Class()), PInvalidCast); #endif return new H245_ExtendedVideoCapability(*this); } // // EnhancementLayerInfo // H245_EnhancementLayerInfo::H245_EnhancementLayerInfo(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { m_snrEnhancement.SetConstraints(PASN_Object::FixedConstraint, 1, 14); m_spatialEnhancement.SetConstraints(PASN_Object::FixedConstraint, 1, 14); m_bPictureEnhancement.SetConstraints(PASN_Object::FixedConstraint, 1, 14); } #ifndef PASN_NOPRINTON void H245_EnhancementLayerInfo::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+25) << "baseBitRateConstrained = " << setprecision(indent) << m_baseBitRateConstrained << '\n'; if (HasOptionalField(e_snrEnhancement)) strm << setw(indent+17) << "snrEnhancement = " << setprecision(indent) << m_snrEnhancement << '\n'; if (HasOptionalField(e_spatialEnhancement)) strm << setw(indent+21) << "spatialEnhancement = " << setprecision(indent) << m_spatialEnhancement << '\n'; if (HasOptionalField(e_bPictureEnhancement)) strm << setw(indent+22) << "bPictureEnhancement = " << setprecision(indent) << m_bPictureEnhancement << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_EnhancementLayerInfo::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_EnhancementLayerInfo), PInvalidCast); #endif const H245_EnhancementLayerInfo & other = (const H245_EnhancementLayerInfo &)obj; Comparison result; if ((result = m_baseBitRateConstrained.Compare(other.m_baseBitRateConstrained)) != EqualTo) return result; if ((result = m_snrEnhancement.Compare(other.m_snrEnhancement)) != EqualTo) return result; if ((result = m_spatialEnhancement.Compare(other.m_spatialEnhancement)) != EqualTo) return result; if ((result = m_bPictureEnhancement.Compare(other.m_bPictureEnhancement)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_EnhancementLayerInfo::GetDataLength() const { PINDEX length = 0; length += m_baseBitRateConstrained.GetObjectLength(); if (HasOptionalField(e_snrEnhancement)) length += m_snrEnhancement.GetObjectLength(); if (HasOptionalField(e_spatialEnhancement)) length += m_spatialEnhancement.GetObjectLength(); if (HasOptionalField(e_bPictureEnhancement)) length += m_bPictureEnhancement.GetObjectLength(); return length; } PBoolean H245_EnhancementLayerInfo::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_baseBitRateConstrained.Decode(strm)) return FALSE; if (HasOptionalField(e_snrEnhancement) && !m_snrEnhancement.Decode(strm)) return FALSE; if (HasOptionalField(e_spatialEnhancement) && !m_spatialEnhancement.Decode(strm)) return FALSE; if (HasOptionalField(e_bPictureEnhancement) && !m_bPictureEnhancement.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_EnhancementLayerInfo::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_baseBitRateConstrained.Encode(strm); if (HasOptionalField(e_snrEnhancement)) m_snrEnhancement.Encode(strm); if (HasOptionalField(e_spatialEnhancement)) m_spatialEnhancement.Encode(strm); if (HasOptionalField(e_bPictureEnhancement)) m_bPictureEnhancement.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_EnhancementLayerInfo::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_EnhancementLayerInfo::Class()), PInvalidCast); #endif return new H245_EnhancementLayerInfo(*this); } // // H263ModeComboFlags // H245_H263ModeComboFlags::H245_H263ModeComboFlags(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 2) { IncludeOptionalField(e_enhancedReferencePicSelect); IncludeOptionalField(e_h263Version3Options); } #ifndef PASN_NOPRINTON void H245_H263ModeComboFlags::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "unrestrictedVector = " << setprecision(indent) << m_unrestrictedVector << '\n'; strm << setw(indent+19) << "arithmeticCoding = " << setprecision(indent) << m_arithmeticCoding << '\n'; strm << setw(indent+21) << "advancedPrediction = " << setprecision(indent) << m_advancedPrediction << '\n'; strm << setw(indent+11) << "pbFrames = " << setprecision(indent) << m_pbFrames << '\n'; strm << setw(indent+26) << "advancedIntraCodingMode = " << setprecision(indent) << m_advancedIntraCodingMode << '\n'; strm << setw(indent+23) << "deblockingFilterMode = " << setprecision(indent) << m_deblockingFilterMode << '\n'; strm << setw(indent+25) << "unlimitedMotionVectors = " << setprecision(indent) << m_unlimitedMotionVectors << '\n'; strm << setw(indent+24) << "slicesInOrder_NonRect = " << setprecision(indent) << m_slicesInOrder_NonRect << '\n'; strm << setw(indent+21) << "slicesInOrder_Rect = " << setprecision(indent) << m_slicesInOrder_Rect << '\n'; strm << setw(indent+24) << "slicesNoOrder_NonRect = " << setprecision(indent) << m_slicesNoOrder_NonRect << '\n'; strm << setw(indent+21) << "slicesNoOrder_Rect = " << setprecision(indent) << m_slicesNoOrder_Rect << '\n'; strm << setw(indent+23) << "improvedPBFramesMode = " << setprecision(indent) << m_improvedPBFramesMode << '\n'; strm << setw(indent+21) << "referencePicSelect = " << setprecision(indent) << m_referencePicSelect << '\n'; strm << setw(indent+31) << "dynamicPictureResizingByFour = " << setprecision(indent) << m_dynamicPictureResizingByFour << '\n'; strm << setw(indent+37) << "dynamicPictureResizingSixteenthPel = " << setprecision(indent) << m_dynamicPictureResizingSixteenthPel << '\n'; strm << setw(indent+24) << "dynamicWarpingHalfPel = " << setprecision(indent) << m_dynamicWarpingHalfPel << '\n'; strm << setw(indent+29) << "dynamicWarpingSixteenthPel = " << setprecision(indent) << m_dynamicWarpingSixteenthPel << '\n'; strm << setw(indent+26) << "reducedResolutionUpdate = " << setprecision(indent) << m_reducedResolutionUpdate << '\n'; strm << setw(indent+29) << "independentSegmentDecoding = " << setprecision(indent) << m_independentSegmentDecoding << '\n'; strm << setw(indent+24) << "alternateInterVLCMode = " << setprecision(indent) << m_alternateInterVLCMode << '\n'; strm << setw(indent+27) << "modifiedQuantizationMode = " << setprecision(indent) << m_modifiedQuantizationMode << '\n'; if (HasOptionalField(e_enhancedReferencePicSelect)) strm << setw(indent+29) << "enhancedReferencePicSelect = " << setprecision(indent) << m_enhancedReferencePicSelect << '\n'; if (HasOptionalField(e_h263Version3Options)) strm << setw(indent+22) << "h263Version3Options = " << setprecision(indent) << m_h263Version3Options << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H263ModeComboFlags::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H263ModeComboFlags), PInvalidCast); #endif const H245_H263ModeComboFlags & other = (const H245_H263ModeComboFlags &)obj; Comparison result; if ((result = m_unrestrictedVector.Compare(other.m_unrestrictedVector)) != EqualTo) return result; if ((result = m_arithmeticCoding.Compare(other.m_arithmeticCoding)) != EqualTo) return result; if ((result = m_advancedPrediction.Compare(other.m_advancedPrediction)) != EqualTo) return result; if ((result = m_pbFrames.Compare(other.m_pbFrames)) != EqualTo) return result; if ((result = m_advancedIntraCodingMode.Compare(other.m_advancedIntraCodingMode)) != EqualTo) return result; if ((result = m_deblockingFilterMode.Compare(other.m_deblockingFilterMode)) != EqualTo) return result; if ((result = m_unlimitedMotionVectors.Compare(other.m_unlimitedMotionVectors)) != EqualTo) return result; if ((result = m_slicesInOrder_NonRect.Compare(other.m_slicesInOrder_NonRect)) != EqualTo) return result; if ((result = m_slicesInOrder_Rect.Compare(other.m_slicesInOrder_Rect)) != EqualTo) return result; if ((result = m_slicesNoOrder_NonRect.Compare(other.m_slicesNoOrder_NonRect)) != EqualTo) return result; if ((result = m_slicesNoOrder_Rect.Compare(other.m_slicesNoOrder_Rect)) != EqualTo) return result; if ((result = m_improvedPBFramesMode.Compare(other.m_improvedPBFramesMode)) != EqualTo) return result; if ((result = m_referencePicSelect.Compare(other.m_referencePicSelect)) != EqualTo) return result; if ((result = m_dynamicPictureResizingByFour.Compare(other.m_dynamicPictureResizingByFour)) != EqualTo) return result; if ((result = m_dynamicPictureResizingSixteenthPel.Compare(other.m_dynamicPictureResizingSixteenthPel)) != EqualTo) return result; if ((result = m_dynamicWarpingHalfPel.Compare(other.m_dynamicWarpingHalfPel)) != EqualTo) return result; if ((result = m_dynamicWarpingSixteenthPel.Compare(other.m_dynamicWarpingSixteenthPel)) != EqualTo) return result; if ((result = m_reducedResolutionUpdate.Compare(other.m_reducedResolutionUpdate)) != EqualTo) return result; if ((result = m_independentSegmentDecoding.Compare(other.m_independentSegmentDecoding)) != EqualTo) return result; if ((result = m_alternateInterVLCMode.Compare(other.m_alternateInterVLCMode)) != EqualTo) return result; if ((result = m_modifiedQuantizationMode.Compare(other.m_modifiedQuantizationMode)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H263ModeComboFlags::GetDataLength() const { PINDEX length = 0; length += m_unrestrictedVector.GetObjectLength(); length += m_arithmeticCoding.GetObjectLength(); length += m_advancedPrediction.GetObjectLength(); length += m_pbFrames.GetObjectLength(); length += m_advancedIntraCodingMode.GetObjectLength(); length += m_deblockingFilterMode.GetObjectLength(); length += m_unlimitedMotionVectors.GetObjectLength(); length += m_slicesInOrder_NonRect.GetObjectLength(); length += m_slicesInOrder_Rect.GetObjectLength(); length += m_slicesNoOrder_NonRect.GetObjectLength(); length += m_slicesNoOrder_Rect.GetObjectLength(); length += m_improvedPBFramesMode.GetObjectLength(); length += m_referencePicSelect.GetObjectLength(); length += m_dynamicPictureResizingByFour.GetObjectLength(); length += m_dynamicPictureResizingSixteenthPel.GetObjectLength(); length += m_dynamicWarpingHalfPel.GetObjectLength(); length += m_dynamicWarpingSixteenthPel.GetObjectLength(); length += m_reducedResolutionUpdate.GetObjectLength(); length += m_independentSegmentDecoding.GetObjectLength(); length += m_alternateInterVLCMode.GetObjectLength(); length += m_modifiedQuantizationMode.GetObjectLength(); return length; } PBoolean H245_H263ModeComboFlags::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_unrestrictedVector.Decode(strm)) return FALSE; if (!m_arithmeticCoding.Decode(strm)) return FALSE; if (!m_advancedPrediction.Decode(strm)) return FALSE; if (!m_pbFrames.Decode(strm)) return FALSE; if (!m_advancedIntraCodingMode.Decode(strm)) return FALSE; if (!m_deblockingFilterMode.Decode(strm)) return FALSE; if (!m_unlimitedMotionVectors.Decode(strm)) return FALSE; if (!m_slicesInOrder_NonRect.Decode(strm)) return FALSE; if (!m_slicesInOrder_Rect.Decode(strm)) return FALSE; if (!m_slicesNoOrder_NonRect.Decode(strm)) return FALSE; if (!m_slicesNoOrder_Rect.Decode(strm)) return FALSE; if (!m_improvedPBFramesMode.Decode(strm)) return FALSE; if (!m_referencePicSelect.Decode(strm)) return FALSE; if (!m_dynamicPictureResizingByFour.Decode(strm)) return FALSE; if (!m_dynamicPictureResizingSixteenthPel.Decode(strm)) return FALSE; if (!m_dynamicWarpingHalfPel.Decode(strm)) return FALSE; if (!m_dynamicWarpingSixteenthPel.Decode(strm)) return FALSE; if (!m_reducedResolutionUpdate.Decode(strm)) return FALSE; if (!m_independentSegmentDecoding.Decode(strm)) return FALSE; if (!m_alternateInterVLCMode.Decode(strm)) return FALSE; if (!m_modifiedQuantizationMode.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_enhancedReferencePicSelect, m_enhancedReferencePicSelect)) return FALSE; if (!KnownExtensionDecode(strm, e_h263Version3Options, m_h263Version3Options)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H263ModeComboFlags::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_unrestrictedVector.Encode(strm); m_arithmeticCoding.Encode(strm); m_advancedPrediction.Encode(strm); m_pbFrames.Encode(strm); m_advancedIntraCodingMode.Encode(strm); m_deblockingFilterMode.Encode(strm); m_unlimitedMotionVectors.Encode(strm); m_slicesInOrder_NonRect.Encode(strm); m_slicesInOrder_Rect.Encode(strm); m_slicesNoOrder_NonRect.Encode(strm); m_slicesNoOrder_Rect.Encode(strm); m_improvedPBFramesMode.Encode(strm); m_referencePicSelect.Encode(strm); m_dynamicPictureResizingByFour.Encode(strm); m_dynamicPictureResizingSixteenthPel.Encode(strm); m_dynamicWarpingHalfPel.Encode(strm); m_dynamicWarpingSixteenthPel.Encode(strm); m_reducedResolutionUpdate.Encode(strm); m_independentSegmentDecoding.Encode(strm); m_alternateInterVLCMode.Encode(strm); m_modifiedQuantizationMode.Encode(strm); KnownExtensionEncode(strm, e_enhancedReferencePicSelect, m_enhancedReferencePicSelect); KnownExtensionEncode(strm, e_h263Version3Options, m_h263Version3Options); UnknownExtensionsEncode(strm); } PObject * H245_H263ModeComboFlags::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H263ModeComboFlags::Class()), PInvalidCast); #endif return new H245_H263ModeComboFlags(*this); } // // G7231AnnexCCapability // H245_G7231AnnexCCapability::H245_G7231AnnexCCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_maxAl_sduAudioFrames.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_G7231AnnexCCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+23) << "maxAl_sduAudioFrames = " << setprecision(indent) << m_maxAl_sduAudioFrames << '\n'; strm << setw(indent+21) << "silenceSuppression = " << setprecision(indent) << m_silenceSuppression << '\n'; if (HasOptionalField(e_g723AnnexCAudioMode)) strm << setw(indent+22) << "g723AnnexCAudioMode = " << setprecision(indent) << m_g723AnnexCAudioMode << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_G7231AnnexCCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_G7231AnnexCCapability), PInvalidCast); #endif const H245_G7231AnnexCCapability & other = (const H245_G7231AnnexCCapability &)obj; Comparison result; if ((result = m_maxAl_sduAudioFrames.Compare(other.m_maxAl_sduAudioFrames)) != EqualTo) return result; if ((result = m_silenceSuppression.Compare(other.m_silenceSuppression)) != EqualTo) return result; if ((result = m_g723AnnexCAudioMode.Compare(other.m_g723AnnexCAudioMode)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_G7231AnnexCCapability::GetDataLength() const { PINDEX length = 0; length += m_maxAl_sduAudioFrames.GetObjectLength(); length += m_silenceSuppression.GetObjectLength(); if (HasOptionalField(e_g723AnnexCAudioMode)) length += m_g723AnnexCAudioMode.GetObjectLength(); return length; } PBoolean H245_G7231AnnexCCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_maxAl_sduAudioFrames.Decode(strm)) return FALSE; if (!m_silenceSuppression.Decode(strm)) return FALSE; if (HasOptionalField(e_g723AnnexCAudioMode) && !m_g723AnnexCAudioMode.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_G7231AnnexCCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_maxAl_sduAudioFrames.Encode(strm); m_silenceSuppression.Encode(strm); if (HasOptionalField(e_g723AnnexCAudioMode)) m_g723AnnexCAudioMode.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_G7231AnnexCCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_G7231AnnexCCapability::Class()), PInvalidCast); #endif return new H245_G7231AnnexCCapability(*this); } // // DataApplicationCapability // H245_DataApplicationCapability::H245_DataApplicationCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_maxBitRate.SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); } #ifndef PASN_NOPRINTON void H245_DataApplicationCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "application = " << setprecision(indent) << m_application << '\n'; strm << setw(indent+13) << "maxBitRate = " << setprecision(indent) << m_maxBitRate << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_DataApplicationCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_DataApplicationCapability), PInvalidCast); #endif const H245_DataApplicationCapability & other = (const H245_DataApplicationCapability &)obj; Comparison result; if ((result = m_application.Compare(other.m_application)) != EqualTo) return result; if ((result = m_maxBitRate.Compare(other.m_maxBitRate)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_DataApplicationCapability::GetDataLength() const { PINDEX length = 0; length += m_application.GetObjectLength(); length += m_maxBitRate.GetObjectLength(); return length; } PBoolean H245_DataApplicationCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_application.Decode(strm)) return FALSE; if (!m_maxBitRate.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_DataApplicationCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_application.Encode(strm); m_maxBitRate.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_DataApplicationCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DataApplicationCapability::Class()), PInvalidCast); #endif return new H245_DataApplicationCapability(*this); } // // T38FaxUdpOptions // H245_T38FaxUdpOptions::H245_T38FaxUdpOptions(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, FALSE, 0) { } #ifndef PASN_NOPRINTON void H245_T38FaxUdpOptions::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_t38FaxMaxBuffer)) strm << setw(indent+18) << "t38FaxMaxBuffer = " << setprecision(indent) << m_t38FaxMaxBuffer << '\n'; if (HasOptionalField(e_t38FaxMaxDatagram)) strm << setw(indent+20) << "t38FaxMaxDatagram = " << setprecision(indent) << m_t38FaxMaxDatagram << '\n'; strm << setw(indent+14) << "t38FaxUdpEC = " << setprecision(indent) << m_t38FaxUdpEC << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_T38FaxUdpOptions::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_T38FaxUdpOptions), PInvalidCast); #endif const H245_T38FaxUdpOptions & other = (const H245_T38FaxUdpOptions &)obj; Comparison result; if ((result = m_t38FaxMaxBuffer.Compare(other.m_t38FaxMaxBuffer)) != EqualTo) return result; if ((result = m_t38FaxMaxDatagram.Compare(other.m_t38FaxMaxDatagram)) != EqualTo) return result; if ((result = m_t38FaxUdpEC.Compare(other.m_t38FaxUdpEC)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_T38FaxUdpOptions::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_t38FaxMaxBuffer)) length += m_t38FaxMaxBuffer.GetObjectLength(); if (HasOptionalField(e_t38FaxMaxDatagram)) length += m_t38FaxMaxDatagram.GetObjectLength(); length += m_t38FaxUdpEC.GetObjectLength(); return length; } PBoolean H245_T38FaxUdpOptions::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_t38FaxMaxBuffer) && !m_t38FaxMaxBuffer.Decode(strm)) return FALSE; if (HasOptionalField(e_t38FaxMaxDatagram) && !m_t38FaxMaxDatagram.Decode(strm)) return FALSE; if (!m_t38FaxUdpEC.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_T38FaxUdpOptions::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_t38FaxMaxBuffer)) m_t38FaxMaxBuffer.Encode(strm); if (HasOptionalField(e_t38FaxMaxDatagram)) m_t38FaxMaxDatagram.Encode(strm); m_t38FaxUdpEC.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_T38FaxUdpOptions::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_T38FaxUdpOptions::Class()), PInvalidCast); #endif return new H245_T38FaxUdpOptions(*this); } // // AuthenticationCapability // H245_AuthenticationCapability::H245_AuthenticationCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 1) { } #ifndef PASN_NOPRINTON void H245_AuthenticationCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandard)) strm << setw(indent+14) << "nonStandard = " << setprecision(indent) << m_nonStandard << '\n'; if (HasOptionalField(e_antiSpamAlgorithm)) strm << setw(indent+20) << "antiSpamAlgorithm = " << setprecision(indent) << m_antiSpamAlgorithm << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_AuthenticationCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_AuthenticationCapability), PInvalidCast); #endif const H245_AuthenticationCapability & other = (const H245_AuthenticationCapability &)obj; Comparison result; if ((result = m_nonStandard.Compare(other.m_nonStandard)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_AuthenticationCapability::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandard)) length += m_nonStandard.GetObjectLength(); return length; } PBoolean H245_AuthenticationCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandard) && !m_nonStandard.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_antiSpamAlgorithm, m_antiSpamAlgorithm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_AuthenticationCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandard)) m_nonStandard.Encode(strm); KnownExtensionEncode(strm, e_antiSpamAlgorithm, m_antiSpamAlgorithm); UnknownExtensionsEncode(strm); } PObject * H245_AuthenticationCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_AuthenticationCapability::Class()), PInvalidCast); #endif return new H245_AuthenticationCapability(*this); } // // IntegrityCapability // H245_IntegrityCapability::H245_IntegrityCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_IntegrityCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandard)) strm << setw(indent+14) << "nonStandard = " << setprecision(indent) << m_nonStandard << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_IntegrityCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_IntegrityCapability), PInvalidCast); #endif const H245_IntegrityCapability & other = (const H245_IntegrityCapability &)obj; Comparison result; if ((result = m_nonStandard.Compare(other.m_nonStandard)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_IntegrityCapability::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandard)) length += m_nonStandard.GetObjectLength(); return length; } PBoolean H245_IntegrityCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandard) && !m_nonStandard.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_IntegrityCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandard)) m_nonStandard.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_IntegrityCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_IntegrityCapability::Class()), PInvalidCast); #endif return new H245_IntegrityCapability(*this); } // // ConferenceCapability // H245_ConferenceCapability::H245_ConferenceCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 2) { IncludeOptionalField(e_videoIndicateMixingCapability); } #ifndef PASN_NOPRINTON void H245_ConferenceCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent+25) << "chairControlCapability = " << setprecision(indent) << m_chairControlCapability << '\n'; if (HasOptionalField(e_videoIndicateMixingCapability)) strm << setw(indent+32) << "videoIndicateMixingCapability = " << setprecision(indent) << m_videoIndicateMixingCapability << '\n'; if (HasOptionalField(e_multipointVisualizationCapability)) strm << setw(indent+36) << "multipointVisualizationCapability = " << setprecision(indent) << m_multipointVisualizationCapability << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_ConferenceCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_ConferenceCapability), PInvalidCast); #endif const H245_ConferenceCapability & other = (const H245_ConferenceCapability &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_chairControlCapability.Compare(other.m_chairControlCapability)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_ConferenceCapability::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); length += m_chairControlCapability.GetObjectLength(); return length; } PBoolean H245_ConferenceCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!m_chairControlCapability.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_videoIndicateMixingCapability, m_videoIndicateMixingCapability)) return FALSE; if (!KnownExtensionDecode(strm, e_multipointVisualizationCapability, m_multipointVisualizationCapability)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_ConferenceCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); m_chairControlCapability.Encode(strm); KnownExtensionEncode(strm, e_videoIndicateMixingCapability, m_videoIndicateMixingCapability); KnownExtensionEncode(strm, e_multipointVisualizationCapability, m_multipointVisualizationCapability); UnknownExtensionsEncode(strm); } PObject * H245_ConferenceCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ConferenceCapability::Class()), PInvalidCast); #endif return new H245_ConferenceCapability(*this); } // // GenericCapability // H245_GenericCapability::H245_GenericCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 5, TRUE, 0) { m_maxBitRate.SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); } #ifndef PASN_NOPRINTON void H245_GenericCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+23) << "capabilityIdentifier = " << setprecision(indent) << m_capabilityIdentifier << '\n'; if (HasOptionalField(e_maxBitRate)) strm << setw(indent+13) << "maxBitRate = " << setprecision(indent) << m_maxBitRate << '\n'; if (HasOptionalField(e_collapsing)) strm << setw(indent+13) << "collapsing = " << setprecision(indent) << m_collapsing << '\n'; if (HasOptionalField(e_nonCollapsing)) strm << setw(indent+16) << "nonCollapsing = " << setprecision(indent) << m_nonCollapsing << '\n'; if (HasOptionalField(e_nonCollapsingRaw)) strm << setw(indent+19) << "nonCollapsingRaw = " << setprecision(indent) << m_nonCollapsingRaw << '\n'; if (HasOptionalField(e_transport)) strm << setw(indent+12) << "transport = " << setprecision(indent) << m_transport << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_GenericCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_GenericCapability), PInvalidCast); #endif const H245_GenericCapability & other = (const H245_GenericCapability &)obj; Comparison result; if ((result = m_capabilityIdentifier.Compare(other.m_capabilityIdentifier)) != EqualTo) return result; if ((result = m_maxBitRate.Compare(other.m_maxBitRate)) != EqualTo) return result; if ((result = m_collapsing.Compare(other.m_collapsing)) != EqualTo) return result; if ((result = m_nonCollapsing.Compare(other.m_nonCollapsing)) != EqualTo) return result; if ((result = m_nonCollapsingRaw.Compare(other.m_nonCollapsingRaw)) != EqualTo) return result; if ((result = m_transport.Compare(other.m_transport)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_GenericCapability::GetDataLength() const { PINDEX length = 0; length += m_capabilityIdentifier.GetObjectLength(); if (HasOptionalField(e_maxBitRate)) length += m_maxBitRate.GetObjectLength(); if (HasOptionalField(e_collapsing)) length += m_collapsing.GetObjectLength(); if (HasOptionalField(e_nonCollapsing)) length += m_nonCollapsing.GetObjectLength(); if (HasOptionalField(e_nonCollapsingRaw)) length += m_nonCollapsingRaw.GetObjectLength(); if (HasOptionalField(e_transport)) length += m_transport.GetObjectLength(); return length; } PBoolean H245_GenericCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_capabilityIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_maxBitRate) && !m_maxBitRate.Decode(strm)) return FALSE; if (HasOptionalField(e_collapsing) && !m_collapsing.Decode(strm)) return FALSE; if (HasOptionalField(e_nonCollapsing) && !m_nonCollapsing.Decode(strm)) return FALSE; if (HasOptionalField(e_nonCollapsingRaw) && !m_nonCollapsingRaw.Decode(strm)) return FALSE; if (HasOptionalField(e_transport) && !m_transport.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_GenericCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_capabilityIdentifier.Encode(strm); if (HasOptionalField(e_maxBitRate)) m_maxBitRate.Encode(strm); if (HasOptionalField(e_collapsing)) m_collapsing.Encode(strm); if (HasOptionalField(e_nonCollapsing)) m_nonCollapsing.Encode(strm); if (HasOptionalField(e_nonCollapsingRaw)) m_nonCollapsingRaw.Encode(strm); if (HasOptionalField(e_transport)) m_transport.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_GenericCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_GenericCapability::Class()), PInvalidCast); #endif return new H245_GenericCapability(*this); } // // GenericParameter // H245_GenericParameter::H245_GenericParameter(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_GenericParameter::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+22) << "parameterIdentifier = " << setprecision(indent) << m_parameterIdentifier << '\n'; strm << setw(indent+17) << "parameterValue = " << setprecision(indent) << m_parameterValue << '\n'; if (HasOptionalField(e_supersedes)) strm << setw(indent+13) << "supersedes = " << setprecision(indent) << m_supersedes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_GenericParameter::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_GenericParameter), PInvalidCast); #endif const H245_GenericParameter & other = (const H245_GenericParameter &)obj; Comparison result; if ((result = m_parameterIdentifier.Compare(other.m_parameterIdentifier)) != EqualTo) return result; if ((result = m_parameterValue.Compare(other.m_parameterValue)) != EqualTo) return result; if ((result = m_supersedes.Compare(other.m_supersedes)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_GenericParameter::GetDataLength() const { PINDEX length = 0; length += m_parameterIdentifier.GetObjectLength(); length += m_parameterValue.GetObjectLength(); if (HasOptionalField(e_supersedes)) length += m_supersedes.GetObjectLength(); return length; } PBoolean H245_GenericParameter::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_parameterIdentifier.Decode(strm)) return FALSE; if (!m_parameterValue.Decode(strm)) return FALSE; if (HasOptionalField(e_supersedes) && !m_supersedes.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_GenericParameter::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_parameterIdentifier.Encode(strm); m_parameterValue.Encode(strm); if (HasOptionalField(e_supersedes)) m_supersedes.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_GenericParameter::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_GenericParameter::Class()), PInvalidCast); #endif return new H245_GenericParameter(*this); } // // MultiplexedStreamCapability // H245_MultiplexedStreamCapability::H245_MultiplexedStreamCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_capabilityOnMuxStream.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_MultiplexedStreamCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+18) << "multiplexFormat = " << setprecision(indent) << m_multiplexFormat << '\n'; strm << setw(indent+21) << "controlOnMuxStream = " << setprecision(indent) << m_controlOnMuxStream << '\n'; if (HasOptionalField(e_capabilityOnMuxStream)) strm << setw(indent+24) << "capabilityOnMuxStream = " << setprecision(indent) << m_capabilityOnMuxStream << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultiplexedStreamCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultiplexedStreamCapability), PInvalidCast); #endif const H245_MultiplexedStreamCapability & other = (const H245_MultiplexedStreamCapability &)obj; Comparison result; if ((result = m_multiplexFormat.Compare(other.m_multiplexFormat)) != EqualTo) return result; if ((result = m_controlOnMuxStream.Compare(other.m_controlOnMuxStream)) != EqualTo) return result; if ((result = m_capabilityOnMuxStream.Compare(other.m_capabilityOnMuxStream)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultiplexedStreamCapability::GetDataLength() const { PINDEX length = 0; length += m_multiplexFormat.GetObjectLength(); length += m_controlOnMuxStream.GetObjectLength(); if (HasOptionalField(e_capabilityOnMuxStream)) length += m_capabilityOnMuxStream.GetObjectLength(); return length; } PBoolean H245_MultiplexedStreamCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_multiplexFormat.Decode(strm)) return FALSE; if (!m_controlOnMuxStream.Decode(strm)) return FALSE; if (HasOptionalField(e_capabilityOnMuxStream) && !m_capabilityOnMuxStream.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultiplexedStreamCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_multiplexFormat.Encode(strm); m_controlOnMuxStream.Encode(strm); if (HasOptionalField(e_capabilityOnMuxStream)) m_capabilityOnMuxStream.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultiplexedStreamCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultiplexedStreamCapability::Class()), PInvalidCast); #endif return new H245_MultiplexedStreamCapability(*this); } // // MultiplePayloadStreamCapability // H245_MultiplePayloadStreamCapability::H245_MultiplePayloadStreamCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_capabilities.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_MultiplePayloadStreamCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "capabilities = " << setprecision(indent) << m_capabilities << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultiplePayloadStreamCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultiplePayloadStreamCapability), PInvalidCast); #endif const H245_MultiplePayloadStreamCapability & other = (const H245_MultiplePayloadStreamCapability &)obj; Comparison result; if ((result = m_capabilities.Compare(other.m_capabilities)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultiplePayloadStreamCapability::GetDataLength() const { PINDEX length = 0; length += m_capabilities.GetObjectLength(); return length; } PBoolean H245_MultiplePayloadStreamCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_capabilities.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultiplePayloadStreamCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_capabilities.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultiplePayloadStreamCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultiplePayloadStreamCapability::Class()), PInvalidCast); #endif return new H245_MultiplePayloadStreamCapability(*this); } // // FECCapability // H245_FECCapability::H245_FECCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_FECCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+22) << "protectedCapability = " << setprecision(indent) << m_protectedCapability << '\n'; if (HasOptionalField(e_fecScheme)) strm << setw(indent+12) << "fecScheme = " << setprecision(indent) << m_fecScheme << '\n'; if (HasOptionalField(e_rfc2733Format)) strm << setw(indent+16) << "rfc2733Format = " << setprecision(indent) << m_rfc2733Format << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_FECCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_FECCapability), PInvalidCast); #endif const H245_FECCapability & other = (const H245_FECCapability &)obj; Comparison result; if ((result = m_protectedCapability.Compare(other.m_protectedCapability)) != EqualTo) return result; if ((result = m_fecScheme.Compare(other.m_fecScheme)) != EqualTo) return result; if ((result = m_rfc2733Format.Compare(other.m_rfc2733Format)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_FECCapability::GetDataLength() const { PINDEX length = 0; length += m_protectedCapability.GetObjectLength(); if (HasOptionalField(e_fecScheme)) length += m_fecScheme.GetObjectLength(); if (HasOptionalField(e_rfc2733Format)) length += m_rfc2733Format.GetObjectLength(); return length; } PBoolean H245_FECCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_protectedCapability.Decode(strm)) return FALSE; if (HasOptionalField(e_fecScheme) && !m_fecScheme.Decode(strm)) return FALSE; if (HasOptionalField(e_rfc2733Format) && !m_rfc2733Format.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_FECCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_protectedCapability.Encode(strm); if (HasOptionalField(e_fecScheme)) m_fecScheme.Encode(strm); if (HasOptionalField(e_rfc2733Format)) m_rfc2733Format.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_FECCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_FECCapability::Class()), PInvalidCast); #endif return new H245_FECCapability(*this); } // // NetworkAccessParameters // H245_NetworkAccessParameters::H245_NetworkAccessParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 1) { m_externalReference.SetConstraints(PASN_Object::FixedConstraint, 1, 255); } #ifndef PASN_NOPRINTON void H245_NetworkAccessParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_distribution)) strm << setw(indent+15) << "distribution = " << setprecision(indent) << m_distribution << '\n'; strm << setw(indent+17) << "networkAddress = " << setprecision(indent) << m_networkAddress << '\n'; strm << setw(indent+22) << "associateConference = " << setprecision(indent) << m_associateConference << '\n'; if (HasOptionalField(e_externalReference)) strm << setw(indent+20) << "externalReference = " << setprecision(indent) << m_externalReference << '\n'; if (HasOptionalField(e_t120SetupProcedure)) strm << setw(indent+21) << "t120SetupProcedure = " << setprecision(indent) << m_t120SetupProcedure << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_NetworkAccessParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_NetworkAccessParameters), PInvalidCast); #endif const H245_NetworkAccessParameters & other = (const H245_NetworkAccessParameters &)obj; Comparison result; if ((result = m_distribution.Compare(other.m_distribution)) != EqualTo) return result; if ((result = m_networkAddress.Compare(other.m_networkAddress)) != EqualTo) return result; if ((result = m_associateConference.Compare(other.m_associateConference)) != EqualTo) return result; if ((result = m_externalReference.Compare(other.m_externalReference)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_NetworkAccessParameters::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_distribution)) length += m_distribution.GetObjectLength(); length += m_networkAddress.GetObjectLength(); length += m_associateConference.GetObjectLength(); if (HasOptionalField(e_externalReference)) length += m_externalReference.GetObjectLength(); return length; } PBoolean H245_NetworkAccessParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_distribution) && !m_distribution.Decode(strm)) return FALSE; if (!m_networkAddress.Decode(strm)) return FALSE; if (!m_associateConference.Decode(strm)) return FALSE; if (HasOptionalField(e_externalReference) && !m_externalReference.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_t120SetupProcedure, m_t120SetupProcedure)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_NetworkAccessParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_distribution)) m_distribution.Encode(strm); m_networkAddress.Encode(strm); m_associateConference.Encode(strm); if (HasOptionalField(e_externalReference)) m_externalReference.Encode(strm); KnownExtensionEncode(strm, e_t120SetupProcedure, m_t120SetupProcedure); UnknownExtensionsEncode(strm); } PObject * H245_NetworkAccessParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NetworkAccessParameters::Class()), PInvalidCast); #endif return new H245_NetworkAccessParameters(*this); } // // Q2931Address // H245_Q2931Address::H245_Q2931Address(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_subaddress.SetConstraints(PASN_Object::FixedConstraint, 1, 20); } #ifndef PASN_NOPRINTON void H245_Q2931Address::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "address = " << setprecision(indent) << m_address << '\n'; if (HasOptionalField(e_subaddress)) strm << setw(indent+13) << "subaddress = " << setprecision(indent) << m_subaddress << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_Q2931Address::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_Q2931Address), PInvalidCast); #endif const H245_Q2931Address & other = (const H245_Q2931Address &)obj; Comparison result; if ((result = m_address.Compare(other.m_address)) != EqualTo) return result; if ((result = m_subaddress.Compare(other.m_subaddress)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_Q2931Address::GetDataLength() const { PINDEX length = 0; length += m_address.GetObjectLength(); if (HasOptionalField(e_subaddress)) length += m_subaddress.GetObjectLength(); return length; } PBoolean H245_Q2931Address::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_address.Decode(strm)) return FALSE; if (HasOptionalField(e_subaddress) && !m_subaddress.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_Q2931Address::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_address.Encode(strm); if (HasOptionalField(e_subaddress)) m_subaddress.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_Q2931Address::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_Q2931Address::Class()), PInvalidCast); #endif return new H245_Q2931Address(*this); } // // H223LogicalChannelParameters // H245_H223LogicalChannelParameters::H245_H223LogicalChannelParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_H223LogicalChannelParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+22) << "adaptationLayerType = " << setprecision(indent) << m_adaptationLayerType << '\n'; strm << setw(indent+18) << "segmentableFlag = " << setprecision(indent) << m_segmentableFlag << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H223LogicalChannelParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H223LogicalChannelParameters), PInvalidCast); #endif const H245_H223LogicalChannelParameters & other = (const H245_H223LogicalChannelParameters &)obj; Comparison result; if ((result = m_adaptationLayerType.Compare(other.m_adaptationLayerType)) != EqualTo) return result; if ((result = m_segmentableFlag.Compare(other.m_segmentableFlag)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H223LogicalChannelParameters::GetDataLength() const { PINDEX length = 0; length += m_adaptationLayerType.GetObjectLength(); length += m_segmentableFlag.GetObjectLength(); return length; } PBoolean H245_H223LogicalChannelParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_adaptationLayerType.Decode(strm)) return FALSE; if (!m_segmentableFlag.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H223LogicalChannelParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_adaptationLayerType.Encode(strm); m_segmentableFlag.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H223LogicalChannelParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223LogicalChannelParameters::Class()), PInvalidCast); #endif return new H245_H223LogicalChannelParameters(*this); } // // H223AL1MParameters // H245_H223AL1MParameters::H245_H223AL1MParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 1) { m_rcpcCodeRate.SetConstraints(PASN_Object::FixedConstraint, 8, 32); m_rsCodeCorrection.SetConstraints(PASN_Object::FixedConstraint, 0, 127); } #ifndef PASN_NOPRINTON void H245_H223AL1MParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "transferMode = " << setprecision(indent) << m_transferMode << '\n'; strm << setw(indent+12) << "headerFEC = " << setprecision(indent) << m_headerFEC << '\n'; strm << setw(indent+12) << "crcLength = " << setprecision(indent) << m_crcLength << '\n'; strm << setw(indent+15) << "rcpcCodeRate = " << setprecision(indent) << m_rcpcCodeRate << '\n'; strm << setw(indent+10) << "arqType = " << setprecision(indent) << m_arqType << '\n'; strm << setw(indent+20) << "alpduInterleaving = " << setprecision(indent) << m_alpduInterleaving << '\n'; strm << setw(indent+17) << "alsduSplitting = " << setprecision(indent) << m_alsduSplitting << '\n'; if (HasOptionalField(e_rsCodeCorrection)) strm << setw(indent+19) << "rsCodeCorrection = " << setprecision(indent) << m_rsCodeCorrection << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H223AL1MParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H223AL1MParameters), PInvalidCast); #endif const H245_H223AL1MParameters & other = (const H245_H223AL1MParameters &)obj; Comparison result; if ((result = m_transferMode.Compare(other.m_transferMode)) != EqualTo) return result; if ((result = m_headerFEC.Compare(other.m_headerFEC)) != EqualTo) return result; if ((result = m_crcLength.Compare(other.m_crcLength)) != EqualTo) return result; if ((result = m_rcpcCodeRate.Compare(other.m_rcpcCodeRate)) != EqualTo) return result; if ((result = m_arqType.Compare(other.m_arqType)) != EqualTo) return result; if ((result = m_alpduInterleaving.Compare(other.m_alpduInterleaving)) != EqualTo) return result; if ((result = m_alsduSplitting.Compare(other.m_alsduSplitting)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H223AL1MParameters::GetDataLength() const { PINDEX length = 0; length += m_transferMode.GetObjectLength(); length += m_headerFEC.GetObjectLength(); length += m_crcLength.GetObjectLength(); length += m_rcpcCodeRate.GetObjectLength(); length += m_arqType.GetObjectLength(); length += m_alpduInterleaving.GetObjectLength(); length += m_alsduSplitting.GetObjectLength(); return length; } PBoolean H245_H223AL1MParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_transferMode.Decode(strm)) return FALSE; if (!m_headerFEC.Decode(strm)) return FALSE; if (!m_crcLength.Decode(strm)) return FALSE; if (!m_rcpcCodeRate.Decode(strm)) return FALSE; if (!m_arqType.Decode(strm)) return FALSE; if (!m_alpduInterleaving.Decode(strm)) return FALSE; if (!m_alsduSplitting.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_rsCodeCorrection, m_rsCodeCorrection)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H223AL1MParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_transferMode.Encode(strm); m_headerFEC.Encode(strm); m_crcLength.Encode(strm); m_rcpcCodeRate.Encode(strm); m_arqType.Encode(strm); m_alpduInterleaving.Encode(strm); m_alsduSplitting.Encode(strm); KnownExtensionEncode(strm, e_rsCodeCorrection, m_rsCodeCorrection); UnknownExtensionsEncode(strm); } PObject * H245_H223AL1MParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223AL1MParameters::Class()), PInvalidCast); #endif return new H245_H223AL1MParameters(*this); } // // H223AL2MParameters // H245_H223AL2MParameters::H245_H223AL2MParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_H223AL2MParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "headerFEC = " << setprecision(indent) << m_headerFEC << '\n'; strm << setw(indent+20) << "alpduInterleaving = " << setprecision(indent) << m_alpduInterleaving << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H223AL2MParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H223AL2MParameters), PInvalidCast); #endif const H245_H223AL2MParameters & other = (const H245_H223AL2MParameters &)obj; Comparison result; if ((result = m_headerFEC.Compare(other.m_headerFEC)) != EqualTo) return result; if ((result = m_alpduInterleaving.Compare(other.m_alpduInterleaving)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H223AL2MParameters::GetDataLength() const { PINDEX length = 0; length += m_headerFEC.GetObjectLength(); length += m_alpduInterleaving.GetObjectLength(); return length; } PBoolean H245_H223AL2MParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_headerFEC.Decode(strm)) return FALSE; if (!m_alpduInterleaving.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H223AL2MParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_headerFEC.Encode(strm); m_alpduInterleaving.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H223AL2MParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223AL2MParameters::Class()), PInvalidCast); #endif return new H245_H223AL2MParameters(*this); } // // H223AL3MParameters // H245_H223AL3MParameters::H245_H223AL3MParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 1) { m_rcpcCodeRate.SetConstraints(PASN_Object::FixedConstraint, 8, 32); m_rsCodeCorrection.SetConstraints(PASN_Object::FixedConstraint, 0, 127); } #ifndef PASN_NOPRINTON void H245_H223AL3MParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "headerFormat = " << setprecision(indent) << m_headerFormat << '\n'; strm << setw(indent+12) << "crcLength = " << setprecision(indent) << m_crcLength << '\n'; strm << setw(indent+15) << "rcpcCodeRate = " << setprecision(indent) << m_rcpcCodeRate << '\n'; strm << setw(indent+10) << "arqType = " << setprecision(indent) << m_arqType << '\n'; strm << setw(indent+20) << "alpduInterleaving = " << setprecision(indent) << m_alpduInterleaving << '\n'; if (HasOptionalField(e_rsCodeCorrection)) strm << setw(indent+19) << "rsCodeCorrection = " << setprecision(indent) << m_rsCodeCorrection << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H223AL3MParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H223AL3MParameters), PInvalidCast); #endif const H245_H223AL3MParameters & other = (const H245_H223AL3MParameters &)obj; Comparison result; if ((result = m_headerFormat.Compare(other.m_headerFormat)) != EqualTo) return result; if ((result = m_crcLength.Compare(other.m_crcLength)) != EqualTo) return result; if ((result = m_rcpcCodeRate.Compare(other.m_rcpcCodeRate)) != EqualTo) return result; if ((result = m_arqType.Compare(other.m_arqType)) != EqualTo) return result; if ((result = m_alpduInterleaving.Compare(other.m_alpduInterleaving)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H223AL3MParameters::GetDataLength() const { PINDEX length = 0; length += m_headerFormat.GetObjectLength(); length += m_crcLength.GetObjectLength(); length += m_rcpcCodeRate.GetObjectLength(); length += m_arqType.GetObjectLength(); length += m_alpduInterleaving.GetObjectLength(); return length; } PBoolean H245_H223AL3MParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_headerFormat.Decode(strm)) return FALSE; if (!m_crcLength.Decode(strm)) return FALSE; if (!m_rcpcCodeRate.Decode(strm)) return FALSE; if (!m_arqType.Decode(strm)) return FALSE; if (!m_alpduInterleaving.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_rsCodeCorrection, m_rsCodeCorrection)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H223AL3MParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_headerFormat.Encode(strm); m_crcLength.Encode(strm); m_rcpcCodeRate.Encode(strm); m_arqType.Encode(strm); m_alpduInterleaving.Encode(strm); KnownExtensionEncode(strm, e_rsCodeCorrection, m_rsCodeCorrection); UnknownExtensionsEncode(strm); } PObject * H245_H223AL3MParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223AL3MParameters::Class()), PInvalidCast); #endif return new H245_H223AL3MParameters(*this); } // // H223AnnexCArqParameters // H245_H223AnnexCArqParameters::H245_H223AnnexCArqParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_sendBufferSize.SetConstraints(PASN_Object::FixedConstraint, 0, 16777215); } #ifndef PASN_NOPRINTON void H245_H223AnnexCArqParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+26) << "numberOfRetransmissions = " << setprecision(indent) << m_numberOfRetransmissions << '\n'; strm << setw(indent+17) << "sendBufferSize = " << setprecision(indent) << m_sendBufferSize << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H223AnnexCArqParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H223AnnexCArqParameters), PInvalidCast); #endif const H245_H223AnnexCArqParameters & other = (const H245_H223AnnexCArqParameters &)obj; Comparison result; if ((result = m_numberOfRetransmissions.Compare(other.m_numberOfRetransmissions)) != EqualTo) return result; if ((result = m_sendBufferSize.Compare(other.m_sendBufferSize)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H223AnnexCArqParameters::GetDataLength() const { PINDEX length = 0; length += m_numberOfRetransmissions.GetObjectLength(); length += m_sendBufferSize.GetObjectLength(); return length; } PBoolean H245_H223AnnexCArqParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_numberOfRetransmissions.Decode(strm)) return FALSE; if (!m_sendBufferSize.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H223AnnexCArqParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_numberOfRetransmissions.Encode(strm); m_sendBufferSize.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H223AnnexCArqParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223AnnexCArqParameters::Class()), PInvalidCast); #endif return new H245_H223AnnexCArqParameters(*this); } // // V76HDLCParameters // H245_V76HDLCParameters::H245_V76HDLCParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_n401.SetConstraints(PASN_Object::FixedConstraint, 1, 4095); } #ifndef PASN_NOPRINTON void H245_V76HDLCParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "crcLength = " << setprecision(indent) << m_crcLength << '\n'; strm << setw(indent+7) << "n401 = " << setprecision(indent) << m_n401 << '\n'; strm << setw(indent+24) << "loopbackTestProcedure = " << setprecision(indent) << m_loopbackTestProcedure << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_V76HDLCParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_V76HDLCParameters), PInvalidCast); #endif const H245_V76HDLCParameters & other = (const H245_V76HDLCParameters &)obj; Comparison result; if ((result = m_crcLength.Compare(other.m_crcLength)) != EqualTo) return result; if ((result = m_n401.Compare(other.m_n401)) != EqualTo) return result; if ((result = m_loopbackTestProcedure.Compare(other.m_loopbackTestProcedure)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_V76HDLCParameters::GetDataLength() const { PINDEX length = 0; length += m_crcLength.GetObjectLength(); length += m_n401.GetObjectLength(); length += m_loopbackTestProcedure.GetObjectLength(); return length; } PBoolean H245_V76HDLCParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_crcLength.Decode(strm)) return FALSE; if (!m_n401.Decode(strm)) return FALSE; if (!m_loopbackTestProcedure.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_V76HDLCParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_crcLength.Encode(strm); m_n401.Encode(strm); m_loopbackTestProcedure.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_V76HDLCParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_V76HDLCParameters::Class()), PInvalidCast); #endif return new H245_V76HDLCParameters(*this); } // // RTPPayloadType // H245_RTPPayloadType::H245_RTPPayloadType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_payloadType.SetConstraints(PASN_Object::FixedConstraint, 0, 127); } #ifndef PASN_NOPRINTON void H245_RTPPayloadType::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+20) << "payloadDescriptor = " << setprecision(indent) << m_payloadDescriptor << '\n'; if (HasOptionalField(e_payloadType)) strm << setw(indent+14) << "payloadType = " << setprecision(indent) << m_payloadType << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RTPPayloadType::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RTPPayloadType), PInvalidCast); #endif const H245_RTPPayloadType & other = (const H245_RTPPayloadType &)obj; Comparison result; if ((result = m_payloadDescriptor.Compare(other.m_payloadDescriptor)) != EqualTo) return result; if ((result = m_payloadType.Compare(other.m_payloadType)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RTPPayloadType::GetDataLength() const { PINDEX length = 0; length += m_payloadDescriptor.GetObjectLength(); if (HasOptionalField(e_payloadType)) length += m_payloadType.GetObjectLength(); return length; } PBoolean H245_RTPPayloadType::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_payloadDescriptor.Decode(strm)) return FALSE; if (HasOptionalField(e_payloadType) && !m_payloadType.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RTPPayloadType::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_payloadDescriptor.Encode(strm); if (HasOptionalField(e_payloadType)) m_payloadType.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RTPPayloadType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RTPPayloadType::Class()), PInvalidCast); #endif return new H245_RTPPayloadType(*this); } // // MultiplePayloadStream // H245_MultiplePayloadStream::H245_MultiplePayloadStream(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MultiplePayloadStream::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "elements = " << setprecision(indent) << m_elements << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultiplePayloadStream::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultiplePayloadStream), PInvalidCast); #endif const H245_MultiplePayloadStream & other = (const H245_MultiplePayloadStream &)obj; Comparison result; if ((result = m_elements.Compare(other.m_elements)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultiplePayloadStream::GetDataLength() const { PINDEX length = 0; length += m_elements.GetObjectLength(); return length; } PBoolean H245_MultiplePayloadStream::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_elements.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultiplePayloadStream::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_elements.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultiplePayloadStream::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultiplePayloadStream::Class()), PInvalidCast); #endif return new H245_MultiplePayloadStream(*this); } // // EncryptionSync // H245_EncryptionSync::H245_EncryptionSync(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 1) { m_synchFlag.SetConstraints(PASN_Object::FixedConstraint, 0, 255); m_h235Key.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); m_escrowentry.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_EncryptionSync::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandard)) strm << setw(indent+14) << "nonStandard = " << setprecision(indent) << m_nonStandard << '\n'; strm << setw(indent+12) << "synchFlag = " << setprecision(indent) << m_synchFlag << '\n'; strm << setw(indent+10) << "h235Key = " << setprecision(indent) << m_h235Key << '\n'; if (HasOptionalField(e_escrowentry)) strm << setw(indent+14) << "escrowentry = " << setprecision(indent) << m_escrowentry << '\n'; if (HasOptionalField(e_genericParameter)) strm << setw(indent+19) << "genericParameter = " << setprecision(indent) << m_genericParameter << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_EncryptionSync::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_EncryptionSync), PInvalidCast); #endif const H245_EncryptionSync & other = (const H245_EncryptionSync &)obj; Comparison result; if ((result = m_nonStandard.Compare(other.m_nonStandard)) != EqualTo) return result; if ((result = m_synchFlag.Compare(other.m_synchFlag)) != EqualTo) return result; if ((result = m_h235Key.Compare(other.m_h235Key)) != EqualTo) return result; if ((result = m_escrowentry.Compare(other.m_escrowentry)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_EncryptionSync::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandard)) length += m_nonStandard.GetObjectLength(); length += m_synchFlag.GetObjectLength(); length += m_h235Key.GetObjectLength(); if (HasOptionalField(e_escrowentry)) length += m_escrowentry.GetObjectLength(); return length; } PBoolean H245_EncryptionSync::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandard) && !m_nonStandard.Decode(strm)) return FALSE; if (!m_synchFlag.Decode(strm)) return FALSE; if (!m_h235Key.Decode(strm)) return FALSE; if (HasOptionalField(e_escrowentry) && !m_escrowentry.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_genericParameter, m_genericParameter)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_EncryptionSync::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandard)) m_nonStandard.Encode(strm); m_synchFlag.Encode(strm); m_h235Key.Encode(strm); if (HasOptionalField(e_escrowentry)) m_escrowentry.Encode(strm); KnownExtensionEncode(strm, e_genericParameter, m_genericParameter); UnknownExtensionsEncode(strm); } PObject * H245_EncryptionSync::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_EncryptionSync::Class()), PInvalidCast); #endif return new H245_EncryptionSync(*this); } // // OpenLogicalChannelReject // H245_OpenLogicalChannelReject::H245_OpenLogicalChannelReject(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 1) { } #ifndef PASN_NOPRINTON void H245_OpenLogicalChannelReject::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+30) << "forwardLogicalChannelNumber = " << setprecision(indent) << m_forwardLogicalChannelNumber << '\n'; strm << setw(indent+8) << "cause = " << setprecision(indent) << m_cause << '\n'; if (HasOptionalField(e_genericInformation)) strm << setw(indent+21) << "genericInformation = " << setprecision(indent) << m_genericInformation << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_OpenLogicalChannelReject::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_OpenLogicalChannelReject), PInvalidCast); #endif const H245_OpenLogicalChannelReject & other = (const H245_OpenLogicalChannelReject &)obj; Comparison result; if ((result = m_forwardLogicalChannelNumber.Compare(other.m_forwardLogicalChannelNumber)) != EqualTo) return result; if ((result = m_cause.Compare(other.m_cause)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_OpenLogicalChannelReject::GetDataLength() const { PINDEX length = 0; length += m_forwardLogicalChannelNumber.GetObjectLength(); length += m_cause.GetObjectLength(); return length; } PBoolean H245_OpenLogicalChannelReject::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_forwardLogicalChannelNumber.Decode(strm)) return FALSE; if (!m_cause.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_genericInformation, m_genericInformation)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_OpenLogicalChannelReject::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_forwardLogicalChannelNumber.Encode(strm); m_cause.Encode(strm); KnownExtensionEncode(strm, e_genericInformation, m_genericInformation); UnknownExtensionsEncode(strm); } PObject * H245_OpenLogicalChannelReject::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_OpenLogicalChannelReject::Class()), PInvalidCast); #endif return new H245_OpenLogicalChannelReject(*this); } // // OpenLogicalChannelConfirm // H245_OpenLogicalChannelConfirm::H245_OpenLogicalChannelConfirm(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 1) { } #ifndef PASN_NOPRINTON void H245_OpenLogicalChannelConfirm::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+30) << "forwardLogicalChannelNumber = " << setprecision(indent) << m_forwardLogicalChannelNumber << '\n'; if (HasOptionalField(e_genericInformation)) strm << setw(indent+21) << "genericInformation = " << setprecision(indent) << m_genericInformation << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_OpenLogicalChannelConfirm::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_OpenLogicalChannelConfirm), PInvalidCast); #endif const H245_OpenLogicalChannelConfirm & other = (const H245_OpenLogicalChannelConfirm &)obj; Comparison result; if ((result = m_forwardLogicalChannelNumber.Compare(other.m_forwardLogicalChannelNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_OpenLogicalChannelConfirm::GetDataLength() const { PINDEX length = 0; length += m_forwardLogicalChannelNumber.GetObjectLength(); return length; } PBoolean H245_OpenLogicalChannelConfirm::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_forwardLogicalChannelNumber.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_genericInformation, m_genericInformation)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_OpenLogicalChannelConfirm::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_forwardLogicalChannelNumber.Encode(strm); KnownExtensionEncode(strm, e_genericInformation, m_genericInformation); UnknownExtensionsEncode(strm); } PObject * H245_OpenLogicalChannelConfirm::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_OpenLogicalChannelConfirm::Class()), PInvalidCast); #endif return new H245_OpenLogicalChannelConfirm(*this); } // // H2250LogicalChannelAckParameters // H245_H2250LogicalChannelAckParameters::H245_H2250LogicalChannelAckParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 5, TRUE, 2) { m_sessionID.SetConstraints(PASN_Object::FixedConstraint, 1, 255); m_dynamicRTPPayloadType.SetConstraints(PASN_Object::FixedConstraint, 96, 127); IncludeOptionalField(e_flowControlToZero); m_portNumber.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H245_H2250LogicalChannelAckParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandard)) strm << setw(indent+14) << "nonStandard = " << setprecision(indent) << m_nonStandard << '\n'; if (HasOptionalField(e_sessionID)) strm << setw(indent+12) << "sessionID = " << setprecision(indent) << m_sessionID << '\n'; if (HasOptionalField(e_mediaChannel)) strm << setw(indent+15) << "mediaChannel = " << setprecision(indent) << m_mediaChannel << '\n'; if (HasOptionalField(e_mediaControlChannel)) strm << setw(indent+22) << "mediaControlChannel = " << setprecision(indent) << m_mediaControlChannel << '\n'; if (HasOptionalField(e_dynamicRTPPayloadType)) strm << setw(indent+24) << "dynamicRTPPayloadType = " << setprecision(indent) << m_dynamicRTPPayloadType << '\n'; if (HasOptionalField(e_flowControlToZero)) strm << setw(indent+20) << "flowControlToZero = " << setprecision(indent) << m_flowControlToZero << '\n'; if (HasOptionalField(e_portNumber)) strm << setw(indent+13) << "portNumber = " << setprecision(indent) << m_portNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H2250LogicalChannelAckParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H2250LogicalChannelAckParameters), PInvalidCast); #endif const H245_H2250LogicalChannelAckParameters & other = (const H245_H2250LogicalChannelAckParameters &)obj; Comparison result; if ((result = m_nonStandard.Compare(other.m_nonStandard)) != EqualTo) return result; if ((result = m_sessionID.Compare(other.m_sessionID)) != EqualTo) return result; if ((result = m_mediaChannel.Compare(other.m_mediaChannel)) != EqualTo) return result; if ((result = m_mediaControlChannel.Compare(other.m_mediaControlChannel)) != EqualTo) return result; if ((result = m_dynamicRTPPayloadType.Compare(other.m_dynamicRTPPayloadType)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H2250LogicalChannelAckParameters::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandard)) length += m_nonStandard.GetObjectLength(); if (HasOptionalField(e_sessionID)) length += m_sessionID.GetObjectLength(); if (HasOptionalField(e_mediaChannel)) length += m_mediaChannel.GetObjectLength(); if (HasOptionalField(e_mediaControlChannel)) length += m_mediaControlChannel.GetObjectLength(); if (HasOptionalField(e_dynamicRTPPayloadType)) length += m_dynamicRTPPayloadType.GetObjectLength(); return length; } PBoolean H245_H2250LogicalChannelAckParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandard) && !m_nonStandard.Decode(strm)) return FALSE; if (HasOptionalField(e_sessionID) && !m_sessionID.Decode(strm)) return FALSE; if (HasOptionalField(e_mediaChannel) && !m_mediaChannel.Decode(strm)) return FALSE; if (HasOptionalField(e_mediaControlChannel) && !m_mediaControlChannel.Decode(strm)) return FALSE; if (HasOptionalField(e_dynamicRTPPayloadType) && !m_dynamicRTPPayloadType.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_flowControlToZero, m_flowControlToZero)) return FALSE; if (!KnownExtensionDecode(strm, e_portNumber, m_portNumber)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H2250LogicalChannelAckParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandard)) m_nonStandard.Encode(strm); if (HasOptionalField(e_sessionID)) m_sessionID.Encode(strm); if (HasOptionalField(e_mediaChannel)) m_mediaChannel.Encode(strm); if (HasOptionalField(e_mediaControlChannel)) m_mediaControlChannel.Encode(strm); if (HasOptionalField(e_dynamicRTPPayloadType)) m_dynamicRTPPayloadType.Encode(strm); KnownExtensionEncode(strm, e_flowControlToZero, m_flowControlToZero); KnownExtensionEncode(strm, e_portNumber, m_portNumber); UnknownExtensionsEncode(strm); } PObject * H245_H2250LogicalChannelAckParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H2250LogicalChannelAckParameters::Class()), PInvalidCast); #endif return new H245_H2250LogicalChannelAckParameters(*this); } // // CloseLogicalChannel // H245_CloseLogicalChannel::H245_CloseLogicalChannel(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 1) { IncludeOptionalField(e_reason); } #ifndef PASN_NOPRINTON void H245_CloseLogicalChannel::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+30) << "forwardLogicalChannelNumber = " << setprecision(indent) << m_forwardLogicalChannelNumber << '\n'; strm << setw(indent+9) << "source = " << setprecision(indent) << m_source << '\n'; if (HasOptionalField(e_reason)) strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_CloseLogicalChannel::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_CloseLogicalChannel), PInvalidCast); #endif const H245_CloseLogicalChannel & other = (const H245_CloseLogicalChannel &)obj; Comparison result; if ((result = m_forwardLogicalChannelNumber.Compare(other.m_forwardLogicalChannelNumber)) != EqualTo) return result; if ((result = m_source.Compare(other.m_source)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_CloseLogicalChannel::GetDataLength() const { PINDEX length = 0; length += m_forwardLogicalChannelNumber.GetObjectLength(); length += m_source.GetObjectLength(); return length; } PBoolean H245_CloseLogicalChannel::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_forwardLogicalChannelNumber.Decode(strm)) return FALSE; if (!m_source.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_reason, m_reason)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_CloseLogicalChannel::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_forwardLogicalChannelNumber.Encode(strm); m_source.Encode(strm); KnownExtensionEncode(strm, e_reason, m_reason); UnknownExtensionsEncode(strm); } PObject * H245_CloseLogicalChannel::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CloseLogicalChannel::Class()), PInvalidCast); #endif return new H245_CloseLogicalChannel(*this); } // // RequestChannelClose // H245_RequestChannelClose::H245_RequestChannelClose(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 2) { IncludeOptionalField(e_reason); } #ifndef PASN_NOPRINTON void H245_RequestChannelClose::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+30) << "forwardLogicalChannelNumber = " << setprecision(indent) << m_forwardLogicalChannelNumber << '\n'; if (HasOptionalField(e_qosCapability)) strm << setw(indent+16) << "qosCapability = " << setprecision(indent) << m_qosCapability << '\n'; if (HasOptionalField(e_reason)) strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RequestChannelClose::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RequestChannelClose), PInvalidCast); #endif const H245_RequestChannelClose & other = (const H245_RequestChannelClose &)obj; Comparison result; if ((result = m_forwardLogicalChannelNumber.Compare(other.m_forwardLogicalChannelNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RequestChannelClose::GetDataLength() const { PINDEX length = 0; length += m_forwardLogicalChannelNumber.GetObjectLength(); return length; } PBoolean H245_RequestChannelClose::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_forwardLogicalChannelNumber.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_qosCapability, m_qosCapability)) return FALSE; if (!KnownExtensionDecode(strm, e_reason, m_reason)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RequestChannelClose::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_forwardLogicalChannelNumber.Encode(strm); KnownExtensionEncode(strm, e_qosCapability, m_qosCapability); KnownExtensionEncode(strm, e_reason, m_reason); UnknownExtensionsEncode(strm); } PObject * H245_RequestChannelClose::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RequestChannelClose::Class()), PInvalidCast); #endif return new H245_RequestChannelClose(*this); } // // RequestChannelCloseReject // H245_RequestChannelCloseReject::H245_RequestChannelCloseReject(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_RequestChannelCloseReject::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+30) << "forwardLogicalChannelNumber = " << setprecision(indent) << m_forwardLogicalChannelNumber << '\n'; strm << setw(indent+8) << "cause = " << setprecision(indent) << m_cause << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RequestChannelCloseReject::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RequestChannelCloseReject), PInvalidCast); #endif const H245_RequestChannelCloseReject & other = (const H245_RequestChannelCloseReject &)obj; Comparison result; if ((result = m_forwardLogicalChannelNumber.Compare(other.m_forwardLogicalChannelNumber)) != EqualTo) return result; if ((result = m_cause.Compare(other.m_cause)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RequestChannelCloseReject::GetDataLength() const { PINDEX length = 0; length += m_forwardLogicalChannelNumber.GetObjectLength(); length += m_cause.GetObjectLength(); return length; } PBoolean H245_RequestChannelCloseReject::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_forwardLogicalChannelNumber.Decode(strm)) return FALSE; if (!m_cause.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RequestChannelCloseReject::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_forwardLogicalChannelNumber.Encode(strm); m_cause.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RequestChannelCloseReject::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RequestChannelCloseReject::Class()), PInvalidCast); #endif return new H245_RequestChannelCloseReject(*this); } // // MultiplexEntrySend // H245_MultiplexEntrySend::H245_MultiplexEntrySend(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_multiplexEntryDescriptors.SetConstraints(PASN_Object::FixedConstraint, 1, 15); } #ifndef PASN_NOPRINTON void H245_MultiplexEntrySend::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "sequenceNumber = " << setprecision(indent) << m_sequenceNumber << '\n'; strm << setw(indent+28) << "multiplexEntryDescriptors = " << setprecision(indent) << m_multiplexEntryDescriptors << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultiplexEntrySend::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultiplexEntrySend), PInvalidCast); #endif const H245_MultiplexEntrySend & other = (const H245_MultiplexEntrySend &)obj; Comparison result; if ((result = m_sequenceNumber.Compare(other.m_sequenceNumber)) != EqualTo) return result; if ((result = m_multiplexEntryDescriptors.Compare(other.m_multiplexEntryDescriptors)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultiplexEntrySend::GetDataLength() const { PINDEX length = 0; length += m_sequenceNumber.GetObjectLength(); length += m_multiplexEntryDescriptors.GetObjectLength(); return length; } PBoolean H245_MultiplexEntrySend::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sequenceNumber.Decode(strm)) return FALSE; if (!m_multiplexEntryDescriptors.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultiplexEntrySend::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sequenceNumber.Encode(strm); m_multiplexEntryDescriptors.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultiplexEntrySend::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultiplexEntrySend::Class()), PInvalidCast); #endif return new H245_MultiplexEntrySend(*this); } // // MultiplexEntryDescriptor // H245_MultiplexEntryDescriptor::H245_MultiplexEntryDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { m_elementList.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_MultiplexEntryDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+28) << "multiplexTableEntryNumber = " << setprecision(indent) << m_multiplexTableEntryNumber << '\n'; if (HasOptionalField(e_elementList)) strm << setw(indent+14) << "elementList = " << setprecision(indent) << m_elementList << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultiplexEntryDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultiplexEntryDescriptor), PInvalidCast); #endif const H245_MultiplexEntryDescriptor & other = (const H245_MultiplexEntryDescriptor &)obj; Comparison result; if ((result = m_multiplexTableEntryNumber.Compare(other.m_multiplexTableEntryNumber)) != EqualTo) return result; if ((result = m_elementList.Compare(other.m_elementList)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultiplexEntryDescriptor::GetDataLength() const { PINDEX length = 0; length += m_multiplexTableEntryNumber.GetObjectLength(); if (HasOptionalField(e_elementList)) length += m_elementList.GetObjectLength(); return length; } PBoolean H245_MultiplexEntryDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_multiplexTableEntryNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_elementList) && !m_elementList.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultiplexEntryDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_multiplexTableEntryNumber.Encode(strm); if (HasOptionalField(e_elementList)) m_elementList.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultiplexEntryDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultiplexEntryDescriptor::Class()), PInvalidCast); #endif return new H245_MultiplexEntryDescriptor(*this); } // // MultiplexElement // H245_MultiplexElement::H245_MultiplexElement(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H245_MultiplexElement::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "type = " << setprecision(indent) << m_type << '\n'; strm << setw(indent+14) << "repeatCount = " << setprecision(indent) << m_repeatCount << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultiplexElement::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultiplexElement), PInvalidCast); #endif const H245_MultiplexElement & other = (const H245_MultiplexElement &)obj; Comparison result; if ((result = m_type.Compare(other.m_type)) != EqualTo) return result; if ((result = m_repeatCount.Compare(other.m_repeatCount)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultiplexElement::GetDataLength() const { PINDEX length = 0; length += m_type.GetObjectLength(); length += m_repeatCount.GetObjectLength(); return length; } PBoolean H245_MultiplexElement::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_type.Decode(strm)) return FALSE; if (!m_repeatCount.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultiplexElement::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_type.Encode(strm); m_repeatCount.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultiplexElement::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultiplexElement::Class()), PInvalidCast); #endif return new H245_MultiplexElement(*this); } // // MultiplexEntrySendAck // H245_MultiplexEntrySendAck::H245_MultiplexEntrySendAck(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_multiplexTableEntryNumber.SetConstraints(PASN_Object::FixedConstraint, 1, 15); } #ifndef PASN_NOPRINTON void H245_MultiplexEntrySendAck::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "sequenceNumber = " << setprecision(indent) << m_sequenceNumber << '\n'; strm << setw(indent+28) << "multiplexTableEntryNumber = " << setprecision(indent) << m_multiplexTableEntryNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultiplexEntrySendAck::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultiplexEntrySendAck), PInvalidCast); #endif const H245_MultiplexEntrySendAck & other = (const H245_MultiplexEntrySendAck &)obj; Comparison result; if ((result = m_sequenceNumber.Compare(other.m_sequenceNumber)) != EqualTo) return result; if ((result = m_multiplexTableEntryNumber.Compare(other.m_multiplexTableEntryNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultiplexEntrySendAck::GetDataLength() const { PINDEX length = 0; length += m_sequenceNumber.GetObjectLength(); length += m_multiplexTableEntryNumber.GetObjectLength(); return length; } PBoolean H245_MultiplexEntrySendAck::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sequenceNumber.Decode(strm)) return FALSE; if (!m_multiplexTableEntryNumber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultiplexEntrySendAck::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sequenceNumber.Encode(strm); m_multiplexTableEntryNumber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultiplexEntrySendAck::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultiplexEntrySendAck::Class()), PInvalidCast); #endif return new H245_MultiplexEntrySendAck(*this); } // // MultiplexEntrySendReject // H245_MultiplexEntrySendReject::H245_MultiplexEntrySendReject(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_rejectionDescriptions.SetConstraints(PASN_Object::FixedConstraint, 1, 15); } #ifndef PASN_NOPRINTON void H245_MultiplexEntrySendReject::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "sequenceNumber = " << setprecision(indent) << m_sequenceNumber << '\n'; strm << setw(indent+24) << "rejectionDescriptions = " << setprecision(indent) << m_rejectionDescriptions << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultiplexEntrySendReject::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultiplexEntrySendReject), PInvalidCast); #endif const H245_MultiplexEntrySendReject & other = (const H245_MultiplexEntrySendReject &)obj; Comparison result; if ((result = m_sequenceNumber.Compare(other.m_sequenceNumber)) != EqualTo) return result; if ((result = m_rejectionDescriptions.Compare(other.m_rejectionDescriptions)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultiplexEntrySendReject::GetDataLength() const { PINDEX length = 0; length += m_sequenceNumber.GetObjectLength(); length += m_rejectionDescriptions.GetObjectLength(); return length; } PBoolean H245_MultiplexEntrySendReject::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sequenceNumber.Decode(strm)) return FALSE; if (!m_rejectionDescriptions.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultiplexEntrySendReject::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sequenceNumber.Encode(strm); m_rejectionDescriptions.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultiplexEntrySendReject::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultiplexEntrySendReject::Class()), PInvalidCast); #endif return new H245_MultiplexEntrySendReject(*this); } // // MultiplexEntryRejectionDescriptions // H245_MultiplexEntryRejectionDescriptions::H245_MultiplexEntryRejectionDescriptions(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MultiplexEntryRejectionDescriptions::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+28) << "multiplexTableEntryNumber = " << setprecision(indent) << m_multiplexTableEntryNumber << '\n'; strm << setw(indent+8) << "cause = " << setprecision(indent) << m_cause << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultiplexEntryRejectionDescriptions::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultiplexEntryRejectionDescriptions), PInvalidCast); #endif const H245_MultiplexEntryRejectionDescriptions & other = (const H245_MultiplexEntryRejectionDescriptions &)obj; Comparison result; if ((result = m_multiplexTableEntryNumber.Compare(other.m_multiplexTableEntryNumber)) != EqualTo) return result; if ((result = m_cause.Compare(other.m_cause)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultiplexEntryRejectionDescriptions::GetDataLength() const { PINDEX length = 0; length += m_multiplexTableEntryNumber.GetObjectLength(); length += m_cause.GetObjectLength(); return length; } PBoolean H245_MultiplexEntryRejectionDescriptions::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_multiplexTableEntryNumber.Decode(strm)) return FALSE; if (!m_cause.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultiplexEntryRejectionDescriptions::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_multiplexTableEntryNumber.Encode(strm); m_cause.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultiplexEntryRejectionDescriptions::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultiplexEntryRejectionDescriptions::Class()), PInvalidCast); #endif return new H245_MultiplexEntryRejectionDescriptions(*this); } // // MultiplexEntrySendRelease // H245_MultiplexEntrySendRelease::H245_MultiplexEntrySendRelease(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_multiplexTableEntryNumber.SetConstraints(PASN_Object::FixedConstraint, 1, 15); } #ifndef PASN_NOPRINTON void H245_MultiplexEntrySendRelease::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+28) << "multiplexTableEntryNumber = " << setprecision(indent) << m_multiplexTableEntryNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultiplexEntrySendRelease::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultiplexEntrySendRelease), PInvalidCast); #endif const H245_MultiplexEntrySendRelease & other = (const H245_MultiplexEntrySendRelease &)obj; Comparison result; if ((result = m_multiplexTableEntryNumber.Compare(other.m_multiplexTableEntryNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultiplexEntrySendRelease::GetDataLength() const { PINDEX length = 0; length += m_multiplexTableEntryNumber.GetObjectLength(); return length; } PBoolean H245_MultiplexEntrySendRelease::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_multiplexTableEntryNumber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultiplexEntrySendRelease::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_multiplexTableEntryNumber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultiplexEntrySendRelease::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultiplexEntrySendRelease::Class()), PInvalidCast); #endif return new H245_MultiplexEntrySendRelease(*this); } // // RequestMultiplexEntry // H245_RequestMultiplexEntry::H245_RequestMultiplexEntry(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_entryNumbers.SetConstraints(PASN_Object::FixedConstraint, 1, 15); } #ifndef PASN_NOPRINTON void H245_RequestMultiplexEntry::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "entryNumbers = " << setprecision(indent) << m_entryNumbers << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RequestMultiplexEntry::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RequestMultiplexEntry), PInvalidCast); #endif const H245_RequestMultiplexEntry & other = (const H245_RequestMultiplexEntry &)obj; Comparison result; if ((result = m_entryNumbers.Compare(other.m_entryNumbers)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RequestMultiplexEntry::GetDataLength() const { PINDEX length = 0; length += m_entryNumbers.GetObjectLength(); return length; } PBoolean H245_RequestMultiplexEntry::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_entryNumbers.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RequestMultiplexEntry::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_entryNumbers.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RequestMultiplexEntry::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RequestMultiplexEntry::Class()), PInvalidCast); #endif return new H245_RequestMultiplexEntry(*this); } // // RequestMultiplexEntryAck // H245_RequestMultiplexEntryAck::H245_RequestMultiplexEntryAck(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_entryNumbers.SetConstraints(PASN_Object::FixedConstraint, 1, 15); } #ifndef PASN_NOPRINTON void H245_RequestMultiplexEntryAck::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "entryNumbers = " << setprecision(indent) << m_entryNumbers << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RequestMultiplexEntryAck::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RequestMultiplexEntryAck), PInvalidCast); #endif const H245_RequestMultiplexEntryAck & other = (const H245_RequestMultiplexEntryAck &)obj; Comparison result; if ((result = m_entryNumbers.Compare(other.m_entryNumbers)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RequestMultiplexEntryAck::GetDataLength() const { PINDEX length = 0; length += m_entryNumbers.GetObjectLength(); return length; } PBoolean H245_RequestMultiplexEntryAck::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_entryNumbers.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RequestMultiplexEntryAck::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_entryNumbers.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RequestMultiplexEntryAck::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RequestMultiplexEntryAck::Class()), PInvalidCast); #endif return new H245_RequestMultiplexEntryAck(*this); } // // RequestMultiplexEntryReject // H245_RequestMultiplexEntryReject::H245_RequestMultiplexEntryReject(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_entryNumbers.SetConstraints(PASN_Object::FixedConstraint, 1, 15); m_rejectionDescriptions.SetConstraints(PASN_Object::FixedConstraint, 1, 15); } #ifndef PASN_NOPRINTON void H245_RequestMultiplexEntryReject::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "entryNumbers = " << setprecision(indent) << m_entryNumbers << '\n'; strm << setw(indent+24) << "rejectionDescriptions = " << setprecision(indent) << m_rejectionDescriptions << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RequestMultiplexEntryReject::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RequestMultiplexEntryReject), PInvalidCast); #endif const H245_RequestMultiplexEntryReject & other = (const H245_RequestMultiplexEntryReject &)obj; Comparison result; if ((result = m_entryNumbers.Compare(other.m_entryNumbers)) != EqualTo) return result; if ((result = m_rejectionDescriptions.Compare(other.m_rejectionDescriptions)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RequestMultiplexEntryReject::GetDataLength() const { PINDEX length = 0; length += m_entryNumbers.GetObjectLength(); length += m_rejectionDescriptions.GetObjectLength(); return length; } PBoolean H245_RequestMultiplexEntryReject::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_entryNumbers.Decode(strm)) return FALSE; if (!m_rejectionDescriptions.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RequestMultiplexEntryReject::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_entryNumbers.Encode(strm); m_rejectionDescriptions.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RequestMultiplexEntryReject::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RequestMultiplexEntryReject::Class()), PInvalidCast); #endif return new H245_RequestMultiplexEntryReject(*this); } // // RequestMultiplexEntryRejectionDescriptions // H245_RequestMultiplexEntryRejectionDescriptions::H245_RequestMultiplexEntryRejectionDescriptions(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_RequestMultiplexEntryRejectionDescriptions::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+28) << "multiplexTableEntryNumber = " << setprecision(indent) << m_multiplexTableEntryNumber << '\n'; strm << setw(indent+8) << "cause = " << setprecision(indent) << m_cause << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RequestMultiplexEntryRejectionDescriptions::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RequestMultiplexEntryRejectionDescriptions), PInvalidCast); #endif const H245_RequestMultiplexEntryRejectionDescriptions & other = (const H245_RequestMultiplexEntryRejectionDescriptions &)obj; Comparison result; if ((result = m_multiplexTableEntryNumber.Compare(other.m_multiplexTableEntryNumber)) != EqualTo) return result; if ((result = m_cause.Compare(other.m_cause)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RequestMultiplexEntryRejectionDescriptions::GetDataLength() const { PINDEX length = 0; length += m_multiplexTableEntryNumber.GetObjectLength(); length += m_cause.GetObjectLength(); return length; } PBoolean H245_RequestMultiplexEntryRejectionDescriptions::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_multiplexTableEntryNumber.Decode(strm)) return FALSE; if (!m_cause.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RequestMultiplexEntryRejectionDescriptions::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_multiplexTableEntryNumber.Encode(strm); m_cause.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RequestMultiplexEntryRejectionDescriptions::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RequestMultiplexEntryRejectionDescriptions::Class()), PInvalidCast); #endif return new H245_RequestMultiplexEntryRejectionDescriptions(*this); } // // RequestMultiplexEntryRelease // H245_RequestMultiplexEntryRelease::H245_RequestMultiplexEntryRelease(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_entryNumbers.SetConstraints(PASN_Object::FixedConstraint, 1, 15); } #ifndef PASN_NOPRINTON void H245_RequestMultiplexEntryRelease::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "entryNumbers = " << setprecision(indent) << m_entryNumbers << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RequestMultiplexEntryRelease::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RequestMultiplexEntryRelease), PInvalidCast); #endif const H245_RequestMultiplexEntryRelease & other = (const H245_RequestMultiplexEntryRelease &)obj; Comparison result; if ((result = m_entryNumbers.Compare(other.m_entryNumbers)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RequestMultiplexEntryRelease::GetDataLength() const { PINDEX length = 0; length += m_entryNumbers.GetObjectLength(); return length; } PBoolean H245_RequestMultiplexEntryRelease::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_entryNumbers.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RequestMultiplexEntryRelease::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_entryNumbers.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RequestMultiplexEntryRelease::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RequestMultiplexEntryRelease::Class()), PInvalidCast); #endif return new H245_RequestMultiplexEntryRelease(*this); } // // RequestMode // H245_RequestMode::H245_RequestMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_requestedModes.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_RequestMode::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "sequenceNumber = " << setprecision(indent) << m_sequenceNumber << '\n'; strm << setw(indent+17) << "requestedModes = " << setprecision(indent) << m_requestedModes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RequestMode::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RequestMode), PInvalidCast); #endif const H245_RequestMode & other = (const H245_RequestMode &)obj; Comparison result; if ((result = m_sequenceNumber.Compare(other.m_sequenceNumber)) != EqualTo) return result; if ((result = m_requestedModes.Compare(other.m_requestedModes)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RequestMode::GetDataLength() const { PINDEX length = 0; length += m_sequenceNumber.GetObjectLength(); length += m_requestedModes.GetObjectLength(); return length; } PBoolean H245_RequestMode::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sequenceNumber.Decode(strm)) return FALSE; if (!m_requestedModes.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RequestMode::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sequenceNumber.Encode(strm); m_requestedModes.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RequestMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RequestMode::Class()), PInvalidCast); #endif return new H245_RequestMode(*this); } // // RequestModeAck // H245_RequestModeAck::H245_RequestModeAck(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_RequestModeAck::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "sequenceNumber = " << setprecision(indent) << m_sequenceNumber << '\n'; strm << setw(indent+11) << "response = " << setprecision(indent) << m_response << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RequestModeAck::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RequestModeAck), PInvalidCast); #endif const H245_RequestModeAck & other = (const H245_RequestModeAck &)obj; Comparison result; if ((result = m_sequenceNumber.Compare(other.m_sequenceNumber)) != EqualTo) return result; if ((result = m_response.Compare(other.m_response)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RequestModeAck::GetDataLength() const { PINDEX length = 0; length += m_sequenceNumber.GetObjectLength(); length += m_response.GetObjectLength(); return length; } PBoolean H245_RequestModeAck::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sequenceNumber.Decode(strm)) return FALSE; if (!m_response.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RequestModeAck::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sequenceNumber.Encode(strm); m_response.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RequestModeAck::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RequestModeAck::Class()), PInvalidCast); #endif return new H245_RequestModeAck(*this); } // // RequestModeReject // H245_RequestModeReject::H245_RequestModeReject(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_RequestModeReject::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "sequenceNumber = " << setprecision(indent) << m_sequenceNumber << '\n'; strm << setw(indent+8) << "cause = " << setprecision(indent) << m_cause << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RequestModeReject::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RequestModeReject), PInvalidCast); #endif const H245_RequestModeReject & other = (const H245_RequestModeReject &)obj; Comparison result; if ((result = m_sequenceNumber.Compare(other.m_sequenceNumber)) != EqualTo) return result; if ((result = m_cause.Compare(other.m_cause)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RequestModeReject::GetDataLength() const { PINDEX length = 0; length += m_sequenceNumber.GetObjectLength(); length += m_cause.GetObjectLength(); return length; } PBoolean H245_RequestModeReject::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sequenceNumber.Decode(strm)) return FALSE; if (!m_cause.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RequestModeReject::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sequenceNumber.Encode(strm); m_cause.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RequestModeReject::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RequestModeReject::Class()), PInvalidCast); #endif return new H245_RequestModeReject(*this); } // // RedundancyEncodingDTModeElement // H245_RedundancyEncodingDTModeElement::H245_RedundancyEncodingDTModeElement(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_RedundancyEncodingDTModeElement::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "type = " << setprecision(indent) << m_type << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RedundancyEncodingDTModeElement::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RedundancyEncodingDTModeElement), PInvalidCast); #endif const H245_RedundancyEncodingDTModeElement & other = (const H245_RedundancyEncodingDTModeElement &)obj; Comparison result; if ((result = m_type.Compare(other.m_type)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RedundancyEncodingDTModeElement::GetDataLength() const { PINDEX length = 0; length += m_type.GetObjectLength(); return length; } PBoolean H245_RedundancyEncodingDTModeElement::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_type.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RedundancyEncodingDTModeElement::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_type.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RedundancyEncodingDTModeElement::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RedundancyEncodingDTModeElement::Class()), PInvalidCast); #endif return new H245_RedundancyEncodingDTModeElement(*this); } // // MultiplePayloadStreamMode // H245_MultiplePayloadStreamMode::H245_MultiplePayloadStreamMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MultiplePayloadStreamMode::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "elements = " << setprecision(indent) << m_elements << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultiplePayloadStreamMode::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultiplePayloadStreamMode), PInvalidCast); #endif const H245_MultiplePayloadStreamMode & other = (const H245_MultiplePayloadStreamMode &)obj; Comparison result; if ((result = m_elements.Compare(other.m_elements)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultiplePayloadStreamMode::GetDataLength() const { PINDEX length = 0; length += m_elements.GetObjectLength(); return length; } PBoolean H245_MultiplePayloadStreamMode::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_elements.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultiplePayloadStreamMode::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_elements.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultiplePayloadStreamMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultiplePayloadStreamMode::Class()), PInvalidCast); #endif return new H245_MultiplePayloadStreamMode(*this); } // // FECMode // H245_FECMode::H245_FECMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_FECMode::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+19) << "protectedElement = " << setprecision(indent) << m_protectedElement << '\n'; if (HasOptionalField(e_fecScheme)) strm << setw(indent+12) << "fecScheme = " << setprecision(indent) << m_fecScheme << '\n'; if (HasOptionalField(e_rfc2733Format)) strm << setw(indent+16) << "rfc2733Format = " << setprecision(indent) << m_rfc2733Format << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_FECMode::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_FECMode), PInvalidCast); #endif const H245_FECMode & other = (const H245_FECMode &)obj; Comparison result; if ((result = m_protectedElement.Compare(other.m_protectedElement)) != EqualTo) return result; if ((result = m_fecScheme.Compare(other.m_fecScheme)) != EqualTo) return result; if ((result = m_rfc2733Format.Compare(other.m_rfc2733Format)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_FECMode::GetDataLength() const { PINDEX length = 0; length += m_protectedElement.GetObjectLength(); if (HasOptionalField(e_fecScheme)) length += m_fecScheme.GetObjectLength(); if (HasOptionalField(e_rfc2733Format)) length += m_rfc2733Format.GetObjectLength(); return length; } PBoolean H245_FECMode::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_protectedElement.Decode(strm)) return FALSE; if (HasOptionalField(e_fecScheme) && !m_fecScheme.Decode(strm)) return FALSE; if (HasOptionalField(e_rfc2733Format) && !m_rfc2733Format.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_FECMode::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_protectedElement.Encode(strm); if (HasOptionalField(e_fecScheme)) m_fecScheme.Encode(strm); if (HasOptionalField(e_rfc2733Format)) m_rfc2733Format.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_FECMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_FECMode::Class()), PInvalidCast); #endif return new H245_FECMode(*this); } // // H223ModeParameters // H245_H223ModeParameters::H245_H223ModeParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_H223ModeParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+22) << "adaptationLayerType = " << setprecision(indent) << m_adaptationLayerType << '\n'; strm << setw(indent+18) << "segmentableFlag = " << setprecision(indent) << m_segmentableFlag << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H223ModeParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H223ModeParameters), PInvalidCast); #endif const H245_H223ModeParameters & other = (const H245_H223ModeParameters &)obj; Comparison result; if ((result = m_adaptationLayerType.Compare(other.m_adaptationLayerType)) != EqualTo) return result; if ((result = m_segmentableFlag.Compare(other.m_segmentableFlag)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H223ModeParameters::GetDataLength() const { PINDEX length = 0; length += m_adaptationLayerType.GetObjectLength(); length += m_segmentableFlag.GetObjectLength(); return length; } PBoolean H245_H223ModeParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_adaptationLayerType.Decode(strm)) return FALSE; if (!m_segmentableFlag.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H223ModeParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_adaptationLayerType.Encode(strm); m_segmentableFlag.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H223ModeParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223ModeParameters::Class()), PInvalidCast); #endif return new H245_H223ModeParameters(*this); } // // RedundancyEncodingMode // H245_RedundancyEncodingMode::H245_RedundancyEncodingMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_RedundancyEncodingMode::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+27) << "redundancyEncodingMethod = " << setprecision(indent) << m_redundancyEncodingMethod << '\n'; if (HasOptionalField(e_secondaryEncoding)) strm << setw(indent+20) << "secondaryEncoding = " << setprecision(indent) << m_secondaryEncoding << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RedundancyEncodingMode::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RedundancyEncodingMode), PInvalidCast); #endif const H245_RedundancyEncodingMode & other = (const H245_RedundancyEncodingMode &)obj; Comparison result; if ((result = m_redundancyEncodingMethod.Compare(other.m_redundancyEncodingMethod)) != EqualTo) return result; if ((result = m_secondaryEncoding.Compare(other.m_secondaryEncoding)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RedundancyEncodingMode::GetDataLength() const { PINDEX length = 0; length += m_redundancyEncodingMethod.GetObjectLength(); if (HasOptionalField(e_secondaryEncoding)) length += m_secondaryEncoding.GetObjectLength(); return length; } PBoolean H245_RedundancyEncodingMode::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_redundancyEncodingMethod.Decode(strm)) return FALSE; if (HasOptionalField(e_secondaryEncoding) && !m_secondaryEncoding.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RedundancyEncodingMode::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_redundancyEncodingMethod.Encode(strm); if (HasOptionalField(e_secondaryEncoding)) m_secondaryEncoding.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RedundancyEncodingMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RedundancyEncodingMode::Class()), PInvalidCast); #endif return new H245_RedundancyEncodingMode(*this); } // // H261VideoMode // H245_H261VideoMode::H245_H261VideoMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_bitRate.SetConstraints(PASN_Object::FixedConstraint, 1, 19200); } #ifndef PASN_NOPRINTON void H245_H261VideoMode::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "resolution = " << setprecision(indent) << m_resolution << '\n'; strm << setw(indent+10) << "bitRate = " << setprecision(indent) << m_bitRate << '\n'; strm << setw(indent+25) << "stillImageTransmission = " << setprecision(indent) << m_stillImageTransmission << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H261VideoMode::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H261VideoMode), PInvalidCast); #endif const H245_H261VideoMode & other = (const H245_H261VideoMode &)obj; Comparison result; if ((result = m_resolution.Compare(other.m_resolution)) != EqualTo) return result; if ((result = m_bitRate.Compare(other.m_bitRate)) != EqualTo) return result; if ((result = m_stillImageTransmission.Compare(other.m_stillImageTransmission)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H261VideoMode::GetDataLength() const { PINDEX length = 0; length += m_resolution.GetObjectLength(); length += m_bitRate.GetObjectLength(); length += m_stillImageTransmission.GetObjectLength(); return length; } PBoolean H245_H261VideoMode::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_resolution.Decode(strm)) return FALSE; if (!m_bitRate.Decode(strm)) return FALSE; if (!m_stillImageTransmission.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H261VideoMode::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_resolution.Encode(strm); m_bitRate.Encode(strm); m_stillImageTransmission.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H261VideoMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H261VideoMode::Class()), PInvalidCast); #endif return new H245_H261VideoMode(*this); } // // H262VideoMode // H245_H262VideoMode::H245_H262VideoMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 6, TRUE, 0) { m_videoBitRate.SetConstraints(PASN_Object::FixedConstraint, 0, 1073741823); m_vbvBufferSize.SetConstraints(PASN_Object::FixedConstraint, 0, 262143); m_samplesPerLine.SetConstraints(PASN_Object::FixedConstraint, 0, 16383); m_linesPerFrame.SetConstraints(PASN_Object::FixedConstraint, 0, 16383); m_framesPerSecond.SetConstraints(PASN_Object::FixedConstraint, 0, 15); m_luminanceSampleRate.SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); } #ifndef PASN_NOPRINTON void H245_H262VideoMode::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+18) << "profileAndLevel = " << setprecision(indent) << m_profileAndLevel << '\n'; if (HasOptionalField(e_videoBitRate)) strm << setw(indent+15) << "videoBitRate = " << setprecision(indent) << m_videoBitRate << '\n'; if (HasOptionalField(e_vbvBufferSize)) strm << setw(indent+16) << "vbvBufferSize = " << setprecision(indent) << m_vbvBufferSize << '\n'; if (HasOptionalField(e_samplesPerLine)) strm << setw(indent+17) << "samplesPerLine = " << setprecision(indent) << m_samplesPerLine << '\n'; if (HasOptionalField(e_linesPerFrame)) strm << setw(indent+16) << "linesPerFrame = " << setprecision(indent) << m_linesPerFrame << '\n'; if (HasOptionalField(e_framesPerSecond)) strm << setw(indent+18) << "framesPerSecond = " << setprecision(indent) << m_framesPerSecond << '\n'; if (HasOptionalField(e_luminanceSampleRate)) strm << setw(indent+22) << "luminanceSampleRate = " << setprecision(indent) << m_luminanceSampleRate << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H262VideoMode::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H262VideoMode), PInvalidCast); #endif const H245_H262VideoMode & other = (const H245_H262VideoMode &)obj; Comparison result; if ((result = m_profileAndLevel.Compare(other.m_profileAndLevel)) != EqualTo) return result; if ((result = m_videoBitRate.Compare(other.m_videoBitRate)) != EqualTo) return result; if ((result = m_vbvBufferSize.Compare(other.m_vbvBufferSize)) != EqualTo) return result; if ((result = m_samplesPerLine.Compare(other.m_samplesPerLine)) != EqualTo) return result; if ((result = m_linesPerFrame.Compare(other.m_linesPerFrame)) != EqualTo) return result; if ((result = m_framesPerSecond.Compare(other.m_framesPerSecond)) != EqualTo) return result; if ((result = m_luminanceSampleRate.Compare(other.m_luminanceSampleRate)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H262VideoMode::GetDataLength() const { PINDEX length = 0; length += m_profileAndLevel.GetObjectLength(); if (HasOptionalField(e_videoBitRate)) length += m_videoBitRate.GetObjectLength(); if (HasOptionalField(e_vbvBufferSize)) length += m_vbvBufferSize.GetObjectLength(); if (HasOptionalField(e_samplesPerLine)) length += m_samplesPerLine.GetObjectLength(); if (HasOptionalField(e_linesPerFrame)) length += m_linesPerFrame.GetObjectLength(); if (HasOptionalField(e_framesPerSecond)) length += m_framesPerSecond.GetObjectLength(); if (HasOptionalField(e_luminanceSampleRate)) length += m_luminanceSampleRate.GetObjectLength(); return length; } PBoolean H245_H262VideoMode::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_profileAndLevel.Decode(strm)) return FALSE; if (HasOptionalField(e_videoBitRate) && !m_videoBitRate.Decode(strm)) return FALSE; if (HasOptionalField(e_vbvBufferSize) && !m_vbvBufferSize.Decode(strm)) return FALSE; if (HasOptionalField(e_samplesPerLine) && !m_samplesPerLine.Decode(strm)) return FALSE; if (HasOptionalField(e_linesPerFrame) && !m_linesPerFrame.Decode(strm)) return FALSE; if (HasOptionalField(e_framesPerSecond) && !m_framesPerSecond.Decode(strm)) return FALSE; if (HasOptionalField(e_luminanceSampleRate) && !m_luminanceSampleRate.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H262VideoMode::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_profileAndLevel.Encode(strm); if (HasOptionalField(e_videoBitRate)) m_videoBitRate.Encode(strm); if (HasOptionalField(e_vbvBufferSize)) m_vbvBufferSize.Encode(strm); if (HasOptionalField(e_samplesPerLine)) m_samplesPerLine.Encode(strm); if (HasOptionalField(e_linesPerFrame)) m_linesPerFrame.Encode(strm); if (HasOptionalField(e_framesPerSecond)) m_framesPerSecond.Encode(strm); if (HasOptionalField(e_luminanceSampleRate)) m_luminanceSampleRate.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H262VideoMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H262VideoMode::Class()), PInvalidCast); #endif return new H245_H262VideoMode(*this); } // // IS11172AudioMode // H245_IS11172AudioMode::H245_IS11172AudioMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_bitRate.SetConstraints(PASN_Object::FixedConstraint, 1, 448); } #ifndef PASN_NOPRINTON void H245_IS11172AudioMode::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "audioLayer = " << setprecision(indent) << m_audioLayer << '\n'; strm << setw(indent+16) << "audioSampling = " << setprecision(indent) << m_audioSampling << '\n'; strm << setw(indent+19) << "multichannelType = " << setprecision(indent) << m_multichannelType << '\n'; strm << setw(indent+10) << "bitRate = " << setprecision(indent) << m_bitRate << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_IS11172AudioMode::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_IS11172AudioMode), PInvalidCast); #endif const H245_IS11172AudioMode & other = (const H245_IS11172AudioMode &)obj; Comparison result; if ((result = m_audioLayer.Compare(other.m_audioLayer)) != EqualTo) return result; if ((result = m_audioSampling.Compare(other.m_audioSampling)) != EqualTo) return result; if ((result = m_multichannelType.Compare(other.m_multichannelType)) != EqualTo) return result; if ((result = m_bitRate.Compare(other.m_bitRate)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_IS11172AudioMode::GetDataLength() const { PINDEX length = 0; length += m_audioLayer.GetObjectLength(); length += m_audioSampling.GetObjectLength(); length += m_multichannelType.GetObjectLength(); length += m_bitRate.GetObjectLength(); return length; } PBoolean H245_IS11172AudioMode::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_audioLayer.Decode(strm)) return FALSE; if (!m_audioSampling.Decode(strm)) return FALSE; if (!m_multichannelType.Decode(strm)) return FALSE; if (!m_bitRate.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_IS11172AudioMode::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_audioLayer.Encode(strm); m_audioSampling.Encode(strm); m_multichannelType.Encode(strm); m_bitRate.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_IS11172AudioMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_IS11172AudioMode::Class()), PInvalidCast); #endif return new H245_IS11172AudioMode(*this); } // // IS13818AudioMode // H245_IS13818AudioMode::H245_IS13818AudioMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_bitRate.SetConstraints(PASN_Object::FixedConstraint, 1, 1130); } #ifndef PASN_NOPRINTON void H245_IS13818AudioMode::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "audioLayer = " << setprecision(indent) << m_audioLayer << '\n'; strm << setw(indent+16) << "audioSampling = " << setprecision(indent) << m_audioSampling << '\n'; strm << setw(indent+19) << "multichannelType = " << setprecision(indent) << m_multichannelType << '\n'; strm << setw(indent+26) << "lowFrequencyEnhancement = " << setprecision(indent) << m_lowFrequencyEnhancement << '\n'; strm << setw(indent+15) << "multilingual = " << setprecision(indent) << m_multilingual << '\n'; strm << setw(indent+10) << "bitRate = " << setprecision(indent) << m_bitRate << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_IS13818AudioMode::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_IS13818AudioMode), PInvalidCast); #endif const H245_IS13818AudioMode & other = (const H245_IS13818AudioMode &)obj; Comparison result; if ((result = m_audioLayer.Compare(other.m_audioLayer)) != EqualTo) return result; if ((result = m_audioSampling.Compare(other.m_audioSampling)) != EqualTo) return result; if ((result = m_multichannelType.Compare(other.m_multichannelType)) != EqualTo) return result; if ((result = m_lowFrequencyEnhancement.Compare(other.m_lowFrequencyEnhancement)) != EqualTo) return result; if ((result = m_multilingual.Compare(other.m_multilingual)) != EqualTo) return result; if ((result = m_bitRate.Compare(other.m_bitRate)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_IS13818AudioMode::GetDataLength() const { PINDEX length = 0; length += m_audioLayer.GetObjectLength(); length += m_audioSampling.GetObjectLength(); length += m_multichannelType.GetObjectLength(); length += m_lowFrequencyEnhancement.GetObjectLength(); length += m_multilingual.GetObjectLength(); length += m_bitRate.GetObjectLength(); return length; } PBoolean H245_IS13818AudioMode::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_audioLayer.Decode(strm)) return FALSE; if (!m_audioSampling.Decode(strm)) return FALSE; if (!m_multichannelType.Decode(strm)) return FALSE; if (!m_lowFrequencyEnhancement.Decode(strm)) return FALSE; if (!m_multilingual.Decode(strm)) return FALSE; if (!m_bitRate.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_IS13818AudioMode::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_audioLayer.Encode(strm); m_audioSampling.Encode(strm); m_multichannelType.Encode(strm); m_lowFrequencyEnhancement.Encode(strm); m_multilingual.Encode(strm); m_bitRate.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_IS13818AudioMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_IS13818AudioMode::Class()), PInvalidCast); #endif return new H245_IS13818AudioMode(*this); } // // G7231AnnexCMode // H245_G7231AnnexCMode::H245_G7231AnnexCMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_maxAl_sduAudioFrames.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_G7231AnnexCMode::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+23) << "maxAl_sduAudioFrames = " << setprecision(indent) << m_maxAl_sduAudioFrames << '\n'; strm << setw(indent+21) << "silenceSuppression = " << setprecision(indent) << m_silenceSuppression << '\n'; strm << setw(indent+22) << "g723AnnexCAudioMode = " << setprecision(indent) << m_g723AnnexCAudioMode << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_G7231AnnexCMode::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_G7231AnnexCMode), PInvalidCast); #endif const H245_G7231AnnexCMode & other = (const H245_G7231AnnexCMode &)obj; Comparison result; if ((result = m_maxAl_sduAudioFrames.Compare(other.m_maxAl_sduAudioFrames)) != EqualTo) return result; if ((result = m_silenceSuppression.Compare(other.m_silenceSuppression)) != EqualTo) return result; if ((result = m_g723AnnexCAudioMode.Compare(other.m_g723AnnexCAudioMode)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_G7231AnnexCMode::GetDataLength() const { PINDEX length = 0; length += m_maxAl_sduAudioFrames.GetObjectLength(); length += m_silenceSuppression.GetObjectLength(); length += m_g723AnnexCAudioMode.GetObjectLength(); return length; } PBoolean H245_G7231AnnexCMode::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_maxAl_sduAudioFrames.Decode(strm)) return FALSE; if (!m_silenceSuppression.Decode(strm)) return FALSE; if (!m_g723AnnexCAudioMode.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_G7231AnnexCMode::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_maxAl_sduAudioFrames.Encode(strm); m_silenceSuppression.Encode(strm); m_g723AnnexCAudioMode.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_G7231AnnexCMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_G7231AnnexCMode::Class()), PInvalidCast); #endif return new H245_G7231AnnexCMode(*this); } // // DataMode // H245_DataMode::H245_DataMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_bitRate.SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); } #ifndef PASN_NOPRINTON void H245_DataMode::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "application = " << setprecision(indent) << m_application << '\n'; strm << setw(indent+10) << "bitRate = " << setprecision(indent) << m_bitRate << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_DataMode::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_DataMode), PInvalidCast); #endif const H245_DataMode & other = (const H245_DataMode &)obj; Comparison result; if ((result = m_application.Compare(other.m_application)) != EqualTo) return result; if ((result = m_bitRate.Compare(other.m_bitRate)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_DataMode::GetDataLength() const { PINDEX length = 0; length += m_application.GetObjectLength(); length += m_bitRate.GetObjectLength(); return length; } PBoolean H245_DataMode::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_application.Decode(strm)) return FALSE; if (!m_bitRate.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_DataMode::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_application.Encode(strm); m_bitRate.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_DataMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DataMode::Class()), PInvalidCast); #endif return new H245_DataMode(*this); } // // MaintenanceLoopRequest // H245_MaintenanceLoopRequest::H245_MaintenanceLoopRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MaintenanceLoopRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "type = " << setprecision(indent) << m_type << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MaintenanceLoopRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MaintenanceLoopRequest), PInvalidCast); #endif const H245_MaintenanceLoopRequest & other = (const H245_MaintenanceLoopRequest &)obj; Comparison result; if ((result = m_type.Compare(other.m_type)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MaintenanceLoopRequest::GetDataLength() const { PINDEX length = 0; length += m_type.GetObjectLength(); return length; } PBoolean H245_MaintenanceLoopRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_type.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MaintenanceLoopRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_type.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MaintenanceLoopRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MaintenanceLoopRequest::Class()), PInvalidCast); #endif return new H245_MaintenanceLoopRequest(*this); } // // MaintenanceLoopAck // H245_MaintenanceLoopAck::H245_MaintenanceLoopAck(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MaintenanceLoopAck::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "type = " << setprecision(indent) << m_type << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MaintenanceLoopAck::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MaintenanceLoopAck), PInvalidCast); #endif const H245_MaintenanceLoopAck & other = (const H245_MaintenanceLoopAck &)obj; Comparison result; if ((result = m_type.Compare(other.m_type)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MaintenanceLoopAck::GetDataLength() const { PINDEX length = 0; length += m_type.GetObjectLength(); return length; } PBoolean H245_MaintenanceLoopAck::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_type.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MaintenanceLoopAck::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_type.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MaintenanceLoopAck::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MaintenanceLoopAck::Class()), PInvalidCast); #endif return new H245_MaintenanceLoopAck(*this); } // // MaintenanceLoopReject // H245_MaintenanceLoopReject::H245_MaintenanceLoopReject(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MaintenanceLoopReject::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "type = " << setprecision(indent) << m_type << '\n'; strm << setw(indent+8) << "cause = " << setprecision(indent) << m_cause << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MaintenanceLoopReject::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MaintenanceLoopReject), PInvalidCast); #endif const H245_MaintenanceLoopReject & other = (const H245_MaintenanceLoopReject &)obj; Comparison result; if ((result = m_type.Compare(other.m_type)) != EqualTo) return result; if ((result = m_cause.Compare(other.m_cause)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MaintenanceLoopReject::GetDataLength() const { PINDEX length = 0; length += m_type.GetObjectLength(); length += m_cause.GetObjectLength(); return length; } PBoolean H245_MaintenanceLoopReject::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_type.Decode(strm)) return FALSE; if (!m_cause.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MaintenanceLoopReject::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_type.Encode(strm); m_cause.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MaintenanceLoopReject::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MaintenanceLoopReject::Class()), PInvalidCast); #endif return new H245_MaintenanceLoopReject(*this); } // // CommunicationModeCommand // H245_CommunicationModeCommand::H245_CommunicationModeCommand(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_communicationModeTable.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_CommunicationModeCommand::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+25) << "communicationModeTable = " << setprecision(indent) << m_communicationModeTable << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_CommunicationModeCommand::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_CommunicationModeCommand), PInvalidCast); #endif const H245_CommunicationModeCommand & other = (const H245_CommunicationModeCommand &)obj; Comparison result; if ((result = m_communicationModeTable.Compare(other.m_communicationModeTable)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_CommunicationModeCommand::GetDataLength() const { PINDEX length = 0; length += m_communicationModeTable.GetObjectLength(); return length; } PBoolean H245_CommunicationModeCommand::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_communicationModeTable.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_CommunicationModeCommand::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_communicationModeTable.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_CommunicationModeCommand::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CommunicationModeCommand::Class()), PInvalidCast); #endif return new H245_CommunicationModeCommand(*this); } // // TerminalLabel // H245_TerminalLabel::H245_TerminalLabel(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_TerminalLabel::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "mcuNumber = " << setprecision(indent) << m_mcuNumber << '\n'; strm << setw(indent+17) << "terminalNumber = " << setprecision(indent) << m_terminalNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_TerminalLabel::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_TerminalLabel), PInvalidCast); #endif const H245_TerminalLabel & other = (const H245_TerminalLabel &)obj; Comparison result; if ((result = m_mcuNumber.Compare(other.m_mcuNumber)) != EqualTo) return result; if ((result = m_terminalNumber.Compare(other.m_terminalNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_TerminalLabel::GetDataLength() const { PINDEX length = 0; length += m_mcuNumber.GetObjectLength(); length += m_terminalNumber.GetObjectLength(); return length; } PBoolean H245_TerminalLabel::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_mcuNumber.Decode(strm)) return FALSE; if (!m_terminalNumber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_TerminalLabel::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_mcuNumber.Encode(strm); m_terminalNumber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_TerminalLabel::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_TerminalLabel::Class()), PInvalidCast); #endif return new H245_TerminalLabel(*this); } // // RequestAllTerminalIDsResponse // H245_RequestAllTerminalIDsResponse::H245_RequestAllTerminalIDsResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_RequestAllTerminalIDsResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+22) << "terminalInformation = " << setprecision(indent) << m_terminalInformation << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RequestAllTerminalIDsResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RequestAllTerminalIDsResponse), PInvalidCast); #endif const H245_RequestAllTerminalIDsResponse & other = (const H245_RequestAllTerminalIDsResponse &)obj; Comparison result; if ((result = m_terminalInformation.Compare(other.m_terminalInformation)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RequestAllTerminalIDsResponse::GetDataLength() const { PINDEX length = 0; length += m_terminalInformation.GetObjectLength(); return length; } PBoolean H245_RequestAllTerminalIDsResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_terminalInformation.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RequestAllTerminalIDsResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_terminalInformation.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RequestAllTerminalIDsResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RequestAllTerminalIDsResponse::Class()), PInvalidCast); #endif return new H245_RequestAllTerminalIDsResponse(*this); } // // TerminalInformation // H245_TerminalInformation::H245_TerminalInformation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_TerminalInformation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "terminalLabel = " << setprecision(indent) << m_terminalLabel << '\n'; strm << setw(indent+13) << "terminalID = " << setprecision(indent) << m_terminalID << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_TerminalInformation::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_TerminalInformation), PInvalidCast); #endif const H245_TerminalInformation & other = (const H245_TerminalInformation &)obj; Comparison result; if ((result = m_terminalLabel.Compare(other.m_terminalLabel)) != EqualTo) return result; if ((result = m_terminalID.Compare(other.m_terminalID)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_TerminalInformation::GetDataLength() const { PINDEX length = 0; length += m_terminalLabel.GetObjectLength(); length += m_terminalID.GetObjectLength(); return length; } PBoolean H245_TerminalInformation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_terminalLabel.Decode(strm)) return FALSE; if (!m_terminalID.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_TerminalInformation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_terminalLabel.Encode(strm); m_terminalID.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_TerminalInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_TerminalInformation::Class()), PInvalidCast); #endif return new H245_TerminalInformation(*this); } // // DialingInformationNumber // H245_DialingInformationNumber::H245_DialingInformationNumber(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_networkAddress.SetConstraints(PASN_Object::FixedConstraint, 0, 40); m_subAddress.SetConstraints(PASN_Object::FixedConstraint, 1, 40); m_networkType.SetConstraints(PASN_Object::FixedConstraint, 1, 255); } #ifndef PASN_NOPRINTON void H245_DialingInformationNumber::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "networkAddress = " << setprecision(indent) << m_networkAddress << '\n'; if (HasOptionalField(e_subAddress)) strm << setw(indent+13) << "subAddress = " << setprecision(indent) << m_subAddress << '\n'; strm << setw(indent+14) << "networkType = " << setprecision(indent) << m_networkType << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_DialingInformationNumber::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_DialingInformationNumber), PInvalidCast); #endif const H245_DialingInformationNumber & other = (const H245_DialingInformationNumber &)obj; Comparison result; if ((result = m_networkAddress.Compare(other.m_networkAddress)) != EqualTo) return result; if ((result = m_subAddress.Compare(other.m_subAddress)) != EqualTo) return result; if ((result = m_networkType.Compare(other.m_networkType)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_DialingInformationNumber::GetDataLength() const { PINDEX length = 0; length += m_networkAddress.GetObjectLength(); if (HasOptionalField(e_subAddress)) length += m_subAddress.GetObjectLength(); length += m_networkType.GetObjectLength(); return length; } PBoolean H245_DialingInformationNumber::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_networkAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_subAddress) && !m_subAddress.Decode(strm)) return FALSE; if (!m_networkType.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_DialingInformationNumber::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_networkAddress.Encode(strm); if (HasOptionalField(e_subAddress)) m_subAddress.Encode(strm); m_networkType.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_DialingInformationNumber::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DialingInformationNumber::Class()), PInvalidCast); #endif return new H245_DialingInformationNumber(*this); } // // LogicalChannelRateReject // H245_LogicalChannelRateReject::H245_LogicalChannelRateReject(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_LogicalChannelRateReject::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "sequenceNumber = " << setprecision(indent) << m_sequenceNumber << '\n'; strm << setw(indent+23) << "logicalChannelNumber = " << setprecision(indent) << m_logicalChannelNumber << '\n'; strm << setw(indent+15) << "rejectReason = " << setprecision(indent) << m_rejectReason << '\n'; if (HasOptionalField(e_currentMaximumBitRate)) strm << setw(indent+24) << "currentMaximumBitRate = " << setprecision(indent) << m_currentMaximumBitRate << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_LogicalChannelRateReject::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_LogicalChannelRateReject), PInvalidCast); #endif const H245_LogicalChannelRateReject & other = (const H245_LogicalChannelRateReject &)obj; Comparison result; if ((result = m_sequenceNumber.Compare(other.m_sequenceNumber)) != EqualTo) return result; if ((result = m_logicalChannelNumber.Compare(other.m_logicalChannelNumber)) != EqualTo) return result; if ((result = m_rejectReason.Compare(other.m_rejectReason)) != EqualTo) return result; if ((result = m_currentMaximumBitRate.Compare(other.m_currentMaximumBitRate)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_LogicalChannelRateReject::GetDataLength() const { PINDEX length = 0; length += m_sequenceNumber.GetObjectLength(); length += m_logicalChannelNumber.GetObjectLength(); length += m_rejectReason.GetObjectLength(); if (HasOptionalField(e_currentMaximumBitRate)) length += m_currentMaximumBitRate.GetObjectLength(); return length; } PBoolean H245_LogicalChannelRateReject::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sequenceNumber.Decode(strm)) return FALSE; if (!m_logicalChannelNumber.Decode(strm)) return FALSE; if (!m_rejectReason.Decode(strm)) return FALSE; if (HasOptionalField(e_currentMaximumBitRate) && !m_currentMaximumBitRate.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_LogicalChannelRateReject::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sequenceNumber.Encode(strm); m_logicalChannelNumber.Encode(strm); m_rejectReason.Encode(strm); if (HasOptionalField(e_currentMaximumBitRate)) m_currentMaximumBitRate.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_LogicalChannelRateReject::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_LogicalChannelRateReject::Class()), PInvalidCast); #endif return new H245_LogicalChannelRateReject(*this); } // // FlowControlCommand // H245_FlowControlCommand::H245_FlowControlCommand(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_FlowControlCommand::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+8) << "scope = " << setprecision(indent) << m_scope << '\n'; strm << setw(indent+14) << "restriction = " << setprecision(indent) << m_restriction << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_FlowControlCommand::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_FlowControlCommand), PInvalidCast); #endif const H245_FlowControlCommand & other = (const H245_FlowControlCommand &)obj; Comparison result; if ((result = m_scope.Compare(other.m_scope)) != EqualTo) return result; if ((result = m_restriction.Compare(other.m_restriction)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_FlowControlCommand::GetDataLength() const { PINDEX length = 0; length += m_scope.GetObjectLength(); length += m_restriction.GetObjectLength(); return length; } PBoolean H245_FlowControlCommand::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_scope.Decode(strm)) return FALSE; if (!m_restriction.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_FlowControlCommand::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_scope.Encode(strm); m_restriction.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_FlowControlCommand::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_FlowControlCommand::Class()), PInvalidCast); #endif return new H245_FlowControlCommand(*this); } // // MiscellaneousCommand // H245_MiscellaneousCommand::H245_MiscellaneousCommand(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 1) { } #ifndef PASN_NOPRINTON void H245_MiscellaneousCommand::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+23) << "logicalChannelNumber = " << setprecision(indent) << m_logicalChannelNumber << '\n'; strm << setw(indent+7) << "type = " << setprecision(indent) << m_type << '\n'; if (HasOptionalField(e_direction)) strm << setw(indent+12) << "direction = " << setprecision(indent) << m_direction << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MiscellaneousCommand::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MiscellaneousCommand), PInvalidCast); #endif const H245_MiscellaneousCommand & other = (const H245_MiscellaneousCommand &)obj; Comparison result; if ((result = m_logicalChannelNumber.Compare(other.m_logicalChannelNumber)) != EqualTo) return result; if ((result = m_type.Compare(other.m_type)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MiscellaneousCommand::GetDataLength() const { PINDEX length = 0; length += m_logicalChannelNumber.GetObjectLength(); length += m_type.GetObjectLength(); return length; } PBoolean H245_MiscellaneousCommand::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_logicalChannelNumber.Decode(strm)) return FALSE; if (!m_type.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_direction, m_direction)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MiscellaneousCommand::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_logicalChannelNumber.Encode(strm); m_type.Encode(strm); KnownExtensionEncode(strm, e_direction, m_direction); UnknownExtensionsEncode(strm); } PObject * H245_MiscellaneousCommand::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MiscellaneousCommand::Class()), PInvalidCast); #endif return new H245_MiscellaneousCommand(*this); } // // MobileMultilinkReconfigurationCommand // H245_MobileMultilinkReconfigurationCommand::H245_MobileMultilinkReconfigurationCommand(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_sampleSize.SetConstraints(PASN_Object::FixedConstraint, 1, 255); m_samplesPerFrame.SetConstraints(PASN_Object::FixedConstraint, 1, 255); } #ifndef PASN_NOPRINTON void H245_MobileMultilinkReconfigurationCommand::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "sampleSize = " << setprecision(indent) << m_sampleSize << '\n'; strm << setw(indent+18) << "samplesPerFrame = " << setprecision(indent) << m_samplesPerFrame << '\n'; strm << setw(indent+9) << "status = " << setprecision(indent) << m_status << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MobileMultilinkReconfigurationCommand::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MobileMultilinkReconfigurationCommand), PInvalidCast); #endif const H245_MobileMultilinkReconfigurationCommand & other = (const H245_MobileMultilinkReconfigurationCommand &)obj; Comparison result; if ((result = m_sampleSize.Compare(other.m_sampleSize)) != EqualTo) return result; if ((result = m_samplesPerFrame.Compare(other.m_samplesPerFrame)) != EqualTo) return result; if ((result = m_status.Compare(other.m_status)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MobileMultilinkReconfigurationCommand::GetDataLength() const { PINDEX length = 0; length += m_sampleSize.GetObjectLength(); length += m_samplesPerFrame.GetObjectLength(); length += m_status.GetObjectLength(); return length; } PBoolean H245_MobileMultilinkReconfigurationCommand::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sampleSize.Decode(strm)) return FALSE; if (!m_samplesPerFrame.Decode(strm)) return FALSE; if (!m_status.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MobileMultilinkReconfigurationCommand::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sampleSize.Encode(strm); m_samplesPerFrame.Encode(strm); m_status.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MobileMultilinkReconfigurationCommand::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MobileMultilinkReconfigurationCommand::Class()), PInvalidCast); #endif return new H245_MobileMultilinkReconfigurationCommand(*this); } // // FunctionNotSupported // H245_FunctionNotSupported::H245_FunctionNotSupported(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_FunctionNotSupported::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+8) << "cause = " << setprecision(indent) << m_cause << '\n'; if (HasOptionalField(e_returnedFunction)) strm << setw(indent+19) << "returnedFunction = " << setprecision(indent) << m_returnedFunction << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_FunctionNotSupported::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_FunctionNotSupported), PInvalidCast); #endif const H245_FunctionNotSupported & other = (const H245_FunctionNotSupported &)obj; Comparison result; if ((result = m_cause.Compare(other.m_cause)) != EqualTo) return result; if ((result = m_returnedFunction.Compare(other.m_returnedFunction)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_FunctionNotSupported::GetDataLength() const { PINDEX length = 0; length += m_cause.GetObjectLength(); if (HasOptionalField(e_returnedFunction)) length += m_returnedFunction.GetObjectLength(); return length; } PBoolean H245_FunctionNotSupported::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_cause.Decode(strm)) return FALSE; if (HasOptionalField(e_returnedFunction) && !m_returnedFunction.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_FunctionNotSupported::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_cause.Encode(strm); if (HasOptionalField(e_returnedFunction)) m_returnedFunction.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_FunctionNotSupported::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_FunctionNotSupported::Class()), PInvalidCast); #endif return new H245_FunctionNotSupported(*this); } // // MiscellaneousIndication // H245_MiscellaneousIndication::H245_MiscellaneousIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MiscellaneousIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+23) << "logicalChannelNumber = " << setprecision(indent) << m_logicalChannelNumber << '\n'; strm << setw(indent+7) << "type = " << setprecision(indent) << m_type << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MiscellaneousIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MiscellaneousIndication), PInvalidCast); #endif const H245_MiscellaneousIndication & other = (const H245_MiscellaneousIndication &)obj; Comparison result; if ((result = m_logicalChannelNumber.Compare(other.m_logicalChannelNumber)) != EqualTo) return result; if ((result = m_type.Compare(other.m_type)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MiscellaneousIndication::GetDataLength() const { PINDEX length = 0; length += m_logicalChannelNumber.GetObjectLength(); length += m_type.GetObjectLength(); return length; } PBoolean H245_MiscellaneousIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_logicalChannelNumber.Decode(strm)) return FALSE; if (!m_type.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MiscellaneousIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_logicalChannelNumber.Encode(strm); m_type.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MiscellaneousIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MiscellaneousIndication::Class()), PInvalidCast); #endif return new H245_MiscellaneousIndication(*this); } // // JitterIndication // H245_JitterIndication::H245_JitterIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_estimatedReceivedJitterMantissa.SetConstraints(PASN_Object::FixedConstraint, 0, 3); m_estimatedReceivedJitterExponent.SetConstraints(PASN_Object::FixedConstraint, 0, 7); m_skippedFrameCount.SetConstraints(PASN_Object::FixedConstraint, 0, 15); m_additionalDecoderBuffer.SetConstraints(PASN_Object::FixedConstraint, 0, 262143); } #ifndef PASN_NOPRINTON void H245_JitterIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+8) << "scope = " << setprecision(indent) << m_scope << '\n'; strm << setw(indent+34) << "estimatedReceivedJitterMantissa = " << setprecision(indent) << m_estimatedReceivedJitterMantissa << '\n'; strm << setw(indent+34) << "estimatedReceivedJitterExponent = " << setprecision(indent) << m_estimatedReceivedJitterExponent << '\n'; if (HasOptionalField(e_skippedFrameCount)) strm << setw(indent+20) << "skippedFrameCount = " << setprecision(indent) << m_skippedFrameCount << '\n'; if (HasOptionalField(e_additionalDecoderBuffer)) strm << setw(indent+26) << "additionalDecoderBuffer = " << setprecision(indent) << m_additionalDecoderBuffer << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_JitterIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_JitterIndication), PInvalidCast); #endif const H245_JitterIndication & other = (const H245_JitterIndication &)obj; Comparison result; if ((result = m_scope.Compare(other.m_scope)) != EqualTo) return result; if ((result = m_estimatedReceivedJitterMantissa.Compare(other.m_estimatedReceivedJitterMantissa)) != EqualTo) return result; if ((result = m_estimatedReceivedJitterExponent.Compare(other.m_estimatedReceivedJitterExponent)) != EqualTo) return result; if ((result = m_skippedFrameCount.Compare(other.m_skippedFrameCount)) != EqualTo) return result; if ((result = m_additionalDecoderBuffer.Compare(other.m_additionalDecoderBuffer)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_JitterIndication::GetDataLength() const { PINDEX length = 0; length += m_scope.GetObjectLength(); length += m_estimatedReceivedJitterMantissa.GetObjectLength(); length += m_estimatedReceivedJitterExponent.GetObjectLength(); if (HasOptionalField(e_skippedFrameCount)) length += m_skippedFrameCount.GetObjectLength(); if (HasOptionalField(e_additionalDecoderBuffer)) length += m_additionalDecoderBuffer.GetObjectLength(); return length; } PBoolean H245_JitterIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_scope.Decode(strm)) return FALSE; if (!m_estimatedReceivedJitterMantissa.Decode(strm)) return FALSE; if (!m_estimatedReceivedJitterExponent.Decode(strm)) return FALSE; if (HasOptionalField(e_skippedFrameCount) && !m_skippedFrameCount.Decode(strm)) return FALSE; if (HasOptionalField(e_additionalDecoderBuffer) && !m_additionalDecoderBuffer.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_JitterIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_scope.Encode(strm); m_estimatedReceivedJitterMantissa.Encode(strm); m_estimatedReceivedJitterExponent.Encode(strm); if (HasOptionalField(e_skippedFrameCount)) m_skippedFrameCount.Encode(strm); if (HasOptionalField(e_additionalDecoderBuffer)) m_additionalDecoderBuffer.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_JitterIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_JitterIndication::Class()), PInvalidCast); #endif return new H245_JitterIndication(*this); } // // FlowControlIndication // H245_FlowControlIndication::H245_FlowControlIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_FlowControlIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+8) << "scope = " << setprecision(indent) << m_scope << '\n'; strm << setw(indent+14) << "restriction = " << setprecision(indent) << m_restriction << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_FlowControlIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_FlowControlIndication), PInvalidCast); #endif const H245_FlowControlIndication & other = (const H245_FlowControlIndication &)obj; Comparison result; if ((result = m_scope.Compare(other.m_scope)) != EqualTo) return result; if ((result = m_restriction.Compare(other.m_restriction)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_FlowControlIndication::GetDataLength() const { PINDEX length = 0; length += m_scope.GetObjectLength(); length += m_restriction.GetObjectLength(); return length; } PBoolean H245_FlowControlIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_scope.Decode(strm)) return FALSE; if (!m_restriction.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_FlowControlIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_scope.Encode(strm); m_restriction.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_FlowControlIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_FlowControlIndication::Class()), PInvalidCast); #endif return new H245_FlowControlIndication(*this); } // // VCCapability_availableBitRates // H245_VCCapability_availableBitRates::H245_VCCapability_availableBitRates(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_VCCapability_availableBitRates::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "type = " << setprecision(indent) << m_type << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_VCCapability_availableBitRates::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_VCCapability_availableBitRates), PInvalidCast); #endif const H245_VCCapability_availableBitRates & other = (const H245_VCCapability_availableBitRates &)obj; Comparison result; if ((result = m_type.Compare(other.m_type)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_VCCapability_availableBitRates::GetDataLength() const { PINDEX length = 0; length += m_type.GetObjectLength(); return length; } PBoolean H245_VCCapability_availableBitRates::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_type.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_VCCapability_availableBitRates::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_type.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_VCCapability_availableBitRates::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_VCCapability_availableBitRates::Class()), PInvalidCast); #endif return new H245_VCCapability_availableBitRates(*this); } // // VCCapability_aal1ViaGateway // H245_VCCapability_aal1ViaGateway::H245_VCCapability_aal1ViaGateway(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_gatewayAddress.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_VCCapability_aal1ViaGateway::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "gatewayAddress = " << setprecision(indent) << m_gatewayAddress << '\n'; strm << setw(indent+20) << "nullClockRecovery = " << setprecision(indent) << m_nullClockRecovery << '\n'; strm << setw(indent+20) << "srtsClockRecovery = " << setprecision(indent) << m_srtsClockRecovery << '\n'; strm << setw(indent+24) << "adaptiveClockRecovery = " << setprecision(indent) << m_adaptiveClockRecovery << '\n'; strm << setw(indent+22) << "nullErrorCorrection = " << setprecision(indent) << m_nullErrorCorrection << '\n'; strm << setw(indent+18) << "longInterleaver = " << setprecision(indent) << m_longInterleaver << '\n'; strm << setw(indent+19) << "shortInterleaver = " << setprecision(indent) << m_shortInterleaver << '\n'; strm << setw(indent+22) << "errorCorrectionOnly = " << setprecision(indent) << m_errorCorrectionOnly << '\n'; strm << setw(indent+25) << "structuredDataTransfer = " << setprecision(indent) << m_structuredDataTransfer << '\n'; strm << setw(indent+23) << "partiallyFilledCells = " << setprecision(indent) << m_partiallyFilledCells << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_VCCapability_aal1ViaGateway::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_VCCapability_aal1ViaGateway), PInvalidCast); #endif const H245_VCCapability_aal1ViaGateway & other = (const H245_VCCapability_aal1ViaGateway &)obj; Comparison result; if ((result = m_gatewayAddress.Compare(other.m_gatewayAddress)) != EqualTo) return result; if ((result = m_nullClockRecovery.Compare(other.m_nullClockRecovery)) != EqualTo) return result; if ((result = m_srtsClockRecovery.Compare(other.m_srtsClockRecovery)) != EqualTo) return result; if ((result = m_adaptiveClockRecovery.Compare(other.m_adaptiveClockRecovery)) != EqualTo) return result; if ((result = m_nullErrorCorrection.Compare(other.m_nullErrorCorrection)) != EqualTo) return result; if ((result = m_longInterleaver.Compare(other.m_longInterleaver)) != EqualTo) return result; if ((result = m_shortInterleaver.Compare(other.m_shortInterleaver)) != EqualTo) return result; if ((result = m_errorCorrectionOnly.Compare(other.m_errorCorrectionOnly)) != EqualTo) return result; if ((result = m_structuredDataTransfer.Compare(other.m_structuredDataTransfer)) != EqualTo) return result; if ((result = m_partiallyFilledCells.Compare(other.m_partiallyFilledCells)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_VCCapability_aal1ViaGateway::GetDataLength() const { PINDEX length = 0; length += m_gatewayAddress.GetObjectLength(); length += m_nullClockRecovery.GetObjectLength(); length += m_srtsClockRecovery.GetObjectLength(); length += m_adaptiveClockRecovery.GetObjectLength(); length += m_nullErrorCorrection.GetObjectLength(); length += m_longInterleaver.GetObjectLength(); length += m_shortInterleaver.GetObjectLength(); length += m_errorCorrectionOnly.GetObjectLength(); length += m_structuredDataTransfer.GetObjectLength(); length += m_partiallyFilledCells.GetObjectLength(); return length; } PBoolean H245_VCCapability_aal1ViaGateway::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_gatewayAddress.Decode(strm)) return FALSE; if (!m_nullClockRecovery.Decode(strm)) return FALSE; if (!m_srtsClockRecovery.Decode(strm)) return FALSE; if (!m_adaptiveClockRecovery.Decode(strm)) return FALSE; if (!m_nullErrorCorrection.Decode(strm)) return FALSE; if (!m_longInterleaver.Decode(strm)) return FALSE; if (!m_shortInterleaver.Decode(strm)) return FALSE; if (!m_errorCorrectionOnly.Decode(strm)) return FALSE; if (!m_structuredDataTransfer.Decode(strm)) return FALSE; if (!m_partiallyFilledCells.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_VCCapability_aal1ViaGateway::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_gatewayAddress.Encode(strm); m_nullClockRecovery.Encode(strm); m_srtsClockRecovery.Encode(strm); m_adaptiveClockRecovery.Encode(strm); m_nullErrorCorrection.Encode(strm); m_longInterleaver.Encode(strm); m_shortInterleaver.Encode(strm); m_errorCorrectionOnly.Encode(strm); m_structuredDataTransfer.Encode(strm); m_partiallyFilledCells.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_VCCapability_aal1ViaGateway::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_VCCapability_aal1ViaGateway::Class()), PInvalidCast); #endif return new H245_VCCapability_aal1ViaGateway(*this); } // // RefPictureSelection_enhancedReferencePicSelect // H245_RefPictureSelection_enhancedReferencePicSelect::H245_RefPictureSelection_enhancedReferencePicSelect(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_RefPictureSelection_enhancedReferencePicSelect::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_subPictureRemovalParameters)) strm << setw(indent+30) << "subPictureRemovalParameters = " << setprecision(indent) << m_subPictureRemovalParameters << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RefPictureSelection_enhancedReferencePicSelect::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RefPictureSelection_enhancedReferencePicSelect), PInvalidCast); #endif const H245_RefPictureSelection_enhancedReferencePicSelect & other = (const H245_RefPictureSelection_enhancedReferencePicSelect &)obj; Comparison result; if ((result = m_subPictureRemovalParameters.Compare(other.m_subPictureRemovalParameters)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RefPictureSelection_enhancedReferencePicSelect::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_subPictureRemovalParameters)) length += m_subPictureRemovalParameters.GetObjectLength(); return length; } PBoolean H245_RefPictureSelection_enhancedReferencePicSelect::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_subPictureRemovalParameters) && !m_subPictureRemovalParameters.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RefPictureSelection_enhancedReferencePicSelect::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_subPictureRemovalParameters)) m_subPictureRemovalParameters.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RefPictureSelection_enhancedReferencePicSelect::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RefPictureSelection_enhancedReferencePicSelect::Class()), PInvalidCast); #endif return new H245_RefPictureSelection_enhancedReferencePicSelect(*this); } // // CustomPictureFormat_mPI // H245_CustomPictureFormat_mPI::H245_CustomPictureFormat_mPI(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_standardMPI.SetConstraints(PASN_Object::FixedConstraint, 1, 31); } #ifndef PASN_NOPRINTON void H245_CustomPictureFormat_mPI::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_standardMPI)) strm << setw(indent+14) << "standardMPI = " << setprecision(indent) << m_standardMPI << '\n'; if (HasOptionalField(e_customPCF)) strm << setw(indent+12) << "customPCF = " << setprecision(indent) << m_customPCF << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_CustomPictureFormat_mPI::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_CustomPictureFormat_mPI), PInvalidCast); #endif const H245_CustomPictureFormat_mPI & other = (const H245_CustomPictureFormat_mPI &)obj; Comparison result; if ((result = m_standardMPI.Compare(other.m_standardMPI)) != EqualTo) return result; if ((result = m_customPCF.Compare(other.m_customPCF)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_CustomPictureFormat_mPI::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_standardMPI)) length += m_standardMPI.GetObjectLength(); if (HasOptionalField(e_customPCF)) length += m_customPCF.GetObjectLength(); return length; } PBoolean H245_CustomPictureFormat_mPI::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_standardMPI) && !m_standardMPI.Decode(strm)) return FALSE; if (HasOptionalField(e_customPCF) && !m_customPCF.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_CustomPictureFormat_mPI::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_standardMPI)) m_standardMPI.Encode(strm); if (HasOptionalField(e_customPCF)) m_customPCF.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_CustomPictureFormat_mPI::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CustomPictureFormat_mPI::Class()), PInvalidCast); #endif return new H245_CustomPictureFormat_mPI(*this); } // // DepFECCapability_rfc2733 // H245_DepFECCapability_rfc2733::H245_DepFECCapability_rfc2733(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_DepFECCapability_rfc2733::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "redundancyEncoding = " << setprecision(indent) << m_redundancyEncoding << '\n'; strm << setw(indent+17) << "separateStream = " << setprecision(indent) << m_separateStream << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_DepFECCapability_rfc2733::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_DepFECCapability_rfc2733), PInvalidCast); #endif const H245_DepFECCapability_rfc2733 & other = (const H245_DepFECCapability_rfc2733 &)obj; Comparison result; if ((result = m_redundancyEncoding.Compare(other.m_redundancyEncoding)) != EqualTo) return result; if ((result = m_separateStream.Compare(other.m_separateStream)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_DepFECCapability_rfc2733::GetDataLength() const { PINDEX length = 0; length += m_redundancyEncoding.GetObjectLength(); length += m_separateStream.GetObjectLength(); return length; } PBoolean H245_DepFECCapability_rfc2733::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_redundancyEncoding.Decode(strm)) return FALSE; if (!m_separateStream.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_DepFECCapability_rfc2733::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_redundancyEncoding.Encode(strm); m_separateStream.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_DepFECCapability_rfc2733::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DepFECCapability_rfc2733::Class()), PInvalidCast); #endif return new H245_DepFECCapability_rfc2733(*this); } // // OpenLogicalChannel_forwardLogicalChannelParameters // H245_OpenLogicalChannel_forwardLogicalChannelParameters::H245_OpenLogicalChannel_forwardLogicalChannelParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 2) { m_portNumber.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H245_OpenLogicalChannel_forwardLogicalChannelParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_portNumber)) strm << setw(indent+13) << "portNumber = " << setprecision(indent) << m_portNumber << '\n'; strm << setw(indent+11) << "dataType = " << setprecision(indent) << m_dataType << '\n'; strm << setw(indent+22) << "multiplexParameters = " << setprecision(indent) << m_multiplexParameters << '\n'; if (HasOptionalField(e_forwardLogicalChannelDependency)) strm << setw(indent+34) << "forwardLogicalChannelDependency = " << setprecision(indent) << m_forwardLogicalChannelDependency << '\n'; if (HasOptionalField(e_replacementFor)) strm << setw(indent+17) << "replacementFor = " << setprecision(indent) << m_replacementFor << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_OpenLogicalChannel_forwardLogicalChannelParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_OpenLogicalChannel_forwardLogicalChannelParameters), PInvalidCast); #endif const H245_OpenLogicalChannel_forwardLogicalChannelParameters & other = (const H245_OpenLogicalChannel_forwardLogicalChannelParameters &)obj; Comparison result; if ((result = m_portNumber.Compare(other.m_portNumber)) != EqualTo) return result; if ((result = m_dataType.Compare(other.m_dataType)) != EqualTo) return result; if ((result = m_multiplexParameters.Compare(other.m_multiplexParameters)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_OpenLogicalChannel_forwardLogicalChannelParameters::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_portNumber)) length += m_portNumber.GetObjectLength(); length += m_dataType.GetObjectLength(); length += m_multiplexParameters.GetObjectLength(); return length; } PBoolean H245_OpenLogicalChannel_forwardLogicalChannelParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_portNumber) && !m_portNumber.Decode(strm)) return FALSE; if (!m_dataType.Decode(strm)) return FALSE; if (!m_multiplexParameters.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_forwardLogicalChannelDependency, m_forwardLogicalChannelDependency)) return FALSE; if (!KnownExtensionDecode(strm, e_replacementFor, m_replacementFor)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_OpenLogicalChannel_forwardLogicalChannelParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_portNumber)) m_portNumber.Encode(strm); m_dataType.Encode(strm); m_multiplexParameters.Encode(strm); KnownExtensionEncode(strm, e_forwardLogicalChannelDependency, m_forwardLogicalChannelDependency); KnownExtensionEncode(strm, e_replacementFor, m_replacementFor); UnknownExtensionsEncode(strm); } PObject * H245_OpenLogicalChannel_forwardLogicalChannelParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_OpenLogicalChannel_forwardLogicalChannelParameters::Class()), PInvalidCast); #endif return new H245_OpenLogicalChannel_forwardLogicalChannelParameters(*this); } // // OpenLogicalChannel_reverseLogicalChannelParameters // H245_OpenLogicalChannel_reverseLogicalChannelParameters::H245_OpenLogicalChannel_reverseLogicalChannelParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 2) { } #ifndef PASN_NOPRINTON void H245_OpenLogicalChannel_reverseLogicalChannelParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "dataType = " << setprecision(indent) << m_dataType << '\n'; if (HasOptionalField(e_multiplexParameters)) strm << setw(indent+22) << "multiplexParameters = " << setprecision(indent) << m_multiplexParameters << '\n'; if (HasOptionalField(e_reverseLogicalChannelDependency)) strm << setw(indent+34) << "reverseLogicalChannelDependency = " << setprecision(indent) << m_reverseLogicalChannelDependency << '\n'; if (HasOptionalField(e_replacementFor)) strm << setw(indent+17) << "replacementFor = " << setprecision(indent) << m_replacementFor << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_OpenLogicalChannel_reverseLogicalChannelParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_OpenLogicalChannel_reverseLogicalChannelParameters), PInvalidCast); #endif const H245_OpenLogicalChannel_reverseLogicalChannelParameters & other = (const H245_OpenLogicalChannel_reverseLogicalChannelParameters &)obj; Comparison result; if ((result = m_dataType.Compare(other.m_dataType)) != EqualTo) return result; if ((result = m_multiplexParameters.Compare(other.m_multiplexParameters)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_OpenLogicalChannel_reverseLogicalChannelParameters::GetDataLength() const { PINDEX length = 0; length += m_dataType.GetObjectLength(); if (HasOptionalField(e_multiplexParameters)) length += m_multiplexParameters.GetObjectLength(); return length; } PBoolean H245_OpenLogicalChannel_reverseLogicalChannelParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_dataType.Decode(strm)) return FALSE; if (HasOptionalField(e_multiplexParameters) && !m_multiplexParameters.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_reverseLogicalChannelDependency, m_reverseLogicalChannelDependency)) return FALSE; if (!KnownExtensionDecode(strm, e_replacementFor, m_replacementFor)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_OpenLogicalChannel_reverseLogicalChannelParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_dataType.Encode(strm); if (HasOptionalField(e_multiplexParameters)) m_multiplexParameters.Encode(strm); KnownExtensionEncode(strm, e_reverseLogicalChannelDependency, m_reverseLogicalChannelDependency); KnownExtensionEncode(strm, e_replacementFor, m_replacementFor); UnknownExtensionsEncode(strm); } PObject * H245_OpenLogicalChannel_reverseLogicalChannelParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_OpenLogicalChannel_reverseLogicalChannelParameters::Class()), PInvalidCast); #endif return new H245_OpenLogicalChannel_reverseLogicalChannelParameters(*this); } // // RedundancyEncoding_rtpRedundancyEncoding // H245_RedundancyEncoding_rtpRedundancyEncoding::H245_RedundancyEncoding_rtpRedundancyEncoding(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_RedundancyEncoding_rtpRedundancyEncoding::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_primary)) strm << setw(indent+10) << "primary = " << setprecision(indent) << m_primary << '\n'; if (HasOptionalField(e_secondary)) strm << setw(indent+12) << "secondary = " << setprecision(indent) << m_secondary << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RedundancyEncoding_rtpRedundancyEncoding::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RedundancyEncoding_rtpRedundancyEncoding), PInvalidCast); #endif const H245_RedundancyEncoding_rtpRedundancyEncoding & other = (const H245_RedundancyEncoding_rtpRedundancyEncoding &)obj; Comparison result; if ((result = m_primary.Compare(other.m_primary)) != EqualTo) return result; if ((result = m_secondary.Compare(other.m_secondary)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RedundancyEncoding_rtpRedundancyEncoding::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_primary)) length += m_primary.GetObjectLength(); if (HasOptionalField(e_secondary)) length += m_secondary.GetObjectLength(); return length; } PBoolean H245_RedundancyEncoding_rtpRedundancyEncoding::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_primary) && !m_primary.Decode(strm)) return FALSE; if (HasOptionalField(e_secondary) && !m_secondary.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RedundancyEncoding_rtpRedundancyEncoding::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_primary)) m_primary.Encode(strm); if (HasOptionalField(e_secondary)) m_secondary.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RedundancyEncoding_rtpRedundancyEncoding::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RedundancyEncoding_rtpRedundancyEncoding::Class()), PInvalidCast); #endif return new H245_RedundancyEncoding_rtpRedundancyEncoding(*this); } // // DepFECData_rfc2733 // H245_DepFECData_rfc2733::H245_DepFECData_rfc2733(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_DepFECData_rfc2733::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "mode = " << setprecision(indent) << m_mode << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_DepFECData_rfc2733::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_DepFECData_rfc2733), PInvalidCast); #endif const H245_DepFECData_rfc2733 & other = (const H245_DepFECData_rfc2733 &)obj; Comparison result; if ((result = m_mode.Compare(other.m_mode)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_DepFECData_rfc2733::GetDataLength() const { PINDEX length = 0; length += m_mode.GetObjectLength(); return length; } PBoolean H245_DepFECData_rfc2733::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_mode.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_DepFECData_rfc2733::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_mode.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_DepFECData_rfc2733::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DepFECData_rfc2733::Class()), PInvalidCast); #endif return new H245_DepFECData_rfc2733(*this); } // // FECData_rfc2733 // H245_FECData_rfc2733::H245_FECData_rfc2733(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_protectedPayloadType.SetConstraints(PASN_Object::FixedConstraint, 0, 127); } #ifndef PASN_NOPRINTON void H245_FECData_rfc2733::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+23) << "protectedPayloadType = " << setprecision(indent) << m_protectedPayloadType << '\n'; if (HasOptionalField(e_fecScheme)) strm << setw(indent+12) << "fecScheme = " << setprecision(indent) << m_fecScheme << '\n'; strm << setw(indent+10) << "pktMode = " << setprecision(indent) << m_pktMode << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_FECData_rfc2733::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_FECData_rfc2733), PInvalidCast); #endif const H245_FECData_rfc2733 & other = (const H245_FECData_rfc2733 &)obj; Comparison result; if ((result = m_protectedPayloadType.Compare(other.m_protectedPayloadType)) != EqualTo) return result; if ((result = m_fecScheme.Compare(other.m_fecScheme)) != EqualTo) return result; if ((result = m_pktMode.Compare(other.m_pktMode)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_FECData_rfc2733::GetDataLength() const { PINDEX length = 0; length += m_protectedPayloadType.GetObjectLength(); if (HasOptionalField(e_fecScheme)) length += m_fecScheme.GetObjectLength(); length += m_pktMode.GetObjectLength(); return length; } PBoolean H245_FECData_rfc2733::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_protectedPayloadType.Decode(strm)) return FALSE; if (HasOptionalField(e_fecScheme) && !m_fecScheme.Decode(strm)) return FALSE; if (!m_pktMode.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_FECData_rfc2733::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_protectedPayloadType.Encode(strm); if (HasOptionalField(e_fecScheme)) m_fecScheme.Encode(strm); m_pktMode.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_FECData_rfc2733::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_FECData_rfc2733::Class()), PInvalidCast); #endif return new H245_FECData_rfc2733(*this); } // // UnicastAddress_iPSourceRouteAddress // H245_UnicastAddress_iPSourceRouteAddress::H245_UnicastAddress_iPSourceRouteAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_network.SetConstraints(PASN_Object::FixedConstraint, 4); m_tsapIdentifier.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H245_UnicastAddress_iPSourceRouteAddress::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "routing = " << setprecision(indent) << m_routing << '\n'; strm << setw(indent+10) << "network = " << setprecision(indent) << m_network << '\n'; strm << setw(indent+17) << "tsapIdentifier = " << setprecision(indent) << m_tsapIdentifier << '\n'; strm << setw(indent+8) << "route = " << setprecision(indent) << m_route << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_UnicastAddress_iPSourceRouteAddress::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_UnicastAddress_iPSourceRouteAddress), PInvalidCast); #endif const H245_UnicastAddress_iPSourceRouteAddress & other = (const H245_UnicastAddress_iPSourceRouteAddress &)obj; Comparison result; if ((result = m_routing.Compare(other.m_routing)) != EqualTo) return result; if ((result = m_network.Compare(other.m_network)) != EqualTo) return result; if ((result = m_tsapIdentifier.Compare(other.m_tsapIdentifier)) != EqualTo) return result; if ((result = m_route.Compare(other.m_route)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_UnicastAddress_iPSourceRouteAddress::GetDataLength() const { PINDEX length = 0; length += m_routing.GetObjectLength(); length += m_network.GetObjectLength(); length += m_tsapIdentifier.GetObjectLength(); length += m_route.GetObjectLength(); return length; } PBoolean H245_UnicastAddress_iPSourceRouteAddress::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_routing.Decode(strm)) return FALSE; if (!m_network.Decode(strm)) return FALSE; if (!m_tsapIdentifier.Decode(strm)) return FALSE; if (!m_route.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_UnicastAddress_iPSourceRouteAddress::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_routing.Encode(strm); m_network.Encode(strm); m_tsapIdentifier.Encode(strm); m_route.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_UnicastAddress_iPSourceRouteAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_UnicastAddress_iPSourceRouteAddress::Class()), PInvalidCast); #endif return new H245_UnicastAddress_iPSourceRouteAddress(*this); } // // OpenLogicalChannelAck_reverseLogicalChannelParameters // H245_OpenLogicalChannelAck_reverseLogicalChannelParameters::H245_OpenLogicalChannelAck_reverseLogicalChannelParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 1) { m_portNumber.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H245_OpenLogicalChannelAck_reverseLogicalChannelParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+30) << "reverseLogicalChannelNumber = " << setprecision(indent) << m_reverseLogicalChannelNumber << '\n'; if (HasOptionalField(e_portNumber)) strm << setw(indent+13) << "portNumber = " << setprecision(indent) << m_portNumber << '\n'; if (HasOptionalField(e_multiplexParameters)) strm << setw(indent+22) << "multiplexParameters = " << setprecision(indent) << m_multiplexParameters << '\n'; if (HasOptionalField(e_replacementFor)) strm << setw(indent+17) << "replacementFor = " << setprecision(indent) << m_replacementFor << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_OpenLogicalChannelAck_reverseLogicalChannelParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_OpenLogicalChannelAck_reverseLogicalChannelParameters), PInvalidCast); #endif const H245_OpenLogicalChannelAck_reverseLogicalChannelParameters & other = (const H245_OpenLogicalChannelAck_reverseLogicalChannelParameters &)obj; Comparison result; if ((result = m_reverseLogicalChannelNumber.Compare(other.m_reverseLogicalChannelNumber)) != EqualTo) return result; if ((result = m_portNumber.Compare(other.m_portNumber)) != EqualTo) return result; if ((result = m_multiplexParameters.Compare(other.m_multiplexParameters)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_OpenLogicalChannelAck_reverseLogicalChannelParameters::GetDataLength() const { PINDEX length = 0; length += m_reverseLogicalChannelNumber.GetObjectLength(); if (HasOptionalField(e_portNumber)) length += m_portNumber.GetObjectLength(); if (HasOptionalField(e_multiplexParameters)) length += m_multiplexParameters.GetObjectLength(); return length; } PBoolean H245_OpenLogicalChannelAck_reverseLogicalChannelParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_reverseLogicalChannelNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_portNumber) && !m_portNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_multiplexParameters) && !m_multiplexParameters.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_replacementFor, m_replacementFor)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_OpenLogicalChannelAck_reverseLogicalChannelParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_reverseLogicalChannelNumber.Encode(strm); if (HasOptionalField(e_portNumber)) m_portNumber.Encode(strm); if (HasOptionalField(e_multiplexParameters)) m_multiplexParameters.Encode(strm); KnownExtensionEncode(strm, e_replacementFor, m_replacementFor); UnknownExtensionsEncode(strm); } PObject * H245_OpenLogicalChannelAck_reverseLogicalChannelParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_OpenLogicalChannelAck_reverseLogicalChannelParameters::Class()), PInvalidCast); #endif return new H245_OpenLogicalChannelAck_reverseLogicalChannelParameters(*this); } // // DepFECMode_rfc2733Mode // H245_DepFECMode_rfc2733Mode::H245_DepFECMode_rfc2733Mode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_DepFECMode_rfc2733Mode::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "mode = " << setprecision(indent) << m_mode << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_DepFECMode_rfc2733Mode::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_DepFECMode_rfc2733Mode), PInvalidCast); #endif const H245_DepFECMode_rfc2733Mode & other = (const H245_DepFECMode_rfc2733Mode &)obj; Comparison result; if ((result = m_mode.Compare(other.m_mode)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_DepFECMode_rfc2733Mode::GetDataLength() const { PINDEX length = 0; length += m_mode.GetObjectLength(); return length; } PBoolean H245_DepFECMode_rfc2733Mode::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_mode.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_DepFECMode_rfc2733Mode::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_mode.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_DepFECMode_rfc2733Mode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DepFECMode_rfc2733Mode::Class()), PInvalidCast); #endif return new H245_DepFECMode_rfc2733Mode(*this); } // // ConferenceRequest_requestTerminalCertificate // H245_ConferenceRequest_requestTerminalCertificate::H245_ConferenceRequest_requestTerminalCertificate(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { m_sRandom.SetConstraints(PASN_Object::FixedConstraint, 1, 4294967295U); } #ifndef PASN_NOPRINTON void H245_ConferenceRequest_requestTerminalCertificate::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_terminalLabel)) strm << setw(indent+16) << "terminalLabel = " << setprecision(indent) << m_terminalLabel << '\n'; if (HasOptionalField(e_certSelectionCriteria)) strm << setw(indent+24) << "certSelectionCriteria = " << setprecision(indent) << m_certSelectionCriteria << '\n'; if (HasOptionalField(e_sRandom)) strm << setw(indent+10) << "sRandom = " << setprecision(indent) << m_sRandom << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_ConferenceRequest_requestTerminalCertificate::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_ConferenceRequest_requestTerminalCertificate), PInvalidCast); #endif const H245_ConferenceRequest_requestTerminalCertificate & other = (const H245_ConferenceRequest_requestTerminalCertificate &)obj; Comparison result; if ((result = m_terminalLabel.Compare(other.m_terminalLabel)) != EqualTo) return result; if ((result = m_certSelectionCriteria.Compare(other.m_certSelectionCriteria)) != EqualTo) return result; if ((result = m_sRandom.Compare(other.m_sRandom)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_ConferenceRequest_requestTerminalCertificate::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_terminalLabel)) length += m_terminalLabel.GetObjectLength(); if (HasOptionalField(e_certSelectionCriteria)) length += m_certSelectionCriteria.GetObjectLength(); if (HasOptionalField(e_sRandom)) length += m_sRandom.GetObjectLength(); return length; } PBoolean H245_ConferenceRequest_requestTerminalCertificate::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_terminalLabel) && !m_terminalLabel.Decode(strm)) return FALSE; if (HasOptionalField(e_certSelectionCriteria) && !m_certSelectionCriteria.Decode(strm)) return FALSE; if (HasOptionalField(e_sRandom) && !m_sRandom.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_ConferenceRequest_requestTerminalCertificate::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_terminalLabel)) m_terminalLabel.Encode(strm); if (HasOptionalField(e_certSelectionCriteria)) m_certSelectionCriteria.Encode(strm); if (HasOptionalField(e_sRandom)) m_sRandom.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_ConferenceRequest_requestTerminalCertificate::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ConferenceRequest_requestTerminalCertificate::Class()), PInvalidCast); #endif return new H245_ConferenceRequest_requestTerminalCertificate(*this); } // // ConferenceResponse_mCTerminalIDResponse // H245_ConferenceResponse_mCTerminalIDResponse::H245_ConferenceResponse_mCTerminalIDResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_ConferenceResponse_mCTerminalIDResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "terminalLabel = " << setprecision(indent) << m_terminalLabel << '\n'; strm << setw(indent+13) << "terminalID = " << setprecision(indent) << m_terminalID << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_ConferenceResponse_mCTerminalIDResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_ConferenceResponse_mCTerminalIDResponse), PInvalidCast); #endif const H245_ConferenceResponse_mCTerminalIDResponse & other = (const H245_ConferenceResponse_mCTerminalIDResponse &)obj; Comparison result; if ((result = m_terminalLabel.Compare(other.m_terminalLabel)) != EqualTo) return result; if ((result = m_terminalID.Compare(other.m_terminalID)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_ConferenceResponse_mCTerminalIDResponse::GetDataLength() const { PINDEX length = 0; length += m_terminalLabel.GetObjectLength(); length += m_terminalID.GetObjectLength(); return length; } PBoolean H245_ConferenceResponse_mCTerminalIDResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_terminalLabel.Decode(strm)) return FALSE; if (!m_terminalID.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_ConferenceResponse_mCTerminalIDResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_terminalLabel.Encode(strm); m_terminalID.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_ConferenceResponse_mCTerminalIDResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ConferenceResponse_mCTerminalIDResponse::Class()), PInvalidCast); #endif return new H245_ConferenceResponse_mCTerminalIDResponse(*this); } // // ConferenceResponse_terminalIDResponse // H245_ConferenceResponse_terminalIDResponse::H245_ConferenceResponse_terminalIDResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_ConferenceResponse_terminalIDResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "terminalLabel = " << setprecision(indent) << m_terminalLabel << '\n'; strm << setw(indent+13) << "terminalID = " << setprecision(indent) << m_terminalID << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_ConferenceResponse_terminalIDResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_ConferenceResponse_terminalIDResponse), PInvalidCast); #endif const H245_ConferenceResponse_terminalIDResponse & other = (const H245_ConferenceResponse_terminalIDResponse &)obj; Comparison result; if ((result = m_terminalLabel.Compare(other.m_terminalLabel)) != EqualTo) return result; if ((result = m_terminalID.Compare(other.m_terminalID)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_ConferenceResponse_terminalIDResponse::GetDataLength() const { PINDEX length = 0; length += m_terminalLabel.GetObjectLength(); length += m_terminalID.GetObjectLength(); return length; } PBoolean H245_ConferenceResponse_terminalIDResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_terminalLabel.Decode(strm)) return FALSE; if (!m_terminalID.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_ConferenceResponse_terminalIDResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_terminalLabel.Encode(strm); m_terminalID.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_ConferenceResponse_terminalIDResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ConferenceResponse_terminalIDResponse::Class()), PInvalidCast); #endif return new H245_ConferenceResponse_terminalIDResponse(*this); } // // ConferenceResponse_conferenceIDResponse // H245_ConferenceResponse_conferenceIDResponse::H245_ConferenceResponse_conferenceIDResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_ConferenceResponse_conferenceIDResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "terminalLabel = " << setprecision(indent) << m_terminalLabel << '\n'; strm << setw(indent+15) << "conferenceID = " << setprecision(indent) << m_conferenceID << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_ConferenceResponse_conferenceIDResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_ConferenceResponse_conferenceIDResponse), PInvalidCast); #endif const H245_ConferenceResponse_conferenceIDResponse & other = (const H245_ConferenceResponse_conferenceIDResponse &)obj; Comparison result; if ((result = m_terminalLabel.Compare(other.m_terminalLabel)) != EqualTo) return result; if ((result = m_conferenceID.Compare(other.m_conferenceID)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_ConferenceResponse_conferenceIDResponse::GetDataLength() const { PINDEX length = 0; length += m_terminalLabel.GetObjectLength(); length += m_conferenceID.GetObjectLength(); return length; } PBoolean H245_ConferenceResponse_conferenceIDResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_terminalLabel.Decode(strm)) return FALSE; if (!m_conferenceID.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_ConferenceResponse_conferenceIDResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_terminalLabel.Encode(strm); m_conferenceID.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_ConferenceResponse_conferenceIDResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ConferenceResponse_conferenceIDResponse::Class()), PInvalidCast); #endif return new H245_ConferenceResponse_conferenceIDResponse(*this); } // // ConferenceResponse_passwordResponse // H245_ConferenceResponse_passwordResponse::H245_ConferenceResponse_passwordResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_ConferenceResponse_passwordResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "terminalLabel = " << setprecision(indent) << m_terminalLabel << '\n'; strm << setw(indent+11) << "password = " << setprecision(indent) << m_password << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_ConferenceResponse_passwordResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_ConferenceResponse_passwordResponse), PInvalidCast); #endif const H245_ConferenceResponse_passwordResponse & other = (const H245_ConferenceResponse_passwordResponse &)obj; Comparison result; if ((result = m_terminalLabel.Compare(other.m_terminalLabel)) != EqualTo) return result; if ((result = m_password.Compare(other.m_password)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_ConferenceResponse_passwordResponse::GetDataLength() const { PINDEX length = 0; length += m_terminalLabel.GetObjectLength(); length += m_password.GetObjectLength(); return length; } PBoolean H245_ConferenceResponse_passwordResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_terminalLabel.Decode(strm)) return FALSE; if (!m_password.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_ConferenceResponse_passwordResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_terminalLabel.Encode(strm); m_password.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_ConferenceResponse_passwordResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ConferenceResponse_passwordResponse::Class()), PInvalidCast); #endif return new H245_ConferenceResponse_passwordResponse(*this); } // // ConferenceResponse_chairTokenOwnerResponse // H245_ConferenceResponse_chairTokenOwnerResponse::H245_ConferenceResponse_chairTokenOwnerResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_ConferenceResponse_chairTokenOwnerResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "terminalLabel = " << setprecision(indent) << m_terminalLabel << '\n'; strm << setw(indent+13) << "terminalID = " << setprecision(indent) << m_terminalID << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_ConferenceResponse_chairTokenOwnerResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_ConferenceResponse_chairTokenOwnerResponse), PInvalidCast); #endif const H245_ConferenceResponse_chairTokenOwnerResponse & other = (const H245_ConferenceResponse_chairTokenOwnerResponse &)obj; Comparison result; if ((result = m_terminalLabel.Compare(other.m_terminalLabel)) != EqualTo) return result; if ((result = m_terminalID.Compare(other.m_terminalID)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_ConferenceResponse_chairTokenOwnerResponse::GetDataLength() const { PINDEX length = 0; length += m_terminalLabel.GetObjectLength(); length += m_terminalID.GetObjectLength(); return length; } PBoolean H245_ConferenceResponse_chairTokenOwnerResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_terminalLabel.Decode(strm)) return FALSE; if (!m_terminalID.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_ConferenceResponse_chairTokenOwnerResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_terminalLabel.Encode(strm); m_terminalID.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_ConferenceResponse_chairTokenOwnerResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ConferenceResponse_chairTokenOwnerResponse::Class()), PInvalidCast); #endif return new H245_ConferenceResponse_chairTokenOwnerResponse(*this); } // // ConferenceResponse_terminalCertificateResponse // H245_ConferenceResponse_terminalCertificateResponse::H245_ConferenceResponse_terminalCertificateResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_certificateResponse.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } #ifndef PASN_NOPRINTON void H245_ConferenceResponse_terminalCertificateResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_terminalLabel)) strm << setw(indent+16) << "terminalLabel = " << setprecision(indent) << m_terminalLabel << '\n'; if (HasOptionalField(e_certificateResponse)) strm << setw(indent+22) << "certificateResponse = " << setprecision(indent) << m_certificateResponse << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_ConferenceResponse_terminalCertificateResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_ConferenceResponse_terminalCertificateResponse), PInvalidCast); #endif const H245_ConferenceResponse_terminalCertificateResponse & other = (const H245_ConferenceResponse_terminalCertificateResponse &)obj; Comparison result; if ((result = m_terminalLabel.Compare(other.m_terminalLabel)) != EqualTo) return result; if ((result = m_certificateResponse.Compare(other.m_certificateResponse)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_ConferenceResponse_terminalCertificateResponse::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_terminalLabel)) length += m_terminalLabel.GetObjectLength(); if (HasOptionalField(e_certificateResponse)) length += m_certificateResponse.GetObjectLength(); return length; } PBoolean H245_ConferenceResponse_terminalCertificateResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_terminalLabel) && !m_terminalLabel.Decode(strm)) return FALSE; if (HasOptionalField(e_certificateResponse) && !m_certificateResponse.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_ConferenceResponse_terminalCertificateResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_terminalLabel)) m_terminalLabel.Encode(strm); if (HasOptionalField(e_certificateResponse)) m_certificateResponse.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_ConferenceResponse_terminalCertificateResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ConferenceResponse_terminalCertificateResponse::Class()), PInvalidCast); #endif return new H245_ConferenceResponse_terminalCertificateResponse(*this); } // // MultilinkRequest_maximumHeaderInterval // H245_MultilinkRequest_maximumHeaderInterval::H245_MultilinkRequest_maximumHeaderInterval(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MultilinkRequest_maximumHeaderInterval::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "requestType = " << setprecision(indent) << m_requestType << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultilinkRequest_maximumHeaderInterval::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultilinkRequest_maximumHeaderInterval), PInvalidCast); #endif const H245_MultilinkRequest_maximumHeaderInterval & other = (const H245_MultilinkRequest_maximumHeaderInterval &)obj; Comparison result; if ((result = m_requestType.Compare(other.m_requestType)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultilinkRequest_maximumHeaderInterval::GetDataLength() const { PINDEX length = 0; length += m_requestType.GetObjectLength(); return length; } PBoolean H245_MultilinkRequest_maximumHeaderInterval::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestType.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultilinkRequest_maximumHeaderInterval::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestType.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultilinkRequest_maximumHeaderInterval::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultilinkRequest_maximumHeaderInterval::Class()), PInvalidCast); #endif return new H245_MultilinkRequest_maximumHeaderInterval(*this); } // // MultilinkResponse_addConnection // H245_MultilinkResponse_addConnection::H245_MultilinkResponse_addConnection(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MultilinkResponse_addConnection::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "sequenceNumber = " << setprecision(indent) << m_sequenceNumber << '\n'; strm << setw(indent+15) << "responseCode = " << setprecision(indent) << m_responseCode << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultilinkResponse_addConnection::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultilinkResponse_addConnection), PInvalidCast); #endif const H245_MultilinkResponse_addConnection & other = (const H245_MultilinkResponse_addConnection &)obj; Comparison result; if ((result = m_sequenceNumber.Compare(other.m_sequenceNumber)) != EqualTo) return result; if ((result = m_responseCode.Compare(other.m_responseCode)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultilinkResponse_addConnection::GetDataLength() const { PINDEX length = 0; length += m_sequenceNumber.GetObjectLength(); length += m_responseCode.GetObjectLength(); return length; } PBoolean H245_MultilinkResponse_addConnection::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sequenceNumber.Decode(strm)) return FALSE; if (!m_responseCode.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultilinkResponse_addConnection::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sequenceNumber.Encode(strm); m_responseCode.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultilinkResponse_addConnection::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultilinkResponse_addConnection::Class()), PInvalidCast); #endif return new H245_MultilinkResponse_addConnection(*this); } // // SendTerminalCapabilitySet_specificRequest // H245_SendTerminalCapabilitySet_specificRequest::H245_SendTerminalCapabilitySet_specificRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_capabilityTableEntryNumbers.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); m_capabilityDescriptorNumbers.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_SendTerminalCapabilitySet_specificRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+22) << "multiplexCapability = " << setprecision(indent) << m_multiplexCapability << '\n'; if (HasOptionalField(e_capabilityTableEntryNumbers)) strm << setw(indent+30) << "capabilityTableEntryNumbers = " << setprecision(indent) << m_capabilityTableEntryNumbers << '\n'; if (HasOptionalField(e_capabilityDescriptorNumbers)) strm << setw(indent+30) << "capabilityDescriptorNumbers = " << setprecision(indent) << m_capabilityDescriptorNumbers << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_SendTerminalCapabilitySet_specificRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_SendTerminalCapabilitySet_specificRequest), PInvalidCast); #endif const H245_SendTerminalCapabilitySet_specificRequest & other = (const H245_SendTerminalCapabilitySet_specificRequest &)obj; Comparison result; if ((result = m_multiplexCapability.Compare(other.m_multiplexCapability)) != EqualTo) return result; if ((result = m_capabilityTableEntryNumbers.Compare(other.m_capabilityTableEntryNumbers)) != EqualTo) return result; if ((result = m_capabilityDescriptorNumbers.Compare(other.m_capabilityDescriptorNumbers)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_SendTerminalCapabilitySet_specificRequest::GetDataLength() const { PINDEX length = 0; length += m_multiplexCapability.GetObjectLength(); if (HasOptionalField(e_capabilityTableEntryNumbers)) length += m_capabilityTableEntryNumbers.GetObjectLength(); if (HasOptionalField(e_capabilityDescriptorNumbers)) length += m_capabilityDescriptorNumbers.GetObjectLength(); return length; } PBoolean H245_SendTerminalCapabilitySet_specificRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_multiplexCapability.Decode(strm)) return FALSE; if (HasOptionalField(e_capabilityTableEntryNumbers) && !m_capabilityTableEntryNumbers.Decode(strm)) return FALSE; if (HasOptionalField(e_capabilityDescriptorNumbers) && !m_capabilityDescriptorNumbers.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_SendTerminalCapabilitySet_specificRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_multiplexCapability.Encode(strm); if (HasOptionalField(e_capabilityTableEntryNumbers)) m_capabilityTableEntryNumbers.Encode(strm); if (HasOptionalField(e_capabilityDescriptorNumbers)) m_capabilityDescriptorNumbers.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_SendTerminalCapabilitySet_specificRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_SendTerminalCapabilitySet_specificRequest::Class()), PInvalidCast); #endif return new H245_SendTerminalCapabilitySet_specificRequest(*this); } // // EncryptionCommand_encryptionAlgorithmID // H245_EncryptionCommand_encryptionAlgorithmID::H245_EncryptionCommand_encryptionAlgorithmID(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H245_EncryptionCommand_encryptionAlgorithmID::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+26) << "h233AlgorithmIdentifier = " << setprecision(indent) << m_h233AlgorithmIdentifier << '\n'; strm << setw(indent+22) << "associatedAlgorithm = " << setprecision(indent) << m_associatedAlgorithm << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_EncryptionCommand_encryptionAlgorithmID::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_EncryptionCommand_encryptionAlgorithmID), PInvalidCast); #endif const H245_EncryptionCommand_encryptionAlgorithmID & other = (const H245_EncryptionCommand_encryptionAlgorithmID &)obj; Comparison result; if ((result = m_h233AlgorithmIdentifier.Compare(other.m_h233AlgorithmIdentifier)) != EqualTo) return result; if ((result = m_associatedAlgorithm.Compare(other.m_associatedAlgorithm)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_EncryptionCommand_encryptionAlgorithmID::GetDataLength() const { PINDEX length = 0; length += m_h233AlgorithmIdentifier.GetObjectLength(); length += m_associatedAlgorithm.GetObjectLength(); return length; } PBoolean H245_EncryptionCommand_encryptionAlgorithmID::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_h233AlgorithmIdentifier.Decode(strm)) return FALSE; if (!m_associatedAlgorithm.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_EncryptionCommand_encryptionAlgorithmID::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_h233AlgorithmIdentifier.Encode(strm); m_associatedAlgorithm.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_EncryptionCommand_encryptionAlgorithmID::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_EncryptionCommand_encryptionAlgorithmID::Class()), PInvalidCast); #endif return new H245_EncryptionCommand_encryptionAlgorithmID(*this); } // // NewATMVCCommand_reverseParameters // H245_NewATMVCCommand_reverseParameters::H245_NewATMVCCommand_reverseParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_bitRate.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } #ifndef PASN_NOPRINTON void H245_NewATMVCCommand_reverseParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "bitRate = " << setprecision(indent) << m_bitRate << '\n'; strm << setw(indent+26) << "bitRateLockedToPCRClock = " << setprecision(indent) << m_bitRateLockedToPCRClock << '\n'; strm << setw(indent+30) << "bitRateLockedToNetworkClock = " << setprecision(indent) << m_bitRateLockedToNetworkClock << '\n'; strm << setw(indent+12) << "multiplex = " << setprecision(indent) << m_multiplex << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_NewATMVCCommand_reverseParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_NewATMVCCommand_reverseParameters), PInvalidCast); #endif const H245_NewATMVCCommand_reverseParameters & other = (const H245_NewATMVCCommand_reverseParameters &)obj; Comparison result; if ((result = m_bitRate.Compare(other.m_bitRate)) != EqualTo) return result; if ((result = m_bitRateLockedToPCRClock.Compare(other.m_bitRateLockedToPCRClock)) != EqualTo) return result; if ((result = m_bitRateLockedToNetworkClock.Compare(other.m_bitRateLockedToNetworkClock)) != EqualTo) return result; if ((result = m_multiplex.Compare(other.m_multiplex)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_NewATMVCCommand_reverseParameters::GetDataLength() const { PINDEX length = 0; length += m_bitRate.GetObjectLength(); length += m_bitRateLockedToPCRClock.GetObjectLength(); length += m_bitRateLockedToNetworkClock.GetObjectLength(); length += m_multiplex.GetObjectLength(); return length; } PBoolean H245_NewATMVCCommand_reverseParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_bitRate.Decode(strm)) return FALSE; if (!m_bitRateLockedToPCRClock.Decode(strm)) return FALSE; if (!m_bitRateLockedToNetworkClock.Decode(strm)) return FALSE; if (!m_multiplex.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_NewATMVCCommand_reverseParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_bitRate.Encode(strm); m_bitRateLockedToPCRClock.Encode(strm); m_bitRateLockedToNetworkClock.Encode(strm); m_multiplex.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_NewATMVCCommand_reverseParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NewATMVCCommand_reverseParameters::Class()), PInvalidCast); #endif return new H245_NewATMVCCommand_reverseParameters(*this); } // // NewATMVCIndication_reverseParameters // H245_NewATMVCIndication_reverseParameters::H245_NewATMVCIndication_reverseParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_bitRate.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } #ifndef PASN_NOPRINTON void H245_NewATMVCIndication_reverseParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "bitRate = " << setprecision(indent) << m_bitRate << '\n'; strm << setw(indent+26) << "bitRateLockedToPCRClock = " << setprecision(indent) << m_bitRateLockedToPCRClock << '\n'; strm << setw(indent+30) << "bitRateLockedToNetworkClock = " << setprecision(indent) << m_bitRateLockedToNetworkClock << '\n'; strm << setw(indent+12) << "multiplex = " << setprecision(indent) << m_multiplex << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_NewATMVCIndication_reverseParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_NewATMVCIndication_reverseParameters), PInvalidCast); #endif const H245_NewATMVCIndication_reverseParameters & other = (const H245_NewATMVCIndication_reverseParameters &)obj; Comparison result; if ((result = m_bitRate.Compare(other.m_bitRate)) != EqualTo) return result; if ((result = m_bitRateLockedToPCRClock.Compare(other.m_bitRateLockedToPCRClock)) != EqualTo) return result; if ((result = m_bitRateLockedToNetworkClock.Compare(other.m_bitRateLockedToNetworkClock)) != EqualTo) return result; if ((result = m_multiplex.Compare(other.m_multiplex)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_NewATMVCIndication_reverseParameters::GetDataLength() const { PINDEX length = 0; length += m_bitRate.GetObjectLength(); length += m_bitRateLockedToPCRClock.GetObjectLength(); length += m_bitRateLockedToNetworkClock.GetObjectLength(); length += m_multiplex.GetObjectLength(); return length; } PBoolean H245_NewATMVCIndication_reverseParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_bitRate.Decode(strm)) return FALSE; if (!m_bitRateLockedToPCRClock.Decode(strm)) return FALSE; if (!m_bitRateLockedToNetworkClock.Decode(strm)) return FALSE; if (!m_multiplex.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_NewATMVCIndication_reverseParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_bitRate.Encode(strm); m_bitRateLockedToPCRClock.Encode(strm); m_bitRateLockedToNetworkClock.Encode(strm); m_multiplex.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_NewATMVCIndication_reverseParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NewATMVCIndication_reverseParameters::Class()), PInvalidCast); #endif return new H245_NewATMVCIndication_reverseParameters(*this); } // // UserInputIndication_signal // H245_UserInputIndication_signal::H245_UserInputIndication_signal(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 4) { m_signalType.SetConstraints(PASN_Object::FixedConstraint, 1); m_signalType.SetCharacterSet(PASN_Object::FixedConstraint, "0123456789#*ABCD!"); m_duration.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); m_encryptedSignalType.SetConstraints(PASN_Object::FixedConstraint, 1); } #ifndef PASN_NOPRINTON void H245_UserInputIndication_signal::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "signalType = " << setprecision(indent) << m_signalType << '\n'; if (HasOptionalField(e_duration)) strm << setw(indent+11) << "duration = " << setprecision(indent) << m_duration << '\n'; if (HasOptionalField(e_rtp)) strm << setw(indent+6) << "rtp = " << setprecision(indent) << m_rtp << '\n'; if (HasOptionalField(e_rtpPayloadIndication)) strm << setw(indent+23) << "rtpPayloadIndication = " << setprecision(indent) << m_rtpPayloadIndication << '\n'; if (HasOptionalField(e_paramS)) strm << setw(indent+9) << "paramS = " << setprecision(indent) << m_paramS << '\n'; if (HasOptionalField(e_encryptedSignalType)) strm << setw(indent+22) << "encryptedSignalType = " << setprecision(indent) << m_encryptedSignalType << '\n'; if (HasOptionalField(e_algorithmOID)) strm << setw(indent+15) << "algorithmOID = " << setprecision(indent) << m_algorithmOID << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_UserInputIndication_signal::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_UserInputIndication_signal), PInvalidCast); #endif const H245_UserInputIndication_signal & other = (const H245_UserInputIndication_signal &)obj; Comparison result; if ((result = m_signalType.Compare(other.m_signalType)) != EqualTo) return result; if ((result = m_duration.Compare(other.m_duration)) != EqualTo) return result; if ((result = m_rtp.Compare(other.m_rtp)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_UserInputIndication_signal::GetDataLength() const { PINDEX length = 0; length += m_signalType.GetObjectLength(); if (HasOptionalField(e_duration)) length += m_duration.GetObjectLength(); if (HasOptionalField(e_rtp)) length += m_rtp.GetObjectLength(); return length; } PBoolean H245_UserInputIndication_signal::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_signalType.Decode(strm)) return FALSE; if (HasOptionalField(e_duration) && !m_duration.Decode(strm)) return FALSE; if (HasOptionalField(e_rtp) && !m_rtp.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_rtpPayloadIndication, m_rtpPayloadIndication)) return FALSE; if (!KnownExtensionDecode(strm, e_paramS, m_paramS)) return FALSE; if (!KnownExtensionDecode(strm, e_encryptedSignalType, m_encryptedSignalType)) return FALSE; if (!KnownExtensionDecode(strm, e_algorithmOID, m_algorithmOID)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_UserInputIndication_signal::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_signalType.Encode(strm); if (HasOptionalField(e_duration)) m_duration.Encode(strm); if (HasOptionalField(e_rtp)) m_rtp.Encode(strm); KnownExtensionEncode(strm, e_rtpPayloadIndication, m_rtpPayloadIndication); KnownExtensionEncode(strm, e_paramS, m_paramS); KnownExtensionEncode(strm, e_encryptedSignalType, m_encryptedSignalType); KnownExtensionEncode(strm, e_algorithmOID, m_algorithmOID); UnknownExtensionsEncode(strm); } PObject * H245_UserInputIndication_signal::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_UserInputIndication_signal::Class()), PInvalidCast); #endif return new H245_UserInputIndication_signal(*this); } // // UserInputIndication_signalUpdate // H245_UserInputIndication_signalUpdate::H245_UserInputIndication_signalUpdate(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_duration.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } #ifndef PASN_NOPRINTON void H245_UserInputIndication_signalUpdate::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "duration = " << setprecision(indent) << m_duration << '\n'; if (HasOptionalField(e_rtp)) strm << setw(indent+6) << "rtp = " << setprecision(indent) << m_rtp << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_UserInputIndication_signalUpdate::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_UserInputIndication_signalUpdate), PInvalidCast); #endif const H245_UserInputIndication_signalUpdate & other = (const H245_UserInputIndication_signalUpdate &)obj; Comparison result; if ((result = m_duration.Compare(other.m_duration)) != EqualTo) return result; if ((result = m_rtp.Compare(other.m_rtp)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_UserInputIndication_signalUpdate::GetDataLength() const { PINDEX length = 0; length += m_duration.GetObjectLength(); if (HasOptionalField(e_rtp)) length += m_rtp.GetObjectLength(); return length; } PBoolean H245_UserInputIndication_signalUpdate::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_duration.Decode(strm)) return FALSE; if (HasOptionalField(e_rtp) && !m_rtp.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_UserInputIndication_signalUpdate::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_duration.Encode(strm); if (HasOptionalField(e_rtp)) m_rtp.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_UserInputIndication_signalUpdate::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_UserInputIndication_signalUpdate::Class()), PInvalidCast); #endif return new H245_UserInputIndication_signalUpdate(*this); } // // UserInputIndication_extendedAlphanumeric // H245_UserInputIndication_extendedAlphanumeric::H245_UserInputIndication_extendedAlphanumeric(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 1) { } #ifndef PASN_NOPRINTON void H245_UserInputIndication_extendedAlphanumeric::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "alphanumeric = " << setprecision(indent) << m_alphanumeric << '\n'; if (HasOptionalField(e_rtpPayloadIndication)) strm << setw(indent+23) << "rtpPayloadIndication = " << setprecision(indent) << m_rtpPayloadIndication << '\n'; if (HasOptionalField(e_encryptedAlphanumeric)) strm << setw(indent+24) << "encryptedAlphanumeric = " << setprecision(indent) << m_encryptedAlphanumeric << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_UserInputIndication_extendedAlphanumeric::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_UserInputIndication_extendedAlphanumeric), PInvalidCast); #endif const H245_UserInputIndication_extendedAlphanumeric & other = (const H245_UserInputIndication_extendedAlphanumeric &)obj; Comparison result; if ((result = m_alphanumeric.Compare(other.m_alphanumeric)) != EqualTo) return result; if ((result = m_rtpPayloadIndication.Compare(other.m_rtpPayloadIndication)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_UserInputIndication_extendedAlphanumeric::GetDataLength() const { PINDEX length = 0; length += m_alphanumeric.GetObjectLength(); if (HasOptionalField(e_rtpPayloadIndication)) length += m_rtpPayloadIndication.GetObjectLength(); return length; } PBoolean H245_UserInputIndication_extendedAlphanumeric::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_alphanumeric.Decode(strm)) return FALSE; if (HasOptionalField(e_rtpPayloadIndication) && !m_rtpPayloadIndication.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_encryptedAlphanumeric, m_encryptedAlphanumeric)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_UserInputIndication_extendedAlphanumeric::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_alphanumeric.Encode(strm); if (HasOptionalField(e_rtpPayloadIndication)) m_rtpPayloadIndication.Encode(strm); KnownExtensionEncode(strm, e_encryptedAlphanumeric, m_encryptedAlphanumeric); UnknownExtensionsEncode(strm); } PObject * H245_UserInputIndication_extendedAlphanumeric::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_UserInputIndication_extendedAlphanumeric::Class()), PInvalidCast); #endif return new H245_UserInputIndication_extendedAlphanumeric(*this); } // // V76LogicalChannelParameters_mode_eRM // H245_V76LogicalChannelParameters_mode_eRM::H245_V76LogicalChannelParameters_mode_eRM(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_windowSize.SetConstraints(PASN_Object::FixedConstraint, 1, 127); } #ifndef PASN_NOPRINTON void H245_V76LogicalChannelParameters_mode_eRM::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "windowSize = " << setprecision(indent) << m_windowSize << '\n'; strm << setw(indent+11) << "recovery = " << setprecision(indent) << m_recovery << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_V76LogicalChannelParameters_mode_eRM::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_V76LogicalChannelParameters_mode_eRM), PInvalidCast); #endif const H245_V76LogicalChannelParameters_mode_eRM & other = (const H245_V76LogicalChannelParameters_mode_eRM &)obj; Comparison result; if ((result = m_windowSize.Compare(other.m_windowSize)) != EqualTo) return result; if ((result = m_recovery.Compare(other.m_recovery)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_V76LogicalChannelParameters_mode_eRM::GetDataLength() const { PINDEX length = 0; length += m_windowSize.GetObjectLength(); length += m_recovery.GetObjectLength(); return length; } PBoolean H245_V76LogicalChannelParameters_mode_eRM::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_windowSize.Decode(strm)) return FALSE; if (!m_recovery.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_V76LogicalChannelParameters_mode_eRM::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_windowSize.Encode(strm); m_recovery.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_V76LogicalChannelParameters_mode_eRM::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_V76LogicalChannelParameters_mode_eRM::Class()), PInvalidCast); #endif return new H245_V76LogicalChannelParameters_mode_eRM(*this); } // // MiscellaneousCommand_type_progressiveRefinementStart // H245_MiscellaneousCommand_type_progressiveRefinementStart::H245_MiscellaneousCommand_type_progressiveRefinementStart(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MiscellaneousCommand_type_progressiveRefinementStart::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "repeatCount = " << setprecision(indent) << m_repeatCount << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MiscellaneousCommand_type_progressiveRefinementStart::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MiscellaneousCommand_type_progressiveRefinementStart), PInvalidCast); #endif const H245_MiscellaneousCommand_type_progressiveRefinementStart & other = (const H245_MiscellaneousCommand_type_progressiveRefinementStart &)obj; Comparison result; if ((result = m_repeatCount.Compare(other.m_repeatCount)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MiscellaneousCommand_type_progressiveRefinementStart::GetDataLength() const { PINDEX length = 0; length += m_repeatCount.GetObjectLength(); return length; } PBoolean H245_MiscellaneousCommand_type_progressiveRefinementStart::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_repeatCount.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MiscellaneousCommand_type_progressiveRefinementStart::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_repeatCount.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MiscellaneousCommand_type_progressiveRefinementStart::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MiscellaneousCommand_type_progressiveRefinementStart::Class()), PInvalidCast); #endif return new H245_MiscellaneousCommand_type_progressiveRefinementStart(*this); } // // MiscellaneousCommand_type_encryptionUpdateCommand // H245_MiscellaneousCommand_type_encryptionUpdateCommand::H245_MiscellaneousCommand_type_encryptionUpdateCommand(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MiscellaneousCommand_type_encryptionUpdateCommand::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "encryptionSync = " << setprecision(indent) << m_encryptionSync << '\n'; if (HasOptionalField(e_multiplePayloadStream)) strm << setw(indent+24) << "multiplePayloadStream = " << setprecision(indent) << m_multiplePayloadStream << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MiscellaneousCommand_type_encryptionUpdateCommand::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MiscellaneousCommand_type_encryptionUpdateCommand), PInvalidCast); #endif const H245_MiscellaneousCommand_type_encryptionUpdateCommand & other = (const H245_MiscellaneousCommand_type_encryptionUpdateCommand &)obj; Comparison result; if ((result = m_encryptionSync.Compare(other.m_encryptionSync)) != EqualTo) return result; if ((result = m_multiplePayloadStream.Compare(other.m_multiplePayloadStream)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MiscellaneousCommand_type_encryptionUpdateCommand::GetDataLength() const { PINDEX length = 0; length += m_encryptionSync.GetObjectLength(); if (HasOptionalField(e_multiplePayloadStream)) length += m_multiplePayloadStream.GetObjectLength(); return length; } PBoolean H245_MiscellaneousCommand_type_encryptionUpdateCommand::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_encryptionSync.Decode(strm)) return FALSE; if (HasOptionalField(e_multiplePayloadStream) && !m_multiplePayloadStream.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MiscellaneousCommand_type_encryptionUpdateCommand::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_encryptionSync.Encode(strm); if (HasOptionalField(e_multiplePayloadStream)) m_multiplePayloadStream.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MiscellaneousCommand_type_encryptionUpdateCommand::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MiscellaneousCommand_type_encryptionUpdateCommand::Class()), PInvalidCast); #endif return new H245_MiscellaneousCommand_type_encryptionUpdateCommand(*this); } // // NewATMVCCommand_aal_aal1 // H245_NewATMVCCommand_aal_aal1::H245_NewATMVCCommand_aal_aal1(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_NewATMVCCommand_aal_aal1::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "clockRecovery = " << setprecision(indent) << m_clockRecovery << '\n'; strm << setw(indent+18) << "errorCorrection = " << setprecision(indent) << m_errorCorrection << '\n'; strm << setw(indent+25) << "structuredDataTransfer = " << setprecision(indent) << m_structuredDataTransfer << '\n'; strm << setw(indent+23) << "partiallyFilledCells = " << setprecision(indent) << m_partiallyFilledCells << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_NewATMVCCommand_aal_aal1::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_NewATMVCCommand_aal_aal1), PInvalidCast); #endif const H245_NewATMVCCommand_aal_aal1 & other = (const H245_NewATMVCCommand_aal_aal1 &)obj; Comparison result; if ((result = m_clockRecovery.Compare(other.m_clockRecovery)) != EqualTo) return result; if ((result = m_errorCorrection.Compare(other.m_errorCorrection)) != EqualTo) return result; if ((result = m_structuredDataTransfer.Compare(other.m_structuredDataTransfer)) != EqualTo) return result; if ((result = m_partiallyFilledCells.Compare(other.m_partiallyFilledCells)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_NewATMVCCommand_aal_aal1::GetDataLength() const { PINDEX length = 0; length += m_clockRecovery.GetObjectLength(); length += m_errorCorrection.GetObjectLength(); length += m_structuredDataTransfer.GetObjectLength(); length += m_partiallyFilledCells.GetObjectLength(); return length; } PBoolean H245_NewATMVCCommand_aal_aal1::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_clockRecovery.Decode(strm)) return FALSE; if (!m_errorCorrection.Decode(strm)) return FALSE; if (!m_structuredDataTransfer.Decode(strm)) return FALSE; if (!m_partiallyFilledCells.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_NewATMVCCommand_aal_aal1::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_clockRecovery.Encode(strm); m_errorCorrection.Encode(strm); m_structuredDataTransfer.Encode(strm); m_partiallyFilledCells.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_NewATMVCCommand_aal_aal1::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NewATMVCCommand_aal_aal1::Class()), PInvalidCast); #endif return new H245_NewATMVCCommand_aal_aal1(*this); } // // NewATMVCIndication_aal_aal1 // H245_NewATMVCIndication_aal_aal1::H245_NewATMVCIndication_aal_aal1(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_NewATMVCIndication_aal_aal1::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "clockRecovery = " << setprecision(indent) << m_clockRecovery << '\n'; strm << setw(indent+18) << "errorCorrection = " << setprecision(indent) << m_errorCorrection << '\n'; strm << setw(indent+25) << "structuredDataTransfer = " << setprecision(indent) << m_structuredDataTransfer << '\n'; strm << setw(indent+23) << "partiallyFilledCells = " << setprecision(indent) << m_partiallyFilledCells << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_NewATMVCIndication_aal_aal1::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_NewATMVCIndication_aal_aal1), PInvalidCast); #endif const H245_NewATMVCIndication_aal_aal1 & other = (const H245_NewATMVCIndication_aal_aal1 &)obj; Comparison result; if ((result = m_clockRecovery.Compare(other.m_clockRecovery)) != EqualTo) return result; if ((result = m_errorCorrection.Compare(other.m_errorCorrection)) != EqualTo) return result; if ((result = m_structuredDataTransfer.Compare(other.m_structuredDataTransfer)) != EqualTo) return result; if ((result = m_partiallyFilledCells.Compare(other.m_partiallyFilledCells)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_NewATMVCIndication_aal_aal1::GetDataLength() const { PINDEX length = 0; length += m_clockRecovery.GetObjectLength(); length += m_errorCorrection.GetObjectLength(); length += m_structuredDataTransfer.GetObjectLength(); length += m_partiallyFilledCells.GetObjectLength(); return length; } PBoolean H245_NewATMVCIndication_aal_aal1::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_clockRecovery.Decode(strm)) return FALSE; if (!m_errorCorrection.Decode(strm)) return FALSE; if (!m_structuredDataTransfer.Decode(strm)) return FALSE; if (!m_partiallyFilledCells.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_NewATMVCIndication_aal_aal1::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_clockRecovery.Encode(strm); m_errorCorrection.Encode(strm); m_structuredDataTransfer.Encode(strm); m_partiallyFilledCells.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_NewATMVCIndication_aal_aal1::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NewATMVCIndication_aal_aal1::Class()), PInvalidCast); #endif return new H245_NewATMVCIndication_aal_aal1(*this); } // // NonStandardMessage // H245_NonStandardMessage::H245_NonStandardMessage(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_NonStandardMessage::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_NonStandardMessage::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_NonStandardMessage), PInvalidCast); #endif const H245_NonStandardMessage & other = (const H245_NonStandardMessage &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_NonStandardMessage::GetDataLength() const { PINDEX length = 0; length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H245_NonStandardMessage::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nonStandardData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_NonStandardMessage::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nonStandardData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_NonStandardMessage::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NonStandardMessage::Class()), PInvalidCast); #endif return new H245_NonStandardMessage(*this); } // // VCCapability // H245_VCCapability::H245_VCCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 1) { } #ifndef PASN_NOPRINTON void H245_VCCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_aal1)) strm << setw(indent+7) << "aal1 = " << setprecision(indent) << m_aal1 << '\n'; if (HasOptionalField(e_aal5)) strm << setw(indent+7) << "aal5 = " << setprecision(indent) << m_aal5 << '\n'; strm << setw(indent+18) << "transportStream = " << setprecision(indent) << m_transportStream << '\n'; strm << setw(indent+16) << "programStream = " << setprecision(indent) << m_programStream << '\n'; strm << setw(indent+20) << "availableBitRates = " << setprecision(indent) << m_availableBitRates << '\n'; if (HasOptionalField(e_aal1ViaGateway)) strm << setw(indent+17) << "aal1ViaGateway = " << setprecision(indent) << m_aal1ViaGateway << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_VCCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_VCCapability), PInvalidCast); #endif const H245_VCCapability & other = (const H245_VCCapability &)obj; Comparison result; if ((result = m_aal1.Compare(other.m_aal1)) != EqualTo) return result; if ((result = m_aal5.Compare(other.m_aal5)) != EqualTo) return result; if ((result = m_transportStream.Compare(other.m_transportStream)) != EqualTo) return result; if ((result = m_programStream.Compare(other.m_programStream)) != EqualTo) return result; if ((result = m_availableBitRates.Compare(other.m_availableBitRates)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_VCCapability::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_aal1)) length += m_aal1.GetObjectLength(); if (HasOptionalField(e_aal5)) length += m_aal5.GetObjectLength(); length += m_transportStream.GetObjectLength(); length += m_programStream.GetObjectLength(); length += m_availableBitRates.GetObjectLength(); return length; } PBoolean H245_VCCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_aal1) && !m_aal1.Decode(strm)) return FALSE; if (HasOptionalField(e_aal5) && !m_aal5.Decode(strm)) return FALSE; if (!m_transportStream.Decode(strm)) return FALSE; if (!m_programStream.Decode(strm)) return FALSE; if (!m_availableBitRates.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_aal1ViaGateway, m_aal1ViaGateway)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_VCCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_aal1)) m_aal1.Encode(strm); if (HasOptionalField(e_aal5)) m_aal5.Encode(strm); m_transportStream.Encode(strm); m_programStream.Encode(strm); m_availableBitRates.Encode(strm); KnownExtensionEncode(strm, e_aal1ViaGateway, m_aal1ViaGateway); UnknownExtensionsEncode(strm); } PObject * H245_VCCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_VCCapability::Class()), PInvalidCast); #endif return new H245_VCCapability(*this); } // // H2250Capability // H245_H2250Capability::H245_H2250Capability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 4) { m_maximumAudioDelayJitter.SetConstraints(PASN_Object::FixedConstraint, 0, 1023); m_redundancyEncodingCapability.SetConstraints(PASN_Object::FixedConstraint, 1, 256); IncludeOptionalField(e_logicalChannelSwitchingCapability); IncludeOptionalField(e_t120DynamicPortCapability); } #ifndef PASN_NOPRINTON void H245_H2250Capability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+26) << "maximumAudioDelayJitter = " << setprecision(indent) << m_maximumAudioDelayJitter << '\n'; strm << setw(indent+30) << "receiveMultipointCapability = " << setprecision(indent) << m_receiveMultipointCapability << '\n'; strm << setw(indent+31) << "transmitMultipointCapability = " << setprecision(indent) << m_transmitMultipointCapability << '\n'; strm << setw(indent+41) << "receiveAndTransmitMultipointCapability = " << setprecision(indent) << m_receiveAndTransmitMultipointCapability << '\n'; strm << setw(indent+15) << "mcCapability = " << setprecision(indent) << m_mcCapability << '\n'; strm << setw(indent+29) << "rtcpVideoControlCapability = " << setprecision(indent) << m_rtcpVideoControlCapability << '\n'; strm << setw(indent+31) << "mediaPacketizationCapability = " << setprecision(indent) << m_mediaPacketizationCapability << '\n'; if (HasOptionalField(e_transportCapability)) strm << setw(indent+22) << "transportCapability = " << setprecision(indent) << m_transportCapability << '\n'; if (HasOptionalField(e_redundancyEncodingCapability)) strm << setw(indent+31) << "redundancyEncodingCapability = " << setprecision(indent) << m_redundancyEncodingCapability << '\n'; if (HasOptionalField(e_logicalChannelSwitchingCapability)) strm << setw(indent+36) << "logicalChannelSwitchingCapability = " << setprecision(indent) << m_logicalChannelSwitchingCapability << '\n'; if (HasOptionalField(e_t120DynamicPortCapability)) strm << setw(indent+28) << "t120DynamicPortCapability = " << setprecision(indent) << m_t120DynamicPortCapability << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H2250Capability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H2250Capability), PInvalidCast); #endif const H245_H2250Capability & other = (const H245_H2250Capability &)obj; Comparison result; if ((result = m_maximumAudioDelayJitter.Compare(other.m_maximumAudioDelayJitter)) != EqualTo) return result; if ((result = m_receiveMultipointCapability.Compare(other.m_receiveMultipointCapability)) != EqualTo) return result; if ((result = m_transmitMultipointCapability.Compare(other.m_transmitMultipointCapability)) != EqualTo) return result; if ((result = m_receiveAndTransmitMultipointCapability.Compare(other.m_receiveAndTransmitMultipointCapability)) != EqualTo) return result; if ((result = m_mcCapability.Compare(other.m_mcCapability)) != EqualTo) return result; if ((result = m_rtcpVideoControlCapability.Compare(other.m_rtcpVideoControlCapability)) != EqualTo) return result; if ((result = m_mediaPacketizationCapability.Compare(other.m_mediaPacketizationCapability)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H2250Capability::GetDataLength() const { PINDEX length = 0; length += m_maximumAudioDelayJitter.GetObjectLength(); length += m_receiveMultipointCapability.GetObjectLength(); length += m_transmitMultipointCapability.GetObjectLength(); length += m_receiveAndTransmitMultipointCapability.GetObjectLength(); length += m_mcCapability.GetObjectLength(); length += m_rtcpVideoControlCapability.GetObjectLength(); length += m_mediaPacketizationCapability.GetObjectLength(); return length; } PBoolean H245_H2250Capability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_maximumAudioDelayJitter.Decode(strm)) return FALSE; if (!m_receiveMultipointCapability.Decode(strm)) return FALSE; if (!m_transmitMultipointCapability.Decode(strm)) return FALSE; if (!m_receiveAndTransmitMultipointCapability.Decode(strm)) return FALSE; if (!m_mcCapability.Decode(strm)) return FALSE; if (!m_rtcpVideoControlCapability.Decode(strm)) return FALSE; if (!m_mediaPacketizationCapability.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_transportCapability, m_transportCapability)) return FALSE; if (!KnownExtensionDecode(strm, e_redundancyEncodingCapability, m_redundancyEncodingCapability)) return FALSE; if (!KnownExtensionDecode(strm, e_logicalChannelSwitchingCapability, m_logicalChannelSwitchingCapability)) return FALSE; if (!KnownExtensionDecode(strm, e_t120DynamicPortCapability, m_t120DynamicPortCapability)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H2250Capability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_maximumAudioDelayJitter.Encode(strm); m_receiveMultipointCapability.Encode(strm); m_transmitMultipointCapability.Encode(strm); m_receiveAndTransmitMultipointCapability.Encode(strm); m_mcCapability.Encode(strm); m_rtcpVideoControlCapability.Encode(strm); m_mediaPacketizationCapability.Encode(strm); KnownExtensionEncode(strm, e_transportCapability, m_transportCapability); KnownExtensionEncode(strm, e_redundancyEncodingCapability, m_redundancyEncodingCapability); KnownExtensionEncode(strm, e_logicalChannelSwitchingCapability, m_logicalChannelSwitchingCapability); KnownExtensionEncode(strm, e_t120DynamicPortCapability, m_t120DynamicPortCapability); UnknownExtensionsEncode(strm); } PObject * H245_H2250Capability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H2250Capability::Class()), PInvalidCast); #endif return new H245_H2250Capability(*this); } // // RefPictureSelection // H245_RefPictureSelection::H245_RefPictureSelection(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 1) { IncludeOptionalField(e_enhancedReferencePicSelect); } #ifndef PASN_NOPRINTON void H245_RefPictureSelection::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_additionalPictureMemory)) strm << setw(indent+26) << "additionalPictureMemory = " << setprecision(indent) << m_additionalPictureMemory << '\n'; strm << setw(indent+11) << "videoMux = " << setprecision(indent) << m_videoMux << '\n'; strm << setw(indent+23) << "videoBackChannelSend = " << setprecision(indent) << m_videoBackChannelSend << '\n'; if (HasOptionalField(e_enhancedReferencePicSelect)) strm << setw(indent+29) << "enhancedReferencePicSelect = " << setprecision(indent) << m_enhancedReferencePicSelect << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RefPictureSelection::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RefPictureSelection), PInvalidCast); #endif const H245_RefPictureSelection & other = (const H245_RefPictureSelection &)obj; Comparison result; if ((result = m_additionalPictureMemory.Compare(other.m_additionalPictureMemory)) != EqualTo) return result; if ((result = m_videoMux.Compare(other.m_videoMux)) != EqualTo) return result; if ((result = m_videoBackChannelSend.Compare(other.m_videoBackChannelSend)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RefPictureSelection::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_additionalPictureMemory)) length += m_additionalPictureMemory.GetObjectLength(); length += m_videoMux.GetObjectLength(); length += m_videoBackChannelSend.GetObjectLength(); return length; } PBoolean H245_RefPictureSelection::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_additionalPictureMemory) && !m_additionalPictureMemory.Decode(strm)) return FALSE; if (!m_videoMux.Decode(strm)) return FALSE; if (!m_videoBackChannelSend.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_enhancedReferencePicSelect, m_enhancedReferencePicSelect)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RefPictureSelection::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_additionalPictureMemory)) m_additionalPictureMemory.Encode(strm); m_videoMux.Encode(strm); m_videoBackChannelSend.Encode(strm); KnownExtensionEncode(strm, e_enhancedReferencePicSelect, m_enhancedReferencePicSelect); UnknownExtensionsEncode(strm); } PObject * H245_RefPictureSelection::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RefPictureSelection::Class()), PInvalidCast); #endif return new H245_RefPictureSelection(*this); } // // CustomPictureFormat // H245_CustomPictureFormat::H245_CustomPictureFormat(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_maxCustomPictureWidth.SetConstraints(PASN_Object::FixedConstraint, 1, 2048); m_maxCustomPictureHeight.SetConstraints(PASN_Object::FixedConstraint, 1, 2048); m_minCustomPictureWidth.SetConstraints(PASN_Object::FixedConstraint, 1, 2048); m_minCustomPictureHeight.SetConstraints(PASN_Object::FixedConstraint, 1, 2048); } #ifndef PASN_NOPRINTON void H245_CustomPictureFormat::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "maxCustomPictureWidth = " << setprecision(indent) << m_maxCustomPictureWidth << '\n'; strm << setw(indent+25) << "maxCustomPictureHeight = " << setprecision(indent) << m_maxCustomPictureHeight << '\n'; strm << setw(indent+24) << "minCustomPictureWidth = " << setprecision(indent) << m_minCustomPictureWidth << '\n'; strm << setw(indent+25) << "minCustomPictureHeight = " << setprecision(indent) << m_minCustomPictureHeight << '\n'; strm << setw(indent+6) << "mPI = " << setprecision(indent) << m_mPI << '\n'; strm << setw(indent+25) << "pixelAspectInformation = " << setprecision(indent) << m_pixelAspectInformation << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_CustomPictureFormat::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_CustomPictureFormat), PInvalidCast); #endif const H245_CustomPictureFormat & other = (const H245_CustomPictureFormat &)obj; Comparison result; if ((result = m_maxCustomPictureWidth.Compare(other.m_maxCustomPictureWidth)) != EqualTo) return result; if ((result = m_maxCustomPictureHeight.Compare(other.m_maxCustomPictureHeight)) != EqualTo) return result; if ((result = m_minCustomPictureWidth.Compare(other.m_minCustomPictureWidth)) != EqualTo) return result; if ((result = m_minCustomPictureHeight.Compare(other.m_minCustomPictureHeight)) != EqualTo) return result; if ((result = m_mPI.Compare(other.m_mPI)) != EqualTo) return result; if ((result = m_pixelAspectInformation.Compare(other.m_pixelAspectInformation)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_CustomPictureFormat::GetDataLength() const { PINDEX length = 0; length += m_maxCustomPictureWidth.GetObjectLength(); length += m_maxCustomPictureHeight.GetObjectLength(); length += m_minCustomPictureWidth.GetObjectLength(); length += m_minCustomPictureHeight.GetObjectLength(); length += m_mPI.GetObjectLength(); length += m_pixelAspectInformation.GetObjectLength(); return length; } PBoolean H245_CustomPictureFormat::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_maxCustomPictureWidth.Decode(strm)) return FALSE; if (!m_maxCustomPictureHeight.Decode(strm)) return FALSE; if (!m_minCustomPictureWidth.Decode(strm)) return FALSE; if (!m_minCustomPictureHeight.Decode(strm)) return FALSE; if (!m_mPI.Decode(strm)) return FALSE; if (!m_pixelAspectInformation.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_CustomPictureFormat::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_maxCustomPictureWidth.Encode(strm); m_maxCustomPictureHeight.Encode(strm); m_minCustomPictureWidth.Encode(strm); m_minCustomPictureHeight.Encode(strm); m_mPI.Encode(strm); m_pixelAspectInformation.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_CustomPictureFormat::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CustomPictureFormat::Class()), PInvalidCast); #endif return new H245_CustomPictureFormat(*this); } // // H263VideoModeCombos // H245_H263VideoModeCombos::H245_H263VideoModeCombos(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_h263VideoCoupledModes.SetConstraints(PASN_Object::FixedConstraint, 1, 16); } #ifndef PASN_NOPRINTON void H245_H263VideoModeCombos::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+26) << "h263VideoUncoupledModes = " << setprecision(indent) << m_h263VideoUncoupledModes << '\n'; strm << setw(indent+24) << "h263VideoCoupledModes = " << setprecision(indent) << m_h263VideoCoupledModes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H263VideoModeCombos::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H263VideoModeCombos), PInvalidCast); #endif const H245_H263VideoModeCombos & other = (const H245_H263VideoModeCombos &)obj; Comparison result; if ((result = m_h263VideoUncoupledModes.Compare(other.m_h263VideoUncoupledModes)) != EqualTo) return result; if ((result = m_h263VideoCoupledModes.Compare(other.m_h263VideoCoupledModes)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H263VideoModeCombos::GetDataLength() const { PINDEX length = 0; length += m_h263VideoUncoupledModes.GetObjectLength(); length += m_h263VideoCoupledModes.GetObjectLength(); return length; } PBoolean H245_H263VideoModeCombos::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_h263VideoUncoupledModes.Decode(strm)) return FALSE; if (!m_h263VideoCoupledModes.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H263VideoModeCombos::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_h263VideoUncoupledModes.Encode(strm); m_h263VideoCoupledModes.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H263VideoModeCombos::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H263VideoModeCombos::Class()), PInvalidCast); #endif return new H245_H263VideoModeCombos(*this); } // // T38FaxProfile // H245_T38FaxProfile::H245_T38FaxProfile(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 4) { m_version.SetConstraints(PASN_Object::FixedConstraint, 0, 255); IncludeOptionalField(e_version); IncludeOptionalField(e_t38FaxRateManagement); } #ifndef PASN_NOPRINTON void H245_T38FaxProfile::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "fillBitRemoval = " << setprecision(indent) << m_fillBitRemoval << '\n'; strm << setw(indent+18) << "transcodingJBIG = " << setprecision(indent) << m_transcodingJBIG << '\n'; strm << setw(indent+17) << "transcodingMMR = " << setprecision(indent) << m_transcodingMMR << '\n'; if (HasOptionalField(e_version)) strm << setw(indent+10) << "version = " << setprecision(indent) << m_version << '\n'; if (HasOptionalField(e_t38FaxRateManagement)) strm << setw(indent+23) << "t38FaxRateManagement = " << setprecision(indent) << m_t38FaxRateManagement << '\n'; if (HasOptionalField(e_t38FaxUdpOptions)) strm << setw(indent+19) << "t38FaxUdpOptions = " << setprecision(indent) << m_t38FaxUdpOptions << '\n'; if (HasOptionalField(e_t38FaxTcpOptions)) strm << setw(indent+19) << "t38FaxTcpOptions = " << setprecision(indent) << m_t38FaxTcpOptions << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_T38FaxProfile::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_T38FaxProfile), PInvalidCast); #endif const H245_T38FaxProfile & other = (const H245_T38FaxProfile &)obj; Comparison result; if ((result = m_fillBitRemoval.Compare(other.m_fillBitRemoval)) != EqualTo) return result; if ((result = m_transcodingJBIG.Compare(other.m_transcodingJBIG)) != EqualTo) return result; if ((result = m_transcodingMMR.Compare(other.m_transcodingMMR)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_T38FaxProfile::GetDataLength() const { PINDEX length = 0; length += m_fillBitRemoval.GetObjectLength(); length += m_transcodingJBIG.GetObjectLength(); length += m_transcodingMMR.GetObjectLength(); return length; } PBoolean H245_T38FaxProfile::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_fillBitRemoval.Decode(strm)) return FALSE; if (!m_transcodingJBIG.Decode(strm)) return FALSE; if (!m_transcodingMMR.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_version, m_version)) return FALSE; if (!KnownExtensionDecode(strm, e_t38FaxRateManagement, m_t38FaxRateManagement)) return FALSE; if (!KnownExtensionDecode(strm, e_t38FaxUdpOptions, m_t38FaxUdpOptions)) return FALSE; if (!KnownExtensionDecode(strm, e_t38FaxTcpOptions, m_t38FaxTcpOptions)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_T38FaxProfile::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_fillBitRemoval.Encode(strm); m_transcodingJBIG.Encode(strm); m_transcodingMMR.Encode(strm); KnownExtensionEncode(strm, e_version, m_version); KnownExtensionEncode(strm, e_t38FaxRateManagement, m_t38FaxRateManagement); KnownExtensionEncode(strm, e_t38FaxUdpOptions, m_t38FaxUdpOptions); KnownExtensionEncode(strm, e_t38FaxTcpOptions, m_t38FaxTcpOptions); UnknownExtensionsEncode(strm); } PObject * H245_T38FaxProfile::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_T38FaxProfile::Class()), PInvalidCast); #endif return new H245_T38FaxProfile(*this); } // // EncryptionAuthenticationAndIntegrity // H245_EncryptionAuthenticationAndIntegrity::H245_EncryptionAuthenticationAndIntegrity(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 1) { } #ifndef PASN_NOPRINTON void H245_EncryptionAuthenticationAndIntegrity::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_encryptionCapability)) strm << setw(indent+23) << "encryptionCapability = " << setprecision(indent) << m_encryptionCapability << '\n'; if (HasOptionalField(e_authenticationCapability)) strm << setw(indent+27) << "authenticationCapability = " << setprecision(indent) << m_authenticationCapability << '\n'; if (HasOptionalField(e_integrityCapability)) strm << setw(indent+22) << "integrityCapability = " << setprecision(indent) << m_integrityCapability << '\n'; if (HasOptionalField(e_genericH235SecurityCapability)) strm << setw(indent+32) << "genericH235SecurityCapability = " << setprecision(indent) << m_genericH235SecurityCapability << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_EncryptionAuthenticationAndIntegrity::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_EncryptionAuthenticationAndIntegrity), PInvalidCast); #endif const H245_EncryptionAuthenticationAndIntegrity & other = (const H245_EncryptionAuthenticationAndIntegrity &)obj; Comparison result; if ((result = m_encryptionCapability.Compare(other.m_encryptionCapability)) != EqualTo) return result; if ((result = m_authenticationCapability.Compare(other.m_authenticationCapability)) != EqualTo) return result; if ((result = m_integrityCapability.Compare(other.m_integrityCapability)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_EncryptionAuthenticationAndIntegrity::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_encryptionCapability)) length += m_encryptionCapability.GetObjectLength(); if (HasOptionalField(e_authenticationCapability)) length += m_authenticationCapability.GetObjectLength(); if (HasOptionalField(e_integrityCapability)) length += m_integrityCapability.GetObjectLength(); return length; } PBoolean H245_EncryptionAuthenticationAndIntegrity::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_encryptionCapability) && !m_encryptionCapability.Decode(strm)) return FALSE; if (HasOptionalField(e_authenticationCapability) && !m_authenticationCapability.Decode(strm)) return FALSE; if (HasOptionalField(e_integrityCapability) && !m_integrityCapability.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_genericH235SecurityCapability, m_genericH235SecurityCapability)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_EncryptionAuthenticationAndIntegrity::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_encryptionCapability)) m_encryptionCapability.Encode(strm); if (HasOptionalField(e_authenticationCapability)) m_authenticationCapability.Encode(strm); if (HasOptionalField(e_integrityCapability)) m_integrityCapability.Encode(strm); KnownExtensionEncode(strm, e_genericH235SecurityCapability, m_genericH235SecurityCapability); UnknownExtensionsEncode(strm); } PObject * H245_EncryptionAuthenticationAndIntegrity::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_EncryptionAuthenticationAndIntegrity::Class()), PInvalidCast); #endif return new H245_EncryptionAuthenticationAndIntegrity(*this); } // // OpenLogicalChannel // H245_OpenLogicalChannel::H245_OpenLogicalChannel(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 3) { } #ifndef PASN_NOPRINTON void H245_OpenLogicalChannel::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+30) << "forwardLogicalChannelNumber = " << setprecision(indent) << m_forwardLogicalChannelNumber << '\n'; strm << setw(indent+34) << "forwardLogicalChannelParameters = " << setprecision(indent) << m_forwardLogicalChannelParameters << '\n'; if (HasOptionalField(e_reverseLogicalChannelParameters)) strm << setw(indent+34) << "reverseLogicalChannelParameters = " << setprecision(indent) << m_reverseLogicalChannelParameters << '\n'; if (HasOptionalField(e_separateStack)) strm << setw(indent+16) << "separateStack = " << setprecision(indent) << m_separateStack << '\n'; if (HasOptionalField(e_encryptionSync)) strm << setw(indent+17) << "encryptionSync = " << setprecision(indent) << m_encryptionSync << '\n'; if (HasOptionalField(e_genericInformation)) strm << setw(indent+21) << "genericInformation = " << setprecision(indent) << m_genericInformation << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_OpenLogicalChannel::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_OpenLogicalChannel), PInvalidCast); #endif const H245_OpenLogicalChannel & other = (const H245_OpenLogicalChannel &)obj; Comparison result; if ((result = m_forwardLogicalChannelNumber.Compare(other.m_forwardLogicalChannelNumber)) != EqualTo) return result; if ((result = m_forwardLogicalChannelParameters.Compare(other.m_forwardLogicalChannelParameters)) != EqualTo) return result; if ((result = m_reverseLogicalChannelParameters.Compare(other.m_reverseLogicalChannelParameters)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_OpenLogicalChannel::GetDataLength() const { PINDEX length = 0; length += m_forwardLogicalChannelNumber.GetObjectLength(); length += m_forwardLogicalChannelParameters.GetObjectLength(); if (HasOptionalField(e_reverseLogicalChannelParameters)) length += m_reverseLogicalChannelParameters.GetObjectLength(); return length; } PBoolean H245_OpenLogicalChannel::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_forwardLogicalChannelNumber.Decode(strm)) return FALSE; if (!m_forwardLogicalChannelParameters.Decode(strm)) return FALSE; if (HasOptionalField(e_reverseLogicalChannelParameters) && !m_reverseLogicalChannelParameters.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_separateStack, m_separateStack)) return FALSE; if (!KnownExtensionDecode(strm, e_encryptionSync, m_encryptionSync)) return FALSE; if (!KnownExtensionDecode(strm, e_genericInformation, m_genericInformation)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_OpenLogicalChannel::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_forwardLogicalChannelNumber.Encode(strm); m_forwardLogicalChannelParameters.Encode(strm); if (HasOptionalField(e_reverseLogicalChannelParameters)) m_reverseLogicalChannelParameters.Encode(strm); KnownExtensionEncode(strm, e_separateStack, m_separateStack); KnownExtensionEncode(strm, e_encryptionSync, m_encryptionSync); KnownExtensionEncode(strm, e_genericInformation, m_genericInformation); UnknownExtensionsEncode(strm); } PObject * H245_OpenLogicalChannel::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_OpenLogicalChannel::Class()), PInvalidCast); #endif return new H245_OpenLogicalChannel(*this); } // // H235Media // H245_H235Media::H245_H235Media(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_H235Media::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+39) << "encryptionAuthenticationAndIntegrity = " << setprecision(indent) << m_encryptionAuthenticationAndIntegrity << '\n'; strm << setw(indent+12) << "mediaType = " << setprecision(indent) << m_mediaType << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H235Media::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H235Media), PInvalidCast); #endif const H245_H235Media & other = (const H245_H235Media &)obj; Comparison result; if ((result = m_encryptionAuthenticationAndIntegrity.Compare(other.m_encryptionAuthenticationAndIntegrity)) != EqualTo) return result; if ((result = m_mediaType.Compare(other.m_mediaType)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H235Media::GetDataLength() const { PINDEX length = 0; length += m_encryptionAuthenticationAndIntegrity.GetObjectLength(); length += m_mediaType.GetObjectLength(); return length; } PBoolean H245_H235Media::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_encryptionAuthenticationAndIntegrity.Decode(strm)) return FALSE; if (!m_mediaType.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H235Media::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_encryptionAuthenticationAndIntegrity.Encode(strm); m_mediaType.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H235Media::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H235Media::Class()), PInvalidCast); #endif return new H245_H235Media(*this); } // // V76LogicalChannelParameters // H245_V76LogicalChannelParameters::H245_V76LogicalChannelParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_V76LogicalChannelParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "hdlcParameters = " << setprecision(indent) << m_hdlcParameters << '\n'; strm << setw(indent+16) << "suspendResume = " << setprecision(indent) << m_suspendResume << '\n'; strm << setw(indent+6) << "uIH = " << setprecision(indent) << m_uIH << '\n'; strm << setw(indent+7) << "mode = " << setprecision(indent) << m_mode << '\n'; strm << setw(indent+16) << "v75Parameters = " << setprecision(indent) << m_v75Parameters << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_V76LogicalChannelParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_V76LogicalChannelParameters), PInvalidCast); #endif const H245_V76LogicalChannelParameters & other = (const H245_V76LogicalChannelParameters &)obj; Comparison result; if ((result = m_hdlcParameters.Compare(other.m_hdlcParameters)) != EqualTo) return result; if ((result = m_suspendResume.Compare(other.m_suspendResume)) != EqualTo) return result; if ((result = m_uIH.Compare(other.m_uIH)) != EqualTo) return result; if ((result = m_mode.Compare(other.m_mode)) != EqualTo) return result; if ((result = m_v75Parameters.Compare(other.m_v75Parameters)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_V76LogicalChannelParameters::GetDataLength() const { PINDEX length = 0; length += m_hdlcParameters.GetObjectLength(); length += m_suspendResume.GetObjectLength(); length += m_uIH.GetObjectLength(); length += m_mode.GetObjectLength(); length += m_v75Parameters.GetObjectLength(); return length; } PBoolean H245_V76LogicalChannelParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_hdlcParameters.Decode(strm)) return FALSE; if (!m_suspendResume.Decode(strm)) return FALSE; if (!m_uIH.Decode(strm)) return FALSE; if (!m_mode.Decode(strm)) return FALSE; if (!m_v75Parameters.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_V76LogicalChannelParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_hdlcParameters.Encode(strm); m_suspendResume.Encode(strm); m_uIH.Encode(strm); m_mode.Encode(strm); m_v75Parameters.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_V76LogicalChannelParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_V76LogicalChannelParameters::Class()), PInvalidCast); #endif return new H245_V76LogicalChannelParameters(*this); } // // RedundancyEncoding // H245_RedundancyEncoding::H245_RedundancyEncoding(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 1) { } #ifndef PASN_NOPRINTON void H245_RedundancyEncoding::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+27) << "redundancyEncodingMethod = " << setprecision(indent) << m_redundancyEncodingMethod << '\n'; if (HasOptionalField(e_secondaryEncoding)) strm << setw(indent+20) << "secondaryEncoding = " << setprecision(indent) << m_secondaryEncoding << '\n'; if (HasOptionalField(e_rtpRedundancyEncoding)) strm << setw(indent+24) << "rtpRedundancyEncoding = " << setprecision(indent) << m_rtpRedundancyEncoding << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RedundancyEncoding::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RedundancyEncoding), PInvalidCast); #endif const H245_RedundancyEncoding & other = (const H245_RedundancyEncoding &)obj; Comparison result; if ((result = m_redundancyEncodingMethod.Compare(other.m_redundancyEncodingMethod)) != EqualTo) return result; if ((result = m_secondaryEncoding.Compare(other.m_secondaryEncoding)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RedundancyEncoding::GetDataLength() const { PINDEX length = 0; length += m_redundancyEncodingMethod.GetObjectLength(); if (HasOptionalField(e_secondaryEncoding)) length += m_secondaryEncoding.GetObjectLength(); return length; } PBoolean H245_RedundancyEncoding::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_redundancyEncodingMethod.Decode(strm)) return FALSE; if (HasOptionalField(e_secondaryEncoding) && !m_secondaryEncoding.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_rtpRedundancyEncoding, m_rtpRedundancyEncoding)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RedundancyEncoding::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_redundancyEncodingMethod.Encode(strm); if (HasOptionalField(e_secondaryEncoding)) m_secondaryEncoding.Encode(strm); KnownExtensionEncode(strm, e_rtpRedundancyEncoding, m_rtpRedundancyEncoding); UnknownExtensionsEncode(strm); } PObject * H245_RedundancyEncoding::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RedundancyEncoding::Class()), PInvalidCast); #endif return new H245_RedundancyEncoding(*this); } // // OpenLogicalChannelAck // H245_OpenLogicalChannelAck::H245_OpenLogicalChannelAck(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 4) { } #ifndef PASN_NOPRINTON void H245_OpenLogicalChannelAck::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+30) << "forwardLogicalChannelNumber = " << setprecision(indent) << m_forwardLogicalChannelNumber << '\n'; if (HasOptionalField(e_reverseLogicalChannelParameters)) strm << setw(indent+34) << "reverseLogicalChannelParameters = " << setprecision(indent) << m_reverseLogicalChannelParameters << '\n'; if (HasOptionalField(e_separateStack)) strm << setw(indent+16) << "separateStack = " << setprecision(indent) << m_separateStack << '\n'; if (HasOptionalField(e_forwardMultiplexAckParameters)) strm << setw(indent+32) << "forwardMultiplexAckParameters = " << setprecision(indent) << m_forwardMultiplexAckParameters << '\n'; if (HasOptionalField(e_encryptionSync)) strm << setw(indent+17) << "encryptionSync = " << setprecision(indent) << m_encryptionSync << '\n'; if (HasOptionalField(e_genericInformation)) strm << setw(indent+21) << "genericInformation = " << setprecision(indent) << m_genericInformation << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_OpenLogicalChannelAck::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_OpenLogicalChannelAck), PInvalidCast); #endif const H245_OpenLogicalChannelAck & other = (const H245_OpenLogicalChannelAck &)obj; Comparison result; if ((result = m_forwardLogicalChannelNumber.Compare(other.m_forwardLogicalChannelNumber)) != EqualTo) return result; if ((result = m_reverseLogicalChannelParameters.Compare(other.m_reverseLogicalChannelParameters)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_OpenLogicalChannelAck::GetDataLength() const { PINDEX length = 0; length += m_forwardLogicalChannelNumber.GetObjectLength(); if (HasOptionalField(e_reverseLogicalChannelParameters)) length += m_reverseLogicalChannelParameters.GetObjectLength(); return length; } PBoolean H245_OpenLogicalChannelAck::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_forwardLogicalChannelNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_reverseLogicalChannelParameters) && !m_reverseLogicalChannelParameters.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_separateStack, m_separateStack)) return FALSE; if (!KnownExtensionDecode(strm, e_forwardMultiplexAckParameters, m_forwardMultiplexAckParameters)) return FALSE; if (!KnownExtensionDecode(strm, e_encryptionSync, m_encryptionSync)) return FALSE; if (!KnownExtensionDecode(strm, e_genericInformation, m_genericInformation)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_OpenLogicalChannelAck::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_forwardLogicalChannelNumber.Encode(strm); if (HasOptionalField(e_reverseLogicalChannelParameters)) m_reverseLogicalChannelParameters.Encode(strm); KnownExtensionEncode(strm, e_separateStack, m_separateStack); KnownExtensionEncode(strm, e_forwardMultiplexAckParameters, m_forwardMultiplexAckParameters); KnownExtensionEncode(strm, e_encryptionSync, m_encryptionSync); KnownExtensionEncode(strm, e_genericInformation, m_genericInformation); UnknownExtensionsEncode(strm); } PObject * H245_OpenLogicalChannelAck::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_OpenLogicalChannelAck::Class()), PInvalidCast); #endif return new H245_OpenLogicalChannelAck(*this); } // // H235Mode // H245_H235Mode::H245_H235Mode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_H235Mode::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+39) << "encryptionAuthenticationAndIntegrity = " << setprecision(indent) << m_encryptionAuthenticationAndIntegrity << '\n'; strm << setw(indent+12) << "mediaMode = " << setprecision(indent) << m_mediaMode << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H235Mode::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H235Mode), PInvalidCast); #endif const H245_H235Mode & other = (const H245_H235Mode &)obj; Comparison result; if ((result = m_encryptionAuthenticationAndIntegrity.Compare(other.m_encryptionAuthenticationAndIntegrity)) != EqualTo) return result; if ((result = m_mediaMode.Compare(other.m_mediaMode)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H235Mode::GetDataLength() const { PINDEX length = 0; length += m_encryptionAuthenticationAndIntegrity.GetObjectLength(); length += m_mediaMode.GetObjectLength(); return length; } PBoolean H245_H235Mode::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_encryptionAuthenticationAndIntegrity.Decode(strm)) return FALSE; if (!m_mediaMode.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H235Mode::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_encryptionAuthenticationAndIntegrity.Encode(strm); m_mediaMode.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H235Mode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H235Mode::Class()), PInvalidCast); #endif return new H245_H235Mode(*this); } // // RedundancyEncodingDTMode // H245_RedundancyEncodingDTMode::H245_RedundancyEncodingDTMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_RedundancyEncodingDTMode::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+27) << "redundancyEncodingMethod = " << setprecision(indent) << m_redundancyEncodingMethod << '\n'; strm << setw(indent+10) << "primary = " << setprecision(indent) << m_primary << '\n'; strm << setw(indent+12) << "secondary = " << setprecision(indent) << m_secondary << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RedundancyEncodingDTMode::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RedundancyEncodingDTMode), PInvalidCast); #endif const H245_RedundancyEncodingDTMode & other = (const H245_RedundancyEncodingDTMode &)obj; Comparison result; if ((result = m_redundancyEncodingMethod.Compare(other.m_redundancyEncodingMethod)) != EqualTo) return result; if ((result = m_primary.Compare(other.m_primary)) != EqualTo) return result; if ((result = m_secondary.Compare(other.m_secondary)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RedundancyEncodingDTMode::GetDataLength() const { PINDEX length = 0; length += m_redundancyEncodingMethod.GetObjectLength(); length += m_primary.GetObjectLength(); length += m_secondary.GetObjectLength(); return length; } PBoolean H245_RedundancyEncodingDTMode::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_redundancyEncodingMethod.Decode(strm)) return FALSE; if (!m_primary.Decode(strm)) return FALSE; if (!m_secondary.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RedundancyEncodingDTMode::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_redundancyEncodingMethod.Encode(strm); m_primary.Encode(strm); m_secondary.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RedundancyEncodingDTMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RedundancyEncodingDTMode::Class()), PInvalidCast); #endif return new H245_RedundancyEncodingDTMode(*this); } // // H2250ModeParameters // H245_H2250ModeParameters::H245_H2250ModeParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_H2250ModeParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_redundancyEncodingMode)) strm << setw(indent+25) << "redundancyEncodingMode = " << setprecision(indent) << m_redundancyEncodingMode << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H2250ModeParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H2250ModeParameters), PInvalidCast); #endif const H245_H2250ModeParameters & other = (const H245_H2250ModeParameters &)obj; Comparison result; if ((result = m_redundancyEncodingMode.Compare(other.m_redundancyEncodingMode)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H2250ModeParameters::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_redundancyEncodingMode)) length += m_redundancyEncodingMode.GetObjectLength(); return length; } PBoolean H245_H2250ModeParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_redundancyEncodingMode) && !m_redundancyEncodingMode.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H2250ModeParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_redundancyEncodingMode)) m_redundancyEncodingMode.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H2250ModeParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H2250ModeParameters::Class()), PInvalidCast); #endif return new H245_H2250ModeParameters(*this); } // // CommunicationModeTableEntry // H245_CommunicationModeTableEntry::H245_CommunicationModeTableEntry(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 7, TRUE, 3) { m_sessionID.SetConstraints(PASN_Object::FixedConstraint, 1, 255); m_associatedSessionID.SetConstraints(PASN_Object::FixedConstraint, 1, 255); m_sessionDescription.SetConstraints(PASN_Object::FixedConstraint, 1, 128); m_sessionDependency.SetConstraints(PASN_Object::FixedConstraint, 1, 255); } #ifndef PASN_NOPRINTON void H245_CommunicationModeTableEntry::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandard)) strm << setw(indent+14) << "nonStandard = " << setprecision(indent) << m_nonStandard << '\n'; strm << setw(indent+12) << "sessionID = " << setprecision(indent) << m_sessionID << '\n'; if (HasOptionalField(e_associatedSessionID)) strm << setw(indent+22) << "associatedSessionID = " << setprecision(indent) << m_associatedSessionID << '\n'; if (HasOptionalField(e_terminalLabel)) strm << setw(indent+16) << "terminalLabel = " << setprecision(indent) << m_terminalLabel << '\n'; strm << setw(indent+21) << "sessionDescription = " << setprecision(indent) << m_sessionDescription << '\n'; strm << setw(indent+11) << "dataType = " << setprecision(indent) << m_dataType << '\n'; if (HasOptionalField(e_mediaChannel)) strm << setw(indent+15) << "mediaChannel = " << setprecision(indent) << m_mediaChannel << '\n'; if (HasOptionalField(e_mediaGuaranteedDelivery)) strm << setw(indent+26) << "mediaGuaranteedDelivery = " << setprecision(indent) << m_mediaGuaranteedDelivery << '\n'; if (HasOptionalField(e_mediaControlChannel)) strm << setw(indent+22) << "mediaControlChannel = " << setprecision(indent) << m_mediaControlChannel << '\n'; if (HasOptionalField(e_mediaControlGuaranteedDelivery)) strm << setw(indent+33) << "mediaControlGuaranteedDelivery = " << setprecision(indent) << m_mediaControlGuaranteedDelivery << '\n'; if (HasOptionalField(e_redundancyEncoding)) strm << setw(indent+21) << "redundancyEncoding = " << setprecision(indent) << m_redundancyEncoding << '\n'; if (HasOptionalField(e_sessionDependency)) strm << setw(indent+20) << "sessionDependency = " << setprecision(indent) << m_sessionDependency << '\n'; if (HasOptionalField(e_destination)) strm << setw(indent+14) << "destination = " << setprecision(indent) << m_destination << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_CommunicationModeTableEntry::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_CommunicationModeTableEntry), PInvalidCast); #endif const H245_CommunicationModeTableEntry & other = (const H245_CommunicationModeTableEntry &)obj; Comparison result; if ((result = m_nonStandard.Compare(other.m_nonStandard)) != EqualTo) return result; if ((result = m_sessionID.Compare(other.m_sessionID)) != EqualTo) return result; if ((result = m_associatedSessionID.Compare(other.m_associatedSessionID)) != EqualTo) return result; if ((result = m_terminalLabel.Compare(other.m_terminalLabel)) != EqualTo) return result; if ((result = m_sessionDescription.Compare(other.m_sessionDescription)) != EqualTo) return result; if ((result = m_dataType.Compare(other.m_dataType)) != EqualTo) return result; if ((result = m_mediaChannel.Compare(other.m_mediaChannel)) != EqualTo) return result; if ((result = m_mediaGuaranteedDelivery.Compare(other.m_mediaGuaranteedDelivery)) != EqualTo) return result; if ((result = m_mediaControlChannel.Compare(other.m_mediaControlChannel)) != EqualTo) return result; if ((result = m_mediaControlGuaranteedDelivery.Compare(other.m_mediaControlGuaranteedDelivery)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_CommunicationModeTableEntry::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandard)) length += m_nonStandard.GetObjectLength(); length += m_sessionID.GetObjectLength(); if (HasOptionalField(e_associatedSessionID)) length += m_associatedSessionID.GetObjectLength(); if (HasOptionalField(e_terminalLabel)) length += m_terminalLabel.GetObjectLength(); length += m_sessionDescription.GetObjectLength(); length += m_dataType.GetObjectLength(); if (HasOptionalField(e_mediaChannel)) length += m_mediaChannel.GetObjectLength(); if (HasOptionalField(e_mediaGuaranteedDelivery)) length += m_mediaGuaranteedDelivery.GetObjectLength(); if (HasOptionalField(e_mediaControlChannel)) length += m_mediaControlChannel.GetObjectLength(); if (HasOptionalField(e_mediaControlGuaranteedDelivery)) length += m_mediaControlGuaranteedDelivery.GetObjectLength(); return length; } PBoolean H245_CommunicationModeTableEntry::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandard) && !m_nonStandard.Decode(strm)) return FALSE; if (!m_sessionID.Decode(strm)) return FALSE; if (HasOptionalField(e_associatedSessionID) && !m_associatedSessionID.Decode(strm)) return FALSE; if (HasOptionalField(e_terminalLabel) && !m_terminalLabel.Decode(strm)) return FALSE; if (!m_sessionDescription.Decode(strm)) return FALSE; if (!m_dataType.Decode(strm)) return FALSE; if (HasOptionalField(e_mediaChannel) && !m_mediaChannel.Decode(strm)) return FALSE; if (HasOptionalField(e_mediaGuaranteedDelivery) && !m_mediaGuaranteedDelivery.Decode(strm)) return FALSE; if (HasOptionalField(e_mediaControlChannel) && !m_mediaControlChannel.Decode(strm)) return FALSE; if (HasOptionalField(e_mediaControlGuaranteedDelivery) && !m_mediaControlGuaranteedDelivery.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_redundancyEncoding, m_redundancyEncoding)) return FALSE; if (!KnownExtensionDecode(strm, e_sessionDependency, m_sessionDependency)) return FALSE; if (!KnownExtensionDecode(strm, e_destination, m_destination)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_CommunicationModeTableEntry::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandard)) m_nonStandard.Encode(strm); m_sessionID.Encode(strm); if (HasOptionalField(e_associatedSessionID)) m_associatedSessionID.Encode(strm); if (HasOptionalField(e_terminalLabel)) m_terminalLabel.Encode(strm); m_sessionDescription.Encode(strm); m_dataType.Encode(strm); if (HasOptionalField(e_mediaChannel)) m_mediaChannel.Encode(strm); if (HasOptionalField(e_mediaGuaranteedDelivery)) m_mediaGuaranteedDelivery.Encode(strm); if (HasOptionalField(e_mediaControlChannel)) m_mediaControlChannel.Encode(strm); if (HasOptionalField(e_mediaControlGuaranteedDelivery)) m_mediaControlGuaranteedDelivery.Encode(strm); KnownExtensionEncode(strm, e_redundancyEncoding, m_redundancyEncoding); KnownExtensionEncode(strm, e_sessionDependency, m_sessionDependency); KnownExtensionEncode(strm, e_destination, m_destination); UnknownExtensionsEncode(strm); } PObject * H245_CommunicationModeTableEntry::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CommunicationModeTableEntry::Class()), PInvalidCast); #endif return new H245_CommunicationModeTableEntry(*this); } // // NewATMVCCommand // H245_NewATMVCCommand::H245_NewATMVCCommand(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_resourceID.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); m_bitRate.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } #ifndef PASN_NOPRINTON void H245_NewATMVCCommand::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "resourceID = " << setprecision(indent) << m_resourceID << '\n'; strm << setw(indent+10) << "bitRate = " << setprecision(indent) << m_bitRate << '\n'; strm << setw(indent+26) << "bitRateLockedToPCRClock = " << setprecision(indent) << m_bitRateLockedToPCRClock << '\n'; strm << setw(indent+30) << "bitRateLockedToNetworkClock = " << setprecision(indent) << m_bitRateLockedToNetworkClock << '\n'; strm << setw(indent+6) << "aal = " << setprecision(indent) << m_aal << '\n'; strm << setw(indent+12) << "multiplex = " << setprecision(indent) << m_multiplex << '\n'; strm << setw(indent+20) << "reverseParameters = " << setprecision(indent) << m_reverseParameters << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_NewATMVCCommand::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_NewATMVCCommand), PInvalidCast); #endif const H245_NewATMVCCommand & other = (const H245_NewATMVCCommand &)obj; Comparison result; if ((result = m_resourceID.Compare(other.m_resourceID)) != EqualTo) return result; if ((result = m_bitRate.Compare(other.m_bitRate)) != EqualTo) return result; if ((result = m_bitRateLockedToPCRClock.Compare(other.m_bitRateLockedToPCRClock)) != EqualTo) return result; if ((result = m_bitRateLockedToNetworkClock.Compare(other.m_bitRateLockedToNetworkClock)) != EqualTo) return result; if ((result = m_aal.Compare(other.m_aal)) != EqualTo) return result; if ((result = m_multiplex.Compare(other.m_multiplex)) != EqualTo) return result; if ((result = m_reverseParameters.Compare(other.m_reverseParameters)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_NewATMVCCommand::GetDataLength() const { PINDEX length = 0; length += m_resourceID.GetObjectLength(); length += m_bitRate.GetObjectLength(); length += m_bitRateLockedToPCRClock.GetObjectLength(); length += m_bitRateLockedToNetworkClock.GetObjectLength(); length += m_aal.GetObjectLength(); length += m_multiplex.GetObjectLength(); length += m_reverseParameters.GetObjectLength(); return length; } PBoolean H245_NewATMVCCommand::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_resourceID.Decode(strm)) return FALSE; if (!m_bitRate.Decode(strm)) return FALSE; if (!m_bitRateLockedToPCRClock.Decode(strm)) return FALSE; if (!m_bitRateLockedToNetworkClock.Decode(strm)) return FALSE; if (!m_aal.Decode(strm)) return FALSE; if (!m_multiplex.Decode(strm)) return FALSE; if (!m_reverseParameters.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_NewATMVCCommand::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_resourceID.Encode(strm); m_bitRate.Encode(strm); m_bitRateLockedToPCRClock.Encode(strm); m_bitRateLockedToNetworkClock.Encode(strm); m_aal.Encode(strm); m_multiplex.Encode(strm); m_reverseParameters.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_NewATMVCCommand::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NewATMVCCommand::Class()), PInvalidCast); #endif return new H245_NewATMVCCommand(*this); } // // NewATMVCIndication // H245_NewATMVCIndication::H245_NewATMVCIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 1) { m_resourceID.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); m_bitRate.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); IncludeOptionalField(e_reverseParameters); } #ifndef PASN_NOPRINTON void H245_NewATMVCIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "resourceID = " << setprecision(indent) << m_resourceID << '\n'; strm << setw(indent+10) << "bitRate = " << setprecision(indent) << m_bitRate << '\n'; strm << setw(indent+26) << "bitRateLockedToPCRClock = " << setprecision(indent) << m_bitRateLockedToPCRClock << '\n'; strm << setw(indent+30) << "bitRateLockedToNetworkClock = " << setprecision(indent) << m_bitRateLockedToNetworkClock << '\n'; strm << setw(indent+6) << "aal = " << setprecision(indent) << m_aal << '\n'; strm << setw(indent+12) << "multiplex = " << setprecision(indent) << m_multiplex << '\n'; if (HasOptionalField(e_reverseParameters)) strm << setw(indent+20) << "reverseParameters = " << setprecision(indent) << m_reverseParameters << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_NewATMVCIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_NewATMVCIndication), PInvalidCast); #endif const H245_NewATMVCIndication & other = (const H245_NewATMVCIndication &)obj; Comparison result; if ((result = m_resourceID.Compare(other.m_resourceID)) != EqualTo) return result; if ((result = m_bitRate.Compare(other.m_bitRate)) != EqualTo) return result; if ((result = m_bitRateLockedToPCRClock.Compare(other.m_bitRateLockedToPCRClock)) != EqualTo) return result; if ((result = m_bitRateLockedToNetworkClock.Compare(other.m_bitRateLockedToNetworkClock)) != EqualTo) return result; if ((result = m_aal.Compare(other.m_aal)) != EqualTo) return result; if ((result = m_multiplex.Compare(other.m_multiplex)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_NewATMVCIndication::GetDataLength() const { PINDEX length = 0; length += m_resourceID.GetObjectLength(); length += m_bitRate.GetObjectLength(); length += m_bitRateLockedToPCRClock.GetObjectLength(); length += m_bitRateLockedToNetworkClock.GetObjectLength(); length += m_aal.GetObjectLength(); length += m_multiplex.GetObjectLength(); return length; } PBoolean H245_NewATMVCIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_resourceID.Decode(strm)) return FALSE; if (!m_bitRate.Decode(strm)) return FALSE; if (!m_bitRateLockedToPCRClock.Decode(strm)) return FALSE; if (!m_bitRateLockedToNetworkClock.Decode(strm)) return FALSE; if (!m_aal.Decode(strm)) return FALSE; if (!m_multiplex.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_reverseParameters, m_reverseParameters)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_NewATMVCIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_resourceID.Encode(strm); m_bitRate.Encode(strm); m_bitRateLockedToPCRClock.Encode(strm); m_bitRateLockedToNetworkClock.Encode(strm); m_aal.Encode(strm); m_multiplex.Encode(strm); KnownExtensionEncode(strm, e_reverseParameters, m_reverseParameters); UnknownExtensionsEncode(strm); } PObject * H245_NewATMVCIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NewATMVCIndication::Class()), PInvalidCast); #endif return new H245_NewATMVCIndication(*this); } // // DataApplicationCapability_application_t38fax // H245_DataApplicationCapability_application_t38fax::H245_DataApplicationCapability_application_t38fax(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H245_DataApplicationCapability_application_t38fax::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "t38FaxProtocol = " << setprecision(indent) << m_t38FaxProtocol << '\n'; strm << setw(indent+16) << "t38FaxProfile = " << setprecision(indent) << m_t38FaxProfile << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_DataApplicationCapability_application_t38fax::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_DataApplicationCapability_application_t38fax), PInvalidCast); #endif const H245_DataApplicationCapability_application_t38fax & other = (const H245_DataApplicationCapability_application_t38fax &)obj; Comparison result; if ((result = m_t38FaxProtocol.Compare(other.m_t38FaxProtocol)) != EqualTo) return result; if ((result = m_t38FaxProfile.Compare(other.m_t38FaxProfile)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_DataApplicationCapability_application_t38fax::GetDataLength() const { PINDEX length = 0; length += m_t38FaxProtocol.GetObjectLength(); length += m_t38FaxProfile.GetObjectLength(); return length; } PBoolean H245_DataApplicationCapability_application_t38fax::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_t38FaxProtocol.Decode(strm)) return FALSE; if (!m_t38FaxProfile.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_DataApplicationCapability_application_t38fax::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_t38FaxProtocol.Encode(strm); m_t38FaxProfile.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_DataApplicationCapability_application_t38fax::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DataApplicationCapability_application_t38fax::Class()), PInvalidCast); #endif return new H245_DataApplicationCapability_application_t38fax(*this); } // // DataMode_application_t38fax // H245_DataMode_application_t38fax::H245_DataMode_application_t38fax(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H245_DataMode_application_t38fax::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "t38FaxProtocol = " << setprecision(indent) << m_t38FaxProtocol << '\n'; strm << setw(indent+16) << "t38FaxProfile = " << setprecision(indent) << m_t38FaxProfile << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_DataMode_application_t38fax::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_DataMode_application_t38fax), PInvalidCast); #endif const H245_DataMode_application_t38fax & other = (const H245_DataMode_application_t38fax &)obj; Comparison result; if ((result = m_t38FaxProtocol.Compare(other.m_t38FaxProtocol)) != EqualTo) return result; if ((result = m_t38FaxProfile.Compare(other.m_t38FaxProfile)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_DataMode_application_t38fax::GetDataLength() const { PINDEX length = 0; length += m_t38FaxProtocol.GetObjectLength(); length += m_t38FaxProfile.GetObjectLength(); return length; } PBoolean H245_DataMode_application_t38fax::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_t38FaxProtocol.Decode(strm)) return FALSE; if (!m_t38FaxProfile.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_DataMode_application_t38fax::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_t38FaxProtocol.Encode(strm); m_t38FaxProfile.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_DataMode_application_t38fax::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DataMode_application_t38fax::Class()), PInvalidCast); #endif return new H245_DataMode_application_t38fax(*this); } // // H235SecurityCapability // H245_H235SecurityCapability::H245_H235SecurityCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_H235SecurityCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+39) << "encryptionAuthenticationAndIntegrity = " << setprecision(indent) << m_encryptionAuthenticationAndIntegrity << '\n'; strm << setw(indent+18) << "mediaCapability = " << setprecision(indent) << m_mediaCapability << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H235SecurityCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H235SecurityCapability), PInvalidCast); #endif const H245_H235SecurityCapability & other = (const H245_H235SecurityCapability &)obj; Comparison result; if ((result = m_encryptionAuthenticationAndIntegrity.Compare(other.m_encryptionAuthenticationAndIntegrity)) != EqualTo) return result; if ((result = m_mediaCapability.Compare(other.m_mediaCapability)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H235SecurityCapability::GetDataLength() const { PINDEX length = 0; length += m_encryptionAuthenticationAndIntegrity.GetObjectLength(); length += m_mediaCapability.GetObjectLength(); return length; } PBoolean H245_H235SecurityCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_encryptionAuthenticationAndIntegrity.Decode(strm)) return FALSE; if (!m_mediaCapability.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H235SecurityCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_encryptionAuthenticationAndIntegrity.Encode(strm); m_mediaCapability.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H235SecurityCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H235SecurityCapability::Class()), PInvalidCast); #endif return new H245_H235SecurityCapability(*this); } // // H263Options // H245_H263Options::H245_H263Options(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 5, TRUE, 2) { m_customPictureClockFrequency.SetConstraints(PASN_Object::FixedConstraint, 1, 16); m_customPictureFormat.SetConstraints(PASN_Object::FixedConstraint, 1, 16); m_modeCombos.SetConstraints(PASN_Object::FixedConstraint, 1, 16); IncludeOptionalField(e_videoBadMBsCap); IncludeOptionalField(e_h263Version3Options); } #ifndef PASN_NOPRINTON void H245_H263Options::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+26) << "advancedIntraCodingMode = " << setprecision(indent) << m_advancedIntraCodingMode << '\n'; strm << setw(indent+23) << "deblockingFilterMode = " << setprecision(indent) << m_deblockingFilterMode << '\n'; strm << setw(indent+23) << "improvedPBFramesMode = " << setprecision(indent) << m_improvedPBFramesMode << '\n'; strm << setw(indent+25) << "unlimitedMotionVectors = " << setprecision(indent) << m_unlimitedMotionVectors << '\n'; strm << setw(indent+20) << "fullPictureFreeze = " << setprecision(indent) << m_fullPictureFreeze << '\n'; strm << setw(indent+33) << "partialPictureFreezeAndRelease = " << setprecision(indent) << m_partialPictureFreezeAndRelease << '\n'; strm << setw(indent+34) << "resizingPartPicFreezeAndRelease = " << setprecision(indent) << m_resizingPartPicFreezeAndRelease << '\n'; strm << setw(indent+22) << "fullPictureSnapshot = " << setprecision(indent) << m_fullPictureSnapshot << '\n'; strm << setw(indent+25) << "partialPictureSnapshot = " << setprecision(indent) << m_partialPictureSnapshot << '\n'; strm << setw(indent+22) << "videoSegmentTagging = " << setprecision(indent) << m_videoSegmentTagging << '\n'; strm << setw(indent+24) << "progressiveRefinement = " << setprecision(indent) << m_progressiveRefinement << '\n'; strm << setw(indent+31) << "dynamicPictureResizingByFour = " << setprecision(indent) << m_dynamicPictureResizingByFour << '\n'; strm << setw(indent+37) << "dynamicPictureResizingSixteenthPel = " << setprecision(indent) << m_dynamicPictureResizingSixteenthPel << '\n'; strm << setw(indent+24) << "dynamicWarpingHalfPel = " << setprecision(indent) << m_dynamicWarpingHalfPel << '\n'; strm << setw(indent+29) << "dynamicWarpingSixteenthPel = " << setprecision(indent) << m_dynamicWarpingSixteenthPel << '\n'; strm << setw(indent+29) << "independentSegmentDecoding = " << setprecision(indent) << m_independentSegmentDecoding << '\n'; strm << setw(indent+24) << "slicesInOrder_NonRect = " << setprecision(indent) << m_slicesInOrder_NonRect << '\n'; strm << setw(indent+21) << "slicesInOrder_Rect = " << setprecision(indent) << m_slicesInOrder_Rect << '\n'; strm << setw(indent+24) << "slicesNoOrder_NonRect = " << setprecision(indent) << m_slicesNoOrder_NonRect << '\n'; strm << setw(indent+21) << "slicesNoOrder_Rect = " << setprecision(indent) << m_slicesNoOrder_Rect << '\n'; strm << setw(indent+24) << "alternateInterVLCMode = " << setprecision(indent) << m_alternateInterVLCMode << '\n'; strm << setw(indent+27) << "modifiedQuantizationMode = " << setprecision(indent) << m_modifiedQuantizationMode << '\n'; strm << setw(indent+26) << "reducedResolutionUpdate = " << setprecision(indent) << m_reducedResolutionUpdate << '\n'; if (HasOptionalField(e_transparencyParameters)) strm << setw(indent+25) << "transparencyParameters = " << setprecision(indent) << m_transparencyParameters << '\n'; strm << setw(indent+27) << "separateVideoBackChannel = " << setprecision(indent) << m_separateVideoBackChannel << '\n'; if (HasOptionalField(e_refPictureSelection)) strm << setw(indent+22) << "refPictureSelection = " << setprecision(indent) << m_refPictureSelection << '\n'; if (HasOptionalField(e_customPictureClockFrequency)) strm << setw(indent+30) << "customPictureClockFrequency = " << setprecision(indent) << m_customPictureClockFrequency << '\n'; if (HasOptionalField(e_customPictureFormat)) strm << setw(indent+22) << "customPictureFormat = " << setprecision(indent) << m_customPictureFormat << '\n'; if (HasOptionalField(e_modeCombos)) strm << setw(indent+13) << "modeCombos = " << setprecision(indent) << m_modeCombos << '\n'; if (HasOptionalField(e_videoBadMBsCap)) strm << setw(indent+17) << "videoBadMBsCap = " << setprecision(indent) << m_videoBadMBsCap << '\n'; if (HasOptionalField(e_h263Version3Options)) strm << setw(indent+22) << "h263Version3Options = " << setprecision(indent) << m_h263Version3Options << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H263Options::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H263Options), PInvalidCast); #endif const H245_H263Options & other = (const H245_H263Options &)obj; Comparison result; if ((result = m_advancedIntraCodingMode.Compare(other.m_advancedIntraCodingMode)) != EqualTo) return result; if ((result = m_deblockingFilterMode.Compare(other.m_deblockingFilterMode)) != EqualTo) return result; if ((result = m_improvedPBFramesMode.Compare(other.m_improvedPBFramesMode)) != EqualTo) return result; if ((result = m_unlimitedMotionVectors.Compare(other.m_unlimitedMotionVectors)) != EqualTo) return result; if ((result = m_fullPictureFreeze.Compare(other.m_fullPictureFreeze)) != EqualTo) return result; if ((result = m_partialPictureFreezeAndRelease.Compare(other.m_partialPictureFreezeAndRelease)) != EqualTo) return result; if ((result = m_resizingPartPicFreezeAndRelease.Compare(other.m_resizingPartPicFreezeAndRelease)) != EqualTo) return result; if ((result = m_fullPictureSnapshot.Compare(other.m_fullPictureSnapshot)) != EqualTo) return result; if ((result = m_partialPictureSnapshot.Compare(other.m_partialPictureSnapshot)) != EqualTo) return result; if ((result = m_videoSegmentTagging.Compare(other.m_videoSegmentTagging)) != EqualTo) return result; if ((result = m_progressiveRefinement.Compare(other.m_progressiveRefinement)) != EqualTo) return result; if ((result = m_dynamicPictureResizingByFour.Compare(other.m_dynamicPictureResizingByFour)) != EqualTo) return result; if ((result = m_dynamicPictureResizingSixteenthPel.Compare(other.m_dynamicPictureResizingSixteenthPel)) != EqualTo) return result; if ((result = m_dynamicWarpingHalfPel.Compare(other.m_dynamicWarpingHalfPel)) != EqualTo) return result; if ((result = m_dynamicWarpingSixteenthPel.Compare(other.m_dynamicWarpingSixteenthPel)) != EqualTo) return result; if ((result = m_independentSegmentDecoding.Compare(other.m_independentSegmentDecoding)) != EqualTo) return result; if ((result = m_slicesInOrder_NonRect.Compare(other.m_slicesInOrder_NonRect)) != EqualTo) return result; if ((result = m_slicesInOrder_Rect.Compare(other.m_slicesInOrder_Rect)) != EqualTo) return result; if ((result = m_slicesNoOrder_NonRect.Compare(other.m_slicesNoOrder_NonRect)) != EqualTo) return result; if ((result = m_slicesNoOrder_Rect.Compare(other.m_slicesNoOrder_Rect)) != EqualTo) return result; if ((result = m_alternateInterVLCMode.Compare(other.m_alternateInterVLCMode)) != EqualTo) return result; if ((result = m_modifiedQuantizationMode.Compare(other.m_modifiedQuantizationMode)) != EqualTo) return result; if ((result = m_reducedResolutionUpdate.Compare(other.m_reducedResolutionUpdate)) != EqualTo) return result; if ((result = m_transparencyParameters.Compare(other.m_transparencyParameters)) != EqualTo) return result; if ((result = m_separateVideoBackChannel.Compare(other.m_separateVideoBackChannel)) != EqualTo) return result; if ((result = m_refPictureSelection.Compare(other.m_refPictureSelection)) != EqualTo) return result; if ((result = m_customPictureClockFrequency.Compare(other.m_customPictureClockFrequency)) != EqualTo) return result; if ((result = m_customPictureFormat.Compare(other.m_customPictureFormat)) != EqualTo) return result; if ((result = m_modeCombos.Compare(other.m_modeCombos)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H263Options::GetDataLength() const { PINDEX length = 0; length += m_advancedIntraCodingMode.GetObjectLength(); length += m_deblockingFilterMode.GetObjectLength(); length += m_improvedPBFramesMode.GetObjectLength(); length += m_unlimitedMotionVectors.GetObjectLength(); length += m_fullPictureFreeze.GetObjectLength(); length += m_partialPictureFreezeAndRelease.GetObjectLength(); length += m_resizingPartPicFreezeAndRelease.GetObjectLength(); length += m_fullPictureSnapshot.GetObjectLength(); length += m_partialPictureSnapshot.GetObjectLength(); length += m_videoSegmentTagging.GetObjectLength(); length += m_progressiveRefinement.GetObjectLength(); length += m_dynamicPictureResizingByFour.GetObjectLength(); length += m_dynamicPictureResizingSixteenthPel.GetObjectLength(); length += m_dynamicWarpingHalfPel.GetObjectLength(); length += m_dynamicWarpingSixteenthPel.GetObjectLength(); length += m_independentSegmentDecoding.GetObjectLength(); length += m_slicesInOrder_NonRect.GetObjectLength(); length += m_slicesInOrder_Rect.GetObjectLength(); length += m_slicesNoOrder_NonRect.GetObjectLength(); length += m_slicesNoOrder_Rect.GetObjectLength(); length += m_alternateInterVLCMode.GetObjectLength(); length += m_modifiedQuantizationMode.GetObjectLength(); length += m_reducedResolutionUpdate.GetObjectLength(); if (HasOptionalField(e_transparencyParameters)) length += m_transparencyParameters.GetObjectLength(); length += m_separateVideoBackChannel.GetObjectLength(); if (HasOptionalField(e_refPictureSelection)) length += m_refPictureSelection.GetObjectLength(); if (HasOptionalField(e_customPictureClockFrequency)) length += m_customPictureClockFrequency.GetObjectLength(); if (HasOptionalField(e_customPictureFormat)) length += m_customPictureFormat.GetObjectLength(); if (HasOptionalField(e_modeCombos)) length += m_modeCombos.GetObjectLength(); return length; } PBoolean H245_H263Options::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_advancedIntraCodingMode.Decode(strm)) return FALSE; if (!m_deblockingFilterMode.Decode(strm)) return FALSE; if (!m_improvedPBFramesMode.Decode(strm)) return FALSE; if (!m_unlimitedMotionVectors.Decode(strm)) return FALSE; if (!m_fullPictureFreeze.Decode(strm)) return FALSE; if (!m_partialPictureFreezeAndRelease.Decode(strm)) return FALSE; if (!m_resizingPartPicFreezeAndRelease.Decode(strm)) return FALSE; if (!m_fullPictureSnapshot.Decode(strm)) return FALSE; if (!m_partialPictureSnapshot.Decode(strm)) return FALSE; if (!m_videoSegmentTagging.Decode(strm)) return FALSE; if (!m_progressiveRefinement.Decode(strm)) return FALSE; if (!m_dynamicPictureResizingByFour.Decode(strm)) return FALSE; if (!m_dynamicPictureResizingSixteenthPel.Decode(strm)) return FALSE; if (!m_dynamicWarpingHalfPel.Decode(strm)) return FALSE; if (!m_dynamicWarpingSixteenthPel.Decode(strm)) return FALSE; if (!m_independentSegmentDecoding.Decode(strm)) return FALSE; if (!m_slicesInOrder_NonRect.Decode(strm)) return FALSE; if (!m_slicesInOrder_Rect.Decode(strm)) return FALSE; if (!m_slicesNoOrder_NonRect.Decode(strm)) return FALSE; if (!m_slicesNoOrder_Rect.Decode(strm)) return FALSE; if (!m_alternateInterVLCMode.Decode(strm)) return FALSE; if (!m_modifiedQuantizationMode.Decode(strm)) return FALSE; if (!m_reducedResolutionUpdate.Decode(strm)) return FALSE; if (HasOptionalField(e_transparencyParameters) && !m_transparencyParameters.Decode(strm)) return FALSE; if (!m_separateVideoBackChannel.Decode(strm)) return FALSE; if (HasOptionalField(e_refPictureSelection) && !m_refPictureSelection.Decode(strm)) return FALSE; if (HasOptionalField(e_customPictureClockFrequency) && !m_customPictureClockFrequency.Decode(strm)) return FALSE; if (HasOptionalField(e_customPictureFormat) && !m_customPictureFormat.Decode(strm)) return FALSE; if (HasOptionalField(e_modeCombos) && !m_modeCombos.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_videoBadMBsCap, m_videoBadMBsCap)) return FALSE; if (!KnownExtensionDecode(strm, e_h263Version3Options, m_h263Version3Options)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H263Options::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_advancedIntraCodingMode.Encode(strm); m_deblockingFilterMode.Encode(strm); m_improvedPBFramesMode.Encode(strm); m_unlimitedMotionVectors.Encode(strm); m_fullPictureFreeze.Encode(strm); m_partialPictureFreezeAndRelease.Encode(strm); m_resizingPartPicFreezeAndRelease.Encode(strm); m_fullPictureSnapshot.Encode(strm); m_partialPictureSnapshot.Encode(strm); m_videoSegmentTagging.Encode(strm); m_progressiveRefinement.Encode(strm); m_dynamicPictureResizingByFour.Encode(strm); m_dynamicPictureResizingSixteenthPel.Encode(strm); m_dynamicWarpingHalfPel.Encode(strm); m_dynamicWarpingSixteenthPel.Encode(strm); m_independentSegmentDecoding.Encode(strm); m_slicesInOrder_NonRect.Encode(strm); m_slicesInOrder_Rect.Encode(strm); m_slicesNoOrder_NonRect.Encode(strm); m_slicesNoOrder_Rect.Encode(strm); m_alternateInterVLCMode.Encode(strm); m_modifiedQuantizationMode.Encode(strm); m_reducedResolutionUpdate.Encode(strm); if (HasOptionalField(e_transparencyParameters)) m_transparencyParameters.Encode(strm); m_separateVideoBackChannel.Encode(strm); if (HasOptionalField(e_refPictureSelection)) m_refPictureSelection.Encode(strm); if (HasOptionalField(e_customPictureClockFrequency)) m_customPictureClockFrequency.Encode(strm); if (HasOptionalField(e_customPictureFormat)) m_customPictureFormat.Encode(strm); if (HasOptionalField(e_modeCombos)) m_modeCombos.Encode(strm); KnownExtensionEncode(strm, e_videoBadMBsCap, m_videoBadMBsCap); KnownExtensionEncode(strm, e_h263Version3Options, m_h263Version3Options); UnknownExtensionsEncode(strm); } PObject * H245_H263Options::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H263Options::Class()), PInvalidCast); #endif return new H245_H263Options(*this); } // // H2250LogicalChannelParameters // H245_H2250LogicalChannelParameters::H245_H2250LogicalChannelParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 10, TRUE, 3) { m_sessionID.SetConstraints(PASN_Object::FixedConstraint, 0, 255); m_associatedSessionID.SetConstraints(PASN_Object::FixedConstraint, 1, 255); m_dynamicRTPPayloadType.SetConstraints(PASN_Object::FixedConstraint, 96, 127); } #ifndef PASN_NOPRINTON void H245_H2250LogicalChannelParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandard)) strm << setw(indent+14) << "nonStandard = " << setprecision(indent) << m_nonStandard << '\n'; strm << setw(indent+12) << "sessionID = " << setprecision(indent) << m_sessionID << '\n'; if (HasOptionalField(e_associatedSessionID)) strm << setw(indent+22) << "associatedSessionID = " << setprecision(indent) << m_associatedSessionID << '\n'; if (HasOptionalField(e_mediaChannel)) strm << setw(indent+15) << "mediaChannel = " << setprecision(indent) << m_mediaChannel << '\n'; if (HasOptionalField(e_mediaGuaranteedDelivery)) strm << setw(indent+26) << "mediaGuaranteedDelivery = " << setprecision(indent) << m_mediaGuaranteedDelivery << '\n'; if (HasOptionalField(e_mediaControlChannel)) strm << setw(indent+22) << "mediaControlChannel = " << setprecision(indent) << m_mediaControlChannel << '\n'; if (HasOptionalField(e_mediaControlGuaranteedDelivery)) strm << setw(indent+33) << "mediaControlGuaranteedDelivery = " << setprecision(indent) << m_mediaControlGuaranteedDelivery << '\n'; if (HasOptionalField(e_silenceSuppression)) strm << setw(indent+21) << "silenceSuppression = " << setprecision(indent) << m_silenceSuppression << '\n'; if (HasOptionalField(e_destination)) strm << setw(indent+14) << "destination = " << setprecision(indent) << m_destination << '\n'; if (HasOptionalField(e_dynamicRTPPayloadType)) strm << setw(indent+24) << "dynamicRTPPayloadType = " << setprecision(indent) << m_dynamicRTPPayloadType << '\n'; if (HasOptionalField(e_mediaPacketization)) strm << setw(indent+21) << "mediaPacketization = " << setprecision(indent) << m_mediaPacketization << '\n'; if (HasOptionalField(e_transportCapability)) strm << setw(indent+22) << "transportCapability = " << setprecision(indent) << m_transportCapability << '\n'; if (HasOptionalField(e_redundancyEncoding)) strm << setw(indent+21) << "redundancyEncoding = " << setprecision(indent) << m_redundancyEncoding << '\n'; if (HasOptionalField(e_source)) strm << setw(indent+9) << "source = " << setprecision(indent) << m_source << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H2250LogicalChannelParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H2250LogicalChannelParameters), PInvalidCast); #endif const H245_H2250LogicalChannelParameters & other = (const H245_H2250LogicalChannelParameters &)obj; Comparison result; if ((result = m_nonStandard.Compare(other.m_nonStandard)) != EqualTo) return result; if ((result = m_sessionID.Compare(other.m_sessionID)) != EqualTo) return result; if ((result = m_associatedSessionID.Compare(other.m_associatedSessionID)) != EqualTo) return result; if ((result = m_mediaChannel.Compare(other.m_mediaChannel)) != EqualTo) return result; if ((result = m_mediaGuaranteedDelivery.Compare(other.m_mediaGuaranteedDelivery)) != EqualTo) return result; if ((result = m_mediaControlChannel.Compare(other.m_mediaControlChannel)) != EqualTo) return result; if ((result = m_mediaControlGuaranteedDelivery.Compare(other.m_mediaControlGuaranteedDelivery)) != EqualTo) return result; if ((result = m_silenceSuppression.Compare(other.m_silenceSuppression)) != EqualTo) return result; if ((result = m_destination.Compare(other.m_destination)) != EqualTo) return result; if ((result = m_dynamicRTPPayloadType.Compare(other.m_dynamicRTPPayloadType)) != EqualTo) return result; if ((result = m_mediaPacketization.Compare(other.m_mediaPacketization)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H2250LogicalChannelParameters::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandard)) length += m_nonStandard.GetObjectLength(); length += m_sessionID.GetObjectLength(); if (HasOptionalField(e_associatedSessionID)) length += m_associatedSessionID.GetObjectLength(); if (HasOptionalField(e_mediaChannel)) length += m_mediaChannel.GetObjectLength(); if (HasOptionalField(e_mediaGuaranteedDelivery)) length += m_mediaGuaranteedDelivery.GetObjectLength(); if (HasOptionalField(e_mediaControlChannel)) length += m_mediaControlChannel.GetObjectLength(); if (HasOptionalField(e_mediaControlGuaranteedDelivery)) length += m_mediaControlGuaranteedDelivery.GetObjectLength(); if (HasOptionalField(e_silenceSuppression)) length += m_silenceSuppression.GetObjectLength(); if (HasOptionalField(e_destination)) length += m_destination.GetObjectLength(); if (HasOptionalField(e_dynamicRTPPayloadType)) length += m_dynamicRTPPayloadType.GetObjectLength(); if (HasOptionalField(e_mediaPacketization)) length += m_mediaPacketization.GetObjectLength(); return length; } PBoolean H245_H2250LogicalChannelParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandard) && !m_nonStandard.Decode(strm)) return FALSE; if (!m_sessionID.Decode(strm)) return FALSE; if (HasOptionalField(e_associatedSessionID) && !m_associatedSessionID.Decode(strm)) return FALSE; if (HasOptionalField(e_mediaChannel) && !m_mediaChannel.Decode(strm)) return FALSE; if (HasOptionalField(e_mediaGuaranteedDelivery) && !m_mediaGuaranteedDelivery.Decode(strm)) return FALSE; if (HasOptionalField(e_mediaControlChannel) && !m_mediaControlChannel.Decode(strm)) return FALSE; if (HasOptionalField(e_mediaControlGuaranteedDelivery) && !m_mediaControlGuaranteedDelivery.Decode(strm)) return FALSE; if (HasOptionalField(e_silenceSuppression) && !m_silenceSuppression.Decode(strm)) return FALSE; if (HasOptionalField(e_destination) && !m_destination.Decode(strm)) return FALSE; if (HasOptionalField(e_dynamicRTPPayloadType) && !m_dynamicRTPPayloadType.Decode(strm)) return FALSE; if (HasOptionalField(e_mediaPacketization) && !m_mediaPacketization.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_transportCapability, m_transportCapability)) return FALSE; if (!KnownExtensionDecode(strm, e_redundancyEncoding, m_redundancyEncoding)) return FALSE; if (!KnownExtensionDecode(strm, e_source, m_source)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H2250LogicalChannelParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandard)) m_nonStandard.Encode(strm); m_sessionID.Encode(strm); if (HasOptionalField(e_associatedSessionID)) m_associatedSessionID.Encode(strm); if (HasOptionalField(e_mediaChannel)) m_mediaChannel.Encode(strm); if (HasOptionalField(e_mediaGuaranteedDelivery)) m_mediaGuaranteedDelivery.Encode(strm); if (HasOptionalField(e_mediaControlChannel)) m_mediaControlChannel.Encode(strm); if (HasOptionalField(e_mediaControlGuaranteedDelivery)) m_mediaControlGuaranteedDelivery.Encode(strm); if (HasOptionalField(e_silenceSuppression)) m_silenceSuppression.Encode(strm); if (HasOptionalField(e_destination)) m_destination.Encode(strm); if (HasOptionalField(e_dynamicRTPPayloadType)) m_dynamicRTPPayloadType.Encode(strm); if (HasOptionalField(e_mediaPacketization)) m_mediaPacketization.Encode(strm); KnownExtensionEncode(strm, e_transportCapability, m_transportCapability); KnownExtensionEncode(strm, e_redundancyEncoding, m_redundancyEncoding); KnownExtensionEncode(strm, e_source, m_source); UnknownExtensionsEncode(strm); } PObject * H245_H2250LogicalChannelParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H2250LogicalChannelParameters::Class()), PInvalidCast); #endif return new H245_H2250LogicalChannelParameters(*this); } // // ModeElement // H245_ModeElement::H245_ModeElement(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 5) { } #ifndef PASN_NOPRINTON void H245_ModeElement::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "type = " << setprecision(indent) << m_type << '\n'; if (HasOptionalField(e_h223ModeParameters)) strm << setw(indent+21) << "h223ModeParameters = " << setprecision(indent) << m_h223ModeParameters << '\n'; if (HasOptionalField(e_v76ModeParameters)) strm << setw(indent+20) << "v76ModeParameters = " << setprecision(indent) << m_v76ModeParameters << '\n'; if (HasOptionalField(e_h2250ModeParameters)) strm << setw(indent+22) << "h2250ModeParameters = " << setprecision(indent) << m_h2250ModeParameters << '\n'; if (HasOptionalField(e_genericModeParameters)) strm << setw(indent+24) << "genericModeParameters = " << setprecision(indent) << m_genericModeParameters << '\n'; if (HasOptionalField(e_multiplexedStreamModeParameters)) strm << setw(indent+34) << "multiplexedStreamModeParameters = " << setprecision(indent) << m_multiplexedStreamModeParameters << '\n'; if (HasOptionalField(e_logicalChannelNumber)) strm << setw(indent+23) << "logicalChannelNumber = " << setprecision(indent) << m_logicalChannelNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_ModeElement::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_ModeElement), PInvalidCast); #endif const H245_ModeElement & other = (const H245_ModeElement &)obj; Comparison result; if ((result = m_type.Compare(other.m_type)) != EqualTo) return result; if ((result = m_h223ModeParameters.Compare(other.m_h223ModeParameters)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_ModeElement::GetDataLength() const { PINDEX length = 0; length += m_type.GetObjectLength(); if (HasOptionalField(e_h223ModeParameters)) length += m_h223ModeParameters.GetObjectLength(); return length; } PBoolean H245_ModeElement::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_type.Decode(strm)) return FALSE; if (HasOptionalField(e_h223ModeParameters) && !m_h223ModeParameters.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_v76ModeParameters, m_v76ModeParameters)) return FALSE; if (!KnownExtensionDecode(strm, e_h2250ModeParameters, m_h2250ModeParameters)) return FALSE; if (!KnownExtensionDecode(strm, e_genericModeParameters, m_genericModeParameters)) return FALSE; if (!KnownExtensionDecode(strm, e_multiplexedStreamModeParameters, m_multiplexedStreamModeParameters)) return FALSE; if (!KnownExtensionDecode(strm, e_logicalChannelNumber, m_logicalChannelNumber)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_ModeElement::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_type.Encode(strm); if (HasOptionalField(e_h223ModeParameters)) m_h223ModeParameters.Encode(strm); KnownExtensionEncode(strm, e_v76ModeParameters, m_v76ModeParameters); KnownExtensionEncode(strm, e_h2250ModeParameters, m_h2250ModeParameters); KnownExtensionEncode(strm, e_genericModeParameters, m_genericModeParameters); KnownExtensionEncode(strm, e_multiplexedStreamModeParameters, m_multiplexedStreamModeParameters); KnownExtensionEncode(strm, e_logicalChannelNumber, m_logicalChannelNumber); UnknownExtensionsEncode(strm); } PObject * H245_ModeElement::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ModeElement::Class()), PInvalidCast); #endif return new H245_ModeElement(*this); } // // H263VideoMode // H245_H263VideoMode::H245_H263VideoMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 3) { m_bitRate.SetConstraints(PASN_Object::FixedConstraint, 1, 19200); IncludeOptionalField(e_errorCompensation); } #ifndef PASN_NOPRINTON void H245_H263VideoMode::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "resolution = " << setprecision(indent) << m_resolution << '\n'; strm << setw(indent+10) << "bitRate = " << setprecision(indent) << m_bitRate << '\n'; strm << setw(indent+21) << "unrestrictedVector = " << setprecision(indent) << m_unrestrictedVector << '\n'; strm << setw(indent+19) << "arithmeticCoding = " << setprecision(indent) << m_arithmeticCoding << '\n'; strm << setw(indent+21) << "advancedPrediction = " << setprecision(indent) << m_advancedPrediction << '\n'; strm << setw(indent+11) << "pbFrames = " << setprecision(indent) << m_pbFrames << '\n'; if (HasOptionalField(e_errorCompensation)) strm << setw(indent+20) << "errorCompensation = " << setprecision(indent) << m_errorCompensation << '\n'; if (HasOptionalField(e_enhancementLayerInfo)) strm << setw(indent+23) << "enhancementLayerInfo = " << setprecision(indent) << m_enhancementLayerInfo << '\n'; if (HasOptionalField(e_h263Options)) strm << setw(indent+14) << "h263Options = " << setprecision(indent) << m_h263Options << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H263VideoMode::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H263VideoMode), PInvalidCast); #endif const H245_H263VideoMode & other = (const H245_H263VideoMode &)obj; Comparison result; if ((result = m_resolution.Compare(other.m_resolution)) != EqualTo) return result; if ((result = m_bitRate.Compare(other.m_bitRate)) != EqualTo) return result; if ((result = m_unrestrictedVector.Compare(other.m_unrestrictedVector)) != EqualTo) return result; if ((result = m_arithmeticCoding.Compare(other.m_arithmeticCoding)) != EqualTo) return result; if ((result = m_advancedPrediction.Compare(other.m_advancedPrediction)) != EqualTo) return result; if ((result = m_pbFrames.Compare(other.m_pbFrames)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H263VideoMode::GetDataLength() const { PINDEX length = 0; length += m_resolution.GetObjectLength(); length += m_bitRate.GetObjectLength(); length += m_unrestrictedVector.GetObjectLength(); length += m_arithmeticCoding.GetObjectLength(); length += m_advancedPrediction.GetObjectLength(); length += m_pbFrames.GetObjectLength(); return length; } PBoolean H245_H263VideoMode::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_resolution.Decode(strm)) return FALSE; if (!m_bitRate.Decode(strm)) return FALSE; if (!m_unrestrictedVector.Decode(strm)) return FALSE; if (!m_arithmeticCoding.Decode(strm)) return FALSE; if (!m_advancedPrediction.Decode(strm)) return FALSE; if (!m_pbFrames.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_errorCompensation, m_errorCompensation)) return FALSE; if (!KnownExtensionDecode(strm, e_enhancementLayerInfo, m_enhancementLayerInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_h263Options, m_h263Options)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H263VideoMode::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_resolution.Encode(strm); m_bitRate.Encode(strm); m_unrestrictedVector.Encode(strm); m_arithmeticCoding.Encode(strm); m_advancedPrediction.Encode(strm); m_pbFrames.Encode(strm); KnownExtensionEncode(strm, e_errorCompensation, m_errorCompensation); KnownExtensionEncode(strm, e_enhancementLayerInfo, m_enhancementLayerInfo); KnownExtensionEncode(strm, e_h263Options, m_h263Options); UnknownExtensionsEncode(strm); } PObject * H245_H263VideoMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H263VideoMode::Class()), PInvalidCast); #endif return new H245_H263VideoMode(*this); } // // H263VideoCapability // H245_H263VideoCapability::H245_H263VideoCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 7, TRUE, 8) { m_sqcifMPI.SetConstraints(PASN_Object::FixedConstraint, 1, 32); m_qcifMPI.SetConstraints(PASN_Object::FixedConstraint, 1, 32); m_cifMPI.SetConstraints(PASN_Object::FixedConstraint, 1, 32); m_cif4MPI.SetConstraints(PASN_Object::FixedConstraint, 1, 32); m_cif16MPI.SetConstraints(PASN_Object::FixedConstraint, 1, 32); m_maxBitRate.SetConstraints(PASN_Object::FixedConstraint, 1, 192400); m_hrd_B.SetConstraints(PASN_Object::FixedConstraint, 0, 524287); m_bppMaxKb.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); m_slowSqcifMPI.SetConstraints(PASN_Object::FixedConstraint, 1, 3600); m_slowQcifMPI.SetConstraints(PASN_Object::FixedConstraint, 1, 3600); m_slowCifMPI.SetConstraints(PASN_Object::FixedConstraint, 1, 3600); m_slowCif4MPI.SetConstraints(PASN_Object::FixedConstraint, 1, 3600); m_slowCif16MPI.SetConstraints(PASN_Object::FixedConstraint, 1, 3600); IncludeOptionalField(e_errorCompensation); } #ifndef PASN_NOPRINTON void H245_H263VideoCapability::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_sqcifMPI)) strm << setw(indent+11) << "sqcifMPI = " << setprecision(indent) << m_sqcifMPI << '\n'; if (HasOptionalField(e_qcifMPI)) strm << setw(indent+10) << "qcifMPI = " << setprecision(indent) << m_qcifMPI << '\n'; if (HasOptionalField(e_cifMPI)) strm << setw(indent+9) << "cifMPI = " << setprecision(indent) << m_cifMPI << '\n'; if (HasOptionalField(e_cif4MPI)) strm << setw(indent+10) << "cif4MPI = " << setprecision(indent) << m_cif4MPI << '\n'; if (HasOptionalField(e_cif16MPI)) strm << setw(indent+11) << "cif16MPI = " << setprecision(indent) << m_cif16MPI << '\n'; strm << setw(indent+13) << "maxBitRate = " << setprecision(indent) << m_maxBitRate << '\n'; strm << setw(indent+21) << "unrestrictedVector = " << setprecision(indent) << m_unrestrictedVector << '\n'; strm << setw(indent+19) << "arithmeticCoding = " << setprecision(indent) << m_arithmeticCoding << '\n'; strm << setw(indent+21) << "advancedPrediction = " << setprecision(indent) << m_advancedPrediction << '\n'; strm << setw(indent+11) << "pbFrames = " << setprecision(indent) << m_pbFrames << '\n'; strm << setw(indent+36) << "temporalSpatialTradeOffCapability = " << setprecision(indent) << m_temporalSpatialTradeOffCapability << '\n'; if (HasOptionalField(e_hrd_B)) strm << setw(indent+8) << "hrd_B = " << setprecision(indent) << m_hrd_B << '\n'; if (HasOptionalField(e_bppMaxKb)) strm << setw(indent+11) << "bppMaxKb = " << setprecision(indent) << m_bppMaxKb << '\n'; if (HasOptionalField(e_slowSqcifMPI)) strm << setw(indent+15) << "slowSqcifMPI = " << setprecision(indent) << m_slowSqcifMPI << '\n'; if (HasOptionalField(e_slowQcifMPI)) strm << setw(indent+14) << "slowQcifMPI = " << setprecision(indent) << m_slowQcifMPI << '\n'; if (HasOptionalField(e_slowCifMPI)) strm << setw(indent+13) << "slowCifMPI = " << setprecision(indent) << m_slowCifMPI << '\n'; if (HasOptionalField(e_slowCif4MPI)) strm << setw(indent+14) << "slowCif4MPI = " << setprecision(indent) << m_slowCif4MPI << '\n'; if (HasOptionalField(e_slowCif16MPI)) strm << setw(indent+15) << "slowCif16MPI = " << setprecision(indent) << m_slowCif16MPI << '\n'; if (HasOptionalField(e_errorCompensation)) strm << setw(indent+20) << "errorCompensation = " << setprecision(indent) << m_errorCompensation << '\n'; if (HasOptionalField(e_enhancementLayerInfo)) strm << setw(indent+23) << "enhancementLayerInfo = " << setprecision(indent) << m_enhancementLayerInfo << '\n'; if (HasOptionalField(e_h263Options)) strm << setw(indent+14) << "h263Options = " << setprecision(indent) << m_h263Options << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H263VideoCapability::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H263VideoCapability), PInvalidCast); #endif const H245_H263VideoCapability & other = (const H245_H263VideoCapability &)obj; Comparison result; if ((result = m_sqcifMPI.Compare(other.m_sqcifMPI)) != EqualTo) return result; if ((result = m_qcifMPI.Compare(other.m_qcifMPI)) != EqualTo) return result; if ((result = m_cifMPI.Compare(other.m_cifMPI)) != EqualTo) return result; if ((result = m_cif4MPI.Compare(other.m_cif4MPI)) != EqualTo) return result; if ((result = m_cif16MPI.Compare(other.m_cif16MPI)) != EqualTo) return result; if ((result = m_maxBitRate.Compare(other.m_maxBitRate)) != EqualTo) return result; if ((result = m_unrestrictedVector.Compare(other.m_unrestrictedVector)) != EqualTo) return result; if ((result = m_arithmeticCoding.Compare(other.m_arithmeticCoding)) != EqualTo) return result; if ((result = m_advancedPrediction.Compare(other.m_advancedPrediction)) != EqualTo) return result; if ((result = m_pbFrames.Compare(other.m_pbFrames)) != EqualTo) return result; if ((result = m_temporalSpatialTradeOffCapability.Compare(other.m_temporalSpatialTradeOffCapability)) != EqualTo) return result; if ((result = m_hrd_B.Compare(other.m_hrd_B)) != EqualTo) return result; if ((result = m_bppMaxKb.Compare(other.m_bppMaxKb)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H263VideoCapability::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_sqcifMPI)) length += m_sqcifMPI.GetObjectLength(); if (HasOptionalField(e_qcifMPI)) length += m_qcifMPI.GetObjectLength(); if (HasOptionalField(e_cifMPI)) length += m_cifMPI.GetObjectLength(); if (HasOptionalField(e_cif4MPI)) length += m_cif4MPI.GetObjectLength(); if (HasOptionalField(e_cif16MPI)) length += m_cif16MPI.GetObjectLength(); length += m_maxBitRate.GetObjectLength(); length += m_unrestrictedVector.GetObjectLength(); length += m_arithmeticCoding.GetObjectLength(); length += m_advancedPrediction.GetObjectLength(); length += m_pbFrames.GetObjectLength(); length += m_temporalSpatialTradeOffCapability.GetObjectLength(); if (HasOptionalField(e_hrd_B)) length += m_hrd_B.GetObjectLength(); if (HasOptionalField(e_bppMaxKb)) length += m_bppMaxKb.GetObjectLength(); return length; } PBoolean H245_H263VideoCapability::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_sqcifMPI) && !m_sqcifMPI.Decode(strm)) return FALSE; if (HasOptionalField(e_qcifMPI) && !m_qcifMPI.Decode(strm)) return FALSE; if (HasOptionalField(e_cifMPI) && !m_cifMPI.Decode(strm)) return FALSE; if (HasOptionalField(e_cif4MPI) && !m_cif4MPI.Decode(strm)) return FALSE; if (HasOptionalField(e_cif16MPI) && !m_cif16MPI.Decode(strm)) return FALSE; if (!m_maxBitRate.Decode(strm)) return FALSE; if (!m_unrestrictedVector.Decode(strm)) return FALSE; if (!m_arithmeticCoding.Decode(strm)) return FALSE; if (!m_advancedPrediction.Decode(strm)) return FALSE; if (!m_pbFrames.Decode(strm)) return FALSE; if (!m_temporalSpatialTradeOffCapability.Decode(strm)) return FALSE; if (HasOptionalField(e_hrd_B) && !m_hrd_B.Decode(strm)) return FALSE; if (HasOptionalField(e_bppMaxKb) && !m_bppMaxKb.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_slowSqcifMPI, m_slowSqcifMPI)) return FALSE; if (!KnownExtensionDecode(strm, e_slowQcifMPI, m_slowQcifMPI)) return FALSE; if (!KnownExtensionDecode(strm, e_slowCifMPI, m_slowCifMPI)) return FALSE; if (!KnownExtensionDecode(strm, e_slowCif4MPI, m_slowCif4MPI)) return FALSE; if (!KnownExtensionDecode(strm, e_slowCif16MPI, m_slowCif16MPI)) return FALSE; if (!KnownExtensionDecode(strm, e_errorCompensation, m_errorCompensation)) return FALSE; if (!KnownExtensionDecode(strm, e_enhancementLayerInfo, m_enhancementLayerInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_h263Options, m_h263Options)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H263VideoCapability::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_sqcifMPI)) m_sqcifMPI.Encode(strm); if (HasOptionalField(e_qcifMPI)) m_qcifMPI.Encode(strm); if (HasOptionalField(e_cifMPI)) m_cifMPI.Encode(strm); if (HasOptionalField(e_cif4MPI)) m_cif4MPI.Encode(strm); if (HasOptionalField(e_cif16MPI)) m_cif16MPI.Encode(strm); m_maxBitRate.Encode(strm); m_unrestrictedVector.Encode(strm); m_arithmeticCoding.Encode(strm); m_advancedPrediction.Encode(strm); m_pbFrames.Encode(strm); m_temporalSpatialTradeOffCapability.Encode(strm); if (HasOptionalField(e_hrd_B)) m_hrd_B.Encode(strm); if (HasOptionalField(e_bppMaxKb)) m_bppMaxKb.Encode(strm); KnownExtensionEncode(strm, e_slowSqcifMPI, m_slowSqcifMPI); KnownExtensionEncode(strm, e_slowQcifMPI, m_slowQcifMPI); KnownExtensionEncode(strm, e_slowCifMPI, m_slowCifMPI); KnownExtensionEncode(strm, e_slowCif4MPI, m_slowCif4MPI); KnownExtensionEncode(strm, e_slowCif16MPI, m_slowCif16MPI); KnownExtensionEncode(strm, e_errorCompensation, m_errorCompensation); KnownExtensionEncode(strm, e_enhancementLayerInfo, m_enhancementLayerInfo); KnownExtensionEncode(strm, e_h263Options, m_h263Options); UnknownExtensionsEncode(strm); } PObject * H245_H263VideoCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H263VideoCapability::Class()), PInvalidCast); #endif return new H245_H263VideoCapability(*this); } // // EnhancementOptions // H245_EnhancementOptions::H245_EnhancementOptions(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 11, TRUE, 0) { m_sqcifMPI.SetConstraints(PASN_Object::FixedConstraint, 1, 32); m_qcifMPI.SetConstraints(PASN_Object::FixedConstraint, 1, 32); m_cifMPI.SetConstraints(PASN_Object::FixedConstraint, 1, 32); m_cif4MPI.SetConstraints(PASN_Object::FixedConstraint, 1, 32); m_cif16MPI.SetConstraints(PASN_Object::FixedConstraint, 1, 32); m_maxBitRate.SetConstraints(PASN_Object::FixedConstraint, 1, 192400); m_slowSqcifMPI.SetConstraints(PASN_Object::FixedConstraint, 1, 3600); m_slowQcifMPI.SetConstraints(PASN_Object::FixedConstraint, 1, 3600); m_slowCifMPI.SetConstraints(PASN_Object::FixedConstraint, 1, 3600); m_slowCif4MPI.SetConstraints(PASN_Object::FixedConstraint, 1, 3600); m_slowCif16MPI.SetConstraints(PASN_Object::FixedConstraint, 1, 3600); } #ifndef PASN_NOPRINTON void H245_EnhancementOptions::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_sqcifMPI)) strm << setw(indent+11) << "sqcifMPI = " << setprecision(indent) << m_sqcifMPI << '\n'; if (HasOptionalField(e_qcifMPI)) strm << setw(indent+10) << "qcifMPI = " << setprecision(indent) << m_qcifMPI << '\n'; if (HasOptionalField(e_cifMPI)) strm << setw(indent+9) << "cifMPI = " << setprecision(indent) << m_cifMPI << '\n'; if (HasOptionalField(e_cif4MPI)) strm << setw(indent+10) << "cif4MPI = " << setprecision(indent) << m_cif4MPI << '\n'; if (HasOptionalField(e_cif16MPI)) strm << setw(indent+11) << "cif16MPI = " << setprecision(indent) << m_cif16MPI << '\n'; strm << setw(indent+13) << "maxBitRate = " << setprecision(indent) << m_maxBitRate << '\n'; strm << setw(indent+21) << "unrestrictedVector = " << setprecision(indent) << m_unrestrictedVector << '\n'; strm << setw(indent+19) << "arithmeticCoding = " << setprecision(indent) << m_arithmeticCoding << '\n'; strm << setw(indent+36) << "temporalSpatialTradeOffCapability = " << setprecision(indent) << m_temporalSpatialTradeOffCapability << '\n'; if (HasOptionalField(e_slowSqcifMPI)) strm << setw(indent+15) << "slowSqcifMPI = " << setprecision(indent) << m_slowSqcifMPI << '\n'; if (HasOptionalField(e_slowQcifMPI)) strm << setw(indent+14) << "slowQcifMPI = " << setprecision(indent) << m_slowQcifMPI << '\n'; if (HasOptionalField(e_slowCifMPI)) strm << setw(indent+13) << "slowCifMPI = " << setprecision(indent) << m_slowCifMPI << '\n'; if (HasOptionalField(e_slowCif4MPI)) strm << setw(indent+14) << "slowCif4MPI = " << setprecision(indent) << m_slowCif4MPI << '\n'; if (HasOptionalField(e_slowCif16MPI)) strm << setw(indent+15) << "slowCif16MPI = " << setprecision(indent) << m_slowCif16MPI << '\n'; strm << setw(indent+20) << "errorCompensation = " << setprecision(indent) << m_errorCompensation << '\n'; if (HasOptionalField(e_h263Options)) strm << setw(indent+14) << "h263Options = " << setprecision(indent) << m_h263Options << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_EnhancementOptions::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_EnhancementOptions), PInvalidCast); #endif const H245_EnhancementOptions & other = (const H245_EnhancementOptions &)obj; Comparison result; if ((result = m_sqcifMPI.Compare(other.m_sqcifMPI)) != EqualTo) return result; if ((result = m_qcifMPI.Compare(other.m_qcifMPI)) != EqualTo) return result; if ((result = m_cifMPI.Compare(other.m_cifMPI)) != EqualTo) return result; if ((result = m_cif4MPI.Compare(other.m_cif4MPI)) != EqualTo) return result; if ((result = m_cif16MPI.Compare(other.m_cif16MPI)) != EqualTo) return result; if ((result = m_maxBitRate.Compare(other.m_maxBitRate)) != EqualTo) return result; if ((result = m_unrestrictedVector.Compare(other.m_unrestrictedVector)) != EqualTo) return result; if ((result = m_arithmeticCoding.Compare(other.m_arithmeticCoding)) != EqualTo) return result; if ((result = m_temporalSpatialTradeOffCapability.Compare(other.m_temporalSpatialTradeOffCapability)) != EqualTo) return result; if ((result = m_slowSqcifMPI.Compare(other.m_slowSqcifMPI)) != EqualTo) return result; if ((result = m_slowQcifMPI.Compare(other.m_slowQcifMPI)) != EqualTo) return result; if ((result = m_slowCifMPI.Compare(other.m_slowCifMPI)) != EqualTo) return result; if ((result = m_slowCif4MPI.Compare(other.m_slowCif4MPI)) != EqualTo) return result; if ((result = m_slowCif16MPI.Compare(other.m_slowCif16MPI)) != EqualTo) return result; if ((result = m_errorCompensation.Compare(other.m_errorCompensation)) != EqualTo) return result; if ((result = m_h263Options.Compare(other.m_h263Options)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_EnhancementOptions::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_sqcifMPI)) length += m_sqcifMPI.GetObjectLength(); if (HasOptionalField(e_qcifMPI)) length += m_qcifMPI.GetObjectLength(); if (HasOptionalField(e_cifMPI)) length += m_cifMPI.GetObjectLength(); if (HasOptionalField(e_cif4MPI)) length += m_cif4MPI.GetObjectLength(); if (HasOptionalField(e_cif16MPI)) length += m_cif16MPI.GetObjectLength(); length += m_maxBitRate.GetObjectLength(); length += m_unrestrictedVector.GetObjectLength(); length += m_arithmeticCoding.GetObjectLength(); length += m_temporalSpatialTradeOffCapability.GetObjectLength(); if (HasOptionalField(e_slowSqcifMPI)) length += m_slowSqcifMPI.GetObjectLength(); if (HasOptionalField(e_slowQcifMPI)) length += m_slowQcifMPI.GetObjectLength(); if (HasOptionalField(e_slowCifMPI)) length += m_slowCifMPI.GetObjectLength(); if (HasOptionalField(e_slowCif4MPI)) length += m_slowCif4MPI.GetObjectLength(); if (HasOptionalField(e_slowCif16MPI)) length += m_slowCif16MPI.GetObjectLength(); length += m_errorCompensation.GetObjectLength(); if (HasOptionalField(e_h263Options)) length += m_h263Options.GetObjectLength(); return length; } PBoolean H245_EnhancementOptions::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_sqcifMPI) && !m_sqcifMPI.Decode(strm)) return FALSE; if (HasOptionalField(e_qcifMPI) && !m_qcifMPI.Decode(strm)) return FALSE; if (HasOptionalField(e_cifMPI) && !m_cifMPI.Decode(strm)) return FALSE; if (HasOptionalField(e_cif4MPI) && !m_cif4MPI.Decode(strm)) return FALSE; if (HasOptionalField(e_cif16MPI) && !m_cif16MPI.Decode(strm)) return FALSE; if (!m_maxBitRate.Decode(strm)) return FALSE; if (!m_unrestrictedVector.Decode(strm)) return FALSE; if (!m_arithmeticCoding.Decode(strm)) return FALSE; if (!m_temporalSpatialTradeOffCapability.Decode(strm)) return FALSE; if (HasOptionalField(e_slowSqcifMPI) && !m_slowSqcifMPI.Decode(strm)) return FALSE; if (HasOptionalField(e_slowQcifMPI) && !m_slowQcifMPI.Decode(strm)) return FALSE; if (HasOptionalField(e_slowCifMPI) && !m_slowCifMPI.Decode(strm)) return FALSE; if (HasOptionalField(e_slowCif4MPI) && !m_slowCif4MPI.Decode(strm)) return FALSE; if (HasOptionalField(e_slowCif16MPI) && !m_slowCif16MPI.Decode(strm)) return FALSE; if (!m_errorCompensation.Decode(strm)) return FALSE; if (HasOptionalField(e_h263Options) && !m_h263Options.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_EnhancementOptions::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_sqcifMPI)) m_sqcifMPI.Encode(strm); if (HasOptionalField(e_qcifMPI)) m_qcifMPI.Encode(strm); if (HasOptionalField(e_cifMPI)) m_cifMPI.Encode(strm); if (HasOptionalField(e_cif4MPI)) m_cif4MPI.Encode(strm); if (HasOptionalField(e_cif16MPI)) m_cif16MPI.Encode(strm); m_maxBitRate.Encode(strm); m_unrestrictedVector.Encode(strm); m_arithmeticCoding.Encode(strm); m_temporalSpatialTradeOffCapability.Encode(strm); if (HasOptionalField(e_slowSqcifMPI)) m_slowSqcifMPI.Encode(strm); if (HasOptionalField(e_slowQcifMPI)) m_slowQcifMPI.Encode(strm); if (HasOptionalField(e_slowCifMPI)) m_slowCifMPI.Encode(strm); if (HasOptionalField(e_slowCif4MPI)) m_slowCif4MPI.Encode(strm); if (HasOptionalField(e_slowCif16MPI)) m_slowCif16MPI.Encode(strm); m_errorCompensation.Encode(strm); if (HasOptionalField(e_h263Options)) m_h263Options.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_EnhancementOptions::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_EnhancementOptions::Class()), PInvalidCast); #endif return new H245_EnhancementOptions(*this); } // // BEnhancementParameters // H245_BEnhancementParameters::H245_BEnhancementParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_numberOfBPictures.SetConstraints(PASN_Object::FixedConstraint, 1, 64); } #ifndef PASN_NOPRINTON void H245_BEnhancementParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "enhancementOptions = " << setprecision(indent) << m_enhancementOptions << '\n'; strm << setw(indent+20) << "numberOfBPictures = " << setprecision(indent) << m_numberOfBPictures << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_BEnhancementParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_BEnhancementParameters), PInvalidCast); #endif const H245_BEnhancementParameters & other = (const H245_BEnhancementParameters &)obj; Comparison result; if ((result = m_enhancementOptions.Compare(other.m_enhancementOptions)) != EqualTo) return result; if ((result = m_numberOfBPictures.Compare(other.m_numberOfBPictures)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_BEnhancementParameters::GetDataLength() const { PINDEX length = 0; length += m_enhancementOptions.GetObjectLength(); length += m_numberOfBPictures.GetObjectLength(); return length; } PBoolean H245_BEnhancementParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_enhancementOptions.Decode(strm)) return FALSE; if (!m_numberOfBPictures.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_BEnhancementParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_enhancementOptions.Encode(strm); m_numberOfBPictures.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_BEnhancementParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_BEnhancementParameters::Class()), PInvalidCast); #endif return new H245_BEnhancementParameters(*this); } #endif // if ! H323_DISABLE_H245 // End of h245_3.cxx h323plus/src/h323caps.cxx0000644000175000017500000040214711647300060013755 0ustar markmark/* * h323caps.cxx * * H.323 protocol handler * * Open H323 Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Contributor(s): ______________________________________. * * $Id: h323caps.cxx,v 1.49 2011/10/18 13:33:36 shorne Exp $ * */ #ifdef __GNUC__ #pragma implementation "h323caps.h" #endif #include #include "h323caps.h" #include "h323ep.h" #include "h323pdu.h" #include "h323neg.h" #include "codec/opalplugin.h" #include "mediafmt.h" #include #define DEFINE_G711_CAPABILITY(cls, code, capName) \ class cls : public H323_G711Capability { \ public: \ cls() : H323_G711Capability(code) { } \ }; \ H323_REGISTER_CAPABILITY(cls, capName) \ #ifdef H323_AUDIO_CODECS DEFINE_G711_CAPABILITY(H323_G711ALaw64Capability, H323_G711Capability::ALaw, "G.711-ALaw-64k{sw}") DEFINE_G711_CAPABILITY(H323_G711uLaw64Capability, H323_G711Capability::muLaw, "G.711-uLaw-64k{sw}") #endif #define new PNEW #if PTRACING ostream & operator<<(ostream & o , H323Capability::MainTypes t) { const char * const names[] = { "Audio", "Video", "Data", "UserInput", "ExtVideo", "GenControl", "ConfControl", "Security" }; return o << names[t]; } ostream & operator<<(ostream & o , H323Capability::CapabilityDirection d) { const char * const names[] = { "Unknown", "Receive", "Transmit", "ReceiveAndTransmit", "NoDirection" }; return o << names[d]; } #endif ///////////////////////////////////////////////////////////////////////////// H323Capability::H323Capability() { assignedCapabilityNumber = 0; // Unassigned capabilityDirection = e_Unknown; rtpPayloadType = RTP_DataFrame::IllegalPayloadType; } PObject::Comparison H323Capability::Compare(const PObject & obj) const { PAssert(PIsDescendant(&obj, H323Capability), PInvalidCast); const H323Capability & other = (const H323Capability &)obj; int mt = GetMainType(); int omt = other.GetMainType(); if (mt < omt) return LessThan; if (mt > omt) return GreaterThan; int st = GetSubType(); int ost = other.GetSubType(); if (st < ost) return LessThan; if (st > ost) return GreaterThan; PString id = GetIdentifier(); if (!id && id != other.GetIdentifier()) return LessThan; return EqualTo; } void H323Capability::PrintOn(ostream & strm) const { strm << GetFormatName(); if (assignedCapabilityNumber != 0) strm << " <" << assignedCapabilityNumber << '>'; } PString H323Capability::GetIdentifier() const { return PString(); } H323Capability * H323Capability::Create(const PString & name) { H323Capability * cap = H323CapabilityFactory::CreateInstance(name); if (cap == NULL) return NULL; return (H323Capability *)cap->Clone(); } OpalFactoryCodec * H323Capability::CreateCodec(MainTypes ctype, PBoolean isEncoder, const PString & name) { // Build the conversion PString base; switch (ctype) { case e_Audio: base = "L16"; break; case e_Video: base = "YUV420P"; break; default: base = PString(); } PString conv; if (isEncoder) conv = base + "|" + name; else conv = name + "|" + base; return H323PluginCodecManager::CreateCodec(conv); } void H323Capability::CodecListing(MainTypes ctype, PBoolean isEncoder, PStringList & listing) { // Build the conversion PString base; switch (ctype) { case e_Audio: base = "L16"; break; case e_Video: base = "YUV420P"; break; default: base = PString(); } PString match; if (isEncoder) match = base + "|"; else match = "|" + base; H323PluginCodecManager::CodecListing(match,listing); } unsigned H323Capability::GetDefaultSessionID() const { return 0; } void H323Capability::SetTxFramesInPacket(unsigned /*frames*/) { } unsigned H323Capability::GetTxFramesInPacket() const { return 1; } unsigned H323Capability::GetRxFramesInPacket() const { return 1; } PBoolean H323Capability::IsMatch(const PASN_Choice & subTypePDU) const { return subTypePDU.GetTag() == GetSubType(); } PBoolean H323Capability::OnReceivedPDU(const H245_Capability & cap) { switch (cap.GetTag()) { case H245_Capability::e_receiveVideoCapability: case H245_Capability::e_receiveAudioCapability: case H245_Capability::e_receiveDataApplicationCapability: case H245_Capability::e_h233EncryptionReceiveCapability: case H245_Capability::e_receiveUserInputCapability: capabilityDirection = e_Receive; break; case H245_Capability::e_transmitVideoCapability: case H245_Capability::e_transmitAudioCapability: case H245_Capability::e_transmitDataApplicationCapability: case H245_Capability::e_h233EncryptionTransmitCapability: case H245_Capability::e_transmitUserInputCapability: capabilityDirection = e_Transmit; break; case H245_Capability::e_receiveAndTransmitVideoCapability: case H245_Capability::e_receiveAndTransmitAudioCapability: case H245_Capability::e_receiveAndTransmitDataApplicationCapability: case H245_Capability::e_receiveAndTransmitUserInputCapability: capabilityDirection = e_ReceiveAndTransmit; break; case H245_Capability::e_conferenceCapability: case H245_Capability::e_genericControlCapability: case H245_Capability::e_h235SecurityCapability: case H245_Capability::e_maxPendingReplacementFor: capabilityDirection = e_NoDirection; } return TRUE; } PBoolean H323Capability::IsUsable(const H323Connection &) const { return TRUE; } const OpalMediaFormat & H323Capability::GetMediaFormat() const { return PRemoveConst(H323Capability, this)->GetWritableMediaFormat(); } OpalMediaFormat & H323Capability::GetWritableMediaFormat() { if (mediaFormat.IsEmpty()) { PString name = GetFormatName(); name.Delete(name.FindLast('{'), 4); mediaFormat = OpalMediaFormat(name); } return mediaFormat; } ///////////////////////////////////////////////////////////////////////////// H323RealTimeCapability::H323RealTimeCapability() { rtpqos = NULL; } H323RealTimeCapability::H323RealTimeCapability(const H323RealTimeCapability & rtc) : H323Capability(rtc) { #if P_QOS if (rtc.rtpqos != NULL) rtpqos = new RTP_QOS(*rtc.rtpqos); else #endif rtpqos = NULL; } H323RealTimeCapability::~H323RealTimeCapability() { #if P_QOS delete rtpqos; #endif } void H323RealTimeCapability::AttachQoS(RTP_QOS * _rtpqos) { #if P_QOS delete rtpqos; #endif rtpqos = _rtpqos; } H323Channel * H323RealTimeCapability::CreateChannel(H323Connection & connection, H323Channel::Directions dir, unsigned sessionID, const H245_H2250LogicalChannelParameters * param) const { return connection.CreateRealTimeLogicalChannel(*this, dir, sessionID, param, rtpqos); } ///////////////////////////////////////////////////////////////////////////// H323NonStandardCapabilityInfo::H323NonStandardCapabilityInfo(CompareFuncType _compareFunc, const BYTE * dataPtr, PINDEX dataSize) : t35CountryCode(0), t35Extension(0), manufacturerCode(0), nonStandardData(dataPtr, dataSize == 0 && dataPtr != NULL ? strlen((const char *)dataPtr) : dataSize), comparisonOffset(0), comparisonLength(0), compareFunc(_compareFunc) { } H323NonStandardCapabilityInfo::H323NonStandardCapabilityInfo(const BYTE * dataPtr, PINDEX dataSize, PINDEX _offset, PINDEX _len) : t35CountryCode(H323EndPoint::defaultT35CountryCode), t35Extension(H323EndPoint::defaultT35Extension), manufacturerCode(H323EndPoint::defaultManufacturerCode), nonStandardData(dataPtr, dataSize == 0 && dataPtr != NULL ? strlen((const char *)dataPtr) : dataSize), comparisonOffset(_offset), comparisonLength(_len), compareFunc(NULL) { } H323NonStandardCapabilityInfo::H323NonStandardCapabilityInfo(const PString & _oid, const BYTE * dataPtr, PINDEX dataSize, PINDEX _offset, PINDEX _len) : oid(_oid), nonStandardData(dataPtr, dataSize == 0 && dataPtr != NULL ? strlen((const char *)dataPtr) : dataSize), comparisonOffset(_offset), comparisonLength(_len), compareFunc(NULL) { } H323NonStandardCapabilityInfo::H323NonStandardCapabilityInfo(BYTE country, BYTE extension, WORD maufacturer, const BYTE * dataPtr, PINDEX dataSize, PINDEX _offset, PINDEX _len) : t35CountryCode(country), t35Extension(extension), manufacturerCode(maufacturer), nonStandardData(dataPtr, dataSize == 0 && dataPtr != NULL ? strlen((const char *)dataPtr) : dataSize), comparisonOffset(_offset), comparisonLength(_len), compareFunc(NULL) { } H323NonStandardCapabilityInfo::~H323NonStandardCapabilityInfo() { } PBoolean H323NonStandardCapabilityInfo::OnSendingPDU(PBYTEArray & data) const { data = nonStandardData; return data.GetSize() > 0; } PBoolean H323NonStandardCapabilityInfo::OnReceivedPDU(const PBYTEArray & data) { if (CompareData(data) != PObject::EqualTo) return FALSE; nonStandardData = data; return TRUE; } PBoolean H323NonStandardCapabilityInfo::OnSendingNonStandardPDU(PASN_Choice & pdu, unsigned nonStandardTag) const { PBYTEArray data; if (!OnSendingPDU(data)) return FALSE; pdu.SetTag(nonStandardTag); H245_NonStandardParameter & param = (H245_NonStandardParameter &)pdu.GetObject(); if (!oid) { param.m_nonStandardIdentifier.SetTag(H245_NonStandardIdentifier::e_object); PASN_ObjectId & nonStandardIdentifier = param.m_nonStandardIdentifier; nonStandardIdentifier = oid; } else { param.m_nonStandardIdentifier.SetTag(H245_NonStandardIdentifier::e_h221NonStandard); H245_NonStandardIdentifier_h221NonStandard & h221 = param.m_nonStandardIdentifier; h221.m_t35CountryCode = (unsigned)t35CountryCode; h221.m_t35Extension = (unsigned)t35Extension; h221.m_manufacturerCode = (unsigned)manufacturerCode; } param.m_data = data; return data.GetSize() > 0; } PBoolean H323NonStandardCapabilityInfo::OnReceivedNonStandardPDU(const PASN_Choice & pdu, unsigned nonStandardTag) { if (pdu.GetTag() != nonStandardTag) return FALSE; const H245_NonStandardParameter & param = (const H245_NonStandardParameter &)pdu.GetObject(); if (CompareParam(param) != PObject::EqualTo) return FALSE; return OnReceivedPDU(param.m_data); } PBoolean H323NonStandardCapabilityInfo::IsMatch(const H245_NonStandardParameter & param) const { return CompareParam(param) == PObject::EqualTo && CompareData(param.m_data) == PObject::EqualTo; } PObject::Comparison H323NonStandardCapabilityInfo::CompareParam(const H245_NonStandardParameter & param) const { if (compareFunc != NULL) { PluginCodec_H323NonStandardCodecData compareData; PString objectId; if (param.m_nonStandardIdentifier.GetTag() == H245_NonStandardIdentifier::e_object) { const PASN_ObjectId & nonStandardIdentifier = param.m_nonStandardIdentifier; objectId = nonStandardIdentifier.AsString(); compareData.objectId = objectId; } else { const H245_NonStandardIdentifier_h221NonStandard & h221 = param.m_nonStandardIdentifier; compareData.objectId = NULL; compareData.t35CountryCode = (unsigned char)h221.m_t35CountryCode; compareData.t35Extension = (unsigned char)h221.m_t35Extension; compareData.manufacturerCode = (unsigned short)h221.m_manufacturerCode; } const PBYTEArray & data = param.m_data; compareData.data = (const unsigned char *)data; compareData.dataLength = data.GetSize(); return (PObject::Comparison)(*compareFunc)(&compareData); } if (!oid) { if (param.m_nonStandardIdentifier.GetTag() != H245_NonStandardIdentifier::e_object) return PObject::LessThan; const PASN_ObjectId & nonStandardIdentifier = param.m_nonStandardIdentifier; PObject::Comparison cmp = oid.Compare(nonStandardIdentifier.AsString()); if (cmp != PObject::EqualTo) return cmp; } else { if (param.m_nonStandardIdentifier.GetTag() != H245_NonStandardIdentifier::e_h221NonStandard) return PObject::LessThan; const H245_NonStandardIdentifier_h221NonStandard & h221 = param.m_nonStandardIdentifier; if (h221.m_t35CountryCode < (unsigned)t35CountryCode) return PObject::LessThan; if (h221.m_t35CountryCode > (unsigned)t35CountryCode) return PObject::GreaterThan; if (h221.m_t35Extension < (unsigned)t35Extension) return PObject::LessThan; if (h221.m_t35Extension > (unsigned)t35Extension) return PObject::GreaterThan; if (h221.m_manufacturerCode < (unsigned)manufacturerCode) return PObject::LessThan; if (h221.m_manufacturerCode > (unsigned)manufacturerCode) return PObject::GreaterThan; } return CompareData(param.m_data); } PObject::Comparison H323NonStandardCapabilityInfo::CompareInfo(const H323NonStandardCapabilityInfo & other) const { if (compareFunc != NULL) { PluginCodec_H323NonStandardCodecData compareData; PString objectId; if (!other.oid.IsEmpty()) compareData.objectId = other.oid; else { compareData.objectId = NULL; compareData.t35CountryCode = other.t35CountryCode; compareData.t35Extension = other.t35Extension; compareData.manufacturerCode = other.manufacturerCode; } compareData.data = (const unsigned char *)other.nonStandardData; compareData.dataLength = other.nonStandardData.GetSize(); return (*compareFunc)(&compareData); } if (!oid) { if (other.oid.IsEmpty()) return PObject::LessThan; PObject::Comparison cmp = oid.Compare(other.oid); if (cmp != PObject::EqualTo) return cmp; } else { if (other.t35CountryCode < t35CountryCode) return PObject::LessThan; if (other.t35CountryCode > t35CountryCode) return PObject::GreaterThan; if (other.t35Extension < t35Extension) return PObject::LessThan; if (other.t35Extension > t35Extension) return PObject::GreaterThan; if (other.manufacturerCode < manufacturerCode) return PObject::LessThan; if (other.manufacturerCode > manufacturerCode) return PObject::GreaterThan; } return CompareData(other.nonStandardData); } PObject::Comparison H323NonStandardCapabilityInfo::CompareData(const PBYTEArray & data) const { if (comparisonOffset >= nonStandardData.GetSize()) return PObject::LessThan; if (comparisonOffset >= data.GetSize()) return PObject::GreaterThan; PINDEX len = comparisonLength; if (comparisonOffset+len > nonStandardData.GetSize()) len = nonStandardData.GetSize() - comparisonOffset; if (comparisonOffset+len > data.GetSize()) return PObject::GreaterThan; int cmp = memcmp((const BYTE *)nonStandardData + comparisonOffset, (const BYTE *)data + comparisonOffset, len); if (cmp < 0) return PObject::LessThan; if (cmp > 0) return PObject::GreaterThan; return PObject::EqualTo; } ///////////////////////////////////////////////////////////////////////////// struct GenericOptionOrder { PString name; PString order; } OptionOrder[] = { { "h.264", "41,42,3,6,4,5,7,10" }, { "", "" } }; static void capabilityReorder(const PString & capName, H245_ArrayOf_GenericParameter & gen) { PStringArray list; list.SetSize(0); H245_ArrayOf_GenericParameter localGen; localGen.SetSize(0); int j = 0, k = 0; int i = -1; while (!OptionOrder[++i].name) { if (capName.Find(OptionOrder[i].name) == P_MAX_INDEX) continue; list = OptionOrder[i].order.Tokenise(","); localGen.SetSize(gen.GetSize()); if (list.GetSize() > 0) { for (i=0; i < list.GetSize(); i++) { for (j=0; j < gen.GetSize(); j++) { H245_ParameterIdentifier & id = gen[j].m_parameterIdentifier; if (id.GetTag() == H245_ParameterIdentifier::e_standard) { PASN_Integer & val = id; unsigned x = val.GetValue(); if ((list[i].AsInteger() == (int)x)) { localGen[k++] = gen[j]; } } } } break; } } if (localGen.GetSize() > 0) { for (j=0; j < gen.GetSize(); j++) { gen[j] = localGen[j]; } } } H323GenericCapabilityInfo::H323GenericCapabilityInfo(const PString & standardId, PINDEX bitRate) : maxBitRate(bitRate) { identifier = new H245_CapabilityIdentifier(H245_CapabilityIdentifier::e_standard); PASN_ObjectId & object_id = *identifier; object_id = standardId; } H323GenericCapabilityInfo::H323GenericCapabilityInfo(const H323GenericCapabilityInfo & obj) : maxBitRate(obj.maxBitRate) { identifier = new H245_CapabilityIdentifier(*obj.identifier); } H323GenericCapabilityInfo::~H323GenericCapabilityInfo() { delete identifier; } PBoolean H323GenericCapabilityInfo::OnSendingGenericPDU(H245_GenericCapability & pdu, const OpalMediaFormat & mediaFormat, H323Capability::CommandType type) const { pdu.m_capabilityIdentifier = *identifier; #ifdef H323_VIDEO unsigned pbitRate = mediaFormat.GetOptionInteger(OpalVideoFormat::MaxBitRateOption)/100; unsigned bitRate = maxBitRate != 0 ? maxBitRate : pbitRate; if (pbitRate < bitRate) bitRate = pbitRate; #else unsigned bitRate = maxBitRate; #endif if (bitRate != 0) { pdu.IncludeOptionalField(H245_GenericCapability::e_maxBitRate); pdu.m_maxBitRate = bitRate; } for (PINDEX i = 0; i < mediaFormat.GetOptionCount(); i++) { const OpalMediaOption & option = mediaFormat.GetOption(i); OpalMediaOption::H245GenericInfo genericInfo = option.GetH245Generic(); if (genericInfo.mode == OpalMediaOption::H245GenericInfo::None) continue; switch (type) { case H323Capability::e_TCS : if (genericInfo.excludeTCS) continue; break; case H323Capability::e_OLC : if (genericInfo.excludeOLC) continue; break; case H323Capability::e_ReqMode : if (genericInfo.excludeReqMode) continue; break; } H245_GenericParameter * param = new H245_GenericParameter; param->m_parameterIdentifier.SetTag(H245_ParameterIdentifier::e_standard); (PASN_Integer &)param->m_parameterIdentifier = genericInfo.ordinal; unsigned parameterValue = ((const OpalMediaOptionUnsigned &)option).GetValue(); if (PIsDescendant(&option, OpalMediaOptionUnsigned) && parameterValue == 0) continue; if (PIsDescendant(&option, OpalMediaOptionBoolean)) { if (!((const OpalMediaOptionBoolean &)option).GetValue()) { delete param; continue; // Do not include a logical at all if it is false } param->m_parameterValue.SetTag(H245_ParameterValue::e_logical); } else if (PIsDescendant(&option, OpalMediaOptionUnsigned)) { unsigned tag; switch (genericInfo.integerType) { default : case OpalMediaOption::H245GenericInfo::UnsignedInt : tag = option.GetMerge() == OpalMediaOption::MinMerge ? H245_ParameterValue::e_unsignedMin : H245_ParameterValue::e_unsignedMax; break; case OpalMediaOption::H245GenericInfo::Unsigned32 : tag = option.GetMerge() == OpalMediaOption::MinMerge ? H245_ParameterValue::e_unsigned32Min : H245_ParameterValue::e_unsigned32Max; break; case OpalMediaOption::H245GenericInfo::BooleanArray : tag = H245_ParameterValue::e_booleanArray; break; } param->m_parameterValue.SetTag(tag); (PASN_Integer &)param->m_parameterValue = parameterValue; } else { param->m_parameterValue.SetTag(H245_ParameterValue::e_octetString); PASN_OctetString & octetString = param->m_parameterValue; if (PIsDescendant(&option, OpalMediaOptionOctets)) octetString = ((const OpalMediaOptionOctets &)option).GetValue(); else octetString = option.AsString(); } if (genericInfo.mode == OpalMediaOption::H245GenericInfo::Collapsing) { pdu.IncludeOptionalField(H245_GenericCapability::e_collapsing); pdu.m_collapsing.Append(param); } else { pdu.IncludeOptionalField(H245_GenericCapability::e_nonCollapsing); pdu.m_nonCollapsing.Append(param); } } if (pdu.m_collapsing.GetSize() > 0) capabilityReorder(mediaFormat,pdu.m_collapsing); return TRUE; } PBoolean H323GenericCapabilityInfo::OnReceivedGenericPDU(OpalMediaFormat & mediaFormat, const H245_GenericCapability & pdu, H323Capability::CommandType type) { if (pdu.m_capabilityIdentifier != *identifier) return FALSE; if (pdu.HasOptionalField(H245_GenericCapability::e_maxBitRate)) { maxBitRate = pdu.m_maxBitRate; #ifdef H323_VIDEO mediaFormat.SetOptionInteger(OpalVideoFormat::MaxBitRateOption, maxBitRate*100); #else mediaFormat.SetOptionInteger(maxBitRate, maxBitRate*100); #endif } for (PINDEX i = 0; i < mediaFormat.GetOptionCount(); i++) { const OpalMediaOption & option = mediaFormat.GetOption(i); OpalMediaOption::H245GenericInfo genericInfo = option.GetH245Generic(); if (genericInfo.mode == OpalMediaOption::H245GenericInfo::None) continue; switch (type) { case H323Capability::e_TCS : if (genericInfo.excludeTCS) continue; break; case H323Capability::e_OLC : if (genericInfo.excludeOLC) continue; break; case H323Capability::e_ReqMode : if (genericInfo.excludeReqMode) continue; break; } const H245_ArrayOf_GenericParameter * params; if (genericInfo.mode == OpalMediaOption::H245GenericInfo::Collapsing) { if (!pdu.HasOptionalField(H245_GenericCapability::e_collapsing)) continue; params = &pdu.m_collapsing; } else { if (!pdu.HasOptionalField(H245_GenericCapability::e_nonCollapsing)) continue; params = &pdu.m_nonCollapsing; } if (PIsDescendant(&option, OpalMediaOptionBoolean)) ((OpalMediaOptionBoolean &)option).SetValue(false); else if (PIsDescendant(&option, OpalMediaOptionUnsigned) && option.GetMerge() == OpalMediaOption::MinMerge) ((OpalMediaOptionUnsigned &)option).SetValue(0); for (PINDEX j = 0; j < params->GetSize(); j++) { const H245_GenericParameter & param = (*params)[j]; if (param.m_parameterIdentifier.GetTag() == H245_ParameterIdentifier::e_standard && (const PASN_Integer &)param.m_parameterIdentifier == genericInfo.ordinal) { if (PIsDescendant(&option, OpalMediaOptionBoolean)) { if (param.m_parameterValue.GetTag() == H245_ParameterValue::e_logical) { ((OpalMediaOptionBoolean &)option).SetValue(true); break; } } else if (PIsDescendant(&option, OpalMediaOptionUnsigned)) { unsigned tag; switch (genericInfo.integerType) { default : case OpalMediaOption::H245GenericInfo::UnsignedInt : tag = option.GetMerge() == OpalMediaOption::MinMerge ? H245_ParameterValue::e_unsignedMin : H245_ParameterValue::e_unsignedMax; break; case OpalMediaOption::H245GenericInfo::Unsigned32 : tag = option.GetMerge() == OpalMediaOption::MinMerge ? H245_ParameterValue::e_unsigned32Min : H245_ParameterValue::e_unsigned32Max; break; case OpalMediaOption::H245GenericInfo::BooleanArray : tag = H245_ParameterValue::e_booleanArray; break; } if (param.m_parameterValue.GetTag() == tag) { ((OpalMediaOptionUnsigned &)option).SetValue((const PASN_Integer &)param.m_parameterValue); break; } } else { if (param.m_parameterValue.GetTag() == H245_ParameterValue::e_octetString) { const PASN_OctetString & octetString = param.m_parameterValue; if (PIsDescendant(&option, OpalMediaOptionOctets)) ((OpalMediaOptionOctets &)option).SetValue(octetString); else ((OpalMediaOption &)option).FromString(octetString.AsString()); break; } } PTRACE(2, "Invalid generic parameter type (" << param.m_parameterValue.GetTagName() << ") for option \"" << option.GetName() << "\" (" << option.GetClass() << ')'); } } } return TRUE; } PBoolean H323GenericCapabilityInfo::IsMatch(const H245_GenericCapability & param) const { return param.m_capabilityIdentifier == *identifier; } PObject::Comparison H323GenericCapabilityInfo::CompareInfo(const H323GenericCapabilityInfo & obj) const { return identifier->Compare(*obj.identifier); } ///////////////////////////////////////////////////////////////////////////// #ifdef H323_AUDIO_CODECS int H323AudioCapability::DSCPvalue = PQoS::guaranteedDSCP; H323AudioCapability::H323AudioCapability(unsigned rx, unsigned tx) { rxFramesInPacket = rx; txFramesInPacket = tx; #if P_QOS // Set to G.729 Settings Avg 56kb/s Peek 110 kb/s rtpqos = new RTP_QOS; rtpqos->dataQoS.SetWinServiceType(SERVICETYPE_GUARANTEED); rtpqos->dataQoS.SetAvgBytesPerSec(7000); rtpqos->dataQoS.SetMaxFrameBytes(680); rtpqos->dataQoS.SetPeakBytesPerSec(13750); rtpqos->dataQoS.SetDSCP(DSCPvalue); rtpqos->ctrlQoS.SetWinServiceType(SERVICETYPE_CONTROLLEDLOAD); rtpqos->ctrlQoS.SetDSCP(PQoS::controlledLoadDSCP); #endif } H323Capability::MainTypes H323AudioCapability::GetMainType() const { return e_Audio; } unsigned H323AudioCapability::GetDefaultSessionID() const { return RTP_Session::DefaultAudioSessionID; } void H323AudioCapability::SetTxFramesInPacket(unsigned frames) { PAssert(frames > 0, PInvalidParameter); if (frames > 256) txFramesInPacket = 256; else txFramesInPacket = frames; } unsigned H323AudioCapability::GetTxFramesInPacket() const { return txFramesInPacket; } unsigned H323AudioCapability::GetRxFramesInPacket() const { return rxFramesInPacket; } void H323AudioCapability::SetDSCPvalue(int newValue) { if (newValue < 64) DSCPvalue = newValue; } int H323AudioCapability::GetDSCPvalue() { return DSCPvalue; } PBoolean H323AudioCapability::OnSendingPDU(H245_Capability & cap) const { switch (capabilityDirection) { case e_Transmit: cap.SetTag(H245_Capability::e_transmitAudioCapability); break; case e_ReceiveAndTransmit: cap.SetTag(H245_Capability::e_receiveAndTransmitAudioCapability); break; case e_Receive : default: cap.SetTag(H245_Capability::e_receiveAudioCapability); } return OnSendingPDU((H245_AudioCapability &)cap, rxFramesInPacket, e_TCS); } PBoolean H323AudioCapability::OnSendingPDU(H245_DataType & dataType) const { dataType.SetTag(H245_DataType::e_audioData); return OnSendingPDU((H245_AudioCapability &)dataType, txFramesInPacket, e_OLC); } PBoolean H323AudioCapability::OnSendingPDU(H245_ModeElement & mode) const { mode.m_type.SetTag(H245_ModeElementType::e_audioMode); return OnSendingPDU((H245_AudioMode &)mode.m_type); } PBoolean H323AudioCapability::OnSendingPDU(H245_AudioCapability & pdu, unsigned packetSize) const { pdu.SetTag(GetSubType()); // Set the maximum number of frames PASN_Integer & value = pdu; value = packetSize; return TRUE; } PBoolean H323AudioCapability::OnSendingPDU(H245_AudioCapability & pdu, unsigned packetSize, CommandType) const { return OnSendingPDU(pdu, packetSize); } PBoolean H323AudioCapability::OnSendingPDU(H245_AudioMode & pdu) const { static const H245_AudioMode::Choices AudioTable[] = { H245_AudioMode::e_nonStandard, H245_AudioMode::e_g711Alaw64k, H245_AudioMode::e_g711Alaw56k, H245_AudioMode::e_g711Ulaw64k, H245_AudioMode::e_g711Ulaw56k, H245_AudioMode::e_g722_64k, H245_AudioMode::e_g722_56k, H245_AudioMode::e_g722_48k, H245_AudioMode::e_g7231, H245_AudioMode::e_g728, H245_AudioMode::e_g729, H245_AudioMode::e_g729AnnexA, H245_AudioMode::e_is11172AudioMode, H245_AudioMode::e_is13818AudioMode, H245_AudioMode::e_g729wAnnexB, H245_AudioMode::e_g729AnnexAwAnnexB, H245_AudioMode::e_g7231AnnexCMode, H245_AudioMode::e_gsmFullRate, H245_AudioMode::e_gsmHalfRate, H245_AudioMode::e_gsmEnhancedFullRate, H245_AudioMode::e_genericAudioMode, H245_AudioMode::e_g729Extensions }; unsigned subType = GetSubType(); if (subType >= PARRAYSIZE(AudioTable)) return FALSE; pdu.SetTag(AudioTable[subType]); return TRUE; } PBoolean H323AudioCapability::OnReceivedPDU(const H245_Capability & cap) { H323Capability::OnReceivedPDU(cap); if (cap.GetTag() != H245_Capability::e_receiveAudioCapability && cap.GetTag() != H245_Capability::e_receiveAndTransmitAudioCapability) return FALSE; unsigned packetSize = txFramesInPacket; if (!OnReceivedPDU((const H245_AudioCapability &)cap, packetSize, e_TCS)) return FALSE; // Clamp our transmit size to maximum allowed if (txFramesInPacket > packetSize) { PTRACE(4, "H323\tCapability tx frames reduced from " << txFramesInPacket << " to " << packetSize); txFramesInPacket = packetSize; } else { PTRACE(4, "H323\tCapability tx frames left at " << txFramesInPacket << " as remote allows " << packetSize); } return TRUE; } PBoolean H323AudioCapability::OnReceivedPDU(const H245_DataType & dataType, PBoolean receiver) { if (dataType.GetTag() != H245_DataType::e_audioData) return FALSE; unsigned & xFramesInPacket = receiver ? rxFramesInPacket : txFramesInPacket; unsigned packetSize = xFramesInPacket; if (!OnReceivedPDU((const H245_AudioCapability &)dataType, packetSize, e_OLC)) return FALSE; // Clamp our transmit size to that of the remote if (xFramesInPacket > packetSize) { PTRACE(4, "H323\tCapability " << (receiver ? 'r' : 't') << "x frames reduced from " << xFramesInPacket << " to " << packetSize); xFramesInPacket = packetSize; } else if (xFramesInPacket < packetSize) { PTRACE(4, "H323\tCapability " << (receiver ? 'r' : 't') << "x frames increased from " << xFramesInPacket << " to " << packetSize); xFramesInPacket = packetSize; } return TRUE; } PBoolean H323AudioCapability::OnReceivedPDU(const H245_AudioCapability & pdu, unsigned & packetSize) { if (pdu.GetTag() != GetSubType()) return FALSE; const PASN_Integer & value = pdu; // Get the maximum number of frames packetSize = value; return TRUE; } PBoolean H323AudioCapability::OnReceivedPDU(const H245_AudioCapability & pdu, unsigned & packetSize, CommandType) { return OnReceivedPDU(pdu, packetSize); } ///////////////////////////////////////////////////////////////////////////// H323GenericAudioCapability::H323GenericAudioCapability( unsigned max, unsigned desired, const PString &standardId, PINDEX maxBitRate) : H323AudioCapability(max, desired), H323GenericCapabilityInfo(standardId, maxBitRate) { } PObject::Comparison H323GenericAudioCapability::Compare(const PObject & obj) const { if (!PIsDescendant(&obj, H323GenericAudioCapability)) return LessThan; return CompareInfo((const H323GenericAudioCapability &)obj); } unsigned H323GenericAudioCapability::GetSubType() const { return H245_AudioCapability::e_genericAudioCapability; } PString H323GenericAudioCapability::GetIdentifier() const { PASN_ObjectId & oid = *identifier; return oid.AsString(); } PBoolean H323GenericAudioCapability::OnSendingPDU(H245_AudioCapability & pdu, unsigned, CommandType type) const { pdu.SetTag(H245_AudioCapability::e_genericAudioCapability); return OnSendingGenericPDU(pdu, GetMediaFormat(), type); } PBoolean H323GenericAudioCapability::OnSendingPDU(H245_AudioMode & pdu) const { pdu.SetTag(H245_VideoMode::e_genericVideoMode); return OnSendingGenericPDU(pdu, GetMediaFormat(), e_ReqMode); } PBoolean H323GenericAudioCapability::OnReceivedPDU(const H245_AudioCapability & pdu, unsigned &, CommandType type) { if( pdu.GetTag() != H245_AudioCapability::e_genericAudioCapability) return FALSE; return OnReceivedGenericPDU(GetWritableMediaFormat(), pdu, type); } PBoolean H323GenericAudioCapability::IsMatch(const PASN_Choice & subTypePDU) const { return H323Capability::IsMatch(subTypePDU) && H323GenericCapabilityInfo::IsMatch((const H245_GenericCapability &)subTypePDU.GetObject()); } ///////////////////////////////////////////////////////////////////////////// H323NonStandardAudioCapability::H323NonStandardAudioCapability( unsigned max, unsigned desired, H323NonStandardCapabilityInfo::CompareFuncType compareFunc, const BYTE * fixedData, PINDEX dataSize ) : H323AudioCapability(max, desired), H323NonStandardCapabilityInfo(compareFunc, fixedData, dataSize) { } H323NonStandardAudioCapability::H323NonStandardAudioCapability(unsigned max, unsigned desired, const BYTE * fixedData, PINDEX dataSize, PINDEX offset, PINDEX length) : H323AudioCapability(max, desired), H323NonStandardCapabilityInfo(fixedData, dataSize, offset, length) { } H323NonStandardAudioCapability::H323NonStandardAudioCapability( unsigned max, unsigned desired, H323EndPoint &, H323NonStandardCapabilityInfo::CompareFuncType compareFunc, const BYTE * fixedData, PINDEX dataSize) : H323AudioCapability(max, desired), H323NonStandardCapabilityInfo(compareFunc, fixedData, dataSize) { } H323NonStandardAudioCapability::H323NonStandardAudioCapability(unsigned max, unsigned desired, H323EndPoint &, const BYTE * fixedData, PINDEX dataSize, PINDEX offset, PINDEX length) : H323AudioCapability(max, desired), H323NonStandardCapabilityInfo(fixedData, dataSize, offset, length) { } H323NonStandardAudioCapability::H323NonStandardAudioCapability(unsigned max, unsigned desired, const PString & oid, const BYTE * fixedData, PINDEX dataSize, PINDEX offset, PINDEX length) : H323AudioCapability(max, desired), H323NonStandardCapabilityInfo(oid, fixedData, dataSize, offset, length) { } H323NonStandardAudioCapability::H323NonStandardAudioCapability(unsigned max, unsigned desired, BYTE country, BYTE extension, WORD maufacturer, const BYTE * fixedData, PINDEX dataSize, PINDEX offset, PINDEX length) : H323AudioCapability(max, desired), H323NonStandardCapabilityInfo(country, extension, maufacturer, fixedData, dataSize, offset, length) { } PObject::Comparison H323NonStandardAudioCapability::Compare(const PObject & obj) const { if (!PIsDescendant(&obj, H323NonStandardAudioCapability)) return LessThan; return CompareInfo((const H323NonStandardAudioCapability &)obj); } unsigned H323NonStandardAudioCapability::GetSubType() const { return H245_AudioCapability::e_nonStandard; } PBoolean H323NonStandardAudioCapability::OnSendingPDU(H245_AudioCapability & pdu, unsigned) const { return OnSendingNonStandardPDU(pdu, H245_AudioCapability::e_nonStandard); } PBoolean H323NonStandardAudioCapability::OnSendingPDU(H245_AudioMode & pdu) const { return OnSendingNonStandardPDU(pdu, H245_AudioMode::e_nonStandard); } PBoolean H323NonStandardAudioCapability::OnReceivedPDU(const H245_AudioCapability & pdu, unsigned &) { return OnReceivedNonStandardPDU(pdu, H245_AudioCapability::e_nonStandard); } PBoolean H323NonStandardAudioCapability::IsMatch(const PASN_Choice & subTypePDU) const { return H323Capability::IsMatch(subTypePDU) && H323NonStandardCapabilityInfo::IsMatch((const H245_NonStandardParameter &)subTypePDU.GetObject()); } #endif // H323_AUDIO_CODECS ///////////////////////////////////////////////////////////////////////////// #ifdef H323_VIDEO int H323VideoCapability::DSCPvalue = PQoS::controlledLoadDSCP; H323VideoCapability::H323VideoCapability() { #if P_QOS // Set to H263CIF Settings rtpqos = new RTP_QOS; rtpqos->dataQoS.SetWinServiceType(SERVICETYPE_CONTROLLEDLOAD); rtpqos->dataQoS.SetAvgBytesPerSec(16000); rtpqos->dataQoS.SetMaxFrameBytes(8192); rtpqos->dataQoS.SetDSCP(DSCPvalue); rtpqos->ctrlQoS.SetWinServiceType(SERVICETYPE_CONTROLLEDLOAD); rtpqos->ctrlQoS.SetDSCP(PQoS::controlledLoadDSCP); #endif } H323Capability::MainTypes H323VideoCapability::GetMainType() const { return e_Video; } PBoolean H323VideoCapability::OnSendingPDU(H245_Capability & cap) const { switch (capabilityDirection) { case e_Transmit: cap.SetTag(H245_Capability::e_transmitVideoCapability); break; case e_ReceiveAndTransmit: cap.SetTag(H245_Capability::e_receiveAndTransmitVideoCapability); break; case e_Receive : default: cap.SetTag(H245_Capability::e_receiveVideoCapability); } return OnSendingPDU((H245_VideoCapability &)cap, e_TCS); } PBoolean H323VideoCapability::OnSendingPDU(H245_DataType & dataType) const { dataType.SetTag(H245_DataType::e_videoData); return OnSendingPDU((H245_VideoCapability &)dataType, e_OLC); } PBoolean H323VideoCapability::OnSendingPDU(H245_VideoCapability & /*pdu*/) const { return FALSE; } PBoolean H323VideoCapability::OnSendingPDU(H245_VideoCapability & pdu, CommandType) const { return OnSendingPDU(pdu); } PBoolean H323VideoCapability::OnSendingPDU(H245_ModeElement & mode) const { mode.m_type.SetTag(H245_ModeElementType::e_videoMode); return OnSendingPDU((H245_VideoMode &)mode.m_type); } PBoolean H323VideoCapability::OnReceivedPDU(const H245_Capability & cap) { H323Capability::OnReceivedPDU(cap); if (cap.GetTag() != H245_Capability::e_receiveVideoCapability && cap.GetTag() != H245_Capability::e_receiveAndTransmitVideoCapability) return FALSE; return OnReceivedPDU((const H245_VideoCapability &)cap, e_TCS); } PBoolean H323VideoCapability::OnReceivedPDU(const H245_DataType & dataType, PBoolean) { if (dataType.GetTag() != H245_DataType::e_videoData) return FALSE; return OnReceivedPDU((const H245_VideoCapability &)dataType, e_OLC); } PBoolean H323VideoCapability::OnReceivedPDU(const H245_VideoCapability &) { return FALSE; } PBoolean H323VideoCapability::OnReceivedPDU(const H245_VideoCapability & pdu, CommandType) { return OnReceivedPDU(pdu); } unsigned H323VideoCapability::GetDefaultSessionID() const { return RTP_Session::DefaultVideoSessionID; } void H323VideoCapability::SetDSCPvalue(int newValue) { if (newValue < 64) DSCPvalue = newValue; } int H323VideoCapability::GetDSCPvalue() { return DSCPvalue; } ///////////////////////////////////////////////////////////////////////////// H323NonStandardVideoCapability::H323NonStandardVideoCapability(const BYTE * fixedData, PINDEX dataSize, PINDEX offset, PINDEX length) : H323NonStandardCapabilityInfo(fixedData, dataSize, offset, length) { } H323NonStandardVideoCapability::H323NonStandardVideoCapability(H323EndPoint &, const BYTE * fixedData, PINDEX dataSize, PINDEX offset, PINDEX length) : H323NonStandardCapabilityInfo(fixedData, dataSize, offset, length) { } H323NonStandardVideoCapability::H323NonStandardVideoCapability(const PString & oid, const BYTE * fixedData, PINDEX dataSize, PINDEX offset, PINDEX length) : H323NonStandardCapabilityInfo(oid, fixedData, dataSize, offset, length) { } H323NonStandardVideoCapability::H323NonStandardVideoCapability(BYTE country, BYTE extension, WORD maufacturer, const BYTE * fixedData, PINDEX dataSize, PINDEX offset, PINDEX length) : H323NonStandardCapabilityInfo(country, extension, maufacturer, fixedData, dataSize, offset, length) { } PObject::Comparison H323NonStandardVideoCapability::Compare(const PObject & obj) const { if (!PIsDescendant(&obj, H323NonStandardVideoCapability)) return LessThan; return CompareInfo((const H323NonStandardVideoCapability &)obj); } unsigned H323NonStandardVideoCapability::GetSubType() const { return H245_VideoCapability::e_nonStandard; } PBoolean H323NonStandardVideoCapability::OnSendingPDU(H245_VideoCapability & pdu) const { return OnSendingNonStandardPDU(pdu, H245_VideoCapability::e_nonStandard); } PBoolean H323NonStandardVideoCapability::OnSendingPDU(H245_VideoMode & pdu) const { return OnSendingNonStandardPDU(pdu, H245_VideoMode::e_nonStandard); } PBoolean H323NonStandardVideoCapability::OnReceivedPDU(const H245_VideoCapability & pdu) { return OnReceivedNonStandardPDU(pdu, H245_VideoCapability::e_nonStandard); } PBoolean H323NonStandardVideoCapability::IsMatch(const PASN_Choice & subTypePDU) const { return H323Capability::IsMatch(subTypePDU) && H323NonStandardCapabilityInfo::IsMatch((const H245_NonStandardParameter &)subTypePDU.GetObject()); } ///////////////////////////////////////////////////////////////////////////// H323GenericVideoCapability::H323GenericVideoCapability( const PString &capabilityId, PINDEX maxBitRate) : H323VideoCapability(), H323GenericCapabilityInfo(capabilityId, maxBitRate) { } PObject::Comparison H323GenericVideoCapability::Compare(const PObject & obj) const { if (!PIsDescendant(&obj, H323GenericVideoCapability)) return LessThan; return CompareInfo((const H323GenericVideoCapability &)obj); } unsigned H323GenericVideoCapability::GetSubType() const { return H245_VideoCapability::e_genericVideoCapability; } PString H323GenericVideoCapability::GetIdentifier() const { PASN_ObjectId & oid = *identifier; return oid.AsString(); } PBoolean H323GenericVideoCapability::OnSendingPDU(H245_VideoCapability & pdu, CommandType type) const { pdu.SetTag(H245_VideoCapability::e_genericVideoCapability); return OnSendingGenericPDU(pdu, GetMediaFormat(), type); } PBoolean H323GenericVideoCapability::OnSendingPDU(H245_VideoMode & pdu) const { pdu.SetTag(H245_VideoMode::e_genericVideoMode); return OnSendingGenericPDU(pdu, GetMediaFormat(), e_ReqMode); } PBoolean H323GenericVideoCapability::OnReceivedPDU(const H245_VideoCapability & pdu, CommandType type) { if (pdu.GetTag() != H245_VideoCapability::e_genericVideoCapability) return FALSE; return OnReceivedGenericPDU(GetWritableMediaFormat(), pdu, type); } PBoolean H323GenericVideoCapability::IsMatch(const PASN_Choice & subTypePDU) const { return H323Capability::IsMatch(subTypePDU) && H323GenericCapabilityInfo::IsMatch((const H245_GenericCapability &)subTypePDU.GetObject()); } ///////////////////////////////////////////////////////////////////////////// #ifdef H323_H239 H323ExtendedVideoCapability::H323ExtendedVideoCapability( const PString &capabilityId ) : H323Capability(), H323GenericCapabilityInfo(capabilityId, 0) { table.SetSize(0); SetCapabilityDirection(H323Capability::e_NoDirection); } PBoolean H323ExtendedVideoCapability::OnSendingPDU(H245_Capability & cap) const { cap.SetTag(H245_Capability::e_genericControlCapability); return OnSendingPDU((H245_GenericCapability &)cap, e_TCS); } PBoolean H323ExtendedVideoCapability::OnReceivedPDU(const H245_Capability & cap) { H323Capability::OnReceivedPDU(cap); if( cap.GetTag()!= H245_Capability::e_genericControlCapability) return FALSE; return OnReceivedPDU((const H245_GenericCapability &)cap, e_TCS); } PBoolean H323ExtendedVideoCapability::OnReceivedPDU(const H245_GenericCapability & pdu, CommandType type) { OpalMediaFormat mediaFormat = GetMediaFormat(); return OnReceivedGenericPDU(mediaFormat, pdu, type); } PBoolean H323ExtendedVideoCapability::OnSendingPDU(H245_GenericCapability & pdu, CommandType type) const { return OnSendingGenericPDU(pdu, GetMediaFormat(), type); } PObject::Comparison H323ExtendedVideoCapability::Compare(const PObject & obj) const { if (!PIsDescendant(&obj, H323ExtendedVideoCapability)) return LessThan; return CompareInfo((const H323ExtendedVideoCapability &)obj); } H323Capability::MainTypes H323ExtendedVideoCapability::GetMainType() const { return H323Capability::e_GenericControl; } unsigned H323ExtendedVideoCapability::GetSubType() const { return 0; // Not used } unsigned H323ExtendedVideoCapability::GetDefaultSessionID() const { return OpalMediaFormat::DefaultExtVideoSessionID; } PBoolean H323ExtendedVideoCapability::OnSendingPDU(H245_DataType & /*pdu*/) const { return FALSE; } PBoolean H323ExtendedVideoCapability::OnSendingPDU(H245_ModeElement & pdu) const { if (table.GetSize() > 0) return table[0].OnSendingPDU(pdu); else return FALSE; } PBoolean H323ExtendedVideoCapability::OnReceivedPDU(const H245_DataType & /*pdu*/, PBoolean /*receiver*/) { return FALSE; } PBoolean H323ExtendedVideoCapability::IsMatch(const PASN_Choice & subTypePDU) const { return H323Capability::IsMatch(subTypePDU) && H323GenericCapabilityInfo::IsMatch((const H245_GenericCapability &)subTypePDU.GetObject()); } void H323ExtendedVideoCapability::AddAllCapabilities( H323Capabilities & basecapabilities, PINDEX descriptorNum,PINDEX simultaneous) { H323ExtendedVideoFactory::KeyList_T extCaps = H323ExtendedVideoFactory::GetKeyList(); if (extCaps.size() > 0) { H323CodecExtendedVideoCapability * capability = new H323CodecExtendedVideoCapability(); H323ExtendedVideoFactory::KeyList_T::const_iterator r; PINDEX num = P_MAX_INDEX; for (r = extCaps.begin(); r != extCaps.end(); ++r) { H323CodecExtendedVideoCapability * extCapability = (H323CodecExtendedVideoCapability *)capability->Clone(); extCapability->AddCapability(*r); num = basecapabilities.SetCapability(descriptorNum, simultaneous,extCapability); simultaneous = num; } simultaneous = P_MAX_INDEX; basecapabilities.SetCapability(descriptorNum, simultaneous,new H323ControlExtendedVideoCapability()); delete capability; } } H323Capability & H323ExtendedVideoCapability::operator[](PINDEX i) { return table[i]; } H323Capability * H323ExtendedVideoCapability::GetAt(PINDEX i) const { if (extCapabilities.GetSize() > 0) return &extCapabilities[i]; if (table.GetSize() > 0) return &table[i]; return NULL; } PINDEX H323ExtendedVideoCapability::GetSize() const { if (extCapabilities.GetSize() > 0) return extCapabilities.GetSize(); if (table.GetSize() > 0) return table.GetSize(); return 0; } H323Channel * H323ExtendedVideoCapability::CreateChannel( H323Connection & /*connection*/, H323Channel::Directions /*dir*/, unsigned /*sessionID*/, const H245_H2250LogicalChannelParameters * /*param*/ ) const { return NULL; } H323Codec * H323ExtendedVideoCapability::CreateCodec( H323Codec::Direction /*direction*/ ) const { return NULL; } const H323Capabilities & H323ExtendedVideoCapability::GetCapabilities() const { return extCapabilities; } /////////////////////////////////////////////////////////////////////////////////////////////////// // H.239 Control // These H.245 functions need to be spun off into a common utilities class H245_GenericParameter & buildGenericInteger(H245_GenericParameter & param, unsigned id, unsigned val) { H245_ParameterIdentifier & idm = param.m_parameterIdentifier; idm.SetTag(H245_ParameterIdentifier::e_standard); PASN_Integer & idx = idm; idx = id; H245_ParameterValue & genvalue = param.m_parameterValue; genvalue.SetTag(H245_ParameterValue::e_unsignedMin); PASN_Integer & xval = genvalue; xval = val; return param; } H245_GenericParameter & buildGenericLogical(H245_GenericParameter & param, unsigned id) { H245_ParameterIdentifier & paramId = param.m_parameterIdentifier; paramId.SetTag(H245_ParameterIdentifier::e_standard); PASN_Integer & idx = paramId; idx = id; H245_ParameterValue & val = param.m_parameterValue; val.SetTag(H245_ParameterValue::e_logical); return param; } //////////////////////////////////////////////////////////////////// void BuildH239GenericMessageIndication(H239Control & ctrl, H323Connection & connection, H323ControlPDU& pdu, H239Control::H239SubMessages submesId) { PTRACE(4,"H239\tSending Generic Message Indication."); H245_GenericMessage & cap = pdu.Build(H245_IndicationMessage::e_genericIndication); H245_CapabilityIdentifier & id = cap.m_messageIdentifier; id.SetTag(H245_CapabilityIdentifier::e_standard); PASN_ObjectId & gid = id; gid.SetValue(OpalPluginCodec_Identifer_H239_GenericMessage); cap.IncludeOptionalField(H245_GenericMessage::e_subMessageIdentifier); PASN_Integer & subMesID = cap.m_subMessageIdentifier; subMesID = submesId; cap.IncludeOptionalField(H245_GenericMessage::e_messageContent); H245_ArrayOf_GenericParameter & msg = cap.m_messageContent; msg.SetSize(2); buildGenericInteger(msg[0], H239Control::h239gpTerminalLabel, 0); buildGenericInteger(msg[1], H239Control::h239gpChannelId, connection.GetLogicalChannels()->GetLastChannelNumber()); } void BuildH239GenericMessageResponse(H239Control & ctrl, H323Connection & connection, H323ControlPDU& pdu, H239Control::H239SubMessages submesId, PBoolean approved) { H245_GenericMessage & cap = pdu.Build(H245_ResponseMessage::e_genericResponse); H245_CapabilityIdentifier & id = cap.m_messageIdentifier; id.SetTag(H245_CapabilityIdentifier::e_standard); PASN_ObjectId & gid = id; gid.SetValue(OpalPluginCodec_Identifer_H239_GenericMessage); cap.IncludeOptionalField(H245_GenericMessage::e_subMessageIdentifier); PASN_Integer & subMesID = cap.m_subMessageIdentifier; subMesID = submesId; cap.IncludeOptionalField(H245_GenericMessage::e_messageContent); H245_ArrayOf_GenericParameter & msg = cap.m_messageContent; if (!approved) { msg.SetSize(1); buildGenericLogical(msg[0], H239Control::h239gpReject); } else { msg.SetSize(3); buildGenericLogical(msg[0], H239Control::h239gpAcknowledge); buildGenericInteger(msg[1], H239Control::h239gpTerminalLabel, 0); buildGenericInteger(msg[2], H239Control::h239gpChannelId, ctrl.GetChannelNum(H323Capability::e_Receive)); } } void BuildH239GenericMessageRequest(H239Control & ctrl, H323Connection & connection, H323ControlPDU& pdu, H239Control::H239SubMessages submesId) { H245_GenericMessage & cap = pdu.Build(H245_RequestMessage::e_genericRequest); H245_CapabilityIdentifier & id = cap.m_messageIdentifier; id.SetTag(H245_CapabilityIdentifier::e_standard); PASN_ObjectId & gid = id; gid.SetValue(OpalPluginCodec_Identifer_H239_GenericMessage); cap.IncludeOptionalField(H245_GenericMessage::e_subMessageIdentifier); PASN_Integer & subMesID = cap.m_subMessageIdentifier; subMesID = submesId; cap.IncludeOptionalField(H245_GenericMessage::e_messageContent); H245_ArrayOf_GenericParameter & msg = cap.m_messageContent; msg.SetSize(3); buildGenericInteger(msg[0], H239Control::h239gpTerminalLabel, 0); int channelID = connection.GetLogicalChannels()->GetLastChannelNumber()+1; ctrl.SetRequestedChanNum(channelID); buildGenericInteger(msg[1], H239Control::h239gpChannelId,channelID); buildGenericInteger(msg[2], H239Control::h239gpSymmetryBreaking, 4); } void BuildH239GenericMessageCommand(H239Control & ctrl, H323Connection & connection, H323ControlPDU& pdu, H239Control::H239SubMessages submesId, PBoolean option) { H245_GenericMessage & cap = pdu.Build(H245_CommandMessage::e_genericCommand); H245_CapabilityIdentifier & id = cap.m_messageIdentifier; id.SetTag(H245_CapabilityIdentifier::e_standard); PASN_ObjectId & gid = id; gid.SetValue(OpalPluginCodec_Identifer_H239_GenericMessage); cap.IncludeOptionalField(H245_GenericMessage::e_subMessageIdentifier); PASN_Integer & num = cap.m_subMessageIdentifier; num = submesId; cap.IncludeOptionalField(H245_GenericMessage::e_messageContent); H245_ArrayOf_GenericParameter & msg = cap.m_messageContent; msg.SetSize(2); buildGenericInteger(msg[0], H239Control::h239gpTerminalLabel, 0); buildGenericInteger(msg[1], H239Control::h239gpChannelId, ctrl.GetChannelNum(option ? H323Capability::e_Transmit : H323Capability::e_Receive)); } bool OnH239GenericMessageRequest(H239Control & ctrl, H323Connection & connection, const H245_ArrayOf_GenericParameter & content) { PTRACE(4,"H239\tReceived Generic Request."); for (int i = 0; i < content.GetSize(); ++i) { H245_GenericParameter& param = content[i]; switch ((PASN_Integer)param.m_parameterIdentifier) { case H239Control::h239gpBitRate: break; case H239Control::h239gpChannelId: ctrl.SetChannelNum((PASN_Integer)param.m_parameterValue, H323Capability::e_Receive); break; case H239Control::h239gpSymmetryBreaking: case H239Control::h239gpTerminalLabel: default: break; } } // We send back to the connection to allow the implementor to delay the reply message till it is ready.-SH return connection.OnH239ControlRequest(&ctrl); } PBoolean OnH239GenericMessageResponse(H239Control & ctrl, H323Connection & connection, const H245_ArrayOf_GenericParameter & content) { PTRACE(4,"H239\tReceived Generic Response."); bool m_allowOutgoingExtVideo=true; unsigned channelID=0; int defaultSession=0; for (int i = 0; i < content.GetSize(); ++i) { H245_GenericParameter& param = content[i]; switch ((PASN_Integer)param.m_parameterIdentifier) { case H239Control::h239gpChannelId: channelID = (PASN_Integer)param.m_parameterValue; if (channelID == ctrl.GetChannelNum(H323Capability::e_Receive)) { PTRACE(4,"H239\tRec'd Response for Receive side. Close Receive Channel!"); ctrl.SendGenericMessage(H239Control::e_h245command, &connection, false); defaultSession = ctrl.GetRequestedChanNum(); } break; case H239Control::h239gpAcknowledge: break; case H239Control::h239gpReject: connection.OpenExtendedVideoSessionDenied(); m_allowOutgoingExtVideo = false; break; case H239Control::h239gpBitRate: case H239Control::h239gpSymmetryBreaking: case H239Control::h239gpTerminalLabel: break; default: m_allowOutgoingExtVideo = false; break; } } if (channelID > 0 && channelID == ctrl.GetChannelNum(H323Capability::e_Transmit)) { PTRACE(4,"H239\tLate Acknowledge IGNORE"); m_allowOutgoingExtVideo = false; } if (m_allowOutgoingExtVideo) return connection.OpenExtendedVideoSession(ctrl.GetChannelNum(H323Capability::e_Transmit), defaultSession); return true; } PBoolean OnH239GenericMessageCommand(H239Control & ctrl, H323Connection & connection, const H245_ArrayOf_GenericParameter & content) { PTRACE(4,"H239\tReceived Generic Command."); return connection.OnH239ControlCommand(&ctrl); } /////////////////////////////////////////// H323ControlExtendedVideoCapability::H323ControlExtendedVideoCapability() : H323ExtendedVideoCapability(OpalPluginCodec_Identifer_H239) , m_outgoingChanNum(0, false), m_incomingChanNum(0,false), m_requestedChanNum(0) { } PBoolean H323ControlExtendedVideoCapability::CloseChannel(H323Connection * connection, H323Capability::CapabilityDirection dir) { SendGenericMessage(H239Control::e_h245command, connection, dir == H323Capability::e_Transmit); return connection->CloseExtendedVideoSession(GetChannelNum(dir)); } PBoolean H323ControlExtendedVideoCapability::SendGenericMessage(h245MessageType msgtype, H323Connection * connection, PBoolean option) { H323ControlPDU pdu; switch (msgtype) { case e_h245request: BuildH239GenericMessageRequest(*this,*connection,pdu,H239Control::e_presentationTokenRequest); break; case e_h245response: BuildH239GenericMessageResponse(*this,*connection,pdu,H239Control::e_presentationTokenResponse,option); break; case e_h245command: BuildH239GenericMessageCommand(*this, *connection, pdu, H239Control::e_presentationTokenRelease,option); break; case e_h245indication: default: return true; } return connection->WriteControlPDU(pdu); } PBoolean H323ControlExtendedVideoCapability::HandleGenericMessage(h245MessageType type, H323Connection * con, const H245_ArrayOf_GenericParameter * pdu) { switch (type) { case e_h245request: return OnH239GenericMessageRequest(*this,*con,*pdu); case e_h245response: return OnH239GenericMessageResponse(*this,*con,*pdu); case e_h245command: return OnH239GenericMessageCommand(*this,*con,*pdu); case e_h245indication: default: return true; } } H323ChannelNumber & H323ControlExtendedVideoCapability::GetChannelNum(H323Capability::CapabilityDirection dir) { switch (dir) { case e_Transmit: return m_outgoingChanNum; case e_Receive: default: return m_incomingChanNum; } } void H323ControlExtendedVideoCapability::SetChannelNum(unsigned num, H323Capability::CapabilityDirection dir) { switch (dir) { case e_Transmit: m_outgoingChanNum = H323ChannelNumber(num, false); break; case e_Receive: default: m_incomingChanNum = H323ChannelNumber(num, true); break; } } void H323ControlExtendedVideoCapability::SetRequestedChanNum(int num) { m_requestedChanNum = num; } int H323ControlExtendedVideoCapability::GetRequestedChanNum() { return m_requestedChanNum; } /////////////////////////////////////////////////////////////////////////////////////////////////// H323CodecExtendedVideoCapability::H323CodecExtendedVideoCapability() : H323ExtendedVideoCapability(OpalPluginCodec_Identifer_H239_Video) { SetCapabilityDirection(H323Capability::e_Transmit); table.AllowDeleteObjects(false); } H323CodecExtendedVideoCapability::~H323CodecExtendedVideoCapability() { extCapabilities.RemoveAll(); } void H323CodecExtendedVideoCapability::AddCapability(const PString & cap) { extCapabilities.Add(H323ExtendedVideoFactory::CreateInstance(cap)); } PString H323CodecExtendedVideoCapability::GetFormatName() const { PStringStream strm; strm << "H.239"; if (extCapabilities.GetSize() > 0) { for (PINDEX i=0; i< extCapabilities.GetSize(); i++) { strm << '(' << extCapabilities[i] << ')'; } } return strm; } H323Capability::MainTypes H323CodecExtendedVideoCapability::GetMainType() const { return H323Capability::e_Video; } unsigned H323CodecExtendedVideoCapability::GetSubType() const { return H245_VideoCapability::e_extendedVideoCapability; } PObject * H323CodecExtendedVideoCapability::Clone() const { return new H323CodecExtendedVideoCapability(*this); } H323Channel * H323CodecExtendedVideoCapability::CreateChannel(H323Connection & connection, H323Channel::Directions dir,unsigned sessionID,const H245_H2250LogicalChannelParameters * param ) const { if (table.GetSize() == 0) return NULL; return connection.CreateRealTimeLogicalChannel(*this, dir, sessionID, param); } H323Codec * H323CodecExtendedVideoCapability::CreateCodec(H323Codec::Direction direction ) const { if (extCapabilities.GetSize() == 0) return NULL; return extCapabilities[0].CreateCodec(direction); } PBoolean H323CodecExtendedVideoCapability::OnSendingPDU(H245_Capability & cap) const { cap.SetTag(H245_Capability::e_receiveVideoCapability); return OnSendingPDU((H245_VideoCapability &)cap, e_TCS); } PBoolean H323CodecExtendedVideoCapability::OnReceivedPDU(const H245_Capability & cap) { H323Capability::OnReceivedPDU(cap); if (extCapabilities.GetSize() == 0) return FALSE; const H245_VideoCapability & vidcap = (const H245_VideoCapability &)cap; if (vidcap.GetTag() != H245_VideoCapability::e_extendedVideoCapability) return FALSE; return OnReceivedPDU(vidcap); } PBoolean H323CodecExtendedVideoCapability::OnSendingPDU(H245_DataType & pdu) const { if (table.GetSize() > 0) { pdu.SetTag(H245_DataType::e_videoData); return OnSendingPDU((H245_VideoCapability &)pdu, e_OLC); } else return FALSE; } PBoolean H323CodecExtendedVideoCapability::OnReceivedPDU(const H245_DataType & pdu, PBoolean /*receiver*/) { if (pdu.GetTag() == H245_DataType::e_videoData) return OnReceivedPDU((const H245_VideoCapability &)pdu); else return FALSE; } PBoolean H323CodecExtendedVideoCapability::OnSendingPDU(H245_VideoCapability & pdu, CommandType ctype) const { if (extCapabilities.GetSize() == 0) return FALSE; pdu.SetTag(H245_VideoCapability::e_extendedVideoCapability); H245_ExtendedVideoCapability & extend = (H245_ExtendedVideoCapability &)pdu; extend.IncludeOptionalField(H245_ExtendedVideoCapability::e_videoCapabilityExtension); H245_ArrayOf_GenericCapability & cape = extend.m_videoCapabilityExtension; H245_GenericCapability gcap; gcap.m_capabilityIdentifier = *(new H245_CapabilityIdentifier(H245_CapabilityIdentifier::e_standard)); PASN_ObjectId &object_id = gcap.m_capabilityIdentifier; object_id = OpalPluginCodec_Identifer_H239_Video; // Add role H245_GenericParameter * param = new H245_GenericParameter; param->m_parameterIdentifier.SetTag(H245_ParameterIdentifier::e_standard); (PASN_Integer &)param->m_parameterIdentifier = 1; param->m_parameterValue.SetTag(H245_ParameterValue::e_booleanArray); (PASN_Integer &)param->m_parameterValue = 1; // Live presentation gcap.IncludeOptionalField(H245_GenericCapability::e_collapsing); gcap.m_collapsing.SetSize(1); gcap.m_collapsing[0] = *param; cape.SetSize(1); cape[0] = gcap; H245_ArrayOf_VideoCapability & caps = extend.m_videoCapability; if (extCapabilities.GetSize() > 0) { caps.SetSize(extCapabilities.GetSize()); for (PINDEX i=0; i< extCapabilities.GetSize(); i++) { H245_VideoCapability vidcap; ((H323VideoCapability &)extCapabilities[i]).OnSendingPDU(vidcap,ctype); caps[i] = vidcap; } } else { caps.SetSize(table.GetSize()); for (PINDEX i=0; i< table.GetSize(); i++) { H245_VideoCapability vidcap; ((H323VideoCapability &)table[i]).OnSendingPDU(vidcap,ctype); caps[i] = vidcap; } } return TRUE; } PBoolean H323CodecExtendedVideoCapability::OnReceivedPDU(const H245_VideoCapability & pdu ) { if (pdu.GetTag() != H245_VideoCapability::e_extendedVideoCapability) return FALSE; const H245_ExtendedVideoCapability & extend = (const H245_ExtendedVideoCapability &)pdu; if (!extend.HasOptionalField(H245_ExtendedVideoCapability::e_videoCapabilityExtension)) return FALSE; // Role Information const H245_ArrayOf_GenericCapability & cape = extend.m_videoCapabilityExtension; if (cape.GetSize() == 0) { PTRACE(2,"H239\tERROR: Missing Capability Extension!"); return FALSE; } for (PINDEX b =0; b < cape.GetSize(); b++) { const H245_GenericCapability & cap = cape[b]; if (cap.m_capabilityIdentifier.GetTag() != H245_CapabilityIdentifier::e_standard) { PTRACE(4,"H239\tERROR: Wrong Capability type!"); return FALSE; } const PASN_ObjectId & id = cap.m_capabilityIdentifier; if (id != OpalPluginCodec_Identifer_H239_Video) { PTRACE(4,"H239\tERROR: Wrong Capability Identifer " << id); return FALSE; } if (!cap.HasOptionalField(H245_GenericCapability::e_collapsing)) { PTRACE(4,"H239\tERROR: No collapsing field"); return FALSE; } for (PINDEX c =0; c < cap.m_collapsing.GetSize(); c++) { const H245_GenericParameter & param = cap.m_collapsing[c]; const PASN_Integer & id = param.m_parameterIdentifier; if (id.GetValue() != 1) { PTRACE(4,"H239\tERROR: Unknown Role Identifer"); return FALSE; } const PASN_Integer & role = param.m_parameterValue; if (role.GetValue() != 1) { PTRACE(4,"H239\tERROR: Unsupported Role mode " << param.m_parameterValue ); return FALSE; } } } if (table.GetSize() == 0) { // Get a Common Video Capability list const H245_ArrayOf_VideoCapability & caps = extend.m_videoCapability; for (PINDEX i = 0; i < caps.GetSize(); i++) { H323Capability * capability = extCapabilities.FindCapability(H323Capability::e_Video, caps[i], NULL); if (capability != NULL) { H323VideoCapability * copy = (H323VideoCapability *)capability->Clone(); if (copy->OnReceivedPDU(caps[i],e_TCS)) table.Append(copy); else delete copy; } } } return TRUE; } PObject::Comparison H323CodecExtendedVideoCapability::Compare(const PObject & obj) const { if (!PIsDescendant(&obj, H323CodecExtendedVideoCapability)) return LessThan; const H323CodecExtendedVideoCapability & cap = (const H323CodecExtendedVideoCapability &)obj; for (PINDEX i= 0; i< GetSize(); ++i) { for (PINDEX j=0; j< GetSize(); ++j) { H323Capability * local = GetAt(i); H323Capability * remote = cap.GetAt(j); if (!local || !remote) continue; PObject::Comparison equal = local->Compare(*remote); if (equal == EqualTo) return EqualTo; } } return LessThan; } PBoolean H323CodecExtendedVideoCapability::IsMatch(const PASN_Choice & subTypePDU) const { if (subTypePDU.GetTag() != GetSubType()) return false; const H245_ExtendedVideoCapability & gen = (const H245_ExtendedVideoCapability &)subTypePDU.GetObject(); const H245_VideoCapability & vid = (const H245_VideoCapability &)gen.m_videoCapability[0]; return extCapabilities[0].IsMatch(vid); } PBoolean H323CodecExtendedVideoCapability::OnReceivedGenericPDU(const H245_GenericCapability & /*pdu*/) { return TRUE; } const OpalMediaFormat & H323CodecExtendedVideoCapability::GetMediaFormat() const { if (table.GetSize() > 0) return ((H323VideoCapability &)table[0]).GetMediaFormat(); else if (extCapabilities.GetSize() > 0) return ((H323VideoCapability &)extCapabilities[0]).GetMediaFormat(); else return H323Capability::GetMediaFormat(); } OpalMediaFormat & H323CodecExtendedVideoCapability::GetWritableMediaFormat() { if (table.GetSize() > 0) return ((H323VideoCapability &)table[0]).GetWritableMediaFormat(); else if (extCapabilities.GetSize() > 0) return ((H323VideoCapability &)extCapabilities[0]).GetWritableMediaFormat(); else return H323Capability::GetWritableMediaFormat(); } #endif // H323_H239 #endif // NO_H323_VIDEO ///////////////////////////////////////////////////////////////////////////// #ifdef H323_H230 H323_ConferenceControlCapability::H323_ConferenceControlCapability() { chairControlCapability = FALSE; nonStandardExtension = FALSE; } H323_ConferenceControlCapability::H323_ConferenceControlCapability(PBoolean chairControls, PBoolean T124Extension) { chairControlCapability = chairControls; nonStandardExtension = T124Extension; } PObject * H323_ConferenceControlCapability::Clone() const { return new H323_ConferenceControlCapability(*this); } H323Capability::MainTypes H323_ConferenceControlCapability::GetMainType() const { return e_ConferenceControl; } unsigned H323_ConferenceControlCapability::GetSubType() const { return 0; } PString H323_ConferenceControlCapability::GetFormatName() const { return "H.230 Conference Controls"; } H323Channel * H323_ConferenceControlCapability::CreateChannel(H323Connection &, H323Channel::Directions, unsigned, const H245_H2250LogicalChannelParameters *) const { PTRACE(1, "Codec\tCannot create ConferenceControlCapability channel"); return NULL; } H323Codec * H323_ConferenceControlCapability::CreateCodec(H323Codec::Direction) const { PTRACE(1, "Codec\tCannot create ConferenceControlCapability codec"); return NULL; } static const char * ExtConferenceControlOID = "0.0.20.124.2"; // Tunnel T.124 PBoolean H323_ConferenceControlCapability::OnSendingPDU(H245_Capability & pdu) const { pdu.SetTag(H245_Capability::e_conferenceCapability); H245_ConferenceCapability & conf = pdu; // Supports Chair control conf.m_chairControlCapability = chairControlCapability; // Include Extended Custom Controls such as INVITE/EJECT etc. if (nonStandardExtension) { conf.IncludeOptionalField(H245_ConferenceCapability::e_nonStandardData); H245_ArrayOf_NonStandardParameter & nsParam = conf.m_nonStandardData; H245_NonStandardParameter param; H245_NonStandardIdentifier & id = param.m_nonStandardIdentifier; id.SetTag(H245_NonStandardIdentifier::e_object); PASN_ObjectId & oid = id; oid.SetValue(ExtConferenceControlOID); PASN_OctetString & data = param.m_data; data.SetValue(""); nsParam.SetSize(1); nsParam[0] = param; } return TRUE; } PBoolean H323_ConferenceControlCapability::OnSendingPDU(H245_DataType &) const { PTRACE(1, "Codec\tCannot have ConferenceControlCapability in DataType"); return FALSE; } PBoolean H323_ConferenceControlCapability::OnSendingPDU(H245_ModeElement &) const { PTRACE(1, "Codec\tCannot have ConferenceControlCapability in ModeElement"); return FALSE; } PBoolean H323_ConferenceControlCapability::OnReceivedPDU(const H245_Capability & pdu) { H323Capability::OnReceivedPDU(pdu); if (pdu.GetTag() != H245_Capability::e_conferenceCapability) return FALSE; const H245_ConferenceCapability & conf = pdu; // Supports Chair control chairControlCapability = conf.m_chairControlCapability; // Include Extended Custom Control support. if (conf.HasOptionalField(H245_ConferenceCapability::e_nonStandardData)) { const H245_ArrayOf_NonStandardParameter & nsParam = conf.m_nonStandardData; for (PINDEX i=0; i < nsParam.GetSize(); i++) { const H245_NonStandardParameter & param = nsParam[i]; const H245_NonStandardIdentifier & id = param.m_nonStandardIdentifier; if (id.GetTag() == H245_NonStandardIdentifier::e_object) { const PASN_ObjectId & oid = id; if (oid.AsString() == ExtConferenceControlOID) nonStandardExtension = TRUE; } } } return TRUE; } PBoolean H323_ConferenceControlCapability::OnReceivedPDU(const H245_DataType &, PBoolean) { PTRACE(1, "Codec\tCannot have ConferenceControlCapability in DataType"); return FALSE; } #endif // H323_H230 ///////////////////////////////////////////////////////////////////////////// H323DataCapability::H323DataCapability(unsigned rate) : maxBitRate(rate) { } H323Capability::MainTypes H323DataCapability::GetMainType() const { return e_Data; } unsigned H323DataCapability::GetDefaultSessionID() const { return 3; } H323Codec * H323DataCapability::CreateCodec(H323Codec::Direction) const { return NULL; } PBoolean H323DataCapability::OnSendingPDU(H245_Capability & cap) const { switch (capabilityDirection) { case e_Transmit: cap.SetTag(H245_Capability::e_transmitDataApplicationCapability); break; case e_Receive : cap.SetTag(H245_Capability::e_receiveDataApplicationCapability); break; case e_ReceiveAndTransmit: default: cap.SetTag(H245_Capability::e_receiveAndTransmitDataApplicationCapability); } H245_DataApplicationCapability & app = cap; app.m_maxBitRate = maxBitRate; return OnSendingPDU(app, e_TCS); } PBoolean H323DataCapability::OnSendingPDU(H245_DataType & dataType) const { dataType.SetTag(H245_DataType::e_data); H245_DataApplicationCapability & app = dataType; app.m_maxBitRate = maxBitRate; return OnSendingPDU(app, e_OLC); } PBoolean H323DataCapability::OnSendingPDU(H245_ModeElement & mode) const { mode.m_type.SetTag(H245_ModeElementType::e_dataMode); H245_DataMode & type = mode.m_type; type.m_bitRate = maxBitRate; return OnSendingPDU(type); } PBoolean H323DataCapability::OnSendingPDU(H245_DataApplicationCapability &) const { return FALSE; } PBoolean H323DataCapability::OnSendingPDU(H245_DataApplicationCapability & pdu, CommandType) const { return OnSendingPDU(pdu); } PBoolean H323DataCapability::OnReceivedPDU(const H245_Capability & cap) { H323Capability::OnReceivedPDU(cap); if (cap.GetTag() != H245_Capability::e_receiveDataApplicationCapability && cap.GetTag() != H245_Capability::e_receiveAndTransmitDataApplicationCapability) return FALSE; const H245_DataApplicationCapability & app = cap; maxBitRate = app.m_maxBitRate; return OnReceivedPDU(app, e_TCS); } PBoolean H323DataCapability::OnReceivedPDU(const H245_DataType & dataType, PBoolean) { if (dataType.GetTag() != H245_DataType::e_data) return FALSE; const H245_DataApplicationCapability & app = dataType; maxBitRate = app.m_maxBitRate; return OnReceivedPDU(app, e_OLC); } PBoolean H323DataCapability::OnReceivedPDU(const H245_DataApplicationCapability &) { return FALSE; } PBoolean H323DataCapability::OnReceivedPDU(const H245_DataApplicationCapability & pdu, CommandType) { return OnReceivedPDU(pdu); } ///////////////////////////////////////////////////////////////////////////// H323NonStandardDataCapability::H323NonStandardDataCapability(unsigned maxBitRate, const BYTE * fixedData, PINDEX dataSize, PINDEX offset, PINDEX length) : H323DataCapability(maxBitRate), H323NonStandardCapabilityInfo(fixedData, dataSize, offset, length) { } H323NonStandardDataCapability::H323NonStandardDataCapability(unsigned maxBitRate, const PString & oid, const BYTE * fixedData, PINDEX dataSize, PINDEX offset, PINDEX length) : H323DataCapability(maxBitRate), H323NonStandardCapabilityInfo(oid, fixedData, dataSize, offset, length) { } H323NonStandardDataCapability::H323NonStandardDataCapability(unsigned maxBitRate, BYTE country, BYTE extension, WORD maufacturer, const BYTE * fixedData, PINDEX dataSize, PINDEX offset, PINDEX length) : H323DataCapability(maxBitRate), H323NonStandardCapabilityInfo(country, extension, maufacturer, fixedData, dataSize, offset, length) { } PObject::Comparison H323NonStandardDataCapability::Compare(const PObject & obj) const { if (!PIsDescendant(&obj, H323NonStandardDataCapability)) return LessThan; return CompareInfo((const H323NonStandardDataCapability &)obj); } unsigned H323NonStandardDataCapability::GetSubType() const { return H245_DataApplicationCapability_application::e_nonStandard; } PBoolean H323NonStandardDataCapability::OnSendingPDU(H245_DataApplicationCapability & pdu) const { return OnSendingNonStandardPDU(pdu.m_application, H245_DataApplicationCapability_application::e_nonStandard); } PBoolean H323NonStandardDataCapability::OnSendingPDU(H245_DataMode & pdu) const { return OnSendingNonStandardPDU(pdu.m_application, H245_DataMode_application::e_nonStandard); } PBoolean H323NonStandardDataCapability::OnReceivedPDU(const H245_DataApplicationCapability & pdu) { return OnReceivedNonStandardPDU(pdu.m_application, H245_DataApplicationCapability_application::e_nonStandard); } PBoolean H323NonStandardDataCapability::IsMatch(const PASN_Choice & subTypePDU) const { return H323Capability::IsMatch(subTypePDU) && H323NonStandardCapabilityInfo::IsMatch((const H245_NonStandardParameter &)subTypePDU.GetObject()); } ///////////////////////////////////////////////////////////////////////////// #ifdef H323_AUDIO_CODECS H323_G711Capability::H323_G711Capability(Mode m, Speed s) : H323AudioCapability(20, 20) // 20ms recv, 20ms transmit { mode = m; speed = s; } PObject * H323_G711Capability::Clone() const { return new H323_G711Capability(*this); } unsigned H323_G711Capability::GetSubType() const { static const unsigned G711SubType[2][2] = { { H245_AudioCapability::e_g711Alaw64k, H245_AudioCapability::e_g711Alaw56k }, { H245_AudioCapability::e_g711Ulaw64k, H245_AudioCapability::e_g711Ulaw56k } }; return G711SubType[mode][speed]; } PString H323_G711Capability::GetFormatName() const { static const char * const G711Name[4][2] = { { OPAL_G711_ALAW_64K, OPAL_G711_ALAW_56K }, { OPAL_G711_ULAW_64K, OPAL_G711_ULAW_56K }, { OPAL_G711_ALAW_64K_20, OPAL_G711_ALAW_56K_20 }, { OPAL_G711_ULAW_64K_20, OPAL_G711_ULAW_56K_20 } }; return G711Name[mode][speed]; } H323Codec * H323_G711Capability::CreateCodec(H323Codec::Direction direction) const { unsigned packetSize = 8*(direction == H323Codec::Encoder ? txFramesInPacket : rxFramesInPacket); if (mode == muLaw) return new H323_muLawCodec(direction, speed, packetSize); else return new H323_ALawCodec(direction, speed, packetSize); } #endif // H323AudioCodec ///////////////////////////////////////////////////////////////////////////// char OpalUserInputRFC2833[] = "UserInput/RFC2833"; #ifdef H323_H249 // H.249 Identifiers const char * const H323_UserInputCapability::SubTypeOID[4] = { "0.0.8.249.1", // H.249 Annex A "0.0.8.249.2", // H.249 Annex B "0.0.8.249.3", // H.249 Annex C "0.0.8.249.4" // H.249 Annex D }; #endif const char * const H323_UserInputCapability::SubTypeNames[NumSubTypes] = { "UserInput/basicString", "UserInput/iA5String", "UserInput/generalString", "UserInput/dtmf", "UserInput/hookflash", OpalUserInputRFC2833 // "UserInput/RFC2833" #ifdef H323_H249 ,"UserInput/Navigation", "UserInput/Softkey", "UserInput/PointDevice", "UserInput/Modal" #endif }; OPAL_MEDIA_FORMAT_DECLARE(OpalUserInputRFC2833Format, OpalUserInputRFC2833, OpalMediaFormat::DefaultAudioSessionID, (RTP_DataFrame::PayloadTypes)101, // Choose this for Cisco IOS compatibility TRUE, // Needs jitter 100, // bits/sec 4, // bytes/frame 8*150, // 150 millisecond OpalMediaFormat::AudioTimeUnits, 0) H323_UserInputCapability::H323_UserInputCapability(SubTypes _subType) { subType = _subType; #ifdef H323_H249 if (subType > 5) subTypeOID = SubTypeOID[subType-6]; else { #endif OpalMediaFormat * fmt = OpalMediaFormatFactory::CreateInstance(OpalUserInputRFC2833); if (fmt != NULL) rtpPayloadType = fmt->GetPayloadType(); #ifdef H323_H249 subTypeOID = PString(); } #endif } PObject * H323_UserInputCapability::Clone() const { return new H323_UserInputCapability(*this); } H323Capability::MainTypes H323_UserInputCapability::GetMainType() const { return e_UserInput; } #define SignalToneRFC2833_SubType 10000 static unsigned UserInputCapabilitySubTypeCodes[] = { H245_UserInputCapability::e_basicString, H245_UserInputCapability::e_iA5String, H245_UserInputCapability::e_generalString, H245_UserInputCapability::e_dtmf, H245_UserInputCapability::e_hookflash, SignalToneRFC2833_SubType #ifdef H323_H249 ,H245_UserInputCapability::e_genericUserInputCapability, // H.249 Annex A H245_UserInputCapability::e_genericUserInputCapability, // H.249 Annex B H245_UserInputCapability::e_genericUserInputCapability, // H.249 Annex C H245_UserInputCapability::e_genericUserInputCapability // H.249 Annex D #endif }; unsigned H323_UserInputCapability::GetSubType() const { return UserInputCapabilitySubTypeCodes[subType]; } #ifdef H323_H249 PString H323_UserInputCapability::GetIdentifier() const { return subTypeOID; } #endif PString H323_UserInputCapability::GetFormatName() const { return SubTypeNames[subType]; } H323Channel * H323_UserInputCapability::CreateChannel(H323Connection &, H323Channel::Directions, unsigned, const H245_H2250LogicalChannelParameters *) const { PTRACE(1, "Codec\tCannot create UserInputCapability channel"); return NULL; } H323Codec * H323_UserInputCapability::CreateCodec(H323Codec::Direction) const { PTRACE(1, "Codec\tCannot create UserInputCapability codec"); return NULL; } #ifdef H323_H249 H245_GenericInformation * H323_UserInputCapability::BuildGenericIndication(const char * oid) { H245_GenericInformation * cap = new H245_GenericInformation(); cap->IncludeOptionalField(H245_GenericMessage::e_subMessageIdentifier); H245_CapabilityIdentifier & id = cap->m_messageIdentifier; id.SetTag(H245_CapabilityIdentifier::e_standard); PASN_ObjectId & gid = id; gid.SetValue(oid); return cap; } H245_GenericParameter * H323_UserInputCapability::BuildGenericParameter(unsigned id,unsigned type, const PString & value) { H245_GenericParameter * content = new H245_GenericParameter(); H245_ParameterIdentifier & paramid = content->m_parameterIdentifier; paramid.SetTag(H245_ParameterIdentifier::e_standard); PASN_Integer & pid = paramid; pid.SetValue(id); H245_ParameterValue & paramval = content->m_parameterValue; paramval.SetTag(type); if ((type == H245_ParameterValue::e_unsignedMin) || (type == H245_ParameterValue::e_unsignedMax) || (type == H245_ParameterValue::e_unsigned32Min) || (type == H245_ParameterValue::e_unsigned32Max)) { PASN_Integer & val = paramval; val.SetValue(value.AsUnsigned()); } else if (type == H245_ParameterValue::e_octetString) { PASN_OctetString & val = paramval; val.SetValue(value); } // H245_ParameterValue::e_logical, // H245_ParameterValue::e_booleanArray, // H245_ParameterValue::e_genericParameter return content; } #endif PBoolean H323_UserInputCapability::OnSendingPDU(H245_Capability & pdu) const { if (subType == SignalToneRFC2833) { pdu.SetTag(H245_Capability::e_receiveRTPAudioTelephonyEventCapability); H245_AudioTelephonyEventCapability & atec = pdu; atec.m_dynamicRTPPayloadType = rtpPayloadType; atec.m_audioTelephoneEvent = "0-16"; // Support DTMF 0-9,*,#,A-D & hookflash } else { pdu.SetTag(H245_Capability::e_receiveUserInputCapability); H245_UserInputCapability & ui = pdu; ui.SetTag(UserInputCapabilitySubTypeCodes[subType]); #ifdef H323_H249 // H.249 Capabilities if (subType > 5) { H245_GenericCapability & generic = ui; H245_CapabilityIdentifier & id = generic.m_capabilityIdentifier; id.SetTag(H245_CapabilityIdentifier::e_standard); PASN_ObjectId & oid = id; oid.SetValue(subTypeOID); if (subType == H249B_Softkey) { H245_ArrayOf_GenericParameter & col = generic.m_collapsing; // Set this to 10 so to support either 2 or 5 H245_GenericParameter * param = BuildGenericParameter(1,H245_ParameterValue::e_unsignedMin,10); col.Append(param); col.SetSize(col.GetSize()+1); } } #endif } return TRUE; } PBoolean H323_UserInputCapability::OnSendingPDU(H245_DataType &) const { PTRACE(1, "Codec\tCannot have UserInputCapability in DataType"); return FALSE; } PBoolean H323_UserInputCapability::OnSendingPDU(H245_ModeElement &) const { PTRACE(1, "Codec\tCannot have UserInputCapability in ModeElement"); return FALSE; } PBoolean H323_UserInputCapability::OnReceivedPDU(const H245_Capability & pdu) { H323Capability::OnReceivedPDU(pdu); if (pdu.GetTag() == H245_Capability::e_receiveRTPAudioTelephonyEventCapability) { subType = SignalToneRFC2833; const H245_AudioTelephonyEventCapability & atec = pdu; rtpPayloadType = (RTP_DataFrame::PayloadTypes)(int)atec.m_dynamicRTPPayloadType; // Really should verify atec.m_audioTelephoneEvent here return TRUE; } const H245_UserInputCapability & ui = pdu; if (ui.GetTag() != UserInputCapabilitySubTypeCodes[subType]) return FALSE; #ifdef H323_H249 if (ui.GetTag() == H245_UserInputCapability::e_genericUserInputCapability) { const H245_GenericCapability & generic = ui; const H245_CapabilityIdentifier & id = generic.m_capabilityIdentifier; if (id.GetTag() != H245_CapabilityIdentifier::e_standard) return FALSE; const PASN_ObjectId & oid = id; return (subTypeOID == oid.AsString()); } #endif return TRUE; } PBoolean H323_UserInputCapability::OnReceivedPDU(const H245_DataType &, PBoolean) { PTRACE(1, "Codec\tCannot have UserInputCapability in DataType"); return FALSE; } PBoolean H323_UserInputCapability::IsUsable(const H323Connection & connection) const { if (connection.GetControlVersion() >= 7) return TRUE; if (connection.GetRemoteApplication().Find("AltiServ-ITG") != P_MAX_INDEX) return FALSE; return subType != SignalToneRFC2833; } void H323_UserInputCapability::AddAllCapabilities(H323Capabilities & capabilities, PINDEX descriptorNum, PINDEX simultaneous) { PINDEX num = capabilities.SetCapability(descriptorNum, simultaneous, new H323_UserInputCapability(HookFlashH245)); if (descriptorNum == P_MAX_INDEX) { descriptorNum = num; simultaneous = P_MAX_INDEX; } else if (simultaneous == P_MAX_INDEX) simultaneous = num+1; num = capabilities.SetCapability(descriptorNum, simultaneous, new H323_UserInputCapability(BasicString)); if (simultaneous == P_MAX_INDEX) simultaneous = num; capabilities.SetCapability(descriptorNum, simultaneous, new H323_UserInputCapability(SignalToneH245)); capabilities.SetCapability(descriptorNum, simultaneous, new H323_UserInputCapability(SignalToneRFC2833)); #ifdef H323_H249 //// H.249 Capabilities capabilities.SetCapability(descriptorNum, simultaneous, new H323_UserInputCapability(H249A_Navigation)); capabilities.SetCapability(descriptorNum, simultaneous, new H323_UserInputCapability(H249B_Softkey)); capabilities.SetCapability(descriptorNum, simultaneous, new H323_UserInputCapability(H249C_PointDevice)); capabilities.SetCapability(descriptorNum, simultaneous, new H323_UserInputCapability(H249D_Modal)); #endif } ///////////////////////////////////////////////////////////////////////////// PBoolean H323SimultaneousCapabilities::SetSize(PINDEX newSize) { PINDEX oldSize = GetSize(); if (!H323CapabilitiesListArray::SetSize(newSize)) return FALSE; while (oldSize < newSize) { H323CapabilitiesList * list = new H323CapabilitiesList; // The lowest level list should not delete codecs on destruction list->DisallowDeleteObjects(); SetAt(oldSize++, list); } return TRUE; } PBoolean H323CapabilitiesSet::SetSize(PINDEX newSize) { PINDEX oldSize = GetSize(); if (!H323CapabilitiesSetArray::SetSize(newSize)) return FALSE; while (oldSize < newSize) SetAt(oldSize++, new H323SimultaneousCapabilities); return TRUE; } H323Capabilities::H323Capabilities() { } H323Capabilities::H323Capabilities(const H323Connection & connection, const H245_TerminalCapabilitySet & pdu) { const H323Capabilities & localCapabilities = connection.GetLocalCapabilities(); // Decode out of the PDU, the list of known codecs. if (pdu.HasOptionalField(H245_TerminalCapabilitySet::e_capabilityTable)) { for (PINDEX i = 0; i < pdu.m_capabilityTable.GetSize(); i++) { if (pdu.m_capabilityTable[i].HasOptionalField(H245_CapabilityTableEntry::e_capability)) { unsigned capabilityNo = pdu.m_capabilityTable[i].m_capabilityTableEntryNumber; H323Capability * capability = localCapabilities.FindCapability(pdu.m_capabilityTable[i].m_capability, capabilityNo, pdu); if (capability != NULL) { H323Capability * copy = (H323Capability *)capability->Clone(); copy->SetCapabilityNumber(capabilityNo); if (copy->OnReceivedPDU(pdu.m_capabilityTable[i].m_capability)) table.Append(copy); else delete copy; } } } } PINDEX outerSize = pdu.m_capabilityDescriptors.GetSize(); set.SetSize(outerSize); for (PINDEX outer = 0; outer < outerSize; outer++) { H245_CapabilityDescriptor & desc = pdu.m_capabilityDescriptors[outer]; if (desc.HasOptionalField(H245_CapabilityDescriptor::e_simultaneousCapabilities)) { PINDEX middleSize = desc.m_simultaneousCapabilities.GetSize(); set[outer].SetSize(middleSize); for (PINDEX middle = 0; middle < middleSize; middle++) { H245_AlternativeCapabilitySet & alt = desc.m_simultaneousCapabilities[middle]; for (PINDEX inner = 0; inner < alt.GetSize(); inner++) { for (PINDEX cap = 0; cap < table.GetSize(); cap++) { if (table[cap].GetCapabilityNumber() == alt[inner]) { set[outer][middle].Append(&table[cap]); break; } } } } } } } H323Capabilities::H323Capabilities(const H323Capabilities & original) { operator=(original); } H323Capabilities & H323Capabilities::operator=(const H323Capabilities & original) { RemoveAll(); for (PINDEX i = 0; i < original.GetSize(); i++) Copy(original[i]); PINDEX outerSize = original.set.GetSize(); set.SetSize(outerSize); for (PINDEX outer = 0; outer < outerSize; outer++) { PINDEX middleSize = original.set[outer].GetSize(); set[outer].SetSize(middleSize); for (PINDEX middle = 0; middle < middleSize; middle++) { PINDEX innerSize = original.set[outer][middle].GetSize(); for (PINDEX inner = 0; inner < innerSize; inner++) set[outer][middle].Append(FindCapability(original.set[outer][middle][inner].GetCapabilityNumber())); } } return *this; } void H323Capabilities::PrintOn(ostream & strm) const { int indent = (int)strm.precision()-1; strm << setw(indent) << " " << "Table:\n"; for (PINDEX i = 0; i < table.GetSize(); i++) strm << setw(indent+2) << " " << table[i] << '\n'; strm << setw(indent) << " " << "Set:\n"; for (PINDEX outer = 0; outer < set.GetSize(); outer++) { strm << setw(indent+2) << " " << outer << ":\n"; for (PINDEX middle = 0; middle < set[outer].GetSize(); middle++) { strm << setw(indent+4) << " " << middle << ":\n"; for (PINDEX inner = 0; inner < set[outer][middle].GetSize(); inner++) strm << setw(indent+6) << " " << set[outer][middle][inner] << '\n'; } } } PINDEX H323Capabilities::SetCapability(PINDEX descriptorNum, PINDEX simultaneousNum, H323Capability * capability) { if (capability == NULL) return P_MAX_INDEX; // Make sure capability has been added to table. Add(capability); PBoolean newDescriptor = descriptorNum == P_MAX_INDEX; if (newDescriptor) descriptorNum = set.GetSize(); // Make sure the outer array is big enough set.SetMinSize(descriptorNum+1); if (simultaneousNum == P_MAX_INDEX) simultaneousNum = set[descriptorNum].GetSize(); // Make sure the middle array is big enough set[descriptorNum].SetMinSize(simultaneousNum+1); // Now we can put the new entry in. set[descriptorNum][simultaneousNum].Append(capability); return newDescriptor ? descriptorNum : simultaneousNum; } static PBoolean MatchWildcard(const PCaselessString & str, const PStringArray & wildcard) { PINDEX last = 0; for (PINDEX i = 0; i < wildcard.GetSize(); i++) { if (wildcard[i].IsEmpty()) last = str.GetLength(); else { PINDEX next = str.Find(wildcard[i], last); if (next == P_MAX_INDEX) return FALSE; // Hack to avoid accidentally deleting H.239 cap as the codec is after position 5 -SH if (next > 5 && str.Left(5) == "H.239") return FALSE; last = next + wildcard[i].GetLength(); } } return TRUE; } PINDEX H323Capabilities::AddAllCapabilities(PINDEX descriptorNum, PINDEX simultaneous, const PString & name) { PINDEX reply = descriptorNum == P_MAX_INDEX ? P_MAX_INDEX : simultaneous; PStringArray wildcard = name.Tokenise('*', FALSE); H323CapabilityFactory::KeyList_T stdCaps = H323CapabilityFactory::GetKeyList(); for (unsigned session = OpalMediaFormat::FirstSessionID; session <= OpalMediaFormat::LastSessionID; session++) { for (H323CapabilityFactory::KeyList_T::const_iterator r = stdCaps.begin(); r != stdCaps.end(); ++r) { PString capName(*r); if (MatchWildcard(capName, wildcard) && (FindCapability(capName) == NULL)) { OpalMediaFormat mediaFormat(capName); if (!mediaFormat.IsValid() && (capName.Right(4) == "{sw}") && capName.GetLength() > 4) mediaFormat = OpalMediaFormat(capName.Left(capName.GetLength()-4)); if (mediaFormat.IsValid() && mediaFormat.GetDefaultSessionID() == session) { // add the capability H323Capability * capability = H323Capability::Create(capName); PINDEX num = SetCapability(descriptorNum, simultaneous, capability); if (descriptorNum == P_MAX_INDEX) { reply = num; descriptorNum = num; simultaneous = P_MAX_INDEX; } else if (simultaneous == P_MAX_INDEX) { if (reply == P_MAX_INDEX) reply = num; simultaneous = num; } } } } simultaneous = P_MAX_INDEX; } return reply; } static unsigned MergeCapabilityNumber(const H323CapabilitiesList & table, unsigned newCapabilityNumber) { // Assign a unique number to the codec, check if the user wants a specific // value and start with that. if (newCapabilityNumber == 0) newCapabilityNumber = 1; PINDEX i = 0; while (i < table.GetSize()) { if (table[i].GetCapabilityNumber() != newCapabilityNumber) i++; else { // If it already in use, increment it newCapabilityNumber++; i = 0; } } return newCapabilityNumber; } void H323Capabilities::Add(H323Capability * capability) { if (capability == NULL) return; // See if already added, confuses things if you add the same instance twice if (table.GetObjectsIndex(capability) != P_MAX_INDEX) return; capability->SetCapabilityNumber(MergeCapabilityNumber(table, capability->GetCapabilityNumber())); table.Append(capability); PTRACE(3, "H323\tAdded capability: " << *capability); } H323Capability * H323Capabilities::Copy(const H323Capability & capability) { H323Capability * newCapability = (H323Capability *)capability.Clone(); newCapability->SetCapabilityNumber(MergeCapabilityNumber(table, capability.GetCapabilityNumber())); table.Append(newCapability); PTRACE(3, "H323\tAdded capability: " << *newCapability); return newCapability; } void H323Capabilities::Remove(H323Capability * capability) { if (capability == NULL) return; PTRACE(3, "H323\tRemoving capability: " << *capability); unsigned capabilityNumber = capability->GetCapabilityNumber(); for (PINDEX outer = 0; outer < set.GetSize(); outer++) { for (PINDEX middle = 0; middle < set[outer].GetSize(); middle++) { for (PINDEX inner = 0; inner < set[outer][middle].GetSize(); inner++) { if (set[outer][middle][inner].GetCapabilityNumber() == capabilityNumber) { set[outer][middle].RemoveAt(inner); break; } } if (set[outer][middle].GetSize() == 0) set[outer].RemoveAt(middle); } if (set[outer].GetSize() == 0) set.RemoveAt(outer); } table.Remove(capability); } void H323Capabilities::Remove(const PString & codecName) { if (codecName.IsEmpty()) return; H323Capability * cap = FindCapability(codecName); while (cap != NULL) { Remove(cap); cap = FindCapability(codecName); } } void H323Capabilities::Remove(const PStringArray & codecNames) { for (PINDEX i = 0; i < codecNames.GetSize(); i++) Remove(codecNames[i]); } void H323Capabilities::RemoveAll() { table.RemoveAll(); set.RemoveAll(); } H323Capability * H323Capabilities::FindCapability(unsigned capabilityNumber) const { PTRACE(4, "H323\tFindCapability: " << capabilityNumber); for (PINDEX i = 0; i < table.GetSize(); i++) { if (table[i].GetCapabilityNumber() == capabilityNumber) { PTRACE(3, "H323\tFound capability: " << table[i]); return &table[i]; } } return NULL; } H323Capability * H323Capabilities::FindCapability(const PString & formatName, H323Capability::CapabilityDirection direction) const { PTRACE(4, "H323\tFindCapability: \"" << formatName << '"'); PStringArray wildcard = formatName.Tokenise('*', FALSE); for (PINDEX i = 0; i < table.GetSize(); i++) { PCaselessString str = table[i].GetFormatName(); if (MatchWildcard(str, wildcard) && (direction == H323Capability::e_Unknown || table[i].GetCapabilityDirection() == direction)) { PTRACE(3, "H323\tFound capability: " << table[i]); return &table[i]; } } return NULL; } H323Capability * H323Capabilities::FindCapability( H323Capability::CapabilityDirection direction) const { PTRACE(4, "H323\tFindCapability: \"" << direction << '"'); for (PINDEX i = 0; i < table.GetSize(); i++) { if (table[i].GetCapabilityDirection() == direction) { PTRACE(3, "H323\tFound capability: " << table[i]); return &table[i]; } } return NULL; } H323Capability * H323Capabilities::FindCapability(const H323Capability & capability) const { PTRACE(4, "H323\tFindCapability: " << capability); for (PINDEX i = 0; i < table.GetSize(); i++) { if (table[i] == capability) { PTRACE(3, "H323\tFound capability: " << table[i]); return &table[i]; } } return NULL; } H323Capability * H323Capabilities::FindCapability(const H245_Capability & cap, const unsigned capID, const H245_TerminalCapabilitySet & pdu) const { if (cap.GetTag() == H245_Capability::e_h235SecurityCapability){ const H245_H235SecurityCapability & secCap = cap; return FindCapability(H323Capability::e_Security, secCap, capID, pdu); } else return FindCapability(cap); } H323Capability * H323Capabilities::FindCapability(const H245_Capability & cap) const { PTRACE(4, "H323\tFindCapability: " << cap.GetTagName()); switch (cap.GetTag()) { case H245_Capability::e_receiveAudioCapability : case H245_Capability::e_transmitAudioCapability : case H245_Capability::e_receiveAndTransmitAudioCapability : { const H245_AudioCapability & audio = cap; if (audio.GetTag() == H245_AudioCapability::e_genericAudioCapability) return FindCapability(H323Capability::e_Audio, audio, audio); else return FindCapability(H323Capability::e_Audio, audio, NULL); } case H245_Capability::e_receiveVideoCapability : case H245_Capability::e_transmitVideoCapability : case H245_Capability::e_receiveAndTransmitVideoCapability : { const H245_VideoCapability & video = cap; if (video.GetTag() == H245_VideoCapability::e_genericVideoCapability) return FindCapability(H323Capability::e_Video, video, video); else if (video.GetTag() == H245_VideoCapability::e_extendedVideoCapability) return FindCapability(true,video); else return FindCapability(H323Capability::e_Video, video, NULL); } case H245_Capability::e_receiveDataApplicationCapability : case H245_Capability::e_transmitDataApplicationCapability : case H245_Capability::e_receiveAndTransmitDataApplicationCapability : { const H245_DataApplicationCapability & data = cap; return FindCapability(H323Capability::e_Data, data.m_application, NULL); } case H245_Capability::e_receiveUserInputCapability : case H245_Capability::e_transmitUserInputCapability : case H245_Capability::e_receiveAndTransmitUserInputCapability : { const H245_UserInputCapability & ui = cap; if (ui.GetTag() == H245_UserInputCapability::e_genericUserInputCapability) return FindCapability(H323Capability::e_UserInput, ui, ui); else return FindCapability(H323Capability::e_UserInput, ui, NULL); } case H245_Capability::e_receiveRTPAudioTelephonyEventCapability : return FindCapability(H323Capability::e_UserInput, SignalToneRFC2833_SubType); case H245_Capability::e_genericControlCapability : return FindCapability(H323Capability::e_GenericControl); case H245_Capability::e_conferenceCapability : return FindCapability(H323Capability::e_ConferenceControl); default : break; } return NULL; } H323Capability * H323Capabilities::FindCapability(const H245_DataType & dataType) const { PTRACE(4, "H323\tFindCapability: " << dataType.GetTagName()); for (PINDEX i = 0; i < table.GetSize(); i++) { H323Capability & capability = table[i]; PBoolean checkExact=false; switch (dataType.GetTag()) { case H245_DataType::e_audioData : { if (capability.GetMainType() == H323Capability::e_Audio) { const H245_AudioCapability & audio = dataType; checkExact = capability.IsMatch(audio); } break; } case H245_DataType::e_videoData : { if (capability.GetMainType() == H323Capability::e_Video) { const H245_VideoCapability & video = dataType; checkExact = capability.IsMatch(video); } break; } case H245_DataType::e_data : { if (capability.GetMainType() == H323Capability::e_Data) { const H245_DataApplicationCapability & data = dataType; checkExact = capability.IsMatch(data.m_application); } break; } #ifdef H323_H235 case H245_DataType::e_h235Media : { if (PIsDescendant(&capability, H323SecureCapability)) { const H245_H235Media & data = dataType; checkExact = capability.IsMatch(data.m_mediaType); } break; } #endif default : checkExact = FALSE; } if (checkExact) { H323Capability * compare = (H323Capability *)capability.Clone(); if (compare->OnReceivedPDU(dataType, FALSE) && *compare == capability) { delete compare; PTRACE(3, "H323\tFound capability: " << capability); return &capability; } delete compare; } } return NULL; } H323Capability * H323Capabilities::FindCapability(const H245_ModeElement & modeElement) const { PTRACE(4, "H323\tFindCapability: " << modeElement.m_type.GetTagName()); switch (modeElement.m_type.GetTag()) { case H245_ModeElementType::e_audioMode : { const H245_AudioMode & audio = modeElement.m_type; static unsigned const AudioSubTypes[] = { H245_AudioCapability::e_nonStandard, H245_AudioCapability::e_g711Alaw64k, H245_AudioCapability::e_g711Alaw56k, H245_AudioCapability::e_g711Ulaw64k, H245_AudioCapability::e_g711Ulaw56k, H245_AudioCapability::e_g722_64k, H245_AudioCapability::e_g722_56k, H245_AudioCapability::e_g722_48k, H245_AudioCapability::e_g728, H245_AudioCapability::e_g729, H245_AudioCapability::e_g729AnnexA, H245_AudioCapability::e_g7231, H245_AudioCapability::e_is11172AudioCapability, H245_AudioCapability::e_is13818AudioCapability, H245_AudioCapability::e_g729wAnnexB, H245_AudioCapability::e_g729AnnexAwAnnexB, H245_AudioCapability::e_g7231AnnexCCapability, H245_AudioCapability::e_gsmFullRate, H245_AudioCapability::e_gsmHalfRate, H245_AudioCapability::e_gsmEnhancedFullRate, H245_AudioCapability::e_genericAudioCapability, H245_AudioCapability::e_g729Extensions }; return FindCapability(H323Capability::e_Audio, audio, AudioSubTypes); } case H245_ModeElementType::e_videoMode : { const H245_VideoMode & video = modeElement.m_type; static unsigned const VideoSubTypes[] = { H245_VideoCapability::e_nonStandard, H245_VideoCapability::e_h261VideoCapability, H245_VideoCapability::e_h262VideoCapability, H245_VideoCapability::e_h263VideoCapability, H245_VideoCapability::e_is11172VideoCapability, H245_VideoCapability::e_genericVideoCapability }; return FindCapability(H323Capability::e_Video, video, VideoSubTypes); } case H245_ModeElementType::e_dataMode : { const H245_DataMode & data = modeElement.m_type; static unsigned const DataSubTypes[] = { H245_DataApplicationCapability_application::e_nonStandard, H245_DataApplicationCapability_application::e_t120, H245_DataApplicationCapability_application::e_dsm_cc, H245_DataApplicationCapability_application::e_userData, H245_DataApplicationCapability_application::e_t84, H245_DataApplicationCapability_application::e_t434, H245_DataApplicationCapability_application::e_h224, H245_DataApplicationCapability_application::e_nlpid, H245_DataApplicationCapability_application::e_dsvdControl, H245_DataApplicationCapability_application::e_h222DataPartitioning, H245_DataApplicationCapability_application::e_t30fax, H245_DataApplicationCapability_application::e_t140, H245_DataApplicationCapability_application::e_t38fax, H245_DataApplicationCapability_application::e_genericDataCapability }; return FindCapability(H323Capability::e_Data, data.m_application, DataSubTypes); } default : break; } return NULL; } H323Capability * H323Capabilities::FindCapability(H323Capability::MainTypes mainType, const PASN_Choice & subTypePDU, const H245_GenericCapability & gen) const { const H245_CapabilityIdentifier & id = gen.m_capabilityIdentifier; if (id.GetTag() != H245_CapabilityIdentifier::e_standard) return NULL; const PASN_ObjectId & idx = gen.m_capabilityIdentifier; PString oid = idx.AsString(); PTRACE(4, "H323\tFindCapability: " << mainType << " Generic " << oid); unsigned int subType = subTypePDU.GetTag(); for (PINDEX i = 0; i < table.GetSize(); i++) { H323Capability & capability = table[i]; if (capability.GetMainType() == mainType && (subType == UINT_MAX || capability.GetSubType() == subType) && (capability.GetIdentifier() == oid)) { PTRACE(3, "H323\tFound capability: " << capability); return &capability; } } return NULL; } H323Capability * H323Capabilities::FindCapability(H323Capability::MainTypes mainType, const PASN_Sequence & subTypePDU, const unsigned & capID, const H245_TerminalCapabilitySet & tcs) const { if (mainType != H323Capability::e_Security) return NULL; const H245_H235SecurityCapability & secCapNo = (const H245_H235SecurityCapability &)subTypePDU; const H245_CapabilityTableEntryNumber & capNo = secCapNo.m_mediaCapability; unsigned m_remNo = capNo; for (PINDEX i=0; i SetAssociatedCapability(capID); return FindCapability(H323Capability::e_Security, assocCap->GetCapabilityNumber()); } } } return NULL; } H323Capability * H323Capabilities::FindCapability(bool, const H245_ExtendedVideoCapability & gen) const { #ifdef H323_VIDEO H323Capability * newCap = NULL; for (PINDEX j=0; j < gen.m_videoCapability.GetSize(); ++j) { const H245_VideoCapability & vidCap = gen.m_videoCapability[j]; for (PINDEX i = 0; i < table.GetSize(); i++) { H323Capability & capability = table[i]; if (capability.GetMainType() == H323Capability::e_Video && capability.GetSubType() == H245_VideoCapability::e_extendedVideoCapability) { if (vidCap.GetTag() == H245_VideoCapability::e_genericVideoCapability) newCap = ((H323ExtendedVideoCapability &)capability).GetCapabilities().FindCapability(H323Capability::e_Video, vidCap, vidCap); else newCap = ((H323ExtendedVideoCapability &)capability).GetCapabilities().FindCapability(H323Capability::e_Video, vidCap, NULL); if (newCap) return &capability; } } } #endif return NULL; } H323Capability * H323Capabilities::FindCapability(H323Capability::MainTypes mainType, const PASN_Choice & subTypePDU, const unsigned * translationTable) const { unsigned int subTypeID = subTypePDU.GetTag(); if (subTypePDU.GetTag() != 0) { if (translationTable != NULL) subTypeID = translationTable[subTypeID]; return FindCapability(mainType, subTypeID); } PTRACE(4, "H323\tFindCapability: " << mainType << " nonStandard"); for (PINDEX i = 0; i < table.GetSize(); i++) { H323Capability & capability = table[i]; if (capability.IsMatch(subTypePDU)) { PTRACE(3, "H323\tFound capability: " << capability); return &capability; } } return NULL; } H323Capability * H323Capabilities::FindCapability(H323Capability::MainTypes mainType, unsigned subType) const { if (subType != UINT_MAX) { PTRACE(4, "H323\tFindCapability: " << mainType << " subtype=" << subType); } for (PINDEX i = 0; i < table.GetSize(); i++) { H323Capability & capability = table[i]; if (capability.GetMainType() == mainType && (subType == UINT_MAX || capability.GetSubType() == subType)) { PTRACE(3, "H323\tFound capability: " << capability); return &capability; } } return NULL; } PBoolean H323Capabilities::RemoveCapability(H323Capability::MainTypes capabilityType) { // List of codecs PStringList codecsToRemove; for (PINDEX i = 0; i < table.GetSize(); i++) { H323Capability & capability = table[i]; if (capabilityType == H323Capability::e_Video) { if ((capability.GetMainType() == H323Capability::e_Video) && (capability.GetSubType() != H245_VideoCapability::e_extendedVideoCapability)) codecsToRemove.AppendString(capability.GetFormatName()); } else if ((capabilityType == H323Capability::e_ExtendVideo) && (capability.GetMainType() == H323Capability::e_Video) && (capability.GetSubType() == H245_VideoCapability::e_extendedVideoCapability)) { codecsToRemove.AppendString(capability.GetFormatName()); } else if (capability.GetMainType() == capabilityType) codecsToRemove.AppendString(capability.GetFormatName()); } for (PINDEX i=0; i < codecsToRemove.GetSize(); i++) Remove(codecsToRemove[i]); return TRUE; } #ifdef H323_VIDEO PBoolean H323Capabilities::SetVideoEncoder(unsigned frameWidth, unsigned frameHeight, unsigned frameRate) { for (PINDEX i = 0; i < table.GetSize(); i++) { H323Capability & capability = table[i]; if (capability.GetMainType() == H323Capability::e_Video) capability.SetCustomEncode(frameWidth,frameHeight,frameRate); } return true; } PBoolean H323Capabilities::SetVideoFrameSize(H323Capability::CapabilityFrameSize frameSize, int frameUnits) { // Remove the unmatching capabilities if (frameSize != H323Capability::cif16MPI) Remove("*-16CIF*"); if (frameSize != H323Capability::cif4MPI) Remove("*-4CIF*"); if (frameSize != H323Capability::cifMPI) Remove("*-CIF*"); if (frameSize != H323Capability::qcifMPI) Remove("*-QCIF*"); if (frameSize != H323Capability::sqcifMPI) Remove("*-SQCIF*"); if (frameSize != H323Capability::p720MPI) Remove("*-720*"); if (frameSize != H323Capability::i1080MPI) Remove("*-1080*"); // Remove Generic size Capabilities PStringList genericCaps; if ((frameSize != H323Capability::i1080MPI) && (frameSize != H323Capability::p720MPI) && (frameSize != H323Capability::i480MPI) && (frameSize != H323Capability::cif16MPI) && (frameSize != H323Capability::cif4MPI)) { for (PINDEX i = 0; i < table.GetSize(); i++) { H323Capability & capability = table[i]; if ((capability.GetMainType() == H323Capability::e_Video) && (capability.GetSubType() != H245_VideoCapability::e_extendedVideoCapability)) { PCaselessString str = table[i].GetFormatName(); PString formatName = "*-*"; PStringArray wildcard = formatName.Tokenise('*', FALSE); if (!MatchWildcard(str, wildcard)) genericCaps.AppendString(str); } } Remove(genericCaps); } // Instruct remaining Video Capabilities to set Frame Size to new Value for (PINDEX i = 0; i < table.GetSize(); i++) { H323Capability & capability = table[i]; if (capability.GetMainType() == H323Capability::e_Video) capability.SetMaxFrameSize(frameSize,frameUnits); } return TRUE; } #endif void H323Capabilities::BuildPDU(const H323Connection & connection, H245_TerminalCapabilitySet & pdu) const { PINDEX tableSize = table.GetSize(); PINDEX setSize = set.GetSize(); //PAssert((tableSize > 0) == (setSize > 0), PLogicError); if (tableSize == 0 || setSize == 0) return; // Set the table of capabilities pdu.IncludeOptionalField(H245_TerminalCapabilitySet::e_capabilityTable); H245_H2250Capability & h225_0 = pdu.m_multiplexCapability; PINDEX rtpPacketizationCount = 0; PINDEX count = 0; for (PINDEX i = 0; i < tableSize; i++) { H323Capability & capability = table[i]; if (capability.IsUsable(connection)) { pdu.m_capabilityTable.SetSize(count+1); H245_CapabilityTableEntry & entry = pdu.m_capabilityTable[count++]; entry.m_capabilityTableEntryNumber = capability.GetCapabilityNumber(); entry.IncludeOptionalField(H245_CapabilityTableEntry::e_capability); capability.OnSendingPDU(entry.m_capability); h225_0.m_mediaPacketizationCapability.m_rtpPayloadType.SetSize(rtpPacketizationCount+1); if (H323SetRTPPacketization(h225_0.m_mediaPacketizationCapability.m_rtpPayloadType[rtpPacketizationCount], capability.GetMediaFormat(), RTP_DataFrame::MaxPayloadType)) { // Check if already in list PINDEX test; for (test = 0; test < rtpPacketizationCount; test++) { if (h225_0.m_mediaPacketizationCapability.m_rtpPayloadType[test] == h225_0.m_mediaPacketizationCapability.m_rtpPayloadType[rtpPacketizationCount]) break; } if (test == rtpPacketizationCount) rtpPacketizationCount++; } } } // Have some mediaPacketizations to include. if (rtpPacketizationCount > 0) { h225_0.m_mediaPacketizationCapability.m_rtpPayloadType.SetSize(rtpPacketizationCount); h225_0.m_mediaPacketizationCapability.IncludeOptionalField(H245_MediaPacketizationCapability::e_rtpPayloadType); } // Set the sets of compatible capabilities pdu.IncludeOptionalField(H245_TerminalCapabilitySet::e_capabilityDescriptors); pdu.m_capabilityDescriptors.SetSize(setSize); for (PINDEX outer = 0; outer < setSize; outer++) { H245_CapabilityDescriptor & desc = pdu.m_capabilityDescriptors[outer]; desc.m_capabilityDescriptorNumber = (unsigned)(outer + 1); desc.IncludeOptionalField(H245_CapabilityDescriptor::e_simultaneousCapabilities); PINDEX middleSize = set[outer].GetSize(); desc.m_simultaneousCapabilities.SetSize(middleSize); for (PINDEX middle = 0; middle < middleSize; middle++) { H245_AlternativeCapabilitySet & alt = desc.m_simultaneousCapabilities[middle]; PINDEX innerSize = set[outer][middle].GetSize(); alt.SetSize(innerSize); count = 0; for (PINDEX inner = 0; inner < innerSize; inner++) { H323Capability & capability = set[outer][middle][inner]; if (capability.IsUsable(connection)) { alt.SetSize(count+1); alt[count++] = capability.GetCapabilityNumber(); } } } } } PBoolean H323Capabilities::Merge(const H323Capabilities & newCaps) { PTRACE_IF(4, !table.IsEmpty(), "H245\tCapability merge of:\n" << newCaps << "\nInto:\n" << *this); // Add any new capabilities not already in set. PINDEX i; for (i = 0; i < newCaps.GetSize(); i++) { if (FindCapability(newCaps[i]) == NULL) Copy(newCaps[i]); } // This should merge instead of just adding to it. PINDEX outerSize = newCaps.set.GetSize(); PINDEX outerBase = set.GetSize(); set.SetSize(outerBase+outerSize); for (PINDEX outer = 0; outer < outerSize; outer++) { PINDEX middleSize = newCaps.set[outer].GetSize(); set[outerBase+outer].SetSize(middleSize); for (PINDEX middle = 0; middle < middleSize; middle++) { PINDEX innerSize = newCaps.set[outer][middle].GetSize(); for (PINDEX inner = 0; inner < innerSize; inner++) { H323Capability * cap = FindCapability(newCaps.set[outer][middle][inner].GetCapabilityNumber()); if (cap != NULL) set[outerBase+outer][middle].Append(cap); } } } PTRACE_IF(4, !table.IsEmpty(), "H245\tCapability merge result:\n" << *this); PTRACE(3, "H245\tReceived capability set, is " << (table.IsEmpty() ? "rejected" : "accepted")); return !table.IsEmpty(); } const H323CapabilitiesSet & H323Capabilities::GetCapabilitySet() { return set; } void H323Capabilities::Reorder(const PStringArray & preferenceOrder) { if (preferenceOrder.IsEmpty()) return; table.DisallowDeleteObjects(); PINDEX preference = 0; PINDEX base = 0; for (preference = 0; preference < preferenceOrder.GetSize(); preference++) { PStringArray wildcard = preferenceOrder[preference].Tokenise('*', FALSE); for (PINDEX idx = base; idx < table.GetSize(); idx++) { PCaselessString str = table[idx].GetFormatName(); if (MatchWildcard(str, wildcard)) { if (idx != base) table.InsertAt(base, table.RemoveAt(idx)); base++; idx = base-1; // start from last allocated } } } for (PINDEX outer = 0; outer < set.GetSize(); outer++) { for (PINDEX middle = 0; middle < set[outer].GetSize(); middle++) { H323CapabilitiesList & list = set[outer][middle]; for (PINDEX idx = 0; idx < table.GetSize(); idx++) { for (PINDEX inner = 0; inner < list.GetSize(); inner++) { if (&table[idx] == &list[inner]) { list.Append(list.RemoveAt(inner)); break; } } } } } table.AllowDeleteObjects(); } PBoolean H323Capabilities::IsAllowed(const H323Capability & capability) { return IsAllowed(capability.GetCapabilityNumber()); } PBoolean H323Capabilities::IsAllowed(const unsigned a_capno) { // Check that capno is actually in the set PINDEX outerSize = set.GetSize(); for (PINDEX outer = 0; outer < outerSize; outer++) { PINDEX middleSize = set[outer].GetSize(); for (PINDEX middle = 0; middle < middleSize; middle++) { PINDEX innerSize = set[outer][middle].GetSize(); for (PINDEX inner = 0; inner < innerSize; inner++) { if (a_capno == set[outer][middle][inner].GetCapabilityNumber()) { return TRUE; } } } } return FALSE; } PBoolean H323Capabilities::IsAllowed(const H323Capability & capability1, const H323Capability & capability2) { return IsAllowed(capability1.GetCapabilityNumber(), capability2.GetCapabilityNumber()); } PBoolean H323Capabilities::IsAllowed(const unsigned a_capno1, const unsigned a_capno2) { if (a_capno1 == a_capno2) { PTRACE(1, "H323\tH323Capabilities::IsAllowed() capabilities are the same."); return TRUE; } PINDEX outerSize = set.GetSize(); for (PINDEX outer = 0; outer < outerSize; outer++) { PINDEX middleSize = set[outer].GetSize(); for (PINDEX middle = 0; middle < middleSize; middle++) { PINDEX innerSize = set[outer][middle].GetSize(); for (PINDEX inner = 0; inner < innerSize; inner++) { if (a_capno1 == set[outer][middle][inner].GetCapabilityNumber()) { /* Now go searching for the other half... */ for (PINDEX middle2 = 0; middle2 < middleSize; ++middle2) { if (middle != middle2) { PINDEX innerSize2 = set[outer][middle2].GetSize(); for (PINDEX inner2 = 0; inner2 < innerSize2; ++inner2) { if (a_capno2 == set[outer][middle2][inner2].GetCapabilityNumber()) { return TRUE; } } } } } } } } return FALSE; } const H323CapabilitiesSet & H323Capabilities::GetSet() const { return this->set; } ///////////////////////////////////////////////////////////////////////////// #ifndef PASN_NOPRINTON struct msNonStandardCodecDef { const char * name; BYTE sig[2]; }; static msNonStandardCodecDef msNonStandardCodec[] = { { "L&H CELP 4.8k", { 0x01, 0x11 } }, { "ADPCM", { 0x02, 0x00 } }, { "L&H CELP 8k", { 0x02, 0x11 } }, { "L&H CELP 12k", { 0x03, 0x11 } }, { "L&H CELP 16k", { 0x04, 0x11 } }, { "IMA-ADPCM", { 0x11, 0x00 } }, { "GSM", { 0x31, 0x00 } }, { NULL, { 0, 0 } } }; void H245_AudioCapability::PrintOn(ostream & strm) const { strm << GetTagName(); // tag 0 is nonstandard if (tag == 0) { H245_NonStandardParameter & param = (H245_NonStandardParameter &)GetObject(); const PBYTEArray & data = param.m_data; switch (param.m_nonStandardIdentifier.GetTag()) { case H245_NonStandardIdentifier::e_h221NonStandard: { H245_NonStandardIdentifier_h221NonStandard & h221 = param.m_nonStandardIdentifier; // Microsoft is 181/0/21324 if ((h221.m_t35CountryCode == 181) && (h221.m_t35Extension == 0) && (h221.m_manufacturerCode == 21324) ) { PString name = "Unknown"; PINDEX i; if (data.GetSize() >= 21) { for (i = 0; msNonStandardCodec[i].name != NULL; i++) { if ((data[20] == msNonStandardCodec[i].sig[0]) && (data[21] == msNonStandardCodec[i].sig[1])) { name = msNonStandardCodec[i].name; break; } } } strm << (PString(" [Microsoft") & name) << "]"; } // Equivalence is 9/0/61 else if ((h221.m_t35CountryCode == 9) && (h221.m_t35Extension == 0) && (h221.m_manufacturerCode == 61) ) { PString name; if (data.GetSize() > 0) name = PString((const char *)(const BYTE *)data, data.GetSize()); strm << " [Equivalence " << name << "]"; } // Xiph is 181/0/38 else if ((h221.m_t35CountryCode == 181) && (h221.m_t35Extension == 0) && (h221.m_manufacturerCode == 38) ) { PString name; if (data.GetSize() > 0) name = PString((const char *)(const BYTE *)data, data.GetSize()); strm << " [Xiph " << name << "]"; } // Cisco is 181/0/18 else if ((h221.m_t35CountryCode == 181) && (h221.m_t35Extension == 0) && (h221.m_manufacturerCode == 18) ) { PString name; if (data.GetSize() > 0) name = PString((const char *)(const BYTE *)data, data.GetSize()); strm << " [Cisco " << name << "]"; } } break; default: break; } } if (choice == NULL) strm << " (NULL)"; else { strm << ' ' << *choice; } //PASN_Choice::PrintOn(strm); } #endif h323plus/src/h224.cxx0000644000175000017500000003632711530146251013112 0ustar markmark/* * h224.cxx * * H.224 implementation for the OpenH323 Project. * * Copyright (c) 2006 Network for Educational Technology, ETH Zurich. * Written by Hannes Friederich. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * Contributor(s): ______________________________________. * * $Log: h224.cxx,v $ * Revision 1.6 2011/02/20 08:11:21 willamowius * fix gcc warning * * Revision 1.5 2011/02/20 07:03:00 shorne * Improving H.224 stability by ensuring correct initialization and removing nested mutexes. * * Revision 1.4 2011/01/12 12:51:52 shorne * H.224 bi-directional support added * * Revision 1.3 2008/05/23 11:21:25 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.2 2007/11/01 14:35:52 willamowius * add newline at end of file * * Revision 1.1 2007/08/06 20:51:05 shorne * First commit of h323plus * * Revision 1.1 2006/06/22 11:07:23 shorne * Backport of FECC (H.224) from Opal * * Revision 1.3 2006/05/01 10:29:50 csoutheren * Added pragams for gcc < 4 * * Revision 1.2 2006/04/24 12:53:50 rjongbloed * Port of H.224 Far End Camera Control to DevStudio/Windows * * Revision 1.1 2006/04/20 16:48:17 hfriederich * Initial version of H.224/H.281 implementation. * */ #include #include #ifdef H323_H224 #ifdef __GNUC__ #pragma implementation "h224.h" #pragma implementation "h224handler.h" #endif #ifdef _MSC_VER #pragma warning(disable : 4244) #endif #include #include #include #include H224_Frame::H224_Frame(PINDEX size) : Q922_Frame(H224_HEADER_SIZE + size) { SetHighPriority(FALSE); SetControlFieldOctet(0x03); BYTE *data = GetInformationFieldPtr(); // setting destination & source terminal address to BROADCAST data[0] = 0; data[1] = 0; data[2] = 0; data[3] = 0; // setting Client ID to CME data[4] = 0; // setting ES / BS / C1 / C0 / Segment number to zero data[5] = 0; } H224_Frame::~H224_Frame() { } void H224_Frame::SetHighPriority(PBoolean flag) { SetHighOrderAddressOctet(0x00); if(flag) { SetLowOrderAddressOctet(0x71); } else { SetLowOrderAddressOctet(0x061); } } WORD H224_Frame::GetDestinationTerminalAddress() const { BYTE *data = GetInformationFieldPtr(); return (WORD)((data[0] << 8) | data[1]); } void H224_Frame::SetDestinationTerminalAddress(WORD address) { BYTE *data = GetInformationFieldPtr(); data[0] = (BYTE)(address >> 8); data[1] = (BYTE) address; } WORD H224_Frame::GetSourceTerminalAddress() const { BYTE *data = GetInformationFieldPtr(); return (WORD)((data[2] << 8) | data[3]); } void H224_Frame::SetSourceTerminalAddress(WORD address) { BYTE *data = GetInformationFieldPtr(); data[2] = (BYTE)(address >> 8); data[3] = (BYTE) address; } BYTE H224_Frame::GetClientID() const { BYTE *data = GetInformationFieldPtr(); return data[4] & 0x7f; } void H224_Frame::SetClientID(BYTE clientID) { // At the moment, only H.281 (client ID 0x01) // is supported PAssert(clientID <= 0x01, "Invalid client ID"); BYTE *data = GetInformationFieldPtr(); data[4] = clientID; } PBoolean H224_Frame::GetBS() const { BYTE *data = GetInformationFieldPtr(); return (data[5] & 0x80) != 0; } void H224_Frame::SetBS(PBoolean flag) { BYTE *data = GetInformationFieldPtr(); if(flag) { data[5] |= 0x80; } else { data[5] &= 0x7f; } } PBoolean H224_Frame::GetES() const { BYTE *data = GetInformationFieldPtr(); return (data[5] & 0x40) != 0; } void H224_Frame::SetES(PBoolean flag) { BYTE *data = GetInformationFieldPtr(); if(flag) { data[5] |= 0x40; } else { data[5] &= 0xbf; } } PBoolean H224_Frame::GetC1() const { BYTE *data = GetInformationFieldPtr(); return (data[5] & 0x20) != 0; } void H224_Frame::SetC1(PBoolean flag) { BYTE *data = GetInformationFieldPtr(); if(flag) { data[5] |= 0x20; } else { data[5] &= 0xdf; } } PBoolean H224_Frame::GetC0() const { BYTE *data = GetInformationFieldPtr(); return (data[5] & 0x10) != 0; } void H224_Frame::SetC0(PBoolean flag) { BYTE *data = GetInformationFieldPtr(); if(flag) { data[5] |= 0x10; } else { data[5] &= 0xef; } } BYTE H224_Frame::GetSegmentNumber() const { BYTE *data = GetInformationFieldPtr(); return (data[5] & 0x0f); } void H224_Frame::SetSegmentNumber(BYTE segmentNumber) { BYTE *data = GetInformationFieldPtr(); data[5] &= 0xf0; data[5] |= (segmentNumber & 0x0f); } PBoolean H224_Frame::Decode(const BYTE *data, PINDEX size) { PBoolean result = Q922_Frame::Decode(data, size); if(result == FALSE) { return FALSE; } // doing some validity check for H.224 frames BYTE highOrderAddressOctet = GetHighOrderAddressOctet(); BYTE lowOrderAddressOctet = GetLowOrderAddressOctet(); BYTE controlFieldOctet = GetControlFieldOctet(); if((highOrderAddressOctet != 0x00) || (!(lowOrderAddressOctet == 0x61 || lowOrderAddressOctet == 0x71)) || (controlFieldOctet != 0x03) || (GetClientID() > 0x02)) { return FALSE; } return TRUE; } //////////////////////////////////// OpalH224Handler::OpalH224Handler(H323Channel::Directions dir, H323Connection & connection, unsigned sessionID) : canTransmit(FALSE), transmitMutex(), sessionDirection(dir) { H245_TransportAddress addr; connection.GetControlChannel().SetUpTransportPDU(addr, H323Transport::UseLocalTSAP); session = connection.UseSession(sessionID,addr,H323Channel::IsBidirectional); h281Handler = connection.CreateH281ProtocolHandler(*this); receiverThread = NULL; } OpalH224Handler::~OpalH224Handler() { delete h281Handler; } void OpalH224Handler::StartTransmit() { PWaitAndSignal m(transmitMutex); if(canTransmit == TRUE) { return; } canTransmit = TRUE; transmitFrame = new RTP_DataFrame(300); // Use payload code 100 as this seems to be common to other implementations transmitFrame->SetPayloadType((RTP_DataFrame::PayloadTypes)100); transmitBitIndex = 7; transmitStartTime = new PTime(); SendClientList(); SendExtraCapabilities(); } void OpalH224Handler::StopTransmit() { PWaitAndSignal m(transmitMutex); delete transmitStartTime; transmitStartTime = NULL; canTransmit = FALSE; } void OpalH224Handler::StartReceive() { if(receiverThread != NULL) { PTRACE(5, "H.224 handler is already receiving"); return; } receiverThread = CreateH224ReceiverThread(); receiverThread->Resume(); } void OpalH224Handler::StopReceive() { if(receiverThread != NULL) { receiverThread->Close(); } } PBoolean OpalH224Handler::SendClientList() { // PWaitAndSignal m(transmitMutex); if(canTransmit == FALSE) { return FALSE; } H224_Frame h224Frame = H224_Frame(4); h224Frame.SetHighPriority(TRUE); h224Frame.SetDestinationTerminalAddress(H224_BROADCAST); h224Frame.SetSourceTerminalAddress(H224_BROADCAST); // CME frame h224Frame.SetClientID(0x00); // Begin and end of sequence h224Frame.SetBS(TRUE); h224Frame.SetES(TRUE); h224Frame.SetC1(FALSE); h224Frame.SetC0(FALSE); h224Frame.SetSegmentNumber(0); BYTE *ptr = h224Frame.GetClientDataPtr(); ptr[0] = 0x01; // Client list code ptr[1] = 0x00; // Message code ptr[2] = 0x01; // one client ptr[3] = (0x80 | H281_CLIENT_ID); // H.281 with etra capabilities TransmitFrame(h224Frame); return TRUE; } PBoolean OpalH224Handler::SendExtraCapabilities() { // PWaitAndSignal m(transmitMutex); if(canTransmit == FALSE) { return FALSE; } h281Handler->SendExtraCapabilities(); return TRUE; } PBoolean OpalH224Handler::SendClientListCommand() { PWaitAndSignal m(transmitMutex); if(canTransmit == FALSE) { return FALSE; } H224_Frame h224Frame = H224_Frame(2); h224Frame.SetHighPriority(TRUE); h224Frame.SetDestinationTerminalAddress(H224_BROADCAST); h224Frame.SetSourceTerminalAddress(H224_BROADCAST); // CME frame h224Frame.SetClientID(0x00); // Begin and end of sequence h224Frame.SetBS(TRUE); h224Frame.SetES(TRUE); h224Frame.SetC1(FALSE); h224Frame.SetC0(FALSE); h224Frame.SetSegmentNumber(0); BYTE *ptr = h224Frame.GetClientDataPtr(); ptr[0] = 0x01; // Client list code ptr[1] = 0xff; // Command code TransmitFrame(h224Frame); return TRUE; } PBoolean OpalH224Handler::SendExtraCapabilitiesCommand(BYTE clientID) { PWaitAndSignal m(transmitMutex); if(canTransmit == FALSE) { return FALSE; } if(clientID != H281_CLIENT_ID) { return FALSE; } H224_Frame h224Frame = H224_Frame(4); h224Frame.SetHighPriority(TRUE); h224Frame.SetDestinationTerminalAddress(H224_BROADCAST); h224Frame.SetSourceTerminalAddress(H224_BROADCAST); // CME frame h224Frame.SetClientID(0x00); // Begin and end of sequence h224Frame.SetBS(TRUE); h224Frame.SetES(TRUE); h224Frame.SetC1(FALSE); h224Frame.SetC0(FALSE); h224Frame.SetSegmentNumber(0); BYTE *ptr = h224Frame.GetClientDataPtr(); ptr[0] = 0x01; // Client list code ptr[1] = 0xFF; // Response code ptr[2] = (0x80 | clientID); // clientID with extra capabilities TransmitFrame(h224Frame); return TRUE; } PBoolean OpalH224Handler::SendExtraCapabilitiesMessage(BYTE clientID, BYTE *data, PINDEX length) { PWaitAndSignal m(transmitMutex); // only H.281 supported at the moment if(clientID != H281_CLIENT_ID) { return FALSE; } if(canTransmit == FALSE) { return FALSE; } H224_Frame h224Frame = H224_Frame(length+3); h224Frame.SetHighPriority(TRUE); h224Frame.SetDestinationTerminalAddress(H224_BROADCAST); h224Frame.SetSourceTerminalAddress(H224_BROADCAST); // use clientID zero to indicate a CME frame h224Frame.SetClientID(0x00); // Begin and end of sequence, rest is zero h224Frame.SetBS(TRUE); h224Frame.SetES(TRUE); h224Frame.SetC1(FALSE); h224Frame.SetC0(FALSE); h224Frame.SetSegmentNumber(0); BYTE *ptr = h224Frame.GetClientDataPtr(); ptr[0] = 0x02; // Extra Capabilities code ptr[1] = 0x00; // Response Code ptr[2] = (0x80 | clientID); // EX CAPS and ClientID memcpy(ptr+3, data, length); TransmitFrame(h224Frame); return TRUE; } PBoolean OpalH224Handler::TransmitClientFrame(BYTE clientID, H224_Frame & frame) { if(canTransmit == FALSE) { return FALSE; } PWaitAndSignal m(transmitMutex); // only H.281 is supported at the moment if(clientID != H281_CLIENT_ID) { return FALSE; } frame.SetClientID(clientID); TransmitFrame(frame); return TRUE; } PBoolean OpalH224Handler::OnReceivedFrame(H224_Frame & frame) { if(frame.GetDestinationTerminalAddress() != H224_BROADCAST) { // only broadcast frames are handled at the moment PTRACE(3, "Received H.224 frame with non-broadcast address"); return TRUE; } BYTE clientID = frame.GetClientID(); if(clientID == 0x00) { return OnReceivedCMEMessage(frame); } if(clientID == H281_CLIENT_ID) { h281Handler->OnReceivedMessage((const H281_Frame &)frame); } return TRUE; } PBoolean OpalH224Handler::OnReceivedCMEMessage(H224_Frame & frame) { BYTE *data = frame.GetClientDataPtr(); if(data[0] == 0x01) { // Client list code if(data[1] == 0x00) { // Message return OnReceivedClientList(frame); } else if(data[1] == 0xff) { // Command return OnReceivedClientListCommand(); } } else if(data[0] == 0x02) { // Extra Capabilities code if(data[1] == 0x00) { // Message return OnReceivedExtraCapabilities(frame); } else if(data[1] == 0xff) {// Command return OnReceivedExtraCapabilitiesCommand(); } } // incorrect frames are simply ignored return TRUE; } PBoolean OpalH224Handler::OnReceivedClientList(H224_Frame & frame) { BYTE *data = frame.GetClientDataPtr(); BYTE numberOfClients = data[2]; PINDEX i = 3; PBoolean remoteHasH281 = FALSE; while(numberOfClients > 0) { BYTE clientID = (data[i] & 0x7f); if(clientID == H281_CLIENT_ID) { remoteHasH281 = TRUE; i++; } else if(clientID == 0x7e) { // extended client ID i += 2; } else if(clientID == 0x7f) { // non-standard client ID i += 6; } else { // other standard client ID such as T.140 i++; } numberOfClients--; } h281Handler->SetRemoteHasH281(remoteHasH281); return TRUE; } PBoolean OpalH224Handler::OnReceivedClientListCommand() { SendClientList(); return TRUE; } PBoolean OpalH224Handler::OnReceivedExtraCapabilities(H224_Frame & frame) { BYTE *data = frame.GetClientDataPtr(); BYTE clientID = (data[2] & 0x7f); if(clientID == H281_CLIENT_ID) { PINDEX size = frame.GetClientDataSize() - 3; h281Handler->OnReceivedExtraCapabilities((data + 3), size); } return TRUE; } PBoolean OpalH224Handler::OnReceivedExtraCapabilitiesCommand() { SendExtraCapabilities(); return TRUE; } OpalH224ReceiverThread * OpalH224Handler::CreateH224ReceiverThread() { return new OpalH224ReceiverThread(this, *session); } void OpalH224Handler::TransmitFrame(H224_Frame & frame) { PINDEX size = frame.GetEncodedSize(); if(!frame.Encode(transmitFrame->GetPayloadPtr(), size, transmitBitIndex)) { PTRACE(3, "H224\tFailed to encode H.224 frame"); return; } // determining correct timestamp PTime currentTime = PTime(); PTimeInterval timePassed = currentTime - *transmitStartTime; transmitFrame->SetTimestamp((DWORD)timePassed.GetMilliSeconds() * 8); transmitFrame->SetPayloadSize(size); transmitFrame->SetMarker(TRUE); if(!session->WriteData(*transmitFrame)) { PTRACE(3, "H224\tFailed to write encoded H.224 frame"); } else { PTRACE(3, "H224\tEncoded H.224 frame sent"); } } //////////////////////////////////// OpalH224ReceiverThread::OpalH224ReceiverThread(OpalH224Handler *theH224Handler, RTP_Session & session) : PThread(10000, NoAutoDeleteThread, HighestPriority, "H.224 Receiver Thread"), rtpSession(session) { h224Handler = theH224Handler; timestamp = 0; terminate = FALSE; } OpalH224ReceiverThread::~OpalH224ReceiverThread() { } void OpalH224ReceiverThread::Main() { RTP_DataFrame packet = RTP_DataFrame(300); H224_Frame h224Frame = H224_Frame(); for (;;) { inUse.Wait(); if(!rtpSession.ReadBufferedData(timestamp, packet)) { inUse.Signal(); return; } timestamp = packet.GetTimestamp(); if(h224Frame.Decode(packet.GetPayloadPtr(), packet.GetPayloadSize())) { PBoolean result = h224Handler->OnReceivedFrame(h224Frame); if(result == FALSE) { // FALSE indicates a serious problem, therefore the thread is closed return; } } else { PTRACE(3, "Decoding of H.224 frame failed"); } inUse.Signal(); if(terminate == TRUE) { return; } } } void OpalH224ReceiverThread::Close() { rtpSession.Close(TRUE); inUse.Wait(); terminate = TRUE; inUse.Signal(); PAssert(WaitForTermination(10000), "H224 receiver thread not terminated"); } #endif // H323_H224 h323plus/src/dllmain.cxx0000644000175000017500000000303311015524253014037 0ustar markmark/* * dllmain.cxx * * DLL main entry point for OpenH323.dll * * Open H323 Library * * Copyright (c) 1993-1998 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: dllmain.cxx,v $ * Revision 1.2 2008/05/23 11:21:15 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:51:03 shorne * First commit of h323plus * * Revision 1.3 2002/11/10 23:14:40 robertj * Made sure static variables are included in DLL * * Revision 1.2 2000/05/02 04:32:26 robertj * Fixed copyright notice comment. * * Revision 1.1 2000/04/13 00:02:01 robertj * Added ability to create DLL version of library. * */ #include #define H323_STATIC_LIB #include HINSTANCE PDllInstance; PBoolean WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID) { if (fdwReason == DLL_PROCESS_ATTACH) PDllInstance = hinstDLL; return TRUE; } h323plus/src/t120proto.cxx0000644000175000017500000001303211015524376014177 0ustar markmark/* * t120proto.cxx * * T.120 protocol handler * * Open Phone Abstraction Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: t120proto.cxx,v $ * Revision 1.2 2008/05/23 11:22:38 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:51:08 shorne * First commit of h323plus * * Revision 1.6 2004/05/20 02:07:29 csoutheren * Use macro to work around MSVC internal compiler errors * * Revision 1.5 2004/05/19 07:38:24 csoutheren * Changed OpalMediaFormat handling to use abstract factory method functions * * Revision 1.4 2002/09/03 06:04:11 robertj * Added globally accessible functions for media format name. * * Revision 1.3 2002/08/05 10:03:48 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.2 2002/02/01 01:47:34 robertj * Some more fixes for T.120 channel establishment, more to do! * * Revision 1.1 2001/07/17 04:44:32 robertj * Partial implementation of T.120 and T.38 logical channels. * */ #include #ifdef __GNUC__ #pragma implementation "t120proto.h" #endif #include "t120proto.h" #include "transports.h" #include "mcspdu.h" #include "x224.h" class T120_X224 : public X224 { PCLASSINFO(T120_X224, X224); public: PBoolean Read(H323Transport & transport); PBoolean Write(H323Transport & transport); }; class T120ConnectPDU : public MCS_ConnectMCSPDU { PCLASSINFO(T120ConnectPDU, MCS_ConnectMCSPDU); public: PBoolean Read(H323Transport & transport); PBoolean Write(H323Transport & transport); protected: T120_X224 x224; }; #define new PNEW ///////////////////////////////////////////////////////////////////////////// PBoolean T120_X224::Read(H323Transport & transport) { PBYTEArray rawData; if (!transport.ReadPDU(rawData)) { PTRACE(1, "T120\tRead of X224 failed: " << transport.GetErrorText()); return FALSE; } if (Decode(rawData)) { PTRACE(1, "T120\tDecode of PDU failed:\n " << setprecision(2) << *this); return FALSE; } PTRACE(4, "T120\tRead X224 PDU:\n " << setprecision(2) << *this); return TRUE; } PBoolean T120_X224::Write(H323Transport & transport) { PBYTEArray rawData; PTRACE(4, "T120\tWrite X224 PDU:\n " << setprecision(2) << *this); if (!Encode(rawData)) { PTRACE(1, "T120\tEncode of PDU failed:\n " << setprecision(2) << *this); return FALSE; } if (!transport.WritePDU(rawData)) { PTRACE(1, "T120\tWrite X224 PDU failed: " << transport.GetErrorText()); return FALSE; } return TRUE; } ///////////////////////////////////////////////////////////////////////////// PBoolean T120ConnectPDU::Read(H323Transport & transport) { if (!x224.Read(transport)) return FALSE; // An X224 Data PDU... if (x224.GetCode() != X224::DataPDU) { PTRACE(1, "T120\tX224 must be data PDU"); return FALSE; } // ... contains the T120 MCS PDU PBER_Stream ber = x224.GetData(); if (!Decode(ber)) { PTRACE(1, "T120\tDecode of PDU failed:\n " << setprecision(2) << *this); return FALSE; } PTRACE(4, "T120\tReceived MCS Connect PDU:\n " << setprecision(2) << *this); return TRUE; } PBoolean T120ConnectPDU::Write(H323Transport & transport) { PTRACE(4, "T120\tSending MCS Connect PDU:\n " << setprecision(2) << *this); PBER_Stream ber; Encode(ber); ber.CompleteEncoding(); x224.BuildData(ber); return x224.Write(transport); } ///////////////////////////////////////////////////////////////////////////// OpalT120Protocol::OpalT120Protocol() { } PBoolean OpalT120Protocol::Originate(H323Transport & transport) { PTRACE(3, "T120\tOriginate, sending X224 CONNECT-REQUEST"); T120_X224 x224; x224.BuildConnectRequest(); if (!x224.Write(transport)) return FALSE; transport.SetReadTimeout(10000); // Wait 10 seconds for reply if (!x224.Read(transport)) return FALSE; if (x224.GetCode() != X224::ConnectConfirm) { PTRACE(1, "T120\tPDU was not X224 CONNECT-CONFIRM"); return FALSE; } T120ConnectPDU pdu; while (pdu.Read(transport)) { if (!HandleConnect(pdu)) return TRUE; } return FALSE; } PBoolean OpalT120Protocol::Answer(H323Transport & transport) { PTRACE(3, "T120\tAnswer, awaiting X224 CONNECT-REQUEST"); T120_X224 x224; transport.SetReadTimeout(60000); // Wait 60 seconds for reply do { if (!x224.Read(transport)) return FALSE; } while (x224.GetCode() != X224::ConnectRequest); x224.BuildConnectConfirm(); if (!x224.Write(transport)) return FALSE; T120ConnectPDU pdu; while (pdu.Read(transport)) { if (!HandleConnect(pdu)) return TRUE; } return FALSE; } PBoolean OpalT120Protocol::HandleConnect(const MCS_ConnectMCSPDU & /*pdu*/) { return TRUE; } PBoolean OpalT120Protocol::HandleDomain(const MCS_DomainMCSPDU & /*pdu*/) { return TRUE; } ///////////////////////////////////////////////////////////////////////////// h323plus/src/h235auth.cxx0000644000175000017500000010074111652132710013766 0ustar markmark/* * h235auth.cxx * * H.235 security PDU's * * H323Plus Library * * Copyright (c) 1998-2001 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): __________________________________ * * $Id: h235auth.cxx,v 1.12 2011/10/27 01:37:12 shorne Exp $ * */ #include #ifdef __GNUC__ #pragma implementation "h235auth.h" #endif #if defined(_WIN32) && (_MSC_VER > 1300) #pragma warning(disable:4244) // warning about possible loss of data #endif #include "h235auth.h" #include "h323pdu.h" #include #include #define new PNEW ///////////////////////////////////////////////////////////////////////////// #ifdef H323_H235 static const char H235AuthenticatorPluginBaseClass[] = "H235Authenticator"; #if PTLIB_VER >= 2110 template <> H235Authenticator * PDevicePluginFactory::Worker::Create(const PDefaultPFactoryKey & type) const #else template <> H235Authenticator * PDevicePluginFactory::Worker::Create(const PString & type) const #endif { return H235Authenticator::CreateAuthenticator(type); } typedef PDevicePluginAdapter PDevicePluginH235; PFACTORY_CREATE(PFactory, PDevicePluginH235, H235AuthenticatorPluginBaseClass, true); #endif /////////////////////////////////////////////////////////////////////////////// H235Authenticator::H235Authenticator() { enabled = TRUE; sentRandomSequenceNumber = PRandom::Number()&INT_MAX; lastRandomSequenceNumber = 0; lastTimestamp = 0; timestampGracePeriod = 2*60*60+10; // 2 hours 10 seconds to allow for DST adjustments usage = GKAdmission; // Set Default Application to GKAdmission connection = NULL; } PStringArray H235Authenticator::GetAuthenticatorList() { PStringArray authList; PFactory::KeyList_T keyList = PFactory::GetKeyList(); PFactory::KeyList_T::const_iterator r; for (r = keyList.begin(); r != keyList.end(); ++r) { authList.AppendString(*r); } return authList; } #ifdef H323_H235 PBoolean H235Authenticator::GetAuthenticatorCapabilities(const PString & deviceName, H235Authenticator::Capabilities * caps, PPluginManager * pluginMgr) { if (pluginMgr == NULL) pluginMgr = &PPluginManager::GetPluginManager(); return pluginMgr->GetPluginsDeviceCapabilities(H235AuthenticatorPluginBaseClass,"",deviceName, caps); } H235Authenticator * H235Authenticator::CreateAuthenticator(const PString & authname, PPluginManager * pluginMgr) { if (pluginMgr == NULL) pluginMgr = &PPluginManager::GetPluginManager(); return (H235Authenticator *)pluginMgr->CreatePluginsDeviceByName(authname, H235AuthenticatorPluginBaseClass,0); } H235Authenticator * H235Authenticator::CreateAuthenticatorByID(const PString & identifier) { PBoolean found=false; PStringArray list = GetAuthenticatorList(); for (PINDEX i=0; i < list.GetSize(); ++i) { Capabilities caps; if (GetAuthenticatorCapabilities(list[i],&caps)) { for (std::list::const_iterator r = caps.capabilityList.begin(); r != caps.capabilityList.end(); ++r) if (PString(r->m_identifier) == identifier) { found = true; break; } } if (found) return CreateAuthenticator(list[i]); } return NULL; } #endif void H235Authenticator::PrintOn(ostream & strm) const { PWaitAndSignal m(mutex); strm << GetName() << '<'; if (IsActive()) strm << "active"; else if (!enabled) strm << "disabled"; else if (password.IsEmpty()) strm << "no-pwd"; else strm << "inactive"; strm << '>'; } PBoolean H235Authenticator::PrepareTokens(PASN_Array & clearTokens, PASN_Array & cryptoTokens) { PWaitAndSignal m(mutex); if (!IsActive()) return FALSE; H235_ClearToken * clearToken = CreateClearToken(); if (clearToken != NULL) { // Check if already have a token of thsi type and overwrite it for (PINDEX i = 0; i < clearTokens.GetSize(); i++) { H235_ClearToken & oldToken = (H235_ClearToken &)clearTokens[i]; if (clearToken->m_tokenOID == oldToken.m_tokenOID) { oldToken = *clearToken; delete clearToken; clearToken = NULL; break; } } if (clearToken != NULL) clearTokens.Append(clearToken); } H225_CryptoH323Token * cryptoToken = CreateCryptoToken(); if (cryptoToken != NULL) cryptoTokens.Append(cryptoToken); return TRUE; } H235_ClearToken * H235Authenticator::CreateClearToken() { return NULL; } H225_CryptoH323Token * H235Authenticator::CreateCryptoToken() { return NULL; } PBoolean H235Authenticator::Finalise(PBYTEArray & /*rawPDU*/) { return TRUE; } H235Authenticator::ValidationResult H235Authenticator::ValidateTokens( const PASN_Array & clearTokens, const PASN_Array & cryptoTokens, const PBYTEArray & rawPDU) { PWaitAndSignal m(mutex); if (!IsActive()) return e_Disabled; PINDEX i; for (i = 0; i < clearTokens.GetSize(); i++) { ValidationResult s = ValidateClearToken((H235_ClearToken &)clearTokens[i]); if (s != e_Absent) return s; } for (i = 0; i < cryptoTokens.GetSize(); i++) { ValidationResult s = ValidateCryptoToken((H225_CryptoH323Token &)cryptoTokens[i], rawPDU); if (s != e_Absent) return s; } return e_Absent; } H235Authenticator::ValidationResult H235Authenticator::ValidateClearToken( const H235_ClearToken & /*clearToken*/) { return e_Absent; } H235Authenticator::ValidationResult H235Authenticator::ValidateCryptoToken( const H225_CryptoH323Token & /*cryptoToken*/, const PBYTEArray & /*rawPDU*/) { return e_Absent; } PBoolean H235Authenticator::UseGkAndEpIdentifiers() const { return FALSE; } PBoolean H235Authenticator::IsSecuredPDU(unsigned, PBoolean) const { return TRUE; } PBoolean H235Authenticator::IsSecuredSignalPDU(unsigned, PBoolean) const { return FALSE; } PBoolean H235Authenticator::IsActive() const { return enabled && !password; } PBoolean H235Authenticator::AddCapability(unsigned mechanism, const PString & oid, H225_ArrayOf_AuthenticationMechanism & mechanisms, H225_ArrayOf_PASN_ObjectId & algorithmOIDs) { PWaitAndSignal m(mutex); if (!IsActive()) { PTRACE(2, "RAS\tAuthenticator " << *this << " not active during SetCapability negotiation"); return FALSE; } PINDEX i; PINDEX size = mechanisms.GetSize(); for (i = 0; i < size; i++) { if (mechanisms[i].GetTag() == mechanism) break; } if (i >= size) { mechanisms.SetSize(size+1); mechanisms[size].SetTag(mechanism); } size = algorithmOIDs.GetSize(); for (i = 0; i < size; i++) { if (algorithmOIDs[i] == oid) break; } if (i >= size) { algorithmOIDs.SetSize(size+1); algorithmOIDs[size] = oid; } return TRUE; } void H235Authenticator::SetConnection(H323Connection * con) { connection = con; } PBoolean H235Authenticator::GetAlgorithms(PStringList & /*algorithms*/) const { return false; } PBoolean H235Authenticator::GetAlgorithmDetails(const PString & /*algorithm*/, PString & /*sslName*/, PString & /*description*/) { return false; } /////////////////////////////////////////////////////////////////////////////// void H235Authenticators::PreparePDU(H323TransactionPDU & pdu, PASN_Array & clearTokens, unsigned clearOptionalField, PASN_Array & cryptoTokens, unsigned cryptoOptionalField) const { // Clean out any crypto tokens in case this is a retry message // and we are regenerating the tokens due to possible timestamp // issues. We don't do this for clear tokens which may be used by // other endpoints and should be passed through unchanged. cryptoTokens.RemoveAll(); for (PINDEX i = 0; i < GetSize(); i++) { H235Authenticator & authenticator = (*this)[i]; if (authenticator.IsSecuredPDU(pdu.GetChoice().GetTag(), FALSE) && authenticator.PrepareTokens(clearTokens, cryptoTokens)) { PTRACE(4, "H235RAS\tPrepared PDU with authenticator " << authenticator); } } PASN_Sequence & subPDU = (PASN_Sequence &)pdu.GetChoice().GetObject(); if (clearTokens.GetSize() > 0) subPDU.IncludeOptionalField(clearOptionalField); if (cryptoTokens.GetSize() > 0) subPDU.IncludeOptionalField(cryptoOptionalField); } H235Authenticator::ValidationResult H235Authenticators::ValidatePDU(const H323TransactionPDU & pdu, const PASN_Array & clearTokens, unsigned clearOptionalField, const PASN_Array & cryptoTokens, unsigned cryptoOptionalField, const PBYTEArray & rawPDU) const { PBoolean noneActive = TRUE; PINDEX i; for (i = 0; i < GetSize(); i++) { H235Authenticator & authenticator = (*this)[i]; if (authenticator.IsActive() && authenticator.IsSecuredPDU(pdu.GetChoice().GetTag(), TRUE)) { noneActive = FALSE; break; } } if (noneActive) return H235Authenticator::e_OK; //do not accept non secure RAS Messages const PASN_Sequence & subPDU = (const PASN_Sequence &)pdu.GetChoice().GetObject(); if (!subPDU.HasOptionalField(clearOptionalField) && !subPDU.HasOptionalField(cryptoOptionalField)) { PTRACE(2, "H235RAS\tReceived unsecured RAS message (no crypto tokens)," " need one of:\n" << setfill(',') << *this << setfill(' ')); return H235Authenticator::e_Absent; } for (i = 0; i < GetSize(); i++) { H235Authenticator & authenticator = (*this)[i]; if (authenticator.IsSecuredPDU(pdu.GetChoice().GetTag(), TRUE)) { H235Authenticator::ValidationResult result = authenticator.ValidateTokens(clearTokens, cryptoTokens, rawPDU); switch (result) { case H235Authenticator::e_OK : PTRACE(4, "H235RAS\tAuthenticator " << authenticator << " succeeded"); return H235Authenticator::e_OK; case H235Authenticator::e_Absent : PTRACE(4, "H235RAS\tAuthenticator " << authenticator << " absent from PDU"); authenticator.Disable(); break; case H235Authenticator::e_Disabled : PTRACE(4, "H235RAS\tAuthenticator " << authenticator << " disabled"); break; default : // Various other failure modes PTRACE(4, "H235RAS\tAuthenticator " << authenticator << " failed: " << (int)result); return result; } } } return H235Authenticator::e_Absent; } void H235Authenticators::PrepareSignalPDU(unsigned code, PASN_Array & clearTokens, PASN_Array & cryptoTokens) const { // Clean out any crypto tokens in case this is a retry message // and we are regenerating the tokens due to possible timestamp // issues. We don't do this for clear tokens which may be used by // other endpoints and should be passed through unchanged. cryptoTokens.RemoveAll(); for (PINDEX i = 0; i < GetSize(); i++) { H235Authenticator & authenticator = (*this)[i]; if (authenticator.IsSecuredSignalPDU(code, FALSE) && authenticator.PrepareTokens(clearTokens, cryptoTokens)) { PTRACE(4, "H235EP\tPrepared SignalPDU with authenticator " << authenticator); } } } H235Authenticator::ValidationResult H235Authenticators::ValidateSignalPDU(unsigned code, const PASN_Array & clearTokens, const PASN_Array & cryptoTokens, const PBYTEArray & rawPDU) const { H235Authenticator::ValidationResult finalresult = H235Authenticator::e_Absent; for (PINDEX i = 0; i < GetSize(); i++) { H235Authenticator & authenticator = (*this)[i]; if (authenticator.IsSecuredSignalPDU(code, TRUE)) { H235Authenticator::ValidationResult result = authenticator.ValidateTokens(clearTokens, cryptoTokens, rawPDU); switch (result) { case H235Authenticator::e_OK : PTRACE(4, "H235EP\tAuthenticator " << authenticator << " succeeded"); finalresult = result; break; case H235Authenticator::e_Absent : PTRACE(4, "H235EP\tAuthenticator " << authenticator << " absent from PDU"); authenticator.Disable(); break; case H235Authenticator::e_Disabled : PTRACE(4, "H235EP\tAuthenticator " << authenticator << " disabled"); break; default : // Various other failure modes PTRACE(4, "H235EP\tAuthenticator " << authenticator << " failed: " << (int)result); if (finalresult != H235Authenticator::e_OK) finalresult = result; break; } } else { authenticator.Disable(); } } return finalresult; } #ifdef H323_H235 PStringArray GetIdentifiers(const PASN_Array & clearTokens, const PASN_Array & cryptoTokens) { PStringArray ids; for (PINDEX i = 0; i < clearTokens.GetSize(); i++) { ids.AppendString(((const H235_ClearToken &)clearTokens[i]).m_tokenOID.AsString()); } for (PINDEX i = 0; i < cryptoTokens.GetSize(); i++) { if ((cryptoTokens.GetTag() == H225_CryptoH323Token::e_cryptoEPPwdHash) || (cryptoTokens.GetTag() == H225_CryptoH323Token::e_cryptoGKPwdHash) || (cryptoTokens.GetTag() == H225_CryptoH323Token::e_cryptoEPPwdEncr) || (cryptoTokens.GetTag() == H225_CryptoH323Token::e_cryptoGKPwdEncr) || (cryptoTokens.GetTag() == H225_CryptoH323Token::e_cryptoEPCert) || (cryptoTokens.GetTag() == H225_CryptoH323Token::e_cryptoGKCert) || (cryptoTokens.GetTag() == H225_CryptoH323Token::e_cryptoFastStart)) { PTRACE(5,"H235\tReceived unsupported Token: " << cryptoTokens[i]); } else if (cryptoTokens.GetTag() == H225_CryptoH323Token::e_nestedcryptoToken) { const H235_CryptoToken & nestedCryptoToken = (const H235_CryptoToken &)cryptoTokens[i]; if (nestedCryptoToken.GetTag() != H235_CryptoToken::e_cryptoHashedToken) { PTRACE(5,"H235\tReceived unsupported Nested Token: " << cryptoTokens[i]); break; } const H235_CryptoToken_cryptoHashedToken & cryptoHashedToken = nestedCryptoToken; ids.AppendString(cryptoHashedToken.m_tokenOID.AsString()); } } return ids; } PBoolean H235Authenticators::CreateAuthenticators(const PASN_Array & clearTokens, const PASN_Array & cryptoTokens) { if (clearTokens.GetSize() == 0 && cryptoTokens.GetSize() == 0) return false; PStringArray identifiers = GetIdentifiers(clearTokens, cryptoTokens); for (PINDEX i= 0; iGetSize(); ++j) { H235Authenticator & auth = (*this)[j]; if (auth.IsMatch(identifiers[i])) { found = true; break; } } if (!found) this->Append(H235Authenticator::CreateAuthenticatorByID(identifiers[i])); } return true; } PBoolean H235Authenticators::CreateAuthenticator(const PString & name) { H235Authenticator * newAuth = H235Authenticator::CreateAuthenticator(name); if (!newAuth) return false; this->Append(newAuth); return true; } PBoolean H235Authenticators::SupportsEncryption(PStringArray & list) const { PBoolean found = false; for (PINDEX j=0; j< this->GetSize(); ++j) { H235Authenticator & auth = (*this)[j]; if (auth.GetApplication() == H235Authenticator::MediaEncryption) { list.AppendString(auth.GetName()); found = true; } } return found; } PBoolean H235Authenticators::SupportsEncryption() const { PStringArray list; return SupportsEncryption(list); } PBoolean H235Authenticators::GetAlgorithms(PStringList & algorithms) const { PBoolean found = false; for (PINDEX j=0; j< this->GetSize(); ++j) { H235Authenticator & auth = (*this)[j]; if (auth.GetApplication() == H235Authenticator::MediaEncryption) { PStringList algs; if (auth.GetAlgorithms(algs)) { for (PINDEX i=0; iGetSize(); ++j) { H235Authenticator & auth = (*this)[j]; if (auth.GetApplication() == H235Authenticator::MediaEncryption) { if (auth.GetAlgorithmDetails(algorithm, sslName, description)) return true; } } return false; } #endif /////////////////////////////////////////////////////////////////////////////// PBoolean H235AuthenticatorList::HasUserName(PString UserName) const { for (PINDEX i = 0; i < GetSize(); i++) { H235AuthenticatorInfo & info = (*this)[i]; if (UserName == info.UserName) return TRUE; } return FALSE; } void H235AuthenticatorList::LoadPassword(PString UserName, PString & pass) const { for (PINDEX i = 0; i < GetSize(); i++) { H235AuthenticatorInfo & info = (*this)[i]; if (UserName == info.UserName) { if (info.isHashed) { pass = PasswordDecrypt(info.Password); } else pass = info.Password; } } } void H235AuthenticatorList::Add(PString username, PString password, PBoolean isHashed) { H235AuthenticatorInfo * info = new H235AuthenticatorInfo(username,password,isHashed); (*this).Append(info); } #define AuthenticatorListHashKey "H235Authenticator" PString H235AuthenticatorList::PasswordEncrypt(const PString &clear) const { int keyFilled = 0; const PString key = AuthenticatorListHashKey; PTEACypher::Key thekey; memset(&thekey, keyFilled, sizeof(PTEACypher::Key)); memcpy(&thekey, (const char *)key, min(sizeof(PTEACypher::Key), size_t(key.GetLength()))); PTEACypher cypher(thekey); return cypher.Encode(clear); } PString H235AuthenticatorList::PasswordDecrypt(const PString &encrypt) const { int keyFilled = 0; const PString key = AuthenticatorListHashKey; PTEACypher::Key thekey; memset(&thekey, keyFilled, sizeof(PTEACypher::Key)); memcpy(&thekey, (const char *)key, min(sizeof(PTEACypher::Key), size_t(key.GetLength()))); PTEACypher cypher(thekey); return cypher.Decode(encrypt); } /////////////////////////////////////////////////////////////////////////////// H235AuthenticatorInfo::H235AuthenticatorInfo(PString username,PString password,PBoolean ishashed) : UserName(username), Password(password), isHashed(ishashed) { } H235AuthenticatorInfo::H235AuthenticatorInfo(PSSLCertificate * cert) : Certificate(cert) { } /////////////////////////////////////////////////////////////////////////////// #ifdef H323_H235 H235SECURITY(MD5); #else static PFactory::Worker factoryH235AuthSimpleMD5("SimpleMD5"); #endif static const char OID_MD5[] = "1.2.840.113549.2.5"; H235AuthSimpleMD5::H235AuthSimpleMD5() { usage = AnyApplication; // Can be used either for GKAdmission or EPAuthenticstion } PObject * H235AuthSimpleMD5::Clone() const { return new H235AuthSimpleMD5(*this); } const char * H235AuthSimpleMD5::GetName() const { return "MD5"; } PStringArray H235AuthSimpleMD5::GetAuthenticatorNames() { return PStringArray("MD5"); } #ifdef H323_H235 PBoolean H235AuthSimpleMD5::GetAuthenticationCapabilities(H235Authenticator::Capabilities * ids) { H235Authenticator::Capability cap; cap.m_identifier = OID_MD5; cap.m_cipher = "MD5"; cap.m_description= "md5"; ids->capabilityList.push_back(cap); return true; } #endif PBoolean H235AuthSimpleMD5::IsMatch(const PString & identifier) const { return (identifier == PString(OID_MD5)); } static PWCharArray GetUCS2plusNULL(const PString & str) { PWCharArray ucs2 = str.AsUCS2(); PINDEX len = ucs2.GetSize(); if (len > 0 && ucs2[len-1] != 0) ucs2.SetSize(len+1); return ucs2; } H225_CryptoH323Token * H235AuthSimpleMD5::CreateCryptoToken() { if (!IsActive()) return NULL; if (localId.IsEmpty()) { PTRACE(2, "H235RAS\tH235AuthSimpleMD5 requires local ID for encoding."); return NULL; } // Cisco compatible hash calculation H235_ClearToken clearToken; // fill the PwdCertToken to calculate the hash clearToken.m_tokenOID = "0.0"; clearToken.IncludeOptionalField(H235_ClearToken::e_generalID); // use SetValueRaw() starting with PTLib 2.7.x to preserve the trailing null byte #if PTLIB_VER < 270 clearToken.m_generalID = GetUCS2plusNULL(localId); #else clearToken.m_generalID.SetValueRaw(GetUCS2plusNULL(localId)); #endif clearToken.IncludeOptionalField(H235_ClearToken::e_password); #if PTLIB_VER < 270 clearToken.m_password = GetUCS2plusNULL(password); #else clearToken.m_password.SetValueRaw(GetUCS2plusNULL(password)); #endif clearToken.IncludeOptionalField(H235_ClearToken::e_timeStamp); clearToken.m_timeStamp = (int)time(NULL); // Encode it into PER PPER_Stream strm; clearToken.Encode(strm); strm.CompleteEncoding(); // Generate an MD5 of the clear tokens PER encoding. PMessageDigest5 stomach; stomach.Process(strm.GetPointer(), strm.GetSize()); PMessageDigest5::Code digest; stomach.Complete(digest); // Create the H.225 crypto token H225_CryptoH323Token * cryptoToken = new H225_CryptoH323Token; cryptoToken->SetTag(H225_CryptoH323Token::e_cryptoEPPwdHash); H225_CryptoH323Token_cryptoEPPwdHash & cryptoEPPwdHash = *cryptoToken; // Set the token data that actually goes over the wire H323SetAliasAddress(localId, cryptoEPPwdHash.m_alias); cryptoEPPwdHash.m_timeStamp = clearToken.m_timeStamp; cryptoEPPwdHash.m_token.m_algorithmOID = OID_MD5; cryptoEPPwdHash.m_token.m_hash.SetData(sizeof(digest)*8, (const BYTE *)&digest); return cryptoToken; } H235Authenticator::ValidationResult H235AuthSimpleMD5::ValidateCryptoToken( const H225_CryptoH323Token & cryptoToken, const PBYTEArray &) { if (!IsActive()) return e_Disabled; // verify the token is of correct type if (cryptoToken.GetTag() != H225_CryptoH323Token::e_cryptoEPPwdHash) return e_Absent; const H225_CryptoH323Token_cryptoEPPwdHash & cryptoEPPwdHash = cryptoToken; PString alias = H323GetAliasAddressString(cryptoEPPwdHash.m_alias); #ifndef DISABLE_CALLAUTH // If has connection then EP Authenticator so CallBack to Check SenderID and Set Password if (connection != NULL) { if (!connection->OnCallAuthentication(alias,password)) { PTRACE(1, "H235EP\tH235AuthSimpleMD5 Authentication Fail UserName \"" << alias << "\", not Authorised. \""); return e_BadPassword; } } else { #endif if (!remoteId && alias != remoteId) { PTRACE(1, "H235RAS\tH235AuthSimpleMD5 alias is \"" << alias << "\", should be \"" << remoteId << '"'); return e_Error; } #ifndef DISABLE_CALLAUTH } #endif // Build the clear token H235_ClearToken clearToken; clearToken.m_tokenOID = "0.0"; clearToken.IncludeOptionalField(H235_ClearToken::e_generalID); // use SetValueRaw() starting with PTLib 2.7.x to preserve the trailing null byte #if PTLIB_VER < 270 clearToken.m_generalID = GetUCS2plusNULL(alias); #else clearToken.m_generalID.SetValueRaw(GetUCS2plusNULL(alias)); #endif clearToken.IncludeOptionalField(H235_ClearToken::e_password); #if PTLIB_VER < 270 clearToken.m_password = GetUCS2plusNULL(password); #else clearToken.m_password.SetValueRaw(GetUCS2plusNULL(password)); #endif clearToken.IncludeOptionalField(H235_ClearToken::e_timeStamp); clearToken.m_timeStamp = cryptoEPPwdHash.m_timeStamp; // Encode it into PER PPER_Stream strm; clearToken.Encode(strm); strm.CompleteEncoding(); // Generate an MD5 of the clear tokens PER encoding. PMessageDigest5 stomach; stomach.Process(strm.GetPointer(), strm.GetSize()); PMessageDigest5::Code digest; stomach.Complete(digest); if (cryptoEPPwdHash.m_token.m_hash.GetSize() == sizeof(digest)*8 && memcmp(cryptoEPPwdHash.m_token.m_hash.GetDataPointer(), &digest, sizeof(digest)) == 0) return e_OK; PTRACE(1, "H235RAS\tH235AuthSimpleMD5 digest does not match."); return e_BadPassword; } PBoolean H235AuthSimpleMD5::IsCapability(const H235_AuthenticationMechanism & mechanism, const PASN_ObjectId & algorithmOID) { return mechanism.GetTag() == H235_AuthenticationMechanism::e_pwdHash && algorithmOID.AsString() == OID_MD5; } PBoolean H235AuthSimpleMD5::SetCapability(H225_ArrayOf_AuthenticationMechanism & mechanisms, H225_ArrayOf_PASN_ObjectId & algorithmOIDs) { return AddCapability(H235_AuthenticationMechanism::e_pwdHash, OID_MD5, mechanisms, algorithmOIDs); } PBoolean H235AuthSimpleMD5::IsSecuredPDU(unsigned rasPDU, PBoolean received) const { switch (rasPDU) { case H225_RasMessage::e_registrationRequest : case H225_RasMessage::e_unregistrationRequest : case H225_RasMessage::e_admissionRequest : case H225_RasMessage::e_disengageRequest : case H225_RasMessage::e_bandwidthRequest : case H225_RasMessage::e_infoRequestResponse : return received ? !remoteId.IsEmpty() : !localId.IsEmpty(); default : return FALSE; } } PBoolean H235AuthSimpleMD5::IsSecuredSignalPDU(unsigned signalPDU, PBoolean received) const { switch (signalPDU) { case H225_H323_UU_PDU_h323_message_body::e_setup: return received ? !remoteId.IsEmpty() : !localId.IsEmpty(); default : return FALSE; } } /////////////////////////////////////////////////////////////////////////////// static PFactory::Worker factoryH235AuthCAT("SimpleCAT"); static const char OID_CAT[] = "1.2.840.113548.10.1.2.1"; H235AuthCAT::H235AuthCAT() { usage = GKAdmission; /// To be used for GKAdmission } PObject * H235AuthCAT::Clone() const { return new H235AuthCAT(*this); } const char * H235AuthCAT::GetName() const { return "CAT"; } H235_ClearToken * H235AuthCAT::CreateClearToken() { if (!IsActive()) return NULL; if (localId.IsEmpty()) { PTRACE(2, "H235RAS\tH235AuthCAT requires local ID for encoding."); return NULL; } H235_ClearToken * clearToken = new H235_ClearToken; // Cisco compatible hash calculation clearToken->m_tokenOID = OID_CAT; clearToken->IncludeOptionalField(H235_ClearToken::e_generalID); // use SetValueRaw() starting with PTLib 2.7.x to preserve the trailing null byte #if PTLIB_VER < 270 clearToken->m_generalID = GetUCS2plusNULL(localId); #else clearToken->m_generalID.SetValueRaw(GetUCS2plusNULL(localId)); #endif clearToken->IncludeOptionalField(H235_ClearToken::e_timeStamp); clearToken->m_timeStamp = (int)time(NULL); PUInt32b timeStamp = (DWORD)clearToken->m_timeStamp; clearToken->IncludeOptionalField(H235_ClearToken::e_random); BYTE random = (BYTE)++sentRandomSequenceNumber; clearToken->m_random = (unsigned)random; // Generate an MD5 of the clear tokens PER encoding. PMessageDigest5 stomach; stomach.Process(&random, 1); stomach.Process(password); stomach.Process(&timeStamp, 4); PMessageDigest5::Code digest; stomach.Complete(digest); clearToken->IncludeOptionalField(H235_ClearToken::e_challenge); clearToken->m_challenge.SetValue((const BYTE *)&digest, sizeof(digest)); return clearToken; } H235Authenticator::ValidationResult H235AuthCAT::ValidateClearToken(const H235_ClearToken & clearToken) { if (!IsActive()) return e_Disabled; if (clearToken.m_tokenOID != OID_CAT) return e_Absent; if (!clearToken.HasOptionalField(H235_ClearToken::e_generalID) || !clearToken.HasOptionalField(H235_ClearToken::e_timeStamp) || !clearToken.HasOptionalField(H235_ClearToken::e_random) || !clearToken.HasOptionalField(H235_ClearToken::e_challenge)) { PTRACE(2, "H235RAS\tCAT requires generalID, timeStamp, random and challenge fields"); return e_Error; } //first verify the timestamp PTime now; int deltaTime = now.GetTimeInSeconds() - clearToken.m_timeStamp; if (PABS(deltaTime) > timestampGracePeriod) { PTRACE(1, "H235RAS\tInvalid timestamp ABS(" << now.GetTimeInSeconds() << '-' << (int)clearToken.m_timeStamp << ") > " << timestampGracePeriod); //the time has elapsed return e_InvalidTime; } //verify the randomnumber if (lastTimestamp == clearToken.m_timeStamp && lastRandomSequenceNumber == clearToken.m_random) { //a message with this timespamp and the same random number was already verified PTRACE(1, "H235RAS\tConsecutive messages with the same random and timestamp"); return e_ReplyAttack; } if (!remoteId && clearToken.m_generalID.GetValue() != remoteId) { PTRACE(1, "H235RAS\tGeneral ID is \"" << clearToken.m_generalID.GetValue() << "\", should be \"" << remoteId << '"'); return e_Error; } int randomInt = clearToken.m_random; if (randomInt < -127 || randomInt > 255) { PTRACE(2, "H235RAS\tCAT requires single byte random field, got " << randomInt); return e_Error; } PUInt32b timeStamp = (DWORD)clearToken.m_timeStamp; BYTE randomByte = (BYTE)randomInt; // Generate an MD5 of the clear tokens PER encoding. PMessageDigest5 stomach; stomach.Process(&randomByte, 1); stomach.Process(password); stomach.Process(&timeStamp, 4); PMessageDigest5::Code digest; stomach.Complete(digest); if (clearToken.m_challenge.GetValue().GetSize() != sizeof(digest)) { PTRACE(2, "H235RAS\tCAT requires 16 byte challenge field"); return e_Error; } if (memcmp((const BYTE *)clearToken.m_challenge.GetValue(), &digest, sizeof(digest)) == 0) { // save the values for the next call lastRandomSequenceNumber = clearToken.m_random; lastTimestamp = clearToken.m_timeStamp; return e_OK; } PTRACE(2, "H235RAS\tCAT hash does not match"); return e_BadPassword; } PBoolean H235AuthCAT::IsCapability(const H235_AuthenticationMechanism & mechanism, const PASN_ObjectId & algorithmOID) { if (mechanism.GetTag() != H235_AuthenticationMechanism::e_authenticationBES || algorithmOID.AsString() != OID_CAT) return FALSE; const H235_AuthenticationBES & bes = mechanism; return bes.GetTag() == H235_AuthenticationBES::e_radius; } PBoolean H235AuthCAT::SetCapability(H225_ArrayOf_AuthenticationMechanism & mechanisms, H225_ArrayOf_PASN_ObjectId & algorithmOIDs) { if (!AddCapability(H235_AuthenticationMechanism::e_authenticationBES, OID_CAT, mechanisms, algorithmOIDs)) return FALSE; H235_AuthenticationBES & bes = mechanisms[mechanisms.GetSize()-1]; bes.SetTag(H235_AuthenticationBES::e_radius); return TRUE; } PBoolean H235AuthCAT::IsSecuredPDU(unsigned rasPDU, PBoolean received) const { switch (rasPDU) { case H225_RasMessage::e_registrationRequest : case H225_RasMessage::e_admissionRequest : return received ? !remoteId.IsEmpty() : !localId.IsEmpty(); default : return FALSE; } } // need to load into factory here otherwise doesn't load... #if P_SSL && !defined(H323_H235) static PFactory::Worker factoryH2351_Authenticator("H2351_Authenticator"); #endif ///////////////////////////////////////////////////////////////////////////// h323plus/src/h501pdu.cxx0000644000175000017500000002627410655704673013640 0ustar markmark/* * h501pdu.cxx * * H.501 PDU definitions * * Open H323 Library * * Copyright (c) 2003 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: h501pdu.cxx,v $ * Revision 1.1 2007/08/06 20:51:07 shorne * First commit of h323plus * * Revision 1.11 2003/04/10 01:00:12 craigs * Changed to allow reply address to be a list * * Revision 1.10 2003/03/28 05:34:06 robertj * Added implementation for GetRequestInProgressDelay * * Revision 1.9 2003/03/28 05:08:39 robertj * Added delay parameter to BuildRequestInProgress * * Revision 1.8 2003/03/25 04:56:21 robertj * Fixed issues to do with multiple inheritence in transaction reply cache. * * Revision 1.7 2003/03/20 01:51:12 robertj * More abstraction of H.225 RAS and H.501 protocols transaction handling. * * Revision 1.6 2003/03/18 13:57:53 craigs * More H.501 implementation * * Revision 1.5 2003/03/17 13:19:31 craigs * More H501 implementation * * Revision 1.4 2003/03/14 06:01:16 craigs * More updates * * Revision 1.3 2003/03/01 00:22:10 craigs * New PeerElement implementation * * Revision 1.2 2003/02/25 06:48:19 robertj * More work on PDU transaction abstraction. * * Revision 1.1 2003/02/21 05:27:06 craigs * Initial version * */ #include #ifdef __GNUC__ #pragma implementation "h501pdu.h" #endif #include "h501.h" #include "h501pdu.h" #include "h323pdu.h" H501PDU::H501PDU() { } PObject * H501PDU::Clone() const { return new H501PDU(*this); } const PASN_Object & H501PDU::GetPDU() const { return *this; } const PASN_Choice & H501PDU::GetChoice() const { return m_body; } PASN_Object & H501PDU::GetPDU() { return *this; } PASN_Choice & H501PDU::GetChoice() { return m_body; } unsigned H501PDU::GetSequenceNumber() const { return m_common.m_sequenceNumber; } unsigned H501PDU::GetRequestInProgressDelay() const { if (m_body.GetTag() != H501_MessageBody::e_requestInProgress) return 0; const H501_RequestInProgress & pdu_body = m_body; return pdu_body.m_delay; } #if PTRACING const char * H501PDU::GetProtocolName() const { return "H501"; } #endif H323TransactionPDU * H501PDU::ClonePDU() const { return new H501PDU(*this); } void H501PDU::DeletePDU() { delete this; } void H501PDU::BuildPDU(unsigned tag, unsigned seqnum) { m_body.SetTag(tag); m_common.m_sequenceNumber = seqnum; m_common.m_hopCount = 10; m_common.m_annexGversion.SetValue("0.0.8.2250.1.7.0.2"); // {itu-t(0) recommendation(0) h(8) h-225-0(2250) annex(1) g(7) version(0) 2} m_common.m_version.SetValue("0.0.8.501.0.1"); // {itu-t(0) recommendation(0) h(8) 501 version(0) 1} } void H501PDU::BuildRequest(unsigned tag, unsigned seqnum, const H323TransportAddressArray & replyAddr) { BuildPDU(tag, seqnum); m_common.IncludeOptionalField(H501_MessageCommonInfo::e_replyAddress); PINDEX i; m_common.m_replyAddress.SetSize(replyAddr.GetSize()); for (i = 0; i < replyAddr.GetSize(); i++) replyAddr[i].SetPDU(m_common.m_replyAddress[i]); } H501_ServiceRequest & H501PDU::BuildServiceRequest(unsigned seqnum, const H323TransportAddressArray & reply) { BuildRequest(H501_MessageBody::e_serviceRequest, seqnum, reply); H501_ServiceRequest & pdu_body = m_body; return pdu_body; } H501_ServiceConfirmation & H501PDU::BuildServiceConfirmation(unsigned seqnum) { BuildPDU(H501_MessageBody::e_serviceConfirmation, seqnum); H501_ServiceConfirmation & pdu_body = m_body; return pdu_body; } H501_ServiceRejection & H501PDU::BuildServiceRejection(unsigned seqnum, unsigned reason) { BuildPDU(H501_MessageBody::e_serviceRejection, seqnum); H501_ServiceRejection & pdu_body = m_body; pdu_body.m_reason.SetTag(reason); return pdu_body; } H501_ServiceRelease & H501PDU::BuildServiceRelease(unsigned seqnum) { BuildPDU(H501_MessageBody::e_serviceRelease, seqnum); H501_ServiceRelease & pdu_body = m_body; return pdu_body; } H501_DescriptorRequest & H501PDU::BuildDescriptorRequest(unsigned seqnum, const H323TransportAddressArray & reply) { BuildRequest(H501_MessageBody::e_descriptorRequest, seqnum, reply); H501_DescriptorRequest & pdu_body = m_body; return pdu_body; } H501_DescriptorConfirmation & H501PDU::BuildDescriptorConfirmation(unsigned seqnum) { BuildPDU(H501_MessageBody::e_descriptorConfirmation, seqnum); H501_DescriptorConfirmation & pdu_body = m_body; return pdu_body; } H501_DescriptorRejection & H501PDU::BuildDescriptorRejection(unsigned seqnum, unsigned reason) { BuildPDU(H501_MessageBody::e_descriptorRejection, seqnum); H501_DescriptorRejection & pdu_body = m_body; pdu_body.m_reason.SetTag(reason); return pdu_body; } H501_DescriptorIDRequest & H501PDU::BuildDescriptorIDRequest(unsigned seqnum, const H323TransportAddressArray & reply) { BuildRequest(H501_MessageBody::e_descriptorIDRequest, seqnum, reply); H501_DescriptorIDRequest & pdu_body = m_body; return pdu_body; } H501_DescriptorIDConfirmation & H501PDU::BuildDescriptorIDConfirmation(unsigned seqnum) { BuildPDU(H501_MessageBody::e_descriptorIDConfirmation, seqnum); H501_DescriptorIDConfirmation & pdu_body = m_body; return pdu_body; } H501_DescriptorIDRejection & H501PDU::BuildDescriptorIDRejection(unsigned seqnum, unsigned reason) { BuildPDU(H501_MessageBody::e_descriptorIDRejection, seqnum); H501_DescriptorIDRejection & pdu_body = m_body; pdu_body.m_reason.SetTag(reason); return pdu_body; } H501_DescriptorUpdate & H501PDU::BuildDescriptorUpdate(unsigned seqnum, const H323TransportAddressArray & reply) { BuildRequest(H501_MessageBody::e_descriptorUpdate, seqnum, reply); m_common.m_sequenceNumber = seqnum; H501_DescriptorUpdate & pdu_body = m_body; return pdu_body; } H501_DescriptorUpdateAck & H501PDU::BuildDescriptorUpdateAck(unsigned seqnum) { BuildPDU(H501_MessageBody::e_descriptorUpdateAck, seqnum); H501_DescriptorUpdateAck & pdu_body = m_body; return pdu_body; } H501_AccessRequest & H501PDU::BuildAccessRequest(unsigned seqnum, const H323TransportAddressArray & reply) { BuildRequest(H501_MessageBody::e_accessRequest, seqnum, reply); H501_AccessRequest & pdu_body = m_body; return pdu_body; } H501_AccessConfirmation & H501PDU::BuildAccessConfirmation(unsigned seqnum) { BuildPDU(H501_MessageBody::e_accessConfirmation, seqnum); H501_AccessConfirmation & pdu_body = m_body; return pdu_body; } H501_AccessRejection & H501PDU::BuildAccessRejection(unsigned seqnum, int reason) { BuildPDU(H501_MessageBody::e_accessRejection, seqnum); H501_AccessRejection & pdu_body = m_body; pdu_body.m_reason.SetTag(reason); return pdu_body; } H501_RequestInProgress & H501PDU::BuildRequestInProgress(unsigned seqnum, unsigned delay) { BuildPDU(H501_MessageBody::e_requestInProgress, seqnum); H501_RequestInProgress & pdu_body = m_body; pdu_body.m_delay = delay; return pdu_body; } H501_NonStandardRequest & H501PDU::BuildNonStandardRequest(unsigned seqnum, const H323TransportAddressArray & reply) { BuildRequest(H501_MessageBody::e_nonStandardRequest, seqnum, reply); m_common.m_sequenceNumber = seqnum; H501_NonStandardRequest & pdu_body = m_body; return pdu_body; } H501_NonStandardConfirmation & H501PDU::BuildNonStandardConfirmation(unsigned seqnum) { BuildPDU(H501_MessageBody::e_nonStandardConfirmation, seqnum); H501_NonStandardConfirmation & pdu_body = m_body; return pdu_body; } H501_NonStandardRejection & H501PDU::BuildNonStandardRejection(unsigned seqnum, unsigned reason) { BuildPDU(H501_MessageBody::e_nonStandardRejection, seqnum); H501_NonStandardRejection & pdu_body = m_body; pdu_body.m_reason.SetTag(reason); return pdu_body; } H501_UnknownMessageResponse & H501PDU::BuildUnknownMessageResponse(unsigned seqnum) { BuildPDU(H501_MessageBody::e_unknownMessageResponse, seqnum); H501_UnknownMessageResponse & pdu_body = m_body; return pdu_body; } H501_UsageRequest & H501PDU::BuildUsageRequest(unsigned seqnum, const H323TransportAddressArray & reply) { BuildRequest(H501_MessageBody::e_usageRequest, seqnum, reply); m_common.m_sequenceNumber = seqnum; H501_UsageRequest & pdu_body = m_body; return pdu_body; } H501_UsageConfirmation & H501PDU::BuildUsageConfirmation(unsigned seqnum) { BuildPDU(H501_MessageBody::e_usageConfirmation, seqnum); H501_UsageConfirmation & pdu_body = m_body; return pdu_body; } H501_UsageIndicationConfirmation & H501PDU::BuildUsageIndicationConfirmation(unsigned seqnum) { BuildPDU(H501_MessageBody::e_usageIndicationConfirmation, seqnum); H501_UsageIndicationConfirmation & pdu_body = m_body; return pdu_body; } H501_UsageIndicationRejection & H501PDU::BuildUsageIndicationRejection(unsigned seqnum, unsigned reason) { BuildPDU(H501_MessageBody::e_usageIndicationRejection, seqnum); H501_UsageIndicationRejection & pdu_body = m_body; pdu_body.m_reason.SetTag(reason); return pdu_body; } H501_UsageRejection & H501PDU::BuildUsageRejection(unsigned seqnum) { BuildPDU(H501_MessageBody::e_usageRejection, seqnum); H501_UsageRejection & pdu_body = m_body; return pdu_body; } H501_ValidationRequest & H501PDU::BuildValidationRequest(unsigned seqnum, const H323TransportAddressArray & reply) { BuildRequest(H501_MessageBody::e_validationRequest, seqnum, reply); m_common.m_sequenceNumber = seqnum; H501_ValidationRequest & pdu_body = m_body; return pdu_body; } H501_ValidationConfirmation & H501PDU::BuildValidationConfirmation(unsigned seqnum) { BuildPDU(H501_MessageBody::e_validationConfirmation, seqnum); H501_ValidationConfirmation & pdu_body = m_body; return pdu_body; } H501_ValidationRejection & H501PDU::BuildValidationRejection(unsigned seqnum, unsigned reason) { BuildPDU(H501_MessageBody::e_validationRejection, seqnum); H501_ValidationRejection & pdu_body = m_body; pdu_body.m_reason.SetTag(reason); return pdu_body; } H501_AuthenticationRequest & H501PDU::BuildAuthenticationRequest(unsigned seqnum, const H323TransportAddressArray & reply) { BuildRequest(H501_MessageBody::e_authenticationRequest, seqnum, reply); m_common.m_sequenceNumber = seqnum; H501_AuthenticationRequest & pdu_body = m_body; return pdu_body; } H501_AuthenticationConfirmation & H501PDU::BuildAuthenticationConfirmation(unsigned seqnum) { BuildPDU(H501_MessageBody::e_authenticationConfirmation, seqnum); H501_AuthenticationConfirmation & pdu_body = m_body; return pdu_body; } H501_AuthenticationRejection & H501PDU::BuildAuthenticationRejection(unsigned seqnum, unsigned reason) { BuildPDU(H501_MessageBody::e_authenticationRejection, seqnum); H501_AuthenticationRejection & pdu_body = m_body; pdu_body.m_reason.SetTag(reason); return pdu_body; } ///////////////////////////////////////////////////////////////////////////// h323plus/src/rfc2833.cxx0000644000175000017500000001575111015524371013524 0ustar markmark/* * rfc2833.cxx * * Open Phone Abstraction Library (OPAL) * Formally known as the Open H323 project. * * Copyright (c) 2001 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open Phone Abstraction Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: rfc2833.cxx,v $ * Revision 1.2 2008/05/23 11:22:33 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:51:07 shorne * First commit of h323plus * * Revision 1.4 2003/06/03 05:02:18 rjongbloed * Added comment and test for NULL pointer parameter. * * Revision 1.3 2002/05/08 04:39:57 robertj * Fixed problem with receiving RFC2833 data, was still trying to process it as * codec and upsettign the channel receiver code. * * Revision 1.2 2002/02/19 06:32:38 robertj * Allowed for RTP filter functions to force output of packet, or prevent it * from being sent overriding the n frames per packet algorithm. * Added more tracing. * * Revision 1.1 2002/01/23 05:06:23 robertj * Added RFC2833 support as separate class * */ #include #ifdef __GNUC__ #pragma implementation "rfc2833.h" #endif #include "rfc2833.h" static const char RFC2833Table1Events[] = "0123456789*#ABCD!"; #define new PNEW /////////////////////////////////////////////////////////////////////////////// OpalRFC2833Info::OpalRFC2833Info(char t, unsigned d, unsigned ts) { tone = t; duration = d; timestamp = ts; } /////////////////////////////////////////////////////////////////////////////// OpalRFC2833::OpalRFC2833(const PNotifier & rx) : receiveNotifier(rx), #ifdef _MSC_VER #pragma warning(disable:4355) #endif receiveHandler(PCREATE_NOTIFIER(ReceivedPacket)), transmitHandler(PCREATE_NOTIFIER(TransmitPacket)) #ifdef _MSC_VER #pragma warning(default:4355) #endif { PTRACE(3, "RFC2833\tHandler created"); payloadType = RTP_DataFrame::IllegalPayloadType; receiveComplete = TRUE; receiveTimestamp = 0; receiveTimer.SetNotifier(PCREATE_NOTIFIER(ReceiveTimeout)); transmitState = TransmitIdle; transmitTimestamp = 0; transmitTimer.SetNotifier(PCREATE_NOTIFIER(TransmitEnded)); } PBoolean OpalRFC2833::SendTone(char tone, unsigned duration) { if (!BeginTransmit(tone)) return FALSE; transmitTimer = duration; return TRUE; } PBoolean OpalRFC2833::BeginTransmit(char tone) { PWaitAndSignal m(mutex); const char * theChar = strchr(RFC2833Table1Events, tone); if (theChar == NULL) { PTRACE(1, "RFC2833\tInvalid tone character."); return FALSE; } if (transmitState != TransmitIdle) { PTRACE(1, "RFC2833\tAttempt to send tone while currently sending."); return FALSE; } transmitCode = (BYTE)(theChar-RFC2833Table1Events); transmitState = TransmitActive; transmitTimestamp = 0; PTRACE(3, "RFC2833\tBegin transmit tone='" << tone << '\''); return TRUE; } PBoolean OpalRFC2833::EndTransmit() { PWaitAndSignal m(mutex); if (transmitState != TransmitActive) { PTRACE(1, "RFC2833\tAttempt to stop send tone while not sending."); return FALSE; } transmitState = TransmitEnding; PTRACE(3, "RFC2833\tEnd transmit tone='" << RFC2833Table1Events[transmitCode] << '\''); return TRUE; } void OpalRFC2833::OnStartReceive(char tone) { OpalRFC2833Info info(tone); receiveNotifier(info, 0); } void OpalRFC2833::OnEndReceive(char tone, unsigned duration, unsigned timestamp) { OpalRFC2833Info info(tone, duration, timestamp); receiveNotifier(info, 0); } void OpalRFC2833::ReceivedPacket(RTP_DataFrame & frame, INT) { if (frame.GetPayloadType() != payloadType) return; PINDEX payloadSize = frame.GetPayloadSize(); // Zero the payload size so the channel processing ignores this packet frame.SetPayloadSize(0); if (payloadSize < 4) { PTRACE_IF(1, payloadSize > 0, "RFC2833\tIgnoring packet, too small: " << frame.GetPayloadSize()); return; } const BYTE * payload = frame.GetPayloadPtr(); if (payload[0] >= sizeof(RFC2833Table1Events)-1) { PTRACE(2, "RFC2833\tIgnoring packet, unsupported event."); return; } PWaitAndSignal m(mutex); receivedTone = RFC2833Table1Events[payload[0]]; receivedDuration = (payload[2]<<8) + payload[3]; unsigned timestamp = frame.GetTimestamp(); if (receiveTimestamp != timestamp) { PTRACE(3, "RFC2833\tReceived start tone=" << receivedTone); OnStartReceive(receivedTone); // Starting a new event. receiveTimestamp = timestamp; receiveComplete = FALSE; receiveTimer = 150; } else { receiveTimer = 150; if (receiveComplete) { PTRACE(3, "RFC2833\tIgnoring duplicate packet."); return; } } if ((payload[1]&0x80) == 0) { PTRACE(1, "RFC2833\tIgnoring packet, not end of event."); return; } receiveComplete = TRUE; receiveTimer.Stop(); PTRACE(3, "RFC2833\tReceived end tone=" << receivedTone << " duration=" << receivedDuration); OnEndReceive(receivedTone, receivedDuration, receiveTimestamp); } void OpalRFC2833::ReceiveTimeout(PTimer &, INT) { PWaitAndSignal m(mutex); if (receiveComplete) return; receiveComplete = TRUE; PTRACE(3, "RFC2833\tTimeout tone=" << receivedTone << " duration=" << receivedDuration); OnEndReceive(receivedTone, receivedDuration, receiveTimestamp); } void OpalRFC2833::TransmitPacket(RTP_DataFrame & frame, INT param) { if (transmitState == TransmitIdle) return; // Set flag to force a packet to be sent. if (param != 0) *(PBoolean *)param = TRUE; PWaitAndSignal m(mutex); //frame.SetMarker(transmitTimestamp == 0); unsigned actualTimestamp = frame.GetTimestamp(); if (transmitTimestamp == 0) transmitTimestamp = actualTimestamp; frame.SetTimestamp(transmitTimestamp); frame.SetPayloadType(payloadType); frame.SetPayloadSize(4); BYTE * payload = frame.GetPayloadPtr(); payload[0] = transmitCode; payload[1] = 7; // Volume if (transmitState == TransmitEnding) { payload[1] |= 0x80; transmitState = TransmitIdle; } unsigned duration = actualTimestamp - transmitTimestamp; payload[2] = (BYTE)(duration>>8); payload[3] = (BYTE) duration ; PTRACE(4, "RFC2833\tInserting packet: ts=" << transmitTimestamp << " code='" << RFC2833Table1Events[transmitCode] << "'" " duration=" << duration << ' ' << (transmitState == TransmitIdle ? "ending" : "continuing")); } void OpalRFC2833::TransmitEnded(PTimer &, INT) { EndTransmit(); } ///////////////////////////////////////////////////////////////////////////// h323plus/src/h245_2.cxx0000644000175000017500000114067111015524314013333 0ustar markmark// // h245_2.cxx // // Code automatically generated by asnparse. // #include #include "h245.h" #define new PNEW #if ! H323_DISABLE_H245 // // ArrayOf_CustomPictureFormat // H245_ArrayOf_CustomPictureFormat::H245_ArrayOf_CustomPictureFormat(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_CustomPictureFormat::CreateObject() const { return new H245_CustomPictureFormat; } H245_CustomPictureFormat & H245_ArrayOf_CustomPictureFormat::operator[](PINDEX i) const { return (H245_CustomPictureFormat &)array[i]; } PObject * H245_ArrayOf_CustomPictureFormat::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_CustomPictureFormat::Class()), PInvalidCast); #endif return new H245_ArrayOf_CustomPictureFormat(*this); } // // ArrayOf_H263VideoModeCombos // H245_ArrayOf_H263VideoModeCombos::H245_ArrayOf_H263VideoModeCombos(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_H263VideoModeCombos::CreateObject() const { return new H245_H263VideoModeCombos; } H245_H263VideoModeCombos & H245_ArrayOf_H263VideoModeCombos::operator[](PINDEX i) const { return (H245_H263VideoModeCombos &)array[i]; } PObject * H245_ArrayOf_H263VideoModeCombos::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_H263VideoModeCombos::Class()), PInvalidCast); #endif return new H245_ArrayOf_H263VideoModeCombos(*this); } // // RefPictureSelection_additionalPictureMemory // H245_RefPictureSelection_additionalPictureMemory::H245_RefPictureSelection_additionalPictureMemory(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 6, TRUE, 0) { m_sqcifAdditionalPictureMemory.SetConstraints(PASN_Object::FixedConstraint, 1, 256); m_qcifAdditionalPictureMemory.SetConstraints(PASN_Object::FixedConstraint, 1, 256); m_cifAdditionalPictureMemory.SetConstraints(PASN_Object::FixedConstraint, 1, 256); m_cif4AdditionalPictureMemory.SetConstraints(PASN_Object::FixedConstraint, 1, 256); m_cif16AdditionalPictureMemory.SetConstraints(PASN_Object::FixedConstraint, 1, 256); m_bigCpfAdditionalPictureMemory.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_RefPictureSelection_additionalPictureMemory::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_sqcifAdditionalPictureMemory)) strm << setw(indent+31) << "sqcifAdditionalPictureMemory = " << setprecision(indent) << m_sqcifAdditionalPictureMemory << '\n'; if (HasOptionalField(e_qcifAdditionalPictureMemory)) strm << setw(indent+30) << "qcifAdditionalPictureMemory = " << setprecision(indent) << m_qcifAdditionalPictureMemory << '\n'; if (HasOptionalField(e_cifAdditionalPictureMemory)) strm << setw(indent+29) << "cifAdditionalPictureMemory = " << setprecision(indent) << m_cifAdditionalPictureMemory << '\n'; if (HasOptionalField(e_cif4AdditionalPictureMemory)) strm << setw(indent+30) << "cif4AdditionalPictureMemory = " << setprecision(indent) << m_cif4AdditionalPictureMemory << '\n'; if (HasOptionalField(e_cif16AdditionalPictureMemory)) strm << setw(indent+31) << "cif16AdditionalPictureMemory = " << setprecision(indent) << m_cif16AdditionalPictureMemory << '\n'; if (HasOptionalField(e_bigCpfAdditionalPictureMemory)) strm << setw(indent+32) << "bigCpfAdditionalPictureMemory = " << setprecision(indent) << m_bigCpfAdditionalPictureMemory << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RefPictureSelection_additionalPictureMemory::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RefPictureSelection_additionalPictureMemory), PInvalidCast); #endif const H245_RefPictureSelection_additionalPictureMemory & other = (const H245_RefPictureSelection_additionalPictureMemory &)obj; Comparison result; if ((result = m_sqcifAdditionalPictureMemory.Compare(other.m_sqcifAdditionalPictureMemory)) != EqualTo) return result; if ((result = m_qcifAdditionalPictureMemory.Compare(other.m_qcifAdditionalPictureMemory)) != EqualTo) return result; if ((result = m_cifAdditionalPictureMemory.Compare(other.m_cifAdditionalPictureMemory)) != EqualTo) return result; if ((result = m_cif4AdditionalPictureMemory.Compare(other.m_cif4AdditionalPictureMemory)) != EqualTo) return result; if ((result = m_cif16AdditionalPictureMemory.Compare(other.m_cif16AdditionalPictureMemory)) != EqualTo) return result; if ((result = m_bigCpfAdditionalPictureMemory.Compare(other.m_bigCpfAdditionalPictureMemory)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RefPictureSelection_additionalPictureMemory::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_sqcifAdditionalPictureMemory)) length += m_sqcifAdditionalPictureMemory.GetObjectLength(); if (HasOptionalField(e_qcifAdditionalPictureMemory)) length += m_qcifAdditionalPictureMemory.GetObjectLength(); if (HasOptionalField(e_cifAdditionalPictureMemory)) length += m_cifAdditionalPictureMemory.GetObjectLength(); if (HasOptionalField(e_cif4AdditionalPictureMemory)) length += m_cif4AdditionalPictureMemory.GetObjectLength(); if (HasOptionalField(e_cif16AdditionalPictureMemory)) length += m_cif16AdditionalPictureMemory.GetObjectLength(); if (HasOptionalField(e_bigCpfAdditionalPictureMemory)) length += m_bigCpfAdditionalPictureMemory.GetObjectLength(); return length; } PBoolean H245_RefPictureSelection_additionalPictureMemory::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_sqcifAdditionalPictureMemory) && !m_sqcifAdditionalPictureMemory.Decode(strm)) return FALSE; if (HasOptionalField(e_qcifAdditionalPictureMemory) && !m_qcifAdditionalPictureMemory.Decode(strm)) return FALSE; if (HasOptionalField(e_cifAdditionalPictureMemory) && !m_cifAdditionalPictureMemory.Decode(strm)) return FALSE; if (HasOptionalField(e_cif4AdditionalPictureMemory) && !m_cif4AdditionalPictureMemory.Decode(strm)) return FALSE; if (HasOptionalField(e_cif16AdditionalPictureMemory) && !m_cif16AdditionalPictureMemory.Decode(strm)) return FALSE; if (HasOptionalField(e_bigCpfAdditionalPictureMemory) && !m_bigCpfAdditionalPictureMemory.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RefPictureSelection_additionalPictureMemory::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_sqcifAdditionalPictureMemory)) m_sqcifAdditionalPictureMemory.Encode(strm); if (HasOptionalField(e_qcifAdditionalPictureMemory)) m_qcifAdditionalPictureMemory.Encode(strm); if (HasOptionalField(e_cifAdditionalPictureMemory)) m_cifAdditionalPictureMemory.Encode(strm); if (HasOptionalField(e_cif4AdditionalPictureMemory)) m_cif4AdditionalPictureMemory.Encode(strm); if (HasOptionalField(e_cif16AdditionalPictureMemory)) m_cif16AdditionalPictureMemory.Encode(strm); if (HasOptionalField(e_bigCpfAdditionalPictureMemory)) m_bigCpfAdditionalPictureMemory.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RefPictureSelection_additionalPictureMemory::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RefPictureSelection_additionalPictureMemory::Class()), PInvalidCast); #endif return new H245_RefPictureSelection_additionalPictureMemory(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_RefPictureSelection_videoBackChannelSend[]={ {"none",0} ,{"ackMessageOnly",1} ,{"nackMessageOnly",2} ,{"ackOrNackMessageOnly",3} ,{"ackAndNackMessage",4} }; #endif // // RefPictureSelection_videoBackChannelSend // H245_RefPictureSelection_videoBackChannelSend::H245_RefPictureSelection_videoBackChannelSend(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 5, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_RefPictureSelection_videoBackChannelSend,5 #endif ) { } PBoolean H245_RefPictureSelection_videoBackChannelSend::CreateObject() { choice = (tag <= e_ackAndNackMessage) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_RefPictureSelection_videoBackChannelSend::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RefPictureSelection_videoBackChannelSend::Class()), PInvalidCast); #endif return new H245_RefPictureSelection_videoBackChannelSend(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_CustomPictureFormat_pixelAspectInformation[]={ {"anyPixelAspectRatio",0} ,{"pixelAspectCode",1} ,{"extendedPAR",2} }; #endif // // CustomPictureFormat_pixelAspectInformation // H245_CustomPictureFormat_pixelAspectInformation::H245_CustomPictureFormat_pixelAspectInformation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_CustomPictureFormat_pixelAspectInformation,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_CustomPictureFormat_pixelAspectInformation::operator H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode &() const #else H245_CustomPictureFormat_pixelAspectInformation::operator H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode), PInvalidCast); #endif return *(H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode *)choice; } H245_CustomPictureFormat_pixelAspectInformation::operator const H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode), PInvalidCast); #endif return *(H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_CustomPictureFormat_pixelAspectInformation::operator H245_CustomPictureFormat_pixelAspectInformation_extendedPAR &() const #else H245_CustomPictureFormat_pixelAspectInformation::operator H245_CustomPictureFormat_pixelAspectInformation_extendedPAR &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_CustomPictureFormat_pixelAspectInformation_extendedPAR), PInvalidCast); #endif return *(H245_CustomPictureFormat_pixelAspectInformation_extendedPAR *)choice; } H245_CustomPictureFormat_pixelAspectInformation::operator const H245_CustomPictureFormat_pixelAspectInformation_extendedPAR &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_CustomPictureFormat_pixelAspectInformation_extendedPAR), PInvalidCast); #endif return *(H245_CustomPictureFormat_pixelAspectInformation_extendedPAR *)choice; } PBoolean H245_CustomPictureFormat_pixelAspectInformation::CreateObject() { switch (tag) { case e_anyPixelAspectRatio : choice = new PASN_Boolean(); return TRUE; case e_pixelAspectCode : choice = new H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode(); return TRUE; case e_extendedPAR : choice = new H245_CustomPictureFormat_pixelAspectInformation_extendedPAR(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_CustomPictureFormat_pixelAspectInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CustomPictureFormat_pixelAspectInformation::Class()), PInvalidCast); #endif return new H245_CustomPictureFormat_pixelAspectInformation(*this); } // // ArrayOf_H263ModeComboFlags // H245_ArrayOf_H263ModeComboFlags::H245_ArrayOf_H263ModeComboFlags(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_H263ModeComboFlags::CreateObject() const { return new H245_H263ModeComboFlags; } H245_H263ModeComboFlags & H245_ArrayOf_H263ModeComboFlags::operator[](PINDEX i) const { return (H245_H263ModeComboFlags &)array[i]; } PObject * H245_ArrayOf_H263ModeComboFlags::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_H263ModeComboFlags::Class()), PInvalidCast); #endif return new H245_ArrayOf_H263ModeComboFlags(*this); } // // AudioCapability_g7231 // H245_AudioCapability_g7231::H245_AudioCapability_g7231(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { m_maxAl_sduAudioFrames.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H245_AudioCapability_g7231::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+23) << "maxAl_sduAudioFrames = " << setprecision(indent) << m_maxAl_sduAudioFrames << '\n'; strm << setw(indent+21) << "silenceSuppression = " << setprecision(indent) << m_silenceSuppression << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_AudioCapability_g7231::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_AudioCapability_g7231), PInvalidCast); #endif const H245_AudioCapability_g7231 & other = (const H245_AudioCapability_g7231 &)obj; Comparison result; if ((result = m_maxAl_sduAudioFrames.Compare(other.m_maxAl_sduAudioFrames)) != EqualTo) return result; if ((result = m_silenceSuppression.Compare(other.m_silenceSuppression)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_AudioCapability_g7231::GetDataLength() const { PINDEX length = 0; length += m_maxAl_sduAudioFrames.GetObjectLength(); length += m_silenceSuppression.GetObjectLength(); return length; } PBoolean H245_AudioCapability_g7231::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_maxAl_sduAudioFrames.Decode(strm)) return FALSE; if (!m_silenceSuppression.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_AudioCapability_g7231::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_maxAl_sduAudioFrames.Encode(strm); m_silenceSuppression.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_AudioCapability_g7231::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_AudioCapability_g7231::Class()), PInvalidCast); #endif return new H245_AudioCapability_g7231(*this); } // // G7231AnnexCCapability_g723AnnexCAudioMode // H245_G7231AnnexCCapability_g723AnnexCAudioMode::H245_G7231AnnexCCapability_g723AnnexCAudioMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_highRateMode0.SetConstraints(PASN_Object::FixedConstraint, 27, 78); m_highRateMode1.SetConstraints(PASN_Object::FixedConstraint, 27, 78); m_lowRateMode0.SetConstraints(PASN_Object::FixedConstraint, 23, 66); m_lowRateMode1.SetConstraints(PASN_Object::FixedConstraint, 23, 66); m_sidMode0.SetConstraints(PASN_Object::FixedConstraint, 6, 17); m_sidMode1.SetConstraints(PASN_Object::FixedConstraint, 6, 17); } #ifndef PASN_NOPRINTON void H245_G7231AnnexCCapability_g723AnnexCAudioMode::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "highRateMode0 = " << setprecision(indent) << m_highRateMode0 << '\n'; strm << setw(indent+16) << "highRateMode1 = " << setprecision(indent) << m_highRateMode1 << '\n'; strm << setw(indent+15) << "lowRateMode0 = " << setprecision(indent) << m_lowRateMode0 << '\n'; strm << setw(indent+15) << "lowRateMode1 = " << setprecision(indent) << m_lowRateMode1 << '\n'; strm << setw(indent+11) << "sidMode0 = " << setprecision(indent) << m_sidMode0 << '\n'; strm << setw(indent+11) << "sidMode1 = " << setprecision(indent) << m_sidMode1 << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_G7231AnnexCCapability_g723AnnexCAudioMode::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_G7231AnnexCCapability_g723AnnexCAudioMode), PInvalidCast); #endif const H245_G7231AnnexCCapability_g723AnnexCAudioMode & other = (const H245_G7231AnnexCCapability_g723AnnexCAudioMode &)obj; Comparison result; if ((result = m_highRateMode0.Compare(other.m_highRateMode0)) != EqualTo) return result; if ((result = m_highRateMode1.Compare(other.m_highRateMode1)) != EqualTo) return result; if ((result = m_lowRateMode0.Compare(other.m_lowRateMode0)) != EqualTo) return result; if ((result = m_lowRateMode1.Compare(other.m_lowRateMode1)) != EqualTo) return result; if ((result = m_sidMode0.Compare(other.m_sidMode0)) != EqualTo) return result; if ((result = m_sidMode1.Compare(other.m_sidMode1)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_G7231AnnexCCapability_g723AnnexCAudioMode::GetDataLength() const { PINDEX length = 0; length += m_highRateMode0.GetObjectLength(); length += m_highRateMode1.GetObjectLength(); length += m_lowRateMode0.GetObjectLength(); length += m_lowRateMode1.GetObjectLength(); length += m_sidMode0.GetObjectLength(); length += m_sidMode1.GetObjectLength(); return length; } PBoolean H245_G7231AnnexCCapability_g723AnnexCAudioMode::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_highRateMode0.Decode(strm)) return FALSE; if (!m_highRateMode1.Decode(strm)) return FALSE; if (!m_lowRateMode0.Decode(strm)) return FALSE; if (!m_lowRateMode1.Decode(strm)) return FALSE; if (!m_sidMode0.Decode(strm)) return FALSE; if (!m_sidMode1.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_G7231AnnexCCapability_g723AnnexCAudioMode::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_highRateMode0.Encode(strm); m_highRateMode1.Encode(strm); m_lowRateMode0.Encode(strm); m_lowRateMode1.Encode(strm); m_sidMode0.Encode(strm); m_sidMode1.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_G7231AnnexCCapability_g723AnnexCAudioMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_G7231AnnexCCapability_g723AnnexCAudioMode::Class()), PInvalidCast); #endif return new H245_G7231AnnexCCapability_g723AnnexCAudioMode(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_DataApplicationCapability_application[]={ {"nonStandard",0} ,{"t120",1} ,{"dsm_cc",2} ,{"userData",3} ,{"t84",4} ,{"t434",5} ,{"h224",6} ,{"nlpid",7} ,{"dsvdControl",8} ,{"h222DataPartitioning",9} ,{"t30fax",10} ,{"t140",11} ,{"t38fax",12} ,{"genericDataCapability",13} }; #endif // // DataApplicationCapability_application // H245_DataApplicationCapability_application::H245_DataApplicationCapability_application(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 10, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_DataApplicationCapability_application,14 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataApplicationCapability_application::operator H245_NonStandardParameter &() const #else H245_DataApplicationCapability_application::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_DataApplicationCapability_application::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataApplicationCapability_application::operator H245_DataProtocolCapability &() const #else H245_DataApplicationCapability_application::operator H245_DataProtocolCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataProtocolCapability), PInvalidCast); #endif return *(H245_DataProtocolCapability *)choice; } H245_DataApplicationCapability_application::operator const H245_DataProtocolCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataProtocolCapability), PInvalidCast); #endif return *(H245_DataProtocolCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataApplicationCapability_application::operator H245_DataApplicationCapability_application_t84 &() const #else H245_DataApplicationCapability_application::operator H245_DataApplicationCapability_application_t84 &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataApplicationCapability_application_t84), PInvalidCast); #endif return *(H245_DataApplicationCapability_application_t84 *)choice; } H245_DataApplicationCapability_application::operator const H245_DataApplicationCapability_application_t84 &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataApplicationCapability_application_t84), PInvalidCast); #endif return *(H245_DataApplicationCapability_application_t84 *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataApplicationCapability_application::operator H245_DataApplicationCapability_application_nlpid &() const #else H245_DataApplicationCapability_application::operator H245_DataApplicationCapability_application_nlpid &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataApplicationCapability_application_nlpid), PInvalidCast); #endif return *(H245_DataApplicationCapability_application_nlpid *)choice; } H245_DataApplicationCapability_application::operator const H245_DataApplicationCapability_application_nlpid &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataApplicationCapability_application_nlpid), PInvalidCast); #endif return *(H245_DataApplicationCapability_application_nlpid *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataApplicationCapability_application::operator H245_DataApplicationCapability_application_t38fax &() const #else H245_DataApplicationCapability_application::operator H245_DataApplicationCapability_application_t38fax &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataApplicationCapability_application_t38fax), PInvalidCast); #endif return *(H245_DataApplicationCapability_application_t38fax *)choice; } H245_DataApplicationCapability_application::operator const H245_DataApplicationCapability_application_t38fax &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataApplicationCapability_application_t38fax), PInvalidCast); #endif return *(H245_DataApplicationCapability_application_t38fax *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataApplicationCapability_application::operator H245_GenericCapability &() const #else H245_DataApplicationCapability_application::operator H245_GenericCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericCapability), PInvalidCast); #endif return *(H245_GenericCapability *)choice; } H245_DataApplicationCapability_application::operator const H245_GenericCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericCapability), PInvalidCast); #endif return *(H245_GenericCapability *)choice; } PBoolean H245_DataApplicationCapability_application::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_t120 : case e_dsm_cc : case e_userData : case e_t434 : case e_h224 : case e_h222DataPartitioning : case e_t30fax : case e_t140 : choice = new H245_DataProtocolCapability(); return TRUE; case e_t84 : choice = new H245_DataApplicationCapability_application_t84(); return TRUE; case e_nlpid : choice = new H245_DataApplicationCapability_application_nlpid(); return TRUE; case e_dsvdControl : choice = new PASN_Null(); return TRUE; case e_t38fax : choice = new H245_DataApplicationCapability_application_t38fax(); return TRUE; case e_genericDataCapability : choice = new H245_GenericCapability(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_DataApplicationCapability_application::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DataApplicationCapability_application::Class()), PInvalidCast); #endif return new H245_DataApplicationCapability_application(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_DataProtocolCapability_v76wCompression[]={ {"transmitCompression",0} ,{"receiveCompression",1} ,{"transmitAndReceiveCompression",2} }; #endif // // DataProtocolCapability_v76wCompression // H245_DataProtocolCapability_v76wCompression::H245_DataProtocolCapability_v76wCompression(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_DataProtocolCapability_v76wCompression,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataProtocolCapability_v76wCompression::operator H245_CompressionType &() const #else H245_DataProtocolCapability_v76wCompression::operator H245_CompressionType &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_CompressionType), PInvalidCast); #endif return *(H245_CompressionType *)choice; } H245_DataProtocolCapability_v76wCompression::operator const H245_CompressionType &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_CompressionType), PInvalidCast); #endif return *(H245_CompressionType *)choice; } PBoolean H245_DataProtocolCapability_v76wCompression::CreateObject() { switch (tag) { case e_transmitCompression : case e_receiveCompression : case e_transmitAndReceiveCompression : choice = new H245_CompressionType(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_DataProtocolCapability_v76wCompression::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DataProtocolCapability_v76wCompression::Class()), PInvalidCast); #endif return new H245_DataProtocolCapability_v76wCompression(*this); } // // T84Profile_t84Restricted // H245_T84Profile_t84Restricted::H245_T84Profile_t84Restricted(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_T84Profile_t84Restricted::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "qcif = " << setprecision(indent) << m_qcif << '\n'; strm << setw(indent+6) << "cif = " << setprecision(indent) << m_cif << '\n'; strm << setw(indent+13) << "ccir601Seq = " << setprecision(indent) << m_ccir601Seq << '\n'; strm << setw(indent+14) << "ccir601Prog = " << setprecision(indent) << m_ccir601Prog << '\n'; strm << setw(indent+10) << "hdtvSeq = " << setprecision(indent) << m_hdtvSeq << '\n'; strm << setw(indent+11) << "hdtvProg = " << setprecision(indent) << m_hdtvProg << '\n'; strm << setw(indent+18) << "g3FacsMH200x100 = " << setprecision(indent) << m_g3FacsMH200x100 << '\n'; strm << setw(indent+18) << "g3FacsMH200x200 = " << setprecision(indent) << m_g3FacsMH200x200 << '\n'; strm << setw(indent+19) << "g4FacsMMR200x100 = " << setprecision(indent) << m_g4FacsMMR200x100 << '\n'; strm << setw(indent+19) << "g4FacsMMR200x200 = " << setprecision(indent) << m_g4FacsMMR200x200 << '\n'; strm << setw(indent+17) << "jbig200x200Seq = " << setprecision(indent) << m_jbig200x200Seq << '\n'; strm << setw(indent+18) << "jbig200x200Prog = " << setprecision(indent) << m_jbig200x200Prog << '\n'; strm << setw(indent+17) << "jbig300x300Seq = " << setprecision(indent) << m_jbig300x300Seq << '\n'; strm << setw(indent+18) << "jbig300x300Prog = " << setprecision(indent) << m_jbig300x300Prog << '\n'; strm << setw(indent+14) << "digPhotoLow = " << setprecision(indent) << m_digPhotoLow << '\n'; strm << setw(indent+17) << "digPhotoMedSeq = " << setprecision(indent) << m_digPhotoMedSeq << '\n'; strm << setw(indent+18) << "digPhotoMedProg = " << setprecision(indent) << m_digPhotoMedProg << '\n'; strm << setw(indent+18) << "digPhotoHighSeq = " << setprecision(indent) << m_digPhotoHighSeq << '\n'; strm << setw(indent+19) << "digPhotoHighProg = " << setprecision(indent) << m_digPhotoHighProg << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_T84Profile_t84Restricted::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_T84Profile_t84Restricted), PInvalidCast); #endif const H245_T84Profile_t84Restricted & other = (const H245_T84Profile_t84Restricted &)obj; Comparison result; if ((result = m_qcif.Compare(other.m_qcif)) != EqualTo) return result; if ((result = m_cif.Compare(other.m_cif)) != EqualTo) return result; if ((result = m_ccir601Seq.Compare(other.m_ccir601Seq)) != EqualTo) return result; if ((result = m_ccir601Prog.Compare(other.m_ccir601Prog)) != EqualTo) return result; if ((result = m_hdtvSeq.Compare(other.m_hdtvSeq)) != EqualTo) return result; if ((result = m_hdtvProg.Compare(other.m_hdtvProg)) != EqualTo) return result; if ((result = m_g3FacsMH200x100.Compare(other.m_g3FacsMH200x100)) != EqualTo) return result; if ((result = m_g3FacsMH200x200.Compare(other.m_g3FacsMH200x200)) != EqualTo) return result; if ((result = m_g4FacsMMR200x100.Compare(other.m_g4FacsMMR200x100)) != EqualTo) return result; if ((result = m_g4FacsMMR200x200.Compare(other.m_g4FacsMMR200x200)) != EqualTo) return result; if ((result = m_jbig200x200Seq.Compare(other.m_jbig200x200Seq)) != EqualTo) return result; if ((result = m_jbig200x200Prog.Compare(other.m_jbig200x200Prog)) != EqualTo) return result; if ((result = m_jbig300x300Seq.Compare(other.m_jbig300x300Seq)) != EqualTo) return result; if ((result = m_jbig300x300Prog.Compare(other.m_jbig300x300Prog)) != EqualTo) return result; if ((result = m_digPhotoLow.Compare(other.m_digPhotoLow)) != EqualTo) return result; if ((result = m_digPhotoMedSeq.Compare(other.m_digPhotoMedSeq)) != EqualTo) return result; if ((result = m_digPhotoMedProg.Compare(other.m_digPhotoMedProg)) != EqualTo) return result; if ((result = m_digPhotoHighSeq.Compare(other.m_digPhotoHighSeq)) != EqualTo) return result; if ((result = m_digPhotoHighProg.Compare(other.m_digPhotoHighProg)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_T84Profile_t84Restricted::GetDataLength() const { PINDEX length = 0; length += m_qcif.GetObjectLength(); length += m_cif.GetObjectLength(); length += m_ccir601Seq.GetObjectLength(); length += m_ccir601Prog.GetObjectLength(); length += m_hdtvSeq.GetObjectLength(); length += m_hdtvProg.GetObjectLength(); length += m_g3FacsMH200x100.GetObjectLength(); length += m_g3FacsMH200x200.GetObjectLength(); length += m_g4FacsMMR200x100.GetObjectLength(); length += m_g4FacsMMR200x200.GetObjectLength(); length += m_jbig200x200Seq.GetObjectLength(); length += m_jbig200x200Prog.GetObjectLength(); length += m_jbig300x300Seq.GetObjectLength(); length += m_jbig300x300Prog.GetObjectLength(); length += m_digPhotoLow.GetObjectLength(); length += m_digPhotoMedSeq.GetObjectLength(); length += m_digPhotoMedProg.GetObjectLength(); length += m_digPhotoHighSeq.GetObjectLength(); length += m_digPhotoHighProg.GetObjectLength(); return length; } PBoolean H245_T84Profile_t84Restricted::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_qcif.Decode(strm)) return FALSE; if (!m_cif.Decode(strm)) return FALSE; if (!m_ccir601Seq.Decode(strm)) return FALSE; if (!m_ccir601Prog.Decode(strm)) return FALSE; if (!m_hdtvSeq.Decode(strm)) return FALSE; if (!m_hdtvProg.Decode(strm)) return FALSE; if (!m_g3FacsMH200x100.Decode(strm)) return FALSE; if (!m_g3FacsMH200x200.Decode(strm)) return FALSE; if (!m_g4FacsMMR200x100.Decode(strm)) return FALSE; if (!m_g4FacsMMR200x200.Decode(strm)) return FALSE; if (!m_jbig200x200Seq.Decode(strm)) return FALSE; if (!m_jbig200x200Prog.Decode(strm)) return FALSE; if (!m_jbig300x300Seq.Decode(strm)) return FALSE; if (!m_jbig300x300Prog.Decode(strm)) return FALSE; if (!m_digPhotoLow.Decode(strm)) return FALSE; if (!m_digPhotoMedSeq.Decode(strm)) return FALSE; if (!m_digPhotoMedProg.Decode(strm)) return FALSE; if (!m_digPhotoHighSeq.Decode(strm)) return FALSE; if (!m_digPhotoHighProg.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_T84Profile_t84Restricted::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_qcif.Encode(strm); m_cif.Encode(strm); m_ccir601Seq.Encode(strm); m_ccir601Prog.Encode(strm); m_hdtvSeq.Encode(strm); m_hdtvProg.Encode(strm); m_g3FacsMH200x100.Encode(strm); m_g3FacsMH200x200.Encode(strm); m_g4FacsMMR200x100.Encode(strm); m_g4FacsMMR200x200.Encode(strm); m_jbig200x200Seq.Encode(strm); m_jbig200x200Prog.Encode(strm); m_jbig300x300Seq.Encode(strm); m_jbig300x300Prog.Encode(strm); m_digPhotoLow.Encode(strm); m_digPhotoMedSeq.Encode(strm); m_digPhotoMedProg.Encode(strm); m_digPhotoHighSeq.Encode(strm); m_digPhotoHighProg.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_T84Profile_t84Restricted::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_T84Profile_t84Restricted::Class()), PInvalidCast); #endif return new H245_T84Profile_t84Restricted(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_T38FaxUdpOptions_t38FaxUdpEC[]={ {"t38UDPFEC",0} ,{"t38UDPRedundancy",1} }; #endif // // T38FaxUdpOptions_t38FaxUdpEC // H245_T38FaxUdpOptions_t38FaxUdpEC::H245_T38FaxUdpOptions_t38FaxUdpEC(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_T38FaxUdpOptions_t38FaxUdpEC,2 #endif ) { } PBoolean H245_T38FaxUdpOptions_t38FaxUdpEC::CreateObject() { choice = (tag <= e_t38UDPRedundancy) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_T38FaxUdpOptions_t38FaxUdpEC::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_T38FaxUdpOptions_t38FaxUdpEC::Class()), PInvalidCast); #endif return new H245_T38FaxUdpOptions_t38FaxUdpEC(*this); } // // ArrayOf_NonStandardParameter // H245_ArrayOf_NonStandardParameter::H245_ArrayOf_NonStandardParameter(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_NonStandardParameter::CreateObject() const { return new H245_NonStandardParameter; } H245_NonStandardParameter & H245_ArrayOf_NonStandardParameter::operator[](PINDEX i) const { return (H245_NonStandardParameter &)array[i]; } PObject * H245_ArrayOf_NonStandardParameter::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_NonStandardParameter::Class()), PInvalidCast); #endif return new H245_ArrayOf_NonStandardParameter(*this); } // // ArrayOf_ParameterIdentifier // H245_ArrayOf_ParameterIdentifier::H245_ArrayOf_ParameterIdentifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_ParameterIdentifier::CreateObject() const { return new H245_ParameterIdentifier; } H245_ParameterIdentifier & H245_ArrayOf_ParameterIdentifier::operator[](PINDEX i) const { return (H245_ParameterIdentifier &)array[i]; } PObject * H245_ArrayOf_ParameterIdentifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_ParameterIdentifier::Class()), PInvalidCast); #endif return new H245_ArrayOf_ParameterIdentifier(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_FECCapability_rfc2733Format[]={ {"rfc2733rfc2198",0} ,{"rfc2733sameport",1} ,{"rfc2733diffport",2} }; #endif // // FECCapability_rfc2733Format // H245_FECCapability_rfc2733Format::H245_FECCapability_rfc2733Format(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_FECCapability_rfc2733Format,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_FECCapability_rfc2733Format::operator H245_MaxRedundancy &() const #else H245_FECCapability_rfc2733Format::operator H245_MaxRedundancy &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MaxRedundancy), PInvalidCast); #endif return *(H245_MaxRedundancy *)choice; } H245_FECCapability_rfc2733Format::operator const H245_MaxRedundancy &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MaxRedundancy), PInvalidCast); #endif return *(H245_MaxRedundancy *)choice; } PBoolean H245_FECCapability_rfc2733Format::CreateObject() { switch (tag) { case e_rfc2733rfc2198 : case e_rfc2733sameport : case e_rfc2733diffport : choice = new H245_MaxRedundancy(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_FECCapability_rfc2733Format::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_FECCapability_rfc2733Format::Class()), PInvalidCast); #endif return new H245_FECCapability_rfc2733Format(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_NetworkAccessParameters_distribution[]={ {"unicast",0} ,{"multicast",1} }; #endif // // NetworkAccessParameters_distribution // H245_NetworkAccessParameters_distribution::H245_NetworkAccessParameters_distribution(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_NetworkAccessParameters_distribution,2 #endif ) { } PBoolean H245_NetworkAccessParameters_distribution::CreateObject() { choice = (tag <= e_multicast) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_NetworkAccessParameters_distribution::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NetworkAccessParameters_distribution::Class()), PInvalidCast); #endif return new H245_NetworkAccessParameters_distribution(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_NetworkAccessParameters_networkAddress[]={ {"q2931Address",0} ,{"e164Address",1} ,{"localAreaAddress",2} }; #endif // // NetworkAccessParameters_networkAddress // H245_NetworkAccessParameters_networkAddress::H245_NetworkAccessParameters_networkAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_NetworkAccessParameters_networkAddress,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_NetworkAccessParameters_networkAddress::operator H245_Q2931Address &() const #else H245_NetworkAccessParameters_networkAddress::operator H245_Q2931Address &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_Q2931Address), PInvalidCast); #endif return *(H245_Q2931Address *)choice; } H245_NetworkAccessParameters_networkAddress::operator const H245_Q2931Address &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_Q2931Address), PInvalidCast); #endif return *(H245_Q2931Address *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_NetworkAccessParameters_networkAddress::operator H245_TransportAddress &() const #else H245_NetworkAccessParameters_networkAddress::operator H245_TransportAddress &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_TransportAddress), PInvalidCast); #endif return *(H245_TransportAddress *)choice; } H245_NetworkAccessParameters_networkAddress::operator const H245_TransportAddress &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_TransportAddress), PInvalidCast); #endif return *(H245_TransportAddress *)choice; } PBoolean H245_NetworkAccessParameters_networkAddress::CreateObject() { switch (tag) { case e_q2931Address : choice = new H245_Q2931Address(); return TRUE; case e_e164Address : choice = new PASN_IA5String(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 128); choice->SetCharacterSet(PASN_Object::FixedConstraint, "0123456789#*,"); return TRUE; case e_localAreaAddress : choice = new H245_TransportAddress(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_NetworkAccessParameters_networkAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NetworkAccessParameters_networkAddress::Class()), PInvalidCast); #endif return new H245_NetworkAccessParameters_networkAddress(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_NetworkAccessParameters_t120SetupProcedure[]={ {"originateCall",0} ,{"waitForCall",1} ,{"issueQuery",2} }; #endif // // NetworkAccessParameters_t120SetupProcedure // H245_NetworkAccessParameters_t120SetupProcedure::H245_NetworkAccessParameters_t120SetupProcedure(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_NetworkAccessParameters_t120SetupProcedure,3 #endif ) { } PBoolean H245_NetworkAccessParameters_t120SetupProcedure::CreateObject() { choice = (tag <= e_issueQuery) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_NetworkAccessParameters_t120SetupProcedure::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NetworkAccessParameters_t120SetupProcedure::Class()), PInvalidCast); #endif return new H245_NetworkAccessParameters_t120SetupProcedure(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_Q2931Address_address[]={ {"internationalNumber",0} ,{"nsapAddress",1} }; #endif // // Q2931Address_address // H245_Q2931Address_address::H245_Q2931Address_address(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_Q2931Address_address,2 #endif ) { } PBoolean H245_Q2931Address_address::CreateObject() { switch (tag) { case e_internationalNumber : choice = new PASN_NumericString(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 16); return TRUE; case e_nsapAddress : choice = new PASN_OctetString(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 20); return TRUE; } choice = NULL; return FALSE; } PObject * H245_Q2931Address_address::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_Q2931Address_address::Class()), PInvalidCast); #endif return new H245_Q2931Address_address(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_H235Media_mediaType[]={ {"nonStandard",0} ,{"videoData",1} ,{"audioData",2} ,{"data",3} ,{"redundancyEncoding",4} ,{"multiplePayloadStream",5} ,{"depFec",6} ,{"fec",7} }; #endif // // H235Media_mediaType // H245_H235Media_mediaType::H245_H235Media_mediaType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_H235Media_mediaType,8 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H235Media_mediaType::operator H245_NonStandardParameter &() const #else H245_H235Media_mediaType::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_H235Media_mediaType::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H235Media_mediaType::operator H245_VideoCapability &() const #else H245_H235Media_mediaType::operator H245_VideoCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VideoCapability), PInvalidCast); #endif return *(H245_VideoCapability *)choice; } H245_H235Media_mediaType::operator const H245_VideoCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VideoCapability), PInvalidCast); #endif return *(H245_VideoCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H235Media_mediaType::operator H245_AudioCapability &() const #else H245_H235Media_mediaType::operator H245_AudioCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioCapability), PInvalidCast); #endif return *(H245_AudioCapability *)choice; } H245_H235Media_mediaType::operator const H245_AudioCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioCapability), PInvalidCast); #endif return *(H245_AudioCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H235Media_mediaType::operator H245_DataApplicationCapability &() const #else H245_H235Media_mediaType::operator H245_DataApplicationCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataApplicationCapability), PInvalidCast); #endif return *(H245_DataApplicationCapability *)choice; } H245_H235Media_mediaType::operator const H245_DataApplicationCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataApplicationCapability), PInvalidCast); #endif return *(H245_DataApplicationCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H235Media_mediaType::operator H245_RedundancyEncoding &() const #else H245_H235Media_mediaType::operator H245_RedundancyEncoding &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RedundancyEncoding), PInvalidCast); #endif return *(H245_RedundancyEncoding *)choice; } H245_H235Media_mediaType::operator const H245_RedundancyEncoding &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RedundancyEncoding), PInvalidCast); #endif return *(H245_RedundancyEncoding *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H235Media_mediaType::operator H245_MultiplePayloadStream &() const #else H245_H235Media_mediaType::operator H245_MultiplePayloadStream &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultiplePayloadStream), PInvalidCast); #endif return *(H245_MultiplePayloadStream *)choice; } H245_H235Media_mediaType::operator const H245_MultiplePayloadStream &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultiplePayloadStream), PInvalidCast); #endif return *(H245_MultiplePayloadStream *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H235Media_mediaType::operator H245_DepFECData &() const #else H245_H235Media_mediaType::operator H245_DepFECData &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECData), PInvalidCast); #endif return *(H245_DepFECData *)choice; } H245_H235Media_mediaType::operator const H245_DepFECData &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECData), PInvalidCast); #endif return *(H245_DepFECData *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H235Media_mediaType::operator H245_FECData &() const #else H245_H235Media_mediaType::operator H245_FECData &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FECData), PInvalidCast); #endif return *(H245_FECData *)choice; } H245_H235Media_mediaType::operator const H245_FECData &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FECData), PInvalidCast); #endif return *(H245_FECData *)choice; } PBoolean H245_H235Media_mediaType::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_videoData : choice = new H245_VideoCapability(); return TRUE; case e_audioData : choice = new H245_AudioCapability(); return TRUE; case e_data : choice = new H245_DataApplicationCapability(); return TRUE; case e_redundancyEncoding : choice = new H245_RedundancyEncoding(); return TRUE; case e_multiplePayloadStream : choice = new H245_MultiplePayloadStream(); return TRUE; case e_depFec : choice = new H245_DepFECData(); return TRUE; case e_fec : choice = new H245_FECData(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_H235Media_mediaType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H235Media_mediaType::Class()), PInvalidCast); #endif return new H245_H235Media_mediaType(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_H223LogicalChannelParameters_adaptationLayerType[]={ {"nonStandard",0} ,{"al1Framed",1} ,{"al1NotFramed",2} ,{"al2WithoutSequenceNumbers",3} ,{"al2WithSequenceNumbers",4} ,{"al3",5} ,{"al1M",6} ,{"al2M",7} ,{"al3M",8} }; #endif // // H223LogicalChannelParameters_adaptationLayerType // H245_H223LogicalChannelParameters_adaptationLayerType::H245_H223LogicalChannelParameters_adaptationLayerType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 6, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_H223LogicalChannelParameters_adaptationLayerType,9 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H223LogicalChannelParameters_adaptationLayerType::operator H245_NonStandardParameter &() const #else H245_H223LogicalChannelParameters_adaptationLayerType::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_H223LogicalChannelParameters_adaptationLayerType::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H223LogicalChannelParameters_adaptationLayerType::operator H245_H223LogicalChannelParameters_adaptationLayerType_al3 &() const #else H245_H223LogicalChannelParameters_adaptationLayerType::operator H245_H223LogicalChannelParameters_adaptationLayerType_al3 &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223LogicalChannelParameters_adaptationLayerType_al3), PInvalidCast); #endif return *(H245_H223LogicalChannelParameters_adaptationLayerType_al3 *)choice; } H245_H223LogicalChannelParameters_adaptationLayerType::operator const H245_H223LogicalChannelParameters_adaptationLayerType_al3 &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223LogicalChannelParameters_adaptationLayerType_al3), PInvalidCast); #endif return *(H245_H223LogicalChannelParameters_adaptationLayerType_al3 *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H223LogicalChannelParameters_adaptationLayerType::operator H245_H223AL1MParameters &() const #else H245_H223LogicalChannelParameters_adaptationLayerType::operator H245_H223AL1MParameters &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223AL1MParameters), PInvalidCast); #endif return *(H245_H223AL1MParameters *)choice; } H245_H223LogicalChannelParameters_adaptationLayerType::operator const H245_H223AL1MParameters &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223AL1MParameters), PInvalidCast); #endif return *(H245_H223AL1MParameters *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H223LogicalChannelParameters_adaptationLayerType::operator H245_H223AL2MParameters &() const #else H245_H223LogicalChannelParameters_adaptationLayerType::operator H245_H223AL2MParameters &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223AL2MParameters), PInvalidCast); #endif return *(H245_H223AL2MParameters *)choice; } H245_H223LogicalChannelParameters_adaptationLayerType::operator const H245_H223AL2MParameters &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223AL2MParameters), PInvalidCast); #endif return *(H245_H223AL2MParameters *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H223LogicalChannelParameters_adaptationLayerType::operator H245_H223AL3MParameters &() const #else H245_H223LogicalChannelParameters_adaptationLayerType::operator H245_H223AL3MParameters &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223AL3MParameters), PInvalidCast); #endif return *(H245_H223AL3MParameters *)choice; } H245_H223LogicalChannelParameters_adaptationLayerType::operator const H245_H223AL3MParameters &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223AL3MParameters), PInvalidCast); #endif return *(H245_H223AL3MParameters *)choice; } PBoolean H245_H223LogicalChannelParameters_adaptationLayerType::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_al1Framed : case e_al1NotFramed : case e_al2WithoutSequenceNumbers : case e_al2WithSequenceNumbers : choice = new PASN_Null(); return TRUE; case e_al3 : choice = new H245_H223LogicalChannelParameters_adaptationLayerType_al3(); return TRUE; case e_al1M : choice = new H245_H223AL1MParameters(); return TRUE; case e_al2M : choice = new H245_H223AL2MParameters(); return TRUE; case e_al3M : choice = new H245_H223AL3MParameters(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_H223LogicalChannelParameters_adaptationLayerType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223LogicalChannelParameters_adaptationLayerType::Class()), PInvalidCast); #endif return new H245_H223LogicalChannelParameters_adaptationLayerType(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_H223AL1MParameters_transferMode[]={ {"framed",0} ,{"unframed",1} }; #endif // // H223AL1MParameters_transferMode // H245_H223AL1MParameters_transferMode::H245_H223AL1MParameters_transferMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_H223AL1MParameters_transferMode,2 #endif ) { } PBoolean H245_H223AL1MParameters_transferMode::CreateObject() { choice = (tag <= e_unframed) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_H223AL1MParameters_transferMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223AL1MParameters_transferMode::Class()), PInvalidCast); #endif return new H245_H223AL1MParameters_transferMode(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_H223AL1MParameters_headerFEC[]={ {"sebch16_7",0} ,{"golay24_12",1} }; #endif // // H223AL1MParameters_headerFEC // H245_H223AL1MParameters_headerFEC::H245_H223AL1MParameters_headerFEC(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_H223AL1MParameters_headerFEC,2 #endif ) { } PBoolean H245_H223AL1MParameters_headerFEC::CreateObject() { choice = (tag <= e_golay24_12) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_H223AL1MParameters_headerFEC::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223AL1MParameters_headerFEC::Class()), PInvalidCast); #endif return new H245_H223AL1MParameters_headerFEC(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_H223AL1MParameters_crcLength[]={ {"crc4bit",0} ,{"crc12bit",1} ,{"crc20bit",2} ,{"crc28bit",3} ,{"crc8bit",4} ,{"crc16bit",5} ,{"crc32bit",6} ,{"crcNotUsed",7} }; #endif // // H223AL1MParameters_crcLength // H245_H223AL1MParameters_crcLength::H245_H223AL1MParameters_crcLength(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_H223AL1MParameters_crcLength,8 #endif ) { } PBoolean H245_H223AL1MParameters_crcLength::CreateObject() { choice = (tag <= e_crcNotUsed) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_H223AL1MParameters_crcLength::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223AL1MParameters_crcLength::Class()), PInvalidCast); #endif return new H245_H223AL1MParameters_crcLength(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_H223AL1MParameters_arqType[]={ {"noArq",0} ,{"typeIArq",1} ,{"typeIIArq",2} }; #endif // // H223AL1MParameters_arqType // H245_H223AL1MParameters_arqType::H245_H223AL1MParameters_arqType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_H223AL1MParameters_arqType,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H223AL1MParameters_arqType::operator H245_H223AnnexCArqParameters &() const #else H245_H223AL1MParameters_arqType::operator H245_H223AnnexCArqParameters &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223AnnexCArqParameters), PInvalidCast); #endif return *(H245_H223AnnexCArqParameters *)choice; } H245_H223AL1MParameters_arqType::operator const H245_H223AnnexCArqParameters &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223AnnexCArqParameters), PInvalidCast); #endif return *(H245_H223AnnexCArqParameters *)choice; } PBoolean H245_H223AL1MParameters_arqType::CreateObject() { switch (tag) { case e_noArq : choice = new PASN_Null(); return TRUE; case e_typeIArq : case e_typeIIArq : choice = new H245_H223AnnexCArqParameters(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_H223AL1MParameters_arqType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223AL1MParameters_arqType::Class()), PInvalidCast); #endif return new H245_H223AL1MParameters_arqType(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_H223AL2MParameters_headerFEC[]={ {"sebch16_5",0} ,{"golay24_12",1} }; #endif // // H223AL2MParameters_headerFEC // H245_H223AL2MParameters_headerFEC::H245_H223AL2MParameters_headerFEC(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_H223AL2MParameters_headerFEC,2 #endif ) { } PBoolean H245_H223AL2MParameters_headerFEC::CreateObject() { choice = (tag <= e_golay24_12) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_H223AL2MParameters_headerFEC::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223AL2MParameters_headerFEC::Class()), PInvalidCast); #endif return new H245_H223AL2MParameters_headerFEC(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_H223AL3MParameters_headerFormat[]={ {"sebch16_7",0} ,{"golay24_12",1} }; #endif // // H223AL3MParameters_headerFormat // H245_H223AL3MParameters_headerFormat::H245_H223AL3MParameters_headerFormat(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_H223AL3MParameters_headerFormat,2 #endif ) { } PBoolean H245_H223AL3MParameters_headerFormat::CreateObject() { choice = (tag <= e_golay24_12) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_H223AL3MParameters_headerFormat::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223AL3MParameters_headerFormat::Class()), PInvalidCast); #endif return new H245_H223AL3MParameters_headerFormat(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_H223AL3MParameters_crcLength[]={ {"crc4bit",0} ,{"crc12bit",1} ,{"crc20bit",2} ,{"crc28bit",3} ,{"crc8bit",4} ,{"crc16bit",5} ,{"crc32bit",6} ,{"crcNotUsed",7} }; #endif // // H223AL3MParameters_crcLength // H245_H223AL3MParameters_crcLength::H245_H223AL3MParameters_crcLength(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_H223AL3MParameters_crcLength,8 #endif ) { } PBoolean H245_H223AL3MParameters_crcLength::CreateObject() { choice = (tag <= e_crcNotUsed) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_H223AL3MParameters_crcLength::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223AL3MParameters_crcLength::Class()), PInvalidCast); #endif return new H245_H223AL3MParameters_crcLength(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_H223AL3MParameters_arqType[]={ {"noArq",0} ,{"typeIArq",1} ,{"typeIIArq",2} }; #endif // // H223AL3MParameters_arqType // H245_H223AL3MParameters_arqType::H245_H223AL3MParameters_arqType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_H223AL3MParameters_arqType,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H223AL3MParameters_arqType::operator H245_H223AnnexCArqParameters &() const #else H245_H223AL3MParameters_arqType::operator H245_H223AnnexCArqParameters &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223AnnexCArqParameters), PInvalidCast); #endif return *(H245_H223AnnexCArqParameters *)choice; } H245_H223AL3MParameters_arqType::operator const H245_H223AnnexCArqParameters &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223AnnexCArqParameters), PInvalidCast); #endif return *(H245_H223AnnexCArqParameters *)choice; } PBoolean H245_H223AL3MParameters_arqType::CreateObject() { switch (tag) { case e_noArq : choice = new PASN_Null(); return TRUE; case e_typeIArq : case e_typeIIArq : choice = new H245_H223AnnexCArqParameters(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_H223AL3MParameters_arqType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223AL3MParameters_arqType::Class()), PInvalidCast); #endif return new H245_H223AL3MParameters_arqType(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_H223AnnexCArqParameters_numberOfRetransmissions[]={ {"finite",0} ,{"infinite",1} }; #endif // // H223AnnexCArqParameters_numberOfRetransmissions // H245_H223AnnexCArqParameters_numberOfRetransmissions::H245_H223AnnexCArqParameters_numberOfRetransmissions(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_H223AnnexCArqParameters_numberOfRetransmissions,2 #endif ) { } PBoolean H245_H223AnnexCArqParameters_numberOfRetransmissions::CreateObject() { switch (tag) { case e_finite : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 16); return TRUE; case e_infinite : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_H223AnnexCArqParameters_numberOfRetransmissions::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223AnnexCArqParameters_numberOfRetransmissions::Class()), PInvalidCast); #endif return new H245_H223AnnexCArqParameters_numberOfRetransmissions(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_V76LogicalChannelParameters_suspendResume[]={ {"noSuspendResume",0} ,{"suspendResumewAddress",1} ,{"suspendResumewoAddress",2} }; #endif // // V76LogicalChannelParameters_suspendResume // H245_V76LogicalChannelParameters_suspendResume::H245_V76LogicalChannelParameters_suspendResume(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_V76LogicalChannelParameters_suspendResume,3 #endif ) { } PBoolean H245_V76LogicalChannelParameters_suspendResume::CreateObject() { choice = (tag <= e_suspendResumewoAddress) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_V76LogicalChannelParameters_suspendResume::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_V76LogicalChannelParameters_suspendResume::Class()), PInvalidCast); #endif return new H245_V76LogicalChannelParameters_suspendResume(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_V76LogicalChannelParameters_mode[]={ {"eRM",0} ,{"uNERM",1} }; #endif // // V76LogicalChannelParameters_mode // H245_V76LogicalChannelParameters_mode::H245_V76LogicalChannelParameters_mode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_V76LogicalChannelParameters_mode,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_V76LogicalChannelParameters_mode::operator H245_V76LogicalChannelParameters_mode_eRM &() const #else H245_V76LogicalChannelParameters_mode::operator H245_V76LogicalChannelParameters_mode_eRM &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_V76LogicalChannelParameters_mode_eRM), PInvalidCast); #endif return *(H245_V76LogicalChannelParameters_mode_eRM *)choice; } H245_V76LogicalChannelParameters_mode::operator const H245_V76LogicalChannelParameters_mode_eRM &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_V76LogicalChannelParameters_mode_eRM), PInvalidCast); #endif return *(H245_V76LogicalChannelParameters_mode_eRM *)choice; } PBoolean H245_V76LogicalChannelParameters_mode::CreateObject() { switch (tag) { case e_eRM : choice = new H245_V76LogicalChannelParameters_mode_eRM(); return TRUE; case e_uNERM : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_V76LogicalChannelParameters_mode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_V76LogicalChannelParameters_mode::Class()), PInvalidCast); #endif return new H245_V76LogicalChannelParameters_mode(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_H2250LogicalChannelParameters_mediaPacketization[]={ {"h261aVideoPacketization",0} ,{"rtpPayloadType",1} }; #endif // // H2250LogicalChannelParameters_mediaPacketization // H245_H2250LogicalChannelParameters_mediaPacketization::H245_H2250LogicalChannelParameters_mediaPacketization(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_H2250LogicalChannelParameters_mediaPacketization,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H2250LogicalChannelParameters_mediaPacketization::operator H245_RTPPayloadType &() const #else H245_H2250LogicalChannelParameters_mediaPacketization::operator H245_RTPPayloadType &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RTPPayloadType), PInvalidCast); #endif return *(H245_RTPPayloadType *)choice; } H245_H2250LogicalChannelParameters_mediaPacketization::operator const H245_RTPPayloadType &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_RTPPayloadType), PInvalidCast); #endif return *(H245_RTPPayloadType *)choice; } PBoolean H245_H2250LogicalChannelParameters_mediaPacketization::CreateObject() { switch (tag) { case e_h261aVideoPacketization : choice = new PASN_Null(); return TRUE; case e_rtpPayloadType : choice = new H245_RTPPayloadType(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_H2250LogicalChannelParameters_mediaPacketization::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H2250LogicalChannelParameters_mediaPacketization::Class()), PInvalidCast); #endif return new H245_H2250LogicalChannelParameters_mediaPacketization(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_RTPPayloadType_payloadDescriptor[]={ {"nonStandardIdentifier",0} ,{"rfc_number",1} ,{"oid",2} }; #endif // // RTPPayloadType_payloadDescriptor // H245_RTPPayloadType_payloadDescriptor::H245_RTPPayloadType_payloadDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_RTPPayloadType_payloadDescriptor,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RTPPayloadType_payloadDescriptor::operator H245_NonStandardParameter &() const #else H245_RTPPayloadType_payloadDescriptor::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_RTPPayloadType_payloadDescriptor::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } PBoolean H245_RTPPayloadType_payloadDescriptor::CreateObject() { switch (tag) { case e_nonStandardIdentifier : choice = new H245_NonStandardParameter(); return TRUE; case e_rfc_number : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::ExtendableConstraint, 1, 32768); return TRUE; case e_oid : choice = new PASN_ObjectId(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_RTPPayloadType_payloadDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RTPPayloadType_payloadDescriptor::Class()), PInvalidCast); #endif return new H245_RTPPayloadType_payloadDescriptor(*this); } // // ArrayOf_MultiplePayloadStreamElement // H245_ArrayOf_MultiplePayloadStreamElement::H245_ArrayOf_MultiplePayloadStreamElement(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_MultiplePayloadStreamElement::CreateObject() const { return new H245_MultiplePayloadStreamElement; } H245_MultiplePayloadStreamElement & H245_ArrayOf_MultiplePayloadStreamElement::operator[](PINDEX i) const { return (H245_MultiplePayloadStreamElement &)array[i]; } PObject * H245_ArrayOf_MultiplePayloadStreamElement::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_MultiplePayloadStreamElement::Class()), PInvalidCast); #endif return new H245_ArrayOf_MultiplePayloadStreamElement(*this); } // // UnicastAddress_iPAddress // H245_UnicastAddress_iPAddress::H245_UnicastAddress_iPAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_network.SetConstraints(PASN_Object::FixedConstraint, 4); m_tsapIdentifier.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H245_UnicastAddress_iPAddress::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "network = " << setprecision(indent) << m_network << '\n'; strm << setw(indent+17) << "tsapIdentifier = " << setprecision(indent) << m_tsapIdentifier << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_UnicastAddress_iPAddress::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_UnicastAddress_iPAddress), PInvalidCast); #endif const H245_UnicastAddress_iPAddress & other = (const H245_UnicastAddress_iPAddress &)obj; Comparison result; if ((result = m_network.Compare(other.m_network)) != EqualTo) return result; if ((result = m_tsapIdentifier.Compare(other.m_tsapIdentifier)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_UnicastAddress_iPAddress::GetDataLength() const { PINDEX length = 0; length += m_network.GetObjectLength(); length += m_tsapIdentifier.GetObjectLength(); return length; } PBoolean H245_UnicastAddress_iPAddress::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_network.Decode(strm)) return FALSE; if (!m_tsapIdentifier.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_UnicastAddress_iPAddress::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_network.Encode(strm); m_tsapIdentifier.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_UnicastAddress_iPAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_UnicastAddress_iPAddress::Class()), PInvalidCast); #endif return new H245_UnicastAddress_iPAddress(*this); } // // UnicastAddress_iPXAddress // H245_UnicastAddress_iPXAddress::H245_UnicastAddress_iPXAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_node.SetConstraints(PASN_Object::FixedConstraint, 6); m_netnum.SetConstraints(PASN_Object::FixedConstraint, 4); m_tsapIdentifier.SetConstraints(PASN_Object::FixedConstraint, 2); } #ifndef PASN_NOPRINTON void H245_UnicastAddress_iPXAddress::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "node = " << setprecision(indent) << m_node << '\n'; strm << setw(indent+9) << "netnum = " << setprecision(indent) << m_netnum << '\n'; strm << setw(indent+17) << "tsapIdentifier = " << setprecision(indent) << m_tsapIdentifier << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_UnicastAddress_iPXAddress::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_UnicastAddress_iPXAddress), PInvalidCast); #endif const H245_UnicastAddress_iPXAddress & other = (const H245_UnicastAddress_iPXAddress &)obj; Comparison result; if ((result = m_node.Compare(other.m_node)) != EqualTo) return result; if ((result = m_netnum.Compare(other.m_netnum)) != EqualTo) return result; if ((result = m_tsapIdentifier.Compare(other.m_tsapIdentifier)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_UnicastAddress_iPXAddress::GetDataLength() const { PINDEX length = 0; length += m_node.GetObjectLength(); length += m_netnum.GetObjectLength(); length += m_tsapIdentifier.GetObjectLength(); return length; } PBoolean H245_UnicastAddress_iPXAddress::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_node.Decode(strm)) return FALSE; if (!m_netnum.Decode(strm)) return FALSE; if (!m_tsapIdentifier.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_UnicastAddress_iPXAddress::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_node.Encode(strm); m_netnum.Encode(strm); m_tsapIdentifier.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_UnicastAddress_iPXAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_UnicastAddress_iPXAddress::Class()), PInvalidCast); #endif return new H245_UnicastAddress_iPXAddress(*this); } // // UnicastAddress_iP6Address // H245_UnicastAddress_iP6Address::H245_UnicastAddress_iP6Address(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_network.SetConstraints(PASN_Object::FixedConstraint, 16); m_tsapIdentifier.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H245_UnicastAddress_iP6Address::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "network = " << setprecision(indent) << m_network << '\n'; strm << setw(indent+17) << "tsapIdentifier = " << setprecision(indent) << m_tsapIdentifier << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_UnicastAddress_iP6Address::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_UnicastAddress_iP6Address), PInvalidCast); #endif const H245_UnicastAddress_iP6Address & other = (const H245_UnicastAddress_iP6Address &)obj; Comparison result; if ((result = m_network.Compare(other.m_network)) != EqualTo) return result; if ((result = m_tsapIdentifier.Compare(other.m_tsapIdentifier)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_UnicastAddress_iP6Address::GetDataLength() const { PINDEX length = 0; length += m_network.GetObjectLength(); length += m_tsapIdentifier.GetObjectLength(); return length; } PBoolean H245_UnicastAddress_iP6Address::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_network.Decode(strm)) return FALSE; if (!m_tsapIdentifier.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_UnicastAddress_iP6Address::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_network.Encode(strm); m_tsapIdentifier.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_UnicastAddress_iP6Address::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_UnicastAddress_iP6Address::Class()), PInvalidCast); #endif return new H245_UnicastAddress_iP6Address(*this); } // // MulticastAddress_iPAddress // H245_MulticastAddress_iPAddress::H245_MulticastAddress_iPAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_network.SetConstraints(PASN_Object::FixedConstraint, 4); m_tsapIdentifier.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H245_MulticastAddress_iPAddress::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "network = " << setprecision(indent) << m_network << '\n'; strm << setw(indent+17) << "tsapIdentifier = " << setprecision(indent) << m_tsapIdentifier << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MulticastAddress_iPAddress::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MulticastAddress_iPAddress), PInvalidCast); #endif const H245_MulticastAddress_iPAddress & other = (const H245_MulticastAddress_iPAddress &)obj; Comparison result; if ((result = m_network.Compare(other.m_network)) != EqualTo) return result; if ((result = m_tsapIdentifier.Compare(other.m_tsapIdentifier)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MulticastAddress_iPAddress::GetDataLength() const { PINDEX length = 0; length += m_network.GetObjectLength(); length += m_tsapIdentifier.GetObjectLength(); return length; } PBoolean H245_MulticastAddress_iPAddress::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_network.Decode(strm)) return FALSE; if (!m_tsapIdentifier.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MulticastAddress_iPAddress::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_network.Encode(strm); m_tsapIdentifier.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MulticastAddress_iPAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MulticastAddress_iPAddress::Class()), PInvalidCast); #endif return new H245_MulticastAddress_iPAddress(*this); } // // MulticastAddress_iP6Address // H245_MulticastAddress_iP6Address::H245_MulticastAddress_iP6Address(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_network.SetConstraints(PASN_Object::FixedConstraint, 16); m_tsapIdentifier.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H245_MulticastAddress_iP6Address::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "network = " << setprecision(indent) << m_network << '\n'; strm << setw(indent+17) << "tsapIdentifier = " << setprecision(indent) << m_tsapIdentifier << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MulticastAddress_iP6Address::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MulticastAddress_iP6Address), PInvalidCast); #endif const H245_MulticastAddress_iP6Address & other = (const H245_MulticastAddress_iP6Address &)obj; Comparison result; if ((result = m_network.Compare(other.m_network)) != EqualTo) return result; if ((result = m_tsapIdentifier.Compare(other.m_tsapIdentifier)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MulticastAddress_iP6Address::GetDataLength() const { PINDEX length = 0; length += m_network.GetObjectLength(); length += m_tsapIdentifier.GetObjectLength(); return length; } PBoolean H245_MulticastAddress_iP6Address::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_network.Decode(strm)) return FALSE; if (!m_tsapIdentifier.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MulticastAddress_iP6Address::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_network.Encode(strm); m_tsapIdentifier.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MulticastAddress_iP6Address::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MulticastAddress_iP6Address::Class()), PInvalidCast); #endif return new H245_MulticastAddress_iP6Address(*this); } // // ArrayOf_EscrowData // H245_ArrayOf_EscrowData::H245_ArrayOf_EscrowData(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_EscrowData::CreateObject() const { return new H245_EscrowData; } H245_EscrowData & H245_ArrayOf_EscrowData::operator[](PINDEX i) const { return (H245_EscrowData &)array[i]; } PObject * H245_ArrayOf_EscrowData::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_EscrowData::Class()), PInvalidCast); #endif return new H245_ArrayOf_EscrowData(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_OpenLogicalChannelAck_forwardMultiplexAckParameters[]={ {"h2250LogicalChannelAckParameters",0} }; #endif // // OpenLogicalChannelAck_forwardMultiplexAckParameters // H245_OpenLogicalChannelAck_forwardMultiplexAckParameters::H245_OpenLogicalChannelAck_forwardMultiplexAckParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_OpenLogicalChannelAck_forwardMultiplexAckParameters,1 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_OpenLogicalChannelAck_forwardMultiplexAckParameters::operator H245_H2250LogicalChannelAckParameters &() const #else H245_OpenLogicalChannelAck_forwardMultiplexAckParameters::operator H245_H2250LogicalChannelAckParameters &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H2250LogicalChannelAckParameters), PInvalidCast); #endif return *(H245_H2250LogicalChannelAckParameters *)choice; } H245_OpenLogicalChannelAck_forwardMultiplexAckParameters::operator const H245_H2250LogicalChannelAckParameters &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H2250LogicalChannelAckParameters), PInvalidCast); #endif return *(H245_H2250LogicalChannelAckParameters *)choice; } PBoolean H245_OpenLogicalChannelAck_forwardMultiplexAckParameters::CreateObject() { switch (tag) { case e_h2250LogicalChannelAckParameters : choice = new H245_H2250LogicalChannelAckParameters(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_OpenLogicalChannelAck_forwardMultiplexAckParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_OpenLogicalChannelAck_forwardMultiplexAckParameters::Class()), PInvalidCast); #endif return new H245_OpenLogicalChannelAck_forwardMultiplexAckParameters(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_OpenLogicalChannelReject_cause[]={ {"unspecified",0} ,{"unsuitableReverseParameters",1} ,{"dataTypeNotSupported",2} ,{"dataTypeNotAvailable",3} ,{"unknownDataType",4} ,{"dataTypeALCombinationNotSupported",5} ,{"multicastChannelNotAllowed",6} ,{"insufficientBandwidth",7} ,{"separateStackEstablishmentFailed",8} ,{"invalidSessionID",9} ,{"masterSlaveConflict",10} ,{"waitForCommunicationMode",11} ,{"invalidDependentChannel",12} ,{"replacementForRejected",13} ,{"securityDenied",14} }; #endif // // OpenLogicalChannelReject_cause // H245_OpenLogicalChannelReject_cause::H245_OpenLogicalChannelReject_cause(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 6, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_OpenLogicalChannelReject_cause,15 #endif ) { } PBoolean H245_OpenLogicalChannelReject_cause::CreateObject() { choice = (tag <= e_securityDenied) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_OpenLogicalChannelReject_cause::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_OpenLogicalChannelReject_cause::Class()), PInvalidCast); #endif return new H245_OpenLogicalChannelReject_cause(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_CloseLogicalChannel_source[]={ {"user",0} ,{"lcse",1} }; #endif // // CloseLogicalChannel_source // H245_CloseLogicalChannel_source::H245_CloseLogicalChannel_source(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_CloseLogicalChannel_source,2 #endif ) { } PBoolean H245_CloseLogicalChannel_source::CreateObject() { choice = (tag <= e_lcse) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_CloseLogicalChannel_source::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CloseLogicalChannel_source::Class()), PInvalidCast); #endif return new H245_CloseLogicalChannel_source(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_CloseLogicalChannel_reason[]={ {"unknown",0} ,{"reopen",1} ,{"reservationFailure",2} }; #endif // // CloseLogicalChannel_reason // H245_CloseLogicalChannel_reason::H245_CloseLogicalChannel_reason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_CloseLogicalChannel_reason,3 #endif ) { } PBoolean H245_CloseLogicalChannel_reason::CreateObject() { choice = (tag <= e_reservationFailure) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_CloseLogicalChannel_reason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CloseLogicalChannel_reason::Class()), PInvalidCast); #endif return new H245_CloseLogicalChannel_reason(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_RequestChannelClose_reason[]={ {"unknown",0} ,{"normal",1} ,{"reopen",2} ,{"reservationFailure",3} }; #endif // // RequestChannelClose_reason // H245_RequestChannelClose_reason::H245_RequestChannelClose_reason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_RequestChannelClose_reason,4 #endif ) { } PBoolean H245_RequestChannelClose_reason::CreateObject() { choice = (tag <= e_reservationFailure) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_RequestChannelClose_reason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RequestChannelClose_reason::Class()), PInvalidCast); #endif return new H245_RequestChannelClose_reason(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_RequestChannelCloseReject_cause[]={ {"unspecified",0} }; #endif // // RequestChannelCloseReject_cause // H245_RequestChannelCloseReject_cause::H245_RequestChannelCloseReject_cause(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_RequestChannelCloseReject_cause,1 #endif ) { } PBoolean H245_RequestChannelCloseReject_cause::CreateObject() { choice = (tag <= e_unspecified) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_RequestChannelCloseReject_cause::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RequestChannelCloseReject_cause::Class()), PInvalidCast); #endif return new H245_RequestChannelCloseReject_cause(*this); } // // ArrayOf_MultiplexEntryDescriptor // H245_ArrayOf_MultiplexEntryDescriptor::H245_ArrayOf_MultiplexEntryDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_MultiplexEntryDescriptor::CreateObject() const { return new H245_MultiplexEntryDescriptor; } H245_MultiplexEntryDescriptor & H245_ArrayOf_MultiplexEntryDescriptor::operator[](PINDEX i) const { return (H245_MultiplexEntryDescriptor &)array[i]; } PObject * H245_ArrayOf_MultiplexEntryDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_MultiplexEntryDescriptor::Class()), PInvalidCast); #endif return new H245_ArrayOf_MultiplexEntryDescriptor(*this); } // // ArrayOf_MultiplexElement // H245_ArrayOf_MultiplexElement::H245_ArrayOf_MultiplexElement(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_MultiplexElement::CreateObject() const { return new H245_MultiplexElement; } H245_MultiplexElement & H245_ArrayOf_MultiplexElement::operator[](PINDEX i) const { return (H245_MultiplexElement &)array[i]; } PObject * H245_ArrayOf_MultiplexElement::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_MultiplexElement::Class()), PInvalidCast); #endif return new H245_ArrayOf_MultiplexElement(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MultiplexElement_type[]={ {"logicalChannelNumber",0} ,{"subElementList",1} }; #endif // // MultiplexElement_type // H245_MultiplexElement_type::H245_MultiplexElement_type(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MultiplexElement_type,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultiplexElement_type::operator H245_ArrayOf_MultiplexElement &() const #else H245_MultiplexElement_type::operator H245_ArrayOf_MultiplexElement &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ArrayOf_MultiplexElement), PInvalidCast); #endif return *(H245_ArrayOf_MultiplexElement *)choice; } H245_MultiplexElement_type::operator const H245_ArrayOf_MultiplexElement &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ArrayOf_MultiplexElement), PInvalidCast); #endif return *(H245_ArrayOf_MultiplexElement *)choice; } PBoolean H245_MultiplexElement_type::CreateObject() { switch (tag) { case e_logicalChannelNumber : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 65535); return TRUE; case e_subElementList : choice = new H245_ArrayOf_MultiplexElement(); choice->SetConstraints(PASN_Object::FixedConstraint, 2, 255); return TRUE; } choice = NULL; return FALSE; } PObject * H245_MultiplexElement_type::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultiplexElement_type::Class()), PInvalidCast); #endif return new H245_MultiplexElement_type(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MultiplexElement_repeatCount[]={ {"finite",0} ,{"untilClosingFlag",1} }; #endif // // MultiplexElement_repeatCount // H245_MultiplexElement_repeatCount::H245_MultiplexElement_repeatCount(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MultiplexElement_repeatCount,2 #endif ) { } PBoolean H245_MultiplexElement_repeatCount::CreateObject() { switch (tag) { case e_finite : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 65535); return TRUE; case e_untilClosingFlag : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_MultiplexElement_repeatCount::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultiplexElement_repeatCount::Class()), PInvalidCast); #endif return new H245_MultiplexElement_repeatCount(*this); } // // ArrayOf_MultiplexTableEntryNumber // H245_ArrayOf_MultiplexTableEntryNumber::H245_ArrayOf_MultiplexTableEntryNumber(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_MultiplexTableEntryNumber::CreateObject() const { return new H245_MultiplexTableEntryNumber; } H245_MultiplexTableEntryNumber & H245_ArrayOf_MultiplexTableEntryNumber::operator[](PINDEX i) const { return (H245_MultiplexTableEntryNumber &)array[i]; } PObject * H245_ArrayOf_MultiplexTableEntryNumber::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_MultiplexTableEntryNumber::Class()), PInvalidCast); #endif return new H245_ArrayOf_MultiplexTableEntryNumber(*this); } // // ArrayOf_MultiplexEntryRejectionDescriptions // H245_ArrayOf_MultiplexEntryRejectionDescriptions::H245_ArrayOf_MultiplexEntryRejectionDescriptions(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_MultiplexEntryRejectionDescriptions::CreateObject() const { return new H245_MultiplexEntryRejectionDescriptions; } H245_MultiplexEntryRejectionDescriptions & H245_ArrayOf_MultiplexEntryRejectionDescriptions::operator[](PINDEX i) const { return (H245_MultiplexEntryRejectionDescriptions &)array[i]; } PObject * H245_ArrayOf_MultiplexEntryRejectionDescriptions::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_MultiplexEntryRejectionDescriptions::Class()), PInvalidCast); #endif return new H245_ArrayOf_MultiplexEntryRejectionDescriptions(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MultiplexEntryRejectionDescriptions_cause[]={ {"unspecifiedCause",0} ,{"descriptorTooComplex",1} }; #endif // // MultiplexEntryRejectionDescriptions_cause // H245_MultiplexEntryRejectionDescriptions_cause::H245_MultiplexEntryRejectionDescriptions_cause(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MultiplexEntryRejectionDescriptions_cause,2 #endif ) { } PBoolean H245_MultiplexEntryRejectionDescriptions_cause::CreateObject() { choice = (tag <= e_descriptorTooComplex) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_MultiplexEntryRejectionDescriptions_cause::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultiplexEntryRejectionDescriptions_cause::Class()), PInvalidCast); #endif return new H245_MultiplexEntryRejectionDescriptions_cause(*this); } // // ArrayOf_RequestMultiplexEntryRejectionDescriptions // H245_ArrayOf_RequestMultiplexEntryRejectionDescriptions::H245_ArrayOf_RequestMultiplexEntryRejectionDescriptions(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_RequestMultiplexEntryRejectionDescriptions::CreateObject() const { return new H245_RequestMultiplexEntryRejectionDescriptions; } H245_RequestMultiplexEntryRejectionDescriptions & H245_ArrayOf_RequestMultiplexEntryRejectionDescriptions::operator[](PINDEX i) const { return (H245_RequestMultiplexEntryRejectionDescriptions &)array[i]; } PObject * H245_ArrayOf_RequestMultiplexEntryRejectionDescriptions::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_RequestMultiplexEntryRejectionDescriptions::Class()), PInvalidCast); #endif return new H245_ArrayOf_RequestMultiplexEntryRejectionDescriptions(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_RequestMultiplexEntryRejectionDescriptions_cause[]={ {"unspecifiedCause",0} }; #endif // // RequestMultiplexEntryRejectionDescriptions_cause // H245_RequestMultiplexEntryRejectionDescriptions_cause::H245_RequestMultiplexEntryRejectionDescriptions_cause(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_RequestMultiplexEntryRejectionDescriptions_cause,1 #endif ) { } PBoolean H245_RequestMultiplexEntryRejectionDescriptions_cause::CreateObject() { choice = (tag <= e_unspecifiedCause) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_RequestMultiplexEntryRejectionDescriptions_cause::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RequestMultiplexEntryRejectionDescriptions_cause::Class()), PInvalidCast); #endif return new H245_RequestMultiplexEntryRejectionDescriptions_cause(*this); } // // ArrayOf_ModeDescription // H245_ArrayOf_ModeDescription::H245_ArrayOf_ModeDescription(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_ModeDescription::CreateObject() const { return new H245_ModeDescription; } H245_ModeDescription & H245_ArrayOf_ModeDescription::operator[](PINDEX i) const { return (H245_ModeDescription &)array[i]; } PObject * H245_ArrayOf_ModeDescription::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_ModeDescription::Class()), PInvalidCast); #endif return new H245_ArrayOf_ModeDescription(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_RequestModeAck_response[]={ {"willTransmitMostPreferredMode",0} ,{"willTransmitLessPreferredMode",1} }; #endif // // RequestModeAck_response // H245_RequestModeAck_response::H245_RequestModeAck_response(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_RequestModeAck_response,2 #endif ) { } PBoolean H245_RequestModeAck_response::CreateObject() { choice = (tag <= e_willTransmitLessPreferredMode) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_RequestModeAck_response::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RequestModeAck_response::Class()), PInvalidCast); #endif return new H245_RequestModeAck_response(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_RequestModeReject_cause[]={ {"modeUnavailable",0} ,{"multipointConstraint",1} ,{"requestDenied",2} }; #endif // // RequestModeReject_cause // H245_RequestModeReject_cause::H245_RequestModeReject_cause(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_RequestModeReject_cause,3 #endif ) { } PBoolean H245_RequestModeReject_cause::CreateObject() { choice = (tag <= e_requestDenied) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_RequestModeReject_cause::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RequestModeReject_cause::Class()), PInvalidCast); #endif return new H245_RequestModeReject_cause(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_H235Mode_mediaMode[]={ {"nonStandard",0} ,{"videoMode",1} ,{"audioMode",2} ,{"dataMode",3} }; #endif // // H235Mode_mediaMode // H245_H235Mode_mediaMode::H245_H235Mode_mediaMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_H235Mode_mediaMode,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H235Mode_mediaMode::operator H245_NonStandardParameter &() const #else H245_H235Mode_mediaMode::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_H235Mode_mediaMode::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H235Mode_mediaMode::operator H245_VideoMode &() const #else H245_H235Mode_mediaMode::operator H245_VideoMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VideoMode), PInvalidCast); #endif return *(H245_VideoMode *)choice; } H245_H235Mode_mediaMode::operator const H245_VideoMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VideoMode), PInvalidCast); #endif return *(H245_VideoMode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H235Mode_mediaMode::operator H245_AudioMode &() const #else H245_H235Mode_mediaMode::operator H245_AudioMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioMode), PInvalidCast); #endif return *(H245_AudioMode *)choice; } H245_H235Mode_mediaMode::operator const H245_AudioMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioMode), PInvalidCast); #endif return *(H245_AudioMode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H235Mode_mediaMode::operator H245_DataMode &() const #else H245_H235Mode_mediaMode::operator H245_DataMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataMode), PInvalidCast); #endif return *(H245_DataMode *)choice; } H245_H235Mode_mediaMode::operator const H245_DataMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataMode), PInvalidCast); #endif return *(H245_DataMode *)choice; } PBoolean H245_H235Mode_mediaMode::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_videoMode : choice = new H245_VideoMode(); return TRUE; case e_audioMode : choice = new H245_AudioMode(); return TRUE; case e_dataMode : choice = new H245_DataMode(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_H235Mode_mediaMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H235Mode_mediaMode::Class()), PInvalidCast); #endif return new H245_H235Mode_mediaMode(*this); } // // ArrayOf_RedundancyEncodingDTModeElement // H245_ArrayOf_RedundancyEncodingDTModeElement::H245_ArrayOf_RedundancyEncodingDTModeElement(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_RedundancyEncodingDTModeElement::CreateObject() const { return new H245_RedundancyEncodingDTModeElement; } H245_RedundancyEncodingDTModeElement & H245_ArrayOf_RedundancyEncodingDTModeElement::operator[](PINDEX i) const { return (H245_RedundancyEncodingDTModeElement &)array[i]; } PObject * H245_ArrayOf_RedundancyEncodingDTModeElement::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_RedundancyEncodingDTModeElement::Class()), PInvalidCast); #endif return new H245_ArrayOf_RedundancyEncodingDTModeElement(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_RedundancyEncodingDTModeElement_type[]={ {"nonStandard",0} ,{"videoMode",1} ,{"audioMode",2} ,{"dataMode",3} ,{"encryptionMode",4} ,{"h235Mode",5} ,{"fecMode",6} }; #endif // // RedundancyEncodingDTModeElement_type // H245_RedundancyEncodingDTModeElement_type::H245_RedundancyEncodingDTModeElement_type(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 6, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_RedundancyEncodingDTModeElement_type,7 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RedundancyEncodingDTModeElement_type::operator H245_NonStandardParameter &() const #else H245_RedundancyEncodingDTModeElement_type::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_RedundancyEncodingDTModeElement_type::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RedundancyEncodingDTModeElement_type::operator H245_VideoMode &() const #else H245_RedundancyEncodingDTModeElement_type::operator H245_VideoMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VideoMode), PInvalidCast); #endif return *(H245_VideoMode *)choice; } H245_RedundancyEncodingDTModeElement_type::operator const H245_VideoMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VideoMode), PInvalidCast); #endif return *(H245_VideoMode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RedundancyEncodingDTModeElement_type::operator H245_AudioMode &() const #else H245_RedundancyEncodingDTModeElement_type::operator H245_AudioMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioMode), PInvalidCast); #endif return *(H245_AudioMode *)choice; } H245_RedundancyEncodingDTModeElement_type::operator const H245_AudioMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioMode), PInvalidCast); #endif return *(H245_AudioMode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RedundancyEncodingDTModeElement_type::operator H245_DataMode &() const #else H245_RedundancyEncodingDTModeElement_type::operator H245_DataMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataMode), PInvalidCast); #endif return *(H245_DataMode *)choice; } H245_RedundancyEncodingDTModeElement_type::operator const H245_DataMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataMode), PInvalidCast); #endif return *(H245_DataMode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RedundancyEncodingDTModeElement_type::operator H245_EncryptionMode &() const #else H245_RedundancyEncodingDTModeElement_type::operator H245_EncryptionMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_EncryptionMode), PInvalidCast); #endif return *(H245_EncryptionMode *)choice; } H245_RedundancyEncodingDTModeElement_type::operator const H245_EncryptionMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_EncryptionMode), PInvalidCast); #endif return *(H245_EncryptionMode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RedundancyEncodingDTModeElement_type::operator H245_H235Mode &() const #else H245_RedundancyEncodingDTModeElement_type::operator H245_H235Mode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H235Mode), PInvalidCast); #endif return *(H245_H235Mode *)choice; } H245_RedundancyEncodingDTModeElement_type::operator const H245_H235Mode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H235Mode), PInvalidCast); #endif return *(H245_H235Mode *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RedundancyEncodingDTModeElement_type::operator H245_FECMode &() const #else H245_RedundancyEncodingDTModeElement_type::operator H245_FECMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FECMode), PInvalidCast); #endif return *(H245_FECMode *)choice; } H245_RedundancyEncodingDTModeElement_type::operator const H245_FECMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FECMode), PInvalidCast); #endif return *(H245_FECMode *)choice; } PBoolean H245_RedundancyEncodingDTModeElement_type::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_videoMode : choice = new H245_VideoMode(); return TRUE; case e_audioMode : choice = new H245_AudioMode(); return TRUE; case e_dataMode : choice = new H245_DataMode(); return TRUE; case e_encryptionMode : choice = new H245_EncryptionMode(); return TRUE; case e_h235Mode : choice = new H245_H235Mode(); return TRUE; case e_fecMode : choice = new H245_FECMode(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_RedundancyEncodingDTModeElement_type::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RedundancyEncodingDTModeElement_type::Class()), PInvalidCast); #endif return new H245_RedundancyEncodingDTModeElement_type(*this); } // // ArrayOf_MultiplePayloadStreamElementMode // H245_ArrayOf_MultiplePayloadStreamElementMode::H245_ArrayOf_MultiplePayloadStreamElementMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_MultiplePayloadStreamElementMode::CreateObject() const { return new H245_MultiplePayloadStreamElementMode; } H245_MultiplePayloadStreamElementMode & H245_ArrayOf_MultiplePayloadStreamElementMode::operator[](PINDEX i) const { return (H245_MultiplePayloadStreamElementMode &)array[i]; } PObject * H245_ArrayOf_MultiplePayloadStreamElementMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_MultiplePayloadStreamElementMode::Class()), PInvalidCast); #endif return new H245_ArrayOf_MultiplePayloadStreamElementMode(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_FECMode_rfc2733Format[]={ {"rfc2733rfc2198",0} ,{"rfc2733sameport",1} ,{"rfc2733diffport",2} }; #endif // // FECMode_rfc2733Format // H245_FECMode_rfc2733Format::H245_FECMode_rfc2733Format(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_FECMode_rfc2733Format,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_FECMode_rfc2733Format::operator H245_MaxRedundancy &() const #else H245_FECMode_rfc2733Format::operator H245_MaxRedundancy &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MaxRedundancy), PInvalidCast); #endif return *(H245_MaxRedundancy *)choice; } H245_FECMode_rfc2733Format::operator const H245_MaxRedundancy &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MaxRedundancy), PInvalidCast); #endif return *(H245_MaxRedundancy *)choice; } PBoolean H245_FECMode_rfc2733Format::CreateObject() { switch (tag) { case e_rfc2733rfc2198 : case e_rfc2733sameport : case e_rfc2733diffport : choice = new H245_MaxRedundancy(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_FECMode_rfc2733Format::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_FECMode_rfc2733Format::Class()), PInvalidCast); #endif return new H245_FECMode_rfc2733Format(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_H223ModeParameters_adaptationLayerType[]={ {"nonStandard",0} ,{"al1Framed",1} ,{"al1NotFramed",2} ,{"al2WithoutSequenceNumbers",3} ,{"al2WithSequenceNumbers",4} ,{"al3",5} ,{"al1M",6} ,{"al2M",7} ,{"al3M",8} }; #endif // // H223ModeParameters_adaptationLayerType // H245_H223ModeParameters_adaptationLayerType::H245_H223ModeParameters_adaptationLayerType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 6, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_H223ModeParameters_adaptationLayerType,9 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H223ModeParameters_adaptationLayerType::operator H245_NonStandardParameter &() const #else H245_H223ModeParameters_adaptationLayerType::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_H223ModeParameters_adaptationLayerType::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H223ModeParameters_adaptationLayerType::operator H245_H223ModeParameters_adaptationLayerType_al3 &() const #else H245_H223ModeParameters_adaptationLayerType::operator H245_H223ModeParameters_adaptationLayerType_al3 &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223ModeParameters_adaptationLayerType_al3), PInvalidCast); #endif return *(H245_H223ModeParameters_adaptationLayerType_al3 *)choice; } H245_H223ModeParameters_adaptationLayerType::operator const H245_H223ModeParameters_adaptationLayerType_al3 &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223ModeParameters_adaptationLayerType_al3), PInvalidCast); #endif return *(H245_H223ModeParameters_adaptationLayerType_al3 *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H223ModeParameters_adaptationLayerType::operator H245_H223AL1MParameters &() const #else H245_H223ModeParameters_adaptationLayerType::operator H245_H223AL1MParameters &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223AL1MParameters), PInvalidCast); #endif return *(H245_H223AL1MParameters *)choice; } H245_H223ModeParameters_adaptationLayerType::operator const H245_H223AL1MParameters &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223AL1MParameters), PInvalidCast); #endif return *(H245_H223AL1MParameters *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H223ModeParameters_adaptationLayerType::operator H245_H223AL2MParameters &() const #else H245_H223ModeParameters_adaptationLayerType::operator H245_H223AL2MParameters &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223AL2MParameters), PInvalidCast); #endif return *(H245_H223AL2MParameters *)choice; } H245_H223ModeParameters_adaptationLayerType::operator const H245_H223AL2MParameters &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223AL2MParameters), PInvalidCast); #endif return *(H245_H223AL2MParameters *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_H223ModeParameters_adaptationLayerType::operator H245_H223AL3MParameters &() const #else H245_H223ModeParameters_adaptationLayerType::operator H245_H223AL3MParameters &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223AL3MParameters), PInvalidCast); #endif return *(H245_H223AL3MParameters *)choice; } H245_H223ModeParameters_adaptationLayerType::operator const H245_H223AL3MParameters &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223AL3MParameters), PInvalidCast); #endif return *(H245_H223AL3MParameters *)choice; } PBoolean H245_H223ModeParameters_adaptationLayerType::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_al1Framed : case e_al1NotFramed : case e_al2WithoutSequenceNumbers : case e_al2WithSequenceNumbers : choice = new PASN_Null(); return TRUE; case e_al3 : choice = new H245_H223ModeParameters_adaptationLayerType_al3(); return TRUE; case e_al1M : choice = new H245_H223AL1MParameters(); return TRUE; case e_al2M : choice = new H245_H223AL2MParameters(); return TRUE; case e_al3M : choice = new H245_H223AL3MParameters(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_H223ModeParameters_adaptationLayerType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223ModeParameters_adaptationLayerType::Class()), PInvalidCast); #endif return new H245_H223ModeParameters_adaptationLayerType(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_RedundancyEncodingMode_secondaryEncoding[]={ {"nonStandard",0} ,{"audioData",1} }; #endif // // RedundancyEncodingMode_secondaryEncoding // H245_RedundancyEncodingMode_secondaryEncoding::H245_RedundancyEncodingMode_secondaryEncoding(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_RedundancyEncodingMode_secondaryEncoding,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RedundancyEncodingMode_secondaryEncoding::operator H245_NonStandardParameter &() const #else H245_RedundancyEncodingMode_secondaryEncoding::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_RedundancyEncodingMode_secondaryEncoding::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_RedundancyEncodingMode_secondaryEncoding::operator H245_AudioMode &() const #else H245_RedundancyEncodingMode_secondaryEncoding::operator H245_AudioMode &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioMode), PInvalidCast); #endif return *(H245_AudioMode *)choice; } H245_RedundancyEncodingMode_secondaryEncoding::operator const H245_AudioMode &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioMode), PInvalidCast); #endif return *(H245_AudioMode *)choice; } PBoolean H245_RedundancyEncodingMode_secondaryEncoding::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_audioData : choice = new H245_AudioMode(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_RedundancyEncodingMode_secondaryEncoding::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RedundancyEncodingMode_secondaryEncoding::Class()), PInvalidCast); #endif return new H245_RedundancyEncodingMode_secondaryEncoding(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_H261VideoMode_resolution[]={ {"qcif",0} ,{"cif",1} }; #endif // // H261VideoMode_resolution // H245_H261VideoMode_resolution::H245_H261VideoMode_resolution(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_H261VideoMode_resolution,2 #endif ) { } PBoolean H245_H261VideoMode_resolution::CreateObject() { choice = (tag <= e_cif) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_H261VideoMode_resolution::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H261VideoMode_resolution::Class()), PInvalidCast); #endif return new H245_H261VideoMode_resolution(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_H262VideoMode_profileAndLevel[]={ {"profileAndLevel_SPatML",0} ,{"profileAndLevel_MPatLL",1} ,{"profileAndLevel_MPatML",2} ,{"profileAndLevel_MPatH_14",3} ,{"profileAndLevel_MPatHL",4} ,{"profileAndLevel_SNRatLL",5} ,{"profileAndLevel_SNRatML",6} ,{"profileAndLevel_SpatialatH_14",7} ,{"profileAndLevel_HPatML",8} ,{"profileAndLevel_HPatH_14",9} ,{"profileAndLevel_HPatHL",10} }; #endif // // H262VideoMode_profileAndLevel // H245_H262VideoMode_profileAndLevel::H245_H262VideoMode_profileAndLevel(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 11, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_H262VideoMode_profileAndLevel,11 #endif ) { } PBoolean H245_H262VideoMode_profileAndLevel::CreateObject() { choice = (tag <= e_profileAndLevel_HPatHL) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_H262VideoMode_profileAndLevel::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H262VideoMode_profileAndLevel::Class()), PInvalidCast); #endif return new H245_H262VideoMode_profileAndLevel(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_H263VideoMode_resolution[]={ {"sqcif",0} ,{"qcif",1} ,{"cif",2} ,{"cif4",3} ,{"cif16",4} ,{"custom",5} }; #endif // // H263VideoMode_resolution // H245_H263VideoMode_resolution::H245_H263VideoMode_resolution(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 5, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_H263VideoMode_resolution,6 #endif ) { } PBoolean H245_H263VideoMode_resolution::CreateObject() { choice = (tag <= e_custom) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_H263VideoMode_resolution::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H263VideoMode_resolution::Class()), PInvalidCast); #endif return new H245_H263VideoMode_resolution(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_AudioMode_g7231[]={ {"noSilenceSuppressionLowRate",0} ,{"noSilenceSuppressionHighRate",1} ,{"silenceSuppressionLowRate",2} ,{"silenceSuppressionHighRate",3} }; #endif // // AudioMode_g7231 // H245_AudioMode_g7231::H245_AudioMode_g7231(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_AudioMode_g7231,4 #endif ) { } PBoolean H245_AudioMode_g7231::CreateObject() { choice = (tag <= e_silenceSuppressionHighRate) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_AudioMode_g7231::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_AudioMode_g7231::Class()), PInvalidCast); #endif return new H245_AudioMode_g7231(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_IS11172AudioMode_audioLayer[]={ {"audioLayer1",0} ,{"audioLayer2",1} ,{"audioLayer3",2} }; #endif // // IS11172AudioMode_audioLayer // H245_IS11172AudioMode_audioLayer::H245_IS11172AudioMode_audioLayer(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_IS11172AudioMode_audioLayer,3 #endif ) { } PBoolean H245_IS11172AudioMode_audioLayer::CreateObject() { choice = (tag <= e_audioLayer3) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_IS11172AudioMode_audioLayer::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_IS11172AudioMode_audioLayer::Class()), PInvalidCast); #endif return new H245_IS11172AudioMode_audioLayer(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_IS11172AudioMode_audioSampling[]={ {"audioSampling32k",0} ,{"audioSampling44k1",1} ,{"audioSampling48k",2} }; #endif // // IS11172AudioMode_audioSampling // H245_IS11172AudioMode_audioSampling::H245_IS11172AudioMode_audioSampling(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_IS11172AudioMode_audioSampling,3 #endif ) { } PBoolean H245_IS11172AudioMode_audioSampling::CreateObject() { choice = (tag <= e_audioSampling48k) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_IS11172AudioMode_audioSampling::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_IS11172AudioMode_audioSampling::Class()), PInvalidCast); #endif return new H245_IS11172AudioMode_audioSampling(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_IS11172AudioMode_multichannelType[]={ {"singleChannel",0} ,{"twoChannelStereo",1} ,{"twoChannelDual",2} }; #endif // // IS11172AudioMode_multichannelType // H245_IS11172AudioMode_multichannelType::H245_IS11172AudioMode_multichannelType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_IS11172AudioMode_multichannelType,3 #endif ) { } PBoolean H245_IS11172AudioMode_multichannelType::CreateObject() { choice = (tag <= e_twoChannelDual) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_IS11172AudioMode_multichannelType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_IS11172AudioMode_multichannelType::Class()), PInvalidCast); #endif return new H245_IS11172AudioMode_multichannelType(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_IS13818AudioMode_audioLayer[]={ {"audioLayer1",0} ,{"audioLayer2",1} ,{"audioLayer3",2} }; #endif // // IS13818AudioMode_audioLayer // H245_IS13818AudioMode_audioLayer::H245_IS13818AudioMode_audioLayer(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_IS13818AudioMode_audioLayer,3 #endif ) { } PBoolean H245_IS13818AudioMode_audioLayer::CreateObject() { choice = (tag <= e_audioLayer3) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_IS13818AudioMode_audioLayer::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_IS13818AudioMode_audioLayer::Class()), PInvalidCast); #endif return new H245_IS13818AudioMode_audioLayer(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_IS13818AudioMode_audioSampling[]={ {"audioSampling16k",0} ,{"audioSampling22k05",1} ,{"audioSampling24k",2} ,{"audioSampling32k",3} ,{"audioSampling44k1",4} ,{"audioSampling48k",5} }; #endif // // IS13818AudioMode_audioSampling // H245_IS13818AudioMode_audioSampling::H245_IS13818AudioMode_audioSampling(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 6, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_IS13818AudioMode_audioSampling,6 #endif ) { } PBoolean H245_IS13818AudioMode_audioSampling::CreateObject() { choice = (tag <= e_audioSampling48k) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_IS13818AudioMode_audioSampling::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_IS13818AudioMode_audioSampling::Class()), PInvalidCast); #endif return new H245_IS13818AudioMode_audioSampling(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_IS13818AudioMode_multichannelType[]={ {"singleChannel",0} ,{"twoChannelStereo",1} ,{"twoChannelDual",2} ,{"threeChannels2_1",3} ,{"threeChannels3_0",4} ,{"fourChannels2_0_2_0",5} ,{"fourChannels2_2",6} ,{"fourChannels3_1",7} ,{"fiveChannels3_0_2_0",8} ,{"fiveChannels3_2",9} }; #endif // // IS13818AudioMode_multichannelType // H245_IS13818AudioMode_multichannelType::H245_IS13818AudioMode_multichannelType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 10, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_IS13818AudioMode_multichannelType,10 #endif ) { } PBoolean H245_IS13818AudioMode_multichannelType::CreateObject() { choice = (tag <= e_fiveChannels3_2) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_IS13818AudioMode_multichannelType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_IS13818AudioMode_multichannelType::Class()), PInvalidCast); #endif return new H245_IS13818AudioMode_multichannelType(*this); } // // G7231AnnexCMode_g723AnnexCAudioMode // H245_G7231AnnexCMode_g723AnnexCAudioMode::H245_G7231AnnexCMode_g723AnnexCAudioMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_highRateMode0.SetConstraints(PASN_Object::FixedConstraint, 27, 78); m_highRateMode1.SetConstraints(PASN_Object::FixedConstraint, 27, 78); m_lowRateMode0.SetConstraints(PASN_Object::FixedConstraint, 23, 66); m_lowRateMode1.SetConstraints(PASN_Object::FixedConstraint, 23, 66); m_sidMode0.SetConstraints(PASN_Object::FixedConstraint, 6, 17); m_sidMode1.SetConstraints(PASN_Object::FixedConstraint, 6, 17); } #ifndef PASN_NOPRINTON void H245_G7231AnnexCMode_g723AnnexCAudioMode::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "highRateMode0 = " << setprecision(indent) << m_highRateMode0 << '\n'; strm << setw(indent+16) << "highRateMode1 = " << setprecision(indent) << m_highRateMode1 << '\n'; strm << setw(indent+15) << "lowRateMode0 = " << setprecision(indent) << m_lowRateMode0 << '\n'; strm << setw(indent+15) << "lowRateMode1 = " << setprecision(indent) << m_lowRateMode1 << '\n'; strm << setw(indent+11) << "sidMode0 = " << setprecision(indent) << m_sidMode0 << '\n'; strm << setw(indent+11) << "sidMode1 = " << setprecision(indent) << m_sidMode1 << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_G7231AnnexCMode_g723AnnexCAudioMode::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_G7231AnnexCMode_g723AnnexCAudioMode), PInvalidCast); #endif const H245_G7231AnnexCMode_g723AnnexCAudioMode & other = (const H245_G7231AnnexCMode_g723AnnexCAudioMode &)obj; Comparison result; if ((result = m_highRateMode0.Compare(other.m_highRateMode0)) != EqualTo) return result; if ((result = m_highRateMode1.Compare(other.m_highRateMode1)) != EqualTo) return result; if ((result = m_lowRateMode0.Compare(other.m_lowRateMode0)) != EqualTo) return result; if ((result = m_lowRateMode1.Compare(other.m_lowRateMode1)) != EqualTo) return result; if ((result = m_sidMode0.Compare(other.m_sidMode0)) != EqualTo) return result; if ((result = m_sidMode1.Compare(other.m_sidMode1)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_G7231AnnexCMode_g723AnnexCAudioMode::GetDataLength() const { PINDEX length = 0; length += m_highRateMode0.GetObjectLength(); length += m_highRateMode1.GetObjectLength(); length += m_lowRateMode0.GetObjectLength(); length += m_lowRateMode1.GetObjectLength(); length += m_sidMode0.GetObjectLength(); length += m_sidMode1.GetObjectLength(); return length; } PBoolean H245_G7231AnnexCMode_g723AnnexCAudioMode::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_highRateMode0.Decode(strm)) return FALSE; if (!m_highRateMode1.Decode(strm)) return FALSE; if (!m_lowRateMode0.Decode(strm)) return FALSE; if (!m_lowRateMode1.Decode(strm)) return FALSE; if (!m_sidMode0.Decode(strm)) return FALSE; if (!m_sidMode1.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_G7231AnnexCMode_g723AnnexCAudioMode::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_highRateMode0.Encode(strm); m_highRateMode1.Encode(strm); m_lowRateMode0.Encode(strm); m_lowRateMode1.Encode(strm); m_sidMode0.Encode(strm); m_sidMode1.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_G7231AnnexCMode_g723AnnexCAudioMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_G7231AnnexCMode_g723AnnexCAudioMode::Class()), PInvalidCast); #endif return new H245_G7231AnnexCMode_g723AnnexCAudioMode(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_DataMode_application[]={ {"nonStandard",0} ,{"t120",1} ,{"dsm_cc",2} ,{"userData",3} ,{"t84",4} ,{"t434",5} ,{"h224",6} ,{"nlpid",7} ,{"dsvdControl",8} ,{"h222DataPartitioning",9} ,{"t30fax",10} ,{"t140",11} ,{"t38fax",12} ,{"genericDataMode",13} }; #endif // // DataMode_application // H245_DataMode_application::H245_DataMode_application(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 10, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_DataMode_application,14 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataMode_application::operator H245_NonStandardParameter &() const #else H245_DataMode_application::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_DataMode_application::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataMode_application::operator H245_DataProtocolCapability &() const #else H245_DataMode_application::operator H245_DataProtocolCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataProtocolCapability), PInvalidCast); #endif return *(H245_DataProtocolCapability *)choice; } H245_DataMode_application::operator const H245_DataProtocolCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataProtocolCapability), PInvalidCast); #endif return *(H245_DataProtocolCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataMode_application::operator H245_DataMode_application_nlpid &() const #else H245_DataMode_application::operator H245_DataMode_application_nlpid &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataMode_application_nlpid), PInvalidCast); #endif return *(H245_DataMode_application_nlpid *)choice; } H245_DataMode_application::operator const H245_DataMode_application_nlpid &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataMode_application_nlpid), PInvalidCast); #endif return *(H245_DataMode_application_nlpid *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataMode_application::operator H245_DataMode_application_t38fax &() const #else H245_DataMode_application::operator H245_DataMode_application_t38fax &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataMode_application_t38fax), PInvalidCast); #endif return *(H245_DataMode_application_t38fax *)choice; } H245_DataMode_application::operator const H245_DataMode_application_t38fax &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataMode_application_t38fax), PInvalidCast); #endif return *(H245_DataMode_application_t38fax *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DataMode_application::operator H245_GenericCapability &() const #else H245_DataMode_application::operator H245_GenericCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericCapability), PInvalidCast); #endif return *(H245_GenericCapability *)choice; } H245_DataMode_application::operator const H245_GenericCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_GenericCapability), PInvalidCast); #endif return *(H245_GenericCapability *)choice; } PBoolean H245_DataMode_application::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_t120 : case e_dsm_cc : case e_userData : case e_t84 : case e_t434 : case e_h224 : case e_h222DataPartitioning : case e_t30fax : case e_t140 : choice = new H245_DataProtocolCapability(); return TRUE; case e_nlpid : choice = new H245_DataMode_application_nlpid(); return TRUE; case e_dsvdControl : choice = new PASN_Null(); return TRUE; case e_t38fax : choice = new H245_DataMode_application_t38fax(); return TRUE; case e_genericDataMode : choice = new H245_GenericCapability(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_DataMode_application::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DataMode_application::Class()), PInvalidCast); #endif return new H245_DataMode_application(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MaintenanceLoopRequest_type[]={ {"systemLoop",0} ,{"mediaLoop",1} ,{"logicalChannelLoop",2} }; #endif // // MaintenanceLoopRequest_type // H245_MaintenanceLoopRequest_type::H245_MaintenanceLoopRequest_type(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MaintenanceLoopRequest_type,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MaintenanceLoopRequest_type::operator H245_LogicalChannelNumber &() const #else H245_MaintenanceLoopRequest_type::operator H245_LogicalChannelNumber &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelNumber), PInvalidCast); #endif return *(H245_LogicalChannelNumber *)choice; } H245_MaintenanceLoopRequest_type::operator const H245_LogicalChannelNumber &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelNumber), PInvalidCast); #endif return *(H245_LogicalChannelNumber *)choice; } PBoolean H245_MaintenanceLoopRequest_type::CreateObject() { switch (tag) { case e_systemLoop : choice = new PASN_Null(); return TRUE; case e_mediaLoop : case e_logicalChannelLoop : choice = new H245_LogicalChannelNumber(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_MaintenanceLoopRequest_type::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MaintenanceLoopRequest_type::Class()), PInvalidCast); #endif return new H245_MaintenanceLoopRequest_type(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MaintenanceLoopAck_type[]={ {"systemLoop",0} ,{"mediaLoop",1} ,{"logicalChannelLoop",2} }; #endif // // MaintenanceLoopAck_type // H245_MaintenanceLoopAck_type::H245_MaintenanceLoopAck_type(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MaintenanceLoopAck_type,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MaintenanceLoopAck_type::operator H245_LogicalChannelNumber &() const #else H245_MaintenanceLoopAck_type::operator H245_LogicalChannelNumber &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelNumber), PInvalidCast); #endif return *(H245_LogicalChannelNumber *)choice; } H245_MaintenanceLoopAck_type::operator const H245_LogicalChannelNumber &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelNumber), PInvalidCast); #endif return *(H245_LogicalChannelNumber *)choice; } PBoolean H245_MaintenanceLoopAck_type::CreateObject() { switch (tag) { case e_systemLoop : choice = new PASN_Null(); return TRUE; case e_mediaLoop : case e_logicalChannelLoop : choice = new H245_LogicalChannelNumber(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_MaintenanceLoopAck_type::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MaintenanceLoopAck_type::Class()), PInvalidCast); #endif return new H245_MaintenanceLoopAck_type(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MaintenanceLoopReject_type[]={ {"systemLoop",0} ,{"mediaLoop",1} ,{"logicalChannelLoop",2} }; #endif // // MaintenanceLoopReject_type // H245_MaintenanceLoopReject_type::H245_MaintenanceLoopReject_type(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MaintenanceLoopReject_type,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MaintenanceLoopReject_type::operator H245_LogicalChannelNumber &() const #else H245_MaintenanceLoopReject_type::operator H245_LogicalChannelNumber &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelNumber), PInvalidCast); #endif return *(H245_LogicalChannelNumber *)choice; } H245_MaintenanceLoopReject_type::operator const H245_LogicalChannelNumber &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelNumber), PInvalidCast); #endif return *(H245_LogicalChannelNumber *)choice; } PBoolean H245_MaintenanceLoopReject_type::CreateObject() { switch (tag) { case e_systemLoop : choice = new PASN_Null(); return TRUE; case e_mediaLoop : case e_logicalChannelLoop : choice = new H245_LogicalChannelNumber(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_MaintenanceLoopReject_type::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MaintenanceLoopReject_type::Class()), PInvalidCast); #endif return new H245_MaintenanceLoopReject_type(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MaintenanceLoopReject_cause[]={ {"canNotPerformLoop",0} }; #endif // // MaintenanceLoopReject_cause // H245_MaintenanceLoopReject_cause::H245_MaintenanceLoopReject_cause(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MaintenanceLoopReject_cause,1 #endif ) { } PBoolean H245_MaintenanceLoopReject_cause::CreateObject() { choice = (tag <= e_canNotPerformLoop) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_MaintenanceLoopReject_cause::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MaintenanceLoopReject_cause::Class()), PInvalidCast); #endif return new H245_MaintenanceLoopReject_cause(*this); } // // ArrayOf_CommunicationModeTableEntry // H245_ArrayOf_CommunicationModeTableEntry::H245_ArrayOf_CommunicationModeTableEntry(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_CommunicationModeTableEntry::CreateObject() const { return new H245_CommunicationModeTableEntry; } H245_CommunicationModeTableEntry & H245_ArrayOf_CommunicationModeTableEntry::operator[](PINDEX i) const { return (H245_CommunicationModeTableEntry &)array[i]; } PObject * H245_ArrayOf_CommunicationModeTableEntry::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_CommunicationModeTableEntry::Class()), PInvalidCast); #endif return new H245_ArrayOf_CommunicationModeTableEntry(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_CommunicationModeTableEntry_dataType[]={ {"videoData",0} ,{"audioData",1} ,{"data",2} }; #endif // // CommunicationModeTableEntry_dataType // H245_CommunicationModeTableEntry_dataType::H245_CommunicationModeTableEntry_dataType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_CommunicationModeTableEntry_dataType,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_CommunicationModeTableEntry_dataType::operator H245_VideoCapability &() const #else H245_CommunicationModeTableEntry_dataType::operator H245_VideoCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VideoCapability), PInvalidCast); #endif return *(H245_VideoCapability *)choice; } H245_CommunicationModeTableEntry_dataType::operator const H245_VideoCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VideoCapability), PInvalidCast); #endif return *(H245_VideoCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_CommunicationModeTableEntry_dataType::operator H245_AudioCapability &() const #else H245_CommunicationModeTableEntry_dataType::operator H245_AudioCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioCapability), PInvalidCast); #endif return *(H245_AudioCapability *)choice; } H245_CommunicationModeTableEntry_dataType::operator const H245_AudioCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_AudioCapability), PInvalidCast); #endif return *(H245_AudioCapability *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_CommunicationModeTableEntry_dataType::operator H245_DataApplicationCapability &() const #else H245_CommunicationModeTableEntry_dataType::operator H245_DataApplicationCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataApplicationCapability), PInvalidCast); #endif return *(H245_DataApplicationCapability *)choice; } H245_CommunicationModeTableEntry_dataType::operator const H245_DataApplicationCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DataApplicationCapability), PInvalidCast); #endif return *(H245_DataApplicationCapability *)choice; } PBoolean H245_CommunicationModeTableEntry_dataType::CreateObject() { switch (tag) { case e_videoData : choice = new H245_VideoCapability(); return TRUE; case e_audioData : choice = new H245_AudioCapability(); return TRUE; case e_data : choice = new H245_DataApplicationCapability(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_CommunicationModeTableEntry_dataType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CommunicationModeTableEntry_dataType::Class()), PInvalidCast); #endif return new H245_CommunicationModeTableEntry_dataType(*this); } // // ArrayOf_TerminalLabel // H245_ArrayOf_TerminalLabel::H245_ArrayOf_TerminalLabel(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_TerminalLabel::CreateObject() const { return new H245_TerminalLabel; } H245_TerminalLabel & H245_ArrayOf_TerminalLabel::operator[](PINDEX i) const { return (H245_TerminalLabel &)array[i]; } PObject * H245_ArrayOf_TerminalLabel::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_TerminalLabel::Class()), PInvalidCast); #endif return new H245_ArrayOf_TerminalLabel(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_ConferenceResponse_makeMeChairResponse[]={ {"grantedChairToken",0} ,{"deniedChairToken",1} }; #endif // // ConferenceResponse_makeMeChairResponse // H245_ConferenceResponse_makeMeChairResponse::H245_ConferenceResponse_makeMeChairResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_ConferenceResponse_makeMeChairResponse,2 #endif ) { } PBoolean H245_ConferenceResponse_makeMeChairResponse::CreateObject() { choice = (tag <= e_deniedChairToken) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_ConferenceResponse_makeMeChairResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ConferenceResponse_makeMeChairResponse::Class()), PInvalidCast); #endif return new H245_ConferenceResponse_makeMeChairResponse(*this); } // // ConferenceResponse_extensionAddressResponse // H245_ConferenceResponse_extensionAddressResponse::H245_ConferenceResponse_extensionAddressResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_ConferenceResponse_extensionAddressResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+19) << "extensionAddress = " << setprecision(indent) << m_extensionAddress << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_ConferenceResponse_extensionAddressResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_ConferenceResponse_extensionAddressResponse), PInvalidCast); #endif const H245_ConferenceResponse_extensionAddressResponse & other = (const H245_ConferenceResponse_extensionAddressResponse &)obj; Comparison result; if ((result = m_extensionAddress.Compare(other.m_extensionAddress)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_ConferenceResponse_extensionAddressResponse::GetDataLength() const { PINDEX length = 0; length += m_extensionAddress.GetObjectLength(); return length; } PBoolean H245_ConferenceResponse_extensionAddressResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_extensionAddress.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_ConferenceResponse_extensionAddressResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_extensionAddress.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_ConferenceResponse_extensionAddressResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ConferenceResponse_extensionAddressResponse::Class()), PInvalidCast); #endif return new H245_ConferenceResponse_extensionAddressResponse(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_ConferenceResponse_broadcastMyLogicalChannelResponse[]={ {"grantedBroadcastMyLogicalChannel",0} ,{"deniedBroadcastMyLogicalChannel",1} }; #endif // // ConferenceResponse_broadcastMyLogicalChannelResponse // H245_ConferenceResponse_broadcastMyLogicalChannelResponse::H245_ConferenceResponse_broadcastMyLogicalChannelResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_ConferenceResponse_broadcastMyLogicalChannelResponse,2 #endif ) { } PBoolean H245_ConferenceResponse_broadcastMyLogicalChannelResponse::CreateObject() { choice = (tag <= e_deniedBroadcastMyLogicalChannel) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_ConferenceResponse_broadcastMyLogicalChannelResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ConferenceResponse_broadcastMyLogicalChannelResponse::Class()), PInvalidCast); #endif return new H245_ConferenceResponse_broadcastMyLogicalChannelResponse(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_ConferenceResponse_makeTerminalBroadcasterResponse[]={ {"grantedMakeTerminalBroadcaster",0} ,{"deniedMakeTerminalBroadcaster",1} }; #endif // // ConferenceResponse_makeTerminalBroadcasterResponse // H245_ConferenceResponse_makeTerminalBroadcasterResponse::H245_ConferenceResponse_makeTerminalBroadcasterResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_ConferenceResponse_makeTerminalBroadcasterResponse,2 #endif ) { } PBoolean H245_ConferenceResponse_makeTerminalBroadcasterResponse::CreateObject() { choice = (tag <= e_deniedMakeTerminalBroadcaster) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_ConferenceResponse_makeTerminalBroadcasterResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ConferenceResponse_makeTerminalBroadcasterResponse::Class()), PInvalidCast); #endif return new H245_ConferenceResponse_makeTerminalBroadcasterResponse(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_ConferenceResponse_sendThisSourceResponse[]={ {"grantedSendThisSource",0} ,{"deniedSendThisSource",1} }; #endif // // ConferenceResponse_sendThisSourceResponse // H245_ConferenceResponse_sendThisSourceResponse::H245_ConferenceResponse_sendThisSourceResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_ConferenceResponse_sendThisSourceResponse,2 #endif ) { } PBoolean H245_ConferenceResponse_sendThisSourceResponse::CreateObject() { choice = (tag <= e_deniedSendThisSource) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_ConferenceResponse_sendThisSourceResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ConferenceResponse_sendThisSourceResponse::Class()), PInvalidCast); #endif return new H245_ConferenceResponse_sendThisSourceResponse(*this); } // // ArrayOf_TerminalInformation // H245_ArrayOf_TerminalInformation::H245_ArrayOf_TerminalInformation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_TerminalInformation::CreateObject() const { return new H245_TerminalInformation; } H245_TerminalInformation & H245_ArrayOf_TerminalInformation::operator[](PINDEX i) const { return (H245_TerminalInformation &)array[i]; } PObject * H245_ArrayOf_TerminalInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_TerminalInformation::Class()), PInvalidCast); #endif return new H245_ArrayOf_TerminalInformation(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_RemoteMCResponse_reject[]={ {"unspecified",0} ,{"functionNotSupported",1} }; #endif // // RemoteMCResponse_reject // H245_RemoteMCResponse_reject::H245_RemoteMCResponse_reject(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_RemoteMCResponse_reject,2 #endif ) { } PBoolean H245_RemoteMCResponse_reject::CreateObject() { choice = (tag <= e_functionNotSupported) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_RemoteMCResponse_reject::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RemoteMCResponse_reject::Class()), PInvalidCast); #endif return new H245_RemoteMCResponse_reject(*this); } // // MultilinkRequest_callInformation // H245_MultilinkRequest_callInformation::H245_MultilinkRequest_callInformation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_maxNumberOfAdditionalConnections.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } #ifndef PASN_NOPRINTON void H245_MultilinkRequest_callInformation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+35) << "maxNumberOfAdditionalConnections = " << setprecision(indent) << m_maxNumberOfAdditionalConnections << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultilinkRequest_callInformation::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultilinkRequest_callInformation), PInvalidCast); #endif const H245_MultilinkRequest_callInformation & other = (const H245_MultilinkRequest_callInformation &)obj; Comparison result; if ((result = m_maxNumberOfAdditionalConnections.Compare(other.m_maxNumberOfAdditionalConnections)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultilinkRequest_callInformation::GetDataLength() const { PINDEX length = 0; length += m_maxNumberOfAdditionalConnections.GetObjectLength(); return length; } PBoolean H245_MultilinkRequest_callInformation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_maxNumberOfAdditionalConnections.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultilinkRequest_callInformation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_maxNumberOfAdditionalConnections.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultilinkRequest_callInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultilinkRequest_callInformation::Class()), PInvalidCast); #endif return new H245_MultilinkRequest_callInformation(*this); } // // MultilinkRequest_addConnection // H245_MultilinkRequest_addConnection::H245_MultilinkRequest_addConnection(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MultilinkRequest_addConnection::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "sequenceNumber = " << setprecision(indent) << m_sequenceNumber << '\n'; strm << setw(indent+21) << "dialingInformation = " << setprecision(indent) << m_dialingInformation << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultilinkRequest_addConnection::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultilinkRequest_addConnection), PInvalidCast); #endif const H245_MultilinkRequest_addConnection & other = (const H245_MultilinkRequest_addConnection &)obj; Comparison result; if ((result = m_sequenceNumber.Compare(other.m_sequenceNumber)) != EqualTo) return result; if ((result = m_dialingInformation.Compare(other.m_dialingInformation)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultilinkRequest_addConnection::GetDataLength() const { PINDEX length = 0; length += m_sequenceNumber.GetObjectLength(); length += m_dialingInformation.GetObjectLength(); return length; } PBoolean H245_MultilinkRequest_addConnection::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sequenceNumber.Decode(strm)) return FALSE; if (!m_dialingInformation.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultilinkRequest_addConnection::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sequenceNumber.Encode(strm); m_dialingInformation.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultilinkRequest_addConnection::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultilinkRequest_addConnection::Class()), PInvalidCast); #endif return new H245_MultilinkRequest_addConnection(*this); } // // MultilinkRequest_removeConnection // H245_MultilinkRequest_removeConnection::H245_MultilinkRequest_removeConnection(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MultilinkRequest_removeConnection::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+23) << "connectionIdentifier = " << setprecision(indent) << m_connectionIdentifier << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultilinkRequest_removeConnection::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultilinkRequest_removeConnection), PInvalidCast); #endif const H245_MultilinkRequest_removeConnection & other = (const H245_MultilinkRequest_removeConnection &)obj; Comparison result; if ((result = m_connectionIdentifier.Compare(other.m_connectionIdentifier)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultilinkRequest_removeConnection::GetDataLength() const { PINDEX length = 0; length += m_connectionIdentifier.GetObjectLength(); return length; } PBoolean H245_MultilinkRequest_removeConnection::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_connectionIdentifier.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultilinkRequest_removeConnection::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_connectionIdentifier.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultilinkRequest_removeConnection::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultilinkRequest_removeConnection::Class()), PInvalidCast); #endif return new H245_MultilinkRequest_removeConnection(*this); } // // MultilinkResponse_callInformation // H245_MultilinkResponse_callInformation::H245_MultilinkResponse_callInformation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_callAssociationNumber.SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); } #ifndef PASN_NOPRINTON void H245_MultilinkResponse_callInformation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "dialingInformation = " << setprecision(indent) << m_dialingInformation << '\n'; strm << setw(indent+24) << "callAssociationNumber = " << setprecision(indent) << m_callAssociationNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultilinkResponse_callInformation::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultilinkResponse_callInformation), PInvalidCast); #endif const H245_MultilinkResponse_callInformation & other = (const H245_MultilinkResponse_callInformation &)obj; Comparison result; if ((result = m_dialingInformation.Compare(other.m_dialingInformation)) != EqualTo) return result; if ((result = m_callAssociationNumber.Compare(other.m_callAssociationNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultilinkResponse_callInformation::GetDataLength() const { PINDEX length = 0; length += m_dialingInformation.GetObjectLength(); length += m_callAssociationNumber.GetObjectLength(); return length; } PBoolean H245_MultilinkResponse_callInformation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_dialingInformation.Decode(strm)) return FALSE; if (!m_callAssociationNumber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultilinkResponse_callInformation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_dialingInformation.Encode(strm); m_callAssociationNumber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultilinkResponse_callInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultilinkResponse_callInformation::Class()), PInvalidCast); #endif return new H245_MultilinkResponse_callInformation(*this); } // // MultilinkResponse_removeConnection // H245_MultilinkResponse_removeConnection::H245_MultilinkResponse_removeConnection(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MultilinkResponse_removeConnection::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+23) << "connectionIdentifier = " << setprecision(indent) << m_connectionIdentifier << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultilinkResponse_removeConnection::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultilinkResponse_removeConnection), PInvalidCast); #endif const H245_MultilinkResponse_removeConnection & other = (const H245_MultilinkResponse_removeConnection &)obj; Comparison result; if ((result = m_connectionIdentifier.Compare(other.m_connectionIdentifier)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultilinkResponse_removeConnection::GetDataLength() const { PINDEX length = 0; length += m_connectionIdentifier.GetObjectLength(); return length; } PBoolean H245_MultilinkResponse_removeConnection::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_connectionIdentifier.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultilinkResponse_removeConnection::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_connectionIdentifier.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultilinkResponse_removeConnection::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultilinkResponse_removeConnection::Class()), PInvalidCast); #endif return new H245_MultilinkResponse_removeConnection(*this); } // // MultilinkResponse_maximumHeaderInterval // H245_MultilinkResponse_maximumHeaderInterval::H245_MultilinkResponse_maximumHeaderInterval(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_currentInterval.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H245_MultilinkResponse_maximumHeaderInterval::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+18) << "currentInterval = " << setprecision(indent) << m_currentInterval << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultilinkResponse_maximumHeaderInterval::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultilinkResponse_maximumHeaderInterval), PInvalidCast); #endif const H245_MultilinkResponse_maximumHeaderInterval & other = (const H245_MultilinkResponse_maximumHeaderInterval &)obj; Comparison result; if ((result = m_currentInterval.Compare(other.m_currentInterval)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultilinkResponse_maximumHeaderInterval::GetDataLength() const { PINDEX length = 0; length += m_currentInterval.GetObjectLength(); return length; } PBoolean H245_MultilinkResponse_maximumHeaderInterval::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_currentInterval.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultilinkResponse_maximumHeaderInterval::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_currentInterval.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultilinkResponse_maximumHeaderInterval::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultilinkResponse_maximumHeaderInterval::Class()), PInvalidCast); #endif return new H245_MultilinkResponse_maximumHeaderInterval(*this); } // // MultilinkIndication_crcDesired // H245_MultilinkIndication_crcDesired::H245_MultilinkIndication_crcDesired(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MultilinkIndication_crcDesired::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX H245_MultilinkIndication_crcDesired::GetDataLength() const { PINDEX length = 0; return length; } PBoolean H245_MultilinkIndication_crcDesired::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultilinkIndication_crcDesired::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultilinkIndication_crcDesired::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultilinkIndication_crcDesired::Class()), PInvalidCast); #endif return new H245_MultilinkIndication_crcDesired(*this); } // // MultilinkIndication_excessiveError // H245_MultilinkIndication_excessiveError::H245_MultilinkIndication_excessiveError(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_MultilinkIndication_excessiveError::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+23) << "connectionIdentifier = " << setprecision(indent) << m_connectionIdentifier << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MultilinkIndication_excessiveError::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MultilinkIndication_excessiveError), PInvalidCast); #endif const H245_MultilinkIndication_excessiveError & other = (const H245_MultilinkIndication_excessiveError &)obj; Comparison result; if ((result = m_connectionIdentifier.Compare(other.m_connectionIdentifier)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MultilinkIndication_excessiveError::GetDataLength() const { PINDEX length = 0; length += m_connectionIdentifier.GetObjectLength(); return length; } PBoolean H245_MultilinkIndication_excessiveError::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_connectionIdentifier.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MultilinkIndication_excessiveError::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_connectionIdentifier.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MultilinkIndication_excessiveError::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultilinkIndication_excessiveError::Class()), PInvalidCast); #endif return new H245_MultilinkIndication_excessiveError(*this); } // // ArrayOf_DialingInformationNumber // H245_ArrayOf_DialingInformationNumber::H245_ArrayOf_DialingInformationNumber(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_DialingInformationNumber::CreateObject() const { return new H245_DialingInformationNumber; } H245_DialingInformationNumber & H245_ArrayOf_DialingInformationNumber::operator[](PINDEX i) const { return (H245_DialingInformationNumber &)array[i]; } PObject * H245_ArrayOf_DialingInformationNumber::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_DialingInformationNumber::Class()), PInvalidCast); #endif return new H245_ArrayOf_DialingInformationNumber(*this); } // // ArrayOf_DialingInformationNetworkType // H245_ArrayOf_DialingInformationNetworkType::H245_ArrayOf_DialingInformationNetworkType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_DialingInformationNetworkType::CreateObject() const { return new H245_DialingInformationNetworkType; } H245_DialingInformationNetworkType & H245_ArrayOf_DialingInformationNetworkType::operator[](PINDEX i) const { return (H245_DialingInformationNetworkType &)array[i]; } PObject * H245_ArrayOf_DialingInformationNetworkType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_DialingInformationNetworkType::Class()), PInvalidCast); #endif return new H245_ArrayOf_DialingInformationNetworkType(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_FlowControlCommand_scope[]={ {"logicalChannelNumber",0} ,{"resourceID",1} ,{"wholeMultiplex",2} }; #endif // // FlowControlCommand_scope // H245_FlowControlCommand_scope::H245_FlowControlCommand_scope(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_FlowControlCommand_scope,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_FlowControlCommand_scope::operator H245_LogicalChannelNumber &() const #else H245_FlowControlCommand_scope::operator H245_LogicalChannelNumber &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelNumber), PInvalidCast); #endif return *(H245_LogicalChannelNumber *)choice; } H245_FlowControlCommand_scope::operator const H245_LogicalChannelNumber &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelNumber), PInvalidCast); #endif return *(H245_LogicalChannelNumber *)choice; } PBoolean H245_FlowControlCommand_scope::CreateObject() { switch (tag) { case e_logicalChannelNumber : choice = new H245_LogicalChannelNumber(); return TRUE; case e_resourceID : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 65535); return TRUE; case e_wholeMultiplex : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_FlowControlCommand_scope::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_FlowControlCommand_scope::Class()), PInvalidCast); #endif return new H245_FlowControlCommand_scope(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_FlowControlCommand_restriction[]={ {"maximumBitRate",0} ,{"noRestriction",1} }; #endif // // FlowControlCommand_restriction // H245_FlowControlCommand_restriction::H245_FlowControlCommand_restriction(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_FlowControlCommand_restriction,2 #endif ) { } PBoolean H245_FlowControlCommand_restriction::CreateObject() { switch (tag) { case e_maximumBitRate : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 16777215); return TRUE; case e_noRestriction : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_FlowControlCommand_restriction::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_FlowControlCommand_restriction::Class()), PInvalidCast); #endif return new H245_FlowControlCommand_restriction(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_EndSessionCommand_gstnOptions[]={ {"telephonyMode",0} ,{"v8bis",1} ,{"v34DSVD",2} ,{"v34DuplexFAX",3} ,{"v34H324",4} }; #endif // // EndSessionCommand_gstnOptions // H245_EndSessionCommand_gstnOptions::H245_EndSessionCommand_gstnOptions(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 5, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_EndSessionCommand_gstnOptions,5 #endif ) { } PBoolean H245_EndSessionCommand_gstnOptions::CreateObject() { choice = (tag <= e_v34H324) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_EndSessionCommand_gstnOptions::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_EndSessionCommand_gstnOptions::Class()), PInvalidCast); #endif return new H245_EndSessionCommand_gstnOptions(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_EndSessionCommand_isdnOptions[]={ {"telephonyMode",0} ,{"v140",1} ,{"terminalOnHold",2} }; #endif // // EndSessionCommand_isdnOptions // H245_EndSessionCommand_isdnOptions::H245_EndSessionCommand_isdnOptions(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_EndSessionCommand_isdnOptions,3 #endif ) { } PBoolean H245_EndSessionCommand_isdnOptions::CreateObject() { choice = (tag <= e_terminalOnHold) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_EndSessionCommand_isdnOptions::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_EndSessionCommand_isdnOptions::Class()), PInvalidCast); #endif return new H245_EndSessionCommand_isdnOptions(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MiscellaneousCommand_type[]={ {"equaliseDelay",0} ,{"zeroDelay",1} ,{"multipointModeCommand",2} ,{"cancelMultipointModeCommand",3} ,{"videoFreezePicture",4} ,{"videoFastUpdatePicture",5} ,{"videoFastUpdateGOB",6} ,{"videoTemporalSpatialTradeOff",7} ,{"videoSendSyncEveryGOB",8} ,{"videoSendSyncEveryGOBCancel",9} ,{"videoFastUpdateMB",10} ,{"maxH223MUXPDUsize",11} ,{"encryptionUpdate",12} ,{"encryptionUpdateRequest",13} ,{"switchReceiveMediaOff",14} ,{"switchReceiveMediaOn",15} ,{"progressiveRefinementStart",16} ,{"progressiveRefinementAbortOne",17} ,{"progressiveRefinementAbortContinuous",18} ,{"videoBadMBs",19} ,{"lostPicture",20} ,{"lostPartialPicture",21} ,{"recoveryReferencePicture",22} ,{"encryptionUpdateCommand",23} ,{"encryptionUpdateAck",24} }; #endif // // MiscellaneousCommand_type // H245_MiscellaneousCommand_type::H245_MiscellaneousCommand_type(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 10, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MiscellaneousCommand_type,25 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MiscellaneousCommand_type::operator H245_MiscellaneousCommand_type_videoFastUpdateGOB &() const #else H245_MiscellaneousCommand_type::operator H245_MiscellaneousCommand_type_videoFastUpdateGOB &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MiscellaneousCommand_type_videoFastUpdateGOB), PInvalidCast); #endif return *(H245_MiscellaneousCommand_type_videoFastUpdateGOB *)choice; } H245_MiscellaneousCommand_type::operator const H245_MiscellaneousCommand_type_videoFastUpdateGOB &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MiscellaneousCommand_type_videoFastUpdateGOB), PInvalidCast); #endif return *(H245_MiscellaneousCommand_type_videoFastUpdateGOB *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MiscellaneousCommand_type::operator H245_MiscellaneousCommand_type_videoFastUpdateMB &() const #else H245_MiscellaneousCommand_type::operator H245_MiscellaneousCommand_type_videoFastUpdateMB &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MiscellaneousCommand_type_videoFastUpdateMB), PInvalidCast); #endif return *(H245_MiscellaneousCommand_type_videoFastUpdateMB *)choice; } H245_MiscellaneousCommand_type::operator const H245_MiscellaneousCommand_type_videoFastUpdateMB &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MiscellaneousCommand_type_videoFastUpdateMB), PInvalidCast); #endif return *(H245_MiscellaneousCommand_type_videoFastUpdateMB *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MiscellaneousCommand_type::operator H245_EncryptionSync &() const #else H245_MiscellaneousCommand_type::operator H245_EncryptionSync &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_EncryptionSync), PInvalidCast); #endif return *(H245_EncryptionSync *)choice; } H245_MiscellaneousCommand_type::operator const H245_EncryptionSync &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_EncryptionSync), PInvalidCast); #endif return *(H245_EncryptionSync *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MiscellaneousCommand_type::operator H245_EncryptionUpdateRequest &() const #else H245_MiscellaneousCommand_type::operator H245_EncryptionUpdateRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_EncryptionUpdateRequest), PInvalidCast); #endif return *(H245_EncryptionUpdateRequest *)choice; } H245_MiscellaneousCommand_type::operator const H245_EncryptionUpdateRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_EncryptionUpdateRequest), PInvalidCast); #endif return *(H245_EncryptionUpdateRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MiscellaneousCommand_type::operator H245_MiscellaneousCommand_type_progressiveRefinementStart &() const #else H245_MiscellaneousCommand_type::operator H245_MiscellaneousCommand_type_progressiveRefinementStart &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MiscellaneousCommand_type_progressiveRefinementStart), PInvalidCast); #endif return *(H245_MiscellaneousCommand_type_progressiveRefinementStart *)choice; } H245_MiscellaneousCommand_type::operator const H245_MiscellaneousCommand_type_progressiveRefinementStart &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MiscellaneousCommand_type_progressiveRefinementStart), PInvalidCast); #endif return *(H245_MiscellaneousCommand_type_progressiveRefinementStart *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MiscellaneousCommand_type::operator H245_MiscellaneousCommand_type_videoBadMBs &() const #else H245_MiscellaneousCommand_type::operator H245_MiscellaneousCommand_type_videoBadMBs &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MiscellaneousCommand_type_videoBadMBs), PInvalidCast); #endif return *(H245_MiscellaneousCommand_type_videoBadMBs *)choice; } H245_MiscellaneousCommand_type::operator const H245_MiscellaneousCommand_type_videoBadMBs &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MiscellaneousCommand_type_videoBadMBs), PInvalidCast); #endif return *(H245_MiscellaneousCommand_type_videoBadMBs *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MiscellaneousCommand_type::operator H245_ArrayOf_PictureReference &() const #else H245_MiscellaneousCommand_type::operator H245_ArrayOf_PictureReference &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ArrayOf_PictureReference), PInvalidCast); #endif return *(H245_ArrayOf_PictureReference *)choice; } H245_MiscellaneousCommand_type::operator const H245_ArrayOf_PictureReference &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_ArrayOf_PictureReference), PInvalidCast); #endif return *(H245_ArrayOf_PictureReference *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MiscellaneousCommand_type::operator H245_MiscellaneousCommand_type_lostPartialPicture &() const #else H245_MiscellaneousCommand_type::operator H245_MiscellaneousCommand_type_lostPartialPicture &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MiscellaneousCommand_type_lostPartialPicture), PInvalidCast); #endif return *(H245_MiscellaneousCommand_type_lostPartialPicture *)choice; } H245_MiscellaneousCommand_type::operator const H245_MiscellaneousCommand_type_lostPartialPicture &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MiscellaneousCommand_type_lostPartialPicture), PInvalidCast); #endif return *(H245_MiscellaneousCommand_type_lostPartialPicture *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MiscellaneousCommand_type::operator H245_MiscellaneousCommand_type_encryptionUpdateCommand &() const #else H245_MiscellaneousCommand_type::operator H245_MiscellaneousCommand_type_encryptionUpdateCommand &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MiscellaneousCommand_type_encryptionUpdateCommand), PInvalidCast); #endif return *(H245_MiscellaneousCommand_type_encryptionUpdateCommand *)choice; } H245_MiscellaneousCommand_type::operator const H245_MiscellaneousCommand_type_encryptionUpdateCommand &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MiscellaneousCommand_type_encryptionUpdateCommand), PInvalidCast); #endif return *(H245_MiscellaneousCommand_type_encryptionUpdateCommand *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MiscellaneousCommand_type::operator H245_MiscellaneousCommand_type_encryptionUpdateAck &() const #else H245_MiscellaneousCommand_type::operator H245_MiscellaneousCommand_type_encryptionUpdateAck &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MiscellaneousCommand_type_encryptionUpdateAck), PInvalidCast); #endif return *(H245_MiscellaneousCommand_type_encryptionUpdateAck *)choice; } H245_MiscellaneousCommand_type::operator const H245_MiscellaneousCommand_type_encryptionUpdateAck &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MiscellaneousCommand_type_encryptionUpdateAck), PInvalidCast); #endif return *(H245_MiscellaneousCommand_type_encryptionUpdateAck *)choice; } PBoolean H245_MiscellaneousCommand_type::CreateObject() { switch (tag) { case e_equaliseDelay : case e_zeroDelay : case e_multipointModeCommand : case e_cancelMultipointModeCommand : case e_videoFreezePicture : case e_videoFastUpdatePicture : case e_videoSendSyncEveryGOB : case e_videoSendSyncEveryGOBCancel : case e_switchReceiveMediaOff : case e_switchReceiveMediaOn : case e_progressiveRefinementAbortOne : case e_progressiveRefinementAbortContinuous : choice = new PASN_Null(); return TRUE; case e_videoFastUpdateGOB : choice = new H245_MiscellaneousCommand_type_videoFastUpdateGOB(); return TRUE; case e_videoTemporalSpatialTradeOff : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 31); return TRUE; case e_videoFastUpdateMB : choice = new H245_MiscellaneousCommand_type_videoFastUpdateMB(); return TRUE; case e_maxH223MUXPDUsize : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 65535); return TRUE; case e_encryptionUpdate : choice = new H245_EncryptionSync(); return TRUE; case e_encryptionUpdateRequest : choice = new H245_EncryptionUpdateRequest(); return TRUE; case e_progressiveRefinementStart : choice = new H245_MiscellaneousCommand_type_progressiveRefinementStart(); return TRUE; case e_videoBadMBs : choice = new H245_MiscellaneousCommand_type_videoBadMBs(); return TRUE; case e_lostPicture : case e_recoveryReferencePicture : choice = new H245_ArrayOf_PictureReference(); return TRUE; case e_lostPartialPicture : choice = new H245_MiscellaneousCommand_type_lostPartialPicture(); return TRUE; case e_encryptionUpdateCommand : choice = new H245_MiscellaneousCommand_type_encryptionUpdateCommand(); return TRUE; case e_encryptionUpdateAck : choice = new H245_MiscellaneousCommand_type_encryptionUpdateAck(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_MiscellaneousCommand_type::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MiscellaneousCommand_type::Class()), PInvalidCast); #endif return new H245_MiscellaneousCommand_type(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_H223MultiplexReconfiguration_h223ModeChange[]={ {"toLevel0",0} ,{"toLevel1",1} ,{"toLevel2",2} ,{"toLevel2withOptionalHeader",3} }; #endif // // H223MultiplexReconfiguration_h223ModeChange // H245_H223MultiplexReconfiguration_h223ModeChange::H245_H223MultiplexReconfiguration_h223ModeChange(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_H223MultiplexReconfiguration_h223ModeChange,4 #endif ) { } PBoolean H245_H223MultiplexReconfiguration_h223ModeChange::CreateObject() { choice = (tag <= e_toLevel2withOptionalHeader) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_H223MultiplexReconfiguration_h223ModeChange::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223MultiplexReconfiguration_h223ModeChange::Class()), PInvalidCast); #endif return new H245_H223MultiplexReconfiguration_h223ModeChange(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag[]={ {"start",0} ,{"stop",1} }; #endif // // H223MultiplexReconfiguration_h223AnnexADoubleFlag // H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag::H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag,2 #endif ) { } PBoolean H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag::CreateObject() { choice = (tag <= e_stop) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag::Class()), PInvalidCast); #endif return new H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_NewATMVCCommand_aal[]={ {"aal1",0} ,{"aal5",1} }; #endif // // NewATMVCCommand_aal // H245_NewATMVCCommand_aal::H245_NewATMVCCommand_aal(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_NewATMVCCommand_aal,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_NewATMVCCommand_aal::operator H245_NewATMVCCommand_aal_aal1 &() const #else H245_NewATMVCCommand_aal::operator H245_NewATMVCCommand_aal_aal1 &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NewATMVCCommand_aal_aal1), PInvalidCast); #endif return *(H245_NewATMVCCommand_aal_aal1 *)choice; } H245_NewATMVCCommand_aal::operator const H245_NewATMVCCommand_aal_aal1 &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NewATMVCCommand_aal_aal1), PInvalidCast); #endif return *(H245_NewATMVCCommand_aal_aal1 *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_NewATMVCCommand_aal::operator H245_NewATMVCCommand_aal_aal5 &() const #else H245_NewATMVCCommand_aal::operator H245_NewATMVCCommand_aal_aal5 &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NewATMVCCommand_aal_aal5), PInvalidCast); #endif return *(H245_NewATMVCCommand_aal_aal5 *)choice; } H245_NewATMVCCommand_aal::operator const H245_NewATMVCCommand_aal_aal5 &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NewATMVCCommand_aal_aal5), PInvalidCast); #endif return *(H245_NewATMVCCommand_aal_aal5 *)choice; } PBoolean H245_NewATMVCCommand_aal::CreateObject() { switch (tag) { case e_aal1 : choice = new H245_NewATMVCCommand_aal_aal1(); return TRUE; case e_aal5 : choice = new H245_NewATMVCCommand_aal_aal5(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_NewATMVCCommand_aal::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NewATMVCCommand_aal::Class()), PInvalidCast); #endif return new H245_NewATMVCCommand_aal(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_NewATMVCCommand_multiplex[]={ {"noMultiplex",0} ,{"transportStream",1} ,{"programStream",2} }; #endif // // NewATMVCCommand_multiplex // H245_NewATMVCCommand_multiplex::H245_NewATMVCCommand_multiplex(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_NewATMVCCommand_multiplex,3 #endif ) { } PBoolean H245_NewATMVCCommand_multiplex::CreateObject() { choice = (tag <= e_programStream) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_NewATMVCCommand_multiplex::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NewATMVCCommand_multiplex::Class()), PInvalidCast); #endif return new H245_NewATMVCCommand_multiplex(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MobileMultilinkReconfigurationCommand_status[]={ {"synchronized",0} ,{"reconfiguration",1} }; #endif // // MobileMultilinkReconfigurationCommand_status // H245_MobileMultilinkReconfigurationCommand_status::H245_MobileMultilinkReconfigurationCommand_status(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MobileMultilinkReconfigurationCommand_status,2 #endif ) { } PBoolean H245_MobileMultilinkReconfigurationCommand_status::CreateObject() { choice = (tag <= e_reconfiguration) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_MobileMultilinkReconfigurationCommand_status::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MobileMultilinkReconfigurationCommand_status::Class()), PInvalidCast); #endif return new H245_MobileMultilinkReconfigurationCommand_status(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_FunctionNotSupported_cause[]={ {"syntaxError",0} ,{"semanticError",1} ,{"unknownFunction",2} }; #endif // // FunctionNotSupported_cause // H245_FunctionNotSupported_cause::H245_FunctionNotSupported_cause(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_FunctionNotSupported_cause,3 #endif ) { } PBoolean H245_FunctionNotSupported_cause::CreateObject() { choice = (tag <= e_unknownFunction) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_FunctionNotSupported_cause::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_FunctionNotSupported_cause::Class()), PInvalidCast); #endif return new H245_FunctionNotSupported_cause(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MiscellaneousIndication_type[]={ {"logicalChannelActive",0} ,{"logicalChannelInactive",1} ,{"multipointConference",2} ,{"cancelMultipointConference",3} ,{"multipointZeroComm",4} ,{"cancelMultipointZeroComm",5} ,{"multipointSecondaryStatus",6} ,{"cancelMultipointSecondaryStatus",7} ,{"videoIndicateReadyToActivate",8} ,{"videoTemporalSpatialTradeOff",9} ,{"videoNotDecodedMBs",10} ,{"transportCapability",11} }; #endif // // MiscellaneousIndication_type // H245_MiscellaneousIndication_type::H245_MiscellaneousIndication_type(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 10, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MiscellaneousIndication_type,12 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MiscellaneousIndication_type::operator H245_MiscellaneousIndication_type_videoNotDecodedMBs &() const #else H245_MiscellaneousIndication_type::operator H245_MiscellaneousIndication_type_videoNotDecodedMBs &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MiscellaneousIndication_type_videoNotDecodedMBs), PInvalidCast); #endif return *(H245_MiscellaneousIndication_type_videoNotDecodedMBs *)choice; } H245_MiscellaneousIndication_type::operator const H245_MiscellaneousIndication_type_videoNotDecodedMBs &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MiscellaneousIndication_type_videoNotDecodedMBs), PInvalidCast); #endif return *(H245_MiscellaneousIndication_type_videoNotDecodedMBs *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MiscellaneousIndication_type::operator H245_TransportCapability &() const #else H245_MiscellaneousIndication_type::operator H245_TransportCapability &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_TransportCapability), PInvalidCast); #endif return *(H245_TransportCapability *)choice; } H245_MiscellaneousIndication_type::operator const H245_TransportCapability &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_TransportCapability), PInvalidCast); #endif return *(H245_TransportCapability *)choice; } PBoolean H245_MiscellaneousIndication_type::CreateObject() { switch (tag) { case e_logicalChannelActive : case e_logicalChannelInactive : case e_multipointConference : case e_cancelMultipointConference : case e_multipointZeroComm : case e_cancelMultipointZeroComm : case e_multipointSecondaryStatus : case e_cancelMultipointSecondaryStatus : case e_videoIndicateReadyToActivate : choice = new PASN_Null(); return TRUE; case e_videoTemporalSpatialTradeOff : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 31); return TRUE; case e_videoNotDecodedMBs : choice = new H245_MiscellaneousIndication_type_videoNotDecodedMBs(); return TRUE; case e_transportCapability : choice = new H245_TransportCapability(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_MiscellaneousIndication_type::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MiscellaneousIndication_type::Class()), PInvalidCast); #endif return new H245_MiscellaneousIndication_type(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_JitterIndication_scope[]={ {"logicalChannelNumber",0} ,{"resourceID",1} ,{"wholeMultiplex",2} }; #endif // // JitterIndication_scope // H245_JitterIndication_scope::H245_JitterIndication_scope(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_JitterIndication_scope,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_JitterIndication_scope::operator H245_LogicalChannelNumber &() const #else H245_JitterIndication_scope::operator H245_LogicalChannelNumber &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelNumber), PInvalidCast); #endif return *(H245_LogicalChannelNumber *)choice; } H245_JitterIndication_scope::operator const H245_LogicalChannelNumber &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelNumber), PInvalidCast); #endif return *(H245_LogicalChannelNumber *)choice; } PBoolean H245_JitterIndication_scope::CreateObject() { switch (tag) { case e_logicalChannelNumber : choice = new H245_LogicalChannelNumber(); return TRUE; case e_resourceID : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 65535); return TRUE; case e_wholeMultiplex : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_JitterIndication_scope::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_JitterIndication_scope::Class()), PInvalidCast); #endif return new H245_JitterIndication_scope(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_NewATMVCIndication_aal[]={ {"aal1",0} ,{"aal5",1} }; #endif // // NewATMVCIndication_aal // H245_NewATMVCIndication_aal::H245_NewATMVCIndication_aal(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_NewATMVCIndication_aal,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_NewATMVCIndication_aal::operator H245_NewATMVCIndication_aal_aal1 &() const #else H245_NewATMVCIndication_aal::operator H245_NewATMVCIndication_aal_aal1 &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NewATMVCIndication_aal_aal1), PInvalidCast); #endif return *(H245_NewATMVCIndication_aal_aal1 *)choice; } H245_NewATMVCIndication_aal::operator const H245_NewATMVCIndication_aal_aal1 &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NewATMVCIndication_aal_aal1), PInvalidCast); #endif return *(H245_NewATMVCIndication_aal_aal1 *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_NewATMVCIndication_aal::operator H245_NewATMVCIndication_aal_aal5 &() const #else H245_NewATMVCIndication_aal::operator H245_NewATMVCIndication_aal_aal5 &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NewATMVCIndication_aal_aal5), PInvalidCast); #endif return *(H245_NewATMVCIndication_aal_aal5 *)choice; } H245_NewATMVCIndication_aal::operator const H245_NewATMVCIndication_aal_aal5 &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NewATMVCIndication_aal_aal5), PInvalidCast); #endif return *(H245_NewATMVCIndication_aal_aal5 *)choice; } PBoolean H245_NewATMVCIndication_aal::CreateObject() { switch (tag) { case e_aal1 : choice = new H245_NewATMVCIndication_aal_aal1(); return TRUE; case e_aal5 : choice = new H245_NewATMVCIndication_aal_aal5(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_NewATMVCIndication_aal::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NewATMVCIndication_aal::Class()), PInvalidCast); #endif return new H245_NewATMVCIndication_aal(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_NewATMVCIndication_multiplex[]={ {"noMultiplex",0} ,{"transportStream",1} ,{"programStream",2} }; #endif // // NewATMVCIndication_multiplex // H245_NewATMVCIndication_multiplex::H245_NewATMVCIndication_multiplex(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_NewATMVCIndication_multiplex,3 #endif ) { } PBoolean H245_NewATMVCIndication_multiplex::CreateObject() { choice = (tag <= e_programStream) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_NewATMVCIndication_multiplex::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NewATMVCIndication_multiplex::Class()), PInvalidCast); #endif return new H245_NewATMVCIndication_multiplex(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_UserInputIndication_userInputSupportIndication[]={ {"nonStandard",0} ,{"basicString",1} ,{"iA5String",2} ,{"generalString",3} ,{"encryptedBasicString",4} ,{"encryptedIA5String",5} ,{"encryptedGeneralString",6} }; #endif // // UserInputIndication_userInputSupportIndication // H245_UserInputIndication_userInputSupportIndication::H245_UserInputIndication_userInputSupportIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_UserInputIndication_userInputSupportIndication,7 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_UserInputIndication_userInputSupportIndication::operator H245_NonStandardParameter &() const #else H245_UserInputIndication_userInputSupportIndication::operator H245_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } H245_UserInputIndication_userInputSupportIndication::operator const H245_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_NonStandardParameter), PInvalidCast); #endif return *(H245_NonStandardParameter *)choice; } PBoolean H245_UserInputIndication_userInputSupportIndication::CreateObject() { switch (tag) { case e_nonStandard : choice = new H245_NonStandardParameter(); return TRUE; case e_basicString : case e_iA5String : case e_generalString : case e_encryptedBasicString : case e_encryptedIA5String : case e_encryptedGeneralString : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_UserInputIndication_userInputSupportIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_UserInputIndication_userInputSupportIndication::Class()), PInvalidCast); #endif return new H245_UserInputIndication_userInputSupportIndication(*this); } // // UserInputIndication_encryptedAlphanumeric // H245_UserInputIndication_encryptedAlphanumeric::H245_UserInputIndication_encryptedAlphanumeric(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_UserInputIndication_encryptedAlphanumeric::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "algorithmOID = " << setprecision(indent) << m_algorithmOID << '\n'; if (HasOptionalField(e_paramS)) strm << setw(indent+9) << "paramS = " << setprecision(indent) << m_paramS << '\n'; strm << setw(indent+12) << "encrypted = " << setprecision(indent) << m_encrypted << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_UserInputIndication_encryptedAlphanumeric::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_UserInputIndication_encryptedAlphanumeric), PInvalidCast); #endif const H245_UserInputIndication_encryptedAlphanumeric & other = (const H245_UserInputIndication_encryptedAlphanumeric &)obj; Comparison result; if ((result = m_algorithmOID.Compare(other.m_algorithmOID)) != EqualTo) return result; if ((result = m_paramS.Compare(other.m_paramS)) != EqualTo) return result; if ((result = m_encrypted.Compare(other.m_encrypted)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_UserInputIndication_encryptedAlphanumeric::GetDataLength() const { PINDEX length = 0; length += m_algorithmOID.GetObjectLength(); if (HasOptionalField(e_paramS)) length += m_paramS.GetObjectLength(); length += m_encrypted.GetObjectLength(); return length; } PBoolean H245_UserInputIndication_encryptedAlphanumeric::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_algorithmOID.Decode(strm)) return FALSE; if (HasOptionalField(e_paramS) && !m_paramS.Decode(strm)) return FALSE; if (!m_encrypted.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_UserInputIndication_encryptedAlphanumeric::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_algorithmOID.Encode(strm); if (HasOptionalField(e_paramS)) m_paramS.Encode(strm); m_encrypted.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_UserInputIndication_encryptedAlphanumeric::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_UserInputIndication_encryptedAlphanumeric::Class()), PInvalidCast); #endif return new H245_UserInputIndication_encryptedAlphanumeric(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_FlowControlIndication_scope[]={ {"logicalChannelNumber",0} ,{"resourceID",1} ,{"wholeMultiplex",2} }; #endif // // FlowControlIndication_scope // H245_FlowControlIndication_scope::H245_FlowControlIndication_scope(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_FlowControlIndication_scope,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_FlowControlIndication_scope::operator H245_LogicalChannelNumber &() const #else H245_FlowControlIndication_scope::operator H245_LogicalChannelNumber &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelNumber), PInvalidCast); #endif return *(H245_LogicalChannelNumber *)choice; } H245_FlowControlIndication_scope::operator const H245_LogicalChannelNumber &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_LogicalChannelNumber), PInvalidCast); #endif return *(H245_LogicalChannelNumber *)choice; } PBoolean H245_FlowControlIndication_scope::CreateObject() { switch (tag) { case e_logicalChannelNumber : choice = new H245_LogicalChannelNumber(); return TRUE; case e_resourceID : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 65535); return TRUE; case e_wholeMultiplex : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_FlowControlIndication_scope::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_FlowControlIndication_scope::Class()), PInvalidCast); #endif return new H245_FlowControlIndication_scope(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_FlowControlIndication_restriction[]={ {"maximumBitRate",0} ,{"noRestriction",1} }; #endif // // FlowControlIndication_restriction // H245_FlowControlIndication_restriction::H245_FlowControlIndication_restriction(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_FlowControlIndication_restriction,2 #endif ) { } PBoolean H245_FlowControlIndication_restriction::CreateObject() { switch (tag) { case e_maximumBitRate : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 16777215); return TRUE; case e_noRestriction : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_FlowControlIndication_restriction::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_FlowControlIndication_restriction::Class()), PInvalidCast); #endif return new H245_FlowControlIndication_restriction(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded[]={ {"highestEntryNumberProcessed",0} ,{"noneProcessed",1} }; #endif // // TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded // H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded::H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded::operator H245_CapabilityTableEntryNumber &() const #else H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded::operator H245_CapabilityTableEntryNumber &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_CapabilityTableEntryNumber), PInvalidCast); #endif return *(H245_CapabilityTableEntryNumber *)choice; } H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded::operator const H245_CapabilityTableEntryNumber &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_CapabilityTableEntryNumber), PInvalidCast); #endif return *(H245_CapabilityTableEntryNumber *)choice; } PBoolean H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded::CreateObject() { switch (tag) { case e_highestEntryNumberProcessed : choice = new H245_CapabilityTableEntryNumber(); return TRUE; case e_noneProcessed : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded::Class()), PInvalidCast); #endif return new H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_VCCapability_availableBitRates_type[]={ {"singleBitRate",0} ,{"rangeOfBitRates",1} }; #endif // // VCCapability_availableBitRates_type // H245_VCCapability_availableBitRates_type::H245_VCCapability_availableBitRates_type(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_VCCapability_availableBitRates_type,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_VCCapability_availableBitRates_type::operator H245_VCCapability_availableBitRates_type_rangeOfBitRates &() const #else H245_VCCapability_availableBitRates_type::operator H245_VCCapability_availableBitRates_type_rangeOfBitRates &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VCCapability_availableBitRates_type_rangeOfBitRates), PInvalidCast); #endif return *(H245_VCCapability_availableBitRates_type_rangeOfBitRates *)choice; } H245_VCCapability_availableBitRates_type::operator const H245_VCCapability_availableBitRates_type_rangeOfBitRates &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_VCCapability_availableBitRates_type_rangeOfBitRates), PInvalidCast); #endif return *(H245_VCCapability_availableBitRates_type_rangeOfBitRates *)choice; } PBoolean H245_VCCapability_availableBitRates_type::CreateObject() { switch (tag) { case e_singleBitRate : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 1, 65535); return TRUE; case e_rangeOfBitRates : choice = new H245_VCCapability_availableBitRates_type_rangeOfBitRates(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_VCCapability_availableBitRates_type::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_VCCapability_availableBitRates_type::Class()), PInvalidCast); #endif return new H245_VCCapability_availableBitRates_type(*this); } // // ArrayOf_Q2931Address // H245_ArrayOf_Q2931Address::H245_ArrayOf_Q2931Address(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_Q2931Address::CreateObject() const { return new H245_Q2931Address; } H245_Q2931Address & H245_ArrayOf_Q2931Address::operator[](PINDEX i) const { return (H245_Q2931Address &)array[i]; } PObject * H245_ArrayOf_Q2931Address::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_Q2931Address::Class()), PInvalidCast); #endif return new H245_ArrayOf_Q2931Address(*this); } // // H223Capability_h223MultiplexTableCapability_enhanced // H245_H223Capability_h223MultiplexTableCapability_enhanced::H245_H223Capability_h223MultiplexTableCapability_enhanced(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_maximumNestingDepth.SetConstraints(PASN_Object::FixedConstraint, 1, 15); m_maximumElementListSize.SetConstraints(PASN_Object::FixedConstraint, 2, 255); m_maximumSubElementListSize.SetConstraints(PASN_Object::FixedConstraint, 2, 255); } #ifndef PASN_NOPRINTON void H245_H223Capability_h223MultiplexTableCapability_enhanced::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+22) << "maximumNestingDepth = " << setprecision(indent) << m_maximumNestingDepth << '\n'; strm << setw(indent+25) << "maximumElementListSize = " << setprecision(indent) << m_maximumElementListSize << '\n'; strm << setw(indent+28) << "maximumSubElementListSize = " << setprecision(indent) << m_maximumSubElementListSize << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H223Capability_h223MultiplexTableCapability_enhanced::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H223Capability_h223MultiplexTableCapability_enhanced), PInvalidCast); #endif const H245_H223Capability_h223MultiplexTableCapability_enhanced & other = (const H245_H223Capability_h223MultiplexTableCapability_enhanced &)obj; Comparison result; if ((result = m_maximumNestingDepth.Compare(other.m_maximumNestingDepth)) != EqualTo) return result; if ((result = m_maximumElementListSize.Compare(other.m_maximumElementListSize)) != EqualTo) return result; if ((result = m_maximumSubElementListSize.Compare(other.m_maximumSubElementListSize)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H223Capability_h223MultiplexTableCapability_enhanced::GetDataLength() const { PINDEX length = 0; length += m_maximumNestingDepth.GetObjectLength(); length += m_maximumElementListSize.GetObjectLength(); length += m_maximumSubElementListSize.GetObjectLength(); return length; } PBoolean H245_H223Capability_h223MultiplexTableCapability_enhanced::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_maximumNestingDepth.Decode(strm)) return FALSE; if (!m_maximumElementListSize.Decode(strm)) return FALSE; if (!m_maximumSubElementListSize.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H223Capability_h223MultiplexTableCapability_enhanced::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_maximumNestingDepth.Encode(strm); m_maximumElementListSize.Encode(strm); m_maximumSubElementListSize.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H223Capability_h223MultiplexTableCapability_enhanced::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223Capability_h223MultiplexTableCapability_enhanced::Class()), PInvalidCast); #endif return new H245_H223Capability_h223MultiplexTableCapability_enhanced(*this); } // // ArrayOf_RTPH263VideoRedundancyFrameMapping // H245_ArrayOf_RTPH263VideoRedundancyFrameMapping::H245_ArrayOf_RTPH263VideoRedundancyFrameMapping(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_RTPH263VideoRedundancyFrameMapping::CreateObject() const { return new H245_RTPH263VideoRedundancyFrameMapping; } H245_RTPH263VideoRedundancyFrameMapping & H245_ArrayOf_RTPH263VideoRedundancyFrameMapping::operator[](PINDEX i) const { return (H245_RTPH263VideoRedundancyFrameMapping &)array[i]; } PObject * H245_ArrayOf_RTPH263VideoRedundancyFrameMapping::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_RTPH263VideoRedundancyFrameMapping::Class()), PInvalidCast); #endif return new H245_ArrayOf_RTPH263VideoRedundancyFrameMapping(*this); } // // RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters // H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters::H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_mpuHorizMBs.SetConstraints(PASN_Object::FixedConstraint, 1, 128); m_mpuVertMBs.SetConstraints(PASN_Object::FixedConstraint, 1, 72); m_mpuTotalNumber.SetConstraints(PASN_Object::FixedConstraint, 1, 65536); } #ifndef PASN_NOPRINTON void H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "mpuHorizMBs = " << setprecision(indent) << m_mpuHorizMBs << '\n'; strm << setw(indent+13) << "mpuVertMBs = " << setprecision(indent) << m_mpuVertMBs << '\n'; strm << setw(indent+17) << "mpuTotalNumber = " << setprecision(indent) << m_mpuTotalNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters), PInvalidCast); #endif const H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters & other = (const H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters &)obj; Comparison result; if ((result = m_mpuHorizMBs.Compare(other.m_mpuHorizMBs)) != EqualTo) return result; if ((result = m_mpuVertMBs.Compare(other.m_mpuVertMBs)) != EqualTo) return result; if ((result = m_mpuTotalNumber.Compare(other.m_mpuTotalNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters::GetDataLength() const { PINDEX length = 0; length += m_mpuHorizMBs.GetObjectLength(); length += m_mpuVertMBs.GetObjectLength(); length += m_mpuTotalNumber.GetObjectLength(); return length; } PBoolean H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_mpuHorizMBs.Decode(strm)) return FALSE; if (!m_mpuVertMBs.Decode(strm)) return FALSE; if (!m_mpuTotalNumber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_mpuHorizMBs.Encode(strm); m_mpuVertMBs.Encode(strm); m_mpuTotalNumber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters::Class()), PInvalidCast); #endif return new H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters(*this); } // // CustomPictureFormat_mPI_customPCF // H245_CustomPictureFormat_mPI_customPCF::H245_CustomPictureFormat_mPI_customPCF(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 16); } PASN_Object * H245_CustomPictureFormat_mPI_customPCF::CreateObject() const { return new H245_CustomPictureFormat_mPI_customPCF_subtype; } H245_CustomPictureFormat_mPI_customPCF_subtype & H245_CustomPictureFormat_mPI_customPCF::operator[](PINDEX i) const { return (H245_CustomPictureFormat_mPI_customPCF_subtype &)array[i]; } PObject * H245_CustomPictureFormat_mPI_customPCF::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CustomPictureFormat_mPI_customPCF::Class()), PInvalidCast); #endif return new H245_CustomPictureFormat_mPI_customPCF(*this); } // // CustomPictureFormat_pixelAspectInformation_pixelAspectCode // H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode::H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 14); } PASN_Object * H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode::CreateObject() const { PASN_Integer * obj = new PASN_Integer; obj->SetConstraints(PASN_Object::FixedConstraint, 1, 14); return obj; } PASN_Integer & H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode::operator[](PINDEX i) const { return (PASN_Integer &)array[i]; } PObject * H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode::Class()), PInvalidCast); #endif return new H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode(*this); } // // CustomPictureFormat_pixelAspectInformation_extendedPAR // H245_CustomPictureFormat_pixelAspectInformation_extendedPAR::H245_CustomPictureFormat_pixelAspectInformation_extendedPAR(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 256); } PASN_Object * H245_CustomPictureFormat_pixelAspectInformation_extendedPAR::CreateObject() const { return new H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype; } H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype & H245_CustomPictureFormat_pixelAspectInformation_extendedPAR::operator[](PINDEX i) const { return (H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype &)array[i]; } PObject * H245_CustomPictureFormat_pixelAspectInformation_extendedPAR::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CustomPictureFormat_pixelAspectInformation_extendedPAR::Class()), PInvalidCast); #endif return new H245_CustomPictureFormat_pixelAspectInformation_extendedPAR(*this); } // // DataApplicationCapability_application_t84 // H245_DataApplicationCapability_application_t84::H245_DataApplicationCapability_application_t84(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H245_DataApplicationCapability_application_t84::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "t84Protocol = " << setprecision(indent) << m_t84Protocol << '\n'; strm << setw(indent+13) << "t84Profile = " << setprecision(indent) << m_t84Profile << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_DataApplicationCapability_application_t84::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_DataApplicationCapability_application_t84), PInvalidCast); #endif const H245_DataApplicationCapability_application_t84 & other = (const H245_DataApplicationCapability_application_t84 &)obj; Comparison result; if ((result = m_t84Protocol.Compare(other.m_t84Protocol)) != EqualTo) return result; if ((result = m_t84Profile.Compare(other.m_t84Profile)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_DataApplicationCapability_application_t84::GetDataLength() const { PINDEX length = 0; length += m_t84Protocol.GetObjectLength(); length += m_t84Profile.GetObjectLength(); return length; } PBoolean H245_DataApplicationCapability_application_t84::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_t84Protocol.Decode(strm)) return FALSE; if (!m_t84Profile.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_DataApplicationCapability_application_t84::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_t84Protocol.Encode(strm); m_t84Profile.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_DataApplicationCapability_application_t84::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DataApplicationCapability_application_t84::Class()), PInvalidCast); #endif return new H245_DataApplicationCapability_application_t84(*this); } // // DataApplicationCapability_application_nlpid // H245_DataApplicationCapability_application_nlpid::H245_DataApplicationCapability_application_nlpid(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H245_DataApplicationCapability_application_nlpid::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "nlpidProtocol = " << setprecision(indent) << m_nlpidProtocol << '\n'; strm << setw(indent+12) << "nlpidData = " << setprecision(indent) << m_nlpidData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_DataApplicationCapability_application_nlpid::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_DataApplicationCapability_application_nlpid), PInvalidCast); #endif const H245_DataApplicationCapability_application_nlpid & other = (const H245_DataApplicationCapability_application_nlpid &)obj; Comparison result; if ((result = m_nlpidProtocol.Compare(other.m_nlpidProtocol)) != EqualTo) return result; if ((result = m_nlpidData.Compare(other.m_nlpidData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_DataApplicationCapability_application_nlpid::GetDataLength() const { PINDEX length = 0; length += m_nlpidProtocol.GetObjectLength(); length += m_nlpidData.GetObjectLength(); return length; } PBoolean H245_DataApplicationCapability_application_nlpid::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nlpidProtocol.Decode(strm)) return FALSE; if (!m_nlpidData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_DataApplicationCapability_application_nlpid::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nlpidProtocol.Encode(strm); m_nlpidData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_DataApplicationCapability_application_nlpid::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DataApplicationCapability_application_nlpid::Class()), PInvalidCast); #endif return new H245_DataApplicationCapability_application_nlpid(*this); } // // DepFECCapability_rfc2733_separateStream // H245_DepFECCapability_rfc2733_separateStream::H245_DepFECCapability_rfc2733_separateStream(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_DepFECCapability_rfc2733_separateStream::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "separatePort = " << setprecision(indent) << m_separatePort << '\n'; strm << setw(indent+11) << "samePort = " << setprecision(indent) << m_samePort << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_DepFECCapability_rfc2733_separateStream::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_DepFECCapability_rfc2733_separateStream), PInvalidCast); #endif const H245_DepFECCapability_rfc2733_separateStream & other = (const H245_DepFECCapability_rfc2733_separateStream &)obj; Comparison result; if ((result = m_separatePort.Compare(other.m_separatePort)) != EqualTo) return result; if ((result = m_samePort.Compare(other.m_samePort)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_DepFECCapability_rfc2733_separateStream::GetDataLength() const { PINDEX length = 0; length += m_separatePort.GetObjectLength(); length += m_samePort.GetObjectLength(); return length; } PBoolean H245_DepFECCapability_rfc2733_separateStream::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_separatePort.Decode(strm)) return FALSE; if (!m_samePort.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_DepFECCapability_rfc2733_separateStream::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_separatePort.Encode(strm); m_samePort.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_DepFECCapability_rfc2733_separateStream::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DepFECCapability_rfc2733_separateStream::Class()), PInvalidCast); #endif return new H245_DepFECCapability_rfc2733_separateStream(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters[]={ {"h222LogicalChannelParameters",0} ,{"h223LogicalChannelParameters",1} ,{"v76LogicalChannelParameters",2} ,{"h2250LogicalChannelParameters",3} ,{"none",4} }; #endif // // OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters // H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters,5 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::operator H245_H222LogicalChannelParameters &() const #else H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::operator H245_H222LogicalChannelParameters &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H222LogicalChannelParameters), PInvalidCast); #endif return *(H245_H222LogicalChannelParameters *)choice; } H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::operator const H245_H222LogicalChannelParameters &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H222LogicalChannelParameters), PInvalidCast); #endif return *(H245_H222LogicalChannelParameters *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::operator H245_H223LogicalChannelParameters &() const #else H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::operator H245_H223LogicalChannelParameters &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223LogicalChannelParameters), PInvalidCast); #endif return *(H245_H223LogicalChannelParameters *)choice; } H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::operator const H245_H223LogicalChannelParameters &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223LogicalChannelParameters), PInvalidCast); #endif return *(H245_H223LogicalChannelParameters *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::operator H245_V76LogicalChannelParameters &() const #else H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::operator H245_V76LogicalChannelParameters &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_V76LogicalChannelParameters), PInvalidCast); #endif return *(H245_V76LogicalChannelParameters *)choice; } H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::operator const H245_V76LogicalChannelParameters &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_V76LogicalChannelParameters), PInvalidCast); #endif return *(H245_V76LogicalChannelParameters *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::operator H245_H2250LogicalChannelParameters &() const #else H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::operator H245_H2250LogicalChannelParameters &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H2250LogicalChannelParameters), PInvalidCast); #endif return *(H245_H2250LogicalChannelParameters *)choice; } H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::operator const H245_H2250LogicalChannelParameters &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H2250LogicalChannelParameters), PInvalidCast); #endif return *(H245_H2250LogicalChannelParameters *)choice; } PBoolean H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::CreateObject() { switch (tag) { case e_h222LogicalChannelParameters : choice = new H245_H222LogicalChannelParameters(); return TRUE; case e_h223LogicalChannelParameters : choice = new H245_H223LogicalChannelParameters(); return TRUE; case e_v76LogicalChannelParameters : choice = new H245_V76LogicalChannelParameters(); return TRUE; case e_h2250LogicalChannelParameters : choice = new H245_H2250LogicalChannelParameters(); return TRUE; case e_none : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::Class()), PInvalidCast); #endif return new H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters[]={ {"h223LogicalChannelParameters",0} ,{"v76LogicalChannelParameters",1} ,{"h2250LogicalChannelParameters",2} }; #endif // // OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters // H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::operator H245_H223LogicalChannelParameters &() const #else H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::operator H245_H223LogicalChannelParameters &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223LogicalChannelParameters), PInvalidCast); #endif return *(H245_H223LogicalChannelParameters *)choice; } H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::operator const H245_H223LogicalChannelParameters &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H223LogicalChannelParameters), PInvalidCast); #endif return *(H245_H223LogicalChannelParameters *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::operator H245_V76LogicalChannelParameters &() const #else H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::operator H245_V76LogicalChannelParameters &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_V76LogicalChannelParameters), PInvalidCast); #endif return *(H245_V76LogicalChannelParameters *)choice; } H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::operator const H245_V76LogicalChannelParameters &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_V76LogicalChannelParameters), PInvalidCast); #endif return *(H245_V76LogicalChannelParameters *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::operator H245_H2250LogicalChannelParameters &() const #else H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::operator H245_H2250LogicalChannelParameters &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H2250LogicalChannelParameters), PInvalidCast); #endif return *(H245_H2250LogicalChannelParameters *)choice; } H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::operator const H245_H2250LogicalChannelParameters &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H2250LogicalChannelParameters), PInvalidCast); #endif return *(H245_H2250LogicalChannelParameters *)choice; } PBoolean H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::CreateObject() { switch (tag) { case e_h223LogicalChannelParameters : choice = new H245_H223LogicalChannelParameters(); return TRUE; case e_v76LogicalChannelParameters : choice = new H245_V76LogicalChannelParameters(); return TRUE; case e_h2250LogicalChannelParameters : choice = new H245_H2250LogicalChannelParameters(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::Class()), PInvalidCast); #endif return new H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters(*this); } // // H223LogicalChannelParameters_adaptationLayerType_al3 // H245_H223LogicalChannelParameters_adaptationLayerType_al3::H245_H223LogicalChannelParameters_adaptationLayerType_al3(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { m_controlFieldOctets.SetConstraints(PASN_Object::FixedConstraint, 0, 2); m_sendBufferSize.SetConstraints(PASN_Object::FixedConstraint, 0, 16777215); } #ifndef PASN_NOPRINTON void H245_H223LogicalChannelParameters_adaptationLayerType_al3::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "controlFieldOctets = " << setprecision(indent) << m_controlFieldOctets << '\n'; strm << setw(indent+17) << "sendBufferSize = " << setprecision(indent) << m_sendBufferSize << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H223LogicalChannelParameters_adaptationLayerType_al3::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H223LogicalChannelParameters_adaptationLayerType_al3), PInvalidCast); #endif const H245_H223LogicalChannelParameters_adaptationLayerType_al3 & other = (const H245_H223LogicalChannelParameters_adaptationLayerType_al3 &)obj; Comparison result; if ((result = m_controlFieldOctets.Compare(other.m_controlFieldOctets)) != EqualTo) return result; if ((result = m_sendBufferSize.Compare(other.m_sendBufferSize)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H223LogicalChannelParameters_adaptationLayerType_al3::GetDataLength() const { PINDEX length = 0; length += m_controlFieldOctets.GetObjectLength(); length += m_sendBufferSize.GetObjectLength(); return length; } PBoolean H245_H223LogicalChannelParameters_adaptationLayerType_al3::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_controlFieldOctets.Decode(strm)) return FALSE; if (!m_sendBufferSize.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H223LogicalChannelParameters_adaptationLayerType_al3::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_controlFieldOctets.Encode(strm); m_sendBufferSize.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H223LogicalChannelParameters_adaptationLayerType_al3::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223LogicalChannelParameters_adaptationLayerType_al3::Class()), PInvalidCast); #endif return new H245_H223LogicalChannelParameters_adaptationLayerType_al3(*this); } // // ArrayOf_RedundancyEncodingElement // H245_ArrayOf_RedundancyEncodingElement::H245_ArrayOf_RedundancyEncodingElement(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_RedundancyEncodingElement::CreateObject() const { return new H245_RedundancyEncodingElement; } H245_RedundancyEncodingElement & H245_ArrayOf_RedundancyEncodingElement::operator[](PINDEX i) const { return (H245_RedundancyEncodingElement &)array[i]; } PObject * H245_ArrayOf_RedundancyEncodingElement::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_RedundancyEncodingElement::Class()), PInvalidCast); #endif return new H245_ArrayOf_RedundancyEncodingElement(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_DepFECData_rfc2733_mode[]={ {"redundancyEncoding",0} ,{"separateStream",1} }; #endif // // DepFECData_rfc2733_mode // H245_DepFECData_rfc2733_mode::H245_DepFECData_rfc2733_mode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_DepFECData_rfc2733_mode,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DepFECData_rfc2733_mode::operator H245_DepFECData_rfc2733_mode_separateStream &() const #else H245_DepFECData_rfc2733_mode::operator H245_DepFECData_rfc2733_mode_separateStream &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECData_rfc2733_mode_separateStream), PInvalidCast); #endif return *(H245_DepFECData_rfc2733_mode_separateStream *)choice; } H245_DepFECData_rfc2733_mode::operator const H245_DepFECData_rfc2733_mode_separateStream &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECData_rfc2733_mode_separateStream), PInvalidCast); #endif return *(H245_DepFECData_rfc2733_mode_separateStream *)choice; } PBoolean H245_DepFECData_rfc2733_mode::CreateObject() { switch (tag) { case e_redundancyEncoding : choice = new PASN_Null(); return TRUE; case e_separateStream : choice = new H245_DepFECData_rfc2733_mode_separateStream(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_DepFECData_rfc2733_mode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DepFECData_rfc2733_mode::Class()), PInvalidCast); #endif return new H245_DepFECData_rfc2733_mode(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_FECData_rfc2733_pktMode[]={ {"rfc2198coding",0} ,{"rfc2733sameport",1} ,{"rfc2733diffport",2} }; #endif // // FECData_rfc2733_pktMode // H245_FECData_rfc2733_pktMode::H245_FECData_rfc2733_pktMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_FECData_rfc2733_pktMode,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_FECData_rfc2733_pktMode::operator H245_FECData_rfc2733_pktMode_rfc2733sameport &() const #else H245_FECData_rfc2733_pktMode::operator H245_FECData_rfc2733_pktMode_rfc2733sameport &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FECData_rfc2733_pktMode_rfc2733sameport), PInvalidCast); #endif return *(H245_FECData_rfc2733_pktMode_rfc2733sameport *)choice; } H245_FECData_rfc2733_pktMode::operator const H245_FECData_rfc2733_pktMode_rfc2733sameport &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FECData_rfc2733_pktMode_rfc2733sameport), PInvalidCast); #endif return *(H245_FECData_rfc2733_pktMode_rfc2733sameport *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_FECData_rfc2733_pktMode::operator H245_FECData_rfc2733_pktMode_rfc2733diffport &() const #else H245_FECData_rfc2733_pktMode::operator H245_FECData_rfc2733_pktMode_rfc2733diffport &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FECData_rfc2733_pktMode_rfc2733diffport), PInvalidCast); #endif return *(H245_FECData_rfc2733_pktMode_rfc2733diffport *)choice; } H245_FECData_rfc2733_pktMode::operator const H245_FECData_rfc2733_pktMode_rfc2733diffport &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_FECData_rfc2733_pktMode_rfc2733diffport), PInvalidCast); #endif return *(H245_FECData_rfc2733_pktMode_rfc2733diffport *)choice; } PBoolean H245_FECData_rfc2733_pktMode::CreateObject() { switch (tag) { case e_rfc2198coding : choice = new PASN_Null(); return TRUE; case e_rfc2733sameport : choice = new H245_FECData_rfc2733_pktMode_rfc2733sameport(); return TRUE; case e_rfc2733diffport : choice = new H245_FECData_rfc2733_pktMode_rfc2733diffport(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_FECData_rfc2733_pktMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_FECData_rfc2733_pktMode::Class()), PInvalidCast); #endif return new H245_FECData_rfc2733_pktMode(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_UnicastAddress_iPSourceRouteAddress_routing[]={ {"strict",0} ,{"loose",1} }; #endif // // UnicastAddress_iPSourceRouteAddress_routing // H245_UnicastAddress_iPSourceRouteAddress_routing::H245_UnicastAddress_iPSourceRouteAddress_routing(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_UnicastAddress_iPSourceRouteAddress_routing,2 #endif ) { } PBoolean H245_UnicastAddress_iPSourceRouteAddress_routing::CreateObject() { choice = (tag <= e_loose) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_UnicastAddress_iPSourceRouteAddress_routing::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_UnicastAddress_iPSourceRouteAddress_routing::Class()), PInvalidCast); #endif return new H245_UnicastAddress_iPSourceRouteAddress_routing(*this); } // // UnicastAddress_iPSourceRouteAddress_route // H245_UnicastAddress_iPSourceRouteAddress_route::H245_UnicastAddress_iPSourceRouteAddress_route(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_UnicastAddress_iPSourceRouteAddress_route::CreateObject() const { PASN_OctetString * obj = new PASN_OctetString; obj->SetConstraints(PASN_Object::FixedConstraint, 4); return obj; } PASN_OctetString & H245_UnicastAddress_iPSourceRouteAddress_route::operator[](PINDEX i) const { return (PASN_OctetString &)array[i]; } PObject * H245_UnicastAddress_iPSourceRouteAddress_route::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_UnicastAddress_iPSourceRouteAddress_route::Class()), PInvalidCast); #endif return new H245_UnicastAddress_iPSourceRouteAddress_route(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters[]={ {"h222LogicalChannelParameters",0} ,{"h2250LogicalChannelParameters",1} }; #endif // // OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters // H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters::H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters::operator H245_H222LogicalChannelParameters &() const #else H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters::operator H245_H222LogicalChannelParameters &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H222LogicalChannelParameters), PInvalidCast); #endif return *(H245_H222LogicalChannelParameters *)choice; } H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters::operator const H245_H222LogicalChannelParameters &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H222LogicalChannelParameters), PInvalidCast); #endif return *(H245_H222LogicalChannelParameters *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters::operator H245_H2250LogicalChannelParameters &() const #else H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters::operator H245_H2250LogicalChannelParameters &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H2250LogicalChannelParameters), PInvalidCast); #endif return *(H245_H2250LogicalChannelParameters *)choice; } H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters::operator const H245_H2250LogicalChannelParameters &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_H2250LogicalChannelParameters), PInvalidCast); #endif return *(H245_H2250LogicalChannelParameters *)choice; } PBoolean H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters::CreateObject() { switch (tag) { case e_h222LogicalChannelParameters : choice = new H245_H222LogicalChannelParameters(); return TRUE; case e_h2250LogicalChannelParameters : choice = new H245_H2250LogicalChannelParameters(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters::Class()), PInvalidCast); #endif return new H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_DepFECMode_rfc2733Mode_mode[]={ {"redundancyEncoding",0} ,{"separateStream",1} }; #endif // // DepFECMode_rfc2733Mode_mode // H245_DepFECMode_rfc2733Mode_mode::H245_DepFECMode_rfc2733Mode_mode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_DepFECMode_rfc2733Mode_mode,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DepFECMode_rfc2733Mode_mode::operator H245_DepFECMode_rfc2733Mode_mode_separateStream &() const #else H245_DepFECMode_rfc2733Mode_mode::operator H245_DepFECMode_rfc2733Mode_mode_separateStream &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECMode_rfc2733Mode_mode_separateStream), PInvalidCast); #endif return *(H245_DepFECMode_rfc2733Mode_mode_separateStream *)choice; } H245_DepFECMode_rfc2733Mode_mode::operator const H245_DepFECMode_rfc2733Mode_mode_separateStream &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECMode_rfc2733Mode_mode_separateStream), PInvalidCast); #endif return *(H245_DepFECMode_rfc2733Mode_mode_separateStream *)choice; } PBoolean H245_DepFECMode_rfc2733Mode_mode::CreateObject() { switch (tag) { case e_redundancyEncoding : choice = new PASN_Null(); return TRUE; case e_separateStream : choice = new H245_DepFECMode_rfc2733Mode_mode_separateStream(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_DepFECMode_rfc2733Mode_mode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DepFECMode_rfc2733Mode_mode::Class()), PInvalidCast); #endif return new H245_DepFECMode_rfc2733Mode_mode(*this); } // // H223ModeParameters_adaptationLayerType_al3 // H245_H223ModeParameters_adaptationLayerType_al3::H245_H223ModeParameters_adaptationLayerType_al3(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { m_controlFieldOctets.SetConstraints(PASN_Object::FixedConstraint, 0, 2); m_sendBufferSize.SetConstraints(PASN_Object::FixedConstraint, 0, 16777215); } #ifndef PASN_NOPRINTON void H245_H223ModeParameters_adaptationLayerType_al3::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "controlFieldOctets = " << setprecision(indent) << m_controlFieldOctets << '\n'; strm << setw(indent+17) << "sendBufferSize = " << setprecision(indent) << m_sendBufferSize << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_H223ModeParameters_adaptationLayerType_al3::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_H223ModeParameters_adaptationLayerType_al3), PInvalidCast); #endif const H245_H223ModeParameters_adaptationLayerType_al3 & other = (const H245_H223ModeParameters_adaptationLayerType_al3 &)obj; Comparison result; if ((result = m_controlFieldOctets.Compare(other.m_controlFieldOctets)) != EqualTo) return result; if ((result = m_sendBufferSize.Compare(other.m_sendBufferSize)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_H223ModeParameters_adaptationLayerType_al3::GetDataLength() const { PINDEX length = 0; length += m_controlFieldOctets.GetObjectLength(); length += m_sendBufferSize.GetObjectLength(); return length; } PBoolean H245_H223ModeParameters_adaptationLayerType_al3::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_controlFieldOctets.Decode(strm)) return FALSE; if (!m_sendBufferSize.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_H223ModeParameters_adaptationLayerType_al3::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_controlFieldOctets.Encode(strm); m_sendBufferSize.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_H223ModeParameters_adaptationLayerType_al3::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_H223ModeParameters_adaptationLayerType_al3::Class()), PInvalidCast); #endif return new H245_H223ModeParameters_adaptationLayerType_al3(*this); } // // DataMode_application_nlpid // H245_DataMode_application_nlpid::H245_DataMode_application_nlpid(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H245_DataMode_application_nlpid::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "nlpidProtocol = " << setprecision(indent) << m_nlpidProtocol << '\n'; strm << setw(indent+12) << "nlpidData = " << setprecision(indent) << m_nlpidData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_DataMode_application_nlpid::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_DataMode_application_nlpid), PInvalidCast); #endif const H245_DataMode_application_nlpid & other = (const H245_DataMode_application_nlpid &)obj; Comparison result; if ((result = m_nlpidProtocol.Compare(other.m_nlpidProtocol)) != EqualTo) return result; if ((result = m_nlpidData.Compare(other.m_nlpidData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_DataMode_application_nlpid::GetDataLength() const { PINDEX length = 0; length += m_nlpidProtocol.GetObjectLength(); length += m_nlpidData.GetObjectLength(); return length; } PBoolean H245_DataMode_application_nlpid::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nlpidProtocol.Decode(strm)) return FALSE; if (!m_nlpidData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_DataMode_application_nlpid::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nlpidProtocol.Encode(strm); m_nlpidData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_DataMode_application_nlpid::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DataMode_application_nlpid::Class()), PInvalidCast); #endif return new H245_DataMode_application_nlpid(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MultilinkRequest_maximumHeaderInterval_requestType[]={ {"currentIntervalInformation",0} ,{"requestedInterval",1} }; #endif // // MultilinkRequest_maximumHeaderInterval_requestType // H245_MultilinkRequest_maximumHeaderInterval_requestType::H245_MultilinkRequest_maximumHeaderInterval_requestType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MultilinkRequest_maximumHeaderInterval_requestType,2 #endif ) { } PBoolean H245_MultilinkRequest_maximumHeaderInterval_requestType::CreateObject() { switch (tag) { case e_currentIntervalInformation : choice = new PASN_Null(); return TRUE; case e_requestedInterval : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 65535); return TRUE; } choice = NULL; return FALSE; } PObject * H245_MultilinkRequest_maximumHeaderInterval_requestType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultilinkRequest_maximumHeaderInterval_requestType::Class()), PInvalidCast); #endif return new H245_MultilinkRequest_maximumHeaderInterval_requestType(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_MultilinkResponse_addConnection_responseCode[]={ {"accepted",0} ,{"rejected",1} }; #endif // // MultilinkResponse_addConnection_responseCode // H245_MultilinkResponse_addConnection_responseCode::H245_MultilinkResponse_addConnection_responseCode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_MultilinkResponse_addConnection_responseCode,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_MultilinkResponse_addConnection_responseCode::operator H245_MultilinkResponse_addConnection_responseCode_rejected &() const #else H245_MultilinkResponse_addConnection_responseCode::operator H245_MultilinkResponse_addConnection_responseCode_rejected &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkResponse_addConnection_responseCode_rejected), PInvalidCast); #endif return *(H245_MultilinkResponse_addConnection_responseCode_rejected *)choice; } H245_MultilinkResponse_addConnection_responseCode::operator const H245_MultilinkResponse_addConnection_responseCode_rejected &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_MultilinkResponse_addConnection_responseCode_rejected), PInvalidCast); #endif return *(H245_MultilinkResponse_addConnection_responseCode_rejected *)choice; } PBoolean H245_MultilinkResponse_addConnection_responseCode::CreateObject() { switch (tag) { case e_accepted : choice = new PASN_Null(); return TRUE; case e_rejected : choice = new H245_MultilinkResponse_addConnection_responseCode_rejected(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_MultilinkResponse_addConnection_responseCode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MultilinkResponse_addConnection_responseCode::Class()), PInvalidCast); #endif return new H245_MultilinkResponse_addConnection_responseCode(*this); } // // ArrayOf_CapabilityDescriptorNumber // H245_ArrayOf_CapabilityDescriptorNumber::H245_ArrayOf_CapabilityDescriptorNumber(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_CapabilityDescriptorNumber::CreateObject() const { return new H245_CapabilityDescriptorNumber; } H245_CapabilityDescriptorNumber & H245_ArrayOf_CapabilityDescriptorNumber::operator[](PINDEX i) const { return (H245_CapabilityDescriptorNumber &)array[i]; } PObject * H245_ArrayOf_CapabilityDescriptorNumber::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_CapabilityDescriptorNumber::Class()), PInvalidCast); #endif return new H245_ArrayOf_CapabilityDescriptorNumber(*this); } // // MiscellaneousCommand_type_videoFastUpdateGOB // H245_MiscellaneousCommand_type_videoFastUpdateGOB::H245_MiscellaneousCommand_type_videoFastUpdateGOB(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { m_firstGOB.SetConstraints(PASN_Object::FixedConstraint, 0, 17); m_numberOfGOBs.SetConstraints(PASN_Object::FixedConstraint, 1, 18); } #ifndef PASN_NOPRINTON void H245_MiscellaneousCommand_type_videoFastUpdateGOB::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "firstGOB = " << setprecision(indent) << m_firstGOB << '\n'; strm << setw(indent+15) << "numberOfGOBs = " << setprecision(indent) << m_numberOfGOBs << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MiscellaneousCommand_type_videoFastUpdateGOB::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MiscellaneousCommand_type_videoFastUpdateGOB), PInvalidCast); #endif const H245_MiscellaneousCommand_type_videoFastUpdateGOB & other = (const H245_MiscellaneousCommand_type_videoFastUpdateGOB &)obj; Comparison result; if ((result = m_firstGOB.Compare(other.m_firstGOB)) != EqualTo) return result; if ((result = m_numberOfGOBs.Compare(other.m_numberOfGOBs)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MiscellaneousCommand_type_videoFastUpdateGOB::GetDataLength() const { PINDEX length = 0; length += m_firstGOB.GetObjectLength(); length += m_numberOfGOBs.GetObjectLength(); return length; } PBoolean H245_MiscellaneousCommand_type_videoFastUpdateGOB::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_firstGOB.Decode(strm)) return FALSE; if (!m_numberOfGOBs.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MiscellaneousCommand_type_videoFastUpdateGOB::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_firstGOB.Encode(strm); m_numberOfGOBs.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MiscellaneousCommand_type_videoFastUpdateGOB::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MiscellaneousCommand_type_videoFastUpdateGOB::Class()), PInvalidCast); #endif return new H245_MiscellaneousCommand_type_videoFastUpdateGOB(*this); } // // MiscellaneousCommand_type_videoFastUpdateMB // H245_MiscellaneousCommand_type_videoFastUpdateMB::H245_MiscellaneousCommand_type_videoFastUpdateMB(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_firstGOB.SetConstraints(PASN_Object::FixedConstraint, 0, 255); m_firstMB.SetConstraints(PASN_Object::FixedConstraint, 1, 8192); m_numberOfMBs.SetConstraints(PASN_Object::FixedConstraint, 1, 8192); } #ifndef PASN_NOPRINTON void H245_MiscellaneousCommand_type_videoFastUpdateMB::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_firstGOB)) strm << setw(indent+11) << "firstGOB = " << setprecision(indent) << m_firstGOB << '\n'; if (HasOptionalField(e_firstMB)) strm << setw(indent+10) << "firstMB = " << setprecision(indent) << m_firstMB << '\n'; strm << setw(indent+14) << "numberOfMBs = " << setprecision(indent) << m_numberOfMBs << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MiscellaneousCommand_type_videoFastUpdateMB::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MiscellaneousCommand_type_videoFastUpdateMB), PInvalidCast); #endif const H245_MiscellaneousCommand_type_videoFastUpdateMB & other = (const H245_MiscellaneousCommand_type_videoFastUpdateMB &)obj; Comparison result; if ((result = m_firstGOB.Compare(other.m_firstGOB)) != EqualTo) return result; if ((result = m_firstMB.Compare(other.m_firstMB)) != EqualTo) return result; if ((result = m_numberOfMBs.Compare(other.m_numberOfMBs)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MiscellaneousCommand_type_videoFastUpdateMB::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_firstGOB)) length += m_firstGOB.GetObjectLength(); if (HasOptionalField(e_firstMB)) length += m_firstMB.GetObjectLength(); length += m_numberOfMBs.GetObjectLength(); return length; } PBoolean H245_MiscellaneousCommand_type_videoFastUpdateMB::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_firstGOB) && !m_firstGOB.Decode(strm)) return FALSE; if (HasOptionalField(e_firstMB) && !m_firstMB.Decode(strm)) return FALSE; if (!m_numberOfMBs.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MiscellaneousCommand_type_videoFastUpdateMB::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_firstGOB)) m_firstGOB.Encode(strm); if (HasOptionalField(e_firstMB)) m_firstMB.Encode(strm); m_numberOfMBs.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MiscellaneousCommand_type_videoFastUpdateMB::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MiscellaneousCommand_type_videoFastUpdateMB::Class()), PInvalidCast); #endif return new H245_MiscellaneousCommand_type_videoFastUpdateMB(*this); } // // MiscellaneousCommand_type_videoBadMBs // H245_MiscellaneousCommand_type_videoBadMBs::H245_MiscellaneousCommand_type_videoBadMBs(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_firstMB.SetConstraints(PASN_Object::FixedConstraint, 1, 9216); m_numberOfMBs.SetConstraints(PASN_Object::FixedConstraint, 1, 9216); m_temporalReference.SetConstraints(PASN_Object::FixedConstraint, 0, 1023); } #ifndef PASN_NOPRINTON void H245_MiscellaneousCommand_type_videoBadMBs::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "firstMB = " << setprecision(indent) << m_firstMB << '\n'; strm << setw(indent+14) << "numberOfMBs = " << setprecision(indent) << m_numberOfMBs << '\n'; strm << setw(indent+20) << "temporalReference = " << setprecision(indent) << m_temporalReference << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MiscellaneousCommand_type_videoBadMBs::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MiscellaneousCommand_type_videoBadMBs), PInvalidCast); #endif const H245_MiscellaneousCommand_type_videoBadMBs & other = (const H245_MiscellaneousCommand_type_videoBadMBs &)obj; Comparison result; if ((result = m_firstMB.Compare(other.m_firstMB)) != EqualTo) return result; if ((result = m_numberOfMBs.Compare(other.m_numberOfMBs)) != EqualTo) return result; if ((result = m_temporalReference.Compare(other.m_temporalReference)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MiscellaneousCommand_type_videoBadMBs::GetDataLength() const { PINDEX length = 0; length += m_firstMB.GetObjectLength(); length += m_numberOfMBs.GetObjectLength(); length += m_temporalReference.GetObjectLength(); return length; } PBoolean H245_MiscellaneousCommand_type_videoBadMBs::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_firstMB.Decode(strm)) return FALSE; if (!m_numberOfMBs.Decode(strm)) return FALSE; if (!m_temporalReference.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MiscellaneousCommand_type_videoBadMBs::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_firstMB.Encode(strm); m_numberOfMBs.Encode(strm); m_temporalReference.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MiscellaneousCommand_type_videoBadMBs::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MiscellaneousCommand_type_videoBadMBs::Class()), PInvalidCast); #endif return new H245_MiscellaneousCommand_type_videoBadMBs(*this); } // // ArrayOf_PictureReference // H245_ArrayOf_PictureReference::H245_ArrayOf_PictureReference(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H245_ArrayOf_PictureReference::CreateObject() const { return new H245_PictureReference; } H245_PictureReference & H245_ArrayOf_PictureReference::operator[](PINDEX i) const { return (H245_PictureReference &)array[i]; } PObject * H245_ArrayOf_PictureReference::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_ArrayOf_PictureReference::Class()), PInvalidCast); #endif return new H245_ArrayOf_PictureReference(*this); } // // MiscellaneousCommand_type_lostPartialPicture // H245_MiscellaneousCommand_type_lostPartialPicture::H245_MiscellaneousCommand_type_lostPartialPicture(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_firstMB.SetConstraints(PASN_Object::FixedConstraint, 1, 9216); m_numberOfMBs.SetConstraints(PASN_Object::FixedConstraint, 1, 9216); } #ifndef PASN_NOPRINTON void H245_MiscellaneousCommand_type_lostPartialPicture::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+19) << "pictureReference = " << setprecision(indent) << m_pictureReference << '\n'; strm << setw(indent+10) << "firstMB = " << setprecision(indent) << m_firstMB << '\n'; strm << setw(indent+14) << "numberOfMBs = " << setprecision(indent) << m_numberOfMBs << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MiscellaneousCommand_type_lostPartialPicture::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MiscellaneousCommand_type_lostPartialPicture), PInvalidCast); #endif const H245_MiscellaneousCommand_type_lostPartialPicture & other = (const H245_MiscellaneousCommand_type_lostPartialPicture &)obj; Comparison result; if ((result = m_pictureReference.Compare(other.m_pictureReference)) != EqualTo) return result; if ((result = m_firstMB.Compare(other.m_firstMB)) != EqualTo) return result; if ((result = m_numberOfMBs.Compare(other.m_numberOfMBs)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MiscellaneousCommand_type_lostPartialPicture::GetDataLength() const { PINDEX length = 0; length += m_pictureReference.GetObjectLength(); length += m_firstMB.GetObjectLength(); length += m_numberOfMBs.GetObjectLength(); return length; } PBoolean H245_MiscellaneousCommand_type_lostPartialPicture::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_pictureReference.Decode(strm)) return FALSE; if (!m_firstMB.Decode(strm)) return FALSE; if (!m_numberOfMBs.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MiscellaneousCommand_type_lostPartialPicture::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_pictureReference.Encode(strm); m_firstMB.Encode(strm); m_numberOfMBs.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MiscellaneousCommand_type_lostPartialPicture::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MiscellaneousCommand_type_lostPartialPicture::Class()), PInvalidCast); #endif return new H245_MiscellaneousCommand_type_lostPartialPicture(*this); } // // MiscellaneousCommand_type_encryptionUpdateAck // H245_MiscellaneousCommand_type_encryptionUpdateAck::H245_MiscellaneousCommand_type_encryptionUpdateAck(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_synchFlag.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H245_MiscellaneousCommand_type_encryptionUpdateAck::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "synchFlag = " << setprecision(indent) << m_synchFlag << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MiscellaneousCommand_type_encryptionUpdateAck::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MiscellaneousCommand_type_encryptionUpdateAck), PInvalidCast); #endif const H245_MiscellaneousCommand_type_encryptionUpdateAck & other = (const H245_MiscellaneousCommand_type_encryptionUpdateAck &)obj; Comparison result; if ((result = m_synchFlag.Compare(other.m_synchFlag)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MiscellaneousCommand_type_encryptionUpdateAck::GetDataLength() const { PINDEX length = 0; length += m_synchFlag.GetObjectLength(); return length; } PBoolean H245_MiscellaneousCommand_type_encryptionUpdateAck::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_synchFlag.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MiscellaneousCommand_type_encryptionUpdateAck::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_synchFlag.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MiscellaneousCommand_type_encryptionUpdateAck::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MiscellaneousCommand_type_encryptionUpdateAck::Class()), PInvalidCast); #endif return new H245_MiscellaneousCommand_type_encryptionUpdateAck(*this); } // // NewATMVCCommand_aal_aal5 // H245_NewATMVCCommand_aal_aal5::H245_NewATMVCCommand_aal_aal5(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_forwardMaximumSDUSize.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); m_backwardMaximumSDUSize.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H245_NewATMVCCommand_aal_aal5::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "forwardMaximumSDUSize = " << setprecision(indent) << m_forwardMaximumSDUSize << '\n'; strm << setw(indent+25) << "backwardMaximumSDUSize = " << setprecision(indent) << m_backwardMaximumSDUSize << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_NewATMVCCommand_aal_aal5::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_NewATMVCCommand_aal_aal5), PInvalidCast); #endif const H245_NewATMVCCommand_aal_aal5 & other = (const H245_NewATMVCCommand_aal_aal5 &)obj; Comparison result; if ((result = m_forwardMaximumSDUSize.Compare(other.m_forwardMaximumSDUSize)) != EqualTo) return result; if ((result = m_backwardMaximumSDUSize.Compare(other.m_backwardMaximumSDUSize)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_NewATMVCCommand_aal_aal5::GetDataLength() const { PINDEX length = 0; length += m_forwardMaximumSDUSize.GetObjectLength(); length += m_backwardMaximumSDUSize.GetObjectLength(); return length; } PBoolean H245_NewATMVCCommand_aal_aal5::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_forwardMaximumSDUSize.Decode(strm)) return FALSE; if (!m_backwardMaximumSDUSize.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_NewATMVCCommand_aal_aal5::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_forwardMaximumSDUSize.Encode(strm); m_backwardMaximumSDUSize.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_NewATMVCCommand_aal_aal5::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NewATMVCCommand_aal_aal5::Class()), PInvalidCast); #endif return new H245_NewATMVCCommand_aal_aal5(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_NewATMVCCommand_reverseParameters_multiplex[]={ {"noMultiplex",0} ,{"transportStream",1} ,{"programStream",2} }; #endif // // NewATMVCCommand_reverseParameters_multiplex // H245_NewATMVCCommand_reverseParameters_multiplex::H245_NewATMVCCommand_reverseParameters_multiplex(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_NewATMVCCommand_reverseParameters_multiplex,3 #endif ) { } PBoolean H245_NewATMVCCommand_reverseParameters_multiplex::CreateObject() { choice = (tag <= e_programStream) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_NewATMVCCommand_reverseParameters_multiplex::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NewATMVCCommand_reverseParameters_multiplex::Class()), PInvalidCast); #endif return new H245_NewATMVCCommand_reverseParameters_multiplex(*this); } // // MiscellaneousIndication_type_videoNotDecodedMBs // H245_MiscellaneousIndication_type_videoNotDecodedMBs::H245_MiscellaneousIndication_type_videoNotDecodedMBs(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_firstMB.SetConstraints(PASN_Object::FixedConstraint, 1, 8192); m_numberOfMBs.SetConstraints(PASN_Object::FixedConstraint, 1, 8192); m_temporalReference.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H245_MiscellaneousIndication_type_videoNotDecodedMBs::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "firstMB = " << setprecision(indent) << m_firstMB << '\n'; strm << setw(indent+14) << "numberOfMBs = " << setprecision(indent) << m_numberOfMBs << '\n'; strm << setw(indent+20) << "temporalReference = " << setprecision(indent) << m_temporalReference << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_MiscellaneousIndication_type_videoNotDecodedMBs::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_MiscellaneousIndication_type_videoNotDecodedMBs), PInvalidCast); #endif const H245_MiscellaneousIndication_type_videoNotDecodedMBs & other = (const H245_MiscellaneousIndication_type_videoNotDecodedMBs &)obj; Comparison result; if ((result = m_firstMB.Compare(other.m_firstMB)) != EqualTo) return result; if ((result = m_numberOfMBs.Compare(other.m_numberOfMBs)) != EqualTo) return result; if ((result = m_temporalReference.Compare(other.m_temporalReference)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_MiscellaneousIndication_type_videoNotDecodedMBs::GetDataLength() const { PINDEX length = 0; length += m_firstMB.GetObjectLength(); length += m_numberOfMBs.GetObjectLength(); length += m_temporalReference.GetObjectLength(); return length; } PBoolean H245_MiscellaneousIndication_type_videoNotDecodedMBs::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_firstMB.Decode(strm)) return FALSE; if (!m_numberOfMBs.Decode(strm)) return FALSE; if (!m_temporalReference.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_MiscellaneousIndication_type_videoNotDecodedMBs::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_firstMB.Encode(strm); m_numberOfMBs.Encode(strm); m_temporalReference.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_MiscellaneousIndication_type_videoNotDecodedMBs::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_MiscellaneousIndication_type_videoNotDecodedMBs::Class()), PInvalidCast); #endif return new H245_MiscellaneousIndication_type_videoNotDecodedMBs(*this); } // // NewATMVCIndication_aal_aal5 // H245_NewATMVCIndication_aal_aal5::H245_NewATMVCIndication_aal_aal5(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_forwardMaximumSDUSize.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); m_backwardMaximumSDUSize.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H245_NewATMVCIndication_aal_aal5::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "forwardMaximumSDUSize = " << setprecision(indent) << m_forwardMaximumSDUSize << '\n'; strm << setw(indent+25) << "backwardMaximumSDUSize = " << setprecision(indent) << m_backwardMaximumSDUSize << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_NewATMVCIndication_aal_aal5::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_NewATMVCIndication_aal_aal5), PInvalidCast); #endif const H245_NewATMVCIndication_aal_aal5 & other = (const H245_NewATMVCIndication_aal_aal5 &)obj; Comparison result; if ((result = m_forwardMaximumSDUSize.Compare(other.m_forwardMaximumSDUSize)) != EqualTo) return result; if ((result = m_backwardMaximumSDUSize.Compare(other.m_backwardMaximumSDUSize)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_NewATMVCIndication_aal_aal5::GetDataLength() const { PINDEX length = 0; length += m_forwardMaximumSDUSize.GetObjectLength(); length += m_backwardMaximumSDUSize.GetObjectLength(); return length; } PBoolean H245_NewATMVCIndication_aal_aal5::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_forwardMaximumSDUSize.Decode(strm)) return FALSE; if (!m_backwardMaximumSDUSize.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_NewATMVCIndication_aal_aal5::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_forwardMaximumSDUSize.Encode(strm); m_backwardMaximumSDUSize.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_NewATMVCIndication_aal_aal5::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NewATMVCIndication_aal_aal5::Class()), PInvalidCast); #endif return new H245_NewATMVCIndication_aal_aal5(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_NewATMVCIndication_reverseParameters_multiplex[]={ {"noMultiplex",0} ,{"transportStream",1} ,{"programStream",2} }; #endif // // NewATMVCIndication_reverseParameters_multiplex // H245_NewATMVCIndication_reverseParameters_multiplex::H245_NewATMVCIndication_reverseParameters_multiplex(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_NewATMVCIndication_reverseParameters_multiplex,3 #endif ) { } PBoolean H245_NewATMVCIndication_reverseParameters_multiplex::CreateObject() { choice = (tag <= e_programStream) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_NewATMVCIndication_reverseParameters_multiplex::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_NewATMVCIndication_reverseParameters_multiplex::Class()), PInvalidCast); #endif return new H245_NewATMVCIndication_reverseParameters_multiplex(*this); } // // UserInputIndication_signal_rtp // H245_UserInputIndication_signal_rtp::H245_UserInputIndication_signal_rtp(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_timestamp.SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); m_expirationTime.SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); } #ifndef PASN_NOPRINTON void H245_UserInputIndication_signal_rtp::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_timestamp)) strm << setw(indent+12) << "timestamp = " << setprecision(indent) << m_timestamp << '\n'; if (HasOptionalField(e_expirationTime)) strm << setw(indent+17) << "expirationTime = " << setprecision(indent) << m_expirationTime << '\n'; strm << setw(indent+23) << "logicalChannelNumber = " << setprecision(indent) << m_logicalChannelNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_UserInputIndication_signal_rtp::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_UserInputIndication_signal_rtp), PInvalidCast); #endif const H245_UserInputIndication_signal_rtp & other = (const H245_UserInputIndication_signal_rtp &)obj; Comparison result; if ((result = m_timestamp.Compare(other.m_timestamp)) != EqualTo) return result; if ((result = m_expirationTime.Compare(other.m_expirationTime)) != EqualTo) return result; if ((result = m_logicalChannelNumber.Compare(other.m_logicalChannelNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_UserInputIndication_signal_rtp::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_timestamp)) length += m_timestamp.GetObjectLength(); if (HasOptionalField(e_expirationTime)) length += m_expirationTime.GetObjectLength(); length += m_logicalChannelNumber.GetObjectLength(); return length; } PBoolean H245_UserInputIndication_signal_rtp::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_timestamp) && !m_timestamp.Decode(strm)) return FALSE; if (HasOptionalField(e_expirationTime) && !m_expirationTime.Decode(strm)) return FALSE; if (!m_logicalChannelNumber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_UserInputIndication_signal_rtp::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_timestamp)) m_timestamp.Encode(strm); if (HasOptionalField(e_expirationTime)) m_expirationTime.Encode(strm); m_logicalChannelNumber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_UserInputIndication_signal_rtp::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_UserInputIndication_signal_rtp::Class()), PInvalidCast); #endif return new H245_UserInputIndication_signal_rtp(*this); } // // UserInputIndication_signalUpdate_rtp // H245_UserInputIndication_signalUpdate_rtp::H245_UserInputIndication_signalUpdate_rtp(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_UserInputIndication_signalUpdate_rtp::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+23) << "logicalChannelNumber = " << setprecision(indent) << m_logicalChannelNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_UserInputIndication_signalUpdate_rtp::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_UserInputIndication_signalUpdate_rtp), PInvalidCast); #endif const H245_UserInputIndication_signalUpdate_rtp & other = (const H245_UserInputIndication_signalUpdate_rtp &)obj; Comparison result; if ((result = m_logicalChannelNumber.Compare(other.m_logicalChannelNumber)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_UserInputIndication_signalUpdate_rtp::GetDataLength() const { PINDEX length = 0; length += m_logicalChannelNumber.GetObjectLength(); return length; } PBoolean H245_UserInputIndication_signalUpdate_rtp::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_logicalChannelNumber.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_UserInputIndication_signalUpdate_rtp::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_logicalChannelNumber.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_UserInputIndication_signalUpdate_rtp::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_UserInputIndication_signalUpdate_rtp::Class()), PInvalidCast); #endif return new H245_UserInputIndication_signalUpdate_rtp(*this); } // // UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric // H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric::H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "algorithmOID = " << setprecision(indent) << m_algorithmOID << '\n'; if (HasOptionalField(e_paramS)) strm << setw(indent+9) << "paramS = " << setprecision(indent) << m_paramS << '\n'; strm << setw(indent+12) << "encrypted = " << setprecision(indent) << m_encrypted << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric), PInvalidCast); #endif const H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric & other = (const H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric &)obj; Comparison result; if ((result = m_algorithmOID.Compare(other.m_algorithmOID)) != EqualTo) return result; if ((result = m_paramS.Compare(other.m_paramS)) != EqualTo) return result; if ((result = m_encrypted.Compare(other.m_encrypted)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric::GetDataLength() const { PINDEX length = 0; length += m_algorithmOID.GetObjectLength(); if (HasOptionalField(e_paramS)) length += m_paramS.GetObjectLength(); length += m_encrypted.GetObjectLength(); return length; } PBoolean H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_algorithmOID.Decode(strm)) return FALSE; if (HasOptionalField(e_paramS) && !m_paramS.Decode(strm)) return FALSE; if (!m_encrypted.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_algorithmOID.Encode(strm); if (HasOptionalField(e_paramS)) m_paramS.Encode(strm); m_encrypted.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric::Class()), PInvalidCast); #endif return new H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric(*this); } // // VCCapability_availableBitRates_type_rangeOfBitRates // H245_VCCapability_availableBitRates_type_rangeOfBitRates::H245_VCCapability_availableBitRates_type_rangeOfBitRates(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { m_lowerBitRate.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); m_higherBitRate.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } #ifndef PASN_NOPRINTON void H245_VCCapability_availableBitRates_type_rangeOfBitRates::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "lowerBitRate = " << setprecision(indent) << m_lowerBitRate << '\n'; strm << setw(indent+16) << "higherBitRate = " << setprecision(indent) << m_higherBitRate << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_VCCapability_availableBitRates_type_rangeOfBitRates::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_VCCapability_availableBitRates_type_rangeOfBitRates), PInvalidCast); #endif const H245_VCCapability_availableBitRates_type_rangeOfBitRates & other = (const H245_VCCapability_availableBitRates_type_rangeOfBitRates &)obj; Comparison result; if ((result = m_lowerBitRate.Compare(other.m_lowerBitRate)) != EqualTo) return result; if ((result = m_higherBitRate.Compare(other.m_higherBitRate)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_VCCapability_availableBitRates_type_rangeOfBitRates::GetDataLength() const { PINDEX length = 0; length += m_lowerBitRate.GetObjectLength(); length += m_higherBitRate.GetObjectLength(); return length; } PBoolean H245_VCCapability_availableBitRates_type_rangeOfBitRates::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_lowerBitRate.Decode(strm)) return FALSE; if (!m_higherBitRate.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_VCCapability_availableBitRates_type_rangeOfBitRates::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_lowerBitRate.Encode(strm); m_higherBitRate.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_VCCapability_availableBitRates_type_rangeOfBitRates::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_VCCapability_availableBitRates_type_rangeOfBitRates::Class()), PInvalidCast); #endif return new H245_VCCapability_availableBitRates_type_rangeOfBitRates(*this); } // // CustomPictureFormat_mPI_customPCF_subtype // H245_CustomPictureFormat_mPI_customPCF_subtype::H245_CustomPictureFormat_mPI_customPCF_subtype(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_clockConversionCode.SetConstraints(PASN_Object::FixedConstraint, 1000, 1001); m_clockDivisor.SetConstraints(PASN_Object::FixedConstraint, 1, 127); m_customMPI.SetConstraints(PASN_Object::FixedConstraint, 1, 2048); } #ifndef PASN_NOPRINTON void H245_CustomPictureFormat_mPI_customPCF_subtype::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+22) << "clockConversionCode = " << setprecision(indent) << m_clockConversionCode << '\n'; strm << setw(indent+15) << "clockDivisor = " << setprecision(indent) << m_clockDivisor << '\n'; strm << setw(indent+12) << "customMPI = " << setprecision(indent) << m_customMPI << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_CustomPictureFormat_mPI_customPCF_subtype::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_CustomPictureFormat_mPI_customPCF_subtype), PInvalidCast); #endif const H245_CustomPictureFormat_mPI_customPCF_subtype & other = (const H245_CustomPictureFormat_mPI_customPCF_subtype &)obj; Comparison result; if ((result = m_clockConversionCode.Compare(other.m_clockConversionCode)) != EqualTo) return result; if ((result = m_clockDivisor.Compare(other.m_clockDivisor)) != EqualTo) return result; if ((result = m_customMPI.Compare(other.m_customMPI)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_CustomPictureFormat_mPI_customPCF_subtype::GetDataLength() const { PINDEX length = 0; length += m_clockConversionCode.GetObjectLength(); length += m_clockDivisor.GetObjectLength(); length += m_customMPI.GetObjectLength(); return length; } PBoolean H245_CustomPictureFormat_mPI_customPCF_subtype::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_clockConversionCode.Decode(strm)) return FALSE; if (!m_clockDivisor.Decode(strm)) return FALSE; if (!m_customMPI.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_CustomPictureFormat_mPI_customPCF_subtype::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_clockConversionCode.Encode(strm); m_clockDivisor.Encode(strm); m_customMPI.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_CustomPictureFormat_mPI_customPCF_subtype::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CustomPictureFormat_mPI_customPCF_subtype::Class()), PInvalidCast); #endif return new H245_CustomPictureFormat_mPI_customPCF_subtype(*this); } // // CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype // H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype::H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_width.SetConstraints(PASN_Object::FixedConstraint, 1, 255); m_height.SetConstraints(PASN_Object::FixedConstraint, 1, 255); } #ifndef PASN_NOPRINTON void H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+8) << "width = " << setprecision(indent) << m_width << '\n'; strm << setw(indent+9) << "height = " << setprecision(indent) << m_height << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype), PInvalidCast); #endif const H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype & other = (const H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype &)obj; Comparison result; if ((result = m_width.Compare(other.m_width)) != EqualTo) return result; if ((result = m_height.Compare(other.m_height)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype::GetDataLength() const { PINDEX length = 0; length += m_width.GetObjectLength(); length += m_height.GetObjectLength(); return length; } PBoolean H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_width.Decode(strm)) return FALSE; if (!m_height.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_width.Encode(strm); m_height.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype::Class()), PInvalidCast); #endif return new H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_V76LogicalChannelParameters_mode_eRM_recovery[]={ {"rej",0} ,{"sREJ",1} ,{"mSREJ",2} }; #endif // // V76LogicalChannelParameters_mode_eRM_recovery // H245_V76LogicalChannelParameters_mode_eRM_recovery::H245_V76LogicalChannelParameters_mode_eRM_recovery(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_V76LogicalChannelParameters_mode_eRM_recovery,3 #endif ) { } PBoolean H245_V76LogicalChannelParameters_mode_eRM_recovery::CreateObject() { choice = (tag <= e_mSREJ) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H245_V76LogicalChannelParameters_mode_eRM_recovery::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_V76LogicalChannelParameters_mode_eRM_recovery::Class()), PInvalidCast); #endif return new H245_V76LogicalChannelParameters_mode_eRM_recovery(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H245_DepFECData_rfc2733_mode_separateStream[]={ {"differentPort",0} ,{"samePort",1} }; #endif // // DepFECData_rfc2733_mode_separateStream // H245_DepFECData_rfc2733_mode_separateStream::H245_DepFECData_rfc2733_mode_separateStream(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H245_DepFECData_rfc2733_mode_separateStream,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DepFECData_rfc2733_mode_separateStream::operator H245_DepFECData_rfc2733_mode_separateStream_differentPort &() const #else H245_DepFECData_rfc2733_mode_separateStream::operator H245_DepFECData_rfc2733_mode_separateStream_differentPort &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECData_rfc2733_mode_separateStream_differentPort), PInvalidCast); #endif return *(H245_DepFECData_rfc2733_mode_separateStream_differentPort *)choice; } H245_DepFECData_rfc2733_mode_separateStream::operator const H245_DepFECData_rfc2733_mode_separateStream_differentPort &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECData_rfc2733_mode_separateStream_differentPort), PInvalidCast); #endif return *(H245_DepFECData_rfc2733_mode_separateStream_differentPort *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H245_DepFECData_rfc2733_mode_separateStream::operator H245_DepFECData_rfc2733_mode_separateStream_samePort &() const #else H245_DepFECData_rfc2733_mode_separateStream::operator H245_DepFECData_rfc2733_mode_separateStream_samePort &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECData_rfc2733_mode_separateStream_samePort), PInvalidCast); #endif return *(H245_DepFECData_rfc2733_mode_separateStream_samePort *)choice; } H245_DepFECData_rfc2733_mode_separateStream::operator const H245_DepFECData_rfc2733_mode_separateStream_samePort &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H245_DepFECData_rfc2733_mode_separateStream_samePort), PInvalidCast); #endif return *(H245_DepFECData_rfc2733_mode_separateStream_samePort *)choice; } PBoolean H245_DepFECData_rfc2733_mode_separateStream::CreateObject() { switch (tag) { case e_differentPort : choice = new H245_DepFECData_rfc2733_mode_separateStream_differentPort(); return TRUE; case e_samePort : choice = new H245_DepFECData_rfc2733_mode_separateStream_samePort(); return TRUE; } choice = NULL; return FALSE; } PObject * H245_DepFECData_rfc2733_mode_separateStream::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_DepFECData_rfc2733_mode_separateStream::Class()), PInvalidCast); #endif return new H245_DepFECData_rfc2733_mode_separateStream(*this); } // // FECData_rfc2733_pktMode_rfc2733sameport // H245_FECData_rfc2733_pktMode_rfc2733sameport::H245_FECData_rfc2733_pktMode_rfc2733sameport(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H245_FECData_rfc2733_pktMode_rfc2733sameport::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX H245_FECData_rfc2733_pktMode_rfc2733sameport::GetDataLength() const { PINDEX length = 0; return length; } PBoolean H245_FECData_rfc2733_pktMode_rfc2733sameport::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H245_FECData_rfc2733_pktMode_rfc2733sameport::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * H245_FECData_rfc2733_pktMode_rfc2733sameport::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H245_FECData_rfc2733_pktMode_rfc2733sameport::Class()), PInvalidCast); #endif return new H245_FECData_rfc2733_pktMode_rfc2733sameport(*this); } #endif // if ! H323_DISABLE_H245 // End of h245_2.cxx h323plus/src/x224.cxx0000644000175000017500000001173411015524402013121 0ustar markmark/* * x224.cxx * * X.224 protocol handler * * Open H323 Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: x224.cxx,v $ * Revision 1.2 2008/05/23 11:22:42 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:51:08 shorne * First commit of h323plus * * Revision 1.12 2002/09/03 06:21:01 robertj * Cosmetic change to formatting. * * Revision 1.11 2002/08/05 10:03:48 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.10 2002/06/27 03:11:12 robertj * Fixed encoding bugs, thanks Greg Adams * * Revision 1.9 2001/02/09 05:13:56 craigs * Added pragma implementation to (hopefully) reduce the executable image size * under Linux * * Revision 1.8 2000/05/02 04:32:28 robertj * Fixed copyright notice comment. * * Revision 1.7 2000/04/18 11:36:40 robertj * Fixed bug in setting data compont size in X224 packet, thanks Wolfgang Platzer * * Revision 1.6 1999/11/19 01:00:07 robertj * Fixed bug that disallowed zero length data PDU's, thanks Dave Kristol. * * Revision 1.5 1999/11/15 14:11:29 robertj * Fixed trace output stream being put back after setting hex/fillchar modes. * * Revision 1.4 1999/09/03 14:03:54 robertj * Fixed warning under GNU compiler. * * Revision 1.3 1999/08/31 13:30:20 robertj * Added gatekeeper support. * * Revision 1.2 1999/06/09 05:26:20 robertj * Major restructuring of classes. * * Revision 1.1 1998/12/14 09:13:48 robertj * Initial revision * */ #include #ifdef __GNUC__ #pragma implementation "x224.h" #endif #include "x224.h" #include /////////////////////////////////////////////////////////////////////////////// X224::X224() { } void X224::PrintOn(ostream & strm) const { int indent = 2; strm << setprecision(indent) << "{\n" << setw(indent) << ' ' << "code="; switch (GetCode()) { case ConnectRequest : strm << "ConnectRequest"; break; case ConnectConfirm : strm << "ConnectConfirm"; break; case DataPDU : strm << "DataPDU"; } char fillchar = strm.fill(); strm << '\n' << setw(indent) << ' ' << "data: " << data.GetSize() << " bytes\n" << hex; PINDEX i = 0; while (i < data.GetSize()) { strm << setfill(' ') << setw(indent) << ' ' << setfill('0'); PINDEX j; for (j = 0; j < 16; j++) if (i+j < data.GetSize()) strm << setw(2) << (unsigned)data[i+j] << ' '; else strm << " "; strm << " "; for (j = 0; j < 16; j++) { if (i+j < data.GetSize()) { if (isprint(data[i+j])) strm << data[i+j]; else strm << ' '; } } strm << '\n'; i += 16; } strm << dec << setfill(fillchar) << setw(indent-1) << '}' << setprecision(indent-2); } PBoolean X224::Decode(const PBYTEArray & rawData) { PINDEX packetLength = rawData.GetSize(); PINDEX headerLength = rawData[0]; if (packetLength < headerLength + 1) // Not enough bytes return FALSE; header.SetSize(headerLength); memcpy(header.GetPointer(), (const BYTE *)rawData+1, headerLength); packetLength -= headerLength + 1; data.SetSize(packetLength); if (packetLength > 0) memcpy(data.GetPointer(), (const BYTE *)rawData+headerLength+1, packetLength); return TRUE; } PBoolean X224::Encode(PBYTEArray & rawData) const { PINDEX headerLength = header.GetSize(); PINDEX dataLength = data.GetSize(); if (!rawData.SetSize(headerLength + dataLength + 1)) return FALSE; rawData[0] = (BYTE)headerLength; memcpy(rawData.GetPointer() + 1, header, headerLength); if (dataLength > 0) memcpy(rawData.GetPointer()+headerLength+1, data, dataLength); return TRUE; } void X224::BuildConnectRequest() { data.SetSize(0); header.SetSize(6); header[0] = ConnectRequest; header[1] = 0; header[2] = 0x7b; header[3] = 2; header[4] = 0; header[5] = 0; } void X224::BuildConnectConfirm() { data.SetSize(0); header.SetSize(6); header[0] = ConnectConfirm; header[1] = 0; header[2] = 0x7b; header[3] = 2; header[4] = 0; header[5] = 0; } void X224::BuildData(const PBYTEArray & d) { header.SetSize(2); header[0] = DataPDU; header[1] = 0x80; data = d; } ///////////////////////////////////////////////////////////////////////////// h323plus/src/h225_2.cxx0000644000175000017500000161200711015524270013327 0ustar markmark// // h225_2.cxx // // Code automatically generated by asnparse. // #include #include "h225.h" #define new PNEW #if ! H323_DISABLE_H225 // // ArrayOf_EnumeratedParameter // H225_ArrayOf_EnumeratedParameter::H225_ArrayOf_EnumeratedParameter(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_EnumeratedParameter::CreateObject() const { return new H225_EnumeratedParameter; } H225_EnumeratedParameter & H225_ArrayOf_EnumeratedParameter::operator[](PINDEX i) const { return (H225_EnumeratedParameter &)array[i]; } PObject * H225_ArrayOf_EnumeratedParameter::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_EnumeratedParameter::Class()), PInvalidCast); #endif return new H225_ArrayOf_EnumeratedParameter(*this); } // // RTPSession_associatedSessionIds // H225_RTPSession_associatedSessionIds::H225_RTPSession_associatedSessionIds(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_RTPSession_associatedSessionIds::CreateObject() const { PASN_Integer * obj = new PASN_Integer; obj->SetConstraints(PASN_Object::FixedConstraint, 1, 255); return obj; } PASN_Integer & H225_RTPSession_associatedSessionIds::operator[](PINDEX i) const { return (PASN_Integer &)array[i]; } PObject * H225_RTPSession_associatedSessionIds::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_RTPSession_associatedSessionIds::Class()), PInvalidCast); #endif return new H225_RTPSession_associatedSessionIds(*this); } // // ArrayOf_AdmissionConfirm // H225_ArrayOf_AdmissionConfirm::H225_ArrayOf_AdmissionConfirm(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_AdmissionConfirm::CreateObject() const { return new H225_AdmissionConfirm; } H225_AdmissionConfirm & H225_ArrayOf_AdmissionConfirm::operator[](PINDEX i) const { return (H225_AdmissionConfirm &)array[i]; } PObject * H225_ArrayOf_AdmissionConfirm::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_AdmissionConfirm::Class()), PInvalidCast); #endif return new H225_ArrayOf_AdmissionConfirm(*this); } // // ArrayOf_Endpoint // H225_ArrayOf_Endpoint::H225_ArrayOf_Endpoint(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_Endpoint::CreateObject() const { return new H225_Endpoint; } H225_Endpoint & H225_ArrayOf_Endpoint::operator[](PINDEX i) const { return (H225_Endpoint &)array[i]; } PObject * H225_ArrayOf_Endpoint::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_Endpoint::Class()), PInvalidCast); #endif return new H225_ArrayOf_Endpoint(*this); } // // ArrayOf_AuthenticationMechanism // H225_ArrayOf_AuthenticationMechanism::H225_ArrayOf_AuthenticationMechanism(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_AuthenticationMechanism::CreateObject() const { return new H235_AuthenticationMechanism; } H235_AuthenticationMechanism & H225_ArrayOf_AuthenticationMechanism::operator[](PINDEX i) const { return (H235_AuthenticationMechanism &)array[i]; } PObject * H225_ArrayOf_AuthenticationMechanism::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_AuthenticationMechanism::Class()), PInvalidCast); #endif return new H225_ArrayOf_AuthenticationMechanism(*this); } // // ArrayOf_PASN_ObjectId // H225_ArrayOf_PASN_ObjectId::H225_ArrayOf_PASN_ObjectId(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_PASN_ObjectId::CreateObject() const { return new PASN_ObjectId; } PASN_ObjectId & H225_ArrayOf_PASN_ObjectId::operator[](PINDEX i) const { return (PASN_ObjectId &)array[i]; } PObject * H225_ArrayOf_PASN_ObjectId::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_PASN_ObjectId::Class()), PInvalidCast); #endif return new H225_ArrayOf_PASN_ObjectId(*this); } // // ArrayOf_IntegrityMechanism // H225_ArrayOf_IntegrityMechanism::H225_ArrayOf_IntegrityMechanism(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_IntegrityMechanism::CreateObject() const { return new H225_IntegrityMechanism; } H225_IntegrityMechanism & H225_ArrayOf_IntegrityMechanism::operator[](PINDEX i) const { return (H225_IntegrityMechanism &)array[i]; } PObject * H225_ArrayOf_IntegrityMechanism::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_IntegrityMechanism::Class()), PInvalidCast); #endif return new H225_ArrayOf_IntegrityMechanism(*this); } // // ArrayOf_AddressPattern // H225_ArrayOf_AddressPattern::H225_ArrayOf_AddressPattern(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_AddressPattern::CreateObject() const { return new H225_AddressPattern; } H225_AddressPattern & H225_ArrayOf_AddressPattern::operator[](PINDEX i) const { return (H225_AddressPattern &)array[i]; } PObject * H225_ArrayOf_AddressPattern::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_AddressPattern::Class()), PInvalidCast); #endif return new H225_ArrayOf_AddressPattern(*this); } // // ArrayOf_H248PackagesDescriptor // H225_ArrayOf_H248PackagesDescriptor::H225_ArrayOf_H248PackagesDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_H248PackagesDescriptor::CreateObject() const { return new H225_H248PackagesDescriptor; } H225_H248PackagesDescriptor & H225_ArrayOf_H248PackagesDescriptor::operator[](PINDEX i) const { return (H225_H248PackagesDescriptor &)array[i]; } PObject * H225_ArrayOf_H248PackagesDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_H248PackagesDescriptor::Class()), PInvalidCast); #endif return new H225_ArrayOf_H248PackagesDescriptor(*this); } // // RegistrationRequest_language // H225_RegistrationRequest_language::H225_RegistrationRequest_language(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_RegistrationRequest_language::CreateObject() const { PASN_IA5String * obj = new PASN_IA5String; obj->SetConstraints(PASN_Object::FixedConstraint, 1, 32); return obj; } PASN_IA5String & H225_RegistrationRequest_language::operator[](PINDEX i) const { return (PASN_IA5String &)array[i]; } PObject * H225_RegistrationRequest_language::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_RegistrationRequest_language::Class()), PInvalidCast); #endif return new H225_RegistrationRequest_language(*this); } // // ArrayOf_RasUsageSpecification // H225_ArrayOf_RasUsageSpecification::H225_ArrayOf_RasUsageSpecification(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_RasUsageSpecification::CreateObject() const { return new H225_RasUsageSpecification; } H225_RasUsageSpecification & H225_ArrayOf_RasUsageSpecification::operator[](PINDEX i) const { return (H225_RasUsageSpecification &)array[i]; } PObject * H225_ArrayOf_RasUsageSpecification::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_RasUsageSpecification::Class()), PInvalidCast); #endif return new H225_ArrayOf_RasUsageSpecification(*this); } // // RegistrationRejectReason_invalidTerminalAliases // H225_RegistrationRejectReason_invalidTerminalAliases::H225_RegistrationRejectReason_invalidTerminalAliases(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_RegistrationRejectReason_invalidTerminalAliases::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_terminalAlias)) strm << setw(indent+16) << "terminalAlias = " << setprecision(indent) << m_terminalAlias << '\n'; if (HasOptionalField(e_terminalAliasPattern)) strm << setw(indent+23) << "terminalAliasPattern = " << setprecision(indent) << m_terminalAliasPattern << '\n'; if (HasOptionalField(e_supportedPrefixes)) strm << setw(indent+20) << "supportedPrefixes = " << setprecision(indent) << m_supportedPrefixes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_RegistrationRejectReason_invalidTerminalAliases::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_RegistrationRejectReason_invalidTerminalAliases), PInvalidCast); #endif const H225_RegistrationRejectReason_invalidTerminalAliases & other = (const H225_RegistrationRejectReason_invalidTerminalAliases &)obj; Comparison result; if ((result = m_terminalAlias.Compare(other.m_terminalAlias)) != EqualTo) return result; if ((result = m_terminalAliasPattern.Compare(other.m_terminalAliasPattern)) != EqualTo) return result; if ((result = m_supportedPrefixes.Compare(other.m_supportedPrefixes)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_RegistrationRejectReason_invalidTerminalAliases::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_terminalAlias)) length += m_terminalAlias.GetObjectLength(); if (HasOptionalField(e_terminalAliasPattern)) length += m_terminalAliasPattern.GetObjectLength(); if (HasOptionalField(e_supportedPrefixes)) length += m_supportedPrefixes.GetObjectLength(); return length; } PBoolean H225_RegistrationRejectReason_invalidTerminalAliases::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_terminalAlias) && !m_terminalAlias.Decode(strm)) return FALSE; if (HasOptionalField(e_terminalAliasPattern) && !m_terminalAliasPattern.Decode(strm)) return FALSE; if (HasOptionalField(e_supportedPrefixes) && !m_supportedPrefixes.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_RegistrationRejectReason_invalidTerminalAliases::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_terminalAlias)) m_terminalAlias.Encode(strm); if (HasOptionalField(e_terminalAliasPattern)) m_terminalAliasPattern.Encode(strm); if (HasOptionalField(e_supportedPrefixes)) m_supportedPrefixes.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_RegistrationRejectReason_invalidTerminalAliases::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_RegistrationRejectReason_invalidTerminalAliases::Class()), PInvalidCast); #endif return new H225_RegistrationRejectReason_invalidTerminalAliases(*this); } // // ArrayOf_QOSCapability // H225_ArrayOf_QOSCapability::H225_ArrayOf_QOSCapability(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_QOSCapability::CreateObject() const { return new H245_QOSCapability; } H245_QOSCapability & H225_ArrayOf_QOSCapability::operator[](PINDEX i) const { return (H245_QOSCapability &)array[i]; } PObject * H225_ArrayOf_QOSCapability::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_QOSCapability::Class()), PInvalidCast); #endif return new H225_ArrayOf_QOSCapability(*this); } // // AdmissionConfirm_language // H225_AdmissionConfirm_language::H225_AdmissionConfirm_language(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_AdmissionConfirm_language::CreateObject() const { PASN_IA5String * obj = new PASN_IA5String; obj->SetConstraints(PASN_Object::FixedConstraint, 1, 32); return obj; } PASN_IA5String & H225_AdmissionConfirm_language::operator[](PINDEX i) const { return (PASN_IA5String &)array[i]; } PObject * H225_AdmissionConfirm_language::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_AdmissionConfirm_language::Class()), PInvalidCast); #endif return new H225_AdmissionConfirm_language(*this); } // // ArrayOf_PartyNumber // H225_ArrayOf_PartyNumber::H225_ArrayOf_PartyNumber(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_PartyNumber::CreateObject() const { return new H225_PartyNumber; } H225_PartyNumber & H225_ArrayOf_PartyNumber::operator[](PINDEX i) const { return (H225_PartyNumber &)array[i]; } PObject * H225_ArrayOf_PartyNumber::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_PartyNumber::Class()), PInvalidCast); #endif return new H225_ArrayOf_PartyNumber(*this); } // // ArrayOf_BandwidthDetails // H225_ArrayOf_BandwidthDetails::H225_ArrayOf_BandwidthDetails(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_BandwidthDetails::CreateObject() const { return new H225_BandwidthDetails; } H225_BandwidthDetails & H225_ArrayOf_BandwidthDetails::operator[](PINDEX i) const { return (H225_BandwidthDetails &)array[i]; } PObject * H225_ArrayOf_BandwidthDetails::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_BandwidthDetails::Class()), PInvalidCast); #endif return new H225_ArrayOf_BandwidthDetails(*this); } // // LocationRequest_language // H225_LocationRequest_language::H225_LocationRequest_language(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_LocationRequest_language::CreateObject() const { PASN_IA5String * obj = new PASN_IA5String; obj->SetConstraints(PASN_Object::FixedConstraint, 1, 32); return obj; } PASN_IA5String & H225_LocationRequest_language::operator[](PINDEX i) const { return (PASN_IA5String &)array[i]; } PObject * H225_LocationRequest_language::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_LocationRequest_language::Class()), PInvalidCast); #endif return new H225_LocationRequest_language(*this); } // // InfoRequestResponse_perCallInfo // H225_InfoRequestResponse_perCallInfo::H225_InfoRequestResponse_perCallInfo(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_InfoRequestResponse_perCallInfo::CreateObject() const { return new H225_InfoRequestResponse_perCallInfo_subtype; } H225_InfoRequestResponse_perCallInfo_subtype & H225_InfoRequestResponse_perCallInfo::operator[](PINDEX i) const { return (H225_InfoRequestResponse_perCallInfo_subtype &)array[i]; } PObject * H225_InfoRequestResponse_perCallInfo::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_InfoRequestResponse_perCallInfo::Class()), PInvalidCast); #endif return new H225_InfoRequestResponse_perCallInfo(*this); } // // ServiceControlIndication_callSpecific // H225_ServiceControlIndication_callSpecific::H225_ServiceControlIndication_callSpecific(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_ServiceControlIndication_callSpecific::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "callIdentifier = " << setprecision(indent) << m_callIdentifier << '\n'; strm << setw(indent+15) << "conferenceID = " << setprecision(indent) << m_conferenceID << '\n'; strm << setw(indent+15) << "answeredCall = " << setprecision(indent) << m_answeredCall << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_ServiceControlIndication_callSpecific::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_ServiceControlIndication_callSpecific), PInvalidCast); #endif const H225_ServiceControlIndication_callSpecific & other = (const H225_ServiceControlIndication_callSpecific &)obj; Comparison result; if ((result = m_callIdentifier.Compare(other.m_callIdentifier)) != EqualTo) return result; if ((result = m_conferenceID.Compare(other.m_conferenceID)) != EqualTo) return result; if ((result = m_answeredCall.Compare(other.m_answeredCall)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_ServiceControlIndication_callSpecific::GetDataLength() const { PINDEX length = 0; length += m_callIdentifier.GetObjectLength(); length += m_conferenceID.GetObjectLength(); length += m_answeredCall.GetObjectLength(); return length; } PBoolean H225_ServiceControlIndication_callSpecific::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_callIdentifier.Decode(strm)) return FALSE; if (!m_conferenceID.Decode(strm)) return FALSE; if (!m_answeredCall.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_ServiceControlIndication_callSpecific::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_callIdentifier.Encode(strm); m_conferenceID.Encode(strm); m_answeredCall.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_ServiceControlIndication_callSpecific::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ServiceControlIndication_callSpecific::Class()), PInvalidCast); #endif return new H225_ServiceControlIndication_callSpecific(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_ServiceControlResponse_result[]={ {"started",0} ,{"failed",1} ,{"stopped",2} ,{"notAvailable",3} ,{"neededFeatureNotSupported",4} }; #endif // // ServiceControlResponse_result // H225_ServiceControlResponse_result::H225_ServiceControlResponse_result(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 5, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_ServiceControlResponse_result,5 #endif ) { } PBoolean H225_ServiceControlResponse_result::CreateObject() { choice = (tag <= e_neededFeatureNotSupported) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H225_ServiceControlResponse_result::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ServiceControlResponse_result::Class()), PInvalidCast); #endif return new H225_ServiceControlResponse_result(*this); } // // TransportAddress_ipSourceRoute_route // H225_TransportAddress_ipSourceRoute_route::H225_TransportAddress_ipSourceRoute_route(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_TransportAddress_ipSourceRoute_route::CreateObject() const { PASN_OctetString * obj = new PASN_OctetString; obj->SetConstraints(PASN_Object::FixedConstraint, 4); return obj; } PASN_OctetString & H225_TransportAddress_ipSourceRoute_route::operator[](PINDEX i) const { return (PASN_OctetString &)array[i]; } PObject * H225_TransportAddress_ipSourceRoute_route::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_TransportAddress_ipSourceRoute_route::Class()), PInvalidCast); #endif return new H225_TransportAddress_ipSourceRoute_route(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H225_TransportAddress_ipSourceRoute_routing[]={ {"strict",0} ,{"loose",1} }; #endif // // TransportAddress_ipSourceRoute_routing // H225_TransportAddress_ipSourceRoute_routing::H225_TransportAddress_ipSourceRoute_routing(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H225_TransportAddress_ipSourceRoute_routing,2 #endif ) { } PBoolean H225_TransportAddress_ipSourceRoute_routing::CreateObject() { choice = (tag <= e_loose) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H225_TransportAddress_ipSourceRoute_routing::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_TransportAddress_ipSourceRoute_routing::Class()), PInvalidCast); #endif return new H225_TransportAddress_ipSourceRoute_routing(*this); } // // ArrayOf_RTPSession // H225_ArrayOf_RTPSession::H225_ArrayOf_RTPSession(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_RTPSession::CreateObject() const { return new H225_RTPSession; } H225_RTPSession & H225_ArrayOf_RTPSession::operator[](PINDEX i) const { return (H225_RTPSession &)array[i]; } PObject * H225_ArrayOf_RTPSession::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_RTPSession::Class()), PInvalidCast); #endif return new H225_ArrayOf_RTPSession(*this); } // // ArrayOf_TransportChannelInfo // H225_ArrayOf_TransportChannelInfo::H225_ArrayOf_TransportChannelInfo(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_TransportChannelInfo::CreateObject() const { return new H225_TransportChannelInfo; } H225_TransportChannelInfo & H225_ArrayOf_TransportChannelInfo::operator[](PINDEX i) const { return (H225_TransportChannelInfo &)array[i]; } PObject * H225_ArrayOf_TransportChannelInfo::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_TransportChannelInfo::Class()), PInvalidCast); #endif return new H225_ArrayOf_TransportChannelInfo(*this); } // // ArrayOf_ConferenceIdentifier // H225_ArrayOf_ConferenceIdentifier::H225_ArrayOf_ConferenceIdentifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_ArrayOf_ConferenceIdentifier::CreateObject() const { return new H225_ConferenceIdentifier; } H225_ConferenceIdentifier & H225_ArrayOf_ConferenceIdentifier::operator[](PINDEX i) const { return (H225_ConferenceIdentifier &)array[i]; } PObject * H225_ArrayOf_ConferenceIdentifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ArrayOf_ConferenceIdentifier::Class()), PInvalidCast); #endif return new H225_ArrayOf_ConferenceIdentifier(*this); } // // InfoRequestResponse_perCallInfo_subtype_pdu // H225_InfoRequestResponse_perCallInfo_subtype_pdu::H225_InfoRequestResponse_perCallInfo_subtype_pdu(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H225_InfoRequestResponse_perCallInfo_subtype_pdu::CreateObject() const { return new H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype; } H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype & H225_InfoRequestResponse_perCallInfo_subtype_pdu::operator[](PINDEX i) const { return (H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype &)array[i]; } PObject * H225_InfoRequestResponse_perCallInfo_subtype_pdu::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_InfoRequestResponse_perCallInfo_subtype_pdu::Class()), PInvalidCast); #endif return new H225_InfoRequestResponse_perCallInfo_subtype_pdu(*this); } // // Status-UUIE // H225_Status_UUIE::H225_Status_UUIE(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_Status_UUIE::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "protocolIdentifier = " << setprecision(indent) << m_protocolIdentifier << '\n'; strm << setw(indent+17) << "callIdentifier = " << setprecision(indent) << m_callIdentifier << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_Status_UUIE::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_Status_UUIE), PInvalidCast); #endif const H225_Status_UUIE & other = (const H225_Status_UUIE &)obj; Comparison result; if ((result = m_protocolIdentifier.Compare(other.m_protocolIdentifier)) != EqualTo) return result; if ((result = m_callIdentifier.Compare(other.m_callIdentifier)) != EqualTo) return result; if ((result = m_tokens.Compare(other.m_tokens)) != EqualTo) return result; if ((result = m_cryptoTokens.Compare(other.m_cryptoTokens)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_Status_UUIE::GetDataLength() const { PINDEX length = 0; length += m_protocolIdentifier.GetObjectLength(); length += m_callIdentifier.GetObjectLength(); if (HasOptionalField(e_tokens)) length += m_tokens.GetObjectLength(); if (HasOptionalField(e_cryptoTokens)) length += m_cryptoTokens.GetObjectLength(); return length; } PBoolean H225_Status_UUIE::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_protocolIdentifier.Decode(strm)) return FALSE; if (!m_callIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_tokens) && !m_tokens.Decode(strm)) return FALSE; if (HasOptionalField(e_cryptoTokens) && !m_cryptoTokens.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_Status_UUIE::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_protocolIdentifier.Encode(strm); m_callIdentifier.Encode(strm); if (HasOptionalField(e_tokens)) m_tokens.Encode(strm); if (HasOptionalField(e_cryptoTokens)) m_cryptoTokens.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_Status_UUIE::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_Status_UUIE::Class()), PInvalidCast); #endif return new H225_Status_UUIE(*this); } // // StatusInquiry-UUIE // H225_StatusInquiry_UUIE::H225_StatusInquiry_UUIE(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_StatusInquiry_UUIE::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "protocolIdentifier = " << setprecision(indent) << m_protocolIdentifier << '\n'; strm << setw(indent+17) << "callIdentifier = " << setprecision(indent) << m_callIdentifier << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_StatusInquiry_UUIE::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_StatusInquiry_UUIE), PInvalidCast); #endif const H225_StatusInquiry_UUIE & other = (const H225_StatusInquiry_UUIE &)obj; Comparison result; if ((result = m_protocolIdentifier.Compare(other.m_protocolIdentifier)) != EqualTo) return result; if ((result = m_callIdentifier.Compare(other.m_callIdentifier)) != EqualTo) return result; if ((result = m_tokens.Compare(other.m_tokens)) != EqualTo) return result; if ((result = m_cryptoTokens.Compare(other.m_cryptoTokens)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_StatusInquiry_UUIE::GetDataLength() const { PINDEX length = 0; length += m_protocolIdentifier.GetObjectLength(); length += m_callIdentifier.GetObjectLength(); if (HasOptionalField(e_tokens)) length += m_tokens.GetObjectLength(); if (HasOptionalField(e_cryptoTokens)) length += m_cryptoTokens.GetObjectLength(); return length; } PBoolean H225_StatusInquiry_UUIE::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_protocolIdentifier.Decode(strm)) return FALSE; if (!m_callIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_tokens) && !m_tokens.Decode(strm)) return FALSE; if (HasOptionalField(e_cryptoTokens) && !m_cryptoTokens.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_StatusInquiry_UUIE::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_protocolIdentifier.Encode(strm); m_callIdentifier.Encode(strm); if (HasOptionalField(e_tokens)) m_tokens.Encode(strm); if (HasOptionalField(e_cryptoTokens)) m_cryptoTokens.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_StatusInquiry_UUIE::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_StatusInquiry_UUIE::Class()), PInvalidCast); #endif return new H225_StatusInquiry_UUIE(*this); } // // SetupAcknowledge-UUIE // H225_SetupAcknowledge_UUIE::H225_SetupAcknowledge_UUIE(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_SetupAcknowledge_UUIE::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "protocolIdentifier = " << setprecision(indent) << m_protocolIdentifier << '\n'; strm << setw(indent+17) << "callIdentifier = " << setprecision(indent) << m_callIdentifier << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_SetupAcknowledge_UUIE::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_SetupAcknowledge_UUIE), PInvalidCast); #endif const H225_SetupAcknowledge_UUIE & other = (const H225_SetupAcknowledge_UUIE &)obj; Comparison result; if ((result = m_protocolIdentifier.Compare(other.m_protocolIdentifier)) != EqualTo) return result; if ((result = m_callIdentifier.Compare(other.m_callIdentifier)) != EqualTo) return result; if ((result = m_tokens.Compare(other.m_tokens)) != EqualTo) return result; if ((result = m_cryptoTokens.Compare(other.m_cryptoTokens)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_SetupAcknowledge_UUIE::GetDataLength() const { PINDEX length = 0; length += m_protocolIdentifier.GetObjectLength(); length += m_callIdentifier.GetObjectLength(); if (HasOptionalField(e_tokens)) length += m_tokens.GetObjectLength(); if (HasOptionalField(e_cryptoTokens)) length += m_cryptoTokens.GetObjectLength(); return length; } PBoolean H225_SetupAcknowledge_UUIE::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_protocolIdentifier.Decode(strm)) return FALSE; if (!m_callIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_tokens) && !m_tokens.Decode(strm)) return FALSE; if (HasOptionalField(e_cryptoTokens) && !m_cryptoTokens.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_SetupAcknowledge_UUIE::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_protocolIdentifier.Encode(strm); m_callIdentifier.Encode(strm); if (HasOptionalField(e_tokens)) m_tokens.Encode(strm); if (HasOptionalField(e_cryptoTokens)) m_cryptoTokens.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_SetupAcknowledge_UUIE::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_SetupAcknowledge_UUIE::Class()), PInvalidCast); #endif return new H225_SetupAcknowledge_UUIE(*this); } // // Notify-UUIE // H225_Notify_UUIE::H225_Notify_UUIE(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_Notify_UUIE::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "protocolIdentifier = " << setprecision(indent) << m_protocolIdentifier << '\n'; strm << setw(indent+17) << "callIdentifier = " << setprecision(indent) << m_callIdentifier << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_Notify_UUIE::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_Notify_UUIE), PInvalidCast); #endif const H225_Notify_UUIE & other = (const H225_Notify_UUIE &)obj; Comparison result; if ((result = m_protocolIdentifier.Compare(other.m_protocolIdentifier)) != EqualTo) return result; if ((result = m_callIdentifier.Compare(other.m_callIdentifier)) != EqualTo) return result; if ((result = m_tokens.Compare(other.m_tokens)) != EqualTo) return result; if ((result = m_cryptoTokens.Compare(other.m_cryptoTokens)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_Notify_UUIE::GetDataLength() const { PINDEX length = 0; length += m_protocolIdentifier.GetObjectLength(); length += m_callIdentifier.GetObjectLength(); if (HasOptionalField(e_tokens)) length += m_tokens.GetObjectLength(); if (HasOptionalField(e_cryptoTokens)) length += m_cryptoTokens.GetObjectLength(); return length; } PBoolean H225_Notify_UUIE::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_protocolIdentifier.Decode(strm)) return FALSE; if (!m_callIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_tokens) && !m_tokens.Decode(strm)) return FALSE; if (HasOptionalField(e_cryptoTokens) && !m_cryptoTokens.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_Notify_UUIE::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_protocolIdentifier.Encode(strm); m_callIdentifier.Encode(strm); if (HasOptionalField(e_tokens)) m_tokens.Encode(strm); if (HasOptionalField(e_cryptoTokens)) m_cryptoTokens.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_Notify_UUIE::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_Notify_UUIE::Class()), PInvalidCast); #endif return new H225_Notify_UUIE(*this); } // // VendorIdentifier // H225_VendorIdentifier::H225_VendorIdentifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 1) { m_productId.SetConstraints(PASN_Object::FixedConstraint, 1, 256); m_versionId.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H225_VendorIdentifier::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "vendor = " << setprecision(indent) << m_vendor << '\n'; if (HasOptionalField(e_productId)) strm << setw(indent+12) << "productId = " << setprecision(indent) << m_productId << '\n'; if (HasOptionalField(e_versionId)) strm << setw(indent+12) << "versionId = " << setprecision(indent) << m_versionId << '\n'; if (HasOptionalField(e_enterpriseNumber)) strm << setw(indent+19) << "enterpriseNumber = " << setprecision(indent) << m_enterpriseNumber << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_VendorIdentifier::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_VendorIdentifier), PInvalidCast); #endif const H225_VendorIdentifier & other = (const H225_VendorIdentifier &)obj; Comparison result; if ((result = m_vendor.Compare(other.m_vendor)) != EqualTo) return result; if ((result = m_productId.Compare(other.m_productId)) != EqualTo) return result; if ((result = m_versionId.Compare(other.m_versionId)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_VendorIdentifier::GetDataLength() const { PINDEX length = 0; length += m_vendor.GetObjectLength(); if (HasOptionalField(e_productId)) length += m_productId.GetObjectLength(); if (HasOptionalField(e_versionId)) length += m_versionId.GetObjectLength(); return length; } PBoolean H225_VendorIdentifier::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_vendor.Decode(strm)) return FALSE; if (HasOptionalField(e_productId) && !m_productId.Decode(strm)) return FALSE; if (HasOptionalField(e_versionId) && !m_versionId.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_enterpriseNumber, m_enterpriseNumber)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_VendorIdentifier::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_vendor.Encode(strm); if (HasOptionalField(e_productId)) m_productId.Encode(strm); if (HasOptionalField(e_versionId)) m_versionId.Encode(strm); KnownExtensionEncode(strm, e_enterpriseNumber, m_enterpriseNumber); UnknownExtensionsEncode(strm); } PObject * H225_VendorIdentifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_VendorIdentifier::Class()), PInvalidCast); #endif return new H225_VendorIdentifier(*this); } // // TunnelledProtocol // H225_TunnelledProtocol::H225_TunnelledProtocol(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_subIdentifier.SetConstraints(PASN_Object::FixedConstraint, 1, 64); } #ifndef PASN_NOPRINTON void H225_TunnelledProtocol::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+5) << "id = " << setprecision(indent) << m_id << '\n'; if (HasOptionalField(e_subIdentifier)) strm << setw(indent+16) << "subIdentifier = " << setprecision(indent) << m_subIdentifier << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_TunnelledProtocol::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_TunnelledProtocol), PInvalidCast); #endif const H225_TunnelledProtocol & other = (const H225_TunnelledProtocol &)obj; Comparison result; if ((result = m_id.Compare(other.m_id)) != EqualTo) return result; if ((result = m_subIdentifier.Compare(other.m_subIdentifier)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_TunnelledProtocol::GetDataLength() const { PINDEX length = 0; length += m_id.GetObjectLength(); if (HasOptionalField(e_subIdentifier)) length += m_subIdentifier.GetObjectLength(); return length; } PBoolean H225_TunnelledProtocol::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_id.Decode(strm)) return FALSE; if (HasOptionalField(e_subIdentifier) && !m_subIdentifier.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_TunnelledProtocol::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_id.Encode(strm); if (HasOptionalField(e_subIdentifier)) m_subIdentifier.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_TunnelledProtocol::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_TunnelledProtocol::Class()), PInvalidCast); #endif return new H225_TunnelledProtocol(*this); } // // NonStandardParameter // H225_NonStandardParameter::H225_NonStandardParameter(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H225_NonStandardParameter::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "nonStandardIdentifier = " << setprecision(indent) << m_nonStandardIdentifier << '\n'; strm << setw(indent+7) << "data = " << setprecision(indent) << m_data << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_NonStandardParameter::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_NonStandardParameter), PInvalidCast); #endif const H225_NonStandardParameter & other = (const H225_NonStandardParameter &)obj; Comparison result; if ((result = m_nonStandardIdentifier.Compare(other.m_nonStandardIdentifier)) != EqualTo) return result; if ((result = m_data.Compare(other.m_data)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_NonStandardParameter::GetDataLength() const { PINDEX length = 0; length += m_nonStandardIdentifier.GetObjectLength(); length += m_data.GetObjectLength(); return length; } PBoolean H225_NonStandardParameter::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nonStandardIdentifier.Decode(strm)) return FALSE; if (!m_data.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_NonStandardParameter::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nonStandardIdentifier.Encode(strm); m_data.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_NonStandardParameter::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_NonStandardParameter::Class()), PInvalidCast); #endif return new H225_NonStandardParameter(*this); } // // PublicPartyNumber // H225_PublicPartyNumber::H225_PublicPartyNumber(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H225_PublicPartyNumber::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "publicTypeOfNumber = " << setprecision(indent) << m_publicTypeOfNumber << '\n'; strm << setw(indent+21) << "publicNumberDigits = " << setprecision(indent) << m_publicNumberDigits << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_PublicPartyNumber::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_PublicPartyNumber), PInvalidCast); #endif const H225_PublicPartyNumber & other = (const H225_PublicPartyNumber &)obj; Comparison result; if ((result = m_publicTypeOfNumber.Compare(other.m_publicTypeOfNumber)) != EqualTo) return result; if ((result = m_publicNumberDigits.Compare(other.m_publicNumberDigits)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_PublicPartyNumber::GetDataLength() const { PINDEX length = 0; length += m_publicTypeOfNumber.GetObjectLength(); length += m_publicNumberDigits.GetObjectLength(); return length; } PBoolean H225_PublicPartyNumber::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_publicTypeOfNumber.Decode(strm)) return FALSE; if (!m_publicNumberDigits.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_PublicPartyNumber::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_publicTypeOfNumber.Encode(strm); m_publicNumberDigits.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_PublicPartyNumber::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_PublicPartyNumber::Class()), PInvalidCast); #endif return new H225_PublicPartyNumber(*this); } // // PrivatePartyNumber // H225_PrivatePartyNumber::H225_PrivatePartyNumber(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H225_PrivatePartyNumber::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+22) << "privateTypeOfNumber = " << setprecision(indent) << m_privateTypeOfNumber << '\n'; strm << setw(indent+22) << "privateNumberDigits = " << setprecision(indent) << m_privateNumberDigits << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_PrivatePartyNumber::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_PrivatePartyNumber), PInvalidCast); #endif const H225_PrivatePartyNumber & other = (const H225_PrivatePartyNumber &)obj; Comparison result; if ((result = m_privateTypeOfNumber.Compare(other.m_privateTypeOfNumber)) != EqualTo) return result; if ((result = m_privateNumberDigits.Compare(other.m_privateNumberDigits)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_PrivatePartyNumber::GetDataLength() const { PINDEX length = 0; length += m_privateTypeOfNumber.GetObjectLength(); length += m_privateNumberDigits.GetObjectLength(); return length; } PBoolean H225_PrivatePartyNumber::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_privateTypeOfNumber.Decode(strm)) return FALSE; if (!m_privateNumberDigits.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_PrivatePartyNumber::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_privateTypeOfNumber.Encode(strm); m_privateNumberDigits.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_PrivatePartyNumber::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_PrivatePartyNumber::Class()), PInvalidCast); #endif return new H225_PrivatePartyNumber(*this); } // // ANSI-41-UIM // H225_ANSI_41_UIM::H225_ANSI_41_UIM(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 11, TRUE, 0) { m_imsi.SetConstraints(PASN_Object::FixedConstraint, 3, 16); m_min.SetConstraints(PASN_Object::FixedConstraint, 3, 16); m_mdn.SetConstraints(PASN_Object::FixedConstraint, 3, 16); m_msisdn.SetConstraints(PASN_Object::FixedConstraint, 3, 16); m_esn.SetConstraints(PASN_Object::FixedConstraint, 16); m_mscid.SetConstraints(PASN_Object::FixedConstraint, 3, 16); m_systemMyTypeCode.SetConstraints(PASN_Object::FixedConstraint, 1); m_systemAccessType.SetConstraints(PASN_Object::FixedConstraint, 1); m_qualificationInformationCode.SetConstraints(PASN_Object::FixedConstraint, 1); m_sesn.SetConstraints(PASN_Object::FixedConstraint, 16); m_soc.SetConstraints(PASN_Object::FixedConstraint, 3, 16); } #ifndef PASN_NOPRINTON void H225_ANSI_41_UIM::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_imsi)) strm << setw(indent+7) << "imsi = " << setprecision(indent) << m_imsi << '\n'; if (HasOptionalField(e_min)) strm << setw(indent+6) << "min = " << setprecision(indent) << m_min << '\n'; if (HasOptionalField(e_mdn)) strm << setw(indent+6) << "mdn = " << setprecision(indent) << m_mdn << '\n'; if (HasOptionalField(e_msisdn)) strm << setw(indent+9) << "msisdn = " << setprecision(indent) << m_msisdn << '\n'; if (HasOptionalField(e_esn)) strm << setw(indent+6) << "esn = " << setprecision(indent) << m_esn << '\n'; if (HasOptionalField(e_mscid)) strm << setw(indent+8) << "mscid = " << setprecision(indent) << m_mscid << '\n'; strm << setw(indent+12) << "system_id = " << setprecision(indent) << m_system_id << '\n'; if (HasOptionalField(e_systemMyTypeCode)) strm << setw(indent+19) << "systemMyTypeCode = " << setprecision(indent) << m_systemMyTypeCode << '\n'; if (HasOptionalField(e_systemAccessType)) strm << setw(indent+19) << "systemAccessType = " << setprecision(indent) << m_systemAccessType << '\n'; if (HasOptionalField(e_qualificationInformationCode)) strm << setw(indent+31) << "qualificationInformationCode = " << setprecision(indent) << m_qualificationInformationCode << '\n'; if (HasOptionalField(e_sesn)) strm << setw(indent+7) << "sesn = " << setprecision(indent) << m_sesn << '\n'; if (HasOptionalField(e_soc)) strm << setw(indent+6) << "soc = " << setprecision(indent) << m_soc << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_ANSI_41_UIM::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_ANSI_41_UIM), PInvalidCast); #endif const H225_ANSI_41_UIM & other = (const H225_ANSI_41_UIM &)obj; Comparison result; if ((result = m_imsi.Compare(other.m_imsi)) != EqualTo) return result; if ((result = m_min.Compare(other.m_min)) != EqualTo) return result; if ((result = m_mdn.Compare(other.m_mdn)) != EqualTo) return result; if ((result = m_msisdn.Compare(other.m_msisdn)) != EqualTo) return result; if ((result = m_esn.Compare(other.m_esn)) != EqualTo) return result; if ((result = m_mscid.Compare(other.m_mscid)) != EqualTo) return result; if ((result = m_system_id.Compare(other.m_system_id)) != EqualTo) return result; if ((result = m_systemMyTypeCode.Compare(other.m_systemMyTypeCode)) != EqualTo) return result; if ((result = m_systemAccessType.Compare(other.m_systemAccessType)) != EqualTo) return result; if ((result = m_qualificationInformationCode.Compare(other.m_qualificationInformationCode)) != EqualTo) return result; if ((result = m_sesn.Compare(other.m_sesn)) != EqualTo) return result; if ((result = m_soc.Compare(other.m_soc)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_ANSI_41_UIM::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_imsi)) length += m_imsi.GetObjectLength(); if (HasOptionalField(e_min)) length += m_min.GetObjectLength(); if (HasOptionalField(e_mdn)) length += m_mdn.GetObjectLength(); if (HasOptionalField(e_msisdn)) length += m_msisdn.GetObjectLength(); if (HasOptionalField(e_esn)) length += m_esn.GetObjectLength(); if (HasOptionalField(e_mscid)) length += m_mscid.GetObjectLength(); length += m_system_id.GetObjectLength(); if (HasOptionalField(e_systemMyTypeCode)) length += m_systemMyTypeCode.GetObjectLength(); if (HasOptionalField(e_systemAccessType)) length += m_systemAccessType.GetObjectLength(); if (HasOptionalField(e_qualificationInformationCode)) length += m_qualificationInformationCode.GetObjectLength(); if (HasOptionalField(e_sesn)) length += m_sesn.GetObjectLength(); if (HasOptionalField(e_soc)) length += m_soc.GetObjectLength(); return length; } PBoolean H225_ANSI_41_UIM::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_imsi) && !m_imsi.Decode(strm)) return FALSE; if (HasOptionalField(e_min) && !m_min.Decode(strm)) return FALSE; if (HasOptionalField(e_mdn) && !m_mdn.Decode(strm)) return FALSE; if (HasOptionalField(e_msisdn) && !m_msisdn.Decode(strm)) return FALSE; if (HasOptionalField(e_esn) && !m_esn.Decode(strm)) return FALSE; if (HasOptionalField(e_mscid) && !m_mscid.Decode(strm)) return FALSE; if (!m_system_id.Decode(strm)) return FALSE; if (HasOptionalField(e_systemMyTypeCode) && !m_systemMyTypeCode.Decode(strm)) return FALSE; if (HasOptionalField(e_systemAccessType) && !m_systemAccessType.Decode(strm)) return FALSE; if (HasOptionalField(e_qualificationInformationCode) && !m_qualificationInformationCode.Decode(strm)) return FALSE; if (HasOptionalField(e_sesn) && !m_sesn.Decode(strm)) return FALSE; if (HasOptionalField(e_soc) && !m_soc.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_ANSI_41_UIM::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_imsi)) m_imsi.Encode(strm); if (HasOptionalField(e_min)) m_min.Encode(strm); if (HasOptionalField(e_mdn)) m_mdn.Encode(strm); if (HasOptionalField(e_msisdn)) m_msisdn.Encode(strm); if (HasOptionalField(e_esn)) m_esn.Encode(strm); if (HasOptionalField(e_mscid)) m_mscid.Encode(strm); m_system_id.Encode(strm); if (HasOptionalField(e_systemMyTypeCode)) m_systemMyTypeCode.Encode(strm); if (HasOptionalField(e_systemAccessType)) m_systemAccessType.Encode(strm); if (HasOptionalField(e_qualificationInformationCode)) m_qualificationInformationCode.Encode(strm); if (HasOptionalField(e_sesn)) m_sesn.Encode(strm); if (HasOptionalField(e_soc)) m_soc.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_ANSI_41_UIM::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ANSI_41_UIM::Class()), PInvalidCast); #endif return new H225_ANSI_41_UIM(*this); } // // IsupPublicPartyNumber // H225_IsupPublicPartyNumber::H225_IsupPublicPartyNumber(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_IsupPublicPartyNumber::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+18) << "natureOfAddress = " << setprecision(indent) << m_natureOfAddress << '\n'; strm << setw(indent+10) << "address = " << setprecision(indent) << m_address << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_IsupPublicPartyNumber::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_IsupPublicPartyNumber), PInvalidCast); #endif const H225_IsupPublicPartyNumber & other = (const H225_IsupPublicPartyNumber &)obj; Comparison result; if ((result = m_natureOfAddress.Compare(other.m_natureOfAddress)) != EqualTo) return result; if ((result = m_address.Compare(other.m_address)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_IsupPublicPartyNumber::GetDataLength() const { PINDEX length = 0; length += m_natureOfAddress.GetObjectLength(); length += m_address.GetObjectLength(); return length; } PBoolean H225_IsupPublicPartyNumber::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_natureOfAddress.Decode(strm)) return FALSE; if (!m_address.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_IsupPublicPartyNumber::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_natureOfAddress.Encode(strm); m_address.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_IsupPublicPartyNumber::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_IsupPublicPartyNumber::Class()), PInvalidCast); #endif return new H225_IsupPublicPartyNumber(*this); } // // IsupPrivatePartyNumber // H225_IsupPrivatePartyNumber::H225_IsupPrivatePartyNumber(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_IsupPrivatePartyNumber::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+22) << "privateTypeOfNumber = " << setprecision(indent) << m_privateTypeOfNumber << '\n'; strm << setw(indent+10) << "address = " << setprecision(indent) << m_address << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_IsupPrivatePartyNumber::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_IsupPrivatePartyNumber), PInvalidCast); #endif const H225_IsupPrivatePartyNumber & other = (const H225_IsupPrivatePartyNumber &)obj; Comparison result; if ((result = m_privateTypeOfNumber.Compare(other.m_privateTypeOfNumber)) != EqualTo) return result; if ((result = m_address.Compare(other.m_address)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_IsupPrivatePartyNumber::GetDataLength() const { PINDEX length = 0; length += m_privateTypeOfNumber.GetObjectLength(); length += m_address.GetObjectLength(); return length; } PBoolean H225_IsupPrivatePartyNumber::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_privateTypeOfNumber.Decode(strm)) return FALSE; if (!m_address.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_IsupPrivatePartyNumber::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_privateTypeOfNumber.Encode(strm); m_address.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_IsupPrivatePartyNumber::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_IsupPrivatePartyNumber::Class()), PInvalidCast); #endif return new H225_IsupPrivatePartyNumber(*this); } // // AlternateTransportAddresses // H225_AlternateTransportAddresses::H225_AlternateTransportAddresses(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 1) { } #ifndef PASN_NOPRINTON void H225_AlternateTransportAddresses::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_annexE)) strm << setw(indent+9) << "annexE = " << setprecision(indent) << m_annexE << '\n'; if (HasOptionalField(e_sctp)) strm << setw(indent+7) << "sctp = " << setprecision(indent) << m_sctp << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_AlternateTransportAddresses::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_AlternateTransportAddresses), PInvalidCast); #endif const H225_AlternateTransportAddresses & other = (const H225_AlternateTransportAddresses &)obj; Comparison result; if ((result = m_annexE.Compare(other.m_annexE)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_AlternateTransportAddresses::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_annexE)) length += m_annexE.GetObjectLength(); return length; } PBoolean H225_AlternateTransportAddresses::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_annexE) && !m_annexE.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_sctp, m_sctp)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_AlternateTransportAddresses::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_annexE)) m_annexE.Encode(strm); KnownExtensionEncode(strm, e_sctp, m_sctp); UnknownExtensionsEncode(strm); } PObject * H225_AlternateTransportAddresses::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_AlternateTransportAddresses::Class()), PInvalidCast); #endif return new H225_AlternateTransportAddresses(*this); } // // AlternateGK // H225_AlternateGK::H225_AlternateGK(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_priority.SetConstraints(PASN_Object::FixedConstraint, 0, 127); } #ifndef PASN_NOPRINTON void H225_AlternateGK::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "rasAddress = " << setprecision(indent) << m_rasAddress << '\n'; if (HasOptionalField(e_gatekeeperIdentifier)) strm << setw(indent+23) << "gatekeeperIdentifier = " << setprecision(indent) << m_gatekeeperIdentifier << '\n'; strm << setw(indent+17) << "needToRegister = " << setprecision(indent) << m_needToRegister << '\n'; strm << setw(indent+11) << "priority = " << setprecision(indent) << m_priority << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_AlternateGK::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_AlternateGK), PInvalidCast); #endif const H225_AlternateGK & other = (const H225_AlternateGK &)obj; Comparison result; if ((result = m_rasAddress.Compare(other.m_rasAddress)) != EqualTo) return result; if ((result = m_gatekeeperIdentifier.Compare(other.m_gatekeeperIdentifier)) != EqualTo) return result; if ((result = m_needToRegister.Compare(other.m_needToRegister)) != EqualTo) return result; if ((result = m_priority.Compare(other.m_priority)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_AlternateGK::GetDataLength() const { PINDEX length = 0; length += m_rasAddress.GetObjectLength(); if (HasOptionalField(e_gatekeeperIdentifier)) length += m_gatekeeperIdentifier.GetObjectLength(); length += m_needToRegister.GetObjectLength(); length += m_priority.GetObjectLength(); return length; } PBoolean H225_AlternateGK::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_rasAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_gatekeeperIdentifier) && !m_gatekeeperIdentifier.Decode(strm)) return FALSE; if (!m_needToRegister.Decode(strm)) return FALSE; if (!m_priority.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_AlternateGK::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_rasAddress.Encode(strm); if (HasOptionalField(e_gatekeeperIdentifier)) m_gatekeeperIdentifier.Encode(strm); m_needToRegister.Encode(strm); m_priority.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_AlternateGK::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_AlternateGK::Class()), PInvalidCast); #endif return new H225_AlternateGK(*this); } // // AltGKInfo // H225_AltGKInfo::H225_AltGKInfo(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_AltGKInfo::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+22) << "alternateGatekeeper = " << setprecision(indent) << m_alternateGatekeeper << '\n'; strm << setw(indent+19) << "altGKisPermanent = " << setprecision(indent) << m_altGKisPermanent << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_AltGKInfo::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_AltGKInfo), PInvalidCast); #endif const H225_AltGKInfo & other = (const H225_AltGKInfo &)obj; Comparison result; if ((result = m_alternateGatekeeper.Compare(other.m_alternateGatekeeper)) != EqualTo) return result; if ((result = m_altGKisPermanent.Compare(other.m_altGKisPermanent)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_AltGKInfo::GetDataLength() const { PINDEX length = 0; length += m_alternateGatekeeper.GetObjectLength(); length += m_altGKisPermanent.GetObjectLength(); return length; } PBoolean H225_AltGKInfo::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_alternateGatekeeper.Decode(strm)) return FALSE; if (!m_altGKisPermanent.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_AltGKInfo::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_alternateGatekeeper.Encode(strm); m_altGKisPermanent.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_AltGKInfo::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_AltGKInfo::Class()), PInvalidCast); #endif return new H225_AltGKInfo(*this); } // // SecurityCapabilities // H225_SecurityCapabilities::H225_SecurityCapabilities(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_SecurityCapabilities::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandard)) strm << setw(indent+14) << "nonStandard = " << setprecision(indent) << m_nonStandard << '\n'; strm << setw(indent+13) << "encryption = " << setprecision(indent) << m_encryption << '\n'; strm << setw(indent+16) << "authenticaton = " << setprecision(indent) << m_authenticaton << '\n'; strm << setw(indent+12) << "integrity = " << setprecision(indent) << m_integrity << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_SecurityCapabilities::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_SecurityCapabilities), PInvalidCast); #endif const H225_SecurityCapabilities & other = (const H225_SecurityCapabilities &)obj; Comparison result; if ((result = m_nonStandard.Compare(other.m_nonStandard)) != EqualTo) return result; if ((result = m_encryption.Compare(other.m_encryption)) != EqualTo) return result; if ((result = m_authenticaton.Compare(other.m_authenticaton)) != EqualTo) return result; if ((result = m_integrity.Compare(other.m_integrity)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_SecurityCapabilities::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandard)) length += m_nonStandard.GetObjectLength(); length += m_encryption.GetObjectLength(); length += m_authenticaton.GetObjectLength(); length += m_integrity.GetObjectLength(); return length; } PBoolean H225_SecurityCapabilities::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandard) && !m_nonStandard.Decode(strm)) return FALSE; if (!m_encryption.Decode(strm)) return FALSE; if (!m_authenticaton.Decode(strm)) return FALSE; if (!m_integrity.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_SecurityCapabilities::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandard)) m_nonStandard.Encode(strm); m_encryption.Encode(strm); m_authenticaton.Encode(strm); m_integrity.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_SecurityCapabilities::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_SecurityCapabilities::Class()), PInvalidCast); #endif return new H225_SecurityCapabilities(*this); } // // QseriesOptions // H225_QseriesOptions::H225_QseriesOptions(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_QseriesOptions::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "q932Full = " << setprecision(indent) << m_q932Full << '\n'; strm << setw(indent+11) << "q951Full = " << setprecision(indent) << m_q951Full << '\n'; strm << setw(indent+11) << "q952Full = " << setprecision(indent) << m_q952Full << '\n'; strm << setw(indent+11) << "q953Full = " << setprecision(indent) << m_q953Full << '\n'; strm << setw(indent+11) << "q955Full = " << setprecision(indent) << m_q955Full << '\n'; strm << setw(indent+11) << "q956Full = " << setprecision(indent) << m_q956Full << '\n'; strm << setw(indent+11) << "q957Full = " << setprecision(indent) << m_q957Full << '\n'; strm << setw(indent+11) << "q954Info = " << setprecision(indent) << m_q954Info << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_QseriesOptions::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_QseriesOptions), PInvalidCast); #endif const H225_QseriesOptions & other = (const H225_QseriesOptions &)obj; Comparison result; if ((result = m_q932Full.Compare(other.m_q932Full)) != EqualTo) return result; if ((result = m_q951Full.Compare(other.m_q951Full)) != EqualTo) return result; if ((result = m_q952Full.Compare(other.m_q952Full)) != EqualTo) return result; if ((result = m_q953Full.Compare(other.m_q953Full)) != EqualTo) return result; if ((result = m_q955Full.Compare(other.m_q955Full)) != EqualTo) return result; if ((result = m_q956Full.Compare(other.m_q956Full)) != EqualTo) return result; if ((result = m_q957Full.Compare(other.m_q957Full)) != EqualTo) return result; if ((result = m_q954Info.Compare(other.m_q954Info)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_QseriesOptions::GetDataLength() const { PINDEX length = 0; length += m_q932Full.GetObjectLength(); length += m_q951Full.GetObjectLength(); length += m_q952Full.GetObjectLength(); length += m_q953Full.GetObjectLength(); length += m_q955Full.GetObjectLength(); length += m_q956Full.GetObjectLength(); length += m_q957Full.GetObjectLength(); length += m_q954Info.GetObjectLength(); return length; } PBoolean H225_QseriesOptions::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_q932Full.Decode(strm)) return FALSE; if (!m_q951Full.Decode(strm)) return FALSE; if (!m_q952Full.Decode(strm)) return FALSE; if (!m_q953Full.Decode(strm)) return FALSE; if (!m_q955Full.Decode(strm)) return FALSE; if (!m_q956Full.Decode(strm)) return FALSE; if (!m_q957Full.Decode(strm)) return FALSE; if (!m_q954Info.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_QseriesOptions::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_q932Full.Encode(strm); m_q951Full.Encode(strm); m_q952Full.Encode(strm); m_q953Full.Encode(strm); m_q955Full.Encode(strm); m_q956Full.Encode(strm); m_q957Full.Encode(strm); m_q954Info.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_QseriesOptions::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_QseriesOptions::Class()), PInvalidCast); #endif return new H225_QseriesOptions(*this); } // // DataRate // H225_DataRate::H225_DataRate(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_channelMultiplier.SetConstraints(PASN_Object::FixedConstraint, 1, 256); } #ifndef PASN_NOPRINTON void H225_DataRate::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent+14) << "channelRate = " << setprecision(indent) << m_channelRate << '\n'; if (HasOptionalField(e_channelMultiplier)) strm << setw(indent+20) << "channelMultiplier = " << setprecision(indent) << m_channelMultiplier << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_DataRate::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_DataRate), PInvalidCast); #endif const H225_DataRate & other = (const H225_DataRate &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_channelRate.Compare(other.m_channelRate)) != EqualTo) return result; if ((result = m_channelMultiplier.Compare(other.m_channelMultiplier)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_DataRate::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); length += m_channelRate.GetObjectLength(); if (HasOptionalField(e_channelMultiplier)) length += m_channelMultiplier.GetObjectLength(); return length; } PBoolean H225_DataRate::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!m_channelRate.Decode(strm)) return FALSE; if (HasOptionalField(e_channelMultiplier) && !m_channelMultiplier.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_DataRate::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); m_channelRate.Encode(strm); if (HasOptionalField(e_channelMultiplier)) m_channelMultiplier.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_DataRate::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_DataRate::Class()), PInvalidCast); #endif return new H225_DataRate(*this); } // // SupportedPrefix // H225_SupportedPrefix::H225_SupportedPrefix(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_SupportedPrefix::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent+9) << "prefix = " << setprecision(indent) << m_prefix << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_SupportedPrefix::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_SupportedPrefix), PInvalidCast); #endif const H225_SupportedPrefix & other = (const H225_SupportedPrefix &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_prefix.Compare(other.m_prefix)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_SupportedPrefix::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); length += m_prefix.GetObjectLength(); return length; } PBoolean H225_SupportedPrefix::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!m_prefix.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_SupportedPrefix::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); m_prefix.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_SupportedPrefix::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_SupportedPrefix::Class()), PInvalidCast); #endif return new H225_SupportedPrefix(*this); } // // CapacityReportingSpecification // H225_CapacityReportingSpecification::H225_CapacityReportingSpecification(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_CapacityReportingSpecification::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "when = " << setprecision(indent) << m_when << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_CapacityReportingSpecification::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_CapacityReportingSpecification), PInvalidCast); #endif const H225_CapacityReportingSpecification & other = (const H225_CapacityReportingSpecification &)obj; Comparison result; if ((result = m_when.Compare(other.m_when)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_CapacityReportingSpecification::GetDataLength() const { PINDEX length = 0; length += m_when.GetObjectLength(); return length; } PBoolean H225_CapacityReportingSpecification::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_when.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_CapacityReportingSpecification::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_when.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_CapacityReportingSpecification::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CapacityReportingSpecification::Class()), PInvalidCast); #endif return new H225_CapacityReportingSpecification(*this); } // // CallCapacityInfo // H225_CallCapacityInfo::H225_CallCapacityInfo(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 11, TRUE, 1) { } #ifndef PASN_NOPRINTON void H225_CallCapacityInfo::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_voiceGwCallsAvailable)) strm << setw(indent+24) << "voiceGwCallsAvailable = " << setprecision(indent) << m_voiceGwCallsAvailable << '\n'; if (HasOptionalField(e_h310GwCallsAvailable)) strm << setw(indent+23) << "h310GwCallsAvailable = " << setprecision(indent) << m_h310GwCallsAvailable << '\n'; if (HasOptionalField(e_h320GwCallsAvailable)) strm << setw(indent+23) << "h320GwCallsAvailable = " << setprecision(indent) << m_h320GwCallsAvailable << '\n'; if (HasOptionalField(e_h321GwCallsAvailable)) strm << setw(indent+23) << "h321GwCallsAvailable = " << setprecision(indent) << m_h321GwCallsAvailable << '\n'; if (HasOptionalField(e_h322GwCallsAvailable)) strm << setw(indent+23) << "h322GwCallsAvailable = " << setprecision(indent) << m_h322GwCallsAvailable << '\n'; if (HasOptionalField(e_h323GwCallsAvailable)) strm << setw(indent+23) << "h323GwCallsAvailable = " << setprecision(indent) << m_h323GwCallsAvailable << '\n'; if (HasOptionalField(e_h324GwCallsAvailable)) strm << setw(indent+23) << "h324GwCallsAvailable = " << setprecision(indent) << m_h324GwCallsAvailable << '\n'; if (HasOptionalField(e_t120OnlyGwCallsAvailable)) strm << setw(indent+27) << "t120OnlyGwCallsAvailable = " << setprecision(indent) << m_t120OnlyGwCallsAvailable << '\n'; if (HasOptionalField(e_t38FaxAnnexbOnlyGwCallsAvailable)) strm << setw(indent+35) << "t38FaxAnnexbOnlyGwCallsAvailable = " << setprecision(indent) << m_t38FaxAnnexbOnlyGwCallsAvailable << '\n'; if (HasOptionalField(e_terminalCallsAvailable)) strm << setw(indent+25) << "terminalCallsAvailable = " << setprecision(indent) << m_terminalCallsAvailable << '\n'; if (HasOptionalField(e_mcuCallsAvailable)) strm << setw(indent+20) << "mcuCallsAvailable = " << setprecision(indent) << m_mcuCallsAvailable << '\n'; if (HasOptionalField(e_sipGwCallsAvailable)) strm << setw(indent+22) << "sipGwCallsAvailable = " << setprecision(indent) << m_sipGwCallsAvailable << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_CallCapacityInfo::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_CallCapacityInfo), PInvalidCast); #endif const H225_CallCapacityInfo & other = (const H225_CallCapacityInfo &)obj; Comparison result; if ((result = m_voiceGwCallsAvailable.Compare(other.m_voiceGwCallsAvailable)) != EqualTo) return result; if ((result = m_h310GwCallsAvailable.Compare(other.m_h310GwCallsAvailable)) != EqualTo) return result; if ((result = m_h320GwCallsAvailable.Compare(other.m_h320GwCallsAvailable)) != EqualTo) return result; if ((result = m_h321GwCallsAvailable.Compare(other.m_h321GwCallsAvailable)) != EqualTo) return result; if ((result = m_h322GwCallsAvailable.Compare(other.m_h322GwCallsAvailable)) != EqualTo) return result; if ((result = m_h323GwCallsAvailable.Compare(other.m_h323GwCallsAvailable)) != EqualTo) return result; if ((result = m_h324GwCallsAvailable.Compare(other.m_h324GwCallsAvailable)) != EqualTo) return result; if ((result = m_t120OnlyGwCallsAvailable.Compare(other.m_t120OnlyGwCallsAvailable)) != EqualTo) return result; if ((result = m_t38FaxAnnexbOnlyGwCallsAvailable.Compare(other.m_t38FaxAnnexbOnlyGwCallsAvailable)) != EqualTo) return result; if ((result = m_terminalCallsAvailable.Compare(other.m_terminalCallsAvailable)) != EqualTo) return result; if ((result = m_mcuCallsAvailable.Compare(other.m_mcuCallsAvailable)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_CallCapacityInfo::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_voiceGwCallsAvailable)) length += m_voiceGwCallsAvailable.GetObjectLength(); if (HasOptionalField(e_h310GwCallsAvailable)) length += m_h310GwCallsAvailable.GetObjectLength(); if (HasOptionalField(e_h320GwCallsAvailable)) length += m_h320GwCallsAvailable.GetObjectLength(); if (HasOptionalField(e_h321GwCallsAvailable)) length += m_h321GwCallsAvailable.GetObjectLength(); if (HasOptionalField(e_h322GwCallsAvailable)) length += m_h322GwCallsAvailable.GetObjectLength(); if (HasOptionalField(e_h323GwCallsAvailable)) length += m_h323GwCallsAvailable.GetObjectLength(); if (HasOptionalField(e_h324GwCallsAvailable)) length += m_h324GwCallsAvailable.GetObjectLength(); if (HasOptionalField(e_t120OnlyGwCallsAvailable)) length += m_t120OnlyGwCallsAvailable.GetObjectLength(); if (HasOptionalField(e_t38FaxAnnexbOnlyGwCallsAvailable)) length += m_t38FaxAnnexbOnlyGwCallsAvailable.GetObjectLength(); if (HasOptionalField(e_terminalCallsAvailable)) length += m_terminalCallsAvailable.GetObjectLength(); if (HasOptionalField(e_mcuCallsAvailable)) length += m_mcuCallsAvailable.GetObjectLength(); return length; } PBoolean H225_CallCapacityInfo::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_voiceGwCallsAvailable) && !m_voiceGwCallsAvailable.Decode(strm)) return FALSE; if (HasOptionalField(e_h310GwCallsAvailable) && !m_h310GwCallsAvailable.Decode(strm)) return FALSE; if (HasOptionalField(e_h320GwCallsAvailable) && !m_h320GwCallsAvailable.Decode(strm)) return FALSE; if (HasOptionalField(e_h321GwCallsAvailable) && !m_h321GwCallsAvailable.Decode(strm)) return FALSE; if (HasOptionalField(e_h322GwCallsAvailable) && !m_h322GwCallsAvailable.Decode(strm)) return FALSE; if (HasOptionalField(e_h323GwCallsAvailable) && !m_h323GwCallsAvailable.Decode(strm)) return FALSE; if (HasOptionalField(e_h324GwCallsAvailable) && !m_h324GwCallsAvailable.Decode(strm)) return FALSE; if (HasOptionalField(e_t120OnlyGwCallsAvailable) && !m_t120OnlyGwCallsAvailable.Decode(strm)) return FALSE; if (HasOptionalField(e_t38FaxAnnexbOnlyGwCallsAvailable) && !m_t38FaxAnnexbOnlyGwCallsAvailable.Decode(strm)) return FALSE; if (HasOptionalField(e_terminalCallsAvailable) && !m_terminalCallsAvailable.Decode(strm)) return FALSE; if (HasOptionalField(e_mcuCallsAvailable) && !m_mcuCallsAvailable.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_sipGwCallsAvailable, m_sipGwCallsAvailable)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_CallCapacityInfo::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_voiceGwCallsAvailable)) m_voiceGwCallsAvailable.Encode(strm); if (HasOptionalField(e_h310GwCallsAvailable)) m_h310GwCallsAvailable.Encode(strm); if (HasOptionalField(e_h320GwCallsAvailable)) m_h320GwCallsAvailable.Encode(strm); if (HasOptionalField(e_h321GwCallsAvailable)) m_h321GwCallsAvailable.Encode(strm); if (HasOptionalField(e_h322GwCallsAvailable)) m_h322GwCallsAvailable.Encode(strm); if (HasOptionalField(e_h323GwCallsAvailable)) m_h323GwCallsAvailable.Encode(strm); if (HasOptionalField(e_h324GwCallsAvailable)) m_h324GwCallsAvailable.Encode(strm); if (HasOptionalField(e_t120OnlyGwCallsAvailable)) m_t120OnlyGwCallsAvailable.Encode(strm); if (HasOptionalField(e_t38FaxAnnexbOnlyGwCallsAvailable)) m_t38FaxAnnexbOnlyGwCallsAvailable.Encode(strm); if (HasOptionalField(e_terminalCallsAvailable)) m_terminalCallsAvailable.Encode(strm); if (HasOptionalField(e_mcuCallsAvailable)) m_mcuCallsAvailable.Encode(strm); KnownExtensionEncode(strm, e_sipGwCallsAvailable, m_sipGwCallsAvailable); UnknownExtensionsEncode(strm); } PObject * H225_CallCapacityInfo::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CallCapacityInfo::Class()), PInvalidCast); #endif return new H225_CallCapacityInfo(*this); } // // CallsAvailable // H225_CallsAvailable::H225_CallsAvailable(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 1) { m_calls.SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); m_group.SetConstraints(PASN_Object::FixedConstraint, 1, 128); } #ifndef PASN_NOPRINTON void H225_CallsAvailable::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+8) << "calls = " << setprecision(indent) << m_calls << '\n'; if (HasOptionalField(e_group)) strm << setw(indent+8) << "group = " << setprecision(indent) << m_group << '\n'; if (HasOptionalField(e_carrier)) strm << setw(indent+10) << "carrier = " << setprecision(indent) << m_carrier << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_CallsAvailable::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_CallsAvailable), PInvalidCast); #endif const H225_CallsAvailable & other = (const H225_CallsAvailable &)obj; Comparison result; if ((result = m_calls.Compare(other.m_calls)) != EqualTo) return result; if ((result = m_group.Compare(other.m_group)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_CallsAvailable::GetDataLength() const { PINDEX length = 0; length += m_calls.GetObjectLength(); if (HasOptionalField(e_group)) length += m_group.GetObjectLength(); return length; } PBoolean H225_CallsAvailable::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_calls.Decode(strm)) return FALSE; if (HasOptionalField(e_group) && !m_group.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_carrier, m_carrier)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_CallsAvailable::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_calls.Encode(strm); if (HasOptionalField(e_group)) m_group.Encode(strm); KnownExtensionEncode(strm, e_carrier, m_carrier); UnknownExtensionsEncode(strm); } PObject * H225_CallsAvailable::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CallsAvailable::Class()), PInvalidCast); #endif return new H225_CallsAvailable(*this); } // // CicInfo // H225_CicInfo::H225_CicInfo(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_pointCode.SetConstraints(PASN_Object::FixedConstraint, 2, 5); } #ifndef PASN_NOPRINTON void H225_CicInfo::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+6) << "cic = " << setprecision(indent) << m_cic << '\n'; strm << setw(indent+12) << "pointCode = " << setprecision(indent) << m_pointCode << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_CicInfo::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_CicInfo), PInvalidCast); #endif const H225_CicInfo & other = (const H225_CicInfo &)obj; Comparison result; if ((result = m_cic.Compare(other.m_cic)) != EqualTo) return result; if ((result = m_pointCode.Compare(other.m_pointCode)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_CicInfo::GetDataLength() const { PINDEX length = 0; length += m_cic.GetObjectLength(); length += m_pointCode.GetObjectLength(); return length; } PBoolean H225_CicInfo::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_cic.Decode(strm)) return FALSE; if (!m_pointCode.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_CicInfo::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_cic.Encode(strm); m_pointCode.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_CicInfo::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CicInfo::Class()), PInvalidCast); #endif return new H225_CicInfo(*this); } // // GroupID // H225_GroupID::H225_GroupID(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_group.SetConstraints(PASN_Object::FixedConstraint, 1, 128); } #ifndef PASN_NOPRINTON void H225_GroupID::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_member)) strm << setw(indent+9) << "member = " << setprecision(indent) << m_member << '\n'; strm << setw(indent+8) << "group = " << setprecision(indent) << m_group << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_GroupID::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_GroupID), PInvalidCast); #endif const H225_GroupID & other = (const H225_GroupID &)obj; Comparison result; if ((result = m_member.Compare(other.m_member)) != EqualTo) return result; if ((result = m_group.Compare(other.m_group)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_GroupID::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_member)) length += m_member.GetObjectLength(); length += m_group.GetObjectLength(); return length; } PBoolean H225_GroupID::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_member) && !m_member.Decode(strm)) return FALSE; if (!m_group.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_GroupID::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_member)) m_member.Encode(strm); m_group.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_GroupID::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_GroupID::Class()), PInvalidCast); #endif return new H225_GroupID(*this); } // // ServiceControlSession // H225_ServiceControlSession::H225_ServiceControlSession(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_sessionId.SetConstraints(PASN_Object::FixedConstraint, 0, 255); } #ifndef PASN_NOPRINTON void H225_ServiceControlSession::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "sessionId = " << setprecision(indent) << m_sessionId << '\n'; if (HasOptionalField(e_contents)) strm << setw(indent+11) << "contents = " << setprecision(indent) << m_contents << '\n'; strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_ServiceControlSession::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_ServiceControlSession), PInvalidCast); #endif const H225_ServiceControlSession & other = (const H225_ServiceControlSession &)obj; Comparison result; if ((result = m_sessionId.Compare(other.m_sessionId)) != EqualTo) return result; if ((result = m_contents.Compare(other.m_contents)) != EqualTo) return result; if ((result = m_reason.Compare(other.m_reason)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_ServiceControlSession::GetDataLength() const { PINDEX length = 0; length += m_sessionId.GetObjectLength(); if (HasOptionalField(e_contents)) length += m_contents.GetObjectLength(); length += m_reason.GetObjectLength(); return length; } PBoolean H225_ServiceControlSession::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sessionId.Decode(strm)) return FALSE; if (HasOptionalField(e_contents) && !m_contents.Decode(strm)) return FALSE; if (!m_reason.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_ServiceControlSession::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sessionId.Encode(strm); if (HasOptionalField(e_contents)) m_contents.Encode(strm); m_reason.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_ServiceControlSession::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ServiceControlSession::Class()), PInvalidCast); #endif return new H225_ServiceControlSession(*this); } // // RasUsageInfoTypes // H225_RasUsageInfoTypes::H225_RasUsageInfoTypes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_RasUsageInfoTypes::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "nonStandardUsageTypes = " << setprecision(indent) << m_nonStandardUsageTypes << '\n'; if (HasOptionalField(e_startTime)) strm << setw(indent+12) << "startTime = " << setprecision(indent) << m_startTime << '\n'; if (HasOptionalField(e_endTime)) strm << setw(indent+10) << "endTime = " << setprecision(indent) << m_endTime << '\n'; if (HasOptionalField(e_terminationCause)) strm << setw(indent+19) << "terminationCause = " << setprecision(indent) << m_terminationCause << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_RasUsageInfoTypes::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_RasUsageInfoTypes), PInvalidCast); #endif const H225_RasUsageInfoTypes & other = (const H225_RasUsageInfoTypes &)obj; Comparison result; if ((result = m_nonStandardUsageTypes.Compare(other.m_nonStandardUsageTypes)) != EqualTo) return result; if ((result = m_startTime.Compare(other.m_startTime)) != EqualTo) return result; if ((result = m_endTime.Compare(other.m_endTime)) != EqualTo) return result; if ((result = m_terminationCause.Compare(other.m_terminationCause)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_RasUsageInfoTypes::GetDataLength() const { PINDEX length = 0; length += m_nonStandardUsageTypes.GetObjectLength(); if (HasOptionalField(e_startTime)) length += m_startTime.GetObjectLength(); if (HasOptionalField(e_endTime)) length += m_endTime.GetObjectLength(); if (HasOptionalField(e_terminationCause)) length += m_terminationCause.GetObjectLength(); return length; } PBoolean H225_RasUsageInfoTypes::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nonStandardUsageTypes.Decode(strm)) return FALSE; if (HasOptionalField(e_startTime) && !m_startTime.Decode(strm)) return FALSE; if (HasOptionalField(e_endTime) && !m_endTime.Decode(strm)) return FALSE; if (HasOptionalField(e_terminationCause) && !m_terminationCause.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_RasUsageInfoTypes::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nonStandardUsageTypes.Encode(strm); if (HasOptionalField(e_startTime)) m_startTime.Encode(strm); if (HasOptionalField(e_endTime)) m_endTime.Encode(strm); if (HasOptionalField(e_terminationCause)) m_terminationCause.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_RasUsageInfoTypes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_RasUsageInfoTypes::Class()), PInvalidCast); #endif return new H225_RasUsageInfoTypes(*this); } // // RasUsageSpecification // H225_RasUsageSpecification::H225_RasUsageSpecification(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_RasUsageSpecification::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "when = " << setprecision(indent) << m_when << '\n'; if (HasOptionalField(e_callStartingPoint)) strm << setw(indent+20) << "callStartingPoint = " << setprecision(indent) << m_callStartingPoint << '\n'; strm << setw(indent+11) << "required = " << setprecision(indent) << m_required << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_RasUsageSpecification::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_RasUsageSpecification), PInvalidCast); #endif const H225_RasUsageSpecification & other = (const H225_RasUsageSpecification &)obj; Comparison result; if ((result = m_when.Compare(other.m_when)) != EqualTo) return result; if ((result = m_callStartingPoint.Compare(other.m_callStartingPoint)) != EqualTo) return result; if ((result = m_required.Compare(other.m_required)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_RasUsageSpecification::GetDataLength() const { PINDEX length = 0; length += m_when.GetObjectLength(); if (HasOptionalField(e_callStartingPoint)) length += m_callStartingPoint.GetObjectLength(); length += m_required.GetObjectLength(); return length; } PBoolean H225_RasUsageSpecification::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_when.Decode(strm)) return FALSE; if (HasOptionalField(e_callStartingPoint) && !m_callStartingPoint.Decode(strm)) return FALSE; if (!m_required.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_RasUsageSpecification::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_when.Encode(strm); if (HasOptionalField(e_callStartingPoint)) m_callStartingPoint.Encode(strm); m_required.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_RasUsageSpecification::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_RasUsageSpecification::Class()), PInvalidCast); #endif return new H225_RasUsageSpecification(*this); } // // RasUsageInformation // H225_RasUsageInformation::H225_RasUsageInformation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_RasUsageInformation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+25) << "nonStandardUsageFields = " << setprecision(indent) << m_nonStandardUsageFields << '\n'; if (HasOptionalField(e_alertingTime)) strm << setw(indent+15) << "alertingTime = " << setprecision(indent) << m_alertingTime << '\n'; if (HasOptionalField(e_connectTime)) strm << setw(indent+14) << "connectTime = " << setprecision(indent) << m_connectTime << '\n'; if (HasOptionalField(e_endTime)) strm << setw(indent+10) << "endTime = " << setprecision(indent) << m_endTime << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_RasUsageInformation::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_RasUsageInformation), PInvalidCast); #endif const H225_RasUsageInformation & other = (const H225_RasUsageInformation &)obj; Comparison result; if ((result = m_nonStandardUsageFields.Compare(other.m_nonStandardUsageFields)) != EqualTo) return result; if ((result = m_alertingTime.Compare(other.m_alertingTime)) != EqualTo) return result; if ((result = m_connectTime.Compare(other.m_connectTime)) != EqualTo) return result; if ((result = m_endTime.Compare(other.m_endTime)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_RasUsageInformation::GetDataLength() const { PINDEX length = 0; length += m_nonStandardUsageFields.GetObjectLength(); if (HasOptionalField(e_alertingTime)) length += m_alertingTime.GetObjectLength(); if (HasOptionalField(e_connectTime)) length += m_connectTime.GetObjectLength(); if (HasOptionalField(e_endTime)) length += m_endTime.GetObjectLength(); return length; } PBoolean H225_RasUsageInformation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nonStandardUsageFields.Decode(strm)) return FALSE; if (HasOptionalField(e_alertingTime) && !m_alertingTime.Decode(strm)) return FALSE; if (HasOptionalField(e_connectTime) && !m_connectTime.Decode(strm)) return FALSE; if (HasOptionalField(e_endTime) && !m_endTime.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_RasUsageInformation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nonStandardUsageFields.Encode(strm); if (HasOptionalField(e_alertingTime)) m_alertingTime.Encode(strm); if (HasOptionalField(e_connectTime)) m_connectTime.Encode(strm); if (HasOptionalField(e_endTime)) m_endTime.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_RasUsageInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_RasUsageInformation::Class()), PInvalidCast); #endif return new H225_RasUsageInformation(*this); } // // BandwidthDetails // H225_BandwidthDetails::H225_BandwidthDetails(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_BandwidthDetails::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "sender = " << setprecision(indent) << m_sender << '\n'; strm << setw(indent+12) << "multicast = " << setprecision(indent) << m_multicast << '\n'; strm << setw(indent+12) << "bandwidth = " << setprecision(indent) << m_bandwidth << '\n'; strm << setw(indent+16) << "rtcpAddresses = " << setprecision(indent) << m_rtcpAddresses << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_BandwidthDetails::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_BandwidthDetails), PInvalidCast); #endif const H225_BandwidthDetails & other = (const H225_BandwidthDetails &)obj; Comparison result; if ((result = m_sender.Compare(other.m_sender)) != EqualTo) return result; if ((result = m_multicast.Compare(other.m_multicast)) != EqualTo) return result; if ((result = m_bandwidth.Compare(other.m_bandwidth)) != EqualTo) return result; if ((result = m_rtcpAddresses.Compare(other.m_rtcpAddresses)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_BandwidthDetails::GetDataLength() const { PINDEX length = 0; length += m_sender.GetObjectLength(); length += m_multicast.GetObjectLength(); length += m_bandwidth.GetObjectLength(); length += m_rtcpAddresses.GetObjectLength(); return length; } PBoolean H225_BandwidthDetails::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sender.Decode(strm)) return FALSE; if (!m_multicast.Decode(strm)) return FALSE; if (!m_bandwidth.Decode(strm)) return FALSE; if (!m_rtcpAddresses.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_BandwidthDetails::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sender.Encode(strm); m_multicast.Encode(strm); m_bandwidth.Encode(strm); m_rtcpAddresses.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_BandwidthDetails::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_BandwidthDetails::Class()), PInvalidCast); #endif return new H225_BandwidthDetails(*this); } // // CallCreditServiceControl // H225_CallCreditServiceControl::H225_CallCreditServiceControl(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 5, TRUE, 0) { m_amountString.SetConstraints(PASN_Object::FixedConstraint, 1, 512); m_callDurationLimit.SetConstraints(PASN_Object::FixedConstraint, 1, 4294967295U); } #ifndef PASN_NOPRINTON void H225_CallCreditServiceControl::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_amountString)) strm << setw(indent+15) << "amountString = " << setprecision(indent) << m_amountString << '\n'; if (HasOptionalField(e_billingMode)) strm << setw(indent+14) << "billingMode = " << setprecision(indent) << m_billingMode << '\n'; if (HasOptionalField(e_callDurationLimit)) strm << setw(indent+20) << "callDurationLimit = " << setprecision(indent) << m_callDurationLimit << '\n'; if (HasOptionalField(e_enforceCallDurationLimit)) strm << setw(indent+27) << "enforceCallDurationLimit = " << setprecision(indent) << m_enforceCallDurationLimit << '\n'; if (HasOptionalField(e_callStartingPoint)) strm << setw(indent+20) << "callStartingPoint = " << setprecision(indent) << m_callStartingPoint << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_CallCreditServiceControl::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_CallCreditServiceControl), PInvalidCast); #endif const H225_CallCreditServiceControl & other = (const H225_CallCreditServiceControl &)obj; Comparison result; if ((result = m_amountString.Compare(other.m_amountString)) != EqualTo) return result; if ((result = m_billingMode.Compare(other.m_billingMode)) != EqualTo) return result; if ((result = m_callDurationLimit.Compare(other.m_callDurationLimit)) != EqualTo) return result; if ((result = m_enforceCallDurationLimit.Compare(other.m_enforceCallDurationLimit)) != EqualTo) return result; if ((result = m_callStartingPoint.Compare(other.m_callStartingPoint)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_CallCreditServiceControl::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_amountString)) length += m_amountString.GetObjectLength(); if (HasOptionalField(e_billingMode)) length += m_billingMode.GetObjectLength(); if (HasOptionalField(e_callDurationLimit)) length += m_callDurationLimit.GetObjectLength(); if (HasOptionalField(e_enforceCallDurationLimit)) length += m_enforceCallDurationLimit.GetObjectLength(); if (HasOptionalField(e_callStartingPoint)) length += m_callStartingPoint.GetObjectLength(); return length; } PBoolean H225_CallCreditServiceControl::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_amountString) && !m_amountString.Decode(strm)) return FALSE; if (HasOptionalField(e_billingMode) && !m_billingMode.Decode(strm)) return FALSE; if (HasOptionalField(e_callDurationLimit) && !m_callDurationLimit.Decode(strm)) return FALSE; if (HasOptionalField(e_enforceCallDurationLimit) && !m_enforceCallDurationLimit.Decode(strm)) return FALSE; if (HasOptionalField(e_callStartingPoint) && !m_callStartingPoint.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_CallCreditServiceControl::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_amountString)) m_amountString.Encode(strm); if (HasOptionalField(e_billingMode)) m_billingMode.Encode(strm); if (HasOptionalField(e_callDurationLimit)) m_callDurationLimit.Encode(strm); if (HasOptionalField(e_enforceCallDurationLimit)) m_enforceCallDurationLimit.Encode(strm); if (HasOptionalField(e_callStartingPoint)) m_callStartingPoint.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_CallCreditServiceControl::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CallCreditServiceControl::Class()), PInvalidCast); #endif return new H225_CallCreditServiceControl(*this); } // // GenericData // H225_GenericData::H225_GenericData(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_parameters.SetConstraints(PASN_Object::FixedConstraint, 1, 512); } #ifndef PASN_NOPRINTON void H225_GenericData::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+5) << "id = " << setprecision(indent) << m_id << '\n'; if (HasOptionalField(e_parameters)) strm << setw(indent+13) << "parameters = " << setprecision(indent) << m_parameters << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_GenericData::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_GenericData), PInvalidCast); #endif const H225_GenericData & other = (const H225_GenericData &)obj; Comparison result; if ((result = m_id.Compare(other.m_id)) != EqualTo) return result; if ((result = m_parameters.Compare(other.m_parameters)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_GenericData::GetDataLength() const { PINDEX length = 0; length += m_id.GetObjectLength(); if (HasOptionalField(e_parameters)) length += m_parameters.GetObjectLength(); return length; } PBoolean H225_GenericData::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_id.Decode(strm)) return FALSE; if (HasOptionalField(e_parameters) && !m_parameters.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_GenericData::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_id.Encode(strm); if (HasOptionalField(e_parameters)) m_parameters.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_GenericData::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_GenericData::Class()), PInvalidCast); #endif return new H225_GenericData(*this); } // // EnumeratedParameter // H225_EnumeratedParameter::H225_EnumeratedParameter(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_EnumeratedParameter::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+5) << "id = " << setprecision(indent) << m_id << '\n'; if (HasOptionalField(e_content)) strm << setw(indent+10) << "content = " << setprecision(indent) << m_content << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_EnumeratedParameter::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_EnumeratedParameter), PInvalidCast); #endif const H225_EnumeratedParameter & other = (const H225_EnumeratedParameter &)obj; Comparison result; if ((result = m_id.Compare(other.m_id)) != EqualTo) return result; if ((result = m_content.Compare(other.m_content)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_EnumeratedParameter::GetDataLength() const { PINDEX length = 0; length += m_id.GetObjectLength(); if (HasOptionalField(e_content)) length += m_content.GetObjectLength(); return length; } PBoolean H225_EnumeratedParameter::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_id.Decode(strm)) return FALSE; if (HasOptionalField(e_content) && !m_content.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_EnumeratedParameter::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_id.Encode(strm); if (HasOptionalField(e_content)) m_content.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_EnumeratedParameter::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_EnumeratedParameter::Class()), PInvalidCast); #endif return new H225_EnumeratedParameter(*this); } // // FeatureSet // H225_FeatureSet::H225_FeatureSet(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_FeatureSet::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "replacementFeatureSet = " << setprecision(indent) << m_replacementFeatureSet << '\n'; if (HasOptionalField(e_neededFeatures)) strm << setw(indent+17) << "neededFeatures = " << setprecision(indent) << m_neededFeatures << '\n'; if (HasOptionalField(e_desiredFeatures)) strm << setw(indent+18) << "desiredFeatures = " << setprecision(indent) << m_desiredFeatures << '\n'; if (HasOptionalField(e_supportedFeatures)) strm << setw(indent+20) << "supportedFeatures = " << setprecision(indent) << m_supportedFeatures << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_FeatureSet::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_FeatureSet), PInvalidCast); #endif const H225_FeatureSet & other = (const H225_FeatureSet &)obj; Comparison result; if ((result = m_replacementFeatureSet.Compare(other.m_replacementFeatureSet)) != EqualTo) return result; if ((result = m_neededFeatures.Compare(other.m_neededFeatures)) != EqualTo) return result; if ((result = m_desiredFeatures.Compare(other.m_desiredFeatures)) != EqualTo) return result; if ((result = m_supportedFeatures.Compare(other.m_supportedFeatures)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_FeatureSet::GetDataLength() const { PINDEX length = 0; length += m_replacementFeatureSet.GetObjectLength(); if (HasOptionalField(e_neededFeatures)) length += m_neededFeatures.GetObjectLength(); if (HasOptionalField(e_desiredFeatures)) length += m_desiredFeatures.GetObjectLength(); if (HasOptionalField(e_supportedFeatures)) length += m_supportedFeatures.GetObjectLength(); return length; } PBoolean H225_FeatureSet::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_replacementFeatureSet.Decode(strm)) return FALSE; if (HasOptionalField(e_neededFeatures) && !m_neededFeatures.Decode(strm)) return FALSE; if (HasOptionalField(e_desiredFeatures) && !m_desiredFeatures.Decode(strm)) return FALSE; if (HasOptionalField(e_supportedFeatures) && !m_supportedFeatures.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_FeatureSet::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_replacementFeatureSet.Encode(strm); if (HasOptionalField(e_neededFeatures)) m_neededFeatures.Encode(strm); if (HasOptionalField(e_desiredFeatures)) m_desiredFeatures.Encode(strm); if (HasOptionalField(e_supportedFeatures)) m_supportedFeatures.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_FeatureSet::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_FeatureSet::Class()), PInvalidCast); #endif return new H225_FeatureSet(*this); } // // RTPSession // H225_RTPSession::H225_RTPSession(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 2) { m_ssrc.SetConstraints(PASN_Object::FixedConstraint, 1, 4294967295U); m_sessionId.SetConstraints(PASN_Object::FixedConstraint, 1, 255); } #ifndef PASN_NOPRINTON void H225_RTPSession::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "rtpAddress = " << setprecision(indent) << m_rtpAddress << '\n'; strm << setw(indent+14) << "rtcpAddress = " << setprecision(indent) << m_rtcpAddress << '\n'; strm << setw(indent+8) << "cname = " << setprecision(indent) << m_cname << '\n'; strm << setw(indent+7) << "ssrc = " << setprecision(indent) << m_ssrc << '\n'; strm << setw(indent+12) << "sessionId = " << setprecision(indent) << m_sessionId << '\n'; strm << setw(indent+23) << "associatedSessionIds = " << setprecision(indent) << m_associatedSessionIds << '\n'; if (HasOptionalField(e_multicast)) strm << setw(indent+12) << "multicast = " << setprecision(indent) << m_multicast << '\n'; if (HasOptionalField(e_bandwidth)) strm << setw(indent+12) << "bandwidth = " << setprecision(indent) << m_bandwidth << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_RTPSession::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_RTPSession), PInvalidCast); #endif const H225_RTPSession & other = (const H225_RTPSession &)obj; Comparison result; if ((result = m_rtpAddress.Compare(other.m_rtpAddress)) != EqualTo) return result; if ((result = m_rtcpAddress.Compare(other.m_rtcpAddress)) != EqualTo) return result; if ((result = m_cname.Compare(other.m_cname)) != EqualTo) return result; if ((result = m_ssrc.Compare(other.m_ssrc)) != EqualTo) return result; if ((result = m_sessionId.Compare(other.m_sessionId)) != EqualTo) return result; if ((result = m_associatedSessionIds.Compare(other.m_associatedSessionIds)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_RTPSession::GetDataLength() const { PINDEX length = 0; length += m_rtpAddress.GetObjectLength(); length += m_rtcpAddress.GetObjectLength(); length += m_cname.GetObjectLength(); length += m_ssrc.GetObjectLength(); length += m_sessionId.GetObjectLength(); length += m_associatedSessionIds.GetObjectLength(); return length; } PBoolean H225_RTPSession::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_rtpAddress.Decode(strm)) return FALSE; if (!m_rtcpAddress.Decode(strm)) return FALSE; if (!m_cname.Decode(strm)) return FALSE; if (!m_ssrc.Decode(strm)) return FALSE; if (!m_sessionId.Decode(strm)) return FALSE; if (!m_associatedSessionIds.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_multicast, m_multicast)) return FALSE; if (!KnownExtensionDecode(strm, e_bandwidth, m_bandwidth)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_RTPSession::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_rtpAddress.Encode(strm); m_rtcpAddress.Encode(strm); m_cname.Encode(strm); m_ssrc.Encode(strm); m_sessionId.Encode(strm); m_associatedSessionIds.Encode(strm); KnownExtensionEncode(strm, e_multicast, m_multicast); KnownExtensionEncode(strm, e_bandwidth, m_bandwidth); UnknownExtensionsEncode(strm); } PObject * H225_RTPSession::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_RTPSession::Class()), PInvalidCast); #endif return new H225_RTPSession(*this); } // // GatekeeperConfirm // H225_GatekeeperConfirm::H225_GatekeeperConfirm(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 11) { } #ifndef PASN_NOPRINTON void H225_GatekeeperConfirm::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+21) << "protocolIdentifier = " << setprecision(indent) << m_protocolIdentifier << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_gatekeeperIdentifier)) strm << setw(indent+23) << "gatekeeperIdentifier = " << setprecision(indent) << m_gatekeeperIdentifier << '\n'; strm << setw(indent+13) << "rasAddress = " << setprecision(indent) << m_rasAddress << '\n'; if (HasOptionalField(e_alternateGatekeeper)) strm << setw(indent+22) << "alternateGatekeeper = " << setprecision(indent) << m_alternateGatekeeper << '\n'; if (HasOptionalField(e_authenticationMode)) strm << setw(indent+21) << "authenticationMode = " << setprecision(indent) << m_authenticationMode << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_algorithmOID)) strm << setw(indent+15) << "algorithmOID = " << setprecision(indent) << m_algorithmOID << '\n'; if (HasOptionalField(e_integrity)) strm << setw(indent+12) << "integrity = " << setprecision(indent) << m_integrity << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; if (HasOptionalField(e_assignedGatekeeper)) strm << setw(indent+21) << "assignedGatekeeper = " << setprecision(indent) << m_assignedGatekeeper << '\n'; if (HasOptionalField(e_rehomingModel)) strm << setw(indent+16) << "rehomingModel = " << setprecision(indent) << m_rehomingModel << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_GatekeeperConfirm::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_GatekeeperConfirm), PInvalidCast); #endif const H225_GatekeeperConfirm & other = (const H225_GatekeeperConfirm &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_protocolIdentifier.Compare(other.m_protocolIdentifier)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_gatekeeperIdentifier.Compare(other.m_gatekeeperIdentifier)) != EqualTo) return result; if ((result = m_rasAddress.Compare(other.m_rasAddress)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_GatekeeperConfirm::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); length += m_protocolIdentifier.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); if (HasOptionalField(e_gatekeeperIdentifier)) length += m_gatekeeperIdentifier.GetObjectLength(); length += m_rasAddress.GetObjectLength(); return length; } PBoolean H225_GatekeeperConfirm::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_protocolIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (HasOptionalField(e_gatekeeperIdentifier) && !m_gatekeeperIdentifier.Decode(strm)) return FALSE; if (!m_rasAddress.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_alternateGatekeeper, m_alternateGatekeeper)) return FALSE; if (!KnownExtensionDecode(strm, e_authenticationMode, m_authenticationMode)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_algorithmOID, m_algorithmOID)) return FALSE; if (!KnownExtensionDecode(strm, e_integrity, m_integrity)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; if (!KnownExtensionDecode(strm, e_assignedGatekeeper, m_assignedGatekeeper)) return FALSE; if (!KnownExtensionDecode(strm, e_rehomingModel, m_rehomingModel)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_GatekeeperConfirm::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); m_protocolIdentifier.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); if (HasOptionalField(e_gatekeeperIdentifier)) m_gatekeeperIdentifier.Encode(strm); m_rasAddress.Encode(strm); KnownExtensionEncode(strm, e_alternateGatekeeper, m_alternateGatekeeper); KnownExtensionEncode(strm, e_authenticationMode, m_authenticationMode); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_algorithmOID, m_algorithmOID); KnownExtensionEncode(strm, e_integrity, m_integrity); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_featureSet, m_featureSet); KnownExtensionEncode(strm, e_genericData, m_genericData); KnownExtensionEncode(strm, e_assignedGatekeeper, m_assignedGatekeeper); KnownExtensionEncode(strm, e_rehomingModel, m_rehomingModel); UnknownExtensionsEncode(strm); } PObject * H225_GatekeeperConfirm::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_GatekeeperConfirm::Class()), PInvalidCast); #endif return new H225_GatekeeperConfirm(*this); } // // GatekeeperReject // H225_GatekeeperReject::H225_GatekeeperReject(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 6) { } #ifndef PASN_NOPRINTON void H225_GatekeeperReject::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+21) << "protocolIdentifier = " << setprecision(indent) << m_protocolIdentifier << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_gatekeeperIdentifier)) strm << setw(indent+23) << "gatekeeperIdentifier = " << setprecision(indent) << m_gatekeeperIdentifier << '\n'; strm << setw(indent+15) << "rejectReason = " << setprecision(indent) << m_rejectReason << '\n'; if (HasOptionalField(e_altGKInfo)) strm << setw(indent+12) << "altGKInfo = " << setprecision(indent) << m_altGKInfo << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_GatekeeperReject::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_GatekeeperReject), PInvalidCast); #endif const H225_GatekeeperReject & other = (const H225_GatekeeperReject &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_protocolIdentifier.Compare(other.m_protocolIdentifier)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_gatekeeperIdentifier.Compare(other.m_gatekeeperIdentifier)) != EqualTo) return result; if ((result = m_rejectReason.Compare(other.m_rejectReason)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_GatekeeperReject::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); length += m_protocolIdentifier.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); if (HasOptionalField(e_gatekeeperIdentifier)) length += m_gatekeeperIdentifier.GetObjectLength(); length += m_rejectReason.GetObjectLength(); return length; } PBoolean H225_GatekeeperReject::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_protocolIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (HasOptionalField(e_gatekeeperIdentifier) && !m_gatekeeperIdentifier.Decode(strm)) return FALSE; if (!m_rejectReason.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_altGKInfo, m_altGKInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_GatekeeperReject::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); m_protocolIdentifier.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); if (HasOptionalField(e_gatekeeperIdentifier)) m_gatekeeperIdentifier.Encode(strm); m_rejectReason.Encode(strm); KnownExtensionEncode(strm, e_altGKInfo, m_altGKInfo); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_featureSet, m_featureSet); KnownExtensionEncode(strm, e_genericData, m_genericData); UnknownExtensionsEncode(strm); } PObject * H225_GatekeeperReject::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_GatekeeperReject::Class()), PInvalidCast); #endif return new H225_GatekeeperReject(*this); } // // RegistrationReject // H225_RegistrationReject::H225_RegistrationReject(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 7) { } #ifndef PASN_NOPRINTON void H225_RegistrationReject::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+21) << "protocolIdentifier = " << setprecision(indent) << m_protocolIdentifier << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent+15) << "rejectReason = " << setprecision(indent) << m_rejectReason << '\n'; if (HasOptionalField(e_gatekeeperIdentifier)) strm << setw(indent+23) << "gatekeeperIdentifier = " << setprecision(indent) << m_gatekeeperIdentifier << '\n'; if (HasOptionalField(e_altGKInfo)) strm << setw(indent+12) << "altGKInfo = " << setprecision(indent) << m_altGKInfo << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; if (HasOptionalField(e_assignedGatekeeper)) strm << setw(indent+21) << "assignedGatekeeper = " << setprecision(indent) << m_assignedGatekeeper << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_RegistrationReject::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_RegistrationReject), PInvalidCast); #endif const H225_RegistrationReject & other = (const H225_RegistrationReject &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_protocolIdentifier.Compare(other.m_protocolIdentifier)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_rejectReason.Compare(other.m_rejectReason)) != EqualTo) return result; if ((result = m_gatekeeperIdentifier.Compare(other.m_gatekeeperIdentifier)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_RegistrationReject::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); length += m_protocolIdentifier.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); length += m_rejectReason.GetObjectLength(); if (HasOptionalField(e_gatekeeperIdentifier)) length += m_gatekeeperIdentifier.GetObjectLength(); return length; } PBoolean H225_RegistrationReject::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_protocolIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!m_rejectReason.Decode(strm)) return FALSE; if (HasOptionalField(e_gatekeeperIdentifier) && !m_gatekeeperIdentifier.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_altGKInfo, m_altGKInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; if (!KnownExtensionDecode(strm, e_assignedGatekeeper, m_assignedGatekeeper)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_RegistrationReject::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); m_protocolIdentifier.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); m_rejectReason.Encode(strm); if (HasOptionalField(e_gatekeeperIdentifier)) m_gatekeeperIdentifier.Encode(strm); KnownExtensionEncode(strm, e_altGKInfo, m_altGKInfo); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_featureSet, m_featureSet); KnownExtensionEncode(strm, e_genericData, m_genericData); KnownExtensionEncode(strm, e_assignedGatekeeper, m_assignedGatekeeper); UnknownExtensionsEncode(strm); } PObject * H225_RegistrationReject::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_RegistrationReject::Class()), PInvalidCast); #endif return new H225_RegistrationReject(*this); } // // UnregistrationRequest // H225_UnregistrationRequest::H225_UnregistrationRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 11) { } #ifndef PASN_NOPRINTON void H225_UnregistrationRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+20) << "callSignalAddress = " << setprecision(indent) << m_callSignalAddress << '\n'; if (HasOptionalField(e_endpointAlias)) strm << setw(indent+16) << "endpointAlias = " << setprecision(indent) << m_endpointAlias << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_endpointIdentifier)) strm << setw(indent+21) << "endpointIdentifier = " << setprecision(indent) << m_endpointIdentifier << '\n'; if (HasOptionalField(e_alternateEndpoints)) strm << setw(indent+21) << "alternateEndpoints = " << setprecision(indent) << m_alternateEndpoints << '\n'; if (HasOptionalField(e_gatekeeperIdentifier)) strm << setw(indent+23) << "gatekeeperIdentifier = " << setprecision(indent) << m_gatekeeperIdentifier << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_reason)) strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; if (HasOptionalField(e_endpointAliasPattern)) strm << setw(indent+23) << "endpointAliasPattern = " << setprecision(indent) << m_endpointAliasPattern << '\n'; if (HasOptionalField(e_supportedPrefixes)) strm << setw(indent+20) << "supportedPrefixes = " << setprecision(indent) << m_supportedPrefixes << '\n'; if (HasOptionalField(e_alternateGatekeeper)) strm << setw(indent+22) << "alternateGatekeeper = " << setprecision(indent) << m_alternateGatekeeper << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; if (HasOptionalField(e_assignedGatekeeper)) strm << setw(indent+21) << "assignedGatekeeper = " << setprecision(indent) << m_assignedGatekeeper << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_UnregistrationRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_UnregistrationRequest), PInvalidCast); #endif const H225_UnregistrationRequest & other = (const H225_UnregistrationRequest &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_callSignalAddress.Compare(other.m_callSignalAddress)) != EqualTo) return result; if ((result = m_endpointAlias.Compare(other.m_endpointAlias)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_endpointIdentifier.Compare(other.m_endpointIdentifier)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_UnregistrationRequest::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); length += m_callSignalAddress.GetObjectLength(); if (HasOptionalField(e_endpointAlias)) length += m_endpointAlias.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); if (HasOptionalField(e_endpointIdentifier)) length += m_endpointIdentifier.GetObjectLength(); return length; } PBoolean H225_UnregistrationRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_callSignalAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_endpointAlias) && !m_endpointAlias.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (HasOptionalField(e_endpointIdentifier) && !m_endpointIdentifier.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_alternateEndpoints, m_alternateEndpoints)) return FALSE; if (!KnownExtensionDecode(strm, e_gatekeeperIdentifier, m_gatekeeperIdentifier)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_reason, m_reason)) return FALSE; if (!KnownExtensionDecode(strm, e_endpointAliasPattern, m_endpointAliasPattern)) return FALSE; if (!KnownExtensionDecode(strm, e_supportedPrefixes, m_supportedPrefixes)) return FALSE; if (!KnownExtensionDecode(strm, e_alternateGatekeeper, m_alternateGatekeeper)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; if (!KnownExtensionDecode(strm, e_assignedGatekeeper, m_assignedGatekeeper)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_UnregistrationRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); m_callSignalAddress.Encode(strm); if (HasOptionalField(e_endpointAlias)) m_endpointAlias.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); if (HasOptionalField(e_endpointIdentifier)) m_endpointIdentifier.Encode(strm); KnownExtensionEncode(strm, e_alternateEndpoints, m_alternateEndpoints); KnownExtensionEncode(strm, e_gatekeeperIdentifier, m_gatekeeperIdentifier); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_reason, m_reason); KnownExtensionEncode(strm, e_endpointAliasPattern, m_endpointAliasPattern); KnownExtensionEncode(strm, e_supportedPrefixes, m_supportedPrefixes); KnownExtensionEncode(strm, e_alternateGatekeeper, m_alternateGatekeeper); KnownExtensionEncode(strm, e_genericData, m_genericData); KnownExtensionEncode(strm, e_assignedGatekeeper, m_assignedGatekeeper); UnknownExtensionsEncode(strm); } PObject * H225_UnregistrationRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_UnregistrationRequest::Class()), PInvalidCast); #endif return new H225_UnregistrationRequest(*this); } // // UnregistrationConfirm // H225_UnregistrationConfirm::H225_UnregistrationConfirm(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 5) { } #ifndef PASN_NOPRINTON void H225_UnregistrationConfirm::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; if (HasOptionalField(e_assignedGatekeeper)) strm << setw(indent+21) << "assignedGatekeeper = " << setprecision(indent) << m_assignedGatekeeper << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_UnregistrationConfirm::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_UnregistrationConfirm), PInvalidCast); #endif const H225_UnregistrationConfirm & other = (const H225_UnregistrationConfirm &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_UnregistrationConfirm::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_UnregistrationConfirm::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; if (!KnownExtensionDecode(strm, e_assignedGatekeeper, m_assignedGatekeeper)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_UnregistrationConfirm::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_genericData, m_genericData); KnownExtensionEncode(strm, e_assignedGatekeeper, m_assignedGatekeeper); UnknownExtensionsEncode(strm); } PObject * H225_UnregistrationConfirm::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_UnregistrationConfirm::Class()), PInvalidCast); #endif return new H225_UnregistrationConfirm(*this); } // // UnregistrationReject // H225_UnregistrationReject::H225_UnregistrationReject(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 5) { } #ifndef PASN_NOPRINTON void H225_UnregistrationReject::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+15) << "rejectReason = " << setprecision(indent) << m_rejectReason << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_altGKInfo)) strm << setw(indent+12) << "altGKInfo = " << setprecision(indent) << m_altGKInfo << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_UnregistrationReject::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_UnregistrationReject), PInvalidCast); #endif const H225_UnregistrationReject & other = (const H225_UnregistrationReject &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_rejectReason.Compare(other.m_rejectReason)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_UnregistrationReject::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); length += m_rejectReason.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_UnregistrationReject::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_rejectReason.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_altGKInfo, m_altGKInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_UnregistrationReject::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); m_rejectReason.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_altGKInfo, m_altGKInfo); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_genericData, m_genericData); UnknownExtensionsEncode(strm); } PObject * H225_UnregistrationReject::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_UnregistrationReject::Class()), PInvalidCast); #endif return new H225_UnregistrationReject(*this); } // // AdmissionReject // H225_AdmissionReject::H225_AdmissionReject(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 9) { } #ifndef PASN_NOPRINTON void H225_AdmissionReject::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+15) << "rejectReason = " << setprecision(indent) << m_rejectReason << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_altGKInfo)) strm << setw(indent+12) << "altGKInfo = " << setprecision(indent) << m_altGKInfo << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_callSignalAddress)) strm << setw(indent+20) << "callSignalAddress = " << setprecision(indent) << m_callSignalAddress << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_serviceControl)) strm << setw(indent+17) << "serviceControl = " << setprecision(indent) << m_serviceControl << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; if (HasOptionalField(e_assignedGatekeeper)) strm << setw(indent+21) << "assignedGatekeeper = " << setprecision(indent) << m_assignedGatekeeper << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_AdmissionReject::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_AdmissionReject), PInvalidCast); #endif const H225_AdmissionReject & other = (const H225_AdmissionReject &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_rejectReason.Compare(other.m_rejectReason)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_AdmissionReject::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); length += m_rejectReason.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_AdmissionReject::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_rejectReason.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_altGKInfo, m_altGKInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_callSignalAddress, m_callSignalAddress)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_serviceControl, m_serviceControl)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; if (!KnownExtensionDecode(strm, e_assignedGatekeeper, m_assignedGatekeeper)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_AdmissionReject::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); m_rejectReason.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_altGKInfo, m_altGKInfo); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_callSignalAddress, m_callSignalAddress); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_serviceControl, m_serviceControl); KnownExtensionEncode(strm, e_featureSet, m_featureSet); KnownExtensionEncode(strm, e_genericData, m_genericData); KnownExtensionEncode(strm, e_assignedGatekeeper, m_assignedGatekeeper); UnknownExtensionsEncode(strm); } PObject * H225_AdmissionReject::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_AdmissionReject::Class()), PInvalidCast); #endif return new H225_AdmissionReject(*this); } // // BandwidthReject // H225_BandwidthReject::H225_BandwidthReject(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 5) { } #ifndef PASN_NOPRINTON void H225_BandwidthReject::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+15) << "rejectReason = " << setprecision(indent) << m_rejectReason << '\n'; strm << setw(indent+19) << "allowedBandWidth = " << setprecision(indent) << m_allowedBandWidth << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_altGKInfo)) strm << setw(indent+12) << "altGKInfo = " << setprecision(indent) << m_altGKInfo << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_BandwidthReject::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_BandwidthReject), PInvalidCast); #endif const H225_BandwidthReject & other = (const H225_BandwidthReject &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_rejectReason.Compare(other.m_rejectReason)) != EqualTo) return result; if ((result = m_allowedBandWidth.Compare(other.m_allowedBandWidth)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_BandwidthReject::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); length += m_rejectReason.GetObjectLength(); length += m_allowedBandWidth.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_BandwidthReject::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_rejectReason.Decode(strm)) return FALSE; if (!m_allowedBandWidth.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_altGKInfo, m_altGKInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_BandwidthReject::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); m_rejectReason.Encode(strm); m_allowedBandWidth.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_altGKInfo, m_altGKInfo); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_genericData, m_genericData); UnknownExtensionsEncode(strm); } PObject * H225_BandwidthReject::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_BandwidthReject::Class()), PInvalidCast); #endif return new H225_BandwidthReject(*this); } // // LocationReject // H225_LocationReject::H225_LocationReject(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 7) { } #ifndef PASN_NOPRINTON void H225_LocationReject::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+15) << "rejectReason = " << setprecision(indent) << m_rejectReason << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_altGKInfo)) strm << setw(indent+12) << "altGKInfo = " << setprecision(indent) << m_altGKInfo << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; if (HasOptionalField(e_serviceControl)) strm << setw(indent+17) << "serviceControl = " << setprecision(indent) << m_serviceControl << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_LocationReject::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_LocationReject), PInvalidCast); #endif const H225_LocationReject & other = (const H225_LocationReject &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_rejectReason.Compare(other.m_rejectReason)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_LocationReject::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); length += m_rejectReason.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_LocationReject::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_rejectReason.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_altGKInfo, m_altGKInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; if (!KnownExtensionDecode(strm, e_serviceControl, m_serviceControl)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_LocationReject::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); m_rejectReason.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_altGKInfo, m_altGKInfo); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_featureSet, m_featureSet); KnownExtensionEncode(strm, e_genericData, m_genericData); KnownExtensionEncode(strm, e_serviceControl, m_serviceControl); UnknownExtensionsEncode(strm); } PObject * H225_LocationReject::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_LocationReject::Class()), PInvalidCast); #endif return new H225_LocationReject(*this); } // // DisengageReject // H225_DisengageReject::H225_DisengageReject(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 5) { } #ifndef PASN_NOPRINTON void H225_DisengageReject::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+15) << "rejectReason = " << setprecision(indent) << m_rejectReason << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_altGKInfo)) strm << setw(indent+12) << "altGKInfo = " << setprecision(indent) << m_altGKInfo << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_DisengageReject::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_DisengageReject), PInvalidCast); #endif const H225_DisengageReject & other = (const H225_DisengageReject &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_rejectReason.Compare(other.m_rejectReason)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_DisengageReject::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); length += m_rejectReason.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_DisengageReject::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_rejectReason.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_altGKInfo, m_altGKInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_DisengageReject::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); m_rejectReason.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_altGKInfo, m_altGKInfo); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_genericData, m_genericData); UnknownExtensionsEncode(strm); } PObject * H225_DisengageReject::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_DisengageReject::Class()), PInvalidCast); #endif return new H225_DisengageReject(*this); } // // InfoRequest // H225_InfoRequest::H225_InfoRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 12) { IncludeOptionalField(e_callIdentifier); m_nextSegmentRequested.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H225_InfoRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+21) << "callReferenceValue = " << setprecision(indent) << m_callReferenceValue << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_replyAddress)) strm << setw(indent+15) << "replyAddress = " << setprecision(indent) << m_replyAddress << '\n'; if (HasOptionalField(e_callIdentifier)) strm << setw(indent+17) << "callIdentifier = " << setprecision(indent) << m_callIdentifier << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_uuiesRequested)) strm << setw(indent+17) << "uuiesRequested = " << setprecision(indent) << m_uuiesRequested << '\n'; if (HasOptionalField(e_callLinkage)) strm << setw(indent+14) << "callLinkage = " << setprecision(indent) << m_callLinkage << '\n'; if (HasOptionalField(e_usageInfoRequested)) strm << setw(indent+21) << "usageInfoRequested = " << setprecision(indent) << m_usageInfoRequested << '\n'; if (HasOptionalField(e_segmentedResponseSupported)) strm << setw(indent+29) << "segmentedResponseSupported = " << setprecision(indent) << m_segmentedResponseSupported << '\n'; if (HasOptionalField(e_nextSegmentRequested)) strm << setw(indent+23) << "nextSegmentRequested = " << setprecision(indent) << m_nextSegmentRequested << '\n'; if (HasOptionalField(e_capacityInfoRequested)) strm << setw(indent+24) << "capacityInfoRequested = " << setprecision(indent) << m_capacityInfoRequested << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; if (HasOptionalField(e_assignedGatekeeper)) strm << setw(indent+21) << "assignedGatekeeper = " << setprecision(indent) << m_assignedGatekeeper << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_InfoRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_InfoRequest), PInvalidCast); #endif const H225_InfoRequest & other = (const H225_InfoRequest &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_callReferenceValue.Compare(other.m_callReferenceValue)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_replyAddress.Compare(other.m_replyAddress)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_InfoRequest::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); length += m_callReferenceValue.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); if (HasOptionalField(e_replyAddress)) length += m_replyAddress.GetObjectLength(); return length; } PBoolean H225_InfoRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_callReferenceValue.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (HasOptionalField(e_replyAddress) && !m_replyAddress.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_callIdentifier, m_callIdentifier)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_uuiesRequested, m_uuiesRequested)) return FALSE; if (!KnownExtensionDecode(strm, e_callLinkage, m_callLinkage)) return FALSE; if (!KnownExtensionDecode(strm, e_usageInfoRequested, m_usageInfoRequested)) return FALSE; if (!KnownExtensionDecode(strm, e_segmentedResponseSupported, m_segmentedResponseSupported)) return FALSE; if (!KnownExtensionDecode(strm, e_nextSegmentRequested, m_nextSegmentRequested)) return FALSE; if (!KnownExtensionDecode(strm, e_capacityInfoRequested, m_capacityInfoRequested)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; if (!KnownExtensionDecode(strm, e_assignedGatekeeper, m_assignedGatekeeper)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_InfoRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); m_callReferenceValue.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); if (HasOptionalField(e_replyAddress)) m_replyAddress.Encode(strm); KnownExtensionEncode(strm, e_callIdentifier, m_callIdentifier); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_uuiesRequested, m_uuiesRequested); KnownExtensionEncode(strm, e_callLinkage, m_callLinkage); KnownExtensionEncode(strm, e_usageInfoRequested, m_usageInfoRequested); KnownExtensionEncode(strm, e_segmentedResponseSupported, m_segmentedResponseSupported); KnownExtensionEncode(strm, e_nextSegmentRequested, m_nextSegmentRequested); KnownExtensionEncode(strm, e_capacityInfoRequested, m_capacityInfoRequested); KnownExtensionEncode(strm, e_genericData, m_genericData); KnownExtensionEncode(strm, e_assignedGatekeeper, m_assignedGatekeeper); UnknownExtensionsEncode(strm); } PObject * H225_InfoRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_InfoRequest::Class()), PInvalidCast); #endif return new H225_InfoRequest(*this); } // // InfoRequestAck // H225_InfoRequestAck::H225_InfoRequestAck(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 4, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_InfoRequestAck::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_InfoRequestAck::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_InfoRequestAck), PInvalidCast); #endif const H225_InfoRequestAck & other = (const H225_InfoRequestAck &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_tokens.Compare(other.m_tokens)) != EqualTo) return result; if ((result = m_cryptoTokens.Compare(other.m_cryptoTokens)) != EqualTo) return result; if ((result = m_integrityCheckValue.Compare(other.m_integrityCheckValue)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_InfoRequestAck::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); if (HasOptionalField(e_tokens)) length += m_tokens.GetObjectLength(); if (HasOptionalField(e_cryptoTokens)) length += m_cryptoTokens.GetObjectLength(); if (HasOptionalField(e_integrityCheckValue)) length += m_integrityCheckValue.GetObjectLength(); return length; } PBoolean H225_InfoRequestAck::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (HasOptionalField(e_tokens) && !m_tokens.Decode(strm)) return FALSE; if (HasOptionalField(e_cryptoTokens) && !m_cryptoTokens.Decode(strm)) return FALSE; if (HasOptionalField(e_integrityCheckValue) && !m_integrityCheckValue.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_InfoRequestAck::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); if (HasOptionalField(e_tokens)) m_tokens.Encode(strm); if (HasOptionalField(e_cryptoTokens)) m_cryptoTokens.Encode(strm); if (HasOptionalField(e_integrityCheckValue)) m_integrityCheckValue.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_InfoRequestAck::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_InfoRequestAck::Class()), PInvalidCast); #endif return new H225_InfoRequestAck(*this); } // // InfoRequestNak // H225_InfoRequestNak::H225_InfoRequestNak(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 5, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_InfoRequestNak::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent+12) << "nakReason = " << setprecision(indent) << m_nakReason << '\n'; if (HasOptionalField(e_altGKInfo)) strm << setw(indent+12) << "altGKInfo = " << setprecision(indent) << m_altGKInfo << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_InfoRequestNak::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_InfoRequestNak), PInvalidCast); #endif const H225_InfoRequestNak & other = (const H225_InfoRequestNak &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_nakReason.Compare(other.m_nakReason)) != EqualTo) return result; if ((result = m_altGKInfo.Compare(other.m_altGKInfo)) != EqualTo) return result; if ((result = m_tokens.Compare(other.m_tokens)) != EqualTo) return result; if ((result = m_cryptoTokens.Compare(other.m_cryptoTokens)) != EqualTo) return result; if ((result = m_integrityCheckValue.Compare(other.m_integrityCheckValue)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_InfoRequestNak::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); length += m_nakReason.GetObjectLength(); if (HasOptionalField(e_altGKInfo)) length += m_altGKInfo.GetObjectLength(); if (HasOptionalField(e_tokens)) length += m_tokens.GetObjectLength(); if (HasOptionalField(e_cryptoTokens)) length += m_cryptoTokens.GetObjectLength(); if (HasOptionalField(e_integrityCheckValue)) length += m_integrityCheckValue.GetObjectLength(); return length; } PBoolean H225_InfoRequestNak::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!m_nakReason.Decode(strm)) return FALSE; if (HasOptionalField(e_altGKInfo) && !m_altGKInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_tokens) && !m_tokens.Decode(strm)) return FALSE; if (HasOptionalField(e_cryptoTokens) && !m_cryptoTokens.Decode(strm)) return FALSE; if (HasOptionalField(e_integrityCheckValue) && !m_integrityCheckValue.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_InfoRequestNak::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); m_nakReason.Encode(strm); if (HasOptionalField(e_altGKInfo)) m_altGKInfo.Encode(strm); if (HasOptionalField(e_tokens)) m_tokens.Encode(strm); if (HasOptionalField(e_cryptoTokens)) m_cryptoTokens.Encode(strm); if (HasOptionalField(e_integrityCheckValue)) m_integrityCheckValue.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_InfoRequestNak::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_InfoRequestNak::Class()), PInvalidCast); #endif return new H225_InfoRequestNak(*this); } // // NonStandardMessage // H225_NonStandardMessage::H225_NonStandardMessage(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 5) { } #ifndef PASN_NOPRINTON void H225_NonStandardMessage::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_NonStandardMessage::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_NonStandardMessage), PInvalidCast); #endif const H225_NonStandardMessage & other = (const H225_NonStandardMessage &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_NonStandardMessage::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_NonStandardMessage::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_NonStandardMessage::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_featureSet, m_featureSet); KnownExtensionEncode(strm, e_genericData, m_genericData); UnknownExtensionsEncode(strm); } PObject * H225_NonStandardMessage::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_NonStandardMessage::Class()), PInvalidCast); #endif return new H225_NonStandardMessage(*this); } // // UnknownMessageResponse // H225_UnknownMessageResponse::H225_UnknownMessageResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 4) { IncludeOptionalField(e_messageNotUnderstood); } #ifndef PASN_NOPRINTON void H225_UnknownMessageResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_messageNotUnderstood)) strm << setw(indent+23) << "messageNotUnderstood = " << setprecision(indent) << m_messageNotUnderstood << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_UnknownMessageResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_UnknownMessageResponse), PInvalidCast); #endif const H225_UnknownMessageResponse & other = (const H225_UnknownMessageResponse &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_UnknownMessageResponse::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); return length; } PBoolean H225_UnknownMessageResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_messageNotUnderstood, m_messageNotUnderstood)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_UnknownMessageResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_messageNotUnderstood, m_messageNotUnderstood); UnknownExtensionsEncode(strm); } PObject * H225_UnknownMessageResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_UnknownMessageResponse::Class()), PInvalidCast); #endif return new H225_UnknownMessageResponse(*this); } // // RequestInProgress // H225_RequestInProgress::H225_RequestInProgress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 4, TRUE, 0) { m_delay.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } #ifndef PASN_NOPRINTON void H225_RequestInProgress::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; strm << setw(indent+8) << "delay = " << setprecision(indent) << m_delay << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_RequestInProgress::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_RequestInProgress), PInvalidCast); #endif const H225_RequestInProgress & other = (const H225_RequestInProgress &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_tokens.Compare(other.m_tokens)) != EqualTo) return result; if ((result = m_cryptoTokens.Compare(other.m_cryptoTokens)) != EqualTo) return result; if ((result = m_integrityCheckValue.Compare(other.m_integrityCheckValue)) != EqualTo) return result; if ((result = m_delay.Compare(other.m_delay)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_RequestInProgress::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); if (HasOptionalField(e_tokens)) length += m_tokens.GetObjectLength(); if (HasOptionalField(e_cryptoTokens)) length += m_cryptoTokens.GetObjectLength(); if (HasOptionalField(e_integrityCheckValue)) length += m_integrityCheckValue.GetObjectLength(); length += m_delay.GetObjectLength(); return length; } PBoolean H225_RequestInProgress::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (HasOptionalField(e_tokens) && !m_tokens.Decode(strm)) return FALSE; if (HasOptionalField(e_cryptoTokens) && !m_cryptoTokens.Decode(strm)) return FALSE; if (HasOptionalField(e_integrityCheckValue) && !m_integrityCheckValue.Decode(strm)) return FALSE; if (!m_delay.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_RequestInProgress::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); if (HasOptionalField(e_tokens)) m_tokens.Encode(strm); if (HasOptionalField(e_cryptoTokens)) m_cryptoTokens.Encode(strm); if (HasOptionalField(e_integrityCheckValue)) m_integrityCheckValue.Encode(strm); m_delay.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_RequestInProgress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_RequestInProgress::Class()), PInvalidCast); #endif return new H225_RequestInProgress(*this); } // // ResourcesAvailableConfirm // H225_ResourcesAvailableConfirm::H225_ResourcesAvailableConfirm(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 4, TRUE, 1) { } #ifndef PASN_NOPRINTON void H225_ResourcesAvailableConfirm::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+21) << "protocolIdentifier = " << setprecision(indent) << m_protocolIdentifier << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_ResourcesAvailableConfirm::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_ResourcesAvailableConfirm), PInvalidCast); #endif const H225_ResourcesAvailableConfirm & other = (const H225_ResourcesAvailableConfirm &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_protocolIdentifier.Compare(other.m_protocolIdentifier)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_tokens.Compare(other.m_tokens)) != EqualTo) return result; if ((result = m_cryptoTokens.Compare(other.m_cryptoTokens)) != EqualTo) return result; if ((result = m_integrityCheckValue.Compare(other.m_integrityCheckValue)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_ResourcesAvailableConfirm::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); length += m_protocolIdentifier.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); if (HasOptionalField(e_tokens)) length += m_tokens.GetObjectLength(); if (HasOptionalField(e_cryptoTokens)) length += m_cryptoTokens.GetObjectLength(); if (HasOptionalField(e_integrityCheckValue)) length += m_integrityCheckValue.GetObjectLength(); return length; } PBoolean H225_ResourcesAvailableConfirm::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_protocolIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (HasOptionalField(e_tokens) && !m_tokens.Decode(strm)) return FALSE; if (HasOptionalField(e_cryptoTokens) && !m_cryptoTokens.Decode(strm)) return FALSE; if (HasOptionalField(e_integrityCheckValue) && !m_integrityCheckValue.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_ResourcesAvailableConfirm::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); m_protocolIdentifier.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); if (HasOptionalField(e_tokens)) m_tokens.Encode(strm); if (HasOptionalField(e_cryptoTokens)) m_cryptoTokens.Encode(strm); if (HasOptionalField(e_integrityCheckValue)) m_integrityCheckValue.Encode(strm); KnownExtensionEncode(strm, e_genericData, m_genericData); UnknownExtensionsEncode(strm); } PObject * H225_ResourcesAvailableConfirm::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ResourcesAvailableConfirm::Class()), PInvalidCast); #endif return new H225_ResourcesAvailableConfirm(*this); } // // ServiceControlIndication // H225_ServiceControlIndication::H225_ServiceControlIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 8, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_ServiceControlIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent+17) << "serviceControl = " << setprecision(indent) << m_serviceControl << '\n'; if (HasOptionalField(e_endpointIdentifier)) strm << setw(indent+21) << "endpointIdentifier = " << setprecision(indent) << m_endpointIdentifier << '\n'; if (HasOptionalField(e_callSpecific)) strm << setw(indent+15) << "callSpecific = " << setprecision(indent) << m_callSpecific << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_ServiceControlIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_ServiceControlIndication), PInvalidCast); #endif const H225_ServiceControlIndication & other = (const H225_ServiceControlIndication &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_serviceControl.Compare(other.m_serviceControl)) != EqualTo) return result; if ((result = m_endpointIdentifier.Compare(other.m_endpointIdentifier)) != EqualTo) return result; if ((result = m_callSpecific.Compare(other.m_callSpecific)) != EqualTo) return result; if ((result = m_tokens.Compare(other.m_tokens)) != EqualTo) return result; if ((result = m_cryptoTokens.Compare(other.m_cryptoTokens)) != EqualTo) return result; if ((result = m_integrityCheckValue.Compare(other.m_integrityCheckValue)) != EqualTo) return result; if ((result = m_featureSet.Compare(other.m_featureSet)) != EqualTo) return result; if ((result = m_genericData.Compare(other.m_genericData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_ServiceControlIndication::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); length += m_serviceControl.GetObjectLength(); if (HasOptionalField(e_endpointIdentifier)) length += m_endpointIdentifier.GetObjectLength(); if (HasOptionalField(e_callSpecific)) length += m_callSpecific.GetObjectLength(); if (HasOptionalField(e_tokens)) length += m_tokens.GetObjectLength(); if (HasOptionalField(e_cryptoTokens)) length += m_cryptoTokens.GetObjectLength(); if (HasOptionalField(e_integrityCheckValue)) length += m_integrityCheckValue.GetObjectLength(); if (HasOptionalField(e_featureSet)) length += m_featureSet.GetObjectLength(); if (HasOptionalField(e_genericData)) length += m_genericData.GetObjectLength(); return length; } PBoolean H225_ServiceControlIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!m_serviceControl.Decode(strm)) return FALSE; if (HasOptionalField(e_endpointIdentifier) && !m_endpointIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_callSpecific) && !m_callSpecific.Decode(strm)) return FALSE; if (HasOptionalField(e_tokens) && !m_tokens.Decode(strm)) return FALSE; if (HasOptionalField(e_cryptoTokens) && !m_cryptoTokens.Decode(strm)) return FALSE; if (HasOptionalField(e_integrityCheckValue) && !m_integrityCheckValue.Decode(strm)) return FALSE; if (HasOptionalField(e_featureSet) && !m_featureSet.Decode(strm)) return FALSE; if (HasOptionalField(e_genericData) && !m_genericData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_ServiceControlIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); m_serviceControl.Encode(strm); if (HasOptionalField(e_endpointIdentifier)) m_endpointIdentifier.Encode(strm); if (HasOptionalField(e_callSpecific)) m_callSpecific.Encode(strm); if (HasOptionalField(e_tokens)) m_tokens.Encode(strm); if (HasOptionalField(e_cryptoTokens)) m_cryptoTokens.Encode(strm); if (HasOptionalField(e_integrityCheckValue)) m_integrityCheckValue.Encode(strm); if (HasOptionalField(e_featureSet)) m_featureSet.Encode(strm); if (HasOptionalField(e_genericData)) m_genericData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_ServiceControlIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ServiceControlIndication::Class()), PInvalidCast); #endif return new H225_ServiceControlIndication(*this); } // // ServiceControlResponse // H225_ServiceControlResponse::H225_ServiceControlResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 7, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_ServiceControlResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; if (HasOptionalField(e_result)) strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_ServiceControlResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_ServiceControlResponse), PInvalidCast); #endif const H225_ServiceControlResponse & other = (const H225_ServiceControlResponse &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_tokens.Compare(other.m_tokens)) != EqualTo) return result; if ((result = m_cryptoTokens.Compare(other.m_cryptoTokens)) != EqualTo) return result; if ((result = m_integrityCheckValue.Compare(other.m_integrityCheckValue)) != EqualTo) return result; if ((result = m_featureSet.Compare(other.m_featureSet)) != EqualTo) return result; if ((result = m_genericData.Compare(other.m_genericData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_ServiceControlResponse::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); if (HasOptionalField(e_result)) length += m_result.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); if (HasOptionalField(e_tokens)) length += m_tokens.GetObjectLength(); if (HasOptionalField(e_cryptoTokens)) length += m_cryptoTokens.GetObjectLength(); if (HasOptionalField(e_integrityCheckValue)) length += m_integrityCheckValue.GetObjectLength(); if (HasOptionalField(e_featureSet)) length += m_featureSet.GetObjectLength(); if (HasOptionalField(e_genericData)) length += m_genericData.GetObjectLength(); return length; } PBoolean H225_ServiceControlResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (HasOptionalField(e_result) && !m_result.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (HasOptionalField(e_tokens) && !m_tokens.Decode(strm)) return FALSE; if (HasOptionalField(e_cryptoTokens) && !m_cryptoTokens.Decode(strm)) return FALSE; if (HasOptionalField(e_integrityCheckValue) && !m_integrityCheckValue.Decode(strm)) return FALSE; if (HasOptionalField(e_featureSet) && !m_featureSet.Decode(strm)) return FALSE; if (HasOptionalField(e_genericData) && !m_genericData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_ServiceControlResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); if (HasOptionalField(e_result)) m_result.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); if (HasOptionalField(e_tokens)) m_tokens.Encode(strm); if (HasOptionalField(e_cryptoTokens)) m_cryptoTokens.Encode(strm); if (HasOptionalField(e_integrityCheckValue)) m_integrityCheckValue.Encode(strm); if (HasOptionalField(e_featureSet)) m_featureSet.Encode(strm); if (HasOptionalField(e_genericData)) m_genericData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_ServiceControlResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ServiceControlResponse::Class()), PInvalidCast); #endif return new H225_ServiceControlResponse(*this); } // // H323-UU-PDU_tunnelledSignallingMessage // H225_H323_UU_PDU_tunnelledSignallingMessage::H225_H323_UU_PDU_tunnelledSignallingMessage(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_H323_UU_PDU_tunnelledSignallingMessage::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+22) << "tunnelledProtocolID = " << setprecision(indent) << m_tunnelledProtocolID << '\n'; strm << setw(indent+17) << "messageContent = " << setprecision(indent) << m_messageContent << '\n'; if (HasOptionalField(e_tunnellingRequired)) strm << setw(indent+21) << "tunnellingRequired = " << setprecision(indent) << m_tunnellingRequired << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_H323_UU_PDU_tunnelledSignallingMessage::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_H323_UU_PDU_tunnelledSignallingMessage), PInvalidCast); #endif const H225_H323_UU_PDU_tunnelledSignallingMessage & other = (const H225_H323_UU_PDU_tunnelledSignallingMessage &)obj; Comparison result; if ((result = m_tunnelledProtocolID.Compare(other.m_tunnelledProtocolID)) != EqualTo) return result; if ((result = m_messageContent.Compare(other.m_messageContent)) != EqualTo) return result; if ((result = m_tunnellingRequired.Compare(other.m_tunnellingRequired)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_H323_UU_PDU_tunnelledSignallingMessage::GetDataLength() const { PINDEX length = 0; length += m_tunnelledProtocolID.GetObjectLength(); length += m_messageContent.GetObjectLength(); if (HasOptionalField(e_tunnellingRequired)) length += m_tunnellingRequired.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_H323_UU_PDU_tunnelledSignallingMessage::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_tunnelledProtocolID.Decode(strm)) return FALSE; if (!m_messageContent.Decode(strm)) return FALSE; if (HasOptionalField(e_tunnellingRequired) && !m_tunnellingRequired.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_H323_UU_PDU_tunnelledSignallingMessage::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_tunnelledProtocolID.Encode(strm); m_messageContent.Encode(strm); if (HasOptionalField(e_tunnellingRequired)) m_tunnellingRequired.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_H323_UU_PDU_tunnelledSignallingMessage::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_H323_UU_PDU_tunnelledSignallingMessage::Class()), PInvalidCast); #endif return new H225_H323_UU_PDU_tunnelledSignallingMessage(*this); } // // TransportAddress_ipSourceRoute // H225_TransportAddress_ipSourceRoute::H225_TransportAddress_ipSourceRoute(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_ip.SetConstraints(PASN_Object::FixedConstraint, 4); m_port.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void H225_TransportAddress_ipSourceRoute::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+5) << "ip = " << setprecision(indent) << m_ip << '\n'; strm << setw(indent+7) << "port = " << setprecision(indent) << m_port << '\n'; strm << setw(indent+8) << "route = " << setprecision(indent) << m_route << '\n'; strm << setw(indent+10) << "routing = " << setprecision(indent) << m_routing << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_TransportAddress_ipSourceRoute::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_TransportAddress_ipSourceRoute), PInvalidCast); #endif const H225_TransportAddress_ipSourceRoute & other = (const H225_TransportAddress_ipSourceRoute &)obj; Comparison result; if ((result = m_ip.Compare(other.m_ip)) != EqualTo) return result; if ((result = m_port.Compare(other.m_port)) != EqualTo) return result; if ((result = m_route.Compare(other.m_route)) != EqualTo) return result; if ((result = m_routing.Compare(other.m_routing)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_TransportAddress_ipSourceRoute::GetDataLength() const { PINDEX length = 0; length += m_ip.GetObjectLength(); length += m_port.GetObjectLength(); length += m_route.GetObjectLength(); length += m_routing.GetObjectLength(); return length; } PBoolean H225_TransportAddress_ipSourceRoute::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_ip.Decode(strm)) return FALSE; if (!m_port.Decode(strm)) return FALSE; if (!m_route.Decode(strm)) return FALSE; if (!m_routing.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_TransportAddress_ipSourceRoute::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_ip.Encode(strm); m_port.Encode(strm); m_route.Encode(strm); m_routing.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_TransportAddress_ipSourceRoute::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_TransportAddress_ipSourceRoute::Class()), PInvalidCast); #endif return new H225_TransportAddress_ipSourceRoute(*this); } // // RegistrationConfirm_preGrantedARQ // H225_RegistrationConfirm_preGrantedARQ::H225_RegistrationConfirm_preGrantedARQ(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 4) { m_irrFrequencyInCall.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } #ifndef PASN_NOPRINTON void H225_RegistrationConfirm_preGrantedARQ::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "makeCall = " << setprecision(indent) << m_makeCall << '\n'; strm << setw(indent+35) << "useGKCallSignalAddressToMakeCall = " << setprecision(indent) << m_useGKCallSignalAddressToMakeCall << '\n'; strm << setw(indent+13) << "answerCall = " << setprecision(indent) << m_answerCall << '\n'; strm << setw(indent+33) << "useGKCallSignalAddressToAnswer = " << setprecision(indent) << m_useGKCallSignalAddressToAnswer << '\n'; if (HasOptionalField(e_irrFrequencyInCall)) strm << setw(indent+21) << "irrFrequencyInCall = " << setprecision(indent) << m_irrFrequencyInCall << '\n'; if (HasOptionalField(e_totalBandwidthRestriction)) strm << setw(indent+28) << "totalBandwidthRestriction = " << setprecision(indent) << m_totalBandwidthRestriction << '\n'; if (HasOptionalField(e_alternateTransportAddresses)) strm << setw(indent+30) << "alternateTransportAddresses = " << setprecision(indent) << m_alternateTransportAddresses << '\n'; if (HasOptionalField(e_useSpecifiedTransport)) strm << setw(indent+24) << "useSpecifiedTransport = " << setprecision(indent) << m_useSpecifiedTransport << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_RegistrationConfirm_preGrantedARQ::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_RegistrationConfirm_preGrantedARQ), PInvalidCast); #endif const H225_RegistrationConfirm_preGrantedARQ & other = (const H225_RegistrationConfirm_preGrantedARQ &)obj; Comparison result; if ((result = m_makeCall.Compare(other.m_makeCall)) != EqualTo) return result; if ((result = m_useGKCallSignalAddressToMakeCall.Compare(other.m_useGKCallSignalAddressToMakeCall)) != EqualTo) return result; if ((result = m_answerCall.Compare(other.m_answerCall)) != EqualTo) return result; if ((result = m_useGKCallSignalAddressToAnswer.Compare(other.m_useGKCallSignalAddressToAnswer)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_RegistrationConfirm_preGrantedARQ::GetDataLength() const { PINDEX length = 0; length += m_makeCall.GetObjectLength(); length += m_useGKCallSignalAddressToMakeCall.GetObjectLength(); length += m_answerCall.GetObjectLength(); length += m_useGKCallSignalAddressToAnswer.GetObjectLength(); return length; } PBoolean H225_RegistrationConfirm_preGrantedARQ::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_makeCall.Decode(strm)) return FALSE; if (!m_useGKCallSignalAddressToMakeCall.Decode(strm)) return FALSE; if (!m_answerCall.Decode(strm)) return FALSE; if (!m_useGKCallSignalAddressToAnswer.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_irrFrequencyInCall, m_irrFrequencyInCall)) return FALSE; if (!KnownExtensionDecode(strm, e_totalBandwidthRestriction, m_totalBandwidthRestriction)) return FALSE; if (!KnownExtensionDecode(strm, e_alternateTransportAddresses, m_alternateTransportAddresses)) return FALSE; if (!KnownExtensionDecode(strm, e_useSpecifiedTransport, m_useSpecifiedTransport)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_RegistrationConfirm_preGrantedARQ::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_makeCall.Encode(strm); m_useGKCallSignalAddressToMakeCall.Encode(strm); m_answerCall.Encode(strm); m_useGKCallSignalAddressToAnswer.Encode(strm); KnownExtensionEncode(strm, e_irrFrequencyInCall, m_irrFrequencyInCall); KnownExtensionEncode(strm, e_totalBandwidthRestriction, m_totalBandwidthRestriction); KnownExtensionEncode(strm, e_alternateTransportAddresses, m_alternateTransportAddresses); KnownExtensionEncode(strm, e_useSpecifiedTransport, m_useSpecifiedTransport); UnknownExtensionsEncode(strm); } PObject * H225_RegistrationConfirm_preGrantedARQ::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_RegistrationConfirm_preGrantedARQ::Class()), PInvalidCast); #endif return new H225_RegistrationConfirm_preGrantedARQ(*this); } // // StimulusControl // H225_StimulusControl::H225_StimulusControl(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_StimulusControl::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandard)) strm << setw(indent+14) << "nonStandard = " << setprecision(indent) << m_nonStandard << '\n'; if (HasOptionalField(e_isText)) strm << setw(indent+9) << "isText = " << setprecision(indent) << m_isText << '\n'; if (HasOptionalField(e_h248Message)) strm << setw(indent+14) << "h248Message = " << setprecision(indent) << m_h248Message << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_StimulusControl::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_StimulusControl), PInvalidCast); #endif const H225_StimulusControl & other = (const H225_StimulusControl &)obj; Comparison result; if ((result = m_nonStandard.Compare(other.m_nonStandard)) != EqualTo) return result; if ((result = m_isText.Compare(other.m_isText)) != EqualTo) return result; if ((result = m_h248Message.Compare(other.m_h248Message)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_StimulusControl::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandard)) length += m_nonStandard.GetObjectLength(); if (HasOptionalField(e_isText)) length += m_isText.GetObjectLength(); if (HasOptionalField(e_h248Message)) length += m_h248Message.GetObjectLength(); return length; } PBoolean H225_StimulusControl::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandard) && !m_nonStandard.Decode(strm)) return FALSE; if (HasOptionalField(e_isText) && !m_isText.Decode(strm)) return FALSE; if (HasOptionalField(e_h248Message) && !m_h248Message.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_StimulusControl::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandard)) m_nonStandard.Encode(strm); if (HasOptionalField(e_isText)) m_isText.Encode(strm); if (HasOptionalField(e_h248Message)) m_h248Message.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_StimulusControl::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_StimulusControl::Class()), PInvalidCast); #endif return new H225_StimulusControl(*this); } // // ConferenceList // H225_ConferenceList::H225_ConferenceList(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_ConferenceList::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_conferenceID)) strm << setw(indent+15) << "conferenceID = " << setprecision(indent) << m_conferenceID << '\n'; if (HasOptionalField(e_conferenceAlias)) strm << setw(indent+18) << "conferenceAlias = " << setprecision(indent) << m_conferenceAlias << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_ConferenceList::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_ConferenceList), PInvalidCast); #endif const H225_ConferenceList & other = (const H225_ConferenceList &)obj; Comparison result; if ((result = m_conferenceID.Compare(other.m_conferenceID)) != EqualTo) return result; if ((result = m_conferenceAlias.Compare(other.m_conferenceAlias)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_ConferenceList::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_conferenceID)) length += m_conferenceID.GetObjectLength(); if (HasOptionalField(e_conferenceAlias)) length += m_conferenceAlias.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_ConferenceList::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_conferenceID) && !m_conferenceID.Decode(strm)) return FALSE; if (HasOptionalField(e_conferenceAlias) && !m_conferenceAlias.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_ConferenceList::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_conferenceID)) m_conferenceID.Encode(strm); if (HasOptionalField(e_conferenceAlias)) m_conferenceAlias.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_ConferenceList::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ConferenceList::Class()), PInvalidCast); #endif return new H225_ConferenceList(*this); } // // GatewayInfo // H225_GatewayInfo::H225_GatewayInfo(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_GatewayInfo::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_protocol)) strm << setw(indent+11) << "protocol = " << setprecision(indent) << m_protocol << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_GatewayInfo::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_GatewayInfo), PInvalidCast); #endif const H225_GatewayInfo & other = (const H225_GatewayInfo &)obj; Comparison result; if ((result = m_protocol.Compare(other.m_protocol)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_GatewayInfo::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_protocol)) length += m_protocol.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_GatewayInfo::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_protocol) && !m_protocol.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_GatewayInfo::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_protocol)) m_protocol.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_GatewayInfo::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_GatewayInfo::Class()), PInvalidCast); #endif return new H225_GatewayInfo(*this); } // // H310Caps // H225_H310Caps::H225_H310Caps(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 2) { IncludeOptionalField(e_supportedPrefixes); } #ifndef PASN_NOPRINTON void H225_H310Caps::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_dataRatesSupported)) strm << setw(indent+21) << "dataRatesSupported = " << setprecision(indent) << m_dataRatesSupported << '\n'; if (HasOptionalField(e_supportedPrefixes)) strm << setw(indent+20) << "supportedPrefixes = " << setprecision(indent) << m_supportedPrefixes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_H310Caps::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_H310Caps), PInvalidCast); #endif const H225_H310Caps & other = (const H225_H310Caps &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_H310Caps::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_H310Caps::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_dataRatesSupported, m_dataRatesSupported)) return FALSE; if (!KnownExtensionDecode(strm, e_supportedPrefixes, m_supportedPrefixes)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_H310Caps::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_dataRatesSupported, m_dataRatesSupported); KnownExtensionEncode(strm, e_supportedPrefixes, m_supportedPrefixes); UnknownExtensionsEncode(strm); } PObject * H225_H310Caps::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_H310Caps::Class()), PInvalidCast); #endif return new H225_H310Caps(*this); } // // H320Caps // H225_H320Caps::H225_H320Caps(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 2) { IncludeOptionalField(e_supportedPrefixes); } #ifndef PASN_NOPRINTON void H225_H320Caps::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_dataRatesSupported)) strm << setw(indent+21) << "dataRatesSupported = " << setprecision(indent) << m_dataRatesSupported << '\n'; if (HasOptionalField(e_supportedPrefixes)) strm << setw(indent+20) << "supportedPrefixes = " << setprecision(indent) << m_supportedPrefixes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_H320Caps::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_H320Caps), PInvalidCast); #endif const H225_H320Caps & other = (const H225_H320Caps &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_H320Caps::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_H320Caps::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_dataRatesSupported, m_dataRatesSupported)) return FALSE; if (!KnownExtensionDecode(strm, e_supportedPrefixes, m_supportedPrefixes)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_H320Caps::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_dataRatesSupported, m_dataRatesSupported); KnownExtensionEncode(strm, e_supportedPrefixes, m_supportedPrefixes); UnknownExtensionsEncode(strm); } PObject * H225_H320Caps::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_H320Caps::Class()), PInvalidCast); #endif return new H225_H320Caps(*this); } // // H321Caps // H225_H321Caps::H225_H321Caps(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 2) { IncludeOptionalField(e_supportedPrefixes); } #ifndef PASN_NOPRINTON void H225_H321Caps::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_dataRatesSupported)) strm << setw(indent+21) << "dataRatesSupported = " << setprecision(indent) << m_dataRatesSupported << '\n'; if (HasOptionalField(e_supportedPrefixes)) strm << setw(indent+20) << "supportedPrefixes = " << setprecision(indent) << m_supportedPrefixes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_H321Caps::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_H321Caps), PInvalidCast); #endif const H225_H321Caps & other = (const H225_H321Caps &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_H321Caps::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_H321Caps::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_dataRatesSupported, m_dataRatesSupported)) return FALSE; if (!KnownExtensionDecode(strm, e_supportedPrefixes, m_supportedPrefixes)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_H321Caps::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_dataRatesSupported, m_dataRatesSupported); KnownExtensionEncode(strm, e_supportedPrefixes, m_supportedPrefixes); UnknownExtensionsEncode(strm); } PObject * H225_H321Caps::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_H321Caps::Class()), PInvalidCast); #endif return new H225_H321Caps(*this); } // // H322Caps // H225_H322Caps::H225_H322Caps(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 2) { IncludeOptionalField(e_supportedPrefixes); } #ifndef PASN_NOPRINTON void H225_H322Caps::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_dataRatesSupported)) strm << setw(indent+21) << "dataRatesSupported = " << setprecision(indent) << m_dataRatesSupported << '\n'; if (HasOptionalField(e_supportedPrefixes)) strm << setw(indent+20) << "supportedPrefixes = " << setprecision(indent) << m_supportedPrefixes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_H322Caps::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_H322Caps), PInvalidCast); #endif const H225_H322Caps & other = (const H225_H322Caps &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_H322Caps::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_H322Caps::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_dataRatesSupported, m_dataRatesSupported)) return FALSE; if (!KnownExtensionDecode(strm, e_supportedPrefixes, m_supportedPrefixes)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_H322Caps::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_dataRatesSupported, m_dataRatesSupported); KnownExtensionEncode(strm, e_supportedPrefixes, m_supportedPrefixes); UnknownExtensionsEncode(strm); } PObject * H225_H322Caps::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_H322Caps::Class()), PInvalidCast); #endif return new H225_H322Caps(*this); } // // H323Caps // H225_H323Caps::H225_H323Caps(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 2) { IncludeOptionalField(e_supportedPrefixes); } #ifndef PASN_NOPRINTON void H225_H323Caps::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_dataRatesSupported)) strm << setw(indent+21) << "dataRatesSupported = " << setprecision(indent) << m_dataRatesSupported << '\n'; if (HasOptionalField(e_supportedPrefixes)) strm << setw(indent+20) << "supportedPrefixes = " << setprecision(indent) << m_supportedPrefixes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_H323Caps::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_H323Caps), PInvalidCast); #endif const H225_H323Caps & other = (const H225_H323Caps &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_H323Caps::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_H323Caps::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_dataRatesSupported, m_dataRatesSupported)) return FALSE; if (!KnownExtensionDecode(strm, e_supportedPrefixes, m_supportedPrefixes)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_H323Caps::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_dataRatesSupported, m_dataRatesSupported); KnownExtensionEncode(strm, e_supportedPrefixes, m_supportedPrefixes); UnknownExtensionsEncode(strm); } PObject * H225_H323Caps::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_H323Caps::Class()), PInvalidCast); #endif return new H225_H323Caps(*this); } // // H324Caps // H225_H324Caps::H225_H324Caps(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 2) { IncludeOptionalField(e_supportedPrefixes); } #ifndef PASN_NOPRINTON void H225_H324Caps::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_dataRatesSupported)) strm << setw(indent+21) << "dataRatesSupported = " << setprecision(indent) << m_dataRatesSupported << '\n'; if (HasOptionalField(e_supportedPrefixes)) strm << setw(indent+20) << "supportedPrefixes = " << setprecision(indent) << m_supportedPrefixes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_H324Caps::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_H324Caps), PInvalidCast); #endif const H225_H324Caps & other = (const H225_H324Caps &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_H324Caps::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_H324Caps::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_dataRatesSupported, m_dataRatesSupported)) return FALSE; if (!KnownExtensionDecode(strm, e_supportedPrefixes, m_supportedPrefixes)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_H324Caps::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_dataRatesSupported, m_dataRatesSupported); KnownExtensionEncode(strm, e_supportedPrefixes, m_supportedPrefixes); UnknownExtensionsEncode(strm); } PObject * H225_H324Caps::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_H324Caps::Class()), PInvalidCast); #endif return new H225_H324Caps(*this); } // // VoiceCaps // H225_VoiceCaps::H225_VoiceCaps(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 2) { IncludeOptionalField(e_supportedPrefixes); } #ifndef PASN_NOPRINTON void H225_VoiceCaps::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_dataRatesSupported)) strm << setw(indent+21) << "dataRatesSupported = " << setprecision(indent) << m_dataRatesSupported << '\n'; if (HasOptionalField(e_supportedPrefixes)) strm << setw(indent+20) << "supportedPrefixes = " << setprecision(indent) << m_supportedPrefixes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_VoiceCaps::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_VoiceCaps), PInvalidCast); #endif const H225_VoiceCaps & other = (const H225_VoiceCaps &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_VoiceCaps::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_VoiceCaps::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_dataRatesSupported, m_dataRatesSupported)) return FALSE; if (!KnownExtensionDecode(strm, e_supportedPrefixes, m_supportedPrefixes)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_VoiceCaps::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_dataRatesSupported, m_dataRatesSupported); KnownExtensionEncode(strm, e_supportedPrefixes, m_supportedPrefixes); UnknownExtensionsEncode(strm); } PObject * H225_VoiceCaps::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_VoiceCaps::Class()), PInvalidCast); #endif return new H225_VoiceCaps(*this); } // // T120OnlyCaps // H225_T120OnlyCaps::H225_T120OnlyCaps(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 2) { IncludeOptionalField(e_supportedPrefixes); } #ifndef PASN_NOPRINTON void H225_T120OnlyCaps::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_dataRatesSupported)) strm << setw(indent+21) << "dataRatesSupported = " << setprecision(indent) << m_dataRatesSupported << '\n'; if (HasOptionalField(e_supportedPrefixes)) strm << setw(indent+20) << "supportedPrefixes = " << setprecision(indent) << m_supportedPrefixes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_T120OnlyCaps::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_T120OnlyCaps), PInvalidCast); #endif const H225_T120OnlyCaps & other = (const H225_T120OnlyCaps &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_T120OnlyCaps::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_T120OnlyCaps::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_dataRatesSupported, m_dataRatesSupported)) return FALSE; if (!KnownExtensionDecode(strm, e_supportedPrefixes, m_supportedPrefixes)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_T120OnlyCaps::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_dataRatesSupported, m_dataRatesSupported); KnownExtensionEncode(strm, e_supportedPrefixes, m_supportedPrefixes); UnknownExtensionsEncode(strm); } PObject * H225_T120OnlyCaps::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_T120OnlyCaps::Class()), PInvalidCast); #endif return new H225_T120OnlyCaps(*this); } // // NonStandardProtocol // H225_NonStandardProtocol::H225_NonStandardProtocol(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_NonStandardProtocol::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_dataRatesSupported)) strm << setw(indent+21) << "dataRatesSupported = " << setprecision(indent) << m_dataRatesSupported << '\n'; strm << setw(indent+20) << "supportedPrefixes = " << setprecision(indent) << m_supportedPrefixes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_NonStandardProtocol::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_NonStandardProtocol), PInvalidCast); #endif const H225_NonStandardProtocol & other = (const H225_NonStandardProtocol &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_dataRatesSupported.Compare(other.m_dataRatesSupported)) != EqualTo) return result; if ((result = m_supportedPrefixes.Compare(other.m_supportedPrefixes)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_NonStandardProtocol::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); if (HasOptionalField(e_dataRatesSupported)) length += m_dataRatesSupported.GetObjectLength(); length += m_supportedPrefixes.GetObjectLength(); return length; } PBoolean H225_NonStandardProtocol::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (HasOptionalField(e_dataRatesSupported) && !m_dataRatesSupported.Decode(strm)) return FALSE; if (!m_supportedPrefixes.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_NonStandardProtocol::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); if (HasOptionalField(e_dataRatesSupported)) m_dataRatesSupported.Encode(strm); m_supportedPrefixes.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_NonStandardProtocol::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_NonStandardProtocol::Class()), PInvalidCast); #endif return new H225_NonStandardProtocol(*this); } // // T38FaxAnnexbOnlyCaps // H225_T38FaxAnnexbOnlyCaps::H225_T38FaxAnnexbOnlyCaps(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_T38FaxAnnexbOnlyCaps::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_dataRatesSupported)) strm << setw(indent+21) << "dataRatesSupported = " << setprecision(indent) << m_dataRatesSupported << '\n'; strm << setw(indent+20) << "supportedPrefixes = " << setprecision(indent) << m_supportedPrefixes << '\n'; strm << setw(indent+17) << "t38FaxProtocol = " << setprecision(indent) << m_t38FaxProtocol << '\n'; strm << setw(indent+16) << "t38FaxProfile = " << setprecision(indent) << m_t38FaxProfile << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_T38FaxAnnexbOnlyCaps::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_T38FaxAnnexbOnlyCaps), PInvalidCast); #endif const H225_T38FaxAnnexbOnlyCaps & other = (const H225_T38FaxAnnexbOnlyCaps &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_dataRatesSupported.Compare(other.m_dataRatesSupported)) != EqualTo) return result; if ((result = m_supportedPrefixes.Compare(other.m_supportedPrefixes)) != EqualTo) return result; if ((result = m_t38FaxProtocol.Compare(other.m_t38FaxProtocol)) != EqualTo) return result; if ((result = m_t38FaxProfile.Compare(other.m_t38FaxProfile)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_T38FaxAnnexbOnlyCaps::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); if (HasOptionalField(e_dataRatesSupported)) length += m_dataRatesSupported.GetObjectLength(); length += m_supportedPrefixes.GetObjectLength(); length += m_t38FaxProtocol.GetObjectLength(); length += m_t38FaxProfile.GetObjectLength(); return length; } PBoolean H225_T38FaxAnnexbOnlyCaps::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (HasOptionalField(e_dataRatesSupported) && !m_dataRatesSupported.Decode(strm)) return FALSE; if (!m_supportedPrefixes.Decode(strm)) return FALSE; if (!m_t38FaxProtocol.Decode(strm)) return FALSE; if (!m_t38FaxProfile.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_T38FaxAnnexbOnlyCaps::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); if (HasOptionalField(e_dataRatesSupported)) m_dataRatesSupported.Encode(strm); m_supportedPrefixes.Encode(strm); m_t38FaxProtocol.Encode(strm); m_t38FaxProfile.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_T38FaxAnnexbOnlyCaps::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_T38FaxAnnexbOnlyCaps::Class()), PInvalidCast); #endif return new H225_T38FaxAnnexbOnlyCaps(*this); } // // SIPCaps // H225_SIPCaps::H225_SIPCaps(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_SIPCaps::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_dataRatesSupported)) strm << setw(indent+21) << "dataRatesSupported = " << setprecision(indent) << m_dataRatesSupported << '\n'; if (HasOptionalField(e_supportedPrefixes)) strm << setw(indent+20) << "supportedPrefixes = " << setprecision(indent) << m_supportedPrefixes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_SIPCaps::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_SIPCaps), PInvalidCast); #endif const H225_SIPCaps & other = (const H225_SIPCaps &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_dataRatesSupported.Compare(other.m_dataRatesSupported)) != EqualTo) return result; if ((result = m_supportedPrefixes.Compare(other.m_supportedPrefixes)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_SIPCaps::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); if (HasOptionalField(e_dataRatesSupported)) length += m_dataRatesSupported.GetObjectLength(); if (HasOptionalField(e_supportedPrefixes)) length += m_supportedPrefixes.GetObjectLength(); return length; } PBoolean H225_SIPCaps::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (HasOptionalField(e_dataRatesSupported) && !m_dataRatesSupported.Decode(strm)) return FALSE; if (HasOptionalField(e_supportedPrefixes) && !m_supportedPrefixes.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_SIPCaps::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); if (HasOptionalField(e_dataRatesSupported)) m_dataRatesSupported.Encode(strm); if (HasOptionalField(e_supportedPrefixes)) m_supportedPrefixes.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_SIPCaps::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_SIPCaps::Class()), PInvalidCast); #endif return new H225_SIPCaps(*this); } // // McuInfo // H225_McuInfo::H225_McuInfo(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 1) { } #ifndef PASN_NOPRINTON void H225_McuInfo::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_protocol)) strm << setw(indent+11) << "protocol = " << setprecision(indent) << m_protocol << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_McuInfo::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_McuInfo), PInvalidCast); #endif const H225_McuInfo & other = (const H225_McuInfo &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_McuInfo::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_McuInfo::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_protocol, m_protocol)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_McuInfo::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_protocol, m_protocol); UnknownExtensionsEncode(strm); } PObject * H225_McuInfo::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_McuInfo::Class()), PInvalidCast); #endif return new H225_McuInfo(*this); } // // TerminalInfo // H225_TerminalInfo::H225_TerminalInfo(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_TerminalInfo::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_TerminalInfo::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_TerminalInfo), PInvalidCast); #endif const H225_TerminalInfo & other = (const H225_TerminalInfo &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_TerminalInfo::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_TerminalInfo::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_TerminalInfo::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_TerminalInfo::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_TerminalInfo::Class()), PInvalidCast); #endif return new H225_TerminalInfo(*this); } // // GatekeeperInfo // H225_GatekeeperInfo::H225_GatekeeperInfo(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_GatekeeperInfo::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_GatekeeperInfo::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_GatekeeperInfo), PInvalidCast); #endif const H225_GatekeeperInfo & other = (const H225_GatekeeperInfo &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_GatekeeperInfo::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_GatekeeperInfo::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_GatekeeperInfo::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_GatekeeperInfo::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_GatekeeperInfo::Class()), PInvalidCast); #endif return new H225_GatekeeperInfo(*this); } // // FeatureDescriptor // H225_FeatureDescriptor::H225_FeatureDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : H225_GenericData(tag, tagClass) { } PObject * H225_FeatureDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_FeatureDescriptor::Class()), PInvalidCast); #endif return new H225_FeatureDescriptor(*this); } // // CallCapacity // H225_CallCapacity::H225_CallCapacity(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_CallCapacity::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_maximumCallCapacity)) strm << setw(indent+22) << "maximumCallCapacity = " << setprecision(indent) << m_maximumCallCapacity << '\n'; if (HasOptionalField(e_currentCallCapacity)) strm << setw(indent+22) << "currentCallCapacity = " << setprecision(indent) << m_currentCallCapacity << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_CallCapacity::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_CallCapacity), PInvalidCast); #endif const H225_CallCapacity & other = (const H225_CallCapacity &)obj; Comparison result; if ((result = m_maximumCallCapacity.Compare(other.m_maximumCallCapacity)) != EqualTo) return result; if ((result = m_currentCallCapacity.Compare(other.m_currentCallCapacity)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_CallCapacity::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_maximumCallCapacity)) length += m_maximumCallCapacity.GetObjectLength(); if (HasOptionalField(e_currentCallCapacity)) length += m_currentCallCapacity.GetObjectLength(); return length; } PBoolean H225_CallCapacity::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_maximumCallCapacity) && !m_maximumCallCapacity.Decode(strm)) return FALSE; if (HasOptionalField(e_currentCallCapacity) && !m_currentCallCapacity.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_CallCapacity::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_maximumCallCapacity)) m_maximumCallCapacity.Encode(strm); if (HasOptionalField(e_currentCallCapacity)) m_currentCallCapacity.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_CallCapacity::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CallCapacity::Class()), PInvalidCast); #endif return new H225_CallCapacity(*this); } // // CircuitIdentifier // H225_CircuitIdentifier::H225_CircuitIdentifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 1) { } #ifndef PASN_NOPRINTON void H225_CircuitIdentifier::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_cic)) strm << setw(indent+6) << "cic = " << setprecision(indent) << m_cic << '\n'; if (HasOptionalField(e_group)) strm << setw(indent+8) << "group = " << setprecision(indent) << m_group << '\n'; if (HasOptionalField(e_carrier)) strm << setw(indent+10) << "carrier = " << setprecision(indent) << m_carrier << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_CircuitIdentifier::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_CircuitIdentifier), PInvalidCast); #endif const H225_CircuitIdentifier & other = (const H225_CircuitIdentifier &)obj; Comparison result; if ((result = m_cic.Compare(other.m_cic)) != EqualTo) return result; if ((result = m_group.Compare(other.m_group)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_CircuitIdentifier::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_cic)) length += m_cic.GetObjectLength(); if (HasOptionalField(e_group)) length += m_group.GetObjectLength(); return length; } PBoolean H225_CircuitIdentifier::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_cic) && !m_cic.Decode(strm)) return FALSE; if (HasOptionalField(e_group) && !m_group.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_carrier, m_carrier)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_CircuitIdentifier::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_cic)) m_cic.Encode(strm); if (HasOptionalField(e_group)) m_group.Encode(strm); KnownExtensionEncode(strm, e_carrier, m_carrier); UnknownExtensionsEncode(strm); } PObject * H225_CircuitIdentifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CircuitIdentifier::Class()), PInvalidCast); #endif return new H225_CircuitIdentifier(*this); } // // RegistrationConfirm // H225_RegistrationConfirm::H225_RegistrationConfirm(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 20) { IncludeOptionalField(e_willRespondToIRR); IncludeOptionalField(e_maintainConnection); } #ifndef PASN_NOPRINTON void H225_RegistrationConfirm::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+21) << "protocolIdentifier = " << setprecision(indent) << m_protocolIdentifier << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent+20) << "callSignalAddress = " << setprecision(indent) << m_callSignalAddress << '\n'; if (HasOptionalField(e_terminalAlias)) strm << setw(indent+16) << "terminalAlias = " << setprecision(indent) << m_terminalAlias << '\n'; if (HasOptionalField(e_gatekeeperIdentifier)) strm << setw(indent+23) << "gatekeeperIdentifier = " << setprecision(indent) << m_gatekeeperIdentifier << '\n'; strm << setw(indent+21) << "endpointIdentifier = " << setprecision(indent) << m_endpointIdentifier << '\n'; if (HasOptionalField(e_alternateGatekeeper)) strm << setw(indent+22) << "alternateGatekeeper = " << setprecision(indent) << m_alternateGatekeeper << '\n'; if (HasOptionalField(e_timeToLive)) strm << setw(indent+13) << "timeToLive = " << setprecision(indent) << m_timeToLive << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_willRespondToIRR)) strm << setw(indent+19) << "willRespondToIRR = " << setprecision(indent) << m_willRespondToIRR << '\n'; if (HasOptionalField(e_preGrantedARQ)) strm << setw(indent+16) << "preGrantedARQ = " << setprecision(indent) << m_preGrantedARQ << '\n'; if (HasOptionalField(e_maintainConnection)) strm << setw(indent+21) << "maintainConnection = " << setprecision(indent) << m_maintainConnection << '\n'; if (HasOptionalField(e_serviceControl)) strm << setw(indent+17) << "serviceControl = " << setprecision(indent) << m_serviceControl << '\n'; if (HasOptionalField(e_supportsAdditiveRegistration)) strm << setw(indent+31) << "supportsAdditiveRegistration = " << setprecision(indent) << m_supportsAdditiveRegistration << '\n'; if (HasOptionalField(e_terminalAliasPattern)) strm << setw(indent+23) << "terminalAliasPattern = " << setprecision(indent) << m_terminalAliasPattern << '\n'; if (HasOptionalField(e_supportedPrefixes)) strm << setw(indent+20) << "supportedPrefixes = " << setprecision(indent) << m_supportedPrefixes << '\n'; if (HasOptionalField(e_usageSpec)) strm << setw(indent+12) << "usageSpec = " << setprecision(indent) << m_usageSpec << '\n'; if (HasOptionalField(e_featureServerAlias)) strm << setw(indent+21) << "featureServerAlias = " << setprecision(indent) << m_featureServerAlias << '\n'; if (HasOptionalField(e_capacityReportingSpec)) strm << setw(indent+24) << "capacityReportingSpec = " << setprecision(indent) << m_capacityReportingSpec << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; if (HasOptionalField(e_assignedGatekeeper)) strm << setw(indent+21) << "assignedGatekeeper = " << setprecision(indent) << m_assignedGatekeeper << '\n'; if (HasOptionalField(e_rehomingModel)) strm << setw(indent+16) << "rehomingModel = " << setprecision(indent) << m_rehomingModel << '\n'; if (HasOptionalField(e_transportQOS)) strm << setw(indent+15) << "transportQOS = " << setprecision(indent) << m_transportQOS << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_RegistrationConfirm::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_RegistrationConfirm), PInvalidCast); #endif const H225_RegistrationConfirm & other = (const H225_RegistrationConfirm &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_protocolIdentifier.Compare(other.m_protocolIdentifier)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_callSignalAddress.Compare(other.m_callSignalAddress)) != EqualTo) return result; if ((result = m_terminalAlias.Compare(other.m_terminalAlias)) != EqualTo) return result; if ((result = m_gatekeeperIdentifier.Compare(other.m_gatekeeperIdentifier)) != EqualTo) return result; if ((result = m_endpointIdentifier.Compare(other.m_endpointIdentifier)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_RegistrationConfirm::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); length += m_protocolIdentifier.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); length += m_callSignalAddress.GetObjectLength(); if (HasOptionalField(e_terminalAlias)) length += m_terminalAlias.GetObjectLength(); if (HasOptionalField(e_gatekeeperIdentifier)) length += m_gatekeeperIdentifier.GetObjectLength(); length += m_endpointIdentifier.GetObjectLength(); return length; } PBoolean H225_RegistrationConfirm::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_protocolIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!m_callSignalAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_terminalAlias) && !m_terminalAlias.Decode(strm)) return FALSE; if (HasOptionalField(e_gatekeeperIdentifier) && !m_gatekeeperIdentifier.Decode(strm)) return FALSE; if (!m_endpointIdentifier.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_alternateGatekeeper, m_alternateGatekeeper)) return FALSE; if (!KnownExtensionDecode(strm, e_timeToLive, m_timeToLive)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_willRespondToIRR, m_willRespondToIRR)) return FALSE; if (!KnownExtensionDecode(strm, e_preGrantedARQ, m_preGrantedARQ)) return FALSE; if (!KnownExtensionDecode(strm, e_maintainConnection, m_maintainConnection)) return FALSE; if (!KnownExtensionDecode(strm, e_serviceControl, m_serviceControl)) return FALSE; if (!KnownExtensionDecode(strm, e_supportsAdditiveRegistration, m_supportsAdditiveRegistration)) return FALSE; if (!KnownExtensionDecode(strm, e_terminalAliasPattern, m_terminalAliasPattern)) return FALSE; if (!KnownExtensionDecode(strm, e_supportedPrefixes, m_supportedPrefixes)) return FALSE; if (!KnownExtensionDecode(strm, e_usageSpec, m_usageSpec)) return FALSE; if (!KnownExtensionDecode(strm, e_featureServerAlias, m_featureServerAlias)) return FALSE; if (!KnownExtensionDecode(strm, e_capacityReportingSpec, m_capacityReportingSpec)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; if (!KnownExtensionDecode(strm, e_assignedGatekeeper, m_assignedGatekeeper)) return FALSE; if (!KnownExtensionDecode(strm, e_rehomingModel, m_rehomingModel)) return FALSE; if (!KnownExtensionDecode(strm, e_transportQOS, m_transportQOS)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_RegistrationConfirm::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); m_protocolIdentifier.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); m_callSignalAddress.Encode(strm); if (HasOptionalField(e_terminalAlias)) m_terminalAlias.Encode(strm); if (HasOptionalField(e_gatekeeperIdentifier)) m_gatekeeperIdentifier.Encode(strm); m_endpointIdentifier.Encode(strm); KnownExtensionEncode(strm, e_alternateGatekeeper, m_alternateGatekeeper); KnownExtensionEncode(strm, e_timeToLive, m_timeToLive); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_willRespondToIRR, m_willRespondToIRR); KnownExtensionEncode(strm, e_preGrantedARQ, m_preGrantedARQ); KnownExtensionEncode(strm, e_maintainConnection, m_maintainConnection); KnownExtensionEncode(strm, e_serviceControl, m_serviceControl); KnownExtensionEncode(strm, e_supportsAdditiveRegistration, m_supportsAdditiveRegistration); KnownExtensionEncode(strm, e_terminalAliasPattern, m_terminalAliasPattern); KnownExtensionEncode(strm, e_supportedPrefixes, m_supportedPrefixes); KnownExtensionEncode(strm, e_usageSpec, m_usageSpec); KnownExtensionEncode(strm, e_featureServerAlias, m_featureServerAlias); KnownExtensionEncode(strm, e_capacityReportingSpec, m_capacityReportingSpec); KnownExtensionEncode(strm, e_featureSet, m_featureSet); KnownExtensionEncode(strm, e_genericData, m_genericData); KnownExtensionEncode(strm, e_assignedGatekeeper, m_assignedGatekeeper); KnownExtensionEncode(strm, e_rehomingModel, m_rehomingModel); KnownExtensionEncode(strm, e_transportQOS, m_transportQOS); UnknownExtensionsEncode(strm); } PObject * H225_RegistrationConfirm::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_RegistrationConfirm::Class()), PInvalidCast); #endif return new H225_RegistrationConfirm(*this); } // // BandwidthRequest // H225_BandwidthRequest::H225_BandwidthRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 12) { IncludeOptionalField(e_callIdentifier); IncludeOptionalField(e_answeredCall); } #ifndef PASN_NOPRINTON void H225_BandwidthRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+21) << "endpointIdentifier = " << setprecision(indent) << m_endpointIdentifier << '\n'; strm << setw(indent+15) << "conferenceID = " << setprecision(indent) << m_conferenceID << '\n'; strm << setw(indent+21) << "callReferenceValue = " << setprecision(indent) << m_callReferenceValue << '\n'; if (HasOptionalField(e_callType)) strm << setw(indent+11) << "callType = " << setprecision(indent) << m_callType << '\n'; strm << setw(indent+12) << "bandWidth = " << setprecision(indent) << m_bandWidth << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_callIdentifier)) strm << setw(indent+17) << "callIdentifier = " << setprecision(indent) << m_callIdentifier << '\n'; if (HasOptionalField(e_gatekeeperIdentifier)) strm << setw(indent+23) << "gatekeeperIdentifier = " << setprecision(indent) << m_gatekeeperIdentifier << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_answeredCall)) strm << setw(indent+15) << "answeredCall = " << setprecision(indent) << m_answeredCall << '\n'; if (HasOptionalField(e_callLinkage)) strm << setw(indent+14) << "callLinkage = " << setprecision(indent) << m_callLinkage << '\n'; if (HasOptionalField(e_capacity)) strm << setw(indent+11) << "capacity = " << setprecision(indent) << m_capacity << '\n'; if (HasOptionalField(e_usageInformation)) strm << setw(indent+19) << "usageInformation = " << setprecision(indent) << m_usageInformation << '\n'; if (HasOptionalField(e_bandwidthDetails)) strm << setw(indent+19) << "bandwidthDetails = " << setprecision(indent) << m_bandwidthDetails << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; if (HasOptionalField(e_transportQOS)) strm << setw(indent+15) << "transportQOS = " << setprecision(indent) << m_transportQOS << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_BandwidthRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_BandwidthRequest), PInvalidCast); #endif const H225_BandwidthRequest & other = (const H225_BandwidthRequest &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_endpointIdentifier.Compare(other.m_endpointIdentifier)) != EqualTo) return result; if ((result = m_conferenceID.Compare(other.m_conferenceID)) != EqualTo) return result; if ((result = m_callReferenceValue.Compare(other.m_callReferenceValue)) != EqualTo) return result; if ((result = m_callType.Compare(other.m_callType)) != EqualTo) return result; if ((result = m_bandWidth.Compare(other.m_bandWidth)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_BandwidthRequest::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); length += m_endpointIdentifier.GetObjectLength(); length += m_conferenceID.GetObjectLength(); length += m_callReferenceValue.GetObjectLength(); if (HasOptionalField(e_callType)) length += m_callType.GetObjectLength(); length += m_bandWidth.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_BandwidthRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_endpointIdentifier.Decode(strm)) return FALSE; if (!m_conferenceID.Decode(strm)) return FALSE; if (!m_callReferenceValue.Decode(strm)) return FALSE; if (HasOptionalField(e_callType) && !m_callType.Decode(strm)) return FALSE; if (!m_bandWidth.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_callIdentifier, m_callIdentifier)) return FALSE; if (!KnownExtensionDecode(strm, e_gatekeeperIdentifier, m_gatekeeperIdentifier)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_answeredCall, m_answeredCall)) return FALSE; if (!KnownExtensionDecode(strm, e_callLinkage, m_callLinkage)) return FALSE; if (!KnownExtensionDecode(strm, e_capacity, m_capacity)) return FALSE; if (!KnownExtensionDecode(strm, e_usageInformation, m_usageInformation)) return FALSE; if (!KnownExtensionDecode(strm, e_bandwidthDetails, m_bandwidthDetails)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; if (!KnownExtensionDecode(strm, e_transportQOS, m_transportQOS)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_BandwidthRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); m_endpointIdentifier.Encode(strm); m_conferenceID.Encode(strm); m_callReferenceValue.Encode(strm); if (HasOptionalField(e_callType)) m_callType.Encode(strm); m_bandWidth.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_callIdentifier, m_callIdentifier); KnownExtensionEncode(strm, e_gatekeeperIdentifier, m_gatekeeperIdentifier); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_answeredCall, m_answeredCall); KnownExtensionEncode(strm, e_callLinkage, m_callLinkage); KnownExtensionEncode(strm, e_capacity, m_capacity); KnownExtensionEncode(strm, e_usageInformation, m_usageInformation); KnownExtensionEncode(strm, e_bandwidthDetails, m_bandwidthDetails); KnownExtensionEncode(strm, e_genericData, m_genericData); KnownExtensionEncode(strm, e_transportQOS, m_transportQOS); UnknownExtensionsEncode(strm); } PObject * H225_BandwidthRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_BandwidthRequest::Class()), PInvalidCast); #endif return new H225_BandwidthRequest(*this); } // // BandwidthConfirm // H225_BandwidthConfirm::H225_BandwidthConfirm(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 6) { } #ifndef PASN_NOPRINTON void H225_BandwidthConfirm::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+12) << "bandWidth = " << setprecision(indent) << m_bandWidth << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_capacity)) strm << setw(indent+11) << "capacity = " << setprecision(indent) << m_capacity << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; if (HasOptionalField(e_transportQOS)) strm << setw(indent+15) << "transportQOS = " << setprecision(indent) << m_transportQOS << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_BandwidthConfirm::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_BandwidthConfirm), PInvalidCast); #endif const H225_BandwidthConfirm & other = (const H225_BandwidthConfirm &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_bandWidth.Compare(other.m_bandWidth)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_BandwidthConfirm::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); length += m_bandWidth.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_BandwidthConfirm::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_bandWidth.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_capacity, m_capacity)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; if (!KnownExtensionDecode(strm, e_transportQOS, m_transportQOS)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_BandwidthConfirm::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); m_bandWidth.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_capacity, m_capacity); KnownExtensionEncode(strm, e_genericData, m_genericData); KnownExtensionEncode(strm, e_transportQOS, m_transportQOS); UnknownExtensionsEncode(strm); } PObject * H225_BandwidthConfirm::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_BandwidthConfirm::Class()), PInvalidCast); #endif return new H225_BandwidthConfirm(*this); } // // ResourcesAvailableIndicate // H225_ResourcesAvailableIndicate::H225_ResourcesAvailableIndicate(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 4, TRUE, 2) { } #ifndef PASN_NOPRINTON void H225_ResourcesAvailableIndicate::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+21) << "protocolIdentifier = " << setprecision(indent) << m_protocolIdentifier << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent+21) << "endpointIdentifier = " << setprecision(indent) << m_endpointIdentifier << '\n'; strm << setw(indent+12) << "protocols = " << setprecision(indent) << m_protocols << '\n'; strm << setw(indent+23) << "almostOutOfResources = " << setprecision(indent) << m_almostOutOfResources << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_capacity)) strm << setw(indent+11) << "capacity = " << setprecision(indent) << m_capacity << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_ResourcesAvailableIndicate::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_ResourcesAvailableIndicate), PInvalidCast); #endif const H225_ResourcesAvailableIndicate & other = (const H225_ResourcesAvailableIndicate &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_protocolIdentifier.Compare(other.m_protocolIdentifier)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_endpointIdentifier.Compare(other.m_endpointIdentifier)) != EqualTo) return result; if ((result = m_protocols.Compare(other.m_protocols)) != EqualTo) return result; if ((result = m_almostOutOfResources.Compare(other.m_almostOutOfResources)) != EqualTo) return result; if ((result = m_tokens.Compare(other.m_tokens)) != EqualTo) return result; if ((result = m_cryptoTokens.Compare(other.m_cryptoTokens)) != EqualTo) return result; if ((result = m_integrityCheckValue.Compare(other.m_integrityCheckValue)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_ResourcesAvailableIndicate::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); length += m_protocolIdentifier.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); length += m_endpointIdentifier.GetObjectLength(); length += m_protocols.GetObjectLength(); length += m_almostOutOfResources.GetObjectLength(); if (HasOptionalField(e_tokens)) length += m_tokens.GetObjectLength(); if (HasOptionalField(e_cryptoTokens)) length += m_cryptoTokens.GetObjectLength(); if (HasOptionalField(e_integrityCheckValue)) length += m_integrityCheckValue.GetObjectLength(); return length; } PBoolean H225_ResourcesAvailableIndicate::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_protocolIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!m_endpointIdentifier.Decode(strm)) return FALSE; if (!m_protocols.Decode(strm)) return FALSE; if (!m_almostOutOfResources.Decode(strm)) return FALSE; if (HasOptionalField(e_tokens) && !m_tokens.Decode(strm)) return FALSE; if (HasOptionalField(e_cryptoTokens) && !m_cryptoTokens.Decode(strm)) return FALSE; if (HasOptionalField(e_integrityCheckValue) && !m_integrityCheckValue.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_capacity, m_capacity)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_ResourcesAvailableIndicate::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); m_protocolIdentifier.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); m_endpointIdentifier.Encode(strm); m_protocols.Encode(strm); m_almostOutOfResources.Encode(strm); if (HasOptionalField(e_tokens)) m_tokens.Encode(strm); if (HasOptionalField(e_cryptoTokens)) m_cryptoTokens.Encode(strm); if (HasOptionalField(e_integrityCheckValue)) m_integrityCheckValue.Encode(strm); KnownExtensionEncode(strm, e_capacity, m_capacity); KnownExtensionEncode(strm, e_genericData, m_genericData); UnknownExtensionsEncode(strm); } PObject * H225_ResourcesAvailableIndicate::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ResourcesAvailableIndicate::Class()), PInvalidCast); #endif return new H225_ResourcesAvailableIndicate(*this); } // // H323-UU-PDU // H225_H323_UU_PDU::H225_H323_UU_PDU(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 9) { IncludeOptionalField(e_h245Tunneling); } #ifndef PASN_NOPRINTON void H225_H323_UU_PDU::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+20) << "h323_message_body = " << setprecision(indent) << m_h323_message_body << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_h4501SupplementaryService)) strm << setw(indent+28) << "h4501SupplementaryService = " << setprecision(indent) << m_h4501SupplementaryService << '\n'; if (HasOptionalField(e_h245Tunneling)) strm << setw(indent+16) << "h245Tunneling = " << setprecision(indent) << m_h245Tunneling << '\n'; if (HasOptionalField(e_h245Control)) strm << setw(indent+14) << "h245Control = " << setprecision(indent) << m_h245Control << '\n'; if (HasOptionalField(e_nonStandardControl)) strm << setw(indent+21) << "nonStandardControl = " << setprecision(indent) << m_nonStandardControl << '\n'; if (HasOptionalField(e_callLinkage)) strm << setw(indent+14) << "callLinkage = " << setprecision(indent) << m_callLinkage << '\n'; if (HasOptionalField(e_tunnelledSignallingMessage)) strm << setw(indent+29) << "tunnelledSignallingMessage = " << setprecision(indent) << m_tunnelledSignallingMessage << '\n'; if (HasOptionalField(e_provisionalRespToH245Tunneling)) strm << setw(indent+33) << "provisionalRespToH245Tunneling = " << setprecision(indent) << m_provisionalRespToH245Tunneling << '\n'; if (HasOptionalField(e_stimulusControl)) strm << setw(indent+18) << "stimulusControl = " << setprecision(indent) << m_stimulusControl << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_H323_UU_PDU::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_H323_UU_PDU), PInvalidCast); #endif const H225_H323_UU_PDU & other = (const H225_H323_UU_PDU &)obj; Comparison result; if ((result = m_h323_message_body.Compare(other.m_h323_message_body)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_H323_UU_PDU::GetDataLength() const { PINDEX length = 0; length += m_h323_message_body.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_H323_UU_PDU::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_h323_message_body.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_h4501SupplementaryService, m_h4501SupplementaryService)) return FALSE; if (!KnownExtensionDecode(strm, e_h245Tunneling, m_h245Tunneling)) return FALSE; if (!KnownExtensionDecode(strm, e_h245Control, m_h245Control)) return FALSE; if (!KnownExtensionDecode(strm, e_nonStandardControl, m_nonStandardControl)) return FALSE; if (!KnownExtensionDecode(strm, e_callLinkage, m_callLinkage)) return FALSE; if (!KnownExtensionDecode(strm, e_tunnelledSignallingMessage, m_tunnelledSignallingMessage)) return FALSE; if (!KnownExtensionDecode(strm, e_provisionalRespToH245Tunneling, m_provisionalRespToH245Tunneling)) return FALSE; if (!KnownExtensionDecode(strm, e_stimulusControl, m_stimulusControl)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_H323_UU_PDU::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_h323_message_body.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_h4501SupplementaryService, m_h4501SupplementaryService); KnownExtensionEncode(strm, e_h245Tunneling, m_h245Tunneling); KnownExtensionEncode(strm, e_h245Control, m_h245Control); KnownExtensionEncode(strm, e_nonStandardControl, m_nonStandardControl); KnownExtensionEncode(strm, e_callLinkage, m_callLinkage); KnownExtensionEncode(strm, e_tunnelledSignallingMessage, m_tunnelledSignallingMessage); KnownExtensionEncode(strm, e_provisionalRespToH245Tunneling, m_provisionalRespToH245Tunneling); KnownExtensionEncode(strm, e_stimulusControl, m_stimulusControl); KnownExtensionEncode(strm, e_genericData, m_genericData); UnknownExtensionsEncode(strm); } PObject * H225_H323_UU_PDU::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_H323_UU_PDU::Class()), PInvalidCast); #endif return new H225_H323_UU_PDU(*this); } // // ReleaseComplete-UUIE // H225_ReleaseComplete_UUIE::H225_ReleaseComplete_UUIE(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 9) { IncludeOptionalField(e_callIdentifier); } #ifndef PASN_NOPRINTON void H225_ReleaseComplete_UUIE::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "protocolIdentifier = " << setprecision(indent) << m_protocolIdentifier << '\n'; if (HasOptionalField(e_reason)) strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; if (HasOptionalField(e_callIdentifier)) strm << setw(indent+17) << "callIdentifier = " << setprecision(indent) << m_callIdentifier << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_busyAddress)) strm << setw(indent+14) << "busyAddress = " << setprecision(indent) << m_busyAddress << '\n'; if (HasOptionalField(e_presentationIndicator)) strm << setw(indent+24) << "presentationIndicator = " << setprecision(indent) << m_presentationIndicator << '\n'; if (HasOptionalField(e_screeningIndicator)) strm << setw(indent+21) << "screeningIndicator = " << setprecision(indent) << m_screeningIndicator << '\n'; if (HasOptionalField(e_capacity)) strm << setw(indent+11) << "capacity = " << setprecision(indent) << m_capacity << '\n'; if (HasOptionalField(e_serviceControl)) strm << setw(indent+17) << "serviceControl = " << setprecision(indent) << m_serviceControl << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_ReleaseComplete_UUIE::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_ReleaseComplete_UUIE), PInvalidCast); #endif const H225_ReleaseComplete_UUIE & other = (const H225_ReleaseComplete_UUIE &)obj; Comparison result; if ((result = m_protocolIdentifier.Compare(other.m_protocolIdentifier)) != EqualTo) return result; if ((result = m_reason.Compare(other.m_reason)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_ReleaseComplete_UUIE::GetDataLength() const { PINDEX length = 0; length += m_protocolIdentifier.GetObjectLength(); if (HasOptionalField(e_reason)) length += m_reason.GetObjectLength(); return length; } PBoolean H225_ReleaseComplete_UUIE::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_protocolIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_reason) && !m_reason.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_callIdentifier, m_callIdentifier)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_busyAddress, m_busyAddress)) return FALSE; if (!KnownExtensionDecode(strm, e_presentationIndicator, m_presentationIndicator)) return FALSE; if (!KnownExtensionDecode(strm, e_screeningIndicator, m_screeningIndicator)) return FALSE; if (!KnownExtensionDecode(strm, e_capacity, m_capacity)) return FALSE; if (!KnownExtensionDecode(strm, e_serviceControl, m_serviceControl)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_ReleaseComplete_UUIE::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_protocolIdentifier.Encode(strm); if (HasOptionalField(e_reason)) m_reason.Encode(strm); KnownExtensionEncode(strm, e_callIdentifier, m_callIdentifier); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_busyAddress, m_busyAddress); KnownExtensionEncode(strm, e_presentationIndicator, m_presentationIndicator); KnownExtensionEncode(strm, e_screeningIndicator, m_screeningIndicator); KnownExtensionEncode(strm, e_capacity, m_capacity); KnownExtensionEncode(strm, e_serviceControl, m_serviceControl); KnownExtensionEncode(strm, e_featureSet, m_featureSet); UnknownExtensionsEncode(strm); } PObject * H225_ReleaseComplete_UUIE::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_ReleaseComplete_UUIE::Class()), PInvalidCast); #endif return new H225_ReleaseComplete_UUIE(*this); } // // EndpointType // H225_EndpointType::H225_EndpointType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 6, TRUE, 2) { m_set.SetConstraints(PASN_Object::FixedConstraint, 32); } #ifndef PASN_NOPRINTON void H225_EndpointType::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_vendor)) strm << setw(indent+9) << "vendor = " << setprecision(indent) << m_vendor << '\n'; if (HasOptionalField(e_gatekeeper)) strm << setw(indent+13) << "gatekeeper = " << setprecision(indent) << m_gatekeeper << '\n'; if (HasOptionalField(e_gateway)) strm << setw(indent+10) << "gateway = " << setprecision(indent) << m_gateway << '\n'; if (HasOptionalField(e_mcu)) strm << setw(indent+6) << "mcu = " << setprecision(indent) << m_mcu << '\n'; if (HasOptionalField(e_terminal)) strm << setw(indent+11) << "terminal = " << setprecision(indent) << m_terminal << '\n'; strm << setw(indent+5) << "mc = " << setprecision(indent) << m_mc << '\n'; strm << setw(indent+16) << "undefinedNode = " << setprecision(indent) << m_undefinedNode << '\n'; if (HasOptionalField(e_set)) strm << setw(indent+6) << "set = " << setprecision(indent) << m_set << '\n'; if (HasOptionalField(e_supportedTunnelledProtocols)) strm << setw(indent+30) << "supportedTunnelledProtocols = " << setprecision(indent) << m_supportedTunnelledProtocols << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_EndpointType::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_EndpointType), PInvalidCast); #endif const H225_EndpointType & other = (const H225_EndpointType &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_vendor.Compare(other.m_vendor)) != EqualTo) return result; if ((result = m_gatekeeper.Compare(other.m_gatekeeper)) != EqualTo) return result; if ((result = m_gateway.Compare(other.m_gateway)) != EqualTo) return result; if ((result = m_mcu.Compare(other.m_mcu)) != EqualTo) return result; if ((result = m_terminal.Compare(other.m_terminal)) != EqualTo) return result; if ((result = m_mc.Compare(other.m_mc)) != EqualTo) return result; if ((result = m_undefinedNode.Compare(other.m_undefinedNode)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_EndpointType::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); if (HasOptionalField(e_vendor)) length += m_vendor.GetObjectLength(); if (HasOptionalField(e_gatekeeper)) length += m_gatekeeper.GetObjectLength(); if (HasOptionalField(e_gateway)) length += m_gateway.GetObjectLength(); if (HasOptionalField(e_mcu)) length += m_mcu.GetObjectLength(); if (HasOptionalField(e_terminal)) length += m_terminal.GetObjectLength(); length += m_mc.GetObjectLength(); length += m_undefinedNode.GetObjectLength(); return length; } PBoolean H225_EndpointType::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (HasOptionalField(e_vendor) && !m_vendor.Decode(strm)) return FALSE; if (HasOptionalField(e_gatekeeper) && !m_gatekeeper.Decode(strm)) return FALSE; if (HasOptionalField(e_gateway) && !m_gateway.Decode(strm)) return FALSE; if (HasOptionalField(e_mcu) && !m_mcu.Decode(strm)) return FALSE; if (HasOptionalField(e_terminal) && !m_terminal.Decode(strm)) return FALSE; if (!m_mc.Decode(strm)) return FALSE; if (!m_undefinedNode.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_set, m_set)) return FALSE; if (!KnownExtensionDecode(strm, e_supportedTunnelledProtocols, m_supportedTunnelledProtocols)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_EndpointType::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); if (HasOptionalField(e_vendor)) m_vendor.Encode(strm); if (HasOptionalField(e_gatekeeper)) m_gatekeeper.Encode(strm); if (HasOptionalField(e_gateway)) m_gateway.Encode(strm); if (HasOptionalField(e_mcu)) m_mcu.Encode(strm); if (HasOptionalField(e_terminal)) m_terminal.Encode(strm); m_mc.Encode(strm); m_undefinedNode.Encode(strm); KnownExtensionEncode(strm, e_set, m_set); KnownExtensionEncode(strm, e_supportedTunnelledProtocols, m_supportedTunnelledProtocols); UnknownExtensionsEncode(strm); } PObject * H225_EndpointType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_EndpointType::Class()), PInvalidCast); #endif return new H225_EndpointType(*this); } // // CircuitInfo // H225_CircuitInfo::H225_CircuitInfo(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_CircuitInfo::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_sourceCircuitID)) strm << setw(indent+18) << "sourceCircuitID = " << setprecision(indent) << m_sourceCircuitID << '\n'; if (HasOptionalField(e_destinationCircuitID)) strm << setw(indent+23) << "destinationCircuitID = " << setprecision(indent) << m_destinationCircuitID << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_CircuitInfo::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_CircuitInfo), PInvalidCast); #endif const H225_CircuitInfo & other = (const H225_CircuitInfo &)obj; Comparison result; if ((result = m_sourceCircuitID.Compare(other.m_sourceCircuitID)) != EqualTo) return result; if ((result = m_destinationCircuitID.Compare(other.m_destinationCircuitID)) != EqualTo) return result; if ((result = m_genericData.Compare(other.m_genericData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_CircuitInfo::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_sourceCircuitID)) length += m_sourceCircuitID.GetObjectLength(); if (HasOptionalField(e_destinationCircuitID)) length += m_destinationCircuitID.GetObjectLength(); if (HasOptionalField(e_genericData)) length += m_genericData.GetObjectLength(); return length; } PBoolean H225_CircuitInfo::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_sourceCircuitID) && !m_sourceCircuitID.Decode(strm)) return FALSE; if (HasOptionalField(e_destinationCircuitID) && !m_destinationCircuitID.Decode(strm)) return FALSE; if (HasOptionalField(e_genericData) && !m_genericData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_CircuitInfo::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_sourceCircuitID)) m_sourceCircuitID.Encode(strm); if (HasOptionalField(e_destinationCircuitID)) m_destinationCircuitID.Encode(strm); if (HasOptionalField(e_genericData)) m_genericData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_CircuitInfo::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CircuitInfo::Class()), PInvalidCast); #endif return new H225_CircuitInfo(*this); } // // GatekeeperRequest // H225_GatekeeperRequest::H225_GatekeeperRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 4, TRUE, 12) { // IncludeOptionalField(e_supportsAssignedGK); } #ifndef PASN_NOPRINTON void H225_GatekeeperRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+21) << "protocolIdentifier = " << setprecision(indent) << m_protocolIdentifier << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent+13) << "rasAddress = " << setprecision(indent) << m_rasAddress << '\n'; strm << setw(indent+15) << "endpointType = " << setprecision(indent) << m_endpointType << '\n'; if (HasOptionalField(e_gatekeeperIdentifier)) strm << setw(indent+23) << "gatekeeperIdentifier = " << setprecision(indent) << m_gatekeeperIdentifier << '\n'; if (HasOptionalField(e_callServices)) strm << setw(indent+15) << "callServices = " << setprecision(indent) << m_callServices << '\n'; if (HasOptionalField(e_endpointAlias)) strm << setw(indent+16) << "endpointAlias = " << setprecision(indent) << m_endpointAlias << '\n'; if (HasOptionalField(e_alternateEndpoints)) strm << setw(indent+21) << "alternateEndpoints = " << setprecision(indent) << m_alternateEndpoints << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_authenticationCapability)) strm << setw(indent+27) << "authenticationCapability = " << setprecision(indent) << m_authenticationCapability << '\n'; if (HasOptionalField(e_algorithmOIDs)) strm << setw(indent+16) << "algorithmOIDs = " << setprecision(indent) << m_algorithmOIDs << '\n'; if (HasOptionalField(e_integrity)) strm << setw(indent+12) << "integrity = " << setprecision(indent) << m_integrity << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_supportsAltGK)) strm << setw(indent+16) << "supportsAltGK = " << setprecision(indent) << m_supportsAltGK << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; if (HasOptionalField(e_supportsAssignedGK)) strm << setw(indent+21) << "supportsAssignedGK = " << setprecision(indent) << m_supportsAssignedGK << '\n'; if (HasOptionalField(e_assignedGatekeeper)) strm << setw(indent+21) << "assignedGatekeeper = " << setprecision(indent) << m_assignedGatekeeper << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_GatekeeperRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_GatekeeperRequest), PInvalidCast); #endif const H225_GatekeeperRequest & other = (const H225_GatekeeperRequest &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_protocolIdentifier.Compare(other.m_protocolIdentifier)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_rasAddress.Compare(other.m_rasAddress)) != EqualTo) return result; if ((result = m_endpointType.Compare(other.m_endpointType)) != EqualTo) return result; if ((result = m_gatekeeperIdentifier.Compare(other.m_gatekeeperIdentifier)) != EqualTo) return result; if ((result = m_callServices.Compare(other.m_callServices)) != EqualTo) return result; if ((result = m_endpointAlias.Compare(other.m_endpointAlias)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_GatekeeperRequest::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); length += m_protocolIdentifier.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); length += m_rasAddress.GetObjectLength(); length += m_endpointType.GetObjectLength(); if (HasOptionalField(e_gatekeeperIdentifier)) length += m_gatekeeperIdentifier.GetObjectLength(); if (HasOptionalField(e_callServices)) length += m_callServices.GetObjectLength(); if (HasOptionalField(e_endpointAlias)) length += m_endpointAlias.GetObjectLength(); return length; } PBoolean H225_GatekeeperRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_protocolIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!m_rasAddress.Decode(strm)) return FALSE; if (!m_endpointType.Decode(strm)) return FALSE; if (HasOptionalField(e_gatekeeperIdentifier) && !m_gatekeeperIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_callServices) && !m_callServices.Decode(strm)) return FALSE; if (HasOptionalField(e_endpointAlias) && !m_endpointAlias.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_alternateEndpoints, m_alternateEndpoints)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_authenticationCapability, m_authenticationCapability)) return FALSE; if (!KnownExtensionDecode(strm, e_algorithmOIDs, m_algorithmOIDs)) return FALSE; if (!KnownExtensionDecode(strm, e_integrity, m_integrity)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_supportsAltGK, m_supportsAltGK)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; if (!KnownExtensionDecode(strm, e_supportsAssignedGK, m_supportsAssignedGK)) return FALSE; if (!KnownExtensionDecode(strm, e_assignedGatekeeper, m_assignedGatekeeper)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_GatekeeperRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); m_protocolIdentifier.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); m_rasAddress.Encode(strm); m_endpointType.Encode(strm); if (HasOptionalField(e_gatekeeperIdentifier)) m_gatekeeperIdentifier.Encode(strm); if (HasOptionalField(e_callServices)) m_callServices.Encode(strm); if (HasOptionalField(e_endpointAlias)) m_endpointAlias.Encode(strm); KnownExtensionEncode(strm, e_alternateEndpoints, m_alternateEndpoints); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_authenticationCapability, m_authenticationCapability); KnownExtensionEncode(strm, e_algorithmOIDs, m_algorithmOIDs); KnownExtensionEncode(strm, e_integrity, m_integrity); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_supportsAltGK, m_supportsAltGK); KnownExtensionEncode(strm, e_featureSet, m_featureSet); KnownExtensionEncode(strm, e_genericData, m_genericData); KnownExtensionEncode(strm, e_supportsAssignedGK, m_supportsAssignedGK); KnownExtensionEncode(strm, e_assignedGatekeeper, m_assignedGatekeeper); UnknownExtensionsEncode(strm); } PObject * H225_GatekeeperRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_GatekeeperRequest::Class()), PInvalidCast); #endif return new H225_GatekeeperRequest(*this); } // // RegistrationRequest // H225_RegistrationRequest::H225_RegistrationRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 27) { IncludeOptionalField(e_keepAlive); IncludeOptionalField(e_willSupplyUUIEs); IncludeOptionalField(e_maintainConnection); // Removed for backwards interoperabililty. Problems with the messages being parsed on previous versions // IncludeOptionalField(e_supportsAssignedGK); } #ifndef PASN_NOPRINTON void H225_RegistrationRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+21) << "protocolIdentifier = " << setprecision(indent) << m_protocolIdentifier << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent+20) << "discoveryComplete = " << setprecision(indent) << m_discoveryComplete << '\n'; strm << setw(indent+20) << "callSignalAddress = " << setprecision(indent) << m_callSignalAddress << '\n'; strm << setw(indent+13) << "rasAddress = " << setprecision(indent) << m_rasAddress << '\n'; strm << setw(indent+15) << "terminalType = " << setprecision(indent) << m_terminalType << '\n'; if (HasOptionalField(e_terminalAlias)) strm << setw(indent+16) << "terminalAlias = " << setprecision(indent) << m_terminalAlias << '\n'; if (HasOptionalField(e_gatekeeperIdentifier)) strm << setw(indent+23) << "gatekeeperIdentifier = " << setprecision(indent) << m_gatekeeperIdentifier << '\n'; strm << setw(indent+17) << "endpointVendor = " << setprecision(indent) << m_endpointVendor << '\n'; if (HasOptionalField(e_alternateEndpoints)) strm << setw(indent+21) << "alternateEndpoints = " << setprecision(indent) << m_alternateEndpoints << '\n'; if (HasOptionalField(e_timeToLive)) strm << setw(indent+13) << "timeToLive = " << setprecision(indent) << m_timeToLive << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_keepAlive)) strm << setw(indent+12) << "keepAlive = " << setprecision(indent) << m_keepAlive << '\n'; if (HasOptionalField(e_endpointIdentifier)) strm << setw(indent+21) << "endpointIdentifier = " << setprecision(indent) << m_endpointIdentifier << '\n'; if (HasOptionalField(e_willSupplyUUIEs)) strm << setw(indent+18) << "willSupplyUUIEs = " << setprecision(indent) << m_willSupplyUUIEs << '\n'; if (HasOptionalField(e_maintainConnection)) strm << setw(indent+21) << "maintainConnection = " << setprecision(indent) << m_maintainConnection << '\n'; if (HasOptionalField(e_alternateTransportAddresses)) strm << setw(indent+30) << "alternateTransportAddresses = " << setprecision(indent) << m_alternateTransportAddresses << '\n'; if (HasOptionalField(e_additiveRegistration)) strm << setw(indent+23) << "additiveRegistration = " << setprecision(indent) << m_additiveRegistration << '\n'; if (HasOptionalField(e_terminalAliasPattern)) strm << setw(indent+23) << "terminalAliasPattern = " << setprecision(indent) << m_terminalAliasPattern << '\n'; if (HasOptionalField(e_supportsAltGK)) strm << setw(indent+16) << "supportsAltGK = " << setprecision(indent) << m_supportsAltGK << '\n'; if (HasOptionalField(e_usageReportingCapability)) strm << setw(indent+27) << "usageReportingCapability = " << setprecision(indent) << m_usageReportingCapability << '\n'; if (HasOptionalField(e_multipleCalls)) strm << setw(indent+16) << "multipleCalls = " << setprecision(indent) << m_multipleCalls << '\n'; if (HasOptionalField(e_supportedH248Packages)) strm << setw(indent+24) << "supportedH248Packages = " << setprecision(indent) << m_supportedH248Packages << '\n'; if (HasOptionalField(e_callCreditCapability)) strm << setw(indent+23) << "callCreditCapability = " << setprecision(indent) << m_callCreditCapability << '\n'; if (HasOptionalField(e_capacityReportingCapability)) strm << setw(indent+30) << "capacityReportingCapability = " << setprecision(indent) << m_capacityReportingCapability << '\n'; if (HasOptionalField(e_capacity)) strm << setw(indent+11) << "capacity = " << setprecision(indent) << m_capacity << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; if (HasOptionalField(e_restart)) strm << setw(indent+10) << "restart = " << setprecision(indent) << m_restart << '\n'; if (HasOptionalField(e_supportsACFSequences)) strm << setw(indent+23) << "supportsACFSequences = " << setprecision(indent) << m_supportsACFSequences << '\n'; if (HasOptionalField(e_supportsAssignedGK)) strm << setw(indent+21) << "supportsAssignedGK = " << setprecision(indent) << m_supportsAssignedGK << '\n'; if (HasOptionalField(e_assignedGatekeeper)) strm << setw(indent+21) << "assignedGatekeeper = " << setprecision(indent) << m_assignedGatekeeper << '\n'; if (HasOptionalField(e_transportQOS)) strm << setw(indent+15) << "transportQOS = " << setprecision(indent) << m_transportQOS << '\n'; if (HasOptionalField(e_language)) strm << setw(indent+11) << "language = " << setprecision(indent) << m_language << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_RegistrationRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_RegistrationRequest), PInvalidCast); #endif const H225_RegistrationRequest & other = (const H225_RegistrationRequest &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_protocolIdentifier.Compare(other.m_protocolIdentifier)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_discoveryComplete.Compare(other.m_discoveryComplete)) != EqualTo) return result; if ((result = m_callSignalAddress.Compare(other.m_callSignalAddress)) != EqualTo) return result; if ((result = m_rasAddress.Compare(other.m_rasAddress)) != EqualTo) return result; if ((result = m_terminalType.Compare(other.m_terminalType)) != EqualTo) return result; if ((result = m_terminalAlias.Compare(other.m_terminalAlias)) != EqualTo) return result; if ((result = m_gatekeeperIdentifier.Compare(other.m_gatekeeperIdentifier)) != EqualTo) return result; if ((result = m_endpointVendor.Compare(other.m_endpointVendor)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_RegistrationRequest::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); length += m_protocolIdentifier.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); length += m_discoveryComplete.GetObjectLength(); length += m_callSignalAddress.GetObjectLength(); length += m_rasAddress.GetObjectLength(); length += m_terminalType.GetObjectLength(); if (HasOptionalField(e_terminalAlias)) length += m_terminalAlias.GetObjectLength(); if (HasOptionalField(e_gatekeeperIdentifier)) length += m_gatekeeperIdentifier.GetObjectLength(); length += m_endpointVendor.GetObjectLength(); return length; } PBoolean H225_RegistrationRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_protocolIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!m_discoveryComplete.Decode(strm)) return FALSE; if (!m_callSignalAddress.Decode(strm)) return FALSE; if (!m_rasAddress.Decode(strm)) return FALSE; if (!m_terminalType.Decode(strm)) return FALSE; if (HasOptionalField(e_terminalAlias) && !m_terminalAlias.Decode(strm)) return FALSE; if (HasOptionalField(e_gatekeeperIdentifier) && !m_gatekeeperIdentifier.Decode(strm)) return FALSE; if (!m_endpointVendor.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_alternateEndpoints, m_alternateEndpoints)) return FALSE; if (!KnownExtensionDecode(strm, e_timeToLive, m_timeToLive)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_keepAlive, m_keepAlive)) return FALSE; if (!KnownExtensionDecode(strm, e_endpointIdentifier, m_endpointIdentifier)) return FALSE; if (!KnownExtensionDecode(strm, e_willSupplyUUIEs, m_willSupplyUUIEs)) return FALSE; if (!KnownExtensionDecode(strm, e_maintainConnection, m_maintainConnection)) return FALSE; if (!KnownExtensionDecode(strm, e_alternateTransportAddresses, m_alternateTransportAddresses)) return FALSE; if (!KnownExtensionDecode(strm, e_additiveRegistration, m_additiveRegistration)) return FALSE; if (!KnownExtensionDecode(strm, e_terminalAliasPattern, m_terminalAliasPattern)) return FALSE; if (!KnownExtensionDecode(strm, e_supportsAltGK, m_supportsAltGK)) return FALSE; if (!KnownExtensionDecode(strm, e_usageReportingCapability, m_usageReportingCapability)) return FALSE; if (!KnownExtensionDecode(strm, e_multipleCalls, m_multipleCalls)) return FALSE; if (!KnownExtensionDecode(strm, e_supportedH248Packages, m_supportedH248Packages)) return FALSE; if (!KnownExtensionDecode(strm, e_callCreditCapability, m_callCreditCapability)) return FALSE; if (!KnownExtensionDecode(strm, e_capacityReportingCapability, m_capacityReportingCapability)) return FALSE; if (!KnownExtensionDecode(strm, e_capacity, m_capacity)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; if (!KnownExtensionDecode(strm, e_restart, m_restart)) return FALSE; if (!KnownExtensionDecode(strm, e_supportsACFSequences, m_supportsACFSequences)) return FALSE; if (!KnownExtensionDecode(strm, e_supportsAssignedGK, m_supportsAssignedGK)) return FALSE; if (!KnownExtensionDecode(strm, e_assignedGatekeeper, m_assignedGatekeeper)) return FALSE; if (!KnownExtensionDecode(strm, e_transportQOS, m_transportQOS)) return FALSE; if (!KnownExtensionDecode(strm, e_language, m_language)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_RegistrationRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); m_protocolIdentifier.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); m_discoveryComplete.Encode(strm); m_callSignalAddress.Encode(strm); m_rasAddress.Encode(strm); m_terminalType.Encode(strm); if (HasOptionalField(e_terminalAlias)) m_terminalAlias.Encode(strm); if (HasOptionalField(e_gatekeeperIdentifier)) m_gatekeeperIdentifier.Encode(strm); m_endpointVendor.Encode(strm); KnownExtensionEncode(strm, e_alternateEndpoints, m_alternateEndpoints); KnownExtensionEncode(strm, e_timeToLive, m_timeToLive); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_keepAlive, m_keepAlive); KnownExtensionEncode(strm, e_endpointIdentifier, m_endpointIdentifier); KnownExtensionEncode(strm, e_willSupplyUUIEs, m_willSupplyUUIEs); KnownExtensionEncode(strm, e_maintainConnection, m_maintainConnection); KnownExtensionEncode(strm, e_alternateTransportAddresses, m_alternateTransportAddresses); KnownExtensionEncode(strm, e_additiveRegistration, m_additiveRegistration); KnownExtensionEncode(strm, e_terminalAliasPattern, m_terminalAliasPattern); KnownExtensionEncode(strm, e_supportsAltGK, m_supportsAltGK); KnownExtensionEncode(strm, e_usageReportingCapability, m_usageReportingCapability); KnownExtensionEncode(strm, e_multipleCalls, m_multipleCalls); KnownExtensionEncode(strm, e_supportedH248Packages, m_supportedH248Packages); KnownExtensionEncode(strm, e_callCreditCapability, m_callCreditCapability); KnownExtensionEncode(strm, e_capacityReportingCapability, m_capacityReportingCapability); KnownExtensionEncode(strm, e_capacity, m_capacity); KnownExtensionEncode(strm, e_featureSet, m_featureSet); KnownExtensionEncode(strm, e_genericData, m_genericData); KnownExtensionEncode(strm, e_restart, m_restart); KnownExtensionEncode(strm, e_supportsACFSequences, m_supportsACFSequences); KnownExtensionEncode(strm, e_supportsAssignedGK, m_supportsAssignedGK); KnownExtensionEncode(strm, e_assignedGatekeeper, m_assignedGatekeeper); KnownExtensionEncode(strm, e_transportQOS, m_transportQOS); KnownExtensionEncode(strm, e_language, m_language); UnknownExtensionsEncode(strm); } PObject * H225_RegistrationRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_RegistrationRequest::Class()), PInvalidCast); #endif return new H225_RegistrationRequest(*this); } // // AdmissionRequest // H225_AdmissionRequest::H225_AdmissionRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 7, TRUE, 19) { IncludeOptionalField(e_canMapAlias); IncludeOptionalField(e_callIdentifier); IncludeOptionalField(e_willSupplyUUIEs); IncludeOptionalField(e_canMapSrcAlias); } #ifndef PASN_NOPRINTON void H225_AdmissionRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+11) << "callType = " << setprecision(indent) << m_callType << '\n'; if (HasOptionalField(e_callModel)) strm << setw(indent+12) << "callModel = " << setprecision(indent) << m_callModel << '\n'; strm << setw(indent+21) << "endpointIdentifier = " << setprecision(indent) << m_endpointIdentifier << '\n'; if (HasOptionalField(e_destinationInfo)) strm << setw(indent+18) << "destinationInfo = " << setprecision(indent) << m_destinationInfo << '\n'; if (HasOptionalField(e_destCallSignalAddress)) strm << setw(indent+24) << "destCallSignalAddress = " << setprecision(indent) << m_destCallSignalAddress << '\n'; if (HasOptionalField(e_destExtraCallInfo)) strm << setw(indent+20) << "destExtraCallInfo = " << setprecision(indent) << m_destExtraCallInfo << '\n'; strm << setw(indent+10) << "srcInfo = " << setprecision(indent) << m_srcInfo << '\n'; if (HasOptionalField(e_srcCallSignalAddress)) strm << setw(indent+23) << "srcCallSignalAddress = " << setprecision(indent) << m_srcCallSignalAddress << '\n'; strm << setw(indent+12) << "bandWidth = " << setprecision(indent) << m_bandWidth << '\n'; strm << setw(indent+21) << "callReferenceValue = " << setprecision(indent) << m_callReferenceValue << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_callServices)) strm << setw(indent+15) << "callServices = " << setprecision(indent) << m_callServices << '\n'; strm << setw(indent+15) << "conferenceID = " << setprecision(indent) << m_conferenceID << '\n'; strm << setw(indent+11) << "activeMC = " << setprecision(indent) << m_activeMC << '\n'; strm << setw(indent+13) << "answerCall = " << setprecision(indent) << m_answerCall << '\n'; if (HasOptionalField(e_canMapAlias)) strm << setw(indent+14) << "canMapAlias = " << setprecision(indent) << m_canMapAlias << '\n'; if (HasOptionalField(e_callIdentifier)) strm << setw(indent+17) << "callIdentifier = " << setprecision(indent) << m_callIdentifier << '\n'; if (HasOptionalField(e_srcAlternatives)) strm << setw(indent+18) << "srcAlternatives = " << setprecision(indent) << m_srcAlternatives << '\n'; if (HasOptionalField(e_destAlternatives)) strm << setw(indent+19) << "destAlternatives = " << setprecision(indent) << m_destAlternatives << '\n'; if (HasOptionalField(e_gatekeeperIdentifier)) strm << setw(indent+23) << "gatekeeperIdentifier = " << setprecision(indent) << m_gatekeeperIdentifier << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_transportQOS)) strm << setw(indent+15) << "transportQOS = " << setprecision(indent) << m_transportQOS << '\n'; if (HasOptionalField(e_willSupplyUUIEs)) strm << setw(indent+18) << "willSupplyUUIEs = " << setprecision(indent) << m_willSupplyUUIEs << '\n'; if (HasOptionalField(e_callLinkage)) strm << setw(indent+14) << "callLinkage = " << setprecision(indent) << m_callLinkage << '\n'; if (HasOptionalField(e_gatewayDataRate)) strm << setw(indent+18) << "gatewayDataRate = " << setprecision(indent) << m_gatewayDataRate << '\n'; if (HasOptionalField(e_capacity)) strm << setw(indent+11) << "capacity = " << setprecision(indent) << m_capacity << '\n'; if (HasOptionalField(e_circuitInfo)) strm << setw(indent+14) << "circuitInfo = " << setprecision(indent) << m_circuitInfo << '\n'; if (HasOptionalField(e_desiredProtocols)) strm << setw(indent+19) << "desiredProtocols = " << setprecision(indent) << m_desiredProtocols << '\n'; if (HasOptionalField(e_desiredTunnelledProtocol)) strm << setw(indent+27) << "desiredTunnelledProtocol = " << setprecision(indent) << m_desiredTunnelledProtocol << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; if (HasOptionalField(e_canMapSrcAlias)) strm << setw(indent+17) << "canMapSrcAlias = " << setprecision(indent) << m_canMapSrcAlias << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_AdmissionRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_AdmissionRequest), PInvalidCast); #endif const H225_AdmissionRequest & other = (const H225_AdmissionRequest &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_callType.Compare(other.m_callType)) != EqualTo) return result; if ((result = m_callModel.Compare(other.m_callModel)) != EqualTo) return result; if ((result = m_endpointIdentifier.Compare(other.m_endpointIdentifier)) != EqualTo) return result; if ((result = m_destinationInfo.Compare(other.m_destinationInfo)) != EqualTo) return result; if ((result = m_destCallSignalAddress.Compare(other.m_destCallSignalAddress)) != EqualTo) return result; if ((result = m_destExtraCallInfo.Compare(other.m_destExtraCallInfo)) != EqualTo) return result; if ((result = m_srcInfo.Compare(other.m_srcInfo)) != EqualTo) return result; if ((result = m_srcCallSignalAddress.Compare(other.m_srcCallSignalAddress)) != EqualTo) return result; if ((result = m_bandWidth.Compare(other.m_bandWidth)) != EqualTo) return result; if ((result = m_callReferenceValue.Compare(other.m_callReferenceValue)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_callServices.Compare(other.m_callServices)) != EqualTo) return result; if ((result = m_conferenceID.Compare(other.m_conferenceID)) != EqualTo) return result; if ((result = m_activeMC.Compare(other.m_activeMC)) != EqualTo) return result; if ((result = m_answerCall.Compare(other.m_answerCall)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_AdmissionRequest::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); length += m_callType.GetObjectLength(); if (HasOptionalField(e_callModel)) length += m_callModel.GetObjectLength(); length += m_endpointIdentifier.GetObjectLength(); if (HasOptionalField(e_destinationInfo)) length += m_destinationInfo.GetObjectLength(); if (HasOptionalField(e_destCallSignalAddress)) length += m_destCallSignalAddress.GetObjectLength(); if (HasOptionalField(e_destExtraCallInfo)) length += m_destExtraCallInfo.GetObjectLength(); length += m_srcInfo.GetObjectLength(); if (HasOptionalField(e_srcCallSignalAddress)) length += m_srcCallSignalAddress.GetObjectLength(); length += m_bandWidth.GetObjectLength(); length += m_callReferenceValue.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); if (HasOptionalField(e_callServices)) length += m_callServices.GetObjectLength(); length += m_conferenceID.GetObjectLength(); length += m_activeMC.GetObjectLength(); length += m_answerCall.GetObjectLength(); return length; } PBoolean H225_AdmissionRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_callType.Decode(strm)) return FALSE; if (HasOptionalField(e_callModel) && !m_callModel.Decode(strm)) return FALSE; if (!m_endpointIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_destinationInfo) && !m_destinationInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_destCallSignalAddress) && !m_destCallSignalAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_destExtraCallInfo) && !m_destExtraCallInfo.Decode(strm)) return FALSE; if (!m_srcInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_srcCallSignalAddress) && !m_srcCallSignalAddress.Decode(strm)) return FALSE; if (!m_bandWidth.Decode(strm)) return FALSE; if (!m_callReferenceValue.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (HasOptionalField(e_callServices) && !m_callServices.Decode(strm)) return FALSE; if (!m_conferenceID.Decode(strm)) return FALSE; if (!m_activeMC.Decode(strm)) return FALSE; if (!m_answerCall.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_canMapAlias, m_canMapAlias)) return FALSE; if (!KnownExtensionDecode(strm, e_callIdentifier, m_callIdentifier)) return FALSE; if (!KnownExtensionDecode(strm, e_srcAlternatives, m_srcAlternatives)) return FALSE; if (!KnownExtensionDecode(strm, e_destAlternatives, m_destAlternatives)) return FALSE; if (!KnownExtensionDecode(strm, e_gatekeeperIdentifier, m_gatekeeperIdentifier)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_transportQOS, m_transportQOS)) return FALSE; if (!KnownExtensionDecode(strm, e_willSupplyUUIEs, m_willSupplyUUIEs)) return FALSE; if (!KnownExtensionDecode(strm, e_callLinkage, m_callLinkage)) return FALSE; if (!KnownExtensionDecode(strm, e_gatewayDataRate, m_gatewayDataRate)) return FALSE; if (!KnownExtensionDecode(strm, e_capacity, m_capacity)) return FALSE; if (!KnownExtensionDecode(strm, e_circuitInfo, m_circuitInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_desiredProtocols, m_desiredProtocols)) return FALSE; if (!KnownExtensionDecode(strm, e_desiredTunnelledProtocol, m_desiredTunnelledProtocol)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; if (!KnownExtensionDecode(strm, e_canMapSrcAlias, m_canMapSrcAlias)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_AdmissionRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); m_callType.Encode(strm); if (HasOptionalField(e_callModel)) m_callModel.Encode(strm); m_endpointIdentifier.Encode(strm); if (HasOptionalField(e_destinationInfo)) m_destinationInfo.Encode(strm); if (HasOptionalField(e_destCallSignalAddress)) m_destCallSignalAddress.Encode(strm); if (HasOptionalField(e_destExtraCallInfo)) m_destExtraCallInfo.Encode(strm); m_srcInfo.Encode(strm); if (HasOptionalField(e_srcCallSignalAddress)) m_srcCallSignalAddress.Encode(strm); m_bandWidth.Encode(strm); m_callReferenceValue.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); if (HasOptionalField(e_callServices)) m_callServices.Encode(strm); m_conferenceID.Encode(strm); m_activeMC.Encode(strm); m_answerCall.Encode(strm); KnownExtensionEncode(strm, e_canMapAlias, m_canMapAlias); KnownExtensionEncode(strm, e_callIdentifier, m_callIdentifier); KnownExtensionEncode(strm, e_srcAlternatives, m_srcAlternatives); KnownExtensionEncode(strm, e_destAlternatives, m_destAlternatives); KnownExtensionEncode(strm, e_gatekeeperIdentifier, m_gatekeeperIdentifier); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_transportQOS, m_transportQOS); KnownExtensionEncode(strm, e_willSupplyUUIEs, m_willSupplyUUIEs); KnownExtensionEncode(strm, e_callLinkage, m_callLinkage); KnownExtensionEncode(strm, e_gatewayDataRate, m_gatewayDataRate); KnownExtensionEncode(strm, e_capacity, m_capacity); KnownExtensionEncode(strm, e_circuitInfo, m_circuitInfo); KnownExtensionEncode(strm, e_desiredProtocols, m_desiredProtocols); KnownExtensionEncode(strm, e_desiredTunnelledProtocol, m_desiredTunnelledProtocol); KnownExtensionEncode(strm, e_featureSet, m_featureSet); KnownExtensionEncode(strm, e_genericData, m_genericData); KnownExtensionEncode(strm, e_canMapSrcAlias, m_canMapSrcAlias); UnknownExtensionsEncode(strm); } PObject * H225_AdmissionRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_AdmissionRequest::Class()), PInvalidCast); #endif return new H225_AdmissionRequest(*this); } // // AdmissionConfirm // H225_AdmissionConfirm::H225_AdmissionConfirm(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 23) { m_irrFrequency.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); IncludeOptionalField(e_willRespondToIRR); IncludeOptionalField(e_uuiesRequested); } #ifndef PASN_NOPRINTON void H225_AdmissionConfirm::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+12) << "bandWidth = " << setprecision(indent) << m_bandWidth << '\n'; strm << setw(indent+12) << "callModel = " << setprecision(indent) << m_callModel << '\n'; strm << setw(indent+24) << "destCallSignalAddress = " << setprecision(indent) << m_destCallSignalAddress << '\n'; if (HasOptionalField(e_irrFrequency)) strm << setw(indent+15) << "irrFrequency = " << setprecision(indent) << m_irrFrequency << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_destinationInfo)) strm << setw(indent+18) << "destinationInfo = " << setprecision(indent) << m_destinationInfo << '\n'; if (HasOptionalField(e_destExtraCallInfo)) strm << setw(indent+20) << "destExtraCallInfo = " << setprecision(indent) << m_destExtraCallInfo << '\n'; if (HasOptionalField(e_destinationType)) strm << setw(indent+18) << "destinationType = " << setprecision(indent) << m_destinationType << '\n'; if (HasOptionalField(e_remoteExtensionAddress)) strm << setw(indent+25) << "remoteExtensionAddress = " << setprecision(indent) << m_remoteExtensionAddress << '\n'; if (HasOptionalField(e_alternateEndpoints)) strm << setw(indent+21) << "alternateEndpoints = " << setprecision(indent) << m_alternateEndpoints << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_transportQOS)) strm << setw(indent+15) << "transportQOS = " << setprecision(indent) << m_transportQOS << '\n'; if (HasOptionalField(e_willRespondToIRR)) strm << setw(indent+19) << "willRespondToIRR = " << setprecision(indent) << m_willRespondToIRR << '\n'; if (HasOptionalField(e_uuiesRequested)) strm << setw(indent+17) << "uuiesRequested = " << setprecision(indent) << m_uuiesRequested << '\n'; if (HasOptionalField(e_language)) strm << setw(indent+11) << "language = " << setprecision(indent) << m_language << '\n'; if (HasOptionalField(e_alternateTransportAddresses)) strm << setw(indent+30) << "alternateTransportAddresses = " << setprecision(indent) << m_alternateTransportAddresses << '\n'; if (HasOptionalField(e_useSpecifiedTransport)) strm << setw(indent+24) << "useSpecifiedTransport = " << setprecision(indent) << m_useSpecifiedTransport << '\n'; if (HasOptionalField(e_circuitInfo)) strm << setw(indent+14) << "circuitInfo = " << setprecision(indent) << m_circuitInfo << '\n'; if (HasOptionalField(e_usageSpec)) strm << setw(indent+12) << "usageSpec = " << setprecision(indent) << m_usageSpec << '\n'; if (HasOptionalField(e_supportedProtocols)) strm << setw(indent+21) << "supportedProtocols = " << setprecision(indent) << m_supportedProtocols << '\n'; if (HasOptionalField(e_serviceControl)) strm << setw(indent+17) << "serviceControl = " << setprecision(indent) << m_serviceControl << '\n'; if (HasOptionalField(e_multipleCalls)) strm << setw(indent+16) << "multipleCalls = " << setprecision(indent) << m_multipleCalls << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; if (HasOptionalField(e_modifiedSrcInfo)) strm << setw(indent+18) << "modifiedSrcInfo = " << setprecision(indent) << m_modifiedSrcInfo << '\n'; if (HasOptionalField(e_assignedGatekeeper)) strm << setw(indent+21) << "assignedGatekeeper = " << setprecision(indent) << m_assignedGatekeeper << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_AdmissionConfirm::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_AdmissionConfirm), PInvalidCast); #endif const H225_AdmissionConfirm & other = (const H225_AdmissionConfirm &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_bandWidth.Compare(other.m_bandWidth)) != EqualTo) return result; if ((result = m_callModel.Compare(other.m_callModel)) != EqualTo) return result; if ((result = m_destCallSignalAddress.Compare(other.m_destCallSignalAddress)) != EqualTo) return result; if ((result = m_irrFrequency.Compare(other.m_irrFrequency)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_AdmissionConfirm::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); length += m_bandWidth.GetObjectLength(); length += m_callModel.GetObjectLength(); length += m_destCallSignalAddress.GetObjectLength(); if (HasOptionalField(e_irrFrequency)) length += m_irrFrequency.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_AdmissionConfirm::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_bandWidth.Decode(strm)) return FALSE; if (!m_callModel.Decode(strm)) return FALSE; if (!m_destCallSignalAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_irrFrequency) && !m_irrFrequency.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_destinationInfo, m_destinationInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_destExtraCallInfo, m_destExtraCallInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_destinationType, m_destinationType)) return FALSE; if (!KnownExtensionDecode(strm, e_remoteExtensionAddress, m_remoteExtensionAddress)) return FALSE; if (!KnownExtensionDecode(strm, e_alternateEndpoints, m_alternateEndpoints)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_transportQOS, m_transportQOS)) return FALSE; if (!KnownExtensionDecode(strm, e_willRespondToIRR, m_willRespondToIRR)) return FALSE; if (!KnownExtensionDecode(strm, e_uuiesRequested, m_uuiesRequested)) return FALSE; if (!KnownExtensionDecode(strm, e_language, m_language)) return FALSE; if (!KnownExtensionDecode(strm, e_alternateTransportAddresses, m_alternateTransportAddresses)) return FALSE; if (!KnownExtensionDecode(strm, e_useSpecifiedTransport, m_useSpecifiedTransport)) return FALSE; if (!KnownExtensionDecode(strm, e_circuitInfo, m_circuitInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_usageSpec, m_usageSpec)) return FALSE; if (!KnownExtensionDecode(strm, e_supportedProtocols, m_supportedProtocols)) return FALSE; if (!KnownExtensionDecode(strm, e_serviceControl, m_serviceControl)) return FALSE; if (!KnownExtensionDecode(strm, e_multipleCalls, m_multipleCalls)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; if (!KnownExtensionDecode(strm, e_modifiedSrcInfo, m_modifiedSrcInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_assignedGatekeeper, m_assignedGatekeeper)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_AdmissionConfirm::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); m_bandWidth.Encode(strm); m_callModel.Encode(strm); m_destCallSignalAddress.Encode(strm); if (HasOptionalField(e_irrFrequency)) m_irrFrequency.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_destinationInfo, m_destinationInfo); KnownExtensionEncode(strm, e_destExtraCallInfo, m_destExtraCallInfo); KnownExtensionEncode(strm, e_destinationType, m_destinationType); KnownExtensionEncode(strm, e_remoteExtensionAddress, m_remoteExtensionAddress); KnownExtensionEncode(strm, e_alternateEndpoints, m_alternateEndpoints); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_transportQOS, m_transportQOS); KnownExtensionEncode(strm, e_willRespondToIRR, m_willRespondToIRR); KnownExtensionEncode(strm, e_uuiesRequested, m_uuiesRequested); KnownExtensionEncode(strm, e_language, m_language); KnownExtensionEncode(strm, e_alternateTransportAddresses, m_alternateTransportAddresses); KnownExtensionEncode(strm, e_useSpecifiedTransport, m_useSpecifiedTransport); KnownExtensionEncode(strm, e_circuitInfo, m_circuitInfo); KnownExtensionEncode(strm, e_usageSpec, m_usageSpec); KnownExtensionEncode(strm, e_supportedProtocols, m_supportedProtocols); KnownExtensionEncode(strm, e_serviceControl, m_serviceControl); KnownExtensionEncode(strm, e_multipleCalls, m_multipleCalls); KnownExtensionEncode(strm, e_featureSet, m_featureSet); KnownExtensionEncode(strm, e_genericData, m_genericData); KnownExtensionEncode(strm, e_modifiedSrcInfo, m_modifiedSrcInfo); KnownExtensionEncode(strm, e_assignedGatekeeper, m_assignedGatekeeper); UnknownExtensionsEncode(strm); } PObject * H225_AdmissionConfirm::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_AdmissionConfirm::Class()), PInvalidCast); #endif return new H225_AdmissionConfirm(*this); } // // LocationRequest // H225_LocationRequest::H225_LocationRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 17) { IncludeOptionalField(e_canMapAlias); m_hopCount.SetConstraints(PASN_Object::FixedConstraint, 1, 255); IncludeOptionalField(e_canMapSrcAlias); } #ifndef PASN_NOPRINTON void H225_LocationRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; if (HasOptionalField(e_endpointIdentifier)) strm << setw(indent+21) << "endpointIdentifier = " << setprecision(indent) << m_endpointIdentifier << '\n'; strm << setw(indent+18) << "destinationInfo = " << setprecision(indent) << m_destinationInfo << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent+15) << "replyAddress = " << setprecision(indent) << m_replyAddress << '\n'; if (HasOptionalField(e_sourceInfo)) strm << setw(indent+13) << "sourceInfo = " << setprecision(indent) << m_sourceInfo << '\n'; if (HasOptionalField(e_canMapAlias)) strm << setw(indent+14) << "canMapAlias = " << setprecision(indent) << m_canMapAlias << '\n'; if (HasOptionalField(e_gatekeeperIdentifier)) strm << setw(indent+23) << "gatekeeperIdentifier = " << setprecision(indent) << m_gatekeeperIdentifier << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_desiredProtocols)) strm << setw(indent+19) << "desiredProtocols = " << setprecision(indent) << m_desiredProtocols << '\n'; if (HasOptionalField(e_desiredTunnelledProtocol)) strm << setw(indent+27) << "desiredTunnelledProtocol = " << setprecision(indent) << m_desiredTunnelledProtocol << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; if (HasOptionalField(e_hopCount)) strm << setw(indent+11) << "hopCount = " << setprecision(indent) << m_hopCount << '\n'; if (HasOptionalField(e_circuitInfo)) strm << setw(indent+14) << "circuitInfo = " << setprecision(indent) << m_circuitInfo << '\n'; if (HasOptionalField(e_callIdentifier)) strm << setw(indent+17) << "callIdentifier = " << setprecision(indent) << m_callIdentifier << '\n'; if (HasOptionalField(e_bandWidth)) strm << setw(indent+12) << "bandWidth = " << setprecision(indent) << m_bandWidth << '\n'; if (HasOptionalField(e_sourceEndpointInfo)) strm << setw(indent+21) << "sourceEndpointInfo = " << setprecision(indent) << m_sourceEndpointInfo << '\n'; if (HasOptionalField(e_canMapSrcAlias)) strm << setw(indent+17) << "canMapSrcAlias = " << setprecision(indent) << m_canMapSrcAlias << '\n'; if (HasOptionalField(e_language)) strm << setw(indent+11) << "language = " << setprecision(indent) << m_language << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_LocationRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_LocationRequest), PInvalidCast); #endif const H225_LocationRequest & other = (const H225_LocationRequest &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_endpointIdentifier.Compare(other.m_endpointIdentifier)) != EqualTo) return result; if ((result = m_destinationInfo.Compare(other.m_destinationInfo)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_replyAddress.Compare(other.m_replyAddress)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_LocationRequest::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); if (HasOptionalField(e_endpointIdentifier)) length += m_endpointIdentifier.GetObjectLength(); length += m_destinationInfo.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); length += m_replyAddress.GetObjectLength(); return length; } PBoolean H225_LocationRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (HasOptionalField(e_endpointIdentifier) && !m_endpointIdentifier.Decode(strm)) return FALSE; if (!m_destinationInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!m_replyAddress.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_sourceInfo, m_sourceInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_canMapAlias, m_canMapAlias)) return FALSE; if (!KnownExtensionDecode(strm, e_gatekeeperIdentifier, m_gatekeeperIdentifier)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_desiredProtocols, m_desiredProtocols)) return FALSE; if (!KnownExtensionDecode(strm, e_desiredTunnelledProtocol, m_desiredTunnelledProtocol)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; if (!KnownExtensionDecode(strm, e_hopCount, m_hopCount)) return FALSE; if (!KnownExtensionDecode(strm, e_circuitInfo, m_circuitInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_callIdentifier, m_callIdentifier)) return FALSE; if (!KnownExtensionDecode(strm, e_bandWidth, m_bandWidth)) return FALSE; if (!KnownExtensionDecode(strm, e_sourceEndpointInfo, m_sourceEndpointInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_canMapSrcAlias, m_canMapSrcAlias)) return FALSE; if (!KnownExtensionDecode(strm, e_language, m_language)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_LocationRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); if (HasOptionalField(e_endpointIdentifier)) m_endpointIdentifier.Encode(strm); m_destinationInfo.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); m_replyAddress.Encode(strm); KnownExtensionEncode(strm, e_sourceInfo, m_sourceInfo); KnownExtensionEncode(strm, e_canMapAlias, m_canMapAlias); KnownExtensionEncode(strm, e_gatekeeperIdentifier, m_gatekeeperIdentifier); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_desiredProtocols, m_desiredProtocols); KnownExtensionEncode(strm, e_desiredTunnelledProtocol, m_desiredTunnelledProtocol); KnownExtensionEncode(strm, e_featureSet, m_featureSet); KnownExtensionEncode(strm, e_genericData, m_genericData); KnownExtensionEncode(strm, e_hopCount, m_hopCount); KnownExtensionEncode(strm, e_circuitInfo, m_circuitInfo); KnownExtensionEncode(strm, e_callIdentifier, m_callIdentifier); KnownExtensionEncode(strm, e_bandWidth, m_bandWidth); KnownExtensionEncode(strm, e_sourceEndpointInfo, m_sourceEndpointInfo); KnownExtensionEncode(strm, e_canMapSrcAlias, m_canMapSrcAlias); KnownExtensionEncode(strm, e_language, m_language); UnknownExtensionsEncode(strm); } PObject * H225_LocationRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_LocationRequest::Class()), PInvalidCast); #endif return new H225_LocationRequest(*this); } // // LocationConfirm // H225_LocationConfirm::H225_LocationConfirm(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 17) { } #ifndef PASN_NOPRINTON void H225_LocationConfirm::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+20) << "callSignalAddress = " << setprecision(indent) << m_callSignalAddress << '\n'; strm << setw(indent+13) << "rasAddress = " << setprecision(indent) << m_rasAddress << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_destinationInfo)) strm << setw(indent+18) << "destinationInfo = " << setprecision(indent) << m_destinationInfo << '\n'; if (HasOptionalField(e_destExtraCallInfo)) strm << setw(indent+20) << "destExtraCallInfo = " << setprecision(indent) << m_destExtraCallInfo << '\n'; if (HasOptionalField(e_destinationType)) strm << setw(indent+18) << "destinationType = " << setprecision(indent) << m_destinationType << '\n'; if (HasOptionalField(e_remoteExtensionAddress)) strm << setw(indent+25) << "remoteExtensionAddress = " << setprecision(indent) << m_remoteExtensionAddress << '\n'; if (HasOptionalField(e_alternateEndpoints)) strm << setw(indent+21) << "alternateEndpoints = " << setprecision(indent) << m_alternateEndpoints << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_alternateTransportAddresses)) strm << setw(indent+30) << "alternateTransportAddresses = " << setprecision(indent) << m_alternateTransportAddresses << '\n'; if (HasOptionalField(e_supportedProtocols)) strm << setw(indent+21) << "supportedProtocols = " << setprecision(indent) << m_supportedProtocols << '\n'; if (HasOptionalField(e_multipleCalls)) strm << setw(indent+16) << "multipleCalls = " << setprecision(indent) << m_multipleCalls << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; if (HasOptionalField(e_circuitInfo)) strm << setw(indent+14) << "circuitInfo = " << setprecision(indent) << m_circuitInfo << '\n'; if (HasOptionalField(e_serviceControl)) strm << setw(indent+17) << "serviceControl = " << setprecision(indent) << m_serviceControl << '\n'; if (HasOptionalField(e_modifiedSrcInfo)) strm << setw(indent+18) << "modifiedSrcInfo = " << setprecision(indent) << m_modifiedSrcInfo << '\n'; if (HasOptionalField(e_bandWidth)) strm << setw(indent+12) << "bandWidth = " << setprecision(indent) << m_bandWidth << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_LocationConfirm::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_LocationConfirm), PInvalidCast); #endif const H225_LocationConfirm & other = (const H225_LocationConfirm &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_callSignalAddress.Compare(other.m_callSignalAddress)) != EqualTo) return result; if ((result = m_rasAddress.Compare(other.m_rasAddress)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_LocationConfirm::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); length += m_callSignalAddress.GetObjectLength(); length += m_rasAddress.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_LocationConfirm::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_callSignalAddress.Decode(strm)) return FALSE; if (!m_rasAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_destinationInfo, m_destinationInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_destExtraCallInfo, m_destExtraCallInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_destinationType, m_destinationType)) return FALSE; if (!KnownExtensionDecode(strm, e_remoteExtensionAddress, m_remoteExtensionAddress)) return FALSE; if (!KnownExtensionDecode(strm, e_alternateEndpoints, m_alternateEndpoints)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_alternateTransportAddresses, m_alternateTransportAddresses)) return FALSE; if (!KnownExtensionDecode(strm, e_supportedProtocols, m_supportedProtocols)) return FALSE; if (!KnownExtensionDecode(strm, e_multipleCalls, m_multipleCalls)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; if (!KnownExtensionDecode(strm, e_circuitInfo, m_circuitInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_serviceControl, m_serviceControl)) return FALSE; if (!KnownExtensionDecode(strm, e_modifiedSrcInfo, m_modifiedSrcInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_bandWidth, m_bandWidth)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_LocationConfirm::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); m_callSignalAddress.Encode(strm); m_rasAddress.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_destinationInfo, m_destinationInfo); KnownExtensionEncode(strm, e_destExtraCallInfo, m_destExtraCallInfo); KnownExtensionEncode(strm, e_destinationType, m_destinationType); KnownExtensionEncode(strm, e_remoteExtensionAddress, m_remoteExtensionAddress); KnownExtensionEncode(strm, e_alternateEndpoints, m_alternateEndpoints); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_alternateTransportAddresses, m_alternateTransportAddresses); KnownExtensionEncode(strm, e_supportedProtocols, m_supportedProtocols); KnownExtensionEncode(strm, e_multipleCalls, m_multipleCalls); KnownExtensionEncode(strm, e_featureSet, m_featureSet); KnownExtensionEncode(strm, e_genericData, m_genericData); KnownExtensionEncode(strm, e_circuitInfo, m_circuitInfo); KnownExtensionEncode(strm, e_serviceControl, m_serviceControl); KnownExtensionEncode(strm, e_modifiedSrcInfo, m_modifiedSrcInfo); KnownExtensionEncode(strm, e_bandWidth, m_bandWidth); UnknownExtensionsEncode(strm); } PObject * H225_LocationConfirm::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_LocationConfirm::Class()), PInvalidCast); #endif return new H225_LocationConfirm(*this); } // // DisengageRequest // H225_DisengageRequest::H225_DisengageRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 13) { IncludeOptionalField(e_callIdentifier); IncludeOptionalField(e_answeredCall); } #ifndef PASN_NOPRINTON void H225_DisengageRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+21) << "endpointIdentifier = " << setprecision(indent) << m_endpointIdentifier << '\n'; strm << setw(indent+15) << "conferenceID = " << setprecision(indent) << m_conferenceID << '\n'; strm << setw(indent+21) << "callReferenceValue = " << setprecision(indent) << m_callReferenceValue << '\n'; strm << setw(indent+18) << "disengageReason = " << setprecision(indent) << m_disengageReason << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_callIdentifier)) strm << setw(indent+17) << "callIdentifier = " << setprecision(indent) << m_callIdentifier << '\n'; if (HasOptionalField(e_gatekeeperIdentifier)) strm << setw(indent+23) << "gatekeeperIdentifier = " << setprecision(indent) << m_gatekeeperIdentifier << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_answeredCall)) strm << setw(indent+15) << "answeredCall = " << setprecision(indent) << m_answeredCall << '\n'; if (HasOptionalField(e_callLinkage)) strm << setw(indent+14) << "callLinkage = " << setprecision(indent) << m_callLinkage << '\n'; if (HasOptionalField(e_capacity)) strm << setw(indent+11) << "capacity = " << setprecision(indent) << m_capacity << '\n'; if (HasOptionalField(e_circuitInfo)) strm << setw(indent+14) << "circuitInfo = " << setprecision(indent) << m_circuitInfo << '\n'; if (HasOptionalField(e_usageInformation)) strm << setw(indent+19) << "usageInformation = " << setprecision(indent) << m_usageInformation << '\n'; if (HasOptionalField(e_terminationCause)) strm << setw(indent+19) << "terminationCause = " << setprecision(indent) << m_terminationCause << '\n'; if (HasOptionalField(e_serviceControl)) strm << setw(indent+17) << "serviceControl = " << setprecision(indent) << m_serviceControl << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_DisengageRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_DisengageRequest), PInvalidCast); #endif const H225_DisengageRequest & other = (const H225_DisengageRequest &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_endpointIdentifier.Compare(other.m_endpointIdentifier)) != EqualTo) return result; if ((result = m_conferenceID.Compare(other.m_conferenceID)) != EqualTo) return result; if ((result = m_callReferenceValue.Compare(other.m_callReferenceValue)) != EqualTo) return result; if ((result = m_disengageReason.Compare(other.m_disengageReason)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_DisengageRequest::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); length += m_endpointIdentifier.GetObjectLength(); length += m_conferenceID.GetObjectLength(); length += m_callReferenceValue.GetObjectLength(); length += m_disengageReason.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_DisengageRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_endpointIdentifier.Decode(strm)) return FALSE; if (!m_conferenceID.Decode(strm)) return FALSE; if (!m_callReferenceValue.Decode(strm)) return FALSE; if (!m_disengageReason.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_callIdentifier, m_callIdentifier)) return FALSE; if (!KnownExtensionDecode(strm, e_gatekeeperIdentifier, m_gatekeeperIdentifier)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_answeredCall, m_answeredCall)) return FALSE; if (!KnownExtensionDecode(strm, e_callLinkage, m_callLinkage)) return FALSE; if (!KnownExtensionDecode(strm, e_capacity, m_capacity)) return FALSE; if (!KnownExtensionDecode(strm, e_circuitInfo, m_circuitInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_usageInformation, m_usageInformation)) return FALSE; if (!KnownExtensionDecode(strm, e_terminationCause, m_terminationCause)) return FALSE; if (!KnownExtensionDecode(strm, e_serviceControl, m_serviceControl)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_DisengageRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); m_endpointIdentifier.Encode(strm); m_conferenceID.Encode(strm); m_callReferenceValue.Encode(strm); m_disengageReason.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_callIdentifier, m_callIdentifier); KnownExtensionEncode(strm, e_gatekeeperIdentifier, m_gatekeeperIdentifier); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_answeredCall, m_answeredCall); KnownExtensionEncode(strm, e_callLinkage, m_callLinkage); KnownExtensionEncode(strm, e_capacity, m_capacity); KnownExtensionEncode(strm, e_circuitInfo, m_circuitInfo); KnownExtensionEncode(strm, e_usageInformation, m_usageInformation); KnownExtensionEncode(strm, e_terminationCause, m_terminationCause); KnownExtensionEncode(strm, e_serviceControl, m_serviceControl); KnownExtensionEncode(strm, e_genericData, m_genericData); UnknownExtensionsEncode(strm); } PObject * H225_DisengageRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_DisengageRequest::Class()), PInvalidCast); #endif return new H225_DisengageRequest(*this); } // // DisengageConfirm // H225_DisengageConfirm::H225_DisengageConfirm(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 8) { } #ifndef PASN_NOPRINTON void H225_DisengageConfirm::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_capacity)) strm << setw(indent+11) << "capacity = " << setprecision(indent) << m_capacity << '\n'; if (HasOptionalField(e_circuitInfo)) strm << setw(indent+14) << "circuitInfo = " << setprecision(indent) << m_circuitInfo << '\n'; if (HasOptionalField(e_usageInformation)) strm << setw(indent+19) << "usageInformation = " << setprecision(indent) << m_usageInformation << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; if (HasOptionalField(e_assignedGatekeeper)) strm << setw(indent+21) << "assignedGatekeeper = " << setprecision(indent) << m_assignedGatekeeper << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_DisengageConfirm::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_DisengageConfirm), PInvalidCast); #endif const H225_DisengageConfirm & other = (const H225_DisengageConfirm &)obj; Comparison result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_DisengageConfirm::GetDataLength() const { PINDEX length = 0; length += m_requestSeqNum.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H225_DisengageConfirm::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_capacity, m_capacity)) return FALSE; if (!KnownExtensionDecode(strm, e_circuitInfo, m_circuitInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_usageInformation, m_usageInformation)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; if (!KnownExtensionDecode(strm, e_assignedGatekeeper, m_assignedGatekeeper)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_DisengageConfirm::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_requestSeqNum.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_capacity, m_capacity); KnownExtensionEncode(strm, e_circuitInfo, m_circuitInfo); KnownExtensionEncode(strm, e_usageInformation, m_usageInformation); KnownExtensionEncode(strm, e_genericData, m_genericData); KnownExtensionEncode(strm, e_assignedGatekeeper, m_assignedGatekeeper); UnknownExtensionsEncode(strm); } PObject * H225_DisengageConfirm::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_DisengageConfirm::Class()), PInvalidCast); #endif return new H225_DisengageConfirm(*this); } // // InfoRequestResponse // H225_InfoRequestResponse::H225_InfoRequestResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 8) { IncludeOptionalField(e_needResponse); IncludeOptionalField(e_unsolicited); } #ifndef PASN_NOPRINTON void H225_InfoRequestResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent+16) << "requestSeqNum = " << setprecision(indent) << m_requestSeqNum << '\n'; strm << setw(indent+15) << "endpointType = " << setprecision(indent) << m_endpointType << '\n'; strm << setw(indent+21) << "endpointIdentifier = " << setprecision(indent) << m_endpointIdentifier << '\n'; strm << setw(indent+13) << "rasAddress = " << setprecision(indent) << m_rasAddress << '\n'; strm << setw(indent+20) << "callSignalAddress = " << setprecision(indent) << m_callSignalAddress << '\n'; if (HasOptionalField(e_endpointAlias)) strm << setw(indent+16) << "endpointAlias = " << setprecision(indent) << m_endpointAlias << '\n'; if (HasOptionalField(e_perCallInfo)) strm << setw(indent+14) << "perCallInfo = " << setprecision(indent) << m_perCallInfo << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_needResponse)) strm << setw(indent+15) << "needResponse = " << setprecision(indent) << m_needResponse << '\n'; if (HasOptionalField(e_capacity)) strm << setw(indent+11) << "capacity = " << setprecision(indent) << m_capacity << '\n'; if (HasOptionalField(e_irrStatus)) strm << setw(indent+12) << "irrStatus = " << setprecision(indent) << m_irrStatus << '\n'; if (HasOptionalField(e_unsolicited)) strm << setw(indent+14) << "unsolicited = " << setprecision(indent) << m_unsolicited << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_InfoRequestResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_InfoRequestResponse), PInvalidCast); #endif const H225_InfoRequestResponse & other = (const H225_InfoRequestResponse &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_requestSeqNum.Compare(other.m_requestSeqNum)) != EqualTo) return result; if ((result = m_endpointType.Compare(other.m_endpointType)) != EqualTo) return result; if ((result = m_endpointIdentifier.Compare(other.m_endpointIdentifier)) != EqualTo) return result; if ((result = m_rasAddress.Compare(other.m_rasAddress)) != EqualTo) return result; if ((result = m_callSignalAddress.Compare(other.m_callSignalAddress)) != EqualTo) return result; if ((result = m_endpointAlias.Compare(other.m_endpointAlias)) != EqualTo) return result; if ((result = m_perCallInfo.Compare(other.m_perCallInfo)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_InfoRequestResponse::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); length += m_requestSeqNum.GetObjectLength(); length += m_endpointType.GetObjectLength(); length += m_endpointIdentifier.GetObjectLength(); length += m_rasAddress.GetObjectLength(); length += m_callSignalAddress.GetObjectLength(); if (HasOptionalField(e_endpointAlias)) length += m_endpointAlias.GetObjectLength(); if (HasOptionalField(e_perCallInfo)) length += m_perCallInfo.GetObjectLength(); return length; } PBoolean H225_InfoRequestResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!m_requestSeqNum.Decode(strm)) return FALSE; if (!m_endpointType.Decode(strm)) return FALSE; if (!m_endpointIdentifier.Decode(strm)) return FALSE; if (!m_rasAddress.Decode(strm)) return FALSE; if (!m_callSignalAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_endpointAlias) && !m_endpointAlias.Decode(strm)) return FALSE; if (HasOptionalField(e_perCallInfo) && !m_perCallInfo.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_integrityCheckValue, m_integrityCheckValue)) return FALSE; if (!KnownExtensionDecode(strm, e_needResponse, m_needResponse)) return FALSE; if (!KnownExtensionDecode(strm, e_capacity, m_capacity)) return FALSE; if (!KnownExtensionDecode(strm, e_irrStatus, m_irrStatus)) return FALSE; if (!KnownExtensionDecode(strm, e_unsolicited, m_unsolicited)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_InfoRequestResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); m_requestSeqNum.Encode(strm); m_endpointType.Encode(strm); m_endpointIdentifier.Encode(strm); m_rasAddress.Encode(strm); m_callSignalAddress.Encode(strm); if (HasOptionalField(e_endpointAlias)) m_endpointAlias.Encode(strm); if (HasOptionalField(e_perCallInfo)) m_perCallInfo.Encode(strm); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_integrityCheckValue, m_integrityCheckValue); KnownExtensionEncode(strm, e_needResponse, m_needResponse); KnownExtensionEncode(strm, e_capacity, m_capacity); KnownExtensionEncode(strm, e_irrStatus, m_irrStatus); KnownExtensionEncode(strm, e_unsolicited, m_unsolicited); KnownExtensionEncode(strm, e_genericData, m_genericData); UnknownExtensionsEncode(strm); } PObject * H225_InfoRequestResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_InfoRequestResponse::Class()), PInvalidCast); #endif return new H225_InfoRequestResponse(*this); } // // InfoRequestResponse_perCallInfo_subtype // H225_InfoRequestResponse_perCallInfo_subtype::H225_InfoRequestResponse_perCallInfo_subtype(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 5, TRUE, 8) { IncludeOptionalField(e_callIdentifier); IncludeOptionalField(e_substituteConfIDs); } #ifndef PASN_NOPRINTON void H225_InfoRequestResponse_perCallInfo_subtype::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent+21) << "callReferenceValue = " << setprecision(indent) << m_callReferenceValue << '\n'; strm << setw(indent+15) << "conferenceID = " << setprecision(indent) << m_conferenceID << '\n'; if (HasOptionalField(e_originator)) strm << setw(indent+13) << "originator = " << setprecision(indent) << m_originator << '\n'; if (HasOptionalField(e_audio)) strm << setw(indent+8) << "audio = " << setprecision(indent) << m_audio << '\n'; if (HasOptionalField(e_video)) strm << setw(indent+8) << "video = " << setprecision(indent) << m_video << '\n'; if (HasOptionalField(e_data)) strm << setw(indent+7) << "data = " << setprecision(indent) << m_data << '\n'; strm << setw(indent+7) << "h245 = " << setprecision(indent) << m_h245 << '\n'; strm << setw(indent+16) << "callSignaling = " << setprecision(indent) << m_callSignaling << '\n'; strm << setw(indent+11) << "callType = " << setprecision(indent) << m_callType << '\n'; strm << setw(indent+12) << "bandWidth = " << setprecision(indent) << m_bandWidth << '\n'; strm << setw(indent+12) << "callModel = " << setprecision(indent) << m_callModel << '\n'; if (HasOptionalField(e_callIdentifier)) strm << setw(indent+17) << "callIdentifier = " << setprecision(indent) << m_callIdentifier << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_substituteConfIDs)) strm << setw(indent+20) << "substituteConfIDs = " << setprecision(indent) << m_substituteConfIDs << '\n'; if (HasOptionalField(e_pdu)) strm << setw(indent+6) << "pdu = " << setprecision(indent) << m_pdu << '\n'; if (HasOptionalField(e_callLinkage)) strm << setw(indent+14) << "callLinkage = " << setprecision(indent) << m_callLinkage << '\n'; if (HasOptionalField(e_usageInformation)) strm << setw(indent+19) << "usageInformation = " << setprecision(indent) << m_usageInformation << '\n'; if (HasOptionalField(e_circuitInfo)) strm << setw(indent+14) << "circuitInfo = " << setprecision(indent) << m_circuitInfo << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_InfoRequestResponse_perCallInfo_subtype::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_InfoRequestResponse_perCallInfo_subtype), PInvalidCast); #endif const H225_InfoRequestResponse_perCallInfo_subtype & other = (const H225_InfoRequestResponse_perCallInfo_subtype &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_callReferenceValue.Compare(other.m_callReferenceValue)) != EqualTo) return result; if ((result = m_conferenceID.Compare(other.m_conferenceID)) != EqualTo) return result; if ((result = m_originator.Compare(other.m_originator)) != EqualTo) return result; if ((result = m_audio.Compare(other.m_audio)) != EqualTo) return result; if ((result = m_video.Compare(other.m_video)) != EqualTo) return result; if ((result = m_data.Compare(other.m_data)) != EqualTo) return result; if ((result = m_h245.Compare(other.m_h245)) != EqualTo) return result; if ((result = m_callSignaling.Compare(other.m_callSignaling)) != EqualTo) return result; if ((result = m_callType.Compare(other.m_callType)) != EqualTo) return result; if ((result = m_bandWidth.Compare(other.m_bandWidth)) != EqualTo) return result; if ((result = m_callModel.Compare(other.m_callModel)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_InfoRequestResponse_perCallInfo_subtype::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); length += m_callReferenceValue.GetObjectLength(); length += m_conferenceID.GetObjectLength(); if (HasOptionalField(e_originator)) length += m_originator.GetObjectLength(); if (HasOptionalField(e_audio)) length += m_audio.GetObjectLength(); if (HasOptionalField(e_video)) length += m_video.GetObjectLength(); if (HasOptionalField(e_data)) length += m_data.GetObjectLength(); length += m_h245.GetObjectLength(); length += m_callSignaling.GetObjectLength(); length += m_callType.GetObjectLength(); length += m_bandWidth.GetObjectLength(); length += m_callModel.GetObjectLength(); return length; } PBoolean H225_InfoRequestResponse_perCallInfo_subtype::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (!m_callReferenceValue.Decode(strm)) return FALSE; if (!m_conferenceID.Decode(strm)) return FALSE; if (HasOptionalField(e_originator) && !m_originator.Decode(strm)) return FALSE; if (HasOptionalField(e_audio) && !m_audio.Decode(strm)) return FALSE; if (HasOptionalField(e_video) && !m_video.Decode(strm)) return FALSE; if (HasOptionalField(e_data) && !m_data.Decode(strm)) return FALSE; if (!m_h245.Decode(strm)) return FALSE; if (!m_callSignaling.Decode(strm)) return FALSE; if (!m_callType.Decode(strm)) return FALSE; if (!m_bandWidth.Decode(strm)) return FALSE; if (!m_callModel.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_callIdentifier, m_callIdentifier)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_substituteConfIDs, m_substituteConfIDs)) return FALSE; if (!KnownExtensionDecode(strm, e_pdu, m_pdu)) return FALSE; if (!KnownExtensionDecode(strm, e_callLinkage, m_callLinkage)) return FALSE; if (!KnownExtensionDecode(strm, e_usageInformation, m_usageInformation)) return FALSE; if (!KnownExtensionDecode(strm, e_circuitInfo, m_circuitInfo)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_InfoRequestResponse_perCallInfo_subtype::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); m_callReferenceValue.Encode(strm); m_conferenceID.Encode(strm); if (HasOptionalField(e_originator)) m_originator.Encode(strm); if (HasOptionalField(e_audio)) m_audio.Encode(strm); if (HasOptionalField(e_video)) m_video.Encode(strm); if (HasOptionalField(e_data)) m_data.Encode(strm); m_h245.Encode(strm); m_callSignaling.Encode(strm); m_callType.Encode(strm); m_bandWidth.Encode(strm); m_callModel.Encode(strm); KnownExtensionEncode(strm, e_callIdentifier, m_callIdentifier); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_substituteConfIDs, m_substituteConfIDs); KnownExtensionEncode(strm, e_pdu, m_pdu); KnownExtensionEncode(strm, e_callLinkage, m_callLinkage); KnownExtensionEncode(strm, e_usageInformation, m_usageInformation); KnownExtensionEncode(strm, e_circuitInfo, m_circuitInfo); UnknownExtensionsEncode(strm); } PObject * H225_InfoRequestResponse_perCallInfo_subtype::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_InfoRequestResponse_perCallInfo_subtype::Class()), PInvalidCast); #endif return new H225_InfoRequestResponse_perCallInfo_subtype(*this); } // // InfoRequestResponse_perCallInfo_subtype_pdu_subtype // H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype::H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "h323pdu = " << setprecision(indent) << m_h323pdu << '\n'; strm << setw(indent+7) << "sent = " << setprecision(indent) << m_sent << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype), PInvalidCast); #endif const H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype & other = (const H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype &)obj; Comparison result; if ((result = m_h323pdu.Compare(other.m_h323pdu)) != EqualTo) return result; if ((result = m_sent.Compare(other.m_sent)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype::GetDataLength() const { PINDEX length = 0; length += m_h323pdu.GetObjectLength(); length += m_sent.GetObjectLength(); return length; } PBoolean H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_h323pdu.Decode(strm)) return FALSE; if (!m_sent.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_h323pdu.Encode(strm); m_sent.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype::Class()), PInvalidCast); #endif return new H225_InfoRequestResponse_perCallInfo_subtype_pdu_subtype(*this); } // // H323-UserInformation // H225_H323_UserInformation::H225_H323_UserInformation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H225_H323_UserInformation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "h323_uu_pdu = " << setprecision(indent) << m_h323_uu_pdu << '\n'; if (HasOptionalField(e_user_data)) strm << setw(indent+12) << "user_data = " << setprecision(indent) << m_user_data << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_H323_UserInformation::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_H323_UserInformation), PInvalidCast); #endif const H225_H323_UserInformation & other = (const H225_H323_UserInformation &)obj; Comparison result; if ((result = m_h323_uu_pdu.Compare(other.m_h323_uu_pdu)) != EqualTo) return result; if ((result = m_user_data.Compare(other.m_user_data)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_H323_UserInformation::GetDataLength() const { PINDEX length = 0; length += m_h323_uu_pdu.GetObjectLength(); if (HasOptionalField(e_user_data)) length += m_user_data.GetObjectLength(); return length; } PBoolean H225_H323_UserInformation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_h323_uu_pdu.Decode(strm)) return FALSE; if (HasOptionalField(e_user_data) && !m_user_data.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_H323_UserInformation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_h323_uu_pdu.Encode(strm); if (HasOptionalField(e_user_data)) m_user_data.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H225_H323_UserInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_H323_UserInformation::Class()), PInvalidCast); #endif return new H225_H323_UserInformation(*this); } // // Alerting-UUIE // H225_Alerting_UUIE::H225_Alerting_UUIE(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 14) { IncludeOptionalField(e_callIdentifier); IncludeOptionalField(e_multipleCalls); IncludeOptionalField(e_maintainConnection); } #ifndef PASN_NOPRINTON void H225_Alerting_UUIE::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "protocolIdentifier = " << setprecision(indent) << m_protocolIdentifier << '\n'; strm << setw(indent+18) << "destinationInfo = " << setprecision(indent) << m_destinationInfo << '\n'; if (HasOptionalField(e_h245Address)) strm << setw(indent+14) << "h245Address = " << setprecision(indent) << m_h245Address << '\n'; if (HasOptionalField(e_callIdentifier)) strm << setw(indent+17) << "callIdentifier = " << setprecision(indent) << m_callIdentifier << '\n'; if (HasOptionalField(e_h245SecurityMode)) strm << setw(indent+19) << "h245SecurityMode = " << setprecision(indent) << m_h245SecurityMode << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_fastStart)) strm << setw(indent+12) << "fastStart = " << setprecision(indent) << m_fastStart << '\n'; if (HasOptionalField(e_multipleCalls)) strm << setw(indent+16) << "multipleCalls = " << setprecision(indent) << m_multipleCalls << '\n'; if (HasOptionalField(e_maintainConnection)) strm << setw(indent+21) << "maintainConnection = " << setprecision(indent) << m_maintainConnection << '\n'; if (HasOptionalField(e_alertingAddress)) strm << setw(indent+18) << "alertingAddress = " << setprecision(indent) << m_alertingAddress << '\n'; if (HasOptionalField(e_presentationIndicator)) strm << setw(indent+24) << "presentationIndicator = " << setprecision(indent) << m_presentationIndicator << '\n'; if (HasOptionalField(e_screeningIndicator)) strm << setw(indent+21) << "screeningIndicator = " << setprecision(indent) << m_screeningIndicator << '\n'; if (HasOptionalField(e_fastConnectRefused)) strm << setw(indent+21) << "fastConnectRefused = " << setprecision(indent) << m_fastConnectRefused << '\n'; if (HasOptionalField(e_serviceControl)) strm << setw(indent+17) << "serviceControl = " << setprecision(indent) << m_serviceControl << '\n'; if (HasOptionalField(e_capacity)) strm << setw(indent+11) << "capacity = " << setprecision(indent) << m_capacity << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_Alerting_UUIE::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_Alerting_UUIE), PInvalidCast); #endif const H225_Alerting_UUIE & other = (const H225_Alerting_UUIE &)obj; Comparison result; if ((result = m_protocolIdentifier.Compare(other.m_protocolIdentifier)) != EqualTo) return result; if ((result = m_destinationInfo.Compare(other.m_destinationInfo)) != EqualTo) return result; if ((result = m_h245Address.Compare(other.m_h245Address)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_Alerting_UUIE::GetDataLength() const { PINDEX length = 0; length += m_protocolIdentifier.GetObjectLength(); length += m_destinationInfo.GetObjectLength(); if (HasOptionalField(e_h245Address)) length += m_h245Address.GetObjectLength(); return length; } PBoolean H225_Alerting_UUIE::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_protocolIdentifier.Decode(strm)) return FALSE; if (!m_destinationInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_h245Address) && !m_h245Address.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_callIdentifier, m_callIdentifier)) return FALSE; if (!KnownExtensionDecode(strm, e_h245SecurityMode, m_h245SecurityMode)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_fastStart, m_fastStart)) return FALSE; if (!KnownExtensionDecode(strm, e_multipleCalls, m_multipleCalls)) return FALSE; if (!KnownExtensionDecode(strm, e_maintainConnection, m_maintainConnection)) return FALSE; if (!KnownExtensionDecode(strm, e_alertingAddress, m_alertingAddress)) return FALSE; if (!KnownExtensionDecode(strm, e_presentationIndicator, m_presentationIndicator)) return FALSE; if (!KnownExtensionDecode(strm, e_screeningIndicator, m_screeningIndicator)) return FALSE; if (!KnownExtensionDecode(strm, e_fastConnectRefused, m_fastConnectRefused)) return FALSE; if (!KnownExtensionDecode(strm, e_serviceControl, m_serviceControl)) return FALSE; if (!KnownExtensionDecode(strm, e_capacity, m_capacity)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_Alerting_UUIE::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_protocolIdentifier.Encode(strm); m_destinationInfo.Encode(strm); if (HasOptionalField(e_h245Address)) m_h245Address.Encode(strm); KnownExtensionEncode(strm, e_callIdentifier, m_callIdentifier); KnownExtensionEncode(strm, e_h245SecurityMode, m_h245SecurityMode); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_fastStart, m_fastStart); KnownExtensionEncode(strm, e_multipleCalls, m_multipleCalls); KnownExtensionEncode(strm, e_maintainConnection, m_maintainConnection); KnownExtensionEncode(strm, e_alertingAddress, m_alertingAddress); KnownExtensionEncode(strm, e_presentationIndicator, m_presentationIndicator); KnownExtensionEncode(strm, e_screeningIndicator, m_screeningIndicator); KnownExtensionEncode(strm, e_fastConnectRefused, m_fastConnectRefused); KnownExtensionEncode(strm, e_serviceControl, m_serviceControl); KnownExtensionEncode(strm, e_capacity, m_capacity); KnownExtensionEncode(strm, e_featureSet, m_featureSet); UnknownExtensionsEncode(strm); } PObject * H225_Alerting_UUIE::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_Alerting_UUIE::Class()), PInvalidCast); #endif return new H225_Alerting_UUIE(*this); } // // CallProceeding-UUIE // H225_CallProceeding_UUIE::H225_CallProceeding_UUIE(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 9) { IncludeOptionalField(e_callIdentifier); IncludeOptionalField(e_multipleCalls); IncludeOptionalField(e_maintainConnection); } #ifndef PASN_NOPRINTON void H225_CallProceeding_UUIE::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "protocolIdentifier = " << setprecision(indent) << m_protocolIdentifier << '\n'; strm << setw(indent+18) << "destinationInfo = " << setprecision(indent) << m_destinationInfo << '\n'; if (HasOptionalField(e_h245Address)) strm << setw(indent+14) << "h245Address = " << setprecision(indent) << m_h245Address << '\n'; if (HasOptionalField(e_callIdentifier)) strm << setw(indent+17) << "callIdentifier = " << setprecision(indent) << m_callIdentifier << '\n'; if (HasOptionalField(e_h245SecurityMode)) strm << setw(indent+19) << "h245SecurityMode = " << setprecision(indent) << m_h245SecurityMode << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_fastStart)) strm << setw(indent+12) << "fastStart = " << setprecision(indent) << m_fastStart << '\n'; if (HasOptionalField(e_multipleCalls)) strm << setw(indent+16) << "multipleCalls = " << setprecision(indent) << m_multipleCalls << '\n'; if (HasOptionalField(e_maintainConnection)) strm << setw(indent+21) << "maintainConnection = " << setprecision(indent) << m_maintainConnection << '\n'; if (HasOptionalField(e_fastConnectRefused)) strm << setw(indent+21) << "fastConnectRefused = " << setprecision(indent) << m_fastConnectRefused << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_CallProceeding_UUIE::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_CallProceeding_UUIE), PInvalidCast); #endif const H225_CallProceeding_UUIE & other = (const H225_CallProceeding_UUIE &)obj; Comparison result; if ((result = m_protocolIdentifier.Compare(other.m_protocolIdentifier)) != EqualTo) return result; if ((result = m_destinationInfo.Compare(other.m_destinationInfo)) != EqualTo) return result; if ((result = m_h245Address.Compare(other.m_h245Address)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_CallProceeding_UUIE::GetDataLength() const { PINDEX length = 0; length += m_protocolIdentifier.GetObjectLength(); length += m_destinationInfo.GetObjectLength(); if (HasOptionalField(e_h245Address)) length += m_h245Address.GetObjectLength(); return length; } PBoolean H225_CallProceeding_UUIE::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_protocolIdentifier.Decode(strm)) return FALSE; if (!m_destinationInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_h245Address) && !m_h245Address.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_callIdentifier, m_callIdentifier)) return FALSE; if (!KnownExtensionDecode(strm, e_h245SecurityMode, m_h245SecurityMode)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_fastStart, m_fastStart)) return FALSE; if (!KnownExtensionDecode(strm, e_multipleCalls, m_multipleCalls)) return FALSE; if (!KnownExtensionDecode(strm, e_maintainConnection, m_maintainConnection)) return FALSE; if (!KnownExtensionDecode(strm, e_fastConnectRefused, m_fastConnectRefused)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_CallProceeding_UUIE::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_protocolIdentifier.Encode(strm); m_destinationInfo.Encode(strm); if (HasOptionalField(e_h245Address)) m_h245Address.Encode(strm); KnownExtensionEncode(strm, e_callIdentifier, m_callIdentifier); KnownExtensionEncode(strm, e_h245SecurityMode, m_h245SecurityMode); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_fastStart, m_fastStart); KnownExtensionEncode(strm, e_multipleCalls, m_multipleCalls); KnownExtensionEncode(strm, e_maintainConnection, m_maintainConnection); KnownExtensionEncode(strm, e_fastConnectRefused, m_fastConnectRefused); KnownExtensionEncode(strm, e_featureSet, m_featureSet); UnknownExtensionsEncode(strm); } PObject * H225_CallProceeding_UUIE::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_CallProceeding_UUIE::Class()), PInvalidCast); #endif return new H225_CallProceeding_UUIE(*this); } // // Connect-UUIE // H225_Connect_UUIE::H225_Connect_UUIE(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 15) { IncludeOptionalField(e_callIdentifier); IncludeOptionalField(e_multipleCalls); IncludeOptionalField(e_maintainConnection); } #ifndef PASN_NOPRINTON void H225_Connect_UUIE::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "protocolIdentifier = " << setprecision(indent) << m_protocolIdentifier << '\n'; if (HasOptionalField(e_h245Address)) strm << setw(indent+14) << "h245Address = " << setprecision(indent) << m_h245Address << '\n'; strm << setw(indent+18) << "destinationInfo = " << setprecision(indent) << m_destinationInfo << '\n'; strm << setw(indent+15) << "conferenceID = " << setprecision(indent) << m_conferenceID << '\n'; if (HasOptionalField(e_callIdentifier)) strm << setw(indent+17) << "callIdentifier = " << setprecision(indent) << m_callIdentifier << '\n'; if (HasOptionalField(e_h245SecurityMode)) strm << setw(indent+19) << "h245SecurityMode = " << setprecision(indent) << m_h245SecurityMode << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_fastStart)) strm << setw(indent+12) << "fastStart = " << setprecision(indent) << m_fastStart << '\n'; if (HasOptionalField(e_multipleCalls)) strm << setw(indent+16) << "multipleCalls = " << setprecision(indent) << m_multipleCalls << '\n'; if (HasOptionalField(e_maintainConnection)) strm << setw(indent+21) << "maintainConnection = " << setprecision(indent) << m_maintainConnection << '\n'; if (HasOptionalField(e_language)) strm << setw(indent+11) << "language = " << setprecision(indent) << m_language << '\n'; if (HasOptionalField(e_connectedAddress)) strm << setw(indent+19) << "connectedAddress = " << setprecision(indent) << m_connectedAddress << '\n'; if (HasOptionalField(e_presentationIndicator)) strm << setw(indent+24) << "presentationIndicator = " << setprecision(indent) << m_presentationIndicator << '\n'; if (HasOptionalField(e_screeningIndicator)) strm << setw(indent+21) << "screeningIndicator = " << setprecision(indent) << m_screeningIndicator << '\n'; if (HasOptionalField(e_fastConnectRefused)) strm << setw(indent+21) << "fastConnectRefused = " << setprecision(indent) << m_fastConnectRefused << '\n'; if (HasOptionalField(e_serviceControl)) strm << setw(indent+17) << "serviceControl = " << setprecision(indent) << m_serviceControl << '\n'; if (HasOptionalField(e_capacity)) strm << setw(indent+11) << "capacity = " << setprecision(indent) << m_capacity << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_Connect_UUIE::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_Connect_UUIE), PInvalidCast); #endif const H225_Connect_UUIE & other = (const H225_Connect_UUIE &)obj; Comparison result; if ((result = m_protocolIdentifier.Compare(other.m_protocolIdentifier)) != EqualTo) return result; if ((result = m_h245Address.Compare(other.m_h245Address)) != EqualTo) return result; if ((result = m_destinationInfo.Compare(other.m_destinationInfo)) != EqualTo) return result; if ((result = m_conferenceID.Compare(other.m_conferenceID)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_Connect_UUIE::GetDataLength() const { PINDEX length = 0; length += m_protocolIdentifier.GetObjectLength(); if (HasOptionalField(e_h245Address)) length += m_h245Address.GetObjectLength(); length += m_destinationInfo.GetObjectLength(); length += m_conferenceID.GetObjectLength(); return length; } PBoolean H225_Connect_UUIE::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_protocolIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_h245Address) && !m_h245Address.Decode(strm)) return FALSE; if (!m_destinationInfo.Decode(strm)) return FALSE; if (!m_conferenceID.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_callIdentifier, m_callIdentifier)) return FALSE; if (!KnownExtensionDecode(strm, e_h245SecurityMode, m_h245SecurityMode)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_fastStart, m_fastStart)) return FALSE; if (!KnownExtensionDecode(strm, e_multipleCalls, m_multipleCalls)) return FALSE; if (!KnownExtensionDecode(strm, e_maintainConnection, m_maintainConnection)) return FALSE; if (!KnownExtensionDecode(strm, e_language, m_language)) return FALSE; if (!KnownExtensionDecode(strm, e_connectedAddress, m_connectedAddress)) return FALSE; if (!KnownExtensionDecode(strm, e_presentationIndicator, m_presentationIndicator)) return FALSE; if (!KnownExtensionDecode(strm, e_screeningIndicator, m_screeningIndicator)) return FALSE; if (!KnownExtensionDecode(strm, e_fastConnectRefused, m_fastConnectRefused)) return FALSE; if (!KnownExtensionDecode(strm, e_serviceControl, m_serviceControl)) return FALSE; if (!KnownExtensionDecode(strm, e_capacity, m_capacity)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_Connect_UUIE::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_protocolIdentifier.Encode(strm); if (HasOptionalField(e_h245Address)) m_h245Address.Encode(strm); m_destinationInfo.Encode(strm); m_conferenceID.Encode(strm); KnownExtensionEncode(strm, e_callIdentifier, m_callIdentifier); KnownExtensionEncode(strm, e_h245SecurityMode, m_h245SecurityMode); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_fastStart, m_fastStart); KnownExtensionEncode(strm, e_multipleCalls, m_multipleCalls); KnownExtensionEncode(strm, e_maintainConnection, m_maintainConnection); KnownExtensionEncode(strm, e_language, m_language); KnownExtensionEncode(strm, e_connectedAddress, m_connectedAddress); KnownExtensionEncode(strm, e_presentationIndicator, m_presentationIndicator); KnownExtensionEncode(strm, e_screeningIndicator, m_screeningIndicator); KnownExtensionEncode(strm, e_fastConnectRefused, m_fastConnectRefused); KnownExtensionEncode(strm, e_serviceControl, m_serviceControl); KnownExtensionEncode(strm, e_capacity, m_capacity); KnownExtensionEncode(strm, e_featureSet, m_featureSet); UnknownExtensionsEncode(strm); } PObject * H225_Connect_UUIE::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_Connect_UUIE::Class()), PInvalidCast); #endif return new H225_Connect_UUIE(*this); } // // Information-UUIE // H225_Information_UUIE::H225_Information_UUIE(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 6) { IncludeOptionalField(e_callIdentifier); } #ifndef PASN_NOPRINTON void H225_Information_UUIE::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "protocolIdentifier = " << setprecision(indent) << m_protocolIdentifier << '\n'; if (HasOptionalField(e_callIdentifier)) strm << setw(indent+17) << "callIdentifier = " << setprecision(indent) << m_callIdentifier << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_fastStart)) strm << setw(indent+12) << "fastStart = " << setprecision(indent) << m_fastStart << '\n'; if (HasOptionalField(e_fastConnectRefused)) strm << setw(indent+21) << "fastConnectRefused = " << setprecision(indent) << m_fastConnectRefused << '\n'; if (HasOptionalField(e_circuitInfo)) strm << setw(indent+14) << "circuitInfo = " << setprecision(indent) << m_circuitInfo << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_Information_UUIE::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_Information_UUIE), PInvalidCast); #endif const H225_Information_UUIE & other = (const H225_Information_UUIE &)obj; Comparison result; if ((result = m_protocolIdentifier.Compare(other.m_protocolIdentifier)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_Information_UUIE::GetDataLength() const { PINDEX length = 0; length += m_protocolIdentifier.GetObjectLength(); return length; } PBoolean H225_Information_UUIE::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_protocolIdentifier.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_callIdentifier, m_callIdentifier)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_fastStart, m_fastStart)) return FALSE; if (!KnownExtensionDecode(strm, e_fastConnectRefused, m_fastConnectRefused)) return FALSE; if (!KnownExtensionDecode(strm, e_circuitInfo, m_circuitInfo)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_Information_UUIE::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_protocolIdentifier.Encode(strm); KnownExtensionEncode(strm, e_callIdentifier, m_callIdentifier); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_fastStart, m_fastStart); KnownExtensionEncode(strm, e_fastConnectRefused, m_fastConnectRefused); KnownExtensionEncode(strm, e_circuitInfo, m_circuitInfo); UnknownExtensionsEncode(strm); } PObject * H225_Information_UUIE::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_Information_UUIE::Class()), PInvalidCast); #endif return new H225_Information_UUIE(*this); } // // Setup-UUIE // H225_Setup_UUIE::H225_Setup_UUIE(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 7, TRUE, 27) { IncludeOptionalField(e_callIdentifier); IncludeOptionalField(e_mediaWaitForConnect); IncludeOptionalField(e_canOverlapSend); IncludeOptionalField(e_multipleCalls); IncludeOptionalField(e_maintainConnection); m_hopCount.SetConstraints(PASN_Object::FixedConstraint, 1, 31); } #ifndef PASN_NOPRINTON void H225_Setup_UUIE::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "protocolIdentifier = " << setprecision(indent) << m_protocolIdentifier << '\n'; if (HasOptionalField(e_h245Address)) strm << setw(indent+14) << "h245Address = " << setprecision(indent) << m_h245Address << '\n'; if (HasOptionalField(e_sourceAddress)) strm << setw(indent+16) << "sourceAddress = " << setprecision(indent) << m_sourceAddress << '\n'; strm << setw(indent+13) << "sourceInfo = " << setprecision(indent) << m_sourceInfo << '\n'; if (HasOptionalField(e_destinationAddress)) strm << setw(indent+21) << "destinationAddress = " << setprecision(indent) << m_destinationAddress << '\n'; if (HasOptionalField(e_destCallSignalAddress)) strm << setw(indent+24) << "destCallSignalAddress = " << setprecision(indent) << m_destCallSignalAddress << '\n'; if (HasOptionalField(e_destExtraCallInfo)) strm << setw(indent+20) << "destExtraCallInfo = " << setprecision(indent) << m_destExtraCallInfo << '\n'; if (HasOptionalField(e_destExtraCRV)) strm << setw(indent+15) << "destExtraCRV = " << setprecision(indent) << m_destExtraCRV << '\n'; strm << setw(indent+11) << "activeMC = " << setprecision(indent) << m_activeMC << '\n'; strm << setw(indent+15) << "conferenceID = " << setprecision(indent) << m_conferenceID << '\n'; strm << setw(indent+17) << "conferenceGoal = " << setprecision(indent) << m_conferenceGoal << '\n'; if (HasOptionalField(e_callServices)) strm << setw(indent+15) << "callServices = " << setprecision(indent) << m_callServices << '\n'; strm << setw(indent+11) << "callType = " << setprecision(indent) << m_callType << '\n'; if (HasOptionalField(e_sourceCallSignalAddress)) strm << setw(indent+26) << "sourceCallSignalAddress = " << setprecision(indent) << m_sourceCallSignalAddress << '\n'; if (HasOptionalField(e_remoteExtensionAddress)) strm << setw(indent+25) << "remoteExtensionAddress = " << setprecision(indent) << m_remoteExtensionAddress << '\n'; if (HasOptionalField(e_callIdentifier)) strm << setw(indent+17) << "callIdentifier = " << setprecision(indent) << m_callIdentifier << '\n'; if (HasOptionalField(e_h245SecurityCapability)) strm << setw(indent+25) << "h245SecurityCapability = " << setprecision(indent) << m_h245SecurityCapability << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_fastStart)) strm << setw(indent+12) << "fastStart = " << setprecision(indent) << m_fastStart << '\n'; if (HasOptionalField(e_mediaWaitForConnect)) strm << setw(indent+22) << "mediaWaitForConnect = " << setprecision(indent) << m_mediaWaitForConnect << '\n'; if (HasOptionalField(e_canOverlapSend)) strm << setw(indent+17) << "canOverlapSend = " << setprecision(indent) << m_canOverlapSend << '\n'; if (HasOptionalField(e_endpointIdentifier)) strm << setw(indent+21) << "endpointIdentifier = " << setprecision(indent) << m_endpointIdentifier << '\n'; if (HasOptionalField(e_multipleCalls)) strm << setw(indent+16) << "multipleCalls = " << setprecision(indent) << m_multipleCalls << '\n'; if (HasOptionalField(e_maintainConnection)) strm << setw(indent+21) << "maintainConnection = " << setprecision(indent) << m_maintainConnection << '\n'; if (HasOptionalField(e_connectionParameters)) strm << setw(indent+23) << "connectionParameters = " << setprecision(indent) << m_connectionParameters << '\n'; if (HasOptionalField(e_language)) strm << setw(indent+11) << "language = " << setprecision(indent) << m_language << '\n'; if (HasOptionalField(e_presentationIndicator)) strm << setw(indent+24) << "presentationIndicator = " << setprecision(indent) << m_presentationIndicator << '\n'; if (HasOptionalField(e_screeningIndicator)) strm << setw(indent+21) << "screeningIndicator = " << setprecision(indent) << m_screeningIndicator << '\n'; if (HasOptionalField(e_serviceControl)) strm << setw(indent+17) << "serviceControl = " << setprecision(indent) << m_serviceControl << '\n'; if (HasOptionalField(e_symmetricOperationRequired)) strm << setw(indent+29) << "symmetricOperationRequired = " << setprecision(indent) << m_symmetricOperationRequired << '\n'; if (HasOptionalField(e_capacity)) strm << setw(indent+11) << "capacity = " << setprecision(indent) << m_capacity << '\n'; if (HasOptionalField(e_circuitInfo)) strm << setw(indent+14) << "circuitInfo = " << setprecision(indent) << m_circuitInfo << '\n'; if (HasOptionalField(e_desiredProtocols)) strm << setw(indent+19) << "desiredProtocols = " << setprecision(indent) << m_desiredProtocols << '\n'; if (HasOptionalField(e_neededFeatures)) strm << setw(indent+17) << "neededFeatures = " << setprecision(indent) << m_neededFeatures << '\n'; if (HasOptionalField(e_desiredFeatures)) strm << setw(indent+18) << "desiredFeatures = " << setprecision(indent) << m_desiredFeatures << '\n'; if (HasOptionalField(e_supportedFeatures)) strm << setw(indent+20) << "supportedFeatures = " << setprecision(indent) << m_supportedFeatures << '\n'; if (HasOptionalField(e_parallelH245Control)) strm << setw(indent+22) << "parallelH245Control = " << setprecision(indent) << m_parallelH245Control << '\n'; if (HasOptionalField(e_additionalSourceAddresses)) strm << setw(indent+28) << "additionalSourceAddresses = " << setprecision(indent) << m_additionalSourceAddresses << '\n'; if (HasOptionalField(e_hopCount)) strm << setw(indent+11) << "hopCount = " << setprecision(indent) << m_hopCount << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_Setup_UUIE::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_Setup_UUIE), PInvalidCast); #endif const H225_Setup_UUIE & other = (const H225_Setup_UUIE &)obj; Comparison result; if ((result = m_protocolIdentifier.Compare(other.m_protocolIdentifier)) != EqualTo) return result; if ((result = m_h245Address.Compare(other.m_h245Address)) != EqualTo) return result; if ((result = m_sourceAddress.Compare(other.m_sourceAddress)) != EqualTo) return result; if ((result = m_sourceInfo.Compare(other.m_sourceInfo)) != EqualTo) return result; if ((result = m_destinationAddress.Compare(other.m_destinationAddress)) != EqualTo) return result; if ((result = m_destCallSignalAddress.Compare(other.m_destCallSignalAddress)) != EqualTo) return result; if ((result = m_destExtraCallInfo.Compare(other.m_destExtraCallInfo)) != EqualTo) return result; if ((result = m_destExtraCRV.Compare(other.m_destExtraCRV)) != EqualTo) return result; if ((result = m_activeMC.Compare(other.m_activeMC)) != EqualTo) return result; if ((result = m_conferenceID.Compare(other.m_conferenceID)) != EqualTo) return result; if ((result = m_conferenceGoal.Compare(other.m_conferenceGoal)) != EqualTo) return result; if ((result = m_callServices.Compare(other.m_callServices)) != EqualTo) return result; if ((result = m_callType.Compare(other.m_callType)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_Setup_UUIE::GetDataLength() const { PINDEX length = 0; length += m_protocolIdentifier.GetObjectLength(); if (HasOptionalField(e_h245Address)) length += m_h245Address.GetObjectLength(); if (HasOptionalField(e_sourceAddress)) length += m_sourceAddress.GetObjectLength(); length += m_sourceInfo.GetObjectLength(); if (HasOptionalField(e_destinationAddress)) length += m_destinationAddress.GetObjectLength(); if (HasOptionalField(e_destCallSignalAddress)) length += m_destCallSignalAddress.GetObjectLength(); if (HasOptionalField(e_destExtraCallInfo)) length += m_destExtraCallInfo.GetObjectLength(); if (HasOptionalField(e_destExtraCRV)) length += m_destExtraCRV.GetObjectLength(); length += m_activeMC.GetObjectLength(); length += m_conferenceID.GetObjectLength(); length += m_conferenceGoal.GetObjectLength(); if (HasOptionalField(e_callServices)) length += m_callServices.GetObjectLength(); length += m_callType.GetObjectLength(); return length; } PBoolean H225_Setup_UUIE::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_protocolIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_h245Address) && !m_h245Address.Decode(strm)) return FALSE; if (HasOptionalField(e_sourceAddress) && !m_sourceAddress.Decode(strm)) return FALSE; if (!m_sourceInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_destinationAddress) && !m_destinationAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_destCallSignalAddress) && !m_destCallSignalAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_destExtraCallInfo) && !m_destExtraCallInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_destExtraCRV) && !m_destExtraCRV.Decode(strm)) return FALSE; if (!m_activeMC.Decode(strm)) return FALSE; if (!m_conferenceID.Decode(strm)) return FALSE; if (!m_conferenceGoal.Decode(strm)) return FALSE; if (HasOptionalField(e_callServices) && !m_callServices.Decode(strm)) return FALSE; if (!m_callType.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_sourceCallSignalAddress, m_sourceCallSignalAddress)) return FALSE; if (!KnownExtensionDecode(strm, e_remoteExtensionAddress, m_remoteExtensionAddress)) return FALSE; if (!KnownExtensionDecode(strm, e_callIdentifier, m_callIdentifier)) return FALSE; if (!KnownExtensionDecode(strm, e_h245SecurityCapability, m_h245SecurityCapability)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_fastStart, m_fastStart)) return FALSE; if (!KnownExtensionDecode(strm, e_mediaWaitForConnect, m_mediaWaitForConnect)) return FALSE; if (!KnownExtensionDecode(strm, e_canOverlapSend, m_canOverlapSend)) return FALSE; if (!KnownExtensionDecode(strm, e_endpointIdentifier, m_endpointIdentifier)) return FALSE; if (!KnownExtensionDecode(strm, e_multipleCalls, m_multipleCalls)) return FALSE; if (!KnownExtensionDecode(strm, e_maintainConnection, m_maintainConnection)) return FALSE; if (!KnownExtensionDecode(strm, e_connectionParameters, m_connectionParameters)) return FALSE; if (!KnownExtensionDecode(strm, e_language, m_language)) return FALSE; if (!KnownExtensionDecode(strm, e_presentationIndicator, m_presentationIndicator)) return FALSE; if (!KnownExtensionDecode(strm, e_screeningIndicator, m_screeningIndicator)) return FALSE; if (!KnownExtensionDecode(strm, e_serviceControl, m_serviceControl)) return FALSE; if (!KnownExtensionDecode(strm, e_symmetricOperationRequired, m_symmetricOperationRequired)) return FALSE; if (!KnownExtensionDecode(strm, e_capacity, m_capacity)) return FALSE; if (!KnownExtensionDecode(strm, e_circuitInfo, m_circuitInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_desiredProtocols, m_desiredProtocols)) return FALSE; if (!KnownExtensionDecode(strm, e_neededFeatures, m_neededFeatures)) return FALSE; if (!KnownExtensionDecode(strm, e_desiredFeatures, m_desiredFeatures)) return FALSE; if (!KnownExtensionDecode(strm, e_supportedFeatures, m_supportedFeatures)) return FALSE; if (!KnownExtensionDecode(strm, e_parallelH245Control, m_parallelH245Control)) return FALSE; if (!KnownExtensionDecode(strm, e_additionalSourceAddresses, m_additionalSourceAddresses)) return FALSE; if (!KnownExtensionDecode(strm, e_hopCount, m_hopCount)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_Setup_UUIE::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_protocolIdentifier.Encode(strm); if (HasOptionalField(e_h245Address)) m_h245Address.Encode(strm); if (HasOptionalField(e_sourceAddress)) m_sourceAddress.Encode(strm); m_sourceInfo.Encode(strm); if (HasOptionalField(e_destinationAddress)) m_destinationAddress.Encode(strm); if (HasOptionalField(e_destCallSignalAddress)) m_destCallSignalAddress.Encode(strm); if (HasOptionalField(e_destExtraCallInfo)) m_destExtraCallInfo.Encode(strm); if (HasOptionalField(e_destExtraCRV)) m_destExtraCRV.Encode(strm); m_activeMC.Encode(strm); m_conferenceID.Encode(strm); m_conferenceGoal.Encode(strm); if (HasOptionalField(e_callServices)) m_callServices.Encode(strm); m_callType.Encode(strm); KnownExtensionEncode(strm, e_sourceCallSignalAddress, m_sourceCallSignalAddress); KnownExtensionEncode(strm, e_remoteExtensionAddress, m_remoteExtensionAddress); KnownExtensionEncode(strm, e_callIdentifier, m_callIdentifier); KnownExtensionEncode(strm, e_h245SecurityCapability, m_h245SecurityCapability); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_fastStart, m_fastStart); KnownExtensionEncode(strm, e_mediaWaitForConnect, m_mediaWaitForConnect); KnownExtensionEncode(strm, e_canOverlapSend, m_canOverlapSend); KnownExtensionEncode(strm, e_endpointIdentifier, m_endpointIdentifier); KnownExtensionEncode(strm, e_multipleCalls, m_multipleCalls); KnownExtensionEncode(strm, e_maintainConnection, m_maintainConnection); KnownExtensionEncode(strm, e_connectionParameters, m_connectionParameters); KnownExtensionEncode(strm, e_language, m_language); KnownExtensionEncode(strm, e_presentationIndicator, m_presentationIndicator); KnownExtensionEncode(strm, e_screeningIndicator, m_screeningIndicator); KnownExtensionEncode(strm, e_serviceControl, m_serviceControl); KnownExtensionEncode(strm, e_symmetricOperationRequired, m_symmetricOperationRequired); KnownExtensionEncode(strm, e_capacity, m_capacity); KnownExtensionEncode(strm, e_circuitInfo, m_circuitInfo); KnownExtensionEncode(strm, e_desiredProtocols, m_desiredProtocols); KnownExtensionEncode(strm, e_neededFeatures, m_neededFeatures); KnownExtensionEncode(strm, e_desiredFeatures, m_desiredFeatures); KnownExtensionEncode(strm, e_supportedFeatures, m_supportedFeatures); KnownExtensionEncode(strm, e_parallelH245Control, m_parallelH245Control); KnownExtensionEncode(strm, e_additionalSourceAddresses, m_additionalSourceAddresses); KnownExtensionEncode(strm, e_hopCount, m_hopCount); UnknownExtensionsEncode(strm); } PObject * H225_Setup_UUIE::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_Setup_UUIE::Class()), PInvalidCast); #endif return new H225_Setup_UUIE(*this); } // // Facility-UUIE // H225_Facility_UUIE::H225_Facility_UUIE(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 16) { IncludeOptionalField(e_callIdentifier); IncludeOptionalField(e_multipleCalls); IncludeOptionalField(e_maintainConnection); } #ifndef PASN_NOPRINTON void H225_Facility_UUIE::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "protocolIdentifier = " << setprecision(indent) << m_protocolIdentifier << '\n'; if (HasOptionalField(e_alternativeAddress)) strm << setw(indent+21) << "alternativeAddress = " << setprecision(indent) << m_alternativeAddress << '\n'; if (HasOptionalField(e_alternativeAliasAddress)) strm << setw(indent+26) << "alternativeAliasAddress = " << setprecision(indent) << m_alternativeAliasAddress << '\n'; if (HasOptionalField(e_conferenceID)) strm << setw(indent+15) << "conferenceID = " << setprecision(indent) << m_conferenceID << '\n'; strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; if (HasOptionalField(e_callIdentifier)) strm << setw(indent+17) << "callIdentifier = " << setprecision(indent) << m_callIdentifier << '\n'; if (HasOptionalField(e_destExtraCallInfo)) strm << setw(indent+20) << "destExtraCallInfo = " << setprecision(indent) << m_destExtraCallInfo << '\n'; if (HasOptionalField(e_remoteExtensionAddress)) strm << setw(indent+25) << "remoteExtensionAddress = " << setprecision(indent) << m_remoteExtensionAddress << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_conferences)) strm << setw(indent+14) << "conferences = " << setprecision(indent) << m_conferences << '\n'; if (HasOptionalField(e_h245Address)) strm << setw(indent+14) << "h245Address = " << setprecision(indent) << m_h245Address << '\n'; if (HasOptionalField(e_fastStart)) strm << setw(indent+12) << "fastStart = " << setprecision(indent) << m_fastStart << '\n'; if (HasOptionalField(e_multipleCalls)) strm << setw(indent+16) << "multipleCalls = " << setprecision(indent) << m_multipleCalls << '\n'; if (HasOptionalField(e_maintainConnection)) strm << setw(indent+21) << "maintainConnection = " << setprecision(indent) << m_maintainConnection << '\n'; if (HasOptionalField(e_fastConnectRefused)) strm << setw(indent+21) << "fastConnectRefused = " << setprecision(indent) << m_fastConnectRefused << '\n'; if (HasOptionalField(e_serviceControl)) strm << setw(indent+17) << "serviceControl = " << setprecision(indent) << m_serviceControl << '\n'; if (HasOptionalField(e_circuitInfo)) strm << setw(indent+14) << "circuitInfo = " << setprecision(indent) << m_circuitInfo << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; if (HasOptionalField(e_destinationInfo)) strm << setw(indent+18) << "destinationInfo = " << setprecision(indent) << m_destinationInfo << '\n'; if (HasOptionalField(e_h245SecurityMode)) strm << setw(indent+19) << "h245SecurityMode = " << setprecision(indent) << m_h245SecurityMode << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_Facility_UUIE::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_Facility_UUIE), PInvalidCast); #endif const H225_Facility_UUIE & other = (const H225_Facility_UUIE &)obj; Comparison result; if ((result = m_protocolIdentifier.Compare(other.m_protocolIdentifier)) != EqualTo) return result; if ((result = m_alternativeAddress.Compare(other.m_alternativeAddress)) != EqualTo) return result; if ((result = m_alternativeAliasAddress.Compare(other.m_alternativeAliasAddress)) != EqualTo) return result; if ((result = m_conferenceID.Compare(other.m_conferenceID)) != EqualTo) return result; if ((result = m_reason.Compare(other.m_reason)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_Facility_UUIE::GetDataLength() const { PINDEX length = 0; length += m_protocolIdentifier.GetObjectLength(); if (HasOptionalField(e_alternativeAddress)) length += m_alternativeAddress.GetObjectLength(); if (HasOptionalField(e_alternativeAliasAddress)) length += m_alternativeAliasAddress.GetObjectLength(); if (HasOptionalField(e_conferenceID)) length += m_conferenceID.GetObjectLength(); length += m_reason.GetObjectLength(); return length; } PBoolean H225_Facility_UUIE::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_protocolIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_alternativeAddress) && !m_alternativeAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_alternativeAliasAddress) && !m_alternativeAliasAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_conferenceID) && !m_conferenceID.Decode(strm)) return FALSE; if (!m_reason.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_callIdentifier, m_callIdentifier)) return FALSE; if (!KnownExtensionDecode(strm, e_destExtraCallInfo, m_destExtraCallInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_remoteExtensionAddress, m_remoteExtensionAddress)) return FALSE; if (!KnownExtensionDecode(strm, e_tokens, m_tokens)) return FALSE; if (!KnownExtensionDecode(strm, e_cryptoTokens, m_cryptoTokens)) return FALSE; if (!KnownExtensionDecode(strm, e_conferences, m_conferences)) return FALSE; if (!KnownExtensionDecode(strm, e_h245Address, m_h245Address)) return FALSE; if (!KnownExtensionDecode(strm, e_fastStart, m_fastStart)) return FALSE; if (!KnownExtensionDecode(strm, e_multipleCalls, m_multipleCalls)) return FALSE; if (!KnownExtensionDecode(strm, e_maintainConnection, m_maintainConnection)) return FALSE; if (!KnownExtensionDecode(strm, e_fastConnectRefused, m_fastConnectRefused)) return FALSE; if (!KnownExtensionDecode(strm, e_serviceControl, m_serviceControl)) return FALSE; if (!KnownExtensionDecode(strm, e_circuitInfo, m_circuitInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; if (!KnownExtensionDecode(strm, e_destinationInfo, m_destinationInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_h245SecurityMode, m_h245SecurityMode)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_Facility_UUIE::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_protocolIdentifier.Encode(strm); if (HasOptionalField(e_alternativeAddress)) m_alternativeAddress.Encode(strm); if (HasOptionalField(e_alternativeAliasAddress)) m_alternativeAliasAddress.Encode(strm); if (HasOptionalField(e_conferenceID)) m_conferenceID.Encode(strm); m_reason.Encode(strm); KnownExtensionEncode(strm, e_callIdentifier, m_callIdentifier); KnownExtensionEncode(strm, e_destExtraCallInfo, m_destExtraCallInfo); KnownExtensionEncode(strm, e_remoteExtensionAddress, m_remoteExtensionAddress); KnownExtensionEncode(strm, e_tokens, m_tokens); KnownExtensionEncode(strm, e_cryptoTokens, m_cryptoTokens); KnownExtensionEncode(strm, e_conferences, m_conferences); KnownExtensionEncode(strm, e_h245Address, m_h245Address); KnownExtensionEncode(strm, e_fastStart, m_fastStart); KnownExtensionEncode(strm, e_multipleCalls, m_multipleCalls); KnownExtensionEncode(strm, e_maintainConnection, m_maintainConnection); KnownExtensionEncode(strm, e_fastConnectRefused, m_fastConnectRefused); KnownExtensionEncode(strm, e_serviceControl, m_serviceControl); KnownExtensionEncode(strm, e_circuitInfo, m_circuitInfo); KnownExtensionEncode(strm, e_featureSet, m_featureSet); KnownExtensionEncode(strm, e_destinationInfo, m_destinationInfo); KnownExtensionEncode(strm, e_h245SecurityMode, m_h245SecurityMode); UnknownExtensionsEncode(strm); } PObject * H225_Facility_UUIE::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_Facility_UUIE::Class()), PInvalidCast); #endif return new H225_Facility_UUIE(*this); } // // Progress-UUIE // H225_Progress_UUIE::H225_Progress_UUIE(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 5, TRUE, 3) { IncludeOptionalField(e_multipleCalls); IncludeOptionalField(e_maintainConnection); } #ifndef PASN_NOPRINTON void H225_Progress_UUIE::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "protocolIdentifier = " << setprecision(indent) << m_protocolIdentifier << '\n'; strm << setw(indent+18) << "destinationInfo = " << setprecision(indent) << m_destinationInfo << '\n'; if (HasOptionalField(e_h245Address)) strm << setw(indent+14) << "h245Address = " << setprecision(indent) << m_h245Address << '\n'; strm << setw(indent+17) << "callIdentifier = " << setprecision(indent) << m_callIdentifier << '\n'; if (HasOptionalField(e_h245SecurityMode)) strm << setw(indent+19) << "h245SecurityMode = " << setprecision(indent) << m_h245SecurityMode << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_fastStart)) strm << setw(indent+12) << "fastStart = " << setprecision(indent) << m_fastStart << '\n'; if (HasOptionalField(e_multipleCalls)) strm << setw(indent+16) << "multipleCalls = " << setprecision(indent) << m_multipleCalls << '\n'; if (HasOptionalField(e_maintainConnection)) strm << setw(indent+21) << "maintainConnection = " << setprecision(indent) << m_maintainConnection << '\n'; if (HasOptionalField(e_fastConnectRefused)) strm << setw(indent+21) << "fastConnectRefused = " << setprecision(indent) << m_fastConnectRefused << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_Progress_UUIE::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_Progress_UUIE), PInvalidCast); #endif const H225_Progress_UUIE & other = (const H225_Progress_UUIE &)obj; Comparison result; if ((result = m_protocolIdentifier.Compare(other.m_protocolIdentifier)) != EqualTo) return result; if ((result = m_destinationInfo.Compare(other.m_destinationInfo)) != EqualTo) return result; if ((result = m_h245Address.Compare(other.m_h245Address)) != EqualTo) return result; if ((result = m_callIdentifier.Compare(other.m_callIdentifier)) != EqualTo) return result; if ((result = m_h245SecurityMode.Compare(other.m_h245SecurityMode)) != EqualTo) return result; if ((result = m_tokens.Compare(other.m_tokens)) != EqualTo) return result; if ((result = m_cryptoTokens.Compare(other.m_cryptoTokens)) != EqualTo) return result; if ((result = m_fastStart.Compare(other.m_fastStart)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_Progress_UUIE::GetDataLength() const { PINDEX length = 0; length += m_protocolIdentifier.GetObjectLength(); length += m_destinationInfo.GetObjectLength(); if (HasOptionalField(e_h245Address)) length += m_h245Address.GetObjectLength(); length += m_callIdentifier.GetObjectLength(); if (HasOptionalField(e_h245SecurityMode)) length += m_h245SecurityMode.GetObjectLength(); if (HasOptionalField(e_tokens)) length += m_tokens.GetObjectLength(); if (HasOptionalField(e_cryptoTokens)) length += m_cryptoTokens.GetObjectLength(); if (HasOptionalField(e_fastStart)) length += m_fastStart.GetObjectLength(); return length; } PBoolean H225_Progress_UUIE::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_protocolIdentifier.Decode(strm)) return FALSE; if (!m_destinationInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_h245Address) && !m_h245Address.Decode(strm)) return FALSE; if (!m_callIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_h245SecurityMode) && !m_h245SecurityMode.Decode(strm)) return FALSE; if (HasOptionalField(e_tokens) && !m_tokens.Decode(strm)) return FALSE; if (HasOptionalField(e_cryptoTokens) && !m_cryptoTokens.Decode(strm)) return FALSE; if (HasOptionalField(e_fastStart) && !m_fastStart.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_multipleCalls, m_multipleCalls)) return FALSE; if (!KnownExtensionDecode(strm, e_maintainConnection, m_maintainConnection)) return FALSE; if (!KnownExtensionDecode(strm, e_fastConnectRefused, m_fastConnectRefused)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_Progress_UUIE::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_protocolIdentifier.Encode(strm); m_destinationInfo.Encode(strm); if (HasOptionalField(e_h245Address)) m_h245Address.Encode(strm); m_callIdentifier.Encode(strm); if (HasOptionalField(e_h245SecurityMode)) m_h245SecurityMode.Encode(strm); if (HasOptionalField(e_tokens)) m_tokens.Encode(strm); if (HasOptionalField(e_cryptoTokens)) m_cryptoTokens.Encode(strm); if (HasOptionalField(e_fastStart)) m_fastStart.Encode(strm); KnownExtensionEncode(strm, e_multipleCalls, m_multipleCalls); KnownExtensionEncode(strm, e_maintainConnection, m_maintainConnection); KnownExtensionEncode(strm, e_fastConnectRefused, m_fastConnectRefused); UnknownExtensionsEncode(strm); } PObject * H225_Progress_UUIE::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_Progress_UUIE::Class()), PInvalidCast); #endif return new H225_Progress_UUIE(*this); } // // Endpoint // H225_Endpoint::H225_Endpoint(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 10, TRUE, 3) { m_priority.SetConstraints(PASN_Object::FixedConstraint, 0, 127); } #ifndef PASN_NOPRINTON void H225_Endpoint::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; if (HasOptionalField(e_aliasAddress)) strm << setw(indent+15) << "aliasAddress = " << setprecision(indent) << m_aliasAddress << '\n'; if (HasOptionalField(e_callSignalAddress)) strm << setw(indent+20) << "callSignalAddress = " << setprecision(indent) << m_callSignalAddress << '\n'; if (HasOptionalField(e_rasAddress)) strm << setw(indent+13) << "rasAddress = " << setprecision(indent) << m_rasAddress << '\n'; if (HasOptionalField(e_endpointType)) strm << setw(indent+15) << "endpointType = " << setprecision(indent) << m_endpointType << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_priority)) strm << setw(indent+11) << "priority = " << setprecision(indent) << m_priority << '\n'; if (HasOptionalField(e_remoteExtensionAddress)) strm << setw(indent+25) << "remoteExtensionAddress = " << setprecision(indent) << m_remoteExtensionAddress << '\n'; if (HasOptionalField(e_destExtraCallInfo)) strm << setw(indent+20) << "destExtraCallInfo = " << setprecision(indent) << m_destExtraCallInfo << '\n'; if (HasOptionalField(e_alternateTransportAddresses)) strm << setw(indent+30) << "alternateTransportAddresses = " << setprecision(indent) << m_alternateTransportAddresses << '\n'; if (HasOptionalField(e_circuitInfo)) strm << setw(indent+14) << "circuitInfo = " << setprecision(indent) << m_circuitInfo << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H225_Endpoint::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H225_Endpoint), PInvalidCast); #endif const H225_Endpoint & other = (const H225_Endpoint &)obj; Comparison result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; if ((result = m_aliasAddress.Compare(other.m_aliasAddress)) != EqualTo) return result; if ((result = m_callSignalAddress.Compare(other.m_callSignalAddress)) != EqualTo) return result; if ((result = m_rasAddress.Compare(other.m_rasAddress)) != EqualTo) return result; if ((result = m_endpointType.Compare(other.m_endpointType)) != EqualTo) return result; if ((result = m_tokens.Compare(other.m_tokens)) != EqualTo) return result; if ((result = m_cryptoTokens.Compare(other.m_cryptoTokens)) != EqualTo) return result; if ((result = m_priority.Compare(other.m_priority)) != EqualTo) return result; if ((result = m_remoteExtensionAddress.Compare(other.m_remoteExtensionAddress)) != EqualTo) return result; if ((result = m_destExtraCallInfo.Compare(other.m_destExtraCallInfo)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H225_Endpoint::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); if (HasOptionalField(e_aliasAddress)) length += m_aliasAddress.GetObjectLength(); if (HasOptionalField(e_callSignalAddress)) length += m_callSignalAddress.GetObjectLength(); if (HasOptionalField(e_rasAddress)) length += m_rasAddress.GetObjectLength(); if (HasOptionalField(e_endpointType)) length += m_endpointType.GetObjectLength(); if (HasOptionalField(e_tokens)) length += m_tokens.GetObjectLength(); if (HasOptionalField(e_cryptoTokens)) length += m_cryptoTokens.GetObjectLength(); if (HasOptionalField(e_priority)) length += m_priority.GetObjectLength(); if (HasOptionalField(e_remoteExtensionAddress)) length += m_remoteExtensionAddress.GetObjectLength(); if (HasOptionalField(e_destExtraCallInfo)) length += m_destExtraCallInfo.GetObjectLength(); return length; } PBoolean H225_Endpoint::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; if (HasOptionalField(e_aliasAddress) && !m_aliasAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_callSignalAddress) && !m_callSignalAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_rasAddress) && !m_rasAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_endpointType) && !m_endpointType.Decode(strm)) return FALSE; if (HasOptionalField(e_tokens) && !m_tokens.Decode(strm)) return FALSE; if (HasOptionalField(e_cryptoTokens) && !m_cryptoTokens.Decode(strm)) return FALSE; if (HasOptionalField(e_priority) && !m_priority.Decode(strm)) return FALSE; if (HasOptionalField(e_remoteExtensionAddress) && !m_remoteExtensionAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_destExtraCallInfo) && !m_destExtraCallInfo.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_alternateTransportAddresses, m_alternateTransportAddresses)) return FALSE; if (!KnownExtensionDecode(strm, e_circuitInfo, m_circuitInfo)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; return UnknownExtensionsDecode(strm); } void H225_Endpoint::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); if (HasOptionalField(e_aliasAddress)) m_aliasAddress.Encode(strm); if (HasOptionalField(e_callSignalAddress)) m_callSignalAddress.Encode(strm); if (HasOptionalField(e_rasAddress)) m_rasAddress.Encode(strm); if (HasOptionalField(e_endpointType)) m_endpointType.Encode(strm); if (HasOptionalField(e_tokens)) m_tokens.Encode(strm); if (HasOptionalField(e_cryptoTokens)) m_cryptoTokens.Encode(strm); if (HasOptionalField(e_priority)) m_priority.Encode(strm); if (HasOptionalField(e_remoteExtensionAddress)) m_remoteExtensionAddress.Encode(strm); if (HasOptionalField(e_destExtraCallInfo)) m_destExtraCallInfo.Encode(strm); KnownExtensionEncode(strm, e_alternateTransportAddresses, m_alternateTransportAddresses); KnownExtensionEncode(strm, e_circuitInfo, m_circuitInfo); KnownExtensionEncode(strm, e_featureSet, m_featureSet); UnknownExtensionsEncode(strm); } PObject * H225_Endpoint::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H225_Endpoint::Class()), PInvalidCast); #endif return new H225_Endpoint(*this); } #endif // if ! H323_DISABLE_H225 // End of h225.cxx h323plus/src/q931.cxx0000644000175000017500000012526011547640572013140 0ustar markmark/* * q931.cxx * * Q.931 protocol handler * * Open H323 Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Contributor(s): ______________________________________. * * $Log: q931.cxx,v $ * Revision 1.7 2011/04/08 17:10:18 willamowius * fix compilation with PTLib 2.11.x * * Revision 1.6 2010/05/02 22:53:52 shorne * Fix warning on vs2010 * * Revision 1.5 2010/04/30 19:17:18 willamowius * fix memory leak when q931 decoding fails * * Revision 1.4 2010/01/04 05:54:47 shorne * Added SetCallingSubAddressIE and SetCalledSubAddressIE support * * Revision 1.3 2008/05/27 03:15:20 shorne * Updated Windows compilation to compile with latest ptlib SVN * * Revision 1.2 2008/05/23 11:22:32 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:51:07 shorne * First commit of h323plus * * Revision 1.66 2006/08/12 03:59:46 csoutheren * Added additional Q.931 message types * Thanks to ii7@bk.ru * * Revision 1.65 2004/12/09 23:37:14 csoutheren * Added new Q.931 termination codes * * Revision 1.64 2004/11/19 00:14:18 csoutheren * Prevent GetBearerCapabilities from reading invalid memory (array index out of bounds) * Thanks to Michal Zygmuntowicz * * Revision 1.63 2004/11/07 12:45:09 rjongbloed * Minor change to parsing of bearer capabilities, thanks Michal Zygmuntowicz * * Revision 1.62 2004/07/11 11:37:28 rjongbloed * Added ConnectAck support and fixed bugs in ChannelIdentificationIE, thanks Eize Slange * * Revision 1.61 2004/06/06 08:44:26 rjongbloed * Fixed incorrect test for Q.931 calls state information element, thanks Stelios Vaiopoulos * * Revision 1.60 2004/05/07 06:44:17 csoutheren * Fixed problem with empty Q>931 DisplayName * * Revision 1.59 2003/08/24 23:10:30 rjongbloed * Fixed incorrect mask in bearer caps decoding, thanks Greg Adams * * Revision 1.58 2003/03/18 05:54:18 robertj * Added ChannelIdentifier IE support, thanks Eize Slange * * Revision 1.57 2003/02/12 02:23:01 robertj * Fixed printing of cause codes that are impossible as opposed to merely * unlikely or unallocated. * * Revision 1.56 2003/02/12 00:02:23 robertj * Added more Q.931 cause codes. * Added ability to trace text version of cause codes and IE codes. * * Revision 1.55 2002/11/19 06:19:25 robertj * Added extra "congested" Q.931 codes. * * Revision 1.54 2002/08/06 02:27:39 robertj * GNU C++ v3 compatibility. * * Revision 1.53 2002/08/05 10:03:48 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.52 2002/07/25 10:55:44 robertj * Changes to allow more granularity in PDU dumps, hex output increasing * with increasing trace level. * * Revision 1.51 2002/07/05 03:13:38 robertj * Added copy constructor for Q.931 so makes duplicate instead of reference to IE's. * * Revision 1.50 2002/07/03 10:26:05 robertj * Fixed bearer capabilities for H,450.1 needing non ITU standard, thanks Florian Winterstein * * Revision 1.49 2002/05/22 23:12:03 robertj * Enhanced the display of Release-Complete cause codes. * * Revision 1.48 2002/05/07 23:49:35 craigs * Changed comment on length of userUserIE field thanks to Paul Long * * Revision 1.47 2002/05/03 05:38:19 robertj * Added Q.931 Keypad IE mechanism for user indications (DTMF). * * Revision 1.46 2002/04/22 07:32:16 craigs * Changed GetProgressIndicator to be const * * Revision 1.45 2002/04/19 04:49:14 robertj * Fixed currect bit shift for CallState IE standard bits. * * Revision 1.44 2002/04/19 02:16:47 robertj * Added CallState IE processing. * * Revision 1.43 2002/04/18 06:16:32 craigs * Extra robustness in handling of strange UserUserIE lengths * * Revision 1.42 2002/01/07 04:25:21 robertj * Added support for Connected-Number Information Element, thanks Hans Verbeek * * Revision 1.41 2002/01/06 05:28:41 robertj * Fixed crash if given bad data in number field, thanks Chih-Wei Huang. * * Revision 1.40 2001/09/17 02:06:40 robertj * Added Redirecting Number IE to Q.931, thanks Frank Derks * * Revision 1.39 2001/09/13 02:41:21 robertj * Fixed call reference generation to use full range and common code, thanks Carlo Kielstra * * Revision 1.38 2001/08/27 03:45:59 robertj * Added automatic setting of bearer capability transfer mode from H.323 * capabilities on connection at time of SETUP PDU. * * Revision 1.37 2001/08/20 06:48:28 robertj * Added Q.931 function for setting bearer capabilities, allowing * applications to set the data rate as they require. * * Revision 1.36 2001/08/07 02:57:09 robertj * Fixed incorrect Q.931 bearer capability, thanks Carlo Kielstra. * * Revision 1.35 2001/07/24 23:40:15 craigs * Added ability to remove Q931 IE * * Revision 1.34 2001/06/14 06:25:16 robertj * Added further H.225 PDU build functions. * Moved some functionality from connection to PDU class. * * Revision 1.33 2001/05/30 04:38:40 robertj * Added BuildStatusEnquiry() Q.931 function, thanks Markus Storm * * Revision 1.32 2001/04/05 00:06:31 robertj * Fixed some more encoding/decoding problems with little used bits of * the Q.931 protocol, thanks Hans Verbeek. * * Revision 1.31 2001/04/03 23:06:15 robertj * Fixed correct encoding and decoding of Q.850 cause field, thanks Hans Verbeek. * * Revision 1.30 2001/02/09 05:13:56 craigs * Added pragma implementation to (hopefully) reduce the executable image size * under Linux * * Revision 1.29 2001/01/19 06:57:26 robertj * Added Information message type. * * Revision 1.28 2000/10/13 02:16:04 robertj * Added support for Progress Indicator Q.931/H.225 message. * * Revision 1.27 2000/07/11 11:17:01 robertj * Improved trace log display of Q.931 PDU's (correct order and extra IE fields). * * Revision 1.26 2000/07/09 14:54:11 robertj * Added facility IE to facility message. * Changed reference to the word "field" to be more correct IE or "Information Element" * * Revision 1.25 2000/06/21 08:07:47 robertj * Added cause/reason to release complete PDU, where relevent. * * Revision 1.24 2000/05/09 12:19:31 robertj * Added ability to get and set "distinctive ring" Q.931 functionality. * * Revision 1.23 2000/05/08 14:07:35 robertj * Improved the provision and detection of calling and caller numbers, aliases and hostnames. * * Revision 1.22 2000/05/06 02:18:26 robertj * Changed the new CallingPartyNumber code so defaults for octet3a are application dependent. * * Revision 1.21 2000/05/05 00:44:05 robertj * Added presentation and screening fields to Calling Party Number field, thanks Dean Anderson. * * Revision 1.20 2000/05/02 04:32:27 robertj * Fixed copyright notice comment. * * Revision 1.19 2000/03/21 01:08:11 robertj * Fixed incorrect call reference code being used in originated call. * * Revision 1.18 2000/02/17 12:07:43 robertj * Used ne wPWLib random number generator after finding major problem in MSVC rand(). * * Revision 1.17 1999/12/23 22:44:06 robertj * Added calling party number field. * * Revision 1.16 1999/09/22 04:18:29 robertj * Fixed missing "known" message types in debugging output. * * Revision 1.15 1999/09/10 03:36:48 robertj * Added simple Q.931 Status response to Q.931 Status Enquiry * * Revision 1.14 1999/08/31 13:54:35 robertj * Fixed problem with memory overrun building PDU's * * Revision 1.13 1999/08/31 12:34:19 robertj * Added gatekeeper support. * * Revision 1.12 1999/08/13 06:34:38 robertj * Fixed problem in CallPartyNumber Q.931 encoding. * Added field name display to Q.931 protocol. * * Revision 1.11 1999/08/10 13:14:15 robertj * Added Q.931 Called Number field if have "phone number" style destination addres. * * Revision 1.10 1999/07/16 02:15:30 robertj * Fixed more tunneling problems. * * Revision 1.9 1999/07/09 14:59:59 robertj * Fixed GNU C++ compatibility. * * Revision 1.8 1999/07/09 06:09:50 robertj * Major implementation. An ENORMOUS amount of stuff added everywhere. * * Revision 1.7 1999/06/14 15:19:48 robertj * GNU C compatibility * * Revision 1.6 1999/06/13 12:41:14 robertj * Implement logical channel transmitter. * Fixed H245 connect on receiving call. * * Revision 1.5 1999/06/09 05:26:20 robertj * Major restructuring of classes. * * Revision 1.4 1999/02/23 11:04:29 robertj * Added capability to make outgoing call. * * Revision 1.3 1999/01/16 01:31:38 robertj * Major implementation. * * Revision 1.2 1999/01/02 04:00:52 robertj * Added higher level protocol negotiations. * * Revision 1.1 1998/12/14 09:13:37 robertj * Initial revision * */ #include #ifdef __GNUC__ #pragma implementation "q931.h" #endif #include "q931.h" #include "openh323buildopts.h" #include #ifdef _WIN32 #ifndef _Ios_Fmtflags #define _Ios_Fmtflags ios::fmtflags #endif #endif #define new PNEW ostream & operator<<(ostream & strm, Q931::InformationElementCodes ie) { static POrdinalToString::Initialiser IENamesInit[] = { { Q931::BearerCapabilityIE, "Bearer-Capability" }, { Q931::CauseIE, "Cause" }, { Q931::FacilityIE, "Facility" }, { Q931::ProgressIndicatorIE, "Progress-Indicator" }, { Q931::CallStateIE, "Call-State" }, { Q931::DisplayIE, "Display" }, { Q931::SignalIE, "Signal" }, { Q931::KeypadIE, "Keypad" }, { Q931::ConnectedNumberIE, "Connected-Number" }, { Q931::CallingPartyNumberIE, "Calling-Party-Number" }, { Q931::CalledPartyNumberIE, "Called-Party-Number" }, { Q931::RedirectingNumberIE, "Redirecting-Number" }, { Q931::ChannelIdentificationIE,"Channel-Identification"}, { Q931::UserUserIE, "User-User" } }; static const POrdinalToString IENames(PARRAYSIZE(IENamesInit), IENamesInit); if (IENames.Contains((PINDEX)ie)) strm << IENames[ie]; else strm << "0x" << hex << (unsigned)ie << dec << " (" << (unsigned)ie << ')'; return strm; } ostream & operator<<(ostream & strm, Q931::CauseValues cause) { static POrdinalToString::Initialiser CauseNamesInit[] = { { Q931::UnallocatedNumber, "Unallocated number" }, { Q931::NoRouteToNetwork, "No route to network" }, { Q931::NoRouteToDestination, "No route to destination" }, { Q931::SendSpecialTone, "Send special tone" }, { Q931::MisdialledTrunkPrefix, "Misdialled trunk prefix" }, { Q931::ChannelUnacceptable, "Channel unacceptable" }, { Q931::NormalCallClearing, "Normal call clearing" }, { Q931::UserBusy, "User busy" }, { Q931::NoResponse, "No response" }, { Q931::NoAnswer, "No answer" }, { Q931::SubscriberAbsent, "Subscriber absent" }, { Q931::CallRejected, "Call rejected" }, { Q931::NumberChanged, "Number changed" }, { Q931::Redirection, "Redirection" }, { Q931::ExchangeRoutingError, "Exchange routing error" }, { Q931::NonSelectedUserClearing, "Non selected user clearing" }, { Q931::DestinationOutOfOrder, "Destination out of order" }, { Q931::InvalidNumberFormat, "Invalid number format" }, { Q931::FacilityRejected, "Facility rejected" }, { Q931::StatusEnquiryResponse, "Status enquiry response" }, { Q931::NormalUnspecified, "Normal unspecified" }, { Q931::NoCircuitChannelAvailable, "No circuit/channel available" }, { Q931::NetworkOutOfOrder, "Network out of order" }, { Q931::TemporaryFailure, "Temporary failure" }, { Q931::Congestion, "Congestion" }, { Q931::RequestedCircuitNotAvailable,"RequestedCircuitNotAvailable" }, { Q931::ResourceUnavailable, "Resource unavailable" }, { Q931::ServiceOptionNotAvailable, "Service or option not available" }, { Q931::InvalidCallReference, "Invalid call reference" }, { Q931::IncompatibleDestination, "Incompatible destination" }, { Q931::IENonExistantOrNotImplemented,"IE non-existent or not implemented" }, { Q931::TimerExpiry, "Recovery from timer expiry" }, { Q931::ProtocolErrorUnspecified, "Protocol error, unspecified" }, { Q931::InterworkingUnspecified, "Interworking, unspecified" }, { Q931::CallAwarded, "Call awarded, delivered via established channel" }, { Q931::Preemption, "Call is being preempted" }, { Q931::PreemptionCircuitReserved, "Preemption - circuit reserved for reuse" }, { Q931::CallQueued, "Call queued" }, { Q931::FrameModeOOS, "Frame mode out of service" }, { Q931::FrameModeOperational, "Frame mode operational" }, { Q931::AccessInformationDiscarded, "Access information discarded" }, { Q931::PrecedenceCallBlocked, "Precedence Call Blocked" }, { Q931::QoSNotAvailable, "QoS not available" }, { Q931::RequestedFacilityNotSubscribed, "Requested facility not subscribed" }, { Q931::OutgoingCallsBarred, "Outgoing calls barred" }, { Q931::OutgoingCallsBarredInCUG, "Outgoing calls barred in CUG" }, { Q931::IncomingCallsBarred, "Incoming calls barred" }, { Q931::IncomingCallsBarredInCUG, "Incoming calls barred in CUG" }, { Q931::BearerCapNotAuthorised, "Bearer cap not authorised" }, { Q931::BearerCapNotPresentlyAvailable, "Bearer cap not presently available" }, { Q931::InconsistentOutgoingIE, "Inconsistent outgoing information element" }, { Q931::BearerCapNotImplemented, "Bearer cap not implemented" }, { Q931::ChannelTypeNotImplemented, "Channel type not implemented" }, { Q931::RequestedFacilityNotImplemented, "Requested facility not implemented" }, { Q931::OnlyRestrictedDigitalBearerCapAvailable, "Only restricted digital bearer cap available" }, { Q931::ServiceOrOptionNotImplemented, "Service or option not implemented" }, { Q931::IdentifiedChannelNonExistent, "IdentifiedChannelNonExistent" }, { Q931::CallIdentifyNotSuspendedCall, "CallIdentifyNotSuspendedCall" }, { Q931::CallIdentifyInUse, "CallIdentifyInUse" }, { Q931::NoCallSuspended, "NoCallSuspended" }, { Q931::ClearedRequestedCallIdentity, "ClearedRequestedCallIdentity" }, { Q931::UserNotInCUG, "UserNotInCUG" }, }; static const POrdinalToString CauseNames(PARRAYSIZE(CauseNamesInit), CauseNamesInit); if (CauseNames.Contains((PINDEX)cause)) strm << CauseNames[cause]; else if (cause < Q931::ErrorInCauseIE) strm << "0x" << hex << (unsigned)cause << dec << " (" << (unsigned)cause << ')'; else strm << "N/A"; return strm; } /////////////////////////////////////////////////////////////////////////////// Q931::Q931() { protocolDiscriminator = 8; // Q931 always has 00001000 messageType = NationalEscapeMsg; fromDestination = FALSE; callReference = 0; } Q931::Q931(const Q931 & other) { operator=(other); } Q931 & Q931::operator=(const Q931 & other) { callReference = other.callReference; fromDestination = other.fromDestination; protocolDiscriminator = other.protocolDiscriminator; messageType = other.messageType; informationElements.RemoveAll(); for (PINDEX i = 0; i < other.informationElements.GetSize(); i++) informationElements.SetAt(other.informationElements.GetKeyAt(i), new PBYTEArray(other.informationElements.GetDataAt(i))); return *this; } void Q931::BuildFacility(int callRef, PBoolean fromDest) { messageType = FacilityMsg; callReference = callRef; fromDestination = fromDest; informationElements.RemoveAll(); PBYTEArray data; SetIE(FacilityIE, data); } void Q931::BuildInformation(int callRef, PBoolean fromDest) { messageType = InformationMsg; callReference = callRef; fromDestination = fromDest; informationElements.RemoveAll(); } void Q931::BuildProgress(int callRef, PBoolean fromDest, unsigned description, unsigned codingStandard, unsigned location) { messageType = ProgressMsg; callReference = callRef; fromDestination = fromDest; informationElements.RemoveAll(); SetProgressIndicator(description, codingStandard, location); } void Q931::BuildNotify(int callRef, PBoolean fromDest) { messageType = NotifyMsg; callReference = callRef; fromDestination = fromDest; informationElements.RemoveAll(); } void Q931::BuildSetupAcknowledge(int callRef) { messageType = SetupAckMsg; callReference = callRef; fromDestination = TRUE; informationElements.RemoveAll(); } void Q931::BuildCallProceeding(int callRef) { messageType = CallProceedingMsg; callReference = callRef; fromDestination = TRUE; informationElements.RemoveAll(); } void Q931::BuildAlerting(int callRef) { messageType = AlertingMsg; callReference = callRef; fromDestination = TRUE; informationElements.RemoveAll(); } void Q931::BuildSetup(int callRef) { messageType = SetupMsg; if (callRef < 0) callReference = GenerateCallReference(); else callReference = callRef; fromDestination = FALSE; informationElements.RemoveAll(); SetBearerCapabilities(TransferSpeech, 1); } void Q931::BuildConnect(int callRef) { messageType = ConnectMsg; callReference = callRef; fromDestination = TRUE; informationElements.RemoveAll(); SetBearerCapabilities(TransferSpeech, 1); } void Q931::BuildConnectAck(int callRef, PBoolean fromDest) { messageType = ConnectAckMsg; callReference = callRef; fromDestination = fromDest; informationElements.RemoveAll(); } void Q931::BuildStatus(int callRef, PBoolean fromDest) { messageType = StatusMsg; callReference = callRef; fromDestination = fromDest; informationElements.RemoveAll(); SetCallState(CallState_Active); // Cause field as per Q.850 SetCause(StatusEnquiryResponse); } void Q931::BuildStatusEnquiry(int callRef, PBoolean fromDest) { messageType = StatusEnquiryMsg; callReference = callRef; fromDestination = fromDest; informationElements.RemoveAll(); } void Q931::BuildReleaseComplete(int callRef, PBoolean fromDest) { messageType = ReleaseCompleteMsg; callReference = callRef; fromDestination = fromDest; informationElements.RemoveAll(); } PBoolean Q931::Decode(const PBYTEArray & data) { // Clear all existing data before reading new informationElements.RemoveAll(); if (data.GetSize() < 5) // Packet too short return FALSE; protocolDiscriminator = data[0]; if (data[1] != 2) // Call reference must be 2 bytes long return FALSE; callReference = ((data[2]&0x7f) << 8) | data[3]; fromDestination = (data[2]&0x80) != 0; messageType = (MsgTypes)data[4]; // Have preamble, start getting the informationElements into buffers PINDEX offset = 5; while (offset < data.GetSize()) { // Get field discriminator int discriminator = data[offset++]; PBYTEArray * item = new PBYTEArray; // For discriminator with high bit set there is no data if ((discriminator&0x80) == 0) { int len = data[offset++]; if (discriminator == UserUserIE) { // Special case of User-user field. See 7.2.2.31/H.225.0v4. len <<= 8; len |= data[offset++]; // we also have a protocol discriminator, which we ignore offset++; // before decrementing the length, make sure it is not zero if (len == 0) { delete item; return FALSE; } // adjust for protocol discriminator len--; } if (offset + len > data.GetSize()) { delete item; return FALSE; } memcpy(item->GetPointer(len), (const BYTE *)data+offset, len); offset += len; } informationElements.SetAt(discriminator, item); } return TRUE; } PBoolean Q931::Encode(PBYTEArray & data) const { PINDEX totalBytes = 5; unsigned discriminator; for (discriminator = 0; discriminator < 256; discriminator++) { if (informationElements.Contains(discriminator)) { if (discriminator < 128) totalBytes += informationElements[discriminator].GetSize() + (discriminator != UserUserIE ? 2 : 4); else totalBytes++; } } if (!data.SetMinSize(totalBytes)) return FALSE; // Put in Q931 header PAssert(protocolDiscriminator < 256, PInvalidParameter); data[0] = (BYTE)protocolDiscriminator; data[1] = 2; // Length of call reference data[2] = (BYTE)(callReference >> 8); if (fromDestination) data[2] |= 0x80; data[3] = (BYTE)callReference; PAssert(messageType < 256, PInvalidParameter); data[4] = (BYTE)messageType; // The following assures disciminators are in ascending value order // as required by Q931 specification PINDEX offset = 5; for (discriminator = 0; discriminator < 256; discriminator++) { if (informationElements.Contains(discriminator)) { if (discriminator < 128) { int len = informationElements[discriminator].GetSize(); if (discriminator != UserUserIE) { data[offset++] = (BYTE)discriminator; data[offset++] = (BYTE)len; } else { len++; // Allow for protocol discriminator data[offset++] = (BYTE)discriminator; data[offset++] = (BYTE)(len >> 8); data[offset++] = (BYTE)len; len--; // Then put the length back again // We shall assume that the user-user field is an ITU protocol block (5) data[offset++] = 5; } memcpy(&data[offset], (const BYTE *)informationElements[discriminator], len); offset += len; } else data[offset++] = (BYTE)discriminator; } } return data.SetSize(offset); } void Q931::PrintOn(ostream & strm) const { int indent = (int)strm.precision() + 2; _Ios_Fmtflags flags = strm.flags(); strm << "{\n" << setw(indent+24) << "protocolDiscriminator = " << protocolDiscriminator << '\n' << setw(indent+16) << "callReference = " << callReference << '\n' << setw(indent+7) << "from = " << (fromDestination ? "destination" : "originator") << '\n' << setw(indent+14) << "messageType = " << GetMessageTypeName() << '\n'; for (unsigned discriminator = 0; discriminator < 256; discriminator++) { if (informationElements.Contains(discriminator)) { strm << setw(indent+4) << "IE: " << (InformationElementCodes)discriminator; if (discriminator == CauseIE) { if (informationElements[discriminator].GetSize() > 1) strm << " - " << (CauseValues)(informationElements[discriminator][1]&0x7f); } strm << " = {\n" << hex << setfill('0') << resetiosflags(ios::floatfield) << setprecision(indent+2) << setw(16); PBYTEArray value = informationElements[discriminator]; if (value.GetSize() <= 32 || (flags&ios::floatfield) != ios::fixed) strm << value; else { PBYTEArray truncatedArray(value, 32); strm << truncatedArray << '\n' << setfill(' ') << setw(indent+5) << "..."; } strm << dec << setfill(' ') << '\n' << setw(indent+2) << "}\n"; } } strm << setw(indent-1) << "}"; strm.flags(flags); } PString Q931::GetMessageTypeName() const { switch (messageType) { case AlertingMsg : return "Alerting"; case CallProceedingMsg : return "CallProceeding"; case ConnectMsg : return "Connect"; case ConnectAckMsg : return "ConnectAck"; case ProgressMsg : return "Progress"; case SetupMsg : return "Setup"; case SetupAckMsg : return "SetupAck"; case FacilityMsg : return "Facility"; case ReleaseCompleteMsg : return "ReleaseComplete"; case StatusEnquiryMsg : return "StatusEnquiry"; case StatusMsg : return "Status"; case InformationMsg : return "Information"; case NationalEscapeMsg : return "Escape"; case NotifyMsg : return "NotifyMsg"; case ResumeMsg : return "ResumeMsg"; case ResumeAckMsg : return "ResumeAckMsg"; case ResumeRejectMsg : return "ResumeRejectMsg"; case SuspendMsg : return "SuspendMsg"; case SuspendAckMsg : return "SuspendAckMsg"; case SuspendRejectMsg : return "SuspendRejectMsg"; case UserInformationMsg : return "UserInformationMsg"; case DisconnectMsg : return "DisconnectMsg"; case ReleaseMsg : return "ReleaseMsg"; case RestartMsg : return "RestartMsg"; case RestartAckMsg : return "RestartAckMsg"; case SegmentMsg : return "SegmentMsg"; case CongestionCtrlMsg : return "CongestionCtrlMsg"; default : break; } return psprintf("<%u>", messageType); } unsigned Q931::GenerateCallReference() { static unsigned LastCallReference; static PMutex mutex; PWaitAndSignal wait(mutex); if (LastCallReference == 0) LastCallReference = PRandom::Number(); else LastCallReference++; LastCallReference &= 0x7fff; if (LastCallReference == 0) LastCallReference = 1; return LastCallReference; } PBoolean Q931::HasIE(InformationElementCodes ie) const { return informationElements.Contains(POrdinalKey(ie)); } PBYTEArray Q931::GetIE(InformationElementCodes ie) const { if (informationElements.Contains(POrdinalKey(ie))) return informationElements[ie]; return PBYTEArray(); } void Q931::SetIE(InformationElementCodes ie, const PBYTEArray & userData) { informationElements.SetAt(ie, new PBYTEArray(userData)); } void Q931::RemoveIE(InformationElementCodes ie) { informationElements.RemoveAt(ie); } void Q931::SetBearerCapabilities(InformationTransferCapability capability, unsigned transferRate, unsigned codingStandard, unsigned userInfoLayer1) { BYTE data[4]; PINDEX size = 1; data[0] = (BYTE)(0x80 | ((codingStandard&3) << 5) | (capability&31)); switch (codingStandard) { case 0 : // ITU-T standardized coding size = 3; // Note this is always "Circuit Mode" switch (transferRate) { case 1 : data[1] = 0x90; break; case 2 : data[1] = 0x91; break; case 6 : data[1] = 0x93; break; case 24 : data[1] = 0x95; break; case 30 : data[1] = 0x97; break; default : PAssert(transferRate > 0 && transferRate < 128, PInvalidParameter); data[1] = 0x18; data[2] = (BYTE)(0x80 | transferRate); size = 4; } PAssert(userInfoLayer1 >= 2 && userInfoLayer1 <= 5, PInvalidParameter); data[size-1] = (BYTE)(0x80 | (1<<5) | userInfoLayer1); break; case 1 : // Other international standard size = 2; data[1] = 0x80; // Call independent signalling connection break; default : break; } SetIE(BearerCapabilityIE, PBYTEArray(data, size)); } PBoolean Q931::GetBearerCapabilities(InformationTransferCapability & capability, unsigned & transferRate, unsigned * codingStandard, unsigned * userInfoLayer1) { if (!HasIE(BearerCapabilityIE)) return FALSE; PBYTEArray data = GetIE(BearerCapabilityIE); if (data.GetSize() < 2) return FALSE; capability = (InformationTransferCapability)data[0]; if (codingStandard != NULL) *codingStandard = (data[0] >> 5)&3; PINDEX nextByte = 2; switch (data[1]) { case 0x90 : transferRate = 1; break; case 0x91 : transferRate = 2; break; case 0x93 : transferRate = 6; break; case 0x95 : transferRate = 24; break; case 0x97 : transferRate = 30; break; case 0x18 : if (data.GetSize() < 3) return FALSE; transferRate = data[2]&0x7f; nextByte = 3; break; default : return FALSE; } if (userInfoLayer1 != NULL) *userInfoLayer1 = data.GetSize() > nextByte && ((data[nextByte]>>5)&3) == 1 ? (data[nextByte]&0x1f) : 0; return TRUE; } void Q931::SetCause(CauseValues value, unsigned standard, unsigned location) { PBYTEArray data(2); data[0] = (BYTE)(0x80 | ((standard&3) << 5) | (location&15)); data[1] = (BYTE)(0x80 | value); SetIE(CauseIE, data); } Q931::CauseValues Q931::GetCause(unsigned * standard, unsigned * location) const { if (!HasIE(CauseIE)) return ErrorInCauseIE; PBYTEArray data = GetIE(CauseIE); if (data.GetSize() < 2) return ErrorInCauseIE; if (standard != NULL) *standard = (data[0] >> 5)&3; if (location != NULL) *location = data[0]&15; if ((data[0]&0x80) != 0) return (CauseValues)(data[1]&0x7f); // Allow for optional octet if (data.GetSize() < 3) return ErrorInCauseIE; return (CauseValues)(data[2]&0x7f); } void Q931::SetCallState(CallStates value, unsigned standard) { if (value >= CallState_ErrorInIE) return; // Call State as per Q.931 section 4.5.7 PBYTEArray data(1); data[0] = (BYTE)(((standard&3) << 6) | value); SetIE(CallStateIE, data); } Q931::CallStates Q931::GetCallState(unsigned * standard) const { if (!HasIE(CallStateIE)) return CallState_ErrorInIE; PBYTEArray data = GetIE(CallStateIE); if (data.IsEmpty()) return CallState_ErrorInIE; if (standard != NULL) *standard = (data[0] >> 6)&3; return (CallStates)(data[0]&0x3f); } void Q931::SetSignalInfo(SignalInfo value) { PBYTEArray data(1); data[0] = (BYTE)value; SetIE(SignalIE, data); } Q931::SignalInfo Q931::GetSignalInfo() const { if (!HasIE(SignalIE)) return SignalErrorInIE; PBYTEArray data = GetIE(SignalIE); if (data.IsEmpty()) return SignalErrorInIE; return (SignalInfo)data[0]; } void Q931::SetKeypad(const PString & digits) { PBYTEArray bytes((const BYTE *)(const char *)digits, digits.GetLength()+1); SetIE(KeypadIE, bytes); } PString Q931::GetKeypad() const { if (!HasIE(Q931::KeypadIE)) return PString(); PBYTEArray digits = GetIE(Q931::KeypadIE); if (digits.IsEmpty()) return PString(); return PString((const char *)(const BYTE *)digits, digits.GetSize()); } void Q931::SetProgressIndicator(unsigned description, unsigned codingStandard, unsigned location) { PBYTEArray data(2); data[0] = (BYTE)(0x80+((codingStandard&0x03)<<5)+(location&0x0f)); data[1] = (BYTE)(0x80+(description&0x7f)); SetIE(ProgressIndicatorIE, data); } PBoolean Q931::GetProgressIndicator(unsigned & description, unsigned * codingStandard, unsigned * location) const { if (!HasIE(ProgressIndicatorIE)) return FALSE; PBYTEArray data = GetIE(ProgressIndicatorIE); if (data.GetSize() < 2) return FALSE; if (codingStandard != NULL) *codingStandard = (data[0]>>5)&0x03; if (location != NULL) *location = data[0]&0x0f; description = data[1]&0x7f; return TRUE; } void Q931::SetDisplayName(const PString & name) { PBYTEArray bytes((const BYTE *)(const char *)name, name.GetLength()+1); if (name.GetLength() == 0) RemoveIE(DisplayIE); else SetIE(DisplayIE, bytes); } PString Q931::GetDisplayName() const { if (!HasIE(Q931::DisplayIE)) return PString(); PBYTEArray display = GetIE(Q931::DisplayIE); if (display.IsEmpty()) return PString(); return PString((const char *)(const BYTE *)display, display.GetSize()); } static PBYTEArray SetNumberIE(const PString & number, unsigned plan, unsigned type, int presentation, int screening, int reason) { PBYTEArray bytes; PINDEX len = number.GetLength(); if (reason == -1) { if (presentation == -1 || screening == -1) { bytes.SetSize(len+1); bytes[0] = (BYTE)(0x80|((type&7)<<4)|(plan&15)); memcpy(bytes.GetPointer()+1, (const char *)number, len); } else { bytes.SetSize(len+2); bytes[0] = (BYTE)(((type&7)<<4)|(plan&15)); bytes[1] = (BYTE)(0x80|((presentation&3)<<5)|(screening&3)); memcpy(bytes.GetPointer()+2, (const char *)number, len); } } else { // If octet 3b is present, then octet 3a must also be present! if (presentation == -1 || screening == -1) { // This situation should never occur!!! bytes.SetSize(len+1); bytes[0] = (BYTE)(0x80|((type&7)<<4)|(plan&15)); memcpy(bytes.GetPointer()+1, (const char *)number, len); } else { bytes.SetSize(len+3); bytes[0] = (BYTE)(0x80|((type&7)<<4)|(plan&15)); bytes[1] = (BYTE)(0x80|((presentation&3)<<5)|(screening&3)); bytes[2] = (BYTE)(0x80|(reason&15)); memcpy(bytes.GetPointer()+3, (const char *)number, len); } } return bytes; } static PBoolean GetNumberIE(const PBYTEArray & bytes, PString & number, unsigned * plan, unsigned * type, unsigned * presentation, unsigned * screening, unsigned * reason, unsigned defPresentation, unsigned defScreening, unsigned defReason) { number = PString(); if (bytes.IsEmpty()) return FALSE; if (plan != NULL) *plan = bytes[0]&15; if (type != NULL) *type = (bytes[0]>>4)&7; PINDEX offset; if ((bytes[0] & 0x80) != 0) { // Octet 3a not provided, set defaults if (presentation != NULL) *presentation = defPresentation; if (screening != NULL) *screening = defScreening; offset = 1; } else { if (bytes.GetSize() < 2) return FALSE; if (presentation != NULL) *presentation = (bytes[1]>>5)&3; if (screening != NULL) *screening = bytes[1]&3; if ((bytes[1] & 0x80) != 0) { // Octet 3b not provided, set defaults if (reason != NULL) *reason = defReason; offset = 2; } else { if (bytes.GetSize() < 3) return FALSE; if (reason != NULL) *reason = bytes[2]&15; offset = 3; } } if (bytes.GetSize() < offset) return FALSE; PINDEX len = bytes.GetSize()-offset; if (len > 0) #if PTLIB_VER >= 2110 memcpy(number.GetPointerAndSetLength(len), ((const BYTE *)bytes)+offset, len); #else memcpy(number.GetPointer(len+1), ((const BYTE *)bytes)+offset, len); #endif return !number; } void Q931::SetCallingPartyNumber(const PString & number, unsigned plan, unsigned type, int presentation, int screening) { SetIE(CallingPartyNumberIE, SetNumberIE(number, plan, type, presentation, screening, -1)); } PBoolean Q931::GetCallingPartyNumber(PString & number, unsigned * plan, unsigned * type, unsigned * presentation, unsigned * screening, unsigned defPresentation, unsigned defScreening) const { return GetNumberIE(GetIE(CallingPartyNumberIE), number, plan, type, presentation, screening, NULL, defPresentation, defScreening, 0); } void Q931::SetCallingPartySubAddress(const PString & number, unsigned plan, unsigned type) { SetIE(CallingPartySubAddressIE, SetNumberIE(number, plan, type, -1, -1, -1)); } PBoolean Q931::GetCallingPartySubAddress(PString & number, unsigned * plan, unsigned * type) const { return GetNumberIE(GetIE(CallingPartySubAddressIE), number, plan, type, NULL, NULL, NULL, 0, 0, 0); } void Q931::SetCalledPartyNumber(const PString & number, unsigned plan, unsigned type) { SetIE(CalledPartyNumberIE, SetNumberIE(number, plan, type, -1, -1, -1)); } PBoolean Q931::GetCalledPartyNumber(PString & number, unsigned * plan, unsigned * type) const { return GetNumberIE(GetIE(CalledPartyNumberIE), number, plan, type, NULL, NULL, NULL, 0, 0, 0); } void Q931::SetCalledPartySubAddress(const PString & number, unsigned plan, unsigned type) { SetIE(CalledPartySubAddressIE, SetNumberIE(number, plan, type, -1, -1, -1)); } PBoolean Q931::GetCalledPartySubAddress(PString & number, unsigned * plan, unsigned * type) const { return GetNumberIE(GetIE(CalledPartySubAddressIE), number, plan, type, NULL, NULL, NULL, 0, 0, 0); } void Q931::SetRedirectingNumber(const PString & number, unsigned plan, unsigned type, int presentation, int screening, int reason) { SetIE(RedirectingNumberIE, SetNumberIE(number, plan, type, presentation, screening, reason)); } PBoolean Q931::GetRedirectingNumber(PString & number, unsigned * plan, unsigned * type, unsigned * presentation, unsigned * screening, unsigned * reason, unsigned defPresentation, unsigned defScreening, unsigned defReason) const { return GetNumberIE(GetIE(RedirectingNumberIE), number, plan, type, presentation, screening, reason, defPresentation, defScreening, defReason); } PBoolean Q931::GetConnectedNumber(PString & number, unsigned * plan, unsigned * type, unsigned * presentation, unsigned * screening, unsigned * reason, unsigned defPresentation, unsigned defScreening, unsigned defReason) const { return GetNumberIE(GetIE(ConnectedNumberIE), number, plan, type, presentation, screening, reason, defPresentation, defScreening, defReason); } void Q931::SetConnectedNumber(const PString & number, unsigned plan, unsigned type, int presentation, int screening, int reason) { SetIE(ConnectedNumberIE, SetNumberIE(number, plan, type, presentation, screening, reason)); } void Q931::SetChannelIdentification(unsigned interfaceType, unsigned preferredOrExclusive, int channelNumber) { // Known limitations: // - the interface identifier cannot be specified // - channel in PRI can only be indicated by number and cannot be indicated by map // - one and only one channel can be indicated // - the coding standard is always ITU Q.931 PBYTEArray bytes; bytes.SetSize(1); PAssert(interfaceType < 2, PInvalidParameter); if (interfaceType == 0) { // basic rate if (channelNumber == -1) { // any channel bytes[0] = 0x80 | 0x03; } if (channelNumber == 0) { // D channel bytes[0] = 0x80 | 0x04; } if (channelNumber > 0) { // B channel bytes[0] = (BYTE)(0x80 | ((preferredOrExclusive & 0x01) << 3) | (channelNumber & 0x03)); } } if (interfaceType == 1) { // primary rate if (channelNumber == -1) { // any channel bytes[0] = 0x80 | 0x20 | 0x03; bytes[1] = 0x80 | 0x03; // dummy octet 3.2 bytes[2] = (BYTE)(0x80 | 1); // dummy octet 3.3 } if (channelNumber == 0) { // D channel bytes[0] = 0x80 | 0x04 | 0x20; } if (channelNumber > 0) { // B channel bytes.SetSize(3); bytes[0] = (BYTE)(0x80 | 0x20 | ((preferredOrExclusive & 0x01) << 3) | 0x01); bytes[1] = 0x80 | 0x03; bytes[2] = (BYTE)(0x80 | channelNumber); } } SetIE(ChannelIdentificationIE, bytes); } PBoolean Q931::GetChannelIdentification(unsigned * interfaceType, unsigned * preferredOrExclusive, int * channelNumber) const { if (!HasIE(ChannelIdentificationIE)) return FALSE; PBYTEArray bytes = GetIE(ChannelIdentificationIE); if (bytes.GetSize() < 1) return FALSE; *interfaceType = (bytes[0]>>5) & 0x01; *preferredOrExclusive = (bytes[0]>>3) & 0x01; if (*interfaceType == 0) { // basic rate if ( (bytes[0] & 0x04) == 0x04 ) { // D Channel *channelNumber = 0; } else { if ( (bytes[0] & 0x03) == 0x03 ) { // any channel *channelNumber = -1; } else { // B Channel *channelNumber = (bytes[0] & 0x03); } } } if (*interfaceType == 1) { // primary rate if ( (bytes[0] & 0x04) == 0x04 ) { // D Channel *channelNumber = 0; } else { if ( (bytes[0] & 0x03) == 0x03 ) { // any channel *channelNumber = -1; } else { // B Channel if (bytes.GetSize() < 3) return FALSE; if (bytes[1] != 0x83) return FALSE; *channelNumber = bytes[2] & 0x7f; } } } return TRUE; } ///////////////////////////////////////////////////////////////////////////// h323plus/src/asn/0000755000175000017500000000000011664431722012465 5ustar markmarkh323plus/src/asn/h46019.asn0000644000175000017500000000103510655704731014024 0ustar markmarkMEDIA-TRAVERSAL {itu-t(0) recommendation(0) h(8) 460 19} DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS TransportAddress, TimeToLive FROM MULTIMEDIA-SYSTEM-CONTROL; TraversalParameters ::= SEQUENCE { multiplexedMediaChannel TransportAddress OPTIONAL, multiplexedMediaControlChannel TransportAddress OPTIONAL, multiplexID INTEGER(0..4294967295) OPTIONAL, keepAliveChannel TransportAddress OPTIONAL, keepAlivePayloadType INTEGER (0..127) OPTIONAL, keepAliveInterval TimeToLive OPTIONAL, ... } END h323plus/src/asn/h46018.asn0000644000175000017500000000064110655704731014025 0ustar markmarkSIGNALLING-TRAVERSAL {itu-t(0) recommendation(0) h(8) 460 18 version(0)1} DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS CallIdentifier, TimeToLive, TransportAddress FROM H323-MESSAGES; IncomingCallIndication ::= SEQUENCE { callSignallingAddress TransportAddress, callID CallIdentifier, ... } LRQKeepAliveData ::= SEQUENCE { lrqKeepAliveInterval TimeToLive, -- keep-alive interval (seconds) ... } END h323plus/src/asn/t38.asn0000644000175000017500000000327010655704732013613 0ustar markmarkT38 DEFINITIONS AUTOMATIC TAGS ::= BEGIN IFPPacket ::= SEQUENCE { type-of-msg Type-of-msg, data-field Data-Field OPTIONAL } PreCorrigendum-IFPPacket ::= SEQUENCE { type-of-msg Type-of-msg, data-field PreCorrigendum-Data-Field OPTIONAL } Type-of-msg ::= CHOICE { t30-indicator ENUMERATED { no-signal, cng, ced, v21-preamble, v27-2400-training, v27-4800-training, v29-7200-training, v29-9600-training, v17-7200-short-training, v17-7200-long-training, v17-9600-short-training, v17-9600-long-training, v17-12000-short-training, v17-12000-long-training, v17-14400-short-training, v17-14400-long-training, ... }, data ENUMERATED { v21, v27-2400, v27-4800, v29-7200, v29-9600, v17-7200, v17-9600, v17-12000, v17-14400, ... } } Data-Field ::= SEQUENCE OF SEQUENCE { field-type ENUMERATED { hdlc-data, hdlc-sig-end, hdlc-fcs-OK, hdlc-fcs-BAD, hdlc-fcs-OK-sig-end, hdlc-fcs-BAD-sig-end, t4-non-ecm-data, t4-non-ecm-sig-end, ... }, field-data OCTET STRING (SIZE(1..65535)) OPTIONAL } PreCorrigendum-Data-Field ::= SEQUENCE OF SEQUENCE { field-type ENUMERATED { hdlc-data, hdlc-sig-end, hdlc-fcs-OK, hdlc-fcs-BAD, hdlc-fcs-OK-sig-end, hdlc-fcs-BAD-sig-end, t4-non-ecm-data, t4-non-ecm-sig-end }, field-data OCTET STRING (SIZE(1..65535)) OPTIONAL } UDPTLPacket ::= SEQUENCE { seq-number INTEGER (0..65535), primary-ifp-packet TYPE-IDENTIFIER.&Type(IFPPacket), error-recovery CHOICE { secondary-ifp-packets SEQUENCE OF TYPE-IDENTIFIER.&Type(IFPPacket), fec-info SEQUENCE { fec-npackets INTEGER, fec-data SEQUENCE OF OCTET STRING } } } END h323plus/src/asn/h4505.asn0000644000175000017500000001460410655704731013744 0ustar markmarkCall-Park-Pickup-Operations { itu-t recommendation h 450 5 version1(0) call-park-pickup-operations(0) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS Extension FROM H4501 -- Manufacturer-specific-service-extension-definition { itu-t recommendation h 450 1 version1(0) msi-definition(18) } notAvailable, invalidCallState, resourceUnavailable, supplementaryServiceInteractionNotAllowed FROM H4501 -- H4501-General-Error-List { itu-t recommendation h 450 1 version1(0) general-error-list (1) } EndpointAddress FROM H4501 -- Addressing-Data-Elements { itu-t recommendation h 450 1 version1(0) addressing-data-elements(9) } MixedExtension FROM H4504 -- Call-Hold-Operations { itu-t recommendation h 450 4 version1(0) call-hold-operations(0) } NonStandardParameter, CallIdentifier FROM H225; -- H323-MESSAGES see H.225.0 CallParkPickupOperations ::= ENUMERATED { cpRequest(106), cpSetup(107), groupIndicationOn(8), groupIndicationOff(9), pickrequ(110), pickup(111), pickExe(112), cpNotify(113), cpickupNotify(114) } CpRequestArg ::= SEQUENCE { parkingNumber EndpointAddress, parkedNumber EndpointAddress, parkedToNumber EndpointAddress, parkedToPosition ParkedToPosition OPTIONAL, extensionArg SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CpRequestRes ::= SEQUENCE { parkedToNumber EndpointAddress, parkedToPosition ParkedToPosition OPTIONAL, parkCondition ParkCondition, extensionRes SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CpSetupArg ::= SEQUENCE { parkingNumber EndpointAddress, parkedNumber EndpointAddress, parkedToNumber EndpointAddress, parkedToPosition ParkedToPosition OPTIONAL, extensionArg SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CpSetupRes ::= SEQUENCE { parkedToNumber EndpointAddress, parkedToPosition ParkedToPosition OPTIONAL, parkCondition ParkCondition, extensionRes SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } GroupIndicationOnArg ::= SEQUENCE { callPickupId CallIdentifier, -- identification of the call to be retrieved (parked or alerting call); -- its value equals the value of the CallIdentifier as assigned for the parked / -- alerting call within Setup-UUIE groupMemberUserNr EndpointAddress, retrieveCallType CallType, partyToRetrieve EndpointAddress, -- Parked or Calling User retrieveAddress EndpointAddress, -- parked-to or alerting entity address -- (may also be a GK, see clause 9.2) parkPosition ParkedToPosition OPTIONAL, extensionArg SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } GroupIndicationOnRes ::= SEQUENCE { extensionRes SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } GroupIndicationOffArg ::= SEQUENCE { callPickupId CallIdentifier, -- identification of the call that has been picked up (parked or alerting call) groupMemberUserNr EndpointAddress, extensionArg SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } GroupIndicationOffRes ::= SEQUENCE { extensionRes SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } PickrequArg ::= SEQUENCE { picking-upNumber EndpointAddress, callPickupId CallIdentifier OPTIONAL, -- identification of the call to be picked up (parked or alerting call), if known partyToRetrieve EndpointAddress OPTIONAL, -- Parked or Calling User retrieveAddress EndpointAddress, -- parked-to or alerting entity address parkPosition ParkedToPosition OPTIONAL, extensionArg SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } PickrequRes ::= SEQUENCE { callPickupId CallIdentifier, -- identification of the call that is being picked up (parked or alerting call), -- if not sent in pickrequ invoke, it is assigned at the parked-to / alerting -- endpoint and reflects the CallIdentification of the parked / alerting call for -- later association with the pickExe invoke APDU. extensionRes SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } PickupArg ::= SEQUENCE { callPickupId CallIdentifier, -- identification of this call to be picked up (parked or alerting call); -- equals the CallIdentifier value that was assigned to this call in Setup-UUIE picking-upNumber EndpointAddress, extensionArg SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } PickupRes ::= SEQUENCE { extensionRes SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } PickExeArg ::= SEQUENCE { callPickupId CallIdentifier, -- identification of the parked / alerting call to be picked-up; -- required at picking-up endpoint to associate the SS-PICKUP invoked with this -- incoming setup message carrying the pickExe invoke APDU. picking-upNumber EndpointAddress, partyToRetrieve EndpointAddress, -- Parked or Calling User extensionArg SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } PickExeRes ::= SEQUENCE { extensionRes SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CpNotifyArg ::= SEQUENCE { parkingNumber EndpointAddress OPTIONAL, extensionArg SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CpickupNotifyArg ::= SEQUENCE { picking-upNumber EndpointAddress OPTIONAL, extensionArg SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } ParkedToPosition ::= INTEGER (0..65535) ParkCondition ::= ENUMERATED { unspecified (0), parkedToUserIdle (1), parkedToUserBusy (2), parkedToGroup (3), ... } CallType ::= ENUMERATED { parkedCall (0), alertingCall (1), ... } CallPickupErrors ::= ENUMERATED { callPickupIdInvalid(2000), callAlreadyPickedUp(2001), undefined(2002) } END -- of Call-Park-Pickup-Operations h323plus/src/asn/h4506.asn0000644000175000017500000000164410655704731013745 0ustar markmarkCall-Waiting-Operations { itu-t recommendation h 450 6 version1(0) call-waiting-operations(0) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS Extension FROM H4501 -- Manufacturer-specific-service-extension-definition { itu-t recommendation h 450 1 version1(0) msi-definition(18) } MixedExtension FROM H4504 -- Call-Hold-Operations { itu-t recommendation h 450 4 version1(0) call-hold-operations(0) }; CallWaitingOperations ::= ENUMERATED { callWaiting(105) } CallWaitingArg ::= SEQUENCE { nbOfAddWaitingCalls INTEGER (0..255) OPTIONAL, -- indicates the number of waiting calls at the served user -- in addition to the call to which this operation applies. extensionArg SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } END -- of Call-Waiting-Operations h323plus/src/asn/h4609.asn0000644000175000017500000000653110655704731013751 0ustar markmark-- -- ASN.1 File -- -- H.460.9 Support for online QoS-monitoring reporting -- within H.323 Systems -- -- File provided by ISVO (Asia) Pte Ltd (for the OpenH323 project) -- QOS-MONITORING-REPORT DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS NonStandardParameter, TransportChannelInfo, CallIdentifier, CallReferenceValue, ConferenceIdentifier, BandWidth, GenericIdentifier FROM H225; -- H323-MESSAGES; EstimatedEnd2EndDelay ::= INTEGER (0..4294967295) -- middle 32 bits of 64 bit NTP timestamp CalculatedJitter ::= INTEGER (0..4294967295) -- measured in timestamp units Extension ::= SEQUENCE { extensionId GenericIdentifier, extensionContent OCTET STRING OPTIONAL, ... } RTCPMeasures ::= SEQUENCE { rtpAddress TransportChannelInfo, rtcpAddress TransportChannelInfo, sessionId INTEGER (1..255), nonStandardData NonStandardParameter OPTIONAL, mediaSenderMeasures SEQUENCE { worstEstimatedEnd2EndDelay EstimatedEnd2EndDelay OPTIONAL, meanEstimatedEnd2EndDelay EstimatedEnd2EndDelay OPTIONAL, ... } OPTIONAL, mediaReceiverMeasures SEQUENCE { cumulativeNumberOfPacketsLost INTEGER (0..4294967295) OPTIONAL, packetLostRate INTEGER (0..65535) OPTIONAL, worstJitter CalculatedJitter OPTIONAL, estimatedThroughput BandWidth OPTIONAL, fractionLostRate INTEGER (0..65535) OPTIONAL, meanJitter CalculatedJitter OPTIONAL, ... } OPTIONAL, extensions SEQUENCE OF Extension OPTIONAL, ... } PerCallQoSReport ::= SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, callReferenceValue CallReferenceValue, conferenceID ConferenceIdentifier, callIdentifier CallIdentifier, mediaChannelsQoS SEQUENCE OF RTCPMeasures OPTIONAL, -- one element per media channel extensions SEQUENCE OF Extension OPTIONAL, ... } QosMonitoringReportData ::= CHOICE { periodic PeriodicQoSMonReport, -- included in IRR messages final FinalQosMonReport, -- included in DRQ/DCF message interGK InterGKQosMonReport, -- included in usageIndication message ... } PeriodicQoSMonReport ::= SEQUENCE { perCallInfo SEQUENCE OF PerCallQoSReport, -- one element per call extensions SEQUENCE OF Extension OPTIONAL, ... } FinalQosMonReport ::= SEQUENCE { mediaInfo SEQUENCE OF RTCPMeasures, -- one element per channel nonStandardData NonStandardParameter OPTIONAL, extensions SEQUENCE OF Extension OPTIONAL, ... } InterGKQosMonReport ::= SEQUENCE { mediaInfo SEQUENCE OF RTCPMeasures, -- one element per channel nonStandardData NonStandardParameter OPTIONAL, extensions SEQUENCE OF Extension OPTIONAL, ... } -- -- H.460.9 Identifiers: -- -- qosMonitoringReportID GenericIdentifier ::= standard:9 qosMonitoringFinalOnly GenericIdentifier ::= standard:0 qosMonitoringReportData GenericIdentifier ::= standard:1 END -- of ASN.1 h323plus/src/asn/h235.asn0000644000175000017500000002320310655704731013653 0ustar markmarkH235-SECURITY-MESSAGES DEFINITIONS AUTOMATIC TAGS ::= BEGIN -- EXPORTS All ChallengeString ::= OCTET STRING (SIZE(8..128)) TimeStamp ::= INTEGER(1..4294967295) -- seconds since 00:00 1/1/1970 UTC RandomVal ::= INTEGER -- 32-bit Integer Password ::= BMPString (SIZE (1..128)) Identifier ::= BMPString (SIZE (1..128)) KeyMaterial ::= BIT STRING(SIZE(1..2048)) NonStandardParameter ::= SEQUENCE { nonStandardIdentifier OBJECT IDENTIFIER, data OCTET STRING } -- if local octet representations of these bit strings are used they shall -- utilize standard Network Octet ordering (e.g., Big Endian) DHset ::= SEQUENCE { halfkey BIT STRING (SIZE(0..2048)), -- = g^x mod n modSize BIT STRING (SIZE(0..2048)), -- n generator BIT STRING (SIZE(0..2048)), -- g ... } ECpoint ::= SEQUENCE -- uncompressed (x, y) affine coordinate representation of an elliptic curve point { x BIT STRING (SIZE(0..511)) OPTIONAL, y BIT STRING (SIZE(0..511)) OPTIONAL, ... } ECKASDH::= CHOICE -- parameters for elliptic curve key agreement scheme Diffie-Hellman { eckasdhp SEQUENCE -- parameters for elliptic curves of prime field { public-key ECpoint, -- This field contains representation of -- the ECKAS-DHp public key value. This field contains the -- initiator's ECKAS-DHp public key value (aP) when this -- information element is sent from originator to receiver. This -- field contains the responder's ECKAS-DHp public key value (bP) -- when this information element is sent back from receiver to -- originator. modulus BIT STRING (SIZE(0..511)), -- This field contains -- representation of the ECKAS-DHp public modulus value (p). base ECpoint, -- This field contains representation of the -- ECKAS-DHp public base (P). weierstrassA BIT STRING (SIZE(0..511)), -- This field contains -- representation of the ECKAS-DHp Weierstrass coefficient (a). weierstrassB BIT STRING (SIZE(0..511)) -- This field contains -- representation of the ECKAS-DHp Weierstrass coefficient (b). }, eckasdh2 SEQUENCE -- parameters for elliptic curves of characteristic 2 { public-key ECpoint, -- This field contains representation of -- the ECKAS-DH2 public key value. -- This field contains the initiator's ECKAS-DH2 public key value -- (aP) when this information element is sent from originator to -- receiver. This field contains the responder's ECKAS-DH2 public -- key value (bP) when this information element is sent back from -- receiver to originator. fieldSize BIT STRING (SIZE(0..511)), -- This field contains -- representation of the ECKAS-DH2 field size value (m). base ECpoint, -- This field contains representation of the -- ECKAS-DH2 public base (P). weierstrassA BIT STRING (SIZE(0..511)), -- This field contains -- representation of the ECKAS-DH2 Weierstrass coefficient (a). weierstrassB BIT STRING (SIZE(0..511)) -- This field contains -- representation of the ECKAS-DH2 Weierstrass coefficient (b). }, ... } ECGDSASignature::= SEQUENCE -- parameters for elliptic curve digital signature -- algorithm { r BIT STRING (SIZE(0..511)), -- This field contains the -- representation of the r component of the ECGDSA digital -- signature. s BIT STRING (SIZE(0..511)) -- This field contains the -- representation of the s component of the ECGDSA digital -- signature. } TypedCertificate ::= SEQUENCE { type OBJECT IDENTIFIER, certificate OCTET STRING, ... } AuthenticationBES ::= CHOICE { default NULL, -- encrypted ClearToken radius NULL, -- RADIUS-challenge/response ... } AuthenticationMechanism ::= CHOICE { dhExch NULL, -- Diffie-Hellman pwdSymEnc NULL, -- password with symmetric encryption pwdHash NULL, -- password with hashing certSign NULL, -- Certificate with signature ipsec NULL, -- IPSEC based connection tls NULL, nonStandard NonStandardParameter, -- something else. ..., authenticationBES AuthenticationBES, -- user authentication for BES keyExch OBJECT IDENTIFIER -- key exchange profile } ClearToken ::= SEQUENCE -- a "token" may contain multiple value types. { tokenOID OBJECT IDENTIFIER, timeStamp TimeStamp OPTIONAL, password Password OPTIONAL, dhkey DHset OPTIONAL, challenge ChallengeString OPTIONAL, random RandomVal OPTIONAL, certificate TypedCertificate OPTIONAL, generalID Identifier OPTIONAL, nonStandard NonStandardParameter OPTIONAL, ..., eckasdhkey ECKASDH OPTIONAL, -- elliptic curve Key Agreement -- Scheme-Diffie Hellman Analogue -- (ECKAS-DH) sendersID Identifier OPTIONAL, h235Key H235Key OPTIONAL, -- central distributed key in V3 profileInfo SEQUENCE OF ProfileElement OPTIONAL -- profile-specific } -- An object identifier should be placed in the tokenOID field when a -- ClearToken is included directly in a message (as opposed to being -- encrypted). In all other cases, an application should use the -- object identifier { 0 0 } to indicate that the tokenOID value is not -- present. -- Start all the cryptographic parameterized types here... -- ProfileElement ::= SEQUENCE { elementID INTEGER (0..255), -- element identifier, as defined by -- profile paramS Params OPTIONAL, -- any element-specific parameters element Element OPTIONAL, -- value in required form ... } Element ::= CHOICE { octets OCTET STRING, integer INTEGER, bits BIT STRING, name BMPString, flag BOOLEAN, ... } SIGNED { ToBeSigned } ::= SEQUENCE { toBeSigned ToBeSigned, algorithmOID OBJECT IDENTIFIER, paramS Params, -- any "runtime" parameters signature BIT STRING -- could be an RSA or an ASN.1 coded ECGDSA Signature } ( CONSTRAINED BY { -- Verify or Sign Certificate -- } ) ENCRYPTED { ToBeEncrypted } ::= SEQUENCE { algorithmOID OBJECT IDENTIFIER, paramS Params, -- any "runtime" parameters encryptedData OCTET STRING } ( CONSTRAINED BY { -- Encrypt or Decrypt -- ToBeEncrypted } ) HASHED { ToBeHashed } ::= SEQUENCE { algorithmOID OBJECT IDENTIFIER, paramS Params, -- any "runtime" parameters hash BIT STRING } ( CONSTRAINED BY { -- Hash -- ToBeHashed } ) IV8 ::= OCTET STRING (SIZE(8)) -- initial value for 64-bit block ciphers IV16 ::= OCTET STRING (SIZE(16)) -- initial value for 128-bit block ciphers -- signing algorithm used must select one of these types of parameters -- needed by receiving end of signature. Params ::= SEQUENCE { ranInt INTEGER OPTIONAL, -- some integer value iv8 IV8 OPTIONAL, -- 8-octet initialization vector ..., iv16 IV16 OPTIONAL, -- 16-octet initialization vector iv OCTET STRING OPTIONAL, -- arbitrary length initialization vector clearSalt OCTET STRING OPTIONAL -- unencrypted salting key for encryption } EncodedGeneralToken ::= TYPE-IDENTIFIER.&Type (ClearToken -- general usage token -- ) PwdCertToken ::= ClearToken (WITH COMPONENTS {..., timeStamp PRESENT, generalID PRESENT}) EncodedPwdCertToken ::= TYPE-IDENTIFIER.&Type (PwdCertToken) CryptoToken::= CHOICE { cryptoEncryptedToken SEQUENCE -- General purpose/application specific token { tokenOID OBJECT IDENTIFIER, token ENCRYPTED { EncodedGeneralToken } }, cryptoSignedToken SEQUENCE -- General purpose/application specific token { tokenOID OBJECT IDENTIFIER, token SIGNED { EncodedGeneralToken } }, cryptoHashedToken SEQUENCE -- General purpose/application specific token { tokenOID OBJECT IDENTIFIER, hashedVals ClearToken, token HASHED { EncodedGeneralToken } }, cryptoPwdEncr ENCRYPTED { EncodedPwdCertToken }, ... } -- These allow the passing of session keys within the H.245 OLC structure. -- They are encoded as standalone ASN.1 and based as an OCTET STRING within -- H.245 H235Key ::=CHOICE -- This is used with the H.245 or ClearToken "h235Key" field { secureChannel KeyMaterial, sharedSecret ENCRYPTED {EncodedKeySyncMaterial}, certProtectedKey SIGNED {EncodedKeySignedMaterial }, ..., secureSharedSecret V3KeySyncMaterial -- for H.235 V3 endpoints } KeySignedMaterial ::= SEQUENCE { generalId Identifier, -- slave's alias mrandom RandomVal, -- master's random value srandom RandomVal OPTIONAL, -- slave's random value timeStamp TimeStamp OPTIONAL, -- master's timestamp for unsolicited EU encrptval ENCRYPTED { EncodedKeySyncMaterial } } EncodedKeySignedMaterial ::= TYPE-IDENTIFIER.&Type (KeySignedMaterial) H235CertificateSignature ::= SEQUENCE { certificate TypedCertificate, responseRandom RandomVal, requesterRandom RandomVal OPTIONAL, signature SIGNED { EncodedReturnSig }, ... } ReturnSig ::= SEQUENCE { generalId Identifier, -- slave's alias responseRandom RandomVal, requestRandom RandomVal OPTIONAL, certificate TypedCertificate OPTIONAL -- requested certificate } EncodedReturnSig ::= TYPE-IDENTIFIER.&Type (ReturnSig) KeySyncMaterial ::= SEQUENCE { generalID Identifier, keyMaterial KeyMaterial, ... } EncodedKeySyncMaterial ::=TYPE-IDENTIFIER.&Type (KeySyncMaterial) V3KeySyncMaterial ::= SEQUENCE { generalID Identifier OPTIONAL, -- peer terminal ID algorithmOID OBJECT IDENTIFIER OPTIONAL, -- encryption algorithm paramS Params, -- IV encryptedSessionKey OCTET STRING OPTIONAL, -- encrypted session key encryptedSaltingKey OCTET STRING OPTIONAL, -- encrypted media salting -- key clearSaltingKey OCTET STRING OPTIONAL, -- unencrypted media salting -- key paramSsalt Params OPTIONAL, -- IV (and clear salt) for salting -- key encryption keyDerivationOID OBJECT IDENTIFIER OPTIONAL, -- key derivation -- method ..., genericKeyMaterial OCTET STRING OPTIONAL -- ASN.1-encoded key material -- form is dependent on associated media encryption tag } END -- End of H235-SECURITY-MESSAGES DEFINITIONS h323plus/src/asn/h4507.asn0000644000175000017500000000730110655704731013742 0ustar markmarkMessage-Waiting-Indication-Operations { itu-t recommendation h 450 7 version1(0) message-waiting-operations(0) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS Extension FROM H4501 -- Manufacturer-specific-service-extension-definition { itu-t recommendation h 450 1 version1(0) msi-definition(18) } userNotSubscribed, invalidServedUserNumber, basicServiceNotProvided FROM H4501 -- H4501-General-Error-List { itu-t recommendation h 450 1 version1(0) general-error-list(1) } EndpointAddress FROM H4501 -- Addressing-Data-Elements { itu-t recommendation h 450 1 version1(0) addressing-data-elements(9) } MixedExtension FROM H4504 -- Call-Hold-Operations { itu-t recommendation h 450 4 version1(0) call-hold-operations(0) }; H323-MWI-Operations ::= ENUMERATED { mwiActivate(80), mwiDeactivate(81), mwiInterrogate(82) } MWIActivateArg ::= SEQUENCE { servedUserNr EndpointAddress, basicService BasicService, msgCentreId MsgCentreId OPTIONAL, nbOfMessages NbOfMessages OPTIONAL, originatingNr EndpointAddress OPTIONAL, timestamp TimeStamp OPTIONAL, priority INTEGER (0..9) OPTIONAL, -- the value 0 means the highest priority and 9 the lowest extensionArg SEQUENCE SIZE(0..255) OF MixedExtension OPTIONAL, ... } DummyRes ::= SEQUENCE SIZE(0..255) OF MixedExtension MWIDeactivateArg ::= SEQUENCE { servedUserNr EndpointAddress, basicService BasicService, msgCentreId MsgCentreId OPTIONAL, callbackReq BOOLEAN OPTIONAL, extensionArg SEQUENCE SIZE(0..255) OF MixedExtension OPTIONAL, ... } MWIInterrogateArg ::= SEQUENCE { servedUserNr EndpointAddress, basicService BasicService, msgCentreId MsgCentreId OPTIONAL, callbackReq BOOLEAN OPTIONAL, extensionArg SEQUENCE SIZE(0..255) OF MixedExtension OPTIONAL, ... } MWIInterrogateRes ::= SEQUENCE SIZE(1..64) OF MWIInterrogateResElt MWIInterrogateResElt ::= SEQUENCE { basicService BasicService, msgCentreId MsgCentreId OPTIONAL, nbOfMessages NbOfMessages OPTIONAL, originatingNr EndpointAddress OPTIONAL, timestamp TimeStamp OPTIONAL, priority INTEGER (0..9) OPTIONAL, -- the value 0 means the highest priority and 9 the lowest extensionArg SEQUENCE SIZE(0..255) OF MixedExtension OPTIONAL, ... } MsgCentreId ::= CHOICE { -- only partyNumber provides a callable identification integer INTEGER (0..65535), partyNumber EndpointAddress, numericString NumericString (SIZE (1..10)) } NbOfMessages ::= INTEGER (0..65535) TimeStamp ::= GeneralizedTime (SIZE (12..19)) -- a VisibleString representation of date and time following ISO 8601 -- containing: -- - the (local) date in 8 digits (YYYYMMDD), -- - followed by (local) time of day in 4 or 6 digits (HHMM[SS]), -- - optionally followed by the letter "Z" or by a local time differential -- from UTC time in 5 digits ("+"HHMM or "-"HHMM); -- Examples: -- 1) 19970621194530, meaning 21 June 1997, 19:45:30; -- 2) 19970621194530Z, meaning the same as 1); -- 3) 19970621194530-0500, meaning the same as 1), -- 5 hours retarded in relation to UTC time MessageWaitingIndicationErrors ::= ENUMERATED { notActivated(31), undefined(2002), invalidMsgCentreId(1018) } BasicService ::= ENUMERATED { allServices(0), speech(1), unrestrictedDigitalInformation(2), audio3100Hz(3), telephony(32), teletex(33), telefaxGroup4Class1(34), videotexSyntaxBased(35), videotelephony(36) } END -- of Message-Waiting-Indication-Operations h323plus/src/asn/x880.asn0000644000175000017500000000562510655704732013712 0ustar markmarkRemote-Operations-Apdus { itu-t recommendation h 450 1 version1(0) remote-operations-apdus(11) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN -- exports everything ROS ::= CHOICE { invoke [1] Invoke, returnResult [2] ReturnResult, returnError [3] ReturnError, reject [4] Reject } Invoke ::= SEQUENCE { invokeId InvokeId (0..65535), linkedId InvokeId OPTIONAL, opcode Code, argument OCTET STRING OPTIONAL -- argument is an OpenType constrained by the opcode } ReturnResult ::= SEQUENCE { invokeId InvokeId, result SEQUENCE { opcode Code, result OCTET STRING, -- result is an OpenType constrained by the opcode ... } OPTIONAL } ReturnError ::= SEQUENCE { invokeId InvokeId, errorCode Code, parameter OCTET STRING OPTIONAL -- parameter is an OpenType constrained by the opcode } Reject ::= SEQUENCE { invokeId InvokeId, problem CHOICE { general GeneralProblem, invoke InvokeProblem, returnResult ReturnResultProblem, returnError ReturnErrorProblem } } GeneralProblem ::= INTEGER { unrecognizedComponent (0), mistypedComponent (1), badlyStructuredComponent (2) } InvokeProblem ::= INTEGER { duplicateInvocation (0), unrecognizedOperation (1), mistypedArgument (2), resourceLimitation (3), releaseInProgress (4), unrecognizedLinkedId (5), linkedResponseUnexpected (6), unexpectedLinkedOperation (7) } ReturnResultProblem ::= INTEGER { unrecognizedInvocation (0), resultResponseUnexpected (1), mistypedResult (2) } ReturnErrorProblem ::= INTEGER { unrecognizedInvocation (0), errorResponseUnexpected (1), unrecognizedError (2), unexpectedError (3), mistypedParameter (4) } RejectProblem ::= INTEGER { general-unrecognizedPDU (0), general-mistypedPDU (1), general-badlyStructuredPDU (2), invoke-duplicateInvocation (10), invoke-unrecognizedOperation (11), invoke-mistypedArgument (12), invoke-resourceLimitation (13), invoke-releaseInProgress (14), invoke-unrecognizedLinkedId (15), invoke-linkedResponseUnexpected (16), invoke-unexpectedLinkedOperation (17), returnResult-unrecognizedInvocation (20), returnResult-resultResponseUnexpected (21), returnResult-mistypedResult (22), returnError-unrecognizedInvocation (30), returnError-errorResponseUnexpected (31), returnError-unrecognizedError (32), returnError-unexpectedError (33), returnError-mistypedParameter (34) } InvokeId ::= INTEGER Code ::= CHOICE -- from X.880 { local INTEGER, global OBJECT IDENTIFIER } END -- end of Remote-Operations-Apdus definitions h323plus/src/asn/h46024b.asn0000644000175000017500000000077511664431722014172 0ustar markmarkMEDIA-TRAVERSAL {itu-t(0) recommendation(0) h(8) 460 24 2} DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS TransportAddress FROM MULTIMEDIA-SYSTEM-CONTROL; AlternateAddresses ::= SEQUENCE { addresses SEQUENCE OF AlternateAddress, ... } AlternateAddress ::= SEQUENCE { sessionID INTEGER(0..255), rtpAddress TransportAddress OPTIONAL, rtcpAddress TransportAddress OPTIONAL, multiplexID INTEGER(0..4294967295) OPTIONAL, ... } END h323plus/src/asn/gccpdu.asn0000644000175000017500000006635310655704730014453 0ustar markmarkGCC-PROTOCOL DEFINITIONS AUTOMATIC TAGS ::= BEGIN -- Export all symbols -- ========================================================================== -- Part 1: Elements of which messages are composed -- ========================================================================== ChannelID ::= INTEGER (1..65535) StaticChannelID ::= INTEGER (1..1000) -- Those assigned by specifications DynamicChannelID ::= INTEGER (1001..65535) -- Those created and deleted by MCS UserID ::= DynamicChannelID TokenID ::= INTEGER (1..65535) StaticTokenID ::= INTEGER (1..16383) -- Those assigned by specifications DynamicTokenID ::= INTEGER (16384..65535) -- Those assigned by the registry Time ::= INTEGER (-2147483647..2147483647) -- Time in seconds Handle ::= INTEGER (0..4294967295) -- 32-bit value H221NonStandardIdentifier ::= OCTET STRING (SIZE (4..255)) -- First four octets shall be country code and -- Manufacturer code, assigned as specified in -- H.221 Annex A for NS-cap and NS-comm Key ::= CHOICE -- Identifier of a standard or non-standard object { object OBJECT IDENTIFIER, h221NonStandard H221NonStandardIdentifier } NonStandardParameter ::= SEQUENCE { key Key, data OCTET STRING } TextString ::= BMPString (SIZE (0..255)) -- Basic Multilingual Plane of ISO/IEC 10646-1 (Unicode) simpleTextFirstCharacter UniversalString ::= {0, 0, 0, 0} simpleTextLastCharacter UniversalString ::= {0, 0, 0, 255} SimpleTextString ::= BMPString (SIZE (0..255)) (FROM (simpleTextFirstCharacter..simpleTextLastCharacter)) SimpleNumericString ::= NumericString (SIZE (1..255)) (FROM ("0123456789")) DialingString ::= NumericString (SIZE (1..16)) (FROM ("0123456789")) SubAddressString ::= NumericString (SIZE (1..40)) (FROM ("0123456789")) ExtraDialingString ::= TextString (SIZE (1..255)) (FROM ("0123456789#*,")) UserData ::= SET OF SEQUENCE { key Key, value OCTET STRING OPTIONAL } Password ::= SEQUENCE { numeric SimpleNumericString, text SimpleTextString OPTIONAL, ... } PasswordSelector ::= CHOICE { numeric SimpleNumericString, text SimpleTextString, ... } ChallengeResponseItem ::= CHOICE { passwordString PasswordSelector, responseData UserData, ... } ChallengeResponseAlgorithm ::= CHOICE { passwordInTheClear NULL, nonStandardAlgorithm NonStandardParameter, ... } ChallengeItem ::= SEQUENCE { responseAlgorithm ChallengeResponseAlgorithm, challengeData UserData, ... } ChallengeRequest ::= SEQUENCE { challengeTag INTEGER, challengeSet SET OF ChallengeItem, -- Set of algorithms offered for response ... } ChallengeResponse ::= SEQUENCE { challengeTag INTEGER, responseAlgorithm ChallengeResponseAlgorithm, -- Specific algorithm selected from the set of -- items presented in the ChallengeRequest responseItem ChallengeResponseItem, ... } PasswordChallengeRequestResponse ::= CHOICE { passwordInTheClear PasswordSelector, challengeRequestResponse SEQUENCE { challengeRequest ChallengeRequest OPTIONAL, challengeResponse ChallengeResponse OPTIONAL, ... }, ... } ConferenceName ::= SEQUENCE { numeric SimpleNumericString, text SimpleTextString OPTIONAL, ... } ConferenceNameSelector ::= CHOICE { numeric SimpleNumericString, text SimpleTextString, ... } ConferenceNameModifier ::= SimpleNumericString Privilege ::= ENUMERATED { terminate (0), ejectUser (1), add (2), lockUnlock (3), transfer (4), ... } TerminationMethod ::= ENUMERATED { automatic (0), manual (1), ... } ConferencePriorityScheme ::= CHOICE { nonStandardScheme NonStandardParameter, ... } ConferencePriority ::= SEQUENCE { priority INTEGER (0..65535), scheme ConferencePriorityScheme, ... } NetworkAddress ::= SEQUENCE (SIZE (1..64)) OF CHOICE -- Listed in order of use { aggregatedChannel SEQUENCE { transferModes SEQUENCE -- One or more { speech BOOLEAN, voice-band BOOLEAN, digital-56k BOOLEAN, digital-64k BOOLEAN, digital-128k BOOLEAN, digital-192k BOOLEAN, digital-256k BOOLEAN, digital-320k BOOLEAN, digital-384k BOOLEAN, digital-512k BOOLEAN, digital-768k BOOLEAN, digital-1152k BOOLEAN, digital-1472k BOOLEAN, digital-1536k BOOLEAN, digital-1920k BOOLEAN, packet-mode BOOLEAN, frame-mode BOOLEAN, atm BOOLEAN, ... }, internationalNumber DialingString, subAddress SubAddressString OPTIONAL, extraDialing ExtraDialingString OPTIONAL, highLayerCompatibility SEQUENCE { telephony3kHz BOOLEAN, telephony7kHz BOOLEAN, videotelephony BOOLEAN, videoconference BOOLEAN, audiographic BOOLEAN, audiovisual BOOLEAN, multimedia BOOLEAN, ... } OPTIONAL, ... }, transportConnection SEQUENCE { nsapAddress OCTET STRING (SIZE (1..20)), transportSelector OCTET STRING OPTIONAL }, nonStandard NonStandardParameter, ... } NodeType ::= ENUMERATED { terminal (0), multiportTerminal (1), mcu (2), ... } NodeProperties ::= SEQUENCE { managementDevice BOOLEAN, -- Is the node a device such as a reservation system peripheralDevice BOOLEAN, -- Is the node a peripheral to a primary node ... } AsymmetryIndicator ::= CHOICE { callingNode NULL, calledNode NULL, unknown INTEGER (0..4294967295) -- Uniformly distributed 32-bit random number } AlternativeNodeID ::= CHOICE { h243NodeID OCTET STRING (SIZE (2)), ... } ConferenceDescriptor ::= SEQUENCE { conferenceName ConferenceName, conferenceNameModifier ConferenceNameModifier OPTIONAL, conferenceDescription TextString OPTIONAL, lockedConference BOOLEAN, passwordInTheClearRequired BOOLEAN, networkAddress NetworkAddress OPTIONAL, ..., defaultConferenceFlag BOOLEAN } NodeRecord ::= SEQUENCE { superiorNode UserID OPTIONAL, -- Not present only for the Top GCC Provider nodeType NodeType, nodeProperties NodeProperties, nodeName TextString OPTIONAL, participantsList SEQUENCE OF TextString OPTIONAL, siteInformation TextString OPTIONAL, networkAddress NetworkAddress OPTIONAL, alternativeNodeID AlternativeNodeID OPTIONAL, userData UserData OPTIONAL, ... } SessionKey ::= SEQUENCE { applicationProtocolKey Key, sessionID ChannelID OPTIONAL } ChannelType ::= ENUMERATED { static (0), dynamicMulticast (1), dynamicPrivate (2), dynamicUserId (3) } ApplicationRecord ::= SEQUENCE { applicationActive BOOLEAN, -- Active/Inactive flag conductingOperationCapable BOOLEAN, -- Maximum one per node per session startupChannel ChannelType OPTIONAL, applicationUserID UserID OPTIONAL, -- User ID assigned to the Application Protocol Entity nonCollapsingCapabilities SET OF SEQUENCE { capabilityID CapabilityID, applicationData OCTET STRING OPTIONAL } OPTIONAL, ... } CapabilityID ::= CHOICE { standard INTEGER (0..65535), -- Assigned by Application Protocol specifications nonStandard Key } CapabilityClass ::= CHOICE { logical NULL, unsignedMin INTEGER (0..MAX), -- Capability value unsignedMax INTEGER (0..MAX), -- Capability value ... } EntityID ::= INTEGER (0..65535) ApplicationInvokeSpecifier ::= SEQUENCE { sessionKey SessionKey, expectedCapabilitySet SET OF SEQUENCE { capabilityID CapabilityID, capabilityClass CapabilityClass, ... } OPTIONAL, startupChannel ChannelType OPTIONAL, mandatoryFlag BOOLEAN, -- TRUE indicates required Application Protocol Entity ... } RegistryKey ::= SEQUENCE { sessionKey SessionKey, resourceID OCTET STRING (SIZE (0..64)) } RegistryItem ::= CHOICE { channelID DynamicChannelID, tokenID DynamicTokenID, parameter OCTET STRING (SIZE (0..64)), vacant NULL, ... } RegistryEntryOwner ::= CHOICE { owned SEQUENCE { nodeID UserID, -- Node ID of the owning node entityID EntityID -- Entity ID of the owning }, -- Appliction Protocol Entity notOwned NULL -- There is no current owner } RegistryModificationRights ::= ENUMERATED { owner (0), session (1), public (2) } -- ========================================================================== -- Part 2: PDU Messages -- ========================================================================== UserIDIndication ::= SEQUENCE { tag INTEGER, ... } ConferenceCreateRequest ::= SEQUENCE { -- MCS-Connect-Provider request user data conferenceName ConferenceName, convenerPassword Password OPTIONAL, password Password OPTIONAL, lockedConference BOOLEAN, listedConference BOOLEAN, conductibleConference BOOLEAN, terminationMethod TerminationMethod, conductorPrivileges SET OF Privilege OPTIONAL, conductedPrivileges SET OF Privilege OPTIONAL, nonConductedPrivileges SET OF Privilege OPTIONAL, conferenceDescription TextString OPTIONAL, callerIdentifier TextString OPTIONAL, userData UserData OPTIONAL, ..., conferencePriority ConferencePriority OPTIONAL } ConferenceCreateResponse ::= SEQUENCE { -- MCS-Connect-Provider response user data nodeID UserID, -- Node ID of the sending node tag INTEGER, result ENUMERATED { success (0), userRejected (1), resourcesNotAvailable (2), rejectedForSymmetryBreaking (3), lockedConferenceNotSupported (4), ... }, userData UserData OPTIONAL, ... } ConferenceQueryRequest ::= SEQUENCE { -- MCS-Connect-Provider request user data nodeType NodeType, asymmetryIndicator AsymmetryIndicator OPTIONAL, userData UserData OPTIONAL, ... } ConferenceQueryResponse ::= SEQUENCE { -- MCS-Connect-Provider response user data nodeType NodeType, asymmetryIndicator AsymmetryIndicator OPTIONAL, conferenceList SET OF ConferenceDescriptor, result ENUMERATED { success (0), userRejected (1), ... }, userData UserData OPTIONAL, ..., waitForInvitationFlag BOOLEAN OPTIONAL, noUnlistedConferenceFlag BOOLEAN OPTIONAL } ConferenceJoinRequest ::= SEQUENCE { -- MCS-Connect-Provider request user data as well as -- MCS-Send-Data on Node ID Channel of Top GCC sent -- by the receiver of the MCS-Connect-Provider conferenceName ConferenceNameSelector OPTIONAL, -- Required when part of MCS-Connect-Provider conferenceNameModifier ConferenceNameModifier OPTIONAL, tag INTEGER OPTIONAL, -- Filled in when sent on Node ID Channel of Top GCC password PasswordChallengeRequestResponse OPTIONAL, convenerPassword PasswordSelector OPTIONAL, callerIdentifier TextString OPTIONAL, userData UserData OPTIONAL, ... } ConferenceJoinResponse ::= SEQUENCE { -- MCS-Connect-Provider response user data as well as -- MCS-Send-Data on Node ID Channel of -- the receiver of the MCS-Connect-Provider nodeID UserID OPTIONAL, -- Node ID of directly connected node only topNodeID UserID, -- Node ID of Top GCC Provider tag INTEGER, conferenceNameAlias ConferenceNameSelector OPTIONAL, passwordInTheClearRequired BOOLEAN, lockedConference BOOLEAN, listedConference BOOLEAN, conductibleConference BOOLEAN, terminationMethod TerminationMethod, conductorPrivileges SET OF Privilege OPTIONAL, -- No privilege shall be listed more than once conductedPrivileges SET OF Privilege OPTIONAL, -- No privilege shall be listed more than once nonConductedPrivileges SET OF Privilege OPTIONAL, -- No privilege shall be listed more than once conferenceDescription TextString OPTIONAL, password PasswordChallengeRequestResponse OPTIONAL, result ENUMERATED { success (0), userRejected (1), invalidConference (2), invalidPassword (3), invalidConvenerPassword (4), challengeResponseRequired (5), invalidChallengeResponse (6), ... }, userData UserData OPTIONAL, ... } ConferenceInviteRequest ::= SEQUENCE { -- MCS-Connect-Provider request user data conferenceName ConferenceName, nodeID UserID, -- Node ID of the sending node topNodeID UserID, -- Node ID of Top GCC Provider tag INTEGER, passwordInTheClearRequired BOOLEAN, lockedConference BOOLEAN, listedConference BOOLEAN, conductibleConference BOOLEAN, terminationMethod TerminationMethod, conductorPrivileges SET OF Privilege OPTIONAL, -- No privilege shall be listed more than once conductedPrivileges SET OF Privilege OPTIONAL, -- No privilege shall be listed more than once nonConductedPrivileges SET OF Privilege OPTIONAL, -- No privilege shall be listed more than once conferenceDescription TextString OPTIONAL, callerIdentifier TextString OPTIONAL, userData UserData OPTIONAL, ..., conferencePriority ConferencePriority OPTIONAL } ConferenceInviteResponse ::= SEQUENCE { -- MCS-Connect-Provider response user data result ENUMERATED { success (0), userRejected (1), ... }, userData UserData OPTIONAL, ... } ConferenceAddRequest ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC or -- Node ID Channel of Adding MCU if specified networkAddress NetworkAddress, requestingNode UserID, tag INTEGER, addingMCU UserID OPTIONAL, userData UserData OPTIONAL, ... } ConferenceAddResponse ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel of requester tag INTEGER, result ENUMERATED { success (0), invalidRequester (1), invalidNetworkType (2), invalidNetworkAddress (3), addedNodeBusy (4), networkBusy (5), noPortsAvailable (6), connectionUnsuccessful (7), ... }, userData UserData OPTIONAL, ... } ConferenceLockRequest ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC -- No parameters ... } ConferenceLockResponse ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel of requester result ENUMERATED { success (0), invalidRequester (1), alreadyLocked (2), ... }, ... } ConferenceLockIndication ::= SEQUENCE { -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel -- or MCS-Send-Data on Node ID Channel -- No parameters ... } ConferenceUnlockRequest ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC -- No parameters ... } ConferenceUnlockResponse ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel of requester result ENUMERATED { success (0), invalidRequester (1), alreadyUnlocked (2), ... }, ... } ConferenceUnlockIndication ::= SEQUENCE { -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel -- or MCS-Send-Data on Node ID Channel -- No parameters ... } ConferenceTerminateRequest ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC reason ENUMERATED { userInitiated (0), timedConferenceTermination (1), ... }, ... } ConferenceTerminateResponse ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel of requester result ENUMERATED { success (0), invalidRequester (1), ... }, ... } ConferenceTerminateIndication ::= SEQUENCE { -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel reason ENUMERATED { userInitiated (0), timedConferenceTermination (1), ... }, ... } ConferenceEjectUserRequest ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC nodeToEject UserID, -- Node ID of the node to eject reason ENUMERATED { userInitiated (0), ... }, ... } ConferenceEjectUserResponse ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel of requester nodeToEject UserID, -- Node ID of the node to eject result ENUMERATED { success (0), invalidRequester (1), invalidNode (2), ... }, ... } ConferenceEjectUserIndication ::= SEQUENCE { -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel nodeToEject UserID, -- Node ID of the node to eject reason ENUMERATED { userInitiated (0), higherNodeDisconnected (1), higherNodeEjected (2), ... }, ... } ConferenceTransferRequest ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC conferenceName ConferenceNameSelector, -- Name of conference to transfer to conferenceNameModifier ConferenceNameModifier OPTIONAL, networkAddress NetworkAddress OPTIONAL, transferringNodes SET (SIZE (1..65536)) OF UserID OPTIONAL, password PasswordSelector OPTIONAL, ... } ConferenceTransferResponse ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel of requester conferenceName ConferenceNameSelector, -- Name of conference to transfer to conferenceNameModifier ConferenceNameModifier OPTIONAL, transferringNodes SET (SIZE (1..65536)) OF UserID OPTIONAL, result ENUMERATED { success (0), invalidRequester (1), ... }, ... } ConferenceTransferIndication ::= SEQUENCE { -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel conferenceName ConferenceNameSelector, -- Name of conference to transfer to conferenceNameModifier ConferenceNameModifier OPTIONAL, networkAddress NetworkAddress OPTIONAL, transferringNodes SET (SIZE (1..65536)) OF UserID OPTIONAL, -- List of Node IDs, -- not present if destined for all nodes password PasswordSelector OPTIONAL, ... } RosterUpdateIndication ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel or -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel fullRefresh BOOLEAN, -- Conference Roster and all -- ApplicationProtocol Sessions refreshed nodeInformation SEQUENCE { nodeRecordList CHOICE { noChange NULL, refresh SET (SIZE (1..65536)) OF SEQUENCE -- One for each node in the conference; -- no node shall be listed more than once { nodeID UserID, -- Node ID of the node nodeRecord NodeRecord }, update SET (SIZE (1..65536)) OF SEQUENCE -- One for each node changing its node record; -- no node shall be listed more than once { nodeID UserID, -- Node ID of the node nodeUpdate CHOICE { addRecord NodeRecord, replaceRecord NodeRecord, removeRecord NULL, ... } }, ... }, rosterInstanceNumber INTEGER (0..65535), nodesAdded BOOLEAN, -- Nodes have been added since last instance nodesRemoved BOOLEAN, -- Nodes have been removed since last instance ... } , applicationInformation SET (SIZE (0..65535)) OF SEQUENCE -- One for each Application Protocol Session; -- all Application Protocol Sessions if full refresh; -- no Application Protocol Session shall be -- listed more than once { sessionKey SessionKey, applicationRecordList CHOICE { noChange NULL, refresh SET (SIZE (0..65535)) OF SEQUENCE -- One for each node with the -- Application Protocol Session enrolled; -- no node shall be listed more than once { nodeID UserID, -- Node ID of node entityID EntityID, -- ID for this Application Protocol Entity at this node applicationRecord ApplicationRecord }, update SET (SIZE (1..65536)) OF SEQUENCE -- One for each node modifying its Application Record; -- no node shall be listed more than once { nodeID UserID, -- Node ID of node entityID EntityID, -- ID for this Application Protocol Entity at this node applicationUpdate CHOICE { addRecord ApplicationRecord, replaceRecord ApplicationRecord, removeRecord NULL, ... } }, ... }, applicationCapabilitiesList CHOICE { noChange NULL, refresh SET OF SEQUENCE { capabilityID CapabilityID, capabilityClass CapabilityClass, numberOfEntities INTEGER (1..65536), -- Number of Application Protocol Entities -- which issued the capability ... }, ... }, rosterInstanceNumber INTEGER (0..65535), peerEntitiesAdded BOOLEAN, -- Peer Entities have been added since last instance peerEntitiesRemoved BOOLEAN, -- Peer Entities have been removed since last instance ... }, ... } ApplicationInvokeIndication ::= SEQUENCE { -- MCS-Send-Data or MCS-Uniform-Send-Data -- on GCC-Broadcast-Channel or Node ID Channel applicationProtocolEntiyList SET (SIZE (1..65536)) OF ApplicationInvokeSpecifier, destinationNodes SET (SIZE (1..65536)) OF UserID OPTIONAL, -- List of Node IDs, -- not presesnt if destined for all nodes ... } RegistryRegisterChannelRequest ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC entityID EntityID, key RegistryKey, channelID DynamicChannelID, ... } RegistryAssignTokenRequest ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC entityID EntityID, key RegistryKey, ... } RegistrySetParameterRequest ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC entityID EntityID, key RegistryKey, parameter OCTET STRING (SIZE (0..64)), modificationRights RegistryModificationRights OPTIONAL, ... } RegistryRetrieveEntryRequest ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC entityID EntityID, key RegistryKey, ... } RegistryDeleteEntryRequest ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC entityID EntityID, key RegistryKey, ... } RegistryMonitorEntryRequest ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC entityID EntityID, key RegistryKey, ... } RegistryMonitorEntryIndication ::= SEQUENCE { -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel key RegistryKey, item RegistryItem, -- Contents: channel, token, parameter, or empty owner RegistryEntryOwner, modificationRights RegistryModificationRights OPTIONAL, ... } RegistryAllocateHandleRequest ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC entityID EntityID, numberOfHandles INTEGER (1..1024), ... } RegistryAllocateHandleResponse ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel of requester entityID EntityID, numberOfHandles INTEGER (1..1024), firstHandle Handle, result ENUMERATED { successful (0), noHandlesAvailable (1), ... }, ... } RegistryResponse ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel of requester entityID EntityID, -- Entity ID of the requesting Application Protocol Entity primitiveType ENUMERATED { registerChannel (0), assignToken (1), setParameter (2), retrieveEntry (3), deleteEntry (4), monitorEntry (5), ... }, key RegistryKey, -- Database index item RegistryItem, -- Contents: channel, token, parameter, or vacant owner RegistryEntryOwner, modificationRights RegistryModificationRights OPTIONAL, result ENUMERATED { successful (0), belongsToOther (1), tooManyEntries (2), inconsistentType (3), entryNotFound (4), entryAlreadyExists (5), invalidRequester (6), ... }, ... } ConductorAssignIndication ::= SEQUENCE { -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel conductingNode UserID, ... } ConductorReleaseIndication ::= SEQUENCE { -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel -- No parameters ... } ConductorPermissionAskIndication ::= SEQUENCE { -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel grantFlag BOOLEAN, -- TRUE to request permission grant, FALSE to release ... } ConductorPermissionGrantIndication ::= SEQUENCE { -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel permissionList SEQUENCE (SIZE (0..65535)) OF UserID, -- Node ID of nodes granted permission waitingList SEQUENCE (SIZE (1..65536)) OF UserID OPTIONAL, -- Node ID of nodes waiting form permission ... } ConferenceTimeRemainingIndication ::= SEQUENCE { -- MCS-Send-Data on GCC-Broadcast-Channel timeRemaining Time, nodeID UserID OPTIONAL, ... } ConferenceTimeInquireIndication ::= SEQUENCE { -- MCS-Send-Data on GCC-Convener-Channel nodeSpecificTimeFlag BOOLEAN, -- FALSE for conference-wide, TRUE for node-specific ... } ConferenceTimeExtendIndication ::= SEQUENCE { -- MCS-Send-Data on GCC-Convener-Channel timeToExtend Time, nodeSpecificTimeFlag BOOLEAN, -- FALSE for conference-wide, TRUE for node-specific ... } ConferenceAssistanceIndication ::= SEQUENCE { -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel userData UserData OPTIONAL, ... } TextMessageIndication ::= SEQUENCE { -- MCS-Send-Data or MCS-Uniform-Send-Data message TextString, -- on GCC-Broadcast-Channel or Node ID Channel ... } FunctionNotSupportedResponse ::= SEQUENCE { request RequestPDU } NonStandardPDU ::= SEQUENCE { data NonStandardParameter, ... } -- ========================================================================== -- Part 3: Messages sent as MCS-Connect-Provider user data -- ========================================================================== ConnectData ::= SEQUENCE { t124Identifier Key, -- This shall be set to the value {itu recommendation t 124 version(0) 1} connectPDU OCTET STRING } ConnectGCCPDU ::= CHOICE { conferenceCreateRequest ConferenceCreateRequest, conferenceCreateResponse ConferenceCreateResponse, conferenceQueryRequest ConferenceQueryRequest, conferenceQueryResponse ConferenceQueryResponse, conferenceJoinRequest ConferenceJoinRequest, conferenceJoinResponse ConferenceJoinResponse, conferenceInviteRequest ConferenceInviteRequest, conferenceInviteResponse ConferenceInviteResponse, ... } -- ========================================================================== -- Part 4: Messages sent using MCS-Send-Data or MCS-Uniform-Send-Data -- ========================================================================== GCCPDU ::= CHOICE { request RequestPDU, response ResponsePDU, indication IndicationPDU } RequestPDU ::= CHOICE { conferenceJoinRequest ConferenceJoinRequest, conferenceAddRequest ConferenceAddRequest, conferenceLockRequest ConferenceLockRequest, conferenceUnlockRequest ConferenceUnlockRequest, conferenceTerminateRequest ConferenceTerminateRequest, conferenceEjectUserRequest ConferenceEjectUserRequest, conferenceTransferRequest ConferenceTransferRequest, registryRegisterChannelRequest RegistryRegisterChannelRequest, registryAssignTokenRequest RegistryAssignTokenRequest, registrySetParameterRequest RegistrySetParameterRequest, registryRetrieveEntryRequest RegistryRetrieveEntryRequest, registryDeleteEntryRequest RegistryDeleteEntryRequest, registryMonitorEntryRequest RegistryMonitorEntryRequest, registryAllocateHandleRequest RegistryAllocateHandleRequest, nonStandardRequest NonStandardPDU, ... } ResponsePDU ::= CHOICE { conferenceJoinResponse ConferenceJoinResponse, conferenceAddResponse ConferenceAddResponse, conferenceLockResponse ConferenceLockResponse, conferenceUnlockResponse ConferenceUnlockResponse, conferenceTerminateResponse ConferenceTerminateResponse, conferenceEjectUserResponse ConferenceEjectUserResponse, conferenceTransferResponse ConferenceTransferResponse, registryResponse RegistryResponse, registryAllocateHandleResponse RegistryAllocateHandleResponse, functionNotSupportedResponse FunctionNotSupportedResponse, nonStandardResponse NonStandardPDU, ... } IndicationPDU ::= CHOICE { userIDIndication UserIDIndication, conferenceLockIndication ConferenceLockIndication, conferenceUnlockIndication ConferenceUnlockIndication, conferenceTerminateIndication ConferenceTerminateIndication, conferenceEjectUserIndication ConferenceEjectUserIndication, conferenceTransferIndication ConferenceTransferIndication, rosterUpdateIndication RosterUpdateIndication, applicationInvokeIndication ApplicationInvokeIndication, registryMonitorEntryIndication RegistryMonitorEntryIndication, conductorAssignIndication ConductorAssignIndication, conductorReleaseIndication ConductorReleaseIndication, conductorPermissionAskIndication ConductorPermissionAskIndication, conductorPermissionGrantIndication ConductorPermissionGrantIndication, conferenceTimeRemainingIndication ConferenceTimeRemainingIndication, conferenceTimeInquireIndication ConferenceTimeInquireIndication, conferenceTimeExtendIndication ConferenceTimeExtendIndication, conferenceAssistanceIndication ConferenceAssistanceIndication, textMessageIndication TextMessageIndication, nonStandardIndication NonStandardPDU, ... } END h323plus/src/asn/h4504.asn0000644000175000017500000000315510655704731013742 0ustar markmarkCall-Hold-Operations { itu-t recommendation h 450 4 version1(0) call-hold-operations(0) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS EXTENSION, Extension FROM H4501 -- Manufacturer-specific-service-extension-definition { itu-t recommendation h 450 1 version1(0) msi-definition(18) } notAvailable, invalidCallState, resourceUnavailable, supplementaryServiceInteractionNotAllowed FROM H4501-General-Error-List { itu-t recommendation h 450 1 version1(0) general-error-list (1) } NonStandardParameter FROM H225; -- H323-MESSAGES CallHoldOperation ::= ENUMERATED { holdNotific(101), retrieveNotific(102), remoteHold(103), remoteRetrieve(104) } HoldNotificArg ::= SEQUENCE { extensionArg SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } RetrieveNotificArg ::= SEQUENCE { extensionArg SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } RemoteHoldArg ::= SEQUENCE { extensionArg SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } RemoteHoldRes ::= SEQUENCE { extensionRes SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } RemoteRetrieveArg ::= SEQUENCE { extensionArg SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } RemoteRetrieveRes ::= SEQUENCE { extensionRes SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } MixedExtension ::= CHOICE { extension Extension, nonStandardData NonStandardParameter } Extension ::= SEQUENCE { extensionId OBJECT IDENTIFIER, argument OCTET STRING } END -- of Call-Hold-Operations h323plus/src/asn/h501.asn0000644000175000017500000004133610655704731013656 0ustar markmark-- -- Abstract Syntax Notion (ASN.1) file for H.501 (2002) -- -- File provided by Packetizer, Inc. - http://www.packetizer.com -- Last Updated: 27 Feb 2003 -- H501-MESSAGES DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS AuthenticationMechanism, TimeStamp, ClearToken FROM H235 --SECURITY-MESSAGES AliasAddress, TransportAddress, ReleaseCompleteReason, ConferenceIdentifier, CallIdentifier, CryptoH323Token, CryptoToken, EndpointType, GatekeeperIdentifier, GloballyUniqueID, NonStandardParameter, NumberDigits, PartyNumber, SupportedProtocols, TransportQOS, VendorIdentifier, IntegrityMechanism, ICV, FeatureSet, GenericData, EnumeratedParameter, ServiceControlSession, CircuitInfo, CircuitIdentifier FROM H225; --H323-MESSAGES; Message ::= SEQUENCE { body MessageBody, common MessageCommonInfo, ... } MessageBody ::= CHOICE { serviceRequest ServiceRequest, serviceConfirmation ServiceConfirmation, serviceRejection ServiceRejection, serviceRelease ServiceRelease, descriptorRequest DescriptorRequest, descriptorConfirmation DescriptorConfirmation, descriptorRejection DescriptorRejection, descriptorIDRequest DescriptorIDRequest, descriptorIDConfirmation DescriptorIDConfirmation, descriptorIDRejection DescriptorIDRejection, descriptorUpdate DescriptorUpdate, descriptorUpdateAck DescriptorUpdateAck, accessRequest AccessRequest, accessConfirmation AccessConfirmation, accessRejection AccessRejection, requestInProgress RequestInProgress, nonStandardRequest NonStandardRequest, nonStandardConfirmation NonStandardConfirmation, nonStandardRejection NonStandardRejection, unknownMessageResponse UnknownMessageResponse, usageRequest UsageRequest, usageConfirmation UsageConfirmation, usageIndication UsageIndication, usageIndicationConfirmation UsageIndicationConfirmation, usageIndicationRejection UsageIndicationRejection, usageRejection UsageRejection, validationRequest ValidationRequest, validationConfirmation ValidationConfirmation, validationRejection ValidationRejection, ..., authenticationRequest AuthenticationRequest, authenticationConfirmation AuthenticationConfirmation, authenticationRejection AuthenticationRejection } MessageCommonInfo ::= SEQUENCE { sequenceNumber INTEGER (0..65535), annexGversion ProtocolVersion, -- set to "H.225.0 Annex G V2" hopCount INTEGER (1..255), replyAddress SEQUENCE OF TransportAddress OPTIONAL, -- Must be present in request integrityCheckValue ICV OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, nonStandard SEQUENCE OF NonStandardParameter OPTIONAL, ..., serviceID GloballyUniqueID OPTIONAL, --serviceID ServiceID OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL, featureSet FeatureSet OPTIONAL, version ProtocolVersion -- current H.501 protocol version } --ServiceID ::= GloballyUniqueID -- -- H.501 messages -- ServiceRequest ::= SEQUENCE { elementIdentifier ElementIdentifier OPTIONAL, domainIdentifier AliasAddress OPTIONAL, securityMode SEQUENCE OF SecurityMode OPTIONAL, timeToLive INTEGER (1..4294967295) OPTIONAL, ..., usageSpec UsageSpecification OPTIONAL } SecurityMode ::= SEQUENCE { authentication AuthenticationMechanism OPTIONAL, integrity IntegrityMechanism OPTIONAL, algorithmOIDs SEQUENCE OF OBJECT IDENTIFIER OPTIONAL, ... } ServiceConfirmation ::= SEQUENCE { elementIdentifier ElementIdentifier, domainIdentifier AliasAddress, alternates AlternatePEInfo OPTIONAL, securityMode SecurityMode OPTIONAL, timeToLive INTEGER (1..4294967295) OPTIONAL, ..., usageSpec UsageSpecification OPTIONAL } ServiceRejection ::= SEQUENCE { reason ServiceRejectionReason, alternates AlternatePEInfo OPTIONAL, ... } ServiceRejectionReason ::= CHOICE { serviceUnavailable NULL, serviceRedirected NULL, security NULL, continue NULL, undefined NULL, ..., unknownServiceID NULL, cannotSupportUsageSpec NULL, -- Cannot comply with proposed spec neededFeature NULL, genericDataReason NULL, usageUnavailable NULL, -- Usage reporting not supported unknownUsageSendTo NULL -- Usage sendTo could not be resolved } ServiceRelease ::= SEQUENCE { reason ServiceReleaseReason, alternates AlternatePEInfo OPTIONAL, ... } ServiceReleaseReason ::= CHOICE { outOfService NULL, maintenance NULL, terminated NULL, expired NULL, ... } DescriptorRequest ::= SEQUENCE { --descriptorID SEQUENCE OF DescriptorID, descriptorID SEQUENCE OF GloballyUniqueID, ... } DescriptorConfirmation ::= SEQUENCE { descriptor SEQUENCE OF Descriptor, ... } DescriptorRejection ::= SEQUENCE { reason DescriptorRejectionReason, --descriptorID DescriptorID OPTIONAL, descriptorID GloballyUniqueID OPTIONAL, ... } DescriptorRejectionReason ::= CHOICE { packetSizeExceeded NULL, -- use other transport type illegalID NULL, -- no descriptor for provided descriptorID security NULL, -- request did not meet security requirements hopCountExceeded NULL, noServiceRelationship NULL, undefined NULL, ..., neededFeature NULL, genericDataReason NULL, unknownServiceID NULL -- The serviceID is not recognized by -- the peer element } DescriptorIDRequest ::= SEQUENCE { ... } DescriptorIDConfirmation ::= SEQUENCE { descriptorInfo SEQUENCE OF DescriptorInfo, ... } DescriptorIDRejection ::= SEQUENCE { reason DescriptorIDRejectionReason, ... } DescriptorIDRejectionReason ::= CHOICE { noDescriptors NULL, -- no descriptors to report security NULL, -- request did not meet security requirements hopCountExceeded NULL, noServiceRelationship NULL, undefined NULL, ..., neededFeature NULL, genericDataReason NULL, unknownServiceID NULL -- The serviceID is not recognized by -- the peer element } DescriptorUpdate ::= SEQUENCE { sender AliasAddress, updateInfo SEQUENCE OF UpdateInformation, ... } UpdateInformation ::= SEQUENCE { descriptorInfo CHOICE { --descriptorID DescriptorID, descriptorID GloballyUniqueID, descriptor Descriptor, ... }, updateType CHOICE { added NULL, deleted NULL, changed NULL, ... }, ... } DescriptorUpdateAck ::= SEQUENCE { ... } AccessRequest ::= SEQUENCE { destinationInfo PartyInformation, sourceInfo PartyInformation OPTIONAL, callInfo CallInformation OPTIONAL, usageSpec UsageSpecification OPTIONAL, ..., desiredProtocols SEQUENCE OF SupportedProtocols OPTIONAL } AccessConfirmation ::= SEQUENCE { templates SEQUENCE OF AddressTemplate, partialResponse BOOLEAN, ..., supportedProtocols SEQUENCE OF SupportedProtocols OPTIONAL, serviceControl SEQUENCE OF ServiceControlSession OPTIONAL } AccessRejection ::= SEQUENCE { reason AccessRejectionReason, ..., serviceControl SEQUENCE OF ServiceControlSession OPTIONAL } AccessRejectionReason ::= CHOICE { noMatch NULL, -- no template matched the destinationInfo packetSizeExceeded NULL, -- use other transport type security NULL, -- request did not meet security requirements hopCountExceeded NULL, needCallInformation NULL, -- Call Information must be specified noServiceRelationship NULL, undefined NULL, ..., neededFeature NULL, genericDataReason NULL, destinationUnavailable NULL, -- Destination was resolved but is -- unavailable aliasesInconsistent NULL, -- Multiple aliases identify distinct -- destinations resourceUnavailable NULL, -- One or more required resources are -- unavailable incompleteAddress NULL, -- Destination cannot be distinctly -- identified unknownServiceID NULL, -- The serviceID is not recognized by -- the peer element usageUnavailable NULL, -- Usage reporting not supported cannotSupportUsageSpec NULL, -- Cannot comply with proposed spec unknownUsageSendTo NULL -- Usage sendTo could not be resolved } UsageRequest ::= SEQUENCE { callInfo CallInformation, usageSpec UsageSpecification, ... } UsageConfirmation ::= SEQUENCE { ... } UsageRejection ::= SEQUENCE { reason UsageRejectReason, ... } UsageIndication ::= SEQUENCE { callInfo CallInformation, accessTokens SEQUENCE OF AccessToken OPTIONAL, senderRole Role, usageCallStatus UsageCallStatus, srcInfo PartyInformation OPTIONAL, destAddress PartyInformation, startTime TimeStamp OPTIONAL, endTime TimeStamp OPTIONAL, terminationCause TerminationCause OPTIONAL, usageFields SEQUENCE OF UsageField, ... } UsageField ::= SEQUENCE { id OBJECT IDENTIFIER, value OCTET STRING, ... } UsageRejectReason ::= CHOICE { invalidCall NULL, unavailable NULL, security NULL, noServiceRelationship NULL, undefined NULL, ..., neededFeature NULL, genericDataReason NULL, unknownServiceID NULL -- The serviceID is not recognized by -- the peer element } UsageIndicationConfirmation ::= SEQUENCE { ... } UsageIndicationRejection ::= SEQUENCE { reason UsageIndicationRejectionReason, ... } UsageIndicationRejectionReason ::= CHOICE { unknownCall NULL, incomplete NULL, security NULL, noServiceRelationship NULL, undefined NULL, ..., neededFeature NULL, genericDataReason NULL, unknownServiceID NULL -- The serviceID is not recognized by -- the peer element } ValidationRequest ::= SEQUENCE { accessToken SEQUENCE OF AccessToken OPTIONAL, destinationInfo PartyInformation OPTIONAL, sourceInfo PartyInformation OPTIONAL, callInfo CallInformation, usageSpec UsageSpecification OPTIONAL, ... } ValidationConfirmation ::= SEQUENCE { destinationInfo PartyInformation OPTIONAL, usageSpec UsageSpecification OPTIONAL, ... } ValidationRejection ::= SEQUENCE { reason ValidationRejectionReason, ... } ValidationRejectionReason ::= CHOICE { tokenNotValid NULL, security NULL, -- request did not meet security requirements hopCountExceeded NULL, missingSourceInfo NULL, missingDestInfo NULL, noServiceRelationship NULL, undefined NULL, ..., neededFeature NULL, genericDataReason NULL, unknownServiceID NULL -- The serviceID is not recognized by -- the peer element } RequestInProgress ::= SEQUENCE { delay INTEGER (1..65535), ..., serviceControl SEQUENCE OF ServiceControlSession OPTIONAL } NonStandardRequest ::= SEQUENCE { ... } NonStandardConfirmation ::= SEQUENCE { ... } NonStandardRejection ::= SEQUENCE { reason NonStandardRejectionReason, ... } NonStandardRejectionReason ::= CHOICE { notSupported NULL, noServiceRelationship NULL, undefined NULL, ..., neededFeature NULL, genericDataReason NULL, unknownServiceID NULL -- The serviceID is not recognized by -- the peer element } UnknownMessageResponse ::= SEQUENCE { unknownMessage OCTET STRING, reason UnknownMessageReason, ... } UnknownMessageReason ::= CHOICE { notUnderstood NULL, undefined NULL, ... } AuthenticationRequest ::= SEQUENCE { applicationMessage ApplicationMessage, -- e.g. RAS message in -- ITU-T Rec. H.323 ... } ApplicationMessage ::= OCTET STRING AuthenticationConfirmation ::= SEQUENCE { ... } AuthenticationRejection ::= SEQUENCE { reason AuthenticationRejectionReason, ... } AuthenticationRejectionReason ::= CHOICE { security NULL, hopCountExceeded NULL, noServiceRelationship NULL, undefined NULL, neededFeature NULL, genericDataReason NULL, unknownServiceID NULL, securityWrongSyncTime NULL, -- time server problem or network delay securityReplay NULL, -- replay attack encountered securityWrongGeneralID NULL, -- wrong general ID securityWrongSendersID NULL, -- wrong senders ID securityIntegrityFailed NULL, -- integrity check failed securityWrongOID NULL, -- wrong token OIDs or crypto alg OIDs ... } -- -- structures common to multiple messages -- AddressTemplate ::= SEQUENCE { pattern SEQUENCE OF Pattern, routeInfo SEQUENCE OF RouteInformation, timeToLive INTEGER (1..4294967295), ..., supportedProtocols SEQUENCE OF SupportedProtocols OPTIONAL, featureSet FeatureSet OPTIONAL } Pattern ::= CHOICE { specific AliasAddress, wildcard AliasAddress, range SEQUENCE { startOfRange PartyNumber, endOfRange PartyNumber }, ... } RouteInformation ::= SEQUENCE { messageType CHOICE { sendAccessRequest NULL, sendSetup NULL, nonExistent NULL, ... }, callSpecific BOOLEAN, usageSpec UsageSpecification OPTIONAL, priceInfo SEQUENCE OF PriceInfoSpec OPTIONAL, contacts SEQUENCE OF ContactInformation, type EndpointType OPTIONAL, -- must be present if messageType = sendSetup ..., featureSet FeatureSet OPTIONAL, circuitID CircuitInfo OPTIONAL, supportedCircuits SEQUENCE OF CircuitIdentifier OPTIONAL } ContactInformation ::= SEQUENCE { transportAddress AliasAddress, priority INTEGER (0..127), transportQoS TransportQOS OPTIONAL, security SEQUENCE OF SecurityMode OPTIONAL, accessTokens SEQUENCE OF AccessToken OPTIONAL, ..., multipleCalls BOOLEAN OPTIONAL, featureSet FeatureSet OPTIONAL, circuitID CircuitInfo OPTIONAL, supportedCircuits SEQUENCE OF CircuitIdentifier OPTIONAL } PriceInfoSpec ::= SEQUENCE { currency IA5String (SIZE(3)), -- e.g. "USD" currencyScale INTEGER(-127..127), validFrom GlobalTimeStamp OPTIONAL, validUntil GlobalTimeStamp OPTIONAL, hoursFrom IA5String (SIZE(6)) OPTIONAL, -- "HHMMSS" UTC hoursUntil IA5String (SIZE(6)) OPTIONAL, -- "HHMMSS" UTC priceElement SEQUENCE OF PriceElement OPTIONAL, priceFormula IA5String (SIZE(1..2048)) OPTIONAL, ... } PriceElement ::= SEQUENCE { amount INTEGER(0..4294967295), -- meter increment quantum INTEGER(0..4294967295), -- each or part thereof units CHOICE { seconds NULL, packets NULL, bytes NULL, initial NULL, minimum NULL, maximum NULL, ... }, ... } Descriptor ::= SEQUENCE { descriptorInfo DescriptorInfo, templates SEQUENCE OF AddressTemplate, gatekeeperID GatekeeperIdentifier OPTIONAL, ... } DescriptorInfo ::= SEQUENCE { --descriptorID DescriptorID, descriptorID GloballyUniqueID, lastChanged GlobalTimeStamp, ... } AlternatePEInfo ::= SEQUENCE { alternatePE SEQUENCE OF AlternatePE, alternateIsPermanent BOOLEAN, ... } AlternatePE ::= SEQUENCE { contactAddress AliasAddress, priority INTEGER (1..127), elementIdentifier ElementIdentifier OPTIONAL, ... } AccessToken ::= CHOICE { token ClearToken, cryptoToken CryptoH323Token, ..., genericData GenericData } CallInformation ::= SEQUENCE { callIdentifier CallIdentifier, conferenceID ConferenceIdentifier, ..., circuitID CircuitInfo OPTIONAL } UsageCallStatus ::= CHOICE { preConnect NULL, -- Call has not started callInProgress NULL, -- Call is in progress callEnded NULL, -- Call ended ..., registrationLost NULL -- Uncertain if call ended or not } UserInformation ::= SEQUENCE { userIdentifier AliasAddress, userAuthenticator SEQUENCE OF CryptoH323Token OPTIONAL, ... } UsageSpecification ::= SEQUENCE { sendTo ElementIdentifier, when SEQUENCE { never NULL OPTIONAL, start NULL OPTIONAL, end NULL OPTIONAL, period INTEGER(1..65535) OPTIONAL, -- in seconds failures NULL OPTIONAL, ... }, required SEQUENCE OF OBJECT IDENTIFIER, preferred SEQUENCE OF OBJECT IDENTIFIER, ..., sendToPEAddress AliasAddress OPTIONAL } PartyInformation ::= SEQUENCE { logicalAddresses SEQUENCE OF AliasAddress, domainIdentifier AliasAddress OPTIONAL, transportAddress AliasAddress OPTIONAL, endpointType EndpointType OPTIONAL, userInfo UserInformation OPTIONAL, timeZone TimeZone OPTIONAL, ... } Role ::= CHOICE { originator NULL, destination NULL, nonStandardData NonStandardParameter, ... } TimeZone ::= INTEGER (-43200..43200) -- number of seconds relative to UTC -- including DST if appropriate TerminationCause ::= SEQUENCE { releaseCompleteReason ReleaseCompleteReason, causeIE INTEGER (1..65535) OPTIONAL, nonStandardData NonStandardParameter OPTIONAL, ... } ProtocolVersion ::= OBJECT IDENTIFIER -- shall be set to -- {itu-t(0) recommendation(0) h(8) h-225-0(2250) annex(1) g(7) -- version(0) 2} in field annexGversion; -- {itu-t(0) recommendation(0) h(8) 501 version(0) 1} -- in field version --DescriptorID ::= GloballyUniqueID ElementIdentifier ::= BMPString (SIZE(1..128)) GlobalTimeStamp ::= IA5String (SIZE(14)) -- UTC, in the form YYYYMMDDHHmmSS -- where YYYY = year, MM = month, DD = day, -- HH = hour, mm = minute, SS = second -- (for example, 19981219120000 for noon -- 19 December 1998) -- -- REPOSITORY FOR APPLICATION SPECIFIC DATA -- -- -- H.225.0 Annex-G profile data -- idAnnexGProfiles INTEGER ::= 0 idAnnexGProfileA INTEGER ::= 1 annexGProfileA EnumeratedParameter ::= { id standard:idAnnexGProfileA } END -- of H501-MESSAGES h323plus/src/asn/OID2.asn0000644000175000017500000000066410745242027013670 0ustar markmarkH230-CONFERENCE-CONTROL {iso(1) organisation(3) dod(6) internet(1) private(4) packetizer(17090) h323(0) oid(2) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN Participant ::= SEQUENCE { token INTEGER (0..255), number BMPString (SIZE (1..256)), name BMPString (SIZE (1..256)) OPTIONAL, vCard OCTET STRING OPTIONAL, ... } ParticipantList ::= SEQUENCE { list SEQUENCE (SIZE (0..65535)) OF Participant, ... } ENDh323plus/src/asn/h4509.asn0000644000175000017500000000566510655704731013757 0ustar markmarkCall-Completion-Operations { itu-t recommendation h 450 9 version1(0) call-completion-operations(0) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS Extension FROM H4501 -- Manufacturer-specific-service-extension-definition { itu-t recommendation h 450 1 version1(0) msi-definition(18) } CallIdentifier FROM H225 -- H323-MESSAGES see H.225.0 EndpointAddress FROM H4501 -- Addressing-Data-Elements { itu-t recommendation h 450 1 version1(0) addressing-data-elements (9) } MixedExtension, undefined FROM H4504 -- Call-Hold-Operations { itu-t recommendation h 450 4 version1(0) call-hold-operations(0) } supplementaryServiceInteractionNotAllowed FROM H4501 -- H4501-General-Error-List { itu-t recommendation h 450 1 version1(0) general-error-list (1) } BasicService FROM H4507 -- Message-Waiting-Indication-Operations { itu-t recommendation h 450 7 version1(0) message-waiting-operations(0) }; H323CallCompletionOperations ::= ENUMERATED { ccbsRequest(40), ccnrRequest(27), ccCancel(28), ccExecPossible(29), ccRingout(31), ccSuspend(32), ccResume(33) } CcRequestArg ::= SEQUENCE { numberA EndpointAddress, numberB EndpointAddress, ccIdentifier CallIdentifier OPTIONAL, -- If present, it shall be used as the prime mechanism for associating -- the unsuccessful call, the CC Request and the CC Call. service BasicService, can-retain-service BOOLEAN, retain-sig-connection BOOLEAN OPTIONAL, extension SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CcRequestRes ::= SEQUENCE { retain-service BOOLEAN, extension SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CcArg ::= CHOICE { shortArg CcShortArg, -- if signalling conection is retained longArg CcLongArg, -- if connection release option applies ... } CcShortArg ::= SEQUENCE { ccIdentifier CallIdentifier OPTIONAL, extension SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CcLongArg ::= SEQUENCE { numberA EndpointAddress OPTIONAL, numberB EndpointAddress OPTIONAL, ccIdentifier CallIdentifier OPTIONAL, service BasicService OPTIONAL, -- these elements are used to identify the proper CC Request. -- The ccIdentifier if present shall be the prime mechanism for this purpose. extension SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CallCompletionErrors ::= ENUMERATED { shortTermRejection(1010), longTermRejection(1011), remoteUserBusyAgain(1012), failureToMatch(1013) } END -- of Call-Completion-Operations h323plus/src/asn/h4502.asn0000644000175000017500000001045110655704731013735 0ustar markmarkCall-Transfer-Operations { itu-t recommendation h 450 2 version1(0) call-transfer-operations(0) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS Extension FROM H4501 -- Manufacturer-specific-service-extension-definition { itu-t recommendation h 450 1 version1(0) msi-definition(18) } notAvailable, supplementaryServiceInteractionNotAllowed, invalidCallState FROM H4501 -- H4501-General-Error-List { itu-t recommendation h 450 1 version1(0) general-error-list(1) } EndpointAddress, PartySubaddress FROM H4501 -- Addressing-Data-Elements { itu-t recommendation h 450 1 version1(0) addressing-data-elements(9) } NonStandardParameter FROM H225 -- H323-MESSAGES H225InformationElement FROM H4501 -- H225-generic-parameters-definition { itu-t recommendation h 450 1 version1(0) h225-generic-parameters(6) }; DummyArg ::= CHOICE { extensionSeq ExtensionSeq, nonStandardData NonStandardParameter } DummyRes ::= CHOICE { extensionSeq ExtensionSeq, nonStandardData NonStandardParameter } CTInitiateArg ::= SEQUENCE { callIdentity CallIdentity, reroutingNumber EndpointAddress, argumentExtension CHOICE { extensionSeq ExtensionSeq, nonStandardData NonStandardParameter } OPTIONAL, ... } CTSetupArg ::= SEQUENCE { callIdentity CallIdentity, transferringNumber EndpointAddress OPTIONAL, argumentExtension CHOICE { extensionSeq ExtensionSeq, nonStandardData NonStandardParameter } OPTIONAL, ... } CTIdentifyRes ::= SEQUENCE { callIdentity CallIdentity, reroutingNumber EndpointAddress, resultExtension CHOICE { extensionSeq ExtensionSeq, nonStandardData NonStandardParameter } OPTIONAL, ... } CTUpdateArg ::= SEQUENCE { redirectionNumber EndpointAddress, redirectionInfo BMPString (SIZE(1..128)) OPTIONAL, basicCallInfoElements H225InformationElement OPTIONAL, -- Information element -- Progress indicator may be conveyed argumentExtension CHOICE { extensionSeq ExtensionSeq, nonStandardData NonStandardParameter } OPTIONAL, ... } SubaddressTransferArg ::= SEQUENCE { redirectionSubaddress PartySubaddress, argumentExtension CHOICE { extensionSeq ExtensionSeq, nonStandardData NonStandardParameter } OPTIONAL, ... } CTCompleteArg ::= SEQUENCE { endDesignation EndDesignation, redirectionNumber EndpointAddress, -- number of new connected user basicCallInfoElements H225InformationElement OPTIONAL, -- Information element Progress indicator may be conveyed redirectionInfo BMPString (SIZE(1..128)) OPTIONAL, callStatus CallStatus DEFAULT answered, argumentExtension CHOICE { extensionSeq ExtensionSeq, nonStandardData NonStandardParameter } OPTIONAL, ... } EndDesignation ::= ENUMERATED { primaryEnd(0), secondaryEnd(1), ... } CallStatus ::= ENUMERATED { answered(0), alerting(1), ... } CTActiveArg ::= SEQUENCE { connectedAddress EndpointAddress, -- number of new connected user basicCallInfoElements H225InformationElement OPTIONAL, -- Information element Progress indicator may be conveyed connectedInfo BMPString (SIZE(1..128)) OPTIONAL, argumentExtension CHOICE { extensionSeq ExtensionSeq, nonStandardData NonStandardParameter } OPTIONAL, ... } CallIdentity ::= NumericString (SIZE(0..4)) -- size 0 means ’empty’ ExtensionSeq ::= SEQUENCE OF Extension CallTransferOperation ::= ENUMERATED { callTransferIdentify (7), callTransferAbandon (8), callTransferInitiate (9), callTransferSetup (10), callTransferUpdate (13), subaddressTransfer (14), callTransferComplete (12), callTransferActive (11) } CallTransferErrors ::= ENUMERATED { unspecified (1008), invalidReroutingNumber (1004), unrecognizedCallIdentity (1005), establishmentFailure (1006) } END -- of Call-Transfer-Operations h323plus/src/asn/h45011.asn0000644000175000017500000001033310655704731014014 0ustar markmarkCall-Intrusion-Operations { itu-t recommendation h 450 11 version1(0) call-intrusion-operations(0) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS CallIdentifier FROM H225 -- H323-MESSAGES see H.225.0 MixedExtension, undefined FROM H4504 -- Call-Hold-Operations { itu-t recommendation h 450 4 version1(0) call-hold-operations(0) } notAvailable, supplementaryServiceInteractionNotAllowed FROM H4501 -- H4501-General-Error-List { itu-t recommendation h 450 1 version1(0) general-error-list (1) } callWaiting FROM H4506 -- Call-Waiting-Operations { itu-t recommendation h 450 6 version1(0) call-waiting-operations(0) } cfbOverride, remoteUserAlerting FROM H45010 -- Call-Offer-Operations { itu-t recommendation h 450 10 version1(0) call-offer-operations(0) }; H323CallIntrusionOperations ::= ENUMERATED { callIntrusionRequest(43), callIntrusionGetCIPL(44), callIntrusionIsolate(45), callIntrusionForcedRelease(46), callIntrusionWOBRequest(47), callIntrusionSilentMonitor(116), callIntrusionNotification(117) -- cfbOverride(49), Imported from H.450.10 -- remoteUserAlerting(115), Imported from H.450.10 -- callWaiting(105) Imported from H.450.6 } -- callWaiting is only used for interaction with Call Transfer -- CIRequestArg ::= SEQUENCE { ciCapabilityLevel CICapabilityLevel, argumentExtension SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CIRequestRes ::= SEQUENCE { ciStatusInformation CIStatusInformation, resultExtension SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CIGetCIPLOptArg ::= SEQUENCE { argumentExtension SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CIGetCIPLRes ::= SEQUENCE { ciProtectionLevel CIProtectionLevel, silentMonitoringPermitted NULL OPTIONAL, resultExtension SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CIIsOptArg ::= SEQUENCE { argumentExtension SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CIIsOptRes ::= SEQUENCE { resultExtension SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CIFrcRelArg ::= SEQUENCE { ciCapabilityLevel CICapabilityLevel, argumentExtension SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CIFrcRelOptRes ::= SEQUENCE { resultExtension SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CIWobOptArg ::= SEQUENCE { argumentExtension SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CIWobOptRes ::= SEQUENCE { resultExtension SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CISilentArg ::= SEQUENCE { ciCapabilityLevel CICapabilityLevel, specificCall CallIdentifier OPTIONAL, argumentExtension SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CISilentOptRes ::= SEQUENCE { resultExtension SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CINotificationArg ::= SEQUENCE { ciStatusInformation CIStatusInformation, argumentExtension SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CICapabilityLevel ::= INTEGER --(1..3) { intrusionLowCap(1), intrusionMediumCap(2), intrusionHighCap(3) } CIProtectionLevel ::= INTEGER --(0..3) { lowProtection(0), mediumProtection(1), highProtection(2), fullProtection(3) } CIStatusInformation ::= CHOICE { callIntrusionImpending NULL, callIntruded NULL, callIsolated NULL, callForceReleased NULL, callIntrusionComplete NULL, callIntrusionEnd NULL, ... } CallIntrusionErrors ::= ENUMERATED { notBusy(1009), -- used when the called user is not busy temporarilyUnavailable(1000), -- used when conditions for invocation of SS-CI are momentarily not met notAuthorized(1007) -- used when a SS-CI request is rejected because of insufficient CICL or -- if silent monitoring is not permitted } END -- of Call-Intrusion-Operations h323plus/src/asn/mcspdu.asn0000644000175000017500000002740610655704732014477 0ustar markmarkMCS-PROTOCOL DEFINITIONS ::= BEGIN -- Part 1: Fundamental MCS types ChannelId ::= INTEGER (0..65535) -- range is 16 bits StaticChannelId ::= ChannelId (1..1000) -- those known permanently DynamicChannelId::= ChannelId (1001..65535) -- those created and deleted UserId ::= DynamicChannelId -- created by Attach-User -- deleted by Detach-User PrivateChannelId::= DynamicChannelId -- created by Channel-Convene -- deleted by Channel-Disband AssignedChannelId::=DynamicChannelId -- created by Channel-Join zero -- deleted by last Channel-Leave TokenId ::= INTEGER (1..65535) -- all are known permanently TokenStatus ::= ENUMERATED { notInUse (0), selfGrabbed (1), otherGrabbed (2), selfInhibited (3), otherInhibited (4), selfRecipient (5), selfGiving (6), otherGiving (7) } DataPriority ::= ENUMERATED { top (0), high (1), medium (2), low (3) } Segmentation ::= BIT STRING { begin (0), end (1) } (SIZE (2)) DomainParameters::= SEQUENCE { maxChannelIds INTEGER (0..MAX), -- a limit on channel ids in use, -- static + user id + private + assigned maxUserIds INTEGER (0..MAX), -- a sublimit on user id channels alone maxTokenIds INTEGER (0..MAX), -- a limit on token ids in use -- grabbed + inhibited + giving + ungivable + given numPriorities INTEGER (0..MAX), -- the number of TCs in an MCS connection minThroughput INTEGER (0..MAX), -- the enforced number of octets per second maxHeight INTEGER (0..MAX), -- a limit on the height of a provider maxMCSPDUsize INTEGER (0..MAX), -- an octet limit on domain MCSPDUs protocolVersion INTEGER (0..MAX) } -- Part 2: Connect provider Connect-Initial ::= [APPLICATION 101] IMPLICIT SEQUENCE { callingDomainSelector OCTET STRING, calledDomainSelector OCTET STRING, upwardFlag BOOLEAN, -- TRUE if called provider is higher targetParameters DomainParameters, minimumParameters DomainParameters, maximumParameters DomainParameters, userData OCTET STRING } Connect-Response ::= [APPLICATION 102] IMPLICIT SEQUENCE { result Result, calledConnectId INTEGER (0..MAX), -- assigned by the called provider -- to identify additional TCs of -- the same MCS connection domainParameters DomainParameters, userData OCTET STRING } Connect-Additional ::= [APPLICATION 103] IMPLICIT SEQUENCE { calledConnectId INTEGER (0..MAX), dataPriority DataPriority } Connect-Result ::= [APPLICATION 104] IMPLICIT SEQUENCE { result Result } -- Part 3: Merge domain PDin ::= [APPLICATION 0] IMPLICIT SEQUENCE -- plumb domain indication { heightLimit INTEGER (0..MAX) -- a restriction on the MCSPDU receiver } EDrq ::= [APPLICATION 1] IMPLICIT SEQUENCE -- erect domain request { subHeight INTEGER (0..MAX), -- height in domain of the MCSPDU transmitter subInterval INTEGER (0..MAX) -- its throughput enforcement interval in milliseconds } ChannelAttributes ::= CHOICE { static [0] IMPLICIT SEQUENCE { channelId StaticChannelId -- joined is implicitly TRUE }, userId [1] IMPLICIT SEQUENCE { joined BOOLEAN, -- TRUE if user is joined to its user id userId UserId }, private [2] IMPLICIT SEQUENCE { joined BOOLEAN, -- TRUE if channel id is joined below channelId PrivateChannelId, manager UserId, admitted SET OF UserId -- may span multiple MCrq }, assigned [3] IMPLICIT SEQUENCE { channelId AssignedChannelId -- joined is implicitly TRUE } } MCrq ::= [APPLICATION 2] IMPLICIT SEQUENCE -- merge channels request { mergeChannels SET OF ChannelAttributes, purgeChannelIds SET OF ChannelId } MCcf ::= [APPLICATION 3] IMPLICIT SEQUENCE -- merge channels confirm { mergeChannels SET OF ChannelAttributes, purgeChannelIds SET OF ChannelId } PCin ::= [APPLICATION 4] IMPLICIT SEQUENCE -- purge channels indication { detachUserIds SET OF UserId, -- purge user id channels purgeChannelIds SET OF ChannelId -- purge other channel ids } TokenAttributes ::= CHOICE { grabbed [0] IMPLICIT SEQUENCE { tokenId TokenId, grabber UserId }, inhibited [1] IMPLICIT SEQUENCE { tokenId TokenId, inhibitors SET OF UserId -- may span multiple MTrq }, giving [2] IMPLICIT SEQUENCE { tokenId TokenId, grabber UserId, recipient UserId }, ungivable [3] IMPLICIT SEQUENCE { tokenId TokenId, grabber UserId -- recipient has since detached }, given [4] IMPLICIT SEQUENCE { tokenId TokenId, recipient UserId -- grabber released or detached } } MTrq ::= [APPLICATION 5] IMPLICIT SEQUENCE -- merge tokens request { mergeTokens SET OF TokenAttributes, purgeTokenIds SET OF TokenId } MTcf ::= [APPLICATION 6] IMPLICIT SEQUENCE -- merge tokens indication { mergeTokens SET OF TokenAttributes, purgeTokenIds SET OF TokenId } PTin ::= [APPLICATION 7] IMPLICIT SEQUENCE -- purge tokens indication { purgeTokenIds SET OF TokenId } -- Part 4: Disconnect provider DPum ::= [APPLICATION 8] IMPLICIT SEQUENCE -- disconnect provider ultimatum { reason Reason } RJum ::= [APPLICATION 9] IMPLICIT SEQUENCE -- reject MCSPDU ultimatum { diagnostic Diagnostic, initialOctets OCTET STRING } -- Part 5: Attach/Detach user AUrq ::= [APPLICATION 10] IMPLICIT SEQUENCE -- attach user request { } AUcf ::= [APPLICATION 11] IMPLICIT SEQUENCE -- attach user confirm { result Result, initiator UserId OPTIONAL } DUrq ::= [APPLICATION 12] IMPLICIT SEQUENCE -- detach user request { reason Reason, userIds SET OF UserId } DUin ::= [APPLICATION 13] IMPLICIT SEQUENCE -- detach user indication { reason Reason, userIds SET OF UserId } -- Part 6: Channel management CJrq ::= [APPLICATION 14] IMPLICIT SEQUENCE -- channel join request { initiator UserId, channelId ChannelId -- may be zero } CJcf ::= [APPLICATION 15] IMPLICIT SEQUENCE -- channel join confirm { result Result, initiator UserId, requested ChannelId, -- may be zero channelId ChannelId OPTIONAL } CLrq ::= [APPLICATION 16] IMPLICIT SEQUENCE -- channel leave request { channelIds SET OF ChannelId } CCrq ::= [APPLICATION 17] IMPLICIT SEQUENCE -- channel convene request { initiator UserId } CCcf ::= [APPLICATION 18] IMPLICIT SEQUENCE -- channel convene confirm { result Result, initiator UserId, channelId PrivateChannelId OPTIONAL } CDrq ::= [APPLICATION 19] IMPLICIT SEQUENCE -- channel disband request { initiator UserId, channelId PrivateChannelId } CDin ::= [APPLICATION 20] IMPLICIT SEQUENCE -- channel disband indication { channelId PrivateChannelId } CArq ::= [APPLICATION 21] IMPLICIT SEQUENCE -- channel admit request { initiator UserId, channelId PrivateChannelId, userIds SET OF UserId } CAin ::= [APPLICATION 22] IMPLICIT SEQUENCE -- channel admit indication { initiator UserId, channelId PrivateChannelId, userIds SET OF UserId } CErq ::= [APPLICATION 23] IMPLICIT SEQUENCE -- channel expel request { initiator UserId, channelId PrivateChannelId, userIds SET OF UserId } CEin ::= [APPLICATION 24] IMPLICIT SEQUENCE -- channel expel indication { channelId PrivateChannelId, userIds SET OF UserId } -- Part 7: Data transfer SDrq ::= [APPLICATION 25] IMPLICIT SEQUENCE -- send data request { initiator UserId, channelId ChannelId, dataPriority DataPriority, segmentation Segmentation, userData OCTET STRING } SDin ::= [APPLICATION 26] IMPLICIT SEQUENCE -- send data indication { initiator UserId, channelId ChannelId, dataPriority DataPriority, segmentation Segmentation, userData OCTET STRING } USrq ::= [APPLICATION 27] IMPLICIT SEQUENCE -- uniform send data request { initiator UserId, channelId ChannelId, dataPriority DataPriority, segmentation Segmentation, userData OCTET STRING } USin ::= [APPLICATION 28] IMPLICIT SEQUENCE -- uniform send data indication { initiator UserId, channelId ChannelId, dataPriority DataPriority, segmentation Segmentation, userData OCTET STRING } -- Part 8: Token management TGrq ::= [APPLICATION 29] IMPLICIT SEQUENCE -- token grab request { initiator UserId, tokenId TokenId } TGcf ::= [APPLICATION 30] IMPLICIT SEQUENCE -- token grab confirm { result Result, initiator UserId, tokenId TokenId, tokenStatus TokenStatus } TIrq ::= [APPLICATION 31] IMPLICIT SEQUENCE -- token inhibit request { initiator UserId, tokenId TokenId } TIcf ::= [APPLICATION 32] IMPLICIT SEQUENCE -- token inhibit confirm { result Result, initiator UserId, tokenId TokenId, tokenStatus TokenStatus } TVrq ::= [APPLICATION 33] IMPLICIT SEQUENCE -- token give request { initiator UserId, tokenId TokenId, recipient UserId } TVin ::= [APPLICATION 34] IMPLICIT SEQUENCE -- token give indication { initiator UserId, tokenId TokenId, recipient UserId } TVrs ::= [APPLICATION 35] IMPLICIT SEQUENCE -- token give response { result Result, recipient UserId, tokenId TokenId } TVcf ::= [APPLICATION 36] IMPLICIT SEQUENCE -- token give confirm { result Result, initiator UserId, tokenId TokenId, tokenStatus TokenStatus } TPrq ::= [APPLICATION 37] IMPLICIT SEQUENCE -- token please request { initiator UserId, tokenId TokenId } TPin ::= [APPLICATION 38] IMPLICIT SEQUENCE -- token please indication { initiator UserId, tokenId TokenId } TRrq ::= [APPLICATION 39] IMPLICIT SEQUENCE -- token release request { initiator UserId, tokenId TokenId } TRcf ::= [APPLICATION 40] IMPLICIT SEQUENCE -- token release confirm { result Result, initiator UserId, tokenId TokenId, tokenStatus TokenStatus } TTrq ::= [APPLICATION 41] IMPLICIT SEQUENCE -- token test request { initiator UserId, tokenId TokenId } TTcf ::= [APPLICATION 42] IMPLICIT SEQUENCE -- token test confirm { initiator UserId, tokenId TokenId, tokenStatus TokenStatus } -- Part 9: Status codes Reason ::= ENUMERATED -- in DPum, DUrq, DUin { rn-domain-disconnected (0), rn-provider-initiated (1), rn-token-purged (2), rn-user-requested (3), rn-channel-purged (4) } Result ::= ENUMERATED -- in Connect, response, confirm { rt-successful (0), rt-domain-merging (1), rt-domain-not-hierarchical (2), rt-no-such-channel (3), rt-no-such-domain (4), rt-no-such-user (5), rt-not-admitted (6), rt-other-user-id (7), rt-parameters-unacceptable (8), rt-token-not-available (9), rt-token-not-possessed (10), rt-too-many-channels (11), rt-too-many-tokens (12), rt-too-many-users (13), rt-unspecified-failure (14), rt-user-rejected (15) } Diagnostic ::= ENUMERATED -- in RJum { dc-inconsistent-merge (0), dc-forbidden-PDU-downward (1), dc-forbidden-PDU-upward (2), dc-invalid-BER-encoding (3), dc-invalid-PER-encoding (4), dc-misrouted-user (5), dc-unrequested-confirm (6), dc-wrong-transport-priority (7), dc-channel-id-conflict (8), dc-token-id-conflict (9), dc-not-user-id-channel (10), dc-too-many-channels (11), dc-too-many-tokens (12), dc-too-many-users (13) } -- Part 10: MCSPDU repertoire ConnectMCSPDU ::= CHOICE { connect-initial Connect-Initial, connect-response Connect-Response, connect-additional Connect-Additional, connect-result Connect-Result } DomainMCSPDU ::= CHOICE { pdin PDin, edrq EDrq, mcrq MCrq, mccf MCcf, pcin PCin, mtrq MTrq, mtcf MTcf, ptin PTin, dpum DPum, rjum RJum, aurq AUrq, aucf AUcf, durq DUrq, duin DUin, cjrq CJrq, cjcf CJcf, clrq CLrq, ccrq CCrq, cccf CCcf, cdrq CDrq, cdin CDin, carq CArq, cain CAin, cerq CErq, cein CEin, sdrq SDrq, sdin SDin, usrq USrq, usin USin, tgrq TGrq, tgcf TGcf, tirq TIrq, ticf TIcf, tvrq TVrq, tvin TVin, tvrs TVrs, tvcf TVcf, tprq TPrq, tpin TPin, trrq TRrq, trcf TRcf, ttrq TTrq, ttcf TTcf } END h323plus/src/asn/h245.asn0000644000175000017500000035465110655704731013672 0ustar markmarkMULTIMEDIA-SYSTEM-CONTROL DEFINITIONS AUTOMATIC TAGS ::= BEGIN -- Export all symbols -- ======================================================================= -- Top level Messages -- ======================================================================= MultimediaSystemControlMessage ::=CHOICE { request RequestMessage, response ResponseMessage, command CommandMessage, indication IndicationMessage, ... } -- A RequestMessage results in action and requires an immediate response RequestMessage ::=CHOICE { nonStandard NonStandardMessage, masterSlaveDetermination MasterSlaveDetermination, terminalCapabilitySet TerminalCapabilitySet, openLogicalChannel OpenLogicalChannel, closeLogicalChannel CloseLogicalChannel, requestChannelClose RequestChannelClose, multiplexEntrySend MultiplexEntrySend, requestMultiplexEntry RequestMultiplexEntry, requestMode RequestMode, roundTripDelayRequest RoundTripDelayRequest, maintenanceLoopRequest MaintenanceLoopRequest, ..., communicationModeRequest CommunicationModeRequest, conferenceRequest ConferenceRequest, multilinkRequest MultilinkRequest, logicalChannelRateRequest LogicalChannelRateRequest, genericRequest GenericMessage } -- A ResponseMessage is the response to a RequestMessage ResponseMessage ::=CHOICE { nonStandard NonStandardMessage, masterSlaveDeterminationAck MasterSlaveDeterminationAck, masterSlaveDeterminationReject MasterSlaveDeterminationReject, terminalCapabilitySetAck TerminalCapabilitySetAck, terminalCapabilitySetReject TerminalCapabilitySetReject, openLogicalChannelAck OpenLogicalChannelAck, openLogicalChannelReject OpenLogicalChannelReject, closeLogicalChannelAck CloseLogicalChannelAck, requestChannelCloseAck RequestChannelCloseAck, requestChannelCloseReject RequestChannelCloseReject, multiplexEntrySendAck MultiplexEntrySendAck, multiplexEntrySendReject MultiplexEntrySendReject, requestMultiplexEntryAck RequestMultiplexEntryAck, requestMultiplexEntryReject RequestMultiplexEntryReject, requestModeAck RequestModeAck, requestModeReject RequestModeReject, roundTripDelayResponse RoundTripDelayResponse, maintenanceLoopAck MaintenanceLoopAck, maintenanceLoopReject MaintenanceLoopReject, ..., communicationModeResponse CommunicationModeResponse, conferenceResponse ConferenceResponse, multilinkResponse MultilinkResponse, logicalChannelRateAcknowledge LogicalChannelRateAcknowledge, logicalChannelRateReject LogicalChannelRateReject, genericResponse GenericMessage } -- A CommandMessage requires action, but no explicit response CommandMessage ::=CHOICE { nonStandard NonStandardMessage, maintenanceLoopOffCommand MaintenanceLoopOffCommand, sendTerminalCapabilitySet SendTerminalCapabilitySet, encryptionCommand EncryptionCommand, flowControlCommand FlowControlCommand, endSessionCommand EndSessionCommand, miscellaneousCommand MiscellaneousCommand, ..., communicationModeCommand CommunicationModeCommand, conferenceCommand ConferenceCommand, h223MultiplexReconfiguration H223MultiplexReconfiguration, newATMVCCommand NewATMVCCommand, mobileMultilinkReconfigurationCommand MobileMultilinkReconfigurationCommand, genericCommand GenericMessage } -- An IndicationMessage is information that does not require action or response IndicationMessage ::=CHOICE { nonStandard NonStandardMessage, functionNotUnderstood FunctionNotUnderstood, masterSlaveDeterminationRelease MasterSlaveDeterminationRelease, terminalCapabilitySetRelease TerminalCapabilitySetRelease, openLogicalChannelConfirm OpenLogicalChannelConfirm, requestChannelCloseRelease RequestChannelCloseRelease, multiplexEntrySendRelease MultiplexEntrySendRelease, requestMultiplexEntryRelease RequestMultiplexEntryRelease, requestModeRelease RequestModeRelease, miscellaneousIndication MiscellaneousIndication, jitterIndication JitterIndication, h223SkewIndication H223SkewIndication, newATMVCIndication NewATMVCIndication, userInput UserInputIndication, ..., h2250MaximumSkewIndication H2250MaximumSkewIndication, mcLocationIndication MCLocationIndication, conferenceIndication ConferenceIndication, vendorIdentification VendorIdentification, functionNotSupported FunctionNotSupported, multilinkIndication MultilinkIndication, logicalChannelRateRelease LogicalChannelRateRelease, flowControlIndication FlowControlIndication, mobileMultilinkReconfigurationIndication MobileMultilinkReconfigurationIndication, genericIndication GenericMessage } -- SequenceNumber is defined here as it is used in a number of Messages SequenceNumber ::=INTEGER (0..255) -- ============================================================================= -- Generic Message definitions -- ============================================================================= GenericMessage ::=SEQUENCE { messageIdentifier CapabilityIdentifier, subMessageIdentifier INTEGER(0..127) OPTIONAL, messageContent SEQUENCE OF GenericParameter OPTIONAL, ... } GenericInformation ::=GenericMessage -- ============================================================================= -- Non-standard Message definitions -- ============================================================================= NonStandardMessage ::=SEQUENCE { nonStandardData NonStandardParameter, ... } NonStandardParameter ::=SEQUENCE { nonStandardIdentifier NonStandardIdentifier, data OCTET STRING } NonStandardIdentifier ::=CHOICE { object OBJECT IDENTIFIER, h221NonStandard SEQUENCE { t35CountryCode INTEGER (0..255), -- country, per -- Annex A/T.35 t35Extension INTEGER (0..255), -- assigned nationally unless -- t35CountryCode is binary -- 1111 1111, in which case it shall -- contain the country code -- according to Annex B/T.35 manufacturerCode INTEGER (0..65535) -- assigned nationally } } -- ============================================================================= -- Master-slave determination definitions -- ============================================================================= MasterSlaveDetermination ::=SEQUENCE { terminalType INTEGER (0..255), statusDeterminationNumber INTEGER (0..16777215), ... } MasterSlaveDeterminationAck ::=SEQUENCE { decision CHOICE { master NULL, slave NULL }, ... } MasterSlaveDeterminationReject ::=SEQUENCE { cause CHOICE { identicalNumbers NULL, ... }, ... } MasterSlaveDeterminationRelease ::=SEQUENCE { ... } -- ============================================================================= -- Capability exchange definitions -- ============================================================================= TerminalCapabilitySet ::=SEQUENCE { sequenceNumber SequenceNumber, protocolIdentifier OBJECT IDENTIFIER, -- shall be set to the value -- {itu-t (0) recommendation (0) h (8) 245 -- version (0) 13} multiplexCapability MultiplexCapability OPTIONAL, capabilityTable SET SIZE (1..256) OF CapabilityTableEntry OPTIONAL, capabilityDescriptors SET SIZE (1..256) OF CapabilityDescriptor OPTIONAL, ..., genericInformation SEQUENCE OF GenericInformation OPTIONAL -- generic information associated -- with the message } CapabilityTableEntry ::=SEQUENCE { capabilityTableEntryNumber CapabilityTableEntryNumber, capability Capability OPTIONAL } CapabilityDescriptor ::=SEQUENCE { capabilityDescriptorNumber CapabilityDescriptorNumber, simultaneousCapabilities SET SIZE (1..256) OF AlternativeCapabilitySet OPTIONAL } AlternativeCapabilitySet ::=SEQUENCE SIZE (1..256) OF CapabilityTableEntryNumber CapabilityTableEntryNumber ::=INTEGER (1..65535) CapabilityDescriptorNumber ::=INTEGER (0..255) TerminalCapabilitySetAck ::=SEQUENCE { sequenceNumber SequenceNumber, ..., genericInformation SEQUENCE OF GenericInformation OPTIONAL -- generic information associated -- with the message } TerminalCapabilitySetReject ::=SEQUENCE { sequenceNumber SequenceNumber, cause CHOICE { unspecified NULL, undefinedTableEntryUsed NULL, descriptorCapacityExceeded NULL, tableEntryCapacityExceeded CHOICE { highestEntryNumberProcessed CapabilityTableEntryNumber, noneProcessed NULL }, ... }, ..., genericInformation SEQUENCE OF GenericInformation OPTIONAL -- generic information associated -- with the message } TerminalCapabilitySetRelease ::=SEQUENCE { ..., genericInformation SEQUENCE OF GenericInformation OPTIONAL -- generic information associated -- with the message } -- ============================================================================= -- Capability exchange definitions: top level capability description -- ============================================================================= Capability ::=CHOICE { nonStandard NonStandardParameter, receiveVideoCapability VideoCapability, transmitVideoCapability VideoCapability, receiveAndTransmitVideoCapability VideoCapability, receiveAudioCapability AudioCapability, transmitAudioCapability AudioCapability, receiveAndTransmitAudioCapability AudioCapability, receiveDataApplicationCapability DataApplicationCapability, transmitDataApplicationCapability DataApplicationCapability, receiveAndTransmitDataApplicationCapability DataApplicationCapability, h233EncryptionTransmitCapability BOOLEAN, h233EncryptionReceiveCapability SEQUENCE { h233IVResponseTime INTEGER (0..255), -- units milliseconds ... }, ..., conferenceCapability ConferenceCapability, h235SecurityCapability H235SecurityCapability, maxPendingReplacementFor INTEGER (0..255), receiveUserInputCapability UserInputCapability, transmitUserInputCapability UserInputCapability, receiveAndTransmitUserInputCapability UserInputCapability, genericControlCapability GenericCapability, receiveMultiplexedStreamCapability MultiplexedStreamCapability, transmitMultiplexedStreamCapability MultiplexedStreamCapability, receiveAndTransmitMultiplexedStreamCapability MultiplexedStreamCapability, receiveRTPAudioTelephonyEventCapability AudioTelephonyEventCapability, receiveRTPAudioToneCapability AudioToneCapability, depFecCapability DepFECCapability, -- Deprecated, do not use multiplePayloadStreamCapability MultiplePayloadStreamCapability, fecCapability FECCapability, redundancyEncodingCap RedundancyEncodingCapability, oneOfCapabilities AlternativeCapabilitySet } H235SecurityCapability ::=SEQUENCE { encryptionAuthenticationAndIntegrity EncryptionAuthenticationAndIntegrity, mediaCapability CapabilityTableEntryNumber, -- NOTE - The mediaCapability shall refer to Capability Table Entries -- that do contain, directly or indirectly, one or more transmit, -- receive, or receiveAndTransmit AudioCapability, VideoCapability, -- DataApplicationCapability, or similar capabilities indicated by a -- NonStandardParameter or GenericCapability only ... } -- ============================================================================= -- Capability exchange definitions: Multiplex capabilities -- ============================================================================= MultiplexCapability ::=CHOICE { nonStandard NonStandardParameter, h222Capability H222Capability, h223Capability H223Capability, v76Capability V76Capability, ..., h2250Capability H2250Capability, genericMultiplexCapability GenericCapability } H222Capability ::= SEQUENCE { numberOfVCs INTEGER (1..256), vcCapability SET OF VCCapability, ... } VCCapability ::=SEQUENCE { aal1 SEQUENCE { nullClockRecovery BOOLEAN, srtsClockRecovery BOOLEAN, adaptiveClockRecovery BOOLEAN, nullErrorCorrection BOOLEAN, longInterleaver BOOLEAN, shortInterleaver BOOLEAN, errorCorrectionOnly BOOLEAN, structuredDataTransfer BOOLEAN, partiallyFilledCells BOOLEAN, ... } OPTIONAL, aal5 SEQUENCE { forwardMaximumSDUSize INTEGER (0..65535), -- units octets backwardMaximumSDUSize INTEGER (0..65535), -- units octets ... } OPTIONAL, transportStream BOOLEAN, programStream BOOLEAN, availableBitRates SEQUENCE { type CHOICE { singleBitRate INTEGER (1..65535), -- units 64 kbit/s rangeOfBitRates SEQUENCE { lowerBitRate INTEGER (1..65535), -- units 64 kbit/s higherBitRate INTEGER (1..65535) -- units 64 kbit/s } }, ... }, ..., aal1ViaGateway SEQUENCE { gatewayAddress SET SIZE(1..256) OF Q2931Address, nullClockRecovery BOOLEAN, srtsClockRecovery BOOLEAN, adaptiveClockRecovery BOOLEAN, nullErrorCorrection BOOLEAN, longInterleaver BOOLEAN, shortInterleaver BOOLEAN, errorCorrectionOnly BOOLEAN, structuredDataTransfer BOOLEAN, partiallyFilledCells BOOLEAN, ... } OPTIONAL } H223Capability ::=SEQUENCE { transportWithI-frames BOOLEAN, -- I-frame transport -- of H.245 videoWithAL1 BOOLEAN, videoWithAL2 BOOLEAN, videoWithAL3 BOOLEAN, audioWithAL1 BOOLEAN, audioWithAL2 BOOLEAN, audioWithAL3 BOOLEAN, dataWithAL1 BOOLEAN, dataWithAL2 BOOLEAN, dataWithAL3 BOOLEAN, maximumAl2SDUSize INTEGER (0..65535), -- units octets maximumAl3SDUSize INTEGER (0..65535), -- units octets maximumDelayJitter INTEGER (0..1023), -- units milliseconds h223MultiplexTableCapability CHOICE { basic NULL, enhanced SEQUENCE { maximumNestingDepth INTEGER (1..15), maximumElementListSize INTEGER (2..255), maximumSubElementListSize INTEGER (2..255), ... } }, ..., maxMUXPDUSizeCapability BOOLEAN, nsrpSupport BOOLEAN, mobileOperationTransmitCapability SEQUENCE { modeChangeCapability BOOLEAN, h223AnnexA BOOLEAN, h223AnnexADoubleFlag BOOLEAN, h223AnnexB BOOLEAN, h223AnnexBwithHeader BOOLEAN, ... } OPTIONAL, h223AnnexCCapability H223AnnexCCapability OPTIONAL, bitRate INTEGER (1..19200) OPTIONAL, -- units of -- 100 bit/s mobileMultilinkFrameCapability SEQUENCE { maximumSampleSize INTEGER (1..255), -- units octets maximumPayloadLength INTEGER (1..65025), -- units octets ... } OPTIONAL } H223AnnexCCapability ::= SEQUENCE { videoWithAL1M BOOLEAN, videoWithAL2M BOOLEAN, videoWithAL3M BOOLEAN, audioWithAL1M BOOLEAN, audioWithAL2M BOOLEAN, audioWithAL3M BOOLEAN, dataWithAL1M BOOLEAN, dataWithAL2M BOOLEAN, dataWithAL3M BOOLEAN, alpduInterleaving BOOLEAN, maximumAL1MPDUSize INTEGER (0..65535), -- units octets maximumAL2MSDUSize INTEGER (0..65535), -- units octets maximumAL3MSDUSize INTEGER (0..65535), -- units octets ..., rsCodeCapability BOOLEAN OPTIONAL } V76Capability ::=SEQUENCE { suspendResumeCapabilitywAddress BOOLEAN, suspendResumeCapabilitywoAddress BOOLEAN, rejCapability BOOLEAN, sREJCapability BOOLEAN, mREJCapability BOOLEAN, crc8bitCapability BOOLEAN, crc16bitCapability BOOLEAN, crc32bitCapability BOOLEAN, uihCapability BOOLEAN, numOfDLCS INTEGER (2..8191), twoOctetAddressFieldCapability BOOLEAN, loopBackTestCapability BOOLEAN, n401Capability INTEGER (1..4095), maxWindowSizeCapability INTEGER (1..127), v75Capability V75Capability, ... } V75Capability ::=SEQUENCE { audioHeader BOOLEAN, ... } H2250Capability ::=SEQUENCE { maximumAudioDelayJitter INTEGER(0..1023), -- units in -- milliseconds receiveMultipointCapability MultipointCapability, transmitMultipointCapability MultipointCapability, receiveAndTransmitMultipointCapability MultipointCapability, mcCapability SEQUENCE { centralizedConferenceMC BOOLEAN, decentralizedConferenceMC BOOLEAN, ... }, rtcpVideoControlCapability BOOLEAN, -- FIR and NACK mediaPacketizationCapability MediaPacketizationCapability, ..., transportCapability TransportCapability OPTIONAL, redundancyEncodingCapability SEQUENCE SIZE(1..256) OF RedundancyEncodingCapability OPTIONAL, logicalChannelSwitchingCapability BOOLEAN, t120DynamicPortCapability BOOLEAN } MediaPacketizationCapability ::=SEQUENCE { h261aVideoPacketization BOOLEAN, ..., rtpPayloadType SEQUENCE SIZE(1..256) OF RTPPayloadType OPTIONAL } RSVPParameters ::=SEQUENCE { qosMode QOSMode OPTIONAL, tokenRate INTEGER (1..4294967295) OPTIONAL, -- rate in bytes/s bucketSize INTEGER (1..4294967295) OPTIONAL, -- size in bytes peakRate INTEGER (1..4294967295) OPTIONAL, -- peak bandwidth bytes/s minPoliced INTEGER (1..4294967295) OPTIONAL, -- maxPktSize INTEGER (1..4294967295) OPTIONAL, -- size in bytes ... } QOSMode ::=CHOICE { guaranteedQOS NULL, controlledLoad NULL, ... } ATMParameters ::=SEQUENCE { maxNTUSize INTEGER(0..65535), -- units in octets atmUBR BOOLEAN, -- unspecified bit rate atmrtVBR BOOLEAN, -- real time variable -- bit rate atmnrtVBR BOOLEAN, -- non real time -- variable bit rate atmABR BOOLEAN, -- available bit rate atmCBR BOOLEAN, -- constant bit rate ... } ServicePriorityValue ::=SEQUENCE { nonStandardParameter NonStandardParameter OPTIONAL, ... } ServicePriority ::=SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, servicePrioritySignalled BOOLEAN, servicePriorityValue ServicePriorityValue OPTIONAL, ... } AuthorizationParameters ::=SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, ... } QOSType ::=CHOICE { desired NULL, required NULL, ... } QOSClass ::=CHOICE { class0 NULL, class1 NULL, class2 NULL, class3 NULL, class4 NULL, class5 NULL, ... } QOSDescriptor ::=SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, qosType QOSType, qosClass QOSClass, ... } GenericTransportParameters ::=SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, averageRate INTEGER (1..4294967295) OPTIONAL, -- average bandwidth bytes/sec burst INTEGER (1..4294967295) OPTIONAL, -- size in bytes peakRate INTEGER (1..4294967295) OPTIONAL, -- peak bandwidth bytes/sec maxPktSize INTEGER (1..4294967295) OPTIONAL, -- size in bytes ... } QOSCapability ::=SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, rsvpParameters RSVPParameters OPTIONAL, atmParameters ATMParameters OPTIONAL, ..., localQoS BOOLEAN OPTIONAL, genericTransportParameters GenericTransportParameters OPTIONAL, servicePriority ServicePriority OPTIONAL, authorizationParameter AuthorizationParameters OPTIONAL, qosDescriptor QOSDescriptor OPTIONAL, dscpValue INTEGER (0..63) OPTIONAL } MediaTransportType ::=CHOICE { ip-UDP NULL, ip-TCP NULL, atm-AAL5-UNIDIR NULL, -- virtual circuits used as unidirectional atm-AAL5-BIDIR NULL, -- virtual circuits used as bidirectional ..., atm-AAL5-compressed SEQUENCE { variable-delta BOOLEAN, ... } } MediaChannelCapability ::=SEQUENCE { mediaTransport MediaTransportType OPTIONAL, ... } TransportCapability ::=SEQUENCE { nonStandard NonStandardParameter OPTIONAL, qOSCapabilities SEQUENCE SIZE(1..256) OF QOSCapability OPTIONAL, mediaChannelCapabilities SEQUENCE SIZE(1..256) OF MediaChannelCapability OPTIONAL, ... } RedundancyEncodingCapability ::=SEQUENCE { redundancyEncodingMethod RedundancyEncodingMethod, primaryEncoding CapabilityTableEntryNumber, secondaryEncoding SEQUENCE SIZE(1..256) OF CapabilityTableEntryNumber OPTIONAL, -- must be Audio, Video, or Data capabilities, not derived -- capabilities; redundancy order is inferred from number of -- secondary encodings ... } RedundancyEncodingMethod ::=CHOICE { nonStandard NonStandardParameter, rtpAudioRedundancyEncoding NULL, ..., rtpH263VideoRedundancyEncoding RTPH263VideoRedundancyEncoding } RTPH263VideoRedundancyEncoding ::= SEQUENCE { numberOfThreads INTEGER (1..16), framesBetweenSyncPoints INTEGER (1..256), frameToThreadMapping CHOICE { roundrobin NULL, custom SEQUENCE SIZE(1..256) OF RTPH263VideoRedundancyFrameMapping, -- empty SEQUENCE for capability negotiation -- meaningful contents only OpenLogicalChannel ... }, containedThreads SEQUENCE SIZE(1..256) OF INTEGER (0..15) OPTIONAL, -- only used for opening of logical channels ... } RTPH263VideoRedundancyFrameMapping ::= SEQUENCE { threadNumber INTEGER (0..15), frameSequence SEQUENCE SIZE(1..256) OF INTEGER (0..255), ... } MultipointCapability ::=SEQUENCE { multicastCapability BOOLEAN, multiUniCastConference BOOLEAN, mediaDistributionCapability SEQUENCE OF MediaDistributionCapability, ... } MediaDistributionCapability ::=SEQUENCE { centralizedControl BOOLEAN, distributedControl BOOLEAN, -- for further study in -- ITU-T Rec. H.323 centralizedAudio BOOLEAN, distributedAudio BOOLEAN, centralizedVideo BOOLEAN, distributedVideo BOOLEAN, centralizedData SEQUENCE OF DataApplicationCapability OPTIONAL, distributedData SEQUENCE OF DataApplicationCapability OPTIONAL, -- for further study in -- ITU-T Rec. H.323 ... } -- ============================================================================= -- Capability exchange definitions: Video capabilities -- ============================================================================= VideoCapability ::=CHOICE { nonStandard NonStandardParameter, h261VideoCapability H261VideoCapability, h262VideoCapability H262VideoCapability, h263VideoCapability H263VideoCapability, is11172VideoCapability IS11172VideoCapability, ..., genericVideoCapability GenericCapability, extendedVideoCapability ExtendedVideoCapability } ExtendedVideoCapability ::= SEQUENCE { videoCapability SEQUENCE OF VideoCapability, videoCapabilityExtension SEQUENCE OF GenericCapability OPTIONAL, ... } H261VideoCapability ::=SEQUENCE { qcifMPI INTEGER (1..4) OPTIONAL, -- units 1/29.97 Hz cifMPI INTEGER (1..4) OPTIONAL, -- units 1/29.97 Hz temporalSpatialTradeOffCapability BOOLEAN, maxBitRate INTEGER (1..19200), -- units of -- 100 bit/s stillImageTransmission BOOLEAN, -- Annex D/H.261 ..., videoBadMBsCap BOOLEAN } H262VideoCapability ::=SEQUENCE { profileAndLevel-SPatML BOOLEAN, profileAndLevel-MPatLL BOOLEAN, profileAndLevel-MPatML BOOLEAN, profileAndLevel-MPatH-14 BOOLEAN, profileAndLevel-MPatHL BOOLEAN, profileAndLevel-SNRatLL BOOLEAN, profileAndLevel-SNRatML BOOLEAN, profileAndLevel-SpatialatH-14 BOOLEAN, profileAndLevel-HPatML BOOLEAN, profileAndLevel-HPatH-14 BOOLEAN, profileAndLevel-HPatHL BOOLEAN, videoBitRate INTEGER (0.. 1073741823) OPTIONAL, -- units 400 bit/s vbvBufferSize INTEGER (0.. 262143) OPTIONAL, -- units 16 384 bits samplesPerLine INTEGER (0..16383) OPTIONAL, -- units samples/line linesPerFrame INTEGER (0..16383) OPTIONAL, -- units lines/frame framesPerSecond INTEGER (0..15) OPTIONAL, -- frame_rate_code luminanceSampleRate INTEGER (0..4294967295) OPTIONAL, -- units samples/s ..., videoBadMBsCap BOOLEAN } H263VideoCapability ::=SEQUENCE { sqcifMPI INTEGER (1..32) OPTIONAL, -- units 1/29.97 Hz qcifMPI INTEGER (1..32) OPTIONAL, -- units 1/29.97 Hz cifMPI INTEGER (1..32) OPTIONAL, -- units 1/29.97 Hz cif4MPI INTEGER (1..32) OPTIONAL, -- units 1/29.97 Hz cif16MPI INTEGER (1..32) OPTIONAL, -- units 1/29.97 Hz maxBitRate INTEGER (1..192400), -- units 100 bit/s unrestrictedVector BOOLEAN, arithmeticCoding BOOLEAN, advancedPrediction BOOLEAN, pbFrames BOOLEAN, temporalSpatialTradeOffCapability BOOLEAN, hrd-B INTEGER (0..524287) OPTIONAL, -- units 128 bits bppMaxKb INTEGER (0..65535) OPTIONAL, -- units 1024 bits ..., slowSqcifMPI INTEGER (1..3600) OPTIONAL, -- units seconds/frame slowQcifMPI INTEGER (1..3600) OPTIONAL, -- units seconds/frame slowCifMPI INTEGER (1..3600) OPTIONAL, -- units seconds/frame slowCif4MPI INTEGER (1..3600) OPTIONAL, -- units seconds/frame slowCif16MPI INTEGER (1..3600) OPTIONAL, -- units seconds/frame errorCompensation BOOLEAN, enhancementLayerInfo EnhancementLayerInfo OPTIONAL, h263Options H263Options OPTIONAL } EnhancementLayerInfo ::=SEQUENCE { baseBitRateConstrained BOOLEAN, snrEnhancement SET SIZE(1..14) OF EnhancementOptions OPTIONAL, spatialEnhancement SET SIZE(1..14) OF EnhancementOptions OPTIONAL, bPictureEnhancement SET SIZE(1..14) OF BEnhancementParameters OPTIONAL, ... } BEnhancementParameters ::=SEQUENCE { enhancementOptions EnhancementOptions, numberOfBPictures INTEGER (1..64), ... } EnhancementOptions ::=SEQUENCE { sqcifMPI INTEGER (1..32) OPTIONAL, -- units 1/29.97 Hz qcifMPI INTEGER (1..32) OPTIONAL, -- units 1/29.97 Hz cifMPI INTEGER (1..32) OPTIONAL, -- units 1/29.97 Hz cif4MPI INTEGER (1..32) OPTIONAL, -- units 1/29.97 Hz cif16MPI INTEGER (1..32) OPTIONAL, -- units 1/29.97 Hz maxBitRate INTEGER (1..192400), -- units 100 bit/s unrestrictedVector BOOLEAN, arithmeticCoding BOOLEAN, temporalSpatialTradeOffCapability BOOLEAN, slowSqcifMPI INTEGER (1..3600) OPTIONAL, -- units seconds/frame slowQcifMPI INTEGER (1..3600) OPTIONAL, -- units seconds/frame slowCifMPI INTEGER (1..3600) OPTIONAL, -- units seconds/frame slowCif4MPI INTEGER (1..3600) OPTIONAL, -- units seconds/frame slowCif16MPI INTEGER (1..3600) OPTIONAL, -- units seconds/frame errorCompensation BOOLEAN, h263Options H263Options OPTIONAL, ... } H263Options ::= SEQUENCE { advancedIntraCodingMode BOOLEAN, deblockingFilterMode BOOLEAN, improvedPBFramesMode BOOLEAN, unlimitedMotionVectors BOOLEAN, fullPictureFreeze BOOLEAN, partialPictureFreezeAndRelease BOOLEAN, resizingPartPicFreezeAndRelease BOOLEAN, fullPictureSnapshot BOOLEAN, partialPictureSnapshot BOOLEAN, videoSegmentTagging BOOLEAN, progressiveRefinement BOOLEAN, dynamicPictureResizingByFour BOOLEAN, dynamicPictureResizingSixteenthPel BOOLEAN, dynamicWarpingHalfPel BOOLEAN, dynamicWarpingSixteenthPel BOOLEAN, independentSegmentDecoding BOOLEAN, slicesInOrder-NonRect BOOLEAN, slicesInOrder-Rect BOOLEAN, slicesNoOrder-NonRect BOOLEAN, slicesNoOrder-Rect BOOLEAN, alternateInterVLCMode BOOLEAN, modifiedQuantizationMode BOOLEAN, reducedResolutionUpdate BOOLEAN, transparencyParameters TransparencyParameters OPTIONAL, separateVideoBackChannel BOOLEAN, refPictureSelection RefPictureSelection OPTIONAL, customPictureClockFrequency SET SIZE (1..16) OF CustomPictureClockFrequency OPTIONAL, customPictureFormat SET SIZE (1..16) OF CustomPictureFormat OPTIONAL, modeCombos SET SIZE (1..16) OF H263VideoModeCombos OPTIONAL, ..., videoBadMBsCap BOOLEAN, h263Version3Options H263Version3Options } TransparencyParameters ::= SEQUENCE { presentationOrder INTEGER(1..256), offset-x INTEGER(-262144..262143), -- 1/8 pixels offset-y INTEGER(-262144..262143), -- 1/8 pixels scale-x INTEGER(1..255), scale-y INTEGER(1..255), ... } RefPictureSelection ::=SEQUENCE { additionalPictureMemory SEQUENCE { sqcifAdditionalPictureMemory INTEGER (1..256) OPTIONAL, -- units frame qcifAdditionalPictureMemory INTEGER (1..256) OPTIONAL, -- units frame cifAdditionalPictureMemory INTEGER (1..256) OPTIONAL, -- units frame cif4AdditionalPictureMemory INTEGER (1..256) OPTIONAL, -- units frame cif16AdditionalPictureMemory INTEGER (1..256) OPTIONAL, -- units frame bigCpfAdditionalPictureMemory INTEGER (1..256) OPTIONAL, -- units frame ... } OPTIONAL, videoMux BOOLEAN, videoBackChannelSend CHOICE { none NULL, ackMessageOnly NULL, nackMessageOnly NULL, ackOrNackMessageOnly NULL, ackAndNackMessage NULL, ... }, ..., enhancedReferencePicSelect SEQUENCE { subPictureRemovalParameters SEQUENCE { mpuHorizMBs INTEGER (1..128), mpuVertMBs INTEGER (1..72), mpuTotalNumber INTEGER (1..65536), ... } OPTIONAL, ... } } CustomPictureClockFrequency ::=SEQUENCE { clockConversionCode INTEGER(1000..1001), clockDivisor INTEGER(1..127), sqcifMPI INTEGER (1..2048) OPTIONAL, qcifMPI INTEGER (1..2048) OPTIONAL, cifMPI INTEGER (1..2048) OPTIONAL, cif4MPI INTEGER (1..2048) OPTIONAL, cif16MPI INTEGER (1..2048) OPTIONAL, ... } CustomPictureFormat ::=SEQUENCE { maxCustomPictureWidth INTEGER(1..2048), -- units 4 pixels maxCustomPictureHeight INTEGER(1..2048), -- units 4 pixels minCustomPictureWidth INTEGER(1..2048), -- units 4 pixels minCustomPictureHeight INTEGER(1..2048), -- units 4 pixels mPI SEQUENCE { standardMPI INTEGER (1..31) OPTIONAL, customPCF SET SIZE (1..16) OF SEQUENCE { clockConversionCode INTEGER (1000..1001), clockDivisor INTEGER (1..127), customMPI INTEGER (1..2048), ... } OPTIONAL, ... }, pixelAspectInformation CHOICE { anyPixelAspectRatio BOOLEAN, pixelAspectCode SET SIZE (1..14) OF INTEGER(1..14), extendedPAR SET SIZE (1..256) OF SEQUENCE { width INTEGER(1..255), height INTEGER(1..255), ... }, ... } , ... } H263VideoModeCombos ::= SEQUENCE { h263VideoUncoupledModes H263ModeComboFlags, h263VideoCoupledModes SET SIZE (1..16) OF H263ModeComboFlags, ... } H263ModeComboFlags ::= SEQUENCE { unrestrictedVector BOOLEAN, arithmeticCoding BOOLEAN, advancedPrediction BOOLEAN, pbFrames BOOLEAN, advancedIntraCodingMode BOOLEAN, deblockingFilterMode BOOLEAN, unlimitedMotionVectors BOOLEAN, slicesInOrder-NonRect BOOLEAN, slicesInOrder-Rect BOOLEAN, slicesNoOrder-NonRect BOOLEAN, slicesNoOrder-Rect BOOLEAN, improvedPBFramesMode BOOLEAN, referencePicSelect BOOLEAN, dynamicPictureResizingByFour BOOLEAN, dynamicPictureResizingSixteenthPel BOOLEAN, dynamicWarpingHalfPel BOOLEAN, dynamicWarpingSixteenthPel BOOLEAN, reducedResolutionUpdate BOOLEAN, independentSegmentDecoding BOOLEAN, alternateInterVLCMode BOOLEAN, modifiedQuantizationMode BOOLEAN, ..., enhancedReferencePicSelect BOOLEAN, h263Version3Options H263Version3Options} H263Version3Options ::=SEQUENCE { dataPartitionedSlices BOOLEAN, fixedPointIDCT0 BOOLEAN, interlacedFields BOOLEAN, currentPictureHeaderRepetition BOOLEAN, previousPictureHeaderRepetition BOOLEAN, nextPictureHeaderRepetition BOOLEAN, pictureNumber BOOLEAN, spareReferencePictures BOOLEAN, ... } IS11172VideoCapability ::=SEQUENCE { constrainedBitstream BOOLEAN, videoBitRate INTEGER (0.. 1073741823) OPTIONAL, -- units 400 bit/s vbvBufferSize INTEGER (0.. 262143) OPTIONAL, -- units 16 384 bits samplesPerLine INTEGER (0..16383) OPTIONAL, -- units samples/line linesPerFrame INTEGER (0..16383) OPTIONAL, -- units lines/frame pictureRate INTEGER (0..15) OPTIONAL, luminanceSampleRate INTEGER (0..4294967295) OPTIONAL, -- units samples/s ..., videoBadMBsCap BOOLEAN } -- ============================================================================= -- Capability exchange definitions: Audio capabilities -- ============================================================================= -- For an H.222 multiplex, the integers indicate the size of the STD buffer -- in units of 256 octets -- For an H.223 multiplex, the integers indicate the maximum number of audio -- frames per AL-SDU -- For an H.225.0 multiplex, the integers indicate the maximum number of audio -- frames per packet AudioCapability ::=CHOICE { nonStandard NonStandardParameter, g711Alaw64k INTEGER (1..256), g711Alaw56k INTEGER (1..256), g711Ulaw64k INTEGER (1..256), g711Ulaw56k INTEGER (1..256), g722-64k INTEGER (1..256), g722-56k INTEGER (1..256), g722-48k INTEGER (1..256), g7231 SEQUENCE { maxAl-sduAudioFrames INTEGER (1..256), silenceSuppression BOOLEAN }, g728 INTEGER (1..256), g729 INTEGER (1..256), g729AnnexA INTEGER (1..256), is11172AudioCapability IS11172AudioCapability, is13818AudioCapability IS13818AudioCapability, ..., g729wAnnexB INTEGER(1..256), g729AnnexAwAnnexB INTEGER(1..256), g7231AnnexCCapability G7231AnnexCCapability, gsmFullRate GSMAudioCapability, gsmHalfRate GSMAudioCapability, gsmEnhancedFullRate GSMAudioCapability, genericAudioCapability GenericCapability, g729Extensions G729Extensions, vbd VBDCapability, audioTelephonyEvent NoPTAudioTelephonyEventCapability, audioTone NoPTAudioToneCapability } G729Extensions ::= SEQUENCE { audioUnit INTEGER (1..256) OPTIONAL, annexA BOOLEAN, annexB BOOLEAN, annexD BOOLEAN, annexE BOOLEAN, annexF BOOLEAN, annexG BOOLEAN, annexH BOOLEAN, ... } G7231AnnexCCapability ::= SEQUENCE { maxAl-sduAudioFrames INTEGER (1..256), silenceSuppression BOOLEAN, g723AnnexCAudioMode SEQUENCE { highRateMode0 INTEGER (27..78), -- units octets highRateMode1 INTEGER (27..78), -- units octets lowRateMode0 INTEGER (23..66), -- units octets lowRateMode1 INTEGER (23..66), -- units octets sidMode0 INTEGER (6..17), -- units octets sidMode1 INTEGER (6..17), -- units octets ... } OPTIONAL, ... } IS11172AudioCapability ::=SEQUENCE { audioLayer1 BOOLEAN, audioLayer2 BOOLEAN, audioLayer3 BOOLEAN, audioSampling32k BOOLEAN, audioSampling44k1 BOOLEAN, audioSampling48k BOOLEAN, singleChannel BOOLEAN, twoChannels BOOLEAN, bitRate INTEGER (1..448), -- units kbit/s ... } IS13818AudioCapability ::=SEQUENCE { audioLayer1 BOOLEAN, audioLayer2 BOOLEAN, audioLayer3 BOOLEAN, audioSampling16k BOOLEAN, audioSampling22k05 BOOLEAN, audioSampling24k BOOLEAN, audioSampling32k BOOLEAN, audioSampling44k1 BOOLEAN, audioSampling48k BOOLEAN, singleChannel BOOLEAN, twoChannels BOOLEAN, threeChannels2-1 BOOLEAN, threeChannels3-0 BOOLEAN, fourChannels2-0-2-0 BOOLEAN, fourChannels2-2 BOOLEAN, fourChannels3-1 BOOLEAN, fiveChannels3-0-2-0 BOOLEAN, fiveChannels3-2 BOOLEAN, lowFrequencyEnhancement BOOLEAN, multilingual BOOLEAN, bitRate INTEGER (1..1130), -- units kbit/s ... } GSMAudioCapability ::= SEQUENCE { audioUnitSize INTEGER (1..256), comfortNoise BOOLEAN, scrambled BOOLEAN, ... } VBDCapability ::=SEQUENCE { type AudioCapability, -- shall not be "vbd" ... } -- ============================================================================= -- Capability exchange definitions: Data capabilities -- ============================================================================= DataApplicationCapability ::=SEQUENCE { application CHOICE { nonStandard NonStandardParameter, t120 DataProtocolCapability, dsm-cc DataProtocolCapability, userData DataProtocolCapability, t84 SEQUENCE { t84Protocol DataProtocolCapability, t84Profile T84Profile }, t434 DataProtocolCapability, h224 DataProtocolCapability, nlpid SEQUENCE { nlpidProtocol DataProtocolCapability, nlpidData OCTET STRING }, dsvdControl NULL, h222DataPartitioning DataProtocolCapability, ..., t30fax DataProtocolCapability, t140 DataProtocolCapability, t38fax SEQUENCE { t38FaxProtocol DataProtocolCapability, t38FaxProfile T38FaxProfile }, genericDataCapability GenericCapability }, maxBitRate INTEGER (0..4294967295), -- units 100 bit/s ... } DataProtocolCapability ::=CHOICE { nonStandard NonStandardParameter, v14buffered NULL, v42lapm NULL, -- may negotiate to V.42 bis hdlcFrameTunnelling NULL, h310SeparateVCStack NULL, h310SingleVCStack NULL, transparent NULL, ..., segmentationAndReassembly NULL, hdlcFrameTunnelingwSAR NULL, v120 NULL, -- as in H.230 separateLANStack NULL, v76wCompression CHOICE { transmitCompression CompressionType, receiveCompression CompressionType, transmitAndReceiveCompression CompressionType, ... }, tcp NULL, udp NULL } CompressionType ::=CHOICE { v42bis V42bis, ... } V42bis ::=SEQUENCE { numberOfCodewords INTEGER (1..65536), maximumStringLength INTEGER (1..256), ... } T84Profile ::=CHOICE { t84Unrestricted NULL, t84Restricted SEQUENCE { qcif BOOLEAN, cif BOOLEAN, ccir601Seq BOOLEAN, ccir601Prog BOOLEAN, hdtvSeq BOOLEAN, hdtvProg BOOLEAN, g3FacsMH200x100 BOOLEAN, g3FacsMH200x200 BOOLEAN, g4FacsMMR200x100 BOOLEAN, g4FacsMMR200x200 BOOLEAN, jbig200x200Seq BOOLEAN, jbig200x200Prog BOOLEAN, jbig300x300Seq BOOLEAN, jbig300x300Prog BOOLEAN, digPhotoLow BOOLEAN, digPhotoMedSeq BOOLEAN, digPhotoMedProg BOOLEAN, digPhotoHighSeq BOOLEAN, digPhotoHighProg BOOLEAN, ... } } T38FaxProfile ::=SEQUENCE { fillBitRemoval BOOLEAN, transcodingJBIG BOOLEAN, transcodingMMR BOOLEAN, ..., version INTEGER (0..255), -- Version 0, the default, refers to -- T.38 (2005) t38FaxRateManagement T38FaxRateManagement, -- The default Data Rate Management is -- determined by the choice of -- DataProtocolCapability t38FaxUdpOptions T38FaxUdpOptions OPTIONAL, -- For UDP, t38UDPRedundancy is the default t38FaxTcpOptions T38FaxTcpOptions OPTIONAL } T38FaxRateManagement ::= CHOICE { localTCF NULL, transferredTCF NULL, ... } T38FaxUdpOptions ::= SEQUENCE { t38FaxMaxBuffer INTEGER OPTIONAL, t38FaxMaxDatagram INTEGER OPTIONAL, t38FaxUdpEC CHOICE { t38UDPFEC NULL, t38UDPRedundancy NULL, ... } } T38FaxTcpOptions ::= SEQUENCE { t38TCPBidirectionalMode BOOLEAN, ... } -- ============================================================================= -- Encryption Capability Definitions -- ============================================================================= EncryptionAuthenticationAndIntegrity ::=SEQUENCE { encryptionCapability EncryptionCapability OPTIONAL, authenticationCapability AuthenticationCapability OPTIONAL, integrityCapability IntegrityCapability OPTIONAL, ..., genericH235SecurityCapability GenericCapability OPTIONAL } EncryptionCapability ::=SEQUENCE SIZE(1..256) OF MediaEncryptionAlgorithm MediaEncryptionAlgorithm ::=CHOICE { nonStandard NonStandardParameter, algorithm OBJECT IDENTIFIER, -- many defined -- in ISO/IEC 9979 ... } AuthenticationCapability ::=SEQUENCE { nonStandard NonStandardParameter OPTIONAL, ..., antiSpamAlgorithm OBJECT IDENTIFIER OPTIONAL } IntegrityCapability ::=SEQUENCE { nonStandard NonStandardParameter OPTIONAL, ... } -- ============================================================================= -- Capability Exchange Definitions: UserInput -- ============================================================================= UserInputCapability ::= CHOICE { nonStandard SEQUENCE SIZE(1..16) OF NonStandardParameter, basicString NULL, -- alphanumeric iA5String NULL, -- alphanumeric generalString NULL, -- alphanumeric dtmf NULL, -- supports dtmf using signal -- and signalUpdate hookflash NULL, -- supports hookflash using signal ..., extendedAlphanumeric NULL, encryptedBasicString NULL, -- encrypted Basic string in -- encryptedAlphanumeric encryptedIA5String NULL, -- encrypted IA5 string in -- encryptedSignalType encryptedGeneralString NULL, -- encrypted general string in -- extendedAlphanumeric.encryptedalphanumeric secureDTMF NULL, -- secure DTMF using encryptedSignalType genericUserInputCapability GenericCapability } -- ============================================================================= -- Capability Exchange Definitions: Conference -- ============================================================================= ConferenceCapability ::=SEQUENCE { nonStandardData SEQUENCE OF NonStandardParameter OPTIONAL, chairControlCapability BOOLEAN, ..., videoIndicateMixingCapability BOOLEAN, multipointVisualizationCapability BOOLEAN OPTIONAL -- same as H.230 MVC } -- ============================================================================= -- Capability Exchange Definitions: Generic Capability -- ============================================================================= GenericCapability ::=SEQUENCE { capabilityIdentifier CapabilityIdentifier, maxBitRate INTEGER (0..4294967295) OPTIONAL, -- Units 100 bit/s collapsing SEQUENCE OF GenericParameter OPTIONAL, nonCollapsing SEQUENCE OF GenericParameter OPTIONAL, nonCollapsingRaw OCTET STRING OPTIONAL, -- Typically contains ASN.1 -- PER encoded data describing capability transport DataProtocolCapability OPTIONAL, ... } CapabilityIdentifier ::=CHOICE { standard OBJECT IDENTIFIER, -- e.g., { itu-t (0) recommendation (0) h (8) 267 -- version (0) 2 subIdentifier (0)} h221NonStandard NonStandardParameter, uuid OCTET STRING ( SIZE (16) ), domainBased IA5String ( SIZE (1..64) ), ... } -- NOTE - The ranges of parameter values have been selected to ensure that the -- GenericParameter preamble, standard part of ParameterIdentifier and the -- encoding of that choice, and the preamble of ParameterValue to fit into -- 2 octets. GenericParameter ::=SEQUENCE { parameterIdentifier ParameterIdentifier, parameterValue ParameterValue, supersedes SEQUENCE OF ParameterIdentifier OPTIONAL, ... } ParameterIdentifier ::=CHOICE { standard INTEGER (0..127), -- Assigned by -- Capability -- specifications h221NonStandard NonStandardParameter, -- N.B. -- NonStandardIdentifier -- is not sufficient in -- this case uuid OCTET STRING ( SIZE (16) ), -- For non- -- standard domainBased IA5String ( SIZE (1..64) ), ... } ParameterValue ::=CHOICE { logical NULL, -- Only acceptable if -- all entities -- include this option booleanArray INTEGER (0..255), -- array of 8 logical -- types unsignedMin INTEGER (0..65535), -- Look for min -- common value unsignedMax INTEGER (0..65535), -- Look for max -- common value unsigned32Min INTEGER (0..4294967295), -- Look for min -- common value unsigned32Max INTEGER (0..4294967295), -- Look for max -- common value octetString OCTET STRING, -- non-collapsing -- octet string genericParameter SEQUENCE OF GenericParameter, ... } -- ============================================================================= -- Capability Exchange Definitions: Multiplexed Stream Capability -- ============================================================================= MultiplexedStreamCapability ::=SEQUENCE { multiplexFormat MultiplexFormat, controlOnMuxStream BOOLEAN, capabilityOnMuxStream SET SIZE (1..256) OF AlternativeCapabilitySet OPTIONAL, ... } MultiplexFormat ::= CHOICE { nonStandard NonStandardParameter, h222Capability H222Capability, h223Capability H223Capability, ... } -- ============================================================================= -- Capability Exchange Definitions: AudioTelephonyEventCapability and AudioToneCapability --============================================================================== AudioTelephonyEventCapability ::=SEQUENCE { dynamicRTPPayloadType INTEGER(96..127), audioTelephoneEvent GeneralString, -- As per -- in 3.9/RFC 2833 ... } AudioToneCapability ::=SEQUENCE { dynamicRTPPayloadType INTEGER(96..127), ... } -- The following definitions are as above but without a Payload Type field. NoPTAudioTelephonyEventCapability ::=SEQUENCE { audioTelephoneEvent GeneralString, -- As per -- in 3.9/RFC 2833 ... } NoPTAudioToneCapability ::=SEQUENCE { ... } -- ============================================================================= -- Capability Exchange Definitions: MultiplePayloadStreamCapability -- ============================================================================= MultiplePayloadStreamCapability ::=SEQUENCE { capabilities SET SIZE(1..256) OF AlternativeCapabilitySet, ... } -- ============================================================================= -- Capability Exchange Definitions: FECCapability -- ============================================================================= DepFECCapability ::=CHOICE -- Deprecated, do not use { rfc2733 SEQUENCE { redundancyEncoding BOOLEAN, separateStream SEQUENCE { separatePort BOOLEAN, samePort BOOLEAN, ... }, ... }, ... } FECCapability ::= SEQUENCE { protectedCapability CapabilityTableEntryNumber, fecScheme OBJECT IDENTIFIER OPTIONAL, -- identifies encoding scheme rfc2733Format CHOICE { rfc2733rfc2198 MaxRedundancy, -- RFC2198 rfc2733sameport MaxRedundancy, -- separate packet, same port rfc2733diffport MaxRedundancy -- separate packet and port } OPTIONAL, ... } MaxRedundancy ::= INTEGER (1..MAX) -- ============================================================================= -- Logical channel signalling definitions -- ============================================================================= -- "Forward" is used to refer to transmission in the direction from the terminal -- making the original request for a logical channel to the other terminal, and -- "reverse" is used to refer to the opposite direction of transmission, in the -- case of a bidirectional channel request. OpenLogicalChannel ::=SEQUENCE { forwardLogicalChannelNumber LogicalChannelNumber, forwardLogicalChannelParameters SEQUENCE { portNumber INTEGER (0..65535) OPTIONAL, dataType DataType, multiplexParameters CHOICE { h222LogicalChannelParameters H222LogicalChannelParameters, h223LogicalChannelParameters H223LogicalChannelParameters, v76LogicalChannelParameters V76LogicalChannelParameters, ..., h2250LogicalChannelParameters H2250LogicalChannelParameters, none NULL -- for use with Separate Stack when -- multiplexParameters are not -- required or appropriate }, ..., forwardLogicalChannelDependency LogicalChannelNumber OPTIONAL, -- also used to refer to the primary -- logical channel when using video -- redundancy coding replacementFor LogicalChannelNumber OPTIONAL }, -- Used to specify the reverse channel for bidirectional open request reverseLogicalChannelParameters SEQUENCE { dataType DataType, multiplexParameters CHOICE { -- H.222 parameters are never present in reverse direction h223LogicalChannelParameters H223LogicalChannelParameters, v76LogicalChannelParameters V76LogicalChannelParameters, ..., h2250LogicalChannelParameters H2250LogicalChannelParameters } OPTIONAL, -- Not present for H.222 ..., reverseLogicalChannelDependency LogicalChannelNumber OPTIONAL, -- also used to refer to the primary logical channel when using -- video redundancy coding replacementFor LogicalChannelNumber OPTIONAL } OPTIONAL, -- Not present for unidirectional channel request ..., separateStack NetworkAccessParameters OPTIONAL, -- for Open responder to establish the stack encryptionSync EncryptionSync OPTIONAL, genericInformation SEQUENCE OF GenericInformation OPTIONAL -- generic information associated -- with the message } LogicalChannelNumber ::=INTEGER (1..65535) NetworkAccessParameters ::=SEQUENCE { distribution CHOICE { unicast NULL, multicast NULL, -- for further study in T.120 ... } OPTIONAL, networkAddress CHOICE { q2931Address Q2931Address, e164Address IA5String(SIZE(1..128)) (FROM ("0123456789#*,")), localAreaAddress TransportAddress, ... }, associateConference BOOLEAN, externalReference OCTET STRING(SIZE(1..255)) OPTIONAL, ..., t120SetupProcedure CHOICE { originateCall NULL, waitForCall NULL, issueQuery NULL, ... } OPTIONAL } Q2931Address ::=SEQUENCE { address CHOICE { internationalNumber NumericString(SIZE(1..16)), nsapAddress OCTET STRING (SIZE(1..20)), ... }, subaddress OCTET STRING (SIZE(1..20)) OPTIONAL, ... } V75Parameters ::= SEQUENCE { audioHeaderPresent BOOLEAN, ... } DataType ::=CHOICE { nonStandard NonStandardParameter, nullData NULL, videoData VideoCapability, audioData AudioCapability, data DataApplicationCapability, encryptionData EncryptionMode, ..., h235Control NonStandardParameter, h235Media H235Media, multiplexedStream MultiplexedStreamParameter, redundancyEncoding RedundancyEncoding, multiplePayloadStream MultiplePayloadStream, depFec DepFECData, -- Deprecated, do not use fec FECData } H235Media ::=SEQUENCE { encryptionAuthenticationAndIntegrity EncryptionAuthenticationAndIntegrity, mediaType CHOICE { nonStandard NonStandardParameter, videoData VideoCapability, audioData AudioCapability, data DataApplicationCapability, ..., redundancyEncoding RedundancyEncoding, multiplePayloadStream MultiplePayloadStream, depFec DepFECData, -- Deprecated, do not use fec FECData }, ... } MultiplexedStreamParameter ::=SEQUENCE { multiplexFormat MultiplexFormat, controlOnMuxStream BOOLEAN, ... } H222LogicalChannelParameters ::=SEQUENCE { resourceID INTEGER (0..65535), subChannelID INTEGER (0..8191), pcr-pid INTEGER (0..8191) OPTIONAL, programDescriptors OCTET STRING OPTIONAL, streamDescriptors OCTET STRING OPTIONAL, ... } H223LogicalChannelParameters ::=SEQUENCE { adaptationLayerType CHOICE { nonStandard NonStandardParameter, al1Framed NULL, al1NotFramed NULL, al2WithoutSequenceNumbers NULL, al2WithSequenceNumbers NULL, al3 SEQUENCE { controlFieldOctets INTEGER (0..2), sendBufferSize INTEGER (0..16777215) -- units octets }, ..., al1M H223AL1MParameters, al2M H223AL2MParameters, al3M H223AL3MParameters }, segmentableFlag BOOLEAN, ... } H223AL1MParameters ::=SEQUENCE { transferMode CHOICE { framed NULL, unframed NULL, ... }, headerFEC CHOICE { sebch16-7 NULL, golay24-12 NULL, ... }, crcLength CHOICE { crc4bit NULL, crc12bit NULL, crc20bit NULL, crc28bit NULL, ..., crc8bit NULL, crc16bit NULL, crc32bit NULL, crcNotUsed NULL }, rcpcCodeRate INTEGER (8..32), arqType CHOICE { noArq NULL, typeIArq H223AnnexCArqParameters, typeIIArq H223AnnexCArqParameters, ... }, alpduInterleaving BOOLEAN, alsduSplitting BOOLEAN, ..., rsCodeCorrection INTEGER (0..127) OPTIONAL } H223AL2MParameters ::=SEQUENCE { headerFEC CHOICE { sebch16-5 NULL, golay24-12 NULL, ... }, alpduInterleaving BOOLEAN, ... } H223AL3MParameters ::=SEQUENCE { headerFormat CHOICE { sebch16-7 NULL, golay24-12 NULL, ... }, crcLength CHOICE { crc4bit NULL, crc12bit NULL, crc20bit NULL, crc28bit NULL, ..., crc8bit NULL, crc16bit NULL, crc32bit NULL, crcNotUsed NULL }, rcpcCodeRate INTEGER (8..32), arqType CHOICE { noArq NULL, typeIArq H223AnnexCArqParameters, typeIIArq H223AnnexCArqParameters, ... }, alpduInterleaving BOOLEAN, ..., rsCodeCorrection INTEGER (0..127) OPTIONAL } H223AnnexCArqParameters ::=SEQUENCE { numberOfRetransmissions CHOICE { finite INTEGER (0..16), infinite NULL, ... }, sendBufferSize INTEGER (0..16777215), -- units octets ... } V76LogicalChannelParameters ::=SEQUENCE { hdlcParameters V76HDLCParameters, suspendResume CHOICE { noSuspendResume NULL, suspendResumewAddress NULL, suspendResumewoAddress NULL, ... }, uIH BOOLEAN, mode CHOICE { eRM SEQUENCE { windowSize INTEGER (1..127) , recovery CHOICE { rej NULL, sREJ NULL, mSREJ NULL, ... }, ... }, uNERM NULL, ... }, v75Parameters V75Parameters, ... } V76HDLCParameters ::=SEQUENCE { crcLength CRCLength, n401 INTEGER (1..4095), loopbackTestProcedure BOOLEAN, ... } CRCLength ::=CHOICE { crc8bit NULL, crc16bit NULL, crc32bit NULL, ... } H2250LogicalChannelParameters ::=SEQUENCE { nonStandard SEQUENCE OF NonStandardParameter OPTIONAL, sessionID INTEGER(0..255), associatedSessionID INTEGER(1..255) OPTIONAL, mediaChannel TransportAddress OPTIONAL, mediaGuaranteedDelivery BOOLEAN OPTIONAL, mediaControlChannel TransportAddress OPTIONAL, -- reverse -- RTCP channel mediaControlGuaranteedDelivery BOOLEAN OPTIONAL, silenceSuppression BOOLEAN OPTIONAL, destination TerminalLabel OPTIONAL, dynamicRTPPayloadType INTEGER(96..127) OPTIONAL, mediaPacketization CHOICE { h261aVideoPacketization NULL, ..., rtpPayloadType RTPPayloadType } OPTIONAL, ..., transportCapability TransportCapability OPTIONAL, redundancyEncoding RedundancyEncoding OPTIONAL, source TerminalLabel OPTIONAL } RTPPayloadType ::= SEQUENCE { payloadDescriptor CHOICE { nonStandardIdentifier NonStandardParameter, rfc-number INTEGER (1..32768, ...), oid OBJECT IDENTIFIER, ... }, payloadType INTEGER (0..127) OPTIONAL, ... } RedundancyEncoding ::=SEQUENCE { redundancyEncodingMethod RedundancyEncodingMethod, secondaryEncoding DataType OPTIONAL, -- depends on method ..., -- The sequence below may be used in place of the above secondaryEncoding field rtpRedundancyEncoding SEQUENCE { primary RedundancyEncodingElement OPTIONAL, -- Present when redundancyEncoding -- is selected as the dataType -- in an OpenLogicalChannel or -- as part of a MultiplePayloadSteam secondary SEQUENCE OF RedundancyEncodingElement OPTIONAL, ... } OPTIONAL } RedundancyEncodingElement ::=SEQUENCE { dataType DataType, payloadType INTEGER(0..127) OPTIONAL, ... } MultiplePayloadStream ::=SEQUENCE { elements SEQUENCE OF MultiplePayloadStreamElement, ... } MultiplePayloadStreamElement ::=SEQUENCE { dataType DataType, payloadType INTEGER(0..127) OPTIONAL, ... } DepFECData ::=CHOICE -- Deprecated, do not use { rfc2733 SEQUENCE { mode CHOICE { redundancyEncoding NULL, separateStream CHOICE { differentPort SEQUENCE { protectedSessionID INTEGER(1..255), protectedPayloadType INTEGER(0..127) OPTIONAL, ... }, samePort SEQUENCE { protectedPayloadType INTEGER(0..127), ... }, ... }, ... }, ... } } FECData ::= CHOICE { rfc2733 SEQUENCE { protectedPayloadType INTEGER(0..127), fecScheme OBJECT IDENTIFIER OPTIONAL, pktMode CHOICE { rfc2198coding NULL, rfc2733sameport SEQUENCE { ... }, rfc2733diffport SEQUENCE { protectedChannel LogicalChannelNumber, ... }, ... }, ... }, ... } TransportAddress ::=CHOICE { unicastAddress UnicastAddress, multicastAddress MulticastAddress, ... } UnicastAddress ::=CHOICE { iPAddress SEQUENCE { network OCTET STRING (SIZE(4)), tsapIdentifier INTEGER(0..65535), ... }, iPXAddress SEQUENCE { node OCTET STRING (SIZE(6)), netnum OCTET STRING (SIZE(4)), tsapIdentifier OCTET STRING (SIZE(2)), ... }, iP6Address SEQUENCE { network OCTET STRING (SIZE(16)), tsapIdentifier INTEGER(0..65535), ... }, netBios OCTET STRING (SIZE(16)), iPSourceRouteAddress SEQUENCE { routing CHOICE { strict NULL, loose NULL }, network OCTET STRING (SIZE(4)), tsapIdentifier INTEGER(0..65535), route SEQUENCE OF OCTET STRING (SIZE(4)), ... }, ..., nsap OCTET STRING (SIZE(1..20)), nonStandardAddress NonStandardParameter } MulticastAddress ::=CHOICE { iPAddress SEQUENCE { network OCTET STRING (SIZE(4)), tsapIdentifier INTEGER(0..65535), ... }, iP6Address SEQUENCE { network OCTET STRING (SIZE(16)), tsapIdentifier INTEGER(0..65535), ... }, ..., nsap OCTET STRING (SIZE(1..20)), nonStandardAddress NonStandardParameter } EncryptionSync ::=SEQUENCE -- used to supply new key and synchronization point { nonStandard NonStandardParameter OPTIONAL, synchFlag INTEGER(0..255) , -- may need to be larger -- for H.324, etc. -- shall be the Dynamic -- Payload# for H.323 h235Key OCTET STRING (SIZE(1..65535)), -- H.235.0 -- encoded value escrowentry SEQUENCE SIZE(1..256) OF EscrowData OPTIONAL, ..., genericParameter GenericParameter OPTIONAL } EscrowData ::=SEQUENCE { escrowID OBJECT IDENTIFIER, escrowValue BIT STRING (SIZE(1..65535)), ... } OpenLogicalChannelAck ::=SEQUENCE { forwardLogicalChannelNumber LogicalChannelNumber, reverseLogicalChannelParameters SEQUENCE { reverseLogicalChannelNumber LogicalChannelNumber, portNumber INTEGER (0..65535) OPTIONAL, multiplexParameters CHOICE { h222LogicalChannelParameters H222LogicalChannelParameters, -- H.223 parameters are never present in reverse direction ..., h2250LogicalChannelParameters H2250LogicalChannelParameters } OPTIONAL, -- not present for H.223 ..., replacementFor LogicalChannelNumber OPTIONAL } OPTIONAL, -- not present for unidirectional channel -- request ..., separateStack NetworkAccessParameters OPTIONAL, -- for Open requester to establish -- the stack forwardMultiplexAckParameters CHOICE { -- H.222 parameters are never present in the Ack -- H.223 parameters are never present in the Ack -- V.76 parameters are never present in the Ack h2250LogicalChannelAckParameters H2250LogicalChannelAckParameters, ... } OPTIONAL, encryptionSync EncryptionSync OPTIONAL, -- used only by Master genericInformation SEQUENCE OF GenericInformation OPTIONAL -- generic information associated -- with the message } OpenLogicalChannelReject ::=SEQUENCE { forwardLogicalChannelNumber LogicalChannelNumber, cause CHOICE { unspecified NULL, unsuitableReverseParameters NULL, dataTypeNotSupported NULL, dataTypeNotAvailable NULL, unknownDataType NULL, dataTypeALCombinationNotSupported NULL, ..., multicastChannelNotAllowed NULL, insufficientBandwidth NULL, separateStackEstablishmentFailed NULL, invalidSessionID NULL, masterSlaveConflict NULL, waitForCommunicationMode NULL, invalidDependentChannel NULL, replacementForRejected NULL, securityDenied NULL }, ..., genericInformation SEQUENCE OF GenericInformation OPTIONAL -- generic information associated -- with the message } OpenLogicalChannelConfirm ::=SEQUENCE { forwardLogicalChannelNumber LogicalChannelNumber, ..., genericInformation SEQUENCE OF GenericInformation OPTIONAL -- generic information associated -- with the message } H2250LogicalChannelAckParameters ::=SEQUENCE { nonStandard SEQUENCE OF NonStandardParameter OPTIONAL, sessionID INTEGER(1..255) OPTIONAL, mediaChannel TransportAddress OPTIONAL, mediaControlChannel TransportAddress OPTIONAL, -- forward RTCP -- channel dynamicRTPPayloadType INTEGER(96..127) OPTIONAL, -- used only by -- the master or -- MC ..., flowControlToZero BOOLEAN, portNumber INTEGER (0..65535) OPTIONAL } CloseLogicalChannel ::=SEQUENCE { forwardLogicalChannelNumber LogicalChannelNumber, source CHOICE { user NULL, lcse NULL }, ..., reason CHOICE { unknown NULL, reopen NULL, reservationFailure NULL, ... } } CloseLogicalChannelAck ::=SEQUENCE { forwardLogicalChannelNumber LogicalChannelNumber, ... } RequestChannelClose ::=SEQUENCE { forwardLogicalChannelNumber LogicalChannelNumber, ..., qosCapability QOSCapability OPTIONAL, reason CHOICE { unknown NULL, normal NULL, reopen NULL, reservationFailure NULL, ... } } RequestChannelCloseAck ::=SEQUENCE { forwardLogicalChannelNumber LogicalChannelNumber, ... } RequestChannelCloseReject ::=SEQUENCE { forwardLogicalChannelNumber LogicalChannelNumber, cause CHOICE { unspecified NULL, ... }, ... } RequestChannelCloseRelease ::=SEQUENCE { forwardLogicalChannelNumber LogicalChannelNumber, ... } -- ============================================================================= -- H.223 multiplex table definitions -- ============================================================================= MultiplexEntrySend ::=SEQUENCE { sequenceNumber SequenceNumber, multiplexEntryDescriptors SET SIZE (1..15) OF MultiplexEntryDescriptor, ... } MultiplexEntryDescriptor ::=SEQUENCE { multiplexTableEntryNumber MultiplexTableEntryNumber, elementList SEQUENCE SIZE (1..256) OF MultiplexElement OPTIONAL } MultiplexElement ::=SEQUENCE { type CHOICE { logicalChannelNumber INTEGER(0..65535), subElementList SEQUENCE SIZE (2..255) OF MultiplexElement }, repeatCount CHOICE { finite INTEGER (1..65535), -- repeats of type untilClosingFlag NULL -- used for last element } } MultiplexTableEntryNumber ::=INTEGER (1..15) MultiplexEntrySendAck ::=SEQUENCE { sequenceNumber SequenceNumber, multiplexTableEntryNumber SET SIZE (1..15) OF MultiplexTableEntryNumber, ... } MultiplexEntrySendReject ::=SEQUENCE { sequenceNumber SequenceNumber, rejectionDescriptions SET SIZE (1..15) OF MultiplexEntryRejectionDescriptions, ... } MultiplexEntryRejectionDescriptions ::=SEQUENCE { multiplexTableEntryNumber MultiplexTableEntryNumber, cause CHOICE { unspecifiedCause NULL, descriptorTooComplex NULL, ... }, ... } MultiplexEntrySendRelease ::=SEQUENCE { multiplexTableEntryNumber SET SIZE (1..15) OF MultiplexTableEntryNumber, ... } RequestMultiplexEntry ::=SEQUENCE { entryNumbers SET SIZE (1..15) OF MultiplexTableEntryNumber, ... } RequestMultiplexEntryAck ::=SEQUENCE { entryNumbers SET SIZE (1..15) OF MultiplexTableEntryNumber, ... } RequestMultiplexEntryReject ::=SEQUENCE { entryNumbers SET SIZE (1..15) OF MultiplexTableEntryNumber, rejectionDescriptions SET SIZE (1..15) OF RequestMultiplexEntryRejectionDescriptions, ... } RequestMultiplexEntryRejectionDescriptions ::=SEQUENCE { multiplexTableEntryNumber MultiplexTableEntryNumber, cause CHOICE { unspecifiedCause NULL, ... }, ... } RequestMultiplexEntryRelease ::=SEQUENCE { entryNumbers SET SIZE (1..15) OF MultiplexTableEntryNumber, ... } -- ============================================================================= -- Request mode definitions -- ============================================================================= -- RequestMode is a list, in order or preference, of modes that a terminal would -- like to have transmitted to it. RequestMode ::=SEQUENCE { sequenceNumber SequenceNumber, requestedModes SEQUENCE SIZE (1..256) OF ModeDescription, ... } RequestModeAck ::=SEQUENCE { sequenceNumber SequenceNumber, response CHOICE { willTransmitMostPreferredMode NULL, willTransmitLessPreferredMode NULL, ... }, ... } RequestModeReject ::=SEQUENCE { sequenceNumber SequenceNumber, cause CHOICE { modeUnavailable NULL, multipointConstraint NULL, requestDenied NULL, ... }, ... } RequestModeRelease ::=SEQUENCE { ... } -- ============================================================================= -- Request mode definitions: Mode description -- ============================================================================= ModeDescription ::=SET SIZE (1..256) OF ModeElement ModeElementType ::=CHOICE { nonStandard NonStandardParameter, videoMode VideoMode, audioMode AudioMode, dataMode DataMode, encryptionMode EncryptionMode, ..., h235Mode H235Mode, multiplexedStreamMode MultiplexedStreamParameter, redundancyEncodingDTMode RedundancyEncodingDTMode, multiplePayloadStreamMode MultiplePayloadStreamMode, depFecMode DepFECMode, -- deprecated, do not use fecMode FECMode } ModeElement ::= SEQUENCE { type ModeElementType, h223ModeParameters H223ModeParameters OPTIONAL, ..., v76ModeParameters V76ModeParameters OPTIONAL, h2250ModeParameters H2250ModeParameters OPTIONAL, genericModeParameters GenericCapability OPTIONAL, multiplexedStreamModeParameters MultiplexedStreamModeParameters OPTIONAL, logicalChannelNumber LogicalChannelNumber OPTIONAL } H235Mode ::=SEQUENCE { encryptionAuthenticationAndIntegrity EncryptionAuthenticationAndIntegrity, mediaMode CHOICE { nonStandard NonStandardParameter, videoMode VideoMode, audioMode AudioMode, dataMode DataMode, ... }, ... } MultiplexedStreamModeParameters ::=SEQUENCE { logicalChannelNumber LogicalChannelNumber, ... } RedundancyEncodingDTMode ::=SEQUENCE { redundancyEncodingMethod RedundancyEncodingMethod, primary RedundancyEncodingDTModeElement, secondary SEQUENCE OF RedundancyEncodingDTModeElement, ... } RedundancyEncodingDTModeElement ::=SEQUENCE { type CHOICE { nonStandard NonStandardParameter, videoMode VideoMode, audioMode AudioMode, dataMode DataMode, encryptionMode EncryptionMode, h235Mode H235Mode, ..., fecMode FECMode }, ... } MultiplePayloadStreamMode ::=SEQUENCE { elements SEQUENCE OF MultiplePayloadStreamElementMode, ... } MultiplePayloadStreamElementMode ::=SEQUENCE { type ModeElementType, ... } DepFECMode ::=CHOICE -- deprecated, do not use { rfc2733Mode SEQUENCE { mode CHOICE { redundancyEncoding NULL, separateStream CHOICE { differentPort SEQUENCE { protectedSessionID INTEGER(1..255), protectedPayloadType INTEGER(0..127) OPTIONAL, ... }, samePort SEQUENCE { protectedType ModeElementType, ... }, ... }, ... }, ... }, ... } FECMode ::= SEQUENCE { protectedElement ModeElementType, fecScheme OBJECT IDENTIFIER OPTIONAL, -- identifies encoding scheme rfc2733Format CHOICE { rfc2733rfc2198 MaxRedundancy, -- RFC2198 redundancy rfc2733sameport MaxRedundancy, -- separate packet, same port rfc2733diffport MaxRedundancy -- separate packet and port } OPTIONAL, ... } H223ModeParameters ::=SEQUENCE { adaptationLayerType CHOICE { nonStandard NonStandardParameter, al1Framed NULL, al1NotFramed NULL, al2WithoutSequenceNumbers NULL, al2WithSequenceNumbers NULL, al3 SEQUENCE { controlFieldOctets INTEGER(0..2), sendBufferSize INTEGER(0..16777215) -- units octets }, ..., al1M H223AL1MParameters, al2M H223AL2MParameters, al3M H223AL3MParameters }, segmentableFlag BOOLEAN, ... } V76ModeParameters ::=CHOICE { suspendResumewAddress NULL, suspendResumewoAddress NULL, ... } H2250ModeParameters ::=SEQUENCE { redundancyEncodingMode RedundancyEncodingMode OPTIONAL, ... } RedundancyEncodingMode ::=SEQUENCE { redundancyEncodingMethod RedundancyEncodingMethod, secondaryEncoding CHOICE { nonStandard NonStandardParameter, audioData AudioMode, ... } OPTIONAL, ... } -- ============================================================================= -- Request mode definitions: Video modes -- ============================================================================= VideoMode ::=CHOICE { nonStandard NonStandardParameter, h261VideoMode H261VideoMode, h262VideoMode H262VideoMode, h263VideoMode H263VideoMode, is11172VideoMode IS11172VideoMode, ..., genericVideoMode GenericCapability } H261VideoMode ::=SEQUENCE { resolution CHOICE { qcif NULL, cif NULL }, bitRate INTEGER (1..19200), -- units 100 bit/s stillImageTransmission BOOLEAN, ... } H262VideoMode ::=SEQUENCE { profileAndLevel CHOICE { profileAndLevel-SPatML NULL, profileAndLevel-MPatLL NULL, profileAndLevel-MPatML NULL, profileAndLevel-MPatH-14 NULL, profileAndLevel-MPatHL NULL, profileAndLevel-SNRatLL NULL, profileAndLevel-SNRatML NULL, profileAndLevel-SpatialatH-14 NULL, profileAndLevel-HPatML NULL, profileAndLevel-HPatH-14 NULL, profileAndLevel-HPatHL NULL, ... }, videoBitRate INTEGER(0..1073741823) OPTIONAL, -- units 400 bit/s vbvBufferSize INTEGER(0..262143) OPTIONAL, -- units 16 384 bits samplesPerLine INTEGER(0..16383) OPTIONAL, -- units samples/line linesPerFrame INTEGER(0..16383) OPTIONAL, -- units lines/frame framesPerSecond INTEGER(0..15) OPTIONAL, -- frame_rate_code luminanceSampleRate INTEGER(0..4294967295) OPTIONAL, -- units samples/s ... } H263VideoMode ::=SEQUENCE { resolution CHOICE { sqcif NULL, qcif NULL, cif NULL, cif4 NULL, cif16 NULL, ..., custom NULL }, bitRate INTEGER (1..19200), -- units 100 bit/s unrestrictedVector BOOLEAN, arithmeticCoding BOOLEAN, advancedPrediction BOOLEAN, pbFrames BOOLEAN, ..., errorCompensation BOOLEAN, enhancementLayerInfo EnhancementLayerInfo OPTIONAL, h263Options H263Options OPTIONAL } IS11172VideoMode ::=SEQUENCE { constrainedBitstream BOOLEAN, videoBitRate INTEGER(0..1073741823) OPTIONAL, -- units -- 400 bit/s vbvBufferSize INTEGER(0..262143) OPTIONAL, -- units -- 16 384 bits samplesPerLine INTEGER(0..16383) OPTIONAL, -- units -- samples/line linesPerFrame INTEGER(0..16383) OPTIONAL, -- units -- lines/frame pictureRate INTEGER(0..15) OPTIONAL, luminanceSampleRate INTEGER(0..4294967295) OPTIONAL, -- units -- samples/s ... } -- ============================================================================= -- Request mode definitions: Audio modes -- ============================================================================= AudioMode ::=CHOICE { nonStandard NonStandardParameter, g711Alaw64k NULL, g711Alaw56k NULL, g711Ulaw64k NULL, g711Ulaw56k NULL, g722-64k NULL, g722-56k NULL, g722-48k NULL, g728 NULL, g729 NULL, g729AnnexA NULL, g7231 CHOICE { noSilenceSuppressionLowRate NULL, noSilenceSuppressionHighRate NULL, silenceSuppressionLowRate NULL, silenceSuppressionHighRate NULL }, is11172AudioMode IS11172AudioMode, is13818AudioMode IS13818AudioMode, ..., g729wAnnexB INTEGER(1..256), g729AnnexAwAnnexB INTEGER(1..256), g7231AnnexCMode G7231AnnexCMode, gsmFullRate GSMAudioCapability, gsmHalfRate GSMAudioCapability, gsmEnhancedFullRate GSMAudioCapability, genericAudioMode GenericCapability, g729Extensions G729Extensions, vbd VBDMode } IS11172AudioMode ::=SEQUENCE { audioLayer CHOICE { audioLayer1 NULL, audioLayer2 NULL, audioLayer3 NULL }, audioSampling CHOICE { audioSampling32k NULL, audioSampling44k1 NULL, audioSampling48k NULL }, multichannelType CHOICE { singleChannel NULL, twoChannelStereo NULL, twoChannelDual NULL }, bitRate INTEGER (1..448), -- units kbit/s ... } IS13818AudioMode ::=SEQUENCE { audioLayer CHOICE { audioLayer1 NULL, audioLayer2 NULL, audioLayer3 NULL }, audioSampling CHOICE { audioSampling16k NULL, audioSampling22k05 NULL, audioSampling24k NULL, audioSampling32k NULL, audioSampling44k1 NULL, audioSampling48k NULL }, multichannelType CHOICE { singleChannel NULL, twoChannelStereo NULL, twoChannelDual NULL, threeChannels2-1 NULL, threeChannels3-0 NULL, fourChannels2-0-2-0 NULL, fourChannels2-2 NULL, fourChannels3-1 NULL, fiveChannels3-0-2-0 NULL, fiveChannels3-2 NULL }, lowFrequencyEnhancement BOOLEAN, multilingual BOOLEAN, bitRate INTEGER (1..1130), -- units kbit/s ... } G7231AnnexCMode ::= SEQUENCE { maxAl-sduAudioFrames INTEGER (1..256), silenceSuppression BOOLEAN, g723AnnexCAudioMode SEQUENCE { highRateMode0 INTEGER (27..78), -- units octets highRateMode1 INTEGER (27..78), -- units octets lowRateMode0 INTEGER (23..66), -- units octets lowRateMode1 INTEGER (23..66), -- units octets sidMode0 INTEGER (6..17), -- units octets sidMode1 INTEGER (6..17), -- units octets ... }, ... } VBDMode ::=SEQUENCE { type AudioMode, -- shall not be "vbd" ... } -- ============================================================================= -- Request mode definitions: Data modes -- ============================================================================= DataMode ::=SEQUENCE { application CHOICE { nonStandard NonStandardParameter, t120 DataProtocolCapability, dsm-cc DataProtocolCapability, userData DataProtocolCapability, t84 DataProtocolCapability, t434 DataProtocolCapability, h224 DataProtocolCapability, nlpid SEQUENCE { nlpidProtocol DataProtocolCapability, nlpidData OCTET STRING }, dsvdControl NULL, h222DataPartitioning DataProtocolCapability, ..., t30fax DataProtocolCapability, t140 DataProtocolCapability, t38fax SEQUENCE { t38FaxProtocol DataProtocolCapability, t38FaxProfile T38FaxProfile }, genericDataMode GenericCapability }, bitRate INTEGER (0..4294967295), -- units 100 bit/s ... } -- ============================================================================= -- Request mode definitions: Encryption modes -- ============================================================================= EncryptionMode ::=CHOICE { nonStandard NonStandardParameter, h233Encryption NULL, ... } -- ============================================================================= -- Round Trip Delay definitions -- ============================================================================= RoundTripDelayRequest ::=SEQUENCE { sequenceNumber SequenceNumber, ... } RoundTripDelayResponse ::=SEQUENCE { sequenceNumber SequenceNumber, ... } -- ============================================================================= -- Maintenance Loop definitions -- ============================================================================= MaintenanceLoopRequest ::=SEQUENCE { type CHOICE { systemLoop NULL, mediaLoop LogicalChannelNumber, logicalChannelLoop LogicalChannelNumber, ... }, ... } MaintenanceLoopAck ::=SEQUENCE { type CHOICE { systemLoop NULL, mediaLoop LogicalChannelNumber, logicalChannelLoop LogicalChannelNumber, ... }, ... } MaintenanceLoopReject ::=SEQUENCE { type CHOICE { systemLoop NULL, mediaLoop LogicalChannelNumber, logicalChannelLoop LogicalChannelNumber, ... }, cause CHOICE { canNotPerformLoop NULL, ... }, ... } MaintenanceLoopOffCommand ::=SEQUENCE { ... } -- ============================================================================= -- Communication Mode definitions -- ============================================================================= CommunicationModeCommand ::=SEQUENCE { communicationModeTable SET SIZE(1..256) OF CommunicationModeTableEntry, ... } CommunicationModeRequest ::=SEQUENCE { ... } CommunicationModeResponse ::=CHOICE { communicationModeTable SET SIZE(1..256) OF CommunicationModeTableEntry, ... } CommunicationModeTableEntry ::=SEQUENCE { nonStandard SEQUENCE OF NonStandardParameter OPTIONAL, sessionID INTEGER(1..255), associatedSessionID INTEGER(1..255) OPTIONAL, terminalLabel TerminalLabel OPTIONAL, -- if not present, -- it refers to -- all -- participants in -- the conference sessionDescription BMPString (SIZE(1..128)) , -- Basic ISO/IEC 10646-1 (Unicode) dataType CHOICE { videoData VideoCapability, audioData AudioCapability, data DataApplicationCapability, ... }, mediaChannel TransportAddress OPTIONAL, mediaGuaranteedDelivery BOOLEAN OPTIONAL, mediaControlChannel TransportAddress OPTIONAL, -- reverse RTCP channel mediaControlGuaranteedDelivery BOOLEAN OPTIONAL, ..., redundancyEncoding RedundancyEncoding OPTIONAL, sessionDependency INTEGER (1..255) OPTIONAL, destination TerminalLabel OPTIONAL } -- ============================================================================= -- Conference Request definitions -- ============================================================================= ConferenceRequest ::=CHOICE { terminalListRequest NULL, -- same as H.230 TCU (term->MC) makeMeChair NULL, -- same as H.230 CCA (term->MC) cancelMakeMeChair NULL, -- same as H.230 CIS (term->MC) dropTerminal TerminalLabel, -- same as H.230 CCD(term->MC) requestTerminalID TerminalLabel, -- same as TCP (term->MC) enterH243Password NULL, -- same as H.230 TCS1(MC->term) enterH243TerminalID NULL, -- same as H.230 TCS2/TCI -- (MC->term) enterH243ConferenceID NULL, -- same as H.230 TCS3 (MC->term) ..., enterExtensionAddress NULL, -- same as H.230 TCS4 (GW->term) requestChairTokenOwner NULL, -- same as H.230 TCA (term->MC) requestTerminalCertificate SEQUENCE { terminalLabel TerminalLabel OPTIONAL, certSelectionCriteria CertSelectionCriteria OPTIONAL, sRandom INTEGER (1..4294967295) OPTIONAL, -- this is the requester's challenge ... }, broadcastMyLogicalChannel LogicalChannelNumber, -- similar to H.230 MCV makeTerminalBroadcaster TerminalLabel, -- similar to H.230 VCB sendThisSource TerminalLabel, -- similar to H.230 VCS requestAllTerminalIDs NULL, remoteMCRequest RemoteMCRequest } CertSelectionCriteria ::=SEQUENCE SIZE (1..16) OF Criteria Criteria ::=SEQUENCE { field OBJECT IDENTIFIER, -- may include -- certificate type value OCTET STRING (SIZE(1..65535)), ... } TerminalLabel ::=SEQUENCE { mcuNumber McuNumber, terminalNumber TerminalNumber, ... } McuNumber ::=INTEGER(0..192) TerminalNumber ::=INTEGER(0..192) -- ============================================================================= -- Conference Response definitions -- ============================================================================= ConferenceResponse ::=CHOICE { mCTerminalIDResponse SEQUENCE -- response to TCP -- (same as TIP) { -- sent by MC only terminalLabel TerminalLabel, terminalID TerminalID, ... }, terminalIDResponse SEQUENCE -- response to TCS2 or TCI { -- same as IIS terminalLabel TerminalLabel, -- (term->MC) terminalID TerminalID, ... }, conferenceIDResponse SEQUENCE -- response to TCS3 { -- same as IIS terminalLabel TerminalLabel, -- (term->MC) conferenceID ConferenceID, ... }, passwordResponse SEQUENCE -- response to TCS1 { -- same as IIS terminalLabel TerminalLabel, -- (term->MC) password Password, ... }, terminalListResponse SET SIZE (1..256) OF TerminalLabel, videoCommandReject NULL, -- same as H.230 VCR terminalDropReject NULL, -- same as H.230 CIR makeMeChairResponse CHOICE -- same as H.230 CCR { grantedChairToken NULL, -- same as H.230 CIT deniedChairToken NULL, -- same as H.230 CCR ... }, ..., extensionAddressResponse SEQUENCE -- response to TCS4 { extensionAddress TerminalID, -- same as IIS (term->GW) ... }, chairTokenOwnerResponse SEQUENCE -- response to TCA (same as TIR) -- sent by MC only { terminalLabel TerminalLabel, terminalID TerminalID, ... }, terminalCertificateResponse SEQUENCE { terminalLabel TerminalLabel OPTIONAL, certificateResponse OCTET STRING (SIZE(1..65535)) OPTIONAL, ... }, broadcastMyLogicalChannelResponse CHOICE { grantedBroadcastMyLogicalChannel NULL, -- similar to H.230 MVA deniedBroadcastMyLogicalChannel NULL, -- similar to H.230 MVR ... }, makeTerminalBroadcasterResponse CHOICE { grantedMakeTerminalBroadcaster NULL, deniedMakeTerminalBroadcaster NULL, ... }, sendThisSourceResponse CHOICE { grantedSendThisSource NULL, deniedSendThisSource NULL, ... }, requestAllTerminalIDsResponse RequestAllTerminalIDsResponse, remoteMCResponse RemoteMCResponse } TerminalID ::=OCTET STRING (SIZE(1..128)) -- as per H.230 ConferenceID ::=OCTET STRING (SIZE(1..32)) Password ::=OCTET STRING (SIZE(1..32)) RequestAllTerminalIDsResponse ::=SEQUENCE { terminalInformation SEQUENCE OF TerminalInformation, ... } TerminalInformation ::=SEQUENCE { terminalLabel TerminalLabel, terminalID TerminalID, ... } -- ============================================================================= -- Remote MC Request definitions -- ============================================================================= RemoteMCRequest ::=CHOICE { masterActivate NULL, slaveActivate NULL, deActivate NULL, ... } RemoteMCResponse ::=CHOICE { accept NULL, reject CHOICE { unspecified NULL, functionNotSupported NULL, ... }, ... } -- ============================================================================= -- Multilink definitions -- ============================================================================= MultilinkRequest ::=CHOICE { nonStandard NonStandardMessage, callInformation SEQUENCE { maxNumberOfAdditionalConnections INTEGER (1..65535), ... }, addConnection SEQUENCE { sequenceNumber SequenceNumber, -- Unique ID of request dialingInformation DialingInformation, ... }, removeConnection SEQUENCE { connectionIdentifier ConnectionIdentifier, ... }, maximumHeaderInterval SEQUENCE { requestType CHOICE { currentIntervalInformation NULL, requestedInterval INTEGER (0..65535), -- Max Header -- Interval, -- milliseconds ... }, ... }, ... } MultilinkResponse ::=CHOICE { nonStandard NonStandardMessage, callInformation SEQUENCE { dialingInformation DialingInformation, callAssociationNumber INTEGER (0..4294967295), ... }, addConnection SEQUENCE { sequenceNumber SequenceNumber, -- Equal to value in request responseCode CHOICE { accepted NULL, rejected CHOICE { connectionsNotAvailable NULL, -- due to any technical reason userRejected NULL, ... }, ... }, ... }, removeConnection SEQUENCE { connectionIdentifier ConnectionIdentifier, ... }, maximumHeaderInterval SEQUENCE { currentInterval INTEGER (0..65535), -- Max Header -- Interval, -- milliseconds ... }, ... } MultilinkIndication ::=CHOICE { nonStandard NonStandardMessage, crcDesired SEQUENCE { ... }, excessiveError SEQUENCE { connectionIdentifier ConnectionIdentifier, ... }, ... } DialingInformation ::= CHOICE { nonStandard NonStandardMessage, differential SET SIZE (1..65535) OF DialingInformationNumber, -- list of numbers for all additional -- channels; only least significant digits -- different from initial channel's number infoNotAvailable INTEGER (1..65535), -- maximum No. of -- additional channels ... } DialingInformationNumber ::= SEQUENCE { networkAddress NumericString (SIZE (0..40)), subAddress IA5String (SIZE (1..40)) OPTIONAL, networkType SET SIZE (1..255) OF DialingInformationNetworkType, ... } DialingInformationNetworkType ::= CHOICE { nonStandard NonStandardMessage, n-isdn NULL, gstn NULL, ..., mobile NULL } ConnectionIdentifier ::= SEQUENCE { channelTag INTEGER (0..4294967295), -- from H.226 sequenceNumber INTEGER (0..4294967295), -- from H.226 ... } -- ============================================================================= -- Logical channel bit-rate change definitions -- ============================================================================= MaximumBitRate ::=INTEGER (0.. 4294967295) -- units of 100 bit/s LogicalChannelRateRequest ::=SEQUENCE { sequenceNumber SequenceNumber, logicalChannelNumber LogicalChannelNumber, maximumBitRate MaximumBitRate, ... } LogicalChannelRateAcknowledge ::=SEQUENCE { sequenceNumber SequenceNumber, logicalChannelNumber LogicalChannelNumber, maximumBitRate MaximumBitRate, ... } LogicalChannelRateReject ::=SEQUENCE { sequenceNumber SequenceNumber, logicalChannelNumber LogicalChannelNumber, rejectReason LogicalChannelRateRejectReason, currentMaximumBitRate MaximumBitRate OPTIONAL, ... } LogicalChannelRateRejectReason ::=CHOICE { undefinedReason NULL, insufficientResources NULL, ... } LogicalChannelRateRelease ::=SEQUENCE { ... } -- ============================================================================= -- Command Message definitions -- ============================================================================= -- ============================================================================= -- Command Message: Send Terminal Capability Set -- ============================================================================= SendTerminalCapabilitySet ::=CHOICE { specificRequest SEQUENCE { multiplexCapability BOOLEAN, capabilityTableEntryNumbers SET SIZE (1..65535) OF CapabilityTableEntryNumber OPTIONAL, capabilityDescriptorNumbers SET SIZE (1..256) OF CapabilityDescriptorNumber OPTIONAL, ... }, genericRequest NULL, ... } -- ============================================================================= -- Command Message: Encryption -- ============================================================================= EncryptionCommand ::=CHOICE { encryptionSE OCTET STRING, -- per H.233, but no -- error protection encryptionIVRequest NULL, -- requests new IV encryptionAlgorithmID SEQUENCE { h233AlgorithmIdentifier SequenceNumber, associatedAlgorithm NonStandardParameter }, ... } -- ============================================================================= -- Command Message: Flow Control -- ============================================================================= FlowControlCommand ::=SEQUENCE { scope CHOICE { logicalChannelNumber LogicalChannelNumber, resourceID INTEGER (0..65535), wholeMultiplex NULL }, restriction CHOICE { maximumBitRate INTEGER (0..16777215), -- units 100 bit/s noRestriction NULL }, ... } -- ============================================================================= -- Command Message: Change or End Session -- ============================================================================= EndSessionCommand ::=CHOICE { nonStandard NonStandardParameter, disconnect NULL, gstnOptions CHOICE { telephonyMode NULL, v8bis NULL, v34DSVD NULL, v34DuplexFAX NULL, v34H324 NULL, ... }, ..., isdnOptions CHOICE { telephonyMode NULL, v140 NULL, terminalOnHold NULL, ... }, genericInformation SEQUENCE OF GenericInformation -- generic information associated -- with the message } -- ============================================================================= -- Command Message: Conference Commands -- ============================================================================= ConferenceCommand ::=CHOICE { broadcastMyLogicalChannel LogicalChannelNumber, -- similar to H.230 MCV cancelBroadcastMyLogicalChannel LogicalChannelNumber, -- similar to -- H.230 Cancel-MCV makeTerminalBroadcaster TerminalLabel, -- same as H.230 VCB cancelMakeTerminalBroadcaster NULL, -- same as H.230 -- Cancel-VCB sendThisSource TerminalLabel, -- same as H.230 VCS cancelSendThisSource NULL, -- same as H.230 -- cancel VCS dropConference NULL, -- same as H.230 CCK ..., substituteConferenceIDCommand SubstituteConferenceIDCommand } SubstituteConferenceIDCommand ::=SEQUENCE { conferenceIdentifier OCTET STRING (SIZE(16)), ... } -- ============================================================================= -- Command Message: Miscellaneous H.230-like commands -- ============================================================================= EncryptionUpdateDirection ::= CHOICE { masterToSlave NULL, slaveToMaster NULL, ... } MiscellaneousCommand ::=SEQUENCE { logicalChannelNumber LogicalChannelNumber, type CHOICE { equaliseDelay NULL, -- same as H.230 ACE zeroDelay NULL, -- same as H.230 ACZ multipointModeCommand NULL, cancelMultipointModeCommand NULL, videoFreezePicture NULL, videoFastUpdatePicture NULL, videoFastUpdateGOB SEQUENCE { firstGOB INTEGER (0..17), numberOfGOBs INTEGER (1..18) }, videoTemporalSpatialTradeOff INTEGER (0..31), -- commands a trade-off value videoSendSyncEveryGOB NULL, videoSendSyncEveryGOBCancel NULL, ..., videoFastUpdateMB SEQUENCE { firstGOB INTEGER (0..255) OPTIONAL, firstMB INTEGER (1..8192) OPTIONAL, numberOfMBs INTEGER (1..8192), ... }, maxH223MUXPDUsize INTEGER(1..65535), -- units octets encryptionUpdate EncryptionSync, encryptionUpdateRequest EncryptionUpdateRequest, switchReceiveMediaOff NULL, switchReceiveMediaOn NULL, progressiveRefinementStart SEQUENCE { repeatCount CHOICE { doOneProgression NULL, doContinuousProgressions NULL, doOneIndependentProgression NULL, doContinuousIndependentProgressions NULL, ... }, ... }, progressiveRefinementAbortOne NULL, progressiveRefinementAbortContinuous NULL, videoBadMBs SEQUENCE { firstMB INTEGER (1..9216), numberOfMBs INTEGER (1..9216), temporalReference INTEGER (0..1023), ... }, lostPicture SEQUENCE OF PictureReference, lostPartialPicture SEQUENCE { pictureReference PictureReference, firstMB INTEGER (1..9216), numberOfMBs INTEGER (1..9216), ... }, recoveryReferencePicture SEQUENCE OF PictureReference, encryptionUpdateCommand SEQUENCE -- for ack'ed key update in H.235V3 { encryptionSync EncryptionSync, multiplePayloadStream MultiplePayloadStream OPTIONAL, ... }, encryptionUpdateAck SEQUENCE { synchFlag INTEGER (0..255), ... } }, ..., direction EncryptionUpdateDirection OPTIONAL } KeyProtectionMethod ::=SEQUENCE -- specify how the new -- key is to be protected { secureChannel BOOLEAN, sharedSecret BOOLEAN, certProtectedKey BOOLEAN, ... } EncryptionUpdateRequest ::=SEQUENCE { keyProtectionMethod KeyProtectionMethod OPTIONAL, ..., synchFlag INTEGER (0..255) OPTIONAL } PictureReference ::=CHOICE { pictureNumber INTEGER (0..1023), longTermPictureIndex INTEGER (0..255), ... } -- ============================================================================= -- Command Message: H.223 Multiplex Reconfiguration -- ============================================================================= H223MultiplexReconfiguration ::=CHOICE { h223ModeChange CHOICE { toLevel0 NULL, toLevel1 NULL, toLevel2 NULL, toLevel2withOptionalHeader NULL, ... }, h223AnnexADoubleFlag CHOICE { start NULL, stop NULL, ... }, ... } -- ============================================================================= -- Command Message: New ATM virtual channel command -- ============================================================================= NewATMVCCommand ::=SEQUENCE { resourceID INTEGER(0..65535), bitRate INTEGER(1..65535), -- units 64 kbit/s bitRateLockedToPCRClock BOOLEAN, bitRateLockedToNetworkClock BOOLEAN, aal CHOICE { aal1 SEQUENCE { clockRecovery CHOICE { nullClockRecovery NULL, srtsClockRecovery NULL, adaptiveClockRecovery NULL, ... }, errorCorrection CHOICE { nullErrorCorrection NULL, longInterleaver NULL, shortInterleaver NULL, errorCorrectionOnly NULL, ... }, structuredDataTransfer BOOLEAN, partiallyFilledCells BOOLEAN, ... }, aal5 SEQUENCE { forwardMaximumSDUSize INTEGER (0..65535), -- units octets backwardMaximumSDUSize INTEGER (0..65535), -- units octets ... }, ... }, multiplex CHOICE { noMultiplex NULL, transportStream NULL, programStream NULL, ... }, reverseParameters SEQUENCE { bitRate INTEGER(1..65535), -- units 64 kbit/s bitRateLockedToPCRClock BOOLEAN, bitRateLockedToNetworkClock BOOLEAN, multiplex CHOICE { noMultiplex NULL, transportStream NULL, programStream NULL, ... }, ... }, ... } -- ============================================================================= -- Command Message: Mobile Multilink Reconfiguration command -- ============================================================================= MobileMultilinkReconfigurationCommand ::=SEQUENCE { sampleSize INTEGER (1..255), samplesPerFrame INTEGER (1..255), status CHOICE { synchronized NULL, reconfiguration NULL, ... }, ... } -- ============================================================================= -- Indication Message definitions -- ============================================================================= -- ============================================================================= -- Indication Message: Function not understood -- ============================================================================= -- This is used to return a request, response or command that is not understood FunctionNotUnderstood ::=CHOICE { request RequestMessage, response ResponseMessage, command CommandMessage } -- ============================================================================= -- Indication Message: Function not Supported -- ============================================================================= -- This is used to return a complete request, response or command that is not -- recognized FunctionNotSupported ::=SEQUENCE { cause CHOICE { syntaxError NULL, semanticError NULL, unknownFunction NULL, ... }, returnedFunction OCTET STRING OPTIONAL, ... } -- ============================================================================= -- Indication Message: Conference -- ============================================================================= ConferenceIndication ::=CHOICE { sbeNumber INTEGER (0..9), -- same as H.230 SBE Number terminalNumberAssign TerminalLabel, -- same as H.230 TIA terminalJoinedConference TerminalLabel, -- same as H.230 TIN terminalLeftConference TerminalLabel, -- same as H.230 TID seenByAtLeastOneOther NULL, -- same as H.230 MIV cancelSeenByAtLeastOneOther NULL, -- same as H.230 cancel MIV seenByAll NULL, -- like H.230 MIV cancelSeenByAll NULL, -- like H.230 MIV terminalYouAreSeeing TerminalLabel, -- same as H.230 VIN requestForFloor NULL, -- same as H.230 TIF ..., withdrawChairToken NULL, -- same as H.230 CCR MC-> chair floorRequested TerminalLabel, -- same as H.230 TIF MC-> chair terminalYouAreSeeingInSubPictureNumber TerminalYouAreSeeingInSubPictureNumber, videoIndicateCompose VideoIndicateCompose } TerminalYouAreSeeingInSubPictureNumber ::= SEQUENCE { terminalNumber TerminalNumber, subPictureNumber INTEGER (0..255), ... } VideoIndicateCompose ::= SEQUENCE { compositionNumber INTEGER (0..255), ... } -- ============================================================================= -- Indication Message: Miscellaneous H.230-like indication -- ============================================================================= MiscellaneousIndication ::=SEQUENCE { logicalChannelNumber LogicalChannelNumber, type CHOICE { logicalChannelActive NULL, -- same as H.230 AIA and VIA logicalChannelInactive NULL, -- same as H.230 AIM and VIS multipointConference NULL, cancelMultipointConference NULL, multipointZeroComm NULL, -- same as H.230 MIZ cancelMultipointZeroComm NULL, -- same as H.230 cancel MIZ multipointSecondaryStatus NULL, -- same as H.230 MIS cancelMultipointSecondaryStatus NULL, -- same as H.230 cancel MIS videoIndicateReadyToActivate NULL, -- same as H.230 VIR videoTemporalSpatialTradeOff INTEGER (0..31), -- indicates current -- trade-off ..., videoNotDecodedMBs SEQUENCE { firstMB INTEGER (1..8192), numberOfMBs INTEGER (1..8192), temporalReference INTEGER (0..255), ... }, transportCapability TransportCapability }, ... } -- ============================================================================= -- Indication Message: Jitter Indication -- ============================================================================= JitterIndication ::=SEQUENCE { scope CHOICE { logicalChannelNumber LogicalChannelNumber, resourceID INTEGER (0..65535), wholeMultiplex NULL }, estimatedReceivedJitterMantissa INTEGER (0..3), estimatedReceivedJitterExponent INTEGER (0..7), skippedFrameCount INTEGER (0..15) OPTIONAL, additionalDecoderBuffer INTEGER (0..262143) OPTIONAL, -- 262143 is 2^18 - 1 ... } -- ============================================================================= -- Indication Message: H.223 logical channel skew -- ============================================================================= H223SkewIndication ::=SEQUENCE { logicalChannelNumber1 LogicalChannelNumber, logicalChannelNumber2 LogicalChannelNumber, skew INTEGER (0..4095), -- units milliseconds ... } -- ============================================================================= -- Indication Message : H.225.0 maximum logical channel skew -- ============================================================================= H2250MaximumSkewIndication ::=SEQUENCE { logicalChannelNumber1 LogicalChannelNumber, logicalChannelNumber2 LogicalChannelNumber, maximumSkew INTEGER (0..4095), -- units milliseconds ... } -- ============================================================================= -- Indication Message: MC Location Indication -- ============================================================================= MCLocationIndication ::=SEQUENCE { signalAddress TransportAddress, -- this is the -- H.323 Call Signalling -- address of the entity -- which contains the MC ... } -- ============================================================================= -- Indication Message: Vendor Identification -- ============================================================================= VendorIdentification ::=SEQUENCE { vendor NonStandardIdentifier, productNumber OCTET STRING (SIZE(1..256)) OPTIONAL, -- per vendor versionNumber OCTET STRING (SIZE(1..256)) OPTIONAL, -- per productNumber ... } -- ============================================================================= -- Indication Message: New ATM virtual channel indication -- ============================================================================= NewATMVCIndication ::=SEQUENCE { resourceID INTEGER(0..65535), bitRate INTEGER(1..65535), -- units 64 kbit/s bitRateLockedToPCRClock BOOLEAN, bitRateLockedToNetworkClock BOOLEAN, aal CHOICE { aal1 SEQUENCE { clockRecovery CHOICE { nullClockRecovery NULL, srtsClockRecovery NULL, adaptiveClockRecovery NULL, ... }, errorCorrection CHOICE { nullErrorCorrection NULL, longInterleaver NULL, shortInterleaver NULL, errorCorrectionOnly NULL, ... }, structuredDataTransfer BOOLEAN, partiallyFilledCells BOOLEAN, ... }, aal5 SEQUENCE { forwardMaximumSDUSize INTEGER (0..65535), -- units octets backwardMaximumSDUSize INTEGER (0..65535), -- units octets ... }, ... }, multiplex CHOICE { noMultiplex NULL, transportStream NULL, programStream NULL, ... }, ..., reverseParameters SEQUENCE { bitRate INTEGER(1..65535), -- units 64 kbit/s bitRateLockedToPCRClock BOOLEAN, bitRateLockedToNetworkClock BOOLEAN, multiplex CHOICE { noMultiplex NULL, transportStream NULL, programStream NULL, ... }, ... } } -- ============================================================================= -- Indication Message: User input -- ============================================================================= IV8 ::= OCTET STRING (SIZE(8)) -- initial value for -- 64-bit block ciphers IV16 ::= OCTET STRING (SIZE(16)) -- initial value for -- 128-bit block ciphers Params ::= SEQUENCE { iv8 IV8 OPTIONAL, -- 8-octet initialization vector iv16 IV16 OPTIONAL, -- 16-octet initialization vector iv OCTET STRING OPTIONAL, -- arbitrary length -- initialization vector ... } UserInputIndication ::=CHOICE { nonStandard NonStandardParameter, alphanumeric GeneralString, ..., userInputSupportIndication CHOICE { nonStandard NonStandardParameter, basicString NULL, -- indicates unsecured basic string iA5String NULL, -- indicates unsecured iA5 string generalString NULL, -- indicates unsecured general string ..., encryptedBasicString NULL, -- indicates encrypted Basic string encryptedIA5String NULL, -- indicates encrypted IA5 string encryptedGeneralString NULL -- indicates encrypted general string }, signal SEQUENCE { signalType IA5String (SIZE (1) ^ FROM ("0123456789#*ABCD!")), -- holds dummy "!" if encryptedSignalType -- is being used duration INTEGER (1..65535) OPTIONAL, -- milliseconds rtp SEQUENCE { timestamp INTEGER (0..4294967295) OPTIONAL, expirationTime INTEGER (0..4294967295) OPTIONAL, logicalChannelNumber LogicalChannelNumber, ... } OPTIONAL, ..., rtpPayloadIndication NULL OPTIONAL, paramS Params OPTIONAL, -- any "runtime" parameters encryptedSignalType OCTET STRING (SIZE(1)) OPTIONAL, -- encrypted signalType algorithmOID OBJECT IDENTIFIER OPTIONAL }, signalUpdate SEQUENCE { duration INTEGER (1..65535), -- milliseconds rtp SEQUENCE { logicalChannelNumber LogicalChannelNumber, ... } OPTIONAL, ... }, extendedAlphanumeric SEQUENCE { alphanumeric GeneralString, -- holds empty string if -- encryptedAlphanumeric is -- being used rtpPayloadIndication NULL OPTIONAL, ..., encryptedAlphanumeric SEQUENCE { algorithmOID OBJECT IDENTIFIER, paramS Params OPTIONAL, -- any "runtime" parameters encrypted OCTET STRING, -- general string encrypted ... } OPTIONAL }, encryptedAlphanumeric SEQUENCE { algorithmOID OBJECT IDENTIFIER, paramS Params OPTIONAL, -- any "runtime" parameters encrypted OCTET STRING, -- basic string encrypted ... }, genericInformation SEQUENCE OF GenericInformation -- generic information associated -- with the message } -- ============================================================================= -- Indication Message: Flow Control -- ============================================================================= FlowControlIndication ::=SEQUENCE { scope CHOICE { logicalChannelNumber LogicalChannelNumber, resourceID INTEGER (0..65535), wholeMultiplex NULL }, restriction CHOICE { maximumBitRate INTEGER (0..16777215), -- units 100 bit/s noRestriction NULL }, ... } -- ============================================================================= -- Indication Message: Mobile Multilink Reconfiguration indication -- ============================================================================= MobileMultilinkReconfigurationIndication ::=SEQUENCE { sampleSize INTEGER (1..255), samplesPerFrame INTEGER (1..255), ... } END h323plus/src/asn/h350_service.asn0000644000175000017500000000037210655704731015373 0ustar markmarkH350-SERVICE-CONTROL {iso(1) organisation(3) dod(6) internet(1) private(4) packetizer(17090) h350(2) service(1) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN H350ServiceControl ::= SEQUENCE { ldapURL IA5String, ldapDN IA5String } ENDh323plus/src/asn/h4501.asn0000644000175000017500000001470110655704731013736 0ustar markmarkH4501-Supplementary-ServiceAPDU-Structure { itu-t recommendation h 450 1 version1(0) h4501-facility-information-structure(2) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS AliasAddress, PartyNumber FROM H225 -- H323-MESSAGES ROS, Code FROM X880 -- Remote-Operations-Apdu { itu-t recommendation h 450 1 version1(0) remote-operations-apdus(11) }; SupplementaryService ::= SEQUENCE { networkFacilityExtension NetworkFacilityExtension OPTIONAL, -- see 8.1 interpretationApdu InterpretationApdu OPTIONAL, -- see 8.2 serviceApdu ServiceApdus, -- H.450.x supplementary services ... } NetworkFacilityExtension ::= SEQUENCE { sourceEntity EntityType, sourceEntityAddress AddressInformation OPTIONAL, destinationEntity EntityType, destinationEntityAddress AddressInformation OPTIONAL, ... } EntityType ::= CHOICE { endpoint NULL, anyEntity NULL, ... } AddressInformation ::= AliasAddress InterpretationApdu ::= CHOICE { discardAnyUnrecognizedInvokePdu NULL, clearCallIfAnyInvokePduNotRecognized NULL, -- this value also applies to Call independent signalling connections rejectAnyUnrecognizedInvokePdu NULL, -- this coding is implied by the absence of an interpretation APDU. ... } ServiceApdus ::= CHOICE { rosApdus SEQUENCE SIZE (1..MAX) OF ROS, -- see 8.3; other alternatives may be defined in future versions ... } InvokeIdSet INTEGER ::= {InvokeIDs,...} InvokeIDs ::= INTEGER (0..65535) -- The following ASN.1 definitions are taken from: -- Addressing-Data-Elements -- { -- itu-t recommendation h 450 1 version1(0) addressing-data-elements(9) -- } -- They are included here directly for simplicity. PresentedAddressScreened ::= CHOICE { presentationAllowedAddress AddressScreened, presentationRestricted NULL, numberNotAvailableDueToInterworking NULL, presentationRestrictedAddress AddressScreened, ... } PresentedAddressUnscreened ::= CHOICE { presentationAllowedAddress Address, presentationRestricted NULL, numberNotAvailableDueToInterworking NULL, presentationRestrictedAddress Address, ... } PresentedNumberScreened ::= CHOICE { presentationAllowedAddress NumberScreened, presentationRestricted NULL, numberNotAvailableDueToInterworking NULL, presentationRestrictedAddress NumberScreened, ... } PresentedNumberUnscreened ::= CHOICE { presentationAllowedAddress PartyNumber, presentationRestricted NULL, numberNotAvailableDueToInterworking NULL, presentationRestrictedAddress PartyNumber, ... } AddressScreened ::= SEQUENCE { partyNumber PartyNumber, screeningIndicator ScreeningIndicator, partySubaddress PartySubaddress OPTIONAL, ... } NumberScreened ::= SEQUENCE { partyNumber PartyNumber, screeningIndicator ScreeningIndicator, ... } Address ::= SEQUENCE { partyNumber PartyNumber, partySubaddress PartySubaddress OPTIONAL, ... } -- PartyNumber defined in Recommendation H.225.0 -- PublicPartyNumber defined in Recommendation H.225.0 -- PrivatePartyNumber defined in Recommendation H.225.0 -- NumberDigits defined in Recommendation H.225.0 -- PublicTypeOfNumber defined in Recommendation H.225.0 -- PrivateTypeOfNumber defined in Recommendation H.225.0 EndpointAddress ::= SEQUENCE { destinationAddress SEQUENCE OF AliasAddress, -- multiple alias addresses may be used to address the same H.323 endpoint remoteExtensionAddress AliasAddress OPTIONAL, ... } PartySubaddress ::= CHOICE { userSpecifiedSubaddress UserSpecifiedSubaddress, -- not recommended. nsapSubaddress NSAPSubaddress, -- according to Recommendation X.213. ... } UserSpecifiedSubaddress ::= SEQUENCE { subaddressInformation SubaddressInformation, oddCountIndicator BOOLEAN OPTIONAL, -- used when the coding of subaddress is BCD ... } NSAPSubaddress ::= OCTET STRING (SIZE(1..20)) -- specified according to X.213. Some networks may -- limit the subaddress value to some other length -- e.g. 4 octets SubaddressInformation ::= OCTET STRING (SIZE(1..20)) -- coded according to user requirements. Some networks -- may limit the subaddress value to some other length -- e.g. 4 octets ScreeningIndicator ::= ENUMERATED { userProvidedNotScreened (0), -- number was provided by a remote user -- , and has not been screened by a gatekeeper userProvidedVerifiedAndPassed (1), -- number was provided by a user -- equipment (or by a remote network), and has -- been screened by a gatekeeper userProvidedVerifiedAndFailed (2), -- not used, value reserved. networkProvided (3), -- number was provided by a gatekeeper ... } PresentationAllowedIndicator ::= BOOLEAN -- The following ASN.1 definitions are taken from: -- H4501-General-Error-List -- { -- itu-t recommendation h 450 1 version1(0) general-error-list (1) -- } -- They are included here directly for simplicity. -- The following errors are based on the error definitions of Recommendation Q.950. GeneralErrorList ::= ENUMERATED { userNotSubscribed (0), rejectedByNetwork (1), rejectedByUser (2), notAvailable (3), insufficientInformation (5), invalidServedUserNumber (6), invalidCallState (7), basicServiceNotProvided (8), notIncomingCall (9), supplementaryServiceInteractionNotAllowed (10), resourceUnavailable (11), callFailure (25), proceduralError (43) } -- The following ASN.1 definitions are taken from: -- H225-generic-parameters-definition -- { -- itu-t recommendation h 450 1 version1(0) h225-generic-parameters(6) -- } -- They are included here directly for simplicity. H225InformationElement ::= OCTET STRING -- The following ASN.1 definitions are taken from: -- Manufacturer-specific-service-extension-definition -- { -- itu-t recommendation h 450 1 version1(0) msi-definition (18) -- } -- They are included here directly for simplicity. Extension ::= SEQUENCE { extensionId Code, extensionArgument OCTET STRING -- extensionArgument is an Open Type constrained by the extensionId } END -- of H4501-Supplementary-ServiceAPDU-Structure h323plus/src/asn/h46015.asn0000644000175000017500000000176511561716521014027 0ustar markmarkSIGNALLING-CHANNEL-SUSPEND-REDIRECT DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS TransportAddress FROM H323-MESSAGES; SignallingChannelData ::= SEQUENCE { signallingChannelData CHOICE { channelSuspendRequest ChannelSuspendRequest, channelSuspendResponse ChannelSuspendResponse, channelSuspendConfirm ChannelSuspendConfirm, channelSuspendCancel ChannelSuspendCancel, channelResumeRequest ChannelResumeRequest, channelResumeResponse ChannelResumeResponse, ... }, ... } ChannelSuspendRequest ::= SEQUENCE { channelResumeAddress SEQUENCE OF TransportAddress, immediateResume BOOLEAN, resetH245 NULL OPTIONAL, ... } ChannelSuspendResponse ::= SEQUENCE { okToSuspend BOOLEAN, channelResumeAddress SEQUENCE OF TransportAddress, ... } ChannelSuspendConfirm ::= SEQUENCE { ... } ChannelSuspendCancel ::= SEQUENCE { ... } ChannelResumeRequest ::= SEQUENCE { randomNumber INTEGER(0..4294967295), resetH245 NULL OPTIONAL, ... } ChannelResumeResponse ::= SEQUENCE { ... } END -- of ASN.1 h323plus/src/asn/h248.asn0000644000175000017500000004763010655704731013671 0ustar markmark-- H.248 (Megaco) ASN from Temporary Document 31r1 MEDIA-GATEWAY-CONTROL DEFINITIONS AUTOMATIC TAGS::= BEGIN MegacoMessage ::= SEQUENCE { authHeader AuthenticationHeader OPTIONAL, mess Message } AuthenticationHeader ::= SEQUENCE { secParmIndex SecurityParmIndex, seqNum SequenceNum, ad AuthData } SecurityParmIndex ::= OCTET STRING(SIZE(4)) SequenceNum ::= OCTET STRING(SIZE(4)) AuthData ::= OCTET STRING (SIZE (12..32)) Message ::= SEQUENCE { version INTEGER(0..99), -- The version of the protocol defined here is equal to 2. mId MId, -- Name/address of message originator messageBody CHOICE { messageError ErrorDescriptor, transactions SEQUENCE OF Transaction }, ... } MId ::= CHOICE { ip4Address IP4Address, ip6Address IP6Address, domainName DomainName, deviceName PathName, mtpAddress OCTET STRING(SIZE(2..4)), -- Addressing structure of mtpAddress: -- 25-15 0 -- | PC | NI | -- 24 - 14 bits 2 bits -- Note: 14 bits are defined for international use. -- Two national options exist where the point code is 16 or 24 -- bits. -- To octet align the mtpAddress the MSBs shall be encoded as 0s. ... } DomainName ::= SEQUENCE { name IA5String, -- The name starts with an alphanumeric digit followed by a -- sequence of alphanumeric digits, hyphens and dots. No two -- dots shall occur consecutively. portNumber INTEGER(0..65535) OPTIONAL } IP4Address ::= SEQUENCE { address OCTET STRING (SIZE(4)), portNumber INTEGER(0..65535) OPTIONAL } IP6Address ::= SEQUENCE { address OCTET STRING (SIZE(16)), portNumber INTEGER(0..65535) OPTIONAL } PathName ::= IA5String(SIZE (1..64)) -- See section A.3 Transaction ::= CHOICE { transactionRequest TransactionRequest, transactionPending TransactionPending, transactionReply TransactionReply, transactionResponseAck TransactionResponseAck, -- use of response acks is dependent on underlying transport ... } TransactionId ::= INTEGER(0..4294967295) -- 32 bit unsigned integer TransactionRequest ::= SEQUENCE { transactionId TransactionId, actions SEQUENCE OF ActionRequest, ... } TransactionPending ::= SEQUENCE { transactionId TransactionId, ... } TransactionReply ::= SEQUENCE { transactionId TransactionId, immAckRequired NULL OPTIONAL, transactionResult CHOICE { transactionError ErrorDescriptor, actionReplies SEQUENCE OF ActionReply }, ... } TransactionResponseAck ::= SEQUENCE OF TransactionAck TransactionAck ::= SEQUENCE { firstAck TransactionId, lastAck TransactionId OPTIONAL } ErrorDescriptor ::= SEQUENCE { errorCode ErrorCode, errorText ErrorText OPTIONAL } ErrorCode ::= INTEGER(0..65535) -- See section 13 for IANA considerations with respect to error codes ErrorText ::= IA5String ContextID ::= INTEGER(0..4294967295) -- Context NULL Value: 0 -- Context CHOOSE Value: 4294967294 (0xFFFFFFFE) -- Context ALL Value: 4294967295 (0xFFFFFFFF) ActionRequest ::= SEQUENCE { contextId ContextID, contextRequest ContextRequest OPTIONAL, contextAttrAuditReq ContextAttrAuditRequest OPTIONAL, commandRequests SEQUENCE OF CommandRequest } ActionReply ::= SEQUENCE { contextId ContextID, errorDescriptor ErrorDescriptor OPTIONAL, contextReply ContextRequest OPTIONAL, commandReply SEQUENCE OF CommandReply } ContextRequest ::= SEQUENCE { priority INTEGER(0..15) OPTIONAL, emergency BOOLEAN OPTIONAL, topologyReq SEQUENCE OF TopologyRequest OPTIONAL, ... } ContextAttrAuditRequest ::= SEQUENCE { topology NULL OPTIONAL, emergency NULL OPTIONAL, priority NULL OPTIONAL, ... } CommandRequest ::= SEQUENCE { command Command, optional NULL OPTIONAL, wildcardReturn NULL OPTIONAL, ... } Command ::= CHOICE { addReq AmmRequest, moveReq AmmRequest, modReq AmmRequest, -- Add, Move, Modify requests have the same parameters subtractReq SubtractRequest, auditCapRequest AuditRequest, auditValueRequest AuditRequest, notifyReq NotifyRequest, serviceChangeReq ServiceChangeRequest, ... } CommandReply ::= CHOICE { addReply AmmsReply, moveReply AmmsReply, modReply AmmsReply, subtractReply AmmsReply, -- Add, Move, Modify, Subtract replies have the same parameters auditCapReply AuditReply, auditValueReply AuditReply, notifyReply NotifyReply, serviceChangeReply ServiceChangeReply, ... } TopologyRequest ::= SEQUENCE { terminationFrom TerminationID, terminationTo TerminationID, topologyDirection ENUMERATED { bothway(0), isolate(1), oneway(2) }, ..., streamID StreamID OPTIONAL } AmmRequest ::= SEQUENCE { terminationID TerminationIDList, descriptors SEQUENCE OF AmmDescriptor, -- At most one descriptor of each type (see AmmDescriptor) -- allowed in the sequence. ... } AmmDescriptor ::= CHOICE { mediaDescriptor MediaDescriptor, modemDescriptor ModemDescriptor, muxDescriptor MuxDescriptor, eventsDescriptor EventsDescriptor, eventBufferDescriptor EventBufferDescriptor, signalsDescriptor SignalsDescriptor, digitMapDescriptor DigitMapDescriptor, auditDescriptor AuditDescriptor, ... } AmmsReply ::= SEQUENCE { terminationID TerminationIDList, terminationAudit TerminationAudit OPTIONAL, ... } SubtractRequest ::= SEQUENCE { terminationID TerminationIDList, auditDescriptor AuditDescriptor OPTIONAL, ... } AuditRequest ::= SEQUENCE { terminationID TerminationID, auditDescriptor AuditDescriptor, ... } AuditReply ::= CHOICE { contextAuditResult TerminationIDList, error ErrorDescriptor, auditResult AuditResult, ... } AuditResult ::= SEQUENCE { terminationID TerminationID, terminationAuditResult TerminationAudit } TerminationAudit ::= SEQUENCE OF AuditReturnParameter AuditReturnParameter ::= CHOICE { errorDescriptor ErrorDescriptor, mediaDescriptor MediaDescriptor, modemDescriptor ModemDescriptor, muxDescriptor MuxDescriptor, eventsDescriptor EventsDescriptor, eventBufferDescriptor EventBufferDescriptor, signalsDescriptor SignalsDescriptor, digitMapDescriptor DigitMapDescriptor, observedEventsDescriptor ObservedEventsDescriptor, statisticsDescriptor StatisticsDescriptor, packagesDescriptor PackagesDescriptor, emptyDescriptors AuditDescriptor, ... } AuditDescriptor ::= SEQUENCE { auditToken BIT STRING { muxToken(0), modemToken(1), mediaToken(2), eventsToken(3), signalsToken(4), digitMapToken(5), statsToken(6), observedEventsToken(7), packagesToken(8), eventBufferToken(9) } OPTIONAL, ..., auditPropertyToken SEQUENCE OF IndAuditParameter OPTIONAL } IndAuditParameter ::= CHOICE { indaudmediaDescriptor IndAudMediaDescriptor, indaudeventsDescriptor IndAudEventsDescriptor, indaudeventBufferDescriptor IndAudEventBufferDescriptor, indaudsignalsDescriptor IndAudSignalsDescriptor, indauddigitMapDescriptor IndAudDigitMapDescriptor, indaudstatisticsDescriptor IndAudStatisticsDescriptor, indaudpackagesDescriptor IndAudPackagesDescriptor, ... } IndAudMediaDescriptor ::= SEQUENCE { termStateDescr IndAudTerminationStateDescriptor OPTIONAL, streams CHOICE { oneStream IndAudStreamParms, multiStream SEQUENCE OF IndAudStreamDescriptor } OPTIONAL, ... } IndAudStreamDescriptor ::= SEQUENCE { streamID StreamID, streamParms IndAudStreamParms } IndAudStreamParms ::= SEQUENCE { localControlDescriptor IndAudLocalControlDescriptor OPTIONAL, localDescriptor IndAudLocalRemoteDescriptor OPTIONAL, remoteDescriptor IndAudLocalRemoteDescriptor OPTIONAL, ... } IndAudLocalControlDescriptor ::= SEQUENCE { streamMode NULL OPTIONAL, reserveValue NULL OPTIONAL, reserveGroup NULL OPTIONAL, propertyParms SEQUENCE OF IndAudPropertyParm OPTIONAL, ... } IndAudPropertyParm ::= SEQUENCE { name PkgdName, ... } IndAudLocalRemoteDescriptor ::= SEQUENCE { propGroupID INTEGER(0..65535) OPTIONAL, propGrps IndAudPropertyGroup, ... } IndAudPropertyGroup ::= SEQUENCE OF IndAudPropertyParm IndAudTerminationStateDescriptor ::= SEQUENCE { propertyParms SEQUENCE OF IndAudPropertyParm, eventBufferControl NULL OPTIONAL, serviceState NULL OPTIONAL, ... } IndAudEventsDescriptor ::= SEQUENCE { requestID RequestID OPTIONAL, pkgdName PkgdName, streamID StreamID OPTIONAL, ... } IndAudEventBufferDescriptor ::= SEQUENCE { eventName PkgdName, streamID StreamID OPTIONAL, ... } IndAudSignalsDescriptor ::=CHOICE { signal IndAudSignal, seqSigList IndAudSeqSigList, ... } IndAudSeqSigList ::= SEQUENCE { id INTEGER(0..65535), signalList IndAudSignal OPTIONAL } IndAudSignal ::= SEQUENCE { signalName PkgdName, streamID StreamID OPTIONAL, ... } IndAudDigitMapDescriptor ::= SEQUENCE { digitMapName DigitMapName OPTIONAL } IndAudStatisticsDescriptor ::= SEQUENCE { statName PkgdName } IndAudPackagesDescriptor ::= SEQUENCE { packageName Name, packageVersion INTEGER(0..99), ... } NotifyRequest ::= SEQUENCE { terminationID TerminationIDList, observedEventsDescriptor ObservedEventsDescriptor, errorDescriptor ErrorDescriptor OPTIONAL, ... } NotifyReply ::= SEQUENCE { terminationID TerminationIDList, errorDescriptor ErrorDescriptor OPTIONAL, ... } ObservedEventsDescriptor ::= SEQUENCE { requestId RequestID, observedEventLst SEQUENCE OF ObservedEvent } ObservedEvent ::= SEQUENCE { eventName EventName, streamID StreamID OPTIONAL, eventParList SEQUENCE OF EventParameter, timeNotation TimeNotation OPTIONAL, ... } EventName ::= PkgdName EventParameter ::= SEQUENCE { eventParameterName Name, value Value, -- For use of extraInfo see the comment related to PropertyParm extraInfo CHOICE { relation Relation, range BOOLEAN, sublist BOOLEAN } OPTIONAL, ... } ServiceChangeRequest ::= SEQUENCE { terminationID TerminationIDList, serviceChangeParms ServiceChangeParm, ... } ServiceChangeReply ::= SEQUENCE { terminationID TerminationIDList, serviceChangeResult ServiceChangeResult, ... } -- For ServiceChangeResult, no parameters are mandatory. Hence the -- distinction between ServiceChangeParm and ServiceChangeResParm. ServiceChangeResult ::= CHOICE { errorDescriptor ErrorDescriptor, serviceChangeResParms ServiceChangeResParm } WildcardField ::= OCTET STRING(SIZE(1)) TerminationID ::= SEQUENCE { wildcard SEQUENCE OF WildcardField, id OCTET STRING(SIZE(1..8)), ... } -- See Section A.1 for explanation of wildcarding mechanism. -- Termination ID 0xFFFFFFFFFFFFFFFF indicates the ROOT Termination. TerminationIDList ::= SEQUENCE OF TerminationID MediaDescriptor ::= SEQUENCE { termStateDescr TerminationStateDescriptor OPTIONAL, streams CHOICE { oneStream StreamParms, multiStream SEQUENCE OF StreamDescriptor } OPTIONAL, ... } StreamDescriptor ::= SEQUENCE { streamID StreamID, streamParms StreamParms } StreamParms ::= SEQUENCE { localControlDescriptor LocalControlDescriptor OPTIONAL, localDescriptor LocalRemoteDescriptor OPTIONAL, remoteDescriptor LocalRemoteDescriptor OPTIONAL, ... } LocalControlDescriptor ::= SEQUENCE { streamMode StreamMode OPTIONAL, reserveValue BOOLEAN OPTIONAL, reserveGroup BOOLEAN OPTIONAL, propertyParms SEQUENCE OF PropertyParm, ... } StreamMode ::= ENUMERATED { sendOnly(0), recvOnly(1), sendRecv(2), inactive(3), loopBack(4), ... } -- In PropertyParm, value is a SEQUENCE OF octet string. When sent -- by an MGC the interpretation is as follows: -- empty sequence means CHOOSE -- one element sequence specifies value -- If the sublist field is not selected, a longer sequence means -- "choose one of the values" (i.e. value1 OR value2 OR ...) -- If the sublist field is selected, -- a sequence with more than one element encodes the value of a -- list-valued property (i.e. value1 AND value2 AND ...). -- The relation field may only be selected if the value sequence -- has length 1. It indicates that the MG has to choose a value -- for the property. E.g., x > 3 (using the greaterThan -- value for relation) instructs the MG to choose any value larger -- than 3 for property x. -- The range field may only be selected if the value sequence -- has length 2. It indicates that the MG has to choose a value -- in the range between the first octet in the value sequence and -- the trailing octet in the value sequence, including the -- boundary values. -- When sent by the MG, only responses to an AuditCapability request -- may contain multiple values, a range, or a relation field. PropertyParm ::= SEQUENCE { name PkgdName, value SEQUENCE OF OCTET STRING, extraInfo CHOICE { relation Relation, range BOOLEAN, sublist BOOLEAN } OPTIONAL, ... } Name ::= OCTET STRING(SIZE(2)) PkgdName ::= OCTET STRING(SIZE(4)) -- represents Package Name (2 octets) plus Property, Event, -- Signal Names or Statistics ID. (2 octets) -- To wildcard a package use 0xFFFF for first two octets, choose -- is not allowed. To reference native property tag specified in -- Annex C, use 0x0000 as first two octets. -- To wildcard a Property, Event, Signal, or Statistics ID, use -- 0xFFFF for last two octets, choose is not allowed. -- Wildcarding of Package Name is permitted only if Property, --Event, Signal, or Statistics ID is -- also wildcarded. Relation ::= ENUMERATED { greaterThan(0), smallerThan(1), unequalTo(2), ... } LocalRemoteDescriptor ::= SEQUENCE { propGrps SEQUENCE OF PropertyGroup, ... } PropertyGroup ::= SEQUENCE OF PropertyParm TerminationStateDescriptor ::= SEQUENCE { propertyParms SEQUENCE OF PropertyParm, eventBufferControl EventBufferControl OPTIONAL, serviceState ServiceState OPTIONAL, ... } EventBufferControl ::= ENUMERATED { off(0), lockStep(1), ... } ServiceState ::= ENUMERATED { test(0), outOfSvc(1), inSvc(2), ... } MuxDescriptor ::= SEQUENCE { muxType MuxType, termList SEQUENCE OF TerminationID, nonStandardData NonStandardData OPTIONAL, ... } MuxType ::= ENUMERATED { h221(0), h223(1), h226(2), v76(3), ..., nx64k(4) } StreamID ::= INTEGER(0..65535) -- 16 bit unsigned integer EventsDescriptor ::= SEQUENCE { requestID RequestID OPTIONAL, -- RequestID must be present if eventList is non empty, eventList SEQUENCE OF RequestedEvent, ... } RequestedEvent ::= SEQUENCE { pkgdName PkgdName, streamID StreamID OPTIONAL, eventAction RequestedActions OPTIONAL, evParList SEQUENCE OF EventParameter, ... } RequestedActions ::= SEQUENCE { keepActive BOOLEAN OPTIONAL, eventDM EventDM OPTIONAL, secondEvent SecondEventsDescriptor OPTIONAL, signalsDescriptor SignalsDescriptor OPTIONAL, ... } EventDM ::= CHOICE { digitMapName DigitMapName, digitMapValue DigitMapValue } SecondEventsDescriptor ::= SEQUENCE { requestID RequestID OPTIONAL, eventList SEQUENCE OF SecondRequestedEvent, ... } SecondRequestedEvent ::= SEQUENCE { pkgdName PkgdName, streamID StreamID OPTIONAL, eventAction SecondRequestedActions OPTIONAL, evParList SEQUENCE OF EventParameter, ... } SecondRequestedActions ::= SEQUENCE { keepActive BOOLEAN OPTIONAL, eventDM EventDM OPTIONAL, signalsDescriptor SignalsDescriptor OPTIONAL, ... } EventBufferDescriptor ::= SEQUENCE OF EventSpec EventSpec ::= SEQUENCE { eventName EventName, streamID StreamID OPTIONAL, eventParList SEQUENCE OF EventParameter, ... } SignalsDescriptor ::= SEQUENCE OF SignalRequest SignalRequest ::= CHOICE { signal Signal, seqSigList SeqSigList, ... } SeqSigList ::= SEQUENCE { id INTEGER(0..65535), signalList SEQUENCE OF Signal } Signal ::= SEQUENCE { signalName SignalName, streamID StreamID OPTIONAL, sigType SignalType OPTIONAL, duration INTEGER (0..65535) OPTIONAL, notifyCompletion NotifyCompletion OPTIONAL, keepActive BOOLEAN OPTIONAL, sigParList SEQUENCE OF SigParameter, ... } SignalType ::= ENUMERATED { brief(0), onOff(1), timeOut(2), ... } SignalName ::= PkgdName NotifyCompletion ::= BIT STRING { onTimeOut(0), onInterruptByEvent(1), onInterruptByNewSignalDescr(2), otherReason(3) } SigParameter ::= SEQUENCE { sigParameterName Name, value Value, -- For use of extraInfo see the comment related to PropertyParm extraInfo CHOICE { relation Relation, range BOOLEAN, sublist BOOLEAN } OPTIONAL, ... } -- For an AuditCapReply with all events, the RequestID SHALL be ALL. -- ALL is represented by 0xffffffff. RequestID ::= INTEGER(0..4294967295) -- 32 bit unsigned integer ModemDescriptor ::= SEQUENCE { mtl SEQUENCE OF ModemType, mpl SEQUENCE OF PropertyParm, nonStandardData NonStandardData OPTIONAL } ModemType ::= ENUMERATED { v18(0), v22(1), v22bis(2), v32(3), v32bis(4), v34(5), v90(6), v91(7), synchISDN(8), ... } DigitMapDescriptor ::= SEQUENCE { digitMapName DigitMapName OPTIONAL, digitMapValue DigitMapValue OPTIONAL } DigitMapName ::= Name DigitMapValue ::= SEQUENCE { startTimer INTEGER(0..99) OPTIONAL, shortTimer INTEGER(0..99) OPTIONAL, longTimer INTEGER(0..99) OPTIONAL, digitMapBody IA5String, -- Units are seconds for start, short and long timers, and -- hundreds of milliseconds for duration timer. Thus start, -- short, and long range from 1 to 99 seconds and duration -- from 100 ms to 9.9 s -- See Section A.3 for explanation of digit map syntax ..., durationTimer INTEGER(0..99) OPTIONAL } ServiceChangeParm ::= SEQUENCE { serviceChangeMethod ServiceChangeMethod, serviceChangeAddress ServiceChangeAddress OPTIONAL, serviceChangeVersion INTEGER(0..99) OPTIONAL, serviceChangeProfile ServiceChangeProfile OPTIONAL, serviceChangeReason Value, -- A serviceChangeReason consists of a numeric reason code -- and an optional text description. -- The serviceChangeReason SHALL be a string consisting of -- a decimal reason code, optionally followed by a single -- space character and a textual description string. -- This string is first BER-encoded as an IA5String. -- The result of this BER-encoding is then encoded as -- an ASN.1 OCTET STRING type, "double wrapping" the --value -- as was done for package elements. serviceChangeDelay INTEGER(0..4294967295) OPTIONAL, -- 32 bit unsigned integer serviceChangeMgcId MId OPTIONAL, timeStamp TimeNotation OPTIONAL, nonStandardData NonStandardData OPTIONAL, ..., serviceChangeInfo AuditDescriptor OPTIONAL } ServiceChangeAddress ::= CHOICE { portNumber INTEGER(0..65535), -- TCP/UDP port number ip4Address IP4Address, ip6Address IP6Address, domainName DomainName, deviceName PathName, mtpAddress OCTET STRING(SIZE(2..4)), ... } ServiceChangeResParm ::= SEQUENCE { serviceChangeMgcId MId OPTIONAL, serviceChangeAddress ServiceChangeAddress OPTIONAL, serviceChangeVersion INTEGER(0..99) OPTIONAL, serviceChangeProfile ServiceChangeProfile OPTIONAL, timestamp TimeNotation OPTIONAL, ... } ServiceChangeMethod ::= ENUMERATED { failover(0), forced(1), graceful(2), restart(3), disconnected(4), handOff(5), ... } ServiceChangeProfile ::= SEQUENCE { profileName IA5String(SIZE (1..67)) -- 64 characters for name, 1 for "/", 2 for version to match ABNF } PackagesDescriptor ::= SEQUENCE OF PackagesItem PackagesItem ::= SEQUENCE { packageName Name, packageVersion INTEGER(0..99), ... } StatisticsDescriptor ::= SEQUENCE OF StatisticsParameter StatisticsParameter ::= SEQUENCE { statName PkgdName, statValue Value OPTIONAL } NonStandardData ::= SEQUENCE { nonStandardIdentifier NonStandardIdentifier, data OCTET STRING } NonStandardIdentifier ::= CHOICE { object OBJECT IDENTIFIER, h221NonStandard H221NonStandard, experimental IA5String(SIZE(8)), -- first two characters should be "X-" or "X+" ... } H221NonStandard ::= SEQUENCE { t35CountryCode1 INTEGER(0..255), t35CountryCode2 INTEGER(0..255), -- country, as per T.35 t35Extension INTEGER(0..255), -- assigned nationally manufacturerCode INTEGER(0..65535), -- assigned nationally ... } TimeNotation ::= SEQUENCE { date IA5String(SIZE(8)), -- yyyymmdd format time IA5String(SIZE(8)) -- hhmmssss format -- per ISO 8601:1988 } Value ::= SEQUENCE OF OCTET STRING END h323plus/src/asn/h460tm.asn0000644000175000017500000000072510745243153014214 0ustar markmarkH460TM {itu-t(0) recommendation(0) h(8) 460 x} DEFINITIONS AUTOMATIC TAGS ::= BEGIN TMmode ::= ENUMERATED { tmOpen (1), tmPublic (2), tmPrivate (3), tmBroadcast (4), tmReceive (5) } MultipointTM ::= SEQUENCE { message BMPString (SIZE (1..256)), -- Basic ISO/IEC 10646-1 (Unicode) sender INTEGER (1..65535) OPTIONAL, -- source user id receiver INTEGER (1..65535) OPTIONAL, -- destination user id ... } END h323plus/src/asn/h225.asn0000644000175000017500000030453110655704731013660 0ustar markmark-- -- Abstract Syntax Notion (ASN.1) file for H.225.0 Version 6 -- -- File provided by Packetizer, Inc. - http://www.packetizer.com -- Last Updated: 23 Apr 2006 -- -- History of changes: -- 23 Apr 2006 -- Initial H.225.0v6 ASN.1 file -- H323-MESSAGES DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS SIGNED{}, ENCRYPTED{}, HASHED{}, ChallengeString, TimeStamp, RandomVal, Password, EncodedPwdCertToken, ClearToken, CryptoToken, AuthenticationMechanism FROM H235-SECURITY-MESSAGES DataProtocolCapability, T38FaxProfile, QOSCapability FROM MULTIMEDIA-SYSTEM-CONTROL; H323-UserInformation ::= SEQUENCE -- root for all H.225.0 Call Signalling messages { h323-uu-pdu H323-UU-PDU, user-data SEQUENCE { protocol-discriminator INTEGER (0..255), user-information OCTET STRING (SIZE(1..131)), ... } OPTIONAL, ... } H323-UU-PDU ::= SEQUENCE { h323-message-body CHOICE { setup Setup-UUIE, callProceeding CallProceeding-UUIE, connect Connect-UUIE, alerting Alerting-UUIE, information Information-UUIE, releaseComplete ReleaseComplete-UUIE, facility Facility-UUIE, ..., progress Progress-UUIE, empty NULL, -- used when a Facility message is sent, -- but the Facility-UUIE is not to be invoked -- (possible when transporting supplementary -- services messages in versions prior to -- H.225.0 version 4). Also used as specified -- in H.323 to send messages that are not -- call related. status Status-UUIE, statusInquiry StatusInquiry-UUIE, setupAcknowledge SetupAcknowledge-UUIE, notify Notify-UUIE }, nonStandardData NonStandardParameter OPTIONAL, ..., h4501SupplementaryService SEQUENCE OF OCTET STRING OPTIONAL, -- each sequence of octet string is defined as one -- H4501SupplementaryService APDU as defined in -- Table 3/H.450.1 h245Tunneling BOOLEAN, -- if TRUE, tunneling of H.245 messages is enabled h245Control SEQUENCE OF OCTET STRING OPTIONAL, nonStandardControl SEQUENCE OF NonStandardParameter OPTIONAL, callLinkage CallLinkage OPTIONAL, tunnelledSignallingMessage SEQUENCE { tunnelledProtocolID TunnelledProtocol, -- tunnelled signalling protocol ID messageContent SEQUENCE OF OCTET STRING, -- sequence of entire message(s) tunnellingRequired NULL OPTIONAL, nonStandardData NonStandardParameter OPTIONAL, ... } OPTIONAL, provisionalRespToH245Tunneling NULL OPTIONAL, stimulusControl StimulusControl OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL } StimulusControl ::= SEQUENCE { nonStandard NonStandardParameter OPTIONAL, isText NULL OPTIONAL, h248Message OCTET STRING OPTIONAL, ... } Alerting-UUIE ::= SEQUENCE { protocolIdentifier ProtocolIdentifier, destinationInfo EndpointType, h245Address TransportAddress OPTIONAL, ..., callIdentifier CallIdentifier, h245SecurityMode H245Security OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, fastStart SEQUENCE OF OCTET STRING OPTIONAL, multipleCalls BOOLEAN, maintainConnection BOOLEAN, alertingAddress SEQUENCE OF AliasAddress OPTIONAL, presentationIndicator PresentationIndicator OPTIONAL, screeningIndicator ScreeningIndicator OPTIONAL, fastConnectRefused NULL OPTIONAL, serviceControl SEQUENCE OF ServiceControlSession OPTIONAL, capacity CallCapacity OPTIONAL, featureSet FeatureSet OPTIONAL } CallProceeding-UUIE ::= SEQUENCE { protocolIdentifier ProtocolIdentifier, destinationInfo EndpointType, h245Address TransportAddress OPTIONAL, ..., callIdentifier CallIdentifier, h245SecurityMode H245Security OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, fastStart SEQUENCE OF OCTET STRING OPTIONAL, multipleCalls BOOLEAN, maintainConnection BOOLEAN, fastConnectRefused NULL OPTIONAL, featureSet FeatureSet OPTIONAL } Connect-UUIE ::= SEQUENCE { protocolIdentifier ProtocolIdentifier, h245Address TransportAddress OPTIONAL, destinationInfo EndpointType, conferenceID ConferenceIdentifier, ..., callIdentifier CallIdentifier, h245SecurityMode H245Security OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, fastStart SEQUENCE OF OCTET STRING OPTIONAL, multipleCalls BOOLEAN, maintainConnection BOOLEAN, language SEQUENCE OF IA5String (SIZE (1..32)) OPTIONAL, -- RFC1766 language tag connectedAddress SEQUENCE OF AliasAddress OPTIONAL, presentationIndicator PresentationIndicator OPTIONAL, screeningIndicator ScreeningIndicator OPTIONAL, fastConnectRefused NULL OPTIONAL, serviceControl SEQUENCE OF ServiceControlSession OPTIONAL, capacity CallCapacity OPTIONAL, featureSet FeatureSet OPTIONAL } Information-UUIE ::=SEQUENCE { protocolIdentifier ProtocolIdentifier, ..., callIdentifier CallIdentifier, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, fastStart SEQUENCE OF OCTET STRING OPTIONAL, fastConnectRefused NULL OPTIONAL, circuitInfo CircuitInfo OPTIONAL } ReleaseComplete-UUIE ::= SEQUENCE { protocolIdentifier ProtocolIdentifier, reason ReleaseCompleteReason OPTIONAL, ..., callIdentifier CallIdentifier, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, busyAddress SEQUENCE OF AliasAddress OPTIONAL, presentationIndicator PresentationIndicator OPTIONAL, screeningIndicator ScreeningIndicator OPTIONAL, capacity CallCapacity OPTIONAL, serviceControl SEQUENCE OF ServiceControlSession OPTIONAL, featureSet FeatureSet OPTIONAL } ReleaseCompleteReason ::= CHOICE { noBandwidth NULL, -- bandwidth taken away or ARQ denied gatekeeperResources NULL, -- exhausted unreachableDestination NULL, -- no transport path to the destination destinationRejection NULL, -- rejected at destination invalidRevision NULL, noPermission NULL, -- called party's gatekeeper rejects unreachableGatekeeper NULL, -- terminal cannot reach gatekeeper for ARQ gatewayResources NULL, badFormatAddress NULL, adaptiveBusy NULL, -- call is dropping due to LAN crowding inConf NULL, -- called party busy undefinedReason NULL, ..., facilityCallDeflection NULL, -- call was deflected using a Facility message securityDenied NULL, -- incompatible security settings calledPartyNotRegistered NULL, -- used by gatekeeper when endpoint has -- preGrantedARQ to bypass ARQ/ACF callerNotRegistered NULL, -- used by gatekeeper when endpoint has -- preGrantedARQ to bypass ARQ/ACF newConnectionNeeded NULL, -- indicates that the Setup was not accepted on this -- connection, but that the Setup may be accepted on -- a new connection nonStandardReason NonStandardParameter, replaceWithConferenceInvite ConferenceIdentifier, -- call dropped due to subsequent -- invitation to a conference -- (see H.323 8.4.3.8) genericDataReason NULL, neededFeatureNotSupported NULL, tunnelledSignallingRejected NULL, invalidCID NULL, securityError SecurityErrors, hopCountExceeded NULL } Setup-UUIE ::= SEQUENCE { protocolIdentifier ProtocolIdentifier, h245Address TransportAddress OPTIONAL, sourceAddress SEQUENCE OF AliasAddress OPTIONAL, sourceInfo EndpointType, destinationAddress SEQUENCE OF AliasAddress OPTIONAL, destCallSignalAddress TransportAddress OPTIONAL, destExtraCallInfo SEQUENCE OF AliasAddress OPTIONAL, destExtraCRV SEQUENCE OF CallReferenceValue OPTIONAL, activeMC BOOLEAN, conferenceID ConferenceIdentifier, conferenceGoal CHOICE { create NULL, join NULL, invite NULL, ..., capability-negotiation NULL, callIndependentSupplementaryService NULL }, callServices QseriesOptions OPTIONAL, callType CallType, ..., sourceCallSignalAddress TransportAddress OPTIONAL, remoteExtensionAddress AliasAddress OPTIONAL, callIdentifier CallIdentifier, h245SecurityCapability SEQUENCE OF H245Security OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, fastStart SEQUENCE OF OCTET STRING OPTIONAL, mediaWaitForConnect BOOLEAN, canOverlapSend BOOLEAN, endpointIdentifier EndpointIdentifier OPTIONAL, multipleCalls BOOLEAN, maintainConnection BOOLEAN, connectionParameters SEQUENCE -- additional gateway parameters { connectionType ScnConnectionType, numberOfScnConnections INTEGER (0..65535), connectionAggregation ScnConnectionAggregation, ... } OPTIONAL, language SEQUENCE OF IA5String (SIZE (1..32)) OPTIONAL, -- RFC1766 language tag presentationIndicator PresentationIndicator OPTIONAL, screeningIndicator ScreeningIndicator OPTIONAL, serviceControl SEQUENCE OF ServiceControlSession OPTIONAL, symmetricOperationRequired NULL OPTIONAL, capacity CallCapacity OPTIONAL, circuitInfo CircuitInfo OPTIONAL, desiredProtocols SEQUENCE OF SupportedProtocols OPTIONAL, neededFeatures SEQUENCE OF FeatureDescriptor OPTIONAL, desiredFeatures SEQUENCE OF FeatureDescriptor OPTIONAL, supportedFeatures SEQUENCE OF FeatureDescriptor OPTIONAL, parallelH245Control SEQUENCE OF OCTET STRING OPTIONAL, additionalSourceAddresses SEQUENCE OF ExtendedAliasAddress OPTIONAL, hopCount INTEGER (1..31) OPTIONAL } ScnConnectionType ::= CHOICE { unknown NULL, -- should be seleceted when connection type is unknown bChannel NULL, -- each individual connection on the SCN is 64kbps. -- Note that where SCN delivers 56kbps usable data, the -- actual bandwidth allocated on SCN is still 64kbps. hybrid2x64 NULL, -- each connection is a 128kbps hybrid call hybrid384 NULL, -- each connection is an H0 (384kbps) hybrid call hybrid1536 NULL, -- each connection is an H11 (1536kbps) hybrid call hybrid1920 NULL, -- each connection is an H12 (1920kbps) hybrid call multirate NULL, -- bandwidth supplied by SCN using multirate. -- In this case, the information transfer rate octet in the -- bearer capability shall be set to multirate and the rate -- multiplier octet shall denote the number of B channels. ... } ScnConnectionAggregation ::= CHOICE { auto NULL, -- aggregation mechanism is unknown none NULL, -- call produced using a single SCN connection h221 NULL, -- use H.221 framing to aggregate the connections bonded-mode1 NULL, -- use ISO/IEC 13871 bonding mode 1. -- Use bonded-mode1 to signal a bonded call if the precise -- bonding mode to be used is unknown. bonded-mode2 NULL, -- use ISO/IEC 13871 bonding mode 2 bonded-mode3 NULL, -- use ISO/IEC 13871 bonding mode 3 ... } PresentationIndicator ::= CHOICE { presentationAllowed NULL, presentationRestricted NULL, addressNotAvailable NULL, ... } ScreeningIndicator ::= ENUMERATED { userProvidedNotScreened (0), -- number was provided by a remote user -- and has not been screened by a gatekeeper userProvidedVerifiedAndPassed (1), -- number was provided by user -- equipment (or by a remote network), and has -- been screened by a gatekeeper userProvidedVerifiedAndFailed (2), -- number was provided by user -- equipment (or by a remote network), and the -- gatekeeper has determined that the -- information is incorrect networkProvided (3), -- number was provided by a gatekeeper ... } Facility-UUIE ::= SEQUENCE { protocolIdentifier ProtocolIdentifier, alternativeAddress TransportAddress OPTIONAL, alternativeAliasAddress SEQUENCE OF AliasAddress OPTIONAL, conferenceID ConferenceIdentifier OPTIONAL, reason FacilityReason, ..., callIdentifier CallIdentifier, destExtraCallInfo SEQUENCE OF AliasAddress OPTIONAL, remoteExtensionAddress AliasAddress OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, conferences SEQUENCE OF ConferenceList OPTIONAL, h245Address TransportAddress OPTIONAL, fastStart SEQUENCE OF OCTET STRING OPTIONAL, multipleCalls BOOLEAN, maintainConnection BOOLEAN, fastConnectRefused NULL OPTIONAL, serviceControl SEQUENCE OF ServiceControlSession OPTIONAL, circuitInfo CircuitInfo OPTIONAL, featureSet FeatureSet OPTIONAL, destinationInfo EndpointType OPTIONAL, h245SecurityMode H245Security OPTIONAL } ConferenceList ::= SEQUENCE { conferenceID ConferenceIdentifier OPTIONAL, conferenceAlias AliasAddress OPTIONAL, nonStandardData NonStandardParameter OPTIONAL, ... } FacilityReason ::= CHOICE { routeCallToGatekeeper NULL, -- call must use gatekeeper model -- gatekeeper is alternativeAddress callForwarded NULL, routeCallToMC NULL, undefinedReason NULL, ..., conferenceListChoice NULL, startH245 NULL, -- recipient should connect to h245Address noH245 NULL, -- endpoint does not support H.245 newTokens NULL, featureSetUpdate NULL, forwardedElements NULL, transportedInformation NULL } Progress-UUIE ::= SEQUENCE { protocolIdentifier ProtocolIdentifier, destinationInfo EndpointType, h245Address TransportAddress OPTIONAL, callIdentifier CallIdentifier, h245SecurityMode H245Security OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, fastStart SEQUENCE OF OCTET STRING OPTIONAL, ..., multipleCalls BOOLEAN, maintainConnection BOOLEAN, fastConnectRefused NULL OPTIONAL } TransportAddress ::= CHOICE { ipAddress SEQUENCE { ip OCTET STRING (SIZE(4)), port INTEGER(0..65535) }, ipSourceRoute SEQUENCE { ip OCTET STRING (SIZE(4)), port INTEGER(0..65535), route SEQUENCE OF OCTET STRING (SIZE(4)), routing CHOICE { strict NULL, loose NULL, ... }, ... }, ipxAddress SEQUENCE { node OCTET STRING (SIZE(6)), netnum OCTET STRING (SIZE(4)), port OCTET STRING (SIZE(2)) }, ip6Address SEQUENCE { ip OCTET STRING (SIZE(16)), port INTEGER(0..65535), ... }, netBios OCTET STRING (SIZE(16)), nsap OCTET STRING (SIZE(1..20)), nonStandardAddress NonStandardParameter, ... } Status-UUIE ::= SEQUENCE { protocolIdentifier ProtocolIdentifier, callIdentifier CallIdentifier, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, ... } StatusInquiry-UUIE ::= SEQUENCE { protocolIdentifier ProtocolIdentifier, callIdentifier CallIdentifier, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, ... } SetupAcknowledge-UUIE ::= SEQUENCE { protocolIdentifier ProtocolIdentifier, callIdentifier CallIdentifier, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, ... } Notify-UUIE ::= SEQUENCE { protocolIdentifier ProtocolIdentifier, callIdentifier CallIdentifier, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, ... } -- Beginning of common message elements section EndpointType ::= SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, vendor VendorIdentifier OPTIONAL, gatekeeper GatekeeperInfo OPTIONAL, gateway GatewayInfo OPTIONAL, mcu McuInfo OPTIONAL, -- mc must be set as well terminal TerminalInfo OPTIONAL, mc BOOLEAN, -- shall not be set by itself undefinedNode BOOLEAN, ..., set BIT STRING (SIZE(32)) OPTIONAL, -- shall not be used with mc, gatekeeper -- code points for the various SET devices -- are defined in the respective SET Annexes supportedTunnelledProtocols SEQUENCE OF TunnelledProtocol OPTIONAL -- list of supported tunnelled protocols } GatewayInfo ::= SEQUENCE { protocol SEQUENCE OF SupportedProtocols OPTIONAL, nonStandardData NonStandardParameter OPTIONAL, ... } SupportedProtocols ::= CHOICE { nonStandardData NonStandardParameter, h310 H310Caps, h320 H320Caps, h321 H321Caps, h322 H322Caps, h323 H323Caps, h324 H324Caps, voice VoiceCaps, t120-only T120OnlyCaps, ..., nonStandardProtocol NonStandardProtocol, t38FaxAnnexbOnly T38FaxAnnexbOnlyCaps, sip SIPCaps } H310Caps ::= SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, ..., dataRatesSupported SEQUENCE OF DataRate OPTIONAL, supportedPrefixes SEQUENCE OF SupportedPrefix } H320Caps ::= SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, ..., dataRatesSupported SEQUENCE OF DataRate OPTIONAL, supportedPrefixes SEQUENCE OF SupportedPrefix } H321Caps ::= SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, ..., dataRatesSupported SEQUENCE OF DataRate OPTIONAL, supportedPrefixes SEQUENCE OF SupportedPrefix } H322Caps ::= SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, ..., dataRatesSupported SEQUENCE OF DataRate OPTIONAL, supportedPrefixes SEQUENCE OF SupportedPrefix } H323Caps ::= SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, ..., dataRatesSupported SEQUENCE OF DataRate OPTIONAL, supportedPrefixes SEQUENCE OF SupportedPrefix } H324Caps ::= SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, ..., dataRatesSupported SEQUENCE OF DataRate OPTIONAL, supportedPrefixes SEQUENCE OF SupportedPrefix } VoiceCaps ::= SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, ..., dataRatesSupported SEQUENCE OF DataRate OPTIONAL, supportedPrefixes SEQUENCE OF SupportedPrefix } T120OnlyCaps ::= SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, ..., dataRatesSupported SEQUENCE OF DataRate OPTIONAL, supportedPrefixes SEQUENCE OF SupportedPrefix } NonStandardProtocol ::= SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, dataRatesSupported SEQUENCE OF DataRate OPTIONAL, supportedPrefixes SEQUENCE OF SupportedPrefix, ... } T38FaxAnnexbOnlyCaps ::= SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, dataRatesSupported SEQUENCE OF DataRate OPTIONAL, supportedPrefixes SEQUENCE OF SupportedPrefix, t38FaxProtocol DataProtocolCapability, t38FaxProfile T38FaxProfile, ... } SIPCaps ::= SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, dataRatesSupported SEQUENCE OF DataRate OPTIONAL, supportedPrefixes SEQUENCE OF SupportedPrefix OPTIONAL, ... } McuInfo ::= SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, ..., protocol SEQUENCE OF SupportedProtocols OPTIONAL } TerminalInfo ::= SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, ... } GatekeeperInfo ::= SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, ... } VendorIdentifier ::= SEQUENCE { vendor H221NonStandard, productId OCTET STRING (SIZE(1..256)) OPTIONAL, -- per vendor versionId OCTET STRING (SIZE(1..256)) OPTIONAL, -- per product ..., enterpriseNumber OBJECT IDENTIFIER OPTIONAL } H221NonStandard ::= SEQUENCE { t35CountryCode INTEGER(0..255), t35Extension INTEGER(0..255), manufacturerCode INTEGER(0..65535), ... } TunnelledProtocol ::= SEQUENCE { id CHOICE { tunnelledProtocolObjectID OBJECT IDENTIFIER, tunnelledProtocolAlternateID TunnelledProtocolAlternateIdentifier, ... }, subIdentifier IA5String (SIZE (1..64)) OPTIONAL, ... } TunnelledProtocolAlternateIdentifier ::= SEQUENCE { protocolType IA5String (SIZE (1..64)), protocolVariant IA5String (SIZE (1..64)) OPTIONAL, ... } NonStandardParameter ::= SEQUENCE { nonStandardIdentifier NonStandardIdentifier, data OCTET STRING } NonStandardIdentifier ::= CHOICE { object OBJECT IDENTIFIER, h221NonStandard H221NonStandard, ... } AliasAddress ::= CHOICE { dialedDigits IA5String (SIZE (1..128)) (FROM ("0123456789#*,")), h323-ID BMPString (SIZE (1..256)), -- Basic ISO/IEC 10646-1 (Unicode) ..., url-ID IA5String (SIZE(1..512)), -- URL style address transportID TransportAddress, email-ID IA5String (SIZE(1..512)), -- rfc822-compliant email address partyNumber PartyNumber, mobileUIM MobileUIM, isupNumber IsupNumber } AddressPattern ::= CHOICE { wildcard AliasAddress, range SEQUENCE { startOfRange PartyNumber, endOfRange PartyNumber }, ... } PartyNumber ::= CHOICE { e164Number PublicPartyNumber, -- the numbering plan is according to -- Recommendations E.163 and E.164. dataPartyNumber NumberDigits, -- not used, value reserved. telexPartyNumber NumberDigits, -- not used, value reserved. privateNumber PrivatePartyNumber, -- the numbering plan is according to ISO/IEC 11571. nationalStandardPartyNumber NumberDigits, -- not used, value reserved. ... } PublicPartyNumber ::= SEQUENCE { publicTypeOfNumber PublicTypeOfNumber, publicNumberDigits NumberDigits } PrivatePartyNumber ::= SEQUENCE { privateTypeOfNumber PrivateTypeOfNumber, privateNumberDigits NumberDigits } NumberDigits ::= IA5String (SIZE (1..128)) (FROM ("0123456789#*,")) PublicTypeOfNumber ::= CHOICE { unknown NULL, -- if used number digits carry prefix indicating type -- of number according to national recommendations. internationalNumber NULL, nationalNumber NULL, networkSpecificNumber NULL, -- not used, value reserved subscriberNumber NULL, abbreviatedNumber NULL, -- valid only for called party number at the outgoing -- access, network substitutes appropriate number. ... } PrivateTypeOfNumber ::= CHOICE { unknown NULL, level2RegionalNumber NULL, level1RegionalNumber NULL, pISNSpecificNumber NULL, localNumber NULL, abbreviatedNumber NULL, ... } MobileUIM ::= CHOICE { ansi-41-uim ANSI-41-UIM, -- Americas standards Wireless Networks gsm-uim GSM-UIM, -- European standards Wireless Networks ... } TBCD-STRING ::= IA5String (FROM ("0123456789#*abc")) ANSI-41-UIM ::= SEQUENCE { imsi TBCD-STRING (SIZE (3..16)) OPTIONAL, min TBCD-STRING (SIZE (3..16)) OPTIONAL, mdn TBCD-STRING (SIZE (3..16)) OPTIONAL, msisdn TBCD-STRING (SIZE (3..16)) OPTIONAL, esn TBCD-STRING (SIZE (16)) OPTIONAL, mscid TBCD-STRING (SIZE (3..16)) OPTIONAL, system-id CHOICE { sid TBCD-STRING (SIZE (1..4)), mid TBCD-STRING (SIZE (1..4)), ... }, systemMyTypeCode OCTET STRING (SIZE (1)) OPTIONAL, systemAccessType OCTET STRING (SIZE (1)) OPTIONAL, qualificationInformationCode OCTET STRING (SIZE (1)) OPTIONAL, sesn TBCD-STRING (SIZE (16)) OPTIONAL, soc TBCD-STRING (SIZE (3..16)) OPTIONAL, ... -- IMSI refers to International Mobile Station Identification -- MIN refers to Mobile Identification Number -- MDN refers to Mobile Directory Number -- MSISDN refers to Mobile Station ISDN number -- ESN Refers to Electronic Serial Number -- MSCID refers to Mobile Switching Center number + Market ID or System ID -- SID refers to System Identification and MID refers to Market Identification -- SystemMyTypeCode refers to vendor identification number -- SystemAccessType refers to the system access type like power down registration or call -- origination or Short Message repsonse etc. -- Qualification Information Code refers to the validity -- SESN Refers to SIM Electronic Serial Number for Security purposes of User Identification -- SOC refers to System Operator Code } GSM-UIM ::= SEQUENCE { imsi TBCD-STRING (SIZE (3..16)) OPTIONAL, tmsi OCTET STRING (SIZE(1..4)) OPTIONAL, msisdn TBCD-STRING (SIZE (3..16)) OPTIONAL, imei TBCD-STRING (SIZE (15..16)) OPTIONAL, hplmn TBCD-STRING (SIZE (1..4)) OPTIONAL, vplmn TBCD-STRING (SIZE (1..4)) OPTIONAL, -- IMSI refers to International Mobile Station Identificaiton -- MSISDN refers to Mobile Station ISDN number -- IMEI Refers to International Mobile Equipment Identification -- VPLMN or HPLMN refers to Visiting or Home Public Land Mobile Network number ... } IsupNumber ::= CHOICE { e164Number IsupPublicPartyNumber, -- the numbering plan is according to -- Recommendations E.163 and E.164. dataPartyNumber IsupDigits, -- not used, value reserved. telexPartyNumber IsupDigits, -- not used, value reserved. privateNumber IsupPrivatePartyNumber, -- the numbering plan is according to -- ISO/IEC 11571. nationalStandardPartyNumber IsupDigits, -- not used, value reserved. ... } IsupPublicPartyNumber ::= SEQUENCE { natureOfAddress NatureOfAddress, address IsupDigits, ... } IsupPrivatePartyNumber ::= SEQUENCE { privateTypeOfNumber PrivateTypeOfNumber, address IsupDigits, ... } NatureOfAddress ::= CHOICE { unknown NULL, subscriberNumber NULL, nationalNumber NULL, internationalNumber NULL, networkSpecificNumber NULL, routingNumberNationalFormat NULL, routingNumberNetworkSpecificFormat NULL, routingNumberWithCalledDirectoryNumber NULL, ... } IsupDigits ::= IA5String (SIZE (1..128)) (FROM ("0123456789ABCDE")) ExtendedAliasAddress ::= SEQUENCE { address AliasAddress, presentationIndicator PresentationIndicator OPTIONAL, screeningIndicator ScreeningIndicator OPTIONAL, ... } Endpoint ::= SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, aliasAddress SEQUENCE OF AliasAddress OPTIONAL, callSignalAddress SEQUENCE OF TransportAddress OPTIONAL, rasAddress SEQUENCE OF TransportAddress OPTIONAL, endpointType EndpointType OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, priority INTEGER(0..127) OPTIONAL, remoteExtensionAddress SEQUENCE OF AliasAddress OPTIONAL, destExtraCallInfo SEQUENCE OF AliasAddress OPTIONAL, ..., alternateTransportAddresses AlternateTransportAddresses OPTIONAL, circuitInfo CircuitInfo OPTIONAL, featureSet FeatureSet OPTIONAL } AlternateTransportAddresses ::= SEQUENCE { annexE SEQUENCE OF TransportAddress OPTIONAL, ..., sctp SEQUENCE OF TransportAddress OPTIONAL } UseSpecifiedTransport ::= CHOICE { tcp NULL, annexE NULL, ..., sctp NULL } AlternateGK ::= SEQUENCE { rasAddress TransportAddress, gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, needToRegister BOOLEAN, priority INTEGER (0..127), ... } AltGKInfo ::=SEQUENCE { alternateGatekeeper SEQUENCE OF AlternateGK, altGKisPermanent BOOLEAN, ... } SecurityServiceMode ::= CHOICE { nonStandard NonStandardParameter, none NULL, default NULL, ... -- can be extended with other specific modes } SecurityCapabilities ::= SEQUENCE { nonStandard NonStandardParameter OPTIONAL, encryption SecurityServiceMode, authenticaton SecurityServiceMode, integrity SecurityServiceMode, ... } SecurityErrors ::= CHOICE { securityWrongSyncTime NULL, -- either time server -- problem or network delay securityReplay NULL, -- replay attack encountered securityWrongGeneralID NULL, -- wrong general ID securityWrongSendersID NULL, -- wrong senders ID securityIntegrityFailed NULL, -- integrity check failed securityWrongOID NULL, -- wrong token OIDs or crypto alg OIDs securityDHmismatch NULL, -- mismatch of DH parameters securityCertificateExpired NULL, -- certificate has expired securityCertificateDateInvalid NULL, -- certificate is not yet valid securityCertificateRevoked NULL, -- certificate was found revoked securityCertificateNotReadable NULL, -- decoding error securityCertificateSignatureInvalid NULL, -- wrong signature in the -- certificate securityCertificateMissing NULL, -- no certificate available securityCertificateIncomplete NULL, -- missing expected certificate -- extensions securityUnsupportedCertificateAlgOID NULL, -- crypto algs not understood securityUnknownCA NULL, -- CA/root certificate could not -- be found ... } SecurityErrors2 ::= CHOICE { securityWrongSyncTime NULL, -- either time server problem or network delay securityReplay NULL, -- replay attack encountered securityWrongGeneralID NULL, -- wrong general ID securityWrongSendersID NULL, -- wrong senders ID securityIntegrityFailed NULL, -- integrity check failed securityWrongOID NULL, -- wrong token OIDs or crypto alg OIDs ... } H245Security ::= CHOICE { nonStandard NonStandardParameter, noSecurity NULL, tls SecurityCapabilities, ipsec SecurityCapabilities, ... } QseriesOptions ::= SEQUENCE { q932Full BOOLEAN, -- if true, indicates full support for Q.932 q951Full BOOLEAN, -- if true, indicates full support for Q.951 q952Full BOOLEAN, -- if true, indicates full support for Q.952 q953Full BOOLEAN, -- if true, indicates full support for Q.953 q955Full BOOLEAN, -- if true, indicates full support for Q.955 q956Full BOOLEAN, -- if true, indicates full support for Q.956 q957Full BOOLEAN, -- if true, indicates full support for Q.957 q954Info Q954Details, ... } Q954Details ::= SEQUENCE { conferenceCalling BOOLEAN, threePartyService BOOLEAN, ... } GloballyUniqueID ::= OCTET STRING (SIZE(16)) ConferenceIdentifier ::= GloballyUniqueID RequestSeqNum ::= INTEGER (1..65535) GatekeeperIdentifier ::= BMPString (SIZE(1..128)) BandWidth ::= INTEGER (0..4294967295) -- in 100s of bits CallReferenceValue ::= INTEGER (0..65535) EndpointIdentifier ::= BMPString (SIZE(1..128)) ProtocolIdentifier ::= OBJECT IDENTIFIER -- shall be set to -- {itu-t (0) recommendation (0) h (8) 2250 version (0) 4} TimeToLive ::= INTEGER (1..4294967295) -- in seconds H248PackagesDescriptor ::= OCTET STRING -- This octet string contans -- ASN.1 PER encoded H.248 -- PackageDescriptor H248SignalsDescriptor ::= OCTET STRING -- This octet string contans -- ASN.1 PER encoded H.248 -- SignalDescriptor FeatureDescriptor ::= GenericData CallIdentifier ::= SEQUENCE { guid GloballyUniqueID, ... } EncryptIntAlg ::= CHOICE { -- core encryption algorithms for RAS message integrity nonStandard NonStandardParameter, isoAlgorithm OBJECT IDENTIFIER, -- defined in ISO/IEC 9979 ... } NonIsoIntegrityMechanism ::= CHOICE { -- HMAC mechanism used, no truncation, tagging may be necessary! hMAC-MD5 NULL, hMAC-iso10118-2-s EncryptIntAlg, -- according to ISO/IEC 10118-2 using -- EncryptIntAlg as core block encryption algorithm -- (short MAC) hMAC-iso10118-2-l EncryptIntAlg, -- according to ISO/IEC 10118-2 using -- EncryptIntAlg as core block encryption algorithm -- (long MAC) hMAC-iso10118-3 OBJECT IDENTIFIER, -- according to ISO/IEC 10118-3 using -- OID as hash function (OID is SHA-1, -- RIPE-MD160, -- RIPE-MD128) ... } IntegrityMechanism ::= CHOICE { -- for RAS message integrity nonStandard NonStandardParameter, digSig NULL, -- indicates to apply a digital signature iso9797 OBJECT IDENTIFIER, -- according to ISO/IEC 9797 using OID as -- core encryption algorithm (X-CBC MAC) nonIsoIM NonIsoIntegrityMechanism, ... } ICV ::= SEQUENCE { algorithmOID OBJECT IDENTIFIER, -- the algorithm used to compute the signature icv BIT STRING -- the computed cryptographic integrity check value -- or signature } FastStartToken ::= ClearToken (WITH COMPONENTS {..., timeStamp PRESENT, dhkey PRESENT, generalID PRESENT -- set to 'alias' -- }) EncodedFastStartToken ::= TYPE-IDENTIFIER.&Type (FastStartToken) CryptoH323Token ::= CHOICE { cryptoEPPwdHash SEQUENCE { alias AliasAddress, -- alias of entity generating hash timeStamp TimeStamp, -- timestamp used in hash token HASHED { EncodedPwdCertToken -- generalID set to 'alias' -- } }, cryptoGKPwdHash SEQUENCE { gatekeeperId GatekeeperIdentifier, -- GatekeeperID of GK generating hash timeStamp TimeStamp, -- timestamp used in hash token HASHED { EncodedPwdCertToken -- generalID set to Gatekeeperid -- } }, cryptoEPPwdEncr ENCRYPTED { EncodedPwdCertToken -- generalID set to Gatekeeperid --}, cryptoGKPwdEncr ENCRYPTED { EncodedPwdCertToken -- generalID set to Gatekeeperid --}, cryptoEPCert SIGNED { EncodedPwdCertToken -- generalID set to Gatekeeperid -- }, cryptoGKCert SIGNED { EncodedPwdCertToken -- generalID set to alias -- }, cryptoFastStart SIGNED { EncodedFastStartToken }, nestedcryptoToken CryptoToken, ... } DataRate ::= SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, channelRate BandWidth, channelMultiplier INTEGER (1..256) OPTIONAL, ... } CallLinkage ::= SEQUENCE { globalCallId GloballyUniqueID OPTIONAL, threadId GloballyUniqueID OPTIONAL, ... } SupportedPrefix ::= SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, prefix AliasAddress, ... } CapacityReportingCapability ::= SEQUENCE { canReportCallCapacity BOOLEAN, ... } CapacityReportingSpecification ::= SEQUENCE { when SEQUENCE { callStart NULL OPTIONAL, callEnd NULL OPTIONAL, ... }, ... } CallCapacity ::= SEQUENCE { maximumCallCapacity CallCapacityInfo OPTIONAL, currentCallCapacity CallCapacityInfo OPTIONAL, ... } CallCapacityInfo ::= SEQUENCE { voiceGwCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL, h310GwCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL, h320GwCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL, h321GwCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL, h322GwCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL, h323GwCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL, h324GwCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL, t120OnlyGwCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL, t38FaxAnnexbOnlyGwCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL, terminalCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL, mcuCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL, ..., sipGwCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL } CallsAvailable ::= SEQUENCE { calls INTEGER (0..4294967295), group IA5String (SIZE (1..128)) OPTIONAL, ..., carrier CarrierInfo OPTIONAL } CircuitInfo ::= SEQUENCE { sourceCircuitID CircuitIdentifier OPTIONAL, destinationCircuitID CircuitIdentifier OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL, ... } CircuitIdentifier ::= SEQUENCE { cic CicInfo OPTIONAL, group GroupID OPTIONAL, ..., carrier CarrierInfo OPTIONAL } CicInfo ::= SEQUENCE { cic SEQUENCE OF OCTET STRING (SIZE (2..4)), pointCode OCTET STRING (SIZE (2..5)), ... } GroupID ::= SEQUENCE { member SEQUENCE OF INTEGER (0..65535) OPTIONAL, group IA5String (SIZE (1..128)), ... } CarrierInfo ::= SEQUENCE { carrierIdentificationCode OCTET STRING (SIZE (3..4)) OPTIONAL, carrierName IA5String (SIZE (1..128)) OPTIONAL, ... } ServiceControlDescriptor ::= CHOICE { url IA5String (SIZE(0..512)), -- indicates a URL-referenced -- protocol/resource signal H248SignalsDescriptor, nonStandard NonStandardParameter, callCreditServiceControl CallCreditServiceControl, ... } ServiceControlSession ::= SEQUENCE { sessionId INTEGER (0..255), contents ServiceControlDescriptor OPTIONAL, reason CHOICE { open NULL, refresh NULL, close NULL, ... }, ... } RasUsageInfoTypes ::= SEQUENCE { nonStandardUsageTypes SEQUENCE OF NonStandardParameter, startTime NULL OPTIONAL, endTime NULL OPTIONAL, terminationCause NULL OPTIONAL, ... } RasUsageSpecification ::= SEQUENCE { when SEQUENCE { start NULL OPTIONAL, end NULL OPTIONAL, inIrr NULL OPTIONAL, ... }, callStartingPoint SEQUENCE { alerting NULL OPTIONAL, connect NULL OPTIONAL, ... } OPTIONAL, required RasUsageInfoTypes, ... } RasUsageInformation ::= SEQUENCE { nonStandardUsageFields SEQUENCE OF NonStandardParameter, alertingTime TimeStamp OPTIONAL, connectTime TimeStamp OPTIONAL, endTime TimeStamp OPTIONAL, ... } CallTerminationCause ::= CHOICE { releaseCompleteReason ReleaseCompleteReason, releaseCompleteCauseIE OCTET STRING (SIZE(2..32)), ... } BandwidthDetails ::= SEQUENCE { sender BOOLEAN, -- TRUE=sender, FALSE=receiver multicast BOOLEAN, -- TRUE if stream is multicast bandwidth BandWidth, -- Bandwidth used for stream rtcpAddresses TransportChannelInfo, -- RTCP addresses for media stream ... } CallCreditCapability ::= SEQUENCE { canDisplayAmountString BOOLEAN OPTIONAL, canEnforceDurationLimit BOOLEAN OPTIONAL, ... } CallCreditServiceControl ::= SEQUENCE { amountString BMPString (SIZE (1..512)) OPTIONAL, -- (Unicode) billingMode CHOICE { credit NULL, debit NULL, ... } OPTIONAL, callDurationLimit INTEGER (1..4294967295) OPTIONAL, -- in seconds enforceCallDurationLimit BOOLEAN OPTIONAL, callStartingPoint CHOICE { alerting NULL, connect NULL, ... } OPTIONAL, ... } GenericData ::= SEQUENCE { id GenericIdentifier, parameters SEQUENCE (SIZE (1..512)) OF EnumeratedParameter OPTIONAL, ... } GenericIdentifier ::= CHOICE { standard INTEGER(0..16383,...), oid OBJECT IDENTIFIER, nonStandard GloballyUniqueID, ... } EnumeratedParameter ::= SEQUENCE { id GenericIdentifier, content Content OPTIONAL, ... } Content ::= CHOICE { raw OCTET STRING, text IA5String, unicode BMPString, bool BOOLEAN, number8 INTEGER (0..255), number16 INTEGER (0..65535), number32 INTEGER (0..4294967295), id GenericIdentifier, alias AliasAddress, transport TransportAddress, compound SEQUENCE (SIZE (1..512)) OF EnumeratedParameter, nested SEQUENCE (SIZE (1..16)) OF GenericData, ... } FeatureSet ::= SEQUENCE { replacementFeatureSet BOOLEAN, neededFeatures SEQUENCE OF FeatureDescriptor OPTIONAL, desiredFeatures SEQUENCE OF FeatureDescriptor OPTIONAL, supportedFeatures SEQUENCE OF FeatureDescriptor OPTIONAL, ... } TransportChannelInfo ::= SEQUENCE { sendAddress TransportAddress OPTIONAL, recvAddress TransportAddress OPTIONAL, ... } RTPSession ::= SEQUENCE { rtpAddress TransportChannelInfo, rtcpAddress TransportChannelInfo, cname PrintableString, ssrc INTEGER (1..4294967295), sessionId INTEGER (1..255), associatedSessionIds SEQUENCE OF INTEGER (1..255), ..., multicast NULL OPTIONAL, bandwidth BandWidth OPTIONAL } RehomingModel ::= CHOICE { gatekeeperBased NULL, endpointBased NULL } RasMessage ::= CHOICE { gatekeeperRequest GatekeeperRequest, gatekeeperConfirm GatekeeperConfirm, gatekeeperReject GatekeeperReject, registrationRequest RegistrationRequest, registrationConfirm RegistrationConfirm, registrationReject RegistrationReject, unregistrationRequest UnregistrationRequest, unregistrationConfirm UnregistrationConfirm, unregistrationReject UnregistrationReject, admissionRequest AdmissionRequest, admissionConfirm AdmissionConfirm, admissionReject AdmissionReject, bandwidthRequest BandwidthRequest, bandwidthConfirm BandwidthConfirm, bandwidthReject BandwidthReject, disengageRequest DisengageRequest, disengageConfirm DisengageConfirm, disengageReject DisengageReject, locationRequest LocationRequest, locationConfirm LocationConfirm, locationReject LocationReject, infoRequest InfoRequest, infoRequestResponse InfoRequestResponse, nonStandardMessage NonStandardMessage, unknownMessageResponse UnknownMessageResponse, ..., requestInProgress RequestInProgress, resourcesAvailableIndicate ResourcesAvailableIndicate, resourcesAvailableConfirm ResourcesAvailableConfirm, infoRequestAck InfoRequestAck, infoRequestNak InfoRequestNak, serviceControlIndication ServiceControlIndication, serviceControlResponse ServiceControlResponse, admissionConfirmSequence SEQUENCE OF AdmissionConfirm } GatekeeperRequest ::= SEQUENCE --(GRQ) { requestSeqNum RequestSeqNum, protocolIdentifier ProtocolIdentifier, nonStandardData NonStandardParameter OPTIONAL, rasAddress TransportAddress, endpointType EndpointType, gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, callServices QseriesOptions OPTIONAL, endpointAlias SEQUENCE OF AliasAddress OPTIONAL, ..., alternateEndpoints SEQUENCE OF Endpoint OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, authenticationCapability SEQUENCE OF AuthenticationMechanism OPTIONAL, algorithmOIDs SEQUENCE OF OBJECT IDENTIFIER OPTIONAL, integrity SEQUENCE OF IntegrityMechanism OPTIONAL, integrityCheckValue ICV OPTIONAL, supportsAltGK NULL OPTIONAL, featureSet FeatureSet OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL, supportsAssignedGK BOOLEAN, assignedGatekeeper AlternateGK OPTIONAL } GatekeeperConfirm ::= SEQUENCE --(GCF) { requestSeqNum RequestSeqNum, protocolIdentifier ProtocolIdentifier, nonStandardData NonStandardParameter OPTIONAL, gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, rasAddress TransportAddress, ..., alternateGatekeeper SEQUENCE OF AlternateGK OPTIONAL, authenticationMode AuthenticationMechanism OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, algorithmOID OBJECT IDENTIFIER OPTIONAL, integrity SEQUENCE OF IntegrityMechanism OPTIONAL, integrityCheckValue ICV OPTIONAL, featureSet FeatureSet OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL, assignedGatekeeper AlternateGK OPTIONAL, rehomingModel RehomingModel OPTIONAL } GatekeeperReject ::= SEQUENCE --(GRJ) { requestSeqNum RequestSeqNum, protocolIdentifier ProtocolIdentifier, nonStandardData NonStandardParameter OPTIONAL, gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, rejectReason GatekeeperRejectReason, ..., altGKInfo AltGKInfo OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, featureSet FeatureSet OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL } GatekeeperRejectReason ::= CHOICE { resourceUnavailable NULL, terminalExcluded NULL, -- permission failure, not a resource failure invalidRevision NULL, undefinedReason NULL, ..., securityDenial NULL, genericDataReason NULL, neededFeatureNotSupported NULL, securityError SecurityErrors } RegistrationRequest ::= SEQUENCE --(RRQ) { requestSeqNum RequestSeqNum, protocolIdentifier ProtocolIdentifier, nonStandardData NonStandardParameter OPTIONAL, discoveryComplete BOOLEAN, callSignalAddress SEQUENCE OF TransportAddress, rasAddress SEQUENCE OF TransportAddress, terminalType EndpointType, terminalAlias SEQUENCE OF AliasAddress OPTIONAL, gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, endpointVendor VendorIdentifier, ..., alternateEndpoints SEQUENCE OF Endpoint OPTIONAL, timeToLive TimeToLive OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, keepAlive BOOLEAN, endpointIdentifier EndpointIdentifier OPTIONAL, willSupplyUUIEs BOOLEAN, maintainConnection BOOLEAN, alternateTransportAddresses AlternateTransportAddresses OPTIONAL, additiveRegistration NULL OPTIONAL, terminalAliasPattern SEQUENCE OF AddressPattern OPTIONAL, supportsAltGK NULL OPTIONAL, usageReportingCapability RasUsageInfoTypes OPTIONAL, multipleCalls BOOLEAN OPTIONAL, supportedH248Packages SEQUENCE OF H248PackagesDescriptor OPTIONAL, callCreditCapability CallCreditCapability OPTIONAL, capacityReportingCapability CapacityReportingCapability OPTIONAL, capacity CallCapacity OPTIONAL, featureSet FeatureSet OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL, restart NULL OPTIONAL, supportsACFSequences NULL OPTIONAL, supportsAssignedGK BOOLEAN, assignedGatekeeper AlternateGK OPTIONAL, transportQOS TransportQOS OPTIONAL, language SEQUENCE OF IA5String(SIZE (1..32)) OPTIONAL } RegistrationConfirm ::= SEQUENCE --(RCF) { requestSeqNum RequestSeqNum, protocolIdentifier ProtocolIdentifier, nonStandardData NonStandardParameter OPTIONAL, callSignalAddress SEQUENCE OF TransportAddress, terminalAlias SEQUENCE OF AliasAddress OPTIONAL, gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, endpointIdentifier EndpointIdentifier, ..., alternateGatekeeper SEQUENCE OF AlternateGK OPTIONAL, timeToLive TimeToLive OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, willRespondToIRR BOOLEAN, preGrantedARQ SEQUENCE { makeCall BOOLEAN, useGKCallSignalAddressToMakeCall BOOLEAN, answerCall BOOLEAN, useGKCallSignalAddressToAnswer BOOLEAN, ..., irrFrequencyInCall INTEGER (1..65535) OPTIONAL, -- in seconds; not -- present if GK -- does not want IRRs totalBandwidthRestriction BandWidth OPTIONAL, -- total limit for all -- concurrent calls alternateTransportAddresses AlternateTransportAddresses OPTIONAL, useSpecifiedTransport UseSpecifiedTransport OPTIONAL } OPTIONAL, maintainConnection BOOLEAN, serviceControl SEQUENCE OF ServiceControlSession OPTIONAL, supportsAdditiveRegistration NULL OPTIONAL, terminalAliasPattern SEQUENCE OF AddressPattern OPTIONAL, supportedPrefixes SEQUENCE OF SupportedPrefix OPTIONAL, usageSpec SEQUENCE OF RasUsageSpecification OPTIONAL, featureServerAlias AliasAddress OPTIONAL, capacityReportingSpec CapacityReportingSpecification OPTIONAL, featureSet FeatureSet OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL, assignedGatekeeper AlternateGK OPTIONAL, rehomingModel RehomingModel OPTIONAL, transportQOS TransportQOS OPTIONAL } RegistrationReject ::= SEQUENCE --(RRJ) { requestSeqNum RequestSeqNum, protocolIdentifier ProtocolIdentifier, nonStandardData NonStandardParameter OPTIONAL, rejectReason RegistrationRejectReason, gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, ..., altGKInfo AltGKInfo OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, featureSet FeatureSet OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL, assignedGatekeeper AlternateGK OPTIONAL } RegistrationRejectReason ::= CHOICE { discoveryRequired NULL, invalidRevision NULL, invalidCallSignalAddress NULL, invalidRASAddress NULL, -- supplied address is invalid duplicateAlias SEQUENCE OF AliasAddress, -- alias registered to another endpoint invalidTerminalType NULL, undefinedReason NULL, transportNotSupported NULL, -- one or more of the transports ..., transportQOSNotSupported NULL, -- endpoint QOS not supported resourceUnavailable NULL, -- gatekeeper resources exhausted invalidAlias NULL, -- alias not consistent with gatekeeper rules securityDenial NULL, fullRegistrationRequired NULL, -- registration permission has expired additiveRegistrationNotSupported NULL, invalidTerminalAliases SEQUENCE { terminalAlias SEQUENCE OF AliasAddress OPTIONAL, terminalAliasPattern SEQUENCE OF AddressPattern OPTIONAL, supportedPrefixes SEQUENCE OF SupportedPrefix OPTIONAL, ... }, genericDataReason NULL, neededFeatureNotSupported NULL, securityError SecurityErrors, registerWithAssignedGK NULL } UnregistrationRequest ::= SEQUENCE --(URQ) { requestSeqNum RequestSeqNum, callSignalAddress SEQUENCE OF TransportAddress, endpointAlias SEQUENCE OF AliasAddress OPTIONAL, nonStandardData NonStandardParameter OPTIONAL, endpointIdentifier EndpointIdentifier OPTIONAL, ..., alternateEndpoints SEQUENCE OF Endpoint OPTIONAL, gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, reason UnregRequestReason OPTIONAL, endpointAliasPattern SEQUENCE OF AddressPattern OPTIONAL, supportedPrefixes SEQUENCE OF SupportedPrefix OPTIONAL, alternateGatekeeper SEQUENCE OF AlternateGK OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL, assignedGatekeeper AlternateGK OPTIONAL } UnregRequestReason ::= CHOICE { reregistrationRequired NULL, ttlExpired NULL, securityDenial NULL, undefinedReason NULL, ..., maintenance NULL, securityError SecurityErrors2, registerWithAssignedGK NULL } UnregistrationConfirm ::= SEQUENCE --(UCF) { requestSeqNum RequestSeqNum, nonStandardData NonStandardParameter OPTIONAL, ..., tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL, assignedGatekeeper AlternateGK OPTIONAL } UnregistrationReject ::= SEQUENCE --(URJ) { requestSeqNum RequestSeqNum, rejectReason UnregRejectReason, nonStandardData NonStandardParameter OPTIONAL, ..., altGKInfo AltGKInfo OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL } UnregRejectReason ::= CHOICE { notCurrentlyRegistered NULL, callInProgress NULL, undefinedReason NULL, ..., permissionDenied NULL, -- requesting user not allowed to unregister -- specified user securityDenial NULL, securityError SecurityErrors2 } AdmissionRequest ::= SEQUENCE --(ARQ) { requestSeqNum RequestSeqNum, callType CallType, callModel CallModel OPTIONAL, endpointIdentifier EndpointIdentifier, destinationInfo SEQUENCE OF AliasAddress OPTIONAL, destCallSignalAddress TransportAddress OPTIONAL, destExtraCallInfo SEQUENCE OF AliasAddress OPTIONAL, srcInfo SEQUENCE OF AliasAddress, srcCallSignalAddress TransportAddress OPTIONAL, bandWidth BandWidth, callReferenceValue CallReferenceValue, nonStandardData NonStandardParameter OPTIONAL, callServices QseriesOptions OPTIONAL, conferenceID ConferenceIdentifier, activeMC BOOLEAN, answerCall BOOLEAN, -- answering a call ..., canMapAlias BOOLEAN, -- can handle alias address callIdentifier CallIdentifier, srcAlternatives SEQUENCE OF Endpoint OPTIONAL, destAlternatives SEQUENCE OF Endpoint OPTIONAL, gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, transportQOS TransportQOS OPTIONAL, willSupplyUUIEs BOOLEAN, callLinkage CallLinkage OPTIONAL, gatewayDataRate DataRate OPTIONAL, capacity CallCapacity OPTIONAL, circuitInfo CircuitInfo OPTIONAL, desiredProtocols SEQUENCE OF SupportedProtocols OPTIONAL, desiredTunnelledProtocol TunnelledProtocol OPTIONAL, featureSet FeatureSet OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL, canMapSrcAlias BOOLEAN } CallType ::= CHOICE { pointToPoint NULL, -- Point-to-point oneToN NULL, -- no interaction (FFS) nToOne NULL, -- no interaction (FFS) nToN NULL, -- interactive (multipoint) ... } CallModel ::= CHOICE { direct NULL, gatekeeperRouted NULL, ... } TransportQOS ::= CHOICE { endpointControlled NULL, gatekeeperControlled NULL, noControl NULL, ..., qOSCapabilities SEQUENCE SIZE(1..256) OF QOSCapability } AdmissionConfirm ::= SEQUENCE --(ACF) { requestSeqNum RequestSeqNum, bandWidth BandWidth, callModel CallModel, destCallSignalAddress TransportAddress, irrFrequency INTEGER (1..65535) OPTIONAL, nonStandardData NonStandardParameter OPTIONAL, ..., destinationInfo SEQUENCE OF AliasAddress OPTIONAL, destExtraCallInfo SEQUENCE OF AliasAddress OPTIONAL, destinationType EndpointType OPTIONAL, remoteExtensionAddress SEQUENCE OF AliasAddress OPTIONAL, alternateEndpoints SEQUENCE OF Endpoint OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, transportQOS TransportQOS OPTIONAL, willRespondToIRR BOOLEAN, uuiesRequested UUIEsRequested, language SEQUENCE OF IA5String (SIZE (1..32)) OPTIONAL, alternateTransportAddresses AlternateTransportAddresses OPTIONAL, useSpecifiedTransport UseSpecifiedTransport OPTIONAL, circuitInfo CircuitInfo OPTIONAL, usageSpec SEQUENCE OF RasUsageSpecification OPTIONAL, supportedProtocols SEQUENCE OF SupportedProtocols OPTIONAL, serviceControl SEQUENCE OF ServiceControlSession OPTIONAL, multipleCalls BOOLEAN OPTIONAL, featureSet FeatureSet OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL, modifiedSrcInfo SEQUENCE OF AliasAddress OPTIONAL, assignedGatekeeper AlternateGK OPTIONAL } UUIEsRequested ::= SEQUENCE { setup BOOLEAN, callProceeding BOOLEAN, connect BOOLEAN, alerting BOOLEAN, information BOOLEAN, releaseComplete BOOLEAN, facility BOOLEAN, progress BOOLEAN, empty BOOLEAN, ..., status BOOLEAN, statusInquiry BOOLEAN, setupAcknowledge BOOLEAN, notify BOOLEAN } AdmissionReject ::= SEQUENCE --(ARJ) { requestSeqNum RequestSeqNum, rejectReason AdmissionRejectReason, nonStandardData NonStandardParameter OPTIONAL, ..., altGKInfo AltGKInfo OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, callSignalAddress SEQUENCE OF TransportAddress OPTIONAL, integrityCheckValue ICV OPTIONAL, serviceControl SEQUENCE OF ServiceControlSession OPTIONAL, featureSet FeatureSet OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL, assignedGatekeeper AlternateGK OPTIONAL } AdmissionRejectReason ::= CHOICE { calledPartyNotRegistered NULL, -- cannot translate address invalidPermission NULL, -- permission has expired requestDenied NULL, undefinedReason NULL, callerNotRegistered NULL, routeCallToGatekeeper NULL, invalidEndpointIdentifier NULL, resourceUnavailable NULL, ..., securityDenial NULL, qosControlNotSupported NULL, incompleteAddress NULL, aliasesInconsistent NULL, -- multiple aliases in request identify distinct people routeCallToSCN SEQUENCE OF PartyNumber, exceedsCallCapacity NULL, -- destination does not have the capacity for this call collectDestination NULL, collectPIN NULL, genericDataReason NULL, neededFeatureNotSupported NULL, securityErrors SecurityErrors2, securityDHmismatch NULL, -- mismatch of DH parameters noRouteToDestination NULL, -- destination unreachable unallocatedNumber NULL, -- destination number unassigned registerWithAssignedGK NULL } BandwidthRequest ::= SEQUENCE --(BRQ) { requestSeqNum RequestSeqNum, endpointIdentifier EndpointIdentifier, conferenceID ConferenceIdentifier, callReferenceValue CallReferenceValue, callType CallType OPTIONAL, bandWidth BandWidth, nonStandardData NonStandardParameter OPTIONAL, ..., callIdentifier CallIdentifier, gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, answeredCall BOOLEAN, callLinkage CallLinkage OPTIONAL, capacity CallCapacity OPTIONAL, usageInformation RasUsageInformation OPTIONAL, bandwidthDetails SEQUENCE OF BandwidthDetails OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL, transportQOS TransportQOS OPTIONAL } BandwidthConfirm ::= SEQUENCE --(BCF) { requestSeqNum RequestSeqNum, bandWidth BandWidth, nonStandardData NonStandardParameter OPTIONAL, ..., tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, capacity CallCapacity OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL, transportQOS TransportQOS OPTIONAL } BandwidthReject ::= SEQUENCE --(BRJ) { requestSeqNum RequestSeqNum, rejectReason BandRejectReason, allowedBandWidth BandWidth, nonStandardData NonStandardParameter OPTIONAL, ..., altGKInfo AltGKInfo OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL } BandRejectReason ::= CHOICE { notBound NULL, -- discovery permission has aged invalidConferenceID NULL, -- possible revision invalidPermission NULL, -- true permission violation insufficientResources NULL, invalidRevision NULL, undefinedReason NULL, ..., securityDenial NULL, securityError SecurityErrors2 } LocationRequest ::= SEQUENCE --(LRQ) { requestSeqNum RequestSeqNum, endpointIdentifier EndpointIdentifier OPTIONAL, destinationInfo SEQUENCE OF AliasAddress, nonStandardData NonStandardParameter OPTIONAL, replyAddress TransportAddress, ..., sourceInfo SEQUENCE OF AliasAddress OPTIONAL, canMapAlias BOOLEAN, -- can handle alias address gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, desiredProtocols SEQUENCE OF SupportedProtocols OPTIONAL, desiredTunnelledProtocol TunnelledProtocol OPTIONAL, featureSet FeatureSet OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL, hopCount INTEGER (1..255) OPTIONAL, circuitInfo CircuitInfo OPTIONAL, callIdentifier CallIdentifier OPTIONAL, bandWidth BandWidth OPTIONAL, sourceEndpointInfo SEQUENCE OF AliasAddress OPTIONAL, canMapSrcAlias BOOLEAN, language SEQUENCE OF IA5String(SIZE (1..32)) OPTIONAL } LocationConfirm ::= SEQUENCE --(LCF) { requestSeqNum RequestSeqNum, callSignalAddress TransportAddress, rasAddress TransportAddress, nonStandardData NonStandardParameter OPTIONAL, ..., destinationInfo SEQUENCE OF AliasAddress OPTIONAL, destExtraCallInfo SEQUENCE OF AliasAddress OPTIONAL, destinationType EndpointType OPTIONAL, remoteExtensionAddress SEQUENCE OF AliasAddress OPTIONAL, alternateEndpoints SEQUENCE OF Endpoint OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, alternateTransportAddresses AlternateTransportAddresses OPTIONAL, supportedProtocols SEQUENCE OF SupportedProtocols OPTIONAL, multipleCalls BOOLEAN OPTIONAL, featureSet FeatureSet OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL, circuitInfo CircuitInfo OPTIONAL, serviceControl SEQUENCE OF ServiceControlSession OPTIONAL, modifiedSrcInfo SEQUENCE OF AliasAddress OPTIONAL, bandWidth BandWidth OPTIONAL } LocationReject ::= SEQUENCE --(LRJ) { requestSeqNum RequestSeqNum, rejectReason LocationRejectReason, nonStandardData NonStandardParameter OPTIONAL, ..., altGKInfo AltGKInfo OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, featureSet FeatureSet OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL, serviceControl SEQUENCE OF ServiceControlSession OPTIONAL } LocationRejectReason ::= CHOICE { notRegistered NULL, invalidPermission NULL, -- exclusion by administrator or feature requestDenied NULL, undefinedReason NULL, ..., securityDenial NULL, aliasesInconsistent NULL, -- multiple aliases in request identify distinct people routeCalltoSCN SEQUENCE OF PartyNumber, resourceUnavailable NULL, genericDataReason NULL, neededFeatureNotSupported NULL, hopCountExceeded NULL, incompleteAddress NULL, securityError SecurityErrors2, securityDHmismatch NULL, -- mismatch of DH parameters noRouteToDestination NULL, -- destination unreachable unallocatedNumber NULL -- detination number unassigned } DisengageRequest ::= SEQUENCE --(DRQ) { requestSeqNum RequestSeqNum, endpointIdentifier EndpointIdentifier, conferenceID ConferenceIdentifier, callReferenceValue CallReferenceValue, disengageReason DisengageReason, nonStandardData NonStandardParameter OPTIONAL, ..., callIdentifier CallIdentifier, gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, answeredCall BOOLEAN, callLinkage CallLinkage OPTIONAL, capacity CallCapacity OPTIONAL, circuitInfo CircuitInfo OPTIONAL, usageInformation RasUsageInformation OPTIONAL, terminationCause CallTerminationCause OPTIONAL, serviceControl SEQUENCE OF ServiceControlSession OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL } DisengageReason ::= CHOICE { forcedDrop NULL, -- gatekeeper is forcing the drop normalDrop NULL, -- associated with normal drop undefinedReason NULL, ... } DisengageConfirm ::= SEQUENCE --(DCF) { requestSeqNum RequestSeqNum, nonStandardData NonStandardParameter OPTIONAL, ..., tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, capacity CallCapacity OPTIONAL, circuitInfo CircuitInfo OPTIONAL, usageInformation RasUsageInformation OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL, assignedGatekeeper AlternateGK OPTIONAL } DisengageReject ::= SEQUENCE --(DRJ) { requestSeqNum RequestSeqNum, rejectReason DisengageRejectReason, nonStandardData NonStandardParameter OPTIONAL, ..., altGKInfo AltGKInfo OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL } DisengageRejectReason ::= CHOICE { notRegistered NULL, -- not registered with gatekeeper requestToDropOther NULL, -- cannot request drop for others ..., securityDenial NULL, securityError SecurityErrors2 } InfoRequest ::= SEQUENCE --(IRQ) { requestSeqNum RequestSeqNum, callReferenceValue CallReferenceValue, nonStandardData NonStandardParameter OPTIONAL, replyAddress TransportAddress OPTIONAL, ..., callIdentifier CallIdentifier, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, uuiesRequested UUIEsRequested OPTIONAL, callLinkage CallLinkage OPTIONAL, usageInfoRequested RasUsageInfoTypes OPTIONAL, segmentedResponseSupported NULL OPTIONAL, nextSegmentRequested INTEGER (0..65535) OPTIONAL, capacityInfoRequested NULL OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL, assignedGatekeeper AlternateGK OPTIONAL } InfoRequestResponse ::= SEQUENCE --(IRR) { nonStandardData NonStandardParameter OPTIONAL, requestSeqNum RequestSeqNum, endpointType EndpointType, endpointIdentifier EndpointIdentifier, rasAddress TransportAddress, callSignalAddress SEQUENCE OF TransportAddress, endpointAlias SEQUENCE OF AliasAddress OPTIONAL, perCallInfo SEQUENCE OF SEQUENCE { nonStandardData NonStandardParameter OPTIONAL, callReferenceValue CallReferenceValue, conferenceID ConferenceIdentifier, originator BOOLEAN OPTIONAL, audio SEQUENCE OF RTPSession OPTIONAL, video SEQUENCE OF RTPSession OPTIONAL, data SEQUENCE OF TransportChannelInfo OPTIONAL, h245 TransportChannelInfo, callSignaling TransportChannelInfo, callType CallType, bandWidth BandWidth, callModel CallModel, ..., callIdentifier CallIdentifier, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, substituteConfIDs SEQUENCE OF ConferenceIdentifier, pdu SEQUENCE OF SEQUENCE { h323pdu H323-UU-PDU, sent BOOLEAN -- TRUE is sent, FALSE is received } OPTIONAL, callLinkage CallLinkage OPTIONAL, usageInformation RasUsageInformation OPTIONAL, circuitInfo CircuitInfo OPTIONAL } OPTIONAL, ..., tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, needResponse BOOLEAN, capacity CallCapacity OPTIONAL, irrStatus InfoRequestResponseStatus OPTIONAL, unsolicited BOOLEAN, genericData SEQUENCE OF GenericData OPTIONAL } InfoRequestResponseStatus ::= CHOICE { complete NULL, incomplete NULL, segment INTEGER (0..65535), invalidCall NULL, ... } InfoRequestAck ::= SEQUENCE --(IACK) { requestSeqNum RequestSeqNum, nonStandardData NonStandardParameter OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, ... } InfoRequestNak ::= SEQUENCE --(INAK) { requestSeqNum RequestSeqNum, nonStandardData NonStandardParameter OPTIONAL, nakReason InfoRequestNakReason, altGKInfo AltGKInfo OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, ... } InfoRequestNakReason ::= CHOICE { notRegistered NULL, -- not registered with gatekeeper securityDenial NULL, undefinedReason NULL, ..., securityError SecurityErrors2 } NonStandardMessage ::= SEQUENCE { requestSeqNum RequestSeqNum, nonStandardData NonStandardParameter, ..., tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, featureSet FeatureSet OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL } UnknownMessageResponse ::= SEQUENCE -- (XRS) { requestSeqNum RequestSeqNum, ..., tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, messageNotUnderstood OCTET STRING } RequestInProgress ::= SEQUENCE -- (RIP) { requestSeqNum RequestSeqNum, nonStandardData NonStandardParameter OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, delay INTEGER(1..65535), ... } ResourcesAvailableIndicate ::= SEQUENCE --(RAI) { requestSeqNum RequestSeqNum, protocolIdentifier ProtocolIdentifier, nonStandardData NonStandardParameter OPTIONAL, endpointIdentifier EndpointIdentifier, protocols SEQUENCE OF SupportedProtocols, almostOutOfResources BOOLEAN, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, ..., capacity CallCapacity OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL } ResourcesAvailableConfirm ::= SEQUENCE --(RAC) { requestSeqNum RequestSeqNum, protocolIdentifier ProtocolIdentifier, nonStandardData NonStandardParameter OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, ..., genericData SEQUENCE OF GenericData OPTIONAL } ServiceControlIndication ::= SEQUENCE --(SCI) { requestSeqNum RequestSeqNum, nonStandardData NonStandardParameter OPTIONAL, serviceControl SEQUENCE OF ServiceControlSession, endpointIdentifier EndpointIdentifier OPTIONAL, callSpecific SEQUENCE { callIdentifier CallIdentifier, conferenceID ConferenceIdentifier, answeredCall BOOLEAN, ... } OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, featureSet FeatureSet OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL, ... } ServiceControlResponse ::= SEQUENCE --(SCR) { requestSeqNum RequestSeqNum, result CHOICE { started NULL, failed NULL, stopped NULL, notAvailable NULL, neededFeatureNotSupported NULL, ... } OPTIONAL, nonStandardData NonStandardParameter OPTIONAL, tokens SEQUENCE OF ClearToken OPTIONAL, cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, integrityCheckValue ICV OPTIONAL, featureSet FeatureSet OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL, ... } END -- of ASN.1 h323plus/src/asn/h460pres.asn0000644000175000017500000001005411313546035014536 0ustar markmarkH460PRES {itu-t(0) recommendation(0) h(8) 460 x} DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS AliasAddress, TransportAddress, TimeToLive, GenericData, GenericIdentifier, GloballyUniqueID FROM MULTIMEDIA-SYSTEM-CONTROL; -- -- Presence Base Message -- PresenceElement ::= SEQUENCE { message SEQUENCE OF PresenceMessage, ... } -- -- Presence Message -- PresenceMessage ::= CHOICE { presenceStatus PresenceStatus, presenceInstruct PresenceInstruct, presenceAuthorize PresenceAuthorize, presenceNotify PresenceNotify, presenceRequest PresenceRequest, presenceResponse PresenceResponse, presenceAlive PresenceAlive, presenceRemove PresenceRemove, presenceAlert PresenceAlert, ... } PresenceStatus ::= SEQUENCE { alias SEQUENCE OF AliasAddress, notification SEQUENCE OF PresenceNotification, instruction SEQUENCE OF PresenceInstruction OPTIONAL, ... } PresenceInstruct ::= SEQUENCE { alias AliasAddress, instruction SEQUENCE OF PresenceInstruction, ... } PresenceAuthorize ::= SEQUENCE { alias AliasAddress, subscription SEQUENCE OF PresenceSubscription, ... } PresenceNotify ::= SEQUENCE { alias AliasAddress, notification SEQUENCE OF PresenceNotification, ... } PresenceRequest ::= SEQUENCE { subscription SEQUENCE OF PresenceSubscription, ... } PresenceResponse ::= SEQUENCE { subscription SEQUENCE OF PresenceSubscription, ... } PresenceAlive ::= SEQUENCE { identifier SEQUENCE OF PresenceIdentifier, ... } PresenceRemove ::= SEQUENCE { identifier SEQUENCE OF PresenceIdentifier, ... } PresenceAlert ::= SEQUENCE { notification SEQUENCE OF PresenceNotification, ... } -- -- Presence PDU -- PresencePDU ::= CHOICE { instruction PresenceInstruction, notification PresenceNotification, subscription PresenceSubscription, identifier PresenceIdentifier, ... } -- -- Presence Instruction -- PresenceInstruction ::= CHOICE { subscribe AliasAddress, unsubscribe AliasAddress, block AliasAddress, unblock AliasAddress, pending AliasAddress, ... } -- -- Presence Subscription -- PresenceSubscription ::= SEQUENCE { identifier PresenceIdentifier, subscribe AliasAddress, aliases SEQUENCE OF AliasAddress, approved BOOLEAN OPTIONAL, rasAddress TransportAddress OPTIONAL, timeToLive TimeToLive OPTIONAL, genericData SEQUENCE OF GenericData OPTIONAL, ... } -- -- Presence Identifier -- PresenceIdentifier ::= SEQUENCE { guid GloballyUniqueID, remove BOOLEAN OPTIONAL, ... } -- -- Presence Notification -- PresenceNotification ::= SEQUENCE { aliasAddress AliasAddress OPTIONAL, subscribers SEQUENCE OF PresenceIdentifier OPTIONAL, presentity Presentity, ... } -- -- Presentity -- PresenceDisplay ::= SEQUENCE { language IA5String OPTIONAL, -- RFC4646 language tag display BMPString(SIZE(1..128)) } PresenceState ::= CHOICE { hidden NULL, available NULL, online NULL, offline NULL, onCall NULL, voiceMail NULL, notAvailable NULL, away NULL, ..., generic SEQUENCE OF PresenceDisplay } PresenceFeatureGeneric ::= SEQUENCE { identifier GenericIdentifier, display IA5String OPTIONAL, ... } PresenceFeature ::= CHOICE { audio NULL, video NULL, data NULL, extVideo NULL, ..., generic PresenceFeatureGeneric } PresenceGeoLocation ::= SEQUENCE { locale IA5String OPTIONAL, region IA5String OPTIONAL, country IA5String OPTIONAL, countryCode IA5String OPTIONAL, latitude IA5String OPTIONAL, longitude IA5String OPTIONAL, elevation IA5String OPTIONAL, ... } Presentity ::= SEQUENCE { state PresenceState, -- Presence State supportedFeatures SEQUENCE OF PresenceFeature OPTIONAL, -- Features Supported by Endpoint geolocation PresenceGeoLocation OPTIONAL, -- Geographic Location display SEQUENCE OF PresenceDisplay OPTIONAL, -- Basic ISO/IEC 10646-1 (Unicode) genericData SEQUENCE OF GenericData OPTIONAL, -- Generic Presence Information ... } END h323plus/src/asn/h4508.asn0000644000175000017500000000253510655704731013747 0ustar markmarkName-Operations { itu-t recommendation h 450 8 version1(0) name-operations(0) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS Extension FROM H4501 -- Manufacturer-specific-service-extension-definition { itu-t recommendation h 450 1 version1 (0) msi-definition (18) } MixedExtension FROM H4505 -- Call-Hold-Operations { itu-t recommendation h 450 4 version1(0) call-hold-operations(0) }; NameOperations ::= ENUMERATED { callingName(0), alertingName(1), connectedName(2), busyName(3) } Name ::= CHOICE { namePresentationAllowed NamePresentationAllowed, namePresentationRestricted NamePresentationRestricted, nameNotAvailable NULL, ... } NamePresentationAllowed ::= CHOICE { simpleName SimpleName, extendedName ExtendedName, ... } NamePresentationRestricted ::= CHOICE { simpleName SimpleName, extendedName ExtendedName, restrictedNull NULL, -- only used in case of interworking where other network -- provides indication that the name is restricted without -- the name itself ... } SimpleName ::= OCTET STRING (SIZE (1..50)) ExtendedName ::= BMPString(SIZE (1..256)) --Basic ISO/IEC 10646-1 (Unicode) END -- of Name-Operations h323plus/src/asn/h4503.asn0000644000175000017500000000733210655704731013742 0ustar markmarkCall-Diversion-Operations { itu-t recommendation h 450 3 version1(0) call-diversion-operations(0) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS Extension FROM H4501 -- Manufacturer-specific-service-extension-definition { itu-t recommendation h 450 1 version1(0) msi-definition(18) } H225InformationElement FROM H225-generic-parameters-definition { itu-t recommendation h 450 1 version1(0) h225-generic-parameters(6) } NonStandardParameter FROM H225 -- H323-MESSAGES see H.225.0 EndpointAddress, PartySubaddress, PresentationAllowedIndicator FROM H4501 -- Addressing-Data-Elements { itu-t recommendation h 450 1 version1(0) addressing-data-elements (9) } userNotSubscribed, notAvailable, invalidServedUserNumber, basicServiceNotProvided, resourceUnavailable, supplementaryServiceInteractionNotAllowed FROM H4501-General-Error-List { itu-t recommendation h 450 1 version1(0) general-error-list (1) }; H323CallDiversionOperations ::= ENUMERATED { activateDiversionQ(15), deactivateDiversionQ(16), interrogateDiversionQ(17), checkRestriction(18), callRerouting(19), divertingLegInformation1(20), divertingLegInformation2(21), divertingLegInformation3(22), divertingLegInformation4(100), cfnrDivertedLegFailed(23) } -- Definitions of general used data types: DiversionReason ::= ENUMERATED { unknown(0), cfu(1), cfb(2), cfnr(3), ... } -- The value unknown is only used if received from another network when interworking. IntResultList ::= SET SIZE (0..29) OF IntResult IntResult ::= SEQUENCE { servedUserNr EndpointAddress, basicService BasicService, procedure Procedure, divertedToAddress EndpointAddress, remoteEnabled BOOLEAN DEFAULT FALSE, extension CHOICE { extensionSeq ExtensionSeq, nonStandardData NonStandardParameter } OPTIONAL, ... } Procedure ::= ENUMERATED { cfu(0), cfb(1), cfnr (2), ... } SubscriptionOption ::= ENUMERATED { noNotification(0), notificationWithoutDivertedToNr(1), notificationWithDivertedToNr(2), ... } CallDiversionErrors ::= ENUMERATED { invalidDivertedNumber(12), specialServiceNumber(14), diversionToServedUserNumber(15), numberOfDiversionsExceeded(24), temporarilyUnavailable(1000), notAuthorized(1007), unspecified(1008) } BasicService ::= ENUMERATED { allServices(0), -- speech (1), -- unrestricedDigitalInformation (2), -- audio3.1KHz (3), -- telephony (32), -- teletex (33), -- telefaxGroup4Class1 (34), -- videotexSyntaxBased (35), -- videotelephony (36), ... } DivertingLegInfo2Arg ::= SEQUENCE -- sent from the re-routing h.323-endpoint to the diverted-to h.323-endpoint { diversionCounter INTEGER (1..15), diversionReason DiversionReason, originalDiversionReason DiversionReason OPTIONAL, divertingNr EndpointAddress OPTIONAL, originalCalledNr EndpointAddress OPTIONAL, redirectingInfo BMPString (SIZE(1..128)) OPTIONAL, originalCalledInfo BMPString (SIZE(1..128)) OPTIONAL, extension CHOICE { extensionSeq ExtensionSeq, nonStandardData NonStandardParameter } OPTIONAL, ... } -- The divertingNr element is mandatory except in the case of interworking -- For multimedia calls the value "allServices" shall be used only. -- The usage of the other codepoints for multimedia calls is for further study. ExtensionSeq ::= SEQUENCE OF Extension END -- of Call-Diversion-Operations h323plus/src/asn/h45010.asn0000644000175000017500000000174610655704731014023 0ustar markmarkCall-Offer-Operations { itu-t recommendation h 450 10 version1(0) call-offer-operations(0) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS MixedExtension FROM H4504 -- Call-Hold-Operations { itu-t recommendation h 450 4 version1(0) call-hold-operations(0) } callWaiting FROM H4506 -- Call-Waiting-Operations { itu-t recommendation h 450 6 version1(0) call-waiting-operations(0) }; H323CallOfferOperations ::= ENUMERATED { callOfferRequest(34), -- callWaiting(105), Imported from H.450.6 remoteUserAlerting(115), cfbOverride(49) } CoReqOptArg ::= SEQUENCE { extension SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } RUAlertOptArg ::= SEQUENCE { extension SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } CfbOvrOptArg ::= SEQUENCE { extension SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL, ... } END -- of Call-Offer-Operations h323plus/src/asn/h46017a.asn0000644000175000017500000000053011561716521014157 0ustar markmarkMEDIA-TRAVERSAL {itu-t(0) recommendation(0) h(8) 460 17 1} DEFINITIONS AUTOMATIC TAGS ::= BEGIN FrameData ::= CHOICE { rtp OCTET STRING (SIZE(12..1456)), rtcp OCTET STRING (SIZE(1..1456)) } UDPFrame ::= SEQUENCE { sessionId INTEGER (0..255), dataFrame BOOLEAN, frame SEQUENCE OF FrameData } END h323plus/src/h501.cxx0000644000175000017500000055731311015524351013112 0ustar markmark// // h501.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "h501.h" #endif #include #include "h501.h" #define new PNEW #if ! H323_DISABLE_H501 #ifndef PASN_NOPRINTON const static PASN_Names Names_H501_MessageBody[]={ {"serviceRequest",0} ,{"serviceConfirmation",1} ,{"serviceRejection",2} ,{"serviceRelease",3} ,{"descriptorRequest",4} ,{"descriptorConfirmation",5} ,{"descriptorRejection",6} ,{"descriptorIDRequest",7} ,{"descriptorIDConfirmation",8} ,{"descriptorIDRejection",9} ,{"descriptorUpdate",10} ,{"descriptorUpdateAck",11} ,{"accessRequest",12} ,{"accessConfirmation",13} ,{"accessRejection",14} ,{"requestInProgress",15} ,{"nonStandardRequest",16} ,{"nonStandardConfirmation",17} ,{"nonStandardRejection",18} ,{"unknownMessageResponse",19} ,{"usageRequest",20} ,{"usageConfirmation",21} ,{"usageIndication",22} ,{"usageIndicationConfirmation",23} ,{"usageIndicationRejection",24} ,{"usageRejection",25} ,{"validationRequest",26} ,{"validationConfirmation",27} ,{"validationRejection",28} ,{"authenticationRequest",29} ,{"authenticationConfirmation",30} ,{"authenticationRejection",31} }; #endif // // MessageBody // H501_MessageBody::H501_MessageBody(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 29, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H501_MessageBody,32 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_ServiceRequest &() const #else H501_MessageBody::operator H501_ServiceRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_ServiceRequest), PInvalidCast); #endif return *(H501_ServiceRequest *)choice; } H501_MessageBody::operator const H501_ServiceRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_ServiceRequest), PInvalidCast); #endif return *(H501_ServiceRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_ServiceConfirmation &() const #else H501_MessageBody::operator H501_ServiceConfirmation &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_ServiceConfirmation), PInvalidCast); #endif return *(H501_ServiceConfirmation *)choice; } H501_MessageBody::operator const H501_ServiceConfirmation &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_ServiceConfirmation), PInvalidCast); #endif return *(H501_ServiceConfirmation *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_ServiceRejection &() const #else H501_MessageBody::operator H501_ServiceRejection &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_ServiceRejection), PInvalidCast); #endif return *(H501_ServiceRejection *)choice; } H501_MessageBody::operator const H501_ServiceRejection &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_ServiceRejection), PInvalidCast); #endif return *(H501_ServiceRejection *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_ServiceRelease &() const #else H501_MessageBody::operator H501_ServiceRelease &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_ServiceRelease), PInvalidCast); #endif return *(H501_ServiceRelease *)choice; } H501_MessageBody::operator const H501_ServiceRelease &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_ServiceRelease), PInvalidCast); #endif return *(H501_ServiceRelease *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_DescriptorRequest &() const #else H501_MessageBody::operator H501_DescriptorRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_DescriptorRequest), PInvalidCast); #endif return *(H501_DescriptorRequest *)choice; } H501_MessageBody::operator const H501_DescriptorRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_DescriptorRequest), PInvalidCast); #endif return *(H501_DescriptorRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_DescriptorConfirmation &() const #else H501_MessageBody::operator H501_DescriptorConfirmation &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_DescriptorConfirmation), PInvalidCast); #endif return *(H501_DescriptorConfirmation *)choice; } H501_MessageBody::operator const H501_DescriptorConfirmation &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_DescriptorConfirmation), PInvalidCast); #endif return *(H501_DescriptorConfirmation *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_DescriptorRejection &() const #else H501_MessageBody::operator H501_DescriptorRejection &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_DescriptorRejection), PInvalidCast); #endif return *(H501_DescriptorRejection *)choice; } H501_MessageBody::operator const H501_DescriptorRejection &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_DescriptorRejection), PInvalidCast); #endif return *(H501_DescriptorRejection *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_DescriptorIDRequest &() const #else H501_MessageBody::operator H501_DescriptorIDRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_DescriptorIDRequest), PInvalidCast); #endif return *(H501_DescriptorIDRequest *)choice; } H501_MessageBody::operator const H501_DescriptorIDRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_DescriptorIDRequest), PInvalidCast); #endif return *(H501_DescriptorIDRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_DescriptorIDConfirmation &() const #else H501_MessageBody::operator H501_DescriptorIDConfirmation &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_DescriptorIDConfirmation), PInvalidCast); #endif return *(H501_DescriptorIDConfirmation *)choice; } H501_MessageBody::operator const H501_DescriptorIDConfirmation &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_DescriptorIDConfirmation), PInvalidCast); #endif return *(H501_DescriptorIDConfirmation *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_DescriptorIDRejection &() const #else H501_MessageBody::operator H501_DescriptorIDRejection &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_DescriptorIDRejection), PInvalidCast); #endif return *(H501_DescriptorIDRejection *)choice; } H501_MessageBody::operator const H501_DescriptorIDRejection &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_DescriptorIDRejection), PInvalidCast); #endif return *(H501_DescriptorIDRejection *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_DescriptorUpdate &() const #else H501_MessageBody::operator H501_DescriptorUpdate &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_DescriptorUpdate), PInvalidCast); #endif return *(H501_DescriptorUpdate *)choice; } H501_MessageBody::operator const H501_DescriptorUpdate &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_DescriptorUpdate), PInvalidCast); #endif return *(H501_DescriptorUpdate *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_DescriptorUpdateAck &() const #else H501_MessageBody::operator H501_DescriptorUpdateAck &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_DescriptorUpdateAck), PInvalidCast); #endif return *(H501_DescriptorUpdateAck *)choice; } H501_MessageBody::operator const H501_DescriptorUpdateAck &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_DescriptorUpdateAck), PInvalidCast); #endif return *(H501_DescriptorUpdateAck *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_AccessRequest &() const #else H501_MessageBody::operator H501_AccessRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_AccessRequest), PInvalidCast); #endif return *(H501_AccessRequest *)choice; } H501_MessageBody::operator const H501_AccessRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_AccessRequest), PInvalidCast); #endif return *(H501_AccessRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_AccessConfirmation &() const #else H501_MessageBody::operator H501_AccessConfirmation &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_AccessConfirmation), PInvalidCast); #endif return *(H501_AccessConfirmation *)choice; } H501_MessageBody::operator const H501_AccessConfirmation &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_AccessConfirmation), PInvalidCast); #endif return *(H501_AccessConfirmation *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_AccessRejection &() const #else H501_MessageBody::operator H501_AccessRejection &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_AccessRejection), PInvalidCast); #endif return *(H501_AccessRejection *)choice; } H501_MessageBody::operator const H501_AccessRejection &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_AccessRejection), PInvalidCast); #endif return *(H501_AccessRejection *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_RequestInProgress &() const #else H501_MessageBody::operator H501_RequestInProgress &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_RequestInProgress), PInvalidCast); #endif return *(H501_RequestInProgress *)choice; } H501_MessageBody::operator const H501_RequestInProgress &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_RequestInProgress), PInvalidCast); #endif return *(H501_RequestInProgress *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_NonStandardRequest &() const #else H501_MessageBody::operator H501_NonStandardRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_NonStandardRequest), PInvalidCast); #endif return *(H501_NonStandardRequest *)choice; } H501_MessageBody::operator const H501_NonStandardRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_NonStandardRequest), PInvalidCast); #endif return *(H501_NonStandardRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_NonStandardConfirmation &() const #else H501_MessageBody::operator H501_NonStandardConfirmation &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_NonStandardConfirmation), PInvalidCast); #endif return *(H501_NonStandardConfirmation *)choice; } H501_MessageBody::operator const H501_NonStandardConfirmation &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_NonStandardConfirmation), PInvalidCast); #endif return *(H501_NonStandardConfirmation *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_NonStandardRejection &() const #else H501_MessageBody::operator H501_NonStandardRejection &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_NonStandardRejection), PInvalidCast); #endif return *(H501_NonStandardRejection *)choice; } H501_MessageBody::operator const H501_NonStandardRejection &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_NonStandardRejection), PInvalidCast); #endif return *(H501_NonStandardRejection *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_UnknownMessageResponse &() const #else H501_MessageBody::operator H501_UnknownMessageResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_UnknownMessageResponse), PInvalidCast); #endif return *(H501_UnknownMessageResponse *)choice; } H501_MessageBody::operator const H501_UnknownMessageResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_UnknownMessageResponse), PInvalidCast); #endif return *(H501_UnknownMessageResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_UsageRequest &() const #else H501_MessageBody::operator H501_UsageRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_UsageRequest), PInvalidCast); #endif return *(H501_UsageRequest *)choice; } H501_MessageBody::operator const H501_UsageRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_UsageRequest), PInvalidCast); #endif return *(H501_UsageRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_UsageConfirmation &() const #else H501_MessageBody::operator H501_UsageConfirmation &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_UsageConfirmation), PInvalidCast); #endif return *(H501_UsageConfirmation *)choice; } H501_MessageBody::operator const H501_UsageConfirmation &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_UsageConfirmation), PInvalidCast); #endif return *(H501_UsageConfirmation *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_UsageIndication &() const #else H501_MessageBody::operator H501_UsageIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_UsageIndication), PInvalidCast); #endif return *(H501_UsageIndication *)choice; } H501_MessageBody::operator const H501_UsageIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_UsageIndication), PInvalidCast); #endif return *(H501_UsageIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_UsageIndicationConfirmation &() const #else H501_MessageBody::operator H501_UsageIndicationConfirmation &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_UsageIndicationConfirmation), PInvalidCast); #endif return *(H501_UsageIndicationConfirmation *)choice; } H501_MessageBody::operator const H501_UsageIndicationConfirmation &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_UsageIndicationConfirmation), PInvalidCast); #endif return *(H501_UsageIndicationConfirmation *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_UsageIndicationRejection &() const #else H501_MessageBody::operator H501_UsageIndicationRejection &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_UsageIndicationRejection), PInvalidCast); #endif return *(H501_UsageIndicationRejection *)choice; } H501_MessageBody::operator const H501_UsageIndicationRejection &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_UsageIndicationRejection), PInvalidCast); #endif return *(H501_UsageIndicationRejection *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_UsageRejection &() const #else H501_MessageBody::operator H501_UsageRejection &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_UsageRejection), PInvalidCast); #endif return *(H501_UsageRejection *)choice; } H501_MessageBody::operator const H501_UsageRejection &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_UsageRejection), PInvalidCast); #endif return *(H501_UsageRejection *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_ValidationRequest &() const #else H501_MessageBody::operator H501_ValidationRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_ValidationRequest), PInvalidCast); #endif return *(H501_ValidationRequest *)choice; } H501_MessageBody::operator const H501_ValidationRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_ValidationRequest), PInvalidCast); #endif return *(H501_ValidationRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_ValidationConfirmation &() const #else H501_MessageBody::operator H501_ValidationConfirmation &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_ValidationConfirmation), PInvalidCast); #endif return *(H501_ValidationConfirmation *)choice; } H501_MessageBody::operator const H501_ValidationConfirmation &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_ValidationConfirmation), PInvalidCast); #endif return *(H501_ValidationConfirmation *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_ValidationRejection &() const #else H501_MessageBody::operator H501_ValidationRejection &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_ValidationRejection), PInvalidCast); #endif return *(H501_ValidationRejection *)choice; } H501_MessageBody::operator const H501_ValidationRejection &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_ValidationRejection), PInvalidCast); #endif return *(H501_ValidationRejection *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_AuthenticationRequest &() const #else H501_MessageBody::operator H501_AuthenticationRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_AuthenticationRequest), PInvalidCast); #endif return *(H501_AuthenticationRequest *)choice; } H501_MessageBody::operator const H501_AuthenticationRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_AuthenticationRequest), PInvalidCast); #endif return *(H501_AuthenticationRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_AuthenticationConfirmation &() const #else H501_MessageBody::operator H501_AuthenticationConfirmation &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_AuthenticationConfirmation), PInvalidCast); #endif return *(H501_AuthenticationConfirmation *)choice; } H501_MessageBody::operator const H501_AuthenticationConfirmation &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_AuthenticationConfirmation), PInvalidCast); #endif return *(H501_AuthenticationConfirmation *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_MessageBody::operator H501_AuthenticationRejection &() const #else H501_MessageBody::operator H501_AuthenticationRejection &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_AuthenticationRejection), PInvalidCast); #endif return *(H501_AuthenticationRejection *)choice; } H501_MessageBody::operator const H501_AuthenticationRejection &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_AuthenticationRejection), PInvalidCast); #endif return *(H501_AuthenticationRejection *)choice; } PBoolean H501_MessageBody::CreateObject() { switch (tag) { case e_serviceRequest : choice = new H501_ServiceRequest(); return TRUE; case e_serviceConfirmation : choice = new H501_ServiceConfirmation(); return TRUE; case e_serviceRejection : choice = new H501_ServiceRejection(); return TRUE; case e_serviceRelease : choice = new H501_ServiceRelease(); return TRUE; case e_descriptorRequest : choice = new H501_DescriptorRequest(); return TRUE; case e_descriptorConfirmation : choice = new H501_DescriptorConfirmation(); return TRUE; case e_descriptorRejection : choice = new H501_DescriptorRejection(); return TRUE; case e_descriptorIDRequest : choice = new H501_DescriptorIDRequest(); return TRUE; case e_descriptorIDConfirmation : choice = new H501_DescriptorIDConfirmation(); return TRUE; case e_descriptorIDRejection : choice = new H501_DescriptorIDRejection(); return TRUE; case e_descriptorUpdate : choice = new H501_DescriptorUpdate(); return TRUE; case e_descriptorUpdateAck : choice = new H501_DescriptorUpdateAck(); return TRUE; case e_accessRequest : choice = new H501_AccessRequest(); return TRUE; case e_accessConfirmation : choice = new H501_AccessConfirmation(); return TRUE; case e_accessRejection : choice = new H501_AccessRejection(); return TRUE; case e_requestInProgress : choice = new H501_RequestInProgress(); return TRUE; case e_nonStandardRequest : choice = new H501_NonStandardRequest(); return TRUE; case e_nonStandardConfirmation : choice = new H501_NonStandardConfirmation(); return TRUE; case e_nonStandardRejection : choice = new H501_NonStandardRejection(); return TRUE; case e_unknownMessageResponse : choice = new H501_UnknownMessageResponse(); return TRUE; case e_usageRequest : choice = new H501_UsageRequest(); return TRUE; case e_usageConfirmation : choice = new H501_UsageConfirmation(); return TRUE; case e_usageIndication : choice = new H501_UsageIndication(); return TRUE; case e_usageIndicationConfirmation : choice = new H501_UsageIndicationConfirmation(); return TRUE; case e_usageIndicationRejection : choice = new H501_UsageIndicationRejection(); return TRUE; case e_usageRejection : choice = new H501_UsageRejection(); return TRUE; case e_validationRequest : choice = new H501_ValidationRequest(); return TRUE; case e_validationConfirmation : choice = new H501_ValidationConfirmation(); return TRUE; case e_validationRejection : choice = new H501_ValidationRejection(); return TRUE; case e_authenticationRequest : choice = new H501_AuthenticationRequest(); return TRUE; case e_authenticationConfirmation : choice = new H501_AuthenticationConfirmation(); return TRUE; case e_authenticationRejection : choice = new H501_AuthenticationRejection(); return TRUE; } choice = NULL; return FALSE; } PObject * H501_MessageBody::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_MessageBody::Class()), PInvalidCast); #endif return new H501_MessageBody(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H501_ServiceRejectionReason[]={ {"serviceUnavailable",0} ,{"serviceRedirected",1} ,{"security",2} ,{"continue",3} ,{"undefined",4} ,{"unknownServiceID",5} ,{"cannotSupportUsageSpec",6} ,{"neededFeature",7} ,{"genericDataReason",8} ,{"usageUnavailable",9} ,{"unknownUsageSendTo",10} }; #endif // // ServiceRejectionReason // H501_ServiceRejectionReason::H501_ServiceRejectionReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 5, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H501_ServiceRejectionReason,11 #endif ) { } PBoolean H501_ServiceRejectionReason::CreateObject() { choice = (tag <= e_unknownUsageSendTo) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H501_ServiceRejectionReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ServiceRejectionReason::Class()), PInvalidCast); #endif return new H501_ServiceRejectionReason(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H501_ServiceReleaseReason[]={ {"outOfService",0} ,{"maintenance",1} ,{"terminated",2} ,{"expired",3} }; #endif // // ServiceReleaseReason // H501_ServiceReleaseReason::H501_ServiceReleaseReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H501_ServiceReleaseReason,4 #endif ) { } PBoolean H501_ServiceReleaseReason::CreateObject() { choice = (tag <= e_expired) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H501_ServiceReleaseReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ServiceReleaseReason::Class()), PInvalidCast); #endif return new H501_ServiceReleaseReason(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H501_DescriptorRejectionReason[]={ {"packetSizeExceeded",0} ,{"illegalID",1} ,{"security",2} ,{"hopCountExceeded",3} ,{"noServiceRelationship",4} ,{"undefined",5} ,{"neededFeature",6} ,{"genericDataReason",7} ,{"unknownServiceID",8} }; #endif // // DescriptorRejectionReason // H501_DescriptorRejectionReason::H501_DescriptorRejectionReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 6, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H501_DescriptorRejectionReason,9 #endif ) { } PBoolean H501_DescriptorRejectionReason::CreateObject() { choice = (tag <= e_unknownServiceID) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H501_DescriptorRejectionReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_DescriptorRejectionReason::Class()), PInvalidCast); #endif return new H501_DescriptorRejectionReason(*this); } // // DescriptorIDRequest // H501_DescriptorIDRequest::H501_DescriptorIDRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_DescriptorIDRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX H501_DescriptorIDRequest::GetDataLength() const { PINDEX length = 0; return length; } PBoolean H501_DescriptorIDRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_DescriptorIDRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * H501_DescriptorIDRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_DescriptorIDRequest::Class()), PInvalidCast); #endif return new H501_DescriptorIDRequest(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H501_DescriptorIDRejectionReason[]={ {"noDescriptors",0} ,{"security",1} ,{"hopCountExceeded",2} ,{"noServiceRelationship",3} ,{"undefined",4} ,{"neededFeature",5} ,{"genericDataReason",6} ,{"unknownServiceID",7} }; #endif // // DescriptorIDRejectionReason // H501_DescriptorIDRejectionReason::H501_DescriptorIDRejectionReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 5, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H501_DescriptorIDRejectionReason,8 #endif ) { } PBoolean H501_DescriptorIDRejectionReason::CreateObject() { choice = (tag <= e_unknownServiceID) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H501_DescriptorIDRejectionReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_DescriptorIDRejectionReason::Class()), PInvalidCast); #endif return new H501_DescriptorIDRejectionReason(*this); } // // DescriptorUpdateAck // H501_DescriptorUpdateAck::H501_DescriptorUpdateAck(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_DescriptorUpdateAck::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX H501_DescriptorUpdateAck::GetDataLength() const { PINDEX length = 0; return length; } PBoolean H501_DescriptorUpdateAck::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_DescriptorUpdateAck::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * H501_DescriptorUpdateAck::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_DescriptorUpdateAck::Class()), PInvalidCast); #endif return new H501_DescriptorUpdateAck(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H501_AccessRejectionReason[]={ {"noMatch",0} ,{"packetSizeExceeded",1} ,{"security",2} ,{"hopCountExceeded",3} ,{"needCallInformation",4} ,{"noServiceRelationship",5} ,{"undefined",6} ,{"neededFeature",7} ,{"genericDataReason",8} ,{"destinationUnavailable",9} ,{"aliasesInconsistent",10} ,{"resourceUnavailable",11} ,{"incompleteAddress",12} ,{"unknownServiceID",13} ,{"usageUnavailable",14} ,{"cannotSupportUsageSpec",15} ,{"unknownUsageSendTo",16} }; #endif // // AccessRejectionReason // H501_AccessRejectionReason::H501_AccessRejectionReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 7, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H501_AccessRejectionReason,17 #endif ) { } PBoolean H501_AccessRejectionReason::CreateObject() { choice = (tag <= e_unknownUsageSendTo) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H501_AccessRejectionReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_AccessRejectionReason::Class()), PInvalidCast); #endif return new H501_AccessRejectionReason(*this); } // // UsageConfirmation // H501_UsageConfirmation::H501_UsageConfirmation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_UsageConfirmation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX H501_UsageConfirmation::GetDataLength() const { PINDEX length = 0; return length; } PBoolean H501_UsageConfirmation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_UsageConfirmation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * H501_UsageConfirmation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_UsageConfirmation::Class()), PInvalidCast); #endif return new H501_UsageConfirmation(*this); } // // UsageField // H501_UsageField::H501_UsageField(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_UsageField::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+5) << "id = " << setprecision(indent) << m_id << '\n'; strm << setw(indent+8) << "value = " << setprecision(indent) << m_value << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_UsageField::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_UsageField), PInvalidCast); #endif const H501_UsageField & other = (const H501_UsageField &)obj; Comparison result; if ((result = m_id.Compare(other.m_id)) != EqualTo) return result; if ((result = m_value.Compare(other.m_value)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_UsageField::GetDataLength() const { PINDEX length = 0; length += m_id.GetObjectLength(); length += m_value.GetObjectLength(); return length; } PBoolean H501_UsageField::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_id.Decode(strm)) return FALSE; if (!m_value.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_UsageField::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_id.Encode(strm); m_value.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_UsageField::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_UsageField::Class()), PInvalidCast); #endif return new H501_UsageField(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H501_UsageRejectReason[]={ {"invalidCall",0} ,{"unavailable",1} ,{"security",2} ,{"noServiceRelationship",3} ,{"undefined",4} ,{"neededFeature",5} ,{"genericDataReason",6} ,{"unknownServiceID",7} }; #endif // // UsageRejectReason // H501_UsageRejectReason::H501_UsageRejectReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 5, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H501_UsageRejectReason,8 #endif ) { } PBoolean H501_UsageRejectReason::CreateObject() { choice = (tag <= e_unknownServiceID) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H501_UsageRejectReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_UsageRejectReason::Class()), PInvalidCast); #endif return new H501_UsageRejectReason(*this); } // // UsageIndicationConfirmation // H501_UsageIndicationConfirmation::H501_UsageIndicationConfirmation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_UsageIndicationConfirmation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX H501_UsageIndicationConfirmation::GetDataLength() const { PINDEX length = 0; return length; } PBoolean H501_UsageIndicationConfirmation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_UsageIndicationConfirmation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * H501_UsageIndicationConfirmation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_UsageIndicationConfirmation::Class()), PInvalidCast); #endif return new H501_UsageIndicationConfirmation(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H501_UsageIndicationRejectionReason[]={ {"unknownCall",0} ,{"incomplete",1} ,{"security",2} ,{"noServiceRelationship",3} ,{"undefined",4} ,{"neededFeature",5} ,{"genericDataReason",6} ,{"unknownServiceID",7} }; #endif // // UsageIndicationRejectionReason // H501_UsageIndicationRejectionReason::H501_UsageIndicationRejectionReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 5, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H501_UsageIndicationRejectionReason,8 #endif ) { } PBoolean H501_UsageIndicationRejectionReason::CreateObject() { choice = (tag <= e_unknownServiceID) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H501_UsageIndicationRejectionReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_UsageIndicationRejectionReason::Class()), PInvalidCast); #endif return new H501_UsageIndicationRejectionReason(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H501_ValidationRejectionReason[]={ {"tokenNotValid",0} ,{"security",1} ,{"hopCountExceeded",2} ,{"missingSourceInfo",3} ,{"missingDestInfo",4} ,{"noServiceRelationship",5} ,{"undefined",6} ,{"neededFeature",7} ,{"genericDataReason",8} ,{"unknownServiceID",9} }; #endif // // ValidationRejectionReason // H501_ValidationRejectionReason::H501_ValidationRejectionReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 7, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H501_ValidationRejectionReason,10 #endif ) { } PBoolean H501_ValidationRejectionReason::CreateObject() { choice = (tag <= e_unknownServiceID) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H501_ValidationRejectionReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ValidationRejectionReason::Class()), PInvalidCast); #endif return new H501_ValidationRejectionReason(*this); } // // NonStandardRequest // H501_NonStandardRequest::H501_NonStandardRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_NonStandardRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX H501_NonStandardRequest::GetDataLength() const { PINDEX length = 0; return length; } PBoolean H501_NonStandardRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_NonStandardRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * H501_NonStandardRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_NonStandardRequest::Class()), PInvalidCast); #endif return new H501_NonStandardRequest(*this); } // // NonStandardConfirmation // H501_NonStandardConfirmation::H501_NonStandardConfirmation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_NonStandardConfirmation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX H501_NonStandardConfirmation::GetDataLength() const { PINDEX length = 0; return length; } PBoolean H501_NonStandardConfirmation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_NonStandardConfirmation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * H501_NonStandardConfirmation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_NonStandardConfirmation::Class()), PInvalidCast); #endif return new H501_NonStandardConfirmation(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H501_NonStandardRejectionReason[]={ {"notSupported",0} ,{"noServiceRelationship",1} ,{"undefined",2} ,{"neededFeature",3} ,{"genericDataReason",4} ,{"unknownServiceID",5} }; #endif // // NonStandardRejectionReason // H501_NonStandardRejectionReason::H501_NonStandardRejectionReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H501_NonStandardRejectionReason,6 #endif ) { } PBoolean H501_NonStandardRejectionReason::CreateObject() { choice = (tag <= e_unknownServiceID) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H501_NonStandardRejectionReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_NonStandardRejectionReason::Class()), PInvalidCast); #endif return new H501_NonStandardRejectionReason(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H501_UnknownMessageReason[]={ {"notUnderstood",0} ,{"undefined",1} }; #endif // // UnknownMessageReason // H501_UnknownMessageReason::H501_UnknownMessageReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H501_UnknownMessageReason,2 #endif ) { } PBoolean H501_UnknownMessageReason::CreateObject() { choice = (tag <= e_undefined) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H501_UnknownMessageReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_UnknownMessageReason::Class()), PInvalidCast); #endif return new H501_UnknownMessageReason(*this); } // // ApplicationMessage // H501_ApplicationMessage::H501_ApplicationMessage(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { } H501_ApplicationMessage::H501_ApplicationMessage(const char * v) { SetValue(v); } H501_ApplicationMessage::H501_ApplicationMessage(const PString & v) { SetValue(v); } H501_ApplicationMessage::H501_ApplicationMessage(const PBYTEArray & v) { SetValue(v); } H501_ApplicationMessage & H501_ApplicationMessage::operator=(const char * v) { SetValue(v); return *this; } H501_ApplicationMessage & H501_ApplicationMessage::operator=(const PString & v) { SetValue(v); return *this; } H501_ApplicationMessage & H501_ApplicationMessage::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * H501_ApplicationMessage::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ApplicationMessage::Class()), PInvalidCast); #endif return new H501_ApplicationMessage(*this); } // // AuthenticationConfirmation // H501_AuthenticationConfirmation::H501_AuthenticationConfirmation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_AuthenticationConfirmation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX H501_AuthenticationConfirmation::GetDataLength() const { PINDEX length = 0; return length; } PBoolean H501_AuthenticationConfirmation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_AuthenticationConfirmation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * H501_AuthenticationConfirmation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_AuthenticationConfirmation::Class()), PInvalidCast); #endif return new H501_AuthenticationConfirmation(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H501_AuthenticationRejectionReason[]={ {"security",0} ,{"hopCountExceeded",1} ,{"noServiceRelationship",2} ,{"undefined",3} ,{"neededFeature",4} ,{"genericDataReason",5} ,{"unknownServiceID",6} ,{"securityWrongSyncTime",7} ,{"securityReplay",8} ,{"securityWrongGeneralID",9} ,{"securityWrongSendersID",10} ,{"securityIntegrityFailed",11} ,{"securityWrongOID",12} }; #endif // // AuthenticationRejectionReason // H501_AuthenticationRejectionReason::H501_AuthenticationRejectionReason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 13, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H501_AuthenticationRejectionReason,13 #endif ) { } PBoolean H501_AuthenticationRejectionReason::CreateObject() { choice = (tag <= e_securityWrongOID) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H501_AuthenticationRejectionReason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_AuthenticationRejectionReason::Class()), PInvalidCast); #endif return new H501_AuthenticationRejectionReason(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H501_Pattern[]={ {"specific",0} ,{"wildcard",1} ,{"range",2} }; #endif // // Pattern // H501_Pattern::H501_Pattern(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H501_Pattern,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_Pattern::operator H225_AliasAddress &() const #else H501_Pattern::operator H225_AliasAddress &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_AliasAddress), PInvalidCast); #endif return *(H225_AliasAddress *)choice; } H501_Pattern::operator const H225_AliasAddress &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_AliasAddress), PInvalidCast); #endif return *(H225_AliasAddress *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_Pattern::operator H501_Pattern_range &() const #else H501_Pattern::operator H501_Pattern_range &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_Pattern_range), PInvalidCast); #endif return *(H501_Pattern_range *)choice; } H501_Pattern::operator const H501_Pattern_range &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_Pattern_range), PInvalidCast); #endif return *(H501_Pattern_range *)choice; } PBoolean H501_Pattern::CreateObject() { switch (tag) { case e_specific : case e_wildcard : choice = new H225_AliasAddress(); return TRUE; case e_range : choice = new H501_Pattern_range(); return TRUE; } choice = NULL; return FALSE; } PObject * H501_Pattern::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_Pattern::Class()), PInvalidCast); #endif return new H501_Pattern(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H501_AccessToken[]={ {"token",0} ,{"cryptoToken",1} ,{"genericData",2} }; #endif // // AccessToken // H501_AccessToken::H501_AccessToken(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H501_AccessToken,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_AccessToken::operator H235_ClearToken &() const #else H501_AccessToken::operator H235_ClearToken &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_ClearToken), PInvalidCast); #endif return *(H235_ClearToken *)choice; } H501_AccessToken::operator const H235_ClearToken &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H235_ClearToken), PInvalidCast); #endif return *(H235_ClearToken *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_AccessToken::operator H225_CryptoH323Token &() const #else H501_AccessToken::operator H225_CryptoH323Token &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_CryptoH323Token), PInvalidCast); #endif return *(H225_CryptoH323Token *)choice; } H501_AccessToken::operator const H225_CryptoH323Token &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_CryptoH323Token), PInvalidCast); #endif return *(H225_CryptoH323Token *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_AccessToken::operator H225_GenericData &() const #else H501_AccessToken::operator H225_GenericData &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_GenericData), PInvalidCast); #endif return *(H225_GenericData *)choice; } H501_AccessToken::operator const H225_GenericData &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_GenericData), PInvalidCast); #endif return *(H225_GenericData *)choice; } PBoolean H501_AccessToken::CreateObject() { switch (tag) { case e_token : choice = new H235_ClearToken(); return TRUE; case e_cryptoToken : choice = new H225_CryptoH323Token(); return TRUE; case e_genericData : choice = new H225_GenericData(); return TRUE; } choice = NULL; return FALSE; } PObject * H501_AccessToken::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_AccessToken::Class()), PInvalidCast); #endif return new H501_AccessToken(*this); } // // CallInformation // H501_CallInformation::H501_CallInformation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 1) { } #ifndef PASN_NOPRINTON void H501_CallInformation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "callIdentifier = " << setprecision(indent) << m_callIdentifier << '\n'; strm << setw(indent+15) << "conferenceID = " << setprecision(indent) << m_conferenceID << '\n'; if (HasOptionalField(e_circuitID)) strm << setw(indent+12) << "circuitID = " << setprecision(indent) << m_circuitID << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_CallInformation::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_CallInformation), PInvalidCast); #endif const H501_CallInformation & other = (const H501_CallInformation &)obj; Comparison result; if ((result = m_callIdentifier.Compare(other.m_callIdentifier)) != EqualTo) return result; if ((result = m_conferenceID.Compare(other.m_conferenceID)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_CallInformation::GetDataLength() const { PINDEX length = 0; length += m_callIdentifier.GetObjectLength(); length += m_conferenceID.GetObjectLength(); return length; } PBoolean H501_CallInformation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_callIdentifier.Decode(strm)) return FALSE; if (!m_conferenceID.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_circuitID, m_circuitID)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_CallInformation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_callIdentifier.Encode(strm); m_conferenceID.Encode(strm); KnownExtensionEncode(strm, e_circuitID, m_circuitID); UnknownExtensionsEncode(strm); } PObject * H501_CallInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_CallInformation::Class()), PInvalidCast); #endif return new H501_CallInformation(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H501_UsageCallStatus[]={ {"preConnect",0} ,{"callInProgress",1} ,{"callEnded",2} ,{"registrationLost",3} }; #endif // // UsageCallStatus // H501_UsageCallStatus::H501_UsageCallStatus(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H501_UsageCallStatus,4 #endif ) { } PBoolean H501_UsageCallStatus::CreateObject() { choice = (tag <= e_registrationLost) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H501_UsageCallStatus::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_UsageCallStatus::Class()), PInvalidCast); #endif return new H501_UsageCallStatus(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H501_Role[]={ {"originator",0} ,{"destination",1} ,{"nonStandardData",2} }; #endif // // Role // H501_Role::H501_Role(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H501_Role,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_Role::operator H225_NonStandardParameter &() const #else H501_Role::operator H225_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } H501_Role::operator const H225_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_NonStandardParameter), PInvalidCast); #endif return *(H225_NonStandardParameter *)choice; } PBoolean H501_Role::CreateObject() { switch (tag) { case e_originator : case e_destination : choice = new PASN_Null(); return TRUE; case e_nonStandardData : choice = new H225_NonStandardParameter(); return TRUE; } choice = NULL; return FALSE; } PObject * H501_Role::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_Role::Class()), PInvalidCast); #endif return new H501_Role(*this); } // // TimeZone // H501_TimeZone::H501_TimeZone(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, -43200, 43200); } H501_TimeZone & H501_TimeZone::operator=(int v) { SetValue(v); return *this; } H501_TimeZone & H501_TimeZone::operator=(unsigned v) { SetValue(v); return *this; } PObject * H501_TimeZone::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_TimeZone::Class()), PInvalidCast); #endif return new H501_TimeZone(*this); } // // TerminationCause // H501_TerminationCause::H501_TerminationCause(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_causeIE.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } #ifndef PASN_NOPRINTON void H501_TerminationCause::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+24) << "releaseCompleteReason = " << setprecision(indent) << m_releaseCompleteReason << '\n'; if (HasOptionalField(e_causeIE)) strm << setw(indent+10) << "causeIE = " << setprecision(indent) << m_causeIE << '\n'; if (HasOptionalField(e_nonStandardData)) strm << setw(indent+18) << "nonStandardData = " << setprecision(indent) << m_nonStandardData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_TerminationCause::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_TerminationCause), PInvalidCast); #endif const H501_TerminationCause & other = (const H501_TerminationCause &)obj; Comparison result; if ((result = m_releaseCompleteReason.Compare(other.m_releaseCompleteReason)) != EqualTo) return result; if ((result = m_causeIE.Compare(other.m_causeIE)) != EqualTo) return result; if ((result = m_nonStandardData.Compare(other.m_nonStandardData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_TerminationCause::GetDataLength() const { PINDEX length = 0; length += m_releaseCompleteReason.GetObjectLength(); if (HasOptionalField(e_causeIE)) length += m_causeIE.GetObjectLength(); if (HasOptionalField(e_nonStandardData)) length += m_nonStandardData.GetObjectLength(); return length; } PBoolean H501_TerminationCause::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_releaseCompleteReason.Decode(strm)) return FALSE; if (HasOptionalField(e_causeIE) && !m_causeIE.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandardData) && !m_nonStandardData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_TerminationCause::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_releaseCompleteReason.Encode(strm); if (HasOptionalField(e_causeIE)) m_causeIE.Encode(strm); if (HasOptionalField(e_nonStandardData)) m_nonStandardData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_TerminationCause::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_TerminationCause::Class()), PInvalidCast); #endif return new H501_TerminationCause(*this); } // // ProtocolVersion // H501_ProtocolVersion::H501_ProtocolVersion(unsigned tag, PASN_Object::TagClass tagClass) : PASN_ObjectId(tag, tagClass) { } PObject * H501_ProtocolVersion::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ProtocolVersion::Class()), PInvalidCast); #endif return new H501_ProtocolVersion(*this); } // // ElementIdentifier // H501_ElementIdentifier::H501_ElementIdentifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_BMPString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 128); } H501_ElementIdentifier & H501_ElementIdentifier::operator=(const char * v) { SetValue(v); return *this; } H501_ElementIdentifier & H501_ElementIdentifier::operator=(const PString & v) { SetValue(v); return *this; } H501_ElementIdentifier & H501_ElementIdentifier::operator=(const PWCharArray & v) { SetValue(v); return *this; } H501_ElementIdentifier & H501_ElementIdentifier::operator=(const PASN_BMPString & v) { SetValue(v); return *this; } PObject * H501_ElementIdentifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ElementIdentifier::Class()), PInvalidCast); #endif return new H501_ElementIdentifier(*this); } // // GlobalTimeStamp // H501_GlobalTimeStamp::H501_GlobalTimeStamp(unsigned tag, PASN_Object::TagClass tagClass) : PASN_IA5String(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 14); } H501_GlobalTimeStamp & H501_GlobalTimeStamp::operator=(const char * v) { SetValue(v); return *this; } H501_GlobalTimeStamp & H501_GlobalTimeStamp::operator=(const PString & v) { SetValue(v); return *this; } PObject * H501_GlobalTimeStamp::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_GlobalTimeStamp::Class()), PInvalidCast); #endif return new H501_GlobalTimeStamp(*this); } // // ArrayOf_TransportAddress // H501_ArrayOf_TransportAddress::H501_ArrayOf_TransportAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_TransportAddress::CreateObject() const { return new H225_TransportAddress; } H225_TransportAddress & H501_ArrayOf_TransportAddress::operator[](PINDEX i) const { return (H225_TransportAddress &)array[i]; } PObject * H501_ArrayOf_TransportAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_TransportAddress::Class()), PInvalidCast); #endif return new H501_ArrayOf_TransportAddress(*this); } // // ArrayOf_ClearToken // H501_ArrayOf_ClearToken::H501_ArrayOf_ClearToken(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_ClearToken::CreateObject() const { return new H235_ClearToken; } H235_ClearToken & H501_ArrayOf_ClearToken::operator[](PINDEX i) const { return (H235_ClearToken &)array[i]; } PObject * H501_ArrayOf_ClearToken::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_ClearToken::Class()), PInvalidCast); #endif return new H501_ArrayOf_ClearToken(*this); } // // ArrayOf_CryptoH323Token // H501_ArrayOf_CryptoH323Token::H501_ArrayOf_CryptoH323Token(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_CryptoH323Token::CreateObject() const { return new H225_CryptoH323Token; } H225_CryptoH323Token & H501_ArrayOf_CryptoH323Token::operator[](PINDEX i) const { return (H225_CryptoH323Token &)array[i]; } PObject * H501_ArrayOf_CryptoH323Token::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_CryptoH323Token::Class()), PInvalidCast); #endif return new H501_ArrayOf_CryptoH323Token(*this); } // // ArrayOf_NonStandardParameter // H501_ArrayOf_NonStandardParameter::H501_ArrayOf_NonStandardParameter(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_NonStandardParameter::CreateObject() const { return new H225_NonStandardParameter; } H225_NonStandardParameter & H501_ArrayOf_NonStandardParameter::operator[](PINDEX i) const { return (H225_NonStandardParameter &)array[i]; } PObject * H501_ArrayOf_NonStandardParameter::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_NonStandardParameter::Class()), PInvalidCast); #endif return new H501_ArrayOf_NonStandardParameter(*this); } // // ArrayOf_GenericData // H501_ArrayOf_GenericData::H501_ArrayOf_GenericData(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_GenericData::CreateObject() const { return new H225_GenericData; } H225_GenericData & H501_ArrayOf_GenericData::operator[](PINDEX i) const { return (H225_GenericData &)array[i]; } PObject * H501_ArrayOf_GenericData::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_GenericData::Class()), PInvalidCast); #endif return new H501_ArrayOf_GenericData(*this); } // // ArrayOf_SecurityMode // H501_ArrayOf_SecurityMode::H501_ArrayOf_SecurityMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_SecurityMode::CreateObject() const { return new H501_SecurityMode; } H501_SecurityMode & H501_ArrayOf_SecurityMode::operator[](PINDEX i) const { return (H501_SecurityMode &)array[i]; } PObject * H501_ArrayOf_SecurityMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_SecurityMode::Class()), PInvalidCast); #endif return new H501_ArrayOf_SecurityMode(*this); } // // ArrayOf_PASN_ObjectId // H501_ArrayOf_PASN_ObjectId::H501_ArrayOf_PASN_ObjectId(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_PASN_ObjectId::CreateObject() const { return new PASN_ObjectId; } PASN_ObjectId & H501_ArrayOf_PASN_ObjectId::operator[](PINDEX i) const { return (PASN_ObjectId &)array[i]; } PObject * H501_ArrayOf_PASN_ObjectId::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_PASN_ObjectId::Class()), PInvalidCast); #endif return new H501_ArrayOf_PASN_ObjectId(*this); } // // ArrayOf_GloballyUniqueID // H501_ArrayOf_GloballyUniqueID::H501_ArrayOf_GloballyUniqueID(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_GloballyUniqueID::CreateObject() const { return new H225_GloballyUniqueID; } H225_GloballyUniqueID & H501_ArrayOf_GloballyUniqueID::operator[](PINDEX i) const { return (H225_GloballyUniqueID &)array[i]; } PObject * H501_ArrayOf_GloballyUniqueID::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_GloballyUniqueID::Class()), PInvalidCast); #endif return new H501_ArrayOf_GloballyUniqueID(*this); } // // ArrayOf_Descriptor // H501_ArrayOf_Descriptor::H501_ArrayOf_Descriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_Descriptor::CreateObject() const { return new H501_Descriptor; } H501_Descriptor & H501_ArrayOf_Descriptor::operator[](PINDEX i) const { return (H501_Descriptor &)array[i]; } PObject * H501_ArrayOf_Descriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_Descriptor::Class()), PInvalidCast); #endif return new H501_ArrayOf_Descriptor(*this); } // // ArrayOf_DescriptorInfo // H501_ArrayOf_DescriptorInfo::H501_ArrayOf_DescriptorInfo(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_DescriptorInfo::CreateObject() const { return new H501_DescriptorInfo; } H501_DescriptorInfo & H501_ArrayOf_DescriptorInfo::operator[](PINDEX i) const { return (H501_DescriptorInfo &)array[i]; } PObject * H501_ArrayOf_DescriptorInfo::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_DescriptorInfo::Class()), PInvalidCast); #endif return new H501_ArrayOf_DescriptorInfo(*this); } // // ArrayOf_UpdateInformation // H501_ArrayOf_UpdateInformation::H501_ArrayOf_UpdateInformation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_UpdateInformation::CreateObject() const { return new H501_UpdateInformation; } H501_UpdateInformation & H501_ArrayOf_UpdateInformation::operator[](PINDEX i) const { return (H501_UpdateInformation &)array[i]; } PObject * H501_ArrayOf_UpdateInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_UpdateInformation::Class()), PInvalidCast); #endif return new H501_ArrayOf_UpdateInformation(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H501_UpdateInformation_descriptorInfo[]={ {"descriptorID",0} ,{"descriptor",1} }; #endif // // UpdateInformation_descriptorInfo // H501_UpdateInformation_descriptorInfo::H501_UpdateInformation_descriptorInfo(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H501_UpdateInformation_descriptorInfo,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_UpdateInformation_descriptorInfo::operator H225_GloballyUniqueID &() const #else H501_UpdateInformation_descriptorInfo::operator H225_GloballyUniqueID &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_GloballyUniqueID), PInvalidCast); #endif return *(H225_GloballyUniqueID *)choice; } H501_UpdateInformation_descriptorInfo::operator const H225_GloballyUniqueID &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H225_GloballyUniqueID), PInvalidCast); #endif return *(H225_GloballyUniqueID *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 H501_UpdateInformation_descriptorInfo::operator H501_Descriptor &() const #else H501_UpdateInformation_descriptorInfo::operator H501_Descriptor &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_Descriptor), PInvalidCast); #endif return *(H501_Descriptor *)choice; } H501_UpdateInformation_descriptorInfo::operator const H501_Descriptor &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), H501_Descriptor), PInvalidCast); #endif return *(H501_Descriptor *)choice; } PBoolean H501_UpdateInformation_descriptorInfo::CreateObject() { switch (tag) { case e_descriptorID : choice = new H225_GloballyUniqueID(); return TRUE; case e_descriptor : choice = new H501_Descriptor(); return TRUE; } choice = NULL; return FALSE; } PObject * H501_UpdateInformation_descriptorInfo::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_UpdateInformation_descriptorInfo::Class()), PInvalidCast); #endif return new H501_UpdateInformation_descriptorInfo(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H501_UpdateInformation_updateType[]={ {"added",0} ,{"deleted",1} ,{"changed",2} }; #endif // // UpdateInformation_updateType // H501_UpdateInformation_updateType::H501_UpdateInformation_updateType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H501_UpdateInformation_updateType,3 #endif ) { } PBoolean H501_UpdateInformation_updateType::CreateObject() { choice = (tag <= e_changed) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H501_UpdateInformation_updateType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_UpdateInformation_updateType::Class()), PInvalidCast); #endif return new H501_UpdateInformation_updateType(*this); } // // ArrayOf_SupportedProtocols // H501_ArrayOf_SupportedProtocols::H501_ArrayOf_SupportedProtocols(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_SupportedProtocols::CreateObject() const { return new H225_SupportedProtocols; } H225_SupportedProtocols & H501_ArrayOf_SupportedProtocols::operator[](PINDEX i) const { return (H225_SupportedProtocols &)array[i]; } PObject * H501_ArrayOf_SupportedProtocols::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_SupportedProtocols::Class()), PInvalidCast); #endif return new H501_ArrayOf_SupportedProtocols(*this); } // // ArrayOf_AddressTemplate // H501_ArrayOf_AddressTemplate::H501_ArrayOf_AddressTemplate(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_AddressTemplate::CreateObject() const { return new H501_AddressTemplate; } H501_AddressTemplate & H501_ArrayOf_AddressTemplate::operator[](PINDEX i) const { return (H501_AddressTemplate &)array[i]; } PObject * H501_ArrayOf_AddressTemplate::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_AddressTemplate::Class()), PInvalidCast); #endif return new H501_ArrayOf_AddressTemplate(*this); } // // ArrayOf_ServiceControlSession // H501_ArrayOf_ServiceControlSession::H501_ArrayOf_ServiceControlSession(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_ServiceControlSession::CreateObject() const { return new H225_ServiceControlSession; } H225_ServiceControlSession & H501_ArrayOf_ServiceControlSession::operator[](PINDEX i) const { return (H225_ServiceControlSession &)array[i]; } PObject * H501_ArrayOf_ServiceControlSession::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_ServiceControlSession::Class()), PInvalidCast); #endif return new H501_ArrayOf_ServiceControlSession(*this); } // // ArrayOf_AccessToken // H501_ArrayOf_AccessToken::H501_ArrayOf_AccessToken(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_AccessToken::CreateObject() const { return new H501_AccessToken; } H501_AccessToken & H501_ArrayOf_AccessToken::operator[](PINDEX i) const { return (H501_AccessToken &)array[i]; } PObject * H501_ArrayOf_AccessToken::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_AccessToken::Class()), PInvalidCast); #endif return new H501_ArrayOf_AccessToken(*this); } // // ArrayOf_UsageField // H501_ArrayOf_UsageField::H501_ArrayOf_UsageField(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_UsageField::CreateObject() const { return new H501_UsageField; } H501_UsageField & H501_ArrayOf_UsageField::operator[](PINDEX i) const { return (H501_UsageField &)array[i]; } PObject * H501_ArrayOf_UsageField::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_UsageField::Class()), PInvalidCast); #endif return new H501_ArrayOf_UsageField(*this); } // // ArrayOf_Pattern // H501_ArrayOf_Pattern::H501_ArrayOf_Pattern(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_Pattern::CreateObject() const { return new H501_Pattern; } H501_Pattern & H501_ArrayOf_Pattern::operator[](PINDEX i) const { return (H501_Pattern &)array[i]; } PObject * H501_ArrayOf_Pattern::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_Pattern::Class()), PInvalidCast); #endif return new H501_ArrayOf_Pattern(*this); } // // ArrayOf_RouteInformation // H501_ArrayOf_RouteInformation::H501_ArrayOf_RouteInformation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_RouteInformation::CreateObject() const { return new H501_RouteInformation; } H501_RouteInformation & H501_ArrayOf_RouteInformation::operator[](PINDEX i) const { return (H501_RouteInformation &)array[i]; } PObject * H501_ArrayOf_RouteInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_RouteInformation::Class()), PInvalidCast); #endif return new H501_ArrayOf_RouteInformation(*this); } // // Pattern_range // H501_Pattern_range::H501_Pattern_range(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void H501_Pattern_range::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "startOfRange = " << setprecision(indent) << m_startOfRange << '\n'; strm << setw(indent+13) << "endOfRange = " << setprecision(indent) << m_endOfRange << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_Pattern_range::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_Pattern_range), PInvalidCast); #endif const H501_Pattern_range & other = (const H501_Pattern_range &)obj; Comparison result; if ((result = m_startOfRange.Compare(other.m_startOfRange)) != EqualTo) return result; if ((result = m_endOfRange.Compare(other.m_endOfRange)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_Pattern_range::GetDataLength() const { PINDEX length = 0; length += m_startOfRange.GetObjectLength(); length += m_endOfRange.GetObjectLength(); return length; } PBoolean H501_Pattern_range::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_startOfRange.Decode(strm)) return FALSE; if (!m_endOfRange.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_Pattern_range::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_startOfRange.Encode(strm); m_endOfRange.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_Pattern_range::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_Pattern_range::Class()), PInvalidCast); #endif return new H501_Pattern_range(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H501_RouteInformation_messageType[]={ {"sendAccessRequest",0} ,{"sendSetup",1} ,{"nonExistent",2} }; #endif // // RouteInformation_messageType // H501_RouteInformation_messageType::H501_RouteInformation_messageType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H501_RouteInformation_messageType,3 #endif ) { } PBoolean H501_RouteInformation_messageType::CreateObject() { choice = (tag <= e_nonExistent) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H501_RouteInformation_messageType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_RouteInformation_messageType::Class()), PInvalidCast); #endif return new H501_RouteInformation_messageType(*this); } // // ArrayOf_PriceInfoSpec // H501_ArrayOf_PriceInfoSpec::H501_ArrayOf_PriceInfoSpec(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_PriceInfoSpec::CreateObject() const { return new H501_PriceInfoSpec; } H501_PriceInfoSpec & H501_ArrayOf_PriceInfoSpec::operator[](PINDEX i) const { return (H501_PriceInfoSpec &)array[i]; } PObject * H501_ArrayOf_PriceInfoSpec::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_PriceInfoSpec::Class()), PInvalidCast); #endif return new H501_ArrayOf_PriceInfoSpec(*this); } // // ArrayOf_ContactInformation // H501_ArrayOf_ContactInformation::H501_ArrayOf_ContactInformation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_ContactInformation::CreateObject() const { return new H501_ContactInformation; } H501_ContactInformation & H501_ArrayOf_ContactInformation::operator[](PINDEX i) const { return (H501_ContactInformation &)array[i]; } PObject * H501_ArrayOf_ContactInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_ContactInformation::Class()), PInvalidCast); #endif return new H501_ArrayOf_ContactInformation(*this); } // // ArrayOf_CircuitIdentifier // H501_ArrayOf_CircuitIdentifier::H501_ArrayOf_CircuitIdentifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_CircuitIdentifier::CreateObject() const { return new H225_CircuitIdentifier; } H225_CircuitIdentifier & H501_ArrayOf_CircuitIdentifier::operator[](PINDEX i) const { return (H225_CircuitIdentifier &)array[i]; } PObject * H501_ArrayOf_CircuitIdentifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_CircuitIdentifier::Class()), PInvalidCast); #endif return new H501_ArrayOf_CircuitIdentifier(*this); } // // ArrayOf_PriceElement // H501_ArrayOf_PriceElement::H501_ArrayOf_PriceElement(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_PriceElement::CreateObject() const { return new H501_PriceElement; } H501_PriceElement & H501_ArrayOf_PriceElement::operator[](PINDEX i) const { return (H501_PriceElement &)array[i]; } PObject * H501_ArrayOf_PriceElement::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_PriceElement::Class()), PInvalidCast); #endif return new H501_ArrayOf_PriceElement(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_H501_PriceElement_units[]={ {"seconds",0} ,{"packets",1} ,{"bytes",2} ,{"initial",3} ,{"minimum",4} ,{"maximum",5} }; #endif // // PriceElement_units // H501_PriceElement_units::H501_PriceElement_units(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 6, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_H501_PriceElement_units,6 #endif ) { } PBoolean H501_PriceElement_units::CreateObject() { choice = (tag <= e_maximum) ? new PASN_Null() : NULL; return choice != NULL; } PObject * H501_PriceElement_units::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_PriceElement_units::Class()), PInvalidCast); #endif return new H501_PriceElement_units(*this); } // // ArrayOf_AlternatePE // H501_ArrayOf_AlternatePE::H501_ArrayOf_AlternatePE(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_AlternatePE::CreateObject() const { return new H501_AlternatePE; } H501_AlternatePE & H501_ArrayOf_AlternatePE::operator[](PINDEX i) const { return (H501_AlternatePE &)array[i]; } PObject * H501_ArrayOf_AlternatePE::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_AlternatePE::Class()), PInvalidCast); #endif return new H501_ArrayOf_AlternatePE(*this); } // // UsageSpecification_when // H501_UsageSpecification_when::H501_UsageSpecification_when(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 5, TRUE, 0) { m_period.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } #ifndef PASN_NOPRINTON void H501_UsageSpecification_when::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_never)) strm << setw(indent+8) << "never = " << setprecision(indent) << m_never << '\n'; if (HasOptionalField(e_start)) strm << setw(indent+8) << "start = " << setprecision(indent) << m_start << '\n'; if (HasOptionalField(e_end)) strm << setw(indent+6) << "end = " << setprecision(indent) << m_end << '\n'; if (HasOptionalField(e_period)) strm << setw(indent+9) << "period = " << setprecision(indent) << m_period << '\n'; if (HasOptionalField(e_failures)) strm << setw(indent+11) << "failures = " << setprecision(indent) << m_failures << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_UsageSpecification_when::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_UsageSpecification_when), PInvalidCast); #endif const H501_UsageSpecification_when & other = (const H501_UsageSpecification_when &)obj; Comparison result; if ((result = m_never.Compare(other.m_never)) != EqualTo) return result; if ((result = m_start.Compare(other.m_start)) != EqualTo) return result; if ((result = m_end.Compare(other.m_end)) != EqualTo) return result; if ((result = m_period.Compare(other.m_period)) != EqualTo) return result; if ((result = m_failures.Compare(other.m_failures)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_UsageSpecification_when::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_never)) length += m_never.GetObjectLength(); if (HasOptionalField(e_start)) length += m_start.GetObjectLength(); if (HasOptionalField(e_end)) length += m_end.GetObjectLength(); if (HasOptionalField(e_period)) length += m_period.GetObjectLength(); if (HasOptionalField(e_failures)) length += m_failures.GetObjectLength(); return length; } PBoolean H501_UsageSpecification_when::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_never) && !m_never.Decode(strm)) return FALSE; if (HasOptionalField(e_start) && !m_start.Decode(strm)) return FALSE; if (HasOptionalField(e_end) && !m_end.Decode(strm)) return FALSE; if (HasOptionalField(e_period) && !m_period.Decode(strm)) return FALSE; if (HasOptionalField(e_failures) && !m_failures.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_UsageSpecification_when::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_never)) m_never.Encode(strm); if (HasOptionalField(e_start)) m_start.Encode(strm); if (HasOptionalField(e_end)) m_end.Encode(strm); if (HasOptionalField(e_period)) m_period.Encode(strm); if (HasOptionalField(e_failures)) m_failures.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_UsageSpecification_when::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_UsageSpecification_when::Class()), PInvalidCast); #endif return new H501_UsageSpecification_when(*this); } // // ArrayOf_AliasAddress // H501_ArrayOf_AliasAddress::H501_ArrayOf_AliasAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * H501_ArrayOf_AliasAddress::CreateObject() const { return new H225_AliasAddress; } H225_AliasAddress & H501_ArrayOf_AliasAddress::operator[](PINDEX i) const { return (H225_AliasAddress &)array[i]; } PObject * H501_ArrayOf_AliasAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ArrayOf_AliasAddress::Class()), PInvalidCast); #endif return new H501_ArrayOf_AliasAddress(*this); } // // MessageCommonInfo // H501_MessageCommonInfo::H501_MessageCommonInfo(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 5, TRUE, 4) { m_sequenceNumber.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); m_hopCount.SetConstraints(PASN_Object::FixedConstraint, 1, 255); IncludeOptionalField(e_version); } #ifndef PASN_NOPRINTON void H501_MessageCommonInfo::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "sequenceNumber = " << setprecision(indent) << m_sequenceNumber << '\n'; strm << setw(indent+16) << "annexGversion = " << setprecision(indent) << m_annexGversion << '\n'; strm << setw(indent+11) << "hopCount = " << setprecision(indent) << m_hopCount << '\n'; if (HasOptionalField(e_replyAddress)) strm << setw(indent+15) << "replyAddress = " << setprecision(indent) << m_replyAddress << '\n'; if (HasOptionalField(e_integrityCheckValue)) strm << setw(indent+22) << "integrityCheckValue = " << setprecision(indent) << m_integrityCheckValue << '\n'; if (HasOptionalField(e_tokens)) strm << setw(indent+9) << "tokens = " << setprecision(indent) << m_tokens << '\n'; if (HasOptionalField(e_cryptoTokens)) strm << setw(indent+15) << "cryptoTokens = " << setprecision(indent) << m_cryptoTokens << '\n'; if (HasOptionalField(e_nonStandard)) strm << setw(indent+14) << "nonStandard = " << setprecision(indent) << m_nonStandard << '\n'; if (HasOptionalField(e_serviceID)) strm << setw(indent+12) << "serviceID = " << setprecision(indent) << m_serviceID << '\n'; if (HasOptionalField(e_genericData)) strm << setw(indent+14) << "genericData = " << setprecision(indent) << m_genericData << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; if (HasOptionalField(e_version)) strm << setw(indent+10) << "version = " << setprecision(indent) << m_version << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_MessageCommonInfo::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_MessageCommonInfo), PInvalidCast); #endif const H501_MessageCommonInfo & other = (const H501_MessageCommonInfo &)obj; Comparison result; if ((result = m_sequenceNumber.Compare(other.m_sequenceNumber)) != EqualTo) return result; if ((result = m_annexGversion.Compare(other.m_annexGversion)) != EqualTo) return result; if ((result = m_hopCount.Compare(other.m_hopCount)) != EqualTo) return result; if ((result = m_replyAddress.Compare(other.m_replyAddress)) != EqualTo) return result; if ((result = m_integrityCheckValue.Compare(other.m_integrityCheckValue)) != EqualTo) return result; if ((result = m_tokens.Compare(other.m_tokens)) != EqualTo) return result; if ((result = m_cryptoTokens.Compare(other.m_cryptoTokens)) != EqualTo) return result; if ((result = m_nonStandard.Compare(other.m_nonStandard)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_MessageCommonInfo::GetDataLength() const { PINDEX length = 0; length += m_sequenceNumber.GetObjectLength(); length += m_annexGversion.GetObjectLength(); length += m_hopCount.GetObjectLength(); if (HasOptionalField(e_replyAddress)) length += m_replyAddress.GetObjectLength(); if (HasOptionalField(e_integrityCheckValue)) length += m_integrityCheckValue.GetObjectLength(); if (HasOptionalField(e_tokens)) length += m_tokens.GetObjectLength(); if (HasOptionalField(e_cryptoTokens)) length += m_cryptoTokens.GetObjectLength(); if (HasOptionalField(e_nonStandard)) length += m_nonStandard.GetObjectLength(); return length; } PBoolean H501_MessageCommonInfo::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sequenceNumber.Decode(strm)) return FALSE; if (!m_annexGversion.Decode(strm)) return FALSE; if (!m_hopCount.Decode(strm)) return FALSE; if (HasOptionalField(e_replyAddress) && !m_replyAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_integrityCheckValue) && !m_integrityCheckValue.Decode(strm)) return FALSE; if (HasOptionalField(e_tokens) && !m_tokens.Decode(strm)) return FALSE; if (HasOptionalField(e_cryptoTokens) && !m_cryptoTokens.Decode(strm)) return FALSE; if (HasOptionalField(e_nonStandard) && !m_nonStandard.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_serviceID, m_serviceID)) return FALSE; if (!KnownExtensionDecode(strm, e_genericData, m_genericData)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; if (!KnownExtensionDecode(strm, e_version, m_version)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_MessageCommonInfo::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sequenceNumber.Encode(strm); m_annexGversion.Encode(strm); m_hopCount.Encode(strm); if (HasOptionalField(e_replyAddress)) m_replyAddress.Encode(strm); if (HasOptionalField(e_integrityCheckValue)) m_integrityCheckValue.Encode(strm); if (HasOptionalField(e_tokens)) m_tokens.Encode(strm); if (HasOptionalField(e_cryptoTokens)) m_cryptoTokens.Encode(strm); if (HasOptionalField(e_nonStandard)) m_nonStandard.Encode(strm); KnownExtensionEncode(strm, e_serviceID, m_serviceID); KnownExtensionEncode(strm, e_genericData, m_genericData); KnownExtensionEncode(strm, e_featureSet, m_featureSet); KnownExtensionEncode(strm, e_version, m_version); UnknownExtensionsEncode(strm); } PObject * H501_MessageCommonInfo::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_MessageCommonInfo::Class()), PInvalidCast); #endif return new H501_MessageCommonInfo(*this); } // // SecurityMode // H501_SecurityMode::H501_SecurityMode(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_SecurityMode::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_authentication)) strm << setw(indent+17) << "authentication = " << setprecision(indent) << m_authentication << '\n'; if (HasOptionalField(e_integrity)) strm << setw(indent+12) << "integrity = " << setprecision(indent) << m_integrity << '\n'; if (HasOptionalField(e_algorithmOIDs)) strm << setw(indent+16) << "algorithmOIDs = " << setprecision(indent) << m_algorithmOIDs << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_SecurityMode::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_SecurityMode), PInvalidCast); #endif const H501_SecurityMode & other = (const H501_SecurityMode &)obj; Comparison result; if ((result = m_authentication.Compare(other.m_authentication)) != EqualTo) return result; if ((result = m_integrity.Compare(other.m_integrity)) != EqualTo) return result; if ((result = m_algorithmOIDs.Compare(other.m_algorithmOIDs)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_SecurityMode::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_authentication)) length += m_authentication.GetObjectLength(); if (HasOptionalField(e_integrity)) length += m_integrity.GetObjectLength(); if (HasOptionalField(e_algorithmOIDs)) length += m_algorithmOIDs.GetObjectLength(); return length; } PBoolean H501_SecurityMode::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_authentication) && !m_authentication.Decode(strm)) return FALSE; if (HasOptionalField(e_integrity) && !m_integrity.Decode(strm)) return FALSE; if (HasOptionalField(e_algorithmOIDs) && !m_algorithmOIDs.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_SecurityMode::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_authentication)) m_authentication.Encode(strm); if (HasOptionalField(e_integrity)) m_integrity.Encode(strm); if (HasOptionalField(e_algorithmOIDs)) m_algorithmOIDs.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_SecurityMode::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_SecurityMode::Class()), PInvalidCast); #endif return new H501_SecurityMode(*this); } // // DescriptorRequest // H501_DescriptorRequest::H501_DescriptorRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_DescriptorRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "descriptorID = " << setprecision(indent) << m_descriptorID << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_DescriptorRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_DescriptorRequest), PInvalidCast); #endif const H501_DescriptorRequest & other = (const H501_DescriptorRequest &)obj; Comparison result; if ((result = m_descriptorID.Compare(other.m_descriptorID)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_DescriptorRequest::GetDataLength() const { PINDEX length = 0; length += m_descriptorID.GetObjectLength(); return length; } PBoolean H501_DescriptorRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_descriptorID.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_DescriptorRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_descriptorID.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_DescriptorRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_DescriptorRequest::Class()), PInvalidCast); #endif return new H501_DescriptorRequest(*this); } // // DescriptorConfirmation // H501_DescriptorConfirmation::H501_DescriptorConfirmation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_DescriptorConfirmation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "descriptor = " << setprecision(indent) << m_descriptor << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_DescriptorConfirmation::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_DescriptorConfirmation), PInvalidCast); #endif const H501_DescriptorConfirmation & other = (const H501_DescriptorConfirmation &)obj; Comparison result; if ((result = m_descriptor.Compare(other.m_descriptor)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_DescriptorConfirmation::GetDataLength() const { PINDEX length = 0; length += m_descriptor.GetObjectLength(); return length; } PBoolean H501_DescriptorConfirmation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_descriptor.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_DescriptorConfirmation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_descriptor.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_DescriptorConfirmation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_DescriptorConfirmation::Class()), PInvalidCast); #endif return new H501_DescriptorConfirmation(*this); } // // DescriptorRejection // H501_DescriptorRejection::H501_DescriptorRejection(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_DescriptorRejection::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; if (HasOptionalField(e_descriptorID)) strm << setw(indent+15) << "descriptorID = " << setprecision(indent) << m_descriptorID << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_DescriptorRejection::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_DescriptorRejection), PInvalidCast); #endif const H501_DescriptorRejection & other = (const H501_DescriptorRejection &)obj; Comparison result; if ((result = m_reason.Compare(other.m_reason)) != EqualTo) return result; if ((result = m_descriptorID.Compare(other.m_descriptorID)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_DescriptorRejection::GetDataLength() const { PINDEX length = 0; length += m_reason.GetObjectLength(); if (HasOptionalField(e_descriptorID)) length += m_descriptorID.GetObjectLength(); return length; } PBoolean H501_DescriptorRejection::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_reason.Decode(strm)) return FALSE; if (HasOptionalField(e_descriptorID) && !m_descriptorID.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_DescriptorRejection::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_reason.Encode(strm); if (HasOptionalField(e_descriptorID)) m_descriptorID.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_DescriptorRejection::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_DescriptorRejection::Class()), PInvalidCast); #endif return new H501_DescriptorRejection(*this); } // // DescriptorIDConfirmation // H501_DescriptorIDConfirmation::H501_DescriptorIDConfirmation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_DescriptorIDConfirmation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "descriptorInfo = " << setprecision(indent) << m_descriptorInfo << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_DescriptorIDConfirmation::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_DescriptorIDConfirmation), PInvalidCast); #endif const H501_DescriptorIDConfirmation & other = (const H501_DescriptorIDConfirmation &)obj; Comparison result; if ((result = m_descriptorInfo.Compare(other.m_descriptorInfo)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_DescriptorIDConfirmation::GetDataLength() const { PINDEX length = 0; length += m_descriptorInfo.GetObjectLength(); return length; } PBoolean H501_DescriptorIDConfirmation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_descriptorInfo.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_DescriptorIDConfirmation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_descriptorInfo.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_DescriptorIDConfirmation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_DescriptorIDConfirmation::Class()), PInvalidCast); #endif return new H501_DescriptorIDConfirmation(*this); } // // DescriptorIDRejection // H501_DescriptorIDRejection::H501_DescriptorIDRejection(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_DescriptorIDRejection::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_DescriptorIDRejection::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_DescriptorIDRejection), PInvalidCast); #endif const H501_DescriptorIDRejection & other = (const H501_DescriptorIDRejection &)obj; Comparison result; if ((result = m_reason.Compare(other.m_reason)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_DescriptorIDRejection::GetDataLength() const { PINDEX length = 0; length += m_reason.GetObjectLength(); return length; } PBoolean H501_DescriptorIDRejection::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_reason.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_DescriptorIDRejection::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_reason.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_DescriptorIDRejection::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_DescriptorIDRejection::Class()), PInvalidCast); #endif return new H501_DescriptorIDRejection(*this); } // // DescriptorUpdate // H501_DescriptorUpdate::H501_DescriptorUpdate(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_DescriptorUpdate::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "sender = " << setprecision(indent) << m_sender << '\n'; strm << setw(indent+13) << "updateInfo = " << setprecision(indent) << m_updateInfo << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_DescriptorUpdate::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_DescriptorUpdate), PInvalidCast); #endif const H501_DescriptorUpdate & other = (const H501_DescriptorUpdate &)obj; Comparison result; if ((result = m_sender.Compare(other.m_sender)) != EqualTo) return result; if ((result = m_updateInfo.Compare(other.m_updateInfo)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_DescriptorUpdate::GetDataLength() const { PINDEX length = 0; length += m_sender.GetObjectLength(); length += m_updateInfo.GetObjectLength(); return length; } PBoolean H501_DescriptorUpdate::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sender.Decode(strm)) return FALSE; if (!m_updateInfo.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_DescriptorUpdate::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sender.Encode(strm); m_updateInfo.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_DescriptorUpdate::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_DescriptorUpdate::Class()), PInvalidCast); #endif return new H501_DescriptorUpdate(*this); } // // UpdateInformation // H501_UpdateInformation::H501_UpdateInformation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_UpdateInformation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "descriptorInfo = " << setprecision(indent) << m_descriptorInfo << '\n'; strm << setw(indent+13) << "updateType = " << setprecision(indent) << m_updateType << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_UpdateInformation::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_UpdateInformation), PInvalidCast); #endif const H501_UpdateInformation & other = (const H501_UpdateInformation &)obj; Comparison result; if ((result = m_descriptorInfo.Compare(other.m_descriptorInfo)) != EqualTo) return result; if ((result = m_updateType.Compare(other.m_updateType)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_UpdateInformation::GetDataLength() const { PINDEX length = 0; length += m_descriptorInfo.GetObjectLength(); length += m_updateType.GetObjectLength(); return length; } PBoolean H501_UpdateInformation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_descriptorInfo.Decode(strm)) return FALSE; if (!m_updateType.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_UpdateInformation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_descriptorInfo.Encode(strm); m_updateType.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_UpdateInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_UpdateInformation::Class()), PInvalidCast); #endif return new H501_UpdateInformation(*this); } // // AccessConfirmation // H501_AccessConfirmation::H501_AccessConfirmation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 2) { } #ifndef PASN_NOPRINTON void H501_AccessConfirmation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "templates = " << setprecision(indent) << m_templates << '\n'; strm << setw(indent+18) << "partialResponse = " << setprecision(indent) << m_partialResponse << '\n'; if (HasOptionalField(e_supportedProtocols)) strm << setw(indent+21) << "supportedProtocols = " << setprecision(indent) << m_supportedProtocols << '\n'; if (HasOptionalField(e_serviceControl)) strm << setw(indent+17) << "serviceControl = " << setprecision(indent) << m_serviceControl << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_AccessConfirmation::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_AccessConfirmation), PInvalidCast); #endif const H501_AccessConfirmation & other = (const H501_AccessConfirmation &)obj; Comparison result; if ((result = m_templates.Compare(other.m_templates)) != EqualTo) return result; if ((result = m_partialResponse.Compare(other.m_partialResponse)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_AccessConfirmation::GetDataLength() const { PINDEX length = 0; length += m_templates.GetObjectLength(); length += m_partialResponse.GetObjectLength(); return length; } PBoolean H501_AccessConfirmation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_templates.Decode(strm)) return FALSE; if (!m_partialResponse.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_supportedProtocols, m_supportedProtocols)) return FALSE; if (!KnownExtensionDecode(strm, e_serviceControl, m_serviceControl)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_AccessConfirmation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_templates.Encode(strm); m_partialResponse.Encode(strm); KnownExtensionEncode(strm, e_supportedProtocols, m_supportedProtocols); KnownExtensionEncode(strm, e_serviceControl, m_serviceControl); UnknownExtensionsEncode(strm); } PObject * H501_AccessConfirmation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_AccessConfirmation::Class()), PInvalidCast); #endif return new H501_AccessConfirmation(*this); } // // AccessRejection // H501_AccessRejection::H501_AccessRejection(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 1) { } #ifndef PASN_NOPRINTON void H501_AccessRejection::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; if (HasOptionalField(e_serviceControl)) strm << setw(indent+17) << "serviceControl = " << setprecision(indent) << m_serviceControl << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_AccessRejection::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_AccessRejection), PInvalidCast); #endif const H501_AccessRejection & other = (const H501_AccessRejection &)obj; Comparison result; if ((result = m_reason.Compare(other.m_reason)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_AccessRejection::GetDataLength() const { PINDEX length = 0; length += m_reason.GetObjectLength(); return length; } PBoolean H501_AccessRejection::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_reason.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_serviceControl, m_serviceControl)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_AccessRejection::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_reason.Encode(strm); KnownExtensionEncode(strm, e_serviceControl, m_serviceControl); UnknownExtensionsEncode(strm); } PObject * H501_AccessRejection::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_AccessRejection::Class()), PInvalidCast); #endif return new H501_AccessRejection(*this); } // // UsageRejection // H501_UsageRejection::H501_UsageRejection(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_UsageRejection::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_UsageRejection::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_UsageRejection), PInvalidCast); #endif const H501_UsageRejection & other = (const H501_UsageRejection &)obj; Comparison result; if ((result = m_reason.Compare(other.m_reason)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_UsageRejection::GetDataLength() const { PINDEX length = 0; length += m_reason.GetObjectLength(); return length; } PBoolean H501_UsageRejection::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_reason.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_UsageRejection::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_reason.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_UsageRejection::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_UsageRejection::Class()), PInvalidCast); #endif return new H501_UsageRejection(*this); } // // UsageIndicationRejection // H501_UsageIndicationRejection::H501_UsageIndicationRejection(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_UsageIndicationRejection::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_UsageIndicationRejection::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_UsageIndicationRejection), PInvalidCast); #endif const H501_UsageIndicationRejection & other = (const H501_UsageIndicationRejection &)obj; Comparison result; if ((result = m_reason.Compare(other.m_reason)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_UsageIndicationRejection::GetDataLength() const { PINDEX length = 0; length += m_reason.GetObjectLength(); return length; } PBoolean H501_UsageIndicationRejection::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_reason.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_UsageIndicationRejection::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_reason.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_UsageIndicationRejection::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_UsageIndicationRejection::Class()), PInvalidCast); #endif return new H501_UsageIndicationRejection(*this); } // // ValidationRejection // H501_ValidationRejection::H501_ValidationRejection(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_ValidationRejection::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_ValidationRejection::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_ValidationRejection), PInvalidCast); #endif const H501_ValidationRejection & other = (const H501_ValidationRejection &)obj; Comparison result; if ((result = m_reason.Compare(other.m_reason)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_ValidationRejection::GetDataLength() const { PINDEX length = 0; length += m_reason.GetObjectLength(); return length; } PBoolean H501_ValidationRejection::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_reason.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_ValidationRejection::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_reason.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_ValidationRejection::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ValidationRejection::Class()), PInvalidCast); #endif return new H501_ValidationRejection(*this); } // // RequestInProgress // H501_RequestInProgress::H501_RequestInProgress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 1) { m_delay.SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } #ifndef PASN_NOPRINTON void H501_RequestInProgress::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+8) << "delay = " << setprecision(indent) << m_delay << '\n'; if (HasOptionalField(e_serviceControl)) strm << setw(indent+17) << "serviceControl = " << setprecision(indent) << m_serviceControl << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_RequestInProgress::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_RequestInProgress), PInvalidCast); #endif const H501_RequestInProgress & other = (const H501_RequestInProgress &)obj; Comparison result; if ((result = m_delay.Compare(other.m_delay)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_RequestInProgress::GetDataLength() const { PINDEX length = 0; length += m_delay.GetObjectLength(); return length; } PBoolean H501_RequestInProgress::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_delay.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_serviceControl, m_serviceControl)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_RequestInProgress::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_delay.Encode(strm); KnownExtensionEncode(strm, e_serviceControl, m_serviceControl); UnknownExtensionsEncode(strm); } PObject * H501_RequestInProgress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_RequestInProgress::Class()), PInvalidCast); #endif return new H501_RequestInProgress(*this); } // // NonStandardRejection // H501_NonStandardRejection::H501_NonStandardRejection(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_NonStandardRejection::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_NonStandardRejection::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_NonStandardRejection), PInvalidCast); #endif const H501_NonStandardRejection & other = (const H501_NonStandardRejection &)obj; Comparison result; if ((result = m_reason.Compare(other.m_reason)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_NonStandardRejection::GetDataLength() const { PINDEX length = 0; length += m_reason.GetObjectLength(); return length; } PBoolean H501_NonStandardRejection::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_reason.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_NonStandardRejection::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_reason.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_NonStandardRejection::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_NonStandardRejection::Class()), PInvalidCast); #endif return new H501_NonStandardRejection(*this); } // // UnknownMessageResponse // H501_UnknownMessageResponse::H501_UnknownMessageResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_UnknownMessageResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "unknownMessage = " << setprecision(indent) << m_unknownMessage << '\n'; strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_UnknownMessageResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_UnknownMessageResponse), PInvalidCast); #endif const H501_UnknownMessageResponse & other = (const H501_UnknownMessageResponse &)obj; Comparison result; if ((result = m_unknownMessage.Compare(other.m_unknownMessage)) != EqualTo) return result; if ((result = m_reason.Compare(other.m_reason)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_UnknownMessageResponse::GetDataLength() const { PINDEX length = 0; length += m_unknownMessage.GetObjectLength(); length += m_reason.GetObjectLength(); return length; } PBoolean H501_UnknownMessageResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_unknownMessage.Decode(strm)) return FALSE; if (!m_reason.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_UnknownMessageResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_unknownMessage.Encode(strm); m_reason.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_UnknownMessageResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_UnknownMessageResponse::Class()), PInvalidCast); #endif return new H501_UnknownMessageResponse(*this); } // // AuthenticationRequest // H501_AuthenticationRequest::H501_AuthenticationRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_AuthenticationRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+21) << "applicationMessage = " << setprecision(indent) << m_applicationMessage << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_AuthenticationRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_AuthenticationRequest), PInvalidCast); #endif const H501_AuthenticationRequest & other = (const H501_AuthenticationRequest &)obj; Comparison result; if ((result = m_applicationMessage.Compare(other.m_applicationMessage)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_AuthenticationRequest::GetDataLength() const { PINDEX length = 0; length += m_applicationMessage.GetObjectLength(); return length; } PBoolean H501_AuthenticationRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_applicationMessage.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_AuthenticationRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_applicationMessage.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_AuthenticationRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_AuthenticationRequest::Class()), PInvalidCast); #endif return new H501_AuthenticationRequest(*this); } // // AuthenticationRejection // H501_AuthenticationRejection::H501_AuthenticationRejection(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_AuthenticationRejection::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_AuthenticationRejection::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_AuthenticationRejection), PInvalidCast); #endif const H501_AuthenticationRejection & other = (const H501_AuthenticationRejection &)obj; Comparison result; if ((result = m_reason.Compare(other.m_reason)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_AuthenticationRejection::GetDataLength() const { PINDEX length = 0; length += m_reason.GetObjectLength(); return length; } PBoolean H501_AuthenticationRejection::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_reason.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_AuthenticationRejection::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_reason.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_AuthenticationRejection::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_AuthenticationRejection::Class()), PInvalidCast); #endif return new H501_AuthenticationRejection(*this); } // // AddressTemplate // H501_AddressTemplate::H501_AddressTemplate(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 2) { m_timeToLive.SetConstraints(PASN_Object::FixedConstraint, 1, 4294967295U); } #ifndef PASN_NOPRINTON void H501_AddressTemplate::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "pattern = " << setprecision(indent) << m_pattern << '\n'; strm << setw(indent+12) << "routeInfo = " << setprecision(indent) << m_routeInfo << '\n'; strm << setw(indent+13) << "timeToLive = " << setprecision(indent) << m_timeToLive << '\n'; if (HasOptionalField(e_supportedProtocols)) strm << setw(indent+21) << "supportedProtocols = " << setprecision(indent) << m_supportedProtocols << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_AddressTemplate::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_AddressTemplate), PInvalidCast); #endif const H501_AddressTemplate & other = (const H501_AddressTemplate &)obj; Comparison result; if ((result = m_pattern.Compare(other.m_pattern)) != EqualTo) return result; if ((result = m_routeInfo.Compare(other.m_routeInfo)) != EqualTo) return result; if ((result = m_timeToLive.Compare(other.m_timeToLive)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_AddressTemplate::GetDataLength() const { PINDEX length = 0; length += m_pattern.GetObjectLength(); length += m_routeInfo.GetObjectLength(); length += m_timeToLive.GetObjectLength(); return length; } PBoolean H501_AddressTemplate::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_pattern.Decode(strm)) return FALSE; if (!m_routeInfo.Decode(strm)) return FALSE; if (!m_timeToLive.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_supportedProtocols, m_supportedProtocols)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_AddressTemplate::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_pattern.Encode(strm); m_routeInfo.Encode(strm); m_timeToLive.Encode(strm); KnownExtensionEncode(strm, e_supportedProtocols, m_supportedProtocols); KnownExtensionEncode(strm, e_featureSet, m_featureSet); UnknownExtensionsEncode(strm); } PObject * H501_AddressTemplate::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_AddressTemplate::Class()), PInvalidCast); #endif return new H501_AddressTemplate(*this); } // // ContactInformation // H501_ContactInformation::H501_ContactInformation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 4) { m_priority.SetConstraints(PASN_Object::FixedConstraint, 0, 127); } #ifndef PASN_NOPRINTON void H501_ContactInformation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+19) << "transportAddress = " << setprecision(indent) << m_transportAddress << '\n'; strm << setw(indent+11) << "priority = " << setprecision(indent) << m_priority << '\n'; if (HasOptionalField(e_transportQoS)) strm << setw(indent+15) << "transportQoS = " << setprecision(indent) << m_transportQoS << '\n'; if (HasOptionalField(e_security)) strm << setw(indent+11) << "security = " << setprecision(indent) << m_security << '\n'; if (HasOptionalField(e_accessTokens)) strm << setw(indent+15) << "accessTokens = " << setprecision(indent) << m_accessTokens << '\n'; if (HasOptionalField(e_multipleCalls)) strm << setw(indent+16) << "multipleCalls = " << setprecision(indent) << m_multipleCalls << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; if (HasOptionalField(e_circuitID)) strm << setw(indent+12) << "circuitID = " << setprecision(indent) << m_circuitID << '\n'; if (HasOptionalField(e_supportedCircuits)) strm << setw(indent+20) << "supportedCircuits = " << setprecision(indent) << m_supportedCircuits << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_ContactInformation::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_ContactInformation), PInvalidCast); #endif const H501_ContactInformation & other = (const H501_ContactInformation &)obj; Comparison result; if ((result = m_transportAddress.Compare(other.m_transportAddress)) != EqualTo) return result; if ((result = m_priority.Compare(other.m_priority)) != EqualTo) return result; if ((result = m_transportQoS.Compare(other.m_transportQoS)) != EqualTo) return result; if ((result = m_security.Compare(other.m_security)) != EqualTo) return result; if ((result = m_accessTokens.Compare(other.m_accessTokens)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_ContactInformation::GetDataLength() const { PINDEX length = 0; length += m_transportAddress.GetObjectLength(); length += m_priority.GetObjectLength(); if (HasOptionalField(e_transportQoS)) length += m_transportQoS.GetObjectLength(); if (HasOptionalField(e_security)) length += m_security.GetObjectLength(); if (HasOptionalField(e_accessTokens)) length += m_accessTokens.GetObjectLength(); return length; } PBoolean H501_ContactInformation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_transportAddress.Decode(strm)) return FALSE; if (!m_priority.Decode(strm)) return FALSE; if (HasOptionalField(e_transportQoS) && !m_transportQoS.Decode(strm)) return FALSE; if (HasOptionalField(e_security) && !m_security.Decode(strm)) return FALSE; if (HasOptionalField(e_accessTokens) && !m_accessTokens.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_multipleCalls, m_multipleCalls)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; if (!KnownExtensionDecode(strm, e_circuitID, m_circuitID)) return FALSE; if (!KnownExtensionDecode(strm, e_supportedCircuits, m_supportedCircuits)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_ContactInformation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_transportAddress.Encode(strm); m_priority.Encode(strm); if (HasOptionalField(e_transportQoS)) m_transportQoS.Encode(strm); if (HasOptionalField(e_security)) m_security.Encode(strm); if (HasOptionalField(e_accessTokens)) m_accessTokens.Encode(strm); KnownExtensionEncode(strm, e_multipleCalls, m_multipleCalls); KnownExtensionEncode(strm, e_featureSet, m_featureSet); KnownExtensionEncode(strm, e_circuitID, m_circuitID); KnownExtensionEncode(strm, e_supportedCircuits, m_supportedCircuits); UnknownExtensionsEncode(strm); } PObject * H501_ContactInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ContactInformation::Class()), PInvalidCast); #endif return new H501_ContactInformation(*this); } // // PriceInfoSpec // H501_PriceInfoSpec::H501_PriceInfoSpec(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 6, TRUE, 0) { m_currency.SetConstraints(PASN_Object::FixedConstraint, 3); m_currencyScale.SetConstraints(PASN_Object::FixedConstraint, -127, 127); m_hoursFrom.SetConstraints(PASN_Object::FixedConstraint, 6); m_hoursUntil.SetConstraints(PASN_Object::FixedConstraint, 6); m_priceFormula.SetConstraints(PASN_Object::FixedConstraint, 1, 2048); } #ifndef PASN_NOPRINTON void H501_PriceInfoSpec::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "currency = " << setprecision(indent) << m_currency << '\n'; strm << setw(indent+16) << "currencyScale = " << setprecision(indent) << m_currencyScale << '\n'; if (HasOptionalField(e_validFrom)) strm << setw(indent+12) << "validFrom = " << setprecision(indent) << m_validFrom << '\n'; if (HasOptionalField(e_validUntil)) strm << setw(indent+13) << "validUntil = " << setprecision(indent) << m_validUntil << '\n'; if (HasOptionalField(e_hoursFrom)) strm << setw(indent+12) << "hoursFrom = " << setprecision(indent) << m_hoursFrom << '\n'; if (HasOptionalField(e_hoursUntil)) strm << setw(indent+13) << "hoursUntil = " << setprecision(indent) << m_hoursUntil << '\n'; if (HasOptionalField(e_priceElement)) strm << setw(indent+15) << "priceElement = " << setprecision(indent) << m_priceElement << '\n'; if (HasOptionalField(e_priceFormula)) strm << setw(indent+15) << "priceFormula = " << setprecision(indent) << m_priceFormula << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_PriceInfoSpec::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_PriceInfoSpec), PInvalidCast); #endif const H501_PriceInfoSpec & other = (const H501_PriceInfoSpec &)obj; Comparison result; if ((result = m_currency.Compare(other.m_currency)) != EqualTo) return result; if ((result = m_currencyScale.Compare(other.m_currencyScale)) != EqualTo) return result; if ((result = m_validFrom.Compare(other.m_validFrom)) != EqualTo) return result; if ((result = m_validUntil.Compare(other.m_validUntil)) != EqualTo) return result; if ((result = m_hoursFrom.Compare(other.m_hoursFrom)) != EqualTo) return result; if ((result = m_hoursUntil.Compare(other.m_hoursUntil)) != EqualTo) return result; if ((result = m_priceElement.Compare(other.m_priceElement)) != EqualTo) return result; if ((result = m_priceFormula.Compare(other.m_priceFormula)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_PriceInfoSpec::GetDataLength() const { PINDEX length = 0; length += m_currency.GetObjectLength(); length += m_currencyScale.GetObjectLength(); if (HasOptionalField(e_validFrom)) length += m_validFrom.GetObjectLength(); if (HasOptionalField(e_validUntil)) length += m_validUntil.GetObjectLength(); if (HasOptionalField(e_hoursFrom)) length += m_hoursFrom.GetObjectLength(); if (HasOptionalField(e_hoursUntil)) length += m_hoursUntil.GetObjectLength(); if (HasOptionalField(e_priceElement)) length += m_priceElement.GetObjectLength(); if (HasOptionalField(e_priceFormula)) length += m_priceFormula.GetObjectLength(); return length; } PBoolean H501_PriceInfoSpec::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_currency.Decode(strm)) return FALSE; if (!m_currencyScale.Decode(strm)) return FALSE; if (HasOptionalField(e_validFrom) && !m_validFrom.Decode(strm)) return FALSE; if (HasOptionalField(e_validUntil) && !m_validUntil.Decode(strm)) return FALSE; if (HasOptionalField(e_hoursFrom) && !m_hoursFrom.Decode(strm)) return FALSE; if (HasOptionalField(e_hoursUntil) && !m_hoursUntil.Decode(strm)) return FALSE; if (HasOptionalField(e_priceElement) && !m_priceElement.Decode(strm)) return FALSE; if (HasOptionalField(e_priceFormula) && !m_priceFormula.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_PriceInfoSpec::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_currency.Encode(strm); m_currencyScale.Encode(strm); if (HasOptionalField(e_validFrom)) m_validFrom.Encode(strm); if (HasOptionalField(e_validUntil)) m_validUntil.Encode(strm); if (HasOptionalField(e_hoursFrom)) m_hoursFrom.Encode(strm); if (HasOptionalField(e_hoursUntil)) m_hoursUntil.Encode(strm); if (HasOptionalField(e_priceElement)) m_priceElement.Encode(strm); if (HasOptionalField(e_priceFormula)) m_priceFormula.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_PriceInfoSpec::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_PriceInfoSpec::Class()), PInvalidCast); #endif return new H501_PriceInfoSpec(*this); } // // PriceElement // H501_PriceElement::H501_PriceElement(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_amount.SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); m_quantum.SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); } #ifndef PASN_NOPRINTON void H501_PriceElement::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "amount = " << setprecision(indent) << m_amount << '\n'; strm << setw(indent+10) << "quantum = " << setprecision(indent) << m_quantum << '\n'; strm << setw(indent+8) << "units = " << setprecision(indent) << m_units << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_PriceElement::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_PriceElement), PInvalidCast); #endif const H501_PriceElement & other = (const H501_PriceElement &)obj; Comparison result; if ((result = m_amount.Compare(other.m_amount)) != EqualTo) return result; if ((result = m_quantum.Compare(other.m_quantum)) != EqualTo) return result; if ((result = m_units.Compare(other.m_units)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_PriceElement::GetDataLength() const { PINDEX length = 0; length += m_amount.GetObjectLength(); length += m_quantum.GetObjectLength(); length += m_units.GetObjectLength(); return length; } PBoolean H501_PriceElement::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_amount.Decode(strm)) return FALSE; if (!m_quantum.Decode(strm)) return FALSE; if (!m_units.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_PriceElement::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_amount.Encode(strm); m_quantum.Encode(strm); m_units.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_PriceElement::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_PriceElement::Class()), PInvalidCast); #endif return new H501_PriceElement(*this); } // // DescriptorInfo // H501_DescriptorInfo::H501_DescriptorInfo(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_DescriptorInfo::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "descriptorID = " << setprecision(indent) << m_descriptorID << '\n'; strm << setw(indent+14) << "lastChanged = " << setprecision(indent) << m_lastChanged << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_DescriptorInfo::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_DescriptorInfo), PInvalidCast); #endif const H501_DescriptorInfo & other = (const H501_DescriptorInfo &)obj; Comparison result; if ((result = m_descriptorID.Compare(other.m_descriptorID)) != EqualTo) return result; if ((result = m_lastChanged.Compare(other.m_lastChanged)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_DescriptorInfo::GetDataLength() const { PINDEX length = 0; length += m_descriptorID.GetObjectLength(); length += m_lastChanged.GetObjectLength(); return length; } PBoolean H501_DescriptorInfo::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_descriptorID.Decode(strm)) return FALSE; if (!m_lastChanged.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_DescriptorInfo::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_descriptorID.Encode(strm); m_lastChanged.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_DescriptorInfo::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_DescriptorInfo::Class()), PInvalidCast); #endif return new H501_DescriptorInfo(*this); } // // AlternatePEInfo // H501_AlternatePEInfo::H501_AlternatePEInfo(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_AlternatePEInfo::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "alternatePE = " << setprecision(indent) << m_alternatePE << '\n'; strm << setw(indent+23) << "alternateIsPermanent = " << setprecision(indent) << m_alternateIsPermanent << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_AlternatePEInfo::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_AlternatePEInfo), PInvalidCast); #endif const H501_AlternatePEInfo & other = (const H501_AlternatePEInfo &)obj; Comparison result; if ((result = m_alternatePE.Compare(other.m_alternatePE)) != EqualTo) return result; if ((result = m_alternateIsPermanent.Compare(other.m_alternateIsPermanent)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_AlternatePEInfo::GetDataLength() const { PINDEX length = 0; length += m_alternatePE.GetObjectLength(); length += m_alternateIsPermanent.GetObjectLength(); return length; } PBoolean H501_AlternatePEInfo::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_alternatePE.Decode(strm)) return FALSE; if (!m_alternateIsPermanent.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_AlternatePEInfo::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_alternatePE.Encode(strm); m_alternateIsPermanent.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_AlternatePEInfo::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_AlternatePEInfo::Class()), PInvalidCast); #endif return new H501_AlternatePEInfo(*this); } // // AlternatePE // H501_AlternatePE::H501_AlternatePE(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_priority.SetConstraints(PASN_Object::FixedConstraint, 1, 127); } #ifndef PASN_NOPRINTON void H501_AlternatePE::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "contactAddress = " << setprecision(indent) << m_contactAddress << '\n'; strm << setw(indent+11) << "priority = " << setprecision(indent) << m_priority << '\n'; if (HasOptionalField(e_elementIdentifier)) strm << setw(indent+20) << "elementIdentifier = " << setprecision(indent) << m_elementIdentifier << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_AlternatePE::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_AlternatePE), PInvalidCast); #endif const H501_AlternatePE & other = (const H501_AlternatePE &)obj; Comparison result; if ((result = m_contactAddress.Compare(other.m_contactAddress)) != EqualTo) return result; if ((result = m_priority.Compare(other.m_priority)) != EqualTo) return result; if ((result = m_elementIdentifier.Compare(other.m_elementIdentifier)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_AlternatePE::GetDataLength() const { PINDEX length = 0; length += m_contactAddress.GetObjectLength(); length += m_priority.GetObjectLength(); if (HasOptionalField(e_elementIdentifier)) length += m_elementIdentifier.GetObjectLength(); return length; } PBoolean H501_AlternatePE::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_contactAddress.Decode(strm)) return FALSE; if (!m_priority.Decode(strm)) return FALSE; if (HasOptionalField(e_elementIdentifier) && !m_elementIdentifier.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_AlternatePE::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_contactAddress.Encode(strm); m_priority.Encode(strm); if (HasOptionalField(e_elementIdentifier)) m_elementIdentifier.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_AlternatePE::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_AlternatePE::Class()), PInvalidCast); #endif return new H501_AlternatePE(*this); } // // UserInformation // H501_UserInformation::H501_UserInformation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_UserInformation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "userIdentifier = " << setprecision(indent) << m_userIdentifier << '\n'; if (HasOptionalField(e_userAuthenticator)) strm << setw(indent+20) << "userAuthenticator = " << setprecision(indent) << m_userAuthenticator << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_UserInformation::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_UserInformation), PInvalidCast); #endif const H501_UserInformation & other = (const H501_UserInformation &)obj; Comparison result; if ((result = m_userIdentifier.Compare(other.m_userIdentifier)) != EqualTo) return result; if ((result = m_userAuthenticator.Compare(other.m_userAuthenticator)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_UserInformation::GetDataLength() const { PINDEX length = 0; length += m_userIdentifier.GetObjectLength(); if (HasOptionalField(e_userAuthenticator)) length += m_userAuthenticator.GetObjectLength(); return length; } PBoolean H501_UserInformation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_userIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_userAuthenticator) && !m_userAuthenticator.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_UserInformation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_userIdentifier.Encode(strm); if (HasOptionalField(e_userAuthenticator)) m_userAuthenticator.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_UserInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_UserInformation::Class()), PInvalidCast); #endif return new H501_UserInformation(*this); } // // UsageSpecification // H501_UsageSpecification::H501_UsageSpecification(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 1) { } #ifndef PASN_NOPRINTON void H501_UsageSpecification::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "sendTo = " << setprecision(indent) << m_sendTo << '\n'; strm << setw(indent+7) << "when = " << setprecision(indent) << m_when << '\n'; strm << setw(indent+11) << "required = " << setprecision(indent) << m_required << '\n'; strm << setw(indent+12) << "preferred = " << setprecision(indent) << m_preferred << '\n'; if (HasOptionalField(e_sendToPEAddress)) strm << setw(indent+18) << "sendToPEAddress = " << setprecision(indent) << m_sendToPEAddress << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_UsageSpecification::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_UsageSpecification), PInvalidCast); #endif const H501_UsageSpecification & other = (const H501_UsageSpecification &)obj; Comparison result; if ((result = m_sendTo.Compare(other.m_sendTo)) != EqualTo) return result; if ((result = m_when.Compare(other.m_when)) != EqualTo) return result; if ((result = m_required.Compare(other.m_required)) != EqualTo) return result; if ((result = m_preferred.Compare(other.m_preferred)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_UsageSpecification::GetDataLength() const { PINDEX length = 0; length += m_sendTo.GetObjectLength(); length += m_when.GetObjectLength(); length += m_required.GetObjectLength(); length += m_preferred.GetObjectLength(); return length; } PBoolean H501_UsageSpecification::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sendTo.Decode(strm)) return FALSE; if (!m_when.Decode(strm)) return FALSE; if (!m_required.Decode(strm)) return FALSE; if (!m_preferred.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_sendToPEAddress, m_sendToPEAddress)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_UsageSpecification::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sendTo.Encode(strm); m_when.Encode(strm); m_required.Encode(strm); m_preferred.Encode(strm); KnownExtensionEncode(strm, e_sendToPEAddress, m_sendToPEAddress); UnknownExtensionsEncode(strm); } PObject * H501_UsageSpecification::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_UsageSpecification::Class()), PInvalidCast); #endif return new H501_UsageSpecification(*this); } // // PartyInformation // H501_PartyInformation::H501_PartyInformation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 5, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_PartyInformation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+19) << "logicalAddresses = " << setprecision(indent) << m_logicalAddresses << '\n'; if (HasOptionalField(e_domainIdentifier)) strm << setw(indent+19) << "domainIdentifier = " << setprecision(indent) << m_domainIdentifier << '\n'; if (HasOptionalField(e_transportAddress)) strm << setw(indent+19) << "transportAddress = " << setprecision(indent) << m_transportAddress << '\n'; if (HasOptionalField(e_endpointType)) strm << setw(indent+15) << "endpointType = " << setprecision(indent) << m_endpointType << '\n'; if (HasOptionalField(e_userInfo)) strm << setw(indent+11) << "userInfo = " << setprecision(indent) << m_userInfo << '\n'; if (HasOptionalField(e_timeZone)) strm << setw(indent+11) << "timeZone = " << setprecision(indent) << m_timeZone << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_PartyInformation::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_PartyInformation), PInvalidCast); #endif const H501_PartyInformation & other = (const H501_PartyInformation &)obj; Comparison result; if ((result = m_logicalAddresses.Compare(other.m_logicalAddresses)) != EqualTo) return result; if ((result = m_domainIdentifier.Compare(other.m_domainIdentifier)) != EqualTo) return result; if ((result = m_transportAddress.Compare(other.m_transportAddress)) != EqualTo) return result; if ((result = m_endpointType.Compare(other.m_endpointType)) != EqualTo) return result; if ((result = m_userInfo.Compare(other.m_userInfo)) != EqualTo) return result; if ((result = m_timeZone.Compare(other.m_timeZone)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_PartyInformation::GetDataLength() const { PINDEX length = 0; length += m_logicalAddresses.GetObjectLength(); if (HasOptionalField(e_domainIdentifier)) length += m_domainIdentifier.GetObjectLength(); if (HasOptionalField(e_transportAddress)) length += m_transportAddress.GetObjectLength(); if (HasOptionalField(e_endpointType)) length += m_endpointType.GetObjectLength(); if (HasOptionalField(e_userInfo)) length += m_userInfo.GetObjectLength(); if (HasOptionalField(e_timeZone)) length += m_timeZone.GetObjectLength(); return length; } PBoolean H501_PartyInformation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_logicalAddresses.Decode(strm)) return FALSE; if (HasOptionalField(e_domainIdentifier) && !m_domainIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_transportAddress) && !m_transportAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_endpointType) && !m_endpointType.Decode(strm)) return FALSE; if (HasOptionalField(e_userInfo) && !m_userInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_timeZone) && !m_timeZone.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_PartyInformation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_logicalAddresses.Encode(strm); if (HasOptionalField(e_domainIdentifier)) m_domainIdentifier.Encode(strm); if (HasOptionalField(e_transportAddress)) m_transportAddress.Encode(strm); if (HasOptionalField(e_endpointType)) m_endpointType.Encode(strm); if (HasOptionalField(e_userInfo)) m_userInfo.Encode(strm); if (HasOptionalField(e_timeZone)) m_timeZone.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_PartyInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_PartyInformation::Class()), PInvalidCast); #endif return new H501_PartyInformation(*this); } // // Message // H501_Message::H501_Message(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_Message::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "body = " << setprecision(indent) << m_body << '\n'; strm << setw(indent+9) << "common = " << setprecision(indent) << m_common << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_Message::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_Message), PInvalidCast); #endif const H501_Message & other = (const H501_Message &)obj; Comparison result; if ((result = m_body.Compare(other.m_body)) != EqualTo) return result; if ((result = m_common.Compare(other.m_common)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_Message::GetDataLength() const { PINDEX length = 0; length += m_body.GetObjectLength(); length += m_common.GetObjectLength(); return length; } PBoolean H501_Message::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_body.Decode(strm)) return FALSE; if (!m_common.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_Message::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_body.Encode(strm); m_common.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_Message::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_Message::Class()), PInvalidCast); #endif return new H501_Message(*this); } // // ServiceRequest // H501_ServiceRequest::H501_ServiceRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 4, TRUE, 1) { m_timeToLive.SetConstraints(PASN_Object::FixedConstraint, 1, 4294967295U); } #ifndef PASN_NOPRINTON void H501_ServiceRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_elementIdentifier)) strm << setw(indent+20) << "elementIdentifier = " << setprecision(indent) << m_elementIdentifier << '\n'; if (HasOptionalField(e_domainIdentifier)) strm << setw(indent+19) << "domainIdentifier = " << setprecision(indent) << m_domainIdentifier << '\n'; if (HasOptionalField(e_securityMode)) strm << setw(indent+15) << "securityMode = " << setprecision(indent) << m_securityMode << '\n'; if (HasOptionalField(e_timeToLive)) strm << setw(indent+13) << "timeToLive = " << setprecision(indent) << m_timeToLive << '\n'; if (HasOptionalField(e_usageSpec)) strm << setw(indent+12) << "usageSpec = " << setprecision(indent) << m_usageSpec << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_ServiceRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_ServiceRequest), PInvalidCast); #endif const H501_ServiceRequest & other = (const H501_ServiceRequest &)obj; Comparison result; if ((result = m_elementIdentifier.Compare(other.m_elementIdentifier)) != EqualTo) return result; if ((result = m_domainIdentifier.Compare(other.m_domainIdentifier)) != EqualTo) return result; if ((result = m_securityMode.Compare(other.m_securityMode)) != EqualTo) return result; if ((result = m_timeToLive.Compare(other.m_timeToLive)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_ServiceRequest::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_elementIdentifier)) length += m_elementIdentifier.GetObjectLength(); if (HasOptionalField(e_domainIdentifier)) length += m_domainIdentifier.GetObjectLength(); if (HasOptionalField(e_securityMode)) length += m_securityMode.GetObjectLength(); if (HasOptionalField(e_timeToLive)) length += m_timeToLive.GetObjectLength(); return length; } PBoolean H501_ServiceRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_elementIdentifier) && !m_elementIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_domainIdentifier) && !m_domainIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_securityMode) && !m_securityMode.Decode(strm)) return FALSE; if (HasOptionalField(e_timeToLive) && !m_timeToLive.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_usageSpec, m_usageSpec)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_ServiceRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_elementIdentifier)) m_elementIdentifier.Encode(strm); if (HasOptionalField(e_domainIdentifier)) m_domainIdentifier.Encode(strm); if (HasOptionalField(e_securityMode)) m_securityMode.Encode(strm); if (HasOptionalField(e_timeToLive)) m_timeToLive.Encode(strm); KnownExtensionEncode(strm, e_usageSpec, m_usageSpec); UnknownExtensionsEncode(strm); } PObject * H501_ServiceRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ServiceRequest::Class()), PInvalidCast); #endif return new H501_ServiceRequest(*this); } // // ServiceConfirmation // H501_ServiceConfirmation::H501_ServiceConfirmation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 1) { m_timeToLive.SetConstraints(PASN_Object::FixedConstraint, 1, 4294967295U); } #ifndef PASN_NOPRINTON void H501_ServiceConfirmation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+20) << "elementIdentifier = " << setprecision(indent) << m_elementIdentifier << '\n'; strm << setw(indent+19) << "domainIdentifier = " << setprecision(indent) << m_domainIdentifier << '\n'; if (HasOptionalField(e_alternates)) strm << setw(indent+13) << "alternates = " << setprecision(indent) << m_alternates << '\n'; if (HasOptionalField(e_securityMode)) strm << setw(indent+15) << "securityMode = " << setprecision(indent) << m_securityMode << '\n'; if (HasOptionalField(e_timeToLive)) strm << setw(indent+13) << "timeToLive = " << setprecision(indent) << m_timeToLive << '\n'; if (HasOptionalField(e_usageSpec)) strm << setw(indent+12) << "usageSpec = " << setprecision(indent) << m_usageSpec << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_ServiceConfirmation::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_ServiceConfirmation), PInvalidCast); #endif const H501_ServiceConfirmation & other = (const H501_ServiceConfirmation &)obj; Comparison result; if ((result = m_elementIdentifier.Compare(other.m_elementIdentifier)) != EqualTo) return result; if ((result = m_domainIdentifier.Compare(other.m_domainIdentifier)) != EqualTo) return result; if ((result = m_alternates.Compare(other.m_alternates)) != EqualTo) return result; if ((result = m_securityMode.Compare(other.m_securityMode)) != EqualTo) return result; if ((result = m_timeToLive.Compare(other.m_timeToLive)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_ServiceConfirmation::GetDataLength() const { PINDEX length = 0; length += m_elementIdentifier.GetObjectLength(); length += m_domainIdentifier.GetObjectLength(); if (HasOptionalField(e_alternates)) length += m_alternates.GetObjectLength(); if (HasOptionalField(e_securityMode)) length += m_securityMode.GetObjectLength(); if (HasOptionalField(e_timeToLive)) length += m_timeToLive.GetObjectLength(); return length; } PBoolean H501_ServiceConfirmation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_elementIdentifier.Decode(strm)) return FALSE; if (!m_domainIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_alternates) && !m_alternates.Decode(strm)) return FALSE; if (HasOptionalField(e_securityMode) && !m_securityMode.Decode(strm)) return FALSE; if (HasOptionalField(e_timeToLive) && !m_timeToLive.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_usageSpec, m_usageSpec)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_ServiceConfirmation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_elementIdentifier.Encode(strm); m_domainIdentifier.Encode(strm); if (HasOptionalField(e_alternates)) m_alternates.Encode(strm); if (HasOptionalField(e_securityMode)) m_securityMode.Encode(strm); if (HasOptionalField(e_timeToLive)) m_timeToLive.Encode(strm); KnownExtensionEncode(strm, e_usageSpec, m_usageSpec); UnknownExtensionsEncode(strm); } PObject * H501_ServiceConfirmation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ServiceConfirmation::Class()), PInvalidCast); #endif return new H501_ServiceConfirmation(*this); } // // ServiceRejection // H501_ServiceRejection::H501_ServiceRejection(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_ServiceRejection::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; if (HasOptionalField(e_alternates)) strm << setw(indent+13) << "alternates = " << setprecision(indent) << m_alternates << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_ServiceRejection::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_ServiceRejection), PInvalidCast); #endif const H501_ServiceRejection & other = (const H501_ServiceRejection &)obj; Comparison result; if ((result = m_reason.Compare(other.m_reason)) != EqualTo) return result; if ((result = m_alternates.Compare(other.m_alternates)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_ServiceRejection::GetDataLength() const { PINDEX length = 0; length += m_reason.GetObjectLength(); if (HasOptionalField(e_alternates)) length += m_alternates.GetObjectLength(); return length; } PBoolean H501_ServiceRejection::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_reason.Decode(strm)) return FALSE; if (HasOptionalField(e_alternates) && !m_alternates.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_ServiceRejection::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_reason.Encode(strm); if (HasOptionalField(e_alternates)) m_alternates.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_ServiceRejection::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ServiceRejection::Class()), PInvalidCast); #endif return new H501_ServiceRejection(*this); } // // ServiceRelease // H501_ServiceRelease::H501_ServiceRelease(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_ServiceRelease::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; if (HasOptionalField(e_alternates)) strm << setw(indent+13) << "alternates = " << setprecision(indent) << m_alternates << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_ServiceRelease::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_ServiceRelease), PInvalidCast); #endif const H501_ServiceRelease & other = (const H501_ServiceRelease &)obj; Comparison result; if ((result = m_reason.Compare(other.m_reason)) != EqualTo) return result; if ((result = m_alternates.Compare(other.m_alternates)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_ServiceRelease::GetDataLength() const { PINDEX length = 0; length += m_reason.GetObjectLength(); if (HasOptionalField(e_alternates)) length += m_alternates.GetObjectLength(); return length; } PBoolean H501_ServiceRelease::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_reason.Decode(strm)) return FALSE; if (HasOptionalField(e_alternates) && !m_alternates.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_ServiceRelease::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_reason.Encode(strm); if (HasOptionalField(e_alternates)) m_alternates.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_ServiceRelease::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ServiceRelease::Class()), PInvalidCast); #endif return new H501_ServiceRelease(*this); } // // AccessRequest // H501_AccessRequest::H501_AccessRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 1) { } #ifndef PASN_NOPRINTON void H501_AccessRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+18) << "destinationInfo = " << setprecision(indent) << m_destinationInfo << '\n'; if (HasOptionalField(e_sourceInfo)) strm << setw(indent+13) << "sourceInfo = " << setprecision(indent) << m_sourceInfo << '\n'; if (HasOptionalField(e_callInfo)) strm << setw(indent+11) << "callInfo = " << setprecision(indent) << m_callInfo << '\n'; if (HasOptionalField(e_usageSpec)) strm << setw(indent+12) << "usageSpec = " << setprecision(indent) << m_usageSpec << '\n'; if (HasOptionalField(e_desiredProtocols)) strm << setw(indent+19) << "desiredProtocols = " << setprecision(indent) << m_desiredProtocols << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_AccessRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_AccessRequest), PInvalidCast); #endif const H501_AccessRequest & other = (const H501_AccessRequest &)obj; Comparison result; if ((result = m_destinationInfo.Compare(other.m_destinationInfo)) != EqualTo) return result; if ((result = m_sourceInfo.Compare(other.m_sourceInfo)) != EqualTo) return result; if ((result = m_callInfo.Compare(other.m_callInfo)) != EqualTo) return result; if ((result = m_usageSpec.Compare(other.m_usageSpec)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_AccessRequest::GetDataLength() const { PINDEX length = 0; length += m_destinationInfo.GetObjectLength(); if (HasOptionalField(e_sourceInfo)) length += m_sourceInfo.GetObjectLength(); if (HasOptionalField(e_callInfo)) length += m_callInfo.GetObjectLength(); if (HasOptionalField(e_usageSpec)) length += m_usageSpec.GetObjectLength(); return length; } PBoolean H501_AccessRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_destinationInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_sourceInfo) && !m_sourceInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_callInfo) && !m_callInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_usageSpec) && !m_usageSpec.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_desiredProtocols, m_desiredProtocols)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_AccessRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_destinationInfo.Encode(strm); if (HasOptionalField(e_sourceInfo)) m_sourceInfo.Encode(strm); if (HasOptionalField(e_callInfo)) m_callInfo.Encode(strm); if (HasOptionalField(e_usageSpec)) m_usageSpec.Encode(strm); KnownExtensionEncode(strm, e_desiredProtocols, m_desiredProtocols); UnknownExtensionsEncode(strm); } PObject * H501_AccessRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_AccessRequest::Class()), PInvalidCast); #endif return new H501_AccessRequest(*this); } // // UsageRequest // H501_UsageRequest::H501_UsageRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_UsageRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "callInfo = " << setprecision(indent) << m_callInfo << '\n'; strm << setw(indent+12) << "usageSpec = " << setprecision(indent) << m_usageSpec << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_UsageRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_UsageRequest), PInvalidCast); #endif const H501_UsageRequest & other = (const H501_UsageRequest &)obj; Comparison result; if ((result = m_callInfo.Compare(other.m_callInfo)) != EqualTo) return result; if ((result = m_usageSpec.Compare(other.m_usageSpec)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_UsageRequest::GetDataLength() const { PINDEX length = 0; length += m_callInfo.GetObjectLength(); length += m_usageSpec.GetObjectLength(); return length; } PBoolean H501_UsageRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_callInfo.Decode(strm)) return FALSE; if (!m_usageSpec.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_UsageRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_callInfo.Encode(strm); m_usageSpec.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_UsageRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_UsageRequest::Class()), PInvalidCast); #endif return new H501_UsageRequest(*this); } // // UsageIndication // H501_UsageIndication::H501_UsageIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 5, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_UsageIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "callInfo = " << setprecision(indent) << m_callInfo << '\n'; if (HasOptionalField(e_accessTokens)) strm << setw(indent+15) << "accessTokens = " << setprecision(indent) << m_accessTokens << '\n'; strm << setw(indent+13) << "senderRole = " << setprecision(indent) << m_senderRole << '\n'; strm << setw(indent+18) << "usageCallStatus = " << setprecision(indent) << m_usageCallStatus << '\n'; if (HasOptionalField(e_srcInfo)) strm << setw(indent+10) << "srcInfo = " << setprecision(indent) << m_srcInfo << '\n'; strm << setw(indent+14) << "destAddress = " << setprecision(indent) << m_destAddress << '\n'; if (HasOptionalField(e_startTime)) strm << setw(indent+12) << "startTime = " << setprecision(indent) << m_startTime << '\n'; if (HasOptionalField(e_endTime)) strm << setw(indent+10) << "endTime = " << setprecision(indent) << m_endTime << '\n'; if (HasOptionalField(e_terminationCause)) strm << setw(indent+19) << "terminationCause = " << setprecision(indent) << m_terminationCause << '\n'; strm << setw(indent+14) << "usageFields = " << setprecision(indent) << m_usageFields << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_UsageIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_UsageIndication), PInvalidCast); #endif const H501_UsageIndication & other = (const H501_UsageIndication &)obj; Comparison result; if ((result = m_callInfo.Compare(other.m_callInfo)) != EqualTo) return result; if ((result = m_accessTokens.Compare(other.m_accessTokens)) != EqualTo) return result; if ((result = m_senderRole.Compare(other.m_senderRole)) != EqualTo) return result; if ((result = m_usageCallStatus.Compare(other.m_usageCallStatus)) != EqualTo) return result; if ((result = m_srcInfo.Compare(other.m_srcInfo)) != EqualTo) return result; if ((result = m_destAddress.Compare(other.m_destAddress)) != EqualTo) return result; if ((result = m_startTime.Compare(other.m_startTime)) != EqualTo) return result; if ((result = m_endTime.Compare(other.m_endTime)) != EqualTo) return result; if ((result = m_terminationCause.Compare(other.m_terminationCause)) != EqualTo) return result; if ((result = m_usageFields.Compare(other.m_usageFields)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_UsageIndication::GetDataLength() const { PINDEX length = 0; length += m_callInfo.GetObjectLength(); if (HasOptionalField(e_accessTokens)) length += m_accessTokens.GetObjectLength(); length += m_senderRole.GetObjectLength(); length += m_usageCallStatus.GetObjectLength(); if (HasOptionalField(e_srcInfo)) length += m_srcInfo.GetObjectLength(); length += m_destAddress.GetObjectLength(); if (HasOptionalField(e_startTime)) length += m_startTime.GetObjectLength(); if (HasOptionalField(e_endTime)) length += m_endTime.GetObjectLength(); if (HasOptionalField(e_terminationCause)) length += m_terminationCause.GetObjectLength(); length += m_usageFields.GetObjectLength(); return length; } PBoolean H501_UsageIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_callInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_accessTokens) && !m_accessTokens.Decode(strm)) return FALSE; if (!m_senderRole.Decode(strm)) return FALSE; if (!m_usageCallStatus.Decode(strm)) return FALSE; if (HasOptionalField(e_srcInfo) && !m_srcInfo.Decode(strm)) return FALSE; if (!m_destAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_startTime) && !m_startTime.Decode(strm)) return FALSE; if (HasOptionalField(e_endTime) && !m_endTime.Decode(strm)) return FALSE; if (HasOptionalField(e_terminationCause) && !m_terminationCause.Decode(strm)) return FALSE; if (!m_usageFields.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_UsageIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_callInfo.Encode(strm); if (HasOptionalField(e_accessTokens)) m_accessTokens.Encode(strm); m_senderRole.Encode(strm); m_usageCallStatus.Encode(strm); if (HasOptionalField(e_srcInfo)) m_srcInfo.Encode(strm); m_destAddress.Encode(strm); if (HasOptionalField(e_startTime)) m_startTime.Encode(strm); if (HasOptionalField(e_endTime)) m_endTime.Encode(strm); if (HasOptionalField(e_terminationCause)) m_terminationCause.Encode(strm); m_usageFields.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_UsageIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_UsageIndication::Class()), PInvalidCast); #endif return new H501_UsageIndication(*this); } // // ValidationRequest // H501_ValidationRequest::H501_ValidationRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 4, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_ValidationRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_accessToken)) strm << setw(indent+14) << "accessToken = " << setprecision(indent) << m_accessToken << '\n'; if (HasOptionalField(e_destinationInfo)) strm << setw(indent+18) << "destinationInfo = " << setprecision(indent) << m_destinationInfo << '\n'; if (HasOptionalField(e_sourceInfo)) strm << setw(indent+13) << "sourceInfo = " << setprecision(indent) << m_sourceInfo << '\n'; strm << setw(indent+11) << "callInfo = " << setprecision(indent) << m_callInfo << '\n'; if (HasOptionalField(e_usageSpec)) strm << setw(indent+12) << "usageSpec = " << setprecision(indent) << m_usageSpec << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_ValidationRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_ValidationRequest), PInvalidCast); #endif const H501_ValidationRequest & other = (const H501_ValidationRequest &)obj; Comparison result; if ((result = m_accessToken.Compare(other.m_accessToken)) != EqualTo) return result; if ((result = m_destinationInfo.Compare(other.m_destinationInfo)) != EqualTo) return result; if ((result = m_sourceInfo.Compare(other.m_sourceInfo)) != EqualTo) return result; if ((result = m_callInfo.Compare(other.m_callInfo)) != EqualTo) return result; if ((result = m_usageSpec.Compare(other.m_usageSpec)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_ValidationRequest::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_accessToken)) length += m_accessToken.GetObjectLength(); if (HasOptionalField(e_destinationInfo)) length += m_destinationInfo.GetObjectLength(); if (HasOptionalField(e_sourceInfo)) length += m_sourceInfo.GetObjectLength(); length += m_callInfo.GetObjectLength(); if (HasOptionalField(e_usageSpec)) length += m_usageSpec.GetObjectLength(); return length; } PBoolean H501_ValidationRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_accessToken) && !m_accessToken.Decode(strm)) return FALSE; if (HasOptionalField(e_destinationInfo) && !m_destinationInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_sourceInfo) && !m_sourceInfo.Decode(strm)) return FALSE; if (!m_callInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_usageSpec) && !m_usageSpec.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_ValidationRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_accessToken)) m_accessToken.Encode(strm); if (HasOptionalField(e_destinationInfo)) m_destinationInfo.Encode(strm); if (HasOptionalField(e_sourceInfo)) m_sourceInfo.Encode(strm); m_callInfo.Encode(strm); if (HasOptionalField(e_usageSpec)) m_usageSpec.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_ValidationRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ValidationRequest::Class()), PInvalidCast); #endif return new H501_ValidationRequest(*this); } // // ValidationConfirmation // H501_ValidationConfirmation::H501_ValidationConfirmation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_ValidationConfirmation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_destinationInfo)) strm << setw(indent+18) << "destinationInfo = " << setprecision(indent) << m_destinationInfo << '\n'; if (HasOptionalField(e_usageSpec)) strm << setw(indent+12) << "usageSpec = " << setprecision(indent) << m_usageSpec << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_ValidationConfirmation::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_ValidationConfirmation), PInvalidCast); #endif const H501_ValidationConfirmation & other = (const H501_ValidationConfirmation &)obj; Comparison result; if ((result = m_destinationInfo.Compare(other.m_destinationInfo)) != EqualTo) return result; if ((result = m_usageSpec.Compare(other.m_usageSpec)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_ValidationConfirmation::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_destinationInfo)) length += m_destinationInfo.GetObjectLength(); if (HasOptionalField(e_usageSpec)) length += m_usageSpec.GetObjectLength(); return length; } PBoolean H501_ValidationConfirmation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_destinationInfo) && !m_destinationInfo.Decode(strm)) return FALSE; if (HasOptionalField(e_usageSpec) && !m_usageSpec.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_ValidationConfirmation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_destinationInfo)) m_destinationInfo.Encode(strm); if (HasOptionalField(e_usageSpec)) m_usageSpec.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_ValidationConfirmation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_ValidationConfirmation::Class()), PInvalidCast); #endif return new H501_ValidationConfirmation(*this); } // // RouteInformation // H501_RouteInformation::H501_RouteInformation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 3) { } #ifndef PASN_NOPRINTON void H501_RouteInformation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "messageType = " << setprecision(indent) << m_messageType << '\n'; strm << setw(indent+15) << "callSpecific = " << setprecision(indent) << m_callSpecific << '\n'; if (HasOptionalField(e_usageSpec)) strm << setw(indent+12) << "usageSpec = " << setprecision(indent) << m_usageSpec << '\n'; if (HasOptionalField(e_priceInfo)) strm << setw(indent+12) << "priceInfo = " << setprecision(indent) << m_priceInfo << '\n'; strm << setw(indent+11) << "contacts = " << setprecision(indent) << m_contacts << '\n'; if (HasOptionalField(e_type)) strm << setw(indent+7) << "type = " << setprecision(indent) << m_type << '\n'; if (HasOptionalField(e_featureSet)) strm << setw(indent+13) << "featureSet = " << setprecision(indent) << m_featureSet << '\n'; if (HasOptionalField(e_circuitID)) strm << setw(indent+12) << "circuitID = " << setprecision(indent) << m_circuitID << '\n'; if (HasOptionalField(e_supportedCircuits)) strm << setw(indent+20) << "supportedCircuits = " << setprecision(indent) << m_supportedCircuits << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_RouteInformation::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_RouteInformation), PInvalidCast); #endif const H501_RouteInformation & other = (const H501_RouteInformation &)obj; Comparison result; if ((result = m_messageType.Compare(other.m_messageType)) != EqualTo) return result; if ((result = m_callSpecific.Compare(other.m_callSpecific)) != EqualTo) return result; if ((result = m_usageSpec.Compare(other.m_usageSpec)) != EqualTo) return result; if ((result = m_priceInfo.Compare(other.m_priceInfo)) != EqualTo) return result; if ((result = m_contacts.Compare(other.m_contacts)) != EqualTo) return result; if ((result = m_type.Compare(other.m_type)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_RouteInformation::GetDataLength() const { PINDEX length = 0; length += m_messageType.GetObjectLength(); length += m_callSpecific.GetObjectLength(); if (HasOptionalField(e_usageSpec)) length += m_usageSpec.GetObjectLength(); if (HasOptionalField(e_priceInfo)) length += m_priceInfo.GetObjectLength(); length += m_contacts.GetObjectLength(); if (HasOptionalField(e_type)) length += m_type.GetObjectLength(); return length; } PBoolean H501_RouteInformation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_messageType.Decode(strm)) return FALSE; if (!m_callSpecific.Decode(strm)) return FALSE; if (HasOptionalField(e_usageSpec) && !m_usageSpec.Decode(strm)) return FALSE; if (HasOptionalField(e_priceInfo) && !m_priceInfo.Decode(strm)) return FALSE; if (!m_contacts.Decode(strm)) return FALSE; if (HasOptionalField(e_type) && !m_type.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_featureSet, m_featureSet)) return FALSE; if (!KnownExtensionDecode(strm, e_circuitID, m_circuitID)) return FALSE; if (!KnownExtensionDecode(strm, e_supportedCircuits, m_supportedCircuits)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_RouteInformation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_messageType.Encode(strm); m_callSpecific.Encode(strm); if (HasOptionalField(e_usageSpec)) m_usageSpec.Encode(strm); if (HasOptionalField(e_priceInfo)) m_priceInfo.Encode(strm); m_contacts.Encode(strm); if (HasOptionalField(e_type)) m_type.Encode(strm); KnownExtensionEncode(strm, e_featureSet, m_featureSet); KnownExtensionEncode(strm, e_circuitID, m_circuitID); KnownExtensionEncode(strm, e_supportedCircuits, m_supportedCircuits); UnknownExtensionsEncode(strm); } PObject * H501_RouteInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_RouteInformation::Class()), PInvalidCast); #endif return new H501_RouteInformation(*this); } // // Descriptor // H501_Descriptor::H501_Descriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void H501_Descriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "descriptorInfo = " << setprecision(indent) << m_descriptorInfo << '\n'; strm << setw(indent+12) << "templates = " << setprecision(indent) << m_templates << '\n'; if (HasOptionalField(e_gatekeeperID)) strm << setw(indent+15) << "gatekeeperID = " << setprecision(indent) << m_gatekeeperID << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison H501_Descriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, H501_Descriptor), PInvalidCast); #endif const H501_Descriptor & other = (const H501_Descriptor &)obj; Comparison result; if ((result = m_descriptorInfo.Compare(other.m_descriptorInfo)) != EqualTo) return result; if ((result = m_templates.Compare(other.m_templates)) != EqualTo) return result; if ((result = m_gatekeeperID.Compare(other.m_gatekeeperID)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX H501_Descriptor::GetDataLength() const { PINDEX length = 0; length += m_descriptorInfo.GetObjectLength(); length += m_templates.GetObjectLength(); if (HasOptionalField(e_gatekeeperID)) length += m_gatekeeperID.GetObjectLength(); return length; } PBoolean H501_Descriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_descriptorInfo.Decode(strm)) return FALSE; if (!m_templates.Decode(strm)) return FALSE; if (HasOptionalField(e_gatekeeperID) && !m_gatekeeperID.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void H501_Descriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_descriptorInfo.Encode(strm); m_templates.Encode(strm); if (HasOptionalField(e_gatekeeperID)) m_gatekeeperID.Encode(strm); UnknownExtensionsEncode(strm); } PObject * H501_Descriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(H501_Descriptor::Class()), PInvalidCast); #endif return new H501_Descriptor(*this); } #endif // if ! H323_DISABLE_H501 // End of h501.cxx h323plus/src/h323t120.cxx0000644000175000017500000002644411341117627013525 0ustar markmark/* * h323t120.cxx * * H.323 T.120 logical channel establishment * * Open H323 Library * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: h323t120.cxx,v $ * Revision 1.3 2010/02/24 03:40:07 shorne * Added ability to compile without t.38/t.120 support on windows * * Revision 1.2 2008/05/23 11:22:11 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:51:07 shorne * First commit of h323plus * * Revision 1.12 2002/11/10 08:10:43 robertj * Moved constants for "well known" ports to better place (OPAL change). * * Revision 1.11 2002/08/05 10:03:47 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.10 2002/07/02 10:02:32 robertj * Added H323TransportAddress::GetIpAddress() so don't have to provide port * when you don't need it as in GetIpAndPort(),. * * Revision 1.9 2002/06/28 03:34:28 robertj * Fixed issues with address translation on gatekeeper RAS channel. * * Revision 1.8 2002/05/10 05:48:13 robertj * Added the max bit rate field to the data channel capability class. * Added session ID to the data logical channel class. * * Revision 1.7 2002/02/01 01:47:18 robertj * Some more fixes for T.120 channel establishment, more to do! * * Revision 1.6 2002/01/09 00:21:40 robertj * Changes to support outgoing H.245 RequstModeChange. * * Revision 1.5 2001/12/22 03:22:29 robertj * Added create protocol function to H323Connection. * * Revision 1.4 2001/09/12 07:48:05 robertj * Fixed various problems with tracing. * * Revision 1.3 2001/08/06 03:08:57 robertj * Fission of h323.h to h323ep.h & h323con.h, h323.h now just includes files. * * Revision 1.2 2001/07/18 02:27:24 robertj * Fixed GNU warning. * * Revision 1.1 2001/07/17 04:44:32 robertj * Partial implementation of T.120 and T.38 logical channels. * */ #include #include "openh323buildopts.h" #ifdef H323_T120 #ifdef __GNUC__ #pragma implementation "h323t120.h" #endif #include "h323t120.h" #include "h323ep.h" #include "h245.h" #include "t120proto.h" #include "x224.h" #define new PNEW #define T120_MAX_BIT_RATE 825000 ///////////////////////////////////////////////////////////////////////////// H323_T120Capability::H323_T120Capability() : H323DataCapability(T120_MAX_BIT_RATE) { dynamicPortCapability = TRUE; } PObject * H323_T120Capability::Clone() const { return new H323_T120Capability(*this); } unsigned H323_T120Capability::GetSubType() const { return H245_DataApplicationCapability_application::e_t120; } PString H323_T120Capability::GetFormatName() const { return "T.120"; } H323Channel * H323_T120Capability::CreateChannel(H323Connection & connection, H323Channel::Directions direction, unsigned sessionID, const H245_H2250LogicalChannelParameters *) const { return new H323_T120Channel(connection, *this, direction, sessionID); } PBoolean H323_T120Capability::OnSendingPDU(H245_DataApplicationCapability & pdu) const { pdu.m_application.SetTag(H245_DataApplicationCapability_application::e_t120); return OnSendingPDU((H245_DataProtocolCapability &)pdu.m_application); } PBoolean H323_T120Capability::OnSendingPDU(H245_DataMode & pdu) const { pdu.m_application.SetTag(H245_DataMode_application::e_t120); return OnSendingPDU((H245_DataProtocolCapability &)pdu.m_application); } PBoolean H323_T120Capability::OnSendingPDU(H245_DataProtocolCapability & pdu) const { pdu.SetTag(H245_DataProtocolCapability::e_separateLANStack); return TRUE; } PBoolean H323_T120Capability::OnReceivedPDU(const H245_DataApplicationCapability & cap) { if (cap.m_application.GetTag() != H245_DataApplicationCapability_application::e_t120) return FALSE; const H245_DataProtocolCapability & dataCap = cap.m_application; return dataCap.GetTag() == H245_DataProtocolCapability::e_separateLANStack; } ///////////////////////////////////////////////////////////////////////////// H323_T120Channel::H323_T120Channel(H323Connection & connection, const H323Capability & capability, Directions direction, unsigned id) : H323DataChannel(connection, capability, direction, id) { t120handler = NULL; PTRACE(3, "H323T120\tCreated logical channel for T.120"); } void H323_T120Channel::Receive() { HandleChannel(); } void H323_T120Channel::Transmit() { HandleChannel(); } void H323_T120Channel::HandleChannel() { PTRACE(2, "H323T120\tThread started."); if (t120handler == NULL) { PTRACE(1, "H323T120\tNo protocol handler, aborting thread."); } else if (transport == NULL && listener == NULL) { PTRACE(1, "H323T120\tNo listener or transport, aborting thread."); } else if (listener != NULL) { if ((transport = listener->Accept(30000)) != NULL) // 30 second wait for connect back t120handler->Answer(*transport); else { PTRACE(1, "H323T120\tAccept failed, aborting thread."); } } else if (transport->IsOpen()) t120handler->Originate(*transport); else { PTRACE(1, "H323T120\tConnect failed, aborting thread."); } connection.CloseLogicalChannelNumber(number); PTRACE(2, "H323T120\tThread ended"); } PBoolean H323_T120Channel::OnSendingPDU(H245_OpenLogicalChannel & open) const { if (!H323DataChannel::OnSendingPDU(open)) return FALSE; if (!((H323_T120Channel*)this)->CreateListener()) { PTRACE(1, "H323T120\tCould not create listener"); return FALSE; } PTRACE(3, "H323T120\tOnSendingPDU"); open.IncludeOptionalField(H245_OpenLogicalChannel::e_separateStack); open.m_separateStack.IncludeOptionalField(H245_NetworkAccessParameters::e_distribution); open.m_separateStack.m_distribution.SetTag(H245_NetworkAccessParameters_distribution::e_unicast); open.m_separateStack.m_networkAddress.SetTag(H245_NetworkAccessParameters_networkAddress::e_localAreaAddress); H245_TransportAddress & address = open.m_separateStack.m_networkAddress; return listener->SetUpTransportPDU(address, connection.GetControlChannel()); } void H323_T120Channel::OnSendOpenAck(const H245_OpenLogicalChannel & /*open*/, H245_OpenLogicalChannelAck & ack) const { PTRACE(3, "H323T120\tOnSendOpenAck"); if (listener != NULL || transport != NULL) { ack.IncludeOptionalField(H245_OpenLogicalChannelAck::e_separateStack); ack.m_separateStack.IncludeOptionalField(H245_NetworkAccessParameters::e_distribution); ack.m_separateStack.m_distribution.SetTag(H245_NetworkAccessParameters_distribution::e_unicast); ack.m_separateStack.m_networkAddress.SetTag(H245_NetworkAccessParameters_networkAddress::e_localAreaAddress); H245_TransportAddress & address = ack.m_separateStack.m_networkAddress; if (listener != NULL) listener->SetUpTransportPDU(address, connection.GetControlChannel()); else transport->SetUpTransportPDU(address, H323Transport::UseLocalTSAP); } } PBoolean H323_T120Channel::OnReceivedPDU(const H245_OpenLogicalChannel & open, unsigned & errorCode) { number = H323ChannelNumber(open.m_forwardLogicalChannelNumber, TRUE); PTRACE(3, "H323T120\tOnReceivedPDU for channel: " << number); H323EndPoint & endpoint = connection.GetEndPoint(); t120handler = connection.CreateT120ProtocolHandler(); if (t120handler == NULL) { PTRACE(1, "H323T120\tCould not create protocol handler"); errorCode = H245_OpenLogicalChannelReject_cause::e_dataTypeNotAvailable; return FALSE; } PBoolean listen = connection.HadAnsweredCall(); H323TransportAddress address; if (open.HasOptionalField(H245_OpenLogicalChannel::e_separateStack) && open.m_separateStack.m_networkAddress.GetTag() == H245_NetworkAccessParameters_networkAddress::e_localAreaAddress) { address = (const H245_TransportAddress &)open.m_separateStack.m_networkAddress; if (open.m_separateStack.HasOptionalField(H245_NetworkAccessParameters::e_t120SetupProcedure)) listen = open.m_separateStack.m_t120SetupProcedure.GetTag() == H245_NetworkAccessParameters_t120SetupProcedure::e_waitForCall; } if (listen) { if (!address) listener = address.CreateCompatibleListener(endpoint); else { // No address specified, assume same IP as the transport and use default port PIPSocket::Address ip; if (!connection.GetControlChannel().GetLocalAddress().GetIpAddress(ip)) { PTRACE(1, "H323T120\tOnly IPv4 supported"); errorCode = H245_OpenLogicalChannelReject_cause::e_separateStackEstablishmentFailed; return FALSE; } listener = new H323ListenerTCP(endpoint, ip, OpalT120Protocol::DefaultTcpPort, FALSE); } if (!listener->Open()) { PTRACE(1, "H323T120\tCould not open listener"); errorCode = H245_OpenLogicalChannelReject_cause::e_separateStackEstablishmentFailed; return FALSE; } PTRACE(2, "H323T120\tCreated listener on " << listener->GetTransportAddress()); } else { if (address.IsEmpty()) { // No address specified, assume same IP as the transport and use default port PIPSocket::Address ip; if (!connection.GetControlChannel().GetRemoteAddress().GetIpAddress(ip)) { PTRACE(1, "H323T120\tOnly IPv4 supported"); errorCode = H245_OpenLogicalChannelReject_cause::e_separateStackEstablishmentFailed; return FALSE; } address = H323TransportAddress(ip, OpalT120Protocol::DefaultTcpPort); } transport = address.CreateTransport(endpoint); if (transport == NULL) { PTRACE(1, "H323T120\tCould not create transport"); errorCode = H245_OpenLogicalChannelReject_cause::e_separateStackEstablishmentFailed; return FALSE; } transport->SetReadTimeout(10000); // 10 second wait for connect if (!transport->ConnectTo(address)) { PTRACE(1, "H323T120\tCould not connect to remote address: " << address); errorCode = H245_OpenLogicalChannelReject_cause::e_separateStackEstablishmentFailed; return FALSE; } PTRACE(2, "H323T120\tCreated transport from " << transport->GetLocalAddress() << " to " << transport->GetRemoteAddress()); } return TRUE; } PBoolean H323_T120Channel::OnReceivedAckPDU(const H245_OpenLogicalChannelAck & /*ack*/) { PTRACE(3, "H323T120\tOnReceivedAckPDU"); t120handler = connection.CreateT120ProtocolHandler(); if (t120handler == NULL) { PTRACE(1, "H323T120\tCould not create protocol handler"); return FALSE; } return TRUE; } #endif // H323_T120 ///////////////////////////////////////////////////////////////////////////// h323plus/src/h323annexg.cxx0000644000175000017500000003660411015524322014306 0ustar markmark/* * h323annexg.cxx * * Implementation of H.323 Annex G using H.501 * * Open H323 Library * * Copyright (c) 2001 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: h323annexg.cxx,v $ * Revision 1.2 2008/05/23 11:21:54 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:51:06 shorne * First commit of h323plus * * Revision 1.12 2004/07/03 06:51:37 rjongbloed * Added PTRACE_PARAM() macro to fix warnings on parameters used in PTRACE * macros only. * * Revision 1.11 2003/04/09 03:08:10 robertj * Fixed race condition in shutting down transactor (pure virtual call) * * Revision 1.10 2003/04/01 03:14:40 robertj * Fixed passing thru H.501 RIP packet to transactor to handle. * * Revision 1.9 2003/03/26 00:46:29 robertj * Had another go at making H323Transactor being able to be created * without having a listener running. * * Revision 1.8 2003/03/21 05:27:34 robertj * Added setting of remote port in UDP transport constructor. * Added call backs for cached responses. * * Revision 1.7 2003/03/20 01:51:11 robertj * More abstraction of H.225 RAS and H.501 protocols transaction handling. * * Revision 1.6 2003/03/18 13:57:53 craigs * More H.501 implementation * * Revision 1.5 2003/03/17 13:19:31 craigs * More H501 implementation * * Revision 1.4 2003/03/14 06:01:16 craigs * More updates * * Revision 1.3 2003/03/01 00:22:10 craigs * New PeerElement implementation * * Revision 1.2 2003/02/25 06:48:19 robertj * More work on PDU transaction abstraction. * * Revision 1.1 2003/02/21 05:27:06 craigs * Initial version * */ #include #ifdef __GNUC__ #pragma implementation "h323annexg.h" #endif #include #include "h323annexg.h" #include "h323ep.h" #include "h323pdu.h" #include "h501.h" #define new PNEW /////////////////////////////////////////////////////////////////////////////// H323_AnnexG::H323_AnnexG(H323EndPoint & ep, H323Transport * trans) : H323Transactor(ep, trans, DefaultUdpPort, DefaultUdpPort) { Construct(); } H323_AnnexG::H323_AnnexG(H323EndPoint & ep, const H323TransportAddress & addr) : H323Transactor(ep, addr, DefaultUdpPort, DefaultUdpPort) { Construct(); } void H323_AnnexG::Construct() { lastRequest = NULL; requests.DisallowDeleteObjects(); } H323_AnnexG::~H323_AnnexG() { StopChannel(); } void H323_AnnexG::PrintOn(ostream & strm) const { strm << "H501@"; H323Transactor::PrintOn(strm); } H323TransactionPDU * H323_AnnexG::CreateTransactionPDU() const { return new H501PDU; } PBoolean H323_AnnexG::HandleTransaction(const PASN_Object & rawPDU) { const H501PDU & pdu = (const H501PDU &)rawPDU; switch (pdu.m_body.GetTag()) { case H501_MessageBody::e_serviceRequest : if (SendCachedResponse(pdu)) return FALSE; OnReceiveServiceRequest(pdu, pdu.m_body); break; case H501_MessageBody::e_serviceConfirmation : return OnReceiveServiceConfirmation(pdu, pdu.m_body); case H501_MessageBody::e_serviceRejection : return OnReceiveServiceRejection(pdu, pdu.m_body); case H501_MessageBody::e_serviceRelease : if (SendCachedResponse(pdu)) return FALSE; OnReceiveServiceRelease(pdu, pdu.m_body); break; case H501_MessageBody::e_descriptorRequest : if (SendCachedResponse(pdu)) return FALSE; OnReceiveDescriptorRequest(pdu, pdu.m_body); break; case H501_MessageBody::e_descriptorConfirmation : return OnReceiveDescriptorConfirmation(pdu, pdu.m_body); case H501_MessageBody::e_descriptorRejection : return OnReceiveDescriptorRejection(pdu, pdu.m_body); case H501_MessageBody::e_descriptorIDRequest : if (SendCachedResponse(pdu)) return FALSE; OnReceiveDescriptorIDRequest(pdu, pdu.m_body); break; case H501_MessageBody::e_descriptorIDConfirmation : return OnReceiveDescriptorIDConfirmation(pdu, pdu.m_body); case H501_MessageBody::e_descriptorIDRejection : return OnReceiveDescriptorIDRejection(pdu, pdu.m_body); case H501_MessageBody::e_descriptorUpdate : if (SendCachedResponse(pdu)) return FALSE; OnReceiveDescriptorUpdate(pdu, pdu.m_body); break; case H501_MessageBody::e_descriptorUpdateAck : return OnReceiveDescriptorUpdateACK(pdu, pdu.m_body); case H501_MessageBody::e_accessRequest : if (SendCachedResponse(pdu)) return FALSE; OnReceiveAccessRequest(pdu, pdu.m_body); break; case H501_MessageBody::e_accessConfirmation : return OnReceiveAccessConfirmation(pdu, pdu.m_body); case H501_MessageBody::e_accessRejection : return OnReceiveAccessRejection(pdu, pdu.m_body); case H501_MessageBody::e_requestInProgress : return OnReceiveRequestInProgress(pdu, pdu.m_body); case H501_MessageBody::e_nonStandardRequest : if (SendCachedResponse(pdu)) return FALSE; OnReceiveNonStandardRequest(pdu, pdu.m_body); break; case H501_MessageBody::e_nonStandardConfirmation : return OnReceiveNonStandardConfirmation(pdu, pdu.m_body); case H501_MessageBody::e_nonStandardRejection : return OnReceiveNonStandardRejection(pdu, pdu.m_body); case H501_MessageBody::e_unknownMessageResponse : OnReceiveUnknownMessageResponse(pdu, pdu.m_body); break; case H501_MessageBody::e_usageRequest : if (SendCachedResponse(pdu)) return FALSE; OnReceiveUsageRequest(pdu, pdu.m_body); break; case H501_MessageBody::e_usageConfirmation : return OnReceiveUsageConfirmation(pdu, pdu.m_body); case H501_MessageBody::e_usageIndication : if (SendCachedResponse(pdu)) return FALSE; OnReceiveUnknownMessageResponse(pdu, pdu.m_body); break; case H501_MessageBody::e_usageIndicationConfirmation : return OnReceiveUsageIndicationConfirmation(pdu, pdu.m_body); case H501_MessageBody::e_usageIndicationRejection : return OnReceiveUsageIndicationRejection(pdu, pdu.m_body); case H501_MessageBody::e_usageRejection : return OnReceiveUsageRejection(pdu, pdu.m_body); case H501_MessageBody::e_validationRequest : if (SendCachedResponse(pdu)) return FALSE; OnReceiveValidationRequest(pdu, pdu.m_body); break; case H501_MessageBody::e_validationConfirmation : return OnReceiveValidationConfirmation(pdu, pdu.m_body); case H501_MessageBody::e_validationRejection : return OnReceiveValidationRejection(pdu, pdu.m_body); case H501_MessageBody::e_authenticationRequest : if (SendCachedResponse(pdu)) return FALSE; OnReceiveAuthenticationRequest(pdu, pdu.m_body); break; case H501_MessageBody::e_authenticationConfirmation : return OnReceiveAuthenticationConfirmation(pdu, pdu.m_body); case H501_MessageBody::e_authenticationRejection : return OnReceiveAuthenticationRejection(pdu, pdu.m_body); default : OnReceiveUnknown(pdu); } return FALSE; } void H323_AnnexG::OnSendingPDU(PASN_Object & /*rawPDU*/) { } PBoolean H323_AnnexG::OnReceiveUnknown(const H501PDU &) { H501PDU response; response.BuildUnknownMessageResponse(0); return response.Write(*transport); } PBoolean H323_AnnexG::OnReceiveServiceRequest(const H501PDU & pdu, const H501_ServiceRequest & /*pduBody*/) { PTRACE(3, "AnnexG\tOnReceiveServiceRequest - seq: " << pdu.m_common.m_sequenceNumber); H501PDU response; response.BuildServiceRejection(pdu.m_common.m_sequenceNumber, H501_ServiceRejectionReason::e_serviceUnavailable); return response.Write(*transport); } PBoolean H323_AnnexG::OnReceiveServiceConfirmation(const H501PDU & pdu, const H501_ServiceConfirmation & /*pduBody*/) { return CheckForResponse(H501_MessageBody::e_serviceRequest, pdu.m_common.m_sequenceNumber); } PBoolean H323_AnnexG::OnReceiveServiceRejection(const H501PDU & pdu, const H501_ServiceRejection & pduBody) { return CheckForResponse(H501_MessageBody::e_serviceRequest, pdu.m_common.m_sequenceNumber, &pduBody.m_reason); } PBoolean H323_AnnexG::OnReceiveServiceRelease(const H501PDU & /*common*/, const H501_ServiceRelease & /*pdu*/) { return FALSE; } PBoolean H323_AnnexG::OnReceiveDescriptorRequest(const H501PDU & PTRACE_PARAM(pdu), const H501_DescriptorRequest & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveDescriptorRequest - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } PBoolean H323_AnnexG::OnReceiveDescriptorConfirmation(const H501PDU & PTRACE_PARAM(pdu), const H501_DescriptorConfirmation & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveDescriptorConfirmation - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } PBoolean H323_AnnexG::OnReceiveDescriptorRejection(const H501PDU & PTRACE_PARAM(pdu), const H501_DescriptorRejection & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveDescriptorRejection - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } PBoolean H323_AnnexG::OnReceiveDescriptorIDRequest(const H501PDU & PTRACE_PARAM(pdu), const H501_DescriptorIDRequest & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveDescriptorIDRequest - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } PBoolean H323_AnnexG::OnReceiveDescriptorIDConfirmation(const H501PDU & PTRACE_PARAM(pdu), const H501_DescriptorIDConfirmation & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveDescriptorIDConfirmation - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } PBoolean H323_AnnexG::OnReceiveDescriptorIDRejection(const H501PDU & PTRACE_PARAM(pdu), const H501_DescriptorIDRejection & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveDescriptorIDRejection - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } PBoolean H323_AnnexG::OnReceiveDescriptorUpdate(const H501PDU & PTRACE_PARAM(pdu), const H501_DescriptorUpdate & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveDescriptorUpdate - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } PBoolean H323_AnnexG::OnReceiveDescriptorUpdateACK(const H501PDU & pdu, const H501_DescriptorUpdateAck & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveDescriptorUpdateACK - seq: " << pdu.m_common.m_sequenceNumber); return CheckForResponse(H501_MessageBody::e_descriptorUpdate, pdu.m_common.m_sequenceNumber); } PBoolean H323_AnnexG::OnReceiveAccessRequest(const H501PDU & PTRACE_PARAM(pdu), const H501_AccessRequest & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveAccessRequest - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } PBoolean H323_AnnexG::OnReceiveAccessConfirmation(const H501PDU & pdu, const H501_AccessConfirmation & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveAccessConfirmation - seq: " << pdu.m_common.m_sequenceNumber); return CheckForResponse(H501_MessageBody::e_accessRequest, pdu.m_common.m_sequenceNumber); } PBoolean H323_AnnexG::OnReceiveAccessRejection(const H501PDU & pdu, const H501_AccessRejection & pduBody) { PTRACE(3, "AnnexG\tOnReceiveAccessRejection - seq: " << pdu.m_common.m_sequenceNumber); return CheckForResponse(H501_MessageBody::e_accessRequest, pdu.m_common.m_sequenceNumber, &pduBody.m_reason); } PBoolean H323_AnnexG::OnReceiveRequestInProgress(const H501PDU & pdu, const H501_RequestInProgress & rip) { return HandleRequestInProgress(pdu, rip.m_delay); } PBoolean H323_AnnexG::OnReceiveNonStandardRequest(const H501PDU & PTRACE_PARAM(pdu), const H501_NonStandardRequest & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveNonStandardRequest - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } PBoolean H323_AnnexG::OnReceiveNonStandardConfirmation(const H501PDU & PTRACE_PARAM(pdu), const H501_NonStandardConfirmation & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveNonStandardConfirmation - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } PBoolean H323_AnnexG::OnReceiveNonStandardRejection(const H501PDU & PTRACE_PARAM(pdu), const H501_NonStandardRejection & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveNonStandardRejection - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } PBoolean H323_AnnexG::OnReceiveUnknownMessageResponse(const H501PDU & PTRACE_PARAM(pdu), const H501_UnknownMessageResponse & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveUnknownMessageResponse - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } PBoolean H323_AnnexG::OnReceiveUsageRequest(const H501PDU & PTRACE_PARAM(pdu), const H501_UsageRequest & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveUsageRequest - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } PBoolean H323_AnnexG::OnReceiveUsageConfirmation(const H501PDU & PTRACE_PARAM(pdu), const H501_UsageConfirmation & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveUsageConfirmation - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } PBoolean H323_AnnexG::OnReceiveUsageIndicationConfirmation(const H501PDU & PTRACE_PARAM(pdu), const H501_UsageIndicationConfirmation & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveUsageIndicationConfirmation - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } PBoolean H323_AnnexG::OnReceiveUsageIndicationRejection(const H501PDU & PTRACE_PARAM(pdu), const H501_UsageIndicationRejection & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveUsageIndicationRejection - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } PBoolean H323_AnnexG::OnReceiveUsageRejection(const H501PDU & PTRACE_PARAM(pdu), const H501_UsageRejection & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveUsageRejection - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } PBoolean H323_AnnexG::OnReceiveValidationRequest(const H501PDU & PTRACE_PARAM(pdu), const H501_ValidationRequest & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveValidationRequest - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } PBoolean H323_AnnexG::OnReceiveValidationConfirmation(const H501PDU & PTRACE_PARAM(pdu), const H501_ValidationConfirmation & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveValidationConfirmation - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } PBoolean H323_AnnexG::OnReceiveValidationRejection(const H501PDU & PTRACE_PARAM(pdu), const H501_ValidationRejection & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveValidationRejection - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } PBoolean H323_AnnexG::OnReceiveAuthenticationRequest(const H501PDU & PTRACE_PARAM(pdu), const H501_AuthenticationRequest & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveAuthenticationRequest - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } PBoolean H323_AnnexG::OnReceiveAuthenticationConfirmation(const H501PDU & PTRACE_PARAM(pdu), const H501_AuthenticationConfirmation & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveAuthenticationConfirmation - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } PBoolean H323_AnnexG::OnReceiveAuthenticationRejection(const H501PDU & PTRACE_PARAM(pdu), const H501_AuthenticationRejection & /*pdu*/) { PTRACE(3, "AnnexG\tOnReceiveAuthenticationRejection - seq: " << pdu.m_common.m_sequenceNumber); return FALSE; } ///////////////////////////////////////////////////////////////////////////// h323plus/src/h323trans.cxx0000644000175000017500000005767011647300515014172 0ustar markmark/* * h323trans.cxx * * H.323 Transactor handler * * Open H323 Library * * Copyright (c) 2003 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Id: h323trans.cxx,v 1.3 2011/10/18 13:38:21 shorne Exp $ * */ #include #ifdef __GNUC__ #pragma implementation "h323trans.h" #endif #include "h323trans.h" #include "h323ep.h" #include "h323pdu.h" #include static PTimeInterval ResponseRetirementAge(0, 30); // Seconds #define new PNEW ///////////////////////////////////////////////////////////////////////////////// H323TransactionPDU::H323TransactionPDU() { } H323TransactionPDU::H323TransactionPDU(const H235Authenticators & auth) : authenticators(auth) { } ostream & operator<<(ostream & strm, const H323TransactionPDU & pdu) { pdu.GetPDU().PrintOn(strm); return strm; } PBoolean H323TransactionPDU::Read(H323Transport & transport) { if (!transport.ReadPDU(rawPDU)) { PTRACE(1, GetProtocolName() << "\tRead error (" << transport.GetErrorNumber(PChannel::LastReadError) << "): " << transport.GetErrorText(PChannel::LastReadError)); return FALSE; } rawPDU.ResetDecoder(); PBoolean ok = GetPDU().Decode(rawPDU); if (!ok) { PTRACE(1, GetProtocolName() << "\tRead error: PER decode failure:\n " << setprecision(2) << rawPDU << "\n " << setprecision(2) << *this); GetChoice().SetTag(UINT_MAX); return TRUE; } H323TraceDumpPDU(GetProtocolName(), FALSE, rawPDU, GetPDU(), GetChoice(), GetSequenceNumber(), transport.GetLocalAddress(), transport.GetLastReceivedAddress()); return TRUE; } PBoolean H323TransactionPDU::Write(H323Transport & transport) { PPER_Stream strm; GetPDU().Encode(strm); strm.CompleteEncoding(); // Finalise the security if present for (PINDEX i = 0; i < authenticators.GetSize(); i++) authenticators[i].Finalise(strm); H323TraceDumpPDU("Trans", TRUE, strm, GetPDU(), GetChoice(), GetSequenceNumber(), transport.GetLocalAddress(), transport.GetRemoteAddress()); if (transport.WritePDU(strm)) return TRUE; PTRACE(1, GetProtocolName() << "\tWrite PDU failed (" << transport.GetErrorNumber(PChannel::LastWriteError) << "): " << transport.GetErrorText(PChannel::LastWriteError)); return FALSE; } ///////////////////////////////////////////////////////////////////////////////// H323Transactor::H323Transactor(H323EndPoint & ep, H323Transport * trans, WORD local_port, WORD remote_port) : endpoint(ep), defaultLocalPort(local_port), defaultRemotePort(remote_port) { if (trans != NULL) transport = trans; else transport = new H323TransportUDP(ep, PIPSocket::Address::GetAny(4), local_port, remote_port); Construct(); } H323Transactor::H323Transactor(H323EndPoint & ep, const H323TransportAddress & iface, WORD local_port, WORD remote_port) : endpoint(ep), defaultLocalPort(local_port), defaultRemotePort(remote_port) { if (iface.IsEmpty()) transport = NULL; else { PIPSocket::Address addr; PAssert(iface.GetIpAndPort(addr, local_port), "Cannot parse address"); transport = new H323TransportUDP(ep, addr, local_port, remote_port); } Construct(); } void H323Transactor::Construct() { nextSequenceNumber = PRandom::Number()%65536; checkResponseCryptoTokens = TRUE; lastRequest = NULL; requests.DisallowDeleteObjects(); } H323Transactor::~H323Transactor() { StopChannel(); } void H323Transactor::PrintOn(ostream & strm) const { if (transport == NULL) strm << "<>"; else { H323TransportAddress addr = transport->GetRemoteAddress(); PIPSocket::Address ip; WORD port; if (addr.GetIpAndPort(ip, port)) { strm << PIPSocket::GetHostName(ip); if (port != defaultRemotePort) strm << ':' << port; } else strm << addr; } } PBoolean H323Transactor::SetTransport(const H323TransportAddress & iface) { H323Transport * oldTransport = NULL; PIPSocket::Address addr; WORD port = defaultLocalPort; { PWaitAndSignal mutex(pduWriteMutex); if (transport != NULL && transport->GetLocalAddress().IsEquivalent(iface)) { PTRACE(2, "Trans\tAlready have listener for " << iface); return TRUE; } if (!iface.GetIpAndPort(addr, port)) { PTRACE(2, "Trans\tCannot create listener for " << iface); return FALSE; } oldTransport = transport; transport = NULL; } if (oldTransport != NULL) { PTRACE(4, "H323\tShutting down transactor thread on " << oldTransport->GetLocalAddress()); oldTransport->CleanUpOnTermination(); delete oldTransport; } { PWaitAndSignal mutex(pduWriteMutex); transport = new H323TransportUDP(endpoint, addr, port, defaultRemotePort); transport->SetPromiscuous(H323Transport::AcceptFromAny); return StartChannel(); } } H323TransportAddressArray H323Transactor::GetInterfaceAddresses(PBoolean excludeLocalHost, H323Transport * associatedTransport) { if (transport == NULL) return H323TransportAddressArray(); else return H323GetInterfaceAddresses(transport->GetLocalAddress(), excludeLocalHost, associatedTransport); } PBoolean H323Transactor::StartChannel() { if (transport == NULL) return FALSE; transport->AttachThread(PThread::Create(PCREATE_NOTIFIER(HandleTransactions), 0, PThread::NoAutoDeleteThread, PThread::NormalPriority, "Transactor:%x")); return TRUE; } void H323Transactor::StopChannel() { if (transport != NULL) { transport->CleanUpOnTermination(); delete transport; transport = NULL; } } void H323Transactor::HandleTransactions(PThread &, INT) { if (PAssertNULL(transport) == NULL) return; PTRACE(2, "Trans\tStarting listener thread on " << *transport); transport->SetReadTimeout(PMaxTimeInterval); PINDEX consecutiveErrors = 0; PBoolean ok = TRUE; while (ok) { PTRACE(5, "Trans\tReading PDU"); H323TransactionPDU * response = CreateTransactionPDU(); if (response->Read(*transport)) { consecutiveErrors = 0; lastRequest = NULL; if (HandleTransaction(response->GetPDU())) lastRequest->responseHandled.Signal(); if (lastRequest != NULL) lastRequest->responseMutex.Signal(); } else { switch (transport->GetErrorCode(PChannel::LastReadError)) { case PChannel::Interrupted : if (transport->IsOpen()) break; // Do NotOpen case case PChannel::NotOpen : ok = FALSE; break; default : switch (transport->GetErrorNumber(PChannel::LastReadError)) { case ECONNRESET: case ECONNREFUSED: PTRACE(2, "Trans\tCannot access remote " << transport->GetRemoteAddress()); break; default: PTRACE(1, "Trans\tRead error: " << transport->GetErrorText(PChannel::LastReadError)); if (++consecutiveErrors > 10) ok = FALSE; } } } delete response; AgeResponses(); } PTRACE(2, "Trans\tEnded listener thread on " << *transport); } PBoolean H323Transactor::SetUpCallSignalAddresses(H225_ArrayOf_TransportAddress & addresses) { if (PAssertNULL(transport) == NULL) return FALSE; H225_TransportAddress rasAddress; transport->SetUpTransportPDU(rasAddress, TRUE); H323SetTransportAddresses(*transport, endpoint.GetInterfaceAddresses(FALSE, transport), addresses); return addresses.GetSize() > 0; } unsigned H323Transactor::GetNextSequenceNumber() { PWaitAndSignal mutex(nextSequenceNumberMutex); nextSequenceNumber++; if (nextSequenceNumber >= 65536) nextSequenceNumber = 1; return nextSequenceNumber; } void H323Transactor::AgeResponses() { PTime now; PWaitAndSignal mutex(pduWriteMutex); for (PINDEX i = 0; i < responses.GetSize(); i++) { const Response & response = responses[i]; if ((now - response.lastUsedTime) > response.retirementAge) { PTRACE(4, "Trans\tRemoving cached response: " << response); responses.RemoveAt(i--); } } } PBoolean H323Transactor::SendCachedResponse(const H323TransactionPDU & pdu) { if (PAssertNULL(transport) == NULL) return FALSE; Response key(transport->GetLastReceivedAddress(), pdu.GetSequenceNumber()); PWaitAndSignal mutex(pduWriteMutex); PINDEX idx = responses.GetValuesIndex(key); if (idx != P_MAX_INDEX) return responses[idx].SendCachedResponse(*transport); responses.Append(new Response(key)); return FALSE; } PBoolean H323Transactor::WritePDU(H323TransactionPDU & pdu) { if (PAssertNULL(transport) == NULL) return FALSE; OnSendingPDU(pdu.GetPDU()); PWaitAndSignal mutex(pduWriteMutex); Response key(transport->GetLastReceivedAddress(), pdu.GetSequenceNumber()); PINDEX idx = responses.GetValuesIndex(key); if (idx != P_MAX_INDEX) responses[idx].SetPDU(pdu); return pdu.Write(*transport); } PBoolean H323Transactor::WriteTo(H323TransactionPDU & pdu, const H323TransportAddressArray & addresses, PBoolean callback) { if (PAssertNULL(transport) == NULL) return FALSE; if (addresses.IsEmpty()) { if (callback) return WritePDU(pdu); return pdu.Write(*transport); } pduWriteMutex.Wait(); H323TransportAddress oldAddress = transport->GetRemoteAddress(); PBoolean ok = FALSE; for (PINDEX i = 0; i < addresses.GetSize(); i++) { if (transport->ConnectTo(addresses[i])) { PTRACE(3, "Trans\tWrite address set to " << addresses[i]); if (callback) ok = WritePDU(pdu); else ok = pdu.Write(*transport); } } transport->ConnectTo(oldAddress); pduWriteMutex.Signal(); return ok; } PBoolean H323Transactor::MakeRequest(Request & request) { PTRACE(3, "Trans\tMaking request: " << request.requestPDU.GetChoice().GetTagName()); OnSendingPDU(request.requestPDU.GetPDU()); requestsMutex.Wait(); requests.SetAt(request.sequenceNumber, &request); requestsMutex.Signal(); PBoolean ok = request.Poll(*this); requestsMutex.Wait(); requests.SetAt(request.sequenceNumber, NULL); requestsMutex.Signal(); return ok; } PBoolean H323Transactor::CheckForResponse(unsigned reqTag, unsigned seqNum, const PASN_Choice * reason) { requestsMutex.Wait(); lastRequest = requests.GetAt(seqNum); if (lastRequest == NULL) { requestsMutex.Signal(); PTRACE(3, "Trans\tTimed out or received sequence number (" << seqNum << ") for PDU we never requested"); return FALSE; } lastRequest->responseMutex.Wait(); lastRequest->CheckResponse(reqTag, reason); requestsMutex.Signal(); return TRUE; } PBoolean H323Transactor::HandleRequestInProgress(const H323TransactionPDU & pdu, unsigned delay) { unsigned seqNum = pdu.GetSequenceNumber(); requestsMutex.Wait(); lastRequest = requests.GetAt(seqNum); if (lastRequest == NULL) { requestsMutex.Signal(); PTRACE(3, "Trans\tTimed out or received sequence number (" << seqNum << ") for PDU we never requested"); return FALSE; } lastRequest->responseMutex.Wait(); PTRACE(3, "Trans\tReceived RIP on sequence number " << seqNum); lastRequest->OnReceiveRIP(delay); requestsMutex.Signal(); return TRUE; } PBoolean H323Transactor::CheckCryptoTokens(const H323TransactionPDU & pdu, const PASN_Array & clearTokens, unsigned clearOptionalField, const PASN_Array & cryptoTokens, unsigned cryptoOptionalField) { // If cypto token checking disabled, just return TRUE. if (!GetCheckResponseCryptoTokens()) return TRUE; if (lastRequest != NULL && pdu.GetAuthenticators().IsEmpty()) { ((H323TransactionPDU &)pdu).SetAuthenticators(lastRequest->requestPDU.GetAuthenticators()); PTRACE(4, "Trans\tUsing credentials from request: " << setfill(',') << pdu.GetAuthenticators() << setfill(' ')); } if (pdu.Validate(clearTokens, clearOptionalField, cryptoTokens, cryptoOptionalField) == H235Authenticator::e_OK) return TRUE; /* Note that a crypto tokens error is flagged to the requestor in the responseResult field but the other thread is NOT signalled. This is so it can wait for the full timeout for any other packets that might have the correct tokens, preventing a possible DOS attack. */ if (lastRequest != NULL) { lastRequest->responseResult = Request::BadCryptoTokens; lastRequest->responseHandled.Signal(); lastRequest->responseMutex.Signal(); lastRequest = NULL; } return FALSE; } ///////////////////////////////////////////////////////////////////////////// H323Transactor::Request::Request(unsigned seqNum, H323TransactionPDU & pdu) : requestPDU(pdu) { sequenceNumber = seqNum; responseInfo = NULL; } H323Transactor::Request::Request(unsigned seqNum, H323TransactionPDU & pdu, const H323TransportAddressArray & addresses) : requestAddresses(addresses), requestPDU(pdu) { sequenceNumber = seqNum; responseInfo = NULL; } PBoolean H323Transactor::Request::Poll(H323Transactor & rasChannel) { H323EndPoint & endpoint = rasChannel.GetEndPoint(); responseResult = AwaitingResponse; for (unsigned retry = 1; retry <= endpoint.GetRasRequestRetries(); retry++) { // To avoid race condition with RIP must set timeout before sending the packet whenResponseExpected = PTimer::Tick() + endpoint.GetRasRequestTimeout(); if (!rasChannel.WriteTo(requestPDU, requestAddresses, FALSE)) break; PTRACE(3, "Trans\tWaiting on response to seqnum=" << requestPDU.GetSequenceNumber() << " for " << setprecision(1) << endpoint.GetRasRequestTimeout() << " seconds"); do { // Wait for a response responseHandled.Wait(whenResponseExpected - PTimer::Tick()); PWaitAndSignal mutex(responseMutex); // Wait till lastRequest goes out of scope switch (responseResult) { case AwaitingResponse : // Was a timeout responseResult = NoResponseReceived; break; case ConfirmReceived : return TRUE; case RejectReceived : return FALSE; case BadCryptoTokens : PTRACE(2, "Trans\tResponse to seqnum=" << requestPDU.GetSequenceNumber() << " had invalid crypto tokens."); return FALSE; default : // RequestInProgress responseResult = AwaitingResponse; // Keep waiting } PTRACE_IF(3, responseResult == AwaitingResponse, "Trans\tWaiting again on response to seqnum=" << requestPDU.GetSequenceNumber() << " for " << setprecision(1) << (whenResponseExpected - PTimer::Tick()) << " seconds"); } while (responseResult == AwaitingResponse); PTRACE(1, "Trans\tTimeout on request seqnum=" << requestPDU.GetSequenceNumber() << ", try #" << retry << " of " << endpoint.GetRasRequestRetries()); } return FALSE; } void H323Transactor::Request::CheckResponse(unsigned reqTag, const PASN_Choice * reason) { if (requestPDU.GetChoice().GetTag() != reqTag) { PTRACE(3, "Trans\tReceived reply for incorrect PDU tag."); responseResult = RejectReceived; rejectReason = UINT_MAX; return; } if (reason == NULL) { responseResult = ConfirmReceived; return; } PTRACE(1, "Trans\t" << requestPDU.GetChoice().GetTagName() << " rejected: " << reason->GetTagName()); responseResult = RejectReceived; rejectReason = reason->GetTag(); switch(reqTag) { case H225_RasMessage::e_admissionRequest: if (rejectReason == H225_AdmissionRejectReason::e_callerNotRegistered) responseResult = TryAlternate; break; case H225_RasMessage::e_gatekeeperRequest: if (rejectReason == H225_GatekeeperRejectReason::e_resourceUnavailable) responseResult = TryAlternate; break; case H225_RasMessage::e_disengageRequest: if (rejectReason == H225_DisengageRejectReason::e_notRegistered) responseResult = TryAlternate; break; case H225_RasMessage::e_registrationRequest: if (rejectReason == H225_RegistrationRejectReason::e_resourceUnavailable) responseResult = TryAlternate; break; case H225_RasMessage::e_infoRequestResponse: if (rejectReason == H225_InfoRequestNakReason::e_notRegistered) responseResult = TryAlternate; break; } } void H323Transactor::Request::OnReceiveRIP(unsigned milliseconds) { responseResult = RequestInProgress; whenResponseExpected = PTimer::Tick() + PTimeInterval(milliseconds); } ///////////////////////////////////////////////////////////////////////////// H323Transactor::Response::Response(const H323TransportAddress & addr, unsigned seqNum) : PString(addr), retirementAge(ResponseRetirementAge) { sprintf("#%u", seqNum); replyPDU = NULL; } H323Transactor::Response::~Response() { if (replyPDU != NULL) replyPDU->DeletePDU(); } void H323Transactor::Response::SetPDU(const H323TransactionPDU & pdu) { PTRACE(4, "Trans\tAdding cached response: " << *this); if (replyPDU != NULL) replyPDU->DeletePDU(); replyPDU = pdu.ClonePDU(); lastUsedTime = PTime(); unsigned delay = pdu.GetRequestInProgressDelay(); if (delay > 0) retirementAge = ResponseRetirementAge + delay; } PBoolean H323Transactor::Response::SendCachedResponse(H323Transport & transport) { PTRACE(3, "Trans\tSending cached response: " << *this); if (replyPDU != NULL) { H323TransportAddress oldAddress = transport.GetRemoteAddress(); transport.ConnectTo(Left(FindLast('#'))); replyPDU->Write(transport); transport.ConnectTo(oldAddress); } else { PTRACE(2, "Trans\tRetry made by remote before sending response: " << *this); } lastUsedTime = PTime(); return TRUE; } ///////////////////////////////////////////////////////////////////////////////// H323Transaction::H323Transaction(H323Transactor & trans, const H323TransactionPDU & requestToCopy, H323TransactionPDU * conf, H323TransactionPDU * rej) : transactor(trans), replyAddresses(trans.GetTransport().GetLastReceivedAddress()), request(requestToCopy.ClonePDU()) { confirm = conf; reject = rej; authenticatorResult = H235Authenticator::e_Disabled; fastResponseRequired = TRUE; isBehindNAT = FALSE; canSendRIP = FALSE; } H323Transaction::~H323Transaction() { delete request; delete confirm; delete reject; } PBoolean H323Transaction::HandlePDU() { int response = OnHandlePDU(); switch (response) { case Ignore : return FALSE; case Confirm : if (confirm != NULL) WritePDU(*confirm); return FALSE; case Reject : if (reject != NULL) WritePDU(*reject); return FALSE; } H323TransactionPDU * rip = CreateRIP(request->GetSequenceNumber(), response); PBoolean ok = WritePDU(*rip); delete rip; if (!ok) return FALSE; if (fastResponseRequired) { fastResponseRequired = FALSE; PThread::Create(PCREATE_NOTIFIER(SlowHandler), 0, PThread::AutoDeleteThread, PThread::NormalPriority, "Transaction:%x"); } return TRUE; } void H323Transaction::SlowHandler(PThread &, INT) { PTRACE(3, "Trans\tStarted slow PDU handler thread."); while (HandlePDU()) ; delete this; PTRACE(3, "Trans\tEnded slow PDU handler thread."); } PBoolean H323Transaction::WritePDU(H323TransactionPDU & pdu) { pdu.SetAuthenticators(authenticators); return transactor.WriteTo(pdu, replyAddresses, TRUE); } PBoolean H323Transaction::CheckCryptoTokens(const H235Authenticators & auth) { authenticators = auth; request->SetAuthenticators(authenticators); authenticatorResult = ValidatePDU(); if (authenticatorResult == H235Authenticator::e_OK) return TRUE; PTRACE(2, "Trans\t" << GetName() << " rejected, security tokens invalid."); return FALSE; } ///////////////////////////////////////////////////////////////////////////////// H323TransactionServer::H323TransactionServer(H323EndPoint & ep) : ownerEndPoint(ep) { usingAllInterfaces = FALSE; } H323TransactionServer::~H323TransactionServer() { } PBoolean H323TransactionServer::AddListeners(const H323TransportAddressArray & ifaces) { if (ifaces.IsEmpty()) return AddListener("*"); PINDEX i; mutex.Wait(); for (i = 0; i < listeners.GetSize(); i++) { PBoolean remove = TRUE; for (PINDEX j = 0; j < ifaces.GetSize(); j++) { if (listeners[i].GetTransport().GetLocalAddress().IsEquivalent(ifaces[j])) { remove = FALSE; break; } } if (remove) { PTRACE(3, "Trans\tRemoving listener " << listeners[i]); listeners.RemoveAt(i--); } } mutex.Signal(); for (i = 0; i < ifaces.GetSize(); i++) { if (!ifaces[i]) AddListener(ifaces[i]); } return listeners.GetSize() > 0; } PBoolean H323TransactionServer::AddListener(const H323TransportAddress & interfaceName) { PIPSocket::Address addr; WORD port = GetDefaultUdpPort(); PBoolean hasInterfaceInfo = interfaceName.GetIpAndPort(addr, port); if (port == 0) port = GetDefaultUdpPort(); PWaitAndSignal wait(mutex); if (hasInterfaceInfo && !addr.IsAny()) { if (usingAllInterfaces) { listeners.RemoveAll(); usingAllInterfaces = FALSE; } for (PINDEX i = 0; i < listeners.GetSize(); i++) { if (listeners[i].GetTransport().GetLocalAddress().IsEquivalent(interfaceName)) { PTRACE(2, "H323\tAlready have listener for " << interfaceName); return TRUE; } } PTRACE(2, "H323\tAdding listener for " << interfaceName); return AddListener(new H323TransportUDP(ownerEndPoint, addr, port)); } if (!usingAllInterfaces) { listeners.RemoveAll(); usingAllInterfaces = TRUE; } return AddListener(new H323TransportUDP(ownerEndPoint, PIPSocket::Address(PIPSocket::GetDefaultIpAny()), port)); } PBoolean H323TransactionServer::AddListener(H323Transport * transport) { if (transport == NULL) return FALSE; if (!transport->IsOpen()) { delete transport; return FALSE; } return AddListener(CreateListener(transport)); } PBoolean H323TransactionServer::AddListener(H323Transactor * listener) { if (listener == NULL) return FALSE; PTRACE(3, "Trans\tStarted listener " << *listener); mutex.Wait(); listeners.Append(listener); mutex.Signal(); listener->StartChannel(); return TRUE; } PBoolean H323TransactionServer::RemoveListener(H323Transactor * listener) { PBoolean ok = TRUE; mutex.Wait(); if (listener != NULL) { PTRACE(3, "Trans\tRemoving listener " << *listener); ok = listeners.Remove(listener); } else { PTRACE(3, "Trans\tRemoving all listeners"); listeners.RemoveAll(); } mutex.Signal(); return ok; } ///////////////////////////////////////////////////////////////////////////////// h323plus/src/h235pluginmgr.cxx0000644000175000017500000002742311634344142015042 0ustar markmark/* * h235pluginmgr.cxx * * h235 Implementation for the h323plus library. * * * Copyright (c) 2006 ISVO (Asia) Pte Ltd. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * * * Contributor(s): ______________________________________. * * $Id: h235pluginmgr.cxx,v 1.5 2011/09/15 09:41:54 shorne Exp $ * */ #ifdef __GNUC__ #pragma implementation "h235pluginmgr.h" #endif #include #include #include "h235pluginmgr.h" #include "h235plugin.h" #include #include #ifdef _MSC_VER #pragma warning(disable:4700) #endif ///////////////////////////////////////////////////////////////////////////////////// static int PluginControl(Pluginh235_Definition * h235, void * context, const char * name, const char * parm, const char * val) { Pluginh235_ControlDefn * controls = h235->h235Controls; if (controls == NULL) return 0; while (controls->name != NULL) { if (strcmp(controls->name, name) == 0) return (*controls->control)(h235, context, parm, val); controls++; } return 0; } H235PluginAuthenticator::H235PluginAuthenticator(Pluginh235_Definition * _def) : def(_def) { switch (def->flags & Pluginh235_TokenTypeMask) { case Pluginh235_TokenTypecrypto: switch (def->flags & Pluginh235_TokenTypeMask) { case Pluginh235_TokenStyleHash: type = H235_AuthenticationMechanism::e_pwdHash; break; case Pluginh235_TokenStyleSigned: type = H235_AuthenticationMechanism::e_certSign; break; case Pluginh235_TokenStyleEncrypted: type = H235_AuthenticationMechanism::e_pwdSymEnc; break; default: type = H235_AuthenticationMechanism::e_nonStandard; } break; case Pluginh235_TokenTypeclear: type = H235_AuthenticationMechanism::e_authenticationBES; break; default: type = H235_AuthenticationMechanism::e_nonStandard; break; } SetTimestampGracePeriod(2*60*60+10); /// 2hrs 10min } H235_ClearToken * H235PluginAuthenticator::CreateClearToken() { BYTE data; unsigned dataLen; int ret = (*def->h235function)(def, NULL, H235_BuildClear, &data, &dataLen,NULL,0); if (ret == 0) return NULL; PPER_Stream raw(&data,dataLen); H235_ClearToken * token = new H235_ClearToken; token->Decode(raw); return token; } H225_CryptoH323Token * H235PluginAuthenticator::CreateCryptoToken() { BYTE data; unsigned dataLen; int ret = (*def->h235function)(def, NULL, H235_BuildCrypto, &data, &dataLen,NULL,0); if (ret == 0) return NULL; PPER_Stream raw(&data,dataLen); H225_CryptoH323Token * token = new H225_CryptoH323Token; token->Decode(raw); return token; } PBoolean H235PluginAuthenticator::Finalise(PBYTEArray & rawPDU) { BYTE * data = rawPDU.GetPointer(); unsigned dataLen = rawPDU.GetSize(); int ret = (*def->h235function)(def, NULL, H235_FinaliseCrypto, data, &dataLen,NULL,0); if (ret == 0) return FALSE; PBYTEArray newPDU(data,dataLen); rawPDU = newPDU; return TRUE; } H235Authenticator::ValidationResult H235PluginAuthenticator::ValidateClearToken(const H235_ClearToken & clearToken) { PPER_Stream enc; clearToken.Encode(enc); BYTE * data = enc.GetPointer(); unsigned dataLen = enc.GetSize(); int ret = (*def->h235function)(def, NULL, H235_ValidateClear, data, &dataLen,NULL,0); return (H235Authenticator::ValidationResult)ret; } H235Authenticator::ValidationResult H235PluginAuthenticator::ValidateCryptoToken(const H225_CryptoH323Token & cryptoToken, const PBYTEArray & rawPDU) { PPER_Stream enc; cryptoToken.Encode(enc); BYTE * data = enc.GetPointer(); unsigned dataLen = enc.GetSize(); const BYTE * raw = rawPDU; unsigned rawLen = rawPDU.GetSize(); int ret = (*def->h235function)(def, NULL, H235_ValidateClear, data, &dataLen, raw, &rawLen); return (H235Authenticator::ValidationResult)ret; } PBoolean H235PluginAuthenticator::IsCapability(const H235_AuthenticationMechanism & mechanism, const PASN_ObjectId & algorithmOID) { return ((mechanism.GetTag() == type) && (algorithmOID.AsString() == def->identifier)); } PBoolean H235PluginAuthenticator::SetCapability(H225_ArrayOf_AuthenticationMechanism & mechanisms, H225_ArrayOf_PASN_ObjectId & algorithmOIDs) { return AddCapability(type, def->identifier,mechanisms, algorithmOIDs); } PBoolean H235PluginAuthenticator::UseGkAndEpIdentifiers() const { return (PluginControl(def, NULL,GET_PLUGINH235_SETTINGS, Pluginh235_Set_UseGkAndEpIdentifiers, NULL)); } PBoolean H235PluginAuthenticator::IsSecuredPDU(unsigned rasPDU,PBoolean received) const { return (PluginControl(def, NULL,GET_PLUGINH235_SETTINGS, Pluginh235_Set_IsSecuredPDU, PString(rasPDU))); } PBoolean H235PluginAuthenticator::IsSecuredSignalPDU(unsigned signalPDU, PBoolean received) const { return (PluginControl(def, NULL,GET_PLUGINH235_SETTINGS, Pluginh235_Set_IsSecuredSignalPDU, PString(signalPDU))); } PBoolean H235PluginAuthenticator::IsActive() const { return (PluginControl(def, NULL,GET_PLUGINH235_SETTINGS, Pluginh235_Set_IsActive, NULL)); } const PString & H235PluginAuthenticator::GetRemoteId() const { return remoteId; } void H235PluginAuthenticator::SetRemoteId(const PString & id) { remoteId = id; PluginControl(def, NULL,SET_PLUGINH235_SETTINGS, Pluginh235_Set_RemoteId, remoteId); } const PString & H235PluginAuthenticator::GetLocalId() const { return localId; } void H235PluginAuthenticator::SetLocalId(const PString & id) { localId = id; PluginControl(def, NULL,SET_PLUGINH235_SETTINGS, Pluginh235_Set_LocalId, id); } const PString & H235PluginAuthenticator::GetPassword() const { return password; } void H235PluginAuthenticator::SetPassword(const PString & pw) { password = pw; PluginControl(def, NULL,SET_PLUGINH235_SETTINGS, Pluginh235_Set_Password, password); } int H235PluginAuthenticator::GetTimestampGracePeriod() const { return timestampGracePeriod; } void H235PluginAuthenticator::SetTimestampGracePeriod(int grace) { timestampGracePeriod = grace; PluginControl(def, NULL,SET_PLUGINH235_SETTINGS, Pluginh235_Set_TimestampGracePeriod, PString(timestampGracePeriod)); } H235Authenticator::Application H235PluginAuthenticator::GetApplication() { return (H235Authenticator::Application)PluginControl(def, NULL,GET_PLUGINH235_SETTINGS, Pluginh235_Set_Application, NULL) ; } ///////////////////////////////////////////////////////////////////////////////////// h235PluginDeviceManager::h235PluginDeviceManager(PPluginManager * _pluginMgr) : PPluginModuleManager(PLUGIN_H235_GET_DEVICE_FN_STR, _pluginMgr) { PTRACE(3, "H323h235\tPlugin loading h235 "); // cause the plugin manager to load all dynamic plugins pluginMgr->AddNotifier(PCREATE_NOTIFIER(OnLoadModule), TRUE); } h235PluginDeviceManager::~h235PluginDeviceManager() { } void h235PluginDeviceManager::OnLoadPlugin(PDynaLink & dll, INT code) { Pluginh235_Geth235Function geth235; if (!dll.GetFunction(PString(signatureFunctionName), (PDynaLink::Function &)geth235)) { PTRACE(3, "H323h235\tPlugin DLL " << dll.GetName() << " is not a H235 plugin"); return; } unsigned int count; Pluginh235_Definition * h235 = (*geth235)(&count, PLUGIN_H235_VERSION); if (h235 == NULL || count == 0) { PTRACE(3, "H323PLUGIN\tPlugin DLL " << dll.GetName() << " contains no H235 definitions" ); return; } PTRACE(3, "H323PLUGIN\tLoading H235 plugin " << dll.GetName() ); switch (code) { // plugin loaded case 0: Registerh235(count, h235); break; // plugin unloaded case 1: Unregisterh235(count, h235); break; default: break; } } void h235PluginDeviceManager::OnShutdown() { // unregister the H235 plugin h235Factory::UnregisterAll(); } void h235PluginDeviceManager::Bootstrap() { } PBoolean h235PluginDeviceManager::Registerh235(unsigned int count, void * _h235List) { Pluginh235_Definition * h235List = (Pluginh235_Definition *)_h235List; unsigned i; for (i = 0; i < count; i++) { CreateH235Authenticator(&h235List[i]); } return TRUE; } PBoolean h235PluginDeviceManager::Unregisterh235(unsigned int /*count*/, void * /*_h235List*/) { return FALSE; } static PString Createh235Name(Pluginh235_Definition * h235, unsigned int h235type) { PString str; switch (h235type) { case Pluginh235_TokenStyleHash: str = h235->desc + PString(" {hash}"); break; case Pluginh235_TokenStyleSigned: str = h235->desc + PString(" {sign}"); break; case Pluginh235_TokenStyleEncrypted: str = h235->desc + PString(" {enc}"); break; case Pluginh235_TokenTypeclear: str = h235->desc + PString(" {clear}"); break; default: str = h235->desc; } return str; } void h235PluginDeviceManager::CreateH235Authenticator(Pluginh235_Definition * h235) { // make sure all non-timestamped codecs have the same concept of "now" static time_t mediaNow = time(NULL); // deal with codec having no info, or timestamp in future time_t timeStamp = h235->info == NULL ? mediaNow : h235->info->timestamp; if (timeStamp > mediaNow) timeStamp = mediaNow; // Authenticator Name PString h235Name = PString(); H235PluginAuthenticator * auth = NULL; // Type of h235 Plugin switch (h235->flags & Pluginh235_TokenTypeMask) { case Pluginh235_TokenTypecrypto: switch (h235->flags & Pluginh235_TokenTypeMask) { case Pluginh235_TokenStyleHash: h235Name = Createh235Name(h235,Pluginh235_TokenStyleHash); break; case Pluginh235_TokenStyleSigned: h235Name = Createh235Name(h235,Pluginh235_TokenStyleSigned); break; case Pluginh235_TokenStyleEncrypted: h235Name = Createh235Name(h235,Pluginh235_TokenStyleEncrypted); break; default: h235Name = h235->desc; } break; case Pluginh235_TokenTypeclear: h235Name = Createh235Name(h235, Pluginh235_TokenTypeclear); break; default: h235Name = h235->desc; break; } auth = new H235PluginAuthenticator(h235); auth->SetName(h235Name); if (auth != NULL) h235Factory::Register(h235Name, auth); } #ifdef _MSC_VER #pragma warning(default:4700) #endif h323plus/src/opalwavfile.cxx0000644000175000017500000001004411561712073014735 0ustar markmark/* * OpalWavFile.cxx * * WAV file class with auto-PCM conversion * * OpenH323 Library * * Copyright (c) 2002 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * Contributor(s): ______________________________________. * * $Id: opalwavfile.cxx,v 1.6 2011/05/09 07:14:03 shorne Exp $ * */ #include #ifdef __GNUC__ #pragma implementation "opalwavfile.h" #endif #include "opalwavfile.h" #ifdef _MSC_VER #include "../include/codecs.h" #else #include "codecs.h" #endif #define new PNEW OpalWAVFile::OpalWAVFile(unsigned fmt) : PWAVFile(fmt) { SetAutoconvert(); } OpalWAVFile::OpalWAVFile(OpenMode mode, int opts, unsigned fmt) : PWAVFile(mode, opts, fmt) { SetAutoconvert(); } OpalWAVFile::OpalWAVFile(const PFilePath & name, OpenMode mode, /// Mode in which to open the file. int opts, /// #OpenOptions enum# for open operation. unsigned fmt) /// Type of WAV File to create : PWAVFile(name, mode, opts, fmt) { SetAutoconvert(); } ///////////////////////////////////////////////////////////////////////////////// class PWAVFileConverterXLaw : public PWAVFileConverter { public: off_t GetPosition (const PWAVFile & file) const; PBoolean SetPosition (PWAVFile & file, off_t pos, PFile::FilePositionOrigin origin); unsigned GetSampleSize(const PWAVFile & file) const; off_t GetDataLength (PWAVFile & file); PBoolean Read (PWAVFile & file, void * buf, PINDEX len); PBoolean Write (PWAVFile & file, const void * buf, PINDEX len); virtual short DecodeSample(int sample) = 0; }; off_t PWAVFileConverterXLaw::GetPosition(const PWAVFile & file) const { off_t pos = file.RawGetPosition(); return pos * 2; } PBoolean PWAVFileConverterXLaw::SetPosition(PWAVFile & file, off_t pos, PFile::FilePositionOrigin origin) { pos /= 2; return file.SetPosition(pos, origin); } unsigned PWAVFileConverterXLaw::GetSampleSize(const PWAVFile &) const { return 16; } off_t PWAVFileConverterXLaw::GetDataLength(PWAVFile & file) { return file.RawGetDataLength() * 2; } PBoolean PWAVFileConverterXLaw::Read(PWAVFile & file, void * buf, PINDEX len) { // read the xLaw data PINDEX samples = (len / 2); PBYTEArray xlaw; if (!file.PFile::Read(xlaw.GetPointer(samples), samples)) return FALSE; // convert to PCM PINDEX i; short * pcmPtr = (short *)buf; for (i = 0; i < samples; i++) *pcmPtr++ = DecodeSample(xlaw[i]); // fake the lastReadCount file.SetLastReadCount(len); return TRUE; } PBoolean PWAVFileConverterXLaw::Write(PWAVFile & /*file*/, const void * /*buf*/, PINDEX /*len*/) { return FALSE; } ////////////////////////////////////////////////////////////////////// #ifdef H323_AUDIO_CODECS class PWAVFileConverterULaw : public PWAVFileConverterXLaw { public: unsigned GetFormat(const PWAVFile & /*file*/) const { return PWAVFile::fmt_uLaw; } short DecodeSample(int sample) { return H323_muLawCodec::DecodeSample(sample);} }; class PWAVFileConverterALaw : public PWAVFileConverterXLaw { public: unsigned GetFormat(const PWAVFile & /*file*/) const { return PWAVFile::fmt_ALaw; } short DecodeSample(int sample) { return H323_ALawCodec::DecodeSample(sample);} }; PWAVFileConverterFactory::Worker uLawConverter(PWAVFile::fmt_uLaw, true); PWAVFileConverterFactory::Worker ALawConverter(PWAVFile::fmt_ALaw, true); #endif /////////////////////////////////////////////////////////////////////// h323plus/src/gkserver.cxx0000644000175000017500000041205211530135362014255 0ustar markmark/* * gkserver.cxx * * Gatekeeper client protocol handler * * Open H323 Library * * Copyright (c) 1999-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * This code was based on original code from OpenGate of Egoboo Ltd. thanks * to Ashley Unitt for his efforts. * * Contributor(s): ______________________________________. * * $Log: gkserver.cxx,v $ * Revision 1.5 2011/02/20 06:55:46 shorne * Fixes for H.460 to allow better selection of mesasage location in PDU. Features or Generic Data. Corrected H.460.9 * * Revision 1.4 2010/08/05 13:31:21 willamowius * fix memory leak (thanks Francisco Olarte) * * Revision 1.3 2009/02/17 09:54:38 willamowius * fix 64bit issue * * Revision 1.2 2008/05/23 11:21:20 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:51:05 shorne * First commit of h323plus * * Revision 1.171 2006/01/26 03:33:19 shorne * Added TranslateTCPPort * * Revision 1.170 2005/01/03 06:25:54 csoutheren * Added extensive support for disabling code modules at compile time * * Revision 1.169 2004/12/14 06:22:21 csoutheren * More OSP implementation * * Revision 1.168 2004/12/08 02:21:26 csoutheren * Fix spelling mistake * * Revision 1.167 2004/11/25 07:38:58 csoutheren * Ensured that external TCP address translation is performed when using STUN to handle UDP * * Revision 1.166 2004/09/03 01:06:10 csoutheren * Added initial hooks for H.460 GEF * Thanks to Simon Horne and ISVO (Asia) Pte Ltd. for this contribution * * Revision 1.165 2004/08/03 07:00:13 csoutheren * Added isGKRouted hint to TranslateAliasAddress as this is needed for the reply ACF * * Revision 1.164 2004/05/05 14:11:17 csoutheren * Fixed problems with AccessRequest returning wildcards * * Revision 1.163 2004/04/24 23:58:04 rjongbloed * Fixed GCC 3.4 warning about PAssertNULL * * Revision 1.162 2004/04/21 04:52:12 csoutheren * Fixed problem wil using the incorrect call for AddCall * * Revision 1.161 2004/04/21 01:39:05 csoutheren * Added new overrides to GatekeeperServer to provide virtuals when calls and endpoints are created and destroyed * * Revision 1.160 2004/04/15 07:43:37 csoutheren * Allow gatekeeper to make a decision on multiple alias registrations for each registration * * Revision 1.159 2004/04/14 01:41:59 csoutheren * Added access to endpoint information for GetUserPassword * * Revision 1.157 2004/04/03 08:28:06 csoutheren * Remove pseudo-RTTI and replaced with real RTTI * * Revision 1.156 2004/04/01 04:44:15 csoutheren * Corrected sense of the check for descriptor translation * * Revision 1.155 2004/03/31 07:16:22 csoutheren * Added virtual to provide access to H.501 descriptor sent by GK * * Revision 1.154 2004/02/15 03:36:31 rjongbloed * Fixed bug in removing prefixes, plus added ability to have multiple endpoints * with the same profix, thanks Rossano Ravelli * * Revision 1.153 2004/02/07 11:44:03 rjongbloed * Fixed deadlocks caused under high load by failure to check locking * success. Also added functions to find destination endpoint. * Thanks Federico Pinna and the gang at Reitek S.p.A. * * Revision 1.152 2004/02/04 09:40:13 rjongbloed * Fixed innovaphone gatekeeper compatibility, thanks Rossano Ravelli * * Revision 1.151 2003/12/24 06:35:25 csoutheren * Fixed problem with NAT endpoints and GRQs * Added TranslateAliasAddress on H323GatekeeperCall * * Revision 1.150 2003/12/11 05:41:00 csoutheren * Added storage of H.225 version in endpoint structure * Disabled sending RIPs to endpoints that cannot handle them * * Revision 1.149 2003/12/11 02:18:52 csoutheren * More fixes for NM deregister problems. Seems to be fixed now :) * * Revision 1.148 2003/12/09 06:56:53 csoutheren * Fixed unbalanced record lock * * Revision 1.147 2003/12/09 00:59:19 csoutheren * Fixed problem with endpoints deregistering * * Revision 1.146 2003/05/05 08:28:25 craigs * Fixed lastUpdate time in descriptors * * Revision 1.145 2003/05/01 01:44:36 robertj * Fixed missing authentication check on lightweight RRQs. * * Revision 1.144 2003/04/30 07:51:57 robertj * Fixed correct setting of reply authenticators, mus use ancestor writePDU. * * Revision 1.143 2003/04/30 07:27:19 robertj * Fixed setting of alternate security ID only if have one. * * Revision 1.142 2003/04/30 00:28:54 robertj * Redesigned the alternate credentials in ARQ system as old implementation * was fraught with concurrency issues, most importantly it can cause false * detection of replay attacks taking out an endpoint completely. * * Revision 1.141 2003/04/10 09:42:48 robertj * Added some more functions for converting to alias addresses. * * Revision 1.140 2003/04/10 07:47:57 robertj * Added endpoint type to peer element add descriptor. * * Revision 1.139 2003/04/09 10:46:39 craigs * Updated for changed to peer element * * Revision 1.138 2003/04/09 03:08:10 robertj * Fixed race condition in shutting down transactor (pure virtual call) * * Revision 1.137 2003/04/08 02:31:02 robertj * Fixed setting of call member variable (dstHost) outside of mutex. * * Revision 1.136 2003/04/03 05:21:11 robertj * Fixed updating aliases for look up of locally registered ep. * * Revision 1.135 2003/04/02 06:58:14 robertj * Added support for (optional) duplicate aliases in gatekeeper server, necessitating * the removal of AddAlias and RemoveAlias functions. * * Revision 1.134 2003/04/02 06:08:00 robertj * Added H.323 Annex G Peer Element support to gatekeeper server. * * Revision 1.133 2003/04/01 07:31:45 robertj * Added function to translate alias into alias list and transport to make * use of full information returned by peer element. * * Revision 1.132 2003/04/01 05:59:33 robertj * Fixed H.501 transaction code setting members for m_common PDU part. * * Revision 1.131 2003/04/01 04:47:54 robertj * Abstracted H.225 RAS transaction processing (RIP and secondary thread) in * server environment for use by H.501 peer elements. * * Revision 1.130 2003/03/25 02:30:09 robertj * Additional tracing * * Revision 1.129 2003/03/17 22:51:10 craigs * Improvided useability of AddAlias and RemoveAlias * * Revision 1.128 2003/03/04 05:28:20 robertj * Added statistics for rejected registrations and call admissions. * * Revision 1.127 2003/03/04 01:29:03 robertj * Fixed rare bandwidth leak in call processing. * * Revision 1.126 2003/03/03 06:59:53 robertj * Fixed call SetBandwidth function so adjusts global bandwidth as well. * * Revision 1.125 2003/03/03 06:53:15 robertj * Fixed incorrect adjustment of bandwidth on BRQ if not enough for request. * * Revision 1.124 2003/02/28 05:09:19 robertj * Added trace of bandwidth allocation. * * Revision 1.123 2003/02/21 05:25:45 craigs * Abstracted out underlying transports for use with peerelements * * Revision 1.122 2003/02/11 04:50:01 robertj * Added missing gatekeeper identifiers in URQ and DRQ. * * Revision 1.121 2003/02/06 06:46:25 robertj * Changed to ignore srcCallSignalAddress if ep is flagegd as behind NAT. * * Revision 1.120 2003/02/06 04:47:25 robertj * Changes to help with endpoints behind NAT. * * Revision 1.119 2003/02/04 23:08:34 robertj * Fixed partial search for endpoint by alias so must match the partial at the * begining of the endpoints alias name, preventing return of incorrect ep. * * Revision 1.118 2003/02/03 03:58:10 robertj * Fixed use of local password database with ep's that have multiple aliases. * * Revision 1.117 2003/02/03 00:47:12 robertj * Changed setting of alerting and connect times so if clock on client is early * the gk server uses its own current time. * * Revision 1.116 2003/02/03 00:13:20 robertj * Fixed problem with Cisco non standard connect time, thanks Francisco Olarte Sanz * * Revision 1.115 2003/02/01 13:31:21 robertj * Changes to support CAT authentication in RAS. * * Revision 1.114 2003/01/27 23:17:28 robertj * Fixed use of alternate credentials in ARQ * * Revision 1.113 2003/01/26 04:48:58 robertj * Fixed LRQ so returns registered ep first and fills in rasAddress in LCF as * best it can under various scenarios. * Fixed translate alias so a DN is not thought to be an IP address. * * Revision 1.112 2003/01/25 05:41:45 robertj * Changed LRQ handling to use translate alias to address function. * * Revision 1.111 2003/01/16 00:55:32 robertj * Fixed crash if reject ARQ early in processing. * * Revision 1.110 2003/01/08 04:40:34 robertj * Added more debug tracing for H.235 authenticators. * * Revision 1.109 2002/12/19 06:20:56 robertj * Rearranged crypto check to be at the end of the H323RegisteredEndPoint * version of OnAdmission() to make it easier for overrides to do something * with teh endpoint if it fails the security, * * Revision 1.108 2002/12/19 01:01:24 robertj * Fixed missing read/write lock when doing IRR update on call state. * * Revision 1.107 2002/12/17 01:25:26 robertj * Added call backs on gk server when ep indicates alerting or connect. * * Revision 1.106 2002/12/13 03:59:32 robertj * Fixed incorrect field identifier used in including optional field for * balance in ARJ * * Revision 1.105 2002/12/12 03:50:42 robertj * Fixed incorrect condition for detecting suportset RRQ * * Revision 1.104 2002/12/02 07:42:35 robertj * Fixed GNU warning * * Revision 1.103 2002/12/02 06:44:21 robertj * Changed to allow for an already registered endpoint to send a full RRQ to add * but not subtract aliases or signalling addresses. If tries to subtract then * will reject the RRQ and de-register the endpoint. * * Revision 1.102 2002/11/28 05:46:20 robertj * Fixed bug so can set total bandwidth while calls are in progress. * * Revision 1.101 2002/11/28 04:41:48 robertj * Added support for RAS ServiceControlIndication command. * * Revision 1.100 2002/11/27 06:54:56 robertj * Added Service Control Session management as per Annex K/H.323 via RAS * only at this stage. * Added H.248 ASN and very primitive infrastructure for linking into the * Service Control Session management system. * Added basic infrastructure for Annex K/H.323 HTTP transport system. * Added Call Credit Service Control to display account balances. * * Revision 1.99 2002/11/25 03:27:28 robertj * Added sanity checking to the alerting, connected and end call times may * receive from endpoint, don't accept if in future or before call started! * * Revision 1.98 2002/11/21 06:40:00 robertj * Changed promiscuous mode to be three way. Fixes race condition in gkserver * which can cause crashes or more PDUs to be sent to the wrong place. * * Revision 1.97 2002/11/19 01:50:35 robertj * Added expiditing of alerting and connect time statistics if ep can do UUIEs * * Revision 1.96 2002/11/18 23:41:25 robertj * Changed to use the H323EndPoint::CreateAuthenticators() function, we * should use only one. * * Revision 1.95 2002/11/15 03:26:40 robertj * Fixed crash when removing alias in URQ and it isn't registered with it. * * Revision 1.94 2002/11/12 11:36:07 robertj * Added function to find endpoint by partial alias. * Optimised endpoint "indexes" to use sorted lists instead of dictionaries. * * Revision 1.93 2002/11/11 07:20:12 robertj * Minor clean up of API for doing RAS requests suing authentication. * * Revision 1.92 2002/11/10 08:10:43 robertj * Moved constants for "well known" ports to better place (OPAL change). * * Revision 1.91 2002/11/05 05:56:09 robertj * Super slight optimisation! * * Revision 1.90 2002/11/04 23:48:48 robertj * Fixed memory leak on ep unregistration, pointed out by Ravelli Rossano. * * Revision 1.89 2002/10/29 00:14:08 robertj * Improved setting of usage info, included getting it from BRQ etc. * * Revision 1.88 2002/10/24 07:04:41 robertj * Changed use of translate address so can see previous dstHost value before * it might change it. * * Revision 1.87 2002/10/24 05:54:18 robertj * Improved looking up alias as DNS host and port. * * Revision 1.86 2002/10/21 01:20:36 robertj * Moved setting of aliases in RCF to after OnFullRegistration() returns so an * application can alter the aliases an endpoint registers as. * * Revision 1.85 2002/10/21 00:55:46 robertj * Added function to unregister an endpoint via user interface. * Added reason code to call disengage. * Added ability to find call by a description string. * Fixed LCF having RAS address in it. * * Revision 1.84 2002/10/17 05:28:11 robertj * Supported some dumb old version endpoints that could not ignore fields * that they don't understand. * * Revision 1.83 2002/10/17 02:20:56 robertj * Fixed problem with older clients sending unsolicited IRR's using the * seqnum==1 technique instead of explicit flag. * * Revision 1.82 2002/10/16 07:29:41 robertj * Added support for endpoints that do not support RRQ timeToLive parameter, * will actively go see if ep is there using IRQ before expiring the ep. * * Revision 1.81 2002/10/16 01:53:09 robertj * Removed trace on starting slow PDU handler thread, cannot use pointer * returned if is auto-delete thread as it can go out of scope any time. * * Revision 1.80 2002/10/16 01:00:02 robertj * Fixed gk server so can listen on localhost if listening on INADDR_ANY. * * Revision 1.79 2002/10/10 05:32:36 robertj * Minor changes for Tornado 2 compiler compatibility, thanks Martijn Roest * * Revision 1.78 2002/10/09 08:01:01 robertj * Changed registration so get URJ if calls are in progress. * Fixed call of registered eps OnRegistration() to before ep is removed. * * Revision 1.77 2002/10/02 09:33:24 robertj * Previous fix had to be done in two places. * * Revision 1.76 2002/10/01 08:27:52 robertj * Fixed (benign) race condition between client and server both wanting to do * a DRQ of a call at the same time. Caused an Assert, but no crash. * * Revision 1.75 2002/10/01 06:40:52 robertj * Removed GNU compiler warning * * Revision 1.74 2002/10/01 02:44:58 robertj * Fixed problem where a non lightweight RRQ with endpointIdentifer does not * overwrite old H323RegisteredEndpoint instance, but just updates it * preventing loss of calls if ep is just changing things like aliases etc. * * Revision 1.73 2002/09/29 23:39:30 craigs * Rearranged expression to avoid MSVC compiler compiler internal error * * Revision 1.72 2002/09/25 14:33:05 robertj * Added special code for innovaphone's broken behaviour with unsolicited IRR's * having no perCallInfo. For them this apparently means "all calls ok". * * Revision 1.71 2002/09/24 08:03:00 robertj * Added H.225 RAS protocol version number to registered endpoint structure. * * Revision 1.70 2002/09/20 05:39:22 robertj * Added Cisco non-standard version of connect time indication in IRR. * * Revision 1.69 2002/09/20 02:40:08 robertj * Fixed compatibility with buggy Cisco's that do not indicate the direction * of the call in the IRR perCallInfo structure. * * Revision 1.68 2002/09/19 09:13:27 robertj * Fixed problem with making (and assuring with multi-threading) IRQ and DRQ * requests are sent to the correct endpoint address, thanks Martijn Roest. * * Revision 1.67 2002/08/29 07:57:09 robertj * Added some statistics to gatekeeper server. * * Revision 1.66 2002/08/29 06:57:26 robertj * Removed redundent thread member variable from request info. * Added optimisation in does not need to look up endpoint on slow response * sub-thread if already have looked it up duing the first pass. * Added optimisation and possible thread mutex issue in setting authenticator * remote and local user names in RRQ, only do on full reg not keepAlive. * * Revision 1.65 2002/08/16 02:43:18 robertj * Fixed bug where call can exist in database even though was rejected. * * Revision 1.64 2002/08/16 02:32:58 robertj * Fixed possible deadlock in heartbeat * * Revision 1.63 2002/08/16 02:30:25 robertj * Fixed call heartbeat so if IRQ succeeds but indicates it does not know the * call then the call in the gk is removed. * * Revision 1.62 2002/08/14 02:04:00 robertj * Added trace log for heartbeat timeout on call. * * Revision 1.61 2002/08/12 08:12:45 robertj * Added extra hint to help with ARQ using separate credentials from RRQ. * * Revision 1.60 2002/08/12 05:38:24 robertj * Changes to the RAS subsystem to support ability to make requests to client * from gkserver without causing bottlenecks and race conditions. * * Revision 1.59 2002/08/11 23:20:42 robertj * Fixed GNU compatibility error * * Revision 1.58 2002/08/05 10:03:47 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.57 2002/08/05 05:17:41 robertj * Fairly major modifications to support different authentication credentials * in ARQ to the logged in ones on RRQ. For both client and server. * Various other H.235 authentication bugs and anomalies fixed on the way. * * Revision 1.56 2002/07/25 05:22:22 robertj * Fixed possible race condition where call is removed between first ARQ * processing and slow PDU handler thread starting! * * Revision 1.55 2002/07/24 02:57:44 robertj * Assured all calls for an ep are removed if ep is removed due to timeout * rather than via an unregister. * Added tolerance to lightweight RRQ timer. * Added several missing mutex calls. * * Revision 1.54 2002/07/19 00:31:13 robertj * Allowed a zero IRR rate time to disable IRR hearbeat checks. * * Revision 1.53 2002/07/17 04:42:14 robertj * Fixed filling in callSignallingAddress in RCF * * Revision 1.52 2002/07/17 04:01:00 robertj * Fixed RRJ reason of duplicateAlias having correct choice field in PDU. * * Revision 1.51 2002/07/16 13:47:56 robertj * Added missing lock when removing call from endpoint. * Fixed setting of credentials when sending Disengage. * improved some logging messages. * * Revision 1.50 2002/07/16 09:20:56 robertj * Fixed bug where call was not removed from gk when Disengage called. * Fixed correct setting of unsolicited flag if get IRR from old v2 ep. * * Revision 1.49 2002/07/11 09:37:00 robertj * Added support for early versions of unsolicited IRR. * Fixed fail safe IRQ if does not receive unsolicited IRR in time. * Fixed removal of call if IRR failure indicates call is no longer valid. * * Revision 1.48 2002/07/11 07:01:41 robertj * Added Disengage() function to force call drop from gk server. * Added InfoRequest() function to force client to send an IRR. * Added ability to automatically clear calls if do not get IRR for it. * * Revision 1.47 2002/07/10 01:09:21 robertj * Fixed bug where did not use URQ endpoint id for look up. * * Revision 1.46 2002/07/10 00:05:47 robertj * Fixed bug where doing a URQ does not actually remove the endpoint. * * Revision 1.45 2002/07/09 00:16:26 robertj * Fixed incorrect allocation of bandwidth in ARQ, thanks Dave Giffin * * Revision 1.44 2002/06/24 07:01:05 robertj * Fixed correct adding of call to endpoint structure, only if call confirmed. * * Revision 1.43 2002/06/21 02:52:47 robertj * Fixed problem with double checking H.235 hashing, this causes failure as * the authenticator thinks it is a replay attack. * * Revision 1.42 2002/06/19 05:03:11 robertj * Changed gk code to allow for H.235 security on an endpoint by endpoint basis. * * Revision 1.41 2002/06/12 03:55:21 robertj * Added function to add/remove multiple listeners in one go comparing against * what is already running so does not interrupt unchanged listeners. * * Revision 1.40 2002/06/07 08:12:38 robertj * Added check to reject ARQ if does not contain a call identifier. * * Revision 1.39 2002/06/07 06:19:21 robertj * Fixed GNU warning * * Revision 1.38 2002/05/29 00:03:19 robertj * Fixed unsolicited IRR support in gk client and server, * including support for IACK and INAK. * * Revision 1.37 2002/05/17 03:41:46 robertj * Fixed problems with H.235 authentication on RAS for server and client. * * Revision 1.36 2002/05/09 02:53:20 robertj * Fixed some problems with setting host/alias field in call on ARQ * * Revision 1.35 2002/05/08 02:06:07 robertj * Fixed failure to remove call if is rejected on slow reply. * Fixed overwriting of application infor on lightweight RRQ. * Fixed inclusion of adjusted aliases in RCF. * * Revision 1.34 2002/05/07 06:25:20 robertj * Fixed GNU compiler compatibility. * * Revision 1.33 2002/05/07 06:15:54 robertj * Changed ARQ processing so rejects multiple ARQ with same call id, not this * does NOT include the transport level retries (based on sequence number). * * Revision 1.32 2002/05/07 03:18:15 robertj * Added application info (name/version etc) into registered endpoint data. * * Revision 1.31 2002/05/06 09:05:01 craigs * Fixed compile problem on Linux * * Revision 1.30 2002/05/06 00:56:41 robertj * Sizeable rewrite of gatekeeper server code to make more bulletproof against * multithreaded operation. Especially when using slow response/RIP feature. * Also changed the call indexing to use call id and direction as key. * * Revision 1.29 2002/04/09 02:34:14 robertj * Fixed problem with duplicate entries in endpoint list if ARQ gets retried, * thanks Horacio J. Peёa * * Revision 1.28 2002/03/06 02:51:31 robertj * Fixed race condition when starting slow server response thread. * * Revision 1.27 2002/03/06 02:01:26 craigs * Add log message when SlowHandler thread started * * Revision 1.26 2002/03/05 03:42:40 robertj * Fixed calling of endpoints OnUnregister() function, thanks Francisco Olarte Sanz * * Revision 1.25 2002/03/04 07:57:57 craigs * Changed log level of ageing message * Fixed assert caused by accessing byIdentifier with integer * * Revision 1.24 2002/03/03 21:34:54 robertj * Added gatekeeper monitor thread. * * Revision 1.23 2002/03/02 05:59:01 robertj * Fixed possible bandwidth leak (thanks Francisco Olarte Sanz) and in * the process added OnBandwidth function to H323GatekeeperCall class. * * Revision 1.22 2002/03/01 04:09:35 robertj * Fixed problems with keeping track of calls. Calls are now indexed by call-id * alone and maintain both endpoints of call in its structure. Fixes problem * with calls form an endpoint to itself, and having two objects being tracked * where there is really only one call. * * Revision 1.21 2002/02/25 10:26:39 robertj * Added ARQ with zero bandwidth as a request for a default, thanks Federico Pinna * * Revision 1.20 2002/02/25 10:16:21 robertj * Fixed bad mistake in getting new aliases from ARQ, thanks HoraPe * * Revision 1.19 2002/02/25 09:49:02 robertj * Fixed possible "bandwidth leak" on ARQ, thanks Francisco Olarte Sanz * * Revision 1.18 2002/02/11 05:19:21 robertj * Allowed for multiple ARQ requests for same call ID. Reuses existing call * object and sends another ACF. * * Revision 1.17 2002/02/04 05:21:27 robertj * Lots of changes to fix multithreaded slow response code (RIP). * Fixed problem with having two entries for same call in call list. * * Revision 1.16 2002/01/31 06:45:44 robertj * Added more checking for invalid list processing in calls database. * * Revision 1.15 2002/01/30 05:07:54 robertj * Some robustness changes, temporarily removed threads in RIP. * * Revision 1.14 2001/12/15 10:10:48 robertj * GCC compatibility * * Revision 1.13 2001/12/15 08:09:08 robertj * Added alerting, connect and end of call times to be sent to RAS server. * * Revision 1.12 2001/12/14 06:41:17 robertj * Added call end reason codes in DisengageRequest for GK server use. * * Revision 1.11 2001/12/13 11:08:45 robertj * Significant changes to support slow request handling, automatically sending * RIP and spawning thread to handle time consuming operation. * * Revision 1.10 2001/12/06 06:44:42 robertj * Removed "Win32 SSL xxx" build configurations in favour of system * environment variables to select optional libraries. * * Revision 1.9 2001/11/21 13:35:23 craigs * Removed deadlock with empty registered endpoint list * * Revision 1.8 2001/11/19 06:56:44 robertj * Added prefix strings for gateways registered with this gk, thanks Mikael Stolt * * Revision 1.7 2001/09/18 10:06:54 robertj * Added trace for if RRJ on security because user has no password. * * Revision 1.6 2001/09/13 01:15:20 robertj * Added flag to H235Authenticator to determine if gkid and epid is to be * automatically set as the crypto token remote id and local id. * * Revision 1.5 2001/08/10 11:03:52 robertj * Major changes to H.235 support in RAS to support server. * * Revision 1.4 2001/08/06 07:44:55 robertj * Fixed problems with building without SSL * * Revision 1.3 2001/08/06 03:18:38 robertj * Fission of h323.h to h323ep.h & h323con.h, h323.h now just includes files. * Improved access to H.235 secure RAS functionality. * Changes to H.323 secure RAS contexts to help use with gk server. * * Revision 1.2 2001/07/24 10:12:33 craigs * Fixed problem with admission requests not having src signalling addresses * * Revision 1.1 2001/07/24 02:31:07 robertj * Added gatekeeper RAS protocol server classes. * */ #include #ifdef __GNUC__ #pragma implementation "gkserver.h" #endif #include "gkserver.h" #ifdef H323_H501 #include "peclient.h" #endif const char AnswerCallStr[] = "-Answer"; const char OriginateCallStr[] = "-Originate"; #define new PNEW ///////////////////////////////////////////////////////////////////////////// H323GatekeeperRequest::H323GatekeeperRequest(H323GatekeeperListener & ras, const H323RasPDU & pdu) : H323Transaction(ras, pdu, new H323RasPDU, new H323RasPDU), rasChannel(ras) { } H323TransactionPDU * H323GatekeeperRequest::CreateRIP(unsigned sequenceNumber, unsigned delay) const { H323RasPDU * pdu = new H323RasPDU; pdu->BuildRequestInProgress(sequenceNumber, delay); return pdu; } PBoolean H323GatekeeperRequest::WritePDU(H323TransactionPDU & pdu) { PTRACE_BLOCK("H323GatekeeperRequest::WritePDU"); if (endpoint != NULL) replyAddresses = endpoint->GetRASAddresses(); return H323Transaction::WritePDU(pdu); } PBoolean H323GatekeeperRequest::CheckGatekeeperIdentifier() { PString pduGkid = GetGatekeeperIdentifier(); if (pduGkid.IsEmpty()) // Not present in PDU return TRUE; PString rasGkid = rasChannel.GetIdentifier(); // If it is present it has to be correct! if (pduGkid == rasGkid) return TRUE; SetRejectReason(GetGatekeeperRejectTag()); PTRACE(2, "RAS\t" << GetName() << " rejected, has different identifier," " got \"" << pduGkid << "\", should be \"" << rasGkid << '"'); return FALSE; } PBoolean H323GatekeeperRequest::GetRegisteredEndPoint() { if (endpoint != NULL) { PTRACE(4, "RAS\tAlready located endpoint: " << *endpoint); return TRUE; } PString id = GetEndpointIdentifier(); endpoint = rasChannel.GetGatekeeper().FindEndPointByIdentifier(id); if (endpoint != NULL) { PTRACE(4, "RAS\tLocated endpoint: " << *endpoint); canSendRIP = endpoint->CanReceiveRIP(); return TRUE; } SetRejectReason(GetRegisteredEndPointRejectTag()); PTRACE(2, "RAS\t" << GetName() << " rejected," " \"" << id << "\" not registered"); return FALSE; } PBoolean H323GatekeeperRequest::CheckCryptoTokens() { if (authenticatorResult == H235Authenticator::e_Disabled) return H323Transaction::CheckCryptoTokens(endpoint->GetAuthenticators()); return authenticatorResult == H235Authenticator::e_OK; } ///////////////////////////////////////////////////////////////////////////// H323GatekeeperGRQ::H323GatekeeperGRQ(H323GatekeeperListener & rasChannel, const H323RasPDU & pdu) : H323GatekeeperRequest(rasChannel, pdu), grq((H225_GatekeeperRequest &)request->GetChoice().GetObject()), gcf(((H323RasPDU &)confirm->GetPDU()).BuildGatekeeperConfirm(grq.m_requestSeqNum)), grj(((H323RasPDU &)reject->GetPDU()).BuildGatekeeperReject(grq.m_requestSeqNum, H225_GatekeeperRejectReason::e_terminalExcluded)) { // Check the return address, if not the same side of a NAT firewall, then // just use the physical reply address already set by ancestor. H323TransportAddress rasAddress = grq.m_rasAddress; H323EndPoint & ep = rasChannel.GetEndPoint(); PIPSocket::Address senderIP, rasIP; if (rasChannel.GetTransport().IsCompatibleTransport(grq.m_rasAddress) && (!replyAddresses[0].GetIpAddress(senderIP) || !rasAddress.GetIpAddress(rasIP) || ep.IsLocalAddress(senderIP) == ep.IsLocalAddress(rasIP))) { PTRACE(4, "RAS\tFound suitable RAS address in GRQ: " << rasAddress); replyAddresses[0] = rasAddress; } else { isBehindNAT = TRUE; PTRACE(3, "RAS\tUnsuitable RAS address in GRQ, using " << replyAddresses[0]); } } #if PTRACING const char * H323GatekeeperGRQ::GetName() const { return "GRQ"; } #endif PString H323GatekeeperGRQ::GetGatekeeperIdentifier() const { if (grq.HasOptionalField(H225_GatekeeperRequest::e_gatekeeperIdentifier)) return grq.m_gatekeeperIdentifier; return PString::Empty(); } unsigned H323GatekeeperGRQ::GetGatekeeperRejectTag() const { return H225_GatekeeperRejectReason::e_terminalExcluded; } PString H323GatekeeperGRQ::GetEndpointIdentifier() const { return PString::Empty(); // Dummy, should never be used } unsigned H323GatekeeperGRQ::GetRegisteredEndPointRejectTag() const { return H225_GatekeeperRejectReason::e_terminalExcluded; } H235Authenticator::ValidationResult H323GatekeeperGRQ::ValidatePDU() const { return request->Validate(grq.m_tokens, H225_GatekeeperRequest::e_tokens, grq.m_cryptoTokens, H225_GatekeeperRequest::e_cryptoTokens); } unsigned H323GatekeeperGRQ::GetSecurityRejectTag() const { return H225_GatekeeperRejectReason::e_securityDenial; } void H323GatekeeperGRQ::SetRejectReason(unsigned reasonCode) { grj.m_rejectReason.SetTag(reasonCode); } H323GatekeeperRequest::Response H323GatekeeperGRQ::OnHandlePDU() { return rasChannel.OnDiscovery(*this); } H323GatekeeperRRQ::H323GatekeeperRRQ(H323GatekeeperListener & rasChannel, const H323RasPDU & pdu) : H323GatekeeperRequest(rasChannel, pdu), rrq((H225_RegistrationRequest &)request->GetChoice().GetObject()), rcf(((H323RasPDU &)confirm->GetPDU()).BuildRegistrationConfirm(rrq.m_requestSeqNum)), rrj(((H323RasPDU &)reject->GetPDU()).BuildRegistrationReject(rrq.m_requestSeqNum)) { H323EndPoint & ep = rasChannel.GetEndPoint(); PIPSocket::Address senderIP; PBoolean senderIsIP = replyAddresses[0].GetIpAddress(senderIP); PBoolean senderIsLocal = senderIsIP && ep.IsLocalAddress(senderIP); H323TransportAddressArray unsuitable; PBoolean first = TRUE; PINDEX i; for (i = 0; i < rrq.m_rasAddress.GetSize(); i++) { if (rasChannel.GetTransport().IsCompatibleTransport(rrq.m_rasAddress[i])) { // Check the return address, if not the same side of a NAT firewall, then // just use the physical reply address already set by ancestor. H323TransportAddress rasAddress = rrq.m_rasAddress[i]; PIPSocket::Address rasIP; if (!senderIsIP | !rasAddress.GetIpAddress(rasIP) || senderIsLocal == ep.IsLocalAddress(rasIP)) { PTRACE(4, "RAS\tFound suitable RAS address in RRQ: " << rasAddress); if (first) replyAddresses[0] = rasAddress; else replyAddresses.AppendAddress(rasAddress); first = FALSE; } else unsuitable.AppendAddress(rasAddress); } } isBehindNAT = first; PTRACE_IF(3, isBehindNAT, "RAS\tCould not find suitable RAS address in RRQ, using " << replyAddresses[0]); for (i = 0; i < unsuitable.GetSize(); i++) replyAddresses.AppendAddress(unsuitable[i]); } #if PTRACING const char * H323GatekeeperRRQ::GetName() const { return "RRQ"; } #endif PString H323GatekeeperRRQ::GetGatekeeperIdentifier() const { if (rrq.HasOptionalField(H225_RegistrationRequest::e_gatekeeperIdentifier)) return rrq.m_gatekeeperIdentifier; return PString::Empty(); } unsigned H323GatekeeperRRQ::GetGatekeeperRejectTag() const { return H225_RegistrationRejectReason::e_undefinedReason; } PString H323GatekeeperRRQ::GetEndpointIdentifier() const { return rrq.m_endpointIdentifier; } unsigned H323GatekeeperRRQ::GetRegisteredEndPointRejectTag() const { return H225_RegistrationRejectReason::e_fullRegistrationRequired; } H235Authenticator::ValidationResult H323GatekeeperRRQ::ValidatePDU() const { return request->Validate(rrq.m_tokens, H225_RegistrationRequest::e_tokens, rrq.m_cryptoTokens, H225_RegistrationRequest::e_cryptoTokens); } unsigned H323GatekeeperRRQ::GetSecurityRejectTag() const { return H225_RegistrationRejectReason::e_securityDenial; } void H323GatekeeperRRQ::SetRejectReason(unsigned reasonCode) { rrj.m_rejectReason.SetTag(reasonCode); } H323GatekeeperRequest::Response H323GatekeeperRRQ::OnHandlePDU() { H323GatekeeperRequest::Response response = rasChannel.OnRegistration(*this); if (response != Reject) return response; H323GatekeeperServer & server = rasChannel.GetGatekeeper(); server.mutex.Wait(); server.rejectedRegistrations++; server.mutex.Signal(); return Reject; } H323GatekeeperURQ::H323GatekeeperURQ(H323GatekeeperListener & rasChannel, const H323RasPDU & pdu) : H323GatekeeperRequest(rasChannel, pdu), urq((H225_UnregistrationRequest &)request->GetChoice().GetObject()), ucf(((H323RasPDU &)confirm->GetPDU()).BuildUnregistrationConfirm(urq.m_requestSeqNum)), urj(((H323RasPDU &)reject->GetPDU()).BuildUnregistrationReject(urq.m_requestSeqNum)) { } #if PTRACING const char * H323GatekeeperURQ::GetName() const { return "URQ"; } #endif PString H323GatekeeperURQ::GetGatekeeperIdentifier() const { if (urq.HasOptionalField(H225_UnregistrationRequest::e_gatekeeperIdentifier)) return urq.m_gatekeeperIdentifier; return PString::Empty(); } unsigned H323GatekeeperURQ::GetGatekeeperRejectTag() const { return H225_GatekeeperRejectReason::e_terminalExcluded; } PString H323GatekeeperURQ::GetEndpointIdentifier() const { return urq.m_endpointIdentifier; } unsigned H323GatekeeperURQ::GetRegisteredEndPointRejectTag() const { return H225_UnregRejectReason::e_notCurrentlyRegistered; } H235Authenticator::ValidationResult H323GatekeeperURQ::ValidatePDU() const { return request->Validate(urq.m_tokens, H225_UnregistrationRequest::e_tokens, urq.m_cryptoTokens, H225_UnregistrationRequest::e_cryptoTokens); } unsigned H323GatekeeperURQ::GetSecurityRejectTag() const { return H225_UnregRejectReason::e_securityDenial; } void H323GatekeeperURQ::SetRejectReason(unsigned reasonCode) { urj.m_rejectReason.SetTag(reasonCode); } H323GatekeeperRequest::Response H323GatekeeperURQ::OnHandlePDU() { return rasChannel.OnUnregistration(*this); } H323GatekeeperARQ::H323GatekeeperARQ(H323GatekeeperListener & rasChannel, const H323RasPDU & pdu) : H323GatekeeperRequest(rasChannel, pdu), arq((H225_AdmissionRequest &)request->GetChoice().GetObject()), acf(((H323RasPDU &)confirm->GetPDU()).BuildAdmissionConfirm(arq.m_requestSeqNum)), arj(((H323RasPDU &)reject->GetPDU()).BuildAdmissionReject(arq.m_requestSeqNum)) { } #if PTRACING const char * H323GatekeeperARQ::GetName() const { return "ARQ"; } #endif PString H323GatekeeperARQ::GetGatekeeperIdentifier() const { if (arq.HasOptionalField(H225_AdmissionRequest::e_gatekeeperIdentifier)) return arq.m_gatekeeperIdentifier; return PString::Empty(); } unsigned H323GatekeeperARQ::GetGatekeeperRejectTag() const { return H225_AdmissionRejectReason::e_undefinedReason; } PString H323GatekeeperARQ::GetEndpointIdentifier() const { return arq.m_endpointIdentifier; } unsigned H323GatekeeperARQ::GetRegisteredEndPointRejectTag() const { return H225_AdmissionRejectReason::e_callerNotRegistered; } H235Authenticator::ValidationResult H323GatekeeperARQ::ValidatePDU() const { return request->Validate(arq.m_tokens, H225_AdmissionRequest::e_tokens, arq.m_cryptoTokens, H225_AdmissionRequest::e_cryptoTokens); } unsigned H323GatekeeperARQ::GetSecurityRejectTag() const { return H225_AdmissionRejectReason::e_securityDenial; } void H323GatekeeperARQ::SetRejectReason(unsigned reasonCode) { arj.m_rejectReason.SetTag(reasonCode); } H323GatekeeperRequest::Response H323GatekeeperARQ::OnHandlePDU() { H323GatekeeperRequest::Response response = rasChannel.OnAdmission(*this); if (response != Reject) return response; H323GatekeeperServer & server = rasChannel.GetGatekeeper(); PSafePtr call = server.FindCall(arq.m_callIdentifier.m_guid, arq.m_answerCall); if (call != NULL) server.RemoveCall(call); server.mutex.Wait(); server.rejectedCalls++; server.mutex.Signal(); return Reject; } H323GatekeeperDRQ::H323GatekeeperDRQ(H323GatekeeperListener & rasChannel, const H323RasPDU & pdu) : H323GatekeeperRequest(rasChannel, pdu), drq((H225_DisengageRequest &)request->GetChoice().GetObject()), dcf(((H323RasPDU &)confirm->GetPDU()).BuildDisengageConfirm(drq.m_requestSeqNum)), drj(((H323RasPDU &)reject->GetPDU()).BuildDisengageReject(drq.m_requestSeqNum)) { } #if PTRACING const char * H323GatekeeperDRQ::GetName() const { return "DRQ"; } #endif PString H323GatekeeperDRQ::GetGatekeeperIdentifier() const { if (drq.HasOptionalField(H225_DisengageRequest::e_gatekeeperIdentifier)) return drq.m_gatekeeperIdentifier; return PString::Empty(); } unsigned H323GatekeeperDRQ::GetGatekeeperRejectTag() const { return H225_DisengageRejectReason::e_notRegistered; } PString H323GatekeeperDRQ::GetEndpointIdentifier() const { return drq.m_endpointIdentifier; } unsigned H323GatekeeperDRQ::GetRegisteredEndPointRejectTag() const { return H225_DisengageRejectReason::e_notRegistered; } H235Authenticator::ValidationResult H323GatekeeperDRQ::ValidatePDU() const { return request->Validate(drq.m_tokens, H225_DisengageRequest::e_tokens, drq.m_cryptoTokens, H225_DisengageRequest::e_cryptoTokens); } unsigned H323GatekeeperDRQ::GetSecurityRejectTag() const { return H225_DisengageRejectReason::e_securityDenial; } void H323GatekeeperDRQ::SetRejectReason(unsigned reasonCode) { drj.m_rejectReason.SetTag(reasonCode); } H323GatekeeperRequest::Response H323GatekeeperDRQ::OnHandlePDU() { return rasChannel.OnDisengage(*this); } H323GatekeeperBRQ::H323GatekeeperBRQ(H323GatekeeperListener & rasChannel, const H323RasPDU & pdu) : H323GatekeeperRequest(rasChannel, pdu), brq((H225_BandwidthRequest &)request->GetChoice().GetObject()), bcf(((H323RasPDU &)confirm->GetPDU()).BuildBandwidthConfirm(brq.m_requestSeqNum)), brj(((H323RasPDU &)reject->GetPDU()).BuildBandwidthReject(brq.m_requestSeqNum)) { } #if PTRACING const char * H323GatekeeperBRQ::GetName() const { return "BRQ"; } #endif PString H323GatekeeperBRQ::GetGatekeeperIdentifier() const { if (brq.HasOptionalField(H225_BandwidthRequest::e_gatekeeperIdentifier)) return brq.m_gatekeeperIdentifier; return PString::Empty(); } unsigned H323GatekeeperBRQ::GetGatekeeperRejectTag() const { return H225_BandRejectReason::e_undefinedReason; } PString H323GatekeeperBRQ::GetEndpointIdentifier() const { return brq.m_endpointIdentifier; } unsigned H323GatekeeperBRQ::GetRegisteredEndPointRejectTag() const { return H225_BandRejectReason::e_notBound; } H235Authenticator::ValidationResult H323GatekeeperBRQ::ValidatePDU() const { return request->Validate(brq.m_tokens, H225_BandwidthRequest::e_tokens, brq.m_cryptoTokens, H225_BandwidthRequest::e_cryptoTokens); } unsigned H323GatekeeperBRQ::GetSecurityRejectTag() const { return H225_BandRejectReason::e_securityDenial; } void H323GatekeeperBRQ::SetRejectReason(unsigned reasonCode) { brj.m_rejectReason.SetTag(reasonCode); } H323GatekeeperRequest::Response H323GatekeeperBRQ::OnHandlePDU() { return rasChannel.OnBandwidth(*this); } H323GatekeeperLRQ::H323GatekeeperLRQ(H323GatekeeperListener & rasChannel, const H323RasPDU & pdu) : H323GatekeeperRequest(rasChannel, pdu), lrq((H225_LocationRequest &)request->GetChoice().GetObject()), lcf(((H323RasPDU &)confirm->GetPDU()).BuildLocationConfirm(lrq.m_requestSeqNum)), lrj(((H323RasPDU &)reject->GetPDU()).BuildLocationReject(lrq.m_requestSeqNum)) { if (rasChannel.GetTransport().IsCompatibleTransport(lrq.m_replyAddress)) replyAddresses[0] = lrq.m_replyAddress; } #if PTRACING const char * H323GatekeeperLRQ::GetName() const { return "LRQ"; } #endif PString H323GatekeeperLRQ::GetGatekeeperIdentifier() const { if (lrq.HasOptionalField(H225_LocationRequest::e_gatekeeperIdentifier)) return lrq.m_gatekeeperIdentifier; return PString::Empty(); } unsigned H323GatekeeperLRQ::GetGatekeeperRejectTag() const { return H225_LocationRejectReason::e_undefinedReason; } PString H323GatekeeperLRQ::GetEndpointIdentifier() const { return lrq.m_endpointIdentifier; } unsigned H323GatekeeperLRQ::GetRegisteredEndPointRejectTag() const { return H225_LocationRejectReason::e_notRegistered; } H235Authenticator::ValidationResult H323GatekeeperLRQ::ValidatePDU() const { return request->Validate(lrq.m_tokens, H225_LocationRequest::e_tokens, lrq.m_cryptoTokens, H225_LocationRequest::e_cryptoTokens); } unsigned H323GatekeeperLRQ::GetSecurityRejectTag() const { return H225_LocationRejectReason::e_securityDenial; } void H323GatekeeperLRQ::SetRejectReason(unsigned reasonCode) { lrj.m_rejectReason.SetTag(reasonCode); } H323GatekeeperRequest::Response H323GatekeeperLRQ::OnHandlePDU() { return rasChannel.OnLocation(*this); } H323GatekeeperIRR::H323GatekeeperIRR(H323GatekeeperListener & rasChannel, const H323RasPDU & pdu) : H323GatekeeperRequest(rasChannel, pdu), irr((H225_InfoRequestResponse &)request->GetChoice().GetObject()), iack(((H323RasPDU &)confirm->GetPDU()).BuildInfoRequestAck(irr.m_requestSeqNum)), inak(((H323RasPDU &)reject->GetPDU()).BuildInfoRequestNak(irr.m_requestSeqNum)) { } #if PTRACING const char * H323GatekeeperIRR::GetName() const { return "IRR"; } #endif PString H323GatekeeperIRR::GetGatekeeperIdentifier() const { return PString::Empty(); } unsigned H323GatekeeperIRR::GetGatekeeperRejectTag() const { return H225_GatekeeperRejectReason::e_terminalExcluded; } PString H323GatekeeperIRR::GetEndpointIdentifier() const { return irr.m_endpointIdentifier; } unsigned H323GatekeeperIRR::GetRegisteredEndPointRejectTag() const { return H225_InfoRequestNakReason::e_notRegistered; } H235Authenticator::ValidationResult H323GatekeeperIRR::ValidatePDU() const { return request->Validate(irr.m_tokens, H225_InfoRequestResponse::e_tokens, irr.m_cryptoTokens, H225_InfoRequestResponse::e_cryptoTokens); } unsigned H323GatekeeperIRR::GetSecurityRejectTag() const { return H225_InfoRequestNakReason::e_securityDenial; } void H323GatekeeperIRR::SetRejectReason(unsigned reasonCode) { inak.m_nakReason.SetTag(reasonCode); } H323GatekeeperRequest::Response H323GatekeeperIRR::OnHandlePDU() { return rasChannel.OnInfoResponse(*this); } ///////////////////////////////////////////////////////////////////////////// H323GatekeeperCall::H323GatekeeperCall(H323GatekeeperServer& gk, const OpalGloballyUniqueID & id, Direction dir) : gatekeeper(gk), callIdentifier(id), conferenceIdentifier(NULL), alertingTime(0), connectedTime(0), callEndTime(0) { endpoint = NULL; rasChannel = NULL; direction = dir; callReference = 0; drqReceived = FALSE; callEndReason = H323Connection::NumCallEndReasons; bandwidthUsed = 0; infoResponseRate = gatekeeper.GetInfoResponseRate(); } H323GatekeeperCall::~H323GatekeeperCall() { SetBandwidthUsed(0); } PObject::Comparison H323GatekeeperCall::Compare(const PObject & obj) const { // Do not have to lock the object as these fields should never change for // life of the object PAssert(PIsDescendant(&obj, H323GatekeeperCall), PInvalidCast); const H323GatekeeperCall & other = (const H323GatekeeperCall &)obj; Comparison result = callIdentifier.Compare(other.callIdentifier); if (result != EqualTo) return result; if (direction == UnknownDirection || other.direction == UnknownDirection) return EqualTo; if (direction > other.direction) return GreaterThan; if (direction < other.direction) return LessThan; return EqualTo; } void H323GatekeeperCall::PrintOn(ostream & strm) const { // Do not have to lock the object as these fields should never change for // life of the object strm << callIdentifier; switch (direction) { case AnsweringCall : strm << AnswerCallStr; break; case OriginatingCall : strm << OriginateCallStr; break; default : break; } } H323GatekeeperRequest::Response H323GatekeeperCall::OnAdmission(H323GatekeeperARQ & info) { PTRACE_BLOCK("H323GatekeeperCall::OnAdmission"); if (endpoint != NULL) { info.SetRejectReason(H225_AdmissionRejectReason::e_resourceUnavailable); PTRACE(2, "RAS\tARQ rejected, multiple use of same call id."); return H323GatekeeperRequest::Reject; } PINDEX i; if (!LockReadWrite()) { PTRACE(1, "RAS\tARQ rejected, lock failed on call " << *this); return H323GatekeeperRequest::Reject; } PTRACE(3, "RAS\tProcessing OnAdmission for " << *this); endpoint = info.endpoint; rasChannel = &info.GetRasChannel(); callReference = info.arq.m_callReferenceValue; conferenceIdentifier = info.arq.m_conferenceID; for (i = 0; i < info.arq.m_srcInfo.GetSize(); i++) { PString alias = H323GetAliasAddressString(info.arq.m_srcInfo[i]); if (srcAliases.GetValuesIndex(alias) == P_MAX_INDEX) srcAliases += alias; } srcNumber = H323GetAliasAddressE164(info.arq.m_srcInfo); if (!endpoint->IsBehindNAT() && info.arq.HasOptionalField(H225_AdmissionRequest::e_srcCallSignalAddress)) srcHost = info.arq.m_srcCallSignalAddress; else srcHost = info.GetReplyAddress(); if (info.arq.HasOptionalField(H225_AdmissionRequest::e_destinationInfo)) { for (i = 0; i < info.arq.m_destinationInfo.GetSize(); i++) { PString alias = H323GetAliasAddressString(info.arq.m_destinationInfo[i]); if (dstAliases.GetValuesIndex(alias) == P_MAX_INDEX) dstAliases += alias; } dstNumber = H323GetAliasAddressE164(info.arq.m_destinationInfo); } if (info.arq.HasOptionalField(H225_AdmissionRequest::e_destCallSignalAddress)) dstHost = info.arq.m_destCallSignalAddress; UnlockReadWrite(); PBoolean isGKRouted = gatekeeper.IsGatekeeperRouted(); if (direction == AnsweringCall) { // See if our policies allow the call PBoolean denied = TRUE; for (i = 0; i < info.arq.m_srcInfo.GetSize(); i++) { if (gatekeeper.CheckAliasAddressPolicy(*endpoint, info.arq, info.arq.m_srcInfo[i])) { denied = FALSE; break; } } if (info.arq.HasOptionalField(H225_AdmissionRequest::e_srcCallSignalAddress)) { if (gatekeeper.CheckSignalAddressPolicy(*endpoint, info.arq, info.arq.m_srcCallSignalAddress)) denied = FALSE; } if (denied) { info.SetRejectReason(H225_AdmissionRejectReason::e_securityDenial); PTRACE(2, "RAS\tARQ rejected, not allowed to answer call"); return H323GatekeeperRequest::Reject; } } else { PSafePtr destEP; PBoolean denied = TRUE; PBoolean noAddress = TRUE; // if no alias, convert signalling address to an alias if (!info.arq.HasOptionalField(H225_AdmissionRequest::e_destinationInfo) && info.arq.HasOptionalField(H225_AdmissionRequest::e_destCallSignalAddress)) { H323TransportAddress origTransAddr(info.arq.m_destCallSignalAddress); H225_AliasAddress transportAlias; H323SetAliasAddress(origTransAddr, transportAlias); if (gatekeeper.CheckAliasAddressPolicy(*endpoint, info.arq, transportAlias)) { denied = FALSE; H323TransportAddress destAddr; if (TranslateAliasAddress(transportAlias, info.acf.m_destinationInfo, destAddr, isGKRouted)) { if (info.acf.m_destinationInfo.GetSize()) info.acf.IncludeOptionalField(H225_AdmissionConfirm::e_destinationInfo); destEP = gatekeeper.FindEndPointByAliasAddress(transportAlias); if (!LockReadWrite()) { PTRACE(1, "RAS\tARQ rejected, lock failed on call " << *this); return H323GatekeeperRequest::Reject; } dstHost = destAddr; UnlockReadWrite(); noAddress = FALSE; } } } // if alias(es) specified, check them else { for (i = 0; i < info.arq.m_destinationInfo.GetSize(); i++) { if (gatekeeper.CheckAliasAddressPolicy(*endpoint, info.arq, info.arq.m_destinationInfo[i])) { denied = FALSE; H323TransportAddress destAddr; if (TranslateAliasAddress(info.arq.m_destinationInfo[i], info.acf.m_destinationInfo, destAddr, isGKRouted)) { if (info.acf.m_destinationInfo.GetSize()) info.acf.IncludeOptionalField(H225_AdmissionConfirm::e_destinationInfo); destEP = gatekeeper.FindEndPointByAliasAddress(info.arq.m_destinationInfo[i]); if (!LockReadWrite()) { PTRACE(1, "RAS\tARQ rejected, lock failed on call " << *this); return H323GatekeeperRequest::Reject; } dstHost = destAddr; UnlockReadWrite(); noAddress = FALSE; break; } } } if (denied) { info.SetRejectReason(H225_AdmissionRejectReason::e_securityDenial); PTRACE(2, "RAS\tARQ rejected, not allowed to make call"); return H323GatekeeperRequest::Reject; } if (noAddress) { info.SetRejectReason(H225_AdmissionRejectReason::e_calledPartyNotRegistered); PTRACE(2, "RAS\tARQ rejected, destination alias not registered"); return H323GatekeeperRequest::Reject; } if (destEP != NULL) { destEP.SetSafetyMode(PSafeReadOnly); if (!LockReadWrite()) { PTRACE(1, "RAS\tARQ rejected, lock failed on call " << *this); return H323GatekeeperRequest::Reject; } dstAliases.RemoveAll(); dstNumber = PString::Empty(); for (i = 0; i < destEP->GetAliasCount(); i++) { PString alias = destEP->GetAlias(i); dstAliases += alias; if (strspn(alias, "0123456789*#") == strlen(alias)) dstNumber = alias; } UnlockReadWrite(); destEP.SetSafetyMode(PSafeReference); } // Has provided an alias and signal address, see if agree if (destEP != NULL && info.arq.HasOptionalField(H225_AdmissionRequest::e_destCallSignalAddress)) { // Note nested if's used because some compilers (Tornado 2) cannot handle it if (gatekeeper.FindEndPointBySignalAddress(info.arq.m_destCallSignalAddress) != destEP) { info.SetRejectReason(H225_AdmissionRejectReason::e_aliasesInconsistent); PTRACE(2, "RAS\tARQ rejected, destination address not for specified alias"); return H323GatekeeperRequest::Reject; } } } // Have no address from anywhere if (dstHost.IsEmpty()) { info.SetRejectReason(H225_AdmissionRejectReason::e_incompleteAddress); PTRACE(2, "RAS\tARQ rejected, must have destination address or alias"); return H323GatekeeperRequest::Reject; } // Now see if security policy allows connection to that address if (!gatekeeper.CheckSignalAddressPolicy(*endpoint, info.arq, dstHost)) { info.SetRejectReason(H225_AdmissionRejectReason::e_securityDenial); PTRACE(2, "RAS\tARQ rejected, not allowed to make call"); return H323GatekeeperRequest::Reject; } } // See if have bandwidth unsigned requestedBandwidth = info.arq.m_bandWidth; if (requestedBandwidth == 0) requestedBandwidth = gatekeeper.GetDefaultBandwidth(); unsigned bandwidthAllocated = gatekeeper.AllocateBandwidth(requestedBandwidth); if (bandwidthAllocated == 0) { info.SetRejectReason(H225_AdmissionRejectReason::e_requestDenied); PTRACE(2, "RAS\tARQ rejected, not enough bandwidth"); return H323GatekeeperRequest::Reject; } bandwidthUsed = bandwidthAllocated; // Do we need to lock for atomic assignment? info.acf.m_bandWidth = bandwidthUsed; // Set the rate for getting unsolicited IRR's if (infoResponseRate > 0 && endpoint->GetProtocolVersion() > 2) { info.acf.IncludeOptionalField(H225_AdmissionConfirm::e_irrFrequency); info.acf.m_irrFrequency = infoResponseRate; } info.acf.m_willRespondToIRR = TRUE; // Set the destination to fixed value of gk routed if (isGKRouted) info.acf.m_callModel.SetTag(H225_CallModel::e_gatekeeperRouted); dstHost.SetPDU(info.acf.m_destCallSignalAddress); // If ep can do UUIE's then use that to expidite getting some statistics if (info.arq.m_willSupplyUUIEs) { info.acf.m_uuiesRequested.m_alerting = TRUE; info.acf.m_uuiesRequested.m_connect = TRUE; } return H323GatekeeperRequest::Confirm; } PBoolean H323GatekeeperCall::Disengage(int reason) { if (!LockReadWrite()) { PTRACE(1, "RAS\tDRQ not sent, lock failed on call " << *this); return FALSE; } if (drqReceived) { UnlockReadWrite(); PTRACE(1, "RAS\tAlready disengaged call " << *this); return FALSE; } drqReceived = TRUE; PTRACE(2, "RAS\tDisengage of call " << *this); UnlockReadWrite(); if (reason == -1) reason = H225_DisengageReason::e_forcedDrop; PBoolean ok; // Send DRQ to endpoint(s) if (rasChannel != NULL) ok = rasChannel->DisengageRequest(*this, reason); else { // Can't do DRQ as have no RAS channel to use (probably logic error) PAssertAlways("Tried to disengage call we did not receive ARQ for!"); ok = FALSE; } gatekeeper.RemoveCall(this); return ok; } H323GatekeeperRequest::Response H323GatekeeperCall::OnDisengage(H323GatekeeperDRQ & info) { PTRACE_BLOCK("H323GatekeeperCall::OnDisengage"); if (!LockReadWrite()) { PTRACE(1, "RAS\tDRQ rejected, lock failed on call " << *this); return H323GatekeeperRequest::Reject; } if (drqReceived) { UnlockReadWrite(); info.SetRejectReason(H225_DisengageRejectReason::e_requestToDropOther); PTRACE(2, "RAS\tDRQ rejected, already disengaged call " << *this); return H323GatekeeperRequest::Reject; } drqReceived = TRUE; if (info.drq.HasOptionalField(H225_DisengageRequest::e_usageInformation)) SetUsageInfo(info.drq.m_usageInformation); if (info.drq.HasOptionalField(H225_DisengageRequest::e_terminationCause)) { if (info.drq.m_terminationCause.GetTag() == H225_CallTerminationCause::e_releaseCompleteReason) { H225_ReleaseCompleteReason & reason = info.drq.m_terminationCause; callEndReason = H323TranslateToCallEndReason(Q931::ErrorInCauseIE, reason); } else { PASN_OctetString & cause = info.drq.m_terminationCause; H225_ReleaseCompleteReason dummy; callEndReason = H323TranslateToCallEndReason((Q931::CauseValues)(cause[1]&0x7f), dummy); } } UnlockReadWrite(); return H323GatekeeperRequest::Confirm; } H323GatekeeperRequest::Response H323GatekeeperCall::OnBandwidth(H323GatekeeperBRQ & info) { PTRACE_BLOCK("H323GatekeeperCall::OnBandwidth"); if (endpoint != info.endpoint) { info.SetRejectReason(H225_BandRejectReason::e_invalidPermission); PTRACE(2, "RAS\tBRQ rejected, call is not owned by endpoint"); return H323GatekeeperRequest::Reject; } bandwidthUsed = gatekeeper.AllocateBandwidth(info.brq.m_bandWidth, bandwidthUsed); if (bandwidthUsed < info.brq.m_bandWidth) { info.SetRejectReason(H225_BandRejectReason::e_insufficientResources); info.brj.m_allowedBandWidth = bandwidthUsed; PTRACE(2, "RAS\tBRQ rejected, no bandwidth"); return H323GatekeeperRequest::Reject; } info.bcf.m_bandWidth = bandwidthUsed; if (info.brq.HasOptionalField(H225_BandwidthRequest::e_usageInformation)) SetUsageInfo(info.brq.m_usageInformation); return H323GatekeeperRequest::Confirm; } H323GatekeeperRequest::Response H323GatekeeperCall::OnInfoResponse(H323GatekeeperIRR &, H225_InfoRequestResponse_perCallInfo_subtype & info) { PTRACE_BLOCK("H323GatekeeperCall::OnInfoResponse"); PTRACE(2, "RAS\tIRR received for call " << *this); if (!LockReadWrite()) { PTRACE(1, "RAS\tIRR rejected, lock failed on call " << *this); return H323GatekeeperRequest::Reject; } PTime now; lastInfoResponse = now; // Detect if have Cisco non-standard version of connect time indication. if (!connectedTime.IsValid() && info.HasOptionalField(H225_InfoRequestResponse_perCallInfo_subtype::e_nonStandardData) && info.m_nonStandardData.m_nonStandardIdentifier.GetTag() == H225_NonStandardIdentifier::e_h221NonStandard) { H225_H221NonStandard & id = info.m_nonStandardData.m_nonStandardIdentifier; if (id.m_t35CountryCode == 181 && id.m_t35Extension == 0 && id.m_manufacturerCode == 18 && // Cisco info.m_nonStandardData.m_data.GetSize() == 5 && info.m_nonStandardData.m_data[0] == 0x70) { PTime theConnectedTime((info.m_nonStandardData.m_data[1] << 24)| (info.m_nonStandardData.m_data[2] << 16)| (info.m_nonStandardData.m_data[3] << 8 )| info.m_nonStandardData.m_data[4] ); if (theConnectedTime > now || theConnectedTime < callStartTime) { connectedTime = now; OnConnected(); } else { connectedTime = theConnectedTime; OnConnected(); } } } SetUsageInfo(info.m_usageInformation); UnlockReadWrite(); return H323GatekeeperRequest::Confirm; } void H323GatekeeperCall::OnAlerting() { } void H323GatekeeperCall::OnConnected() { } static PBoolean CheckTimeSince(PTime & lastTime, unsigned threshold) { if (threshold == 0) return TRUE; PTime now; PTimeInterval delta = now - lastTime; return delta.GetSeconds() < (int)(threshold+10); } PBoolean H323GatekeeperCall::OnHeartbeat() { if (!LockReadOnly()) { PTRACE(1, "RAS\tOnHeartbeat lock failed on call " << *this); return TRUE; } if (CheckTimeSince(lastInfoResponse, infoResponseRate)) { UnlockReadOnly(); return TRUE; } // Can't do IRQ as have no RAS channel to use (probably logic error) if (rasChannel == NULL) { UnlockReadOnly(); PAssertAlways("Timeout on heartbeat for call we did not receive ARQ for!"); return FALSE; } UnlockReadOnly(); // Do IRQ and wait for IRR on call PTRACE(2, "RAS\tTimeout on heartbeat, doing IRQ for call "<< *this); if (!rasChannel->InfoRequest(*endpoint, this)) return FALSE; if (!LockReadOnly()) { PTRACE(1, "RAS\tOnHeartbeat lock failed on call " << *this); return TRUE; } // Return TRUE if got a resonse, ie client does not do unsolicited IRR's // otherwise did not get a response from client so return FALSE and // (probably) disengage the call. PBoolean response = CheckTimeSince(lastInfoResponse, infoResponseRate); UnlockReadOnly(); return response; } #ifdef H323_H248 PString H323GatekeeperCall::GetCallCreditAmount() const { if (endpoint != NULL) return endpoint->GetCallCreditAmount(); return PString::Empty(); } PBoolean H323GatekeeperCall::GetCallCreditMode() const { return endpoint != NULL ? endpoint->GetCallCreditMode() : FALSE; } unsigned H323GatekeeperCall::GetDurationLimit() const { return 0; } PBoolean H323GatekeeperCall::SendCallCreditServiceControl() { PString amount; if (endpoint->CanDisplayAmountString()) amount = GetCallCreditAmount(); unsigned durationLimit = 0; if (endpoint->CanEnforceDurationLimit()) durationLimit = GetDurationLimit(); if (amount.IsEmpty() && durationLimit == 0) return FALSE; H323CallCreditServiceControl credit(amount, GetCallCreditMode(), durationLimit); return SendServiceControlSession(credit); } PBoolean H323GatekeeperCall::AddCallCreditServiceControl(H225_ArrayOf_ServiceControlSession & serviceControl) const { PString amount; if (endpoint->CanDisplayAmountString()) amount = GetCallCreditAmount(); unsigned durationLimit = 0; if (endpoint->CanEnforceDurationLimit()) durationLimit = GetDurationLimit(); if (amount.IsEmpty() && durationLimit == 0) return FALSE; H323CallCreditServiceControl credit(amount, GetCallCreditMode(), durationLimit); return endpoint->AddServiceControlSession(credit, serviceControl); } PBoolean H323GatekeeperCall::SendServiceControlSession(const H323ServiceControlSession & session) { // Send SCI to endpoint(s) if (rasChannel == NULL || endpoint == NULL) { // Can't do SCI as have no RAS channel to use (probably logic error) PAssertAlways("Tried to do SCI to call we did not receive ARQ for!"); return FALSE; } return rasChannel->ServiceControlIndication(*endpoint, session, this); } #endif // H323_H248 PBoolean H323GatekeeperCall::SetBandwidthUsed(unsigned newBandwidth) { if (newBandwidth == bandwidthUsed) return TRUE; bandwidthUsed = gatekeeper.AllocateBandwidth(newBandwidth, bandwidthUsed); return bandwidthUsed == newBandwidth; } static PString MakeAddress(const PString & number, const PStringArray aliases, const H323TransportAddress & host) { PStringStream addr; if (!number) addr << number; else if (!aliases.IsEmpty()) addr << aliases[0]; if (!host) { if (!addr.IsEmpty()) addr << '@'; addr << host; } return addr; } PString H323GatekeeperCall::GetSourceAddress() const { if (!LockReadOnly()) { PTRACE(1, "RAS\tGetSourceAddress lock failed on call " << *this); return PString::Empty(); } PString addr = MakeAddress(srcNumber, srcAliases, srcHost); UnlockReadOnly(); return addr; } PString H323GatekeeperCall::GetDestinationAddress() const { if (!LockReadOnly()) { PTRACE(1, "RAS\tGetDestinationAddress lock failed on call " << *this); return PString::Empty(); } PString addr = MakeAddress(dstNumber, dstAliases, dstHost); UnlockReadOnly(); return addr; } void H323GatekeeperCall::SetUsageInfo(const H225_RasUsageInformation & usage) { PTime now; if (!alertingTime.IsValid() && usage.HasOptionalField(H225_RasUsageInformation::e_alertingTime)) { PTime theAlertingTime((unsigned)usage.m_alertingTime); if (theAlertingTime > now || theAlertingTime < callStartTime) { alertingTime = now; OnAlerting(); } else if (theAlertingTime > callStartTime) { alertingTime = theAlertingTime; OnAlerting(); } } if (!connectedTime.IsValid() && usage.HasOptionalField(H225_RasUsageInformation::e_connectTime)) { PTime theConnectedTime((unsigned)usage.m_connectTime); if (theConnectedTime > now || theConnectedTime < callStartTime) { connectedTime = now; OnConnected(); } else { connectedTime = theConnectedTime; OnConnected(); } } if (!callEndTime.IsValid() && usage.HasOptionalField(H225_RasUsageInformation::e_endTime)) { PTime theCallEndTime = PTime((unsigned)usage.m_endTime); if (theCallEndTime > now || (alertingTime.IsValid() && theCallEndTime < alertingTime) || (connectedTime.IsValid() && theCallEndTime < connectedTime) || theCallEndTime < callStartTime) callEndTime = now; else callEndTime = theCallEndTime; } } PBoolean H323GatekeeperCall::TranslateAliasAddress( const H225_AliasAddress & alias, H225_ArrayOf_AliasAddress & aliases, H323TransportAddress & address, PBoolean & gkRouted ) { return gatekeeper.TranslateAliasAddress(alias, aliases, address, gkRouted, this); } ///////////////////////////////////////////////////////////////////////////// H323RegisteredEndPoint::H323RegisteredEndPoint(H323GatekeeperServer & gk, const PString & id) : gatekeeper(gk), rasChannel(NULL), identifier(id), protocolVersion(0), isBehindNAT(FALSE), canDisplayAmountString(FALSE), canEnforceDurationLimit(FALSE), timeToLive(0), authenticators(gk.GetOwnerEndPoint().CreateAuthenticators()) { activeCalls.DisallowDeleteObjects(); PTRACE(3, "RAS\tCreated registered endpoint: " << id); } PObject::Comparison H323RegisteredEndPoint::Compare(const PObject & obj) const { // Do not have to lock the object as these fields should never change for // life of the object PAssert(PIsDescendant(&obj, H323RegisteredEndPoint), PInvalidCast); return identifier.Compare(((const H323RegisteredEndPoint &)obj).identifier); } void H323RegisteredEndPoint::PrintOn(ostream & strm) const { // Do not have to lock the object as these fields should never change for // life of the object strm << identifier; } void H323RegisteredEndPoint::AddCall(H323GatekeeperCall * call) { if (call == NULL) { PTRACE(1, "RAS\tCould not add NULL call to endpoint " << *this); return; } if (!LockReadWrite()) { PTRACE(1, "RAS\tCould not add call " << *call << ", lock failed on endpoint " << *this); return; } if (activeCalls.GetObjectsIndex(call) == P_MAX_INDEX) activeCalls.Append(call); UnlockReadWrite(); } PBoolean H323RegisteredEndPoint::RemoveCall(H323GatekeeperCall * call) { if (call == NULL) { PTRACE(1, "RAS\tCould not remove NULL call to endpoint " << *this); return FALSE; } if (!LockReadWrite()) { PTRACE(1, "RAS\tCould not remove call " << *call << ", lock failed on endpoint " << *this); return FALSE; } PBoolean ok = activeCalls.Remove(call); UnlockReadWrite(); return ok; } void H323RegisteredEndPoint::RemoveAlias(const PString & alias) { if (!LockReadWrite()) { PTRACE(1, "RAS\tCould not remove alias \"" << alias << "\", lock failed on endpoint " << *this); return; } // remove the aliases from the list inside the endpoint PINDEX idx; while ((idx = aliases.GetValuesIndex(alias)) != P_MAX_INDEX) aliases.RemoveAt(idx); // remove the aliases from the list in the gatekeeper gatekeeper.RemoveAlias(*this, alias); UnlockReadWrite(); } static PBoolean IsTransportAddressSuperset(const H225_ArrayOf_TransportAddress & pdu, const H323TransportAddressArray & oldAddresses) { H323TransportAddressArray newAddresses(pdu); for (PINDEX i = 0; i < oldAddresses.GetSize(); i++) { if (newAddresses.GetValuesIndex(oldAddresses[i]) == P_MAX_INDEX) return FALSE; } return TRUE; } static PStringArray GetAliasAddressArray(const H225_ArrayOf_AliasAddress & pdu) { PStringArray aliases; for (PINDEX i = 0; i < pdu.GetSize(); i++) { PString alias = H323GetAliasAddressString(pdu[i]); if (!alias) aliases.AppendString(alias); } return aliases; } static PBoolean IsAliasAddressSuperset(const H225_ArrayOf_AliasAddress & pdu, const PStringArray & oldAliases) { PStringArray newAliases = GetAliasAddressArray(pdu); for (PINDEX i = 0; i < oldAliases.GetSize(); i++) { if (newAliases.GetValuesIndex(oldAliases[i]) == P_MAX_INDEX) return FALSE; } return TRUE; } H323GatekeeperRequest::Response H323RegisteredEndPoint::OnRegistration(H323GatekeeperRRQ & info) { PTRACE_BLOCK("H323RegisteredEndPoint::OnRegistration"); if (!LockReadWrite()) { PTRACE(1, "RAS\tRRQ rejected, lock failed on endpoint " << *this); return H323GatekeeperRequest::Reject; } rasChannel = &info.GetRasChannel(); lastRegistration = PTime(); protocolVersion = info.rrq.m_protocolIdentifier[5]; timeToLive = gatekeeper.GetTimeToLive(); if (info.rrq.HasOptionalField(H225_RegistrationRequest::e_timeToLive) && timeToLive > info.rrq.m_timeToLive) timeToLive = info.rrq.m_timeToLive; if (timeToLive > 0) { info.rcf.IncludeOptionalField(H225_RegistrationRequest::e_timeToLive); info.rcf.m_timeToLive = timeToLive; } info.rcf.m_endpointIdentifier = identifier; UnlockReadWrite(); if (info.rrq.m_keepAlive) return info.CheckCryptoTokens() ? H323GatekeeperRequest::Confirm : H323GatekeeperRequest::Reject; if (info.rrq.HasOptionalField(H225_RegistrationRequest::e_endpointIdentifier)) { // Make sure addresses are a superset of previous registration if (!IsTransportAddressSuperset(info.rrq.m_rasAddress, rasAddresses) || !IsTransportAddressSuperset(info.rrq.m_callSignalAddress, signalAddresses) || (info.rrq.HasOptionalField(H225_RegistrationRequest::e_terminalAlias) && !IsAliasAddressSuperset(info.rrq.m_terminalAlias, aliases))) { info.SetRejectReason(H225_RegistrationRejectReason::e_discoveryRequired); PTRACE(2, "RAS\tRRQ rejected, not superset of existing registration."); return H323GatekeeperRequest::Reject; } PTRACE(3, "RAS\tFull RRQ received for already registered endpoint"); } H323GatekeeperRequest::Response response = OnFullRegistration(info); if (response != H323GatekeeperRequest::Confirm) return response; // Final check, the H.235 security if (!info.CheckCryptoTokens()) return H323GatekeeperRequest::Reject; PINDEX i; info.rcf.m_callSignalAddress.SetSize(signalAddresses.GetSize()); for (i = 0; i < signalAddresses.GetSize(); i++) signalAddresses[i].SetPDU(info.rcf.m_callSignalAddress[i]); if (aliases.GetSize() > 0) { info.rcf.IncludeOptionalField(H225_RegistrationConfirm::e_terminalAlias); info.rcf.m_terminalAlias.SetSize(aliases.GetSize()); for (i = 0; i < aliases.GetSize(); i++) H323SetAliasAddress(aliases[i], info.rcf.m_terminalAlias[i]); } #ifdef H323_H248 if (canDisplayAmountString) { H323CallCreditServiceControl credit(GetCallCreditAmount(), GetCallCreditMode()); if (AddServiceControlSession(credit, info.rcf.m_serviceControl)) info.rcf.IncludeOptionalField(H225_RegistrationConfirm::e_serviceControl); } #endif #ifdef H323_H501 // If have peer element, so add/update a descriptor for ep. H323PeerElement * peerElement = gatekeeper.GetPeerElement(); if (peerElement != NULL) { H225_ArrayOf_AliasAddress transportAddresses; H323SetAliasAddresses(signalAddresses, transportAddresses); H225_EndpointType terminalType = info.rrq.m_terminalType; H225_ArrayOf_AliasAddress aliases = info.rcf.m_terminalAlias; if (OnSendDescriptorForEndpoint(aliases, terminalType, transportAddresses)) { H501_ArrayOf_AddressTemplate addressTemplates; addressTemplates.SetSize(1); H323PeerElementDescriptor::CopyToAddressTemplate(addressTemplates[0], terminalType, // info.rrq.m_terminalType, aliases, // info.rcf.m_terminalAlias, transportAddresses); peerElement->AddDescriptor(descriptorID, H323PeerElement::LocalServiceRelationshipOrdinal, addressTemplates, PTime()); } } #endif return H323GatekeeperRequest::Confirm; } H323GatekeeperRequest::Response H323RegisteredEndPoint::OnFullRegistration(H323GatekeeperRRQ & info) { if (!LockReadWrite()) { PTRACE(1, "RAS\tRRQ rejected, lock failed on endpoint " << *this); return H323GatekeeperRequest::Reject; } isBehindNAT = info.IsBehindNAT(); rasAddresses = info.GetReplyAddresses(); signalAddresses = H323TransportAddressArray(info.rrq.m_callSignalAddress); if (signalAddresses.IsEmpty()) { UnlockReadWrite(); info.SetRejectReason(H225_RegistrationRejectReason::e_invalidCallSignalAddress); return H323GatekeeperRequest::Reject; } if (isBehindNAT) { // Need to (maybe) massage the signalling addresses H323EndPoint & ep = rasChannel->GetEndPoint(); WORD listenerPort = 0; PINDEX i; for (i = 0; i < signalAddresses.GetSize(); i++) { PIPSocket::Address ip; WORD port; if (signalAddresses[i].GetIpAndPort(ip, port)) { if (!ep.IsLocalAddress(ip)) break; if (listenerPort == 0) listenerPort = port; // Have a private address, save the port } } if (i < signalAddresses.GetSize()) { // Found a public address in the list, make sure it is the first entry if (i > 0) { H323TransportAddress addr = signalAddresses[0]; signalAddresses[0] = signalAddresses[i]; signalAddresses[i] = addr; } } else if (listenerPort != 0) { // If did not have a public signalling address, but did have a private // one, then we insert at the begining an entry on the same port but // using the public address from the RAS. This will not work for all // NAT types, but will for some, eg symmetric with port forwarding which // is a common configuration for Linux based routers. i = signalAddresses.GetSize()-1; signalAddresses.AppendAddress(signalAddresses[i]); while (--i > 0) signalAddresses[i] = signalAddresses[i-1]; PIPSocket::Address natAddress; rasAddresses[0].GetIpAddress(natAddress); signalAddresses[0] = H323TransportAddress(natAddress, listenerPort); } } if (info.rrq.HasOptionalField(H225_RegistrationRequest::e_terminalAlias)) aliases = GetAliasAddressArray(info.rrq.m_terminalAlias); const H225_EndpointType & terminalType = info.rrq.m_terminalType; if (terminalType.HasOptionalField(H225_EndpointType::e_gateway) && terminalType.m_gateway.HasOptionalField(H225_GatewayInfo::e_protocol)) { const H225_ArrayOf_SupportedProtocols & protocols = terminalType.m_gateway.m_protocol; for (PINDEX i = 0; i < protocols.GetSize(); i++) { // Only voice prefixes are supported if (protocols[i].GetTag() == H225_SupportedProtocols::e_voice) { H225_VoiceCaps & voiceCaps = protocols[i]; if (voiceCaps.HasOptionalField(H225_VoiceCaps::e_supportedPrefixes)) { H225_ArrayOf_SupportedPrefix & prefixes = voiceCaps.m_supportedPrefixes; voicePrefixes.SetSize(prefixes.GetSize()); for (PINDEX j = 0; j < prefixes.GetSize(); j++) { PString prefix = H323GetAliasAddressString(prefixes[j].m_prefix); voicePrefixes[j] = prefix; } } break; // If voice protocol is found, don't look any further } } } applicationInfo = H323GetApplicationInfo(info.rrq.m_endpointVendor); canDisplayAmountString = FALSE; canEnforceDurationLimit = FALSE; if (info.rrq.HasOptionalField(H225_RegistrationRequest::e_callCreditCapability)) { if (info.rrq.m_callCreditCapability.HasOptionalField(H225_CallCreditCapability::e_canDisplayAmountString)) canDisplayAmountString = info.rrq.m_callCreditCapability.m_canDisplayAmountString; if (info.rrq.m_callCreditCapability.HasOptionalField(H225_CallCreditCapability::e_canEnforceDurationLimit)) canEnforceDurationLimit = info.rrq.m_callCreditCapability.m_canEnforceDurationLimit; } h225Version = 0; PUnsignedArray protocolVer = info.rrq.m_protocolIdentifier.GetValue(); if (protocolVer.GetSize() >= 6) h225Version = protocolVer[5]; H323GatekeeperRequest::Response respone = OnSecureRegistration(info); UnlockReadWrite(); return respone; } H323GatekeeperRequest::Response H323RegisteredEndPoint::OnSecureRegistration(H323GatekeeperRRQ & info) { for (PINDEX i = 0; i < aliases.GetSize(); i++) { PString password; if (gatekeeper.GetUsersPassword(aliases[i], password, *this)) { PTRACE(3, "RAS\tFound user " << aliases[i] << " for H.235 security."); if (!password) SetPassword(password, aliases[i]); return H323GatekeeperRequest::Confirm; } } if (gatekeeper.IsRequiredH235()) { PTRACE(2, "RAS\tRejecting RRQ, no aliases have a password."); info.SetRejectReason(H225_RegistrationRejectReason::e_securityDenial); return H323GatekeeperRequest::Reject; } return H323GatekeeperRequest::Confirm; } PBoolean H323RegisteredEndPoint::SetPassword(const PString & password, const PString & username) { if (authenticators.IsEmpty() || password.IsEmpty()) return FALSE; PTRACE(3, "RAS\tSetting password and enabling H.235 security for " << *this); for (PINDEX i = 0; i < authenticators.GetSize(); i++) { H235Authenticator & authenticator = authenticators[i]; authenticator.SetPassword(password); if (!username && !authenticator.UseGkAndEpIdentifiers()) authenticator.SetRemoteId(username); authenticator.Enable(); } return TRUE; } H323GatekeeperRequest::Response H323RegisteredEndPoint::OnUnregistration(H323GatekeeperURQ & info) { PTRACE_BLOCK("H323RegisteredEndPoint::OnUnregistration"); if (activeCalls.GetSize() > 0) { info.SetRejectReason(H225_UnregRejectReason::e_callInProgress); return H323GatekeeperRequest::Reject; } return H323GatekeeperRequest::Confirm; } PBoolean H323RegisteredEndPoint::Unregister(int reason) { if (reason == -1) reason = H225_UnregRequestReason::e_maintenance; PBoolean ok; // Send DRQ to endpoint(s) if (rasChannel != NULL) ok = rasChannel->UnregistrationRequest(*this, reason); else { // Can't do DRQ as have no RAS channel to use (probably logic error) PAssertAlways("Tried to unregister endpoint we did not receive RRQ for!"); ok = FALSE; } gatekeeper.RemoveEndPoint(this); return ok; } H323GatekeeperRequest::Response H323RegisteredEndPoint::OnInfoResponse(H323GatekeeperIRR & info) { PTRACE_BLOCK("H323RegisteredEndPoint::OnInfoResponse"); if (!LockReadWrite()) { PTRACE(1, "RAS\tIRR rejected, lock failed on endpoint " << *this); return H323GatekeeperRequest::Reject; } lastInfoResponse = PTime(); UnlockReadWrite(); if (info.irr.HasOptionalField(H225_InfoRequestResponse::e_irrStatus) && info.irr.m_irrStatus.GetTag() == H225_InfoRequestResponseStatus::e_invalidCall) { PTRACE(2, "RAS\tIRR for call-id endpoint does not know about"); return H323GatekeeperRequest::Confirm; } if (!info.irr.HasOptionalField(H225_InfoRequestResponse::e_perCallInfo)) { // Special case for Innovaphone clients that do not contain a perCallInfo // field and expects that to mean "all calls a normal". if (protocolVersion < 5 && applicationInfo.Find("innovaphone") != P_MAX_INDEX) { H225_InfoRequestResponse_perCallInfo_subtype fakeCallInfo; if (!LockReadOnly()) { PTRACE(1, "RAS\tIRR rejected, lock failed on endpoint " << *this); return H323GatekeeperRequest::Reject; } for (PINDEX i = 0; i < activeCalls.GetSize(); i++) activeCalls[i].OnInfoResponse(info, fakeCallInfo); UnlockReadOnly(); } PTRACE(2, "RAS\tIRR for call-id endpoint does not know about"); return H323GatekeeperRequest::Confirm; } if (!LockReadOnly()) { PTRACE(1, "RAS\tIRR rejected, lock failed on endpoint " << *this); return H323GatekeeperRequest::Reject; } for (PINDEX i = 0; i < info.irr.m_perCallInfo.GetSize(); i++) { H225_InfoRequestResponse_perCallInfo_subtype & perCallInfo = info.irr.m_perCallInfo[i]; // Some systems don't say what direction the call is so find it in the // list regardless of the direction H323GatekeeperCall::Direction callDirection; if (!perCallInfo.HasOptionalField(H225_InfoRequestResponse_perCallInfo_subtype::e_originator)) callDirection = H323GatekeeperCall::UnknownDirection; else if (perCallInfo.m_originator) callDirection = H323GatekeeperCall::OriginatingCall; else callDirection = H323GatekeeperCall::AnsweringCall; H323GatekeeperCall search(gatekeeper, perCallInfo.m_callIdentifier.m_guid, callDirection); PINDEX idx = activeCalls.GetValuesIndex(search); if (idx != P_MAX_INDEX) { activeCalls[idx].OnInfoResponse(info, perCallInfo); if (callDirection == H323GatekeeperCall::UnknownDirection) { // There could be two call entries (originator or destination) and the // ep did not say which. GetValuesIndex() always give the first one so // see if the next one is also a match if (idx < activeCalls.GetSize()-1 && activeCalls[idx+1] == search) activeCalls[idx+1].OnInfoResponse(info, perCallInfo); } } else { PTRACE(2, "RAS\tEndpoint has call-id gatekeeper does not know about: " << search); } } UnlockReadOnly(); return H323GatekeeperRequest::Confirm; } PBoolean H323RegisteredEndPoint::OnTimeToLive() { if (!LockReadOnly()) { PTRACE(1, "RAS\tOnTimeToLive lock failed on endpoint " << *this); return FALSE; } if (CheckTimeSince(lastRegistration, timeToLive) || CheckTimeSince(lastInfoResponse, timeToLive)) { UnlockReadOnly(); return TRUE; } // Can't do IRQ as have no RAS channel to use (probably logic error) if (rasChannel == NULL) { UnlockReadOnly(); PAssertAlways("Timeout on time to live for endpoint we did not receive RRQ for!"); return FALSE; } UnlockReadOnly(); // Do IRQ and wait for IRR on call PTRACE(2, "RAS\tTime to live, doing IRQ for endpoint "<< *this); if (!rasChannel->InfoRequest(*this)) return FALSE; if (!LockReadOnly()) { PTRACE(1, "RAS\tOnTimeToLive lock failed on endpoint " << *this); return FALSE; } // Return TRUE if got a resonse, ie client does not do unsolicited IRR's // otherwise did not get a response from client so return FALSE and // (probably) disengage the call. PBoolean response = CheckTimeSince(lastInfoResponse, timeToLive); UnlockReadOnly(); return response; } #ifdef H323_H248 PString H323RegisteredEndPoint::GetCallCreditAmount() const { return PString::Empty(); } PBoolean H323RegisteredEndPoint::GetCallCreditMode() const { return TRUE; } PBoolean H323RegisteredEndPoint::SendServiceControlSession(const H323ServiceControlSession & session) { // Send SCI to endpoint(s) if (rasChannel == NULL) { // Can't do SCI as have no RAS channel to use (probably logic error) PAssertAlways("Tried to do SCI to endpoint we did not receive RRQ for!"); return FALSE; } return rasChannel->ServiceControlIndication(*this, session); } PBoolean H323RegisteredEndPoint::AddServiceControlSession(const H323ServiceControlSession & session, H225_ArrayOf_ServiceControlSession & serviceControl) { if (!session.IsValid()) return FALSE; PString type = session.GetServiceControlType(); H225_ServiceControlSession_reason::Choices reason = H225_ServiceControlSession_reason::e_refresh; if (!serviceControlSessions.Contains(type)) { PINDEX id = 0; PINDEX i = 0; while (i < serviceControlSessions.GetSize()) { if (id != serviceControlSessions.GetDataAt(i)) i++; else { if (++id >= 256) return FALSE; i = 0; } } serviceControlSessions.SetAt(type, id); reason = H225_ServiceControlSession_reason::e_open; } PINDEX last = serviceControl.GetSize(); serviceControl.SetSize(last+1); H225_ServiceControlSession & pdu = serviceControl[last]; pdu.m_sessionId = serviceControlSessions[type]; pdu.m_reason = reason; if (session.OnSendingPDU(pdu.m_contents)) pdu.IncludeOptionalField(H225_ServiceControlSession::e_contents); return TRUE; } #endif // H323_H248 PBoolean H323RegisteredEndPoint::CanReceiveRIP() const { // H225v1 does not support RIP // neither does NetMeeting, even though it says it is H225v2. return (h225Version > 1) && (applicationInfo.Find("netmeeting") == P_MAX_INDEX); } #ifdef H323_H501 PBoolean H323RegisteredEndPoint::OnSendDescriptorForEndpoint( H225_ArrayOf_AliasAddress & aliases, // aliases for the enndpoint H225_EndpointType & terminalType, // terminal type H225_ArrayOf_AliasAddress & transportAddresses // transport addresses ) { return gatekeeper.OnSendDescriptorForEndpoint(*this, aliases, terminalType, transportAddresses); } #endif ///////////////////////////////////////////////////////////////////////////// H323GatekeeperListener::H323GatekeeperListener(H323EndPoint & ep, H323GatekeeperServer & gk, const PString & id, H323Transport * trans) : H225_RAS(ep, trans), gatekeeper(gk) { gatekeeperIdentifier = id; transport->SetPromiscuous(H323Transport::AcceptFromAny); PTRACE(2, "H323gk\tGatekeeper server created."); } H323GatekeeperListener::~H323GatekeeperListener() { StopChannel(); PTRACE(2, "H323gk\tGatekeeper server destroyed."); } H323GatekeeperRequest::Response H323GatekeeperListener::OnDiscovery(H323GatekeeperGRQ & info) { PTRACE_BLOCK("H323GatekeeperListener::OnDiscovery"); if (info.grq.m_protocolIdentifier.GetSize() != 6 || info.grq.m_protocolIdentifier[5] < 2) { info.SetRejectReason(H225_GatekeeperRejectReason::e_invalidRevision); PTRACE(2, "RAS\tGRQ rejected, version 1 not supported"); return H323GatekeeperRequest::Reject; } if (!info.CheckGatekeeperIdentifier()) return H323GatekeeperRequest::Reject; // cannot use commented code because transport->remoteAddr is // not set on broadcast PDUs // transport->SetUpTransportPDU(info.gcf.m_rasAddress, TRUE); { PIPSocket::Address localAddr, remoteAddr; WORD localPort; transport->GetLocalAddress().GetIpAndPort(localAddr, localPort); H323TransportAddress(info.grq.m_rasAddress).GetIpAddress(remoteAddr); endpoint.InternalTranslateTCPAddress(localAddr, remoteAddr); endpoint.TranslateTCPPort(localPort,remoteAddr); H323TransportAddress newAddr = H323TransportAddress(localAddr, localPort); H225_TransportAddress & pdu = info.gcf.m_rasAddress; newAddr.SetPDU(pdu); } return gatekeeper.OnDiscovery(info); } PBoolean H323GatekeeperListener::OnReceiveGatekeeperRequest(const H323RasPDU & pdu, const H225_GatekeeperRequest & /*grq*/) { PTRACE_BLOCK("H323GatekeeperListener::OnReceiveGatekeeperRequest"); H323GatekeeperGRQ * info = new H323GatekeeperGRQ(*this, pdu); if (!info->HandlePDU()) delete info; return FALSE; } H323GatekeeperRequest::Response H323GatekeeperListener::OnRegistration(H323GatekeeperRRQ & info) { PTRACE_BLOCK("H323GatekeeperListener::OnRegistration"); if (info.rrq.HasOptionalField(H225_RegistrationRequest::e_endpointIdentifier)) info.endpoint = gatekeeper.FindEndPointByIdentifier(info.rrq.m_endpointIdentifier); if (!info.CheckGatekeeperIdentifier()) return H323GatekeeperRequest::Reject; if (info.rrq.m_protocolIdentifier.GetSize() != 6 || info.rrq.m_protocolIdentifier[5] < 2) { info.SetRejectReason(H225_RegistrationRejectReason::e_invalidRevision); PTRACE(2, "RAS\tRRQ rejected, version 1 not supported"); return H323GatekeeperRequest::Reject; } H323GatekeeperRequest::Response response = gatekeeper.OnRegistration(info); if (response != H323GatekeeperRequest::Confirm) return response; // Adjust the authenticator remote ID to endpoint ID if (!info.rrq.m_keepAlive) { PSafePtr lock(info.endpoint, PSafeReadWrite); H235Authenticators authenticators = info.endpoint->GetAuthenticators(); for (PINDEX i = 0; i < authenticators.GetSize(); i++) { H235Authenticator & authenticator = authenticators[i]; if (authenticator.UseGkAndEpIdentifiers()) { authenticator.SetRemoteId(info.endpoint->GetIdentifier()); authenticator.SetLocalId(gatekeeperIdentifier); } } } return H323GatekeeperRequest::Confirm; } PBoolean H323GatekeeperListener::OnReceiveRegistrationRequest(const H323RasPDU & pdu, const H225_RegistrationRequest & /*rrq*/) { PTRACE_BLOCK("H323GatekeeperListener::OnReceiveRegistrationRequest"); H323GatekeeperRRQ * info = new H323GatekeeperRRQ(*this, pdu); if (!info->HandlePDU()) delete info; return FALSE; } H323GatekeeperRequest::Response H323GatekeeperListener::OnUnregistration(H323GatekeeperURQ & info) { PTRACE_BLOCK("H323GatekeeperListener::OnUnregistration"); if (info.urq.HasOptionalField(H225_UnregistrationRequest::e_endpointIdentifier)) info.endpoint = gatekeeper.FindEndPointByIdentifier(info.urq.m_endpointIdentifier); else info.endpoint = gatekeeper.FindEndPointBySignalAddresses(info.urq.m_callSignalAddress); if (info.endpoint == NULL) { info.SetRejectReason(H225_UnregRejectReason::e_notCurrentlyRegistered); PTRACE(2, "RAS\tURQ rejected, not registered"); return H323GatekeeperRequest::Reject; } return gatekeeper.OnUnregistration(info); } PBoolean H323GatekeeperListener::OnReceiveUnregistrationRequest(const H323RasPDU & pdu, const H225_UnregistrationRequest & /*urq*/) { PTRACE_BLOCK("H323GatekeeperListener::OnReceiveUnregistrationRequest"); H323GatekeeperURQ * info = new H323GatekeeperURQ(*this, pdu); if (!info->HandlePDU()) delete info; return FALSE; } PBoolean H323GatekeeperListener::OnReceiveUnregistrationConfirm(const H225_UnregistrationConfirm & pdu) { PTRACE_BLOCK("H323GatekeeperListener::OnReceiveUnregistrationConfirm"); if (!H225_RAS::OnReceiveUnregistrationConfirm(pdu)) return FALSE; return TRUE; } PBoolean H323GatekeeperListener::OnReceiveUnregistrationReject(const H225_UnregistrationReject & pdu) { PTRACE_BLOCK("H323GatekeeperListener::OnReceiveUnregistrationReject"); if (!H225_RAS::OnReceiveUnregistrationReject(pdu)) return FALSE; return TRUE; } H323GatekeeperRequest::Response H323GatekeeperListener::OnAdmission(H323GatekeeperARQ & info) { PTRACE_BLOCK("H323GatekeeperListener::OnAdmission"); if (!info.CheckGatekeeperIdentifier()) return H323GatekeeperRequest::Reject; if (!info.GetRegisteredEndPoint()) return H323GatekeeperRequest::Reject; if (!info.CheckCryptoTokens()) { H235Authenticators adjustedAuthenticators; if (!gatekeeper.GetAdmissionRequestAuthentication(info, adjustedAuthenticators)) return H323GatekeeperRequest::Reject; PTRACE(3, "RAS\tARQ received with separate credentials: " << setfill(',') << adjustedAuthenticators << setfill(' ')); if (!info.H323Transaction::CheckCryptoTokens(adjustedAuthenticators)) { PTRACE(2, "RAS\tARQ rejected, alternate security tokens invalid."); return H323GatekeeperRequest::Reject; } if (info.alternateSecurityID.IsEmpty() && !adjustedAuthenticators.IsEmpty()) info.alternateSecurityID = adjustedAuthenticators[0].GetRemoteId(); } H323GatekeeperRequest::Response response = gatekeeper.OnAdmission(info); if (response != H323GatekeeperRequest::Confirm) return response; if (info.acf.m_callModel.GetTag() == H225_CallModel::e_gatekeeperRouted) { H225_ArrayOf_TransportAddress addresses; if (SetUpCallSignalAddresses(addresses)) info.acf.m_destCallSignalAddress = addresses[0]; } return H323GatekeeperRequest::Confirm; } PBoolean H323GatekeeperListener::OnReceiveAdmissionRequest(const H323RasPDU & pdu, const H225_AdmissionRequest & /*arq*/) { PTRACE_BLOCK("H323GatekeeperListener::OnReceiveAdmissionRequest"); H323GatekeeperARQ * info = new H323GatekeeperARQ(*this, pdu); if (!info->HandlePDU()) delete info; return FALSE; } PBoolean H323GatekeeperListener::UnregistrationRequest(const H323RegisteredEndPoint & ep, unsigned reason) { PTRACE(3, "RAS\tUnregistration request to endpoint " << ep); H323RasPDU pdu(ep.GetAuthenticators()); H225_UnregistrationRequest & urq = pdu.BuildUnregistrationRequest(GetNextSequenceNumber()); urq.IncludeOptionalField(H225_UnregistrationRequest::e_gatekeeperIdentifier); urq.m_gatekeeperIdentifier = gatekeeperIdentifier; urq.m_callSignalAddress.SetSize(ep.GetSignalAddressCount()); for (PINDEX i = 0; i < ep.GetSignalAddressCount(); i++) ep.GetSignalAddress(i).SetPDU(urq.m_callSignalAddress[i]); urq.IncludeOptionalField(H225_UnregistrationRequest::e_endpointIdentifier); urq.m_endpointIdentifier = ep.GetIdentifier(); urq.m_reason.SetTag(reason); Request request(urq.m_requestSeqNum, pdu, ep.GetRASAddresses()); return MakeRequest(request); } PBoolean H323GatekeeperListener::DisengageRequest(const H323GatekeeperCall & call, unsigned reason) { H323RegisteredEndPoint & ep = call.GetEndPoint(); PTRACE(3, "RAS\tDisengage request to endpoint " << ep << " call " << call); H323RasPDU pdu(ep.GetAuthenticators()); H225_DisengageRequest & drq = pdu.BuildDisengageRequest(GetNextSequenceNumber()); drq.IncludeOptionalField(H225_DisengageRequest::e_gatekeeperIdentifier); drq.m_gatekeeperIdentifier = gatekeeperIdentifier; drq.m_endpointIdentifier = ep.GetIdentifier(); drq.m_conferenceID = call.GetConferenceIdentifier(); drq.m_callReferenceValue = call.GetCallReference(); drq.m_callIdentifier.m_guid = call.GetCallIdentifier(); drq.m_disengageReason.SetTag(reason); drq.m_answeredCall = call.IsAnsweringCall(); #ifdef H323_H248 if (call.AddCallCreditServiceControl(drq.m_serviceControl)) drq.IncludeOptionalField(H225_DisengageRequest::e_serviceControl); #endif Request request(drq.m_requestSeqNum, pdu, ep.GetRASAddresses()); return MakeRequest(request); } H323GatekeeperRequest::Response H323GatekeeperListener::OnDisengage(H323GatekeeperDRQ & info) { PTRACE_BLOCK("H323GatekeeperListener::OnDisengage"); if (!info.CheckGatekeeperIdentifier()) return H323GatekeeperRequest::Reject; if (!info.GetRegisteredEndPoint()) return H323GatekeeperRequest::Reject; if (!info.CheckCryptoTokens()) return H323GatekeeperRequest::Reject; return gatekeeper.OnDisengage(info); } PBoolean H323GatekeeperListener::OnReceiveDisengageRequest(const H323RasPDU & pdu, const H225_DisengageRequest & /*drq*/) { PTRACE_BLOCK("H323GatekeeperListener::OnReceiveDisengageRequest"); H323GatekeeperDRQ * info = new H323GatekeeperDRQ(*this, pdu); if (!info->HandlePDU()) delete info; return FALSE; } PBoolean H323GatekeeperListener::OnReceiveDisengageConfirm(const H225_DisengageConfirm & pdu) { PTRACE_BLOCK("H323GatekeeperListener::OnReceiveDisengageConfirm"); if (!H225_RAS::OnReceiveDisengageConfirm(pdu)) return FALSE; return TRUE; } PBoolean H323GatekeeperListener::OnReceiveDisengageReject(const H225_DisengageReject & drj) { PTRACE_BLOCK("H323GatekeeperListener::OnReceiveDisengageReject"); if (!H225_RAS::OnReceiveDisengageReject(drj)) return FALSE; return TRUE; } H323GatekeeperRequest::Response H323GatekeeperListener::OnBandwidth(H323GatekeeperBRQ & info) { PTRACE_BLOCK("H323GatekeeperListener::OnBandwidth"); if (!info.CheckGatekeeperIdentifier()) return H323GatekeeperRequest::Reject; if (!info.GetRegisteredEndPoint()) return H323GatekeeperRequest::Reject; if (!info.CheckCryptoTokens()) return H323GatekeeperRequest::Reject; return gatekeeper.OnBandwidth(info); } PBoolean H323GatekeeperListener::OnReceiveBandwidthRequest(const H323RasPDU & pdu, const H225_BandwidthRequest & /*brq*/) { PTRACE_BLOCK("H323GatekeeperListener::OnReceiveBandwidthRequest"); H323GatekeeperBRQ * info = new H323GatekeeperBRQ(*this, pdu); if (!info->HandlePDU()) delete info; return FALSE; } PBoolean H323GatekeeperListener::OnReceiveBandwidthConfirm(const H225_BandwidthConfirm & pdu) { PTRACE_BLOCK("H323GatekeeperListener::OnReceiveBandwidthConfirm"); if (!H225_RAS::OnReceiveBandwidthConfirm(pdu)) return FALSE; return TRUE; } PBoolean H323GatekeeperListener::OnReceiveBandwidthReject(const H225_BandwidthReject & pdu) { PTRACE_BLOCK("H323GatekeeperListener::OnReceiveBandwidthReject"); if (!H225_RAS::OnReceiveBandwidthReject(pdu)) return FALSE; return TRUE; } H323GatekeeperRequest::Response H323GatekeeperListener::OnLocation(H323GatekeeperLRQ & info) { PTRACE_BLOCK("H323GatekeeperListener::OnLocation"); if (!info.CheckGatekeeperIdentifier()) return H323GatekeeperRequest::Reject; if (info.lrq.HasOptionalField(H225_LocationRequest::e_endpointIdentifier)) { if (!info.GetRegisteredEndPoint()) return H323GatekeeperRequest::Reject; if (!info.CheckCryptoTokens()) return H323GatekeeperRequest::Reject; } transport->SetUpTransportPDU(info.lcf.m_rasAddress, TRUE); return gatekeeper.OnLocation(info); } PBoolean H323GatekeeperListener::OnReceiveLocationRequest(const H323RasPDU & pdu, const H225_LocationRequest & /*lrq*/) { PTRACE_BLOCK("H323GatekeeperListener::OnReceiveLocationRequest"); H323GatekeeperLRQ * info = new H323GatekeeperLRQ(*this, pdu); if (!info->HandlePDU()) delete info; return FALSE; } PBoolean H323GatekeeperListener::InfoRequest(H323RegisteredEndPoint & ep, H323GatekeeperCall * call) { PTRACE(3, "RAS\tInfo request to endpoint " << ep); unsigned callReference = 0; const OpalGloballyUniqueID * callIdentifier = NULL; if (call != NULL) { callReference = call->GetCallReference(); callIdentifier = &call->GetCallIdentifier(); } // As sequence number 1 is used for backward compatibility on unsolicited // IRR's we make sure we never makea solicited IRQ using that number. unsigned seqnum = GetNextSequenceNumber(); if (seqnum == 1) seqnum = GetNextSequenceNumber(); H323RasPDU pdu(ep.GetAuthenticators()); H225_InfoRequest & irq = pdu.BuildInfoRequest(seqnum, callReference, callIdentifier); H225_RAS::Request request(irq.m_requestSeqNum, pdu, ep.GetRASAddresses()); return MakeRequest(request); } #ifdef H323_H248 PBoolean H323GatekeeperListener::ServiceControlIndication(H323RegisteredEndPoint & ep, const H323ServiceControlSession & session, H323GatekeeperCall * call) { PTRACE(3, "RAS\tService control request to endpoint " << ep); OpalGloballyUniqueID id = NULL; if (call != NULL) id = call->GetCallIdentifier(); H323RasPDU pdu(ep.GetAuthenticators()); H225_ServiceControlIndication & sci = pdu.BuildServiceControlIndication(GetNextSequenceNumber(), &id); ep.AddServiceControlSession(session, sci.m_serviceControl); H225_RAS::Request request(sci.m_requestSeqNum, pdu, ep.GetRASAddresses()); return MakeRequest(request); } #endif H323GatekeeperRequest::Response H323GatekeeperListener::OnInfoResponse(H323GatekeeperIRR & info) { PTRACE_BLOCK("H323GatekeeperListener::OnInfoResponse"); H323GatekeeperRequest::Response response; if (info.GetRegisteredEndPoint() && info.CheckCryptoTokens()) response = gatekeeper.OnInfoResponse(info); else response = H323GatekeeperRequest::Reject; if (info.irr.m_unsolicited) return response; return H323GatekeeperRequest::Ignore; } PBoolean H323GatekeeperListener::OnReceiveInfoRequestResponse(const H323RasPDU & pdu, const H225_InfoRequestResponse & irr) { PTRACE_BLOCK("H323GatekeeperListener::OnReceiveInfoRequestResponse"); PBoolean unsolicited = irr.m_unsolicited; if (!unsolicited) { // Got an IRR that is not marked as unsolicited but has sequence number of // one, thus according to 7.15.2/H.225.0 it actually IS unsolicited. if (irr.m_requestSeqNum == 1) unsolicited = TRUE; else { if (!H225_RAS::OnReceiveInfoRequestResponse(pdu, irr)) return FALSE; } } else { if (SendCachedResponse(pdu)) return FALSE; } H323GatekeeperIRR * info = new H323GatekeeperIRR(*this, pdu); info->irr.m_unsolicited = unsolicited; if (!info->HandlePDU()) delete info; return !unsolicited; } PBoolean H323GatekeeperListener::OnReceiveResourcesAvailableConfirm(const H225_ResourcesAvailableConfirm & pdu) { PTRACE_BLOCK("H323GatekeeperListener::OnReceiveResourcesAvailableConfirm"); if (!H225_RAS::OnReceiveResourcesAvailableConfirm(pdu)) return FALSE; return TRUE; } PBoolean H323GatekeeperListener::OnSendFeatureSet(unsigned pduType, H225_FeatureSet & set, PBoolean advertise) const { return gatekeeper.OnSendFeatureSet(pduType, set, advertise); } void H323GatekeeperListener::OnReceiveFeatureSet(unsigned pduType, const H225_FeatureSet & set) const { gatekeeper.OnReceiveFeatureSet(pduType, set); } ///////////////////////////////////////////////////////////////////////////// H323GatekeeperServer::H323GatekeeperServer(H323EndPoint & ep) : H323TransactionServer(ep) { totalBandwidth = UINT_MAX; // Unlimited total bandwidth usedBandwidth = 0; // None used so far defaultBandwidth = 2560; // Enough for bidirectional G.711 and 64k H.261 maximumBandwidth = 200000; // 10baseX LAN bandwidth defaultTimeToLive = 3600; // One hour, zero disables defaultInfoResponseRate = 60; // One minute, zero disables overwriteOnSameSignalAddress = TRUE; canHaveDuplicateAlias = FALSE; canHaveDuplicatePrefix = FALSE; canOnlyCallRegisteredEP = FALSE; canOnlyAnswerRegisteredEP = FALSE; answerCallPreGrantedARQ = FALSE; makeCallPreGrantedARQ = FALSE; isGatekeeperRouted = FALSE; aliasCanBeHostName = TRUE; requireH235 = FALSE; disengageOnHearbeatFail = TRUE; identifierBase = time(NULL); nextIdentifier = 1; peakRegistrations = 0; totalRegistrations = 0; rejectedRegistrations = 0; peakCalls = 0; totalCalls = 0; rejectedCalls = 0; monitorThread = PThread::Create(PCREATE_NOTIFIER(MonitorMain), 0, PThread::NoAutoDeleteThread, PThread::NormalPriority, "GkSrv Monitor"); #ifdef H323_H501 peerElement = NULL; #endif } H323GatekeeperServer::~H323GatekeeperServer() { monitorExit.Signal(); PAssert(monitorThread->WaitForTermination(10000), "Gatekeeper monitor thread did not terminate!"); delete monitorThread; #ifdef H323_H501 delete peerElement; #endif } H323Transactor * H323GatekeeperServer::CreateListener(H323Transport * transport) { return new H323GatekeeperListener(ownerEndPoint, *this, gatekeeperIdentifier, transport); } H323GatekeeperRequest::Response H323GatekeeperServer::OnDiscovery(H323GatekeeperGRQ & info) { PTRACE_BLOCK("H323GatekeeperServer::OnDiscovery"); H235Authenticators authenticators = ownerEndPoint.CreateAuthenticators(); for (PINDEX auth = 0; auth < authenticators.GetSize(); auth++) { for (PINDEX cap = 0; cap < info.grq.m_authenticationCapability.GetSize(); cap++) { for (PINDEX alg = 0; alg < info.grq.m_algorithmOIDs.GetSize(); alg++) { if (authenticators[auth].IsCapability(info.grq.m_authenticationCapability[cap], info.grq.m_algorithmOIDs[alg])) { PTRACE(3, "RAS\tGRQ accepted on " << H323TransportAddress(info.gcf.m_rasAddress) << " using authenticator " << authenticators[auth]); info.gcf.IncludeOptionalField(H225_GatekeeperConfirm::e_authenticationMode); info.gcf.m_authenticationMode = info.grq.m_authenticationCapability[cap]; info.gcf.IncludeOptionalField(H225_GatekeeperConfirm::e_algorithmOID); info.gcf.m_algorithmOID = info.grq.m_algorithmOIDs[alg]; return H323GatekeeperRequest::Confirm; } } } } PTRACE(3, "RAS\tGRQ accepted on " << H323TransportAddress(info.gcf.m_rasAddress)); return H323GatekeeperRequest::Confirm; } H323GatekeeperRequest::Response H323GatekeeperServer::OnRegistration(H323GatekeeperRRQ & info) { PTRACE_BLOCK("H323GatekeeperServer::OnRegistration"); PINDEX i; // Initialise reply with default stuff info.rcf.IncludeOptionalField(H225_RegistrationConfirm::e_preGrantedARQ); info.rcf.m_preGrantedARQ.m_answerCall = answerCallPreGrantedARQ; info.rcf.m_preGrantedARQ.m_useGKCallSignalAddressToAnswer = answerCallPreGrantedARQ && isGatekeeperRouted; info.rcf.m_preGrantedARQ.m_makeCall = makeCallPreGrantedARQ; info.rcf.m_preGrantedARQ.m_useGKCallSignalAddressToMakeCall = makeCallPreGrantedARQ && isGatekeeperRouted; info.rcf.m_willRespondToIRR = TRUE; if (defaultInfoResponseRate > 0 && info.rrq.m_protocolIdentifier[5] > 2) { info.rcf.m_preGrantedARQ.IncludeOptionalField(H225_RegistrationConfirm_preGrantedARQ::e_irrFrequencyInCall); info.rcf.m_preGrantedARQ.m_irrFrequencyInCall = defaultInfoResponseRate; } if (info.rrq.m_keepAlive) { if (info.endpoint != NULL) return info.endpoint->OnRegistration(info); info.SetRejectReason(H225_RegistrationRejectReason::e_fullRegistrationRequired); PTRACE(2, "RAS\tRRQ keep alive rejected, not registered"); return H323GatekeeperRequest::Reject; } for (i = 0; i < info.rrq.m_callSignalAddress.GetSize(); i++) { PSafePtr ep2 = FindEndPointBySignalAddress(info.rrq.m_callSignalAddress[i]); if (ep2 != NULL && ep2 != info.endpoint) { if (overwriteOnSameSignalAddress) { PTRACE(2, "RAS\tOverwriting existing endpoint " << *ep2); RemoveEndPoint(ep2); } else { info.SetRejectReason(H225_RegistrationRejectReason::e_invalidCallSignalAddress); PTRACE(2, "RAS\tRRQ rejected, duplicate callSignalAddress"); return H323GatekeeperRequest::Reject; } } } if (info.rrq.HasOptionalField(H225_RegistrationRequest::e_terminalAlias) && !AllowDuplicateAlias(info.rrq.m_terminalAlias)) { H225_ArrayOf_AliasAddress duplicateAliases; for (i = 0; i < info.rrq.m_terminalAlias.GetSize(); i++) { PSafePtr ep2 = FindEndPointByAliasAddress(info.rrq.m_terminalAlias[i]); if (ep2 != NULL && ep2 != info.endpoint) { PINDEX sz = duplicateAliases.GetSize(); duplicateAliases.SetSize(sz+1); duplicateAliases[sz] = info.rrq.m_terminalAlias[i]; } } if (duplicateAliases.GetSize() > 0) { info.SetRejectReason(H225_RegistrationRejectReason::e_duplicateAlias); H225_ArrayOf_AliasAddress & reasonAliases = info.rrj.m_rejectReason; reasonAliases = duplicateAliases; PTRACE(2, "RAS\tRRQ rejected, duplicate alias"); return H323GatekeeperRequest::Reject; } } // Check if the endpoint is trying to register a prefix that can be resolved to another endpoint const H225_EndpointType & terminalType = info.rrq.m_terminalType; if (terminalType.HasOptionalField(H225_EndpointType::e_gateway) && terminalType.m_gateway.HasOptionalField(H225_GatewayInfo::e_protocol)) { const H225_ArrayOf_SupportedProtocols & protocols = terminalType.m_gateway.m_protocol; for (i = 0; i < protocols.GetSize(); i++) { // Only voice prefixes are supported if (protocols[i].GetTag() == H225_SupportedProtocols::e_voice) { H225_VoiceCaps & voiceCaps = protocols[i]; if (voiceCaps.HasOptionalField(H225_VoiceCaps::e_supportedPrefixes)) { H225_ArrayOf_SupportedPrefix & prefixes = voiceCaps.m_supportedPrefixes; for (PINDEX j = 0; j < prefixes.GetSize(); j++) { // Reject if the prefix be matched to a registered alias or prefix PSafePtr ep2 = FindEndPointByAliasAddress(prefixes[j].m_prefix); if (ep2 != NULL && ep2 != info.endpoint && !canHaveDuplicatePrefix) { info.SetRejectReason(H225_RegistrationRejectReason::e_duplicateAlias); H225_ArrayOf_AliasAddress & aliases = info.rrj.m_rejectReason; aliases.SetSize(1); aliases[0] = prefixes[j].m_prefix; PTRACE(2, "RAS\tRRQ rejected, duplicate prefix"); return H323GatekeeperRequest::Reject; } } } break; // If voice protocol is found, don't look any further } } } // Are already registered and have just sent another heavy RRQ if (info.endpoint != NULL) { H323GatekeeperRequest::Response response = info.endpoint->OnRegistration(info); switch (response) { case H323GatekeeperRequest::Confirm : AddEndPoint(info.endpoint); break; case H323GatekeeperRequest::Reject : RemoveEndPoint(info.endpoint); break; default : break; } return response; } // Need to create a new endpoint object info.endpoint = CreateRegisteredEndPoint(info); if (info.endpoint == (H323RegisteredEndPoint *)NULL) { PTRACE(1, "RAS\tRRQ rejected, CreateRegisteredEndPoint() returned NULL"); return H323GatekeeperRequest::Reject; } H323GatekeeperRequest::Response response = info.endpoint->OnRegistration(info); if (response != H323GatekeeperRequest::Confirm) { info.endpoint = (H323RegisteredEndPoint *)NULL; delete info.endpoint; return response; } // Have successfully registered, save it AddEndPoint(info.endpoint); PTRACE(2, "RAS\tRRQ accepted: \"" << *info.endpoint << '"'); return H323GatekeeperRequest::Confirm; } H323GatekeeperRequest::Response H323GatekeeperServer::OnUnregistration(H323GatekeeperURQ & info) { PTRACE_BLOCK("H323GatekeeperServer::OnUnregistration"); H323GatekeeperRequest::Response response = info.endpoint->OnUnregistration(info); if (response != H323GatekeeperRequest::Confirm) return response; if (info.urq.HasOptionalField(H225_UnregistrationRequest::e_endpointAlias)) { PINDEX i; // See if all aliases to be removed are on the same endpoint for (i = 0; i < info.urq.m_endpointAlias.GetSize(); i++) { if (FindEndPointByAliasAddress(info.urq.m_endpointAlias[i]) != info.endpoint) { info.SetRejectReason(H225_UnregRejectReason::e_permissionDenied); PTRACE(2, "RAS\tURQ rejected, alias " << info.urq.m_endpointAlias[i] << " not owned by registration"); return H323GatekeeperRequest::Reject; } } // Remove all the aliases specified in PDU for (i = 0; i < info.urq.m_endpointAlias.GetSize(); i++) info.endpoint->RemoveAlias(H323GetAliasAddressString(info.urq.m_endpointAlias[i])); // if no aliases left, then remove the endpoint if (info.endpoint->GetAliasCount() > 0) { #ifdef H323_H501 if (peerElement != NULL) peerElement->AddDescriptor(info.endpoint->GetDescriptorID(), info.endpoint->GetAliases(), info.endpoint->GetSignalAddresses()); #endif } else { PTRACE(2, "RAS\tRemoving endpoint " << *info.endpoint << " with no aliases"); RemoveEndPoint(info.endpoint); // will also remove descriptor if required } } else RemoveEndPoint(info.endpoint); return H323GatekeeperRequest::Confirm; } H323GatekeeperRequest::Response H323GatekeeperServer::OnInfoResponse(H323GatekeeperIRR & info) { PTRACE_BLOCK("H323GatekeeperServer::OnInfoResponse"); return info.endpoint->OnInfoResponse(info); } void H323GatekeeperServer::AddEndPoint(H323RegisteredEndPoint * ep) { PTRACE(3, "RAS\tAdding registered endpoint: " << *ep); PINDEX i; mutex.Wait(); if (byIdentifier.FindWithLock(ep->GetIdentifier(), PSafeReference) != ep) { byIdentifier.SetAt(ep->GetIdentifier(), ep); if (byIdentifier.GetSize() > peakRegistrations) peakRegistrations = byIdentifier.GetSize(); totalRegistrations++; } for (i = 0; i < ep->GetSignalAddressCount(); i++) byAddress.Append(new StringMap(ep->GetSignalAddress(i), ep->GetIdentifier())); for (i = 0; i < ep->GetAliasCount(); i++) { PString alias = ep->GetAlias(i); byAlias.Append(new StringMap(ep->GetAlias(i), ep->GetIdentifier())); } for (i = 0; i < ep->GetPrefixCount(); i++) byVoicePrefix.Append(new StringMap(ep->GetPrefix(i), ep->GetIdentifier())); mutex.Signal(); } PBoolean H323GatekeeperServer::RemoveEndPoint(H323RegisteredEndPoint * ep) { PTRACE(3, "RAS\tRemoving registered endpoint: " << *ep); // clear all calls in the endpoint while (ep->GetCallCount() > 0) RemoveCall(&ep->GetCall(0)); // remove any aliases from the endpoint while (ep->GetAliasCount() > 0) ep->RemoveAlias(ep->GetAlias(0)); PWaitAndSignal wait(mutex); PINDEX i; // remove prefixes belonging to this endpoint for (i = 0; i < byVoicePrefix.GetSize(); i++) { StringMap & prefixMap = (StringMap &)*byVoicePrefix.GetAt(i); if (prefixMap.identifier == ep->GetIdentifier()) byVoicePrefix.RemoveAt(i); } // remove aliases belonging to this endpoint for (i = 0; i < byAlias.GetSize(); i++) { StringMap & aliasMap = (StringMap &)*byAlias.GetAt(i); if (aliasMap.identifier == ep->GetIdentifier()) byAlias.RemoveAt(i); } // remove call signalling addresses for (i = 0; i < byAddress.GetSize(); i++) { StringMap & aliasMap = (StringMap &)*byAddress.GetAt(i); if (aliasMap.identifier == ep->GetIdentifier()) byAddress.RemoveAt(i); } // remove the descriptor #ifdef H323_H501 if (peerElement != NULL) peerElement->DeleteDescriptor(ep->GetDescriptorID()); #endif // remove the endpoint from the list of active endpoints // ep is deleted by this return byIdentifier.RemoveAt(ep->GetIdentifier()); } void H323GatekeeperServer::RemoveAlias(H323RegisteredEndPoint & ep, const PString & alias) { PTRACE(3, "RAS\tRemoving registered endpoint alias: " << alias); mutex.Wait(); PINDEX pos = byAlias.GetValuesIndex(alias); if (pos != P_MAX_INDEX) { // Allow for possible multiple aliases while (pos < byAlias.GetSize()) { StringMap & aliasMap = (StringMap &)byAlias[pos]; if (aliasMap != alias) break; if (aliasMap.identifier == ep.GetIdentifier()) byAlias.RemoveAt(pos); else pos++; } } if (ep.ContainsAlias(alias)) ep.RemoveAlias(alias); mutex.Signal(); } H323RegisteredEndPoint * H323GatekeeperServer::CreateRegisteredEndPoint(H323GatekeeperRRQ &) { return new H323RegisteredEndPoint(*this, CreateEndPointIdentifier()); } PString H323GatekeeperServer::CreateEndPointIdentifier() { PStringStream id; PWaitAndSignal wait(mutex); id << hex << identifierBase << ':' << nextIdentifier++; return id; } PSafePtr H323GatekeeperServer::FindEndPointByIdentifier( const PString & identifier, PSafetyMode mode) { return byIdentifier.FindWithLock(identifier, mode); } PSafePtr H323GatekeeperServer::FindEndPointBySignalAddresses( const H225_ArrayOf_TransportAddress & addresses, PSafetyMode mode) { PWaitAndSignal wait(mutex); for (PINDEX i = 0; i < addresses.GetSize(); i++) { PINDEX pos = byAddress.GetValuesIndex(H323TransportAddress(addresses[i])); if (pos != P_MAX_INDEX) return FindEndPointByIdentifier(((StringMap &)byAddress[pos]).identifier, mode); } return (H323RegisteredEndPoint *)NULL; } PSafePtr H323GatekeeperServer::FindEndPointBySignalAddress( const H323TransportAddress & address, PSafetyMode mode) { PWaitAndSignal wait(mutex); PINDEX pos = byAddress.GetValuesIndex(address); if (pos != P_MAX_INDEX) return FindEndPointByIdentifier(((StringMap &)byAddress[pos]).identifier, mode); return (H323RegisteredEndPoint *)NULL; } PSafePtr H323GatekeeperServer::FindEndPointByAliasAddress( const H225_AliasAddress & alias, PSafetyMode mode) { return FindEndPointByAliasString(H323GetAliasAddressString(alias), mode); } PSafePtr H323GatekeeperServer::FindEndPointByAliasString( const PString & alias, PSafetyMode mode) { { PWaitAndSignal wait(mutex); PINDEX pos = byAlias.GetValuesIndex(alias); if (pos != P_MAX_INDEX) return FindEndPointByIdentifier(((StringMap &)byAlias[pos]).identifier, mode); } return FindEndPointByPrefixString(alias, mode); } PSafePtr H323GatekeeperServer::FindEndPointByPartialAlias( const PString & alias, PSafetyMode mode) { PWaitAndSignal wait(mutex); PINDEX pos = byAlias.GetNextStringsIndex(alias); if (pos != P_MAX_INDEX) { StringMap & possible = (StringMap &)byAlias[pos]; if (possible.NumCompare(alias) == EqualTo) { PTRACE(4, "RAS\tPartial endpoint search for " "\"" << alias << "\" found \"" << possible << '"'); return FindEndPointByIdentifier(possible.identifier, mode); } } PTRACE(4, "RAS\tPartial endpoint search for \"" << alias << "\" failed"); return (H323RegisteredEndPoint *)NULL; } PSafePtr H323GatekeeperServer::FindEndPointByPrefixString( const PString & prefix, PSafetyMode mode) { PWaitAndSignal wait(mutex); if (byVoicePrefix.IsEmpty()) return (H323RegisteredEndPoint *)NULL; for (PINDEX len = prefix.GetLength(); len > 0; len--) { PINDEX pos = byVoicePrefix.GetValuesIndex(prefix.Left(len)); if (pos != P_MAX_INDEX) return FindEndPointByIdentifier(((StringMap &)byVoicePrefix[pos]).identifier, mode); } return (H323RegisteredEndPoint *)NULL; } PSafePtr H323GatekeeperServer::FindDestinationEndPoint( const OpalGloballyUniqueID & id, H323GatekeeperCall::Direction direction) { if ( !id ) { PSafePtr call = FindCall(id, direction); if (call == NULL) return NULL; for (PINDEX i = 0; i < call->GetDestinationAliases().GetSize(); i++) { const PString alias = call->GetDestinationAliases()[i]; PSafePtr ep = FindEndPointByAliasString(alias); if (ep != NULL) return ep; } } return NULL; } H323GatekeeperRequest::Response H323GatekeeperServer::OnAdmission(H323GatekeeperARQ & info) { PTRACE_BLOCK("H323GatekeeperServer::OnAdmission"); OpalGloballyUniqueID id = info.arq.m_callIdentifier.m_guid; if (id == NULL) { PTRACE(2, "RAS\tNo call identifier provided in ARQ!"); info.SetRejectReason(H225_AdmissionRejectReason::e_undefinedReason); return H323GatekeeperRequest::Reject; } H323GatekeeperRequest::Response response; PSafePtr oldCall = FindCall(id, info.arq.m_answerCall); if (oldCall != NULL) response = oldCall->OnAdmission(info); else { // If on restarted in thread, then don't create new call, should already // have had one created on the last pass through. if (!info.IsFastResponseRequired() && info.CanSendRIP()) { PTRACE(2, "RAS\tCall object disappeared after starting slow PDU handler thread!"); info.SetRejectReason(H225_AdmissionRejectReason::e_undefinedReason); return H323GatekeeperRequest::Reject; } H323GatekeeperCall * newCall = CreateCall(id, info.arq.m_answerCall ? H323GatekeeperCall::AnsweringCall : H323GatekeeperCall::OriginatingCall); PTRACE(3, "RAS\tCall created: " << *newCall); response = newCall->OnAdmission(info); if (response != H323GatekeeperRequest::Reject) { mutex.Wait(); info.endpoint->AddCall(newCall); oldCall = activeCalls.Append(newCall); if (activeCalls.GetSize() > peakCalls) peakCalls = activeCalls.GetSize(); totalCalls++; PTRACE(2, "RAS\tAdded new call (total=" << activeCalls.GetSize() << ") " << *newCall); mutex.Signal(); AddCall(oldCall); } else { delete newCall; } } #ifdef H323_H248 switch (response) { case H323GatekeeperRequest::Confirm : if (oldCall->AddCallCreditServiceControl(info.acf.m_serviceControl)) info.acf.IncludeOptionalField(H225_AdmissionConfirm::e_serviceControl); break; case H323GatekeeperRequest::Reject : if (oldCall != NULL && oldCall->AddCallCreditServiceControl(info.arj.m_serviceControl)) info.arj.IncludeOptionalField(H225_AdmissionReject::e_serviceControl); break; default : break; } #endif return response; } H323GatekeeperRequest::Response H323GatekeeperServer::OnDisengage(H323GatekeeperDRQ & info) { PTRACE_BLOCK("H323GatekeeperServer::OnDisengage"); OpalGloballyUniqueID callIdentifier = info.drq.m_callIdentifier.m_guid; PSafePtr call = FindCall(callIdentifier, info.drq.m_answeredCall); if (call == NULL) { info.SetRejectReason(H225_DisengageRejectReason::e_requestToDropOther); PTRACE(2, "RAS\tDRQ rejected, no call with ID " << callIdentifier); return H323GatekeeperRequest::Reject; } H323GatekeeperRequest::Response response = call->OnDisengage(info); if (response != H323GatekeeperRequest::Confirm) return response; RemoveCall(call); return H323GatekeeperRequest::Confirm; } H323GatekeeperRequest::Response H323GatekeeperServer::OnBandwidth(H323GatekeeperBRQ & info) { PTRACE_BLOCK("H323GatekeeperServer::OnBandwidth"); PSafePtr call = FindCall(info.brq.m_callIdentifier.m_guid, info.brq.m_answeredCall); if (call == NULL) { info.SetRejectReason(H225_BandRejectReason::e_invalidConferenceID); PTRACE(2, "RAS\tBRQ rejected, no call with ID"); return H323GatekeeperRequest::Reject; } H323GatekeeperRequest::Response response = call->OnBandwidth(info); return response; } PBoolean H323GatekeeperServer::GetAdmissionRequestAuthentication(H323GatekeeperARQ & /*info*/, H235Authenticators & /*authenticators*/) { return FALSE; } PBoolean H323GatekeeperServer::GetUsersPassword(const PString & alias, PString & password, H323RegisteredEndPoint & /*registerdEndpoint*/) const { return GetUsersPassword(alias, password); } PBoolean H323GatekeeperServer::GetUsersPassword(const PString & alias, PString & password) const { if (!passwords.Contains(alias)) return FALSE; password = passwords(alias); return TRUE; } unsigned H323GatekeeperServer::AllocateBandwidth(unsigned newBandwidth, unsigned oldBandwidth) { PWaitAndSignal wait(mutex); // If first request for bandwidth, then only give them a maximum of the // configured default bandwidth if (oldBandwidth == 0 && newBandwidth > defaultBandwidth) newBandwidth = defaultBandwidth; // If then are asking for more than we have in total, drop it down to whatevers left if (newBandwidth > oldBandwidth && (newBandwidth - oldBandwidth) > (totalBandwidth - usedBandwidth)) newBandwidth = totalBandwidth - usedBandwidth - oldBandwidth; // If greater than the absolute maximum configured for any endpoint, clamp it if (newBandwidth > maximumBandwidth) newBandwidth = maximumBandwidth; // Finally have adjusted new bandwidth, allocate it! usedBandwidth += (newBandwidth - oldBandwidth); PTRACE(3, "RAS\tBandwidth allocation: +" << newBandwidth << " -" << oldBandwidth << " used=" << usedBandwidth << " left=" << (totalBandwidth - usedBandwidth)); return newBandwidth; } void H323GatekeeperServer::RemoveCall(H323GatekeeperCall * call) { if (PAssertNULL(call) == NULL) return; call->SetBandwidthUsed(0); PAssert(call->GetEndPoint().RemoveCall(call), PLogicError); PTRACE(2, "RAS\tRemoved call (total=" << (activeCalls.GetSize()-1) << ") id=" << *call); PAssert(activeCalls.Remove(call), PLogicError); } H323GatekeeperCall * H323GatekeeperServer::CreateCall(const OpalGloballyUniqueID & id, H323GatekeeperCall::Direction dir) { return new H323GatekeeperCall(*this, id, dir); } PSafePtr H323GatekeeperServer::FindCall(const PString & desc, PSafetyMode mode) { PINDEX pos = desc.Find(AnswerCallStr); if (pos == P_MAX_INDEX) pos = desc.Find(OriginateCallStr); OpalGloballyUniqueID id = desc.Left(pos); H323GatekeeperCall::Direction dir = H323GatekeeperCall::UnknownDirection; PString dirStr = desc.Mid(pos); if (dirStr == AnswerCallStr) dir = H323GatekeeperCall::AnsweringCall; else if (dirStr == OriginateCallStr) dir = H323GatekeeperCall::OriginatingCall; return FindCall(id, dir, mode); } PSafePtr H323GatekeeperServer::FindCall(const OpalGloballyUniqueID & id, PBoolean answer, PSafetyMode mode) { return FindCall(id, answer ? H323GatekeeperCall::AnsweringCall : H323GatekeeperCall::OriginatingCall, mode); } PSafePtr H323GatekeeperServer::FindCall(const OpalGloballyUniqueID & id, H323GatekeeperCall::Direction dir, PSafetyMode mode) { return activeCalls.FindWithLock(H323GatekeeperCall(*this, id, dir), mode); } H323GatekeeperRequest::Response H323GatekeeperServer::OnLocation(H323GatekeeperLRQ & info) { PINDEX i; for (i = 0; i < info.lrq.m_destinationInfo.GetSize(); i++) { PSafePtr ep = FindEndPointByAliasAddress(info.lrq.m_destinationInfo[i], PSafeReadOnly); if (ep != NULL) { ep->GetSignalAddress(0).SetPDU(info.lcf.m_callSignalAddress); ep->GetRASAddress(0).SetPDU(info.lcf.m_rasAddress); PTRACE(2, "RAS\tLocation of " << H323GetAliasAddressString(info.lrq.m_destinationInfo[i]) << " is endpoint " << *ep); return H323GatekeeperRequest::Confirm; } } PBoolean isGKRouted = IsGatekeeperRouted(); for (i = 0; i < info.lrq.m_destinationInfo.GetSize(); i++) { H323TransportAddress address; if (TranslateAliasAddress(info.lrq.m_destinationInfo[i], info.lcf.m_destinationInfo, address, isGKRouted, NULL)) { address.SetPDU(info.lcf.m_callSignalAddress); if (info.lcf.m_destinationInfo.GetSize() > 0) info.lcf.IncludeOptionalField(H225_LocationConfirm::e_destinationInfo); PTRACE(2, "RAS\tLocation of " << H323GetAliasAddressString(info.lrq.m_destinationInfo[i]) << " is " << address); return H323GatekeeperRequest::Confirm; } } info.SetRejectReason(H225_LocationRejectReason::e_requestDenied); PTRACE(2, "RAS\tLRQ rejected, location not found"); return H323GatekeeperRequest::Reject; } PBoolean H323GatekeeperServer::TranslateAliasAddress(const H225_AliasAddress & alias, H225_ArrayOf_AliasAddress & aliases, H323TransportAddress & address, PBoolean & /*isGKRouted*/, H323GatekeeperCall * /*call*/) { if (!TranslateAliasAddressToSignalAddress(alias, address)) { #ifdef H323_H501 H225_AliasAddress transportAlias; if ((peerElement != NULL) && (peerElement->AccessRequest(alias, aliases, transportAlias))) { // if AccessRequest returns OK, but no aliases, then all of the aliases // must have been wildcards. In this case, add the original aliase back into the list if (aliases.GetSize() == 0) { PTRACE(1, "RAS\tAdding original alias to the top of the alias list"); aliases.SetSize(1); aliases[0] = alias; } address = H323GetAliasAddressString(transportAlias); return TRUE; } #endif return FALSE; } PSafePtr ep = FindEndPointBySignalAddress(address, PSafeReadOnly); if (ep != NULL) H323SetAliasAddresses(ep->GetAliases(), aliases); return TRUE; } PBoolean H323GatekeeperServer::TranslateAliasAddressToSignalAddress(const H225_AliasAddress & alias, H323TransportAddress & address) { PWaitAndSignal wait(mutex); PString aliasString = H323GetAliasAddressString(alias); if (isGatekeeperRouted) { const H323ListenerList & listeners = ownerEndPoint.GetListeners(); address = listeners[0].GetTransportAddress(); PTRACE(2, "RAS\tTranslating alias " << aliasString << " to " << address << ", gatekeeper routed"); return TRUE; } PSafePtr ep = FindEndPointByAliasAddress(alias, PSafeReadOnly); if (ep != NULL) { address = ep->GetSignalAddress(0); PTRACE(2, "RAS\tTranslating alias " << aliasString << " to " << address << ", registered endpoint"); return TRUE; } if (!aliasCanBeHostName) return FALSE; // If is E.164 address then assume isn't a host name or IP address if (!H323GetAliasAddressE164(alias).IsEmpty()) return FALSE; H323TransportAddress aliasAsTransport = aliasString; PIPSocket::Address ip; WORD port = H323EndPoint::DefaultTcpPort; if (!aliasAsTransport.GetIpAndPort(ip, port)) { PTRACE(4, "RAS\tCould not translate " << aliasString << " as host name."); return FALSE; } address = H323TransportAddress(ip, port); PTRACE(2, "RAS\tTranslating alias " << aliasString << " to " << address << ", host name"); return TRUE; } PBoolean H323GatekeeperServer::CheckSignalAddressPolicy(const H323RegisteredEndPoint &, const H225_AdmissionRequest &, const H323TransportAddress &) { return TRUE; } PBoolean H323GatekeeperServer::CheckAliasAddressPolicy(const H323RegisteredEndPoint &, const H225_AdmissionRequest & arq, const H225_AliasAddress & alias) { PWaitAndSignal wait(mutex); if (arq.m_answerCall ? canOnlyAnswerRegisteredEP : canOnlyCallRegisteredEP) { PSafePtr ep = FindEndPointByAliasAddress(alias); if (ep == NULL) return FALSE; } return TRUE; } PBoolean H323GatekeeperServer::CheckAliasStringPolicy(const H323RegisteredEndPoint &, const H225_AdmissionRequest & arq, const PString & alias) { PWaitAndSignal wait(mutex); if (arq.m_answerCall ? canOnlyAnswerRegisteredEP : canOnlyCallRegisteredEP) { PSafePtr ep = FindEndPointByAliasString(alias); if (ep == NULL) return FALSE; } return TRUE; } void H323GatekeeperServer::SetGatekeeperIdentifier(const PString & id, PBoolean adjustListeners) { mutex.Wait(); gatekeeperIdentifier = id; if (adjustListeners) { for (PINDEX i = 0; i < listeners.GetSize(); i++) listeners[i].SetIdentifier(id); } mutex.Signal(); } #ifdef H323_H501 void H323GatekeeperServer::SetPeerElement(H323PeerElement * newPeerElement) { delete peerElement; peerElement = newPeerElement; } void H323GatekeeperServer::CreatePeerElement(const H323TransportAddress & h501Interface) { if (peerElement == NULL) peerElement = new H323PeerElement(ownerEndPoint, h501Interface); else peerElement->SetTransport(h501Interface); } PBoolean H323GatekeeperServer::OpenPeerElement(const H323TransportAddress & remotePeer, PBoolean append, PBoolean keepTrying) { if (peerElement == NULL) peerElement = new H323PeerElement(ownerEndPoint); if (append) return peerElement->AddServiceRelationship(remotePeer, keepTrying); else return peerElement->SetOnlyServiceRelationship(remotePeer, keepTrying); } #endif // H323_H501 void H323GatekeeperServer::MonitorMain(PThread &, INT) { while (!monitorExit.Wait(1000)) { PTRACE(6, "RAS\tAging registered endpoints"); for (PSafePtr ep = GetFirstEndPoint(PSafeReference); ep != NULL; ep++) { if (!ep->OnTimeToLive()) { PTRACE(2, "RAS\tRemoving expired endpoint " << *ep); RemoveEndPoint(ep); } if (ep->GetAliasCount() == 0) { PTRACE(2, "RAS\tRemoving endpoint " << *ep << " with no aliases"); RemoveEndPoint(ep); } } byIdentifier.DeleteObjectsToBeRemoved(); for (PSafePtr call = GetFirstCall(PSafeReference); call != NULL; call++) { if (!call->OnHeartbeat()) { if (disengageOnHearbeatFail) call->Disengage(); } } activeCalls.DeleteObjectsToBeRemoved(); } } PBoolean H323GatekeeperServer::OnSendFeatureSet(unsigned, H225_FeatureSet &, PBoolean) const { return FALSE; } void H323GatekeeperServer::OnReceiveFeatureSet(unsigned, const H225_FeatureSet &) const { } ///////////////////////////////////////////////////////////////////////////// h323plus/src/h323h224.cxx0000644000175000017500000003707011647744275013531 0ustar markmark/* * h323h224.cxx * * H.323 H.224 logical channel establishment implementation for the * OpenH323 Project. * * Copyright (c) 2006 Network for Educational Technology, ETH Zurich. * Written by Hannes Friederich. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * Contributor(s): ______________________________________. * * $Id: h323h224.cxx,v 1.11 2011/10/20 07:07:41 shorne Exp $ * */ #include #include #include #ifdef H323_H224 #ifdef __GNUC__ #pragma implementation "h323h224.h" #endif #ifdef _MSC_VER #pragma warning(disable : 4244) #endif #include H323_H224Capability::H323_H224Capability() : H323DataCapability(640) { // SetPayloadType((RTP_DataFrame::PayloadTypes)100); } H323_H224Capability::~H323_H224Capability() { } PObject::Comparison H323_H224Capability::Compare(const PObject & obj) const { Comparison result = H323DataCapability::Compare(obj); if(result != EqualTo) { return result; } PAssert(PIsDescendant(&obj, H323_H224Capability), PInvalidCast); return EqualTo; } PObject * H323_H224Capability::Clone() const { return new H323_H224Capability(*this); } unsigned H323_H224Capability::GetSubType() const { return H245_DataApplicationCapability_application::e_h224; } PString H323_H224Capability::GetFormatName() const { return "H.224"; } H323Channel * H323_H224Capability::CreateChannel(H323Connection & connection, H323Channel::Directions direction, unsigned int sessionID, const H245_H2250LogicalChannelParameters * /*params*/) const { RTP_Session *session; H245_TransportAddress addr; connection.GetControlChannel().SetUpTransportPDU(addr, H323Transport::UseLocalTSAP); session = connection.UseSession(sessionID, addr, direction); if(session == NULL) { return NULL; } return new H323_H224Channel(connection, *this, direction, (RTP_UDP &)*session, sessionID); } PBoolean H323_H224Capability::OnSendingPDU(H245_DataApplicationCapability & pdu) const { pdu.m_maxBitRate = maxBitRate; pdu.m_application.SetTag(H245_DataApplicationCapability_application::e_h224); H245_DataProtocolCapability & dataProtocolCapability = (H245_DataProtocolCapability &)pdu.m_application; dataProtocolCapability.SetTag(H245_DataProtocolCapability::e_hdlcFrameTunnelling); return TRUE; } PBoolean H323_H224Capability::OnSendingPDU(H245_DataMode & pdu) const { pdu.m_bitRate = maxBitRate; pdu.m_application.SetTag(H245_DataMode_application::e_h224); return TRUE; } PBoolean H323_H224Capability::OnReceivedPDU(const H245_DataApplicationCapability & pdu) { if (pdu.m_application.GetTag() != H245_DataApplicationCapability_application::e_h224) return FALSE; const H245_DataProtocolCapability & dataProtocolCapability = pdu.m_application; if (dataProtocolCapability.GetTag() != H245_DataProtocolCapability::e_hdlcFrameTunnelling) return FALSE; maxBitRate = pdu.m_maxBitRate; return TRUE; } H323_H224Channel::H323_H224Channel(H323Connection & connection, const H323Capability & capability, H323Channel::Directions theDirection, RTP_UDP & theSession, unsigned theSessionID) : H323Channel(connection, capability), rtpSession(theSession), rtpCallbacks(*(H323_RTP_Session *)theSession.GetUserData()) { direction = theDirection; sessionID = theSessionID; h224Handler = NULL; rtpPayloadType = (RTP_DataFrame::PayloadTypes)100; } H323_H224Channel::~H323_H224Channel() { // h224Handler is deleted by H323Connection } H323Channel::Directions H323_H224Channel::GetDirection() const { return direction; } PBoolean H323_H224Channel::SetInitialBandwidth() { return TRUE; } PBoolean H323_H224Channel::Open() { PBoolean result = H323Channel::Open(); if(result == FALSE) { return FALSE; } return TRUE; } PBoolean H323_H224Channel::Start() { if(!Open()) { return FALSE; } if(h224Handler == NULL) { h224Handler = connection.CreateH224ProtocolHandler(direction,sessionID); } if (!h224Handler) { PTRACE(4,"H224\tError starting " << (direction == H323Channel::IsTransmitter ? "Transmitter" : "Receiver")); return false; } if(direction == H323Channel::IsReceiver) { h224Handler->StartReceive(); } else { h224Handler->StartTransmit(); } return TRUE; } void H323_H224Channel::Close() { if(terminating) { return; } if(h224Handler != NULL) { if(direction == H323Channel::IsReceiver) { h224Handler->StopReceive(); } else { h224Handler->StopTransmit(); } delete h224Handler; } // H323Channel::Close(); } void H323_H224Channel::Receive() { } void H323_H224Channel::Transmit() { } unsigned H323_H224Channel::GetSessionID() const { return sessionID; } PBoolean H323_H224Channel::OnSendingPDU(H245_OpenLogicalChannel & open) const { open.m_forwardLogicalChannelNumber = (unsigned)number; if(open.HasOptionalField(H245_OpenLogicalChannel::e_reverseLogicalChannelParameters)) { open.m_reverseLogicalChannelParameters.IncludeOptionalField( H245_OpenLogicalChannel_reverseLogicalChannelParameters::e_multiplexParameters); open.m_reverseLogicalChannelParameters.m_multiplexParameters.SetTag( H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::e_h2250LogicalChannelParameters); if (connection.OnSendingOLCGenericInformation(GetSessionID(),open.m_genericInformation,false)) open.IncludeOptionalField(H245_OpenLogicalChannel::e_genericInformation); return OnSendingPDU(open.m_reverseLogicalChannelParameters.m_multiplexParameters); } else { open.m_forwardLogicalChannelParameters.m_multiplexParameters.SetTag( H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::e_h2250LogicalChannelParameters); if (connection.OnSendingOLCGenericInformation(GetSessionID(),open.m_genericInformation,false)) open.IncludeOptionalField(H245_OpenLogicalChannel::e_genericInformation); return OnSendingPDU(open.m_forwardLogicalChannelParameters.m_multiplexParameters); } } void H323_H224Channel::OnSendOpenAck(const H245_OpenLogicalChannel & openPDU, H245_OpenLogicalChannelAck & ack) const { // set forwardMultiplexAckParameters option ack.IncludeOptionalField(H245_OpenLogicalChannelAck::e_forwardMultiplexAckParameters); // select H225 choice ack.m_forwardMultiplexAckParameters.SetTag( H245_OpenLogicalChannelAck_forwardMultiplexAckParameters::e_h2250LogicalChannelAckParameters); // get H225 params H245_H2250LogicalChannelAckParameters & param = ack.m_forwardMultiplexAckParameters; // set session ID param.IncludeOptionalField(H245_H2250LogicalChannelAckParameters::e_sessionID); const H245_H2250LogicalChannelParameters & openparam = openPDU.m_forwardLogicalChannelParameters.m_multiplexParameters; // Set Generic information if (connection.OnSendingOLCGenericInformation(GetSessionID(), ack.m_genericInformation,true)) ack.IncludeOptionalField(H245_OpenLogicalChannel::e_genericInformation); unsigned sessionID = openparam.m_sessionID; param.m_sessionID = sessionID; OnSendOpenAck(param); } PBoolean H323_H224Channel::OnReceivedPDU(const H245_OpenLogicalChannel & open, unsigned & errorCode) { if(direction == H323Channel::IsReceiver) { number = H323ChannelNumber(open.m_forwardLogicalChannelNumber, TRUE); } PBoolean reverse = open.HasOptionalField(H245_OpenLogicalChannel::e_reverseLogicalChannelParameters); const H245_DataType & dataType = reverse ? open.m_reverseLogicalChannelParameters.m_dataType : open.m_forwardLogicalChannelParameters.m_dataType; if (!capability->OnReceivedPDU(dataType, direction)) { errorCode = H245_OpenLogicalChannelReject_cause::e_dataTypeNotSupported; return FALSE; } if (open.HasOptionalField(H245_OpenLogicalChannel::e_genericInformation) && !connection.OnReceiveOLCGenericInformation(GetSessionID(),open.m_genericInformation, false)) { errorCode = H245_OpenLogicalChannelReject_cause::e_unspecified; PTRACE(2, "LogChan\tOnReceivedPDU Invalid Generic Parameters"); return FALSE; } if (reverse) { if (open.m_reverseLogicalChannelParameters.m_multiplexParameters.GetTag() == H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters::e_h2250LogicalChannelParameters) { return OnReceivedPDU(open.m_reverseLogicalChannelParameters.m_multiplexParameters, errorCode); } } else { if (open.m_forwardLogicalChannelParameters.m_multiplexParameters.GetTag() == H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters::e_h2250LogicalChannelParameters) { return OnReceivedPDU(open.m_forwardLogicalChannelParameters.m_multiplexParameters, errorCode); } } errorCode = H245_OpenLogicalChannelReject_cause::e_unsuitableReverseParameters; return FALSE; } PBoolean H323_H224Channel::OnReceivedAckPDU(const H245_OpenLogicalChannelAck & ack) { if (!ack.HasOptionalField(H245_OpenLogicalChannelAck::e_forwardMultiplexAckParameters)) { return FALSE; } if (ack.m_forwardMultiplexAckParameters.GetTag() != H245_OpenLogicalChannelAck_forwardMultiplexAckParameters::e_h2250LogicalChannelAckParameters) { return FALSE; } if (ack.HasOptionalField(H245_OpenLogicalChannelAck::e_genericInformation) && !connection.OnReceiveOLCGenericInformation(GetSessionID(), ack.m_genericInformation, true)) { return FALSE; } return OnReceivedAckPDU(ack.m_forwardMultiplexAckParameters); } PBoolean H323_H224Channel::OnSendingPDU(H245_H2250LogicalChannelParameters & param) const { param.m_sessionID = sessionID; param.IncludeOptionalField(H245_H2250LogicalChannelParameters::e_mediaGuaranteedDelivery); param.m_mediaGuaranteedDelivery = FALSE; // unicast must have mediaControlChannel H323TransportAddress mediaControlAddress(rtpSession.GetLocalAddress(), rtpSession.GetLocalControlPort()); param.IncludeOptionalField(H245_H2250LogicalChannelParameters::e_mediaControlChannel); mediaControlAddress.SetPDU(param.m_mediaControlChannel); if (direction == H323Channel::IsReceiver) { // set mediaChannel H323TransportAddress mediaAddress(rtpSession.GetLocalAddress(), rtpSession.GetLocalDataPort()); param.IncludeOptionalField(H245_H2250LogicalChannelAckParameters::e_mediaChannel); mediaAddress.SetPDU(param.m_mediaChannel); } else{ } // Set dynamic payload type, if is one int rtpPayloadType = GetDynamicRTPPayloadType(); if (rtpPayloadType >= RTP_DataFrame::DynamicBase && rtpPayloadType < RTP_DataFrame::IllegalPayloadType) { param.IncludeOptionalField(H245_H2250LogicalChannelParameters::e_dynamicRTPPayloadType); param.m_dynamicRTPPayloadType = rtpPayloadType; } return TRUE; } void H323_H224Channel::OnSendOpenAck(H245_H2250LogicalChannelAckParameters & param) const { // set mediaControlChannel H323TransportAddress mediaControlAddress(rtpSession.GetLocalAddress(), rtpSession.GetLocalControlPort()); param.IncludeOptionalField(H245_H2250LogicalChannelAckParameters::e_mediaControlChannel); mediaControlAddress.SetPDU(param.m_mediaControlChannel); // set mediaChannel H323TransportAddress mediaAddress(rtpSession.GetLocalAddress(), rtpSession.GetLocalDataPort()); param.IncludeOptionalField(H245_H2250LogicalChannelAckParameters::e_mediaChannel); mediaAddress.SetPDU(param.m_mediaChannel); // Set dynamic payload type, if is one int rtpPayloadType = GetDynamicRTPPayloadType(); if (rtpPayloadType >= RTP_DataFrame::DynamicBase && rtpPayloadType < RTP_DataFrame::IllegalPayloadType) { param.IncludeOptionalField(H245_H2250LogicalChannelAckParameters::e_dynamicRTPPayloadType); param.m_dynamicRTPPayloadType = rtpPayloadType; } } PBoolean H323_H224Channel::OnReceivedPDU(const H245_H2250LogicalChannelParameters & param, unsigned & errorCode) { if (param.m_sessionID != sessionID) { errorCode = H245_OpenLogicalChannelReject_cause::e_invalidSessionID; return FALSE; } PBoolean ok = FALSE; if (param.HasOptionalField(H245_H2250LogicalChannelParameters::e_mediaControlChannel)) { if (!ExtractTransport(param.m_mediaControlChannel, FALSE, errorCode)) { return FALSE; } ok = TRUE; } if (param.HasOptionalField(H245_H2250LogicalChannelParameters::e_mediaChannel)) { if (ok && direction == H323Channel::IsReceiver) { } else if (!ExtractTransport(param.m_mediaChannel, TRUE, errorCode)) { return FALSE; } ok = TRUE; } if (param.HasOptionalField(H245_H2250LogicalChannelParameters::e_dynamicRTPPayloadType)) { SetDynamicRTPPayloadType(param.m_dynamicRTPPayloadType); } if (ok) { return TRUE; } errorCode = H245_OpenLogicalChannelReject_cause::e_unspecified; return FALSE; } PBoolean H323_H224Channel::OnReceivedAckPDU(const H245_H2250LogicalChannelAckParameters & param) { if (!param.HasOptionalField(H245_H2250LogicalChannelAckParameters::e_sessionID)) { } if (!param.HasOptionalField(H245_H2250LogicalChannelAckParameters::e_mediaControlChannel)) { return FALSE; } unsigned errorCode; if (!ExtractTransport(param.m_mediaControlChannel, FALSE, errorCode)) { return FALSE; } if (!param.HasOptionalField(H245_H2250LogicalChannelAckParameters::e_mediaChannel)) { return FALSE; } if (!ExtractTransport(param.m_mediaChannel, TRUE, errorCode)) { return FALSE; } if (param.HasOptionalField(H245_H2250LogicalChannelAckParameters::e_dynamicRTPPayloadType)) { SetDynamicRTPPayloadType(param.m_dynamicRTPPayloadType); } return TRUE; } PBoolean H323_H224Channel::SetDynamicRTPPayloadType(int newType) { if(newType == -1) { return TRUE; } if(newType < RTP_DataFrame::DynamicBase || newType >= RTP_DataFrame::IllegalPayloadType) { return FALSE; } if(rtpPayloadType < RTP_DataFrame::DynamicBase) { return FALSE; } rtpPayloadType = (RTP_DataFrame::PayloadTypes)newType; return TRUE; } /* OpalMediaStream * H323_H224Channel::GetMediaStream() const { // implemented since declared as an abstract method in H323Channel return NULL; } */ PBoolean H323_H224Channel::ExtractTransport(const H245_TransportAddress & pdu, PBoolean isDataPort, unsigned & errorCode) { if (pdu.GetTag() != H245_TransportAddress::e_unicastAddress) { errorCode = H245_OpenLogicalChannelReject_cause::e_multicastChannelNotAllowed; return FALSE; } H323TransportAddress transAddr = pdu; PIPSocket::Address ip; WORD port; if (transAddr.GetIpAndPort(ip, port)) { return rtpSession.SetRemoteSocketInfo(ip, port, isDataPort); } return FALSE; } #endif h323plus/src/gccpdu.cxx0000644000175000017500000124376011015524255013704 0ustar markmark// // gccpdu.cxx // // Code automatically generated by asnparse. // #ifdef P_USE_PRAGMA #pragma implementation "gccpdu.h" #endif #include #include "gccpdu.h" #define new PNEW #if ! H323_DISABLE_GCC // // ChannelID // GCC_ChannelID::GCC_ChannelID(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } GCC_ChannelID & GCC_ChannelID::operator=(int v) { SetValue(v); return *this; } GCC_ChannelID & GCC_ChannelID::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_ChannelID::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ChannelID::Class()), PInvalidCast); #endif return new GCC_ChannelID(*this); } // // StaticChannelID // GCC_StaticChannelID::GCC_StaticChannelID(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 1000); } GCC_StaticChannelID & GCC_StaticChannelID::operator=(int v) { SetValue(v); return *this; } GCC_StaticChannelID & GCC_StaticChannelID::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_StaticChannelID::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_StaticChannelID::Class()), PInvalidCast); #endif return new GCC_StaticChannelID(*this); } // // DynamicChannelID // GCC_DynamicChannelID::GCC_DynamicChannelID(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1001, 65535); } GCC_DynamicChannelID & GCC_DynamicChannelID::operator=(int v) { SetValue(v); return *this; } GCC_DynamicChannelID & GCC_DynamicChannelID::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_DynamicChannelID::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_DynamicChannelID::Class()), PInvalidCast); #endif return new GCC_DynamicChannelID(*this); } // // UserID // GCC_UserID::GCC_UserID(unsigned tag, PASN_Object::TagClass tagClass) : GCC_DynamicChannelID(tag, tagClass) { } GCC_UserID & GCC_UserID::operator=(int v) { SetValue(v); return *this; } GCC_UserID & GCC_UserID::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_UserID::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_UserID::Class()), PInvalidCast); #endif return new GCC_UserID(*this); } // // TokenID // GCC_TokenID::GCC_TokenID(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 65535); } GCC_TokenID & GCC_TokenID::operator=(int v) { SetValue(v); return *this; } GCC_TokenID & GCC_TokenID::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_TokenID::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_TokenID::Class()), PInvalidCast); #endif return new GCC_TokenID(*this); } // // StaticTokenID // GCC_StaticTokenID::GCC_StaticTokenID(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 16383); } GCC_StaticTokenID & GCC_StaticTokenID::operator=(int v) { SetValue(v); return *this; } GCC_StaticTokenID & GCC_StaticTokenID::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_StaticTokenID::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_StaticTokenID::Class()), PInvalidCast); #endif return new GCC_StaticTokenID(*this); } // // DynamicTokenID // GCC_DynamicTokenID::GCC_DynamicTokenID(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 16384, 65535); } GCC_DynamicTokenID & GCC_DynamicTokenID::operator=(int v) { SetValue(v); return *this; } GCC_DynamicTokenID & GCC_DynamicTokenID::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_DynamicTokenID::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_DynamicTokenID::Class()), PInvalidCast); #endif return new GCC_DynamicTokenID(*this); } // // Time // GCC_Time::GCC_Time(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, -2147483647, 2147483647); } GCC_Time & GCC_Time::operator=(int v) { SetValue(v); return *this; } GCC_Time & GCC_Time::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_Time::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_Time::Class()), PInvalidCast); #endif return new GCC_Time(*this); } // // Handle // GCC_Handle::GCC_Handle(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); } GCC_Handle & GCC_Handle::operator=(int v) { SetValue(v); return *this; } GCC_Handle & GCC_Handle::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_Handle::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_Handle::Class()), PInvalidCast); #endif return new GCC_Handle(*this); } // // H221NonStandardIdentifier // GCC_H221NonStandardIdentifier::GCC_H221NonStandardIdentifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_OctetString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 4, 255); } GCC_H221NonStandardIdentifier::GCC_H221NonStandardIdentifier(const char * v) { SetValue(v); } GCC_H221NonStandardIdentifier::GCC_H221NonStandardIdentifier(const PString & v) { SetValue(v); } GCC_H221NonStandardIdentifier::GCC_H221NonStandardIdentifier(const PBYTEArray & v) { SetValue(v); } GCC_H221NonStandardIdentifier & GCC_H221NonStandardIdentifier::operator=(const char * v) { SetValue(v); return *this; } GCC_H221NonStandardIdentifier & GCC_H221NonStandardIdentifier::operator=(const PString & v) { SetValue(v); return *this; } GCC_H221NonStandardIdentifier & GCC_H221NonStandardIdentifier::operator=(const PBYTEArray & v) { SetValue(v); return *this; } PObject * GCC_H221NonStandardIdentifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_H221NonStandardIdentifier::Class()), PInvalidCast); #endif return new GCC_H221NonStandardIdentifier(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_Key[]={ {"object",0} ,{"h221NonStandard",1} }; #endif // // Key // GCC_Key::GCC_Key(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_Key,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_Key::operator GCC_H221NonStandardIdentifier &() const #else GCC_Key::operator GCC_H221NonStandardIdentifier &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_H221NonStandardIdentifier), PInvalidCast); #endif return *(GCC_H221NonStandardIdentifier *)choice; } GCC_Key::operator const GCC_H221NonStandardIdentifier &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_H221NonStandardIdentifier), PInvalidCast); #endif return *(GCC_H221NonStandardIdentifier *)choice; } PBoolean GCC_Key::CreateObject() { switch (tag) { case e_object : choice = new PASN_ObjectId(); return TRUE; case e_h221NonStandard : choice = new GCC_H221NonStandardIdentifier(); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_Key::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_Key::Class()), PInvalidCast); #endif return new GCC_Key(*this); } // // NonStandardParameter // GCC_NonStandardParameter::GCC_NonStandardParameter(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void GCC_NonStandardParameter::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+6) << "key = " << setprecision(indent) << m_key << '\n'; strm << setw(indent+7) << "data = " << setprecision(indent) << m_data << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_NonStandardParameter::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_NonStandardParameter), PInvalidCast); #endif const GCC_NonStandardParameter & other = (const GCC_NonStandardParameter &)obj; Comparison result; if ((result = m_key.Compare(other.m_key)) != EqualTo) return result; if ((result = m_data.Compare(other.m_data)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_NonStandardParameter::GetDataLength() const { PINDEX length = 0; length += m_key.GetObjectLength(); length += m_data.GetObjectLength(); return length; } PBoolean GCC_NonStandardParameter::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_key.Decode(strm)) return FALSE; if (!m_data.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_NonStandardParameter::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_key.Encode(strm); m_data.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_NonStandardParameter::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_NonStandardParameter::Class()), PInvalidCast); #endif return new GCC_NonStandardParameter(*this); } // // TextString // GCC_TextString::GCC_TextString(unsigned tag, PASN_Object::TagClass tagClass) : PASN_BMPString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 255); } GCC_TextString & GCC_TextString::operator=(const char * v) { SetValue(v); return *this; } GCC_TextString & GCC_TextString::operator=(const PString & v) { SetValue(v); return *this; } GCC_TextString & GCC_TextString::operator=(const PWCharArray & v) { SetValue(v); return *this; } GCC_TextString & GCC_TextString::operator=(const PASN_BMPString & v) { SetValue(v); return *this; } PObject * GCC_TextString::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_TextString::Class()), PInvalidCast); #endif return new GCC_TextString(*this); } // // SimpleTextString // GCC_SimpleTextString::GCC_SimpleTextString(unsigned tag, PASN_Object::TagClass tagClass) : PASN_BMPString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 255); SetCharacterSet(PASN_Object::FixedConstraint, 0, 255); } GCC_SimpleTextString & GCC_SimpleTextString::operator=(const char * v) { SetValue(v); return *this; } GCC_SimpleTextString & GCC_SimpleTextString::operator=(const PString & v) { SetValue(v); return *this; } GCC_SimpleTextString & GCC_SimpleTextString::operator=(const PWCharArray & v) { SetValue(v); return *this; } GCC_SimpleTextString & GCC_SimpleTextString::operator=(const PASN_BMPString & v) { SetValue(v); return *this; } PObject * GCC_SimpleTextString::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_SimpleTextString::Class()), PInvalidCast); #endif return new GCC_SimpleTextString(*this); } // // SimpleNumericString // GCC_SimpleNumericString::GCC_SimpleNumericString(unsigned tag, PASN_Object::TagClass tagClass) : PASN_NumericString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 255); SetCharacterSet(PASN_Object::FixedConstraint, "0123456789"); } GCC_SimpleNumericString & GCC_SimpleNumericString::operator=(const char * v) { SetValue(v); return *this; } GCC_SimpleNumericString & GCC_SimpleNumericString::operator=(const PString & v) { SetValue(v); return *this; } PObject * GCC_SimpleNumericString::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_SimpleNumericString::Class()), PInvalidCast); #endif return new GCC_SimpleNumericString(*this); } // // DialingString // GCC_DialingString::GCC_DialingString(unsigned tag, PASN_Object::TagClass tagClass) : PASN_NumericString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 16); SetCharacterSet(PASN_Object::FixedConstraint, "0123456789"); } GCC_DialingString & GCC_DialingString::operator=(const char * v) { SetValue(v); return *this; } GCC_DialingString & GCC_DialingString::operator=(const PString & v) { SetValue(v); return *this; } PObject * GCC_DialingString::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_DialingString::Class()), PInvalidCast); #endif return new GCC_DialingString(*this); } // // SubAddressString // GCC_SubAddressString::GCC_SubAddressString(unsigned tag, PASN_Object::TagClass tagClass) : PASN_NumericString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 40); SetCharacterSet(PASN_Object::FixedConstraint, "0123456789"); } GCC_SubAddressString & GCC_SubAddressString::operator=(const char * v) { SetValue(v); return *this; } GCC_SubAddressString & GCC_SubAddressString::operator=(const PString & v) { SetValue(v); return *this; } PObject * GCC_SubAddressString::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_SubAddressString::Class()), PInvalidCast); #endif return new GCC_SubAddressString(*this); } // // ExtraDialingString // GCC_ExtraDialingString::GCC_ExtraDialingString(unsigned tag, PASN_Object::TagClass tagClass) : PASN_BMPString(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 255); SetCharacterSet(PASN_Object::FixedConstraint, "0123456789#*,"); } GCC_ExtraDialingString & GCC_ExtraDialingString::operator=(const char * v) { SetValue(v); return *this; } GCC_ExtraDialingString & GCC_ExtraDialingString::operator=(const PString & v) { SetValue(v); return *this; } GCC_ExtraDialingString & GCC_ExtraDialingString::operator=(const PWCharArray & v) { SetValue(v); return *this; } GCC_ExtraDialingString & GCC_ExtraDialingString::operator=(const PASN_BMPString & v) { SetValue(v); return *this; } PObject * GCC_ExtraDialingString::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ExtraDialingString::Class()), PInvalidCast); #endif return new GCC_ExtraDialingString(*this); } // // UserData // GCC_UserData::GCC_UserData(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * GCC_UserData::CreateObject() const { return new GCC_UserData_subtype; } GCC_UserData_subtype & GCC_UserData::operator[](PINDEX i) const { return (GCC_UserData_subtype &)array[i]; } PObject * GCC_UserData::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_UserData::Class()), PInvalidCast); #endif return new GCC_UserData(*this); } // // Password // GCC_Password::GCC_Password(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_Password::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "numeric = " << setprecision(indent) << m_numeric << '\n'; if (HasOptionalField(e_text)) strm << setw(indent+7) << "text = " << setprecision(indent) << m_text << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_Password::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_Password), PInvalidCast); #endif const GCC_Password & other = (const GCC_Password &)obj; Comparison result; if ((result = m_numeric.Compare(other.m_numeric)) != EqualTo) return result; if ((result = m_text.Compare(other.m_text)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_Password::GetDataLength() const { PINDEX length = 0; length += m_numeric.GetObjectLength(); if (HasOptionalField(e_text)) length += m_text.GetObjectLength(); return length; } PBoolean GCC_Password::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_numeric.Decode(strm)) return FALSE; if (HasOptionalField(e_text) && !m_text.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_Password::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_numeric.Encode(strm); if (HasOptionalField(e_text)) m_text.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_Password::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_Password::Class()), PInvalidCast); #endif return new GCC_Password(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_PasswordSelector[]={ {"numeric",0} ,{"text",1} }; #endif // // PasswordSelector // GCC_PasswordSelector::GCC_PasswordSelector(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_PasswordSelector,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_PasswordSelector::operator GCC_SimpleNumericString &() const #else GCC_PasswordSelector::operator GCC_SimpleNumericString &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_SimpleNumericString), PInvalidCast); #endif return *(GCC_SimpleNumericString *)choice; } GCC_PasswordSelector::operator const GCC_SimpleNumericString &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_SimpleNumericString), PInvalidCast); #endif return *(GCC_SimpleNumericString *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_PasswordSelector::operator GCC_SimpleTextString &() const #else GCC_PasswordSelector::operator GCC_SimpleTextString &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_SimpleTextString), PInvalidCast); #endif return *(GCC_SimpleTextString *)choice; } GCC_PasswordSelector::operator const GCC_SimpleTextString &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_SimpleTextString), PInvalidCast); #endif return *(GCC_SimpleTextString *)choice; } PBoolean GCC_PasswordSelector::CreateObject() { switch (tag) { case e_numeric : choice = new GCC_SimpleNumericString(); return TRUE; case e_text : choice = new GCC_SimpleTextString(); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_PasswordSelector::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_PasswordSelector::Class()), PInvalidCast); #endif return new GCC_PasswordSelector(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_ChallengeResponseItem[]={ {"passwordString",0} ,{"responseData",1} }; #endif // // ChallengeResponseItem // GCC_ChallengeResponseItem::GCC_ChallengeResponseItem(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_ChallengeResponseItem,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ChallengeResponseItem::operator GCC_PasswordSelector &() const #else GCC_ChallengeResponseItem::operator GCC_PasswordSelector &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_PasswordSelector), PInvalidCast); #endif return *(GCC_PasswordSelector *)choice; } GCC_ChallengeResponseItem::operator const GCC_PasswordSelector &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_PasswordSelector), PInvalidCast); #endif return *(GCC_PasswordSelector *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ChallengeResponseItem::operator GCC_UserData &() const #else GCC_ChallengeResponseItem::operator GCC_UserData &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_UserData), PInvalidCast); #endif return *(GCC_UserData *)choice; } GCC_ChallengeResponseItem::operator const GCC_UserData &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_UserData), PInvalidCast); #endif return *(GCC_UserData *)choice; } PBoolean GCC_ChallengeResponseItem::CreateObject() { switch (tag) { case e_passwordString : choice = new GCC_PasswordSelector(); return TRUE; case e_responseData : choice = new GCC_UserData(); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_ChallengeResponseItem::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ChallengeResponseItem::Class()), PInvalidCast); #endif return new GCC_ChallengeResponseItem(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_ChallengeResponseAlgorithm[]={ {"passwordInTheClear",0} ,{"nonStandardAlgorithm",1} }; #endif // // ChallengeResponseAlgorithm // GCC_ChallengeResponseAlgorithm::GCC_ChallengeResponseAlgorithm(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_ChallengeResponseAlgorithm,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ChallengeResponseAlgorithm::operator GCC_NonStandardParameter &() const #else GCC_ChallengeResponseAlgorithm::operator GCC_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_NonStandardParameter), PInvalidCast); #endif return *(GCC_NonStandardParameter *)choice; } GCC_ChallengeResponseAlgorithm::operator const GCC_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_NonStandardParameter), PInvalidCast); #endif return *(GCC_NonStandardParameter *)choice; } PBoolean GCC_ChallengeResponseAlgorithm::CreateObject() { switch (tag) { case e_passwordInTheClear : choice = new PASN_Null(); return TRUE; case e_nonStandardAlgorithm : choice = new GCC_NonStandardParameter(); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_ChallengeResponseAlgorithm::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ChallengeResponseAlgorithm::Class()), PInvalidCast); #endif return new GCC_ChallengeResponseAlgorithm(*this); } // // ChallengeItem // GCC_ChallengeItem::GCC_ChallengeItem(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ChallengeItem::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+20) << "responseAlgorithm = " << setprecision(indent) << m_responseAlgorithm << '\n'; strm << setw(indent+16) << "challengeData = " << setprecision(indent) << m_challengeData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ChallengeItem::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ChallengeItem), PInvalidCast); #endif const GCC_ChallengeItem & other = (const GCC_ChallengeItem &)obj; Comparison result; if ((result = m_responseAlgorithm.Compare(other.m_responseAlgorithm)) != EqualTo) return result; if ((result = m_challengeData.Compare(other.m_challengeData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ChallengeItem::GetDataLength() const { PINDEX length = 0; length += m_responseAlgorithm.GetObjectLength(); length += m_challengeData.GetObjectLength(); return length; } PBoolean GCC_ChallengeItem::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_responseAlgorithm.Decode(strm)) return FALSE; if (!m_challengeData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ChallengeItem::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_responseAlgorithm.Encode(strm); m_challengeData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ChallengeItem::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ChallengeItem::Class()), PInvalidCast); #endif return new GCC_ChallengeItem(*this); } // // ChallengeResponse // GCC_ChallengeResponse::GCC_ChallengeResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ChallengeResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "challengeTag = " << setprecision(indent) << m_challengeTag << '\n'; strm << setw(indent+20) << "responseAlgorithm = " << setprecision(indent) << m_responseAlgorithm << '\n'; strm << setw(indent+15) << "responseItem = " << setprecision(indent) << m_responseItem << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ChallengeResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ChallengeResponse), PInvalidCast); #endif const GCC_ChallengeResponse & other = (const GCC_ChallengeResponse &)obj; Comparison result; if ((result = m_challengeTag.Compare(other.m_challengeTag)) != EqualTo) return result; if ((result = m_responseAlgorithm.Compare(other.m_responseAlgorithm)) != EqualTo) return result; if ((result = m_responseItem.Compare(other.m_responseItem)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ChallengeResponse::GetDataLength() const { PINDEX length = 0; length += m_challengeTag.GetObjectLength(); length += m_responseAlgorithm.GetObjectLength(); length += m_responseItem.GetObjectLength(); return length; } PBoolean GCC_ChallengeResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_challengeTag.Decode(strm)) return FALSE; if (!m_responseAlgorithm.Decode(strm)) return FALSE; if (!m_responseItem.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ChallengeResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_challengeTag.Encode(strm); m_responseAlgorithm.Encode(strm); m_responseItem.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ChallengeResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ChallengeResponse::Class()), PInvalidCast); #endif return new GCC_ChallengeResponse(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_PasswordChallengeRequestResponse[]={ {"passwordInTheClear",0} ,{"challengeRequestResponse",1} }; #endif // // PasswordChallengeRequestResponse // GCC_PasswordChallengeRequestResponse::GCC_PasswordChallengeRequestResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_PasswordChallengeRequestResponse,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_PasswordChallengeRequestResponse::operator GCC_PasswordSelector &() const #else GCC_PasswordChallengeRequestResponse::operator GCC_PasswordSelector &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_PasswordSelector), PInvalidCast); #endif return *(GCC_PasswordSelector *)choice; } GCC_PasswordChallengeRequestResponse::operator const GCC_PasswordSelector &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_PasswordSelector), PInvalidCast); #endif return *(GCC_PasswordSelector *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_PasswordChallengeRequestResponse::operator GCC_PasswordChallengeRequestResponse_challengeRequestResponse &() const #else GCC_PasswordChallengeRequestResponse::operator GCC_PasswordChallengeRequestResponse_challengeRequestResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_PasswordChallengeRequestResponse_challengeRequestResponse), PInvalidCast); #endif return *(GCC_PasswordChallengeRequestResponse_challengeRequestResponse *)choice; } GCC_PasswordChallengeRequestResponse::operator const GCC_PasswordChallengeRequestResponse_challengeRequestResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_PasswordChallengeRequestResponse_challengeRequestResponse), PInvalidCast); #endif return *(GCC_PasswordChallengeRequestResponse_challengeRequestResponse *)choice; } PBoolean GCC_PasswordChallengeRequestResponse::CreateObject() { switch (tag) { case e_passwordInTheClear : choice = new GCC_PasswordSelector(); return TRUE; case e_challengeRequestResponse : choice = new GCC_PasswordChallengeRequestResponse_challengeRequestResponse(); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_PasswordChallengeRequestResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_PasswordChallengeRequestResponse::Class()), PInvalidCast); #endif return new GCC_PasswordChallengeRequestResponse(*this); } // // ConferenceName // GCC_ConferenceName::GCC_ConferenceName(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceName::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "numeric = " << setprecision(indent) << m_numeric << '\n'; if (HasOptionalField(e_text)) strm << setw(indent+7) << "text = " << setprecision(indent) << m_text << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceName::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceName), PInvalidCast); #endif const GCC_ConferenceName & other = (const GCC_ConferenceName &)obj; Comparison result; if ((result = m_numeric.Compare(other.m_numeric)) != EqualTo) return result; if ((result = m_text.Compare(other.m_text)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceName::GetDataLength() const { PINDEX length = 0; length += m_numeric.GetObjectLength(); if (HasOptionalField(e_text)) length += m_text.GetObjectLength(); return length; } PBoolean GCC_ConferenceName::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_numeric.Decode(strm)) return FALSE; if (HasOptionalField(e_text) && !m_text.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceName::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_numeric.Encode(strm); if (HasOptionalField(e_text)) m_text.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceName::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceName::Class()), PInvalidCast); #endif return new GCC_ConferenceName(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_ConferenceNameSelector[]={ {"numeric",0} ,{"text",1} }; #endif // // ConferenceNameSelector // GCC_ConferenceNameSelector::GCC_ConferenceNameSelector(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_ConferenceNameSelector,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ConferenceNameSelector::operator GCC_SimpleNumericString &() const #else GCC_ConferenceNameSelector::operator GCC_SimpleNumericString &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_SimpleNumericString), PInvalidCast); #endif return *(GCC_SimpleNumericString *)choice; } GCC_ConferenceNameSelector::operator const GCC_SimpleNumericString &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_SimpleNumericString), PInvalidCast); #endif return *(GCC_SimpleNumericString *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ConferenceNameSelector::operator GCC_SimpleTextString &() const #else GCC_ConferenceNameSelector::operator GCC_SimpleTextString &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_SimpleTextString), PInvalidCast); #endif return *(GCC_SimpleTextString *)choice; } GCC_ConferenceNameSelector::operator const GCC_SimpleTextString &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_SimpleTextString), PInvalidCast); #endif return *(GCC_SimpleTextString *)choice; } PBoolean GCC_ConferenceNameSelector::CreateObject() { switch (tag) { case e_numeric : choice = new GCC_SimpleNumericString(); return TRUE; case e_text : choice = new GCC_SimpleTextString(); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_ConferenceNameSelector::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceNameSelector::Class()), PInvalidCast); #endif return new GCC_ConferenceNameSelector(*this); } // // ConferenceNameModifier // GCC_ConferenceNameModifier::GCC_ConferenceNameModifier(unsigned tag, PASN_Object::TagClass tagClass) : GCC_SimpleNumericString(tag, tagClass) { } GCC_ConferenceNameModifier & GCC_ConferenceNameModifier::operator=(const char * v) { SetValue(v); return *this; } GCC_ConferenceNameModifier & GCC_ConferenceNameModifier::operator=(const PString & v) { SetValue(v); return *this; } PObject * GCC_ConferenceNameModifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceNameModifier::Class()), PInvalidCast); #endif return new GCC_ConferenceNameModifier(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_Privilege[]={ {"terminate",0} ,{"ejectUser",1} ,{"add",2} ,{"lockUnlock",3} ,{"transfer",4} }; #endif // // Privilege // GCC_Privilege::GCC_Privilege(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_Privilege,5 #endif ) { } GCC_Privilege & GCC_Privilege::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_Privilege::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_Privilege::Class()), PInvalidCast); #endif return new GCC_Privilege(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_TerminationMethod[]={ {"automatic",0} ,{"manual",1} }; #endif // // TerminationMethod // GCC_TerminationMethod::GCC_TerminationMethod(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_TerminationMethod,2 #endif ) { } GCC_TerminationMethod & GCC_TerminationMethod::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_TerminationMethod::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_TerminationMethod::Class()), PInvalidCast); #endif return new GCC_TerminationMethod(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_ConferencePriorityScheme[]={ {"nonStandardScheme",0} }; #endif // // ConferencePriorityScheme // GCC_ConferencePriorityScheme::GCC_ConferencePriorityScheme(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_ConferencePriorityScheme,1 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ConferencePriorityScheme::operator GCC_NonStandardParameter &() const #else GCC_ConferencePriorityScheme::operator GCC_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_NonStandardParameter), PInvalidCast); #endif return *(GCC_NonStandardParameter *)choice; } GCC_ConferencePriorityScheme::operator const GCC_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_NonStandardParameter), PInvalidCast); #endif return *(GCC_NonStandardParameter *)choice; } PBoolean GCC_ConferencePriorityScheme::CreateObject() { switch (tag) { case e_nonStandardScheme : choice = new GCC_NonStandardParameter(); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_ConferencePriorityScheme::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferencePriorityScheme::Class()), PInvalidCast); #endif return new GCC_ConferencePriorityScheme(*this); } // // ConferencePriority // GCC_ConferencePriority::GCC_ConferencePriority(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_priority.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void GCC_ConferencePriority::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "priority = " << setprecision(indent) << m_priority << '\n'; strm << setw(indent+9) << "scheme = " << setprecision(indent) << m_scheme << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferencePriority::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferencePriority), PInvalidCast); #endif const GCC_ConferencePriority & other = (const GCC_ConferencePriority &)obj; Comparison result; if ((result = m_priority.Compare(other.m_priority)) != EqualTo) return result; if ((result = m_scheme.Compare(other.m_scheme)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferencePriority::GetDataLength() const { PINDEX length = 0; length += m_priority.GetObjectLength(); length += m_scheme.GetObjectLength(); return length; } PBoolean GCC_ConferencePriority::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_priority.Decode(strm)) return FALSE; if (!m_scheme.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferencePriority::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_priority.Encode(strm); m_scheme.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferencePriority::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferencePriority::Class()), PInvalidCast); #endif return new GCC_ConferencePriority(*this); } // // NetworkAddress // GCC_NetworkAddress::GCC_NetworkAddress(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 64); } PASN_Object * GCC_NetworkAddress::CreateObject() const { return new GCC_NetworkAddress_subtype; } GCC_NetworkAddress_subtype & GCC_NetworkAddress::operator[](PINDEX i) const { return (GCC_NetworkAddress_subtype &)array[i]; } PObject * GCC_NetworkAddress::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_NetworkAddress::Class()), PInvalidCast); #endif return new GCC_NetworkAddress(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_NodeType[]={ {"terminal",0} ,{"multiportTerminal",1} ,{"mcu",2} }; #endif // // NodeType // GCC_NodeType::GCC_NodeType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_NodeType,3 #endif ) { } GCC_NodeType & GCC_NodeType::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_NodeType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_NodeType::Class()), PInvalidCast); #endif return new GCC_NodeType(*this); } // // NodeProperties // GCC_NodeProperties::GCC_NodeProperties(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_NodeProperties::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+19) << "managementDevice = " << setprecision(indent) << m_managementDevice << '\n'; strm << setw(indent+19) << "peripheralDevice = " << setprecision(indent) << m_peripheralDevice << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_NodeProperties::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_NodeProperties), PInvalidCast); #endif const GCC_NodeProperties & other = (const GCC_NodeProperties &)obj; Comparison result; if ((result = m_managementDevice.Compare(other.m_managementDevice)) != EqualTo) return result; if ((result = m_peripheralDevice.Compare(other.m_peripheralDevice)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_NodeProperties::GetDataLength() const { PINDEX length = 0; length += m_managementDevice.GetObjectLength(); length += m_peripheralDevice.GetObjectLength(); return length; } PBoolean GCC_NodeProperties::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_managementDevice.Decode(strm)) return FALSE; if (!m_peripheralDevice.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_NodeProperties::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_managementDevice.Encode(strm); m_peripheralDevice.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_NodeProperties::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_NodeProperties::Class()), PInvalidCast); #endif return new GCC_NodeProperties(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_AsymmetryIndicator[]={ {"callingNode",0} ,{"calledNode",1} ,{"unknown",2} }; #endif // // AsymmetryIndicator // GCC_AsymmetryIndicator::GCC_AsymmetryIndicator(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_AsymmetryIndicator,3 #endif ) { } PBoolean GCC_AsymmetryIndicator::CreateObject() { switch (tag) { case e_callingNode : case e_calledNode : choice = new PASN_Null(); return TRUE; case e_unknown : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 4294967295U); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_AsymmetryIndicator::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_AsymmetryIndicator::Class()), PInvalidCast); #endif return new GCC_AsymmetryIndicator(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_AlternativeNodeID[]={ {"h243NodeID",0} }; #endif // // AlternativeNodeID // GCC_AlternativeNodeID::GCC_AlternativeNodeID(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_AlternativeNodeID,1 #endif ) { } PBoolean GCC_AlternativeNodeID::CreateObject() { switch (tag) { case e_h243NodeID : choice = new PASN_OctetString(); choice->SetConstraints(PASN_Object::FixedConstraint, 2); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_AlternativeNodeID::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_AlternativeNodeID::Class()), PInvalidCast); #endif return new GCC_AlternativeNodeID(*this); } // // ConferenceDescriptor // GCC_ConferenceDescriptor::GCC_ConferenceDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 1) { IncludeOptionalField(e_defaultConferenceFlag); } #ifndef PASN_NOPRINTON void GCC_ConferenceDescriptor::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "conferenceName = " << setprecision(indent) << m_conferenceName << '\n'; if (HasOptionalField(e_conferenceNameModifier)) strm << setw(indent+25) << "conferenceNameModifier = " << setprecision(indent) << m_conferenceNameModifier << '\n'; if (HasOptionalField(e_conferenceDescription)) strm << setw(indent+24) << "conferenceDescription = " << setprecision(indent) << m_conferenceDescription << '\n'; strm << setw(indent+19) << "lockedConference = " << setprecision(indent) << m_lockedConference << '\n'; strm << setw(indent+29) << "passwordInTheClearRequired = " << setprecision(indent) << m_passwordInTheClearRequired << '\n'; if (HasOptionalField(e_networkAddress)) strm << setw(indent+17) << "networkAddress = " << setprecision(indent) << m_networkAddress << '\n'; if (HasOptionalField(e_defaultConferenceFlag)) strm << setw(indent+24) << "defaultConferenceFlag = " << setprecision(indent) << m_defaultConferenceFlag << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceDescriptor::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceDescriptor), PInvalidCast); #endif const GCC_ConferenceDescriptor & other = (const GCC_ConferenceDescriptor &)obj; Comparison result; if ((result = m_conferenceName.Compare(other.m_conferenceName)) != EqualTo) return result; if ((result = m_conferenceNameModifier.Compare(other.m_conferenceNameModifier)) != EqualTo) return result; if ((result = m_conferenceDescription.Compare(other.m_conferenceDescription)) != EqualTo) return result; if ((result = m_lockedConference.Compare(other.m_lockedConference)) != EqualTo) return result; if ((result = m_passwordInTheClearRequired.Compare(other.m_passwordInTheClearRequired)) != EqualTo) return result; if ((result = m_networkAddress.Compare(other.m_networkAddress)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceDescriptor::GetDataLength() const { PINDEX length = 0; length += m_conferenceName.GetObjectLength(); if (HasOptionalField(e_conferenceNameModifier)) length += m_conferenceNameModifier.GetObjectLength(); if (HasOptionalField(e_conferenceDescription)) length += m_conferenceDescription.GetObjectLength(); length += m_lockedConference.GetObjectLength(); length += m_passwordInTheClearRequired.GetObjectLength(); if (HasOptionalField(e_networkAddress)) length += m_networkAddress.GetObjectLength(); return length; } PBoolean GCC_ConferenceDescriptor::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_conferenceName.Decode(strm)) return FALSE; if (HasOptionalField(e_conferenceNameModifier) && !m_conferenceNameModifier.Decode(strm)) return FALSE; if (HasOptionalField(e_conferenceDescription) && !m_conferenceDescription.Decode(strm)) return FALSE; if (!m_lockedConference.Decode(strm)) return FALSE; if (!m_passwordInTheClearRequired.Decode(strm)) return FALSE; if (HasOptionalField(e_networkAddress) && !m_networkAddress.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_defaultConferenceFlag, m_defaultConferenceFlag)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceDescriptor::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_conferenceName.Encode(strm); if (HasOptionalField(e_conferenceNameModifier)) m_conferenceNameModifier.Encode(strm); if (HasOptionalField(e_conferenceDescription)) m_conferenceDescription.Encode(strm); m_lockedConference.Encode(strm); m_passwordInTheClearRequired.Encode(strm); if (HasOptionalField(e_networkAddress)) m_networkAddress.Encode(strm); KnownExtensionEncode(strm, e_defaultConferenceFlag, m_defaultConferenceFlag); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceDescriptor::Class()), PInvalidCast); #endif return new GCC_ConferenceDescriptor(*this); } // // SessionKey // GCC_SessionKey::GCC_SessionKey(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { } #ifndef PASN_NOPRINTON void GCC_SessionKey::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+25) << "applicationProtocolKey = " << setprecision(indent) << m_applicationProtocolKey << '\n'; if (HasOptionalField(e_sessionID)) strm << setw(indent+12) << "sessionID = " << setprecision(indent) << m_sessionID << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_SessionKey::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_SessionKey), PInvalidCast); #endif const GCC_SessionKey & other = (const GCC_SessionKey &)obj; Comparison result; if ((result = m_applicationProtocolKey.Compare(other.m_applicationProtocolKey)) != EqualTo) return result; if ((result = m_sessionID.Compare(other.m_sessionID)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_SessionKey::GetDataLength() const { PINDEX length = 0; length += m_applicationProtocolKey.GetObjectLength(); if (HasOptionalField(e_sessionID)) length += m_sessionID.GetObjectLength(); return length; } PBoolean GCC_SessionKey::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_applicationProtocolKey.Decode(strm)) return FALSE; if (HasOptionalField(e_sessionID) && !m_sessionID.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_SessionKey::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_applicationProtocolKey.Encode(strm); if (HasOptionalField(e_sessionID)) m_sessionID.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_SessionKey::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_SessionKey::Class()), PInvalidCast); #endif return new GCC_SessionKey(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_ChannelType[]={ {"static",0} ,{"dynamicMulticast",1} ,{"dynamicPrivate",2} ,{"dynamicUserId",3} }; #endif // // ChannelType // GCC_ChannelType::GCC_ChannelType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 3, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_ChannelType,4 #endif ) { } GCC_ChannelType & GCC_ChannelType::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_ChannelType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ChannelType::Class()), PInvalidCast); #endif return new GCC_ChannelType(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_CapabilityID[]={ {"standard",0} ,{"nonStandard",1} }; #endif // // CapabilityID // GCC_CapabilityID::GCC_CapabilityID(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_CapabilityID,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_CapabilityID::operator GCC_Key &() const #else GCC_CapabilityID::operator GCC_Key &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_Key), PInvalidCast); #endif return *(GCC_Key *)choice; } GCC_CapabilityID::operator const GCC_Key &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_Key), PInvalidCast); #endif return *(GCC_Key *)choice; } PBoolean GCC_CapabilityID::CreateObject() { switch (tag) { case e_standard : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 65535); return TRUE; case e_nonStandard : choice = new GCC_Key(); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_CapabilityID::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_CapabilityID::Class()), PInvalidCast); #endif return new GCC_CapabilityID(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_CapabilityClass[]={ {"logical",0} ,{"unsignedMin",1} ,{"unsignedMax",2} }; #endif // // CapabilityClass // GCC_CapabilityClass::GCC_CapabilityClass(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_CapabilityClass,3 #endif ) { } PBoolean GCC_CapabilityClass::CreateObject() { switch (tag) { case e_logical : choice = new PASN_Null(); return TRUE; case e_unsignedMin : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, MaximumValue); return TRUE; case e_unsignedMax : choice = new PASN_Integer(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, MaximumValue); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_CapabilityClass::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_CapabilityClass::Class()), PInvalidCast); #endif return new GCC_CapabilityClass(*this); } // // EntityID // GCC_EntityID::GCC_EntityID(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Integer(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } GCC_EntityID & GCC_EntityID::operator=(int v) { SetValue(v); return *this; } GCC_EntityID & GCC_EntityID::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_EntityID::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_EntityID::Class()), PInvalidCast); #endif return new GCC_EntityID(*this); } // // RegistryKey // GCC_RegistryKey::GCC_RegistryKey(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { m_resourceID.SetConstraints(PASN_Object::FixedConstraint, 0, 64); } #ifndef PASN_NOPRINTON void GCC_RegistryKey::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "sessionKey = " << setprecision(indent) << m_sessionKey << '\n'; strm << setw(indent+13) << "resourceID = " << setprecision(indent) << m_resourceID << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_RegistryKey::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_RegistryKey), PInvalidCast); #endif const GCC_RegistryKey & other = (const GCC_RegistryKey &)obj; Comparison result; if ((result = m_sessionKey.Compare(other.m_sessionKey)) != EqualTo) return result; if ((result = m_resourceID.Compare(other.m_resourceID)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_RegistryKey::GetDataLength() const { PINDEX length = 0; length += m_sessionKey.GetObjectLength(); length += m_resourceID.GetObjectLength(); return length; } PBoolean GCC_RegistryKey::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sessionKey.Decode(strm)) return FALSE; if (!m_resourceID.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_RegistryKey::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sessionKey.Encode(strm); m_resourceID.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_RegistryKey::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RegistryKey::Class()), PInvalidCast); #endif return new GCC_RegistryKey(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_RegistryItem[]={ {"channelID",0} ,{"tokenID",1} ,{"parameter",2} ,{"vacant",3} }; #endif // // RegistryItem // GCC_RegistryItem::GCC_RegistryItem(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_RegistryItem,4 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RegistryItem::operator GCC_DynamicChannelID &() const #else GCC_RegistryItem::operator GCC_DynamicChannelID &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_DynamicChannelID), PInvalidCast); #endif return *(GCC_DynamicChannelID *)choice; } GCC_RegistryItem::operator const GCC_DynamicChannelID &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_DynamicChannelID), PInvalidCast); #endif return *(GCC_DynamicChannelID *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RegistryItem::operator GCC_DynamicTokenID &() const #else GCC_RegistryItem::operator GCC_DynamicTokenID &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_DynamicTokenID), PInvalidCast); #endif return *(GCC_DynamicTokenID *)choice; } GCC_RegistryItem::operator const GCC_DynamicTokenID &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_DynamicTokenID), PInvalidCast); #endif return *(GCC_DynamicTokenID *)choice; } PBoolean GCC_RegistryItem::CreateObject() { switch (tag) { case e_channelID : choice = new GCC_DynamicChannelID(); return TRUE; case e_tokenID : choice = new GCC_DynamicTokenID(); return TRUE; case e_parameter : choice = new PASN_OctetString(); choice->SetConstraints(PASN_Object::FixedConstraint, 0, 64); return TRUE; case e_vacant : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_RegistryItem::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RegistryItem::Class()), PInvalidCast); #endif return new GCC_RegistryItem(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_RegistryEntryOwner[]={ {"owned",0} ,{"notOwned",1} }; #endif // // RegistryEntryOwner // GCC_RegistryEntryOwner::GCC_RegistryEntryOwner(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_RegistryEntryOwner,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RegistryEntryOwner::operator GCC_RegistryEntryOwner_owned &() const #else GCC_RegistryEntryOwner::operator GCC_RegistryEntryOwner_owned &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RegistryEntryOwner_owned), PInvalidCast); #endif return *(GCC_RegistryEntryOwner_owned *)choice; } GCC_RegistryEntryOwner::operator const GCC_RegistryEntryOwner_owned &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RegistryEntryOwner_owned), PInvalidCast); #endif return *(GCC_RegistryEntryOwner_owned *)choice; } PBoolean GCC_RegistryEntryOwner::CreateObject() { switch (tag) { case e_owned : choice = new GCC_RegistryEntryOwner_owned(); return TRUE; case e_notOwned : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_RegistryEntryOwner::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RegistryEntryOwner::Class()), PInvalidCast); #endif return new GCC_RegistryEntryOwner(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_RegistryModificationRights[]={ {"owner",0} ,{"session",1} ,{"public",2} }; #endif // // RegistryModificationRights // GCC_RegistryModificationRights::GCC_RegistryModificationRights(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 2, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_RegistryModificationRights,3 #endif ) { } GCC_RegistryModificationRights & GCC_RegistryModificationRights::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_RegistryModificationRights::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RegistryModificationRights::Class()), PInvalidCast); #endif return new GCC_RegistryModificationRights(*this); } // // UserIDIndication // GCC_UserIDIndication::GCC_UserIDIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_UserIDIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+6) << "tag = " << setprecision(indent) << m_tag << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_UserIDIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_UserIDIndication), PInvalidCast); #endif const GCC_UserIDIndication & other = (const GCC_UserIDIndication &)obj; Comparison result; if ((result = m_tag.Compare(other.m_tag)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_UserIDIndication::GetDataLength() const { PINDEX length = 0; length += m_tag.GetObjectLength(); return length; } PBoolean GCC_UserIDIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_tag.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_UserIDIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_tag.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_UserIDIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_UserIDIndication::Class()), PInvalidCast); #endif return new GCC_UserIDIndication(*this); } // // ConferenceQueryRequest // GCC_ConferenceQueryRequest::GCC_ConferenceQueryRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceQueryRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "nodeType = " << setprecision(indent) << m_nodeType << '\n'; if (HasOptionalField(e_asymmetryIndicator)) strm << setw(indent+21) << "asymmetryIndicator = " << setprecision(indent) << m_asymmetryIndicator << '\n'; if (HasOptionalField(e_userData)) strm << setw(indent+11) << "userData = " << setprecision(indent) << m_userData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceQueryRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceQueryRequest), PInvalidCast); #endif const GCC_ConferenceQueryRequest & other = (const GCC_ConferenceQueryRequest &)obj; Comparison result; if ((result = m_nodeType.Compare(other.m_nodeType)) != EqualTo) return result; if ((result = m_asymmetryIndicator.Compare(other.m_asymmetryIndicator)) != EqualTo) return result; if ((result = m_userData.Compare(other.m_userData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceQueryRequest::GetDataLength() const { PINDEX length = 0; length += m_nodeType.GetObjectLength(); if (HasOptionalField(e_asymmetryIndicator)) length += m_asymmetryIndicator.GetObjectLength(); if (HasOptionalField(e_userData)) length += m_userData.GetObjectLength(); return length; } PBoolean GCC_ConferenceQueryRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nodeType.Decode(strm)) return FALSE; if (HasOptionalField(e_asymmetryIndicator) && !m_asymmetryIndicator.Decode(strm)) return FALSE; if (HasOptionalField(e_userData) && !m_userData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceQueryRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nodeType.Encode(strm); if (HasOptionalField(e_asymmetryIndicator)) m_asymmetryIndicator.Encode(strm); if (HasOptionalField(e_userData)) m_userData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceQueryRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceQueryRequest::Class()), PInvalidCast); #endif return new GCC_ConferenceQueryRequest(*this); } // // ConferenceJoinRequest // GCC_ConferenceJoinRequest::GCC_ConferenceJoinRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 7, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceJoinRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_conferenceName)) strm << setw(indent+17) << "conferenceName = " << setprecision(indent) << m_conferenceName << '\n'; if (HasOptionalField(e_conferenceNameModifier)) strm << setw(indent+25) << "conferenceNameModifier = " << setprecision(indent) << m_conferenceNameModifier << '\n'; if (HasOptionalField(e_tag)) strm << setw(indent+6) << "tag = " << setprecision(indent) << m_tag << '\n'; if (HasOptionalField(e_password)) strm << setw(indent+11) << "password = " << setprecision(indent) << m_password << '\n'; if (HasOptionalField(e_convenerPassword)) strm << setw(indent+19) << "convenerPassword = " << setprecision(indent) << m_convenerPassword << '\n'; if (HasOptionalField(e_callerIdentifier)) strm << setw(indent+19) << "callerIdentifier = " << setprecision(indent) << m_callerIdentifier << '\n'; if (HasOptionalField(e_userData)) strm << setw(indent+11) << "userData = " << setprecision(indent) << m_userData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceJoinRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceJoinRequest), PInvalidCast); #endif const GCC_ConferenceJoinRequest & other = (const GCC_ConferenceJoinRequest &)obj; Comparison result; if ((result = m_conferenceName.Compare(other.m_conferenceName)) != EqualTo) return result; if ((result = m_conferenceNameModifier.Compare(other.m_conferenceNameModifier)) != EqualTo) return result; if ((result = m_tag.Compare(other.m_tag)) != EqualTo) return result; if ((result = m_password.Compare(other.m_password)) != EqualTo) return result; if ((result = m_convenerPassword.Compare(other.m_convenerPassword)) != EqualTo) return result; if ((result = m_callerIdentifier.Compare(other.m_callerIdentifier)) != EqualTo) return result; if ((result = m_userData.Compare(other.m_userData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceJoinRequest::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_conferenceName)) length += m_conferenceName.GetObjectLength(); if (HasOptionalField(e_conferenceNameModifier)) length += m_conferenceNameModifier.GetObjectLength(); if (HasOptionalField(e_tag)) length += m_tag.GetObjectLength(); if (HasOptionalField(e_password)) length += m_password.GetObjectLength(); if (HasOptionalField(e_convenerPassword)) length += m_convenerPassword.GetObjectLength(); if (HasOptionalField(e_callerIdentifier)) length += m_callerIdentifier.GetObjectLength(); if (HasOptionalField(e_userData)) length += m_userData.GetObjectLength(); return length; } PBoolean GCC_ConferenceJoinRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_conferenceName) && !m_conferenceName.Decode(strm)) return FALSE; if (HasOptionalField(e_conferenceNameModifier) && !m_conferenceNameModifier.Decode(strm)) return FALSE; if (HasOptionalField(e_tag) && !m_tag.Decode(strm)) return FALSE; if (HasOptionalField(e_password) && !m_password.Decode(strm)) return FALSE; if (HasOptionalField(e_convenerPassword) && !m_convenerPassword.Decode(strm)) return FALSE; if (HasOptionalField(e_callerIdentifier) && !m_callerIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_userData) && !m_userData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceJoinRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_conferenceName)) m_conferenceName.Encode(strm); if (HasOptionalField(e_conferenceNameModifier)) m_conferenceNameModifier.Encode(strm); if (HasOptionalField(e_tag)) m_tag.Encode(strm); if (HasOptionalField(e_password)) m_password.Encode(strm); if (HasOptionalField(e_convenerPassword)) m_convenerPassword.Encode(strm); if (HasOptionalField(e_callerIdentifier)) m_callerIdentifier.Encode(strm); if (HasOptionalField(e_userData)) m_userData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceJoinRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceJoinRequest::Class()), PInvalidCast); #endif return new GCC_ConferenceJoinRequest(*this); } // // ConferenceAddRequest // GCC_ConferenceAddRequest::GCC_ConferenceAddRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceAddRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "networkAddress = " << setprecision(indent) << m_networkAddress << '\n'; strm << setw(indent+17) << "requestingNode = " << setprecision(indent) << m_requestingNode << '\n'; strm << setw(indent+6) << "tag = " << setprecision(indent) << m_tag << '\n'; if (HasOptionalField(e_addingMCU)) strm << setw(indent+12) << "addingMCU = " << setprecision(indent) << m_addingMCU << '\n'; if (HasOptionalField(e_userData)) strm << setw(indent+11) << "userData = " << setprecision(indent) << m_userData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceAddRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceAddRequest), PInvalidCast); #endif const GCC_ConferenceAddRequest & other = (const GCC_ConferenceAddRequest &)obj; Comparison result; if ((result = m_networkAddress.Compare(other.m_networkAddress)) != EqualTo) return result; if ((result = m_requestingNode.Compare(other.m_requestingNode)) != EqualTo) return result; if ((result = m_tag.Compare(other.m_tag)) != EqualTo) return result; if ((result = m_addingMCU.Compare(other.m_addingMCU)) != EqualTo) return result; if ((result = m_userData.Compare(other.m_userData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceAddRequest::GetDataLength() const { PINDEX length = 0; length += m_networkAddress.GetObjectLength(); length += m_requestingNode.GetObjectLength(); length += m_tag.GetObjectLength(); if (HasOptionalField(e_addingMCU)) length += m_addingMCU.GetObjectLength(); if (HasOptionalField(e_userData)) length += m_userData.GetObjectLength(); return length; } PBoolean GCC_ConferenceAddRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_networkAddress.Decode(strm)) return FALSE; if (!m_requestingNode.Decode(strm)) return FALSE; if (!m_tag.Decode(strm)) return FALSE; if (HasOptionalField(e_addingMCU) && !m_addingMCU.Decode(strm)) return FALSE; if (HasOptionalField(e_userData) && !m_userData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceAddRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_networkAddress.Encode(strm); m_requestingNode.Encode(strm); m_tag.Encode(strm); if (HasOptionalField(e_addingMCU)) m_addingMCU.Encode(strm); if (HasOptionalField(e_userData)) m_userData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceAddRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceAddRequest::Class()), PInvalidCast); #endif return new GCC_ConferenceAddRequest(*this); } // // ConferenceLockRequest // GCC_ConferenceLockRequest::GCC_ConferenceLockRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceLockRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX GCC_ConferenceLockRequest::GetDataLength() const { PINDEX length = 0; return length; } PBoolean GCC_ConferenceLockRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceLockRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceLockRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceLockRequest::Class()), PInvalidCast); #endif return new GCC_ConferenceLockRequest(*this); } // // ConferenceLockIndication // GCC_ConferenceLockIndication::GCC_ConferenceLockIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceLockIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX GCC_ConferenceLockIndication::GetDataLength() const { PINDEX length = 0; return length; } PBoolean GCC_ConferenceLockIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceLockIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceLockIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceLockIndication::Class()), PInvalidCast); #endif return new GCC_ConferenceLockIndication(*this); } // // ConferenceUnlockRequest // GCC_ConferenceUnlockRequest::GCC_ConferenceUnlockRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceUnlockRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX GCC_ConferenceUnlockRequest::GetDataLength() const { PINDEX length = 0; return length; } PBoolean GCC_ConferenceUnlockRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceUnlockRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceUnlockRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceUnlockRequest::Class()), PInvalidCast); #endif return new GCC_ConferenceUnlockRequest(*this); } // // ConferenceUnlockIndication // GCC_ConferenceUnlockIndication::GCC_ConferenceUnlockIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceUnlockIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX GCC_ConferenceUnlockIndication::GetDataLength() const { PINDEX length = 0; return length; } PBoolean GCC_ConferenceUnlockIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceUnlockIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceUnlockIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceUnlockIndication::Class()), PInvalidCast); #endif return new GCC_ConferenceUnlockIndication(*this); } // // RegistryRegisterChannelRequest // GCC_RegistryRegisterChannelRequest::GCC_RegistryRegisterChannelRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_RegistryRegisterChannelRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "entityID = " << setprecision(indent) << m_entityID << '\n'; strm << setw(indent+6) << "key = " << setprecision(indent) << m_key << '\n'; strm << setw(indent+12) << "channelID = " << setprecision(indent) << m_channelID << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_RegistryRegisterChannelRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_RegistryRegisterChannelRequest), PInvalidCast); #endif const GCC_RegistryRegisterChannelRequest & other = (const GCC_RegistryRegisterChannelRequest &)obj; Comparison result; if ((result = m_entityID.Compare(other.m_entityID)) != EqualTo) return result; if ((result = m_key.Compare(other.m_key)) != EqualTo) return result; if ((result = m_channelID.Compare(other.m_channelID)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_RegistryRegisterChannelRequest::GetDataLength() const { PINDEX length = 0; length += m_entityID.GetObjectLength(); length += m_key.GetObjectLength(); length += m_channelID.GetObjectLength(); return length; } PBoolean GCC_RegistryRegisterChannelRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_entityID.Decode(strm)) return FALSE; if (!m_key.Decode(strm)) return FALSE; if (!m_channelID.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_RegistryRegisterChannelRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_entityID.Encode(strm); m_key.Encode(strm); m_channelID.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_RegistryRegisterChannelRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RegistryRegisterChannelRequest::Class()), PInvalidCast); #endif return new GCC_RegistryRegisterChannelRequest(*this); } // // RegistryAssignTokenRequest // GCC_RegistryAssignTokenRequest::GCC_RegistryAssignTokenRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_RegistryAssignTokenRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "entityID = " << setprecision(indent) << m_entityID << '\n'; strm << setw(indent+6) << "key = " << setprecision(indent) << m_key << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_RegistryAssignTokenRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_RegistryAssignTokenRequest), PInvalidCast); #endif const GCC_RegistryAssignTokenRequest & other = (const GCC_RegistryAssignTokenRequest &)obj; Comparison result; if ((result = m_entityID.Compare(other.m_entityID)) != EqualTo) return result; if ((result = m_key.Compare(other.m_key)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_RegistryAssignTokenRequest::GetDataLength() const { PINDEX length = 0; length += m_entityID.GetObjectLength(); length += m_key.GetObjectLength(); return length; } PBoolean GCC_RegistryAssignTokenRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_entityID.Decode(strm)) return FALSE; if (!m_key.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_RegistryAssignTokenRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_entityID.Encode(strm); m_key.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_RegistryAssignTokenRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RegistryAssignTokenRequest::Class()), PInvalidCast); #endif return new GCC_RegistryAssignTokenRequest(*this); } // // RegistrySetParameterRequest // GCC_RegistrySetParameterRequest::GCC_RegistrySetParameterRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_parameter.SetConstraints(PASN_Object::FixedConstraint, 0, 64); } #ifndef PASN_NOPRINTON void GCC_RegistrySetParameterRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "entityID = " << setprecision(indent) << m_entityID << '\n'; strm << setw(indent+6) << "key = " << setprecision(indent) << m_key << '\n'; strm << setw(indent+12) << "parameter = " << setprecision(indent) << m_parameter << '\n'; if (HasOptionalField(e_modificationRights)) strm << setw(indent+21) << "modificationRights = " << setprecision(indent) << m_modificationRights << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_RegistrySetParameterRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_RegistrySetParameterRequest), PInvalidCast); #endif const GCC_RegistrySetParameterRequest & other = (const GCC_RegistrySetParameterRequest &)obj; Comparison result; if ((result = m_entityID.Compare(other.m_entityID)) != EqualTo) return result; if ((result = m_key.Compare(other.m_key)) != EqualTo) return result; if ((result = m_parameter.Compare(other.m_parameter)) != EqualTo) return result; if ((result = m_modificationRights.Compare(other.m_modificationRights)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_RegistrySetParameterRequest::GetDataLength() const { PINDEX length = 0; length += m_entityID.GetObjectLength(); length += m_key.GetObjectLength(); length += m_parameter.GetObjectLength(); if (HasOptionalField(e_modificationRights)) length += m_modificationRights.GetObjectLength(); return length; } PBoolean GCC_RegistrySetParameterRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_entityID.Decode(strm)) return FALSE; if (!m_key.Decode(strm)) return FALSE; if (!m_parameter.Decode(strm)) return FALSE; if (HasOptionalField(e_modificationRights) && !m_modificationRights.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_RegistrySetParameterRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_entityID.Encode(strm); m_key.Encode(strm); m_parameter.Encode(strm); if (HasOptionalField(e_modificationRights)) m_modificationRights.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_RegistrySetParameterRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RegistrySetParameterRequest::Class()), PInvalidCast); #endif return new GCC_RegistrySetParameterRequest(*this); } // // RegistryRetrieveEntryRequest // GCC_RegistryRetrieveEntryRequest::GCC_RegistryRetrieveEntryRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_RegistryRetrieveEntryRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "entityID = " << setprecision(indent) << m_entityID << '\n'; strm << setw(indent+6) << "key = " << setprecision(indent) << m_key << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_RegistryRetrieveEntryRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_RegistryRetrieveEntryRequest), PInvalidCast); #endif const GCC_RegistryRetrieveEntryRequest & other = (const GCC_RegistryRetrieveEntryRequest &)obj; Comparison result; if ((result = m_entityID.Compare(other.m_entityID)) != EqualTo) return result; if ((result = m_key.Compare(other.m_key)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_RegistryRetrieveEntryRequest::GetDataLength() const { PINDEX length = 0; length += m_entityID.GetObjectLength(); length += m_key.GetObjectLength(); return length; } PBoolean GCC_RegistryRetrieveEntryRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_entityID.Decode(strm)) return FALSE; if (!m_key.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_RegistryRetrieveEntryRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_entityID.Encode(strm); m_key.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_RegistryRetrieveEntryRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RegistryRetrieveEntryRequest::Class()), PInvalidCast); #endif return new GCC_RegistryRetrieveEntryRequest(*this); } // // RegistryDeleteEntryRequest // GCC_RegistryDeleteEntryRequest::GCC_RegistryDeleteEntryRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_RegistryDeleteEntryRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "entityID = " << setprecision(indent) << m_entityID << '\n'; strm << setw(indent+6) << "key = " << setprecision(indent) << m_key << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_RegistryDeleteEntryRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_RegistryDeleteEntryRequest), PInvalidCast); #endif const GCC_RegistryDeleteEntryRequest & other = (const GCC_RegistryDeleteEntryRequest &)obj; Comparison result; if ((result = m_entityID.Compare(other.m_entityID)) != EqualTo) return result; if ((result = m_key.Compare(other.m_key)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_RegistryDeleteEntryRequest::GetDataLength() const { PINDEX length = 0; length += m_entityID.GetObjectLength(); length += m_key.GetObjectLength(); return length; } PBoolean GCC_RegistryDeleteEntryRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_entityID.Decode(strm)) return FALSE; if (!m_key.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_RegistryDeleteEntryRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_entityID.Encode(strm); m_key.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_RegistryDeleteEntryRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RegistryDeleteEntryRequest::Class()), PInvalidCast); #endif return new GCC_RegistryDeleteEntryRequest(*this); } // // RegistryMonitorEntryRequest // GCC_RegistryMonitorEntryRequest::GCC_RegistryMonitorEntryRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_RegistryMonitorEntryRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "entityID = " << setprecision(indent) << m_entityID << '\n'; strm << setw(indent+6) << "key = " << setprecision(indent) << m_key << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_RegistryMonitorEntryRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_RegistryMonitorEntryRequest), PInvalidCast); #endif const GCC_RegistryMonitorEntryRequest & other = (const GCC_RegistryMonitorEntryRequest &)obj; Comparison result; if ((result = m_entityID.Compare(other.m_entityID)) != EqualTo) return result; if ((result = m_key.Compare(other.m_key)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_RegistryMonitorEntryRequest::GetDataLength() const { PINDEX length = 0; length += m_entityID.GetObjectLength(); length += m_key.GetObjectLength(); return length; } PBoolean GCC_RegistryMonitorEntryRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_entityID.Decode(strm)) return FALSE; if (!m_key.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_RegistryMonitorEntryRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_entityID.Encode(strm); m_key.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_RegistryMonitorEntryRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RegistryMonitorEntryRequest::Class()), PInvalidCast); #endif return new GCC_RegistryMonitorEntryRequest(*this); } // // RegistryMonitorEntryIndication // GCC_RegistryMonitorEntryIndication::GCC_RegistryMonitorEntryIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_RegistryMonitorEntryIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+6) << "key = " << setprecision(indent) << m_key << '\n'; strm << setw(indent+7) << "item = " << setprecision(indent) << m_item << '\n'; strm << setw(indent+8) << "owner = " << setprecision(indent) << m_owner << '\n'; if (HasOptionalField(e_modificationRights)) strm << setw(indent+21) << "modificationRights = " << setprecision(indent) << m_modificationRights << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_RegistryMonitorEntryIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_RegistryMonitorEntryIndication), PInvalidCast); #endif const GCC_RegistryMonitorEntryIndication & other = (const GCC_RegistryMonitorEntryIndication &)obj; Comparison result; if ((result = m_key.Compare(other.m_key)) != EqualTo) return result; if ((result = m_item.Compare(other.m_item)) != EqualTo) return result; if ((result = m_owner.Compare(other.m_owner)) != EqualTo) return result; if ((result = m_modificationRights.Compare(other.m_modificationRights)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_RegistryMonitorEntryIndication::GetDataLength() const { PINDEX length = 0; length += m_key.GetObjectLength(); length += m_item.GetObjectLength(); length += m_owner.GetObjectLength(); if (HasOptionalField(e_modificationRights)) length += m_modificationRights.GetObjectLength(); return length; } PBoolean GCC_RegistryMonitorEntryIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_key.Decode(strm)) return FALSE; if (!m_item.Decode(strm)) return FALSE; if (!m_owner.Decode(strm)) return FALSE; if (HasOptionalField(e_modificationRights) && !m_modificationRights.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_RegistryMonitorEntryIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_key.Encode(strm); m_item.Encode(strm); m_owner.Encode(strm); if (HasOptionalField(e_modificationRights)) m_modificationRights.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_RegistryMonitorEntryIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RegistryMonitorEntryIndication::Class()), PInvalidCast); #endif return new GCC_RegistryMonitorEntryIndication(*this); } // // RegistryAllocateHandleRequest // GCC_RegistryAllocateHandleRequest::GCC_RegistryAllocateHandleRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_numberOfHandles.SetConstraints(PASN_Object::FixedConstraint, 1, 1024); } #ifndef PASN_NOPRINTON void GCC_RegistryAllocateHandleRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "entityID = " << setprecision(indent) << m_entityID << '\n'; strm << setw(indent+18) << "numberOfHandles = " << setprecision(indent) << m_numberOfHandles << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_RegistryAllocateHandleRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_RegistryAllocateHandleRequest), PInvalidCast); #endif const GCC_RegistryAllocateHandleRequest & other = (const GCC_RegistryAllocateHandleRequest &)obj; Comparison result; if ((result = m_entityID.Compare(other.m_entityID)) != EqualTo) return result; if ((result = m_numberOfHandles.Compare(other.m_numberOfHandles)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_RegistryAllocateHandleRequest::GetDataLength() const { PINDEX length = 0; length += m_entityID.GetObjectLength(); length += m_numberOfHandles.GetObjectLength(); return length; } PBoolean GCC_RegistryAllocateHandleRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_entityID.Decode(strm)) return FALSE; if (!m_numberOfHandles.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_RegistryAllocateHandleRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_entityID.Encode(strm); m_numberOfHandles.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_RegistryAllocateHandleRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RegistryAllocateHandleRequest::Class()), PInvalidCast); #endif return new GCC_RegistryAllocateHandleRequest(*this); } // // ConductorAssignIndication // GCC_ConductorAssignIndication::GCC_ConductorAssignIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConductorAssignIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "conductingNode = " << setprecision(indent) << m_conductingNode << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConductorAssignIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConductorAssignIndication), PInvalidCast); #endif const GCC_ConductorAssignIndication & other = (const GCC_ConductorAssignIndication &)obj; Comparison result; if ((result = m_conductingNode.Compare(other.m_conductingNode)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConductorAssignIndication::GetDataLength() const { PINDEX length = 0; length += m_conductingNode.GetObjectLength(); return length; } PBoolean GCC_ConductorAssignIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_conductingNode.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConductorAssignIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_conductingNode.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConductorAssignIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConductorAssignIndication::Class()), PInvalidCast); #endif return new GCC_ConductorAssignIndication(*this); } // // ConductorReleaseIndication // GCC_ConductorReleaseIndication::GCC_ConductorReleaseIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConductorReleaseIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PINDEX GCC_ConductorReleaseIndication::GetDataLength() const { PINDEX length = 0; return length; } PBoolean GCC_ConductorReleaseIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConductorReleaseIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConductorReleaseIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConductorReleaseIndication::Class()), PInvalidCast); #endif return new GCC_ConductorReleaseIndication(*this); } // // ConductorPermissionAskIndication // GCC_ConductorPermissionAskIndication::GCC_ConductorPermissionAskIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConductorPermissionAskIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+12) << "grantFlag = " << setprecision(indent) << m_grantFlag << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConductorPermissionAskIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConductorPermissionAskIndication), PInvalidCast); #endif const GCC_ConductorPermissionAskIndication & other = (const GCC_ConductorPermissionAskIndication &)obj; Comparison result; if ((result = m_grantFlag.Compare(other.m_grantFlag)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConductorPermissionAskIndication::GetDataLength() const { PINDEX length = 0; length += m_grantFlag.GetObjectLength(); return length; } PBoolean GCC_ConductorPermissionAskIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_grantFlag.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConductorPermissionAskIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_grantFlag.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConductorPermissionAskIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConductorPermissionAskIndication::Class()), PInvalidCast); #endif return new GCC_ConductorPermissionAskIndication(*this); } // // ConferenceTimeRemainingIndication // GCC_ConferenceTimeRemainingIndication::GCC_ConferenceTimeRemainingIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceTimeRemainingIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "timeRemaining = " << setprecision(indent) << m_timeRemaining << '\n'; if (HasOptionalField(e_nodeID)) strm << setw(indent+9) << "nodeID = " << setprecision(indent) << m_nodeID << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceTimeRemainingIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceTimeRemainingIndication), PInvalidCast); #endif const GCC_ConferenceTimeRemainingIndication & other = (const GCC_ConferenceTimeRemainingIndication &)obj; Comparison result; if ((result = m_timeRemaining.Compare(other.m_timeRemaining)) != EqualTo) return result; if ((result = m_nodeID.Compare(other.m_nodeID)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceTimeRemainingIndication::GetDataLength() const { PINDEX length = 0; length += m_timeRemaining.GetObjectLength(); if (HasOptionalField(e_nodeID)) length += m_nodeID.GetObjectLength(); return length; } PBoolean GCC_ConferenceTimeRemainingIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_timeRemaining.Decode(strm)) return FALSE; if (HasOptionalField(e_nodeID) && !m_nodeID.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceTimeRemainingIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_timeRemaining.Encode(strm); if (HasOptionalField(e_nodeID)) m_nodeID.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceTimeRemainingIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceTimeRemainingIndication::Class()), PInvalidCast); #endif return new GCC_ConferenceTimeRemainingIndication(*this); } // // ConferenceTimeInquireIndication // GCC_ConferenceTimeInquireIndication::GCC_ConferenceTimeInquireIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceTimeInquireIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+23) << "nodeSpecificTimeFlag = " << setprecision(indent) << m_nodeSpecificTimeFlag << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceTimeInquireIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceTimeInquireIndication), PInvalidCast); #endif const GCC_ConferenceTimeInquireIndication & other = (const GCC_ConferenceTimeInquireIndication &)obj; Comparison result; if ((result = m_nodeSpecificTimeFlag.Compare(other.m_nodeSpecificTimeFlag)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceTimeInquireIndication::GetDataLength() const { PINDEX length = 0; length += m_nodeSpecificTimeFlag.GetObjectLength(); return length; } PBoolean GCC_ConferenceTimeInquireIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nodeSpecificTimeFlag.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceTimeInquireIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nodeSpecificTimeFlag.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceTimeInquireIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceTimeInquireIndication::Class()), PInvalidCast); #endif return new GCC_ConferenceTimeInquireIndication(*this); } // // ConferenceTimeExtendIndication // GCC_ConferenceTimeExtendIndication::GCC_ConferenceTimeExtendIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceTimeExtendIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "timeToExtend = " << setprecision(indent) << m_timeToExtend << '\n'; strm << setw(indent+23) << "nodeSpecificTimeFlag = " << setprecision(indent) << m_nodeSpecificTimeFlag << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceTimeExtendIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceTimeExtendIndication), PInvalidCast); #endif const GCC_ConferenceTimeExtendIndication & other = (const GCC_ConferenceTimeExtendIndication &)obj; Comparison result; if ((result = m_timeToExtend.Compare(other.m_timeToExtend)) != EqualTo) return result; if ((result = m_nodeSpecificTimeFlag.Compare(other.m_nodeSpecificTimeFlag)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceTimeExtendIndication::GetDataLength() const { PINDEX length = 0; length += m_timeToExtend.GetObjectLength(); length += m_nodeSpecificTimeFlag.GetObjectLength(); return length; } PBoolean GCC_ConferenceTimeExtendIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_timeToExtend.Decode(strm)) return FALSE; if (!m_nodeSpecificTimeFlag.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceTimeExtendIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_timeToExtend.Encode(strm); m_nodeSpecificTimeFlag.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceTimeExtendIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceTimeExtendIndication::Class()), PInvalidCast); #endif return new GCC_ConferenceTimeExtendIndication(*this); } // // ConferenceAssistanceIndication // GCC_ConferenceAssistanceIndication::GCC_ConferenceAssistanceIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceAssistanceIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_userData)) strm << setw(indent+11) << "userData = " << setprecision(indent) << m_userData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceAssistanceIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceAssistanceIndication), PInvalidCast); #endif const GCC_ConferenceAssistanceIndication & other = (const GCC_ConferenceAssistanceIndication &)obj; Comparison result; if ((result = m_userData.Compare(other.m_userData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceAssistanceIndication::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_userData)) length += m_userData.GetObjectLength(); return length; } PBoolean GCC_ConferenceAssistanceIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_userData) && !m_userData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceAssistanceIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_userData)) m_userData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceAssistanceIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceAssistanceIndication::Class()), PInvalidCast); #endif return new GCC_ConferenceAssistanceIndication(*this); } // // TextMessageIndication // GCC_TextMessageIndication::GCC_TextMessageIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_TextMessageIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "message = " << setprecision(indent) << m_message << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_TextMessageIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_TextMessageIndication), PInvalidCast); #endif const GCC_TextMessageIndication & other = (const GCC_TextMessageIndication &)obj; Comparison result; if ((result = m_message.Compare(other.m_message)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_TextMessageIndication::GetDataLength() const { PINDEX length = 0; length += m_message.GetObjectLength(); return length; } PBoolean GCC_TextMessageIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_message.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_TextMessageIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_message.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_TextMessageIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_TextMessageIndication::Class()), PInvalidCast); #endif return new GCC_TextMessageIndication(*this); } // // NonStandardPDU // GCC_NonStandardPDU::GCC_NonStandardPDU(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_NonStandardPDU::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+7) << "data = " << setprecision(indent) << m_data << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_NonStandardPDU::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_NonStandardPDU), PInvalidCast); #endif const GCC_NonStandardPDU & other = (const GCC_NonStandardPDU &)obj; Comparison result; if ((result = m_data.Compare(other.m_data)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_NonStandardPDU::GetDataLength() const { PINDEX length = 0; length += m_data.GetObjectLength(); return length; } PBoolean GCC_NonStandardPDU::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_data.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_NonStandardPDU::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_data.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_NonStandardPDU::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_NonStandardPDU::Class()), PInvalidCast); #endif return new GCC_NonStandardPDU(*this); } // // ConnectData // GCC_ConnectData::GCC_ConnectData(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConnectData::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "t124Identifier = " << setprecision(indent) << m_t124Identifier << '\n'; strm << setw(indent+13) << "connectPDU = " << setprecision(indent) << m_connectPDU << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConnectData::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConnectData), PInvalidCast); #endif const GCC_ConnectData & other = (const GCC_ConnectData &)obj; Comparison result; if ((result = m_t124Identifier.Compare(other.m_t124Identifier)) != EqualTo) return result; if ((result = m_connectPDU.Compare(other.m_connectPDU)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConnectData::GetDataLength() const { PINDEX length = 0; length += m_t124Identifier.GetObjectLength(); length += m_connectPDU.GetObjectLength(); return length; } PBoolean GCC_ConnectData::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_t124Identifier.Decode(strm)) return FALSE; if (!m_connectPDU.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConnectData::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_t124Identifier.Encode(strm); m_connectPDU.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConnectData::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConnectData::Class()), PInvalidCast); #endif return new GCC_ConnectData(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_ConnectGCCPDU[]={ {"conferenceCreateRequest",0} ,{"conferenceCreateResponse",1} ,{"conferenceQueryRequest",2} ,{"conferenceQueryResponse",3} ,{"conferenceJoinRequest",4} ,{"conferenceJoinResponse",5} ,{"conferenceInviteRequest",6} ,{"conferenceInviteResponse",7} }; #endif // // ConnectGCCPDU // GCC_ConnectGCCPDU::GCC_ConnectGCCPDU(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 8, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_ConnectGCCPDU,8 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ConnectGCCPDU::operator GCC_ConferenceCreateRequest &() const #else GCC_ConnectGCCPDU::operator GCC_ConferenceCreateRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceCreateRequest), PInvalidCast); #endif return *(GCC_ConferenceCreateRequest *)choice; } GCC_ConnectGCCPDU::operator const GCC_ConferenceCreateRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceCreateRequest), PInvalidCast); #endif return *(GCC_ConferenceCreateRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ConnectGCCPDU::operator GCC_ConferenceCreateResponse &() const #else GCC_ConnectGCCPDU::operator GCC_ConferenceCreateResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceCreateResponse), PInvalidCast); #endif return *(GCC_ConferenceCreateResponse *)choice; } GCC_ConnectGCCPDU::operator const GCC_ConferenceCreateResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceCreateResponse), PInvalidCast); #endif return *(GCC_ConferenceCreateResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ConnectGCCPDU::operator GCC_ConferenceQueryRequest &() const #else GCC_ConnectGCCPDU::operator GCC_ConferenceQueryRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceQueryRequest), PInvalidCast); #endif return *(GCC_ConferenceQueryRequest *)choice; } GCC_ConnectGCCPDU::operator const GCC_ConferenceQueryRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceQueryRequest), PInvalidCast); #endif return *(GCC_ConferenceQueryRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ConnectGCCPDU::operator GCC_ConferenceQueryResponse &() const #else GCC_ConnectGCCPDU::operator GCC_ConferenceQueryResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceQueryResponse), PInvalidCast); #endif return *(GCC_ConferenceQueryResponse *)choice; } GCC_ConnectGCCPDU::operator const GCC_ConferenceQueryResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceQueryResponse), PInvalidCast); #endif return *(GCC_ConferenceQueryResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ConnectGCCPDU::operator GCC_ConferenceJoinRequest &() const #else GCC_ConnectGCCPDU::operator GCC_ConferenceJoinRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceJoinRequest), PInvalidCast); #endif return *(GCC_ConferenceJoinRequest *)choice; } GCC_ConnectGCCPDU::operator const GCC_ConferenceJoinRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceJoinRequest), PInvalidCast); #endif return *(GCC_ConferenceJoinRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ConnectGCCPDU::operator GCC_ConferenceJoinResponse &() const #else GCC_ConnectGCCPDU::operator GCC_ConferenceJoinResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceJoinResponse), PInvalidCast); #endif return *(GCC_ConferenceJoinResponse *)choice; } GCC_ConnectGCCPDU::operator const GCC_ConferenceJoinResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceJoinResponse), PInvalidCast); #endif return *(GCC_ConferenceJoinResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ConnectGCCPDU::operator GCC_ConferenceInviteRequest &() const #else GCC_ConnectGCCPDU::operator GCC_ConferenceInviteRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceInviteRequest), PInvalidCast); #endif return *(GCC_ConferenceInviteRequest *)choice; } GCC_ConnectGCCPDU::operator const GCC_ConferenceInviteRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceInviteRequest), PInvalidCast); #endif return *(GCC_ConferenceInviteRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ConnectGCCPDU::operator GCC_ConferenceInviteResponse &() const #else GCC_ConnectGCCPDU::operator GCC_ConferenceInviteResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceInviteResponse), PInvalidCast); #endif return *(GCC_ConferenceInviteResponse *)choice; } GCC_ConnectGCCPDU::operator const GCC_ConferenceInviteResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceInviteResponse), PInvalidCast); #endif return *(GCC_ConferenceInviteResponse *)choice; } PBoolean GCC_ConnectGCCPDU::CreateObject() { switch (tag) { case e_conferenceCreateRequest : choice = new GCC_ConferenceCreateRequest(); return TRUE; case e_conferenceCreateResponse : choice = new GCC_ConferenceCreateResponse(); return TRUE; case e_conferenceQueryRequest : choice = new GCC_ConferenceQueryRequest(); return TRUE; case e_conferenceQueryResponse : choice = new GCC_ConferenceQueryResponse(); return TRUE; case e_conferenceJoinRequest : choice = new GCC_ConferenceJoinRequest(); return TRUE; case e_conferenceJoinResponse : choice = new GCC_ConferenceJoinResponse(); return TRUE; case e_conferenceInviteRequest : choice = new GCC_ConferenceInviteRequest(); return TRUE; case e_conferenceInviteResponse : choice = new GCC_ConferenceInviteResponse(); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_ConnectGCCPDU::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConnectGCCPDU::Class()), PInvalidCast); #endif return new GCC_ConnectGCCPDU(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_GCCPDU[]={ {"request",0} ,{"response",1} ,{"indication",2} }; #endif // // GCCPDU // GCC_GCCPDU::GCC_GCCPDU(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, FALSE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_GCCPDU,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_GCCPDU::operator GCC_RequestPDU &() const #else GCC_GCCPDU::operator GCC_RequestPDU &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RequestPDU), PInvalidCast); #endif return *(GCC_RequestPDU *)choice; } GCC_GCCPDU::operator const GCC_RequestPDU &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RequestPDU), PInvalidCast); #endif return *(GCC_RequestPDU *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_GCCPDU::operator GCC_ResponsePDU &() const #else GCC_GCCPDU::operator GCC_ResponsePDU &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ResponsePDU), PInvalidCast); #endif return *(GCC_ResponsePDU *)choice; } GCC_GCCPDU::operator const GCC_ResponsePDU &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ResponsePDU), PInvalidCast); #endif return *(GCC_ResponsePDU *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_GCCPDU::operator GCC_IndicationPDU &() const #else GCC_GCCPDU::operator GCC_IndicationPDU &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_IndicationPDU), PInvalidCast); #endif return *(GCC_IndicationPDU *)choice; } GCC_GCCPDU::operator const GCC_IndicationPDU &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_IndicationPDU), PInvalidCast); #endif return *(GCC_IndicationPDU *)choice; } PBoolean GCC_GCCPDU::CreateObject() { switch (tag) { case e_request : choice = new GCC_RequestPDU(); return TRUE; case e_response : choice = new GCC_ResponsePDU(); return TRUE; case e_indication : choice = new GCC_IndicationPDU(); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_GCCPDU::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_GCCPDU::Class()), PInvalidCast); #endif return new GCC_GCCPDU(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_RequestPDU[]={ {"conferenceJoinRequest",0} ,{"conferenceAddRequest",1} ,{"conferenceLockRequest",2} ,{"conferenceUnlockRequest",3} ,{"conferenceTerminateRequest",4} ,{"conferenceEjectUserRequest",5} ,{"conferenceTransferRequest",6} ,{"registryRegisterChannelRequest",7} ,{"registryAssignTokenRequest",8} ,{"registrySetParameterRequest",9} ,{"registryRetrieveEntryRequest",10} ,{"registryDeleteEntryRequest",11} ,{"registryMonitorEntryRequest",12} ,{"registryAllocateHandleRequest",13} ,{"nonStandardRequest",14} }; #endif // // RequestPDU // GCC_RequestPDU::GCC_RequestPDU(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 15, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_RequestPDU,15 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RequestPDU::operator GCC_ConferenceJoinRequest &() const #else GCC_RequestPDU::operator GCC_ConferenceJoinRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceJoinRequest), PInvalidCast); #endif return *(GCC_ConferenceJoinRequest *)choice; } GCC_RequestPDU::operator const GCC_ConferenceJoinRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceJoinRequest), PInvalidCast); #endif return *(GCC_ConferenceJoinRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RequestPDU::operator GCC_ConferenceAddRequest &() const #else GCC_RequestPDU::operator GCC_ConferenceAddRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceAddRequest), PInvalidCast); #endif return *(GCC_ConferenceAddRequest *)choice; } GCC_RequestPDU::operator const GCC_ConferenceAddRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceAddRequest), PInvalidCast); #endif return *(GCC_ConferenceAddRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RequestPDU::operator GCC_ConferenceLockRequest &() const #else GCC_RequestPDU::operator GCC_ConferenceLockRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceLockRequest), PInvalidCast); #endif return *(GCC_ConferenceLockRequest *)choice; } GCC_RequestPDU::operator const GCC_ConferenceLockRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceLockRequest), PInvalidCast); #endif return *(GCC_ConferenceLockRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RequestPDU::operator GCC_ConferenceUnlockRequest &() const #else GCC_RequestPDU::operator GCC_ConferenceUnlockRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceUnlockRequest), PInvalidCast); #endif return *(GCC_ConferenceUnlockRequest *)choice; } GCC_RequestPDU::operator const GCC_ConferenceUnlockRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceUnlockRequest), PInvalidCast); #endif return *(GCC_ConferenceUnlockRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RequestPDU::operator GCC_ConferenceTerminateRequest &() const #else GCC_RequestPDU::operator GCC_ConferenceTerminateRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceTerminateRequest), PInvalidCast); #endif return *(GCC_ConferenceTerminateRequest *)choice; } GCC_RequestPDU::operator const GCC_ConferenceTerminateRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceTerminateRequest), PInvalidCast); #endif return *(GCC_ConferenceTerminateRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RequestPDU::operator GCC_ConferenceEjectUserRequest &() const #else GCC_RequestPDU::operator GCC_ConferenceEjectUserRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceEjectUserRequest), PInvalidCast); #endif return *(GCC_ConferenceEjectUserRequest *)choice; } GCC_RequestPDU::operator const GCC_ConferenceEjectUserRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceEjectUserRequest), PInvalidCast); #endif return *(GCC_ConferenceEjectUserRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RequestPDU::operator GCC_ConferenceTransferRequest &() const #else GCC_RequestPDU::operator GCC_ConferenceTransferRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceTransferRequest), PInvalidCast); #endif return *(GCC_ConferenceTransferRequest *)choice; } GCC_RequestPDU::operator const GCC_ConferenceTransferRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceTransferRequest), PInvalidCast); #endif return *(GCC_ConferenceTransferRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RequestPDU::operator GCC_RegistryRegisterChannelRequest &() const #else GCC_RequestPDU::operator GCC_RegistryRegisterChannelRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RegistryRegisterChannelRequest), PInvalidCast); #endif return *(GCC_RegistryRegisterChannelRequest *)choice; } GCC_RequestPDU::operator const GCC_RegistryRegisterChannelRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RegistryRegisterChannelRequest), PInvalidCast); #endif return *(GCC_RegistryRegisterChannelRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RequestPDU::operator GCC_RegistryAssignTokenRequest &() const #else GCC_RequestPDU::operator GCC_RegistryAssignTokenRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RegistryAssignTokenRequest), PInvalidCast); #endif return *(GCC_RegistryAssignTokenRequest *)choice; } GCC_RequestPDU::operator const GCC_RegistryAssignTokenRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RegistryAssignTokenRequest), PInvalidCast); #endif return *(GCC_RegistryAssignTokenRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RequestPDU::operator GCC_RegistrySetParameterRequest &() const #else GCC_RequestPDU::operator GCC_RegistrySetParameterRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RegistrySetParameterRequest), PInvalidCast); #endif return *(GCC_RegistrySetParameterRequest *)choice; } GCC_RequestPDU::operator const GCC_RegistrySetParameterRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RegistrySetParameterRequest), PInvalidCast); #endif return *(GCC_RegistrySetParameterRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RequestPDU::operator GCC_RegistryRetrieveEntryRequest &() const #else GCC_RequestPDU::operator GCC_RegistryRetrieveEntryRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RegistryRetrieveEntryRequest), PInvalidCast); #endif return *(GCC_RegistryRetrieveEntryRequest *)choice; } GCC_RequestPDU::operator const GCC_RegistryRetrieveEntryRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RegistryRetrieveEntryRequest), PInvalidCast); #endif return *(GCC_RegistryRetrieveEntryRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RequestPDU::operator GCC_RegistryDeleteEntryRequest &() const #else GCC_RequestPDU::operator GCC_RegistryDeleteEntryRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RegistryDeleteEntryRequest), PInvalidCast); #endif return *(GCC_RegistryDeleteEntryRequest *)choice; } GCC_RequestPDU::operator const GCC_RegistryDeleteEntryRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RegistryDeleteEntryRequest), PInvalidCast); #endif return *(GCC_RegistryDeleteEntryRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RequestPDU::operator GCC_RegistryMonitorEntryRequest &() const #else GCC_RequestPDU::operator GCC_RegistryMonitorEntryRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RegistryMonitorEntryRequest), PInvalidCast); #endif return *(GCC_RegistryMonitorEntryRequest *)choice; } GCC_RequestPDU::operator const GCC_RegistryMonitorEntryRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RegistryMonitorEntryRequest), PInvalidCast); #endif return *(GCC_RegistryMonitorEntryRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RequestPDU::operator GCC_RegistryAllocateHandleRequest &() const #else GCC_RequestPDU::operator GCC_RegistryAllocateHandleRequest &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RegistryAllocateHandleRequest), PInvalidCast); #endif return *(GCC_RegistryAllocateHandleRequest *)choice; } GCC_RequestPDU::operator const GCC_RegistryAllocateHandleRequest &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RegistryAllocateHandleRequest), PInvalidCast); #endif return *(GCC_RegistryAllocateHandleRequest *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RequestPDU::operator GCC_NonStandardPDU &() const #else GCC_RequestPDU::operator GCC_NonStandardPDU &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_NonStandardPDU), PInvalidCast); #endif return *(GCC_NonStandardPDU *)choice; } GCC_RequestPDU::operator const GCC_NonStandardPDU &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_NonStandardPDU), PInvalidCast); #endif return *(GCC_NonStandardPDU *)choice; } PBoolean GCC_RequestPDU::CreateObject() { switch (tag) { case e_conferenceJoinRequest : choice = new GCC_ConferenceJoinRequest(); return TRUE; case e_conferenceAddRequest : choice = new GCC_ConferenceAddRequest(); return TRUE; case e_conferenceLockRequest : choice = new GCC_ConferenceLockRequest(); return TRUE; case e_conferenceUnlockRequest : choice = new GCC_ConferenceUnlockRequest(); return TRUE; case e_conferenceTerminateRequest : choice = new GCC_ConferenceTerminateRequest(); return TRUE; case e_conferenceEjectUserRequest : choice = new GCC_ConferenceEjectUserRequest(); return TRUE; case e_conferenceTransferRequest : choice = new GCC_ConferenceTransferRequest(); return TRUE; case e_registryRegisterChannelRequest : choice = new GCC_RegistryRegisterChannelRequest(); return TRUE; case e_registryAssignTokenRequest : choice = new GCC_RegistryAssignTokenRequest(); return TRUE; case e_registrySetParameterRequest : choice = new GCC_RegistrySetParameterRequest(); return TRUE; case e_registryRetrieveEntryRequest : choice = new GCC_RegistryRetrieveEntryRequest(); return TRUE; case e_registryDeleteEntryRequest : choice = new GCC_RegistryDeleteEntryRequest(); return TRUE; case e_registryMonitorEntryRequest : choice = new GCC_RegistryMonitorEntryRequest(); return TRUE; case e_registryAllocateHandleRequest : choice = new GCC_RegistryAllocateHandleRequest(); return TRUE; case e_nonStandardRequest : choice = new GCC_NonStandardPDU(); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_RequestPDU::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RequestPDU::Class()), PInvalidCast); #endif return new GCC_RequestPDU(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_ResponsePDU[]={ {"conferenceJoinResponse",0} ,{"conferenceAddResponse",1} ,{"conferenceLockResponse",2} ,{"conferenceUnlockResponse",3} ,{"conferenceTerminateResponse",4} ,{"conferenceEjectUserResponse",5} ,{"conferenceTransferResponse",6} ,{"registryResponse",7} ,{"registryAllocateHandleResponse",8} ,{"functionNotSupportedResponse",9} ,{"nonStandardResponse",10} }; #endif // // ResponsePDU // GCC_ResponsePDU::GCC_ResponsePDU(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 11, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_ResponsePDU,11 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ResponsePDU::operator GCC_ConferenceJoinResponse &() const #else GCC_ResponsePDU::operator GCC_ConferenceJoinResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceJoinResponse), PInvalidCast); #endif return *(GCC_ConferenceJoinResponse *)choice; } GCC_ResponsePDU::operator const GCC_ConferenceJoinResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceJoinResponse), PInvalidCast); #endif return *(GCC_ConferenceJoinResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ResponsePDU::operator GCC_ConferenceAddResponse &() const #else GCC_ResponsePDU::operator GCC_ConferenceAddResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceAddResponse), PInvalidCast); #endif return *(GCC_ConferenceAddResponse *)choice; } GCC_ResponsePDU::operator const GCC_ConferenceAddResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceAddResponse), PInvalidCast); #endif return *(GCC_ConferenceAddResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ResponsePDU::operator GCC_ConferenceLockResponse &() const #else GCC_ResponsePDU::operator GCC_ConferenceLockResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceLockResponse), PInvalidCast); #endif return *(GCC_ConferenceLockResponse *)choice; } GCC_ResponsePDU::operator const GCC_ConferenceLockResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceLockResponse), PInvalidCast); #endif return *(GCC_ConferenceLockResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ResponsePDU::operator GCC_ConferenceUnlockResponse &() const #else GCC_ResponsePDU::operator GCC_ConferenceUnlockResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceUnlockResponse), PInvalidCast); #endif return *(GCC_ConferenceUnlockResponse *)choice; } GCC_ResponsePDU::operator const GCC_ConferenceUnlockResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceUnlockResponse), PInvalidCast); #endif return *(GCC_ConferenceUnlockResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ResponsePDU::operator GCC_ConferenceTerminateResponse &() const #else GCC_ResponsePDU::operator GCC_ConferenceTerminateResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceTerminateResponse), PInvalidCast); #endif return *(GCC_ConferenceTerminateResponse *)choice; } GCC_ResponsePDU::operator const GCC_ConferenceTerminateResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceTerminateResponse), PInvalidCast); #endif return *(GCC_ConferenceTerminateResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ResponsePDU::operator GCC_ConferenceEjectUserResponse &() const #else GCC_ResponsePDU::operator GCC_ConferenceEjectUserResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceEjectUserResponse), PInvalidCast); #endif return *(GCC_ConferenceEjectUserResponse *)choice; } GCC_ResponsePDU::operator const GCC_ConferenceEjectUserResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceEjectUserResponse), PInvalidCast); #endif return *(GCC_ConferenceEjectUserResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ResponsePDU::operator GCC_ConferenceTransferResponse &() const #else GCC_ResponsePDU::operator GCC_ConferenceTransferResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceTransferResponse), PInvalidCast); #endif return *(GCC_ConferenceTransferResponse *)choice; } GCC_ResponsePDU::operator const GCC_ConferenceTransferResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceTransferResponse), PInvalidCast); #endif return *(GCC_ConferenceTransferResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ResponsePDU::operator GCC_RegistryResponse &() const #else GCC_ResponsePDU::operator GCC_RegistryResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RegistryResponse), PInvalidCast); #endif return *(GCC_RegistryResponse *)choice; } GCC_ResponsePDU::operator const GCC_RegistryResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RegistryResponse), PInvalidCast); #endif return *(GCC_RegistryResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ResponsePDU::operator GCC_RegistryAllocateHandleResponse &() const #else GCC_ResponsePDU::operator GCC_RegistryAllocateHandleResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RegistryAllocateHandleResponse), PInvalidCast); #endif return *(GCC_RegistryAllocateHandleResponse *)choice; } GCC_ResponsePDU::operator const GCC_RegistryAllocateHandleResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RegistryAllocateHandleResponse), PInvalidCast); #endif return *(GCC_RegistryAllocateHandleResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ResponsePDU::operator GCC_FunctionNotSupportedResponse &() const #else GCC_ResponsePDU::operator GCC_FunctionNotSupportedResponse &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_FunctionNotSupportedResponse), PInvalidCast); #endif return *(GCC_FunctionNotSupportedResponse *)choice; } GCC_ResponsePDU::operator const GCC_FunctionNotSupportedResponse &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_FunctionNotSupportedResponse), PInvalidCast); #endif return *(GCC_FunctionNotSupportedResponse *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_ResponsePDU::operator GCC_NonStandardPDU &() const #else GCC_ResponsePDU::operator GCC_NonStandardPDU &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_NonStandardPDU), PInvalidCast); #endif return *(GCC_NonStandardPDU *)choice; } GCC_ResponsePDU::operator const GCC_NonStandardPDU &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_NonStandardPDU), PInvalidCast); #endif return *(GCC_NonStandardPDU *)choice; } PBoolean GCC_ResponsePDU::CreateObject() { switch (tag) { case e_conferenceJoinResponse : choice = new GCC_ConferenceJoinResponse(); return TRUE; case e_conferenceAddResponse : choice = new GCC_ConferenceAddResponse(); return TRUE; case e_conferenceLockResponse : choice = new GCC_ConferenceLockResponse(); return TRUE; case e_conferenceUnlockResponse : choice = new GCC_ConferenceUnlockResponse(); return TRUE; case e_conferenceTerminateResponse : choice = new GCC_ConferenceTerminateResponse(); return TRUE; case e_conferenceEjectUserResponse : choice = new GCC_ConferenceEjectUserResponse(); return TRUE; case e_conferenceTransferResponse : choice = new GCC_ConferenceTransferResponse(); return TRUE; case e_registryResponse : choice = new GCC_RegistryResponse(); return TRUE; case e_registryAllocateHandleResponse : choice = new GCC_RegistryAllocateHandleResponse(); return TRUE; case e_functionNotSupportedResponse : choice = new GCC_FunctionNotSupportedResponse(); return TRUE; case e_nonStandardResponse : choice = new GCC_NonStandardPDU(); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_ResponsePDU::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ResponsePDU::Class()), PInvalidCast); #endif return new GCC_ResponsePDU(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_IndicationPDU[]={ {"userIDIndication",0} ,{"conferenceLockIndication",1} ,{"conferenceUnlockIndication",2} ,{"conferenceTerminateIndication",3} ,{"conferenceEjectUserIndication",4} ,{"conferenceTransferIndication",5} ,{"rosterUpdateIndication",6} ,{"applicationInvokeIndication",7} ,{"registryMonitorEntryIndication",8} ,{"conductorAssignIndication",9} ,{"conductorReleaseIndication",10} ,{"conductorPermissionAskIndication",11} ,{"conductorPermissionGrantIndication",12} ,{"conferenceTimeRemainingIndication",13} ,{"conferenceTimeInquireIndication",14} ,{"conferenceTimeExtendIndication",15} ,{"conferenceAssistanceIndication",16} ,{"textMessageIndication",17} ,{"nonStandardIndication",18} }; #endif // // IndicationPDU // GCC_IndicationPDU::GCC_IndicationPDU(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 19, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_IndicationPDU,19 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_IndicationPDU::operator GCC_UserIDIndication &() const #else GCC_IndicationPDU::operator GCC_UserIDIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_UserIDIndication), PInvalidCast); #endif return *(GCC_UserIDIndication *)choice; } GCC_IndicationPDU::operator const GCC_UserIDIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_UserIDIndication), PInvalidCast); #endif return *(GCC_UserIDIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_IndicationPDU::operator GCC_ConferenceLockIndication &() const #else GCC_IndicationPDU::operator GCC_ConferenceLockIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceLockIndication), PInvalidCast); #endif return *(GCC_ConferenceLockIndication *)choice; } GCC_IndicationPDU::operator const GCC_ConferenceLockIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceLockIndication), PInvalidCast); #endif return *(GCC_ConferenceLockIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_IndicationPDU::operator GCC_ConferenceUnlockIndication &() const #else GCC_IndicationPDU::operator GCC_ConferenceUnlockIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceUnlockIndication), PInvalidCast); #endif return *(GCC_ConferenceUnlockIndication *)choice; } GCC_IndicationPDU::operator const GCC_ConferenceUnlockIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceUnlockIndication), PInvalidCast); #endif return *(GCC_ConferenceUnlockIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_IndicationPDU::operator GCC_ConferenceTerminateIndication &() const #else GCC_IndicationPDU::operator GCC_ConferenceTerminateIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceTerminateIndication), PInvalidCast); #endif return *(GCC_ConferenceTerminateIndication *)choice; } GCC_IndicationPDU::operator const GCC_ConferenceTerminateIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceTerminateIndication), PInvalidCast); #endif return *(GCC_ConferenceTerminateIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_IndicationPDU::operator GCC_ConferenceEjectUserIndication &() const #else GCC_IndicationPDU::operator GCC_ConferenceEjectUserIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceEjectUserIndication), PInvalidCast); #endif return *(GCC_ConferenceEjectUserIndication *)choice; } GCC_IndicationPDU::operator const GCC_ConferenceEjectUserIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceEjectUserIndication), PInvalidCast); #endif return *(GCC_ConferenceEjectUserIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_IndicationPDU::operator GCC_ConferenceTransferIndication &() const #else GCC_IndicationPDU::operator GCC_ConferenceTransferIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceTransferIndication), PInvalidCast); #endif return *(GCC_ConferenceTransferIndication *)choice; } GCC_IndicationPDU::operator const GCC_ConferenceTransferIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceTransferIndication), PInvalidCast); #endif return *(GCC_ConferenceTransferIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_IndicationPDU::operator GCC_RosterUpdateIndication &() const #else GCC_IndicationPDU::operator GCC_RosterUpdateIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RosterUpdateIndication), PInvalidCast); #endif return *(GCC_RosterUpdateIndication *)choice; } GCC_IndicationPDU::operator const GCC_RosterUpdateIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RosterUpdateIndication), PInvalidCast); #endif return *(GCC_RosterUpdateIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_IndicationPDU::operator GCC_ApplicationInvokeIndication &() const #else GCC_IndicationPDU::operator GCC_ApplicationInvokeIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ApplicationInvokeIndication), PInvalidCast); #endif return *(GCC_ApplicationInvokeIndication *)choice; } GCC_IndicationPDU::operator const GCC_ApplicationInvokeIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ApplicationInvokeIndication), PInvalidCast); #endif return *(GCC_ApplicationInvokeIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_IndicationPDU::operator GCC_RegistryMonitorEntryIndication &() const #else GCC_IndicationPDU::operator GCC_RegistryMonitorEntryIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RegistryMonitorEntryIndication), PInvalidCast); #endif return *(GCC_RegistryMonitorEntryIndication *)choice; } GCC_IndicationPDU::operator const GCC_RegistryMonitorEntryIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RegistryMonitorEntryIndication), PInvalidCast); #endif return *(GCC_RegistryMonitorEntryIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_IndicationPDU::operator GCC_ConductorAssignIndication &() const #else GCC_IndicationPDU::operator GCC_ConductorAssignIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConductorAssignIndication), PInvalidCast); #endif return *(GCC_ConductorAssignIndication *)choice; } GCC_IndicationPDU::operator const GCC_ConductorAssignIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConductorAssignIndication), PInvalidCast); #endif return *(GCC_ConductorAssignIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_IndicationPDU::operator GCC_ConductorReleaseIndication &() const #else GCC_IndicationPDU::operator GCC_ConductorReleaseIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConductorReleaseIndication), PInvalidCast); #endif return *(GCC_ConductorReleaseIndication *)choice; } GCC_IndicationPDU::operator const GCC_ConductorReleaseIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConductorReleaseIndication), PInvalidCast); #endif return *(GCC_ConductorReleaseIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_IndicationPDU::operator GCC_ConductorPermissionAskIndication &() const #else GCC_IndicationPDU::operator GCC_ConductorPermissionAskIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConductorPermissionAskIndication), PInvalidCast); #endif return *(GCC_ConductorPermissionAskIndication *)choice; } GCC_IndicationPDU::operator const GCC_ConductorPermissionAskIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConductorPermissionAskIndication), PInvalidCast); #endif return *(GCC_ConductorPermissionAskIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_IndicationPDU::operator GCC_ConductorPermissionGrantIndication &() const #else GCC_IndicationPDU::operator GCC_ConductorPermissionGrantIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConductorPermissionGrantIndication), PInvalidCast); #endif return *(GCC_ConductorPermissionGrantIndication *)choice; } GCC_IndicationPDU::operator const GCC_ConductorPermissionGrantIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConductorPermissionGrantIndication), PInvalidCast); #endif return *(GCC_ConductorPermissionGrantIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_IndicationPDU::operator GCC_ConferenceTimeRemainingIndication &() const #else GCC_IndicationPDU::operator GCC_ConferenceTimeRemainingIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceTimeRemainingIndication), PInvalidCast); #endif return *(GCC_ConferenceTimeRemainingIndication *)choice; } GCC_IndicationPDU::operator const GCC_ConferenceTimeRemainingIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceTimeRemainingIndication), PInvalidCast); #endif return *(GCC_ConferenceTimeRemainingIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_IndicationPDU::operator GCC_ConferenceTimeInquireIndication &() const #else GCC_IndicationPDU::operator GCC_ConferenceTimeInquireIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceTimeInquireIndication), PInvalidCast); #endif return *(GCC_ConferenceTimeInquireIndication *)choice; } GCC_IndicationPDU::operator const GCC_ConferenceTimeInquireIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceTimeInquireIndication), PInvalidCast); #endif return *(GCC_ConferenceTimeInquireIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_IndicationPDU::operator GCC_ConferenceTimeExtendIndication &() const #else GCC_IndicationPDU::operator GCC_ConferenceTimeExtendIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceTimeExtendIndication), PInvalidCast); #endif return *(GCC_ConferenceTimeExtendIndication *)choice; } GCC_IndicationPDU::operator const GCC_ConferenceTimeExtendIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceTimeExtendIndication), PInvalidCast); #endif return *(GCC_ConferenceTimeExtendIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_IndicationPDU::operator GCC_ConferenceAssistanceIndication &() const #else GCC_IndicationPDU::operator GCC_ConferenceAssistanceIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceAssistanceIndication), PInvalidCast); #endif return *(GCC_ConferenceAssistanceIndication *)choice; } GCC_IndicationPDU::operator const GCC_ConferenceAssistanceIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ConferenceAssistanceIndication), PInvalidCast); #endif return *(GCC_ConferenceAssistanceIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_IndicationPDU::operator GCC_TextMessageIndication &() const #else GCC_IndicationPDU::operator GCC_TextMessageIndication &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_TextMessageIndication), PInvalidCast); #endif return *(GCC_TextMessageIndication *)choice; } GCC_IndicationPDU::operator const GCC_TextMessageIndication &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_TextMessageIndication), PInvalidCast); #endif return *(GCC_TextMessageIndication *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_IndicationPDU::operator GCC_NonStandardPDU &() const #else GCC_IndicationPDU::operator GCC_NonStandardPDU &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_NonStandardPDU), PInvalidCast); #endif return *(GCC_NonStandardPDU *)choice; } GCC_IndicationPDU::operator const GCC_NonStandardPDU &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_NonStandardPDU), PInvalidCast); #endif return *(GCC_NonStandardPDU *)choice; } PBoolean GCC_IndicationPDU::CreateObject() { switch (tag) { case e_userIDIndication : choice = new GCC_UserIDIndication(); return TRUE; case e_conferenceLockIndication : choice = new GCC_ConferenceLockIndication(); return TRUE; case e_conferenceUnlockIndication : choice = new GCC_ConferenceUnlockIndication(); return TRUE; case e_conferenceTerminateIndication : choice = new GCC_ConferenceTerminateIndication(); return TRUE; case e_conferenceEjectUserIndication : choice = new GCC_ConferenceEjectUserIndication(); return TRUE; case e_conferenceTransferIndication : choice = new GCC_ConferenceTransferIndication(); return TRUE; case e_rosterUpdateIndication : choice = new GCC_RosterUpdateIndication(); return TRUE; case e_applicationInvokeIndication : choice = new GCC_ApplicationInvokeIndication(); return TRUE; case e_registryMonitorEntryIndication : choice = new GCC_RegistryMonitorEntryIndication(); return TRUE; case e_conductorAssignIndication : choice = new GCC_ConductorAssignIndication(); return TRUE; case e_conductorReleaseIndication : choice = new GCC_ConductorReleaseIndication(); return TRUE; case e_conductorPermissionAskIndication : choice = new GCC_ConductorPermissionAskIndication(); return TRUE; case e_conductorPermissionGrantIndication : choice = new GCC_ConductorPermissionGrantIndication(); return TRUE; case e_conferenceTimeRemainingIndication : choice = new GCC_ConferenceTimeRemainingIndication(); return TRUE; case e_conferenceTimeInquireIndication : choice = new GCC_ConferenceTimeInquireIndication(); return TRUE; case e_conferenceTimeExtendIndication : choice = new GCC_ConferenceTimeExtendIndication(); return TRUE; case e_conferenceAssistanceIndication : choice = new GCC_ConferenceAssistanceIndication(); return TRUE; case e_textMessageIndication : choice = new GCC_TextMessageIndication(); return TRUE; case e_nonStandardIndication : choice = new GCC_NonStandardPDU(); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_IndicationPDU::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_IndicationPDU::Class()), PInvalidCast); #endif return new GCC_IndicationPDU(*this); } // // UserData_subtype // GCC_UserData_subtype::GCC_UserData_subtype(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { } #ifndef PASN_NOPRINTON void GCC_UserData_subtype::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+6) << "key = " << setprecision(indent) << m_key << '\n'; if (HasOptionalField(e_value)) strm << setw(indent+8) << "value = " << setprecision(indent) << m_value << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_UserData_subtype::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_UserData_subtype), PInvalidCast); #endif const GCC_UserData_subtype & other = (const GCC_UserData_subtype &)obj; Comparison result; if ((result = m_key.Compare(other.m_key)) != EqualTo) return result; if ((result = m_value.Compare(other.m_value)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_UserData_subtype::GetDataLength() const { PINDEX length = 0; length += m_key.GetObjectLength(); if (HasOptionalField(e_value)) length += m_value.GetObjectLength(); return length; } PBoolean GCC_UserData_subtype::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_key.Decode(strm)) return FALSE; if (HasOptionalField(e_value) && !m_value.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_UserData_subtype::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_key.Encode(strm); if (HasOptionalField(e_value)) m_value.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_UserData_subtype::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_UserData_subtype::Class()), PInvalidCast); #endif return new GCC_UserData_subtype(*this); } // // ArrayOf_ChallengeItem // GCC_ArrayOf_ChallengeItem::GCC_ArrayOf_ChallengeItem(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * GCC_ArrayOf_ChallengeItem::CreateObject() const { return new GCC_ChallengeItem; } GCC_ChallengeItem & GCC_ArrayOf_ChallengeItem::operator[](PINDEX i) const { return (GCC_ChallengeItem &)array[i]; } PObject * GCC_ArrayOf_ChallengeItem::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ArrayOf_ChallengeItem::Class()), PInvalidCast); #endif return new GCC_ArrayOf_ChallengeItem(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_NetworkAddress_subtype[]={ {"aggregatedChannel",0} ,{"transportConnection",1} ,{"nonStandard",2} }; #endif // // NetworkAddress_subtype // GCC_NetworkAddress_subtype::GCC_NetworkAddress_subtype(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_NetworkAddress_subtype,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_NetworkAddress_subtype::operator GCC_NetworkAddress_subtype_aggregatedChannel &() const #else GCC_NetworkAddress_subtype::operator GCC_NetworkAddress_subtype_aggregatedChannel &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_NetworkAddress_subtype_aggregatedChannel), PInvalidCast); #endif return *(GCC_NetworkAddress_subtype_aggregatedChannel *)choice; } GCC_NetworkAddress_subtype::operator const GCC_NetworkAddress_subtype_aggregatedChannel &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_NetworkAddress_subtype_aggregatedChannel), PInvalidCast); #endif return *(GCC_NetworkAddress_subtype_aggregatedChannel *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_NetworkAddress_subtype::operator GCC_NetworkAddress_subtype_transportConnection &() const #else GCC_NetworkAddress_subtype::operator GCC_NetworkAddress_subtype_transportConnection &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_NetworkAddress_subtype_transportConnection), PInvalidCast); #endif return *(GCC_NetworkAddress_subtype_transportConnection *)choice; } GCC_NetworkAddress_subtype::operator const GCC_NetworkAddress_subtype_transportConnection &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_NetworkAddress_subtype_transportConnection), PInvalidCast); #endif return *(GCC_NetworkAddress_subtype_transportConnection *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_NetworkAddress_subtype::operator GCC_NonStandardParameter &() const #else GCC_NetworkAddress_subtype::operator GCC_NonStandardParameter &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_NonStandardParameter), PInvalidCast); #endif return *(GCC_NonStandardParameter *)choice; } GCC_NetworkAddress_subtype::operator const GCC_NonStandardParameter &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_NonStandardParameter), PInvalidCast); #endif return *(GCC_NonStandardParameter *)choice; } PBoolean GCC_NetworkAddress_subtype::CreateObject() { switch (tag) { case e_aggregatedChannel : choice = new GCC_NetworkAddress_subtype_aggregatedChannel(); return TRUE; case e_transportConnection : choice = new GCC_NetworkAddress_subtype_transportConnection(); return TRUE; case e_nonStandard : choice = new GCC_NonStandardParameter(); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_NetworkAddress_subtype::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_NetworkAddress_subtype::Class()), PInvalidCast); #endif return new GCC_NetworkAddress_subtype(*this); } // // ArrayOf_TextString // GCC_ArrayOf_TextString::GCC_ArrayOf_TextString(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * GCC_ArrayOf_TextString::CreateObject() const { return new GCC_TextString; } GCC_TextString & GCC_ArrayOf_TextString::operator[](PINDEX i) const { return (GCC_TextString &)array[i]; } PObject * GCC_ArrayOf_TextString::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ArrayOf_TextString::Class()), PInvalidCast); #endif return new GCC_ArrayOf_TextString(*this); } // // ApplicationRecord_nonCollapsingCapabilities // GCC_ApplicationRecord_nonCollapsingCapabilities::GCC_ApplicationRecord_nonCollapsingCapabilities(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * GCC_ApplicationRecord_nonCollapsingCapabilities::CreateObject() const { return new GCC_ApplicationRecord_nonCollapsingCapabilities_subtype; } GCC_ApplicationRecord_nonCollapsingCapabilities_subtype & GCC_ApplicationRecord_nonCollapsingCapabilities::operator[](PINDEX i) const { return (GCC_ApplicationRecord_nonCollapsingCapabilities_subtype &)array[i]; } PObject * GCC_ApplicationRecord_nonCollapsingCapabilities::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ApplicationRecord_nonCollapsingCapabilities::Class()), PInvalidCast); #endif return new GCC_ApplicationRecord_nonCollapsingCapabilities(*this); } // // ApplicationInvokeSpecifier_expectedCapabilitySet // GCC_ApplicationInvokeSpecifier_expectedCapabilitySet::GCC_ApplicationInvokeSpecifier_expectedCapabilitySet(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * GCC_ApplicationInvokeSpecifier_expectedCapabilitySet::CreateObject() const { return new GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype; } GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype & GCC_ApplicationInvokeSpecifier_expectedCapabilitySet::operator[](PINDEX i) const { return (GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype &)array[i]; } PObject * GCC_ApplicationInvokeSpecifier_expectedCapabilitySet::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ApplicationInvokeSpecifier_expectedCapabilitySet::Class()), PInvalidCast); #endif return new GCC_ApplicationInvokeSpecifier_expectedCapabilitySet(*this); } // // RegistryEntryOwner_owned // GCC_RegistryEntryOwner_owned::GCC_RegistryEntryOwner_owned(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void GCC_RegistryEntryOwner_owned::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "nodeID = " << setprecision(indent) << m_nodeID << '\n'; strm << setw(indent+11) << "entityID = " << setprecision(indent) << m_entityID << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_RegistryEntryOwner_owned::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_RegistryEntryOwner_owned), PInvalidCast); #endif const GCC_RegistryEntryOwner_owned & other = (const GCC_RegistryEntryOwner_owned &)obj; Comparison result; if ((result = m_nodeID.Compare(other.m_nodeID)) != EqualTo) return result; if ((result = m_entityID.Compare(other.m_entityID)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_RegistryEntryOwner_owned::GetDataLength() const { PINDEX length = 0; length += m_nodeID.GetObjectLength(); length += m_entityID.GetObjectLength(); return length; } PBoolean GCC_RegistryEntryOwner_owned::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nodeID.Decode(strm)) return FALSE; if (!m_entityID.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_RegistryEntryOwner_owned::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nodeID.Encode(strm); m_entityID.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_RegistryEntryOwner_owned::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RegistryEntryOwner_owned::Class()), PInvalidCast); #endif return new GCC_RegistryEntryOwner_owned(*this); } // // ArrayOf_Privilege // GCC_ArrayOf_Privilege::GCC_ArrayOf_Privilege(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * GCC_ArrayOf_Privilege::CreateObject() const { return new GCC_Privilege; } GCC_Privilege & GCC_ArrayOf_Privilege::operator[](PINDEX i) const { return (GCC_Privilege &)array[i]; } PObject * GCC_ArrayOf_Privilege::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ArrayOf_Privilege::Class()), PInvalidCast); #endif return new GCC_ArrayOf_Privilege(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_ConferenceCreateResponse_result[]={ {"success",0} ,{"userRejected",1} ,{"resourcesNotAvailable",2} ,{"rejectedForSymmetryBreaking",3} ,{"lockedConferenceNotSupported",4} }; #endif // // ConferenceCreateResponse_result // GCC_ConferenceCreateResponse_result::GCC_ConferenceCreateResponse_result(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 4, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_ConferenceCreateResponse_result,5 #endif ) { } GCC_ConferenceCreateResponse_result & GCC_ConferenceCreateResponse_result::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_ConferenceCreateResponse_result::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceCreateResponse_result::Class()), PInvalidCast); #endif return new GCC_ConferenceCreateResponse_result(*this); } // // ArrayOf_ConferenceDescriptor // GCC_ArrayOf_ConferenceDescriptor::GCC_ArrayOf_ConferenceDescriptor(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * GCC_ArrayOf_ConferenceDescriptor::CreateObject() const { return new GCC_ConferenceDescriptor; } GCC_ConferenceDescriptor & GCC_ArrayOf_ConferenceDescriptor::operator[](PINDEX i) const { return (GCC_ConferenceDescriptor &)array[i]; } PObject * GCC_ArrayOf_ConferenceDescriptor::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ArrayOf_ConferenceDescriptor::Class()), PInvalidCast); #endif return new GCC_ArrayOf_ConferenceDescriptor(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_ConferenceQueryResponse_result[]={ {"success",0} ,{"userRejected",1} }; #endif // // ConferenceQueryResponse_result // GCC_ConferenceQueryResponse_result::GCC_ConferenceQueryResponse_result(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_ConferenceQueryResponse_result,2 #endif ) { } GCC_ConferenceQueryResponse_result & GCC_ConferenceQueryResponse_result::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_ConferenceQueryResponse_result::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceQueryResponse_result::Class()), PInvalidCast); #endif return new GCC_ConferenceQueryResponse_result(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_ConferenceJoinResponse_result[]={ {"success",0} ,{"userRejected",1} ,{"invalidConference",2} ,{"invalidPassword",3} ,{"invalidConvenerPassword",4} ,{"challengeResponseRequired",5} ,{"invalidChallengeResponse",6} }; #endif // // ConferenceJoinResponse_result // GCC_ConferenceJoinResponse_result::GCC_ConferenceJoinResponse_result(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 6, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_ConferenceJoinResponse_result,7 #endif ) { } GCC_ConferenceJoinResponse_result & GCC_ConferenceJoinResponse_result::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_ConferenceJoinResponse_result::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceJoinResponse_result::Class()), PInvalidCast); #endif return new GCC_ConferenceJoinResponse_result(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_ConferenceInviteResponse_result[]={ {"success",0} ,{"userRejected",1} }; #endif // // ConferenceInviteResponse_result // GCC_ConferenceInviteResponse_result::GCC_ConferenceInviteResponse_result(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_ConferenceInviteResponse_result,2 #endif ) { } GCC_ConferenceInviteResponse_result & GCC_ConferenceInviteResponse_result::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_ConferenceInviteResponse_result::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceInviteResponse_result::Class()), PInvalidCast); #endif return new GCC_ConferenceInviteResponse_result(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_ConferenceAddResponse_result[]={ {"success",0} ,{"invalidRequester",1} ,{"invalidNetworkType",2} ,{"invalidNetworkAddress",3} ,{"addedNodeBusy",4} ,{"networkBusy",5} ,{"noPortsAvailable",6} ,{"connectionUnsuccessful",7} }; #endif // // ConferenceAddResponse_result // GCC_ConferenceAddResponse_result::GCC_ConferenceAddResponse_result(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 7, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_ConferenceAddResponse_result,8 #endif ) { } GCC_ConferenceAddResponse_result & GCC_ConferenceAddResponse_result::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_ConferenceAddResponse_result::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceAddResponse_result::Class()), PInvalidCast); #endif return new GCC_ConferenceAddResponse_result(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_ConferenceLockResponse_result[]={ {"success",0} ,{"invalidRequester",1} ,{"alreadyLocked",2} }; #endif // // ConferenceLockResponse_result // GCC_ConferenceLockResponse_result::GCC_ConferenceLockResponse_result(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_ConferenceLockResponse_result,3 #endif ) { } GCC_ConferenceLockResponse_result & GCC_ConferenceLockResponse_result::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_ConferenceLockResponse_result::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceLockResponse_result::Class()), PInvalidCast); #endif return new GCC_ConferenceLockResponse_result(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_ConferenceUnlockResponse_result[]={ {"success",0} ,{"invalidRequester",1} ,{"alreadyUnlocked",2} }; #endif // // ConferenceUnlockResponse_result // GCC_ConferenceUnlockResponse_result::GCC_ConferenceUnlockResponse_result(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_ConferenceUnlockResponse_result,3 #endif ) { } GCC_ConferenceUnlockResponse_result & GCC_ConferenceUnlockResponse_result::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_ConferenceUnlockResponse_result::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceUnlockResponse_result::Class()), PInvalidCast); #endif return new GCC_ConferenceUnlockResponse_result(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_ConferenceTerminateRequest_reason[]={ {"userInitiated",0} ,{"timedConferenceTermination",1} }; #endif // // ConferenceTerminateRequest_reason // GCC_ConferenceTerminateRequest_reason::GCC_ConferenceTerminateRequest_reason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_ConferenceTerminateRequest_reason,2 #endif ) { } GCC_ConferenceTerminateRequest_reason & GCC_ConferenceTerminateRequest_reason::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_ConferenceTerminateRequest_reason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceTerminateRequest_reason::Class()), PInvalidCast); #endif return new GCC_ConferenceTerminateRequest_reason(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_ConferenceTerminateResponse_result[]={ {"success",0} ,{"invalidRequester",1} }; #endif // // ConferenceTerminateResponse_result // GCC_ConferenceTerminateResponse_result::GCC_ConferenceTerminateResponse_result(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_ConferenceTerminateResponse_result,2 #endif ) { } GCC_ConferenceTerminateResponse_result & GCC_ConferenceTerminateResponse_result::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_ConferenceTerminateResponse_result::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceTerminateResponse_result::Class()), PInvalidCast); #endif return new GCC_ConferenceTerminateResponse_result(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_ConferenceTerminateIndication_reason[]={ {"userInitiated",0} ,{"timedConferenceTermination",1} }; #endif // // ConferenceTerminateIndication_reason // GCC_ConferenceTerminateIndication_reason::GCC_ConferenceTerminateIndication_reason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_ConferenceTerminateIndication_reason,2 #endif ) { } GCC_ConferenceTerminateIndication_reason & GCC_ConferenceTerminateIndication_reason::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_ConferenceTerminateIndication_reason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceTerminateIndication_reason::Class()), PInvalidCast); #endif return new GCC_ConferenceTerminateIndication_reason(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_ConferenceEjectUserRequest_reason[]={ {"userInitiated",0} }; #endif // // ConferenceEjectUserRequest_reason // GCC_ConferenceEjectUserRequest_reason::GCC_ConferenceEjectUserRequest_reason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 0, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_ConferenceEjectUserRequest_reason,1 #endif ) { } GCC_ConferenceEjectUserRequest_reason & GCC_ConferenceEjectUserRequest_reason::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_ConferenceEjectUserRequest_reason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceEjectUserRequest_reason::Class()), PInvalidCast); #endif return new GCC_ConferenceEjectUserRequest_reason(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_ConferenceEjectUserResponse_result[]={ {"success",0} ,{"invalidRequester",1} ,{"invalidNode",2} }; #endif // // ConferenceEjectUserResponse_result // GCC_ConferenceEjectUserResponse_result::GCC_ConferenceEjectUserResponse_result(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_ConferenceEjectUserResponse_result,3 #endif ) { } GCC_ConferenceEjectUserResponse_result & GCC_ConferenceEjectUserResponse_result::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_ConferenceEjectUserResponse_result::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceEjectUserResponse_result::Class()), PInvalidCast); #endif return new GCC_ConferenceEjectUserResponse_result(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_ConferenceEjectUserIndication_reason[]={ {"userInitiated",0} ,{"higherNodeDisconnected",1} ,{"higherNodeEjected",2} }; #endif // // ConferenceEjectUserIndication_reason // GCC_ConferenceEjectUserIndication_reason::GCC_ConferenceEjectUserIndication_reason(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_ConferenceEjectUserIndication_reason,3 #endif ) { } GCC_ConferenceEjectUserIndication_reason & GCC_ConferenceEjectUserIndication_reason::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_ConferenceEjectUserIndication_reason::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceEjectUserIndication_reason::Class()), PInvalidCast); #endif return new GCC_ConferenceEjectUserIndication_reason(*this); } // // ArrayOf_UserID // GCC_ArrayOf_UserID::GCC_ArrayOf_UserID(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * GCC_ArrayOf_UserID::CreateObject() const { return new GCC_UserID; } GCC_UserID & GCC_ArrayOf_UserID::operator[](PINDEX i) const { return (GCC_UserID &)array[i]; } PObject * GCC_ArrayOf_UserID::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ArrayOf_UserID::Class()), PInvalidCast); #endif return new GCC_ArrayOf_UserID(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_ConferenceTransferResponse_result[]={ {"success",0} ,{"invalidRequester",1} }; #endif // // ConferenceTransferResponse_result // GCC_ConferenceTransferResponse_result::GCC_ConferenceTransferResponse_result(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_ConferenceTransferResponse_result,2 #endif ) { } GCC_ConferenceTransferResponse_result & GCC_ConferenceTransferResponse_result::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_ConferenceTransferResponse_result::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceTransferResponse_result::Class()), PInvalidCast); #endif return new GCC_ConferenceTransferResponse_result(*this); } // // RosterUpdateIndication_applicationInformation // GCC_RosterUpdateIndication_applicationInformation::GCC_RosterUpdateIndication_applicationInformation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } PASN_Object * GCC_RosterUpdateIndication_applicationInformation::CreateObject() const { return new GCC_RosterUpdateIndication_applicationInformation_subtype; } GCC_RosterUpdateIndication_applicationInformation_subtype & GCC_RosterUpdateIndication_applicationInformation::operator[](PINDEX i) const { return (GCC_RosterUpdateIndication_applicationInformation_subtype &)array[i]; } PObject * GCC_RosterUpdateIndication_applicationInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RosterUpdateIndication_applicationInformation::Class()), PInvalidCast); #endif return new GCC_RosterUpdateIndication_applicationInformation(*this); } // // ArrayOf_ApplicationInvokeSpecifier // GCC_ArrayOf_ApplicationInvokeSpecifier::GCC_ArrayOf_ApplicationInvokeSpecifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * GCC_ArrayOf_ApplicationInvokeSpecifier::CreateObject() const { return new GCC_ApplicationInvokeSpecifier; } GCC_ApplicationInvokeSpecifier & GCC_ArrayOf_ApplicationInvokeSpecifier::operator[](PINDEX i) const { return (GCC_ApplicationInvokeSpecifier &)array[i]; } PObject * GCC_ArrayOf_ApplicationInvokeSpecifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ArrayOf_ApplicationInvokeSpecifier::Class()), PInvalidCast); #endif return new GCC_ArrayOf_ApplicationInvokeSpecifier(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_RegistryAllocateHandleResponse_result[]={ {"successful",0} ,{"noHandlesAvailable",1} }; #endif // // RegistryAllocateHandleResponse_result // GCC_RegistryAllocateHandleResponse_result::GCC_RegistryAllocateHandleResponse_result(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 1, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_RegistryAllocateHandleResponse_result,2 #endif ) { } GCC_RegistryAllocateHandleResponse_result & GCC_RegistryAllocateHandleResponse_result::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_RegistryAllocateHandleResponse_result::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RegistryAllocateHandleResponse_result::Class()), PInvalidCast); #endif return new GCC_RegistryAllocateHandleResponse_result(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_RegistryResponse_primitiveType[]={ {"registerChannel",0} ,{"assignToken",1} ,{"setParameter",2} ,{"retrieveEntry",3} ,{"deleteEntry",4} ,{"monitorEntry",5} }; #endif // // RegistryResponse_primitiveType // GCC_RegistryResponse_primitiveType::GCC_RegistryResponse_primitiveType(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 5, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_RegistryResponse_primitiveType,6 #endif ) { } GCC_RegistryResponse_primitiveType & GCC_RegistryResponse_primitiveType::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_RegistryResponse_primitiveType::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RegistryResponse_primitiveType::Class()), PInvalidCast); #endif return new GCC_RegistryResponse_primitiveType(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_RegistryResponse_result[]={ {"successful",0} ,{"belongsToOther",1} ,{"tooManyEntries",2} ,{"inconsistentType",3} ,{"entryNotFound",4} ,{"entryAlreadyExists",5} ,{"invalidRequester",6} }; #endif // // RegistryResponse_result // GCC_RegistryResponse_result::GCC_RegistryResponse_result(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Enumeration(tag, tagClass, 6, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_RegistryResponse_result,7 #endif ) { } GCC_RegistryResponse_result & GCC_RegistryResponse_result::operator=(unsigned v) { SetValue(v); return *this; } PObject * GCC_RegistryResponse_result::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RegistryResponse_result::Class()), PInvalidCast); #endif return new GCC_RegistryResponse_result(*this); } // // NetworkAddress_subtype_transportConnection // GCC_NetworkAddress_subtype_transportConnection::GCC_NetworkAddress_subtype_transportConnection(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { m_nsapAddress.SetConstraints(PASN_Object::FixedConstraint, 1, 20); } #ifndef PASN_NOPRINTON void GCC_NetworkAddress_subtype_transportConnection::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "nsapAddress = " << setprecision(indent) << m_nsapAddress << '\n'; if (HasOptionalField(e_transportSelector)) strm << setw(indent+20) << "transportSelector = " << setprecision(indent) << m_transportSelector << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_NetworkAddress_subtype_transportConnection::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_NetworkAddress_subtype_transportConnection), PInvalidCast); #endif const GCC_NetworkAddress_subtype_transportConnection & other = (const GCC_NetworkAddress_subtype_transportConnection &)obj; Comparison result; if ((result = m_nsapAddress.Compare(other.m_nsapAddress)) != EqualTo) return result; if ((result = m_transportSelector.Compare(other.m_transportSelector)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_NetworkAddress_subtype_transportConnection::GetDataLength() const { PINDEX length = 0; length += m_nsapAddress.GetObjectLength(); if (HasOptionalField(e_transportSelector)) length += m_transportSelector.GetObjectLength(); return length; } PBoolean GCC_NetworkAddress_subtype_transportConnection::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nsapAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_transportSelector) && !m_transportSelector.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_NetworkAddress_subtype_transportConnection::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nsapAddress.Encode(strm); if (HasOptionalField(e_transportSelector)) m_transportSelector.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_NetworkAddress_subtype_transportConnection::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_NetworkAddress_subtype_transportConnection::Class()), PInvalidCast); #endif return new GCC_NetworkAddress_subtype_transportConnection(*this); } // // ApplicationRecord_nonCollapsingCapabilities_subtype // GCC_ApplicationRecord_nonCollapsingCapabilities_subtype::GCC_ApplicationRecord_nonCollapsingCapabilities_subtype(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, FALSE, 0) { } #ifndef PASN_NOPRINTON void GCC_ApplicationRecord_nonCollapsingCapabilities_subtype::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "capabilityID = " << setprecision(indent) << m_capabilityID << '\n'; if (HasOptionalField(e_applicationData)) strm << setw(indent+18) << "applicationData = " << setprecision(indent) << m_applicationData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ApplicationRecord_nonCollapsingCapabilities_subtype::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ApplicationRecord_nonCollapsingCapabilities_subtype), PInvalidCast); #endif const GCC_ApplicationRecord_nonCollapsingCapabilities_subtype & other = (const GCC_ApplicationRecord_nonCollapsingCapabilities_subtype &)obj; Comparison result; if ((result = m_capabilityID.Compare(other.m_capabilityID)) != EqualTo) return result; if ((result = m_applicationData.Compare(other.m_applicationData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ApplicationRecord_nonCollapsingCapabilities_subtype::GetDataLength() const { PINDEX length = 0; length += m_capabilityID.GetObjectLength(); if (HasOptionalField(e_applicationData)) length += m_applicationData.GetObjectLength(); return length; } PBoolean GCC_ApplicationRecord_nonCollapsingCapabilities_subtype::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_capabilityID.Decode(strm)) return FALSE; if (HasOptionalField(e_applicationData) && !m_applicationData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ApplicationRecord_nonCollapsingCapabilities_subtype::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_capabilityID.Encode(strm); if (HasOptionalField(e_applicationData)) m_applicationData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ApplicationRecord_nonCollapsingCapabilities_subtype::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ApplicationRecord_nonCollapsingCapabilities_subtype::Class()), PInvalidCast); #endif return new GCC_ApplicationRecord_nonCollapsingCapabilities_subtype(*this); } // // ApplicationInvokeSpecifier_expectedCapabilitySet_subtype // GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype::GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "capabilityID = " << setprecision(indent) << m_capabilityID << '\n'; strm << setw(indent+18) << "capabilityClass = " << setprecision(indent) << m_capabilityClass << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype), PInvalidCast); #endif const GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype & other = (const GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype &)obj; Comparison result; if ((result = m_capabilityID.Compare(other.m_capabilityID)) != EqualTo) return result; if ((result = m_capabilityClass.Compare(other.m_capabilityClass)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype::GetDataLength() const { PINDEX length = 0; length += m_capabilityID.GetObjectLength(); length += m_capabilityClass.GetObjectLength(); return length; } PBoolean GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_capabilityID.Decode(strm)) return FALSE; if (!m_capabilityClass.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_capabilityID.Encode(strm); m_capabilityClass.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype::Class()), PInvalidCast); #endif return new GCC_ApplicationInvokeSpecifier_expectedCapabilitySet_subtype(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_RosterUpdateIndication_nodeInformation_nodeRecordList[]={ {"noChange",0} ,{"refresh",1} ,{"update",2} }; #endif // // RosterUpdateIndication_nodeInformation_nodeRecordList // GCC_RosterUpdateIndication_nodeInformation_nodeRecordList::GCC_RosterUpdateIndication_nodeInformation_nodeRecordList(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_RosterUpdateIndication_nodeInformation_nodeRecordList,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RosterUpdateIndication_nodeInformation_nodeRecordList::operator GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh &() const #else GCC_RosterUpdateIndication_nodeInformation_nodeRecordList::operator GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh), PInvalidCast); #endif return *(GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh *)choice; } GCC_RosterUpdateIndication_nodeInformation_nodeRecordList::operator const GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh), PInvalidCast); #endif return *(GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RosterUpdateIndication_nodeInformation_nodeRecordList::operator GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update &() const #else GCC_RosterUpdateIndication_nodeInformation_nodeRecordList::operator GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update), PInvalidCast); #endif return *(GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update *)choice; } GCC_RosterUpdateIndication_nodeInformation_nodeRecordList::operator const GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update), PInvalidCast); #endif return *(GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update *)choice; } PBoolean GCC_RosterUpdateIndication_nodeInformation_nodeRecordList::CreateObject() { switch (tag) { case e_noChange : choice = new PASN_Null(); return TRUE; case e_refresh : choice = new GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh(); return TRUE; case e_update : choice = new GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update(); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_RosterUpdateIndication_nodeInformation_nodeRecordList::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RosterUpdateIndication_nodeInformation_nodeRecordList::Class()), PInvalidCast); #endif return new GCC_RosterUpdateIndication_nodeInformation_nodeRecordList(*this); } // // NetworkAddress_subtype_aggregatedChannel_transferModes // GCC_NetworkAddress_subtype_aggregatedChannel_transferModes::GCC_NetworkAddress_subtype_aggregatedChannel_transferModes(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_NetworkAddress_subtype_aggregatedChannel_transferModes::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "speech = " << setprecision(indent) << m_speech << '\n'; strm << setw(indent+13) << "voice_band = " << setprecision(indent) << m_voice_band << '\n'; strm << setw(indent+14) << "digital_56k = " << setprecision(indent) << m_digital_56k << '\n'; strm << setw(indent+14) << "digital_64k = " << setprecision(indent) << m_digital_64k << '\n'; strm << setw(indent+15) << "digital_128k = " << setprecision(indent) << m_digital_128k << '\n'; strm << setw(indent+15) << "digital_192k = " << setprecision(indent) << m_digital_192k << '\n'; strm << setw(indent+15) << "digital_256k = " << setprecision(indent) << m_digital_256k << '\n'; strm << setw(indent+15) << "digital_320k = " << setprecision(indent) << m_digital_320k << '\n'; strm << setw(indent+15) << "digital_384k = " << setprecision(indent) << m_digital_384k << '\n'; strm << setw(indent+15) << "digital_512k = " << setprecision(indent) << m_digital_512k << '\n'; strm << setw(indent+15) << "digital_768k = " << setprecision(indent) << m_digital_768k << '\n'; strm << setw(indent+16) << "digital_1152k = " << setprecision(indent) << m_digital_1152k << '\n'; strm << setw(indent+16) << "digital_1472k = " << setprecision(indent) << m_digital_1472k << '\n'; strm << setw(indent+16) << "digital_1536k = " << setprecision(indent) << m_digital_1536k << '\n'; strm << setw(indent+16) << "digital_1920k = " << setprecision(indent) << m_digital_1920k << '\n'; strm << setw(indent+14) << "packet_mode = " << setprecision(indent) << m_packet_mode << '\n'; strm << setw(indent+13) << "frame_mode = " << setprecision(indent) << m_frame_mode << '\n'; strm << setw(indent+6) << "atm = " << setprecision(indent) << m_atm << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_NetworkAddress_subtype_aggregatedChannel_transferModes::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_NetworkAddress_subtype_aggregatedChannel_transferModes), PInvalidCast); #endif const GCC_NetworkAddress_subtype_aggregatedChannel_transferModes & other = (const GCC_NetworkAddress_subtype_aggregatedChannel_transferModes &)obj; Comparison result; if ((result = m_speech.Compare(other.m_speech)) != EqualTo) return result; if ((result = m_voice_band.Compare(other.m_voice_band)) != EqualTo) return result; if ((result = m_digital_56k.Compare(other.m_digital_56k)) != EqualTo) return result; if ((result = m_digital_64k.Compare(other.m_digital_64k)) != EqualTo) return result; if ((result = m_digital_128k.Compare(other.m_digital_128k)) != EqualTo) return result; if ((result = m_digital_192k.Compare(other.m_digital_192k)) != EqualTo) return result; if ((result = m_digital_256k.Compare(other.m_digital_256k)) != EqualTo) return result; if ((result = m_digital_320k.Compare(other.m_digital_320k)) != EqualTo) return result; if ((result = m_digital_384k.Compare(other.m_digital_384k)) != EqualTo) return result; if ((result = m_digital_512k.Compare(other.m_digital_512k)) != EqualTo) return result; if ((result = m_digital_768k.Compare(other.m_digital_768k)) != EqualTo) return result; if ((result = m_digital_1152k.Compare(other.m_digital_1152k)) != EqualTo) return result; if ((result = m_digital_1472k.Compare(other.m_digital_1472k)) != EqualTo) return result; if ((result = m_digital_1536k.Compare(other.m_digital_1536k)) != EqualTo) return result; if ((result = m_digital_1920k.Compare(other.m_digital_1920k)) != EqualTo) return result; if ((result = m_packet_mode.Compare(other.m_packet_mode)) != EqualTo) return result; if ((result = m_frame_mode.Compare(other.m_frame_mode)) != EqualTo) return result; if ((result = m_atm.Compare(other.m_atm)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_NetworkAddress_subtype_aggregatedChannel_transferModes::GetDataLength() const { PINDEX length = 0; length += m_speech.GetObjectLength(); length += m_voice_band.GetObjectLength(); length += m_digital_56k.GetObjectLength(); length += m_digital_64k.GetObjectLength(); length += m_digital_128k.GetObjectLength(); length += m_digital_192k.GetObjectLength(); length += m_digital_256k.GetObjectLength(); length += m_digital_320k.GetObjectLength(); length += m_digital_384k.GetObjectLength(); length += m_digital_512k.GetObjectLength(); length += m_digital_768k.GetObjectLength(); length += m_digital_1152k.GetObjectLength(); length += m_digital_1472k.GetObjectLength(); length += m_digital_1536k.GetObjectLength(); length += m_digital_1920k.GetObjectLength(); length += m_packet_mode.GetObjectLength(); length += m_frame_mode.GetObjectLength(); length += m_atm.GetObjectLength(); return length; } PBoolean GCC_NetworkAddress_subtype_aggregatedChannel_transferModes::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_speech.Decode(strm)) return FALSE; if (!m_voice_band.Decode(strm)) return FALSE; if (!m_digital_56k.Decode(strm)) return FALSE; if (!m_digital_64k.Decode(strm)) return FALSE; if (!m_digital_128k.Decode(strm)) return FALSE; if (!m_digital_192k.Decode(strm)) return FALSE; if (!m_digital_256k.Decode(strm)) return FALSE; if (!m_digital_320k.Decode(strm)) return FALSE; if (!m_digital_384k.Decode(strm)) return FALSE; if (!m_digital_512k.Decode(strm)) return FALSE; if (!m_digital_768k.Decode(strm)) return FALSE; if (!m_digital_1152k.Decode(strm)) return FALSE; if (!m_digital_1472k.Decode(strm)) return FALSE; if (!m_digital_1536k.Decode(strm)) return FALSE; if (!m_digital_1920k.Decode(strm)) return FALSE; if (!m_packet_mode.Decode(strm)) return FALSE; if (!m_frame_mode.Decode(strm)) return FALSE; if (!m_atm.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_NetworkAddress_subtype_aggregatedChannel_transferModes::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_speech.Encode(strm); m_voice_band.Encode(strm); m_digital_56k.Encode(strm); m_digital_64k.Encode(strm); m_digital_128k.Encode(strm); m_digital_192k.Encode(strm); m_digital_256k.Encode(strm); m_digital_320k.Encode(strm); m_digital_384k.Encode(strm); m_digital_512k.Encode(strm); m_digital_768k.Encode(strm); m_digital_1152k.Encode(strm); m_digital_1472k.Encode(strm); m_digital_1536k.Encode(strm); m_digital_1920k.Encode(strm); m_packet_mode.Encode(strm); m_frame_mode.Encode(strm); m_atm.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_NetworkAddress_subtype_aggregatedChannel_transferModes::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_NetworkAddress_subtype_aggregatedChannel_transferModes::Class()), PInvalidCast); #endif return new GCC_NetworkAddress_subtype_aggregatedChannel_transferModes(*this); } // // NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility // GCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::GCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "telephony3kHz = " << setprecision(indent) << m_telephony3kHz << '\n'; strm << setw(indent+16) << "telephony7kHz = " << setprecision(indent) << m_telephony7kHz << '\n'; strm << setw(indent+17) << "videotelephony = " << setprecision(indent) << m_videotelephony << '\n'; strm << setw(indent+18) << "videoconference = " << setprecision(indent) << m_videoconference << '\n'; strm << setw(indent+15) << "audiographic = " << setprecision(indent) << m_audiographic << '\n'; strm << setw(indent+14) << "audiovisual = " << setprecision(indent) << m_audiovisual << '\n'; strm << setw(indent+13) << "multimedia = " << setprecision(indent) << m_multimedia << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility), PInvalidCast); #endif const GCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility & other = (const GCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility &)obj; Comparison result; if ((result = m_telephony3kHz.Compare(other.m_telephony3kHz)) != EqualTo) return result; if ((result = m_telephony7kHz.Compare(other.m_telephony7kHz)) != EqualTo) return result; if ((result = m_videotelephony.Compare(other.m_videotelephony)) != EqualTo) return result; if ((result = m_videoconference.Compare(other.m_videoconference)) != EqualTo) return result; if ((result = m_audiographic.Compare(other.m_audiographic)) != EqualTo) return result; if ((result = m_audiovisual.Compare(other.m_audiovisual)) != EqualTo) return result; if ((result = m_multimedia.Compare(other.m_multimedia)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::GetDataLength() const { PINDEX length = 0; length += m_telephony3kHz.GetObjectLength(); length += m_telephony7kHz.GetObjectLength(); length += m_videotelephony.GetObjectLength(); length += m_videoconference.GetObjectLength(); length += m_audiographic.GetObjectLength(); length += m_audiovisual.GetObjectLength(); length += m_multimedia.GetObjectLength(); return length; } PBoolean GCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_telephony3kHz.Decode(strm)) return FALSE; if (!m_telephony7kHz.Decode(strm)) return FALSE; if (!m_videotelephony.Decode(strm)) return FALSE; if (!m_videoconference.Decode(strm)) return FALSE; if (!m_audiographic.Decode(strm)) return FALSE; if (!m_audiovisual.Decode(strm)) return FALSE; if (!m_multimedia.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_telephony3kHz.Encode(strm); m_telephony7kHz.Encode(strm); m_videotelephony.Encode(strm); m_videoconference.Encode(strm); m_audiographic.Encode(strm); m_audiovisual.Encode(strm); m_multimedia.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility::Class()), PInvalidCast); #endif return new GCC_NetworkAddress_subtype_aggregatedChannel_highLayerCompatibility(*this); } // // RosterUpdateIndication_nodeInformation_nodeRecordList_refresh // GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh::GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 65536); } PASN_Object * GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh::CreateObject() const { return new GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype; } GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype & GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh::operator[](PINDEX i) const { return (GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype &)array[i]; } PObject * GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh::Class()), PInvalidCast); #endif return new GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh(*this); } // // RosterUpdateIndication_nodeInformation_nodeRecordList_update // GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update::GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 65536); } PASN_Object * GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update::CreateObject() const { return new GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype; } GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype & GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update::operator[](PINDEX i) const { return (GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype &)array[i]; } PObject * GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update::Class()), PInvalidCast); #endif return new GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList[]={ {"noChange",0} ,{"refresh",1} ,{"update",2} }; #endif // // RosterUpdateIndication_applicationInformation_subtype_applicationRecordList // GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList::GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList::operator GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh &() const #else GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList::operator GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh), PInvalidCast); #endif return *(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh *)choice; } GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList::operator const GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh), PInvalidCast); #endif return *(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh *)choice; } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList::operator GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update &() const #else GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList::operator GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update), PInvalidCast); #endif return *(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update *)choice; } GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList::operator const GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update), PInvalidCast); #endif return *(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update *)choice; } PBoolean GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList::CreateObject() { switch (tag) { case e_noChange : choice = new PASN_Null(); return TRUE; case e_refresh : choice = new GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh(); return TRUE; case e_update : choice = new GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update(); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList::Class()), PInvalidCast); #endif return new GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList[]={ {"noChange",0} ,{"refresh",1} }; #endif // // RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList // GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList::GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 2, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList,2 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList::operator GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh &() const #else GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList::operator GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh), PInvalidCast); #endif return *(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh *)choice; } GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList::operator const GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh), PInvalidCast); #endif return *(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh *)choice; } PBoolean GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList::CreateObject() { switch (tag) { case e_noChange : choice = new PASN_Null(); return TRUE; case e_refresh : choice = new GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh(); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList::Class()), PInvalidCast); #endif return new GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList(*this); } // // RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh // GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh::GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } PASN_Object * GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh::CreateObject() const { return new GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype; } GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype & GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh::operator[](PINDEX i) const { return (GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype &)array[i]; } PObject * GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh::Class()), PInvalidCast); #endif return new GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh(*this); } // // RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update // GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update::GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { SetConstraints(PASN_Object::FixedConstraint, 1, 65536); } PASN_Object * GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update::CreateObject() const { return new GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype; } GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype & GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update::operator[](PINDEX i) const { return (GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype &)array[i]; } PObject * GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update::Class()), PInvalidCast); #endif return new GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update(*this); } // // RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh // GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh::GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Array(tag, tagClass) { } PASN_Object * GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh::CreateObject() const { return new GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype; } GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype & GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh::operator[](PINDEX i) const { return (GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype &)array[i]; } PObject * GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh::Class()), PInvalidCast); #endif return new GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate[]={ {"addRecord",0} ,{"replaceRecord",1} ,{"removeRecord",2} }; #endif // // RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate // GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate::GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate::operator GCC_NodeRecord &() const #else GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate::operator GCC_NodeRecord &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_NodeRecord), PInvalidCast); #endif return *(GCC_NodeRecord *)choice; } GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate::operator const GCC_NodeRecord &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_NodeRecord), PInvalidCast); #endif return *(GCC_NodeRecord *)choice; } PBoolean GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate::CreateObject() { switch (tag) { case e_addRecord : case e_replaceRecord : choice = new GCC_NodeRecord(); return TRUE; case e_removeRecord : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate::Class()), PInvalidCast); #endif return new GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype_nodeUpdate(*this); } // // RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype // GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype::GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_numberOfEntities.SetConstraints(PASN_Object::FixedConstraint, 1, 65536); } #ifndef PASN_NOPRINTON void GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "capabilityID = " << setprecision(indent) << m_capabilityID << '\n'; strm << setw(indent+18) << "capabilityClass = " << setprecision(indent) << m_capabilityClass << '\n'; strm << setw(indent+19) << "numberOfEntities = " << setprecision(indent) << m_numberOfEntities << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype), PInvalidCast); #endif const GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype & other = (const GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype &)obj; Comparison result; if ((result = m_capabilityID.Compare(other.m_capabilityID)) != EqualTo) return result; if ((result = m_capabilityClass.Compare(other.m_capabilityClass)) != EqualTo) return result; if ((result = m_numberOfEntities.Compare(other.m_numberOfEntities)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype::GetDataLength() const { PINDEX length = 0; length += m_capabilityID.GetObjectLength(); length += m_capabilityClass.GetObjectLength(); length += m_numberOfEntities.GetObjectLength(); return length; } PBoolean GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_capabilityID.Decode(strm)) return FALSE; if (!m_capabilityClass.Decode(strm)) return FALSE; if (!m_numberOfEntities.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_capabilityID.Encode(strm); m_capabilityClass.Encode(strm); m_numberOfEntities.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype::Class()), PInvalidCast); #endif return new GCC_RosterUpdateIndication_applicationInformation_subtype_applicationCapabilitiesList_refresh_subtype(*this); } #ifndef PASN_NOPRINTON const static PASN_Names Names_GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate[]={ {"addRecord",0} ,{"replaceRecord",1} ,{"removeRecord",2} }; #endif // // RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate // GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate::GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Choice(tag, tagClass, 3, TRUE #ifndef PASN_NOPRINTON ,(const PASN_Names *)Names_GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate,3 #endif ) { } #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9 GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate::operator GCC_ApplicationRecord &() const #else GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate::operator GCC_ApplicationRecord &() { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ApplicationRecord), PInvalidCast); #endif return *(GCC_ApplicationRecord *)choice; } GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate::operator const GCC_ApplicationRecord &() const #endif { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(PAssertNULL(choice), GCC_ApplicationRecord), PInvalidCast); #endif return *(GCC_ApplicationRecord *)choice; } PBoolean GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate::CreateObject() { switch (tag) { case e_addRecord : case e_replaceRecord : choice = new GCC_ApplicationRecord(); return TRUE; case e_removeRecord : choice = new PASN_Null(); return TRUE; } choice = NULL; return FALSE; } PObject * GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate::Class()), PInvalidCast); #endif return new GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype_applicationUpdate(*this); } // // ChallengeRequest // GCC_ChallengeRequest::GCC_ChallengeRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ChallengeRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+15) << "challengeTag = " << setprecision(indent) << m_challengeTag << '\n'; strm << setw(indent+15) << "challengeSet = " << setprecision(indent) << m_challengeSet << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ChallengeRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ChallengeRequest), PInvalidCast); #endif const GCC_ChallengeRequest & other = (const GCC_ChallengeRequest &)obj; Comparison result; if ((result = m_challengeTag.Compare(other.m_challengeTag)) != EqualTo) return result; if ((result = m_challengeSet.Compare(other.m_challengeSet)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ChallengeRequest::GetDataLength() const { PINDEX length = 0; length += m_challengeTag.GetObjectLength(); length += m_challengeSet.GetObjectLength(); return length; } PBoolean GCC_ChallengeRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_challengeTag.Decode(strm)) return FALSE; if (!m_challengeSet.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ChallengeRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_challengeTag.Encode(strm); m_challengeSet.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ChallengeRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ChallengeRequest::Class()), PInvalidCast); #endif return new GCC_ChallengeRequest(*this); } // // NodeRecord // GCC_NodeRecord::GCC_NodeRecord(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 7, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_NodeRecord::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_superiorNode)) strm << setw(indent+15) << "superiorNode = " << setprecision(indent) << m_superiorNode << '\n'; strm << setw(indent+11) << "nodeType = " << setprecision(indent) << m_nodeType << '\n'; strm << setw(indent+17) << "nodeProperties = " << setprecision(indent) << m_nodeProperties << '\n'; if (HasOptionalField(e_nodeName)) strm << setw(indent+11) << "nodeName = " << setprecision(indent) << m_nodeName << '\n'; if (HasOptionalField(e_participantsList)) strm << setw(indent+19) << "participantsList = " << setprecision(indent) << m_participantsList << '\n'; if (HasOptionalField(e_siteInformation)) strm << setw(indent+18) << "siteInformation = " << setprecision(indent) << m_siteInformation << '\n'; if (HasOptionalField(e_networkAddress)) strm << setw(indent+17) << "networkAddress = " << setprecision(indent) << m_networkAddress << '\n'; if (HasOptionalField(e_alternativeNodeID)) strm << setw(indent+20) << "alternativeNodeID = " << setprecision(indent) << m_alternativeNodeID << '\n'; if (HasOptionalField(e_userData)) strm << setw(indent+11) << "userData = " << setprecision(indent) << m_userData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_NodeRecord::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_NodeRecord), PInvalidCast); #endif const GCC_NodeRecord & other = (const GCC_NodeRecord &)obj; Comparison result; if ((result = m_superiorNode.Compare(other.m_superiorNode)) != EqualTo) return result; if ((result = m_nodeType.Compare(other.m_nodeType)) != EqualTo) return result; if ((result = m_nodeProperties.Compare(other.m_nodeProperties)) != EqualTo) return result; if ((result = m_nodeName.Compare(other.m_nodeName)) != EqualTo) return result; if ((result = m_participantsList.Compare(other.m_participantsList)) != EqualTo) return result; if ((result = m_siteInformation.Compare(other.m_siteInformation)) != EqualTo) return result; if ((result = m_networkAddress.Compare(other.m_networkAddress)) != EqualTo) return result; if ((result = m_alternativeNodeID.Compare(other.m_alternativeNodeID)) != EqualTo) return result; if ((result = m_userData.Compare(other.m_userData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_NodeRecord::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_superiorNode)) length += m_superiorNode.GetObjectLength(); length += m_nodeType.GetObjectLength(); length += m_nodeProperties.GetObjectLength(); if (HasOptionalField(e_nodeName)) length += m_nodeName.GetObjectLength(); if (HasOptionalField(e_participantsList)) length += m_participantsList.GetObjectLength(); if (HasOptionalField(e_siteInformation)) length += m_siteInformation.GetObjectLength(); if (HasOptionalField(e_networkAddress)) length += m_networkAddress.GetObjectLength(); if (HasOptionalField(e_alternativeNodeID)) length += m_alternativeNodeID.GetObjectLength(); if (HasOptionalField(e_userData)) length += m_userData.GetObjectLength(); return length; } PBoolean GCC_NodeRecord::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_superiorNode) && !m_superiorNode.Decode(strm)) return FALSE; if (!m_nodeType.Decode(strm)) return FALSE; if (!m_nodeProperties.Decode(strm)) return FALSE; if (HasOptionalField(e_nodeName) && !m_nodeName.Decode(strm)) return FALSE; if (HasOptionalField(e_participantsList) && !m_participantsList.Decode(strm)) return FALSE; if (HasOptionalField(e_siteInformation) && !m_siteInformation.Decode(strm)) return FALSE; if (HasOptionalField(e_networkAddress) && !m_networkAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_alternativeNodeID) && !m_alternativeNodeID.Decode(strm)) return FALSE; if (HasOptionalField(e_userData) && !m_userData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_NodeRecord::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_superiorNode)) m_superiorNode.Encode(strm); m_nodeType.Encode(strm); m_nodeProperties.Encode(strm); if (HasOptionalField(e_nodeName)) m_nodeName.Encode(strm); if (HasOptionalField(e_participantsList)) m_participantsList.Encode(strm); if (HasOptionalField(e_siteInformation)) m_siteInformation.Encode(strm); if (HasOptionalField(e_networkAddress)) m_networkAddress.Encode(strm); if (HasOptionalField(e_alternativeNodeID)) m_alternativeNodeID.Encode(strm); if (HasOptionalField(e_userData)) m_userData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_NodeRecord::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_NodeRecord::Class()), PInvalidCast); #endif return new GCC_NodeRecord(*this); } // // ApplicationRecord // GCC_ApplicationRecord::GCC_ApplicationRecord(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ApplicationRecord::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+20) << "applicationActive = " << setprecision(indent) << m_applicationActive << '\n'; strm << setw(indent+29) << "conductingOperationCapable = " << setprecision(indent) << m_conductingOperationCapable << '\n'; if (HasOptionalField(e_startupChannel)) strm << setw(indent+17) << "startupChannel = " << setprecision(indent) << m_startupChannel << '\n'; if (HasOptionalField(e_applicationUserID)) strm << setw(indent+20) << "applicationUserID = " << setprecision(indent) << m_applicationUserID << '\n'; if (HasOptionalField(e_nonCollapsingCapabilities)) strm << setw(indent+28) << "nonCollapsingCapabilities = " << setprecision(indent) << m_nonCollapsingCapabilities << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ApplicationRecord::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ApplicationRecord), PInvalidCast); #endif const GCC_ApplicationRecord & other = (const GCC_ApplicationRecord &)obj; Comparison result; if ((result = m_applicationActive.Compare(other.m_applicationActive)) != EqualTo) return result; if ((result = m_conductingOperationCapable.Compare(other.m_conductingOperationCapable)) != EqualTo) return result; if ((result = m_startupChannel.Compare(other.m_startupChannel)) != EqualTo) return result; if ((result = m_applicationUserID.Compare(other.m_applicationUserID)) != EqualTo) return result; if ((result = m_nonCollapsingCapabilities.Compare(other.m_nonCollapsingCapabilities)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ApplicationRecord::GetDataLength() const { PINDEX length = 0; length += m_applicationActive.GetObjectLength(); length += m_conductingOperationCapable.GetObjectLength(); if (HasOptionalField(e_startupChannel)) length += m_startupChannel.GetObjectLength(); if (HasOptionalField(e_applicationUserID)) length += m_applicationUserID.GetObjectLength(); if (HasOptionalField(e_nonCollapsingCapabilities)) length += m_nonCollapsingCapabilities.GetObjectLength(); return length; } PBoolean GCC_ApplicationRecord::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_applicationActive.Decode(strm)) return FALSE; if (!m_conductingOperationCapable.Decode(strm)) return FALSE; if (HasOptionalField(e_startupChannel) && !m_startupChannel.Decode(strm)) return FALSE; if (HasOptionalField(e_applicationUserID) && !m_applicationUserID.Decode(strm)) return FALSE; if (HasOptionalField(e_nonCollapsingCapabilities) && !m_nonCollapsingCapabilities.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ApplicationRecord::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_applicationActive.Encode(strm); m_conductingOperationCapable.Encode(strm); if (HasOptionalField(e_startupChannel)) m_startupChannel.Encode(strm); if (HasOptionalField(e_applicationUserID)) m_applicationUserID.Encode(strm); if (HasOptionalField(e_nonCollapsingCapabilities)) m_nonCollapsingCapabilities.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ApplicationRecord::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ApplicationRecord::Class()), PInvalidCast); #endif return new GCC_ApplicationRecord(*this); } // // ApplicationInvokeSpecifier // GCC_ApplicationInvokeSpecifier::GCC_ApplicationInvokeSpecifier(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ApplicationInvokeSpecifier::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "sessionKey = " << setprecision(indent) << m_sessionKey << '\n'; if (HasOptionalField(e_expectedCapabilitySet)) strm << setw(indent+24) << "expectedCapabilitySet = " << setprecision(indent) << m_expectedCapabilitySet << '\n'; if (HasOptionalField(e_startupChannel)) strm << setw(indent+17) << "startupChannel = " << setprecision(indent) << m_startupChannel << '\n'; strm << setw(indent+16) << "mandatoryFlag = " << setprecision(indent) << m_mandatoryFlag << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ApplicationInvokeSpecifier::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ApplicationInvokeSpecifier), PInvalidCast); #endif const GCC_ApplicationInvokeSpecifier & other = (const GCC_ApplicationInvokeSpecifier &)obj; Comparison result; if ((result = m_sessionKey.Compare(other.m_sessionKey)) != EqualTo) return result; if ((result = m_expectedCapabilitySet.Compare(other.m_expectedCapabilitySet)) != EqualTo) return result; if ((result = m_startupChannel.Compare(other.m_startupChannel)) != EqualTo) return result; if ((result = m_mandatoryFlag.Compare(other.m_mandatoryFlag)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ApplicationInvokeSpecifier::GetDataLength() const { PINDEX length = 0; length += m_sessionKey.GetObjectLength(); if (HasOptionalField(e_expectedCapabilitySet)) length += m_expectedCapabilitySet.GetObjectLength(); if (HasOptionalField(e_startupChannel)) length += m_startupChannel.GetObjectLength(); length += m_mandatoryFlag.GetObjectLength(); return length; } PBoolean GCC_ApplicationInvokeSpecifier::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sessionKey.Decode(strm)) return FALSE; if (HasOptionalField(e_expectedCapabilitySet) && !m_expectedCapabilitySet.Decode(strm)) return FALSE; if (HasOptionalField(e_startupChannel) && !m_startupChannel.Decode(strm)) return FALSE; if (!m_mandatoryFlag.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ApplicationInvokeSpecifier::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sessionKey.Encode(strm); if (HasOptionalField(e_expectedCapabilitySet)) m_expectedCapabilitySet.Encode(strm); if (HasOptionalField(e_startupChannel)) m_startupChannel.Encode(strm); m_mandatoryFlag.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ApplicationInvokeSpecifier::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ApplicationInvokeSpecifier::Class()), PInvalidCast); #endif return new GCC_ApplicationInvokeSpecifier(*this); } // // ConferenceCreateRequest // GCC_ConferenceCreateRequest::GCC_ConferenceCreateRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 8, TRUE, 1) { } #ifndef PASN_NOPRINTON void GCC_ConferenceCreateRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "conferenceName = " << setprecision(indent) << m_conferenceName << '\n'; if (HasOptionalField(e_convenerPassword)) strm << setw(indent+19) << "convenerPassword = " << setprecision(indent) << m_convenerPassword << '\n'; if (HasOptionalField(e_password)) strm << setw(indent+11) << "password = " << setprecision(indent) << m_password << '\n'; strm << setw(indent+19) << "lockedConference = " << setprecision(indent) << m_lockedConference << '\n'; strm << setw(indent+19) << "listedConference = " << setprecision(indent) << m_listedConference << '\n'; strm << setw(indent+24) << "conductibleConference = " << setprecision(indent) << m_conductibleConference << '\n'; strm << setw(indent+20) << "terminationMethod = " << setprecision(indent) << m_terminationMethod << '\n'; if (HasOptionalField(e_conductorPrivileges)) strm << setw(indent+22) << "conductorPrivileges = " << setprecision(indent) << m_conductorPrivileges << '\n'; if (HasOptionalField(e_conductedPrivileges)) strm << setw(indent+22) << "conductedPrivileges = " << setprecision(indent) << m_conductedPrivileges << '\n'; if (HasOptionalField(e_nonConductedPrivileges)) strm << setw(indent+25) << "nonConductedPrivileges = " << setprecision(indent) << m_nonConductedPrivileges << '\n'; if (HasOptionalField(e_conferenceDescription)) strm << setw(indent+24) << "conferenceDescription = " << setprecision(indent) << m_conferenceDescription << '\n'; if (HasOptionalField(e_callerIdentifier)) strm << setw(indent+19) << "callerIdentifier = " << setprecision(indent) << m_callerIdentifier << '\n'; if (HasOptionalField(e_userData)) strm << setw(indent+11) << "userData = " << setprecision(indent) << m_userData << '\n'; if (HasOptionalField(e_conferencePriority)) strm << setw(indent+21) << "conferencePriority = " << setprecision(indent) << m_conferencePriority << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceCreateRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceCreateRequest), PInvalidCast); #endif const GCC_ConferenceCreateRequest & other = (const GCC_ConferenceCreateRequest &)obj; Comparison result; if ((result = m_conferenceName.Compare(other.m_conferenceName)) != EqualTo) return result; if ((result = m_convenerPassword.Compare(other.m_convenerPassword)) != EqualTo) return result; if ((result = m_password.Compare(other.m_password)) != EqualTo) return result; if ((result = m_lockedConference.Compare(other.m_lockedConference)) != EqualTo) return result; if ((result = m_listedConference.Compare(other.m_listedConference)) != EqualTo) return result; if ((result = m_conductibleConference.Compare(other.m_conductibleConference)) != EqualTo) return result; if ((result = m_terminationMethod.Compare(other.m_terminationMethod)) != EqualTo) return result; if ((result = m_conductorPrivileges.Compare(other.m_conductorPrivileges)) != EqualTo) return result; if ((result = m_conductedPrivileges.Compare(other.m_conductedPrivileges)) != EqualTo) return result; if ((result = m_nonConductedPrivileges.Compare(other.m_nonConductedPrivileges)) != EqualTo) return result; if ((result = m_conferenceDescription.Compare(other.m_conferenceDescription)) != EqualTo) return result; if ((result = m_callerIdentifier.Compare(other.m_callerIdentifier)) != EqualTo) return result; if ((result = m_userData.Compare(other.m_userData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceCreateRequest::GetDataLength() const { PINDEX length = 0; length += m_conferenceName.GetObjectLength(); if (HasOptionalField(e_convenerPassword)) length += m_convenerPassword.GetObjectLength(); if (HasOptionalField(e_password)) length += m_password.GetObjectLength(); length += m_lockedConference.GetObjectLength(); length += m_listedConference.GetObjectLength(); length += m_conductibleConference.GetObjectLength(); length += m_terminationMethod.GetObjectLength(); if (HasOptionalField(e_conductorPrivileges)) length += m_conductorPrivileges.GetObjectLength(); if (HasOptionalField(e_conductedPrivileges)) length += m_conductedPrivileges.GetObjectLength(); if (HasOptionalField(e_nonConductedPrivileges)) length += m_nonConductedPrivileges.GetObjectLength(); if (HasOptionalField(e_conferenceDescription)) length += m_conferenceDescription.GetObjectLength(); if (HasOptionalField(e_callerIdentifier)) length += m_callerIdentifier.GetObjectLength(); if (HasOptionalField(e_userData)) length += m_userData.GetObjectLength(); return length; } PBoolean GCC_ConferenceCreateRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_conferenceName.Decode(strm)) return FALSE; if (HasOptionalField(e_convenerPassword) && !m_convenerPassword.Decode(strm)) return FALSE; if (HasOptionalField(e_password) && !m_password.Decode(strm)) return FALSE; if (!m_lockedConference.Decode(strm)) return FALSE; if (!m_listedConference.Decode(strm)) return FALSE; if (!m_conductibleConference.Decode(strm)) return FALSE; if (!m_terminationMethod.Decode(strm)) return FALSE; if (HasOptionalField(e_conductorPrivileges) && !m_conductorPrivileges.Decode(strm)) return FALSE; if (HasOptionalField(e_conductedPrivileges) && !m_conductedPrivileges.Decode(strm)) return FALSE; if (HasOptionalField(e_nonConductedPrivileges) && !m_nonConductedPrivileges.Decode(strm)) return FALSE; if (HasOptionalField(e_conferenceDescription) && !m_conferenceDescription.Decode(strm)) return FALSE; if (HasOptionalField(e_callerIdentifier) && !m_callerIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_userData) && !m_userData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_conferencePriority, m_conferencePriority)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceCreateRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_conferenceName.Encode(strm); if (HasOptionalField(e_convenerPassword)) m_convenerPassword.Encode(strm); if (HasOptionalField(e_password)) m_password.Encode(strm); m_lockedConference.Encode(strm); m_listedConference.Encode(strm); m_conductibleConference.Encode(strm); m_terminationMethod.Encode(strm); if (HasOptionalField(e_conductorPrivileges)) m_conductorPrivileges.Encode(strm); if (HasOptionalField(e_conductedPrivileges)) m_conductedPrivileges.Encode(strm); if (HasOptionalField(e_nonConductedPrivileges)) m_nonConductedPrivileges.Encode(strm); if (HasOptionalField(e_conferenceDescription)) m_conferenceDescription.Encode(strm); if (HasOptionalField(e_callerIdentifier)) m_callerIdentifier.Encode(strm); if (HasOptionalField(e_userData)) m_userData.Encode(strm); KnownExtensionEncode(strm, e_conferencePriority, m_conferencePriority); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceCreateRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceCreateRequest::Class()), PInvalidCast); #endif return new GCC_ConferenceCreateRequest(*this); } // // ConferenceCreateResponse // GCC_ConferenceCreateResponse::GCC_ConferenceCreateResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceCreateResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "nodeID = " << setprecision(indent) << m_nodeID << '\n'; strm << setw(indent+6) << "tag = " << setprecision(indent) << m_tag << '\n'; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; if (HasOptionalField(e_userData)) strm << setw(indent+11) << "userData = " << setprecision(indent) << m_userData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceCreateResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceCreateResponse), PInvalidCast); #endif const GCC_ConferenceCreateResponse & other = (const GCC_ConferenceCreateResponse &)obj; Comparison result; if ((result = m_nodeID.Compare(other.m_nodeID)) != EqualTo) return result; if ((result = m_tag.Compare(other.m_tag)) != EqualTo) return result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; if ((result = m_userData.Compare(other.m_userData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceCreateResponse::GetDataLength() const { PINDEX length = 0; length += m_nodeID.GetObjectLength(); length += m_tag.GetObjectLength(); length += m_result.GetObjectLength(); if (HasOptionalField(e_userData)) length += m_userData.GetObjectLength(); return length; } PBoolean GCC_ConferenceCreateResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nodeID.Decode(strm)) return FALSE; if (!m_tag.Decode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; if (HasOptionalField(e_userData) && !m_userData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceCreateResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nodeID.Encode(strm); m_tag.Encode(strm); m_result.Encode(strm); if (HasOptionalField(e_userData)) m_userData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceCreateResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceCreateResponse::Class()), PInvalidCast); #endif return new GCC_ConferenceCreateResponse(*this); } // // ConferenceQueryResponse // GCC_ConferenceQueryResponse::GCC_ConferenceQueryResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 2) { } #ifndef PASN_NOPRINTON void GCC_ConferenceQueryResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "nodeType = " << setprecision(indent) << m_nodeType << '\n'; if (HasOptionalField(e_asymmetryIndicator)) strm << setw(indent+21) << "asymmetryIndicator = " << setprecision(indent) << m_asymmetryIndicator << '\n'; strm << setw(indent+17) << "conferenceList = " << setprecision(indent) << m_conferenceList << '\n'; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; if (HasOptionalField(e_userData)) strm << setw(indent+11) << "userData = " << setprecision(indent) << m_userData << '\n'; if (HasOptionalField(e_waitForInvitationFlag)) strm << setw(indent+24) << "waitForInvitationFlag = " << setprecision(indent) << m_waitForInvitationFlag << '\n'; if (HasOptionalField(e_noUnlistedConferenceFlag)) strm << setw(indent+27) << "noUnlistedConferenceFlag = " << setprecision(indent) << m_noUnlistedConferenceFlag << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceQueryResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceQueryResponse), PInvalidCast); #endif const GCC_ConferenceQueryResponse & other = (const GCC_ConferenceQueryResponse &)obj; Comparison result; if ((result = m_nodeType.Compare(other.m_nodeType)) != EqualTo) return result; if ((result = m_asymmetryIndicator.Compare(other.m_asymmetryIndicator)) != EqualTo) return result; if ((result = m_conferenceList.Compare(other.m_conferenceList)) != EqualTo) return result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; if ((result = m_userData.Compare(other.m_userData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceQueryResponse::GetDataLength() const { PINDEX length = 0; length += m_nodeType.GetObjectLength(); if (HasOptionalField(e_asymmetryIndicator)) length += m_asymmetryIndicator.GetObjectLength(); length += m_conferenceList.GetObjectLength(); length += m_result.GetObjectLength(); if (HasOptionalField(e_userData)) length += m_userData.GetObjectLength(); return length; } PBoolean GCC_ConferenceQueryResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nodeType.Decode(strm)) return FALSE; if (HasOptionalField(e_asymmetryIndicator) && !m_asymmetryIndicator.Decode(strm)) return FALSE; if (!m_conferenceList.Decode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; if (HasOptionalField(e_userData) && !m_userData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_waitForInvitationFlag, m_waitForInvitationFlag)) return FALSE; if (!KnownExtensionDecode(strm, e_noUnlistedConferenceFlag, m_noUnlistedConferenceFlag)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceQueryResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nodeType.Encode(strm); if (HasOptionalField(e_asymmetryIndicator)) m_asymmetryIndicator.Encode(strm); m_conferenceList.Encode(strm); m_result.Encode(strm); if (HasOptionalField(e_userData)) m_userData.Encode(strm); KnownExtensionEncode(strm, e_waitForInvitationFlag, m_waitForInvitationFlag); KnownExtensionEncode(strm, e_noUnlistedConferenceFlag, m_noUnlistedConferenceFlag); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceQueryResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceQueryResponse::Class()), PInvalidCast); #endif return new GCC_ConferenceQueryResponse(*this); } // // ConferenceJoinResponse // GCC_ConferenceJoinResponse::GCC_ConferenceJoinResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 8, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceJoinResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_nodeID)) strm << setw(indent+9) << "nodeID = " << setprecision(indent) << m_nodeID << '\n'; strm << setw(indent+12) << "topNodeID = " << setprecision(indent) << m_topNodeID << '\n'; strm << setw(indent+6) << "tag = " << setprecision(indent) << m_tag << '\n'; if (HasOptionalField(e_conferenceNameAlias)) strm << setw(indent+22) << "conferenceNameAlias = " << setprecision(indent) << m_conferenceNameAlias << '\n'; strm << setw(indent+29) << "passwordInTheClearRequired = " << setprecision(indent) << m_passwordInTheClearRequired << '\n'; strm << setw(indent+19) << "lockedConference = " << setprecision(indent) << m_lockedConference << '\n'; strm << setw(indent+19) << "listedConference = " << setprecision(indent) << m_listedConference << '\n'; strm << setw(indent+24) << "conductibleConference = " << setprecision(indent) << m_conductibleConference << '\n'; strm << setw(indent+20) << "terminationMethod = " << setprecision(indent) << m_terminationMethod << '\n'; if (HasOptionalField(e_conductorPrivileges)) strm << setw(indent+22) << "conductorPrivileges = " << setprecision(indent) << m_conductorPrivileges << '\n'; if (HasOptionalField(e_conductedPrivileges)) strm << setw(indent+22) << "conductedPrivileges = " << setprecision(indent) << m_conductedPrivileges << '\n'; if (HasOptionalField(e_nonConductedPrivileges)) strm << setw(indent+25) << "nonConductedPrivileges = " << setprecision(indent) << m_nonConductedPrivileges << '\n'; if (HasOptionalField(e_conferenceDescription)) strm << setw(indent+24) << "conferenceDescription = " << setprecision(indent) << m_conferenceDescription << '\n'; if (HasOptionalField(e_password)) strm << setw(indent+11) << "password = " << setprecision(indent) << m_password << '\n'; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; if (HasOptionalField(e_userData)) strm << setw(indent+11) << "userData = " << setprecision(indent) << m_userData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceJoinResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceJoinResponse), PInvalidCast); #endif const GCC_ConferenceJoinResponse & other = (const GCC_ConferenceJoinResponse &)obj; Comparison result; if ((result = m_nodeID.Compare(other.m_nodeID)) != EqualTo) return result; if ((result = m_topNodeID.Compare(other.m_topNodeID)) != EqualTo) return result; if ((result = m_tag.Compare(other.m_tag)) != EqualTo) return result; if ((result = m_conferenceNameAlias.Compare(other.m_conferenceNameAlias)) != EqualTo) return result; if ((result = m_passwordInTheClearRequired.Compare(other.m_passwordInTheClearRequired)) != EqualTo) return result; if ((result = m_lockedConference.Compare(other.m_lockedConference)) != EqualTo) return result; if ((result = m_listedConference.Compare(other.m_listedConference)) != EqualTo) return result; if ((result = m_conductibleConference.Compare(other.m_conductibleConference)) != EqualTo) return result; if ((result = m_terminationMethod.Compare(other.m_terminationMethod)) != EqualTo) return result; if ((result = m_conductorPrivileges.Compare(other.m_conductorPrivileges)) != EqualTo) return result; if ((result = m_conductedPrivileges.Compare(other.m_conductedPrivileges)) != EqualTo) return result; if ((result = m_nonConductedPrivileges.Compare(other.m_nonConductedPrivileges)) != EqualTo) return result; if ((result = m_conferenceDescription.Compare(other.m_conferenceDescription)) != EqualTo) return result; if ((result = m_password.Compare(other.m_password)) != EqualTo) return result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; if ((result = m_userData.Compare(other.m_userData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceJoinResponse::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_nodeID)) length += m_nodeID.GetObjectLength(); length += m_topNodeID.GetObjectLength(); length += m_tag.GetObjectLength(); if (HasOptionalField(e_conferenceNameAlias)) length += m_conferenceNameAlias.GetObjectLength(); length += m_passwordInTheClearRequired.GetObjectLength(); length += m_lockedConference.GetObjectLength(); length += m_listedConference.GetObjectLength(); length += m_conductibleConference.GetObjectLength(); length += m_terminationMethod.GetObjectLength(); if (HasOptionalField(e_conductorPrivileges)) length += m_conductorPrivileges.GetObjectLength(); if (HasOptionalField(e_conductedPrivileges)) length += m_conductedPrivileges.GetObjectLength(); if (HasOptionalField(e_nonConductedPrivileges)) length += m_nonConductedPrivileges.GetObjectLength(); if (HasOptionalField(e_conferenceDescription)) length += m_conferenceDescription.GetObjectLength(); if (HasOptionalField(e_password)) length += m_password.GetObjectLength(); length += m_result.GetObjectLength(); if (HasOptionalField(e_userData)) length += m_userData.GetObjectLength(); return length; } PBoolean GCC_ConferenceJoinResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_nodeID) && !m_nodeID.Decode(strm)) return FALSE; if (!m_topNodeID.Decode(strm)) return FALSE; if (!m_tag.Decode(strm)) return FALSE; if (HasOptionalField(e_conferenceNameAlias) && !m_conferenceNameAlias.Decode(strm)) return FALSE; if (!m_passwordInTheClearRequired.Decode(strm)) return FALSE; if (!m_lockedConference.Decode(strm)) return FALSE; if (!m_listedConference.Decode(strm)) return FALSE; if (!m_conductibleConference.Decode(strm)) return FALSE; if (!m_terminationMethod.Decode(strm)) return FALSE; if (HasOptionalField(e_conductorPrivileges) && !m_conductorPrivileges.Decode(strm)) return FALSE; if (HasOptionalField(e_conductedPrivileges) && !m_conductedPrivileges.Decode(strm)) return FALSE; if (HasOptionalField(e_nonConductedPrivileges) && !m_nonConductedPrivileges.Decode(strm)) return FALSE; if (HasOptionalField(e_conferenceDescription) && !m_conferenceDescription.Decode(strm)) return FALSE; if (HasOptionalField(e_password) && !m_password.Decode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; if (HasOptionalField(e_userData) && !m_userData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceJoinResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_nodeID)) m_nodeID.Encode(strm); m_topNodeID.Encode(strm); m_tag.Encode(strm); if (HasOptionalField(e_conferenceNameAlias)) m_conferenceNameAlias.Encode(strm); m_passwordInTheClearRequired.Encode(strm); m_lockedConference.Encode(strm); m_listedConference.Encode(strm); m_conductibleConference.Encode(strm); m_terminationMethod.Encode(strm); if (HasOptionalField(e_conductorPrivileges)) m_conductorPrivileges.Encode(strm); if (HasOptionalField(e_conductedPrivileges)) m_conductedPrivileges.Encode(strm); if (HasOptionalField(e_nonConductedPrivileges)) m_nonConductedPrivileges.Encode(strm); if (HasOptionalField(e_conferenceDescription)) m_conferenceDescription.Encode(strm); if (HasOptionalField(e_password)) m_password.Encode(strm); m_result.Encode(strm); if (HasOptionalField(e_userData)) m_userData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceJoinResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceJoinResponse::Class()), PInvalidCast); #endif return new GCC_ConferenceJoinResponse(*this); } // // ConferenceInviteRequest // GCC_ConferenceInviteRequest::GCC_ConferenceInviteRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 6, TRUE, 1) { } #ifndef PASN_NOPRINTON void GCC_ConferenceInviteRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "conferenceName = " << setprecision(indent) << m_conferenceName << '\n'; strm << setw(indent+9) << "nodeID = " << setprecision(indent) << m_nodeID << '\n'; strm << setw(indent+12) << "topNodeID = " << setprecision(indent) << m_topNodeID << '\n'; strm << setw(indent+6) << "tag = " << setprecision(indent) << m_tag << '\n'; strm << setw(indent+29) << "passwordInTheClearRequired = " << setprecision(indent) << m_passwordInTheClearRequired << '\n'; strm << setw(indent+19) << "lockedConference = " << setprecision(indent) << m_lockedConference << '\n'; strm << setw(indent+19) << "listedConference = " << setprecision(indent) << m_listedConference << '\n'; strm << setw(indent+24) << "conductibleConference = " << setprecision(indent) << m_conductibleConference << '\n'; strm << setw(indent+20) << "terminationMethod = " << setprecision(indent) << m_terminationMethod << '\n'; if (HasOptionalField(e_conductorPrivileges)) strm << setw(indent+22) << "conductorPrivileges = " << setprecision(indent) << m_conductorPrivileges << '\n'; if (HasOptionalField(e_conductedPrivileges)) strm << setw(indent+22) << "conductedPrivileges = " << setprecision(indent) << m_conductedPrivileges << '\n'; if (HasOptionalField(e_nonConductedPrivileges)) strm << setw(indent+25) << "nonConductedPrivileges = " << setprecision(indent) << m_nonConductedPrivileges << '\n'; if (HasOptionalField(e_conferenceDescription)) strm << setw(indent+24) << "conferenceDescription = " << setprecision(indent) << m_conferenceDescription << '\n'; if (HasOptionalField(e_callerIdentifier)) strm << setw(indent+19) << "callerIdentifier = " << setprecision(indent) << m_callerIdentifier << '\n'; if (HasOptionalField(e_userData)) strm << setw(indent+11) << "userData = " << setprecision(indent) << m_userData << '\n'; if (HasOptionalField(e_conferencePriority)) strm << setw(indent+21) << "conferencePriority = " << setprecision(indent) << m_conferencePriority << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceInviteRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceInviteRequest), PInvalidCast); #endif const GCC_ConferenceInviteRequest & other = (const GCC_ConferenceInviteRequest &)obj; Comparison result; if ((result = m_conferenceName.Compare(other.m_conferenceName)) != EqualTo) return result; if ((result = m_nodeID.Compare(other.m_nodeID)) != EqualTo) return result; if ((result = m_topNodeID.Compare(other.m_topNodeID)) != EqualTo) return result; if ((result = m_tag.Compare(other.m_tag)) != EqualTo) return result; if ((result = m_passwordInTheClearRequired.Compare(other.m_passwordInTheClearRequired)) != EqualTo) return result; if ((result = m_lockedConference.Compare(other.m_lockedConference)) != EqualTo) return result; if ((result = m_listedConference.Compare(other.m_listedConference)) != EqualTo) return result; if ((result = m_conductibleConference.Compare(other.m_conductibleConference)) != EqualTo) return result; if ((result = m_terminationMethod.Compare(other.m_terminationMethod)) != EqualTo) return result; if ((result = m_conductorPrivileges.Compare(other.m_conductorPrivileges)) != EqualTo) return result; if ((result = m_conductedPrivileges.Compare(other.m_conductedPrivileges)) != EqualTo) return result; if ((result = m_nonConductedPrivileges.Compare(other.m_nonConductedPrivileges)) != EqualTo) return result; if ((result = m_conferenceDescription.Compare(other.m_conferenceDescription)) != EqualTo) return result; if ((result = m_callerIdentifier.Compare(other.m_callerIdentifier)) != EqualTo) return result; if ((result = m_userData.Compare(other.m_userData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceInviteRequest::GetDataLength() const { PINDEX length = 0; length += m_conferenceName.GetObjectLength(); length += m_nodeID.GetObjectLength(); length += m_topNodeID.GetObjectLength(); length += m_tag.GetObjectLength(); length += m_passwordInTheClearRequired.GetObjectLength(); length += m_lockedConference.GetObjectLength(); length += m_listedConference.GetObjectLength(); length += m_conductibleConference.GetObjectLength(); length += m_terminationMethod.GetObjectLength(); if (HasOptionalField(e_conductorPrivileges)) length += m_conductorPrivileges.GetObjectLength(); if (HasOptionalField(e_conductedPrivileges)) length += m_conductedPrivileges.GetObjectLength(); if (HasOptionalField(e_nonConductedPrivileges)) length += m_nonConductedPrivileges.GetObjectLength(); if (HasOptionalField(e_conferenceDescription)) length += m_conferenceDescription.GetObjectLength(); if (HasOptionalField(e_callerIdentifier)) length += m_callerIdentifier.GetObjectLength(); if (HasOptionalField(e_userData)) length += m_userData.GetObjectLength(); return length; } PBoolean GCC_ConferenceInviteRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_conferenceName.Decode(strm)) return FALSE; if (!m_nodeID.Decode(strm)) return FALSE; if (!m_topNodeID.Decode(strm)) return FALSE; if (!m_tag.Decode(strm)) return FALSE; if (!m_passwordInTheClearRequired.Decode(strm)) return FALSE; if (!m_lockedConference.Decode(strm)) return FALSE; if (!m_listedConference.Decode(strm)) return FALSE; if (!m_conductibleConference.Decode(strm)) return FALSE; if (!m_terminationMethod.Decode(strm)) return FALSE; if (HasOptionalField(e_conductorPrivileges) && !m_conductorPrivileges.Decode(strm)) return FALSE; if (HasOptionalField(e_conductedPrivileges) && !m_conductedPrivileges.Decode(strm)) return FALSE; if (HasOptionalField(e_nonConductedPrivileges) && !m_nonConductedPrivileges.Decode(strm)) return FALSE; if (HasOptionalField(e_conferenceDescription) && !m_conferenceDescription.Decode(strm)) return FALSE; if (HasOptionalField(e_callerIdentifier) && !m_callerIdentifier.Decode(strm)) return FALSE; if (HasOptionalField(e_userData) && !m_userData.Decode(strm)) return FALSE; if (!KnownExtensionDecode(strm, e_conferencePriority, m_conferencePriority)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceInviteRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_conferenceName.Encode(strm); m_nodeID.Encode(strm); m_topNodeID.Encode(strm); m_tag.Encode(strm); m_passwordInTheClearRequired.Encode(strm); m_lockedConference.Encode(strm); m_listedConference.Encode(strm); m_conductibleConference.Encode(strm); m_terminationMethod.Encode(strm); if (HasOptionalField(e_conductorPrivileges)) m_conductorPrivileges.Encode(strm); if (HasOptionalField(e_conductedPrivileges)) m_conductedPrivileges.Encode(strm); if (HasOptionalField(e_nonConductedPrivileges)) m_nonConductedPrivileges.Encode(strm); if (HasOptionalField(e_conferenceDescription)) m_conferenceDescription.Encode(strm); if (HasOptionalField(e_callerIdentifier)) m_callerIdentifier.Encode(strm); if (HasOptionalField(e_userData)) m_userData.Encode(strm); KnownExtensionEncode(strm, e_conferencePriority, m_conferencePriority); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceInviteRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceInviteRequest::Class()), PInvalidCast); #endif return new GCC_ConferenceInviteRequest(*this); } // // ConferenceInviteResponse // GCC_ConferenceInviteResponse::GCC_ConferenceInviteResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceInviteResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; if (HasOptionalField(e_userData)) strm << setw(indent+11) << "userData = " << setprecision(indent) << m_userData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceInviteResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceInviteResponse), PInvalidCast); #endif const GCC_ConferenceInviteResponse & other = (const GCC_ConferenceInviteResponse &)obj; Comparison result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; if ((result = m_userData.Compare(other.m_userData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceInviteResponse::GetDataLength() const { PINDEX length = 0; length += m_result.GetObjectLength(); if (HasOptionalField(e_userData)) length += m_userData.GetObjectLength(); return length; } PBoolean GCC_ConferenceInviteResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; if (HasOptionalField(e_userData) && !m_userData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceInviteResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_result.Encode(strm); if (HasOptionalField(e_userData)) m_userData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceInviteResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceInviteResponse::Class()), PInvalidCast); #endif return new GCC_ConferenceInviteResponse(*this); } // // ConferenceAddResponse // GCC_ConferenceAddResponse::GCC_ConferenceAddResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceAddResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+6) << "tag = " << setprecision(indent) << m_tag << '\n'; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; if (HasOptionalField(e_userData)) strm << setw(indent+11) << "userData = " << setprecision(indent) << m_userData << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceAddResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceAddResponse), PInvalidCast); #endif const GCC_ConferenceAddResponse & other = (const GCC_ConferenceAddResponse &)obj; Comparison result; if ((result = m_tag.Compare(other.m_tag)) != EqualTo) return result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; if ((result = m_userData.Compare(other.m_userData)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceAddResponse::GetDataLength() const { PINDEX length = 0; length += m_tag.GetObjectLength(); length += m_result.GetObjectLength(); if (HasOptionalField(e_userData)) length += m_userData.GetObjectLength(); return length; } PBoolean GCC_ConferenceAddResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_tag.Decode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; if (HasOptionalField(e_userData) && !m_userData.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceAddResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_tag.Encode(strm); m_result.Encode(strm); if (HasOptionalField(e_userData)) m_userData.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceAddResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceAddResponse::Class()), PInvalidCast); #endif return new GCC_ConferenceAddResponse(*this); } // // ConferenceLockResponse // GCC_ConferenceLockResponse::GCC_ConferenceLockResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceLockResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceLockResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceLockResponse), PInvalidCast); #endif const GCC_ConferenceLockResponse & other = (const GCC_ConferenceLockResponse &)obj; Comparison result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceLockResponse::GetDataLength() const { PINDEX length = 0; length += m_result.GetObjectLength(); return length; } PBoolean GCC_ConferenceLockResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceLockResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_result.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceLockResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceLockResponse::Class()), PInvalidCast); #endif return new GCC_ConferenceLockResponse(*this); } // // ConferenceUnlockResponse // GCC_ConferenceUnlockResponse::GCC_ConferenceUnlockResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceUnlockResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceUnlockResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceUnlockResponse), PInvalidCast); #endif const GCC_ConferenceUnlockResponse & other = (const GCC_ConferenceUnlockResponse &)obj; Comparison result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceUnlockResponse::GetDataLength() const { PINDEX length = 0; length += m_result.GetObjectLength(); return length; } PBoolean GCC_ConferenceUnlockResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceUnlockResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_result.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceUnlockResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceUnlockResponse::Class()), PInvalidCast); #endif return new GCC_ConferenceUnlockResponse(*this); } // // ConferenceTerminateRequest // GCC_ConferenceTerminateRequest::GCC_ConferenceTerminateRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceTerminateRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceTerminateRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceTerminateRequest), PInvalidCast); #endif const GCC_ConferenceTerminateRequest & other = (const GCC_ConferenceTerminateRequest &)obj; Comparison result; if ((result = m_reason.Compare(other.m_reason)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceTerminateRequest::GetDataLength() const { PINDEX length = 0; length += m_reason.GetObjectLength(); return length; } PBoolean GCC_ConferenceTerminateRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_reason.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceTerminateRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_reason.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceTerminateRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceTerminateRequest::Class()), PInvalidCast); #endif return new GCC_ConferenceTerminateRequest(*this); } // // ConferenceTerminateResponse // GCC_ConferenceTerminateResponse::GCC_ConferenceTerminateResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceTerminateResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceTerminateResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceTerminateResponse), PInvalidCast); #endif const GCC_ConferenceTerminateResponse & other = (const GCC_ConferenceTerminateResponse &)obj; Comparison result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceTerminateResponse::GetDataLength() const { PINDEX length = 0; length += m_result.GetObjectLength(); return length; } PBoolean GCC_ConferenceTerminateResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceTerminateResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_result.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceTerminateResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceTerminateResponse::Class()), PInvalidCast); #endif return new GCC_ConferenceTerminateResponse(*this); } // // ConferenceTerminateIndication // GCC_ConferenceTerminateIndication::GCC_ConferenceTerminateIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceTerminateIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceTerminateIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceTerminateIndication), PInvalidCast); #endif const GCC_ConferenceTerminateIndication & other = (const GCC_ConferenceTerminateIndication &)obj; Comparison result; if ((result = m_reason.Compare(other.m_reason)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceTerminateIndication::GetDataLength() const { PINDEX length = 0; length += m_reason.GetObjectLength(); return length; } PBoolean GCC_ConferenceTerminateIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_reason.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceTerminateIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_reason.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceTerminateIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceTerminateIndication::Class()), PInvalidCast); #endif return new GCC_ConferenceTerminateIndication(*this); } // // ConferenceEjectUserRequest // GCC_ConferenceEjectUserRequest::GCC_ConferenceEjectUserRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceEjectUserRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "nodeToEject = " << setprecision(indent) << m_nodeToEject << '\n'; strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceEjectUserRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceEjectUserRequest), PInvalidCast); #endif const GCC_ConferenceEjectUserRequest & other = (const GCC_ConferenceEjectUserRequest &)obj; Comparison result; if ((result = m_nodeToEject.Compare(other.m_nodeToEject)) != EqualTo) return result; if ((result = m_reason.Compare(other.m_reason)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceEjectUserRequest::GetDataLength() const { PINDEX length = 0; length += m_nodeToEject.GetObjectLength(); length += m_reason.GetObjectLength(); return length; } PBoolean GCC_ConferenceEjectUserRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nodeToEject.Decode(strm)) return FALSE; if (!m_reason.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceEjectUserRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nodeToEject.Encode(strm); m_reason.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceEjectUserRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceEjectUserRequest::Class()), PInvalidCast); #endif return new GCC_ConferenceEjectUserRequest(*this); } // // ConferenceEjectUserResponse // GCC_ConferenceEjectUserResponse::GCC_ConferenceEjectUserResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceEjectUserResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "nodeToEject = " << setprecision(indent) << m_nodeToEject << '\n'; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceEjectUserResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceEjectUserResponse), PInvalidCast); #endif const GCC_ConferenceEjectUserResponse & other = (const GCC_ConferenceEjectUserResponse &)obj; Comparison result; if ((result = m_nodeToEject.Compare(other.m_nodeToEject)) != EqualTo) return result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceEjectUserResponse::GetDataLength() const { PINDEX length = 0; length += m_nodeToEject.GetObjectLength(); length += m_result.GetObjectLength(); return length; } PBoolean GCC_ConferenceEjectUserResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nodeToEject.Decode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceEjectUserResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nodeToEject.Encode(strm); m_result.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceEjectUserResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceEjectUserResponse::Class()), PInvalidCast); #endif return new GCC_ConferenceEjectUserResponse(*this); } // // ConferenceEjectUserIndication // GCC_ConferenceEjectUserIndication::GCC_ConferenceEjectUserIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_ConferenceEjectUserIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "nodeToEject = " << setprecision(indent) << m_nodeToEject << '\n'; strm << setw(indent+9) << "reason = " << setprecision(indent) << m_reason << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceEjectUserIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceEjectUserIndication), PInvalidCast); #endif const GCC_ConferenceEjectUserIndication & other = (const GCC_ConferenceEjectUserIndication &)obj; Comparison result; if ((result = m_nodeToEject.Compare(other.m_nodeToEject)) != EqualTo) return result; if ((result = m_reason.Compare(other.m_reason)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceEjectUserIndication::GetDataLength() const { PINDEX length = 0; length += m_nodeToEject.GetObjectLength(); length += m_reason.GetObjectLength(); return length; } PBoolean GCC_ConferenceEjectUserIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nodeToEject.Decode(strm)) return FALSE; if (!m_reason.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceEjectUserIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nodeToEject.Encode(strm); m_reason.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceEjectUserIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceEjectUserIndication::Class()), PInvalidCast); #endif return new GCC_ConferenceEjectUserIndication(*this); } // // ConferenceTransferRequest // GCC_ConferenceTransferRequest::GCC_ConferenceTransferRequest(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 4, TRUE, 0) { m_transferringNodes.SetConstraints(PASN_Object::FixedConstraint, 1, 65536); } #ifndef PASN_NOPRINTON void GCC_ConferenceTransferRequest::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "conferenceName = " << setprecision(indent) << m_conferenceName << '\n'; if (HasOptionalField(e_conferenceNameModifier)) strm << setw(indent+25) << "conferenceNameModifier = " << setprecision(indent) << m_conferenceNameModifier << '\n'; if (HasOptionalField(e_networkAddress)) strm << setw(indent+17) << "networkAddress = " << setprecision(indent) << m_networkAddress << '\n'; if (HasOptionalField(e_transferringNodes)) strm << setw(indent+20) << "transferringNodes = " << setprecision(indent) << m_transferringNodes << '\n'; if (HasOptionalField(e_password)) strm << setw(indent+11) << "password = " << setprecision(indent) << m_password << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceTransferRequest::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceTransferRequest), PInvalidCast); #endif const GCC_ConferenceTransferRequest & other = (const GCC_ConferenceTransferRequest &)obj; Comparison result; if ((result = m_conferenceName.Compare(other.m_conferenceName)) != EqualTo) return result; if ((result = m_conferenceNameModifier.Compare(other.m_conferenceNameModifier)) != EqualTo) return result; if ((result = m_networkAddress.Compare(other.m_networkAddress)) != EqualTo) return result; if ((result = m_transferringNodes.Compare(other.m_transferringNodes)) != EqualTo) return result; if ((result = m_password.Compare(other.m_password)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceTransferRequest::GetDataLength() const { PINDEX length = 0; length += m_conferenceName.GetObjectLength(); if (HasOptionalField(e_conferenceNameModifier)) length += m_conferenceNameModifier.GetObjectLength(); if (HasOptionalField(e_networkAddress)) length += m_networkAddress.GetObjectLength(); if (HasOptionalField(e_transferringNodes)) length += m_transferringNodes.GetObjectLength(); if (HasOptionalField(e_password)) length += m_password.GetObjectLength(); return length; } PBoolean GCC_ConferenceTransferRequest::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_conferenceName.Decode(strm)) return FALSE; if (HasOptionalField(e_conferenceNameModifier) && !m_conferenceNameModifier.Decode(strm)) return FALSE; if (HasOptionalField(e_networkAddress) && !m_networkAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_transferringNodes) && !m_transferringNodes.Decode(strm)) return FALSE; if (HasOptionalField(e_password) && !m_password.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceTransferRequest::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_conferenceName.Encode(strm); if (HasOptionalField(e_conferenceNameModifier)) m_conferenceNameModifier.Encode(strm); if (HasOptionalField(e_networkAddress)) m_networkAddress.Encode(strm); if (HasOptionalField(e_transferringNodes)) m_transferringNodes.Encode(strm); if (HasOptionalField(e_password)) m_password.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceTransferRequest::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceTransferRequest::Class()), PInvalidCast); #endif return new GCC_ConferenceTransferRequest(*this); } // // ConferenceTransferResponse // GCC_ConferenceTransferResponse::GCC_ConferenceTransferResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { m_transferringNodes.SetConstraints(PASN_Object::FixedConstraint, 1, 65536); } #ifndef PASN_NOPRINTON void GCC_ConferenceTransferResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "conferenceName = " << setprecision(indent) << m_conferenceName << '\n'; if (HasOptionalField(e_conferenceNameModifier)) strm << setw(indent+25) << "conferenceNameModifier = " << setprecision(indent) << m_conferenceNameModifier << '\n'; if (HasOptionalField(e_transferringNodes)) strm << setw(indent+20) << "transferringNodes = " << setprecision(indent) << m_transferringNodes << '\n'; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceTransferResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceTransferResponse), PInvalidCast); #endif const GCC_ConferenceTransferResponse & other = (const GCC_ConferenceTransferResponse &)obj; Comparison result; if ((result = m_conferenceName.Compare(other.m_conferenceName)) != EqualTo) return result; if ((result = m_conferenceNameModifier.Compare(other.m_conferenceNameModifier)) != EqualTo) return result; if ((result = m_transferringNodes.Compare(other.m_transferringNodes)) != EqualTo) return result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceTransferResponse::GetDataLength() const { PINDEX length = 0; length += m_conferenceName.GetObjectLength(); if (HasOptionalField(e_conferenceNameModifier)) length += m_conferenceNameModifier.GetObjectLength(); if (HasOptionalField(e_transferringNodes)) length += m_transferringNodes.GetObjectLength(); length += m_result.GetObjectLength(); return length; } PBoolean GCC_ConferenceTransferResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_conferenceName.Decode(strm)) return FALSE; if (HasOptionalField(e_conferenceNameModifier) && !m_conferenceNameModifier.Decode(strm)) return FALSE; if (HasOptionalField(e_transferringNodes) && !m_transferringNodes.Decode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceTransferResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_conferenceName.Encode(strm); if (HasOptionalField(e_conferenceNameModifier)) m_conferenceNameModifier.Encode(strm); if (HasOptionalField(e_transferringNodes)) m_transferringNodes.Encode(strm); m_result.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceTransferResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceTransferResponse::Class()), PInvalidCast); #endif return new GCC_ConferenceTransferResponse(*this); } // // ConferenceTransferIndication // GCC_ConferenceTransferIndication::GCC_ConferenceTransferIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 4, TRUE, 0) { m_transferringNodes.SetConstraints(PASN_Object::FixedConstraint, 1, 65536); } #ifndef PASN_NOPRINTON void GCC_ConferenceTransferIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "conferenceName = " << setprecision(indent) << m_conferenceName << '\n'; if (HasOptionalField(e_conferenceNameModifier)) strm << setw(indent+25) << "conferenceNameModifier = " << setprecision(indent) << m_conferenceNameModifier << '\n'; if (HasOptionalField(e_networkAddress)) strm << setw(indent+17) << "networkAddress = " << setprecision(indent) << m_networkAddress << '\n'; if (HasOptionalField(e_transferringNodes)) strm << setw(indent+20) << "transferringNodes = " << setprecision(indent) << m_transferringNodes << '\n'; if (HasOptionalField(e_password)) strm << setw(indent+11) << "password = " << setprecision(indent) << m_password << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConferenceTransferIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConferenceTransferIndication), PInvalidCast); #endif const GCC_ConferenceTransferIndication & other = (const GCC_ConferenceTransferIndication &)obj; Comparison result; if ((result = m_conferenceName.Compare(other.m_conferenceName)) != EqualTo) return result; if ((result = m_conferenceNameModifier.Compare(other.m_conferenceNameModifier)) != EqualTo) return result; if ((result = m_networkAddress.Compare(other.m_networkAddress)) != EqualTo) return result; if ((result = m_transferringNodes.Compare(other.m_transferringNodes)) != EqualTo) return result; if ((result = m_password.Compare(other.m_password)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConferenceTransferIndication::GetDataLength() const { PINDEX length = 0; length += m_conferenceName.GetObjectLength(); if (HasOptionalField(e_conferenceNameModifier)) length += m_conferenceNameModifier.GetObjectLength(); if (HasOptionalField(e_networkAddress)) length += m_networkAddress.GetObjectLength(); if (HasOptionalField(e_transferringNodes)) length += m_transferringNodes.GetObjectLength(); if (HasOptionalField(e_password)) length += m_password.GetObjectLength(); return length; } PBoolean GCC_ConferenceTransferIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_conferenceName.Decode(strm)) return FALSE; if (HasOptionalField(e_conferenceNameModifier) && !m_conferenceNameModifier.Decode(strm)) return FALSE; if (HasOptionalField(e_networkAddress) && !m_networkAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_transferringNodes) && !m_transferringNodes.Decode(strm)) return FALSE; if (HasOptionalField(e_password) && !m_password.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConferenceTransferIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_conferenceName.Encode(strm); if (HasOptionalField(e_conferenceNameModifier)) m_conferenceNameModifier.Encode(strm); if (HasOptionalField(e_networkAddress)) m_networkAddress.Encode(strm); if (HasOptionalField(e_transferringNodes)) m_transferringNodes.Encode(strm); if (HasOptionalField(e_password)) m_password.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConferenceTransferIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConferenceTransferIndication::Class()), PInvalidCast); #endif return new GCC_ConferenceTransferIndication(*this); } // // ApplicationInvokeIndication // GCC_ApplicationInvokeIndication::GCC_ApplicationInvokeIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_applicationProtocolEntiyList.SetConstraints(PASN_Object::FixedConstraint, 1, 65536); m_destinationNodes.SetConstraints(PASN_Object::FixedConstraint, 1, 65536); } #ifndef PASN_NOPRINTON void GCC_ApplicationInvokeIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+31) << "applicationProtocolEntiyList = " << setprecision(indent) << m_applicationProtocolEntiyList << '\n'; if (HasOptionalField(e_destinationNodes)) strm << setw(indent+19) << "destinationNodes = " << setprecision(indent) << m_destinationNodes << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ApplicationInvokeIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ApplicationInvokeIndication), PInvalidCast); #endif const GCC_ApplicationInvokeIndication & other = (const GCC_ApplicationInvokeIndication &)obj; Comparison result; if ((result = m_applicationProtocolEntiyList.Compare(other.m_applicationProtocolEntiyList)) != EqualTo) return result; if ((result = m_destinationNodes.Compare(other.m_destinationNodes)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ApplicationInvokeIndication::GetDataLength() const { PINDEX length = 0; length += m_applicationProtocolEntiyList.GetObjectLength(); if (HasOptionalField(e_destinationNodes)) length += m_destinationNodes.GetObjectLength(); return length; } PBoolean GCC_ApplicationInvokeIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_applicationProtocolEntiyList.Decode(strm)) return FALSE; if (HasOptionalField(e_destinationNodes) && !m_destinationNodes.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ApplicationInvokeIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_applicationProtocolEntiyList.Encode(strm); if (HasOptionalField(e_destinationNodes)) m_destinationNodes.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ApplicationInvokeIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ApplicationInvokeIndication::Class()), PInvalidCast); #endif return new GCC_ApplicationInvokeIndication(*this); } // // RegistryAllocateHandleResponse // GCC_RegistryAllocateHandleResponse::GCC_RegistryAllocateHandleResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_numberOfHandles.SetConstraints(PASN_Object::FixedConstraint, 1, 1024); } #ifndef PASN_NOPRINTON void GCC_RegistryAllocateHandleResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "entityID = " << setprecision(indent) << m_entityID << '\n'; strm << setw(indent+18) << "numberOfHandles = " << setprecision(indent) << m_numberOfHandles << '\n'; strm << setw(indent+14) << "firstHandle = " << setprecision(indent) << m_firstHandle << '\n'; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_RegistryAllocateHandleResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_RegistryAllocateHandleResponse), PInvalidCast); #endif const GCC_RegistryAllocateHandleResponse & other = (const GCC_RegistryAllocateHandleResponse &)obj; Comparison result; if ((result = m_entityID.Compare(other.m_entityID)) != EqualTo) return result; if ((result = m_numberOfHandles.Compare(other.m_numberOfHandles)) != EqualTo) return result; if ((result = m_firstHandle.Compare(other.m_firstHandle)) != EqualTo) return result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_RegistryAllocateHandleResponse::GetDataLength() const { PINDEX length = 0; length += m_entityID.GetObjectLength(); length += m_numberOfHandles.GetObjectLength(); length += m_firstHandle.GetObjectLength(); length += m_result.GetObjectLength(); return length; } PBoolean GCC_RegistryAllocateHandleResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_entityID.Decode(strm)) return FALSE; if (!m_numberOfHandles.Decode(strm)) return FALSE; if (!m_firstHandle.Decode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_RegistryAllocateHandleResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_entityID.Encode(strm); m_numberOfHandles.Encode(strm); m_firstHandle.Encode(strm); m_result.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_RegistryAllocateHandleResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RegistryAllocateHandleResponse::Class()), PInvalidCast); #endif return new GCC_RegistryAllocateHandleResponse(*this); } // // RegistryResponse // GCC_RegistryResponse::GCC_RegistryResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_RegistryResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+11) << "entityID = " << setprecision(indent) << m_entityID << '\n'; strm << setw(indent+16) << "primitiveType = " << setprecision(indent) << m_primitiveType << '\n'; strm << setw(indent+6) << "key = " << setprecision(indent) << m_key << '\n'; strm << setw(indent+7) << "item = " << setprecision(indent) << m_item << '\n'; strm << setw(indent+8) << "owner = " << setprecision(indent) << m_owner << '\n'; if (HasOptionalField(e_modificationRights)) strm << setw(indent+21) << "modificationRights = " << setprecision(indent) << m_modificationRights << '\n'; strm << setw(indent+9) << "result = " << setprecision(indent) << m_result << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_RegistryResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_RegistryResponse), PInvalidCast); #endif const GCC_RegistryResponse & other = (const GCC_RegistryResponse &)obj; Comparison result; if ((result = m_entityID.Compare(other.m_entityID)) != EqualTo) return result; if ((result = m_primitiveType.Compare(other.m_primitiveType)) != EqualTo) return result; if ((result = m_key.Compare(other.m_key)) != EqualTo) return result; if ((result = m_item.Compare(other.m_item)) != EqualTo) return result; if ((result = m_owner.Compare(other.m_owner)) != EqualTo) return result; if ((result = m_modificationRights.Compare(other.m_modificationRights)) != EqualTo) return result; if ((result = m_result.Compare(other.m_result)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_RegistryResponse::GetDataLength() const { PINDEX length = 0; length += m_entityID.GetObjectLength(); length += m_primitiveType.GetObjectLength(); length += m_key.GetObjectLength(); length += m_item.GetObjectLength(); length += m_owner.GetObjectLength(); if (HasOptionalField(e_modificationRights)) length += m_modificationRights.GetObjectLength(); length += m_result.GetObjectLength(); return length; } PBoolean GCC_RegistryResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_entityID.Decode(strm)) return FALSE; if (!m_primitiveType.Decode(strm)) return FALSE; if (!m_key.Decode(strm)) return FALSE; if (!m_item.Decode(strm)) return FALSE; if (!m_owner.Decode(strm)) return FALSE; if (HasOptionalField(e_modificationRights) && !m_modificationRights.Decode(strm)) return FALSE; if (!m_result.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_RegistryResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_entityID.Encode(strm); m_primitiveType.Encode(strm); m_key.Encode(strm); m_item.Encode(strm); m_owner.Encode(strm); if (HasOptionalField(e_modificationRights)) m_modificationRights.Encode(strm); m_result.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_RegistryResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RegistryResponse::Class()), PInvalidCast); #endif return new GCC_RegistryResponse(*this); } // // ConductorPermissionGrantIndication // GCC_ConductorPermissionGrantIndication::GCC_ConductorPermissionGrantIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 1, TRUE, 0) { m_permissionList.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); m_waitingList.SetConstraints(PASN_Object::FixedConstraint, 1, 65536); } #ifndef PASN_NOPRINTON void GCC_ConductorPermissionGrantIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "permissionList = " << setprecision(indent) << m_permissionList << '\n'; if (HasOptionalField(e_waitingList)) strm << setw(indent+14) << "waitingList = " << setprecision(indent) << m_waitingList << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_ConductorPermissionGrantIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_ConductorPermissionGrantIndication), PInvalidCast); #endif const GCC_ConductorPermissionGrantIndication & other = (const GCC_ConductorPermissionGrantIndication &)obj; Comparison result; if ((result = m_permissionList.Compare(other.m_permissionList)) != EqualTo) return result; if ((result = m_waitingList.Compare(other.m_waitingList)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_ConductorPermissionGrantIndication::GetDataLength() const { PINDEX length = 0; length += m_permissionList.GetObjectLength(); if (HasOptionalField(e_waitingList)) length += m_waitingList.GetObjectLength(); return length; } PBoolean GCC_ConductorPermissionGrantIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_permissionList.Decode(strm)) return FALSE; if (HasOptionalField(e_waitingList) && !m_waitingList.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_ConductorPermissionGrantIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_permissionList.Encode(strm); if (HasOptionalField(e_waitingList)) m_waitingList.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_ConductorPermissionGrantIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_ConductorPermissionGrantIndication::Class()), PInvalidCast); #endif return new GCC_ConductorPermissionGrantIndication(*this); } // // FunctionNotSupportedResponse // GCC_FunctionNotSupportedResponse::GCC_FunctionNotSupportedResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void GCC_FunctionNotSupportedResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+10) << "request = " << setprecision(indent) << m_request << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_FunctionNotSupportedResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_FunctionNotSupportedResponse), PInvalidCast); #endif const GCC_FunctionNotSupportedResponse & other = (const GCC_FunctionNotSupportedResponse &)obj; Comparison result; if ((result = m_request.Compare(other.m_request)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_FunctionNotSupportedResponse::GetDataLength() const { PINDEX length = 0; length += m_request.GetObjectLength(); return length; } PBoolean GCC_FunctionNotSupportedResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_request.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_FunctionNotSupportedResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_request.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_FunctionNotSupportedResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_FunctionNotSupportedResponse::Class()), PInvalidCast); #endif return new GCC_FunctionNotSupportedResponse(*this); } // // PasswordChallengeRequestResponse_challengeRequestResponse // GCC_PasswordChallengeRequestResponse_challengeRequestResponse::GCC_PasswordChallengeRequestResponse_challengeRequestResponse(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 2, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_PasswordChallengeRequestResponse_challengeRequestResponse::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; if (HasOptionalField(e_challengeRequest)) strm << setw(indent+19) << "challengeRequest = " << setprecision(indent) << m_challengeRequest << '\n'; if (HasOptionalField(e_challengeResponse)) strm << setw(indent+20) << "challengeResponse = " << setprecision(indent) << m_challengeResponse << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_PasswordChallengeRequestResponse_challengeRequestResponse::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_PasswordChallengeRequestResponse_challengeRequestResponse), PInvalidCast); #endif const GCC_PasswordChallengeRequestResponse_challengeRequestResponse & other = (const GCC_PasswordChallengeRequestResponse_challengeRequestResponse &)obj; Comparison result; if ((result = m_challengeRequest.Compare(other.m_challengeRequest)) != EqualTo) return result; if ((result = m_challengeResponse.Compare(other.m_challengeResponse)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_PasswordChallengeRequestResponse_challengeRequestResponse::GetDataLength() const { PINDEX length = 0; if (HasOptionalField(e_challengeRequest)) length += m_challengeRequest.GetObjectLength(); if (HasOptionalField(e_challengeResponse)) length += m_challengeResponse.GetObjectLength(); return length; } PBoolean GCC_PasswordChallengeRequestResponse_challengeRequestResponse::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (HasOptionalField(e_challengeRequest) && !m_challengeRequest.Decode(strm)) return FALSE; if (HasOptionalField(e_challengeResponse) && !m_challengeResponse.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_PasswordChallengeRequestResponse_challengeRequestResponse::Encode(PASN_Stream & strm) const { PreambleEncode(strm); if (HasOptionalField(e_challengeRequest)) m_challengeRequest.Encode(strm); if (HasOptionalField(e_challengeResponse)) m_challengeResponse.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_PasswordChallengeRequestResponse_challengeRequestResponse::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_PasswordChallengeRequestResponse_challengeRequestResponse::Class()), PInvalidCast); #endif return new GCC_PasswordChallengeRequestResponse_challengeRequestResponse(*this); } // // RosterUpdateIndication_nodeInformation // GCC_RosterUpdateIndication_nodeInformation::GCC_RosterUpdateIndication_nodeInformation(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_rosterInstanceNumber.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void GCC_RosterUpdateIndication_nodeInformation::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+17) << "nodeRecordList = " << setprecision(indent) << m_nodeRecordList << '\n'; strm << setw(indent+23) << "rosterInstanceNumber = " << setprecision(indent) << m_rosterInstanceNumber << '\n'; strm << setw(indent+13) << "nodesAdded = " << setprecision(indent) << m_nodesAdded << '\n'; strm << setw(indent+15) << "nodesRemoved = " << setprecision(indent) << m_nodesRemoved << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_RosterUpdateIndication_nodeInformation::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_RosterUpdateIndication_nodeInformation), PInvalidCast); #endif const GCC_RosterUpdateIndication_nodeInformation & other = (const GCC_RosterUpdateIndication_nodeInformation &)obj; Comparison result; if ((result = m_nodeRecordList.Compare(other.m_nodeRecordList)) != EqualTo) return result; if ((result = m_rosterInstanceNumber.Compare(other.m_rosterInstanceNumber)) != EqualTo) return result; if ((result = m_nodesAdded.Compare(other.m_nodesAdded)) != EqualTo) return result; if ((result = m_nodesRemoved.Compare(other.m_nodesRemoved)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_RosterUpdateIndication_nodeInformation::GetDataLength() const { PINDEX length = 0; length += m_nodeRecordList.GetObjectLength(); length += m_rosterInstanceNumber.GetObjectLength(); length += m_nodesAdded.GetObjectLength(); length += m_nodesRemoved.GetObjectLength(); return length; } PBoolean GCC_RosterUpdateIndication_nodeInformation::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nodeRecordList.Decode(strm)) return FALSE; if (!m_rosterInstanceNumber.Decode(strm)) return FALSE; if (!m_nodesAdded.Decode(strm)) return FALSE; if (!m_nodesRemoved.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_RosterUpdateIndication_nodeInformation::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nodeRecordList.Encode(strm); m_rosterInstanceNumber.Encode(strm); m_nodesAdded.Encode(strm); m_nodesRemoved.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_RosterUpdateIndication_nodeInformation::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RosterUpdateIndication_nodeInformation::Class()), PInvalidCast); #endif return new GCC_RosterUpdateIndication_nodeInformation(*this); } // // NetworkAddress_subtype_aggregatedChannel // GCC_NetworkAddress_subtype_aggregatedChannel::GCC_NetworkAddress_subtype_aggregatedChannel(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 3, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_NetworkAddress_subtype_aggregatedChannel::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+16) << "transferModes = " << setprecision(indent) << m_transferModes << '\n'; strm << setw(indent+22) << "internationalNumber = " << setprecision(indent) << m_internationalNumber << '\n'; if (HasOptionalField(e_subAddress)) strm << setw(indent+13) << "subAddress = " << setprecision(indent) << m_subAddress << '\n'; if (HasOptionalField(e_extraDialing)) strm << setw(indent+15) << "extraDialing = " << setprecision(indent) << m_extraDialing << '\n'; if (HasOptionalField(e_highLayerCompatibility)) strm << setw(indent+25) << "highLayerCompatibility = " << setprecision(indent) << m_highLayerCompatibility << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_NetworkAddress_subtype_aggregatedChannel::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_NetworkAddress_subtype_aggregatedChannel), PInvalidCast); #endif const GCC_NetworkAddress_subtype_aggregatedChannel & other = (const GCC_NetworkAddress_subtype_aggregatedChannel &)obj; Comparison result; if ((result = m_transferModes.Compare(other.m_transferModes)) != EqualTo) return result; if ((result = m_internationalNumber.Compare(other.m_internationalNumber)) != EqualTo) return result; if ((result = m_subAddress.Compare(other.m_subAddress)) != EqualTo) return result; if ((result = m_extraDialing.Compare(other.m_extraDialing)) != EqualTo) return result; if ((result = m_highLayerCompatibility.Compare(other.m_highLayerCompatibility)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_NetworkAddress_subtype_aggregatedChannel::GetDataLength() const { PINDEX length = 0; length += m_transferModes.GetObjectLength(); length += m_internationalNumber.GetObjectLength(); if (HasOptionalField(e_subAddress)) length += m_subAddress.GetObjectLength(); if (HasOptionalField(e_extraDialing)) length += m_extraDialing.GetObjectLength(); if (HasOptionalField(e_highLayerCompatibility)) length += m_highLayerCompatibility.GetObjectLength(); return length; } PBoolean GCC_NetworkAddress_subtype_aggregatedChannel::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_transferModes.Decode(strm)) return FALSE; if (!m_internationalNumber.Decode(strm)) return FALSE; if (HasOptionalField(e_subAddress) && !m_subAddress.Decode(strm)) return FALSE; if (HasOptionalField(e_extraDialing) && !m_extraDialing.Decode(strm)) return FALSE; if (HasOptionalField(e_highLayerCompatibility) && !m_highLayerCompatibility.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_NetworkAddress_subtype_aggregatedChannel::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_transferModes.Encode(strm); m_internationalNumber.Encode(strm); if (HasOptionalField(e_subAddress)) m_subAddress.Encode(strm); if (HasOptionalField(e_extraDialing)) m_extraDialing.Encode(strm); if (HasOptionalField(e_highLayerCompatibility)) m_highLayerCompatibility.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_NetworkAddress_subtype_aggregatedChannel::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_NetworkAddress_subtype_aggregatedChannel::Class()), PInvalidCast); #endif return new GCC_NetworkAddress_subtype_aggregatedChannel(*this); } // // RosterUpdateIndication_applicationInformation_subtype // GCC_RosterUpdateIndication_applicationInformation_subtype::GCC_RosterUpdateIndication_applicationInformation_subtype(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { m_rosterInstanceNumber.SetConstraints(PASN_Object::FixedConstraint, 0, 65535); } #ifndef PASN_NOPRINTON void GCC_RosterUpdateIndication_applicationInformation_subtype::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+13) << "sessionKey = " << setprecision(indent) << m_sessionKey << '\n'; strm << setw(indent+24) << "applicationRecordList = " << setprecision(indent) << m_applicationRecordList << '\n'; strm << setw(indent+30) << "applicationCapabilitiesList = " << setprecision(indent) << m_applicationCapabilitiesList << '\n'; strm << setw(indent+23) << "rosterInstanceNumber = " << setprecision(indent) << m_rosterInstanceNumber << '\n'; strm << setw(indent+20) << "peerEntitiesAdded = " << setprecision(indent) << m_peerEntitiesAdded << '\n'; strm << setw(indent+22) << "peerEntitiesRemoved = " << setprecision(indent) << m_peerEntitiesRemoved << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_RosterUpdateIndication_applicationInformation_subtype::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_RosterUpdateIndication_applicationInformation_subtype), PInvalidCast); #endif const GCC_RosterUpdateIndication_applicationInformation_subtype & other = (const GCC_RosterUpdateIndication_applicationInformation_subtype &)obj; Comparison result; if ((result = m_sessionKey.Compare(other.m_sessionKey)) != EqualTo) return result; if ((result = m_applicationRecordList.Compare(other.m_applicationRecordList)) != EqualTo) return result; if ((result = m_applicationCapabilitiesList.Compare(other.m_applicationCapabilitiesList)) != EqualTo) return result; if ((result = m_rosterInstanceNumber.Compare(other.m_rosterInstanceNumber)) != EqualTo) return result; if ((result = m_peerEntitiesAdded.Compare(other.m_peerEntitiesAdded)) != EqualTo) return result; if ((result = m_peerEntitiesRemoved.Compare(other.m_peerEntitiesRemoved)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_RosterUpdateIndication_applicationInformation_subtype::GetDataLength() const { PINDEX length = 0; length += m_sessionKey.GetObjectLength(); length += m_applicationRecordList.GetObjectLength(); length += m_applicationCapabilitiesList.GetObjectLength(); length += m_rosterInstanceNumber.GetObjectLength(); length += m_peerEntitiesAdded.GetObjectLength(); length += m_peerEntitiesRemoved.GetObjectLength(); return length; } PBoolean GCC_RosterUpdateIndication_applicationInformation_subtype::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_sessionKey.Decode(strm)) return FALSE; if (!m_applicationRecordList.Decode(strm)) return FALSE; if (!m_applicationCapabilitiesList.Decode(strm)) return FALSE; if (!m_rosterInstanceNumber.Decode(strm)) return FALSE; if (!m_peerEntitiesAdded.Decode(strm)) return FALSE; if (!m_peerEntitiesRemoved.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_RosterUpdateIndication_applicationInformation_subtype::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_sessionKey.Encode(strm); m_applicationRecordList.Encode(strm); m_applicationCapabilitiesList.Encode(strm); m_rosterInstanceNumber.Encode(strm); m_peerEntitiesAdded.Encode(strm); m_peerEntitiesRemoved.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_RosterUpdateIndication_applicationInformation_subtype::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RosterUpdateIndication_applicationInformation_subtype::Class()), PInvalidCast); #endif return new GCC_RosterUpdateIndication_applicationInformation_subtype(*this); } // // RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype // GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype::GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "nodeID = " << setprecision(indent) << m_nodeID << '\n'; strm << setw(indent+13) << "nodeRecord = " << setprecision(indent) << m_nodeRecord << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype), PInvalidCast); #endif const GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype & other = (const GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype &)obj; Comparison result; if ((result = m_nodeID.Compare(other.m_nodeID)) != EqualTo) return result; if ((result = m_nodeRecord.Compare(other.m_nodeRecord)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype::GetDataLength() const { PINDEX length = 0; length += m_nodeID.GetObjectLength(); length += m_nodeRecord.GetObjectLength(); return length; } PBoolean GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nodeID.Decode(strm)) return FALSE; if (!m_nodeRecord.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nodeID.Encode(strm); m_nodeRecord.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype::Class()), PInvalidCast); #endif return new GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_refresh_subtype(*this); } // // RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype // GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype::GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "nodeID = " << setprecision(indent) << m_nodeID << '\n'; strm << setw(indent+13) << "nodeUpdate = " << setprecision(indent) << m_nodeUpdate << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype), PInvalidCast); #endif const GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype & other = (const GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype &)obj; Comparison result; if ((result = m_nodeID.Compare(other.m_nodeID)) != EqualTo) return result; if ((result = m_nodeUpdate.Compare(other.m_nodeUpdate)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype::GetDataLength() const { PINDEX length = 0; length += m_nodeID.GetObjectLength(); length += m_nodeUpdate.GetObjectLength(); return length; } PBoolean GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nodeID.Decode(strm)) return FALSE; if (!m_nodeUpdate.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nodeID.Encode(strm); m_nodeUpdate.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype::Class()), PInvalidCast); #endif return new GCC_RosterUpdateIndication_nodeInformation_nodeRecordList_update_subtype(*this); } // // RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype // GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype::GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "nodeID = " << setprecision(indent) << m_nodeID << '\n'; strm << setw(indent+11) << "entityID = " << setprecision(indent) << m_entityID << '\n'; strm << setw(indent+20) << "applicationRecord = " << setprecision(indent) << m_applicationRecord << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype), PInvalidCast); #endif const GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype & other = (const GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype &)obj; Comparison result; if ((result = m_nodeID.Compare(other.m_nodeID)) != EqualTo) return result; if ((result = m_entityID.Compare(other.m_entityID)) != EqualTo) return result; if ((result = m_applicationRecord.Compare(other.m_applicationRecord)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype::GetDataLength() const { PINDEX length = 0; length += m_nodeID.GetObjectLength(); length += m_entityID.GetObjectLength(); length += m_applicationRecord.GetObjectLength(); return length; } PBoolean GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nodeID.Decode(strm)) return FALSE; if (!m_entityID.Decode(strm)) return FALSE; if (!m_applicationRecord.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nodeID.Encode(strm); m_entityID.Encode(strm); m_applicationRecord.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype::Class()), PInvalidCast); #endif return new GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_refresh_subtype(*this); } // // RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype // GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype::GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, FALSE, 0) { } #ifndef PASN_NOPRINTON void GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+9) << "nodeID = " << setprecision(indent) << m_nodeID << '\n'; strm << setw(indent+11) << "entityID = " << setprecision(indent) << m_entityID << '\n'; strm << setw(indent+20) << "applicationUpdate = " << setprecision(indent) << m_applicationUpdate << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype), PInvalidCast); #endif const GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype & other = (const GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype &)obj; Comparison result; if ((result = m_nodeID.Compare(other.m_nodeID)) != EqualTo) return result; if ((result = m_entityID.Compare(other.m_entityID)) != EqualTo) return result; if ((result = m_applicationUpdate.Compare(other.m_applicationUpdate)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype::GetDataLength() const { PINDEX length = 0; length += m_nodeID.GetObjectLength(); length += m_entityID.GetObjectLength(); length += m_applicationUpdate.GetObjectLength(); return length; } PBoolean GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_nodeID.Decode(strm)) return FALSE; if (!m_entityID.Decode(strm)) return FALSE; if (!m_applicationUpdate.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_nodeID.Encode(strm); m_entityID.Encode(strm); m_applicationUpdate.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype::Class()), PInvalidCast); #endif return new GCC_RosterUpdateIndication_applicationInformation_subtype_applicationRecordList_update_subtype(*this); } // // RosterUpdateIndication // GCC_RosterUpdateIndication::GCC_RosterUpdateIndication(unsigned tag, PASN_Object::TagClass tagClass) : PASN_Sequence(tag, tagClass, 0, TRUE, 0) { } #ifndef PASN_NOPRINTON void GCC_RosterUpdateIndication::PrintOn(ostream & strm) const { int indent = strm.precision() + 2; strm << "{\n"; strm << setw(indent+14) << "fullRefresh = " << setprecision(indent) << m_fullRefresh << '\n'; strm << setw(indent+18) << "nodeInformation = " << setprecision(indent) << m_nodeInformation << '\n'; strm << setw(indent+25) << "applicationInformation = " << setprecision(indent) << m_applicationInformation << '\n'; strm << setw(indent-1) << setprecision(indent-2) << "}"; } #endif PObject::Comparison GCC_RosterUpdateIndication::Compare(const PObject & obj) const { #ifndef PASN_LEANANDMEAN PAssert(PIsDescendant(&obj, GCC_RosterUpdateIndication), PInvalidCast); #endif const GCC_RosterUpdateIndication & other = (const GCC_RosterUpdateIndication &)obj; Comparison result; if ((result = m_fullRefresh.Compare(other.m_fullRefresh)) != EqualTo) return result; if ((result = m_nodeInformation.Compare(other.m_nodeInformation)) != EqualTo) return result; if ((result = m_applicationInformation.Compare(other.m_applicationInformation)) != EqualTo) return result; return PASN_Sequence::Compare(other); } PINDEX GCC_RosterUpdateIndication::GetDataLength() const { PINDEX length = 0; length += m_fullRefresh.GetObjectLength(); length += m_nodeInformation.GetObjectLength(); length += m_applicationInformation.GetObjectLength(); return length; } PBoolean GCC_RosterUpdateIndication::Decode(PASN_Stream & strm) { if (!PreambleDecode(strm)) return FALSE; if (!m_fullRefresh.Decode(strm)) return FALSE; if (!m_nodeInformation.Decode(strm)) return FALSE; if (!m_applicationInformation.Decode(strm)) return FALSE; return UnknownExtensionsDecode(strm); } void GCC_RosterUpdateIndication::Encode(PASN_Stream & strm) const { PreambleEncode(strm); m_fullRefresh.Encode(strm); m_nodeInformation.Encode(strm); m_applicationInformation.Encode(strm); UnknownExtensionsEncode(strm); } PObject * GCC_RosterUpdateIndication::Clone() const { #ifndef PASN_LEANANDMEAN PAssert(IsClass(GCC_RosterUpdateIndication::Class()), PInvalidCast); #endif return new GCC_RosterUpdateIndication(*this); } #endif // if ! H323_DISABLE_GCC // End of gccpdu.cxx h323plus/src/guid.cxx0000644000175000017500000002136111015524263013354 0ustar markmark/* * guid.cxx * * Globally Unique Identifier * * Open H323 Library * * Copyright (c) 1998-2001 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: guid.cxx,v $ * Revision 1.2 2008/05/23 11:21:23 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:51:05 shorne * First commit of h323plus * * Revision 1.15 2003/04/15 03:04:08 robertj * Fixed string constructor being able to build non null GUID. * * Revision 1.14 2002/10/10 05:33:18 robertj * VxWorks port, thanks Martijn Roest * * Revision 1.13 2002/08/05 10:03:47 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.12 2001/10/03 03:18:29 robertj * Changed to only get (or fake) MAC address once. * * Revision 1.11 2001/04/05 01:45:13 robertj * Fixed MSVC warning. * * Revision 1.10 2001/04/04 07:46:13 robertj * Fixed erros in rading GUID hex string. * * Revision 1.9 2001/04/04 06:46:39 robertj * Fixed errors in time calculation used in GUID. * * Revision 1.8 2001/03/19 05:52:24 robertj * Fixed problem with reading a GUID if there is leading white space. * If get error reading GUID then set the stream fail bit. * * Revision 1.7 2001/03/15 00:25:12 robertj * Fixed problem with hex output sign extending unsigned values. * * Revision 1.6 2001/03/14 05:03:37 robertj * Fixed printing of GUID to have bytes as hex instead of characters. * * Revision 1.5 2001/03/03 00:54:48 yurik * Proper fix for filetime routines used in guid calc done for WinCE * * Revision 1.4 2001/03/02 23:25:49 yurik * fixed typo * * Revision 1.3 2001/03/02 22:50:37 yurik * Used PTime for WinCE port instead of non-portable function * * Revision 1.2 2001/03/02 07:17:41 robertj * Compensated for stupid GNU compiler bug. * * Revision 1.1 2001/03/02 06:59:59 robertj * Enhanced the globally unique identifier class. * */ #include #ifdef __GNUC__ #pragma implementation "guid.h" #endif #include "guid.h" #include #include #include #define GUID_SIZE 16 /////////////////////////////////////////////////////////////////////////////// OpalGloballyUniqueID::OpalGloballyUniqueID() : PBYTEArray(GUID_SIZE) { // Want time of UTC in 0.1 microseconds since 15 Oct 1582. PInt64 timestamp; static PInt64 deltaTime = PInt64(10000000)*24*60*60* ( 16 // Days from 15th October + 31 // Days in December 1583 + 30 // Days in November 1583 #ifdef _WIN32 + (1601-1583)*365 // Whole years + (1601-1583)/4); // Leap days // Get nanoseconds since 1601 #ifndef _WIN32_WCE GetSystemTimeAsFileTime((LPFILETIME)×tamp); #else SYSTEMTIME SystemTime; GetSystemTime(&SystemTime); SystemTimeToFileTime(&SystemTime, (LPFILETIME)×tamp); #endif // _WIN32_WCE timestamp /= 100; #else // _WIN32 + (1970-1583)*365 // Days in years + (1970-1583)/4 // Leap days - 3); // Allow for 1700, 1800, 1900 not leap years #ifdef P_VXWORKS struct timespec ts; clock_gettime(0,&ts); timestamp = (ts.tv_sec*(PInt64)1000000 + ts.tv_nsec*1000)*10; #else struct timeval tv; gettimeofday(&tv, NULL); timestamp = (tv.tv_sec*(PInt64)1000000 + tv.tv_usec)*10; #endif // P_VXWORKS #endif // _WIN32 timestamp += deltaTime; theArray[0] = (BYTE)(timestamp&0xff); theArray[1] = (BYTE)((timestamp>>8)&0xff); theArray[2] = (BYTE)((timestamp>>16)&0xff); theArray[3] = (BYTE)((timestamp>>24)&0xff); theArray[4] = (BYTE)((timestamp>>32)&0xff); theArray[5] = (BYTE)((timestamp>>40)&0xff); theArray[6] = (BYTE)((timestamp>>48)&0xff); theArray[7] = (BYTE)(((timestamp>>56)&0x0f) + 0x10); // Version number is 1 static WORD clockSequence = (WORD)PRandom::Number(); static PInt64 lastTimestamp = 0; if (lastTimestamp < timestamp) lastTimestamp = timestamp; else clockSequence++; theArray[8] = (BYTE)(((clockSequence>>8)&0x1f) | 0x80); // DCE compatible GUID theArray[9] = (BYTE)clockSequence; static PEthSocket::Address macAddress; static PBoolean needMacAddress = TRUE; if (needMacAddress) { PIPSocket::InterfaceTable interfaces; if (PIPSocket::GetInterfaceTable(interfaces)) { for (PINDEX i = 0; i < interfaces.GetSize(); i++) { PString macAddrStr = interfaces[i].GetMACAddress(); if (!macAddrStr && macAddrStr != "44-45-53-54-00-00") { /* not Win32 PPP device */ macAddress = macAddrStr; if (macAddress != NULL) { needMacAddress = FALSE; break; } } } } if (needMacAddress) { PRandom rand; macAddress.ls.l = rand; macAddress.ls.s = (WORD)rand; macAddress.b[0] |= '\x80'; needMacAddress = FALSE; } } memcpy(theArray+10, macAddress.b, 6); } OpalGloballyUniqueID::OpalGloballyUniqueID(const char * cstr) : PBYTEArray(GUID_SIZE) { if (cstr != NULL && *cstr != '\0') { PStringStream strm(cstr); ReadFrom(strm); } } OpalGloballyUniqueID::OpalGloballyUniqueID(const PString & str) : PBYTEArray(GUID_SIZE) { PStringStream strm(str); ReadFrom(strm); } OpalGloballyUniqueID::OpalGloballyUniqueID(const PASN_OctetString & newId) : PBYTEArray(newId) { PAssert(GetSize() == GUID_SIZE, PInvalidParameter); SetSize(GUID_SIZE); } PObject * OpalGloballyUniqueID::Clone() const { PAssert(GetSize() == GUID_SIZE, "OpalGloballyUniqueID is invalid size"); return new OpalGloballyUniqueID(*this); } PINDEX OpalGloballyUniqueID::HashFunction() const { PAssert(GetSize() == GUID_SIZE, "OpalGloballyUniqueID is invalid size"); DWORD * words = (DWORD *)theArray; DWORD sum = words[0] + words[1] + words[2] + words[3]; return ((sum >> 25)+(sum >> 15)+sum)%23; } void OpalGloballyUniqueID::PrintOn(ostream & strm) const { PAssert(GetSize() == GUID_SIZE, "OpalGloballyUniqueID is invalid size"); char fillchar = strm.fill(); strm << hex << setfill('0') << setw(2) << (unsigned)(BYTE)theArray[0] << setw(2) << (unsigned)(BYTE)theArray[1] << setw(2) << (unsigned)(BYTE)theArray[2] << setw(2) << (unsigned)(BYTE)theArray[3] << '-' << setw(2) << (unsigned)(BYTE)theArray[4] << setw(2) << (unsigned)(BYTE)theArray[5] << '-' << setw(2) << (unsigned)(BYTE)theArray[6] << setw(2) << (unsigned)(BYTE)theArray[7] << '-' << setw(2) << (unsigned)(BYTE)theArray[8] << setw(2) << (unsigned)(BYTE)theArray[9] << '-' << setw(2) << (unsigned)(BYTE)theArray[10] << setw(2) << (unsigned)(BYTE)theArray[11] << setw(2) << (unsigned)(BYTE)theArray[12] << setw(2) << (unsigned)(BYTE)theArray[13] << setw(2) << (unsigned)(BYTE)theArray[14] << setw(2) << (unsigned)(BYTE)theArray[15] << dec << setfill(fillchar); } void OpalGloballyUniqueID::ReadFrom(istream & strm) { PAssert(GetSize() == GUID_SIZE, "OpalGloballyUniqueID is invalid size"); SetSize(16); strm >> ws; PINDEX count = 0; while (count < 2*GUID_SIZE) { if (isxdigit(strm.peek())) { char digit = (char)(strm.get() - '0'); if (digit >= 10) { digit -= 'A'-('9'+1); if (digit >= 16) digit -= 'a'-'A'; } theArray[count/2] = (BYTE)((theArray[count/2] << 4) | digit); count++; } else if (strm.peek() == '-') { if (count != 8 && count != 12 && count != 16 && count != 20) break; strm.get(); // Ignore the dash if it was in the right place } else break; } if (count < 2*GUID_SIZE) { memset(theArray, 0, GUID_SIZE); strm.clear(ios::failbit); } } PString OpalGloballyUniqueID::AsString() const { PStringStream strm; PrintOn(strm); return strm; } PBoolean OpalGloballyUniqueID::IsNULL() const { PAssert(GetSize() == GUID_SIZE, "OpalGloballyUniqueID is invalid size"); return memcmp(theArray, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16) == 0; } ///////////////////////////////////////////////////////////////////////////// h323plus/src/h341/0000755000175000017500000000000011015524406012353 5ustar markmarkh323plus/src/h341/H323GW-MIB.mib0000644000175000017500000016220010655704732014342 0ustar markmark H323GW-MIB DEFINITIONS ::= BEGIN IMPORTS MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE, Unsigned32, Gauge32, Counter32, Counter64, TimeTicks, Integer32 FROM SNMPv2-SMI TEXTUAL-CONVENTION, TAddress, DisplayString, DateAndTime FROM SNMPv2-TC MODULE-COMPLIANCE, OBJECT-GROUP FROM SNMPv2-CONF ifIndex, InterfaceIndex FROM IF-MIB MmTAddressTag, MmGlobalIdentifier, mmH323GatewayRoot, MmErrorSeverity, MmErrorProbableCause, MmControlsCommands, MmAliasTag, MmAliasAddress, MmTerminalAudioCapability, MmTerminalVideoCapability, MmTerminalDataCapability FROM MULTI-MEDIA-MIB-TC; h323Gw MODULE-IDENTITY LAST-UPDATED "9812181200Z" -- December 18, 1998 ORGANIZATION " ITU-T " CONTACT-INFO " ITU-T SG 16 " DESCRIPTION "The MIB Module supports the functions of a H323 gateway." ::= { mmH323GatewayRoot 1 } H323gwSpecificTypes::=TEXTUAL-CONVENTION STATUS current DESCRIPTION "GW Specialization types" SYNTAX INTEGER { other(1), h323(2), h320(3), pstn(4) } H323gwConnectionCommand::=TEXTUAL-CONVENTION STATUS current DESCRIPTION "Commands for a connection: 1. Disconnect 2. Hold (mute) 3. Resume (stop mute) 4. Reset Statistics 5. ..." SYNTAX INTEGER { disconnect(1), hold(2), resume(3), resetStats(4) } -- Groups h323GwSystem OBJECT IDENTIFIER ::= { h323Gw 1 } h323GwConfiguration OBJECT IDENTIFIER ::= { h323Gw 2 } h323GwCapabilities OBJECT IDENTIFIER ::= { h323Gw 3 } h323GwConnections OBJECT IDENTIFIER ::= { h323Gw 4 } h323GwCalls OBJECT IDENTIFIER ::= { h323Gw 5 } h323GwStatistics OBJECT IDENTIFIER ::= { h323Gw 6 } h323GwControls OBJECT IDENTIFIER ::= { h323Gw 7 } h323GwNotifications OBJECT IDENTIFIER ::= { h323Gw 8 0 } -- -- System h323GwSystemTable OBJECT-TYPE SYNTAX SEQUENCE OF H323GwSystemEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table describes the system information for instances of a gateway." ::= { h323GwSystem 1 } h323GwSystemEntry OBJECT-TYPE SYNTAX H323GwSystemEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the system." INDEX { ifIndex } ::= { h323GwSystemTable 1 } H323GwSystemEntry ::= SEQUENCE { h323GwSystemNameAndMaker DisplayString, h323GwSystemSoftwareVersionNumber DisplayString, h323GwSystemHardwareVersionNumber DisplayString, h323GwSystemContact DisplayString, h323GwSystemt35CountryCode INTEGER, h323GwSystemt35CountryCodeExtention INTEGER, h323GwSystemt35ManufacturerCode INTEGER, h323GwSystemLocation DisplayString, h323GwSystemUptime TimeTicks, h323GwSystemLocalTime DateAndTime } h323GwSystemNameAndMaker OBJECT-TYPE SYNTAX DisplayString(SIZE (0..255)) MAX-ACCESS read-only STATUS current DESCRIPTION "This entity's name and maker name. A textual description of this entity may be appended after the maker name. " ::= { h323GwSystemEntry 1 } h323GwSystemSoftwareVersionNumber OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION "Software version number (major and minor)" ::= { h323GwSystemEntry 2 } h323GwSystemHardwareVersionNumber OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION "Hardware version number" ::= { h323GwSystemEntry 3 } h323GwSystemContact OBJECT-TYPE SYNTAX DisplayString (SIZE (0..255)) MAX-ACCESS read-only STATUS current DESCRIPTION "The textual identification of the contact person for this managed node, together with information on how to contact this person." ::= { h323GwSystemEntry 4 } h323GwSystemt35CountryCode OBJECT-TYPE SYNTAX INTEGER (0..255) MAX-ACCESS read-only STATUS current DESCRIPTION "Country code, per T.35." ::= { h323GwSystemEntry 5 } h323GwSystemt35CountryCodeExtention OBJECT-TYPE SYNTAX INTEGER (0..255) MAX-ACCESS read-only STATUS current DESCRIPTION "Assigned nationally." ::= { h323GwSystemEntry 6 } h323GwSystemt35ManufacturerCode OBJECT-TYPE SYNTAX INTEGER (0..65535) MAX-ACCESS read-only STATUS current DESCRIPTION "Assigned nationally." ::= { h323GwSystemEntry 7 } h323GwSystemLocation OBJECT-TYPE SYNTAX DisplayString (SIZE (0..255)) MAX-ACCESS read-only STATUS current DESCRIPTION "The physical location of this system. For instance, closet, terminal room and so on" ::= { h323GwSystemEntry 8 } h323GwSystemUptime OBJECT-TYPE SYNTAX TimeTicks MAX-ACCESS read-only STATUS current DESCRIPTION "The amount of time (in hundredths of a second) since this system was last initialized. Note that this is different from sysUpTime in MIB-II because sysUpTime is the uptime of the network management portion of the system." ::= { h323GwSystemEntry 9 } h323GwSystemLocalTime OBJECT-TYPE SYNTAX DateAndTime MAX-ACCESS read-write STATUS current DESCRIPTION "The local date and time of day." ::= { h323GwSystemEntry 10 } -- h323GwConfiguration -- Gateway configuration h323GwConfigurationTable OBJECT-TYPE SYNTAX SEQUENCE OF H323GwConfigurationEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains configuration information for instances of a gateway." ::= { h323GwConfiguration 1 } h323GwConfigurationEntry OBJECT-TYPE SYNTAX H323GwConfigurationEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the configuration." INDEX { ifIndex } ::= { h323GwConfigurationTable 1 } H323GwConfigurationEntry ::= SEQUENCE { h323GwConfigurationEnableNotifications INTEGER, h323GwConfigurationLeadingAliasAddressTag MmAliasTag, h323GwConfigurationLeadingAliasAddress MmAliasAddress } h323GwConfigurationEnableNotifications OBJECT-TYPE SYNTAX INTEGER { enabled(1), disabled(2) } MAX-ACCESS read-write STATUS current DESCRIPTION "Indicates whether notifications should be generated for this entity. The default is disabled." ::= { h323GwConfigurationEntry 1 } h323GwConfigurationLeadingAliasAddressTag OBJECT-TYPE SYNTAX MmAliasTag MAX-ACCESS read-write STATUS current DESCRIPTION "The alias address tag for the leading alias address. " ::= { h323GwConfigurationEntry 2 } h323GwConfigurationLeadingAliasAddress OBJECT-TYPE SYNTAX MmAliasAddress MAX-ACCESS read-write STATUS current DESCRIPTION "The leading alias address, for example, a PBX extension or PTT number, that this gateway is connected to. This leading alias address acts as a prefix, and is of a fixed length. " ::= { h323GwConfigurationEntry 3 } -- H323 Configuration h323GwConfigurationH323Table OBJECT-TYPE SYNTAX SEQUENCE OF H323GwConfigurationH323Entry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains configuration information, specific to H.323, for instances of a gateway." ::= { h323GwConfiguration 2 } h323GwConfigurationH323Entry OBJECT-TYPE SYNTAX H323GwConfigurationH323Entry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the configuration." INDEX { ifIndex } ::= { h323GwConfigurationH323Table 1 } H323GwConfigurationH323Entry ::= SEQUENCE { h323GwConfigurationH323CallSignalingAddressTag MmTAddressTag, h323GwConfigurationH323CallSignalingAddress TAddress, h323GwConfigurationH323GatekeeperAddressTag MmTAddressTag, h323GwConfigurationH323GatekeeperAddress TAddress } h323GwConfigurationH323CallSignalingAddressTag OBJECT-TYPE SYNTAX MmTAddressTag MAX-ACCESS read-only STATUS current DESCRIPTION "Gateway's call signaling address tag. Specifies how h323GwCallSignalingAddress represents an address " ::= {h323GwConfigurationH323Entry 1 } h323GwConfigurationH323CallSignalingAddress OBJECT-TYPE SYNTAX TAddress MAX-ACCESS read-only STATUS current DESCRIPTION "Gateway's call signaling address" ::= { h323GwConfigurationH323Entry 2 } h323GwConfigurationH323GatekeeperAddressTag OBJECT-TYPE SYNTAX MmTAddressTag MAX-ACCESS read-write STATUS current DESCRIPTION "Gatekeeper address tag. Specifies how h323GwGatekeeperAddress represents an address. If the gateway does not register with a gatekeeper, it is empty" ::= { h323GwConfigurationH323Entry 3 } h323GwConfigurationH323GatekeeperAddress OBJECT-TYPE SYNTAX TAddress MAX-ACCESS read-write STATUS current DESCRIPTION "Gatekeeper address. This is the address of the gatekeeper that the gateway was registered with, if at all. If the gateway does not register with a gatekeeper, it is empty " ::= { h323GwConfigurationH323Entry 4 } -- H320 Configuration h323GwConfigurationH320Table OBJECT-TYPE SYNTAX SEQUENCE OF H323GwConfigurationH320Entry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains configuration information, specific to H.320, for instances of a gateway." ::= { h323GwConfiguration 3 } h323GwConfigurationH320Entry OBJECT-TYPE SYNTAX H323GwConfigurationH320Entry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the configuration." INDEX { ifIndex } ::= { h323GwConfigurationH320Table 1 } H323GwConfigurationH320Entry ::= SEQUENCE { h323GwConfigurationH320TotalPorts Unsigned32 } h323GwConfigurationH320TotalPorts OBJECT-TYPE SYNTAX Unsigned32 MAX-ACCESS read-write STATUS current DESCRIPTION "Total number of H320 Ports available to the gateway" ::= { h323GwConfigurationH320Entry 1 } -- PSTN Configuration h323GwConfigurationPstnTable OBJECT-TYPE SYNTAX SEQUENCE OF H323GwConfigurationPstnEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains configuration information, specific to PSTN, for instances of a gateway." ::= { h323GwConfiguration 4 } h323GwConfigurationPstnEntry OBJECT-TYPE SYNTAX H323GwConfigurationPstnEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the configuration." INDEX { ifIndex } ::= { h323GwConfigurationPstnTable 1 } H323GwConfigurationPstnEntry ::= SEQUENCE { h323GwConfigurationPstnTotalPorts Unsigned32 } h323GwConfigurationPstnTotalPorts OBJECT-TYPE SYNTAX Unsigned32 MAX-ACCESS read-write STATUS current DESCRIPTION "Total number of Pstn Ports available to the gateway" ::= { h323GwConfigurationPstnEntry 1} -- Gw capabilities -- H323 Capabilities h323GwCapabilitiesH323Table OBJECT-TYPE SYNTAX SEQUENCE OF H323GwCapabilitiesH323Entry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains h.323 capability information for instances of a gateway." ::= { h323GwCapabilities 1 } h323GwCapabilitiesH323Entry OBJECT-TYPE SYNTAX H323GwCapabilitiesH323Entry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the h.323 capabilities." INDEX { ifIndex } ::= { h323GwCapabilitiesH323Table 1 } H323GwCapabilitiesH323Entry ::= SEQUENCE { h323GwCapabilitiesH323AudioRecv MmTerminalAudioCapability, h323GwCapabilitiesH323AudioSend MmTerminalAudioCapability, h323GwCapabilitiesH323VideoRecv MmTerminalVideoCapability, h323GwCapabilitiesH323VideoSend MmTerminalVideoCapability, h323GwCapabilitiesH323DataRecv MmTerminalDataCapability, h323GwCapabilitiesH323DataSend MmTerminalDataCapability } h323GwCapabilitiesH323AudioRecv OBJECT-TYPE SYNTAX MmTerminalAudioCapability -- From the textual convention MAX-ACCESS read-only STATUS current DESCRIPTION "List of audio decoding protocols supported by the gateway" ::= { h323GwCapabilitiesH323Entry 1 } h323GwCapabilitiesH323AudioSend OBJECT-TYPE SYNTAX MmTerminalAudioCapability -- From the textual convention MAX-ACCESS read-only STATUS current DESCRIPTION "List of audio encoding protocols supported by the gateway" ::= { h323GwCapabilitiesH323Entry 2 } h323GwCapabilitiesH323VideoRecv OBJECT-TYPE SYNTAX MmTerminalVideoCapability -- From the textual convention MAX-ACCESS read-only STATUS current DESCRIPTION "List of video decoding protocols supported by the gateway" ::= { h323GwCapabilitiesH323Entry 3 } h323GwCapabilitiesH323VideoSend OBJECT-TYPE SYNTAX MmTerminalVideoCapability -- From the textual convention MAX-ACCESS read-only STATUS current DESCRIPTION "List of video encoding protocols supported by the gateway" ::= { h323GwCapabilitiesH323Entry 4 } h323GwCapabilitiesH323DataRecv OBJECT-TYPE SYNTAX MmTerminalDataCapability -- From the textual convention MAX-ACCESS read-only STATUS current DESCRIPTION "List of data decoding protocols supported by the gateway" ::= { h323GwCapabilitiesH323Entry 5 } h323GwCapabilitiesH323DataSend OBJECT-TYPE SYNTAX MmTerminalDataCapability MAX-ACCESS read-only STATUS current DESCRIPTION "List of data encoding protocols supported by the gateway" ::= { h323GwCapabilitiesH323Entry 6 } -- H320 Capabilities h323GwCapabilitiesH320Table OBJECT-TYPE SYNTAX SEQUENCE OF H323GwCapabilitiesH320Entry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains h.320 capability information for instances of a gateway." ::= { h323GwCapabilities 2 } h323GwCapabilitiesH320Entry OBJECT-TYPE SYNTAX H323GwCapabilitiesH320Entry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the h.320 capabilities." INDEX { ifIndex } ::= { h323GwCapabilitiesH320Table 1 } H323GwCapabilitiesH320Entry ::= SEQUENCE { h323GwCapabilitiesH320AudioRecv MmTerminalAudioCapability, h323GwCapabilitiesH320AudioSend MmTerminalAudioCapability, h323GwCapabilitiesH320VideoRecv MmTerminalVideoCapability, h323GwCapabilitiesH320VideoSend MmTerminalVideoCapability, h323GwCapabilitiesH320DataRecv MmTerminalDataCapability, h323GwCapabilitiesH320DataSend MmTerminalDataCapability } h323GwCapabilitiesH320AudioRecv OBJECT-TYPE SYNTAX MmTerminalAudioCapability -- From the textual convention MAX-ACCESS read-only STATUS current DESCRIPTION "List of audio decoding protocols supported by the gateway" ::= { h323GwCapabilitiesH320Entry 1 } h323GwCapabilitiesH320AudioSend OBJECT-TYPE SYNTAX MmTerminalAudioCapability -- From the textual convention MAX-ACCESS read-only STATUS current DESCRIPTION "List of audio encoding protocols supported by the gateway" ::= { h323GwCapabilitiesH320Entry 2 } h323GwCapabilitiesH320VideoRecv OBJECT-TYPE SYNTAX MmTerminalVideoCapability -- From the textual convention MAX-ACCESS read-only STATUS current DESCRIPTION "List of video decoding protocols supported by the gateway" ::= { h323GwCapabilitiesH320Entry 3 } h323GwCapabilitiesH320VideoSend OBJECT-TYPE SYNTAX MmTerminalVideoCapability -- From the textual convention MAX-ACCESS read-only STATUS current DESCRIPTION "List of video encoding protocols supported by the gateway" ::= { h323GwCapabilitiesH320Entry 4 } h323GwCapabilitiesH320DataRecv OBJECT-TYPE SYNTAX MmTerminalDataCapability -- From the textual convention MAX-ACCESS read-only STATUS current DESCRIPTION "List of data decoding protocols supported by the gateway" ::= { h323GwCapabilitiesH320Entry 5 } h323GwCapabilitiesH320DataSend OBJECT-TYPE SYNTAX MmTerminalDataCapability MAX-ACCESS read-only STATUS current DESCRIPTION "List of data encoding protocols supported by the gateway" ::= { h323GwCapabilitiesH320Entry 6 } -- PSTN Capabilities h323GwCapabilitiesPstnTable OBJECT-TYPE SYNTAX SEQUENCE OF H323GwCapabilitiesPstnEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains pstn capability information for instances of a gateway." ::= { h323GwCapabilities 3 } h323GwCapabilitiesPstnEntry OBJECT-TYPE SYNTAX H323GwCapabilitiesPstnEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the pstn capabilities." INDEX { ifIndex } ::= { h323GwCapabilitiesPstnTable 1 } H323GwCapabilitiesPstnEntry ::= SEQUENCE { h323GwCapabilitiesPstnTotalPorts Unsigned32 } h323GwCapabilitiesPstnTotalPorts OBJECT-TYPE SYNTAX Unsigned32 MAX-ACCESS read-only STATUS current DESCRIPTION "Total number of PSTN Channels supported by the gateway" ::= { h323GwCapabilitiesPstnEntry 1 } -- The h323GwConnections group contains the objects that describe -- the devices that are connected to the gateway. These devices -- are either waiting to participate in an active call or are part -- of an active call. There is one generic table and three specific -- tables in this group : h323GwConnections, and h323GwConnectionsH323, -- h323ConnectionsGwH320, h323GwConnectionsPstn. Once the device is -- connected to a gateway the entry -- that describes that device is added to the corresponding table -- H323 gateway connections generic table h323GwConnectionsTable OBJECT-TYPE SYNTAX SEQUENCE OF H323GwConnectionsEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about H.323, H.320 and Pstn devices that are connected to a gateway. It is a list of device entries. The number of entries equals to the number of connected devices. " ::= { h323GwConnections 1 } h323GwConnectionsEntry OBJECT-TYPE SYNTAX H323GwConnectionsEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe a H.323 device." INDEX { ifIndex, h323GwConnectionsEstablishedCallId , h323GwConnectionsIndex } ::= { h323GwConnectionsTable 1 } H323GwConnectionsEntry::= SEQUENCE { h323GwConnectionsEstablishedCallId MmGlobalIdentifier, h323GwConnectionsIndex Integer32, h323GwConnectionsCommand H323gwConnectionCommand, h323GwConnectionsStartTime DateAndTime, h323GwConnectionsTotalErrors Counter32, h323GwConnectionsLastError MmErrorProbableCause, h323GwConnectionsConnectionDirection INTEGER, h323GwConnectionsType H323gwSpecificTypes, h323GwConnectionsAliasAddressTag MmAliasTag, h323GwConnectionsAliasAddress MmAliasAddress, h323GwConnectionsSpecificIndex Integer32 } h323GwConnectionsEstablishedCallId OBJECT-TYPE SYNTAX MmGlobalIdentifier MAX-ACCESS not-accessible STATUS current DESCRIPTION "The H.323 call id of the final connection made by a gateway to complete the call between two H.323 devices. For an H.320 or PSTN endpoint, the value of this ID is zero until this endpoint is joined in a call with an H.323 endpoint. The value of this object can be used to index into the h323GwCallsTable. " ::= { h323GwConnectionsEntry 1 } h323GwConnectionsIndex OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS not-accessible STATUS current DESCRIPTION "An arbitrary index to this table" ::= { h323GwConnectionsEntry 2 } h323GwConnectionsCommand OBJECT-TYPE SYNTAX H323gwConnectionCommand MAX-ACCESS read-write STATUS current DESCRIPTION "A command variable for this connection." ::= { h323GwConnectionsEntry 3 } h323GwConnectionsStartTime OBJECT-TYPE SYNTAX DateAndTime MAX-ACCESS read-only STATUS current DESCRIPTION "The start time of this connection. The start time occurs at the first indication of a call request. " ::= { h323GwConnectionsEntry 4 } h323GwConnectionsTotalErrors OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of errors that occurred since this connection was made. The kind of errors that need to be counted are those that are listed in the given probable causes for errors on a connection, in MmErrorProbableCause. " ::= { h323GwConnectionsEntry 5 } h323GwConnectionsLastError OBJECT-TYPE SYNTAX MmErrorProbableCause MAX-ACCESS read-only STATUS current DESCRIPTION "Probable Cause for the most recent error that has occurred on this connection. This value must be one of the given probable causes for errors on a connection. Values for probable causes for errors on a call or errors on an entity do not apply." ::= { h323GwConnectionsEntry 6 } h323GwConnectionsConnectionDirection OBJECT-TYPE SYNTAX INTEGER { in (1), out (2)} MAX-ACCESS read-only STATUS current DESCRIPTION "A direction of the connection from a gateway point of view. In - remote device called the gateway; Out - the gateway called the remote device." ::= { h323GwConnectionsEntry 7} h323GwConnectionsType OBJECT-TYPE SYNTAX H323gwSpecificTypes MAX-ACCESS read-only STATUS current DESCRIPTION "The specific type of connection." ::= { h323GwConnectionsEntry 8 } h323GwConnectionsAliasAddressTag OBJECT-TYPE SYNTAX MmAliasTag MAX-ACCESS read-only STATUS current DESCRIPTION "The aliasTag for this connected end point." ::= { h323GwConnectionsEntry 9 } h323GwConnectionsAliasAddress OBJECT-TYPE SYNTAX MmAliasAddress MAX-ACCESS read-only STATUS current DESCRIPTION "The aliasAddress for this connected end point." ::= { h323GwConnectionsEntry 10 } h323GwConnectionsSpecificIndex OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "An index to specific parameters. A value of zero indicates that there are no specific parameters." ::= { h323GwConnectionsEntry 11 } -- H323 gateway connections H323 specific table h323GwConnectionsH323Table OBJECT-TYPE SYNTAX SEQUENCE OF H323GwConnectionsH323Entry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about H.323 devices that are connected to a gateway. It is a list of H.323 device entries. The number of entries equals to the number of connected devices. " ::= { h323GwConnections 2 } h323GwConnectionsH323Entry OBJECT-TYPE SYNTAX H323GwConnectionsH323Entry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe a H.323 device." INDEX { h323GwConnectionsH323Index } ::= { h323GwConnectionsH323Table 1 } H323GwConnectionsH323Entry::= SEQUENCE { h323GwConnectionsH323Index Integer32, h323GwConnectionsH323CallSignallingIndex Integer32, h323GwConnectionsH323ControlChannelIndex Integer32, h323GwConnectionsH323RtpSessionIndex Integer32, h323GwConnectionsH323GwIfIndex InterfaceIndex } h323GwConnectionsH323Index OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS not-accessible STATUS current DESCRIPTION "An arbitrary index to this table" ::= { h323GwConnectionsH323Entry 1 } h323GwConnectionsH323CallSignallingIndex OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The index to the call signaling (H.225) table Call signaling MIB" ::= { h323GwConnectionsH323Entry 2 } h323GwConnectionsH323ControlChannelIndex OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The index to the control channel table in H.245 mib" ::= { h323GwConnectionsH323Entry 3 } h323GwConnectionsH323RtpSessionIndex OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The index to the RTP session Table in the RTP mib" ::= { h323GwConnectionsH323Entry 4 } h323GwConnectionsH323GwIfIndex OBJECT-TYPE SYNTAX InterfaceIndex MAX-ACCESS read-create STATUS current DESCRIPTION "The ifIndex value is set to the corresponding value from the Internet Standard MIB. This is the interface of the gateway supporting this connection.." DEFVAL { 1 } ::= { h323GwConnectionsH323Entry 5 } -- H323 gateway connections H320 specific table h323GwConnectionsH320Table OBJECT-TYPE SYNTAX SEQUENCE OF H323GwConnectionsH320Entry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about H.320 connections to a gateway. It is a list of H.320 connection entries. The number of entries equals to the number of connections." ::= { h323GwConnections 3 } h323GwConnectionsH320Entry OBJECT-TYPE SYNTAX H323GwConnectionsH320Entry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe a H.320 connection." INDEX { h323GwConnectionsH320Index } ::= { h323GwConnectionsH320Table 1 } H323GwConnectionsH320Entry::= SEQUENCE { h323GwConnectionsH320Index Integer32, h323GwConnectionsH320CapsH320TableIndex Integer32, h323GwConnectionsH320CallStatusTableIndex Integer32, h323GwConnectionsH320H221StatsTableIndex Integer32, h323GwConnectionsH320GwIfIndex InterfaceIndex } h323GwConnectionsH320Index OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS not-accessible STATUS current DESCRIPTION "An arbitrary index to this table" ::= { h323GwConnectionsH320Entry 1 } h323GwConnectionsH320CapsH320TableIndex OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The index to the table in H.320 entity mib" ::= { h323GwConnectionsH320Entry 2 } h323GwConnectionsH320CallStatusTableIndex OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The index to the table in H.320 entity mib" ::= { h323GwConnectionsH320Entry 3 } h323GwConnectionsH320H221StatsTableIndex OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The index to the table in H.320 entity mib" ::= { h323GwConnectionsH320Entry 4 } h323GwConnectionsH320GwIfIndex OBJECT-TYPE SYNTAX InterfaceIndex MAX-ACCESS read-create STATUS current DESCRIPTION "The ifIndex value is set to the corresponding value from the Internet Standard MIB. This is the interface of the gateway supporting this connection." DEFVAL { 1 } ::= { h323GwConnectionsH320Entry 5 } -- H323 gateway connections PSTN specific table h323GwConnectionsPstnTable OBJECT-TYPE SYNTAX SEQUENCE OF H323GwConnectionsPstnEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about PSTN connections to a gateway. It is a list of PSTN connection entries. The number of entries equals to the number of connections. " ::= { h323GwConnections 4 } h323GwConnectionsPstnEntry OBJECT-TYPE SYNTAX H323GwConnectionsPstnEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe a PSTN connection." INDEX { h323GwConnectionsPstnIndex } ::= { h323GwConnectionsPstnTable 1 } H323GwConnectionsPstnEntry::= SEQUENCE { h323GwConnectionsPstnIndex Integer32, h323GwConnectionsPstnGwIfIndex InterfaceIndex } h323GwConnectionsPstnIndex OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS not-accessible STATUS current DESCRIPTION "An arbitrary index to this table" ::= { h323GwConnectionsPstnEntry 1 } h323GwConnectionsPstnGwIfIndex OBJECT-TYPE SYNTAX InterfaceIndex MAX-ACCESS read-create STATUS current DESCRIPTION "The ifIndex value is set to the corresponding value from the Internet Standard MIB. This is the interface of the gateway supporting this connection.." DEFVAL { 1 } ::= { h323GwConnectionsPstnEntry 2 } -- h323GwCalls group contains objects that define calls between two -- devices through a gateway. These devices could be h.323, h.320 or -- PSTN type. To find out the participants on a call, use GetNext -- on the generic Connections table, specifying the -- h323GwCallsEstablishedCallId. h323GwCallsTable OBJECT-TYPE SYNTAX SEQUENCE OF H323GwCallsTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about calls between two entities made through a gateway. It is a list of calls. The number of entries equals to the number of calls. " ::= { h323GwCalls 1 } h323GwCallsTableEntry OBJECT-TYPE SYNTAX H323GwCallsTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe a call." INDEX { ifIndex, h323GwCallsEstablishedCallId } ::= { h323GwCallsTable 1 } H323GwCallsTableEntry::= SEQUENCE { h323GwCallsEstablishedCallId MmGlobalIdentifier, h323GwCallsNumberOfConnectedDevices Integer32, h323GwCallsGatewayAllocatedCallId Integer32, h323GwCallsStartTime DateAndTime, h323GwCallsTotalErrors Counter32, h323GwCallsLastError MmErrorProbableCause } h323GwCallsEstablishedCallId OBJECT-TYPE SYNTAX MmGlobalIdentifier MAX-ACCESS not-accessible STATUS current DESCRIPTION "The H.323 call id of the connection made by a gateway to complete the call between two devices. " ::= { h323GwCallsTableEntry 1 } h323GwCallsNumberOfConnectedDevices OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of devices that are part of this call." ::= { h323GwCallsTableEntry 2 } h323GwCallsGatewayAllocatedCallId OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The call id that is allocated by the gateway. This number is implementation specific." ::= { h323GwCallsTableEntry 3 } h323GwCallsStartTime OBJECT-TYPE SYNTAX DateAndTime MAX-ACCESS read-only STATUS current DESCRIPTION "The start time of this call." ::= { h323GwCallsTableEntry 4 } h323GwCallsTotalErrors OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of errors that occurred since the start of this call. The kind of errors that need to be counted are those that are listed in the given probable causes for errors on a call, in MmErrorProbableCause. " ::= { h323GwCallsTableEntry 5 } h323GwCallsLastError OBJECT-TYPE SYNTAX MmErrorProbableCause MAX-ACCESS read-only STATUS current DESCRIPTION "Probable Cause for the most recent error that has occurred on this call. This value must be one of the given probable causes for errors on a call. Values for probable causes for errors on a connection or errors on an entity do not apply." ::= { h323GwCallsTableEntry 6 } -- h323GwStatistics -- H.323 statistics -- H.320 statistics -- PSTN statistics -- Statistics h323GwStatisticsTable OBJECT-TYPE SYNTAX SEQUENCE OF H323GwStatisticsEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains statistics information for instances of a gateway." ::= { h323GwStatistics 1 } h323GwStatisticsEntry OBJECT-TYPE SYNTAX H323GwStatisticsEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the statistics." INDEX { ifIndex } ::= { h323GwStatisticsTable 1 } H323GwStatisticsEntry ::= SEQUENCE { h323GwStatisticsTotalCallsNo Counter32, h323GwStatisticsActiveConnectionsNo Gauge32, h323GwStatisticsActiveCallsNo Gauge32, h323GwStatisticsAdditionalEstCalls Gauge32, h323GwStatisticsAvrgSimultaneousCalls Gauge32, h323GwStatisticsAvrgCallTime TimeTicks, h323GwStatisticsTotalErrors Counter32, h323GwStatisticsLastErrorEventTime DateAndTime, h323GwStatisticsLastErrorSeverity MmErrorSeverity, h323GwStatisticsLastErrorProbableCause MmErrorProbableCause, h323GwStatisticsLastErrorAdditionalText DisplayString } h323GwStatisticsTotalCallsNo OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "Total number of calls conducted by the gateway since the last startup" ::= { h323GwStatisticsEntry 1 } h323GwStatisticsActiveConnectionsNo OBJECT-TYPE SYNTAX Gauge32 MAX-ACCESS read-only STATUS current DESCRIPTION "Number of active connections which are currently conducted by the gateway" ::= { h323GwStatisticsEntry 2 } h323GwStatisticsActiveCallsNo OBJECT-TYPE SYNTAX Gauge32 MAX-ACCESS read-only STATUS current DESCRIPTION "Number of active calls which are currently conducted by the gateway" ::= { h323GwStatisticsEntry 3 } h323GwStatisticsAdditionalEstCalls OBJECT-TYPE SYNTAX Gauge32 MAX-ACCESS read-write STATUS current DESCRIPTION "Estimated number of additional simultaneous calls that the gateway can carry out. This is calculated by the application according to the available Gateway's resources, or set by the management to limit overloading" ::= { h323GwStatisticsEntry 4 } h323GwStatisticsAvrgSimultaneousCalls OBJECT-TYPE SYNTAX Gauge32 MAX-ACCESS read-only STATUS current DESCRIPTION "Average number of simultaneous calls (since last restart)" ::= { h323GwStatisticsEntry 5 } h323GwStatisticsAvrgCallTime OBJECT-TYPE SYNTAX TimeTicks MAX-ACCESS read-only STATUS current DESCRIPTION "Average call time (since the last restart)" ::= { h323GwStatisticsEntry 6 } h323GwStatisticsTotalErrors OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of gateway errors that have occurred in the gateway, since the gateway started up. The kind of errors that need to be counted are those that are listed in the given probable causes for errors on an entity, in MmErrorProbableCause. " ::= { h323GwStatisticsEntry 7 } h323GwStatisticsLastErrorEventTime OBJECT-TYPE SYNTAX DateAndTime MAX-ACCESS read-only STATUS current DESCRIPTION " The date and time for the most recent error that has occurred in the gateway." ::= { h323GwStatisticsEntry 8 } h323GwStatisticsLastErrorSeverity OBJECT-TYPE SYNTAX MmErrorSeverity MAX-ACCESS read-only STATUS current DESCRIPTION "Severity for the most recent error that has occurred in the gateway." ::= { h323GwStatisticsEntry 9 } h323GwStatisticsLastErrorProbableCause OBJECT-TYPE SYNTAX MmErrorProbableCause MAX-ACCESS read-only STATUS current DESCRIPTION "Probable Cause for the most recent error that has occurred in the gateway. This value must be one of the given probable causes for errors on an entity. Values for probable causes for errors on a call or errors on a connection do not apply." ::= { h323GwStatisticsEntry 10 } h323GwStatisticsLastErrorAdditionalText OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION "String Description of the most recent error that has occurred in the gateway." ::= { h323GwStatisticsEntry 11 } -- H.323 Statistics h323GwStatisticsH323Table OBJECT-TYPE SYNTAX SEQUENCE OF H323GwStatisticsH323Entry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains H323 statistics information for instances of a gateway." ::= { h323GwStatistics 2 } h323GwStatisticsH323Entry OBJECT-TYPE SYNTAX H323GwStatisticsH323Entry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the H323 statistics." INDEX { ifIndex } ::= { h323GwStatisticsH323Table 1 } H323GwStatisticsH323Entry ::= SEQUENCE { h323GwStatisticsH323TotalPacketsLost Counter32, h323GwStatisticsH323PacketsRecv Counter32, h323GwStatisticsH323PacketsSent Counter32, h323GwStatisticsH323BytesRecv Counter64, h323GwStatisticsH323BytesSent Counter64, h323GwStatisticsH323ActiveConnectionsNo Gauge32 } h323GwStatisticsH323TotalPacketsLost OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of packets lost since the last startup. This parameter is applicable to the non guaranteed network (h323)" ::= { h323GwStatisticsH323Entry 1 } h323GwStatisticsH323PacketsRecv OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "Total number of packets received by the gateway from all the H323 connections since last startup" ::= { h323GwStatisticsH323Entry 2 } h323GwStatisticsH323PacketsSent OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "Total number of packets sent by the gateway to all the H323 connections since last startup" ::= { h323GwStatisticsH323Entry 3 } h323GwStatisticsH323BytesRecv OBJECT-TYPE SYNTAX Counter64 MAX-ACCESS read-only STATUS current DESCRIPTION "Total number of bytes received by the gateway from all the H323 connections since last startup" ::= { h323GwStatisticsH323Entry 4 } h323GwStatisticsH323BytesSent OBJECT-TYPE SYNTAX Counter64 MAX-ACCESS read-only STATUS current DESCRIPTION "Total number of bytes sent by the gateway to all the H323 connections since last startup" ::= { h323GwStatisticsH323Entry 5 } h323GwStatisticsH323ActiveConnectionsNo OBJECT-TYPE SYNTAX Gauge32 MAX-ACCESS read-only STATUS current DESCRIPTION "Number of active H.323 connections which are currently conducted by the gateway" ::= { h323GwStatisticsH323Entry 6 } -- H.320 Statistics h323GwStatisticsH320Table OBJECT-TYPE SYNTAX SEQUENCE OF H323GwStatisticsH320Entry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains H320 statistics information for instances of a gateway." ::= { h323GwStatistics 3 } h323GwStatisticsH320Entry OBJECT-TYPE SYNTAX H323GwStatisticsH320Entry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the H320 statistics." INDEX { ifIndex } ::= { h323GwStatisticsH320Table 1 } H323GwStatisticsH320Entry ::= SEQUENCE { h323GwStatisticsH320TotalPortsFailed Unsigned32, h323GwStatisticsH320ActiveConnectionsNo Gauge32 } h323GwStatisticsH320TotalPortsFailed OBJECT-TYPE SYNTAX Unsigned32 MAX-ACCESS read-only STATUS current DESCRIPTION "Number of currently failed or unavailable H320 ports in the gateway" ::= { h323GwStatisticsH320Entry 1 } h323GwStatisticsH320ActiveConnectionsNo OBJECT-TYPE SYNTAX Gauge32 MAX-ACCESS read-only STATUS current DESCRIPTION "Number of active H.320 connections which are currently conducted by the gateway" ::= { h323GwStatisticsH320Entry 2 } -- PSTN Statistics h323GwStatisticsPstnTable OBJECT-TYPE SYNTAX SEQUENCE OF H323GwStatisticsPstnEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains Pstn statistics information for instances of a gateway." ::= { h323GwStatistics 4 } h323GwStatisticsPstnEntry OBJECT-TYPE SYNTAX H323GwStatisticsPstnEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the Pstn statistics." INDEX { ifIndex } ::= { h323GwStatisticsPstnTable 1 } H323GwStatisticsPstnEntry ::= SEQUENCE { h323GwStatisticsPstnTotalPortsFailed Unsigned32, h323GwStatisticsPstnTotalUnusedPorts Unsigned32, h323GwStatisticsPstnActiveConnectionsNo Gauge32 } h323GwStatisticsPstnTotalPortsFailed OBJECT-TYPE SYNTAX Unsigned32 MAX-ACCESS read-only STATUS current DESCRIPTION "Number of currently failed or unavailable PSTN ports in the gateway" ::= { h323GwStatisticsPstnEntry 1} h323GwStatisticsPstnTotalUnusedPorts OBJECT-TYPE SYNTAX Unsigned32 MAX-ACCESS read-only STATUS current DESCRIPTION "Total number of unused PSTN ports" ::= { h323GwStatisticsPstnEntry 2 } h323GwStatisticsPstnActiveConnectionsNo OBJECT-TYPE SYNTAX Gauge32 MAX-ACCESS read-only STATUS current DESCRIPTION "Number of active Pstn connections which are currently conducted by the gateway" ::= { h323GwStatisticsPstnEntry 3 } -- -- -- Commands and controls h323GwControlsCommands OBJECT-TYPE SYNTAX MmControlsCommands MAX-ACCESS read-write STATUS current DESCRIPTION "A value that represents a command for the gateway. For the list of possible commands, please refer to MmControlsCommands ." ::= { h323GwControls 1} -- Notifications -- General Gateway Notification (In the gateway level) h323GwStart NOTIFICATION-TYPE OBJECTS { ifIndex } STATUS current DESCRIPTION "Signifies that the gateway has started. All MIB counters have gone to zero." ::= { h323GwNotifications 1 } h323GwGoingDown NOTIFICATION-TYPE OBJECTS { ifIndex } STATUS current DESCRIPTION "Signifies that the gateway is about to go down" ::= { h323GwNotifications 2 } h323GwError NOTIFICATION-TYPE OBJECTS { ifIndex, h323GwStatisticsLastErrorEventTime, h323GwStatisticsLastErrorSeverity , h323GwStatisticsLastErrorProbableCause } STATUS current DESCRIPTION "Signifies that an error has occurred in the gateway. " ::= { h323GwNotifications 3 } -- -- CONFORMANCE -- h323GwMIBConformance OBJECT IDENTIFIER ::= { h323Gw 9 } h323GwMIBCompliance OBJECT IDENTIFIER ::= { h323GwMIBConformance 1 } h323GwMIBGroups OBJECT IDENTIFIER ::= { h323GwMIBConformance 2 } h323GwCompliance MODULE-COMPLIANCE STATUS current DESCRIPTION "The set of objects required for compliance." MODULE MANDATORY-GROUPS { h323GwSystemGroup, h323GwConfigurationGroup, h323GwCapabilitiesGroup, h323GwConnectionsGroup, h323GwCallsGroup, h323GwStatisticsGroup, h323GwNotificationsGroup, h323GwControlsGroup } ::= { h323GwMIBCompliance 1 } -- -- Groups for Conformance -- h323GwSystemGroup OBJECT-GROUP OBJECTS { h323GwSystemNameAndMaker, h323GwSystemSoftwareVersionNumber, h323GwSystemHardwareVersionNumber, h323GwSystemContact, h323GwSystemt35CountryCode, h323GwSystemt35CountryCodeExtention, h323GwSystemt35ManufacturerCode, h323GwSystemLocation, h323GwSystemUptime, h323GwSystemLocalTime } STATUS current DESCRIPTION "The set of objects a gateway must support for the GW System Description." ::= { h323GwMIBGroups 1 } h323GwConfigurationGroup OBJECT-GROUP OBJECTS { h323GwConfigurationEnableNotifications, h323GwConfigurationLeadingAliasAddressTag, h323GwConfigurationLeadingAliasAddress, h323GwConfigurationH323CallSignalingAddressTag, h323GwConfigurationH323CallSignalingAddress, h323GwConfigurationH323GatekeeperAddressTag, h323GwConfigurationH323GatekeeperAddress, h323GwConfigurationH320TotalPorts, h323GwConfigurationPstnTotalPorts } STATUS current DESCRIPTION "The set of objects a gateway must support for the GW Configuration." ::= { h323GwMIBGroups 2 } h323GwCapabilitiesGroup OBJECT-GROUP OBJECTS { h323GwCapabilitiesH323AudioRecv, h323GwCapabilitiesH323AudioSend, h323GwCapabilitiesH323VideoRecv, h323GwCapabilitiesH323VideoSend, h323GwCapabilitiesH323DataRecv, h323GwCapabilitiesH323DataSend, h323GwCapabilitiesPstnTotalPorts } STATUS current DESCRIPTION "The set of objects a gateway must support for the GW Capabilities." ::= { h323GwMIBGroups 3 } h323GwConnectionsGroup OBJECT-GROUP OBJECTS { h323GwConnectionsCommand, h323GwConnectionsStartTime, h323GwConnectionsTotalErrors, h323GwConnectionsLastError, h323GwConnectionsConnectionDirection, h323GwConnectionsType, h323GwConnectionsAliasAddressTag, h323GwConnectionsAliasAddress, h323GwConnectionsSpecificIndex, h323GwConnectionsH323CallSignallingIndex, h323GwConnectionsH323ControlChannelIndex, h323GwConnectionsH323RtpSessionIndex, h323GwConnectionsH320CapsH320TableIndex, h323GwConnectionsH320CallStatusTableIndex, h323GwConnectionsH320H221StatsTableIndex } STATUS current DESCRIPTION "The set of objects a gateway must support for the GW Connections." ::= { h323GwMIBGroups 4 } h323GwCallsGroup OBJECT-GROUP OBJECTS { h323GwCallsNumberOfConnectedDevices, h323GwCallsGatewayAllocatedCallId, h323GwCallsStartTime, h323GwCallsTotalErrors, h323GwCallsLastError } STATUS current DESCRIPTION "The set of objects a gateway must support for the GW Calls." ::= { h323GwMIBGroups 5 } h323GwStatisticsGroup OBJECT-GROUP OBJECTS { h323GwStatisticsTotalCallsNo, h323GwStatisticsActiveConnectionsNo, h323GwStatisticsActiveCallsNo, h323GwStatisticsAdditionalEstCalls, h323GwStatisticsAvrgSimultaneousCalls, h323GwStatisticsAvrgCallTime, h323GwStatisticsTotalErrors, h323GwStatisticsLastErrorEventTime, h323GwStatisticsLastErrorSeverity, h323GwStatisticsLastErrorProbableCause, h323GwStatisticsLastErrorAdditionalText, h323GwStatisticsH323TotalPacketsLost, h323GwStatisticsH323PacketsRecv, h323GwStatisticsH323PacketsSent, h323GwStatisticsH323BytesRecv, h323GwStatisticsH323BytesSent, h323GwStatisticsH320TotalPortsFailed, h323GwStatisticsH320ActiveConnectionsNo, h323GwStatisticsPstnTotalPortsFailed, h323GwStatisticsPstnTotalUnusedPorts, h323GwStatisticsPstnActiveConnectionsNo } STATUS current DESCRIPTION "The set of objects a gateway must support for the GW Statistics." ::= { h323GwMIBGroups 6 } h323GwControlsGroup OBJECT-GROUP OBJECTS { h323GwControlsCommands } STATUS current DESCRIPTION "The set of objects a gateway must support for the GW Controls." ::= { h323GwMIBGroups 7 } h323GwNotificationsGroup OBJECT-GROUP OBJECTS { h323GwStart, h323GwGoingDown, h323GwError } STATUS current DESCRIPTION "The set of objects a gateway must support for the GW notifications." ::= { h323GwMIBGroups 8 } END h323plus/src/h341/H323MC-MIB.mib0000644000175000017500000005046010655704732014330 0ustar markmark H323MC-MIB DEFINITIONS ::= BEGIN IMPORTS Integer32, OBJECT-TYPE, MODULE-IDENTITY, NOTIFICATION-TYPE FROM SNMPv2-SMI TAddress, TruthValue, DateAndTime, DisplayString FROM SNMPv2-TC MODULE-COMPLIANCE, OBJECT-GROUP FROM SNMPv2-CONF ifIndex FROM IF-MIB MmTAddressTag, MmGlobalIdentifier, mmH323Root FROM MULTI-MEDIA-MIB-TC; -- this is the MIB module for the H.323 MC objects h323MC MODULE-IDENTITY LAST-UPDATED "9812172253Z" -- December 17, 1998 ORGANIZATION "ITU-T" CONTACT-INFO "ITU-T SG 16 " DESCRIPTION " " ::= { mmH323Root 4 } --groups in H.323 MC h323McSystem OBJECT IDENTIFIER ::= { h323MC 1 } h323McConfig OBJECT IDENTIFIER ::= { h323MC 2 } h323McConference OBJECT IDENTIFIER ::= { h323MC 3 } h323McStats OBJECT IDENTIFIER ::= { h323MC 4 } h323McControls OBJECT IDENTIFIER ::= { h323MC 5 } h323McEvents OBJECT IDENTIFIER ::= { h323MC 6 0 } h323McSystemTable OBJECT-TYPE SYNTAX SEQUENCE OF H323McSystemTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about MC system." ::= { h323McSystem 1 } h323McSystemTableEntry OBJECT-TYPE SYNTAX H323McSystemTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe MC system parameters." INDEX { ifIndex } ::= { h323McSystemTable 1 } H323McSystemTableEntry ::= SEQUENCE { h323McSystemNameAndMaker DisplayString, h323McSystemSoftwareVersionNumber DisplayString, h323McSystemHardwareVersionNumber DisplayString, h323McSystemStartUpTime DateAndTime } h323McSystemNameAndMaker OBJECT-TYPE SYNTAX DisplayString(SIZE (0..255)) MAX-ACCESS read-only STATUS current DESCRIPTION "The MC name and maker name" ::= { h323McSystemTableEntry 1 } h323McSystemSoftwareVersionNumber OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION "Software version number (major and minor)" ::= { h323McSystemTableEntry 2 } h323McSystemHardwareVersionNumber OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION "Hardware version number" ::= { h323McSystemTableEntry 3 } h323McSystemStartUpTime OBJECT-TYPE SYNTAX DateAndTime MAX-ACCESS read-only STATUS current DESCRIPTION "The time and date that the MC was started" ::= { h323McSystemTableEntry 4 } h323McConfigTable OBJECT-TYPE SYNTAX SEQUENCE OF H323McConfigTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about MC configuration. It is a list of MC configuration parameters entries. The number of entries equals to the number of MCs." ::= { h323McConfig 1 } h323McConfigTableEntry OBJECT-TYPE SYNTAX H323McConfigTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe MC configuration parameters." INDEX { ifIndex } ::= { h323McConfigTable 1 } H323McConfigTableEntry ::= SEQUENCE { h323McConfigMcCallSignalingTag MmTAddressTag, h323McConfigMcCallSignalingAddress TAddress, h323McConfigGatekeeperAddressTag MmTAddressTag, h323McConfigGatekeeperAddress TAddress, h323McConfigIsRegisteredWithGatekeeper TruthValue, h323McConfigEnableNotifications INTEGER } h323McConfigMcCallSignalingTag OBJECT-TYPE SYNTAX MmTAddressTag MAX-ACCESS read-only STATUS current DESCRIPTION "The MC call signaling address tag." ::= { h323McConfigTableEntry 1 } h323McConfigMcCallSignalingAddress OBJECT-TYPE SYNTAX TAddress MAX-ACCESS read-only STATUS current DESCRIPTION "The MC call signaling address." ::= { h323McConfigTableEntry 2 } h323McConfigGatekeeperAddressTag OBJECT-TYPE SYNTAX MmTAddressTag MAX-ACCESS read-write STATUS current DESCRIPTION "The GK address tag." ::= { h323McConfigTableEntry 3 } h323McConfigGatekeeperAddress OBJECT-TYPE SYNTAX TAddress MAX-ACCESS read-write STATUS current DESCRIPTION "The address of the gatekeeper that MC is registered with. The network manager may request MC to register with a particular GK by setting the GK address." ::= { h323McConfigTableEntry 4 } h323McConfigIsRegisteredWithGatekeeper OBJECT-TYPE SYNTAX TruthValue MAX-ACCESS read-write STATUS current DESCRIPTION "This value indicates if MC is registered with the gatekeeper." ::= { h323McConfigTableEntry 5 } h323McConfigEnableNotifications OBJECT-TYPE SYNTAX INTEGER { enabled(1), disabled(2) } MAX-ACCESS read-write STATUS current DESCRIPTION "Indicates whether notifications should be generated for this entity. " ::= { h323McConfigTableEntry 6 } h323McConferenceTable OBJECT-TYPE SYNTAX SEQUENCE OF H323McConferenceTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about running conferences. It is a list of conference entries. The number of entries equals to the number of running conferences." ::= { h323McConference 1 } h323McConferenceTableEntry OBJECT-TYPE SYNTAX H323McConferenceTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the conferences." INDEX { ifIndex, h323McConferenceConferenceId} ::= { h323McConferenceTable 1 } H323McConferenceTableEntry ::= SEQUENCE { h323McConferenceConferenceId MmGlobalIdentifier, h323McConferenceConferenceStartTime DateAndTime, h323McConferenceConferenceEndTime DateAndTime, h323McConferenceCentralizedOrDistributed INTEGER, h323McConferenceUniOrMulticast INTEGER, h323McConferenceActiveMcAddress TAddress } h323McConferenceConferenceId OBJECT-TYPE SYNTAX MmGlobalIdentifier MAX-ACCESS read-only STATUS current DESCRIPTION "The conference identifier." ::= { h323McConferenceTableEntry 1 } h323McConferenceConferenceStartTime OBJECT-TYPE SYNTAX DateAndTime MAX-ACCESS read-only STATUS current DESCRIPTION "The conference start time." ::= { h323McConferenceTableEntry 2 } h323McConferenceConferenceEndTime OBJECT-TYPE SYNTAX DateAndTime MAX-ACCESS read-only STATUS current DESCRIPTION "The conference end time." ::= { h323McConferenceTableEntry 3 } h323McConferenceCentralizedOrDistributed OBJECT-TYPE SYNTAX INTEGER {centralized (1), distributed (2)} MAX-ACCESS read-only STATUS current DESCRIPTION "This value indicates whether the conference is centralized or distributed." ::= { h323McConferenceTableEntry 4 } h323McConferenceUniOrMulticast OBJECT-TYPE SYNTAX INTEGER {unicast (1), multicast (2)} MAX-ACCESS read-only STATUS current DESCRIPTION "This value indicates whether the conference is unicast or multicast." ::= { h323McConferenceTableEntry 5 } h323McConferenceActiveMcAddress OBJECT-TYPE SYNTAX TAddress MAX-ACCESS read-only STATUS current DESCRIPTION "The address of active MC. In case of cascading this value is different than MC's own address." ::= { h323McConferenceTableEntry 6 } h323McConferenceParticipantsTable OBJECT-TYPE SYNTAX SEQUENCE OF H323McConferenceParticipantsTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about conference participants. It is a list of participant entries. The number of entries equals to the sum of all participants for all conferences." ::= {h323McConference 2 } h323McConferenceParticipantsTableEntry OBJECT-TYPE SYNTAX H323McConferenceParticipantsTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe a conference participant." INDEX { ifIndex, h323McConferenceConferenceId, h323McConferenceParticipantsTableIndex } ::= { h323McConferenceParticipantsTable 1 } H323McConferenceParticipantsTableEntry ::= SEQUENCE { h323McConferenceParticipantsTableIndex Integer32, h323McConferenceParticipantsTerminalLabel OCTET STRING, h323McConferenceParticipantsCallSignalingTAddressTag MmTAddressTag, h323McConferenceParticipantsCallSignalingAddress TAddress, h323McConferenceParticipantsCallId MmGlobalIdentifier, h323McConferenceParticipantsControlChannelIndex Integer32, h323McConferenceParticipantsNumberOfLogicalChannels Integer32, h323McConferenceParticipantsRtpSessionIndex Integer32 } h323McConferenceParticipantsTableIndex OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS not-accessible STATUS current DESCRIPTION "An arbitrary index to this table. This index is one for the first participant for every given conference. It is incremented by one for each subsequent participant of the same conference. The last index for a particular conference is equal to the number of participants for that conference." ::= { h323McConferenceParticipantsTableEntry 1 } h323McConferenceParticipantsTerminalLabel OBJECT-TYPE SYNTAX OCTET STRING (SIZE(2)) MAX-ACCESS read-only STATUS current DESCRIPTION "The terminal label of this terminal. The first byte represents MCU number and the second byte represents the terminal number." ::= { h323McConferenceParticipantsTableEntry 2 } h323McConferenceParticipantsCallSignalingTAddressTag OBJECT-TYPE SYNTAX MmTAddressTag MAX-ACCESS read-only STATUS current DESCRIPTION "The terminal call signaling address type." ::= { h323McConferenceParticipantsTableEntry 3 } h323McConferenceParticipantsCallSignalingAddress OBJECT-TYPE SYNTAX TAddress MAX-ACCESS read-only STATUS current DESCRIPTION "The terminal call signaling address." ::= { h323McConferenceParticipantsTableEntry 4 } h323McConferenceParticipantsCallId OBJECT-TYPE SYNTAX MmGlobalIdentifier MAX-ACCESS read-only STATUS current DESCRIPTION "The call identifier." ::= { h323McConferenceParticipantsTableEntry 5 } h323McConferenceParticipantsControlChannelIndex OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The index to the control channel table in H.245 MIB. " ::= { h323McConferenceParticipantsTableEntry 6 } h323McConferenceParticipantsNumberOfLogicalChannels OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of logical channels that are used by this participant." ::= { h323McConferenceParticipantsTableEntry 7 } h323McConferenceParticipantsRtpSessionIndex OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The index to the RTP session table in RTP MIB" ::= { h323McConferenceParticipantsTableEntry 8 } h323McStatsTotalConferences OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of conferences since system start up time." ::= { h323McStats 1 } h323McStatsSuccessfullyCompletedConferences OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of conferences that completed successfully." ::= { h323McStats 2 } h323McStatsAbnormalyTerminatedConferences OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of conferences that were terminated abnormaly." ::= { h323McStats 3 } -- Commands and controls h323McControlsCommands OBJECT-TYPE SYNTAX INTEGER { other(1), abruptRestart(2), gracefulRestart (3), abruptShutdown(4), gracefulShutdown (5), enterQuiescence (6), exitQuiescence (7), startLog(8), stopLog(9), resetStatistics(10), runDiagnostic(11) } MAX-ACCESS read-write STATUS current DESCRIPTION "A value that represents a command for the MC. 1. Other (for proprietary extensions) 2. Abrupt Restart (Drastic Restart) 3. Graceful Restart (Restart after all calls have terminated. Meanwhile, accept no calls) 4. Abrupt Shutdown (Drastic Restart) 5. Graceful Shutdown (Shutdown after all calls have terminated. Meanwhile, accept no calls) 6. Enter Quiescence Mode (Disable receiving of calls) 7. Exit Quiescence Mode (Enable receiving of calls) 8. Start Error/Log Reporting 9. Stop Error/Log Reporting 10. Reset Statistics 11. Run Diagnostic" ::= { h323McControls 1} lastConferenceTerminationReason OBJECT-TYPE SYNTAX INTEGER { normalTermination (1), administrativelyTerminated(2)} MAX-ACCESS read-only STATUS current DESCRIPTION "This value identifies the reason for the conference termination." ::= { h323McEvents 1 } lastTerminatedConferenceId OBJECT-TYPE SYNTAX MmGlobalIdentifier MAX-ACCESS read-only STATUS current DESCRIPTION "The number of conferences that were terminated abnormaly." ::= { h323McEvents 2 } conferenceTermination NOTIFICATION-TYPE OBJECTS { lastTerminatedConferenceId, lastConferenceTerminationReason, ifIndex } STATUS current DESCRIPTION "This message will be sent on conference termination for the following reasons: 1 - normally terminated 2 - administratively terminated " ::= {h323McEvents 3} -- conformance; stating the mandatory requirements for the MIB -- -- CONFORMANCE -- h323McMIBConformance OBJECT IDENTIFIER ::= { h323MC 7 } h323McMIBGroups OBJECT IDENTIFIER ::= { h323McMIBConformance 1 } -- -- Groups for Conformance -- h323McSystemGroup OBJECT-GROUP OBJECTS { h323McSystemNameAndMaker, h323McSystemSoftwareVersionNumber, h323McSystemHardwareVersionNumber, h323McSystemStartUpTime } STATUS current DESCRIPTION "." ::= { h323McMIBGroups 1 } h323McConfigGroup OBJECT-GROUP OBJECTS { h323McConfigMcCallSignalingTag, h323McConfigMcCallSignalingAddress, h323McConfigGatekeeperAddressTag, h323McConfigGatekeeperAddress, h323McConfigIsRegisteredWithGatekeeper, h323McConfigEnableNotifications } STATUS current DESCRIPTION "." ::= { h323McMIBGroups 2 } h323McConferenceGroup OBJECT-GROUP OBJECTS { h323McConferenceConferenceId, h323McConferenceConferenceStartTime, h323McConferenceConferenceEndTime, h323McConferenceCentralizedOrDistributed, h323McConferenceUniOrMulticast, h323McConferenceActiveMcAddress, h323McConferenceParticipantsTerminalLabel, h323McConferenceParticipantsCallSignalingTAddressTag, h323McConferenceParticipantsCallSignalingAddress, h323McConferenceParticipantsCallId, h323McConferenceParticipantsControlChannelIndex, h323McConferenceParticipantsNumberOfLogicalChannels, h323McConferenceParticipantsRtpSessionIndex } STATUS current DESCRIPTION "." ::= { h323McMIBGroups 3 } h323McStatsGroup OBJECT-GROUP OBJECTS { h323McStatsTotalConferences, h323McStatsSuccessfullyCompletedConferences, h323McStatsAbnormalyTerminatedConferences } STATUS current DESCRIPTION "." ::= { h323McMIBGroups 4 } h323McControlsGroup OBJECT-GROUP OBJECTS { h323McControlsCommands } STATUS current DESCRIPTION "." ::= { h323McMIBGroups 5 } h323McEventsGroup OBJECT-GROUP OBJECTS { lastConferenceTerminationReason, lastTerminatedConferenceId, conferenceTermination } STATUS current DESCRIPTION "." ::= { h323McMIBGroups 6 } h323McMIBCompliance MODULE-COMPLIANCE STATUS current DESCRIPTION "The set of objects required for compliance." MODULE MANDATORY-GROUPS { h323McSystemGroup, h323McConfigGroup, h323McConferenceGroup, h323McStatsGroup, h323McControlsGroup, h323McEventsGroup } ::= { h323McMIBConformance 2 } END h323plus/src/h341/h341.cxx0000644000175000017500000001143711015524406013564 0ustar markmark/* h341.cxx * * Copyright (c) 2007 ISVO (Asia) Pte Ltd. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is derived from and used in conjunction with the * H323plus Project (www.h323plus.org/) * * The Initial Developer of the Original Code is ISVO (Asia) Pte Ltd. * * * Contributor(s): ______________________________________. * * $Log: h341.cxx,v $ * Revision 1.4 2008/05/23 11:22:46 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.3 2008/01/05 11:36:01 shorne * More Fixes for Linux * * Revision 1.2 2008/01/05 07:11:39 shorne * Major overhaul of H.341 code * * Revision 1.1 2007/08/06 20:51:38 shorne * First commit of h323plus * * Revision 1.1.2.1 2007/08/02 20:12:05 shorne * Added H.341 Support * * * * */ #include #include "openh323buildopts.h" #ifdef H323_H341 #include #include "h341/h341.h" #include "h341/h341_oid.h" H323_H341Server::H323_H341Server(WORD listenPort) : PSNMPServer(PIPSocket::GetDefaultIpAny(), listenPort) { } H323_H341Server::~H323_H341Server() { } static PBoolean ValidateOID(H323_H341Server::messagetype reqType, PSNMP::BindingList & varlist, PSNMP::ErrorType & errCode) { PSNMP::BindingList::const_iterator Iter = varlist.begin(); PBoolean found = FALSE; do { for (Iter = varlist.begin(); Iter != varlist.end(); ++Iter) { for (PINDEX i = 0; i< PARRAYSIZE(H341_Field); i++) { if (H341_Field[i].oid != Iter->first) continue; found = TRUE; switch (reqType) { case H323_H341Server::e_request: case H323_H341Server::e_nextrequest: if (H341_Field[i].access == H341_NoAccess) { PTRACE(4,"H341\tAttribute request FAILED: No permitted access " << Iter->first ); errCode = PSNMP::GenErr; return FALSE; } break; case H323_H341Server::e_set: if (H341_Field[i].access == H341_ReadOnly) { PTRACE(4,"H341\tAttribute set FAILED: Read Only " << Iter->first ); errCode = PSNMP::ReadOnly; return FALSE; } break; default: // Unknown request PTRACE(4,"H341\tGENERAL FAILURE: Unknown request"); errCode = PSNMP::GenErr; return FALSE; } if (Iter->second.GetTag() != (unsigned)H341_Field[i].type ) { PTRACE(4,"H341\tAttribute FAILED Not valid field type " << Iter->first); errCode = PSNMP::BadValue; return FALSE; } break; } if (found) break; } } while (Iter != varlist.end() && !found); if (!found) { PTRACE(4,"H341\tRequest FAILED: Not valid attribute " << Iter->first); errCode = PSNMP::NoSuchName; return FALSE; } return TRUE; } PBoolean H323_H341Server::OnGetRequest(PINDEX /*reqID*/, PSNMP::BindingList & vars, PSNMP::ErrorType & errCode) { messagetype reqType = H323_H341Server::e_request; if (!ValidateOID(reqType,vars, errCode)) return FALSE; return OnRequest(reqType, vars,errCode); } PBoolean H323_H341Server::OnGetNextRequest(PINDEX /*reqID*/, PSNMP::BindingList & vars, PSNMP::ErrorType & errCode) { messagetype reqType = H323_H341Server::e_nextrequest; if (!ValidateOID(reqType,vars, errCode)) return FALSE; return OnRequest(reqType, vars,errCode); } PBoolean H323_H341Server::OnSetRequest(PINDEX /*reqID*/, PSNMP::BindingList & vars, PSNMP::ErrorType & errCode) { messagetype reqType = H323_H341Server::e_set; if (!ValidateOID(reqType,vars, errCode)) return FALSE; return OnRequest(reqType, vars,errCode); } #endif h323plus/src/h341/H323-GATEKEEPER-MIB.mib0000644000175000017500000005216210655704732015523 0ustar markmark -- This defines the MIB in support of the H323 Gatekeeper- H323-GATEKEEPER-MIB DEFINITIONS ::= BEGIN IMPORTS MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE, Counter32, Unsigned32 , TimeTicks, Integer32 FROM SNMPv2-SMI RowStatus, TAddress, TruthValue, DisplayString, DateAndTime FROM SNMPv2-TC MODULE-COMPLIANCE, OBJECT-GROUP FROM SNMPv2-CONF ifIndex FROM IF-MIB MmGatekeeperID, MmTAddressTag, mmH323Root, MmErrorSeverity, MmErrorProbableCause, MmControlsCommands FROM MULTI-MEDIA-MIB-TC; h323Gatekeeper MODULE-IDENTITY LAST-UPDATED "9812181200Z" -- December 18, 1998 ORGANIZATION "ITU-T" CONTACT-INFO "ITU-T SG 16" DESCRIPTION "The MIB Module supports the functions of a H323 gatekeeper." REVISION "9805101200Z" DESCRIPTION "The initial version of the mib." ::= { mmH323Root 6} -- -- -- h323GatekeeperZone OBJECT IDENTIFIER ::= { h323Gatekeeper 1 } h323GatekeeperSystem OBJECT IDENTIFIER ::= { h323Gatekeeper 2 } h323GatekeeperConfiguration OBJECT IDENTIFIER ::= { h323Gatekeeper 3 } h323GatekeeperStatistics OBJECT IDENTIFIER ::= { h323Gatekeeper 4 } h323GatekeeperControls OBJECT IDENTIFIER ::= { h323Gatekeeper 5 } h323GatekeeperNotifications OBJECT IDENTIFIER ::= { h323Gatekeeper 6 0 } -- System h323GatekeeperSystemTable OBJECT-TYPE SYNTAX SEQUENCE OF H323GatekeeperSystemEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table describes the system information for instances of a gatekeeper." ::= { h323GatekeeperSystem 1 } h323GatekeeperSystemEntry OBJECT-TYPE SYNTAX H323GatekeeperSystemEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the system." INDEX { ifIndex } ::= { h323GatekeeperSystemTable 1 } H323GatekeeperSystemEntry ::= SEQUENCE { h323GatekeeperSystemNameAndMaker DisplayString, h323GatekeeperSystemSoftwareVersionNumber DisplayString, h323GatekeeperSystemHardwareVersionNumber DisplayString, h323GatekeeperSystemContact DisplayString, h323GatekeeperSystemt35CountryCode INTEGER, h323GatekeeperSystemt35CountryCodeExtention INTEGER, h323GatekeeperSystemt35ManufacturerCode INTEGER, h323GatekeeperSystemLocation DisplayString, h323GatekeeperSystemUptime TimeTicks, h323GatekeeperSystemLocalTime DateAndTime } h323GatekeeperSystemNameAndMaker OBJECT-TYPE SYNTAX DisplayString(SIZE (0..255)) MAX-ACCESS read-only STATUS current DESCRIPTION "This entity's name and maker name. A textual description of this entity may be appended after the maker name. " ::= { h323GatekeeperSystemEntry 1 } h323GatekeeperSystemSoftwareVersionNumber OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION "Software version number (major and minor)" ::= { h323GatekeeperSystemEntry 2 } h323GatekeeperSystemHardwareVersionNumber OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION "Hardware version number" ::= { h323GatekeeperSystemEntry 3 } h323GatekeeperSystemContact OBJECT-TYPE SYNTAX DisplayString (SIZE (0..255)) MAX-ACCESS read-only STATUS current DESCRIPTION "The textual identification of the contact person for this managed node, together with information on how to contact this person." ::= { h323GatekeeperSystemEntry 4 } h323GatekeeperSystemt35CountryCode OBJECT-TYPE SYNTAX INTEGER (0..255) MAX-ACCESS read-only STATUS current DESCRIPTION "Country code, per T.35." ::= { h323GatekeeperSystemEntry 5 } h323GatekeeperSystemt35CountryCodeExtention OBJECT-TYPE SYNTAX INTEGER (0..255) MAX-ACCESS read-only STATUS current DESCRIPTION "Assigned nationally." ::= { h323GatekeeperSystemEntry 6 } h323GatekeeperSystemt35ManufacturerCode OBJECT-TYPE SYNTAX INTEGER (0..65535) MAX-ACCESS read-only STATUS current DESCRIPTION "Assigned nationally." ::= { h323GatekeeperSystemEntry 7 } h323GatekeeperSystemLocation OBJECT-TYPE SYNTAX DisplayString (SIZE (0..255)) MAX-ACCESS read-only STATUS current DESCRIPTION "The physical location of this system. For instance, closet, terminal room and so on" ::= { h323GatekeeperSystemEntry 8 } h323GatekeeperSystemUptime OBJECT-TYPE SYNTAX TimeTicks MAX-ACCESS read-only STATUS current DESCRIPTION "The amount of time (in hundredths of a second) since this system was last initialized. Note that this is different from sysUpTime in MIB-II because sysUpTime is the uptime of the network management portion of the system." ::= { h323GatekeeperSystemEntry 9 } h323GatekeeperSystemLocalTime OBJECT-TYPE SYNTAX DateAndTime MAX-ACCESS read-write STATUS current DESCRIPTION "The local date and time of day." ::= { h323GatekeeperSystemEntry 10 } -- -- Configuration objects -- h323GatekeeperConfigurationTable OBJECT-TYPE SYNTAX SEQUENCE OF H323GatekeeperConfigurationEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains configuration information for instances of a gatekeeper." ::= { h323GatekeeperConfiguration 1 } h323GatekeeperConfigurationEntry OBJECT-TYPE SYNTAX H323GatekeeperConfigurationEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the configuration." INDEX { ifIndex } ::= { h323GatekeeperConfigurationTable 1 } H323GatekeeperConfigurationEntry ::= SEQUENCE { h323GatekeeperConfigurationEnableNotifications INTEGER, h323GatekeeperConfigurationRegistrationMode INTEGER } h323GatekeeperConfigurationEnableNotifications OBJECT-TYPE SYNTAX INTEGER { enabled(1), disabled(2) } MAX-ACCESS read-write STATUS current DESCRIPTION "Indicates whether notifications should be generated for this entity. The default is disabled." ::= { h323GatekeeperConfigurationEntry 1 } h323GatekeeperConfigurationRegistrationMode OBJECT-TYPE SYNTAX INTEGER { acceptAll(1), acceptNone(2), acceptPredefined(3) } MAX-ACCESS read-write STATUS current DESCRIPTION "Indicates whether gatekeeper allows : 1 - all endpoints to register dynamically 2 - no endpoints to register dynamically 3 - only predefined endpoints to register dynamically " ::= { h323GatekeeperConfigurationEntry 2 } -- -- Zone Information. -- h323ZoneTable OBJECT-TYPE SYNTAX SEQUENCE OF H323ZoneEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "The table contains the local zones supported by the Gatekeeper and the remote zones which the Gatekeeper may or has interacted with." ::= { h323GatekeeperZone 1 } h323ZoneEntry OBJECT-TYPE SYNTAX H323ZoneEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "An entry (conceptual row) in the h323ZoneTable. An entry may be created administratively or by the gatekeeper during normal gatekeeper operations. Unless otherwise specified, writable objects may be changed while h323ZoneRowStatus is 'active'." INDEX { ifIndex, h323ZoneIndex } ::= { h323ZoneTable 1 } H323ZoneEntry::= SEQUENCE { h323ZoneIndex Integer32, h323ZoneZoneName MmGatekeeperID, h323ZoneRasSignalAddressTag MmTAddressTag, h323ZoneRasSignalAddress TAddress, h323ZoneMaxBandwidth Unsigned32, h323ZoneAllocatedBandwidth Integer32, h323ZoneIrrFrequency INTEGER, h323ZoneLocalZone TruthValue, h323ZoneAdmissions Counter32, h323ZoneAdmissionsRejected Counter32, h323ZoneRowStatus RowStatus } h323ZoneIndex OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS not-accessible STATUS current DESCRIPTION "An unsigned integer value whose only significance is to uniquely identify the conceptual row. The value has no significance." ::= { h323ZoneEntry 1 } h323ZoneZoneName OBJECT-TYPE SYNTAX MmGatekeeperID MAX-ACCESS read-create STATUS current DESCRIPTION "The name of the zone as fully qualifed name. e.g. zone1.area1.company.com " ::= { h323ZoneEntry 2 } h323ZoneRasSignalAddressTag OBJECT-TYPE SYNTAX MmTAddressTag MAX-ACCESS read-create STATUS current DESCRIPTION "The tag identifying the underlying type of h323ZoneRasSignalAddress." DEFVAL { ipv4 } ::= { h323ZoneEntry 3 } h323ZoneRasSignalAddress OBJECT-TYPE SYNTAX TAddress MAX-ACCESS read-create STATUS current DESCRIPTION "A RAS Signal transport address of the gatekeeper supporting the zone. " DEFVAL { '00000000'H } ::= { h323ZoneEntry 4 } h323ZoneMaxBandwidth OBJECT-TYPE SYNTAX Unsigned32(0..2147483647) UNITS "100 bps" MAX-ACCESS read-create STATUS current DESCRIPTION "The maximum bidirectional bandwidth which a gatekeeper can allocate to all calls in the zone. If h323ZoneLocalFlag is 'false' then this object may be 0, indicating unknown. h323ZoneMaxBandwidth is the total bidirectional data flow in units of hundred bits per second (bps). A value of 10 is 1000bps." ::= { h323ZoneEntry 5 } h323ZoneAllocatedBandwidth OBJECT-TYPE SYNTAX Integer32 UNITS "100 bps" MAX-ACCESS read-only STATUS current DESCRIPTION "The total bidirectional bandwidth allocated by the gatekeeper to the active calls. If h323ZoneLocalFlag is 'false' then this object does not apply. The value is in units of hundred bits per second, i.e. a value of 10 is 1000 bps. This value may not exceed the value of h323ZoneMaxBandwidth." ::= { h323ZoneEntry 6 } h323ZoneIrrFrequency OBJECT-TYPE SYNTAX INTEGER (1..65535) MAX-ACCESS read-create STATUS current DESCRIPTION "The IRR time a gatekeeper returns in a ACF." DEFVAL { 60 } ::= { h323ZoneEntry 7 } h323ZoneLocalZone OBJECT-TYPE SYNTAX TruthValue MAX-ACCESS read-create STATUS current DESCRIPTION "If this gatekeeper manages the zone, then this value is 'true' otherwise it is false." DEFVAL { true } ::= { h323ZoneEntry 8 } h323ZoneAdmissions OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of ACFs by the gatekeeper. If h323ZoneLocalZone is 'false' then the value of this object has no meaning." ::= { h323ZoneEntry 9 } h323ZoneAdmissionsRejected OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of ARJ sent by the gatekeeper. If h323ZoneLocalZone is 'false' then the value of this object has no meaning." ::= { h323ZoneEntry 10 } h323ZoneRowStatus OBJECT-TYPE SYNTAX RowStatus MAX-ACCESS read-create STATUS current DESCRIPTION "The row status of the entry. This object is required to create or delete rows administratively. A agent implementing this object is not required to support the values 'createAndWait' and 'notInService'." ::= { h323ZoneEntry 11 } -- -- GK Statistics -- h323GatekeeperStatisticsTable OBJECT-TYPE SYNTAX SEQUENCE OF H323GatekeeperStatisticsEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains statistics information for instances of a gatekeeper." ::= { h323GatekeeperStatistics 1 } h323GatekeeperStatisticsEntry OBJECT-TYPE SYNTAX H323GatekeeperStatisticsEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the statistics." INDEX { ifIndex } ::= { h323GatekeeperStatisticsTable 1 } H323GatekeeperStatisticsEntry ::= SEQUENCE { h323GatekeeperStatisticsTotalErrors Counter32, h323GatekeeperStatisticsLastErrorEventTime DateAndTime, h323GatekeeperStatisticsLastErrorSeverity MmErrorSeverity, h323GatekeeperStatisticsLastErrorProbableCause MmErrorProbableCause, h323GatekeeperStatisticsLastErrorAdditionalText DisplayString, h323GatekeeperStatisticsZoneNo Counter32 } h323GatekeeperStatisticsTotalErrors OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "Total number of GK errors that have occurred in the gateway since the last startup" ::= { h323GatekeeperStatisticsEntry 1 } h323GatekeeperStatisticsLastErrorEventTime OBJECT-TYPE SYNTAX DateAndTime MAX-ACCESS read-only STATUS current DESCRIPTION " The date and time for the most recent error that has occurred in the gatekeeper." ::= { h323GatekeeperStatisticsEntry 2 } h323GatekeeperStatisticsLastErrorSeverity OBJECT-TYPE SYNTAX MmErrorSeverity MAX-ACCESS read-only STATUS current DESCRIPTION "Severity for the most recent error that has occurred in the gatekeeper." ::= { h323GatekeeperStatisticsEntry 3 } h323GatekeeperStatisticsLastErrorProbableCause OBJECT-TYPE SYNTAX MmErrorProbableCause MAX-ACCESS read-only STATUS current DESCRIPTION "Probable Cause for the most recent error that has occurred in the gatekeeper. This value must be one of the given probable causes for errors on an entity. Values for probable causes for errors on a call or errors on a connection do not apply." ::= { h323GatekeeperStatisticsEntry 4 } h323GatekeeperStatisticsLastErrorAdditionalText OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION "String Description of the most recent error that has occurred in the gatekeeper." ::= { h323GatekeeperStatisticsEntry 5 } h323GatekeeperStatisticsZoneNo OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of h323 local zones supported by the Gatekeeper and the remote zones which the Gatekeeper may or has interacted with." ::= { h323GatekeeperStatisticsEntry 6 } -- Commands and controls h323GatekeeperControlsCommands OBJECT-TYPE SYNTAX MmControlsCommands MAX-ACCESS read-write STATUS current DESCRIPTION "A value that represents a command for the gateway. For the list of possible commands, please refer to MmControlsCommands " ::= { h323GatekeeperControls 1} -- Notifications -- General Gatekeeper Notifications h323GatekeeperStart NOTIFICATION-TYPE OBJECTS { ifIndex } STATUS current DESCRIPTION "Signifies that the gatekeeper has started. All MIB counters have gone to zero." ::= { h323GatekeeperNotifications 1} h323GatekeeperGoingDown NOTIFICATION-TYPE OBJECTS { ifIndex } STATUS current DESCRIPTION "Signifies that the gatekeeper is about to go down" ::= { h323GatekeeperNotifications 2 } h323GatekeeperError NOTIFICATION-TYPE OBJECTS { ifIndex, h323GatekeeperStatisticsLastErrorEventTime, h323GatekeeperStatisticsLastErrorSeverity, h323GatekeeperStatisticsLastErrorProbableCause } STATUS current DESCRIPTION "Signifies that an error has occurred in the Gatekeeper. " ::= { h323GatekeeperNotifications 3 } -- -- CONFORMANCE -- h323GatekeeperMIBConformance OBJECT IDENTIFIER ::= { h323Gatekeeper 7 } h323GatekeeperMIBCompliance OBJECT IDENTIFIER ::= { h323GatekeeperMIBConformance 1 } h323GatekeeperMIBGroups OBJECT IDENTIFIER ::= { h323GatekeeperMIBConformance 2 } h323GatekeeperCompliance MODULE-COMPLIANCE STATUS current DESCRIPTION "The set of objects required for compliance." MODULE MANDATORY-GROUPS { h323GatekeeperZoneGroup, h323GatekeeperSystem, h323GatekeeperConfigurationGroup, h323GatekeeperStatisticsGroup, h323GatekeeperNotificationsGroup, h323GatekeeperControlsGroup } ::= { h323GatekeeperMIBCompliance 1 } -- -- Groups for Conformance -- h323GatekeeperSystemGroup OBJECT-GROUP OBJECTS { h323GatekeeperSystemNameAndMaker, h323GatekeeperSystemSoftwareVersionNumber, h323GatekeeperSystemHardwareVersionNumber, h323GatekeeperSystemContact, h323GatekeeperSystemt35CountryCode, h323GatekeeperSystemt35CountryCodeExtention, h323GatekeeperSystemt35ManufacturerCode, h323GatekeeperSystemLocation, h323GatekeeperSystemUptime, h323GatekeeperSystemLocalTime } STATUS current DESCRIPTION "The set of objects a gatekeeper must support for the GK System Description." ::= { h323GatekeeperMIBGroups 1 } h323GatekeeperConfigurationGroup OBJECT-GROUP OBJECTS { h323GatekeeperConfigurationEnableNotifications } STATUS current DESCRIPTION "The set of objects a gatekeeper must support for the GK Configuration." ::= { h323GatekeeperMIBGroups 2 } h323GatekeeperZoneGroup OBJECT-GROUP OBJECTS { h323ZoneZoneName, h323ZoneRasSignalAddressTag, h323ZoneRasSignalAddress, h323ZoneMaxBandwidth, h323ZoneAllocatedBandwidth, h323ZoneIrrFrequency, h323ZoneLocalZone, h323ZoneAdmissions, h323ZoneAdmissionsRejected, h323ZoneRowStatus } STATUS current DESCRIPTION "The set of objects a gatekeeper must support for local and remote zones." ::= { h323GatekeeperMIBGroups 3 } h323GatekeeperStatisticsGroup OBJECT-GROUP OBJECTS { h323GatekeeperStatisticsTotalErrors, h323GatekeeperStatisticsLastErrorEventTime, h323GatekeeperStatisticsLastErrorSeverity, h323GatekeeperStatisticsLastErrorProbableCause, h323GatekeeperStatisticsLastErrorAdditionalText, h323GatekeeperStatisticsZoneNo } STATUS current DESCRIPTION "The set of objects a gatekeeper must support for statistics." ::= { h323GatekeeperMIBGroups 4 } h323GatekeeperControlsGroup OBJECT-GROUP OBJECTS { h323GatekeeperControlsCommands } STATUS current DESCRIPTION "The set of objects a gatekeeper must support for controls." ::= { h323GatekeeperMIBGroups 5 } h323GatekeeperNotificationsGroup OBJECT-GROUP OBJECTS { h323GatekeeperStart, h323GatekeeperGoingDown, h323GatekeeperError } STATUS current DESCRIPTION "The set of objects a gatekeeper must support for notifications." ::= { h323GatekeeperMIBGroups 6 } END h323plus/src/h341/H225-MIB.mib0000644000175000017500000011654010655704732014113 0ustar markmark H225-MIB DEFINITIONS ::= BEGIN IMPORTS Counter32, Integer32, Unsigned32, NOTIFICATION-TYPE, OBJECT-TYPE, MODULE-IDENTITY FROM SNMPv2-SMI DisplayString, TAddress, DateAndTime FROM SNMPv2-TC ifIndex FROM IF-MIB MODULE-COMPLIANCE, OBJECT-GROUP FROM SNMPv2-CONF MmTAddressTag, mmH323Root, MmGlobalIdentifier, MmAliasTag, MmAliasAddress, MmH323EndpointType, MmH225Crv, MmCallType FROM MULTI-MEDIA-MIB-TC; h225CallSignaling MODULE-IDENTITY LAST-UPDATED "9812221200Z" -- December 14, 1998 ORGANIZATION " ITU-T SG 16 " CONTACT-INFO " ITU-T SG 16 " DESCRIPTION "The MIB Module supports the functions of a H.225 call signaling ." REVISION "9812141200Z" DESCRIPTION "The initial version of the mib." ::= { mmH323Root 1} -- groups in h225 callSignalConfig OBJECT IDENTIFIER ::= { h225CallSignaling 1 } callSignalStats OBJECT IDENTIFIER ::= { h225CallSignaling 2 } connections OBJECT IDENTIFIER ::= { h225CallSignaling 3 } callSignalEvents OBJECT IDENTIFIER ::= { h225CallSignaling 4 0 } callSignalingMIBConformance OBJECT IDENTIFIER ::= { h225CallSignaling 5 } callSignalConfigTable OBJECT-TYPE SYNTAX SEQUENCE OF CallSignalConfigEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains configuration information for instances of a call signaling protocol." ::= { callSignalConfig 1} callSignalConfigEntry OBJECT-TYPE SYNTAX CallSignalConfigEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the configuration." INDEX { ifIndex } ::= { callSignalConfigTable 1 } CallSignalConfigEntry::= SEQUENCE { callSignalConfigMaxConnections Integer32, callSignalConfigAvailableConnections Integer32, callSignalConfigT303 Integer32, callSignalConfigT301 Integer32, callSignalConfigEnableNotifications INTEGER } callSignalConfigMaxConnections OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The maximum number of connections the H.225 entity can possibly have." ::= { callSignalConfigEntry 1 } callSignalConfigAvailableConnections OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION " The number of available connections, out of callSignalConfigMaxConnections." ::= { callSignalConfigEntry 2 } callSignalConfigT303 OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-write STATUS current DESCRIPTION "The amount of time the calling endpoint waits for an ALERTING, CALL PROCEEDING, CONNECT, RELEASE COMPLETE or other message the called endpoint after it has sent a SETUP message. The time value is in seconds. " ::= { callSignalConfigEntry 3 } callSignalConfigT301 OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-write STATUS current DESCRIPTION "The amount of time after which the calling endpoint should stop waiting for the called endpoint to respond. The time value is in seconds. " ::= { callSignalConfigEntry 4 } callSignalConfigEnableNotifications OBJECT-TYPE SYNTAX INTEGER { enabled(1), disabled(2) } MAX-ACCESS read-write STATUS current DESCRIPTION "Indicates whether notifications should be generated from this MIB. The default is disabled." ::= { callSignalConfigEntry 5} -- -- Statistics -- callSignalStatsTable OBJECT-TYPE SYNTAX SEQUENCE OF CallSignalStatsEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains statistics information for instances of a call signaling protocol." ::= { callSignalStats 1} callSignalStatsEntry OBJECT-TYPE SYNTAX CallSignalStatsEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe statistics." INDEX { ifIndex } ::= { callSignalStatsTable 1 } CallSignalStatsEntry::= SEQUENCE { callSignalStatsCallConnectionsIn Counter32, callSignalStatsCallConnectionsOut Counter32, callSignalStatsAlertingMsgsIn Counter32, callSignalStatsAlertingMsgsOut Counter32, callSignalStatsCallProceedingsIn Counter32, callSignalStatsCallProceedingsOut Counter32, callSignalStatsSetupMsgsIn Counter32, callSignalStatsSetupMsgsOut Counter32, callSignalStatsSetupAckMsgsIn Counter32, callSignalStatsSetupAckMsgsOut Counter32, callSignalStatsProgressMsgsIn Counter32, callSignalStatsProgressMsgsOut Counter32, callSignalStatsReleaseCompleteMsgsIn Counter32, callSignalStatsReleaseCompleteMsgsOut Counter32, callSignalStatsStatusMsgsIn Counter32, callSignalStatsStatusMsgsOut Counter32, callSignalStatsStatusInquiryMsgsIn Counter32, callSignalStatsStatusInquiryMsgsOut Counter32, callSignalStatsFacilityMsgsIn Counter32, callSignalStatsFacilityMsgsOut Counter32, callSignalStatsInfoMsgsIn Counter32, callSignalStatsInfoMsgsOut Counter32, callSignalStatsNotifyMsgsIn Counter32, callSignalStatsNotifyMsgsOut Counter32, callSignalStatsAverageCallDuration Integer32, callSignalStatsCallConnections Counter32, callSignalStatsAlertingMsgs Counter32, callSignalStatsCallProceedings Counter32, callSignalStatsSetupMsgs Counter32, callSignalStatsSetupAckMsgs Counter32, callSignalStatsProgressMsgs Counter32, callSignalStatsReleaseCompleteMsgs Counter32, callSignalStatsStatusMsgs Counter32, callSignalStatsStatusInquiryMsgs Counter32, callSignalStatsFacilityMsgs Counter32, callSignalStatsInfoMsgs Counter32, callSignalStatsNotifyMsgs Counter32 } callSignalStatsCallConnectionsIn OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of successful connections in which this entity has been a callee." ::= { callSignalStatsEntry 1 } callSignalStatsCallConnectionsOut OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of successful connections in which this entity has been a caller." ::= { callSignalStatsEntry 2 } callSignalStatsAlertingMsgsIn OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of alerting messages received by this entity." ::= { callSignalStatsEntry 3 } callSignalStatsAlertingMsgsOut OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of alerting messages sent by this entity." ::= { callSignalStatsEntry 4 } callSignalStatsCallProceedingsIn OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of call proceeding messages received by this entity." ::= { callSignalStatsEntry 5 } callSignalStatsCallProceedingsOut OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of call proceeding messages sent by this entity." ::= { callSignalStatsEntry 6 } callSignalStatsSetupMsgsIn OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of setup messages received by this entity." ::= { callSignalStatsEntry 7 } callSignalStatsSetupMsgsOut OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of setup messages sent by this entity." ::= { callSignalStatsEntry 8 } callSignalStatsSetupAckMsgsIn OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of setupAck messages received by this entity." ::= { callSignalStatsEntry 9 } callSignalStatsSetupAckMsgsOut OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of setupAck messages sent by this entity." ::= { callSignalStatsEntry 10 } callSignalStatsProgressMsgsIn OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of progress messages received by this entity." ::= { callSignalStatsEntry 11 } callSignalStatsProgressMsgsOut OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of progress messages sent by this entity." ::= { callSignalStatsEntry 12 } callSignalStatsReleaseCompleteMsgsIn OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of release complete messages received by this entity." ::= { callSignalStatsEntry 13 } callSignalStatsReleaseCompleteMsgsOut OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of release complete messages sent by this entity." ::= { callSignalStatsEntry 14 } callSignalStatsStatusMsgsIn OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of status messages received by this entity." ::= { callSignalStatsEntry 15 } callSignalStatsStatusMsgsOut OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of status messages sent by this entity." ::= { callSignalStatsEntry 16 } callSignalStatsStatusInquiryMsgsIn OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of status inquiry messages received by this entity." ::= { callSignalStatsEntry 17 } callSignalStatsStatusInquiryMsgsOut OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of status inquiry messages sent by this entity." ::= { callSignalStatsEntry 18 } callSignalStatsFacilityMsgsIn OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of connect messages received by this entity." ::= { callSignalStatsEntry 19 } callSignalStatsFacilityMsgsOut OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of connect messages sent by this entity." ::= { callSignalStatsEntry 20 } callSignalStatsInfoMsgsIn OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of info messages received by this entity." ::= { callSignalStatsEntry 21 } callSignalStatsInfoMsgsOut OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of info messages sent by this entity." ::= { callSignalStatsEntry 22 } callSignalStatsNotifyMsgsIn OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of notify messages received by this entity." ::= { callSignalStatsEntry 23 } callSignalStatsNotifyMsgsOut OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of notify messages sent by this entity." ::= { callSignalStatsEntry 24 } callSignalStatsAverageCallDuration OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The average duration of the call in minutes since system boot time. " ::= { callSignalStatsEntry 25 } callSignalStatsCallConnections OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of successful connections ." ::= { callSignalStatsEntry 26 } callSignalStatsAlertingMsgs OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of alerting messages." ::= { callSignalStatsEntry 27 } callSignalStatsCallProceedings OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of call proceeding messages." ::= { callSignalStatsEntry 28 } callSignalStatsSetupMsgs OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of setup messages." ::= { callSignalStatsEntry 29 } callSignalStatsSetupAckMsgs OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of setupAck messages." ::= { callSignalStatsEntry 30 } callSignalStatsProgressMsgs OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of progress messages." ::= { callSignalStatsEntry 31 } callSignalStatsReleaseCompleteMsgs OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of release complete messages." ::= { callSignalStatsEntry 32 } callSignalStatsStatusMsgs OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of status messages." ::= { callSignalStatsEntry 33 } callSignalStatsStatusInquiryMsgs OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of status inquiry messages." ::= { callSignalStatsEntry 34 } callSignalStatsFacilityMsgs OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of connect messages." ::= { callSignalStatsEntry 35 } callSignalStatsInfoMsgs OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of info messages." ::= { callSignalStatsEntry 36 } callSignalStatsNotifyMsgs OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of notify messages." ::= { callSignalStatsEntry 37 } connectionsActiveConnections OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of active connections." ::= { connections 1 } connectionsTable OBJECT-TYPE SYNTAX SEQUENCE OF ConnectionsTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about entities that are connected to this entity. It is a list of connection entries. The number of entries equals to the number of active connections." ::= { connections 2 } connectionsTableEntry OBJECT-TYPE SYNTAX ConnectionsTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe connections that are remotely connected to this callable H.323 entity for a conference." INDEX { ifIndex, connectionsSrcTransporTAddressTag, connectionsSrcTransporTAddress, connectionsCallIdentifier} ::= { connectionsTable 1 } ConnectionsTableEntry ::= SEQUENCE { connectionsSrcTransporTAddressTag MmTAddressTag, connectionsSrcTransporTAddress TAddress, connectionsCallIdentifier MmGlobalIdentifier, connectionsRole INTEGER, connectionsState INTEGER, connectionsDestTransporTAddressTag MmTAddressTag, connectionsDestTransporTAddress TAddress, connectionsDestAliasTag MmAliasTag, connectionsDestAlias MmAliasAddress, connectionsSrcH245SigTransporTAddressTag MmTAddressTag, connectionsSrcH245SigTransporTAddress TAddress, connectionsDestH245SigTransporTAddressTag MmTAddressTag, connectionsDestH245SigTransporTAddress TAddress, connectionsConfId MmGlobalIdentifier, connectionsCalledPartyNumber DisplayString, connectionsDestXtraCallingNumber1 DisplayString, connectionsDestXtraCallingNumber2 DisplayString, connectionsDestXtraCallingNumber3 DisplayString, connectionsDestXtraCallingNumber4 DisplayString, connectionsDestXtraCallingNumber5 DisplayString, connectionsFastCall INTEGER, connectionsSecurity INTEGER, connectionsH245Tunneling INTEGER, connectionsCanOverlapSend INTEGER, connectionsCRV MmH225Crv, connectionsCallType MmCallType, connectionsRemoteExtensionAddress OCTET STRING, connectionsExtraCRV1 MmH225Crv, connectionsExtraCRV2 MmH225Crv, connectionsConnectionStartTime DateAndTime, connectionsEndpointType MmH323EndpointType, connectionsReleaseCompleteReason INTEGER } connectionsSrcTransporTAddressTag OBJECT-TYPE SYNTAX MmTAddressTag MAX-ACCESS not-accessible STATUS current DESCRIPTION "The transport address tag of the endpoint." ::= { connectionsTableEntry 1 } connectionsSrcTransporTAddress OBJECT-TYPE SYNTAX TAddress MAX-ACCESS not-accessible STATUS current DESCRIPTION "The transport address of the source endpoint that initiated the connection." ::= { connectionsTableEntry 2 } connectionsCallIdentifier OBJECT-TYPE SYNTAX MmGlobalIdentifier MAX-ACCESS not-accessible STATUS current DESCRIPTION "The call identifier." ::= { connectionsTableEntry 3 } connectionsRole OBJECT-TYPE SYNTAX INTEGER { caller(1), callee(2)} MAX-ACCESS read-only STATUS current DESCRIPTION "This value reflects the role this entity plays in this connection being either a caller or a callee. " ::= { connectionsTableEntry 4 } connectionsState OBJECT-TYPE SYNTAX INTEGER { callInitiated (1), callDelivered (2), callPresent (3), callReceived (4), connectRequest (5), callProceeding (6), active (7),disconnectRequest (8), disconnectIndication (9), releaseRequest (10) } MAX-ACCESS read-only STATUS current DESCRIPTION "The state of the H.225 state machine as per Q.931. Outgoing calls: callInitiated - when the user requests call establishment from the network callDelivered - when the calling user has received an indication that remote user alerting has been initiated. Incoming calls: callPresent - when the user has received a call establishment but not yet responded. callReceived - when the user has indicated alerting but not yet answered. connectRequest - when the user has answered the call and is waiting to be awarded the call. Incoming/Outgoing: callProceeding - when the user has received/sent acknowledgement that the network has received all call information necessary to effect call establishment. active - when the user has received/sent an acknoledgement from/to the network that the user has been awarded the call. disconnectRequest - when the user has requested the network to clear the end-to-end connection. disconnectIndication - when the user has received an invitation to disconnect to disconnect because the network has disconnected the end-to-end connection. releaseRequest - when the user has requested the network to release and is waiting for a responce." ::= { connectionsTableEntry 5 } connectionsDestTransporTAddressTag OBJECT-TYPE SYNTAX MmTAddressTag MAX-ACCESS read-only STATUS current DESCRIPTION "The transport address tag of the endpoint." ::= { connectionsTableEntry 6 } connectionsDestTransporTAddress OBJECT-TYPE SYNTAX TAddress MAX-ACCESS read-only STATUS current DESCRIPTION "The transport address of the destination endpoint." ::= { connectionsTableEntry 7 } connectionsDestAliasTag OBJECT-TYPE SYNTAX MmAliasTag MAX-ACCESS read-only STATUS current DESCRIPTION "The alias tag of the registred endpoint." ::= {connectionsTableEntry 8 } connectionsDestAlias OBJECT-TYPE SYNTAX MmAliasAddress MAX-ACCESS read-only STATUS current DESCRIPTION "The transport port of the destination endpoint. " ::= { connectionsTableEntry 9 } connectionsSrcH245SigTransporTAddressTag OBJECT-TYPE SYNTAX MmTAddressTag MAX-ACCESS read-only STATUS current DESCRIPTION "The transport address tag of the endpoint." ::= { connectionsTableEntry 10 } connectionsSrcH245SigTransporTAddress OBJECT-TYPE SYNTAX TAddress MAX-ACCESS read-only STATUS current DESCRIPTION "The H245 IP address of the source endpoint. " ::= { connectionsTableEntry 11 } connectionsDestH245SigTransporTAddressTag OBJECT-TYPE SYNTAX MmTAddressTag MAX-ACCESS read-only STATUS current DESCRIPTION "The transport address tag of the endpoint." ::= { connectionsTableEntry 12 } connectionsDestH245SigTransporTAddress OBJECT-TYPE SYNTAX TAddress MAX-ACCESS read-only STATUS current DESCRIPTION "The transport address of the destination endpoint. " ::= { connectionsTableEntry 13 } connectionsConfId OBJECT-TYPE SYNTAX MmGlobalIdentifier MAX-ACCESS read-only STATUS current DESCRIPTION "The conference id for this connection. " ::= { connectionsTableEntry 14 } connectionsCalledPartyNumber OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION "The primary e164 address of the destination endpoint. " ::= { connectionsTableEntry 15 } connectionsDestXtraCallingNumber1 OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION "The secondary info e164 address of the destination endpoint. " ::= { connectionsTableEntry 16 } connectionsDestXtraCallingNumber2 OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION "The third info e164 address of the destination endpoint. " ::= { connectionsTableEntry 17 } connectionsDestXtraCallingNumber3 OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION "The fourth info e164 address of the destination endpoint." ::= { connectionsTableEntry 18 } connectionsDestXtraCallingNumber4 OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION "The fifth info e164 address of the destination endpoint." ::= { connectionsTableEntry 19 } connectionsDestXtraCallingNumber5 OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION "The sixth info e164 address of the destination endpoint. " ::= { connectionsTableEntry 20 } connectionsFastCall OBJECT-TYPE SYNTAX INTEGER { true(1),false(2)} MAX-ACCESS read-only STATUS current DESCRIPTION "Indicator of fast call usage for this connection." ::= { connectionsTableEntry 21 } connectionsSecurity OBJECT-TYPE SYNTAX INTEGER {true(1),false(2)} MAX-ACCESS read-only STATUS current DESCRIPTION "Indicator of encryption usage for this connection. " ::= { connectionsTableEntry 22 } connectionsH245Tunneling OBJECT-TYPE SYNTAX INTEGER { notSupported(1), available(2), active(3), closing(4), closed(5) } MAX-ACCESS read-only STATUS current DESCRIPTION "Indicator of H245 tunneling usage for this connection. " ::= { connectionsTableEntry 23 } connectionsCanOverlapSend OBJECT-TYPE SYNTAX INTEGER {true(1),false(2)} MAX-ACCESS read-only STATUS current DESCRIPTION "Indicator of canOverLap usage for this connection. " ::= { connectionsTableEntry 24 } connectionsCRV OBJECT-TYPE SYNTAX MmH225Crv MAX-ACCESS read-only STATUS current DESCRIPTION "The call reference value." ::= { connectionsTableEntry 25 } connectionsCallType OBJECT-TYPE SYNTAX MmCallType MAX-ACCESS read-only STATUS current DESCRIPTION "The type of the call for this connection. " ::= { connectionsTableEntry 26 } connectionsRemoteExtensionAddress OBJECT-TYPE SYNTAX OCTET STRING MAX-ACCESS read-only STATUS current DESCRIPTION "The additional address for GW-GW calls " ::= { connectionsTableEntry 27 } connectionsExtraCRV1 OBJECT-TYPE SYNTAX MmH225Crv MAX-ACCESS read-only STATUS current DESCRIPTION "The additional call reference value." ::= { connectionsTableEntry 28 } connectionsExtraCRV2 OBJECT-TYPE SYNTAX MmH225Crv MAX-ACCESS read-only STATUS current DESCRIPTION "The additional call reference value. " ::= { connectionsTableEntry 29 } connectionsConnectionStartTime OBJECT-TYPE SYNTAX DateAndTime MAX-ACCESS read-only STATUS current DESCRIPTION "The date and time of the start of this call. " ::= { connectionsTableEntry 30 } connectionsEndpointType OBJECT-TYPE SYNTAX MmH323EndpointType MAX-ACCESS read-only STATUS current DESCRIPTION "Terminal type represents the type of H.323 terminal: 50 - terminal without MC 60 - gateway without MC 70 - terminal with MC but without MP 80 - gateway with MC but without MP 120 - gatekeeper with MC but without MP 160 - MCU with MC but without MP 90 - gateway with MC and Data MP 130 - gatekeeper with MC and Data MP 170 - MCU with MC and Data MP 100 - gateway containing MC with Data and audio MP 140 - gatekeeper containing MC with Data and audio MP 180 - MCU containing MC with Data and audio MP 110 - gateway containing MC with Data, Audio and Video MP 150 - gatekeeper containing MC with Data, Audio and Video MP 190 - MCU containing MC with Data, Audio and Video MP 240 - entity with active MC . " ::= { connectionsTableEntry 31 } connectionsReleaseCompleteReason OBJECT-TYPE SYNTAX INTEGER { noBandwidth(34), gatekeeperResourcesUnavailable(47), unreachableDestination(3), destinationReject(16), invalidRevision(88), noPermission(111), unreachableGatekeeper(38), gatewayResources(42), badFormaTAddress(28), adaptiveBusy(41), inConference(17), undefined(31) } MAX-ACCESS read-only STATUS current DESCRIPTION "The date and time of the start of this call. " ::= { connectionsTableEntry 32 } callReleaseComplete NOTIFICATION-TYPE OBJECTS { ifIndex, connectionsReleaseCompleteReason } STATUS current DESCRIPTION "This message will be sent in the case of on generation and reception of releaseComplete for the following reasons: 34 - noBandwidth; no circuit/channel available 47 - gatekeeperResources; resource unavailable 3 - unreachableDestination; no route to destination 16 - destinationReject; destination did not accept this call 88 - invalidRevision; incompatible destination 111- noPermission; Interworking unspecified 38 - unreachableGatekeeper; network out of order 42 - gatewayResources; switching equipment congestion 28 - badFormaTAddress; invalid number format 41 - adaptiveBusy; Temporary Failure 17 - inConference; user busy 31 - undefined. " ::= {callSignalEvents 1} -- CONFORMANCE -- callSignalingMIBGroups OBJECT IDENTIFIER ::= { callSignalingMIBConformance 1 } -- -- Groups for Conformance -- callSignalConfigGroup OBJECT-GROUP OBJECTS { callSignalConfigMaxConnections, callSignalConfigAvailableConnections, callSignalConfigT303, callSignalConfigT301, callSignalConfigEnableNotifications } STATUS current DESCRIPTION "." ::= { callSignalingMIBGroups 1 } callSignalStatsGroup OBJECT-GROUP OBJECTS { callSignalStatsCallConnectionsIn, callSignalStatsCallConnectionsOut, callSignalStatsAlertingMsgsIn, callSignalStatsAlertingMsgsOut, callSignalStatsCallProceedingsIn, callSignalStatsCallProceedingsOut, callSignalStatsSetupMsgsIn, callSignalStatsSetupMsgsOut, callSignalStatsSetupAckMsgsIn, callSignalStatsSetupAckMsgsOut, callSignalStatsProgressMsgsIn, callSignalStatsProgressMsgsOut, callSignalStatsReleaseCompleteMsgsIn, callSignalStatsReleaseCompleteMsgsOut, callSignalStatsStatusMsgsIn, callSignalStatsStatusMsgsOut, callSignalStatsStatusInquiryMsgsIn, callSignalStatsStatusInquiryMsgsOut, callSignalStatsFacilityMsgsIn, callSignalStatsFacilityMsgsOut, callSignalStatsInfoMsgsIn, callSignalStatsInfoMsgsOut, callSignalStatsNotifyMsgsIn, callSignalStatsNotifyMsgsOut, callSignalStatsAverageCallDuration } STATUS current DESCRIPTION "." ::= { callSignalingMIBGroups 2 } connectionsGroup OBJECT-GROUP OBJECTS { connectionsActiveConnections, connectionsRole, connectionsState, connectionsDestTransporTAddressTag, connectionsDestTransporTAddress, connectionsDestAliasTag, connectionsDestAlias, connectionsSrcH245SigTransporTAddressTag, connectionsSrcH245SigTransporTAddress, connectionsDestH245SigTransporTAddressTag, connectionsDestH245SigTransporTAddress, connectionsConfId, connectionsCalledPartyNumber, connectionsDestXtraCallingNumber1, connectionsDestXtraCallingNumber2, connectionsDestXtraCallingNumber3, connectionsDestXtraCallingNumber4, connectionsDestXtraCallingNumber5, connectionsFastCall, connectionsSecurity, connectionsH245Tunneling, connectionsCanOverlapSend, connectionsCRV, connectionsCallType, connectionsRemoteExtensionAddress, connectionsExtraCRV1, connectionsExtraCRV2, connectionsConnectionStartTime, connectionsReleaseCompleteReason } STATUS current DESCRIPTION "." ::= { callSignalingMIBGroups 3 } callSignalEventsGroup OBJECT-GROUP OBJECTS { connectionsReleaseCompleteReason } STATUS current DESCRIPTION "." ::= { callSignalingMIBGroups 4 } callSignalingMIBCompliance MODULE-COMPLIANCE STATUS current DESCRIPTION "The set of objects required for compliance." MODULE MANDATORY-GROUPS {callSignalConfigGroup, callSignalStatsGroup, connectionsGroup, callSignalEvents } ::= { callSignalingMIBConformance 2 } END h323plus/src/h341/MP-MIB.mib0000644000175000017500000005411210655704732014003 0ustar markmark MP-MIB DEFINITIONS ::= BEGIN IMPORTS Counter32, Integer32, OBJECT-TYPE, MODULE-IDENTITY FROM SNMPv2-SMI TruthValue FROM SNMPv2-TC MODULE-COMPLIANCE, OBJECT-GROUP FROM SNMPv2-CONF ifIndex FROM IF-MIB MmEndpointID, MmGlobalIdentifier, mmH323Root FROM MULTI-MEDIA-MIB-TC; -- Define the top of this MIB. -- this is the MIB module for the H.323 MP objects h323MP MODULE-IDENTITY LAST-UPDATED "9812182253Z" -- December 18, 1998 ORGANIZATION "ITU-T" CONTACT-INFO " ITU-T SG 16" DESCRIPTION " " ::= { mmH323Root 5 } -- groups in H.323 mp h323MpConfig OBJECT IDENTIFIER ::= { h323MP 1 } h323MpConference OBJECT IDENTIFIER ::= { h323MP 2 } h323MpConfigTable OBJECT-TYPE SYNTAX SEQUENCE OF H323MpConfigTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about MP configuration. It contains the number of MPs for a system. The number of entries equals to the number of MPs." ::= { h323MpConfig 1 } h323MpConfigTableEntry OBJECT-TYPE SYNTAX H323MpConfigTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe configuration parameters for MP." INDEX { ifIndex } ::= { h323MpConfigTable 1 } H323MpConfigTableEntry ::= SEQUENCE { h323MpConfigMaxAudioMixCount Integer32, h323MpConfigMaxVideoMixCount Integer32 } h323MpConfigMaxAudioMixCount OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "Maximum number of participants allowed in the audio mix." ::= { h323MpConfigTableEntry 1 } h323MpConfigMaxVideoMixCount OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "Maximum number of participants allowed in the video mix." ::= { h323MpConfigTableEntry 2 } h323MpConferenceTable OBJECT-TYPE SYNTAX SEQUENCE OF H323MpConferenceTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about running conferences. It is a list of conference entries. The number of entries equals to the number of running conferences." ::= { h323MpConference 1 } h323MpConferenceTableEntry OBJECT-TYPE SYNTAX H323MpConferenceTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe a specific conference." INDEX { ifIndex, h323MpConferenceConferenceId} ::= { h323MpConferenceTable 1 } H323MpConferenceTableEntry ::= SEQUENCE { h323MpConferenceConferenceId MmGlobalIdentifier, h323MpConferenceAudioNoiseThreshold Integer32, h323MpConferenceLipSyncEnable TruthValue } h323MpConferenceConferenceId OBJECT-TYPE SYNTAX MmGlobalIdentifier MAX-ACCESS not-accessible STATUS current DESCRIPTION "The conference identifier as specified in ITU-T H.323V2 specification." ::= { h323MpConferenceTableEntry 1 } h323MpConferenceAudioNoiseThreshold OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "This value represents the audio power level above which the signal is detected as speech." ::= { h323MpConferenceTableEntry 2 } h323MpConferenceLipSyncEnable OBJECT-TYPE SYNTAX TruthValue MAX-ACCESS read-only STATUS current DESCRIPTION "This value indicates whether the lip syncronization adjustments are performed." ::= { h323MpConferenceTableEntry 3 } h323MpConferenceParticipantsTable OBJECT-TYPE SYNTAX SEQUENCE OF H323MpConferenceParticipantsTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about conference participants. It is a list of participant entries. The number of entries equals the number of participants for all conferences." ::= { h323MpConference 2 } h323MpConferenceParticipantsTableEntry OBJECT-TYPE SYNTAX H323MpConferenceParticipantsTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe a specific conference participant." INDEX { ifIndex, h323MpConferenceConferenceId, h323MpConferenceParticipantsTableIndex } ::= { h323MpConferenceParticipantsTable 1 } H323MpConferenceParticipantsTableEntry ::= SEQUENCE { h323MpConferenceParticipantsTableIndex Integer32, h323MpConferenceParticipantsEndpointId MmEndpointID, h323MpConferenceParticipantsTransmitAudioState INTEGER, h323MpConferenceParticipantsReceiveAudioState INTEGER, h323MpConferenceParticipantsTransmitVideoState INTEGER, h323MpConferenceParticipantsReceiveVideoState INTEGER, h323MpConferenceParticipantsLoudnessMeasurement Integer32, h323MpConferenceParticipantsVoiceActivity TruthValue, h323MpConferenceParticipantsInputAudioGain Integer32, h323MpConferenceParticipantsOutputAudioGain Integer32, h323MpConferenceParticipantsMaxAudioEncoderPayloadSize Integer32, h323MpConferenceParticipantsMaxAudioDecoderPayloadSize Integer32, h323MpConferenceParticipantsTotalPacketsTransmitted Counter32, h323MpConferenceParticipantsTotalPacketsReceived Counter32, h323MpConferenceParticipantsInvalidPacketErrors Counter32, h323MpConferenceParticipantsLateAudioPacketsDropped Counter32, h323MpConferenceParticipantsReceivedSilencePackets Counter32, h323MpConferenceParticipantsSilencePacketsGenerated Counter32, h323MpConferenceParticipantsVideoFrameRate Integer32, h323MpConferenceParticipantsVideoResolution INTEGER, h323MpConferenceParticipantsFullPictureCounter Integer32 } h323MpConferenceParticipantsTableIndex OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS not-accessible STATUS current DESCRIPTION "An arbitrary index to this table. This index is one for the first participant for every given conference. It is incremented by one for each subsequent participant of the same conference. The last index for a particular conference is equal to the number of participants for that conference." ::= { h323MpConferenceParticipantsTableEntry 1 } h323MpConferenceParticipantsEndpointId OBJECT-TYPE SYNTAX MmEndpointID MAX-ACCESS read-only STATUS current DESCRIPTION "The H.323 id of this participant as described in ITU-T H.323V2 specification." ::= { h323MpConferenceParticipantsTableEntry 2 } h323MpConferenceParticipantsTransmitAudioState OBJECT-TYPE SYNTAX INTEGER {normal (1), mute (2), toneGeneration (3), off (4)} MAX-ACCESS read-only STATUS current DESCRIPTION "This value indicates the state of transmitted audio: normal - transmit normal audio toneGeneration - transmit test tone mute - transmit silence audio off - no audio is transmitted" ::= { h323MpConferenceParticipantsTableEntry 3 } h323MpConferenceParticipantsReceiveAudioState OBJECT-TYPE SYNTAX INTEGER {normal (1), loopBack (2), block (3), off (4)} MAX-ACCESS read-only STATUS current DESCRIPTION "This value indicates the state of received audio: normal - receive normal audio loopBack - received audio presented unchanged to the transmitter block - received audio is not part of the mix off - no audio is received" ::= { h323MpConferenceParticipantsTableEntry 4 } h323MpConferenceParticipantsTransmitVideoState OBJECT-TYPE SYNTAX INTEGER {on (1), off (2)} MAX-ACCESS read-only STATUS current DESCRIPTION "This value indicates the state of transmitted video: on - normal video is transmitted off - no video is transmitted." ::= { h323MpConferenceParticipantsTableEntry 5 } h323MpConferenceParticipantsReceiveVideoState OBJECT-TYPE SYNTAX INTEGER {normal (1), block (2), off (3)} MAX-ACCESS read-only STATUS current DESCRIPTION "This value indicates the state of transmitted video: normal - normal video is received block - received video is not displayed off - no video is transmitted." ::= { h323MpConferenceParticipantsTableEntry 6 } h323MpConferenceParticipantsLoudnessMeasurement OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "This is the current loudness measurement value in dB." ::= { h323MpConferenceParticipantsTableEntry 7 } h323MpConferenceParticipantsVoiceActivity OBJECT-TYPE SYNTAX TruthValue MAX-ACCESS read-only STATUS current DESCRIPTION "This value is True when the speech is detected." ::= { h323MpConferenceParticipantsTableEntry 8 } h323MpConferenceParticipantsInputAudioGain OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "This value reflects the current input volume adjustment in dB." ::= { h323MpConferenceParticipantsTableEntry 9 } h323MpConferenceParticipantsOutputAudioGain OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "This value reflects the current output volume adjustment in dB." ::= { h323MpConferenceParticipantsTableEntry 10 } h323MpConferenceParticipantsMaxAudioEncoderPayloadSize OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The maximum size of payload in ms." ::= { h323MpConferenceParticipantsTableEntry 11 } h323MpConferenceParticipantsMaxAudioDecoderPayloadSize OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The maximum size of payload in ms." ::= { h323MpConferenceParticipantsTableEntry 12 } h323MpConferenceParticipantsTotalPacketsTransmitted OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of transmitted packets." ::= { h323MpConferenceParticipantsTableEntry 13 } h323MpConferenceParticipantsTotalPacketsReceived OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of received packets." ::= { h323MpConferenceParticipantsTableEntry 14 } h323MpConferenceParticipantsInvalidPacketErrors OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of packets with invalid packet errors." ::= { h323MpConferenceParticipantsTableEntry 15 } h323MpConferenceParticipantsLateAudioPacketsDropped OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of packets that arrived too late to be processed." ::= { h323MpConferenceParticipantsTableEntry 16 } h323MpConferenceParticipantsReceivedSilencePackets OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of silence packets that were received." ::= { h323MpConferenceParticipantsTableEntry 17 } h323MpConferenceParticipantsSilencePacketsGenerated OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of silence packets that were generated." ::= { h323MpConferenceParticipantsTableEntry 18 } h323MpConferenceParticipantsVideoFrameRate OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "This value represents the current measured frame rate received." ::= { h323MpConferenceParticipantsTableEntry 19 } h323MpConferenceParticipantsVideoResolution OBJECT-TYPE SYNTAX INTEGER { h263SubQCIF (1),h263QCIF (2), h263CIF(3), h2634CIF(4), h26316CIF(5), h263Reserved (6), h261QCIF(7),h261CIF(8) } MAX-ACCESS read-only STATUS current DESCRIPTION "Received video resolution." ::= { h323MpConferenceParticipantsTableEntry 20 } h323MpConferenceParticipantsFullPictureCounter OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "This value represents the number of full image pictures received." ::= { h323MpConferenceParticipantsTableEntry 21 } h323MpConferenceGlobalAudioMixTable OBJECT-TYPE SYNTAX SEQUENCE OF H323MpConferenceGlobalAudioMixTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about conference participants that are present in a global audio mix. It is a list of participant entries. The number of entries equals to the sum of all audio mix participants in all conferences." ::= { h323MpConference 3 } h323MpConferenceGlobalAudioMixTableEntry OBJECT-TYPE SYNTAX H323MpConferenceGlobalAudioMixTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the participants." INDEX { ifIndex, h323MpConferenceConferenceId, h323MpConferenceGlobalAudioMixTableIndex } ::= { h323MpConferenceGlobalAudioMixTable 1 } H323MpConferenceGlobalAudioMixTableEntry ::= SEQUENCE { h323MpConferenceGlobalAudioMixTableIndex Integer32, h323MpConferenceGlobalAudioMixTerminalIdentifier MmEndpointID } h323MpConferenceGlobalAudioMixTableIndex OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS not-accessible STATUS current DESCRIPTION "An arbitrary index to this table. This index is one for the first participant for every given conference. It is incremented by one for each subsequent participant of the same conference. The last index for a particular conference is equal to the number of participants for that conference." ::= { h323MpConferenceGlobalAudioMixTableEntry 1 } h323MpConferenceGlobalAudioMixTerminalIdentifier OBJECT-TYPE SYNTAX MmEndpointID MAX-ACCESS read-only STATUS current DESCRIPTION "The H.323 id of this participant as described in ITU-T H.323V2 specification." ::= { h323MpConferenceGlobalAudioMixTableEntry 2 } h323MpConferenceGlobalVideoMixTable OBJECT-TYPE SYNTAX SEQUENCE OF H323MpConferenceGlobalVideoMixTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about conference participants that are present in a global video mix. It is a list of participant entries. The number of entries equals to the sum of all video mix participants in all conferences." ::= { h323MpConference 4 } h323MpConferenceGlobalVideoMixTableEntry OBJECT-TYPE SYNTAX H323MpConferenceGlobalVideoMixTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the participants." INDEX { ifIndex, h323MpConferenceConferenceId, h323MpConferenceGlobalVideoMixTableIndex } ::= { h323MpConferenceGlobalVideoMixTable 1 } H323MpConferenceGlobalVideoMixTableEntry ::= SEQUENCE { h323MpConferenceGlobalVideoMixTableIndex Integer32, h323MpConferenceGlobalVideoMixTerminalIdentifier MmEndpointID } h323MpConferenceGlobalVideoMixTableIndex OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS not-accessible STATUS current DESCRIPTION "An arbitrary index to this table. This index is one for the first participant for every given conference. It is incremented by one for each subsequent participant of the same conference. The last index for a particular conference is equal to the number of participants for that conference." ::= { h323MpConferenceGlobalVideoMixTableEntry 1 } h323MpConferenceGlobalVideoMixTerminalIdentifier OBJECT-TYPE SYNTAX MmEndpointID MAX-ACCESS read-only STATUS current DESCRIPTION "The H.323 id of this participant as described in ITU-T H.323V2 specification." ::= { h323MpConferenceGlobalVideoMixTableEntry 2 } -- conformance; stating the mandatory requirements for the MIB -- -- CONFORMANCE -- mpMIBConformance OBJECT IDENTIFIER ::= { h323MP 3 } mpMIBGroups OBJECT IDENTIFIER ::= { mpMIBConformance 1 } -- -- Groups for Conformance -- h323MpConfigGroup OBJECT-GROUP OBJECTS { h323MpConfigMaxAudioMixCount, h323MpConfigMaxVideoMixCount } STATUS current DESCRIPTION "." ::= { mpMIBGroups 1 } h323MpConferenceGroup OBJECT-GROUP OBJECTS { h323MpConferenceAudioNoiseThreshold, h323MpConferenceLipSyncEnable, h323MpConferenceParticipantsEndpointId, h323MpConferenceParticipantsTransmitAudioState, h323MpConferenceParticipantsReceiveAudioState, h323MpConferenceParticipantsTransmitVideoState, h323MpConferenceParticipantsReceiveVideoState, h323MpConferenceParticipantsLoudnessMeasurement, h323MpConferenceParticipantsVoiceActivity, h323MpConferenceParticipantsInputAudioGain, h323MpConferenceParticipantsOutputAudioGain, h323MpConferenceParticipantsMaxAudioEncoderPayloadSize, h323MpConferenceParticipantsMaxAudioDecoderPayloadSize, h323MpConferenceParticipantsTotalPacketsTransmitted, h323MpConferenceParticipantsTotalPacketsReceived, h323MpConferenceParticipantsLateAudioPacketsDropped, h323MpConferenceParticipantsReceivedSilencePackets, h323MpConferenceParticipantsSilencePacketsGenerated, h323MpConferenceParticipantsVideoFrameRate, h323MpConferenceParticipantsVideoResolution, h323MpConferenceParticipantsFullPictureCounter, h323MpConferenceGlobalAudioMixTerminalIdentifier, h323MpConferenceGlobalVideoMixTerminalIdentifier } STATUS current DESCRIPTION "." ::= { mpMIBGroups 2 } mpMIBCompliance MODULE-COMPLIANCE STATUS current DESCRIPTION "The set of objects required for compliance." MODULE MANDATORY-GROUPS { h323MpConfigGroup, h323MpConferenceGroup } ::= { mpMIBConformance 2 } END h323plus/src/h341/H245-MIB.mib0000644000175000017500000027101610655704732014115 0ustar markmark -- Request For Comments H245-MIB DEFINITIONS ::= BEGIN IMPORTS Counter32, Integer32, OBJECT-TYPE, MODULE-IDENTITY FROM SNMPv2-SMI DisplayString, TAddress,TruthValue FROM SNMPv2-TC MODULE-COMPLIANCE, OBJECT-GROUP FROM SNMPv2-CONF ifIndex FROM IF-MIB MmTAddressTag, mmH245Root, MmH323EndpointType FROM MULTI-MEDIA-MIB-TC; -- Define the top of this MIB. -- this is the MIB module for the H.245 objects h245 MODULE-IDENTITY LAST-UPDATED "9812202253Z" -- December 20, 1998 ORGANIZATION "ITU-T" CONTACT-INFO " ITU-T SG 16" DESCRIPTION " " ::= { mmH245Root 1 } -- groups in h245 h245Configuration OBJECT IDENTIFIER ::= { h245 1 } h245ControlChannel OBJECT IDENTIFIER ::= { h245 2 } h245CapExchange OBJECT IDENTIFIER ::= { h245 3 } h245LogChannels OBJECT IDENTIFIER ::= { h245 4 } h245Conference OBJECT IDENTIFIER ::= { h245 5 } h245Misc OBJECT IDENTIFIER ::= { h245 6 } h245MIBConformance OBJECT IDENTIFIER ::= { h245 7 } h245ConfigurationTable OBJECT-TYPE SYNTAX SEQUENCE OF H245ConfigurationTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about H.245 configuration parameters. It is a list of configuration parameter entries. The number of entries equals to the number of H.245 stacks in a system." ::= { h245Configuration 1 } h245ConfigurationTableEntry OBJECT-TYPE SYNTAX H245ConfigurationTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the H.245 configuration parameters." INDEX { ifIndex } ::= { h245ConfigurationTable 1 } H245ConfigurationTableEntry ::= SEQUENCE { h245ConfigT101Timer Integer32, h245ConfigT102Timer Integer32, h245ConfigT103Timer Integer32, h245ConfigT104Timer Integer32, h245ConfigT105Timer Integer32, h245ConfigT106Timer Integer32, h245ConfigT107Timer Integer32, h245ConfigT108Timer Integer32, h245ConfigT109Timer Integer32, h245ConfigN100Counter Integer32 } h245ConfigT101Timer OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-write STATUS current DESCRIPTION "This timer is used during Capability Exchange procedure. This timer is used in the AWAITING RESPONSE state. It specifies the maximum time during which no TerminalCapabilitySetAck or TerminalCapabilitySetReject message may be received." ::= { h245ConfigurationTableEntry 1 } h245ConfigT102Timer OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-write STATUS current DESCRIPTION "This timer is used during Maintenance Loop procedure. This timer is used during the AWAITING RESPONSE state. It specifies the maximum allowed time during which no MaintenanceLoopAck or MaintenanceLoopReject message may be received ." ::= { h245ConfigurationTableEntry 2 } h245ConfigT103Timer OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-write STATUS current DESCRIPTION "This timer is used during Uni-directional and Bi-directional Logical Channel Signalling procedure. This timer is used in the AWAITING ESTABLISHMENT and AWAITING RELEASE states. It specifies the maximum time during which no OpenLogicalChannelAck or OpenLogicalChannelReject or CloseLogicalChannelAck message may be received." ::= { h245ConfigurationTableEntry 3 } h245ConfigT104Timer OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-write STATUS current DESCRIPTION "This timer is used during H.223 Multiplex Table procedure. This timer is used in the AWAITING RESPONSE state. It specifies the maximum time during which no MultiplexEntrySendAck or MultiplexEntrySendReject message may be received." ::= { h245ConfigurationTableEntry 4 } h245ConfigT105Timer OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-write STATUS current DESCRIPTION "This timer is used during Round Trip Delay procedure. This timer is used in the AWAITING RESPONSE state. It specifies the maximum time during which no RoundTripDelayResponse message may be received." ::= { h245ConfigurationTableEntry 5 } h245ConfigT106Timer OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-write STATUS current DESCRIPTION "This timer is used during Master Slave Determination procedure. This timer is used in the OUTGOING AWAITING RESPONSE state and during the INCOMING AWAITING RESPONSE state. It specifies the maximum time during which no acknowledgement message may be received." ::= { h245ConfigurationTableEntry 6 } h245ConfigT107Timer OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-write STATUS current DESCRIPTION "This timer is used during Request Multiplex Entry procedure. This timer is used during the AWAITING RESPONSE state. It specifies the maximum time during which no RequestMultiplexEntryAck or RequestMultiplexEntryReject message may be received." ::= { h245ConfigurationTableEntry 7 } h245ConfigT108Timer OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-write STATUS current DESCRIPTION "This timer is used during SEND Logical Channel procedure. This timer is used in the AWAITING RESPONSE state. It specifies the maximum time during which no RequestMultiplexEntryAck or RequestMultiplexEntryReject message may be received." ::= { h245ConfigurationTableEntry 8 } h245ConfigT109Timer OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-write STATUS current DESCRIPTION "This timer is used during Mode Request procedure. This timer is used in the AWAITING RESPONSE state. It specifies the maximum time during which no RequestModeAck or RequestModeReject message may be received." ::= { h245ConfigurationTableEntry 9 } h245ConfigN100Counter OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-write STATUS current DESCRIPTION "This counter specifies the maximum number of times that MasterSlaveDetermination messages will be sent during the OUTGOING AWAITING RESPONSE state." ::= { h245ConfigurationTableEntry 10 } h245ControlChannelStatsTable OBJECT-TYPE SYNTAX SEQUENCE OF H245ControlChannelStatsTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about H.245 statistics. It is a list of statistics entries. The number of entries equals to the number of control channels for all H.245 stacks in a system." ::= { h245ControlChannel 1 } h245ControlChannelStatsTableEntry OBJECT-TYPE SYNTAX H245ControlChannelStatsTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the H.245 control channel statistics. " INDEX { ifIndex } ::= { h245ControlChannelStatsTable 1 } H245ControlChannelStatsTableEntry ::= SEQUENCE { h245ControlChannelNumberOfListenPorts Integer32, h245ControlChannelMaxConnections Integer32, h245ControlChannelNumberOfListenFails Integer32, h245ControlChannelNumberOfActiveConnections Integer32, h245ControlChannelMasterSlaveMaxRetries Integer32, h245ControlChannelConnectionAttemptsFail Counter32, h245ControlChanneMasterSlavelDeterminations Counter32, h245ControlChannelMasterSlaveAcks Counter32, h245ControlChannelMasterSlaveRejects Counter32, h245ControlChannelMasterSlaveT106Rejects Counter32, h245ControlChannelMasterSlaveMSDRejects Counter32, h245ControlChannelNumberOfMasterSlaveInconsistentFieldRejects Counter32, h245ControlChannelMasterSlaveMaxCounterRejects Counter32, h245ControlChannelMasterSlaveReleases Counter32, h245ControlChannelNumberOfTunnels Integer32 } h245ControlChannelNumberOfListenPorts OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of H245 Listen ports. These ports are used for the remote entity to send a connect on" ::= { h245ControlChannelStatsTableEntry 1 } h245ControlChannelMaxConnections OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of maximum active h245 channels allowed." ::= { h245ControlChannelStatsTableEntry 2 } h245ControlChannelNumberOfListenFails OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of Listen fails. The fail could be due to exhaustion of system resources" ::= { h245ControlChannelStatsTableEntry 3 } h245ControlChannelNumberOfActiveConnections OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of the active H245 connections." ::= { h245ControlChannelStatsTableEntry 4 } h245ControlChannelMasterSlaveMaxRetries OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of maximum master slave retries. Reties are needed when the result of master slave process is indeterminate" ::= { h245ControlChannelStatsTableEntry 5 } h245ControlChannelConnectionAttemptsFail OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of failures when trying to connect to a listen port." ::= { h245ControlChannelStatsTableEntry 6 } h245ControlChanneMasterSlavelDeterminations OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of MSD messages sent from a MSDSE to a peer MSDSE for master/slave determination purpose." ::= { h245ControlChannelStatsTableEntry 7 } h245ControlChannelMasterSlaveAcks OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of acks that are used to confirm whether the terminal is the master terminal or the slave terminal, as indicated by decision. When decision is of type master, the terminal receiving this message is the master terminal and when decision is of type slave, it is the slave terminal. " ::= { h245ControlChannelStatsTableEntry 8 } h245ControlChannelMasterSlaveRejects OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of rejects of the MasterSlaveDetermination message. " ::= { h245ControlChannelStatsTableEntry 9 } h245ControlChannelMasterSlaveT106Rejects OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of rejects of the MasterSlaveDetermination message. When the cause is of type identicalNumbers, the rejection was due to the random numbers being equivalent and the terminal types being the same." ::= { h245ControlChannelStatsTableEntry 10 } h245ControlChannelMasterSlaveMSDRejects OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of MSD rejects of the MasterSlaveDetermination message. Rejects can happen due to different reasons like identical random number after maximum tries, timeouts..." ::= { h245ControlChannelStatsTableEntry 11 } h245ControlChannelNumberOfMasterSlaveInconsistentFieldRejects OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of rejects of the MasterSlaveDetermination message. The cause is due to conflict in the status that both entities arrive to." ::= { h245ControlChannelStatsTableEntry 12 } h245ControlChannelMasterSlaveMaxCounterRejects OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of rejects of the MasterSlaveDetermination message. There are many reasons why the rejection could happen." ::= { h245ControlChannelStatsTableEntry 13 } h245ControlChannelMasterSlaveReleases OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of rejects due to a time out. " ::= { h245ControlChannelStatsTableEntry 14 } h245ControlChannelNumberOfTunnels OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of the active H245 tunnels." ::= { h245ControlChannelStatsTableEntry 15 } h245ControlChannelMasterSlaveTable OBJECT-TYPE SYNTAX SEQUENCE OF H245ControlChannelMasterSlaveTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about entities that are connected to this entity. It is a list of connection entries. The number of entries equals to the number of active connections." ::= { h245ControlChannel 2 } h245ControlChannelMasterSlaveTableEntry OBJECT-TYPE SYNTAX H245ControlChannelMasterSlaveTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the status of the master slave determination procedure." INDEX { ifIndex, h245ControlChannelSrcAddressTag, h245ControlChannelSrcTransporTAddress, h245ControlChannelDesTAddressTag, h245ControlChannelDestTransporTAddress} ::= { h245ControlChannelMasterSlaveTable 1 } H245ControlChannelMasterSlaveTableEntry ::= SEQUENCE { h245ControlChannelSrcAddressTag MmTAddressTag, h245ControlChannelSrcTransporTAddress TAddress, h245ControlChannelDesTAddressTag MmTAddressTag, h245ControlChannelDestTransporTAddress TAddress, h245ControlChannelIndex Integer32, h245ControlChannelMSDState INTEGER, h245ControlChannelTerminalType MmH323EndpointType, h245ControlChannelNumberOfMSDRetries Integer32, h245ControlChannelIsTunneling TruthValue } h245ControlChannelSrcAddressTag OBJECT-TYPE SYNTAX MmTAddressTag MAX-ACCESS not-accessible STATUS current DESCRIPTION " It describes the type of address (IP v4, IPv6...) of the source" ::= { h245ControlChannelMasterSlaveTableEntry 1 } h245ControlChannelSrcTransporTAddress OBJECT-TYPE SYNTAX TAddress MAX-ACCESS not-accessible STATUS current DESCRIPTION "Source transport address. " ::= { h245ControlChannelMasterSlaveTableEntry 2 } h245ControlChannelDesTAddressTag OBJECT-TYPE SYNTAX MmTAddressTag MAX-ACCESS not-accessible STATUS current DESCRIPTION " It describes the type of address (IP v4, IPv6...) of the source" ::= { h245ControlChannelMasterSlaveTableEntry 3 } h245ControlChannelDestTransporTAddress OBJECT-TYPE SYNTAX TAddress MAX-ACCESS not-accessible STATUS current DESCRIPTION "Remote transport address. " ::= { h245ControlChannelMasterSlaveTableEntry 4 } h245ControlChannelIndex OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "It is an arbitrary number that is being incremented by 1 for every entry in this table" ::= {h245ControlChannelMasterSlaveTableEntry 5 } h245ControlChannelMSDState OBJECT-TYPE SYNTAX INTEGER { outgoingWaitingResponse (1), incomingWaitingResponse (2), idle (3), master (4), slave (5) } MAX-ACCESS read-only STATUS current DESCRIPTION "It describes the state of the master slave determination procdure. It can be OUTGOING WAITING RESPONSE, INCOMING WAITING RESPONSE, IDLE" ::= {h245ControlChannelMasterSlaveTableEntry 6 } h245ControlChannelTerminalType OBJECT-TYPE SYNTAX MmH323EndpointType MAX-ACCESS read-only STATUS current DESCRIPTION "Terminal type represents the type of H.323 terminal: 50 - terminal without MC 60 - gateway without MC 70 - terminal with MC but without MP 80 - gateway with MC but without MP 120 - gatekeeper with MC but without MP 160 - MCU with MC but without MP 90 - gateway with MC and Data MP 130 - gatekeeper with MC and Data MP 170 - MCU with MC and Data MP 100 - gateway containing MC with Data and audio MP 140 - gatekeeper containing MC with Data and audio MP 180 - MCU containing MC with Data and audio MP 110 - gateway containing MC with Data, Audio and Video MP 150 - gatekeeper containing MC with Data, Audio and Video MP 190 - MCU containing MC with Data, Audio and Video MP 240 - entity with active MC . " ::= {h245ControlChannelMasterSlaveTableEntry 7 } h245ControlChannelNumberOfMSDRetries OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of tries of master slave determination before a meaningful result is concluded. " ::= {h245ControlChannelMasterSlaveTableEntry 8 } h245ControlChannelIsTunneling OBJECT-TYPE SYNTAX TruthValue MAX-ACCESS read-only STATUS current DESCRIPTION "This variable indicates if tunneling is used for this channel. " ::= {h245ControlChannelMasterSlaveTableEntry 9 } h245CapExchangeStatsTable OBJECT-TYPE SYNTAX SEQUENCE OF H245CapExchangeStatsTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about H.245 statistics for capabilities exchange procedure. It is a list of cap exchange statistics entries. The number of entries equals to the number of H.245 stacks in a system." ::= { h245CapExchange 1 } h245CapExchangeStatsTableEntry OBJECT-TYPE SYNTAX H245CapExchangeStatsTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe statistics for H.245 cap exchange procedure." INDEX { ifIndex } ::= { h245CapExchangeStatsTable 1 } H245CapExchangeStatsTableEntry ::= SEQUENCE { h245CapExchangeSets Counter32, h245CapExchangeAcks Counter32, h245CapExchangeRejects Counter32, h245CapExchangeRejectUnspecified Counter32, h245CapExchangeRejectUndefinedTableEntryUsed Counter32, h245CapExchangeRejectDescriptorCapacityExceeded Counter32, h245CapExchangeRejectTableEntryCapacityExeeded Counter32, h245CapExchangeReleases Counter32 } h245CapExchangeSets OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of TerminalCapabilitySets that were sent and received by the local CESE (Capability Exchange Signalling Entity). A TerminalCapabilitySet is used for the intention to signal a terminal's capabilities to ensure that the only multimedia signals to be transmitted are those that can be received and treated appropriately by the receive terminal." ::= { h245CapExchangeStatsTableEntry 1 } h245CapExchangeAcks OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of TerminalCapabilitySetAcks that were sent and received by local CESE (Capability Exchange Signalling Entity). A TerminalCapabilitySetAck is used as a confirmation for a TerminalCapabilitySet that was successfully received and processed." ::= { h245CapExchangeStatsTableEntry 2 } h245CapExchangeRejects OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of TerminalCapabilitySetRejects that were sent and received by the local CESE (Capability Exchange Signalling Entity). A TerminalCapabilitySetReject is used to indicate a failure due to a specific error for a TerminalCapabilitySet that was received, but, yet to be fully processed." ::= { h245CapExchangeStatsTableEntry 3 } h245CapExchangeRejectUnspecified OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of TerminalCapabilitySetRejects that were sent and received by the local CESE (Capability Exchange Signalling Entity) with the cause value set to unspecified. This means that there was no cause for the rejection of a TerminalCapabilitySet specified." ::= { h245CapExchangeStatsTableEntry 4 } h245CapExchangeRejectUndefinedTableEntryUsed OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of TerminalCapabilitySetRejects that were sent and received by the local CESE (Capability Exchange Signalling Entity) with the cause value set to undefinedTableEntryUsed. This means that the cause of the rejection of a TerminalCapabilitySet was due to a capability descriptor made reference to a capability table entry number in the capability table of the TerminalCapabilitySet was not defined." ::= { h245CapExchangeStatsTableEntry 5 } h245CapExchangeRejectDescriptorCapacityExceeded OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of TerminalCapabilitySetRejects that were sent and received by the local CESE (Capability Exchange Signalling Entity) with the cause value set to descriptorCapacityExceeded. This means that the cause of the rejection of a TerminalCapabilitySet was due to a terminal incapable of storing all of the information from the capabilityDescriptors of the TerminalCapabilitySet." ::= { h245CapExchangeStatsTableEntry 6 } h245CapExchangeRejectTableEntryCapacityExeeded OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of TerminalCapabilitySetRejects that were sent and received by the local CESE (Capability Exchange Signalling Entity) with the cause value set to tableEntryCapacityExceeded. This means that the cause of the rejection of a TerminalCapabilitySet was due to a terminal incapable of storing some (indicated in the highestEntryNumberProcessed) or all (indicated in the noneProcessed) of the information from the capability table of the TerminalCapabilitySet." ::= { h245CapExchangeStatsTableEntry 7 } h245CapExchangeReleases OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of TerminalCapabilitySetReleases that were sent and received by the local CESE (Capability Exchange Signalling Entity). This means that a response for a TerminalCapabilitySet was not received/issued in time. A timer expiry had occurred for the local CESE." ::= { h245CapExchangeStatsTableEntry 8 } h245CapExchangeCapabilityTable OBJECT-TYPE SYNTAX SEQUENCE OF H245CapExchangeCapabilityTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "Contains all the local incoming and outgoing CESEs (Capability Exchange Signalling Entity) that currently exists in this terminal." ::= { h245CapExchange 2 } h245CapExchangeCapabilityTableEntry OBJECT-TYPE SYNTAX H245CapExchangeCapabilityTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "Each entry contains either the local incoming or outgoing CESE (Capability Exchange Signalling Entity) that is derived from a particular H.245 Control Channel, Logical Channel 0, or H.245 session." INDEX {ifIndex, h245ControlChannelIndex, h245CapExchangeDirection } ::= { h245CapExchangeCapabilityTable 1 } H245CapExchangeCapabilityTableEntry ::= SEQUENCE { h245CapExchangeDirection INTEGER, h245CapExchangeState INTEGER, h245CapExchangeProtocolId OCTET STRING, h245CapExchangeRejectCause INTEGER, h245CapExchangeMultiplexCapability DisplayString, h245CapExchangeCapability DisplayString, h245CapExchangeCapabilityDescriptors DisplayString } h245CapExchangeDirection OBJECT-TYPE SYNTAX INTEGER { incoming (1), outgoing (2) } MAX-ACCESS not-accessible STATUS current DESCRIPTION "Represents either the local incoming CESE or the local outgoing CESE (Capability Exchange Signalling Entity)." ::= { h245CapExchangeCapabilityTableEntry 1 } h245CapExchangeState OBJECT-TYPE SYNTAX INTEGER { sent (1), acked (2), reject (3), release (4) } MAX-ACCESS read-only STATUS current DESCRIPTION "The current state of this CESE (Capability Exchange Signalling Entity)." ::= { h245CapExchangeCapabilityTableEntry 2 } h245CapExchangeProtocolId OBJECT-TYPE SYNTAX OCTET STRING ( SIZE(1..128)) MAX-ACCESS read-only STATUS current DESCRIPTION "The version of the H.245 protocol used. This specifies how H.245 messages are formatted and used." ::= { h245CapExchangeCapabilityTableEntry 3 } h245CapExchangeRejectCause OBJECT-TYPE SYNTAX INTEGER { unspecified (1), undefinedTableEntryUsed (2), descriptorCapacityExceeded (3), tableEntryCapacityExceeded (4) } MAX-ACCESS read-only STATUS current DESCRIPTION "The latest reject cause value extracted from the latest TerminalCapabilitySetReject." ::= { h245CapExchangeCapabilityTableEntry 4 } h245CapExchangeMultiplexCapability OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION "The latest multiplexCapability extracted from a TerminalCapabilitySet." ::= { h245CapExchangeCapabilityTableEntry 5 } h245CapExchangeCapability OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION "The latest capabilityTable extracted from the latest TerminalCapabilitySet." ::= { h245CapExchangeCapabilityTableEntry 6 } h245CapExchangeCapabilityDescriptors OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION "The latest capabilityDescriptors extracted from the latest TerminalCapabilitySet." ::= { h245CapExchangeCapabilityTableEntry 7 } h245LogChannelsChannelTable OBJECT-TYPE SYNTAX SEQUENCE OF H245LogChannelsChannelTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "Contains all the local incoming and outgoing LCSEs (Uni or Bi-directional Logical Channel Signalling Entity) that currently exist in this terminal with their logical channels open or in the process of being opened or closed." ::= { h245LogChannels 1} h245LogChannelsChannelTableEntry OBJECT-TYPE SYNTAX H245LogChannelsChannelTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "Each entry contains either the local incoming or outgoing LCSE (Uni or Bi-directional Logical Channel Signalling Entity) that is derived from a particular H.245 Control Channel, Logical Channel 0, or H.245 session with its logical channels that are currently open or in the process of being opened or closed." INDEX { ifIndex, h245ControlChannelIndex, h245LogChannelsChannelNumber, h245LogChannelsChannelDirection } ::= { h245LogChannelsChannelTable 1 } H245LogChannelsChannelTableEntry ::= SEQUENCE { h245LogChannelsChannelNumber Integer32, h245LogChannelsChannelDirection INTEGER, h245LogChannelsIndex Integer32, h245LogChannelsChannelState INTEGER, h245LogChannelsMediaTableType INTEGER } h245LogChannelsChannelNumber OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS not-accessible STATUS current DESCRIPTION "The forwardLogicalChannelNumber used to distinguish this media channel by this LCSE (Uni or Bi-directional Logical Channel Signalling Entity)." ::= { h245LogChannelsChannelTableEntry 1 } h245LogChannelsChannelDirection OBJECT-TYPE SYNTAX INTEGER { receive(1), transmit (2) } MAX-ACCESS not-accessible STATUS current DESCRIPTION "Represents the direction of this media channel used by this LCSE (Uni or Bi-directional Logical Channel Signalling Entity) ." ::= { h245LogChannelsChannelTableEntry 2 } h245LogChannelsIndex OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "A unique value representing this media channel." ::= { h245LogChannelsChannelTableEntry 3 } h245LogChannelsChannelState OBJECT-TYPE SYNTAX INTEGER { awaitingEstablishment (1), established (2), awaitingRelease (3), awaitingConfirmation (4) } MAX-ACCESS read-only STATUS current DESCRIPTION "The current state of the media channel which also represents the state of this LCSE (Uni or Bi-directional Logical Channel Signalling Entity)." ::= { h245LogChannelsChannelTableEntry 4 } h245LogChannelsMediaTableType OBJECT-TYPE SYNTAX INTEGER { nonStandard (1), videoNonStandard (2), h261VideoCapability (3), h262VideoCapability (4), h263VideoCapability (5), is11172VideoCapability (6), audioNonStandard (7), g711Alaw64k (8), g711Alaw56k (9), g711Ulaw64k (10), g711Ulaw56k (11), g722-64k (12), g722-56k (13), g722-48k (14), g7231 (15), g728 (16), g729 (17), g729AnnexA (18), is11172AudioCapability (19), is13818AudioCapability (20), g729wAnnexB (21), g729AnnexAwAnnexB (22), g7231AnnexCCapability (23), gsmFullRate (24), gsmHalfRate (25), gsmEnhancedFullRate (26), dataNonStandard (27), t120 (28), dsm-cc (29), userData (30), t84 (31), t434 (32), h224 (33), nlpid (34), dsvdControl (35), h222DataPartitioning (36), t30fax (37), t140 (38), h233EncryptionCapability (39), conferenceCapability (40), h235SecurityCapability (41), maxPendingReplacementFor (42), userInputCapability (43), h225 (44), h222 (45), h223 (46), v76 (47) } MAX-ACCESS read-only STATUS current DESCRIPTION "The actual media or data type used for this logical channel." ::= { h245LogChannelsChannelTableEntry 5 } h245LogChannelsH225Table OBJECT-TYPE SYNTAX SEQUENCE OF H245LogChannelsH225TableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "Contains the H2250LogicalChannelParameters that are used in all of the logical channels that are currently opened on this terminal." ::= { h245LogChannels 2 } h245LogChannelsH225TableEntry OBJECT-TYPE SYNTAX H245LogChannelsH225TableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "Each entry contains the actual specifics and options used in the H2250LogicalChannelParameters within a particular open logical channel." INDEX { ifIndex, h245LogChannelsIndex } ::= { h245LogChannelsH225Table 1 } H245LogChannelsH225TableEntry ::= SEQUENCE { h245LogChannelsSessionId Integer32, h245LogChannelsAssociateSessionId Integer32, h245LogChannelsMediaChannel TAddress, h245LogChannelsMediaGuaranteedDelivery TruthValue, h245LogChannelsMediaControlChannel TAddress, h245LogChannelsMediaControlGuaranteedDelivery TruthValue, h245LogChannelsSilenceSuppression TruthValue, h245LogChannelsDestination OCTET STRING, h245LogChannelsDynamicRTPPayloadType Integer32, h245LogChannelsH261aVideoPacketization TruthValue, h245LogChannelsRTPPayloadDescriptor OCTET STRING, h245LogChannelsRTPPayloadType Integer32, h245LogChannelsTransportCapability DisplayString, h245LogChannelsRedundancyEncoding DisplayString, h245LogChannelsSrcTerminalLabel OCTET STRING } h245LogChannelsSessionId OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "A unique RTP or T.120 Session Identifier in a conference. It is used by the transmitter to refer to the session to which the logical channel applies." ::= { h245LogChannelsH225TableEntry 1 } h245LogChannelsAssociateSessionId OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "This is used to associate one session with another in a conference. A typical use will be to associate an audio session with a video session to indicate which sessions to process for lip synchronization." ::= { h245LogChannelsH225TableEntry 2 } h245LogChannelsMediaChannel OBJECT-TYPE SYNTAX TAddress MAX-ACCESS read-only STATUS current DESCRIPTION "Indicates a transporTAddress to be used for the logical channel." ::= { h245LogChannelsH225TableEntry 3 } h245LogChannelsMediaGuaranteedDelivery OBJECT-TYPE SYNTAX TruthValue MAX-ACCESS read-only STATUS current DESCRIPTION "Indicates whether or not the underlying media transport should be selected to provide or not to provide guaranteed delivery of data." ::= { h245LogChannelsH225TableEntry 4 } h245LogChannelsMediaControlChannel OBJECT-TYPE SYNTAX TAddress MAX-ACCESS read-only STATUS current DESCRIPTION "Indicates the media control channel in which the sender of the open logical channel will be listening for media control messages for this session. This field is present only when a media control channel is required." ::= { h245LogChannelsH225TableEntry 5 } h245LogChannelsMediaControlGuaranteedDelivery OBJECT-TYPE SYNTAX TruthValue MAX-ACCESS read-only STATUS current DESCRIPTION "Indicates whether or not the underlying media control transport should be selected to provide or not to provide guaranteed delivery of data. This field is present only when a media control channel is required." ::= { h245LogChannelsH225TableEntry 6 } h245LogChannelsSilenceSuppression OBJECT-TYPE SYNTAX TruthValue MAX-ACCESS read-only STATUS current DESCRIPTION "Indicates whether the transmitter stops sending packets during times of silence for bandwidth reasons. This can only be enabled for an audio channel only." ::= { h245LogChannelsH225TableEntry 7 } h245LogChannelsDestination OBJECT-TYPE SYNTAX OCTET STRING (SIZE(2)) MAX-ACCESS read-only STATUS current DESCRIPTION "Indicates the terminal label (composed of a mcu number and a terminal number) of the destination if one has been assigned." ::= { h245LogChannelsH225TableEntry 8 } h245LogChannelsDynamicRTPPayloadType OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "Indicates a dynamic payload value which is used in H.323 for the H.225.0 alternative H.261 video packetization scheme. This field is present only when a dynamic RTP payload is in use." ::= { h245LogChannelsH225TableEntry 9 } h245LogChannelsH261aVideoPacketization OBJECT-TYPE SYNTAX TruthValue MAX-ACCESS read-only STATUS current DESCRIPTION "Indicates that the H.261 alternative RTP payload form is in use as described in H.225.0." ::= { h245LogChannelsH225TableEntry 10 } h245LogChannelsRTPPayloadDescriptor OBJECT-TYPE SYNTAX OCTET STRING (SIZE (0..127)) MAX-ACCESS read-only STATUS current DESCRIPTION "If the rfc-number is chosen, it indicates the offical document of the IETF in which the payload format is defined (OID). Obsolete RFCs should not be referenced here. If the oid component is chosen, this identifies a payload format specified as part of a Recommendation defined by the ITU or an International Standard defined by the ISO and registered in the respective document under this Object Indentifier." ::= { h245LogChannelsH225TableEntry 11 } h245LogChannelsRTPPayloadType OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "Indicates which payload type value used. If the dynamic payload type is used, the values of this field and the logChannelsDynamicRTPPayloadType should match." ::= { h245LogChannelsH225TableEntry 12 } h245LogChannelsTransportCapability OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION "Indicates optional transport capabilites such as quality of service and median channel type capabilites." ::= { h245LogChannelsH225TableEntry 13 } h245LogChannelsRedundancyEncoding OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION "Indicates which redundancy encoding modes are supported (if any). The redundancyEncoding indicates that the redundant encoding method indicated in this parameter is to be used for this logical channel. The primary encoding is defined by the dataType of the forwardLogicalChannelParameters or the reverseLogicalChannelParameters, respectively. The type of redundancy encoding to be applied for this logical channel is identified by the redundancyEncodingMethod parameter, the secondary encoding is specified in the secondaryEncoding parameter. The DataType (audio, video, etc.) selected for both primary and secondary encoding shall match and shall be in accordance with the redundancyEncodingMethod selected." ::= { h245LogChannelsH225TableEntry 14 } h245LogChannelsSrcTerminalLabel OBJECT-TYPE SYNTAX OCTET STRING (SIZE(2)) MAX-ACCESS read-only STATUS current DESCRIPTION "This is used to identify the terminal number of the sender of the OpenLogicalChannel message." ::= { h245LogChannelsH225TableEntry 15 } h245LogChannelOpenLogicalChannelTable OBJECT-TYPE SYNTAX SEQUENCE OF H245LogChannelOpenLogicalChannelTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about statistics for H.245 open logical channels.It is a list of statistics entries. The number of entries equals to the number of control channels for all H.245 stacks in a system." ::= { h245LogChannels 3 } h245LogChannelOpenLogicalChannelTableEntry OBJECT-TYPE SYNTAX H245LogChannelOpenLogicalChannelTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe statistics for H.245 open logical channel procedure." INDEX { ifIndex } ::= { h245LogChannelOpenLogicalChannelTable 1 } H245LogChannelOpenLogicalChannelTableEntry ::= SEQUENCE { h245LogChanOpenLogChanTotalRequests Counter32, h245LogChanOpenLogChanAcks Counter32, h245LogChanOpenLogChanConfirms Counter32, h245LogChanOpenLogChanRejects Counter32, h245LogChanOpenLogChanRejectUnspecified Counter32, h245LogChanOpenLogChanRejectUnsuitableReverseParameters Counter32, h245LogChanOpenLogChanRejectDataTypeNotSupported Counter32, h245LogChanOpenLogChanRejectDataTypeNotAvailable Counter32, h245LogChanOpenLogChanRejectUnknownDataType Counter32, h245LogChanOpenLogChanRejectDataTypeALCombinationNotSupported Counter32, h245LogChanOpenLogChanRejectMulticastChannelNotAllowed Counter32, h245LogChanOpenLogChanRejectInsuffientBandwdith Counter32, h245LogChanOpenLogChanRejectSeparateStackEstablishmentFailed Counter32, h245LogChanOpenLogChanRejectInvalidSessionID Counter32, h245LogChanOpenLogChanRejectMasterSlaveConflict Counter32, h245LogChanOpenLogChanRejectWaitForCommunicationMode Counter32, h245LogChanOpenLogChanRejectInvalidDependentChannel Counter32, h245LogChansOpenLogChanRejectReplacementForRejected Counter32 } h245LogChanOpenLogChanTotalRequests OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of attempts to open a uni-directional logical channel between an outgoing LCSE and a peer incoming LCSE and a bi-directional logical channel between an outgoing B-LCSE and a peer incoming B-LCSE." ::= { h245LogChannelOpenLogicalChannelTableEntry 1 } h245LogChanOpenLogChanAcks OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of confirmations to accept an open logical channel request. This would represent the final stage of establishing a uni-directional channel that can be used for transmission." ::= { h245LogChannelOpenLogicalChannelTableEntry 2 } h245LogChanOpenLogChanConfirms OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of confirmations used for the purpose of bi-directional channel signaling that the reverse channel is open and can be used for transmission. This represents the final stage of establishing a bi-directional channel that can be used for transmission in both directions." ::= { h245LogChannelOpenLogicalChannelTableEntry 3 } h245LogChanOpenLogChanRejects OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of rejections used as a response to a request to open a uni or a bi-directional logical channel from a LCSE or B-LCSE." ::= { h245LogChannelOpenLogicalChannelTableEntry 4 } h245LogChanOpenLogChanRejectUnspecified OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of rejections used as a response to a request to open a uni or a bi-directional logical channel from a LCSE or B-LCSE when the reason for the rejection was unspecified." ::= { h245LogChannelOpenLogicalChannelTableEntry 5 } h245LogChanOpenLogChanRejectUnsuitableReverseParameters OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of rejections used as a response to a request to open a bi-directional logical channel from a B-LCSE when the reason for the rejection was the reverseLogicalChannelParameters in the OpenLogicalChannel were inappropriate." ::= { h245LogChannelOpenLogicalChannelTableEntry 6 } h245LogChanOpenLogChanRejectDataTypeNotSupported OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of rejections used as a response to a request to open a uni or a bi-directional logical channel from a LCSE or B-LCSE when the reason for the rejection was due to a terminal not capable of supporting the desired dataType." ::= { h245LogChannelOpenLogicalChannelTableEntry 7 } h245LogChanOpenLogChanRejectDataTypeNotAvailable OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of rejections used as a response to a request to open a uni or a bi-directional logical channel from a LCSE or B-LCSE when the reason for the rejection was due to a terminal not capable of supporting the desired dataType simultaneously with the dataTypes of logical channels that are already open." ::= { h245LogChannelOpenLogicalChannelTableEntry 8 } h245LogChanOpenLogChanRejectUnknownDataType OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of rejections used as a response to a request to open a uni or a bi-directional logical channel from a LCSE or B-LCSE when the reason for the rejection was due to a terminal not understanding the dataType indicated in the OpenLogicalChannel." ::= { h245LogChannelOpenLogicalChannelTableEntry 9 } h245LogChanOpenLogChanRejectDataTypeALCombinationNotSupported OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of rejections used as a response to a request to open a uni or a bi-directional logical channel from a LCSE or B-LCSE when the reason for the rejection was due to a terminal not capable of supporting the dataType indicated in OpenLogicalChannel simultaneously with the Adaptation Layer type indicated in H223LogicalChannelParameters." ::= { h245LogChannelOpenLogicalChannelTableEntry 10 } h245LogChanOpenLogChanRejectMulticastChannelNotAllowed OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of rejections used as a response to a request to open a uni or a bi-directional logical channel from a LCSE or B-LCSE when the reason for the rejection was due to a multicast Channel that could not be opened." ::= { h245LogChannelOpenLogicalChannelTableEntry 11 } h245LogChanOpenLogChanRejectInsuffientBandwdith OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of rejections used as a response to a request to open a uni or a bi-directional logical channel from a LCSE or B-LCSE when the reason for the rejection was because permission to use the requested bandwidth for the logical channel was denied." ::= { h245LogChannelOpenLogicalChannelTableEntry 12 } h245LogChanOpenLogChanRejectSeparateStackEstablishmentFailed OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of rejections used as a response to a request to open a uni or a bi-directional logical channel from a LCSE or B-LCSE when the reason for the rejection was due to a request to run the data portion of a call on a separate stack failed." ::= { h245LogChannelOpenLogicalChannelTableEntry 13 } h245LogChanOpenLogChanRejectInvalidSessionID OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of rejections used as a response to a request to open a uni or a bi-directional logical channel from a LCSE or B-LCSE when the reason for the rejection was due to an attempt by a slave to set the SessionID when opening a logical channel to the master." ::= { h245LogChannelOpenLogicalChannelTableEntry 14 } h245LogChanOpenLogChanRejectMasterSlaveConflict OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of rejections used as a response to a request to open a uni or a bi-directional logical channel from a LCSE or B-LCSE when the reason for the rejection was due to an attempt by a slave to open a logical channel in which the master has determined a conflict may occur." ::= { h245LogChannelOpenLogicalChannelTableEntry 15 } h245LogChanOpenLogChanRejectWaitForCommunicationMode OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of rejections used as a response to a request to open a uni or a bi-directional logical channel from a LCSE or B-LCSE when the reason for the rejection was due to an attempt to open a logical channel before MC has transmitted the CommunicationModeCommand." ::= { h245LogChannelOpenLogicalChannelTableEntry 16 } h245LogChanOpenLogChanRejectInvalidDependentChannel OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of rejections used as a response to a request to open a uni or a bi-directional logical channel from a LCSE or B-LCSE when the reason for the rejection was due to an attempt to open a logical channel with a dependent channel specified which is not present." ::= { h245LogChannelOpenLogicalChannelTableEntry 17 } h245LogChansOpenLogChanRejectReplacementForRejected OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of rejections used as a response to a request to open a uni or a bi-directional logical channel from a LCSE or B-LCSE when the reason for the rejection was due to a logical channel of the type attempted cannot be opened using the replacementFor parameter." ::= { h245LogChannelOpenLogicalChannelTableEntry 18 } h245LogChannelCloseLogicalChannelTable OBJECT-TYPE SYNTAX SEQUENCE OF H245LogChannelCloseLogicalChannelTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about H.245 statistics for close logical channel procedure. It is a list of statistics entries. The number of entries equals to the number of control channels for all H.245 stacks in a system." ::= { h245LogChannels 4 } h245LogChannelCloseLogicalChannelTableEntry OBJECT-TYPE SYNTAX H245LogChannelCloseLogicalChannelTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe statistics for H.245 close logical channel procedure." INDEX { ifIndex } ::= { h245LogChannelCloseLogicalChannelTable 1 } H245LogChannelCloseLogicalChannelTableEntry ::= SEQUENCE { h245LogChanCloseLogChannels Counter32, h245LogChanCloseLogChanAcks Counter32, h245LogChanCloseLogChanRequests Counter32, h245LogChanCloseLogChanRequestsAcks Counter32, h245LogChanCloseLogChanRequestRejects Counter32, h245LogChanCloseLogChanRequestReleases Counter32 } h245LogChanCloseLogChannels OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of attempts made by the outgoing LCSE or B-LCSE to close a logical channel between two peer LCSEs or B-LCSEs. Note - In the case of a bi-directional logical channel, this closes both forward and reverse channels. It is not possible to close one and not the other." ::= { h245LogChannelCloseLogicalChannelTableEntry 1 } h245LogChanCloseLogChanAcks OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of attempts made to confirm the closing of a logical channel connection. " ::= { h245LogChannelCloseLogicalChannelTableEntry 2 } h245LogChanCloseLogChanRequests OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of attempts made by the outgoing CLCSE to request the closing of a logical channel connection between two peer LCSEs. " ::= { h245LogChannelCloseLogicalChannelTableEntry 3 } h245LogChanCloseLogChanRequestsAcks OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of attempts made by the incoming CLCSE to indicate that the logical channel connection will be closed. " ::= { h245LogChannelCloseLogicalChannelTableEntry 4 } h245LogChanCloseLogChanRequestRejects OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of attempts made by the incoming CLCSE to indicate that the logical channel connection will not be closed. The only valid cause value for rejecting to close a channel is unspecified." ::= { h245LogChannelCloseLogicalChannelTableEntry 5 } h245LogChanCloseLogChanRequestReleases OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of attempts made by the outgoing CLCSE in the case of a time out." ::= { h245LogChannelCloseLogicalChannelTableEntry 6 } h245MiscRoundTripDelayTable OBJECT-TYPE SYNTAX SEQUENCE OF H245MiscRoundTripDelayTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about round trip delay tests. It is a list round trip delay entries. The number of entries equals to the number of tests performed." ::= { h245Misc 1 } h245MiscRoundTripDelayTableEntry OBJECT-TYPE SYNTAX H245MiscRoundTripDelayTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains information about the round trip delay messages." INDEX {ifIndex, h245ControlChannelIndex } ::= { h245MiscRoundTripDelayTable 1 } H245MiscRoundTripDelayTableEntry ::= SEQUENCE { h245MiscRTDState INTEGER, h245MiscT105TimerExpired TruthValue, h245MiscLastRTDRequestSent Integer32, h245MiscLastRTDRequestRcvd Integer32, h245MiscLastRTDResponseSent Integer32, h245MiscLastRTDResponseRcvd Integer32 } h245MiscRTDState OBJECT-TYPE SYNTAX INTEGER { idle (1), waiting (2)} MAX-ACCESS read-only STATUS current DESCRIPTION "The state of the round trip delay. It can be either idle or waiting for response. " ::= { h245MiscRoundTripDelayTableEntry 1 } h245MiscT105TimerExpired OBJECT-TYPE SYNTAX TruthValue MAX-ACCESS read-only STATUS current DESCRIPTION "Round trip delay timer expired waiting for a respinse from the other entity. " ::= { h245MiscRoundTripDelayTableEntry 2 } h245MiscLastRTDRequestSent OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "Information about the last round trip delay request sent. " ::= { h245MiscRoundTripDelayTableEntry 3 } h245MiscLastRTDRequestRcvd OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "Information about the last round trip delay request received. " ::= { h245MiscRoundTripDelayTableEntry 4 } h245MiscLastRTDResponseSent OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "Information about the last round trip delay response sent. " ::= { h245MiscRoundTripDelayTableEntry 5 } h245MiscLastRTDResponseRcvd OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "Information about the last round trip delay response received. " ::= { h245MiscRoundTripDelayTableEntry 6 } h245MiscMaintenanceLoopTable OBJECT-TYPE SYNTAX SEQUENCE OF H245MiscMaintenanceLoopTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about maintenance loop mode. It is a list of maintenance loop entries. The number of entries equals to the number of maintenance loop procedures. " ::= { h245Misc 2 } h245MiscMaintenanceLoopTableEntry OBJECT-TYPE SYNTAX H245MiscMaintenanceLoopTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains entries that describe the maintenance loop procedure." INDEX { ifIndex, h245ControlChannelIndex, h245MiscMaintenanceLoopDirection } ::= { h245MiscMaintenanceLoopTable 1 } H245MiscMaintenanceLoopTableEntry ::= SEQUENCE { h245MiscMaintenanceLoopDirection INTEGER, h245MiscMLState INTEGER, h245MiscNumberOfRequests Counter32, h245MiscNumberOfAcks Counter32, h245MiscLastMLRequestOrAckType INTEGER, h245MiscMLMediaOrLogicalChannelLoopRejectChannelNumber Integer32, h245MiscNumberOfRejects Counter32, h245MiscLastRejectType INTEGER, h245MiscErrorCode INTEGER } h245MiscMaintenanceLoopDirection OBJECT-TYPE SYNTAX INTEGER { incoming (1), outgoing (2) } MAX-ACCESS not-accessible STATUS current DESCRIPTION "The direction could be either incoming or outgoing. " ::= {h245MiscMaintenanceLoopTableEntry 1 } h245MiscMLState OBJECT-TYPE SYNTAX INTEGER { notLooped (1), waiting (2), looped (3)} MAX-ACCESS read-only STATUS current DESCRIPTION "The state of the channel which can be: not looped, waiting to be looped or looped. " ::= {h245MiscMaintenanceLoopTableEntry 2 } h245MiscNumberOfRequests OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "Number of loop requests on that channel. " ::= {h245MiscMaintenanceLoopTableEntry 3 } h245MiscNumberOfAcks OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "Number of maintenance loop acks on the channel." ::= {h245MiscMaintenanceLoopTableEntry 4 } h245MiscLastMLRequestOrAckType OBJECT-TYPE SYNTAX INTEGER { looped (1), notLooped (2), awaitingResponse (3)} MAX-ACCESS read-only STATUS current DESCRIPTION "The type of the last request or response received. The type can be either media or logical channel loop. " ::= {h245MiscMaintenanceLoopTableEntry 5 } h245MiscMLMediaOrLogicalChannelLoopRejectChannelNumber OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "If the loop rejecte is of type media loop or logical channel loop then this represents the channel number for the logical channel. " ::= {h245MiscMaintenanceLoopTableEntry 6 } h245MiscNumberOfRejects OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "Number of loop requests that got rejected. " ::= {h245MiscMaintenanceLoopTableEntry 7 } h245MiscLastRejectType OBJECT-TYPE SYNTAX INTEGER {system-loop (1), media-loop (2), log-channel-loop (3)} MAX-ACCESS read-only STATUS current DESCRIPTION "The type of the last reject for the loop request." ::= {h245MiscMaintenanceLoopTableEntry 8 } h245MiscErrorCode OBJECT-TYPE SYNTAX INTEGER { can-not-perform-loop (1)} MAX-ACCESS read-only STATUS current DESCRIPTION "The error code that caused the rejection of the loop request. " ::= {h245MiscMaintenanceLoopTableEntry 9 } h245ConferenceTerminalTable OBJECT-TYPE SYNTAX SEQUENCE OF H245ConferenceTerminalTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about the terminal charachteristics that are related to a conference. It is a list entries. The number of entries equals to the number of conferences." ::= { h245Conference 1 } h245ConferenceTerminalTableEntry OBJECT-TYPE SYNTAX H245ConferenceTerminalTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe a terminal as a conference participant." INDEX { ifIndex, h245ConferenceConferenceId, h245ConferenceTerminalLabel } ::= { h245ConferenceTerminalTable 1 } H245ConferenceTerminalTableEntry ::= SEQUENCE { h245ConferenceConferenceId OCTET STRING (SIZE(1..32)), h245ConferenceTerminalLabel OCTET STRING, h245ConferenceControlChannelIndex Integer32, h245ConferenceBroadcaster TruthValue, h245ConferenceConferenceChair TruthValue, h245ConferenceMultipoint TruthValue } h245ConferenceConferenceId OBJECT-TYPE SYNTAX OCTET STRING (SIZE(1..32)) MAX-ACCESS not-accessible STATUS current DESCRIPTION "The conference identifier." ::= {h245ConferenceTerminalTableEntry 1 } h245ConferenceTerminalLabel OBJECT-TYPE SYNTAX OCTET STRING (SIZE(2)) MAX-ACCESS not-accessible STATUS current DESCRIPTION "The terminal label of this terminal " ::= {h245ConferenceTerminalTableEntry 2 } h245ConferenceControlChannelIndex OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The index of the control channel table that identifies the control channel for the conference." ::= {h245ConferenceTerminalTableEntry 3 } h245ConferenceBroadcaster OBJECT-TYPE SYNTAX TruthValue MAX-ACCESS read-only STATUS current DESCRIPTION "The indicator of the terminal being a broadcaster." ::= {h245ConferenceTerminalTableEntry 4 } h245ConferenceConferenceChair OBJECT-TYPE SYNTAX TruthValue MAX-ACCESS read-only STATUS current DESCRIPTION "The indicator of the terminal being a conference chair." ::= {h245ConferenceTerminalTableEntry 5 } h245ConferenceMultipoint OBJECT-TYPE SYNTAX TruthValue MAX-ACCESS read-only STATUS current DESCRIPTION "The indicator of the conference being a multipoint." ::= {h245ConferenceTerminalTableEntry 6 } h245ConferenceStatsTable OBJECT-TYPE SYNTAX SEQUENCE OF H245ConferenceStatsTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains information about conference statistics. It is a list of conference statistics entries. The number of entries equals to the number of conferences on all system interfaces." ::= { h245Conference 2 } h245ConferenceStatsTableEntry OBJECT-TYPE SYNTAX H245ConferenceStatsTableEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe conference statistics." INDEX { ifIndex } ::= { h245ConferenceStatsTable 1 } H245ConferenceStatsTableEntry ::= SEQUENCE { h245ConferenceBroadcastMyLogicalChannel Counter32, h245ConferenceCancelBroadcastMyLogicalChannel Counter32, h245ConferenceSendThisSource Counter32, h245ConferenceCancelSendThisSource Counter32, h245ConferenceDropConference Counter32, h245ConferenceEqualiseDelay Counter32, h245ConferenceZeroDelay Counter32, h245ConferenceMultipointModeCommand Counter32, h245ConferenceCancelMultipointModeCommand Counter32, h245ConferenceVideoFreezePicture Counter32, h245ConferenceVideoFastUpdatePicture Counter32, h245ConferenceVideoFastUpdateGOB Counter32, h245ConferenceVideoTemporalSpatialTradeOff Counter32, h245ConferenceVideoSendSyncEveryGOB Counter32, h245ConferenceVideoFastUpdateMB Counter32 } h245ConferenceBroadcastMyLogicalChannel OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of attempts made by a terminal to transmit MCV command to force an associated MCU to broadcast its video signal used to transmit the picture of a chairman or VIP, alternatively to hold a picture source during the transmission of graphics." ::= { h245ConferenceStatsTableEntry 1 } h245ConferenceCancelBroadcastMyLogicalChannel OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of attempts made by a terminal to cancel MCV command. " ::= { h245ConferenceStatsTableEntry 2 } h245ConferenceSendThisSource OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of attempts made by a terminal to send VCS command to MCU to cause transmission to itself of the video from the terminal whose identity number follows VCS." ::= { h245ConferenceStatsTableEntry 3 } h245ConferenceCancelSendThisSource OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of attempts made by a terminal to cancel VCS and return to automatic video switching at the MCU." ::= { h245ConferenceStatsTableEntry 4 } h245ConferenceDropConference OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of attempts made by a terminal that is chair-control to drop all terminals from the conference. " ::= { h245ConferenceStatsTableEntry 5 } h245ConferenceEqualiseDelay OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The same meaning as the command ACE in H.230." ::= { h245ConferenceStatsTableEntry 6 } h245ConferenceZeroDelay OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The same meaning as the command ACZ defined in H.230." ::= { h245ConferenceStatsTableEntry 7 } h245ConferenceMultipointModeCommand OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of attempts made by the MCU to send request to a terminal to comply with all MCU requestMode requests." ::= { h245ConferenceStatsTableEntry 8 } h245ConferenceCancelMultipointModeCommand OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of attempts made by the MCU to send a cancelation of a MultipointModeCommand. " ::= { h245ConferenceStatsTableEntry 9 } h245ConferenceVideoFreezePicture OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of commands that are sent/received to/from the video decoder to complete updating the current video frame and subsequently display the frozen picture until receipt of the appropriate freeze-picture release control signal. " ::= { h245ConferenceStatsTableEntry 10 } h245ConferenceVideoFastUpdatePicture OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of commands sent/received to enter the fast update mode." ::= { h245ConferenceStatsTableEntry 11 } h245ConferenceVideoFastUpdateGOB OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of commands sent/received by the video encoder to fast update one or more GOBs." ::= { h245ConferenceStatsTableEntry 12 } h245ConferenceVideoTemporalSpatialTradeOff OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of commands sent/received by video encoder to change its trade off between temporal and spatial resolution. " ::= { h245ConferenceStatsTableEntry 13 } h245ConferenceVideoSendSyncEveryGOB OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of commands sent/received by video encoder to use sync for every GOB until the cancel command is received. " ::= { h245ConferenceStatsTableEntry 14 } h245ConferenceVideoFastUpdateMB OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of sent/received by video encoder to perform a fast update of one or more MBs." ::= { h245ConferenceStatsTableEntry 15 } -- -- CONFORMANCE -- h245MIBGroups OBJECT IDENTIFIER ::= { h245MIBConformance 1 } -- -- Groups for Conformance -- h245ConfigurationGroup OBJECT-GROUP OBJECTS { h245ConfigT101Timer, h245ConfigT102Timer, h245ConfigT103Timer, h245ConfigT104Timer, h245ConfigT105Timer, h245ConfigT106Timer, h245ConfigT107Timer, h245ConfigT108Timer, h245ConfigT109Timer, h245ConfigN100Counter } STATUS current DESCRIPTION "." ::= { h245MIBGroups 1 } h245ControlChannelGroup OBJECT-GROUP OBJECTS { h245ControlChannelNumberOfListenPorts, h245ControlChannelMaxConnections, h245ControlChannelNumberOfListenFails, h245ControlChannelNumberOfActiveConnections, h245ControlChannelMasterSlaveMaxRetries, h245ControlChannelConnectionAttemptsFail, h245ControlChanneMasterSlavelDeterminations, h245ControlChannelMasterSlaveAcks, h245ControlChannelMasterSlaveRejects, h245ControlChannelMasterSlaveT106Rejects, h245ControlChannelMasterSlaveMSDRejects, h245ControlChannelNumberOfMasterSlaveInconsistentFieldRejects, h245ControlChannelMasterSlaveMaxCounterRejects, h245ControlChannelMasterSlaveReleases, h245ControlChannelNumberOfTunnels, -- h245ControlChannelIndex, h245ControlChannelMSDState, h245ControlChannelTerminalType, h245ControlChannelNumberOfMSDRetries } STATUS current DESCRIPTION "." ::= { h245MIBGroups 2 } h245CapExchangeGroup OBJECT-GROUP OBJECTS { h245CapExchangeSets, h245CapExchangeAcks, h245CapExchangeRejects, h245CapExchangeRejectUnspecified, h245CapExchangeRejectUndefinedTableEntryUsed, h245CapExchangeRejectDescriptorCapacityExceeded, h245CapExchangeRejectTableEntryCapacityExeeded, h245CapExchangeReleases, -- h245CapExchangeState, h245CapExchangeProtocolId, h245CapExchangeRejectCause, h245CapExchangeMultiplexCapability, h245CapExchangeCapability, h245CapExchangeCapabilityDescriptors } STATUS current DESCRIPTION "." ::= { h245MIBGroups 3 } h245LogChannelsGroup OBJECT-GROUP OBJECTS { h245LogChannelsIndex, h245LogChannelsChannelState, h245LogChannelsMediaTableType, -- h245LogChannelsSessionId, h245LogChannelsAssociateSessionId, h245LogChannelsMediaChannel, h245LogChannelsMediaGuaranteedDelivery, h245LogChannelsMediaControlChannel, h245LogChannelsMediaControlGuaranteedDelivery, h245LogChannelsSilenceSuppression, h245LogChannelsDestination, h245LogChannelsDynamicRTPPayloadType, h245LogChannelsH261aVideoPacketization, h245LogChannelsRTPPayloadDescriptor, h245LogChannelsRTPPayloadType, h245LogChannelsTransportCapability, h245LogChannelsRedundancyEncoding, h245LogChannelsSrcTerminalLabel, -- h245LogChanOpenLogChanTotalRequests, h245LogChanOpenLogChanAcks, h245LogChanOpenLogChanConfirms, h245LogChanOpenLogChanRejects, h245LogChanOpenLogChanRejectUnspecified, h245LogChanOpenLogChanRejectUnsuitableReverseParameters, h245LogChanOpenLogChanRejectDataTypeNotSupported, h245LogChanOpenLogChanRejectDataTypeNotAvailable, h245LogChanOpenLogChanRejectUnknownDataType, h245LogChanOpenLogChanRejectDataTypeALCombinationNotSupported, h245LogChanOpenLogChanRejectMulticastChannelNotAllowed, h245LogChanOpenLogChanRejectInsuffientBandwdith, h245LogChanOpenLogChanRejectSeparateStackEstablishmentFailed, h245LogChanOpenLogChanRejectInvalidSessionID, h245LogChanOpenLogChanRejectMasterSlaveConflict, h245LogChanOpenLogChanRejectWaitForCommunicationMode, h245LogChanOpenLogChanRejectInvalidDependentChannel, h245LogChansOpenLogChanRejectReplacementForRejected, -- h245LogChanCloseLogChannels, h245LogChanCloseLogChanAcks, h245LogChanCloseLogChanRequests, h245LogChanCloseLogChanRequestsAcks, h245LogChanCloseLogChanRequestRejects, h245LogChanCloseLogChanRequestReleases } STATUS current DESCRIPTION "." ::= { h245MIBGroups 4 } h245ConferenceGroup OBJECT-GROUP OBJECTS { h245ConferenceControlChannelIndex, h245ConferenceBroadcaster, h245ConferenceConferenceChair, h245ConferenceMultipoint, -- h245ConferenceBroadcastMyLogicalChannel, h245ConferenceCancelBroadcastMyLogicalChannel, h245ConferenceSendThisSource, h245ConferenceCancelSendThisSource, h245ConferenceDropConference, h245ConferenceEqualiseDelay, h245ConferenceZeroDelay, h245ConferenceMultipointModeCommand, h245ConferenceCancelMultipointModeCommand, h245ConferenceVideoFreezePicture, h245ConferenceVideoFastUpdatePicture, h245ConferenceVideoFastUpdateGOB, h245ConferenceVideoTemporalSpatialTradeOff, h245ConferenceVideoSendSyncEveryGOB, h245ConferenceVideoFastUpdateMB } STATUS current DESCRIPTION "." ::= { h245MIBGroups 5 } h245MiscGroup OBJECT-GROUP OBJECTS { h245MiscRTDState, h245MiscT105TimerExpired, h245MiscLastRTDRequestSent, h245MiscLastRTDRequestRcvd, h245MiscLastRTDResponseSent, h245MiscLastRTDResponseRcvd , -- h245MiscMLState, h245MiscNumberOfRequests, h245MiscNumberOfAcks, h245MiscLastMLRequestOrAckType, h245MiscMLMediaOrLogicalChannelLoopRejectChannelNumber, h245MiscNumberOfRejects, h245MiscLastRejectType, h245MiscErrorCode } STATUS current DESCRIPTION "." ::= { h245MIBGroups 6 } h245MIBCompliance MODULE-COMPLIANCE STATUS current DESCRIPTION "The set of objects required for compliance." MODULE MANDATORY-GROUPS { h245ConfigurationGroup, h245ControlChannelGroup, h245CapExchangeGroup, h245LogChannelsGroup, h245ConferenceGroup, h245MiscGroup } ::= { h245MIBConformance 2 } END h323plus/src/h341/mib2c.openh323.conf0000644000175000017500000000537210737626653015606 0ustar markmark@open h341_oid.h@ /* * h341_oid.h * * H.341 MIB Definitions for the OpenH323 Project. * * * Copyright (c) 2007 ISVO (Asia) Pte Ltd. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Alternatively, the contents of this file may be used under the terms * of the General Public License (the "GNU License"), in which case the * provisions of GNU License are applicable instead of those * above. If you wish to allow use of your version of this file only * under the terms of the GNU License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GNU License. If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the GNU License." * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is derived from and used in conjunction with the * H323plus Project (www.h323plus.org/) * * The Initial Developer of the Original Code is ISVO (Asia) Pte Ltd. * * Note: this file originally auto-generated by mib2c using * $Id: mib2c.openh323.conf,v 1.2 2008/01/05 07:11:39 shorne Exp $ * * Contributor(s): ______________________________________. * * */ #ifndef H341_OID_H #define H341_OID_H #include // Access permissions #define H341_ReadOnly 1 #define H341_ReadWrite 2 #define H341_Create 3 #define H341_NoAccess 4 // field Types #define ASN_COUNTER PASNObject::Counter #define ASN_INTEGER PASNObject::UInteger32 #define ASN_TIMETICKS PASNObject::TimeTicks #define ASN_UNSIGNED PASNObject::UInteger32 #define ASN_OCTET_STR PASNObject::String #define ASN_ARRAY PASNObject::Sequence @foreach $i table@ /* Entry definitions for table $i */ #define H341_$i.uc "$i.objectID" @foreach $c column@ #define H341_$c.uc "$c.objectID" @end@ @end@ /* Table definitions */ @foreach $i table@ typedef PASN_Array H341_$i.uc_Table @end@ /* Type definitions */ struct { PString oid; PINDEX type; PINDEX access; } H341_Field[] = { @foreach $i table@ {H341_$i.uc , ASN_ARRAY, H341_$i.access}, @foreach $c column@ {H341_$c.uc , $c.type, H341_$c.access }, @end@ @end@ }; #endif /* H341_OID_H */ h323plus/src/h341/H323TERMINAL-MIB.mib0000644000175000017500000004204110655704732015240 0ustar markmark -- -- This defines the MIB in support of the ITU-T H.323 terminal -- H323TERMINAL-MIB DEFINITIONS ::= BEGIN IMPORTS MODULE-IDENTITY, OBJECT-TYPE, Integer32, TimeTicks FROM SNMPv2-SMI DisplayString, DateAndTime FROM SNMPv2-TC MODULE-COMPLIANCE, OBJECT-GROUP FROM SNMPv2-CONF ifIndex FROM IF-MIB mmH323Root, MmTerminalVideoCapability, MmTerminalAudioCapability, MmTerminalDataCapability FROM MULTI-MEDIA-MIB-TC; h323Terminal MODULE-IDENTITY LAST-UPDATED "9812181400Z" -- December 18, 1998 ORGANIZATION "ITU-T" CONTACT-INFO "ITU-T SG-16" DESCRIPTION "This MIB module supports the functions of an ITU-T H.323 terminal" REVISION "9812181400Z" -- December 18, 1998 DESCRIPTION "The H323 terminal mib" ::= { mmH323Root 3} h323TermSystem OBJECT IDENTIFIER ::= { h323Terminal 1} h323TermCapability OBJECT IDENTIFIER ::= { h323Terminal 2} h323TermControl OBJECT IDENTIFIER ::= { h323Terminal 3} -- Terminal description group -- Implementation of the terminal description group is mandatory for all -- H.323 terminals. If an agent is not configured to have a value for any -- of these variables, a string of length 0 is returned. h323TermSystemTable OBJECT-TYPE SYNTAX SEQUENCE OF H323TermSystemEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains the terminal description of a terminal indexed by ifIndex." ::= { h323TermSystem 1 } h323TermSystemEntry OBJECT-TYPE SYNTAX H323TermSystemEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It contains objects that describe the terminal." INDEX {ifIndex} ::= { h323TermSystemTable 1 } H323TermSystemEntry ::= SEQUENCE { h323TermSystemDescr DisplayString, h323TermSystemHWVersionNo DisplayString, h323TermSystemSWVersionNo DisplayString, h323TermSystemContact DisplayString, h323TermSystemt35CountryCode INTEGER, h323TermSystemt35CountryCodeExtention INTEGER, h323TermSystemt35ManufacturerCode INTEGER, h323TermSystemLocation DisplayString, h323TermSystemUptime TimeTicks, h323TermSystemLocalTime DateAndTime, h323TermSystemDiagnostics Integer32, h323TermSystemStatus INTEGER } h323TermSystemDescr OBJECT-TYPE SYNTAX DisplayString (SIZE (0..255)) MAX-ACCESS read-only STATUS current DESCRIPTION "A textual description of the terminal. Name of manufacturer." ::= { h323TermSystemEntry 1 } h323TermSystemHWVersionNo OBJECT-TYPE SYNTAX DisplayString (SIZE (0..255)) MAX-ACCESS read-only STATUS current DESCRIPTION "Hardware version number." ::= { h323TermSystemEntry 2 } h323TermSystemSWVersionNo OBJECT-TYPE SYNTAX DisplayString (SIZE (0..255)) MAX-ACCESS read-only STATUS current DESCRIPTION "Software version number." ::= { h323TermSystemEntry 3 } h323TermSystemContact OBJECT-TYPE SYNTAX DisplayString (SIZE (0..255)) MAX-ACCESS read-only STATUS current DESCRIPTION "The textual identification of the contact person for this managed node, together with information on how to contact this person." ::= { h323TermSystemEntry 4 } h323TermSystemt35CountryCode OBJECT-TYPE SYNTAX INTEGER (0..255) MAX-ACCESS read-only STATUS current DESCRIPTION "Country code, per T.35 Annex A." ::= { h323TermSystemEntry 5 } h323TermSystemt35CountryCodeExtention OBJECT-TYPE SYNTAX INTEGER (0..255) MAX-ACCESS read-only STATUS current DESCRIPTION "Assigned nationally, unless the country code is 255, in which case this value shall contain the country code found in T.35 Annex B." ::= { h323TermSystemEntry 6 } h323TermSystemt35ManufacturerCode OBJECT-TYPE SYNTAX INTEGER (0..65535) MAX-ACCESS read-only STATUS current DESCRIPTION "Assigned nationally." ::= { h323TermSystemEntry 7 } h323TermSystemLocation OBJECT-TYPE SYNTAX DisplayString (SIZE (0..255)) MAX-ACCESS read-only STATUS current DESCRIPTION "The physical location of this system. For instance, closet, terminal room and so on" ::= { h323TermSystemEntry 8 } h323TermSystemUptime OBJECT-TYPE SYNTAX TimeTicks MAX-ACCESS read-only STATUS current DESCRIPTION "The amount of time (in hundredths of a second) since this H323 terminal was last initialized. Note that this is different from sysUpTime in MIB-II because sysUpTime is the uptime of the network management portion of the system." ::= { h323TermSystemEntry 9 } h323TermSystemLocalTime OBJECT-TYPE SYNTAX DateAndTime MAX-ACCESS read-write STATUS current DESCRIPTION "The local date and time of day." ::= { h323TermSystemEntry 10 } h323TermSystemDiagnostics OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "Indicates the results of the last diagnostic routine performed noResults(1) No diagnostic has yet been performed, passed(2) the diagnostic has been passed, hardwareFault(3) Hardware fault was detected, softwareFault(4) Software fault was detected" ::= { h323TermSystemEntry 11 } h323TermSystemStatus OBJECT-TYPE SYNTAX INTEGER { callSetup (1), callinProgress(2), callHangUp(3), idle(4) } MAX-ACCESS read-only STATUS current DESCRIPTION "General status of the terminal" ::= { h323TermSystemEntry 12 } -- H323 Terminal capabilities -- h323TerminalCapsTable OBJECT-TYPE SYNTAX SEQUENCE OF H323TerminalCapsEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains the capability of a terminal indexed by ifIndex." ::= { h323TermCapability 1 } h323TerminalCapsEntry OBJECT-TYPE SYNTAX H323TerminalCapsEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It conatins objects that describe the capability." INDEX {ifIndex} ::= { h323TerminalCapsTable 1 } H323TerminalCapsEntry ::= SEQUENCE { h323TerminalCapsMaxLineRate Integer32, h323TerminalCapsVideoCaps MmTerminalVideoCapability, h323TerminalCapsMaxVideoRate Integer32, h323TerminalCapsAudioCaps MmTerminalAudioCapability, h323TerminalCapsDataCaps MmTerminalDataCapability, h323TerminalCapsRDCCaps Integer32 } h323TerminalCapsMaxLineRate OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "This object represents maximum line rate of combined audio/video and data in kbit/s of this terminal." ::= { h323TerminalCapsEntry 1 } h323TerminalCapsVideoCaps OBJECT-TYPE SYNTAX MmTerminalVideoCapability MAX-ACCESS read-only STATUS current DESCRIPTION "This object represents the video capabilities of this terminal" ::= { h323TerminalCapsEntry 2 } h323TerminalCapsMaxVideoRate OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The maximum bit rate that the video channel can do." ::= { h323TerminalCapsEntry 3 } h323TerminalCapsAudioCaps OBJECT-TYPE SYNTAX MmTerminalAudioCapability MAX-ACCESS read-only STATUS current DESCRIPTION "This object represents the audio capabilities of this terminal. " ::= { h323TerminalCapsEntry 4 } h323TerminalCapsDataCaps OBJECT-TYPE SYNTAX MmTerminalDataCapability MAX-ACCESS read-only STATUS current DESCRIPTION "This object represents the data application capability of the terminal. " ::= { h323TerminalCapsEntry 5 } h323TerminalCapsRDCCaps OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "This object represents the Remote Device Control capability of the terminal. other 0 FECC 1 -- Far-end Camera Control Bits are numbered starting with the most significant bit of the first byte being bit 0, the least significant bit of the first byte being bit 7, the most significant bit of the second byte being bit 8, and so on. A one bit encodes that the capability is supported, a zero bit encodes that the capability is not supported." ::= { h323TerminalCapsEntry 6 } -- Terminal control group -- This group contains variables used to control a H.323 terminal. h323TerminalControlTable OBJECT-TYPE SYNTAX SEQUENCE OF H323TerminalControlEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains the control funciton of a terminal indexed by ifIndex." ::= { h323TermControl 1 } h323TerminalControlEntry OBJECT-TYPE SYNTAX H323TerminalControlEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "It conatins objects that control the terminal." INDEX {ifIndex} ::= { h323TerminalControlTable 1 } H323TerminalControlEntry ::= SEQUENCE { h323TerminalControlAdminControl INTEGER, h323TerminalControlEnableLocalLoopback INTEGER, h323TerminalControlEnableRemoteLoopback INTEGER } h323TerminalControlAdminControl OBJECT-TYPE SYNTAX INTEGER { run(1), reset(2), diagnose(3), stop(4) } MAX-ACCESS read-write STATUS current DESCRIPTION "The desired state of the H323 terminal. Setting the value if this object to these values will have the following actions: run(1) The H323 terminal will enter the run state, reset(2) The H323 terminal will reset, diagnose(3) Will activate the diagnostic routine, stop(4) Will halt the H323 terminal." ::= { h323TerminalControlEntry 1 } h323TerminalControlEnableLocalLoopback OBJECT-TYPE SYNTAX INTEGER { enable(1), disable(2) } MAX-ACCESS read-write STATUS current DESCRIPTION "Enable or disable local system loopback on a video conference system. Local loopbacks loop back the audio, video and data streams in a call. Once looped back, a new call will show up in the Call Table and the user can observe the audio/video/data rates to assure that these components are working properly." ::= { h323TerminalControlEntry 2 } h323TerminalControlEnableRemoteLoopback OBJECT-TYPE SYNTAX INTEGER{ enable(1), disable(2) } MAX-ACCESS read-write STATUS current DESCRIPTION "Enable or disable remote system loopback on a video conference system. Remote loopbacks loop back the audio and video streams from the remote system in a call.. When the remote system calls in, a new call will show up in the Call Table and the user can observe the audio/video/data rates to assure that these components are coming in properly from the remote system." ::= { h323TerminalControlEntry 3 } -- -- CONFORMANCE -- h323TerminalMIBConfs OBJECT IDENTIFIER ::= { h323Terminal 5 } h323TerminalMIBGroups OBJECT IDENTIFIER ::= { h323TerminalMIBConfs 1 } h323TerminalMIBCompl OBJECT IDENTIFIER ::= { h323TerminalMIBConfs 2 } -- -- Groups for conformance -- h323TerminalDesrGroup OBJECT-GROUP OBJECTS { h323TermSystemDescr, h323TermSystemHWVersionNo, h323TermSystemSWVersionNo, h323TermSystemContact, h323TermSystemt35CountryCode, h323TermSystemt35CountryCodeExtention, h323TermSystemt35ManufacturerCode, h323TermSystemLocation, h323TermSystemUptime, h323TermSystemLocalTime, h323TermSystemDiagnostics, h323TermSystemStatus } STATUS current DESCRIPTION "A collection of objects providing the description of the terminal" ::= { h323TerminalMIBGroups 1} h323TerminalCapsGroup OBJECT-GROUP OBJECTS { h323TerminalCapsMaxLineRate, h323TerminalCapsVideoCaps, h323TerminalCapsMaxVideoRate, h323TerminalCapsAudioCaps, h323TerminalCapsDataCaps, h323TerminalCapsRDCCaps } STATUS current DESCRIPTION "A collection of objects providing capabilities of the terminal" ::= { h323TerminalMIBGroups 2} h323TerminalControlGroup OBJECT-GROUP OBJECTS { h323TerminalControlAdminControl, h323TerminalControlEnableLocalLoopback, h323TerminalControlEnableRemoteLoopback } STATUS current DESCRIPTION "A collection of objects providing the ability to invoke terminal functions" ::= { h323TerminalMIBGroups 4} h323TerminalCompliance MODULE-COMPLIANCE STATUS current DESCRIPTION "The set of objects required for compliance" MODULE MANDATORY-GROUPS { h323TerminalDesrGroup, h323TerminalCapsGroup } GROUP h323TerminalControlGroup DESCRIPTION "This group is optional. H323 terminals under a centralized control via a network management protocol are strongly encouraged to use this group to enable the remote control functions." ::= { h323TerminalMIBCompl 1 } END h323plus/src/h341/IPV6-FLOW-LABEL-MIB.mib0000644000175000017500000000431310655704732015573 0ustar markmark -- This defines the MIB from RFC3595 Textual Conventions for IPv6 Flow Label - IPV6-FLOW-LABEL-MIB DEFINITIONS ::= BEGIN IMPORTS MODULE-IDENTITY, mib-2, Integer32 FROM SNMPv2-SMI TEXTUAL-CONVENTION FROM SNMPv2-TC; ipv6FlowLabelMIB MODULE-IDENTITY LAST-UPDATED "200308280000Z" -- 28 August 2003 ORGANIZATION "IETF Operations and Management Area" CONTACT-INFO "Bert Wijnen (Editor) Lucent Technologies Schagen 33 3461 GL Linschoten Netherlands Phone: +31 348-407-775 EMail: bwijnen@lucent.com Send comments to . " DESCRIPTION "This MIB module provides commonly used textual conventions for IPv6 Flow Labels. Copyright (C) The Internet Society (2003). This version of this MIB module is part of RFC 3595, see the RFC itself for full legal notices. " -- Revision History REVISION "200308280000Z" -- 28 August 2003 DESCRIPTION "Initial version, published as RFC 3595." ::= { mib-2 103 } IPv6FlowLabel ::= TEXTUAL-CONVENTION DISPLAY-HINT "d" STATUS current DESCRIPTION "The flow identifier or Flow Label in an IPv6 packet header that may be used to discriminate traffic flows. " REFERENCE "Internet Protocol, Version 6 (IPv6) specification, section 6. RFC 2460. " SYNTAX Integer32 (0..1048575) IPv6FlowLabelOrAny ::= TEXTUAL-CONVENTION DISPLAY-HINT "d" STATUS current DESCRIPTION "The flow identifier or Flow Label in an IPv6 packet header that may be used to discriminate traffic flows. The value of -1 is used to indicate a wildcard, i.e. any value. " SYNTAX Integer32 (-1 | 0..1048575) ENDh323plus/src/t38proto.cxx0000644000175000017500000003650211015524377014137 0ustar markmark/* * t38proto.cxx * * T.38 protocol handler * * Open Phone Abstraction Library * * Copyright (c) 1998-2002 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): Vyacheslav Frolov. * * $Log: t38proto.cxx,v $ * Revision 1.2 2008/05/23 11:22:39 willamowius * switch BOOL to PBoolean to be able to compile with Ptlib 2.2.x * * Revision 1.1 2007/08/06 20:51:08 shorne * First commit of h323plus * * Revision 1.19 2006/07/05 04:37:44 csoutheren * Applied 1488904 - SetPromiscuous(AcceptFromLastReceivedOnly) for T.38 * Thanks to Vyacheslav Frolov * * Revision 1.18 2004/07/03 06:51:37 rjongbloed * Added PTRACE_PARAM() macro to fix warnings on parameters used in PTRACE * macros only. * * Revision 1.17 2002/12/19 01:49:08 robertj * Fixed incorrect setting of optional fields in pre-corrigendum packet * translation function, thanks Vyacheslav Frolov * * Revision 1.16 2002/12/06 04:18:02 robertj * Fixed GNU warning * * Revision 1.15 2002/12/02 04:08:02 robertj * Turned T.38 Originate inside out, so now has WriteXXX() functions that can * be call ed in different thread contexts. * * Revision 1.14 2002/12/02 00:37:19 robertj * More implementation of T38 base library code, some taken from the t38modem * application by Vyacheslav Frolov, eg redundent frames. * * Revision 1.13 2002/11/21 06:40:00 robertj * Changed promiscuous mode to be three way. Fixes race condition in gkserver * which can cause crashes or more PDUs to be sent to the wrong place. * * Revision 1.12 2002/09/25 05:20:40 robertj * Fixed warning on no trace version. * * Revision 1.11 2002/08/05 10:03:48 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.10 2002/02/09 04:39:05 robertj * Changes to allow T.38 logical channels to use single transport which is * now owned by the OpalT38Protocol object instead of H323Channel. * * Revision 1.9 2002/01/01 23:27:50 craigs * Added CleanupOnTermination functions * Thanks to Vyacheslav Frolov * * Revision 1.8 2001/12/22 22:18:07 craigs * Canged to ignore subsequent PDUs with identical sequence numbers * * Revision 1.7 2001/12/22 01:56:51 robertj * Cleaned up code and allowed for repeated sequence numbers. * * Revision 1.6 2001/12/19 09:15:43 craigs * Added changes from Vyacheslav Frolov * * Revision 1.5 2001/12/14 08:36:36 robertj * More implementation of T.38, thanks Adam Lazur * * Revision 1.4 2001/11/11 23:18:53 robertj * MSVC warnings removed. * * Revision 1.3 2001/11/11 23:07:52 robertj * Some clean ups after T.38 commit, thanks Adam Lazur * * Revision 1.2 2001/11/09 05:39:54 craigs * Added initial T.38 support thanks to Adam Lazur * * Revision 1.1 2001/07/17 04:44:32 robertj * Partial implementation of T.120 and T.38 logical channels. * */ #include #ifdef __GNUC__ #pragma implementation "t38proto.h" #endif #include "t38proto.h" #include "t38.h" #include "transports.h" #define new PNEW ///////////////////////////////////////////////////////////////////////////// OpalT38Protocol::OpalT38Protocol() { transport = NULL; autoDeleteTransport = FALSE; corrigendumASN = TRUE; indicatorRedundancy = 0; lowSpeedRedundancy = 0; highSpeedRedundancy = 0; lastSentSequenceNumber = -1; } OpalT38Protocol::~OpalT38Protocol() { if (autoDeleteTransport) delete transport; } void OpalT38Protocol::CleanUpOnTermination() { transport->Close(); } void OpalT38Protocol::SetTransport(H323Transport * t, PBoolean autoDelete) { if (transport != t) { if (autoDeleteTransport) delete transport; transport = t; } autoDeleteTransport = autoDelete; } PBoolean OpalT38Protocol::Originate() { PTRACE(3, "T38\tOriginate, transport=" << *transport); // Application would normally override this. The default just sends // a "heartbeat". while (WriteIndicator(T38_Type_of_msg_t30_indicator::e_no_signal)) PThread::Sleep(500); return FALSE; } PBoolean OpalT38Protocol::WritePacket(const T38_IFPPacket & ifp) { T38_UDPTLPacket udptl; // If there are redundant frames saved from last time, put them in if (!redundantIFPs.IsEmpty()) { udptl.m_error_recovery.SetTag(T38_UDPTLPacket_error_recovery::e_secondary_ifp_packets); T38_UDPTLPacket_error_recovery_secondary_ifp_packets & secondary = udptl.m_error_recovery; secondary.SetSize(redundantIFPs.GetSize()); for (PINDEX i = 0; i < redundantIFPs.GetSize(); i++) secondary[i].SetValue(redundantIFPs[i]); } // Encode the current ifp, but need to do stupid things as there are two // versions of the ASN out there, completely incompatible. if (corrigendumASN || !ifp.HasOptionalField(T38_IFPPacket::e_data_field)) udptl.m_primary_ifp_packet.EncodeSubType(ifp); else { T38_PreCorrigendum_IFPPacket old_ifp; old_ifp.m_type_of_msg = ifp.m_type_of_msg; old_ifp.IncludeOptionalField(T38_IFPPacket::e_data_field); PINDEX count = ifp.m_data_field.GetSize(); old_ifp.m_data_field.SetSize(count); for (PINDEX i = 0 ; i < count; i++) { old_ifp.m_data_field[i].m_field_type = ifp.m_data_field[i].m_field_type; if (ifp.m_data_field[i].HasOptionalField(T38_Data_Field_subtype::e_field_data)) { old_ifp.m_data_field[i].IncludeOptionalField(T38_Data_Field_subtype::e_field_data); old_ifp.m_data_field[i].m_field_data = ifp.m_data_field[i].m_field_data; } } udptl.m_primary_ifp_packet.PASN_OctetString::EncodeSubType(old_ifp); } lastSentSequenceNumber = (lastSentSequenceNumber + 1) & 0xffff; udptl.m_seq_number = lastSentSequenceNumber; PPER_Stream rawData; udptl.Encode(rawData); #if PTRACING if (PTrace::CanTrace(4)) { PTRACE(4, "T38\tSending PDU:\n " << setprecision(2) << ifp << "\n " << setprecision(2) << udptl << "\n " << setprecision(2) << rawData); } else { PTRACE(3, "T38\tSending PDU:" " seq=" << lastSentSequenceNumber << " type=" << ifp.m_type_of_msg.GetTagName()); } #endif if (!transport->WritePDU(rawData)) { PTRACE(1, "T38\tWritePacket error: " << transport->GetErrorText()); return FALSE; } // Calculate the level of redundency for this data phase PINDEX maxRedundancy; if (ifp.m_type_of_msg.GetTag() == T38_Type_of_msg::e_t30_indicator) maxRedundancy = indicatorRedundancy; else if ((T38_Type_of_msg_data)ifp.m_type_of_msg == T38_Type_of_msg_data::e_v21) maxRedundancy = lowSpeedRedundancy; else maxRedundancy = highSpeedRedundancy; // Push down the current ifp into redundant data if (maxRedundancy > 0) redundantIFPs.InsertAt(0, new PBYTEArray(udptl.m_primary_ifp_packet.GetValue())); // Remove redundant data that are surplus to requirements while (redundantIFPs.GetSize() > maxRedundancy) redundantIFPs.RemoveAt(maxRedundancy); return TRUE; } PBoolean OpalT38Protocol::WriteIndicator(unsigned indicator) { T38_IFPPacket ifp; ifp.SetTag(T38_Type_of_msg::e_t30_indicator); T38_Type_of_msg_t30_indicator & ind = ifp.m_type_of_msg; ind.SetValue(indicator); return WritePacket(ifp); } PBoolean OpalT38Protocol::WriteMultipleData(unsigned mode, PINDEX count, unsigned * type, const PBYTEArray * data) { T38_IFPPacket ifp; ifp.SetTag(T38_Type_of_msg::e_data); T38_Type_of_msg_data & datamode = ifp.m_type_of_msg; datamode.SetValue(mode); ifp.IncludeOptionalField(T38_IFPPacket::e_data_field); ifp.m_data_field.SetSize(count); for (PINDEX i = 0; i < count; i++) { ifp.m_data_field[i].m_field_type.SetValue(type[i]); ifp.m_data_field[i].m_field_data.SetValue(data[i]); } return WritePacket(ifp); } PBoolean OpalT38Protocol::WriteData(unsigned mode, unsigned type, const PBYTEArray & data) { return WriteMultipleData(mode, 1, &type, &data); } PBoolean OpalT38Protocol::Answer() { PTRACE(3, "T38\tAnswer, transport=" << *transport); // We can't get negotiated sender's address and port, // so accept first packet from any address and port transport->SetPromiscuous(H323Transport::AcceptFromAny); int consecutiveBadPackets = 0; int expectedSequenceNumber = 0; // 16 bit PBoolean firstPacket = TRUE; for (;;) { PPER_Stream rawData; if (!transport->ReadPDU(rawData)) { PTRACE(1, "T38\tError reading PDU: " << transport->GetErrorText(PChannel::LastReadError)); return FALSE; } // Decode the PDU T38_UDPTLPacket udptl; if (udptl.Decode(rawData)) { consecutiveBadPackets = 0; // When we get the first packet, we know sender's address and port, // so accept next packets from sender's address and port only if (firstPacket) { PTRACE(3, "T38\tReceived first packet, remote=" << transport->GetLastReceivedAddress()); transport->SetPromiscuous(H323Transport::AcceptFromLastReceivedOnly); firstPacket = FALSE; } } else { consecutiveBadPackets++; PTRACE(2, "T38\tRaw data decode failure:\n " << setprecision(2) << rawData << "\n UDPTL = " << setprecision(2) << udptl); if (consecutiveBadPackets > 3) { PTRACE(1, "T38\tRaw data decode failed multiple times, aborting!"); return FALSE; } continue; } unsigned receivedSequenceNumber = udptl.m_seq_number; #if PTRACING if (PTrace::CanTrace(5)) { PTRACE(4, "T38\tReceived UDPTL packet:\n " << setprecision(2) << rawData << "\n " << setprecision(2) << udptl); } if (PTrace::CanTrace(4)) { PTRACE(4, "T38\tReceived UDPTL packet:\n " << setprecision(2) << udptl); } else { PTRACE(3, "T38\tReceived UDPTL packet: seq=" << receivedSequenceNumber); } #endif // Calculate the number of lost packets, if the number lost is really // really big then it means it is actually a packet arriving out of order int lostPackets = (receivedSequenceNumber - expectedSequenceNumber)&0xffff; if (lostPackets > 32767) { PTRACE(3, "T38\tIgnoring out of order packet"); continue; } expectedSequenceNumber = (WORD)(receivedSequenceNumber+1); // See if this is the expected packet if (lostPackets > 0) { // Not what was expected, see if we have enough redundant data if (udptl.m_error_recovery.GetTag() == T38_UDPTLPacket_error_recovery::e_secondary_ifp_packets) { T38_UDPTLPacket_error_recovery_secondary_ifp_packets & secondary = udptl.m_error_recovery; int nRedundancy = secondary.GetSize(); if (lostPackets >= nRedundancy) { if (!HandlePacketLost(lostPackets - nRedundancy)) { PTRACE(1, "T38\tHandle packet failed, aborting answer"); return FALSE; } lostPackets = nRedundancy; } while (lostPackets > 0) { if (!HandleRawIFP(secondary[lostPackets++])) { PTRACE(1, "T38\tHandle packet failed, aborting answer"); return FALSE; } } } else { if (!HandlePacketLost(lostPackets)) { PTRACE(1, "T38\tHandle lost packet, aborting answer"); return FALSE; } } } if (!HandleRawIFP(udptl.m_primary_ifp_packet)) { PTRACE(1, "T38\tHandle packet failed, aborting answer"); return FALSE; } } } PBoolean OpalT38Protocol::HandleRawIFP(const PASN_OctetString & pdu) { T38_IFPPacket ifp; if (corrigendumASN) { if (pdu.DecodeSubType(ifp)) return HandlePacket(ifp); PTRACE(2, "T38\tIFP decode failure:\n " << setprecision(2) << ifp); return TRUE; } T38_PreCorrigendum_IFPPacket old_ifp; if (!pdu.DecodeSubType(old_ifp)) { PTRACE(2, "T38\tPre-corrigendum IFP decode failure:\n " << setprecision(2) << old_ifp); return TRUE; } ifp.m_type_of_msg = old_ifp.m_type_of_msg; if (old_ifp.HasOptionalField(T38_IFPPacket::e_data_field)) { ifp.IncludeOptionalField(T38_IFPPacket::e_data_field); PINDEX count = old_ifp.m_data_field.GetSize(); ifp.m_data_field.SetSize(count); for (PINDEX i = 0 ; i < count; i++) { ifp.m_data_field[i].m_field_type = old_ifp.m_data_field[i].m_field_type; if (old_ifp.m_data_field[i].HasOptionalField(T38_Data_Field_subtype::e_field_data)) { ifp.m_data_field[i].IncludeOptionalField(T38_Data_Field_subtype::e_field_data); ifp.m_data_field[i].m_field_data = old_ifp.m_data_field[i].m_field_data; } } } return HandlePacket(ifp); } PBoolean OpalT38Protocol::HandlePacket(const T38_IFPPacket & ifp) { if (ifp.m_type_of_msg.GetTag() == T38_Type_of_msg::e_t30_indicator) return OnIndicator((T38_Type_of_msg_t30_indicator)ifp.m_type_of_msg); for (PINDEX i = 0; i < ifp.m_data_field.GetSize(); i++) { if (!OnData((T38_Type_of_msg_data)ifp.m_type_of_msg, ifp.m_data_field[i].m_field_type, ifp.m_data_field[i].m_field_data.GetValue())) return FALSE; } return TRUE; } PBoolean OpalT38Protocol::OnIndicator(unsigned indicator) { switch (indicator) { case T38_Type_of_msg_t30_indicator::e_no_signal : break; case T38_Type_of_msg_t30_indicator::e_cng : return OnCNG(); case T38_Type_of_msg_t30_indicator::e_ced : return OnCED(); case T38_Type_of_msg_t30_indicator::e_v21_preamble : return OnPreamble(); case T38_Type_of_msg_t30_indicator::e_v27_2400_training : case T38_Type_of_msg_t30_indicator::e_v27_4800_training : case T38_Type_of_msg_t30_indicator::e_v29_7200_training : case T38_Type_of_msg_t30_indicator::e_v29_9600_training : case T38_Type_of_msg_t30_indicator::e_v17_7200_short_training : case T38_Type_of_msg_t30_indicator::e_v17_7200_long_training : case T38_Type_of_msg_t30_indicator::e_v17_9600_short_training : case T38_Type_of_msg_t30_indicator::e_v17_9600_long_training : case T38_Type_of_msg_t30_indicator::e_v17_12000_short_training : case T38_Type_of_msg_t30_indicator::e_v17_12000_long_training : case T38_Type_of_msg_t30_indicator::e_v17_14400_short_training : case T38_Type_of_msg_t30_indicator::e_v17_14400_long_training : return OnTraining(indicator); default: break; } return TRUE; } PBoolean OpalT38Protocol::OnCNG() { return TRUE; } PBoolean OpalT38Protocol::OnCED() { return TRUE; } PBoolean OpalT38Protocol::OnPreamble() { return TRUE; } PBoolean OpalT38Protocol::OnTraining(unsigned /*indicator*/) { return TRUE; } PBoolean OpalT38Protocol::OnData(unsigned /*mode*/, unsigned /*type*/, const PBYTEArray & /*data*/) { return TRUE; } PBoolean OpalT38Protocol::HandlePacketLost(unsigned PTRACE_PARAM(nLost)) { PTRACE(2, "T38\tHandlePacketLost, n=" << nLost); /* don't handle lost packets yet */ return TRUE; } ///////////////////////////////////////////////////////////////////////////// h323plus/OpenH323.mak0000644000175000017500000000130211167133304013035 0ustar markmark!ifndef PTLIBDIR PTLIBDIR=c:\work\pwlib !endif !ifndef OPENH323DIR OPENH323DIR=$(MAKEDIR) !endif INCLUDE=$(INCLUDE);$(PTLIBDIR)\include\ptlib\msos;$(PTLIBDIR)\include\pwlib\mswin;$(PTLIBDIR)\include;$(OPENH323DIR)/include LIB=$(LIB);$(PTLIBDIR)\Lib;$(OPENH323DIR)/Lib all: msdev OpenH323Lib.dsp /MAKE "OpenH323Lib - Win32 Release" /USEENV msdev OpenH323dll.dsp /MAKE "OpenH323dll - Win32 Release" /USEENV cd samples\simple msdev simple.dsp /MAKE "SimpH323 - Win32 Release" /USEENV debug: all msdev OpenH323Lib.dsp /MAKE "OpenH323Lib - Win32 Debug" /USEENV msdev OpenH323dll.dsp /MAKE "OpenH323dll - Win32 Debug" /USEENV cd samples\simple msdev simple.dsp /MAKE "SimpH323 - Win32 Debug" /USEENV h323plus/openh323u.mak0000644000175000017500000000554011627574274013352 0ustar markmark# # openh323u.mak # # Make symbols include file for Open H323 library # # Copyright (c) 1998-2000 Equivalence Pty. Ltd. # # The contents of this file are subject to the Mozilla Public License # Version 1.0 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is Open H323 library. # # The Initial Developer of the Original Code is Equivalence Pty. Ltd. # # Contributor(s): ______________________________________. # # $Id: openh323u.mak,v 1.1 2011/09/01 03:15:08 shorne Exp $ # PTLIBDIR = @PTLIBDIR@ ifndef OPENH323DIR OPENH323DIR = @OPENH323DIR@ endif STDCCFLAGS += @STDCCFLAGS@ LDFLAGS += @LDFLAGS@ LDLIBS += @LDLIBS@ ENDLDLIBS := @ENDLDLIBS@ $(ENDLDLIBS) NOAUDIOCODECS = @NOAUDIOCODECS@ NOVIDEO = @NOVIDEO@ NOTRACE = @NOTRACE@ H323_H224 = @H323_H224@ H323_H230 = @H323_H230@ H323_H235 = @H323_H235@ H323_H239 = @H323_H239@ H323_H248 = @H323_H248@ H323_H249 = @H323_H249@ H323_H341 = @H323_H341@ H323_H350 = @H323_H350@ H323_H450 = @H323_H450@ H323_H460 = @H323_H460@ H323_H46018 = @H323_H46018@ H323_H46019M = @H323_H46019M@ H323_H46023 = @H323_H46023@ H323_H501 = @H323_H501@ H323_T38 = @H323_T38@ H323_T120 = @H323_T120@ H323_GNUGK = @H323_GNUGK@ H323_FILE = @H323_FILE@ ifdef LIBRARY_MAKEFILE include $(PTLIBDIR)/make/unix.mak else ifeq ($(NOTRACE), 1) OBJDIR_SUFFIX := n endif # NOTRACE include $(PTLIBDIR)/make/ptlib.mak endif # LIBRARY_MAKEFILE LIBDIRS += $(OPENH323DIR) #OH323_SUPPRESS_H235 = 1 OH323_SRCDIR = $(OPENH323DIR)/src ifdef PREFIX OH323_INCDIR = $(PREFIX)/include/openh323 else OH323_INCDIR = $(OPENH323DIR)/include endif # PREFIX ifndef OH323_LIBDIR OH323_LIBDIR = $(OPENH323DIR)/lib endif # OH323_LIBDIR ifeq ($(NOTRACE), 1) STDCCFLAGS += -DPASN_NOPRINTON -DPASN_LEANANDMEAN OH323_SUFFIX = n else ifeq (,$(findstring PTRACING,$(STDCCFLAGS))) STDCCFLAGS += -DPTRACING RCFLAGS += -DPTRACING endif OH323_SUFFIX = $(OBJ_SUFFIX) endif # NOTRACE OH323_BASE = h323_$(PLATFORM_TYPE)_$(OH323_SUFFIX)$(LIB_TYPE) OH323_FILE = lib$(OH323_BASE).$(LIB_SUFFIX) LDFLAGS += -L$(OH323_LIBDIR) LDLIBS := -l$(OH323_BASE) $(LDLIBS) STDCCFLAGS += -I$(OH323_INCDIR) ifdef OH323_SUPPRESS_H235 STDCCFLAGS += -DOH323_SUPPRESS_H235 endif $(TARGET) : $(OH323_LIBDIR)/$(OH323_FILE) ifndef LIBRARY_MAKEFILE ifdef DEBUG $(OH323_LIBDIR)/$(OH323_FILE): $(MAKE) -C $(OH323_SRCDIR) debug else $(OH323_LIBDIR)/$(OH323_FILE): $(MAKE) -C $(OH323_SRCDIR) opt endif # DEBUG endif # LIBRARY_MAKEFILE # End of file h323plus/h323plus_changes.txt0000644000175000017500000000545711637227356014752 0ustar markmarkH323plus 1.23.0 - 1.23.1 Added MediaChannelCapability to OLC Added H.235.6 Support Updated H323List for depreciation warnings with ptlib 2.11 Added RTP multiplexing (with H.460.19) H323plus 1.22 - 1.23 (Fixed) Deadlock in NAT Method when locking H323Connection (Fixed) Encoded audio/video input and output support Added H.460.17 support (Fixed) PNatMethod changes in ptlib 2.11 Added of H323Dictionary/H323List for depreciation warnings with ptlib 2.11 Use fastStart element in CallProceeding again, set enableMERAHack in H323Connection to disable (Fixed) H.460.9 support and fine tune where H.460 messages go in PDU (Fixed) H.239 support so the correct capability is selected in OLC (Fixed) H.224 Stability by fixing initialisation and removing nested mutexes Improved H.264 decoder with better initialisation and support for send FPU's H323plus 1.21 - 1.22 Fixed H.239 Support and now support H.239 only plugins G.711 now 20ms sample rate by default Added H.264 support (tested with polycom,lifesize,tandberg) (fixed) Video frames now on fixed 90k clock timestamp Added Video decoder can handle multiple frames to decode Added A/V sync support Added Audio Packet Loss detection Added Video Flow Control signaling (fixed) Generic Audio Capability processing (fixed) Support for Wideband codecs (fixed) H.239 fields not populated in TCS causing error with Tandberg Added support for call transfer with routeCallToMC Added application access to the received H.245 TCS Added support for 16CIF Provide timestamp with DTMF tones (fixed) Attempt reregistration after being unregistered (fixed) Sending and receiving different framesizes Added Called/CallingpartySubAddress Q.931 (Fixed) Tandberg MXP issue with video size (Fixed) Tandberg T1000 master/slave issue Added Major overhaul of presence system Added H.460.24 Annex B Added H.460.9 support (fixed) compile issue on windows with Platform SDK and "codecs.h" Added H.460.23/.24 support Added H.460.18/.19 support (Disabled by default) (fixed) Slow start being accidently activated when FastStart being acknowledged. H323plus 1.20 - 1.21 Updated to compile with Ptlib 2.2.x and 2.3.x (PBoolean etc.) (Fixed) Early Media Fixed as the FastStartState is now checked if acknowledged prior to sending connect message. (Fixed) RTP Payload Types not read from the audio plugin codecs (standard and non-standard) (Fixed) External RTP Channel: Added new virtual functions to avoid compiling errors when using old OpenH323 code. Added callback for the ability to set the Maximum bandwidth for Video Call H323Connection::OnSetInitialBandwidth() Corrected FileTransfer Capability OID to avoid conflict with other OID usage Added Callback for H.460 Instancing so can disable/remove H.460 Features at runtime. Added support for H.450 Non-call supplementary services (like H.450.7) (Fixed) Typos with H323_GnuGK directive h323plus/opal.m40000644000175000017500000011402611342720026012305 0ustar markmarkdnl ######################################################################## dnl Generic OPAL Macros dnl ######################################################################## dnl OPAL_MSG_CHECK dnl Print out a line of text and a result dnl Arguments: $1 Message to print out dnl $2 Result to print out dnl Return: none AC_DEFUN([OPAL_MSG_CHECK], [ AC_MSG_CHECKING([$1]) AC_MSG_RESULT([$2]) ]) dnl OPAL_SIMPLE dnl Change a given variable according to arguments and subst and define it dnl Arguments: $1 name of configure option dnl $2 the variable to change, subst and define dnl $3 the configure argument description dnl $4 dependency variable #1 dnl $5 dependency variable #2 dnl Return: $$2 The (possibly) changed variable AC_DEFUN([OPAL_SIMPLE_OPTION], [ if test "x$$2" = "x"; then AC_MSG_ERROR([No default specified for $2, please correct configure.ac]) fi AC_ARG_ENABLE([$1], [AC_HELP_STRING([--enable-$1],[$3])], [$2=$enableval]) if test "x$4" != "x"; then if test "x$$4" != "xyes"; then AC_MSG_NOTICE([$1 support disabled due to disabled dependency $4]) $2=no fi fi if test "x$5" != "x"; then if test "x$$5" != "xyes"; then AC_MSG_NOTICE([$1 support disabled due to disabled dependency $5]) $2=no fi fi OPAL_MSG_CHECK([$3], [$$2]) AC_SUBST($2) if test "x$$2" = "xyes"; then AC_DEFINE([$2], [1], [$3]) fi ]) dnl OPAL_ADD_CFLAGS_LIBS dnl Add options to LIBS and CFLAGS. dnl Also add them to PKG_LIBS and PKG_REQUIRES accordingly. dnl Arguments: $1 CFLAGS to add dnl $2 LIBS to add dnl $3 PKG library to add dnl Return: none AC_DEFUN([OPAL_ADD_CFLAGS_LIBS], [ CFLAGS="$CFLAGS $1" CXXFLAGS="$CXXFLAGS $1" LIBS="$LIBS $2" if test "x$3" = x; then PKG_CFLAGS="$PKG_CFLAGS $1" PKG_LIBS="$PKG_LIBS $2" else PKG_REQUIRES="$PKG_REQUIRES $3" fi ]) dnl OPAL_GET_LIBNAME dnl Find out the real name of a library file dnl Arguments: $1 The prefix for variables referring to the library (e.g. LIBAVCODEC) dnl $2 The name of the library (e.g. libavcodec) dnl $3 The -l argument(s) of the library (e.g. -lavcodec) dnl Return: $$1_LIB_NAME The actual name of the library file dnl Define: $1_LIB_NAME The actual name of the library file AC_DEFUN([OPAL_GET_LIBNAME], [ AC_MSG_CHECKING(filename of $2 library) AC_LANG_CONFTEST([int main () {}]) $CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS $3>&AS_MESSAGE_LOG_FD if test \! -x conftest$ac_exeext ; then AC_MSG_RESULT(cannot determine - using defaults) else $1_LIB_NAME=`$OBJDUMP -x ./conftest$ac_exeext | grep 'NEEDED.*$2' | awk '{print @S|@2; }'` AC_MSG_RESULT($$1_LIB_NAME) AC_DEFINE_UNQUOTED([$1_LIB_NAME], ["$$1_LIB_NAME"], [Filename of the $2 library]) fi ]) dnl OPAL_DETERMINE_DEBUG dnl Determine desired debug level, default is -g -O2 dnl Arguments: dnl Return: $DEFAULT_CFLAGS dnl $DEBUG_BUILD AC_DEFUN([OPAL_DETERMINE_DEBUG], [ AC_ARG_ENABLE([debug], [AC_HELP_STRING([--enable-debug],[Enable debug build])], [DEBUG_BUILD=$enableval], [DEBUG_BUILD=no]) case "$target_os" in solaris*) opal_release_flags="-O3 -DSOLARIS" opal_debug_flags="-g -D_DEBUG -DSOLARIS" ;; *) opal_release_flags="-Os" opal_debug_flags="-g3 -ggdb -O0 -D_DEBUG" ;; esac DEBUG_CFLAGS="$DEBUG_CFLAGS $opal_debug_flags" RELEASE_CFLAGS="$RELEASE_CFLAGS $opal_release_flags" if test "x${DEBUG_BUILD}" = xyes; then DEFAULT_CFLAGS="$DEFAULT_CFLAGS $opal_debug_flags" else DEFAULT_CFLAGS="$DEFAULT_CFLAGS $opal_release_flags" fi OPAL_MSG_CHECK([Debugging support], [$DEBUG_BUILD]) ]) dnl OPAL_DETERMINE_VERSION dnl Determine OPAL's version number dnl Arguments: $OPALDIR dnl Return: $MAJOR_VERSION dnl $MINOR_VERSION dnl $BUILD_NUMBER dnl $OPAL_VERSION AC_DEFUN([OPAL_DETERMINE_VERSION], [ MAJOR_VERSION=`cat $1/version.h | grep MAJOR_VERSION | cut -f3 -d' '` MINOR_VERSION=`cat $1/version.h | grep MINOR_VERSION | cut -f3 -d' '` BUILD_NUMBER=`cat $1/version.h | grep BUILD_NUMBER | cut -f3 -d' '` OPAL_VERSION="${MAJOR_VERSION}.${MINOR_VERSION}.${BUILD_NUMBER}" OPAL_MSG_CHECK([OPAL Version], [$OPAL_VERSION]) ]) dnl OPAL_DETERMINE_PLUGIN_DIR dnl Determine plugin install directory dnl Arguments: $OPAL_VERSION dnl Return: $PLUGIN_DIR dnl $EXPANDED_PLUGIN_DIR AC_DEFUN([OPAL_DETERMINE_PLUGIN_DIR], [ AC_ARG_WITH([plugin-installdir], AS_HELP_STRING([--with-plugin-installdir=DIR],[Location where plugins are installed, starting at the lib dir]), [PLUGIN_DIR="$withval"], [PLUGIN_DIR="opal-${OPAL_VERSION}"] ) EXPANDED_PLUGIN_DIR="${libdir}/${PLUGIN_DIR}" if test "x${exec_prefix}" = "xNONE" ; then if test "x${prefix}" = "xNONE" ; then EXPANDED_PLUGIN_DIR=`echo ${EXPANDED_PLUGIN_DIR} | sed s#\\${exec_prefix}#/usr/local#` else EXPANDED_PLUGIN_DIR=`echo ${EXPANDED_PLUGIN_DIR} | sed s#\\${exec_prefix}#${prefix}#` fi else EXPANDED_PLUGIN_DIR=`echo ${EXPANDED_PLUGIN_DIR} | sed s#\\${exec_prefix}#${exec_prefix}#` fi OPAL_MSG_CHECK([Plugin install directory], [${EXPANDED_PLUGIN_DIR}]) ]) dnl OPAL_DETERMINE_LIBNAMES dnl Determine opal library and symlink names dnl Arguments: $target_os dnl $MACHTYPE dnl $SHAREDLIBEXT dnl BUILD_TYPE dnl BUILD_NUMBER dnl $DEBUG_LEVEL dnl Return: $OBJ_SUFFIX dnl $OPAL_OBJDIR dnl $LIB_FILENAME_STATIC dnl $LIB_FILENAME_SHARED dnl $LIB_FILENAME_SHARED_PAT AC_DEFUN([OPAL_DETERMINE_LIBNAMES], [ if test "x$1" = "xDEBUG" ; then OBJ_SUFFIX="_d" else OBJ_SUFFIX="" fi $1_OPAL_OBJDIR="\${OPALDIR}/lib_${OSTYPE}_${MACHTYPE}/obj${OBJ_SUFFIX}" OPAL_LIBDIR="\${OPALDIR}/lib_${OSTYPE}_${MACHTYPE}" $1_LIB_NAME="libopal${OBJ_SUFFIX}" $1_LIB_FILENAME_SHARED="libopal${OBJ_SUFFIX}.${SHAREDLIBEXT}" $1_LIB_FILENAME_STATIC="libopal${OBJ_SUFFIX}_s.a" if test "x${BUILD_TYPE}" = "x." ; then build_suffix=".${BUILD_NUMBER}" else build_suffix="${BUILD_TYPE}${BUILD_NUMBER}" fi case "$target_os" in cygwin*|mingw*|darwin*) $1_LIB_FILENAME_SHARED_PAT="libopal${OBJ_SUFFIX}.${MAJOR_VERSION}.${MINOR_VERSION}${build_suffix}.${SHAREDLIBEXT}" ;; *) $1_LIB_FILENAME_SHARED_PAT="libopal${OBJ_SUFFIX}.${SHAREDLIBEXT}.${MAJOR_VERSION}.${MINOR_VERSION}${build_suffix}" ;; esac AC_SUBST(OPAL_LIBDIR) AC_SUBST($1_OPAL_OBJDIR) AC_SUBST($1_LIB_NAME) AC_SUBST($1_LIB_FILENAME_SHARED) AC_SUBST($1_LIB_FILENAME_STATIC) AC_SUBST($1_LIB_FILENAME_SHARED_PAT) ]) dnl OPAL_GCC_VERSION dnl Verify that GCC version is > 3 dnl Arguments: dnl Return: AC_DEFUN([OPAL_GCC_VERSION], [ if test "x$GXX" = "xyes" ; then gcc_version=`$CXX -dumpversion` AC_MSG_NOTICE(gcc version is $gcc_version); GXX_MAJOR=`echo $gcc_version | sed 's/\..*$//'` GXX_MINOR=[`echo $gcc_version | sed -e 's/[0-9][0-9]*\.//' -e 's/\..*$//'`] GXX_PATCH=[`echo $gcc_version | sed -e 's/[0-9][0-9]*\.[0-9][0-9]*\.//' -e 's/\..*$//'`] dnl cannot compile for less than gcc 3 AC_MSG_CHECKING(if gcc version is valid) if test ${GXX_MAJOR} -lt 3 ; then AC_MSG_RESULT(no) AC_MSG_ERROR([OPAL requires gcc version 3 or later]) else AC_MSG_RESULT(yes) fi fi ]) dnl OPAL_CHECK_BSR dnl Check for bit scan intrinsic dnl Arguments: dnl Return: $1 action if-found dnl $2 action if-not-found AC_DEFUN([OPAL_CHECK_BSR], [ BSR_TEST_SRC=" #include int main(int argc, char* argv[]) { #ifdef __GNUC__ unsigned int val = 0x00000FF0; if (__builtin_clz(val) == 20) exit(0); #endif exit(1); }" AC_RUN_IFELSE([AC_LANG_SOURCE([[$BSR_TEST_SRC]])],[opal_gcc_clz=yes],[opal_gcc_clz=no],[opal_gcc_clz=yes]) OPAL_MSG_CHECK([for working bit scan intrinsic], [$opal_gcc_clz]) AS_IF([test AS_VAR_GET([opal_gcc_clz]) = yes], [$1], [$2])[] ]) dnl ######################################################################## dnl PTLIB dnl ######################################################################## dnl OPAL_FIND_PTLIB dnl Find ptlib, either in PTLIBDIR or whereever on the system dnl Arguments: dnl Return: $PTLIB_VERSION dnl $PTLIB_CFLAGS dnl $PTLIB_CXXFLAGS dnl $PTLIB_LIBS dnl $PTLIB_MACHTYPE dnl $PTLIB_OSTYPE dnl $PTLIB_LIBS dnl $DEBUG_LIBS dnl $RELEASE_LIBS dnl $DEFAULT_LIBS AC_DEFUN([OPAL_FIND_PTLIB], [ m4_pattern_allow([PKG_CONFIG_LIBDIR]) AC_ARG_VAR([PTLIBDIR], [path to ptlib directory if installed ptlib shall not be used]) AC_ARG_ENABLE([versioncheck], [AC_HELP_STRING([--enable-versioncheck], [enable ptlib versioncheck])], [PTLIB_VERSION_CHECK=$enableval], [PTLIB_VERSION_CHECK=yes]) dnl This segment looks for PTLIB in PTLIBDIR if test "x${PTLIBDIR}" != "x" ; then old_PKG_CONFIG_LIBDIR="${PKG_CONFIG_LIBDIR}" export PKG_CONFIG_LIBDIR="${PTLIBDIR}" # Should not need to set PKG_CONFIG_PATH, but some systems find the # installed versions before the explicit version even though that # is what PKG_CONFIG_LIBDIR is supposed to override. old_PKG_CONFIG_PATH="${PKG_CONFIG_PATH}" export PKG_CONFIG_PATH="${PTLIBDIR}" if ! AC_RUN_LOG([$PKG_CONFIG ptlib --exists]); then AC_MSG_ERROR([No PTLIB library found in ${PTLIBDIR}]) fi echo "Found PTLIB in PTLIBDIR ${PTLIBDIR}" if test "x${PTLIB_VERSION_CHECK}" = "xyes" ; then if ! AC_RUN_LOG([$PKG_CONFIG ptlib --atleast-version=${PTLIB_REC_VERSION}]); then AC_MSG_ERROR([PTLIB Version check failed, recommended version is at least ${PTLIB_REC_VERSION}]) fi fi PTLIB_VERSION=`$PKG_CONFIG ptlib --modversion` PTLIB_CFLAGS=`$PKG_CONFIG ptlib --cflags` PTLIB_CXXFLAGS=`$PKG_CONFIG ptlib --variable=cxxflags` PTLIB_LIBS=`$PKG_CONFIG ptlib --libs` RELEASE_LIBS=`$PKG_CONFIG ptlib --libs` DEBUG_LIBS=`$PKG_CONFIG ptlib --define-variable=suffix=_d --libs` export PKG_CONFIG_LIBDIR="${old_PKG_CONFIG_LIBDIR}" export PKG_CONFIG_PATH="${old_PKG_CONFIG_PATH}" dnl This segment looks for PTLIB on the system else if test "x${PTLIB_VERSION_CHECK}" = "xyes" ; then PKG_CHECK_MODULES(PTLIB, ptlib >= ${PTLIB_REC_VERSION}) else PKG_CHECK_MODULES(PTLIB, ptlib) fi PTLIB_VERSION=`$PKG_CONFIG ptlib --modversion` PTLIB_CXXFLAGS=`$PKG_CONFIG ptlib --variable=cxxflags` DEBUG_LIBS=`$PKG_CONFIG ptlib --define-variable=suffix=_d --libs` RELEASE_LIBS="$PTLIB_LIBS" fi if test "x${DEBUG_BUILD}" = xyes; then DEFAULT_LIBS="$DEBUG_LIBS" else DEFAULT_LIBS="$RELEASE_LIBS" fi echo "Version: ${PTLIB_VERSION}" echo "CFLAGS: ${PTLIB_CFLAGS}" echo "CXXFLAGS: ${PTLIB_CXXFLAGS}" echo "DEBUG: ${DEBUG_LIBS}" echo "RELEASE: ${RELEASE_LIBS}" ]) dnl OPAL_CHECK_PTLIB dnl Check if ptlib was compiled with a specific optional feature dnl Arguments: $1 Name of feature dnl $2 ptlib/pasn.h Header file to include dnl $3 Code to test the feature dnl $4 Variable to set/define dnl Return: $$4 dnl Define: $4 AC_DEFUN([OPAL_CHECK_PTLIB], [ old_CXXFLAGS="$CXXFLAGS" old_LIBS="$LIBS" old_LIBS="$LIBS" CXXFLAGS="$CXXFLAGS $PTLIB_CFLAGS $PTLIB_CXXFLAGS" if test "x${DEBUG_BUILD}" = xyes; then LIBS="$LIBS $DEBUG_LIBS" else LIBS="$LIBS $RELEASE_LIBS" fi AC_LANG(C++) AC_LINK_IFELSE([ #include #include #include <$2> int main() { $3 } ], [opal_ptlib_option=yes], [opal_ptlib_option=no]) CXXFLAGS="$old_CXXFLAGS" LIBS="$old_LIBS" OPAL_MSG_CHECK([PTLIB has $1], [$opal_ptlib_option]) $4="$opal_ptlib_option" AC_SUBST($4) if test "x$opal_ptlib_option" = "xyes" ; then AC_DEFINE([$4], [1], [$1]) fi ]) dnl OPAL_CHECK_PTLIB_MANDATORY dnl Check if ptlib was compiled with a specific mandatory feature dnl Arguments: $1 Name of feature dnl $2 ptlib/pasn.h Header file to include dnl $3 Code to test the feature AC_DEFUN([OPAL_CHECK_PTLIB_MANDATORY], [ old_CXXFLAGS="$CXXFLAGS" old_LIBS="$LIBS" CXXFLAGS="$CXXFLAGS $PTLIB_CFLAGS $PTLIB_CXXFLAGS" if test "x${DEBUG_BUILD}" = xyes; then LIBS="$LIBS $DEBUG_LIBS" else LIBS="$LIBS $RELEASE_LIBS" fi AC_LANG(C++) AC_LINK_IFELSE([ #include #include #include <$2> int main() { $3 } ], [opal_ptlib_option=yes], [opal_ptlib_option=no]) CXXFLAGS="$old_CXXFLAGS" LIBS="$old_LIBS" OPAL_MSG_CHECK([PTLIB has $1], [$opal_ptlib_option]) if test "x$opal_ptlib_option" = "xno" ; then echo " ERROR: compulsory feature from PTLib disabled."; exit 1; fi ]) AC_DEFUN([OPAL_CHECK_PTLIB_EXISTS], [ old_CXXFLAGS="$CXXFLAGS" old_LIBS="$LIBS" CXXFLAGS="$CXXFLAGS $PTLIB_CFLAGS $PTLIB_CXXFLAGS" if test "x${DEBUG_BUILD}" = xyes; then LIBS="$LIBS $DEBUG_LIBS" else LIBS="$LIBS $RELEASE_LIBS" fi AC_LANG(C++) AC_LINK_IFELSE([int main() {} ], [opal_ptlib_exists=yes], [opal_ptlib_exists=no]) CXXFLAGS="$old_CXXFLAGS" LIBS="$old_LIBS" if test "x$opal_ptlib_exists" != "xyes" ; then AC_MSG_ERROR([Could not find a linkable ptlib in specified environment to verify symbols (debug ptlib: ${DEBUG_BUILD})]) fi ]) dnl OPAL_CHECK_PTLIB_DEFINE dnl Verify if a specific #define in ptlib is defined dnl Arguments: $1 define name / description dnl $2 PTLIB define dnl $3 OPAL define to set dnl Return: dnl Define: $3 AC_DEFUN([OPAL_CHECK_PTLIB_DEFINE], [ old_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS $PTLIB_CFLAGS $PTLIB_CXXFLAGS" AC_LANG(C++) AC_TRY_COMPILE([ #include #include #include ], [ #ifndef $2 #error "$2 not defined" #endif ], [opal_ptlib_option=yes], [opal_ptlib_option=no]) CXXFLAGS="$old_CXXFLAGS" OPAL_MSG_CHECK([PTLIB has option $1], [$opal_ptlib_option]) $3="$opal_ptlib_option" AC_SUBST($3) if test "x$opal_ptlib_option" = "xyes" ; then AC_DEFINE([$3], [1], [$1]) fi ]) dnl ######################################################################## dnl LIBAVCODEC dnl ######################################################################## dnl OPAL_LIBAVCODEC_HACK dnl Whether to activate or deactivate the memory alignment hack for libavcodec dnl Arguments: $LIBAVCODEC_STACKALIGN_HACK The default value dnl Return: $LIBAVCODEC_STACKALIGN_HACK The possibly user-mandated value dnl Define: LIBAVCODEC_STACKALIGN_HACK The possibly user-mandated value AC_DEFUN([OPAL_LIBAVCODEC_HACK], [ AC_ARG_ENABLE([libavcodec-stackalign-hack], [AC_HELP_STRING([--enable-libavcodec-stackalign-hack], [Stack alignment hack for libavcodec library])], [LIBAVCODEC_STACKALIGN_HACK=$enableval]) if test x$LIBAVCODEC_STACKALIGN_HACK = xyes; then AC_MSG_NOTICE(libavcodec stack align hack enabled) AC_DEFINE([LIBAVCODEC_STACKALIGN_HACK], [1], [Stack alignment hack for libavcodec library]) else AC_MSG_NOTICE(libavcodec stack align hack disabled) fi ]) dnl OPAL_LIBAVCODEC_SOURCE dnl Allow the user to specify the libavcodec source dir for full MPEG4 rate control dnl Arguments: none dnl Return: $LIBAVCODEC_SOURCE_DIR The directory dnl Define: LIBAVCODEC_SOURCE_DIR The directory AC_DEFUN([OPAL_LIBAVCODEC_SOURCE], [ AC_MSG_CHECKING(libavcodec source) LIBAVCODEC_SOURCE_DIR= AC_ARG_WITH([libavcodec-source-dir], [AC_HELP_STRING([--with-libavcodec-source-dir],[Directory with libavcodec source code, for MPEG4 rate control correction])]) if test -f "$with_libavcodec_source_dir/libavcodec/avcodec.h" then AC_MSG_RESULT(enabled) LIBAVCODEC_SOURCE_DIR="$with_libavcodec_source_dir" AC_DEFINE([LIBAVCODEC_HAVE_SOURCE_DIR], [1], [Directory with libavcodec source code, for MPEG4 rate control correction]) else LIBAVCODEC_SOURCE_DIR= AC_MSG_RESULT(disabled) fi ]) dnl OPAL_LIBAVCODEC_HEADER dnl Find out whether libavcodec headers reside in ffmpeg/ (old) or libavcodec/ (new) dnl Arguments: $LIBAVCODEC_CFLAGS The cflags for compiling apps with libavcodec dnl Return: none dnl Define: LIBAVCODEC_HEADER The libavcodec header (e.g. libavcodec/avcodec.h) AC_DEFUN([OPAL_LIBAVCODEC_HEADER], [LIBAVCODEC_HEADER= old_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $LIBAVCODEC_CFLAGS" AC_CHECK_HEADER([libavcodec/avcodec.h], [ AC_DEFINE([LIBAVCODEC_HEADER], ["libavcodec/avcodec.h"], [The libavcodec header file]) LIBAVCODEC_HEADER="libavcodec/avcodec.h" ], []) if test x$LIBAVCODEC_HEADER = x; then AC_CHECK_HEADER([ffmpeg/avcodec.h], [ AC_DEFINE([LIBAVCODEC_HEADER], ["ffmpeg/avcodec.h"], [The libavcodec header file]) LIBAVCODEC_HEADER="ffmpeg/avcodec.h" ]) fi if test x$LIBAVCODEC_HEADER = x; then AC_MSG_ERROR([Cannot find libavcodec header file]) fi CFLAGS="$old_CFLAGS" ]) dnl OPAL_CHECK_LIBAVCODEC dnl Check if libavcodec has a specific C symbol dnl Arguments: $LIBAVCODEC_LIBS The libs needed to link to libavcodec dnl $1 symbol name dnl $2 action if-found dnl $3 action if-not-found dnl Return: AC_DEFUN([OPAL_CHECK_LIBAVCODEC], [ AC_MSG_CHECKING(if libavcodec has $1) got_symbol=no AC_LANG_CONFTEST([int main () {}]) $CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS $LIBAVCODEC_LIBS>&AS_MESSAGE_LOG_FD if test -x conftest$ac_exeext ; then libavcodec_libdir=`$LDD ./conftest$ac_exeext | grep libavcodec | awk '{print @S|@3; }'` if test "$libavcodec_libdir" = "not" ; then AC_MSG_RESULT([no, please check LD_LIBRARY_PATH]) else symbol=`@S|@NM -D @S|@libavcodec_libdir | grep $1` if test "x$symbol" != "x"; then got_symbol=yes fi AC_MSG_RESULT([$got_symbol]) fi fi AS_IF([test AS_VAR_GET([got_symbol]) = yes], [$2], [$3])[] ]) dnl ######################################################################## dnl x264 dnl ######################################################################## dnl OPAL_X264_LINKAGE dnl Whether to statically link the H.264 helper to x264 or to load libx264 dynamically when the helper is executed dnl Arguments: $X264_LINK_STATIC The default value dnl Return: $X264_LINK_STATIC The possibly user-mandated value dnl Define: X264_LINK_STATIC The possibly user-mandated value AC_DEFUN([OPAL_X264_LINKAGE], [ AC_ARG_ENABLE([x264-link-static], [AC_HELP_STRING([--enable-x264-link-static], [Statically link x264 to the plugin. Default for win32.])], [X264_LINK_STATIC=$enableval]) if test x$X264_LINK_STATIC = xyes; then AC_MSG_NOTICE(x264 static linking enabled) AC_DEFINE([X264_LINK_STATIC], [1], [Statically link x264 to the plugin. Default for win32.]) else AC_MSG_NOTICE(x264 static linking disabled) fi ]) dnl ######################################################################## dnl speex dnl ######################################################################## dnl OPAL_SPEEX_TYPES dnl Define necessary typedefs for Speex dnl Arguments: none dnl Return: SIZE16 short or int dnl SIZE32 short, int or long AC_DEFUN([OPAL_SPEEX_TYPES], [ old_CFLAGS="$CFLAGS" old_LIBS="$LIBS" CFLAGS= LIBS= AC_CHECK_SIZEOF(short) AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(long long) case 2 in $ac_cv_sizeof_short) SIZE16="short";; $ac_cv_sizeof_int) SIZE16="int";; esac case 4 in $ac_cv_sizeof_int) SIZE32="int";; $ac_cv_sizeof_long) SIZE32="long";; $ac_cv_sizeof_short) SIZE32="short";; esac CFLAGS="$old_CFLAGS" LIBS="$old_LIBS" ]) dnl OPAL_SPEEX_TYPES dnl Determine whether to use the system or internal speex (can be forced), uses pkg-config dnl Arguments: none dnl Return: $SPEEX_SYSTEM whether system or interal speex shall be used dnl $SPEEX_INTERNAL_VERSION Internal speex version dnl $SPEEX_SYSTEM_VERSION System speex version (if found) dnl $SPEEX_CFLAGS System speex cflags (if using system speex) dnl $SPEEX_LIBS System speex libs (if using system speex) AC_DEFUN([OPAL_DETERMINE_SPEEX], [AC_ARG_ENABLE([localspeex], [AC_HELP_STRING([--enable-localspeex],[Force use local version of Speex library rather than system version])], [localspeex=$enableval], [localspeex=]) AC_MSG_CHECKING(internal Speex version) SPEEX_CFLAGS= SPEEX_LIBS= if test -f "audio/Speex/libspeex/misc.h"; then SPEEX_INTERNAL_VERSION=`grep "#define SPEEX_VERSION" audio/Speex/libspeex/misc.h | sed -e 's/^.*speex\-//' -e 's/\".*//'` elif test -f "src/codec/speex/libspeex/misc.h"; then SPEEX_INTERNAL_VERSION=`grep "#define SPEEX_VERSION" src/codec/speex/libspeex/misc.h | sed -e 's/^.*speex\-//' -e 's/\".*//'` else AC_MSG_ERROR([Could not find internal speex library]) fi AC_MSG_RESULT($SPEEX_INTERNAL_VERSION) if test "x${localspeex}" = "xyes" ; then AC_MSG_NOTICE(forcing use of local Speex sources) SPEEX_SYSTEM=no elif test "x${localspeex}" = "xno" ; then AC_MSG_NOTICE(forcing use of system Speex library) PKG_CHECK_MODULES([SPEEX], [speex], [SPEEX_SYSTEM=yes], [ AC_MSG_ERROR([cannot find system speex]) ]) else AC_MSG_NOTICE(checking whether system Speex or internal Speex is more recent) PKG_CHECK_MODULES([SPEEX], [speex >= $SPEEX_INTERNAL_VERSION], [SPEEX_SYSTEM=yes], [ SPEEX_SYSTEM=no AC_MSG_RESULT(internal Speex version is more recent than system Speex or system Speex not found) ]) fi if test "x${SPEEX_SYSTEM}" = "xyes" ; then SPEEX_SYSTEM_VERSION=`$PKG_CONFIG speex --modversion` AC_MSG_RESULT(using system Speex version $SPEEX_SYSTEM_VERSION) fi ]) dnl OPAL_DETERMINE_SPEEXDSP dnl Determine whether to use the system or internal speex dsp lib (can be forced), uses pkg-config dnl Arguments: none dnl Return: $SPEEXDSP_SYSTEM whether system or interal speex dsp lib shall be used dnl $SPEEXDSP_CFLAGS System speex cflags (if using system speex) dnl $SPEEXDSP_LIBS System speex libs (if using system speex) AC_DEFUN([OPAL_DETERMINE_SPEEXDSP], [SPEEXDSP_SYSTEM=no AC_ARG_ENABLE([localspeexdsp], [AC_HELP_STRING([--enable-localspeexdsp],[Force use local version of Speex DSP library for echo cancellation rather than system version])], [localspeexdsp=$enableval], [localspeexdsp=no]) if test "x$localspeexdsp" = "xno" ; then PKG_CHECK_MODULES([SPEEXDSP], [speexdsp], [SPEEXDSP_SYSTEM=yes], [ AC_MSG_RESULT(System Speex DSP library not found) ]) if test "x$SPEEXDSP_SYSTEM" = "xyes" ; then old_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $SPEEXDSP_CFLAGS" AC_CHECK_HEADERS([speex/speex.h], [AC_DEFINE(OPAL_HAVE_SPEEX_SPEEX_H, [1], [speex/speex.h available])]) CFLAGS="$old_CFLAGS" fi fi ]) dnl OPAL_SPEEX_FLOAT dnl Determine whether to use the system or internal speex dsp lib (can be forced), uses pkg-config dnl Arguments: $SPEEXDSP_CFLAGS dnl $SPEEXDSP_LIBS dnl Return: $SPEEXDSP_SYSTEM whether system or interal speex dsp lib shall be used AC_DEFUN([OPAL_SPEEX_FLOAT], [ old_CFLAGS="$CFLAGS" old_LIBS="$LIBS" CFLAGS="$CFLAGS $SPEEXDSP_CFLAGS -Werror" LIBS="$LIBS $SPEEXDSP_LIBS" AC_CHECK_HEADERS([speex/speex.h], [speex_inc_dir="speex/"], [speex_inc_dir=]) AC_LINK_IFELSE([ #include <${speex_inc_dir}speex.h> #include <${speex_inc_dir}speex_preprocess.h> #include int main() { SpeexPreprocessState *st; spx_int16_t *x; float *echo; speex_preprocess(st, x, echo); return 0; } ], [opal_speexdsp_float=yes], [opal_speexdsp_float=no]) CFLAGS="$old_CFLAGS" LIBS="$old_LIBS" OPAL_MSG_CHECK([Speex has float], [$opal_speexdsp_float]) AS_IF([test AS_VAR_GET([opal_speexdsp_float]) = yes], [$1], [$2])[] ]) dnl ######################################################################## dnl libdl dnl ######################################################################## dnl OPAL_FIND_LBDL dnl Try to find a library containing dlopen() dnl Arguments: $1 action if-found dnl $2 action if-not-found dnl Return: $DL_LIBS The libs for dlopen() AC_DEFUN([OPAL_FIND_LIBDL], [ opal_libdl=no AC_CHECK_HEADERS([dlfcn.h], [opal_dlfcn=yes], [opal_dlfcn=no]) if test "$opal_dlfcn" = yes ; then AC_MSG_CHECKING(if dlopen is available) AC_LANG(C) AC_TRY_COMPILE([#include ], [void * p = dlopen("lib", 0);], [opal_dlopen=yes], [opal_dlopen=no]) if test "$opal_dlopen" = no ; then AC_MSG_RESULT(no) else AC_MSG_RESULT(yes) case "$target_os" in freebsd*|openbsd*|netbsd*|darwin*) AC_CHECK_LIB([c],[dlopen], [ opal_libdl=yes DL_LIBS="-lc" ], [opal_libdl=no]) ;; *) AC_CHECK_LIB([dl],[dlopen], [ opal_libdl=yes DL_LIBS="-ldl" ], [opal_libdl=no]) ;; esac fi fi AS_IF([test AS_VAR_GET([opal_libdl]) = yes], [$1], [$2])[] ]) dnl ######################################################################## dnl GSM dnl ######################################################################## dnl OPAL_FIND_GSM dnl Try to find an installed libgsm that is compiled with WAV49 dnl Arguments: $1 action if-found dnl $2 action if-not-found dnl Return: $GSM_CFLAGS dnl $GSM_LIBS AC_DEFUN([OPAL_FIND_GSM], [ opal_gsm=no AC_CHECK_LIB(gsm, gsm_create, opal_gsm=yes) if test "x$opal_gsm" = "xyes"; then AC_MSG_CHECKING(if system GSM library has WAV49) old_LIBS=$LIBS opal_gsm=no LIBS="$LIBS -lgsm" AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #include ]],[[ int option = 0; gsm handle = gsm_create(); return (gsm_option(handle, GSM_OPT_WAV49, &option) == -1) ? 1 : 0; ]])], opal_gsm=yes) LIBS=$old_LIBS AC_MSG_RESULT($opal_gsm) if test "x${opal_gsm}" = "xyes" ; then GSM_CFLAGS="-I/usr/include/gsm -I/usr/local/include/gsm" GSM_LIBS="-lgsm" fi OPAL_MSG_CHECK([System GSM], [$opal_gsm]) fi AS_IF([test AS_VAR_GET([opal_gsm]) = yes], [$1], [$2])[] ]) dnl ######################################################################## dnl SPANDSP dnl ######################################################################## dnl OPAL_FIND_SPANDSP dnl Find spandsp dnl Arguments: $1 action if-found dnl $2 action if-not-found dnl Return: $SPANDSP_LIBS AC_DEFUN([OPAL_FIND_SPANDSP], [ saved_LIBS="$LIBS" LIBS="$LIBS -lspandsp" AC_CHECK_LIB(spandsp, fax_free, [opal_spandsp=yes], [opal_spandsp=no]) LIBS=$saved_LIBS if test "x${opal_spandsp}" = "xyes"; then SPANDSP_LIBS="-lspandsp" AC_CHECK_HEADERS([spandsp.h], [opal_spandsp=yes], [opal_spandsp=no]) fi AS_IF([test AS_VAR_GET([opal_spandsp]) = yes], [$1], [$2])[] ]) dnl ######################################################################## dnl LIBZRTP dnl ######################################################################## dnl OPAL_FIND_LIBZRTP dnl Try to find zrtp library dnl Arguments: dnl Return: $1 action if-found dnl $2 action if-not-found dnl $ZRTP_INCDIR dnl $ZRTP_LIBDIR dnl $ZRTP_LIBS dnl $ZRTP_CFLAGS dnl $BN_INCDIR dnl $BN_LIBDIR AC_DEFUN([OPAL_FIND_LIBZRTP], [ opal_libzrtp=no ZRTP_LIBS= ZRTP_CFLAGS= AC_ARG_WITH([zrtp_includedir], AS_HELP_STRING([--with-zrtp-includedir=DIR],[ZRTP includes dir (default /usr/local/include/zrtp)]) ,[AC_SUBST(ZRTP_INCDIR, $withval)] ,[AC_SUBST(ZRTP_INCDIR, "/usr/local/include/zrtp")] ) AC_ARG_WITH([zrtp_libdir], AS_HELP_STRING([--with-zrtp-libdir=DIR],[ZRTP3 library dir (deafult /usr/local/lib)]) ,[AC_SUBST(ZRTP_LIBDIR, $withval)] ,[AC_SUBST(ZRTP_LIBDIR, "/usr/local/lib")] ) AC_ARG_WITH([bn_includedir], AS_HELP_STRING([--with-bn-includedir=DIR],[bn includes dir (deafult /usr/local/include/zrtp)]) ,[AC_SUBST(BN_INCDIR, $withval)] ,[AC_SUBST(BN_INCDIR, "/usr/local/include/zrtp")] ) AC_ARG_WITH([bn_libdir], AS_HELP_STRING([--with-bn-libdir=DIR],[bn library dir (deafult /usr/local/lib)]) ,[AC_SUBST(BN_LIBDIR, $withval)] ,[AC_SUBST(BN_LIBDIR, "/usr/local/lib")] ) dnl Check for the includes presence AC_MSG_CHECKING(for zrtp library includes in ${ZRTP_INCDIR}) if test -f ${ZRTP_INCDIR}/zrtp.h; then opal_libzrtp=yes ZRTP_LIBS="-lzrtp -lbn" ZRTP_CFLAGS="-DBUILD_ZRTP_MUTEXES -DHAS_LIBZRTP -I${ZRTP_INCDIR} -I${BN_INCDIR}" fi OPAL_MSG_CHECK([libzrtp], [$opal_libzrtp]) AS_IF([test AS_VAR_GET([opal_libzrtp]) = yes], [$1], [$2])[] ]) dnl ######################################################################## dnl LIBSRTP dnl ######################################################################## AC_DEFUN([OPAL_FIND_LIBSRTP], [ AC_LANG(C) AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[#include "srtp/srtp.h"]], [[ crypto_policy_t p; p.cipher_key_len = SRTP_MASTER_KEY_LEN; return 0; ]] ) ], [opal_libsrtp=yes], [opal_libsrtp=no]) if test "x${opal_libsrtp}" = "xyes" ; then SRTP_LIBS="-lsrtp" fi AS_IF([test AS_VAR_GET([opal_libsrtp]) = yes], [$1], [$2])[] ]) dnl ######################################################################## dnl JAVA dnl ######################################################################## dnl OPAL_FIND_JAVA dnl Try to find java headers dnl Arguments: $1 action if-found dnl $2 action if-not-found dnl Return: $JAVA_CFLAGS The cflags for java AC_DEFUN([OPAL_FIND_JAVA], [ opal_java=no JAVA_CFLAGS= AC_CHECK_HEADERS([jni.h], [opal_java=yes]) if test "x$opal_java" = "xno" ; then if test "x${JDK_ROOT}" = "x" ; then JDK_ROOT=${JDK_HOME} fi if test "x${JDK_ROOT}" != "x" ; then AC_CHECK_FILE([${JDK_ROOT}/include/jni.h], [ opal_java=yes JAVA_CFLAGS="-I${JDK_ROOT}/include -I${JDK_ROOT}/include/linux" ]) fi fi AS_IF([test AS_VAR_GET([opal_java]) = yes], [$1], [$2])[] ]) dnl OPAL_DETERMINE_ILBC dnl Determine whether to use the system or internal iLBC (can be forced) dnl Arguments: none dnl Return: $ILBC_SYSTEM whether system or internal iLBC shall be used dnl $ILBC_CFLAGS system iLBC CFLAGS if using system iLBC dnl $ILBC_LIBS system iLBC LIBS if using system iLBC AC_DEFUN([OPAL_DETERMINE_ILBC], [AC_ARG_ENABLE([localilbc], [AC_HELP_STRING([--enable-localilbc],[Force use local version of iLBC library rather than system version])], [localilbc=$enableval], [localilbc=]) if test "x${localilbc}" = "xyes" ; then AC_MSG_NOTICE(forcing use of local iLBC sources) ILBC_SYSTEM=no else AC_MSG_NOTICE(checking if iLBC is installed) saved_LIBS="$LIBS" LIBS="$LIBS -lilbc" AC_CHECK_LIB(ilbc, iLBC_encode, [has_ilbc=yes], [has_ilbc=no]) LIBS=$saved_LIBS if test "x${has_ilbc}" = "xyes"; then AC_CHECK_HEADERS([ilbc/iLBC_decode.h ilbc/iLBC_define.h ilbc/iLBC_encode.h], [has_ilbc=yes], [has_ilbc=no]) fi if test "x${has_ilbc}" = "xyes"; then ILBC_CFLAGS="" ILBC_LIBS="-lilbc" ILBC_SYSTEM=yes else ILBC_SYSTEM=no fi OPAL_MSG_CHECK([System iLBC], [$has_ilbc]) fi ]) h323plus/config.guess0000644000175000017500000012214110655704647013443 0ustar markmark#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. timestamp='2003-10-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; macppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvmeppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pmax:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mipseb-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sun3:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} exit 0 ;; alpha:OSF1:*:*) if test $UNAME_RELEASE = "V4.0"; then UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` fi # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha*:OpenVMS:*:*) echo alpha-hp-vms exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit 0 ;; DRS?6000:UNIX_SV:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7 && exit 0 ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c \ && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && exit 0 echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit 0 ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then # avoid double evaluation of $set_cc_for_build test -n "$CC_FOR_BUILD" || eval $set_cc_for_build if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; *:UNICOS/mp:*:*) echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*|*:GNU/FreeBSD:*:*) # Determine whether the default compiler uses glibc. eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #if __GLIBC__ >= 2 LIBC=gnu #else LIBC= #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` # GNU/FreeBSD systems have a "k" prefix to indicate we are using # FreeBSD's kernel, but not the complete OS. case ${LIBC} in gnu) kernel_only='k' ;; esac echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; x86:Interix*:[34]*) echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' exit 0 ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit 0 ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit 0 ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit 0 ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit 0 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit 0 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit 0 ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit 0 ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit 0 ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #ifdef __INTEL_COMPILER LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit 0 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit 0 ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit 0 ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i*86:*:5:[78]*) case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit 0 ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit 0 ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit 0 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) case `uname -p` in *86) UNAME_PROCESSOR=i686 ;; powerpc) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSR-[DGKLNPTVWY]:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit 0 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit 0 ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit 0 ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit 0 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit 0 ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit 0 ;; *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: h323plus/install-sh0000755000175000017500000002017410655704647013135 0ustar markmark#!/bin/sh # install - install a program, script, or datafile scriptversion=2003-09-24.23 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename= transform_arg= instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= usage="Usage: $0 [OPTION]... SRCFILE DSTFILE or: $0 -d DIR1 DIR2... In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default. In the second, create the directory path DIR. Options: -b=TRANSFORMBASENAME -c copy source (using $cpprog) instead of moving (using $mvprog). -d create directories instead of installing files. -g GROUP $chgrp installed files to GROUP. -m MODE $chmod installed files to MODE. -o USER $chown installed files to USER. -s strip installed files (using $stripprog). -t=TRANSFORM --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; -c) instcmd=$cpprog shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit 0;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; --version) echo "$0 $scriptversion"; exit 0;; *) if test -z "$src"; then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if test -z "$src"; then echo "$0: no input file specified." >&2 exit 1 fi # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then instcmd=: chmodcmd= else instcmd=$mkdirprog fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst"; then echo "$0: no destination specified." >&2 exit 1 fi # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift test -d "$pathcomp" || $mkdirprog "$pathcomp" pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $instcmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else # If we're going to rename the final executable, determine the name now. if test -z "$transformarg"; then dstfile=`basename "$dst"` else dstfile=`basename "$dst" $transformbasename \ | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename. test -z "$dstfile" && dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 trap '(exit $?); exit' 1 2 13 15 # Move or copy the file name to the temp name $doit $instcmd "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now remove or move aside any old file at destination location. We # try this two ways since rm can't unlink itself on some systems and # the destination file might be busy for other reasons. In this case, # the final cleanup might fail but the new file should still install # successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" fi && # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: h323plus/plugins/0000755000175000017500000000000011565143237012577 5ustar markmarkh323plus/plugins/Makefile.in0000644000175000017500000000321511376326052014643 0ustar markmarkSUBDIRS = audio/G722 \ audio/G.722.1 \ audio/G.722.2 \ audio/GSM0610 \ audio/Speex \ audio/iLBC \ audio/LPC_10 \ audio/G726 \ audio/IMA_ADPCM \ audio/gsm-amr \ video/H.261-vic HAVE_SBC=@HAVE_SBC@ ifeq ($(HAVE_SBC),yes) SUBDIRS += audio/SBC endif HAVE_CELT=@HAVE_CELT@ ifeq ($(HAVE_CELT),yes) SUBDIRS += audio/celt endif HAVE_H263=@HAVE_H263@ ifeq ($(HAVE_H263),yes) SUBDIRS += video/H.263-ffmpeg endif HAVE_H264=@HAVE_H264@ ifeq ($(HAVE_H264),yes) SUBDIRS += video/H.264 endif HAVE_H263P=@HAVE_H263P@ ifeq ($(HAVE_H263P),yes) SUBDIRS += video/H.263-1998 endif HAVE_MPEG4=@HAVE_MPEG4@ ifeq ($(HAVE_MPEG4),yes) SUBDIRS += video/MPEG4-ffmpeg endif HAVE_THEORA=@HAVE_THEORA@ ifeq ($(HAVE_THEORA),yes) SUBDIRS += video/THEORA endif HAVE_IXJ=@HAVE_IXJ@ ifeq ($(HAVE_IXJ),yes) SUBDIRS += LID/IxJ endif HAVE_VPB=@HAVE_VPB@ ifeq ($(HAVE_VPB),yes) SUBDIRS += LID/VPB endif HAVE_CAPI=@HAVE_CAPI@ ifeq ($(HAVE_CAPI),yes) SUBDIRS += LID/CAPI endif HAVE_SPANDSP=@HAVE_SPANDSP@ ifeq ($(HAVE_SPANDSP),yes) ifneq (,$(wildcard fax/fax_spandsp)) ifneq (,$(wildcard fax/fax_spandsp/spandsp_util)) SUBDIRS += fax/fax_spandsp endif endif endif all debug opt both \ optshared debugshared bothshared \ optnoshared debugnoshared bothnoshared: @set -e; $(foreach dir,$(SUBDIRS),if test -d ${dir} ; then $(MAKE) -C $(dir); fi ; ) clean optclean debugclean: @set -e; $(foreach dir,$(SUBDIRS),if test -d ${dir} ; then $(MAKE) -C $(dir) clean; fi ; ) install uninstall: @set -e; $(foreach dir,$(SUBDIRS),if test -d ${dir} ; then $(MAKE) -C $(dir) $@; fi ; ) depend optdepend debugdepend bothdepend release tagbuild: @echo h323plus/plugins/aclocal.m40000644000175000017500000001321711565143237014443 0ustar markmark# generated automatically by aclocal 1.11 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # # Copyright ТЉ 2004 Scott James Remnant . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # # Similar to PKG_CHECK_MODULES, make sure that the first instance of # this or PKG_CHECK_MODULES is called, or make sure to call # PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_ifval([$2], [$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD ifelse([$4], , [AC_MSG_ERROR(dnl [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT ])], [AC_MSG_RESULT([no]) $4]) elif test $pkg_failed = untried; then ifelse([$4], , [AC_MSG_FAILURE(dnl [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])], [$4]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) ifelse([$3], , :, [$3]) fi[]dnl ])# PKG_CHECK_MODULES h323plus/plugins/plugin-config.h.in0000644000175000017500000001066711342720033016114 0ustar markmark/* plugin-config.h.in. Generated from configure.ac by autoheader. */ /* default to full capabilities at empty fmtp lines */ #undef DEFAULT_TO_FULL_CAPABILITIES /* Define to 1 if you have the header file. */ #undef HAVE_ARPA_INET_H /* Define to 1 if you have the header file. */ #undef HAVE_CAPI20_H /* celt */ #undef HAVE_CELT /* celt 0.5.0 or later found */ #undef HAVE_CELT_0_5_0_OR_LATER /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the header file. */ #undef HAVE_FLOAT_H /* Define to 1 if you have the `fork' function. */ #undef HAVE_FORK /* enable plugin supporting H.263 via patched FFMPEG */ #undef HAVE_H263 /* enable H.264 support */ #undef HAVE_H264 /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* ffmpeg */ #undef HAVE_LIBAVCODEC /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_TELEPHONY_H /* Define to 1 if you have the header file. */ #undef HAVE_MALLOC_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_NETDB_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_H /* Enable SBC codec */ #undef HAVE_SBC /* Define to 1 if you have the header file. */ #undef HAVE_SPANDSP_H /* Define to 1 if you have the header file. */ #undef HAVE_STDDEF_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_FILE_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_IOCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKET_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TELEPHONY_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* theora */ #undef HAVE_THEORA /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `vfork' function. */ #undef HAVE_VFORK /* Define to 1 if you have the header file. */ #undef HAVE_VFORK_H /* enable voicetronix vpb */ #undef HAVE_VPB /* Define to 1 if `fork' works. */ #undef HAVE_WORKING_FORK /* Define to 1 if `vfork' works. */ #undef HAVE_WORKING_VFORK /* Directory with libavcodec source code, for MPEG4 rate control correction */ #undef LIBAVCODEC_HAVE_SOURCE_DIR /* The libavcodec header file */ #undef LIBAVCODEC_HEADER /* Filename of the libavcodec library */ #undef LIBAVCODEC_LIB_NAME /* Stack alignment hack for libavcodec library */ #undef LIBAVCODEC_STACKALIGN_HACK /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* For win32 build */ #undef PLUGIN_CODEC_DLL_EXPORTS /* The size of `int', as computed by sizeof. */ #undef SIZEOF_INT /* The size of `long', as computed by sizeof. */ #undef SIZEOF_LONG /* The size of `long long', as computed by sizeof. */ #undef SIZEOF_LONG_LONG /* The size of `short', as computed by sizeof. */ #undef SIZEOF_SHORT /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Filename of the libx264 library */ #undef X264_LIB_NAME /* Statically link x264 to the plugin. Default for win32. */ #undef X264_LINK_STATIC /* Define to `int' if does not define. */ #undef pid_t /* Define as `fork' if `vfork' does not work. */ #undef vfork /* define if posix_memalign is available */ #undef HAVE_POSIX_MEMALIGN h323plus/plugins/video/0000755000175000017500000000000011512552753013704 5ustar markmarkh323plus/plugins/video/H.263-ffmpeg/0000755000175000017500000000000011451363054015642 5ustar markmarkh323plus/plugins/video/H.263-ffmpeg/h263ffmpeg_2008.vcproj0000644000175000017500000001156011341106277021412 0ustar markmark h323plus/plugins/video/H.263-ffmpeg/Makefile.in0000644000175000017500000000541511451363054017714 0ustar markmark# # Makefile for GSM 06.10 # # Copyright (C) 2004 Post Increment, All Rights Reserved # # The contents of this file are subject to the Mozilla Public License # Version 1.0 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is Open H323 library. # # The Initial Developer of the Original Code is Post Increment # # Contributor(s): ______________________________________. # # $Log: Makefile.in,v $ # Revision 1.3 2010/10/01 13:46:20 willamowius # fix gcc warning # # Revision 1.2 2010/10/01 13:38:52 willamowius # enable warnings, diable strict-alias optimizations because of DynLib issues # # Revision 1.1 2010/02/24 02:19:43 shorne # First commit of h323plus mirror # # Revision 1.4 2007/04/19 06:09:04 csoutheren # Fixed plugin build system to use better detection for OSX # Resolved 1636262 - Fix for audio plugins for OSX # # Revision 1.3 2006/09/06 23:09:21 csoutheren # Add Makefile and more implementation for Linux H.263 # # Revision 1.3 2006/08/20 00:32:25 csoutheren # Added missing files to Makefile # # Revision 1.2 2006/08/12 10:59:14 rjongbloed # Added Linux build for H.261 plug-in. # VC_PLUGIN_DIR=@VC_PLUGIN_DIR@ prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ target_os=@target_os@ BASENAME= h263-ffmpeg SONAME =$(BASENAME) PLUGINDIR=../.. COMMONDIR = ../common CC =@CC@ CFLAGS =@CFLAGS@ CXX =@CXX@ LDSO =@LDSO@ PLUGINEXT =@PLUGINEXT@ STDCCFLAGS =@STDCCFLAGS@ LDFLAGS =@LDFLAGS@ EXTRACCFLAGS += -I$(COMMONDIR) -I$(PLUGINDIR) STDCCFLAGS += -Wall -Wno-unused -Wformat -Wformat-security -Wreorder -fno-strict-aliasing -Wno-write-strings vpath %.cxx $(SHAREDDIR) vpath %.cxx $(COMMONDIR) vpath %.o $(OBJDIR) SRCS += h263ffmpeg.cxx \ $(COMMONDIR)/trace.cxx OBJDIR = ./obj $(OBJDIR)/%.o : %.cxx @mkdir -p $(OBJDIR) >/dev/null 2>&1 $(CXX) -I../../../include $(EXTRACCFLAGS) $(STDCCFLAGS) $(OPTCCFLAGS) $(CFLAGS) -c $< -o $@ PLUGIN = ./$(BASENAME)_video_pwplugin.$(PLUGINEXT) STATIC = ./lib$(BASENAME)_video_s.a OBJECTS = $(addprefix $(OBJDIR)/,$(patsubst %.c,%.o,$(patsubst %.cxx,%.o,$(notdir $(SRCS))))) $(PLUGIN): $(OBJECTS) ifeq (,$(findstring solaris,$(target_os))) $(CXX) $(LDSO) -o $@ $^ else $(CXX) $(LDSO) $@ -o $@ $^ endif install: mkdir -p $(DESTDIR)$(libdir)/$(VC_PLUGIN_DIR) install $(PLUGIN) $(DESTDIR)$(libdir)/$(VC_PLUGIN_DIR) uninstall: rm -f $(DESTDIR)$(libdir)/$(VC_PLUGIN_DIR)/$(PLUGIN) clean: rm -f $(OBJECTS) $(PLUGIN) ########################################### h323plus/plugins/video/H.263-ffmpeg/h263ffmpeg.cxx0000644000175000017500000022030511341106277020237 0ustar markmark/* * H.263 Plugin codec for OpenH323/OPAL * * This code is based on the following files from the OPAL project which * have been removed from the current build and distributions but are still * available in the CVS "attic" * * src/codecs/h263codec.cxx * include/codecs/h263codec.h * The original files, and this version of the original code, are released under the same * MPL 1.0 license. Substantial portions of the original code were contributed * by Salyens and March Networks and their right to be identified as copyright holders * of the original code portions and any parts now included in this new copy is asserted through * their inclusion in the copyright notices below. * * Copyright (C) 2006 Post Increment * Copyright (C) 2005 Salyens * Copyright (C) 2001 March Networks Corporation * Copyright (C) 1999-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): Guilhem Tardy (gtardy@salyens.com) * Craig Southeren (craigs@postincrement.com) * * $Revision: 1.1 $ * $Author: shorne $ * $Date: 2010/02/24 02:19:43 $ */ /* Notes ----- This codec implements a H.263 encoder and decoder with RTP packaging as per RFC 2190 "RTP Payload Format for H.263 Video Streams". As per this specification, The RTP payload code is always set to 34 */ #define _CRT_NONSTDC_NO_DEPRECATE 1 #define _CRT_SECURE_NO_WARNINGS 1 #include #include #include #ifdef SOLARIS #include #endif #ifndef PLUGIN_CODEC_DLL_EXPORTS #include "plugin-config.h" #endif #include #if defined(_WIN32) || defined(_WIN32_WCE) #include #define STRCMPI _strcmpi #else #include #include #include #define STRCMPI strcasecmp typedef unsigned char BYTE; #endif #include "../common/trace.h" #ifdef _MSC_VER #pragma warning(disable:4800) #endif extern "C" { #include "ffmpeg/avcodec.h" }; #if LIBAVCODEC_VERSION_INT != 0x000406 #error Wrong libavcodec version for h.263. #endif # ifdef _WIN32 # define P_DEFAULT_PLUGIN_DIR "C:\\PTLIB_PLUGINS;C:\\PWLIB_PLUGINS" # define DIR_SEPERATOR "\\" # define DIR_TOKENISER ";" # else # define P_DEFAULT_PLUGIN_DIR "/usr/lib/ptlib:/usr/lib/pwlib" # define DIR_SEPERATOR "/" # define DIR_TOKENISER ":" # endif #include // if defined, the FFMPEG code is access via another DLL // otherwise, the FFMPEG code is assumed to be statically linked into this plugin #define USE_DLL_AVCODEC 1 #define RTP_RFC2190_PAYLOAD 34 #define RTP_DYNAMIC_PAYLOAD 96 #define H263_CLOCKRATE 90000 #define H263_BITRATE 327600 #define CIF_WIDTH 352 #define CIF_HEIGHT 288 #define CIF4_WIDTH (CIF_WIDTH*2) #define CIF4_HEIGHT (CIF_HEIGHT*2) #define CIF16_WIDTH (CIF_WIDTH*4) #define CIF16_HEIGHT (CIF_HEIGHT*4) #define QCIF_WIDTH (CIF_WIDTH/2) #define QCIF_HEIGHT (CIF_HEIGHT/2) #define SQCIF_WIDTH 128 #define SQCIF_HEIGHT 96 #define MAX_H263_PACKET_SIZE 10000 #define MAX_YUV420P_PACKET_SIZE (((CIF16_WIDTH * CIF16_HEIGHT * 3) / 2) + FF_INPUT_BUFFER_PADDING_SIZE) #define MIN(v1, v2) ((v1) < (v2) ? (v1) : (v2)) #define MAX(v1, v2) ((v1) > (v2) ? (v1) : (v2)) static struct StdSizes { enum { SQCIF, QCIF, CIF, CIF4, CIF16, NumStdSizes, UnknownStdSize = NumStdSizes }; int width; int height; const char * optionName; } StandardVideoSizes[StdSizes::NumStdSizes] = { { SQCIF_WIDTH, SQCIF_HEIGHT, PLUGINCODEC_SQCIF_MPI }, { QCIF_WIDTH, QCIF_HEIGHT, PLUGINCODEC_QCIF_MPI }, { CIF_WIDTH, CIF_HEIGHT, PLUGINCODEC_CIF_MPI }, { CIF4_WIDTH, CIF4_HEIGHT, PLUGINCODEC_CIF4_MPI }, { CIF16_WIDTH, CIF16_HEIGHT, PLUGINCODEC_CIF16_MPI }, }; ///////////////////////////////////////////////////////////////// // // define a class to implement a critical section mutex // based on PCriticalSection from PWLib class CriticalSection { public: CriticalSection() { #ifdef _WIN32 ::InitializeCriticalSection(&criticalSection); #else ::sem_init(&sem, 0, 1); #endif } ~CriticalSection() { #ifdef _WIN32 ::DeleteCriticalSection(&criticalSection); #else ::sem_destroy(&sem); #endif } void Wait() { #ifdef _WIN32 ::EnterCriticalSection(&criticalSection); #else ::sem_wait(&sem); #endif } void Signal() { #ifdef _WIN32 ::LeaveCriticalSection(&criticalSection); #else ::sem_post(&sem); #endif } private: CriticalSection(const CriticalSection &) { } CriticalSection & operator=(const CriticalSection &) { return *this; } #ifdef _WIN32 mutable CRITICAL_SECTION criticalSection; #else mutable sem_t sem; #endif }; class WaitAndSignal { public: inline WaitAndSignal(const CriticalSection & cs) : sync((CriticalSection &)cs) { sync.Wait(); } ~WaitAndSignal() { sync.Signal(); } WaitAndSignal & operator=(const WaitAndSignal &) { return *this; } protected: CriticalSection & sync; }; ///////////////////////////////////////////////////////////////// // // define a class to simplify handling a DLL library // based on PDynaLink from PWLib #if USE_DLL_AVCODEC class DynaLink { public: typedef void (*Function)(); DynaLink() { _hDLL = NULL; } ~DynaLink() { Close(); } virtual bool Open(const char *name) { #ifdef _WIN32 char exe_path[_MAX_PATH]; if (GetModuleFileName(NULL, exe_path, sizeof(exe_path))) { char * slash = strrchr(exe_path, '\\'); if (slash != NULL) { *++slash = '\0'; if (InternalOpen(exe_path, name)) return true; } } #endif // _WIN32 char * env; if ((env = ::getenv("PTLIBPLUGINDIR")) == NULL && (env = ::getenv("PWLIBPLUGINDIR")) == NULL) { env = (char *)alloca(strlen(P_DEFAULT_PLUGIN_DIR)+1); strcpy(env, P_DEFAULT_PLUGIN_DIR); } const char * token = strtok(env, DIR_TOKENISER); while (token != NULL) { if (InternalOpen(token, name)) return true; token = strtok(NULL, DIR_TOKENISER); } return InternalOpen(NULL, name); // Last ditch effort } // split into directories on correct seperator bool InternalOpen(const char * dir, const char *name) { char path[1024]; memset(path, 0, sizeof(path)); if (dir != NULL) { strcpy(path, dir); if (path[strlen(path)-1] != DIR_SEPERATOR[0]) strcat(path, DIR_SEPERATOR); } strcat(path, name); #ifdef _WIN32 # ifdef UNICODE USES_CONVERSION; _hDLL = LoadLibrary(A2T(path)); # else _hDLL = LoadLibrary(path); # endif // UNICODE #else _hDLL = dlopen((const char *)path, RTLD_NOW); if (_hDLL == NULL) { char * err = (char *) dlerror(); if (err != NULL) TRACE(1, "DYNA\tError loading " << path << " - " << err); } #endif // _WIN32 return _hDLL != NULL; } virtual void Close() { if (_hDLL != NULL) { #ifdef _WIN32 FreeLibrary(_hDLL); #else dlclose(_hDLL); #endif // _WIN32 _hDLL = NULL; } } virtual bool IsLoaded() const { return _hDLL != NULL; } bool GetFunction(const char * name, Function & func) { if (_hDLL == NULL) return false; #ifdef _WIN32 # ifdef UNICODE USES_CONVERSION; FARPROC p = GetProcAddress(_hDLL, A2T(name)); # else FARPROC p = GetProcAddress(_hDLL, name); # endif // UNICODE if (p == NULL) return false; func = (Function)p; return true; #else void * p = dlsym(_hDLL, (const char *)name); if (p == NULL) return false; func = (Function &)p; return true; #endif // _WIN32 } protected: #if defined(_WIN32) HINSTANCE _hDLL; #else void * _hDLL; #endif // _WIN32 }; #endif // USE_DLL_AVCODEC ///////////////////////////////////////////////////////////////// // // define a class to interface to the FFMpeg library class FFMPEGLibrary #if USE_DLL_AVCODEC : public DynaLink #endif // USE_DLL_AVCODEC { public: FFMPEGLibrary(); ~FFMPEGLibrary(); bool Load(); AVCodec *AvcodecFindEncoder(enum CodecID id); AVCodec *AvcodecFindDecoder(enum CodecID id); AVCodecContext *AvcodecAllocContext(void); AVFrame *AvcodecAllocFrame(void); int AvcodecOpen(AVCodecContext *ctx, AVCodec *codec); int AvcodecClose(AVCodecContext *ctx); int AvcodecEncodeVideo(AVCodecContext *ctx, BYTE *buf, int buf_size, const AVFrame *pict); int AvcodecDecodeVideo(AVCodecContext *ctx, AVFrame *pict, int *got_picture_ptr, BYTE *buf, int buf_size); void AvcodecFree(void * ptr); void AvcodecSetPrintFn(void (*print_fn)(char *)); bool IsLoaded(); CriticalSection processLock; protected: void (*Favcodec_init)(void); AVCodec *Favcodec_h263_encoder; AVCodec *Favcodec_h263p_encoder; AVCodec *Favcodec_h263_decoder; void (*Favcodec_register)(AVCodec *format); AVCodec *(*Favcodec_find_encoder)(enum CodecID id); AVCodec *(*Favcodec_find_decoder)(enum CodecID id); AVCodecContext *(*Favcodec_alloc_context)(void); void (*Favcodec_free)(void *); AVFrame *(*Favcodec_alloc_frame)(void); int (*Favcodec_open)(AVCodecContext *ctx, AVCodec *codec); int (*Favcodec_close)(AVCodecContext *ctx); int (*Favcodec_encode_video)(AVCodecContext *ctx, BYTE *buf, int buf_size, const AVFrame *pict); int (*Favcodec_decode_video)(AVCodecContext *ctx, AVFrame *pict, int *got_picture_ptr, BYTE *buf, int buf_size); void (*Favcodec_set_print_fn)(void (*print_fn)(char *)); unsigned (*Favcodec_version)(void); unsigned (*Favcodec_build)(void); bool isLoadedOK; }; static FFMPEGLibrary FFMPEGLibraryInstance; ////////////////////////////////////////////////////////////////////////////// #ifdef USE_DLL_AVCODEC FFMPEGLibrary::FFMPEGLibrary() { isLoadedOK = false; } bool FFMPEGLibrary::Load() { WaitAndSignal m(processLock); if (IsLoaded()) return true; if (!DynaLink::Open("avcodec") #if defined(_WIN32) && !DynaLink::Open("libavcodec") #else && !DynaLink::Open("libavcodec.so") #endif ) { //cerr << "FFLINK\tFailed to load a library, some codecs won't operate correctly;" << endl; #if !defined(_WIN32) //cerr << "put libavcodec.so in the current directory (together with this program) and try again" << endl; #else //cerr << "put avcodec.dll in the current directory (together with this program) and try again" << endl; #endif return false; } if (!GetFunction("avcodec_init", (Function &)Favcodec_init)) { //cerr << "Failed to load avcodec_int" << endl; return false; } if (!GetFunction("h263_encoder", (Function &)Favcodec_h263_encoder)) { //cerr << "Failed to load h263_encoder" << endl; return false; } if (!GetFunction("h263p_encoder", (Function &)Favcodec_h263p_encoder)) { //cerr << "Failed to load h263p_encoder" << endl; return false; } if (!GetFunction("h263_decoder", (Function &)Favcodec_h263_decoder)) { //cerr << "Failed to load h263_decoder" << endl; return false; } if (!GetFunction("register_avcodec", (Function &)Favcodec_register)) { //cerr << "Failed to load register_avcodec" << endl; return false; } if (!GetFunction("avcodec_find_encoder", (Function &)Favcodec_find_encoder)) { //cerr << "Failed to load avcodec_find_encoder" << endl; return false; } if (!GetFunction("avcodec_find_decoder", (Function &)Favcodec_find_decoder)) { //cerr << "Failed to load avcodec_find_decoder" << endl; return false; } if (!GetFunction("avcodec_alloc_context", (Function &)Favcodec_alloc_context)) { //cerr << "Failed to load avcodec_alloc_context" << endl; return false; } if (!GetFunction("avcodec_alloc_frame", (Function &)Favcodec_alloc_frame)) { //cerr << "Failed to load avcodec_alloc_frame" << endl; return false; } if (!GetFunction("avcodec_open", (Function &)Favcodec_open)) { //cerr << "Failed to load avcodec_open" << endl; return false; } if (!GetFunction("avcodec_close", (Function &)Favcodec_close)) { //cerr << "Failed to load avcodec_close" << endl; return false; } if (!GetFunction("avcodec_encode_video", (Function &)Favcodec_encode_video)) { //cerr << "Failed to load avcodec_encode_video" << endl; return false; } if (!GetFunction("avcodec_decode_video", (Function &)Favcodec_decode_video)) { //cerr << "Failed to load avcodec_decode_video" << endl; return false; } if (!GetFunction("avcodec_set_print_fn", (Function &)Favcodec_set_print_fn)) { //cerr << "Failed to load avcodec_set_print_fn" << endl; return false; } if (!GetFunction("av_free", (Function &)Favcodec_free)) { //cerr << "Failed to load avcodec_close" << endl; return false; } if (!GetFunction("avcodec_version", (Function &)Favcodec_version)) { return false; } if (!GetFunction("avcodec_build", (Function &)Favcodec_build)) { return false; } unsigned libVer = Favcodec_version(); unsigned libBuild = Favcodec_build(); if (libVer != LIBAVCODEC_VERSION_INT) { fprintf(stderr, "h.263 ffmpeg version mismatch: compiled against headers " "from ver/build 0x%x/%d, loaded library version " "0x%x/%d.\n", LIBAVCODEC_VERSION_INT, LIBAVCODEC_BUILD, libVer, libBuild); return false; } if (libBuild != LIBAVCODEC_BUILD) { fprintf(stderr, "Warning: potential h.263 ffmpeg build mismatch: " "compiled against build %d, loaded library build %d.\n", LIBAVCODEC_BUILD, libBuild); } // must be called before using avcodec lib Favcodec_init(); // register only the codecs needed (to have smaller code) Favcodec_register(Favcodec_h263_encoder); Favcodec_register(Favcodec_h263p_encoder); Favcodec_register(Favcodec_h263_decoder); //Favcodec_set_print_fn(h263_ffmpeg_printon); isLoadedOK = true; return true; } FFMPEGLibrary::~FFMPEGLibrary() { DynaLink::Close(); } AVCodec *FFMPEGLibrary::AvcodecFindEncoder(enum CodecID id) { AVCodec *res = Favcodec_find_encoder(id); //PTRACE_IF(6, res, "FFLINK\tFound encoder " << res->name << " @ " << ::hex << (int)res << ::dec); return res; } AVCodec *FFMPEGLibrary::AvcodecFindDecoder(enum CodecID id) { AVCodec *res = Favcodec_find_decoder(id); //PTRACE_IF(6, res, "FFLINK\tFound decoder " << res->name << " @ " << ::hex << (int)res << ::dec); return res; } AVCodecContext *FFMPEGLibrary::AvcodecAllocContext(void) { AVCodecContext *res = Favcodec_alloc_context(); //PTRACE_IF(6, res, "FFLINK\tAllocated context @ " << ::hex << (int)res << ::dec); return res; } AVFrame *FFMPEGLibrary::AvcodecAllocFrame(void) { AVFrame *res = Favcodec_alloc_frame(); //PTRACE_IF(6, res, "FFLINK\tAllocated frame @ " << ::hex << (int)res << ::dec); return res; } int FFMPEGLibrary::AvcodecOpen(AVCodecContext *ctx, AVCodec *codec) { WaitAndSignal m(processLock); //PTRACE(6, "FFLINK\tNow open context @ " << ::hex << (int)ctx << ", codec @ " << (int)codec << ::dec); return Favcodec_open(ctx, codec); } int FFMPEGLibrary::AvcodecClose(AVCodecContext *ctx) { //PTRACE(6, "FFLINK\tNow close context @ " << ::hex << (int)ctx << ::dec); return Favcodec_close(ctx); } int FFMPEGLibrary::AvcodecEncodeVideo(AVCodecContext *ctx, BYTE *buf, int buf_size, const AVFrame *pict) { WaitAndSignal m(processLock); //PTRACE(6, "FFLINK\tNow encode video for ctxt @ " << ::hex << (int)ctx << ", pict @ " << (int)pict // << ", buf @ " << (int)buf << ::dec << " (" << buf_size << " bytes)"); int res = Favcodec_encode_video(ctx, buf, buf_size, pict); //PTRACE(6, "FFLINK\tEncoded video into " << res << " bytes"); return res; } int FFMPEGLibrary::AvcodecDecodeVideo(AVCodecContext *ctx, AVFrame *pict, int *got_picture_ptr, BYTE *buf, int buf_size) { WaitAndSignal m(processLock); //PTRACE(6, "FFLINK\tNow decode video for ctxt @ " << ::hex << (int)ctx << ", pict @ " << (int)pict // << ", buf @ " << (int)buf << ::dec << " (" << buf_size << " bytes)"); int res = Favcodec_decode_video(ctx, pict, got_picture_ptr, buf, buf_size); //PTRACE(6, "FFLINK\tDecoded video of " << res << " bytes, got_picture=" << *got_picture_ptr); return res; } void FFMPEGLibrary::AvcodecSetPrintFn(void (*print_fn)(char *)) { Favcodec_set_print_fn(print_fn); } void FFMPEGLibrary::AvcodecFree(void * ptr) { Favcodec_free(ptr); } bool FFMPEGLibrary::IsLoaded() { return isLoadedOK; } #else #error "Not yet able to use statically linked libavcodec" #endif // USE_DLL_AVCODEC ///////////////////////////////////////////////////////////////////////////// // // define some simple RTP packet routines // #define RTP_MIN_HEADER_SIZE 12 class RTPFrame { public: RTPFrame(const unsigned char * _packet, int _maxPacketLen) : packet((unsigned char *)_packet), maxPacketLen(_maxPacketLen), packetLen(_maxPacketLen) { } RTPFrame(unsigned char * _packet, int _maxPacketLen, unsigned char payloadType) : packet(_packet), maxPacketLen(_maxPacketLen), packetLen(_maxPacketLen) { if (packetLen > 0) packet[0] = 0x80; // set version, no extensions, zero contrib count SetPayloadType(payloadType); } inline unsigned long GetLong(unsigned offs) const { if (offs + 4 > packetLen) return 0; return (packet[offs + 0] << 24) + (packet[offs+1] << 16) + (packet[offs+2] << 8) + packet[offs+3]; } inline void SetLong(unsigned offs, unsigned long n) { if (offs + 4 <= packetLen) { packet[offs + 0] = (BYTE)((n >> 24) & 0xff); packet[offs + 1] = (BYTE)((n >> 16) & 0xff); packet[offs + 2] = (BYTE)((n >> 8) & 0xff); packet[offs + 3] = (BYTE)(n & 0xff); } } inline unsigned short GetShort(unsigned offs) const { if (offs + 2 > packetLen) return 0; return (packet[offs + 0] << 8) + packet[offs + 1]; } inline void SetShort(unsigned offs, unsigned short n) { if (offs + 2 <= packetLen) { packet[offs + 0] = (BYTE)((n >> 8) & 0xff); packet[offs + 1] = (BYTE)(n & 0xff); } } inline int GetPacketLen() const { return packetLen; } inline int GetMaxPacketLen() const { return maxPacketLen; } inline unsigned GetVersion() const { return (packetLen < 1) ? 0 : (packet[0]>>6)&3; } inline bool GetExtension() const { return (packetLen < 1) ? 0 : (packet[0]&0x10) != 0; } inline bool GetMarker() const { return (packetLen < 2) ? false : ((packet[1]&0x80) != 0); } inline unsigned char GetPayloadType() const { return (packetLen < 2) ? false : (packet[1] & 0x7f); } inline unsigned short GetSequenceNumber() const { return GetShort(2); } inline unsigned long GetTimestamp() const { return GetLong(4); } inline unsigned long GetSyncSource() const { return GetLong(8); } inline int GetContribSrcCount() const { return (packetLen < 1) ? 0 : (packet[0]&0xf); } inline int GetExtensionSize() const { return !GetExtension() ? 0 : GetShort(RTP_MIN_HEADER_SIZE + 4*GetContribSrcCount() + 2); } inline int GetExtensionType() const { return !GetExtension() ? -1 : GetShort(RTP_MIN_HEADER_SIZE + 4*GetContribSrcCount()); } inline int GetPayloadSize() const { return packetLen - GetHeaderSize(); } inline unsigned char * GetPayloadPtr() const { return packet + GetHeaderSize(); } inline unsigned int GetHeaderSize() const { unsigned int sz = RTP_MIN_HEADER_SIZE + 4*GetContribSrcCount(); if (GetExtension()) sz += 4 + GetExtensionSize(); return sz; } inline void SetMarker(bool m) { if (packetLen >= 2) packet[1] = (packet[1] & 0x7f) | (m ? 0x80 : 0x00); } inline void SetPayloadType(unsigned char t) { if (packetLen >= 2) packet[1] = (packet[1] & 0x80) | (t & 0x7f); } inline void SetSequenceNumber(unsigned short v) { SetShort(2, v); } inline void SetTimestamp(unsigned long n) { SetLong(4, n); } inline void SetSyncSource(unsigned long n) { SetLong(8, n); } inline bool SetPayloadSize(int payloadSize) { if (GetHeaderSize() + payloadSize > maxPacketLen) return true; packetLen = GetHeaderSize() + payloadSize; return true; } protected: unsigned char * packet; unsigned maxPacketLen; unsigned packetLen; }; ///////////////////////////////////////////////////////////////////////////// class H263Packet { public: H263Packet() { data_size = hdr_size = 0; hdr = data = NULL; }; ~H263Packet() {}; void Store(void * _data, int _data_size, void * _hdr, int _hdr_size) { data = _data; data_size = _data_size; hdr = _hdr; hdr_size = _hdr_size; } int Read(RTPFrame & frame) { if (!frame.SetPayloadSize(hdr_size + data_size)) { //PTRACE(1, "H263Pck\tNot enough memory for packet of " << length << " bytes"); return -1; } memcpy(frame.GetPayloadPtr(), hdr, hdr_size); memcpy(frame.GetPayloadPtr() + hdr_size, data, data_size); const unsigned char * packet = (const unsigned char *)data; data = NULL; hdr = NULL; if (packet[0] != 0 || packet[1] != 0 || (packet[2]&0xfc) != 0x80) return 0; if ((packet[4]&0x1c) != 0x1c) // Baseline? return (packet[4]&2) == 0 ? 1 : 0; // PLUSPTYPE if ((packet[5]&0x80) == 0) return (packet[5]&0x70) == 0 ? 1 : 0; // PLUSPTYPE with UFEP return (packet[7]&0x1C) == 0 ? 1 : 0; } private: void *data; int data_size; void *hdr; int hdr_size; }; class H263EncoderContext { public: typedef std::vector H263PacketList; static void RtpCallback(void *data, int data_size, void *hdr, int hdr_size, void *priv_data); H263EncoderContext(); ~H263EncoderContext(); int EncodeFrames(const BYTE * src, unsigned & srcLen, BYTE * dst, unsigned & dstLen, unsigned int & flags); bool OpenCodec(); void CloseCodec(); unsigned GetNextEncodedPacket(RTPFrame & dstRTP, unsigned char payloadCode, unsigned long lastTimeStamp, unsigned & flags); H263PacketList encodedPackets; H263PacketList unusedPackets; unsigned char encFrameBuffer[MAX_YUV420P_PACKET_SIZE]; int encFrameLen; unsigned char rawFrameBuffer[MAX_YUV420P_PACKET_SIZE]; int rawFrameLen; AVCodec *avcodec; AVCodecContext *avcontext; AVFrame *avpicture; int videoQMax, videoQMin; // dynamic video quality min/max limits, 1..31 int videoQuality; // current video encode quality setting, 1..31 int frameNum; unsigned frameWidth, frameHeight; unsigned long lastTimeStamp; unsigned bitRate; unsigned frameRate; void Lock() { _mutex.Wait(); } void Unlock() { _mutex.Signal(); } static int GetStdSize(int width, int height) { int sizeIndex; for (sizeIndex = 0; sizeIndex < StdSizes::NumStdSizes; ++sizeIndex ) if (StandardVideoSizes[sizeIndex].width == width && StandardVideoSizes[sizeIndex].height == height ) return sizeIndex; return StdSizes::UnknownStdSize; } protected: CriticalSection _mutex; }; H263EncoderContext::H263EncoderContext() { if (!FFMPEGLibraryInstance.IsLoaded()) return; if ((avcodec = FFMPEGLibraryInstance.AvcodecFindEncoder(CODEC_ID_H263)) == NULL) { //PTRACE(1, "H263\tCodec not found for encoder"); return; } frameWidth = CIF_WIDTH; frameHeight = CIF_HEIGHT; rawFrameLen = (CIF_HEIGHT * CIF_WIDTH * 3) / 2; avcontext = FFMPEGLibraryInstance.AvcodecAllocContext(); if (avcontext == NULL) { //PTRACE(1, "H263\tFailed to allocate context for encoder"); return; } avpicture = FFMPEGLibraryInstance.AvcodecAllocFrame(); if (avpicture == NULL) { //PTRACE(1, "H263\tFailed to allocate frame for encoder"); return; } avcontext->codec = NULL; // set some reasonable values for quality as default videoQuality = 10; videoQMin = 2; videoQMax = 31; frameNum = 0; bitRate = 327600; frameRate = 15; //PTRACE(3, "Codec\tH263 encoder created"); } H263EncoderContext::~H263EncoderContext() { WaitAndSignal m(_mutex); if (FFMPEGLibraryInstance.IsLoaded()) { CloseCodec(); FFMPEGLibraryInstance.AvcodecFree(avcontext); FFMPEGLibraryInstance.AvcodecFree(avpicture); while (encodedPackets.size() > 0) { delete *encodedPackets.begin(); encodedPackets.erase(encodedPackets.begin()); } while (unusedPackets.size() > 0) { delete *unusedPackets.begin(); unusedPackets.erase(unusedPackets.begin()); } } } bool H263EncoderContext::OpenCodec() { // avoid copying input/output avcontext->flags |= CODEC_FLAG_INPUT_PRESERVED; // we guarantee to preserve input for max_b_frames+1 frames avcontext->flags |= CODEC_FLAG_EMU_EDGE; // don't draw edges avcontext->width = frameWidth; avcontext->height = frameHeight; avpicture->linesize[0] = frameWidth; avpicture->linesize[1] = frameWidth / 2; avpicture->linesize[2] = frameWidth / 2; avpicture->quality = (float)videoQuality; int _bitRate = bitRate; avcontext->bit_rate = (_bitRate * 3) >> 2; // average bit rate avcontext->bit_rate_tolerance = _bitRate >> 1; avcontext->rc_min_rate = 0; // minimum bitrate avcontext->rc_max_rate = _bitRate; // maximum bitrate avcontext->mb_qmin = avcontext->qmin = videoQMin; avcontext->mb_qmax = avcontext->qmax = videoQMax; avcontext->max_qdiff = 3; // max q difference between frames avcontext->rc_qsquish = 0; // limit q by clipping avcontext->rc_eq = "tex^qComp"; // rate control equation // avcontext->rc_eq = (char*) "1"; // rate control equation // avcontext->rc_buffer_size = _bitRate * 64; avcontext->qcompress = 0.5; // qscale factor between easy & hard scenes (0.0-1.0) avcontext->i_quant_factor = (float)-0.6; // qscale factor between p and i frames avcontext->i_quant_offset = (float)0.0; // qscale offset between p and i frames // context->b_quant_factor = (float)1.25; // qscale factor between ip and b frames // context->b_quant_offset = (float)1.25; // qscale offset between ip and b frames avcontext->flags |= CODEC_FLAG_PASS1; avcontext->mb_decision = FF_MB_DECISION_SIMPLE; // choose only one MB type at a time avcontext->me_method = ME_EPZS; avcontext->me_subpel_quality = 8; avcontext->frame_rate_base = 1; avcontext->frame_rate = frameRate; avcontext->gop_size = 125; avcontext->flags &= ~CODEC_FLAG_H263P_UMV; avcontext->flags &= ~CODEC_FLAG_4MV; avcontext->max_b_frames = 0; avcontext->flags &= ~CODEC_FLAG_H263P_AIC; // advanced intra coding (not handled by H323_FFH263Capability) avcontext->flags |= CODEC_FLAG_RFC2190; avcontext->rtp_mode = 1; avcontext->rtp_payload_size = 750; avcontext->rtp_callback = &H263EncoderContext::RtpCallback; avcontext->opaque = this; // used to separate out packets from different encode threads return FFMPEGLibraryInstance.AvcodecOpen(avcontext, avcodec) == 0; } void H263EncoderContext::CloseCodec() { if (avcontext != NULL) { if (avcontext->codec != NULL) { FFMPEGLibraryInstance.AvcodecClose(avcontext); //PTRACE(5, "H263\tClosed H.263 encoder" ); } } } void H263EncoderContext::RtpCallback(void *data, int data_size, void *hdr, int hdr_size, void *priv_data) { H263EncoderContext *c = (H263EncoderContext *) priv_data; H263Packet *p; if (c->unusedPackets.size() == 0) p = new H263Packet(); else { p = *c->unusedPackets.begin(); c->unusedPackets.erase(c->unusedPackets.begin()); } p->Store(data, data_size, hdr, hdr_size); c->encodedPackets.push_back(p); } unsigned int H263EncoderContext::GetNextEncodedPacket(RTPFrame & dstRTP, unsigned char payloadCode, unsigned long lastTimeStamp, unsigned & flags) { if (encodedPackets.size() == 0) return 0; // get the next packet from the unencoded list H263Packet *p = *encodedPackets.begin(); encodedPackets.erase(encodedPackets.begin()); // this packet will be shortly unused unusedPackets.push_back(p); // if the packet is too long, throw it away switch (p->Read(dstRTP)) { case -1: return 0; case 1 : flags |= PluginCodec_ReturnCoderIFrame; default:; } if (encodedPackets.size() > 0) dstRTP.SetMarker(false); else { dstRTP.SetMarker(true); // marker bit on last frame of video flags |= PluginCodec_ReturnCoderLastFrame; } dstRTP.SetPayloadType(payloadCode); dstRTP.SetTimestamp(lastTimeStamp); return dstRTP.GetPacketLen(); } int H263EncoderContext::EncodeFrames(const BYTE * src, unsigned & srcLen, BYTE * dst, unsigned & dstLen, unsigned int & flags) { WaitAndSignal m(_mutex); if (!FFMPEGLibraryInstance.IsLoaded()) return 0; // create RTP frame from source buffer RTPFrame srcRTP(src, srcLen); // create RTP frame from destination buffer RTPFrame dstRTP(dst, dstLen, RTP_RFC2190_PAYLOAD); dstLen = 0; flags = 0; //WaitAndSignal mutex(updateMutex); // if there are RTP packets to return, return them if (encodedPackets.size() > 0) { dstLen = GetNextEncodedPacket(dstRTP, RTP_RFC2190_PAYLOAD, lastTimeStamp, flags); return 1; } // from here, we are encoding a new frame lastTimeStamp = srcRTP.GetTimestamp(); if (srcRTP.GetPayloadSize() < sizeof(PluginCodec_Video_FrameHeader)) { //PTRACE(1,"H263\tVideo grab too small, Close down video transmission thread."); return 0; } PluginCodec_Video_FrameHeader * header = (PluginCodec_Video_FrameHeader *)srcRTP.GetPayloadPtr(); if (header->x != 0 || header->y != 0) { //PTRACE(1,"H263\tVideo grab of partial frame unsupported, Close down video transmission thread."); return false; } // if this is the first frame, or the frame size has changed, deal wth it if (frameNum == 0 || frameWidth != header->width || frameHeight != header->height) { //#ifndef h323pluslib int sizeIndex = GetStdSize(header->width, header->height); if (sizeIndex == StdSizes::UnknownStdSize) { //PTRACE(3, "H263\tCannot resize to " << header->width << "x" << header->height << " (non-standard format), Close down video transmission thread."); return false; } //#endif frameWidth = header->width; frameHeight = header->height; rawFrameLen = (frameWidth * frameHeight * 12) / 8; memset(rawFrameBuffer + rawFrameLen, 0, FF_INPUT_BUFFER_PADDING_SIZE); encFrameLen = rawFrameLen; // this could be set to some lower value CloseCodec(); if (!OpenCodec()) return false; } unsigned char * payload; // get payload and ensure correct padding if (srcRTP.GetHeaderSize() + (unsigned)(srcRTP.GetPayloadSize() + FF_INPUT_BUFFER_PADDING_SIZE <= srcRTP.GetMaxPacketLen())) payload = OPAL_VIDEO_FRAME_DATA_PTR(header); else { payload = rawFrameBuffer; memcpy(payload, OPAL_VIDEO_FRAME_DATA_PTR(header), rawFrameLen); } int size = frameWidth * frameHeight; avpicture->data[0] = payload; avpicture->data[1] = avpicture->data[0] + size; avpicture->data[2] = avpicture->data[1] + (size / 4); avpicture->pict_type = (flags && PluginCodec_CoderForceIFrame) ? FF_I_TYPE : 0; FFMPEGLibraryInstance.AvcodecEncodeVideo(avcontext, encFrameBuffer, encFrameLen, avpicture); frameNum++; // increment the number of frames encoded if (encodedPackets.size() == 0) { //PTRACE(1, "H263\tEncoder internal error - there should be outstanding packets at this point"); return 1; } dstLen = GetNextEncodedPacket(dstRTP, RTP_RFC2190_PAYLOAD, lastTimeStamp, flags); //PTRACE(6, "H263\tEncoded " << src.GetPayloadSize() << " bytes of YUV420P raw data into " << dst.GetSize() << " RTP frame(s)"); return 1; } static void * create_encoder(const struct PluginCodec_Definition * /*codec*/) { return new H263EncoderContext; } static int encoder_set_options(const PluginCodec_Definition *, void * _context, const char * , void * parm, unsigned * parmLen) { H263EncoderContext * context = (H263EncoderContext *)_context; if (parmLen == NULL || *parmLen != sizeof(const char **) || parm == NULL) return 0; context->Lock(); context->CloseCodec(); // get the "frame width" media format parameter to use as a hint for the encoder to start off for (const char * const * option = (const char * const *)parm; *option != NULL; option += 2) { if (STRCMPI(option[0], PLUGINCODEC_OPTION_FRAME_WIDTH) == 0) context->frameWidth = atoi(option[1]); if (STRCMPI(option[0], PLUGINCODEC_OPTION_FRAME_HEIGHT) == 0) context->frameHeight = atoi(option[1]); if (STRCMPI(option[0], "Encoding Quality") == 0) context->videoQuality = MIN(context->videoQMax, MAX(atoi(option[1]), context->videoQMin)); if (STRCMPI(option[0], PLUGINCODEC_OPTION_TARGET_BIT_RATE) == 0) context->bitRate = atoi(option[1]); if (STRCMPI(option[0], PLUGINCODEC_OPTION_FRAME_TIME) == 0) context->frameRate = 90000/atoi(option[1]); if (STRCMPI(option[0], "set_min_quality") == 0) context->videoQMin = atoi(option[1]); if (STRCMPI(option[0], "set_max_quality") == 0) context->videoQMax = atoi(option[1]); } context->OpenCodec(); context->Unlock(); return 1; } static void destroy_encoder(const struct PluginCodec_Definition * /*codec*/, void * _context) { H263EncoderContext * context = (H263EncoderContext *)_context; delete context; } static int codec_encoder(const struct PluginCodec_Definition * , void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { H263EncoderContext * context = (H263EncoderContext *)_context; return context->EncodeFrames((const BYTE *)from, *fromLen, (BYTE *)to, *toLen, *flag); } ///////////////////////////////////////////////////////////////////////////// class H263DecoderContext { public: H263DecoderContext(); ~H263DecoderContext(); bool DecodeFrames(const BYTE * src, unsigned & srcLen, BYTE * dst, unsigned & dstLen, unsigned int & flags); protected: bool OpenCodec(); void CloseCodec(); unsigned char encFrameBuffer[MAX_H263_PACKET_SIZE]; AVCodec *avcodec; AVCodecContext *avcontext; AVFrame *picture; int frameNum; unsigned int frameWidth; unsigned int frameHeight; }; H263DecoderContext::H263DecoderContext() { if (!FFMPEGLibraryInstance.IsLoaded()) return; if ((avcodec = FFMPEGLibraryInstance.AvcodecFindDecoder(CODEC_ID_H263)) == NULL) { //PTRACE(1, "H263\tCodec not found for decoder"); return; } frameWidth = CIF_WIDTH; frameHeight = CIF_HEIGHT; avcontext = FFMPEGLibraryInstance.AvcodecAllocContext(); if (avcontext == NULL) { //PTRACE(1, "H263\tFailed to allocate context for decoder"); return; } picture = FFMPEGLibraryInstance.AvcodecAllocFrame(); if (picture == NULL) { //PTRACE(1, "H263\tFailed to allocate frame for decoder"); return; } if (!OpenCodec()) { // decoder will re-initialise context with correct frame size //PTRACE(1, "H263\tFailed to open codec for decoder"); return; } frameNum = 0; //PTRACE(3, "Codec\tH263 decoder created"); } H263DecoderContext::~H263DecoderContext() { if (FFMPEGLibraryInstance.IsLoaded()) { CloseCodec(); FFMPEGLibraryInstance.AvcodecFree(avcontext); FFMPEGLibraryInstance.AvcodecFree(picture); } } bool H263DecoderContext::OpenCodec() { // avoid copying input/output avcontext->flags |= CODEC_FLAG_INPUT_PRESERVED; // we guarantee to preserve input for max_b_frames+1 frames avcontext->flags |= CODEC_FLAG_EMU_EDGE; // don't draw edges avcontext->width = frameWidth; avcontext->height = frameHeight; avcontext->workaround_bugs = 0; // no workaround for buggy H.263 implementations avcontext->error_concealment = FF_EC_GUESS_MVS | FF_EC_DEBLOCK; avcontext->error_resilience = FF_ER_CAREFULL; if (FFMPEGLibraryInstance.AvcodecOpen(avcontext, avcodec) < 0) { //PTRACE(1, "H263\tFailed to open H.263 decoder"); return false; } return true; } void H263DecoderContext::CloseCodec() { if (avcontext != NULL) { if (avcontext->codec != NULL) { FFMPEGLibraryInstance.AvcodecClose(avcontext); //PTRACE(5, "H263\tClosed H.263 decoder" ); } } } bool H263DecoderContext::DecodeFrames(const BYTE * src, unsigned & srcLen, BYTE * dst, unsigned & dstLen, unsigned int & flags) { if (!FFMPEGLibraryInstance.IsLoaded()) return 0; // create RTP frame from source buffer RTPFrame srcRTP(src, srcLen); // create RTP frame from destination buffer RTPFrame dstRTP(dst, dstLen, 0); dstLen = 0; flags = 0; int srcPayloadSize = srcRTP.GetPayloadSize(); unsigned char * payload; // copy payload to a temporary buffer if there are not enough bytes after the end of the payload if (srcRTP.GetHeaderSize() + srcPayloadSize + FF_INPUT_BUFFER_PADDING_SIZE > srcLen) { if (srcPayloadSize + FF_INPUT_BUFFER_PADDING_SIZE > sizeof(encFrameBuffer)) return 0; memcpy(encFrameBuffer, srcRTP.GetPayloadPtr(), srcPayloadSize); payload = encFrameBuffer; } else payload = (unsigned char *) srcRTP.GetPayloadPtr(); // ensure the first 24 bits past the end of the payload are all zero { unsigned char * padding = payload + srcPayloadSize; padding[0] = padding[1] = padding[2] = 0; } // only accept RFC 2190 for now switch (srcRTP.GetPayloadType()) { case RTP_RFC2190_PAYLOAD: avcontext->flags |= CODEC_FLAG_RFC2190; break; //case RTP_DYNAMIC_PAYLOAD: // avcontext->flags |= RTPCODEC_FLAG_RFC2429 // break; default: return 1; } // decode the frame int got_picture; int len = FFMPEGLibraryInstance.AvcodecDecodeVideo(avcontext, picture, &got_picture, payload, srcPayloadSize); // if that was not the last packet for the frame, keep going if (!srcRTP.GetMarker()) { return 1; } // cause decoder to end the frame len = FFMPEGLibraryInstance.AvcodecDecodeVideo(avcontext, picture, &got_picture, NULL, -1); // if error occurred, tell the other end to send another I-frame and hopefully we can resync if (len < 0) { flags = PluginCodec_ReturnCoderRequestIFrame; return 1; } // no picture was decoded - shrug and do nothing if (!got_picture) return 1; // if decoded frame size is not legal, request an I-Frame if (avcontext->width == 0 || avcontext->height == 0) { flags = PluginCodec_ReturnCoderRequestIFrame; return 1; } // see if frame size has changed if (frameWidth != (unsigned)avcontext->width || frameHeight != (unsigned)avcontext->height) { frameWidth = avcontext->width; frameHeight = avcontext->height; } int frameBytes = (frameWidth * frameHeight * 12) / 8; // if the frame decodes to more than we can handle, ignore the frame if ((sizeof(PluginCodec_Video_FrameHeader) + frameBytes) > (size_t)dstRTP.GetPayloadSize()) return 1; PluginCodec_Video_FrameHeader * header = (PluginCodec_Video_FrameHeader *)dstRTP.GetPayloadPtr(); header->x = header->y = 0; header->width = frameWidth; header->height = frameHeight; int size = frameWidth * frameHeight; if (picture->data[1] == picture->data[0] + size && picture->data[2] == picture->data[1] + (size >> 2)) memcpy(OPAL_VIDEO_FRAME_DATA_PTR(header), picture->data[0], frameBytes); else { unsigned char *dstData = OPAL_VIDEO_FRAME_DATA_PTR(header); for (int i=0; i<3; i ++) { unsigned char *srcData = picture->data[i]; int dst_stride = i ? frameWidth >> 1 : frameWidth; int src_stride = picture->linesize[i]; int h = i ? frameHeight >> 1 : frameHeight; if (src_stride==dst_stride) { memcpy(dstData, srcData, dst_stride*h); dstData += dst_stride*h; } else { while (h--) { memcpy(dstData, srcData, dst_stride); dstData += dst_stride; srcData += src_stride; } } } } dstRTP.SetPayloadSize(sizeof(PluginCodec_Video_FrameHeader) + frameBytes); dstRTP.SetPayloadType(RTP_DYNAMIC_PAYLOAD); dstRTP.SetTimestamp(srcRTP.GetTimestamp()); dstRTP.SetMarker(true); dstLen = dstRTP.GetPacketLen(); flags = PluginCodec_ReturnCoderLastFrame; if (picture->key_frame) flags |= PluginCodec_ReturnCoderIFrame; frameNum++; return 1; } static void * create_decoder(const struct PluginCodec_Definition *) { return new H263DecoderContext; } static void destroy_decoder(const struct PluginCodec_Definition * /*codec*/, void * _context) { H263DecoderContext * context = (H263DecoderContext *)_context; delete context; } static int codec_decoder(const struct PluginCodec_Definition *, void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { H263DecoderContext * context = (H263DecoderContext *)_context; return context->DecodeFrames((const BYTE *)from, *fromLen, (BYTE *)to, *toLen, *flag); } static int decoder_get_output_data_size(const PluginCodec_Definition * codec, void *, const char *, void *, unsigned *) { // this is really frame height * frame width; return RTP_MIN_HEADER_SIZE + sizeof(PluginCodec_Video_FrameHeader) + ((codec->parm.video.maxFrameWidth * codec->parm.video.maxFrameHeight * 3) / 2); } static int get_codec_options(const struct PluginCodec_Definition * codec, void *, const char *, void * parm, unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(struct PluginCodec_Option **)) return 0; *(const void **)parm = codec->userData; *parmLen = 0; return 1; } static char * num2str(int num) { char buf[20]; sprintf(buf, "%i", num); return strdup(buf); } #define PMAX(a,b) ((a)>=(b)?(a):(b)) #define PMIN(a,b) ((a)<=(b)?(a):(b)) static void FindBoundingBox(const char * const * * parm, int * mpi, int & minWidth, int & minHeight, int & maxWidth, int & maxHeight, int & frameTime, int & bitRate) { // initialise the MPI values to disabled int i; for (i = 0; i < 5; i++) mpi[i] = PLUGINCODEC_MPI_DISABLED; // following values will be set while scanning for options minWidth = INT_MAX; minHeight = INT_MAX; maxWidth = 0; maxHeight = 0; int rxMinWidth = QCIF_WIDTH; int rxMinHeight = QCIF_HEIGHT; int rxMaxWidth = QCIF_WIDTH; int rxMaxHeight = QCIF_HEIGHT; int frameRate = 10; // 10 fps int origFrameTime = 900; // 10 fps in video RTP timestamps int maxBR = 0; int maxBitRate = 0; int targetBitRate = 0; // extract the MPI values set in the custom options, and find the min/max of them frameTime = 0; for (const char * const * option = *parm; *option != NULL; option += 2) { if (STRCMPI(option[0], "MaxBR") == 0) maxBR = atoi(option[1]); else if (STRCMPI(option[0], PLUGINCODEC_OPTION_MAX_BIT_RATE) == 0) maxBitRate = atoi(option[1]); else if (STRCMPI(option[0], PLUGINCODEC_OPTION_TARGET_BIT_RATE) == 0) targetBitRate = atoi(option[1]); else if (STRCMPI(option[0], PLUGINCODEC_OPTION_MIN_RX_FRAME_WIDTH) == 0) rxMinWidth = atoi(option[1]); else if (STRCMPI(option[0], PLUGINCODEC_OPTION_MIN_RX_FRAME_HEIGHT) == 0) rxMinHeight = atoi(option[1]); else if (STRCMPI(option[0], PLUGINCODEC_OPTION_MAX_RX_FRAME_WIDTH) == 0) rxMaxWidth = atoi(option[1]); else if (STRCMPI(option[0], PLUGINCODEC_OPTION_MAX_RX_FRAME_HEIGHT) == 0) rxMaxHeight = atoi(option[1]); else if (STRCMPI(option[0], PLUGINCODEC_OPTION_FRAME_TIME) == 0) origFrameTime = atoi(option[1]); else { for (i = 0; i < 5; i++) { if (STRCMPI(option[0], StandardVideoSizes[i].optionName) == 0) { mpi[i] = atoi(option[1]); if (mpi[i] != PLUGINCODEC_MPI_DISABLED) { int thisTime = 3003*mpi[i]; if (minWidth > StandardVideoSizes[i].width) minWidth = StandardVideoSizes[i].width; if (minHeight > StandardVideoSizes[i].height) minHeight = StandardVideoSizes[i].height; if (maxWidth < StandardVideoSizes[i].width) maxWidth = StandardVideoSizes[i].width; if (maxHeight < StandardVideoSizes[i].height) maxHeight = StandardVideoSizes[i].height; if (thisTime > frameTime) frameTime = thisTime; } } } } } // if no MPIs specified, then the spec says to use QCIF if (frameTime == 0) { int ft; if (frameRate != 0) ft = 90000 / frameRate; else ft = origFrameTime; mpi[1] = (ft + 1502) / 3003; minWidth = maxWidth = QCIF_WIDTH; minHeight = maxHeight = QCIF_HEIGHT; } // find the smallest MPI size that is larger than the min frame size for (i = 0; i < 5; i++) { if (StandardVideoSizes[i].width >= rxMinWidth && StandardVideoSizes[i].height >= rxMinHeight) { rxMinWidth = StandardVideoSizes[i].width; rxMinHeight = StandardVideoSizes[i].height; break; } } // find the largest MPI size that is smaller than the max frame size for (i = 4; i >= 0; i--) { if (StandardVideoSizes[i].width <= rxMaxWidth && StandardVideoSizes[i].height <= rxMaxHeight) { rxMaxWidth = StandardVideoSizes[i].width; rxMaxHeight = StandardVideoSizes[i].height; break; } } // the final min/max is the smallest bounding box that will enclose both the MPI information and the min/max information minWidth = PMAX(rxMinWidth, minWidth); maxWidth = PMIN(rxMaxWidth, maxWidth); minHeight = PMAX(rxMinHeight, minHeight); maxHeight = PMIN(rxMaxHeight, maxHeight); // turn off any MPI that are outside the final bounding box for (i = 0; i < 5; i++) { if (StandardVideoSizes[i].width < minWidth || StandardVideoSizes[i].width > maxWidth || StandardVideoSizes[i].height < minHeight || StandardVideoSizes[i].height > maxHeight) mpi[i] = PLUGINCODEC_MPI_DISABLED; } // find an appropriate max bit rate bitRate = 0; if (maxBR == 0) bitRate = maxBitRate; else if (maxBitRate == 0) bitRate = maxBR * 100; else bitRate = PMIN(maxBR * 100, maxBitRate); } /* Convert the custom options for the codec to normalised options. For H.261 the custom options are "QCIF MPI" and "CIF MPI" which will restrict the min/max width/height and maximum frame rate. */ static int to_normalised_options(const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(char ***)) return 0; // find bounding box enclosing all MPI values int mpi[5]; int minWidth, minHeight, maxHeight, maxWidth, frameTime, bitRate; FindBoundingBox((const char * const * *)parm, mpi, minWidth, minHeight, maxWidth, maxHeight, frameTime, bitRate); char ** options = (char **)calloc(16+(5*2)+2, sizeof(char *)); *(char ***)parm = options; if (options == NULL) return 0; options[ 0] = strdup(PLUGINCODEC_OPTION_MIN_RX_FRAME_WIDTH); options[ 1] = num2str(minWidth); options[ 2] = strdup(PLUGINCODEC_OPTION_MIN_RX_FRAME_HEIGHT); options[ 3] = num2str(minHeight); options[ 4] = strdup(PLUGINCODEC_OPTION_MAX_RX_FRAME_WIDTH); options[ 5] = num2str(maxWidth); options[ 6] = strdup(PLUGINCODEC_OPTION_MAX_RX_FRAME_HEIGHT); options[ 7] = num2str(maxHeight); options[ 8] = strdup(PLUGINCODEC_OPTION_FRAME_TIME); options[ 9] = num2str(frameTime); options[10] = strdup(PLUGINCODEC_OPTION_MAX_BIT_RATE); options[11] = num2str(bitRate); options[12] = strdup(PLUGINCODEC_OPTION_TARGET_BIT_RATE); options[13] = num2str(bitRate); options[14] = strdup("MaxBR"); options[15] = num2str((bitRate+50)/100); for (int i = 0; i < 5; i++) { options[16+i*2] = strdup(StandardVideoSizes[i].optionName); options[16+i*2+1] = num2str(mpi[i]); } return 1; } /* Convert the normalised options to the codec custom options. For H.261 the custom options are "QCIF MPI" and "CIF MPI" which are set according to the min/max width/height and frame time. */ static int to_customised_options(const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(char ***)) return 0; // find bounding box enclosing all MPI values int mpi[5]; int minWidth, minHeight, maxHeight, maxWidth, frameTime, bitRate; FindBoundingBox((const char * const * *)parm, mpi, minWidth, minHeight, maxWidth, maxHeight, frameTime, bitRate); char ** options = (char **)calloc(14+5*2+2, sizeof(char *)); *(char ***)parm = options; if (options == NULL) return 0; options[ 0] = strdup(PLUGINCODEC_OPTION_MIN_RX_FRAME_WIDTH); options[ 1] = num2str(minWidth); options[ 2] = strdup(PLUGINCODEC_OPTION_MIN_RX_FRAME_HEIGHT); options[ 3] = num2str(minHeight); options[ 4] = strdup(PLUGINCODEC_OPTION_MAX_RX_FRAME_WIDTH); options[ 5] = num2str(maxWidth); options[ 6] = strdup(PLUGINCODEC_OPTION_MAX_RX_FRAME_HEIGHT); options[ 7] = num2str(maxHeight); options[ 8] = strdup(PLUGINCODEC_OPTION_MAX_BIT_RATE); options[ 9] = num2str(bitRate); options[10] = strdup(PLUGINCODEC_OPTION_TARGET_BIT_RATE); options[11] = num2str(bitRate); options[12] = strdup("MaxBR"); options[13] = num2str((bitRate+50)/100); for (int i = 0; i < 5; i++) { options[14+i*2] = strdup(StandardVideoSizes[i].optionName); options[14+i*2+1] = num2str(mpi[i]); } return 1; } static int free_codec_options(const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(char ***)) return 0; char ** strings = (char **) parm; for (char ** string = strings; *string != NULL; string++) free(*string); free(strings); return 1; } static int valid_for_protocol(const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(char *)) return 0; return (STRCMPI((const char *)parm, "h.323") == 0 || STRCMPI((const char *)parm, "h323") == 0) ? 1 : 0; } ///////////////////////////////////////////////////////////////////////////// static struct PluginCodec_information licenseInfo = { 1145863600, // timestamp = Mon 24 Apr 2006 07:26:40 AM UTC "Craig Southeren, Guilhem Tardy, Derek Smithies", // source code author "1.0", // source code version "openh323@openh323.org", // source code email "http://sourceforge.net/projects/openh323", // source code URL "Copyright (C) 2006 by Post Increment", // source code copyright ", Copyright (C) 2005 Salyens" ", Copyright (C) 2001 March Networks Corporation" ", Copyright (C) 1999-2000 Equivalence Pty. Ltd." "MPL 1.0", // source code license PluginCodec_License_MPL, // source code license "FFMPEG", // codec description "Michael Niedermayer, Fabrice Bellard", // codec author "4.7.1", // codec version "ffmpeg-devel-request@ mplayerhq.hu", // codec email "http://sourceforge.net/projects/ffmpeg/", // codec URL "Copyright (c) 2000-2001 Fabrice Bellard" // codec copyright information ", Copyright (c) 2002-2003 Michael Niedermayer", "GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1, February 1999", // codec license PluginCodec_License_LGPL // codec license code }; static const char YUV420PDesc[] = { "YUV420P" }; static const char h263QCIFDesc[] = { "H.263-QCIF" }; static const char h263CIFDesc[] = { "H.263-CIF" }; static const char h263Desc[] = { "H.263" }; static const char sdpH263[] = { "h263" }; static PluginCodec_ControlDefn h323EncoderControls[] = { { PLUGINCODEC_CONTROL_GET_CODEC_OPTIONS, get_codec_options }, { PLUGINCODEC_CONTROL_TO_NORMALISED_OPTIONS, to_normalised_options }, { PLUGINCODEC_CONTROL_TO_CUSTOMISED_OPTIONS, to_customised_options }, { PLUGINCODEC_CONTROL_FREE_CODEC_OPTIONS, free_codec_options }, { PLUGINCODEC_CONTROL_VALID_FOR_PROTOCOL, valid_for_protocol }, { PLUGINCODEC_CONTROL_SET_CODEC_OPTIONS, encoder_set_options }, { NULL } }; static PluginCodec_ControlDefn h323DecoderControls[] = { { PLUGINCODEC_CONTROL_GET_CODEC_OPTIONS, get_codec_options }, { PLUGINCODEC_CONTROL_TO_NORMALISED_OPTIONS, to_normalised_options }, { PLUGINCODEC_CONTROL_TO_CUSTOMISED_OPTIONS, to_customised_options }, { PLUGINCODEC_CONTROL_FREE_CODEC_OPTIONS, free_codec_options }, { PLUGINCODEC_CONTROL_VALID_FOR_PROTOCOL, valid_for_protocol }, { PLUGINCODEC_CONTROL_GET_OUTPUT_DATA_SIZE, decoder_get_output_data_size }, { NULL } }; static PluginCodec_ControlDefn EncoderControls[] = { { PLUGINCODEC_CONTROL_GET_CODEC_OPTIONS, get_codec_options }, { PLUGINCODEC_CONTROL_TO_NORMALISED_OPTIONS, to_normalised_options }, { PLUGINCODEC_CONTROL_TO_CUSTOMISED_OPTIONS, to_customised_options }, { PLUGINCODEC_CONTROL_FREE_CODEC_OPTIONS, free_codec_options }, { PLUGINCODEC_CONTROL_SET_CODEC_OPTIONS, encoder_set_options }, { NULL } }; static PluginCodec_ControlDefn DecoderControls[] = { { PLUGINCODEC_CONTROL_GET_CODEC_OPTIONS, get_codec_options }, { PLUGINCODEC_CONTROL_TO_NORMALISED_OPTIONS, to_normalised_options }, { PLUGINCODEC_CONTROL_TO_CUSTOMISED_OPTIONS, to_customised_options }, { PLUGINCODEC_CONTROL_FREE_CODEC_OPTIONS, free_codec_options }, { PLUGINCODEC_CONTROL_GET_OUTPUT_DATA_SIZE, decoder_get_output_data_size }, { NULL } }; static struct PluginCodec_Option const sqcifMPI = { PluginCodec_IntegerOption, // Option type PLUGINCODEC_SQCIF_MPI, // User visible name false, // User Read/Only flag PluginCodec_MaxMerge, // Merge mode "1", // Initial value "SQCIF", // FMTP option name STRINGIZE(PLUGINCODEC_MPI_DISABLED),// FMTP default value 0, // H.245 generic capability code and bit mask "1", // Minimum value STRINGIZE(PLUGINCODEC_MPI_DISABLED) // Maximum value }; static struct PluginCodec_Option const qcifMPI = { PluginCodec_IntegerOption, // Option type PLUGINCODEC_QCIF_MPI, // User visible name false, // User Read/Only flag PluginCodec_MaxMerge, // Merge mode "1", // Initial value "QCIF", // FMTP option name STRINGIZE(PLUGINCODEC_MPI_DISABLED),// FMTP default value 0, // H.245 generic capability code and bit mask "1", // Minimum value STRINGIZE(PLUGINCODEC_MPI_DISABLED) // Maximum value }; static struct PluginCodec_Option const cifMPI = { PluginCodec_IntegerOption, // Option type PLUGINCODEC_CIF_MPI, // User visible name false, // User Read/Only flag PluginCodec_MaxMerge, // Merge mode "2", // Initial value "CIF", // FMTP option name STRINGIZE(PLUGINCODEC_MPI_DISABLED),// FMTP default value 0, // H.245 generic capability code and bit mask "1", // Minimum value STRINGIZE(PLUGINCODEC_MPI_DISABLED) // Maximum value }; static struct PluginCodec_Option const cif4MPI = { PluginCodec_IntegerOption, // Option type PLUGINCODEC_CIF4_MPI, // User visible name false, // User Read/Only flag PluginCodec_MaxMerge, // Merge mode STRINGIZE(PLUGINCODEC_MPI_DISABLED),// Initial value "CIF4", // FMTP option name STRINGIZE(PLUGINCODEC_MPI_DISABLED),// FMTP default value 0, // H.245 generic capability code and bit mask "1", // Minimum value STRINGIZE(PLUGINCODEC_MPI_DISABLED) // Maximum value }; static struct PluginCodec_Option const cif16MPI = { PluginCodec_IntegerOption, // Option type PLUGINCODEC_CIF16_MPI, // User visible name false, // User Read/Only flag PluginCodec_MaxMerge, // Merge mode STRINGIZE(PLUGINCODEC_MPI_DISABLED),// Initial value "CIF16", // FMTP option name STRINGIZE(PLUGINCODEC_MPI_DISABLED),// FMTP default value 0, // H.245 generic capability code and bit mask "1", // Minimum value STRINGIZE(PLUGINCODEC_MPI_DISABLED) // Maximum value }; static struct PluginCodec_Option const maxBR = { PluginCodec_IntegerOption, // Option type "MaxBR", // User visible name false, // User Read/Only flag PluginCodec_MinMerge, // Merge mode "0", // Initial value "maxbr", // FMTP option name "0", // FMTP default value 0, // H.245 generic capability code and bit mask "0", // Minimum value "32767" // Maximum value }; static struct PluginCodec_Option const videoQuality = { PluginCodec_IntegerOption, // Option type "Encoding Quality", // User visible name false, // User Read/Only flag PluginCodec_MinMerge, // Merge mode "10", // Initial value NULL, // FMTP option name NULL, // FMTP default value 0, // H.245 generic capability code and bit mask "1", // Minimum value "31" // Maximum value }; static struct PluginCodec_Option const minVideoQuality = { PluginCodec_IntegerOption, // Option type "set_min_quality", // User visible name false, // User Read/Only flag PluginCodec_MinMerge, // Merge mode "1", // Initial value NULL, // FMTP option name NULL, // FMTP default value 0, // H.245 generic capability code and bit mask "1", // Minimum value "31" // Maximum value }; static struct PluginCodec_Option const maxVideoQuality = { PluginCodec_IntegerOption, // Option type "set_max_quality", // User visible name false, // User Read/Only flag PluginCodec_MinMerge, // Merge mode "31", // Initial value NULL, // FMTP option name NULL, // FMTP default value 0, // H.245 generic capability code and bit mask "1", // Minimum value "31" // Maximum value }; static struct PluginCodec_Option const mediaPacketization = { PluginCodec_StringOption, // Option type PLUGINCODEC_MEDIA_PACKETIZATION, // User visible name true, // User Read/Only flag PluginCodec_EqualMerge, // Merge mode "RFC2190" // Initial value }; /* All of the annexes below are turned off and set to read/only because this implementation does not support them. Their presence here is so that if someone out there does a different implementation of the codec and copies this file as a template, they will get them and hopefully notice that they can just make them read/write and/or turned on. */ static struct PluginCodec_Option const annexF = { PluginCodec_BoolOption, "Annex F", true, PluginCodec_AndMerge, "0", "F", "0" }; static struct PluginCodec_Option const annexI = { PluginCodec_BoolOption, "Annex I", true, PluginCodec_AndMerge, "0", "I", "0" }; static struct PluginCodec_Option const annexJ = { PluginCodec_BoolOption, "Annex J", true, PluginCodec_AndMerge, "0", "J", "0" }; static struct PluginCodec_Option const annexK = { PluginCodec_IntegerOption,"Annex K", true, PluginCodec_EqualMerge,"0", "K", "0", 0, "0", "4" }; static struct PluginCodec_Option const annexN = { PluginCodec_BoolOption, "Annex N", true, PluginCodec_AndMerge, "0", "N", "0" }; static struct PluginCodec_Option const annexP = { PluginCodec_BoolOption, "Annex P", true, PluginCodec_AndMerge, "0", "P", "0" }; static struct PluginCodec_Option const annexT = { PluginCodec_BoolOption, "Annex T", true, PluginCodec_AndMerge, "0", "T", "0" }; static struct PluginCodec_Option const * const qcifOptionTable[] = { &mediaPacketization, &maxBR, &videoQuality, &minVideoQuality, &maxVideoQuality, &qcifMPI, NULL }; static struct PluginCodec_Option const * const cifOptionTable[] = { &mediaPacketization, &maxBR, &videoQuality, &minVideoQuality, &maxVideoQuality, &cifMPI, NULL }; static struct PluginCodec_Option const * const xcifOptionTable[] = { &mediaPacketization, &maxBR, &videoQuality, &minVideoQuality, &maxVideoQuality, &qcifMPI, &cifMPI, &sqcifMPI, &cif4MPI, &cif16MPI, &annexF, &annexI, &annexJ, &annexK, &annexN, &annexP, &annexT, NULL }; ///////////////////////////////////////////////////////////////////////////// static struct PluginCodec_Definition h263CodecDefn[6] = { { // CIF only encoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeVideo | // video codec PluginCodec_RTPTypeExplicit, // specified RTP type h263CIFDesc, // text decription YUV420PDesc, // source format h263CIFDesc, // destination format cifOptionTable, // user data H263_CLOCKRATE, // samples per second H263_BITRATE, // raw bits per second 20000, // nanoseconds per frame {{ CIF_WIDTH, // frame width CIF_HEIGHT, // frame height 10, // recommended frame rate 60, // maximum frame rate }}, RTP_RFC2190_PAYLOAD, // IANA RTP payload code sdpH263, // RTP payload name create_encoder, // create codec function destroy_encoder, // destroy codec codec_encoder, // encode/decode h323EncoderControls, // codec controls PluginCodec_H323VideoCodec_h263, // h323CapabilityType NULL // h323CapabilityData }, { // CIF only decoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeVideo | // video codec PluginCodec_RTPTypeExplicit, // specified RTP type h263CIFDesc, // text decription h263CIFDesc, // source format YUV420PDesc, // destination format cifOptionTable, // user data H263_CLOCKRATE, // samples per second H263_BITRATE, // raw bits per second 20000, // nanoseconds per frame {{ CIF_WIDTH, // frame width CIF_HEIGHT, // frame height 10, // recommended frame rate 60, // maximum frame rate }}, RTP_RFC2190_PAYLOAD, // IANA RTP payload code sdpH263, // RTP payload name create_decoder, // create codec function destroy_decoder, // destroy codec codec_decoder, // encode/decode h323DecoderControls, // codec controls PluginCodec_H323VideoCodec_h263, // h323CapabilityType NULL // h323CapabilityData }, { // QCIF only encoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeVideo | // audio codec PluginCodec_RTPTypeExplicit, // specified RTP type h263QCIFDesc, // text decription YUV420PDesc, // source format h263QCIFDesc, // destination format qcifOptionTable, // user data H263_CLOCKRATE, // samples per second H263_BITRATE, // raw bits per second 20000, // nanoseconds per frame {{ QCIF_WIDTH, // frame width QCIF_HEIGHT, // frame height 10, // recommended frame rate 60, // maximum frame rate }}, RTP_RFC2190_PAYLOAD, // IANA RTP payload code sdpH263, // RTP payload name create_encoder, // create codec function destroy_encoder, // destroy codec codec_encoder, // encode/decode h323EncoderControls, // codec controls PluginCodec_H323VideoCodec_h263, // h323CapabilityType NULL // h323CapabilityData }, { // QCIF only decoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeVideo | // audio codec PluginCodec_RTPTypeExplicit, // specified RTP type h263QCIFDesc, // text decription h263QCIFDesc, // source format YUV420PDesc, // destination format qcifOptionTable, // user data H263_CLOCKRATE, // samples per second H263_BITRATE, // raw bits per second 20000, // nanoseconds per frame {{ QCIF_WIDTH, // frame width QCIF_HEIGHT, // frame height 10, // recommended frame rate 60, // maximum frame rate }}, RTP_RFC2190_PAYLOAD, // IANA RTP payload code sdpH263, // RTP payload name create_decoder, // create codec function destroy_decoder, // destroy codec codec_decoder, // encode/decode h323DecoderControls, // codec controls PluginCodec_H323VideoCodec_h263, // h323CapabilityType NULL // h323CapabilityData }, { // All frame sizes (dynamic) encoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeVideo | // video codec PluginCodec_MediaTypeExtVideo | // Extended video codec PluginCodec_RTPTypeExplicit, // specified RTP type h263Desc, // text decription YUV420PDesc, // source format h263Desc, // destination format xcifOptionTable, // user data H263_CLOCKRATE, // samples per second H263_BITRATE, // raw bits per second 20000, // nanoseconds per frame {{ CIF16_WIDTH, // frame width CIF16_HEIGHT, // frame height 10, // recommended frame rate 60, // maximum frame rate }}, RTP_RFC2190_PAYLOAD, // IANA RTP payload code sdpH263, // RTP payload name create_encoder, // create codec function destroy_encoder, // destroy codec codec_encoder, // encode/decode EncoderControls, // codec controls PluginCodec_H323VideoCodec_h263, // h323CapabilityType NULL // h323CapabilityData }, { // All frame sizes (dynamic) decoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeVideo | // video codec PluginCodec_MediaTypeExtVideo | // Extended video codec PluginCodec_RTPTypeExplicit, // specified RTP type h263Desc, // text decription h263Desc, // source format YUV420PDesc, // destination format xcifOptionTable, // user data H263_CLOCKRATE, // samples per second H263_BITRATE, // raw bits per second 20000, // nanoseconds per frame {{ CIF16_WIDTH, // frame width CIF16_HEIGHT, // frame height 10, // recommended frame rate 60, // maximum frame rate }}, RTP_RFC2190_PAYLOAD, // IANA RTP payload code sdpH263, // RTP payload name create_decoder, // create codec function destroy_decoder, // destroy codec codec_decoder, // encode/decode DecoderControls, // codec controls PluginCodec_H323VideoCodec_h263, // h323CapabilityType NULL // h323CapabilityData } }; ///////////////////////////////////////////////////////////////////////////// extern "C" { PLUGIN_CODEC_IMPLEMENT(FFMPEG_H263) PLUGIN_CODEC_DLL_API struct PluginCodec_Definition * PLUGIN_CODEC_GET_CODEC_FN(unsigned * count, unsigned version) { // check version numbers etc if (version < PLUGIN_CODEC_VERSION_OPTIONS || !FFMPEGLibraryInstance.Load()) { *count = 0; return NULL; } *count = sizeof(h263CodecDefn) / sizeof(struct PluginCodec_Definition); return h263CodecDefn; } }; h323plus/plugins/video/H.263-ffmpeg/h263ffmpeg.vcproj0000644000175000017500000000772111341106277020745 0ustar markmark h323plus/plugins/video/H.263-ffmpeg/ReadMe.txt0000644000175000017500000000146711341106277017550 0ustar markmarkCompilation notes ----------------- Craig Southeren 4 October 2006 The ffmpeg library headers and a compiled version of the ffmpeg shared library are required to use this codec plugin. These can be found at Linux http://www.voxgratia.org/bin/libavcodec-0.4.7-linux.bin.tar.gz Windows http://www.voxgratia.org/bin/libavcodec-0.4.7-windows.bin.zip Put the contents of the correct archive file into a subdirectory called ffmpeg. The makefile should detect this and correctly compile the plugin Note that the libavcodec.so or libavcodec.dll file must be put into the same directory as the rest of the plugins. Failure to do this will cause the plugin to be inoperable. If you insist on compiling ffmpeg from source, then read the instructions at http://www.voxgratia.org/docs/h263_codec.html ---------------- h323plus/plugins/video/H.263-ffmpeg/ffmpeg/0000755000175000017500000000000011341106277017106 5ustar markmarkh323plus/plugins/video/H.263-ffmpeg/ffmpeg/common.h0000644000175000017500000007047211341106277020561 0ustar markmark/** * @file common.h * common internal api header. */ #ifndef COMMON_H #define COMMON_H #if defined(_WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) # define CONFIG_WIN32 #endif //#define ALT_BITSTREAM_WRITER //#define ALIGNED_BITSTREAM_WRITER #define ALT_BITSTREAM_READER //#define LIBMPEG2_BITSTREAM_READER //#define A32_BITSTREAM_READER #define LIBMPEG2_BITSTREAM_READER_HACK //add BERO #ifdef HAVE_AV_CONFIG_H /* only include the following when compiling package */ # include "config.h" # include # include # include # ifndef __BEOS__ # include # else # include "berrno.h" # endif # include # ifndef ENODATA # define ENODATA 61 # endif #ifndef M_PI #define M_PI 3.14159265358979323846 #endif #include #ifndef offsetof # define offsetof(T,F) ((unsigned int)((char *)&((T *)0)->F)) #endif #define AVOPTION_CODEC_BOOL(name, help, field) \ { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_BOOL } #define AVOPTION_CODEC_DOUBLE(name, help, field, minv, maxv, defval) \ { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_DOUBLE, minv, maxv, defval } #define AVOPTION_CODEC_FLAG(name, help, field, flag, defval) \ { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_FLAG, flag, 0, defval } #define AVOPTION_CODEC_INT(name, help, field, minv, maxv, defval) \ { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_INT, minv, maxv, defval } #define AVOPTION_CODEC_STRING(name, help, field, str, val) \ { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_STRING, .defval = val, .defstr = str } #define AVOPTION_CODEC_RCOVERRIDE(name, help, field) \ { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_RCOVERRIDE, .defval = 0, .defstr = NULL } #define AVOPTION_SUB(ptr) { .name = NULL, .help = (const char*)ptr } #define AVOPTION_END() AVOPTION_SUB(NULL) struct AVOption; #ifdef HAVE_MMX extern const struct AVOption avoptions_common[3 + 5]; #else extern const struct AVOption avoptions_common[3]; #endif extern const struct AVOption avoptions_workaround_bug[11]; #endif /* HAVE_AV_CONFIG_H */ /* Suppress restrict if it was not defined in config.h. */ #ifndef restrict # define restrict #endif #if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0) # define always_inline __attribute__((always_inline)) inline #else # define always_inline inline #endif #ifdef CONFIG_WIN32 /* windows */ typedef unsigned short uint16_t; typedef signed short int16_t; typedef unsigned char uint8_t; typedef unsigned int uint32_t; typedef unsigned __int64 uint64_t; typedef signed char int8_t; typedef signed int int32_t; typedef signed __int64 int64_t; # ifndef __MINGW32__ # define int64_t_C(c) (c ## i64) # define uint64_t_C(c) (c ## i64) # define inline __inline # else # define int64_t_C(c) (c ## LL) # define uint64_t_C(c) (c ## ULL) # endif /* __MINGW32__ */ # ifdef _DEBUG # define DEBUG # endif # define snprintf _snprintf # define vsnprintf _vsnprintf /* CONFIG_WIN32 end */ #elif defined (CONFIG_OS2) /* OS/2 EMX */ #include #ifndef int64_t_C #define int64_t_C(c) (c ## LL) #define uint64_t_C(c) (c ## ULL) #endif #ifdef HAVE_AV_CONFIG_H #ifdef USE_FASTMEMCPY #include "fastmemcpy.h" #endif #include #endif /* HAVE_AV_CONFIG_H */ /* CONFIG_OS2 end */ #else /* unix */ #include #ifndef int64_t_C #define int64_t_C(c) (c ## LL) #define uint64_t_C(c) (c ## ULL) #endif #ifdef HAVE_AV_CONFIG_H # ifdef USE_FASTMEMCPY # include "fastmemcpy.h" # endif #endif /* HAVE_AV_CONFIG_H */ #endif /* !CONFIG_WIN32 && !CONFIG_OS2 */ #ifdef HAVE_AV_CONFIG_H # include "bswap.h" # if defined(__MINGW32__) || defined(__CYGWIN__) || \ defined(__OS2__) || (defined (__OpenBSD__) && !defined(__ELF__)) # define MANGLE(a) "_" #a # else # define MANGLE(a) #a # endif /* debug stuff */ # ifndef DEBUG # define NDEBUG # endif # include ///////////////////////////////////////////// //////////////START EXTRA lines for openh323 printing to work OK> /////////////////////////// #define fprintf openh323_fprintf #define printf openh323_printf extern void avcodec_set_print_fn(void (*print_fn)(char *)); extern int openh323_fprintf(FILE * f, const char * s, ...); extern int openh323_printf(const char * s, ...); ///////////////////////////////////////////// //////////////END EXTRA lines for openh323 printing to work OK> /////////////////////////// /* dprintf macros */ # if defined(CONFIG_WIN32) && !defined(__MINGW32__) inline void dprintf(const char* fmt,...) {} # else # ifdef DEBUG # define dprintf(fmt,args...) printf(fmt, ## args) # else # define dprintf(fmt,args...) # endif # endif /* !CONFIG_WIN32 */ # define av_abort() do { fprintf(stderr, "Abort at %s:%d\n", __FILE__, __LINE__); abort(); } while (0) //rounded divison & shift #define RSHIFT(a,b) ((a) > 0 ? ((a) + (1<<((b)-1)))>>(b) : ((a) + (1<<((b)-1))-1)>>(b)) /* assume b>0 */ #define ROUNDED_DIV(a,b) (((a)>0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b)) #define ABS(a) ((a) >= 0 ? (a) : (-(a))) #define FFMAX(a,b) ((a) > (b) ? (a) : (b)) #define FFMIN(a,b) ((a) > (b) ? (b) : (a)) extern const uint32_t inverse[256]; #ifdef ARCH_X86 # define FASTDIV(a,b) \ ({\ int ret,dmy;\ asm volatile(\ "mull %3"\ :"=d"(ret),"=a"(dmy)\ :"1"(a),"g"(inverse[b])\ );\ ret;\ }) #elif defined(CONFIG_FASTDIV) # define FASTDIV(a,b) ((uint32_t)((((uint64_t)a)*inverse[b])>>32)) #else # define FASTDIV(a,b) ((a)/(b)) #endif #ifdef ARCH_X86 // avoid +32 for shift optimization (gcc should do that ...) static inline int32_t NEG_SSR32( int32_t a, int8_t s){ asm ("sarl %1, %0\n\t" : "+r" (a) : "ic" ((uint8_t)(-s)) ); return a; } static inline uint32_t NEG_USR32(uint32_t a, int8_t s){ asm ("shrl %1, %0\n\t" : "+r" (a) : "ic" ((uint8_t)(-s)) ); return a; } #else # define NEG_SSR32(a,s) ((( int32_t)(a))>>(32-(s))) # define NEG_USR32(a,s) (((uint32_t)(a))>>(32-(s))) #endif /* bit output */ typedef void (*WriteDataFunc)(void *, uint8_t *, int); typedef struct PutBitContext { #ifdef ALT_BITSTREAM_WRITER uint8_t *buf, *buf_end; int index; #else uint32_t bit_buf; int bit_left; uint8_t *buf, *buf_ptr, *buf_end; #endif int64_t data_out_size; /* in bytes */ } PutBitContext; void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size, void *opaque, void (*write_data)(void *, uint8_t *, int)); int64_t get_bit_count(PutBitContext *s); /* XXX: change function name */ void align_put_bits(PutBitContext *s); void flush_put_bits(PutBitContext *s); void put_string(PutBitContext * pbc, char *s); /* bit input */ typedef struct GetBitContext { const uint8_t *buffer, *buffer_end; #ifdef ALT_BITSTREAM_READER int index; #elif defined LIBMPEG2_BITSTREAM_READER uint8_t *buffer_ptr; uint32_t cache; int bit_count; #elif defined A32_BITSTREAM_READER uint32_t *buffer_ptr; uint32_t cache0; uint32_t cache1; int bit_count; #endif int size_in_bits; } GetBitContext; static inline int get_bits_count(GetBitContext *s); #define VLC_TYPE int16_t typedef struct VLC { int bits; VLC_TYPE (*table)[2]; ///< code, bits int table_size, table_allocated; } VLC; typedef struct RL_VLC_ELEM { int16_t level; int8_t len; uint8_t run; } RL_VLC_ELEM; #ifdef ARCH_SPARC64 #define UNALIGNED_STORES_ARE_BAD #endif /* used to avoid missaligned exceptions on some archs (alpha, ...) */ #ifdef ARCH_X86 # define unaligned32(a) (*(uint32_t*)(a)) #else # ifdef __GNUC__ static inline uint32_t unaligned32(const void *v) { struct Unaligned { uint32_t i; } __attribute__((packed)); return ((const struct Unaligned *) v)->i; } # elif defined(__DECC) static inline uint32_t unaligned32(const void *v) { return *(const __unaligned uint32_t *) v; } # else static inline uint32_t unaligned32(const void *v) { return *(const uint32_t *) v; } # endif #endif //!ARCH_X86 #ifdef ALT_BITSTREAM_WRITER static inline void put_bits(PutBitContext *s, int n, unsigned int value) { # ifdef ALIGNED_BITSTREAM_WRITER # ifdef ARCH_X86 asm volatile( "movl %0, %%ecx \n\t" "xorl %%eax, %%eax \n\t" "shrdl %%cl, %1, %%eax \n\t" "shrl %%cl, %1 \n\t" "movl %0, %%ecx \n\t" "shrl $3, %%ecx \n\t" "andl $0xFFFFFFFC, %%ecx \n\t" "bswapl %1 \n\t" "orl %1, (%2, %%ecx) \n\t" "bswapl %%eax \n\t" "addl %3, %0 \n\t" "movl %%eax, 4(%2, %%ecx) \n\t" : "=&r" (s->index), "=&r" (value) : "r" (s->buf), "r" (n), "0" (s->index), "1" (value<<(-n)) : "%eax", "%ecx" ); # else int index= s->index; uint32_t *ptr= ((uint32_t *)s->buf)+(index>>5); value<<= 32-n; ptr[0] |= be2me_32(value>>(index&31)); ptr[1] = be2me_32(value<<(32-(index&31))); //if(n>24) printf("%d %d\n", n, value); index+= n; s->index= index; # endif # else //ALIGNED_BITSTREAM_WRITER # ifdef ARCH_X86 asm volatile( "movl $7, %%ecx \n\t" "andl %0, %%ecx \n\t" "addl %3, %%ecx \n\t" "negl %%ecx \n\t" "shll %%cl, %1 \n\t" "bswapl %1 \n\t" "movl %0, %%ecx \n\t" "shrl $3, %%ecx \n\t" "orl %1, (%%ecx, %2) \n\t" "addl %3, %0 \n\t" "movl $0, 4(%%ecx, %2) \n\t" : "=&r" (s->index), "=&r" (value) : "r" (s->buf), "r" (n), "0" (s->index), "1" (value) : "%ecx" ); # else int index= s->index; uint32_t *ptr= (uint32_t*)(((uint8_t *)s->buf)+(index>>3)); ptr[0] |= be2me_32(value<<(32-n-(index&7) )); ptr[1] = 0; //if(n>24) printf("%d %d\n", n, value); index+= n; s->index= index; # endif # endif //!ALIGNED_BITSTREAM_WRITER } #else //ALT_BITSTREAM_WRITER static inline void put_bits(PutBitContext *s, int n, unsigned int value) { unsigned int bit_buf; int bit_left; #ifdef STATS st_out_bit_counts[st_current_index] += n; #endif // printf("put_bits=%d %x\n", n, value); assert(n == 32 || value < (1U << n)); bit_buf = s->bit_buf; bit_left = s->bit_left; // printf("n=%d value=%x cnt=%d buf=%x\n", n, value, bit_cnt, bit_buf); /* XXX: optimize */ if (n < bit_left) { bit_buf = (bit_buf<> (n - bit_left); #ifdef UNALIGNED_STORES_ARE_BAD if (3 & (int) s->buf_ptr) { s->buf_ptr[0] = bit_buf >> 24; s->buf_ptr[1] = bit_buf >> 16; s->buf_ptr[2] = bit_buf >> 8; s->buf_ptr[3] = bit_buf ; } else #endif *(uint32_t *)s->buf_ptr = be2me_32(bit_buf); //printf("bitbuf = %08x\n", bit_buf); s->buf_ptr += 4; bit_left += 32 - n; bit_buf = value; } s->bit_buf = bit_buf; s->bit_left = bit_left; } #endif //!ALT_BITSTREAM_WRITER /* Pointer to the byte currently being written */ static inline uint8_t* pbBufPtr(PutBitContext *s) { #ifdef ALT_BITSTREAM_WRITER return s->buf + (s->index>>3); #else return s->buf_ptr + ((32 - s->bit_left)>>3); #endif } /* Number of bits remaining in the byte currently being written */ static inline int pbBufEndBit(PutBitContext *s) { #ifdef ALT_BITSTREAM_WRITER return (- s->index) & 7; #else return s->bit_left & 7; #endif } /* Bitstream reader API docs: name abritary name which is used as prefix for the internal variables gb getbitcontext OPEN_READER(name, gb) loads gb into local variables CLOSE_READER(name, gb) stores local vars in gb UPDATE_CACHE(name, gb) refills the internal cache from the bitstream after this call at least MIN_CACHE_BITS will be available, GET_CACHE(name, gb) will output the contents of the internal cache, next bit is MSB of 32 or 64 bit (FIXME 64bit) SHOW_UBITS(name, gb, num) will return the next num bits SHOW_SBITS(name, gb, num) will return the next num bits and do sign extension SKIP_BITS(name, gb, num) will skip over the next num bits note, this is equivalent to SKIP_CACHE; SKIP_COUNTER SKIP_CACHE(name, gb, num) will remove the next num bits from the cache (note SKIP_COUNTER MUST be called before UPDATE_CACHE / CLOSE_READER) SKIP_COUNTER(name, gb, num) will increment the internal bit counter (see SKIP_CACHE & SKIP_BITS) LAST_SKIP_CACHE(name, gb, num) will remove the next num bits from the cache if it is needed for UPDATE_CACHE otherwise it will do nothing LAST_SKIP_BITS(name, gb, num) is equivalent to SKIP_LAST_CACHE; SKIP_COUNTER for examples see get_bits, show_bits, skip_bits, get_vlc */ static inline int unaligned32_be(const void *v) { #ifdef CONFIG_ALIGN const uint8_t *p=v; return (((p[0]<<8) | p[1])<<16) | (p[2]<<8) | (p[3]); #else return be2me_32( unaligned32(v)); //original #endif } #ifdef ALT_BITSTREAM_READER # define MIN_CACHE_BITS 25 # define OPEN_READER(name, gb)\ int name##_index= (gb)->index;\ int name##_cache= 0;\ # define CLOSE_READER(name, gb)\ (gb)->index= name##_index;\ # define UPDATE_CACHE(name, gb)\ name##_cache= unaligned32_be( ((uint8_t *)(gb)->buffer)+(name##_index>>3) ) << (name##_index&0x07);\ # define SKIP_CACHE(name, gb, num)\ name##_cache <<= (num);\ // FIXME name? # define SKIP_COUNTER(name, gb, num)\ name##_index += (num);\ # define SKIP_BITS(name, gb, num)\ {\ SKIP_CACHE(name, gb, num)\ SKIP_COUNTER(name, gb, num)\ }\ # define LAST_SKIP_BITS(name, gb, num) SKIP_COUNTER(name, gb, num) # define LAST_SKIP_CACHE(name, gb, num) ; # define SHOW_UBITS(name, gb, num)\ NEG_USR32(name##_cache, num) # define SHOW_SBITS(name, gb, num)\ NEG_SSR32(name##_cache, num) # define GET_CACHE(name, gb)\ ((uint32_t)name##_cache) static inline int get_bits_count(GetBitContext *s){ return s->index; } #elif defined LIBMPEG2_BITSTREAM_READER //libmpeg2 like reader # define MIN_CACHE_BITS 17 # define OPEN_READER(name, gb)\ int name##_bit_count=(gb)->bit_count;\ int name##_cache= (gb)->cache;\ uint8_t * name##_buffer_ptr=(gb)->buffer_ptr;\ # define CLOSE_READER(name, gb)\ (gb)->bit_count= name##_bit_count;\ (gb)->cache= name##_cache;\ (gb)->buffer_ptr= name##_buffer_ptr;\ #ifdef LIBMPEG2_BITSTREAM_READER_HACK # define UPDATE_CACHE(name, gb)\ if(name##_bit_count >= 0){\ name##_cache+= (int)be2me_16(*(uint16_t*)name##_buffer_ptr) << name##_bit_count;\ ((uint16_t*)name##_buffer_ptr)++;\ name##_bit_count-= 16;\ }\ #else # define UPDATE_CACHE(name, gb)\ if(name##_bit_count >= 0){\ name##_cache+= ((name##_buffer_ptr[0]<<8) + name##_buffer_ptr[1]) << name##_bit_count;\ name##_buffer_ptr+=2;\ name##_bit_count-= 16;\ }\ #endif # define SKIP_CACHE(name, gb, num)\ name##_cache <<= (num);\ # define SKIP_COUNTER(name, gb, num)\ name##_bit_count += (num);\ # define SKIP_BITS(name, gb, num)\ {\ SKIP_CACHE(name, gb, num)\ SKIP_COUNTER(name, gb, num)\ }\ # define LAST_SKIP_BITS(name, gb, num) SKIP_BITS(name, gb, num) # define LAST_SKIP_CACHE(name, gb, num) SKIP_CACHE(name, gb, num) # define SHOW_UBITS(name, gb, num)\ NEG_USR32(name##_cache, num) # define SHOW_SBITS(name, gb, num)\ NEG_SSR32(name##_cache, num) # define GET_CACHE(name, gb)\ ((uint32_t)name##_cache) static inline int get_bits_count(GetBitContext *s){ return (s->buffer_ptr - s->buffer)*8 - 16 + s->bit_count; } #elif defined A32_BITSTREAM_READER # define MIN_CACHE_BITS 32 # define OPEN_READER(name, gb)\ int name##_bit_count=(gb)->bit_count;\ uint32_t name##_cache0= (gb)->cache0;\ uint32_t name##_cache1= (gb)->cache1;\ uint32_t * name##_buffer_ptr=(gb)->buffer_ptr;\ # define CLOSE_READER(name, gb)\ (gb)->bit_count= name##_bit_count;\ (gb)->cache0= name##_cache0;\ (gb)->cache1= name##_cache1;\ (gb)->buffer_ptr= name##_buffer_ptr;\ # define UPDATE_CACHE(name, gb)\ if(name##_bit_count > 0){\ const uint32_t next= be2me_32( *name##_buffer_ptr );\ name##_cache0 |= NEG_USR32(next,name##_bit_count);\ name##_cache1 |= next<buffer_ptr - s->buffer)*8 - 32 + s->bit_count; } #endif /** * read mpeg1 dc style vlc (sign bit + mantisse with no MSB). * if MSB not set it is negative * @param n length in bits * @author BERO */ static inline int get_xbits(GetBitContext *s, int n){ register int tmp; register int32_t cache; OPEN_READER(re, s) UPDATE_CACHE(re, s) cache = GET_CACHE(re,s); if ((int32_t)cache<0) { //MSB=1 tmp = NEG_USR32(cache,n); } else { // tmp = (-1<index+=n for the ALT_READER :)) OPEN_READER(re, s) UPDATE_CACHE(re, s) LAST_SKIP_BITS(re, s, n) CLOSE_READER(re, s) } static inline unsigned int get_bits1(GetBitContext *s){ #ifdef ALT_BITSTREAM_READER int index= s->index; uint8_t result= s->buffer[ index>>3 ]; result<<= (index&0x07); result>>= 8 - 1; index++; s->index= index; return result; #else return get_bits(s, 1); #endif } static inline unsigned int show_bits1(GetBitContext *s){ return show_bits(s, 1); } static inline void skip_bits1(GetBitContext *s){ skip_bits(s, 1); } void init_get_bits(GetBitContext *s, const uint8_t *buffer, int buffer_size); int check_marker(GetBitContext *s, const char *msg); void align_get_bits(GetBitContext *s); int init_vlc(VLC *vlc, int nb_bits, int nb_codes, const void *bits, int bits_wrap, int bits_size, const void *codes, int codes_wrap, int codes_size); void free_vlc(VLC *vlc); /** * * if the vlc code is invalid and max_depth=1 than no bits will be removed * if the vlc code is invalid and max_depth>1 than the number of bits removed * is undefined */ #define GET_VLC(code, name, gb, table, bits, max_depth)\ {\ int n, index, nb_bits;\ \ index= SHOW_UBITS(name, gb, bits);\ code = table[index][0];\ n = table[index][1];\ \ if(max_depth > 1 && n < 0){\ LAST_SKIP_BITS(name, gb, bits)\ UPDATE_CACHE(name, gb)\ \ nb_bits = -n;\ \ index= SHOW_UBITS(name, gb, nb_bits) + code;\ code = table[index][0];\ n = table[index][1];\ if(max_depth > 2 && n < 0){\ LAST_SKIP_BITS(name, gb, nb_bits)\ UPDATE_CACHE(name, gb)\ \ nb_bits = -n;\ \ index= SHOW_UBITS(name, gb, nb_bits) + code;\ code = table[index][0];\ n = table[index][1];\ }\ }\ SKIP_BITS(name, gb, n)\ } #define GET_RL_VLC(level, run, name, gb, table, bits, max_depth)\ {\ int n, index, nb_bits;\ \ index= SHOW_UBITS(name, gb, bits);\ level = table[index].level;\ n = table[index].len;\ \ if(max_depth > 1 && n < 0){\ LAST_SKIP_BITS(name, gb, bits)\ UPDATE_CACHE(name, gb)\ \ nb_bits = -n;\ \ index= SHOW_UBITS(name, gb, nb_bits) + level;\ level = table[index].level;\ n = table[index].len;\ }\ run= table[index].run;\ SKIP_BITS(name, gb, n)\ } // deprecated, dont use get_vlc for new code, use get_vlc2 instead or use GET_VLC directly static inline int get_vlc(GetBitContext *s, VLC *vlc) { int code; VLC_TYPE (*table)[2]= vlc->table; OPEN_READER(re, s) UPDATE_CACHE(re, s) GET_VLC(code, re, s, table, vlc->bits, 3) CLOSE_READER(re, s) return code; } /** * parses a vlc code, faster then get_vlc() * @param bits is the number of bits which will be read at once, must be * identical to nb_bits in init_vlc() * @param max_depth is the number of times bits bits must be readed to completly * read the longest vlc code * = (max_vlc_length + bits - 1) / bits */ static always_inline int get_vlc2(GetBitContext *s, VLC_TYPE (*table)[2], int bits, int max_depth) { int code; OPEN_READER(re, s) UPDATE_CACHE(re, s) GET_VLC(code, re, s, table, bits, max_depth) CLOSE_READER(re, s) return code; } //#define TRACE #ifdef TRACE static inline void print_bin(int bits, int n){ int i; for(i=n-1; i>=0; i--){ printf("%d", (bits>>i)&1); } for(i=n; i<24; i++) printf(" "); } static inline int get_bits_trace(GetBitContext *s, int n, char *file, char *func, int line){ int r= get_bits(s, n); print_bin(r, n); printf("%5d %2d %3d bit @%5d in %s %s:%d\n", r, n, r, get_bits_count(s)-n, file, func, line); return r; } static inline int get_vlc_trace(GetBitContext *s, VLC_TYPE (*table)[2], int bits, int max_depth, char *file, char *func, int line){ int show= show_bits(s, 24); int pos= get_bits_count(s); int r= get_vlc2(s, table, bits, max_depth); int len= get_bits_count(s) - pos; int bits2= show>>(24-len); print_bin(bits2, len); printf("%5d %2d %3d vlc @%5d in %s %s:%d\n", bits2, len, r, pos, file, func, line); return r; } static inline int get_xbits_trace(GetBitContext *s, int n, char *file, char *func, int line){ int show= show_bits(s, n); int r= get_xbits(s, n); print_bin(show, n); printf("%5d %2d %3d xbt @%5d in %s %s:%d\n", show, n, r, get_bits_count(s)-n, file, func, line); return r; } #define get_bits(s, n) get_bits_trace(s, n, __FILE__, __PRETTY_FUNCTION__, __LINE__) #define get_bits1(s) get_bits_trace(s, 1, __FILE__, __PRETTY_FUNCTION__, __LINE__) #define get_xbits(s, n) get_xbits_trace(s, n, __FILE__, __PRETTY_FUNCTION__, __LINE__) #define get_vlc(s, vlc) get_vlc_trace(s, (vlc)->table, (vlc)->bits, 3, __FILE__, __PRETTY_FUNCTION__, __LINE__) #define get_vlc2(s, tab, bits, max) get_vlc_trace(s, tab, bits, max, __FILE__, __PRETTY_FUNCTION__, __LINE__) #define tprintf printf #else //TRACE #define tprintf(_arg...) {} #endif /* define it to include statistics code (useful only for optimizing codec efficiency */ //#define STATS #ifdef STATS enum { ST_UNKNOWN, ST_DC, ST_INTRA_AC, ST_INTER_AC, ST_INTRA_MB, ST_INTER_MB, ST_MV, ST_NB, }; extern int st_current_index; extern unsigned int st_bit_counts[ST_NB]; extern unsigned int st_out_bit_counts[ST_NB]; void print_stats(void); #endif /* misc math functions */ extern const uint8_t ff_log2_tab[256]; static inline int av_log2(unsigned int v) { int n; n = 0; if (v & 0xffff0000) { v >>= 16; n += 16; } if (v & 0xff00) { v >>= 8; n += 8; } n += ff_log2_tab[v]; return n; } static inline int av_log2_16bit(unsigned int v) { int n; n = 0; if (v & 0xff00) { v >>= 8; n += 8; } n += ff_log2_tab[v]; return n; } /* median of 3 */ static inline int mid_pred(int a, int b, int c) { #if 1 // 2.5 branches, 5 adds int vmin, vmax; vmax = vmin = a; if (b < vmin) vmin = b; else vmax = b; if (c < vmin) vmin = c; else if (c > vmax) vmax = c; return a + b + c - vmin - vmax; #else // 2.5 branches return a < b ? (b < c ? b : (a < c ? c : a)) : (c < b ? b : (c < a ? c : a)); #endif } static inline int clip(int a, int amin, int amax) { if (a < amin) return amin; else if (a > amax) return amax; else return a; } /* math */ extern const uint8_t ff_sqrt_tab[128]; int64_t ff_gcd(int64_t a, int64_t b); static inline int ff_sqrt(int a) { int ret=0; int s; int ret_sq=0; if(a<128) return ff_sqrt_tab[a]; for(s=15; s>=0; s--){ int b= ret_sq + (1<<(s*2)) + (ret<>31;\ level= (level^mask)-mask; #endif #if __CPU__ >= 686 && !defined(RUNTIME_CPUDETECT) #define COPY3_IF_LT(x,y,a,b,c,d)\ asm volatile (\ "cmpl %0, %3 \n\t"\ "cmovl %3, %0 \n\t"\ "cmovl %4, %1 \n\t"\ "cmovl %5, %2 \n\t"\ : "+r" (x), "+r" (a), "+r" (c)\ : "r" (y), "r" (b), "r" (d)\ ); #else #define COPY3_IF_LT(x,y,a,b,c,d)\ if((y)<(x)){\ (x)=(y);\ (a)=(b);\ (c)=(d);\ } #endif #ifdef ARCH_X86 static inline long long rdtsc() { long long l; asm volatile( "rdtsc\n\t" : "=A" (l) ); return l; } #define START_TIMER \ static uint64_t tsum=0;\ static int tcount=0;\ static int tskip_count=0;\ uint64_t tend;\ uint64_t tstart= rdtsc();\ #define STOP_TIMER(id) \ tend= rdtsc();\ if(tcount<2 || tend - tstart < 4*tsum/tcount){\ tsum+= tend - tstart;\ tcount++;\ }else\ tskip_count++;\ if(256*256*256*64%(tcount+tskip_count)==0){\ fprintf(stderr, "%Ld dezicycles in %s, %d runs, %d skips\n", tsum*10/tcount, id, tcount, tskip_count);\ } #endif #define CLAMP_TO_8BIT(d) ((d > 0xff) ? 0xff : (d < 0) ? 0 : d) /* avoid usage of various functions */ #define malloc please_use_av_malloc #define free please_use_av_free #define realloc please_use_av_realloc #define CHECKED_ALLOCZ(p, size)\ {\ p= av_mallocz(size);\ if(p==NULL && (size)!=0){\ perror("malloc");\ goto fail;\ }\ } #endif /* HAVE_AV_CONFIG_H */ #endif /* COMMON_H */ h323plus/plugins/video/H.263-ffmpeg/ffmpeg/avcodec.h0000644000175000017500000013372411341106277020675 0ustar markmark#ifndef AVCODEC_H #define AVCODEC_H /** * @file avcodec.h * external api header. */ #ifdef __cplusplus extern "C" { #endif #include "common.h" #define LIBAVCODEC_VERSION_INT 0x000406 #define LIBAVCODEC_VERSION "0.4.6" #define LIBAVCODEC_BUILD 4675 #define LIBAVCODEC_BUILD_STR "4675" #define LIBAVCODEC_IDENT "FFmpeg" LIBAVCODEC_VERSION "b" LIBAVCODEC_BUILD_STR enum CodecID { CODEC_ID_NONE, CODEC_ID_MPEG1VIDEO, CODEC_ID_MPEG2VIDEO_XVMC, CODEC_ID_H263, CODEC_ID_RV10, CODEC_ID_MP2, CODEC_ID_MP3LAME, CODEC_ID_VORBIS, CODEC_ID_AC3, CODEC_ID_MJPEG, CODEC_ID_MJPEGB, CODEC_ID_LJPEG, CODEC_ID_MPEG4, CODEC_ID_RAWVIDEO, CODEC_ID_MSMPEG4V1, CODEC_ID_MSMPEG4V2, CODEC_ID_MSMPEG4V3, CODEC_ID_WMV1, CODEC_ID_WMV2, CODEC_ID_H263P, CODEC_ID_H263I, CODEC_ID_FLV1, CODEC_ID_SVQ1, CODEC_ID_SVQ3, CODEC_ID_DVVIDEO, CODEC_ID_DVAUDIO, CODEC_ID_WMAV1, CODEC_ID_WMAV2, CODEC_ID_MACE3, CODEC_ID_MACE6, CODEC_ID_HUFFYUV, CODEC_ID_CYUV, CODEC_ID_H264, CODEC_ID_INDEO3, CODEC_ID_VP3, CODEC_ID_AAC, CODEC_ID_MPEG4AAC, CODEC_ID_ASV1, CODEC_ID_FFV1, CODEC_ID_4XM, CODEC_ID_VCR1, CODEC_ID_CLJR, CODEC_ID_MDEC, /* various pcm "codecs" */ CODEC_ID_PCM_S16LE, CODEC_ID_PCM_S16BE, CODEC_ID_PCM_U16LE, CODEC_ID_PCM_U16BE, CODEC_ID_PCM_S8, CODEC_ID_PCM_U8, CODEC_ID_PCM_MULAW, CODEC_ID_PCM_ALAW, /* various adpcm codecs */ CODEC_ID_ADPCM_IMA_QT, CODEC_ID_ADPCM_IMA_WAV, CODEC_ID_ADPCM_MS, CODEC_ID_ADPCM_4XM, /* AMR */ CODEC_ID_AMR_NB, /* RealAudio codecs*/ CODEC_ID_RA_144, CODEC_ID_RA_288, }; enum CodecType { CODEC_TYPE_UNKNOWN = -1, CODEC_TYPE_VIDEO, CODEC_TYPE_AUDIO, }; /** * Pixel format. */ enum PixelFormat { PIX_FMT_YUV420P, ///< Planar YUV 4:2:0 (1 Cr & Cb sample per 2x2 Y samples) PIX_FMT_YUV422, PIX_FMT_RGB24, ///< Packed pixel, 3 bytes per pixel, RGBRGB... PIX_FMT_BGR24, ///< Packed pixel, 3 bytes per pixel, BGRBGR... PIX_FMT_YUV422P, ///< Planar YUV 4:2:2 (1 Cr & Cb sample per 2x1 Y samples) PIX_FMT_YUV444P, ///< Planar YUV 4:4:4 (1 Cr & Cb sample per 1x1 Y samples) PIX_FMT_RGBA32, ///< Packed pixel, 4 bytes per pixel, BGRABGRA... PIX_FMT_YUV410P, ///< Planar YUV 4:1:0 (1 Cr & Cb sample per 4x4 Y samples) PIX_FMT_YUV411P, ///< Planar YUV 4:1:1 (1 Cr & Cb sample per 4x1 Y samples) PIX_FMT_RGB565, ///< always stored in cpu endianness PIX_FMT_RGB555, ///< always stored in cpu endianness, most significant bit to 1 PIX_FMT_GRAY8, PIX_FMT_MONOWHITE, ///< 0 is white PIX_FMT_MONOBLACK, ///< 0 is black PIX_FMT_PAL8, ///< 8 bit with RGBA palette PIX_FMT_YUVJ420P, ///< Planar YUV 4:2:0 full scale (jpeg) PIX_FMT_YUVJ422P, ///< Planar YUV 4:2:2 full scale (jpeg) PIX_FMT_YUVJ444P, ///< Planar YUV 4:4:4 full scale (jpeg) PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing(xvmc_render.h) PIX_FMT_XVMC_MPEG2_IDCT, PIX_FMT_NB, }; /* currently unused, may be used if 24/32 bits samples ever supported */ enum SampleFormat { SAMPLE_FMT_S16 = 0, ///< signed 16 bits }; /* in bytes */ #define AVCODEC_MAX_AUDIO_FRAME_SIZE 131072 /** * Required number of additionally allocated bytes at the end of the input bitstream for decoding. * this is mainly needed because some optimized bitstream readers read * 32 or 64 bit at once and could read over the end
* Note, if the first 23 bits of the additional bytes are not 0 then damaged * MPEG bitstreams could cause overread and segfault */ #define FF_INPUT_BUFFER_PADDING_SIZE 8 /* motion estimation type, EPZS by default */ enum Motion_Est_ID { ME_ZERO = 1, ME_FULL, ME_LOG, ME_PHODS, ME_EPZS, ME_X1 }; typedef struct RcOverride{ int start_frame; int end_frame; int qscale; // if this is 0 then quality_factor will be used instead float quality_factor; } RcOverride; /* only for ME compatiblity with old apps */ extern int motion_estimation_method; /* ME algos sorted by quality */ static const int Motion_Est_QTab[] = { ME_ZERO, ME_PHODS, ME_LOG, ME_X1, ME_EPZS, ME_FULL }; #define FF_MAX_B_FRAMES 8 /* encoding support these flags can be passed in AVCodecContext.flags before initing Note: not everything is supported yet */ #define CODEC_FLAG_QSCALE 0x0002 ///< use fixed qscale #define CODEC_FLAG_4MV 0x0004 ///< 4 MV per MB allowed #define CODEC_FLAG_QPEL 0x0010 ///< use qpel MC #define CODEC_FLAG_GMC 0x0020 ///< use GMC #define CODEC_FLAG_PART 0x0080 ///< use data partitioning #define CODEC_FLAG_INPUT_PRESERVED 0x0100 /** parent program guarantees that the input is not written to for at least s->max_b_frames+1 frames (if not set, input will be copied) **/ #define CODEC_FLAG_PASS1 0x0200 ///< use internal 2pass ratecontrol in first pass mode #define CODEC_FLAG_PASS2 0x0400 ///< use internal 2pass ratecontrol in second pass mode #define CODEC_FLAG_EXTERN_HUFF 0x1000 ///< use external huffman table (for mjpeg) #define CODEC_FLAG_GRAY 0x2000 ///< only decode/encode grayscale #define CODEC_FLAG_EMU_EDGE 0x4000 ///< don't draw edges #define CODEC_FLAG_PSNR 0x8000 ///< error[?] variables will be set during encoding #define CODEC_FLAG_TRUNCATED 0x00010000 /** input bitstream might be truncated at a random location instead of only at frame boundaries */ #define CODEC_FLAG_NORMALIZE_AQP 0x00020000 ///< normalize adaptive quantization #define CODEC_FLAG_INTERLACED_DCT 0x00040000 ///< use interlaced dct #define CODEC_FLAG_LOW_DELAY 0x00080000 ///< force low delay #define CODEC_FLAG_ALT_SCAN 0x00100000 ///< use alternate scan #define CODEC_FLAG_TRELLIS_QUANT 0x00200000 ///< use trellis quantization #define CODEC_FLAG_GLOBAL_HEADER 0x00400000 ///< place global headers in extradata instead of every keyframe #define CODEC_FLAG_BITEXACT 0x00800000 ///< use only bitexact stuff (except (i)dct) /* Fx : Flag for h263+ extra options */ #define CODEC_FLAG_H263P_AIC 0x01000000 ///< Advanced intra coding #define CODEC_FLAG_H263P_UMV 0x02000000 ///< Unlimited motion vector /* For advanced prediction mode, we reuse the 4MV flag */ /* Unsupported options : * Syntax Arithmetic coding (SAC) * Deblocking filter internal loop * Slice structured * Reference Picture Selection * Independant Segment Decoding * Alternative Inter * VLC * Modified Quantization */ /* /Fx */ #define CODEC_FLAG_RFC2190 0x04000000 ///< use additional RFC2190 headers #define CODEC_FLAG_RFC2429 0x08000000 ///< use additional RFC2429 headers /* codec capabilities */ #define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< decoder can use draw_horiz_band callback /** * Codec uses get_buffer() for allocating buffers. * direct rendering method 1 */ #define CODEC_CAP_DR1 0x0002 /* if 'parse_only' field is true, then avcodec_parse_frame() can be used */ #define CODEC_CAP_PARSE_ONLY 0x0004 #define CODEC_CAP_TRUNCATED 0x0008 #define FF_COMMON_FRAME \ /**\ * pointer to the picture planes.\ * this might be different from the first allocated byte\ * - encoding: \ * - decoding: \ */\ uint8_t *data[4];\ int linesize[4];\ /**\ * pointer to the first allocated byte of the picture. can be used in get_buffer/release_buffer\ * this isn't used by lavc unless the default get/release_buffer() is used\ * - encoding: \ * - decoding: \ */\ uint8_t *base[4];\ /**\ * 1 -> keyframe, 0-> not\ * - encoding: set by lavc\ * - decoding: set by lavc\ */\ int key_frame;\ \ /**\ * picture type of the frame, see ?_TYPE below.\ * - encoding: set by lavc for coded_picture (and set by user for input)\ * - decoding: set by lavc\ */\ int pict_type;\ \ /**\ * presentation timestamp in micro seconds (time when frame should be shown to user)\ * if 0 then the frame_rate will be used as reference\ * - encoding: MUST be set by user\ * - decoding: set by lavc\ */\ int64_t pts;\ \ /**\ * picture number in bitstream order.\ * - encoding: set by\ * - decoding: set by lavc\ */\ int coded_picture_number;\ /**\ * picture number in display order.\ * - encoding: set by\ * - decoding: set by lavc\ */\ int display_picture_number;\ \ /**\ * quality (between 1 (good) and 31 (bad)) \ * - encoding: set by lavc for coded_picture (and set by user for input)\ * - decoding: set by lavc\ */\ float quality; \ \ /**\ * buffer age (1->was last buffer and dint change, 2->..., ...).\ * set to something large if the buffer has not been used yet \ * - encoding: unused\ * - decoding: MUST be set by get_buffer()\ */\ int age;\ \ /**\ * is this picture used as reference\ * - encoding: unused\ * - decoding: set by lavc (before get_buffer() call))\ */\ int reference;\ \ /**\ * QP table\ * - encoding: unused\ * - decoding: set by lavc\ */\ int8_t *qscale_table;\ /**\ * QP store stride\ * - encoding: unused\ * - decoding: set by lavc\ */\ int qstride;\ \ /**\ * mbskip_table[mb]>=1 if MB didnt change\ * stride= mb_width = (width+15)>>4\ * - encoding: unused\ * - decoding: set by lavc\ */\ uint8_t *mbskip_table;\ \ /**\ * for some private data of the user\ * - encoding: unused\ * - decoding: set by user\ */\ void *opaque;\ \ /**\ * error\ * - encoding: set by lavc if flags&CODEC_FLAG_PSNR\ * - decoding: unused\ */\ uint64_t error[4];\ \ /**\ * type of the buffer (to keep track of who has to dealloc data[*])\ * - encoding: set by the one who allocs it\ * - decoding: set by the one who allocs it\ * Note: user allocated (direct rendering) & internal buffers can not coexist currently\ */\ int type;\ \ /**\ * when decoding, this signal how much the picture must be delayed.\ * extra_delay = repeat_pict / (2*fps)\ * - encoding: unused\ * - decoding: set by lavc\ */\ int repeat_pict;\ \ /**\ * \ */\ int qscale_type;\ #define FF_QSCALE_TYPE_MPEG1 0 #define FF_QSCALE_TYPE_MPEG2 1 #define FF_BUFFER_TYPE_INTERNAL 1 #define FF_BUFFER_TYPE_USER 2 ///< Direct rendering buffers #define FF_BUFFER_TYPE_SHARED 4 ///< buffer from somewher else, don't dealloc #define FF_I_TYPE 1 // Intra #define FF_P_TYPE 2 // Predicted #define FF_B_TYPE 3 // Bi-dir predicted #define FF_S_TYPE 4 // S(GMC)-VOP MPEG4 #define FF_SI_TYPE 5 #define FF_SP_TYPE 6 /** * Audio Video Frame. */ typedef struct AVFrame { FF_COMMON_FRAME } AVFrame; #define DEFAULT_FRAME_RATE_BASE 1001000 /** * main external api structure. */ typedef struct AVCodecContext { /** * the average bitrate. * - encoding: set by user. unused for constant quantizer encoding * - decoding: set by lavc. 0 or some bitrate if this info is available in the stream */ int bit_rate; /** * number of bits the bitstream is allowed to diverge from the reference. * the reference can be CBR (for CBR pass1) or VBR (for pass2) * - encoding: set by user. unused for constant quantizer encoding * - decoding: unused */ int bit_rate_tolerance; /** * CODEC_FLAG_*. * - encoding: set by user. * - decoding: set by user. */ int flags; /** * some codecs needs additionnal format info. It is stored here * - encoding: set by user. * - decoding: set by lavc. (FIXME is this ok?) */ int sub_id; /** * motion estimation algorithm used for video coding. * - encoding: MUST be set by user. * - decoding: unused */ int me_method; /** * some codecs need / can use extra-data like huffman tables. * mjpeg: huffman tables * rv10: additional flags * mpeg4: global headers (they can be in the bitstream or here) * - encoding: set/allocated/freed by lavc. * - decoding: set/allocated/freed by user. */ void *extradata; int extradata_size; /* video only */ /** * frames per sec multiplied by frame_rate_base. * for variable fps this is the precision, so if the timestamps * can be specified in msec precision then this is 1000*frame_rate_base * - encoding: MUST be set by user * - decoding: set by lavc. 0 or the frame_rate if available */ int frame_rate; /** * width / height. * - encoding: MUST be set by user. * - decoding: set by user, some codecs might override / change it during playback */ int width, height; #define FF_ASPECT_SQUARE 1 #define FF_ASPECT_4_3_625 2 #define FF_ASPECT_4_3_525 3 #define FF_ASPECT_16_9_625 4 #define FF_ASPECT_16_9_525 5 #define FF_ASPECT_EXTENDED 15 /** * the number of pictures in a group of pitures, or 0 for intra_only. * - encoding: set by user. * - decoding: unused */ int gop_size; /** * pixel format, see PIX_FMT_xxx. * - encoding: FIXME: used by ffmpeg to decide whether an pix_fmt * conversion is in order. This only works for * codecs with one supported pix_fmt, we should * do something for a generic case as well. * - decoding: set by lavc. */ enum PixelFormat pix_fmt; /** * Frame rate emulation. If not zero lower layer (i.e. format handler) * has to read frames at native frame rate. * - encoding: set by user. * - decoding: unused. */ int rate_emu; /** * if non NULL, 'draw_horiz_band' is called by the libavcodec * decoder to draw an horizontal band. It improve cache usage. Not * all codecs can do that. You must check the codec capabilities * before * - encoding: unused * - decoding: set by user. * @param height the height of the slice * @param y the y position of the slice * @param type 1->top field, 2->bottom field, 3->frame * @param offset offset into the AVFrame.data from which the slice should be read */ void (*draw_horiz_band)(struct AVCodecContext *s, AVFrame *src, int offset[4], int y, int type, int height); /* audio only */ int sample_rate; ///< samples per sec int channels; int sample_fmt; ///< sample format, currenly unused /* the following data should not be initialized */ int frame_size; ///< in samples, initialized when calling 'init' int frame_number; ///< audio or video frame number int real_pict_num; ///< returns the real picture number of previous encoded frame /** * number of frames the decoded output will be delayed relative to * the encoded input. * - encoding: set by lavc. * - decoding: unused */ int delay; /* - encoding parameters */ float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0) float qblur; ///< amount of qscale smoothing over time (0.0-1.0) /** * minimum quantizer. * - encoding: set by user. * - decoding: unused */ int qmin; /** * maximum quantizer. * - encoding: set by user. * - decoding: unused */ int qmax; /** * maximum quantizer difference etween frames. * - encoding: set by user. * - decoding: unused */ int max_qdiff; /** * maximum number of b frames between non b frames. * note: the output will be delayed by max_b_frames+1 relative to the input * - encoding: set by user. * - decoding: unused */ int max_b_frames; /** * qscale factor between ip and b frames. * - encoding: set by user. * - decoding: unused */ float b_quant_factor; /** obsolete FIXME remove */ int rc_strategy; int b_frame_strategy; /** * hurry up amount. * - encoding: unused * - decoding: set by user. 1-> skip b frames, 2-> skip idct/dequant too, 5-> skip everything except header */ int hurry_up; struct AVCodec *codec; void *priv_data; /* The following data is for RTP friendly coding */ /* By now only H.263/H.263+/MPEG4 coder honours this */ int rtp_mode; /* 1 for activate RTP friendly-mode */ /* highers numbers represent more error-prone */ /* enviroments, by now just "1" exist */ int rtp_payload_size; /* The size of the RTP payload: the coder will */ /* do it's best to deliver a chunk with size */ /* below rtp_payload_size, the chunk will start */ /* with a start code on some codecs like H.263 */ /* This doesn't take account of any particular */ /* headers inside the transmited RTP payload */ /* The RTP callback: this function is called */ /* every time the encoder has a packet to send. */ /* Some RTP payload formats, as H.263's RFC2190, */ /* require that a payload header be inserted */ /* before the actual bitstream (hdr_size>0). */ void (*rtp_callback)(void *data, int data_size, void *hdr, int hdr_size, void *priv_data); /* statistics, used for 2-pass encoding */ int mv_bits; int header_bits; int i_tex_bits; int p_tex_bits; int i_count; int p_count; int skip_count; int misc_bits; /** * number of bits used for the previously encoded frame. * - encoding: set by lavc * - decoding: unused */ int frame_bits; /** * private data of the user, can be used to carry app specific stuff. * - encoding: set by user * - decoding: set by user */ void *opaque; char codec_name[32]; enum CodecType codec_type; /* see CODEC_TYPE_xxx */ enum CodecID codec_id; /* see CODEC_ID_xxx */ /** * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). * this is used to workaround some encoder bugs * - encoding: set by user, if not then the default based on codec_id will be used * - decoding: set by user, will be converted to upper case by lavc during init */ unsigned int codec_tag; /** * workaround bugs in encoders which sometimes cannot be detected automatically. * - encoding: unused * - decoding: set by user */ int workaround_bugs; #define FF_BUG_AUTODETECT 1 ///< autodetection #define FF_BUG_OLD_MSMPEG4 2 #define FF_BUG_XVID_ILACE 4 #define FF_BUG_UMP4 8 #define FF_BUG_NO_PADDING 16 #define FF_BUG_AC_VLC 32 #define FF_BUG_QPEL_CHROMA 64 #define FF_BUG_STD_QPEL 128 #define FF_BUG_QPEL_CHROMA2 256 #define FF_BUG_DIRECT_BLOCKSIZE 512 #define FF_BUG_EDGE 1024 //#define FF_BUG_FAKE_SCALABILITY 16 //autodetection should work 100% /** * luma single coeff elimination threshold. * - encoding: set by user * - decoding: unused */ int luma_elim_threshold; /** * chroma single coeff elimination threshold. * - encoding: set by user * - decoding: unused */ int chroma_elim_threshold; /** * strictly follow the std (MPEG4, ...). * - encoding: set by user * - decoding: unused */ int strict_std_compliance; /** * qscale offset between ip and b frames. * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset) * if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset) * - encoding: set by user. * - decoding: unused */ float b_quant_offset; /** * error resilience higher values will detect more errors but may missdetect * some more or less valid parts as errors. * - encoding: unused * - decoding: set by user */ int error_resilience; #define FF_ER_CAREFULL 1 #define FF_ER_COMPLIANT 2 #define FF_ER_AGGRESSIVE 3 #define FF_ER_VERY_AGGRESSIVE 4 /** * called at the beginning of each frame to get a buffer for it. * if pic.reference is set then the frame will be read later by lavc * width and height should be rounded up to the next multiple of 16 * - encoding: unused * - decoding: set by lavc, user can override */ int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic); /** * called to release buffers which where allocated with get_buffer. * a released buffer can be reused in get_buffer() * pic.data[*] must be set to NULL * - encoding: unused * - decoding: set by lavc, user can override */ void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic); /** * is 1 if the decoded stream contains b frames, 0 otherwise. * - encoding: unused * - decoding: set by lavc */ int has_b_frames; int block_align; ///< used by some WAV based audio codecs int parse_only; /* - decoding only: if true, only parsing is done (function avcodec_parse_frame()). The frame data is returned. Only MPEG codecs support this now. */ /** * 0-> h263 quant 1-> mpeg quant. * - encoding: set by user. * - decoding: unused */ int mpeg_quant; /** * pass1 encoding statistics output buffer. * - encoding: set by lavc * - decoding: unused */ char *stats_out; /** * pass2 encoding statistics input buffer. * concatenated stuff from stats_out of pass1 should be placed here * - encoding: allocated/set/freed by user * - decoding: unused */ char *stats_in; /** * ratecontrol qmin qmax limiting method. * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax * - encoding: set by user. * - decoding: unused */ float rc_qsquish; float rc_qmod_amp; int rc_qmod_freq; /** * ratecontrol override, see RcOverride. * - encoding: allocated/set/freed by user. * - decoding: unused */ RcOverride *rc_override; int rc_override_count; /** * rate control equation. * - encoding: set by user * - decoding: unused */ char *rc_eq; /** * maximum bitrate. * - encoding: set by user. * - decoding: unused */ int rc_max_rate; /** * minimum bitrate. * - encoding: set by user. * - decoding: unused */ int rc_min_rate; /** * decoder bitstream buffer size. * - encoding: set by user. * - decoding: unused */ int rc_buffer_size; float rc_buffer_aggressivity; /** * qscale factor between p and i frames. * - encoding: set by user. * - decoding: unused */ float i_quant_factor; /** * qscale offset between p and i frames. * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset) * if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset) * - encoding: set by user. * - decoding: unused */ float i_quant_offset; /** * initial complexity for pass1 ratecontrol. * - encoding: set by user. * - decoding: unused */ float rc_initial_cplx; /** * dct algorithm, see FF_DCT_* below. * - encoding: set by user * - decoding: unused */ int dct_algo; #define FF_DCT_AUTO 0 #define FF_DCT_FASTINT 1 #define FF_DCT_INT 2 #define FF_DCT_MMX 3 #define FF_DCT_MLIB 4 #define FF_DCT_ALTIVEC 5 /** * luminance masking (0-> disabled). * - encoding: set by user * - decoding: unused */ float lumi_masking; /** * temporary complexity masking (0-> disabled). * - encoding: set by user * - decoding: unused */ float temporal_cplx_masking; /** * spatial complexity masking (0-> disabled). * - encoding: set by user * - decoding: unused */ float spatial_cplx_masking; /** * p block masking (0-> disabled). * - encoding: set by user * - decoding: unused */ float p_masking; /** * darkness masking (0-> disabled). * - encoding: set by user * - decoding: unused */ float dark_masking; /* for binary compatibility */ int unused; /** * idct algorithm, see FF_IDCT_* below. * - encoding: set by user * - decoding: set by user */ int idct_algo; #define FF_IDCT_AUTO 0 #define FF_IDCT_INT 1 #define FF_IDCT_SIMPLE 2 #define FF_IDCT_SIMPLEMMX 3 #define FF_IDCT_LIBMPEG2MMX 4 #define FF_IDCT_PS2 5 #define FF_IDCT_MLIB 6 #define FF_IDCT_ARM 7 #define FF_IDCT_ALTIVEC 8 #define FF_IDCT_SH4 9 #define FF_IDCT_SIMPLEARM 10 /** * slice count. * - encoding: set by lavc * - decoding: set by user (or 0) */ int slice_count; /** * slice offsets in the frame in bytes. * - encoding: set/allocated by lavc * - decoding: set/allocated by user (or NULL) */ int *slice_offset; /** * error concealment flags. * - encoding: unused * - decoding: set by user */ int error_concealment; #define FF_EC_GUESS_MVS 1 #define FF_EC_DEBLOCK 2 /** * dsp_mask could be add used to disable unwanted CPU features * CPU features (i.e. MMX, SSE. ...) * * with FORCE flag you may instead enable given CPU features * (Dangerous: usable in case of misdetection, improper usage however will * result into program crash) */ unsigned dsp_mask; #define FF_MM_FORCE 0x80000000 /* force usage of selected flags (OR) */ /* lower 16 bits - CPU features */ #ifdef HAVE_MMX #define FF_MM_MMX 0x0001 /* standard MMX */ #define FF_MM_3DNOW 0x0004 /* AMD 3DNOW */ #define FF_MM_MMXEXT 0x0002 /* SSE integer functions or AMD MMX ext */ #define FF_MM_SSE 0x0008 /* SSE functions */ #define FF_MM_SSE2 0x0010 /* PIV SSE2 functions */ #endif /* HAVE_MMX */ /** * bits per sample/pixel from the demuxer (needed for huffyuv). * - encoding: set by lavc * - decoding: set by user */ int bits_per_sample; /** * prediction method (needed for huffyuv). * - encoding: set by user * - decoding: unused */ int prediction_method; #define FF_PRED_LEFT 0 #define FF_PRED_PLANE 1 #define FF_PRED_MEDIAN 2 /** * aspect ratio (0 if unknown). * - encoding: set by user. * - decoding: set by lavc. */ float aspect_ratio; /** * the picture in the bitstream. * - encoding: set by lavc * - decoding: set by lavc */ AVFrame *coded_frame; /** * debug. * - encoding: set by user. * - decoding: set by user. */ int debug; #define FF_DEBUG_PICT_INFO 1 #define FF_DEBUG_RC 2 #define FF_DEBUG_BITSTREAM 4 #define FF_DEBUG_MB_TYPE 8 #define FF_DEBUG_QP 16 #define FF_DEBUG_MV 32 #define FF_DEBUG_VIS_MV 0x00000040 #define FF_DEBUG_SKIP 0x00000080 #define FF_DEBUG_STARTCODE 0x00000100 #define FF_DEBUG_PTS 0x00000200 #define FF_DEBUG_ER 0x00000400 #define FF_DEBUG_MMCO 0x00000800 /** * error. * - encoding: set by lavc if flags&CODEC_FLAG_PSNR * - decoding: unused */ uint64_t error[4]; /** * minimum MB quantizer. * - encoding: set by user. * - decoding: unused */ int mb_qmin; /** * maximum MB quantizer. * - encoding: set by user. * - decoding: unused */ int mb_qmax; /** * motion estimation compare function. * - encoding: set by user. * - decoding: unused */ int me_cmp; /** * subpixel motion estimation compare function. * - encoding: set by user. * - decoding: unused */ int me_sub_cmp; /** * macroblock compare function (not supported yet). * - encoding: set by user. * - decoding: unused */ int mb_cmp; #define FF_CMP_SAD 0 #define FF_CMP_SSE 1 #define FF_CMP_SATD 2 #define FF_CMP_DCT 3 #define FF_CMP_PSNR 4 #define FF_CMP_BIT 5 #define FF_CMP_RD 6 #define FF_CMP_ZERO 7 #define FF_CMP_CHROMA 256 /** * ME diamond size & shape. * - encoding: set by user. * - decoding: unused */ int dia_size; /** * amount of previous MV predictors (2a+1 x 2a+1 square). * - encoding: set by user. * - decoding: unused */ int last_predictor_count; /** * pre pass for motion estimation. * - encoding: set by user. * - decoding: unused */ int pre_me; /** * motion estimation pre pass compare function. * - encoding: set by user. * - decoding: unused */ int me_pre_cmp; /** * ME pre pass diamond size & shape. * - encoding: set by user. * - decoding: unused */ int pre_dia_size; /** * subpel ME quality. * - encoding: set by user. * - decoding: unused */ int me_subpel_quality; /** * callback to negotiate the pixelFormat. * @param fmt is the list of formats which are supported by the codec, * its terminated by -1 as 0 is a valid format, the formats are ordered by quality * the first is allways the native one * @return the choosen format * - encoding: unused * - decoding: set by user, if not set then the native format will always be choosen */ enum PixelFormat (*get_format)(struct AVCodecContext *s, enum PixelFormat * fmt); /** * DTG active format information (additionnal aspect ratio * information only used in DVB MPEG2 transport streams). 0 if * not set. * * - encoding: unused. * - decoding: set by decoder */ int dtg_active_format; #define FF_DTG_AFD_SAME 8 #define FF_DTG_AFD_4_3 9 #define FF_DTG_AFD_16_9 10 #define FF_DTG_AFD_14_9 11 #define FF_DTG_AFD_4_3_SP_14_9 13 #define FF_DTG_AFD_16_9_SP_14_9 14 #define FF_DTG_AFD_SP_4_3 15 /** * Maximum motion estimation search range in subpel units. * if 0 then no limit * * - encoding: set by user. * - decoding: unused. */ int me_range; /** * frame_rate_base. * for variable fps this is 1 * - encoding: set by user. * - decoding: set by lavc. * @todo move this after frame_rate */ int frame_rate_base; /** * intra quantizer bias. * - encoding: set by user. * - decoding: unused */ int intra_quant_bias; #define FF_DEFAULT_QUANT_BIAS 999999 /** * inter quantizer bias. * - encoding: set by user. * - decoding: unused */ int inter_quant_bias; /** * color table ID. * - encoding: unused. * - decoding: which clrtable should be used for 8bit RGB images * table have to be stored somewhere FIXME */ int color_table_id; /** * internal_buffer count. * Don't touch, used by lavc default_get_buffer() */ int internal_buffer_count; /** * internal_buffers. * Don't touch, used by lavc default_get_buffer() */ void *internal_buffer; #define FF_QUALITY_SCALE 256 /** * global quality for codecs which cannot change it per frame. * this should be proportional to MPEG1/2/4 qscale. * - encoding: set by user. * - decoding: unused */ int global_quality; #define FF_CODER_TYPE_VLC 0 #define FF_CODER_TYPE_AC 1 /** * coder type * - encoding: set by user. * - decoding: unused */ int coder_type; /** * context model * - encoding: set by user. * - decoding: unused */ int context_model; /** * slice flags * - encoding: unused * - decoding: set by user. */ int slice_flags; #define SLICE_FLAG_CODED_ORDER 0x0001 ///< draw_horiz_band() is called in coded order instead of display #define SLICE_FLAG_ALLOW_FIELD 0x0002 ///< allow draw_horiz_band() with field slices (MPEG2 field pics) #define SLICE_FLAG_ALLOW_PLANE 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1) /** * XVideo Motion Acceleration * - encoding: forbidden * - decoding: set by decoder */ int xvmc_acceleration; /** * macroblock decision mode * - encoding: set by user. * - decoding: unused */ int mb_decision; #define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp #define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits #define FF_MB_DECISION_RD 2 ///< rate distoration /** * custom intra quantization matrix * - encoding: set by user, can be NULL * - decoding: set by lavc */ uint16_t *intra_matrix; /** * custom inter quantization matrix * - encoding: set by user, can be NULL * - decoding: set by lavc */ uint16_t *inter_matrix; } AVCodecContext; /** * AVOption. */ typedef struct AVOption { /** options' name */ const char *name; /* if name is NULL, it indicates a link to next */ /** short English text help or const struct AVOption* subpointer */ const char *help; // const struct AVOption* sub; /** offset to context structure where the parsed value should be stored */ int offset; /** options' type */ int type; #define FF_OPT_TYPE_BOOL 1 ///< boolean - true,1,on (or simply presence) #define FF_OPT_TYPE_DOUBLE 2 ///< double #define FF_OPT_TYPE_INT 3 ///< integer #define FF_OPT_TYPE_STRING 4 ///< string (finished with \0) #define FF_OPT_TYPE_MASK 0x1f ///< mask for types - upper bits are various flags //#define FF_OPT_TYPE_EXPERT 0x20 // flag for expert option #define FF_OPT_TYPE_FLAG (FF_OPT_TYPE_BOOL | 0x40) #define FF_OPT_TYPE_RCOVERRIDE (FF_OPT_TYPE_STRING | 0x80) /** min value (min == max -> no limits) */ double min; /** maximum value for double/int */ double max; /** default boo [0,1]l/double/int value */ double defval; /** * default string value (with optional semicolon delimited extra option-list * i.e. option1;option2;option3 * defval might select other then first argument as default */ const char *defstr; #define FF_OPT_MAX_DEPTH 10 } AVOption; /** * Parse option(s) and sets fields in passed structure * @param strct structure where the parsed results will be written * @param list list with AVOptions * @param opts string with options for parsing */ int avoption_parse(void* strct, const AVOption* list, const char* opts); /** * AVCodec. */ typedef struct AVCodec { const char *name; enum CodecType type; int id; int priv_data_size; int (*init)(AVCodecContext *); int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data); int (*close)(AVCodecContext *); int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, uint8_t *buf, int buf_size); int capabilities; const AVOption *options; struct AVCodec *next; void (*flush)(AVCodecContext *); } AVCodec; /** * four components are given, that's all. * the last component is alpha */ typedef struct AVPicture { uint8_t *data[4]; int linesize[4]; ///< number of bytes per line } AVPicture; extern AVCodec ac3_encoder; extern AVCodec mp2_encoder; extern AVCodec mp3lame_encoder; extern AVCodec oggvorbis_encoder; extern AVCodec mpeg1video_encoder; extern AVCodec h263_encoder; extern AVCodec h263p_encoder; extern AVCodec flv_encoder; extern AVCodec rv10_encoder; extern AVCodec mjpeg_encoder; extern AVCodec ljpeg_encoder; extern AVCodec mpeg4_encoder; extern AVCodec msmpeg4v1_encoder; extern AVCodec msmpeg4v2_encoder; extern AVCodec msmpeg4v3_encoder; extern AVCodec wmv1_encoder; extern AVCodec wmv2_encoder; extern AVCodec huffyuv_encoder; extern AVCodec h264_encoder; extern AVCodec asv1_encoder; extern AVCodec vcr1_encoder; extern AVCodec ffv1_encoder; extern AVCodec mdec_encoder; extern AVCodec h263_decoder; extern AVCodec mpeg4_decoder; extern AVCodec msmpeg4v1_decoder; extern AVCodec msmpeg4v2_decoder; extern AVCodec msmpeg4v3_decoder; extern AVCodec wmv1_decoder; extern AVCodec wmv2_decoder; extern AVCodec mpeg_decoder; extern AVCodec mpeg_xvmc_decoder; extern AVCodec h263i_decoder; extern AVCodec flv_decoder; extern AVCodec rv10_decoder; extern AVCodec svq1_decoder; extern AVCodec svq3_decoder; extern AVCodec dvvideo_decoder; extern AVCodec dvaudio_decoder; extern AVCodec wmav1_decoder; extern AVCodec wmav2_decoder; extern AVCodec mjpeg_decoder; extern AVCodec mjpegb_decoder; extern AVCodec mp2_decoder; extern AVCodec mp3_decoder; extern AVCodec mace3_decoder; extern AVCodec mace6_decoder; extern AVCodec huffyuv_decoder; extern AVCodec oggvorbis_decoder; extern AVCodec cyuv_decoder; extern AVCodec h264_decoder; extern AVCodec indeo3_decoder; extern AVCodec vp3_decoder; extern AVCodec amr_nb_decoder; extern AVCodec amr_nb_encoder; extern AVCodec aac_decoder; extern AVCodec mpeg4aac_decoder; extern AVCodec asv1_decoder; extern AVCodec vcr1_decoder; extern AVCodec cljr_decoder; extern AVCodec ffv1_decoder; extern AVCodec fourxm_decoder; extern AVCodec mdec_decoder; extern AVCodec ra_144_decoder; extern AVCodec ra_288_decoder; /* pcm codecs */ #define PCM_CODEC(id, name) \ extern AVCodec name ## _decoder; \ extern AVCodec name ## _encoder PCM_CODEC(CODEC_ID_PCM_S16LE, pcm_s16le); PCM_CODEC(CODEC_ID_PCM_S16BE, pcm_s16be); PCM_CODEC(CODEC_ID_PCM_U16LE, pcm_u16le); PCM_CODEC(CODEC_ID_PCM_U16BE, pcm_u16be); PCM_CODEC(CODEC_ID_PCM_S8, pcm_s8); PCM_CODEC(CODEC_ID_PCM_U8, pcm_u8); PCM_CODEC(CODEC_ID_PCM_ALAW, pcm_alaw); PCM_CODEC(CODEC_ID_PCM_MULAW, pcm_mulaw); /* adpcm codecs */ PCM_CODEC(CODEC_ID_ADPCM_IMA_QT, adpcm_ima_qt); PCM_CODEC(CODEC_ID_ADPCM_IMA_WAV, adpcm_ima_wav); PCM_CODEC(CODEC_ID_ADPCM_MS, adpcm_ms); PCM_CODEC(CODEC_ID_ADPCM_4XM, adpcm_4xm); #undef PCM_CODEC /* dummy raw video codec */ extern AVCodec rawvideo_encoder; extern AVCodec rawvideo_decoder; /* the following codecs use external GPL libs */ extern AVCodec ac3_decoder; /* resample.c */ struct ReSampleContext; typedef struct ReSampleContext ReSampleContext; ReSampleContext *audio_resample_init(int output_channels, int input_channels, int output_rate, int input_rate); int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples); void audio_resample_close(ReSampleContext *s); /* YUV420 format is assumed ! */ struct ImgReSampleContext; typedef struct ImgReSampleContext ImgReSampleContext; ImgReSampleContext *img_resample_init(int output_width, int output_height, int input_width, int input_height); ImgReSampleContext *img_resample_full_init(int owidth, int oheight, int iwidth, int iheight, int topBand, int bottomBand, int leftBand, int rightBand); void img_resample(ImgReSampleContext *s, AVPicture *output, AVPicture *input); void img_resample_close(ImgReSampleContext *s); int avpicture_fill(AVPicture *picture, uint8_t *ptr, int pix_fmt, int width, int height); int avpicture_layout(AVPicture* src, int pix_fmt, int width, int height, unsigned char *dest, int dest_size); int avpicture_get_size(int pix_fmt, int width, int height); void avcodec_get_chroma_sub_sample(int pix_fmt, int *h_shift, int *v_shift); const char *avcodec_get_pix_fmt_name(int pix_fmt); enum PixelFormat avcodec_get_pix_fmt(const char* name); #define FF_LOSS_RESOLUTION 0x0001 /* loss due to resolution change */ #define FF_LOSS_DEPTH 0x0002 /* loss due to color depth change */ #define FF_LOSS_COLORSPACE 0x0004 /* loss due to color space conversion */ #define FF_LOSS_ALPHA 0x0008 /* loss of alpha bits */ #define FF_LOSS_COLORQUANT 0x0010 /* loss due to color quantization */ #define FF_LOSS_CHROMA 0x0020 /* loss of chroma (e.g. rgb to gray conversion) */ int avcodec_get_pix_fmt_loss(int dst_pix_fmt, int src_pix_fmt, int has_alpha); int avcodec_find_best_pix_fmt(int pix_fmt_mask, int src_pix_fmt, int has_alpha, int *loss_ptr); #define FF_ALPHA_TRANSP 0x0001 /* image has some totally transparent pixels */ #define FF_ALPHA_SEMI_TRANSP 0x0002 /* image has some transparent pixels */ int img_get_alpha_info(AVPicture *src, int pix_fmt, int width, int height); /* convert among pixel formats */ int img_convert(AVPicture *dst, int dst_pix_fmt, AVPicture *src, int pix_fmt, int width, int height); /* deinterlace a picture */ int avpicture_deinterlace(AVPicture *dst, AVPicture *src, int pix_fmt, int width, int height); /* external high level API */ extern AVCodec *first_avcodec; /* returns LIBAVCODEC_VERSION_INT constant */ unsigned avcodec_version(void); /* returns LIBAVCODEC_BUILD constant */ unsigned avcodec_build(void); void avcodec_init(void); void register_avcodec(AVCodec *format); AVCodec *avcodec_find_encoder(enum CodecID id); AVCodec *avcodec_find_encoder_by_name(const char *name); AVCodec *avcodec_find_decoder(enum CodecID id); AVCodec *avcodec_find_decoder_by_name(const char *name); void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode); void avcodec_get_context_defaults(AVCodecContext *s); AVCodecContext *avcodec_alloc_context(void); AVFrame *avcodec_alloc_frame(void); int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic); void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic); void avcodec_default_free_buffers(AVCodecContext *s); /** * opens / inits the AVCodecContext. * not thread save! */ int avcodec_open(AVCodecContext *avctx, AVCodec *codec); int avcodec_decode_audio(AVCodecContext *avctx, int16_t *samples, int *frame_size_ptr, uint8_t *buf, int buf_size); int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr, uint8_t *buf, int buf_size); int avcodec_parse_frame(AVCodecContext *avctx, uint8_t **pdata, int *data_size_ptr, uint8_t *buf, int buf_size); int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size, const short *samples); int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size, const AVFrame *pict); int avcodec_close(AVCodecContext *avctx); void avcodec_register_all(void); void avcodec_flush_buffers(AVCodecContext *avctx); /* misc usefull functions */ /** * returns a single letter to describe the picture type */ char av_get_pict_type_char(int pict_type); /** * reduce a fraction. * this is usefull for framerate calculations * @param max the maximum allowed for dst_nom & dst_den * @return 1 if exact, 0 otherwise */ int av_reduce(int *dst_nom, int *dst_den, int64_t nom, int64_t den, int64_t max); /** * rescale a 64bit integer. * a simple a*b/c isnt possible as it can overflow */ int64_t av_rescale(int64_t a, int b, int c); /** * Interface for 0.5.0 version * * do not even think about it's usage for this moment */ typedef struct { /// compressed size used from given memory buffer int size; /// I/P/B frame type int frame_type; } avc_enc_result_t; /** * Commands * order can't be changed - once it was defined */ typedef enum { // general commands AVC_OPEN_BY_NAME = 0xACA000, AVC_OPEN_BY_CODEC_ID, AVC_OPEN_BY_FOURCC, AVC_CLOSE, AVC_FLUSH, // pin - struct { uint8_t* src, uint_t src_size } // pout - struct { AVPicture* img, consumed_bytes, AVC_DECODE, // pin - struct { AVPicture* img, uint8_t* dest, uint_t dest_size } // pout - uint_t used_from_dest_size AVC_ENCODE, // query/get video commands AVC_GET_VERSION = 0xACB000, AVC_GET_WIDTH, AVC_GET_HEIGHT, AVC_GET_DELAY, AVC_GET_QUANT_TABLE, // ... // query/get audio commands AVC_GET_FRAME_SIZE = 0xABC000, // maybe define some simple structure which // might be passed to the user - but they can't // contain any codec specific parts and these // calls are usualy necessary only few times // set video commands AVC_SET_WIDTH = 0xACD000, AVC_SET_HEIGHT, // set video encoding commands AVC_SET_FRAME_RATE = 0xACD800, AVC_SET_QUALITY, AVC_SET_HURRY_UP, // set audio commands AVC_SET_SAMPLE_RATE = 0xACE000, AVC_SET_CHANNELS, } avc_cmd_t; /** * \param handle allocated private structure by libavcodec * for initialization pass NULL - will be returned pout * user is supposed to know nothing about its structure * \param cmd type of operation to be performed * \param pint input parameter * \param pout output parameter * * \returns command status - eventually for query command it might return * integer resulting value */ int avcodec(void* handle, avc_cmd_t cmd, void* pin, void* pout); /* memory */ void *av_malloc(unsigned int size); void *av_mallocz(unsigned int size); void *av_realloc(void *ptr, unsigned int size); void av_free(void *ptr); char *av_strdup(const char *s); void __av_freep(void **ptr); #define av_freep(p) __av_freep((void **)(p)) void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size); /* for static data only */ /* call av_free_static to release all staticaly allocated tables */ void av_free_static(void); void *__av_mallocz_static(void** location, unsigned int size); #define av_mallocz_static(p, s) __av_mallocz_static((void **)(p), s) #ifdef __cplusplus } #endif #endif /* AVCODEC_H */ h323plus/plugins/video/H.263-ffmpeg/h263ffmpeg_2005.vcproj0000644000175000017500000001145711341106277021414 0ustar markmark h323plus/plugins/video/H.264/0000755000175000017500000000000011652234220014374 5ustar markmarkh323plus/plugins/video/H.264/h264-x264_2008.vcproj0000644000175000017500000001276711445326266017507 0ustar markmark h323plus/plugins/video/H.264/h264-x264_2008.sln0000644000175000017500000000246211341163431016753 0ustar markmarkяЛП Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "h264-x264", "h264-x264_2008.vcproj", "{4D3EE295-5953-498D-AEDF-9C8792AB5723}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "h264_helper", "gpl\h264_helper_2008.vcproj", "{49E1DA1D-0BAD-4DCD-A4B1-D048A548D53B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {4D3EE295-5953-498D-AEDF-9C8792AB5723}.Debug|Win32.ActiveCfg = Debug|Win32 {4D3EE295-5953-498D-AEDF-9C8792AB5723}.Debug|Win32.Build.0 = Debug|Win32 {4D3EE295-5953-498D-AEDF-9C8792AB5723}.Release|Win32.ActiveCfg = Release|Win32 {4D3EE295-5953-498D-AEDF-9C8792AB5723}.Release|Win32.Build.0 = Release|Win32 {49E1DA1D-0BAD-4DCD-A4B1-D048A548D53B}.Debug|Win32.ActiveCfg = Debug|Win32 {49E1DA1D-0BAD-4DCD-A4B1-D048A548D53B}.Debug|Win32.Build.0 = Debug|Win32 {49E1DA1D-0BAD-4DCD-A4B1-D048A548D53B}.Release|Win32.ActiveCfg = Release|Win32 {49E1DA1D-0BAD-4DCD-A4B1-D048A548D53B}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal h323plus/plugins/video/H.264/Makefile.in0000644000175000017500000001170111447645771016464 0ustar markmark# # Makefile for H.264 # # Copyright (C) 2004 Post Increment, All Rights Reserved # # The contents of this file are subject to the Mozilla Public License # Version 1.0 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is Open H323 library. # # The Initial Developer of the Original Code is Post Increment # # Contributor(s): ______________________________________. # # $Log: Makefile.in,v $ # Revision 1.6 2010/09/26 13:34:49 willamowius # don't warn about unused definitions # # Revision 1.5 2010/09/26 13:24:46 willamowius # fix comment # # Revision 1.4 2010/09/09 09:51:16 willamowius # enable warnings, disable strict-aliasing optimization, because of conflict with PDynaLink # # Revision 1.3 2010/05/21 11:08:26 willamowius # add compiler flag needed for x264 >= 0.94 # # Revision 1.2 2010/03/01 23:56:18 willamowius # don't include an OPAL version into the search path for the plugin # # Revision 1.1 2010/02/24 02:19:43 shorne # First commit of h323plus mirror # # Revision 1.4 2007/09/02 12:03:19 dominance # * dynamically load libx264 at runtime on *nix # * Improved error handling # # Patch received from and thus thanks goes to Matthias Schneider. # # Revision 1.3 2007/08/23 19:20:14 dominance # fix compilation of H.264 if CFLAGS is present from make # # Revision 1.2 2007/08/22 21:51:26 dsandras # Applied patch from Matthias Schneider to share # things between codecs. Huge thanks! # # Revision 1.1 2007/06/16 21:36:59 dsandras # Added H.264 support thanks to Matthias Schneider . # Thanks a lot ! # # Baseline Profile: # no B-frames # We make use of the baseline profile (which is the designated profile for interactive vide) , # that means: # no B-Frames (too much latency in interactive video) # CBR (we want to get the max. quality making use of all the bitrate that is available) # We allow one exeption: configuring a bitrate of > 786 kbit/s # # This plugin implements # - Single Time Aggregation Packets A # - Single NAL units # - Fragmentation Units # like described in RFC3984 # # It requires x264 and ffmpeg. # # Revision 1.5 2007/04/19 06:09:04 csoutheren # Fixed plugin build system to use better detection for OSX # Resolved 1636262 - Fix for audio plugins for OSX # # Revision 1.4 2006/10/10 01:42:55 csoutheren # Applied patches from Ekiga bug 360869 - fix OpenSolaris build problems # Thanks to Boying Lu # # Revision 1.3 2006/08/20 00:32:25 csoutheren # Added missing files to Makefile # # Revision 1.2 2006/08/12 10:59:14 rjongbloed # Added Linux build for H.261 plug-in. # VC_PLUGIN_DIR=codecs/video prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ target_os=@target_os@ DL_LIBS =@DL_LIBS@ SHAREDDIR = ./shared COMMONDIR = ../common PLUGINDIR = ../../ OBJDIR = ./obj WIN32=@WIN32@ SUBDIRS += gpl BASENAME=h264 SONAME =$(BASENAME) CC =@CC@ CFLAGS =@CFLAGS@ -D__STDC_CONSTANT_MACROS CXX =@CXX@ LDSO =@LDSO@ PLUGINEXT =@PLUGINEXT@ STDCCFLAGS =@STDCCFLAGS@ LDFLAGS =@LDFLAGS@ LIBAVCODEC_CFLAGS=@LIBAVCODEC_CFLAGS@ EXTRACCFLAGS += $(LIBAVCODEC_CFLAGS) -I$(COMMONDIR) -I$(PLUGINDIR) -DLIB_DIR='"$(libdir)"' -DVC_PLUGIN_DIR='"$(VC_PLUGIN_DIR)"' -DLICENCE_MPL STDCCFLAGS += -Wall -Wno-unused -Wformat -Wformat-security -Wreorder -fno-strict-aliasing vpath %.cxx $(SHAREDDIR) vpath %.cxx $(COMMONDIR) vpath %.o $(OBJDIR) SRCS += $(SHAREDDIR)/h264frame.cxx \ h264-x264.cxx \ $(COMMONDIR)/dyna.cxx \ $(COMMONDIR)/trace.cxx ifeq ($(WIN32),yes) SRCS += h264pipe_win32.cxx else SRCS += h264pipe_unix.cxx endif $(OBJDIR)/%.o : %.cxx @mkdir -p $(OBJDIR) >/dev/null 2>&1 $(CXX) -I../../../include $(EXTRACCFLAGS) $(STDCCFLAGS) $(OPTCCFLAGS) $(CFLAGS) -c $< -o $@ PLUGIN = ./$(BASENAME)_video_pwplugin.$(PLUGINEXT) STATIC = ./lib$(BASENAME)_video_s.a OBJECTS = $(addprefix $(OBJDIR)/,$(patsubst %.c,%.o,$(patsubst %.cxx,%.o,$(notdir $(SRCS))))) $(PLUGIN): $(OBJECTS) @set -e; $(foreach dir,$(SUBDIRS),if test -d ${dir} ; then $(MAKE) -C $(dir); fi ; ) ifeq (,$(findstring solaris,$(target_os))) $(CXX) $(LDSO) $(DL_LIBS) -o $@ $^ else $(CXX) $(LDSO) $(DL_LIBS) $@ -o $@ $^ endif install: @set -e; $(foreach dir,$(SUBDIRS),if test -d ${dir} ; then $(MAKE) -C $(dir) install; fi ; ) mkdir -p $(DESTDIR)$(libdir)/$(VC_PLUGIN_DIR) install $(PLUGIN) $(DESTDIR)$(libdir)/$(VC_PLUGIN_DIR) uninstall: @set -e; $(foreach dir,$(SUBDIRS),if test -d ${dir} ; then $(MAKE) -C $(dir) uninstall; fi ; ) rm -f $(DESTDIR)$(libdir)/$(VC_PLUGIN_DIR)/$(PLUGIN) clean: rm -f $(OBJECTS) $(PLUGIN) @set -e; $(foreach dir,$(SUBDIRS),if test -d ${dir} ; then $(MAKE) -C $(dir) clean; fi ; ) ########################################### h323plus/plugins/video/H.264/shared/0000755000175000017500000000000011513065511015643 5ustar markmarkh323plus/plugins/video/H.264/shared/h264frame.h0000644000175000017500000002041511513065511017514 0ustar markmark/*****************************************************************************/ /* The contents of this file are subject to the Mozilla Public License */ /* Version 1.0 (the "License"); you may not use this file except in */ /* compliance with the License. You may obtain a copy of the License at */ /* http://www.mozilla.org/MPL/ */ /* */ /* Software distributed under the License is distributed on an "AS IS" */ /* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the */ /* License for the specific language governing rights and limitations under */ /* the License. */ /* */ /* The Original Code is the Open H323 Library. */ /* */ /* The Initial Developer of the Original Code is Matthias Schneider */ /* Copyright (C) 2007 Matthias Schneider, All Rights Reserved. */ /* */ /* Contributor(s): Matthias Schneider (ma30002000@yahoo.de) */ /* */ /* Alternatively, the contents of this file may be used under the terms of */ /* the GNU General Public License Version 2 or later (the "GPL"), in which */ /* case the provisions of the GPL are applicable instead of those above. If */ /* you wish to allow use of your version of this file only under the terms */ /* of the GPL and not to allow others to use your version of this file under */ /* the MPL, indicate your decision by deleting the provisions above and */ /* replace them with the notice and other provisions required by the GPL. */ /* If you do not delete the provisions above, a recipient may use your */ /* version of this file under either the MPL or the GPL. */ /* */ /* The Original Code was written by Matthias Schneider */ /*****************************************************************************/ #ifndef __H264FRAME_H__ #define __H264FRAME_H__ 1 // GVX 3000 does not like STAP packets... So we waste 40 bytes per connection... //#define SEND_STAP_PACKETS 1 #if defined(_WIN32) && _MSC_VER < 1600 #include "../../common/vs-stdint.h" #else #include #endif #ifdef _MSC_VER #include "../../common/rtpframe.h" #else #include "rtpframe.h" #endif #define H264_NAL_TYPE_NON_IDR_SLICE 1 #define H264_NAL_TYPE_DP_A_SLICE 2 #define H264_NAL_TYPE_DP_B_SLICE 3 #define H264_NAL_TYPE_DP_C_SLICE 0x4 #define H264_NAL_TYPE_IDR_SLICE 0x5 #define H264_NAL_TYPE_SEI 0x6 #define H264_NAL_TYPE_SEQ_PARAM 0x7 #define H264_NAL_TYPE_PIC_PARAM 0x8 #define H264_NAL_TYPE_ACCESS_UNIT 0x9 #define H264_NAL_TYPE_END_OF_SEQ 0xa #define H264_NAL_TYPE_END_OF_STREAM 0xb #define H264_NAL_TYPE_FILLER_DATA 0xc #define H264_NAL_TYPE_SEQ_EXTENSION 0xd const static struct h264_level { unsigned level_idc; unsigned mbps; /* max macroblock processing rate (macroblocks/sec) */ unsigned frame_size; /* max frame size (macroblocks) */ unsigned dpb; /* max decoded picture buffer (bytes) */ long unsigned bitrate;/* max bitrate (kbit/sec) */ unsigned cpb; /* max vbv buffer (kbit) */ unsigned mv_range; /* max vertical mv component range (pixels) */ unsigned mvs_per_2mb; /* max mvs per 2 consecutive mbs. */ unsigned slice_rate; unsigned bipred8x8; /* limit bipred to >=8x8 */ unsigned direct8x8; /* limit b_direct to >=8x8 */ unsigned frame_only; /* forbid interlacing */ unsigned h241_level; /* H.241 Level Value */ } h264_levels[] = { { 10, 1485, 99, 152064, 64000, 175, 64, 64, 0, 0, 0, 1, 15}, { 9, 1485, 99, 152064, 128000, 350, 64, 64, 0, 0, 0, 1, 19}, { 11, 3000, 396, 345600, 192000, 500, 128, 64, 0, 0, 0, 1, 22}, { 12, 6000, 396, 912384, 384000, 1000, 128, 64, 0, 0, 0, 1, 29}, { 13, 11880, 396, 912384, 768000, 2000, 128, 64, 0, 0, 0, 1, 36}, { 20, 11880, 396, 912384, 2000000, 2000, 128, 64, 0, 0, 0, 1, 43}, { 21, 19800, 792, 1824768, 3999999, 4000, 256, 64, 0, 0, 0, 0, 50}, { 22, 20250, 1620, 3110400, 4000000, 4000, 256, 64, 0, 0, 0, 0, 57}, { 30, 40500, 1620, 3110400, 10000000, 10000, 256, 32, 22, 0, 1, 0, 64}, { 31, 108000, 3600, 6912000, 14000000, 14000, 512, 16, 60, 1, 1, 0, 71}, { 32, 216000, 5120, 7864320, 20000000, 20000, 512, 16, 60, 1, 1, 0, 78}, { 40, 245760, 8192, 12582912, 20000000, 25000, 512, 16, 60, 1, 1, 0, 85}, { 41, 245760, 8192, 12582912, 50000000, 62500, 512, 16, 24, 1, 1, 0, 92}, { 42, 522240, 8704, 13369344, 50000000, 62500, 512, 16, 24, 1, 1, 1, 99}, { 50, 589824, 22080, 42393600, 135000000, 135000, 512, 16, 24, 1, 1, 1, 106}, { 51, 983040, 36864, 70778880, 240000000, 240000, 512, 16, 24, 1, 1, 1, 113}, { 0 } }; // This table is used in order to select a different resolution if the desired one // consists of more macroblocks than the level limit const static struct h264_resolution { unsigned width; unsigned height; unsigned macroblocks; bool stdaspect; } h264_resolutions[] = { { 1920, 1080, 8100, false }, { 1600, 1200, 7500, false }, { 1408, 1152, 6336, true }, { 1280, 1024, 5120, true }, { 1280, 768, 3840, false }, { 1280, 720, 3600, false }, { 1024, 768, 3072, false }, { 800, 600, 1900, false }, { 704, 576, 1584, true }, { 640, 480, 1200, false }, { 352, 288, 396, true }, { 320, 240, 300, false }, { 176, 144, 99, true }, { 160, 120, 75, false }, { 0 } }; // This table is used in order to select a different resolution if the desired one // consists of more macroblocks than the level limit const static struct h264_aspect { unsigned width; unsigned height; } h264_aspects[] = { { 0, 0}, { 1, 1}, { 12, 11}, { 10, 11}, { 16, 11}, { 40, 33}, { 24, 11}, { 20, 11}, { 32, 11}, { 80, 33}, { 18, 11}, { 15, 11}, { 64, 33}, { 160, 99}, { 4, 3}, { 3, 2}, { 2, 1}, { 0 } }; #ifndef LICENCE_MPL extern "C" { #include } #endif enum codecInFlags { silenceFrame = 1, forceIFrame = 2 }; enum codecOutFlags { isLastFrame = 1, isIFrame = 2, requestIFrame = 4 }; typedef struct h264_nal_t { uint32_t offset; uint32_t length; uint8_t type; } h264_nal_t; class H264Frame { public: H264Frame(); ~H264Frame(); void BeginNewFrame(); #ifndef LICENCE_MPL void SetFromFrame (x264_nal_t *NALs, int numberOfNALs); #endif void SetMaxPayloadSize (uint16_t maxPayloadSize); void SetTimestamp (uint64_t timestamp) { _timestamp = timestamp; } bool GetRTPFrame (RTPFrame & frame, unsigned int & flags); bool HasRTPFrames () { if (_currentNAL < _numberOfNALsInFrame) return true; else return false; } bool SetFromRTPFrame (RTPFrame & frame, unsigned int & flags); uint8_t* GetFramePtr () { return (_encodedFrame); } uint32_t GetFrameSize () { return (_encodedFrameLen); } bool IsSync (); private: bool EncapsulateSTAP (RTPFrame & frame, unsigned int & flags); bool EncapsulateFU (RTPFrame & frame, unsigned int & flags); bool DeencapsulateFU (RTPFrame & frame, unsigned int & flags); bool DeencapsulateSTAP (RTPFrame & frame, unsigned int & flags); void AddDataToEncodedFrame (uint8_t *data, uint32_t dataLen, uint8_t header, bool addHeader); bool IsStartCode (const uint8_t *positionInFrame); // general stuff uint64_t _timestamp; uint16_t _maxPayloadSize; uint8_t* _encodedFrame; uint32_t _encodedFrameLen; h264_nal_t* _NALs; uint32_t _numberOfNALsInFrame; uint32_t _currentNAL; uint32_t _numberOfNALsReserved; int _nalBuffer; // for encapsulation uint32_t _currentNALFURemainingLen; uint8_t* _currentNALFURemainingDataPtr; uint8_t _currentNALFUHeader0; uint8_t _currentNALFUHeader1; // for deencapsulation uint16_t _currentFU; }; #endif /* __H264FRAME_H__ */ h323plus/plugins/video/H.264/shared/h264frame.cxx0000644000175000017500000004653511513065511020102 0ustar markmark/*****************************************************************************/ /* The contents of this file are subject to the Mozilla Public License */ /* Version 1.0 (the "License"); you may not use this file except in */ /* compliance with the License. You may obtain a copy of the License at */ /* http://www.mozilla.org/MPL/ */ /* */ /* Software distributed under the License is distributed on an "AS IS" */ /* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the */ /* License for the specific language governing rights and limitations under */ /* the License. */ /* */ /* The Original Code is the Open H323 Library. */ /* */ /* The Initial Developer of the Original Code is Matthias Schneider */ /* Copyright (C) 2007 Matthias Schneider, All Rights Reserved. */ /* */ /* Contributor(s): Matthias Schneider (ma30002000@yahoo.de) */ /* */ /* Alternatively, the contents of this file may be used under the terms of */ /* the GNU General Public License Version 2 or later (the "GPL"), in which */ /* case the provisions of the GPL are applicable instead of those above. If */ /* you wish to allow use of your version of this file only under the terms */ /* of the GPL and not to allow others to use your version of this file under */ /* the MPL, indicate your decision by deleting the provisions above and */ /* replace them with the notice and other provisions required by the GPL. */ /* If you do not delete the provisions above, a recipient may use your */ /* version of this file under either the MPL or the GPL. */ /* */ /* The Original Code was written by Matthias Schneider */ /*****************************************************************************/ #include "plugin-config.h" #include "h264frame.h" #ifdef _MSC_VER #include "../../common/trace.h" #else #include "trace.h" #endif #include #include #ifndef LICENCE_MPL #ifndef _WIN32 #include "../gpl/enc-ctx.h" #include "../gpl/x264loader_unix.h" extern X264Library X264Lib; #else #include "../gpl/x264loader_win32.h" extern X264Library X264Lib; #endif #endif #define MAX_NAL_BUFFER 150 // Max NAL Buffer at 1400 byte NAL Units #define MAX_FRAME_SIZE (MAX_NAL_BUFFER * 1400) + 12 // 150 Complete NAL Units plus header H264Frame::H264Frame () { _timestamp = 0; _maxPayloadSize = 1400; _encodedFrame = (uint8_t*)malloc(MAX_FRAME_SIZE); _NALs = NULL; _numberOfNALsReserved = 0; _nalBuffer = MAX_NAL_BUFFER; BeginNewFrame(); } void H264Frame::BeginNewFrame () { _encodedFrameLen = 0; _numberOfNALsInFrame = 0; _currentNAL = 0; _currentNALFURemainingLen = 0; _currentNALFURemainingDataPtr = NULL; _currentNALFUHeader0 = 0; _currentNALFUHeader1 = 0; _currentFU = 0; } H264Frame::~H264Frame () { if (_encodedFrame) free (_encodedFrame); if (_NALs) free(_NALs); } #ifndef LICENCE_MPL #if X264_BUILD > 79 int x264_nal_encode(uint8_t *p_data, int *pi_data, int b_annexeb, x264_nal_t *nal ) { uint8_t *dst = p_data; uint8_t *src = nal->p_payload; uint8_t *end = &nal->p_payload[nal->i_payload]; int i_count = 0; /* FIXME this code doesn't check overflow */ if( b_annexeb ) { /* long nal start code (we always use long ones)*/ *dst++ = 0x00; *dst++ = 0x00; *dst++ = 0x00; *dst++ = 0x01; } /* nal header */ *dst++ = ( 0x00 << 7 ) | ( nal->i_ref_idc << 5 ) | nal->i_type; while( src < end ) { if( i_count == 2 && *src <= 0x03 ) { *dst++ = 0x03; i_count = 0; } if( *src == 0 ) i_count++; else i_count = 0; *dst++ = *src++; } *pi_data = dst - (uint8_t*)p_data; return *pi_data; } #endif void H264Frame::SetMaxPayloadSize (uint16_t maxPayloadSize) { _maxPayloadSize = maxPayloadSize; _nalBuffer = (MAX_FRAME_SIZE-12)/maxPayloadSize; } void H264Frame::SetFromFrame (x264_nal_t *NALs, int numberOfNALs) { //int vopBufferLen; int currentNAL = 0; int encodedNALS = numberOfNALs; if (numberOfNALs > _nalBuffer) { TRACE(1, "H264\tENC\tNAL Buffer Exceeded (" << numberOfNALs << ") Truncating.."); encodedNALS = _nalBuffer; } uint8_t* currentPositionInFrame=(uint8_t*) _encodedFrame; if (_NALs) free(_NALs); _NALs = (h264_nal_t *)malloc(encodedNALS * sizeof(h264_nal_t)); _encodedFrameLen = 0; _numberOfNALsInFrame = 0; _currentNAL=0; //TRACE (4, "H264\tEncap\tEncoded " << encodedNALS << " NALs"); // read the nals out of the encoder and create meta data about their location and size in the frame for (currentNAL = 0; currentNAL < encodedNALS; currentNAL++) { int currentNALLen; // currentNALLen = X264_NAL_ENCODE(currentPositionInFrame, &vopBufferLen, 1, &NALs[currentNAL]); currentNALLen = NALs[currentNAL].i_payload; memcpy(currentPositionInFrame,NALs[currentNAL].p_payload,currentNALLen); if (currentNALLen > 0) { _NALs[_numberOfNALsInFrame].length = currentNALLen; _NALs[_numberOfNALsInFrame].offset = _encodedFrameLen; _NALs[_numberOfNALsInFrame].type = NALs[currentNAL].i_type; uint32_t header = 0; if (IsStartCode(currentPositionInFrame)) { header = currentPositionInFrame[2] == 1 ? 3 : 4; } _NALs[_numberOfNALsInFrame].length -= header; _NALs[_numberOfNALsInFrame].offset += header; TRACE_UP(4, "H264\tEncap\tLoaded NAL unit #" << currentNAL << " - type " << NALs[currentNAL].i_type); // TRACE (4, "H264\tEncap\tLoaded NAL unit #" << currentNAL << " - type " << NALs[currentNAL].i_type << " size " << currentNALLen ); uint8_t* NALptr = NALs[currentNAL].p_payload; if ( Trace::CanTraceUserPlane(4) && (NALs[currentNAL].i_type == H264_NAL_TYPE_SEQ_PARAM)) { TRACE_UP(4, "H264\tEncap\tProfile: " << (int)NALptr[0] << " Level: " << (int)NALptr[2] << " Constraints: " << (NALptr[1] & 0x80 ? 1 : 0) << (NALptr[1] & 0x40 ? 1 : 0) << (NALptr[1] & 0x20 ? 1 : 0) << (NALptr[1] & 0x10 ? 1 : 0)); } _numberOfNALsInFrame++; _encodedFrameLen += currentNALLen; currentPositionInFrame += currentNALLen; } else { TRACE_UP(4,"[enc] Need to increase vop buffer size by " << -currentNALLen); } } TRACE_UP(4, "H264\tEncap\tLoaded an encoded frame of " << _encodedFrameLen << " bytes consisiting of " << _numberOfNALsInFrame << " NAL units"); } #endif bool H264Frame::GetRTPFrame(RTPFrame & frame, unsigned int & flags) { flags = 0; flags |= (IsSync()) ? isIFrame : 0; if (_currentNAL < _numberOfNALsInFrame) { uint32_t curNALLen = _NALs[_currentNAL].length; const uint8_t *curNALPtr = _encodedFrame + _NALs[_currentNAL].offset; /* * We have 3 types of packets we can send: * fragmentation units - if the NAL is > max_payload_size * single nal units - if the NAL is < max_payload_size, and can only fit 1 NAL * single time aggregation units - if we can put multiple NALs into one packet * * We don't send multiple time aggregation units */ if (curNALLen > _maxPayloadSize) { // fragmentation unit - break up into max_payload_size size chunks return EncapsulateFU(frame, flags); } else { // it is the last NAL of that frame or doesnt fit into an STAP packet with next nal ? #ifdef SEND_STAP_PACKETS if (((_currentNAL + 1) >= _numberOfNALsInFrame) || ((curNALLen + _NALs[_currentNAL + 1].length + 5) > _maxPayloadSize)) { #endif // single nal unit packet frame.SetPayloadSize(curNALLen); memcpy(frame.GetPayloadPtr(), curNALPtr, curNALLen); frame.SetTimestamp(_timestamp); frame.SetMarker((_currentNAL + 1) >= _numberOfNALsInFrame ? 1 : 0); flags |= frame.GetMarker() ? isLastFrame : 0; // marker bit on last frame of video TRACE_UP(4, "H264\tEncap\tEncapsulating NAL unit #" << _currentNAL << "/" << (_numberOfNALsInFrame-1) << " of " << curNALLen << " bytes as a regular NAL unit"); _currentNAL++; return true; #ifdef SEND_STAP_PACKETS } else { return EncapsulateSTAP(frame, flags); } #endif } } else { return false; } } bool H264Frame::EncapsulateSTAP (RTPFrame & frame, unsigned int & flags) { uint32_t STAPLen = 1; uint32_t highestNALNumberInSTAP = _currentNAL; // first check how many nals we want to put into the packet do { STAPLen += 2; STAPLen += _NALs[highestNALNumberInSTAP].length; highestNALNumberInSTAP++; } while (highestNALNumberInSTAP < _numberOfNALsInFrame && STAPLen < _maxPayloadSize); if (STAPLen > _maxPayloadSize) { STAPLen -= 2; STAPLen -= _NALs[(highestNALNumberInSTAP-1)].length; highestNALNumberInSTAP--; } TRACE_UP(4, "H264\tEncap\tEncapsulating NAL units " << _currentNAL << "-"<< (highestNALNumberInSTAP-1) << "/" << (_numberOfNALsInFrame-1) << " as a STAP of " << STAPLen); frame.SetPayloadSize(1); // for stap header uint32_t curNALLen; const uint8_t* curNALPtr; uint8_t maxNRI = 0; while (_currentNAL < highestNALNumberInSTAP) { curNALLen = _NALs[_currentNAL].length; curNALPtr = _encodedFrame + _NALs[_currentNAL].offset; // store the nal length information frame.SetPayloadSize(frame.GetPayloadSize() + 2); *((uint8_t*)frame.GetPayloadPtr() + frame.GetPayloadSize() - 2) = curNALLen >> 8; *((uint8_t*)frame.GetPayloadPtr() + frame.GetPayloadSize() - 1) = curNALLen & 0xff; // store the nal frame.SetPayloadSize(frame.GetPayloadSize() + curNALLen); memcpy ((uint8_t*)frame.GetPayloadPtr() + frame.GetPayloadSize() - curNALLen, (void *)curNALPtr, curNALLen); if ((*curNALPtr & 0x60) > maxNRI) maxNRI = *curNALPtr & 0x60; TRACE_UP(4, "H264\tEncap\tAdding NAL unit " << _currentNAL << "/" << (_numberOfNALsInFrame-1) << " of " << curNALLen << " bytes to STAP"); _currentNAL++; } // set the nri value in the stap header //uint8_t stap = 24 | maxNRI; //memcpy (frame.GetPayloadPtr(),&stap,1); memset (frame.GetPayloadPtr(), 24 | maxNRI, 1); frame.SetTimestamp(_timestamp); frame.SetMarker(_currentNAL >= _numberOfNALsInFrame ? 1 : 0); flags |= frame.GetMarker() ? isLastFrame : 0; // marker bit on last frame of video return true; } bool H264Frame::EncapsulateFU(RTPFrame & frame, unsigned int & flags) { uint8_t header[2]; uint32_t curFULen; if ((_currentNALFURemainingLen==0) || (_currentNALFURemainingDataPtr==NULL)) { _currentNALFURemainingLen = _NALs[_currentNAL].length; _currentNALFURemainingDataPtr = _encodedFrame + _NALs[_currentNAL].offset; _currentNALFUHeader0 = (*_currentNALFURemainingDataPtr & 0x60) | 28; _currentNALFUHeader1 = *_currentNALFURemainingDataPtr & 0x1f; header[0] = _currentNALFUHeader0; header[1] = 0x80 | _currentNALFUHeader1; // s indication _currentNALFURemainingDataPtr++; // remove the first byte _currentNALFURemainingLen--; } else { header[0] = _currentNALFUHeader0; header[1] = _currentNALFUHeader1; } if (_currentNALFURemainingLen > 0) { bool last = false; if ((_currentNALFURemainingLen + 2) <= _maxPayloadSize) { header[1] |= 0x40; curFULen = _currentNALFURemainingLen; last = true; } else { curFULen = _maxPayloadSize - 2; } frame.SetPayloadSize(curFULen + 2); memcpy ((uint8_t*)frame.GetPayloadPtr(), header, 2); memcpy ((uint8_t*)frame.GetPayloadPtr()+2, _currentNALFURemainingDataPtr, curFULen); frame.SetTimestamp(_timestamp); frame.SetMarker((last && ((_currentNAL+1) >= _numberOfNALsInFrame)) ? 1 : 0); flags |= frame.GetMarker() ? isLastFrame : 0; // marker bit on last frame of video _currentNALFURemainingDataPtr += curFULen; _currentNALFURemainingLen -= curFULen; TRACE_UP(4, "H264\tEncap\tEncapsulating "<< curFULen << " bytes of NAL " << _currentNAL<< "/" << (_numberOfNALsInFrame-1) << " as a FU (" << _currentNALFURemainingLen << " bytes remaining)"); } if (_currentNALFURemainingLen==0) { _currentNAL++; _currentNALFURemainingDataPtr=NULL; } return true; } bool H264Frame::SetFromRTPFrame(RTPFrame & frame, unsigned int & flags) { uint8_t curNALType = *(frame.GetPayloadPtr()) & 0x1f; if (curNALType >= H264_NAL_TYPE_NON_IDR_SLICE && curNALType <= H264_NAL_TYPE_FILLER_DATA) { // regular NAL - put in buffer, adding the header. TRACE_UP(4, "H264\tDeencap\tDeencapsulating a regular NAL unit NAL of " << frame.GetPayloadSize() - 1 << " bytes (type " << (int) curNALType << ")"); AddDataToEncodedFrame(frame.GetPayloadPtr() + 1, frame.GetPayloadSize() - 1, *(frame.GetPayloadPtr()), 1); } else if (curNALType == 24) { // stap-A (single time aggregation packet ) return DeencapsulateSTAP (frame, flags); } else if (curNALType == 28) { // Fragmentation Units return DeencapsulateFU (frame, flags); } else { TRACE_UP(4, "H264\tDeencap\tSkipping unsupported NAL unit type " << curNALType); return false; } return true; } bool H264Frame::IsSync () { uint32_t i; for (i=0; i<_numberOfNALsInFrame; i++) { if ((_NALs[i].type == H264_NAL_TYPE_IDR_SLICE) || (_NALs[i].type == H264_NAL_TYPE_SEQ_PARAM) || (_NALs[i].type == H264_NAL_TYPE_PIC_PARAM)) { return true; } } return false; } bool H264Frame::DeencapsulateSTAP (RTPFrame & frame, unsigned int & /*flags*/) { uint8_t* curSTAP = frame.GetPayloadPtr() + 1; uint32_t curSTAPLen = frame.GetPayloadSize() - 1; TRACE_UP(4, "H264\tDeencap\tDeencapsulating a STAP of " << curSTAPLen << " bytes"); while (curSTAPLen > 0) { // first, theres a 2 byte length field uint32_t len = (curSTAP[0] << 8) | curSTAP[1]; curSTAP += 2; // then the header, followed by the body. We'll add the header // in the AddDataToEncodedFrame - that's why the nal body is dptr + 1 TRACE_UP(4, "H264\tDeencap\tDeencapsulating an NAL unit of " << len << " bytes (type " << (int)(*curSTAP && 0x1f) << ") from STAP"); AddDataToEncodedFrame(curSTAP + 1, len - 1, *curSTAP, 1); curSTAP += len; if ((len + 2) > curSTAPLen) { curSTAPLen = 0; TRACE(1, "H264\tDeencap\tError deencapsulating STAP, STAP header says its " << len + 2 << " bytes long but there are only " << curSTAPLen << " bytes left of the packet"); return false; } else { curSTAPLen -= (len + 2); } } return true; } bool H264Frame::DeencapsulateFU (RTPFrame & frame, unsigned int & /*flags*/) { uint8_t* curFUPtr = frame.GetPayloadPtr(); uint32_t curFULen = frame.GetPayloadSize(); uint8_t header; if ((curFUPtr[1] & 0x80) && !(curFUPtr[1] & 0x40)) { TRACE_UP(4, "H264\tDeencap\tDeencapsulating a FU of " << frame.GetPayloadSize() - 1 << " bytes (_Startbit_, !Endbit)"); if (_currentFU) { _currentFU=1; } else { _currentFU++; header = (curFUPtr[0] & 0xe0) | (curFUPtr[1] & 0x1f); AddDataToEncodedFrame(curFUPtr + 2, curFULen - 2, header, 1); } } else if (!(curFUPtr[1] & 0x80) && !(curFUPtr[1] & 0x40)) { TRACE_UP(4, "H264\tDeencap\tDeencapsulating a FU of " << frame.GetPayloadSize() - 1 << " bytes (!Startbit, !Endbit)"); if (_currentFU) { _currentFU++; AddDataToEncodedFrame(curFUPtr + 2, curFULen - 2, 0, 0); } else { _currentFU=0; TRACE(1, "H264\tDeencap\tReceived an intermediate FU without getting the first - dropping!"); return false; } } else if (!(curFUPtr[1] & 0x80) && (curFUPtr[1] & 0x40)) { TRACE_UP(4, "H264\tDeencap\tDeencapsulating a FU of " << frame.GetPayloadSize() - 1 << " bytes (!Startbit, _Endbit_)"); if (_currentFU) { _currentFU=0; AddDataToEncodedFrame( curFUPtr + 2, curFULen - 2, 0, 0); } else { _currentFU=0; TRACE(1, "H264\tDeencap\tReceived a last FU without getting the first - dropping!"); return false; } } else if ((curFUPtr[1] & 0x80) && (curFUPtr[1] & 0x40)) { TRACE_UP(4, "H264\tDeencap\tDeencapsulating a FU of " << frame.GetPayloadSize() - 1 << " bytes (_Startbit_, _Endbit_)"); TRACE(1, "H264\tDeencap\tReceived a FU with both Starbit and Endbit set - This MUST NOT happen!"); _currentFU=0; return false; } return true; } void H264Frame::AddDataToEncodedFrame (uint8_t *data, uint32_t dataLen, uint8_t header, bool addHeader) { uint8_t headerLen= addHeader ? 5 : 0; uint8_t* currentPositionInFrame = _encodedFrame + _encodedFrameLen; if (addHeader) { TRACE_UP(4, "H264\tDeencap\tAdding a NAL unit of " << dataLen << " bytes to buffer (type " << (int)(header & 0x1f) << ")"); uint8_t* NALptr = data; if ( Trace::CanTraceUserPlane(4) && ((header & 0x1f) == H264_NAL_TYPE_SEQ_PARAM) && (dataLen >= 3)) { TRACE_UP(4, "H264\tDeencap\tProfile: " << (int)NALptr[0] << " Level: " << (int)NALptr[2] << " Constraints: " << (NALptr[1] & 0x80 ? 1 : 0) << (NALptr[1] & 0x40 ? 1 : 0) << (NALptr[1] & 0x20 ? 1 : 0) << (NALptr[1] & 0x10 ? 1 : 0)); } } else TRACE_UP(4, "H264\tDeencap\tAdding a NAL unit of " << dataLen << " bytes to buffer"); if (_encodedFrameLen + dataLen + headerLen > MAX_FRAME_SIZE) { TRACE(1, "H264\tDeencap\tFrame too big (" << _encodedFrameLen + dataLen + headerLen << ">" << MAX_FRAME_SIZE << ")"); return; } // add 00 00 01 [headerbyte] header if (addHeader) { *currentPositionInFrame++ = 0; *currentPositionInFrame++ = 0; *currentPositionInFrame++ = 0; *currentPositionInFrame++ = 1; if (_numberOfNALsInFrame + 1 >(_numberOfNALsReserved)) { _NALs = (h264_nal_t *)realloc(_NALs, (_numberOfNALsReserved + 1) * sizeof(h264_nal_t)); _numberOfNALsReserved++; } if (_NALs) { _NALs[_numberOfNALsInFrame].offset = _encodedFrameLen + 4; _NALs[_numberOfNALsInFrame].length = dataLen + 1; _NALs[_numberOfNALsInFrame].type = header & 0x1f; _numberOfNALsInFrame++; } *currentPositionInFrame++ = header; } else { if (_NALs) _NALs[_numberOfNALsInFrame - 1].length += dataLen; } TRACE_UP (4, "H264\tDeencap\tReserved memory for " <<_numberOfNALsReserved <<" NALs, Inframe/current: "<< _numberOfNALsInFrame <<" Offset: " <<_NALs[_numberOfNALsInFrame-1].offset << " Length: "<< _NALs[_numberOfNALsInFrame-1].length << " Type: "<< (int)(_NALs[_numberOfNALsInFrame-1].type)); memcpy(currentPositionInFrame, data, dataLen); _encodedFrameLen += dataLen + headerLen; } bool H264Frame::IsStartCode (const uint8_t *positionInFrame) { if (positionInFrame[0] == 0 && positionInFrame[1] == 0 && ((positionInFrame[2] == 1) || ((positionInFrame[2] == 0) && positionInFrame[3] == 1))) { return true; } return false; } h323plus/plugins/video/H.264/shared/pipes.h0000644000175000017500000000575111513065511017144 0ustar markmark/*****************************************************************************/ /* The contents of this file are subject to the Mozilla Public License */ /* Version 1.0 (the "License"); you may not use this file except in */ /* compliance with the License. You may obtain a copy of the License at */ /* http://www.mozilla.org/MPL/ */ /* */ /* Software distributed under the License is distributed on an "AS IS" */ /* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the */ /* License for the specific language governing rights and limitations under */ /* the License. */ /* */ /* The Original Code is the Open H323 Library. */ /* */ /* The Initial Developer of the Original Code is Matthias Schneider */ /* Copyright (C) 2007 Matthias Schneider, All Rights Reserved. */ /* */ /* Contributor(s): Matthias Schneider (ma30002000@yahoo.de) */ /* */ /* Alternatively, the contents of this file may be used under the terms of */ /* the GNU General Public License Version 2 or later (the "GPL"), in which */ /* case the provisions of the GPL are applicable instead of those above. If */ /* you wish to allow use of your version of this file only under the terms */ /* of the GPL and not to allow others to use your version of this file under */ /* the MPL, indicate your decision by deleting the provisions above and */ /* replace them with the notice and other provisions required by the GPL. */ /* If you do not delete the provisions above, a recipient may use your */ /* version of this file under either the MPL or the GPL. */ /* */ /* The Original Code was written by Matthias Schneider */ /*****************************************************************************/ #ifndef __PIPES_H__ #define __PIPES_H__ 1 #define INIT 0 #define H264ENCODERCONTEXT_CREATE 1 #define H264ENCODERCONTEXT_DELETE 2 #define APPLY_OPTIONS 3 #define SET_TARGET_BITRATE 4 #define SET_FRAME_RATE 5 #define SET_FRAME_WIDTH 6 #define SET_FRAME_HEIGHT 7 #define ENCODE_FRAMES 8 #define ENCODE_FRAMES_BUFFERED 9 #define SET_MAX_FRAME_SIZE 10 #define SET_MAX_KEY_FRAME_PERIOD 11 #define SET_TSTO 12 #define SET_PROFILE_LEVEL 13 #define FASTUPDATE_REQUESTED 14 #define SET_MAX_NALSIZE 15 #endif /* __PIPE_H__ */ h323plus/plugins/video/H.264/h264pipe_unix.cxx0000644000175000017500000002415411367413101017532 0ustar markmark/* * H.264 Plugin codec for OpenH323/OPAL * * Copyright (C) 2007 Matthias Schneider, All Rights Reserved * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * Contributor(s): Matthias Schneider (ma30002000@yahoo.de) * */ /* Notes ----- */ #include #include #include #include "trace.h" #include "rtpframe.h" #include "h264pipe_unix.h" #include #define HAVE_MKFIFO 1 #define GPL_PROCESS_FILENAME "h264_video_pwplugin_helper" #define DIR_SEPERATOR "/" #define DIR_TOKENISER ":" unsigned int H264EncCtx::instances = 0; H264EncCtx::H264EncCtx() { width = 0; height = 0; size = 0; startNewFrame = true; loaded = false; pipesCreated = false; pipesOpened = false; instances++; } H264EncCtx::~H264EncCtx() { closeAndRemovePipes(); } bool H264EncCtx::Load() { snprintf ( dlName, sizeof(dlName), "/tmp/x264-dl-%d-%u", getpid(),GetInstanceNumber()); snprintf ( ulName, sizeof(ulName), "/tmp/x264-ul-%d-%u", getpid(),GetInstanceNumber()); if (!createPipes()) { closeAndRemovePipes(); return false; } pipesCreated = true; if (!findGplProcess()) { TRACE(1, "H264\tIPC\tPP: Couldn't find GPL process executable: " << GPL_PROCESS_FILENAME) #ifndef _WIN32 fprintf(stderr, "ERROR: H.264 plugin couldn't find GPL process executable: " GPL_PROCESS_FILENAME "\n"); #endif closeAndRemovePipes(); return false; } // Check if file is executable!!!! int pid = fork(); if(pid == 0) execGplProcess(); else if(pid < 0) { TRACE(1, "H264\tIPC\tPP: Error when trying to fork"); closeAndRemovePipes(); return false; } dlStream.open(dlName, std::ios::binary); if (dlStream.fail()) { TRACE(1, "H264\tIPC\tPP: Error when opening DL named pipe"); closeAndRemovePipes(); return false; } ulStream.open(ulName, std::ios::binary); if (ulStream.fail()) { TRACE(1, "H264\tIPC\tPP: Error when opening UL named pipe") closeAndRemovePipes(); return false; } pipesOpened = true; unsigned msg = INIT; unsigned status; writeStream((char*) &msg, sizeof(msg)); flushStream(); readStream((char*) &msg, sizeof(msg)); readStream((char*) &status, sizeof(status)); if (status == 0) { TRACE(1, "H264\tIPC\tPP: GPL Process returned failure on initialization - plugin disabled") #ifndef _WIN32 fprintf(stderr, "ERROR: H.264 plugin failure on initialization - plugin disabled"); #endif closeAndRemovePipes(); return false; } TRACE(1, "H264\tIPC\tPP: Successfully forked child process "<< pid << " and established communication") loaded = true; return true; } void H264EncCtx::call(unsigned msg) { if (msg == H264ENCODERCONTEXT_CREATE) startNewFrame = true; writeStream((char*) &msg, sizeof(msg)); flushStream(); readStream((char*) &msg, sizeof(msg)); } void H264EncCtx::call(unsigned msg, unsigned value) { switch (msg) { case SET_FRAME_WIDTH: width = value; size = (unsigned) (width * height * 1.5) + sizeof(frameHeader) + 40; break; case SET_FRAME_HEIGHT: height = value; size = (unsigned) (width * height * 1.5) + sizeof(frameHeader) + 40; break; } writeStream((char*) &msg, sizeof(msg)); writeStream((char*) &value, sizeof(value)); flushStream(); readStream((char*) &msg, sizeof(msg)); } void H264EncCtx::call(unsigned msg , const u_char * src, unsigned & srcLen, u_char * dst, unsigned & dstLen, unsigned & headerLen, unsigned int & flags, int & ret) { if (startNewFrame) { writeStream((char*) &msg, sizeof(msg)); if (size) { writeStream((char*) &size, sizeof(size)); writeStream((char*) src, size); writeStream((char*) &headerLen, sizeof(headerLen)); writeStream((char*) dst, headerLen); writeStream((char*) &flags, sizeof(flags) ); } else { writeStream((char*) &srcLen, sizeof(srcLen)); writeStream((char*) src, srcLen); writeStream((char*) &headerLen, sizeof(headerLen)); writeStream((char*) dst, headerLen); writeStream((char*) &flags, sizeof(flags) ); } } else { msg = ENCODE_FRAMES_BUFFERED; writeStream((char*) &msg, sizeof(msg)); } flushStream(); readStream((char*) &msg, sizeof(msg)); readStream((char*) &dstLen, sizeof(dstLen)); readStream((char*) dst, dstLen); readStream((char*) &flags, sizeof(flags)); readStream((char*) &ret, sizeof(ret)); if (flags & 1) startNewFrame = true; else startNewFrame = false; } bool H264EncCtx::createPipes() { umask(0); #ifdef HAVE_MKFIFO if (mkfifo((const char*) &dlName, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP)) { TRACE(1, "H264\tIPC\tPP: Error when trying to create DL named pipe"); return false; } if (mkfifo((const char*) &ulName, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP)) { TRACE(1, "H264\tIPC\tPP: Error when trying to create UL named pipe"); return false; } #else if (mknod((const char*) &dlName, S_IFIFO | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP, 0)) { TRACE(1, "H264\tIPC\tPP: Error when trying to create named pipe"); return false; } if (mknod((const char*) &ulName, S_IFIFO | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP, 0)) { TRACE(1, "H264\tIPC\tPP: Error when trying to create named pipe"); return false; } #endif /* HAVE_MKFIFO */ return true; } void H264EncCtx::closeAndRemovePipes() { if (pipesOpened) { dlStream.close(); if (dlStream.fail()) { TRACE(1, "H264\tIPC\tPP: Error when closing DL named pipe"); } ulStream.close(); if (ulStream.fail()) { TRACE(1, "H264\tIPC\tPP: Error when closing UL named pipe"); } pipesOpened = false; } if (pipesCreated) { if (std::remove((const char*) &ulName) == -1) TRACE(1, "H264\tIPC\tPP: Error when trying to remove UL named pipe - " << strerror(errno)); if (std::remove((const char*) &dlName) == -1) TRACE(1, "H264\tIPC\tPP: Error when trying to remove DL named pipe - " << strerror(errno)); pipesCreated = false; } } void H264EncCtx::readStream (char* data, unsigned bytes) { ulStream.read(data, bytes); if (ulStream.fail()) { TRACE(1, "H264\tIPC\tPP: Failure on reading - terminating"); closeAndRemovePipes(); } if (ulStream.bad()) { TRACE(1, "H264\tIPC\tPP: Bad flag set on reading - terminating"); closeAndRemovePipes(); } if (ulStream.eof()) { TRACE(1, "H264\tIPC\tPP: Received EOF - terminating"); closeAndRemovePipes(); } } void H264EncCtx::writeStream (const char* data, unsigned bytes) { dlStream.write(data, bytes); if (dlStream.bad()) { TRACE(1, "H264\tIPC\tPP: Bad flag set on writing - terminating"); closeAndRemovePipes(); } } void H264EncCtx::flushStream () { dlStream.flush(); if (dlStream.bad()) { TRACE(1, "H264\tIPC\tPP: Bad flag set on flushing - terminating"); closeAndRemovePipes(); } } bool H264EncCtx::findGplProcess() { char * env = ::getenv("PWLIBPLUGINDIR"); if (env == NULL) env = ::getenv("PTLIBPLUGINDIR"); if (env != NULL) { const char * token = strtok(env, DIR_TOKENISER); while (token != NULL) { if (checkGplProcessExists(token)) return true; token = strtok(NULL, DIR_TOKENISER); } } #ifdef LIB_DIR if (checkGplProcessExists(LIB_DIR)) return true; #endif if (checkGplProcessExists("/usr/lib")) return true; if (checkGplProcessExists("/usr/local/lib")) return true; return checkGplProcessExists("."); } bool H264EncCtx::checkGplProcessExists (const char * dir) { struct stat buffer; memset(gplProcess, 0, sizeof(gplProcess)); strncpy(gplProcess, dir, sizeof(gplProcess)); if (gplProcess[strlen(gplProcess)-1] != DIR_SEPERATOR[0]) strcat(gplProcess, DIR_SEPERATOR); strcat(gplProcess, VC_PLUGIN_DIR); if (gplProcess[strlen(gplProcess)-1] != DIR_SEPERATOR[0]) strcat(gplProcess, DIR_SEPERATOR); strcat(gplProcess, GPL_PROCESS_FILENAME); if (stat(gplProcess, &buffer ) ) { TRACE(4, "H264\tIPC\tPP: Couldn't find GPL process executable in " << gplProcess); return false; } TRACE(4, "H264\tIPC\tPP: Found GPL process executable in " << gplProcess); return true; } void H264EncCtx::execGplProcess() { unsigned msg; unsigned status = 0; if (execl(gplProcess,"h264_video_pwplugin_helper", dlName,ulName, NULL) == -1) { TRACE(1, "H264\tIPC\tPP: Error when trying to execute GPL process " << gplProcess << " - " << strerror(errno)); cpDLStream.open(dlName, std::ios::binary); if (cpDLStream.fail()) { TRACE (1, "H264\tIPC\tCP: Error when opening DL named pipe"); exit (1); } cpULStream.open(ulName,std::ios::binary); if (cpULStream.fail()) { TRACE (1, "H264\tIPC\tCP: Error when opening UL named pipe"); exit (1); } cpDLStream.read((char*)&msg, sizeof(msg)); if (cpDLStream.fail()) { TRACE (1, "H264\tIPC\tCP: Failure on reading - terminating"); cpCloseAndExit(); } if (cpDLStream.bad()) { TRACE (1, "H264\tIPC\tCP: Bad flag set on reading - terminating"); cpCloseAndExit(); } if (cpDLStream.eof()) { TRACE (1, "H264\tIPC\tCP: Received EOF - terminating"); exit (1); cpCloseAndExit(); } cpULStream.write((char*)&msg, sizeof(msg)); if (cpULStream.bad()) { TRACE (1, "H264\tIPC\tCP: Bad flag set on writing - terminating"); cpCloseAndExit(); } cpULStream.write((char*)&status, sizeof(status)); if (cpULStream.bad()) { TRACE (1, "H264\tIPC\tCP: Bad flag set on writing - terminating"); cpCloseAndExit(); } cpULStream.flush(); if (cpULStream.bad()) { TRACE (1, "H264\tIPC\tCP: Bad flag set on flushing - terminating"); } cpCloseAndExit(); } } void H264EncCtx::cpCloseAndExit() { cpDLStream.close(); if (cpDLStream.fail()) { TRACE (1, "H264\tIPC\tCP: Error when closing DL named pipe"); } cpULStream.close(); if (cpULStream.fail()) { TRACE (1, "H264\tIPC\tCP: Error when closing UL named pipe"); } exit(1); } h323plus/plugins/video/H.264/h264pipe_unix.h0000644000175000017500000000415311341106277017161 0ustar markmark/* * H.264 Plugin codec for OpenH323/OPAL * * Copyright (C) Matthias Schneider, All Rights Reserved * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * Contributor(s): Matthias Schneider (ma30002000@yahoo.de) * */ /* Notes ----- */ #ifndef __H264PIPE_H__ #define __H264PIPE_H__ 1 #include "shared/pipes.h" #include typedef unsigned char u_char; class H264EncCtx { public: H264EncCtx(); ~H264EncCtx(); bool Load(); bool isLoaded() { return loaded; }; void call(unsigned msg); void call(unsigned msg, unsigned value); void call(unsigned msg , const u_char * src, unsigned & srcLen, u_char * dst, unsigned & dstLen, unsigned & headerLen, unsigned int & flags, int & ret); unsigned int GetInstanceNumber() { return instances; }; protected: bool createPipes(); void closeAndRemovePipes(); void writeStream (const char* data, unsigned bytes); void readStream (char* data, unsigned bytes); void flushStream (); bool findGplProcess(); bool checkGplProcessExists (const char * dir); void execGplProcess(); void cpCloseAndExit(); char dlName [512]; char ulName [512]; char gplProcess [512]; std::ofstream dlStream; std::ifstream ulStream; unsigned width; unsigned height; unsigned size; bool startNewFrame; bool loaded; bool pipesCreated; bool pipesOpened; // only for signaling failed execution of helper process std::ifstream cpDLStream; std::ofstream cpULStream; private: // stores no. of insances created static unsigned int instances; }; #endif /* __PIPE_H__ */ h323plus/plugins/video/H.264/gpl/0000755000175000017500000000000011627140106015157 5ustar markmarkh323plus/plugins/video/H.264/gpl/Makefile.in0000644000175000017500000001100511447645562017241 0ustar markmark# # Makefile for GSM 06.10 # # Copyright (C) 2004 Post Increment, All Rights Reserved # # The contents of this file are subject to the Mozilla Public License # Version 1.0 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is Open H323 library. # # The Initial Developer of the Original Code is Post Increment # # Contributor(s): ______________________________________. # # $Log: Makefile.in,v $ # Revision 1.3 2010/09/26 13:32:34 willamowius # optional define # # Revision 1.2 2010/09/09 09:51:16 willamowius # enable warnings, disable strict-aliasing optimization, because of conflict with PDynaLink # # Revision 1.1 2010/02/24 02:19:43 shorne # First commit of h323plus mirror # # Revision 1.4 2007/09/02 12:03:19 dominance # * dynamically load libx264 at runtime on *nix # * Improved error handling # # Patch received from and thus thanks goes to Matthias Schneider. # # Revision 1.3 2007/08/23 19:20:15 dominance # fix compilation of H.264 if CFLAGS is present from make # # Revision 1.2 2007/08/22 21:51:26 dsandras # Applied patch from Matthias Schneider to share # things between codecs. Huge thanks! # # Revision 1.1 2007/06/16 21:37:00 dsandras # Added H.264 support thanks to Matthias Schneider . # Thanks a lot ! # # Baseline Profile: # no B-frames # We make use of the baseline profile (which is the designated profile for interactive vide) , # that means: # no B-Frames (too much latency in interactive video) # CBR (we want to get the max. quality making use of all the bitrate that is available) # We allow one exeption: configuring a bitrate of > 786 kbit/s # # This plugin implements # - Single Time Aggregation Packets A # - Single NAL units # - Fragmentation Units # like described in RFC3984 # # It requires x264 and ffmpeg. # # Revision 1.5 2007/04/19 06:09:04 csoutheren # Fixed plugin build system to use better detection for OSX # Resolved 1636262 - Fix for audio plugins for OSX # # Revision 1.4 2006/10/10 01:42:55 csoutheren # Applied patches from Ekiga bug 360869 - fix OpenSolaris build problems # Thanks to Boying Lu # # Revision 1.3 2006/08/20 00:32:25 csoutheren # Added missing files to Makefile # # Revision 1.2 2006/08/12 10:59:14 rjongbloed # Added Linux build for H.261 plug-in. # VC_PLUGIN_DIR=@VC_PLUGIN_DIR@ prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ target_os=@target_os@ WIN32=@WIN32@ SHAREDDIR = ../shared COMMONDIR = ../../common PLUGINDIR = ../../../ OBJDIR = ./obj BASENAME=h264 SONAME =$(BASENAME) CC =@CC@ CFLAGS =@CFLAGS@ CXX =@CXX@ PLUGINEXT =@PLUGINEXT@ STDCCFLAGS =@STDCCFLAGS@ LDFLAGS =@LDFLAGS@ X264_CFLAGS =@X264_CFLAGS@ X264_LIBS =@X264_LIBS@ X264_LINK_STATIC=@X264_LINK_STATIC@ DL_LIBS =@DL_LIBS@ EXTRACCFLAGS += $(X264_CFLAGS) -I$(COMMONDIR) -I$(PLUGINDIR) # for best quality, regardless of bandwith usage #EXTRACCFLAGS += -DH264_OPTIMAL_QUALITY=1 STDCCFLAGS += -Wall -Wformat -Wformat-security -Wreorder -fno-strict-aliasing vpath %.cxx $(SHAREDDIR) vpath %.cxx $(COMMONDIR) vpath %.o $(OBJDIR) SRCS += $(SHAREDDIR)/h264frame.cxx \ $(COMMONDIR)/trace.cxx \ enc-ctx.cxx \ ifeq ($(WIN32),yes) SRCS += h264helper_win32.cxx PLUGIN = ./$(BASENAME)_video_pwplugin_helper.exe else SRCS += h264helper_unix.cxx PLUGIN = ./$(BASENAME)_video_pwplugin_helper ifneq ($(X264_LINK_STATIC),yes) SRCS += x264loader_unix.cxx endif X264_LIBS += $(DL_LIBS) endif $(OBJDIR)/%.o : %.cxx @mkdir -p $(OBJDIR) >/dev/null 2>&1 $(CXX) -I../../../include -I.. $(EXTRACCFLAGS) $(STDCCFLAGS) $(OPTCCFLAGS) $(CFLAGS) -c $< -o $@ $(OBJDIR)/%.o : %.c @mkdir -p $(OBJDIR) >/dev/null 2>&1 $(CC) -I../../../include -I.. $(EXTRACCFLAGS) $(STDCCFLAGS) $(OPTCCFLAGS) $(CFLAGS) -c $< -o $@ OBJECTS = $(addprefix $(OBJDIR)/,$(patsubst %.c,%.o,$(patsubst %.cxx,%.o,$(notdir $(SRCS))))) $(PLUGIN): $(OBJECTS) ifeq (,$(findstring solaris,$(target_os))) $(CXX) -o $@ $^ $(X264_LIBS) else $(CXX) $@ -o $@ $^ $(X264_LIBS) endif install: mkdir -p $(DESTDIR)$(libdir)/$(VC_PLUGIN_DIR) install $(PLUGIN) $(DESTDIR)$(libdir)/$(VC_PLUGIN_DIR) uninstall: rm -f $(DESTDIR)$(libdir)/$(VC_PLUGIN_DIR)/$(PLUGIN) clean: rm -f $(OBJECTS) $(PLUGIN) ########################################### h323plus/plugins/video/H.264/gpl/x264loader_win32.h0000644000175000017500000000361711445325673020267 0ustar markmark/* * H.264 Plugin codec for OpenH323/OPAL * * Copyright (C) 2007 Matthias Schneider, All Rights Reserved * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __X264LOADER_H__ #define __X264LOADER_H__ 1 #if defined(_WIN32) && _MSC_VER < 1600 #include "../../common/vs-stdint.h" #else #include #endif extern "C" { #include }; #include typedef void (*Function)(); class X264Library { public: X264Library(); ~X264Library(); bool Load(); bool isLoaded() const { return _isLoaded; } bool GetFunction(const char * name, Function & func); x264_t *(*Xx264_encoder_open)(x264_param_t *); void (*Xx264_param_default)(x264_param_t *); int (*Xx264_encoder_encode)(x264_t *, x264_nal_t **, int *, x264_picture_t *, x264_picture_t *); int (*Xx264_nal_encode)(void *, int *, int b_annexb, x264_nal_t *nal); int (*Xx264_encoder_reconfig)(x264_t *, x264_param_t *); int (*Xx264_encoder_headers)(x264_t *, x264_nal_t **, int *); void (*Xx264_encoder_close)(x264_t *); #if X264_BUILD >= 98 void (*Xx264_picture_init)(x264_picture_t *pic); #endif protected: bool Open(const char *name); bool _isLoaded; HINSTANCE _dynamicLibrary; }; #endif /*__X264LOADER_H__ 1*/ h323plus/plugins/video/H.264/gpl/h264_helper_2008.vcproj0000644000175000017500000001060611530137127021104 0ustar markmark h323plus/plugins/video/H.264/gpl/enc-ctx.h0000644000175000017500000000760111513065437016704 0ustar markmark/* * H.264 Plugin codec for OpenH323/OPAL * * Copyright (C) 2007 Matthias Schneider, All Rights Reserved * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __ENC_CTX_H__ #define __ENC_CTX_H__ 1 #include #if defined(_WIN32) && _MSC_VER < 1600 #include "../../common/vs-stdint.h" #else #include #endif #include "../shared/h264frame.h" extern "C" { #include }; #if X264_BUILD < 80 #if _WIN32 #pragma message("X264 Build > 79 required for single NAL support") #else #warning("X264 Build > 79 required for single NAL support") #endif #endif #if defined(_WIN32) /* to keep compatibility with old build */ #define X264_LINK_STATIC 1 #endif #define CIF_WIDTH 352 #define CIF_HEIGHT 288 #define QCIF_WIDTH 176 #define QCIF_HEIGHT 144 #define IT_QCIF 0 #define IT_CIF 1 #define H264_BITRATE 768000 #define H264_PAYLOAD_SIZE 1400 #define H264_SINGLE_NAL_SIZE 1400 #define H264_FRAME_RATE 30 #define H264_KEY_FRAME_INTERVAL (30*60) // Send a key frame no more than once every minute (unless requested through fast update) #define H264_PROFILE_LEVEL ((66 << 16) + (0xC0 << 8) + 30) #define H264_TSTO 31 #define H264_MIN_QUANT 10 #if X264_LINK_STATIC #define X264_ENCODER_OPEN x264_encoder_open #define X264_PARAM_DEFAULT x264_param_default #define X264_ENCODER_ENCODE x264_encoder_encode #define X264_NAL_ENCODE x264_nal_encode #define X264_ENCODER_RECONFIG x264_encoder_reconfig #define X264_ENCODER_HEADERS x264_encoder_headers #define X264_ENCODER_CLOSE x264_encoder_close #if X264_BUILD >= 98 #define X264_PICTURE_INIT x264_picture_init #endif #else #if defined(_WIN32) #include "x264loader_win32.h" #else #include "x264loader_unix.h" #endif #define X264_ENCODER_OPEN X264Lib.Xx264_encoder_open #define X264_PARAM_DEFAULT X264Lib.Xx264_param_default #define X264_ENCODER_ENCODE X264Lib.Xx264_encoder_encode #define X264_NAL_ENCODE X264Lib.Xx264_nal_encode #define X264_ENCODER_RECONFIG X264Lib.Xx264_encoder_reconfig #define X264_ENCODER_HEADERS X264Lib.Xx264_encoder_headers #define X264_ENCODER_CLOSE X264Lib.Xx264_encoder_close #if X264_BUILD >= 98 #define X264_PICTURE_INIT X264Lib.Xx264_picture_init #endif #endif class X264EncoderContext { public: X264EncoderContext (); ~X264EncoderContext (); int EncodeFrames (const unsigned char * src, unsigned & srcLen, unsigned char * dst, unsigned & dstLen, unsigned int & flags); void fastUpdateRequested(void); void SetMaxRTPFrameSize (unsigned size); void SetMaxKeyFramePeriod (unsigned period); void SetTargetBitrate (unsigned rate); void SetFrameWidth (unsigned width); void SetFrameHeight (unsigned height); void SetFrameRate (unsigned rate); void SetTSTO (unsigned tsto); void SetProfileLevel (unsigned profileLevel); void SetMaxNALSize (unsigned size); void ApplyOptions (); protected: x264_t* _codec; x264_param_t _context; x264_picture_t _inputFrame; H264Frame* _txH264Frame; uint32_t _PFramesSinceLastIFrame; // counts frames since last keyframe uint32_t _IFrameInterval; // confd frames between keyframes int _frameCounter; bool _fastUpdateRequested; } ; #endif /* __ENC_CTX_H__ */ h323plus/plugins/video/H.264/gpl/x264loader_win32.cxx0000644000175000017500000001122511462246024020623 0ustar markmark/* * H.264 Plugin codec for OpenH323/OPAL * * Copyright (C) 2007 Matthias Schneider, All Rights Reserved * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "plugin-config.h" #include "x264loader_win32.h" #include "../../common/trace.h" //#include #include #include #define snprintf _snprintf X264Library::X264Library() { _dynamicLibrary = NULL; _isLoaded = false; } X264Library::~X264Library() { if (_dynamicLibrary != NULL) { FreeLibrary(_dynamicLibrary); _dynamicLibrary = NULL; } } bool X264Library::Load() { if (_isLoaded) return true; char dllName [512]; snprintf(dllName, sizeof(dllName), "libX264-%c.dll", X264_BUILD); if ( !Open(dllName)) { TRACE (1, "H264\tDYNA\tFailed to load x264 library - codec disabled"); return false; } bool open_found = false; if (GetFunction("x264_encoder_open", (Function &)Xx264_encoder_open)) { open_found = true; } if (!open_found) { // try function name with appended build number before failing char fktname[128]; sprintf(fktname, "x264_encoder_open_%d", X264_BUILD); TRACE (1, "H264\tDYNA\tTry " << fktname); if (GetFunction(fktname, (Function &)Xx264_encoder_open)) { TRACE (2, "H264\tDYNA\tLoaded " << fktname); open_found = true; } } if (!open_found) { // try range of possible version numbers for (unsigned ver = 80; ver < 200; ++ver) { char fktname[128]; sprintf(fktname, "x264_encoder_open_%d", ver); TRACE (1, "H264\tDYNA\tTry " << fktname); if (GetFunction(fktname, (Function &)Xx264_encoder_open)) { TRACE (2, "H264\tDYNA\tLoaded " << fktname); open_found = true; } } } if (!open_found) { TRACE (1, "H264\tDYNA\tFailed to load x264_encoder_open"); return false; } if (!GetFunction("x264_param_default", (Function &)Xx264_param_default)) { TRACE (1, "H264\tDYNA\tFailed to load x264_param_default"); return false; } if (!GetFunction("x264_encoder_encode", (Function &)Xx264_encoder_encode)) { TRACE (1, "H264\tDYNA\tFailed to load x264_encoder_encode"); return false; } if (!GetFunction("x264_nal_encode", (Function &)Xx264_nal_encode)) { TRACE (1, "H264\tDYNA\tFailed to load x264_nal_encode"); return false; } if (!GetFunction("x264_encoder_reconfig", (Function &)Xx264_encoder_reconfig)) { TRACE (1, "H264\tDYNA\tFailed to load x264_encoder_reconfig"); return false; } if (!GetFunction("x264_encoder_headers", (Function &)Xx264_encoder_headers)) { TRACE (1, "H264\tDYNA\tFailed to load x264_encoder_headers"); return false; } if (!GetFunction("x264_encoder_close", (Function &)Xx264_encoder_close)) { TRACE (1, "H264\tDYNA\tFailed to load x264_encoder_close"); return false; } #if X264_BUILD >= 98 if (!GetFunction("x264_picture_init", (Function &)Xx264_picture_init)) { TRACE (1, "H264\tDYNA\tFailed to load x264_picture_init"); return false; } #endif if (!GetFunction("x264_encoder_close", (Function &)Xx264_encoder_close)) { TRACE (1, "H264\tDYNA\tFailed to load x264_encoder_close"); return false; } TRACE (4, "H264\tDYNA\tLoader was compiled with x264 build " << X264_BUILD << " present" ); _isLoaded = true; TRACE (4, "H264\tDYNA\tSuccessfully loaded libx264 library and verified functions"); return true; } bool X264Library::Open(const char *name) { TRACE(4, "H264\tDYNA\tTrying to open x264 library " << name) if ( strlen(name) == 0 ) return false; _dynamicLibrary = LoadLibraryEx(name, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); if (_dynamicLibrary == NULL) { TRACE(1, "H264\tDYNA\tError loading " << name); return false; } TRACE(4, "H264\tDYNA\tSuccessfully loaded " << name); return true; } bool X264Library::GetFunction(const char * name, Function & func) { if (_dynamicLibrary == NULL) return false; FARPROC pFunction = GetProcAddress(_dynamicLibrary, name); if (pFunction == NULL) return false; func = (Function &) pFunction; return true; } h323plus/plugins/video/H.264/gpl/h264helper_win32.cxx0000644000175000017500000002263011513065437020622 0ustar markmark/* * H.264 Plugin codec for OpenH323/OPAL * * Copyright (C) 2007 Matthias Schneider, All Rights Reserved * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "../shared/pipes.h" #ifdef _MSC_VER #include "../../common/trace.h" #define snprintf _snprintf #else #include "trace.h" #endif #include "enc-ctx.h" #include #include // TODO: we should dynamically adjust this buffer size to the max frame size used //#define MAX_FRAME_SIZE 1382412 // 720p //#define MAX_FRAME_SIZE 1474572 // 1280x768 H.239 //#define MAX_FRAME_SIZE 3110412 // 1080p #define MAX_FRAME_SIZE 3317772 // 1920 x 1152 H.239 HANDLE stream; unsigned msg; unsigned val; unsigned srcLen; unsigned dstLen; unsigned headerLen; unsigned char src [MAX_FRAME_SIZE]; unsigned char dst [MAX_FRAME_SIZE]; unsigned flags; int ret; X264EncoderContext* x264; const char* ErrorMessage() { static char string [1024]; DWORD dwMsgLen; memset (string, 0, sizeof (string)); dwMsgLen = FormatMessageA (FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError (), MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR) string, sizeof (string)-1, NULL); if (dwMsgLen) { string [ strlen(string) - 2 ] = 0; snprintf (string, sizeof (string), "%s (%u)", string, (int) GetLastError ()); } else { snprintf (string, sizeof (string), "%u", (int) GetLastError ()); } return string; } void closeAndExit() { if (!CloseHandle(stream)) TRACE(1, "H264\tIPC\tCP: Failure on closing Handle (" << ErrorMessage() << ")"); exit(1); } void openPipe(const char* name) { DWORD dwMode; if (!WaitNamedPipe(name, NMPWAIT_USE_DEFAULT_WAIT)) { TRACE(1, "H264\tIPC\tCP: Error when waiting for Pipe (" << ErrorMessage() << ")"); exit (1); } stream = CreateFile( name, // pipe name GENERIC_READ | GENERIC_WRITE, // read and write access 0, // no sharing NULL, // default security attributes OPEN_EXISTING, // opens existing pipe 0, // default attributes NULL); // no template file if (stream == INVALID_HANDLE_VALUE) { TRACE(1, "H264\tIPC\tCP: Could not open Pipe (" << ErrorMessage() << ")"); exit (1); } // The pipe connected; change to message-read mode. dwMode = PIPE_READMODE_MESSAGE; if (!SetNamedPipeHandleState( stream, // pipe handle &dwMode, // new pipe mode NULL, // don't set maximum bytes NULL)) // don't set maximum time { TRACE(1, "H264\tIPC\tCP: Failure on activating message mode (" << ErrorMessage() << ")"); closeAndExit(); } } void readStream (HANDLE stream, LPVOID data, unsigned bytes) { DWORD bytesRead; BOOL fSuccess; fSuccess = ReadFile( stream, // handle to pipe data, // buffer to receive data bytes, // size of buffer &bytesRead, // number of bytes read NULL // blocking IO ); if (!fSuccess) { TRACE(1, "H264\tIPC\tCP: Failure on reading - terminating (" << ErrorMessage() << ")"); closeAndExit(); } if (bytes != bytesRead) { TRACE(1, "H264\tIPC\tCP: Failure on reading - terminating (Read " << bytesRead << " bytes, expected " << bytes); closeAndExit(); } } void writeStream (HANDLE stream, LPCVOID data, unsigned bytes) { DWORD bytesWritten; BOOL fSuccess; fSuccess = WriteFile( stream, // handle to pipe data, // buffer to write from bytes, // number of bytes to write &bytesWritten, // number of bytes written NULL // not overlapped I/O ); if (!fSuccess) { TRACE(1, "H264\tIPC\tCP: Failure on writing - terminating (" << ErrorMessage() << ")"); closeAndExit(); } if (bytes != bytesWritten) { TRACE(1, "H264\tIPC\tCP: Failure on writing - terminating (Written " << bytesWritten << " bytes, intended " << bytes); closeAndExit(); } } void flushStream (HANDLE stream) { if (!FlushFileBuffers(stream)) { TRACE(1, "H264\tIPC\tPP: Failure on flushing - terminating (" << ErrorMessage() << ")"); closeAndExit(); } } int main(int argc, char *argv[]) { if (argc != 2) { fprintf(stderr, "Not to be executed directly - exiting\n"); exit (1); } char * debug_level = getenv ("PTLIB_TRACE_CODECS"); if (debug_level!=NULL) { Trace::SetLevel(atoi(debug_level)); } else { Trace::SetLevel(0); } debug_level = getenv ("PTLIB_TRACE_CODECS_USER_PLANE"); if (debug_level!=NULL) { Trace::SetLevelUserPlane(atoi(debug_level)); } else { Trace::SetLevelUserPlane(0); } x264 = NULL; dstLen=1400; openPipe(argv[1]); while (1) { readStream(stream, (LPVOID)&msg, sizeof(msg)); switch (msg) { case H264ENCODERCONTEXT_CREATE: x264 = new X264EncoderContext(); writeStream(stream,(LPCVOID)&msg, sizeof(msg)); flushStream(stream); break; case H264ENCODERCONTEXT_DELETE:; delete x264; writeStream(stream,(LPCVOID)&msg, sizeof(msg)); flushStream(stream); break; case APPLY_OPTIONS:; x264->ApplyOptions (); writeStream(stream,(LPCVOID)&msg, sizeof(msg)); flushStream(stream); break; case SET_TARGET_BITRATE: readStream(stream, (LPVOID)&val, sizeof(val)); x264->SetTargetBitrate (val); writeStream(stream,(LPCVOID)&msg, sizeof(msg)); flushStream(stream); break; case SET_FRAME_RATE: readStream(stream, (LPVOID)&val, sizeof(val)); x264->SetFrameRate (val); writeStream(stream,(LPCVOID)&msg, sizeof(msg)); flushStream(stream); break; case SET_FRAME_WIDTH: readStream(stream, (LPVOID)&val, sizeof(val)); x264->SetFrameWidth (val); writeStream(stream,(LPCVOID)&msg, sizeof(msg)); flushStream(stream); break; case SET_FRAME_HEIGHT: readStream(stream, (LPVOID)&val, sizeof(val)); x264->SetFrameHeight (val); writeStream(stream,(LPCVOID)&msg, sizeof(msg)); flushStream(stream); break; case SET_MAX_KEY_FRAME_PERIOD: readStream(stream, (char*)&val, sizeof(val)); x264->SetMaxKeyFramePeriod (val); writeStream(stream,(char*)&msg, sizeof(msg)); flushStream(stream); break; case SET_TSTO: readStream(stream, (char*)&val, sizeof(val)); x264->SetTSTO (val); writeStream(stream,(char*)&msg, sizeof(msg)); flushStream(stream); break; case SET_PROFILE_LEVEL: readStream(stream, (char*)&val, sizeof(val)); x264->SetProfileLevel (val); writeStream(stream,(char*)&msg, sizeof(msg)); flushStream(stream); break; case ENCODE_FRAMES: readStream(stream, (LPVOID)&srcLen, sizeof(srcLen)); readStream(stream, (LPVOID)&src, srcLen); readStream(stream, (LPVOID)&headerLen, sizeof(headerLen)); readStream(stream, (LPVOID)&dst, headerLen); readStream(stream, (LPVOID)&flags, sizeof(flags)); case ENCODE_FRAMES_BUFFERED: ret = (x264->EncodeFrames( src, srcLen, dst, dstLen, flags)); writeStream(stream,(LPCVOID)&msg, sizeof(msg)); writeStream(stream,(LPCVOID)&dstLen, sizeof(dstLen)); writeStream(stream,(LPCVOID)&dst, dstLen); writeStream(stream,(LPCVOID)&flags, sizeof(flags)); writeStream(stream,(LPCVOID)&ret, sizeof(ret)); flushStream(stream); break; case SET_MAX_FRAME_SIZE: readStream(stream, (LPVOID)&val, sizeof(val)); x264->SetMaxRTPFrameSize (val); writeStream(stream,(LPCVOID)&msg, sizeof(msg)); flushStream(stream); break; case FASTUPDATE_REQUESTED: x264->fastUpdateRequested(); writeStream(stream,(LPCVOID)&msg, sizeof(msg)); flushStream(stream); break; case SET_MAX_NALSIZE: readStream(stream, (LPVOID)&val, sizeof(val)); x264->SetMaxNALSize (val); writeStream(stream,(LPCVOID)&msg, sizeof(msg)); flushStream(stream); break; default: break; } } return 0; } h323plus/plugins/video/H.264/gpl/x264loader_unix.cxx0000644000175000017500000001135511462246024020650 0ustar markmark/* * H.264 Plugin codec for OpenH323/OPAL * * Copyright (C) 2007 Matthias Schneider, All Rights Reserved * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "plugin-config.h" #include "x264loader_unix.h" #include "trace.h" #include #include #include X264Library::X264Library() { _dynamicLibrary = NULL; _isLoaded = false; } X264Library::~X264Library() { if (_dynamicLibrary != NULL) { dlclose(_dynamicLibrary); _dynamicLibrary = NULL; } } bool X264Library::Load() { if (_isLoaded) return true; if ( #ifdef X264_LIB_NAME !Open(X264_LIB_NAME) && #endif !Open("libx264.so") && !Open("libx264")) { TRACE (1, "H264\tDYNA\tFailed to load x264 library - codec disabled"); return false; } bool open_found = false; if (GetFunction("x264_encoder_open", (Function &)Xx264_encoder_open)) { open_found = true; } if (!open_found) { // try function name with appended build number before failing char fktname[128]; sprintf(fktname, "x264_encoder_open_%d", X264_BUILD); TRACE (1, "H264\tDYNA\tTry " << fktname); if (GetFunction(fktname, (Function &)Xx264_encoder_open)) { TRACE (2, "H264\tDYNA\tLoaded " << fktname); open_found = true; } } if (!open_found) { // try range of possible version numbers for (unsigned ver = 80; ver < 200; ++ver) { char fktname[128]; sprintf(fktname, "x264_encoder_open_%d", ver); TRACE (1, "H264\tDYNA\tTry " << fktname); if (GetFunction(fktname, (Function &)Xx264_encoder_open)) { TRACE (2, "H264\tDYNA\tLoaded " << fktname); open_found = true; } } } if (!open_found) { TRACE (1, "H264\tDYNA\tFailed to load x264_encoder_open"); return false; } if (!GetFunction("x264_param_default", (Function &)Xx264_param_default)) { TRACE (1, "H264\tDYNA\tFailed to load x264_param_default"); return false; } if (!GetFunction("x264_encoder_encode", (Function &)Xx264_encoder_encode)) { TRACE (1, "H264\tDYNA\tFailed to load x264_encoder_encode"); return false; } if (!GetFunction("x264_nal_encode", (Function &)Xx264_nal_encode)) { TRACE (1, "H264\tDYNA\tFailed to load x264_nal_encode"); return false; } if (!GetFunction("x264_encoder_reconfig", (Function &)Xx264_encoder_reconfig)) { TRACE (1, "H264\tDYNA\tFailed to load x264_encoder_reconfig"); return false; } if (!GetFunction("x264_encoder_headers", (Function &)Xx264_encoder_headers)) { TRACE (1, "H264\tDYNA\tFailed to load x264_encoder_headers"); return false; } if (!GetFunction("x264_encoder_close", (Function &)Xx264_encoder_close)) { TRACE (1, "H264\tDYNA\tFailed to load x264_encoder_close"); return false; } #if X264_BUILD >= 98 if (!GetFunction("x264_picture_init", (Function &)Xx264_picture_init)) { TRACE (1, "H264\tDYNA\tFailed to load x264_picture_init"); return false; } #endif if (!GetFunction("x264_encoder_close", (Function &)Xx264_encoder_close)) { TRACE (1, "H264\tDYNA\tFailed to load x264_encoder_close"); return false; } TRACE (4, "H264\tDYNA\tLoader was compiled with x264 build " << X264_BUILD << " present" ); _isLoaded = true; TRACE (4, "H264\tDYNA\tSuccessfully loaded libx264 library and verified functions"); return true; } bool X264Library::Open(const char *name) { TRACE(4, "H264\tDYNA\tTrying to open x264 library " << name) if ( strlen(name) == 0 ) return false; _dynamicLibrary = dlopen(name, RTLD_NOW); if (_dynamicLibrary == NULL) { char * error = (char *) dlerror(); if (error != NULL) { TRACE(4, "H264\tDYNA\tCould not load " << name << " - " << error) } else { TRACE(4, "H264\tDYNA\tCould not load " << name); } return false; } TRACE(4, "H264\tDYNA\tSuccessfully loaded " << name); return true; } bool X264Library::GetFunction(const char * name, Function & func) { if (_dynamicLibrary == NULL) return false; void* pFunction = dlsym(_dynamicLibrary, (const char *)name); if (pFunction == NULL) return false; func = (Function &) pFunction; return true; } h323plus/plugins/video/H.264/gpl/x264loader_unix.h0000644000175000017500000000344111403162543020270 0ustar markmark/* * H.264 Plugin codec for OpenH323/OPAL * * Copyright (C) 2007 Matthias Schneider, All Rights Reserved * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __X264LOADER_H__ #define __X264LOADER_H__ 1 #include extern "C" { #include }; typedef void (*Function)(); class X264Library { public: X264Library(); ~X264Library(); bool Load(); bool isLoaded() const { return _isLoaded; } bool GetFunction(const char * name, Function & func); x264_t *(*Xx264_encoder_open)(x264_param_t *); void (*Xx264_param_default)(x264_param_t *); int (*Xx264_encoder_encode)(x264_t *, x264_nal_t **, int *, x264_picture_t *, x264_picture_t *); int (*Xx264_nal_encode)(void *, int *, int b_annexb, x264_nal_t *nal); int (*Xx264_encoder_reconfig)(x264_t *, x264_param_t *); int (*Xx264_encoder_headers)(x264_t *, x264_nal_t **, int *); void (*Xx264_encoder_close)(x264_t *); #if X264_BUILD >= 98 void (*Xx264_picture_init)(x264_picture_t *pic); #endif protected: bool Open(const char *name); bool _isLoaded; void * _dynamicLibrary; }; #endif /*__X264LOADER_H__ 1*/ h323plus/plugins/video/H.264/gpl/h264helper_unix.cxx0000644000175000017500000001620411627140051020633 0ustar markmark/* * H.264 Plugin codec for OpenH323/OPAL * * Copyright (C) 2007 Matthias Schneider, All Rights Reserved * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "plugin-config.h" #include "shared/pipes.h" #include "enc-ctx.h" #include #include #include "trace.h" #include #ifndef X264_LINK_STATIC #include "x264loader_unix.h" #endif // TODO: we should dynamically adjust this buffer size to the max frame size used //#define MAX_FRAME_SIZE 1382412 // 720p //#define MAX_FRAME_SIZE 1474572 // 1280x768 H.239 //#define MAX_FRAME_SIZE 3110412 // 1080p #define MAX_FRAME_SIZE 3317772 // 1920 x 1152 H.239 std::ifstream dlStream; std::ofstream ulStream; unsigned msg; unsigned val; unsigned srcLen; unsigned dstLen; unsigned headerLen; unsigned char src [MAX_FRAME_SIZE]; unsigned char dst [MAX_FRAME_SIZE]; unsigned flags; int ret; X264EncoderContext* x264; #ifndef X264_LINK_STATIC extern X264Library X264Lib; #endif void closeAndExit() { dlStream.close(); ulStream.close(); exit(1); } void writeStream (std::ofstream & stream, const char* data, unsigned bytes) { stream.write(data, bytes); if (stream.bad()) { TRACE (1, "H264\tIPC\tCP: Bad flag set on writing - terminating"); closeAndExit(); } } void readStream (std::ifstream & stream, char* data, unsigned bytes) { stream.read(data, bytes); if (stream.fail()) { TRACE (1, "H264\tIPC\tCP: Terminating"); closeAndExit(); } if (stream.bad()) { TRACE (1, "H264\tIPC\tCP: Bad flag set on reading - terminating"); closeAndExit(); } if (stream.eof()) { TRACE (1, "H264\tIPC\tCP: Received EOF - terminating"); closeAndExit(); } } void flushStream (std::ofstream & stream) { stream.flush(); if (stream.bad()) { TRACE (1, "H264\tIPC\tCP: Bad flag set on flushing - terminating"); closeAndExit(); } } int main(int argc, char *argv[]) { unsigned status; if (argc != 3) { fprintf(stderr, "Not to be executed directly - exiting\n"); exit (1); } char * debug_level = getenv ("PTLIB_TRACE_CODECS"); if (debug_level!=NULL) { Trace::SetLevel(atoi(debug_level)); } else { Trace::SetLevel(0); } debug_level = getenv ("PTLIB_TRACE_CODECS_USER_PLANE"); if (debug_level!=NULL) { Trace::SetLevelUserPlane(atoi(debug_level)); } else { Trace::SetLevelUserPlane(0); } x264 = NULL; dstLen=1400; dlStream.open(argv[1], std::ios::binary); if (dlStream.fail()) { TRACE (1, "H264\tIPC\tCP: Error when opening DL named pipe"); exit (1); } ulStream.open(argv[2],std::ios::binary); if (ulStream.fail()) { TRACE (1, "H264\tIPC\tCP: Error when opening UL named pipe"); exit (1); } #ifndef X264_LINK_STATIC if (X264Lib.Load()) status = 1; else status = 0; #else status = 1; #endif readStream(dlStream, (char*)&msg, sizeof(msg)); writeStream(ulStream,(char*)&msg, sizeof(msg)); writeStream(ulStream,(char*)&status, sizeof(status)); flushStream(ulStream); if (status == 0) { TRACE (1, "H264\tIPC\tCP: Failed to load dynamic library - exiting"); closeAndExit(); } while (1) { readStream(dlStream, (char*)&msg, sizeof(msg)); switch (msg) { case H264ENCODERCONTEXT_CREATE: x264 = new X264EncoderContext(); writeStream(ulStream,(char*)&msg, sizeof(msg)); flushStream(ulStream); break; case H264ENCODERCONTEXT_DELETE:; delete x264; writeStream(ulStream,(char*)&msg, sizeof(msg)); flushStream(ulStream); break; case APPLY_OPTIONS:; x264->ApplyOptions (); writeStream(ulStream,(char*)&msg, sizeof(msg)); flushStream(ulStream); break; case SET_TARGET_BITRATE: readStream(dlStream, (char*)&val, sizeof(val)); x264->SetTargetBitrate (val); writeStream(ulStream,(char*)&msg, sizeof(msg)); flushStream(ulStream); break; case SET_FRAME_RATE: readStream(dlStream, (char*)&val, sizeof(val)); x264->SetFrameRate (val); writeStream(ulStream,(char*)&msg, sizeof(msg)); flushStream(ulStream); break; case SET_FRAME_WIDTH: readStream(dlStream, (char*)&val, sizeof(val)); x264->SetFrameWidth (val); writeStream(ulStream,(char*)&msg, sizeof(msg)); flushStream(ulStream); break; case SET_FRAME_HEIGHT: readStream(dlStream, (char*)&val, sizeof(val)); x264->SetFrameHeight (val); writeStream(ulStream,(char*)&msg, sizeof(msg)); flushStream(ulStream); break; case SET_MAX_KEY_FRAME_PERIOD: readStream(dlStream, (char*)&val, sizeof(val)); x264->SetMaxKeyFramePeriod (val); writeStream(ulStream,(char*)&msg, sizeof(msg)); flushStream(ulStream); break; case SET_TSTO: readStream(dlStream, (char*)&val, sizeof(val)); x264->SetTSTO (val); writeStream(ulStream,(char*)&msg, sizeof(msg)); flushStream(ulStream); break; case SET_PROFILE_LEVEL: readStream(dlStream, (char*)&val, sizeof(val)); x264->SetProfileLevel (val); writeStream(ulStream,(char*)&msg, sizeof(msg)); flushStream(ulStream); break; case ENCODE_FRAMES: readStream(dlStream, (char*)&srcLen, sizeof(srcLen)); readStream(dlStream, (char*)&src, srcLen); readStream(dlStream, (char*)&headerLen, sizeof(headerLen)); readStream(dlStream, (char*)&dst, headerLen); readStream(dlStream, (char*)&flags, sizeof(flags)); case ENCODE_FRAMES_BUFFERED: ret = (x264->EncodeFrames( src, srcLen, dst, dstLen, flags)); writeStream(ulStream,(char*)&msg, sizeof(msg)); writeStream(ulStream,(char*)&dstLen, sizeof(dstLen)); writeStream(ulStream,(char*)&dst, dstLen); writeStream(ulStream,(char*)&flags, sizeof(flags)); writeStream(ulStream,(char*)&ret, sizeof(ret)); flushStream(ulStream); break; case SET_MAX_FRAME_SIZE: readStream(dlStream, (char*)&val, sizeof(val)); x264->SetMaxRTPFrameSize (val); writeStream(ulStream,(char*)&msg, sizeof(msg)); flushStream(ulStream); break; case FASTUPDATE_REQUESTED: x264->fastUpdateRequested(); writeStream(ulStream,(char*)&msg, sizeof(msg)); flushStream(ulStream); break; case SET_MAX_NALSIZE: readStream(dlStream, (char*)&val, sizeof(val)); x264->SetMaxNALSize (val); writeStream(ulStream,(char*)&msg, sizeof(msg)); flushStream(ulStream); break; default: break; } } return 0; } h323plus/plugins/video/H.264/gpl/enc-ctx.cxx0000644000175000017500000003037111627140106017250 0ustar markmark/* * H.264 Plugin codec for OpenH323/OPAL * * Copyright (C) 2007 Matthias Schneider, All Rights Reserved * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "plugin-config.h" #include "enc-ctx.h" #ifdef _MSC_VER #include "../../common/rtpframe.h" #include "../../common/trace.h" #else #include "trace.h" #include "rtpframe.h" #endif #include #include #include #if defined(_WIN32) || defined(_WIN32_WCE) #include #define STRCMPI _strcmpi #else #include #define STRCMPI strcasecmp #endif #include #ifndef X264_LINK_STATIC X264Library X264Lib; #endif static void logCallbackX264 (void * /*priv*/, int level, const char *fmt, va_list arg) { char buffer[512]; int severity = 0; switch (level) { case X264_LOG_NONE: severity = 1; break; case X264_LOG_ERROR: severity = 1; break; case X264_LOG_WARNING: severity = 3; break; case X264_LOG_INFO: severity = 4; break; case X264_LOG_DEBUG: severity = 4; break; default: severity = 4; break; } sprintf(buffer, "H264\tx264\t"); vsprintf(buffer + strlen (buffer), fmt, arg); if (strlen(buffer) > 0) buffer[strlen(buffer)-1] = 0; if (severity == 4) { TRACE_UP (severity, buffer); } else { TRACE (severity, buffer); } } X264EncoderContext::X264EncoderContext() { _frameCounter = 0; _PFramesSinceLastIFrame = 0; _fastUpdateRequested = false; _txH264Frame = new H264Frame(); _txH264Frame->SetMaxPayloadSize(H264_PAYLOAD_SIZE); _inputFrame.i_type = X264_TYPE_AUTO; _inputFrame.i_qpplus1 = 0; _inputFrame.img.i_csp = X264_CSP_I420; #if X264_BUILD > 101 _inputFrame.prop.quant_offsets = NULL; _inputFrame.prop.quant_offsets_free = NULL; #endif X264_PARAM_DEFAULT(&_context); // No multicore support _context.i_threads = 1; // _context.b_sliced_threads = 1; _context.b_deterministic = 1; _context.i_sync_lookahead = 0; _context.i_frame_reference = 1; _context.i_bframe = 0; // _context.b_vfr_input = 0; _context.rc.b_mb_tree = 0; // No aspect ratio correction _context.vui.i_sar_width = 0; _context.vui.i_sar_height = 0; #if X264_BUILD > 101 // No automatic keyframe generation _context.i_keyint_max = X264_KEYINT_MAX_INFINITE; _context.i_keyint_min = X264_KEYINT_MAX_INFINITE; #endif // Enable logging _context.pf_log = logCallbackX264; _context.i_log_level = X264_LOG_WARNING; //X264_LOG_DEBUG; _context.p_log_private = NULL; // Single NAL Mode #if X264_BUILD > 79 _context.i_slice_max_size = H264_SINGLE_NAL_SIZE; // Default NAL Size _context.b_repeat_headers = 1; // repeat SPS/PPS before each key frame _context.b_annexb = 1; // place start codes (4 bytes) before NAL units #endif SetFrameWidth (CIF_WIDTH); SetFrameHeight (CIF_HEIGHT); SetFrameRate (H264_FRAME_RATE); SetProfileLevel (H264_PROFILE_LEVEL); SetTSTO (H264_TSTO); // TODO: is this really functional SetMaxKeyFramePeriod(H264_KEY_FRAME_INTERVAL); #ifdef H264_OPTIMAL_QUALITY // Rate control set to CRF mode (ignoring bitrate restrictions) _context.rc.i_rc_method = X264_RC_CRF; _context.rc.f_rf_constant = 16.0; // great quality #else // Rate control set to ABR mode _context.rc.i_rc_method = X264_RC_ABR; _context.rc.i_qp_min = 25; _context.rc.i_qp_max = 51; _context.rc.f_rate_tolerance = 1; _context.rc.i_vbv_max_bitrate = 0; _context.rc.psz_stat_out = 0; _context.rc.psz_stat_in = 0; _context.rc.f_vbv_buffer_init = 0; _context.rc.i_vbv_buffer_size = 0; _context.rc.i_lookahead = 0; _context.i_scenecut_threshold = 0; SetTargetBitrate ((unsigned)(H264_BITRATE / 1000)); #endif // Analysis support _context.analyse.intra = 3; _context.analyse.inter = 0; _context.analyse.b_transform_8x8 = 0; _context.analyse.i_weighted_pred = 0; _context.analyse.i_direct_mv_pred = 1; _context.analyse.i_me_method = 0; _context.analyse.i_me_range = 16; _context.analyse.i_subpel_refine = 1; _context.analyse.i_trellis = 0; _context.analyse.b_psnr = 0; _context.analyse.b_fast_pskip = 1; _context.analyse.b_dct_decimate = 1; _context.analyse.i_noise_reduction= 0; _context.analyse.b_ssim = 0; _codec = X264_ENCODER_OPEN(&_context); if (_codec == NULL) { TRACE(1, "H264\tEncoder\tCouldn't init x264 encoder"); } else { TRACE(4, "H264\tEncoder\tx264 encoder successfully opened"); // x264_nal_t* NALs; // int numberOfNALs = 0; // X264_ENCODER_HEADERS(_codec, &NALs, &numberOfNALs); } } X264EncoderContext::~X264EncoderContext() { if (_codec != NULL) { X264_ENCODER_CLOSE(_codec); TRACE(4, "H264\tEncoder\tClosed H.264 encoder, encoded " << _frameCounter << " Frames" ); } if (_txH264Frame) delete _txH264Frame; } void X264EncoderContext::SetMaxRTPFrameSize(unsigned size) { _txH264Frame->SetMaxPayloadSize(size); } void X264EncoderContext::SetMaxKeyFramePeriod (unsigned period) { _IFrameInterval = _context.i_keyint_max = period; _PFramesSinceLastIFrame = _IFrameInterval + 1; // force a keyframe on the first frame TRACE(4, "H264\tEncoder\tx264 encoder key frame period set to " << period); } void X264EncoderContext::SetTargetBitrate(unsigned rate) { _context.rc.i_bitrate = rate; TRACE(4, "H264\tEncoder\tx264 encoder bitrate set to " << rate); } void X264EncoderContext::SetFrameWidth(unsigned width) { _context.i_width = width; TRACE(4, "H264\tEncoder\tx264 encoder width set to " << width); } void X264EncoderContext::SetFrameHeight(unsigned height) { _context.i_height = height; TRACE(4, "H264\tEncoder\tx264 encoder height set to " << height); } void X264EncoderContext::SetFrameRate(unsigned rate) { _context.i_fps_num = rate; _context.i_fps_den = 1; TRACE(4, "H264\tEncoder\tx264 encoder frame rate set to " << (_context.i_fps_num/_context.i_fps_den)); } void X264EncoderContext::SetTSTO (unsigned tsto) { _context.rc.i_qp_min = H264_MIN_QUANT; if (tsto > 0) _context.rc.i_qp_max = (int)((51 - H264_MIN_QUANT) / 31 * tsto + H264_MIN_QUANT); _context.rc.i_qp_step = 4; TRACE(4, "H264\tEncoder\tx264 encoder QP range rate set to [" << _context.rc.i_qp_min << "-" << _context.rc.i_qp_max << "] with a step of " << _context.rc.i_qp_step); } void X264EncoderContext::SetProfileLevel (unsigned profileLevel) { // unsigned profile = (profileLevel & 0xff0000) >> 16; // bool constraint0 = (profileLevel & 0x008000) ? true : false; // bool constraint1 = (profileLevel & 0x004000) ? true : false; // bool constraint2 = (profileLevel & 0x002000) ? true : false; // bool constraint3 = (profileLevel & 0x001000) ? true : false; unsigned level = (profileLevel & 0x0000ff); int i = 0; while (h264_levels[i].level_idc) { if (h264_levels[i].level_idc == level) break; i++; } if (!h264_levels[i].level_idc) { TRACE(1, "H264\tCap\tIllegal Level negotiated"); return; } // We make use of the baseline profile, that means: // no B-Frames (too much latency in interactive video) // CBR (we want to get the max. quality making use of all the bitrate that is available) // baseline profile begin _context.b_cabac = 0; // Only >= MAIN LEVEL _context.i_bframe = 0; // Only >= MAIN LEVEL // Level: _context.i_level_idc = level; TRACE(4, "H264\tEncoder\tx264 encoder level set to " << _context.i_level_idc); } void X264EncoderContext::ApplyOptions() { if (_codec != NULL) X264_ENCODER_CLOSE(_codec); _codec = X264_ENCODER_OPEN(&_context); if (_codec == NULL) { TRACE(1, "H264\tEncoder\tCouldn't init x264 encoder"); } else { // x264_nal_t* NALs; // int numberOfNALs = 0; // X264_ENCODER_HEADERS(_codec, &NALs, &numberOfNALs); // TRACE(4, "H264\tEncoder\tx264 encoder successfully opened with headers"); } } void X264EncoderContext::fastUpdateRequested(void) { _fastUpdateRequested = true; } void X264EncoderContext::SetMaxNALSize (unsigned size) { _txH264Frame->SetMaxPayloadSize(size); _context.i_slice_max_size = size; } int X264EncoderContext::EncodeFrames(const unsigned char * src, unsigned & srcLen, unsigned char * dst, unsigned & dstLen, unsigned int & flags) { // create RTP frame from source buffer RTPFrame srcRTP(src, srcLen); // create RTP frame from destination buffer RTPFrame dstRTP(dst, dstLen); dstLen = 0; // from here, we are encoding a new frame if ((!_codec) || (!_txH264Frame)) { return 0; } // if there are RTP packets to return, return them if (_txH264Frame->HasRTPFrames()) { _txH264Frame->GetRTPFrame(dstRTP, flags); dstLen = dstRTP.GetFrameLen(); return 1; } if (srcRTP.GetPayloadSize() < sizeof(frameHeader)) { TRACE(1, "H264\tEncoder\tVideo grab too small, Close down video transmission thread"); return 0; } frameHeader * header = (frameHeader *)srcRTP.GetPayloadPtr(); if (header->x != 0 || header->y != 0) { TRACE(1, "H264\tEncoder\tVideo grab of partial frame unsupported, Close down video transmission thread"); return 0; } x264_nal_t* NALs; int numberOfNALs = 0; // do a validation of size // if the incoming data has changed size, tell the encoder if ((unsigned)_context.i_width != header->width || (unsigned)_context.i_height != header->height) { X264_ENCODER_CLOSE(_codec); _context.i_width = header->width; _context.i_height = header->height; _codec = X264_ENCODER_OPEN(&_context); // X264_ENCODER_HEADERS(_codec, &NALs, &numberOfNALs); // numberOfNALs=0; } bool wantIFrame = _fastUpdateRequested; _fastUpdateRequested = false; x264_picture_t dummyOutput; #if X264_BUILD >= 98 // starting with build 98 applications who allocate a x264_picture_t themselves have to call x264_picture_init() X264_PICTURE_INIT(&dummyOutput); #endif // Check whether to insert a keyframe // (On the first frame and every_IFrameInterval) _PFramesSinceLastIFrame++; if (_PFramesSinceLastIFrame >= _IFrameInterval) { wantIFrame = true; _PFramesSinceLastIFrame = 0; } // Prepare the frame to be encoded _inputFrame.img.plane[0] = (uint8_t *)(((unsigned char *)header) + sizeof(frameHeader)); _inputFrame.img.i_stride[0] = header->width; _inputFrame.img.plane[1] = (uint8_t *)((((unsigned char *)header) + sizeof(frameHeader)) + (int)(_inputFrame.img.i_stride[0]*header->height)); _inputFrame.img.i_stride[1] = _inputFrame.img.i_stride[2] = (int) ( header->width / 2 ); _inputFrame.img.plane[2] = (uint8_t *)(_inputFrame.img.plane[1] + (int)(_inputFrame.img.i_stride[1] *header->height/2)); _inputFrame.i_type = (wantIFrame || (flags && forceIFrame)) ? X264_TYPE_IDR : X264_TYPE_AUTO; _inputFrame.i_pts = _frameCounter; // x264 needs a time reference #if X264_BUILD > 79 _inputFrame.param = NULL; // &_context; #endif //TRACE (1,"H264\tEncoder\t" << numberOfNALs); while (numberOfNALs==0) { // workaround for first 2 packets being 0 if (X264_ENCODER_ENCODE(_codec, &NALs, &numberOfNALs, &_inputFrame, &dummyOutput) < 0) { TRACE (1,"H264\tEncoder\tEncoding failed"); return 0; } } _txH264Frame->BeginNewFrame(); _txH264Frame->SetFromFrame(NALs, numberOfNALs); _txH264Frame->SetTimestamp(srcRTP.GetTimestamp()); // BUG: not set in srcRTP _frameCounter++; if (_txH264Frame->HasRTPFrames()) { _txH264Frame->GetRTPFrame(dstRTP, flags); dstLen = dstRTP.GetFrameLen(); return 1; } return 1; } h323plus/plugins/video/H.264/h264pipe_win32.h0000644000175000017500000000361511341106277017142 0ustar markmark/* * H.264 Plugin codec for OpenH323/OPAL * * Copyright (C) Matthias Schneider, All Rights Reserved * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * Contributor(s): Matthias Schneider (ma30002000@yahoo.de) * */ /* Notes ----- */ #ifndef __H264PIPE_WIN32_H__ #define __H264PIPE_WIN32_H__ 1 #include "shared/pipes.h" #include typedef unsigned char u_char; class H264EncCtx { public: H264EncCtx(); ~H264EncCtx(); bool Load(); bool isLoaded() { return loaded; }; void call(unsigned msg); void call(unsigned msg, unsigned value); void call(unsigned msg , const u_char * src, unsigned & srcLen, u_char * dst, unsigned & dstLen, unsigned & headerLen, unsigned int & flags, int & ret); unsigned GetInstanceNumber() { return instances; }; protected: bool createPipes(); void closeAndRemovePipes(); void writeStream (LPCVOID data, unsigned bytes); void readStream (LPVOID data, unsigned bytes); void flushStream (); bool findGplProcess(); bool checkGplProcessExists (const char * dir); bool execGplProcess(); const char* ErrorMessage(); char pipeName [512]; char gplProcess [512]; HANDLE stream; unsigned width; unsigned height; unsigned size; bool startNewFrame; bool loaded; private: // stores no. of insances created static unsigned int instances; }; #endif /* __PIPE_WIN32_H__ */ h323plus/plugins/video/H.264/h264-x264.h0000644000175000017500000006773611530137256015762 0ustar markmark/* * H.264 Plugin codec for OpenH323/OPAL * * Copyright (C) Matthias Schneider, All Rights Reserved * * This code is based on the file h261codec.cxx from the OPAL project released * under the MPL 1.0 license which contains the following: * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): Matthias Schneider (ma30002000@yahoo.de) * Michele Piccini (michele@piccini.com) * Derek Smithies (derek@indranet.co.nz) * Simon Horne (s.horne@packetizer.com) * * */ /* Notes ----- */ #ifndef __H264_X264_H__ #define __H264_X264_H__ 1 #include "plugin-config.h" #include #define PLUGIN_CODEC_DLL_EXPORTS 1 #include #if defined(_WIN32) && _MSC_VER < 1600 #include "../common/vs-stdint.h" #include "../common/critsect.h" #else #include #include "critsect.h" #endif #include "shared/h264frame.h" #ifdef WIN32 #include "h264pipe_win32.h" #else #include "h264pipe_unix.h" #endif #include extern "C" { #ifdef _MSC_VER #include "libavcodec/avcodec.h" #else #include LIBAVCODEC_HEADER #endif }; #define P1080_WIDTH 1920 #define P1080_HEIGHT 1080 #define P720_WIDTH 1280 #define P720_HEIGHT 720 #define CIF4_WIDTH 704 #define CIF4_HEIGHT 576 #define CIF_WIDTH 352 #define CIF_HEIGHT 288 #define QCIF_WIDTH 176 #define QCIF_HEIGHT 144 #define SQCIF_WIDTH 128 #define SQCIF_HEIGHT 96 #define IT_QCIF 0 #define IT_CIF 1 typedef unsigned char u_char; static void logCallbackFFMPEG (void* v, int level, const char* fmt , va_list arg); // Input formats from the input device. struct inputFormats { unsigned mb; unsigned w; unsigned h; unsigned r; }; // Settings static double minFPS = 9.0; // Minimum FPS allowed static double kbtoMBPS = 12.2963; // Magical Conversion factor from kb/s to MBPS class H264EncoderContext { public: H264EncoderContext (); ~H264EncoderContext (); int EncodeFrames (const u_char * src, unsigned & srcLen, u_char * dst, unsigned & dstLen, unsigned int & flags); void FastUpdateRequested(void); void SetMaxRTPFrameSize (unsigned size); void SetMaxKeyFramePeriod (unsigned period); void SetTargetBitrate (unsigned rate); void SetFrameWidth (unsigned width); void SetFrameHeight (unsigned height); void SetFrameRate (unsigned rate); void SetTSTO (unsigned tsto); void SetProfileLevel (unsigned profile, unsigned constraints, unsigned level); void SetMaxNALSize (unsigned size); void ApplyOptions (); void Lock (); void Unlock (); void AddInputFormat(inputFormats & fmt); int GetInputFormat(inputFormats & fmt); void ClearInputFormat(); void SetMaxMB(unsigned mb); unsigned GetMaxMB(); void SetMaxMBPS(unsigned mbps); unsigned GetMaxMBPS(); protected: CriticalSection _mutex; H264EncCtx H264EncCtxInstance; unsigned maxMBPS; unsigned maxMB; std::list videoInputFormats; }; class H264DecoderContext { public: H264DecoderContext(); ~H264DecoderContext(); int DecodeFrames(const u_char * src, unsigned & srcLen, u_char * dst, unsigned & dstLen, unsigned int & flags); protected: CriticalSection _mutex; AVCodec* _codec; AVCodecContext* _context; AVFrame* _outputFrame; H264Frame* _rxH264Frame; bool _gotIFrame; bool _gotAGoodFrame; unsigned _lastTimeStamp; int _frameCounter; int _frameFPUInt; int _frameAutoFPU; int _skippedFrameCounter; }; static int valid_for_protocol ( const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen); static int get_codec_options ( const struct PluginCodec_Definition * codec, void *, const char *, void * parm, unsigned * parmLen); static int free_codec_options ( const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen); static void * create_encoder ( const struct PluginCodec_Definition *); static void destroy_encoder ( const struct PluginCodec_Definition *, void * _context); static int codec_encoder ( const struct PluginCodec_Definition *, void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag); static int to_normalised_options ( const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen); static int to_customised_options ( const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen); static int encoder_set_options ( const struct PluginCodec_Definition *, void * _context, const char *, void * parm, unsigned * parmLen); static int encoder_event_handler(const struct PluginCodec_Definition * codec, void * _context, const char *, void * parm, unsigned * parmLen); static int encoder_flowcontrol ( const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen); static int encoder_formats ( const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen); static int encoder_get_output_data_size ( const PluginCodec_Definition *, void *, const char *, void *, unsigned *); static void * create_decoder ( const struct PluginCodec_Definition *); static void destroy_decoder ( const struct PluginCodec_Definition *, void * _context); static int codec_decoder ( const struct PluginCodec_Definition *, void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag); static int decoder_get_output_data_size ( const PluginCodec_Definition * codec, void *, const char *, void *, unsigned *); /////////////////////////////////////////////////////////////////////////////// static int merge_profile_level_h264(char ** result, const char * dest, const char * src); static int merge_packetization_mode(char ** result, const char * dest, const char * src); static void free_string(char * str); /////////////////////////////////////////////////////////////////////////////// static struct PluginCodec_information licenseInfo = { 1143692893, // timestamp = Thu 30 Mar 2006 04:28:13 AM UTC "Matthias Schneider", // source code author "1.0", // source code version "ma30002000@yahoo.de", // source code email "", // source code URL "Copyright (C) 2006 by Matthias Schneider", // source code copyright "MPL 1.0", // source code license PluginCodec_License_MPL, // source code license "x264 / ffmpeg H.264", // codec description "x264: Laurent Aimar, ffmpeg: Michael Niedermayer", // codec author "", // codec version "fenrir@via.ecp.fr, ffmpeg-devel-request@mplayerhq.hu", // codec email "http://developers.videolan.org/x264.html, \ http://ffmpeg.mplayerhq.hu", // codec URL "x264: Copyright (C) 2003 Laurent Aimar, \ ffmpeg: Copyright (c) 2002-2003 Michael Niedermayer", // codec copyright information "x264: GNU General Public License as published Version 2, \ ffmpeg: GNU Lesser General Public License, Version 2.1", // codec license PluginCodec_License_GPL // codec license code }; static const char YUV420PDesc[] = { "YUV420P" }; static PluginCodec_ControlDefn EncoderControls[] = { { PLUGINCODEC_CONTROL_VALID_FOR_PROTOCOL, valid_for_protocol }, { PLUGINCODEC_CONTROL_GET_CODEC_OPTIONS, get_codec_options }, { PLUGINCODEC_CONTROL_FREE_CODEC_OPTIONS, free_codec_options }, { PLUGINCODEC_CONTROL_TO_NORMALISED_OPTIONS, to_normalised_options }, { PLUGINCODEC_CONTROL_TO_CUSTOMISED_OPTIONS, to_customised_options }, { PLUGINCODEC_CONTROL_SET_CODEC_OPTIONS, encoder_set_options }, { PLUGINCODEC_CONTROL_CODEC_EVENT, encoder_event_handler }, { PLUGINCODEC_CONTROL_FLOW_OPTIONS, encoder_flowcontrol }, { PLUGINCODEC_CONTROL_SET_FORMAT_OPTIONS, encoder_formats }, { PLUGINCODEC_CONTROL_GET_OUTPUT_DATA_SIZE, encoder_get_output_data_size }, { NULL } }; static PluginCodec_ControlDefn DecoderControls[] = { { PLUGINCODEC_CONTROL_GET_CODEC_OPTIONS, get_codec_options }, { PLUGINCODEC_CONTROL_TO_CUSTOMISED_OPTIONS, to_customised_options }, { PLUGINCODEC_CONTROL_GET_OUTPUT_DATA_SIZE, decoder_get_output_data_size }, { NULL } }; ///////////////////////////////////////////////////////////////////////////// // SIP definitions /* Still to consider sprop-parameter-sets: this may be a NAL max-mbps, max-fs, max-cpb, max-dpb, and max-br parameter-add max-rcmd-nalu-size: */ static const char h264Desc[] = { "H.264" }; static const char sdpH264[] = { "h264" }; #define H264_CLOCKRATE 90000 #define H264_BITRATE 768000 #define H264_PAYLOAD_SIZE 1400 #define H264_FRAME_RATE 30 #define H264_KEY_FRAME_INTERVAL (30*120) // Send a key frame no more than once every two minutes (unless requested through fast update) ///////////////////////////////////////////////////////////////////////////// static struct PluginCodec_Option const RFC3984packetizationMode = { PluginCodec_StringOption, // Option type "CAP RFC3894 Packetization Mode", // User visible name false, // User Read/Only flag PluginCodec_CustomMerge, // Merge mode "1", // Initial value (Baseline, Level 3) "packetization-mode", // FMTP option name "5", // FMTP default value 0, "1", "5", merge_packetization_mode, // Function to do merge free_string // Function to free memory in string }; static struct PluginCodec_Option const RFC3984profileLevel = { PluginCodec_StringOption, // Option type "CAP RFC3894 Profile Level", // User visible name false, // User Read/Only flag PluginCodec_CustomMerge, // Merge mode "42C01E", // Initial value (Baseline, Level 3) "profile-level-id", // FMTP option name "000000", // FMTP default value 0, "000000", "58F033", merge_profile_level_h264, // Function to do merge free_string // Function to free memory in string }; static struct PluginCodec_Option const * const optionTable[] = { &RFC3984packetizationMode, &RFC3984profileLevel, NULL }; /////////////////////////////////////////////////////////////////////////// // H.323 Definitions ///////////////////////////////////////////////////////////////////////////// // Codec Definitions // SIP 42E015 is // Profile : H264_PROFILE_BASE + H264_PROFILE_MAIN // Level : 2:1 compatible H.323 codec is 4CIF. #define H264_PROFILE_BASE 64 // only do base and main at this stage #define H264_PROFILE_MAIN 32 #define H264_PROFILE_EXTENDED 16 #define H264_PROFILE_HIGH 8 #define H264_BASE_IDC 66 // RFC3984 Baseline #define PLUGINCODEC_OPTION_LEVEL "Generic Parameter 42" #define PLUGINCODEC_OPTION_ASPECT "Generic Parameter 10" #define PLUGINCODEC_OPTION_CUSMBPS "Generic Parameter 3" #define PLUGINCODEC_OPTION_CUSMFS "Generic Parameter 4" #define PLUGINCODEC_OPTION_STATICMBPS "Generic Parameter 7" #define PLUGINCODEC_OPTION_MAXNALSIZE "Generic Parameter 9" #define H264_H323_RFC3984 "0.0.8.241.0.0.0.0" // Single NAL packetization H.241 Annex A #define H264_ASPECT_43 2 #define H264_ASPECT_HD 13 // NOTE: All these values are subject to change Values need to be confirmed! #define H264_LEVEL1 15 // SQCIF 30 fps #define H264_LEVEL1_MBPS 640 #define H264_LEVEL1_1 22 // QCIF 30 fps #define H264_LEVEL1_1_MBPS 1920 #define H264_LEVEL1_3 36 // CIF 30 fps #define H264_LEVEL1_3_MBPS 7680 #define H264_LEVEL3 64 // 720p 30fps #define H264_LEVEL3_MBPS 12000 #define H264_LEVEL3_1 71 // 720p 30fps #define H264_LEVEL3_1_MBPS 14000 #define H264_LEVEL4 85 // 1080p 30fps #define H264_LEVEL4_MBPS 20000 // H.264 QCIF static const char H264QCIF_Desc[] = { "H.264-QCIF" }; static const char H264QCIF_MediaFmt[] = { "H.264-QCIF" }; static unsigned int H264QCIF_FrameHeight = QCIF_HEIGHT; static unsigned int H264QCIF_FrameWidth = QCIF_WIDTH; static unsigned int H264QCIF_Profile = H264_PROFILE_BASE; static unsigned int H264QCIF_Level = H264_LEVEL1_1; static unsigned int H264QCIF_MaxBitRate = H264_LEVEL1_1_MBPS*100; static const char H264QCIF_TargetBitRate[]= { "192000" }; static unsigned int H264QCIF_VideoType = PluginCodec_MediaTypeVideo; static unsigned int H264QCIF_Generic3 = 0; static unsigned int H264QCIF_Generic4 = 0; static unsigned int H264QCIF_Generic5 = 0; static unsigned int H264QCIF_Generic6 = 0; static unsigned int H264QCIF_Generic7 = 0; static unsigned int H264QCIF_Generic9 = 0; static unsigned int H264QCIF_Generic10 = H264_ASPECT_43; // H.264 CIF static const char H264CIF_Desc[] = { "H.264-CIF" }; static const char H264CIF_MediaFmt[] = { "H.264-CIF" }; static unsigned int H264CIF_FrameHeight = CIF_HEIGHT; static unsigned int H264CIF_FrameWidth = CIF_WIDTH; static unsigned int H264CIF_Profile = H264_PROFILE_BASE; static unsigned int H264CIF_Level = H264_LEVEL1_3; static unsigned int H264CIF_MaxBitRate = H264_LEVEL1_3_MBPS*100; static const char H264CIF_TargetBitRate[] = { "768000" }; static unsigned int H264CIF_VideoType = PluginCodec_MediaTypeVideo; static unsigned int H264CIF_Generic3 = 0; static unsigned int H264CIF_Generic4 = 0; static unsigned int H264CIF_Generic5 = 0; static unsigned int H264CIF_Generic6 = 0; static unsigned int H264CIF_Generic7 = 0; static unsigned int H264CIF_Generic9 = 0; static unsigned int H264CIF_Generic10 = H264_ASPECT_43; // H.264 CIF4 // compatible SIP profile static const char H264CIF4_Desc[] = { "H.264-4CIF" }; static const char H264CIF4_MediaFmt[] = { "H.264-4CIF" }; static unsigned int H264CIF4_FrameHeight = CIF4_HEIGHT; static unsigned int H264CIF4_FrameWidth = CIF4_WIDTH; static unsigned int H264CIF4_Profile = H264_PROFILE_BASE; //+ H264_PROFILE_MAIN; static unsigned int H264CIF4_Level = H264_LEVEL3; static unsigned int H264CIF4_MaxBitRate = H264_LEVEL3_MBPS*100; static const char H264CIF4_TargetBitRate[]= { "10000000" }; static unsigned int H264CIF4_VideoType = PluginCodec_MediaTypeVideo; // | PluginCodec_MediaTypeExtVideo; static unsigned int H264CIF4_Generic3 = 0; static unsigned int H264CIF4_Generic4 = 0; static unsigned int H264CIF4_Generic5 = 0; static unsigned int H264CIF4_Generic6 = 0; static unsigned int H264CIF4_Generic7 = 0; static unsigned int H264CIF4_Generic9 = 0; static unsigned int H264CIF4_Generic10 = H264_ASPECT_43; // HD 720P static const char H264720P_Desc[] = { "H.264-720" }; static const char H264720P_MediaFmt[] = { "H.264-720" }; static unsigned int H264720P_FrameHeight = P720_HEIGHT; static unsigned int H264720P_FrameWidth = P720_WIDTH; static unsigned int H264720P_Profile = H264_PROFILE_BASE; static unsigned int H264720P_Level = H264_LEVEL3_1; static unsigned int H264720P_MaxBitRate = H264_LEVEL3_1_MBPS*100; static const char H264720P_TargetBitRate[] = { "1400000" }; static unsigned int H264720P_VideoType = PluginCodec_MediaTypeVideo; static unsigned int H264720P_Generic3 = 217; static unsigned int H264720P_Generic4 = 15; static unsigned int H264720P_Generic5 = 0; static unsigned int H264720P_Generic6 = 205; static unsigned int H264720P_Generic7 = 0; static unsigned int H264720P_Generic9 = 0; static unsigned int H264720P_Generic10 = H264_ASPECT_HD; // HD H.239 1920 x 1152 static const char H264H239_Desc[] = { "H.264" }; static const char H264H239_MediaFmt[] = { "H.264" }; static unsigned int H264H239_FrameHeight = 1152; static unsigned int H264H239_FrameWidth = 1920; static unsigned int H264H239_Profile = H264_PROFILE_BASE; static unsigned int H264H239_Level = H264_LEVEL4; static unsigned int H264H239_MaxBitRate = 540000; static const char H264H239_TargetBitRate[] = { "540000" }; static unsigned int H264H239_VideoType = PluginCodec_MediaTypeExtended | PluginCodec_MediaTypeH239; static unsigned int H264H239_Generic3 = 492; static unsigned int H264H239_Generic4 = 34; static unsigned int H264H239_Generic5 = 0; static unsigned int H264H239_Generic6 = 0; static unsigned int H264H239_Generic7 = 0; static unsigned int H264H239_Generic9 = 0; static unsigned int H264H239_Generic10 = H264_ASPECT_HD; static const char H2641080P_Desc[] = { "H.264-720" }; static const char H2641080P_MediaFmt[] = { "H.264-720" }; static unsigned int H2641080P_FrameHeight = P1080_HEIGHT; static unsigned int H2641080P_FrameWidth = P1080_WIDTH; static unsigned int H2641080P_Profile = H264_PROFILE_BASE; static unsigned int H2641080P_Level = H264_LEVEL4; static unsigned int H2641080P_MaxBitRate = H264_LEVEL4_MBPS*100; static const char H2641080P_TargetBitRate[] = { "2000000" }; static unsigned int H2641080P_VideoType = PluginCodec_MediaTypeVideo; static unsigned int H2641080P_Generic3 = 492; static unsigned int H2641080P_Generic4 = 32; static unsigned int H2641080P_Generic5 = 0; static unsigned int H2641080P_Generic6 = 205; static unsigned int H2641080P_Generic7 = 0; static unsigned int H2641080P_Generic9 = 0; static unsigned int H2641080P_Generic10 = H264_ASPECT_HD; // MEGA MACRO to set options #define DECLARE_GENERIC_OPTIONS(prefix) \ static struct PluginCodec_Option const prefix##_h323packetization = \ { PluginCodec_StringOption, PLUGINCODEC_MEDIA_PACKETIZATION, true, PluginCodec_EqualMerge, H264_H323_RFC3984 }; \ static struct PluginCodec_Option const prefix##_targetBitRate = \ { PluginCodec_IntegerOption, PLUGINCODEC_OPTION_TARGET_BIT_RATE, true, PluginCodec_MinMerge, prefix##_TargetBitRate }; \ static struct PluginCodec_Option const * const prefix##_OptionTable[] = { \ &prefix##_h323packetization, \ &prefix##_targetBitRate, \ NULL \ }; \ static const struct PluginCodec_H323GenericParameterDefinition prefix##_h323params[] = \ { \ {{1,0,0,0,0},3, PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_unsignedMin, {prefix##_Generic3}}, \ {{1,0,0,0,0},4, PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_unsignedMin, {prefix##_Generic4}}, \ {{1,0,0,0,0},5, PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_unsignedMin, {prefix##_Generic5}}, \ {{1,0,0,0,0},6, PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_unsignedMin, {prefix##_Generic6}}, \ {{1,0,0,0,0},7, PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_unsignedMin, {prefix##_Generic7}}, \ {{1,0,0,0,0},10, PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_unsignedMin, {prefix##_Generic10}}, \ {{1,0,0,0,0},41, PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_BooleanArray,{prefix##_Profile}}, \ {{1,0,0,0,0},42, PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_unsignedMin, {prefix##_Level}}, \ }; \ static struct PluginCodec_H323GenericCodecData prefix##_h323GenericData[] = { \ { OpalPluginCodec_Identifer_H264_Generic, prefix##_MaxBitRate, 8, prefix##_h323params } \ }; \ DECLARE_GENERIC_OPTIONS(H264QCIF) DECLARE_GENERIC_OPTIONS(H264CIF) DECLARE_GENERIC_OPTIONS(H264CIF4) DECLARE_GENERIC_OPTIONS(H264720P) DECLARE_GENERIC_OPTIONS(H264H239) DECLARE_GENERIC_OPTIONS(H2641080P) #define DECLARE_H323PARAM(prefix) \ { \ /* encoder */ \ PLUGIN_CODEC_VERSION_OPTIONS, /* codec API version */ \ &licenseInfo, /* license information */ \ prefix##_VideoType | /* video type */ \ PluginCodec_RTPTypeShared | /* specified RTP type */ \ PluginCodec_RTPTypeDynamic, /* specified RTP type */ \ prefix##_Desc, /* text decription */ \ YUV420PDesc, /* source format */ \ prefix##_MediaFmt, /* destination format */ \ prefix##_OptionTable, /* user data */ \ H264_CLOCKRATE, /* samples per second */ \ prefix##_MaxBitRate, /* raw bits per second */ \ 20000, /* nanoseconds per frame */ \ {{ prefix##_FrameWidth, /* samples per frame */ \ prefix##_FrameHeight, /* bytes per frame */ \ 10, /* recommended number of frames per packet */ \ 60, }}, /* maximum number of frames per packet */ \ 0, /* IANA RTP payload code */ \ sdpH264, /* RTP payload name */ \ create_encoder, /* create codec function */ \ destroy_encoder, /* destroy codec */ \ codec_encoder, /* encode/decode */ \ EncoderControls, /* codec controls */ \ PluginCodec_H323Codec_generic, /* h323CapabilityType */ \ (struct PluginCodec_H323GenericCodecData *)&prefix##_h323GenericData /* h323CapabilityData */ \ }, \ { \ /* decoder */ \ PLUGIN_CODEC_VERSION_OPTIONS, /* codec API version */ \ &licenseInfo, /* license information */ \ prefix##_VideoType | /* video codec */ \ PluginCodec_RTPTypeShared | /* specified RTP type */ \ PluginCodec_RTPTypeDynamic, /* specified RTP type */ \ prefix##_Desc, /* text decription */ \ prefix##_MediaFmt, /* source format */ \ YUV420PDesc, /* destination format */ \ prefix##_OptionTable, /* user data */ \ H264_CLOCKRATE, /* samples per second */ \ prefix##_MaxBitRate, /* raw bits per second */ \ 20000, /* nanoseconds per frame */ \ {{ prefix##_FrameWidth, /* samples per frame */ \ prefix##_FrameHeight, /* bytes per frame */ \ 10, /* recommended number of frames per packet */ \ 60, }}, /* maximum number of frames per packet */ \ 0, /* IANA RTP payload code */ \ sdpH264, /* RTP payload name */ \ create_decoder, /* create codec function */ \ destroy_decoder, /* destroy codec */ \ codec_decoder, /* encode/decode */ \ DecoderControls, /* codec controls */ \ PluginCodec_H323Codec_generic, /* h323CapabilityType */ \ (struct PluginCodec_H323GenericCodecData *)&prefix##_h323GenericData /* h323CapabilityData */ \ } \ ///////////////////////////////////////////////////////////////////////////// static struct PluginCodec_Definition h264CodecDefn[] = { /*{ PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeVideo | // audio codec PluginCodec_RTPTypeShared | // specified RTP type PluginCodec_RTPTypeDynamic, // specified RTP type h264Desc, // text decription YUV420PDesc, // source format h264Desc, // destination format optionTable, // user data H264_CLOCKRATE, // samples per second H264_BITRATE, // raw bits per second 20000, // nanoseconds per frame {{ CIF4_WIDTH, // frame width CIF4_HEIGHT, // frame height 10, // recommended frame rate 60, // maximum frame rate }}, 0, // IANA RTP payload code sdpH264, // RTP payload name create_encoder, // create codec function destroy_encoder, // destroy codec codec_encoder, // encode/decode EncoderControls, // codec controls PluginCodec_H323Codec_NoH323, // h323CapabilityType NULL // h323CapabilityData }, { // SIP decoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeVideo | // audio codec PluginCodec_RTPTypeShared | // specified RTP type PluginCodec_RTPTypeDynamic, // specified RTP type h264Desc, // text decription h264Desc, // source format YUV420PDesc, // destination format optionTable, // user data H264_CLOCKRATE, // samples per second H264_BITRATE, // raw bits per second 20000, // nanoseconds per frame {{ CIF4_WIDTH, // frame width CIF4_HEIGHT, // frame height 10, // recommended frame rate 60, // maximum frame rate }}, 0, // IANA RTP payload code sdpH264, // RTP payload name create_decoder, // create codec function destroy_decoder, // destroy codec codec_decoder, // encode/decode DecoderControls, // codec controls PluginCodec_H323Codec_NoH323, // h323CapabilityType NULL // h323CapabilityData },*/ // DECLARE_H323PARAM(H264QCIF), DECLARE_H323PARAM(H264CIF), // DECLARE_H323PARAM(H264CIF4) // DECLARE_H323PARAM(H264720P), DECLARE_H323PARAM(H264H239), DECLARE_H323PARAM(H2641080P) }; #endif /* __H264-X264_H__ */ h323plus/plugins/video/H.264/h264pipe_win32.cxx0000644000175000017500000002352511445326443017523 0ustar markmark/* * H.264 Plugin codec for OpenH323/OPAL * * Copyright (C) 2007 Matthias Schneider, All Rights Reserved * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * Contributor(s): Matthias Schneider (ma30002000@yahoo.de) * */ /* Notes ----- */ #include "h264pipe_win32.h" #ifdef _MSC_VER #include "../common/rtpframe.h" #include "../common/trace.h" #else #include "rtpframe.h" #include "trace.h" #endif #include #include #include #include #include #include #define PIPE_TIMEOUT 5000 #define BUFSIZE 4096 #ifndef _MSC_VER #define GPL_PROCESS_FILENAME "plugins\\h264_video_pwplugin_helper.exe" #else #define GPL_PROCESS_FILENAME "x264plugin_helper.exe" #endif #define DIR_SEPERATOR "\\" #define DIR_TOKENISER ";" #ifdef _MSC_VER #define snprintf _snprintf #endif unsigned int H264EncCtx::instances = 0; H264EncCtx::H264EncCtx() { width = 0; height = 0; size = 0; startNewFrame = true; loaded = false; instances++; } H264EncCtx::~H264EncCtx() { closeAndRemovePipes(); } bool H264EncCtx::Load() { snprintf(pipeName, sizeof(pipeName), "\\\\.\\pipe\\x264-%u", GetInstanceNumber()); if (!createPipes()) { closeAndRemovePipes(); return false; } if (!findGplProcess()) { TRACE(1, "H264\tIPC\tPP: Couldn't find GPL process executable " << GPL_PROCESS_FILENAME); closeAndRemovePipes(); return false; } if (!execGplProcess()) { closeAndRemovePipes(); return false; } if (!ConnectNamedPipe(stream, NULL)) { if (GetLastError() != ERROR_PIPE_CONNECTED) { TRACE(1, "H264\tIPC\tPP: Could not establish communication with child process (" << ErrorMessage() << ")"); closeAndRemovePipes(); return false; } } TRACE(1, "H264\tIPC\tPP: Successfully established communication with child process"); return true; } void H264EncCtx::call(unsigned msg) { if (msg == H264ENCODERCONTEXT_CREATE) startNewFrame = true; writeStream((LPCVOID)&msg, sizeof(msg)); flushStream(); readStream((LPVOID)&msg, sizeof(msg)); } void H264EncCtx::call(unsigned msg, unsigned value) { switch (msg) { case SET_FRAME_WIDTH: width = value; size = (unsigned) (width * height * 1.5) + sizeof(frameHeader) + 40; break; case SET_FRAME_HEIGHT: height = value; size = (unsigned) (width * height * 1.5) + sizeof(frameHeader) + 40; break; } writeStream((LPCVOID) &msg, sizeof(msg)); writeStream((LPCVOID) &value, sizeof(value)); flushStream(); readStream((LPVOID) &msg, sizeof(msg)); } void H264EncCtx::call(unsigned msg , const u_char * src, unsigned & srcLen, u_char * dst, unsigned & dstLen, unsigned & headerLen, unsigned int & flags, int & ret) { if (startNewFrame) { writeStream((LPCVOID) &msg, sizeof(msg)); if (size) { writeStream((LPCVOID) &size, sizeof(size)); writeStream((LPCVOID) src, size); writeStream((LPCVOID) &headerLen, sizeof(headerLen)); writeStream((LPCVOID) dst, headerLen); writeStream((LPCVOID) &flags, sizeof(flags) ); } else { writeStream((LPCVOID) &srcLen, sizeof(srcLen)); writeStream((LPCVOID) src, srcLen); writeStream((LPCVOID) &headerLen, sizeof(headerLen)); writeStream((LPCVOID) dst, headerLen); writeStream((LPCVOID) &flags, sizeof(flags) ); } } else { msg = ENCODE_FRAMES_BUFFERED; writeStream((LPCVOID) &msg, sizeof(msg)); } flushStream(); readStream((LPVOID) &msg, sizeof(msg)); readStream((LPVOID) &dstLen, sizeof(dstLen)); readStream((LPVOID) dst, dstLen); readStream((LPVOID) &flags, sizeof(flags)); readStream((LPVOID) &ret, sizeof(ret)); if (flags & 1) startNewFrame = true; else startNewFrame = false; } bool H264EncCtx::createPipes() { stream = CreateNamedPipe( pipeName, PIPE_ACCESS_DUPLEX, // FILE_FLAG_FIRST_PIPE_INSTANCE (not supported by minGW lib) PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, // deny via network ACE 1, BUFSIZE, BUFSIZE, PIPE_TIMEOUT, NULL ); // Break if the pipe handle is valid. if (stream != INVALID_HANDLE_VALUE) return true; // Exit if an error other than ERROR_PIPE_BUSY occurs. if (GetLastError() != ERROR_PIPE_BUSY) { TRACE(1, "H264\tIPC\tPP: Failure on creating Pipe - terminating (" << ErrorMessage() << ")"); return false; } // All pipe instances are busy, so wait for 5 seconds. if (!WaitNamedPipe(pipeName, 5000)) { TRACE(1, "H264\tIPC\tPP: TimeOut on creating Pipe - terminating (" << ErrorMessage() << ")"); return false; } return true; } void H264EncCtx::closeAndRemovePipes() { if (!DisconnectNamedPipe(stream)) TRACE(1, "H264\tIPC\tPP: Failure on disconnecting Pipe (" << ErrorMessage() << ")"); if (!CloseHandle(stream)) TRACE(1, "H264\tIPC\tPP: Failure on closing Handle (" << ErrorMessage() << ")"); } void H264EncCtx::readStream (LPVOID data, unsigned bytes) { DWORD bytesRead; BOOL fSuccess; fSuccess = ReadFile( stream, // handle to pipe data, // buffer to receive data bytes, // size of buffer &bytesRead, // number of bytes read NULL // blocking IO ); if (!fSuccess) { TRACE(1, "H264\tIPC\tPP: Failure on reading - terminating (" << ErrorMessage() << ")"); closeAndRemovePipes(); } if (bytes != bytesRead) { TRACE(1, "H264\tIPC\tPP: Failure on reading - terminating (Read " << bytesRead << " bytes, expected " << bytes); closeAndRemovePipes(); } } void H264EncCtx::writeStream (LPCVOID data, unsigned bytes) { DWORD bytesWritten; BOOL fSuccess; fSuccess = WriteFile( stream, // handle to pipe data, // buffer to write from bytes, // number of bytes to write &bytesWritten, // number of bytes written NULL // not overlapped I/O ); if (!fSuccess) { TRACE(1, "H264\tIPC\tPP: Failure on writing - terminating (" << ErrorMessage() << ")"); closeAndRemovePipes(); } if (bytes != bytesWritten) { TRACE(1, "H264\tIPC\tPP: Failure on writing - terminating (Written " << bytesWritten << " bytes, intended " << bytes); closeAndRemovePipes(); } } void H264EncCtx::flushStream () { if (!FlushFileBuffers(stream)) { TRACE(1, "H264\tIPC\tPP: Failure on flushing - terminating (" << ErrorMessage() << ")"); closeAndRemovePipes(); } } bool H264EncCtx::findGplProcess() { char * env = ::getenv("PWLIBPLUGINDIR"); if (env == NULL) env = ::getenv("PTLIBPLUGINDIR"); if (env != NULL) { const char * token = strtok(env, DIR_TOKENISER); while (token != NULL) { if (checkGplProcessExists(token)) return true; token = strtok(NULL, DIR_TOKENISER); } } return checkGplProcessExists("."); } bool H264EncCtx::checkGplProcessExists (const char * dir) { fstream fin; memset(gplProcess, 0, sizeof(gplProcess)); strncpy(gplProcess, dir, sizeof(gplProcess)); if (gplProcess[strlen(gplProcess)-1] != DIR_SEPERATOR[0]) strcat(gplProcess, DIR_SEPERATOR); strcat(gplProcess, GPL_PROCESS_FILENAME); fin.open(gplProcess,ios::in); if( !fin.is_open() ){ TRACE(1, "H264\tIPC\tPP: Couldn't find GPL process executable in " << gplProcess); fin.close(); return false; } fin.close(); TRACE(1, "H264\tIPC\tPP: Found GPL process executable in " << gplProcess); return true; } bool H264EncCtx::execGplProcess() { STARTUPINFO si; PROCESS_INFORMATION pi; char command[1024]; snprintf(command,sizeof(command), "%s %s", gplProcess, pipeName); ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); // Start the child process. if( !CreateProcess( NULL, // No module name (use command line) command, // Command line NULL, // Process handle not inheritable NULL, // Thread handle not inheritable FALSE, // Set handle inheritance to FALSE (Trace::GetLevel() == 0) ? CREATE_NO_WINDOW : 0, // Creation flags NULL, // Use parent's environment block NULL, // Use parent's starting directory &si, // Pointer to STARTUPINFO structure &pi )) // Pointer to PROCESS_INFORMATION structure { TRACE(1, "H264\tIPC\tPP: Couldn't create child process: " << ErrorMessage()); return false; } TRACE(1, "H264\tIPC\tPP: Successfully created child process " << pi.dwProcessId); return true; } const char* H264EncCtx::ErrorMessage() { static char string [1024]; DWORD dwMsgLen; memset (string, 0, sizeof (string)); dwMsgLen = FormatMessageA (FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError (), MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR) string, sizeof (string)-1, NULL); if (dwMsgLen) { string [ strlen(string) - 2 ] = 0; snprintf (string, sizeof (string), "%s (%u)", string, (int) GetLastError ()); } else { snprintf (string, sizeof (string), "%u", (int) GetLastError ()); } return string; } h323plus/plugins/video/H.264/ReadMe_VS.txt0000644000175000017500000000315411341106277016712 0ustar markmark ================================================ H.264 Visual Studio Simon Horne - Feb 2010 ================================================ How to compile H.264 for Microsoft Visual Studio To compile FFMPEG dlls you must use MinGW... Follow the instructions found here http://ffmpeg.arrozcru.org/wiki Special Notes: You must build the dlls you cannot use FFMPEG statically. Make sure you read this http://ffmpeg.arrozcru.org/wiki/index.php?title=MSVC Once you have successfully compiled FFMPEG the following files will be in the ..msys\local\bin directory. avcodec-xx.dll avutil-xx.dll avcodec-xx.lib (the numbers may vary depending on the version compiled) In VS2008 add the following path to Visual Studio include directory path ..msys\local\include and the following to the Visual Studio lib directory path ..msys\local\bin To compile X264 use MinGW and follow the instructions here. http://ffmpeg.arrozcru.org/wiki/index.php?title=X264 Note: You must use x264 ver 80 or greater. ./configure --enable-shared This will produce a libx264-xx.dll in ..msys\local\bin directory and libx264-xx.dll.a in ..msys\local\lib add following to the Visual Studio lib directory path ..msys\local\lib Now you are ready to compile the plugin under Visual Studio. You must also compile the h264_helper project. Once compiled you will need to place these files in the c:\ptlib_plugin directory. h264-x264_ptplugin.dll x264plugin_helper.exe avcodec-xx.dll avutil-xx.dll libx264-xx.dll Don't forget to set the environmental variables PTLIBPLUGINDIR = c:\ptlib_plugin To stream codec trace information PTLIB_TRACE_CODECS = 6 Simon h323plus/plugins/video/H.264/h264-x264.cxx0000644000175000017500000012477011652234220016317 0ustar markmark/* * H.264 Plugin codec for OpenH323/OPAL * * Copyright (C) Matthias Schneider, All Rights Reserved * * This code is based on the file h261codec.cxx from the OPAL project released * under the MPL 1.0 license which contains the following: * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): Matthias Schneider (ma30002000@yahoo.de) * Michele Piccini (michele@piccini.com) * Derek Smithies (derek@indranet.co.nz) * * */ /* Notes ----- */ #include "h264-x264.h" #include "plugin-config.h" #if _MSC_VER < 1600 #include "../common/dyna.h" #include "../common/trace.h" #include "../common/rtpframe.h" #else #include "dyna.h" #include "trace.h" #include "rtpframe.h" #endif #include #if defined(_WIN32) || defined(_WIN32_WCE) #include #include #define STRCMPI _strcmpi #define STRNCMPI strncmp #define snprintf _snprintf #else #include #define STRCMPI strcasecmp #define STRNCMPI strncasecmp #endif #include FFMPEGLibrary FFMPEGLibraryInstance(CODEC_ID_H264); static void logCallbackFFMPEG (void* v, int level, const char* fmt , va_list arg) { char buffer[512]; int severity = 0; if (v) { switch (level) { case AV_LOG_QUIET: severity = 0; break; case AV_LOG_ERROR: severity = 1; break; case AV_LOG_INFO: severity = 4; break; case AV_LOG_DEBUG: severity = 4; break; default: severity = 4; break; } sprintf(buffer, "H264\tFFMPEG\t"); vsprintf(buffer + strlen(buffer), fmt, arg); if (strlen(buffer) > 0) buffer[strlen(buffer)-1] = 0; if (severity == 4) { TRACE_UP (severity, buffer); } else { TRACE (severity, buffer); } } } static char * num2str(int num) { char buf[20]; sprintf(buf, "%i", num); return strdup(buf); } H264EncoderContext::H264EncoderContext() { if (!H264EncCtxInstance.isLoaded()) { if (!H264EncCtxInstance.Load()) { TRACE(1, "H264\tCodec\tDisabled"); // TODO: Throw exception here or assert // TODO: make findgplprocess and related method static in H264Encctx class and call from load } } H264EncCtxInstance.call(H264ENCODERCONTEXT_CREATE); // add default list of supported formats inputFormats fmt1080p = {8100, 1920, 1080, 4}; inputFormats fmt720p = {3600, 1280, 720, 4}; inputFormats fmt4cif = {1584, 704, 576, 4}; inputFormats fmtcif = {396, 352, 288, 4}; AddInputFormat(fmt1080p); AddInputFormat(fmt720p); AddInputFormat(fmt4cif); AddInputFormat(fmtcif); } H264EncoderContext::~H264EncoderContext() { WaitAndSignal m(_mutex); H264EncCtxInstance.call(H264ENCODERCONTEXT_DELETE); } void H264EncoderContext::ApplyOptions() { H264EncCtxInstance.call(APPLY_OPTIONS); } void H264EncoderContext::SetMaxRTPFrameSize(unsigned size) { H264EncCtxInstance.call(SET_MAX_FRAME_SIZE, size); } void H264EncoderContext::SetMaxKeyFramePeriod (unsigned period) { H264EncCtxInstance.call(SET_MAX_KEY_FRAME_PERIOD, period); } void H264EncoderContext::SetTargetBitrate(unsigned rate) { H264EncCtxInstance.call(SET_TARGET_BITRATE, rate); } void H264EncoderContext::SetFrameWidth(unsigned width) { H264EncCtxInstance.call(SET_FRAME_WIDTH, width); } void H264EncoderContext::SetFrameHeight(unsigned height) { H264EncCtxInstance.call(SET_FRAME_HEIGHT, height); } void H264EncoderContext::SetFrameRate(unsigned rate) { H264EncCtxInstance.call(SET_FRAME_RATE, rate); } void H264EncoderContext::SetTSTO (unsigned tsto) { H264EncCtxInstance.call(SET_TSTO, tsto); } void H264EncoderContext::SetProfileLevel (unsigned profile, unsigned constraints, unsigned level) { unsigned profileLevel = (profile << 16) + (constraints << 8) + level; H264EncCtxInstance.call(SET_PROFILE_LEVEL, profileLevel); } void H264EncoderContext::FastUpdateRequested(void) { H264EncCtxInstance.call(FASTUPDATE_REQUESTED); } int H264EncoderContext::EncodeFrames(const u_char * src, unsigned & srcLen, u_char * dst, unsigned & dstLen, unsigned int & flags) { WaitAndSignal m(_mutex); int ret; unsigned int headerLen; RTPFrame dstRTP(dst, dstLen); headerLen = dstRTP.GetHeaderSize(); H264EncCtxInstance.call(ENCODE_FRAMES, src, srcLen, dst, dstLen, headerLen, flags, ret); return ret; } void H264EncoderContext::Lock () { _mutex.Wait(); } void H264EncoderContext::Unlock () { _mutex.Signal(); } void H264EncoderContext::ClearInputFormat() { videoInputFormats.clear(); } void H264EncoderContext::AddInputFormat(inputFormats & fmt) { videoInputFormats.push_back(fmt); } int H264EncoderContext::GetInputFormat(inputFormats & fmt) { for (std::list::const_iterator r=videoInputFormats.begin(); r!=videoInputFormats.end(); ++r) { if (r->mb <= maxMB && maxMBPS/r->mb > minFPS) { fmt = *r; unsigned r = maxMBPS/fmt.mb + 1; if (fmt.r > r) fmt.r = r; return 1; } } return 0; } void H264EncoderContext::SetMaxMB(unsigned mb) { maxMB = mb; } unsigned H264EncoderContext::GetMaxMB() { return maxMB; } void H264EncoderContext::SetMaxMBPS(unsigned mbps) { maxMBPS = mbps; } unsigned H264EncoderContext::GetMaxMBPS() { return maxMBPS; } void H264EncoderContext::SetMaxNALSize(unsigned size) { H264EncCtxInstance.call(SET_MAX_NALSIZE, size); } //////////////////////////////////////////////////////////////////////////////////////// H264DecoderContext::H264DecoderContext() { if (!FFMPEGLibraryInstance.IsLoaded()) return; _gotIFrame = false; _gotAGoodFrame = true; // false; //Force FastPictureUpdate on first frame _lastTimeStamp = 0; _frameCounter = 0; _frameAutoFPU = 0; _frameFPUInt = 300; // Auto request IFrame every 300 frames (every 10 secs at 30 fps) _skippedFrameCounter = 0; _rxH264Frame = new H264Frame(); if ((_codec = FFMPEGLibraryInstance.AvcodecFindDecoder(CODEC_ID_H264)) == NULL) { TRACE(1, "H264\tDecoder\tCodec not found for decoder"); return; } _context = FFMPEGLibraryInstance.AvcodecAllocContext(); if (_context == NULL) { TRACE(1, "H264\tDecoder\tFailed to allocate context for decoder"); return; } _outputFrame = FFMPEGLibraryInstance.AvcodecAllocFrame(); if (_outputFrame == NULL) { TRACE(1, "H264\tDecoder\tFailed to allocate frame for encoder"); return; } _context->pix_fmt = PIX_FMT_YUV420P; _context->skip_frame = AVDISCARD_DEFAULT; _context->error_concealment = FF_EC_GUESS_MVS; // | FF_EC_DEBLOCK; _context->error_recognition = FF_ER_CAREFUL; _context->skip_loop_filter = AVDISCARD_NONREF; _context->workaround_bugs = FF_BUG_AUTODETECT; _context->codec_type = CODEC_TYPE_VIDEO; _context->codec_id = CODEC_ID_H264; _context->thread_count = 1; // using more than 1 thread causes race conditions _context->keyint_min = 8; _context->flags += CODEC_FLAG_EMU_EDGE; //CODEC_FLAG_LOW_DELAY; _context->flags2 += CODEC_FLAG2_FAST; if (FFMPEGLibraryInstance.AvcodecOpen(_context, _codec) < 0) { TRACE(1, "H264\tDecoder\tFailed to open H.264 decoder"); return; } else { TRACE(1, "H264\tDecoder\tDecoder successfully opened"); } } H264DecoderContext::~H264DecoderContext() { if (FFMPEGLibraryInstance.IsLoaded()) { if (_context != NULL) { if (_context->codec != NULL) { FFMPEGLibraryInstance.AvcodecClose(_context); TRACE(4, "H264\tDecoder\tClosed H.264 decoder, decoded " << _frameCounter << " Frames, skipped " << _skippedFrameCounter << " Frames" ); } } FFMPEGLibraryInstance.AvcodecFree(_context); FFMPEGLibraryInstance.AvcodecFree(_outputFrame); } if (_rxH264Frame) delete _rxH264Frame; } int H264DecoderContext::DecodeFrames(const u_char * src, unsigned & srcLen, u_char * dst, unsigned & dstLen, unsigned int & flags) { if (!FFMPEGLibraryInstance.IsLoaded()) return 0; // create RTP frame from source buffer RTPFrame srcRTP(src, srcLen); // create RTP frame from destination buffer RTPFrame dstRTP(dst, dstLen, 0); dstLen = 0; if (!_rxH264Frame->SetFromRTPFrame(srcRTP, flags)) { _rxH264Frame->BeginNewFrame(); flags = (_gotAGoodFrame ? requestIFrame : 0); _gotAGoodFrame = false; return 1; } if (srcRTP.GetMarker()==0) { // Check if we have a change in TimeStamp without Marker ie lost Frame! -SH if ( _lastTimeStamp > 0 && _lastTimeStamp != srcRTP.GetTimestamp()) { flags = (_gotAGoodFrame ? requestIFrame : 0); _gotAGoodFrame = false; } _lastTimeStamp = srcRTP.GetTimestamp(); return 1; } else _lastTimeStamp = 0; if (_rxH264Frame->GetFrameSize()==0) { _rxH264Frame->BeginNewFrame(); TRACE(4, "H264\tDecoder\tGot an empty frame - skipping"); _skippedFrameCounter++; flags = (_gotAGoodFrame ? requestIFrame : 0); _gotAGoodFrame = false; return 1; } TRACE_UP(4, "H264\tDecoder\tDecoding " << _rxH264Frame->GetFrameSize() << " bytes"); // look and see if we have read an I frame. if (_gotIFrame == 0) { if (!_rxH264Frame->IsSync()) { TRACE(1, "H264\tDecoder\tWaiting for an I-Frame"); _rxH264Frame->BeginNewFrame(); flags = (_gotAGoodFrame ? requestIFrame : 0); _gotAGoodFrame = false; return 1; } _gotIFrame = 1; } int gotPicture = 0; uint32_t bytesUsed = 0; int bytesDecoded = FFMPEGLibraryInstance.AvcodecDecodeVideo(_context, _outputFrame, &gotPicture, _rxH264Frame->GetFramePtr() + bytesUsed, _rxH264Frame->GetFrameSize() - bytesUsed); _rxH264Frame->BeginNewFrame(); if (!gotPicture) { TRACE(1, "H264\tDecoder\tDecoded "<< bytesDecoded << " bytes without getting a Picture..."); _skippedFrameCounter++; flags = (_gotAGoodFrame ? requestIFrame : 0); _gotAGoodFrame = false; return 1; } // Auto Fast Update Request. Don't trust the decoder. - SH if (_frameAutoFPU == _frameFPUInt) { TRACE(4, "H264\tDecoder\tAuto Request Fast Picture Update"); flags = requestIFrame; _frameAutoFPU = 0; } else _frameAutoFPU++; TRACE_UP(4, "H264\tDecoder\tDecoded " << bytesDecoded << " bytes"<< ", Resolution: " << _context->width << "x" << _context->height); int frameBytes = (_context->width * _context->height * 3) / 2; PluginCodec_Video_FrameHeader * header = (PluginCodec_Video_FrameHeader *)dstRTP.GetPayloadPtr(); header->x = header->y = 0; header->width = _context->width; header->height = _context->height; int size = _context->width * _context->height; if (_outputFrame->data[1] == _outputFrame->data[0] + size && _outputFrame->data[2] == _outputFrame->data[1] + (size >> 2)) { memcpy(OPAL_VIDEO_FRAME_DATA_PTR(header), _outputFrame->data[0], frameBytes); } else { unsigned char *dstData = OPAL_VIDEO_FRAME_DATA_PTR(header); for (int i=0; i<3; i ++) { unsigned char *srcData = _outputFrame->data[i]; int dst_stride = i ? _context->width >> 1 : _context->width; int src_stride = _outputFrame->linesize[i]; int h = i ? _context->height >> 1 : _context->height; if (src_stride==dst_stride) { memcpy(dstData, srcData, dst_stride*h); dstData += dst_stride*h; } else { while (h--) { memcpy(dstData, srcData, dst_stride); dstData += dst_stride; srcData += src_stride; } } } } dstRTP.SetPayloadSize(sizeof(PluginCodec_Video_FrameHeader) + frameBytes); dstRTP.SetTimestamp(srcRTP.GetTimestamp()); dstRTP.SetMarker(1); dstLen = dstRTP.GetFrameLen(); flags |= PluginCodec_ReturnCoderLastFrame; if (_outputFrame->key_frame) flags |= PluginCodec_ReturnCoderIFrame; _frameCounter++; _gotAGoodFrame = true; return 1; } ///////////////////////////////////////////////////////////////////////////// static int get_codec_options(const struct PluginCodec_Definition * codec, void *, const char *, void * parm, unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(struct PluginCodec_Option **)) return 0; *(const void **)parm = codec->userData; *parmLen = 0; //FIXME return 1; } static int free_codec_options ( const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(char ***)) return 0; char ** strings = (char **) parm; for (char ** string = strings; *string != NULL; string++) free(*string); free(strings); return 1; } static int int_from_string(std::string str) { if (str.find_first_of("\"") != std::string::npos) return (atoi( str.substr(1, str.length()-2).c_str())); return (atoi( str.c_str())); } static void profile_level_from_string (std::string profileLevelString, unsigned & profile, unsigned & constraints, unsigned & level) { if (profileLevelString.find_first_of("\"") != std::string::npos) profileLevelString = profileLevelString.substr(1, profileLevelString.length()-2); unsigned profileLevelInt = strtoul(profileLevelString.c_str(), NULL, 16); if (profileLevelInt == 0) { #ifdef DEFAULT_TO_FULL_CAPABILITIES // Baseline, Level 3 profileLevelInt = 0x42C01E; #else // Default handling according to RFC 3984 // Baseline, Level 1 profileLevelInt = 0x42C00A; #endif } profile = (profileLevelInt & 0xFF0000) >> 16; constraints = (profileLevelInt & 0x00FF00) >> 8; level = (profileLevelInt & 0x0000FF); } static int valid_for_protocol (const struct PluginCodec_Definition * codec, void *, const char *, void * parm, unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(char *)) return 0; if (codec->h323CapabilityType != PluginCodec_H323Codec_NoH323) return (STRCMPI((const char *)parm, "h.323") == 0 || STRCMPI((const char *)parm, "h323") == 0) ? 1 : 0; else return (STRCMPI((const char *)parm, "sip") == 0) ? 1 : 0; } static int GetLevelLimits(unsigned _level, unsigned & maxMB, unsigned & maxMBPS, unsigned & h264level) { if (_level == 0) return 0; // Get the Max Frame Size and rate (Macroblocks) unsigned j=0; while (h264_levels[j].level_idc) { if (h264_levels[j].h241_level == _level) { maxMB = h264_levels[j].frame_size; maxMBPS = h264_levels[j].mbps; h264level = h264_levels[j].level_idc; return 1; } j++; } return 0; } static int setFrameSizeAndRate(unsigned _level, bool stdaspect, unsigned & w, unsigned & h, unsigned & r, unsigned & h264level) { unsigned maxMB = 0; unsigned maxMBsec = 0; GetLevelLimits(_level, maxMB, maxMBsec, h264level); if (!maxMB) return 0; int j=0; while (h264_resolutions[j].width) { if (h264_resolutions[j].macroblocks <= maxMB /*&& stdaspect == h264_resolutions[j].stdaspect*/) { h = h264_resolutions[j].height; w = h264_resolutions[j].width; r = (int)(maxMBsec / (h * w / 256)); if (r > 30) { TRACE(4, "H264\tLimiting Frame rate to 30fps"); r = 30; // We limit the frame rate to 30 fps regardless of the max negotiated. } break; } j++; } return 1; } static int SetLevelMBPS(unsigned & level, unsigned maxMBs, unsigned & maxMB ) { int j=0; if (maxMB == 0) { while (h264_levels[j].level_idc) { if (level <= h264_levels[j].h241_level) { maxMB = h264_levels[j].frame_size/256 + 1; break; } else j++; } } j=0; while (h264_levels[j].level_idc) { if (h264_levels[j].mbps > 500*maxMBs) { unsigned int nlevel = h264_levels[j].h241_level; if (level == 0 || nlevel > level) level = nlevel; break; } j++; } return (level > 0); } static int SetLevelMFS(unsigned & level, unsigned mfs) { int j=0; while (h264_levels[j].level_idc) { if ((h264_levels[j].frame_size >> 8) > mfs) { unsigned int nlevel = h264_levels[j].h241_level; if (level == 0 || nlevel > level) level = nlevel; break; } j++; } return (level > 0); } static int setLevel(unsigned w, unsigned h, unsigned r, unsigned & level, unsigned & h264level) { // Get the Max Frame Size and rate (Macroblocks) uint32_t nbMBsPerFrame = w * h / 256; uint32_t nbMBsPerSec = nbMBsPerFrame * r; unsigned j=0; level = 0; while (h264_levels[j].level_idc) { if ((nbMBsPerFrame <= h264_levels[j].frame_size) && (nbMBsPerSec <= h264_levels[j].mbps)) { level = h264_levels[j-1].h241_level; h264level = h264_levels[j-1].level_idc; break; } j++; } return (level > 0); } static int adjust_bitrate_to_level (unsigned & targetBitrate, unsigned level, int idx = -1) { int i = 0; if (idx == -1) { while (h264_levels[i].level_idc) { if (h264_levels[i].level_idc == level) break; i++; } if (!h264_levels[i].level_idc) { TRACE(1, "H264\tCap\tIllegal Level negotiated"); return 0; } } else i = idx; // Correct Target Bitrate if (targetBitrate == 0) targetBitrate = h264_levels[i].bitrate; else if (targetBitrate > h264_levels[i].bitrate) targetBitrate = h264_levels[i].bitrate; TRACE(4, "H264\tCap\tBitrate: " << targetBitrate << "(" << h264_levels[i].bitrate << ")"); return 1; } static int adjust_to_level (unsigned & width, unsigned & height, unsigned & frameTime, unsigned & targetBitrate, unsigned level) { int i = 0; while (h264_levels[i].level_idc) { if (h264_levels[i].level_idc == level) break; i++; } if (!h264_levels[i].level_idc) { TRACE(1, "H264\tCap\tIllegal Level negotiated"); return 0; } // Correct max. number of macroblocks per frame uint32_t nbMBsPerFrame = width * height / 256; unsigned j = 0; TRACE(4, "H264\tCap\tFrame Size: " << nbMBsPerFrame << "(" << h264_levels[i].frame_size << ")"); if ( (nbMBsPerFrame > h264_levels[i].frame_size) || (width * width / 2048 > h264_levels[i].frame_size) || (height * height / 2048 > h264_levels[i].frame_size) ) { while (h264_resolutions[j].width) { if ( (h264_resolutions[j].macroblocks <= h264_levels[i].frame_size) && (h264_resolutions[j].width * h264_resolutions[j].width / 2048 <= h264_levels[i].frame_size) && (h264_resolutions[j].height * h264_resolutions[j].height / 2048 <= h264_levels[i].frame_size) ) break; j++; } if (!h264_resolutions[j].width) { TRACE(1, "H264\tCap\tNo Resolution found that has number of macroblocks <=" << h264_levels[i].frame_size); return 0; } else { width = h264_resolutions[j].width; height = h264_resolutions[j].height; } } // Correct macroblocks per second uint32_t nbMBsPerSecond = width * height / 256 * (90000 / frameTime); TRACE(4, "H264\tCap\tMB/s: " << nbMBsPerSecond << "(" << h264_levels[i].mbps << ")"); if (nbMBsPerSecond > h264_levels[i].mbps) frameTime = (unsigned) (90000 / 256 * width * height / h264_levels[i].mbps ); adjust_bitrate_to_level (targetBitrate, level, i); return 1; } static int adjust_to_BitRate (unsigned & width, unsigned & height, unsigned & frameRate, unsigned h241Level, unsigned cusMBPS, unsigned cusMFS, double targetBitrate, bool stdaspect) { // Find the level matching the targetBitrate double maxBitRate=0.0; double maxmbs=0.0; double maxmbps=0.0; double calcMFS=0.0; double calcMPBS=0.0; int i = 0; while (h264_levels[i].level_idc) { if (h264_levels[i].h241_level == h241Level) { h241Level = h264_levels[i].h241_level; // For Framesize and rate calculations if (cusMBPS > h264_levels[i].mbps) maxmbps = cusMBPS; else maxmbps = h264_levels[i].mbps; if (cusMFS > h264_levels[i].frame_size) maxmbs = cusMFS; else maxmbs = h264_levels[i].frame_size; maxBitRate = h264_levels[i].bitrate; break; } i++; } calcMPBS = targetBitrate / kbtoMBPS; calcMFS = calcMPBS/minFPS; if (calcMFS > maxmbs) calcMFS = maxmbs; // find the maximum size with aspect ratio double as; if (stdaspect) as = 1.222222; else as = 1.777777; unsigned expWidth = (unsigned)(sqrt((calcMFS * 256.0)/as)*as) + 1; // find the matching supported size to get width/height i=0; while (h264_resolutions[i].width) { if (h264_resolutions[i].stdaspect == stdaspect && expWidth >= h264_resolutions[i].width) { width = h264_resolutions[i].width; height = h264_resolutions[i].height; break; } i++; } // Workout the frame rate frameRate = (unsigned)calcMPBS/((width * height)/256.0); return 1; } ///////////////////////////////////////////////////////////////////////////// static void * create_encoder(const struct PluginCodec_Definition * /*codec*/) { return new H264EncoderContext; } static void destroy_encoder(const struct PluginCodec_Definition * /*codec*/, void * _context) { H264EncoderContext * context = (H264EncoderContext *)_context; delete context; } static int codec_encoder(const struct PluginCodec_Definition * , void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { H264EncoderContext * context = (H264EncoderContext *)_context; return context->EncodeFrames((const u_char *)from, *fromLen, (u_char *)to, *toLen, *flag); } static int to_normalised_options(const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(char ***)) return 0; unsigned profile = 66; unsigned constraints = 0; unsigned level = 51; unsigned width = 352; unsigned height = 288; unsigned frameTime = 3000; unsigned targetBitrate = 64000; for (const char * const * option = *(const char * const * *)parm; *option != NULL; option += 2) { if (STRCMPI(option[0], "CAP RFC3894 Profile Level") == 0) { profile_level_from_string(option[1], profile, constraints, level); } if (STRCMPI(option[0], PLUGINCODEC_OPTION_FRAME_WIDTH) == 0) width = atoi(option[1]); if (STRCMPI(option[0], PLUGINCODEC_OPTION_FRAME_HEIGHT) == 0) height = atoi(option[1]); if (STRCMPI(option[0], PLUGINCODEC_OPTION_FRAME_TIME) == 0) frameTime = atoi(option[1]); if (STRCMPI(option[0], PLUGINCODEC_OPTION_TARGET_BIT_RATE) == 0) targetBitrate = atoi(option[1]); } TRACE(4, "H264\tCap\tProfile and Level: " << profile << ";" << constraints << ";" << level); // Though this is not a strict requirement we enforce //it here in order to obtain optimal compression results width -= width % 16; height -= height % 16; if (!adjust_to_level (width, height, frameTime, targetBitrate, level)) return 0; char ** options = (char **)calloc(9, sizeof(char *)); *(char ***)parm = options; if (options == NULL) return 0; options[0] = strdup(PLUGINCODEC_OPTION_FRAME_WIDTH); options[1] = num2str(width); options[2] = strdup(PLUGINCODEC_OPTION_FRAME_HEIGHT); options[3] = num2str(height); options[4] = strdup(PLUGINCODEC_OPTION_FRAME_TIME); options[5] = num2str(frameTime); options[6] = strdup(PLUGINCODEC_OPTION_TARGET_BIT_RATE); options[7] = num2str(targetBitrate); return 1; } static int to_customised_options(const struct PluginCodec_Definition * codec, void * _context, const char *, void * parm, unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(char ***)) return 0; unsigned orgframeWidth = codec->parm.video.maxFrameWidth; unsigned orgframeHeight = codec->parm.video.maxFrameHeight; int i = 0; unsigned frameWidth = 0; unsigned frameHeight = 0; unsigned frameRate = 0; unsigned level = 0; unsigned h264level = 0; unsigned targetBitrate = 0; const char ** option = (const char **)parm; for (i = 0; option[i] != NULL; i += 2) { if (STRCMPI(option[i], PLUGINCODEC_OPTION_FRAME_WIDTH) == 0) frameWidth = atoi(option[i+1]); if (STRCMPI(option[i], PLUGINCODEC_OPTION_FRAME_HEIGHT) == 0) frameHeight = atoi(option[i+1]); if (STRCMPI(option[i], PLUGINCODEC_OPTION_FRAME_TIME) == 0) frameRate = (unsigned)(H264_CLOCKRATE / atoi(option[i+1])); if (STRCMPI(option[i], PLUGINCODEC_OPTION_TARGET_BIT_RATE) == 0) targetBitrate = atoi(option[i+1]); } // Make sure the custom size does not exceed the codec limits if (frameWidth > orgframeWidth || frameHeight > orgframeHeight) return 0; if (!setLevel(frameWidth,frameHeight,frameRate,level,h264level) && !adjust_bitrate_to_level(targetBitrate, h264level)) return 0; char ** options = (char **)parm; if (options == NULL) return 0; for (i = 0; options[i] != NULL; i += 2) { if (STRCMPI(options[i], PLUGINCODEC_OPTION_TARGET_BIT_RATE) == 0) options[i+1] = num2str(targetBitrate); if (STRCMPI(options[i], PLUGINCODEC_OPTION_LEVEL) == 0) options[i+1] = num2str(level); } if (_context != NULL) { H264EncoderContext * context = (H264EncoderContext *)_context; context->Lock(); context->SetProfileLevel(66, 0, h264level); context->SetFrameWidth(frameWidth); context->SetFrameHeight(frameHeight); context->SetFrameRate(frameRate); context->SetTargetBitrate((unsigned) (targetBitrate / 1000) ); context->ApplyOptions(); context->Unlock(); } return 1; } int encoder_formats( const struct PluginCodec_Definition * codec, void * _context, const char *, void * parm, unsigned * parmLen) { TRACE(4,"Supported Formats"); if (_context == NULL || parm == NULL || *parmLen != sizeof(char ***)) return 0; H264EncoderContext * context = (H264EncoderContext *)_context; // Get Codec Limits unsigned limitWidth = codec->parm.video.maxFrameWidth; unsigned limitHeight = codec->parm.video.maxFrameHeight; char ** options = (char **)parm; if (options == NULL) return 0; // Clear default values... context->ClearInputFormat(); for (int i = 0; options[i] != NULL; i += 2) { if(STRNCMPI(options[i], PLUGINCODEC_OPTION_INPUT_FORMAT, strlen(PLUGINCODEC_OPTION_INPUT_FORMAT)) == 0) { inputFormats f; f.w=0; f.h=0; f.r=0; char* token = strtok(options[i+1],","); int j=0; while (token) { switch (j) { case 0: f.w = atoi(token); case 1: f.h = atoi(token); case 2: f.r = atoi(token); } token = strtok(NULL,","); j++; } f.mb = (f.w * f.h)/256; if ((f.w <= limitWidth) && (f.h <= limitHeight)) { TRACE(4,"Frame Size w " << f.w << " h " << f.h << " r " << f.r << " mb " << f.mb); context->AddInputFormat(f); } } } inputFormats fmt; context->GetInputFormat(fmt); // TODO: check return value TRACE(2,"Adjusted w " << fmt.w << " h " << fmt.h << " r " << fmt.r); context->Lock(); context->SetFrameWidth(fmt.w); context->SetFrameHeight(fmt.h); context->SetFrameRate(fmt.r); context->ApplyOptions(); context->Unlock(); for (int i = 0; options[i] != NULL; i += 2) { if (STRCMPI(options[i], PLUGINCODEC_OPTION_FRAME_TIME) == 0) options[i+1] = num2str(H264_CLOCKRATE/fmt.r); if (STRCMPI(options[i], PLUGINCODEC_OPTION_FRAME_HEIGHT) == 0) options[i+1] = num2str(fmt.h); if (STRCMPI(options[i], PLUGINCODEC_OPTION_FRAME_WIDTH) == 0) options[i+1] = num2str(fmt.w); } return 1; } int encoder_flowcontrol( const struct PluginCodec_Definition * codec, void * _context, const char *, void * parm, unsigned * parmLen) { if (_context == NULL || parm == NULL || *parmLen != sizeof(char ***)) return 0; H264EncoderContext * context = (H264EncoderContext *)_context; unsigned targetBitrate = 0; unsigned frameWidth = 0; unsigned frameHeight = 0; unsigned frameRate = 0; unsigned h241Level = 0; unsigned cusMBPS = 0; unsigned cusMFS = 0; bool stdAspect = true; char ** options = (char **)parm; if (options == NULL) return 0; for (int i = 0; options[i] != NULL; i += 2) { if (STRCMPI(options[i], PLUGINCODEC_OPTION_TARGET_BIT_RATE) == 0) targetBitrate = atoi(options[i+1]); if (STRCMPI(options[i], PLUGINCODEC_OPTION_ASPECT) == 0) stdAspect = (STRCMPI(options[i+1],"2") == 0); // 2 is scale to stdSize if (STRCMPI(options[i], PLUGINCODEC_OPTION_LEVEL) == 0) h241Level = atoi(options[i+1]); if (STRCMPI(options[i], PLUGINCODEC_OPTION_CUSMBPS) == 0) cusMBPS = atoi(options[i+1]); if (STRCMPI(options[i], PLUGINCODEC_OPTION_CUSMFS) == 0) cusMFS = atoi(options[i+1]); } TRACE(4, "H264\tFLOW\tAdjust to bitrate: " << targetBitrate); // do the matching of frame width/height/rate to bitrate bool matchedtoInput = false; context->SetMaxMBPS(targetBitrate/kbtoMBPS); inputFormats fmt; if (context->GetInputFormat(fmt)) { frameWidth = fmt.w; frameHeight = fmt.h; frameRate = fmt.r; matchedtoInput = true; TRACE(2, "H264\tFLOW\tAdjust to size W: " << frameWidth << " H: " << frameHeight << " R: " << frameRate); } if (matchedtoInput || adjust_to_BitRate (frameWidth, frameHeight, frameRate, h241Level, cusMBPS, cusMFS, targetBitrate, stdAspect)) { // initiating the codec to the new framerate/size context->Lock(); context->SetTargetBitrate((unsigned) (targetBitrate / 1000) ); context->SetFrameHeight(frameHeight); context->SetFrameWidth(frameWidth); context->SetFrameRate(frameRate); context->ApplyOptions(); context->Unlock(); // Write back the option list the changed information. if (parm != NULL) { char ** options = (char **)parm; if (options == NULL) return 0; for (int i = 0; options[i] != NULL; i += 2) { if (STRCMPI(options[i], PLUGINCODEC_OPTION_FRAME_TIME) == 0) options[i+1] = num2str(H264_CLOCKRATE/frameRate); if (STRCMPI(options[i], PLUGINCODEC_OPTION_FRAME_HEIGHT) == 0) options[i+1] = num2str(frameHeight); if (STRCMPI(options[i], PLUGINCODEC_OPTION_FRAME_WIDTH) == 0) options[i+1] = num2str(frameWidth); } } return 1; } return 0; } static int encoder_set_options( const struct PluginCodec_Definition * codec, void * _context, const char *, void * parm, unsigned * parmLen) { if (_context == NULL || parmLen == NULL || *parmLen != sizeof(const char **)) return 0; H264EncoderContext * context = (H264EncoderContext *)_context; context->Lock(); unsigned profile = 66; unsigned constraints = 0; unsigned level = 0; //51; unsigned orgframeWidth = codec->parm.video.maxFrameWidth; unsigned frameWidth = orgframeWidth; unsigned orgframeHeight = codec->parm.video.maxFrameHeight; unsigned frameHeight = orgframeHeight; unsigned orgframeRate = codec->parm.video.maxFrameRate; unsigned frameRate = orgframeRate; unsigned targetBitrate = codec->bitsPerSec; unsigned h264level = 36; unsigned cusMBPS = 0; // Custom maximum MBPS unsigned cusMFS = 0; // Custom maximum FrameSize unsigned staticMBPS = 0; /// static macroblocks per sec unsigned maxNALSize = 0; /// max NAL Size bool stdAspect = true; if (parm != NULL) { const char ** options = (const char **)parm; int i; for (i = 0; options[i] != NULL; i += 2) { // fprintf(stderr, "%s = %s\n", options[i], options[i+1]); char msg[1024]; snprintf(msg, sizeof(msg), "H.264 encoder_set_options: %s = %s", options[i], options[i+1]); TRACE(1, msg); if (STRCMPI(options[i], "CAP RFC3894 Profile Level") == 0) { profile_level_from_string (options[i+1], profile, constraints, h264level); } if (STRCMPI(options[i], PLUGINCODEC_OPTION_TARGET_BIT_RATE) == 0) targetBitrate = atoi(options[i+1]); if (STRCMPI(options[i], PLUGINCODEC_OPTION_FRAME_TIME) == 0) frameRate = (unsigned)(H264_CLOCKRATE / atoi(options[i+1])); if (STRCMPI(options[i], PLUGINCODEC_OPTION_FRAME_HEIGHT) == 0) frameHeight = atoi(options[i+1]); if (STRCMPI(options[i], PLUGINCODEC_OPTION_FRAME_WIDTH) == 0) frameWidth = atoi(options[i+1]); if (STRCMPI(options[i], PLUGINCODEC_OPTION_MAX_FRAME_SIZE) == 0) context->SetMaxRTPFrameSize(atoi(options[i+1])); if (STRCMPI(options[i], PLUGINCODEC_OPTION_TX_KEY_FRAME_PERIOD) == 0) context->SetMaxKeyFramePeriod (atoi(options[i+1])); if (STRCMPI(options[i], PLUGINCODEC_OPTION_TEMPORAL_SPATIAL_TRADE_OFF) == 0) context->SetTSTO (atoi(options[i+1])); if (STRCMPI(options[i], PLUGINCODEC_OPTION_LEVEL) == 0) level = atoi(options[i+1]); if (STRCMPI(options[i], PLUGINCODEC_OPTION_CUSMBPS) == 0) cusMBPS = atoi(options[i+1]); if (STRCMPI(options[i], PLUGINCODEC_OPTION_CUSMFS) == 0) cusMFS = atoi(options[i+1]); if (STRCMPI(options[i], PLUGINCODEC_OPTION_STATICMBPS) == 0) staticMBPS = atoi(options[i+1]); if (STRCMPI(options[i], PLUGINCODEC_OPTION_MAXNALSIZE) == 0) maxNALSize = atoi(options[i+1]); if (STRCMPI(options[i], PLUGINCODEC_OPTION_ASPECT) == 0) stdAspect = (STRCMPI(options[i+1],"2") == 0); // 2 is scale to stdSize } } if (cusMBPS > 0 && SetLevelMBPS(level, cusMBPS, cusMFS) && SetLevelMFS(level,cusMFS)) { unsigned max_rate = (cusMBPS * 500) / (cusMFS * 256); if (frameRate > max_rate) // don't force frame rate to maximum possible, if application set a lower value frameRate = max_rate; TRACE(4, "H264\tCap\tCustom level : " << level << " rate " << frameRate); } if (level > 0) { TRACE(1, "H264\tCap\tProfile and Level: " << profile << ";" << constraints << ";" << level); unsigned maxMB =0; unsigned maxMBPS = 0; if (cusMBPS > 0 && cusMFS > 0) { maxMB = cusMFS * 256; maxMBPS = cusMBPS * 500; } else GetLevelLimits(level,maxMB,maxMBPS,h264level); context->SetMaxMB(maxMB); context->SetMaxMBPS(maxMBPS); // Adjust to level sent in the signalling if (!setFrameSizeAndRate(level,stdAspect,frameWidth,frameHeight,frameRate,h264level) || !adjust_bitrate_to_level(targetBitrate, h264level)) { context->Unlock(); return 0; } // adjust the image to the frame limits if ((frameHeight > orgframeHeight) || (frameWidth > orgframeWidth)) { if (setLevel(orgframeWidth, orgframeHeight, orgframeRate, level, h264level)) { if (!setFrameSizeAndRate(level, stdAspect, frameWidth, frameHeight, frameRate, h264level) || !adjust_bitrate_to_level(targetBitrate, h264level)) { context->Unlock(); return 0; } } } // If a custom max NAL size if (maxNALSize > 500 && maxNALSize < 1400) context->SetMaxNALSize(maxNALSize); // Write back the option list the changed information to the level if (parm != NULL) { char ** options = (char **)parm; if (options == NULL) return 0; for (int i = 0; options[i] != NULL; i += 2) { if (STRCMPI(options[i], PLUGINCODEC_OPTION_TARGET_BIT_RATE) == 0) options[i+1] = num2str(targetBitrate); if (STRCMPI(options[i], PLUGINCODEC_OPTION_FRAME_TIME) == 0) options[i+1] = num2str(H264_CLOCKRATE/frameRate); if (STRCMPI(options[i], PLUGINCODEC_OPTION_FRAME_HEIGHT) == 0) options[i+1] = num2str(frameHeight); if (STRCMPI(options[i], PLUGINCODEC_OPTION_FRAME_WIDTH) == 0) options[i+1] = num2str(frameWidth); if (STRCMPI(options[i], PLUGINCODEC_OPTION_LEVEL) == 0) options[i+1] = num2str(level); } } // Set the Values in the codec context->SetTargetBitrate((unsigned) (targetBitrate / 1000) ); context->SetMaxMBPS(targetBitrate/kbtoMBPS); context->SetProfileLevel(profile, constraints, h264level); context->SetFrameHeight(frameHeight); context->SetFrameWidth(frameWidth); context->SetFrameRate(frameRate); } else { context->SetTargetBitrate((unsigned) (targetBitrate / 1000) ); context->SetProfileLevel(profile, constraints, h264level); } context->ApplyOptions(); context->Unlock(); return 1; } static int encoder_event_handler(const struct PluginCodec_Definition * codec, void * _context, const char *, void * parm, unsigned * parmLen) { if (_context == NULL || parmLen == NULL || *parmLen != sizeof(const char **)) return 0; H264EncoderContext * context = (H264EncoderContext *)_context; context->Lock(); if (parm != NULL) { char ** parms = (char **)parm; if (parms == NULL) return 0; for (int i = 0; parms[i] != NULL; i += 2) { if (STRCMPI(parms[i], PLUGINCODEC_EVENT_FASTUPDATE) == 0) { TRACE(4, "H264\tEvt\tFAST PICTURE UPDATE:"); context->FastUpdateRequested(); } if (STRCMPI(parms[i], PLUGINCODEC_EVENT_FLOWCONTROL) == 0) { TRACE(4, "H264\tEvt\tFLOW CONTROL: " << parms[i+1]); } /* if (STRCMPI(parms[i], PLUGINCODEC_EVENT_LOSTPARTIAL) == 0) // do something if (STRCMPI(parms[i], PLUGINCODEC_EVENT_LOSTPICTURE) == 0) // do something */ } } context->Unlock(); return 1; } static int encoder_get_output_data_size(const PluginCodec_Definition *, void *, const char *, void *, unsigned *) { return 2000; //FIXME } ///////////////////////////////////////////////////////////////////////////// static void * create_decoder(const struct PluginCodec_Definition *) { return new H264DecoderContext; } static void destroy_decoder(const struct PluginCodec_Definition * /*codec*/, void * _context) { H264DecoderContext * context = (H264DecoderContext *)_context; delete context; } static int codec_decoder(const struct PluginCodec_Definition *, void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { H264DecoderContext * context = (H264DecoderContext *)_context; return context->DecodeFrames((const u_char *)from, *fromLen, (u_char *)to, *toLen, *flag); } static int decoder_get_output_data_size(const PluginCodec_Definition * codec, void *, const char *, void *, unsigned *) { return sizeof(PluginCodec_Video_FrameHeader) + ((codec->parm.video.maxFrameWidth * codec->parm.video.maxFrameHeight * 3) / 2); } ///////////////////////////////////////////////////////////////////////////// static int merge_profile_level_h264(char ** result, const char * dst, const char * src) { // c0: obeys A.2.1 Baseline // c1: obeys A.2.2 Main // c2: obeys A.2.3, Extended // c3: if profile_idc profile = 66, 77, 88, and level =11 and c3: obbeys annexA for level 1b unsigned srcProfile, srcConstraints, srcLevel; unsigned dstProfile, dstConstraints, dstLevel; profile_level_from_string(src, srcProfile, srcConstraints, srcLevel); profile_level_from_string(dst, dstProfile, dstConstraints, dstLevel); switch (srcLevel) { case 10: srcLevel = 8; break; default: break; } switch (dstLevel) { case 10: dstLevel = 8; break; default: break; } if (dstProfile > srcProfile) { dstProfile = srcProfile; } dstConstraints |= srcConstraints; if (dstLevel > srcLevel) dstLevel = srcLevel; switch (dstLevel) { case 8: dstLevel = 10; break; default: break; } char buffer[10]; sprintf(buffer, "%x", (dstProfile<<16)|(dstConstraints<<8)|(dstLevel)); *result = strdup(buffer); TRACE(4, "H264\tCap\tCustom merge profile-level: " << src << " and " << dst << " to " << *result); return true; } static int merge_packetization_mode(char ** result, const char * dst, const char * src) { unsigned srcInt = int_from_string (src); unsigned dstInt = int_from_string (dst); if (srcInt == 5) { #ifdef DEFAULT_TO_FULL_CAPABILITIES srcInt = 1; #else // Default handling according to RFC 3984 srcInt = 0; #endif } if (dstInt == 5) { #ifdef DEFAULT_TO_FULL_CAPABILITIES dstInt = 1; #else // Default handling according to RFC 3984 dstInt = 0; #endif } if (dstInt > srcInt) dstInt = srcInt; char buffer[10]; sprintf(buffer, "%d", dstInt); *result = strdup(buffer); TRACE(4, "H264\tCap\tCustom merge packetization-mode: " << src << " and " << dst << " to " << *result); // if (dstInt > 0) return 1; // return 0; } static void free_string(char * str) { free(str); } ///////////////////////////////////////////////////////////////////////////// extern "C" { PLUGIN_CODEC_IMPLEMENT(H264) PLUGIN_CODEC_DLL_API struct PluginCodec_Definition * PLUGIN_CODEC_GET_CODEC_FN(unsigned * count, unsigned version) { char * debug_level = getenv ("PTLIB_TRACE_CODECS"); if (debug_level!=NULL) { Trace::SetLevel(atoi(debug_level)); } else { Trace::SetLevel(0); } debug_level = getenv ("PTLIB_TRACE_CODECS_USER_PLANE"); if (debug_level!=NULL) { Trace::SetLevelUserPlane(atoi(debug_level)); } else { Trace::SetLevelUserPlane(0); } if (!FFMPEGLibraryInstance.Load()) { *count = 0; TRACE(1, "H264\tCodec\tDisabled"); return NULL; } FFMPEGLibraryInstance.AvLogSetLevel(AV_LOG_DEBUG); FFMPEGLibraryInstance.AvLogSetCallback(&logCallbackFFMPEG); if (version < PLUGIN_CODEC_VERSION_OPTIONS) { *count = 0; TRACE(1, "H264\tCodec\tDisabled - plugin version mismatch"); return NULL; } else { *count = sizeof(h264CodecDefn) / sizeof(struct PluginCodec_Definition); TRACE(1, "H264\tCodec\tEnabled"); return h264CodecDefn; } } }; h323plus/plugins/video/H.261-vic/0000755000175000017500000000000011512552753015161 5ustar markmarkh323plus/plugins/video/H.261-vic/Makefile.in0000644000175000017500000000744611341106252017226 0ustar markmark# # Makefile for GSM 06.10 # # Copyright (C) 2004 Post Increment, All Rights Reserved # # The contents of this file are subject to the Mozilla Public License # Version 1.0 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is Open H323 library. # # The Initial Developer of the Original Code is Post Increment # # Contributor(s): ______________________________________. # # $Log: Makefile.in,v $ # Revision 1.1 2010/02/24 02:19:22 shorne # First commit of h323plus mirror # # Revision 1.6 2007/08/26 09:27:33 dominance # Large video codecs cleanup by Matthias Schneider (ma30002000 _at_ yahoo.de), # consisting of: # # plugins/common: # * Add display calling plugin in debug output # * Only check for ffmpeg functions the calling plugin really depends on # plugins/H.261-vic: # * Introduce debug tracing # plugins/H.263+: # * Check for correct codec initialization # * Really drop frame if it doesn't contain a picture header # * Change description from H.263 to H.263P (p as in plus) # * Make use of shared code # plugins/H.264: # * Fix include of x264.h for MPL build # * Allow disabling of sending STAP-A packets # plugins/THEORA: # * Make use of shared code # # Revision 1.5 2007/04/19 06:09:04 csoutheren # Fixed plugin build system to use better detection for OSX # Resolved 1636262 - Fix for audio plugins for OSX # # Revision 1.4 2006/10/10 01:42:55 csoutheren # Applied patches from Ekiga bug 360869 - fix OpenSolaris build problems # Thanks to Boying Lu # # Revision 1.3 2006/08/20 00:32:25 csoutheren # Added missing files to Makefile # # Revision 1.2 2006/08/12 10:59:14 rjongbloed # Added Linux build for H.261 plug-in. # VC_PLUGIN_DIR=@VC_PLUGIN_DIR@ prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ target_os=@target_os@ SRCDIR = ./vic OBJDIR = ./obj BASENAME=h261-vic SONAME =$(BASENAME) COMMONDIR =../common PLUGINDIR =../../ CC =@CC@ CFLAGS =@CFLAGS@ CXX =@CXX@ LDSO =@LDSO@ PLUGINEXT =@PLUGINEXT@ STDCCFLAGS =@STDCCFLAGS@ LDFLAGS =@LDFLAGS@ EXTRACCFLAGS += -I$(COMMONDIR) -I$(PLUGINDIR) vpath %.cxx $(COMMONDIR) vpath %.cxx $(SRCDIR) vpath %.c $(SRCDIR) vpath %.o $(OBJDIR) SRCS += h261vic.cxx \ $(COMMONDIR)/trace.cxx \ $(SRCDIR)/encoder-h261.cxx \ $(SRCDIR)/transmitter.cxx \ $(SRCDIR)/vid_coder.cxx \ $(SRCDIR)/p64encoder.cxx \ $(SRCDIR)/p64.cxx \ $(SRCDIR)/dct.cxx \ $(SRCDIR)/huffcode.c \ $(SRCDIR)/bv.c \ ifeq ($(VERBOSE),) Q_CC = @echo [CC] `echo $< | sed s^@OPALDIR@/^^` ; Q_LD = @echo [LD] `echo $(PLUGIN) | sed s^@OPALDIR@/^^` ; endif $(OBJDIR)/%.o : %.cxx @mkdir -p $(OBJDIR) >/dev/null 2>&1 $(Q_CC)$(CXX) -I../../../include $(EXTRACCFLAGS) $(STDCCFLAGS) $(OPTCCFLAGS) $(CFLAGS) -c $< -o $@ $(OBJDIR)/%.o : %.c @mkdir -p $(OBJDIR) >/dev/null 2>&1 $(Q_CC)$(CC) -I../../../include $(EXTRACCFLAGS) $(STDCCFLAGS) $(OPTCCFLAGS) $(CFLAGS) -c $< -o $@ PLUGIN = ./$(BASENAME)_video_pwplugin.$(PLUGINEXT) STATIC = ./lib$(BASENAME)_video_s.a OBJECTS = $(addprefix $(OBJDIR)/,$(patsubst %.c,%.o,$(patsubst %.cxx,%.o,$(notdir $(SRCS))))) $(PLUGIN): $(OBJECTS) ifeq (,$(findstring solaris,$(target_os))) $(Q_LD)$(CXX) $(LDSO) -o $@ $^ else $(Q_LD)$(CXX) $(LDSO) $@ -o $@ $^ endif install: mkdir -p $(DESTDIR)$(libdir)/$(VC_PLUGIN_DIR) install $(PLUGIN) $(DESTDIR)$(libdir)/$(VC_PLUGIN_DIR) uninstall: rm -f $(DESTDIR)$(libdir)/$(VC_PLUGIN_DIR)/$(PLUGIN) clean: rm -f $(OBJECTS) $(PLUGIN) ########################################### h323plus/plugins/video/H.261-vic/h261vic_2008.vcproj0000644000175000017500000001725311341106252020236 0ustar markmark h323plus/plugins/video/H.261-vic/h261vic.vcproj0000644000175000017500000001313511341106252017560 0ustar markmark h323plus/plugins/video/H.261-vic/vic/0000755000175000017500000000000011512676500015737 5ustar markmarkh323plus/plugins/video/H.261-vic/vic/p64encoder.cxx0000644000175000017500000001312511512676420020437 0ustar markmark/*p64encoder.h copyright (c)Indranet Technologies ltd (lara@indranet.co.nz) * Author Derek J Smithies (derek@indranet.co.nz) * *This file contains code which is the top level of * a)video grabbing * b)transformation into h261 packets. * * Questions may be sent to Derek J Smithies. * ****************************************************************/ /************ Change log * * $Log: p64encoder.cxx,v $ * Revision 1.3 2011/01/10 21:41:36 willamowius * revert: call PreIncEncodeSetup() again * * Revision 1.2 2011/01/09 10:06:56 shorne * Fix for polycom interop.. Alessandro Angeli * * Revision 1.1 2010/02/24 02:19:22 shorne * First commit of h323plus mirror * * Revision 1.3 2006/08/01 13:02:40 rjongbloed * Merged changes from OpenH323 on removing need to winsock (ntohl function reference) * * Revision 1.2 2006/07/31 09:09:22 csoutheren * Checkin of validated codec used during development * * Revision 1.1.2.1 2006/04/06 01:17:17 csoutheren * Initial version of H.261 video codec plugin for OPAL * * Revision 2.2 2005/08/31 13:16:02 rjongbloed * Ported video fast update from OpenH323 * * Revision 2.1 2003/03/15 23:43:00 robertj * Update to OpenH323 v1.11.7 * Revision 1.16 2006/07/22 13:15:31 rjongbloed * Eliminate need for linking winsock just for ntohl() function. * * Revision 1.15 2003/04/03 23:54:15 robertj * Added fast update to H.261 codec, thanks Gustavo Garcэa Bernardo * * Revision 1.14 2003/02/10 00:32:15 robertj * Changed delete of array pointer (use of []) to avoid complaints. * Removed code for redundent class and constructor. * * Revision 1.13 2002/04/05 00:53:19 dereks * Modify video frame encoding so that frame is encoded on an incremental basis. * Thanks to Walter Whitlock - good work. * * Revision 1.12 2001/12/04 04:26:06 robertj * Added code to allow change of video quality in H.261, thanks Damian Sandras * * Revision 1.11 2001/09/25 03:14:48 dereks * Add constant bitrate control for the h261 video codec. * Thanks Tiziano Morganti for the code to set bit rate. Good work! * * Revision 1.10 2000/12/19 22:22:34 dereks * Remove connection to grabber-OS.cxx files. grabber-OS.cxx files no longer used. * Video data is now read from a video channel, using the pwlib classes. * * Revision 1.9 2000/10/13 01:47:26 dereks * Include command option for setting the number of transmitted video * frames per second. use --videotxfps n * * Revision 1.8 2000/09/08 06:41:38 craigs * Added ability to set video device * Added ability to select test input frames * * Revision 1.7 2000/08/25 03:18:50 dereks * Add change log facility (Thanks Robert for the info on implementation) * * * ********/ #include "p64encoder.h" P64Encoder::P64Encoder(int quant_level,int fillLevel) { trans = new Transmitter(); h261_edr = new H261PixelEncoder(trans); h261_edr->setq(quant_level); vid_frame = new VideoFrame(WIDTH,HEIGHT); pre_vid = new Pre_Vid_Coder(); pre_vid->SetBackgroundFill(fillLevel); //vid_frame2 = new VideoFrame(WIDTH,HEIGHT); //testing //pre_vid2 = new Pre_Vid_Coder(); //testing //pre_vid2->SetBackgroundFill(fillLevel); //testing } P64Encoder::~P64Encoder(){ delete pre_vid; delete vid_frame; delete h261_edr; delete trans; //delete pre_vid2; //testing //delete vid_frame2; //testing } void P64Encoder::SetQualityLevel(int qLevel) { h261_edr->setq(qLevel); } void P64Encoder::SetBackgroundFill(int idle) { pre_vid->SetBackgroundFill(idle); //pre_vid2->SetBackgroundFill(idle); //testing } void P64Encoder::SetSize(int width,int height) { vid_frame->SetSize(width,height); //vid_frame2->SetSize(width,height); //testing } void P64Encoder::ProcessOneFrame() { pre_vid->ProcessFrame(vid_frame); h261_edr->consume(vid_frame); } void P64Encoder::PreProcessOneFrame() { pre_vid->ProcessFrame(vid_frame); h261_edr->PreIncEncodeSetup(vid_frame); } void P64Encoder::IncEncodeAndGetPacket( u_char * buffer, // returns buffer of encoded data unsigned & length ) // returns actual length of encoded data buffer { h261_edr->IncEncodeAndGetPacket(buffer, length); } void P64Encoder::ReadOnePacket( u_char * buffer, /// Buffer of encoded data unsigned & length /// Actual length of encoded data buffer ) { u_char * b_ptr; u_char * h_ptr; unsigned len_head,len_buff; trans->GetNextPacket(&h_ptr, &b_ptr, len_head, len_buff); length=len_head+len_buff; if(length!=0) { //Check to see if a packet was read. SWAP32(buffer, h_ptr); memcpy(buffer+len_head,b_ptr,len_buff); } } u_char* P64Encoder::GetFramePtr() { if (vid_frame) return vid_frame->frameptr; return NULL; } void P64Encoder::FastUpdatePicture() { pre_vid->FastUpdatePicture(); } ///////////////////////////////////////////////////////////////////////////// //VideoFrame VideoFrame::VideoFrame(u_char *cr, int newWidth, int newHeight) { crvec = cr; frameptr = NULL; width = height = 0; // avoid uninitialized compare SetSize(newWidth,newHeight); } VideoFrame::VideoFrame(int newWidth, int newHeight) { crvec = NULL; frameptr = NULL; width = height = 0; // avoid uninitialized compare SetSize(newWidth,newHeight); } void VideoFrame::SetSize(int newWidth, int newHeight) { if ((newWidth!=width)||(newHeight!=height)) { width = newWidth; height = newHeight; if (frameptr) delete [] frameptr; frameptr= new BYTE[(width*height*3)>>1]; } } VideoFrame::~VideoFrame() { if (frameptr) delete [] frameptr; } ///////////////////////////////////////////////////////////////////////////// h323plus/plugins/video/H.261-vic/vic/dct.cxx0000644000175000017500000010023311341106252017224 0ustar markmark/* * Copyright (c) 1994 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the Network Research * Group at Lawrence Berkeley Laboratory. * 4. Neither the name of the University nor of the Laboratory may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /************ Change log * * $Log: dct.cxx,v $ * Revision 1.1 2010/02/24 02:19:22 shorne * First commit of h323plus mirror * * Revision 1.3 2006/08/10 07:05:46 csoutheren * Fixed compile warnings on VC 2005 * * Revision 1.2 2006/07/31 09:09:21 csoutheren * Checkin of validated codec used during development * * Revision 1.1.2.1 2006/04/06 01:17:17 csoutheren * Initial version of H.261 video codec plugin for OPAL * * Revision 2.1 2003/03/15 23:42:59 robertj * Update to OpenH323 v1.11.7 * * Revision 1.14 2003/03/14 07:25:55 robertj * Removed $header keyword so is not different on alternate repositories * * Revision 1.13 2002/10/24 21:05:26 dereks * Fix compile time warning. * * Revision 1.12 2002/05/17 01:47:33 dereks * backout the integer maths in the h261 codec. * * Revision 1.11 2002/02/15 03:54:31 yurik * Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com * * Revision 1.10 2001/10/24 20:24:32 dereks * Remove green stripes under windows for INT_64. Thanks to Robert Lupa. * * Revision 1.9 2001/10/17 03:52:39 robertj * Fixed MSVC compatibility * * Revision 1.8 2001/10/17 01:54:36 yurik * Fixed clash with CE includes for INT32 type * * Revision 1.7 2001/10/16 23:51:42 dereks * Change vic's fdct() from floating-point to fix-point. Improves performance * for h261 video significantly on some machines. Thanks to Cosmos Jiang * * Revision 1.6 2001/10/16 21:20:07 yurik * Removed warnings on Windows CE. Submitted by Jehan Bing, jehan@bravobrava.com * * Revision 1.3 2000/12/19 22:22:34 dereks * Remove connection to grabber-OS.cxx files. grabber-OS.cxx files no longer used. * Video data is now read from a video channel, using the pwlib classes. * * Revision 1.2 2000/08/25 03:18:49 dereks * Add change log facility (Thanks Robert for the info on implementation) * * * ********/ #include "bsd-endian.h" #include "dct.h" /* * Macros for fix-point (integer) arithmetic. FP_NBITS gives the number * of binary digits past the decimal point. FP_MUL computes the product * of two fixed point numbers. A fixed point number and an integer * can be directly multiplied to give a fixed point number. FP_SCALE * converts a floating point number to fixed point (and is used only * at startup, not by the dct engine). FP_NORM converts a fixed * point number to scalar by rounding to the closest integer. * FP_JNORM is similar except it folds the jpeg bias of 128 into the * rounding addition. */ #define FP_NBITS 15 #define FP_MUL(a, b) ((((a) >> 5) * ((b) >> 5)) >> (FP_NBITS - 10)) #define FP_SCALE(v) (int)((double)(v) * double(1 << FP_NBITS) + 0.5) #define FP_NORM(v) (((v) + (1 << (FP_NBITS-1))) >> FP_NBITS) #define FP_JNORM(v) (((v) + (257 << (FP_NBITS-1))) >> FP_NBITS) #define M(n) ((m0 >> (n)) & 1) /* * This macro stolen from nv. */ /* Sick little macro which will limit x to [0..255] with logical ops */ #define LIMIT8(x, t) ((t = (x)), (t &= ~(t>>31)), (t | ~((t-256) >> 31))) #define LIMIT(x, t) (LIMIT8((x), t) & 0xff) /* row order */ const u_char ROWZAG[] = { 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; /* column order */ const u_char COLZAG[] = { 0, 8, 1, 2, 9, 16, 24, 17, 10, 3, 4, 11, 18, 25, 32, 40, 33, 26, 19, 12, 5, 6, 13, 20, 27, 34, 41, 48, 56, 49, 42, 35, 28, 21, 14, 7, 15, 22, 29, 36, 43, 50, 57, 58, 51, 44, 37, 30, 23, 31, 38, 45, 52, 59, 60, 53, 46, 39, 47, 54, 61, 62, 55, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; #define A1 FP_SCALE(0.7071068) #define A2 FP_SCALE(0.5411961) #define A3 A1 #define A4 FP_SCALE(1.3065630) #define A5 FP_SCALE(0.3826834) #define FA1 (0.707106781f) #define FA2 (0.541196100f) #define FA3 FA1 #define FA4 (1.306562965f) #define FA5 (0.382683433f) #ifdef B0 #undef B0 #endif /* * these magic numbers are scaling factors for each coef of the 1-d * AA&N DCT. The scale factor for coef 0 is 1 and coef 1<=n<=7 is * cos(n*PI/16)*sqrt(2). There is also a normalization of sqrt(8). * Formally you divide by the scale factor but we multiply by the * inverse because it's faster. So the numbers below are the inverse * of what was just described. */ #define B0 0.35355339059327376220 #define B1 0.25489778955207958447 #define B2 0.27059805007309849220 #define B3 0.30067244346752264027 #define B4 0.35355339059327376220 #define B5 0.44998811156820785231 #define B6 0.65328148243818826392 #define B7 1.28145772387075308943 /* * Output multipliers for AA&N DCT * (i.e., first stage multipliers for inverse DCT). */ static const double first_stage[8] = { B0, B1, B2, B3, B4, B5, B6, B7, }; /* * The first_stage array crossed with itself. This allows us * to embed the first stage multipliers of the row pass by * computing scaled versions of the columns. */ static const int cross_stage[64] = { FP_SCALE(B0 * B0), FP_SCALE(B0 * B1), FP_SCALE(B0 * B2), FP_SCALE(B0 * B3), FP_SCALE(B0 * B4), FP_SCALE(B0 * B5), FP_SCALE(B0 * B6), FP_SCALE(B0 * B7), FP_SCALE(B1 * B0), FP_SCALE(B1 * B1), FP_SCALE(B1 * B2), FP_SCALE(B1 * B3), FP_SCALE(B1 * B4), FP_SCALE(B1 * B5), FP_SCALE(B1 * B6), FP_SCALE(B1 * B7), FP_SCALE(B2 * B0), FP_SCALE(B2 * B1), FP_SCALE(B2 * B2), FP_SCALE(B2 * B3), FP_SCALE(B2 * B4), FP_SCALE(B2 * B5), FP_SCALE(B2 * B6), FP_SCALE(B2 * B7), FP_SCALE(B3 * B0), FP_SCALE(B3 * B1), FP_SCALE(B3 * B2), FP_SCALE(B3 * B3), FP_SCALE(B3 * B4), FP_SCALE(B3 * B5), FP_SCALE(B3 * B6), FP_SCALE(B3 * B7), FP_SCALE(B4 * B0), FP_SCALE(B4 * B1), FP_SCALE(B4 * B2), FP_SCALE(B4 * B3), FP_SCALE(B4 * B4), FP_SCALE(B4 * B5), FP_SCALE(B4 * B6), FP_SCALE(B4 * B7), FP_SCALE(B5 * B0), FP_SCALE(B5 * B1), FP_SCALE(B5 * B2), FP_SCALE(B5 * B3), FP_SCALE(B5 * B4), FP_SCALE(B5 * B5), FP_SCALE(B5 * B6), FP_SCALE(B5 * B7), FP_SCALE(B6 * B0), FP_SCALE(B6 * B1), FP_SCALE(B6 * B2), FP_SCALE(B6 * B3), FP_SCALE(B6 * B4), FP_SCALE(B6 * B5), FP_SCALE(B6 * B6), FP_SCALE(B6 * B7), FP_SCALE(B7 * B0), FP_SCALE(B7 * B1), FP_SCALE(B7 * B2), FP_SCALE(B7 * B3), FP_SCALE(B7 * B4), FP_SCALE(B7 * B5), FP_SCALE(B7 * B6), FP_SCALE(B7 * B7), }; static const float f_cross_stage[64] = { (float)(B0 * B0), (float)(B0 * B1), (float)(B0 * B2), (float)(B0 * B3), (float)(B0 * B4), (float)(B0 * B5), (float)(B0 * B6), (float)(B0 * B7), (float)(B1 * B0), (float)(B1 * B1), (float)(B1 * B2), (float)(B1 * B3), (float)(B1 * B4), (float)(B1 * B5), (float)(B1 * B6), (float)(B1 * B7), (float)(B2 * B0), (float)(B2 * B1), (float)(B2 * B2), (float)(B2 * B3), (float)(B2 * B4), (float)(B2 * B5), (float)(B2 * B6), (float)(B2 * B7), (float)(B3 * B0), (float)(B3 * B1), (float)(B3 * B2), (float)(B3 * B3), (float)(B3 * B4), (float)(B3 * B5), (float)(B3 * B6), (float)(B3 * B7), (float)(B4 * B0), (float)(B4 * B1), (float)(B4 * B2), (float)(B4 * B3), (float)(B4 * B4), (float)(B4 * B5), (float)(B4 * B6), (float)(B4 * B7), (float)(B5 * B0), (float)(B5 * B1), (float)(B5 * B2), (float)(B5 * B3), (float)(B5 * B4), (float)(B5 * B5), (float)(B5 * B6), (float)(B5 * B7), (float)(B6 * B0), (float)(B6 * B1), (float)(B6 * B2), (float)(B6 * B3), (float)(B6 * B4), (float)(B6 * B5), (float)(B6 * B6), (float)(B6 * B7), (float)(B7 * B0), (float)(B7 * B1), (float)(B7 * B2), (float)(B7 * B3), (float)(B7 * B4), (float)(B7 * B5), (float)(B7 * B6), (float)(B7 * B7), }; /* * Map a quantization table in natural, row-order, * into the qt input expected by rdct(). */ void rdct_fold_q(const int* in, int* out) { for (int i = 0; i < 64; ++i) { /* * Fold column and row passes of the dct. * By scaling each column DCT independently, * we pre-bias all the row DCT's so the * first multiplier is already embedded * in the temporary result. Thanks to * Martin Vetterli for explaining how * to do this. */ double v = double(in[i]); v *= first_stage[i & 7]; v *= first_stage[i >> 3]; out[i] = FP_SCALE(v); } } /* * Just like rdct_fold_q() but we divide by the quantizer. */ void fdct_fold_q(const int* in, float* out) { for (int i = 0; i < 64; ++i) { double v = first_stage[i >> 3]; v *= first_stage[i & 7]; double q = double(in[i]); out[i] = (float)(v / q); } } void dcsum(int dc, u_char* in, u_char* out, int stride) { for (int k = 8; --k >= 0; ) { int t; #ifdef INT_64 /*XXX assume little-endian */ INT_64 i = *(INT_64*)in; INT_64 o = (INT_64)LIMIT(dc + (int)(i >> 56 & 0xff), t) << 56; o |= (INT_64)LIMIT(dc + (int)(i >> 48 & 0xff), t) << 48; o |= (INT_64)LIMIT(dc + (int)(i >> 40 & 0xff), t) << 40; o |= (INT_64)LIMIT(dc + (int)(i >> 32 & 0xff), t) << 32; o |= (INT_64)LIMIT(dc + (int)(i >> 24 & 0xff), t) << 24; o |= (INT_64)LIMIT(dc + (int)(i >> 16 & 0xff), t) << 16; o |= (INT_64)LIMIT(dc + (int)(i >> 8 & 0xff), t) << 8; o |= (INT_64)LIMIT(dc + (int)(i & 0xff), t); *(INT_64*)out = o; #else u_int o = 0; u_int i = *(u_int*)in; SPLICE(o, LIMIT(dc + EXTRACT(i, 24), t), 24); SPLICE(o, LIMIT(dc + EXTRACT(i, 16), t), 16); SPLICE(o, LIMIT(dc + EXTRACT(i, 8), t), 8); SPLICE(o, LIMIT(dc + EXTRACT(i, 0), t), 0); *(u_int*)out = o; o = 0; i = *(u_int*)(in + 4); SPLICE(o, LIMIT(dc + EXTRACT(i, 24), t), 24); SPLICE(o, LIMIT(dc + EXTRACT(i, 16), t), 16); SPLICE(o, LIMIT(dc + EXTRACT(i, 8), t), 8); SPLICE(o, LIMIT(dc + EXTRACT(i, 0), t), 0); *(u_int*)(out + 4) = o; #endif in += stride; out += stride; } } void dcsum2(int dc, u_char* in, u_char* out, int stride) { for (int k = 8; --k >= 0; ) { int t; u_int o = 0; SPLICE(o, LIMIT(dc + in[0], t), 24); SPLICE(o, LIMIT(dc + in[1], t), 16); SPLICE(o, LIMIT(dc + in[2], t), 8); SPLICE(o, LIMIT(dc + in[3], t), 0); *(u_int*)out = o; o = 0; SPLICE(o, LIMIT(dc + in[4], t), 24); SPLICE(o, LIMIT(dc + in[5], t), 16); SPLICE(o, LIMIT(dc + in[6], t), 8); SPLICE(o, LIMIT(dc + in[7], t), 0); *(u_int*)(out + 4) = o; in += stride; out += stride; } } void dcfill(int DC, u_char* out, int stride) { int t; u_int dc = DC; dc = LIMIT(dc, t); dc |= dc << 8; dc |= dc << 16; #ifdef INT_64 INT_64 xdc = dc; xdc |= xdc << 32; *(INT_64 *)out = xdc; out += stride; *(INT_64 *)out = xdc; out += stride; *(INT_64 *)out = xdc; out += stride; *(INT_64 *)out = xdc; out += stride; *(INT_64 *)out = xdc; out += stride; *(INT_64 *)out = xdc; out += stride; *(INT_64 *)out = xdc; out += stride; *(INT_64 *)out = xdc; #else *(u_int*)out = dc; *(u_int*)(out + 4) = dc; out += stride; *(u_int*)out = dc; *(u_int*)(out + 4) = dc; out += stride; *(u_int*)out = dc; *(u_int*)(out + 4) = dc; out += stride; *(u_int*)out = dc; *(u_int*)(out + 4) = dc; out += stride; *(u_int*)out = dc; *(u_int*)(out + 4) = dc; out += stride; *(u_int*)out = dc; *(u_int*)(out + 4) = dc; out += stride; *(u_int*)out = dc; *(u_int*)(out + 4) = dc; out += stride; *(u_int*)out = dc; *(u_int*)(out + 4) = dc; #endif } /* * This routine mixes the DC & AC components of an 8x8 block of * pixels. This routine is called for every block decoded so it * needs to be efficient. It tries to do as many pixels in parallel * as will fit in a word. The one complication is that it has to * deal with overflow (sum > 255) and underflow (sum < 0). Underflow * & overflow are only possible if both terms have the same sign and * are indicated by the result having a different sign than the terms. * Note that underflow is more worrisome than overflow since it results * in bright white dots in a black field. * The DC term and sum are biased by 128 so a negative number has the * 2^7 bit = 0. The AC term is not biased so a negative number has * the 2^7 bit = 1. So underflow is indicated by (DC & AC & sum) != 0; */ #define MIX_LOGIC(sum, a, b, omask, uflo) \ { \ sum = a + b; \ uflo = (a ^ b) & (a ^ sum) & omask; \ if (uflo) { \ if ((b = uflo & a) != 0) { \ /* integer overflows */ \ b |= b >> 1; \ b |= b >> 2; \ b |= b >> 4; \ sum |= b; \ } \ if ((uflo &=~ b) != 0) { \ /* integer underflow(s) */ \ uflo |= uflo >> 1; \ uflo |= uflo >> 2; \ uflo |= uflo >> 4; \ sum &= ~uflo; \ } \ } \ } /* * Table of products of 8-bit scaled coefficients * and idct coefficients (there are only 33 unique * coefficients so we index via a compact ID). */ extern "C" u_char multab[]; /* * Array of coefficient ID's used to index multab. */ extern "C" u_int dct_basis[64][64 / sizeof(u_int)]; /*XXX*/ #define LIMIT_512(s) ((s) > 511 ? 511 : (s) < -512 ? -512 : (s)) void bv_rdct1(int dc, short* bp, int acx, u_char* out, int stride) { u_int omask = 0x80808080; u_int uflo; u_int* vp = dct_basis[acx]; int s = LIMIT_512(bp[acx]); s = (s >> 2) & 0xff; /* 66 unique coefficients require 7 bits */ char* mt = (char*)&multab[s << 7]; dc |= dc << 8; dc |= dc << 16; for (int k = 8; --k >= 0; ) { u_int v = *vp++; u_int m = mt[v >> 24] << SHIFT(24) | mt[v >> 16 & 0xff] << SHIFT(16) | mt[v >> 8 & 0xff] << SHIFT(8) | mt[v & 0xff] << SHIFT(0); MIX_LOGIC(v, dc, m, omask, uflo); *(u_int*)out = v; v = *vp++; m = mt[v >> 24] << SHIFT(24) | mt[v >> 16 & 0xff] << SHIFT(16) | mt[v >> 8 & 0xff] << SHIFT(8) | mt[v & 0xff] << SHIFT(0); MIX_LOGIC(v, dc, m, omask, uflo); *(u_int*)(out + 4) = v; out += stride; } } /* XXX this version has to be exact */ void bv_rdct2(int dc, short* bp, int ac0, u_char* in, u_char* out, int stride) { int s0 = LIMIT_512(bp[ac0]); s0 = (s0 >> 2) & 0xff; /* 66 unique coefficients require 7 bits */ const char* mt = (const char*)&multab[s0 << 7]; const u_int* vp0 = dct_basis[ac0]; dc |= dc << 8; dc |= dc << 16; u_int omask = 0x80808080; u_int uflo; for (int k = 8; --k >= 0; ) { u_int v, m, i; v = *vp0++; m = mt[v >> 24] << SHIFT(24) | mt[v >> 16 & 0xff] << SHIFT(16) | mt[v >> 8 & 0xff] << SHIFT(8) | mt[v & 0xff] << SHIFT(0); MIX_LOGIC(v, dc, m, omask, uflo); i = in[0] << SHIFT(24) | in[1] << SHIFT(16) | in[2] << SHIFT(8) | in[3] << SHIFT(0); MIX_LOGIC(m, i, v, omask, uflo); *(u_int*)out = m; v = *vp0++; m = mt[v >> 24] << SHIFT(24) | mt[v >> 16 & 0xff] << SHIFT(16) | mt[v >> 8 & 0xff] << SHIFT(8) | mt[v & 0xff] << SHIFT(0); MIX_LOGIC(v, dc, m, omask, uflo); i = in[4] << SHIFT(24) | in[5] << SHIFT(16) | in[6] << SHIFT(8) | in[7] << SHIFT(0); MIX_LOGIC(m, i, v, omask, uflo); *(u_int*)(out + 4) = m; out += stride; in += stride; } } /* XXX this version has to be exact */ void bv_rdct3(int dc, short* bp, int ac0, int ac1, u_char* in, u_char* out, int stride) { int s0 = LIMIT_512(bp[ac0]); s0 = (s0 >> 2) & 0xff; /* 66 unique coefficients require 7 bits */ char* mt0 = (char*)&multab[s0 << 7]; int s1 = LIMIT_512(bp[ac1]); s1 = (s1 >> 2) & 0xff; char* mt1 = (char*)&multab[s1 << 7]; u_int* vp0 = dct_basis[ac0]; u_int* vp1 = dct_basis[ac1]; for (int k = 8; --k >= 0; ) { int t; u_int v0 = *vp0++; u_int v1 = *vp1++; s0 = mt0[v0 >> 24] + mt1[v1 >> 24] + in[0] + dc; u_int m = LIMIT(s0, t) << SHIFT(24); s0 = mt0[v0 >> 16 & 0xff] + mt1[v1 >> 16 & 0xff] + in[1] + dc; m |= LIMIT(s0, t) << SHIFT(16); s0 = mt0[v0 >> 8 & 0xff] + mt1[v1 >> 8 & 0xff] + in[2] + dc; m |= LIMIT(s0, t) << SHIFT(8); s0 = mt0[v0 & 0xff] + mt1[v1 & 0xff] + in[3] + dc; m |= LIMIT(s0, t) << SHIFT(0); *(u_int*)out = m; v0 = *vp0++; v1 = *vp1++; s0 = mt0[v0 >> 24] + mt1[v1 >> 24] + in[4] + dc; m = 0; m |= LIMIT(s0, t) << SHIFT(24); s0 = mt0[v0 >> 16 & 0xff] + mt1[v1 >> 16 & 0xff] + in[5] + dc; m |= LIMIT(s0, t) << SHIFT(16); s0 = mt0[v0 >> 8 & 0xff] + mt1[v1 >> 8 & 0xff] + in[6] + dc; m |= LIMIT(s0, t) << SHIFT(8); s0 = mt0[v0 & 0xff] + mt1[v1 & 0xff] + in[7] + dc; m |= LIMIT(s0, t) << SHIFT(0); *(u_int*)(out + 4) = m; out += stride; in += stride; } } #ifdef INT_64 /*XXX assume little-endian */ #define PSPLICE(v, n) pix |= (INT_64)(v) << ((n)*8) #define DID4PIX #define PSTORE ((INT_64*)p)[0] = pix #define PIXDEF INT_64 pix = 0; int v, oflo = 0 #else #define PSPLICE(v, n) SPLICE(pix, (v), (3 - ((n)&3)) * 8) #define DID4PIX pix0 = pix; pix = 0 #define PSTORE ((u_int*)p)[0] = pix0; ((u_int*)p)[1] = pix #define PIXDEF u_int pix0, pix = 0; int v, oflo = 0 #endif #define DOJPIX(val, n) v = FP_JNORM(val); oflo |= v; PSPLICE(v, n) #define DOJPIXLIMIT(val, n) PSPLICE(LIMIT(FP_JNORM(val),t), n) #define DOPIX(val, n) v = FP_NORM(val); oflo |= v; PSPLICE(v, n) #define DOPIXLIMIT(val, n) PSPLICE(LIMIT(FP_NORM(val),t), n) #define DOPIXIN(val, n) v = FP_NORM(val) + in[n]; oflo |= v; PSPLICE(v, n) #define DOPIXINLIMIT(val, n) PSPLICE(LIMIT(FP_NORM(val) + in[n], t), n) /* * A 2D Inverse DCT based on a column-row decomposition using * Arai, Agui, and Nakajmia's 8pt 1D Inverse DCT, from Fig. 4-8 * Pennebaker & Mitchell (i.e., the pink JPEG book). This figure * is the forward transform; reverse the flowgraph for the inverse * (you need to draw a picture). The outputs are DFT coefficients * and need to be scaled according to Eq [4-3]. * * The input coefficients are, counter to tradition, in column-order. * The bit mask indicates which coefficients are non-zero. If the * corresponding bit is zero, then the coefficient is assumed zero * and the input coefficient is not referenced and need not be defined. * The 8-bit outputs are computed in row order and placed in the * output array pointed to by p, with each of the eight 8-byte lines * offset by "stride" bytes. * * qt is the inverse quantization table in column order. These * coefficients are the product of the inverse quantization factor, * specified by the jpeg quantization table, and the first multiplier * in the inverse DCT flow graph. This first multiplier is actually * biased by the row term so that the columns are pre-scaled to * eliminate the first row multiplication stage. * * The output is biased by 128, i.e., [-128,127] is mapped to [0,255], * which is relevant to jpeg. */ void #ifdef INT_64 rdct(register short *bp, INT_64 m0, u_char* p, int stride, const int* qt) #else rdct(register short *bp, u_int m0, u_int m1, u_char* p, int stride, const int* qt) #endif { /* * First pass is 1D transform over the columns. Note that * the coefficients are stored in column order, so even * though we're accessing the columns, we access them * in a row-like fashion. We use a column-row decomposition * instead of a row-column decomposition so we can splice * pixels in an efficient, row-wise order in the second * stage. * * The inverse quantization is folded together with the * first stage multiplier. This reduces the number of * multiplies (per 8-pt transform) from 11 to 5 (ignoring * the inverse quantization which must be done anyway). * * Because we compute appropriately scaled column DCTs, * the row DCTs require only 5 multiplies per row total. * So the total number of multiplies for the 8x8 DCT is 80 * (ignoring the checks for zero coefficients). */ int tmp[64]; int* tp = tmp; int i; for (i = 8; --i >= 0; ) { if ((m0 & 0xfe) == 0) { /* AC terms all zero */ int v = M(0) ? qt[0] * bp[0] : 0; tp[0] = v; tp[1] = v; tp[2] = v; tp[3] = v; tp[4] = v; tp[5] = v; tp[6] = v; tp[7] = v; } else { int t0, t1, t2, t3, t4, t5, t6, t7; if ((m0 & 0xaa) == 0) t4 = t5 = t6 = t7 = 0; else { t0 = M(5) ? qt[5] * bp[5] : 0; t2 = M(1) ? qt[1] * bp[1] : 0; t6 = M(7) ? qt[7] * bp[7] : 0; t7 = M(3) ? qt[3] * bp[3] : 0; t4 = t0 - t7; t1 = t2 + t6; t6 = t2 - t6; t7 += t0; t5 = t1 - t7; t7 += t1; t2 = FP_MUL(-A5, t4 + t6); t4 = FP_MUL(-A2, t4); t0 = t4 + t2; t1 = FP_MUL(A3, t5); t2 += FP_MUL(A4, t6); t4 = -t0; t5 = t1 - t0; t6 = t1 + t2; t7 += t2; } #ifdef notdef if ((m0 & 0x55) == 0) t0 = t1 = t2 = t3 = 0; else { #endif t0 = M(0) ? qt[0] * bp[0] : 0; t1 = M(4) ? qt[4] * bp[4] : 0; int x0 = t0 + t1; int x1 = t0 - t1; t0 = M(2) ? qt[2] * bp[2] : 0; t3 = M(6) ? qt[6] * bp[6] : 0; t2 = t0 - t3; t3 += t0; t2 = FP_MUL(A1, t2); t3 += t2; t0 = x0 + t3; t1 = x1 + t2; t2 = x1 - t2; t3 = x0 - t3; #ifdef notdef } #endif tp[0] = t0 + t7; tp[7] = t0 - t7; tp[1] = t1 + t6; tp[6] = t1 - t6; tp[2] = t2 + t5; tp[5] = t2 - t5; tp[3] = t3 + t4; tp[4] = t3 - t4; } tp += 8; bp += 8; qt += 8; m0 >>= 8; #ifndef INT_64 m0 |= m1 << 24; m1 >>= 8; #endif } tp -= 64; /* * Second pass is 1D transform over the rows. Note that * the coefficients are stored in column order, so even * though we're accessing the rows, we access them * in a column-like fashion. * * The pass above already computed the first multiplier * in the flow graph. */ for (i = 8; --i >= 0; ) { int t0, t1, t2, t3, t4, t5, t6, t7; t0 = tp[8*5]; t2 = tp[8*1]; t6 = tp[8*7]; t7 = tp[8*3]; #ifdef notdef if ((t0 | t2 | t6 | t7) == 0) { t4 = t5 = 0; } else #endif { t4 = t0 - t7; t1 = t2 + t6; t6 = t2 - t6; t7 += t0; t5 = t1 - t7; t7 += t1; t2 = FP_MUL(-A5, t4 + t6); t4 = FP_MUL(-A2, t4); t0 = t4 + t2; t1 = FP_MUL(A3, t5); t2 += FP_MUL(A4, t6); t4 = -t0; t5 = t1 - t0; t6 = t1 + t2; t7 += t2; } t0 = tp[8*0]; t1 = tp[8*4]; int x0 = t0 + t1; int x1 = t0 - t1; t0 = tp[8*2]; t3 = tp[8*6]; t2 = t0 - t3; t3 += t0; t2 = FP_MUL(A1, t2); t3 += t2; t0 = x0 + t3; t1 = x1 + t2; t2 = x1 - t2; t3 = x0 - t3; PIXDEF; DOJPIX(t0 + t7, 0); DOJPIX(t1 + t6, 1); DOJPIX(t2 + t5, 2); DOJPIX(t3 + t4, 3); DID4PIX; DOJPIX(t3 - t4, 4); DOJPIX(t2 - t5, 5); DOJPIX(t1 - t6, 6); DOJPIX(t0 - t7, 7); if (oflo & ~0xff) { int t; pix = 0; DOJPIXLIMIT(t0 + t7, 0); DOJPIXLIMIT(t1 + t6, 1); DOJPIXLIMIT(t2 + t5, 2); DOJPIXLIMIT(t3 + t4, 3); DID4PIX; DOJPIXLIMIT(t3 - t4, 4); DOJPIXLIMIT(t2 - t5, 5); DOJPIXLIMIT(t1 - t6, 6); DOJPIXLIMIT(t0 - t7, 7); } PSTORE; ++tp; p += stride; } } /* * Inverse 2-D transform, similar to routine above (see comment above), * but more appropriate for H.261 instead of JPEG. This routine does * not bias the output by 128, and has an additional argument which is * an input array which gets summed together with the inverse-transform. * For example, this allows motion-compensation to be folded in here, * saving an extra traversal of the block. The input pointer can be * null, if motion-compensation is not needed. * * This routine does not take a quantization table, since the H.261 * inverse quantizer is easily implemented via table lookup in the decoder. */ void #ifdef INT_64 rdct(register short *bp, INT_64 m0, u_char* p, int stride, const u_char* in) #else rdct(register short *bp, u_int m0, u_int m1, u_char* p, int stride, const u_char *in) #endif { int tmp[64]; int* tp = tmp; const int* qt = cross_stage; /* * First pass is 1D transform over the rows of the input array. */ int i; for (i = 8; --i >= 0; ) { if ((m0 & 0xfe) == 0) { /* * All ac terms are zero. */ int v = 0; if (M(0)) v = qt[0] * bp[0]; tp[0] = v; tp[1] = v; tp[2] = v; tp[3] = v; tp[4] = v; tp[5] = v; tp[6] = v; tp[7] = v; } else { int t4 = 0, t5 = 0, t6 = 0, t7 = 0; if (m0 & 0xaa) { /* odd part */ if (M(1)) t4 = qt[1] * bp[1]; if (M(3)) t5 = qt[3] * bp[3]; if (M(5)) t6 = qt[5] * bp[5]; if (M(7)) t7 = qt[7] * bp[7]; int x0 = t6 - t5; t6 += t5; int x1 = t4 - t7; t7 += t4; t5 = FP_MUL(t7 - t6, A3); t7 += t6; t4 = FP_MUL(x1 + x0, A5); t6 = FP_MUL(x1, A4) - t4; t4 += FP_MUL(x0, A2); t7 += t6; t6 += t5; t5 += t4; } int t0 = 0, t1 = 0, t2 = 0, t3 = 0; if (m0 & 0x55) { /* even part */ if (M(0)) t0 = qt[0] * bp[0]; if (M(2)) t1 = qt[2] * bp[2]; if (M(4)) t2 = qt[4] * bp[4]; if (M(6)) t3 = qt[6] * bp[6]; int x0 = FP_MUL(t1 - t3, A1); t3 += t1; t1 = t0 - t2; t0 += t2; t2 = t3 + x0; t3 = t0 - t2; t0 += t2; t2 = t1 - x0; t1 += x0; } tp[0] = t0 + t7; tp[1] = t1 + t6; tp[2] = t2 + t5; tp[3] = t3 + t4; tp[4] = t3 - t4; tp[5] = t2 - t5; tp[6] = t1 - t6; tp[7] = t0 - t7; } qt += 8; tp += 8; bp += 8; m0 >>= 8; #ifndef INT_64 m0 |= m1 << 24; m1 >>= 8; #endif } tp -= 64; /* * Second pass is 1D transform over the rows of the temp array. */ for (i = 8; --i >= 0; ) { int t4 = tp[8*1]; int t5 = tp[8*3]; int t6 = tp[8*5]; int t7 = tp[8*7]; if ((t4|t5|t6|t7) != 0) { /* odd part */ int x0 = t6 - t5; t6 += t5; int x1 = t4 - t7; t7 += t4; t5 = FP_MUL(t7 - t6, A3); t7 += t6; t4 = FP_MUL(x1 + x0, A5); t6 = FP_MUL(x1, A4) - t4; t4 += FP_MUL(x0, A2); t7 += t6; t6 += t5; t5 += t4; } int t0 = tp[8*0]; int t1 = tp[8*2]; int t2 = tp[8*4]; int t3 = tp[8*6]; if ((t0|t1|t2|t3) != 0) { /* even part */ int x0 = FP_MUL(t1 - t3, A1); t3 += t1; t1 = t0 - t2; t0 += t2; t2 = t3 + x0; t3 = t0 - t2; t0 += t2; t2 = t1 - x0; t1 += x0; } if (in != 0) { PIXDEF; DOPIXIN(t0 + t7, 0); DOPIXIN(t1 + t6, 1); DOPIXIN(t2 + t5, 2); DOPIXIN(t3 + t4, 3); DID4PIX; DOPIXIN(t3 - t4, 4); DOPIXIN(t2 - t5, 5); DOPIXIN(t1 - t6, 6); DOPIXIN(t0 - t7, 7); if (oflo & ~0xff) { int t; pix = 0; DOPIXINLIMIT(t0 + t7, 0); DOPIXINLIMIT(t1 + t6, 1); DOPIXINLIMIT(t2 + t5, 2); DOPIXINLIMIT(t3 + t4, 3); DID4PIX; DOPIXINLIMIT(t3 - t4, 4); DOPIXINLIMIT(t2 - t5, 5); DOPIXINLIMIT(t1 - t6, 6); DOPIXINLIMIT(t0 - t7, 7); } PSTORE; in += stride; } else { PIXDEF; DOPIX(t0 + t7, 0); DOPIX(t1 + t6, 1); DOPIX(t2 + t5, 2); DOPIX(t3 + t4, 3); DID4PIX; DOPIX(t3 - t4, 4); DOPIX(t2 - t5, 5); DOPIX(t1 - t6, 6); DOPIX(t0 - t7, 7); if (oflo & ~0xff) { int t; pix = 0; DOPIXLIMIT(t0 + t7, 0); DOPIXLIMIT(t1 + t6, 1); DOPIXLIMIT(t2 + t5, 2); DOPIXLIMIT(t3 + t4, 3); DID4PIX; DOPIXLIMIT(t3 - t4, 4); DOPIXLIMIT(t2 - t5, 5); DOPIXLIMIT(t1 - t6, 6); DOPIXLIMIT(t0 - t7, 7); } PSTORE; } tp += 1; p += stride; } } /* * This macro does the combined descale-and-quantize * multiply. It truncates rather than rounds to give * the behavior required for the h.261 deadband quantizer. */ #define FWD_DandQ(v, iq) short((v) * qt[iq]) void fdct(const u_char* in, int stride, short* out, const float* qt) { float tmp[64]; float* tp = tmp; int i; for (i = 8; --i >= 0; ) { float x0, x1, x2, x3, t0, t1, t2, t3, t4, t5, t6, t7; t0 = float(in[0] + in[7]); t7 = float(in[0] - in[7]); t1 = float(in[1] + in[6]); t6 = float(in[1] - in[6]); t2 = float(in[2] + in[5]); t5 = float(in[2] - in[5]); t3 = float(in[3] + in[4]); t4 = float(in[3] - in[4]); /* even part */ x0 = t0 + t3; x2 = t1 + t2; tp[8*0] = x0 + x2; tp[8*4] = x0 - x2; x1 = t0 - t3; x3 = t1 - t2; t0 = (x1 + x3) * FA1; tp[8*2] = x1 + t0; tp[8*6] = x1 - t0; /* odd part */ x0 = t4 + t5; x1 = t5 + t6; x2 = t6 + t7; t3 = x1 * FA1; t4 = t7 - t3; t0 = (x0 - x2) * FA5; t1 = x0 * FA2 + t0; tp[8*3] = t4 - t1; tp[8*5] = t4 + t1; t7 += t3; t2 = x2 * FA4 + t0; tp[8*1] = t7 + t2; tp[8*7] = t7 - t2; in += stride; tp += 1; } tp -= 8; for (i = 8; --i >= 0; ) { float x0, x1, x2, x3, t0, t1, t2, t3, t4, t5, t6, t7; t0 = tp[0] + tp[7]; t7 = tp[0] - tp[7]; t1 = tp[1] + tp[6]; t6 = tp[1] - tp[6]; t2 = tp[2] + tp[5]; t5 = tp[2] - tp[5]; t3 = tp[3] + tp[4]; t4 = tp[3] - tp[4]; /* even part */ x0 = t0 + t3; x2 = t1 + t2; out[0] = FWD_DandQ(x0 + x2, 0); out[4] = FWD_DandQ(x0 - x2, 4); x1 = t0 - t3; x3 = t1 - t2; t0 = (x1 + x3) * FA1; out[2] = FWD_DandQ(x1 + t0, 2); out[6] = FWD_DandQ(x1 - t0, 6); /* odd part */ x0 = t4 + t5; x1 = t5 + t6; x2 = t6 + t7; t3 = x1 * FA1; t4 = t7 - t3; t0 = (x0 - x2) * FA5; t1 = x0 * FA2 + t0; out[3] = FWD_DandQ(t4 - t1, 3); out[5] = FWD_DandQ(t4 + t1, 5); t7 += t3; t2 = x2 * FA4 + t0; out[1] = FWD_DandQ(t7 + t2, 1); out[7] = FWD_DandQ(t7 - t2, 7); out += 8; tp += 8; qt += 8; } } /* * decimate the *rows* of the two input 8x8 DCT matrices into * a single output matrix. we decimate rows rather than * columns even though we want column decimation because * the DCTs are stored in column order. */ void dct_decimate(const short* in0, const short* in1, short* o) { for (int k = 0; k < 8; ++k) { int x00 = in0[0]; int x01 = in0[1]; int x02 = in0[2]; int x03 = in0[3]; int x10 = in1[0]; int x11 = in1[1]; int x12 = in1[2]; int x13 = in1[3]; #define X_N 4 #define X_5(v) ((v) << (X_N - 1)) #define X_25(v) ((v) << (X_N - 2)) #define X_125(v) ((v) << (X_N - 3)) #define X_0625(v) ((v) << (X_N - 4)) #define X_375(v) (X_25(v) + X_125(v)) #define X_625(v) (X_5(v) + X_125(v)) #define X_75(v) (X_5(v) + X_25(v)) #define X_6875(v) (X_5(v) + X_125(v) + X_0625(v)) #define X_1875(v) (X_125(v) + X_0625(v)) #define X_NORM(v) ((v) >> X_N) /* * 0.50000000 0.09011998 0.00000000 0.10630376 * 0.50000000 0.09011998 0.00000000 0.10630376 * 0.45306372 0.28832037 0.03732892 0.08667963 * -0.45306372 0.11942621 0.10630376 -0.06764951 * 0.00000000 0.49039264 0.17677670 0.00000000 * 0.00000000 -0.49039264 -0.17677670 0.00000000 * -0.15909482 0.34009707 0.38408888 0.05735049 * 0.15909482 0.43576792 -0.09011998 -0.13845632 * 0.00000000 -0.03732892 0.46193977 0.25663998 * 0.00000000 -0.03732892 0.46193977 0.25663998 * 0.10630376 -0.18235049 0.25663998 0.42361940 * -0.10630376 -0.16332037 -0.45306372 -0.01587282 * 0.00000000 0.00000000 -0.07322330 0.41573481 * 0.00000000 0.00000000 0.07322330 -0.41573481 * -0.09011998 0.13399123 -0.18766514 0.24442621 * 0.09011998 0.13845632 0.15909482 0.47539609 */ o[0] = X_NORM(X_5(x00 + x10) + X_0625(x01 + x11) + X_125(x03 + x13)); o[1] = X_NORM(X_5(x00 - x10) + X_25(x01) + X_0625(x03) + X_125(x11 + x12)); o[2] = X_NORM(X_5(x01 - x11) + X_1875(x02 + x12)); o[3] = X_NORM(X_1875(x10 - x00) + X_375(x01 + x02) + X_5(x11) - X_125(x13)); o[4] = X_NORM(X_5(x02 + x12) + X_25(x03 + x13)); o[5] = X_NORM(X_125(x00 - x10) - X_1875(x01 + x11) + X_25(x02) + X_5(x03 - x12)); o[6] = X_NORM(X_625(x12 - x02) + X_375(x03 + x13)); o[7] = X_NORM(X_125(x01 - x00 + x11 + x10 + x12) + X_1875(x02) + X_25(x03) + X_5(x13)); o += 8; in0 += 8; in1 += 8; } } h323plus/plugins/video/H.261-vic/vic/p64-huff.h0000644000175000017500000003303411341106252017442 0ustar markmark/* * Copyright (c) 1993-1994 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the Network Research * Group at Lawrence Berkeley Laboratory. * 4. Neither the name of the University nor of the Laboratory may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ /************ Change log * * $Log: p64-huff.h,v $ * Revision 1.1 2010/02/24 02:19:22 shorne * First commit of h323plus mirror * * Revision 1.2 2006/07/31 09:09:22 csoutheren * Checkin of validated codec used during development * * Revision 1.1.2.1 2006/04/06 01:17:17 csoutheren * Initial version of H.261 video codec plugin for OPAL * * Revision 2.1 2003/03/15 23:42:59 robertj * Update to OpenH323 v1.11.7 * * Revision 1.5 2003/03/14 07:25:55 robertj * Removed $header keyword so is not different on alternate repositories * * Revision 1.4 2002/10/10 05:38:30 robertj * Removed non-ansi-C comments to maximise portability, thanks Martijn Roest * * Revision 1.3 2002/04/05 00:53:19 dereks * Modify video frame encoding so that frame is encoded on an incremental basis. * Thanks to Walter Whitlock - good work. * * Revision 1.2 2000/08/25 03:18:50 dereks * Add change log facility (Thanks Robert for the info on implementation) * * * ********/ #ifdef __cplusplus extern "C" { #endif #define SYM_ESCAPE 0 #define SYM_EOB -1 #define SYM_STUFFBITS 0 #define SYM_STARTCODE -1 #define SYM_ILLEGAL -2 #define SYM_EOMB -3 /* * Flags that indicate which types of encoding apply * to a given macroblock type code. * * MT_QUANT new quantization factor present * MT_CBP bit vector of which blocks present * MT_INTRA this block is intra-coded (e.g., not differenced) * MT_MFM motion vectors present (e.g., displacement of difference) * MT_FILTER old block should be filtered before summing with xmitted blk * MT_TCOEFF block present */ #define MT_TCOEFF 0x01 #define MT_CBP 0x02 #define MT_MVD 0x04 #define MT_MQUANT 0x08 #define MT_FILTER 0x10 #define MT_INTRA 0x20 #ifndef HUFFSTRINGS struct huffent { int val; /* Huffman code value */ int nb; /* number of bits */ }; extern const unsigned char skiptab[]; /* * Lookup tables that map an encoded prefix of the bit string, * into the next symbol (for decoding). */ extern const short htd_mtype[]; extern const short htd_mba[]; extern const short htd_cbp[]; extern const short htd_dvm[]; extern const short htd_tcoeff[]; extern const short htd_tcoeff_noeob[]; extern const int htd_mtype_width; extern const int htd_mba_width; extern const int htd_cbp_width; extern const int htd_dvm_width; extern const int htd_tcoeff_width; extern const int htd_tcoeff_noeob_width; /* * Look up tables that produce a huffman encoding string * from a symbol or group of symbols (for encoding). */ extern struct huffent hte_mba[]; extern struct huffent hte_tc[]; #else struct huffcode { int val; char* str; }; static struct huffcode hc_mtype[] = { { MT_CBP|MT_TCOEFF, "1" }, { MT_FILTER|MT_MVD|MT_CBP|MT_TCOEFF, "01" }, { MT_FILTER|MT_MVD, "001" }, { MT_INTRA|MT_TCOEFF, "0001" }, { MT_MQUANT|MT_CBP|MT_TCOEFF, "00001" }, { MT_MQUANT|MT_FILTER|MT_MVD|MT_CBP|MT_TCOEFF, "000001" }, { MT_INTRA|MT_MQUANT|MT_TCOEFF, "0000001" }, { MT_MVD|MT_CBP|MT_TCOEFF, "00000001" }, { MT_MVD, "000000001" }, { MT_MQUANT|MT_CBP|MT_MVD|MT_TCOEFF, "0000000001" }, { 0, 0 } }; static struct huffcode hc_mba[] = { { SYM_STUFFBITS, "00000001111" }, { SYM_STARTCODE, "0000000000000001" }, { 1, "1" }, { 2, "011" }, { 3, "010" }, { 4, "0011" }, { 5, "0010" }, { 6, "00011" }, { 7, "00010" }, { 8, "0000111" }, { 9, "0000110" }, { 10, "00001011" }, { 11, "00001010" }, { 12, "00001001" }, { 13, "00001000" }, { 14, "00000111" }, { 15, "00000110" }, { 16, "0000010111" }, { 17, "0000010110" }, { 18, "0000010101" }, { 19, "0000010100" }, { 20, "0000010011" }, { 21, "0000010010" }, { 22, "00000100011" }, { 23, "00000100010" }, { 24, "00000100001" }, { 25, "00000100000" }, { 26, "00000011111" }, { 27, "00000011110" }, { 28, "00000011101" }, { 29, "00000011100" }, { 30, "00000011011" }, { 31, "00000011010" }, { 32, "00000011001" }, { 33, "00000011000" }, { 0, 0 } }; static huffcode hc_cbp[] = { { 1, "01011" }, { 2, "01001" }, { 3, "001101" }, { 4, "1101" }, { 5, "0010111" }, { 6, "0010011" }, { 7, "00011111" }, { 8, "1100" }, { 9, "0010110" }, { 10, "0010010" }, { 11, "00011110" }, { 12, "10011" }, { 13, "00011011" }, { 14, "00010111" }, { 15, "00010011" }, { 16, "1011" }, { 17, "0010101" }, { 18, "0010001" }, { 19, "00011101" }, { 20, "10001" }, { 21, "00011001" }, { 22, "00010101" }, { 23, "00010001" }, { 24, "001111" }, { 25, "00001111" }, { 26, "00001101" }, { 27, "000000011" }, { 28, "01111" }, { 29, "00001011" }, { 30, "00000111" }, { 31, "000000111" }, { 32, "1010" }, { 33, "0010100" }, { 34, "0010000" }, { 35, "00011100" }, { 36, "001110" }, { 37, "00001110" }, { 38, "00001100" }, { 39, "000000010" }, { 40, "10000" }, { 41, "00011000" }, { 42, "00010100" }, { 43, "00010000" }, { 44, "01110" }, { 45, "00001010" }, { 46, "00000110" }, { 47, "000000110" }, { 48, "10010" }, { 49, "00011010" }, { 50, "00010110" }, { 51, "00010010" }, { 52, "01101" }, { 53, "00001001" }, { 54, "00000101" }, { 55, "000000101" }, { 56, "01100" }, { 57, "00001000" }, { 58, "00000100" }, { 59, "000000100" }, { 60, "111" }, { 61, "01010" }, { 62, "01000" }, { 63, "001100" }, { 0, 0 } }; static struct huffcode hc_dvm[] = { { -16, "00000011001" }, { -15, "00000011011" }, { -14, "00000011101" }, { -13, "00000011111" }, { -12, "00000100001" }, { -11, "00000100011" }, { -10, "0000010011" }, { -9, "0000010101" }, { -8, "0000010111" }, { -7, "00000111" }, { -6, "00001001" }, { -5, "00001011" }, { -4, "0000111" }, { -3, "00011" }, { -2, "0011" }, { -1, "011" }, { 0, "1" }, { 1, "010" }, { 2, "0010" }, { 3, "00010" }, { 4, "0000110" }, { 5, "00001010" }, { 6, "00001000" }, { 7, "00000110" }, { 8, "0000010110" }, { 9, "0000010100" }, { 10, "0000010010" }, { 11, "00000100010" }, { 12, "00000100000" }, { 13, "00000011110" }, { 14, "00000011100" }, { 15, "00000011010" }, { 0, 0 } }; /* * The signs of the values below are determined by the last * bit in the huffman code. Rather than special case them * in the decoding process, we make this table twice as big. * (Note that we have to be careful that SYM_ESCAPE = -1 * or SYM_ILLEGAL = -2 don't crop up here -- they don't.) */ static struct huffcode hc_tcoeff[] = { { SYM_EOB, "10" }, { SYM_ESCAPE, "000001" }, #define TC_RUN(x) (x) #define TC_LEVEL(x) (((x) & 0x1f) << 5) { TC_RUN(0)|TC_LEVEL(1), "110" }, { TC_RUN(0)|TC_LEVEL(-1), "111" }, { TC_RUN(0)|TC_LEVEL(2), "01000" }, { TC_RUN(0)|TC_LEVEL(-2), "01001" }, { TC_RUN(0)|TC_LEVEL(3), "001010" }, { TC_RUN(0)|TC_LEVEL(-3), "001011" }, { TC_RUN(0)|TC_LEVEL(4), "00001100" }, { TC_RUN(0)|TC_LEVEL(-4), "00001101" }, { TC_RUN(0)|TC_LEVEL(5), "001001100" }, { TC_RUN(0)|TC_LEVEL(-5), "001001101" }, { TC_RUN(0)|TC_LEVEL(6), "001000010" }, { TC_RUN(0)|TC_LEVEL(-6), "001000011" }, { TC_RUN(0)|TC_LEVEL(7), "00000010100" }, { TC_RUN(0)|TC_LEVEL(-7), "00000010101" }, { TC_RUN(0)|TC_LEVEL(8), "0000000111010" }, { TC_RUN(0)|TC_LEVEL(-8), "0000000111011" }, { TC_RUN(0)|TC_LEVEL(9), "0000000110000" }, { TC_RUN(0)|TC_LEVEL(-9), "0000000110001" }, { TC_RUN(0)|TC_LEVEL(10), "0000000100110" }, { TC_RUN(0)|TC_LEVEL(-10), "0000000100111" }, { TC_RUN(0)|TC_LEVEL(11), "0000000100000" }, { TC_RUN(0)|TC_LEVEL(-11), "0000000100001" }, { TC_RUN(0)|TC_LEVEL(12), "00000000110100" }, { TC_RUN(0)|TC_LEVEL(-12), "00000000110101" }, { TC_RUN(0)|TC_LEVEL(13), "00000000110010" }, { TC_RUN(0)|TC_LEVEL(-13), "00000000110011" }, { TC_RUN(0)|TC_LEVEL(14), "00000000110000" }, { TC_RUN(0)|TC_LEVEL(-14), "00000000110001" }, { TC_RUN(0)|TC_LEVEL(15), "00000000101110" }, { TC_RUN(0)|TC_LEVEL(-15), "00000000101111" }, { TC_RUN(1)|TC_LEVEL(1), "0110" }, { TC_RUN(1)|TC_LEVEL(-1), "0111" }, { TC_RUN(1)|TC_LEVEL(2), "0001100" }, { TC_RUN(1)|TC_LEVEL(-2), "0001101" }, { TC_RUN(1)|TC_LEVEL(3), "001001010" }, { TC_RUN(1)|TC_LEVEL(-3), "001001011" }, { TC_RUN(1)|TC_LEVEL(4), "00000011000" }, { TC_RUN(1)|TC_LEVEL(-4), "00000011001" }, { TC_RUN(1)|TC_LEVEL(5), "0000000110110" }, { TC_RUN(1)|TC_LEVEL(-5), "0000000110111" }, { TC_RUN(1)|TC_LEVEL(6), "00000000101100" }, { TC_RUN(1)|TC_LEVEL(-6), "00000000101101" }, { TC_RUN(1)|TC_LEVEL(7), "00000000101010" }, { TC_RUN(1)|TC_LEVEL(-7), "00000000101011" }, { TC_RUN(2)|TC_LEVEL(1), "01010" }, { TC_RUN(2)|TC_LEVEL(-1), "01011" }, { TC_RUN(2)|TC_LEVEL(2), "00001000" }, { TC_RUN(2)|TC_LEVEL(-2), "00001001" }, { TC_RUN(2)|TC_LEVEL(3), "00000010110" }, { TC_RUN(2)|TC_LEVEL(-3), "00000010111" }, { TC_RUN(2)|TC_LEVEL(4), "0000000101000" }, { TC_RUN(2)|TC_LEVEL(-4), "0000000101001" }, { TC_RUN(2)|TC_LEVEL(5), "00000000101000" }, { TC_RUN(2)|TC_LEVEL(-5), "00000000101001" }, { TC_RUN(3)|TC_LEVEL(1), "001110" }, { TC_RUN(3)|TC_LEVEL(-1), "001111" }, { TC_RUN(3)|TC_LEVEL(2), "001001000" }, { TC_RUN(3)|TC_LEVEL(-2), "001001001" }, { TC_RUN(3)|TC_LEVEL(3), "0000000111000" }, { TC_RUN(3)|TC_LEVEL(-3), "0000000111001" }, { TC_RUN(3)|TC_LEVEL(4), "00000000100110" }, { TC_RUN(3)|TC_LEVEL(-4), "00000000100111" }, { TC_RUN(4)|TC_LEVEL(1), "001100" }, { TC_RUN(4)|TC_LEVEL(-1), "001101" }, { TC_RUN(4)|TC_LEVEL(2), "00000011110" }, { TC_RUN(4)|TC_LEVEL(-2), "00000011111" }, { TC_RUN(4)|TC_LEVEL(3), "0000000100100" }, { TC_RUN(4)|TC_LEVEL(-3), "0000000100101" }, { TC_RUN(5)|TC_LEVEL(1), "0001110" }, { TC_RUN(5)|TC_LEVEL(-1), "0001111" }, { TC_RUN(5)|TC_LEVEL(2), "00000010010" }, { TC_RUN(5)|TC_LEVEL(-2), "00000010011" }, { TC_RUN(5)|TC_LEVEL(3), "00000000100100" }, { TC_RUN(5)|TC_LEVEL(-3), "00000000100101" }, { TC_RUN(6)|TC_LEVEL(1), "0001010" }, { TC_RUN(6)|TC_LEVEL(-1), "0001011" }, { TC_RUN(6)|TC_LEVEL(2), "0000000111100" }, { TC_RUN(6)|TC_LEVEL(-2), "0000000111101" }, { TC_RUN(7)|TC_LEVEL(1), "0001000" }, { TC_RUN(7)|TC_LEVEL(-1), "0001001" }, { TC_RUN(7)|TC_LEVEL(2), "0000000101010" }, { TC_RUN(7)|TC_LEVEL(-2), "0000000101011" }, { TC_RUN(8)|TC_LEVEL(1), "00001110" }, { TC_RUN(8)|TC_LEVEL(-1), "00001111" }, { TC_RUN(8)|TC_LEVEL(2), "0000000100010" }, { TC_RUN(8)|TC_LEVEL(-2), "0000000100011" }, { TC_RUN(9)|TC_LEVEL(1), "00001010" }, { TC_RUN(9)|TC_LEVEL(-1), "00001011" }, { TC_RUN(9)|TC_LEVEL(2), "00000000100010" }, { TC_RUN(9)|TC_LEVEL(-2), "00000000100011" }, { TC_RUN(10)|TC_LEVEL(1), "001001110" }, { TC_RUN(10)|TC_LEVEL(-1), "001001111" }, { TC_RUN(10)|TC_LEVEL(2), "00000000100000" }, { TC_RUN(10)|TC_LEVEL(-2), "00000000100001" }, { TC_RUN(11)|TC_LEVEL(1), "001000110" }, { TC_RUN(11)|TC_LEVEL(-1), "001000111" }, { TC_RUN(12)|TC_LEVEL(1), "001000100" }, { TC_RUN(12)|TC_LEVEL(-1), "001000101" }, { TC_RUN(13)|TC_LEVEL(1), "001000000" }, { TC_RUN(13)|TC_LEVEL(-1), "001000001" }, { TC_RUN(14)|TC_LEVEL(1), "00000011100" }, { TC_RUN(14)|TC_LEVEL(-1), "00000011101" }, { TC_RUN(15)|TC_LEVEL(1), "00000011010" }, { TC_RUN(15)|TC_LEVEL(-1), "00000011011" }, { TC_RUN(16)|TC_LEVEL(1), "00000010000" }, { TC_RUN(16)|TC_LEVEL(-1), "00000010001" }, { TC_RUN(17)|TC_LEVEL(1), "0000000111110" }, { TC_RUN(17)|TC_LEVEL(-1), "0000000111111" }, { TC_RUN(18)|TC_LEVEL(1), "0000000110100" }, { TC_RUN(18)|TC_LEVEL(-1), "0000000110101" }, { TC_RUN(19)|TC_LEVEL(1), "0000000110010" }, { TC_RUN(19)|TC_LEVEL(-1), "0000000110011" }, { TC_RUN(20)|TC_LEVEL(1), "0000000101110" }, { TC_RUN(20)|TC_LEVEL(-1), "0000000101111" }, { TC_RUN(21)|TC_LEVEL(1), "0000000101100" }, { TC_RUN(21)|TC_LEVEL(-1), "0000000101101" }, { TC_RUN(22)|TC_LEVEL(1), "00000000111110" }, { TC_RUN(22)|TC_LEVEL(-1), "00000000111111" }, { TC_RUN(23)|TC_LEVEL(1), "00000000111100" }, { TC_RUN(23)|TC_LEVEL(-1), "00000000111101" }, { TC_RUN(24)|TC_LEVEL(1), "00000000111010" }, { TC_RUN(24)|TC_LEVEL(-1), "00000000111011" }, { TC_RUN(25)|TC_LEVEL(1), "00000000111000" }, { TC_RUN(25)|TC_LEVEL(-1), "00000000111001" }, { TC_RUN(26)|TC_LEVEL(1), "00000000110110" }, { TC_RUN(26)|TC_LEVEL(-1), "00000000110111" }, { 0, 0 } }; #endif #ifdef __cplusplus } #endif h323plus/plugins/video/H.261-vic/vic/encoder-h261.cxx0000644000175000017500000006476711512676500020604 0ustar markmark/*encoder-h261.cc (c) 1999-2000 Derek J Smithies (dereks@ibm.net) * Indranet Technologies ltd (lara@indranet.co.nz) * * This file is derived from vic, http://www-nrg.ee.lbl.gov/vic/ * Their copyright notice is below. */ /* * Copyright (c) 1994-1995 The Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and the Network Research Group at * Lawrence Berkeley Laboratory. * 4. Neither the name of the University nor of the Laboratory may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /************ Change log * * $Log: encoder-h261.cxx,v $ * Revision 1.2 2011/01/10 21:42:24 willamowius * initialize sbit:, comment proposed removal of resetting sbit_ * * Revision 1.1 2010/02/24 02:19:22 shorne * First commit of h323plus mirror * * Revision 1.6 2006/12/19 03:11:55 dereksmithies * Add excellent fixes from Ben Weekes to suppress valgrind error messages. * This will help memory management - many thanks. * * Revision 1.5 2006/08/12 10:59:14 rjongbloed * Added Linux build for H.261 plug-in. * * Revision 1.4 2006/08/10 07:05:46 csoutheren * Fixed compile warnings on VC 2005 * * Revision 1.3 2006/08/01 13:02:40 rjongbloed * Merged changes from OpenH323 on removing need to winsock (ntohl function reference) * * Revision 1.2 2006/07/31 09:09:21 csoutheren * Checkin of validated codec used during development * * Revision 1.1.2.1 2006/04/06 01:17:17 csoutheren * Initial version of H.261 video codec plugin for OPAL * * Revision 2.2 2005/08/31 13:16:01 rjongbloed * Ported video fast update from OpenH323 * * Revision 2.1 2003/03/15 23:42:59 robertj * Update to OpenH323 v1.11.7 * * Revision 1.20 2004/04/25 01:52:47 rjongbloed * Fixed GCC 3.4 warnings * * Revision 1.19 2003/03/14 07:25:55 robertj * Removed $header keyword so is not different on alternate repositories * * Revision 1.18 2003/02/10 00:33:02 robertj * Removed code for redundent class and constructor. * * Revision 1.17 2002/05/17 01:47:33 dereks * backout the integer maths in the h261 codec. * * Revision 1.16 2002/04/05 00:53:19 dereks * Modify video frame encoding so that frame is encoded on an incremental basis. * Thanks to Walter Whitlock - good work. * * Revision 1.15 2001/10/14 21:48:45 dereks * Change vic's fdct() from floating-point to fix-point. Improves performance * for h261 video significantly on some machines. Thanks to Cosmos Jiang * * Revision 1.14 2001/05/10 05:25:44 robertj * Removed need for VIC code to use ptlib. * * Revision 1.13 2001/04/20 02:55:27 robertj * Fixed MSVC warning. * * Revision 1.12 2001/04/20 02:16:53 robertj * Removed GNU C++ warnings. * * Revision 1.11 2001/04/06 12:49:13 robertj * Fixed incorrect motion vector bit, thanks Liu Hao * * Revision 1.10 2001/04/04 02:05:48 robertj * Put back fix from revision 1.7, got lost in revision 1.8! Thanks Tom Dolsky. * * Revision 1.9 2000/12/19 22:22:34 dereks * Remove connection to grabber-OS.cxx files. grabber-OS.cxx files no longer used. * Video data is now read from a video channel, using the pwlib classes. * * Revision 1.8 2000/09/08 06:41:38 craigs * Added ability to set video device * Added ability to select test input frames * * Revision 1.7 2000/09/07 21:49:02 dereks * Implement fix from Vassili Leonov, to set PTYPE variable, so it now * follows the H261 spec as of 1993-03, page 7, paragraph 4.2.1.3: * * Revision 1.6 2000/08/25 03:18:49 dereks * Add change log facility (Thanks Robert for the info on implementation) * * * ********/ #include "encoder-h261.h" H261Encoder::H261Encoder(Transmitter *T) : Encoder(T), bs_(0), bc_(0), ngob_(12), sbit_(0), gDone(true) // must initialize to true { for (int q = 0; q < 32; ++q) { llm_[q] = 0; clm_[q] = 0; } } H261Encoder::~H261Encoder(void) { for (int q = 0; q < 32; ++q) { if(llm_[q]) delete [] (char *)llm_[q]; if(clm_[q]) delete [] (char *)clm_[q]; } } H261PixelEncoder:: H261PixelEncoder(Transmitter *T): H261Encoder(T) { quant_required_ = 0; } H261DCTEncoder::H261DCTEncoder(Transmitter *T):H261Encoder(T) { quant_required_ = 1; } /* * Set up the forward DCT quantization table for * INTRA mode operation. */ void H261Encoder::setquantizers(int lq, int mq, int hq) { int qt[64]; if (lq > 31) lq = 31; if (lq < 1) lq = 1; lq_ = lq; if (mq > 31) mq = 31; if (mq < 1) mq = 1; mq_ = mq; if (hq > 31) hq = 31; if (hq <= 0) hq = 1; hq_ = hq; /* * quant_required_ indicates quantization is not folded * into fdct [because fdct is not performed] */ if (quant_required_ == 0) { /* * Set the DC quantizer to 1, since we want to do this * coefficient differently (i.e., the DC is rounded while * the AC terms are truncated). */ qt[0] = 1; int i; for (i = 1; i < 64; ++i) qt[i] = lq_ << 1; fdct_fold_q(qt, lqt_); qt[0] = 1; for (i = 1; i < 64; ++i) qt[i] = mq_ << 1; fdct_fold_q(qt, mqt_); qt[0] = 1; for (i = 1; i < 64; ++i) qt[i] = hq_ << 1; fdct_fold_q(qt, hqt_); } } void H261Encoder::setq(int q) { setquantizers(q, q / 2, 1); } void H261PixelEncoder::SetSize(int w, int h) { if(width!=w){ Encoder::SetSize(w, h); if (w == CIF_WIDTH && h == CIF_HEIGHT) { /* CIF */ cif_ = 1; ngob_ = 12; bstride_ = 11; lstride_ = 16 * CIF_WIDTH - CIF_WIDTH / 2; cstride_ = 8 * 176 - 176 / 2; loffsize_ = 16; coffsize_ = 8; bloffsize_ = 1; } else if (w == QCIF_WIDTH && h == QCIF_HEIGHT) { /* QCIF */ cif_ = 0; ngob_ = 6; /* not really number of GOBs, just loop limit */ bstride_ = 0; lstride_ = 16 * QCIF_WIDTH - QCIF_WIDTH; cstride_ = 8 * 88 - 88; loffsize_ = 16; coffsize_ = 8; bloffsize_ = 1; } else { //cerr << "H261PixelEncoder: H.261 bad geometry: " << w << 'x' << h << endl; return; } u_int loff = 0; u_int coff = 0; u_int blkno = 0; for (u_int gob = 0; gob < ngob_; gob += 2) { loff_[gob] = loff; coff_[gob] = coff; blkno_[gob] = blkno; /* width of a GOB (these aren't ref'd in QCIF case) */ loff_[gob + 1] = loff + 11 * 16; coff_[gob + 1] = coff + 11 * 8; blkno_[gob + 1] = blkno + 11; /* advance to next GOB row */ loff += (16 * 16 * MBPERGOB) << cif_; coff += (8 * 8 * MBPERGOB) << cif_; blkno += MBPERGOB << cif_; } }//if(width!=w) } void H261DCTEncoder::SetSize(int w, int h) { Encoder::SetSize(w, h); if (w == CIF_WIDTH && h == CIF_HEIGHT) { /* CIF */ cif_ = 1; ngob_ = 12; bstride_ = 11; lstride_ = - (11 * (64*BMB)) + 2 * 11 * 64 * BMB; cstride_ = - (11 * (64*BMB)) + 2 * 11 * 64 * BMB; loffsize_ = 64 * BMB; coffsize_ = 64 * BMB; bloffsize_ = 1; } else if (w == QCIF_WIDTH && h == QCIF_HEIGHT) { /* QCIF */ cif_ = 0; ngob_ = 6; /* not really number of GOBs, just loop limit */ bstride_ = 0; lstride_ = 0; cstride_ = 0; loffsize_ = 64 * BMB; coffsize_ = 64 * BMB; bloffsize_ = 1; } else { //cerr << "H261DCTEncoder: H.261 bad geometry: " << w << 'x' << h << endl; return; } u_int gob; for (gob = 0; gob < ngob_; gob += 2) { if (gob != 0) { loff_[gob] = loff_[gob-2] + (MBPERGOB << cif_) * BMB * 64; coff_[gob] = coff_[gob-2] + (MBPERGOB << cif_) * BMB * 64; blkno_[gob] = blkno_[gob-2] + (MBPERGOB << cif_); } else { loff_[0] = 0; coff_[0] = loff_[0] + 4 * 64; // 4 Y's blkno_[0] = 0; } loff_[gob + 1] = loff_[gob] + 11 * BMB * 64; coff_[gob + 1] = coff_[gob] + 11 * BMB * 64; blkno_[gob + 1] = blkno_[gob] + 11; } } /* * Make a map to go from a 12 bit dct value to an 8 bit quantized * 'level' number. The 'map' includes both the quantizer (for the * dct encoder) and the perceptual filter 'threshhold' (for both * the pixel & dct encoders). The first 4k of the map is for the * unfiltered coeff (the first 20 in zigzag order; roughly the * upper left quadrant) and the next 4k of the map are for the * filtered coef. */ char* H261Encoder::make_level_map(int q, u_int fthresh) { /* make the luminance map */ char* lm = new char[0x2000]; char* flm = lm + 0x1000; int i; lm[0] = 0; flm[0] = 0; q = quant_required_? q << 1 : 0; for (i = 1; i < 0x800; ++i) { u_int l = i; if (q) l /= q; lm[i] = l; lm[-i & 0xfff] = -(int)l; if (l <= fthresh) l = 0; flm[i] = l; flm[-i & 0xfff] = -(int)l; } return (lm); } /* * encode_blk: * encode a block of DCT coef's */ void H261Encoder::encode_blk(const short* blk, const char* lm) { int lm_incs=0; BB_INT bb = bb_; u_int nbb = nbb_; u_char* bc = bc_; /* * Quantize DC. Round instead of truncate. */ int dc = (blk[0] + 4) >> 3; if (dc <= 0) /* shouldn't happen with CCIR 601 black (level 16) */ dc = 1; else if (dc > 254) dc = 254; else if (dc == 128) /* per Table 6/H.261 */ dc = 255; /* Code DC */ PUT_BITS(dc, 8, nbb, bb, bc); int run = 0; const u_char* colzag = &COLZAG[0]; for (int zag; (zag = *++colzag) != 0; ) { if (colzag == &COLZAG[20]) { lm += 0x1000; lm_incs++; if(lm_incs==2) { //cerr<<"About to fart"<nb)) /* we can use a VLC. */ val = he->val; else { /* Can't use a VLC. Escape it. */ val = (1 << 14) | (run << 8) | (level & 0xff); nb = 20; } PUT_BITS(val, nb, nbb, bb, bc); run = 0; } else ++run; } /* EOB */ PUT_BITS(2, 2, nbb, bb, bc); bb_ = bb; nbb_ = nbb; bc_ = bc; } /* * H261PixelEncoder::encode_mb * encode a macroblock given a set of input YUV pixels */ void H261PixelEncoder::encode_mb(u_int mba, // address of macroblock to encode const u_char* frm, // address of YUV pixels u_int loff, // Luminance offset from frm u_int coff, // Chrominance offset from frm int how) { register int q; float* qt; if (how == CR_MOTION) { q = lq_; qt = lqt_; } else if (how == CR_BG) { q = hq_; qt = hqt_; } else { /* must be at age threshold */ q = mq_; qt = mqt_; } /* * encode all 6 blocks of the macro block to find the largest * coef (so we can pick a new quantizer if gquant doesn't have * enough range). */ /*XXX this can be u_char instead of short but need smarts in fdct */ short blk[64 * 6]; register int stride = width; /* luminance */ const u_char* p = &frm[loff]; fdct(p, stride, blk + 0, qt); fdct(p + 8, stride, blk + 64, qt); fdct(p + 8 * stride, stride, blk + 128, qt); fdct(p + (8 * stride + 8), stride, blk + 192, qt); /* chominance */ int fs = framesize; p = &frm[fs + coff]; stride >>= 1; fdct(p, stride, blk + 256, qt); fdct(p + (fs >> 2), stride, blk + 320, qt); /* * if the default quantizer is too small to handle the coef. * dynamic range, spin through the blocks and see if any * coef. would significantly overflow. */ if (q < 8) { register int cmin = 0, cmax = 0; register short* bp = blk; for (register int i = 6; --i >= 0; ) { ++bp; // ignore dc coef for (register int j = 63; --j >= 0; ) { register int v = *bp++; if (v < cmin) cmin = v; else if (v > cmax) cmax = v; } } if (cmax < -cmin) cmax = -cmin; if (cmax >= 128) { /* need to re-quantize */ register int s; for (s = 1; cmax >= (128 << s); ++s) { } q <<= s; register short* bp = blk; for (register int i = 6; --i >= 0; ) { ++bp; // ignore dc coef for (register int j = 63; --j >= 0; ) { register int v = *bp; *bp++ = v >> s; } } } } u_int m = mba - mba_; // set macroblock address difference mba_ = mba; // set last absolute macroblock address transmitted huffent* he = &hte_mba[m - 1]; // Huffman coded macroblock address /* MBA */ PUT_BITS(he->val, he->nb, nbb_, bb_, bc_); if (q != mquant_) { /* MTYPE = INTRA + TC + MQUANT */ PUT_BITS(1, 7, nbb_, bb_, bc_); PUT_BITS(q, 5, nbb_, bb_, bc_); mquant_ = q; } else { /* MTYPE = INTRA + TC (no quantizer) */ PUT_BITS(1, 4, nbb_, bb_, bc_); } /* luminance */ const char* lm = llm_[q]; if (lm == 0) { lm = make_level_map(q, 1); llm_[q] = lm; clm_[q] = make_level_map(q, 2); } encode_blk(blk + 0, lm); encode_blk(blk + 64, lm); encode_blk(blk + 128, lm); encode_blk(blk + 192, lm); /* chominance */ lm = clm_[q]; encode_blk(blk + 256, lm); encode_blk(blk + 320, lm); } /* * H261DCTEncoder::encode_mb * encode a macroblock given a set of input DCT coefs * each coef is stored as a short */ void H261DCTEncoder::encode_mb(u_int mba, const u_char* frm, u_int loff, u_int coff, int how) { short *lblk = (short *)frm + loff; short *ublk = (short *)frm + coff; short *vblk = (short *)frm + coff + 64; register u_int q; if (how == CR_MOTION) q = lq_; else if (how == CR_BG) q = hq_; else /* must be at age threshold */ q = mq_; /* * if the default quantizer is too small to handle the coef. * dynamic range, spin through the blocks and see if any * coef. would significantly overflow. */ if (q < 8) { register int cmin = 0, cmax = 0; register short* bp = lblk; register int i, j; // Y U and V blocks for (i = 6; --i >= 0; ) { ++bp; // ignore dc coef for (j = 63; --j >= 0; ) { register int v = *bp++; if (v < cmin) cmin = v; else if (v > cmax) cmax = v; } } if (cmax < -cmin) cmax = -cmin; cmax /= (q << 1); if (cmax >= 128) { /* need to re-quantize */ register int s; for (s = 1; cmax >= (128 << s); ++s) { } q <<= s; } } u_int m = mba - mba_; mba_ = mba; huffent* he = &hte_mba[m - 1]; /* MBA */ PUT_BITS(he->val, he->nb, nbb_, bb_, bc_); if (q != mquant_) { /* MTYPE = INTRA + TC + MQUANT */ PUT_BITS(1, 7, nbb_, bb_, bc_); PUT_BITS(q, 5, nbb_, bb_, bc_); mquant_ = q; } else { /* MTYPE = INTRA + TC (no quantizer) */ PUT_BITS(1, 4, nbb_, bb_, bc_); } /* luminance */ const char* lm = llm_[q]; if (lm == 0) { /* * the filter thresh is 0 since we assume the jpeg percept. * quantizer already did the filtering. */ lm = make_level_map(q, 0); llm_[q] = lm; clm_[q] = make_level_map(q, 0); } encode_blk(lblk + 0, lm); encode_blk(lblk + 64, lm); encode_blk(lblk + 128, lm); encode_blk(lblk + 192, lm); /* chominance */ lm = clm_[q]; encode_blk(ublk, lm); encode_blk(vblk, lm); } int H261Encoder::flush(Transmitter::pktbuf* pb, int nbit, Transmitter::pktbuf* npb) { /* flush bit buffer */ STORE_BITS(bb_, bc_); int cc = (nbit + 7) >> 3; int ebit = (cc << 3) - nbit; /*XXX*/ if (cc == 0 && npb != 0) return 0; pb->lenHdr = HDRSIZE; pb->lenBuf = cc; u_int* rh = (u_int*)pb->hdr; *rh = (*rh) | ebit << 26 | sbit_ << 29; if (npb != 0) { u_char* nbs = (u_char*)npb->buf->data; u_int bc = (bc_ - bs_) << 3; int tbit = bc + nbb_; int extra = ((tbit + 7) >> 3) - (nbit >> 3); if (extra > 0) memcpy(nbs, bs_ + (nbit >> 3), extra); bs_ = nbs; sbit_ = nbit & 7; tbit -= nbit &~ 7; bc = tbit &~ (NBIT - 1); nbb_ = tbit - bc; bc_ = bs_ + (bc >> 3); /* * Prime the bit buffer. Be careful to set bits that * are not yet in use to 0, since output bits are later * or'd into the buffer. */ if (nbb_ > 0) { u_int n = NBIT - nbb_; bb_ = (LOAD_BITS(bc_) >> n) << n; } else bb_ = 0; } tx_->StoreOnePacket(pb); return (cc + HDRSIZE); } int H261DCTEncoder::consume(const VideoFrame *vf) { if (!SameSize(vf)) SetSize(vf->width, vf->height); return(encode(vf, vf->crvec)); } int H261PixelEncoder::consume(const VideoFrame *vf) { if (!SameSize(vf)) SetSize(vf->width, vf->height); return(encode(vf, vf->crvec)); } //////NOTE: HDRSIZE is the size of the H261 hdr in the rtp packet.== 4 int H261Encoder::encode(const VideoFrame* vf, const BYTE *crvec) { Transmitter::pktbuf* pb = tx_->alloc(); bs_ = (u_char*)pb->buf->data; // pointer to start of buffer bc_ = bs_; // pointer to destination in buffer u_int ec = (tx_->mtu() - HDRSIZE) << 3; // bits available in H261 packet bb_ = 0; // intermediate working space nbb_ = 0; // cumulative put bit count sbit_ = 0; /* RTP/H.261 header */ u_int* rh = (u_int*)pb->hdr; // H.261 header (32 bits) *rh = (1 << 24) | (lq_ << 10); // set motion vector flag V to 1 & set QUANT /* PSC Picture Start Code */ PUT_BITS(0x0001, 16, nbb_, bb_, bc_); /* GOB 0 -> picture header Finishes PSC */ PUT_BITS(0, 4, nbb_, bb_, bc_); /* TR Temporal Reference (XXX should do this right) */ PUT_BITS(0, 5, nbb_, bb_, bc_); /* PTYPE = CIF */ int pt = cif_ ? 7 : 3; PUT_BITS(pt, 6, nbb_, bb_, bc_); /* PEI Picture Extra Information = none */ PUT_BITS(0, 1, nbb_, bb_, bc_); int step = cif_ ? 1 : 2; int cc = 0; BYTE* frm = vf->frameptr; for (u_int gobIndex = 0; gobIndex < ngob_; gobIndex += step) { // fill in GOB layer u_int loff = loff_[gobIndex]; u_int coff = coff_[gobIndex]; u_int blkno = blkno_[gobIndex]; u_int nbit = ((bc_ - bs_) << 3) + nbb_; // # of bits already in buffer /* GSC/GN */ PUT_BITS(0x10 | (gobIndex + 1), 20, nbb_, bb_, bc_); /* GQUANT/GEI */ mquant_ = lq_; PUT_BITS(mquant_ << 1, 6, nbb_, bb_, bc_); mba_ = 0; int line = 11; for (u_int mba = 1; mba <= 33; ++mba) { /* * If the conditional replenishment algorithm * has decided to send any of the blocks of * this macroblock, code it. */ u_int s = crvec[blkno]; if ((s & CR_SEND) != 0) { u_int mbpred = mba_; encode_mb(mba, frm, loff, coff, CR_STATE(s)); // encode MB u_int cbits = ((bc_ - bs_) << 3) + nbb_; if (cbits > ec) { // make new packet Transmitter::pktbuf* npb; npb = tx_->alloc(); cc += flush(pb, nbit, npb); cbits -= nbit; pb = npb; /* RTP/H.261 header */ u_int m = mbpred; u_int g; if (m != 0) { g = gobIndex + 1; m -= 1; } else g = 0; rh = (u_int*)pb->hdr; *rh = 1 << 24 | //set motion vector flag. m << 15 | //macroblock address predictor. g << 20 | //Group of blocks number. mquant_ << 10;//quantizer value. } nbit = cbits; } loff += loffsize_; coff += coffsize_; blkno += bloffsize_; if (--line <= 0) { line = 11; blkno += bstride_; loff += lstride_; coff += cstride_; } } } cc += flush(pb, ((bc_ - bs_) << 3) + nbb_, 0); return (cc); } int H261PixelEncoder::PreIncEncodeSetup(const VideoFrame *vf) { if (!SameSize(vf)) SetSize(vf->width, vf->height); gVf = vf; gPicture = true; //if true, send picture layer header gNbytes = 0; //number of bytes in previous packet gDbase = 0; //offset from gData where valid data starts nbb_ = 0; //# of valid bits in bb_ bb_ = 0; //intermediate working space bc_ = gData; //where to put encoded bits gStep = cif_ ? 1 : 2; //Macro Block step size gGobMax = cif_ ? 12 : 5; //how many GOB per frame sbit_ = 0; // TODO: comment out for Polycom compatibility ??? gSendGOBhdr = true; //must send GOB hdr before sending MB gGOBhdrNxt = true; //will start out with GOB header //because gGOBhdrNxt == true, no need to initialize the following 2 header variables: //gHdrGOBN; // next GOB number for last encoded MB //gHdrMBAP; // address of last macroblock encoded in previous packet 1..32 //mba_= 0; // should not be necessary to initialize this gHdrQUANT = lq_; // QUANT in effect for next MB to be encoded gNxtMBA = 1; // address of next macroblock to be considered for encoding 1..33 gNxtGOB = 1; // start encoding at GOB 1 gDone = false; return 1; } void H261PixelEncoder::IncEncodeAndGetPacket( u_char * buffer, // returns buffer of encoded data unsigned & length ) // returns actual length of encoded data buffer { u_int previousBitCount = 0, currentBitCount; h261hdr_t h261hdr; if (gDone) { length = 0; return; } // TESTING if (!gGOBhdrNxt && ((33 <= gHdrMBAP) || (0 >= gHdrMBAP))) { //cerr << __FILE__<< "(" << __LINE__ << ") " << // "illegal gHdrMBAP value when gGOBhdrNxt is false = " << gHdrMBAP << endl; gHdrMBAP = 1; } // unsigned t1 = sbit_ << 29; // unsigned t2 = (gGOBhdrNxt?0:gHdrGOBN) << 20; // unsigned t3 = (gGOBhdrNxt||(0==gHdrMBAP)?0:gHdrMBAP-1) << 15; // unsigned t4 = (gGOBhdrNxt?0:gHdrQUANT) << 10; // set the H.261 header (32 bits) bits that we know now h261hdr = 1 << 24 | // V = 1, I = 0, HMVD = 0, VMVD = 0 sbit_ << 29 | // SBIT (gGOBhdrNxt?0:gHdrGOBN) << 20 | // GOBN (gGOBhdrNxt?0:gHdrMBAP-1) << 15 | // MBAP (gGOBhdrNxt?0:gHdrQUANT) << 10; // QUANT // gHdrQUANT << 10; // QUANT set the old & incorrect way // if any, move unsent bits encoded during previous packet encode unsigned usedBB_INTs; u_char* msrc; unsigned m1; if (sbit_) gNbytes--; // last byte of previous packet has bits needed for this packet usedBB_INTs = (gNbytes + gDbase)/sizeof(BB_INT); msrc = gData + usedBB_INTs*sizeof(BB_INT); gDbase = (gDbase + gNbytes) % sizeof(BB_INT); m1 = bc_ - msrc; if (m1) memcpy(gData, msrc, m1); bc_ = gData + m1; // set starting bc_ address // encode H.261 stream if (gPicture) { // only ever sent at start of 1st packet /* PSC Picture Start Code */ PUT_BITS(0x0001, 16, nbb_, bb_, bc_); /* GOB 0 -> picture header Finishes PSC */ PUT_BITS(0, 4, nbb_, bb_, bc_); /* TR Temporal Reference (XXX should do this right) */ PUT_BITS(0, 5, nbb_, bb_, bc_); /* PTYPE = CIF */ int pt = cif_ ? 7 : 3; PUT_BITS(pt, 6, nbb_, bb_, bc_); /* PEI Picture Extra Information = none */ PUT_BITS(0, 1, nbb_, bb_, bc_); gloff = loff_[0]; gcoff = coff_[0]; gblkno = blkno_[0]; gline = 11; gPicture = false; } unsigned bitLimit = 8*(RTP_MTU - sizeof(h261hdr)); u_char* bbase = gData + gDbase; if (!(gNxtGOB > gGobMax)) { while ((currentBitCount = nbb_ + 8*(bc_ - bbase)) <= bitLimit) { // everything encoded up till now fits within the RTP_MTU buffer // test to see if the packet can be broken here if (gSendGOBhdr || (0 != mba_)){ // if packet can be broken, // record conditions that will be needed to construct the h261 header // for the next packet if the packet breaks here gHdrGOBN = gNxtGOB; // GOB number in effect for next MB to be encoded gHdrMBAP = mba_; // MBA of the last encoded MB & now in the buffer gHdrQUANT = mquant_; // QUANT in effect for next MB to be encoded gGOBhdrNxt = gSendGOBhdr; // is GOB header next? previousBitCount = currentBitCount; // encoded bits now in the buffer } if (gSendGOBhdr) { // need to send GOB header before can send MB ? /* GSC/GN */ PUT_BITS(0x10 | gNxtGOB, 20, nbb_, bb_, bc_); /* GQUANT/GEI */ mquant_ = lq_; PUT_BITS(mquant_ << 1, 6, nbb_, bb_, bc_); mba_= 0; gSendGOBhdr = false; } /** If the conditional replenishment algorithm * has decided to send any of the blocks of * this macroblock, encode it. */ u_int s = gVf->crvec[gblkno]; if ((s & CR_SEND) != 0) { //H261PixelEncoder::encode_mb(u_int mba, // address of macroblock to encode // const u_char* frm, // address of YUV pixels // u_int loff, // Luminance offset from frm // u_int coff, // Chrominance offset from frm // int how) encode_mb(gNxtMBA, gVf->frameptr, gloff, gcoff, CR_STATE(s)); // encode MB mba_= gNxtMBA; } gNxtMBA++; if (gNxtMBA > 33) { gNxtGOB += gStep; if (gNxtGOB > gGobMax) { gDone = true; break; // out of while(), done encoding frame } gNxtMBA = 1; gSendGOBhdr = true; // must send GOB hdr before sending MB gloff = loff_[gNxtGOB-1]; gcoff = coff_[gNxtGOB-1]; gblkno = blkno_[gNxtGOB-1]; gline = 11; } else { gloff += loffsize_; gcoff += coffsize_; gblkno += bloffsize_; if (--gline <= 0) { gline = 11; gblkno += bstride_; gloff += lstride_; gcoff += cstride_; } } } } else gDone = true; // have full packet now, finish & set up for next packet // break packet at end of previous MB unless this is end of frame // flush bits from bb_ STORE_BITS(bb_, bc_); // necessary when gDbase != 0 if (gDone) { unsigned totalBits = nbb_ + 8*(bc_ - bbase); if (totalBits <= bitLimit) { // would packet be too big? previousBitCount = totalBits; } else { // need another packet to finish frame gDone = false; } } gNbytes = previousBitCount / 8; sbit_ = previousBitCount % 8; // SBIT for next packet = good bits for this packet if (sbit_) gNbytes++; // include last bits for this frame // set the H.261 header (32 bits) bits that we know now h261hdr |= ((8 - sbit_) & 7) << 26; //EBIT = 8 - SBIT for next packet SWAP32(buffer, &h261hdr); memcpy(buffer+sizeof(h261hdr), gData+gDbase, gNbytes); length = gNbytes+sizeof(h261hdr); if (RTP_MTU < length) { // test for too large packet (I haven't seen one yet) //cerr << __FILE__<< "(" << __LINE__ << ") " << // "packet size of " << length << " > RTP_MTU(" << RTP_MTU << ")" << endl; } } h323plus/plugins/video/H.261-vic/vic/crdef.h0000644000175000017500000001016011341106252017161 0ustar markmark/* crdef.h (c) 1999-2000 Derek J Smithies (dereks@ibm.net) * Indranet Technologies ltd (lara@indranet.co.nz) * * This file is derived from vic, http://www-nrg.ee.lbl.gov/vic/ * Their copyright notice is below. */ /* * Copyright (c) 1993-1994 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and the Network Research Group at * Lawrence Berkeley Laboratory. * 4. Neither the name of the University nor of the Laboratory may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ /* * The bit definitions for the values stored in the conditional * replenishment vector. We use a variant of the algorithm used * in nv (which is very similar to the algorithms in many hardware * codecs) where we only send a block if it changes beyond some threshold * due to scene motion. In this case, we send it at a "low-quality" * to trade of quality for frame rate in areas of high motion. * We then age the block and after it hasn't changed for a few frames * we send a higher quality version. Finally, the process that scans * the background filling in blocks sends the highest quality version. * * A finite state machine defines the algorithm. When motion is detected, * the block is reset to state MOTION. On no motion, it is aged to AGE1, * AGE2, ... etc., until it reaches state AGEn (the age threshold), and * then it transitions to IDLE. If the background process finds a block * in the IDLE state, it can promote it to the BG state. On the next * frame, it reverts to the IDLE state. * * Blocks are transmitted only in the MOTION, AGEn, and BG state, * at low, medium, and high quality, respectively. The high bit * is reserved to indicate the block is in one of these states * and should be sent. */ /************ Change log * * $Log: crdef.h,v $ * Revision 1.1 2010/02/24 02:19:22 shorne * First commit of h323plus mirror * * Revision 1.2 2006/07/31 09:09:21 csoutheren * Checkin of validated codec used during development * * Revision 1.1.2.1 2006/04/06 01:17:17 csoutheren * Initial version of H.261 video codec plugin for OPAL * * Revision 2.1 2003/03/15 23:42:59 robertj * Update to OpenH323 v1.11.7 * * Revision 1.3 2003/03/14 07:25:55 robertj * Removed $header keyword so is not different on alternate repositories * * Revision 1.2 2000/08/25 03:18:49 dereks * Add change log facility (Thanks Robert for the info on implementation) * * * ********/ #define CR_MOTION 0 #define CR_AGETHRESH 31 #define CR_IDLE 0x40 #define CR_BG 0x41 #define CR_SEND 0x80 #define CR_STATE(s) ((s) & 0x7f) h323plus/plugins/video/H.261-vic/vic/encoder-h261.h0000644000175000017500000002304611341106252020202 0ustar markmark/*encoder-h261.h (c) 1999-2000 Derek J Smithies (dereks@ibm.net) * Indranet Technologies ltd (lara@indranet.co.nz) * * This file is derived from vic, http://www-nrg.ee.lbl.gov/vic/ * Their copyright notice is below. */ /*- * Copyright (c) 1993-1995 The Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and the Network Research Group at * Lawrence Berkeley Laboratory. * 4. Neither the name of the University nor of the Laboratory may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /************ Change log * * $Log: encoder-h261.h,v $ * Revision 1.1 2010/02/24 02:19:22 shorne * First commit of h323plus mirror * * Revision 1.2 2006/07/31 09:09:21 csoutheren * Checkin of validated codec used during development * * Revision 1.1.2.1 2006/04/06 01:17:17 csoutheren * Initial version of H.261 video codec plugin for OPAL * * Revision 2.1 2003/03/15 23:42:59 robertj * Update to OpenH323 v1.11.7 * * Revision 1.12 2002/05/17 01:47:33 dereks * backout the integer maths in the h261 codec. * * Revision 1.11 2002/04/26 04:57:41 dereks * Add Walter Whitlocks fixes, based on Victor Ivashim's suggestions to * improve the quality with Netmeeting. Thanks guys!!!! * * Revision 1.10 2002/04/05 00:53:19 dereks * Modify video frame encoding so that frame is encoded on an incremental basis. * Thanks to Walter Whitlock - good work. * * Revision 1.9 2001/10/16 23:51:42 dereks * Change vic's fdct() from floating-point to fix-point. Improves performance * for h261 video significantly on some machines. Thanks to Cosmos Jiang * * Revision 1.8 2001/10/16 21:20:07 yurik * Removed warnings on Windows CE. Submitted by Jehan Bing, jehan@bravobrava.com * * Revision 1.6 2001/05/10 05:25:44 robertj * Removed need for VIC code to use ptlib. * * Revision 1.5 2000/08/25 03:18:49 dereks * Add change log facility (Thanks Robert for the info on implementation) * * * ********/ #include "bsd-endian.h" #include "dct.h" #include "p64-huff.h" #include "crdef.h" #include "transmitter.h" #include "encoder.h" /* * H.261 encapsulation.in payload of h261 packet. * See Internet draft. * * 0 1 2 3 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * |SBIT |EBIT |I|V| GOBN | MBAP | QUANT | HMVD | VMVD | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ // define H261 header related values // (currently these are defined in both p64.h and encoder-h261.h for use // in decode and encode. Should there be one common include file?) typedef unsigned h261hdr_t; #define HDRSIZE 4 #define CIF_WIDTH 352 #define CIF_HEIGHT 288 #define QCIF_WIDTH 176 #define QCIF_HEIGHT 144 #define BMB 6 /* # blocks in a MB */ #define MBPERGOB 33 /* # of Macroblocks per GOB */ #ifdef INT_64 #define NBIT 64 #define BB_INT INT_64 #else #define NBIT 32 #define BB_INT u_int #endif #if BYTE_ORDER == LITTLE_ENDIAN #if NBIT == 64 #define STORE_BITS(bb, bc) \ bc[0] = (u_char)(bb >> 56); \ bc[1] = (u_char)(bb >> 48); \ bc[2] = (u_char)(bb >> 40); \ bc[3] = (u_char)(bb >> 32); \ bc[4] = (u_char)(bb >> 24); \ bc[5] = (u_char)(bb >> 16); \ bc[6] = (u_char)(bb >> 8); \ bc[7] = (u_char)(bb); #define LOAD_BITS(bc) \ ((BB_INT)bc[0] << 56 | \ (BB_INT)bc[1] << 48 | \ (BB_INT)bc[2] << 40 | \ (BB_INT)bc[3] << 32 | \ (BB_INT)bc[4] << 24 | \ (BB_INT)bc[5] << 16 | \ (BB_INT)bc[6] << 8 | \ (BB_INT)bc[7]) #else #define STORE_BITS(bb, bc) \ bc[0] = (u_char)(bb >> 24); \ bc[1] = (u_char)(bb >> 16); \ bc[2] = (u_char)(bb >> 8); \ bc[3] = (u_char)(bb); #define LOAD_BITS(bc) (ntohl(*(BB_INT*)(bc))) #endif #else #define STORE_BITS(bb, bc) *(BB_INT*)bc = (bb); #define LOAD_BITS(bc) (*(BB_INT*)(bc)) #endif /** append the "n" LSbits of "bits" to the place pointed to by bc post-increment "bc" as needed. "bb" is used for intermediate storage "nbb" keeps track of bits in "bb" note that ALL bits in "n" are OR'ed into the result */ #define PUT_BITS(bits, n, nbb, bb, bc) \ { \ nbb += (n); \ if (nbb > NBIT) { \ u_int extra = (nbb) - NBIT; \ bb |= (BB_INT)(bits) >> extra; \ STORE_BITS(bb, bc) \ bc += sizeof(BB_INT); \ bb = (BB_INT)(bits) << (NBIT - extra); \ nbb = extra; \ } else \ bb |= (BB_INT)(bits) << (NBIT - (nbb)); \ } class H261Encoder :public Encoder { public: void setq(int q); protected: int encode(const VideoFrame*, const u_char *crvec); H261Encoder(Transmitter *T); virtual ~H261Encoder(void)=0; void encode_blk(const short* blk, const char* lm); int flush(Transmitter::pktbuf* pb, int nbit, Transmitter::pktbuf* npb); char* make_level_map(int q, u_int fthresh); void setquantizers(int lq, int mq, int hq); virtual void SetSize(int /*w*/, int /*h*/){}; virtual void encode_mb(u_int /*mba*/, const u_char* /*frm*/, u_int /*loff*/, u_int /*coff*/, int /*how*/){}; /* bit buffer */ BB_INT bb_; // intermediate working space for encoding bits u_int nbb_; // # of valid bits in bb_ u_char* bs_; // used as pointer to start of buffer u_char* bc_; // where to put encoded bits in buffer int sbit_; // SBIT value obtained from previous packet for use on next packet u_char lq_; /* low quality quantizer */ u_char mq_; /* medium quality quantizer */ u_char hq_; /* high quality quantizer */ u_char mquant_; /* the last quantizer we sent to other side */ int quant_required_; /* 1 if not quant'd in dct */ u_int ngob_; // number of GOBs for this frame size, (3 or 12) u_int mba_; // address of just encoded macroblock u_int cif_; /* 1 for CIF, 0 for QCIF */ u_int bstride_; u_int lstride_; u_int cstride_; u_int loffsize_; /* amount of 1 luma block */ u_int coffsize_; /* amount of 1 chroma block */ u_int bloffsize_; /* amount of 1 block advance */ const char* llm_[32]; /* luma dct val -> level maps */ const char* clm_[32]; /* chroma dct val -> level maps */ float lqt_[64]; /* low quality quantizer */ float mqt_[64]; /* medium quality quantizer */ float hqt_[64]; /* high quality quantizer */ u_int coff_[12]; /* where to find U given gob# */ u_int loff_[12]; /* where to find Y given gob# */ u_int blkno_[12]; /* for CR */ const VideoFrame *gVf; // current video frame YUV data bool gPicture; // if PTrue, send picture layer header int gHdrGOBN; // next GOB number for last encoded MB int gNxtGOB; // GOB number for next marcroblock to be considered for encoding int gGobMax; // maximum GOB number in frame bool gGOBhdrNxt; // set PTrue when GOB header is next data bool gSendGOBhdr; // set PTrue when GOB header must be encoded before next MB int gHdrMBAP; // address of last macroblock encoded in previous packet 1..33 int gNxtMBA; // address of next macroblock to be considered for encoding int gHdrQUANT; // QUANT in effect for next MB in buffer int gStep; // Macro Block step size bool gDone; // Set PTrue when encoding of frame is done int gDbase; //offset from gData where valid data starts int gNbytes; // number of bytes in gData buffer from previous packet u_int gloff; u_int gcoff; u_int gblkno; int gline; }; class H261DCTEncoder: public H261Encoder { public: H261DCTEncoder(Transmitter *T); int consume(const VideoFrame*); void SetSize(int w, int h); protected: void encode_mb(u_int mba, const u_char* frm, u_int loff, u_int coff, int how); }; class H261PixelEncoder : public H261Encoder { public: H261PixelEncoder(Transmitter *T); int consume(const VideoFrame*); void SetSize(int w, int h); int PreIncEncodeSetup(const VideoFrame*); void IncEncodeAndGetPacket(u_char * buffer, unsigned & length ); /** When incrementally encoding, return true if there is still more encoding waiting to be done for the current video frame. */ int MoreToIncEncode() { return !gDone; } protected: void encode_mb(u_int mba, const u_char* frm, u_int loff, u_int coff, int how); // u_char gData[2 * RTP_MTU]; }; h323plus/plugins/video/H.261-vic/vic/bsd-endian.h0000644000175000017500000000741611341106252020114 0ustar markmark/* * Copyright (c) 1993-1994 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and the Network Research Group at * Lawrence Berkeley Laboratory. * 4. Neither the name of the University nor of the Laboratory may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ /************ Change log * * $Log: bsd-endian.h,v $ * Revision 1.1 2010/02/24 02:19:22 shorne * First commit of h323plus mirror * * Revision 1.3 2006/08/01 13:02:40 rjongbloed * Merged changes from OpenH323 on removing need to winsock (ntohl function reference) * * Revision 1.2 2006/07/31 09:09:21 csoutheren * Checkin of validated codec used during development * * Revision 1.1.2.1 2006/04/06 01:17:17 csoutheren * Initial version of H.261 video codec plugin for OPAL * * Revision 2.2 2006/02/11 21:09:28 dsandras * More OpenSolaris fixes thanks to Brian Lu . Thanks! * * Revision 2.1 2003/03/15 23:42:59 robertj * Update to OpenH323 v1.11.7 * * Revision 1.8 2003/03/14 07:25:55 robertj * Removed $header keyword so is not different on alternate repositories * * Revision 1.7 2002/10/10 05:35:42 robertj * VxWorks port, thanks Martijn Roest * * Revision 1.6 2001/05/25 04:32:25 yurik * Added Arm based to list of little endian machines * * Revision 1.5 2001/05/16 06:30:16 yurik * Moved int_64 it to config.h * * Revision 1.4 2001/05/16 05:37:13 yurik * Fixed crash on video receive by #define INT_64 * * Revision 1.3 2000/08/25 03:18:49 dereks * Add change log facility (Thanks Robert for the info on implementation) * * * ********/ #include "config.h" #ifdef _WIN32 #include #endif #ifdef __linux__ #include #endif #ifndef IPPROTO_IP #include #endif #ifndef BYTE_ORDER #define LITTLE_ENDIAN 1234 #define BIG_ENDIAN 4321 #if defined(ultrix) || defined(__alpha) || defined(__i386__) || defined(__i486__) || defined(_X86_) || defined(_ARM_) || defined(__i386) || defined(i386) #define BYTE_ORDER LITTLE_ENDIAN #else #define BYTE_ORDER BIG_ENDIAN #endif #endif #if BYTE_ORDER == LITTLE_ENDIAN #define SHIFT(n) (24 - (n)) #else #define SHIFT(n) (n) #endif #define EXTRACT(v, n) (((v) >> SHIFT(n)) & 0xff) #define SPLICE(v, p, n) (v) |= (p) << SHIFT(n) h323plus/plugins/video/H.261-vic/vic/dct.h0000644000175000017500000001021411341106252016650 0ustar markmark/* * Copyright (c) 1994 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the Network Research * Group at Lawrence Berkeley Laboratory. * 4. Neither the name of the University nor of the Laboratory may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ /************ Change log * * $Log: dct.h,v $ * Revision 1.1 2010/02/24 02:19:22 shorne * First commit of h323plus mirror * * Revision 1.2 2006/07/31 09:09:21 csoutheren * Checkin of validated codec used during development * * Revision 1.1.2.1 2006/04/06 01:17:17 csoutheren * Initial version of H.261 video codec plugin for OPAL * * Revision 2.1 2003/03/15 23:42:59 robertj * Update to OpenH323 v1.11.7 * * Revision 1.5 2003/03/14 07:25:55 robertj * Removed $header keyword so is not different on alternate repositories * * Revision 1.4 2002/05/17 01:47:33 dereks * backout the integer maths in the h261 codec. * * Revision 1.3 2001/10/14 21:48:45 dereks * Change vic's fdct() from floating-point to fix-point. Improves performance * for h261 video significantly on some machines. Thanks to Cosmos Jiang * * Revision 1.2 2000/08/25 03:18:49 dereks * Add change log facility (Thanks Robert for the info on implementation) * * * ********/ /* * Ck = cos(k pi / 16) * Sk = sin(k pi / 16) */ #define C1 0.98078528 #define C2 0.92387953 #define C3 0.83146961 #define C4 0.70710678 #define C5 0.55557023 #define C6 0.38268343 #define C7 0.19509032 #define S1 C7 #define S3 C5 #define S6 C2 #define C_1 C1 #define S_1 (-S1) #define C_3 C3 #define S_3 (-S3) void fdct(const u_char* in, int stride, short* out, const float* qt); void bv_rdct1(int dc, short* blk, int ac0, u_char* out, int stride); void bv_rdct2(int dc, short* blk, int ac0, u_char* in, u_char* out, int stride); void bv_rdct3(int dc, short* blk, int ac0, int ac1, u_char* in, u_char* out, int stride); #ifdef INT_64 void rdct(short* coef, INT_64 mask, u_char* out, int stride, const int* qt); void rdct(short* coef, INT_64 mask, u_char* out, int stride, const u_char* in); #else void rdct(short* coef, u_int m0, u_int m1, u_char* out, int stride, const int* qt); void rdct(short* coef, u_int m0, u_int m1, u_char* out, int stride, const u_char* in); #endif void dcfill(int dc, u_char* out, int stride); void dcsum(int dc, u_char* in, u_char* out, int stride); void dcsum2(int dc, u_char* in, u_char* out, int stride); void dct_decimate(const short* in0, const short* in1, short* out); /*XXX*/ void rdct_fold_q(const int* in, int* qt); void fdct_fold_q(const int* in, float* qt); extern const u_char ROWZAG[]; extern const u_char COLZAG[]; /*XXX*/ extern void j_fwd_dct (short* data); h323plus/plugins/video/H.261-vic/vic/encoder.h0000644000175000017500000000763511341106252017532 0ustar markmark/*encoder.h (c) 1999-2000 Derek J Smithies (dereks@ibm.net) * Indranet Technologies ltd (lara@indranet.co.nz) * * This file is derived from vic, http://www-nrg.ee.lbl.gov/vic/ * Their copyright notice is below. */ /* * Copyright (c) 1995 The Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the Network Research * Group at Lawrence Berkeley National Laboratory. * 4. Neither the name of the University nor of the Laboratory may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ /************ Change log * * $Log: encoder.h,v $ * Revision 1.1 2010/02/24 02:19:22 shorne * First commit of h323plus mirror * * Revision 1.2 2006/07/31 09:09:22 csoutheren * Checkin of validated codec used during development * * Revision 1.1.2.1 2006/04/06 01:17:17 csoutheren * Initial version of H.261 video codec plugin for OPAL * * Revision 2.3 2005/08/31 13:16:02 rjongbloed * Ported video fast update from OpenH323 * * Revision 2.2 2005/03/19 04:08:10 csoutheren * Fixed warnings with gcc snapshot 4.1-20050313 * Updated to configure 2.59 * * Revision 2.1 2003/03/15 23:42:59 robertj * Update to OpenH323 v1.11.7 * * Revision 1.7 2005/03/19 03:22:12 csoutheren * Removed warnings from gcc snapshot 4.1-20050313 * * Revision 1.6 2003/04/10 22:39:32 dereks * Sort out copyright issues. Thanks Qhong Wang * * Revision 1.5 2003/03/14 07:25:55 robertj * Removed $header keyword so is not different on alternate repositories * * Revision 1.4 2003/02/10 00:32:47 robertj * Removed code for redundent class and constructor. * * Revision 1.3 2000/08/25 03:18:49 dereks * Add change log facility (Thanks Robert for the info on implementation) * * * ********/ #ifndef vic_encoder_h #define vic_encoder_h #include "config.h" class Transmitter; #include "videoframe.h" class Encoder { public: virtual ~Encoder() { } virtual int consume(const VideoFrame*) {return 0; }; void SetSize(int w, int h) { width = w; height = h; framesize = w * h; } protected: Encoder(Transmitter *T) {width=0; height=0; framesize=0; tx_ = T;} Transmitter* tx_; //Given a transmitter object at creation. inline int SameSize(const VideoFrame* vf) { return ((vf->width == width) && (vf->height == height)); } int width; int height; int framesize; }; #endif h323plus/plugins/video/H.261-vic/vic/config.h0000644000175000017500000000614311341106252017351 0ustar markmark/************ Change log * * $Log: config.h,v $ * Revision 1.1 2010/02/24 02:19:22 shorne * First commit of h323plus mirror * * Revision 1.5 2006/11/02 02:32:15 csoutheren * Fixed corruption problem on linux * * Revision 1.4 2006/10/10 01:42:55 csoutheren * Applied patches from Ekiga bug 360869 - fix OpenSolaris build problems * Thanks to Boying Lu * * Revision 1.3 2006/08/01 13:02:40 rjongbloed * Merged changes from OpenH323 on removing need to winsock (ntohl function reference) * * Revision 1.2 2006/07/31 09:09:21 csoutheren * Checkin of validated codec used during development * * Revision 1.1.2.1 2006/04/06 01:17:17 csoutheren * Initial version of H.261 video codec plugin for OPAL * * Revision 2.1 2003/03/15 23:42:59 robertj * Update to OpenH323 v1.11.7 * Revision 1.13 2006/07/23 05:13:27 csoutheren * Fixed gcc implementation of SWAP32 * * Revision 1.12 2006/07/22 13:25:01 rjongbloed * Eliminate need for linking winsock just for ntohl() function. * * Revision 1.11 2002/10/10 05:40:11 robertj * VxWorks port, thanks Martijn Roest * * Revision 1.10 2002/06/13 09:54:43 craigs * Removed iostream.h to reduce gcc incompatibilities * * Revision 1.9 2002/05/03 08:21:17 rogerh * Only use the 64 bit h.261 codec on little endian machines. (see dct.cxx) * Submitted by andi * * Revision 1.8 2002/04/26 04:57:41 dereks * Add Walter Whitlocks fixes, based on Victor Ivashim's suggestions to * improve the quality with Netmeeting. Thanks guys!!!! * * Revision 1.7 2002/04/05 00:53:19 dereks * Modify video frame encoding so that frame is encoded on an incremental basis. * Thanks to Walter Whitlock - good work. * * Revision 1.6 2001/09/26 02:00:09 robertj * Changed to use MSVC and GNU compiler built in 64 bit integer. * * Revision 1.5 2001/05/16 06:30:29 yurik * INT_64 is defined here * * Revision 1.4 2001/05/10 14:21:34 craigs * Added BYTE, as ptlib.h has been removed * * Revision 1.3 2001/05/10 05:25:44 robertj * Removed need for VIC code to use ptlib. * * Revision 1.2 2000/08/25 03:18:49 dereks * Add change log facility (Thanks Robert for the info on implementation) * * * ********/ #include typedef unsigned char u_char; typedef unsigned short u_short; typedef unsigned int u_int; typedef unsigned char BYTE; typedef unsigned long u_long; #ifndef _WIN32 #include #endif /* * Largest (user-level) packet size generated by our rtp applications. * Individual video formats may use smaller mtu's. */ #define RTP_MTU 1024 #if defined(_MSC_VER) #define INT_64 __int64 // uncomment for 64 bit word machines #elif defined(__GNUC__) || defined (sun) #define INT_64 long long #endif #ifdef _WIN32_WCE typedef int intptr_t; #endif #if BYTE_ORDER == LITTLE_ENDIAN #define SWAP32(left,right) \ ((char*)(left))[0] = ((const char*)(right))[3], \ ((char*)(left))[1] = ((const char*)(right))[2], \ ((char*)(left))[2] = ((const char*)(right))[1], \ ((char*)(left))[3] = ((const char*)(right))[0] #else #define SWAP32(left,right) *(long*)(left)=*(const long*)(right) #endif h323plus/plugins/video/H.261-vic/vic/videoframe.h0000644000175000017500000000246511341106252020230 0ustar markmark#ifndef VIDEO_FRAME_H #define VIDEO_FRAME_H /************ Change log * * $Log: videoframe.h,v $ * Revision 1.1 2010/02/24 02:19:22 shorne * First commit of h323plus mirror * * Revision 1.2 2006/07/31 09:09:22 csoutheren * Checkin of validated codec used during development * * Revision 1.1.2.1 2006/04/06 01:17:17 csoutheren * Initial version of H.261 video codec plugin for OPAL * * Revision 2.1 2003/03/15 23:43:00 robertj * Update to OpenH323 v1.11.7 * * Revision 1.8 2003/02/10 00:32:34 robertj * Removed code for redundent class and constructor. * * Revision 1.7 2001/05/10 05:25:44 robertj * Removed need for VIC code to use ptlib. * * Revision 1.6 2000/12/19 22:22:34 dereks * Remove connection to grabber-OS.cxx files. grabber-OS.cxx files no longer used. * Video data is now read from a video channel, using the pwlib classes. * * Revision 1.5 2000/08/25 03:18:50 dereks * Add change log facility (Thanks Robert for the info on implementation) * * * ********/ class VideoFrame { public: VideoFrame(u_char *cr, int w, int h); VideoFrame(int w, int h) ; ~VideoFrame(); void SetSize(int newwidth, int newheight); u_char *frameptr; u_char *crvec; u_int ts; int width; int height; }; #endif //ifndef VIDEO_FRAME_H h323plus/plugins/video/H.261-vic/vic/vid_coder.cxx0000644000175000017500000001674611341106252020427 0ustar markmark/* * Copyright (c) 1993-1994 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and the Network Research Group at * Lawrence Berkeley Laboratory. * 4. Neither the name of the University nor of the Laboratory may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /************ Change log * * $Log: vid_coder.cxx,v $ * Revision 1.1 2010/02/24 02:19:22 shorne * First commit of h323plus mirror * * Revision 1.3 2006/12/19 03:11:55 dereksmithies * Add excellent fixes from Ben Weekes to suppress valgrind error messages. * This will help memory management - many thanks. * * Revision 1.2 2006/07/31 09:09:22 csoutheren * Checkin of validated codec used during development * * Revision 1.1.2.1 2006/04/06 01:17:17 csoutheren * Initial version of H.261 video codec plugin for OPAL * * Revision 2.2 2005/08/31 13:16:02 rjongbloed * Ported video fast update from OpenH323 * * Revision 2.1 2003/03/15 23:43:00 robertj * Update to OpenH323 v1.11.7 * * Revision 1.6 2003/04/03 23:54:15 robertj * Added fast update to H.261 codec, thanks Gustavo Garcэa Bernardo * * Revision 1.5 2000/09/22 02:40:13 dereks * Tidied code for generating test images. * Added mechanism to ensure the entire frame is sent on startup. * * Revision 1.4 2000/08/25 03:18:50 dereks * Add change log facility (Thanks Robert for the info on implementation) * * * ********/ #include "vid_coder.h" void Pre_Vid_Coder::SetSize(int _width,int _height) { if((_width!=width)||(_height!=height)) { Free_Memory(); width =_width; height =_height; outw =_width; // idle_high= 60; idle_low = 2; framesize=width*height; allocref(); crinit(); rover=0; } } Pre_Vid_Coder::Pre_Vid_Coder():Encoder(NULL) { rover = 0; frameCount = 0; ref =NULL; crvec=NULL; fastUpdCount = 0; } Pre_Vid_Coder::~Pre_Vid_Coder() { Free_Memory(); } void Pre_Vid_Coder::Free_Memory() { if(crvec) delete [] crvec; crvec= NULL; if(ref) delete [] ref; ref= NULL; } void Pre_Vid_Coder::crinit() { blkw = width >> 4; blkh = height >> 4; scan = 0; nblk = blkw * blkh; if (crvec) delete [] crvec; crvec = new u_char[nblk]; for (int i = 0; i < nblk; ++i) crvec[i] = CR_MOTION|CR_SEND; } /* must call after set_size_xxx */ void Pre_Vid_Coder::allocref() { if(ref) delete [] ref; ref = new u_char[framesize]; memset((char*)ref, 0, framesize); } /* * define these for REPLENISH macro used below */ #define ABS(v) if (v < 0) v = -v; #define DIFF4(in, frm, v) \ v += (in)[0] - (frm)[0]; \ v += (in)[1] - (frm)[1]; \ v += (in)[2] - (frm)[2]; \ v += (in)[3] - (frm)[3]; #define DIFFLINE(in, frm, left, center, right) \ DIFF4(in, frm, left); \ DIFF4(in + 1*4, frm + 1*4, center); \ DIFF4(in + 2*4, frm + 2*4, center); \ DIFF4(in + 3*4, frm + 3*4, right); \ ABS(right); \ ABS(left); \ ABS(center); void Pre_Vid_Coder::suppress(const u_char* devbuf) { REPLENISH(devbuf, ref, outw, 1, 0, blkw, 0, blkh); } inline void Pre_Vid_Coder::save(u_char* lum, u_char* cache, int stride) { for (int i = 16; --i >= 0; ) { ((u_int*)cache)[0] = ((u_int*)lum)[0]; ((u_int*)cache)[1] = ((u_int*)lum)[1]; ((u_int*)cache)[2] = ((u_int*)lum)[2]; ((u_int*)cache)[3] = ((u_int*)lum)[3]; cache += stride; lum += stride; } } void Pre_Vid_Coder::ProcessFrame(VideoFrame *vf) { if (!SameSize(vf)) SetSize(vf->width,vf->height); frametime= vf->ts; //Need frametime for deciding what blocks are old. suppress(vf->frameptr); saveblks(vf->frameptr); vf->crvec= crvec; } /* * Default save routine -- stuff new luma blocks into cache. */ void Pre_Vid_Coder::saveblks(u_char* lum) { u_char* crv = crvec; u_char* cache = ref; int stride = outw; stride = (stride << 4) - stride; for (int y = 0; y < blkh; y++) { for (int x = 0; x < blkw; x++) { if ((*crv++ & CR_SEND) != 0) save(lum, cache, outw); cache += 16; lum += 16; } lum += stride; cache += stride; } } void Pre_Vid_Coder::age_blocks() { frameCount++; fastUpdCount++; if( (frameCount<3) || (fastUpdCount< 3) ) { for (int i = 0; i < nblk; ++i) crvec[i] = CR_MOTION|CR_SEND; return; } /* The lines at the head of this routine are a hack. * They ensure that for the first two frames of the current * connection, all blocks in the frame are sent. * Without these lines, netmeeting fills in the image over a * series of frames. These lines ensure that netmeeting starts * up with a full image. */ for (int i = 0; i < nblk; ++i) { int s = CR_STATE(crvec[i]); /* * Age this block. * Once we hit the age threshold, we * set CR_SEND as a hint to send a * higher-quality version of the block. * After this the block will stop aging, * until there is motion. In the meantime, * we might send it as background fill * using the highest quality. */ if (s <= CR_AGETHRESH) { if (s == CR_AGETHRESH) s = CR_IDLE; else { s++; if (s == CR_AGETHRESH) s |= CR_SEND; } crvec[i] = s; } else if (s == CR_BG) /* * reset the block to IDLE if it was sent * as a BG block in the last frame. */ crvec[i] = CR_IDLE; } /* * Now go through and look for some idle blocks to send * as background fill. */ //HORRIBLE, need better algorithm for determining n. int n = ((0*frametime) < frametime)? idle_high : idle_low; while (n > 0) { int s = CR_STATE(crvec[rover]); if (s == CR_IDLE) { crvec[rover] = CR_SEND|CR_BG; --n; } rover++; if (rover >= nblk) { rover = 0; /* guarantee loop termination */ break; } } /* * Bump the CR scan pointer. This variable controls which * scan line of a block we use to make the replenishment * decision. We skip 3 lines at a time to quickly precess * over the block. Since 3 and 8 are coprime, we will * sweep out every line. */ scan = (scan + 3) & 7; } void Pre_Vid_Coder::FastUpdatePicture() //ADDED { fastUpdCount = 0; } h323plus/plugins/video/H.261-vic/vic/huffcode.c0000644000175000017500000501477211341106252017676 0ustar markmark/************ Change log * * $Log: huffcode.c,v $ * Revision 1.1 2010/02/24 02:19:22 shorne * First commit of h323plus mirror * * Revision 1.2 2006/07/31 09:09:22 csoutheren * Checkin of validated codec used during development * * Revision 1.1.2.1 2006/04/06 01:17:17 csoutheren * Initial version of H.261 video codec plugin for OPAL * * Revision 2.1 2003/03/15 23:42:59 robertj * Update to OpenH323 v1.11.7 * * Revision 1.2 2001/01/29 19:42:38 dereks * Add change log facility (Thanks Robert) * * * * ********/ #include "p64-huff.h" #ifdef _MSC_VER #pragma warning(disable:4310) #endif const int htd_mtype_width = 10; const short htd_mtype[] = {(short) 0xffca,(short) 0x01ea,(short) 0x0089,(short) 0x0089,(short) 0x00e8,(short) 0x00e8,(short) 0x00e8,(short) 0x00e8,(short) 0x0527,(short) 0x0527,(short) 0x0527,(short) 0x0527,(short) 0x0527,(short) 0x0527,(short) 0x0527,(short) 0x0527,(short) 0x03e6,(short) 0x03e6,(short) 0x03e6,(short) 0x03e6,(short) 0x03e6,(short) 0x03e6,(short) 0x03e6,(short) 0x03e6,(short) 0x03e6,(short) 0x03e6,(short) 0x03e6,(short) 0x03e6,(short) 0x03e6,(short) 0x03e6,(short) 0x03e6,(short) 0x03e6,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0165,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x0283,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x02e2,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061,(short) 0x0061, }; const int htd_mba_width = 16; const short htd_mba[] = {(short) 0xffd0,(short) 0xfff0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0x000b,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0xffd0,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x042b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x040b,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03eb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03cb,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x03ab,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x038b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x036b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x034b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x032b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x030b,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02eb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02cb,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x02aa,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x028a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x026a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x024a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x022a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x020a,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01e8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01c8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x01a8,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0188,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0168,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0148,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x0107,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00e5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00c5,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x00a4,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0063,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0043,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021,(short) 0x0021, }; const int htd_cbp_width = 9; const short htd_cbp[] = {(short) 0xffc9,(short) 0xffc9,(short) 0x04e9,(short) 0x0369,(short) 0x0769,(short) 0x06e9,(short) 0x05e9,(short) 0x03e9,(short) 0x0748,(short) 0x0748,(short) 0x06c8,(short) 0x06c8,(short) 0x05c8,(short) 0x05c8,(short) 0x03c8,(short) 0x03c8,(short) 0x0728,(short) 0x0728,(short) 0x06a8,(short) 0x06a8,(short) 0x05a8,(short) 0x05a8,(short) 0x03a8,(short) 0x03a8,(short) 0x04c8,(short) 0x04c8,(short) 0x0348,(short) 0x0348,(short) 0x04a8,(short) 0x04a8,(short) 0x0328,(short) 0x0328,(short) 0x0568,(short) 0x0568,(short) 0x02e8,(short) 0x02e8,(short) 0x0668,(short) 0x0668,(short) 0x01e8,(short) 0x01e8,(short) 0x0548,(short) 0x0548,(short) 0x02c8,(short) 0x02c8,(short) 0x0648,(short) 0x0648,(short) 0x01c8,(short) 0x01c8,(short) 0x0528,(short) 0x0528,(short) 0x02a8,(short) 0x02a8,(short) 0x0628,(short) 0x0628,(short) 0x01a8,(short) 0x01a8,(short) 0x0468,(short) 0x0468,(short) 0x0268,(short) 0x0268,(short) 0x0168,(short) 0x0168,(short) 0x00e8,(short) 0x00e8,(short) 0x0447,(short) 0x0447,(short) 0x0447,(short) 0x0447,(short) 0x0247,(short) 0x0247,(short) 0x0247,(short) 0x0247,(short) 0x0147,(short) 0x0147,(short) 0x0147,(short) 0x0147,(short) 0x00c7,(short) 0x00c7,(short) 0x00c7,(short) 0x00c7,(short) 0x0427,(short) 0x0427,(short) 0x0427,(short) 0x0427,(short) 0x0227,(short) 0x0227,(short) 0x0227,(short) 0x0227,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x0127,(short) 0x00a7,(short) 0x00a7,(short) 0x00a7,(short) 0x00a7,(short) 0x07e6,(short) 0x07e6,(short) 0x07e6,(short) 0x07e6,(short) 0x07e6,(short) 0x07e6,(short) 0x07e6,(short) 0x07e6,(short) 0x0066,(short) 0x0066,(short) 0x0066,(short) 0x0066,(short) 0x0066,(short) 0x0066,(short) 0x0066,(short) 0x0066,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0306,(short) 0x0306,(short) 0x0306,(short) 0x0306,(short) 0x0306,(short) 0x0306,(short) 0x0306,(short) 0x0306,(short) 0x07c5,(short) 0x07c5,(short) 0x07c5,(short) 0x07c5,(short) 0x07c5,(short) 0x07c5,(short) 0x07c5,(short) 0x07c5,(short) 0x07c5,(short) 0x07c5,(short) 0x07c5,(short) 0x07c5,(short) 0x07c5,(short) 0x07c5,(short) 0x07c5,(short) 0x07c5,(short) 0x0045,(short) 0x0045,(short) 0x0045,(short) 0x0045,(short) 0x0045,(short) 0x0045,(short) 0x0045,(short) 0x0045,(short) 0x0045,(short) 0x0045,(short) 0x0045,(short) 0x0045,(short) 0x0045,(short) 0x0045,(short) 0x0045,(short) 0x0045,(short) 0x07a5,(short) 0x07a5,(short) 0x07a5,(short) 0x07a5,(short) 0x07a5,(short) 0x07a5,(short) 0x07a5,(short) 0x07a5,(short) 0x07a5,(short) 0x07a5,(short) 0x07a5,(short) 0x07a5,(short) 0x07a5,(short) 0x07a5,(short) 0x07a5,(short) 0x07a5,(short) 0x0025,(short) 0x0025,(short) 0x0025,(short) 0x0025,(short) 0x0025,(short) 0x0025,(short) 0x0025,(short) 0x0025,(short) 0x0025,(short) 0x0025,(short) 0x0025,(short) 0x0025,(short) 0x0025,(short) 0x0025,(short) 0x0025,(short) 0x0025,(short) 0x0705,(short) 0x0705,(short) 0x0705,(short) 0x0705,(short) 0x0705,(short) 0x0705,(short) 0x0705,(short) 0x0705,(short) 0x0705,(short) 0x0705,(short) 0x0705,(short) 0x0705,(short) 0x0705,(short) 0x0705,(short) 0x0705,(short) 0x0705,(short) 0x0685,(short) 0x0685,(short) 0x0685,(short) 0x0685,(short) 0x0685,(short) 0x0685,(short) 0x0685,(short) 0x0685,(short) 0x0685,(short) 0x0685,(short) 0x0685,(short) 0x0685,(short) 0x0685,(short) 0x0685,(short) 0x0685,(short) 0x0685,(short) 0x0585,(short) 0x0585,(short) 0x0585,(short) 0x0585,(short) 0x0585,(short) 0x0585,(short) 0x0585,(short) 0x0585,(short) 0x0585,(short) 0x0585,(short) 0x0585,(short) 0x0585,(short) 0x0585,(short) 0x0585,(short) 0x0585,(short) 0x0585,(short) 0x0385,(short) 0x0385,(short) 0x0385,(short) 0x0385,(short) 0x0385,(short) 0x0385,(short) 0x0385,(short) 0x0385,(short) 0x0385,(short) 0x0385,(short) 0x0385,(short) 0x0385,(short) 0x0385,(short) 0x0385,(short) 0x0385,(short) 0x0385,(short) 0x0505,(short) 0x0505,(short) 0x0505,(short) 0x0505,(short) 0x0505,(short) 0x0505,(short) 0x0505,(short) 0x0505,(short) 0x0505,(short) 0x0505,(short) 0x0505,(short) 0x0505,(short) 0x0505,(short) 0x0505,(short) 0x0505,(short) 0x0505,(short) 0x0285,(short) 0x0285,(short) 0x0285,(short) 0x0285,(short) 0x0285,(short) 0x0285,(short) 0x0285,(short) 0x0285,(short) 0x0285,(short) 0x0285,(short) 0x0285,(short) 0x0285,(short) 0x0285,(short) 0x0285,(short) 0x0285,(short) 0x0285,(short) 0x0605,(short) 0x0605,(short) 0x0605,(short) 0x0605,(short) 0x0605,(short) 0x0605,(short) 0x0605,(short) 0x0605,(short) 0x0605,(short) 0x0605,(short) 0x0605,(short) 0x0605,(short) 0x0605,(short) 0x0605,(short) 0x0605,(short) 0x0605,(short) 0x0185,(short) 0x0185,(short) 0x0185,(short) 0x0185,(short) 0x0185,(short) 0x0185,(short) 0x0185,(short) 0x0185,(short) 0x0185,(short) 0x0185,(short) 0x0185,(short) 0x0185,(short) 0x0185,(short) 0x0185,(short) 0x0185,(short) 0x0185,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0404,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0204,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0104,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0084,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783,(short) 0x0783, }; const int htd_dvm_width = 11; const short htd_dvm[] = {(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xffcb,(short) 0xfe0b,(short) 0x01eb,(short) 0xfe2b,(short) 0x01cb,(short) 0xfe4b,(short) 0x01ab,(short) 0xfe6b,(short) 0x018b,(short) 0xfe8b,(short) 0x016b,(short) 0xfeab,(short) 0x014a,(short) 0x014a,(short) 0xfeca,(short) 0xfeca,(short) 0x012a,(short) 0x012a,(short) 0xfeea,(short) 0xfeea,(short) 0x010a,(short) 0x010a,(short) 0xff0a,(short) 0xff0a,(short) 0x00e8,(short) 0x00e8,(short) 0x00e8,(short) 0x00e8,(short) 0x00e8,(short) 0x00e8,(short) 0x00e8,(short) 0x00e8,(short) 0xff28,(short) 0xff28,(short) 0xff28,(short) 0xff28,(short) 0xff28,(short) 0xff28,(short) 0xff28,(short) 0xff28,(short) 0x00c8,(short) 0x00c8,(short) 0x00c8,(short) 0x00c8,(short) 0x00c8,(short) 0x00c8,(short) 0x00c8,(short) 0x00c8,(short) 0xff48,(short) 0xff48,(short) 0xff48,(short) 0xff48,(short) 0xff48,(short) 0xff48,(short) 0xff48,(short) 0xff48,(short) 0x00a8,(short) 0x00a8,(short) 0x00a8,(short) 0x00a8,(short) 0x00a8,(short) 0x00a8,(short) 0x00a8,(short) 0x00a8,(short) 0xff68,(short) 0xff68,(short) 0xff68,(short) 0xff68,(short) 0xff68,(short) 0xff68,(short) 0xff68,(short) 0xff68,(short) 0x0087,(short) 0x0087,(short) 0x0087,(short) 0x0087,(short) 0x0087,(short) 0x0087,(short) 0x0087,(short) 0x0087,(short) 0x0087,(short) 0x0087,(short) 0x0087,(short) 0x0087,(short) 0x0087,(short) 0x0087,(short) 0x0087,(short) 0x0087,(short) 0xff87,(short) 0xff87,(short) 0xff87,(short) 0xff87,(short) 0xff87,(short) 0xff87,(short) 0xff87,(short) 0xff87,(short) 0xff87,(short) 0xff87,(short) 0xff87,(short) 0xff87,(short) 0xff87,(short) 0xff87,(short) 0xff87,(short) 0xff87,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0x0065,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0xffa5,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0x0044,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0xffc4,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0x0023,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0xffe3,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001,(short) 0x0001, }; const int htd_tcoeff_width = 14; const short htd_tcoeff[] = {(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0xffce,(short) 0x094e,(short) 0x794e,(short) 0x092e,(short) 0x792e,(short) 0x0cae,(short) 0x74ae,(short) 0x106e,(short) 0x706e,(short) 0x144e,(short) 0x6c4e,(short) 0x1c2e,(short) 0x642e,(short) 0x182e,(short) 0x682e,(short) 0x3c0e,(short) 0x440e,(short) 0x380e,(short) 0x480e,(short) 0x340e,(short) 0x4c0e,(short) 0x300e,(short) 0x500e,(short) 0x074e,(short) 0x7f4e,(short) 0x072e,(short) 0x7f2e,(short) 0x070e,(short) 0x7f0e,(short) 0x06ee,(short) 0x7eee,(short) 0x06ce,(short) 0x7ece,(short) 0x2c0d,(short) 0x2c0d,(short) 0x540d,(short) 0x540d,(short) 0x090d,(short) 0x090d,(short) 0x790d,(short) 0x790d,(short) 0x0c8d,(short) 0x0c8d,(short) 0x748d,(short) 0x748d,(short) 0x280d,(short) 0x280d,(short) 0x580d,(short) 0x580d,(short) 0x104d,(short) 0x104d,(short) 0x704d,(short) 0x704d,(short) 0x08ed,(short) 0x08ed,(short) 0x78ed,(short) 0x78ed,(short) 0x06ad,(short) 0x06ad,(short) 0x7ead,(short) 0x7ead,(short) 0x068d,(short) 0x068d,(short) 0x7e8d,(short) 0x7e8d,(short) 0x240d,(short) 0x240d,(short) 0x5c0d,(short) 0x5c0d,(short) 0x066d,(short) 0x066d,(short) 0x7e6d,(short) 0x7e6d,(short) 0x064d,(short) 0x064d,(short) 0x7e4d,(short) 0x7e4d,(short) 0x142d,(short) 0x142d,(short) 0x6c2d,(short) 0x6c2d,(short) 0x0c6d,(short) 0x0c6d,(short) 0x746d,(short) 0x746d,(short) 0x200d,(short) 0x200d,(short) 0x600d,(short) 0x600d,(short) 0x08cd,(short) 0x08cd,(short) 0x78cd,(short) 0x78cd,(short) 0x062d,(short) 0x062d,(short) 0x7e2d,(short) 0x7e2d,(short) 0x060b,(short) 0x060b,(short) 0x060b,(short) 0x060b,(short) 0x060b,(short) 0x060b,(short) 0x060b,(short) 0x060b,(short) 0x7e0b,(short) 0x7e0b,(short) 0x7e0b,(short) 0x7e0b,(short) 0x7e0b,(short) 0x7e0b,(short) 0x7e0b,(short) 0x7e0b,(short) 0x08ab,(short) 0x08ab,(short) 0x08ab,(short) 0x08ab,(short) 0x08ab,(short) 0x08ab,(short) 0x08ab,(short) 0x08ab,(short) 0x78ab,(short) 0x78ab,(short) 0x78ab,(short) 0x78ab,(short) 0x78ab,(short) 0x78ab,(short) 0x78ab,(short) 0x78ab,(short) 0x1c0b,(short) 0x1c0b,(short) 0x1c0b,(short) 0x1c0b,(short) 0x1c0b,(short) 0x1c0b,(short) 0x1c0b,(short) 0x1c0b,(short) 0x640b,(short) 0x640b,(short) 0x640b,(short) 0x640b,(short) 0x640b,(short) 0x640b,(short) 0x640b,(short) 0x640b,(short) 0x0c4b,(short) 0x0c4b,(short) 0x0c4b,(short) 0x0c4b,(short) 0x0c4b,(short) 0x0c4b,(short) 0x0c4b,(short) 0x0c4b,(short) 0x744b,(short) 0x744b,(short) 0x744b,(short) 0x744b,(short) 0x744b,(short) 0x744b,(short) 0x744b,(short) 0x744b,(short) 0x102b,(short) 0x102b,(short) 0x102b,(short) 0x102b,(short) 0x102b,(short) 0x102b,(short) 0x102b,(short) 0x102b,(short) 0x702b,(short) 0x702b,(short) 0x702b,(short) 0x702b,(short) 0x702b,(short) 0x702b,(short) 0x702b,(short) 0x702b,(short) 0x05eb,(short) 0x05eb,(short) 0x05eb,(short) 0x05eb,(short) 0x05eb,(short) 0x05eb,(short) 0x05eb,(short) 0x05eb,(short) 0x7deb,(short) 0x7deb,(short) 0x7deb,(short) 0x7deb,(short) 0x7deb,(short) 0x7deb,(short) 0x7deb,(short) 0x7deb,(short) 0x05cb,(short) 0x05cb,(short) 0x05cb,(short) 0x05cb,(short) 0x05cb,(short) 0x05cb,(short) 0x05cb,(short) 0x05cb,(short) 0x7dcb,(short) 0x7dcb,(short) 0x7dcb,(short) 0x7dcb,(short) 0x7dcb,(short) 0x7dcb,(short) 0x7dcb,(short) 0x7dcb,(short) 0x088b,(short) 0x088b,(short) 0x088b,(short) 0x088b,(short) 0x088b,(short) 0x088b,(short) 0x088b,(short) 0x088b,(short) 0x788b,(short) 0x788b,(short) 0x788b,(short) 0x788b,(short) 0x788b,(short) 0x788b,(short) 0x788b,(short) 0x788b,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0006,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x0848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x7848,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x0528,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x7d28,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x1008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x7008,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x0508,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x7d08,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x04e7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x7ce7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x04c7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x7cc7,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x0827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x7827,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x04a7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x7ca7,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x05a9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x7da9,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x1809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x6809,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x0589,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x7d89,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x0569,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x7d69,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x0869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x7869,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x0c29,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x7429,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x1409,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x6c09,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x0549,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x7d49,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x0c06,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x7406,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x0486,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x7c86,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x0466,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x7c66,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x0805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x7805,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x0445,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x7c45,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x0424,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0x7c24,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0xffe2,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x0403,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03,(short) 0x7c03, }; struct huffent hte_mba[33] = { { 1, 1 }, { 3, 3 }, { 2, 3 }, { 3, 4 }, { 2, 4 }, { 3, 5 }, { 2, 5 }, { 7, 7 }, { 6, 7 }, { 11, 8 }, { 10, 8 }, { 9, 8 }, { 8, 8 }, { 7, 8 }, { 6, 8 }, { 23, 10 }, { 22, 10 }, { 21, 10 }, { 20, 10 }, { 19, 10 }, { 18, 10 }, { 35, 11 }, { 34, 11 }, { 33, 11 }, { 32, 11 }, { 31, 11 }, { 30, 11 }, { 29, 11 }, { 28, 11 }, { 27, 11 }, { 26, 11 }, { 25, 11 }, { 24, 11 }, }; struct huffent hte_tc[1 << 11] = { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 6, 3 }, { 6, 4 }, { 10, 5 }, { 14, 6 }, { 12, 6 }, { 14, 7 }, { 10, 7 }, { 8, 7 }, { 14, 8 }, { 10, 8 }, { 78, 9 }, { 70, 9 }, { 68, 9 }, { 64, 9 }, { 28, 11 }, { 26, 11 }, { 16, 11 }, { 62, 13 }, { 52, 13 }, { 50, 13 }, { 46, 13 }, { 44, 13 }, { 62, 14 }, { 60, 14 }, { 58, 14 }, { 56, 14 }, { 54, 14 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 8, 5 }, { 12, 7 }, { 8, 8 }, { 72, 9 }, { 30, 11 }, { 18, 11 }, { 60, 13 }, { 42, 13 }, { 34, 13 }, { 34, 14 }, { 32, 14 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 10, 6 }, { 74, 9 }, { 22, 11 }, { 56, 13 }, { 36, 13 }, { 36, 14 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 12, 8 }, { 24, 11 }, { 40, 13 }, { 38, 14 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 76, 9 }, { 54, 13 }, { 40, 14 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 66, 9 }, { 44, 14 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 20, 11 }, { 42, 14 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 58, 13 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48, 13 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 38, 13 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 32, 13 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 52, 14 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 50, 14 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48, 14 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 46, 14 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 47, 14 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 49, 14 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 51, 14 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 53, 14 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 33, 13 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 39, 13 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 49, 13 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 59, 13 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 21, 11 }, { 43, 14 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 67, 9 }, { 45, 14 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 77, 9 }, { 55, 13 }, { 41, 14 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 13, 8 }, { 25, 11 }, { 41, 13 }, { 39, 14 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 11, 6 }, { 75, 9 }, { 23, 11 }, { 57, 13 }, { 37, 13 }, { 37, 14 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9, 5 }, { 13, 7 }, { 9, 8 }, { 73, 9 }, { 31, 11 }, { 19, 11 }, { 61, 13 }, { 43, 13 }, { 35, 13 }, { 35, 14 }, { 33, 14 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 7, 3 }, { 7, 4 }, { 11, 5 }, { 15, 6 }, { 13, 6 }, { 15, 7 }, { 11, 7 }, { 9, 7 }, { 15, 8 }, { 11, 8 }, { 79, 9 }, { 71, 9 }, { 69, 9 }, { 65, 9 }, { 29, 11 }, { 27, 11 }, { 17, 11 }, { 63, 13 }, { 53, 13 }, { 51, 13 }, { 47, 13 }, { 45, 13 }, { 63, 14 }, { 61, 14 }, { 59, 14 }, { 57, 14 }, { 55, 14 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, }; h323plus/plugins/video/H.261-vic/vic/p64.cxx0000644000175000017500000007602311341106252017074 0ustar markmark/* * Copyright (c) 1993-1995 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the Network Research * Group at Lawrence Berkeley National Laboratory. * 4. Neither the name of the University nor of the Laboratory may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * This code is derived from the P64 software implementation by the * Stanford PVRG group: * * Copyright (C) 1990, 1991, 1993 Andy C. Hung, all rights reserved. * PUBLIC DOMAIN LICENSE: Stanford University Portable Video Research * Group. If you use this software, you agree to the following: This * program package is purely experimental, and is licensed "as is". * Permission is granted to use, modify, and distribute this program * without charge for any purpose, provided this license/ disclaimer * notice appears in the copies. No warranty or maintenance is given, * either expressed or implied. In no event shall the author(s) be * liable to you or a third party for any special, incidental, * consequential, or other damages, arising out of the use or inability * to use the program for any purpose (or the loss of data), even if we * have been advised of such possibilities. Any public reference or * advertisement of this source code should refer to it as the Portable * Video Research Group (PVRG) code, and not by any author(s) (or * Stanford University) name. */ /************ Change log * * $Log: p64.cxx,v $ * Revision 1.1 2010/02/24 02:19:22 shorne * First commit of h323plus mirror * * Revision 1.8 2007/07/06 12:54:44 dsandras * Added guard against possibly NULL pointer (Ekiga report 367981). * * Revision 1.7 2006/12/19 03:11:55 dereksmithies * Add excellent fixes from Ben Weekes to suppress valgrind error messages. * This will help memory management - many thanks. * * Revision 1.6 2006/11/12 03:34:07 rjongbloed * Fixed compilation on DevStudio 2003 * * Revision 1.5 2006/11/01 20:02:33 dsandras * Fixed MINGW32 compilation. * * Revision 1.4 2006/08/12 10:59:14 rjongbloed * Added Linux build for H.261 plug-in. * * Revision 1.3 2006/08/01 13:02:40 rjongbloed * Merged changes from OpenH323 on removing need to winsock (ntohl function reference) * * Revision 1.2 2006/07/31 09:09:22 csoutheren * Checkin of validated codec used during development * * Revision 1.1.2.1 2006/04/06 01:17:17 csoutheren * Initial version of H.261 video codec plugin for OPAL * * Revision 2.7 2006/01/12 17:56:37 dsandras * Added initialization as in Mimas branch of openh323. * * Revision 2.6 2005/11/25 00:14:29 csoutheren * Applied patch #1303543 from Hannes Friederich * Added guard to weird conditions in H261 codec * * Revision 2.5 2005/10/12 21:20:25 dsandras * Added check for buffLen to prevent potential crash thanks to Hannes Friederich. * * Revision 2.4 2005/09/15 18:00:38 dsandras * Make sure qv_ is initialized when being used. * * Revision 2.3 2005/08/31 13:16:02 rjongbloed * Ported video fast update from OpenH323 * * Revision 2.2 2005/08/15 01:47:27 csoutheren * Fixed compile problem on 64 bit * * Revision 2.1 2003/03/15 23:43:00 robertj * Update to OpenH323 v1.11.7 * * Revision 1.16 2006/07/22 13:15:31 rjongbloed * Eliminate need for linking winsock just for ntohl() function. * * Revision 1.15 2005/12/04 22:33:35 csoutheren * Removed warning * * Revision 1.14 2005/11/25 00:10:23 csoutheren * Applied patch #1303543 from Hannes Friederich * Added guard to weird conditions in H261 codec * * Revision 1.13 2005/02/25 01:21:12 dominance * fixed building on amd64 with gcc-4.0 according to * http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=287864 * * Thanks fly to Andreas Jochens . * * Revision 1.12 2003/03/14 07:25:55 robertj * Removed $header keyword so is not different on alternate repositories * * Revision 1.11 2002/10/10 05:40:29 robertj * VxWorks port, thanks Martijn Roest * * Revision 1.10 2002/04/26 04:57:41 dereks * Add Walter Whitlocks fixes, based on Victor Ivashim's suggestions to * improve the quality with Netmeeting. Thanks guys!!!! * * Revision 1.9 2001/05/10 05:25:44 robertj * Removed need for VIC code to use ptlib. * * Revision 1.8 2001/05/08 14:53:29 yurik * Fixed misshap with removing non Wince def! * * Revision 1.7 2001/05/08 05:26:24 yurik * No ifdef _WIN32_WCE anymore - 3+ version of SDK allows it * * Revision 1.6 2001/01/30 06:39:44 yurik * Modification submitted by Dave Cassel, dcassel@cyberfone.com. * * Revision 1.5 2000/12/19 22:22:34 dereks * Remove connection to grabber-OS.cxx files. grabber-OS.cxx files no longer used. * Video data is now read from a video channel, using the pwlib classes. * * Revision 1.4 2000/08/25 03:18:50 dereks * Add change log facility (Thanks Robert for the info on implementation) * * * ********/ #include #include #include #ifndef _MSC_VER #include #endif #include "config.h" #ifndef _MSC_VER #include #endif #include "p64.h" #include "p64-huff.h" #include "dct.h" #include "bsd-endian.h" #define SPLICE(v, p, n) (v) |= (p) << SHIFT(n) void P64Decoder::err(const char* msg ...) const { #ifdef DEVELOPMENT_VERSION va_list ap; va_start(ap, msg); vfprintf(stderr, msg, ap); fprintf(stderr, " @g%d m%d %d/%d of %d/%d: %04x %04x %04x %04x|%04x\n", gob_, mba_, (int)((u_char*)bs_ - (u_char*)ps_), nbb_, (int)((u_char*)es_ - (u_char*)ps_), pebit_, bs_[-4], bs_[-3], bs_[-2], bs_[-1], bs_[0]); #endif } P64Decoder::P64Decoder() : fs_(0), front_(0), back_(0), qt_(0), ngob_(0), maxgob_(0), ndblk_(0), gobquant_(0), mt_(0), gob_(0), mba_(0), mvdh_(0), mvdv_(0), marks_(0), mark_(0), bad_psc_(0), bad_bits_(0), bad_GOBno_(0), bad_fmt_(0) { fmt_ = IT_CIF;/*XXX*/ inithuff(); initquant(); } P64Decoder::~P64Decoder() { delete [] fs_; } void P64Decoder::init() { if (fmt_ == IT_CIF) { ngob_ = 12; width_ = 352; height_ = 288; } else { ngob_ = 3; width_ = 176; height_ = 144; } size_ = width_ * height_; memset(mb_state_, MBST_OLD, sizeof(mb_state_)); for (u_int gob = 0; gob < 12; ++gob) { u_short* p = &base_[gob << 6]; for (int mba = 0; mba < MBPERGOB; ++mba) { u_int x = 2 * (mba % 11); u_int y; if (fmt_ == IT_CIF) { y = 2 * (3 * (gob >> 1) + mba / 11); if (gob & 1) x += 22; } else y = 2 * (3 * gob + mba / 11); p[mba] = (x << 8) | y; } } minx_ = width_; miny_ = height_; maxx_ = 0; maxy_ = 0; allocate(); // invalidate the just-changed-block table (marks_ buffer) // to avoid buffer overruns marks_ = 0; } #if BYTE_ORDER == LITTLE_ENDIAN #define HUFFRQ(bs, bb) \ { \ register int t = *bs++; \ bb <<= 16; \ bb |= (t & 0xff) << 8; \ bb |= t >> 8; \ } #else #define HUFFRQ(bs, bb) \ { \ bb <<= 16; \ bb |= *bs++; \ } #endif #define MASK(s) ((1 << (s)) - 1) #define HUFF_DECODE(bs, ht, nbb, bb, result) { \ register int s__, v__; \ \ if (nbb < 16) { \ HUFFRQ(bs, bb); \ nbb += 16; \ } \ s__ = ht.maxlen; \ v__ = (bb >> (nbb - s__)) & MASK(s__); \ s__ = (ht.prefix)[v__]; \ nbb -= (s__ & 0x1f); \ result = s__ >> 5; \ } #define GET_BITS(bs, n, nbb, bb, result) \ { \ nbb -= n; \ if (nbb < 0) { \ HUFFRQ(bs, bb); \ nbb += 16; \ } \ (result) = ((bb >> nbb) & MASK(n)); \ } #define SKIP_BITS(bs, n, nbb, bb) \ { \ nbb -= n; \ if (nbb < 0) { \ HUFFRQ(bs, bb); \ nbb += 16; \ } \ } /* * Set up the huffman tables. */ void P64Decoder::inithuff() { ht_mtype_.prefix = htd_mtype; ht_mtype_.maxlen = htd_mtype_width; ht_mba_.prefix = htd_mba; ht_mba_.maxlen = htd_mba_width; ht_mvd_.prefix = htd_dvm; ht_mvd_.maxlen = htd_dvm_width; ht_cbp_.prefix = htd_cbp; ht_cbp_.maxlen = htd_cbp_width; ht_tcoeff_.prefix = htd_tcoeff; ht_tcoeff_.maxlen = htd_tcoeff_width; } int P64Decoder::quantize(int v, int q) { if (v > 0) return (((v << 1) + 1) * q) - (~q & 1); else return (((v << 1) - 1) * q) + (~q & 1); } /* * Build quantization lookup table. * One for each possible MQUANT paramenter. */ void P64Decoder::initquant() { for (int mq = 0; mq < 32; ++mq) { short* qt = &quant_[mq << 8]; for (int v = 0; v < 256; ++v) { int s = (v << 24) >> 24; qt[v] = quantize(s, mq); } } } /* * Decode the next block of transform coefficients * from the input stream. * Return number of non-zero ac coefficients. */ #ifdef INT_64 int P64Decoder::parse_block(short* blk, INT_64* mask) #else int P64Decoder::parse_block(short* blk, u_int* mask) #endif { #ifdef INT_64 INT_64 m0 = 0; #else u_int m1 = 0, m0 = 0; #endif /* * Cache bit buffer in registers. */ register int nbb = nbb_; register int bb = bb_; register short* qt = qt_; int k; if ((mt_ & MT_CBP) == 0) { int v; GET_BITS(bs_, 8, nbb, bb, v); if (v == 255) v = 128; if (mt_ & MT_INTRA) v <<= 3; else v = qt[v]; blk[0] = v; k = 1; m0 |= 1; } else if ((bb >> (nbb - 1)) & 1) { /* * In CBP blocks, the first block present must be * non-empty (otherwise it's mask bit wouldn't * be set), so the first code cannot be an EOB. * CCITT optimizes this case by using a huffman * table equivalent to ht_tcoeff_ but without EOB, * in which 1 is coded as "1" instead of "11". * We grab two bits, the first bit is the code * and the second is the sign. */ int v; GET_BITS(bs_, 2, nbb, bb, v); /*XXX quantize?*/ if (qt) blk[0] = qt[(v & 1) ? 0xff : 1]; else blk[0] = 0; k = 1; m0 |= 1; } else { k = 0; #ifndef INT_64 blk[0] = 0;/*XXX need this because the way we set bits below*/ #endif } int nc = 0; for (;;) { int r, v; HUFF_DECODE(bs_, ht_tcoeff_, nbb, bb, r); if (r <= 0) { /* SYM_EOB, SYM_ILLEGAL, or SYM_ESCAPE */ if (r == SYM_ESCAPE) { GET_BITS(bs_, 14, nbb, bb, r); v = r & 0xff; r >>= 8; } else { if (r == SYM_ILLEGAL) { bb_ = bb; nbb_ = nbb; err("illegal symbol in block"); } /* EOB */ break; } } else { v = (r << 22) >> 27; r = r & 0x1f; } k += r; if (k >= 64) { bb_ = bb; nbb_ = nbb; err("bad run length %d (r %d, v %d)", k, r, v); break; } r = COLZAG[k++]; blk[r] = (qt?qt[v & 0xff]:0); ++nc; #ifdef INT_64 m0 |= (INT_64)1 << r; #else if (r < 32) m0 |= 1 << r; else m1 |= 1 << (r - 32); #endif } /* * Done reading input. Update bit buffer. */ bb_ = bb; nbb_ = nbb; *mask = m0; #ifndef INT_64 mask[1] = m1; #endif return (nc); } /* * Mix in a motion-compensated, filtered block. Note that * the input block may be misaligned so we cannot try fancy, * word-at-a-time accesses without being careful. The output * block is, of course, aligned. * * The 2-D loop filter is separable into 1-D FIR (0.25 0.5 0.25) * horizontal and vertical passes. At the block edge, the filter * taps are (0 1 0). Full arithmetic precision must be maintained, * until the output stage, where values are rounded (up). * * The code below tries to be efficient by caching the input * rows in registers, and running the filter on 3x3 chunks. * Multiple columns can be computed in parallel by using * two 16-bit adds in a 32-bit register, or four 16-bit adds * in a 64-bit register. */ void P64Decoder::filter(u_char* in, u_char* out, u_int stride) { /* Corner pixel has filter coef 1 */ u_int s = in[0]; u_int o = 0; SPLICE(o, s, 24); u_int r00 = s << 24 | in[1] << 16 | in[2] << 8 | in[3]; u_int r01 = in[4] << 24 | in[5] << 16 | in[6] << 8 | in[7]; in += stride; /* * First row. */ s += (r00 >> 15) & 0x1fe; s += (r00 >> 8) & 0xff; /* round */ s += 2; s >>= 2; SPLICE(o, s, 16); s = (r00 >> 16) & 0xff; s += (r00 >> 7) & 0x1fe; s += r00 & 0xff; /* round */ s += 2; s >>= 2; SPLICE(o, s, 8); s = (r00 >> 8) & 0xff; s += (r00 & 0xff) << 1; s += r01 >> 24; /* round */ s += 2; s >>= 2; SPLICE(o, s, 0); *(u_int*)out = o; s = r00 & 0xff; s += (r01 >> 23) & 0x1fe; s += (r01 >> 16) & 0xff; /* round */ s += 2; s >>= 2; o = 0; SPLICE(o, s, 24); s = r01 >> 24; s += (r01 >> 15) & 0x1fe; s += (r01 >> 8) & 0xff; /* round */ s += 2; s >>= 2; SPLICE(o, s, 16); s = (r01 >> 16) & 0xff; s += (r01 >> 7) & 0x1fe; s += r01 & 0xff; /* round */ s += 2; s >>= 2; SPLICE(o, s, 8); /* corner has filter coef 1 */ s = r01 & 0xff; SPLICE(o, s, 0); *(u_int*)(out + 4) = o; out += stride; /* load next rows into cache */ u_int r10 = in[0] << 24 | in[1] << 16 | in[2] << 8 | in[3]; u_int r11 = in[4] << 24 | in[5] << 16 | in[6] << 8 | in[7]; in += stride; u_int r20 = 0, r21 = 0; u_int mask = 0xff00ff; for (int k = 6; --k >= 0; ) { /* load next row */ r20 = in[0] << 24 | in[1] << 16 | in[2] << 8 | in[3]; r21 = in[4] << 24 | in[5] << 16 | in[6] << 8 | in[7]; in += stride; /* columns 0,2 */ u_int v = (r00 >> 8) & mask; v += ((r10 >> 8) & mask) << 1; v += (r20 >> 8) & mask; /* first pixel */ s = v >> 16; /* round */ s += 2; s >>= 2; o = 0; SPLICE(o, s, 24); /* columns 1,3 */ u_int w = r00 & mask; w += (r10 & mask) << 1; w += r20 & mask; /* row */ s = v >> 16; s += v & 0xffff; s += w >> (16-1); /* round */ s += 8; s >>= 4; SPLICE(o, s, 16); s = w >> 16; s += w & 0xffff; s += (v & 0xffff) << 1; /* round */ s += 8; s >>= 4; SPLICE(o, s, 8); /* start next row */ s = v & 0xffff; s += (w & 0xffff) << 1; /* but first do columns 4,6 */ v = (r01 >> 8) & mask; v += ((r11 >> 8) & mask) << 1; v += (r21 >> 8) & mask; /* finish row */ s += v >> 16; /* round */ s += 8; s >>= 4; SPLICE(o, s, 0); *(u_int*)out = o; /* start next row */ s = w & 0xffff; s += (v >> 16) << 1; /* but first do columns 5,7 */ w = r01 & mask; w += (r11 & mask) << 1; w += r21 & mask; /* finish row */ s += w >> 16; /* round */ s += 8; s >>= 4; o = 0; SPLICE(o, s, 24); s = v >> 16; s += v & 0xffff; s += w >> (16-1); /* round */ s += 8; s >>= 4; SPLICE(o, s, 16); s = w >> 16; s += w & 0xffff; s += (v & 0xffff) << 1; /* round */ s += 8; s >>= 4; SPLICE(o, s, 8); s = w & 0xffff; /* round */ s += 2; s >>= 2; SPLICE(o, s, 0); *(u_int*)(out + 4) = o; out += stride; /* roll lines up cache */ r00 = r10; r01 = r11; r10 = r20; r11 = r21; } /* * last row */ s = r20 >> 24; o = 0; SPLICE(o, s, 24); s += (r20 >> 15) & 0x1fe; s += (r20 >> 8) & 0xff; /* round */ s += 2; s >>= 2; SPLICE(o, s, 16); s = (r20 >> 16) & 0xff; s += (r20 >> 7) & 0x1fe; s += r20 & 0xff; /* round */ s += 2; s >>= 2; SPLICE(o, s, 8); s = (r20 >> 8) & 0xff; s += (r20 & 0xff) << 1; s += r21 >> 24; /* round */ s += 2; s >>= 2; SPLICE(o, s, 0); *(u_int*)out = o; s = r20 & 0xff; s += (r21 >> 23) & 0x1fe; s += (r21 >> 16) & 0xff; /* round */ s += 2; s >>= 2; o = 0; SPLICE(o, s, 24); s = r21 >> 24; s += (r21 >> 15) & 0x1fe; s += (r21 >> 8) & 0xff; /* round */ s += 2; s >>= 2; SPLICE(o, s, 16); s = (r21 >> 16) & 0xff; s += (r21 >> 7) & 0x1fe; s += r21 & 0xff; /* round */ s += 2; s >>= 2; SPLICE(o, s, 8); /* corner has filter coef 1 */ s = r21 & 0xff; SPLICE(o, s, 0); *(u_int*)(out + 4) = o; } void P64Decoder::mvblka(u_char* in, u_char* out, u_int stride) { #ifdef INT_64 *(INT_64*)out = *(INT_64*)in; out += stride; in += stride; *(INT_64*)out = *(INT_64*)in; out += stride; in += stride; *(INT_64*)out = *(INT_64*)in; out += stride; in += stride; *(INT_64*)out = *(INT_64*)in; out += stride; in += stride; *(INT_64*)out = *(INT_64*)in; out += stride; in += stride; *(INT_64*)out = *(INT_64*)in; out += stride; in += stride; *(INT_64*)out = *(INT_64*)in; out += stride; in += stride; *(INT_64*)out = *(INT_64*)in; #else for (int k = 8; --k >= 0; ) { *(u_int*)out = *(u_int*)in; *(u_int*)(out + 4) = *(u_int*)(in + 4); in += stride; out += stride; } #endif } void P64Decoder::mvblk(u_char* in, u_char* out, u_int stride) { #ifdef INT_64 if (((u_long)in & 7) == 0) { mvblka(in, out, stride); return; } #else if (((u_long)in & 3) == 0) { mvblka(in, out, stride); return; } #endif for (int k = 8; --k >= 0;) { u_int* o = (u_int*)out; #if BYTE_ORDER == LITTLE_ENDIAN o[0] = in[3] << 24 | in[2] << 16 | in[1] << 8 | in[0]; o[1] = in[7] << 24 | in[6] << 16 | in[5] << 8 | in[4]; #else o[0] = in[0] << 24 | in[1] << 16 | in[2] << 8 | in[3]; o[1] = in[4] << 24 | in[5] << 16 | in[6] << 8 | in[7]; #endif in += stride; out += stride; } } /* * Parse a picture header. We assume that the * start code has already been snarfed. */ int P64Decoder::parse_picture_hdr() { /* throw away the temporal reference */ SKIP_BITS(bs_, 5, nbb_, bb_); int pt; GET_BITS(bs_, 6, nbb_, bb_, pt); int fmt = (pt >> 2) & 1; if (fmt_ != fmt) { /* change formats */ fmt_ = fmt; init(); } int v; GET_BITS(bs_, 1, nbb_, bb_, v); while (v != 0) { GET_BITS(bs_, 9, nbb_, bb_, v); /* * XXX from pvrg code: 0x8c in PSPARE means ntsc. * this is a hack. we don't support it. */ int pspare = v >> 1; if (pspare == 0x8c && (pt & 0x04) != 0) { static int first = 1; if (first) { err("pvrg ntsc not supported"); first = 0; } } v &= 1; } return (0); } inline int P64Decoder::parse_sc() { int v; GET_BITS(bs_, 16, nbb_, bb_, v); if (v != 0x0001) { err("bad start code %04x", v); ++bad_psc_; return (-1); } return (0); } /* * Parse a GOB header, which consists of the GOB quantiation * factor (GQUANT) and spare bytes that we ignore. */ int P64Decoder::parse_gob_hdr(int ebit) { mba_ = -1; mvdh_ = 0; mvdv_ = 0; /* * Get the next GOB number (or 0 for a picture header). * The invariant at the top of this loop is that the * bit stream is positioned immediately past the last * start code. */ int gob; for (;;) { GET_BITS(bs_, 4, nbb_, bb_, gob); if (gob != 0) break; /* * should happen only on first iteration * (if at all). pictures always start on * packet boundaries per section 5 of the * Internet Draft. */ if (parse_picture_hdr() < 0) { ++bad_fmt_; return (-1); } /* * Check to see that the next 16 bits * are a start code and throw them away. * But first check that we have the bits. */ int nbit = ((es_ - bs_) << 4) + nbb_ - ebit; if (nbit < 20) return (0); if (parse_sc() < 0) return (-1); } gob -= 1; if (fmt_ == IT_QCIF) /* * Number QCIF GOBs 0,1,2 instead of 0,2,4. */ gob >>= 1; if (gob >= ngob_) { err("gob number too big (%d>%d)", gob, ngob_); return (-1); } int mq; GET_BITS(bs_, 5, nbb_, bb_, mq); gobquant_ = mq; qt_ = &quant_[mq << 8]; int v; GET_BITS(bs_, 1, nbb_, bb_, v); while (v != 0) { GET_BITS(bs_, 9, nbb_, bb_, v); v &= 1; } gob_ = gob; if (gob > maxgob_) maxgob_ = gob; return (gob); } /* * Parse a macroblock header. If there is no mb header because * we hit the next start code, return -1, otherwise 0. */ int P64Decoder::parse_mb_hdr(u_int& cbp) { /* * Read the macroblock address (MBA) */ int v; HUFF_DECODE(bs_, ht_mba_, nbb_, bb_, v); if (v <= 0) { /* * (probably) hit a start code; either the * next GOB or the next picture header. * If we got MBA stuffing (0) we need to return * so the outer loop can check if we're at the * end of the buffer (lots of codecs put stuffing * at the end of a picture to byte align the psc). */ return (v); } /* * MBA is differentially encoded. */ mba_ += v; if (mba_ >= MBPERGOB) { err("mba too big %d", mba_); return (SYM_ILLEGAL); } u_int omt = mt_; HUFF_DECODE(bs_, ht_mtype_, nbb_, bb_, mt_); if (mt_ & MT_MQUANT) { int mq; GET_BITS(bs_, 5, nbb_, bb_, mq); qt_ = &quant_[mq << 8]; } if (mt_ & MT_MVD) { /* * Read motion vector. */ int dh; int dv; HUFF_DECODE(bs_, ht_mvd_, nbb_, bb_, dh); HUFF_DECODE(bs_, ht_mvd_, nbb_, bb_, dv); /* * Section 4.2.3.4 * The vector is differentially coded unless any of: * - the current mba delta isn't 1 * - the current mba is 1, 12, or 23 (mba mod 11 = 1) * - the last block didn't have motion vectors. * * This arithmetic is twos-complement restricted * to 5 bits. */ if ((omt & MT_MVD) != 0 && v == 1 && mba_ != 0 && mba_ != 11 && mba_ != 22) { dh += mvdh_; dv += mvdv_; } mvdh_ = (dh << 27) >> 27; mvdv_ = (dv << 27) >> 27; } /* * Coded block pattern. */ if (mt_ & MT_CBP) { HUFF_DECODE(bs_, ht_cbp_, nbb_, bb_, cbp); if (cbp > 63) { err("cbp invalid %x", cbp); return (SYM_ILLEGAL); } } else cbp = 0x3f; return (1); } /* * Handle the next block in the current macroblock. * If tc is non-zero, then coefficients are present * in the input stream and they are parsed. Otherwise, * coefficients are not present, but we take action * according to the type macroblock that we have. */ void P64Decoder::decode_block(u_int tc, u_int x, u_int y, u_int stride, u_char* front, u_char* back, int sf) { short blk[64]; #ifdef INT_64 INT_64 mask; #define MASK_VAL mask #define MASK_REF &mask #else u_int mask[2]; #define MASK_VAL mask[0], mask[1] #define MASK_REF mask #endif int nc=0; if (tc != 0) nc = parse_block(blk, MASK_REF); int off = y * stride + x; u_char* out = front + off; if (mt_ & MT_INTRA) { if (tc != 0) { if (nc == 0) dcfill((blk[0] + 4) >> 3, out, stride); #ifdef notdef else if (nc == 1) { #ifdef INT_64 u_int dc = (mask & 1) ? (blk[0] + 4) >> 3 : 0; for (int k = 1; k < 64; ++k) { if (mask & ((INT_64)1 << k)) { bv_rdct1(dc, blk, k, out, stride); return; } } #else u_int m0 = mask[0]; u_int m1 = mask[1]; u_int dc = (m0 & 1) ? (blk[0] + 4) >> 3 : 0; for (int k = 1; k < 64; ++k) { m0 >>= 1; m0 |= m1 << 31; m1 >>= 1; if (m0 & 1) { bv_rdct1(dc, blk, k, out, stride); return; } } #endif #endif else rdct(blk, MASK_VAL, out, stride, (u_char*)0); } else { u_char* in = back + off; mvblka(in, out, stride); } return; } if ((mt_ & MT_MVD) == 0) { u_char* in = back + off; if (tc != 0) { if (nc == 0) { dcsum((blk[0] + 4) >> 3, in, out, stride); } else rdct(blk, MASK_VAL, out, stride, in); } else mvblka(in, out, stride); return; } int sx = x + (mvdh_ / sf); int sy = y + (mvdv_ / sf); u_char* in = (u_char*)((intptr_t)back + sy * stride + sx); if (mt_ & MT_FILTER) { filter(in, out, stride); if (tc != 0) { if (nc == 0) dcsum2((blk[0] + 4) >> 3, out, out, stride); else rdct(blk, MASK_VAL, out, stride, out); } } else { if (tc != 0) { if (nc == 0) dcsum2((blk[0] + 4) >> 3, in, out, stride); else rdct(blk, MASK_VAL, out, stride, in); } else mvblk(in, out, stride); } } /* * Decompress the next macroblock. Return 0 if the macroblock * was present (with no errors). Return SYM_STARTCODE (-1), * if there was no macroblock but instead the start of the * next GOB or picture (in which case the start code has * been consumed). Return SYM_ILLEGAL (-2) if there was an error. */ int P64Decoder::decode_mb() { u_int cbp; register int v; if ((v = parse_mb_hdr(cbp)) <= 0) return (v); /* * Lookup the base coordinate for this MBA. * Convert from a block to a pixel coord. */ register u_int x, y; x = coord_[mba_]; y = (x & 0xff) << 3; x >>= 8; x <<= 3; /* Update bounding box */ if (x < minx_) minx_ = x; if (x > maxx_) maxx_ = x; if (y < miny_) miny_ = y; if (y > maxy_) maxy_ = y; /* * Decode the six blocks in the MB (4Y:1U:1V). * (This code assumes MT_TCOEFF is 1.) */ register u_int tc = mt_ & MT_TCOEFF; register u_int s = width_; decode_block(tc & (cbp >> 5), x, y, s, front_, back_, 1); decode_block(tc & (cbp >> 4), x + 8, y, s, front_, back_, 1); decode_block(tc & (cbp >> 3), x, y + 8, s, front_, back_, 1); decode_block(tc & (cbp >> 2), x + 8, y + 8, s, front_, back_, 1); s >>= 1; int off = size_; decode_block(tc & (cbp >> 1), x >> 1, y >> 1, s, front_ + off, back_ + off, 2); off += size_ >> 2; decode_block(tc & (cbp >> 0), x >> 1, y >> 1, s, front_ + off, back_ + off, 2); mbst_[mba_] = MBST_NEW; /* * If a marking table was attached, take note. * This allows us to dither only the blocks that have changed, * rather than the entire image on each frame. */ if (marks_) { /* convert to 8x8 block offset */ off = (x >> 3) + (y >> 3) * (width_ >> 3); int m = mark_; marks_[off] = m; marks_[off + 1] = m; off += width_ >> 3; marks_[off] = m; marks_[off + 1] = m; } return (0); } /* * Decode H.261 stream. Decoding can begin on either * a GOB or macroblock header. All the macroblocks of * a given frame can be decoded in any order, but chunks * cannot be reordered across frame boundaries. Since data * can be decoded in any order, this entry point can't tell * when a frame is fully decoded (actually, we could count * macroblocks but if there is loss, we would not know when * to sync). Instead, the callee should sync the decoder * by calling the sync() method after the entire frame * has been decoded (modulo loss). * * This routine should not be called with more than * one frame present since there is no callback mechanism * for renderering frames (i.e., don't call this routine * with a buffer that has a picture header that's not * at the front). */ bool P64Decoder::decode(const unsigned char *hdrPtr, int buffLen, bool lostPreviousPacket) { const u_char *bp; int cc, sbit, ebit, gob; h261hdr_t h261hdr; // preventing accidential crashes if (buffLen == 0) return false; // get 32 bit H261 header SWAP32(&h261hdr, hdrPtr); // decode values we need from the RTP H261 header sbit = (h261hdr >> 29) & 0x07; ebit = (h261hdr >> 26) & 0x07; gob = (h261hdr >> 20) & 0xf; // get remaining values from H261 header only when previous packet was lost if (lostPreviousPacket) { //PTRACE(3, "H261\tLost or out of order packet, using values from H261 header"); mba_ = (h261hdr >> 15) & 0x1f; int quant = (h261hdr >> 10) & 0x1f; qt_ = &quant_[quant << 8]; mvdh_ = (h261hdr >> 5) & 0x1f; // sometimes NetMeeting sends bad values for these fields mvdv_ = h261hdr & 0x1f; // use them only when the previous packet was lost } // adjust for length of H.261 header bp = hdrPtr + sizeof(h261hdr_t); ps_ = (u_short*)bp; // this does not seem to be used anywhere cc = buffLen - sizeof(h261hdr_t); /* * If cc is odd, ignore 8 extra bits in last short. */ int odd = cc & 1; ebit += odd << 3; pebit_ = ebit; es_ = (u_short*)(bp + ((cc - 1) &~ 1)); /* * If input buffer not aligned, prime bit-buffer * with 8 bits; otherwise, prime it with a 16. */ if ((long)bp & 1) { bs_ = (u_short*)(bp + 1); bb_ = *bp; nbb_ = 8 - sbit; } else { bs_ = (u_short*)bp; HUFFRQ(bs_, bb_); nbb_ = 16 - sbit; } if (gob > 12) { //count(STAT_BAD_HEADER); return false; // bad header value, what to do? } /*XXX don't rely on this*/ if (gob != 0) { gob -= 1; if (fmt_ == IT_QCIF) gob >>= 1; } while (bs_ < es_ || (bs_ == es_ && nbb_ > ebit)) { mbst_ = &mb_state_[gob << 6]; coord_ = &base_[gob << 6]; ndblk_++; int v = decode_mb(); if (v == 0) continue; if (v != SYM_STARTCODE) { err("expected GOB startcode"); ++bad_bits_; return (false); } gob = parse_gob_hdr(ebit); if (gob < 0) { /*XXX*/ ++bad_bits_; return (false); } } return (true); } FullP64Decoder::FullP64Decoder() { init(); } void FullP64Decoder::allocate() { delete [] fs_; int n = size_ + (size_ >> 1); fs_ = new u_char[2 * n]; /* initialize to gray */ memset(fs_, 0x80, 2 * n); front_ = fs_; back_ = front_ + n; } /* * Swap the `front' and `back' frame buffers. While decoding a * frame, the front buffer is the image being constructed while * the back buffer is the reference image. Rather than copy * the whole image each time, we just swap pointers here. * We defer this copying until we find out that we're skipping * over a macroblock, or even a whole gob. In this case, we * go ahead and copy it, but take note in the mb_skip_ array. * Next time we need to copy it, we skip it if the skip array * says it's okay (e.g., there is no reason to copy a given block * back and forth between buffers if it never changes). When we * modify a macroblock, we clear out it's entry in mb_skip_. */ void FullP64Decoder::swap() { u_char* p = front_; front_ = back_; back_ = p; } /* * Copy a macroblock from the saved frame (back buffer) * to the current frame (front buffer). coord_ determines * which GOB we're in. */ void FullP64Decoder::mbcopy(u_int mba) { u_int x, y; x = coord_[mba]; y = (x & 0xff) << 3; x >>= 8; x <<= 3; u_int stride = width_; u_int off = y * stride + x; u_char* in = back_ + off; u_char* out = front_ + off; mvblka(in, out, stride); mvblka(in + 8, out + 8, stride); in += stride << 3; out += stride << 3; mvblka(in, out, stride); mvblka(in + 8, out + 8, stride); x >>= 1; y >>= 1; stride >>= 1; off = y * stride + x; off += size_; in = back_ + off; out = front_ + off; mvblka(in, out, stride); off += size_ >> 2; in = back_ + off; out = front_ + off; mvblka(in, out, stride); } void P64Decoder::sync() { bbx_ = minx_; bby_ = miny_; bbw_ = maxx_ - minx_ + 16; bbh_ = maxy_ - miny_ + 16; minx_ = width_; miny_ = height_; maxx_ = 0; maxy_ = 0; maxgob_ = 0; } void FullP64Decoder::sync() { for (int k = 0; k < ngob_; ++k) { coord_ = &base_[k << 6]; u_char* mbst = &mb_state_[k << 6]; for (int mba = 0; mba < MBPERGOB; ++mba) { int s = mbst[mba]; if (s == MBST_FRESH) { mbcopy(mba); mbst[mba] = MBST_OLD; } else if (s == MBST_NEW) mbst[mba] = MBST_FRESH; } } swap(); P64Decoder::sync(); } IntraP64Decoder::IntraP64Decoder() { init(); } void IntraP64Decoder::allocate() { delete [] fs_; int n = size_ + (size_ >> 1); fs_ = new u_char[n]; /* initialize to gray */ memset(fs_, 0x80, n); front_ = back_ = fs_; } h323plus/plugins/video/H.261-vic/vic/transmitter.cxx0000644000175000017500000001176511341106252021041 0ustar markmark/*transmitter.cc (c) 1999-2000 Derek J Smithies (dereks@ibm.net) * Indranet Technologies ltd (lara@indranet.co.nz) * * This file is derived from vic, http://www-nrg.ee.lbl.gov/vic/ * Their copyright notice is below. */ /*- * Copyright (c) 1993-1994 The Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the Network Research * Group at Lawrence Berkeley Laboratory. * 4. Neither the name of the University nor of the Laboratory may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /************ Change log * * $Log: transmitter.cxx,v $ * Revision 1.1 2010/02/24 02:19:22 shorne * First commit of h323plus mirror * * Revision 1.2 2006/07/31 09:09:22 csoutheren * Checkin of validated codec used during development * * Revision 1.1.2.1 2006/04/06 01:17:17 csoutheren * Initial version of H.261 video codec plugin for OPAL * * Revision 2.1 2003/03/15 23:43:00 robertj * Update to OpenH323 v1.11.7 * * Revision 1.8 2003/03/14 07:25:55 robertj * Removed $header keyword so is not different on alternate repositories * * Revision 1.7 2002/01/04 02:48:05 dereks * Fix previous commit so it compiles OK. * * Revision 1.6 2002/01/03 23:05:50 dereks * Add methods to count number of H261 packets waiting to be sent. * * Revision 1.5 2001/05/10 05:25:44 robertj * Removed need for VIC code to use ptlib. * * Revision 1.4 2000/12/19 22:22:34 dereks * Remove connection to grabber-OS.cxx files. grabber-OS.cxx files no longer used. * Video data is now read from a video channel, using the pwlib classes. * * Revision 1.3 2000/08/25 03:18:50 dereks * Add change log facility (Thanks Robert for the info on implementation) * * * ********/ #include "transmitter.h" Transmitter::Transmitter() : head_(0), tail_(0) { freehdrs_ = NULL; freebufs_ = NULL; seqno_ = 1; } Transmitter::~Transmitter() { PurgeBufferQueue(freehdrs_); PurgeBufferQueue(head_); } void Transmitter::PurgeBufferQueue(pktbuf *queue) { pktbuf *pb = queue; while (pb) { pktbuf *tpb=pb->next; if(pb->buf) delete(pb->buf); delete pb; pb=tpb; } } Transmitter::pktbuf* Transmitter::alloch() { pktbuf* pb = freehdrs_; if (pb == 0) pb = new pktbuf; else freehdrs_ = pb->next; pb->buf = 0; return (pb); } Transmitter::pktbuf* Transmitter::alloc() { pktbuf* pb = alloch(); buffer* p = freebufs_; if (p == 0) p = new buffer; else freebufs_ = p->next; pb->buf = p; return (pb); } void Transmitter::ReleaseOnePacket(pktbuf* pb) { head_=head_->next; pb->next = freehdrs_; freehdrs_ = pb; buffer* p = pb->buf; if (p != 0) { p->next = freebufs_; freebufs_ = p; } } //Add packet to pending queue. void Transmitter::StoreOnePacket(pktbuf* pb) { if (head_ != 0) { tail_->next = pb; tail_ = pb; } else tail_ = head_ = pb; pb->next = 0; } int Transmitter::PacketsOutStanding() { return(head_!=NULL); } int Transmitter::GetCountPacketsOutStanding() { pktbuf *pkt_ptr = head_; int count = 0; while(pkt_ptr != NULL) { pkt_ptr = pkt_ptr->next; count++; } return count; } void Transmitter::GetNextPacket(u_char ** hptr,u_char ** bptr, u_int & hlen, u_int & blen) { if( head_ != 0 ) { *hptr=(u_char*)head_->hdr; //there is a packet to read. *bptr=(u_char*)head_->buf->data; hlen=head_->lenHdr; blen=head_->lenBuf; ReleaseOnePacket(head_); } else { hlen = 0; //There is no packet to read. blen = 0; } } h323plus/plugins/video/H.261-vic/vic/transmitter.h0000644000175000017500000001133211341106252020454 0ustar markmark/*transmitter.h (c) 1999-2000 Derek J Smithies (dereks@ibm.net) * Indranet Technologies ltd (lara@indranet.co.nz) * * This file is derived from vic, http://www-nrg.ee.lbl.gov/vic/ * Their copyright notice is below. */ /* * Copyright (c) 1993-1995 The Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the Network Research * Group at Lawrence Berkeley National Laboratory. * 4. Neither the name of the University nor of the Laboratory may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ /************ Change log * * $Log: transmitter.h,v $ * Revision 1.1 2010/02/24 02:19:22 shorne * First commit of h323plus mirror * * Revision 1.2 2006/07/31 09:09:22 csoutheren * Checkin of validated codec used during development * * Revision 1.1.2.1 2006/04/06 01:17:17 csoutheren * Initial version of H.261 video codec plugin for OPAL * * Revision 2.1 2003/03/15 23:43:00 robertj * Update to OpenH323 v1.11.7 * * Revision 1.9 2003/03/14 07:25:55 robertj * Removed $header keyword so is not different on alternate repositories * * Revision 1.8 2002/04/05 00:53:19 dereks * Modify video frame encoding so that frame is encoded on an incremental basis. * Thanks to Walter Whitlock - good work. * * Revision 1.7 2002/01/04 02:48:05 dereks * Fix previous commit so it compiles OK. * * Revision 1.6 2002/01/03 23:05:50 dereks * Add methods to count number of H261 packets waiting to be sent. * * Revision 1.5 2001/05/10 05:25:44 robertj * Removed need for VIC code to use ptlib. * * Revision 1.4 2000/12/19 22:22:34 dereks * Remove connection to grabber-OS.cxx files. grabber-OS.cxx files no longer used. * Video data is now read from a video channel, using the pwlib classes. * * Revision 1.3 2000/08/25 03:18:50 dereks * Add change log facility (Thanks Robert for the info on implementation) * * * ********/ #ifndef vic_transmitter_h #define vic_transmitter_h #include "config.h" #define MAXHDR 24 #include "dct.h" /* * The base object for performing the outbound path of * the application level protocol. */ class Transmitter { public: Transmitter(); virtual ~Transmitter(); struct buffer { struct buffer* next; /* * make buffer twice as big as necessary so we can * run off end while doing in-place encoding. */ u_char data[2 * RTP_MTU]; }; struct pktbuf { struct pktbuf* next; int lenHdr,lenBuf; u_char hdr[MAXHDR]; buffer* buf; }; virtual int mtu() { return 1024; } //Maximum transfer unit. void StoreOnePacket(pktbuf*); //Returns a pointer to buffer in the next packet, + length of buffer; //Frees the packet from the queue. void GetNextPacket(u_char ** hptr,u_char ** bptr, u_int & hlen, u_int & blen); //Returns true if there are packets still in the queue. int PacketsOutStanding(); int GetCountPacketsOutStanding(); pktbuf* alloch(); pktbuf* alloc(); protected: void PurgeBufferQueue(pktbuf *queue); /* * Buffer allocation hooks. */ void ReleaseOnePacket(pktbuf*); /* packet transmission queue */ pktbuf* head_; pktbuf* tail_; u_int seqno_; private: pktbuf* freehdrs_; buffer* freebufs_; }; #endif h323plus/plugins/video/H.261-vic/vic/bv.c0000644000175000017500000031312211341106252016504 0ustar markmark/************ Change log * * $Log: bv.c,v $ * Revision 1.1 2010/02/24 02:19:22 shorne * First commit of h323plus mirror * * Revision 1.2 2006/07/31 09:09:21 csoutheren * Checkin of validated codec used during development * * Revision 1.1.2.1 2006/04/06 01:17:17 csoutheren * Initial version of H.261 video codec plugin for OPAL * * Revision 2.1 2003/03/15 23:42:59 robertj * Update to OpenH323 v1.11.7 * * Revision 1.5 2001/05/08 05:26:33 yurik * No ifdef _WIN32_WCE anymore - 3+ version of SDK allows it * * Revision 1.4 2001/01/29 19:42:38 dereks * Add change log facility (Thanks Robert) * * * * ********/ unsigned dct_basis[64][64/sizeof(unsigned)] = { {875836468,875836468, 875836468,875836468, 875836468,875836468, 875836468,875836468, 875836468,875836468, 875836468,875836468, 875836468,875836468, 875836468,875836468, }, {0,0, 16843009,16843009, 33686018,33686018, 50529027,50529027, 67372036,67372036, 84215045,84215045, 101058054,101058054, 117901063,117901063, }, {66051,67438087, 66051,67438087, 66051,67438087, 66051,67438087, 66051,67438087, 66051,67438087, 66051,67438087, 66051,67438087, }, {134810123,185207048, 134810123,185207048, 134810123,185207048, 134810123,185207048, 134810123,185207048, 134810123,185207048, 134810123,185207048, 134810123,185207048, }, {202182159,269554195, 219419926,387455250, 236263963,471668753, 253106974,521934608, 269949983,505091599, 286792988,454694158, 303634455,370480141, 319951120,252579084, }, {134744072,134744072, 151587081,151587081, 168430090,168430090, 185273099,185273099, 185273099,185273099, 168430090,168430090, 151587081,151587081, 134744072,134744072, }, {16843009,16843009, 538976288,538976288, 117901063,117901063, 555819297,555819297, 572662306,572662306, 0,0, 589505315,589505315, 101058054,101058054, }, {606612528,858729255, 623455537,841886246, 640298546,825043237, 657141555,808200228, 657141555,808200228, 640298546,825043237, 623455537,841886246, 606612528,858729255, }, {606414375,656811300, 673786411,724183336, 741158447,791555372, 808530483,858927408, 858927408,808530483, 791555372,741158447, 724183336,673786411, 656811300,606414375, }, {18876193,570434310, 18876193,570434310, 18876193,570434310, 18876193,570434310, 18876193,570434310, 18876193,570434310, 18876193,570434310, 18876193,570434310, }, {875902260,875902260, 875902260,875902260, 875902260,875902260, 875902260,875902260, 875902260,875902260, 875902260,875902260, 875902260,875902260, 875902260,875902260, }, {219157265,235671314, 337056280,353179161, 354160950,923671320, 371134492,453975575, 387845915,470818582, 404426295,907090965, 420875541,403838740, 302976014,286461965, }, {943274555,993671480, 960249146,977091641, 977091641,960249146, 993671480,943274555, 993671480,943274555, 977091641,960249146, 960249146,977091641, 943274555,993671480, }, {219419926,387455250, 269949983,505091599, 319951120,252579084, 286799388,456594702, 236271387,473307153, 202182159,269554195, 253106974,521934608, 303634455,370480141, }, {875836468,875836468, 892679477,892679477, 892679477,892679477, 875836468,875836468, 875836468,875836468, 892679477,892679477, 892679477,892679477, 875836468,875836468, }, {572662306,572662306, 117901063,117901063, 589505315,589505315, 16843009,16843009, 101058054,101058054, 538976288,538976288, 0,0, 555819297,555819297, }, {66051,67438087, 117835012,50462976, 117835012,50462976, 66051,67438087, 66051,67438087, 117835012,50462976, 117835012,50462976, 66051,67438087, }, {673786411,724183336, 858927408,808530483, 656811300,606414375, 792740140,742473775, 742473775,792740140, 606414375,656811300, 808530483,858927408, 724183336,673786411, }, {674446895,742338603, 691152448,1092956458, 707863873,1076245033, 724582188,792605480, 724582188,792605480, 707863873,1076245033, 691152448,1092956458, 674446895,742338603, }, {460544,460544, 17171969,17171969, 33883394,33883394, 50594819,50594819, 67306244,67306244, 84017669,84017669, 100729094,100729094, 117440519,117440519, }, {570893057,102760481, 570893057,102760481, 570893057,102760481, 570893057,102760481, 570893057,102760481, 570893057,102760481, 570893057,102760481, 570893057,102760481, }, {151717898,168299273, 151717898,168299273, 151717898,168299273, 151717898,168299273, 151717898,168299273, 151717898,168299273, 151717898,168299273, 151717898,168299273, }, {236130061,303041553, 353506836,420941080, 923867925,404491830, 454041110,387911452, 470753047,371068955, 906894360,354095415, 403511065,336990741, 286003218,219091726, }, {134941448,134941448, 151652873,151652873, 168364298,168364298, 185075723,185075723, 185075723,185075723, 168364298,168364298, 151652873,151652873, 134941448,134941448, }, {337056280,353179161, 387845915,470818582, 302976014,286461965, 404426295,907090965, 354160950,923671320, 219157265,235671314, 371134492,453975575, 420875541,403838740, }, {134810123,185207048, 185207048,134810123, 185207048,134810123, 134810123,185207048, 134810123,185207048, 185207048,134810123, 185207048,134810123, 134810123,185207048, }, {236271387,473307153, 319951120,252579084, 253106974,521934608, 219419926,387455250, 303634455,370480141, 269949983,505091599, 202182159,269554195, 286799388,456594702, }, {151587081,151587081, 185273099,185273099, 134744072,134744072, 168430090,168430090, 168430090,168430090, 134744072,134744072, 185273099,185273099, 151587081,151587081, }, {50529027,50529027, 84215045,84215045, 16843009,16843009, 117901063,117901063, 0,0, 101058054,101058054, 33686018,33686018, 67372036,67372036, }, {623455537,841886246, 657141555,808200228, 606612528,858729255, 640298546,825043237, 640298546,825043237, 606612528,858729255, 657141555,808200228, 623455537,841886246, }, {742473775,792740140, 656811300,606414375, 808530483,858927408, 673786411,724183336, 724183336,673786411, 858927408,808530483, 606414375,656811300, 792740140,742473775, }, {18876193,570434310, 102957090,554115073, 102957090,554115073, 18876193,570434310, 18876193,570434310, 102957090,554115073, 102957090,554115073, 18876193,570434310, }, {17171969,17171969, 539173664,539173664, 117440519,117440519, 555885089,555885089, 572596514,572596514, 460544,460544, 589307939,589307939, 100729094,100729094, }, {742273064,724778799, 1093021993,707929408, 1076179498,691086913, 792671019,674250284, 792671019,674250284, 1076179498,691086913, 1093021993,707929408, 742273064,724778799, }, {623322150,639903525, 690694186,707275561, 758066222,774647597, 825438258,842019633, 842019633,825438258, 774647597,758066222, 707275561,690694186, 639903525,623322150, }, {50659591,393732, 50659591,393732, 50659591,393732, 50659591,393732, 50659591,393732, 50659591,393732, 50659591,393732, 50659591,393732, }, {252775699,202509840, 370676754,219747607, 454890769,236460572, 505157136,253172511, 521869071,269884446, 471472142,286596379, 387258637,303306774, 269357580,319623439, }, {960182330,976763705, 1010448701,1027160636, 1027160636,1010448701, 976763705,960182330, 976763705,960182330, 1027160636,1010448701, 1010448701,1027160636, 960182330,976763705, }, {353506836,420941080, 470753047,371068955, 286003218,219091726, 906894360,354095415, 923867925,404491830, 236130061,303041553, 454041110,387911452, 403511065,336990741, }, {875902260,875902260, 892613685,892613685, 892613685,892613685, 875902260,875902260, 875902260,875902260, 892613685,892613685, 892613685,892613685, 875902260,875902260, }, {354160950,923671320, 302976014,286461965, 371134492,453975575, 337056280,353179161, 420875541,403838740, 387845915,470818582, 219157265,235671314, 404426295,907090965, }, {960249146,977091641, 993671480,943274555, 943274555,993671480, 977091641,960249146, 977091641,960249146, 943274555,993671480, 993671480,943274555, 960249146,977091641, }, {253106974,521934608, 286792988,454694158, 219419926,387455250, 319951120,252579084, 202182159,269554195, 303634455,370480141, 236263963,471668753, 269949983,505091599, }, {808530483,858927408, 791555372,741158447, 673786411,724183336, 656811300,606414375, 606414375,656811300, 724183336,673786411, 741158447,791555372, 858927408,808530483, }, {691152448,1092956458, 724582188,792605480, 674446895,742338603, 707863873,1076245033, 707863873,1076245033, 674446895,742338603, 724582188,792605480, 691152448,1092956458, }, {572596514,572596514, 117440519,117440519, 589307939,589307939, 17171969,17171969, 100729094,100729094, 539173664,539173664, 460544,460544, 555885089,555885089, }, {570893057,102760481, 553656326,19072802, 553656326,19072802, 570893057,102760481, 570893057,102760481, 553656326,19072802, 553656326,19072802, 570893057,102760481, }, {690694186,707275561, 842019633,825438258, 639903525,623322150, 1076637505,1093610560, 1093610560,1076637505, 623322150,639903525, 825438258,842019633, 707275561,690694186, }, {808396839,606809139, 825108774,623521074, 841820709,640233009, 858532644,656944944, 858532644,656944944, 841820709,640233009, 825108774,623521074, 808396839,606809139, }, {370676754,219747607, 521869071,269884446, 269357580,319623439, 473372686,286602779, 456529169,236467996, 252775699,202509840, 505157136,253172511, 387258637,303306774, }, {151717898,168299273, 168299273,151717898, 168299273,151717898, 151717898,168299273, 151717898,168299273, 168299273,151717898, 168299273,151717898, 151717898,168299273, }, {923867925,404491830, 286003218,219091726, 454041110,387911452, 353506836,420941080, 403511065,336990741, 470753047,371068955, 236130061,303041553, 906894360,354095415, }, {151652873,151652873, 185075723,185075723, 134941448,134941448, 168364298,168364298, 168364298,168364298, 134941448,134941448, 185075723,185075723, 151652873,151652873, }, {371134492,453975575, 404426295,907090965, 337056280,353179161, 302976014,286461965, 219157265,235671314, 420875541,403838740, 354160950,923671320, 387845915,470818582, }, {50594819,50594819, 84017669,84017669, 17171969,17171969, 117440519,117440519, 460544,460544, 100729094,100729094, 33883394,33883394, 67306244,67306244, }, {1093021993,707929408, 792671019,674250284, 742273064,724778799, 1076179498,691086913, 1076179498,691086913, 742273064,724778799, 792671019,674250284, 1093021993,707929408, }, {1093610560,1076637505, 639903525,623322150, 825438258,842019633, 690694186,707275561, 707275561,690694186, 842019633,825438258, 623322150,639903525, 1076637505,1093610560, }, {50659591,393732, 67241472,117507331, 67241472,117507331, 50659591,393732, 50659591,393732, 67241472,117507331, 67241472,117507331, 50659591,393732, }, {456529169,236467996, 269357580,319623439, 505157136,253172511, 370676754,219747607, 387258637,303306774, 521869071,269884446, 252775699,202509840, 473372686,286602779, }, {1010448701,1027160636, 976763705,960182330, 960182330,976763705, 1027160636,1010448701, 1027160636,1010448701, 960182330,976763705, 976763705,960182330, 1010448701,1027160636, }, {454041110,387911452, 906894360,354095415, 353506836,420941080, 286003218,219091726, 236130061,303041553, 403511065,336990741, 923867925,404491830, 470753047,371068955, }, {825438258,842019633, 774647597,758066222, 690694186,707275561, 639903525,623322150, 623322150,639903525, 707275561,690694186, 758066222,774647597, 842019633,825438258, }, {825108774,623521074, 858532644,656944944, 808396839,606809139, 841820709,640233009, 841820709,640233009, 808396839,606809139, 858532644,656944944, 825108774,623521074, }, {505157136,253172511, 471472142,286596379, 370676754,219747607, 269357580,319623439, 252775699,202509840, 387258637,303306774, 454890769,236460572, 521869071,269884446, }, }; unsigned char multab[] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,255,255,255,255,0,0,255,255,0,0,0,0, 255,255,255,255,0,0,0,255,255,255,0,0,255,255,0,255, 255,255,0,0,0,0,255,255,0,0,255,255,0,0,255,255, 0,0,255,255,0,255,255,0,0,0,255,255,0,255,255,0, 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,1,0,0,255,255,254,254,1,0,255,254,1,1,1,0, 255,254,254,254,1,0,0,255,255,254,0,0,255,255,0,255, 255,255,0,0,1,0,255,254,1,0,255,254,1,0,255,254, 0,0,255,255,1,255,255,0,1,0,255,254,0,255,254,1, 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,1,1,0,255,254,254,253,1,0,255,254,2,2,1,0, 255,254,253,253,2,1,0,255,254,253,0,0,255,255,0,255, 255,254,1,0,2,1,254,253,2,0,255,253,1,0,255,254, 0,0,255,255,1,254,255,0,2,1,254,253,0,255,253,2, 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,1,0,255,254,253,253,2,1,254,253,3,3,2,0, 255,253,252,252,2,1,0,255,254,253,1,0,255,254,0,255, 255,254,1,0,3,1,254,252,3,1,254,252,2,0,255,253, 0,0,255,255,2,254,254,1,3,1,254,252,0,255,252,3, 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,2,1,0,255,254,253,252,3,1,254,252,4,4,2,0, 255,253,251,251,3,2,0,255,253,252,1,0,255,254,0,255, 255,254,1,0,4,1,254,251,3,1,254,252,2,1,254,253, 0,0,255,255,2,253,254,1,4,1,254,251,0,255,251,4, 254,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 4,3,2,0,255,253,252,251,3,1,254,252,5,4,3,1, 254,252,251,250,4,2,0,255,253,251,1,0,255,254,0,255, 255,253,2,0,5,2,253,250,4,1,254,251,3,1,254,252, 1,0,255,254,3,253,254,1,5,2,253,250,0,255,250,5, 254,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 4,4,2,0,255,253,251,251,4,1,254,251,6,5,3,1, 254,252,250,249,4,3,1,254,252,251,2,0,255,253,0,255, 255,253,2,0,6,2,253,249,5,2,253,250,3,1,254,252, 1,0,255,254,3,252,253,2,5,2,253,250,1,254,249,6, 254,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 5,4,3,1,254,252,251,250,5,2,253,250,7,6,4,1, 254,251,249,248,5,3,1,254,252,250,2,0,255,253,0,255, 254,252,3,1,7,3,252,248,6,2,253,249,4,1,254,251, 1,0,255,254,4,252,253,2,6,2,253,249,1,254,248,7, 254,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 6,5,3,1,254,252,250,249,5,2,253,250,8,7,4,1, 254,251,248,247,6,4,1,254,251,249,2,0,255,253,0,255, 254,252,3,1,8,3,252,247,6,2,253,249,4,1,254,251, 1,0,255,254,4,251,253,2,7,3,252,248,1,254,247,8, 254,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 6,5,3,1,254,252,250,249,6,2,253,249,9,8,5,1, 254,250,247,246,6,4,1,254,251,249,3,1,254,252,0,255, 254,252,3,1,9,3,252,246,7,3,252,248,5,2,253,250, 1,0,255,254,5,251,252,3,8,3,252,247,1,254,246,9, 253,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 7,6,4,1,254,251,249,248,7,2,253,248,10,8,5,2, 253,250,247,245,7,5,1,254,250,248,3,1,254,252,0,255, 254,251,4,1,9,4,251,246,8,3,252,247,5,2,253,250, 1,0,255,254,5,250,252,3,9,3,252,246,1,254,246,9, 253,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 8,7,4,1,254,251,248,247,7,3,252,248,11,9,6,2, 253,249,246,244,8,5,1,254,250,247,3,1,254,252,0,255, 254,251,4,1,10,4,251,245,9,3,252,246,6,2,253,249, 2,0,255,253,6,250,252,3,10,4,251,245,1,254,245,10, 253,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 9,7,5,1,254,250,248,246,8,3,252,247,12,10,7,2, 253,248,245,243,8,6,2,253,249,247,4,1,254,251,0,255, 254,250,5,1,11,4,251,244,9,4,251,246,6,2,253,249, 2,0,255,253,6,249,251,4,11,4,251,244,1,254,244,11, 253,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 9,8,5,1,254,250,247,246,9,3,252,246,13,11,7,2, 253,248,244,242,9,6,2,253,249,246,4,1,254,251,0,255, 254,250,5,1,12,5,250,243,10,4,251,245,7,2,253,248, 2,1,254,253,7,249,251,4,11,4,251,244,2,253,243,12, 253,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 10,8,5,2,253,250,247,245,9,4,251,246,14,12,8,2, 253,247,243,241,10,6,2,253,249,245,4,1,254,251,0,255, 253,250,5,2,13,5,250,242,11,4,251,244,7,3,252,248, 2,1,254,253,7,248,251,4,12,5,250,243,2,253,242,13, 252,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 11,9,6,2,253,249,246,244,10,4,251,245,15,13,8,3, 252,247,242,240,11,7,2,253,248,244,4,1,254,251,0,255, 253,249,6,2,14,6,249,241,12,5,250,243,8,3,252,247, 2,1,254,253,8,248,251,4,13,5,250,242,2,253,241,14, 252,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 11,9,6,2,253,249,246,244,11,4,251,244,16,13,9,3, 252,246,242,239,11,7,2,253,248,244,5,1,254,250,0,255, 253,249,6,2,15,6,249,240,13,5,250,242,8,3,252,247, 3,1,254,252,8,247,250,5,14,6,249,241,2,253,240,15, 252,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 12,10,7,2,253,248,245,243,11,4,251,244,17,14,9,3, 252,246,241,238,12,8,2,253,247,243,5,1,254,250,0,255, 253,248,7,2,16,6,249,239,13,5,250,242,9,3,252,246, 3,1,254,252,9,247,250,5,15,6,249,240,2,253,239,16, 252,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 13,11,7,2,253,248,244,242,12,5,250,243,18,15,10,3, 252,245,240,237,13,8,3,252,247,242,5,2,253,250,0,255, 253,248,7,2,17,7,248,238,14,6,249,241,9,4,251,246, 3,1,254,252,9,246,250,5,16,6,249,239,2,253,238,17, 251,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 13,11,7,2,253,248,244,242,13,5,250,242,19,16,10,3, 252,245,239,236,13,9,3,252,246,242,6,2,253,249,0,255, 253,248,7,2,18,7,248,237,15,6,249,240,10,4,251,245, 3,1,254,252,10,246,249,6,17,7,248,238,2,253,237,18, 251,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 14,12,8,2,253,247,243,241,13,5,250,242,20,17,11,4, 251,244,238,235,14,9,3,252,246,241,6,2,253,249,0,255, 253,247,8,2,19,7,248,236,16,6,249,239,10,4,251,245, 3,1,254,252,10,245,249,6,17,7,248,238,3,252,236,19, 251,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 15,12,8,3,252,247,243,240,14,5,250,241,21,17,11,4, 251,244,238,234,15,10,3,252,245,240,6,2,253,249,0,255, 252,247,8,3,19,8,247,236,16,7,248,239,11,4,251,244, 3,1,254,252,11,245,249,6,18,7,248,237,3,252,236,19, 251,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 15,13,9,3,252,246,242,240,15,6,249,240,22,18,12,4, 251,243,237,233,15,10,3,252,245,240,7,2,253,248,0,255, 252,246,9,3,20,8,247,235,17,7,248,238,11,4,251,244, 4,1,254,251,11,244,248,7,19,8,247,236,3,252,235,20, 251,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 16,14,9,3,252,246,241,239,15,6,249,240,23,19,13,4, 251,242,236,232,16,11,3,252,244,239,7,2,253,248,0,255, 252,246,9,3,21,9,246,234,18,7,248,237,12,5,250,243, 4,1,254,251,12,244,248,7,20,8,247,235,3,252,234,21, 250,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 17,14,9,3,252,246,241,238,16,6,249,239,24,20,13,4, 251,242,235,231,17,11,4,251,244,238,7,2,253,248,0,255, 252,246,9,3,22,9,246,233,19,7,248,236,12,5,250,243, 4,1,254,251,12,243,248,7,21,8,247,234,3,252,233,22, 250,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 18,15,10,3,252,245,240,237,16,7,248,239,25,21,14,4, 251,241,234,230,17,12,4,251,243,238,8,2,253,247,0,255, 252,245,10,3,23,9,246,232,19,8,247,236,13,5,250,242, 4,1,254,251,13,243,247,8,22,9,246,233,3,252,232,23, 250,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 18,15,10,3,252,245,240,237,17,7,248,238,25,22,14,5, 250,241,233,230,18,12,4,251,243,237,8,2,253,247,1,254, 252,245,10,3,24,10,245,231,20,8,247,235,13,5,250,242, 4,2,253,251,13,242,247,8,23,9,246,232,3,252,231,24, 250,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 19,16,11,3,252,244,239,236,18,7,248,237,26,22,15,5, 250,240,233,229,19,12,4,251,243,236,8,3,252,247,1,254, 252,245,10,3,25,10,245,230,21,8,247,234,14,5,250,241, 5,2,253,250,14,242,247,8,23,9,246,232,4,251,230,25, 250,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 20,17,11,3,252,244,238,235,18,7,248,237,27,23,15,5, 250,240,232,228,20,13,4,251,242,235,8,3,252,247,1,254, 251,244,11,4,26,10,245,229,22,9,246,233,14,6,249,241, 5,2,253,250,14,241,247,8,24,10,245,231,4,251,229,26, 249,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 20,17,11,4,251,244,238,235,19,8,247,236,28,24,16,5, 250,239,231,227,20,13,4,251,242,235,9,3,252,246,1,254, 251,244,11,4,27,11,244,228,23,9,246,232,15,6,249,240, 5,2,253,250,15,241,246,9,25,10,245,230,4,251,228,27, 249,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 21,18,12,4,251,243,237,234,20,8,247,235,29,25,16,5, 250,239,230,226,21,14,5,250,241,234,9,3,252,246,1,254, 251,243,12,4,28,11,244,227,23,9,246,232,15,6,249,240, 5,2,253,250,15,240,246,9,26,10,245,229,4,251,227,28, 249,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 22,18,12,4,251,243,237,233,20,8,247,235,30,26,17,6, 249,238,229,225,22,14,5,250,241,233,9,3,252,246,1,254, 251,243,12,4,29,12,243,227,24,10,245,231,16,6,249,239, 5,2,253,250,16,240,246,9,27,11,244,228,4,251,227,28, 249,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 22,19,12,4,251,243,236,233,21,8,247,234,31,26,17,6, 249,238,229,224,22,15,5,250,240,233,10,3,252,245,1,254, 251,243,12,4,29,12,243,226,25,10,245,230,16,7,248,239, 5,2,253,250,16,239,245,10,28,11,244,227,4,251,226,29, 248,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 23,19,13,4,251,242,236,232,22,9,246,233,32,27,18,6, 249,237,228,223,23,15,5,250,240,232,10,3,252,245,1,254, 251,242,13,4,30,12,243,225,26,10,245,229,17,7,248,238, 6,2,253,249,17,239,245,10,29,12,243,226,4,251,225,30, 248,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 24,20,13,4,251,242,235,231,22,9,246,233,33,28,19,6, 249,236,227,222,24,16,5,250,239,231,10,3,252,245,1,254, 251,242,13,4,31,13,242,224,26,11,244,229,17,7,248,238, 6,2,253,249,17,238,245,10,29,12,243,226,5,250,224,31, 248,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 24,21,14,4,251,241,234,231,23,9,246,232,34,29,19,6, 249,236,226,221,24,16,5,250,239,231,11,3,252,244,1,254, 251,241,14,4,32,13,242,223,27,11,244,228,18,7,248,237, 6,2,253,249,18,238,244,11,30,12,243,225,5,250,223,32, 248,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 25,21,14,5,250,241,234,230,24,10,245,231,35,30,20,7, 248,235,225,220,25,17,5,250,238,230,11,4,251,244,1,254, 250,241,14,5,33,13,242,222,28,11,244,227,18,7,248,237, 6,2,253,249,18,237,244,11,31,13,242,224,5,250,222,33, 248,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 26,22,14,5,250,241,233,229,24,10,245,231,36,30,20,7, 248,235,225,219,26,17,6,249,238,229,11,4,251,244,1,254, 250,241,14,5,34,14,241,221,29,12,243,226,19,8,247,236, 6,2,253,249,19,237,244,11,32,13,242,223,5,250,221,34, 247,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 27,22,15,5,250,240,233,228,25,10,245,230,37,31,21,7, 248,234,224,218,26,18,6,249,237,229,12,4,251,243,1,254, 250,240,15,5,35,14,241,220,29,12,243,226,20,8,247,235, 7,2,253,248,19,236,243,12,33,13,242,222,5,250,220,35, 247,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 27,23,15,5,250,240,232,228,26,10,245,229,38,32,21,7, 248,234,223,217,27,18,6,249,237,228,12,4,251,243,1,254, 250,240,15,5,36,15,240,219,30,12,243,225,20,8,247,235, 7,2,253,248,20,236,243,12,34,14,241,221,5,250,219,36, 247,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 28,24,16,5,250,239,231,227,26,11,244,229,39,33,22,7, 248,233,222,216,28,18,6,249,237,227,12,4,251,243,1,254, 250,239,16,5,37,15,240,218,31,13,242,224,21,8,247,234, 7,3,252,248,20,235,243,12,34,14,241,221,6,249,218,37, 247,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 29,24,16,5,250,239,231,226,27,11,244,228,40,34,22,8, 247,233,221,215,29,19,6,249,236,226,12,4,251,243,1,254, 250,239,16,5,38,15,240,217,32,13,242,223,21,8,247,234, 7,3,252,248,21,235,243,12,35,14,241,220,6,249,217,38, 247,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 29,25,16,5,250,239,230,226,28,11,244,227,41,35,23,8, 247,232,220,214,29,19,6,249,236,226,13,4,251,242,1,254, 250,239,16,5,38,16,239,217,33,13,242,222,22,9,246,233, 7,3,252,248,21,234,242,13,36,15,240,219,6,249,217,38, 246,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 30,25,17,6,249,238,230,225,28,11,244,227,42,35,23,8, 247,232,220,213,30,20,7,248,235,225,13,4,251,242,1,254, 249,238,17,6,39,16,239,216,33,14,241,222,22,9,246,233, 7,3,252,248,22,234,242,13,37,15,240,218,6,249,216,39, 246,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 31,26,17,6,249,238,229,224,29,12,243,226,43,36,24,8, 247,231,219,212,31,20,7,248,235,224,13,4,251,242,1,254, 249,238,17,6,40,16,239,215,34,14,241,221,23,9,246,232, 8,3,252,247,22,233,242,13,38,15,240,217,6,249,215,40, 246,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 31,27,18,6,249,237,228,224,30,12,243,225,44,37,25,8, 247,230,218,211,31,21,7,248,234,224,14,4,251,241,1,254, 249,237,18,6,41,17,238,214,35,14,241,220,23,9,246,232, 8,3,252,247,23,233,241,14,39,16,239,216,6,249,214,41, 246,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 32,27,18,6,249,237,228,223,30,12,243,225,45,38,25,8, 247,230,217,210,32,21,7,248,234,223,14,5,250,241,1,254, 249,237,18,6,42,17,238,213,36,14,241,219,24,10,245,231, 8,3,252,247,23,232,241,14,40,16,239,215,6,249,213,42, 246,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 33,28,18,6,249,237,227,222,31,12,243,224,46,39,26,9, 246,229,216,209,33,22,7,248,233,222,14,5,250,241,1,254, 249,237,18,6,43,18,237,212,36,15,240,219,24,10,245,231, 8,3,252,247,24,232,241,14,40,16,239,215,7,248,212,43, 245,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 33,28,19,6,249,236,227,222,32,13,242,223,47,39,26,9, 246,229,216,208,33,22,7,248,233,222,15,5,250,240,1,254, 249,236,19,6,44,18,237,211,37,15,240,218,25,10,245,230, 8,3,252,247,24,231,240,15,41,17,238,214,7,248,211,44, 245,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 34,29,19,6,249,236,226,221,32,13,242,223,48,40,27,9, 246,228,215,207,34,23,8,247,232,221,15,5,250,240,1,254, 249,236,19,6,45,18,237,210,38,15,240,217,25,10,245,230, 9,3,252,246,25,231,240,15,42,17,238,213,7,248,210,45, 245,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 35,29,20,7,248,235,226,220,33,13,242,222,49,41,27,9, 246,228,214,206,35,23,8,247,232,220,15,5,250,240,1,254, 248,235,20,7,46,19,236,209,39,16,239,216,26,10,245,229, 9,3,252,246,25,230,240,15,43,18,237,212,7,248,209,46, 245,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 36,30,20,7,248,235,225,219,33,14,241,222,50,42,28,9, 246,227,213,205,35,24,8,247,231,220,16,5,250,239,1,254, 248,235,20,7,47,19,236,208,39,16,239,216,26,11,244,229, 9,3,252,246,26,230,239,16,44,18,237,211,7,248,208,47, 244,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 36,31,20,7,248,235,224,219,34,14,241,221,50,43,28,10, 245,227,212,205,36,24,8,247,231,219,16,5,250,239,2,253, 248,235,20,7,48,19,236,207,40,16,239,215,27,11,244,228, 9,3,252,246,26,229,239,16,45,18,237,210,7,248,207,48, 244,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 37,31,21,7,248,234,224,218,35,14,241,220,51,44,29,10, 245,226,211,204,37,24,8,247,231,218,16,5,250,239,2,253, 248,234,21,7,48,20,235,207,41,17,238,214,27,11,244,228, 9,4,251,246,27,229,239,16,46,19,236,209,7,248,207,48, 244,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 38,32,21,7,248,234,223,217,35,14,241,220,52,44,29,10, 245,226,211,203,38,25,8,247,230,217,16,5,250,239,2,253, 248,234,21,7,49,20,235,206,42,17,238,213,28,11,244,227, 9,4,251,246,27,228,239,16,46,19,236,209,8,247,206,49, 244,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 38,32,22,7,248,233,223,217,36,15,240,219,53,45,30,10, 245,225,210,202,38,25,9,246,230,217,17,6,249,238,2,253, 248,234,21,7,50,21,234,205,43,17,238,212,28,11,244,227, 10,4,251,245,28,228,238,17,47,19,236,208,8,247,205,50, 244,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 39,33,22,7,248,233,222,216,37,15,240,218,54,46,31,10, 245,224,209,201,39,26,9,246,229,216,17,6,249,238,2,253, 248,233,22,7,51,21,234,204,43,18,237,212,29,12,243,226, 10,4,251,245,28,227,238,17,48,20,235,207,8,247,204,51, 243,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 40,34,22,7,248,233,221,215,37,15,240,218,55,47,31,11, 244,224,208,200,40,26,9,246,229,215,17,6,249,238,2,253, 247,233,22,8,52,21,234,203,44,18,237,211,29,12,243,226, 10,4,251,245,29,227,238,17,49,20,235,206,8,247,203,52, 243,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 40,34,23,8,247,232,221,215,38,15,240,217,56,48,32,11, 244,223,207,199,40,27,9,246,228,215,18,6,249,237,2,253, 247,232,23,8,53,22,233,202,45,18,237,210,30,12,243,225, 10,4,251,245,29,226,237,18,50,20,235,205,8,247,202,53, 243,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 41,35,23,8,247,232,220,214,39,16,239,216,57,48,32,11, 244,223,207,198,41,27,9,246,228,214,18,6,249,237,2,253, 247,232,23,8,54,22,233,201,46,19,236,209,30,12,243,225, 10,4,251,245,30,226,237,18,51,21,234,204,8,247,201,54, 243,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 42,35,23,8,247,232,220,213,39,16,239,216,58,49,33,11, 244,222,206,197,42,28,9,246,227,213,18,6,249,237,2,253, 247,232,23,8,55,22,233,200,46,19,236,209,31,12,243,224, 10,4,251,245,30,225,237,18,52,21,234,203,8,247,200,55, 243,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 42,36,24,8,247,231,219,213,40,16,239,215,59,50,33,11, 244,222,205,196,42,28,10,245,227,213,19,6,249,236,2,253, 247,231,24,8,56,23,232,199,47,19,236,208,31,13,242,224, 11,4,251,244,31,225,236,19,52,21,234,203,9,246,199,56, 242,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 43,37,24,8,247,231,218,212,41,17,238,214,60,51,34,12, 243,221,204,195,43,29,10,245,226,212,19,6,249,236,2,253, 247,231,24,8,57,23,232,198,48,20,235,207,32,13,242,223, 11,4,251,244,31,224,236,19,53,22,233,202,9,246,198,57, 242,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 44,37,25,8,247,230,218,211,41,17,238,214,61,52,34,12, 243,221,203,194,44,29,10,245,226,211,19,6,249,236,2,253, 247,230,25,8,58,24,231,198,49,20,235,206,32,13,242,223, 11,4,251,244,32,224,236,19,54,22,233,201,9,246,198,57, 242,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 45,38,25,8,247,230,217,210,42,17,238,213,62,53,35,12, 243,220,202,193,44,30,10,245,225,211,20,7,248,235,2,253, 247,230,25,8,58,24,231,197,49,20,235,206,33,13,242,222, 11,4,251,244,32,223,235,20,55,22,233,200,9,246,197,58, 242,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 45,38,25,9,246,230,217,210,43,17,238,212,63,53,35,12, 243,220,202,192,45,30,10,245,225,210,20,7,248,235,2,253, 246,230,25,9,59,24,231,196,50,21,234,205,33,14,241,222, 11,4,251,244,33,223,235,20,56,23,232,199,9,246,196,59, 241,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 46,39,26,9,246,229,216,209,43,18,237,212,64,54,36,12, 243,219,201,191,46,30,10,245,225,209,20,7,248,235,2,253, 246,229,26,9,60,25,230,195,51,21,234,204,34,14,241,221, 12,5,250,243,33,222,235,20,57,23,232,198,9,246,195,60, 241,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 47,39,26,9,246,229,216,208,44,18,237,211,65,55,37,13, 242,218,200,190,47,31,11,244,224,208,21,7,248,234,2,253, 246,229,26,9,61,25,230,194,52,21,234,203,34,14,241,221, 12,5,250,243,34,222,235,20,58,24,231,197,9,246,194,61, 241,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 47,40,27,9,246,228,215,208,45,18,237,210,66,56,37,13, 242,218,199,189,47,31,11,244,224,208,21,7,248,234,2,253, 246,228,27,9,62,25,230,193,52,21,234,203,35,14,241,220, 12,5,250,243,34,221,234,21,58,24,231,197,10,245,193,62, 241,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 48,41,27,9,246,228,214,207,45,18,237,210,67,57,38,13, 242,217,198,188,48,32,11,244,223,207,21,7,248,234,2,253, 246,228,27,9,63,26,229,192,53,22,233,202,35,14,241,220, 12,5,250,243,35,221,234,21,59,24,231,196,10,245,192,63, 241,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 49,41,27,9,246,228,214,206,46,19,236,209,68,57,38,13, 242,217,198,187,49,32,11,244,223,206,21,7,248,234,2,253, 246,228,27,9,64,26,229,191,54,22,233,201,36,15,240,219, 12,5,250,243,35,220,234,21,60,25,230,195,10,245,191,64, 240,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 49,42,28,9,246,227,213,206,47,19,236,208,69,58,39,13, 242,216,197,186,49,33,11,244,222,206,22,7,248,233,2,253, 246,227,28,9,65,27,228,190,55,22,233,200,36,15,240,219, 12,5,250,243,36,220,233,22,61,25,230,194,10,245,190,65, 240,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 50,42,28,10,245,227,213,205,47,19,236,208,70,59,39,13, 242,216,196,185,50,33,11,244,222,205,22,7,248,233,2,253, 245,227,28,10,66,27,228,189,56,23,232,199,37,15,240,218, 13,5,250,242,36,219,233,22,62,25,230,193,10,245,189,66, 240,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 51,43,29,10,245,226,212,204,48,20,235,207,71,60,40,14, 241,215,195,184,51,34,11,244,221,204,22,8,247,233,2,253, 245,226,29,10,67,27,228,188,56,23,232,199,37,15,240,218, 13,5,250,242,37,219,233,22,63,26,229,192,10,245,188,67, 240,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 52,44,29,10,245,226,211,203,48,20,235,207,72,61,40,14, 241,215,194,183,51,34,12,243,221,204,23,8,247,232,2,253, 245,226,29,10,67,28,227,188,57,23,232,198,38,15,240,217, 13,5,250,242,37,218,232,23,64,26,229,191,10,245,188,67, 240,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 52,44,29,10,245,226,211,203,49,20,235,206,73,61,41,14, 241,214,194,182,52,35,12,243,220,203,23,8,247,232,2,253, 245,226,29,10,68,28,227,187,58,24,231,197,39,16,239,216, 13,5,250,242,38,218,232,23,64,26,229,191,11,244,187,68, 239,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 53,45,30,10,245,225,210,202,50,20,235,205,74,62,41,14, 241,214,193,181,53,35,12,243,220,202,23,8,247,232,2,253, 245,225,30,10,69,28,227,186,59,24,231,196,39,16,239,216, 13,5,250,242,38,217,232,23,65,27,228,190,11,244,186,69, 239,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 54,45,30,10,245,225,210,201,50,21,234,205,75,63,42,14, 241,213,192,180,53,36,12,243,219,202,24,8,247,231,2,253, 245,225,30,10,70,29,226,185,59,24,231,196,40,16,239,215, 14,5,250,241,39,217,231,24,66,27,228,189,11,244,185,70, 239,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 54,46,31,10,245,224,209,201,51,21,234,204,75,64,43,15, 240,212,191,180,54,36,12,243,219,201,24,8,247,231,3,252, 245,224,31,10,71,29,226,184,60,25,230,195,40,16,239,215, 14,5,250,241,39,216,231,24,67,27,228,188,11,244,184,71, 239,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 55,47,31,11,244,224,208,200,52,21,234,203,76,65,43,15, 240,212,190,179,55,36,12,243,219,200,24,8,247,231,3,252, 244,224,31,11,72,30,225,183,61,25,230,194,41,17,238,214, 14,5,250,241,40,216,231,24,68,28,227,187,11,244,183,72, 239,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 56,47,31,11,244,224,208,199,52,21,234,203,77,66,44,15, 240,211,189,178,56,37,13,242,218,199,25,8,247,230,3,252, 244,224,31,11,73,30,225,182,62,25,230,193,41,17,238,214, 14,6,249,241,40,215,231,24,69,28,227,186,11,244,182,73, 238,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 56,48,32,11,244,223,207,199,53,22,233,202,78,66,44,15, 240,211,189,177,56,37,13,242,218,199,25,8,247,230,3,252, 244,223,32,11,74,30,225,181,62,26,229,193,42,17,238,213, 14,6,249,241,41,215,230,25,69,28,227,186,12,243,181,74, 238,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 57,48,32,11,244,223,207,198,54,22,233,201,79,67,45,15, 240,210,188,176,57,38,13,242,217,198,25,8,247,230,3,252, 244,223,32,11,75,31,224,180,63,26,229,192,42,17,238,213, 14,6,249,241,41,214,230,25,70,29,226,185,12,243,180,75, 238,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 58,49,33,11,244,222,206,197,54,22,233,201,80,68,45,16, 239,210,187,175,58,38,13,242,217,197,25,9,246,230,3,252, 244,223,32,11,76,31,224,179,64,26,229,191,43,17,238,212, 15,6,249,240,42,214,230,25,71,29,226,184,12,243,179,76, 238,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 58,49,33,11,244,222,206,197,55,22,233,200,81,69,46,16, 239,209,186,174,58,39,13,242,216,197,26,9,246,229,3,252, 244,222,33,11,77,31,224,178,65,27,228,190,43,18,237,212, 15,6,249,240,42,213,229,26,72,30,225,183,12,243,179,76, 237,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 59,50,33,11,244,222,205,196,56,23,232,199,82,70,46,16, 239,209,185,173,59,39,13,242,216,196,26,9,246,229,3,252, 244,222,33,11,77,32,223,178,66,27,228,189,44,18,237,211, 15,6,249,240,43,213,229,26,73,30,225,182,12,243,178,77, 237,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 60,51,34,11,244,221,204,195,56,23,232,199,83,70,47,16, 239,208,185,172,60,40,14,241,215,195,26,9,246,229,3,252, 243,221,34,12,78,32,223,177,66,27,228,189,44,18,237,211, 15,6,249,240,43,212,229,26,74,30,225,181,12,243,177,78, 237,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 61,51,34,12,243,221,204,194,57,23,232,198,84,71,47,16, 239,208,184,171,60,40,14,241,215,195,27,9,246,228,3,252, 243,221,34,12,79,33,222,176,67,28,227,188,45,18,237,210, 15,6,249,240,44,212,228,27,75,31,224,180,12,243,176,79, 237,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 61,52,34,12,243,221,203,194,58,24,231,197,85,72,48,17, 238,207,183,170,61,41,14,241,214,194,27,9,246,228,3,252, 243,221,34,12,80,33,222,175,68,28,227,187,45,18,237,210, 16,6,249,239,44,211,228,27,75,31,224,180,13,242,175,80, 237,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 62,52,35,12,243,220,203,193,58,24,231,197,86,73,49,17, 238,206,182,169,62,41,14,241,214,193,27,9,246,228,3,252, 243,220,35,12,81,33,222,174,69,28,227,186,46,19,236,209, 16,6,249,239,45,211,228,27,76,31,224,179,13,242,174,81, 236,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 63,53,35,12,243,220,202,192,59,24,231,196,87,74,49,17, 238,206,181,168,62,42,14,241,213,193,28,9,246,227,3,252, 243,220,35,12,82,34,221,173,69,28,227,186,46,19,236,209, 16,6,249,239,45,210,227,28,77,32,223,178,13,242,173,82, 236,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 63,54,36,12,243,219,201,192,60,24,231,195,88,75,50,17, 238,205,180,167,63,42,14,241,213,192,28,9,246,227,3,252, 243,219,36,12,83,34,221,172,70,29,226,185,47,19,236,208, 16,6,249,239,46,210,227,28,78,32,223,177,13,242,172,83, 236,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 64,54,36,12,243,219,201,191,60,25,230,195,89,75,50,17, 238,205,180,166,64,42,15,240,213,191,28,10,245,227,3,252, 243,219,36,12,84,34,221,171,71,29,226,184,47,19,236,208, 16,6,249,239,46,209,227,28,79,32,223,176,13,242,171,84, 236,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 65,55,36,12,243,219,200,190,61,25,230,194,90,76,51,17, 238,204,179,165,64,43,15,240,212,191,29,10,245,226,3,252, 243,219,36,12,85,35,220,170,72,29,226,183,48,20,235,207, 16,7,248,239,47,209,226,29,80,33,222,175,13,242,170,85, 236,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 65,55,37,13,242,218,200,190,62,25,230,193,91,77,51,18, 237,204,178,164,65,43,15,240,212,190,29,10,245,226,3,252, 242,218,37,13,86,35,220,169,72,30,225,183,48,20,235,207, 17,7,248,238,47,208,226,29,81,33,222,174,13,242,169,86, 235,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 66,56,37,13,242,218,199,189,62,25,230,193,92,78,52,18, 237,203,177,163,66,44,15,240,211,189,29,10,245,226,3,252, 242,218,37,13,87,36,219,169,73,30,225,182,49,20,235,206, 17,7,248,238,48,208,226,29,81,33,222,174,14,241,169,86, 235,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 67,57,38,13,242,217,198,188,63,26,229,192,93,79,52,18, 237,203,176,162,67,44,15,240,211,188,29,10,245,226,3,252, 242,217,38,13,87,36,219,168,74,30,225,181,49,20,235,206, 17,7,248,238,48,207,226,29,82,34,221,173,14,241,168,87, 235,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 67,57,38,13,242,217,198,188,64,26,229,191,94,79,53,18, 237,202,176,161,67,45,15,240,210,188,30,10,245,225,3,252, 242,217,38,13,88,36,219,167,75,31,224,180,50,20,235,205, 17,7,248,238,49,207,225,30,83,34,221,172,14,241,167,88, 235,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 68,58,38,13,242,217,197,187,64,26,229,191,95,80,53,18, 237,202,175,160,68,45,16,239,210,187,30,10,245,225,3,252, 242,217,38,13,89,37,218,166,76,31,224,179,50,21,234,205, 17,7,248,238,49,206,225,30,84,34,221,171,14,241,166,89, 234,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 69,58,39,13,242,216,197,186,65,27,228,190,96,81,54,19, 236,201,174,159,69,46,16,239,209,186,30,10,245,225,3,252, 242,216,39,13,90,37,218,165,76,31,224,179,51,21,234,204, 18,7,248,237,50,206,225,30,85,35,220,170,14,241,165,90, 234,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 70,59,39,13,242,216,196,185,65,27,228,190,97,82,55,19, 236,200,173,158,69,46,16,239,209,186,31,10,245,224,3,252, 242,216,39,13,91,37,218,164,77,32,223,178,51,21,234,204, 18,7,248,237,50,205,224,31,86,35,220,169,14,241,164,91, 234,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 70,59,40,14,241,215,196,185,66,27,228,189,98,83,55,19, 236,200,172,157,70,47,16,239,208,185,31,11,244,224,3,252, 241,215,40,14,92,38,217,163,78,32,223,177,52,21,234,203, 18,7,248,237,51,205,224,31,87,36,219,168,14,241,163,92, 234,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 71,60,40,14,241,215,195,184,67,27,228,188,99,83,56,19, 236,199,172,156,71,47,16,239,208,184,31,11,244,224,3,252, 241,215,40,14,93,38,217,162,79,32,223,176,52,21,234,203, 18,7,248,237,51,204,224,31,87,36,219,168,15,240,162,93, 234,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 72,61,40,14,241,215,194,183,67,28,227,188,100,84,56,19, 236,199,171,155,71,48,16,239,207,184,32,11,244,223,3,252, 241,215,40,14,94,39,216,161,79,33,222,176,53,22,233,202, 18,7,248,237,52,204,223,32,88,36,219,167,15,240,161,94, 233,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 72,61,41,14,241,214,194,183,68,28,227,187,101,85,57,20, 235,198,170,154,72,48,17,238,207,183,32,11,244,223,3,252, 241,214,41,14,95,39,216,160,80,33,222,175,53,22,233,202, 18,7,248,237,52,203,223,32,89,37,218,166,15,240,160,95, 233,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 73,62,41,14,241,214,193,182,69,28,227,186,101,86,57,20, 235,198,169,154,73,48,17,238,207,182,32,11,244,223,4,251, 241,214,41,14,96,39,216,159,81,33,222,174,54,22,233,201, 19,7,248,236,53,203,223,32,90,37,218,165,15,240,159,96, 233,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 74,62,42,14,241,213,193,181,69,28,227,186,102,87,58,20, 235,197,168,153,73,49,17,238,206,182,33,11,244,222,4,251, 241,213,42,14,96,40,215,159,82,34,221,173,54,22,233,201, 19,7,248,236,53,202,222,33,91,37,218,164,15,240,159,96, 233,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 74,63,42,14,241,213,192,181,70,29,226,185,103,88,58,20, 235,197,167,152,74,49,17,238,206,181,33,11,244,222,4,251, 241,213,42,14,97,40,215,158,82,34,221,173,55,22,233,200, 19,8,247,236,54,202,222,33,92,38,217,163,15,240,158,97, 233,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 75,64,42,15,240,213,191,180,71,29,226,184,104,88,59,20, 235,196,167,151,75,50,17,238,205,180,33,11,244,222,4,251, 240,213,42,15,98,40,215,157,83,34,221,172,55,23,232,200, 19,8,247,236,54,201,222,33,93,38,217,162,15,240,157,98, 232,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 76,64,43,15,240,212,191,179,71,29,226,184,105,89,59,21, 234,196,166,150,76,50,17,238,205,179,33,11,244,222,4,251, 240,212,43,15,99,41,214,156,84,35,220,171,56,23,232,199, 19,8,247,236,55,201,222,33,93,38,217,162,16,239,156,99, 232,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 76,65,43,15,240,212,190,179,72,30,225,183,106,90,60,21, 234,195,165,149,76,51,17,238,204,179,34,12,243,221,4,251, 240,212,43,15,100,41,214,155,85,35,220,170,56,23,232,199, 19,8,247,236,55,200,221,34,94,39,216,161,16,239,155,100, 232,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 77,65,44,15,240,211,190,178,73,30,225,182,107,91,61,21, 234,194,164,148,77,51,18,237,204,178,34,12,243,221,4,251, 240,212,43,15,101,42,213,154,86,35,220,169,57,23,232,198, 20,8,247,235,56,200,221,34,95,39,216,160,16,239,154,101, 232,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 78,66,44,15,240,211,189,177,73,30,225,182,108,92,61,21, 234,194,163,147,78,52,18,237,203,177,34,12,243,221,4,251, 240,211,44,15,102,42,213,153,86,35,220,169,57,24,231,198, 20,8,247,235,56,199,221,34,96,39,216,159,16,239,153,102, 231,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 79,67,44,15,240,211,188,176,74,30,225,181,109,92,62,21, 234,193,163,146,78,52,18,237,203,177,35,12,243,220,4,251, 240,211,44,15,103,42,213,152,87,36,219,168,58,24,231,197, 20,8,247,235,57,199,220,35,97,40,215,158,16,239,152,103, 231,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 79,67,45,15,240,210,188,176,75,31,224,180,110,93,62,22, 233,193,162,145,79,53,18,237,202,176,35,12,243,220,4,251, 240,210,45,15,104,43,212,151,88,36,219,167,59,24,231,196, 20,8,247,235,57,198,220,35,98,40,215,157,16,239,151,104, 231,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 80,68,45,15,240,210,187,175,75,31,224,180,111,94,63,22, 233,192,161,144,80,53,18,237,202,175,35,12,243,220,4,251, 239,210,45,16,105,43,212,150,89,36,219,166,59,24,231,196, 20,8,247,235,58,198,220,35,99,41,214,156,16,239,150,105, 231,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 81,68,45,16,239,210,187,174,76,31,224,179,112,95,63,22, 233,192,160,143,80,54,18,237,201,175,36,12,243,219,4,251, 239,210,45,16,106,43,212,149,89,37,218,166,60,24,231,195, 21,8,247,234,58,197,219,36,99,41,214,156,17,238,150,105, 231,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 81,69,46,16,239,209,186,174,77,31,224,178,113,96,64,22, 233,191,159,142,81,54,19,236,201,174,36,12,243,219,4,251, 239,209,46,16,106,44,211,149,90,37,218,165,60,25,230,195, 21,8,247,234,59,197,219,36,100,41,214,155,17,238,149,106, 230,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 82,69,46,16,239,209,186,173,77,32,223,178,114,97,64,22, 233,191,158,141,82,54,19,236,201,173,36,12,243,219,4,251, 239,209,46,16,107,44,211,148,91,37,218,164,61,25,230,194, 21,8,247,234,59,196,219,36,101,42,213,154,17,238,148,107, 230,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 83,70,47,16,239,208,185,172,78,32,223,177,115,97,65,22, 233,190,158,140,82,55,19,236,200,173,37,13,242,218,4,251, 239,208,47,16,108,45,210,147,92,38,217,163,61,25,230,194, 21,8,247,234,60,196,218,37,102,42,213,153,17,238,147,108, 230,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 83,71,47,16,239,208,184,172,79,32,223,176,116,98,65,23, 232,190,157,139,83,55,19,236,200,172,37,13,242,218,4,251, 239,208,47,16,109,45,210,146,92,38,217,163,62,25,230,193, 21,9,246,234,60,195,218,37,103,42,213,152,17,238,146,109, 230,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 84,71,47,16,239,208,184,171,79,33,222,176,117,99,66,23, 232,189,156,138,84,56,19,236,199,171,37,13,242,218,4,251, 239,208,47,16,110,45,210,145,93,38,217,162,62,25,230,193, 21,9,246,234,61,195,218,37,104,43,212,151,17,238,145,110, 230,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 85,72,48,16,239,207,183,170,80,33,222,175,118,100,67,23, 232,188,155,137,85,56,19,236,199,170,38,13,242,217,4,251, 239,207,48,16,111,46,209,144,94,39,216,161,63,26,229,192, 22,9,246,233,61,194,218,37,104,43,212,151,18,237,144,111, 229,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 85,72,48,17,238,207,183,170,81,33,222,174,119,101,67,23, 232,188,154,136,85,57,20,235,198,170,38,13,242,217,4,251, 238,207,48,17,112,46,209,143,95,39,216,160,63,26,229,192, 22,9,246,233,62,194,217,38,105,43,212,150,18,237,143,112, 229,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 86,73,49,17,238,206,182,169,81,33,222,174,120,101,68,23, 232,187,154,135,86,57,20,235,198,169,38,13,242,217,4,251, 238,206,49,17,113,46,209,142,96,39,216,159,64,26,229,191, 22,9,246,233,62,193,217,38,106,44,211,149,18,237,142,113, 229,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 87,74,49,17,238,206,181,168,82,34,221,173,121,102,68,24, 231,187,153,134,87,58,20,235,197,168,38,13,242,217,4,251, 238,206,49,17,114,47,208,141,96,40,215,159,64,26,229,191, 22,9,246,233,63,193,217,38,107,44,211,148,18,237,141,114, 229,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 88,74,49,17,238,206,181,167,82,34,221,173,122,103,69,24, 231,186,152,133,87,58,20,235,197,168,39,13,242,216,4,251, 238,206,49,17,115,47,208,140,97,40,215,158,65,27,228,190, 22,9,246,233,63,192,216,39,108,44,211,147,18,237,140,115, 229,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 167,180,205,238,17,50,75,88,172,221,34,83,132,151,186,231, 24,69,104,123,167,196,235,20,59,88,216,242,13,39,251,4, 17,50,205,238,140,207,48,116,157,215,40,98,190,228,27,65, 232,246,9,23,192,64,39,216,146,210,45,109,237,18,115,140, 27,228,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 167,181,206,238,17,49,74,88,173,221,34,82,133,152,186,231, 24,69,103,122,168,197,235,20,58,87,216,242,13,39,251,4, 17,49,206,238,140,208,47,115,158,215,40,97,190,228,27,65, 233,246,9,22,192,63,39,216,147,211,44,108,237,18,115,140, 26,229,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 168,181,206,238,17,49,74,87,173,221,34,82,134,153,187,231, 24,68,102,121,168,197,235,20,58,87,217,242,13,38,251,4, 17,49,206,238,141,208,47,114,159,215,40,96,191,229,26,64, 233,246,9,22,193,63,38,217,148,211,44,107,237,18,114,141, 26,229,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 169,182,206,238,17,49,73,86,174,222,33,81,135,154,187,232, 23,68,101,120,169,198,235,20,57,86,217,242,13,38,251,4, 17,49,206,238,142,209,46,113,159,216,39,96,191,229,26,64, 233,246,9,22,193,62,38,217,149,211,44,106,237,18,113,142, 26,229,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 170,183,207,238,17,48,72,85,174,222,33,81,136,154,188,232, 23,67,101,119,170,198,235,20,57,85,217,242,13,38,251,4, 17,48,207,238,143,209,46,112,160,216,39,95,192,229,26,63, 233,246,9,22,194,62,38,217,150,212,43,105,237,18,112,143, 26,229,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 170,183,207,239,16,48,72,85,175,222,33,80,137,155,188,232, 23,67,100,118,170,199,236,19,56,85,217,242,13,38,251,4, 16,48,207,239,144,209,46,111,161,216,39,94,192,229,26,63, 233,246,9,22,194,61,37,218,151,212,43,104,237,18,111,144, 26,229,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 171,184,208,239,16,47,71,84,176,222,33,79,138,156,189,232, 23,66,99,117,171,199,236,19,56,84,218,242,13,37,251,4, 16,47,208,239,145,210,45,110,162,217,38,93,193,230,25,62, 234,246,9,21,195,61,37,218,151,212,43,104,238,17,110,145, 25,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 172,184,208,239,16,47,71,83,176,223,32,79,139,157,190,232, 23,65,98,116,172,200,236,19,55,83,218,242,13,37,251,4, 16,47,208,239,146,210,45,109,163,217,38,92,193,230,25,62, 234,246,9,21,195,60,37,218,152,213,42,103,238,17,109,146, 25,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 172,185,208,239,16,47,70,83,177,223,32,78,140,158,190,233, 22,65,97,115,173,200,236,19,55,82,218,242,13,37,251,4, 16,47,208,239,147,210,45,108,163,217,38,92,194,230,25,61, 234,247,8,21,196,60,37,218,153,213,42,102,238,17,108,147, 25,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 173,186,209,239,16,46,69,82,178,223,32,77,141,158,191,233, 22,64,97,114,173,201,236,19,54,82,219,243,12,36,251,4, 16,46,209,239,148,211,44,107,164,218,37,91,194,230,25,61, 234,247,8,21,196,59,36,219,154,213,42,101,238,17,107,148, 25,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 174,186,209,239,16,46,69,81,178,224,31,77,142,159,191,233, 22,64,96,113,174,201,236,19,54,81,219,243,12,36,251,4, 16,46,209,239,149,211,44,106,165,218,37,90,195,230,25,60, 234,247,8,21,197,59,36,219,155,214,41,100,238,17,106,149, 25,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 174,187,210,239,16,45,68,81,179,224,31,76,143,160,192,233, 22,63,95,112,175,201,237,18,54,80,219,243,12,36,251,4, 16,45,210,239,149,212,43,106,166,218,37,89,195,231,24,60, 234,247,8,21,197,58,36,219,156,214,41,99,238,17,105,150, 24,231,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 175,187,210,240,15,45,68,80,180,224,31,75,144,161,192,233, 22,63,94,111,175,202,237,18,53,80,220,243,12,35,251,4, 16,45,210,239,150,212,43,105,166,219,36,89,196,231,24,59, 235,247,8,20,198,58,35,220,156,214,41,99,239,16,105,150, 24,231,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 176,188,210,240,15,45,67,79,180,224,31,75,145,162,193,233, 22,62,93,110,176,202,237,18,53,79,220,243,12,35,251,4, 15,45,210,240,151,212,43,104,167,219,36,88,196,231,24,59, 235,247,8,20,198,57,35,220,157,215,40,98,239,16,104,151, 24,231,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 176,188,211,240,15,44,67,79,181,225,30,74,146,163,193,234, 21,62,92,109,177,203,237,18,52,78,220,243,12,35,251,4, 15,44,211,240,152,213,42,103,168,219,36,87,197,231,24,58, 235,247,8,20,199,57,35,220,158,215,40,97,239,16,103,152, 24,231,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 177,189,211,240,15,44,66,78,182,225,30,73,147,163,194,234, 21,61,92,108,177,203,237,18,52,78,221,243,12,34,251,4, 15,44,211,240,153,213,42,102,169,220,35,86,198,231,24,57, 235,247,8,20,199,56,34,221,159,216,39,96,239,16,102,153, 24,231,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 178,190,211,240,15,44,65,77,182,225,30,73,148,164,194,234, 21,61,91,107,178,204,237,18,51,77,221,243,12,34,251,4, 15,43,212,240,154,213,42,101,169,220,35,86,198,232,23,57, 235,247,8,20,200,56,34,221,160,216,39,95,239,16,101,154, 23,232,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 179,190,212,240,15,43,65,76,183,225,30,72,149,165,195,234, 21,60,90,106,179,204,238,17,51,76,221,243,12,34,251,4, 15,43,212,240,155,214,41,100,170,220,35,85,199,232,23,56, 236,247,8,19,200,55,34,221,161,216,39,94,239,16,100,155, 23,232,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 179,191,212,240,15,43,64,76,184,226,29,71,150,166,196,234, 21,59,89,105,179,205,238,17,50,76,222,244,11,33,251,4, 15,43,212,240,156,214,41,99,171,220,35,84,199,232,23,56, 236,247,8,19,201,55,33,222,162,217,38,93,239,16,99,156, 23,232,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 180,191,213,240,15,42,64,75,184,226,29,71,151,167,196,235, 20,59,88,104,180,205,238,17,50,75,222,244,11,33,251,4, 15,42,213,240,157,215,40,98,172,221,34,83,200,232,23,55, 236,247,8,19,201,54,33,222,162,217,38,93,240,15,98,157, 23,232,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 181,192,213,241,14,42,63,74,185,226,29,70,152,167,197,235, 20,58,88,103,181,206,238,17,49,74,222,244,11,33,251,4, 14,42,213,241,158,215,40,97,173,221,34,82,200,233,22,55, 236,247,8,19,202,54,33,222,163,217,38,92,240,15,97,158, 22,233,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 181,193,213,241,14,42,62,74,186,227,28,69,153,168,197,235, 20,58,87,102,182,206,238,17,49,73,222,244,11,33,251,4, 14,42,213,241,159,215,40,96,173,221,34,82,201,233,22,54, 236,248,7,19,202,53,33,222,164,218,37,91,240,15,96,159, 22,233,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 182,193,214,241,14,41,62,73,186,227,28,69,154,169,198,235, 20,57,86,101,182,207,238,17,48,73,223,244,11,32,251,4, 14,41,214,241,159,216,39,96,174,222,33,81,201,233,22,54, 236,248,7,19,203,53,32,223,165,218,37,90,240,15,96,159, 22,233,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 183,194,214,241,14,41,61,72,187,227,28,68,154,170,198,235, 20,57,85,101,183,207,238,17,48,72,223,244,11,32,252,3, 14,41,214,241,160,216,39,95,175,222,33,80,202,233,22,53, 237,248,7,18,203,52,32,223,166,218,37,89,240,15,95,160, 22,233,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 183,194,215,241,14,40,61,72,188,227,28,67,155,171,199,236, 19,56,84,100,184,207,239,16,48,71,223,244,11,32,252,3, 14,40,215,241,161,216,39,94,176,222,33,79,202,233,22,53, 237,248,7,18,204,52,32,223,167,219,36,88,240,15,94,161, 22,233,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 184,195,215,241,14,40,60,71,188,228,27,67,156,172,199,236, 19,56,83,99,184,208,239,16,47,71,224,244,11,31,252,3, 14,40,215,241,162,217,38,93,176,223,32,79,203,234,21,52, 237,248,7,18,204,51,31,224,168,219,36,87,240,15,93,162, 21,234,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 185,196,215,241,14,40,59,70,189,228,27,66,157,172,200,236, 19,55,83,98,185,208,239,16,47,70,224,244,11,31,252,3, 14,40,215,241,163,217,38,92,177,223,32,78,203,234,21,52, 237,248,7,18,205,51,31,224,168,219,36,87,241,14,92,163, 21,234,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 185,196,216,242,13,39,59,70,190,228,27,65,158,173,200,236, 19,55,82,97,186,209,239,16,46,69,224,245,10,31,252,3, 13,39,216,242,164,218,37,91,178,223,32,77,204,234,21,51, 237,248,7,18,205,50,31,224,169,220,35,86,241,14,91,164, 21,234,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 186,197,216,242,13,39,58,69,190,228,27,65,159,174,201,236, 19,54,81,96,186,209,239,16,46,69,225,245,10,30,252,3, 13,39,216,242,165,218,37,90,179,224,31,76,204,234,21,51, 237,248,7,18,206,50,30,225,170,220,35,85,241,14,90,165, 21,234,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 187,197,217,242,13,38,58,68,191,229,26,64,160,175,202,237, 18,53,80,95,187,210,239,16,45,68,225,245,10,30,252,3, 13,38,217,242,166,218,37,89,179,224,31,76,205,234,21,50, 238,248,7,17,206,49,30,225,171,221,34,84,241,14,89,166, 21,234,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 188,198,217,242,13,38,57,67,191,229,26,64,161,176,202,237, 18,53,79,94,188,210,240,15,45,67,225,245,10,30,252,3, 13,38,217,242,167,219,36,88,180,224,31,75,205,235,20,50, 238,248,7,17,207,49,30,225,172,221,34,83,241,14,88,167, 20,235,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 188,198,217,242,13,38,57,67,192,229,26,63,162,176,203,237, 18,52,79,93,188,211,240,15,44,67,226,245,10,29,252,3, 13,38,217,242,168,219,36,87,181,225,30,74,206,235,20,49, 238,248,7,17,207,48,29,226,173,221,34,82,241,14,87,168, 20,235,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 189,199,218,242,13,37,56,66,193,230,25,62,163,177,203,237, 18,52,78,92,189,211,240,15,44,66,226,245,10,29,252,3, 13,37,218,242,169,219,36,87,182,225,30,73,206,235,20,49, 238,248,7,17,208,48,29,226,174,222,33,81,241,14,86,169, 20,235,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 190,200,218,242,13,37,55,65,193,230,25,62,164,178,204,237, 18,51,77,91,190,212,240,15,43,65,226,245,10,29,252,3, 13,37,218,242,169,220,35,86,183,225,30,72,207,235,20,48, 238,248,7,17,208,47,29,226,174,222,33,81,242,13,86,169, 20,235,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 190,200,219,243,12,36,55,65,194,230,25,61,165,179,204,238, 17,51,76,90,191,212,240,15,43,64,226,245,10,29,252,3, 12,36,219,243,170,220,35,85,183,226,29,72,207,235,20,48, 239,248,7,16,209,47,29,226,175,222,33,80,242,13,85,170, 19,236,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 191,201,219,243,12,36,54,64,195,230,25,60,166,180,205,238, 17,50,75,89,191,213,240,15,42,64,227,245,10,28,252,3, 12,36,219,243,171,221,34,84,184,226,29,71,208,236,19,47, 239,249,6,16,209,46,28,227,176,223,32,79,242,13,84,171, 19,236,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 192,201,219,243,12,36,54,63,195,231,24,60,167,180,205,238, 17,50,75,88,192,213,241,14,42,63,227,246,9,28,252,3, 12,36,219,243,172,221,34,83,185,226,29,70,208,236,19,47, 239,249,6,16,210,46,28,227,177,223,32,78,242,13,83,172, 19,236,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 192,202,220,243,12,35,53,63,196,231,24,59,168,181,206,238, 17,49,74,87,193,213,241,14,42,62,227,246,9,28,252,3, 12,35,220,243,173,221,34,82,186,227,28,69,209,236,19,46, 239,249,6,16,210,45,28,227,178,223,32,77,242,13,82,173, 19,236,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 193,203,220,243,12,35,52,62,197,231,24,58,169,182,206,238, 17,49,73,86,193,214,241,14,41,62,228,246,9,27,252,3, 12,35,220,243,174,222,33,81,186,227,28,69,209,236,19,46, 239,249,6,16,211,45,27,228,179,224,31,76,242,13,81,174, 19,236,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 194,203,221,243,12,34,52,61,197,231,24,58,170,183,207,238, 17,48,72,85,194,214,241,14,41,61,228,246,9,27,252,3, 12,34,221,243,175,222,33,80,187,227,28,68,210,237,18,45, 239,249,6,16,211,44,27,228,180,224,31,75,242,13,80,175, 18,237,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 194,204,221,243,12,34,51,61,198,232,23,57,171,184,208,239, 16,47,71,84,195,215,241,14,40,60,228,246,9,27,252,3, 12,34,221,243,176,222,33,79,188,227,28,67,210,237,18,45, 240,249,6,15,212,44,27,228,180,224,31,75,243,12,79,176, 18,237,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 195,204,221,244,11,34,51,60,199,232,23,56,172,185,208,239, 16,47,70,83,195,215,241,14,40,60,229,246,9,26,252,3, 12,34,221,243,177,223,32,78,189,228,27,66,211,237,18,44, 240,249,6,15,212,43,26,229,181,225,30,74,243,12,78,177, 18,237,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 196,205,222,244,11,33,50,59,199,232,23,56,173,185,209,239, 16,46,70,82,196,216,242,13,39,59,229,246,9,26,252,3, 11,33,222,244,178,223,32,77,189,228,27,66,211,237,18,44, 240,249,6,15,213,43,26,229,182,225,30,73,243,12,77,178, 18,237,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 197,206,222,244,11,33,49,58,200,233,22,55,174,186,209,239, 16,46,69,81,197,216,242,13,39,58,229,246,9,26,252,3, 11,33,222,244,178,224,31,77,190,228,27,65,212,237,18,43, 240,249,6,15,213,42,26,229,183,225,30,72,243,12,76,179, 18,237,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 197,206,222,244,11,33,49,58,201,233,22,54,175,187,210,239, 16,45,68,80,197,217,242,13,38,58,230,246,9,25,252,3, 11,32,223,244,179,224,31,76,191,229,26,64,212,238,17,43, 240,249,6,15,214,42,25,230,184,226,29,71,243,12,76,179, 17,238,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 198,207,223,244,11,32,48,57,201,233,22,54,176,188,210,240, 15,45,67,79,198,217,242,13,38,57,230,247,8,25,252,3, 11,32,223,244,180,224,31,75,192,229,26,63,213,238,17,42, 241,249,6,14,214,41,25,230,185,226,29,70,243,12,75,180, 17,238,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 199,207,223,244,11,32,48,56,202,233,22,53,177,189,211,240, 15,44,66,78,199,218,242,13,37,56,230,247,8,25,252,3, 11,32,223,244,181,225,30,74,193,229,26,62,213,238,17,42, 241,249,6,14,215,41,25,230,186,227,28,69,243,12,74,181, 17,238,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 199,208,224,244,11,31,47,56,203,234,21,52,178,189,211,240, 15,44,66,77,199,218,242,13,37,56,230,247,8,25,252,3, 11,31,224,244,182,225,30,73,193,230,25,62,214,238,17,41, 241,249,6,14,215,40,24,231,186,227,28,69,244,11,73,182, 17,238,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 200,208,224,244,11,31,47,55,203,234,21,52,179,190,212,240, 15,43,65,76,200,219,243,12,36,55,231,247,8,24,252,3, 11,31,224,244,183,225,30,72,194,230,25,61,214,238,17,41, 241,250,5,14,216,40,24,231,187,227,28,68,244,11,72,183, 16,239,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 201,209,224,245,10,31,46,54,204,234,21,51,180,191,212,240, 15,43,64,75,201,219,243,12,36,54,231,247,8,24,252,3, 10,31,224,245,184,226,29,71,195,230,25,60,215,239,16,40, 241,250,5,14,216,39,24,231,188,228,27,67,244,11,71,184, 16,239,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 201,210,225,245,10,30,45,54,205,234,21,50,180,192,213,241, 14,42,63,75,202,219,243,12,36,53,231,247,8,24,253,2, 10,30,225,245,185,226,29,70,196,231,24,59,215,239,16,40, 241,250,5,14,217,39,24,231,189,228,27,66,244,11,70,185, 16,239,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 202,210,225,245,10,30,45,53,205,235,20,50,181,193,214,241, 14,41,62,74,202,220,243,12,35,53,232,247,8,23,253,2, 10,30,225,245,186,227,28,69,196,231,24,59,216,239,16,39, 242,250,5,13,217,38,23,232,190,228,27,65,244,11,69,186, 16,239,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 203,211,226,245,10,29,44,52,206,235,20,49,182,194,214,241, 14,41,61,73,203,220,243,12,35,52,232,247,8,23,253,2, 10,29,226,245,187,227,28,68,197,231,24,58,216,239,16,39, 242,250,5,13,218,38,23,232,191,229,26,64,244,11,68,187, 16,239,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 203,211,226,245,10,29,44,52,207,235,20,48,183,194,215,241, 14,40,61,72,204,221,243,12,34,51,232,247,8,23,253,2, 10,29,226,245,188,227,28,67,198,232,23,57,217,240,15,38, 242,250,5,13,218,37,23,232,191,229,26,64,245,10,67,188, 15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 204,212,226,245,10,29,43,51,207,235,20,48,184,195,215,241, 14,40,60,71,204,221,244,11,34,51,233,247,8,22,253,2, 10,29,226,245,188,228,27,67,199,232,23,56,218,240,15,37, 242,250,5,13,219,37,22,233,192,229,26,63,245,10,67,188, 15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 205,213,227,245,10,28,42,50,208,236,19,47,185,196,216,242, 13,39,59,70,205,222,244,11,33,50,233,248,7,22,253,2, 10,28,227,245,189,228,27,66,199,232,23,56,218,240,15,37, 242,250,5,13,219,36,22,233,193,230,25,62,245,10,66,189, 15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 206,213,227,246,9,28,42,49,208,236,19,47,186,197,216,242, 13,39,58,69,206,222,244,11,33,49,233,248,7,22,253,2, 9,28,227,246,190,228,27,65,200,233,22,55,219,240,15,36, 243,250,5,12,220,36,22,233,194,230,25,61,245,10,65,190, 15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 206,214,228,246,9,27,41,49,209,236,19,46,187,198,217,242, 13,38,57,68,206,223,244,11,32,49,234,248,7,21,253,2, 9,27,228,246,191,229,26,64,201,233,22,54,219,240,15,36, 243,250,5,12,220,35,21,234,195,230,25,60,245,10,64,191, 15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 207,214,228,246,9,27,41,48,210,237,18,45,188,198,217,242, 13,38,57,67,207,223,244,11,32,48,234,248,7,21,253,2, 9,27,228,246,192,229,26,63,202,233,22,53,220,241,14,35, 243,250,5,12,221,35,21,234,196,231,24,59,245,10,63,192, 14,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 208,215,228,246,9,27,40,47,210,237,18,45,189,199,218,242, 13,37,56,66,208,224,244,11,31,47,234,248,7,21,253,2, 9,27,228,246,193,230,25,62,203,234,21,52,220,241,14,35, 243,250,5,12,221,34,21,234,197,231,24,58,245,10,62,193, 14,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 208,216,229,246,9,26,39,47,211,237,18,44,190,200,218,242, 13,37,55,65,208,224,244,11,31,47,234,248,7,21,253,2, 9,26,229,246,194,230,25,61,203,234,21,52,221,241,14,34, 243,250,5,12,222,34,20,235,197,231,24,58,246,9,61,194, 14,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 209,216,229,246,9,26,39,46,212,237,18,43,191,201,219,243, 12,36,54,64,209,225,245,10,30,46,235,248,7,20,253,2, 9,26,229,246,195,230,25,60,204,234,21,51,221,241,14,34, 243,250,5,12,222,33,20,235,198,232,23,57,246,9,60,195, 14,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 210,217,230,246,9,25,38,45,212,238,17,43,192,202,220,243, 12,35,53,63,210,225,245,10,30,45,235,248,7,20,253,2, 9,25,230,246,196,231,24,59,205,234,21,50,222,241,14,33, 244,251,4,11,223,33,20,235,199,232,23,56,246,9,59,196, 14,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 210,217,230,247,8,25,38,45,213,238,17,42,193,202,220,243, 12,35,53,62,211,225,245,10,30,44,235,248,7,20,253,2, 8,25,230,247,197,231,24,58,206,235,20,49,222,242,13,33, 244,251,4,11,223,32,20,235,200,233,22,55,246,9,58,197, 13,242,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 211,218,230,247,8,25,37,44,214,238,17,41,194,203,221,243, 12,34,52,61,211,226,245,10,29,44,236,249,6,19,253,2, 8,25,230,247,198,231,24,58,206,235,20,49,223,242,13,32, 244,251,4,11,224,32,19,236,201,233,22,54,246,9,57,198, 13,242,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 212,218,231,247,8,24,37,43,214,238,17,41,195,204,221,243, 12,34,51,60,212,226,245,10,29,43,236,249,6,19,253,2, 8,24,231,247,198,232,23,57,207,235,20,48,223,242,13,32, 244,251,4,11,224,31,19,236,202,233,22,53,246,9,57,198, 13,242,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 213,219,231,247,8,24,36,42,215,239,16,40,196,205,222,244, 11,33,50,59,213,227,245,10,28,42,236,249,6,19,253,2, 8,24,231,247,199,232,23,56,208,236,19,47,224,242,13,31, 244,251,4,11,225,31,19,236,203,234,21,52,246,9,56,199, 13,242,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 213,220,232,247,8,23,35,42,216,239,16,39,197,206,222,244, 11,33,49,58,213,227,246,9,28,42,237,249,6,18,253,2, 8,23,232,247,200,233,22,55,209,236,19,46,224,243,12,31, 245,251,4,10,225,30,18,237,203,234,21,52,247,8,55,200, 12,243,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 214,220,232,247,8,23,35,41,216,239,16,39,198,207,223,244, 11,32,48,57,214,228,246,9,27,41,237,249,6,18,253,2, 8,23,232,247,201,233,22,54,209,236,19,46,225,243,12,30, 245,251,4,10,226,30,18,237,204,234,21,51,247,8,54,201, 12,243,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 215,221,232,247,8,23,34,40,217,240,15,38,199,207,223,244, 11,32,48,56,215,228,246,9,27,40,237,249,6,18,253,2, 8,23,232,247,202,233,22,53,210,237,18,45,225,243,12,30, 245,251,4,10,226,29,18,237,205,235,20,50,247,8,53,202, 12,243,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 215,221,233,248,7,22,34,40,218,240,15,37,200,208,224,244, 11,31,47,55,215,229,246,9,26,40,238,249,6,17,253,2, 8,22,233,247,203,234,21,52,211,237,18,44,226,243,12,29, 245,251,4,10,227,29,17,238,206,235,20,49,247,8,52,203, 12,243,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 216,222,233,248,7,22,33,39,218,240,15,37,201,209,224,245, 10,31,46,54,216,229,246,9,26,39,238,249,6,17,253,2, 7,22,233,248,204,234,21,51,212,237,18,43,226,243,12,29, 245,251,4,10,227,28,17,238,207,235,20,48,247,8,51,204, 12,243,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 217,223,233,248,7,22,32,38,219,240,15,36,202,210,225,245, 10,30,45,53,217,230,246,9,25,38,238,249,6,17,253,2, 7,21,234,248,205,234,21,50,212,238,17,43,227,244,11,28, 245,251,4,10,228,28,17,238,208,236,19,47,247,8,50,205, 11,244,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 217,223,234,248,7,21,32,38,220,241,14,35,203,211,226,245, 10,29,44,52,217,230,247,8,25,38,239,250,5,16,253,2, 7,21,234,248,206,235,20,49,213,238,17,42,227,244,11,28, 246,251,4,9,228,27,16,239,209,236,19,46,247,8,49,206, 11,244,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 218,224,234,248,7,21,31,37,220,241,14,35,204,211,226,245, 10,29,44,51,218,231,247,8,24,37,239,250,5,16,253,2, 7,21,234,248,207,235,20,48,214,238,17,41,228,244,11,27, 246,251,4,9,229,27,16,239,209,236,19,46,248,7,48,207, 11,244,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 219,224,235,248,7,20,31,36,221,241,14,34,205,212,227,245, 10,28,43,50,219,231,247,8,24,36,239,250,5,16,253,2, 7,20,235,248,207,236,19,48,215,239,16,40,228,244,11,27, 246,252,3,9,229,26,16,239,210,237,18,45,248,7,48,207, 11,244,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 219,225,235,248,7,20,30,36,222,241,14,33,205,213,227,246, 9,28,42,50,220,231,247,8,24,35,239,250,5,16,254,1, 7,20,235,248,208,236,19,47,216,239,16,39,229,244,11,26, 246,252,3,9,230,26,16,239,211,237,18,44,248,7,47,208, 11,244,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 220,226,235,248,7,20,29,35,222,242,13,33,206,214,228,246, 9,27,41,49,220,232,247,8,23,35,240,250,5,15,254,1, 7,20,235,248,209,236,19,46,216,239,16,39,229,245,10,26, 246,252,3,9,230,25,15,240,212,237,18,43,248,7,46,209, 10,245,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 221,226,236,249,6,19,29,34,223,242,13,32,207,215,228,246, 9,27,40,48,221,232,247,8,23,34,240,250,5,15,254,1, 6,19,236,249,210,237,18,45,217,240,15,38,230,245,10,25, 246,252,3,9,231,25,15,240,213,238,17,42,248,7,45,210, 10,245,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 222,227,236,249,6,19,28,33,223,242,13,32,208,216,229,246, 9,26,39,47,222,233,248,7,22,33,240,250,5,15,254,1, 6,19,236,249,211,237,18,44,218,240,15,37,230,245,10,25, 247,252,3,8,231,24,15,240,214,238,17,41,248,7,44,211, 10,245,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 222,227,237,249,6,18,28,33,224,243,12,31,209,216,229,246, 9,26,39,46,222,233,248,7,22,33,241,250,5,14,254,1, 6,18,237,249,212,237,18,43,219,240,15,36,231,245,10,24, 247,252,3,8,232,24,14,241,215,239,16,40,248,7,43,212, 10,245,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 223,228,237,249,6,18,27,32,225,243,12,30,210,217,230,247, 8,25,38,45,223,234,248,7,21,32,241,250,5,14,254,1, 6,18,237,249,213,238,17,42,219,241,14,36,231,245,10,24, 247,252,3,8,232,23,14,241,215,239,16,40,249,6,42,213, 9,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 224,228,237,249,6,18,27,31,225,243,12,30,211,218,230,247, 8,25,37,44,224,234,248,7,21,31,241,251,4,14,254,1, 6,18,237,249,214,238,17,41,220,241,14,35,232,246,9,23, 247,252,3,8,233,23,14,241,216,239,16,39,249,6,41,214, 9,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 224,229,238,249,6,17,26,31,226,243,12,29,212,219,231,247, 8,24,36,43,224,235,248,7,20,31,242,251,4,13,254,1, 6,17,238,249,215,239,16,40,221,241,14,34,232,246,9,23, 247,252,3,8,233,22,13,242,217,240,15,38,249,6,40,215, 9,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 225,230,238,249,6,17,25,30,227,244,11,28,213,220,232,247, 8,23,35,42,225,235,248,7,20,30,242,251,4,13,254,1, 6,17,238,249,216,239,16,39,222,241,14,33,233,246,9,22, 248,252,3,7,234,22,13,242,218,240,15,37,249,6,39,216, 9,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 226,230,239,250,5,16,25,29,227,244,11,28,214,220,232,247, 8,23,35,41,226,236,249,6,19,29,242,251,4,13,254,1, 5,16,239,250,217,239,16,38,222,242,13,33,233,246,9,22, 248,252,3,7,234,21,13,242,219,240,15,36,249,6,38,217, 9,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 226,231,239,250,5,16,24,29,228,244,11,27,215,221,233,247, 8,22,34,40,226,236,249,6,19,29,243,251,4,12,254,1, 5,16,239,250,217,240,15,38,223,242,13,32,234,247,8,21, 248,252,3,7,235,21,12,243,220,241,14,35,249,6,38,217, 8,247,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 227,231,239,250,5,16,24,28,229,244,11,26,216,222,233,248, 7,22,33,39,227,237,249,6,18,28,243,251,4,12,254,1, 5,16,239,250,218,240,15,37,224,242,13,31,234,247,8,21, 248,252,3,7,235,20,12,243,221,241,14,34,249,6,37,218, 8,247,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 228,232,240,250,5,15,23,27,229,245,10,26,217,223,234,248, 7,21,32,38,228,237,249,6,18,27,243,251,4,12,254,1, 5,15,240,250,219,240,15,36,225,243,12,30,235,247,8,20, 248,253,2,7,236,20,12,243,221,241,14,34,250,5,36,219, 8,247,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 228,233,240,250,5,15,22,27,230,245,10,25,218,224,234,248, 7,21,31,37,229,237,249,6,18,26,243,251,4,12,254,1, 5,15,240,250,220,241,14,35,226,243,12,29,235,247,8,20, 248,253,2,7,236,19,12,243,222,242,13,33,250,5,35,220, 8,247,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 229,233,241,250,5,14,22,26,231,245,10,24,219,225,235,248, 7,20,30,36,229,238,249,6,17,26,244,251,4,11,254,1, 5,14,241,250,221,241,14,34,226,243,12,29,236,247,8,19, 249,253,2,6,237,19,11,244,223,242,13,32,250,5,34,221, 8,247,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 230,234,241,250,5,14,21,25,231,245,10,24,220,225,235,248, 7,20,30,35,230,238,250,5,17,25,244,251,4,11,254,1, 5,14,241,250,222,242,13,33,227,244,11,28,237,248,7,18, 249,253,2,6,237,18,11,244,224,242,13,31,250,5,33,222, 7,248,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 231,234,241,251,4,14,21,24,232,246,9,23,221,226,236,249, 6,19,29,34,231,239,250,5,16,24,244,252,3,11,254,1, 4,14,241,251,223,242,13,32,228,244,11,27,237,248,7,18, 249,253,2,6,238,18,11,244,225,243,12,30,250,5,32,223, 7,248,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 231,235,242,251,4,13,20,24,233,246,9,22,222,227,236,249, 6,19,28,33,231,239,250,5,16,24,245,252,3,10,254,1, 4,13,242,251,224,242,13,31,229,244,11,26,238,248,7,17, 249,253,2,6,238,17,10,245,226,243,12,29,250,5,31,224, 7,248,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 232,236,242,251,4,13,19,23,233,246,9,22,223,228,237,249, 6,18,27,32,232,240,250,5,15,23,245,252,3,10,254,1, 4,13,242,251,225,243,12,30,229,245,10,26,238,248,7,17, 249,253,2,6,239,17,10,245,226,243,12,29,251,4,30,225, 7,248,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 233,236,243,251,4,12,19,22,234,247,8,21,224,229,238,249, 6,17,26,31,233,240,250,5,15,22,245,252,3,10,254,1, 4,12,243,251,226,243,12,29,230,245,10,25,239,248,7,16, 250,253,2,5,239,16,10,245,227,244,11,28,251,4,29,226, 7,248,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 233,237,243,251,4,12,18,22,235,247,8,20,225,229,238,249, 6,17,26,30,233,241,250,5,14,22,246,252,3,9,254,1, 4,12,243,251,227,243,12,29,231,245,10,24,239,249,6,16, 250,253,2,5,240,16,9,246,228,244,11,27,251,4,28,227, 6,249,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 234,237,243,251,4,12,18,21,235,247,8,20,226,230,239,250, 5,16,25,29,234,241,250,5,14,21,246,252,3,9,254,1, 4,12,243,251,227,244,11,28,232,246,9,23,240,249,6,15, 250,253,2,5,240,15,9,246,229,245,10,26,251,4,28,227, 6,249,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 235,238,244,251,4,11,17,20,236,247,8,19,227,231,239,250, 5,16,24,28,235,242,251,4,13,20,246,252,3,9,254,1, 4,11,244,251,228,244,11,27,232,246,9,23,240,249,6,15, 250,253,2,5,241,15,9,246,230,245,10,25,251,4,27,228, 6,249,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 235,238,244,252,3,11,17,20,237,248,7,18,228,232,240,250, 5,15,23,27,235,242,251,4,13,20,247,252,3,8,254,1, 4,11,244,251,229,245,10,26,233,246,9,22,241,249,6,14, 250,253,2,5,241,14,8,247,231,245,10,24,251,4,26,229, 6,249,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 236,239,244,252,3,11,16,19,237,248,7,18,229,233,240,250, 5,15,22,26,236,243,251,4,12,19,247,252,3,8,254,1, 3,10,245,252,230,245,10,25,234,247,8,21,241,250,5,14, 250,253,2,5,242,14,8,247,232,246,9,23,251,4,25,230, 5,250,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 237,240,245,252,3,10,15,18,238,248,7,17,230,233,241,250, 5,14,22,25,237,243,251,4,12,18,247,253,2,8,254,1, 3,10,245,252,231,245,10,24,235,247,8,20,242,250,5,13, 251,253,2,4,242,13,8,247,232,246,9,23,252,3,24,231, 5,250,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 237,240,245,252,3,10,15,18,239,248,7,16,230,234,241,251, 4,14,21,25,238,243,251,4,12,17,247,253,2,8,255,0, 3,10,245,252,232,246,9,23,236,247,8,19,242,250,5,13, 251,254,1,4,243,13,8,247,233,246,9,22,252,3,23,232, 5,250,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 238,241,246,252,3,9,14,17,239,249,6,16,231,235,242,251, 4,13,20,24,238,244,251,4,11,17,248,253,2,7,255,0, 3,9,246,252,233,246,9,22,236,248,7,19,243,250,5,12, 251,254,1,4,243,12,7,248,234,247,8,21,252,3,22,233, 5,250,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 239,241,246,252,3,9,14,16,240,249,6,15,232,236,242,251, 4,13,19,23,239,244,252,3,11,16,248,253,2,7,255,0, 3,9,246,252,234,246,9,21,237,248,7,18,243,250,5,12, 251,254,1,4,244,12,7,248,235,247,8,20,252,3,21,234, 5,250,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 240,242,246,252,3,9,13,15,240,249,6,15,233,237,243,251, 4,12,18,22,240,245,252,3,10,15,248,253,2,7,255,0, 3,9,246,252,235,247,8,20,238,248,7,17,244,251,4,11, 251,254,1,4,244,11,7,248,236,247,8,19,252,3,20,235, 4,251,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 240,243,247,252,3,8,12,15,241,250,5,14,234,238,244,251, 4,11,17,21,240,245,252,3,10,15,249,253,2,6,255,0, 3,8,247,252,236,247,8,19,239,248,7,16,244,251,4,11, 252,254,1,3,245,11,6,249,237,248,7,18,252,3,19,236, 4,251,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 241,243,247,253,2,8,12,14,242,250,5,13,235,238,244,251, 4,11,17,20,241,246,252,3,9,14,249,253,2,6,255,0, 2,8,247,253,236,248,7,19,239,249,6,16,245,251,4,10, 252,254,1,3,245,10,6,249,238,248,7,17,252,3,19,236, 4,251,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 242,244,248,253,2,7,11,13,242,250,5,13,236,239,245,252, 3,10,16,19,242,246,252,3,9,13,249,253,2,6,255,0, 2,7,248,253,237,248,7,18,240,249,6,15,245,251,4,10, 252,254,1,3,246,10,6,249,238,248,7,17,253,2,18,237, 4,251,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 242,244,248,253,2,7,11,13,243,250,5,12,237,240,245,252, 3,10,15,18,242,247,252,3,8,13,250,253,2,5,255,0, 2,7,248,253,238,248,7,17,241,249,6,14,246,251,4,9, 252,254,1,3,246,9,5,250,239,249,6,16,253,2,17,238, 4,251,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 243,245,248,253,2,7,10,12,244,251,4,11,238,241,246,252, 3,9,14,17,243,247,253,2,8,12,250,254,1,5,255,0, 2,7,248,253,239,249,6,16,242,250,5,13,246,252,3,9, 252,254,1,3,247,9,5,250,240,249,6,15,253,2,16,239, 3,252,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 244,246,249,253,2,6,9,11,244,251,4,11,239,242,246,252, 3,9,13,16,244,248,253,2,7,11,250,254,1,5,255,0, 2,6,249,253,240,249,6,15,242,250,5,13,247,252,3,8, 252,254,1,3,247,8,5,250,241,249,6,14,253,2,15,240, 3,252,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 244,246,249,253,2,6,9,11,245,251,4,10,240,242,247,252, 3,8,13,15,244,248,253,2,7,11,251,254,1,4,255,0, 2,6,249,253,241,249,6,14,243,250,5,12,247,252,3,8, 253,254,1,2,248,8,4,251,242,250,5,13,253,2,14,241, 3,252,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 245,247,250,253,2,5,8,10,246,251,4,9,241,243,247,253, 2,8,12,14,245,249,253,2,6,10,251,254,1,4,255,0, 2,5,250,253,242,250,5,13,244,251,4,11,248,252,3,7, 253,254,1,2,248,7,4,251,243,250,5,12,253,2,13,242, 3,252,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 246,247,250,254,1,5,8,9,246,252,3,9,242,244,248,253, 2,7,11,13,246,249,253,2,6,9,251,254,1,4,255,0, 1,5,250,254,243,250,5,12,245,251,4,10,248,253,2,7, 253,254,1,2,249,7,4,251,244,251,4,11,253,2,12,243, 2,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 246,248,250,254,1,5,7,9,247,252,3,8,243,245,248,253, 2,7,10,12,247,249,253,2,6,8,251,254,1,4,255,0, 1,5,250,254,244,251,4,11,246,251,4,9,249,253,2,6, 253,255,0,2,249,6,4,251,244,251,4,11,254,1,11,244, 2,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 247,248,251,254,1,4,7,8,248,252,3,7,244,246,249,253, 2,6,9,11,247,250,254,1,5,8,252,254,1,3,255,0, 1,4,251,254,245,251,4,10,246,252,3,9,249,253,2,6, 253,255,0,2,250,6,3,252,245,251,4,10,254,1,10,245, 2,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 248,249,251,254,1,4,6,7,248,253,2,7,245,247,250,253, 2,5,8,10,248,250,254,1,5,7,252,254,1,3,255,0, 1,4,251,254,246,251,4,9,247,252,3,8,250,253,2,5, 254,255,0,1,250,5,3,252,246,252,3,9,254,1,9,246, 2,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 249,250,252,254,1,3,5,6,249,253,2,6,246,247,250,254, 1,5,8,9,249,251,254,1,4,6,252,254,1,3,255,0, 1,3,252,254,246,252,3,9,248,252,3,7,250,253,2,5, 254,255,0,1,251,5,3,252,247,252,3,8,254,1,9,246, 2,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 249,250,252,254,1,3,5,6,250,253,2,5,247,248,251,254, 1,4,7,8,249,251,254,1,4,6,253,255,0,2,255,0, 1,3,252,254,247,252,3,8,249,253,2,6,251,254,1,4, 254,255,0,1,251,4,2,253,248,252,3,7,254,1,8,247, 1,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 250,251,252,254,1,3,4,5,250,253,2,5,248,249,251,254, 1,4,6,7,250,252,254,1,3,5,253,255,0,2,255,0, 1,3,252,254,248,252,3,7,249,253,2,6,251,254,1,4, 254,255,0,1,252,4,2,253,249,253,2,6,254,1,7,248, 1,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 251,251,253,255,0,2,4,4,251,254,1,4,249,250,252,254, 1,3,5,6,251,252,254,1,3,4,253,255,0,2,255,0, 0,2,253,255,249,253,2,6,250,253,2,5,252,254,1,3, 254,255,0,1,252,3,2,253,250,253,2,5,254,1,6,249, 1,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 251,252,253,255,0,2,3,4,252,254,1,3,250,251,252,254, 1,3,4,5,251,253,255,0,2,4,254,255,0,1,255,0, 0,2,253,255,250,253,2,5,251,254,1,4,252,254,1,3, 254,255,0,1,253,3,1,254,250,253,2,5,255,0,5,250, 1,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 252,253,254,255,0,1,2,3,252,254,1,3,251,251,253,255, 0,2,4,4,252,253,255,0,2,3,254,255,0,1,255,0, 0,1,254,255,251,254,1,4,252,254,1,3,253,254,1,2, 255,255,0,0,253,2,1,254,251,254,1,4,255,0,4,251, 1,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 253,253,254,255,0,1,2,2,253,254,1,2,252,252,253,255, 0,2,3,3,253,254,255,0,1,2,254,255,0,1,255,0, 0,1,254,255,252,254,1,3,252,254,1,3,253,255,0,2, 255,255,0,0,254,2,1,254,252,254,1,3,255,0,3,252, 0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 253,254,254,255,0,1,1,2,254,255,0,1,253,253,254,255, 0,1,2,2,253,254,255,0,1,2,255,255,0,0,255,0, 0,1,254,255,253,254,1,2,253,255,0,2,254,255,0,1, 255,255,0,0,254,1,0,255,253,254,1,2,255,0,2,253, 0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 254,254,255,255,0,0,1,1,254,255,0,1,254,254,254,255, 0,1,1,1,254,255,255,0,0,1,255,255,0,0,255,0, 0,0,255,255,254,255,0,1,254,255,0,1,254,255,0,1, 255,255,0,0,255,1,0,255,254,255,0,1,255,0,1,254, 0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 255,255,255,255,0,0,0,0,255,255,0,0,255,255,255,255, 0,0,0,0,255,255,255,0,0,0,255,255,0,0,255,0, 0,0,255,255,255,255,0,0,255,255,0,0,255,255,0,0, 255,255,0,0,255,0,0,255,255,255,0,0,255,0,0,255, 0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, }; h323plus/plugins/video/H.261-vic/vic/p64encoder.h0000644000175000017500000001321511341106252020053 0ustar markmark/*p64encoder.h copyright (c)Indranet Technologies ltd (lara@indranet.co.nz) * Author Derek J Smithies (derek@indranet.co.nz) * * * This file defines the p64encoder class, which is the combined total of * the grabber, pre encoder, and encoder classes. */ /************ Change log * * $Log: p64encoder.h,v $ * Revision 1.1 2010/02/24 02:19:22 shorne * First commit of h323plus mirror * * Revision 1.2 2006/07/31 09:09:22 csoutheren * Checkin of validated codec used during development * * Revision 1.1.2.1 2006/04/06 01:17:17 csoutheren * Initial version of H.261 video codec plugin for OPAL * * Revision 2.2 2005/08/31 13:16:02 rjongbloed * Ported video fast update from OpenH323 * * Revision 2.1 2003/03/15 23:43:00 robertj * Update to OpenH323 v1.11.7 * * Revision 1.17 2002/04/05 00:53:19 dereks * Modify video frame encoding so that frame is encoded on an incremental basis. * Thanks to Walter Whitlock - good work. * * Revision 1.16 2002/01/04 02:48:05 dereks * Fix previous commit so it compiles OK. * * Revision 1.15 2002/01/03 23:05:50 dereks * Add methods to count number of H261 packets waiting to be sent. * * Revision 1.14 2001/12/04 04:26:06 robertj * Added code to allow change of video quality in H.261, thanks Damian Sandras * * Revision 1.13 2001/09/25 03:14:48 dereks * Add constant bitrate control for the h261 video codec. * Thanks Tiziano Morganti for the code to set bit rate. Good work! * * Revision 1.12 2001/05/10 05:25:44 robertj * Removed need for VIC code to use ptlib. * * Revision 1.11 2001/03/19 01:41:33 robertj * Removed last vestiges of old grabber code. * * Revision 1.10 2000/12/19 22:22:34 dereks * Remove connection to grabber-OS.cxx files. grabber-OS.cxx files no longer used. * Video data is now read from a video channel, using the pwlib classes. * * Revision 1.9 2000/10/13 01:47:27 dereks * Include command option for setting the number of transmitted video * frames per second. use --videotxfps n * * Revision 1.8 2000/09/08 06:41:38 craigs * Added ability to set video device * Added ability to select test input frames * * Revision 1.7 2000/08/25 03:18:50 dereks * Add change log facility (Thanks Robert for the info on implementation) * * * ********/ #ifndef lib_p64encoder_h #define lib_p64encoder_h #include "config.h" #include "p64.h" #include "vid_coder.h" #include "videoframe.h" #include "encoder-h261.h" #include "transmitter.h" #define WIDTH 352 #define HEIGHT 288 class P64Encoder{ public: /** Constructor for using a grabber. The grabber may elect to read data from a hardware device, or from data in memory, Data in memory is placed there by programs such as openmcu. */ P64Encoder(int quant_level,int idle); ~P64Encoder(); /** Set the quantization level (or quality level) in the h261 encoder class. Has a value of 1 (good quality) to 31 (poor quality). Quality is improved at the expense of bit rate. */ void SetQualityLevel(int qLevel); /** Set the number of blocks in the background that need to be transmitted with each frame */ void SetBackgroundFill(int idle); /** Set size of the grabbing window, which sets the size of the vid_frame class. When the vid_frame class is passed to grabber and encoder, the grabber and encoder automatically resize */ void SetSize(int width,int height); /** Called by the display routine, so we can display local video using the grabbed 411 format stuff. Returns the address of the grabbed 411 format frame. */ u_char* GetFramePtr(); // /** Grabs one video frame, // or generates test pattern if grabber is not operational // */ // void GrabOneFrame(); /** On a previously grabbed frame, 1)do some motion and block changed checking, 2)h261 format conversion and 3)store result in a series of packets in a list in the transmitter class. */ void ProcessOneFrame(); /** Retrieves the first packet in the list recorded in in the transmitter class */ void ReadOnePacket( u_char * buffer, // Buffer of encoded data unsigned & length // Actual length of encoded data buffer ); /** Pre-process one video frame for later incremental encoding same as ProcessOneFrame() except that no encoding is done */ void PreProcessOneFrame(); /** Incrementally encodes and retrieves one packet Must call PreProcesOneFrame() first, then call IncEncodeAndGetPacket() the same way as ReadOnePacket() is called */ void IncEncodeAndGetPacket( u_char * buffer, // Buffer of encoded data unsigned & length // Actual length of encoded data buffer ); /** Return true if there are packets waiting to be transmitted. These packets were created at the last invocation of the video codec. */ int PacketsOutStanding() { return trans->PacketsOutStanding(); } /** When incrementally encoding, return true if there is still more encoding waiting to be done for the current video frame. */ int MoreToIncEncode() { return h261_edr->MoreToIncEncode(); } /** Return the count of packets waiting to be transmitted. These packets were created at the last invocation of the video codec. */ int GetCountPacketsOutStanding() { return trans->GetCountPacketsOutStanding();} void FastUpdatePicture(); protected: //variables used in grabbing/processing the image. Transmitter *trans; H261PixelEncoder *h261_edr; VideoFrame *vid_frame; Pre_Vid_Coder *pre_vid; VideoFrame *vid_frame2; // for testing Pre_Vid_Coder *pre_vid2; // for testing }; #endif //#ifndef lib_p64encoder_h h323plus/plugins/video/H.261-vic/vic/grabber.h0000644000175000017500000000000011341106252017472 0ustar markmarkh323plus/plugins/video/H.261-vic/vic/vid_coder.h0000644000175000017500000002105011341106252020034 0ustar markmark/*vid_coder.h (c) Indranet Technologies ltd (lara@indranet.co.nz) * Code mangled by Derek J Smithies (derek@indranet.co.nz), so that * it runs inside voxilla. * * This file is derived from vic, http://www-nrg.ee.lbl.gov/vic/ * Their copyright notice is below. */ /*- * Copyright (c) 1993-1995 The Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and the Network Research Group at * Lawrence Berkeley Laboratory. * 4. Neither the name of the University nor of the Laboratory may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /************ Change log * * $Log: vid_coder.h,v $ * Revision 1.1 2010/02/24 02:19:22 shorne * First commit of h323plus mirror * * Revision 1.2 2006/07/31 09:09:22 csoutheren * Checkin of validated codec used during development * * Revision 1.1.2.1 2006/04/06 01:17:17 csoutheren * Initial version of H.261 video codec plugin for OPAL * * Revision 2.3 2006/01/14 10:43:06 dsandras * Applied patch from Brian Lu to allow compilation * with OpenSolaris compiler. Many thanks !!! * * Revision 2.2 2005/08/31 13:16:02 rjongbloed * Ported video fast update from OpenH323 * * Revision 2.1 2003/03/15 23:43:00 robertj * Update to OpenH323 v1.11.7 * * Revision 1.10 2003/04/03 23:54:15 robertj * Added fast update to H.261 codec, thanks Gustavo Garcэa Bernardo * * Revision 1.9 2002/04/26 04:57:41 dereks * Add Walter Whitlocks fixes, based on Victor Ivashim's suggestions to * improve the quality with Netmeeting. Thanks guys!!!! * * Revision 1.8 2001/10/16 21:20:07 yurik * Removed warnings on Windows CE. Submitted by Jehan Bing, jehan@bravobrava.com * * Revision 1.7 2001/05/10 05:25:44 robertj * Removed need for VIC code to use ptlib. * * Revision 1.6 2000/09/22 02:40:14 dereks * Tidied code for generating test images. * Added mechanism to ensure the entire frame is sent on startup. * * Revision 1.5 2000/08/25 03:18:50 dereks * Add change log facility (Thanks Robert for the info on implementation) * * * ********/ #if 0 #if defined(__osf__) || defined(__ultrix__) /*XXX they didn't get this one right */ extern "C" { #include #include } #else #include #ifndef _WIN32 #include #endif #endif #include #include #include #include #endif #include "crdef.h" #include "transmitter.h" #include "encoder.h" #include "crdef.h" #include "videoframe.h" #define HDRSIZE 4 #define CIF_WIDTH 352 #define CIF_HEIGHT 288 #define QCIF_WIDTH 176 #define QCIF_HEIGHT 144 #define BMB 6 /* # blocks in a Macroblock */ #define MBPERGOB 33 /* # of Macroblocks per GOB (3 x 11 in image) */ #ifdef INT_64 #define NBIT 64 #define BB_INT INT_64 #else #define NBIT 32 #define BB_INT u_int #endif #if BYTE_ORDER == LITTLE_ENDIAN #if NBIT == 64 #define STORE_BITS(bb, bc) \ bc[0] = (u_char)(bb >> 56); \ bc[1] = (u_char)(bb >> 48); \ bc[2] = (u_char)(bb >> 40); \ bc[3] = (u_char)(bb >> 32); \ bc[4] = (u_char)(bb >> 24); \ bc[5] = (u_char)(bb >> 16); \ bc[6] = (u_char)(bb >> 8); \ bc[7] = (u_char)(bb); #define LOAD_BITS(bc) \ ((BB_INT)bc[0] << 56 | \ (BB_INT)bc[1] << 48 | \ (BB_INT)bc[2] << 40 | \ (BB_INT)bc[3] << 32 | \ (BB_INT)bc[4] << 24 | \ (BB_INT)bc[5] << 16 | \ (BB_INT)bc[6] << 8 | \ (BB_INT)bc[7]) #else #define STORE_BITS(bb, bc) \ bc[0] = (u_char)(bb >> 24); \ bc[1] = (u_char)(bb >> 16); \ bc[2] = (u_char)(bb >> 8); \ bc[3] = (u_char)(bb); #define LOAD_BITS(bc) (ntohl(*(BB_INT*)(bc))) #endif #else #define STORE_BITS(bb, bc) *(BB_INT*)bc = (bb); #define LOAD_BITS(bc) (*(BB_INT*)(bc)) #endif #define PUT_BITS(bits, n, nbb, bb, bc) \ { \ nbb += (n); \ if (nbb > NBIT) { \ u_int extra = (nbb) - NBIT; \ bb |= (BB_INT)(bits) >> extra; \ STORE_BITS(bb, bc) \ bc += sizeof(BB_INT); \ bb = (BB_INT)(bits) << (NBIT - extra); \ nbb = extra; \ } else \ bb |= (BB_INT)(bits) << (NBIT - (nbb)); \ } class Pre_Vid_Coder : public Encoder { public: /**Constructor */ Pre_Vid_Coder(); /**Destructor */ virtual ~Pre_Vid_Coder(); /**Take a YUV411 planar frame and access which blocks to send */ void ProcessFrame(VideoFrame *vf); /**Set internal variable (idle_high) for the fill rate. */ void SetBackgroundFill(int fillLevel) {idle_high= fillLevel; } void FastUpdatePicture(); protected: void SetSize(int _width,int _height); void allocref(); void Free_Memory(); void suppress(const u_char* devbuf); void save(u_char* lum, u_char* cache, int stride); void saveblks(u_char* lum); void age_blocks(); /**Conditional replacement vector (crvec) creation&initialization */ void crinit(); /** conditional replacement vector */ u_char *crvec; u_char *ref; int inw; int inh; int outw; int outh; int frameCount; /**number of blocks across the width of a frame. blkw is equal to pixels wide/16 */ int blkw; /**number of blocks in the height of a frame. blkh is equal to pixels high/16 */ int blkh; /**Number of background blocks (those that did not change) which are sent in addition to those that have changed*/ int idle_high; int idle_low; int delta; int frametime; int scan; /** number of blocks in the frame. */ int nblk; /** index used to find the unchanged blocks to be transmitted with those that have changed*/ int rover; int fastUpdCount; }; #define REPLENISH(devbuf, refbuf, ds, bpp, hstart, hstop, vstart, vstop) \ { \ /* \ * First age the blocks from the previous frame. \ */ \ age_blocks(); \ \ register int _ds = ds; \ register int _rs = outw; \ const u_char* rb = &(refbuf)[scan * _rs]; \ const u_char* db = &(devbuf)[scan * _ds]; \ int w = blkw; \ u_char* crv = crvec; \ \ crv += (vstart) * w; \ for (int y = vstart; y < vstop; ++y) { \ const u_char* ndb = db; \ const u_char* nrb = rb; \ u_char* ncrv = crv; \ crv += hstart; \ for (int x = hstart; x < hstop; x++) { \ int left = 0; \ int right = 0; \ int top = 0; \ int bottom = 0; \ DIFFLINE(db, rb, left, top, right); \ db += _ds << 3; \ rb += _rs << 3; \ DIFFLINE(db, rb, left, bottom, right); \ db -= _ds << 3; \ rb -= _rs << 3; \ \ int center = 0; \ if (left >= 48 && x > 0) { \ crv[-1] = CR_MOTION|CR_SEND; \ center = 1; \ } \ if (right >= 48 && x < w - 1) { \ crv[1] = CR_MOTION|CR_SEND; \ center = 1; \ } \ if (bottom >= 48 && y < blkh - 1) { \ crv[w] = CR_MOTION|CR_SEND; \ center = 1; \ } \ if (top >= 48 && y > 0) { \ crv[-w] = CR_MOTION|CR_SEND; \ center = 1; \ } \ if (center) \ crv[0] = CR_MOTION|CR_SEND; \ \ db += 16 * (bpp); \ rb += 16; \ ++crv; \ } \ db = ndb + (_ds << 4); \ rb = nrb + (_rs << 4); \ crv = ncrv + w; \ } \ } h323plus/plugins/video/H.261-vic/vic/p64.h0000644000175000017500000001706211341106252016517 0ustar markmark/* * Copyright (c) 1993-1994 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the Network Research * Group at Lawrence Berkeley Laboratory. * 4. Neither the name of the University nor of the Laboratory may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ /************ Change log * * $Log: p64.h,v $ * Revision 1.1 2010/02/24 02:19:22 shorne * First commit of h323plus mirror * * Revision 1.2 2006/07/31 09:09:22 csoutheren * Checkin of validated codec used during development * * Revision 1.1.2.2 2006/04/19 04:59:29 csoutheren * Allow specification of CIF and QCIF capabilities * * Revision 1.1.2.1 2006/04/06 01:17:17 csoutheren * Initial version of H.261 video codec plugin for OPAL * * Revision 2.1 2003/03/15 23:43:00 robertj * Update to OpenH323 v1.11.7 * * Revision 1.6 2003/03/14 07:25:55 robertj * Removed $header keyword so is not different on alternate repositories * * Revision 1.5 2002/04/26 04:57:41 dereks * Add Walter Whitlocks fixes, based on Victor Ivashim's suggestions to * improve the quality with Netmeeting. Thanks guys!!!! * * Revision 1.4 2000/12/19 22:22:34 dereks * Remove connection to grabber-OS.cxx files. grabber-OS.cxx files no longer used. * Video data is now read from a video channel, using the pwlib classes. * * Revision 1.3 2000/08/25 03:18:50 dereks * Add change log facility (Thanks Robert for the info on implementation) * * * ********/ #ifndef lib_p64_h #define lib_p64_h /* * H.261 encapsulation.in payload of h261 packet. * See Internet draft. * * 0 1 2 3 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * |SBIT |EBIT |I|V| GOBN | MBAP | QUANT | HMVD | VMVD | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ // define H261 header related values // (currently these are defined in both p64.h and encoder-h261.h for use // in decode and encode. Should there be one common include file?) typedef unsigned h261hdr_t; #define MBPERGOB 33 struct huffcode; class P64Decoder{ public: P64Decoder(); virtual ~P64Decoder(); u_char* GetFramePtr() const { return (back_); } inline int ndblk() const { return (ndblk_); } inline void resetndblk() { ndblk_ = 0; } inline int width() const { return (width_); } inline int height() const { return (height_); } /** Decode a packet of RTP H261 video data. * Use the value of lostPreviousPacket to determine how best to use * H261 information in the RTP H261 header. */ virtual bool decode( const unsigned char *hdrPtr, // points to RTP H261 header at start of packet int buffLen, // length of RTP H261 packet to decode, including header bool lostPreviousPacket); // PTrue if previous packet lost or out of order virtual void sync(); inline void bb(int& x, int& y, int& w, int& h) { x = bbx_; y = bby_; w = bbw_; h = bbh_; }; inline u_int bad_psc() const { return (bad_psc_); } inline u_int bad_bits() const { return (bad_bits_); } inline u_int bad_GOBno() const { return (bad_GOBno_); } inline u_int bad_fmt() const { return (bad_fmt_); } inline int seenMaxGob() const { return (maxgob_ >= ngob_ - 1); } inline u_int gobquant() const { return (gobquant_); } inline void marks(u_char* p) { marks_ = p; } inline void mark(int v) { mark_ = v; } #define IT_QCIF 0 #define IT_CIF 1 int fmt_; /* image format (CIF/QCIF) */ void init(); protected: virtual void allocate() = 0; void inithuff(); void initquant(); virtual void err(const char* msg ...) const; int quantize(int v, int q); #ifdef INT_64 int parse_block(short* blk, INT_64* mask); #else int parse_block(short* blk, u_int* mask); #endif void decode_block(u_int tc, u_int x, u_int y, u_int stride, u_char* front, u_char* back, int sf); void filter(u_char* in, u_char* out, u_int stride); void mvblk(u_char* in, u_char* out, u_int stride); void mvblka(u_char*, u_char*, u_int stride); int parse_picture_hdr(); int parse_sc(); int parse_gob_hdr(int); int parse_mb_hdr(u_int& cbp); int decode_gob(u_int gob); int decode_mb(); u_int size_; u_char* fs_; u_char* front_; u_char* back_; struct hufftab { int maxlen; const short* prefix; }; hufftab ht_mba_; hufftab ht_mvd_; hufftab ht_cbp_; hufftab ht_tcoeff_; hufftab ht_mtype_; u_int bb_; /* 32-bit bit buffer */ int nbb_; /* number bits in bit buffer */ const u_short* bs_; /* input bit stream (less bits in bb_) */ const u_short* es_; /* pointer to end if input stream */ const u_short* ps_; /* packet start (for error reporting) */ int pebit_; /* packet end bit (for error reporting) */ #define MBST_FRESH 0 #define MBST_OLD 1 #define MBST_NEW 2 u_char* mbst_; short* qt_; u_short* coord_; u_int width_; /* width of Y component */ u_int height_; /* height of Y component */ int ngob_; /* number of gobs (12 for CIF, 3 for QCIF) */ int maxgob_; /* max gob seen this frame */ int ndblk_; /* # of decoded macroblocks */ int gobquant_; /* last gob quantizer (for info funtion) */ int mt_; /* macroblock type (flags in p64-huff.h) */ int gob_; /* current gob index */ int mba_; /* macroblock address (predictor) */ int mvdh_; /* motion vector (predictor) */ int mvdv_; /* motion vector (predictor) */ /* bounding box */ u_int minx_; u_int miny_; u_int maxx_; u_int maxy_; u_int bbx_; u_int bby_; u_int bbw_; u_int bbh_; /* * Table to indicate which blocks have changed. */ u_char* marks_; int mark_; /* error counters */ int bad_psc_; int bad_bits_; int bad_GOBno_; int bad_fmt_; /* # times RTP fmt != H.261 fmt */ u_char mb_state_[16 * 64]; /* inverse quantization via table lookup */ short quant_[32 * 256]; /* gob/mba to coordinate mappings */ u_short base_[16 * 64]; }; class FullP64Decoder : public P64Decoder { public: FullP64Decoder(); protected: virtual void allocate(); void mbcopy(u_int mba); void swap(); virtual void sync(); }; class IntraP64Decoder : public P64Decoder { public: IntraP64Decoder(); protected: virtual void allocate(); }; #endif h323plus/plugins/video/H.261-vic/h261vic.cxx0000644000175000017500000013016211512552753017072 0ustar markmark/* * H.261 Plugin codec for OpenH323/OPAL * * Copyright (C) 2005 Post Increment, All Rights Reserved * * This code is based on the file h261codec.cxx from the OPAL project released * under the MPL 1.0 license which contains the following: * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): Michele Piccini (michele@piccini.com) * Derek Smithies (derek@indranet.co.nz) * * $Revision: 1.4 $ * $Author: shorne $ * $Date: 2011/01/10 09:48:27 $ */ /* Notes ----- This codec implements a H.261 encoder and decoder with RTP packaging as per RFC 2032 "RTP Payload Format for H.261 Video Streams". As per this specification, The RTP payload code is always set to 31 The encoder only creates I-frames The decoder can accept either I-frames or P-frames There are seperate encoder/decoder pairs which ensures that the encoder/decoder always knows whether it will be receiving CIF or QCIF data, and a third pair which will determine the size from the received data stream. */ //#define DEBUG_OUTPUT 1 #define _CRT_NONSTDC_NO_DEPRECATE 1 #define _CRT_SECURE_NO_WARNINGS 1 #include #include #include #include #ifndef PLUGIN_CODEC_DLL_EXPORTS #include "plugin-config.h" #endif #include #if defined (_WIN32) || defined (_WIN32_WCE) #ifndef _WIN32_WCE #define STRCMPI _strcmpi #else #define STRCMPI _stricmp #define strdup _strdup #endif #else #define STRCMPI strcasecmp #include #include #endif #include #include "critsect.h" #include "rtpframe.h" #ifdef _MSC_VER #pragma warning(disable:4800) #endif #define BEST_ENCODER_QUALITY 1 #define WORST_ENCODER_QUALITY 31 #define DEFAULT_ENCODER_QUALITY 10 #define DEFAULT_FILL_LEVEL 5 #define RTP_RFC2032_PAYLOAD 31 #define RTP_DYNAMIC_PAYLOAD 96 #define H261_CLOCKRATE 90000 #define H261_BITRATE 621700 typedef unsigned char u_char; typedef unsigned short u_short; typedef unsigned int u_int; #include "vic/p64.h" #include "vic/p64encoder.h" #ifdef _WIN32 #undef min #undef max #endif #ifdef _MSC_VER #include "../common/trace.h" #else #include "trace.h" #endif #if DEBUG_OUTPUT #include #ifdef _WIN32 #include #define CREAT(f) _open(f, _O_WRONLY | _O_TRUNC | _O_CREAT | _O_BINARY, 0600 ) #else #include #include #define CREAT(f) ::creat(f, 0666) #endif #include static void debug_write_data(int & fd, const char * title, const char * filename, const void * buffer, size_t writeLen) { if (fd == -1) { if ((fd = CREAT(filename)) < 0) printf("cannot open %s file\n", title); } if (fd >= 0) { size_t len = write(fd, buffer, writeLen); if (len != writeLen) printf("failed to write %s buffer - %i != %i\n", title, len, writeLen); else printf("wrote %i bytes to %s\n", writeLen, title); } } #endif #define RTP_MIN_HEADER_SIZE 12 ///////////////////////////////////////////////////////////////////////////// class H261EncoderContext { public: P64Encoder * videoEncoder; unsigned frameWidth; unsigned frameHeight; bool forceIFrame; int videoQuality; unsigned long lastTimeStamp; CriticalSection mutex; H261EncoderContext() { frameWidth = frameHeight = 0; videoEncoder = new P64Encoder(DEFAULT_ENCODER_QUALITY, DEFAULT_FILL_LEVEL); forceIFrame = false; videoQuality = DEFAULT_ENCODER_QUALITY; } ~H261EncoderContext() { delete videoEncoder; } void SetFrameSize(int w, int h) { frameWidth = w; frameHeight = h; videoEncoder->SetSize(frameWidth, frameHeight); } void GetFrameSize(int & w, int & h) { w = frameWidth; h = frameHeight; } /* The only way to influence the amount of data that the H.261 codec produces is to change the "quality" variable that specifies the static quantisation level for BACKGROUND blocks. This "quality" value divided by 2 is used as quantisation level for IDLE blocks. MOTION blocks are always transmitted with quantisation level 1. One could map the TSTO values 1-to-1 to the quality, but that would lead to sending with lower quality than possible with higher bitrates. The following two mean-looking functions scale the TSTO value in dependence of the bitrate and resolution (CIF or QCIF). At QCIF resolution, TSTO values 0..31 will be mapped to quality values 1..31 at bitrates <=128kbit/s. At higher bitrates, the same TSTO values will be mapped to lower quality values, e.g. to 1..19 at 256kbit/s and 1..5 at 512kbit/s. Above approx. 656kbit/s, all TSTO values will be mapped to a quality of 1. At CIF, TSTO values 0..31 will be mapped to quality values 1..31 at up to 224kbit/s, to 1..11 at 512kbit/s and to 1 at bitrates >=912kbit/s. The basis of these functions is a nonlinear regression based on the observation of the effectve framrate obtained at specific quality settings and bitrates. */ void SetQualityFromTSTO (int tsto, unsigned bitrate, int width, int height) { if (tsto == -1) return; if ((width==CIF_WIDTH) && (height==CIF_HEIGHT)) { double bitrate_d = std::max((int)bitrate, 128000); double factor = std::max ( 0.0031 * pow ((double) (bitrate_d/64000), 4) - 0.0758 * pow ((double) (bitrate_d/64000), 3) + 0.6518 * pow ((double) (bitrate_d/64000), 2) - 1.9377 * (double) (bitrate_d/64000) + 2.5342 , 1.0); videoQuality = std::max ((int)( floor ( tsto / factor)), 1); } else if ((width==QCIF_WIDTH) && (height==QCIF_HEIGHT)) { double bitrate_d = std::max((int)bitrate, 64000); double factor = std::max ( 0.0036 * pow ((double) (bitrate_d / 64000), 4) - 0.0462 * pow ((double) (bitrate_d / 64000), 3) + 0.2792 * pow ((double) (bitrate_d / 64000), 2) - 0.5321 * (double) (bitrate_d / 64000) + 1.3438 -0.0844 , 1.0); videoQuality = std::max ((int)( floor ( tsto / factor)), 1); } TRACE(4, "H261\tf(tsto=" << tsto << ", bitrate=" << bitrate << ", width=" << width <<", height=" << height << ")=" << videoQuality); } int EncodeFrames(const u_char * src, unsigned & srcLen, u_char * dst, unsigned & dstLen, unsigned int & flags) { WaitAndSignal m(mutex); // create RTP frame from source buffer RTPFrame srcRTP(src, srcLen); // create RTP frame from destination buffer RTPFrame dstRTP(dst, dstLen, RTP_RFC2032_PAYLOAD); dstLen = 0; // return more pending data frames, if any if (videoEncoder->MoreToIncEncode()) { unsigned payloadLength = 0; videoEncoder->IncEncodeAndGetPacket((u_char *)dstRTP.GetPayloadPtr(), payloadLength); //get next packet on list dstLen = SetEncodedPacket(dstRTP, !videoEncoder->MoreToIncEncode(), RTP_RFC2032_PAYLOAD, lastTimeStamp, payloadLength, flags); #if DEBUG_OUTPUT static int encoderOutput = -1; debug_write_data(encoderOutput, "encoder output", "encoder.output", dstRTP.GetPacketPtr(), dstLen); #endif return 1; } // // from here on, this is encoding a new frame // // get the timestamp we will be using for the rest of the frame lastTimeStamp = srcRTP.GetTimestamp(); // update the video quality videoEncoder->SetQualityLevel(videoQuality); // get and validate header if (srcRTP.GetPayloadSize() < sizeof(PluginCodec_Video_FrameHeader)) { TRACE(1,"H261\tVideo grab too small"); return 0; } PluginCodec_Video_FrameHeader * header = (PluginCodec_Video_FrameHeader *)srcRTP.GetPayloadPtr(); if (header->x != 0 && header->y != 0) { TRACE(1,"H261\tVideo grab of partial frame unsupported"); return 0; } // make sure the incoming frame is big enough for the specified frame size if (srcRTP.GetPayloadSize() < (int)(sizeof(PluginCodec_Video_FrameHeader) + frameWidth*frameHeight*12/8)) { TRACE(1,"H261\tPayload of grabbed frame too small for full frame"); return 0; } if ((header->width != 176 && header->width != 352) || (header->height != 144 && header->height != 288)) { TRACE(1,"H261\tInvalid frame size"); return 0; } // if the incoming data has changed size, tell the encoder if (frameWidth != header->width || frameHeight != header->height) { frameWidth = header->width; frameHeight = header->height; videoEncoder->SetSize(frameWidth, frameHeight); } #if DEBUG_OUTPUT static int encoderYUV = -1; debug_write_data(encoderYUV, "encoder input", "encoder.yuv", OPAL_VIDEO_FRAME_DATA_PTR(header), srcRTP.GetPayloadSize() - sizeof(PluginCodec_Video_FrameHeader)); #endif // "grab" the frame memcpy(videoEncoder->GetFramePtr(), OPAL_VIDEO_FRAME_DATA_PTR(header), frameWidth*frameHeight*12/8); // force I-frame, if requested if (forceIFrame || (flags & PluginCodec_CoderForceIFrame) != 0) { videoEncoder->FastUpdatePicture(); forceIFrame = false; } // preprocess the data videoEncoder->PreProcessOneFrame(); // get next frame from list created by preprocessor if (!videoEncoder->MoreToIncEncode()) dstLen = 0; else { unsigned payloadLength = 0; videoEncoder->IncEncodeAndGetPacket((u_char *)dstRTP.GetPayloadPtr(), payloadLength); dstLen = SetEncodedPacket(dstRTP, !videoEncoder->MoreToIncEncode(), RTP_RFC2032_PAYLOAD, lastTimeStamp, payloadLength, flags); #if DEBUG_OUTPUT debug_write_data(encoderOutput, "encoder output", "encoder.output", dstRTP.GetPacketPtr(), dstLen); #endif } return 1; } protected: unsigned SetEncodedPacket(RTPFrame & dstRTP, bool isLast, unsigned char payloadCode, unsigned long lastTimeStamp, unsigned payloadLength, unsigned & flags); }; unsigned H261EncoderContext::SetEncodedPacket(RTPFrame & dstRTP, bool isLast, unsigned char payloadCode, unsigned long lastTimeStamp, unsigned payloadLength, unsigned & flags) { dstRTP.SetPayloadSize(payloadLength); dstRTP.SetMarker(isLast); dstRTP.SetPayloadType(payloadCode); dstRTP.SetTimestamp(lastTimeStamp); flags = 0; flags |= isLast ? PluginCodec_ReturnCoderLastFrame : 0; // marker bit on last frame of video flags |= PluginCodec_ReturnCoderIFrame; // sadly, this encoder *always* returns I-frames :( return dstRTP.GetFrameLen(); } static void * create_encoder(const struct PluginCodec_Definition * /*codec*/) { return new H261EncoderContext; } static int encoder_set_options(const PluginCodec_Definition *, void * _context, const char * , void * parm, unsigned * parmLen) { int width=0; int height=0; int tsto=-1; unsigned bitrate=H261_BITRATE; H261EncoderContext * context = (H261EncoderContext *)_context; if (parmLen == NULL || *parmLen != sizeof(const char **)) return 0; context->GetFrameSize (width, height); // fetch old value, needed for quality computation if (parm != NULL) { const char ** options = (const char **)parm; int i; for (i = 0; options[i] != NULL; i += 2) { if (STRCMPI(options[i], PLUGINCODEC_OPTION_FRAME_HEIGHT) == 0) height = atoi(options[i+1]); if (STRCMPI(options[i], PLUGINCODEC_OPTION_FRAME_WIDTH) == 0) width = atoi(options[i+1]); if (STRCMPI(options[i], PLUGINCODEC_OPTION_TARGET_BIT_RATE) == 0) bitrate = atoi(options[i+1]); if (STRCMPI(options[i], PLUGINCODEC_OPTION_TEMPORAL_SPATIAL_TRADE_OFF) == 0) tsto = atoi(options[i+1]); } } context->SetFrameSize (width, height); context->SetQualityFromTSTO (tsto, bitrate, width, height); return 1; } static void destroy_encoder(const struct PluginCodec_Definition * /*codec*/, void * _context) { H261EncoderContext * context = (H261EncoderContext *)_context; delete context; } static int codec_encoder(const struct PluginCodec_Definition * , void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { H261EncoderContext * context = (H261EncoderContext *)_context; return context->EncodeFrames((const u_char *)from, *fromLen, (u_char *)to, *toLen, *flag); } static int encoder_get_output_data_size(const PluginCodec_Definition *, void *, const char *, void *, unsigned *) { return RTP_MTU + RTP_MIN_HEADER_SIZE; } ///////////////////////////////////////////////////////////////////////////// class H261DecoderContext { public: u_char * rvts; P64Decoder * videoDecoder; u_short expectedSequenceNumber; int ndblk, nblk; int now; bool packetReceived; unsigned frameWidth; unsigned frameHeight; CriticalSection mutex; public: H261DecoderContext() { rvts = NULL; videoDecoder = new FullP64Decoder(); videoDecoder->marks(rvts); expectedSequenceNumber = 0; nblk = ndblk = 0; now = 1; packetReceived = false; frameWidth = frameHeight = 0; // Create the actual decoder } ~H261DecoderContext() { if (rvts) delete [] rvts; delete videoDecoder; } int DecodeFrames(const u_char * src, unsigned & srcLen, u_char * dst, unsigned & dstLen, unsigned int & flags) { WaitAndSignal m(mutex); // create RTP frame from source buffer RTPFrame srcRTP(src, srcLen); // create RTP frame from destination buffer RTPFrame dstRTP(dst, dstLen, 0); dstLen = 0; flags = 0; // Check for lost packets to help decoder bool lostPreviousPacket = false; if ((expectedSequenceNumber == 0) || (expectedSequenceNumber != srcRTP.GetSequenceNumber())) { lostPreviousPacket = true; TRACE(3,"H261\tDetected loss of one video packet. " << expectedSequenceNumber << " != " << srcRTP.GetSequenceNumber() << " Will recover."); } expectedSequenceNumber = (u_short)(srcRTP.GetSequenceNumber()+1); #if DEBUG_OUTPUT static int decoderInput = -1; debug_write_data(decoderInput, "decoder input", "decoder.input", srcRTP.GetPacketPtr(), srcRTP.GetFrameLen()); #endif videoDecoder->mark(now); if (!videoDecoder->decode(srcRTP.GetPayloadPtr(), srcRTP.GetPayloadSize(), lostPreviousPacket)) { flags = PluginCodec_ReturnCoderRequestIFrame; return 1; } //Check for a resize - can change at any time! if (frameWidth != (unsigned)videoDecoder->width() || frameHeight != (unsigned)videoDecoder->height()) { frameWidth = videoDecoder->width(); frameHeight = videoDecoder->height(); nblk = (frameWidth * frameHeight) / 64; delete [] rvts; rvts = new u_char[nblk]; memset(rvts, 0, nblk); videoDecoder->marks(rvts); } // Have not built an entire frame yet if (!srcRTP.GetMarker()) return 1; videoDecoder->sync(); ndblk = videoDecoder->ndblk(); int wraptime = now ^ 0x80; u_char * ts = rvts; int k; for (k = nblk; --k >= 0; ++ts) { if (*ts == wraptime) *ts = (u_char)now; } now = (now + 1) & 0xff; int frameBytes = (frameWidth * frameHeight * 12) / 8; dstRTP.SetPayloadSize(sizeof(PluginCodec_Video_FrameHeader) + frameBytes); dstRTP.SetPayloadType(RTP_DYNAMIC_PAYLOAD); dstRTP.SetMarker(true); PluginCodec_Video_FrameHeader * frameHeader = (PluginCodec_Video_FrameHeader *)dstRTP.GetPayloadPtr(); frameHeader->x = frameHeader->y = 0; frameHeader->width = frameWidth; frameHeader->height = frameHeight; memcpy(OPAL_VIDEO_FRAME_DATA_PTR(frameHeader), videoDecoder->GetFramePtr(), frameBytes); videoDecoder->resetndblk(); dstLen = dstRTP.GetFrameLen(); #if DEBUG_OUTPUT static int decoderOutput = -1; debug_write_data(decoderOutput, "decoder output", "decoder.yuv", OPAL_VIDEO_FRAME_DATA_PTR(frameHeader), dstRTP.GetPayloadSize() - sizeof(PluginCodec_Video_FrameHeader)); #endif flags = PluginCodec_ReturnCoderLastFrame | PluginCodec_ReturnCoderIFrame; // TODO: THIS NEEDS TO BE CHANGED TO DO CORRECT I-FRAME DETECTION return 1; } }; ///////////////////////////////////////////////////////////////////////////// static struct PluginCodec_information licenseInfo = { 1143692893, // timestamp = Thu 30 Mar 2006 04:28:13 AM UTC "Craig Southeren, Post Increment", // source code author "1.0", // source code version "craigs@postincrement.com", // source code email "http://www.postincrement.com", // source code URL "Copyright (C) 2004 by Post Increment, All Rights Reserved", // source code copyright "MPL 1.0", // source code license PluginCodec_License_MPL, // source code license "VIC H.261", // codec description "", // codec author "", // codec version "", // codec email "", // codec URL "Copyright (c) 1994 Regents of the University of California", // codec copyright information NULL, // codec license PluginCodec_License_BSD // codec license code }; static const char YUV420PDesc[] = { "YUV420P" }; static const char h261QCIFDesc[] = { "H.261-QCIF" }; static const char h261CIFDesc[] = { "H.261-CIF" }; static const char h261Desc[] = { "H.261" }; static const char sdpH261[] = { "h261" }; static const char QCIF_MPI[] = PLUGINCODEC_QCIF_MPI; static const char CIF_MPI[] = PLUGINCODEC_CIF_MPI; static void * create_decoder(const struct PluginCodec_Definition *) { return new H261DecoderContext; } static int decoder_set_options( const struct PluginCodec_Definition *, void * _context, const char *, void * parm, unsigned * parmLen) { H261DecoderContext * context = (H261DecoderContext *)_context; if (parmLen == NULL || *parmLen != sizeof(const char **) || parm == NULL) return 0; // get the "frame width" media format parameter to use as a hint for the encoder to start off for (const char * const * option = (const char * const *)parm; *option != NULL; option += 2) { if (STRCMPI(option[0], "Frame Width") == 0) { context->videoDecoder->fmt_ = (atoi(option[1]) == QCIF_WIDTH) ? IT_QCIF : IT_CIF; context->videoDecoder->init(); } } return 1; } static void destroy_decoder(const struct PluginCodec_Definition * /*codec*/, void * _context) { H261DecoderContext * context = (H261DecoderContext *)_context; delete context; } static int codec_decoder(const struct PluginCodec_Definition *, void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { H261DecoderContext * context = (H261DecoderContext *)_context; return context->DecodeFrames((const u_char *)from, *fromLen, (u_char *)to, *toLen, *flag); } static int decoder_get_output_data_size(const PluginCodec_Definition * codec, void *, const char *, void *, unsigned *) { // this is really frame height * frame width; return sizeof(PluginCodec_Video_FrameHeader) + ((codec->parm.video.maxFrameWidth * codec->parm.video.maxFrameHeight * 3) / 2); } static int get_codec_options(const struct PluginCodec_Definition * codec, void *, const char *, void * parm, unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(struct PluginCodec_Option **)) return 0; *(const void **)parm = codec->userData; *parmLen = 0; return 1; } static char * num2str(int num) { char buf[20]; sprintf(buf, "%i", num); return strdup(buf); } static int ClampSize(int pixels, int maximum) { // Set to nearest of the two possible sizes return pixels < maximum ? maximum/2 : maximum; } /* Convert the custom options for the codec to normalised options. For H.261 the custom options are "QCIF MPI" and "CIF MPI" which will restrict the min/max width/height and maximum frame rate. */ static int to_normalised_options(const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(char ***)) return 0; int qcif_mpi = PLUGINCODEC_MPI_DISABLED; int cif_mpi = PLUGINCODEC_MPI_DISABLED; int frameWidth = 352; int frameHeight = 288; for (const char * const * option = *(const char * const * *)parm; *option != NULL; option += 2) { if (STRCMPI(option[0], PLUGINCODEC_QCIF_MPI) == 0) qcif_mpi = atoi(option[1]); else if (STRCMPI(option[0], PLUGINCODEC_CIF_MPI) == 0) cif_mpi = atoi(option[1]); else if (STRCMPI(option[0], PLUGINCODEC_OPTION_FRAME_WIDTH) == 0) frameWidth = ClampSize(atoi(option[1]), 352); else if (STRCMPI(option[0], PLUGINCODEC_OPTION_FRAME_HEIGHT) == 0) frameHeight = ClampSize(atoi(option[1]), 288); } int minWidth = 176; int minHeight = 144; int maxWidth = 352; int maxHeight = 288; int frameTime = 3003; if (qcif_mpi != PLUGINCODEC_MPI_DISABLED && cif_mpi != PLUGINCODEC_MPI_DISABLED) frameTime = 3003*(qcif_mpi > cif_mpi ? qcif_mpi : cif_mpi); else if (qcif_mpi != PLUGINCODEC_MPI_DISABLED) { maxWidth = 176; maxHeight = 144; frameTime = 3003*qcif_mpi; } else if (cif_mpi != PLUGINCODEC_MPI_DISABLED) { minWidth = 352; minHeight = 288; frameTime = 3003*cif_mpi; } else { #ifdef DEFAULT_TO_FULL_CAPABILITIES maxWidth = 352; maxHeight = 288; frameTime = 3003*1; #else // Default handling according to RFC 4587 (QCIF=1) maxWidth = 176; maxHeight = 144; frameTime = 3003*1; #endif } char ** options = (char **)calloc(15, sizeof(char *)); *(char ***)parm = options; if (options == NULL) return 0; options[ 0] = strdup(PLUGINCODEC_OPTION_FRAME_WIDTH); options[ 1] = num2str(frameWidth); options[ 2] = strdup(PLUGINCODEC_OPTION_FRAME_HEIGHT); options[ 3] = num2str(frameHeight); options[ 4] = strdup(PLUGINCODEC_OPTION_MIN_RX_FRAME_WIDTH); options[ 5] = num2str(minWidth); options[ 6] = strdup(PLUGINCODEC_OPTION_MIN_RX_FRAME_HEIGHT); options[ 7] = num2str(minHeight); options[ 8] = strdup(PLUGINCODEC_OPTION_MAX_RX_FRAME_WIDTH); options[ 9] = num2str(maxWidth); options[10] = strdup(PLUGINCODEC_OPTION_MAX_RX_FRAME_HEIGHT); options[11] = num2str(maxHeight); options[12] = strdup(PLUGINCODEC_OPTION_FRAME_TIME); options[13] = num2str(frameTime); return 1; } /* Convert the normalised options to the codec custom options. For H.261 the custom options are "QCIF MPI" and "CIF MPI" which are set according to the min/max width/height and frame time. */ static int to_customised_options(const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(char ***)) return 0; int frameWidth = 352; int frameHeight = 288; int minWidth = 176; int minHeight = 144; int maxWidth = 352; int maxHeight = 288; int mpi = 1; for (const char * const * option = *(const char * const * *)parm; *option != NULL; option += 2) { if (STRCMPI(option[0], PLUGINCODEC_OPTION_FRAME_WIDTH) == 0) frameWidth = ClampSize(atoi(option[1]), 352); else if (STRCMPI(option[0], PLUGINCODEC_OPTION_FRAME_HEIGHT) == 0) frameHeight = ClampSize(atoi(option[1]), 288); else if (STRCMPI(option[0], PLUGINCODEC_OPTION_MIN_RX_FRAME_WIDTH) == 0) minWidth = ClampSize(atoi(option[1]), 352); else if (STRCMPI(option[0], PLUGINCODEC_OPTION_MIN_RX_FRAME_HEIGHT) == 0) minHeight = ClampSize(atoi(option[1]), 288); else if (STRCMPI(option[0], PLUGINCODEC_OPTION_MAX_RX_FRAME_WIDTH) == 0) maxWidth = ClampSize(atoi(option[1]), 352); else if (STRCMPI(option[0], PLUGINCODEC_OPTION_MAX_RX_FRAME_HEIGHT) == 0) maxHeight = ClampSize(atoi(option[1]), 288); else if (STRCMPI(option[0], PLUGINCODEC_OPTION_FRAME_TIME) == 0) mpi = atoi(option[1])/3003; } int qcif_mpi = 1; int cif_mpi = 1; if (minWidth > 176 || minHeight > 144) qcif_mpi = PLUGINCODEC_MPI_DISABLED; if (maxWidth < 352 || maxHeight < 288) cif_mpi = PLUGINCODEC_MPI_DISABLED; if (mpi < 1) mpi = 1; else if (mpi > 4) mpi = 4; if (qcif_mpi < PLUGINCODEC_MPI_DISABLED && mpi > qcif_mpi) qcif_mpi = mpi; if (cif_mpi < PLUGINCODEC_MPI_DISABLED && mpi > cif_mpi) cif_mpi = mpi; char ** options = (char **)calloc(17, sizeof(char *)); *(char ***)parm = options; if (options == NULL) return 0; options[ 0] = strdup(PLUGINCODEC_OPTION_FRAME_WIDTH); options[ 1] = num2str(frameWidth); options[ 2] = strdup(PLUGINCODEC_OPTION_FRAME_HEIGHT); options[ 3] = num2str(frameHeight); options[ 4] = strdup(PLUGINCODEC_OPTION_MIN_RX_FRAME_WIDTH); options[ 5] = num2str(minWidth); options[ 6] = strdup(PLUGINCODEC_OPTION_MIN_RX_FRAME_HEIGHT); options[ 7] = num2str(minHeight); options[ 8] = strdup(PLUGINCODEC_OPTION_MAX_RX_FRAME_WIDTH); options[ 9] = num2str(maxWidth); options[10] = strdup(PLUGINCODEC_OPTION_MAX_RX_FRAME_HEIGHT); options[11] = num2str(maxHeight); options[12] = strdup(PLUGINCODEC_QCIF_MPI); options[13] = num2str(qcif_mpi); options[14] = strdup(PLUGINCODEC_CIF_MPI); options[15] = num2str(cif_mpi); return 1; } static int free_codec_options(const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(char ***)) return 0; char ** strings = (char **) parm; for (char ** string = strings; *string != NULL; string++) free(*string); free(strings); return 1; } static int valid_for_protocol(const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(char *)) return 0; return (STRCMPI((const char *)parm, "h.323") == 0 || STRCMPI((const char *)parm, "h323") == 0) ? 1 : 0; } static PluginCodec_ControlDefn h323EncoderControls[] = { { PLUGINCODEC_CONTROL_VALID_FOR_PROTOCOL, valid_for_protocol }, { PLUGINCODEC_CONTROL_GET_CODEC_OPTIONS, get_codec_options }, { PLUGINCODEC_CONTROL_TO_NORMALISED_OPTIONS, to_normalised_options }, { PLUGINCODEC_CONTROL_TO_CUSTOMISED_OPTIONS, to_customised_options }, { PLUGINCODEC_CONTROL_FREE_CODEC_OPTIONS, free_codec_options }, { PLUGINCODEC_CONTROL_SET_CODEC_OPTIONS, encoder_set_options }, { PLUGINCODEC_CONTROL_GET_OUTPUT_DATA_SIZE, encoder_get_output_data_size }, { NULL } }; static PluginCodec_ControlDefn h323DecoderControls[] = { { PLUGINCODEC_CONTROL_VALID_FOR_PROTOCOL, valid_for_protocol }, { PLUGINCODEC_CONTROL_GET_CODEC_OPTIONS, get_codec_options }, { PLUGINCODEC_CONTROL_TO_NORMALISED_OPTIONS, to_normalised_options }, { PLUGINCODEC_CONTROL_TO_CUSTOMISED_OPTIONS, to_customised_options }, { PLUGINCODEC_CONTROL_FREE_CODEC_OPTIONS, free_codec_options }, { PLUGINCODEC_CONTROL_SET_CODEC_OPTIONS, decoder_set_options }, { PLUGINCODEC_CONTROL_GET_OUTPUT_DATA_SIZE, decoder_get_output_data_size }, { NULL } }; static PluginCodec_ControlDefn EncoderControls[] = { { PLUGINCODEC_CONTROL_GET_CODEC_OPTIONS, get_codec_options }, { PLUGINCODEC_CONTROL_TO_NORMALISED_OPTIONS, to_normalised_options }, { PLUGINCODEC_CONTROL_TO_CUSTOMISED_OPTIONS, to_customised_options }, { PLUGINCODEC_CONTROL_FREE_CODEC_OPTIONS, free_codec_options }, { PLUGINCODEC_CONTROL_SET_CODEC_OPTIONS, encoder_set_options }, { PLUGINCODEC_CONTROL_GET_OUTPUT_DATA_SIZE, encoder_get_output_data_size }, { NULL } }; static PluginCodec_ControlDefn DecoderControls[] = { { PLUGINCODEC_CONTROL_GET_CODEC_OPTIONS, get_codec_options }, { PLUGINCODEC_CONTROL_TO_NORMALISED_OPTIONS, to_normalised_options }, { PLUGINCODEC_CONTROL_TO_CUSTOMISED_OPTIONS, to_customised_options }, { PLUGINCODEC_CONTROL_FREE_CODEC_OPTIONS, free_codec_options }, { PLUGINCODEC_CONTROL_SET_CODEC_OPTIONS, decoder_set_options }, { PLUGINCODEC_CONTROL_GET_OUTPUT_DATA_SIZE, decoder_get_output_data_size }, { NULL } }; static struct PluginCodec_Option const minRxFrameWidth = { PluginCodec_IntegerOption, PLUGINCODEC_OPTION_MIN_RX_FRAME_WIDTH, true, PluginCodec_NoMerge, "176", NULL, NULL, 0, "176", "352" }; static struct PluginCodec_Option const minRxFrameHeight = { PluginCodec_IntegerOption, PLUGINCODEC_OPTION_MIN_RX_FRAME_HEIGHT, true, PluginCodec_NoMerge, "144", NULL, NULL, 0, "144", "288" }; static struct PluginCodec_Option const maxRxFrameWidth = { PluginCodec_IntegerOption, PLUGINCODEC_OPTION_MAX_RX_FRAME_WIDTH, true, PluginCodec_NoMerge, "352", NULL, NULL, 0, "176", "352" }; static struct PluginCodec_Option const maxRxFrameHeight = { PluginCodec_IntegerOption, PLUGINCODEC_OPTION_MAX_RX_FRAME_HEIGHT, true, PluginCodec_NoMerge, "288", NULL, NULL, 0, "144", "288" }; static struct PluginCodec_Option const minRxFrameWidthQCIF = { PluginCodec_IntegerOption, PLUGINCODEC_OPTION_MIN_RX_FRAME_WIDTH, true, PluginCodec_NoMerge, "176", NULL, NULL, 0, "176", "176" }; static struct PluginCodec_Option const minRxFrameHeightQCIF = { PluginCodec_IntegerOption, PLUGINCODEC_OPTION_MIN_RX_FRAME_HEIGHT, true, PluginCodec_NoMerge, "144", NULL, NULL, 0, "144", "144" }; static struct PluginCodec_Option const maxRxFrameWidthQCIF = { PluginCodec_IntegerOption, PLUGINCODEC_OPTION_MAX_RX_FRAME_WIDTH, true, PluginCodec_NoMerge, "176", NULL, NULL, 0, "176", "176" }; static struct PluginCodec_Option const maxRxFrameHeightQCIF = { PluginCodec_IntegerOption, PLUGINCODEC_OPTION_MAX_RX_FRAME_HEIGHT, true, PluginCodec_NoMerge, "144", NULL, NULL, 0, "144", "144" }; static struct PluginCodec_Option const minRxFrameWidthCIF = { PluginCodec_IntegerOption, PLUGINCODEC_OPTION_MIN_RX_FRAME_WIDTH, true, PluginCodec_NoMerge, "352", NULL, NULL, 0, "352", "352" }; static struct PluginCodec_Option const minRxFrameHeightCIF = { PluginCodec_IntegerOption, PLUGINCODEC_OPTION_MIN_RX_FRAME_HEIGHT, true, PluginCodec_NoMerge, "288", NULL, NULL, 0, "288", "288" }; static struct PluginCodec_Option const maxRxFrameWidthCIF = { PluginCodec_IntegerOption, PLUGINCODEC_OPTION_MAX_RX_FRAME_WIDTH, true, PluginCodec_NoMerge, "352", NULL, NULL, 0, "352", "352" }; static struct PluginCodec_Option const maxRxFrameHeightCIF = { PluginCodec_IntegerOption, PLUGINCODEC_OPTION_MAX_RX_FRAME_HEIGHT, true, PluginCodec_NoMerge, "288", NULL, NULL, 0, "288", "288" }; static struct PluginCodec_Option const qcifMPI = { PluginCodec_IntegerOption, // Option type QCIF_MPI, // User visible name false, // User Read/Only flag PluginCodec_MaxMerge, // Merge mode "1", // Initial value "QCIF", // FMTP option name STRINGIZE(PLUGINCODEC_MPI_DISABLED), // FMTP default value 0, // H.245 generic capability code and bit mask "1", // Minimum value STRINGIZE(PLUGINCODEC_MPI_DISABLED) // Maximum value }; static struct PluginCodec_Option const cifMPI = { PluginCodec_IntegerOption, // Option type CIF_MPI, // User visible name false, // User Read/Only flag PluginCodec_MaxMerge, // Merge mode "1", // Initial value "CIF", // FMTP option name STRINGIZE(PLUGINCODEC_MPI_DISABLED), // FMTP default value 0, // H.245 generic capability code and bit mask "1", // Minimum value STRINGIZE(PLUGINCODEC_MPI_DISABLED) // Maximum value }; /* The annex below is turned off and set to read/only because this implementation does not support them. It's presence here is so that if someone out there does a different implementation of the codec and copies this file as a template, they will get them and hopefully notice that they can just make it read/write and/or turned on. */ static struct PluginCodec_Option const annexD = { PluginCodec_BoolOption, // Option type "Annex D", // User visible name true, // User Read/Only flag PluginCodec_AndMerge, // Merge mode "0", // Initial value "D", // FMTP option name "0" // FMTP default value }; static struct PluginCodec_Option const * const qcifOptionTable[] = { &qcifMPI, &annexD, &minRxFrameWidthQCIF, &minRxFrameHeightQCIF, &maxRxFrameWidthQCIF, &maxRxFrameHeightQCIF, NULL }; static struct PluginCodec_Option const * const cifOptionTable[] = { &cifMPI, &annexD, &minRxFrameWidthCIF, &minRxFrameHeightCIF, &maxRxFrameWidthCIF, &maxRxFrameHeightCIF, NULL }; static struct PluginCodec_Option const * const xcifOptionTable[] = { &qcifMPI, &cifMPI, &annexD, &minRxFrameWidth, &minRxFrameHeight, &maxRxFrameWidth, &maxRxFrameHeight, NULL }; static struct PluginCodec_Definition h261CodecDefn[] = { { // CIF only encoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeVideo | // audio codec PluginCodec_RTPTypeExplicit, // specified RTP type h261CIFDesc, // text decription YUV420PDesc, // source format h261CIFDesc, // destination format cifOptionTable, // user data H261_CLOCKRATE, // samples per second H261_BITRATE, // raw bits per second 20000, // nanoseconds per frame {{ CIF_WIDTH, // frame width CIF_HEIGHT, // frame height 10, // recommended frame rate 60, // maximum frame rate }}, RTP_RFC2032_PAYLOAD, // IANA RTP payload code sdpH261, // RTP payload name create_encoder, // create codec function destroy_encoder, // destroy codec codec_encoder, // encode/decode h323EncoderControls, // codec controls PluginCodec_H323VideoCodec_h261, // h323CapabilityType NULL // h323CapabilityData }, { // CIF only decoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeVideo | // audio codec PluginCodec_RTPTypeExplicit, // specified RTP type h261CIFDesc, // text decription h261CIFDesc, // source format YUV420PDesc, // destination format cifOptionTable, // user data H261_CLOCKRATE, // samples per second H261_BITRATE, // raw bits per second 20000, // nanoseconds per frame {{ CIF_WIDTH, // frame width CIF_HEIGHT, // frame height 10, // recommended frame rate 60, // maximum frame rate }}, RTP_RFC2032_PAYLOAD, // IANA RTP payload code sdpH261, // RTP payload name create_decoder, // create codec function destroy_decoder, // destroy codec codec_decoder, // encode/decode h323DecoderControls, // codec controls PluginCodec_H323VideoCodec_h261, // h323CapabilityType NULL // h323CapabilityData }, { // QCIF only encoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeVideo | // audio codec PluginCodec_RTPTypeExplicit, // specified RTP type h261QCIFDesc, // text decription YUV420PDesc, // source format h261QCIFDesc, // destination format qcifOptionTable, // user data H261_CLOCKRATE, // samples per second H261_BITRATE, // raw bits per second 20000, // nanoseconds per frame {{ QCIF_WIDTH, // frame width QCIF_HEIGHT, // frame height 10, // recommended frame rate 60, // maximum frame rate }}, RTP_RFC2032_PAYLOAD, // IANA RTP payload code sdpH261, // RTP payload name create_encoder, // create codec function destroy_encoder, // destroy codec codec_encoder, // encode/decode h323EncoderControls, // codec controls PluginCodec_H323VideoCodec_h261, // h323CapabilityType NULL // h323CapabilityData }, { // QCIF only decoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeVideo | // audio codec PluginCodec_RTPTypeExplicit, // specified RTP type h261QCIFDesc, // text decription h261QCIFDesc, // source format YUV420PDesc, // destination format qcifOptionTable, // user data H261_CLOCKRATE, // samples per second H261_BITRATE, // raw bits per second 20000, // nanoseconds per frame {{ QCIF_WIDTH, // frame width QCIF_HEIGHT, // frame height 10, // recommended frame rate 60, // maximum frame rate }}, RTP_RFC2032_PAYLOAD, // IANA RTP payload code sdpH261, // RTP payload name create_decoder, // create codec function destroy_decoder, // destroy codec codec_decoder, // encode/decode h323DecoderControls, // codec controls PluginCodec_H323VideoCodec_h261, // h323CapabilityType NULL // h323CapabilityData }, { // Both QCIF and CIF (dynamic) encoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeVideo | // audio codec PluginCodec_RTPTypeExplicit, // specified RTP type h261Desc, // text decription YUV420PDesc, // source format h261Desc, // destination format xcifOptionTable, // user data H261_CLOCKRATE, // samples per second H261_BITRATE, // raw bits per second 20000, // nanoseconds per frame {{ CIF_WIDTH, // frame width CIF_HEIGHT, // frame height 10, // recommended frame rate 60, // maximum frame rate }}, RTP_RFC2032_PAYLOAD, // IANA RTP payload code sdpH261, // RTP payload name create_encoder, // create codec function destroy_encoder, // destroy codec codec_encoder, // encode/decode EncoderControls, // codec controls PluginCodec_H323VideoCodec_h261, // h323CapabilityType NULL // h323CapabilityData }, { // Both QCIF and CIF (dynamic) decoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeVideo | // audio codec PluginCodec_RTPTypeExplicit, // specified RTP type h261Desc, // text decription h261Desc, // source format YUV420PDesc, // destination format xcifOptionTable, // user data H261_CLOCKRATE, // samples per second H261_BITRATE, // raw bits per second 20000, // nanoseconds per frame {{ CIF_WIDTH, // frame width CIF_HEIGHT, // frame height 10, // recommended frame rate 60, // maximum frame rate }}, RTP_RFC2032_PAYLOAD, // IANA RTP payload code sdpH261, // RTP payload name create_decoder, // create codec function destroy_decoder, // destroy codec codec_decoder, // encode/decode DecoderControls, // codec controls PluginCodec_H323VideoCodec_h261, // h323CapabilityType NULL // h323CapabilityData } }; extern "C" { PLUGIN_CODEC_IMPLEMENT(VIC_H261) PLUGIN_CODEC_DLL_API struct PluginCodec_Definition * PLUGIN_CODEC_GET_CODEC_FN(unsigned * count, unsigned /*version*/) { #ifndef _WIN32_WCE char * debug_level = getenv ("PTLIB_TRACE_CODECS"); if (debug_level!=NULL) { Trace::SetLevel(atoi(debug_level)); } else { Trace::SetLevel(0); } debug_level = getenv ("PTLIB_TRACE_CODECS_USER_PLANE"); if (debug_level!=NULL) { Trace::SetLevelUserPlane(atoi(debug_level)); } else { Trace::SetLevelUserPlane(0); } #else Trace::SetLevel(0); Trace::SetLevelUserPlane(0); #endif *count = sizeof(h261CodecDefn) / sizeof(struct PluginCodec_Definition); return h261CodecDefn; } }; ///////////////////////////////////////////////////////////////////////////// h323plus/plugins/video/H.261-vic/h261vic_2005.vcproj0000644000175000017500000004762111341106252020235 0ustar markmark h323plus/plugins/video/common/0000755000175000017500000000000011513145630015165 5ustar markmarkh323plus/plugins/video/common/ffmpeg.h0000644000175000017500000000730611341106277016613 0ustar markmark/* * Common ffmpeg code for OPAL * * This code is based on the following files from the OPAL project which * have been removed from the current build and distributions but are still * available in the CVS "attic" * * src/codecs/h263codec.cxx * include/codecs/h263codec.h * The original files, and this version of the original code, are released under the same * MPL 1.0 license. Substantial portions of the original code were contributed * by Salyens and March Networks and their right to be identified as copyright holders * of the original code portions and any parts now included in this new copy is asserted through * their inclusion in the copyright notices below. * * Copyright (C) 2006 Post Increment * Copyright (C) 2005 Salyens * Copyright (C) 2001 March Networks Corporation * Copyright (C) 1999-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): Guilhem Tardy (gtardy@salyens.com) * Craig Southeren (craigs@postincrement.com) * Matthias Schneider (ma30002000@yahoo.de) */ #ifndef __FFMPEG_H__ #define __FFMPEG_H__ 1 #include #include #include #if defined(_WIN32) || defined(_WIN32_WCE) #include #include #define STRCMPI _strcmpi #else #include #include #define STRCMPI strcasecmp typedef unsigned char BYTE; #endif #include #include "critsect.h" #include "trace.h" extern "C" { #if defined (_WIN32) && defined (_MSC_VER) #include "vs-stdint.h" #define LIBAVCODEC_HEADER "libavcodec\avcodec.h" #pragma warning(push) #pragma warning(disable:4244 4996) #define round(d) ((int)((double)(d)+0.5)) #define strdup(s) _strdup(s) #else #include "plugin-config.h" #include #endif #include LIBAVCODEC_HEADER #ifdef _WIN32 #pragma warning(pop) #endif }; #ifndef LIBAVCODEC_VERSION_INT #error Libavcodec include is not correct #endif #include // Compile time version checking #if LIBAVCODEC_VERSION_INT < ((51<<16)+(11<<8)+0) #error Libavcodec LIBAVCODEC_VERSION_INT too old. #endif #ifdef LIBAVCODEC_STACKALIGN_HACK /* * Some combination of gcc 3.3.5, glibc 2.3.5 and PWLib 1.11.3 is throwing * off stack alignment for ffmpeg when it is dynamically loaded by PWLib. * Wrapping all ffmpeg calls in this macro should ensure the stack is aligned * when it reaches ffmpeg. ffmpeg still needs to be compiled with a more * recent gcc (we used 4.1.1) to ensure it preserves stack boundaries * internally. * * This macro comes from FFTW 3.1.2, kernel/ifft.h. See: * http://www.fftw.org/fftw3_doc/Stack-alignment-on-x86.html * Used with permission. */ #define WITH_ALIGNED_STACK(what) \ { \ (void)__builtin_alloca(16); \ __asm__ __volatile__ ("andl $-16, %esp"); \ \ what \ } #else #define WITH_ALIGNED_STACK(what) what #endif #ifdef _WIN32 # define DIR_SEPARATOR "\\" # define DIR_TOKENISER ";" #else # define DIR_SEPARATOR "/" # define DIR_TOKENISER ":" #endif #endif // __FFMPEG_H__ h323plus/plugins/video/common/rtpframe.h0000644000175000017500000001120611341106277017161 0ustar markmark/*****************************************************************************/ /* The contents of this file are subject to the Mozilla Public License */ /* Version 1.0 (the "License"); you may not use this file except in */ /* compliance with the License. You may obtain a copy of the License at */ /* http://www.mozilla.org/MPL/ */ /* */ /* Software distributed under the License is distributed on an "AS IS" */ /* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the */ /* License for the specific language governing rights and limitations under */ /* the License. */ /* */ /* The Original Code is the Open H323 Library. */ /* */ /* The Initial Developer of the Original Code is Matthias Schneider */ /* Copyright (C) 2007 Matthias Schneider, All Rights Reserved. */ /* */ /* Contributor(s): Matthias Schneider (ma30002000@yahoo.de) */ /* */ /* Alternatively, the contents of this file may be used under the terms of */ /* the GNU General Public License Version 2 or later (the "GPL"), in which */ /* case the provisions of the GPL are applicable instead of those above. If */ /* you wish to allow use of your version of this file only under the terms */ /* of the GPL and not to allow others to use your version of this file under */ /* the MPL, indicate your decision by deleting the provisions above and */ /* replace them with the notice and other provisions required by the GPL. */ /* If you do not delete the provisions above, a recipient may use your */ /* version of this file under either the MPL or the GPL. */ /* */ /* The Original Code was written by Matthias Schneider */ /*****************************************************************************/ #ifndef __RTPFRAME_H__ #define __RTPFRAME_H__ 1 #ifdef _MSC_VER #pragma warning(disable:4800) // disable performance warning #endif class RTPFrame { public: RTPFrame(const unsigned char * frame, int frameLen) { _frame = (unsigned char*) frame; _frameLen = frameLen; }; RTPFrame(unsigned char * frame, int frameLen, unsigned char payloadType) { _frame = frame; _frameLen = frameLen; if (_frameLen > 0) _frame [0] = 0x80; SetPayloadType(payloadType); } unsigned GetPayloadSize() const { return (_frameLen - GetHeaderSize()); } void SetPayloadSize(int size) { _frameLen = size + GetHeaderSize(); } int GetFrameLen () const { return (_frameLen); } unsigned char * GetPayloadPtr() const { return (_frame + GetHeaderSize()); } int GetHeaderSize() const { int size; size = 12; if (_frameLen < 12) return 0; size += (_frame[0] & 0x0f) * 4; if (!(_frame[0] & 0x10)) return size; if ((size + 4) < _frameLen) return (size + 4 + (_frame[size + 2] << 8) + _frame[size + 3]); return 0; } bool GetMarker() const { if (_frameLen < 2) return false; return (_frame[1] & 0x80); } unsigned GetSequenceNumber() const { if (_frameLen < 4) return 0; return (_frame[2] << 8) + _frame[3]; } void SetMarker(bool set) { if (_frameLen < 2) return; _frame[1] = _frame[1] & 0x7f; if (set) _frame[1] = _frame[1] | 0x80; } void SetPayloadType(unsigned char type) { if (_frameLen < 2) return; _frame[1] = _frame [1] & 0x80; _frame[1] = _frame [1] | (type & 0x7f); } unsigned long GetTimestamp() const { if (_frameLen < 8) return 0; return ((_frame[4] << 24) + (_frame[5] << 16) + (_frame[6] << 8) + _frame[7]); } void SetTimestamp(unsigned long timestamp) { if (_frameLen < 8) return; _frame[4] = (unsigned char) ((timestamp >> 24) & 0xff); _frame[5] = (unsigned char) ((timestamp >> 16) & 0xff); _frame[6] = (unsigned char) ((timestamp >> 8) & 0xff); _frame[7] = (unsigned char) (timestamp & 0xff); }; protected: unsigned char* _frame; int _frameLen; }; struct frameHeader { unsigned int x; unsigned int y; unsigned int width; unsigned int height; }; #endif /* __RTPFRAME_H__ */ h323plus/plugins/video/common/mpi.h0000644000175000017500000000653311341106277016135 0ustar markmark/*****************************************************************************/ /* The contents of this file are subject to the Mozilla Public License */ /* Version 1.0 (the "License"); you may not use this file except in */ /* compliance with the License. You may obtain a copy of the License at */ /* http://www.mozilla.org/MPL/ */ /* */ /* Software distributed under the License is distributed on an "AS IS" */ /* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the */ /* License for the specific language governing rights and limitations under */ /* the License. */ /* */ /* The Original Code is the Open H323 Library. */ /* */ /* The Initial Developer of the Original Code is Matthias Schneider */ /* Copyright (C) 2007 Matthias Schneider, All Rights Reserved. */ /* */ /* Contributor(s): Matthias Schneider (ma30002000@yahoo.de) */ /* */ /* Alternatively, the contents of this file may be used under the terms of */ /* the GNU General Public License Version 2 or later (the "GPL"), in which */ /* case the provisions of the GPL are applicable instead of those above. If */ /* you wish to allow use of your version of this file only under the terms */ /* of the GPL and not to allow others to use your version of this file under */ /* the MPL, indicate your decision by deleting the provisions above and */ /* replace them with the notice and other provisions required by the GPL. */ /* If you do not delete the provisions above, a recipient may use your */ /* version of this file under either the MPL or the GPL. */ /* */ /* The Original Code was written by Matthias Schneider */ /*****************************************************************************/ #ifndef __MPI_H__ #define __MPI_H__ 1 #include #include typedef struct MPI { unsigned width; unsigned height; unsigned interval; } MPI; class MPIList { public: MPIList(); void setMinWidth (unsigned width); void setMinHeight (unsigned height); void setMaxWidth (unsigned width); void setMaxHeight (unsigned height); unsigned getSupportedMPI( unsigned width, unsigned height); void setFrameTime (unsigned _frameTime); void addMPI (unsigned width, unsigned height, unsigned interval); void setDesiredWidth (unsigned width); void setDesiredHeight (unsigned height); bool getNegotiatedMPI( unsigned* width, unsigned* height, unsigned* _frameTime); unsigned size () { return MPIs.size(); } protected: std::vector MPIs; unsigned minWidth; unsigned minHeight; unsigned maxWidth; unsigned maxHeight; unsigned frameTime; unsigned desiredWidth; unsigned desiredHeight; }; #endif /* __MPI_H__ */ h323plus/plugins/video/common/vs-stdint.h0000644000175000017500000001577111445327112017305 0ustar markmark// ISO C9x compliant stdint.h for Microsoft Visual Studio // Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 // // Copyright (c) 2006 Alexander Chemeris // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // // 2. Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // // 3. The name of the author may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // /////////////////////////////////////////////////////////////////////////////// #ifndef _MSC_VER // [ #error "Use this header only with Microsoft Visual C++ compilers!" #endif // _MSC_VER ] #ifndef _MSC_STDINT_H_ // [ #define _MSC_STDINT_H_ #define _STDINT_H #if _MSC_VER > 1000 #pragma once #endif #include // For Visual Studio 6 in C++ mode wrap include with 'extern "C++" {}' // or compiler give many errors like this: // error C2733: second C linkage of overloaded function 'wmemchr' not allowed #if (_MSC_VER < 1300) && defined(__cplusplus) extern "C++" { #endif # include #if (_MSC_VER < 1300) && defined(__cplusplus) } #endif // 7.18.1 Integer types // 7.18.1.1 Exact-width integer types typedef signed char int8_t; // <-- Fix for conflict with AVCODEC definition typedef __int16 int16_t; typedef __int32 int32_t; typedef __int64 int64_t; typedef unsigned char uint8_t; // <-- Fix for conflict with AVCODEC definition typedef unsigned __int16 uint16_t; typedef unsigned __int32 uint32_t; typedef unsigned __int64 uint64_t; // 7.18.1.2 Minimum-width integer types typedef int8_t int_least8_t; typedef int16_t int_least16_t; typedef int32_t int_least32_t; typedef int64_t int_least64_t; typedef uint8_t uint_least8_t; typedef uint16_t uint_least16_t; typedef uint32_t uint_least32_t; typedef uint64_t uint_least64_t; // 7.18.1.3 Fastest minimum-width integer types typedef int8_t int_fast8_t; typedef int16_t int_fast16_t; typedef int32_t int_fast32_t; typedef int64_t int_fast64_t; typedef uint8_t uint_fast8_t; typedef uint16_t uint_fast16_t; typedef uint32_t uint_fast32_t; typedef uint64_t uint_fast64_t; // 7.18.1.4 Integer types capable of holding object pointers #ifdef _WIN64 // [ typedef __int64 intptr_t; typedef unsigned __int64 uintptr_t; #else // _WIN64 ][ typedef int intptr_t; typedef unsigned int uintptr_t; #endif // _WIN64 ] // 7.18.1.5 Greatest-width integer types typedef int64_t intmax_t; typedef uint64_t uintmax_t; // 7.18.2 Limits of specified-width integer types #if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 // 7.18.2.1 Limits of exact-width integer types #define INT8_MIN ((int8_t)_I8_MIN) #define INT8_MAX _I8_MAX #define INT16_MIN ((int16_t)_I16_MIN) #define INT16_MAX _I16_MAX #define INT32_MIN ((int32_t)_I32_MIN) #define INT32_MAX _I32_MAX #define INT64_MIN ((int64_t)_I64_MIN) #define INT64_MAX _I64_MAX #define UINT8_MAX _UI8_MAX #define UINT16_MAX _UI16_MAX #define UINT32_MAX _UI32_MAX #define UINT64_MAX _UI64_MAX // 7.18.2.2 Limits of minimum-width integer types #define INT_LEAST8_MIN INT8_MIN #define INT_LEAST8_MAX INT8_MAX #define INT_LEAST16_MIN INT16_MIN #define INT_LEAST16_MAX INT16_MAX #define INT_LEAST32_MIN INT32_MIN #define INT_LEAST32_MAX INT32_MAX #define INT_LEAST64_MIN INT64_MIN #define INT_LEAST64_MAX INT64_MAX #define UINT_LEAST8_MAX UINT8_MAX #define UINT_LEAST16_MAX UINT16_MAX #define UINT_LEAST32_MAX UINT32_MAX #define UINT_LEAST64_MAX UINT64_MAX // 7.18.2.3 Limits of fastest minimum-width integer types #define INT_FAST8_MIN INT8_MIN #define INT_FAST8_MAX INT8_MAX #define INT_FAST16_MIN INT16_MIN #define INT_FAST16_MAX INT16_MAX #define INT_FAST32_MIN INT32_MIN #define INT_FAST32_MAX INT32_MAX #define INT_FAST64_MIN INT64_MIN #define INT_FAST64_MAX INT64_MAX #define UINT_FAST8_MAX UINT8_MAX #define UINT_FAST16_MAX UINT16_MAX #define UINT_FAST32_MAX UINT32_MAX #define UINT_FAST64_MAX UINT64_MAX // 7.18.2.4 Limits of integer types capable of holding object pointers #ifdef _WIN64 // [ # define INTPTR_MIN INT64_MIN # define INTPTR_MAX INT64_MAX # define UINTPTR_MAX UINT64_MAX #else // _WIN64 ][ # define INTPTR_MIN INT32_MIN # define INTPTR_MAX INT32_MAX # define UINTPTR_MAX UINT32_MAX #endif // _WIN64 ] // 7.18.2.5 Limits of greatest-width integer types #define INTMAX_MIN INT64_MIN #define INTMAX_MAX INT64_MAX #define UINTMAX_MAX UINT64_MAX // 7.18.3 Limits of other integer types #ifdef _WIN64 // [ # define PTRDIFF_MIN _I64_MIN # define PTRDIFF_MAX _I64_MAX #else // _WIN64 ][ # define PTRDIFF_MIN _I32_MIN # define PTRDIFF_MAX _I32_MAX #endif // _WIN64 ] #define SIG_ATOMIC_MIN INT_MIN #define SIG_ATOMIC_MAX INT_MAX #ifndef SIZE_MAX // [ # ifdef _WIN64 // [ # define SIZE_MAX _UI64_MAX # else // _WIN64 ][ # define SIZE_MAX _UI32_MAX # endif // _WIN64 ] #endif // SIZE_MAX ] // WCHAR_MIN and WCHAR_MAX are also defined in #ifndef WCHAR_MIN // [ # define WCHAR_MIN 0 #endif // WCHAR_MIN ] #ifndef WCHAR_MAX // [ # define WCHAR_MAX _UI16_MAX #endif // WCHAR_MAX ] #define WINT_MIN 0 #define WINT_MAX _UI16_MAX #endif // __STDC_LIMIT_MACROS ] // 7.18.4 Limits of other integer types #if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 // 7.18.4.1 Macros for minimum-width integer constants #define INT8_C(val) val##i8 #define INT16_C(val) val##i16 #define INT32_C(val) val##i32 #define INT64_C(val) val##i64 #define UINT8_C(val) val##ui8 #define UINT16_C(val) val##ui16 #define UINT32_C(val) val##ui32 #define UINT64_C(val) val##ui64 // 7.18.4.2 Macros for greatest-width integer constants #define INTMAX_C INT64_C #define UINTMAX_C UINT64_C #endif // __STDC_CONSTANT_MACROS ] #endif // _MSC_STDINT_H_ ] h323plus/plugins/video/common/dyna.h0000644000175000017500000001154711341106277016304 0ustar markmark/* * Common Plugin code for OpenH323/OPAL * * This code is based on the following files from the OPAL project which * have been removed from the current build and distributions but are still * available in the CVS "attic" * * src/codecs/h263codec.cxx * include/codecs/h263codec.h * The original files, and this version of the original code, are released under the same * MPL 1.0 license. Substantial portions of the original code were contributed * by Salyens and March Networks and their right to be identified as copyright holders * of the original code portions and any parts now included in this new copy is asserted through * their inclusion in the copyright notices below. * * Copyright (C) 2006 Post Increment * Copyright (C) 2005 Salyens * Copyright (C) 2001 March Networks Corporation * Copyright (C) 1999-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): Guilhem Tardy (gtardy@salyens.com) * Craig Southeren (craigs@postincrement.com) * Matthias Schneider (ma30002000@yahoo.de) */ #ifndef __DYNA_H__ #define __DYNA_H__ 1 #include "ffmpeg.h" ///////////////////////////////////////////////////////////////// // // define a class to simplify handling a DLL library // based on PDynaLink from PWLib class DynaLink { public: typedef void (*Function)(); DynaLink() { _hDLL = NULL; } ~DynaLink() { Close(); } virtual bool IsLoaded() const { return _hDLL != NULL; } virtual bool Open(const char *name); bool InternalOpen(const char * dir, const char *name); virtual void Close(); bool GetFunction(const char * name, Function & func); char _codecString [32]; protected: #if defined(_WIN32) HINSTANCE _hDLL; #else void * _hDLL; #endif /* _WIN32 */ }; ///////////////////////////////////////////////////////////////// // // define a class to interface to the FFMpeg library class FFMPEGLibrary { public: FFMPEGLibrary(CodecID codec); ~FFMPEGLibrary(); bool Load(int ver = 0); AVCodec *AvcodecFindEncoder(enum CodecID id); AVCodec *AvcodecFindDecoder(enum CodecID id); AVCodecContext *AvcodecAllocContext(void); AVFrame *AvcodecAllocFrame(void); int AvcodecOpen(AVCodecContext *ctx, AVCodec *codec); int AvcodecClose(AVCodecContext *ctx); int AvcodecEncodeVideo(AVCodecContext *ctx, BYTE *buf, int buf_size, const AVFrame *pict); int AvcodecDecodeVideo(AVCodecContext *ctx, AVFrame *pict, int *got_picture_ptr, BYTE *buf, int buf_size); void AvcodecFree(void * ptr); void AvSetDimensions(AVCodecContext *s, int width, int height); void * AvMalloc(int size); void AvFree(void * ptr); void AvLogSetLevel(int level); void AvLogSetCallback(void (*callback)(void*, int, const char*, va_list)); int FFCheckAlignment(void); bool IsLoaded(); CriticalSection processLock; protected: DynaLink libAvcodec; DynaLink libAvutil; CodecID _codec; char _codecString [32]; void (*Favcodec_init)(void); AVCodec *Favcodec_h263_encoder; AVCodec *Favcodec_h263p_encoder; AVCodec *Favcodec_h263_decoder; AVCodec *Favcodec_h264_decoder; AVCodec *mpeg4_encoder; AVCodec *mpeg4_decoder; void (*Favcodec_register)(AVCodec *format); AVCodec *(*Favcodec_find_encoder)(enum CodecID id); AVCodec *(*Favcodec_find_decoder)(enum CodecID id); AVCodecContext *(*Favcodec_alloc_context)(void); AVFrame *(*Favcodec_alloc_frame)(void); int (*Favcodec_open)(AVCodecContext *ctx, AVCodec *codec); int (*Favcodec_close)(AVCodecContext *ctx); int (*Favcodec_encode_video)(AVCodecContext *ctx, BYTE *buf, int buf_size, const AVFrame *pict); int (*Favcodec_decode_video)(AVCodecContext *ctx, AVFrame *pict, int *got_picture_ptr, BYTE *buf, int buf_size); unsigned (*Favcodec_version)(void); unsigned (*Favcodec_build)(void); void (*Favcodec_set_dimensions)(AVCodecContext *ctx, int width, int height); void * (*Favcodec_malloc)(int size); void (*Favcodec_free)(void *); void (*FAv_log_set_level)(int level); void (*FAv_log_set_callback)(void (*callback)(void*, int, const char*, va_list)); int (*Fff_check_alignment)(void); bool isLoadedOK; }; ////////////////////////////////////////////////////////////////////////////// #endif /* __DYNA_H__ */ h323plus/plugins/video/common/critsect.h0000644000175000017500000000504511341106277017165 0ustar markmark/* * Common Plugin code for OpenH323/OPAL * * Copyright (C) 2005 Post Increment, All Rights Reserved * * This code is based on the file h261codec.cxx from the OPAL project released * under the MPL 1.0 license which contains the following: * * Copyright (c) 1998-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): Michele Piccini (michele@piccini.com) * Derek Smithies (derek@indranet.co.nz) */ ///////////////////////////////////////////////////////////////// // // define a class to implement a critical section mutex // based on PCriticalSection from PWLib #ifndef __CRITSECT_H__ #define __CRITSECT_H__ 1 #if defined(_WIN32) || defined(_WIN32_WCE) #include #include #ifndef _WIN32_WCE #define STRCMPI _strcmpi #else #define STRCMPI _stricmp #endif #else #include #define STRCMPI strcasecmp #endif class CriticalSection { public: CriticalSection() { #ifdef _WIN32 ::InitializeCriticalSection(&criticalSection); #else ::sem_init(&sem, 0, 1); #endif } ~CriticalSection() { #ifdef _WIN32 ::DeleteCriticalSection(&criticalSection); #else ::sem_destroy(&sem); #endif } void Wait() { #ifdef _WIN32 ::EnterCriticalSection(&criticalSection); #else ::sem_wait(&sem); #endif } void Signal() { #ifdef _WIN32 ::LeaveCriticalSection(&criticalSection); #else ::sem_post(&sem); #endif } private: CriticalSection & operator=(const CriticalSection &) { return *this; } #ifdef _WIN32 mutable CRITICAL_SECTION criticalSection; #else mutable sem_t sem; #endif }; class WaitAndSignal { public: inline WaitAndSignal(const CriticalSection & cs) : sync((CriticalSection &)cs) { sync.Wait(); } ~WaitAndSignal() { sync.Signal(); } WaitAndSignal & operator=(const WaitAndSignal &) { return *this; } protected: CriticalSection & sync; }; #endif /* __CRITSECT_H__ */ h323plus/plugins/video/common/dyna.cxx0000644000175000017500000003644011513145630016653 0ustar markmark/* * Common Plugin code for OpenH323/OPAL * * This code is based on the following files from the OPAL project which * have been removed from the current build and distributions but are still * available in the CVS "attic" * * src/codecs/h263codec.cxx * include/codecs/h263codec.h * The original files, and this version of the original code, are released under the same * MPL 1.0 license. Substantial portions of the original code were contributed * by Salyens and March Networks and their right to be identified as copyright holders * of the original code portions and any parts now included in this new copy is asserted through * their inclusion in the copyright notices below. * * Copyright (C) 2006 Post Increment * Copyright (C) 2005 Salyens * Copyright (C) 2001 March Networks Corporation * Copyright (C) 1999-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): Guilhem Tardy (gtardy@salyens.com) * Craig Southeren (craigs@postincrement.com) * Matthias Schneider (ma30002000@yahoo.de) */ #include "dyna.h" #ifdef _MSC_VER #define snprintf _snprintf #endif #ifndef PATH_SEP #ifdef _WIN32 #pragma pack(16) #define PATH_SEP ";" #else #define PATH_SEP ":" #endif #endif bool DynaLink::Open(const char *name) { // At first we try without a path if (InternalOpen("", name)) return true; // try directories specified in PTLIBPLUGINDIR char ptlibPath[1024]; memset(ptlibPath, 0, sizeof(ptlibPath)); char * env = ::getenv("PTLIBPLUGINDIR"); if (env != NULL) strcpy(ptlibPath, env); #ifdef P_DEFAULT_PLUGIN_DIR else strcpy(ptlibPath, P_DEFAULT_PLUGIN_DIR); #endif char * p = ::strtok(ptlibPath, PATH_SEP); while (p != NULL) { if (InternalOpen(p, name)) return true; p = ::strtok(NULL, PATH_SEP); } // As a last resort, try the current directory if (InternalOpen(".", name)) return true; return InternalOpen("/usr/local/lib", name); } bool DynaLink::InternalOpen(const char * dir, const char *name) { char path[1024]; memset(path, 0, sizeof(path)); // Copy the directory to "path" and add a separator if necessary if (strlen(dir) > 0) { strcpy(path, dir); if (path[strlen(path)-1] != DIR_SEPARATOR[0]) strcat(path, DIR_SEPARATOR); } strcat(path, name); if (strlen(path) == 0) { TRACE(1, _codecString << "\tDYNA\tdir '" << (dir != NULL ? dir : "(NULL)") << "', name '" << (name != NULL ? name : "(NULL)") << "' resulted in empty path"); return false; } #ifndef _WIN32 strcat(path, ".so"); #endif // Load the Libary #ifdef _WIN32 # ifdef UNICODE WITH_ALIGNED_STACK({ // must be called before using avcodec lib USES_CONVERSION; _hDLL = LoadLibrary(A2T(path)); }); # else WITH_ALIGNED_STACK({ // must be called before using avcodec lib _hDLL = LoadLibrary(path); }); # endif /* UNICODE */ #else WITH_ALIGNED_STACK({ // must be called before using avcodec lib _hDLL = dlopen((const char *)path, RTLD_NOW); }); #endif /* _WIN32 */ // Check for errors if (_hDLL == NULL) { #ifndef _WIN32 const char * err = dlerror(); if (err != NULL) { TRACE(1, _codecString << "\tDYNA\tError loading " << path << " - " << err) } else { TRACE(1, _codecString << "\tDYNA\tError loading " << path); } #else /* _WIN32 */ TRACE(1, _codecString << "\tDYNA\tError loading " << path); #endif /* _WIN32 */ return false; } TRACE(1, _codecString << "\tDYNA\tSuccessfully loaded '" << path << "'"); return true; } void DynaLink::Close() { if (_hDLL != NULL) { #ifdef _WIN32 FreeLibrary(_hDLL); #else dlclose(_hDLL); #endif /* _WIN32 */ _hDLL = NULL; } } bool DynaLink::GetFunction(const char * name, Function & func) { if (_hDLL == NULL) return false; #ifdef _WIN32 # ifdef UNICODE USES_CONVERSION; FARPROC p = GetProcAddress(_hDLL, A2T(name)); # else FARPROC p = GetProcAddress(_hDLL, name); # endif /* UNICODE */ if (p == NULL) return false; func = (Function)p; return true; #else void * p = dlsym(_hDLL, (const char *)name); if (p == NULL) { TRACE(1, _codecString << "\tDYNA\tError " << dlerror()); return false; } func = (Function &)p; return true; #endif /* _WIN32 */ } FFMPEGLibrary::FFMPEGLibrary(CodecID codec) { _codec = codec; if (_codec==CODEC_ID_H264) snprintf( _codecString, sizeof(_codecString), "H264"); if (_codec==CODEC_ID_H263) snprintf( _codecString, sizeof(_codecString), "H263"); if (_codec==CODEC_ID_H263P) snprintf( _codecString, sizeof(_codecString), "H263+"); if (_codec==CODEC_ID_MPEG4) snprintf( _codecString, sizeof(_codecString), "MPEG4"); isLoadedOK = false; } FFMPEGLibrary::~FFMPEGLibrary() { libAvcodec.Close(); libAvutil.Close(); } #define CHECK_AVUTIL(name, func) \ (seperateLibAvutil ? \ libAvutil.GetFunction(name, (DynaLink::Function &)func) : \ libAvcodec.GetFunction(name, (DynaLink::Function &)func) \ ) \ bool FFMPEGLibrary::Load(int ver) { WaitAndSignal m(processLock); if (IsLoaded()) return true; bool seperateLibAvutil = false; if (libAvcodec.Open("avcodec-52") || libAvcodec.Open("avcodec-51")) seperateLibAvutil = true; else if (libAvcodec.Open("libavcodec")) seperateLibAvutil = false; else { TRACE (1, _codecString << "\tDYNA\tFailed to load FFMPEG libavcodec library"); return false; } if (seperateLibAvutil && !(libAvutil.Open("avutil-50") || libAvutil.Open("avutil-49")) ) { TRACE (1, _codecString << "\tDYNA\tFailed to load FFMPEG libavutil library"); return false; } strcpy(libAvcodec._codecString, _codecString); strcpy(libAvutil._codecString, _codecString); if (!libAvcodec.GetFunction("avcodec_init", (DynaLink::Function &)Favcodec_init)) { TRACE (1, _codecString << "\tDYNA\tFailed to load avcodec_init"); return false; } if (_codec==CODEC_ID_H264) { if (!libAvcodec.GetFunction("h264_decoder", (DynaLink::Function &)Favcodec_h264_decoder)) { TRACE (1, _codecString << "\tDYNA\tFailed to load h264_decoder"); return false; } } if (_codec==CODEC_ID_H263) { if (!libAvcodec.GetFunction("h263_encoder", (DynaLink::Function &)Favcodec_h263_encoder)) { TRACE (1, _codecString << "\tDYNA\tFailed to load h263_encoder" ); return false; } if (!libAvcodec.GetFunction("h263_decoder", (DynaLink::Function &)Favcodec_h263_decoder)) { TRACE (1, _codecString << "\tDYNA\tFailed to load h263_decoder" ); return false; } } if (_codec==CODEC_ID_H263P) { if (!libAvcodec.GetFunction("h263_encoder", (DynaLink::Function &)Favcodec_h263_encoder)) { TRACE (1, _codecString << "\tDYNA\tFailed to load h263_encoder" ); return false; } if (!libAvcodec.GetFunction("h263p_encoder", (DynaLink::Function &)Favcodec_h263p_encoder)) { TRACE (1, _codecString << "\tDYNA\tFailed to load h263p_encoder" ); return false; } if (!libAvcodec.GetFunction("h263_decoder", (DynaLink::Function &)Favcodec_h263_decoder)) { TRACE (1, _codecString << "\tDYNA\tFailed to load h263_decoder" ); return false; } } if (_codec==CODEC_ID_MPEG4) { if (!libAvcodec.GetFunction("mpeg4_encoder", (DynaLink::Function &)mpeg4_encoder)) { TRACE (1, _codecString << "\tDYNA\tFailed to load mpeg4_encoder"); return false; } if (!libAvcodec.GetFunction("mpeg4_decoder", (DynaLink::Function &)mpeg4_decoder)) { TRACE (1, _codecString << "\tDYNA\tFailed to load mpeg4_decoder"); return false; } } if (!libAvcodec.GetFunction("register_avcodec", (DynaLink::Function &)Favcodec_register)) { TRACE (1, _codecString << "\tDYNA\tFailed to load register_avcodec"); return false; } if (!libAvcodec.GetFunction("avcodec_find_encoder", (DynaLink::Function &)Favcodec_find_encoder)) { TRACE (1, _codecString << "\tDYNA\tFailed to load avcodec_find_encoder"); return false; } if (!libAvcodec.GetFunction("avcodec_find_decoder", (DynaLink::Function &)Favcodec_find_decoder)) { TRACE (1, _codecString << "\tDYNA\tFailed to load avcodec_find_decoder"); return false; } if (!libAvcodec.GetFunction("avcodec_alloc_context", (DynaLink::Function &)Favcodec_alloc_context)) { TRACE (1, _codecString << "\tDYNA\tFailed to load avcodec_alloc_context"); return false; } if (!libAvcodec.GetFunction("avcodec_alloc_frame", (DynaLink::Function &)Favcodec_alloc_frame)) { TRACE (1, _codecString << "\tDYNA\tFailed to load avcodec_alloc_frame"); return false; } if (!libAvcodec.GetFunction("avcodec_open", (DynaLink::Function &)Favcodec_open)) { TRACE (1, _codecString << "\tDYNA\tFailed to load avcodec_open"); return false; } if (!libAvcodec.GetFunction("avcodec_close", (DynaLink::Function &)Favcodec_close)) { TRACE (1, _codecString << "\tDYNA\tFailed to load avcodec_close"); return false; } if (!libAvcodec.GetFunction("avcodec_encode_video", (DynaLink::Function &)Favcodec_encode_video)) { TRACE (1, _codecString << "\tDYNA\tFailed to load avcodec_encode_video" ); return false; } if (!libAvcodec.GetFunction("avcodec_decode_video", (DynaLink::Function &)Favcodec_decode_video)) { TRACE (1, _codecString << "\tDYNA\tFailed to load avcodec_decode_video"); return false; } Favcodec_set_dimensions = NULL; //if (ver > 0) { if (!libAvcodec.GetFunction("avcodec_set_dimensions", (DynaLink::Function &)Favcodec_set_dimensions)) { TRACE (1, _codecString << "\tDYNA\tFailed to load avcodec_set_dimensions"); return false; } // } if (!CHECK_AVUTIL("av_malloc", Favcodec_malloc)) { TRACE (1, _codecString << "\tDYNA\tFailed to load av_malloc"); return false; } if (!CHECK_AVUTIL("av_free", Favcodec_free)) { TRACE (1, _codecString << "\tDYNA\tFailed to load av_free"); return false; } if (!libAvcodec.GetFunction("ff_check_alignment", (DynaLink::Function &) Fff_check_alignment)) { TRACE (1, _codecString << "\tDYNA\tFailed to load ff_check_alignment - alignment checks will be skipped"); Fff_check_alignment = NULL; } if(!libAvcodec.GetFunction("avcodec_version", (DynaLink::Function &)Favcodec_version)){ TRACE (1, _codecString << "DYYNA\tFailed to load avcodec_version"); return false; } if (!CHECK_AVUTIL("av_log_set_level", FAv_log_set_level)) { TRACE (1, _codecString << "\tDYNA\tFailed to load av_log_set_level"); return false; } if (!CHECK_AVUTIL("av_log_set_callback", FAv_log_set_callback)) { TRACE (1, _codecString << "\tDYNA\tFailed to load av_log_set_callback"); return false; } WITH_ALIGNED_STACK({ // must be called before using avcodec lib unsigned libVer = Favcodec_version(); if (libVer != LIBAVCODEC_VERSION_INT ) { TRACE (1, _codecString << "\tDYNA\tWarning: compiled against libavcodec headers from version " << (LIBAVCODEC_VERSION_INT >> 16) << ((LIBAVCODEC_VERSION_INT>>8) & 0xff) << (LIBAVCODEC_VERSION_INT & 0xff) << ", loaded " << (libVer >> 16) << ((libVer>>8) & 0xff) << (libVer & 0xff)); } Favcodec_init(); // register only the codecs needed (to have smaller code) if (_codec==CODEC_ID_H264) Favcodec_register(Favcodec_h264_decoder); if (_codec==CODEC_ID_H263) { Favcodec_register(Favcodec_h263_encoder); Favcodec_register(Favcodec_h263_decoder); } if (_codec==CODEC_ID_H263P) { Favcodec_register(Favcodec_h263_encoder); Favcodec_register(Favcodec_h263p_encoder); Favcodec_register(Favcodec_h263_decoder); } if (_codec==CODEC_ID_MPEG4) { Favcodec_register(mpeg4_encoder); Favcodec_register(mpeg4_decoder); } if (FFCheckAlignment() != 0) { TRACE(1, _codecString << "\tDYNA\tff_check_alignment() reports failure - stack alignment is not correct"); } }); isLoadedOK = true; TRACE (4, _codecString << "\tDYNA\tSuccessfully loaded libavcodec library and verified functions"); return true; } AVCodec *FFMPEGLibrary::AvcodecFindEncoder(enum CodecID id) { // char dummy[16]; WITH_ALIGNED_STACK({ AVCodec *res = Favcodec_find_encoder(id); return res; }); } AVCodec *FFMPEGLibrary::AvcodecFindDecoder(enum CodecID id) { // char dummy[16]; WaitAndSignal m(processLock); WITH_ALIGNED_STACK({ AVCodec *res = Favcodec_find_decoder(id); return res; }); } AVCodecContext *FFMPEGLibrary::AvcodecAllocContext(void) { // char dummy[16]; WaitAndSignal m(processLock); WITH_ALIGNED_STACK({ AVCodecContext *res = Favcodec_alloc_context(); return res; }); } AVFrame *FFMPEGLibrary::AvcodecAllocFrame(void) { // char dummy[16]; WaitAndSignal m(processLock); WITH_ALIGNED_STACK({ AVFrame *res = Favcodec_alloc_frame(); return res; }); } int FFMPEGLibrary::AvcodecOpen(AVCodecContext *ctx, AVCodec *codec) { // char dummy[16]; WaitAndSignal m(processLock); WITH_ALIGNED_STACK({ return Favcodec_open(ctx, codec); }); } int FFMPEGLibrary::AvcodecClose(AVCodecContext *ctx) { // char dummy[16]; WaitAndSignal m(processLock); WITH_ALIGNED_STACK({ return Favcodec_close(ctx); }); } int FFMPEGLibrary::AvcodecEncodeVideo(AVCodecContext *ctx, BYTE *buf, int buf_size, const AVFrame *pict) { // char dummy[16]; WITH_ALIGNED_STACK({ int res = Favcodec_encode_video(ctx, buf, buf_size, pict); TRACE_UP(4, _codecString << "\tDYNA\tEncoded " << buf_size << " bytes of YUV420P data into " << res << " bytes"); return res; }); } int FFMPEGLibrary::AvcodecDecodeVideo(AVCodecContext *ctx, AVFrame *pict, int *got_picture_ptr, BYTE *buf, int buf_size) { // char dummy[16]; WITH_ALIGNED_STACK({ int res = Favcodec_decode_video(ctx, pict, got_picture_ptr, buf, buf_size); TRACE_UP(4, _codecString << "\tDYNA\tDecoded video of " << res << " bytes, got_picture=" << *got_picture_ptr); return res; }); } void FFMPEGLibrary::AvcodecFree(void * ptr) { // char dummy[16]; WaitAndSignal m(processLock); WITH_ALIGNED_STACK({ Favcodec_free(ptr); }); } void FFMPEGLibrary::AvSetDimensions(AVCodecContext *s, int width, int height) { // char dummy[16]; WaitAndSignal m(processLock); WITH_ALIGNED_STACK({ Favcodec_set_dimensions(s, width, height); }); } void FFMPEGLibrary::AvLogSetLevel(int level) { // char dummy[16]; WITH_ALIGNED_STACK({ FAv_log_set_level(level); }); } void FFMPEGLibrary::AvLogSetCallback(void (*callback)(void*, int, const char*, va_list)) { // char dummy[16]; WITH_ALIGNED_STACK({ FAv_log_set_callback(callback); }); } int FFMPEGLibrary::FFCheckAlignment(void) { // char dummy[16]; if (Fff_check_alignment == NULL) { TRACE(1, _codecString << "\tDYNA\tff_check_alignment is not supported by libavcodec.so - skipping check"); return 0; } else { return Fff_check_alignment(); } } bool FFMPEGLibrary::IsLoaded() { return isLoadedOK; } h323plus/plugins/video/common/trace.cxx0000644000175000017500000000623311341106277017016 0ustar markmark/*****************************************************************************/ /* The contents of this file are subject to the Mozilla Public License */ /* Version 1.0 (the "License"); you may not use this file except in */ /* compliance with the License. You may obtain a copy of the License at */ /* http://www.mozilla.org/MPL/ */ /* */ /* Software distributed under the License is distributed on an "AS IS" */ /* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the */ /* License for the specific language governing rights and limitations under */ /* the License. */ /* */ /* The Original Code is the Open H323 Library. */ /* */ /* The Initial Developer of the Original Code is Matthias Schneider */ /* Copyright (C) 2007 Matthias Schneider, All Rights Reserved. */ /* */ /* Contributor(s): Matthias Schneider (ma30002000@yahoo.de) */ /* */ /* Alternatively, the contents of this file may be used under the terms of */ /* the GNU General Public License Version 2 or later (the "GPL"), in which */ /* case the provisions of the GPL are applicable instead of those above. If */ /* you wish to allow use of your version of this file only under the terms */ /* of the GPL and not to allow others to use your version of this file under */ /* the MPL, indicate your decision by deleting the provisions above and */ /* replace them with the notice and other provisions required by the GPL. */ /* If you do not delete the provisions above, a recipient may use your */ /* version of this file under either the MPL or the GPL. */ /* */ /* The Original Code was written by Matthias Schneider */ /*****************************************************************************/ #include "trace.h" #ifndef _WIN32 #include #endif unsigned TraceLevel = 0; unsigned TraceLevelUserPlane = 0; void Trace::SetLevel (unsigned level) { TraceLevel = level; } unsigned Trace::GetLevel () { return (TraceLevel); } bool Trace::CanTrace (unsigned level) { return level <= TraceLevel; } void Trace::SetLevelUserPlane (unsigned level) { TraceLevelUserPlane = level; } unsigned Trace::GetLevelUserPlane () { return (TraceLevelUserPlane); } bool Trace::CanTraceUserPlane (unsigned level) { return level <= TraceLevelUserPlane; } ostream & Trace::Start(const char* file, int line) { #if (defined(_WIN32) || defined(SOLARIS)) cerr << setw(16) << file << '(' << line << ")\t"; #else cerr << setw(16) << basename((char *)file) << '(' << line << ")\t"; #endif /* _WIN32 */ return cerr; } h323plus/plugins/video/common/trace.h0000644000175000017500000000620111341106277016436 0ustar markmark/*****************************************************************************/ /* The contents of this file are subject to the Mozilla Public License */ /* Version 1.0 (the "License"); you may not use this file except in */ /* compliance with the License. You may obtain a copy of the License at */ /* http://www.mozilla.org/MPL/ */ /* */ /* Software distributed under the License is distributed on an "AS IS" */ /* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the */ /* License for the specific language governing rights and limitations under */ /* the License. */ /* */ /* The Original Code is the Open H323 Library. */ /* */ /* The Initial Developer of the Original Code is Matthias Schneider */ /* Copyright (C) 2007 Matthias Schneider, All Rights Reserved. */ /* */ /* Contributor(s): Matthias Schneider (ma30002000@yahoo.de) */ /* */ /* Alternatively, the contents of this file may be used under the terms of */ /* the GNU General Public License Version 2 or later (the "GPL"), in which */ /* case the provisions of the GPL are applicable instead of those above. If */ /* you wish to allow use of your version of this file only under the terms */ /* of the GPL and not to allow others to use your version of this file under */ /* the MPL, indicate your decision by deleting the provisions above and */ /* replace them with the notice and other provisions required by the GPL. */ /* If you do not delete the provisions above, a recipient may use your */ /* version of this file under either the MPL or the GPL. */ /* */ /* The Original Code was written by Matthias Schneider */ /*****************************************************************************/ #ifndef __TRACE_H__ #define __TRACE_H__ 1 #define TRACING 1 #include #include using namespace std; class Trace { public: static ostream & Start(const char* file, int line); static bool CanTrace(unsigned level); static unsigned GetLevel(); static void SetLevel(unsigned level); static bool CanTraceUserPlane(unsigned level); static unsigned GetLevelUserPlane(); static void SetLevelUserPlane(unsigned level); }; #if !TRACING #define TRACE(level, args) #else /* TRACING */ #define TRACE(level, text) \ if (Trace::CanTrace(level)) Trace::Start( __FILE__, __LINE__) << text << endl; #define TRACE_UP(level, text) \ if (Trace::CanTraceUserPlane(level)) Trace::Start( __FILE__, __LINE__) << text << endl; #endif /* TRACING */ #endif /* __TRACE_H__ */ h323plus/plugins/video/common/mpi.cxx0000644000175000017500000001214111341106277016500 0ustar markmark/*****************************************************************************/ /* The contents of this file are subject to the Mozilla Public License */ /* Version 1.0 (the "License"); you may not use this file except in */ /* compliance with the License. You may obtain a copy of the License at */ /* http://www.mozilla.org/MPL/ */ /* */ /* Software distributed under the License is distributed on an "AS IS" */ /* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the */ /* License for the specific language governing rights and limitations under */ /* the License. */ /* */ /* The Original Code is the Open H323 Library. */ /* */ /* The Initial Developer of the Original Code is Matthias Schneider */ /* Copyright (C) 2007 Matthias Schneider, All Rights Reserved. */ /* */ /* Contributor(s): Matthias Schneider (ma30002000@yahoo.de) */ /* */ /* Alternatively, the contents of this file may be used under the terms of */ /* the GNU General Public License Version 2 or later (the "GPL"), in which */ /* case the provisions of the GPL are applicable instead of those above. If */ /* you wish to allow use of your version of this file only under the terms */ /* of the GPL and not to allow others to use your version of this file under */ /* the MPL, indicate your decision by deleting the provisions above and */ /* replace them with the notice and other provisions required by the GPL. */ /* If you do not delete the provisions above, a recipient may use your */ /* version of this file under either the MPL or the GPL. */ /* */ /* The Original Code was written by Matthias Schneider */ /*****************************************************************************/ #include "mpi.h" #include #include MPIList::MPIList() { desiredWidth = 176; desiredHeight = 144; minWidth = 176; minHeight = 144; maxWidth = 704; maxHeight = 576; frameTime = 3003; } void MPIList::addMPI (unsigned width, unsigned height, unsigned interval) { MPI newMPI; if (interval == PLUGINCODEC_MPI_DISABLED) return; newMPI.width = width; newMPI.height = height; newMPI.interval = interval; MPIs.push_back (newMPI); } void MPIList::setDesiredWidth (unsigned width) { desiredWidth = width; } void MPIList::setDesiredHeight (unsigned height) { desiredHeight = height; } void MPIList::setMinWidth (unsigned width) { minWidth = width; } void MPIList::setMinHeight (unsigned height) { minHeight = height; } void MPIList::setMaxWidth (unsigned width) { maxWidth = width; } void MPIList::setMaxHeight (unsigned height) { maxHeight = height; } void MPIList::setFrameTime (unsigned _frameTime) { frameTime = _frameTime; } unsigned MPIList::getSupportedMPI( unsigned width, unsigned height){ unsigned i = 0; // No Resolution supported at all if (MPIs.size() == 0) { return PLUGINCODEC_MPI_DISABLED; } // Resolution higher than maximum if ((width > maxWidth) || (height > maxHeight)) return PLUGINCODEC_MPI_DISABLED; // Resolution lower than minimum if ((width < minWidth) || (height < minHeight)) return PLUGINCODEC_MPI_DISABLED; // look for the respective MPI for (i=0; i < MPIs.size(); i++) { if ( (MPIs[i].width == width) && (MPIs[i].height == height) ) { return (((MPIs[i].interval * 3003) > frameTime) ? MPIs[i].interval : frameTime / 3003); } } return PLUGINCODEC_MPI_DISABLED; } bool MPIList::getNegotiatedMPI( unsigned* width, unsigned* height, unsigned* _frameTime) { unsigned i = 0; unsigned minDistance = -1; unsigned minIndex = 0; unsigned distance = 0; if (MPIs.size() == 0) { return false; } // we first find out which supported resolution is closest // to the desired one or matches it for (i=0; i < MPIs.size(); i++) { // we square the value in order to get absolute distances distance = ( abs(MPIs[i].width - desiredWidth ) * abs(MPIs[i].height - desiredHeight) ); if (distance < minDistance) { minDistance = distance; minIndex = i; } } *width = MPIs[minIndex].width; *height = MPIs[minIndex].height; // possibly the supported frame rate is lower than the desired one // however we prefer to stay at the desired resolution with a lower framerate // instead of selecting a different resolution where the framerate is supported if ((MPIs[minIndex].interval * 3003) > frameTime) *_frameTime = MPIs[minIndex].interval * 3003; else *_frameTime = frameTime; return true; } h323plus/plugins/video/H.263-1998/0000755000175000017500000000000011516607134015012 5ustar markmarkh323plus/plugins/video/H.263-1998/Makefile.in0000644000175000017500000000520611447647034017070 0ustar markmark# # Makefile for GSM 06.10 # # Copyright (C) 2004 Post Increment, All Rights Reserved # # The contents of this file are subject to the Mozilla Public License # Version 1.0 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is Open H323 library. # # The Initial Developer of the Original Code is Post Increment # # Contributor(s): Matthias Schneider. # VC_PLUGIN_DIR=@VC_PLUGIN_DIR@ prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ target_os=@target_os@ DL_LIBS =@DL_LIBS@ BASENAME =h263-1998 SONAME =$(BASENAME) COMMONDIR =../common PLUGINDIR =../../ OBJDIR =./obj PLUGINDIR =../.. CC =@CC@ CFLAGS =@CFLAGS@ CXX =@CXX@ LDSO =@LDSO@ PLUGINEXT =@PLUGINEXT@ STDCCFLAGS =@STDCCFLAGS@ LIBAVCODEC_CFLAGS=@LIBAVCODEC_CFLAGS@ LDFLAGS =@LDFLAGS@ -lavcodec -lavutil EXTRACFLAGS =-I$(PLUGINDIR) HAVE_LIBAVCODEC_RTP_MODE=@HAVE_LIBAVCODEC_RTP_MODE@ STDCCFLAGS += -D__STDC_CONSTANT_MACROS ifdef HAVE_LIBAVCODEC_RTP_MODE STDCCFLAGS += -DLIBAVCODEC_RTP_MODE=1 endif ifdef TRACE_FILE CFLAGS += -DTRACE_FILE=1 endif EXTRACCFLAGS += $(LIBAVCODEC_CFLAGS) -I$(COMMONDIR) -I$(PLUGINDIR) STDCCFLAGS += -Wall -Wno-unused -Wformat -Wformat-security -Wreorder -fno-strict-aliasing vpath %.cxx $(COMMONDIR) vpath %.o $(OBJDIR) ifeq ($(VERBOSE),) Q_CC = @echo [CC] `echo $< | sed s^@OPALDIR@/^^` ; Q_LD = @echo [LD] `echo $(PLUGIN) | sed s^@OPALDIR@/^^` ; endif SRCS += h263-1998.cxx \ h263pframe.cxx \ rfc2190.cxx \ $(COMMONDIR)/trace.cxx \ $(COMMONDIR)/mpi.cxx \ $(COMMONDIR)/dyna.cxx $(OBJDIR)/%.o : %.cxx @mkdir -p $(OBJDIR) >/dev/null 2>&1 $(Q_CC)$(CXX) -I../../../include $(EXTRACCFLAGS) $(STDCCFLAGS) $(OPTCCFLAGS) $(CFLAGS) $(EXTRACFLAGS) -c $< -o $@ PLUGIN = ./$(BASENAME)_video_pwplugin.$(PLUGINEXT) STATIC = ./lib$(BASENAME)_video_s.a OBJECTS = $(addprefix $(OBJDIR)/,$(patsubst %.cxx,%.o,$(notdir $(SRCS)))) $(PLUGIN): $(OBJECTS) ifeq (,$(findstring solaris,$(target_os))) $(Q_LD)$(CXX) $(LDSO) $(DL_LIBS) -o $@ $^ $(LDFLAGS) else $(Q_LD)$(CXX) $(LDSO) $(DL_LIBS) $@ -o $@ $^ $(LDFLAGS) endif install: $(PLUGIN) mkdir -p $(DESTDIR)$(libdir)/$(VC_PLUGIN_DIR) install $(PLUGIN) $(DESTDIR)$(libdir)/$(VC_PLUGIN_DIR) uninstall: rm -f $(DESTDIR)$(libdir)/$(VC_PLUGIN_DIR)/$(PLUGIN) clean: rm -f $(OBJECTS) $(PLUGIN) ########################################### h323plus/plugins/video/H.263-1998/ffmpeg_error_patch.txt0000644000175000017500000000172611445327042021413 0ustar markmarkIndex: libavcodec/error_resilience.c =================================================================== --- libavcodec/error_resilience.c (revision 19088) +++ libavcodec/error_resilience.c (working copy) @@ -845,6 +845,8 @@ } av_log(s->avctx, AV_LOG_INFO, "concealing %d DC, %d AC, %d MV errors\n", dc_error, ac_error, mv_error); + s->avctx->decode_error_count += dc_error + ac_error + mv_error; + is_intra_likely= is_intra_more_likely(s); /* set unknown mb-type to most likely */ Index: libavcodec/avcodec.h =================================================================== --- libavcodec/avcodec.h (revision 19088) +++ libavcodec/avcodec.h (working copy) @@ -2510,6 +2510,13 @@ * - decoding: Set by libavcodec */ enum AVChromaLocation chroma_sample_location; + + /** + * Counts the number of decoding errors + */ +#define FFMPEG_HAS_DECODE_ERROR_COUNT 1 + unsigned decode_error_count; + } AVCodecContext; /** h323plus/plugins/video/H.263-1998/rfc2190.h0000644000175000017500000000363611445327042016257 0ustar markmark/* * RFC 2190 packetiser and unpacketiser * * Copyright (C) 2008 Post Increment * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Opal * * Contributor(s): Craig Southeren * */ #ifndef _RFC2190_H_ #define _RFC2190_H_ #include #include #include "../common/rtpframe.h" class RFC2190Depacketizer { public: RFC2190Depacketizer(); void NewFrame(); int SetPacket(const RTPFrame & outputFrame, bool & requestIFrame, bool & isIFrame); std::vector frame; protected: unsigned lastSequence; int LostSync(bool & requestIFrame, const char * reason); bool first; bool skipUntilEndOfFrame; unsigned lastEbit; }; class RFC2190Packetizer { public: RFC2190Packetizer(); ~RFC2190Packetizer(); int Open(unsigned long timeStamp, unsigned long maxLen); int GetPacket(RTPFrame & outputFrame, unsigned int & flags); unsigned char * m_buffer; size_t m_bufferSize; size_t m_bufferLen; unsigned int TR; unsigned int frameSize; int iFrame; int annexD, annexE, annexF, annexG, pQuant, cpm; int macroblocksPerGOB; struct fragment { unsigned length; unsigned mbNum; }; typedef std::list FragmentListType; unsigned long timestamp; FragmentListType fragments; // use list because we want fast insert and delete FragmentListType::iterator currFrag; unsigned char * fragPtr; }; #endif // _RFC2190_H_ h323plus/plugins/video/H.263-1998/h263-1998.cxx0000644000175000017500000023433511516607134016642 0ustar markmark/* * H.263 Plugin codec for OpenH323/OPAL * * This code is based on the following files from the OPAL project which * have been removed from the current build and distributions but are still * available in the CVS "attic" * * src/codecs/h263codec.cxx * include/codecs/h263codec.h * The original files, and this version of the original code, are released under the same * MPL 1.0 license. Substantial portions of the original code were contributed * by Salyens and March Networks and their right to be identified as copyright holders * of the original code portions and any parts now included in this new copy is asserted through * their inclusion in the copyright notices below. * * Copyright (C) 2007 Matthias Schneider * Copyright (C) 2006 Post Increment * Copyright (C) 2005 Salyens * Copyright (C) 2001 March Networks Corporation * Copyright (C) 1999-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): Matthias Schneider (ma30002000@yahoo.de) * Guilhem Tardy (gtardy@salyens.com) * Craig Southeren (craigs@postincrement.com) * */ /* Notes ----- */ #ifndef PLUGIN_CODEC_DLL_EXPORTS #include "plugin-config.h" #endif #define _CRT_SECURE_NO_DEPRECATE #include "h263-1998.h" #include #include #include #include #include "../common/mpi.h" #include "../common/ffmpeg.h" #include "../common/trace.h" #include "../common/dyna.h" #include "tracer.h" #if defined(_WIN32) || defined(_WIN32_WCE) #define STRCMPI _strcmpi #define STRNCMPI strncmp #else #define STRCMPI strcasecmp #define STRNCMPI strncasecmp #endif DECLARE_TRACER extern "C" { #include LIBAVCODEC_HEADER }; static const char * h263_Prefix = "H.263"; static const char * h263P_Prefix = "H.263+"; static const char YUV420PDesc[] = { "YUV420P" }; static const char h263PDesc[] = { "H.263P" }; static const char sdpH263P[] = { "h263-1998" }; static const char h263Desc[] = { "H.263" }; static const char h263QCIFDesc[] = { "H.263-QCIF" }; static const char h263CIFDesc[] = { "H.263-CIF" }; static const char h263720Desc[] = { "H.263-720" }; static const char sdpH263[] = { "h263" }; static struct StdSizes { enum { SQCIF, QCIF, CIF, CIF4, CIF16, NumStdSizes, UnknownStdSize = NumStdSizes }; int width; int height; const char * optionName; } StandardVideoSizes[StdSizes::NumStdSizes] = { { SQCIF_WIDTH, SQCIF_HEIGHT, PLUGINCODEC_SQCIF_MPI }, { QCIF_WIDTH, QCIF_HEIGHT, PLUGINCODEC_QCIF_MPI }, { CIF_WIDTH, CIF_HEIGHT, PLUGINCODEC_CIF_MPI }, { CIF4_WIDTH, CIF4_HEIGHT, PLUGINCODEC_CIF4_MPI }, { CIF16_WIDTH, CIF16_HEIGHT, PLUGINCODEC_CIF16_MPI }, }; static FFMPEGLibrary FFMPEGLibraryInstance(CODEC_ID_H263P); // this callback may receive log data from all FFMPEG based codecs static void logCallbackFFMPEG (void* v, int level, const char* fmt , va_list arg) { char buffer[512]; int severity = 0; if (v) { switch (level) { case AV_LOG_QUIET: severity = 0; break; case AV_LOG_ERROR: severity = 1; break; case AV_LOG_INFO: severity = 4; break; case AV_LOG_DEBUG: severity = 4; break; } sprintf(buffer, "FFMPEG\t"); vsprintf(buffer + strlen(buffer), fmt, arg); if (strlen(buffer) > 0) buffer[strlen(buffer)-1] = 0; if (severity == 4) { TRACE_UP (severity, buffer); } else { TRACE (severity, buffer); } } } ///////////////////////////////////////////////////////////////////////////// static char * num2str(int num) { char buf[20]; sprintf(buf, "%i", num); return strdup(buf); } #if TRACE_FILE static void DumpRTPPayload(Tracer & tracer, const RTPFrame & rtp, int max) { if (max > rtp.GetPayloadSize()) max = rtp.GetPayloadSize(); unsigned char * ptr = rtp.GetPayloadPtr(); tracer.GetStream() << hex << setfill('0') << setprecision(2); while (max-- > 0) tracer.GetStream() << (int) *ptr++ << ' '; tracer.GetStream() << setfill(' ') << dec; } static ostream & RTPDump(Tracer & tracer, const RTPFrame & rtp) { tracer.GetStream() << "seq=" << rtp.GetSequenceNumber() << ",ts=" << rtp.GetTimestamp() << ",mkr=" << rtp.GetMarker() << ",pt=" << (int)rtp.GetPayloadType() << ",ps=" << rtp.GetPayloadSize(); return tracer.GetStream(); } static ostream & RFC2190Dump(Tracer & tracer, const RTPFrame & rtp) { RTPDump(tracer, rtp); if (rtp.GetPayloadSize() > 2) { bool iFrame = false; char mode; unsigned char * payload = rtp.GetPayloadPtr(); if ((payload[0] & 0x80) == 0) { mode = 'A'; iFrame = (payload[1] & 0x10) == 0; } else if ((payload[0] & 0x40) == 0) { mode = 'B'; iFrame = (payload[4] & 0x80) == 0; } else { mode = 'C'; iFrame = (payload[4] & 0x80) == 0; } tracer.GetStream() << "mode=" << mode << ",I=" << (iFrame ? "yes" : "no"); } tracer.GetStream() << ",data="; DumpRTPPayload(tracer, rtp, 10); return tracer.GetStream(); } static ostream & RFC2429Dump(Tracer & tracer, const RTPFrame & rtp) { RTPDump(tracer, rtp); tracer.GetStream() << ",data="; DumpRTPPayload(tracer, rtp, 10); return tracer.GetStream(); } #define CODEC_TRACER_RTP(tracer, text, rtp, func) \ tracer.Start(); tracer.GetStream() << text; func(tracer, rtp); tracer.End() #else #define CODEC_TRACER_RTP(tracer, text, rtp, func) #endif ///////////////////////////////////////////////////////////////////////////// H263_Base_EncoderContext::H263_Base_EncoderContext(const char * _prefix) : _context(NULL) , prefix(_prefix) #if TRACE_FILE , tracer(_prefix, true) #endif { _inputFrameBuffer = NULL; if (!FFMPEGLibraryInstance.IsLoaded()){ return; } } H263_Base_EncoderContext::~H263_Base_EncoderContext() { if (FFMPEGLibraryInstance.IsLoaded()) { CloseCodec(); } free(_inputFrameBuffer); _inputFrameBuffer = NULL; } bool H263_Base_EncoderContext::Open(CodecID codecId) { TRACE_AND_LOG(tracer, 1, "Opening encoder"); _codec = FFMPEGLibraryInstance.AvcodecFindEncoder(codecId); if (_codec == NULL) { TRACE_AND_LOG(tracer, 1, "Codec not found for encoder"); return false; } _context = FFMPEGLibraryInstance.AvcodecAllocContext(); if (_context == NULL) { TRACE_AND_LOG(tracer, 1, "Failed to allocate context for encoder"); return false; } _inputFrame = FFMPEGLibraryInstance.AvcodecAllocFrame(); if (_inputFrame == NULL) { TRACE_AND_LOG(tracer, 1, "Failed to allocate frame for encoder"); return false; } if (!InitContext()) return false; _context->opaque = this; _context->codec = NULL; _context->mb_decision = FF_MB_DECISION_SIMPLE; // choose only one MB type at a time _context->me_method = ME_EPZS; _context->max_b_frames = 0; _context->pix_fmt = PIX_FMT_YUV420P; // X-Lite does not like Custom Picture frequency clocks... _context->time_base.num = 100; _context->time_base.den = 2997; _context->gop_size = 125; // avoid copying input/output _context->flags |= CODEC_FLAG_INPUT_PRESERVED; // we guarantee to preserve input for max_b_frames+1 frames _context->flags |= CODEC_FLAG_EMU_EDGE; // don't draw edges _context->flags |= CODEC_FLAG_PASS1; _context->error_concealment = 3; _context->error_recognition = 5; // debugging flags if (Trace::CanTraceUserPlane(4)) { _context->debug |= FF_DEBUG_RC; _context->debug |= FF_DEBUG_PICT_INFO; _context->debug |= FF_DEBUG_MV; _context->debug |= FF_DEBUG_QP; } _height = CIF_WIDTH; _width = CIF_HEIGHT; SetFrameWidth(_height); SetFrameHeight(_width); SetTargetBitrate(256000); SetTSTO(0); DisableAnnex(D); DisableAnnex(F); DisableAnnex(I); DisableAnnex(K); DisableAnnex(J); DisableAnnex(S); _frameCount = 0; TRACE_AND_LOG(tracer, 3, "encoder created"); return true; } void H263_Base_EncoderContext::SetMaxKeyFramePeriod (unsigned period) { _context->gop_size = period; } void H263_Base_EncoderContext::SetTargetBitrate (unsigned rate) { m_targetBitRate = rate; CODEC_TRACER(tracer, "target bit rate set to " << m_targetBitRate); _context->bit_rate = (m_targetBitRate * 3) >> 2; // average bit rate _context->bit_rate_tolerance = m_targetBitRate >> 1; _context->rc_min_rate = 0; // minimum bitrate _context->rc_max_rate = m_targetBitRate; // maximum bitrate _context->rc_buffer_size = (rate/1000) * 64; /* ratecontrol qmin qmax limiting method 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax. */ _context->rc_qsquish = 0; // limit q by clipping _context->rc_eq = (char*) "1"; // rate control equation } void H263_Base_EncoderContext::SetFrameWidth (unsigned width) { _width = width; FFMPEGLibraryInstance.AvSetDimensions(_context, _width, _height); _inputFrame->linesize[0] = width; _inputFrame->linesize[1] = width / 2; _inputFrame->linesize[2] = width / 2; CODEC_TRACER(tracer, "frame width set to width"); } void H263_Base_EncoderContext::SetFrameHeight (unsigned height) { _height = height; FFMPEGLibraryInstance.AvSetDimensions(_context, _width, _height); CODEC_TRACER(tracer, "frame height set to " << height); } void H263_Base_EncoderContext::SetTSTO (unsigned tsto) { _inputFrame->quality = H263P_MIN_QUANT; _context->max_qdiff = 10; // was 3 // max q difference between frames _context->qcompress = 0.5; // qscale factor between easy & hard scenes (0.0-1.0) _context->i_quant_factor = (float)-0.6; // qscale factor between p and i frames _context->i_quant_offset = (float)0.0; // qscale offset between p and i frames //_context->me_subpel_quality = 8; _context->qmin = H263P_MIN_QUANT; _context->qmax = round ( (31.0 - H263P_MIN_QUANT) / 31.0 * tsto + H263P_MIN_QUANT); _context->qmax = min( _context->qmax, 31); _context->mb_qmin = _context->qmin; _context->mb_qmax = _context->qmax; // Lagrange multipliers - this is how the context defaults do it: _context->lmin = _context->qmin * FF_QP2LAMBDA; _context->lmax = _context->qmax * FF_QP2LAMBDA; CODEC_TRACER(tracer, "TSTO set to " << tsto); } void H263_Base_EncoderContext::EnableAnnex (Annex annex) { switch (annex) { case D: // Annex D: Unrestructed Motion Vectors // Level 2+ // works with eyeBeam, signaled via non-standard "D" _context->flags |= CODEC_FLAG_H263P_UMV; break; case F: // Annex F: Advanced Prediction Mode // does not work with eyeBeam // DO NOT ENABLE THIS FLAG. FFMPEG IS NOT THREAD_SAFE WHEN THIS FLAG IS SET //_context->flags |= CODEC_FLAG_OBMC; break; case I: // Annex I: Advanced Intra Coding // Level 3+ // works with eyeBeam _context->flags |= CODEC_FLAG_AC_PRED; break; case K: // Annex K: // does not work with eyeBeam //_context->flags |= CODEC_FLAG_H263P_SLICE_STRUCT; break; case J: // Annex J: Deblocking Filter // works with eyeBeam _context->flags |= CODEC_FLAG_LOOP_FILTER; break; case T: break; case S: // Annex S: Alternative INTER VLC mode // does not work with eyeBeam //_context->flags |= CODEC_FLAG_H263P_AIV; break; case N: case P: default: break; } } void H263_Base_EncoderContext::DisableAnnex (Annex annex) { switch (annex) { case D: // Annex D: Unrestructed Motion Vectors // Level 2+ // works with eyeBeam, signaled via non-standard "D" _context->flags &= ~CODEC_FLAG_H263P_UMV; break; case F: // Annex F: Advanced Prediction Mode // does not work with eyeBeam _context->flags &= ~CODEC_FLAG_OBMC; break; case I: // Annex I: Advanced Intra Coding // Level 3+ // works with eyeBeam _context->flags &= ~CODEC_FLAG_AC_PRED; break; case K: // Annex K: // does not work with eyeBeam _context->flags &= ~CODEC_FLAG_H263P_SLICE_STRUCT; break; case J: // Annex J: Deblocking Filter // works with eyeBeam _context->flags &= ~CODEC_FLAG_LOOP_FILTER; break; case T: break; case S: // Annex S: Alternative INTER VLC mode // does not work with eyeBeam _context->flags &= ~CODEC_FLAG_H263P_AIV; break; case N: case P: default: break; } } #define CODEC_TRACER_FLAG(tracer, flag) \ CODEC_TRACER(tracer, #flag " is " << ((_context->flags & flag) ? "enabled" : "disabled")); bool H263_Base_EncoderContext::OpenCodec() { if (_codec == NULL) { TRACE_AND_LOG(tracer, 1, "Codec not initialized"); return false; } CODEC_TRACER(tracer, "Size is " << _width << "x" << _height); CODEC_TRACER(tracer, "rc_max_rate is " << _context->rc_max_rate); CODEC_TRACER(tracer, "GOP is " << _context->gop_size); CODEC_TRACER(tracer, "qmin set to " << _context->qmin); CODEC_TRACER(tracer, "qmax set to " << _context->qmax); CODEC_TRACER(tracer, "mb_qmin set to " << _context->mb_qmin); CODEC_TRACER(tracer, "mb_qmax set to " << _context->mb_qmax); CODEC_TRACER(tracer, "bit_rate set to " << _context->bit_rate); CODEC_TRACER(tracer, "bit_rate_tolerance set to " <<_context->bit_rate_tolerance); CODEC_TRACER(tracer, "rc_min_rate set to " << _context->rc_min_rate); CODEC_TRACER_FLAG(tracer, CODEC_FLAG_H263P_UMV); CODEC_TRACER_FLAG(tracer, CODEC_FLAG_OBMC); CODEC_TRACER_FLAG(tracer, CODEC_FLAG_AC_PRED); CODEC_TRACER_FLAG(tracer, CODEC_FLAG_H263P_SLICE_STRUCT) CODEC_TRACER_FLAG(tracer, CODEC_FLAG_LOOP_FILTER); CODEC_TRACER_FLAG(tracer, CODEC_FLAG_H263P_AIV); return FFMPEGLibraryInstance.AvcodecOpen(_context, _codec) == 0; } void H263_Base_EncoderContext::CloseCodec() { if (_context != NULL) { if (_context->codec != NULL) { FFMPEGLibraryInstance.AvcodecClose(_context); } } } void H263_Base_EncoderContext::Lock() { _mutex.Wait(); } void H263_Base_EncoderContext::Unlock() { _mutex.Signal(); } void H263_Base_EncoderContext::AddInputFormat(inputFormats & fmt) { videoInputFormats.push_back(fmt); } int H263_Base_EncoderContext::GetInputFormat(inputFormats & fmt, unsigned maxWidth, unsigned maxHeight) { for (std::list::const_iterator r=videoInputFormats.begin(); r!=videoInputFormats.end(); ++r) { if ((r->w > maxWidth) && (r->h > maxHeight)) continue; for (int i= 0; i < StdSizes::NumStdSizes; i++) { if ((StandardVideoSizes[i].width == (int)r->w) && (StandardVideoSizes[i].height == (int)r->h)) { fmt = *r; return 1; } } } return 0; } ///////////////////////////////////////////////////////////////////////////// H263_RFC2190_EncoderContext::H263_RFC2190_EncoderContext() : H263_Base_EncoderContext("RFC2190") { } H263_RFC2190_EncoderContext::~H263_RFC2190_EncoderContext() { WaitAndSignal m(_mutex); CloseCodec(); if (_context != NULL) { FFMPEGLibraryInstance.AvcodecFree(_context); _context = NULL; } if (_inputFrame != NULL) { FFMPEGLibraryInstance.AvcodecFree(_inputFrame); _inputFrame = NULL; } TRACE_AND_LOG(tracer, 3, "encoder closed"); } //s->avctx->rtp_callback(s->avctx, s->ptr_lastgob, current_packet_size, number_mb) static void rtp_callback(struct AVCodecContext *avctx, void * _data, int size, int mb_nb) { void * opaque = avctx->opaque; H263_RFC2190_EncoderContext * context = (H263_RFC2190_EncoderContext *)opaque; context->RTPCallBack(avctx, _data, size, mb_nb); } void H263_RFC2190_EncoderContext::RTPCallBack(struct AVCodecContext * /*avctx*/, void * _data, int size, int mbCount) { // sometimes, FFmpeg encodes the same frame multiple times // we need to detect this in order to avoid duplicating the encoded data if ((_data == packetizer.m_buffer) && (packetizer.fragments.size() != 0)) { packetizer.fragments.resize(0); currentMb = 0; currentBytes = 0; } // add the fragment to the list RFC2190Packetizer::fragment frag; frag.length = size; frag.mbNum = currentMb; packetizer.fragments.push_back(frag); currentMb = currentMb + mbCount; currentBytes += size; } bool H263_RFC2190_EncoderContext::Open() { if (!H263_Base_EncoderContext::Open(CODEC_ID_H263)) return false; _context->rtp_payload_size = 1400; _context->rtp_callback = &rtp_callback; _context->opaque = (H263_RFC2190_EncoderContext *)this; // used to separate out packets from different encode threads _context->flags &= ~CODEC_FLAG_H263P_UMV; _context->flags &= ~CODEC_FLAG_4MV; // _context->flags &= ~CODEC_FLAG_H263P_AIV; // -? // _context->flags &= ~CODEC_FLAG_H263P_SLICE_STRUCT; // -? SetMaxKeyFramePeriod(H263_KEY_FRAME_INTERVAL); SetMaxRTPFrameSize(H263_PAYLOAD_SIZE); return true; } bool H263_RFC2190_EncoderContext::InitContext() { return true; } void H263_RFC2190_EncoderContext::SetMaxRTPFrameSize (unsigned /*size*/) { //_context->rtp_payload_size = (size * 6 / 7); //if ((size * 6 / 7) > 0) // _context->rtp_payload_size = (size * 6 / 7); // else // _context->rtp_payload_size = size; //_txH263PFrame->SetMaxPayloadSize(size); } int H263_RFC2190_EncoderContext::EncodeFrames(const BYTE * src, unsigned & srcLen, BYTE * dst, unsigned & dstLen, unsigned int & flags) { WaitAndSignal m(_mutex); if (_codec == NULL) { TRACE_AND_LOG(tracer, 1, "Encoder\tCodec not initialized"); return 0; } // create RTP frame from source buffer RTPFrame srcRTP(src, srcLen); // create RTP frame from destination buffer RTPFrame dstRTP(dst, dstLen); dstLen = 0; // if still running out packets from previous frame, then return it if (packetizer.GetPacket(dstRTP, flags) != 0) { CODEC_TRACER_RTP(tracer, "Tx frame:", dstRTP, RFC2190Dump); dstLen = dstRTP.GetHeaderSize() + dstRTP.GetPayloadSize(); return 1; } // zero payload means do nothing if (srcRTP.GetPayloadSize() == 0) { TRACE_AND_LOG(tracer, 1, "Zero payload passed"); dstLen = dstRTP.GetHeaderSize(); dstRTP.SetPayloadSize(0); dstRTP.SetMarker(true); flags |= 1; return 1; } // make sure the source frame is legal if (srcRTP.GetPayloadSize() < sizeof(PluginCodec_Video_FrameHeader)) { TRACE_AND_LOG(tracer, 1, "Video grab too small, closing down video transmission thread."); return 0; } PluginCodec_Video_FrameHeader * header = (PluginCodec_Video_FrameHeader *)srcRTP.GetPayloadPtr(); if (header->x != 0 || header->y != 0) { TRACE_AND_LOG(tracer, 1, "Video grab of partial frame unsupported, closing down video transmission thread."); return 0; } // if this is the first frame, or the frame size has changed, deal wth it if ((_frameCount == 0) || ((unsigned) _width != header->width) || ((unsigned) _height != header->height)) { TRACE_AND_LOG(tracer, 4, "First frame received or resolution has changed - reopening codec"); CloseCodec(); SetFrameWidth(header->width); SetFrameHeight(header->height); if (!OpenCodec()) { TRACE_AND_LOG(tracer, 1, "Reopening codec failed"); return 0; } if (_inputFrameBuffer != NULL) { free(_inputFrameBuffer); _inputFrameBuffer = NULL; } #if HAVE_POSIX_MEMALIGN if (posix_memalign((void **)&_inputFrameBuffer, 64, header->width*header->height*3/2 + (FF_INPUT_BUFFER_PADDING_SIZE*2)) != 0) #else if ((_inputFrameBuffer = (BYTE *)malloc(header->width*header->height*3/2 + (FF_INPUT_BUFFER_PADDING_SIZE*2))) == NULL) #endif { TRACE_AND_LOG(tracer, 1, "Unable to allocate memory for frame buffer"); return 0; } } CODEC_TRACER(tracer, "Input:seq=" << _frameCount << ",size=" << header->width << "x" << header->height << ",I=" << ((flags && forceIFrame) ? "yes" : "no")); ++_frameCount; int size = header->width * header->height; int frameSize = (size * 3) >> 1; // we need FF_INPUT_BUFFER_PADDING_SIZE allocated bytes after the YVU420P image for the encoder memcpy (_inputFrameBuffer, OPAL_VIDEO_FRAME_DATA_PTR(header), frameSize); memset (_inputFrameBuffer + frameSize, 0 , FF_INPUT_BUFFER_PADDING_SIZE); _inputFrame->data[0] = _inputFrameBuffer; _inputFrame->data[1] = _inputFrame->data[0] + size; _inputFrame->data[2] = _inputFrame->data[1] + (size / 4); _inputFrame->pict_type = (flags && forceIFrame) ? FF_I_TYPE : 0; currentMb = 0; currentBytes = 0; packetizer.fragments.resize(0); size_t newOutputSize = 100000; if (packetizer.m_buffer != NULL) { if (packetizer.m_bufferSize < newOutputSize) { free(packetizer.m_buffer); packetizer.m_buffer = NULL; } } if (packetizer.m_buffer == NULL) { packetizer.m_bufferSize = newOutputSize; #if HAVE_POSIX_MEMALIGN if (posix_memalign((void **)&packetizer.m_buffer, 64, packetizer.m_bufferSize) != 0) #else if ((packetizer.m_buffer = (BYTE *)malloc(packetizer.m_bufferSize)) == NULL) #endif { TRACE_AND_LOG(tracer, 1, "Unable to allocate memory for packet buffer"); return 0; } } //CODEC_TRACER(tracer, "Encoder called with " << frameSize << " bytes and frame type " << _inputFrame->pict_type << " at " << header->width << "x" << header->height); int encodedLen = FFMPEGLibraryInstance.AvcodecEncodeVideo(_context, packetizer.m_buffer, packetizer.m_bufferSize, _inputFrame); if (encodedLen < 0) { TRACE_AND_LOG(tracer, 1, "Encoder failed"); return 0; } if (encodedLen == 0) { TRACE_AND_LOG(tracer, 1, "Encoder returned empty frame"); dstRTP.SetPayloadSize(0); dstLen = dstRTP.GetHeaderSize(); flags |= 1; return 1; } packetizer.m_bufferLen = encodedLen; // push the encoded frame through the packetizer #if TRACE_FILE { const unsigned char * p = packetizer.m_buffer; CODEC_TRACER(tracer, "Raw data: " << hex << setfill('0') << setprecision(2) << (int)p[0] << ' ' << (int)p[1] << ' ' << (int)p[2] << ' ' << (int)p[3] << ' ' << (int)p[4] << setfill(' ') << dec); } #endif if (packetizer.Open(srcRTP.GetTimestamp(), encodedLen) < 0) { TRACE_AND_LOG(tracer, 1, "Packetizer failed"); flags = 1; return 0; } CODEC_TRACER(tracer, "Encoder returned " << encodedLen << " bytes as " << packetizer.fragments.size() << " frames"); // return the first encoded block of data if (packetizer.GetPacket(dstRTP, flags)) { CODEC_TRACER_RTP(tracer, "Tx frame:", dstRTP, RFC2190Dump); dstLen = dstRTP.GetHeaderSize() + dstRTP.GetPayloadSize(); } return 1; } ///////////////////////////////////////////////////////////////////////////// H263_RFC2429_EncoderContext::H263_RFC2429_EncoderContext() : H263_Base_EncoderContext("RFC2429") { _txH263PFrame = NULL; } H263_RFC2429_EncoderContext::~H263_RFC2429_EncoderContext() { WaitAndSignal m(_mutex); CloseCodec(); if (_txH263PFrame) delete _txH263PFrame; if (_context != NULL) { FFMPEGLibraryInstance.AvcodecFree(_context); _context = NULL; } if (_inputFrame != NULL) { FFMPEGLibraryInstance.AvcodecFree(_inputFrame); _inputFrame = NULL; } TRACE_AND_LOG(tracer, 3, "encoder closed"); } bool H263_RFC2429_EncoderContext::Open() { if (!H263_Base_EncoderContext::Open(CODEC_ID_H263P)) return false; SetMaxKeyFramePeriod(H263P_KEY_FRAME_INTERVAL); SetMaxRTPFrameSize(H263P_PAYLOAD_SIZE); return true; } bool H263_RFC2429_EncoderContext::InitContext() { _txH263PFrame = new H263PFrame(MAX_YUV420P_FRAME_SIZE); return _txH263PFrame != NULL; } void H263_RFC2429_EncoderContext::SetMaxRTPFrameSize (unsigned size) { if ((size * 6 / 7) > 0) _context->rtp_payload_size = (size * 6 / 7); else _context->rtp_payload_size = size; _txH263PFrame->SetMaxPayloadSize((uint16_t)size); } int H263_RFC2429_EncoderContext::EncodeFrames(const BYTE * src, unsigned & srcLen, BYTE * dst, unsigned & dstLen, unsigned int & flags) { WaitAndSignal m(_mutex); if (_codec == NULL) { TRACE_AND_LOG(tracer, 1, "Codec not initialized"); return 0; } // create RTP frame from source buffer RTPFrame srcRTP(src, srcLen); // create RTP frame from destination buffer RTPFrame dstRTP(dst, dstLen); dstLen = 0; // if there are RTP packets to return, return them if (_txH263PFrame->HasRTPFrames()) { _txH263PFrame->GetRTPFrame(dstRTP, flags); dstLen = dstRTP.GetFrameLen(); CODEC_TRACER_RTP(tracer, "Tx frame:", dstRTP, RFC2429Dump); return 1; } if (srcRTP.GetPayloadSize() < sizeof(PluginCodec_Video_FrameHeader)) { TRACE_AND_LOG(tracer, 1, "Video grab too small, closing down video transmission thread."); return 0; } PluginCodec_Video_FrameHeader * header = (PluginCodec_Video_FrameHeader *)srcRTP.GetPayloadPtr(); if (header->x != 0 || header->y != 0) { TRACE_AND_LOG(tracer, 1, "Video grab of partial frame unsupported, closing down video transmission thread."); return 0; } // if this is the first frame, or the frame size has changed, deal wth it if ((_frameCount == 0) || ((unsigned) _width != header->width) || ((unsigned) _height != header->height)) { TRACE_AND_LOG(tracer, 4, "First frame received or resolution has changed - reopening codec"); CloseCodec(); SetFrameWidth(header->width); SetFrameHeight(header->height); if (!OpenCodec()) { TRACE_AND_LOG(tracer, 1, "Reopening codec failed"); return 0; } if (_inputFrameBuffer != NULL) { free(_inputFrameBuffer); _inputFrameBuffer = NULL; } #if HAVE_POSIX_MEMALIGN if (posix_memalign((void **)&_inputFrameBuffer, 64, header->width*header->height*3/2 + (FF_INPUT_BUFFER_PADDING_SIZE*2)) != 0) { #else if ((_inputFrameBuffer = (BYTE *)malloc(header->width*header->height*3/2 + (FF_INPUT_BUFFER_PADDING_SIZE*2))) != NULL) { #endif TRACE_AND_LOG(tracer, 1, "Unable to allocate memory for frame buffer"); return 0; } } CODEC_TRACER(tracer, "Input:seq=" << _frameCount << ",size=" << header->width << "x" << header->height << ",I=" << ((flags && forceIFrame) ? "yes" : "no")); int size = header->width * header->height; int frameSize = (size * 3) >> 1; // we need FF_INPUT_BUFFER_PADDING_SIZE allocated bytes after the YVU420P image for the encoder memset (_inputFrameBuffer, 0 , FF_INPUT_BUFFER_PADDING_SIZE); memcpy (_inputFrameBuffer + FF_INPUT_BUFFER_PADDING_SIZE, OPAL_VIDEO_FRAME_DATA_PTR(header), frameSize); memset (_inputFrameBuffer + FF_INPUT_BUFFER_PADDING_SIZE + frameSize, 0 , FF_INPUT_BUFFER_PADDING_SIZE); _inputFrame->data[0] = _inputFrameBuffer + FF_INPUT_BUFFER_PADDING_SIZE; _inputFrame->data[1] = _inputFrame->data[0] + size; _inputFrame->data[2] = _inputFrame->data[1] + (size / 4); _inputFrame->pict_type = (flags && forceIFrame) ? FF_I_TYPE : 0; _txH263PFrame->BeginNewFrame(); _txH263PFrame->SetTimestamp(srcRTP.GetTimestamp()); _txH263PFrame->SetFrameSize (FFMPEGLibraryInstance.AvcodecEncodeVideo(_context, _txH263PFrame->GetFramePtr(), frameSize, _inputFrame)); _frameCount++; if (_txH263PFrame->GetFrameSize() == 0) { TRACE_AND_LOG(tracer, 1, "Encoder internal error - there should be outstanding packets at this point"); return 1; } CODEC_TRACER(tracer, "Encoder created " << _txH263PFrame->GetFrameSize() << " output frames"); if (_txH263PFrame->HasRTPFrames()) { _txH263PFrame->GetRTPFrame(dstRTP, flags); dstLen = dstRTP.GetFrameLen(); CODEC_TRACER_RTP(tracer, "Tx frame:", dstRTP, RFC2429Dump); return 1; } return 1; } ///////////////////////////////////////////////////////////////////////////// H263_Base_DecoderContext::H263_Base_DecoderContext(const char * _prefix) : prefix(_prefix) #if TRACE_FILE , tracer(_prefix, false) #endif { if ((_codec = FFMPEGLibraryInstance.AvcodecFindDecoder(CODEC_ID_H263)) == NULL) { TRACE_AND_LOG(tracer, 1, "Codec not found for decoder"); return; } _context = FFMPEGLibraryInstance.AvcodecAllocContext(); if (_context == NULL) { TRACE_AND_LOG(tracer, 1, "Failed to allocate context for decoder"); return; } _outputFrame = FFMPEGLibraryInstance.AvcodecAllocFrame(); if (_outputFrame == NULL) { TRACE_AND_LOG(tracer, 1, "Failed to allocate frame for decoder"); return; } if (!OpenCodec()) { // decoder will re-initialise context with correct frame size TRACE_AND_LOG(tracer, 1, "Failed to open codec for decoder"); return; } _frameCount = 0; // debugging flags if (Trace::CanTrace(4)) { _context->debug |= FF_DEBUG_RC; _context->debug |= FF_DEBUG_PICT_INFO; _context->debug |= FF_DEBUG_MV; } TRACE_AND_LOG(tracer, 4, "Decoder created"); } H263_Base_DecoderContext::~H263_Base_DecoderContext() { CloseCodec(); if (_context != NULL) { FFMPEGLibraryInstance.AvcodecFree(_context); _context = NULL; } if (_outputFrame != NULL) { FFMPEGLibraryInstance.AvcodecFree(_outputFrame); _outputFrame = NULL; } } bool H263_Base_DecoderContext::OpenCodec() { if (_codec == NULL) { TRACE_AND_LOG(tracer, 1, "Codec not initialized"); return 0; } if (FFMPEGLibraryInstance.AvcodecOpen(_context, _codec) < 0) { TRACE_AND_LOG(tracer, 1, "Failed to open H.263 decoder"); return false; } TRACE_AND_LOG(tracer, 4, "Codec opened"); return true; } void H263_Base_DecoderContext::CloseCodec() { if (_context != NULL) { if (_context->codec != NULL) { FFMPEGLibraryInstance.AvcodecClose(_context); TRACE_AND_LOG(tracer, 4, "Closed H.263 decoder" ); } } } /////////////////////////////////////////////////////////////////////////////////// H263_RFC2429_DecoderContext::H263_RFC2429_DecoderContext() : H263_Base_DecoderContext("RFC2429") { _rxH263PFrame = new H263PFrame(MAX_YUV420P_FRAME_SIZE); _skippedFrameCounter = 0; _gotIFrame = false; _gotAGoodFrame = true; } H263_RFC2429_DecoderContext::~H263_RFC2429_DecoderContext() { if (_rxH263PFrame) delete _rxH263PFrame; } bool H263_RFC2429_DecoderContext::DecodeFrames(const BYTE * src, unsigned & srcLen, BYTE * dst, unsigned & dstLen, unsigned int & flags) { TRACE_AND_LOG(tracer, 4, "Codec opened"); // create RTP frame from source buffer RTPFrame srcRTP(src, srcLen); CODEC_TRACER_RTP(tracer, "Tx frame:", srcRTP, RFC2429Dump); // create RTP frame from destination buffer RTPFrame dstRTP(dst, dstLen, 0); dstLen = 0; if (!_rxH263PFrame->SetFromRTPFrame(srcRTP, flags)) { _rxH263PFrame->BeginNewFrame(); flags = (_gotAGoodFrame ? PluginCodec_ReturnCoderRequestIFrame : 0); _gotAGoodFrame = false; return true; } if (srcRTP.GetMarker()==0) { return 1; } if (_rxH263PFrame->GetFrameSize()==0) { _rxH263PFrame->BeginNewFrame(); TRACE_AND_LOG(tracer, 4, "Got an empty frame - skipping"); _skippedFrameCounter++; return 1; } if (!_rxH263PFrame->hasPicHeader()) { TRACE_AND_LOG(tracer, 1, "Received frame has no picture header - dropping"); _rxH263PFrame->BeginNewFrame(); flags = (_gotAGoodFrame ? PluginCodec_ReturnCoderRequestIFrame : 0); _gotAGoodFrame = false; return 1; } // look and see if we have read an I frame. if (!_gotIFrame) { if (!_rxH263PFrame->IsIFrame()) { TRACE_AND_LOG(tracer, 1, "Waiting for an I-Frame"); _rxH263PFrame->BeginNewFrame(); flags = (_gotAGoodFrame ? PluginCodec_ReturnCoderRequestIFrame : 0); _gotAGoodFrame = false; return 1; } _gotIFrame = true; } int gotPicture = 0; TRACE_AND_LOG(tracer, 4, "Decoding " << _rxH263PFrame->GetFrameSize() << " bytes"); int bytesDecoded = FFMPEGLibraryInstance.AvcodecDecodeVideo(_context, _outputFrame, &gotPicture, _rxH263PFrame->GetFramePtr(), _rxH263PFrame->GetFrameSize()); _rxH263PFrame->BeginNewFrame(); if (!gotPicture) { TRACE_AND_LOG(tracer, 1, "Decoded "<< bytesDecoded << " bytes without getting a Picture"); _skippedFrameCounter++; flags = (_gotAGoodFrame ? PluginCodec_ReturnCoderRequestIFrame : 0); _gotAGoodFrame = false; return 1; } TRACE_AND_LOG(tracer, 4, "Decoded " << bytesDecoded << " bytes"<< ", Resolution: " << _context->width << "x" << _context->height); // if error occurred, tell the other end to send another I-frame and hopefully we can resync if (bytesDecoded < 0) { TRACE_AND_LOG(tracer, 1, "Decoded 0 bytes"); flags = (_gotAGoodFrame ? PluginCodec_ReturnCoderRequestIFrame : 0); _gotAGoodFrame = false; return 1; } // if decoded frame size is not legal, request an I-Frame if (_context->width == 0 || _context->height == 0) { TRACE_AND_LOG(tracer, 1, "Received frame with invalid size"); flags = (_gotAGoodFrame ? PluginCodec_ReturnCoderRequestIFrame : 0); _gotAGoodFrame = false; return 1; } _gotAGoodFrame = true; int frameBytes = (_context->width * _context->height * 12) / 8; PluginCodec_Video_FrameHeader * header = (PluginCodec_Video_FrameHeader *)dstRTP.GetPayloadPtr(); header->x = header->y = 0; header->width = _context->width; header->height = _context->height; int size = _context->width * _context->height; if (_outputFrame->data[1] == _outputFrame->data[0] + size && _outputFrame->data[2] == _outputFrame->data[1] + (size >> 2)) { memcpy(OPAL_VIDEO_FRAME_DATA_PTR(header), _outputFrame->data[0], frameBytes); } else { unsigned char *dst = OPAL_VIDEO_FRAME_DATA_PTR(header); for (int i=0; i<3; i ++) { unsigned char *src = _outputFrame->data[i]; int dst_stride = i ? _context->width >> 1 : _context->width; int src_stride = _outputFrame->linesize[i]; int h = i ? _context->height >> 1 : _context->height; if (src_stride==dst_stride) { memcpy(dst, src, dst_stride*h); dst += dst_stride*h; } else { while (h--) { memcpy(dst, src, dst_stride); dst += dst_stride; src += src_stride; } } } } dstRTP.SetPayloadSize(sizeof(PluginCodec_Video_FrameHeader) + frameBytes); dstRTP.SetTimestamp(srcRTP.GetTimestamp()); dstRTP.SetMarker(true); dstLen = dstRTP.GetFrameLen(); flags = PluginCodec_ReturnCoderLastFrame ; _frameCount++; return 1; } H263_RFC2190_DecoderContext::H263_RFC2190_DecoderContext() : H263_Base_DecoderContext("RFC2190") { } H263_RFC2190_DecoderContext::~H263_RFC2190_DecoderContext() { } static bool ReturnEmptyFrame(RTPFrame & dstRTP, unsigned & dstLen, unsigned int & flags) { flags |= PluginCodec_ReturnCoderLastFrame; dstRTP.SetPayloadSize(0); dstLen = 0; return true; } bool H263_RFC2190_DecoderContext::DecodeFrames(const BYTE * src, unsigned & srcLen, BYTE * dst, unsigned & dstLen, unsigned int & flags) { // create RTP frame from source buffer RTPFrame srcRTP(src, srcLen); // create RTP frame from destination RTPFrame dstRTP(dst, dstLen, 0); dstRTP.SetTimestamp(srcRTP.GetTimestamp()); if (dstLen < (12 + sizeof(PluginCodec_Video_FrameHeader))) { flags = 0; TRACE_AND_LOG(tracer, 1, "Destination buffer " << dstLen << " insufficient for video header"); ReturnEmptyFrame(dstRTP, dstLen, flags); } dstLen = 0; CODEC_TRACER_RTP(tracer, "Rx frame:", srcRTP, RFC2190Dump); // push new frame through the depacketiser bool requestIFrame, isIFrame; int code = depacketizer.SetPacket(srcRTP, requestIFrame, isIFrame); if (code <= 0) { flags = requestIFrame ? PluginCodec_ReturnCoderRequestIFrame : 0; return ReturnEmptyFrame(dstRTP, dstLen, flags); } if ((depacketizer.frame.size() < 3) || (depacketizer.frame[0] != 0x00) || (depacketizer.frame[1] != 0x00) || (depacketizer.frame[2] & 0x80) != 0x80) { TRACE_AND_LOG(tracer, 1, "Frame does not start with correct code"); flags = PluginCodec_ReturnCoderRequestIFrame; return ReturnEmptyFrame(dstRTP, dstLen, flags); } TRACE_AND_LOG(tracer, 4, "Decoder called with " << depacketizer.frame.size() << " bytes"); #if FFMPEG_HAS_DECODE_ERROR_COUNT unsigned error_before = _context->decode_error_count; #endif int gotPicture = 0; int bytesDecoded = FFMPEGLibraryInstance.AvcodecDecodeVideo(_context, _outputFrame, &gotPicture, &depacketizer.frame[0], depacketizer.frame.size()); depacketizer.NewFrame(); if (!gotPicture) { flags = PluginCodec_ReturnCoderRequestIFrame; TRACE_AND_LOG(tracer, 1, "Decoded "<< bytesDecoded << " bytes without getting a Picture"); return ReturnEmptyFrame(dstRTP, dstLen, flags); } TRACE_AND_LOG(tracer, 4, "Decoder processed " << bytesDecoded << " bytes, creating frame at " << _context->width << "x" << _context->height); // if error occurred, tell the other end to send another I-frame and hopefully we can resync if (bytesDecoded < 0 #if FFMPEG_HAS_DECODE_ERROR_COUNT || error_before != _context->decode_error_count #endif ) { flags = PluginCodec_ReturnCoderRequestIFrame; return ReturnEmptyFrame(dstRTP, dstLen, flags); } if (bytesDecoded == 0) { return ReturnEmptyFrame(dstRTP, dstLen, flags); } // if decoded frame size is not legal, request an I-Frame if ((_context->width <= 0) || (_context->height <= 0) || (_context->width > CIF4_WIDTH) || (_context->height > CIF4_HEIGHT) || (_context->height * _context->width > (CIF4_WIDTH * CIF4_HEIGHT))) { TRACE_AND_LOG(tracer, 1, "Received frame with invalid size"); flags = PluginCodec_ReturnCoderRequestIFrame; return ReturnEmptyFrame(dstRTP, dstLen, flags); } // create RTP frame from destination buffer unsigned frameBytes = (_context->width * _context->height * 12) / 8; if (dstRTP.GetPayloadSize() - sizeof(PluginCodec_Video_FrameHeader) < frameBytes) { TRACE_AND_LOG(tracer, 1, "Destination buffer size " << dstRTP.GetPayloadSize() << " too small for frame of size " << _context->width << "x" << _context->height); flags = PluginCodec_ReturnCoderRequestIFrame; return ReturnEmptyFrame(dstRTP, dstLen, flags); } PluginCodec_Video_FrameHeader * header = (PluginCodec_Video_FrameHeader *)dstRTP.GetPayloadPtr(); header->x = header->y = 0; header->width = _context->width; header->height = _context->height; int size = _context->width * _context->height; if ((unsigned)dstRTP.GetFrameLen() < (frameBytes + sizeof(PluginCodec_Video_FrameHeader))) { flags = PluginCodec_ReturnCoderRequestIFrame; TRACE_AND_LOG(tracer, 1, "Destination buffer " << dstLen << " insufficient for decoded data size " << header->width << "x" << header->height); return ReturnEmptyFrame(dstRTP, dstLen, flags); } dstRTP.SetPayloadSize(sizeof(PluginCodec_Video_FrameHeader) + frameBytes); dstLen = dstRTP.GetHeaderSize() + dstRTP.GetPayloadSize(); if ( (_outputFrame->data[1] == (_outputFrame->data[0] + size)) && (_outputFrame->data[2] == (_outputFrame->data[1] + (size >> 2))) ) { memcpy(OPAL_VIDEO_FRAME_DATA_PTR(header), _outputFrame->data[0], frameBytes); } else { unsigned char *dst = OPAL_VIDEO_FRAME_DATA_PTR(header); for (int i=0; i<3; i ++) { unsigned char *src = _outputFrame->data[i]; int dst_stride = i ? _context->width >> 1 : _context->width; int src_stride = _outputFrame->linesize[i]; int h = i ? _context->height >> 1 : _context->height; if (src_stride==dst_stride) { memcpy(dst, src, dst_stride*h); dst += dst_stride*h; } else { while (h-- > 0) { memcpy(dst, src, dst_stride); dst += dst_stride; src += src_stride; } } } } dstRTP.SetTimestamp(srcRTP.GetTimestamp()); dstRTP.SetMarker(true); flags = PluginCodec_ReturnCoderLastFrame | (isIFrame ? PluginCodec_ReturnCoderIFrame : 0) | (requestIFrame ? PluginCodec_ReturnCoderRequestIFrame : 0); _frameCount++; return 1; } ///////////////////////////////////////////////////////////////////////////// static int get_codec_options(const struct PluginCodec_Definition * codec, void *, const char *, void * parm, unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(struct PluginCodec_Option **)) return 0; *(const void **)parm = codec->userData; *parmLen = 0; //FIXME return 1; } static int free_codec_options ( const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(char ***)) return 0; char ** strings = (char **) parm; for (char ** string = strings; *string != NULL; string++) free(*string); free(strings); return 1; } static int valid_for_protocol ( const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(char *)) return 0; return (STRCMPI((const char *)parm, "sip") == 0) ? 1 : 0; } ///////////////////////////////////////////////////////////////////////////// static void * create_encoder(const struct PluginCodec_Definition * codec) { H263_Base_EncoderContext * context; if (codec->rtpPayload == RTP_RFC2190_PAYLOAD) context = new H263_RFC2190_EncoderContext(); else context = new H263_RFC2429_EncoderContext(); if (context->Open()) return context; delete context; return NULL; } static void destroy_encoder(const struct PluginCodec_Definition * /*codec*/, void * _context) { H263_Base_EncoderContext * context = (H263_Base_EncoderContext *)_context; delete context; } static int codec_encoder(const struct PluginCodec_Definition * , void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { H263_Base_EncoderContext * context = (H263_Base_EncoderContext *)_context; return context->EncodeFrames((const BYTE *)from, *fromLen, (BYTE *)to, *toLen, *flag); } #define PMAX(a,b) ((a)>=(b)?(a):(b)) #define PMIN(a,b) ((a)<=(b)?(a):(b)) static void FindBoundingBox(const char * const * * parm, int * mpi, int & minWidth, int & minHeight, int & maxWidth, int & maxHeight, int & frameTime, int & targetBitRate, int & maxBitRate) { // initialise the MPI values to disabled int i; for (i = 0; i < 5; i++) mpi[i] = PLUGINCODEC_MPI_DISABLED; // following values will be set while scanning for options minWidth = INT_MAX; minHeight = INT_MAX; maxWidth = 0; maxHeight = 0; int rxMinWidth = QCIF_WIDTH; int rxMinHeight = QCIF_HEIGHT; int rxMaxWidth = QCIF_WIDTH; int rxMaxHeight = QCIF_HEIGHT; int frameRate = 10; // 10 fps int origFrameTime = 900; // 10 fps in video RTP timestamps int maxBR = 0; maxBitRate = 0; targetBitRate = 0; // extract the MPI values set in the custom options, and find the min/max of them frameTime = 0; for (const char * const * option = *parm; *option != NULL; option += 2) { if (STRCMPI(option[0], "MaxBR") == 0) maxBR = atoi(option[1]); else if (STRCMPI(option[0], PLUGINCODEC_OPTION_MAX_BIT_RATE) == 0) maxBitRate = atoi(option[1]); else if (STRCMPI(option[0], PLUGINCODEC_OPTION_TARGET_BIT_RATE) == 0) targetBitRate = atoi(option[1]); else if (STRCMPI(option[0], PLUGINCODEC_OPTION_MIN_RX_FRAME_WIDTH) == 0) rxMinWidth = atoi(option[1]); else if (STRCMPI(option[0], PLUGINCODEC_OPTION_MIN_RX_FRAME_HEIGHT) == 0) rxMinHeight = atoi(option[1]); else if (STRCMPI(option[0], PLUGINCODEC_OPTION_MAX_RX_FRAME_WIDTH) == 0) rxMaxWidth = atoi(option[1]); else if (STRCMPI(option[0], PLUGINCODEC_OPTION_MAX_RX_FRAME_HEIGHT) == 0) rxMaxHeight = atoi(option[1]); else if (STRCMPI(option[0], PLUGINCODEC_OPTION_FRAME_TIME) == 0) origFrameTime = atoi(option[1]); else { for (i = 0; i < 5; i++) { if (STRCMPI(option[0], StandardVideoSizes[i].optionName) == 0) { mpi[i] = atoi(option[1]); if (mpi[i] != PLUGINCODEC_MPI_DISABLED) { int thisTime = 3003*mpi[i]; if (minWidth > StandardVideoSizes[i].width) minWidth = StandardVideoSizes[i].width; if (minHeight > StandardVideoSizes[i].height) minHeight = StandardVideoSizes[i].height; if (maxWidth < StandardVideoSizes[i].width) maxWidth = StandardVideoSizes[i].width; if (maxHeight < StandardVideoSizes[i].height) maxHeight = StandardVideoSizes[i].height; if (thisTime > frameTime) frameTime = thisTime; } } } } } // if no MPIs specified, then the spec says to use QCIF if (frameTime == 0) { int ft; if (frameRate != 0) ft = 90000 / frameRate; else ft = origFrameTime; mpi[1] = (ft + 1502) / 3003; #ifdef DEFAULT_TO_FULL_CAPABILITIES minWidth = QCIF_WIDTH; maxWidth = CIF16_WIDTH; minHeight = QCIF_HEIGHT; maxHeight = CIF16_HEIGHT; #else minWidth = maxWidth = QCIF_WIDTH; minHeight = maxHeight = QCIF_HEIGHT; #endif } // find the smallest MPI size that is larger than the min frame size for (i = 0; i < 5; i++) { if (StandardVideoSizes[i].width >= rxMinWidth && StandardVideoSizes[i].height >= rxMinHeight) { rxMinWidth = StandardVideoSizes[i].width; rxMinHeight = StandardVideoSizes[i].height; break; } } // find the largest MPI size that is smaller than the max frame size for (i = 4; i >= 0; i--) { if (StandardVideoSizes[i].width <= rxMaxWidth && StandardVideoSizes[i].height <= rxMaxHeight) { rxMaxWidth = StandardVideoSizes[i].width; rxMaxHeight = StandardVideoSizes[i].height; break; } } // the final min/max is the smallest bounding box that will enclose both the MPI information and the min/max information minWidth = PMAX(rxMinWidth, minWidth); maxWidth = PMIN(rxMaxWidth, maxWidth); minHeight = PMAX(rxMinHeight, minHeight); maxHeight = PMIN(rxMaxHeight, maxHeight); // turn off any MPI that are outside the final bounding box for (i = 0; i < 5; i++) { if (StandardVideoSizes[i].width < minWidth || StandardVideoSizes[i].width > maxWidth || StandardVideoSizes[i].height < minHeight || StandardVideoSizes[i].height > maxHeight) mpi[i] = PLUGINCODEC_MPI_DISABLED; } // find an appropriate max bit rate if (maxBitRate == 0) { if (maxBR != 0) maxBitRate = maxBR * 100; else if (targetBitRate != 0) maxBitRate = targetBitRate; else maxBitRate = 327000; } else if (maxBR > 0) maxBitRate = PMIN(maxBR * 100, maxBitRate); if (targetBitRate == 0) targetBitRate = 327000; } static int to_normalised_options(const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(char ***)) return 0; // find bounding box enclosing all MPI values int mpi[5]; int minWidth, minHeight, maxHeight, maxWidth, frameTime, targetBitRate, maxBitRate; FindBoundingBox((const char * const * *)parm, mpi, minWidth, minHeight, maxWidth, maxHeight, frameTime, targetBitRate, maxBitRate); char ** options = (char **)calloc(16+(5*2)+2, sizeof(char *)); *(char ***)parm = options; if (options == NULL) return 0; options[ 0] = strdup(PLUGINCODEC_OPTION_MIN_RX_FRAME_WIDTH); options[ 1] = num2str(minWidth); options[ 2] = strdup(PLUGINCODEC_OPTION_MIN_RX_FRAME_HEIGHT); options[ 3] = num2str(minHeight); options[ 4] = strdup(PLUGINCODEC_OPTION_MAX_RX_FRAME_WIDTH); options[ 5] = num2str(maxWidth); options[ 6] = strdup(PLUGINCODEC_OPTION_MAX_RX_FRAME_HEIGHT); options[ 7] = num2str(maxHeight); options[ 8] = strdup(PLUGINCODEC_OPTION_FRAME_TIME); options[ 9] = num2str(frameTime); options[10] = strdup(PLUGINCODEC_OPTION_MAX_BIT_RATE); options[11] = num2str(maxBitRate); options[12] = strdup(PLUGINCODEC_OPTION_TARGET_BIT_RATE); options[13] = num2str(targetBitRate); options[14] = strdup("MaxBR"); options[15] = num2str((maxBitRate+50)/100); for (int i = 0; i < 5; i++) { options[16+i*2] = strdup(StandardVideoSizes[i].optionName); options[16+i*2+1] = num2str(mpi[i]); } return 1; } static int to_customised_options(const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(char ***)) return 0; // find bounding box enclosing all MPI values int mpi[5]; int minWidth, minHeight, maxHeight, maxWidth, frameTime, targetBitRate, maxBitRate; FindBoundingBox((const char * const * *)parm, mpi, minWidth, minHeight, maxWidth, maxHeight, frameTime, targetBitRate, maxBitRate); char ** options = (char **)calloc(14+5*2+2, sizeof(char *)); *(char ***)parm = options; if (options == NULL) return 0; options[ 0] = strdup(PLUGINCODEC_OPTION_MIN_RX_FRAME_WIDTH); options[ 1] = num2str(minWidth); options[ 2] = strdup(PLUGINCODEC_OPTION_MIN_RX_FRAME_HEIGHT); options[ 3] = num2str(minHeight); options[ 4] = strdup(PLUGINCODEC_OPTION_MAX_RX_FRAME_WIDTH); options[ 5] = num2str(maxWidth); options[ 6] = strdup(PLUGINCODEC_OPTION_MAX_RX_FRAME_HEIGHT); options[ 7] = num2str(maxHeight); options[ 8] = strdup(PLUGINCODEC_OPTION_MAX_BIT_RATE); options[ 9] = num2str(maxBitRate); options[10] = strdup(PLUGINCODEC_OPTION_TARGET_BIT_RATE); options[11] = num2str(targetBitRate); options[12] = strdup("MaxBR"); options[13] = num2str((maxBitRate+50)/100); for (int i = 0; i < 5; i++) { options[14+i*2] = strdup(StandardVideoSizes[i].optionName); options[14+i*2+1] = num2str(mpi[i]); } return 1; } static int encoder_set_options(const PluginCodec_Definition *, void * _context, const char * , void * parm, unsigned * parmLen) { H263_Base_EncoderContext * context = (H263_Base_EncoderContext *)_context; if (parmLen == NULL || *parmLen != sizeof(const char **) || parm == NULL) return 0; context->Lock(); context->CloseCodec(); // get the "frame width" media format parameter to use as a hint for the encoder to start off for (const char * const * option = (const char * const *)parm; *option != NULL; option += 2) { if (STRCMPI(option[0], PLUGINCODEC_OPTION_FRAME_WIDTH) == 0) context->SetFrameWidth (atoi(option[1])); if (STRCMPI(option[0], PLUGINCODEC_OPTION_FRAME_HEIGHT) == 0) context->SetFrameHeight (atoi(option[1])); if (STRCMPI(option[0], PLUGINCODEC_OPTION_MAX_FRAME_SIZE) == 0) context->SetMaxRTPFrameSize (atoi(option[1])); if (STRCMPI(option[0], PLUGINCODEC_OPTION_TARGET_BIT_RATE) == 0) context->SetTargetBitrate(atoi(option[1])); if (STRCMPI(option[0], PLUGINCODEC_OPTION_TX_KEY_FRAME_PERIOD) == 0) context->SetMaxKeyFramePeriod (atoi(option[1])); if (STRCMPI(option[0], PLUGINCODEC_OPTION_TEMPORAL_SPATIAL_TRADE_OFF) == 0) context->SetTSTO (atoi(option[1])); if (STRCMPI(option[0], "Annex D") == 0) { if (atoi(option[1]) == 1) { context->EnableAnnex (D); } else { context->DisableAnnex (D); } } if (STRCMPI(option[0], "Annex F") == 0) { if (atoi(option[1]) == 1) { context->EnableAnnex (F); } else { context->DisableAnnex (F); } } if (STRCMPI(option[0], "Annex I") == 0) { if (atoi(option[1]) == 1) { context->EnableAnnex (I); } else { context->DisableAnnex (I); } } if (STRCMPI(option[0], "Annex K") == 0) { if (atoi(option[1]) == 1) { context->EnableAnnex (K); } else { context->DisableAnnex (K); } } if (STRCMPI(option[0], "Annex J") == 0) { if (atoi(option[1]) == 1) { context->EnableAnnex (J); } else { context->DisableAnnex (J); } } if (STRCMPI(option[0], "Annex S") == 0) { if (atoi(option[1]) == 1) { context->EnableAnnex (S); } else { context->DisableAnnex (S); } } } context->OpenCodec(); context->Unlock(); return 1; } int encoder_formats( const struct PluginCodec_Definition * codec, void * _context, const char *, void * parm, unsigned * parmLen) { TRACE(4,"Supported Formats"); if (_context == NULL || parm == NULL || *parmLen != sizeof(char ***)) return 0; H263_Base_EncoderContext * context = (H263_Base_EncoderContext *)_context; char ** options = (char **)parm; if (options == NULL) return 0; for (int i = 0; options[i] != NULL; i += 2) { if(STRNCMPI(options[i], PLUGINCODEC_OPTION_INPUT_FORMAT, strlen(PLUGINCODEC_OPTION_INPUT_FORMAT)) == 0) { inputFormats f; f.w=0; f.h=0; f.r=0; char* token = strtok(options[i+1],","); int j=0; while (token) { switch (j) { case 0: f.w = atoi(token); case 1: f.h = atoi(token); case 2: f.r = atoi(token); } token = strtok(NULL,","); j++; } TRACE(4,"Frame Size w " << f.w << " h " << f.h << " r " << f.r); context->AddInputFormat(f); } } unsigned maxWidth = codec->parm.video.maxFrameWidth; unsigned maxHeight = codec->parm.video.maxFrameHeight; inputFormats fmt; if (context->GetInputFormat(fmt, maxWidth, maxHeight)) { TRACE(2,"Adjusted w " << fmt.w << " h " << fmt.h << " r " << fmt.r); context->Lock(); context->CloseCodec(); context->SetFrameWidth(fmt.w); context->SetFrameHeight(fmt.h); context->OpenCodec(); context->Unlock(); for (int i = 0; options[i] != NULL; i += 2) { if (STRCMPI(options[i], PLUGINCODEC_OPTION_FRAME_TIME) == 0) options[i+1] = num2str(H263_CLOCKRATE/(fmt.r/2)); if (STRCMPI(options[i], PLUGINCODEC_OPTION_FRAME_HEIGHT) == 0) options[i+1] = num2str(fmt.h); if (STRCMPI(options[i], PLUGINCODEC_OPTION_FRAME_WIDTH) == 0) options[i+1] = num2str(fmt.w); } } return 1; } static int encoder_get_output_data_size(const PluginCodec_Definition *, void *, const char *, void *, unsigned *) { return 2000; //FIXME } ///////////////////////////////////////////////////////////////////////////// static void * create_decoder(const struct PluginCodec_Definition * codec) { if (codec->rtpPayload == RTP_RFC2190_PAYLOAD) return new H263_RFC2190_DecoderContext(); else return new H263_RFC2429_DecoderContext(); } static void destroy_decoder(const struct PluginCodec_Definition * /*codec*/, void * _context) { H263_Base_DecoderContext * context = (H263_Base_DecoderContext *)_context; delete context; } static int codec_decoder(const struct PluginCodec_Definition *, void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { H263_Base_DecoderContext * context = (H263_Base_DecoderContext *)_context; return context->DecodeFrames((const BYTE *)from, *fromLen, (BYTE *)to, *toLen, *flag) ? 1 : 0; } static int decoder_get_output_data_size(const PluginCodec_Definition * codec, void *, const char *, void *, unsigned *) { return sizeof(PluginCodec_Video_FrameHeader) + ((codec->parm.video.maxFrameWidth * codec->parm.video.maxFrameHeight * 3) / 2); } ///////////////////////////////////////////////////////////////////////////// static struct PluginCodec_information licenseInfo = { 1145863600, // timestamp = Mon 24 Apr 2006 07:26:40 AM UTC "Matthias Schneider, Craig Southeren" // source code author "Guilhem Tardy, Derek Smithies", "1.0", // source code version "openh323@openh323.org", // source code email "http://sourceforge.net/projects/openh323", // source code URL "Copyright (C) 2007 Matthias Schneider" // source code copyright ", Copyright (C) 2006 by Post Increment" ", Copyright (C) 2005 Salyens" ", Copyright (C) 2001 March Networks Corporation" ", Copyright (C) 1999-2000 Equivalence Pty. Ltd.", "MPL 1.0", // source code license PluginCodec_License_MPL, // source code license "FFMPEG", // codec description "Michael Niedermayer, Fabrice Bellard", // codec author "", // codec version "ffmpeg-devel-request@mplayerhq.hu", // codec email "http://ffmpeg.mplayerhq.hu", // codec URL "Copyright (c) 2000-2001 Fabrice Bellard" // codec copyright information ", Copyright (c) 2002-2003 Michael Niedermayer", "GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1, February 1999", // codec license PluginCodec_License_LGPL // codec license code }; static const char SQCIF_MPI[] = PLUGINCODEC_SQCIF_MPI; static const char QCIF_MPI[] = PLUGINCODEC_QCIF_MPI; static const char CIF_MPI[] = PLUGINCODEC_CIF_MPI; static const char CIF4_MPI[] = PLUGINCODEC_CIF4_MPI; static const char CIF16_MPI[] = PLUGINCODEC_CIF16_MPI; static PluginCodec_ControlDefn EncoderControls[] = { { PLUGINCODEC_CONTROL_VALID_FOR_PROTOCOL, valid_for_protocol }, { PLUGINCODEC_CONTROL_GET_CODEC_OPTIONS, get_codec_options }, { PLUGINCODEC_CONTROL_FREE_CODEC_OPTIONS, free_codec_options }, { PLUGINCODEC_CONTROL_TO_NORMALISED_OPTIONS, to_normalised_options }, { PLUGINCODEC_CONTROL_TO_CUSTOMISED_OPTIONS, to_customised_options }, { PLUGINCODEC_CONTROL_SET_CODEC_OPTIONS, encoder_set_options }, { PLUGINCODEC_CONTROL_SET_FORMAT_OPTIONS, encoder_formats }, { PLUGINCODEC_CONTROL_GET_OUTPUT_DATA_SIZE, encoder_get_output_data_size }, { NULL } }; static PluginCodec_ControlDefn DecoderControls[] = { { PLUGINCODEC_CONTROL_GET_CODEC_OPTIONS, get_codec_options }, { PLUGINCODEC_CONTROL_GET_OUTPUT_DATA_SIZE, decoder_get_output_data_size }, { NULL } }; static struct PluginCodec_Option const sqcifMPI = { PluginCodec_IntegerOption, // Option type SQCIF_MPI, // User visible name false, // User Read/Only flag PluginCodec_MaxMerge, // Merge mode "1", // Initial value "SQCIF", // FMTP option name STRINGIZE(PLUGINCODEC_MPI_DISABLED), // FMTP default value 0, // H.245 generic capability code and bit mask "1", // Minimum value STRINGIZE(PLUGINCODEC_MPI_DISABLED) // Maximum value }; static struct PluginCodec_Option const qcifMPI = { PluginCodec_IntegerOption, // Option type QCIF_MPI, // User visible name false, // User Read/Only flag PluginCodec_MaxMerge, // Merge mode "1", // Initial value "QCIF", // FMTP option name STRINGIZE(PLUGINCODEC_MPI_DISABLED), // FMTP default value 0, // H.245 generic capability code and bit mask "1", // Minimum value STRINGIZE(PLUGINCODEC_MPI_DISABLED) // Maximum value }; static struct PluginCodec_Option const cifMPI = { PluginCodec_IntegerOption, // Option type CIF_MPI, // User visible name false, // User Read/Only flag PluginCodec_MaxMerge, // Merge mode "1", // Initial value "CIF", // FMTP option name STRINGIZE(PLUGINCODEC_MPI_DISABLED), // FMTP default value 0, // H.245 generic capability code and bit mask "1", // Minimum value STRINGIZE(PLUGINCODEC_MPI_DISABLED) // Maximum value }; static struct PluginCodec_Option const cif4MPI = { PluginCodec_IntegerOption, // Option type CIF4_MPI, // User visible name false, // User Read/Only flag PluginCodec_MaxMerge, // Merge mode "1", // Initial value "CIF4", // FMTP option name STRINGIZE(PLUGINCODEC_MPI_DISABLED), // FMTP default value 0, // H.245 generic capability code and bit mask "1", // Minimum value STRINGIZE(PLUGINCODEC_MPI_DISABLED) // Maximum value }; static struct PluginCodec_Option const cif16MPI = { PluginCodec_IntegerOption, // Option type CIF16_MPI, // User visible name false, // User Read/Only flag PluginCodec_MaxMerge, // Merge mode "1", // Initial value "CIF16", // FMTP option name STRINGIZE(PLUGINCODEC_MPI_DISABLED), // FMTP default value 0, // H.245 generic capability code and bit mask "1", // Minimum value STRINGIZE(PLUGINCODEC_MPI_DISABLED) // Maximum value }; static struct PluginCodec_Option const maxBR = { PluginCodec_IntegerOption, // Option type "MaxBR", // User visible name false, // User Read/Only flag PluginCodec_MinMerge, // Merge mode "0", // Initial value "maxbr", // FMTP option name "0", // FMTP default value 0, // H.245 generic capability code and bit mask "0", // Minimum value "32767" // Maximum value }; static struct PluginCodec_Option const mediaPacketization = { PluginCodec_StringOption, // Option type PLUGINCODEC_MEDIA_PACKETIZATION, // User visible name true, // User Read/Only flag PluginCodec_EqualMerge, // Merge mode "RFC2190" // Initial value }; static struct PluginCodec_Option const sifMPI = { PluginCodec_StringOption, "SIF MPI", false, PluginCodec_EqualMerge, "320,240,1", "CUSTOM"}; static struct PluginCodec_Option const sif4MPI = { PluginCodec_StringOption, "SIF4 MPI", false, PluginCodec_EqualMerge, "640,480,1", "CUSTOM"}; static struct PluginCodec_Option const annexF = { PluginCodec_BoolOption, "Annex F", false, PluginCodec_MinMerge, "1", "F", "0" }; static struct PluginCodec_Option const annexI = { PluginCodec_BoolOption, "Annex I", false, PluginCodec_MinMerge, "1", "I", "0" }; static struct PluginCodec_Option const annexJ = { PluginCodec_BoolOption, "Annex J", true, PluginCodec_MinMerge, "1", "J", "0" }; static struct PluginCodec_Option const annexK = { PluginCodec_IntegerOption, "Annex K", true, PluginCodec_EqualMerge, "0", "K", "0", 0, "0", "4" }; static struct PluginCodec_Option const annexN = { PluginCodec_BoolOption, "Annex N", true, PluginCodec_AndMerge, "0", "N", "0" }; static struct PluginCodec_Option const annexP = { PluginCodec_BoolOption, "Annex P", true, PluginCodec_AndMerge, "0", "P", "0" }; static struct PluginCodec_Option const annexT = { PluginCodec_BoolOption, "Annex T", true, PluginCodec_AndMerge, "0", "T", "0" }; static struct PluginCodec_Option const annexD = { PluginCodec_BoolOption, "Annex D", true, PluginCodec_MinMerge, "1", "D", "0" }; static struct PluginCodec_Option const * const h263POptionTable[] = { &qcifMPI, &cifMPI, &sqcifMPI, &cif4MPI, &cif16MPI, &sifMPI, &sif4MPI, &annexF, &annexI, &annexJ, &annexK, &annexN, &annexP, &annexT, &annexD, NULL }; static struct PluginCodec_Option const * const h263OptionTable[] = { &mediaPacketization, &maxBR, //&videoQuality, //&minVideoQuality, //&maxVideoQuality, &qcifMPI, &cifMPI, &sqcifMPI, &cif4MPI, &cif16MPI, &annexF, NULL }; static struct PluginCodec_Option const * const h263QCIFOptionTable[] = { &mediaPacketization, &maxBR, &qcifMPI, NULL }; static struct PluginCodec_Option const * const h263CIFOptionTable[] = { &mediaPacketization, &maxBR, &cifMPI, NULL }; static struct PluginCodec_Option const * const h263CIF4OptionTable[] = { &mediaPacketization, &maxBR, &cif4MPI, NULL }; ///////////////////////////////////////////////////////////////////////////// static struct PluginCodec_Definition h263CodecDefn[] = { /* { // All frame sizes (dynamic) encoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeVideo | // audio codec PluginCodec_RTPTypeShared | // specified RTP type PluginCodec_RTPTypeDynamic, // specified RTP type h263PDesc, // text decription YUV420PDesc, // source format h263PDesc, // destination format h263POptionTable, // user data H263P_CLOCKRATE, // samples per second H263P_BITRATE, // raw bits per second 20000, // nanoseconds per frame CIF4_WIDTH, // frame width CIF4_HEIGHT, // frame height 10, // recommended frame rate 60, // maximum frame rate 0, // IANA RTP payload code sdpH263P, // RTP payload name create_encoder, // create codec function destroy_encoder, // destroy codec codec_encoder, // encode/decode EncoderControls, // codec controls PluginCodec_H323Codec_NoH323, // h323CapabilityType NULL // h323CapabilityData }, { // All frame sizes (dynamic) decoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeVideo | // audio codec PluginCodec_RTPTypeShared | // specified RTP type PluginCodec_RTPTypeDynamic, // specified RTP type h263PDesc, // text decription h263PDesc, // source format YUV420PDesc, // destination format h263POptionTable, // user data H263P_CLOCKRATE, // samples per second H263P_BITRATE, // raw bits per second 20000, // nanoseconds per frame CIF4_WIDTH, // frame width CIF4_HEIGHT, // frame height 10, // recommended frame rate 60, // maximum frame rate 0, // IANA RTP payload code sdpH263P, // RTP payload name create_decoder, // create codec function destroy_decoder, // destroy codec codec_decoder, // encode/decode DecoderControls, // codec controls PluginCodec_H323Codec_NoH323, // h323CapabilityType NULL // h323CapabilityData }, */ { // QCIF only encoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeVideo | // audio codec PluginCodec_RTPTypeExplicit, // specified RTP type h263QCIFDesc, // text decription YUV420PDesc, // source format h263QCIFDesc, // destination format h263QCIFOptionTable, // user data H263_CLOCKRATE, // samples per second H263_BITRATE, // raw bits per second 20000, // nanoseconds per frame {{ QCIF_WIDTH, // frame width QCIF_HEIGHT, // frame height 10, // recommended frame rate 60, // maximum frame rate }}, RTP_RFC2190_PAYLOAD, // IANA RTP payload code sdpH263, // RTP payload name create_encoder, // create codec function destroy_encoder, // destroy codec codec_encoder, // encode/decode EncoderControls, // codec controls PluginCodec_H323VideoCodec_h263, // h323CapabilityType NULL // h323CapabilityData }, { // QCIF only decoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeVideo | // audio codec PluginCodec_RTPTypeExplicit, // specified RTP type h263QCIFDesc, // text decription h263QCIFDesc, // source format YUV420PDesc, // destination format h263QCIFOptionTable, // user data H263_CLOCKRATE, // samples per second H263_BITRATE, // raw bits per second 20000, // nanoseconds per frame {{ QCIF_WIDTH, // frame width QCIF_HEIGHT, // frame height 10, // recommended frame rate 60, // maximum frame rate }}, RTP_RFC2190_PAYLOAD, // IANA RTP payload code sdpH263, // RTP payload name create_decoder, // create codec function destroy_decoder, // destroy codec codec_decoder, // encode/decode DecoderControls, // codec controls PluginCodec_H323VideoCodec_h263, // h323CapabilityType NULL // h323CapabilityData }, { // CIF only encoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeVideo | // video codec PluginCodec_RTPTypeExplicit, // specified RTP type h263CIFDesc, // text decription YUV420PDesc, // source format h263CIFDesc, // destination format h263CIFOptionTable, // user data H263_CLOCKRATE, // samples per second H263_BITRATE, // raw bits per second 20000, // nanoseconds per frame {{ CIF_WIDTH, // frame width CIF_HEIGHT, // frame height 10, // recommended frame rate 60, // maximum frame rate }}, RTP_RFC2190_PAYLOAD, // IANA RTP payload code sdpH263, // RTP payload name create_encoder, // create codec function destroy_encoder, // destroy codec codec_encoder, // encode/decode EncoderControls, // codec controls PluginCodec_H323VideoCodec_h263, // h323CapabilityType NULL // h323CapabilityData }, { // CIF only decoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeVideo | // video codec PluginCodec_RTPTypeExplicit, // specified RTP type h263CIFDesc, // text decription h263CIFDesc, // source format YUV420PDesc, // destination format h263CIFOptionTable, // user data H263_CLOCKRATE, // samples per second H263_BITRATE, // raw bits per second 20000, // nanoseconds per frame {{ CIF_WIDTH, // frame width CIF_HEIGHT, // frame height 10, // recommended frame rate 60, // maximum frame rate }}, RTP_RFC2190_PAYLOAD, // IANA RTP payload code sdpH263, // RTP payload name create_decoder, // create codec function destroy_decoder, // destroy codec codec_decoder, // encode/decode DecoderControls, // codec controls PluginCodec_H323VideoCodec_h263, // h323CapabilityType NULL // h323CapabilityData }, { // 720p encoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeVideo | // video codec PluginCodec_MediaTypeExtVideo | // Extended video codec PluginCodec_RTPTypeExplicit, // specified RTP type h263720Desc, // text decription YUV420PDesc, // source format h263720Desc, // destination format h263CIF4OptionTable, // user data H263_CLOCKRATE, // samples per second H263_CIF4_BITRATE, // raw bits per second 20000, // nanoseconds per frame {{ CIF4_WIDTH, // frame width CIF4_HEIGHT, // frame height 10, // recommended frame rate 60, // maximum frame rate }}, RTP_RFC2190_PAYLOAD, // IANA RTP payload code sdpH263, // RTP payload name create_encoder, // create codec function destroy_encoder, // destroy codec codec_encoder, // encode/decode EncoderControls, // codec controls PluginCodec_H323VideoCodec_h263, // h323CapabilityType NULL // h323CapabilityData }, { // 720p decoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeVideo | // video codec PluginCodec_MediaTypeExtVideo | // Extended video codec PluginCodec_RTPTypeExplicit, // specified RTP type h263720Desc, // text decription h263720Desc, // source format YUV420PDesc, // destination format h263CIF4OptionTable, // user data H263_CLOCKRATE, // samples per second H263_CIF4_BITRATE, // raw bits per second 20000, // nanoseconds per frame {{ CIF4_WIDTH, // frame width CIF4_HEIGHT, // frame height 10, // recommended frame rate 60, // maximum frame rate }}, RTP_RFC2190_PAYLOAD, // IANA RTP payload code sdpH263, // RTP payload name create_decoder, // create codec function destroy_decoder, // destroy codec codec_decoder, // encode/decode DecoderControls, // codec controls PluginCodec_H323VideoCodec_h263, // h323CapabilityType NULL // h323CapabilityData } }; ///////////////////////////////////////////////////////////////////////////// extern "C" { PLUGIN_CODEC_IMPLEMENT(FFMPEG_H263P) PLUGIN_CODEC_DLL_API struct PluginCodec_Definition * PLUGIN_CODEC_GET_CODEC_FN(unsigned * count, unsigned version) { char * debug_level = getenv ("PTLIB_TRACE_CODECS"); if (debug_level!=NULL) { Trace::SetLevel(atoi(debug_level)); } else { Trace::SetLevel(0); } debug_level = getenv ("PTLIB_TRACE_CODECS_USER_PLANE"); if (debug_level!=NULL) { Trace::SetLevelUserPlane(atoi(debug_level)); } else { Trace::SetLevelUserPlane(0); } if (!FFMPEGLibraryInstance.Load()) { *count = 0; TRACE(1, "H.263\tCodec\tDisabled"); return NULL; } FFMPEGLibraryInstance.AvLogSetLevel(AV_LOG_DEBUG); FFMPEGLibraryInstance.AvLogSetCallback(&logCallbackFFMPEG); //avcodec_init(); //avcodec_register_all(); //av_log_set_level(AV_LOG_FATAL); //av_log_set_callback(&logCallbackFFMPEG); if (version < PLUGIN_CODEC_VERSION_OPTIONS) { *count = 0; TRACE(1, "H.263\tCodec\tDisabled - plugin version mismatch"); return NULL; } else { *count = sizeof(h263CodecDefn) / sizeof(struct PluginCodec_Definition); TRACE(1, "H.263\tCodec\tEnabled with " << *count << " definitions"); return h263CodecDefn; } } }; h323plus/plugins/video/H.263-1998/h263_2005.vcproj0000644000175000017500000001274711445327042017400 0ustar markmark h323plus/plugins/video/H.263-1998/h263_2008.vcproj0000644000175000017500000001326511445327042017377 0ustar markmark h323plus/plugins/video/H.263-1998/h263pframe.cxx0000644000175000017500000004027611452443532017423 0ustar markmark/* * H.264 Plugin codec for OpenH323/OPAL * * Copyright (C) Matthias Schneider, All Rights Reserved * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * Contributor(s): Matthias Schneider (ma30002000@yahoo.de) * * */ #include "h263pframe.h" #include "trace.h" #include #include #include #include #include #define MAX_HEADER_SIZE 255 Bitstream::Bitstream () { _data.ptr = NULL; } void Bitstream::SetBytes (uint8_t* data, uint32_t dataLen, uint8_t sbits, uint8_t ebits) { _data.ptr = data; _data.len = dataLen; _data.pos = sbits; _sbits = sbits; _ebits = ebits; } void Bitstream::GetBytes (uint8_t** data, uint32_t * dataLen) { *data = _data.ptr; *dataLen = _data.len; } uint32_t Bitstream::GetBits(uint32_t numBits) { uint32_t ret; ret = PeekBits(numBits); _data.pos += numBits; return (ret); } uint32_t Bitstream::PeekBits(uint32_t numBits) { uint8_t i; uint32_t result = 0; uint32_t offset = _data.pos / 8; uint8_t offsetBits = (uint8_t)(_data.pos % 8); if (((_data.len << 3) -_ebits - _sbits) < (_data.pos + numBits)) { TRACE(1, "H263+\tDeencap\tFrame too short, trying to read " << numBits << " bits at position " << _data.pos << " when frame is only " << ((_data.len << 3) -_ebits - _sbits) << " bits long"); return 0; } for (i=0; i < numBits; i++) { result = result << 1; switch (offsetBits) { case 0: if ((_data.ptr[offset] & 0x80)>>7) result = result | 0x01; break; case 1: if ((_data.ptr[offset] & 0x40)>>6) result = result | 0x01; break; case 2: if ((_data.ptr[offset] & 0x20)>>5) result = result | 0x01; break; case 3: if ((_data.ptr[offset] & 0x10)>>4) result = result | 0x01; break; case 4: if ((_data.ptr[offset] & 0x08)>>3) result = result | 0x01; break; case 5: if ((_data.ptr[offset] & 0x04)>>2) result = result | 0x01; break; case 6: if ((_data.ptr[offset] & 0x02)>>1) result = result | 0x01; break; case 7: if ( _data.ptr[offset] & 0x01) result = result | 0x01; break; } offsetBits++; if (offsetBits>7) {offset++; offsetBits=0;} } return (result); }; void Bitstream::PutBits(uint32_t posBits, uint32_t numBits, uint32_t value) { uint8_t i; posBits += _sbits; uint32_t offset = _data.pos / 8; uint8_t offsetBits = (uint8_t)(_data.pos % 8); static const uint8_t maskClear[8] = { 0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe }; static const uint8_t maskSet[8] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 }; for (i=0; i < numBits; i++) { if (value & (1<<(numBits-i-1))) { _data.ptr[offset] |= maskSet[offsetBits];} else { _data.ptr[offset] &= maskClear[offsetBits];} offsetBits++; if (offsetBits > 7) {offset++; offsetBits=0;} } }; void Bitstream::SetPos(uint32_t pos) { _data.pos = pos; } uint32_t Bitstream::GetPos() { return (_data.pos); } H263PFrame::H263PFrame (uint32_t maxFrameSize) { _timestamp = 0; _maxPayloadSize = 1400; _maxFrameSize = maxFrameSize; _encodedFrame.ptr = (uint8_t*) malloc(maxFrameSize); _picHeader.ptr = (uint8_t*) malloc(MAX_HEADER_SIZE); BeginNewFrame(); } H263PFrame::~H263PFrame () { if (_encodedFrame.ptr) { free(_encodedFrame.ptr); _encodedFrame.ptr = NULL; } if (_picHeader.ptr) { free(_picHeader.ptr); _picHeader.ptr = NULL; } } void H263PFrame::BeginNewFrame () { _encodedFrame.len = 0; _encodedFrame.pos = 0; _picHeader.len = 0; _customClock = false; } void H263PFrame::GetRTPFrame (RTPFrame & frame, unsigned int & flags) { uint32_t i; // this is the first packet of a new frame // we parse the frame for SCs // and later try to split into packets at these borders if (_encodedFrame.pos == 0) { _startCodes.clear(); for (i=0; i < _encodedFrame.len - 1; i++ ) { if ((_encodedFrame.ptr[i] == 0) && (_encodedFrame.ptr[i+1]==0)) { _startCodes.push_back(i); } } if (_encodedFrame.len > _maxPayloadSize) _minPayloadSize = (uint16_t)(_encodedFrame.len / ceil((float)_encodedFrame.len / (float)_maxPayloadSize)); else _minPayloadSize = (uint16_t)_encodedFrame.len; TRACE_UP(4, "H263+\tEncap\tSetting minimal packet size to " << _minPayloadSize << " considering " << ceil((float)_encodedFrame.len / (float)_maxPayloadSize) << " packets for this frame"); } bool hasStartCode = false; uint8_t* dataPtr = frame.GetPayloadPtr(); // RFC 2429 / RFC 4629 header // no extra header, no VRC // we do try to save the 2 bytes of the PSC though dataPtr [0] = 0; if ((_encodedFrame.ptr[_encodedFrame.pos] == 0) && (_encodedFrame.ptr[_encodedFrame.pos + 1] == 0)) { dataPtr[0] |= 0x04; _encodedFrame.pos +=2; } dataPtr [1] = 0; // skip all start codes below _minPayloadSize while ((!_startCodes.empty()) && (_startCodes.front() < _minPayloadSize)) { hasStartCode = true; _startCodes.erase(_startCodes.begin()); } // if there is a startcode between _minPayloadSize and _maxPayloadSize set // the packet boundary there, if not, use _maxPayloadSize if ((!_startCodes.empty()) && ((_startCodes.front() - _encodedFrame.pos) > _minPayloadSize) && ((_startCodes.front() - _encodedFrame.pos) < (unsigned)(_maxPayloadSize - 2))) { frame.SetPayloadSize(_startCodes.front() - _encodedFrame.pos + 2); _startCodes.erase(_startCodes.begin()); } else { if (_encodedFrame.pos + (_maxPayloadSize - 2) <= _encodedFrame.len) frame.SetPayloadSize(_maxPayloadSize); else frame.SetPayloadSize(_encodedFrame.len - _encodedFrame.pos + 2 ); } TRACE_UP(4, "H263+\tEncap\tSending "<< (frame.GetPayloadSize() - 2) <<" bytes at position " << _encodedFrame.pos); memcpy(frame.GetPayloadPtr() + 2, _encodedFrame.ptr + _encodedFrame.pos, frame.GetPayloadSize() - 2); _encodedFrame.pos += frame.GetPayloadSize() - 2; frame.SetTimestamp((unsigned long)_timestamp); if (_encodedFrame.len == _encodedFrame.pos) frame.SetMarker(1); else frame.SetMarker(0); flags = 0; flags |= frame.GetMarker() ? isLastFrame : 0; flags |= IsIFrame() ? isIFrame : 0; } bool H263PFrame::SetFromRTPFrame(RTPFrame & frame, unsigned int & /*flags*/) { if (frame.GetPayloadSize()<3) { TRACE(1, "H263+\tDeencap\tFrame too short (<3)"); return false; } uint8_t* dataPtr = frame.GetPayloadPtr(); uint8_t headerP = dataPtr[0] & 0x04; uint8_t headerV = dataPtr[0] & 0x02; uint8_t headerPLEN = ((dataPtr[0] & 0x01) << 5) + ((dataPtr[1] & 0xF8) >> 3); uint8_t headerPEBITS = (dataPtr[1] & 0x07); uint32_t remBytes; dataPtr += 2; TRACE_UP(4, "H263+\tDeencap\tRFC 2429 Header: P: " << (headerP ? 1 : 0) << " V: " << (headerV ? 1 : 0) << " PLEN: " << (uint32_t) headerPLEN << " PBITS: " << (uint32_t) headerPEBITS); if (headerV) dataPtr++; // We ignore the VRC if (headerPLEN > 0) { if (frame.GetPayloadSize() < headerPLEN + (headerV ? 3U : 2U)) { TRACE(1, "H263+\tDeencap\tFrame too short (header)"); return false; } // we store the extra header for now, but dont do anything with it right now memcpy(_picHeader.ptr + 2, dataPtr, headerPLEN); _picHeader.len = headerPLEN + 2; _picHeader.pebits = headerPEBITS; dataPtr += headerPLEN; } remBytes = frame.GetPayloadSize() - headerPLEN - (headerV ? 3 : 2); if ((_encodedFrame.pos + (headerP ? 2 : 0) + remBytes) > (_maxFrameSize - FF_INPUT_BUFFER_PADDING_SIZE)) { TRACE(1, "H263+\tDeencap\tTrying to add " << remBytes << " bytes to frame at position " << _encodedFrame.pos + (headerP ? 2 : 0) << " bytes while maximum frame size is " << _maxFrameSize << "-" << FF_INPUT_BUFFER_PADDING_SIZE << " bytes"); return false; } if (headerP) { TRACE_UP(4, "H263+\tDeencap\tAdding startcode of 2 bytes to frame of " << remBytes << " bytes"); memset (_encodedFrame.ptr + _encodedFrame.pos, 0, 2); _encodedFrame.pos +=2; _encodedFrame.len +=2; } TRACE_UP(4, "H263+\tDeencap\tAdding " << remBytes << " bytes to frame of " << _encodedFrame.pos << " bytes"); memcpy(_encodedFrame.ptr + _encodedFrame.pos, dataPtr, remBytes); _encodedFrame.pos += remBytes; _encodedFrame.len += remBytes; if (frame.GetMarker()) { if ((headerP) && ((dataPtr[(headerP ? 0 : 2)] & 0xfc) == 0x80)) { uint32_t hdrLen = parseHeader(dataPtr + (headerP ? 0 : 2), frame.GetPayloadSize()- 2 - (headerP ? 0 : 2)); TRACE_UP(4, "H263+\tDeencap\tFrame includes a picture header of " << hdrLen << " bits"); } else { TRACE(1, "H263+\tDeencap\tFrame does not seem to include a picture header"); } } return true; } bool H263PFrame::hasPicHeader () { Bitstream headerBits; headerBits.SetBytes (_encodedFrame.ptr, _encodedFrame.len, 0, 0); if ((headerBits.GetBits(16) == 0) && (headerBits.GetBits(6) == 32)) return true; return false; } bool H263PFrame::IsIFrame () { Bitstream headerBits; if (hasPicHeader()) headerBits.SetBytes (_encodedFrame.ptr, _encodedFrame.len, 0, 0); else return 0; // to be implemented headerBits.SetPos(35); uint32_t PTYPEFormat = headerBits.GetBits(3); if (PTYPEFormat == 7) { // This is the plustype uint32_t UFEP = headerBits.GetBits(3); if (UFEP == 1) { headerBits.SetPos(59); return (headerBits.GetBits(3) == 0); } else return (headerBits.GetBits(3) == 0); } else { headerBits.SetPos(26); return (headerBits.GetBits(1) == 0); } } uint32_t H263PFrame::parseHeader(uint8_t* headerPtr, uint32_t headerMaxLen) { Bitstream headerBits; headerBits.SetBytes (headerPtr, headerMaxLen, 0, 0); unsigned PTYPEFormat = 0; unsigned PLUSPTYPEFormat = 0; unsigned PTCODE = 0; unsigned UFEP = 0; bool PB = false; bool CPM = false; //bool PEI = false; bool SS = false; bool RPS = false; bool PCF = false; bool UMV = false; headerBits.SetPos(6); TRACE_UP(4, "H263+\tHeader\tTR:" << headerBits.GetBits(8)); // TR headerBits.GetBits(2); // PTYPE, skip 1 0 bits TRACE_UP(4, "H263+\tHeader\tSplit Screen: " << headerBits.GetBits(1) << " Document Camera: " << headerBits.GetBits(1) << " Picture Freeze: " << headerBits.GetBits(1)); PTYPEFormat = headerBits.GetBits(3); if (PTYPEFormat == 7) { // This is the plustype UFEP = headerBits.GetBits(3); // PLUSPTYPE if (UFEP==1) { // OPPTYPE PLUSPTYPEFormat = headerBits.GetBits(3); TRACE_UP(4, "H263+\tHeader\tPicture: " << formats[PTYPEFormat] << ", "<< (plusFormats [PLUSPTYPEFormat])); PCF = headerBits.GetBits(1); UMV = headerBits.GetBits(1); _customClock = PCF; TRACE_UP(4, "H263+\tHeader\tPCF: " << PCF << " UMV: " << UMV << " SAC: " << headerBits.GetBits(1) << " AP: " << headerBits.GetBits(1) << " AIC: " << headerBits.GetBits(1) << " DF: " << headerBits.GetBits(1)); SS = headerBits.GetBits(1); RPS = headerBits.GetBits(1); TRACE_UP(4, "H263+\tHeader\tSS: " << SS << " RPS: " << RPS << " ISD: " << headerBits.GetBits(1) << " AIV: " << headerBits.GetBits(1) << " MQ: " << headerBits.GetBits(1)); headerBits.GetBits(4); // skip 1 0 0 0 } PTCODE = headerBits.GetBits(3); if (PTCODE == 2) PB = true; TRACE_UP(4, "H263+\tHeader\tPicture: " << picTypeCodes [PTCODE] // MPPTYPE << " RPR: " << headerBits.GetBits(1) << " RRU: " << headerBits.GetBits(1) << " RTYPE: " << headerBits.GetBits(1)); headerBits.GetBits(3); // skip 0 0 1 CPM = headerBits.GetBits(1); // CPM + PSBI if (CPM) { TRACE_UP(4, "H263+\tHeader\tCPM: " << CPM << " PSBI: " << headerBits.GetBits(2)); } else { TRACE_UP(4, "H263+\tHeader\tCPM: " << CPM ); } if (UFEP == 1) { if (PLUSPTYPEFormat == 6) { uint32_t PAR, width, height; PAR = headerBits.GetBits(4); // PAR width = (headerBits.GetBits(9) + 1) * 4; // PWI headerBits.GetBits(1); // skip 1 height = (headerBits.GetBits(9) + 1) * 4; // PHI TRACE_UP(4, "H263+\tHeader\tAspect Ratio: " << (PARs [PAR]) << " Resolution: " << width << "x" << height); if (PAR == 15) { // EPAR TRACE_UP(4, "H263+\tHeader\tExtended Aspect Ratio: " << headerBits.GetBits(8) << "x" << headerBits.GetBits(8)); } } if (PCF) { double factor, divisor, freq; factor = headerBits.GetBits(1) + 1000; divisor = headerBits.GetBits(7); freq = 1800000 / (divisor * factor); TRACE_UP(4, "H263+\tHeader\tCustom Picture Clock Frequency " << freq); } } if (_customClock) { TRACE_UP(4, "H263+\tHeader\tETR: " << headerBits.GetBits(2)) } if (UFEP == 1) { if (UMV) { if (headerBits.GetBits(1) == 1) { TRACE_UP(4, "H263+\tHeader\tUUI: 1") } else { TRACE_UP(4, "H263+\tHeader\tUUI: 0" << headerBits.GetBits(1)); } } if (SS) { TRACE_UP(4, "H263+\tHeader\tSSS:" << headerBits.GetBits(2)); } } if ((PTCODE==3) || (PTCODE==4) || (PTCODE==5)) { TRACE_UP(4, "H263+\tHeader\tELNUM: " << headerBits.GetBits(4)); if (UFEP==1) TRACE_UP(4, "H263+\tHeader\tRLNUM: " << headerBits.GetBits(4)); } if (RPS) { TRACE_UP(1, "H263+\tHeader\tDecoding of RPS parameters not supported"); return 0; } TRACE_UP(4, "H263+\tHeader\tPQUANT: " << headerBits.GetBits(5)); // PQUANT } else { TRACE_UP(4, "H263+\tHeader\tPicture: " << formats[PTYPEFormat] << ", " << (headerBits.GetBits(1) ? "P-Picture" : "I-Picture") // still PTYPE << " UMV: " << headerBits.GetBits(1) << " SAC: " << headerBits.GetBits(1) << " APC: " << headerBits.GetBits(1)); PB = headerBits.GetBits(1); // PB TRACE_UP(4, "H263+\tHeader\tPB-Frames: " << PB); TRACE_UP(4, "H263+\tHeader\tPQUANT: " << headerBits.GetBits(5)); // PQUANT CPM = headerBits.GetBits(1); if (CPM) { TRACE_UP(4, "H263+\tHeader\tCPM: " << CPM << " PSBI: " << headerBits.GetBits(2)); // CPM + PSBI } else { TRACE_UP(4, "H263+\tHeader\tCPM: " << CPM ); } } if (PB) TRACE_UP(4, "H263+\tHeader\tTRB: " << headerBits.GetBits (3) // TRB << " DBQUANT: " << headerBits.GetBits (2)); // DQUANT while (headerBits.GetBits (1)) { // PEI bit TRACE_UP(4, "H263+\tHeader\tPSUPP: " << headerBits.GetBits (8)); // PSPARE bits } return headerBits.GetPos(); } h323plus/plugins/video/H.263-1998/tracer.h0000644000175000017500000000522211445327042016442 0ustar markmark#ifndef H263_1998_TRACE_H #define H263_1998_TRACE_H #if ! defined TRACE_FILE #define DECLARE_TRACER #define TRACE_AND_LOG(tracer, level, text) #define CODEC_TRACER(tracer, text) #else #include #include #include #include #include #include #include #define TRACE_AND_LOG(tracer, level, text) \ TRACE(level, tracer.GetPrefix() << "\t" << tracer.GetDirection() << "\t" << text); \ tracer.Start() << text; tracer.End(); \ #define CODEC_TRACER(tracer, text) \ tracer.Start() << text; tracer.End(); \ class Tracer { public: Tracer(const char * prefix, bool encoder) : m_prefix(prefix), m_encoder(encoder) { file = -1; Open(); } ~Tracer() { Close(); } std::ostream & GetStream() { return stream; } const char * GetPrefix() const { return m_prefix; } const char * GetDirection() const { return m_encoder ? "Encoder" : "Decoder"; } bool Open() { { WaitAndSignal m(mutex); if (file != -1) return true; WaitAndSignal m2(seqMutex); if (sequence == 0) baseTime = time(NULL); char name[100]; sprintf(name, "h263_%u_%i.log", baseTime, ++sequence); file = creat(name, 0777); if (file == -1) { std::cerr << "Code trace file " << name << " could not be opened" << std::endl; return false; } std::cerr << "Code trace file " << name << " opened" << std::endl; } Start() << m_prefix << (m_encoder ? "En" : "De") << "coder log started"; End(); return true; } bool Close() { Start() << "Log ended"; End(); WaitAndSignal m(mutex); ::close(file); file = -1; return true; } std::ostream & Start() { time_t t = time(NULL); struct tm * tv = localtime(&t); char buffer[100]; strftime(buffer, sizeof(buffer), "%H:%I:%S", tv); mutex.Wait(); stream << buffer << " "; return stream; } void End() { stream << std::endl; std::string str = stream.str(); ::write(file, str.c_str(), str.length()); stream.clear(); stream.str(""); mutex.Signal(); } protected: const char * m_prefix; bool m_encoder; int file; CriticalSection mutex; std::stringstream stream; static CriticalSection seqMutex; static int sequence; static time_t baseTime; }; #define DECLARE_TRACER \ CriticalSection Tracer::seqMutex; \ int Tracer::sequence = 0; \ time_t Tracer::baseTime; \ #endif // TRACE_FILE #endif // H263_1998_TRACE_H h323plus/plugins/video/H.263-1998/h263_2008.sln0000644000175000017500000000156511445327042016670 0ustar markmarkяЛП Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "H.263-1998 (FFMPEG) Video Codec", "h263_2008.vcproj", "{E75AF717-C8A6-40E7-82CB-80D67CE01611}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {E75AF717-C8A6-40E7-82CB-80D67CE01611}.Debug|Win32.ActiveCfg = Debug|Win32 {E75AF717-C8A6-40E7-82CB-80D67CE01611}.Debug|Win32.Build.0 = Debug|Win32 {E75AF717-C8A6-40E7-82CB-80D67CE01611}.Release|Win32.ActiveCfg = Release|Win32 {E75AF717-C8A6-40E7-82CB-80D67CE01611}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal h323plus/plugins/video/H.263-1998/ReadMe.txt0000644000175000017500000000416711445327042016716 0ustar markmarkBuilding and installing FFmpeg on Windows ========================================= Most importantly, don't try to compile FFMpeg for Windows unless you enjoy pain. Seriously. Many have tried and failed. The best way to use FFMpeg on Windows is to use a precompiled shared library version from the Unoffical FFmpeg Win32 Build site http://ffmpeg.arrozcru.org/builds/ The recommended version is r16537, which is also available to download from http://www.opalvoip.org/bin/ffmpeg-r16537-gpl-lshared-win32.tar.bz2 If you simply must compile it yourself, then read on below... Using a precompiled version of FFmpeg ------------------------------------- Method 1 * Download and unpack the pre-compiled tarball into ...\opal\plugins\video\H.263=1998\ffmpeg * Copy the contents of ...\plugins\video\H.263-1998\ffmpeg\bin to C:\PTLib_PlugIns * Compile the H.263-1998 project in the Opal plugins solution Method 2 * Download and unpack the pre-compiled tarball to anywhere you like. The recommended location is C:\FFMPEG. The remainder of these instructions will refer to this directory as %FFMPEG% * Add the directory %FFMPEG%\BIN to the PATH environment variable * Open MSVC and add the directory %FFMPEG%\LIB to the VC++ Lib directories in the Tools->Options menu * Compile the H.263-1998 project in the Opal plugins solution For hard-core fanatics only. ---------------------------- FFmpeg can only be built on Windows using the Msys+MingW toolchain. The FFMpeg on Windows Wiki gives detailed instructions on how to do this. IMPORTANT: You will need to add "c:\msys" to the VSNET2005_PWLIB_CONFIGURE_EXCLUDE_DIRS environment variable to avoid Opal configure from attempting to use the new header files. Note 1: If you experience a "hang" while running the "./configure" for FFmpeg, try opening the Task Manager and killing the "lvprcsrv.exe" process. This is apparently a known issue when compiling with the MingW toolchain. Note 2: If the compile fails with errors relating to "vfw", add the "--disable-devices" option when confguring FFmpeg. h323plus/plugins/video/H.263-1998/rfc2190.cxx0000644000175000017500000003012311452443532016622 0ustar markmark/* * RFC 2190 packetiser and unpacketiser * * Copyright (C) 2008 Post Increment * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Opal * * Contributor(s): Craig Southeren * */ #include #include #include using namespace std; #include "rfc2190.h" #define MAX_PACKET_LEN 1024 const unsigned char PSC[3] = { 0x00, 0x00, 0x80 }; const unsigned char PSC_Mask[3] = { 0xff, 0xff, 0xfc }; static int MacroblocksPerGOBTable[] = { -1, // forbidden -1, // sub-QCIF (144 / 16) * (176 / 16), // QCIF = 99 (288 / 16) * (352 / 16), // CIF = 396 (576 / 32) * (704 / 32), // 4CIF = 396 (1408 / 64) * (1152 / 64), // 16CIF = 396 -1, // Reserved -1 // extended }; static int FindByteAlignedCode(const unsigned char * base, int len, const unsigned char * code, const unsigned char * mask, int codeLen) { const unsigned char * ptr = base; while (len > codeLen) { int i; for (i = 0; i < codeLen; ++i) { if ((ptr[i] & mask[i]) != code[i]) break; } if (i == codeLen) return (int)(ptr - base); ++ptr; --len; } return -1; } static int FindPSC(const unsigned char * base, int len) { return FindByteAlignedCode(base, len, PSC, PSC_Mask, sizeof(PSC)); } #if 0 static int FindGBSC(const unsigned char * base, int len, int & sbit) { // a GBSC is the following bit sequence: // // 0000 0000 0000 0000 1 // // as it may not be byte aligned, we look for byte aligned zero byte and then examine the bytes around it // to see if it is a GOB header // first check to see if we are already pointing to a GBSC if ((base[0] == 0x00) && (base[1] == 0x00) && ((base[2] & 0x80) != 0x80)) return 0; const unsigned char * ptr = base + 1; while (len > 5) { if (ptr[0] == 0x00) { int offs = (int)(ptr - base - 1); sbit = 0; if ( (ptr[1] == 0x00) && ((ptr[2] & 0x80) == 0x80) ) return offs+1; ++sbit; if ( ((ptr[-1] & 0x01) == 0x00) && (ptr[1] == 0x01) ) return offs; ++sbit; if ( ((ptr[-1] & 0x03) == 0x00) && ((ptr[1] & 0xfe) == 0x02) ) return offs; ++sbit; if ( ((ptr[-1] & 0x07) == 0x00) && ((ptr[1] & 0xfc) == 0x04) ) return offs; ++sbit; if ( ((ptr[-1] & 0x0f) == 0x00) && ((ptr[1] & 0xf8) == 0x08) ) return offs; ++sbit; if ( ((ptr[-1] & 0x1f) == 0x00) && ((ptr[1] & 0xf0) == 0x10) ) return offs; ++sbit; if ( ((ptr[-1] & 0x3f) == 0x00) && ((ptr[1] & 0xe0) == 0x20) ) return offs; ++sbit; if ( ((ptr[-1] & 0x7f) == 0x00) && ((ptr[1] & 0xc0) == 0x40) ) return offs; } ++ptr; --len; } return -1; } #endif ///////////////////////////////////////////////////////////////////////////////////////3Y RFC2190Packetizer::RFC2190Packetizer() { m_buffer = NULL; } RFC2190Packetizer::~RFC2190Packetizer() { free(m_buffer); m_buffer = NULL; } int RFC2190Packetizer::Open(unsigned long _timestamp, unsigned long /*maxLen*/) { // do a sanity check on the fragment data - must be equal to maxLen { unsigned long len = 0; FragmentListType::iterator r; for (r = fragments.begin(); r != fragments.end(); ++r) len += r->length; // if (len != maxLen) // cout << "rfc2190: mismatch between encoder length and fragment length - " << len << "/" << maxLen << endl; } // save timestamp timestamp = _timestamp; const unsigned char * data = m_buffer; size_t dataLen = m_bufferSize; // make sure data is at least long enough to contain PSC, TR & minimum PTYPE, PQUANT and CPM if (dataLen < 7) return -1; // ensure data starts with PSC // 0 1 2 // 0000 0000 0000 0000 1000 00.. if (FindPSC(data, dataLen) != 0) return -2; // get TR // 2 3 // .... ..XX XXXX XX.. TR = ((data[2] << 6) & 0xfc) | (data[3] >> 2); // make sure mandatory part of PTYPE is present // 3 // .... ..10 if ((data[3] & 0x03) != 2) return -3; // we don't do split screen, document indicator, full picture freeze // 4 // XXX. .... if ((data[4] & 0xe0) != 0) return -4; // get image size // 4 // ...X XX.. frameSize = (data[4] >> 2) & 0x7; macroblocksPerGOB = MacroblocksPerGOBTable[frameSize]; if (macroblocksPerGOB == -1) return -6; // get I-frame flag // 4 // .... ..X. iFrame = (data[4] & 2) == 0; // get annex bits: // Annex D - unrestricted motion vector mode // Annex E - syntax-based arithmetic coding mode // Annex F - advanced prediction mode // Annex G - PB-frames mode // // 4 5 // .... ...X XXX. .... annexD = data[4] & 0x01; annexE = data[5] & 0x80; annexF = data[5] & 0x40; annexG = data[5] & 0x20; // annex G not supported if (annexG) return -5; // get PQUANT // 5 // ...X XXXX pQuant = data[5] & 0x1f; // get CPM // 6 // X... .... cpm = (data[6] & 0x80) != 0; // ensure PEI is always 0 // 6 // .X.. .... if ((data[6] & 0x40) != 0) return -6; #if 0 cout << "TR=" << TR << ",size=" << frameSize << ",I=" << iFrame << ",D=" << annexD << ",E=" << annexE << ",F=" << annexF << ",G=" << annexG << ",PQUANT=" << pQuant << endl; #endif // split fragments longer than the maximum FragmentListType::iterator r; for (r = fragments.begin(); r != fragments.end(); ++r) { while (r->length > MAX_PACKET_LEN) { int oldLen = r->length; int newLen = MAX_PACKET_LEN; if ((oldLen - newLen) < MAX_PACKET_LEN) newLen = oldLen / 2; fragment oldFrag = *r; r = fragments.erase(r); fragment frag; frag.length = newLen; frag.mbNum = oldFrag.mbNum; r = fragments.insert(r, frag); frag.length = oldLen - newLen; frag.mbNum = oldFrag.mbNum; r = fragments.insert(r, frag); // for loop will move r to next entry } } // reset pointers to start of fragments currFrag = fragments.begin(); fragPtr = m_buffer; return 0; } int RFC2190Packetizer::GetPacket(RTPFrame & outputFrame, unsigned int & flags) { while ((fragments.size() != 0) && (currFrag != fragments.end())) { // set the timestamp outputFrame.SetTimestamp(timestamp); fragment frag = *currFrag++; // if this fragment starts with a GBSC, then output as Mode A else output as Mode B bool modeA = ((frag.length >= 3) && (fragPtr[0] == 0x00) && (fragPtr[1] == 0x00) && ((fragPtr[2] & 0x80) == 0x80)); size_t payloadRemaining = outputFrame.GetFrameLen() - outputFrame.GetHeaderSize(); // offset of the data size_t offs = modeA ? 4 : 8; // make sure RTP storage is sufficient if ((frag.length + offs) > payloadRemaining) { //std::cout << "no room for Mode " << (modeA ? 'A' : 'B') << " frame - " << (frag.length+offs) << " > " << payloadRemaining << std::endl; continue; } // set size of final frame outputFrame.SetPayloadSize(offs + frag.length); // get ptr to payload that is about to be created unsigned char * ptr = outputFrame.GetPayloadPtr(); if (modeA) { int sBit = 0; int eBit = 0; ptr[0] = (unsigned char)(((sBit & 7) << 3) | (eBit & 7)); ptr[1] = (unsigned char)((frameSize << 5) | (iFrame ? 0 : 0x10) | (annexD ? 0x08 : 0) | (annexE ? 0x04 : 0) | (annexF ? 0x02 : 0)); ptr[2] = ptr[3] = 0; } else { // create the Mode B header int sBit = 0; int eBit = 0; int gobn = frag.mbNum / macroblocksPerGOB; int mba = frag.mbNum % macroblocksPerGOB; ptr[0] = (unsigned char)(0x80 | ((sBit & 7) << 3) | (eBit & 7)); ptr[1] = (unsigned char)(frameSize << 5); ptr[2] = (unsigned char)(((gobn << 3) & 0xf8) | ((mba >> 6) & 0x7)); ptr[3] = (unsigned char)((mba << 2) & 0xfc); ptr[4] = (iFrame ? 0 : 0x80) | (annexD ? 0x40 : 0) | (annexE ? 0x20 : 0) | (annexF ? 0x010: 0); ptr[5] = ptr[6] = ptr[7] = 0; } // copy the data memcpy(ptr + offs, fragPtr, frag.length); fragPtr += frag.length; // set marker bit flags = 0; if (currFrag == fragments.end()) { flags |= 1; outputFrame.SetMarker(1); } if (iFrame) flags |= 2; return 1; } return 0; } ///////////////////////////////////////////////////////////////////////////////////////3Y RFC2190Depacketizer::RFC2190Depacketizer() { NewFrame(); } void RFC2190Depacketizer::NewFrame() { frame.resize(0); first = true; skipUntilEndOfFrame = false; lastEbit = 8; } int RFC2190Depacketizer::LostSync(bool & requestIframe, const char * /*reason*/) { skipUntilEndOfFrame = true; requestIframe = true; return 0; } int RFC2190Depacketizer::SetPacket(const RTPFrame & inputFrame, bool & requestIFrame, bool & isIFrame) { requestIFrame = false; isIFrame = false; // ignore packets if required if (skipUntilEndOfFrame) { if (inputFrame.GetMarker()) NewFrame(); return 0; } // check if packet is in sequence. If not, skip til end of frame if (first) { NewFrame(); // make sure this is called before "first = false" first = false; lastSequence = inputFrame.GetSequenceNumber(); } else { ++lastSequence; if (inputFrame.GetSequenceNumber() != lastSequence) { return LostSync(requestIFrame, "missed frame"); } } unsigned payloadLen = inputFrame.GetPayloadSize(); // payload must be at least as long as mode A header + 1 byte if (payloadLen < 5) return LostSync(requestIFrame, "payload too small"); unsigned char * payload = inputFrame.GetPayloadPtr(); unsigned int sbit = (payload[0] >> 3) & 0x07; unsigned hdrLen; char mode; // handle mode A frames if ((payload[0] & 0x80) == 0) { isIFrame = (payload[1] & 0x10) == 0; hdrLen = 4; mode = 'A'; #if 0 // sanity check data if (payloadLen < (hdrLen+3) || (payload[hdrLen+0] != 0x00) || (payload[hdrLen+1] != 0x00) || ((payload[hdrLen+2] & 0x80) != 0x80) ) { return LostSync(requestIFrame, "Mode A packet not starting with GBSC"); } #endif } // handle mode B frames else if ((payload[0] & 0x40) == 0) { if (payloadLen < 9) return LostSync(requestIFrame, "mode B payload too small"); isIFrame = (payload[4] & 0x80) == 0; hdrLen = 8; mode = 'B'; } // handle mode C frames else { if (payloadLen < 13) return LostSync(requestIFrame, "mode C payload too small"); isIFrame = (payload[4] & 0x80) == 0; hdrLen = 12; mode = 'C'; } // if ebit and sbit do not add up, then we have lost sync if (((sbit + lastEbit) & 0x7) != 0) { return LostSync(requestIFrame, "mismatched ebit and sbit"); } unsigned char * src = payload + hdrLen; size_t cpyLen = payloadLen - hdrLen; // handle first partial byte if ((sbit != 0) && (frame.size() > 0)) { static unsigned char smasks[7] = { 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01 }; unsigned smask = smasks[sbit-1]; frame[frame.size()-1] |= (*src & smask); --cpyLen; ++src; } // copy whole bytes if (cpyLen > 0) { size_t frameSize = frame.size(); frame.resize(frameSize + cpyLen); memcpy(&frame[0] + frameSize, src, cpyLen); } // keep ebit for next time lastEbit = payload[0] & 0x07; // return 0 if no frame yet, return 1 if frame is available if (!inputFrame.GetMarker()) return 0; return 1; } h323plus/plugins/video/H.263-1998/h263-1998.h0000644000175000017500000002277311445327042016266 0ustar markmark/* * H.263 Plugin codec for OpenH323/OPAL * * This code is based on the following files from the OPAL project which * have been removed from the current build and distributions but are still * available in the CVS "attic" * * src/codecs/h263codec.cxx * include/codecs/h263codec.h * The original files, and this version of the original code, are released under the same * MPL 1.0 license. Substantial portions of the original code were contributed * by Salyens and March Networks and their right to be identified as copyright holders * of the original code portions and any parts now included in this new copy is asserted through * their inclusion in the copyright notices below. * * Copyright (C) 2007 Matthias Schneider * Copyright (C) 2006 Post Increment * Copyright (C) 2005 Salyens * Copyright (C) 2001 March Networks Corporation * Copyright (C) 1999-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): Matthias Schneider (ma30002000@yahoo.de) * Guilhem Tardy (gtardy@salyens.com) * Craig Southeren (craigs@postincrement.com) * */ /* Notes ----- */ #ifndef __H263P_1998_H__ #define __H263P_1998_H__ 1 #include #include "h263pframe.h" #include "rfc2190.h" #include "critsect.h" #if TRACE_FILE #include "tracer.h" #endif typedef unsigned char BYTE; #define H263P_CLOCKRATE 90000 #define H263P_BITRATE 327600 #define H263P_PAYLOAD_SIZE 600 #define H263P_FRAME_RATE 25 #define H263P_KEY_FRAME_INTERVAL 125 #define H263P_MIN_QUANT 2 #define H263_CLOCKRATE 90000 #define H263_QCIF_BITRATE 192000 #define H263_CIF_BITRATE 327600 #define H263_BITRATE 327600 #define H263_CIF4_BITRATE 984000 #define H263_PAYLOAD_SIZE 1400 #define RTP_RFC2190_PAYLOAD 34 #define H263_KEY_FRAME_INTERVAL 125 #define H263_FRAME_RATE 30 #define CIF_WIDTH 352 #define CIF_HEIGHT 288 #define CIF4_WIDTH (CIF_WIDTH*2) #define CIF4_HEIGHT (CIF_HEIGHT*2) #define CIF16_WIDTH (CIF_WIDTH*4) #define CIF16_HEIGHT (CIF_HEIGHT*4) #define QCIF_WIDTH (CIF_WIDTH/2) #define QCIF_HEIGHT (CIF_HEIGHT/2) #define QCIF4_WIDTH (CIF4_WIDTH/2) #define QCIF4_HEIGHT (CIF4_HEIGHT/2) #define SQCIF_WIDTH 128 #define SQCIF_HEIGHT 96 #define MAX_YUV420P_FRAME_SIZE (((CIF16_WIDTH * CIF16_HEIGHT * 3) / 2) + (FF_INPUT_BUFFER_PADDING_SIZE*2)) enum Annex { D, F, I, K, J, S, T, N, P }; // Input formats from the input device. struct inputFormats { unsigned w; unsigned h; unsigned r; }; class H263_Base_EncoderContext { public: H263_Base_EncoderContext(const char * prefix); virtual ~H263_Base_EncoderContext(); virtual bool Open() = 0; virtual bool Open(CodecID codecId); virtual int EncodeFrames(const BYTE * src, unsigned & srcLen, BYTE * dst, unsigned & dstLen, unsigned int & flags) = 0; void SetMaxKeyFramePeriod (unsigned period); void SetTargetBitrate (unsigned rate); void SetFrameWidth (unsigned width); void SetFrameHeight (unsigned height); void SetTSTO (unsigned tsto); void EnableAnnex (Annex annex); void DisableAnnex (Annex annex); bool OpenCodec(); void CloseCodec(); void Lock(); void Unlock(); void AddInputFormat(inputFormats & fmt); int GetInputFormat(inputFormats & fmt , unsigned maxWidth, unsigned maxHeight); virtual void SetMaxRTPFrameSize (unsigned size) = 0; int m_targetBitRate; protected: virtual bool InitContext() = 0; unsigned char * _inputFrameBuffer; AVCodec *_codec; AVCodecContext *_context; AVFrame *_inputFrame; int _frameCount; int _width, _height; CriticalSection _mutex; const char * prefix; #if TRACE_FILE Tracer tracer; #endif std::list videoInputFormats; }; //////////////////////////////////////////////////////////////////////////// class H263_RFC2190_EncoderContext : public H263_Base_EncoderContext { public: H263_RFC2190_EncoderContext(); ~H263_RFC2190_EncoderContext(); bool Open(); bool InitContext(); void SetMaxRTPFrameSize (unsigned size); int EncodeFrames(const BYTE * src, unsigned & srcLen, BYTE * dst, unsigned & dstLen, unsigned int & flags); void RTPCallBack(struct AVCodecContext *avctx, void * _data, int size, int mbCount); protected: bool Init(); RFC2190Packetizer packetizer; unsigned currentMb; unsigned currentBytes; }; //////////////////////////////////////////////////////////////////////////// class H263_RFC2429_EncoderContext : public H263_Base_EncoderContext { public: H263_RFC2429_EncoderContext(); ~H263_RFC2429_EncoderContext(); bool Open(); bool InitContext(); void SetMaxRTPFrameSize (unsigned size); int EncodeFrames(const BYTE * src, unsigned & srcLen, BYTE * dst, unsigned & dstLen, unsigned int & flags); protected: bool Init(); H263PFrame * _txH263PFrame; }; //////////////////////////////////////////////////////////////////////////// class H263_Base_DecoderContext { public: H263_Base_DecoderContext(const char * prefix); ~H263_Base_DecoderContext(); virtual bool DecodeFrames(const BYTE * src, unsigned & srcLen, BYTE * dst, unsigned & dstLen, unsigned int & flags) = 0; protected: bool OpenCodec(); void CloseCodec(); AVCodec *_codec; AVCodecContext *_context; AVFrame *_outputFrame; int _frameCount; CriticalSection _mutex; const char * prefix; #if TRACE_FILE Tracer tracer; #endif }; //////////////////////////////////////////////////////////////////////////// class H263_RFC2190_DecoderContext : public H263_Base_DecoderContext { public: H263_RFC2190_DecoderContext(); ~H263_RFC2190_DecoderContext(); bool DecodeFrames(const BYTE * src, unsigned & srcLen, BYTE * dst, unsigned & dstLen, unsigned int & flags); protected: RFC2190Depacketizer depacketizer; }; //////////////////////////////////////////////////////////////////////////// class H263_RFC2429_DecoderContext : public H263_Base_DecoderContext { public: H263_RFC2429_DecoderContext(); ~H263_RFC2429_DecoderContext(); bool DecodeFrames(const BYTE * src, unsigned & srcLen, BYTE * dst, unsigned & dstLen, unsigned int & flags); protected: unsigned int _skippedFrameCounter; bool _gotIFrame; bool _gotAGoodFrame; H263PFrame* _rxH263PFrame; }; //////////////////////////////////////////////////////////////////////////// static int valid_for_protocol ( const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen); static int get_codec_options ( const struct PluginCodec_Definition * codec, void *, const char *, void * parm, unsigned * parmLen); static int free_codec_options ( const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen); static void * create_encoder ( const struct PluginCodec_Definition *); static void destroy_encoder ( const struct PluginCodec_Definition *, void * _context); static int codec_encoder ( const struct PluginCodec_Definition *, void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag); static int to_normalised_options ( const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen); static int to_customised_options ( const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen); static int encoder_set_options ( const struct PluginCodec_Definition *, void * _context, const char *, void * parm, unsigned * parmLen); static int encoder_formats ( const struct PluginCodec_Definition *, void *, const char *, void * parm, unsigned * parmLen); static int encoder_get_output_data_size ( const PluginCodec_Definition *, void *, const char *, void *, unsigned *); static void * create_decoder ( const struct PluginCodec_Definition *); static void destroy_decoder ( const struct PluginCodec_Definition *, void * _context); static int codec_decoder ( const struct PluginCodec_Definition *, void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag); static int decoder_get_output_data_size ( const PluginCodec_Definition * codec, void *, const char *, void *, unsigned *); ///////////////////////////////////////////////////////////////////////////// #endif /* __H263P_1998_H__ */ h323plus/plugins/video/H.263-1998/h263pframe.h0000644000175000017500000001175711445674604017062 0ustar markmark/* * H.264 Plugin codec for OpenH323/OPAL * * Copyright (C) Matthias Schneider, All Rights Reserved * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * Contributor(s): Matthias Schneider (ma30002000@yahoo.de) * * */ #ifndef __H263PFrame_H__ #define __H263PFrame_H__ 1 #include #include #include #include "rtpframe.h" #include "../common/ffmpeg.h" extern "C" { #include LIBAVCODEC_HEADER }; enum codecInFlags { silenceFrame = 1, forceIFrame = 2 }; enum codecOutFlags { isLastFrame = 1, isIFrame = 2, requestIFrame = 4 }; typedef struct data_t { uint8_t* ptr; uint32_t pos; uint32_t len; } data_t; typedef struct header_data_t { uint8_t* ptr; uint32_t len; uint32_t pebits; } header_data_t; class Bitstream { public: Bitstream (); void SetBytes (uint8_t* data, uint32_t dataLen, uint8_t sbits, uint8_t ebits); void GetBytes (uint8_t** data, uint32_t * dataLen); uint32_t GetBits (uint32_t numBits); uint32_t PeekBits (uint32_t numBits); void PutBits(uint32_t posBits, uint32_t numBits, uint32_t value); void SetPos(uint32_t pos); uint32_t GetPos(); private: data_t _data; uint8_t _sbits; uint8_t _ebits; }; static const char formats[8][64] = { "forbidden", "sub-QCIF", "QCIF", "CIF", "4CIF", "16CIF", "reserved", "extended PTYPE" }; static const char picTypeCodes[8][64] = { "I-Picture", "P-Picture", "improved PB-frame", "B-Picture", "EI-Picture", "EP-Picture", "reserved (110)", "reserved (111)" }; static const char plusFormats[8][64] = { "forbidden", "sub-QCIF", "QCIF", "CIF", "4CIF", "16CIF", "custom format", "reserved" }; static const char PARs[16][64] = { "forbidden", "1:1 (Square)", "12:11 (CIF for 4:3 picture)", "10:11 (525-type for 4:3 picture)", "16:11 (CIF stretched for 16:9 picture)", "40:33 (525-type stretched for 16:9 picture)", "reserved (0110)", "reserved (0111)", "reserved (1000)", "reserved (1001)", "reserved (1010)", "reserved (1011)", "reserved (1100)", "reserved (1101)", "reserved (1110)", "Extended PAR" }; class H263PFrame { public: H263PFrame(uint32_t maxFrameSize); ~H263PFrame(); void BeginNewFrame(); void GetRTPFrame (RTPFrame & frame, unsigned int & flags); bool SetFromRTPFrame (RTPFrame & frame, unsigned int & flags); bool HasRTPFrames () { return (_encodedFrame.pos < _encodedFrame.len); } uint8_t* GetFramePtr () { memset (_encodedFrame.ptr + _encodedFrame.pos,0 , FF_INPUT_BUFFER_PADDING_SIZE); return (_encodedFrame.ptr); } void SetFrameSize (uint32_t size) { _encodedFrame.len = size; } uint32_t GetFrameSize () { return (_encodedFrame.len); } void SetMaxPayloadSize (uint16_t maxPayloadSize) { _maxPayloadSize = maxPayloadSize; } void SetTimestamp (uint64_t timestamp) { _timestamp = timestamp; } bool hasPicHeader (); bool IsIFrame (); private: uint32_t parseHeader(uint8_t* headerPtr, uint32_t headerMaxLen); uint64_t _timestamp; uint16_t _maxPayloadSize; uint16_t _minPayloadSize; uint32_t _maxFrameSize; bool _customClock; data_t _encodedFrame; header_data_t _picHeader; std::vector _startCodes; }; #endif /* __H263PFrame_H__ */ h323plus/plugins/configure.ac0000644000175000017500000004624711445621630015075 0ustar markmarkAC_INIT(configure.ac) if test \! -e ./aclocal.m4 ; then echo "aclocal.m4 not found in $PWD, running aclocal to make it." if aclocal ; then if test -e ./aclocal.m4 ; then echo "aclocal.m4 generated." else echo "aclocal ran in $PWD but failed to generate aclocal.m4" exit fi else echo "ERROR running 'aclocal' in $PWD" exit fi fi PKG_PROG_PKG_CONFIG() AC_CANONICAL_TARGET() m4_include(../opal.m4) OPAL_DETERMINE_DEBUG() CFLAGS="$DEFAULT_CFLAGS $CFLAGS" CXXFLAGS="$DEFAULT_CFLAGS $CXXFLAGS" AC_PROG_CXX AC_PROG_CC AC_PROG_INSTALL AC_PROG_RANLIB AC_CHECK_TOOL([NM], [nm], [:]) AC_CHECK_TOOL([LDD], [ldd], [:]) AC_CHECK_TOOL([OBJDUMP], [objdump], [:]) AC_HEADER_STDC AC_CHECK_HEADERS([stddef.h limits.h float.h fcntl.h]) dnl Enable compiler warnings dnl if test "x$ac_cv_c_compiler_gnu" = xyes; then dnl for later... dnl CFLAGS="$CFLAGS -Wall -Wextra -Winit-self -Wswitch-default -Wswitch-enum -Wstrict-aliasing=2 -Wfloat-equal -Wshadow -Wno-comment -Wno-missing-field-initializers -Wno-unused" dnl CXXFLAGS="$CXXFLAGS -Wall -Wextra -Winit-self -Wswitch-default -Wswitch-enum -Wstrict-aliasing=2 -Wfloat-equal -Wshadow -Wno-comment -Wno-missing-field-initializers -Wno-unused" dnl fi dnl ######################################################################## dnl Directories dnl ######################################################################## OPAL_DETERMINE_VERSION([..]) OPAL_DETERMINE_PLUGIN_DIR() AC_PLUGIN_DIR="${PLUGIN_DIR}/codecs/audio" VC_PLUGIN_DIR="${PLUGIN_DIR}/codecs/video" LID_PLUGIN_DIR="${PLUGIN_DIR}/lid" FAX_PLUGIN_DIR="${PLUGIN_DIR}/fax" AC_SUBST(prefix) AC_SUBST(exec_prefix) AC_SUBST(libdir) AC_SUBST(target_os) AC_SUBST(AC_PLUGIN_DIR) AC_SUBST(VC_PLUGIN_DIR) AC_SUBST(LID_PLUGIN_DIR) AC_SUBST(FAX_PLUGIN_DIR) dnl ######################################################################## dnl Platform specific section dnl ######################################################################## WIN32=no LDSO= case "$target_os" in solaris*) STDCCFLAGS="$STDCCFLAGS -KPIC" LDSO="-Bdynamic -G -h" PLUGINEXT=so AC_CHECK_HEADERS([sys/time.h sys/file.h netinet/in.h]) AC_FUNC_FORK() ;; darwin*) CFLAGS="$CFLAGS -fno-common -dynamic" LDSO="-dynamiclib -multiply_defined suppress" STDCCFLAGS="$STDCCFLAGS -fPIC -D__MACOSX__" case "$target_cpu" in x86 | i686 | i586 | i486 | i386 ) STDCCFLAGS="${STDCCFLAGS} -m486" ;; esac PLUGINEXT=dylib AC_CHECK_HEADERS([sys/time.h sys/file.h netinet/in.h]) AC_FUNC_FORK() ;; cygwin*|mingw**) LDSO="-module -avoid-version -shared" PLUGINEXT=dll WIN32=yes AC_CHECK_HEADERS([malloc.h]) AC_DEFINE([PLUGIN_CODEC_DLL_EXPORTS], [1], [For win32 build]) ;; *) STDCCFLAGS="$STDCCFLAGS -fPIC" LDSO='-shared -Wl,-soname,$(SONAME)' PLUGINEXT=so AC_CHECK_HEADERS([sys/time.h sys/file.h netinet/in.h]) AC_FUNC_FORK() ;; esac AC_SUBST(LDSO) AC_SUBST(PLUGINEXT) AC_SUBST(CFLAGS) AC_SUBST(STDCCFLAGS) AC_SUBST(WIN32) dnl ######################################################################## dnl Defaults dnl ######################################################################## HAVE_VPB=yes HAVE_CAPI=yes HAVE_IXJ=no HAVE_H263=yes HAVE_H263P=yes HAVE_H264=yes HAVE_CELT=yes HAVE_SPANDSP=yes DEFAULT_TO_FULL_CAPABILITIES=yes HAVE_X264=yes X264_LINK_STATIC=no LIBAVCODEC_STACKALIGN_HACK=no case "$target_os" in darwin*) HAVE_VPB=no HAVE_CAPI=no ;; cygwin*|mingw**) HAVE_VPB=no HAVE_CAPI=no X264_LINK_STATIC=yes ;; esac dnl ######################################################################## dnl Audio Codecs dnl ######################################################################## dnl ######################## dnl libgsm (system/local) dnl ######################## AC_ARG_ENABLE([localgsm], [AC_HELP_STRING([--enable-localgsm],[Force use local version of GSM library rather than system version])], [localgsm=$enableval], [localgsm=]) if test "x${localgsm}" = "xyes" ; then AC_MSG_NOTICE(Forcing use of local GSM sources) GSM_SYSTEM=no elif test "x${localgsm}" = "xno" ; then AC_MSG_NOTICE(Forcing use of system GSM library) OPAL_FIND_GSM([HAVE_GSM=yes], [HAVE_GSM=no]) if test "x${HAVE_GSM}" != "xyes" ; then AC_MSG_ERROR([cannot find system GSM]) else GSM_SYSTEM=yes fi else OPAL_FIND_GSM([HAVE_GSM=yes], [HAVE_GSM=no]) if test "x${HAVE_GSM}" = "xyes" ; then GSM_SYSTEM=yes else GSM_SYSTEM=no fi fi if test "x${GSM_SYSTEM}" = "xyes" ; then AC_SUBST(GSM_CFLAGS) AC_SUBST(GSM_LIBS) AC_MSG_RESULT(using system GSM) fi AC_SUBST(GSM_SYSTEM) dnl ######################## dnl speex (system/local) dnl ######################## OPAL_SPEEX_TYPES() AC_SUBST(SIZE16) AC_SUBST(SIZE32) OPAL_DETERMINE_SPEEX() AC_SUBST(SPEEX_SYSTEM) AC_SUBST(SPEEX_CFLAGS) AC_SUBST(SPEEX_LIBS) dnl ######################## dnl iLBC (system/local) dnl ######################## OPAL_DETERMINE_ILBC() AC_SUBST(ILBC_SYSTEM) AC_SUBST(ILBC_CFLAGS) AC_SUBST(ILBC_LIBS) dnl ######################################################################## dnl sbc,Bluetooth SBC for telephony with CD quality AC_ARG_ENABLE([sbc], [AC_HELP_STRING([--enable-sbc],[enable use of Bluetooth SBC for CD quality telephony])], [has_sbc=$enableval], [has_sbc=]) if test "$has_sbc" = "yes" ; then AC_CHECK_LIB(samplerate,src_get_version,has_samplerate=yes,has_samplerate=no) if test "$has_samplerate" = "yes" ; then HAVE_SBC=yes AC_DEFINE(HAVE_SBC, [1], [Enable SBC codec]) AC_MSG_NOTICE(Enabling SBC codec) fi fi AC_SUBST(HAVE_SBC) dnl ######################################################################## dnl Video Codecs dnl ######################################################################## dnl ######################## dnl Capabilities option dnl ######################## OPAL_SIMPLE_OPTION([default-to-full-capabilties],[DEFAULT_TO_FULL_CAPABILITIES], [default to full capabilities at empty fmtp lines]) dnl ######################## dnl libavcodec (ffmpeg) dnl ######################## AC_ARG_ENABLE([libavcodec], [AC_HELP_STRING([--disable-libavcodec],[disable libavcodec support])], [HAVE_LIBAVCODEC=$enableval]) if test "x$HAVE_LIBAVCODEC" = "xno" ; then AC_MSG_RESULT(Manually disabled libavcodec support) HAVE_H263=no HAVE_H263P=no HAVE_MPEG4=no HAVE_H264_DECODER=no else PKG_CHECK_MODULES([LIBAVCODEC], [libavcodec >= 51.11.0], [ AC_SUBST(LIBAVCODEC_CFLAGS) AC_SUBST(LIBAVCODEC_LIBS) AC_DEFINE([HAVE_LIBAVCODEC], [1], [ffmpeg]) AC_SUBST(LIBAVCODEC_LIB_NAME) HAVE_LIBAVCODEC=yes OPAL_LIBAVCODEC_HACK case "$target_os" in cygwin* | mingw* ) LIBAVCODEC_LIB_NAME="avcodec.dll" HAVE_H263=yes HAVE_H263P=yes HAVE_MPEG4=yes HAVE_H264_DECODER=yes ;; * ) AC_CHECK_LIB(avcodec, h263p_encoder, [HAVE_H263=yes], [HAVE_H263=no]) AC_CHECK_LIB(avcodec, h263p_encoder, [HAVE_H263P=yes], [HAVE_H263P=no]) AC_CHECK_LIB(avcodec, mpeg4_encoder, [HAVE_MPEG4=yes], [HAVE_MPEG4=no]) AC_CHECK_LIB(avcodec, h264_decoder, [HAVE_H264_DECODER=yes], [HAVE_H264_DECODER=no]) ;; esac AC_SUBST(HAVE_H263) AC_SUBST(HAVE_H263P) AC_SUBST(HAVE_MPEG4) OPAL_LIBAVCODEC_HEADER ], [ HAVE_LIBAVCODEC=no HAVE_H263=no HAVE_H263P=no HAVE_MPEG4=no HAVE_H264_DECODER=no ] ) fi AC_SUBST(HAVE_LIBAVCODEC) OPAL_LIBAVCODEC_SOURCE() AC_SUBST(LIBAVCODEC_SOURCE_DIR) if test "x$HAVE_LIBAVCODEC" = "xyes" ; then AC_MSG_CHECKING(if libavcodec has rtp_mode); LIBAVINCDIR=`pkg-config --variable=includedir libavcodec`/libavcodec AC_TRY_COMPILE([#include ], [int main(int ac,char **av) { AVCodecContext c; c.rtp_mode = 1; return 0; }], [HAVE_LIBAVCODEC_RTP_MODE=1]) if test "x$HAVE_LIBAVCODEC_RTP_MODE" = "x1" ; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no) fi fi AC_SUBST(HAVE_LIBAVCODEC_RTP_MODE) dnl ######################## dnl x264 dnl ######################## AC_ARG_ENABLE([x264], [AC_HELP_STRING([--disable-x264],[disable x264 support])], [HAVE_X264=$enableval]) if test "x$HAVE_X264" = "xno" ; then AC_MSG_RESULT(Manually disabled X264) else PKG_CHECK_MODULES([X264], [x264 >= 0.48], [ AC_SUBST(X264_CFLAGS) AC_SUBST(X264_LIBS) HAVE_X264=yes OPAL_GET_LIBNAME([X264], [libx264], [$X264_LIBS]) AC_SUBST(X264_LIB_NAME) OPAL_X264_LINKAGE ], [ HAVE_X264=no ] ) fi AC_SUBST(X264_LINK_STATIC) AC_SUBST(HAVE_X264) dnl ######################## dnl theora dnl ######################## AC_ARG_ENABLE([theora], [AC_HELP_STRING([--disable-theora],[disable Theora support])], [HAVE_THEORA=$enableval]) if test "x$HAVE_THEORA" = "xno" ; then AC_MSG_RESULT(Manually disabled theora) else PKG_CHECK_MODULES([THEORA], [theora], [ AC_SUBST(THEORA_CFLAGS) AC_SUBST(THEORA_LIBS) AC_DEFINE([HAVE_THEORA], [1], [theora]) HAVE_THEORA=yes ], [ HAVE_THEORA=no ]) fi AC_SUBST(HAVE_THEORA) dnl ######################## dnl celt dnl ######################## AC_ARG_ENABLE([celt], [AC_HELP_STRING([--disable-celt],[disable CELT support])], [HAVE_CELT=$enableval]) if test "x$HAVE_CELT" = "xno" ; then AC_MSG_RESULT(Manually disabled CELT) else PKG_CHECK_MODULES([CELT], [celt], [ AC_SUBST(CELT_CFLAGS) AC_SUBST(CELT_LIBS) AC_DEFINE([HAVE_CELT], [1], [celt]) HAVE_CELT=yes PKG_CHECK_EXISTS([celt >= 0.5.0], [ AC_DEFINE([HAVE_CELT_0_5_0_OR_LATER], [1], [celt 0.5.0 or later found]) ]) ], [ HAVE_CELT=no ]) fi AC_SUBST(HAVE_CELT) dnl ######################## dnl LIBDL dnl ######################## OPAL_FIND_LIBDL([HAVE_LIBDL=yes], [HAVE_LIBDL=no]) AC_SUBST(HAVE_LIBDL) AC_SUBST(DL_LIBS) dnl ######################## dnl H.264 dnl ######################## if test "x$X264_LINK_STATIC" != "xyes"&& test "x$HAVE_LIBDL" != "xyes" ; then AC_MSG_NOTICE(H.264 support disabled since static linking was disabled and libdl was not found) HAVE_H264=no else OPAL_SIMPLE_OPTION([h264],[HAVE_H264], [enable H.264 support], [HAVE_X264], [HAVE_H264_DECODER]) fi dnl ######################################################################## dnl LID Devices dnl ######################################################################## dnl ######################## dnl Quicknet xJACK cards dnl ####################### AC_ARG_ENABLE([ixj], [AC_HELP_STRING([--enable-ixj],[enable xJack cards])], [HAVE_IXJ=$enableval]) if test "x$HAVE_IXJ" = "xyes" ; then OPAL_MSG_CHECK([IXJ], [$HAVE_IXJ]) if test "x$HAVE_IXJ" = "xyes" ; then AC_CHECK_HEADERS([linux/telephony.h], [HAVE_IXJ=yes], [AC_CHECK_HEADERS([ sys/telephony.h], [HAVE_IXJ=yes], [HAVE_IXJ=no])]) if test "x$HAVE_IXJ" = "xyes" ; then AC_TRY_COMPILE([#include ], [int main(int ac,char **av) { return 0; }], [HAVE_IXJ=yes], [HAVE_IXJ=no]) fi fi fi OPAL_MSG_CHECK([IXJ], [$HAVE_IXJ]) AC_SUBST(HAVE_IXJ) dnl ######################## dnl VoiceTronics VPB card dnl ######################## OPAL_SIMPLE_OPTION([vpb],[HAVE_VPB], [enable voicetronix vpb]) dnl ######################## dnl CAPI dnl ######################## AC_ARG_ENABLE([capi], [AC_HELP_STRING([--enable-capi],[enable CAPI])], [HAVE_CAPI=$enableval]) if test "x$HAVE_CAPI" = "xyes" ; then AC_CHECK_HEADERS([capi20.h], [HAVE_CAPI=yes], [HAVE_CAPI=no]) fi OPAL_MSG_CHECK([CAPI], [$HAVE_CAPI]) AC_SUBST(HAVE_CAPI) dnl ######################################################################## dnl FAX Devices dnl ######################################################################## dnl ######################## dnl spanDSP dnl ######################## AC_ARG_ENABLE([spandsp], [AC_HELP_STRING([--enable-spandsp],[enable spanDSP-based fax support])], [HAVE_SPANDSP=$enableval]) if test "x${HAVE_SPANDSP}" = "xyes" ; then OPAL_FIND_SPANDSP([HAVE_SPANDSP=yes], [HAVE_SPANDSP=no]) fi AC_SUBST(HAVE_SPANDSP) AC_SUBST(SPANDSP_LIBS) dnl ######################################################################## dnl Various checks dnl ######################################################################## AC_LANG_PUSH([C++]) AC_MSG_CHECKING(for posix_memalign) AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[#include ]], [[ void * p; posix_memalign(&p, 16, 16); return 0; ]] ) ], AC_MSG_RESULT(yes) AC_DEFINE(HAVE_POSIX_MEMALIGN, 1), AC_MSG_RESULT(no) ) AC_LANG_POP([C++]) dnl ######################################################################## if test -d audio/G722 ; then AC_CONFIG_FILES(audio/G722/Makefile) fi if test -d audio/G.722.1 ; then AC_CONFIG_FILES(audio/G.722.1/Makefile) fi if test -d audio/G.722.2 ; then AC_CONFIG_FILES(audio/G.722.2/Makefile) fi if test -d audio/GSM0610 ; then AC_CONFIG_FILES(audio/GSM0610/Makefile) fi if test -d audio/gsm-amr ; then AC_CONFIG_FILES(audio/gsm-amr/Makefile) fi if test -d audio/iLBC ; then AC_CONFIG_FILES(audio/iLBC/Makefile) fi if test -d audio/Speex ; then AC_CONFIG_FILES(audio/Speex/Makefile) fi if test -d audio/LPC_10 ; then AC_CONFIG_FILES(audio/LPC_10/Makefile) fi if test -d audio/G726 ; then AC_CONFIG_FILES(audio/G726/Makefile) fi if test -d audio/IMA_ADPCM ; then AC_CONFIG_FILES(audio/IMA_ADPCM/Makefile) fi if test -d audio/SBC ; then AC_CONFIG_FILES(audio/SBC/Makefile) fi if test -d audio/celt ; then AC_CONFIG_FILES(audio/celt/Makefile) fi if test -d video/H.261-vic ; then AC_CONFIG_FILES(video/H.261-vic/Makefile) fi if test -d video/H.263-ffmpeg ; then AC_CONFIG_FILES(video/H.263-ffmpeg/Makefile) fi if test -d video/H.263-1998; then AC_CONFIG_FILES(video/H.263-1998/Makefile) fi if test -d video/MPEG4-ffmpeg ; then AC_CONFIG_FILES(video/MPEG4-ffmpeg/Makefile) fi if test -d video/H.264 ; then AC_CONFIG_FILES(video/H.264/Makefile) fi if test -d video/H.264/gpl; then AC_CONFIG_FILES(video/H.264/gpl/Makefile) fi if test -d video/THEORA ; then AC_CONFIG_FILES(video/THEORA/Makefile) fi if test -d LID/IxJ ; then AC_CONFIG_FILES(LID/IxJ/Makefile) fi if test -d LID/VPB ; then AC_CONFIG_FILES(LID/VPB/Makefile) fi if test -d LID/CAPI ; then AC_CONFIG_FILES(LID/CAPI/Makefile) fi if test -d fax/fax_spandsp ; then AC_CONFIG_FILES(fax/fax_spandsp/Makefile) fi AC_CONFIG_FILES(Makefile) dnl ######################################################################## dnl Header file dnl ######################################################################## dnl Output configured files AC_OUTPUT(audio/Speex/libspeex/speex_config_types.h) AC_CONFIG_HEADERS(plugin-config.h) AC_OUTPUT() dnl ######################################################################## dnl Summary dnl ######################################################################## echo "" echo "=================== Plugin configuration ======================" echo " prefix : $prefix" echo " exec_prefix : $exec_prefix" echo " libdir : $libdir" echo " Audio Codec plugin install dir : "'${libdir}'"/$AC_PLUGIN_DIR" echo " Video Codec plugin install prefix: "'${libdir}'"/$VC_PLUGIN_DIR" echo " LID plugin install prefix : "'${libdir}'"/$LID_PLUGIN_DIR" echo " FAX plugin install prefix : "'${libdir}'"/$FAX_PLUGIN_DIR" echo "" if test "x${GSM_SYSTEM}" = "xyes" ; then echo " GSM : yes (system)" else echo " GSM : yes (internal)" fi echo " gsm-amr : yes" if test "x${ILBC_SYSTEM}" = "xyes" ; then echo " iLBC : yes (system)" else echo " iLBC : yes (internal)" fi if test "x${SPEEX_SYSTEM}" = "xyes" ; then echo " Speex : yes (system, version $SPEEX_SYSTEM_VERSION)" else echo " Speex : yes (internal, version $SPEEX_INTERNAL_VERSION)" fi echo " LPC10 : yes" echo " G.726 : yes" echo " IMA_ADPCM : yes" if test "x${HAVE_SBC}" = "xyes" ; then echo " SBC : yes" else echo " SBC : no" fi echo "" echo " H.261 : yes" echo " H.263 : ${HAVE_H263} (ffmpeg version)" echo " H.263/H.263+ : ${HAVE_H263P}" echo " H.264 : ${HAVE_H264}" echo " THEORA : ${HAVE_THEORA}" if test "x${HAVE_MPEG4}" = "xyes" ; then if test "x${LIBAVCODEC_SOURCE_DIR}" = "x" ; then echo " MPEG4 Part 2 : yes (no rate control correction)" else echo " MPEG4 Part 2 : yes" fi else echo " MPEG4 Part 2 : no" fi echo " CELT : ${HAVE_CELT}" echo "" echo " SpanDSP FAX : $HAVE_SPANDSP" echo "" echo " CAPI : $HAVE_CAPI" echo " Quicknet xJACK support : $HAVE_IXJ" echo " Voicetronics VPB support : $HAVE_VPB" echo "" echo " OS Type : $target_os" echo " Machine Type : $target_cpu" echo "" echo " If all settings are OK, type make and make install " echo "========================================================" h323plus/plugins/configure0000755000175000017500000147264411445621630014523 0ustar markmark#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.63. # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : (as_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell bug-autoconf@gnu.org about your system, echo including any error possibly output before this message. echo This can help us improve future autoconf versions. echo Configuration will now proceed without shell functions. } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="configure.ac" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS LIBOBJS SPANDSP_LIBS HAVE_SPANDSP HAVE_CAPI HAVE_VPB HAVE_IXJ HAVE_H264 DL_LIBS HAVE_LIBDL HAVE_CELT CELT_LIBS CELT_CFLAGS HAVE_THEORA THEORA_LIBS THEORA_CFLAGS HAVE_X264 X264_LINK_STATIC X264_LIB_NAME X264_LIBS X264_CFLAGS HAVE_LIBAVCODEC_RTP_MODE LIBAVCODEC_SOURCE_DIR HAVE_LIBAVCODEC HAVE_MPEG4 HAVE_H263P HAVE_H263 LIBAVCODEC_LIB_NAME LIBAVCODEC_LIBS LIBAVCODEC_CFLAGS DEFAULT_TO_FULL_CAPABILITIES HAVE_SBC ILBC_LIBS ILBC_CFLAGS ILBC_SYSTEM SPEEX_SYSTEM SPEEX_LIBS SPEEX_CFLAGS SIZE32 SIZE16 GSM_SYSTEM GSM_LIBS GSM_CFLAGS WIN32 STDCCFLAGS PLUGINEXT LDSO FAX_PLUGIN_DIR LID_PLUGIN_DIR VC_PLUGIN_DIR AC_PLUGIN_DIR EGREP GREP CPP OBJDUMP LDD NM RANLIB INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM ac_ct_CC CFLAGS CC OBJEXT EXEEXT ac_ct_CXX CPPFLAGS LDFLAGS CXXFLAGS CXX target_os target_vendor target_cpu target host_os host_vendor host_cpu host build_os build_vendor build_cpu build PKG_CONFIG target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_debug with_plugin_installdir enable_localgsm enable_localspeex enable_localilbc enable_sbc enable_default_to_full_capabilties enable_libavcodec enable_libavcodec_stackalign_hack with_libavcodec_source_dir enable_x264 enable_x264_link_static enable_theora enable_celt enable_h264 enable_ixj enable_vpb enable_capi enable_spandsp ' ac_precious_vars='build_alias host_alias target_alias PKG_CONFIG CXX CXXFLAGS LDFLAGS LIBS CPPFLAGS CCC CC CFLAGS CPP SPEEX_CFLAGS SPEEX_LIBS LIBAVCODEC_CFLAGS LIBAVCODEC_LIBS X264_CFLAGS X264_LIBS THEORA_CFLAGS THEORA_LIBS CELT_CFLAGS CELT_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { $as_echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { $as_echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2 { (exit 1); exit 1; }; } ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || { $as_echo "$as_me: error: working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { $as_echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-debug Enable debug build --enable-localgsm Force use local version of GSM library rather than system version --enable-localspeex Force use local version of Speex library rather than system version --enable-localilbc Force use local version of iLBC library rather than system version --enable-sbc enable use of Bluetooth SBC for CD quality telephony --enable-default-to-full-capabilties default to full capabilities at empty fmtp lines --disable-libavcodec disable libavcodec support --enable-libavcodec-stackalign-hack Stack alignment hack for libavcodec library --disable-x264 disable x264 support --enable-x264-link-static Statically link x264 to the plugin. Default for win32. --disable-theora disable Theora support --disable-celt disable CELT support --enable-h264 enable H.264 support --enable-ixj enable xJack cards --enable-vpb enable voicetronix vpb --enable-capi enable CAPI --enable-spandsp enable spanDSP-based fax support Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-plugin-installdir=DIR Location where plugins are installed, starting at the lib dir --with-libavcodec-source-dir Directory with libavcodec source code, for MPEG4 rate control correction Some influential environment variables: PKG_CONFIG path to pkg-config utility CXX C++ compiler command CXXFLAGS C++ compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory CC C compiler command CFLAGS C compiler flags CPP C preprocessor SPEEX_CFLAGS C compiler flags for SPEEX, overriding pkg-config SPEEX_LIBS linker flags for SPEEX, overriding pkg-config LIBAVCODEC_CFLAGS C compiler flags for LIBAVCODEC, overriding pkg-config LIBAVCODEC_LIBS linker flags for LIBAVCODEC, overriding pkg-config X264_CFLAGS C compiler flags for X264, overriding pkg-config X264_LIBS linker flags for X264, overriding pkg-config THEORA_CFLAGS C compiler flags for THEORA, overriding pkg-config THEORA_LIBS linker flags for THEORA, overriding pkg-config CELT_CFLAGS C compiler flags for CELT, overriding pkg-config CELT_LIBS linker flags for CELT, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.63 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.63. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then ac_site_file1=$CONFIG_SITE elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test -r "$ac_site_file"; then { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 $as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test \! -e ./aclocal.m4 ; then echo "aclocal.m4 not found in $PWD, running aclocal to make it." if aclocal ; then if test -e ./aclocal.m4 ; then echo "aclocal.m4 generated." else echo "aclocal ran in $PWD but failed to generate aclocal.m4" exit fi else echo "ERROR running 'aclocal' in $PWD" exit fi fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_PKG_CONFIG+set}" = set; then $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 $as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 $as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} { (exit 1); exit 1; }; } { $as_echo "$as_me:$LINENO: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if test "${ac_cv_build+set}" = set; then $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 $as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 $as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi { $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 $as_echo "$as_me: error: invalid value of canonical build" >&2;} { (exit 1); exit 1; }; };; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:$LINENO: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if test "${ac_cv_host+set}" = set; then $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 $as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} { (exit 1); exit 1; }; } fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 $as_echo "$as_me: error: invalid value of canonical host" >&2;} { (exit 1); exit 1; }; };; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:$LINENO: checking target system type" >&5 $as_echo_n "checking target system type... " >&6; } if test "${ac_cv_target+set}" = set; then $as_echo_n "(cached) " >&6 else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5 $as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;} { (exit 1); exit 1; }; } fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_target" >&5 $as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical target" >&5 $as_echo "$as_me: error: invalid value of canonical target" >&2;} { (exit 1); exit 1; }; };; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: target_os=$* IFS=$ac_save_IFS case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then enableval=$enable_debug; DEBUG_BUILD=$enableval else DEBUG_BUILD=no fi case "$target_os" in solaris*) opal_release_flags="-O3 -DSOLARIS" opal_debug_flags="-g -D_DEBUG -DSOLARIS" ;; *) opal_release_flags="-Os" opal_debug_flags="-g3 -ggdb -O0 -D_DEBUG" ;; esac DEBUG_CFLAGS="$DEBUG_CFLAGS $opal_debug_flags" RELEASE_CFLAGS="$RELEASE_CFLAGS $opal_release_flags" if test "x${DEBUG_BUILD}" = xyes; then DEFAULT_CFLAGS="$DEFAULT_CFLAGS $opal_debug_flags" else DEFAULT_CFLAGS="$DEFAULT_CFLAGS $opal_release_flags" fi { $as_echo "$as_me:$LINENO: checking Debugging support" >&5 $as_echo_n "checking Debugging support... " >&6; } { $as_echo "$as_me:$LINENO: result: $DEBUG_BUILD" >&5 $as_echo "$DEBUG_BUILD" >&6; } CFLAGS="$DEFAULT_CFLAGS $CFLAGS" CXXFLAGS="$DEFAULT_CFLAGS $CXXFLAGS" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CXX+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:$LINENO: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:$LINENO: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:$LINENO: checking for C++ compiler default output file name" >&5 $as_echo_n "checking for C++ compiler default output file name... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { (ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi { $as_echo "$as_me:$LINENO: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } if test -z "$ac_file"; then $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: C++ compiler cannot create executables See \`config.log' for more details." >&5 $as_echo "$as_me: error: C++ compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:$LINENO: checking whether the C++ compiler works" >&5 $as_echo_n "checking whether the C++ compiler works... " >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi fi fi { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } { $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } { $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi rm -f conftest$ac_cv_exeext { $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if test "${ac_cv_objext+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if test "${ac_cv_cxx_compiler_gnu+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 $as_echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } # Provide some information about the compiler. $as_echo "$as_me:$LINENO: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:$LINENO: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:$LINENO: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_RANLIB+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args. set dummy ${ac_tool_prefix}nm; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_NM+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$NM"; then ac_cv_prog_NM="$NM" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_NM="${ac_tool_prefix}nm" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NM=$ac_cv_prog_NM if test -n "$NM"; then { $as_echo "$as_me:$LINENO: result: $NM" >&5 $as_echo "$NM" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NM"; then ac_ct_NM=$NM # Extract the first word of "nm", so it can be a program name with args. set dummy nm; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_NM+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NM"; then ac_cv_prog_ac_ct_NM="$ac_ct_NM" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_NM="nm" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NM=$ac_cv_prog_ac_ct_NM if test -n "$ac_ct_NM"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_NM" >&5 $as_echo "$ac_ct_NM" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NM" = x; then NM=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NM=$ac_ct_NM fi else NM="$ac_cv_prog_NM" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ldd", so it can be a program name with args. set dummy ${ac_tool_prefix}ldd; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_LDD+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$LDD"; then ac_cv_prog_LDD="$LDD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LDD="${ac_tool_prefix}ldd" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LDD=$ac_cv_prog_LDD if test -n "$LDD"; then { $as_echo "$as_me:$LINENO: result: $LDD" >&5 $as_echo "$LDD" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LDD"; then ac_ct_LDD=$LDD # Extract the first word of "ldd", so it can be a program name with args. set dummy ldd; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_LDD+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LDD"; then ac_cv_prog_ac_ct_LDD="$ac_ct_LDD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_LDD="ldd" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LDD=$ac_cv_prog_ac_ct_LDD if test -n "$ac_ct_LDD"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_LDD" >&5 $as_echo "$ac_ct_LDD" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LDD" = x; then LDD=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LDD=$ac_ct_LDD fi else LDD="$ac_cv_prog_LDD" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OBJDUMP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:$LINENO: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:$LINENO: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 $as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if test "${ac_cv_path_GREP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 $as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:$LINENO: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if test "${ac_cv_path_EGREP+set}" = set; then $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 $as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in stddef.h limits.h float.h fcntl.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done MAJOR_VERSION=`cat ../version.h | grep MAJOR_VERSION | cut -f3 -d' '` MINOR_VERSION=`cat ../version.h | grep MINOR_VERSION | cut -f3 -d' '` BUILD_NUMBER=`cat ../version.h | grep BUILD_NUMBER | cut -f3 -d' '` OPAL_VERSION="${MAJOR_VERSION}.${MINOR_VERSION}.${BUILD_NUMBER}" { $as_echo "$as_me:$LINENO: checking OPAL Version" >&5 $as_echo_n "checking OPAL Version... " >&6; } { $as_echo "$as_me:$LINENO: result: $OPAL_VERSION" >&5 $as_echo "$OPAL_VERSION" >&6; } # Check whether --with-plugin-installdir was given. if test "${with_plugin_installdir+set}" = set; then withval=$with_plugin_installdir; PLUGIN_DIR="$withval" else PLUGIN_DIR="opal-${OPAL_VERSION}" fi EXPANDED_PLUGIN_DIR="${libdir}/${PLUGIN_DIR}" if test "x${exec_prefix}" = "xNONE" ; then if test "x${prefix}" = "xNONE" ; then EXPANDED_PLUGIN_DIR=`echo ${EXPANDED_PLUGIN_DIR} | sed s#\\${exec_prefix}#/usr/local#` else EXPANDED_PLUGIN_DIR=`echo ${EXPANDED_PLUGIN_DIR} | sed s#\\${exec_prefix}#${prefix}#` fi else EXPANDED_PLUGIN_DIR=`echo ${EXPANDED_PLUGIN_DIR} | sed s#\\${exec_prefix}#${exec_prefix}#` fi { $as_echo "$as_me:$LINENO: checking Plugin install directory" >&5 $as_echo_n "checking Plugin install directory... " >&6; } { $as_echo "$as_me:$LINENO: result: ${EXPANDED_PLUGIN_DIR}" >&5 $as_echo "${EXPANDED_PLUGIN_DIR}" >&6; } AC_PLUGIN_DIR="${PLUGIN_DIR}/codecs/audio" VC_PLUGIN_DIR="${PLUGIN_DIR}/codecs/video" LID_PLUGIN_DIR="${PLUGIN_DIR}/lid" FAX_PLUGIN_DIR="${PLUGIN_DIR}/fax" WIN32=no LDSO= case "$target_os" in solaris*) STDCCFLAGS="$STDCCFLAGS -KPIC" LDSO="-Bdynamic -G -h" PLUGINEXT=so for ac_header in sys/time.h sys/file.h netinet/in.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:$LINENO: checking for pid_t" >&5 $as_echo_n "checking for pid_t... " >&6; } if test "${ac_cv_type_pid_t+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_type_pid_t=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if (sizeof (pid_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if (sizeof ((pid_t))) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_pid_t=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5 $as_echo "$ac_cv_type_pid_t" >&6; } if test "x$ac_cv_type_pid_t" = x""yes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi for ac_header in vfork.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in fork vfork do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` { $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 $as_echo_n "checking for $ac_func... " >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then eval "$as_ac_var=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval 'as_val=${'$as_ac_var'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } as_val=`eval 'as_val=${'$as_ac_var'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_func_fork" = xyes; then { $as_echo "$as_me:$LINENO: checking for working fork" >&5 $as_echo_n "checking for working fork... " >&6; } if test "${ac_cv_func_fork_works+set}" = set; then $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then ac_cv_func_fork_works=cross else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { /* By Ruediger Kuhlmann. */ return fork () < 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_fork_works=yes else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_fork_works=no fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_func_fork_works" >&5 $as_echo "$ac_cv_func_fork_works" >&6; } else ac_cv_func_fork_works=$ac_cv_func_fork fi if test "x$ac_cv_func_fork_works" = xcross; then case $host in *-*-amigaos* | *-*-msdosdjgpp*) # Override, as these systems have only a dummy fork() stub ac_cv_func_fork_works=no ;; *) ac_cv_func_fork_works=yes ;; esac { $as_echo "$as_me:$LINENO: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} fi ac_cv_func_vfork_works=$ac_cv_func_vfork if test "x$ac_cv_func_vfork" = xyes; then { $as_echo "$as_me:$LINENO: checking for working vfork" >&5 $as_echo_n "checking for working vfork... " >&6; } if test "${ac_cv_func_vfork_works+set}" = set; then $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then ac_cv_func_vfork_works=cross else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Thanks to Paul Eggert for this test. */ $ac_includes_default #include #ifdef HAVE_VFORK_H # include #endif /* On some sparc systems, changes by the child to local and incoming argument registers are propagated back to the parent. The compiler is told about this with #include , but some compilers (e.g. gcc -O) don't grok . Test for this by using a static variable whose address is put into a register that is clobbered by the vfork. */ static void #ifdef __cplusplus sparc_address_test (int arg) # else sparc_address_test (arg) int arg; #endif { static pid_t child; if (!child) { child = vfork (); if (child < 0) { perror ("vfork"); _exit(2); } if (!child) { arg = getpid(); write(-1, "", 0); _exit (arg); } } } int main () { pid_t parent = getpid (); pid_t child; sparc_address_test (0); child = vfork (); if (child == 0) { /* Here is another test for sparc vfork register problems. This test uses lots of local variables, at least as many local variables as main has allocated so far including compiler temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should reuse the register of parent for one of the local variables, since it will think that parent can't possibly be used any more in this routine. Assigning to the local variable will thus munge parent in the parent process. */ pid_t p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); /* Convince the compiler that p..p7 are live; otherwise, it might use the same hardware register for all 8 local variables. */ if (p != p1 || p != p2 || p != p3 || p != p4 || p != p5 || p != p6 || p != p7) _exit(1); /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent from child file descriptors. If the child closes a descriptor before it execs or exits, this munges the parent's descriptor as well. Test for this by closing stdout in the child. */ _exit(close(fileno(stdout)) != 0); } else { int status; struct stat st; while (wait(&status) != child) ; return ( /* Was there some problem with vforking? */ child < 0 /* Did the child fail? (This shouldn't happen.) */ || status /* Did the vfork/compiler bug occur? */ || parent != getpid() /* Did the file descriptor bug occur? */ || fstat(fileno(stdout), &st) != 0 ); } } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_vfork_works=yes else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_vfork_works=no fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_func_vfork_works" >&5 $as_echo "$ac_cv_func_vfork_works" >&6; } fi; if test "x$ac_cv_func_fork_works" = xcross; then ac_cv_func_vfork_works=$ac_cv_func_vfork { $as_echo "$as_me:$LINENO: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} fi if test "x$ac_cv_func_vfork_works" = xyes; then cat >>confdefs.h <<\_ACEOF #define HAVE_WORKING_VFORK 1 _ACEOF else cat >>confdefs.h <<\_ACEOF #define vfork fork _ACEOF fi if test "x$ac_cv_func_fork_works" = xyes; then cat >>confdefs.h <<\_ACEOF #define HAVE_WORKING_FORK 1 _ACEOF fi ;; darwin*) CFLAGS="$CFLAGS -fno-common -dynamic" LDSO="-dynamiclib -multiply_defined suppress" STDCCFLAGS="$STDCCFLAGS -fPIC -D__MACOSX__" case "$target_cpu" in x86 | i686 | i586 | i486 | i386 ) STDCCFLAGS="${STDCCFLAGS} -m486" ;; esac PLUGINEXT=dylib for ac_header in sys/time.h sys/file.h netinet/in.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in vfork.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in fork vfork do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` { $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 $as_echo_n "checking for $ac_func... " >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then eval "$as_ac_var=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval 'as_val=${'$as_ac_var'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } as_val=`eval 'as_val=${'$as_ac_var'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_func_fork" = xyes; then { $as_echo "$as_me:$LINENO: checking for working fork" >&5 $as_echo_n "checking for working fork... " >&6; } if test "${ac_cv_func_fork_works+set}" = set; then $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then ac_cv_func_fork_works=cross else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { /* By Ruediger Kuhlmann. */ return fork () < 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_fork_works=yes else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_fork_works=no fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_func_fork_works" >&5 $as_echo "$ac_cv_func_fork_works" >&6; } else ac_cv_func_fork_works=$ac_cv_func_fork fi if test "x$ac_cv_func_fork_works" = xcross; then case $host in *-*-amigaos* | *-*-msdosdjgpp*) # Override, as these systems have only a dummy fork() stub ac_cv_func_fork_works=no ;; *) ac_cv_func_fork_works=yes ;; esac { $as_echo "$as_me:$LINENO: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} fi ac_cv_func_vfork_works=$ac_cv_func_vfork if test "x$ac_cv_func_vfork" = xyes; then { $as_echo "$as_me:$LINENO: checking for working vfork" >&5 $as_echo_n "checking for working vfork... " >&6; } if test "${ac_cv_func_vfork_works+set}" = set; then $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then ac_cv_func_vfork_works=cross else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Thanks to Paul Eggert for this test. */ $ac_includes_default #include #ifdef HAVE_VFORK_H # include #endif /* On some sparc systems, changes by the child to local and incoming argument registers are propagated back to the parent. The compiler is told about this with #include , but some compilers (e.g. gcc -O) don't grok . Test for this by using a static variable whose address is put into a register that is clobbered by the vfork. */ static void #ifdef __cplusplus sparc_address_test (int arg) # else sparc_address_test (arg) int arg; #endif { static pid_t child; if (!child) { child = vfork (); if (child < 0) { perror ("vfork"); _exit(2); } if (!child) { arg = getpid(); write(-1, "", 0); _exit (arg); } } } int main () { pid_t parent = getpid (); pid_t child; sparc_address_test (0); child = vfork (); if (child == 0) { /* Here is another test for sparc vfork register problems. This test uses lots of local variables, at least as many local variables as main has allocated so far including compiler temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should reuse the register of parent for one of the local variables, since it will think that parent can't possibly be used any more in this routine. Assigning to the local variable will thus munge parent in the parent process. */ pid_t p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); /* Convince the compiler that p..p7 are live; otherwise, it might use the same hardware register for all 8 local variables. */ if (p != p1 || p != p2 || p != p3 || p != p4 || p != p5 || p != p6 || p != p7) _exit(1); /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent from child file descriptors. If the child closes a descriptor before it execs or exits, this munges the parent's descriptor as well. Test for this by closing stdout in the child. */ _exit(close(fileno(stdout)) != 0); } else { int status; struct stat st; while (wait(&status) != child) ; return ( /* Was there some problem with vforking? */ child < 0 /* Did the child fail? (This shouldn't happen.) */ || status /* Did the vfork/compiler bug occur? */ || parent != getpid() /* Did the file descriptor bug occur? */ || fstat(fileno(stdout), &st) != 0 ); } } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_vfork_works=yes else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_vfork_works=no fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_func_vfork_works" >&5 $as_echo "$ac_cv_func_vfork_works" >&6; } fi; if test "x$ac_cv_func_fork_works" = xcross; then ac_cv_func_vfork_works=$ac_cv_func_vfork { $as_echo "$as_me:$LINENO: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} fi if test "x$ac_cv_func_vfork_works" = xyes; then cat >>confdefs.h <<\_ACEOF #define HAVE_WORKING_VFORK 1 _ACEOF else cat >>confdefs.h <<\_ACEOF #define vfork fork _ACEOF fi if test "x$ac_cv_func_fork_works" = xyes; then cat >>confdefs.h <<\_ACEOF #define HAVE_WORKING_FORK 1 _ACEOF fi ;; cygwin*|mingw**) LDSO="-module -avoid-version -shared" PLUGINEXT=dll WIN32=yes for ac_header in malloc.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done cat >>confdefs.h <<\_ACEOF #define PLUGIN_CODEC_DLL_EXPORTS 1 _ACEOF ;; *) STDCCFLAGS="$STDCCFLAGS -fPIC" LDSO='-shared -Wl,-soname,$(SONAME)' PLUGINEXT=so for ac_header in sys/time.h sys/file.h netinet/in.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in vfork.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in fork vfork do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` { $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 $as_echo_n "checking for $ac_func... " >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then eval "$as_ac_var=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval 'as_val=${'$as_ac_var'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } as_val=`eval 'as_val=${'$as_ac_var'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_func_fork" = xyes; then { $as_echo "$as_me:$LINENO: checking for working fork" >&5 $as_echo_n "checking for working fork... " >&6; } if test "${ac_cv_func_fork_works+set}" = set; then $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then ac_cv_func_fork_works=cross else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { /* By Ruediger Kuhlmann. */ return fork () < 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_fork_works=yes else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_fork_works=no fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_func_fork_works" >&5 $as_echo "$ac_cv_func_fork_works" >&6; } else ac_cv_func_fork_works=$ac_cv_func_fork fi if test "x$ac_cv_func_fork_works" = xcross; then case $host in *-*-amigaos* | *-*-msdosdjgpp*) # Override, as these systems have only a dummy fork() stub ac_cv_func_fork_works=no ;; *) ac_cv_func_fork_works=yes ;; esac { $as_echo "$as_me:$LINENO: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} fi ac_cv_func_vfork_works=$ac_cv_func_vfork if test "x$ac_cv_func_vfork" = xyes; then { $as_echo "$as_me:$LINENO: checking for working vfork" >&5 $as_echo_n "checking for working vfork... " >&6; } if test "${ac_cv_func_vfork_works+set}" = set; then $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then ac_cv_func_vfork_works=cross else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Thanks to Paul Eggert for this test. */ $ac_includes_default #include #ifdef HAVE_VFORK_H # include #endif /* On some sparc systems, changes by the child to local and incoming argument registers are propagated back to the parent. The compiler is told about this with #include , but some compilers (e.g. gcc -O) don't grok . Test for this by using a static variable whose address is put into a register that is clobbered by the vfork. */ static void #ifdef __cplusplus sparc_address_test (int arg) # else sparc_address_test (arg) int arg; #endif { static pid_t child; if (!child) { child = vfork (); if (child < 0) { perror ("vfork"); _exit(2); } if (!child) { arg = getpid(); write(-1, "", 0); _exit (arg); } } } int main () { pid_t parent = getpid (); pid_t child; sparc_address_test (0); child = vfork (); if (child == 0) { /* Here is another test for sparc vfork register problems. This test uses lots of local variables, at least as many local variables as main has allocated so far including compiler temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should reuse the register of parent for one of the local variables, since it will think that parent can't possibly be used any more in this routine. Assigning to the local variable will thus munge parent in the parent process. */ pid_t p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); /* Convince the compiler that p..p7 are live; otherwise, it might use the same hardware register for all 8 local variables. */ if (p != p1 || p != p2 || p != p3 || p != p4 || p != p5 || p != p6 || p != p7) _exit(1); /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent from child file descriptors. If the child closes a descriptor before it execs or exits, this munges the parent's descriptor as well. Test for this by closing stdout in the child. */ _exit(close(fileno(stdout)) != 0); } else { int status; struct stat st; while (wait(&status) != child) ; return ( /* Was there some problem with vforking? */ child < 0 /* Did the child fail? (This shouldn't happen.) */ || status /* Did the vfork/compiler bug occur? */ || parent != getpid() /* Did the file descriptor bug occur? */ || fstat(fileno(stdout), &st) != 0 ); } } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_vfork_works=yes else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_vfork_works=no fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_func_vfork_works" >&5 $as_echo "$ac_cv_func_vfork_works" >&6; } fi; if test "x$ac_cv_func_fork_works" = xcross; then ac_cv_func_vfork_works=$ac_cv_func_vfork { $as_echo "$as_me:$LINENO: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} fi if test "x$ac_cv_func_vfork_works" = xyes; then cat >>confdefs.h <<\_ACEOF #define HAVE_WORKING_VFORK 1 _ACEOF else cat >>confdefs.h <<\_ACEOF #define vfork fork _ACEOF fi if test "x$ac_cv_func_fork_works" = xyes; then cat >>confdefs.h <<\_ACEOF #define HAVE_WORKING_FORK 1 _ACEOF fi ;; esac HAVE_VPB=yes HAVE_CAPI=yes HAVE_IXJ=no HAVE_H263=yes HAVE_H263P=yes HAVE_H264=yes HAVE_CELT=yes HAVE_SPANDSP=yes DEFAULT_TO_FULL_CAPABILITIES=yes HAVE_X264=yes X264_LINK_STATIC=no LIBAVCODEC_STACKALIGN_HACK=no case "$target_os" in darwin*) HAVE_VPB=no HAVE_CAPI=no ;; cygwin*|mingw**) HAVE_VPB=no HAVE_CAPI=no X264_LINK_STATIC=yes ;; esac # Check whether --enable-localgsm was given. if test "${enable_localgsm+set}" = set; then enableval=$enable_localgsm; localgsm=$enableval else localgsm= fi if test "x${localgsm}" = "xyes" ; then { $as_echo "$as_me:$LINENO: Forcing use of local GSM sources" >&5 $as_echo "$as_me: Forcing use of local GSM sources" >&6;} GSM_SYSTEM=no elif test "x${localgsm}" = "xno" ; then { $as_echo "$as_me:$LINENO: Forcing use of system GSM library" >&5 $as_echo "$as_me: Forcing use of system GSM library" >&6;} opal_gsm=no { $as_echo "$as_me:$LINENO: checking for gsm_create in -lgsm" >&5 $as_echo_n "checking for gsm_create in -lgsm... " >&6; } if test "${ac_cv_lib_gsm_gsm_create+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgsm $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gsm_create (); int main () { return gsm_create (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_gsm_gsm_create=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_gsm_gsm_create=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_gsm_gsm_create" >&5 $as_echo "$ac_cv_lib_gsm_gsm_create" >&6; } if test "x$ac_cv_lib_gsm_gsm_create" = x""yes; then opal_gsm=yes fi if test "x$opal_gsm" = "xyes"; then { $as_echo "$as_me:$LINENO: checking if system GSM library has WAV49" >&5 $as_echo_n "checking if system GSM library has WAV49... " >&6; } old_LIBS=$LIBS opal_gsm=no LIBS="$LIBS -lgsm" if test "$cross_compiling" = yes; then { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { int option = 0; gsm handle = gsm_create(); return (gsm_option(handle, GSM_OPT_WAV49, &option) == -1) ? 1 : 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then opal_gsm=yes else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi LIBS=$old_LIBS { $as_echo "$as_me:$LINENO: result: $opal_gsm" >&5 $as_echo "$opal_gsm" >&6; } if test "x${opal_gsm}" = "xyes" ; then GSM_CFLAGS="-I/usr/include/gsm -I/usr/local/include/gsm" GSM_LIBS="-lgsm" fi { $as_echo "$as_me:$LINENO: checking System GSM" >&5 $as_echo_n "checking System GSM... " >&6; } { $as_echo "$as_me:$LINENO: result: $opal_gsm" >&5 $as_echo "$opal_gsm" >&6; } fi if test $opal_gsm = yes; then HAVE_GSM=yes else HAVE_GSM=no fi if test "x${HAVE_GSM}" != "xyes" ; then { { $as_echo "$as_me:$LINENO: error: cannot find system GSM" >&5 $as_echo "$as_me: error: cannot find system GSM" >&2;} { (exit 1); exit 1; }; } else GSM_SYSTEM=yes fi else opal_gsm=no { $as_echo "$as_me:$LINENO: checking for gsm_create in -lgsm" >&5 $as_echo_n "checking for gsm_create in -lgsm... " >&6; } if test "${ac_cv_lib_gsm_gsm_create+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgsm $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gsm_create (); int main () { return gsm_create (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_gsm_gsm_create=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_gsm_gsm_create=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_gsm_gsm_create" >&5 $as_echo "$ac_cv_lib_gsm_gsm_create" >&6; } if test "x$ac_cv_lib_gsm_gsm_create" = x""yes; then opal_gsm=yes fi if test "x$opal_gsm" = "xyes"; then { $as_echo "$as_me:$LINENO: checking if system GSM library has WAV49" >&5 $as_echo_n "checking if system GSM library has WAV49... " >&6; } old_LIBS=$LIBS opal_gsm=no LIBS="$LIBS -lgsm" if test "$cross_compiling" = yes; then { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { int option = 0; gsm handle = gsm_create(); return (gsm_option(handle, GSM_OPT_WAV49, &option) == -1) ? 1 : 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then opal_gsm=yes else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi LIBS=$old_LIBS { $as_echo "$as_me:$LINENO: result: $opal_gsm" >&5 $as_echo "$opal_gsm" >&6; } if test "x${opal_gsm}" = "xyes" ; then GSM_CFLAGS="-I/usr/include/gsm -I/usr/local/include/gsm" GSM_LIBS="-lgsm" fi { $as_echo "$as_me:$LINENO: checking System GSM" >&5 $as_echo_n "checking System GSM... " >&6; } { $as_echo "$as_me:$LINENO: result: $opal_gsm" >&5 $as_echo "$opal_gsm" >&6; } fi if test $opal_gsm = yes; then HAVE_GSM=yes else HAVE_GSM=no fi if test "x${HAVE_GSM}" = "xyes" ; then GSM_SYSTEM=yes else GSM_SYSTEM=no fi fi if test "x${GSM_SYSTEM}" = "xyes" ; then { $as_echo "$as_me:$LINENO: result: using system GSM" >&5 $as_echo "using system GSM" >&6; } fi old_CFLAGS="$CFLAGS" old_LIBS="$LIBS" CFLAGS= LIBS= # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:$LINENO: checking size of short" >&5 $as_echo_n "checking size of short... " >&6; } if test "${ac_cv_sizeof_short+set}" = set; then $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long int) (sizeof (short))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long int) (sizeof (short))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=$ac_mid; break else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long int) (sizeof (short))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long int) (sizeof (short))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_lo=$ac_mid; break else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long int) (sizeof (short))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=$ac_mid else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_short=$ac_lo;; '') if test "$ac_cv_type_short" = yes; then { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (short) See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute sizeof (short) See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; }; } else ac_cv_sizeof_short=0 fi ;; esac else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default static long int longval () { return (long int) (sizeof (short)); } static unsigned long int ulongval () { return (long int) (sizeof (short)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (((long int) (sizeof (short))) < 0) { long int i = longval (); if (i != ((long int) (sizeof (short)))) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ((long int) (sizeof (short)))) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_short=`cat conftest.val` else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) if test "$ac_cv_type_short" = yes; then { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (short) See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute sizeof (short) See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; }; } else ac_cv_sizeof_short=0 fi fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.val fi { $as_echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5 $as_echo "$ac_cv_sizeof_short" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_SHORT $ac_cv_sizeof_short _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:$LINENO: checking size of int" >&5 $as_echo_n "checking size of int... " >&6; } if test "${ac_cv_sizeof_int+set}" = set; then $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long int) (sizeof (int))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long int) (sizeof (int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=$ac_mid; break else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long int) (sizeof (int))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long int) (sizeof (int))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_lo=$ac_mid; break else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long int) (sizeof (int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=$ac_mid else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_int=$ac_lo;; '') if test "$ac_cv_type_int" = yes; then { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (int) See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute sizeof (int) See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; }; } else ac_cv_sizeof_int=0 fi ;; esac else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default static long int longval () { return (long int) (sizeof (int)); } static unsigned long int ulongval () { return (long int) (sizeof (int)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (((long int) (sizeof (int))) < 0) { long int i = longval (); if (i != ((long int) (sizeof (int)))) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ((long int) (sizeof (int)))) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_int=`cat conftest.val` else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) if test "$ac_cv_type_int" = yes; then { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (int) See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute sizeof (int) See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; }; } else ac_cv_sizeof_int=0 fi fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.val fi { $as_echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 $as_echo "$ac_cv_sizeof_int" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:$LINENO: checking size of long" >&5 $as_echo_n "checking size of long... " >&6; } if test "${ac_cv_sizeof_long+set}" = set; then $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long int) (sizeof (long))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long int) (sizeof (long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=$ac_mid; break else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long int) (sizeof (long))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long int) (sizeof (long))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_lo=$ac_mid; break else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long int) (sizeof (long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=$ac_mid else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_long=$ac_lo;; '') if test "$ac_cv_type_long" = yes; then { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (long) See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute sizeof (long) See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; }; } else ac_cv_sizeof_long=0 fi ;; esac else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default static long int longval () { return (long int) (sizeof (long)); } static unsigned long int ulongval () { return (long int) (sizeof (long)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (((long int) (sizeof (long))) < 0) { long int i = longval (); if (i != ((long int) (sizeof (long)))) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ((long int) (sizeof (long)))) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_long=`cat conftest.val` else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) if test "$ac_cv_type_long" = yes; then { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (long) See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute sizeof (long) See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; }; } else ac_cv_sizeof_long=0 fi fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.val fi { $as_echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 $as_echo "$ac_cv_sizeof_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:$LINENO: checking size of long long" >&5 $as_echo_n "checking size of long long... " >&6; } if test "${ac_cv_sizeof_long_long+set}" = set; then $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long int) (sizeof (long long))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long int) (sizeof (long long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=$ac_mid; break else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long int) (sizeof (long long))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long int) (sizeof (long long))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_lo=$ac_mid; break else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long int) (sizeof (long long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=$ac_mid else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_long_long=$ac_lo;; '') if test "$ac_cv_type_long_long" = yes; then { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (long long) See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute sizeof (long long) See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; }; } else ac_cv_sizeof_long_long=0 fi ;; esac else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default static long int longval () { return (long int) (sizeof (long long)); } static unsigned long int ulongval () { return (long int) (sizeof (long long)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (((long int) (sizeof (long long))) < 0) { long int i = longval (); if (i != ((long int) (sizeof (long long)))) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ((long int) (sizeof (long long)))) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_long_long=`cat conftest.val` else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) if test "$ac_cv_type_long_long" = yes; then { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (long long) See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute sizeof (long long) See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; }; } else ac_cv_sizeof_long_long=0 fi fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.val fi { $as_echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5 $as_echo "$ac_cv_sizeof_long_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long _ACEOF case 2 in $ac_cv_sizeof_short) SIZE16="short";; $ac_cv_sizeof_int) SIZE16="int";; esac case 4 in $ac_cv_sizeof_int) SIZE32="int";; $ac_cv_sizeof_long) SIZE32="long";; $ac_cv_sizeof_short) SIZE32="short";; esac CFLAGS="$old_CFLAGS" LIBS="$old_LIBS" # Check whether --enable-localspeex was given. if test "${enable_localspeex+set}" = set; then enableval=$enable_localspeex; localspeex=$enableval else localspeex= fi { $as_echo "$as_me:$LINENO: checking internal Speex version" >&5 $as_echo_n "checking internal Speex version... " >&6; } SPEEX_CFLAGS= SPEEX_LIBS= if test -f "audio/Speex/libspeex/misc.h"; then SPEEX_INTERNAL_VERSION=`grep "#define SPEEX_VERSION" audio/Speex/libspeex/misc.h | sed -e 's/^.*speex\-//' -e 's/\".*//'` elif test -f "src/codec/speex/libspeex/misc.h"; then SPEEX_INTERNAL_VERSION=`grep "#define SPEEX_VERSION" src/codec/speex/libspeex/misc.h | sed -e 's/^.*speex\-//' -e 's/\".*//'` else { { $as_echo "$as_me:$LINENO: error: Could not find internal speex library" >&5 $as_echo "$as_me: error: Could not find internal speex library" >&2;} { (exit 1); exit 1; }; } fi { $as_echo "$as_me:$LINENO: result: $SPEEX_INTERNAL_VERSION" >&5 $as_echo "$SPEEX_INTERNAL_VERSION" >&6; } if test "x${localspeex}" = "xyes" ; then { $as_echo "$as_me:$LINENO: forcing use of local Speex sources" >&5 $as_echo "$as_me: forcing use of local Speex sources" >&6;} SPEEX_SYSTEM=no elif test "x${localspeex}" = "xno" ; then { $as_echo "$as_me:$LINENO: forcing use of system Speex library" >&5 $as_echo "$as_me: forcing use of system Speex library" >&6;} pkg_failed=no { $as_echo "$as_me:$LINENO: checking for SPEEX" >&5 $as_echo_n "checking for SPEEX... " >&6; } if test -n "$SPEEX_CFLAGS"; then pkg_cv_SPEEX_CFLAGS="$SPEEX_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"speex\"") >&5 ($PKG_CONFIG --exists --print-errors "speex") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_SPEEX_CFLAGS=`$PKG_CONFIG --cflags "speex" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$SPEEX_LIBS"; then pkg_cv_SPEEX_LIBS="$SPEEX_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"speex\"") >&5 ($PKG_CONFIG --exists --print-errors "speex") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_SPEEX_LIBS=`$PKG_CONFIG --libs "speex" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then SPEEX_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "speex" 2>&1` else SPEEX_PKG_ERRORS=`$PKG_CONFIG --print-errors "speex" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$SPEEX_PKG_ERRORS" >&5 { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:$LINENO: error: cannot find system speex" >&5 $as_echo "$as_me: error: cannot find system speex" >&2;} { (exit 1); exit 1; }; } elif test $pkg_failed = untried; then { { $as_echo "$as_me:$LINENO: error: cannot find system speex" >&5 $as_echo "$as_me: error: cannot find system speex" >&2;} { (exit 1); exit 1; }; } else SPEEX_CFLAGS=$pkg_cv_SPEEX_CFLAGS SPEEX_LIBS=$pkg_cv_SPEEX_LIBS { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } SPEEX_SYSTEM=yes fi else { $as_echo "$as_me:$LINENO: checking whether system Speex or internal Speex is more recent" >&5 $as_echo "$as_me: checking whether system Speex or internal Speex is more recent" >&6;} pkg_failed=no { $as_echo "$as_me:$LINENO: checking for SPEEX" >&5 $as_echo_n "checking for SPEEX... " >&6; } if test -n "$SPEEX_CFLAGS"; then pkg_cv_SPEEX_CFLAGS="$SPEEX_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"speex >= \$SPEEX_INTERNAL_VERSION\"") >&5 ($PKG_CONFIG --exists --print-errors "speex >= $SPEEX_INTERNAL_VERSION") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_SPEEX_CFLAGS=`$PKG_CONFIG --cflags "speex >= $SPEEX_INTERNAL_VERSION" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$SPEEX_LIBS"; then pkg_cv_SPEEX_LIBS="$SPEEX_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"speex >= \$SPEEX_INTERNAL_VERSION\"") >&5 ($PKG_CONFIG --exists --print-errors "speex >= $SPEEX_INTERNAL_VERSION") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_SPEEX_LIBS=`$PKG_CONFIG --libs "speex >= $SPEEX_INTERNAL_VERSION" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then SPEEX_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "speex >= $SPEEX_INTERNAL_VERSION" 2>&1` else SPEEX_PKG_ERRORS=`$PKG_CONFIG --print-errors "speex >= $SPEEX_INTERNAL_VERSION" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$SPEEX_PKG_ERRORS" >&5 { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } SPEEX_SYSTEM=no { $as_echo "$as_me:$LINENO: result: internal Speex version is more recent than system Speex or system Speex not found" >&5 $as_echo "internal Speex version is more recent than system Speex or system Speex not found" >&6; } elif test $pkg_failed = untried; then SPEEX_SYSTEM=no { $as_echo "$as_me:$LINENO: result: internal Speex version is more recent than system Speex or system Speex not found" >&5 $as_echo "internal Speex version is more recent than system Speex or system Speex not found" >&6; } else SPEEX_CFLAGS=$pkg_cv_SPEEX_CFLAGS SPEEX_LIBS=$pkg_cv_SPEEX_LIBS { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } SPEEX_SYSTEM=yes fi fi if test "x${SPEEX_SYSTEM}" = "xyes" ; then SPEEX_SYSTEM_VERSION=`$PKG_CONFIG speex --modversion` { $as_echo "$as_me:$LINENO: result: using system Speex version $SPEEX_SYSTEM_VERSION" >&5 $as_echo "using system Speex version $SPEEX_SYSTEM_VERSION" >&6; } fi # Check whether --enable-localilbc was given. if test "${enable_localilbc+set}" = set; then enableval=$enable_localilbc; localilbc=$enableval else localilbc= fi if test "x${localilbc}" = "xyes" ; then { $as_echo "$as_me:$LINENO: forcing use of local iLBC sources" >&5 $as_echo "$as_me: forcing use of local iLBC sources" >&6;} ILBC_SYSTEM=no else { $as_echo "$as_me:$LINENO: checking if iLBC is installed" >&5 $as_echo "$as_me: checking if iLBC is installed" >&6;} saved_LIBS="$LIBS" LIBS="$LIBS -lilbc" { $as_echo "$as_me:$LINENO: checking for iLBC_encode in -lilbc" >&5 $as_echo_n "checking for iLBC_encode in -lilbc... " >&6; } if test "${ac_cv_lib_ilbc_iLBC_encode+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lilbc $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char iLBC_encode (); int main () { return iLBC_encode (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_ilbc_iLBC_encode=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_ilbc_iLBC_encode=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ilbc_iLBC_encode" >&5 $as_echo "$ac_cv_lib_ilbc_iLBC_encode" >&6; } if test "x$ac_cv_lib_ilbc_iLBC_encode" = x""yes; then has_ilbc=yes else has_ilbc=no fi LIBS=$saved_LIBS if test "x${has_ilbc}" = "xyes"; then for ac_header in ilbc/iLBC_decode.h ilbc/iLBC_define.h ilbc/iLBC_encode.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF has_ilbc=yes else has_ilbc=no fi done fi if test "x${has_ilbc}" = "xyes"; then ILBC_CFLAGS="" ILBC_LIBS="-lilbc" ILBC_SYSTEM=yes else ILBC_SYSTEM=no fi { $as_echo "$as_me:$LINENO: checking System iLBC" >&5 $as_echo_n "checking System iLBC... " >&6; } { $as_echo "$as_me:$LINENO: result: $has_ilbc" >&5 $as_echo "$has_ilbc" >&6; } fi # Check whether --enable-sbc was given. if test "${enable_sbc+set}" = set; then enableval=$enable_sbc; has_sbc=$enableval else has_sbc= fi if test "$has_sbc" = "yes" ; then { $as_echo "$as_me:$LINENO: checking for src_get_version in -lsamplerate" >&5 $as_echo_n "checking for src_get_version in -lsamplerate... " >&6; } if test "${ac_cv_lib_samplerate_src_get_version+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsamplerate $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char src_get_version (); int main () { return src_get_version (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_samplerate_src_get_version=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_samplerate_src_get_version=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_samplerate_src_get_version" >&5 $as_echo "$ac_cv_lib_samplerate_src_get_version" >&6; } if test "x$ac_cv_lib_samplerate_src_get_version" = x""yes; then has_samplerate=yes else has_samplerate=no fi if test "$has_samplerate" = "yes" ; then HAVE_SBC=yes cat >>confdefs.h <<\_ACEOF #define HAVE_SBC 1 _ACEOF { $as_echo "$as_me:$LINENO: Enabling SBC codec" >&5 $as_echo "$as_me: Enabling SBC codec" >&6;} fi fi if test "x$DEFAULT_TO_FULL_CAPABILITIES" = "x"; then { { $as_echo "$as_me:$LINENO: error: No default specified for DEFAULT_TO_FULL_CAPABILITIES, please correct configure.ac" >&5 $as_echo "$as_me: error: No default specified for DEFAULT_TO_FULL_CAPABILITIES, please correct configure.ac" >&2;} { (exit 1); exit 1; }; } fi # Check whether --enable-default-to-full-capabilties was given. if test "${enable_default_to_full_capabilties+set}" = set; then enableval=$enable_default_to_full_capabilties; DEFAULT_TO_FULL_CAPABILITIES=$enableval fi if test "x" != "x"; then if test "x$" != "xyes"; then { $as_echo "$as_me:$LINENO: default-to-full-capabilties support disabled due to disabled dependency " >&5 $as_echo "$as_me: default-to-full-capabilties support disabled due to disabled dependency " >&6;} DEFAULT_TO_FULL_CAPABILITIES=no fi fi if test "x" != "x"; then if test "x$" != "xyes"; then { $as_echo "$as_me:$LINENO: default-to-full-capabilties support disabled due to disabled dependency " >&5 $as_echo "$as_me: default-to-full-capabilties support disabled due to disabled dependency " >&6;} DEFAULT_TO_FULL_CAPABILITIES=no fi fi { $as_echo "$as_me:$LINENO: checking default to full capabilities at empty fmtp lines" >&5 $as_echo_n "checking default to full capabilities at empty fmtp lines... " >&6; } { $as_echo "$as_me:$LINENO: result: $DEFAULT_TO_FULL_CAPABILITIES" >&5 $as_echo "$DEFAULT_TO_FULL_CAPABILITIES" >&6; } if test "x$DEFAULT_TO_FULL_CAPABILITIES" = "xyes"; then cat >>confdefs.h <<\_ACEOF #define DEFAULT_TO_FULL_CAPABILITIES 1 _ACEOF fi # Check whether --enable-libavcodec was given. if test "${enable_libavcodec+set}" = set; then enableval=$enable_libavcodec; HAVE_LIBAVCODEC=$enableval fi if test "x$HAVE_LIBAVCODEC" = "xno" ; then { $as_echo "$as_me:$LINENO: result: Manually disabled libavcodec support" >&5 $as_echo "Manually disabled libavcodec support" >&6; } HAVE_H263=no HAVE_H263P=no HAVE_MPEG4=no HAVE_H264_DECODER=no else pkg_failed=no { $as_echo "$as_me:$LINENO: checking for LIBAVCODEC" >&5 $as_echo_n "checking for LIBAVCODEC... " >&6; } if test -n "$LIBAVCODEC_CFLAGS"; then pkg_cv_LIBAVCODEC_CFLAGS="$LIBAVCODEC_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"libavcodec >= 51.11.0\"") >&5 ($PKG_CONFIG --exists --print-errors "libavcodec >= 51.11.0") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_LIBAVCODEC_CFLAGS=`$PKG_CONFIG --cflags "libavcodec >= 51.11.0" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBAVCODEC_LIBS"; then pkg_cv_LIBAVCODEC_LIBS="$LIBAVCODEC_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"libavcodec >= 51.11.0\"") >&5 ($PKG_CONFIG --exists --print-errors "libavcodec >= 51.11.0") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_LIBAVCODEC_LIBS=`$PKG_CONFIG --libs "libavcodec >= 51.11.0" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBAVCODEC_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libavcodec >= 51.11.0" 2>&1` else LIBAVCODEC_PKG_ERRORS=`$PKG_CONFIG --print-errors "libavcodec >= 51.11.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBAVCODEC_PKG_ERRORS" >&5 { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } HAVE_LIBAVCODEC=no HAVE_H263=no HAVE_H263P=no HAVE_MPEG4=no HAVE_H264_DECODER=no elif test $pkg_failed = untried; then HAVE_LIBAVCODEC=no HAVE_H263=no HAVE_H263P=no HAVE_MPEG4=no HAVE_H264_DECODER=no else LIBAVCODEC_CFLAGS=$pkg_cv_LIBAVCODEC_CFLAGS LIBAVCODEC_LIBS=$pkg_cv_LIBAVCODEC_LIBS { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } cat >>confdefs.h <<\_ACEOF #define HAVE_LIBAVCODEC 1 _ACEOF HAVE_LIBAVCODEC=yes # Check whether --enable-libavcodec-stackalign-hack was given. if test "${enable_libavcodec_stackalign_hack+set}" = set; then enableval=$enable_libavcodec_stackalign_hack; LIBAVCODEC_STACKALIGN_HACK=$enableval fi if test x$LIBAVCODEC_STACKALIGN_HACK = xyes; then { $as_echo "$as_me:$LINENO: libavcodec stack align hack enabled" >&5 $as_echo "$as_me: libavcodec stack align hack enabled" >&6;} cat >>confdefs.h <<\_ACEOF #define LIBAVCODEC_STACKALIGN_HACK 1 _ACEOF else { $as_echo "$as_me:$LINENO: libavcodec stack align hack disabled" >&5 $as_echo "$as_me: libavcodec stack align hack disabled" >&6;} fi case "$target_os" in cygwin* | mingw* ) LIBAVCODEC_LIB_NAME="avcodec.dll" HAVE_H263=yes HAVE_H263P=yes HAVE_MPEG4=yes HAVE_H264_DECODER=yes ;; * ) { $as_echo "$as_me:$LINENO: checking for h263p_encoder in -lavcodec" >&5 $as_echo_n "checking for h263p_encoder in -lavcodec... " >&6; } if test "${ac_cv_lib_avcodec_h263p_encoder+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lavcodec $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char h263p_encoder (); int main () { return h263p_encoder (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_avcodec_h263p_encoder=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_avcodec_h263p_encoder=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_avcodec_h263p_encoder" >&5 $as_echo "$ac_cv_lib_avcodec_h263p_encoder" >&6; } if test "x$ac_cv_lib_avcodec_h263p_encoder" = x""yes; then HAVE_H263=yes else HAVE_H263=no fi { $as_echo "$as_me:$LINENO: checking for h263p_encoder in -lavcodec" >&5 $as_echo_n "checking for h263p_encoder in -lavcodec... " >&6; } if test "${ac_cv_lib_avcodec_h263p_encoder+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lavcodec $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char h263p_encoder (); int main () { return h263p_encoder (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_avcodec_h263p_encoder=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_avcodec_h263p_encoder=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_avcodec_h263p_encoder" >&5 $as_echo "$ac_cv_lib_avcodec_h263p_encoder" >&6; } if test "x$ac_cv_lib_avcodec_h263p_encoder" = x""yes; then HAVE_H263P=yes else HAVE_H263P=no fi { $as_echo "$as_me:$LINENO: checking for mpeg4_encoder in -lavcodec" >&5 $as_echo_n "checking for mpeg4_encoder in -lavcodec... " >&6; } if test "${ac_cv_lib_avcodec_mpeg4_encoder+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lavcodec $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char mpeg4_encoder (); int main () { return mpeg4_encoder (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_avcodec_mpeg4_encoder=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_avcodec_mpeg4_encoder=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_avcodec_mpeg4_encoder" >&5 $as_echo "$ac_cv_lib_avcodec_mpeg4_encoder" >&6; } if test "x$ac_cv_lib_avcodec_mpeg4_encoder" = x""yes; then HAVE_MPEG4=yes else HAVE_MPEG4=no fi { $as_echo "$as_me:$LINENO: checking for h264_decoder in -lavcodec" >&5 $as_echo_n "checking for h264_decoder in -lavcodec... " >&6; } if test "${ac_cv_lib_avcodec_h264_decoder+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lavcodec $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char h264_decoder (); int main () { return h264_decoder (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_avcodec_h264_decoder=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_avcodec_h264_decoder=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_avcodec_h264_decoder" >&5 $as_echo "$ac_cv_lib_avcodec_h264_decoder" >&6; } if test "x$ac_cv_lib_avcodec_h264_decoder" = x""yes; then HAVE_H264_DECODER=yes else HAVE_H264_DECODER=no fi ;; esac LIBAVCODEC_HEADER= old_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $LIBAVCODEC_CFLAGS" if test "${ac_cv_header_libavcodec_avcodec_h+set}" = set; then { $as_echo "$as_me:$LINENO: checking for libavcodec/avcodec.h" >&5 $as_echo_n "checking for libavcodec/avcodec.h... " >&6; } if test "${ac_cv_header_libavcodec_avcodec_h+set}" = set; then $as_echo_n "(cached) " >&6 fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_libavcodec_avcodec_h" >&5 $as_echo "$ac_cv_header_libavcodec_avcodec_h" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking libavcodec/avcodec.h usability" >&5 $as_echo_n "checking libavcodec/avcodec.h usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking libavcodec/avcodec.h presence" >&5 $as_echo_n "checking libavcodec/avcodec.h presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: libavcodec/avcodec.h: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: libavcodec/avcodec.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: libavcodec/avcodec.h: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: libavcodec/avcodec.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: libavcodec/avcodec.h: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: libavcodec/avcodec.h: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: libavcodec/avcodec.h: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: libavcodec/avcodec.h: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: libavcodec/avcodec.h: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: libavcodec/avcodec.h: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: libavcodec/avcodec.h: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: libavcodec/avcodec.h: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: libavcodec/avcodec.h: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: libavcodec/avcodec.h: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: libavcodec/avcodec.h: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: libavcodec/avcodec.h: in the future, the compiler will take precedence" >&2;} ;; esac { $as_echo "$as_me:$LINENO: checking for libavcodec/avcodec.h" >&5 $as_echo_n "checking for libavcodec/avcodec.h... " >&6; } if test "${ac_cv_header_libavcodec_avcodec_h+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_header_libavcodec_avcodec_h=$ac_header_preproc fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_libavcodec_avcodec_h" >&5 $as_echo "$ac_cv_header_libavcodec_avcodec_h" >&6; } fi if test "x$ac_cv_header_libavcodec_avcodec_h" = x""yes; then cat >>confdefs.h <<\_ACEOF #define LIBAVCODEC_HEADER "libavcodec/avcodec.h" _ACEOF LIBAVCODEC_HEADER="libavcodec/avcodec.h" fi if test x$LIBAVCODEC_HEADER = x; then if test "${ac_cv_header_ffmpeg_avcodec_h+set}" = set; then { $as_echo "$as_me:$LINENO: checking for ffmpeg/avcodec.h" >&5 $as_echo_n "checking for ffmpeg/avcodec.h... " >&6; } if test "${ac_cv_header_ffmpeg_avcodec_h+set}" = set; then $as_echo_n "(cached) " >&6 fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_ffmpeg_avcodec_h" >&5 $as_echo "$ac_cv_header_ffmpeg_avcodec_h" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking ffmpeg/avcodec.h usability" >&5 $as_echo_n "checking ffmpeg/avcodec.h usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking ffmpeg/avcodec.h presence" >&5 $as_echo_n "checking ffmpeg/avcodec.h presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: ffmpeg/avcodec.h: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: ffmpeg/avcodec.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: ffmpeg/avcodec.h: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: ffmpeg/avcodec.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: ffmpeg/avcodec.h: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: ffmpeg/avcodec.h: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: ffmpeg/avcodec.h: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: ffmpeg/avcodec.h: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: ffmpeg/avcodec.h: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: ffmpeg/avcodec.h: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: ffmpeg/avcodec.h: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: ffmpeg/avcodec.h: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: ffmpeg/avcodec.h: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: ffmpeg/avcodec.h: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: ffmpeg/avcodec.h: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: ffmpeg/avcodec.h: in the future, the compiler will take precedence" >&2;} ;; esac { $as_echo "$as_me:$LINENO: checking for ffmpeg/avcodec.h" >&5 $as_echo_n "checking for ffmpeg/avcodec.h... " >&6; } if test "${ac_cv_header_ffmpeg_avcodec_h+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_header_ffmpeg_avcodec_h=$ac_header_preproc fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_ffmpeg_avcodec_h" >&5 $as_echo "$ac_cv_header_ffmpeg_avcodec_h" >&6; } fi if test "x$ac_cv_header_ffmpeg_avcodec_h" = x""yes; then cat >>confdefs.h <<\_ACEOF #define LIBAVCODEC_HEADER "ffmpeg/avcodec.h" _ACEOF LIBAVCODEC_HEADER="ffmpeg/avcodec.h" fi fi if test x$LIBAVCODEC_HEADER = x; then { { $as_echo "$as_me:$LINENO: error: Cannot find libavcodec header file" >&5 $as_echo "$as_me: error: Cannot find libavcodec header file" >&2;} { (exit 1); exit 1; }; } fi CFLAGS="$old_CFLAGS" fi fi { $as_echo "$as_me:$LINENO: checking libavcodec source" >&5 $as_echo_n "checking libavcodec source... " >&6; } LIBAVCODEC_SOURCE_DIR= # Check whether --with-libavcodec-source-dir was given. if test "${with_libavcodec_source_dir+set}" = set; then withval=$with_libavcodec_source_dir; fi if test -f "$with_libavcodec_source_dir/libavcodec/avcodec.h" then { $as_echo "$as_me:$LINENO: result: enabled" >&5 $as_echo "enabled" >&6; } LIBAVCODEC_SOURCE_DIR="$with_libavcodec_source_dir" cat >>confdefs.h <<\_ACEOF #define LIBAVCODEC_HAVE_SOURCE_DIR 1 _ACEOF else LIBAVCODEC_SOURCE_DIR= { $as_echo "$as_me:$LINENO: result: disabled" >&5 $as_echo "disabled" >&6; } fi if test "x$HAVE_LIBAVCODEC" = "xyes" ; then { $as_echo "$as_me:$LINENO: checking if libavcodec has rtp_mode" >&5 $as_echo_n "checking if libavcodec has rtp_mode... " >&6; }; LIBAVINCDIR=`pkg-config --variable=includedir libavcodec`/libavcodec cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { int main(int ac,char **av) { AVCodecContext c; c.rtp_mode = 1; return 0; } ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then HAVE_LIBAVCODEC_RTP_MODE=1 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test "x$HAVE_LIBAVCODEC_RTP_MODE" = "x1" ; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; }; else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi # Check whether --enable-x264 was given. if test "${enable_x264+set}" = set; then enableval=$enable_x264; HAVE_X264=$enableval fi if test "x$HAVE_X264" = "xno" ; then { $as_echo "$as_me:$LINENO: result: Manually disabled X264" >&5 $as_echo "Manually disabled X264" >&6; } else pkg_failed=no { $as_echo "$as_me:$LINENO: checking for X264" >&5 $as_echo_n "checking for X264... " >&6; } if test -n "$X264_CFLAGS"; then pkg_cv_X264_CFLAGS="$X264_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"x264 >= 0.48\"") >&5 ($PKG_CONFIG --exists --print-errors "x264 >= 0.48") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_X264_CFLAGS=`$PKG_CONFIG --cflags "x264 >= 0.48" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$X264_LIBS"; then pkg_cv_X264_LIBS="$X264_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"x264 >= 0.48\"") >&5 ($PKG_CONFIG --exists --print-errors "x264 >= 0.48") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_X264_LIBS=`$PKG_CONFIG --libs "x264 >= 0.48" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then X264_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "x264 >= 0.48" 2>&1` else X264_PKG_ERRORS=`$PKG_CONFIG --print-errors "x264 >= 0.48" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$X264_PKG_ERRORS" >&5 { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } HAVE_X264=no elif test $pkg_failed = untried; then HAVE_X264=no else X264_CFLAGS=$pkg_cv_X264_CFLAGS X264_LIBS=$pkg_cv_X264_LIBS { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } HAVE_X264=yes { $as_echo "$as_me:$LINENO: checking filename of libx264 library" >&5 $as_echo_n "checking filename of libx264 library... " >&6; } cat >conftest.$ac_ext <<_ACEOF int main () {} _ACEOF $CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS $X264_LIBS>&5 if test \! -x conftest$ac_exeext ; then { $as_echo "$as_me:$LINENO: result: cannot determine - using defaults" >&5 $as_echo "cannot determine - using defaults" >&6; } else X264_LIB_NAME=`$OBJDUMP -x ./conftest$ac_exeext | grep 'NEEDED.*libx264' | awk '{print $2; }'` { $as_echo "$as_me:$LINENO: result: $X264_LIB_NAME" >&5 $as_echo "$X264_LIB_NAME" >&6; } cat >>confdefs.h <<_ACEOF #define X264_LIB_NAME "$X264_LIB_NAME" _ACEOF fi # Check whether --enable-x264-link-static was given. if test "${enable_x264_link_static+set}" = set; then enableval=$enable_x264_link_static; X264_LINK_STATIC=$enableval fi if test x$X264_LINK_STATIC = xyes; then { $as_echo "$as_me:$LINENO: x264 static linking enabled" >&5 $as_echo "$as_me: x264 static linking enabled" >&6;} cat >>confdefs.h <<\_ACEOF #define X264_LINK_STATIC 1 _ACEOF else { $as_echo "$as_me:$LINENO: x264 static linking disabled" >&5 $as_echo "$as_me: x264 static linking disabled" >&6;} fi fi fi # Check whether --enable-theora was given. if test "${enable_theora+set}" = set; then enableval=$enable_theora; HAVE_THEORA=$enableval fi if test "x$HAVE_THEORA" = "xno" ; then { $as_echo "$as_me:$LINENO: result: Manually disabled theora" >&5 $as_echo "Manually disabled theora" >&6; } else pkg_failed=no { $as_echo "$as_me:$LINENO: checking for THEORA" >&5 $as_echo_n "checking for THEORA... " >&6; } if test -n "$THEORA_CFLAGS"; then pkg_cv_THEORA_CFLAGS="$THEORA_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"theora\"") >&5 ($PKG_CONFIG --exists --print-errors "theora") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_THEORA_CFLAGS=`$PKG_CONFIG --cflags "theora" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$THEORA_LIBS"; then pkg_cv_THEORA_LIBS="$THEORA_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"theora\"") >&5 ($PKG_CONFIG --exists --print-errors "theora") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_THEORA_LIBS=`$PKG_CONFIG --libs "theora" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then THEORA_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "theora" 2>&1` else THEORA_PKG_ERRORS=`$PKG_CONFIG --print-errors "theora" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$THEORA_PKG_ERRORS" >&5 { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } HAVE_THEORA=no elif test $pkg_failed = untried; then HAVE_THEORA=no else THEORA_CFLAGS=$pkg_cv_THEORA_CFLAGS THEORA_LIBS=$pkg_cv_THEORA_LIBS { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } cat >>confdefs.h <<\_ACEOF #define HAVE_THEORA 1 _ACEOF HAVE_THEORA=yes fi fi # Check whether --enable-celt was given. if test "${enable_celt+set}" = set; then enableval=$enable_celt; HAVE_CELT=$enableval fi if test "x$HAVE_CELT" = "xno" ; then { $as_echo "$as_me:$LINENO: result: Manually disabled CELT" >&5 $as_echo "Manually disabled CELT" >&6; } else pkg_failed=no { $as_echo "$as_me:$LINENO: checking for CELT" >&5 $as_echo_n "checking for CELT... " >&6; } if test -n "$CELT_CFLAGS"; then pkg_cv_CELT_CFLAGS="$CELT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"celt\"") >&5 ($PKG_CONFIG --exists --print-errors "celt") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_CELT_CFLAGS=`$PKG_CONFIG --cflags "celt" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$CELT_LIBS"; then pkg_cv_CELT_LIBS="$CELT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"celt\"") >&5 ($PKG_CONFIG --exists --print-errors "celt") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_CELT_LIBS=`$PKG_CONFIG --libs "celt" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then CELT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "celt" 2>&1` else CELT_PKG_ERRORS=`$PKG_CONFIG --print-errors "celt" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$CELT_PKG_ERRORS" >&5 { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } HAVE_CELT=no elif test $pkg_failed = untried; then HAVE_CELT=no else CELT_CFLAGS=$pkg_cv_CELT_CFLAGS CELT_LIBS=$pkg_cv_CELT_LIBS { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } cat >>confdefs.h <<\_ACEOF #define HAVE_CELT 1 _ACEOF HAVE_CELT=yes if test -n "$PKG_CONFIG" && \ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"celt >= 0.5.0\"") >&5 ($PKG_CONFIG --exists --print-errors "celt >= 0.5.0") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then cat >>confdefs.h <<\_ACEOF #define HAVE_CELT_0_5_0_OR_LATER 1 _ACEOF fi fi fi opal_libdl=no for ac_header in dlfcn.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF opal_dlfcn=yes else opal_dlfcn=no fi done if test "$opal_dlfcn" = yes ; then { $as_echo "$as_me:$LINENO: checking if dlopen is available" >&5 $as_echo_n "checking if dlopen is available... " >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { void * p = dlopen("lib", 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then opal_dlopen=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 opal_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test "$opal_dlopen" = no ; then { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } else { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } case "$target_os" in freebsd*|openbsd*|netbsd*|darwin*) { $as_echo "$as_me:$LINENO: checking for dlopen in -lc" >&5 $as_echo_n "checking for dlopen in -lc... " >&6; } if test "${ac_cv_lib_c_dlopen+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_c_dlopen=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_c_dlopen=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_c_dlopen" >&5 $as_echo "$ac_cv_lib_c_dlopen" >&6; } if test "x$ac_cv_lib_c_dlopen" = x""yes; then opal_libdl=yes DL_LIBS="-lc" else opal_libdl=no fi ;; *) { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_dl_dlopen=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = x""yes; then opal_libdl=yes DL_LIBS="-ldl" else opal_libdl=no fi ;; esac fi fi if test $opal_libdl = yes; then HAVE_LIBDL=yes else HAVE_LIBDL=no fi if test "x$X264_LINK_STATIC" != "xyes"&& test "x$HAVE_LIBDL" != "xyes" ; then { $as_echo "$as_me:$LINENO: H.264 support disabled since static linking was disabled and libdl was not found" >&5 $as_echo "$as_me: H.264 support disabled since static linking was disabled and libdl was not found" >&6;} HAVE_H264=no else if test "x$HAVE_H264" = "x"; then { { $as_echo "$as_me:$LINENO: error: No default specified for HAVE_H264, please correct configure.ac" >&5 $as_echo "$as_me: error: No default specified for HAVE_H264, please correct configure.ac" >&2;} { (exit 1); exit 1; }; } fi # Check whether --enable-h264 was given. if test "${enable_h264+set}" = set; then enableval=$enable_h264; HAVE_H264=$enableval fi if test "xHAVE_X264" != "x"; then if test "x$HAVE_X264" != "xyes"; then { $as_echo "$as_me:$LINENO: h264 support disabled due to disabled dependency HAVE_X264" >&5 $as_echo "$as_me: h264 support disabled due to disabled dependency HAVE_X264" >&6;} HAVE_H264=no fi fi if test "xHAVE_H264_DECODER" != "x"; then if test "x$HAVE_H264_DECODER" != "xyes"; then { $as_echo "$as_me:$LINENO: h264 support disabled due to disabled dependency HAVE_H264_DECODER" >&5 $as_echo "$as_me: h264 support disabled due to disabled dependency HAVE_H264_DECODER" >&6;} HAVE_H264=no fi fi { $as_echo "$as_me:$LINENO: checking enable H.264 support" >&5 $as_echo_n "checking enable H.264 support... " >&6; } { $as_echo "$as_me:$LINENO: result: $HAVE_H264" >&5 $as_echo "$HAVE_H264" >&6; } if test "x$HAVE_H264" = "xyes"; then cat >>confdefs.h <<\_ACEOF #define HAVE_H264 1 _ACEOF fi fi # Check whether --enable-ixj was given. if test "${enable_ixj+set}" = set; then enableval=$enable_ixj; HAVE_IXJ=$enableval fi if test "x$HAVE_IXJ" = "xyes" ; then { $as_echo "$as_me:$LINENO: checking IXJ" >&5 $as_echo_n "checking IXJ... " >&6; } { $as_echo "$as_me:$LINENO: result: $HAVE_IXJ" >&5 $as_echo "$HAVE_IXJ" >&6; } if test "x$HAVE_IXJ" = "xyes" ; then for ac_header in linux/telephony.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF HAVE_IXJ=yes else for ac_header in sys/telephony.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF HAVE_IXJ=yes else HAVE_IXJ=no fi done fi done if test "x$HAVE_IXJ" = "xyes" ; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { int main(int ac,char **av) { return 0; } ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then HAVE_IXJ=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 HAVE_IXJ=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi fi fi { $as_echo "$as_me:$LINENO: checking IXJ" >&5 $as_echo_n "checking IXJ... " >&6; } { $as_echo "$as_me:$LINENO: result: $HAVE_IXJ" >&5 $as_echo "$HAVE_IXJ" >&6; } if test "x$HAVE_VPB" = "x"; then { { $as_echo "$as_me:$LINENO: error: No default specified for HAVE_VPB, please correct configure.ac" >&5 $as_echo "$as_me: error: No default specified for HAVE_VPB, please correct configure.ac" >&2;} { (exit 1); exit 1; }; } fi # Check whether --enable-vpb was given. if test "${enable_vpb+set}" = set; then enableval=$enable_vpb; HAVE_VPB=$enableval fi if test "x" != "x"; then if test "x$" != "xyes"; then { $as_echo "$as_me:$LINENO: vpb support disabled due to disabled dependency " >&5 $as_echo "$as_me: vpb support disabled due to disabled dependency " >&6;} HAVE_VPB=no fi fi if test "x" != "x"; then if test "x$" != "xyes"; then { $as_echo "$as_me:$LINENO: vpb support disabled due to disabled dependency " >&5 $as_echo "$as_me: vpb support disabled due to disabled dependency " >&6;} HAVE_VPB=no fi fi { $as_echo "$as_me:$LINENO: checking enable voicetronix vpb" >&5 $as_echo_n "checking enable voicetronix vpb... " >&6; } { $as_echo "$as_me:$LINENO: result: $HAVE_VPB" >&5 $as_echo "$HAVE_VPB" >&6; } if test "x$HAVE_VPB" = "xyes"; then cat >>confdefs.h <<\_ACEOF #define HAVE_VPB 1 _ACEOF fi # Check whether --enable-capi was given. if test "${enable_capi+set}" = set; then enableval=$enable_capi; HAVE_CAPI=$enableval fi if test "x$HAVE_CAPI" = "xyes" ; then for ac_header in capi20.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF HAVE_CAPI=yes else HAVE_CAPI=no fi done fi { $as_echo "$as_me:$LINENO: checking CAPI" >&5 $as_echo_n "checking CAPI... " >&6; } { $as_echo "$as_me:$LINENO: result: $HAVE_CAPI" >&5 $as_echo "$HAVE_CAPI" >&6; } # Check whether --enable-spandsp was given. if test "${enable_spandsp+set}" = set; then enableval=$enable_spandsp; HAVE_SPANDSP=$enableval fi if test "x${HAVE_SPANDSP}" = "xyes" ; then saved_LIBS="$LIBS" LIBS="$LIBS -lspandsp" { $as_echo "$as_me:$LINENO: checking for fax_free in -lspandsp" >&5 $as_echo_n "checking for fax_free in -lspandsp... " >&6; } if test "${ac_cv_lib_spandsp_fax_free+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lspandsp $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char fax_free (); int main () { return fax_free (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_spandsp_fax_free=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_spandsp_fax_free=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_spandsp_fax_free" >&5 $as_echo "$ac_cv_lib_spandsp_fax_free" >&6; } if test "x$ac_cv_lib_spandsp_fax_free" = x""yes; then opal_spandsp=yes else opal_spandsp=no fi LIBS=$saved_LIBS if test "x${opal_spandsp}" = "xyes"; then SPANDSP_LIBS="-lspandsp" for ac_header in spandsp.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF opal_spandsp=yes else opal_spandsp=no fi done fi if test $opal_spandsp = yes; then HAVE_SPANDSP=yes else HAVE_SPANDSP=no fi fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:$LINENO: checking for posix_memalign" >&5 $as_echo_n "checking for posix_memalign... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { void * p; posix_memalign(&p, 16, 16); return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } cat >>confdefs.h <<\_ACEOF #define HAVE_POSIX_MEMALIGN 1 _ACEOF else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -d audio/G722 ; then ac_config_files="$ac_config_files audio/G722/Makefile" fi if test -d audio/G.722.1 ; then ac_config_files="$ac_config_files audio/G.722.1/Makefile" fi if test -d audio/G.722.2 ; then ac_config_files="$ac_config_files audio/G.722.2/Makefile" fi if test -d audio/GSM0610 ; then ac_config_files="$ac_config_files audio/GSM0610/Makefile" fi if test -d audio/gsm-amr ; then ac_config_files="$ac_config_files audio/gsm-amr/Makefile" fi if test -d audio/iLBC ; then ac_config_files="$ac_config_files audio/iLBC/Makefile" fi if test -d audio/Speex ; then ac_config_files="$ac_config_files audio/Speex/Makefile" fi if test -d audio/LPC_10 ; then ac_config_files="$ac_config_files audio/LPC_10/Makefile" fi if test -d audio/G726 ; then ac_config_files="$ac_config_files audio/G726/Makefile" fi if test -d audio/IMA_ADPCM ; then ac_config_files="$ac_config_files audio/IMA_ADPCM/Makefile" fi if test -d audio/SBC ; then ac_config_files="$ac_config_files audio/SBC/Makefile" fi if test -d audio/celt ; then ac_config_files="$ac_config_files audio/celt/Makefile" fi if test -d video/H.261-vic ; then ac_config_files="$ac_config_files video/H.261-vic/Makefile" fi if test -d video/H.263-ffmpeg ; then ac_config_files="$ac_config_files video/H.263-ffmpeg/Makefile" fi if test -d video/H.263-1998; then ac_config_files="$ac_config_files video/H.263-1998/Makefile" fi if test -d video/MPEG4-ffmpeg ; then ac_config_files="$ac_config_files video/MPEG4-ffmpeg/Makefile" fi if test -d video/H.264 ; then ac_config_files="$ac_config_files video/H.264/Makefile" fi if test -d video/H.264/gpl; then ac_config_files="$ac_config_files video/H.264/gpl/Makefile" fi if test -d video/THEORA ; then ac_config_files="$ac_config_files video/THEORA/Makefile" fi if test -d LID/IxJ ; then ac_config_files="$ac_config_files LID/IxJ/Makefile" fi if test -d LID/VPB ; then ac_config_files="$ac_config_files LID/VPB/Makefile" fi if test -d LID/CAPI ; then ac_config_files="$ac_config_files LID/CAPI/Makefile" fi if test -d fax/fax_spandsp ; then ac_config_files="$ac_config_files fax/fax_spandsp/Makefile" fi ac_config_files="$ac_config_files Makefile" ac_config_files="$ac_config_files audio/Speex/libspeex/speex_config_types.h" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.63. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTION]... [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.63, with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2008 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac CONFIG_FILES="$CONFIG_FILES '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { $as_echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "audio/G722/Makefile") CONFIG_FILES="$CONFIG_FILES audio/G722/Makefile" ;; "audio/G.722.1/Makefile") CONFIG_FILES="$CONFIG_FILES audio/G.722.1/Makefile" ;; "audio/G.722.2/Makefile") CONFIG_FILES="$CONFIG_FILES audio/G.722.2/Makefile" ;; "audio/GSM0610/Makefile") CONFIG_FILES="$CONFIG_FILES audio/GSM0610/Makefile" ;; "audio/gsm-amr/Makefile") CONFIG_FILES="$CONFIG_FILES audio/gsm-amr/Makefile" ;; "audio/iLBC/Makefile") CONFIG_FILES="$CONFIG_FILES audio/iLBC/Makefile" ;; "audio/Speex/Makefile") CONFIG_FILES="$CONFIG_FILES audio/Speex/Makefile" ;; "audio/LPC_10/Makefile") CONFIG_FILES="$CONFIG_FILES audio/LPC_10/Makefile" ;; "audio/G726/Makefile") CONFIG_FILES="$CONFIG_FILES audio/G726/Makefile" ;; "audio/IMA_ADPCM/Makefile") CONFIG_FILES="$CONFIG_FILES audio/IMA_ADPCM/Makefile" ;; "audio/SBC/Makefile") CONFIG_FILES="$CONFIG_FILES audio/SBC/Makefile" ;; "audio/celt/Makefile") CONFIG_FILES="$CONFIG_FILES audio/celt/Makefile" ;; "video/H.261-vic/Makefile") CONFIG_FILES="$CONFIG_FILES video/H.261-vic/Makefile" ;; "video/H.263-ffmpeg/Makefile") CONFIG_FILES="$CONFIG_FILES video/H.263-ffmpeg/Makefile" ;; "video/H.263-1998/Makefile") CONFIG_FILES="$CONFIG_FILES video/H.263-1998/Makefile" ;; "video/MPEG4-ffmpeg/Makefile") CONFIG_FILES="$CONFIG_FILES video/MPEG4-ffmpeg/Makefile" ;; "video/H.264/Makefile") CONFIG_FILES="$CONFIG_FILES video/H.264/Makefile" ;; "video/H.264/gpl/Makefile") CONFIG_FILES="$CONFIG_FILES video/H.264/gpl/Makefile" ;; "video/THEORA/Makefile") CONFIG_FILES="$CONFIG_FILES video/THEORA/Makefile" ;; "LID/IxJ/Makefile") CONFIG_FILES="$CONFIG_FILES LID/IxJ/Makefile" ;; "LID/VPB/Makefile") CONFIG_FILES="$CONFIG_FILES LID/VPB/Makefile" ;; "LID/CAPI/Makefile") CONFIG_FILES="$CONFIG_FILES LID/CAPI/Makefile" ;; "fax/fax_spandsp/Makefile") CONFIG_FILES="$CONFIG_FILES fax/fax_spandsp/Makefile" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "audio/Speex/libspeex/speex_config_types.h") CONFIG_FILES="$CONFIG_FILES audio/Speex/libspeex/speex_config_types.h" ;; *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 $as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { $as_echo "$as_me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=' ' ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\).*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\).*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5 $as_echo "$as_me: error: could not setup config files machinery" >&2;} { (exit 1); exit 1; }; } _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5 $as_echo "$as_me: error: invalid tag $ac_tag" >&2;} { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 $as_echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac ac_file_inputs="$ac_file_inputs '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:$LINENO: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 $as_echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5 $as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi ac_config_headers="$ac_config_headers plugin-config.h" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.63. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTION]... [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.63, with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2008 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac CONFIG_FILES="$CONFIG_FILES '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header { $as_echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; };; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { $as_echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "audio/G722/Makefile") CONFIG_FILES="$CONFIG_FILES audio/G722/Makefile" ;; "audio/G.722.1/Makefile") CONFIG_FILES="$CONFIG_FILES audio/G.722.1/Makefile" ;; "audio/G.722.2/Makefile") CONFIG_FILES="$CONFIG_FILES audio/G.722.2/Makefile" ;; "audio/GSM0610/Makefile") CONFIG_FILES="$CONFIG_FILES audio/GSM0610/Makefile" ;; "audio/gsm-amr/Makefile") CONFIG_FILES="$CONFIG_FILES audio/gsm-amr/Makefile" ;; "audio/iLBC/Makefile") CONFIG_FILES="$CONFIG_FILES audio/iLBC/Makefile" ;; "audio/Speex/Makefile") CONFIG_FILES="$CONFIG_FILES audio/Speex/Makefile" ;; "audio/LPC_10/Makefile") CONFIG_FILES="$CONFIG_FILES audio/LPC_10/Makefile" ;; "audio/G726/Makefile") CONFIG_FILES="$CONFIG_FILES audio/G726/Makefile" ;; "audio/IMA_ADPCM/Makefile") CONFIG_FILES="$CONFIG_FILES audio/IMA_ADPCM/Makefile" ;; "audio/SBC/Makefile") CONFIG_FILES="$CONFIG_FILES audio/SBC/Makefile" ;; "audio/celt/Makefile") CONFIG_FILES="$CONFIG_FILES audio/celt/Makefile" ;; "video/H.261-vic/Makefile") CONFIG_FILES="$CONFIG_FILES video/H.261-vic/Makefile" ;; "video/H.263-ffmpeg/Makefile") CONFIG_FILES="$CONFIG_FILES video/H.263-ffmpeg/Makefile" ;; "video/H.263-1998/Makefile") CONFIG_FILES="$CONFIG_FILES video/H.263-1998/Makefile" ;; "video/MPEG4-ffmpeg/Makefile") CONFIG_FILES="$CONFIG_FILES video/MPEG4-ffmpeg/Makefile" ;; "video/H.264/Makefile") CONFIG_FILES="$CONFIG_FILES video/H.264/Makefile" ;; "video/H.264/gpl/Makefile") CONFIG_FILES="$CONFIG_FILES video/H.264/gpl/Makefile" ;; "video/THEORA/Makefile") CONFIG_FILES="$CONFIG_FILES video/THEORA/Makefile" ;; "LID/IxJ/Makefile") CONFIG_FILES="$CONFIG_FILES LID/IxJ/Makefile" ;; "LID/VPB/Makefile") CONFIG_FILES="$CONFIG_FILES LID/VPB/Makefile" ;; "LID/CAPI/Makefile") CONFIG_FILES="$CONFIG_FILES LID/CAPI/Makefile" ;; "fax/fax_spandsp/Makefile") CONFIG_FILES="$CONFIG_FILES fax/fax_spandsp/Makefile" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "audio/Speex/libspeex/speex_config_types.h") CONFIG_FILES="$CONFIG_FILES audio/Speex/libspeex/speex_config_types.h" ;; "plugin-config.h") CONFIG_HEADERS="$CONFIG_HEADERS plugin-config.h" ;; *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 $as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { $as_echo "$as_me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=' ' ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\).*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\).*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5 $as_echo "$as_me: error: could not setup config files machinery" >&2;} { (exit 1); exit 1; }; } _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_t=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_t"; then break elif $ac_last_try; then { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5 $as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5 $as_echo "$as_me: error: could not setup config headers machinery" >&2;} { (exit 1); exit 1; }; } fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5 $as_echo "$as_me: error: invalid tag $ac_tag" >&2;} { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 $as_echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac ac_file_inputs="$ac_file_inputs '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:$LINENO: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 $as_echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" } >"$tmp/config.h" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$tmp/config.h" "$ac_file" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5 $as_echo "$as_me: error: could not create -" >&2;} { (exit 1); exit 1; }; } fi ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5 $as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi echo "" echo "=================== Plugin configuration ======================" echo " prefix : $prefix" echo " exec_prefix : $exec_prefix" echo " libdir : $libdir" echo " Audio Codec plugin install dir : "'${libdir}'"/$AC_PLUGIN_DIR" echo " Video Codec plugin install prefix: "'${libdir}'"/$VC_PLUGIN_DIR" echo " LID plugin install prefix : "'${libdir}'"/$LID_PLUGIN_DIR" echo " FAX plugin install prefix : "'${libdir}'"/$FAX_PLUGIN_DIR" echo "" if test "x${GSM_SYSTEM}" = "xyes" ; then echo " GSM : yes (system)" else echo " GSM : yes (internal)" fi echo " gsm-amr : yes" if test "x${ILBC_SYSTEM}" = "xyes" ; then echo " iLBC : yes (system)" else echo " iLBC : yes (internal)" fi if test "x${SPEEX_SYSTEM}" = "xyes" ; then echo " Speex : yes (system, version $SPEEX_SYSTEM_VERSION)" else echo " Speex : yes (internal, version $SPEEX_INTERNAL_VERSION)" fi echo " LPC10 : yes" echo " G.726 : yes" echo " IMA_ADPCM : yes" if test "x${HAVE_SBC}" = "xyes" ; then echo " SBC : yes" else echo " SBC : no" fi echo "" echo " H.261 : yes" echo " H.263 : ${HAVE_H263} (ffmpeg version)" echo " H.263/H.263+ : ${HAVE_H263P}" echo " H.264 : ${HAVE_H264}" echo " THEORA : ${HAVE_THEORA}" if test "x${HAVE_MPEG4}" = "xyes" ; then if test "x${LIBAVCODEC_SOURCE_DIR}" = "x" ; then echo " MPEG4 Part 2 : yes (no rate control correction)" else echo " MPEG4 Part 2 : yes" fi else echo " MPEG4 Part 2 : no" fi echo " CELT : ${HAVE_CELT}" echo "" echo " SpanDSP FAX : $HAVE_SPANDSP" echo "" echo " CAPI : $HAVE_CAPI" echo " Quicknet xJACK support : $HAVE_IXJ" echo " Voicetronics VPB support : $HAVE_VPB" echo "" echo " OS Type : $target_os" echo " Machine Type : $target_cpu" echo "" echo " If all settings are OK, type make and make install " echo "========================================================" h323plus/plugins/audio/0000755000175000017500000000000011765231344013677 5ustar markmarkh323plus/plugins/audio/celt/0000755000175000017500000000000011341106247014617 5ustar markmarkh323plus/plugins/audio/celt/Makefile.in0000644000175000017500000000234211341106247016665 0ustar markmark# # Makefile for Celt Codec Plugin # # based on the GSM-AMR one # AC_PLUGIN_DIR=@AC_PLUGIN_DIR@ prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ target_os=@target_os@ PLUGINDIR=../.. BASENAME= celtcodec SONAME = $(BASENAME) CC =@CC@ CFLAGS =@CFLAGS@ CXX =@CXX@ LDSO =@LDSO@ PLUGINEXT =@PLUGINEXT@ STDCCFLAGS =@STDCCFLAGS@ LDFLAGS =@LDFLAGS@ LIBS = SRCS = celtcodec.c CFLAGS += -I../../../include EXTRACFLAGS=-I$(PLUGINDIR) EXTRACFLAGS += @CELT_CFLAGS@ LIBS += @CELT_LIBS@ PLUGIN = ./$(BASENAME)_pwplugin.$(PLUGINEXT) ifeq ($(VERBOSE),) Q_CC = @echo [CC] `echo $< | sed s^@OPALDIR@/^^` ; Q_LD = @echo [LD] `echo $(PLUGIN) | sed s^@OPALDIR@/^^` ; endif %.o : %.c $(Q_CC)$(CC) -c $(STDCCFLAGS) $(EXTRACFLAGS) $(CFLAGS) -o $@ $< OBJECTS = $(patsubst %.c,%.o,$(notdir $(SRCS))) $(PLUGIN): $(OBJECTS) ifeq (solaris,$(findstring solaris,$(target_os))) $(Q_LD)$(CC) $(LDSO) $@ -o $@ $^ $(LIBS) else $(Q_LD)$(CC) $(LDSO) -o $@ $^ $(LIBS) endif install: mkdir -p $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR) install $(PLUGIN) $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR) uninstall: rm -f $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR)/$(PLUGIN) clean: rm -f $(OBJECTS) $(PLUGIN) ########################################### h323plus/plugins/audio/celt/celtcodec.c0000644000175000017500000003270411341106247016716 0ustar markmark/* * CELT Codec Plugin for Opal * * Based on the GSM-AMR one */ #define _CRT_NONSTDC_NO_DEPRECATE 1 #define _CRT_SECURE_NO_WARNINGS 1 #include #include #include #include "plugin-config.h" #include #include #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE (!FALSE) #endif #if defined(_WIN32) || defined(_WIN32_WCE) #define STRCMPI _strcmpi #else #define STRCMPI strcasecmp #endif /*Disable some warnings on VC++*/ #ifdef _MSC_VER #pragma warning(disable : 4100) #endif // this is what we hand back when we are asked to create an encoder typedef struct { CELTDecoder *decoder_state; CELTEncoder *encoder_state; CELTMode *mode; int frame_size; int bytes_per_packet; } CELTContext; ///////////////////////////////////////////////////////////////////////////// static int init_mode(CELTContext *celt, const struct PluginCodec_Definition * codec) { int error = 0; celt->mode = celt_mode_create(codec->sampleRate, 1, codec->parm.audio.samplesPerFrame, &error); if (celt->mode == NULL) { return FALSE; } celt_mode_info(celt->mode, CELT_GET_FRAME_SIZE, &celt->frame_size); celt->bytes_per_packet = (codec->bitsPerSec * celt->frame_size/codec->sampleRate + 4) / 8; return TRUE; } static void * celt_create_encoder(const struct PluginCodec_Definition * codec) { CELTContext * celt = malloc(sizeof(CELTContext)); if (celt == NULL) return NULL; if (init_mode(celt, codec) == FALSE) { free(celt); return NULL; } celt->encoder_state = celt_encoder_create(celt->mode); if (celt->encoder_state == NULL ) { celt_mode_destroy(celt->mode); free(celt); return NULL; } return celt; } static void * celt_create_decoder(const struct PluginCodec_Definition * codec) { CELTContext * celt = malloc(sizeof(CELTContext)); if (celt == NULL) return NULL; if (init_mode(celt, codec) == FALSE) { free(celt); return NULL; } celt->decoder_state = celt_decoder_create(celt->mode); if (celt->decoder_state == NULL ) { celt_mode_destroy(celt->mode); free(celt); return NULL; } return celt; } static void celt_destroy_encoder(const struct PluginCodec_Definition * codec, void * context) { CELTContext * celt = (CELTContext *)context; celt_encoder_destroy(celt->encoder_state); celt_mode_destroy(celt->mode); free(celt); } static void celt_destroy_decoder(const struct PluginCodec_Definition * codec, void * context) { CELTContext * celt = (CELTContext *)context; celt_decoder_destroy(celt->decoder_state); celt_mode_destroy(celt->mode); free(celt); } static int celt_codec_encoder(const struct PluginCodec_Definition * codec, void * context, const void * fromPtr, unsigned * fromLen, void * toPtr, unsigned * toLen, unsigned int * flag) { CELTContext *celt = (CELTContext *)context; unsigned byteCount; if (*fromLen < codec->parm.audio.samplesPerFrame*sizeof(short)) return FALSE; if (*toLen < celt->bytes_per_packet) return FALSE; #ifdef HAVE_CELT_0_5_0_OR_LATER byteCount = celt_encode(celt->encoder_state, (celt_int16_t *)fromPtr, NULL, (char *)toPtr, celt->bytes_per_packet); #else byteCount = celt_encode(celt->encoder_state, (celt_int16_t *)fromPtr, (char *)toPtr, celt->bytes_per_packet); #endif if (byteCount < 0) { return 0; } *toLen = byteCount; *fromLen = codec->parm.audio.samplesPerFrame*sizeof(short); return TRUE; } static int celt_codec_decoder(const struct PluginCodec_Definition * codec, void * context, const void * fromPtr, unsigned * fromLen, void * toPtr, unsigned * toLen, unsigned int * flag) { CELTContext *celt = (CELTContext *)context; if (*toLen < codec->parm.audio.samplesPerFrame*sizeof(short)) return FALSE; if (*fromLen == 0) return FALSE; if (celt_decode(celt->decoder_state, (char *)fromPtr, *fromLen, (short *)toPtr) < 0) { return 0; } *toLen = codec->parm.audio.samplesPerFrame*sizeof(short); return TRUE; } /* taken from Speex */ static int valid_for_sip( const struct PluginCodec_Definition * codec, void * context, const char * key, void * parm, unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(char *)) return 0; return (STRCMPI((const char *)parm, "sip") == 0) ? 1 : 0; } ///////////////////////////////////////////////////////////////////////////// static struct PluginCodec_ControlDefn celt_codec_controls[] = { { "valid_for_protocol", valid_for_sip }, { NULL } }; static struct PluginCodec_information licenseInfo = { // Fri Dec 13 2008, 23:37:31 CET = 1229729851, "Stefan Knoblich, axsentis GmbH", // source code author "0.1", // source code version "s.knoblich@axsentis.de", // source code email "http://oss.axsentis.de/", // source code URL "Copyright (C) 2008 axsentis GmbH", // source code copyright "BSD license", // source code license PluginCodec_License_BSD, // source code license "CELT (ultra-low delay audio codec)", // codec description "Jean-Marc Valin, Xiph Foundation.", // codec author "", // codec version "jean-marc.valin@hermes.usherb.ca", // codec email "http://www.celt-codec.org", // codec URL "(C) 2008 Xiph.Org Foundation, All Rights Reserved", // codec copyright information "Xiph BSD license", // codec license PluginCodec_License_BSD // codec license code }; static struct PluginCodec_Definition celtCodecDefn[] = { /* 32KHz */ { // encoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeShared | PluginCodec_RTPTypeDynamic, // dynamic RTP type "CELT-32K", // text decription "L16", // source format "CELT-32K", // destination format NULL, // user data 32000, // samples per second 32000, // raw bits per second 10000, // microseconds per frame {{ 320, // samples per frame 40, // bytes per frame 1, // recommended number of frames per packet 1, // maximum number of frames per packet }}, 0, // IANA RTP payload code "CELT", // RTP payload name celt_create_encoder, // create codec function celt_destroy_encoder, // destroy codec celt_codec_encoder, // encode/decode celt_codec_controls, // codec controls PluginCodec_H323Codec_NoH323, NULL }, { // decoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeShared | PluginCodec_RTPTypeDynamic, // dynamic RTP type #if 0 /* supported ???*/ PluginCodec_DecodeSilence, // Can accept missing (empty) frames and generate silence #endif "CELT-32K", // text decription "CELT-32K", // source format "L16", // destination format NULL, // user data 32000, // samples per second 32000, // raw bits per second 10000, // microseconds per frame {{ 320, // samples per frame 40, // bytes per frame 1, // recommended number of frames per packet 1, // maximum number of frames per packet }}, 0, // IANA RTP payload code "CELT", // RTP payload name celt_create_decoder, // create codec function celt_destroy_decoder, // destroy codec celt_codec_decoder, // encode/decode celt_codec_controls, // codec controls PluginCodec_H323Codec_NoH323, NULL }, /* 48 KHz */ { // encoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeShared | PluginCodec_RTPTypeDynamic, // dynamic RTP type "CELT-48K", // text decription "L16", // source format "CELT-48K", // destination format NULL, // user data 48000, // samples per second 48000, // raw bits per second 10000, // microseconds per frame {{ 480, // samples per frame 60, // bytes per frame 1, // recommended number of frames per packet 1, // maximum number of frames per packet }}, 0, // IANA RTP payload code "CELT", // RTP payload name celt_create_encoder, // create codec function celt_destroy_encoder, // destroy codec celt_codec_encoder, // encode/decode celt_codec_controls, // codec controls PluginCodec_H323Codec_NoH323, NULL }, { // decoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeShared | PluginCodec_RTPTypeDynamic, // dynamic RTP type #if 0 /* supported ???*/ PluginCodec_DecodeSilence, // Can accept missing (empty) frames and generate silence #endif "CELT-48K", // text decription "CELT-48K", // source format "L16", // destination format NULL, // user data 48000, // samples per second 48000, // raw bits per second 10000, // microseconds per frame {{ 480, // samples per frame 60, // bytes per frame 1, // recommended number of frames per packet 1, // maximum number of frames per packet }}, 0, // IANA RTP payload code "CELT", // RTP payload name celt_create_decoder, // create codec function celt_destroy_decoder, // destroy codec celt_codec_decoder, // encode/decode celt_codec_controls, // codec controls PluginCodec_H323Codec_NoH323, NULL } }; PLUGIN_CODEC_IMPLEMENT_ALL(CELT, celtCodecDefn, PLUGIN_CODEC_VERSION_OPTIONS) ///////////////////////////////////////////////////////////////////////////// h323plus/plugins/audio/gsm-amr/0000755000175000017500000000000011341106247015233 5ustar markmarkh323plus/plugins/audio/gsm-amr/Makefile.in0000644000175000017500000000272411341106247017305 0ustar markmark# # Makefile for GSM-AMR Codec Plugin # # Copyright (C) 2004 MX Telecom Ltd. # # $Revision: 1.1 $ # $Author: shorne $ # $Date: 2010/02/24 02:19:19 $ AC_PLUGIN_DIR=@AC_PLUGIN_DIR@ prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ target_os=@target_os@ OBJDIR = ./obj SRCDIR = ./src PLUGINDIR=../.. BASENAME= gsmamrcodec SONAME = $(BASENAME) CC =@CC@ CFLAGS =@CFLAGS@ CXX =@CXX@ LDSO =@LDSO@ PLUGINEXT =@PLUGINEXT@ STDCCFLAGS =@STDCCFLAGS@ LDFLAGS =@LDFLAGS@ SRCS = amrcodec.c \ interf_enc.c \ interf_dec.c \ sp_dec.c \ sp_enc.c vpath %.o $(OBJDIR) vpath %.c $(SRCDIR) CFLAGS += -I../../../include -I$(SRCDIR) CFLAGS += -DIF2 EXTRACFLAGS=-I$(PLUGINDIR) PLUGIN = ./$(BASENAME)_pwplugin.$(PLUGINEXT) ifeq ($(VERBOSE),) Q_CC = @echo [CC] `echo $< | sed s^@OPALDIR@/^^` ; Q_LD = @echo [LD] `echo $(PLUGIN) | sed s^@OPALDIR@/^^` ; endif $(OBJDIR)/%.o : %.c @mkdir -p $(OBJDIR) >/dev/null 2>&1 $(Q_CC)$(CC) -c -I../../../include $(STDCCFLAGS) $(EXTRACFLAGS) $(CFLAGS) -o $@ $< OBJECTS = $(addprefix $(OBJDIR)/,$(patsubst %.c,%.o,$(notdir $(SRCS)))) $(PLUGIN): $(OBJECTS) ifeq (solaris,$(findstring solaris,$(target_os))) $(Q_LD)$(CC) $(LDSO) $@ -o $@ $^ else $(Q_LD)$(CC) $(LDSO) -o $@ $^ endif install: mkdir -p $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR) install $(PLUGIN) $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR) uninstall: rm -f $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR)/$(PLUGIN) clean: rm -f $(OBJECTS) $(PLUGIN) ########################################### h323plus/plugins/audio/gsm-amr/gsmamr.dsp0000644000175000017500000001203011341106247017225 0ustar markmark# Microsoft Developer Studio Project File - Name="gsmamr" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=gsmamr - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "gsmamr.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "gsmamr.mak" CFG="gsmamr - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "gsmamr - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "gsmamr - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "gsmamr - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "..\..\Release" # PROP Intermediate_Dir "..\..\Release\GSMAMR" # PROP Ignore_Export_Lib 1 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "gsmamr_EXPORTS" /Yu"stdafx.h" /FD /c # ADD CPP /nologo /MD /W3 /GR /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_CODEC_DLL_EXPORTS" /FD /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "NDEBUG" # ADD RSC /l 0xc09 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /machine:I386 /out:"../../Release/gsmamr_pwplugin.dll" /implib:"..\..\Release\GSMAMR/gsmamr.lib" !ELSEIF "$(CFG)" == "gsmamr - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "..\..\Debug" # PROP Intermediate_Dir "..\..\Debug\GSMAMR" # PROP Ignore_Export_Lib 1 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "gsmamr_EXPORTS" /Yu"stdafx.h" /FD /GZ /c # ADD CPP /nologo /MDd /W4 /Gm /GR /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_CODEC_DLL_EXPORTS" /FD /GZ /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "_DEBUG" # ADD RSC /l 0xc09 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /debug /machine:I386 /out:"../../Debug/gsmamr_pwplugin.dll" /implib:"..\..\Debug\GSMAMR/gsmamr.lib" /pdbtype:sept # SUBTRACT LINK32 /pdb:none !ENDIF # Begin Target # Name "gsmamr - Win32 Release" # Name "gsmamr - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\amrcodec.c # End Source File # End Group # Begin Group "AMR Files" # PROP Default_Filter ".c" # Begin Group "AMR Source" # PROP Default_Filter "" # Begin Source File SOURCE=.\src\interf_dec.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\src\interf_enc.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\src\sp_dec.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\src\sp_enc.c # ADD CPP /W1 # End Source File # End Group # Begin Group "AMR Headers" # PROP Default_Filter "" # Begin Source File SOURCE=.\src\interf_dec.h # End Source File # Begin Source File SOURCE=.\src\interf_enc.h # End Source File # Begin Source File SOURCE=.\src\interf_rom.h # End Source File # Begin Source File SOURCE=.\src\rom_dec.h # End Source File # Begin Source File SOURCE=.\src\rom_enc.h # End Source File # Begin Source File SOURCE=.\src\sp_dec.h # End Source File # Begin Source File SOURCE=.\src\sp_enc.h # End Source File # Begin Source File SOURCE=.\src\typedef.h # End Source File # End Group # End Group # End Target # End Project h323plus/plugins/audio/gsm-amr/gsmamr_2005.vcproj0000644000175000017500000004160111341106247020416 0ustar markmark h323plus/plugins/audio/gsm-amr/gsmamr_2008.vcproj0000644000175000017500000002124411341106247020422 0ustar markmark h323plus/plugins/audio/gsm-amr/gsmamr.vcproj0000644000175000017500000001710011341106247017745 0ustar markmark h323plus/plugins/audio/gsm-amr/src/0000755000175000017500000000000011341106247016022 5ustar markmarkh323plus/plugins/audio/gsm-amr/src/interf_rom.h0000644000175000017500000005576511341106247020361 0ustar markmark/* * =================================================================== * TS 26.104 * REL-5 V5.4.0 2004-03 * REL-6 V6.1.0 2004-03 * 3GPP AMR Floating-point Speech Codec * =================================================================== * */ /* * interf_rom.h * * * Project: * AMR Floating-Point Codec * * Contains: * Tables: Subjective importance * Homing frames * * */ #ifndef _interf_rom_h_ #define _interf_rom_h_ /* * include files */ #include"typedef.h" /* * definition of constants */ /* number of parameters */ #define PRMNO_MR475 17 #define PRMNO_MR515 19 #define PRMNO_MR59 19 #define PRMNO_MR67 19 #define PRMNO_MR74 19 #define PRMNO_MR795 23 #define PRMNO_MR102 39 #define PRMNO_MR122 57 #define PRMNO_MRDTX 5 /* * tables */ #ifndef IF2 #ifndef ETSI static const UWord8 block_size[16]={ 13, 14, 16, 18, 20, 21, 27, 32, 6 , 0 , 0 , 0 , 0 , 0 , 0 , 1 }; static const UWord8 toc_byte[16]={0x04, 0x0C, 0x14, 0x1C, 0x24, 0x2C, 0x34, 0x3C, 0x44, 0x4C, 0x54, 0x5C, 0x64, 0x6C, 0x74, 0x7C}; #endif #else /* One encoded frame (bytes) */ static const UWord8 block_size[16]={ 13, 14, 16, 18, 19, 21, 26, 31, 5 , 0 , 0 , 0 , 0 , 0 , 0 , 1 }; #endif /* Subjective importance of the speech encoded bits */ static Word16 order_MR475[] = { 0, 0x80, 0, 0x40, 0, 0x20, 0, 0x10, 0, 0x8, 0, 0x4, 0, 0x2, 0, 0x1, 1, 0x80, 1, 0x40, 1, 0x20, 1, 0x10, 1, 0x8, 1, 0x4, 1, 0x2, 1, 0x1, 3, 0x80, 3, 0x40, 3, 0x20, 3, 0x10, 3, 0x8, 3, 0x4, 7, 0x8, 7, 0x4, 10, 0x8, 10, 0x4, 14, 0x8, 14, 0x4, 6, 0x1, 6, 0x2, 6, 0x4, 6, 0x8, 13, 0x1, 13, 0x2, 13, 0x4, 13, 0x8, 2, 0x20, 2, 0x10, 2, 0x4, 2, 0x1, 13, 0x10, 13, 0x20, 13, 0x40, 13, 0x80, 3, 0x2, 3, 0x1, 6, 0x10, 6, 0x20, 6, 0x40, 6, 0x80, 5, 0x2, 5, 0x1, 2, 0x40, 2, 0x8, 2, 0x2, 7, 0x2, 7, 0x1, 9, 0x2, 9, 0x1, 10, 0x2, 10, 0x1, 12, 0x2, 12, 0x1, 14, 0x2, 14, 0x1, 16, 0x2, 16, 0x1, 4, 0x20, 4, 0x10, 4, 0x4, 4, 0x2, 8, 0x20, 8, 0x10, 8, 0x4, 8, 0x2, 11, 0x20, 11, 0x10, 11, 0x4, 11, 0x2, 15, 0x20, 15, 0x10, 15, 0x4, 15, 0x2, 4, 0x8, 8, 0x8, 11, 0x8, 15, 0x8, 4, 0x1, 8, 0x1, 11, 0x1, 15, 0x1, 4, 0x40, 8, 0x40, 11, 0x40, 15, 0x40 }; static Word16 order_MR515[] = { 0, 0x1, 0, 0x2, 0, 0x4, 0, 0x8, 0, 0x10, 0, 0x20, 0, 0x40, 0, 0x80, 1, 0x1, 1, 0x2, 1, 0x4, 1, 0x8, 1, 0x10, 1, 0x20, 1, 0x40, 1, 0x80, 3, 0x80, 3, 0x40, 3, 0x20, 3, 0x10, 3, 0x8, 7, 0x8, 11, 0x8, 15, 0x8, 6, 0x1, 6, 0x2, 6, 0x4, 10, 0x1, 10, 0x2, 10, 0x4, 14, 0x1, 14, 0x2, 14, 0x4, 18, 0x1, 18, 0x2, 18, 0x4, 6, 0x8, 10, 0x8, 14, 0x8, 18, 0x8, 3, 0x4, 7, 0x4, 11, 0x4, 15, 0x4, 2, 0x10, 6, 0x10, 10, 0x10, 14, 0x10, 18, 0x10, 3, 0x2, 7, 0x2, 11, 0x2, 2, 0x20, 2, 0x4, 2, 0x1, 6, 0x20, 10, 0x20, 14, 0x20, 18, 0x20, 2, 0x2, 3, 0x1, 7, 0x1, 11, 0x1, 15, 0x2, 2, 0x8, 2, 0x40, 15, 0x1, 5, 0x1, 5, 0x2, 9, 0x1, 9, 0x2, 13, 0x1, 4, 0x4, 8, 0x4, 12, 0x4, 16, 0x4, 13, 0x2, 17, 0x1, 17, 0x2, 4, 0x2, 8, 0x2, 12, 0x2, 16, 0x2, 4, 0x20, 8, 0x20, 4, 0x10, 8, 0x10, 12, 0x20, 12, 0x10, 16, 0x20, 16, 0x10, 4, 0x40, 8, 0x40, 12, 0x40, 16, 0x40, 4, 0x1, 8, 0x1, 12, 0x1, 16, 0x1, 4, 0x8, 8, 0x8, 12, 0x8, 16, 0x8 }; static Word16 order_MR59[] = { 0, 0x80, 0, 0x40, 0, 0x8, 0, 0x4, 0, 0x10, 0, 0x2, 0, 0x1, 0, 0x20, 1, 0x8, 1, 0x2, 1, 0x100, 1, 0x80, 1, 0x20, 1, 0x10, 1, 0x4, 1, 0x40, 1, 0x1, 3, 0x20, 11, 0x20, 3, 0x10, 11, 0x10, 3, 0x40, 11, 0x40, 3, 0x80, 11, 0x80, 3, 0x8, 11, 0x8, 7, 0x8, 15, 0x8, 6, 0x1, 10, 0x1, 14, 0x1, 18, 0x1, 3, 0x4, 11, 0x4, 7, 0x4, 15, 0x4, 6, 0x2, 10, 0x2, 14, 0x2, 18, 0x2, 7, 0x2, 15, 0x2, 3, 0x2, 11, 0x2, 3, 0x1, 11, 0x1, 6, 0x4, 10, 0x4, 14, 0x4, 18, 0x4, 6, 0x8, 10, 0x8, 14, 0x8, 18, 0x8, 6, 0x10, 10, 0x10, 14, 0x10, 18, 0x10, 2, 0x40, 2, 0x10, 2, 0x4, 2, 0x8, 2, 0x80, 2, 0x100, 2, 0x20, 2, 0x2, 17, 0x1, 5, 0x2, 13, 0x2, 17, 0x2, 9, 0x2, 9, 0x1, 5, 0x1, 13, 0x1, 2, 0x1, 6, 0x20, 10, 0x20, 14, 0x20, 18, 0x20, 7, 0x1, 15, 0x1, 4, 0x4, 8, 0x4, 12, 0x4, 16, 0x4, 4, 0x8, 8, 0x8, 12, 0x8, 16, 0x8, 4, 0x40, 8, 0x40, 12, 0x40, 16, 0x40, 4, 0x80, 8, 0x80, 12, 0x80, 16, 0x80, 4, 0x100, 8, 0x100, 12, 0x100, 16, 0x100, 4, 0x1, 8, 0x1, 12, 0x1, 16, 0x1, 4, 0x2, 8, 0x2, 12, 0x2, 16, 0x2, 4, 0x10, 8, 0x10, 12, 0x10, 16, 0x10, 4, 0x20, 8, 0x20, 12, 0x20, 16, 0x20 }; static Word16 order_MR67[] = { 0, 0x80, 0, 0x40, 0, 0x8, 0, 0x10, 0, 0x4, 0, 0x2, 1, 0x8, 0, 0x1, 0, 0x20, 1, 0x100, 1, 0x80, 1, 0x20, 1, 0x2, 1, 0x10, 1, 0x4, 1, 0x40, 3, 0x20, 11, 0x20, 3, 0x10, 11, 0x10, 3, 0x40, 11, 0x40, 3, 0x80, 11, 0x80, 3, 0x8, 11, 0x8, 1, 0x1, 7, 0x8, 15, 0x8, 7, 0x4, 15, 0x4, 3, 0x4, 11, 0x4, 7, 0x2, 15, 0x2, 6, 0x40, 10, 0x40, 14, 0x40, 18, 0x40, 3, 0x2, 11, 0x2, 6, 0x8, 10, 0x8, 14, 0x8, 18, 0x8, 6, 0x4, 10, 0x4, 14, 0x4, 18, 0x4, 7, 0x1, 15, 0x1, 3, 0x1, 11, 0x1, 2, 0x40, 2, 0x4, 6, 0x2, 10, 0x2, 14, 0x2, 18, 0x2, 2, 0x10, 2, 0x8, 2, 0x80, 2, 0x100, 2, 0x20, 2, 0x2, 2, 0x1, 6, 0x10, 10, 0x10, 14, 0x10, 18, 0x10, 5, 0x1, 9, 0x1, 13, 0x1, 17, 0x1, 6, 0x1, 10, 0x1, 14, 0x1, 18, 0x1, 5, 0x2, 9, 0x2, 13, 0x2, 17, 0x2, 18, 0x20, 14, 0x20, 10, 0x20, 6, 0x20, 5, 0x4, 9, 0x4, 13, 0x4, 17, 0x4, 4, 0x4, 8, 0x4, 12, 0x4, 16, 0x4, 4, 0x20, 8, 0x20, 12, 0x20, 16, 0x20, 4, 0x40, 8, 0x40, 12, 0x40, 16, 0x40, 4, 0x200, 8, 0x200, 12, 0x200, 16, 0x200, 4, 0x400, 8, 0x400, 12, 0x400, 16, 0x400, 4, 0x1, 8, 0x1, 12, 0x1, 16, 0x1, 4, 0x2, 8, 0x2, 12, 0x2, 16, 0x2, 4, 0x8, 8, 0x8, 12, 0x8, 16, 0x8, 4, 0x10, 8, 0x10, 12, 0x10, 16, 0x10, 4, 0x80, 8, 0x80, 12, 0x80, 16, 0x80, 4, 0x100, 8, 0x100, 12, 0x100, 16, 0x100 }; static Word16 order_MR74[] = { 0, 0x80, 0, 0x40, 0, 0x20, 0, 0x10, 0, 0x8, 0, 0x4, 0, 0x2, 0, 0x1, 1, 0x100, 1, 0x80, 1, 0x40, 1, 0x20, 1, 0x10, 1, 0x8, 1, 0x4, 1, 0x2, 1, 0x1, 3, 0x80, 11, 0x80, 3, 0x40, 11, 0x40, 3, 0x20, 11, 0x20, 3, 0x10, 11, 0x10, 3, 0x8, 11, 0x8, 6, 0x40, 10, 0x40, 14, 0x40, 18, 0x40, 6, 0x20, 10, 0x20, 14, 0x20, 18, 0x20, 6, 0x8, 10, 0x8, 14, 0x8, 18, 0x8, 6, 0x4, 10, 0x4, 14, 0x4, 18, 0x4, 7, 0x10, 15, 0x10, 7, 0x8, 15, 0x8, 2, 0x10, 2, 0x8, 2, 0x4, 2, 0x100, 2, 0x80, 2, 0x40, 3, 0x4, 7, 0x4, 11, 0x4, 15, 0x4, 6, 0x2, 10, 0x2, 14, 0x2, 18, 0x2, 2, 0x20, 2, 0x2, 2, 0x1, 5, 0x1, 9, 0x1, 13, 0x1, 17, 0x1, 6, 0x1, 10, 0x1, 14, 0x1, 18, 0x1, 5, 0x2, 9, 0x2, 13, 0x2, 17, 0x2, 5, 0x4, 9, 0x4, 6, 0x10, 10, 0x10, 14, 0x10, 18, 0x10, 13, 0x4, 17, 0x4, 5, 0x8, 9, 0x8, 13, 0x8, 17, 0x8, 3, 0x2, 3, 0x1, 7, 0x2, 7, 0x1, 11, 0x2, 11, 0x1, 15, 0x2, 15, 0x1, 4, 0x20, 4, 0x10, 4, 0x8, 4, 0x4, 4, 0x2, 4, 0x1, 8, 0x20, 8, 0x10, 8, 0x8, 8, 0x4, 8, 0x2, 8, 0x1, 12, 0x20, 12, 0x10, 12, 0x8, 12, 0x4, 12, 0x2, 12, 0x1, 16, 0x20, 16, 0x10, 16, 0x8, 16, 0x4, 16, 0x2, 16, 0x1, 4, 0x1000, 8, 0x1000, 12, 0x1000, 16, 0x1000, 4, 0x800, 8, 0x800, 12, 0x800, 16, 0x800, 4, 0x400, 8, 0x400, 12, 0x400, 16, 0x400, 4, 0x200, 8, 0x200, 12, 0x200, 16, 0x200, 4, 0x100, 8, 0x100, 12, 0x100, 16, 0x100, 4, 0x80, 8, 0x80, 12, 0x80, 16, 0x80, 4, 0x40, 8, 0x40, 12, 0x40, 16, 0x40 }; static Word16 order_MR795[] = { 0, 0x1, 0, 0x2, 0, 0x4, 0, 0x8, 0, 0x10, 0, 0x20, 0, 0x40, 1, 0x8, 1, 0x2, 1, 0x100, 1, 0x80, 1, 0x20, 1, 0x10, 1, 0x4, 1, 0x40, 1, 0x1, 2, 0x40, 2, 0x10, 2, 0x4, 2, 0x8, 2, 0x80, 2, 0x100, 2, 0x20, 7, 0x10, 12, 0x10, 17, 0x10, 22, 0x10, 7, 0x8, 12, 0x8, 17, 0x8, 22, 0x8, 7, 0x4, 12, 0x4, 17, 0x4, 22, 0x4, 6, 0x8, 11, 0x8, 16, 0x8, 21, 0x8, 6, 0x4, 11, 0x4, 16, 0x4, 21, 0x4, 3, 0x80, 13, 0x80, 3, 0x40, 13, 0x40, 3, 0x20, 13, 0x20, 3, 0x10, 13, 0x10, 3, 0x8, 13, 0x8, 8, 0x20, 18, 0x20, 8, 0x10, 18, 0x10, 8, 0x8, 18, 0x8, 7, 0x2, 12, 0x2, 17, 0x2, 22, 0x2, 3, 0x4, 13, 0x4, 8, 0x4, 18, 0x4, 0, 0x80, 0, 0x100, 2, 0x2, 2, 0x1, 3, 0x2, 13, 0x2, 3, 0x1, 13, 0x1, 8, 0x2, 18, 0x2, 8, 0x1, 18, 0x1, 6, 0x2, 11, 0x2, 16, 0x2, 21, 0x2, 7, 0x1, 12, 0x1, 17, 0x1, 22, 0x1, 6, 0x1, 11, 0x1, 16, 0x1, 21, 0x1, 15, 0x1, 15, 0x2, 15, 0x4, 4, 0x2, 9, 0x2, 14, 0x2, 19, 0x2, 4, 0x10, 9, 0x10, 14, 0x10, 19, 0x10, 4, 0x80, 9, 0x80, 14, 0x80, 19, 0x80, 4, 0x800, 9, 0x800, 14, 0x800, 19, 0x800, 15, 0x8, 20, 0x1, 20, 0x2, 20, 0x4, 20, 0x8, 10, 0x1, 10, 0x2, 10, 0x4, 10, 0x8, 5, 0x1, 5, 0x2, 5, 0x4, 5, 0x8, 4, 0x1, 4, 0x4, 4, 0x8, 4, 0x20, 4, 0x100, 4, 0x1000, 9, 0x1, 9, 0x4, 9, 0x8, 9, 0x20, 9, 0x100, 9, 0x1000, 14, 0x1, 14, 0x4, 14, 0x8, 14, 0x20, 14, 0x100, 14, 0x1000, 19, 0x1, 19, 0x4, 19, 0x8, 19, 0x20, 19, 0x100, 19, 0x1000, 4, 0x40, 9, 0x40, 14, 0x40, 19, 0x40, 4, 0x400, 9, 0x400, 14, 0x400, 19, 0x400, 4, 0x200, 9, 0x200, 14, 0x200, 19, 0x200, 0, 0x1, 0, 0x2, 0, 0x4, 0, 0x8, 0, 0x10, 0, 0x20, 0, 0x40, 1, 0x8, 1, 0x2, 1, 0x100, 1, 0x80, 1, 0x20, 1, 0x10, 1, 0x4, 1, 0x40, 1, 0x1, 2, 0x40, 2, 0x10, 2, 0x4, 2, 0x8, 2, 0x80, 2, 0x100, 2, 0x20, 7, 0x10, 12, 0x10, 17, 0x10, 22, 0x10, 7, 0x8, 12, 0x8, 17, 0x8, 22, 0x8, 7, 0x4, 12, 0x4, 17, 0x4, 22, 0x4, 6, 0x8, 11, 0x8, 16, 0x8, 21, 0x8, 6, 0x4, 11, 0x4, 16, 0x4, 21, 0x4, 3, 0x80, 13, 0x80, 3, 0x40, 13, 0x40, 3, 0x20, 13, 0x20, 3, 0x10, 13, 0x10, 3, 0x8, 13, 0x8, 8, 0x20, 18, 0x20, 8, 0x10, 18, 0x10, 8, 0x8, 18, 0x8, 7, 0x2, 12, 0x2, 17, 0x2, 22, 0x2, 3, 0x4, 13, 0x4, 8, 0x4, 18, 0x4, 0, 0x80, 0, 0x100, 2, 0x2, 2, 0x1, 3, 0x2, 13, 0x2, 3, 0x1, 13, 0x1, 8, 0x2, 18, 0x2, 8, 0x1, 18, 0x1, 6, 0x2, 11, 0x2, 16, 0x2, 21, 0x2, 7, 0x1, 12, 0x1, 17, 0x1, 22, 0x1, 6, 0x1, 11, 0x1, 16, 0x1, 21, 0x1, 15, 0x1, 15, 0x2, 15, 0x4, 4, 0x2, 9, 0x2, 14, 0x2, 19, 0x2, 4, 0x10, 9, 0x10, 14, 0x10, 19, 0x10, 4, 0x80, 9, 0x80, 14, 0x80, 19, 0x80, 4, 0x800, 9, 0x800, 14, 0x800, 19, 0x800, 15, 0x8, 20, 0x1, 20, 0x2, 20, 0x4, 20, 0x8, 10, 0x1, 10, 0x2, 10, 0x4, 10, 0x8, 5, 0x1, 5, 0x2, 5, 0x4, 5, 0x8, 4, 0x1, 4, 0x4, 4, 0x8, 4, 0x20, 4, 0x100, 4, 0x1000, 9, 0x1, 9, 0x4, 9, 0x8, 9, 0x20, 9, 0x100, 9, 0x1000, 14, 0x1, 14, 0x4, 14, 0x8, 14, 0x20, 14, 0x100, 14, 0x1000, 19, 0x1, 19, 0x4, 19, 0x8, 19, 0x20, 19, 0x100, 19, 0x1000, 4, 0x40, 9, 0x40, 14, 0x40, 19, 0x40, 4, 0x400, 9, 0x400, 14, 0x400, 19, 0x400, 4, 0x200, 9, 0x200, 14, 0x200, 19, 0x200 }; static Word16 order_MR102[] = { 0, 0x1, 0, 0x2, 0, 0x4, 0, 0x8, 0, 0x10, 0, 0x20, 0, 0x40, 0, 0x80, 1, 0x1, 1, 0x2, 1, 0x4, 1, 0x8, 1, 0x10, 1, 0x20, 1, 0x40, 1, 0x80, 1, 0x100, 3, 0x80, 3, 0x40, 3, 0x20, 3, 0x10, 3, 0x8, 3, 0x4, 21, 0x80, 21, 0x40, 21, 0x20, 21, 0x10, 21, 0x8, 21, 0x4, 12, 0x10, 12, 0x8, 30, 0x10, 30, 0x8, 11, 0x40, 11, 0x8, 11, 0x4, 20, 0x40, 20, 0x8, 20, 0x4, 29, 0x40, 29, 0x8, 29, 0x4, 38, 0x40, 38, 0x8, 38, 0x4, 3, 0x2, 3, 0x1, 21, 0x2, 21, 0x1, 12, 0x4, 12, 0x2, 30, 0x4, 30, 0x2, 11, 0x20, 20, 0x20, 29, 0x20, 38, 0x20, 2, 0x40, 2, 0x4, 2, 0x10, 2, 0x8, 2, 0x80, 2, 0x100, 2, 0x20, 2, 0x2, 2, 0x1, 7, 0x1, 6, 0x1, 5, 0x1, 4, 0x1, 16, 0x1, 15, 0x1, 14, 0x1, 13, 0x1, 25, 0x1, 24, 0x1, 23, 0x1, 22, 0x1, 34, 0x1, 33, 0x1, 32, 0x1, 31, 0x1, 11, 0x2, 11, 0x10, 11, 0x1, 20, 0x2, 20, 0x10, 20, 0x1, 29, 0x2, 29, 0x10, 29, 0x1, 38, 0x2, 38, 0x10, 38, 0x1, 12, 0x1, 30, 0x1, 17, 0x200, 17, 0x100, 18, 0x100, 18, 0x200, 18, 0x80, 17, 0x80, 18, 0x20, 17, 0x20, 17, 0x40, 18, 0x40, 19, 0x40, 19, 0x20, 18, 0x10, 19, 0x8, 17, 0x10, 19, 0x10, 17, 0x8, 18, 0x8, 26, 0x200, 26, 0x100, 27, 0x100, 27, 0x200, 27, 0x80, 26, 0x80, 27, 0x20, 26, 0x20, 26, 0x40, 27, 0x40, 28, 0x40, 28, 0x20, 27, 0x10, 28, 0x8, 26, 0x10, 28, 0x10, 26, 0x8, 27, 0x8, 35, 0x200, 35, 0x100, 36, 0x100, 36, 0x200, 36, 0x80, 35, 0x80, 36, 0x20, 35, 0x20, 35, 0x40, 36, 0x40, 37, 0x40, 37, 0x20, 36, 0x10, 37, 0x8, 35, 0x10, 37, 0x10, 35, 0x8, 36, 0x8, 8, 0x200, 8, 0x100, 9, 0x100, 9, 0x200, 9, 0x80, 8, 0x80, 9, 0x20, 8, 0x20, 8, 0x40, 9, 0x40, 10, 0x40, 10, 0x20, 9, 0x10, 10, 0x8, 8, 0x10, 10, 0x10, 8, 0x8, 9, 0x8, 37, 0x4, 35, 0x1, 36, 0x1, 37, 0x1, 35, 0x4, 37, 0x2, 35, 0x2, 36, 0x4, 36, 0x2, 28, 0x4, 26, 0x1, 27, 0x1, 28, 0x1, 26, 0x4, 28, 0x2, 26, 0x2, 27, 0x4, 27, 0x2, 19, 0x4, 17, 0x1, 18, 0x1, 19, 0x1, 17, 0x4, 19, 0x2, 17, 0x2, 18, 0x4, 18, 0x2, 10, 0x4, 8, 0x1, 9, 0x1, 10, 0x1, 8, 0x4, 10, 0x2, 8, 0x2, 9, 0x4, 9, 0x2 }; static Word16 order_MR122[] = { 0, 0x40, 0, 0x20, 0, 0x10, 0, 0x8, 0, 0x4, 0, 0x2, 0, 0x1, 1, 0x80, 1, 0x40, 1, 0x20, 1, 0x10, 1, 0x8, 1, 0x4, 1, 0x2, 1, 0x1, 2, 0x1, 2, 0x100, 2, 0x80, 2, 0x40, 2, 0x20, 2, 0x10, 2, 0x8, 2, 0x4, 2, 0x2, 3, 0x80, 3, 0x40, 3, 0x20, 3, 0x10, 3, 0x8, 5, 0x100, 31, 0x100, 5, 0x80, 31, 0x80, 5, 0x40, 31, 0x40, 5, 0x20, 31, 0x20, 5, 0x10, 31, 0x10, 5, 0x8, 31, 0x8, 5, 0x4, 31, 0x4, 5, 0x2, 31, 0x2, 5, 0x1, 31, 0x1, 6, 0x8, 19, 0x8, 32, 0x8, 45, 0x8, 6, 0x4, 19, 0x4, 32, 0x4, 45, 0x4, 6, 0x2, 19, 0x2, 32, 0x2, 45, 0x2, 17, 0x10, 30, 0x10, 43, 0x10, 56, 0x10, 17, 0x8, 30, 0x8, 43, 0x8, 56, 0x8, 17, 0x4, 30, 0x4, 43, 0x4, 56, 0x4, 18, 0x20, 44, 0x20, 18, 0x10, 44, 0x10, 18, 0x8, 44, 0x8, 18, 0x4, 44, 0x4, 18, 0x2, 44, 0x2, 3, 0x4, 3, 0x2, 3, 0x1, 4, 0x20, 4, 0x10, 4, 0x8, 4, 0x4, 6, 0x1, 19, 0x1, 32, 0x1, 45, 0x1, 17, 0x2, 30, 0x2, 43, 0x2, 56, 0x2, 7, 0x8, 20, 0x8, 33, 0x8, 46, 0x8, 8, 0x8, 21, 0x8, 34, 0x8, 47, 0x8, 17, 0x1, 30, 0x1, 43, 0x1, 56, 0x1, 9, 0x8, 22, 0x8, 35, 0x8, 48, 0x8, 10, 0x8, 23, 0x8, 36, 0x8, 49, 0x8, 11, 0x8, 24, 0x8, 37, 0x8, 50, 0x8, 4, 0x2, 4, 0x1, 7, 0x1, 7, 0x2, 7, 0x4, 8, 0x1, 8, 0x2, 8, 0x4, 9, 0x1, 9, 0x2, 9, 0x4, 10, 0x1, 10, 0x2, 10, 0x4, 11, 0x1, 11, 0x2, 11, 0x4, 20, 0x1, 20, 0x2, 20, 0x4, 21, 0x1, 21, 0x2, 21, 0x4, 22, 0x1, 22, 0x2, 22, 0x4, 23, 0x1, 23, 0x2, 23, 0x4, 24, 0x1, 24, 0x2, 24, 0x4, 33, 0x1, 33, 0x2, 33, 0x4, 34, 0x1, 34, 0x2, 34, 0x4, 35, 0x1, 35, 0x2, 35, 0x4, 36, 0x1, 36, 0x2, 36, 0x4, 37, 0x1, 37, 0x2, 37, 0x4, 46, 0x1, 46, 0x2, 46, 0x4, 47, 0x1, 47, 0x2, 47, 0x4, 48, 0x1, 48, 0x2, 48, 0x4, 49, 0x1, 49, 0x2, 49, 0x4, 50, 0x1, 50, 0x2, 50, 0x4, 12, 0x1, 12, 0x2, 12, 0x4, 13, 0x1, 13, 0x2, 13, 0x4, 14, 0x1, 14, 0x2, 14, 0x4, 15, 0x1, 15, 0x2, 15, 0x4, 16, 0x1, 16, 0x2, 16, 0x4, 25, 0x1, 25, 0x2, 25, 0x4, 26, 0x1, 26, 0x2, 26, 0x4, 27, 0x1, 27, 0x2, 27, 0x4, 28, 0x1, 28, 0x2, 28, 0x4, 29, 0x1, 29, 0x2, 29, 0x4, 38, 0x1, 38, 0x2, 38, 0x4, 39, 0x1, 39, 0x2, 39, 0x4, 40, 0x1, 40, 0x2, 40, 0x4, 41, 0x1, 41, 0x2, 41, 0x4, 42, 0x1, 42, 0x2, 42, 0x4, 51, 0x1, 51, 0x2, 51, 0x4, 52, 0x1, 52, 0x2, 52, 0x4, 53, 0x1, 53, 0x2, 53, 0x4, 54, 0x1, 54, 0x2, 54, 0x4, 55, 0x1, 55, 0x2, 55, 0x4, 18, 0x1, 44, 0x1 }; static Word16 order_MRDTX[] = { 0, 0x4, 0, 0x2, 0, 0x1, 1, 0x80, 1, 0x40, 1, 0x20, 1, 0x10, 1, 0x8, 1, 0x4, 1, 0x2, 1, 0x1, 2, 0x100, 2, 0x80, 2, 0x40, 2, 0x20, 2, 0x10, 2, 0x8, 2, 0x4, 2, 0x2, 2, 0x1, 3, 0x100, 3, 0x80, 3, 0x40, 3, 0x20, 3, 0x10, 3, 0x8, 3, 0x4, 3, 0x2, 3, 0x1, 4, 0x20, 4, 0x10, 4, 0x8, 4, 0x4, 4, 0x2, 4, 0x1 }; /* Homing frames for the decoder */ static const Word16 dhf_MR475[PRMNO_MR475] = { 0x00F8, 0x009D, 0x001C, 0x0066, 0x0000, 0x0003, 0x0028, 0x000F, 0x0038, 0x0001, 0x000F, 0x0031, 0x0002, 0x0008, 0x000F, 0x0026, 0x0003 }; static const Word16 dhf_MR515[PRMNO_MR515] = { 0x00F8, 0x009D, 0x001C, 0x0066, 0x0000, 0x0003, 0x0037, 0x000F, 0x0000, 0x0003, 0x0005, 0x000F, 0x0037, 0x0003, 0x0037, 0x000F, 0x0023, 0x0003, 0x001F }; static const Word16 dhf_MR59[PRMNO_MR59] = { 0x00F8, 0x00E3, 0x002F, 0x00BD, 0x0000, 0x0003, 0x0037, 0x000F, 0x0001, 0x0003, 0x000F, 0x0060, 0x00F9, 0x0003, 0x0037, 0x000F, 0x0000, 0x0003, 0x0037 }; static const Word16 dhf_MR67[PRMNO_MR67] = { 0x00F8, 0x00E3, 0x002F, 0x00BD, 0x0002, 0x0007, 0x0000, 0x000F, 0x0098, 0x0007, 0x0061, 0x0060, 0x05C5, 0x0007, 0x0000, 0x000F, 0x0318, 0x0007, 0x0000 }; static const Word16 dhf_MR74[PRMNO_MR74] = { 0x00F8, 0x00E3, 0x002F, 0x00BD, 0x0006, 0x000F, 0x0000, 0x001B, 0x0208, 0x000F, 0x0062, 0x0060, 0x1BA6, 0x000F, 0x0000, 0x001B, 0x0006, 0x000F, 0x0000 }; static const Word16 dhf_MR795[PRMNO_MR795] = { 0x00C2, 0x00E3, 0x002F, 0x00BD, 0x0006, 0x000F, 0x000A, 0x0000, 0x0039, 0x1C08, 0x0007, 0x000A, 0x000B, 0x0063, 0x11A6, 0x000F, 0x0001, 0x0000, 0x0039, 0x09A0, 0x000F, 0x0002, 0x0001 }; static const Word16 dhf_MR102[PRMNO_MR102] = { 0x00F8, 0x00E3, 0x002F, 0x0045, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001B, 0x0000, 0x0001, 0x0000, 0x0001, 0x0326, 0x00CE, 0x007E, 0x0051, 0x0062, 0x0000, 0x0000, 0x0000, 0x0000, 0x015A, 0x0359, 0x0076, 0x0000, 0x001B, 0x0000, 0x0000, 0x0000, 0x0000, 0x017C, 0x0215, 0x0038, 0x0030 }; static const Word16 dhf_MR122[PRMNO_MR122] = { 0x0004, 0x002A, 0x00DB, 0x0096, 0x002A, 0x0156, 0x000B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0036, 0x000B, 0x0000, 0x000F, 0x000E, 0x000C, 0x000D, 0x0000, 0x0001, 0x0005, 0x0007, 0x0001, 0x0008, 0x0024, 0x0000, 0x0001, 0x0000, 0x0005, 0x0006, 0x0001, 0x0002, 0x0004, 0x0007, 0x0004, 0x0002, 0x0003, 0x0036, 0x000B, 0x0000, 0x0002, 0x0004, 0x0000, 0x0003, 0x0006, 0x0001, 0x0007, 0x0006, 0x0005, 0x0000 }; /* parameter sizes (# of bits), one table per mode */ static const Word16 bitno_MR475[PRMNO_MR475] = { 8, 8, 7, /* LSP VQ */ 8, 7, 2, 8, /* first subframe */ 4, 7, 2, /* second subframe */ 4, 7, 2, 8, /* third subframe */ 4, 7, 2 /* fourth subframe */ }; static const Word16 bitno_MR515[PRMNO_MR515] = { 8, 8, 7, /* LSP VQ */ 8, 7, 2, 6, /* first subframe */ 4, 7, 2, 6, /* second subframe */ 4, 7, 2, 6, /* third subframe */ 4, 7, 2, 6 /* fourth subframe */ }; static const Word16 bitno_MR59[PRMNO_MR59] = { 8, 9, 9, /* LSP VQ */ 8, 9, 2, 6, /* first subframe */ 4, 9, 2, 6, /* second subframe */ 8, 9, 2, 6, /* third subframe */ 4, 9, 2, 6 /* fourth subframe */ }; static const Word16 bitno_MR67[PRMNO_MR67] = { 8, 9, 9, /* LSP VQ */ 8, 11, 3, 7, /* first subframe */ 4, 11, 3, 7, /* second subframe */ 8, 11, 3, 7, /* third subframe */ 4, 11, 3, 7 /* fourth subframe */ }; static const Word16 bitno_MR74[PRMNO_MR74] = { 8, 9, 9, /* LSP VQ */ 8, 13, 4, 7, /* first subframe */ 5, 13, 4, 7, /* second subframe */ 8, 13, 4, 7, /* third subframe */ 5, 13, 4, 7 /* fourth subframe */ }; static const Word16 bitno_MR795[PRMNO_MR795] = { 9, 9, 9, /* LSP VQ */ 8, 13, 4, 4, 5, /* first subframe */ 6, 13, 4, 4, 5, /* second subframe */ 8, 13, 4, 4, 5, /* third subframe */ 6, 13, 4, 4, 5 /* fourth subframe */ }; static const Word16 bitno_MR102[PRMNO_MR102] = { 8, 9, 9, /* LSP VQ */ 8, 1, 1, 1, 1, 10, 10, 7, 7, /* first subframe */ 5, 1, 1, 1, 1, 10, 10, 7, 7, /* second subframe */ 8, 1, 1, 1, 1, 10, 10, 7, 7, /* third subframe */ 5, 1, 1, 1, 1, 10, 10, 7, 7 /* fourth subframe */ }; static const Word16 bitno_MR122[PRMNO_MR122] = { 7, 8, 9, 8, 6, /* LSP VQ */ 9, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 5, /* first subframe */ 6, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 5, /* second subframe */ 9, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 5, /* third subframe */ 6, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 5 /* fourth subframe */ }; static const Word16 bitno_MRDTX[PRMNO_MRDTX] = { 3, 8, 9, 9, 6 }; #endif h323plus/plugins/audio/gsm-amr/src/interf_enc.h0000644000175000017500000000231511341106247020310 0ustar markmark/* * =================================================================== * TS 26.104 * REL-5 V5.4.0 2004-03 * REL-6 V6.1.0 2004-03 * 3GPP AMR Floating-point Speech Codec * =================================================================== * */ /* * interf_enc.h * * * Project: * AMR Floating-Point Codec * * Contains: * Defines interface to AMR encoder * */ #ifndef _interf_enc_h_ #define _interf_enc_h_ #include "sp_enc.h" /* * Function prototypes */ #ifdef __cplusplus extern "C" { #endif #define GSMAMR_TX_SPEECH 0X0000 #define GSMAMR_TX_SID_FIRST 0X0001 #define GSMAMR_TX_SID_UPDATE 0X0002 #define GSMAMR_TX_NO_DATA 0X0003 /* * Encodes one frame of speech * Returns packed octets */ extern int Encoder_Interface_Encode( void *st, enum Mode mode, const short *speech, #ifndef ETSI unsigned char *serial, /* max size 31 bytes */ #else short *serial, /* size 500 bytes */ #endif int forceSpeech ); /* use speech mode */ /* * Reserve and init. memory */ extern void *Encoder_Interface_init( int dtx ); /* * Exit and free memory */ extern void Encoder_Interface_exit( void *state ); #ifdef __cplusplus } #endif #endif // !_interf_enc_h_ h323plus/plugins/audio/gsm-amr/src/makefile.win320000644000175000017500000000456711341106247020477 0ustar markmark CPP=cl.exe RSC=rc.exe OUTDIR=.\Codec INTDIR=.\Codec CODER : "$(OUTDIR)\encoder.exe" "$(OUTDIR)\decoder.exe" CLEAN : -@erase "$(INTDIR)\encoder.obj" -@erase "$(INTDIR)\interf_enc.obj" -@erase "$(INTDIR)\sp_enc.obj" -@erase "$(OUTDIR)\encoder.exe" -@erase "$(INTDIR)\decoder.obj" -@erase "$(INTDIR)\interf_dec.obj" -@erase "$(INTDIR)\sp_dec.obj" -@erase "$(OUTDIR)\decoder.exe" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" !IF "$(VAD)" == "VAD2" OPT_PROJ=/D "VAD2" !MESSAGE Code compiled with VAD2 !ENDIF !IF "$(CFG)" == "ETSI" OPT_PROJ= $(OPT_PROJ) /D "ETSI" !MESSAGE Code using ETSI frames !ENDIF CPP_PROJ=/nologo /G6 /ML /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c LINK32=link.exe LINK32_FLAGS_ENCODER=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /machine:I386 /out:"$(OUTDIR)\encoder.exe" LINK32_FLAGS_DECODER=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /machine:I386 /out:"$(OUTDIR)\decoder.exe" LINK32_OBJS_DECODER= \ "$(INTDIR)\decoder.obj" \ "$(INTDIR)\interf_dec.obj" \ "$(INTDIR)\sp_dec.obj" LINK32_OBJS_ENCODER= \ "$(INTDIR)\encoder.obj" \ "$(INTDIR)\interf_enc.obj" \ "$(INTDIR)\sp_enc.obj" "$(OUTDIR)\decoder.exe" : "$(OUTDIR)" $(LINK32_OBJS_DECODER) $(LINK32) $(DECODER) $(LINK32_FLAGS_DECODER) $(LINK32_OBJS_DECODER) "$(OUTDIR)\encoder.exe" : "$(OUTDIR)" $(LINK32_OBJS_ENCODER) $(LINK32) $(ENCODER) $(LINK32_FLAGS_ENCODER) $(LINK32_OBJS_ENCODER) SOURCE=.\decoder.c "$(INTDIR)\decoder.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(OPT_PROJ) $(SOURCE) SOURCE=.\interf_dec.c "$(INTDIR)\interf_dec.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(OPT_PROJ) $(SOURCE) SOURCE=.\sp_dec.c "$(INTDIR)\sp_dec.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(OPT_PROJ) $(SOURCE) SOURCE=.\encoder.c "$(INTDIR)\encoder.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(OPT_PROJ) $(SOURCE) SOURCE=.\interf_enc.c "$(INTDIR)\interf_enc.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(OPT_PROJ) $(SOURCE) SOURCE=.\sp_enc.c "$(INTDIR)\sp_enc.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(OPT_PROJ) $(SOURCE) h323plus/plugins/audio/gsm-amr/src/sp_dec.h0000644000175000017500000000322711341106247017434 0ustar markmark/* * =================================================================== * TS 26.104 * R99 V3.3.0 2001-09 * REL-4 V4.2.0 2001-09 * 3GPP AMR Floating-point Speech Codec * =================================================================== * */ /* * sp_enc.h * * * Project: * AMR Floating-Point Codec * * Contains: * Defines interface to AMR encoder * */ #ifndef _SP_DEC_H_ #define _SP_DEC_H_ /* * definition of enumerated types */ /* * definition of modes for decoder */ enum Mode { MR475 = 0, MR515, MR59, MR67, MR74, MR795, MR102, MR122, MRDTX, N_MODES /* number of (SPC) modes */ }; /* Declaration recieved frame types */ enum RXFrameType { RX_SPEECH_GOOD = 0, RX_SPEECH_DEGRADED, RX_ONSET, RX_SPEECH_BAD, RX_SID_FIRST, RX_SID_UPDATE, RX_SID_BAD, RX_NO_DATA, RX_N_FRAMETYPES /* number of frame types */ }; #ifdef __cplusplus extern "C" { #endif /* * Function prototypes */ /* * initialize one instance of the speech decoder */ extern void* Speech_Decode_Frame_init (); /* * free status struct */ extern void Speech_Decode_Frame_exit (void **st); /* * Decodes one frame from encoded parameters */ extern void Speech_Decode_Frame (void *st, enum Mode mode, short *serial, enum RXFrameType frame_type, short *synth); /* * reset speech decoder */ extern int Speech_Decode_Frame_reset (void **st); #ifdef __cplusplus } #endif #endif // !_SP_DEC_H_ h323plus/plugins/audio/gsm-amr/src/interf_dec.c0000644000175000017500000004456611341106247020307 0ustar markmark/* * =================================================================== * TS 26.104 * REL-5 V5.4.0 2004-03 * REL-6 V6.1.0 2004-03 * 3GPP AMR Floating-point Speech Codec * =================================================================== * */ /* * interf_dec.c * * * Project: * AMR Floating-Point Codec * * Contains: * This module provides means to conversion from 3GPP or ETSI * bitstream to AMR parameters */ /* * include files */ #include #include #include #include "typedef.h" #include "sp_dec.h" #include "interf_rom.h" #include "rom_dec.h" /* * definition of constants */ #define EHF_MASK 0x0008 /* encoder homing frame pattern */ typedef struct { int reset_flag_old; /* previous was homing frame */ enum RXFrameType prev_ft; /* previous frame type */ enum Mode prev_mode; /* previous mode */ void *decoder_State; /* Points decoder state */ }dec_interface_State; #ifdef ETSI /* * Bin2Int * * * Parameters: * no_of_bits I: number of bits associated with value * bits O: address where bits are written * * Function: * Read nuber of bits from the array and convert to integer. * * Returns: * value */ static Word16 Bin2Int( Word16 no_of_bits, Word16 *bitstream ) { Word32 value, i, bit; value = 0; for ( i = 0; i < no_of_bits; i++ ) { value = value << 1; bit = *bitstream++; if ( bit == 0x1 ) value = value + 1; } return( Word16 )( value ); } /* * Bits2Prm * * * Parameters: * mode I: AMR mode * bits I: serial bits * param O: AMR parameters * * Function: * Retrieves the vector of encoder parameters from * the received serial bits in a frame. * * Returns: * void */ static void Bits2Prm( enum Mode mode, Word16 bits[], Word16 prm[] ) { Word32 i; switch ( mode ) { case MR122: for ( i = 0; i < PRMNO_MR122; i++ ) { prm[i] = Bin2Int( bitno_MR122[i], bits ); bits += bitno_MR122[i]; } break; case MR102: for ( i = 0; i < PRMNO_MR102; i++ ) { prm[i] = Bin2Int( bitno_MR102[i], bits ); bits += bitno_MR102[i]; } break; case MR795: for ( i = 0; i < PRMNO_MR795; i++ ) { prm[i] = Bin2Int( bitno_MR795[i], bits ); bits += bitno_MR795[i]; } break; case MR74: for ( i = 0; i < PRMNO_MR74; i++ ) { prm[i] = Bin2Int( bitno_MR74[i], bits ); bits += bitno_MR74[i]; } break; case MR67: for ( i = 0; i < PRMNO_MR67; i++ ) { prm[i] = Bin2Int( bitno_MR67[i], bits ); bits += bitno_MR67[i]; } break; case MR59: for ( i = 0; i < PRMNO_MR59; i++ ) { prm[i] = Bin2Int( bitno_MR59[i], bits ); bits += bitno_MR59[i]; } break; case MR515: for ( i = 0; i < PRMNO_MR515; i++ ) { prm[i] = Bin2Int( bitno_MR515[i], bits ); bits += bitno_MR515[i]; } break; case MR475: for ( i = 0; i < PRMNO_MR475; i++ ) { prm[i] = Bin2Int( bitno_MR475[i], bits ); bits += bitno_MR475[i]; } break; case MRDTX: for ( i = 0; i < PRMNO_MRDTX; i++ ) { prm[i] = Bin2Int( bitno_MRDTX[i], bits ); bits += bitno_MRDTX[i]; } break; } return; } #else #ifndef IF2 /* * DecoderMMS * * * Parameters: * param O: AMR parameters * stream I: input bitstream * frame_type O: frame type * speech_mode O: speech mode in DTX * * Function: * AMR file storage format frame to decoder parameters * * Returns: * mode used mode */ enum Mode DecoderMMS( Word16 *param, UWord8 *stream, enum RXFrameType *frame_type, enum Mode *speech_mode, Word16 *q_bit ) { enum Mode mode; Word32 j; Word16 *mask; memset( param, 0, PRMNO_MR122 <<1 ); *q_bit = 0x01 & (*stream >> 2); mode = 0x0F & (*stream >> 3); stream++; if ( mode == MRDTX ) { mask = order_MRDTX; for ( j = 1; j < 36; j++ ) { if ( *stream & 0x80 ) param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) ); mask += 2; if ( j % 8 ) *stream <<= 1; else stream++; } /* get SID type bit */ *frame_type = RX_SID_FIRST; if (*stream & 0x80) *frame_type = RX_SID_UPDATE; /* since there is update, use it */ /* *frame_type = RX_SID_UPDATE; */ /* speech mode indicator */ *speech_mode = (*stream >> 4) && 0x07; } else if ( mode == 15 ) { *frame_type = RX_NO_DATA; } else if ( mode == MR475 ) { mask = order_MR475; for ( j = 1; j < 96; j++ ) { if ( *stream & 0x80 ) param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) ); mask += 2; if ( j % 8 ) *stream <<= 1; else stream++; } *frame_type = RX_SPEECH_GOOD; } else if ( mode == MR515 ) { mask = order_MR515; for ( j = 1; j < 104; j++ ) { if ( *stream & 0x80 ) param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) ); mask += 2; if ( j % 8 ) *stream <<= 1; else stream++; } *frame_type = RX_SPEECH_GOOD; } else if ( mode == MR59 ) { mask = order_MR59; for ( j = 1; j < 119; j++ ) { if ( *stream & 0x80 ) param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) ); mask += 2; if ( j % 8 ) *stream <<= 1; else stream++; } *frame_type = RX_SPEECH_GOOD; } else if ( mode == MR67 ) { mask = order_MR67; for ( j = 1; j < 135; j++ ) { if ( *stream & 0x80 ) param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) ); mask += 2; if ( j % 8 ) *stream <<= 1; else stream++; } *frame_type = RX_SPEECH_GOOD; } else if ( mode == MR74 ) { mask = order_MR74; for ( j = 1; j < 149; j++ ) { if ( *stream & 0x80 ) param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) ); mask += 2; if ( j % 8 ) *stream <<= 1; else stream++; } *frame_type = RX_SPEECH_GOOD; } else if ( mode == MR795 ) { mask = order_MR795; for ( j = 1; j < 160; j++ ) { if ( *stream & 0x80 ) param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) ); mask += 2; if ( j % 8 ) *stream <<= 1; else stream++; } *frame_type = RX_SPEECH_GOOD; } else if ( mode == MR102 ) { mask = order_MR102; for ( j = 1; j < 205; j++ ) { if ( *stream & 0x80 ) param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) ); mask += 2; if ( j % 8 ) *stream <<= 1; else stream++; } *frame_type = RX_SPEECH_GOOD; } else if ( mode == MR122 ) { mask = order_MR122; for ( j = 1; j < 245; j++ ) { if ( *stream & 0x80 ) param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) ); mask += 2; if ( j % 8 ) *stream <<= 1; else stream++; } *frame_type = RX_SPEECH_GOOD; } else *frame_type = RX_SPEECH_BAD; return mode; } #else /* * Decoder3GPP * * * Parameters: * param O: AMR parameters * stream I: input bitstream * frame_type O: frame type * speech_mode O: speech mode in DTX * * Function: * Resets state memory * * Returns: * mode used mode */ enum Mode Decoder3GPP( Word16 *param, UWord8 *stream, enum RXFrameType *frame_type, enum Mode *speech_mode ) { enum Mode mode; Word32 j; Word16 *mask; memset( param, 0, PRMNO_MR122 <<1 ); mode = 0xF & *stream; *stream >>= 4; if ( mode == MRDTX ) { mask = order_MRDTX; for ( j = 5; j < 40; j++ ) { if ( *stream & 0x1 ) param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) ); mask += 2; if ( j % 8 ) *stream >>= 1; else stream++; } /* get SID type bit */ *frame_type = RX_SID_FIRST; if (*stream) *frame_type = RX_SID_UPDATE; /* since there is update, use it */ /* *frame_type = RX_SID_UPDATE; */ stream++; /* speech mode indicator */ *speech_mode = *stream; } else if ( mode == 15 ) { *frame_type = RX_NO_DATA; } else if ( mode == MR475 ) { mask = order_MR475; for ( j = 5; j < 100; j++ ) { if ( *stream & 0x1 ) param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) ); mask += 2; if ( j % 8 ) *stream >>= 1; else stream++; } *frame_type = RX_SPEECH_GOOD; } else if ( mode == MR515 ) { mask = order_MR515; for ( j = 5; j < 108; j++ ) { if ( *stream & 0x1 ) param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) ); mask += 2; if ( j % 8 ) *stream >>= 1; else stream++; } *frame_type = RX_SPEECH_GOOD; } else if ( mode == MR59 ) { mask = order_MR59; for ( j = 5; j < 123; j++ ) { if ( *stream & 0x1 ) param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) ); mask += 2; if ( j % 8 ) *stream >>= 1; else stream++; } *frame_type = RX_SPEECH_GOOD; } else if ( mode == MR67 ) { mask = order_MR67; for ( j = 5; j < 139; j++ ) { if ( *stream & 0x1 ) param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) ); mask += 2; if ( j % 8 ) *stream >>= 1; else stream++; } *frame_type = RX_SPEECH_GOOD; } else if ( mode == MR74 ) { mask = order_MR74; for ( j = 5; j < 153; j++ ) { if ( *stream & 0x1 ) param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) ); mask += 2; if ( j % 8 ) *stream >>= 1; else stream++; } *frame_type = RX_SPEECH_GOOD; } else if ( mode == MR795 ) { mask = order_MR795; for ( j = 5; j < 164; j++ ) { if ( *stream & 0x1 ) param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) ); mask += 2; if ( j % 8 ) *stream >>= 1; else stream++; } *frame_type = RX_SPEECH_GOOD; } else if ( mode == MR102 ) { mask = order_MR102; for ( j = 5; j < 209; j++ ) { if ( *stream & 0x1 ) param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) ); mask += 2; if ( j % 8 ) *stream >>= 1; else stream++; } *frame_type = RX_SPEECH_GOOD; } else if ( mode == MR122 ) { mask = order_MR122; for ( j = 5; j < 249; j++ ) { if ( *stream & 0x1 ) param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) ); mask += 2; if ( j % 8 ) *stream >>= 1; else stream++; } *frame_type = RX_SPEECH_GOOD; } else *frame_type = RX_SPEECH_BAD; return mode; } #endif #endif /* * Decoder_Interface_reset * * * Parameters: * st O: state struct * * Function: * Reset homing frame counter * * Returns: * void */ void Decoder_Interface_reset( dec_interface_State *st ) { st->reset_flag_old = 1; st->prev_ft = RX_SPEECH_GOOD; st->prev_mode = MR475; /* minimum bitrate */ } /* * Decoder_Interface_init * * * Parameters: * void * * Function: * Allocates state memory and initializes state memory * * Returns: * success : pointer to structure * failure : NULL */ void * Decoder_Interface_init( void ) { dec_interface_State * s; /* allocate memory */ if ( ( s = ( dec_interface_State * ) malloc( sizeof( dec_interface_State ) ) ) == NULL ) { fprintf( stderr, "Decoder_Interface_init: " "can not malloc state structure\n" ); return NULL; } s->decoder_State = Speech_Decode_Frame_init( ); if ( s->decoder_State == NULL ) { free( s ); return NULL; } Decoder_Interface_reset( s ); return s; } /* * Decoder_Interface_exit * * * Parameters: * state I: state structure * * Function: * The memory used for state memory is freed * * Returns: * Void */ void Decoder_Interface_exit( void *state ) { dec_interface_State * s; s = ( dec_interface_State * )state; /* free memory */ Speech_Decode_Frame_exit(s->decoder_State ); free( s ); s = NULL; state = NULL; } /* * Decoder_Interface_Decode * * * Parameters: * st B: state structure * bits I: bit stream * synth O: synthesized speech * bfi I: bad frame indicator * * Function: * Decode bit stream to synthesized speech * * Returns: * Void */ void Decoder_Interface_Decode( void *st, #ifndef ETSI UWord8 *bits, #else Word16 *bits, #endif Word16 *synth, int bfi) { enum Mode mode; /* AMR mode */ #ifndef ETSI enum Mode speech_mode = MR475; /* speech mode */ #endif Word16 prm[PRMNO_MR122]; /* AMR parameters */ enum RXFrameType frame_type; /* frame type */ dec_interface_State * s; /* pointer to structure */ const Word16 *homing; /* pointer to homing frame */ Word16 homingSize; /* frame size for homing frame */ Word32 i; /* counter */ Word32 resetFlag = 1; /* homing frame */ #ifndef ETSI #ifndef IF2 Word16 q_bit; #endif #endif s = ( dec_interface_State * )st; #ifndef ETSI /* * extract mode information and frametype, * octets to parameters */ #ifdef IF2 mode = Decoder3GPP( prm, bits, &frame_type, &speech_mode ); #else mode = DecoderMMS( prm, bits, &frame_type, &speech_mode, &q_bit ); if (!bfi) bfi = 1 - q_bit; #endif if ( bfi == 1 ) { if ( mode <= MR122 ) { frame_type = RX_SPEECH_BAD; } else if ( frame_type != RX_NO_DATA ) { frame_type = RX_SID_BAD; mode = s->prev_mode; } } else { if ( frame_type == RX_SID_FIRST || frame_type == RX_SID_UPDATE) { mode = speech_mode; } else if ( frame_type == RX_NO_DATA ) { mode = s->prev_mode; } /* * if no mode information * guess one from the previous frame */ if ( frame_type == RX_SPEECH_BAD ) { mode = s->prev_mode; if ( s->prev_ft >= RX_SID_FIRST ) { frame_type = RX_SID_BAD; } } } #else bfi = 0; frame_type = bits[0]; switch ( frame_type ) { case 0: frame_type = RX_SPEECH_GOOD; mode = bits[245]; Bits2Prm( mode, &bits[1], prm ); break; case 1: frame_type = RX_SID_FIRST; mode = bits[245]; break; case 2: frame_type = RX_SID_UPDATE; mode = bits[245]; Bits2Prm( MRDTX, &bits[1], prm ); break; case 3: frame_type = RX_NO_DATA; mode = s->prev_mode; break; } #endif /* test for homing frame */ if ( s->reset_flag_old == 1 ) { switch ( mode ) { case MR122: homing = dhf_MR122; homingSize = 18; break; case MR102: homing = dhf_MR102; homingSize = 12; break; case MR795: homing = dhf_MR795; homingSize = 8; break; case MR74: homing = dhf_MR74; homingSize = 7; break; case MR67: homing = dhf_MR67; homingSize = 7; break; case MR59: homing = dhf_MR59; homingSize = 7; break; case MR515: homing = dhf_MR515; homingSize = 7; break; case MR475: homing = dhf_MR475; homingSize = 7; break; default: homing = NULL; homingSize = 0; break; } for ( i = 0; i < homingSize; i++ ) { resetFlag = prm[i] ^ homing[i]; if ( resetFlag ) break; } } if ( ( resetFlag == 0 ) && ( s->reset_flag_old != 0 ) ) { for ( i = 0; i < 160; i++ ) { synth[i] = EHF_MASK; } } else Speech_Decode_Frame( s->decoder_State, mode, prm, frame_type, synth ); if ( s->reset_flag_old == 0 ) { /* check whole frame */ switch ( mode ) { case MR122: homing = dhf_MR122; homingSize = PRMNO_MR122; break; case MR102: homing = dhf_MR102; homingSize = PRMNO_MR102; break; case MR795: homing = dhf_MR795; homingSize = PRMNO_MR795; break; case MR74: homing = dhf_MR74; homingSize = PRMNO_MR74; break; case MR67: homing = dhf_MR67; homingSize = PRMNO_MR67; break; case MR59: homing = dhf_MR59; homingSize = PRMNO_MR59; break; case MR515: homing = dhf_MR515; homingSize = PRMNO_MR515; break; case MR475: homing = dhf_MR475; homingSize = PRMNO_MR475; break; default: homing = NULL; homingSize = 0; } for ( i = 0; i < homingSize; i++ ) { resetFlag = prm[i] ^ homing[i]; if ( resetFlag ) break; } } /* reset decoder if current frame is a homing frame */ if ( resetFlag == 0 ) { Speech_Decode_Frame_reset( s->decoder_State ); } s->reset_flag_old = !resetFlag; s->prev_ft = frame_type; s->prev_mode = mode; } h323plus/plugins/audio/gsm-amr/src/readme.txt0000644000175000017500000000634611341106247020031 0ustar markmark =================================================================== TS 26.104 REL-5 V5.4.0 2004-03 REL-6 V6.1.0 2004-03 3GPP AMR Floating-point Speech Codec =================================================================== This readme.txt shortly explains the compilation and use of the AMR floating point C-code. The package contains C-source files for the AMR floating-point speech encoder and optimized fixed-point speech decoder. The optimized fixed-point speech decoder is bit-exact with 3GPP TS 26.073 fixed-point speech decoder version 5.3.0. COMPILING THE SOFTWARE ====================== By default the encoder output and decoder input are formatted according to the MIME file storage format used e.g. by the MMS service. The specification of this format can be found in RFC 3267 "Real-Time Transport Protocol(RTP) Payload Format and File Storage Format for the Adaptive Multi-Rate (AMR) and Adaptive Multi-Rate Wideband (AMR-WB) Audio Codecs", sections 5.1 and 5.3. If you want to compile a package with an output compatible with the existing 3GPP AMR fixed-point C-code and its file format, define "ETSI" during compiling (in the compiler's command line). Hence the output of the encoder and the input of the decoder will use the ETSI "word"- format (one bit per word) used by the official 3GPP AMR fixed-point codec. If you want to compile a package with an output compatible with the AMR IF2 format of the 3GPP specification TS 26.101 "Mandatory speech processing functions; AMR speech codec frame structure", defining "IF2" during compiling. NOTE: When using the ETSI stream format the user must take care that the mode index and the frame type are valid, else the decoder will crash. There is no error protection using this format. For the VAD Option 1 define VAD=VAD1 and for the VAD Option 2 use VAD=VAD2. The default is VAD1. Makefiles for gcc and Microsoft C++ version 6.0 are included in this package. Using MS VC++ makefile, command line is: nmake /f makefile.win32 CFG=ETSI VAD=VAD1 When compiling the encoder, you have to compile the files: encoder.c interf_enc.c sp_enc.c interf_enc.h interf_rom.h rom_enc.h sp_enc.h typedef.h When compiling the decoder, you have to compile files: sp_dec.c decoder.c interf_dec.c interf_dec.h interf_rom.h rom_dec.h sp_dec.h typedef.h RUNNING THE SOFTWARE ==================== Usage of the "encoder" program is as follows: encoder [-dtx] mode speech_file bitstream_file or encoder [-dtx] -modefile=mode_file speech_file bitstream_file = MR475, MR515, MR59, MR67, MR74, MR795, MR102 or MR122 [mode_file] is optional and the format is the same as in the mode file of the corresponding 3GPP TS 26.073 fixed-point C-code. The file is an ascii-file containing one mode per line. Usage of the "decoder" program is as follows: decoder speech_file synthesis_file HISTORY ======= v. 3.0.0 24.8.00 v. 3.1.0 19.12.00 v. 4.0.0 19.12.00 R99 V. 3.2.0 13.06.01 REL-4 V. 4.1.0 13.06.01 R99 V. 3.3.0 01.09.01 REL-4 V. 4.2.0 01.09.01 R99 V. 3.4.0 08.02.02 REL-4 V. 4.3.0 08.02.02 R99 V. 3.5.0 14.01.03 REL-4 V. 4.4.0 14.01.03 REL-5 V. 5.1.0 14.01.03 REL-4 V. 4.5.0 12.06.03 REL-5 V. 5.2.0 12.06.03 REL-5 V. 5.3.0 17.12.03 REL-6 V. 6.0.0 17.12.03 REL-5 V. 5.4.0 05.03.04 REL-6 V. 6.1.0 05.03.04h323plus/plugins/audio/gsm-amr/src/makefile.gcc0000644000175000017500000000712011341106247020255 0ustar markmark# # # # File : makefile.lnx # Purpose : gcc makefile for AMR floating point # ; standalone encoder/decoder program # # make [MODE=DEBUG] [VAD=VAD#] [target [target...]] # # Important targets are: # default (same as not specifying a # target at all) # remove all objects and libs; # build libraries; then build # encoder & decoder programs # depend make new dependency list # clean Remove all object/executable/ # verification output files # clean_depend Clean dependency list # clean_all clean & clean_depend & rm *.a # # # Specifying MODE=DEBUG compiles in debug mode # (libaries compiled in DEBUG mode will be linked) # # Specifying VAD=VAD1 compiles VAD option 1 # Specifying VAD=VAD2 compiles VAD option 2 # # The makefile uses the GNU C compiler (gcc); change # the line CC=gcc below if another compiler is desired # (CFLAGSxxx probably must be changed then as well) # # # $Id $ # #**************************************************************** CC = gcc MAKEFILENAME = makefile # Use MODE=DEBUG for debuggable library (default target builds both) # # default mode = NORM ==> no debug, no wmops # MODE=NORM # Use VAD=VAD1 for VAD option 1, or VAD=VAD2 for VAD option 2 # # default mode = VAD1 # VAD=VAD1 # # compiler flags (for normal, DEBUG compilation) # CFLAGS_NORM = -O4 -DETSI CFLAGS_DEBUG = -g -DDEBUG -DETSI CFLAGS = -Wall -I. $(CFLAGS_$(MODE)) -D$(VAD) CFLAGSDEPEND = -MM $(CFLAGS) # for make depend TMP=$(MODE:NORM=) TMP2=$(TMP:DEBUG=_debug) # # source/object files # ENCODER_SRCS=encoder.c sp_enc.c interf_enc.c DECODER_SRCS=decoder.c sp_dec.c interf_dec.c ENCODER_OBJS=$(ENCODER_SRCS:.c=.o) DECODER_OBJS=$(DECODER_SRCS:.c=.o) ALL_SRCS=$(ENCODER_SRCS) $(DECODER_SRCS) # # default target: build standalone speech encoder and decoder # default: clean_all encoder decoder encoder: $(ENCODER_OBJS) $(CC) -o encoder $(CFLAGS) $(ENCODER_OBJS) $(LDFLAGS) -lm decoder: $(DECODER_OBJS) $(CC) -o decoder $(CFLAGS) $(DECODER_OBJS) $(LDFLAGS) # # how to compile a .c file into a .o # .SUFFIXES: .c .h .o .c.o: $(CC) -c $(CFLAGS) $< # # make / clean dependency list # depend: $(MAKE) -f $(MAKEFILENAME) $(MFLAGS) $(MAKEDEFS) clean_depend $(CC) $(CFLAGSDEPEND) $(ALL_SRCS) >> $(MAKEFILENAME) clean_depend: chmod u+w $(MAKEFILENAME) (awk 'BEGIN{f=1}{if (f) print $0}/^\# DO NOT DELETE THIS LINE -- make depend depends on it./{f=0}'\ < $(MAKEFILENAME) > .depend && \ mv .depend $(MAKEFILENAME)) || exit 1; # # remove object/executable files # clean: rm -f *.o core clean_all: clean rm -f encoder decoder # DO NOT DELETE THIS LINE -- make depend depends on it. encoder.o: encoder.c typedef.h interf_enc.h sp_enc.h sp_enc.o: sp_enc.c sp_enc.h typedef.h rom_enc.h interf_enc.o: interf_enc.c sp_enc.h typedef.h interf_rom.h rom_dec.h decoder.o: decoder.c interf_dec.h typedef.h sp_dec.o: sp_dec.c sp_dec.h rom_dec.h typedef.h interf_dec.o: interf_dec.c typedef.h sp_dec.h interf_rom.h rom_dec.h h323plus/plugins/audio/gsm-amr/src/sp_enc.c0000644000175000017500000114013111341106247017436 0ustar markmark/* * =================================================================== * TS 26.104 * REL-5 V5.4.0 2004-03 * REL-6 V6.1.0 2004-03 * 3GPP AMR Floating-point Speech Codec * =================================================================== * */ /* * sp_enc.c * * * Project: * AMR Floating-Point Codec * * Contains: * This module contains all the functions needed encoding 160 * 16-bit speech samples to AMR encoder parameters. * */ #include #include #include #include #include #include "sp_enc.h" #include "rom_enc.h" /* * Definition of structures used in encoding process */ typedef struct { Float32 y2; Float32 y1; Float32 x0; Float32 x1; }Pre_ProcessState; #ifdef VAD2 /* Defines for VAD2 */ #define FRM_LEN1 80 #define DELAY0 24 #define FFT_LEN1 128 #define UPDATE_CNT_THLD1 50 #define INIT_FRAMES 4 #define CNE_SM_FAC1 0.1 #define CEE_SM_FAC1 0.55 #define HYSTER_CNT_THLD1 6 /* forced update constants... */ #define HIGH_ALPHA1 0.9 #define LOW_ALPHA1 0.7 #define ALPHA_RANGE1 (HIGH_ALPHA1-LOW_ALPHA1) #define NORM_ENRG (4.0) /* account for div by 2 by the HPF */ #define MIN_CHAN_ENRG (0.0625 / NORM_ENRG) #define INE (16.0 / NORM_ENRG) #define NOISE_FLOOR (1.0 / NORM_ENRG) #define PRE_EMP_FAC1 (-0.8) #define NUM_CHAN 16 #define LO_CHAN 0 #define HI_CHAN 15 #define UPDATE_THLD 35 #define SINE_START_CHAN 2 #define P2A_THRESH 10.0 #define DEV_THLD1 28.0 /* Defines for the FFT function */ #define SIZE 128 #define SIZE_BY_TWO 64 #define NUM_STAGE 6 #define PI 3.141592653589793 #define TRUE 1 #define FALSE 0 /* Macros */ #define square(a) ((a)*(a)) /* structures */ typedef struct { Float64 pre_emp_mem; Word16 update_cnt; Word16 hyster_cnt; Word16 last_update_cnt; Float64 ch_enrg_long_db[NUM_CHAN]; Word32 Lframe_cnt; Float64 ch_enrg[NUM_CHAN]; Float64 ch_noise[NUM_CHAN]; Float64 tsnr; Word16 hangover; Word16 burstcount; Word16 fupdate_flag; Float64 negSNRvar; Float64 negSNRbias; Float64 R0; Float64 Rmax; Word16 LTP_flag; }vadState; #else typedef struct { Float32 bckr_est[COMPLEN]; /* background noise estimate */ Float32 ave_level[COMPLEN]; /* averaged input components for stationary estimation */ Float32 old_level[COMPLEN]; /* input levels of the previous frame */ Float32 sub_level[COMPLEN]; /* input levels calculated at the end of a frame (lookahead) */ Float32 a_data5[3][2]; /* memory for the filter bank */ Float32 a_data3[5]; /* memory for the filter bank */ Float32 best_corr_hp; /* FIP filtered value */ /* counts length of a speech burst incl HO addition */ Float32 corr_hp_fast; /* filtered value */ Word32 vadreg; /* flags for intermediate VAD decisions */ Word32 pitch; /* flags for pitch detection */ Word32 oldlag_count, oldlag; /* variables for pitch detection */ Word32 complex_high; /* flags for complex detection */ Word32 complex_low; /* flags for complex detection */ Word32 complex_warning; /* complex background warning */ Word32 tone; /* flags for tone detection */ Word16 burst_count; /* counts length of a speech burst */ Word16 hang_count; /* hangover counter */ Word16 stat_count; /* stationary counter */ Word16 complex_hang_count; /* complex hangover counter, used by VAD */ Word16 complex_hang_timer; /* hangover initiator, used by CAD */ Word16 speech_vad_decision; /* final decision */ Word16 sp_burst_count; }vadState; #endif #define DTX_HIST_SIZE 8 #define DTX_ELAPSED_FRAMES_THRESH (24 + 7 -1) #define DTX_HANG_CONST 7 /* yields eight frames of SP HANGOVER */ typedef struct { Float32 lsp_hist[M * DTX_HIST_SIZE]; Float32 log_en_hist[DTX_HIST_SIZE]; Word32 init_lsf_vq_index; Word16 hist_ptr; Word16 log_en_index; Word16 lsp_index[3]; /* DTX handler stuff */ Word16 dtxHangoverCount; Word16 decAnaElapsedCount; }dtx_encState; typedef struct { /* gain history */ Float32 gp[N_FRAME]; /* counters */ Word16 count; }tonStabState; typedef struct{ Word32 past_qua_en[4]; /* normal MA predictor memory, (contains 20*log10(qua_err)) */ }gc_predState; typedef struct { Float32 prev_alpha; /* previous adaptor output, */ Float32 prev_gc; /* previous code gain, */ Float32 ltpg_mem[LTPG_MEM_SIZE]; /* LTP coding gain history, */ Word16 onset; /* onset state, */ /* (ltpg_mem[0] not used for history) */ }gain_adaptState; typedef struct { Float32 sf0_target_en; Float32 sf0_coeff[5]; Word32 sf0_gcode0_exp; Word32 sf0_gcode0_fra; Word16 *gain_idx_ptr; gc_predState * gc_predSt; gc_predState * gc_predUncSt; gain_adaptState * adaptSt; }gainQuantState; typedef struct { Word32 T0_prev_subframe; /* integer pitch lag of previous sub-frame */ }Pitch_frState; typedef struct { Pitch_frState * pitchSt; }clLtpState; typedef struct { Float32 ada_w; Word32 old_T0_med; Word16 wght_flg; }pitchOLWghtState; typedef struct { Float32 past_rq[M]; /* Past quantized prediction error */ }Q_plsfState; typedef struct { /* Past LSPs */ Float32 lsp_old[M]; Float32 lsp_old_q[M]; /* Quantization state */ Q_plsfState * qSt; }lspState; typedef struct { Float32 old_A[M + 1]; /* Last A(z) for case of unstable filter */ }LevinsonState; typedef struct { LevinsonState * LevinsonSt; }lpcState; typedef struct { /* Speech vector */ Float32 old_speech[L_TOTAL]; Float32 *speech, *p_window, *p_window_12k2; Float32 *new_speech; /* Global variable */ /* Weight speech vector */ Float32 old_wsp[L_FRAME + PIT_MAX]; Float32 *wsp; /* OL LTP states */ Word32 old_lags[5]; Float32 ol_gain_flg[2]; /* Excitation vector */ Float32 old_exc[L_FRAME + PIT_MAX + L_INTERPOL]; Float32 *exc; /* Zero vector */ Float32 ai_zero[L_SUBFR + MP1]; Float32 *zero; /* Impulse response vector */ Float32 *h1; Float32 hvec[L_SUBFR * 2]; /* Substates */ lpcState * lpcSt; lspState * lspSt; clLtpState * clLtpSt; gainQuantState * gainQuantSt; pitchOLWghtState * pitchOLWghtSt; tonStabState * tonStabSt; vadState * vadSt; Word32 dtx; dtx_encState * dtxEncSt; /* Filter's memory */ Float32 mem_syn[M], mem_w0[M], mem_w[M]; Float32 mem_err[M + L_SUBFR], *error; Float32 sharp; }cod_amrState; typedef struct { cod_amrState * cod_amr_state; Pre_ProcessState * pre_state; Word32 dtx; }Speech_Encode_FrameState; /* * Dotproduct40 * * * Parameters: * x I: First input * y I: Second input * Function: * Computes dot product size 40 * * Returns: * acc dot product */ static Float64 Dotproduct40( Float32 *x, Float32 *y ) { Float64 acc; acc = x[0] * y[0] + x[1] * y[1] + x[2] * y[2] + x[3] * y[3]; acc += x[4] * y[4] + x[5] * y[5] + x[6] * y[6] + x[7] * y[7]; acc += x[8] * y[8] + x[9] * y[9] + x[10] * y[10] + x[11] * y[11]; acc += x[12] * y[12] + x[13] * y[13] + x[14] * y[14] + x[15] * y[15]; acc += x[16] * y[16] + x[17] * y[17] + x[18] * y[18] + x[19] * y[19]; acc += x[20] * y[20] + x[21] * y[21] + x[22] * y[22] + x[23] * y[23]; acc += x[24] * y[24] + x[25] * y[25] + x[26] * y[26] + x[27] * y[27]; acc += x[28] * y[28] + x[29] * y[29] + x[30] * y[30] + x[31] * y[31]; acc += x[32] * y[32] + x[33] * y[33] + x[34] * y[34] + x[35] * y[35]; acc += x[36] * y[36] + x[37] * y[37] + x[38] * y[38] + x[39] * y[39]; return( acc ); } /* * Autocorr * * * Parameters: * x I: Input signal * r O: Autocorrelations * wind I: Window for LPC analysis * Function: * Calculate autocorrelation with window, LPC order = M * * Returns: * void */ static void Autocorr( Float32 x[], Float32 r[], const Float32 wind[] ) { Word32 i, j; /* Counters */ Float32 y[L_WINDOW + M + 1]; /* Windowed signal */ Float64 sum; /* temp */ /* * Windowing of signal */ for ( i = 0; i < L_WINDOW; i++ ) { y[i] = x[i] * wind[i]; } /* * Zero remaining memory */ memset( &y[L_WINDOW], 0, 44 ); /* * Autocorrelation */ for ( i = 0; i <= M; i++ ) { sum = 0; for ( j = 0; j < L_WINDOW; j += 40 ) { sum += Dotproduct40( &y[j], &y[j + i] ); } r[i] = (Float32)sum; } } /* * Levinson * * * Parameters: * old_A I: Vector of old LP coefficients [M+1] * r I: Vector of autocorrelations [M+1] * a O: LP coefficients [M+1] * rc O: Reflection coefficients [4] * Function: * Levinson-Durbin algorithm * * Returns: * void * */ static void Levinson( Float32 *old_A, Float32 *r, Float32 *A, Float32 *rc ) { Float32 sum, at, err; Word32 l, j, i; Float32 rct[M]; /* temporary reflection coefficients 0,...,m-1 */ rct[0] = ( -r[1] ) / r[0]; A[0] = 1.0F; A[1] = rct[0]; err = r[0] + r[1] * rct[0]; if ( err <= 0.0 ) err = 0.01F; for ( i = 2; i <= M; i++ ) { sum = 0.0F; for ( j = 0; j < i; j++ ) sum += r[i - j] * A[j]; rct[i - 1] = ( -sum ) / ( err ); for ( j = 1; j <= ( i / 2 ); j++ ) { l = i - j; at = A[j] + rct[i - 1] *A[l]; A[l] += rct[i - 1] *A[j]; A[j] = at; } A[i] = rct[i - 1]; err += rct[i - 1] *sum; if ( err <= 0.0 ) err = 0.01F; } memcpy( rc, rct, 4 * sizeof( Float32 ) ); memcpy( old_A, A, MP1 * sizeof( Float32 ) ); } /* * lpc * * * Parameters: * old_A O: Vector of old LP coefficients [M+1] * x I: Input signal * x_12k2 I: Input signal 12.2k * a O: predictor coefficients * mode I: AMR mode * Function: * LP analysis * * In 12.2 kbit/s mode linear prediction (LP) analysis is performed * twice per speech frame using the auto-correlation approach with * 30 ms asymmetric windows. No lookahead is used in * the auto-correlation computation. * * In other modes analysis is performed once per speech frame * using the auto-correlation approach with 30 ms asymmetric windows. * A lookahead of 40 samples (5 ms) is used in the auto-correlation computation. * * The auto-correlations of windowed speech are converted to the LP * coefficients using the Levinson-Durbin algorithm. * Then the LP coefficients are transformed to the Line Spectral Pair * (LSP) domain for quantization and interpolation purposes. * The interpolated quantified and unquantized filter coefficients * are converted back to the LP filter coefficients * (to construct the synthesis and weighting filters at each subframe). * * Returns: * void * */ static void lpc( Float32 *old_A, Float32 x[], Float32 x_12k2[], Float32 a[], enum Mode mode ) { Word32 i; Float32 r[MP1]; Float32 rc[4]; if ( mode == MR122 ) { Autocorr( x_12k2, r, window_160_80 ); /* * Lag windowing */ for ( i = 1; i <= M; i++ ) { r[i] = r[i] * lag_wind[i - 1]; } r[0] *= 1.0001F; if ( r[0] < 1.0F ) r[0] = 1.0F; /* * Levinson Durbin */ Levinson( old_A, r, &a[MP1], rc ); /* * Autocorrelations */ Autocorr( x_12k2, r, window_232_8 ); /* * Lag windowing */ for ( i = 1; i <= M; i++ ) { r[i] = r[i] * lag_wind[i - 1]; } r[0] *= 1.0001F; if ( r[0] < 1.0F ) r[0] = 1.0F; /* * Levinson Durbin */ Levinson( old_A, r, &a[MP1 * 3], rc ); } else { /* * Autocorrelations */ Autocorr( x, r, window_200_40 ); /* * a 60 Hz bandwidth expansion is used by lag windowing * the auto-correlations. Further, auto-correlation[0] is * multiplied by the white noise correction factor 1.0001 * which is equivalent to adding a noise floor at -40 dB. */ for ( i = 1; i <= M; i++ ) { r[i] = r[i] * lag_wind[i - 1]; } r[0] *= 1.0001F; if ( r[0] < 1.0F ) r[0] = 1.0F; /* * Levinson Durbin */ Levinson( old_A, r, &a[MP1 * 3], rc ); } } /* * Chebps * * * Parameters: * x I: Cosine value for the freqency given * f I: angular freqency * Function: * Evaluates the Chebyshev polynomial series * * Returns: * result of polynomial evaluation */ static Float32 Chebps( Float32 x, Float32 f[] ) { Float32 b0, b1, b2, x2; Word32 i; x2 = 2.0F * x; b2 = 1.0F; b1 = x2 + f[1]; for ( i = 2; i < 5; i++ ) { b0 = x2 * b1 - b2 + f[i]; b2 = b1; b1 = b0; } return( x * b1 - b2 + f[i] ); } /* * Az_lsp * * * Parameters: * a I: Predictor coefficients [MP1] * lsp O: Line spectral pairs [M] * old_lsp I: Old lsp, in case not found 10 roots [M] * * Function: * LP to LSP conversion * * The LP filter coefficients A[], are converted to the line spectral pair * (LSP) representation for quantization and interpolation purposes. * * Returns: * void */ static void Az_lsp( Float32 a[], Float32 lsp[], Float32 old_lsp[] ) { Word32 i, j, nf, ip; Float32 xlow, ylow, xhigh, yhigh, xmid, ymid, xint; Float32 y; Float32 *coef; Float32 f1[6], f2[6]; /* * find the sum and diff. pol. F1(z) and F2(z) */ f1[0] = 1.0F; f2[0] = 1.0F; for ( i = 0; i < ( NC ); i++ ) { f1[i + 1] = a[i + 1] +a[M - i] - f1[i]; f2[i + 1] = a[i + 1] -a[M - i] + f2[i]; } f1[NC] *= 0.5F; f2[NC] *= 0.5F; /* * find the LSPs using the Chebychev pol. evaluation */ nf = 0; /* number of found frequencies */ ip = 0; /* indicator for f1 or f2 */ coef = f1; xlow = grid[0]; ylow = Chebps( xlow, coef ); j = 0; while ( ( nf < M ) && ( j < 60 ) ) { j++; xhigh = xlow; yhigh = ylow; xlow = grid[j]; ylow = Chebps( xlow, coef ); if ( ylow * yhigh <= 0 ) { /* divide 4 times the interval */ for ( i = 0; i < 4; i++ ) { xmid = ( xlow + xhigh ) * 0.5F; ymid = Chebps( xmid, coef ); if ( ylow * ymid <= 0.0F ) { yhigh = ymid; xhigh = xmid; } else { ylow = ymid; xlow = xmid; } } /* * Linear interpolation * xint = xlow - ylow*(xhigh-xlow)/(yhigh-ylow) */ y = yhigh - ylow; if ( y == 0 ) { xint = xlow; } else { y = ( xhigh - xlow ) / ( yhigh - ylow ); xint = xlow - ylow * y; } lsp[nf] = xint; xlow = xint; nf++; if ( ip == 0 ) { ip = 1; coef = f2; } else { ip = 0; coef = f1; } ylow = Chebps( xlow, coef ); } } /* Check if M roots found */ if ( nf < M ) { memcpy( lsp, old_lsp, M <<2 ); } return; } /* * Get_lsp_pol * * * Parameters: * lsp I: line spectral frequencies * f O: polynomial F1(z) or F2(z) * * Function: * Find the polynomial F1(z) or F2(z) from the LSPs. * * F1(z) = product ( 1 - 2 lsp[i] z^-1 + z^-2 ) * i=0,2,4,6,8 * F2(z) = product ( 1 - 2 lsp[i] z^-1 + z^-2 ) * i=1,3,5,7,9 * * where lsp[] is the LSP vector in the cosine domain. * * The expansion is performed using the following recursion: * * f[0] = 1 * b = -2.0 * lsp[0] * f[1] = b * for i=2 to 5 do * b = -2.0 * lsp[2*i-2]; * f[i] = b*f[i-1] + 2.0*f[i-2]; * for j=i-1 down to 2 do * f[j] = f[j] + b*f[j-1] + f[j-2]; * f[1] = f[1] + b; * * Returns: * void */ static void Get_lsp_pol( Float32 *lsp, Float32 *f ) { Word32 i, j; Float32 T0; f[0] = 1.0F; f[1] = -2.0F * lsp[0]; for ( i = 2; i <= 5; i++ ) { T0 = -2.0F * lsp[2 * i - 2]; f[i] = ( Float32 )( T0 * f[i - 1] +2.0F * f[i - 2] ); for ( j = i - 1; j >= 2; j-- ) { f[j] = f[j] + T0 * f[j - 1] +f[j - 2]; } f[1] = f[1] + T0; } return; } /* * Lsp_Az * * * Parameters: * lsp I: Line spectral frequencies * a O: Predictor coefficients * * Function: * Converts from the line spectral pairs (LSP) to LP coefficients, * for a 10th order filter. * * Returns: * void */ static void Lsp_Az( Float32 lsp[], Float32 a[] ) { Float32 f1[6], f2[6]; Word32 i, j; Get_lsp_pol( &lsp[0], f1 ); Get_lsp_pol( &lsp[1], f2 ); for ( i = 5; i > 0; i-- ) { f1[i] += f1[i - 1]; f2[i] -= f2[i - 1]; } a[0] = 1; for ( i = 1, j = 10; i <= 5; i++, j-- ) { a[i] = ( Float32 )( ( f1[i] + f2[i] ) * 0.5F ); a[j] = ( Float32 )( ( f1[i] - f2[i] ) * 0.5F ); } return; } /* * Int_lpc_1and3_2 * * * Parameters: * lsp_old I: LSP vector at the 4th subfr. of past frame [M] * lsp_mid I: LSP vector at the 2nd subframe of present frame [M] * lsp_new I: LSP vector at the 4th subframe of present frame [M] * az O: interpolated LP parameters in subframes 1 and 3 * [AZ_SIZE] * * Function: * Interpolation of the LPC parameters. Same as the Int_lpc * function but we do not recompute Az() for subframe 2 and * 4 because it is already available. * * Returns: * void */ static void Int_lpc_1and3_2( Float32 lsp_old[], Float32 lsp_mid[], Float32 lsp_new[], Float32 az[] ) { Float32 lsp[M]; Word32 i; for ( i = 0; i < M; i += 2 ) { lsp[i] = ( lsp_mid[i] + lsp_old[i] ) * 0.5F; lsp[i + 1] = ( lsp_mid[i + 1] +lsp_old[i+1] )*0.5F; } /* Subframe 1 */ Lsp_Az( lsp, az ); az += MP1 * 2; for ( i = 0; i < M; i += 2 ) { lsp[i] = ( lsp_mid[i] + lsp_new[i] ) * 0.5F; lsp[i + 1] = ( lsp_mid[i + 1] +lsp_new[i+1] )*0.5F; } /* Subframe 3 */ Lsp_Az( lsp, az ); return; } /* * Lsp_lsf * * * Parameters: * lsp I: LSP vector * lsf O: LSF vector * * Function: * Transformation lsp to lsf, LPC order M * * Returns: * void */ static void Lsp_lsf( Float32 lsp[], Float32 lsf[] ) { Word32 i; for ( i = 0; i < M; i++ ) { lsf[i] = ( Float32 )( acos( lsp[i] )*SCALE_LSP_FREQ ); } return; } /* * Lsf_wt * * * Parameters: * lsf I: LSF vector * wf O: square of weighting factors * * Function: * Compute LSF weighting factors * * Returns: * void */ static void Lsf_wt( Float32 *lsf, Float32 *wf ) { Float32 temp; Word32 i; wf[0] = lsf[1]; for ( i = 1; i < 9; i++ ) { wf[i] = lsf[i + 1] -lsf[i - 1]; } wf[9] = 4000.0F - lsf[8]; for ( i = 0; i < 10; i++ ) { if ( wf[i] < 450.0F ) { temp = 3.347F - SLOPE1_WGHT_LSF * wf[i]; } else { temp = 1.8F - SLOPE2_WGHT_LSF * ( wf[i] - 450.0F ); } wf[i] = temp * temp; } return; } /* * Vq_subvec * * * Parameters: * lsf_r1 I: 1st LSF residual vector * lsf_r2 I: 2nd LSF residual vector * dico I: quantization codebook * wf1 I: 1st LSF weighting factors * wf2 I: 2nd LSF weighting factors * dico_size I: size of quantization codebook * Function: * Quantization of a 4 dimensional subvector * * Returns: * index quantization index */ static Word16 Vq_subvec( Float32 *lsf_r1, Float32 *lsf_r2, const Float32 *dico, Float32 *wf1, Float32 *wf2, Word16 dico_size ) { Float64 temp, dist, dist_min; const Float32 *p_dico; Word32 i, index = 0; dist_min = DBL_MAX; p_dico = dico; for ( i = 0; i < dico_size; i++ ) { temp = lsf_r1[0] - *p_dico++; dist = temp * temp * wf1[0]; temp = lsf_r1[1] - *p_dico++; dist += temp * temp * wf1[1]; temp = lsf_r2[0] - *p_dico++; dist += temp * temp * wf2[0]; temp = lsf_r2[1] - *p_dico++; dist += temp * temp * wf2[1]; if ( dist < dist_min ) { dist_min = dist; index = i; } } /* Reading the selected vector */ p_dico = &dico[index << 2]; lsf_r1[0] = *p_dico++; lsf_r1[1] = *p_dico++; lsf_r2[0] = *p_dico++; lsf_r2[1] = *p_dico++; return( Word16 )index; } /* * Vq_subvec_s * * * Parameters: * lsf_r1 I: 1st LSF residual vector * lsf_r2 I: 2nd LSF residual vector * dico I: quantization codebook * wf1 I: 1st LSF weighting factors * wf2 I: 2nd LSF weighting factors * dico_size I: size of quantization codebook * Function: * Quantization of a 4 dimensional subvector with a signed codebook * * Returns: * index quantization index */ static Word16 Vq_subvec_s( Float32 *lsf_r1, Float32 *lsf_r2, const Float32 *dico , Float32 *wf1, Float32 *wf2, Word16 dico_size ) { Float64 dist_min, dist1, dist2, temp1, temp2; const Float32 *p_dico; Word32 i, index = 0; Word16 sign = 0; dist_min = DBL_MAX; p_dico = dico; for ( i = 0; i < dico_size; i++ ) { temp1 = lsf_r1[0] - *p_dico; temp2 = lsf_r1[0] + *p_dico++; dist1 = temp1 * temp1 * wf1[0]; dist2 = temp2 * temp2 * wf1[0]; temp1 = lsf_r1[1] - *p_dico; temp2 = lsf_r1[1] + *p_dico++; dist1 += temp1 * temp1 * wf1[1]; dist2 += temp2 * temp2 * wf1[1]; temp1 = lsf_r2[0] - *p_dico; temp2 = lsf_r2[0] + *p_dico++; dist1 += temp1 * temp1 * wf2[0]; dist2 += temp2 * temp2 * wf2[0]; temp1 = lsf_r2[1] - *p_dico; temp2 = lsf_r2[1] + *p_dico++; dist1 += temp1 * temp1 * wf2[1]; dist2 += temp2 * temp2 * wf2[1]; if ( dist1 < dist_min ) { dist_min = dist1; index = i; sign = 0; } if ( dist2 < dist_min ) { dist_min = dist2; index = i; sign = 1; } } /* Reading the selected vector */ p_dico = &dico[index << 2]; if ( sign == 0 ) { lsf_r1[0] = *p_dico++; lsf_r1[1] = *p_dico++; lsf_r2[0] = *p_dico++; lsf_r2[1] = *p_dico++; } else { lsf_r1[0] = -( *p_dico++ ); lsf_r1[1] = -( *p_dico++ ); lsf_r2[0] = -( *p_dico++ ); lsf_r2[1] = -( *p_dico++ ); } index = index << 1; index = index + sign; return( Word16 )index; } /* * Reorder_lsf * * * Parameters: * lsf B: vector of LSFs * min_dist I: minimum required distance * * Function: * Make sure that the LSFs are properly ordered and to keep a certain minimum * distance between adjacent LSFs. LPC order = M. * * Returns: * void */ static void Reorder_lsf( Float32 *lsf, Float32 min_dist ) { Float32 lsf_min; Word32 i; lsf_min = min_dist; for ( i = 0; i < M; i++ ) { if ( lsf[i] < lsf_min ) { lsf[i] = lsf_min; } lsf_min = lsf[i] + min_dist; } } /* * Lsf_lsp * * * Parameters: * lsf I: vector of LSFs * lsp O: vector of LSPs * * Function: * Transformation lsf to lsp, order M * * Returns: * void */ static void Lsf_lsp( Float32 lsf[], Float32 lsp[] ) { Word32 i; for ( i = 0; i < M; i++ ) { lsp[i] = ( Float32 )cos( SCALE_FREQ_LSP * lsf[i] ); } return; } /* * Vq_subvec3 * * * Parameters: * lsf_r1 I: 1st LSF residual vector * dico I: quantization codebook * wf1 I: 1st LSF weighting factors * dico_size I: size of quantization codebook * use_half I: use every second entry in codebook * * Function: * Quantization of a 3 dimensional subvector * * Returns: * index quantization index */ static Word16 Vq_subvec3( Float32 *lsf_r1, const Float32 *dico, Float32 *wf1, Word16 dico_size, Word32 use_half ) { Float64 dist, dist_min; Float32 temp; const Float32 *p_dico; Word32 i, index = 0; dist_min = FLT_MAX; p_dico = dico; if ( use_half == 0 ) { for ( i = 0; i < dico_size; i++ ) { temp = lsf_r1[0] - *p_dico++; temp *= wf1[0]; dist = temp * temp; temp = lsf_r1[1] - *p_dico++; temp *= wf1[1]; dist += temp * temp; temp = lsf_r1[2] - *p_dico++; temp *= wf1[2]; dist += temp * temp; if ( dist < dist_min ) { dist_min = dist; index = i; } } p_dico = &dico[( 3 * index )]; } else { for ( i = 0; i < dico_size; i++ ) { temp = lsf_r1[0] - *p_dico++; temp *= wf1[0]; dist = temp * temp; temp = lsf_r1[1] - *p_dico++; temp *= wf1[1]; dist += temp * temp; temp = lsf_r1[2] - *p_dico++; temp *= wf1[2]; dist += temp * temp; if ( dist < dist_min ) { dist_min = dist; index = i; } p_dico = p_dico + 3; } p_dico = &dico[6 * index]; } /* Reading the selected vector */ lsf_r1[0] = *p_dico++; lsf_r1[1] = *p_dico++; lsf_r1[2] = *p_dico++; return( Word16 )index; } /* * Vq_subvec4 * * * Parameters: * lsf_r1 I: 1st LSF residual vector * dico I: quantization codebook * wf1 I: 1st LSF weighting factors * dico_size I: size of quantization codebook * * Function: * Quantization of a 4 dimensional subvector * * Returns: * index quantization index */ static Word16 Vq_subvec4( Float32 *lsf_r1, const Float32 *dico, Float32 *wf1, Word16 dico_size ) { Float64 dist, dist_min; Float32 temp; const Float32 *p_dico; Word32 i, index = 0; dist_min = FLT_MAX; p_dico = dico; for ( i = 0; i < dico_size; i++ ) { temp = lsf_r1[0] - *p_dico++; temp *= wf1[0]; dist = temp * temp; temp = lsf_r1[1] - *p_dico++; temp *= wf1[1]; dist += temp * temp; temp = lsf_r1[2] - *p_dico++; temp *= wf1[2]; dist += temp * temp; temp = lsf_r1[3] - *p_dico++; temp *= wf1[3]; dist += temp * temp; if ( dist < dist_min ) { dist_min = dist; index = i; } } /* Reading the selected vector */ p_dico = &dico[index << 2]; lsf_r1[0] = *p_dico++; lsf_r1[1] = *p_dico++; lsf_r1[2] = *p_dico++; lsf_r1[3] = *p_dico++; return( Word16 )index; } /* * Q_plsf_3 * * * Parameters: * mode I: AMR mode * past_rq B: past quantized residual * lsp1 I: 1st LSP vector * lsp1_q O: quantized 1st LSP vector * indice I: quantization indices of 5 matrices and * one sign for 3rd * pred_init_i O: init index for MA prediction in DTX mode * * Function: * Quantization of LSF parameters with 1st order MA prediction and * split by 3 vector quantization (split-VQ) * * Returns: * void */ static void Q_plsf_3( enum Mode mode, Float32 *past_rq, Float32 *lsp1, Float32 * lsp1_q, Word16 *indice, Word32 *pred_init_i ) { Float32 lsf1[M], wf1[M], lsf_p[M], lsf_r1[M]; Float32 lsf1_q[M]; Float32 pred_init_err; Float32 min_pred_init_err; Float32 temp_r1[M]; Float32 temp_p[M]; Word32 j, i; /* convert LSFs to normalize frequency domain */ Lsp_lsf( lsp1, lsf1 ); /* compute LSF weighting factors */ Lsf_wt( lsf1, wf1 ); /* Compute predicted LSF and prediction error */ if ( mode != MRDTX ) { for ( i = 0; i < M; i++ ) { lsf_p[i] = mean_lsf_3[i] + past_rq[i] * pred_fac[i]; lsf_r1[i] = lsf1[i] - lsf_p[i]; } } else { /* * DTX mode, search the init vector that yields * lowest prediction resuidual energy */ *pred_init_i = 0; min_pred_init_err = FLT_MAX; for ( j = 0; j < PAST_RQ_INIT_SIZE; j++ ) { pred_init_err = 0; for ( i = 0; i < M; i++ ) { temp_p[i] = mean_lsf_3[i] + past_rq_init[j * M + i]; temp_r1[i] = lsf1[i] - temp_p[i]; pred_init_err += temp_r1[i] * temp_r1[i]; } /* next i */ if ( pred_init_err < min_pred_init_err ) { min_pred_init_err = pred_init_err; memcpy( lsf_r1, temp_r1, M <<2 ); memcpy( lsf_p, temp_p, M <<2 ); memcpy( past_rq, &past_rq_init[j * M], M <<2 ); *pred_init_i = j; } } } /* Split-VQ of prediction error */ /* MR475, MR515 */ if ( ( mode == MR475 ) || ( mode == MR515 ) ) { indice[0] = Vq_subvec3( &lsf_r1[0], dico1_lsf_3, &wf1[0], DICO1_SIZE_3, 0 ); indice[1] = Vq_subvec3( &lsf_r1[3], dico2_lsf_3, &wf1[3], DICO2_SIZE_3 /2, 1 ); indice[2] = Vq_subvec4( &lsf_r1[6], mr515_3_lsf, &wf1[6], MR515_3_SIZE ); } /* MR795 */ else if ( mode == MR795 ) { indice[0] = Vq_subvec3( &lsf_r1[0], mr795_1_lsf, &wf1[0], MR795_1_SIZE, 0 ); indice[1] = Vq_subvec3( &lsf_r1[3], dico2_lsf_3, &wf1[3], DICO2_SIZE_3, 0 ); indice[2] = Vq_subvec4( &lsf_r1[6], dico3_lsf_3, &wf1[6], DICO3_SIZE_3 ); } /* MR59, MR67, MR74, MR102 , MRDTX */ else { indice[0] = Vq_subvec3( &lsf_r1[0], dico1_lsf_3, &wf1[0], DICO1_SIZE_3, 0 ); indice[1] = Vq_subvec3( &lsf_r1[3], dico2_lsf_3, &wf1[3], DICO2_SIZE_3, 0 ); indice[2] = Vq_subvec4( &lsf_r1[6], dico3_lsf_3, &wf1[6], DICO3_SIZE_3 ); } /* Compute quantized LSFs and update the past quantized residual */ for ( i = 0; i < M; i++ ) { lsf1_q[i] = lsf_r1[i] + lsf_p[i]; past_rq[i] = lsf_r1[i]; } /* verification that LSFs has mimimum distance of LSF_GAP 50 Hz */ Reorder_lsf( lsf1_q, 50.0F ); /* convert LSFs to the cosine domain */ Lsf_lsp( lsf1_q, lsp1_q ); } /* * Q_plsf_5 * * * Parameters: * past_rq B: past quantized residual * lsp1 I: 1st LSP vector * lsp2 I: 2nd LSP vector * lsp1_q O: quantized 1st LSP vector * lsp2_q O: quantized 2nd LSP vector * indice I: quantization indices of 5 matrices and * one sign for 3rd * * Function: * Quantization of 2 sets of LSF parameters using 1st order MA * prediction and split by 5 matrix quantization (split-MQ). * * Returns: * void */ static void Q_plsf_5( Float32 *past_rq, Float32 *lsp1, Float32 *lsp2, Float32 * lsp1_q, Float32 *lsp2_q, Word16 *indice ) { Float32 lsf1[M], lsf2[M], wf1[M], wf2[M], lsf_p[M], lsf_r1[M], lsf_r2[M]; Float32 lsf1_q[M], lsf2_q[M]; Word32 i; /* convert LSFs to normalize frequency domain */ Lsp_lsf( lsp1, lsf1 ); Lsp_lsf( lsp2, lsf2 ); /* Compute LSF weighting factors */ Lsf_wt( lsf1, wf1 ); Lsf_wt( lsf2, wf2 ); /* Compute predicted LSF and prediction error */ for ( i = 0; i < M; i++ ) { /* MR122 LSP prediction factor = 0.65 */ lsf_p[i] = mean_lsf_5[i] + past_rq[i] * 0.65F; lsf_r1[i] = lsf1[i] - lsf_p[i]; lsf_r2[i] = lsf2[i] - lsf_p[i]; } /* Split-MQ of prediction error */ indice[0] = Vq_subvec( &lsf_r1[0], &lsf_r2[0], dico1_lsf_5, &wf1[0], &wf2[0], DICO1_SIZE_5 ); indice[1] = Vq_subvec( &lsf_r1[2], &lsf_r2[2], dico2_lsf_5, &wf1[2], &wf2[2], DICO2_SIZE_5 ); indice[2] = Vq_subvec_s( &lsf_r1[4], &lsf_r2[4], dico3_lsf_5, &wf1[4], &wf2[4 ], DICO3_SIZE_5 ); indice[3] = Vq_subvec( &lsf_r1[6], &lsf_r2[6], dico4_lsf_5, &wf1[6], &wf2[6], DICO4_SIZE_5 ); indice[4] = Vq_subvec( &lsf_r1[8], &lsf_r2[8], dico5_lsf_5, &wf1[8], &wf2[8], DICO5_SIZE_5 ); /* Compute quantized LSFs and update the past quantized residual */ for ( i = 0; i < M; i++ ) { lsf1_q[i] = lsf_r1[i] + lsf_p[i]; lsf2_q[i] = lsf_r2[i] + lsf_p[i]; past_rq[i] = lsf_r2[i]; } /* verification that LSFs has minimum distance of LSF_GAP 50hz */ Reorder_lsf( lsf1_q, 50.0F ); Reorder_lsf( lsf2_q, 50.0F ); /* convert LSFs to the cosine domain */ Lsf_lsp( lsf1_q, lsp1_q ); Lsf_lsp( lsf2_q, lsp2_q ); } /* * Int_lpc_1and3 * * * Parameters: * lsp_old I: LSP vector at the 4th subfr. of past frame [M] * lsp_mid I: LSP vector at the 2nd subframe of present frame [M] * lsp_new I: LSP vector at the 4th subframe of present frame [M] * az O: interpolated LP parameters in subframes 1 and 3 * [AZ_SIZE] * * Function: * Interpolates the LSPs and converts to LPC parameters * to get a different LP filter in each subframe. * * The 20 ms speech frame is divided into 4 subframes. * The LSPs are quantized and transmitted at the 2nd and * 4th subframes (twice per frame) and interpolated at the * 1st and 3rd subframe. * * Returns: * void */ static void Int_lpc_1and3( Float32 lsp_old[], Float32 lsp_mid[], Float32 lsp_new [], Float32 az[] ) { Word32 i; Float32 lsp[M]; for ( i = 0; i < M; i++ ) { lsp[i] = ( lsp_mid[i] + lsp_old[i] ) * 0.5F; } /* Subframe 1 */ Lsp_Az( lsp, az ); az += MP1; /* Subframe 2 */ Lsp_Az( lsp_mid, az ); az += MP1; for ( i = 0; i < M; i++ ) { lsp[i] = ( lsp_mid[i] + lsp_new[i] ) * 0.5F; } /* Subframe 3 */ Lsp_Az( lsp, az ); az += MP1; /* Subframe 4 */ Lsp_Az( lsp_new, az ); return; } /* * Int_lpc_1to3_2 * * * Parameters: * lsp_old I: LSP vector at the 4th subfr. of past frame [M] * lsp_new I: LSP vector at the 4th subframe of present frame [M] * az O: interpolated LP parameters in subframes 1, 2 and 3 * [AZ_SIZE] * * Function: * Interpolation of the LPC parameters. * * Returns: * void */ static void Int_lpc_1to3_2( Float32 lsp_old[], Float32 lsp_new[], Float32 az[] ) { Float32 lsp[M]; Word32 i; for ( i = 0; i < M; i += 2 ) { lsp[i] = lsp_new[i] * 0.25F + lsp_old[i] * 0.75F; lsp[i + 1] = lsp_new[i + 1] *0.25F + lsp_old[i + 1] *0.75F; } /* Subframe 1 */ Lsp_Az( lsp, az ); az += MP1; for ( i = 0; i < M; i += 2 ) { lsp[i] = ( lsp_old[i] + lsp_new[i] ) * 0.5F; lsp[i + 1] = ( lsp_old[i + 1] +lsp_new[i+1] )*0.5F; } /* Subframe 2 */ Lsp_Az( lsp, az ); az += MP1; for ( i = 0; i < M; i += 2 ) { lsp[i] = lsp_old[i] * 0.25F + lsp_new[i] * 0.75F; lsp[i + 1] = lsp_old[i + 1] *0.25F + lsp_new[i + 1] *0.75F; } /* Subframe 3 */ Lsp_Az( lsp, az ); return; } /* * Int_lpc_1to3 * * * Parameters: * lsp_old I: LSP vector at the 4th subfr. of past frame [M] * lsp_new I: LSP vector at the 4th subframe of present frame [M] * az O: interpolated LP parameters in all subframes * [AZ_SIZE] * * Function: * Interpolates the LSPs and converts to LPC parameters to get a different * LP filter in each subframe. * * The 20 ms speech frame is divided into 4 subframes. * The LSPs are quantized and transmitted at the 4th * subframes (once per frame) and interpolated at the * 1st, 2nd and 3rd subframe. * * Returns: * void */ static void Int_lpc_1to3( Float32 lsp_old[], Float32 lsp_new[], Float32 az[] ) { Float32 lsp[M]; Word32 i; for ( i = 0; i < M; i++ ) { lsp[i] = lsp_new[i] * 0.25F + lsp_old[i] * 0.75F; } /* Subframe 1 */ Lsp_Az( lsp, az ); az += MP1; for ( i = 0; i < M; i++ ) { lsp[i] = ( lsp_old[i] + lsp_new[i] ) * 0.5F; } /* Subframe 2 */ Lsp_Az( lsp, az ); az += MP1; for ( i = 0; i < M; i++ ) { lsp[i] = lsp_old[i] * 0.25F + lsp_new[i] * 0.75F; } /* Subframe 3 */ Lsp_Az( lsp, az ); az += MP1; /* Subframe 4 */ Lsp_Az( lsp_new, az ); return; } /* * lsp * * * Parameters: * req_mode I: requested mode * used_mode I: used mode * lsp_old B: old LSP vector * lsp_old_q B: old quantized LSP vector * past_rq B: past quantized residual * az B: interpolated LP parameters * azQ O: quantization interpol. LP parameters * lsp_new O: new lsp vector * anap O: analysis parameters * * Function: * From A(z) to lsp. LSP quantization and interpolation * * Returns: * void */ static void lsp( enum Mode req_mode, enum Mode used_mode, Float32 *lsp_old, Float32 *lsp_old_q, Float32 *past_rq, Float32 az[], Float32 azQ[], Float32 lsp_new[], Word16 **anap ) { Float32 lsp_new_q[M]; /* LSPs at 4th subframe */ Float32 lsp_mid[M], lsp_mid_q[M]; /* LSPs at 2nd subframe */ Word32 pred_init_i; /* init index for MA prediction in DTX mode */ if ( req_mode == MR122 ) { Az_lsp( &az[MP1], lsp_mid, lsp_old ); Az_lsp( &az[MP1 * 3], lsp_new, lsp_mid ); /* * Find interpolated LPC parameters in all subframes * (both quantized and unquantized). * The interpolated parameters are in array A_t[] of size (M+1)*4 * and the quantized interpolated parameters are in array Aq_t[] */ Int_lpc_1and3_2( lsp_old, lsp_mid, lsp_new, az ); if ( used_mode != MRDTX ) { /* LSP quantization (lsp_mid[] and lsp_new[] jointly quantized) */ Q_plsf_5( past_rq, lsp_mid, lsp_new, lsp_mid_q, lsp_new_q, *anap ); Int_lpc_1and3( lsp_old_q, lsp_mid_q, lsp_new_q, azQ ); /* Advance analysis parameters pointer */ ( *anap ) += 5; } } else { /* From A(z) to lsp */ Az_lsp( &az[MP1 * 3], lsp_new, lsp_old ); /* * Find interpolated LPC parameters in all subframes * (both quantized and unquantized). * The interpolated parameters are in array A_t[] of size (M+1)*4 * and the quantized interpolated parameters are in array Aq_t[] */ Int_lpc_1to3_2( lsp_old, lsp_new, az ); /* LSP quantization */ if ( used_mode != MRDTX ) { Q_plsf_3( req_mode, past_rq, lsp_new, lsp_new_q, *anap, &pred_init_i ); Int_lpc_1to3( lsp_old_q, lsp_new_q, azQ ); /* Advance analysis parameters pointer */ ( *anap ) += 3; } } /* update the LSPs for the next frame */ memcpy( lsp_old, lsp_new, M <<2 ); memcpy( lsp_old_q, lsp_new_q, M <<2 ); } /* * check_lsp * * * Parameters: * count B: counter for resonance * lsp B: LSP vector * * Function: * Check the LSP's to detect resonances * * Resonances in the LPC filter are monitored to detect possible problem * areas where divergence between the adaptive codebook memories in * the encoder and the decoder could cause unstable filters in areas * with highly correlated continuos signals. Typically, this divergence * is due to channel errors. * The monitoring of resonance signals is performed using unquantized LSPs * q(i), i = 1,...,10. The algorithm utilises the fact that LSPs are * closely located at a peak in the spectrum. First, two distances, * dist 1 and dist 2 ,are calculated in two different regions, * defined as * * dist1 = min[q(i) - q(i + 1)], i = 4,...,8 * dist2 = min[q(i) - q(i + 1)], i = 2,3 * * Either of these two minimum distance conditions must be fulfilled * to classify the frame as a resonance frame and increase the resonance * counter. * * if(dist1 < TH1) || if (dist2 < TH2) * counter++ * else * counter = 0 * * TH1 = 0.046 * TH2 = 0.018, q(2) > 0.98 * TH2 = 0.024, 0.93 < q(2) <= 0.98 * TH2 = 0.018, otherwise * * 12 consecutive resonance frames are needed to indicate possible * problem conditions, otherwise the LSP_flag is cleared. * * Returns: * resonance flag */ static Word16 check_lsp( Word16 *count, Float32 *lsp ) { Float32 dist, dist_min1, dist_min2, dist_th; Word32 i; /* * Check for a resonance: * Find minimum distance between lsp[i] and lsp[i+1] */ dist_min1 = FLT_MAX; for ( i = 3; i < 8; i++ ) { dist = lsp[i] - lsp[i + 1]; if ( dist < dist_min1 ) { dist_min1 = dist; } } dist_min2 = FLT_MAX; for ( i = 1; i < 3; i++ ) { dist = lsp[i] - lsp[i + 1]; if ( dist < dist_min2 ) { dist_min2 = dist; } } if ( lsp[1] > 0.98F ) { dist_th = 0.018F; } else if ( lsp[1] > 0.93F ) { dist_th = 0.024F; } else { dist_th = 0.034F; } if ( ( dist_min1 < 0.046F ) || ( dist_min2 < dist_th ) ) { *count += 1; } else { *count = 0; } /* Need 12 consecutive frames to set the flag */ if ( *count >= 12 ) { *count = 12; return 1; } else { return 0; } } /* * Weight_Ai * * * Parameters: * a I: LPC coefficients [M+1] * fac I: Spectral expansion factors. [M+1] * a_exp O: Spectral expanded LPC coefficients [M+1] * * Function: * Spectral expansion of LP coefficients * * Returns: * void */ static void Weight_Ai( Float32 a[], const Float32 fac[], Float32 a_exp[] ) { Word32 i; a_exp[0] = a[0]; for ( i = 1; i <= M; i++ ) { a_exp[i] = a[i] * fac[i - 1]; } return; } /* * Residu * * * Parameters: * a I: prediction coefficients * x I: speech signal * y O: residual signal * * Function: * Computes the LTP residual signal. * * Returns: * void */ static void Residu( Float32 a[], Float32 x[], Float32 y[] ) { Float32 s; Word32 i; for ( i = 0; i < L_SUBFR; i += 4 ) { s = x[i] * a[0]; s += x[i - 1] *a[1]; s += x[i - 2] * a[2]; s += x[i - 3] * a[3]; s += x[i - 4] * a[4]; s += x[i - 5] * a[5]; s += x[i - 6] * a[6]; s += x[i - 7] * a[7]; s += x[i - 8] * a[8]; s += x[i - 9] * a[9]; s += x[i - 10] * a[10]; y[i] = s; s = x[i + 1] *a[0]; s += x[i] * a[1]; s += x[i - 1] *a[2]; s += x[i - 2] * a[3]; s += x[i - 3] * a[4]; s += x[i - 4] * a[5]; s += x[i - 5] * a[6]; s += x[i - 6] * a[7]; s += x[i - 7] * a[8]; s += x[i - 8] * a[9]; s += x[i - 9] * a[10]; y[i + 1] = s; s = x[i + 2] * a[0]; s += x[i + 1] *a[1]; s += x[i] * a[2]; s += x[i - 1] *a[3]; s += x[i - 2] * a[4]; s += x[i - 3] * a[5]; s += x[i - 4] * a[6]; s += x[i - 5] * a[7]; s += x[i - 6] * a[8]; s += x[i - 7] * a[9]; s += x[i - 8] * a[10]; y[i + 2] = s; s = x[i + 3] * a[0]; s += x[i + 2] * a[1]; s += x[i + 1] *a[2]; s += x[i] * a[3]; s += x[i - 1] *a[4]; s += x[i - 2] * a[5]; s += x[i - 3] * a[6]; s += x[i - 4] * a[7]; s += x[i - 5] * a[8]; s += x[i - 6] * a[9]; s += x[i - 7] * a[10]; y[i + 3] = s; } return; } /* * Syn_filt * * * Parameters: * a I: prediction coefficients [M+1] * x I: input signal * y O: output signal * mem B: memory associated with this filtering * update I: 0=no update, 1=update of memory. * * Function: * Perform synthesis filtering through 1/A(z). * * Returns: * void */ static void Syn_filt( Float32 a[], Float32 x[], Float32 y[], Float32 mem[], Word16 update ) { Float64 tmp[50]; Float64 sum; Float64 *yy; Word32 i; /* Copy mem[] to yy[] */ yy = tmp; for ( i = 0; i < M; i++ ) { *yy++ = mem[i]; } /* Do the filtering. */ for ( i = 0; i < L_SUBFR; i = i + 4 ) { sum = x[i] * a[0]; sum -= a[1] * yy[ - 1]; sum -= a[2] * yy[ - 2]; sum -= a[3] * yy[ - 3]; sum -= a[4] * yy[ - 4]; sum -= a[5] * yy[ - 5]; sum -= a[6] * yy[ - 6]; sum -= a[7] * yy[ - 7]; sum -= a[8] * yy[ - 8]; sum -= a[9] * yy[ - 9]; sum -= a[10] * yy[ - 10]; *yy++ = sum; y[i] = ( Float32 )yy[ - 1]; sum = x[i + 1] *a[0]; sum -= a[1] * yy[ - 1]; sum -= a[2] * yy[ - 2]; sum -= a[3] * yy[ - 3]; sum -= a[4] * yy[ - 4]; sum -= a[5] * yy[ - 5]; sum -= a[6] * yy[ - 6]; sum -= a[7] * yy[ - 7]; sum -= a[8] * yy[ - 8]; sum -= a[9] * yy[ - 9]; sum -= a[10] * yy[ - 10]; *yy++ = sum; y[i + 1] = ( Float32 )yy[ - 1]; sum = x[i + 2] * a[0]; sum -= a[1] * yy[ - 1]; sum -= a[2] * yy[ - 2]; sum -= a[3] * yy[ - 3]; sum -= a[4] * yy[ - 4]; sum -= a[5] * yy[ - 5]; sum -= a[6] * yy[ - 6]; sum -= a[7] * yy[ - 7]; sum -= a[8] * yy[ - 8]; sum -= a[9] * yy[ - 9]; sum -= a[10] * yy[ - 10]; *yy++ = sum; y[i + 2] = ( Float32 )yy[ - 1]; sum = x[i + 3] * a[0]; sum -= a[1] * yy[ - 1]; sum -= a[2] * yy[ - 2]; sum -= a[3] * yy[ - 3]; sum -= a[4] * yy[ - 4]; sum -= a[5] * yy[ - 5]; sum -= a[6] * yy[ - 6]; sum -= a[7] * yy[ - 7]; sum -= a[8] * yy[ - 8]; sum -= a[9] * yy[ - 9]; sum -= a[10] * yy[ - 10]; *yy++ = sum; y[i + 3] = ( Float32 )yy[ - 1]; } /* Update of memory if update==1 */ if ( update != 0 ) { for ( i = 0; i < M; i++ ) { mem[i] = y[30 + i]; } } return; } /* * pre_big * * * Parameters: * mode I: AMR mode * gamma1 I: spectral exp. factor 1 * gamma1_12k2 I: spectral exp. factor 1 for modes above MR795 * gamma2 I: spectral exp. factor 2 * A_t I: A(z) unquantized, for 4 subframes * frame_offset I: frameoffset, 1st or second big_sbf * speech I: speech * mem_w B: synthesis filter memory state * wsp O: weighted speech * * Function: * Big subframe (2 subframes) preprocessing * * Open-loop pitch analysis is performed in order to simplify the pitch * analysis and confine the closed-loop pitch search to a small number of * lags around the open-loop estimated lags. * Open-loop pitch estimation is based on the weighted speech signal Sw(n) * which is obtained by filtering the input speech signal through * the weighting filter * * W(z) = A(z/g1) / A(z/g2) * * That is, in a subframe of size L, the weighted speech is given by: * * 10 10 * Sw(n) = S(n) + SUM[a(i) * g1(i) * S(n-i)] - SUM[a(i) * g2(i) * Sw(n-i)], * i=1 i=1 * n = 0, ..., L-1 * * Returns: * void */ static Word32 pre_big( enum Mode mode, const Float32 gamma1[], const Float32 gamma1_12k2[], const Float32 gamma2[], Float32 A_t[], Word16 frame_offset, Float32 speech[], Float32 mem_w[], Float32 wsp[] ) { Float32 Ap1[MP1], Ap2[MP1]; Word32 offset, i; /* A(z) with spectral expansion */ const Float32 *g1; g1 = gamma1_12k2; if ( mode <= MR795 ) { g1 = gamma1; } offset = 0; if ( frame_offset > 0 ) { offset = MP1 << 1; } /* process two subframes (which form the "big" subframe) */ for ( i = 0; i < 2; i++ ) { /* a(i) * g1(i) */ Weight_Ai( &A_t[offset], g1, Ap1 ); /* a(i) * g2(i) */ Weight_Ai( &A_t[offset], gamma2, Ap2 ); /* * 10 * S(n) + SUM[a(i) * g1(i) * S(n-i)] * i=1 */ Residu( Ap1, &speech[frame_offset], &wsp[frame_offset] ); /* * 10 10 * S(n) + SUM[a(i) * g1(i) * S(n-i)] SUM[a(i) * g2(i) * Sn(n-i)] * i=1 i=1 */ Syn_filt( Ap2, &wsp[frame_offset], &wsp[frame_offset], mem_w, 1 ); offset += MP1; frame_offset += L_SUBFR; } return 0; } /* * comp_corr * * * Parameters: * sig I: signal * L_frame I: length of frame to compute pitch * lag_max I: maximum lag * lag_min I: minimum lag * corr O: correlation of selected lag * * Function: * Calculate all correlations in a given delay range. * * Returns: * void */ static void comp_corr( Float32 sig[], Word32 L_frame, Word32 lag_max, Word32 lag_min, Float32 corr[] ) { Word32 i, j; Float32 *p, *p1; Float32 T0; for ( i = lag_max; i >= lag_min; i-- ) { p = sig; p1 = &sig[ - i]; T0 = 0.0F; for ( j = 0; j < L_frame; j = j + 40, p += 40, p1 += 40 ) { T0 += p[0] * p1[0] + p[1] * p1[1] + p[2] * p1[2] + p[3] * p1[3]; T0 += p[4] * p1[4] + p[5] * p1[5] + p[6] * p1[6] + p[7] * p1[7]; T0 += p[8] * p1[8] + p[9] * p1[9] + p[10] * p1[10] + p[11] * p1[11]; T0 += p[12] * p1[12] + p[13] * p1[13] + p[14] * p1[14] + p[15] * p1[15] ; T0 += p[16] * p1[16] + p[17] * p1[17] + p[18] * p1[18] + p[19] * p1[19] ; T0 += p[20] * p1[20] + p[21] * p1[21] + p[22] * p1[22] + p[23] * p1[23] ; T0 += p[24] * p1[24] + p[25] * p1[25] + p[26] * p1[26] + p[27] * p1[27] ; T0 += p[28] * p1[28] + p[29] * p1[29] + p[30] * p1[30] + p[31] * p1[31] ; T0 += p[32] * p1[32] + p[33] * p1[33] + p[34] * p1[34] + p[35] * p1[35] ; T0 += p[36] * p1[36] + p[37] * p1[37] + p[38] * p1[38] + p[39] * p1[39] ; } corr[ - i] = T0; } return; } /* * vad_tone_detection * * * Parameters: * st->tone B: flags indicating presence of a tone * T0 I: autocorrelation maxima * t1 I: energy * * Function: * Set tone flag if pitch gain is high. * This is used to detect signaling tones and other signals * with high pitch gain. * * Returns: * void */ #ifndef VAD2 static void vad_tone_detection( vadState *st, Float32 T0, Float32 t1 ) { if ( ( t1 > 0 ) && ( T0 > t1 * TONE_THR ) ) { st->tone = st->tone | 0x00004000; } } #endif /* * Lag_max * * * Parameters: * vadSt B: vad structure * corr I: correlation vector * sig I: signal * L_frame I: length of frame to compute pitch * lag_max I: maximum lag * lag_min I: minimum lag * cor_max O: maximum correlation * dtx I: dtx on/off * * Function: * Compute the open loop pitch lag. * * Returns: * p_max lag found */ #ifdef VAD2 static Word16 Lag_max( Float32 corr[], Float32 sig[], Word16 L_frame, Word32 lag_max, Word32 lag_min, Float32 *cor_max, Word32 dtx, Float32 *rmax, Float32 *r0 ) #else static Word16 Lag_max( vadState *vadSt, Float32 corr[], Float32 sig[], Word16 L_frame, Word32 lag_max, Word32 lag_min, Float32 *cor_max, Word32 dtx ) #endif { Float32 max, T0; Float32 *p; Word32 i, j, p_max; max = -FLT_MAX; p_max = lag_max; for ( i = lag_max, j = ( PIT_MAX - lag_max - 1 ); i >= lag_min; i--, j-- ) { if ( corr[ - i] >= max ) { max = corr[ - i]; p_max = i; } } /* compute energy for normalization */ T0 = 0.0F; p = &sig[ - p_max]; for ( i = 0; i < L_frame; i++, p++ ) { T0 += *p * *p; } if ( dtx ) { #ifdef VAD2 *rmax = max; *r0 = T0; #else /* check tone */ vad_tone_detection( vadSt, max, T0 ); #endif } if ( T0 > 0.0F ) T0 = 1.0F / ( Float32 )sqrt( T0 ); else T0 = 0.0F; /* max = max/sqrt(energy) */ max *= T0; *cor_max = max; return( ( Word16 )p_max ); } /* * hp_max * * * Parameters: * corr I: correlation vector * sig I: signal * L_frame I: length of frame to compute pitch * lag_max I: maximum lag * lag_min I: minimum lag * cor_hp_max O: max high-pass filtered correlation * * Function: * Find the maximum correlation of scal_sig[] in a given delay range. * * The correlation is given by * cor[t] = , t=lag_min,...,lag_max * The functions outputs the maximum correlation after normalization * and the corresponding lag. * * Returns: * void */ #ifndef VAD2 static void hp_max( Float32 corr[], Float32 sig[], Word32 L_frame, Word32 lag_max, Word32 lag_min, Float32 *cor_hp_max ) { Float32 T0, t1, max; Float32 *p, *p1; Word32 i; max = -FLT_MAX; T0 = 0; for ( i = lag_max - 1; i > lag_min; i-- ) { /* high-pass filtering */ T0 = ( ( corr[ - i] * 2 ) - corr[ - i-1] )-corr[ - i + 1]; T0 = ( Float32 )fabs( T0 ); if ( T0 >= max ) { max = T0; } } /* compute energy */ p = sig; p1 = &sig[0]; T0 = 0; for ( i = 0; i < L_frame; i++, p++, p1++ ) { T0 += *p * *p1; } p = sig; p1 = &sig[ - 1]; t1 = 0; for ( i = 0; i < L_frame; i++, p++, p1++ ) { t1 += *p * *p1; } /* high-pass filtering */ T0 = T0 - t1; T0 = ( Float32 )fabs( T0 ); /* max/T0 */ if ( T0 != 0 ) { *cor_hp_max = max / T0; } else { *cor_hp_max = 0; } } #endif /* * vad_tone_detection_update * * * Parameters: * st->tone B: flags indicating presence of a tone * one_lag_per_frame I: 1 open-loop lag is calculated per each frame * * Function: * Update the tone flag register. * * Returns: * void */ #ifndef VAD2 static void vad_tone_detection_update( vadState *st, Word16 one_lag_per_frame ) { /* Shift tone flags right by one bit */ st->tone = st->tone >> 1; /* * If open-loop lag is calculated only once in each frame, * do extra update and assume that the other tone flag * of the frame is one. */ if ( one_lag_per_frame != 0 ) { st->tone = st->tone >> 1; st->tone = st->tone | 0x00002000; } } #endif /* * Pitch_ol * * * Parameters: * mode I: AMR mode * vadSt B: VAD state struct * signal I: signal used to compute the open loop pitch * [[-pit_max]:[-1]] * pit_min I: minimum pitch lag * pit_max I: maximum pitch lag * L_frame I: length of frame to compute pitch * dtx I: DTX flag * idx I: frame index * * Function: * Compute the open loop pitch lag. * * Open-loop pitch analysis is performed twice per frame (each 10 ms) * to find two estimates of the pitch lag in each frame. * Open-loop pitch analysis is performed as follows. * In the first step, 3 maxima of the correlation: * * 79 * O(k) = SUM Sw(n)*Sw(n-k) * n=0 * * are found in the three ranges: * pit_min ... 2*pit_min-1 * 2*pit_min ... 4*pit_min-1 * 4*pit_min ... pit_max * * The retained maxima O(t(i)), i = 1, 2, 3, are normalized by dividing by * * SQRT[SUM[POW(Sw(n-t(i)), 2]], i = 1, 2, 3, * n * * respectively. * The normalized maxima and corresponding delays are denoted by * (M(i), t(i)), i = 1, 2, 3. The winner, Top, among the three normalized * correlations is selected by favouring the delays with the values * in the lower range. This is performed by weighting the normalized * correlations corresponding to the longer delays. The best * open-loop delay Top is determined as follows: * * Top = t(1) * M(Top) = M(1) * if M(2) > 0.85 * M(Top) * M(Top) = M(2) * Top = t(2) * end * if M(3) > 0.85 * M(Top) * M(Top) = M(3) * Top = t(3) * end * * Returns: * void */ static Word32 Pitch_ol( enum Mode mode, vadState *vadSt, Float32 signal[], Word32 pit_min, Word32 pit_max, Word16 L_frame, Word32 dtx, Word16 idx ) { Float32 corr[PIT_MAX + 1]; Float32 max1, max2, max3, p_max1, p_max2, p_max3; Float32 *corr_ptr; Word32 i, j; #ifdef VAD2 Float32 r01, r02, r03; Float32 rmax1, rmax2, rmax3; #else Float32 corr_hp_max; #endif #ifndef VAD2 if ( dtx ) { /* update tone detection */ if ( ( mode == MR475 ) || ( mode == MR515 ) ) { vad_tone_detection_update( vadSt, 1 ); } else { //fprintf(stderr, "Pitch_ol - dtx on\n"); vad_tone_detection_update( vadSt, 0 ); } } #endif corr_ptr = &corr[pit_max]; /* 79 */ /* O(k) = SUM Sw(n)*Sw(n-k) */ /* n=0 */ comp_corr( signal, L_frame, pit_max, pit_min, corr_ptr ); #ifdef VAD2 /* Find a maximum for each section. */ /* Maxima 1 */ j = pit_min << 2; p_max1 = Lag_max( corr_ptr, signal, L_frame, pit_max, j, &max1, dtx, &rmax1, &r01 ); /* Maxima 2 */ i = j - 1; j = pit_min << 1; p_max2 = Lag_max( corr_ptr, signal, L_frame, i, j, &max2, dtx, &rmax2, &r02 ); /* Maxima 3 */ i = j - 1; p_max3 = Lag_max( corr_ptr, signal, L_frame, i, pit_min, &max3, dtx, &rmax3, &r03 ); #else /* Find a maximum for each section. */ /* Maxima 1 */ j = pit_min << 2; p_max1 = Lag_max( vadSt, corr_ptr, signal, L_frame, pit_max, j, &max1, dtx ); /* Maxima 2 */ i = j - 1; j = pit_min << 1; p_max2 = Lag_max( vadSt, corr_ptr, signal, L_frame, i, j, &max2, dtx ); /* Maxima 3 */ i = j - 1; p_max3 = Lag_max( vadSt, corr_ptr, signal, L_frame, i, pit_min, &max3, dtx ); if ( dtx ) { if ( idx == 1 ) { /* calculate max high-passed filtered correlation of all lags */ hp_max( corr_ptr, signal, L_frame, pit_max, pit_min, &corr_hp_max ); /* update complex background detector */ vadSt->best_corr_hp = corr_hp_max * 0.5F; } } #endif /* The best open-loop delay */ if ( ( max1 * 0.85F ) < max2 ) { max1 = max2; p_max1 = p_max2; #ifdef VAD2 if (dtx) { rmax1 = rmax2; r01 = r02; } #endif } if ( ( max1 * 0.85F ) < max3 ) { p_max1 = p_max3; #ifdef VAD2 if (dtx) { rmax1 = rmax3; r01 = r03; } #endif } #ifdef VAD2 if (dtx) { vadSt->Rmax += rmax1; /* Save max correlation */ vadSt->R0 += r01; /* Save max energy */ } #endif return( Word32 )p_max1; } /* * Lag_max_wght * * * Parameters: * vadSt B: vad structure * corr I: correlation vector * signal I: signal * L_frame I: length of frame to compute pitch * old_lag I: old open-loop lag * cor_max O: maximum correlation * wght_flg I: weighting function flag * gain_flg O: open-loop flag * dtx I: dtx on/off * * Function: * Find the lag that has maximum correlation of signal in a given delay range. * maximum lag = 143 * minimum lag = 20 * * Returns: * p_max lag found */ static Word32 Lag_max_wght( vadState *vadSt, Float32 corr[], Float32 signal[], Word32 old_lag, Word32 *cor_max, Word32 wght_flg, Float32 *gain_flg, Word32 dtx ) { Float32 t0, t1, max; Float32 *psignal, *p1signal; const Float32 *ww, *we; Word32 i, j, p_max; ww = &corrweight[250]; we = &corrweight[266 - old_lag]; max = -FLT_MAX; p_max = PIT_MAX; /* see if the neigbouring emphasis is used */ if ( wght_flg > 0 ) { /* find maximum correlation with weighting */ for ( i = PIT_MAX; i >= PIT_MIN; i-- ) { /* Weighting of the correlation function. */ t0 = corr[ - i] * *ww--; /* Weight the neighbourhood of the old lag. */ t0 *= *we--; if ( t0 >= max ) { max = t0; p_max = i; } } } else { /* find maximum correlation with weighting */ for ( i = PIT_MAX; i >= PIT_MIN; i-- ) { /* Weighting of the correlation function. */ t0 = corr[ - i] * *ww--; if ( t0 >= max ) { max = t0; p_max = i; } } } psignal = &signal[0]; p1signal = &signal[ - p_max]; t0 = 0; t1 = 0; /* Compute energy */ for ( j = 0; j < L_FRAME_BY2; j++, psignal++, p1signal++ ) { t0 += *psignal * *p1signal; t1 += *p1signal * *p1signal; } if ( dtx ) { #ifdef VAD2 vadSt->Rmax += t0; /* Save max correlation */ vadSt->R0 += t1; /* Save max energy */ #else /* update and detect tone */ vad_tone_detection_update( vadSt, 0 ); vad_tone_detection( vadSt, t0, t1 ); #endif } /* * gain flag is set according to the open_loop gain * is t2/t1 > 0.4 ? */ *gain_flg = t0 - ( t1 * 0.4F ); *cor_max = 0; return( p_max ); } /* * gmed_n * * * Parameters: * ind I: values * n I: The number of gains * * Function: * Calculates N-point median. * * Returns: * index of the median value */ static Word32 gmed_n( Word32 ind[], Word32 n ) { Word32 i, j, ix = 0; Word32 max; Word32 medianIndex; Word32 tmp[9]; Word32 tmp2[9]; for ( i = 0; i < n; i++ ) { tmp2[i] = ind[i]; } for ( i = 0; i < n; i++ ) { max = -32767; for ( j = 0; j < n; j++ ) { if ( tmp2[j] >= max ) { max = tmp2[j]; ix = j; } } tmp2[ix] = -32768; tmp[i] = ix; } medianIndex = tmp[( n >>1 )]; return( ind[medianIndex] ); } /* * Pitch_ol_wgh * * * Parameters: * old_T0_med O: old Cl lags median * wght_flg I: weighting function flag * ada_w B: * vadSt B: VAD state struct * signal I: signal used to compute the open loop pitch * [[-pit_max]:[-1]] * old_lags I: history with old stored Cl lags * ol_gain_flg I: OL gain flag * idx I: frame index * dtx I: DTX flag * * Function: * Open-loop pitch search with weight * * Open-loop pitch analysis is performed twice per frame (every 10 ms) * for the 10.2 kbit/s mode to find two estimates of the pitch lag * in each frame. The open-loop pitch analysis is done in order to simplify * the pitch analysis and confine the closed loop pitch search to * a small number of lags around the open-loop estimated lags. * Open-loop pitch estimation is based on the weighted speech signal * which is obtained by filtering the input speech signal through * the weighting filter. * The correlation of weighted speech is determined. * The estimated pitch-lag is the delay that maximises * the weighted autocorrelation function. To enhance pitch-lag analysis * the autocorrelation function estimate is modified by a weighting window. * The weighting emphasises relevant pitch-lags, thus increasing * the likelihood of selecting the correct delay. * minimum pitch lag = 20 * maximum pitch lag = 143 * * Returns: * p_max1 open loop pitch lag */ static Word32 Pitch_ol_wgh( Word32 *old_T0_med, Word16 *wght_flg, Float32 *ada_w, vadState *vadSt, Float32 signal[], Word32 old_lags[], Float32 ol_gain_flg[], Word16 idx, Word32 dtx ) { Float32 corr[PIT_MAX + 1]; #ifndef VAD2 Float32 corr_hp_max; #endif Float32 *corrPtr; Word32 i, max1, p_max1; /* calculate all coreelations of signal, from pit_min to pit_max */ corrPtr = &corr[PIT_MAX]; comp_corr( signal, L_FRAME_BY2, PIT_MAX, PIT_MIN, corrPtr ); p_max1 = Lag_max_wght( vadSt, corrPtr, signal, *old_T0_med, &max1, *wght_flg, &ol_gain_flg[idx], dtx ); if ( ol_gain_flg[idx] > 0 ) { /* Calculate 5-point median of previous lags */ /* Shift buffer */ for ( i = 4; i > 0; i-- ) { old_lags[i] = old_lags[i - 1]; } old_lags[0] = p_max1; *old_T0_med = gmed_n( old_lags, 5 ); *ada_w = 1; } else { *old_T0_med = p_max1; *ada_w = *ada_w * 0.9F; } if ( *ada_w < 0.3 ) { *wght_flg = 0; } else { *wght_flg = 1; } #ifndef VAD2 if ( dtx ) { if ( idx == 1 ) { /* calculate max high-passed filtered correlation of all lags */ hp_max( corrPtr, signal, L_FRAME_BY2, PIT_MAX, PIT_MIN, &corr_hp_max ); /* update complex background detector */ vadSt->best_corr_hp = corr_hp_max * 0.5F; } } #endif return( p_max1 ); } /* * ol_ltp * * * Parameters: * mode I: AMR mode * vadSt B: VAD state struct * wsp I: signal used to compute the OL pitch * T_op O: open loop pitch lag * ol_gain_flg I: OL gain flag * old_T0_med O: old Cl lags median * wght_flg I: weighting function flag * ada_w B: * old_lags I: history with old stored Cl lags * ol_gain_flg I: OL gain flag * dtx I: DTX flag * idx I: frame index * * Function: * Compute the open loop pitch lag. * * Open-loop pitch analysis is performed in order to simplify * the pitch analysis and confine the closed-loop pitch search to * a small number of lags around the open-loop estimated lags. * Open-loop pitch estimation is based on the weighted speech signal Sw(n) * which is obtained by filtering the input speech signal through * the weighting filter W(z) = A(z/g1) / A(z/g2). That is, * in a subframe of size L, the weighted speech is given by: * * 10 * Sw(n) = S(n) + SUM[ a(i) * g1(i) * S(n-i) ] * i=1 * 10 * - SUM[ a(i) * g2(i) * Sw(n-i) ], n = 0, ..., L-1 * i=1 * * Returns: * void */ static void ol_ltp(enum Mode mode, vadState *vadSt, Float32 wsp[], Word32 *T_op , Float32 ol_gain_flg[], Word32 *old_T0_med, Word16 *wght_flg, Float32 *ada_w , Word32 *old_lags, Word32 dtx, Word16 idx) { if (mode != MR102) { ol_gain_flg[0] = 0; ol_gain_flg[1] = 0; } if ( (mode == MR475) || (mode == MR515) ) { *T_op = Pitch_ol(mode, vadSt, wsp, PIT_MIN, PIT_MAX, L_FRAME, dtx, idx); } else { if (mode <= MR795) { *T_op = Pitch_ol(mode, vadSt, wsp, PIT_MIN, PIT_MAX, L_FRAME_BY2, dtx, idx); } else if (mode == MR102) { *T_op = Pitch_ol_wgh(old_T0_med, wght_flg, ada_w, vadSt, wsp, old_lags, ol_gain_flg, idx, dtx); } else { *T_op = Pitch_ol(mode, vadSt, wsp, PIT_MIN_MR122, PIT_MAX, L_FRAME_BY2, dtx, idx); } } } /* * subframePreProc * * * Parameters: * mode I: AMR mode * gamma1 I: spectral exp. factor 1 * gamma1_12k2 I: spectral exp. factor 1 for EFR * gamma2 I: spectral exp. factor 2 * A I: A(z) unquantized for the 4 subframes * Aq I: A(z) quantized for the 4 subframes * speech I: speech segment * mem_err I: pointer to error signal * mem_w0 I: memory of weighting filter * zero I: pointer to zero vector * ai_zero O: history of weighted synth. filter * exc O: long term prediction residual * h1 O: impulse response * xn O: target vector for pitch search * res2 O: long term prediction residual * error O: error of LPC synthesis filter * * Function: * Subframe preprocessing * * Impulse response computation: * The impulse response, h(n), of the weighted synthesis filter * * H(z) * W(z) = A(z/g1) / ( A'(z) * A(z/g2) ) * * is computed each subframe. This impulse response is needed for * the search of adaptive and fixed codebooks. The impulse response h(n) * is computed by filtering the vector of coefficients of * the filter A(z/g1) extended by zeros through the two filters * 1/A'(z) and 1/A(z/g2). * * Target signal computation: * The target signal for adaptive codebook search is usually computed * by subtracting the zero input response of * the weighted synthesis filter H(z) * W(z) from the weighted * speech signal Sw(n). This is performed on a subframe basis. * An equivalent procedure for computing the target signal is * the filtering of the LP residual signal res(n) through * the combination of synthesis filter 1/A'(z) and * the weighting filter A(z/g1)/A(z/g2). After determining * the excitation for the subframe, the initial states of * these filters are updated by filtering the difference between * the LP residual and excitation. * * The residual signal res(n) which is needed for finding * the target vector is also used in the adaptive codebook search * to extend the past excitation buffer. This simplifies * the adaptive codebook search procedure for delays less than * the subframe size of 40. The LP residual is given by: * * 10 * res(n) = S(n) + SUM[A'(i)* S(n-i) * i=1 * * Returns: * void */ static void subframePreProc( enum Mode mode, const Float32 gamma1[], const Float32 gamma1_12k2[], const Float32 gamma2[], Float32 *A, Float32 *Aq, Float32 *speech, Float32 *mem_err, Float32 *mem_w0, Float32 *zero, Float32 ai_zero[], Float32 *exc, Float32 h1[], Float32 xn[], Float32 res2[], Float32 error[] ) { Float32 Ap1[MP1]; /* weighted LPC coefficients */ Float32 Ap2[MP1]; /* weighted LPC coefficients */ const Float32 *g1; /* mode specific pointer to gamma1 values */ g1 = gamma1; if ( ( mode == MR122 ) || ( mode == MR102 ) ) { g1 = gamma1_12k2; } /* Find the weighted LPC coefficients for the weighting filter. */ Weight_Ai( A, g1, Ap1 ); Weight_Ai( A, gamma2, Ap2 ); /* * Compute impulse response, h1[], * of weighted synthesis filter A(z/g1)/A(z/g2) */ memcpy( ai_zero, Ap1, MP1 <<2 ); Syn_filt( Aq, ai_zero, h1, zero, 0 ); Syn_filt( Ap2, h1, h1, zero, 0 ); /* * Find the target vector for pitch search: */ /* LP residual */ Residu( Aq, speech, res2 ); memcpy( exc, res2, L_SUBFR <<2 ); /* Synthesis filter */ Syn_filt( Aq, exc, error, mem_err, 0 ); Residu( Ap1, error, xn ); /* target signal xn[] */ Syn_filt( Ap2, xn, xn, mem_w0, 0 ); } /* * getRange * * * Parameters: * T0 I: integer pitch * delta_low I: search start offset * delta_range I: search range * pitmin I: minimum pitch * pitmax I: maximum pitch * T0_min I: search range minimum * T0_max I: search range maximum * * Function: * Sets range around open-loop pitch or integer pitch of last subframe * * Takes integer pitch T0 and calculates a range around it with * T0_min = T0-delta_low and T0_max = (T0-delta_low) + delta_range * T0_min and T0_max are bounded by pitmin and pitmax * * Returns: * void */ static void getRange( Word32 T0, Word16 delta_low, Word16 delta_range, Word16 pitmin, Word16 pitmax, Word32 *T0_min, Word32 *T0_max ) { *T0_min = T0 - delta_low; if ( *T0_min < pitmin ) { *T0_min = pitmin; } *T0_max = *T0_min + delta_range; if ( *T0_max > pitmax ) { *T0_max = pitmax; *T0_min = *T0_max - delta_range; } } /* * Norm_Corr * * * Parameters: * exc I: excitation buffer [L_SUBFR] * xn I: target vector [L_SUBFR] * h I: impulse response of synthesis and weighting filters * [L_SUBFR] * t_min I: interval to compute normalized correlation * t_max I: interval to compute normalized correlation * corr_norm O: Normalized correlation [wT_min-wT_max] * * Function: * Normalized correlation * * The closed-loop pitch search is performed by minimizing * the mean-square weighted error between the original and * synthesized speech. This is achieved by maximizing the term: * * 39 39 * R(k) = SUM[ X(n) * Yk(n)) ] / SQRT[ SUM[ Yk(n) * Yk(n)] ] * n=0 n=0 * * where X(n) is the target signal and Yk(n) is the past filtered * excitation at delay k (past excitation convolved with h(n) ). * The search range is limited around the open-loop pitch. * * The convolution Yk(n) is computed for the first delay t_min in * the searched range, and for the other delays in the search range * k = t_min + 1, ..., t_max, it is updated using the recursive relation: * * Yk(n) = Yk-1(n-1) + u(-k) * h(n), * * where u(n), n = -( 143 + 11 ), ..., 39, is the excitation buffer. * Note that in search stage, the samples u(n), n = 0, ..., 39, * are not known, and they are needed for pitch delays less than 40. * To simplify the search, the LP residual is copied to u(n) in order * to make the relation in above equation valid for all delays. * * Returns: * void */ static void Norm_Corr( Float32 exc[], Float32 xn[], Float32 h[], Word32 t_min, Word32 t_max, Float32 corr_norm[] ) { Float32 exc_temp[L_SUBFR]; Float32 *p_exc; Float32 corr, norm; Float32 sum; Word32 i, j, k; k = -t_min; p_exc = &exc[ - t_min]; /* compute the filtered excitation for the first delay t_min */ /* convolution Yk(n) */ for ( j = 0; j < L_SUBFR; j++ ) { sum = 0; for ( i = 0; i <= j; i++ ) { sum += p_exc[i] * h[j - i]; } exc_temp[j] = sum; } /* loop for every possible period */ for ( i = t_min; i <= t_max; i++ ) { /* 39 */ /* SQRT[ SUM[ Yk(n) * Yk(n)] ] */ /* n=0 */ norm = (Float32)Dotproduct40( exc_temp, exc_temp ); if ( norm == 0 ) norm = 1.0; else norm = ( Float32 )( 1.0 / ( sqrt( norm ) ) ); /* 39 */ /* SQRT[ SUM[ X(n) * Yk(n)] ] */ /* n=0 */ corr = (Float32)Dotproduct40( xn, exc_temp ); /* R(k) */ corr_norm[i] = corr * norm; /* modify the filtered excitation exc_tmp[] for the next iteration */ if ( i != t_max ) { k--; for ( j = L_SUBFR - 1; j > 0; j-- ) { /* Yk(n) = Yk-1(n-1) + u(-k) * h(n) */ exc_temp[j] = exc_temp[j - 1] + exc[k] * h[j]; } exc_temp[0] = exc[k]; } } } /* * Interpol_3or6 * * * Parameters: * x I: input vector * frac I: fraction (-2..2 for 3*, -3..3 for 6*) * flag3 I: if set, upsampling rate = 3 (6 otherwise) * * Function: * Interpolating the normalized correlation with 1/3 or 1/6 resolution. * * The interpolation is performed using an FIR filter b24 * based on a Hamming windowed sin(x)/x function truncated at Б23 * and padded with zeros at Б24 (b24(24) = 0). The filter has its * cut-off frequency (-3 dB) at 3 600 Hz in the over-sampled domain. * The interpolated values of R(k) for the fractions -3/6 to 3/6 * are obtained using the interpolation formula: * * 3 3 * R(k)t = SUM[ R(k-i) * b24(t+i*6) ] + SUM [ R(k+1+i) * b24(6-t+i*6) ], * i=0 i=0 * t = 0, ..., 5, * * where t = 0, ..., 5, corresponds to the fractions * 0, 1/6, 2/6, 3/6, -2/6, and -1/6, respectively. Note that it is * necessary to compute the correlation terms using a range t_min - 4, * t_max + 4, to allow for the proper interpolation. * * Returns: * s interpolated value */ static Float32 Interpol_3or6( Float32 *x, Word32 frac, Word16 flag3 ) { Float32 s; Float32 *x1, *x2; const Float32 *c1, *c2; Word32 i, k; if ( flag3 != 0 ) { /* inter_3[k] = b60[2*k] -> k' = 2*k */ frac <<= 1; } if ( frac < 0 ) { frac += UP_SAMP_MAX; x--; } x1 = &x[0]; x2 = &x[1]; c1 = &b24[frac]; c2 = &b24[UP_SAMP_MAX - frac]; s = 0; for ( i = 0, k = 0; i < L_INTER_SRCH; i++, k += UP_SAMP_MAX ) { /* R(k-i) * b24(t+i*6) */ s += x1[ - i] * c1[k]; /* R(k+1+i) * b24(6-t+i*6) */ s += x2[i] * c2[k]; } return s; } /* * searchFrac * * * Parameters: * lag B: integer pitch * frac B: start point of search - fractional pitch * last_frac I: endpoint of search * corr I: normalized correlation * flag3 I: if set, upsampling rate = 3 (6 otherwise) * * Function: * Find fractional pitch * * The function interpolates the normalized correlation at the * fractional positions around lag T0. The position at which the * interpolation function reaches its maximum is the fractional pitch. * Starting point of the search is frac, end point is last_frac. * frac is overwritten with the fractional pitch. * * Returns: * void */ static void searchFrac( Word32 *lag, Word32 *frac, Word16 last_frac, Float32 corr[], Word16 flag3 ) { Float32 max, corr_int; Word32 i; /* * Test the fractions around T0 and choose the one which maximizes * the interpolated normalized correlation. */ max = Interpol_3or6( &corr[ * lag], *frac, flag3 ); for ( i = *frac + 1; i <= last_frac; i++ ) { corr_int = Interpol_3or6( &corr[ * lag], i, flag3 ); if ( corr_int > max ) { max = corr_int; *frac = i; } } if ( flag3 == 0 ) { /* Limit the fraction value in the interval [-2,-1,0,1,2,3] */ if ( *frac == -3 ) { *frac = 3; *lag -= 1; } } else { /* limit the fraction value between -1 and 1 */ if ( *frac == -2 ) { *frac = 1; *lag -= 1; } if ( *frac == 2 ) { *frac = -1; *lag += 1; } } } /* * Enc_lag3 * * * Parameters: * T0 I: Pitch delay * T0_frac I: Fractional pitch delay * T0_prev I: Integer pitch delay of last subframe * T0_min I: minimum of search range * T0_max I: maximum of search range * delta_flag I: Flag for 1st (or 3rd) subframe * flag4 I: Flag for encoding with 4 bits * * Function: * Encoding of fractional pitch lag with 1/3 resolution. * * Returns: * index index of encoding */ static Word32 Enc_lag3( Word32 T0, Word32 T0_frac, Word32 T0_prev, Word32 T0_min , Word32 T0_max, Word16 delta_flag, Word16 flag4 ) { Word32 index, i, tmp_ind, uplag, tmp_lag; /* if 1st or 3rd subframe */ if ( delta_flag == 0 ) { /* encode pitch delay (with fraction) */ if ( T0 <= 85 ) { index = T0 * 3 - 58 + T0_frac; } else { index = T0 + 112; } } /* if second or fourth subframe */ else { if ( flag4 == 0 ) { /* 'normal' encoding: either with 5 or 6 bit resolution */ index = 3 * ( T0 - T0_min ) + 2 + T0_frac; } else { /* encoding with 4 bit resolution */ tmp_lag = T0_prev; if ( ( tmp_lag - T0_min ) > 5 ) tmp_lag = T0_min + 5; if ( ( T0_max - tmp_lag ) > 4 ) tmp_lag = T0_max - 4; uplag = T0 + T0 + T0 + T0_frac; i = tmp_lag - 2; tmp_ind = i + i + i; if ( tmp_ind >= uplag ) { index = ( T0 - tmp_lag ) + 5; } else { i = tmp_lag + 1; i = i + i + i; if ( i > uplag ) { index = ( uplag - tmp_ind ) + 3; } else { index = ( T0 - tmp_lag ) + 11; } } } /* end if (encoding with 4 bit resolution) */ } /* end if (second of fourth subframe) */ return index; } /* * Enc_lag6 * * * Parameters: * T0 I: Pitch delay * T0_frac I: Fractional pitch delay * T0_min I: minimum of search range * delta_flag I: Flag for 1st (or 3rd) subframe * * Function: * Encoding of fractional pitch lag with 1/6 resolution. * * First and third subframes: * The pitch range is divided as follows: * 17 3/6 to 94 3/6 resolution 1/6 * 95 to 143 resolution 1 * The period is encoded with 9 bits. * For the range with fractions: * index = (T-17)*6 + frac - 3; * where T=[17..94] and frac=[-2,-1,0,1,2,3] * and for the integer only range * index = (T - 95) + 463; * where T=[95..143] * Second and fourth subframes: * For the 2nd and 4th subframes a resolution of 1/6 is always used, * and the search range is relative to the lag in previous subframe. * If T0 is the lag in the previous subframe then * t_min=T0-5 and t_max=T0+4 and the range is given by * (t_min-1) 3/6 to (t_max) 3/6 * The period in the 2nd (and 4th) subframe is encoded with 6 bits: * index = (T-(t_min-1))*6 + frac - 3; * where T=[t_min-1..t_max] and frac=[-2,-1,0,1,2,3] * Note that only 61 values are used. If the decoder receives 61, 62, * or 63 as the relative pitch index, it means that a transmission * error occurred and the pitch from previous subframe should be used. * * Returns: * index index of encoding */ static Word32 Enc_lag6( Word32 T0, Word32 T0_frac, Word32 T0_min, Word16 delta_flag ) { Word32 index; /* if 1st or 3rd subframe */ if ( delta_flag == 0 ) { /* encode pitch delay (with fraction) */ if ( T0 <= 94 ) { /* index = (t-17)*6 + frac - 3 */ index = T0 * 6 - 105 + T0_frac; } else { /* index = (t - 95) + 463 */ index = T0 + 368; } } /* if second or fourth subframe */ else { /* index = (t-(t_min-1))*6 + frac - 3 */ index = 6 * ( T0 - T0_min ) + 3 + T0_frac; } return index; } /* * Pitch_fr * * * Parameters: * T0_prev_subframe B: integer pitch lag of previous sub-frame * mode I: codec mode * T_op I: open-loop pitch estimations for * the 2 big subframes [2] * exc I: excitation buffer * xn I: target vector * h I: impulse response of synthesis * and weighting filters * i_subfr I: subframe number * pit_frac O: pitch period (fractional) * resu3 O: subsample resolution 1/3 (=1) or 1/6 (=0) * ana_index O: index of encoding * * Function: * Closed-loop pitch search * * In the first and third subframes, a fractional pitch delay is used * with resolutions: 1/6 in the range [17 3/6, 94 3/6] and integers only * in the range [95, 143]. For the second and fourth subframes, * a pitch resolution of 1/6 is always used in * the range [T1 - 5 3/6, T1 + 4 /3/6], where T1 is nearest integer to * the fractional pitch lag of the previous (1st or 3rd) subframe, * bounded by 18...143. * * Closed-loop pitch analysis is performed around * the open-loop pitch estimates on a subframe basis. * In the first (and third) subframe the range TopБ3, * bounded by 18...143, is searched. For the other subframes, * closed-loop pitch analysis is performed around the integer pitch * selected in the previous subframe, as described above. * The pitch delay is encoded with 9 bits in the first and * third subframes and the relative delay of the other subframes * is encoded with 6 bits. * * The closed-loop pitch search is performed by minimizing * the mean-square weighted error between the original and * synthesized speech. This is achieved by maximizing the term: * * 39 39 * R(k) = SUM[ X(n) * Yk(n)) ] / SQRT[ SUM[ Yk(n) * Yk(n)] ] * n=0 n=0 * * where X(n) is the target signal and Yk(n) is the past filtered * excitation at delay k (past excitation convolved with h(n) ). * * Once the optimum integer pitch delay is determined, the fractions * from -3/6 to 3/6 with a step of 1/6 around that integer are tested. * The fractional pitch search is performed by interpolating * the normalized correlation R(k) and searching for its maximum. * The interpolation is performed using an FIR filter b24 * based on a Hamming windowed sin(x)/x function truncated at Б23 * and padded with zeros at Б24 (b24(24) = 0). The filter has its * cut-off frequency (-3 dB) at 3 600 Hz in the over-sampled domain. * The interpolated values of R(k) for the fractions -3/6 to 3/6 * are obtained using the interpolation formula: * * 3 3 * R(k)t = SUM[ R(k-i) * b24(t+i*6) ] + SUM [ R(k+1+i) * b24(6-t+i*6) ], * i=0 i=0 * t = 0, ..., 5, * * where t = 0, ..., 5, corresponds to the fractions * 0, 1/6, 2/6, 3/6, -2/6, and -1/6, respectively. Note that it is * necessary to compute the correlation terms using a range t_min -4, * t_max + 4, to allow for the proper interpolation. * * Returns: * lag closed-loop pitch lag */ static Word32 Pitch_fr( Word32 *T0_prev_subframe, enum Mode mode, Word32 T_op[], Float32 exc[], Float32 xn[], Float32 h[], Word16 i_subfr, Word32 *pit_frac , Word16 *resu3, Word32 *ana_index ) { Float32 corr_v[40]; Float32 max; Float32 *corr; Word32 i, t_min, t_max, T0_min, T0_max; Word32 lag, frac, tmp_lag; Word16 max_frac_lag, flag3, flag4, last_frac; Word16 delta_int_low, delta_int_range, delta_frc_low, delta_frc_range; Word16 pit_min; Word16 frame_offset; Word16 delta_search; /* set mode specific variables */ max_frac_lag = mode_dep_parm[mode].max_frac_lag; flag3 = mode_dep_parm[mode].flag3; frac = mode_dep_parm[mode].first_frac; last_frac = mode_dep_parm[mode].last_frac; delta_int_low = mode_dep_parm[mode].delta_int_low; delta_int_range = mode_dep_parm[mode].delta_int_range; delta_frc_low = mode_dep_parm[mode].delta_frc_low; delta_frc_range = mode_dep_parm[mode].delta_frc_range; pit_min = mode_dep_parm[mode].pit_min; /* decide upon full or differential search */ delta_search = 1; if ( ( i_subfr == 0 ) || ( i_subfr == L_FRAME_BY2 ) ) { /* Subframe 1 and 3 */ if ( ( ( mode != MR475 ) && ( mode != MR515 ) ) || ( i_subfr != L_FRAME_BY2 ) ) { /* * set T0_min, T0_max for full search * this is *not* done for mode MR475, MR515 in subframe 3 */ delta_search = 0; /* no differential search */ /* * calculate index into T_op which contains the open-loop * pitch estimations for the 2 big subframes */ frame_offset = 1; if ( i_subfr == 0 ) frame_offset = 0; /* * get T_op from the corresponding half frame and * set T0_min, T0_max */ getRange(T_op[frame_offset], delta_int_low, delta_int_range, pit_min, PIT_MAX, &T0_min, &T0_max ); } else { /* mode MR475, MR515 and 3. Subframe: delta search as well */ getRange(*T0_prev_subframe, delta_frc_low, delta_frc_range, pit_min, PIT_MAX, &T0_min, &T0_max); } } else { /* * for Subframe 2 and 4 * get range around T0 of previous subframe for delta search */ getRange(*T0_prev_subframe, delta_frc_low, delta_frc_range, pit_min, PIT_MAX, &T0_min, &T0_max); } /* Find interval to compute normalized correlation */ t_min = T0_min - L_INTER_SRCH; t_max = T0_max + L_INTER_SRCH; corr = &corr_v[ - t_min]; /* Compute normalized correlation between target and filtered excitation */ Norm_Corr(exc, xn, h, t_min, t_max, corr); /* Find integer pitch */ max = corr[T0_min]; lag = T0_min; for (i = T0_min + 1; i <= T0_max; i++) { if (corr[i] >= max) { max = corr[i]; lag = i; } } /* Find fractional pitch */ if ( ( delta_search == 0 ) && ( lag > max_frac_lag ) ) { /* * full search and integer pitch greater than max_frac_lag * fractional search is not needed, set fractional to zero */ frac = 0; } else { /* * if differential search AND mode MR475 OR MR515 OR MR59 OR MR67 * then search fractional with 4 bits resolution */ if ((delta_search != 0) && ( ( mode == MR475 ) || ( mode == MR515 ) || ( mode == MR59 ) || ( mode == MR67 ) ) ) { /* * modify frac or last_frac according to position of last * integer pitch: either search around integer pitch, * or only on left or right side */ tmp_lag = *T0_prev_subframe; if ( ( tmp_lag - T0_min ) > 5 ) tmp_lag = T0_min + 5; if ( ( T0_max - tmp_lag ) > 4 ) tmp_lag = T0_max - 4; if ( ( lag == tmp_lag ) || ( lag == ( tmp_lag - 1 ) ) ) { /* normal search in fractions around T0 */ searchFrac( &lag, &frac, last_frac, corr, flag3 ); } else if ( lag == ( tmp_lag - 2 ) ) { /* limit search around T0 to the right side */ frac = 0; searchFrac( &lag, &frac, last_frac, corr, flag3 ); } else if ( lag == ( tmp_lag + 1 ) ) { /* limit search around T0 to the left side */ last_frac = 0; searchFrac( &lag, &frac, last_frac, corr, flag3 ); } else { /* no fractional search */ frac = 0; } } else /* test the fractions around T0 */ searchFrac( &lag, &frac, last_frac, corr, flag3 ); } /* * encode pitch */ if ( flag3 != 0 ) { /* * flag4 indicates encoding with 4 bit resolution; * this is needed for mode MR475, MR515 and MR59 */ flag4 = 0; if ( ( mode == MR475 ) || ( mode == MR515 ) || ( mode == MR59 ) || ( mode == MR67 ) ) { flag4 = 1; } /* encode with 1/3 subsample resolution */ *ana_index = Enc_lag3(lag, frac, *T0_prev_subframe, T0_min, T0_max, delta_search, flag4); } else { /* encode with 1/6 subsample resolution */ *ana_index = Enc_lag6(lag, frac, T0_min, delta_search); } /* * update state variables */ *T0_prev_subframe = lag; /* * update output variables */ *resu3 = flag3; *pit_frac = frac; return( lag ); } /* * Pred_lt_3or6 * * * Parameters: * exc B: excitation buffer * T0 I: integer pitch lag * frac I: fraction of lag * flag3 I: if set, upsampling rate = 3 (6 otherwise) * * Function: * Compute the result of long term prediction with fractional * interpolation of resolution 1/3 or 1/6. (Interpolated past excitation). * * Once the fractional pitch lag is determined, * the adaptive codebook vector v(n) is computed by interpolating * the past excitation signal u(n) at the given integer delay k * and phase (fraction) : * * 9 9 * v(n) = SUM[ u(n-k-i) * b60(t+i*6) ] + SUM[ u(n-k+1+i) * b60(6-t+i*6) ], * i=0 i=0 * n = 0, ...,39, t = 0, ...,5. * * The interpolation filter b60 is based on a Hamming windowed sin(x)/x * function truncated at Б 59 and padded with zeros at Б 60 (b60(60)=0)). * The filter has a cut-off frequency (-3 dB) at 3 600 Hz in * the over-sampled domain. * * Returns: * void */ static void Pred_lt_3or6( Float32 exc[], Word32 T0, Word32 frac, Word16 flag3 ) { Float32 s; Float32 *x0, *x1, *x2; const Float32 *c1, *c2; Word32 j; x0 = &exc[ - T0]; frac = -frac; if ( flag3 != 0 ) { /* inter_3l[k] = b60[2*k] -> k' = 2*k */ frac <<= 1; } if ( frac < 0 ) { frac += UP_SAMP_MAX; x0--; } c1 = &b60[frac]; c2 = &b60[UP_SAMP_MAX - frac]; for ( j = 0; j < L_SUBFR; j += 4 ) { x1 = x0++; x2 = x0; s = x1[0] * c1[0] + x2[0] * c2[0]; s += x1[ - 1] *c1[6] + x2[1] * c2[6]; s += x1[ - 2] * c1[12] + x2[2] * c2[12]; s += x1[ - 3] * c1[18] + x2[3] * c2[18]; s += x1[ - 4] * c1[24] + x2[4] * c2[24]; s += x1[ - 5] * c1[30] + x2[5] * c2[30]; s += x1[ - 6] * c1[36] + x2[6] * c2[36]; s += x1[ - 7] * c1[42] + x2[7] * c2[42]; s += x1[ - 8] * c1[48] + x2[8] * c2[48]; s += x1[ - 9] * c1[54] + x2[9] * c2[54]; exc[j] = ( Float32 )floor(s + 0.5F); x1 = x0++; x2 = x0; s = x1[0] * c1[0] + x2[0] * c2[0]; s += x1[ - 1] *c1[6] + x2[1] * c2[6]; s += x1[ - 2] * c1[12] + x2[2] * c2[12]; s += x1[ - 3] * c1[18] + x2[3] * c2[18]; s += x1[ - 4] * c1[24] + x2[4] * c2[24]; s += x1[ - 5] * c1[30] + x2[5] * c2[30]; s += x1[ - 6] * c1[36] + x2[6] * c2[36]; s += x1[ - 7] * c1[42] + x2[7] * c2[42]; s += x1[ - 8] * c1[48] + x2[8] * c2[48]; s += x1[ - 9] * c1[54] + x2[9] * c2[54]; exc[j + 1] = ( Float32 )floor(s + 0.5F); x1 = x0++; x2 = x0; s = x1[0] * c1[0] + x2[0] * c2[0]; s += x1[ - 1] *c1[6] + x2[1] * c2[6]; s += x1[ - 2] * c1[12] + x2[2] * c2[12]; s += x1[ - 3] * c1[18] + x2[3] * c2[18]; s += x1[ - 4] * c1[24] + x2[4] * c2[24]; s += x1[ - 5] * c1[30] + x2[5] * c2[30]; s += x1[ - 6] * c1[36] + x2[6] * c2[36]; s += x1[ - 7] * c1[42] + x2[7] * c2[42]; s += x1[ - 8] * c1[48] + x2[8] * c2[48]; s += x1[ - 9] * c1[54] + x2[9] * c2[54]; exc[j + 2] = ( Float32 )floor(s + 0.5F); x1 = x0++; x2 = x0; s = x1[0] * c1[0] + x2[0] * c2[0]; s += x1[ - 1] *c1[6] + x2[1] * c2[6]; s += x1[ - 2] * c1[12] + x2[2] * c2[12]; s += x1[ - 3] * c1[18] + x2[3] * c2[18]; s += x1[ - 4] * c1[24] + x2[4] * c2[24]; s += x1[ - 5] * c1[30] + x2[5] * c2[30]; s += x1[ - 6] * c1[36] + x2[6] * c2[36]; s += x1[ - 7] * c1[42] + x2[7] * c2[42]; s += x1[ - 8] * c1[48] + x2[8] * c2[48]; s += x1[ - 9] * c1[54] + x2[9] * c2[54]; exc[j + 3] = ( Float32 )floor(s + 0.5F); } return; } static void Pred_lt_3or6_fixed( Word32 exc[], Word32 T0, Word32 frac, Word32 flag3 ) { Word32 s, i; Word32 *x0, *x1, *x2; const Word32 *c1, *c2; x0 = &exc[ - T0]; frac = -frac; if ( flag3 != 0 ) { frac <<= 1; /* inter_3l[k] = inter6[2*k] -> k' = 2*k */ } if ( frac < 0 ) { frac += 6; x0--; } c1 = &inter6[frac]; c2 = &inter6[6 - frac]; for ( i = 0; i < 40; i++ ) { x1 = x0++; x2 = x0; s = x1[0] * c1[0]; s += x1[ - 1] * c1[6]; s += x1[ - 2] * c1[12]; s += x1[ - 3] * c1[18]; s += x1[ - 4] * c1[24]; s += x1[ - 5] * c1[30]; s += x1[ - 6] * c1[36]; s += x1[ - 7] * c1[42]; s += x1[ - 8] * c1[48]; s += x1[ - 9] * c1[54]; s += x2[0] * c2[0]; s += x2[1] * c2[6]; s += x2[2] * c2[12]; s += x2[3] * c2[18]; s += x2[4] * c2[24]; s += x2[5] * c2[30]; s += x2[6] * c2[36]; s += x2[7] * c2[42]; s += x2[8] * c2[48]; s += x2[9] * c2[54]; exc[i] = ( s + 0x4000 ) >> 15; } } /* * G_pitch * * * Parameters: * xn I: Pitch target * y1 I: Filtered adaptive codebook * gCoeff O: Correlations need for gain quantization * * Function: * Compute the pitch (adaptive codebook) gain. * * The adaptive codebook gain is given by * * g = / * * where x[] is the target vector, y[] is the filtered adaptive * codevector, and <> denotes dot product. * * Returns: * gain gain saturated to 1.2 */ static Float32 G_pitch( Float32 xn[], Float32 y1[], Float32 gCoeff[] ) { Float32 gain, sum; /* Compute scalar product */ sum = (Float32)Dotproduct40( y1, y1 ); /* Avoid case of all zeros */ sum += 0.01F; gCoeff[0] = sum; /* Compute scalar product */ sum = (Float32)Dotproduct40( xn, y1 ); gCoeff[1] = sum; /* compute gain = xy/yy */ gain = ( Float32 )( gCoeff[1] / gCoeff[0] ); /* if(gain >1.2) gain = 1.2 */ if ( gain < 0.0 ) gain = 0.0F; if ( gain > 1.2 ) gain = 1.2F; return( gain ); } /* * check_gp_clipping * * * Parameters: * gp I: old pitch gains * g_pitch I: pitch gain * * Function: * Verify that the sum of the last (N_FRAME+1) pitch gains is under * a certain threshold. * * Returns: * True or false */ static Word16 check_gp_clipping( Float32 *gp, Float32 g_pitch ) { Float32 sum; Word32 i; sum = g_pitch; for ( i = 0; i < N_FRAME; i++ ) { sum += gp[i]; } if ( sum > 7.6F /*FGP_CLIP*/ ) { return 1; } else { return 0; } } /* * q_gain_pitch * * * Parameters: * mode I: codec mode * gp_limit I: pitch gain limit * gain B: Pitch gain (unquant/quant) * gain_cand O: pitch gain candidates (3), MR795 only * gain_cind O: pitch gain cand. indices (3),MR795 only * * Function: * Closed-loop pitch search * * Returns: * index index of quantization */ static Word16 q_gain_pitch( enum Mode mode, Float32 gp_limit, Float32 *gain, Float32 gain_cand[], Word32 gain_cind[] ) { Float32 err_min, err; Word32 i, index; err_min = ( Float32 )fabs(*gain - qua_gain_pitch[0]); index = 0; for (i = 1; i < NB_QUA_PITCH; i++) { if (qua_gain_pitch[i] <= gp_limit) { err = (Float32)fabs(*gain - qua_gain_pitch[i]); if (err < err_min) { err_min = err; index = i; } } } if (mode == MR795) { /* * in MR795 mode, compute three gain_pit candidates around the index * found in the quantization loop: the index found and the two direct * neighbours, except for the extreme cases (i=0 or i=NB_QUA_PITCH-1), * where the direct neighbour and the neighbour to that is used. */ Word32 ii; if (index == 0) { ii = index; } else { ii = index - 1; if (index == (NB_QUA_PITCH - 1) || (qua_gain_pitch[index + 1] > gp_limit ) ) { ii = index - 2; } } /* store candidate indices and values */ for (i = 0; i < 3; i++) { gain_cind[i] = ii; gain_cand[i] = qua_gain_pitch[ii]; ii++; } *gain = qua_gain_pitch[index]; } else { /* return the index and gain pitch found */ *gain = qua_gain_pitch_MR122[index]; } return(Word16)index; } /* * cl_ltp * * * Parameters: * T0_prev_subframe B: Integer pitch lag of previous sub-frame * gp I: Gain history * mode I: Coder mode * frame_offset I: Offset to subframe * T_op I: Open loop pitch lags * h1 I: Impulse response vector * exc B: Excitation vector * res2 B: Long term prediction residual * xn I: Target vector for pitch search * lsp_flag I: LSP resonance flag * xn2 O: Target vector for codebook search * y1 O: Filtered adaptive excitation * T0 O: Pitch delay (integer part) * T0_frac O: Pitch delay (fractional part) * gain_pit O: Pitch gain * gCoeff[] O: Correlations between xn, y1, & y2 * anap O: Analysis parameters * gp_limit O: pitch gain limit * * Function: * Closed-loop ltp search * * Adaptive codebook search is performed on a subframe basis. * It consists of performing closed-loop pitch search, and then computing * the adaptive codevector by interpolating the past excitation at * the selected fractional pitch lag. * The adaptive codebook parameters (or pitch parameters) are * the delay and gain of the pitch filter. In the adaptive codebook approach * for implementing the pitch filter, the excitation is repeated for delays * less than the subframe length. In the search stage, the excitation is * extended by the LP residual to simplify the closed-loop search. * * Returns: * void */ static void cl_ltp( Word32 *T0_prev_subframe, Float32 *gp, enum Mode mode, Word16 frame_offset, Word32 T_op[], Float32 *h1, Float32 *exc, Float32 res2[], Float32 xn[], Word16 lsp_flag, Float32 xn2[], Float32 y1[], Word32 *T0, Word32 *T0_frac, Float32 *gain_pit, Float32 gCoeff[], Word16 **anap, Float32 *gp_limit ) { Float32 s; Word32 i, n; Word16 gpc_flag, resu3; /* flag for upsample resolution */ Word32 exc_tmp[314]; Word32 *exc_tmp_p; exc_tmp_p = exc_tmp + PIT_MAX + L_INTERPOL; /* Closed-loop fractional pitch search */ *T0 = Pitch_fr(T0_prev_subframe, mode, T_op, exc, xn, h1, frame_offset, T0_frac, &resu3, &i ); *(*anap)++ = (Word16)i; /* * Compute the adaptive codebook vector * using fixed point. This is required * to maintain encoder/decoder excitation * syncronisation */ for (i = -(PIT_MAX + L_INTERPOL); i < 40; i++) exc_tmp_p[i] = (Word32)exc[i]; Pred_lt_3or6_fixed( exc_tmp_p, *T0, *T0_frac, resu3 ); for (i = -(PIT_MAX + L_INTERPOL); i < 40; i++) exc[i] = (Float32)exc_tmp_p[i]; /* * Convolve to get filtered adaptive codebook vector * y[n] = sum_{i=0}^{n} x[i] h[n-i], n=0,...,L-1 */ for ( n = 0; n < L_SUBFR; n++ ) { s = 0; for ( i = 0; i <= n; i++ ) { s += exc[i] * h1[n - i]; } y1[n] = s; } /* The adaptive codebook gain */ *gain_pit = G_pitch( xn, y1, gCoeff ); /* check if the pitch gain should be limit due to resonance in LPC filter */ gpc_flag = 0; *gp_limit = 2.0F; if ((lsp_flag != 0 ) && (*gain_pit > 0.95F)) { gpc_flag = check_gp_clipping( gp, *gain_pit ); } /* * special for the MR475, MR515 mode; limit the gain to 0.85 to * cope with bit errors in the decoder in a better way. */ if ((mode == MR475) || (mode == MR515)) { if ( *gain_pit > 0.85 ) { *gain_pit = 0.85F; } if ( gpc_flag != 0 ) *gp_limit = GP_CLIP; } else { if (gpc_flag != 0) { *gp_limit = GP_CLIP; *gain_pit = GP_CLIP; } /* * 12k2 gain_pit is quantized here and not in gainQuant. */ if (mode == MR122) { *(*anap )++ = q_gain_pitch(MR122, *gp_limit, gain_pit, NULL, NULL); } } /* * Update target vector for codebook search * Find LTP residual */ for (i = 0; i < L_SUBFR; i++) { xn2[i] = xn[i] - y1[i] * *gain_pit; res2[i] = res2[i] - exc[i] * *gain_pit; } } /* * DotProduct * * * Parameters: * x I: first input * y I: second input * len I: length of product * * Function: * Computes dot product * * Returns: * acc dot product */ static Float32 DotProduct( Float32 *x, Float32 *y, Word32 len ) { Word32 i; Float32 acc; acc = 0.0F; for ( i = 0; i < len; i++ ) acc += x[i] * y[i]; return( acc ); } /* * cor_h_x * * * Parameters: * h I: impulse response of weighted synthesis filter * x I: target * dn O: correlation between target and impulse response * * Function: * Computes correlation between target signal and impulse response. * * Returns: * void */ static void cor_h_x( Float32 h[], Float32 x[], Float32 dn[] ) { Word32 i; dn[0] = (Float32)Dotproduct40( h, x ); for ( i = 1; i < L_CODE; i++ ) dn[i] = (Float32)DotProduct( h, &x[i], L_CODE - i ); } /* * set_sign * * * Parameters: * dn B: correlation between target and h[] * sign O: sign of dn[] * dn2 O: maximum of correlation in each track * n I: # of maximum correlations in dn2[] * * Function: * Builds sign[] vector. * * Returns: * void */ static void set_sign( Float32 dn[], Float32 sign[], Float32 dn2[], Word16 n ) { Float32 val, min; Word32 i, j, k, pos = 0; /* set sign according to dn[] */ for ( i = 0; i < L_CODE; i++ ) { val = dn[i]; if ( val >= 0 ) { sign[i] = 1.0F; } else { sign[i] = -1.0F; val = -val; } /* modify dn[] according to the fixed sign */ dn[i] = val; dn2[i] = val; } /* keep 8-n maximum positions/8 of each track and store it in dn2[] */ for ( i = 0; i < NB_TRACK; i++ ) { for ( k = 0; k < ( 8 - n ); k++ ) { min = FLT_MAX; for ( j = i; j < L_CODE; j += STEP ) { if ( dn2[j] >= 0 ) { val = dn2[j] - min; if ( val < 0 ) { min = dn2[j]; pos = j; } } } dn2[pos] = -1.0F; } } return; } /* * cor_h * * * Parameters: * h I: h[] * sign I: sign information * rr O: correlations * * Function: * Computes correlations of h[] needed for the codebook search, * and includes the sign information into the correlations. * * Returns: * void */ static void cor_h( Float32 h[], Float32 sign[], Float32 rr[][L_CODE] ) { Float32 sum; Float32 *prr, *ph, *ph_max; Float32 *rrj, *rri, *signi, *signj; Word32 ii, total_loops, four_loops; sum = 0.0F; /* Compute diagonal matrix of autocorrelation of h */ rr[0][0] = (Float32)Dotproduct40( h, h ); prr = &rr[39][39]; ph = &h[0]; ph_max = ph + 39; /* * speed optimization of code: * for (k=0; k= 0; total_loops-- ) { rrj = rri = &rr[39][39]; rrj -= ii; rri = ( rri - 40 * ii ); signi = signj = &sign[39]; signi -= ii; sum = 0.0F; ph = &h[0]; for ( four_loops = 0; four_loops < total_loops; four_loops++ ) { sum += *ph * *( ph + ii ); ph++; *rri = *rrj = sum * *signi * *signj; rri -= 41; rrj -= 41; signi--; signj--; sum += *ph * *( ph + ii ); ph++; *rri = *rrj = sum * *signi * *signj; rri -= 41; rrj -= 41; signi--; signj--; sum += *ph * *( ph + ii ); ph++; *rri = *rrj = sum * *signi * *signj; rri -= 41; rrj -= 41; signi--; signj--; sum += *ph * *( ph + ii ); ph++; *rri = *rrj = sum * *signi * *signj; rri -= 41; rrj -= 41; signi--; signj--; } sum += *ph * *( ph + ii ); ph++; *rri = *rrj = sum * *signi * *signj; rri -= 41; rrj -= 41; signi--; signj--; sum += *ph * *( ph + ii ); ph++; *rri = *rrj = sum * *signi * *signj; rri -= 41; rrj -= 41; signi--; signj--; sum += *ph * *( ph + ii ); *rri = *rrj = sum * *signi * *signj; ii++; rrj = rri = &rr[39][39]; rrj -= ii; rri = ( rri - 40 * ii ); signi = signj = &sign[39]; signi -= ii; sum = 0.0F; ph = &h[0]; for ( four_loops = 0; four_loops < total_loops; four_loops++ ) { sum += *ph * *( ph + ii ); ph++; *rri = *rrj = sum * *signi * *signj; rri -= 41; rrj -= 41; signi--; signj--; sum += *ph * *( ph + ii ); ph++; *rri = *rrj = sum * *signi * *signj; rri -= 41; rrj -= 41; signi--; signj--; sum += *ph * *( ph + ii ); ph++; *rri = *rrj = sum * *signi * *signj; rri -= 41; rrj -= 41; signi--; signj--; sum += *ph * *( ph + ii ); ph++; *rri = *rrj = sum * *signi * *signj; rri -= 41; rrj -= 41; signi--; signj--; } sum += *ph * *( ph + ii ); ph++; *rri = *rrj = sum * *signi * *signj; rri -= 41; rrj -= 41; signi--; signj--; sum += *ph * *( ph + ii ); *rri = *rrj = sum * *signi * *signj; ii++; rrj = rri = &rr[39][39]; rrj -= ii; rri = ( rri - 40 * ii ); signi = signj = &sign[39]; signi -= ii; sum = 0.0F; ph = &h[0]; for ( four_loops = 0; four_loops < total_loops; four_loops++ ) { sum += *ph * *( ph + ii ); ph++; *rri = *rrj = sum * *signi * *signj; rri -= 41; rrj -= 41; signi--; signj--; sum += *ph * *( ph + ii ); ph++; *rri = *rrj = sum * *signi * *signj; rri -= 41; rrj -= 41; signi--; signj--; sum += *ph * *( ph + ii ); ph++; *rri = *rrj = sum * *signi * *signj; rri -= 41; rrj -= 41; signi--; signj--; sum += *ph * *( ph + ii ); ph++; *rri = *rrj = sum * *signi * *signj; rri -= 41; rrj -= 41; signi--; signj--; } sum += *ph * *( ph + ii ); *rri = *rrj = sum * *signi * *signj; ii++; rrj = rri = &rr[39][39]; rrj -= ii; rri = ( rri - 40 * ii ); signi = signj = &sign[39]; signi -= ii; sum = 0.0F; ph = &h[0]; for ( four_loops = 0; four_loops < total_loops; four_loops++ ) { sum += *ph * *( ph + ii ); ph++; *rri = *rrj = sum * ( *signi ) * ( *signj ); rri -= 41; rrj -= 41; signi--; signj--; sum += *ph * *( ph + ii ); ph++; *rri = *rrj = sum * *signi * *signj; rri -= 41; rrj -= 41; signi--; signj--; sum += *ph * *( ph + ii ); ph++; *rri = *rrj = sum * *signi * *signj; rri -= 41; rrj -= 41; signi--; signj--; sum += *ph * *( ph + ii ); ph++; *rri = *rrj = sum * *signi * *signj; rri -= 41; rrj -= 41; signi--; signj--; } ii++; } return; } /* * search_2i40_9bits * * * Parameters: * subNr I: subframe number * dn I: correlation between target and h[] * rr I: matrix of autocorrelation * codvec O: algebraic codebook vector * * Function: * Search the best codevector; determine positions of the 2 pulses * in the 40-sample frame. * * First subframe: * first i0 : 0, 5, 10, 15, 20, 25, 30, 35. * i1 : 2, 7, 12, 17, 22, 27, 32, 37. * second i0 : 1, 6, 11, 16, 21, 26, 31, 36. * i1 : 3, 8, 13, 18, 23, 28, 33, 38. * * Second subframe: * first i0 : 0, 5, 10, 15, 20, 25, 30, 35. * i1 : 3, 8, 13, 18, 23, 28, 33, 38. * second i0 : 2, 7, 12, 17, 22, 27, 32, 37. * i1 : 4, 9, 14, 19, 24, 29, 34, 39. * * Third subframe: * first i0 : 0, 5, 10, 15, 20, 25, 30, 35. * i1 : 2, 7, 12, 17, 22, 27, 32, 37. * second i0 : 1, 6, 11, 16, 21, 26, 31, 36. * i1 : 4, 9, 14, 19, 24, 29, 34, 39. * * Fourth subframe: * first i0 : 0, 5, 10, 15, 20, 25, 30, 35. * i1 : 3, 8, 13, 18, 23, 28, 33, 38. * second i0 : 1, 6, 11, 16, 21, 26, 31, 36. * i1 : 4, 9, 14, 19, 24, 29, 34, 39. * * Returns: * void */ static void search_2i40_9bits( Word16 subNr, Float32 dn[], Float32 rr[][L_CODE], Word32 codvec[] ) { Float32 ps0, ps1, psk, alp, alp0, alp1, alpk, sq, sq1; Word32 i0, i1, ix, i; Word16 ipos[2]; Word16 track1; psk = -1; alpk = 1; for ( i = 0; i < 2; i++ ) { codvec[i] = i; } /* main loop: try 2x4 tracks */ for ( track1 = 0; track1 < 2; track1++ ) { ipos[0] = startPos[( subNr << 1 ) + ( track1 << 3 )]; ipos[1] = startPos[( subNr << 1 ) + 1 + ( track1 << 3 )]; /* i0 loop: try 8 positions */ for ( i0 = ipos[0]; i0 < L_CODE; i0 += STEP ) { ps0 = dn[i0]; alp0 = rr[i0][i0]; /* i1 loop: 8 positions */ sq = -1; alp = 1; ix = ipos[1]; for ( i1 = ipos[1]; i1 < L_CODE; i1 += STEP ) { ps1 = ps0 + dn[i1]; alp1 = alp0 + rr[i1][i1] + 2.0F * rr[i0][i1]; sq1 = ps1 * ps1; if ( ( alp * sq1 ) > ( sq * alp1 ) ) { sq = sq1; alp = alp1; ix = i1; } } /* memorise codevector if this one is better than the last one */ if ( ( alpk * sq ) > ( psk * alp ) ) { psk = sq; alpk = alp; codvec[0] = i0; codvec[1] = ix; } } } return; } /* * build_code_2i40_9bits (4.75 & 5.15) * * * Parameters: * subNr I: subframe number * codvec I: position of pulses * dn_sign I: sign of pulses * cod O: algebraic codebook vector * h I: impulse response of weighted synthesis filter * y I: filtered innovative code * anap O: analysis parameters * * Function: * Builds the codeword, the filtered codeword and index of the * codevector, based on the signs and positions of 2 pulses. * * Returns: * void */ static void build_code_2i40_9bits( Word16 subNr, Word32 codvec[], Float32 dn_sign[], Float32 cod[], Float32 h[], Float32 y[], Word16 *anap ) { Float32 s; Float32 *p0, *p1; Word32 _sign[2]; Word32 i, j, k, track, index, indx = 0, rsign = 0; Word8 first, *pt; pt = &trackTable[subNr + ( subNr << 2 )]; memset( cod, 0, 160 ); for ( k = 0; k < 2; k++ ) { /* read pulse position */ i = codvec[k]; /* read sign */ j = ( Word32 )dn_sign[i]; /* index = pos/5 */ index = i / 5; /* track = pos%5 */ track = i % 5; first = pt[track]; if ( first == 0 ) { if ( k == 0 ) { /* position of 1st pulse */ track = 0; } else { track = 1; /* position of 2nd pulse */ index <<= 3; } } else { if ( k == 0 ) { track = 0; /* position of 1st pulse, subset 2 */ index += 64; } else { track = 1; index <<= 3; } } if ( j > 0 ) { cod[i] = 0.9998779296875F; _sign[k] = 1; /* sign information */ rsign = rsign + ( 1 << track ); } else { cod[i] = -1; _sign[k] = -1; } indx = indx + index; } p0 = h - codvec[0]; p1 = h - codvec[1]; for ( i = 0; i < L_CODE; i++ ) { s = *p0++ * _sign[0]; s += *p1++ * _sign[1]; y[i] = s; } anap[0] = ( Word16 )indx; anap[1] = ( Word16 )rsign; } /* * code_2i40_9bits * * * Parameters: * subNr I: subframe number * x I: target vector * h I: impulse response of weighted synthesis filter * T0 I: Pitch lag * pitch_sharp I: Last quantized pitch gain * code O: innovative codebook * y O: filtered fixed codebook excitation * anap O: analysis parameters * * Function: * Searches a 9 bit algebraic codebook containing 2 pulses * in a frame of 40 samples. * * The code length is 40, containing 2 nonzero pulses: i0...i1. * All pulses can have two possible amplitudes: +1 or -1. * Pulse i0 can have 8 possible positions, pulse i1 can have * 8 positions. Also coded is which track pair should be used, * i.e. first or second pair. Where each pair contains 2 tracks. * * Returns: * void */ static void code_2i40_9bits( Word16 subNr, Float32 x[], Float32 h[], Word32 T0, Float32 pitch_sharp, Float32 code[], Float32 y[], Word16 *anap ) { Float32 rr[L_CODE][L_CODE]; Float32 dn[L_CODE], dn_sign[L_CODE], dn2[L_CODE]; Word32 codvec[2]; Word32 i; if ( ( T0 < L_CODE ) && ( pitch_sharp != 0.0F ) ) for ( i = T0; i < L_CODE; i++ ) { h[i] += h[i - T0] * pitch_sharp; } cor_h_x( h, x, dn ); set_sign( dn, dn_sign, dn2, 8 ); cor_h( h, dn_sign, rr ); search_2i40_9bits( subNr, dn, rr, codvec ); build_code_2i40_9bits( subNr, codvec, dn_sign, code, h, y, anap ); /* * Compute innovation vector gain. * Include fixed-gain pitch contribution into code[]. */ if ( ( T0 < L_CODE ) && ( pitch_sharp != 0.0F ) ) for ( i = T0; i < L_CODE; i++ ) { code[i] += code[i - T0] * pitch_sharp; } } /* * search_2i40_11bits * * * Parameters: * dn I: correlation between target and h[] * rr I: matrix of autocorrelation * codvec O: algebraic codebook vector * * Function: * Search the best codevector; determine positions of the 2 pulses * in the 40-sample frame. * * Returns: * void */ static void search_2i40_11bits( Float32 dn[], Float32 rr[][L_CODE], Word32 codvec[] ) { Float64 alpk, alp, alp0, alp1; Float32 psk, ps0, ps1, sq, sq1; Word32 i, i0, i1, ix = 0; Word16 ipos[2]; Word16 track1, track2; psk = -1; alpk = 1; for ( i = 0; i < 2; i++ ) { codvec[i] = i; } /* * main loop: try 2x4 tracks. */ for ( track1 = 0; track1 < 2; track1++ ) { for ( track2 = 0; track2 < 4; track2++ ) { /* fix starting position */ ipos[0] = startPos1[track1]; ipos[1] = startPos2[track2]; /* * i0 loop: try 8 positions. */ for ( i0 = ipos[0]; i0 < L_CODE; i0 += STEP ) { ps0 = dn[i0]; alp0 = rr[i0][i0] * 0.25F; /* * i1 loop: 8 positions. */ sq = -1; alp = 1; ix = ipos[1]; for ( i1 = ipos[1]; i1 < L_CODE; i1 += STEP ) { ps1 = ps0 + dn[i1]; /* alp1 = alp0 + rr[i0][i1] + 1/2*rr[i1][i1]; */ alp1 = alp0 + rr[i1][i1] * 0.25F; alp1 += rr[i0][i1] * 0.5F; sq1 = ps1 * ps1; if ( ( alp * sq1 ) > ( sq * alp1 ) ) { sq = sq1; alp = alp1; ix = i1; } } /* * memorise codevector if this one is better than the last one. */ if ( ( alpk * sq ) > ( psk * alp ) ) { psk = sq; alpk = alp; codvec[0] = i0; codvec[1] = ix; } } } } return; } /* * build_code_2i40_11bits (5.90) * * * Parameters: * codvec I: position of pulses * dn_sign I: sign of pulses * cod O: algebraic codebook vector * h I: impulse response of weighted synthesis filter * y O: filtered innovative code * anap O: analysis parameters * * Function: * Builds the codeword, the filtered codeword and index of the * codevector, based on the signs and positions of 2 pulses. * * Returns: * void */ static void build_code_2i40_11bits( Word32 codvec[], Float32 dn_sign[], Float32 cod[], Float32 h[], Float32 y[], Word16 *anap ) { Float64 s; Float32 *p0, *p1; Word32 _sign[2]; Word32 i, j, k, track, index, indx = 0, rsign = 0; memset( cod, 0, 160 ); for ( k = 0; k < 2; k++ ) { i = codvec[k]; /* read pulse position */ j = ( Word16 )dn_sign[i]; /* read sign */ index = i / 5; /* index = pos/5 */ /* track = pos%5 */ track = i % 5; if ( track == 0 ) { track = 1; index = index << 6; } else if ( track == 1 ) { if ( k == 0 ) { track = 0; index = index << 1; } else { track = 1; index = ( index << 6 ) + 16; } } else if ( track == 2 ) { track = 1; index = ( index << 6 ) + 32; } else if ( track == 3 ) { track = 0; index = ( index << 1 ) + 1; } else if ( track == 4 ) { track = 1; index = ( index << 6 ) + 48; } if ( j > 0 ) { cod[i] = 0.9998779296875F; _sign[k] = 1; rsign = rsign + ( 1 << track ); } else { cod[i] = -1; _sign[k] = -1; } indx = indx + index; } p0 = h - codvec[0]; p1 = h - codvec[1]; for ( i = 0; i < L_CODE; i++ ) { s = *p0++ * _sign[0]; s += *p1++ * _sign[1]; y[i] = ( Float32 )s; } anap[0] = ( Word16 )indx; anap[1] = ( Word16 )rsign; } /* * code_2i40_11bits * * * Parameters: * x I: target vector * h I: impulse response of weighted synthesis filter * T0 I: Pitch lag * pitch_sharp I: Last quantized pitch gain * code O: innovative codebook * y O: filtered fixed codebook excitation * anap O: analysis parameters * * Function: * Searches a 11 bit algebraic codebook containing 2 pulses * in a frame of 40 samples. * * The code length is 40, containing 2 nonzero pulses: i0...i1. * All pulses can have two possible amplitudes: +1 or -1. * Pulse i0 can have 2x8=16 possible positions, pulse i1 can have * 4x8=32 positions. * * i0 : 1, 6, 11, 16, 21, 26, 31, 36. * 3, 8, 13, 18, 23, 28, 33, 38. * i1 : 0, 5, 10, 15, 20, 25, 30, 35. * 1, 6, 11, 16, 21, 26, 31, 36. * 2, 7, 12, 17, 22, 27, 32, 37. * 4, 9, 14, 19, 24, 29, 34, 39. * * Returns: * void */ static void code_2i40_11bits( Float32 x[], Float32 h[], Word32 T0, Float32 pitch_sharp, Float32 code[], Float32 y[], Word16 *anap ) { Float32 rr[L_CODE][L_CODE]; Float32 dn[L_CODE], dn2[L_CODE], dn_sign[L_CODE]; Word32 codvec[2]; Word32 i; if ( ( T0 < L_CODE ) && ( pitch_sharp != 0.0F ) ) { for ( i = T0; i < L_CODE; i++ ) { h[i] = h[i] + ( h[i - T0] * pitch_sharp ); } } cor_h_x( h, x, dn ); set_sign( dn, dn_sign, dn2, 8 ); cor_h( h, dn_sign, rr ); search_2i40_11bits( dn, rr, codvec ); build_code_2i40_11bits( codvec, dn_sign, code, h, y, anap ); /* * Compute innovation vector gain. * Include fixed-gain pitch contribution into code[]. */ if ( ( T0 < L_CODE ) && ( pitch_sharp != 0.0F ) ) { for ( i = T0; i < L_CODE; i++ ) { code[i] = code[i] + code[i - T0] * pitch_sharp; } } } /* * search_3i40 * * * Parameters: * dn I: correlation between target and h[] * dn2 I: maximum of corr. in each track * rr I: matrix of autocorrelation * codvec O: algebraic codebook vector * * Function: * Searches a 14 bit algebraic codebook containing 3 pulses in * a frame of 40 samples. * * Returns: * void */ static void search_3i40( Float32 dn[], Float32 dn2[], Float32 rr[][L_CODE], Word32 codvec[] ) { Float32 psk, ps0, ps1, sq, sq1, alpk, alp, alp0, alp1, ps = 0.0F; Float32 *rr2, *rr1, *rr0, *pdn, *pdn_max; Word32 ipos[3]; Word32 i0, i1, i2, ix, i, pos, track1, track2; psk = -1.0F; alpk = 1.0F; for ( track1 = 1; track1 < 4; track1 += 2 ) { for ( track2 = 2; track2 < 5; track2 += 2 ) { /* fix starting position */ ipos[0] = 0; ipos[1] = track1; ipos[2] = track2; /* main loop: try 3 tracks */ for ( i = 0; i < 3; i++ ) { /* i0 loop: try 8 positions */ for ( i0 = ipos[0]; i0 < L_CODE; i0 += STEP ) { if ( dn2[i0] >= 0 ) { ps0 = dn[i0]; alp0 = rr[i0][i0]; /* i1 loop: 8 positions */ sq = -1.0F; alp = 1.0F; ps = 0.0F; ix = ipos[1]; i1 = ipos[1]; rr1 = &rr[i1][i1]; rr0 = &rr[i0][i1]; pdn = &dn[i1]; pdn_max = &dn[L_CODE]; do { ps1 = ps0 + *pdn; alp1 = alp0 + *rr1 + 2.0F * *rr0; sq1 = ps1 * ps1; if ( ( alp * sq1 ) > ( sq * alp1 ) ) { sq = sq1; ps = ps1; alp = alp1; ix = ( Word16 )( pdn - dn ); } pdn += STEP; rr1 += ( 40 * STEP + STEP ); rr0 += STEP; } while ( pdn < pdn_max ); i1 = ix; /* i2 loop: 8 positions */ ps0 = ps; alp0 = alp; sq = -1.0F; alp = 1.0F; ps = 0.0F; ix = ipos[2]; i2 = ipos[2]; rr2 = &rr[i2][i2]; rr1 = &rr[i1][i2]; rr0 = &rr[i0][i2]; pdn = &dn[i2]; do { ps1 = ps0 + *pdn; alp1 = alp0 + *rr2 + 2.0F * ( *rr1 + *rr0 ); sq1 = ps1 * ps1; if ( ( alp * sq1 ) > ( sq * alp1 ) ) { sq = sq1; ps = ps1; alp = alp1; ix = ( Word16 )( pdn - dn ); } pdn += STEP; rr2 += ( 40 * STEP + STEP ); rr1 += STEP; rr0 += STEP; } while ( pdn < pdn_max ); i2 = ix; /* memorise codevector if this one is better than the last one */ if ( ( alpk * sq ) > ( psk * alp ) ) { psk = sq; alpk = alp; codvec[0] = i0; codvec[1] = i1; codvec[2] = i2; } } } /* Cyclic permutation of i0, i1 and i2 */ pos = ipos[2]; ipos[2] = ipos[1]; ipos[1] = ipos[0]; ipos[0] = pos; } } } return; } /* * build_code_3i40_14bits (6.70) * * * Parameters: * codvec I: position of pulses * dn_sign I: sign of pulses * cod O: algebraic codebook vector * h I: impulse response of weighted synthesis filter * y I: filtered innovative code * anap O: analysis parameters * * Function: * Builds the codeword, the filtered codeword and index of the * codevector, based on the signs and positions of 3 pulses. * * Returns: * void */ static void build_code_3i40_14bits( Word32 codvec[], Float32 dn_sign[], Float32 cod[], Float32 h[], Float32 y[], Word16 *anap ) { Float64 s; Float32 _sign[3]; Float32 *p0, *p1, *p2; Word32 i, j, k, track, index, indx, rsign; memset( cod, 0, 160 ); indx = 0; rsign = 0; for ( k = 0; k < 3; k++ ) { /* read pulse position */ i = codvec[k]; /* read sign */ j = ( Word16 )dn_sign[i]; /* index = pos/5 */ index = i / 5; /* track = pos%5 */ track = i % 5; if ( track == 1 ) index = index << 4; else if ( track == 2 ) { track = 2; index = index << 8; } else if ( track == 3 ) { track = 1; index = ( index << 4 ) + 8; } else if ( track == 4 ) { track = 2; index = ( index << 8 ) + 128; } if ( j > 0 ) { cod[i] = 0.9998779296875F; _sign[k] = 1.0F; rsign = rsign + ( 1 << track ); } else { cod[i] = -1.0F; _sign[k] = -1.0F; } indx = indx + index; } p0 = h - codvec[0]; p1 = h - codvec[1]; p2 = h - codvec[2]; for ( i = 0; i < L_CODE; i++ ) { s = *p0++ * _sign[0]; s += *p1++ * _sign[1]; s += *p2++ * _sign[2]; y[i] = ( Float32 )s; } anap[0] = ( Word16 )indx; anap[1] = ( Word16 )rsign; } /* * code_3i40_14bits * * * Parameters: * x I: target vector * h I: impulse response of weighted synthesis filter * T0 I: Pitch lag * pitch_sharp I: Last quantized pitch gain * code O: innovative codebook * y O: filtered fixed codebook excitation * anap O: analysis parameters * * Function: * Searches a 14 bit algebraic codebook containing 3 pulses * in a frame of 40 samples. * * The code length is 40, containing 3 nonzero pulses: i0...i2. * All pulses can have two possible amplitudes: +1 or -1. * Pulse i0 can have 8 possible positions, pulses i1 and i2 can have * 2x8=16 positions. * * i0 : 0, 5, 10, 15, 20, 25, 30, 35. * i1 : 1, 6, 11, 16, 21, 26, 31, 36. * 3, 8, 13, 18, 23, 28, 33, 38. * i2 : 2, 7, 12, 17, 22, 27, 32, 37. * 4, 9, 14, 19, 24, 29, 34, 39. * * Returns: * void */ static void code_3i40_14bits( Float32 x[], Float32 h[], Word32 T0, Float32 pitch_sharp, Float32 code[], Float32 y[], Word16 *anap ) { Float32 rr[L_CODE][L_CODE]; Float32 dn[L_CODE], dn2[L_CODE], dn_sign[L_CODE]; Word32 codvec[3]; Word32 i; if ( ( T0 < L_CODE ) && ( pitch_sharp != 0 ) ) { for ( i = T0; i < L_CODE; i++ ) { h[i] = h[i] + ( h[i - T0] * pitch_sharp ); } } cor_h_x( h, x, dn ); set_sign( dn, dn_sign, dn2, 6 ); cor_h( h, dn_sign, rr ); search_3i40( dn, dn2, rr, codvec ); /* function result */ build_code_3i40_14bits( codvec, dn_sign, code, h, y, anap ); /* * Compute innovation vector gain. * Include fixed-gain pitch contribution into code[]. */ if ( ( T0 < L_CODE ) && ( pitch_sharp != 0 ) ) { for ( i = T0; i < L_CODE; i++ ) { code[i] = code[i] + ( code[i - T0] * pitch_sharp ); } } } /* * search_4i40 * * * Parameters: * dn I: correlation between target and h[] * dn2 I: maximum of corr. in each track. * rr I: matrix of autocorrelation * codvec O: algebraic codebook vector * * Function: * Search the best codevector; determine positions of the 4 pulses * in the 40-sample frame. * * Returns: * void */ static void search_4i40( Float32 dn[], Float32 dn2[], Float32 rr[][L_CODE], Word32 codvec[] ) { Float64 alpk, alp, alp0, alp1; Float32 ps, psk, ps0, ps1, sq, sq1; Word32 ipos[4]; Word32 i0, i1, i2, i3, ix, i, pos, track; /* Default value */ psk = -1; alpk = 1; for ( i = 0; i < 4; i++ ) { codvec[i] = i; } for ( track = 3; track < 5; track++ ) { /* fix starting position */ ipos[0] = 0; ipos[1] = 1; ipos[2] = 2; ipos[3] = track; /* * main loop: try 4 tracks. */ for ( i = 0; i < 4; i++ ) { /* * i0 loop: try 4 positions (use position with max of corr.). */ for ( i0 = ipos[0]; i0 < L_CODE; i0 += STEP ) { if ( dn2[i0] >= 0 ) { ps0 = dn[i0]; alp0 = rr[i0][i0] * 0.25F; /* * i1 loop: 8 positions. */ sq = -1; alp = 1; ps = 0; ix = ipos[1]; for ( i1 = ipos[1]; i1 < L_CODE; i1 += STEP ) { ps1 = ps0 + dn[i1]; /* alp1 = alp0 + rr[i0][i1] + 1/2*rr[i1][i1]; */ alp1 = alp0 + rr[i1][i1] * 0.25F; alp1 = alp1 + rr[i0][i1] * 0.5F; sq1 = ps1 * ps1; if ( ( alp * sq1 ) > ( sq * alp1 ) ) { sq = sq1; ps = ps1; alp = alp1; ix = i1; } } i1 = ix; /* * i2 loop: 8 positions. */ ps0 = ps; alp0 = alp * 0.25F; sq = -1; alp = 1; ps = 0; ix = ipos[2]; for ( i2 = ipos[2]; i2 < L_CODE; i2 += STEP ) { ps1 = ps0 + dn[i2]; /* alp1 = alp0 + rr[i0][i2] + rr[i1][i2] + 1/2*rr[i2][i2]; */ alp1 = alp0 + rr[i2][i2] * 0.0625F; alp1 += rr[i1][i2] * 0.125F; alp1 += rr[i0][i2] * 0.125F; sq1 = ps1 * ps1; if ( ( alp * sq1 ) > ( sq * alp1 ) ) { sq = sq1; ps = ps1; alp = alp1; ix = i2; } } i2 = ix; /* * i3 loop: 8 positions */ ps0 = ps; alp0 = alp; sq = -1; alp = 1; ps = 0; ix = ipos[3]; for ( i3 = ipos[3]; i3 < L_CODE; i3 += STEP ) { ps1 = ps0 + dn[i3]; /* alp1 = alp0 + rr[i0][i3] + rr[i1][i3] + rr[i2][i3] + 1/2*rr[i3][i3]; */ alp1 = alp0 + rr[i3][i3] * 0.0625F; alp1 += rr[i2][i3] * 0.125F; alp1 += rr[i1][i3] * 0.125F; alp1 += rr[i0][i3] * 0.125F; sq1 = ps1 * ps1; if ( ( alp * sq1 ) > ( sq * alp1 ) ) { sq = sq1; ps = ps1; alp = alp1; ix = i3; } } /* * memorise codevector if this one is better than the last one. */ if ( ( alpk * sq ) > ( psk * alp ) ) { psk = sq; alpk = alp; codvec[0] = i0; codvec[1] = i1; codvec[2] = i2; codvec[3] = ix; } } } /* * Cyclic permutation of i0,i1,i2 and i3. */ pos = ipos[3]; ipos[3] = ipos[2]; ipos[2] = ipos[1]; ipos[1] = ipos[0]; ipos[0] = pos; } } return; } /* * build_code_4i40 (7.40 & 7.95) * * * Parameters: * codvec I: position of pulses * dn_sign I: sign of pulses * cod O: algebraic codebook vector * h I: impulse response of weighted synthesis filter * y O: filtered innovative code * anap O: analysis parameters * * Function: * Builds the codeword, the filtered codeword and index of the * codevector, based on the signs and positions of 4 pulses. * * Returns: * void */ static void build_code_4i40( Word32 codvec[], Float32 dn_sign[], Float32 cod[], Float32 h[], Float32 y[], Word16 *anap ) { Float64 s; Float32 *p0, *p1, *p2, *p3; Word32 _sign[4]; Word32 i, j, k, track, index, indx = 0, rsign = 0; memset( cod, 0, 160 ); for ( k = 0; k < 4; k++ ) { /* read pulse position */ i = codvec[k]; /* read sign */ j = ( Word16 )dn_sign[i]; index = i / 5; track = i % 5; index = gray[index]; if ( track == 1 ) index = index << 3; else if ( track == 2 ) { index = index << 6; } else if ( track == 3 ) { index = index << 10; } else if ( track == 4 ) { track = 3; index = ( index << 10 ) + 512; } if ( j > 0 ) { cod[i] = 0.9998779296875F; _sign[k] = 1; rsign = rsign + ( 1 << track ); } else { cod[i] = -1; _sign[k] = -1; } indx = indx + index; } p0 = h - codvec[0]; p1 = h - codvec[1]; p2 = h - codvec[2]; p3 = h - codvec[3]; for ( i = 0; i < L_CODE; i++ ) { s = *p0++ * _sign[0]; s += *p1++ * _sign[1]; s += *p2++ * _sign[2]; s += *p3++ * _sign[3]; y[i] = ( Float32 )( s ); } anap[0] = ( Word16 )indx; anap[1] = ( Word16 )rsign; } /* * code_4i40_17bits * * * Parameters: * x I: target vector * h I: impulse response of weighted synthesis filter * T0 I: Pitch lag * pitch_sharp I: Last quantized pitch gain * code O: innovative codebook * y O: filtered fixed codebook excitation * anap O: analysis parameters * * Function: * Searches a 17 bit algebraic codebook containing 4 pulses * in a frame of 40 samples. * * The code length is 40, containing 4 nonzero pulses: i0...i3. * All pulses can have two possible amplitudes: +1 or -1. * Pulse i0 to i2 can have 8 possible positions, pulse i3 can have * 2x8=16 positions. * * i0 : 0, 5, 10, 15, 20, 25, 30, 35. * i1 : 1, 6, 11, 16, 21, 26, 31, 36. * i2 : 2, 7, 12, 17, 22, 27, 32, 37. * i3 : 3, 8, 13, 18, 23, 28, 33, 38. * 4, 9, 14, 19, 24, 29, 34, 39. * * Returns: * void */ static void code_4i40_17bits( Float32 x[], Float32 h[], Word32 T0, Float32 pitch_sharp, Float32 code[], Float32 y[], Word16 *anap ) { Float32 rr[L_CODE][L_CODE]; Float32 dn[L_CODE], dn2[L_CODE], dn_sign[L_CODE]; Word32 codvec[4]; Word32 i; if ( ( T0 < L_CODE ) && ( pitch_sharp != 0 ) ) { for ( i = T0; i < L_CODE; i++ ) { h[i] = h[i] + h[i - T0] * pitch_sharp; } } cor_h_x( h, x, dn ); set_sign( dn, dn_sign, dn2, 4 ); cor_h( h, dn_sign, rr ); search_4i40( dn, dn2, rr, codvec ); build_code_4i40(codvec, dn_sign, code, h, y, anap); /* * Compute innovation vector gain. * Include fixed-gain pitch contribution into code[]. */ if ( ( T0 < L_CODE ) && ( pitch_sharp != 0 ) ) { for ( i = T0; i < L_CODE; i++ ) { code[i] = code[i] + ( code[i - T0] * pitch_sharp ); } } } /* * set_sign12k2 * * * Parameters: * dn B: correlation between target and h[] * cn I: residual after long term prediction * sign O: sign of dn[] * pos_max O: position of maximum correlation * nb_track I: number of tracks * ipos O: starting position for each pulse * step I: the step size in the tracks * * Function: * Builds sign[] vector according to "dn[]" and "cn[]", and modifies * dn[] to include the sign information (dn[i]=sign[i]*dn[i]). * Also finds the position of maximum of correlation in each track * and the starting position for each pulse. * * * cn[n] dn[n] * b(n) = ----------------------- + ----------------------- ;n = 0,..,39 * 39 39 * sqrt( SUM cn[i]*cn[i] ) sqrt( SUM dn[i]*dn[i] ) * i=0 i=0 * * sign[n] = sign(b[n]) * * d'[n] = sign[n] * d[n] * * Returns: * void */ static void set_sign12k2( Float32 dn[], Float32 cn[], Float32 sign[], Word32 pos_max[], Word16 nb_track, Word32 ipos[], Word16 step ) { Float32 b[L_CODE]; Float32 val, cor, k_cn, k_dn, max, max_of_all, sum; Word32 i, j, pos = 0; /* calculate energy for normalization of cn[] and dn[] */ sum = 0.01F; sum += (Float32)Dotproduct40( cn, cn ); k_cn = ( Float32 )( 1 / sqrt( sum ) ); sum = 0.01F; sum += (Float32)Dotproduct40( dn, dn ); k_dn = ( Float32 )( 1 / sqrt( sum ) ); for ( i = 0; i < L_CODE; i++ ) { val = dn[i]; cor = ( k_cn * cn[i] ) + ( k_dn * val ); /* sign = +1 */ sign[i] = 1; if ( cor < 0 ) { /* sign = -1 */ sign[i] = -1; cor = -cor; val = -val; } /* modify dn[] according to the fixed sign */ dn[i] = val; b[i] = cor; } max_of_all = -1; for ( i = 0; i < nb_track; i++ ) { max = -1; for ( j = i; j < L_CODE; j += step ) { cor = b[j]; val = cor - max; if ( val > 0 ) { max = cor; pos = j; } } /* store maximum correlation position in track */ pos_max[i] = pos; val = max - max_of_all; if ( val > 0 ) { /* store maximum correlation of all tracks */ max_of_all = max; /* starting position for i0 */ ipos[0] = i; } } /* Set starting position of each pulse */ pos = ipos[0]; ipos[nb_track] = pos; for ( i = 1; i < nb_track; i++ ) { pos++; if ( pos >= nb_track ) { pos = 0; } ipos[i] = pos; ipos[i + nb_track] = pos; } } /* * search_4i40 * * * Parameters: * dn I: correlation between target and h[] * rr I: matrix of autocorrelation * ipos I: starting position for each pulse * pos_max I: maximum of correlation position * codvec O: algebraic codebook vector * * Function: * Search the best codevector; determine positions of the 8 pulses * in the 40-sample frame. * * Returns: * void */ static void search_8i40( Float32 dn[], Float32 rr[][L_CODE], Word32 ipos[], Word32 pos_max[], Word32 codvec[] ) { Float32 rrv[L_CODE]; Float32 psk, ps, ps0, ps1, ps2, sq, sq2, alpk, alp, alp0, alp1, alp2; Float32 *p_r, *p_r0, *p_r1, *p_r2, *p_r3, *p_r4, *p_r5, *p_r6, *p_r7, *p_r8; Float32 *p_rrv, *p_rrv0, *p_dn, *p_dn0, *p_dn1, *p_dn_max; Word32 i0, i1, i2, i3, i4, i5, i6, i7, j, k, ia, ib, i, pos; p_dn_max = &dn[39]; /* fix i0 on maximum of correlation position */ i0 = pos_max[ipos[0]]; ia = ib = 0; ps = 0; /* i1 loop */ /* Default value */ psk = -1; alpk = 1; for ( i = 0; i < 8; i++ ) { codvec[i] = i; } p_r = &rr[i0][i0]; for ( i = 1; i < 5; i++ ) { i1 = pos_max[ipos[1]]; i2 = ipos[2]; i3 = ipos[3]; i4 = ipos[4]; i5 = ipos[5]; i6 = ipos[6]; i7 = ipos[7]; ps0 = dn[i0] + dn[i1]; alp0 = *p_r + rr[i1][i1] + 2.0F * rr[i0][i1]; /* i2 and i3 loop */ p_rrv = &rrv[i3]; p_r0 = &rr[i0][i3]; p_r1 = &rr[i1][i3]; p_r3 = &rr[i3][i3]; *p_rrv = *p_r3 + 2.0F * ( *p_r0 + *p_r1 ); *( p_rrv + 4 ) = *( p_r3 + 164 ) + 2.0F * ( *( p_r0 + 4 ) + *( p_r1 + 4 ) ); *( p_rrv + 8 ) = *( p_r3 + 328 ) + 2.0F * ( *( p_r0 + 8 ) + *( p_r1 + 8 ) ); *( p_rrv + 12 ) = *( p_r3 + 492 ) + 2.0F * ( *( p_r0 + 12 ) + *( p_r1 + 12 ) ); *( p_rrv + 16 ) = *( p_r3 + 656 ) + 2.0F * ( *( p_r0 + 16 ) + *( p_r1 + 16 ) ); *( p_rrv + 20 ) = *( p_r3 + 820 ) + 2.0F * ( *( p_r0 + 20 ) + *( p_r1 + 20 ) ); *( p_rrv + 24 ) = *( p_r3 + 984 ) + 2.0F * ( *( p_r0 + 24 ) + *( p_r1 + 24 ) ); *( p_rrv + 28 ) = *( p_r3 + 1148 ) + 2.0F * ( *( p_r0 + 28 ) + *( p_r1 + 28 ) ); *( p_rrv + 32 ) = *( p_r3 + 1312 ) + 2.0F * ( *( p_r0 + 32 ) + *( p_r1 + 32 ) ); *( p_rrv + 36 ) = *( p_r3 + 1476 ) + 2.0F * ( *( p_r0 + 36 ) + *( p_r1 + 36 ) ); sq = -1; alp = 1; ps = 0; ia = i2; ib = i3; p_rrv = rrv + i3; p_r0 = &rr[i0][i2]; p_r1 = &rr[i1][i2]; p_r2 = &rr[i2][i2]; p_r3 = &rr[i2][i3]; p_dn0 = dn + i2; p_dn1 = dn + i3; p_rrv0 = rrv + i3; do { ps1 = ps0 + *p_dn0; alp1 = alp0 + *p_r2 + 2.0F * ( *p_r0 + *p_r1 ); p_rrv = p_rrv0; p_dn = p_dn1; p_r4 = p_r3; do { ps2 = ps1 + *p_dn; sq2 = ps2 * ps2; alp2 = alp1 + *p_rrv + 2.0F * *p_r4; if ( ( alp * sq2 ) > ( sq * alp2 ) ) { sq = sq2; ps = ps2; alp = alp2; ia = p_dn0 - dn; ib = p_dn - dn; } p_rrv += 4; p_dn += 4; p_r4 += 4; } while ( p_dn < p_dn_max ); p_dn0 += 4; p_r0 += 4; p_r1 += 4; p_r2 += 164; p_r3 += 160; } while ( p_dn0 <= p_dn_max ); i2 = ia; i3 = ib; /* i4 and i5 loop */ p_rrv = rrv + i5; p_r0 = &rr[i0][i5]; p_r1 = &rr[i1][i5]; p_r2 = &rr[i2][i5]; p_r3 = &rr[i3][i5]; p_r5 = &rr[i5][i5]; *p_rrv = *p_r5 + 2.0F * ( *p_r0 + *p_r1 + *p_r2 + *p_r3 ); *( p_rrv + 4 ) = *( p_r5 + 164 ) + 2.0F * ( *( p_r0 + 4 ) + *( p_r1 + 4 ) + *( p_r2 + 4 ) + *( p_r3 + 4 ) ); *( p_rrv + 8 ) = *( p_r5 + 328 ) + 2.0F * ( *( p_r0 + 8 ) + *( p_r1 + 8 ) + *( p_r2 + 8 ) + *( p_r3 + 8 ) ); *( p_rrv + 12 ) = *( p_r5 + 492 ) + 2.0F * ( *( p_r0 + 12 ) + *( p_r1 + 12 ) + *( p_r2 + 12 ) + *( p_r3 + 12 ) ); *( p_rrv + 16 ) = *( p_r5 + 656 ) + 2.0F * ( *( p_r0 + 16 ) + *( p_r1 + 16 ) + *( p_r2 + 16 ) + *( p_r3 + 16 ) ); *( p_rrv + 20 ) = *( p_r5 + 820 ) + 2.0F * ( *( p_r0 + 20 ) + *( p_r1 + 20 ) + *( p_r2 + 20 ) + *( p_r3 + 20 ) ); *( p_rrv + 24 ) = *( p_r5 + 984 ) + 2.0F * ( *( p_r0 + 24 ) + *( p_r1 + 24 ) + *( p_r2 + 24 ) + *( p_r3 + 24 ) ); *( p_rrv + 28 ) = *( p_r5 + 1148 ) + 2.0F * ( *( p_r0 + 28 ) + *( p_r1 + 28 ) + *( p_r2 + 28 ) + *( p_r3 + 28 ) ); *( p_rrv + 32 ) = *( p_r5 + 1312 ) + 2.0F * ( *( p_r0 + 32 ) + *( p_r1 + 32 ) + *( p_r2 + 32 ) + *( p_r3 + 32 ) ); *( p_rrv + 36 ) = *( p_r5 + 1476 ) + 2.0F * ( *( p_r0 + 36 ) + *( p_r1 + 36 ) + *( p_r2 + 36 ) + *( p_r3 + 36 ) ); /* Default value */ ps0 = ps; alp0 = alp; sq = -1; alp = 1; ps = 0; ia = i4; ib = i5; p_dn0 = dn + i4; p_dn1 = dn + i5; p_r0 = &rr[i0][i4]; p_r1 = &rr[i1][i4]; p_r2 = &rr[i2][i4]; p_r3 = &rr[i3][i4]; p_r4 = &rr[i4][i4]; p_r5 = &rr[i4][i5]; p_rrv0 = rrv + i5; do { ps1 = ps0 + *p_dn0; alp1 = alp0 + *p_r4 + 2.0F * ( *p_r0 + *p_r1 + *p_r2 + *p_r3 ); p_dn = p_dn1; p_r6 = p_r5; p_rrv = p_rrv0; do { ps2 = ps1 + *p_dn; sq2 = ps2 * ps2; alp2 = alp1 + *p_rrv + 2.0F * *p_r6; if ( ( alp * sq2 ) > ( sq * alp2 ) ) { sq = sq2; ps = ps2; alp = alp2; ia = p_dn0 - dn; ib = p_dn - dn; } p_dn += 4; p_rrv += 4; p_r6 += 4; } while ( p_dn <= p_dn_max ); p_r0 += 4; p_r1 += 4; p_r2 += 4; p_r3 += 4; p_r4 += 164; p_r5 += 160; p_dn0 += 4; } while ( p_dn0 < p_dn_max ); i4 = ia; i5 = ib; /* i6 and i7 loop */ p_rrv = rrv + i7; p_r0 = &rr[i0][i7]; p_r1 = &rr[i1][i7]; p_r2 = &rr[i2][i7]; p_r3 = &rr[i3][i7]; p_r4 = &rr[i4][i7]; p_r5 = &rr[i5][i7]; p_r7 = &rr[i7][i7]; *p_rrv = *p_r7 + 2.0F * ( *p_r0 + *p_r1 + *p_r2 + *p_r3 + *p_r4 + *p_r5 ); *( p_rrv + 4 ) = *( p_r7 + 164 ) + 2.0F * ( *( p_r0 + 4 ) + *( p_r1 + 4 ) + *( p_r2 + 4 ) + *( p_r3 + 4 ) + *( p_r4 + 4 ) + *( p_r5 + 4 ) ); *( p_rrv + 8 ) = *( p_r7 + 328 ) + 2.0F * ( *( p_r0 + 8 ) + *( p_r1 + 8 ) + *( p_r2 + 8 ) + *( p_r3 + 8 ) + *( p_r4 + 8 ) + *( p_r5 + 8 ) ); *( p_rrv + 12 ) = *( p_r7 + 492 ) + 2.0F * ( *( p_r0 + 12 ) + *( p_r1 + 12 ) + *( p_r2 + 12 ) + *( p_r3 + 12 ) + *( p_r4 + 12 ) + *( p_r5 + 12 ) ); *( p_rrv + 16 ) = *( p_r7 + 656 ) + 2.0F * ( *( p_r0 + 16 ) + *( p_r1 + 16 ) + *( p_r2 + 16 ) + *( p_r3 + 16 ) + *( p_r4 + 16 ) + *( p_r5 + 16 ) ); *( p_rrv + 20 ) = *( p_r7 + 820 ) + 2.0F * ( *( p_r0 + 20 ) + *( p_r1 + 20 ) + *( p_r2 + 20 ) + *( p_r3 + 20 ) + *( p_r4 + 20 ) + *( p_r5 + 20 ) ); *( p_rrv + 24 ) = *( p_r7 + 984 ) + 2.0F * ( *( p_r0 + 24 ) + *( p_r1 + 24 ) + *( p_r2 + 24 ) + *( p_r3 + 24 ) + *( p_r4 + 24 ) + *( p_r5 + 24 ) ); *( p_rrv + 28 ) = *( p_r7 + 1148 ) + 2.0F * ( *( p_r0 + 28 ) + *( p_r1 + 28 ) + *( p_r2 + 28 ) + *( p_r3 + 28 ) + *( p_r4 + 28 ) + *( p_r5 + 28 ) ); *( p_rrv + 32 ) = *( p_r7 + 1312 ) + 2.0F * ( *( p_r0 + 32 ) + *( p_r1 + 32 ) + *( p_r2 + 32 ) + *( p_r3 + 32 ) + *( p_r4 + 32 ) + *( p_r5 + 32 ) ); *( p_rrv + 36 ) = *( p_r7 + 1476 ) + 2.0F * ( *( p_r0 + 36 ) + *( p_r1 + 36 ) + *( p_r2 + 36 ) + *( p_r3 + 36 ) + *( p_r4 + 36 ) + *( p_r5 + 36 ) ); /* Default value */ ps0 = ps; alp0 = alp; sq = -1; alp = 1; ps = 0; ia = i6; ib = i7; p_dn0 = dn + i6; p_dn1 = dn + i7; p_r0 = &rr[i0][i6]; p_r1 = &rr[i1][i6]; p_r2 = &rr[i2][i6]; p_r3 = &rr[i3][i6]; p_r4 = &rr[i4][i6]; p_r5 = &rr[i5][i6]; p_r6 = &rr[i6][i6]; p_r7 = &rr[i6][i7]; p_rrv0 = rrv + i7; do { ps1 = ps0 + *p_dn0; alp1 = alp0 + *p_r6 + 2.0F * ( *p_r0 + *p_r1 + *p_r2 + *p_r3 + *p_r4 + *p_r5 ); p_dn = p_dn1; p_r8 = p_r7; p_rrv = p_rrv0; do { ps2 = ps1 + *p_dn; sq2 = ps2 * ps2; alp2 = alp1 + *p_rrv + 2.0F * *p_r8; if ( ( alp * sq2 ) > ( sq * alp2 ) ) { sq = sq2; ps = ps2; alp = alp2; ia = p_dn0 - dn; ib = p_dn - dn; } p_dn += 4; p_rrv += 4; p_r8 += 4; } while ( p_dn <= p_dn_max ); p_r0 += 4; p_r1 += 4; p_r2 += 4; p_r3 += 4; p_r4 += 4; p_r5 += 4; p_r6 += 164; p_r7 += 160; p_dn0 += 4; } while ( p_dn0 < p_dn_max ); /* * now finished searching a set of 8 pulses * test and memorise if this combination is better than the last one. */ if ( ( alpk * sq ) > ( psk * alp ) ) { psk = sq; alpk = alp; codvec[0] = ( Word16 )i0; codvec[1] = ( Word16 )i1; codvec[2] = ( Word16 )i2; codvec[3] = ( Word16 )i3; codvec[4] = ( Word16 )i4; codvec[5] = ( Word16 )i5; codvec[6] = ( Word16 )ia; codvec[7] = ( Word16 )ib; } /* * Cyclic permutation of i1,i2,i3,i4,i5,i6,i7,(i8 and i9). */ pos = ipos[1]; for ( j = 1, k = 2; k < 8; j++, k++ ) { ipos[j] = ipos[k]; } ipos[7] = pos; } /* end 1..nb_tracks loop*/ } /* * build_code_8i40_31bits (10.2) * * * Parameters: * codvec I: position of pulses * dn_sign I: sign of pulses * cod O: algebraic codebook vector * h I: impulse response of weighted synthesis filter * y O: filtered innovative code * sign_indx O: signs of 4 pulses (signs only) * pos_indx O: position index of 8 pulses (position only) * * Function: * Builds the codeword, the filtered codeword and a * linear uncombined version of the index of the * codevector, based on the signs and positions of 8 pulses. * * Returns: * void */ static void build_code_8i40_31bits( Word32 codvec[], Float32 dn_sign[], Float32 cod[], Float32 h[], Float32 y[], Word32 sign_indx[], Word32 pos_indx[] ) { Float64 s; Float32 *p0, *p1, *p2, *p3, *p4, *p5, *p6, *p7; Word32 sign[8]; Word32 i, j, k, track, sign_index, pos_index; memset( cod, 0, L_CODE <<2 ); for ( i = 0; i < NB_TRACK_MR102; i++ ) { pos_indx[i] = -1; sign_indx[i] = -1; } for ( k = 0; k < 8; k++ ) { /* read pulse position */ i = codvec[k]; /* read sign */ j = ( Word32 )dn_sign[i]; /* index = pos/4 */ pos_index = i >> 2; /* track = pos%4 */ track = i & 3; if ( j > 0 ) { cod[i] = cod[i] + 0.99987792968750F; sign[k] = 1; /* bit=0 -> positive pulse */ sign_index = 0; } else { cod[i] = cod[i] - 0.99987792968750F; sign[k] = -1; /* bit=1 => negative pulse */ sign_index = 1; } /* first set first NB_TRACK pulses */ if ( pos_indx[track] < 0 ) { pos_indx[track] = pos_index; sign_indx[track] = sign_index; } /* 2nd row of pulses , test if positions needs to be switched */ else { if ( ( ( sign_index ^ sign_indx[track] ) & 1 ) == 0 ) { /* sign of 1st pulse == sign of 2nd pulse */ if ( pos_indx[track] <= pos_index ) { /* no swap */ pos_indx[track + NB_TRACK_MR102] = pos_index; } else { /* swap*/ pos_indx[track + NB_TRACK_MR102] = pos_indx[track]; pos_indx[track] = pos_index; sign_indx[track] = sign_index; } } else { /* sign of 1st pulse != sign of 2nd pulse */ if ( pos_indx[track] <= pos_index ) { /*swap*/ pos_indx[track + NB_TRACK_MR102] = pos_indx[track]; pos_indx[track] = pos_index; sign_indx[track] = sign_index; } else { /*no swap */ pos_indx[track + NB_TRACK_MR102] = pos_index; } } } } p0 = h - codvec[0]; p1 = h - codvec[1]; p2 = h - codvec[2]; p3 = h - codvec[3]; p4 = h - codvec[4]; p5 = h - codvec[5]; p6 = h - codvec[6]; p7 = h - codvec[7]; for ( i = 0; i < L_CODE; i++ ) { s = *p0++ * sign[0]; s += *p1++ * sign[1]; s += *p2++ * sign[2]; s += *p3++ * sign[3]; s += *p4++ * sign[4]; s += *p5++ * sign[5]; s += *p6++ * sign[6]; s += *p7++ * sign[7]; y[i] = ( Float32 )( s ); } } /* * compress10 * * * Parameters: * pos_indxA I: signs of 4 pulses (signs only) * pos_indxB I: position index of 8 pulses (pos only) * pos_indxC I: position and sign of 8 pulses (compressed) * Function: * Compression of three indeces [0..9] to one 10 bit index * minimizing the phase shift of a bit error. * * Returns: * indx */ static Word16 compress10( Word32 pos_indxA, Word32 pos_indxB, Word32 pos_indxC ) { Word32 indx, ia, ib, ic; ia = pos_indxA >> 1; ib = ( ( pos_indxB >> 1 ) * 5 ); ic = ( ( pos_indxC >> 1 ) * 25 ); indx = ( ia + ( ib + ic ) ) << 3; ia = pos_indxA & 1; ib = ( pos_indxB & 1 ) << 1; ic = ( pos_indxC & 1 ) << 2; indx = indx + ( ia + ( ib + ic ) ); return( Word16 )indx; } /* * compress_code * * * Parameters: * sign_indx I: signs of 4 pulses (signs only) * pos_indx I: position index of 8 pulses (pos only) * indx O: position and sign of 8 pulses (compressed) * Function: * Compression of the linear codewords to 4+three indeces one bit from each * pulse is made robust to errors by minimizing the phase shift of a bit error. * 4 signs (one for each track) * i0,i4,i1 => one index (7+3) bits, 3 LSBs more robust * i2,i6,i5 => one index (7+3) bits, 3 LSBs more robust * i3,i7 => one index (5+2) bits, 2-3 LSBs more robust * * Returns: * void */ static void compress_code( Word32 sign_indx[], Word32 pos_indx[], Word16 indx[] ) { Word32 i, ia, ib, ic; for ( i = 0; i < NB_TRACK_MR102; i++ ) { indx[i] = ( Word16 )sign_indx[i]; } /* * First index * indx[NB_TRACK] = (ia/2+(ib/2)*5 +(ic/2)*25)*8 + ia%2 + (ib%2)*2 + (ic%2)*4; */ indx[NB_TRACK_MR102] = compress10( pos_indx[0], pos_indx[4], pos_indx[1] ); /* * Second index * indx[NB_TRACK+1] = (ia/2+(ib/2)*5 +(ic/2)*25)*8 + ia%2 + (ib%2)*2 + (ic%2)*4; */ indx[NB_TRACK_MR102 + 1] = compress10( pos_indx[2], pos_indx[6], pos_indx[5] ); /* * Third index * if ((ib/2)%2 == 1) * indx[NB_TRACK+2] = ((((4-ia/2) + (ib/2)*5)*32+12)/25)*4 + ia%2 + (ib%2)*2; * else * indx[NB_TRACK+2] = ((((ia/2) + (ib/2)*5)*32+12)/25)*4 + ia%2 + (ib%2)*2; */ ib = ( pos_indx[7] >> 1 ) & 1; if ( ib == 1 ) ia = 4 - ( pos_indx[3] >> 1 ); else ia = pos_indx[3] >> 1; ib = ( ( pos_indx[7] >> 1 ) * 5 ); ib = ( ( ia + ib ) << 5 ) + 12; ic = ( ( ib * 1311 ) >> 15 ) << 2; ia = pos_indx[3] & 1; ib = ( pos_indx[7] & 1 ) << 1; indx[NB_TRACK_MR102 + 2] = ( Word16 )( ia + ( ib + ic ) ); } /* * code_8i40_31bits * * * Parameters: * x I: target vector * cn I: residual after long term prediction * h I: impulse response of weighted synthesis filter * T0 I: Pitch lag * pitch_sharp I: Last quantized pitch gain * code O: algebraic (fixed) codebook excitation * y O: filtered fixed codebook excitation * anap O: 7 Word16, index of 8 pulses (signs+positions) * * Function: * Searches a 31 bit algebraic codebook containing 8 pulses * in a frame of 40 samples. * * The code contains 8 nonzero pulses: i0...i7. * All pulses can have two possible amplitudes: +1 or -1. * The 40 positions in a subframe are divided into 4 tracks of * interleaved positions. Each track contains two pulses. * The pulses can have the following possible positions: * * i0, i4 : 0, 4, 8, 12, 16, 20, 24, 28, 32, 36 * i1, i5 : 1, 5, 9, 13, 17, 21, 25, 29, 33, 37 * i2, i6 : 2, 6, 10, 14, 18, 22, 26, 30, 34, 38 * i3, i7 : 3, 7, 11, 15, 19, 23, 27, 31, 35, 39 * * Each pair of pulses require 1 bit for their signs. The positions * are encoded together 3,3 and 2 resulting in * (7+3) + (7+3) + (5+2) bits for their * positions. This results in a 31 (4 sign and 27 pos) bit codebook. * The function determines the optimal pulse signs and positions, builds * the codevector, and computes the filtered codevector. * * Returns: * void */ static void code_8i40_31bits( Float32 x[], Float32 cn[], Float32 h[], Word32 T0, Float32 pitch_sharp, Float32 code[], Float32 y[], Word16 anap[] ) { Float32 rr[L_CODE][L_CODE]; Float32 dn[L_CODE], sign[L_CODE]; Word32 ipos[8], pos_max[NB_TRACK_MR102], codvec[8], linear_signs[ NB_TRACK_MR102], linear_codewords[8]; Word32 i; if ( pitch_sharp > 1.0F ) pitch_sharp = 1.0F; /* include pitch contribution into impulse resp. */ if ( pitch_sharp != 0 ) { for ( i = T0; i < L_SUBFR; i++ ) { h[i] += h[i - T0] * pitch_sharp; } } cor_h_x( h, x, dn ); set_sign12k2( dn, cn, sign, pos_max, NB_TRACK_MR102, ipos, STEP_MR102 ); cor_h( h, sign, rr ); search_8i40( dn, rr, ipos, pos_max, codvec ); build_code_8i40_31bits( codvec, sign, code, h, y, linear_signs, linear_codewords ); compress_code( linear_signs, linear_codewords, anap ); /* Add the pitch contribution to code[]. */ if ( pitch_sharp != 0 ) { for ( i = T0; i < L_SUBFR; i++ ) { code[i] += code[i - T0] * pitch_sharp; } } return; } /* * search_10i40 * * * Parameters: * dn I: correlation between target and h[] * rr I: matrix of autocorrelation * ipos I: starting position for each pulse * pos_max I: maximum of correlation position * codvec O: algebraic codebook vector * * Function: * Search the best codevector; determine positions of the 10 * pulses in the 40-sample frame. * * First, for each of the five tracks the pulse positions with maximum * absolute values of b(n) are searched. From these the global maximum value * for all the pulse positions is selected. The first pulse i0 is always set * into the position corresponding to the global maximum value. * Next, four iterations are carried out. During each iteration the position * of pulse i1 is set to the local maximum of one track. * The rest of the pulses are searched in pairs by sequentially searching * each of the pulse pairs {i2,i3}, {i4,i5}, {i6,i7} and {i8,i9} * in nested loops. Every pulse has 8 possible positions, i.e., there are * four 8x8-loops, resulting in 256 different combinations of * pulse positions for each iteration. In each iteration all the 9 pulse * starting positions are cyclically shifted, so that the pulse pairs are * changed and the pulse i1 is placed in a local maximum of * a different track. The rest of the pulses are searched also for * the other positions in the tracks. At least one pulse is located in * a position corresponding to the global maximum and one pulse is * located in a position corresponding to one of the 4 local maxima. * * Returns: * void */ static void search_10i40( Float32 dn[], Float32 rr[][L_CODE], Word32 ipos[], Word32 pos_max[], Word32 codvec[] ) { Float32 rrv[L_CODE]; Float32 psk, ps, ps0, ps1, ps2, sq, sq2, alpk, alp, alp0, alp1, alp2; Float32 *p_r, *p_r0, *p_r1, *p_r2, *p_r3, *p_r4, *p_r5, *p_r6, *p_r7, *p_r8, *p_r9, *p_r10; Float32 *p_rrv, *p_rrv0, *p_dn, *p_dn0, *p_dn1, *p_dn_max; Word32 i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, j, k, ia, ib, i, pos; p_dn_max = &dn[39]; /* fix i0 on maximum of correlation position */ i0 = pos_max[ipos[0]]; ia = ib = 0; ps = 0; /* i1 loop */ psk = -1; alpk = 1; for ( i = 0; i < 10; i++ ) { codvec[i] = i; } p_r = &rr[i0][i0]; for ( i = 1; i < 5; i++ ) { i1 = pos_max[ipos[1]]; i2 = ipos[2]; i3 = ipos[3]; i4 = ipos[4]; i5 = ipos[5]; i6 = ipos[6]; i7 = ipos[7]; i8 = ipos[8]; i9 = ipos[9]; ps0 = dn[i0] + dn[i1]; alp0 = *p_r + rr[i1][i1] + 2.0F * rr[i0][i1]; /* i2 and i3 loop */ p_rrv = &rrv[i3]; p_r0 = &rr[i0][i3]; p_r1 = &rr[i1][i3]; p_r3 = &rr[i3][i3]; *p_rrv = *p_r3 + 2.0F * ( *p_r0 + *p_r1 ); *( p_rrv + 5 ) = *( p_r3 + 205 ) + 2.0F * ( *( p_r0 + 5 ) + *( p_r1 + 5 ) ); *( p_rrv + 10 ) = *( p_r3 + 410 ) + 2.0F * ( *( p_r0 + 10 ) + *( p_r1 + 10 ) ); *( p_rrv + 15 ) = *( p_r3 + 615 ) + 2.0F * ( *( p_r0 + 15 ) + *( p_r1 + 15 ) ); *( p_rrv + 20 ) = *( p_r3 + 820 ) + 2.0F * ( *( p_r0 + 20 ) + *( p_r1 + 20 ) ); *( p_rrv + 25 ) = *( p_r3 + 1025 ) + 2.0F * ( *( p_r0 + 25 ) + *( p_r1 + 25 ) ); *( p_rrv + 30 ) = *( p_r3 + 1230 ) + 2.0F * ( *( p_r0 + 30 ) + *( p_r1 + 30 ) ); *( p_rrv + 35 ) = *( p_r3 + 1435 ) + 2.0F * ( *( p_r0 + 35 ) + *( p_r1 + 35 ) ); sq = -1; alp = 1; ps = 0; ia = i2; ib = i3; p_rrv = rrv + i3; p_r0 = &rr[i0][i2]; p_r1 = &rr[i1][i2]; p_r2 = &rr[i2][i2]; p_r3 = &rr[i2][i3]; p_dn0 = dn + i2; p_dn1 = dn + i3; p_rrv0 = rrv + i3; do { ps1 = ps0 + *p_dn0; alp1 = alp0 + *p_r2 + 2.0F * ( *p_r0 + *p_r1 ); p_rrv = p_rrv0; p_dn = p_dn1; p_r4 = p_r3; do { ps2 = ps1 + *p_dn; sq2 = ps2 * ps2; alp2 = alp1 + *p_rrv + 2.0F * *p_r4; if ( ( alp * sq2 ) > ( sq * alp2 ) ) { sq = sq2; ps = ps2; alp = alp2; ia = ( Word16 )( p_dn0 - dn ); ib = ( Word16 )( p_dn - dn ); } p_rrv += 5; p_dn += 5; p_r4 += 5; } while ( p_dn < p_dn_max ); p_dn0 += 5; p_r0 += 5; p_r1 += 5; p_r2 += 205; p_r3 += 200; } while ( p_dn0 <= p_dn_max ); i2 = ia; i3 = ib; /* i4 and i5 loop */ p_rrv = rrv + i5; p_r0 = &rr[i0][i5]; p_r1 = &rr[i1][i5]; p_r2 = &rr[i2][i5]; p_r3 = &rr[i3][i5]; p_r5 = &rr[i5][i5]; *p_rrv = *p_r5 + 2.0F * ( *p_r0 + *p_r1 + *p_r2 + *p_r3 ); *( p_rrv + 5 ) = *( p_r5 + 205 ) + 2.0F * ( *( p_r0 + 5 ) + *( p_r1 + 5 ) + *( p_r2 + 5 ) + *( p_r3 + 5 ) ); *( p_rrv + 10 ) = *( p_r5 + 410 ) + 2.0F * ( *( p_r0 + 10 ) + *( p_r1 + 10 ) + *( p_r2 + 10 ) + *( p_r3 + 10 ) ); *( p_rrv + 15 ) = *( p_r5 + 615 ) + 2.0F * ( *( p_r0 + 15 ) + *( p_r1 + 15 ) + *( p_r2 + 15 ) + *( p_r3 + 15 ) ); *( p_rrv + 20 ) = *( p_r5 + 820 ) + 2.0F * ( *( p_r0 + 20 ) + *( p_r1 + 20 ) + *( p_r2 + 20 ) + *( p_r3 + 20 ) ); *( p_rrv + 25 ) = *( p_r5 + 1025 ) + 2.0F * ( *( p_r0 + 25 ) + *( p_r1 + 25 ) + *( p_r2 + 25 ) + *( p_r3 + 25 ) ); *( p_rrv + 30 ) = *( p_r5 + 1230 ) + 2.0F * ( *( p_r0 + 30 ) + *( p_r1 + 30 ) + *( p_r2 + 30 ) + *( p_r3 + 30 ) ); *( p_rrv + 35 ) = *( p_r5 + 1435 ) + 2.0F * ( *( p_r0 + 35 ) + *( p_r1 + 35 ) + *( p_r2 + 35 ) + *( p_r3 + 35 ) ); /* Default value */ ps0 = ps; alp0 = alp; sq = -1; alp = 1; ps = 0; ia = i4; ib = i5; p_dn0 = dn + i4; p_dn1 = dn + i5; p_r0 = &rr[i0][i4]; p_r1 = &rr[i1][i4]; p_r2 = &rr[i2][i4]; p_r3 = &rr[i3][i4]; p_r4 = &rr[i4][i4]; p_r5 = &rr[i4][i5]; p_rrv0 = rrv + i5; do { ps1 = ps0 + *p_dn0; alp1 = alp0 + *p_r4 + 2.0F * ( *p_r0 + *p_r1 + *p_r2 + *p_r3 ); p_dn = p_dn1; p_r6 = p_r5; p_rrv = p_rrv0; do { ps2 = ps1 + *p_dn; sq2 = ps2 * ps2; alp2 = alp1 + *p_rrv + 2.0F * *p_r6; if ( ( alp * sq2 ) > ( sq * alp2 ) ) { sq = sq2; ps = ps2; alp = alp2; ia = ( Word16 )( p_dn0 - dn ); ib = ( Word16 )( p_dn - dn ); } p_dn += 5; p_rrv += 5; p_r6 += 5; } while ( p_dn <= p_dn_max ); p_r0 += 5; p_r1 += 5; p_r2 += 5; p_r3 += 5; p_r4 += 205; p_r5 += 200; p_dn0 += 5; } while ( p_dn0 < p_dn_max ); i4 = ia; i5 = ib; /* i6 and i7 loop */ p_rrv = rrv + i7; p_r0 = &rr[i0][i7]; p_r1 = &rr[i1][i7]; p_r2 = &rr[i2][i7]; p_r3 = &rr[i3][i7]; p_r4 = &rr[i4][i7]; p_r5 = &rr[i5][i7]; p_r7 = &rr[i7][i7]; *p_rrv = *p_r7 + 2.0F * ( *p_r0 + *p_r1 + *p_r2 + *p_r3 + *p_r4 + *p_r5 ); *( p_rrv + 5 ) = *( p_r7 + 205 ) + 2.0F * ( *( p_r0 + 5 ) + *( p_r1 + 5 ) + *( p_r2 + 5 ) + *( p_r3 + 5 ) + *( p_r4 + 5 ) + *( p_r5 + 5 ) ); *( p_rrv + 10 ) = *( p_r7 + 410 ) + 2.0F * ( *( p_r0 + 10 ) + *( p_r1 + 10 ) + *( p_r2 + 10 ) + *( p_r3 + 10 ) + *( p_r4 + 10 ) + *( p_r5 + 10 ) ); *( p_rrv + 15 ) = *( p_r7 + 615 ) + 2.0F * ( *( p_r0 + 15 ) + *( p_r1 + 15 ) + *( p_r2 + 15 ) + *( p_r3 + 15 ) + *( p_r4 + 15 ) + *( p_r5 + 15 ) ); *( p_rrv + 20 ) = *( p_r7 + 820 ) + 2.0F * ( *( p_r0 + 20 ) + *( p_r1 + 20 ) + *( p_r2 + 20 ) + *( p_r3 + 20 ) + *( p_r4 + 20 ) + *( p_r5 + 20 ) ); *( p_rrv + 25 ) = *( p_r7 + 1025 ) + 2.0F * ( *( p_r0 + 25 ) + *( p_r1 + 25 ) + *( p_r2 + 25 ) + *( p_r3 + 25 ) + *( p_r4 + 25 ) + *( p_r5 + 25 ) ); *( p_rrv + 30 ) = *( p_r7 + 1230 ) + 2.0F * ( *( p_r0 + 30 ) + *( p_r1 + 30 ) + *( p_r2 + 30 ) + *( p_r3 + 30 ) + *( p_r4 + 30 ) + *( p_r5 + 30 ) ); *( p_rrv + 35 ) = *( p_r7 + 1435 ) + 2.0F * ( *( p_r0 + 35 ) + *( p_r1 + 35 ) + *( p_r2 + 35 ) + *( p_r3 + 35 ) + *( p_r4 + 35 ) + *( p_r5 + 35 ) ); /* Default value */ ps0 = ps; alp0 = alp; sq = -1; alp = 1; ps = 0; ia = i6; ib = i7; p_dn0 = dn + i6; p_dn1 = dn + i7; p_r0 = &rr[i0][i6]; p_r1 = &rr[i1][i6]; p_r2 = &rr[i2][i6]; p_r3 = &rr[i3][i6]; p_r4 = &rr[i4][i6]; p_r5 = &rr[i5][i6]; p_r6 = &rr[i6][i6]; p_r7 = &rr[i6][i7]; p_rrv0 = rrv + i7; do { ps1 = ps0 + *p_dn0; alp1 = alp0 + *p_r6 + 2.0F * ( *p_r0 + *p_r1 + *p_r2 + *p_r3 + *p_r4 + *p_r5 ); p_dn = p_dn1; p_r8 = p_r7; p_rrv = p_rrv0; do { ps2 = ps1 + *p_dn; sq2 = ps2 * ps2; alp2 = alp1 + *p_rrv + 2.0F * *p_r8; if ( ( alp * sq2 ) > ( sq * alp2 ) ) { sq = sq2; ps = ps2; alp = alp2; ia = ( Word16 )( p_dn0 - dn ); ib = ( Word16 )( p_dn - dn ); } p_dn += 5; p_rrv += 5; p_r8 += 5; } while ( p_dn <= p_dn_max ); p_r0 += 5; p_r1 += 5; p_r2 += 5; p_r3 += 5; p_r4 += 5; p_r5 += 5; p_r6 += 205; p_r7 += 200; p_dn0 += 5; } while ( p_dn0 < p_dn_max ); i6 = ia; i7 = ib; /* i8 and i9 loop */ p_rrv = rrv + i9; p_r0 = &rr[i0][i9]; p_r1 = &rr[i1][i9]; p_r2 = &rr[i2][i9]; p_r3 = &rr[i3][i9]; p_r4 = &rr[i4][i9]; p_r5 = &rr[i5][i9]; p_r6 = &rr[i6][i9]; p_r7 = &rr[i7][i9]; p_r9 = &rr[i9][i9]; *p_rrv = *p_r9 + 2.0F * ( *p_r0 + *p_r1 + *p_r2 + *p_r3 + *p_r4 + *p_r5 + *p_r6 + *p_r7 ); *( p_rrv + 5 ) = *( p_r9 + 205 ) + 2.0F * ( *( p_r0 + 5 ) + *( p_r1 + 5 ) + *( p_r2 + 5 ) + *( p_r3 + 5 ) + *( p_r4 + 5 ) + *( p_r5 + 5 ) + *( p_r6 + 5 ) + *( p_r7 + 5 ) ); *( p_rrv + 10 ) = *( p_r9 + 410 ) + 2.0F * ( *( p_r0 + 10 ) + *( p_r1 + 10 ) + *( p_r2 + 10 ) + *( p_r3 + 10 ) + *( p_r4 + 10 ) + *( p_r5 + 10 ) + *( p_r6 + 10 ) + *( p_r7 + 10 ) ); *( p_rrv + 15 ) = *( p_r9 + 615 ) + 2.0F * ( *( p_r0 + 15 ) + *( p_r1 + 15 ) + *( p_r2 + 15 ) + *( p_r3 + 15 ) + *( p_r4 + 15 ) + *( p_r5 + 15 ) + *( p_r6 + 15 ) + *( p_r7 + 15 ) ); *( p_rrv + 20 ) = *( p_r9 + 820 ) + 2.0F * ( *( p_r0 + 20 ) + *( p_r1 + 20 ) + *( p_r2 + 20 ) + *( p_r3 + 20 ) + *( p_r4 + 20 ) + *( p_r5 + 20 ) + *( p_r6 + 20 ) + *( p_r7 + 20 ) ); *( p_rrv + 25 ) = *( p_r9 + 1025 ) + 2.0F * ( *( p_r0 + 25 ) + *( p_r1 + 25 ) + *( p_r2 + 25 ) + *( p_r3 + 25 ) + *( p_r4 + 25 ) + *( p_r5 + 25 ) + *( p_r6 + 25 ) + *( p_r7 + 25 ) ); *( p_rrv + 30 ) = *( p_r9 + 1230 ) + 2.0F * ( *( p_r0 + 30 ) + *( p_r1 + 30 ) + *( p_r2 + 30 ) + *( p_r3 + 30 ) + *( p_r4 + 30 ) + *( p_r5 + 30 ) + *( p_r6 + 30 ) + *( p_r7 + 30 ) ); *( p_rrv + 35 ) = *( p_r9 + 1435 ) + 2.0F * ( *( p_r0 + 35 ) + *( p_r1 + 35 ) + *( p_r2 + 35 ) + *( p_r3 + 35 ) + *( p_r4 + 35 ) + *( p_r5 + 35 ) + *( p_r6 + 35 ) + *( p_r7 + 35 ) ); /* Default value */ ps0 = ps; alp0 = alp; sq = -1; alp = 1; ps = 0; ia = i8; ib = i9; p_dn0 = dn + i8; p_dn1 = dn + i9; p_r0 = &rr[i0][i8]; p_r1 = &rr[i1][i8]; p_r2 = &rr[i2][i8]; p_r3 = &rr[i3][i8]; p_r4 = &rr[i4][i8]; p_r5 = &rr[i5][i8]; p_r6 = &rr[i6][i8]; p_r7 = &rr[i7][i8]; p_r8 = &rr[i8][i8]; p_r9 = &rr[i8][i9]; p_rrv0 = rrv + i9; do { ps1 = ps0 + *p_dn0; alp1 = alp0 + *p_r8 + 2.0F * ( *p_r0 + *p_r1 + *p_r2 + *p_r3 + *p_r4 + *p_r5 + *p_r6 + *p_r7 ); p_dn = p_dn1; p_r10 = p_r9; p_rrv = p_rrv0; do { ps2 = ps1 + *p_dn; sq2 = ps2 * ps2; alp2 = alp1 + *p_rrv + 2.0F * *p_r10; if ( ( alp * sq2 ) > ( sq * alp2 ) ) { sq = sq2; ps = ps2; alp = alp2; ia = ( Word16 )( p_dn0 - dn ); ib = ( Word16 )( p_dn - dn ); } p_dn += 5; p_rrv += 5; p_r10 += 5; } while ( p_dn <= p_dn_max ); p_r0 += 5; p_r1 += 5; p_r2 += 5; p_r3 += 5; p_r4 += 5; p_r5 += 5; p_r6 += 5; p_r7 += 5; p_r8 += 205; p_r9 += 200; p_dn0 += 5; } while ( p_dn0 < p_dn_max ); /* * test and memorise if this combination is better than the last one. */ if ( ( alpk * sq ) > ( psk * alp ) ) { psk = sq; alpk = alp; codvec[0] = ( Word16 )i0; codvec[1] = ( Word16 )i1; codvec[2] = ( Word16 )i2; codvec[3] = ( Word16 )i3; codvec[4] = ( Word16 )i4; codvec[5] = ( Word16 )i5; codvec[6] = ( Word16 )i6; codvec[7] = ( Word16 )i7; codvec[8] = ( Word16 )ia; codvec[9] = ( Word16 )ib; } /* * Cyclic permutation of i1,i2,i3,i4,i5,i6,i7,(i8 and i9). */ pos = ipos[1]; for ( j = 1, k = 2; k < 10; j++, k++ ) { ipos[j] = ipos[k]; } ipos[9] = pos; } /* end 1..nb_tracks loop*/ } /* * build_code_10i40_35bits * * * Parameters: * codvec I: position of pulses * dn_sign I: sign of pulses * cod O: algebraic codebook vector * h I: impulse response of weighted synthesis filter * y O: filtered innovative code * indx O: index of 10 pulses (sign+position) * * Function: * Builds the codeword, the filtered codeword and index of the * codevector, based on the signs and positions of 10 pulses. * * Returns: * void */ static void build_code_10i40_35bits( Word32 codvec[], Float32 dn_sign[], Float32 cod[], Float32 h[], Float32 y[], Word16 indx[] ) { Word32 i, j, k, track, index, sign[10]; Float32 *p0, *p1, *p2, *p3, *p4, *p5, *p6, *p7, *p8, *p9; Float64 s; memset( cod, 0, 160 ); memset( y, 0, 160 ); for ( i = 0; i < NB_TRACK; i++ ) { indx[i] = -1; } for ( k = 0; k < 10; k++ ) { /* read pulse position */ i = codvec[k]; /* read sign */ j = ( Word16 )dn_sign[i]; /* index = pos/5 */ index = ( Word16 )( i / 5 ); /* track = pos%5 */ track = ( Word16 )( i % 5 ); if ( j > 0 ) { cod[i] = cod[i] + 1; sign[k] = 1; } else { cod[i] = cod[i] - 1; sign[k] = -1; index = index + 8; } if ( indx[track] < 0 ) { indx[track] = ( Word16 )index; } else { if ( ( ( index ^ indx[track] ) & 8 ) == 0 ) { /* sign of 1st pulse == sign of 2nd pulse */ if ( indx[track] <= index ) { indx[track + 5] = ( Word16 )index; } else { indx[track + 5] = ( Word16 )indx[track]; indx[track] = ( Word16 )index; } } else { /* sign of 1st pulse != sign of 2nd pulse */ if ( ( indx[track] & 7 ) <= ( index & 7 ) ) { indx[track + 5] = ( Word16 )indx[track]; indx[track] = ( Word16 )index; } else { indx[track + 5] = ( Word16 )index; } } } } p0 = h - codvec[0]; p1 = h - codvec[1]; p2 = h - codvec[2]; p3 = h - codvec[3]; p4 = h - codvec[4]; p5 = h - codvec[5]; p6 = h - codvec[6]; p7 = h - codvec[7]; p8 = h - codvec[8]; p9 = h - codvec[9]; for ( i = 0; i < L_CODE; i++ ) { s = *p0++ * sign[0]; s += *p1++ * sign[1]; s += *p2++ * sign[2]; s += *p3++ * sign[3]; s += *p4++ * sign[4]; s += *p5++ * sign[5]; s += *p6++ * sign[6]; s += *p7++ * sign[7]; s += *p8++ * sign[8]; s += *p9++ * sign[9]; y[i] = ( Float32 )( s ); } } /* * q_p * * * Parameters: * ind B: Pulse position * n I: Pulse number * * Function: * Gray coding * * Returns: * void */ static void q_p( Word16 *ind, Word32 n ) { Word16 tmp; tmp = *ind; if ( n < 5 ) { *ind = ( Word16 )( ( tmp & 0x8 ) | gray[tmp & 0x7] ); } else { *ind = gray[tmp & 0x7]; } } /* * code_10i40_35bits * * * Parameters: * x I: target vector * cn I: residual after long term prediction * h I: impulse response of weighted synthesis filter * gain_pit I: quantified adaptive codebook gain * code O: algebraic (fixed) codebook excitation * y O: filtered fixed codebook excitation * anap O: 7 Word16, index of 8 pulses (signs+positions) * * Function: * Searches a 35 bit algebraic codebook containing 10 pulses * in a frame of 40 samples. * * The code contains 10 nonzero pulses: i0...i9. * All pulses can have two possible amplitudes: +1 or -1. * The 40 positions in a subframe are divided into 5 tracks of * interleaved positions. Each track contains two pulses. * The pulses can have the following possible positions: * Track Pulse Positions * 1 i0, i5 0, 5, 10, 15, 20, 25, 30, 35. * 2 i1, i6 1, 6, 11, 16, 21, 26, 31, 36. * 3 i2, i 2, 7, 12, 17, 22, 27, 32, 37. * 4 i3, i8 3, 8, 13, 18, 23, 28, 33, 38. * 5 i4, i9 4, 9, 14, 19, 24, 29, 34, 39. * * Each pair of pulses require 1 bit for their signs and 6 bits for their * positions (3 bits + 3 bits). This results in a 35 bit codebook. * The function determines the optimal pulse signs and positions, builds * the codevector, and computes the filtered codevector. * * The algebraic codebook is searched by minimizing the mean square error * between the weighted input speech and the weighted synthesized speech. * The target signal used in the closed-loop pitch search is updated by * subtracting the adaptive codebook contribution. That is: * * x2(n) = x(n) - Gp' * y(n), n = 0, ..., 39 * * where y(n) = v(n) * h(n) is the filtered adaptive codebook vector * and Gp' is the quantified adaptive codebook gain. This is done * already in function cl_ltp. * * If c(k) is the algebraic codevector at index k, then * the algebraic codebook is searched by maximizing the term: * * A(k) = (C(k) * C(k)) / Ed(k) = * * 39 * [SUM sb(i)*d(i)]^2 * i=0 * --------------------- * transpose(sb) * PI * sb * * where d(n) is the correlation between the target signal x2(n) * and the impulse response h(n), H is a the lower triangular Toepliz * convolution matrix with diagonal h(0) and lower diagonals * h(1), ..., h(39), and PI = H_transpose * H is the matrix of * correlations of h(n). * * The pulse amplitudes are preset by the mere quantization of an signal * b(n) used for presetting the amplitudes. * * 39 * b(n) = res(n) / SQRT[ SUM[ res(i) * res(i) ] ] * i=0 * 39 * + d(n) / SQRT[ SUM [ d(i) * d(i) ] ], n = 0, ..., 39, * i=0 * * where res(n) is normalized long-term prediction residual and * d(n) is normalized vector. * * 39 * d(n) = SUM[ x2(i) * h(i-n) ], n = 0, ..., 39, * i=n * * This is simply done by setting the amplitude of a pulse at * a certain position equal to the sign of b(n) at that position. * The simplification proceeds as follows (prior to the codebook search). * First, the sign signal sb(n) = SIGN[ b(n) ] and * the signal d'(n) = sb(n) * d(n) are computed. * * Returns: * void */ static void code_10i40_35bits( Float32 x[], Float32 cn[], Float32 h[], Word32 T0, Float32 gain_pit, Float32 code[], Float32 y[], Word16 anap[] ) { Float32 rr[L_CODE][L_CODE]; Float32 dn[L_CODE], sign[L_CODE]; Word32 ipos[10], pos_max[NB_TRACK], codvec[10]; Word32 i; /* include pitch contribution into impulse resp. */ if ( gain_pit > 1.0F ) gain_pit = 1.0F; if ( gain_pit != 0 ) { for ( i = T0; i < L_SUBFR; i++ ) { h[i] += h[i - T0] * gain_pit; } } /* * 39 * d(n) = SUM[ x2(i) * h(i-n) ], n = 0, ..., 39 * i=n */ cor_h_x( h, x, dn ); /* sb(n) and d'(n) */ set_sign12k2( dn, cn, sign, pos_max, NB_TRACK, ipos, STEP ); /* Matrix of correlations */ cor_h( h, sign, rr ); search_10i40( dn, rr, ipos, pos_max, codvec ); build_code_10i40_35bits( codvec, sign, code, h, y, anap ); for ( i = 0; i < 10; i++ ) { q_p( &anap[i], i ); } /* Add the pitch contribution to code[]. */ if ( gain_pit != 0 ) { for ( i = T0; i < L_SUBFR; i++ ) { code[i] += code[i - T0] * gain_pit; } } return; } /* * cbsearch * * * Parameters: * mode I: AMR mode * subnr I: Subframe * x I: Target vector * h B: Impulse response of weighted synthesis filter * T0 I: Pitch lag * pitch_sharp I: Last quantized pitch gain * gain_pit I: Algebraic codebook gain * code O: Innovative codebook * y O: Filtered fixed codebook excitation * res2 I: residual after long term prediction * anap O: Signs and positions of the pulses * * Function: * Innovative codebook search (find index and gain) * * Returns: * void */ static void cbsearch( enum Mode mode, Word16 subnr, Float32 x[], Float32 h[], Word32 T0, Float32 pitch_sharp, Float32 gain_pit, Float32 code[], Float32 y[], Float32 *res2, Word16 **anap ) { switch (mode){ case MR475: case MR515: code_2i40_9bits( subnr, x, h, T0, pitch_sharp, code, y, *anap ); ( *anap ) += 2; break; case MR59: code_2i40_11bits( x, h, T0, pitch_sharp, code, y, *anap ); ( *anap ) += 2; break; case MR67: code_3i40_14bits( x, h, T0, pitch_sharp, code, y, *anap ); ( *anap ) += 2; break; case MR74: case MR795: code_4i40_17bits( x, h, T0, pitch_sharp, code, y, *anap ); ( *anap ) += 2; break; case MR102: code_8i40_31bits( x, res2, h, T0, pitch_sharp, code, y, *anap ); *anap += 7; break; default: code_10i40_35bits( x, res2, h, T0, gain_pit, code, y, *anap ); *anap += 10; } } /* * Log2_norm * * * Parameters: * x I: input value * exp I: exponent * exponent O: Integer part of Log2. (range: 0<=val<=30) * fraction O: Fractional part of Log2. (range: 0<=val<1) * * Function: * Computes log2 * * Computes log2(L_x, exp), where L_x is positive and * normalized, and exp is the normalisation exponent * If L_x is negative or zero, the result is 0. * * The function Log2(L_x) is approximated by a table and linear * interpolation. The following steps are used to compute Log2(L_x) * * exponent = 30-normExponent * i = bit25-b31 of L_x; 32<=i<=63 (because of normalization). * a = bit10-b24 * i -=32 * fraction = table[i]<<16 - (table[i] - table[i+1]) * a * 2 * * Returns: * void */ static void Log2_norm( Word32 x, Word32 exp, Word32 *exponent, Word32 * fraction ) { Word32 y, i, a; if ( x <= 0 ) { *exponent = 0; *fraction = 0; return; } /* Extract b25-b31 */ i = x >> 25; i = i - 32; /* Extract b10-b24 of fraction */ a = x >> 9; a = a & 0xFFFE; /* 2a */ /* fraction */ y = ( log2_table[i] << 16 ) - a * ( log2_table[i] - log2_table[i + 1] ); *fraction = y >> 16; *exponent = 30 - exp; return; } /* * Log2 * * * Parameters: * x I: input value * exponent O: Integer part of Log2. (range: 0<=val<=30) * fraction O: Fractional part of Log2. (range: 0<=val<1) * * Function: * Computes log2(L_x) * If x is negative or zero, the result is 0. * * Returns: * void */ static void Log2( Word32 x, Word32 *exponent, Word32 *fraction ) { int exp; frexp( ( Float64 )x, &exp ); exp = 31 - exp; Log2_norm( x <> (30-exponent) (with rounding) * * Returns: * result (range: 0<=val<=0x7fffffff) */ static Word32 Pow2( Word32 exponent, Word32 fraction ) { Word32 i, a, tmp, x, exp; /* Extract b10-b16 of fraction */ i = fraction >> 10; /* Extract b0-b9 of fraction */ a = ( fraction << 5 ) & 0x7fff; /* table[i] << 16 */ x = pow2_table[i] << 16; /* table[i] - table[i+1] */ tmp = pow2_table[i] - pow2_table[i + 1]; /* L_x -= tmp*a*2 */ x -= ( tmp * a ) << 1; if ( exponent >= -1 ) { exp = ( 30 - exponent ); /* Rounding */ if ( ( x & ( ( Word32 )1 << ( exp - 1 ) ) ) != 0 ) { x = ( x >> exp ) + 1; } else x = x >> exp; } else x = 0; return( x ); } /* * gc_pred * * * Parameters: * past_qua_en I: MA predictor * mode I: AMR mode * code I: innovative codebook vector * gcode0 O: predicted gain factor * en I: innovation energy (only calculated for MR795) * * Function: * MA prediction of the innovation energy * * Mean removed innovation energy (dB) in subframe n * N-1 * E(n) = 10*log(gc*gc * SUM[(code(i) * code(i)]/N) - E_mean * i=0 * N=40 * * Mean innovation energy (dB) * N-1 * Ei(n) = 10*log(SUM[(code(i) * code(i)]/N) * i=0 * * Predicted energy * 4 * Ep(n) = SUM[b(i) * R(n-i)] * i=1 * b = [0.68 0.58 0.34 0.19] * R(k) is quantified prediction error at subframe k * * E_Mean = 36 dB (MR122) * * Predicted gain gc is found by * * gc = POW[10, 0.05 * (Ep(n) + E_mean - Ei)] * * Returns: * void */ static void gc_pred( Word32 *past_qua_en, enum Mode mode, Float32 *code, Word32 *gcode0_exp, Word32 *gcode0_fra, Float32 *en) { Float64 ener_code; Word32 exp, frac, ener, ener_tmp, tmp; int exp_code; /* energy of code */ ener_code = Dotproduct40( code, code ); if ( mode == MR122 ) { ener = (Word32)(ener_code * 33554432); /* ener_code = ener_code / lcode; lcode = 40; 1/40 = 26214 Q20 */ ener = ( ( ener + 0x00008000L ) >> 16 ) * 52428; Log2( ener, &exp, &frac ); ener = ( ( exp - 30 ) << 16 ) + ( frac << 1 ); ener_tmp = 44 * qua_gain_code_MR122[past_qua_en[0]]; ener_tmp += 37 * qua_gain_code_MR122[past_qua_en[1]]; ener_tmp += 22 * qua_gain_code_MR122[past_qua_en[2]]; ener_tmp += 12 * qua_gain_code_MR122[past_qua_en[3]]; ener_tmp = ener_tmp << 1; ener_tmp += 783741L; /* * predicted codebook gain * gc0 = Pow10( (ener*constant - ener_code*constant) / 20 ) * = Pow2(ener-ener_code) * = Pow2(int(d)+frac(d)) */ ener = ( ener_tmp - ener ) >> 1; /* Q16 */ *gcode0_exp = ener >> 16; *gcode0_fra = ( ener >> 1 ) - ( *gcode0_exp << 15 ); } else { ener = (Word32)(ener_code * 134217728); if (ener < 0) ener = 0x7fffffff; frexp( ( Float64 )ener, &exp_code ); exp_code = 31 - exp_code; ener <<= exp_code; Log2_norm( ener, exp_code, &exp, &frac ); tmp = ( exp * ( -49320 ) ) + ( ( ( frac * ( -24660 ) ) >> 15 ) << 1 ); if ( mode == MR102 ) { /* mean = 33 dB */ tmp += 2134784; /* Q14 */ } else if ( mode == MR795 ) { /* mean = 36 dB */ tmp += 2183936; /* Q14 */ *en = (Float32)ener_code; } else if ( mode == MR74 ) { /* mean = 30 dB */ tmp += 2085632; /* Q14 */ } else if ( mode == MR67 ) { /* mean = 28.75 dB */ tmp += 2065152; /* Q14 */ } else /* MR59, MR515, MR475 */ { /* mean = 33 dB */ tmp += 2134784; /* Q14 */ } tmp = tmp << 9; tmp += 5571 * qua_gain_code[past_qua_en[0]]; tmp += 4751 * qua_gain_code[past_qua_en[1]]; tmp += 2785 * qua_gain_code[past_qua_en[2]]; tmp += 1556 * qua_gain_code[past_qua_en[3]]; tmp = tmp >> 15; /* Q8 */ /* * gcode0 = pow(10.0, gcode0/20) * = pow(2, 3.3219*gcode0/20) * = pow(2, 0.166*gcode0) */ /* 5439 Q15 = 0.165985 */ /* (correct: 1/(20*log10(2)) 0.166096 = 5443 Q15) */ /* For IS641 bitexactness */ if ( mode == MR74 ) { /* Q8 * Q15 -> Q24 */ tmp = tmp * 10878; } else { /* Q8 * Q15 -> Q24 */ tmp = tmp * 10886; } tmp = tmp >> 9; /* -> Q15 */ *gcode0_exp = tmp >> 15; *gcode0_fra = tmp - (*gcode0_exp * 32768); } } /* * calc_filt_energies * * * Parameters: * mode I: AMR mode * xn I: LTP target vector * xn2 I: CB target vector * y1 I: Adaptive codebook * y2 I: Filtered innovative vector * gCoeff I: Correlations * coeff O: energy coefficients * cod_gain O: optimum codebook gain * * Function: * Calculation of several energy coefficients for filtered excitation signals * * Compute coefficients need for the quantization and the optimum * codebook gain gcu (for MR475 only). * * coeff[0] = y1 y1 * coeff[1] = -2 xn y1 * coeff[2] = y2 y2 * coeff[3] = -2 xn y2 * coeff[4] = 2 y1 y2 * * * gcu = / (0 if <= 0) * * Product and have been computed in G_pitch() and * are in vector gCoeff[]. * * Returns: * void */ static void calc_filt_energies( enum Mode mode, Float32 xn[], Float32 xn2[], Float32 y1[], Float32 y2[], Float32 gCoeff[], Float32 coeff[], Float32 * cod_gain ) { Float32 sum, ener_init = 0.01F; if ( ( mode == MR795 ) || ( mode == MR475 ) ) ener_init = 0; coeff[0] = gCoeff[0]; coeff[1] = -2.0F * gCoeff[1]; /* Compute scalar product */ sum = (Float32)Dotproduct40( y2, y2 ); sum += ener_init; coeff[2] = sum; /* Compute scalar product -2* */ sum = (Float32)Dotproduct40( xn, y2 ); sum += ener_init; coeff[3] = -2.0F * sum; /* Compute scalar product 2* */ sum = (Float32)Dotproduct40( y1, y2 ); sum += ener_init; coeff[4] = 2.0F * sum; if ( (mode == MR475) || (mode == MR795) ) { /* Compute scalar product */ sum = (Float32)Dotproduct40( xn2, y2 ); if ( sum <= 0 ) { *cod_gain = 0; } else { /* * gcu = / */ *cod_gain = sum / coeff[2]; } } } /* * MR475_update_unq_pred * * * Parameters: * past_qua_en I: MA predictor memory, 20*log10(qua_err) * gcode0 I: predicted CB gain * cod_gain I: optimum codebook gain * * Function: * Use optimum codebook gain and update "unquantized" * gain predictor with the (bounded) prediction error * * Prediction error is given by: * * R(n) = E(n) - E_pred(n) = 20 * log(cf), * * where correction factor cf between the gain Gc and * the estimated pne Gc' is given by: * * cf = Gc/Gc'. * * Returns: * void */ static void MR475_update_unq_pred( Word32 *past_qua_en, Float32 gcode0, Float32 cod_gain ) { Float32 qua_ener, pred_err_fact; Word32 i, index, energy, max, s; if ( cod_gain <= 0 ) { /*MIN_QUA_ENER*/ qua_ener = -32.0F; } else { if (gcode0 != 0) { pred_err_fact = cod_gain / gcode0; } else { pred_err_fact = 10.0F; } if ( pred_err_fact < 0.0251189F ) { /*MIN_QUA_ENER*/ qua_ener = -32.0F; } else if ( pred_err_fact > 7.8125F ) { /*MAX_QUA_ENER*/ qua_ener = 17.8558F; } else { qua_ener = ( Float32 )( 20.0F*log10( pred_err_fact ) ); } } energy = (Word32)(qua_ener * 1024 + 0.5F); max = abs(energy - qua_gain_code[0]); index = 0; /* find match from table */ for ( i = 1; i < NB_QUA_CODE+VQ_SIZE_HIGHRATES+VQ_SIZE_LOWRATES+MR475_VQ_SIZE*2+3; i++ ) { s = abs(energy - qua_gain_code[i]); if (s < max){ max = s; index = i; if (s == 0) { break; } } } /* update MA predictor memory */ for ( i = 3; i > 0; i-- ) { past_qua_en[i] = past_qua_en[i - 1]; } past_qua_en[0] = index; } /* * MR475_gain_quant * * * Parameters: * past_qua_en B: MA predictor memory, 20*log10(qua_err) * sf0_gcode0_exp(fra) I: predicted CB gain from subframe 0 (or 2) * sf0_coeff I: energy coeff. from subframe 0 (or 2) * sf0_target_en I: target energy from subframe 0 (or 2) * sf1_code_nosharp I: innovative codebook vector (L_SUBFR) * (without pitch sharpening) * from subframe 1 (or 3) * sf1_gcode0_exp(fra) I: predicted CB gain from subframe 1 (or 3) * sf1_coeff I: energy coeff. subframe 1 (or 3) * sf1_target_en I: target energy from subframe 1 (or 3) * gp_limit I: pitch gain limit * sf0_gain_pit O: Pitch gain subframe 0 (or 2) * sf0_gain_cod O: Code gain subframe 0 (or 2) * sf1_gain_pit O: Pitch gain subframe 1 (or 3) * sf1_gain_cod O: Code gain subframe 1 (or 3) * * Function: * Quantization of pitch and codebook gains for two subframes * (using predicted codebook gain) * * Returns: * index index of quantization */ static Word16 MR475_gain_quant( Word32 *past_qua_en, Word32 sf0_gcode0_exp, Word32 sf0_gcode0_fra, Float32 sf0_coeff[], Float32 sf0_target_en, Float32 sf1_code_nosharp[], Word32 sf1_gcode0_exp, Word32 sf1_gcode0_fra, Float32 sf1_coeff[], Float32 sf1_target_en, Float32 gp_limit, Float32 *sf0_gain_pit, Float32 *sf0_gain_cod, Float32 *sf1_gain_pit, Float32 *sf1_gain_cod ) { Float32 temp, temp2, g_pitch, g2_pitch, g_code, g2_code, g_pit_cod, dist_min, sf0_gcode0, sf1_gcode0; const Float32 *p; Word32 i, tmp, g_code_tmp, gcode0, index = 0; sf0_gcode0 = (Float32)Pow2(sf0_gcode0_exp, sf0_gcode0_fra); sf1_gcode0 = (Float32)Pow2(sf1_gcode0_exp, sf1_gcode0_fra); if ( ( sf0_target_en * 2.0F ) < sf1_target_en ) { sf0_coeff[0] *= 2.0F; sf0_coeff[1] *= 2.0F; sf0_coeff[2] *= 2.0F; sf0_coeff[3] *= 2.0F; sf0_coeff[4] *= 2.0F; } else if ( sf0_target_en > ( sf1_target_en * 4.0F ) ) { sf1_coeff[0] *= 2.0F; sf1_coeff[1] *= 2.0F; sf1_coeff[2] *= 2.0F; sf1_coeff[3] *= 2.0F; sf1_coeff[4] *= 2.0F; } /* * Codebook search: * For each pair (g_pitch, g_fac) in the table calculate the * terms t[0..4] and sum them up; the result is the mean squared * error for the quantized gains from the table. The index for the * minimum MSE is stored and finally used to retrieve the quantized * gains */ dist_min = FLT_MAX; p = &table_gain_MR475[0]; for ( i = 0; i < MR475_VQ_SIZE; i++ ) { /* subframe 0 (and 2) calculations */ g_pitch = *p++; g_code = *p++; g_code *= sf0_gcode0; g2_pitch = g_pitch * g_pitch; g2_code = g_code * g_code; g_pit_cod = g_code * g_pitch; temp = sf0_coeff[0] * g2_pitch; temp += sf0_coeff[1] * g_pitch; temp += sf0_coeff[2] * g2_code; temp += sf0_coeff[3] * g_code; temp += sf0_coeff[4] * g_pit_cod; temp2 = g_pitch - gp_limit; /* subframe 1 (and 3) calculations */ g_pitch = *p++; g_code = *p++; if ( temp2 <= 0 && ( g_pitch <= gp_limit ) ) { g_code *= sf1_gcode0; g2_pitch = g_pitch * g_pitch; g2_code = g_code * g_code; g_pit_cod = g_code * g_pitch; temp += sf1_coeff[0] * g2_pitch; temp += sf1_coeff[1] * g_pitch; temp += sf1_coeff[2] * g2_code; temp += sf1_coeff[3] * g_code; temp += sf1_coeff[4] * g_pit_cod; /* * store table index if MSE for this index is lower * than the minimum MSE seen so far */ if ( temp < dist_min ) { dist_min = temp; index = i; } } } /* * read quantized gains and update MA predictor memories * * for subframe 0, the pre-calculated gcode0 is the same * as one calculated from the "real" predictor using quantized gains */ tmp = index << 2; p = &table_gain_MR475[tmp]; *sf0_gain_pit = *p++; g_code_tmp = (Word32)(*p++ * 4096 + 0.5F); gcode0 = Pow2( 14, sf0_gcode0_fra ); if ( sf0_gcode0_exp < 11 ) { *sf0_gain_cod = (Float32)(( g_code_tmp * gcode0 ) >> ( 25 - sf0_gcode0_exp )); } else { i = ( ( g_code_tmp * gcode0 ) << ( sf0_gcode0_exp - 9 ) ); if ( ( i >> ( sf0_gcode0_exp - 9 ) ) != ( g_code_tmp * gcode0 ) ) { *sf0_gain_cod = (Float32)0x7FFF; } else { *sf0_gain_cod = (Float32)(i >> 16); } } *sf0_gain_cod *= 0.5F; for ( i = 3; i > 0; i-- ) { past_qua_en[i] = past_qua_en[i - 1]; } past_qua_en[0] = NB_QUA_CODE+VQ_SIZE_HIGHRATES+VQ_SIZE_LOWRATES + (index << 1); /* * calculate new predicted gain for subframe 1 (this time using * the real, quantized gains) */ gc_pred( past_qua_en, MR475, sf1_code_nosharp, &sf1_gcode0_exp, &sf1_gcode0_fra, &sf0_gcode0 ); tmp += 2; p = &table_gain_MR475[tmp]; *sf1_gain_pit = *p++; g_code_tmp = (Word32)(*p++ * 4096 + 0.5F); gcode0 = Pow2( 14, sf1_gcode0_fra ); if ( sf1_gcode0_exp < 11 ) { *sf1_gain_cod = (Float32)(( g_code_tmp * gcode0 ) >> ( 25 - sf1_gcode0_exp )); } else { i = ( ( g_code_tmp * gcode0 ) << ( sf1_gcode0_exp - 9 ) ); if ( ( i >> ( sf1_gcode0_exp - 9 ) ) != ( g_code_tmp * gcode0 ) ) { *sf1_gain_cod = (Float32)0x7FFF; } else { *sf1_gain_cod = (Float32)(i >> 16); } } *sf1_gain_cod *= 0.5F; for ( i = 3; i > 0; i-- ) { past_qua_en[i] = past_qua_en[i - 1]; } past_qua_en[0] = NB_QUA_CODE+VQ_SIZE_HIGHRATES+VQ_SIZE_LOWRATES + (index << 1) + 1; return( Word16 )index; } /* * q_gain_code * * * Parameters: * gcode0 I: predicted CB gain * gain B: quantized fixed codebook gain * qua_ener_index O: quantized energy error index * * Function: * Scalar quantization of the innovative codebook gain. * * A correction factor between the gain gc and the estimated one gc' * is given by: * * cf = gc/gc' * * The quantization table search is performed by minimizing the error: * * Eq = POW[gc - cf' * gc', 2] * * Once the optimum value cf' is chosen, * the quantified fixed codebook gain is given by * * gc_q = cf' * gc' * * Returns: * index quantization index */ static Word16 q_gain_code( Float32 gcode0, Float32 *gain, Word32 *qua_ener_index) { Float64 err_min, err; const Float32 *p; Word32 i, index; p = &gain_factor[0]; /* using abs instead pow */ err_min = fabs( *gain - ( gcode0 * *p++ ) ); index = 0; for ( i = 1; i < NB_QUA_CODE; i++ ) { err = fabs( *gain - ( gcode0 * *p++ ) ); if ( err < err_min ) { err_min = err; index = i; } } p = &gain_factor[index]; *gain = (Float32)floor(gcode0 * *p); *qua_ener_index = index; return( Word16 )index; } /* * MR795_gain_code_quant3 * * * Parameters: * gcode0 I: Predicted CB gain * g_pitch_cand I: Pitch gain candidates (3) * g_pitch_cind I: Pitch gain cand. indices (3) * coeff I: Energy coefficients * gain_pit O: Pitch gain * gain_pit_ind O: Pitch gain index * gain_cod O: Code gain * gain_cod_ind O: Code gain index * qua_ener_index O: quantized energy error index * * Function: * Pre-quantization of codebook gains, given three possible * LTP gains (using predicted codebook gain) * * Returns: * void */ static void MR795_gain_code_quant3( Word32 gcode0_exp, Word32 gcode0_fra, Float32 g_pitch_cand[], Word32 g_pitch_cind[], Float32 coeff[], Float32 *gain_pit, Word32 * gain_pit_ind, Float32 *gain_cod, Word32 *gain_cod_ind, Word32 *qua_ener_index ) { Float32 gcode0, dist_min, g_pitch, g2_pitch, g_code, g2_code, g_pit_cod, tmp0, tmp; const Float32 *p; Word32 i, j, cod_ind, pit_ind, g_code0, g_code_tmp; gcode0 = (Float32)Pow2( gcode0_exp, gcode0_fra); /* * The error energy (sum) to be minimized consists of five terms, t[0..4]. * * t[0] = gp^2 * * t[1] = -2*gp * * t[2] = gc^2 * * t[3] = -2*gc * * t[4] = 2*gp*gc * */ /* * Codebook search: * For each of the candiates LTP gains in g_pitch_cand[], the terms * t[0..4] are calculated from the values in the table (and the * pitch gain candidate) and summed up; the result is the mean * squared error for the LPT/CB gain pair. The index for the mini- * mum MSE is stored and finally used to retrieve the quantized CB * gain */ dist_min = FLT_MAX; cod_ind = 0; pit_ind = 0; /* loop through LTP gain candidates */ for ( j = 0; j < 3; j++ ) { /* pre-calculate terms only dependent on pitch gain */ g_pitch = g_pitch_cand[j]; g2_pitch = g_pitch * g_pitch; tmp0 = coeff[0] * g2_pitch; tmp0 += coeff[1] * g_pitch; p = &gain_factor[0]; for ( i = 0; i < NB_QUA_CODE; i++ ) { /* this is g_fac */ g_code = *p++; g_code = g_code * gcode0; g2_code = g_code * g_code; g_pit_cod = g_code * g_pitch; tmp = tmp0 + coeff[2] * g2_code; tmp += coeff[3] * g_code; tmp += coeff[4] * g_pit_cod; /* * store table index if MSE for this index is lower * than the minimum MSE seen so far; also store the * pitch gain for this (so far) lowest MSE */ if ( tmp < dist_min ) { dist_min = tmp; cod_ind = i; pit_ind = j; } } } /* * read quantized gains and new values for MA predictor memories */ p = &gain_factor[cod_ind]; g_code_tmp = (Word32)(2048 * *p); *qua_ener_index = cod_ind; /* * calculate final fixed codebook gain: * gc = gc0 * g */ g_code0 = Pow2( 14, gcode0_fra); i = ( g_code_tmp * g_code0 ) << 1; gcode0_exp = 9 - gcode0_exp; if ( gcode0_exp > 0 ) i = i >> gcode0_exp; else i = i << ( -gcode0_exp ); *gain_cod = (Float32)(i >> 16); if (*gain_cod > 32767) *gain_cod = 32767; *gain_cod *= 0.5F; *gain_cod_ind = ( Word16 )cod_ind; *gain_pit = g_pitch_cand[pit_ind]; *gain_pit_ind = g_pitch_cind[pit_ind]; } /* * calc_unfilt_energies * * * Parameters: * res I: LP residual * exc I: LTP excitation (unfiltered) * code I: CB innovation (unfiltered) * gain_pit I: pitch gain * en O: energy coefficients [4] * ltpg O: LTP coding gain (log2()) * * Function: * Calculation of several energy coefficients for unfiltered * excitation signals and the LTP coding gain * * en[0] = LP residual energy * en[1] = LTP residual energy * en[2] = LTP/CB innovation dot product * en[3] = LTP residual energy * (lres = res - gain_pit*exc) * ltpg = log2(LP_res_en / LTP_res_en) * * Returns: * void */ static void calc_unfilt_energies(Float32 res[], Float32 exc[], Float32 code[], Float32 gain_pit, Float32 en[], Float32 *ltpg) { Float32 sum, pred_gain; Word32 i; /* Compute residual energy */ en[0] = (Float32)Dotproduct40( res, res ); /* ResEn := 0 if ResEn < 200.0 */ if (en[0] < 200) { en[0] = 0; } /* Compute ltp excitation energy */ en[1] = (Float32)Dotproduct40(exc, exc); /* Compute scalar product */ en[2] = (Float32)Dotproduct40(exc, code); /* Compute energy of LTP residual */ en[3] = 0; for (i = 0; i < L_SUBFR; i++) { /* LTP residual */ sum = res[i] - ( exc[i] * gain_pit ); en[3] += sum * sum; } /* calculate LTP coding gain, i.e. energy reduction LP res -> LTP res */ if (en[3] > 0 && en[0] != 0) { /* gain = ResEn / LTPResEn */ pred_gain = en[0] / en[3]; *ltpg = ( Float32 )( log10( pred_gain ) / log10( 2 ) ); } else { *ltpg = 0; } } /* * gmed_n_f * * * Parameters: * ind I: values * n I: The number of gains * * Function: * Calculates N-point median (float). * * Returns: * index of the median value */ static Float32 gmed_n_f( Float32 ind[], Word16 n ) { Word32 medianIndex; Word32 i, j, ix = 0; Word32 tmp[9]; Float32 tmp2[9]; Float32 max; for ( i = 0; i < n; i++ ) { tmp2[i] = ind[i]; } for ( i = 0; i < n; i++ ) { max = -FLT_MAX; for ( j = 0; j < n; j++ ) { if ( tmp2[j] >= max ) { max = tmp2[j]; ix = j; } } tmp2[ix] = -FLT_MAX; tmp[i] = ix; } medianIndex = tmp[n >> 1]; return( ind[medianIndex] ); } /* * gain_adapt * * * Parameters: * prev_gc B: previous code gain * onset B: onset indicator * ltpg_mem B: stored past LTP coding gains * prev_alpha B: revious gain adaptation factor * ltpg I: ltp coding gain (log2()) * gain_cod I: code gain * alpha O: gain adaptation factor * * Function: * Calculate pitch/codebook gain adaptation factor alpha * (and update the adaptor state) * * If the coding gain ag is less than 1 dB, the modified criterion is * employed, except when an onset is detected. An onset is said to be * detected if the fixed codebook gain in the current subframe is more * than twice the value of the fixed codebook gain in the previous * subframe. A hangover of 8 subframes is used in the onset detection * so that the modified criterion is not used for the next 7 subframes * either if an onset is detected. The balance factor a is computed from * the median filtered adaptive coding gain. The current and * the ag-values for the previous 4 subframes are median filtered to get * agm. The a-factor is computed by: * * / 0 , 2 < agm * a = 0.5 * (1 - 0.5 * agm) , 0 < agm < 2 * \ 0.5 , agm < 0 * * Returns: * void */ static void gain_adapt( Float32 *prev_gc, Word16 *onset, Float32 *ltpg_mem, Float32 *prev_alpha, Float32 ltpg, Float32 gain_cod, Float32 *alpha ) { Float32 result, filt; /* alpha factor, median-filtered LTP coding gain */ Word32 i; Word16 adapt; /* adaptdation status; 0, 1, or 2 */ /* basic adaptation */ if ( ltpg <= 0.3321928F /*LTP_GAIN_THR1*/ ) { adapt = 0; } else { if ( ltpg <= 0.6643856 /*LTP_GAIN_THR2*/ ) { adapt = 1; } else { adapt = 2; } } /* * onset indicator: */ if ( ( gain_cod > 2.0F * *prev_gc ) && ( gain_cod > 100 ) ) { *onset = 8; } else { if ( *onset != 0 ) { (*onset)--; } } /* * if onset, increase adaptor state */ if ( ( *onset != 0 ) && ( adapt < 2 ) ) { adapt++; } ltpg_mem[0] = ltpg; filt = gmed_n_f( ltpg_mem, 5 ); if ( adapt == 0 ) { if ( filt > 0.66443 ) { result = 0; } else { if ( filt < 0 ) { result = 0.5; } else { result = ( Float32 )( 0.5-0.75257499*filt ); } } } else { result = 0; } /* * if (prev_alpha == 0.0) result = 0.5 * (result + prev_alpha); */ if ( *prev_alpha == 0 ) { result = 0.5F * result; } /* store the result */ *alpha = result; /* update adapter state memory */ *prev_alpha = result; *prev_gc = gain_cod; for ( i = LTPG_MEM_SIZE - 1; i > 0; i-- ) { ltpg_mem[i] = ltpg_mem[i - 1]; } /* mem[0] is just present for convenience in calling the gmed_n[5] * function above. The memory depth is really LTPG_MEM_SIZE-1. */ } /* * MR795_gain_code_quant_mod * * * Parameters: * gain_pit I: Pitch gain * gcode0 I: Predicted CB gain * en I: energy coefficients * alpha I: gain adaptation factor * gain_cod_unq I: Code gain (unquantized) * gain_cod I: Code gain * qua_ener_index O: quantized energy error index * * Function: * Modified quantization of the MR795 codebook gain * * Uses pre-computed energy coefficients in frac_en[]/exp_en[] * * frac_en[0]*2^exp_en[0] = LP residual energy * frac_en[1]*2^exp_en[1] = LTP residual energy * frac_en[2]*2^exp_en[2] = LTP/CB innovation dot product * frac_en[3]*2^exp_en[3] = CB innovation energy * * Returns: * index codebook index */ static Word16 MR795_gain_code_quant_mod( Float32 gain_pit, Word32 gcode0_exp, Word32 gcode0_fra, Float32 en[], Float32 alpha, Float32 gain_cod_unq, Float32 *gain_cod, Word32 *qua_ener_index ) { Float32 coeff[5]; Float32 gcode0, g2_pitch, g_code, g2_code, d2_code, dist_min, gain_code, tmp; const Float32 *p; Word32 i, index, g_code_tmp, g_code0; gcode0 = (Float32)Pow2(gcode0_exp, gcode0_fra); gain_code = *gain_cod; g2_pitch = gain_pit * gain_pit; coeff[0] = ( Float32 )( sqrt( alpha * en[0] ) ); coeff[1] = alpha * en[1] * g2_pitch; coeff[2] = 2.0F * alpha * en[2] * gain_pit; coeff[3] = alpha * en[3]; coeff[4] = ( 1.0F - alpha ) * en[3]; /* search the quantizer table for the lowest value of the search criterion */ dist_min = FLT_MAX; index = 0; p = &gain_factor[0]; for ( i = 0; i < NB_QUA_CODE; i++ ) { /* this is g_fac */ g_code = *p++; g_code = g_code * gcode0; /* * only continue if gc[i] < 2.0*gc */ if ( g_code >= ( 2.0F * gain_code ) ) break; g2_code = g_code * g_code; d2_code = g_code - gain_cod_unq; d2_code = d2_code * d2_code; tmp = coeff[1] + coeff[2] * g_code; tmp += coeff[3] * g2_code; tmp = ( Float32 )sqrt( tmp ); tmp = tmp - coeff[0]; tmp = tmp * tmp; tmp += coeff[4] * d2_code; /* * store table index if distance measure for this * index is lower than the minimum seen so far */ if ( tmp < dist_min ) { dist_min = tmp; index = i; } } /* * read quantized gains and new values for MA predictor memories */ p = &gain_factor[index]; g_code_tmp = (Word32)(2048 * *p); *qua_ener_index = index; /* calculate final fixed codebook gain: * gc = gc0 * g */ g_code0 = Pow2( 14, gcode0_fra); i = ( g_code_tmp * g_code0 ) << 1; gcode0_exp = 9 - gcode0_exp; if ( gcode0_exp > 0 ) i = i >> gcode0_exp; else i = i << ( -gcode0_exp ); *gain_cod = (Float32)(i >> 16); if (*gain_cod > 32767) *gain_cod = 32767; *gain_cod *= 0.5F; return( Word16 )index; } /* * MR795_gain_quant * * * Parameters: * prev_gc B: previous code gain * onset B: onset indicator * ltpg_mem B: stored past LTP coding gains * prev_alpha B: previous gain adaptation factor * res I: LP residual * exc I: LTP excitation (unfiltered) * code I: CB innovation (unfiltered) * coeff I: energy coefficients (5) * code_en I: innovation energy * gcode0 I: predicted CB gain * cod_gain I: codebook gain * gp_limit I: pitch gain limit * gain_pit B: Pitch gain * gain_cod O: Code gain * qua_ener O: quantized energy error * anap O: Index of quantization * gain_pit I: Pitch gain * gcode0 I: Predicted CB gain * en I: energy coefficients * alpha I: gain adaptation factor * gain_cod_unq I: Code gain (unquantized) * gain_cod I: Code gain * qua_ener O: quantized energy error_index * * Function: * Pitch and codebook quantization for MR795 * * Returns: * void */ static void MR795_gain_quant( Float32 *prev_gc, Word16 *onset, Float32 *ltpg_mem , Float32 *prev_alpha, Float32 res[], Float32 exc[], Float32 code[], Float32 coeff[], Float32 code_en, Word32 gcode0_exp, Word32 gcode0_fra, Float32 cod_gain, Float32 gp_limit, Float32 *gain_pit, Float32 *gain_cod, Word32 *qua_ener_index, Word16 **anap ) { Float32 en[4], g_pitch_cand[3]; Float32 ltpg, alpha, gain_cod_unq; /* code gain (unq.) */ Word32 g_pitch_cind[3]; /* pitch gain indices */ Word32 gain_pit_index, gain_cod_index; /* * get list of candidate quantized pitch gain values * and corresponding quantization indices */ gain_pit_index = q_gain_pitch(MR795, gp_limit, gain_pit, g_pitch_cand, g_pitch_cind); /* * pre-quantization of codebook gain * (using three pitch gain candidates); * result: best guess of pitch gain and code gain */ MR795_gain_code_quant3(gcode0_exp, gcode0_fra, g_pitch_cand, g_pitch_cind, coeff, gain_pit, &gain_pit_index, gain_cod, &gain_cod_index, qua_ener_index); /* calculation of energy coefficients and LTP coding gain */ calc_unfilt_energies(res, exc, code, *gain_pit, en, <pg); /* * run gain adaptor, calculate alpha factor to balance LTP/CB gain * (this includes the gain adaptor update) */ gain_adapt(prev_gc, onset, ltpg_mem, prev_alpha, ltpg, *gain_cod, &alpha); /* * if this is a very low energy signal (threshold: see * calc_unfilt_energies) or alpha <= 0 then don't run the modified quantizer */ if ((en[0] != 0) && (alpha > 0)) { /* * innovation energy was already computed in gc_pred() * (this overwrites the LtpResEn which is no longer needed) */ en[3] = code_en; /* * store optimum codebook gain */ gain_cod_unq = cod_gain; /* run quantization with modified criterion */ gain_cod_index = MR795_gain_code_quant_mod(*gain_pit, gcode0_exp, gcode0_fra, en, alpha, gain_cod_unq, gain_cod, qua_ener_index ); } *(*anap)++ = (Word16)gain_pit_index; *(*anap)++ = (Word16)gain_cod_index; } /* * Qua_gain * * * Parameters: * mode I: AMR mode * gcode0 I: predicted CB gain * coeff I: energy coefficients (5) * gp_limit I: pitch gain limit * gain_pit O: Pitch gain * gain_cod O: Code gain * qua_ener_index O: quantized energy error index * * Function: * Quantization of pitch and codebook gains (using predicted codebook gain) * * Returns: * index index of quantization */ static Word16 Qua_gain( enum Mode mode, Word32 gcode0_exp, Word32 gcode0_fra, Float32 coeff[], Float32 gp_limit, Float32 *gain_pit, Float32 *gain_cod, Word32 *qua_ener_index) { Float32 g_pitch, g2_pitch, g_code, g2_code, g_pit_cod, tmp, dist_min, gcode0; const Float32 *table_gain, *p; Word32 i, index = 0, gcode_0, g_code_tmp; Word16 table_len; gcode0 = (Float32)Pow2( gcode0_exp, gcode0_fra ); if ( ( mode == MR102 ) || ( mode == MR74 ) || ( mode == MR67 ) ) { table_len = VQ_SIZE_HIGHRATES; table_gain = table_highrates; *qua_ener_index = NB_QUA_CODE; } else { table_len = VQ_SIZE_LOWRATES; table_gain = table_lowrates; *qua_ener_index = NB_QUA_CODE + VQ_SIZE_HIGHRATES; } /* * Codebook search: * For each pair (g_pitch, g_fac) in the table calculate the * terms t[0..4] and sum them up; the result is the mean squared * error for the quantized gains from the table. The index for the * minimum MSE is stored and finally used to retrieve the quantized * gains */ dist_min = FLT_MAX; p = &table_gain[0]; for ( i = 0; i < table_len; i++ ) { g_pitch = *p++; /* this is g_fac */ g_code = *p++; if ( g_pitch <= gp_limit ) { g_code *= gcode0; g2_pitch = g_pitch * g_pitch; g2_code = g_code * g_code; g_pit_cod = g_code * g_pitch; tmp = coeff[0] * g2_pitch; tmp += coeff[1] * g_pitch; tmp += coeff[2] * g2_code; tmp += coeff[3] * g_code; tmp += coeff[4] * g_pit_cod; /* * store table index if MSE for this index is lower * than the minimum MSE seen so far */ if ( tmp < dist_min ) { dist_min = tmp; index = i; } } } /* * read quantized gains and new values for MA predictor memories */ p = &table_gain[index << 1]; *gain_pit = *p++; g_code_tmp = (Word32)(4096 * *p); /* * calculate final fixed codebook gain: * gc = gc0 * g */ gcode_0 = Pow2( 14, gcode0_fra ); if ( gcode0_exp < 11 ) { *gain_cod = (Float32)((g_code_tmp * gcode_0) >> ( 25 - gcode0_exp )); } else { i = ( ( g_code_tmp * gcode_0) << ( gcode0_exp - 9 ) ); if ( ( i >> ( gcode0_exp - 9 ) ) != ( g_code_tmp * gcode_0) ) { *gain_cod = 0x7FFF; } else { *gain_cod = (Float32)(i >> 16); } } *gain_cod = *gain_cod * 0.5F; *qua_ener_index += index; return( Word16 )index; } /* * gainQuant * * * Parameters: * gcode0 I: predicted CB gain * coeff I: energy coefficients (5) * gp_limit I: pitch gain limit * gain_pit O: Pitch gain * gain_cod O: Code gain * qua_ener O: quantized energy error, * mode I: AMR mode * even_subframe I: even subframe indicator flag * past_qua_en B: past quantized energies [4] * past_qua_en_unq B: past energies [4] * sf0_coeff B: energy coefficients subframe 0 (or 2) * sf0_target_en B: target energy from subframe 0 (or 2) * sf0_gcode0 B: predicted gain factor subframe 0 (or 2) * gain_idx_ptr B: gain index pointer * sf0_gain_pit B: Pitch gain subframe 0 (or 2) * sf0_gain_cod B: Code gain subframe 0 (or 2) * res I: LP residual * exc I: LTP excitation (unfiltered) * code I: innovative codebook vector * xn I: Target vector * xn2 I: CB target vector * y1 I: Adaptive codebook * y2 I: Filtered innovative vector * gCoeff I: Correlations * gp_limit I: pitch gain limit * gain_pit O: Pitch gain * gain_cod O: Code gain * prev_gc B: B: previous code gain * onset B: onset indicator * ltpg_mem B: stored past LTP coding gains * prev_alpha B: previous gain adaptation factor * anap B: Index of quantization * * Function: * Quantization of gains * * Returns: * index index of quantization */ static void gainQuant( enum Mode mode, Word32 even_subframe, Word32 * past_qua_en, Word32 *past_qua_en_unq, Float32 *sf0_coeff, Float32 * sf0_target_en, Word32 *sf0_gcode0_exp, Word32 *sf0_gcode0_fra,Word16 **gain_idx_ptr, Float32 * sf0_gain_pit, Float32 *sf0_gain_cod, Float32 *res, Float32 *exc, Float32 code[], Float32 xn[], Float32 xn2[], Float32 y1[], Float32 y2[], Float32 gCoeff[], Float32 gp_limit, Float32 *gain_pit, Float32 *gain_cod, Float32 *prev_gc, Word16 *onset, Float32 *ltpg_mem, Float32 *prev_alpha, Word16 ** anap ) { Float32 coeff[5]; Float32 gcode0, cod_gain, en = 0; Word32 i, exp, frac, qua_ener_index; if ( mode == MR475 ) { if ( even_subframe != 0 ) { /* * save position in output parameter stream and current * state of codebook gain predictor */ *gain_idx_ptr = ( *anap )++; past_qua_en_unq[0] = past_qua_en[0]; past_qua_en_unq[1] = past_qua_en[1]; past_qua_en_unq[2] = past_qua_en[2]; past_qua_en_unq[3] = past_qua_en[3]; /* * predict codebook gain (using "unquantized" predictor) * (note that code[] is unsharpened in MR475) */ gc_pred( past_qua_en, mode, code, sf0_gcode0_exp, sf0_gcode0_fra, &en ); gcode0 = (Float32)Pow2(*sf0_gcode0_exp, *sf0_gcode0_fra); /* * calculate energy coefficients for quantization * and store them in state structure (will be used * in next subframe when real quantizer is run) */ calc_filt_energies( mode, xn, xn2, y1, y2, gCoeff, sf0_coeff, &cod_gain); /* store optimum codebook gain */ *gain_cod = cod_gain; *sf0_target_en = (Float32)Dotproduct40( xn, xn ); /* * calculate optimum codebook gain and update * "unquantized" predictor */ MR475_update_unq_pred( past_qua_en_unq, gcode0, cod_gain ); /* the real quantizer is not run here... */ } else { /* * predict codebook gain (using "unquantized" predictor) * (note that code[] is unsharpened in MR475) */ gc_pred( past_qua_en_unq, mode, code, &exp, &frac, &en ); /* calculate energy coefficients for quantization */ calc_filt_energies( mode, xn, xn2, y1, y2, gCoeff, coeff, &cod_gain ); en = (Float32)Dotproduct40( xn, xn ); /* run real (4-dim) quantizer and update real gain predictor */ **gain_idx_ptr = MR475_gain_quant( past_qua_en, *sf0_gcode0_exp, *sf0_gcode0_fra, sf0_coeff, *sf0_target_en, code, exp, frac, coeff, en, gp_limit, sf0_gain_pit, sf0_gain_cod, gain_pit, gain_cod ); } } else { /* * predict codebook gain and quantize * (also compute normalized CB innovation energy for MR795) */ gc_pred( past_qua_en, mode, code, &exp, &frac, &en ); if ( mode == MR122 ) { /* * Compute the innovative codebook gain. * The innovative codebook gain is given by * g = / * where xn2[] is the target vector, * y2[] is the filtered innovative * codevector */ gcode0 = (Float32)Pow2( exp, frac ); /* saturation at decoder */ if (gcode0 > 2047.9375F) gcode0 = 2047.9375F; *gain_cod = (Float32)(Dotproduct40( xn2, y2 ) / ( Dotproduct40( y2, y2 )+ 0.01F )); if ( *gain_cod < 0 ) *gain_cod = 0.0F; *( *anap )++ = q_gain_code( gcode0, gain_cod,&qua_ener_index); } else { /* calculate energy coefficients for quantization */ calc_filt_energies( mode, xn, xn2, y1, y2, gCoeff, coeff, &cod_gain ); if ( mode == MR795 ) { MR795_gain_quant( prev_gc, onset, ltpg_mem, prev_alpha, res, exc, code, coeff, en, exp, frac , cod_gain, gp_limit, gain_pit, gain_cod, &qua_ener_index, anap ); } else { *( *anap )++ = Qua_gain( mode, exp, frac, coeff, gp_limit, gain_pit, gain_cod, &qua_ener_index); } } /* * update table of past quantized energies */ for ( i = 3; i > 0; i-- ) { past_qua_en[i] = past_qua_en[i - 1]; } past_qua_en[0] = qua_ener_index; } } /* * subframePostProc * * * Parameters: * speech I: Speech segment * i_subfr I: Subframe number * gain_pit I: Pitch gain * gain_code I: Decoded innovation gain * a_q I: A(z) quantized for the 4 subframes * synth I: Local synthesis * xn I: Target vector for pitch search * code I: Fixed codebook exitation * y1 I: Filtered adaptive exitation * y2 I: Filtered fixed codebook excitation * mem_syn B: memory of synthesis filter * mem_err O: pointer to error signal * mem_w0 O: memory of weighting filter * exc O: long term prediction residual * sharp O: pitch sharpening value * * Function: * Subframe post processing * * Memory update (all modes) * An update of the states of the synthesis and weighting filters is needed * in order to compute the target signal in the next subframe. * After the two gains are quantified, the excitation signal, u(n), * in the present subframe is found by: * * u(n) = Gp_q * v(n) + Gc_q * c(n), n = 0, ..., 39, * * where Gp_q and Gc_q are the quantified adaptive and fixed codebook gains, * respectively, v(n) the adaptive codebook vector * (interpolated past excitation), and c(n) is the fixed codebook vector * (algebraic code including pitch sharpening). The states of the filters * can be updated by filtering the signal res_lp(n) - u(n) * (difference between residual and excitation) through the filters * 1 / A_q(z) and A(z/g1) / A(z/g2) for the 40-sample subframe and saving * the states of the filters. This would require 3 filterings. * A simpler approach which requires only one filtering is as follows. * The local synthesized speech, S_s(n), is computed by filtering * the excitation signal through 1 / A_q(z). The output of the filter * due to the input res_lp(n) - u(n) is equivalent to e(n) = S(n) - S_s(n). * So the states of the synthesis filter 1 / A_q(z) are given by * e(n), n = 30, ..., 39. Updating the states of the filter A(z/g1) / A(z/g2) * can be done by filtering the error signal e(n) through this filter * to find the perceptually weighted error ew(n). However, the signal ew(n) * can be equivalently found by: * * ew(n) = x(n) - Gp_q * y(n) - Gc_q(n) * z(n) * * Since the signals x(n), y(n) and z(n) are available, the states of * the weighting filter are updated by computing ew(n) for n = 30, ..., 39. * This saves two filterings. * * Returns: * void */ static void subframePostProc( Float32 *speech, Word16 i_subfr, Float32 gain_pit, Float32 gain_code, Float32 *a_q, Float32 synth[], Float32 xn[], Float32 code[], Float32 y1[], Float32 y2[], Float32 *mem_syn, Float32 *mem_err, Float32 *mem_w0, Float32 *exc, Float32 *sharp ) { Word32 i, j; /* * Update pitch sharpening "sharp" with quantized gain_pit */ *sharp = gain_pit; if ( *sharp > 0.794556F ) { *sharp = 0.794556F; } /* Find the total excitation */ for ( i = 0; i < L_SUBFR; i += 4 ) { exc[i + i_subfr] = (Float32)floor((gain_pit * exc[i + i_subfr] + gain_code * code[i]) + 0.5F); exc[i + i_subfr + 1] = (Float32)floor((gain_pit * exc[i + i_subfr + 1] + gain_code * code[i + 1]) + 0.5F); exc[i + i_subfr + 2] = (Float32)floor((gain_pit * exc[i + i_subfr + 2] + gain_code * code[ i + 2]) + 0.5F); exc[i + i_subfr + 3] = (Float32)floor((gain_pit * exc[i + i_subfr + 3] + gain_code * code[ i + 3]) + 0.5F); } /* The local synthesis speech */ Syn_filt( a_q, &exc[i_subfr], &synth[i_subfr], mem_syn, 1 ); for ( i = L_SUBFR - M, j = 0; i < L_SUBFR; i++, j++ ) { /* e(n) = S(n) - S_s(n) */ mem_err[j] = speech[i_subfr + i] - synth[i_subfr + i]; /* ew(n) = x(n) - Gp_q * y(n) - Gc_q(n) * z(n) */ mem_w0[j] = xn[i] - y1[i] * gain_pit - y2[i] * gain_code; } } /* * Convolve * * * Parameters: * x I: First input * h I: second input * y O: output * * Function: * Convolution * * Returns: * void */ static void Convolve( Float32 x[], Float32 h[], Float32 y[] ) { Word32 i, n; Float32 s; for ( n = 0; n < L_SUBFR; n++ ) { s = 0.0F; for ( i = 0; i <= n; i++ ) { s += x[i] * h[n - i]; } y[n] = s; } return; } /* * tx_dtx_handler * * * Parameters: * vad_flag I:vad decision * decAnaElapsedCount B: state machine that synch with the GSMEFR txDtx machine * dtxHangoverCount B: dtx hangover counter * used_mode O: used mode * * Function: * Adds extra speech hangover to analyze speech on the decoding side * * Returns: * compute_new_sid_possible */ static Word16 tx_dtx_handler( Word16 vad_flag, Word16 *decAnaElapsedCount, Word16 *dtxHangoverCount, enum Mode *used_mode ) { Word16 compute_new_sid_possible; /* this state machine is in synch with the GSMEFR txDtx machine */ *decAnaElapsedCount += 1; compute_new_sid_possible = 0; if ( vad_flag != 0 ) { *dtxHangoverCount = DTX_HANG_CONST; } /* non-speech */ else { /* out of decoder analysis hangover */ if ( *dtxHangoverCount == 0 ) { *decAnaElapsedCount = 0; *used_mode = MRDTX; compute_new_sid_possible = 1; } /* in possible analysis hangover */ else { *dtxHangoverCount -= 1; /* decAnaElapsedCount + dtxHangoverCount < DTX_ELAPSED_FRAMES_THRESH */ if ( ( *decAnaElapsedCount + *dtxHangoverCount ) < DTX_ELAPSED_FRAMES_THRESH ) { *used_mode = MRDTX; /* if short time since decoder update, do not add extra HO */ } /* * else * override VAD and stay in * speech mode *used_mode * and add extra hangover */ } } return compute_new_sid_possible; } /* * dtx_buffer * * * Parameters: * hist_ptr B: Circular buffer pointer * lsp_hist O: LSP history * lsp_new I: LSP vector * speech I: input speech * log_en_hist O: frame energy * * Function: * Handles the DTX buffer * * The frame energy is computed for each frame marked with VAD=0 * according to the equation: * * N-1 * en_log(i) = 0.5 * log2 ( (1 / N) * SUM[ s(n) * s(n) ] ) * N=0 * * where s(n) is the HP-filtered input speech signal of * the current frame i. * * Returns: * void */ static void dtx_buffer( Word16 *hist_ptr, Float32 *lsp_hist, Float32 lsp_new[], Float32 speech[], Float32 *log_en_hist ) { Float64 frame_en; /* update pointer to circular buffer */ *hist_ptr += 1; if ( *hist_ptr == DTX_HIST_SIZE ) { *hist_ptr = 0; } /* copy lsp vector into buffer */ memcpy( &lsp_hist[ * hist_ptr * M], lsp_new, sizeof( Float32 )*M ); /* compute log energy based on frame energy */ frame_en = Dotproduct40( speech, speech ); frame_en += Dotproduct40( &speech[40], &speech[40] ); frame_en += Dotproduct40( &speech[80], &speech[80] ); frame_en += Dotproduct40( &speech[120], &speech[120] ); if ( frame_en > 1 ) { log_en_hist[ * hist_ptr] = ( Float32 )( log10( frame_en * 0.00625F )* 1.660964F ); } else { log_en_hist[ * hist_ptr] = -3.660965F; } } /* * dtx_enc * * * Parameters: * log_en_index O: logarithmic energy quantized * log_en_hist I: history of logarithmic energy * lsp_hist I: history of LSP * lsp_index O: quantization indices of 3 LSP vectors * init_lsf_vq_index O: init index for MA prediction * compute_sid_flag I: SID flag * past_rq I: past quantized residual * past_qua_en O: gain predictor memory * anap O: analysis parameters * * Function: * DTX encoder * * The averaged logarithmic energy is computed by: * * 7 * en_log_mean(i) = (1 / 8) * SUM[ en_log(i - n) ] * n=0 * * The averaged logarithmic energy is quantized means of a 6 bit * algorithmic quantizer. The 6 bits for the energy index are * transmitted in the SID frame. * * Returns: * void */ static Word32 dtx_enc( Word16 *log_en_index, Float32 log_en_hist[], Float32 lsp_hist[], Word16 *lsp_index, Word32 *init_lsf_vq_index, Word16 compute_sid_flag, Float32 past_rq[], Word32 *past_qua_en, Word16 **anap ) { Float32 log_en, lsf[M], lsp[M], lsp_q[M]; Word32 i, j; /* VOX mode computation of SID parameters */ if ( ( compute_sid_flag != 0 ) || ( *log_en_index == 0 ) ) { /* * compute new SID frame if safe i.e don't * compute immediately after a talk spurt */ log_en = 0; memset( lsp, 0, sizeof( Float32 )*M ); /* average energy and lsp */ for ( i = 0; i < DTX_HIST_SIZE; i++ ) { log_en += log_en_hist[i]; for ( j = 0; j < M; j++ ) { lsp[j] += lsp_hist[i * M + j]; } } log_en = log_en * 0.125F; for ( j = 0; j < M; j++ ) { /* divide by 8 */ lsp[j] = lsp[j] * 0.125F; } /* quantize logarithmic energy to 6 bits */ log_en = log_en + 2.5F; *log_en_index = ( Word16 )( ( log_en * 4 ) + 0.5F ); /* 6 bits */ /* *log_en_index = ( Word16 )( ( log_en + 2.5F + 0.125F ) * 4.0F ); */ if ( *log_en_index > 63 ) { *log_en_index = 63; } if ( *log_en_index < 0 ) { *log_en_index = 0; } if (*log_en_index > 46){ past_qua_en[0] = NB_QUA_CODE+VQ_SIZE_HIGHRATES+VQ_SIZE_LOWRATES+(MR475_VQ_SIZE*2) + 46; past_qua_en[1] = NB_QUA_CODE+VQ_SIZE_HIGHRATES+VQ_SIZE_LOWRATES+(MR475_VQ_SIZE*2) + 46; past_qua_en[2] = NB_QUA_CODE+VQ_SIZE_HIGHRATES+VQ_SIZE_LOWRATES+(MR475_VQ_SIZE*2) + 46; past_qua_en[3] = NB_QUA_CODE+VQ_SIZE_HIGHRATES+VQ_SIZE_LOWRATES+(MR475_VQ_SIZE*2) + 46; } else { past_qua_en[0] = NB_QUA_CODE+VQ_SIZE_HIGHRATES+VQ_SIZE_LOWRATES+(MR475_VQ_SIZE*2) + *log_en_index; past_qua_en[1] = NB_QUA_CODE+VQ_SIZE_HIGHRATES+VQ_SIZE_LOWRATES+(MR475_VQ_SIZE*2) + *log_en_index; past_qua_en[2] = NB_QUA_CODE+VQ_SIZE_HIGHRATES+VQ_SIZE_LOWRATES+(MR475_VQ_SIZE*2) + *log_en_index; past_qua_en[3] = NB_QUA_CODE+VQ_SIZE_HIGHRATES+VQ_SIZE_LOWRATES+(MR475_VQ_SIZE*2) + *log_en_index; } /* make sure that LSP's are ordered */ Lsp_lsf( lsp, lsf ); Reorder_lsf( lsf, 0.00625F ); Lsf_lsp( lsf, lsp ); /* Quantize lsp and put on parameter list */ Q_plsf_3( MRDTX, past_rq, lsp, lsp_q, lsp_index, init_lsf_vq_index ); } /* 3 bits */ *( *anap )++ = ( Word16 )*init_lsf_vq_index; /* 8 bits */ *( *anap )++ = lsp_index[0]; /* 9 bits */ *( *anap )++ = lsp_index[1]; /* 9 bits */ *( *anap )++ = lsp_index[2]; /* 6 bits */ *( *anap )++ = *log_en_index; /* = 35 bits */ return 0; } /* * complex_estimate_adapt * * * Parameters: * st->best_corr_hp I: complex background detector * st->corr_hp_fast B: long term complex signal estimate * low_power I: very low level flag of the input frame * * Function: * Update/adapt of complex signal estimate * * Returns: * void */ #ifndef VAD2 static void complex_estimate_adapt( vadState *st, Word16 low_power ) { Float32 alpha; /* adapt speed on own state */ /* decrease */ if ( st->best_corr_hp < st->corr_hp_fast ) { /* low state */ if ( st->corr_hp_fast < CVAD_THRESH_ADAPT_HIGH ) { alpha = CVAD_ADAPT_FAST; } /* high state */ else { alpha = CVAD_ADAPT_REALLY_FAST; } } /* increase */ else { if ( st->corr_hp_fast < CVAD_THRESH_ADAPT_HIGH ) { alpha = CVAD_ADAPT_FAST; } else { alpha = CVAD_ADAPT_SLOW; } } st->corr_hp_fast = st->corr_hp_fast - alpha * st->corr_hp_fast + alpha * st-> best_corr_hp; if ( st->corr_hp_fast < CVAD_MIN_CORR ) { st->corr_hp_fast = CVAD_MIN_CORR; } if ( low_power != 0 ) { st->corr_hp_fast = CVAD_MIN_CORR; } } #endif /* * complex_vad * * * Parameters: * st->complex_high B: 1 if (corr_hp_fast > CVAD_THRESH_ADAPT_HIGH) * st->complex_low B: 1 if (corr_hp_fast > CVAD_THRESH_ADAPT_LOW) * low_power I: flag power of the input frame * st->best_corr_hp I: complex background detector * st->corr_hp_fast B: long term complex signal estimate * st->complex_hang_timer B: complex hang timer * * * Function: * Complex background decision * * Returns: * void */ #ifndef VAD2 static Word32 complex_vad( vadState *st, Word16 low_power ) { st->complex_high = st->complex_high >> 1; st->complex_low = st->complex_low >> 1; if ( low_power == 0 ) { if ( st->corr_hp_fast > CVAD_THRESH_ADAPT_HIGH ) { st->complex_high = st->complex_high | 0x00004000; } if ( st->corr_hp_fast > CVAD_THRESH_ADAPT_LOW ) { st->complex_low = st->complex_low | 0x00004000; } } if ( st->corr_hp_fast > CVAD_THRESH_HANG ) { st->complex_hang_timer += 1; } else { st->complex_hang_timer = 0; } return( Word16 )( ( ( st->complex_high & 0x00007f80 ) == 0x00007f80 ) || ( ( st->complex_low & 0x00007fff ) == 0x00007fff ) ); } #endif /* * complex_vad * * * Parameters: * st->complex_warning I: flags for complex detection * st->stat_count B: stationary counter * st->pitch I: flags for pitch detection * st->tone I: flags indicating presence of a tone * st->vadreg I: intermediate VAD flags * level I: sub-band levels of the input frame * st->ave_level B: Average amplitude estimate * * Function: * Control update of the background noise estimate * * Returns: * void */ #ifndef VAD2 static void update_cntrl( vadState *st, Float32 level[] ) { Float32 stat_rat, num, denom; Float32 alpha; Word32 i; /* * handle highband complex signal input separately * if ther has been highband correlation for some time * make sure that the VAD update speed is low for a while */ if ( st->complex_warning != 0 ) { if ( st->stat_count < CAD_MIN_STAT_COUNT ) { st->stat_count = CAD_MIN_STAT_COUNT; } } /* * NB stat_count is allowed to be decreased by one below again * deadlock in speech is not possible unless the signal is very * complex and need a high rate * if fullband pitch or tone have been detected for a while, initialize stat_count */ if ( ( ( st->pitch & 0x6000 ) == 0x6000 ) || ( ( st->tone & 0x00007c00 ) == 0x7c00 ) ) { st->stat_count = STAT_COUNT; } else { /* if 8 last vad-decisions have been "0", reinitialize stat_count */ if ( ( st->vadreg & 0x7f80 ) == 0 ) { st->stat_count = STAT_COUNT; } else { stat_rat = 0; for ( i = 0; i < COMPLEN; i++ ) { if ( level[i] > st->ave_level[i] ) { num = level[i]; denom = st->ave_level[i]; } else { num = st->ave_level[i]; denom = level[i]; } /* Limit nimimum value of num and denom to STAT_THR_LEVEL */ if ( num < STAT_THR_LEVEL ) { num = STAT_THR_LEVEL; } if ( denom < STAT_THR_LEVEL ) { denom = STAT_THR_LEVEL; } stat_rat += num / denom * 64; } /* compare stat_rat with a threshold and update stat_count */ if ( stat_rat > STAT_THR ) { st->stat_count = STAT_COUNT; } else { if ( ( st->vadreg & 0x4000 ) != 0 ) { if ( st->stat_count != 0 ) { st->stat_count -= 1; } } } } } /* Update average amplitude estimate for stationarity estimation */ alpha = ALPHA4; if ( st->stat_count == STAT_COUNT ) { alpha = 1.0F; } else if ( ( st->vadreg & 0x4000 ) == 0 ) { alpha = ALPHA5; } for ( i = 0; i < COMPLEN; i++ ) { st->ave_level[i] += alpha * ( level[i] - st->ave_level[i] ); } } #endif /* * noise_estimate_update * * * Parameters: * st B: State struct * level I: sub-band levels of the input frame * st->vadreg I: intermediate VAD flags * st->pitch I: flags for pitch detection * st->complex_hang_count I: signal is too complex for VAD * st->stat_count B: stationary counter * st->old_level B: signal levels of the previous frame * st->bckr_est B: noise estimate * * Function: * Update of background noise estimate * * Returns: * void */ #ifndef VAD2 static void noise_estimate_update( vadState *st, Float32 level[] ) { Float32 alpha_up, alpha_down, bckr_add; Word32 i; /* Control update of bckr_est[] */ update_cntrl( st, level ); /* Choose update speed */ bckr_add = 2; if ( ( ( 0x7800 & st->vadreg ) == 0 ) && ( ( st->pitch & 0x7800 ) == 0 ) && ( st->complex_hang_count == 0 ) ) { alpha_up = ALPHA_UP1; alpha_down = ALPHA_DOWN1; } else { if ( ( st->stat_count == 0 ) && ( st->complex_hang_count == 0 ) ) { alpha_up = ALPHA_UP2; alpha_down = ALPHA_DOWN2; } else { alpha_up = 0; alpha_down = ALPHA3; bckr_add = 0; } } /* Update noise estimate (bckr_est) */ for ( i = 0; i < COMPLEN; i++ ) { Float32 temp; temp = st->old_level[i] - st->bckr_est[i]; /* update downwards*/ if ( temp < 0 ) { st->bckr_est[i] = ( -2 + ( st->bckr_est[i] + ( alpha_down * temp ) ) ); /* limit minimum value of the noise estimate to NOISE_MIN */ if ( st->bckr_est[i] < NOISE_MIN ) { st->bckr_est[i] = NOISE_MIN; } } /* update upwards */ else { st->bckr_est[i] = ( bckr_add + ( st->bckr_est[i] + ( alpha_up * temp ) ) ); /* limit maximum value of the noise estimate to NOISE_MAX */ if ( st->bckr_est[i] > NOISE_MAX ) { st->bckr_est[i] = NOISE_MAX; } } } /* Update signal levels of the previous frame (old_level) */ for ( i = 0; i < COMPLEN; i++ ) { st->old_level[i] = level[i]; } } #endif /* * hangover_addition * * * Parameters: * noise_level I: average level of the noise estimates * low_power I: flag power of the input frame * st->burst_count O: counter for the length of speech bursts * st->hang_count O: hangover counter * st->complex_hang_count B: signal is too complex for VAD * st->complex_hang_timer B: complex hang timer * st->vadreg I: intermediate VAD flags * st->corr_hp_fast I: long term complex signal estimate * * Function: * Add hangover for complex signal or after speech bursts * * Returns: * VAD_flag indicating final VAD decision */ #ifndef VAD2 static Word16 hangover_addition( vadState *st, Float32 noise_level, Word16 low_power ) { Word16 hang_len, burst_len; /* * Calculate burst_len and hang_len * burst_len: number of consecutive intermediate vad flags with "1"-decision * required for hangover addition * hang_len: length of the hangover */ if ( noise_level > HANG_NOISE_THR ) { burst_len = BURST_LEN_HIGH_NOISE; hang_len = HANG_LEN_HIGH_NOISE; } else { burst_len = BURST_LEN_LOW_NOISE; hang_len = HANG_LEN_LOW_NOISE; } /* * if the input power (pow_sum) is lower than a threshold, clear * counters and set VAD_flag to "0" "fast exit" */ if ( low_power != 0 ) { st->burst_count = 0; st->hang_count = 0; st->complex_hang_count = 0; st->complex_hang_timer = 0; return 0; } if ( st->complex_hang_timer > CVAD_HANG_LIMIT ) { if ( st->complex_hang_count < CVAD_HANG_LENGTH ) { st->complex_hang_count = CVAD_HANG_LENGTH; } } /* long time very complex signal override VAD output function */ if ( st->complex_hang_count != 0 ) { st->burst_count = BURST_LEN_HIGH_NOISE; st->complex_hang_count -= 1; return 1; } else { /* let hp_corr work in from a noise_period indicated by the VAD */ if ( ( ( st->vadreg & 0x3ff0 ) == 0 ) && ( st->corr_hp_fast > CVAD_THRESH_IN_NOISE ) ) { return 1; } } /* update the counters (hang_count, burst_count) */ if ( ( st->vadreg & 0x4000 ) != 0 ) { st->burst_count += 1; if ( st->burst_count >= burst_len ) { st->hang_count = hang_len; } return 1; } else { st->burst_count = 0; if ( st->hang_count > 0 ) { st->hang_count -= 1; return 1; } } return 0; } #endif /* * vad_decision * * * Parameters: * st B: State struct * level I: sub-band levels of the input frame * pow_sum I: power of the input frame * st->bckr_est I: background noise components * st->vadreg I: intermediate VAD flags * st->complex_warning O: flags for complex detection * st->speech_vad_decision O: speech VAD flag * * Function: * Calculates VAD_flag * * Returns: * VAD_flag indicating final VAD decision */ #ifndef VAD2 static Word16 vad_decision( vadState *st, Float32 level[COMPLEN], Float32 pow_sum ) { Float32 snr_sum, temp, vad_thr, noise_level; Word32 i; Word16 low_power_flag; /* * Calculate squared sum of the input levels (level) * divided by the background noise components (bckr_est). */ snr_sum = 0; for ( i = 0; i < COMPLEN; i++ ) { temp = level[i] / st->bckr_est[i]; snr_sum += temp * temp; } snr_sum = snr_sum * 56.8889F; /* Calculate average level of estimated background noise */ noise_level = st->bckr_est[0] + st->bckr_est[1] + st->bckr_est[2] + st-> bckr_est[3] + st->bckr_est[4] + st->bckr_est[5] + st->bckr_est[6] + st ->bckr_est[7] + st->bckr_est[8]; noise_level = noise_level * 0.111111F; /* Calculate VAD threshold */ vad_thr = VAD_SLOPE * ( noise_level - VAD_P1 ) + VAD_THR_HIGH; if ( vad_thr < VAD_THR_LOW ) { vad_thr = VAD_THR_LOW; } /* Shift VAD decision register */ st->vadreg >>= 1; /* Make intermediate VAD decision */ if ( snr_sum > vad_thr ) { st->vadreg = st->vadreg | 0x4000; } /* * primary vad decision made * check if the input power (pow_sum) is lower than a threshold" */ if ( pow_sum < VAD_POW_LOW ) { low_power_flag = 1; } else { low_power_flag = 0; } /* * update complex signal estimate st->corr_hp_fast and hangover reset timer using * low_power_flag and corr_hp_fast and various adaptation speeds */ complex_estimate_adapt( st, low_power_flag ); /* check multiple thresholds of the st->corr_hp_fast value */ st->complex_warning = complex_vad( st, low_power_flag ); /* Update speech subband vad background noise estimates */ noise_estimate_update( st, level ); /* * Add speech and complex hangover and return speech VAD_flag * long term complex hangover may be added */ st->speech_vad_decision = hangover_addition( st, noise_level, low_power_flag ); return( st->speech_vad_decision ); } #endif /* * level_calculation * * * Parameters: * data I: signal buffer * sub_level B: level calculate at the end of the previous frame/ * level of signal calculated from the last * (count2 - count1) samples * count1 I: number of samples to be counted * count2 I: number of samples to be counted * ind_m I: step size for the index of the data buffer * ind_a I: starting index of the data buffer * scale I: scaling for the level calculation * * Function: * Calculate signal level in a sub-band. * * Level is calculated by summing absolute values of the input data. * * Returns: * signal level */ #ifndef VAD2 static Float32 level_calculation( Float32 data[], Float32 *sub_level, Word16 count1, Word16 count2, Word16 ind_m, Word16 ind_a, Word16 scale ) { Float32 level, temp1; Word32 i; temp1 = 0; for ( i = count1; i < count2; i++ ) { temp1 += ( Float32 )fabs( data[ind_m * i + ind_a] ); } level = temp1 + *sub_level; *sub_level = temp1; for ( i = 0; i < count1; i++ ) { level += ( Float32 )fabs( data[ind_m * i + ind_a] ); } return( scale * level ); } #endif /* * filter3 * * * Parameters: * in0 B: input values; output low-pass part * in1 B: input values; output high-pass part * data B: updated filter memory * * Function: * Third-order half-band lowpass/highpass filter pair. * * Returns: * void */ #ifndef VAD2 static void filter3( Float32 *in0, Float32 *in1, Float32 *data ) { Float32 temp1, temp2; temp1 = *in1 - ( COEFF3 * *data ); temp2 = *data + ( COEFF3 * temp1 ); *data = temp1; *in1 = ( *in0 - temp2 ) * 0.5F; *in0 = ( *in0 + temp2 ) * 0.5F; } #endif /* * filter5 * * * Parameters: * in0 B: input values; output low-pass part * in1 B: input values; output high-pass part * data B: updated filter memory * * Function: * Fifth-order half-band lowpass/highpass filter pair. * * Returns: * void */ #ifndef VAD2 static void filter5( Float32 *in0, Float32 *in1, Float32 data[] ) { Float32 temp0, temp1, temp2; temp0 = *in0 - ( COEFF5_1 * data[0] ); temp1 = data[0] + ( COEFF5_1 * temp0 ); data[0] = temp0; temp0 = *in1 - ( COEFF5_2 * data[1] ); temp2 = data[1] + ( COEFF5_2 * temp0 ); data[1] = temp0; *in0 = ( temp1 + temp2 ) * 0.5F; *in1 = ( temp1 - temp2 ) * 0.5F; } #endif /* * first_filter_stage * * * Parameters: * in I: input signal * out O: output values, * every other output is low-pass part and * every other output is high-pass part * data B: updated filter memory * * Function: * Calculate 5th order half-band lowpass/highpass filter pair * * Returns: * void */ #ifndef VAD2 static void first_filter_stage( Float32 in[], Float32 out[], Float32 data[] ) { Float32 temp0, temp1, temp2, temp3; Float32 data0, data1; Word32 i; data0 = data[0]; data1 = data[1]; for ( i = 0; i < L_SUBFR; i++ ) { temp0 = ( in[4 * i + 0] * 0.25F ) - ( COEFF5_1 * data0 ); temp1 = data0 + ( COEFF5_1 * temp0 ); temp3 = ( in[4*i+1]*0.25F )-( COEFF5_2 * data1 ); temp2 = data1 + ( COEFF5_2 * temp3 ); out[4 * i + 0] = temp1 + temp2; out[4 * i + 1] = temp1 - temp2; data0 = ( in[4 * i + 2] * 0.25F ) - ( COEFF5_1 * temp0 ); temp1 = temp0 + ( COEFF5_1 * data0 ); data1 = ( in[4 * i + 3] * 0.25F ) - ( COEFF5_2 * temp3 ); temp2 = temp3 + ( COEFF5_2 * data1 ); out[4 * i + 2] = temp1 + temp2; out[4 * i + 3] = temp1 - temp2; } data[0] = data0; data[1] = data1; } #endif /* * filter_bank * * * Parameters: * in I: input frame * st->a_data5 B: filter memory * st->a_data3 B: filter memory * st->sub_level B: level memory * level O: signal levels at each band * * Function: * Divides input signal into 9-bands and calcultes level of the signal in each band * * Returns: * void */ #ifndef VAD2 static void filter_bank( vadState *st, Float32 in[], Float32 level[] ) { Word32 i; Float32 tmp_buf[FRAME_LEN]; /* calculate the filter bank */ first_filter_stage( in, tmp_buf, st->a_data5[0] ); for ( i = 0; i < FRAME_LEN / 4; i++ ) { filter5( &tmp_buf[4 * i], &tmp_buf[4 * i + 2], st->a_data5[1] ); filter5( &tmp_buf[4 * i +1], &tmp_buf[4 * i + 3], st->a_data5[2] ); } for ( i = 0; i < FRAME_LEN / 8; i++ ) { filter3( &tmp_buf[8 * i + 0], &tmp_buf[8 * i + 4], &st->a_data3[0] ); filter3( &tmp_buf[8 * i + 2], &tmp_buf[8 * i + 6], &st->a_data3[1] ); filter3( &tmp_buf[8 * i + 3], &tmp_buf[8 * i + 7], &st->a_data3[4] ); } for ( i = 0; i < FRAME_LEN / 16; i++ ) { filter3( &tmp_buf[16 * i + 0], &tmp_buf[16 * i + 8], &st->a_data3[2] ); filter3( &tmp_buf[16 * i + 4], &tmp_buf[16 * i + 12], &st->a_data3[3] ); } /* calculate levels in each frequency band */ /* 3000 - 4000 Hz*/ level[8] = level_calculation( tmp_buf, &st->sub_level[8], FRAME_LEN /4 - 8, FRAME_LEN /4, 4, 1, 1 ); /* 2500 - 3000 Hz*/ level[7] = level_calculation( tmp_buf, &st->sub_level[7], FRAME_LEN /8 - 4, FRAME_LEN /8, 8, 7, 2 ); /* 2000 - 2500 Hz*/ level[6] = level_calculation( tmp_buf, &st->sub_level[6], FRAME_LEN /8 - 4, FRAME_LEN /8, 8, 3, 2 ); /* 1500 - 2000 Hz*/ level[5] = level_calculation( tmp_buf, &st->sub_level[5], FRAME_LEN /8 - 4, FRAME_LEN /8, 8, 2, 2 ); /* 1000 - 1500 Hz*/ level[4] = level_calculation( tmp_buf, &st->sub_level[4], FRAME_LEN /8 - 4, FRAME_LEN /8, 8, 6, 2 ); /* 750 - 1000 Hz*/ level[3] = level_calculation( tmp_buf, &st->sub_level[3], FRAME_LEN /16 - 2, FRAME_LEN /16, 16, 4, 2 ); /* 500 - 750 Hz*/ level[2] = level_calculation( tmp_buf, &st->sub_level[2], FRAME_LEN /16 - 2, FRAME_LEN /16, 16, 12, 2 ); /* 250 - 500 Hz*/ level[1] = level_calculation( tmp_buf, &st->sub_level[1], FRAME_LEN /16 - 2, FRAME_LEN /16, 16, 8, 2 ); /* 0 - 250 Hz*/ level[0] = level_calculation( tmp_buf, &st->sub_level[0], FRAME_LEN /16 - 2, FRAME_LEN /16, 16, 0, 2 ); } #endif /* * vad * * * Parameters: * in_buf I: samples of the input frame * st B: State struct * st->pitch B: flags for pitch detection * st->complex_low B: complex flag * * Function: * Voice Activity Detection (VAD) * * Returns: * VAD Decision, 1 = speech, 0 = noise */ #ifndef VAD2 static Word16 vad( vadState *st, Float32 in_buf[] ) { Float32 level[COMPLEN]; Float32 pow_sum; Word32 i; /* Calculate power of the input frame. */ pow_sum = 0L; for ( i = -40; i < 120; i += 8 ) { pow_sum += in_buf[i] * in_buf[i]; pow_sum += in_buf[i + 1] *in_buf[i + 1]; pow_sum += in_buf[i + 2] * in_buf[i + 2]; pow_sum += in_buf[i + 3] * in_buf[i + 3]; pow_sum += in_buf[i + 4] * in_buf[i + 4]; pow_sum += in_buf[i + 5] * in_buf[i + 5]; pow_sum += in_buf[i + 6] * in_buf[i + 6]; pow_sum += in_buf[i + 7] * in_buf[i + 7]; } /* * If input power is very low, clear pitch flag of the current frame */ if ( pow_sum < POW_PITCH_THR ) { st->pitch = ( Word16 )( st->pitch & 0x3fff ); } /* * If input power is very low, clear complex flag of the "current" frame */ if ( pow_sum < POW_COMPLEX_THR ) { st->complex_low = ( Word16 )( st->complex_low & 0x3fff ); } /* * Run the filter bank which calculates signal levels at each band */ filter_bank( st, in_buf, level ); return( vad_decision( st, level, pow_sum ) ); } #endif /* * vad_pitch_detection * * * Parameters: * st->oldlag B: old LTP lag * T_op I: speech encoder open loop lags * st->pitch B: flags for pitch detection * st B: State struct * st->pitch B: flags for pitch detection * st->oldlag_count B: lag count * * Function: * Test if signal contains pitch or other periodic component. * * Returns: * Boolean voiced / unvoiced decision in state variable */ #ifndef VAD2 static void vad_pitch_detection( vadState *st, Word32 T_op[] ) { Word32 lagcount, i; lagcount = 0; for ( i = 0; i < 2; i++ ) { if ( abs( st->oldlag - T_op[i] ) < LTHRESH ) { lagcount += 1; } /* Save the current LTP lag */ st->oldlag = T_op[i]; } /* * Make pitch decision. * Save flag of the pitch detection to the variable pitch. */ st->pitch = st->pitch >> 1; if ( ( st->oldlag_count + lagcount ) >= NTHRESH ) { st->pitch = st->pitch | 0x4000; } /* Update oldlagcount */ st->oldlag_count = lagcount; } #endif #ifdef VAD2 /*************************************************************************** * * FUNCTION NAME: vad2() * * PURPOSE: * This function provides the Voice Activity Detection function option 2 * for the Adaptive Multi-rate (AMR) codec. * * INPUTS: * * vadState * pointer to vadState state structure * farray_ptr * pointer to Float32[80] input array * * OUTPUTS: * * state variables in vadState are updated * * RETURN VALUE: * * Word16 * VAD(m) - two successive calls to vad2() yield * the VAD decision for the 20 ms frame: * VAD_flag = VAD(m-1) || VAD(m) * * *************************************************************************/ int vad2 (vadState *st, Float32 *farray_ptr) { /* Static variables */ /* The channel table is defined below. In this table, the lower and higher frequency coefficients for each of the 16 channels are specified. The table excludes the coefficients with numbers 0 (DC), 1, and 64 (Foldover frequency). For these coefficients, the gain is always set at 1.0 (0 dB). */ static int ch_tbl [NUM_CHAN][2] = { { 2, 3}, { 4, 5}, { 6, 7}, { 8, 9}, {10, 11}, {12, 13}, {14, 16}, {17, 19}, {20, 22}, {23, 26}, {27, 30}, {31, 35}, {36, 41}, {42, 48}, {49, 55}, {56, 63} }; /* The voice metric table is defined below. It is a non- linear table with a deadband near zero. It maps the SNR index (quantized SNR value) to a number that is a measure of voice quality. */ static int vm_tbl [90] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 7, 7, 7, 8, 8, 9, 9, 10, 10, 11, 12, 12, 13, 13, 14, 15, 15, 16, 17, 17, 18, 19, 20, 20, 21, 22, 23, 24, 24, 25, 26, 27, 28, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 }; /* hangover as a function of peak SNR (3 dB steps) */ static Word16 hangover_table[20] = { 30, 30, 30, 30, 30, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 8, 8, 8 }; /* burst sensitivity as a function of peak SNR (3 dB steps) */ static Word16 burstcount_table[20] = { 8, 8, 8, 8, 8, 8, 8, 8, 7, 6, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4 }; /* voice metric sensitivity as a function of peak SNR (3 dB steps) */ static Word16 vm_threshold_table[20] = { 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 40, 51, 71, 100, 139, 191, 257, 337, 432 }; /* Automatic variables */ double data_buffer [FFT_LEN1], enrg, snr; double tne, tce, ftmp; int ch_snr [NUM_CHAN]; int i, j, j1, j2; int vm_sum; int update_flag; double ch_enrg_dev; /* for forced update... */ double ch_enrg_db [NUM_CHAN]; double alpha; /* For detecting sine waves */ double peak, avg, peak2avg; int sine_wave_flag; /* For computing frame SNR and long-term SNR */ double tce_db, tne_db; double xt; /* More VAD stuff */ int tsnrq; int ivad; /* Functions */ void real_fft (double *, int); /****** Executable code starts here ******/ /* Increment frame counter */ st->Lframe_cnt++; /* Preemphasize the input data and store in the data buffer with appropriate delay */ for (i = 0; i < DELAY0; i++) data_buffer [i] = 0.0; data_buffer [DELAY0] = *farray_ptr + PRE_EMP_FAC1 * st->pre_emp_mem; for (i = DELAY0+1, j = 1; i < DELAY0+FRM_LEN1; i++, j++) data_buffer [i] = *(farray_ptr + j) + PRE_EMP_FAC1 * *(farray_ptr + j - 1); st->pre_emp_mem = *(farray_ptr + FRM_LEN1 - 1); for (i = DELAY0+FRM_LEN1; i < FFT_LEN1; i++) data_buffer [i] = 0.0; /* Perform FFT on the data buffer */ real_fft (data_buffer, +1); /* Estimate the energy in each channel */ alpha = (st->Lframe_cnt == 1) ? 1.0 : CEE_SM_FAC1; for (i = LO_CHAN; i <= HI_CHAN; i++) { enrg = 0.0; j1 = ch_tbl [i][0], j2 = ch_tbl [i][1]; for (j = j1; j <= j2; j++) enrg += square(data_buffer [2*j]) + square(data_buffer [2*j+1]); enrg /= (float) (j2 - j1 + 1); st->ch_enrg [i] = (1 - alpha) * st->ch_enrg [i] + alpha * enrg; if (st->ch_enrg [i] < MIN_CHAN_ENRG) st->ch_enrg [i] = MIN_CHAN_ENRG; } /* Compute the total channel energy estimate (tce) */ tce = 0.0; for (i = LO_CHAN; i <= HI_CHAN; i++) tce += st->ch_enrg [i]; /* Calculate spectral peak-to-average ratio */ peak = avg = 0.; for (i = LO_CHAN; i <= HI_CHAN; i++) { /* Sine waves not valid for low frequencies: */ if (i >= SINE_START_CHAN && st->ch_enrg [i] > peak) peak = st->ch_enrg [i]; avg += st->ch_enrg [i]; } avg /= HI_CHAN - LO_CHAN + 1; peak2avg = (avg < 1./NORM_ENRG) ? 0. : 10.*log10 (peak/avg); /* Detect sine waves */ if (peak2avg > 10.) sine_wave_flag = TRUE; else sine_wave_flag = FALSE; /* Initialize channel noise estimate to channel energy of first few frames (if sufficiently low Peak-to-Average ratio) */ if (st->Lframe_cnt <= INIT_FRAMES) { if (sine_wave_flag == TRUE) { for (i = LO_CHAN; i <= HI_CHAN; i++) st->ch_noise [i] = INE; } else { for (i = LO_CHAN; i <= HI_CHAN; i++) st->ch_noise [i] = max(st->ch_enrg [i], INE); } } /* Compute the channel SNR indices */ for (i = LO_CHAN; i <= HI_CHAN; i++) { snr = 10.0 * log10 ((double)st->ch_enrg [i] / st->ch_noise [i]); if (snr < 0.0) snr = 0.0; ch_snr [i] = (int)((snr + 0.1875) / 0.375); } /* Compute the sum of voice metrics */ vm_sum = 0; for (i = LO_CHAN; i <= HI_CHAN; i++) { j = min(ch_snr[i],89); vm_sum += vm_tbl [j]; } /* Initialize voice energy to nominal value */ if (st->Lframe_cnt <= INIT_FRAMES || st->fupdate_flag == TRUE ) { #if NORM_ENERG==4 tce_db = 49.918; #elif NORM_ENERG==1 tce_db = 55.938; #else tce_db = (96. - 22. - 10*log10 (FFT_LEN1/2) - 10.*log10 (NORM_ENRG)); #endif st->negSNRvar = 0.0; st->negSNRbias = 0.0; /* Compute the total noise energy estimate (tne) */ tne = 0.0; for (i = LO_CHAN; i <= HI_CHAN; i++) tne += st->ch_noise [i]; /* Get total noise in dB */ tne_db = 10 * log10 (tne); /* Initialise instantaneous and long-term peak signal-to-noise ratios */ xt = tce_db - tne_db; st->tsnr = xt; } else { /* Calculate instantaneous signal-to-noise ratio */ xt = 0; for (i=LO_CHAN; i<=HI_CHAN; i++) xt += st->ch_enrg[i]/st->ch_noise[i]; xt = 10*log10(xt/NUM_CHAN); /* Estimate long-term "peak" SNR */ if (xt > st->tsnr) st->tsnr = 0.9*st->tsnr + 0.1*xt; else if (xt > 0.625*st->tsnr) st->tsnr = 0.998*st->tsnr + 0.002*xt; } /* Quantize the long-term SNR in 3 dB steps */ tsnrq = (int)(st->tsnr/3.); tsnrq = min(19, max(0, tsnrq)); /* Calculate the negative SNR sensitivity bias */ if (xt < 0) { st->negSNRvar = min (0.99*st->negSNRvar + 0.01*xt*xt, 4.0); st->negSNRbias = max (12.0*(st->negSNRvar - 0.65), 0.0); } /* Determine VAD as a function of the voice metric sum and quantized SNR */ if (vm_sum > vm_threshold_table[tsnrq] + st->negSNRbias) { ivad = 1; if (++st->burstcount > burstcount_table[tsnrq]) { st->hangover = hangover_table[tsnrq]; } } else { st->burstcount = 0; if (--st->hangover <= 0) { ivad = 0; st->hangover = 0; } else { ivad = 1; } } /* Calculate log spectral deviation */ for (i = LO_CHAN; i <= HI_CHAN; i++) ch_enrg_db [i] = 10.*log10( st->ch_enrg [i] ); ch_enrg_dev = 0.; if (st->Lframe_cnt == 1) for (i = LO_CHAN; i <= HI_CHAN; i++) st->ch_enrg_long_db [i] = ch_enrg_db [i]; else for (i = LO_CHAN; i <= HI_CHAN; i++) ch_enrg_dev += fabs( st->ch_enrg_long_db [i] - ch_enrg_db [i] ); /* * Calculate long term integration constant as a function of instantaneous SNR * (i.e., high SNR (tsnr dB) -> slower integration (alpha = HIGH_ALPHA), * low SNR (0 dB) -> faster integration (alpha = LOW_ALPHA) */ /* alpha = HIGH_ALPHA - ALPHA_RANGE * (tsnr - xt) / tsnr, low <= alpha <= high */ ftmp = st->tsnr - xt; if (ftmp <= 0.0 || st->tsnr <= 0.0) alpha = HIGH_ALPHA1; else if (ftmp > st->tsnr) alpha = LOW_ALPHA1; else alpha = HIGH_ALPHA1 - (ALPHA_RANGE1 * ftmp / st->tsnr); /* Calc long term log spectral energy */ for (i = LO_CHAN; i <= HI_CHAN; i++) { st->ch_enrg_long_db[i] = alpha*st->ch_enrg_long_db[i] + (1.-alpha)*ch_enrg_db[i]; } /* Set or reset the update flag */ update_flag = FALSE; st->fupdate_flag = FALSE; if ((vm_sum <= UPDATE_THLD) || (st->Lframe_cnt <= INIT_FRAMES && sine_wave_flag == FALSE)) { update_flag = TRUE; st->update_cnt = 0; } else if (tce > NOISE_FLOOR && ch_enrg_dev < DEV_THLD1 && sine_wave_flag == FALSE && st->LTP_flag == FALSE) { st->update_cnt++; if (st->update_cnt >= UPDATE_CNT_THLD1) { update_flag = TRUE; st->fupdate_flag = TRUE; } } if ( st->update_cnt == st->last_update_cnt ) st->hyster_cnt++; else st->hyster_cnt = 0; st->last_update_cnt = st->update_cnt; if ( st->hyster_cnt > HYSTER_CNT_THLD1 ) st->update_cnt = 0; /* Update the channel noise estimates */ if (update_flag == TRUE) { for (i = LO_CHAN; i <= HI_CHAN; i++) { st->ch_noise [i] = (1.0 - CNE_SM_FAC1) * st->ch_noise [i] + CNE_SM_FAC1 * st->ch_enrg [i]; if (st->ch_noise [i] < MIN_CHAN_ENRG) st->ch_noise [i] = MIN_CHAN_ENRG; } } return (ivad); } /* end vad2 () */ /************************************************************************** * * FUNCTION NAME: real_fft() * * PURPOSE: FFT/IFFT function for real sequences * ************************************************************************** * * This is an implementation of decimation-in-time FFT algorithm for * real sequences. The techniques used here can be found in several * books, e.g., i) Proakis and Manolakis, "Digital Signal Processing", * 2nd Edition, Chapter 9, and ii) W.H. Press et. al., "Numerical * Recipes in C", 2nd Ediiton, Chapter 12. * * Input - There is two inputs to this function: * * 1) A float pointer to the input data array, * 2) A control parameter (isign) specifying forward (+1) or * inverse (-1) FFT. * * Output - There is no return value. * The input data are replaced with transformed data. If the * input is a real time domain sequence, it is replaced with * the complex FFT for positive frequencies. The FFT value * for DC and the foldover frequency are combined to form the * first complex number in the array. The remaining complex * numbers correspond to increasing frequencies. If the input * is a complex frequency domain sequence arranged as above, * it is replaced with the corresponding time domain sequence. * * Notes: * * 1) This function is designed to be a part of a VAD * algorithm that requires 128-point FFT of real * sequences. This is achieved here through a 64-point * complex FFT. Consequently, the FFT size information is * not transmitted explicitly. However, some flexibility * is provided in the function to change the size of the * FFT by specifying the size information through "define" * statements. * * 2) The values of the complex sinusoids used in the FFT * algorithm are stored in a ROM table. * * 3) In the c_fft function, the FFT values are divided by * 2 after each stage of computation thus dividing the * final FFT values by 64. This is somewhat different * from the usual definition of FFT where the factor 1/N, * i.e., 1/64, used for the IFFT and not the FFT. No factor * is used in the r_fft function. * *************************************************************************/ static double phs_tbl [SIZE]; /* holds the complex sinusoids */ void real_fft (double *farray_ptr, int isign) { double ftmp1_real, ftmp1_imag, ftmp2_real, ftmp2_imag; int i, j; static int first = TRUE; void cmplx_fft (double *, int); void fill_tbl (); /* If this is the first call to the function, fill up the phase table */ if (first == TRUE) { fill_tbl (); first = FALSE; } /* The FFT part */ if (isign == 1) { /* Perform the complex FFT */ cmplx_fft (farray_ptr, isign); /* First, handle the DC and foldover frequencies */ ftmp1_real = *farray_ptr; ftmp2_real = *(farray_ptr + 1); *farray_ptr = ftmp1_real + ftmp2_real; *(farray_ptr + 1) = ftmp1_real - ftmp2_real; /* Now, handle the remaining positive frequencies */ for (i = 2, j = SIZE - i; i <= SIZE_BY_TWO; i = i + 2, j = SIZE - i) { ftmp1_real = *(farray_ptr + i) + *(farray_ptr + j); ftmp1_imag = *(farray_ptr + i + 1) - *(farray_ptr + j + 1); ftmp2_real = *(farray_ptr + i + 1) + *(farray_ptr + j + 1); ftmp2_imag = *(farray_ptr + j) - *(farray_ptr + i); *(farray_ptr + i) = (ftmp1_real + phs_tbl [i] * ftmp2_real - phs_tbl [i + 1] * ftmp2_imag) / 2.0; *(farray_ptr + i + 1) = (ftmp1_imag + phs_tbl [i] * ftmp2_imag + phs_tbl [i + 1] * ftmp2_real) / 2.0; *(farray_ptr + j) = (ftmp1_real + phs_tbl [j] * ftmp2_real + phs_tbl [j + 1] * ftmp2_imag) / 2.0; *(farray_ptr + j + 1) = (-ftmp1_imag - phs_tbl [j] * ftmp2_imag + phs_tbl [j + 1] * ftmp2_real) / 2.0; } } /* The IFFT part */ else { /* First, handle the DC and foldover frequencies */ ftmp1_real = *farray_ptr; ftmp2_real = *(farray_ptr + 1); *farray_ptr = (ftmp1_real + ftmp2_real) / 2.0; *(farray_ptr + 1) = (ftmp1_real - ftmp2_real) / 2.0; /* Now, handle the remaining positive frequencies */ for (i = 2, j = SIZE - i; i <= SIZE_BY_TWO; i = i + 2, j = SIZE - i) { ftmp1_real = *(farray_ptr + i) + *(farray_ptr + j); ftmp1_imag = *(farray_ptr + i + 1) - *(farray_ptr + j + 1); ftmp2_real = -(*(farray_ptr + i + 1) + *(farray_ptr + j + 1)); ftmp2_imag = -(*(farray_ptr + j) - *(farray_ptr + i)); *(farray_ptr + i) = (ftmp1_real + phs_tbl [i] * ftmp2_real + phs_tbl [i + 1] * ftmp2_imag) / 2.0; *(farray_ptr + i + 1) = (ftmp1_imag + phs_tbl [i] * ftmp2_imag - phs_tbl [i + 1] * ftmp2_real) / 2.0; *(farray_ptr + j) = (ftmp1_real + phs_tbl [j] * ftmp2_real - phs_tbl [j + 1] * ftmp2_imag) / 2.0; *(farray_ptr + j + 1) = (-ftmp1_imag - phs_tbl [j] * ftmp2_imag - phs_tbl [j + 1] * ftmp2_real) / 2.0; } /* Perform the complex IFFT */ cmplx_fft (farray_ptr, isign); } return; } /* end real_fft () */ /* * FFT/IFFT function for complex sequences * * The decimation-in-time complex FFT/IFFT is implemented below. * The input complex numbers are presented as real part followed by * imaginary part for each sample. The counters are therefore * incremented by two to access the complex valued samples. */ void cmplx_fft (double *farray_ptr, int isign) { int i, j, k, ii, jj, kk, ji, kj; double ftmp, ftmp_real, ftmp_imag; /* Rearrange the input array in bit reversed order */ for (i = 0, j = 0; i < SIZE-2; i = i + 2) { if (j > i) { ftmp = *(farray_ptr+i); *(farray_ptr+i) = *(farray_ptr+j); *(farray_ptr+j) = ftmp; ftmp = *(farray_ptr+i+1); *(farray_ptr+i+1) = *(farray_ptr+j+1); *(farray_ptr+j+1) = ftmp; } k = SIZE_BY_TWO; while (j >= k) { j -= k; k >>= 1; } j += k; } /* The FFT part */ if (isign == 1) { for (i = 0; i < NUM_STAGE; i++) { /* i is stage counter */ jj = (2 << i); /* FFT size */ kk = (jj << 1); /* 2 * FFT size */ ii = SIZE / jj; /* 2 * number of FFT's */ for (j = 0; j < jj; j = j + 2) { /* j is sample counter */ ji = j * ii; /* ji is phase table index */ for (k = j; k < SIZE; k = k + kk) { /* k is butterfly top */ kj = k + jj; /* kj is butterfly bottom */ /* Butterfly computations */ ftmp_real = *(farray_ptr + kj) * phs_tbl [ji] - *(farray_ptr + kj + 1) * phs_tbl [ji + 1]; ftmp_imag = *(farray_ptr + kj + 1) * phs_tbl [ji] + *(farray_ptr + kj) * phs_tbl [ji + 1]; *(farray_ptr + kj) = (*(farray_ptr + k) - ftmp_real) / 2.0; *(farray_ptr + kj + 1) = (*(farray_ptr + k + 1) - ftmp_imag) / 2.0; *(farray_ptr + k) = (*(farray_ptr + k) + ftmp_real) / 2.0; *(farray_ptr + k + 1) = (*(farray_ptr + k + 1) + ftmp_imag) / 2.0; } } } } /* The IFFT part */ else { for (i = 0; i < NUM_STAGE; i++) { /* i is stage counter */ jj = (2 << i); /* FFT size */ kk = (jj << 1); /* 2 * FFT size */ ii = SIZE / jj; /* 2 * number of FFT's */ for (j = 0; j < jj; j = j + 2) { /* j is sample counter */ ji = j * ii; /* ji is phase table index */ for (k = j; k < SIZE; k = k + kk) { /* k is butterfly top */ kj = k + jj; /* kj is butterfly bottom */ /* Butterfly computations */ ftmp_real = *(farray_ptr + kj) * phs_tbl [ji] + *(farray_ptr + kj + 1) * phs_tbl [ji + 1]; ftmp_imag = *(farray_ptr + kj + 1) * phs_tbl [ji] - *(farray_ptr + kj) * phs_tbl [ji + 1]; *(farray_ptr + kj) = *(farray_ptr + k) - ftmp_real; *(farray_ptr + kj + 1) = *(farray_ptr + k + 1) - ftmp_imag; *(farray_ptr + k) = *(farray_ptr + k) + ftmp_real; *(farray_ptr + k + 1) = *(farray_ptr + k + 1) + ftmp_imag; } } } } return; } /* end of cmplx_fft () */ /* Function to fill the phase table values */ void fill_tbl () { int i; double delta_f, theta; delta_f = - PI / (double) SIZE_BY_TWO; for (i = 0; i < SIZE_BY_TWO; i++) { theta = delta_f * (double) i; phs_tbl[2*i] = cos(theta); phs_tbl[2*i+1] = sin(theta); } return; } /* end fill_tbl () */ /*************************************************************************** * * FUNCTION NAME: LTP_flag_update * * PURPOSE: * Set LTP_flag if the LTP gain > LTP_THRESHOLD, where the value of * LTP_THRESHOLD depends on the LTP analysis window length. * * INPUTS: * * mode * AMR mode * vadState->R0 * LTP energy * vadState->Rmax * LTP maximum autocorrelation * OUTPUTS: * * vadState->LTP_flag * Set if LTP gain > LTP_THRESHOLD * * RETURN VALUE: * * none * *************************************************************************/ void LTP_flag_update (vadState * st, enum Mode mode) { Float64 thresh; if ((mode == MR475) || (mode == MR515)) thresh = 0.55; else if (mode == MR102) thresh = 0.60; else thresh = 0.65; if (st->Rmax > thresh*st->R0) st->LTP_flag = TRUE; else st->LTP_flag = FALSE; return; } /***************************************************************************/ #endif /* * cod_amr * * * Parameters: * st B: state structure * mode I: encoder mode * new_speech I: input speech frame, size L_FRAME * st B: State struct * ana O: Analysis parameters * used_mode B: In: -1 forces VAD on, Out:used encoder mode * synth O: local synthesis, size L_FRAME * * Function: * GSM adaptive multi rate speech encoder * * Returns: * void */ static void cod_amr( cod_amrState *st, enum Mode mode, Float32 new_speech[], Word16 ana[], enum Mode *used_mode, Float32 synth[] ) { /* LPC coefficients */ Float32 A_t[( MP1 ) * 4]; /* A(z) unquantized for the 4 subframes */ Float32 Aq_t[( MP1 ) * 4]; /* A(z) quantized for the 4 subframes */ Float32 *A, *Aq; /* Pointer on Aq_t */ Float32 lsp_new[M]; /* Other vectors */ Float32 xn[L_SUBFR]; /* Target vector for pitch search */ Float32 xn2[L_SUBFR]; /* Target vector for codebook search */ Float32 code[L_SUBFR]; /* Fixed codebook excitation */ Float32 y1[L_SUBFR]; /* Filtered adaptive excitation */ Float32 y2[L_SUBFR]; /* Filtered fixed codebook excitation */ Float32 gCoeff[3]; /* Correlations between xn, y1, & y2: */ Float32 res[L_SUBFR]; /* Short term (LPC) prediction residual */ Float32 res2[L_SUBFR]; /* Long term (LTP) prediction residual */ /* Vector and scalars needed for the MR475 */ Float32 xn_sf0[L_SUBFR]; /* Target vector for pitch search */ Float32 y2_sf0[L_SUBFR]; /* Filtered codebook innovation */ Float32 code_sf0[L_SUBFR]; /* Fixed codebook excitation */ Float32 h1_sf0[L_SUBFR]; /* The impulse response of sf0 */ Float32 mem_syn_save[M]; /* Filter memory */ Float32 mem_w0_save[M]; /* Filter memory */ Float32 mem_err_save[M]; /* Filter memory */ Float32 sharp_save = 0; /* Sharpening */ Float32 gain_pit_sf0; /* Quantized pitch gain for sf0 */ Float32 gain_code_sf0; /* Quantized codebook gain for sf0 */ Word16 i_subfr_sf0 = 0; /* Position in exc[] for sf0 */ /* Scalars & Flags */ Float32 gain_pit, gain_code; Float32 gp_limit; /* pitch gain limit value */ Word32 T0_sf0 = 0; /* Integer pitch lag of sf0 */ Word32 T0_frac_sf0 = 0; /* Fractional pitch lag of sf0 */ Word32 T0, T0_frac; Word32 T_op[2]; Word32 evenSubfr; Word32 i; Word16 i_subfr, subfrNr; Word16 lsp_flag = 0; /* indicates resonance in LPC filter */ Word16 compute_sid_flag; Word16 vad_flag; memcpy( st->new_speech, new_speech, L_FRAME <<2 ); //fprintf(stdout, "%d %d\n", (L_FRAME), (L_FRAME<<2)); if (st->dtx) { #ifdef VAD2 /* Find VAD decision (option 2) */ vad_flag = vad2 (st->vadSt, st->new_speech); vad_flag = vad2 (st->vadSt, st->new_speech+80) || vad_flag; #else /* Find VAD decision (option 1) */ vad_flag = vad( st->vadSt, st->new_speech ); #endif /* force VAD on */ if ( *used_mode < 0 ) vad_flag = 1; *used_mode = mode; /* NB! used_mode may change here */ compute_sid_flag = tx_dtx_handler( vad_flag, &st->dtxEncSt-> decAnaElapsedCount, &st->dtxEncSt->dtxHangoverCount, used_mode ); } else { compute_sid_flag = 0; *used_mode = mode; } /* * Perform LPC analysis: * Autocorrelation + Lag windowing. * Levinson-durbin algorithm to find a[]. * Convert a[] to lsp[]. * Quantize and code the LSPs. * find the interpolated LSPs and convert to a[] for all * subframes (both quantized and unquantized). */ /* LP analysis */ lpc(st->lpcSt->LevinsonSt->old_A, st->p_window, st->p_window_12k2, A_t, mode); /* * The LP filter coefficients, are converted to * the line spectral pair (LSP) representation for * quantization and interpolation purposes. */ lsp(mode, *used_mode, st->lspSt->lsp_old, st->lspSt->lsp_old_q, st->lspSt-> qSt->past_rq, A_t, Aq_t, lsp_new, &ana); /* Buffer lsp's and energy */ dtx_buffer( &st->dtxEncSt->hist_ptr, st->dtxEncSt->lsp_hist, lsp_new, st-> new_speech, st->dtxEncSt->log_en_hist ); if (*used_mode == MRDTX) { dtx_enc( &st->dtxEncSt->log_en_index, st->dtxEncSt->log_en_hist, st-> dtxEncSt->lsp_hist, st->dtxEncSt->lsp_index, &st->dtxEncSt-> init_lsf_vq_index, compute_sid_flag, &st->lspSt->qSt->past_rq[0], st ->gainQuantSt->gc_predSt->past_qua_en, &ana ); memset( st->old_exc, 0, ( PIT_MAX + L_INTERPOL )<<2 ); memset( st->mem_w0, 0, M <<2 ); memset( st->mem_err, 0, M <<2 ); memset( st->zero, 0, L_SUBFR <<2 ); memset( st->hvec, 0, L_SUBFR <<2 ); memset( st->lspSt->qSt->past_rq, 0, M <<2 ); memcpy( st->lspSt->lsp_old, lsp_new, M <<2 ); memcpy( st->lspSt->lsp_old_q, lsp_new, M <<2 ); /* Reset clLtp states */ st->clLtpSt->pitchSt->T0_prev_subframe = 0; st->sharp = 0; } else { /* check resonance in the filter */ lsp_flag = check_lsp( &st->tonStabSt->count, st->lspSt->lsp_old ); } #ifdef VAD2 if (st->dtx) { st->vadSt->Rmax = 0.0; st->vadSt->R0 = 0.0; } #endif for (subfrNr = 0, i_subfr = 0; subfrNr < 2; subfrNr++, i_subfr += L_FRAME_BY2) { /* * Pre-processing on 80 samples * Find the weighted input speech for the whole speech frame */ pre_big( mode, gamma1, gamma1_12k2, gamma2, A_t, i_subfr, st->speech, st->mem_w, st->wsp ); /* Find open loop pitch lag for two subframes */ if ((mode != MR475) && (mode != MR515)) { ol_ltp( mode, st->vadSt, &st->wsp[i_subfr], &T_op[subfrNr], st-> ol_gain_flg, &st->pitchOLWghtSt->old_T0_med, &st->pitchOLWghtSt-> wght_flg, &st->pitchOLWghtSt->ada_w, st->old_lags, st->dtx, subfrNr ); } } if ((mode == MR475) || (mode == MR515)) { /* * Find open loop pitch lag for ONE FRAME ONLY * search on 160 samples */ ol_ltp( mode, st->vadSt, &st->wsp[0], &T_op[0], st->ol_gain_flg, &st-> pitchOLWghtSt->old_T0_med, &st->pitchOLWghtSt->wght_flg, &st-> pitchOLWghtSt->ada_w, st->old_lags, st->dtx, 1 ); T_op[1] = T_op[0]; } #ifdef VAD2 if (st->dtx) { LTP_flag_update(st->vadSt, mode); } #endif #ifndef VAD2 if ( st->dtx ) { vad_pitch_detection( st->vadSt, T_op ); } #endif if ( *used_mode == MRDTX ) { goto the_end; } /* * Loop for every subframe in the analysis frame * * To find the pitch and innovation parameters. The subframe size is * L_SUBFR and the loop is repeated L_FRAME/L_SUBFR times. * - find the weighted LPC coefficients * - find the LPC residual signal res[] * - compute the target signal for pitch search * - compute impulse response of weighted synthesis filter (h1[]) * - find the closed-loop pitch parameters * - encode the pitch dealy * - update the impulse response h1[] by including fixed-gain pitch * - find target vector for codebook search * - codebook search * - encode codebook address * - VQ of pitch and codebook gains * - find synthesis speech * - update states of weighting filter */ /* pointer to interpolated LPC parameters */ A = A_t; /* pointer to interpolated quantized LPC parameters */ Aq = Aq_t; evenSubfr = 0; subfrNr = -1; for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR) { subfrNr += 1; evenSubfr = 1 - evenSubfr; if ((evenSubfr != 0) && (*used_mode == MR475)) { memcpy( mem_syn_save, st->mem_syn, M <<2 ); memcpy( mem_w0_save, st->mem_w0, M <<2 ); memcpy( mem_err_save, st->mem_err, M <<2 ); sharp_save = st->sharp; } /* Preprocessing of subframe */ if (*used_mode != MR475) { subframePreProc( *used_mode, gamma1, gamma1_12k2, gamma2, A, Aq, &st-> speech[i_subfr], st->mem_err, st->mem_w0, st->zero, st->ai_zero, &st->exc[i_subfr], st->h1, xn, res, st->error ); } else { /* MR475 */ subframePreProc( *used_mode, gamma1, gamma1_12k2, gamma2, A, Aq, &st-> speech[i_subfr], st->mem_err, mem_w0_save, st->zero, st->ai_zero, &st->exc[i_subfr], st->h1, xn, res, st->error ); if ( evenSubfr != 0 ) { memcpy( h1_sf0, st->h1, L_SUBFR <<2 ); } } /* copy the LP residual (res2 is modified in the CL LTP search) */ memcpy(res2, res, L_SUBFR <<2); /* Closed-loop LTP search */ cl_ltp(&st->clLtpSt->pitchSt->T0_prev_subframe, st->tonStabSt->gp, *used_mode, i_subfr, T_op, st->h1, &st->exc[i_subfr], res2, xn, lsp_flag, xn2, y1, &T0, &T0_frac, &gain_pit, gCoeff, &ana, &gp_limit); /* update LTP lag history */ if ((subfrNr == 0) && (st->ol_gain_flg[0] > 0)) { st->old_lags[1] = T0; } if ( ( subfrNr == 3 ) && ( st->ol_gain_flg[1] > 0)) { st->old_lags[0] = T0; } /* Innovative codebook search (find index and gain) */ cbsearch(*used_mode, subfrNr, xn2, st->h1, T0, st->sharp, gain_pit, code, y2, res2, &ana); /* Quantization of gains. */ gainQuant(*used_mode, evenSubfr, st->gainQuantSt->gc_predSt->past_qua_en, st->gainQuantSt->gc_predUncSt->past_qua_en, st->gainQuantSt-> sf0_coeff, &st->gainQuantSt->sf0_target_en, &st->gainQuantSt-> sf0_gcode0_exp, &st->gainQuantSt-> sf0_gcode0_fra, &st->gainQuantSt->gain_idx_ptr, &gain_pit_sf0, & gain_code_sf0, res, &st->exc[i_subfr], code, xn, xn2, y1, y2, gCoeff , gp_limit, &gain_pit, &gain_code, &st->gainQuantSt->adaptSt-> prev_gc, &st->gainQuantSt->adaptSt->onset, st->gainQuantSt->adaptSt ->ltpg_mem, &st->gainQuantSt->adaptSt->prev_alpha, &ana); //fprintf(stdout, "enc\t%f\n", gain_code); /* update gain history */ for ( i = 0; i < N_FRAME - 1; i++ ) { st->tonStabSt->gp[i] = st->tonStabSt->gp[i + 1]; } st->tonStabSt->gp[N_FRAME - 1] = gain_pit; /* Subframe Post Processing */ if ( *used_mode != MR475 ) { subframePostProc(st->speech, i_subfr, gain_pit, gain_code, Aq, synth, xn, code, y1, y2, st->mem_syn, st->mem_err, st->mem_w0, st->exc, &st->sharp); } else { if (evenSubfr != 0) { i_subfr_sf0 = i_subfr; memcpy( xn_sf0, xn, L_SUBFR <<2 ); memcpy( y2_sf0, y2, L_SUBFR <<2 ); memcpy( code_sf0, code, L_SUBFR <<2 ); T0_sf0 = T0; T0_frac_sf0 = T0_frac; /* Subframe Post Porcessing */ subframePostProc( st->speech, i_subfr, gain_pit, gain_code, Aq, synth, xn, code, y1, y2, mem_syn_save, st->mem_err, mem_w0_save, st->exc, &st->sharp ); st->sharp = sharp_save; } else { /* * update both subframes for the MR475 * Restore states for the MR475 mode */ memcpy(st->mem_err, mem_err_save, M <<2); /* re-build excitation for sf 0 */ Pred_lt_3or6( &st->exc[i_subfr_sf0], T0_sf0, T0_frac_sf0, 1 ); Convolve( &st->exc[i_subfr_sf0], h1_sf0, y1 ); Aq -= MP1; subframePostProc(st->speech, i_subfr_sf0, gain_pit_sf0, gain_code_sf0, Aq, synth, xn_sf0, code_sf0, y1, y2_sf0, st->mem_syn, st->mem_err, st->mem_w0, st->exc, &sharp_save); /* overwrites sharp_save */ Aq += MP1; /* * re-run pre-processing to get xn right (needed by postproc) * (this also reconstructs the unsharpened h1 for sf 1) */ subframePreProc(*used_mode, gamma1, gamma1_12k2, gamma2, A, Aq, &st ->speech[i_subfr], st->mem_err, st->mem_w0, st->zero, st->ai_zero, &st->exc[i_subfr], st->h1, xn, res, st->error); /* re-build excitation sf 1 (changed if lag < L_SUBFR) */ Pred_lt_3or6( &st->exc[i_subfr], T0, T0_frac, 1 ); Convolve(&st->exc[i_subfr], st->h1, y1); subframePostProc(st->speech, i_subfr, gain_pit, gain_code, Aq, synth, xn, code, y1, y2, st->mem_syn, st->mem_err, st->mem_w0, st->exc, &st->sharp); } } /* interpolated LPC parameters for next subframe */ A += MP1; Aq += MP1; } the_end: /* Update signal for next frame. */ for ( i = 0; i < PIT_MAX; i++ ) { st->old_wsp[i] = st->old_wsp[L_FRAME + i]; } for ( i = 0; i < PIT_MAX + L_INTERPOL; i++ ) { st->old_exc[i] = st->old_exc[L_FRAME + i]; } for ( i = 0; i < L_TOTAL - L_FRAME; i++ ) { st->old_speech[i] = st->old_speech[L_FRAME + i]; } } /* * Pre_Process_reset * * * Parameters: * state O: state structure * * Function: * Initializes state memory to zero * * Returns: * */ static Word32 Pre_Process_reset( Pre_ProcessState *state ) { if ( state == ( Pre_ProcessState * )NULL ) { //fprintf( stderr, "Pre_Process_reset: invalid parameter\n" ); return-1; } state->y2 = 0; state->y1 = 0; state->x0 = 0; state->x1 = 0; return 0; } /* * Pre_Process_exit * * * Parameters: * state I: state structure * * Function: * The memory used for state memory is freed * * Returns: * Void */ static void Pre_Process_exit( Pre_ProcessState **state ) { if ( state == NULL || *state == NULL ) return; /* deallocate memory */ free( *state ); *state = NULL; return; } /* * Pre_Process_init * * * Parameters: * state O: state structure * * Function: * Allocates state memory and initializes state memory * * Returns: * succeed = 0 */ static Word32 Pre_Process_init( Pre_ProcessState **state ) { Pre_ProcessState * s; if ( state == ( Pre_ProcessState * * )NULL ) { //fprintf( stderr, "Pre_Process_init: invalid parameter\n" ); return-1; } *state = NULL; /* allocate memory */ if ( ( s = ( Pre_ProcessState * ) malloc( sizeof( Pre_ProcessState ) ) ) == NULL ) { //fprintf( stderr, "Pre_Process_init: can not malloc state structure\n" ); return-1; } Pre_Process_reset( s ); *state = s; return 0; } /* * Pre_Process * * * Parameters: * y2, y1, x0, x1 B: filter memory * speech I: speech vector to be processed * fspeech O: processed vector * size I: size of the vector * * Function: * Pre-processing * * Two pre-processing functions are applied prior to * the encoding process: high-pass filtering and signal down-scaling. * Down-scaling consists of dividing the input by a factor of 2 * to reduce the possibility of overflows in the fixed-point * implementation. The high-pass filter serves as a precaution * against undesired low frequency components. A filter with * a cut off frequency of 80 Hz is used, and it is given by: * * 0.927246093 - 1.8544941z^-1 + 0.927246903z^-2 * H(z) = ----------------------------------------------- * 1 - 1.906005859z^-1 + 0.911376953z^-2 * * Down-scaling and high-pass filtering are combined by dividing * the coefficients at the numerator by 2. * * Returns: * void */ static void Pre_Process( Float32 *y2, Float32 *y1, Float32 *x0, Float32 *x1, const Word16 *speech, Float32 *f_speech ) { Word32 i; Float32 x2; Float32 tmp; for ( i = 0; i < 160; i++ ) { x2 = *x1; *x1 = *x0; *x0 = (float)(speech[i] & (~0x8)); tmp = ( Float32 )( 0.4636230465* *x0 - 0.92724705 * *x1 + 0.4636234515 * x2 + 1.906005859 * *y1 - 0.911376953 * *y2 ); f_speech[i] = tmp; *y2 = *y1; *y1 = tmp; } if ( ( fabs( *y1 )+fabs( *y2 ) ) < 0.0000000001 ) *y2 = *y1 = 0; } /* * cod_amr_reset * * * Parameters: * s B: state structure * dtx I: dtx on/off * * Function: * Resets state memory * * Returns: * void */ static void cod_amr_reset( cod_amrState *s, Word32 dtx ) { Word32 i; /* reset DTX */ s->dtx = dtx; /* reset Pitch_frState */ s->clLtpSt->pitchSt->T0_prev_subframe = 0; /* reset Q_plsfState */ memset( s->lspSt->qSt->past_rq, 0, sizeof( Float32 )*M ); memcpy( s->lspSt->lsp_old, lsp_init_data, sizeof( lsp_init_data ) ); memcpy( s->lspSt->lsp_old_q, lsp_init_data, sizeof( lsp_init_data ) ); /* reset gc_predState */ for ( i = 0; i < NPRED; i++ ) { s->gainQuantSt->gc_predSt->past_qua_en[i] = NB_QUA_CODE+VQ_SIZE_HIGHRATES+VQ_SIZE_LOWRATES+MR475_VQ_SIZE*2+DTX_VQ_SIZE; s->gainQuantSt->gc_predUncSt->past_qua_en[i] = NB_QUA_CODE+VQ_SIZE_HIGHRATES+VQ_SIZE_LOWRATES+MR475_VQ_SIZE*2+DTX_VQ_SIZE; } /* reset gain_adaptState */ s->gainQuantSt->adaptSt->onset = 0; s->gainQuantSt->adaptSt->prev_alpha = 0.0F; s->gainQuantSt->adaptSt->prev_gc = 0.0F; memset( s->gainQuantSt->adaptSt->ltpg_mem, 0, sizeof( Float32 )*LTPG_MEM_SIZE ); s->gainQuantSt->sf0_gcode0_exp = 0; s->gainQuantSt->sf0_gcode0_fra = 0; s->gainQuantSt->sf0_target_en = 0.0F; memset( s->gainQuantSt->sf0_coeff, 0, sizeof( Float32 )*5 ); s->gainQuantSt->gain_idx_ptr = NULL; /* reset pitchOLWghtState */ s->pitchOLWghtSt->old_T0_med = 40; s->pitchOLWghtSt->ada_w = 0.0F; s->pitchOLWghtSt->wght_flg = 0; /* reset tonStabState */ s->tonStabSt->count = 0; memset( s->tonStabSt->gp, 0, sizeof( Float32 )*N_FRAME ); /* reset LevinsonState */ s->lpcSt->LevinsonSt->old_A[0] = 1.0F; memset( &s->lpcSt->LevinsonSt->old_A[1], 0, sizeof( Float32 )*M ); #ifdef VAD2 /* reset vadState */ s->vadSt->pre_emp_mem = 0.0; s->vadSt->update_cnt = 0; s->vadSt->hyster_cnt = 0; s->vadSt->last_update_cnt = 0; for ( i = 0; i < NUM_CHAN; i++ ) { s->vadSt->ch_enrg_long_db[i] = 0.0; s->vadSt->ch_enrg[i] = 0.0; s->vadSt->ch_noise[i] = 0.0; } s->vadSt->Lframe_cnt = 0L; s->vadSt->tsnr = 0.0; s->vadSt->hangover = 0; s->vadSt->burstcount = 0; s->vadSt->fupdate_flag = 0; s->vadSt->negSNRvar = 0.0; s->vadSt->negSNRbias = 0.0; s->vadSt->R0 = 0.0; s->vadSt->Rmax = 0.0; s->vadSt->LTP_flag = 0; #else /* reset vadState */ s->vadSt->oldlag_count = 0; s->vadSt->oldlag = 0; s->vadSt->pitch = 0; s->vadSt->tone = 0; s->vadSt->complex_high = 0; s->vadSt->complex_low = 0; s->vadSt->complex_hang_timer = 0; s->vadSt->vadreg = 0; s->vadSt->burst_count = 0; s->vadSt->hang_count = 0; s->vadSt->complex_hang_count = 0; /* initialize memory used by the filter bank */ for ( i = 0; i < 3; i++ ) { s->vadSt->a_data5[i][0] = 0; s->vadSt->a_data5[i][1] = 0; } for ( i = 0; i < 5; i++ ) { s->vadSt->a_data3[i] = 0; } /* reset dtx_encState */ /* initialize the rest of the memory */ for ( i = 0; i < COMPLEN; i++ ) { s->vadSt->bckr_est[i] = NOISE_INIT; s->vadSt->old_level[i] = NOISE_INIT; s->vadSt->ave_level[i] = NOISE_INIT; s->vadSt->sub_level[i] = 0; } s->vadSt->best_corr_hp = CVAD_LOWPOW_RESET; s->vadSt->speech_vad_decision = 0; s->vadSt->complex_warning = 0; s->vadSt->sp_burst_count = 0; s->vadSt->corr_hp_fast = CVAD_LOWPOW_RESET; #endif s->dtxEncSt->hist_ptr = 0; s->dtxEncSt->log_en_index = 0; s->dtxEncSt->init_lsf_vq_index = 0; s->dtxEncSt->lsp_index[0] = 0; s->dtxEncSt->lsp_index[1] = 0; s->dtxEncSt->lsp_index[2] = 0; for ( i = 0; i < DTX_HIST_SIZE; i++ ) { memcpy( &s->dtxEncSt->lsp_hist[i * M], lsp_init_data, sizeof( Float32 )*M ); } memset( s->dtxEncSt->log_en_hist, 0, M * sizeof( Float32 ) ); s->dtxEncSt->dtxHangoverCount = DTX_HANG_CONST; s->dtxEncSt->decAnaElapsedCount = DTX_ELAPSED_FRAMES_THRESH; /* init speech pointers */ /* New speech */ s->new_speech = s->old_speech + L_TOTAL - L_FRAME; /* Present frame */ s->speech = s->new_speech - L_NEXT; s->p_window = s->old_speech + L_TOTAL - L_WINDOW; /* For LPC window */ s->p_window_12k2 = s->p_window - L_NEXT; /* Initialize static pointers */ s->wsp = s->old_wsp + PIT_MAX; s->exc = s->old_exc + PIT_MAX + L_INTERPOL; s->zero = s->ai_zero + MP1; s->error = s->mem_err + M; s->h1 = &s->hvec[L_SUBFR]; /* Static vectors to zero */ memset(s->old_speech, 0, sizeof(Float32)*L_TOTAL ); memset(s->old_exc, 0, sizeof(Float32)*(PIT_MAX + L_INTERPOL)); memset(s->old_wsp, 0, sizeof(Float32)*PIT_MAX); memset(s->mem_syn, 0, sizeof(Float32)*M); memset(s->mem_w, 0, sizeof(Float32)*M); memset(s->mem_w0, 0, sizeof(Float32)*M); memset(s->mem_err, 0, sizeof(Float32)*M); memset(s->ai_zero, 0, sizeof(Float32)*L_SUBFR); memset(s->hvec, 0, sizeof(Float32)*L_SUBFR); for (i = 0; i < 5; i++) { s->old_lags[i] = 40; } s->sharp = 0.0F; } /* * cod_amr_init * * * Parameters: * state O: state structure * dtx I: dtx mode used * * Function: * Allocates state memory and initializes state memory * * Returns: * succeed = 0 */ static Word32 cod_amr_init( cod_amrState **state, Word32 dtx ) { cod_amrState * s; if ( ( s = ( cod_amrState * ) malloc( sizeof( cod_amrState ) ) ) == NULL ) { //fprintf( stderr, "can not malloc state structure\n" ); return-1; } /* init clLtpState */ if ( ( s->clLtpSt = ( clLtpState * ) malloc( sizeof( clLtpState ) ) ) == NULL ) { //fprintf( stderr, "can not malloc state structure\n" ); return-1; } /* init Pitch_frState */ if ( ( s->clLtpSt->pitchSt = ( Pitch_frState * ) malloc( sizeof( Pitch_frState ) ) ) == NULL ) { //fprintf( stderr, "can not malloc state structure\n" ); return-1; } /* init lspState */ if ( ( s->lspSt = ( lspState * ) malloc( sizeof( lspState ) ) ) == NULL ) { //fprintf( stderr, "can not malloc state structure\n" ); return-1; } /* init Q_plsfState */ if ( ( s->lspSt->qSt = ( Q_plsfState * ) malloc( sizeof( Q_plsfState ) ) ) == NULL ) { //fprintf( stderr, "can not malloc state structure\n" ); return-1; } /* init gainQuantState */ if ( ( s->gainQuantSt = ( gainQuantState * ) malloc( sizeof( gainQuantState ) ) ) == NULL ) { //fprintf( stderr, "can not malloc state structure\n" ); return-1; } /* init gc_predState x2 */ if ( ( s->gainQuantSt->gc_predSt = ( gc_predState * ) malloc( sizeof( gc_predState ) ) ) == NULL ) { //fprintf( stderr, "can not malloc state structure\n" ); return-1; } if ( ( s->gainQuantSt->gc_predUncSt = ( gc_predState * ) malloc( sizeof( gc_predState ) ) ) == NULL ) { //fprintf( stderr, "can not malloc state structure\n" ); return-1; } /* init gain_adaptState */ if ( ( s->gainQuantSt->adaptSt = ( gain_adaptState * ) malloc( sizeof( gain_adaptState ) ) ) == NULL ) { //fprintf( stderr, "can not malloc state structure\n" ); return-1; } /* init pitchOLWghtState */ if ( ( s->pitchOLWghtSt = ( pitchOLWghtState * ) malloc( sizeof( pitchOLWghtState ) ) ) == NULL ) { //fprintf( stderr, "can not malloc state structure\n" ); return-1; } /* init tonStabState */ if ( ( s->tonStabSt = ( tonStabState * ) malloc( sizeof( tonStabState ) ) ) == NULL ) { //fprintf( stderr, "can not malloc state structure\n" ); return-1; } /* init lpcState */ if ( ( s->lpcSt = ( lpcState * ) malloc( sizeof( lpcState ) ) ) == NULL ) { //fprintf( stderr, "can not malloc state structure\n" ); return-1; } /* init LevinsonState */ if ( ( s->lpcSt->LevinsonSt = ( LevinsonState * ) malloc( sizeof( LevinsonState ) ) ) == NULL ) { //fprintf( stderr, "can not malloc state structure\n" ); return-1; } if ( ( s->vadSt = ( vadState * ) malloc( sizeof( vadState ) ) ) == NULL ) { //fprintf( stderr, "can not malloc state structure\n" ); return-1; } /* Init dtx_encState */ if ( ( s->dtxEncSt = ( dtx_encState * ) malloc( sizeof( dtx_encState ) ) ) == NULL ) { //fprintf( stderr, "can not malloc state structure\n" ); return-1; } cod_amr_reset( s, dtx ); *state = s; return 0; } /* * cod_amr_exit * * * Parameters: * state I: state structure * * Function: * The memory used for state memory is freed * * Returns: * Void */ static void cod_amr_exit( cod_amrState **state ) { if ( state == NULL || *state == NULL ) return; /* deallocate memory */ free( ( *state )->vadSt ); free( ( *state )->gainQuantSt->gc_predSt ); free( ( *state )->gainQuantSt->gc_predUncSt ); free( ( *state )->gainQuantSt->adaptSt ); free( ( *state )->clLtpSt->pitchSt ); free( ( *state )->lspSt->qSt ); free( ( *state )->lpcSt->LevinsonSt ); free( ( *state )->lpcSt ); free( ( *state )->lspSt ); free( ( *state )->clLtpSt ); free( ( *state )->gainQuantSt ); free( ( *state )->pitchOLWghtSt ); free( ( *state )->tonStabSt ); free( ( *state )->dtxEncSt ); free( *state ); *state = NULL; return; } /* * Speech_Encode_Frame_init * * * Parameters: * state O: state structure * dtx I: dtx mode used * * Function: * Allocates state memory and initializes state memory * * Returns: * succeed = 0 */ void * Speech_Encode_Frame_init( int dtx ) { Speech_Encode_FrameState * s; /* allocate memory */ if ( ( s = ( Speech_Encode_FrameState * ) malloc( sizeof( Speech_Encode_FrameState ) ) ) == NULL ) { //fprintf( stderr, "Speech_Encode_Frame_init: can not malloc state structure\n" ); return NULL; } s->pre_state = NULL; s->cod_amr_state = NULL; s->dtx = dtx; if (Pre_Process_init( &s->pre_state ) || cod_amr_init( &s->cod_amr_state, dtx ) ) { Speech_Encode_Frame_exit( ( void ** )( &s ) ); return NULL; } return s; } /* * Speech_Encode_Frame_reset * * * Parameters: * state O: state structure * * Function: * Resets state memory * * Returns: * */ int Speech_Encode_Frame_reset( void *st, int dtx ) { Speech_Encode_FrameState * state; state = ( Speech_Encode_FrameState * )st; if ( ( Speech_Encode_FrameState * )state == NULL ) { //fprintf( stderr, "Speech_Encode_Frame_reset: invalid parameter\n" ); return-1; } Pre_Process_reset( state->pre_state ); cod_amr_reset( state->cod_amr_state, dtx ); return 0; } /* * Speech_Encode_Frame_exit * * * Parameters: * state I: state structure * * Function: * The memory used for state memory is freed * * Returns: * Void */ void Speech_Encode_Frame_exit( void **st ) { if ( ( Speech_Encode_FrameState * )( *st ) == NULL ) return; Pre_Process_exit( &( ( ( Speech_Encode_FrameState * )( *st ) )->pre_state ) ) ; cod_amr_exit( &( ( ( Speech_Encode_FrameState * )( *st ) )->cod_amr_state ) ) ; /* deallocate memory */ free( *st ); *st = NULL; return; } /* * Speech_Encode_Frame * * * Parameters: * st B: state structure * mode I: speech coder mode * new_speech I: speech input, size L_FRAME * prm O: Analysis parameters * used_mode B: force VAD/used_mode * Function: * Encode one frame * * Returns: * Void */ void Speech_Encode_Frame(void *st, enum Mode mode, const Word16 *new_speech, Word16 * prm, enum Mode *used_mode ) { Float32 syn[L_FRAME]; /* Buffer for synthesis speech */ Float32 speech[160]; Speech_Encode_FrameState * state; state = (Speech_Encode_FrameState *)st; /* filter + downscaling */ Pre_Process( &state->pre_state->y2, &state->pre_state->y1, &state->pre_state ->x0, &state->pre_state->x1, new_speech, speech ); /* Call the speech encoder */ cod_amr( state->cod_amr_state, mode, speech, prm, used_mode, syn ); } h323plus/plugins/audio/gsm-amr/src/decoder.c0000644000175000017500000000766211341106247017606 0ustar markmark/* * =================================================================== * TS 26.104 * REL-5 V5.4.0 2004-03 * REL-6 V6.1.0 2004-03 * 3GPP AMR Floating-point Speech Codec * =================================================================== * */ #include #include #include #include "interf_dec.h" #include "sp_dec.h" #include "typedef.h" #ifndef ETSI #ifndef IF2 #include #define AMR_MAGIC_NUMBER "#!AMR\n" #endif #endif void Copyright(void){ fprintf (stderr, "===================================================================\n" " TS 26.104 \n" " REL-5 V5.4.0 2004-03 \n" " REL-6 V6.1.0 2004-03 \n" " 3GPP AMR Floating-point Speech Decoder \n" "===================================================================\n" ); } /* * main * * * Function: * Speech decoder main program * * Usage: decoder bitstream_file synthesis_file * * Format for ETSI bitstream file: * 1 word (2-byte) for the TX frame type * 244 words (2-byte) containing 244 bits. * Bit 0 = 0x0000 and Bit 1 = 0x0001 * 1 word (2-byte) for the mode indication * 4 words for future use, currently written as zero * * Format for 3GPP bitstream file: * Holds mode information and bits packed to octets. * Size is from 1 byte to 31 bytes. * * Format for synthesis_file: * Speech is written to a 16 bit 8kHz file. * * ETSI bitstream file format is defined using ETSI as preprocessor * definition * Returns: * 0 */ int main (int argc, char * argv[]){ FILE * file_speech, *file_analysis; short synth[160]; int frames = 0; int * destate; int read_size; #ifndef ETSI unsigned char analysis[32]; enum Mode dec_mode; #ifdef IF2 short block_size[16]={ 12, 13, 15, 17, 18, 20, 25, 30, 5, 0, 0, 0, 0, 0, 0, 0 }; #else char magic[8]; short block_size[16]={ 12, 13, 15, 17, 19, 20, 26, 31, 5, 0, 0, 0, 0, 0, 0, 0 }; #endif #else short analysis[250]; #endif /* Process command line options */ if (argc == 3){ file_speech = fopen(argv[2], "wb"); if (file_speech == NULL){ fprintf ( stderr, "%s%s%s\n","Use: ",argv[0], " input.file output.file " ); return 1; } file_analysis = fopen(argv[1], "rb"); if (file_analysis == NULL){ fprintf ( stderr, "%s%s%s\n","Use: ",argv[0], " input.file output.file " ); fclose(file_speech); return 1; } } else { fprintf ( stderr, "%s%s%s\n","Use: ",argv[0], " input.file output.file " ); return 1; } Copyright(); /* init decoder */ destate = Decoder_Interface_init(); #ifndef ETSI #ifndef IF2 /* read and verify magic number */ fread( magic, sizeof( char ), strlen( AMR_MAGIC_NUMBER ), file_analysis ); if ( strncmp( magic, AMR_MAGIC_NUMBER, strlen( AMR_MAGIC_NUMBER ) ) ) { fprintf( stderr, "%s%s\n", "Invalid magic number: ", magic ); fclose( file_speech ); fclose( file_analysis ); return 1; } #endif #endif #ifndef ETSI /* find mode, read file */ while (fread(analysis, sizeof (unsigned char), 1, file_analysis ) > 0) { #ifdef IF2 dec_mode = analysis[0] & 0x000F; #else dec_mode = (analysis[0] >> 3) & 0x000F; #endif read_size = block_size[dec_mode]; fread(&analysis[1], sizeof (char), read_size, file_analysis ); #else read_size = 250; /* read file */ while (fread(analysis, sizeof (short), read_size, file_analysis ) > 0) { #endif frames ++; /* call decoder */ Decoder_Interface_Decode(destate, analysis, synth, 0); fwrite( synth, sizeof (short), 160, file_speech ); } Decoder_Interface_exit(destate); fclose(file_speech); fclose(file_analysis); fprintf ( stderr, "\n%s%i%s\n","Decoded ", frames, " frames."); return 0; } h323plus/plugins/audio/gsm-amr/src/interf_dec.h0000644000175000017500000000172211341106247020277 0ustar markmark/* * =================================================================== * TS 26.104 * REL-5 V5.4.0 2004-03 * REL-6 V6.1.0 2004-03 * 3GPP AMR Floating-point Speech Codec * =================================================================== * */ /* * interf_dec.h * * * Project: * AMR Floating-Point Codec * * Contains: * Defines interface to AMR decoder * */ #ifndef _interf_dec_h_ #define _interf_dec_h_ /* * Function prototypes */ #ifdef __cplusplus extern "C" { #endif /* * Conversion from packed bitstream to endoded parameters * Decoding parameters to speech */ extern void Decoder_Interface_Decode( void *st, #ifndef ETSI unsigned char *bits, #else short *bits, #endif short *synth, int bfi ); /* * Reserve and init. memory */ extern void *Decoder_Interface_init( void ); /* * Exit and free memory */ extern void Decoder_Interface_exit( void *state ); #ifdef __cplusplus } #endif #endif // !_interf_dec_h_ h323plus/plugins/audio/gsm-amr/src/rom_enc.h0000644000175000017500000062771611341106247017640 0ustar markmark/* * =================================================================== * TS 26.104 * R99 V3.3.0 2001-09 * REL-4 V4.2.0 2001-09 * 3GPP AMR Floating-point Speech Codec * =================================================================== * */ /* * rom_enc.h * * * Project: * AMR Floating-Point Codec * * Contains: * This file contains all the tables needed by AMR encoder functions. * */ #ifndef _ROM_ENC_H_ #define _ROM_ENC_H_ #include "typedef.h" #include "sp_enc.h" #define M 10 /* Order of LP filter */ #define MP1 (M+1) /* Order of LP filter + 1 */ #define L_WINDOW 240 /* Window size in LP analysis */ #define L_NEXT 40 /* Overhead in LP analysis */ #define LTPG_MEM_SIZE 5 /* number of stored past LTP coding gains + 1 */ #define N_FRAME 7 /* old pitch gains in average calculation */ #define DTX_HIST_SIZE 8 /* DTX history size */ #define L_TOTAL 320 /* Total size of speech buffer. */ #define L_FRAME 160 /* Frame size */ #define L_FRAME_BY2 80 /* Frame size divided by 2 */ #define L_SUBFR 40 /* Subframe size */ #define L_CODE 40 /* codevector length */ #define PIT_MAX 143 /* Maximum pitch lag */ #define PIT_MIN 20 /* Minimum pitch lag */ #define PIT_MIN_MR122 18 /* Minimum pitch lag (MR122 mode) */ #define L_INTERPOL (10+1)/* Length of filter for interpolation */ #define NPRED 4 /* number of prediction taps */ #define SHARPMIN 0 /* Minimum value of pitch sharpening */ #define MAX_PRM_SIZE 57 /* max. num. of params */ #define L_INTER_SRCH 4 /* Length of filter for CL LTP search interpolation */ #define GP_CLIP 0.95F /* Pitch gain clipping */ #define UP_SAMP_MAX 6 #define NB_TRACK 5 /* number of tracks */ #define NB_TRACK_MR102 4 /* number of tracks mode mr102 */ #define STEP 5 /* codebook step size */ #define STEP_MR102 4 /* codebook step size mode mr102 */ #define NC M/2 /* Order of LP filter divided by 2 */ #define SCALE_LSP_FREQ (Float32)(4000.0/3.141592654) #define SCALE_FREQ_LSP (Float32)(3.141592654/4000.0) #define SLOPE1_WGHT_LSF (Float32)((3.347-1.8)/(450.0-0.0)) #define SLOPE2_WGHT_LSF (Float32)((1.8-1.0)/(1500.0-450.0)) #define FRAME_LEN 160 /* Length (samples) of the input frame */ #define COMPLEN 9 /* Number of sub-bands used by VAD */ #define INV_COMPLEN 3641 /* 1.0/COMPLEN*2^15 */ #define LOOKAHEAD 40 /* length of the lookahead used by speech coder */ #define UNITY 512 /* Scaling used with SNR calculation */ #define UNIRSHFT 6 /* = log2(MAX_16/UNITY) */ #define TONE_THR 0.65F /* Threshold for tone detection */ /* Constants for background spectrum update */ #define ALPHA_UP1 (Float32)(1.0 - 0.95) /* Normal update, upwards: */ #define ALPHA_DOWN1 (Float32)(1.0 - 0.936) /* Normal update, downwards */ #define ALPHA_UP2 (Float32)(1.0 - 0.985) /* Forced update, upwards */ #define ALPHA_DOWN2 (Float32)(1.0 - 0.943) /* Forced update, downwards */ #define ALPHA3 (Float32)(1.0 - 0.95) /* Update downwards */ #define ALPHA4 (Float32)(1.0 - 0.9) /* For stationary estimation */ #define ALPHA5 (Float32)(1.0 - 0.5) /* For stationary estimation */ /* Constants for VAD threshold */ #define VAD_THR_HIGH 1260 /* Highest threshold */ #define VAD_THR_LOW 720 /* Lowest threshold */ #define VAD_P1 0 /* Noise level for highest threshold */ #define VAD_P2 6300 /* Noise level for lowest threshold */ #define VAD_SLOPE (float)(VAD_THR_LOW-VAD_THR_HIGH)/(float)(VAD_P2-VAD_P1) /* Parameters for background spectrum recovery function */ #define STAT_COUNT 20 /* threshold of stationary detection counter */ #define STAT_COUNT_BY_2 10 /* threshold of stationary detection counter */ #define CAD_MIN_STAT_COUNT 5 /* threshold of stationary detection counter */ #define STAT_THR_LEVEL 184 /* Threshold level for stationarity detection */ #define STAT_THR 1000 /* Threshold for stationarity detection */ /* Limits for background noise estimate */ #define NOISE_MIN 40 /* minimum */ #define NOISE_MAX 16000 /* maximum */ #define NOISE_INIT 150 /* initial */ /* Constants for VAD hangover addition */ #define HANG_NOISE_THR 100 #define BURST_LEN_HIGH_NOISE 4 #define HANG_LEN_HIGH_NOISE 7 #define BURST_LEN_LOW_NOISE 5 #define HANG_LEN_LOW_NOISE 4 /* Thresholds for signal power */ #define VAD_POW_LOW (Word32)15000/2 /* If input power is lower, */ /* VAD is set to 0 */ #define POW_PITCH_THR (Word32)343040/2 /* If input power is lower, pitch */ /* detection is ignored */ #define POW_COMPLEX_THR (Word32)15000/2/* If input power is lower, complex */ /* flags value for previous frame is un-set */ /* * VAD Constants */ /* Constants for the filter bank */ #define LEVEL_SHIFT 0 /* scaling */ #define COEFF3 (Float32)13363/32768 /* coefficient for the 3rd order filter */ #define COEFF5_1 (Float32)21955/32768 /* 1st coefficient the for 5th order filter */ #define COEFF5_2 (Float32)6390/32768 /* 2nd coefficient the for 5th order filter */ /* Constants for pitch detection */ #define LTHRESH 4 #define NTHRESH 4 /* Constants for complex signal VAD */ #define CVAD_THRESH_ADAPT_HIGH 0.6F /* threshold for adapt stopping high */ #define CVAD_THRESH_ADAPT_LOW 0.5F /* threshold for adapt stopping low */ #define CVAD_THRESH_IN_NOISE 0.65F * 32768.0F /* threshold going into speech on a short term basis */ #define CVAD_THRESH_HANG 0.70F /* threshold */ #define CVAD_HANG_LIMIT (Word16)(100) /* 2 second estimation time */ #define CVAD_HANG_LENGTH (Word16)(250) /* 5 second hangover */ #define CVAD_LOWPOW_RESET 0.40F /* init in low power segment */ #define CVAD_MIN_CORR 0.40F /* lowest adaptation value */ #define CVAD_BURST 20 /* speech burst length for speech reset */ #define CVAD_ADAPT_SLOW 1.0F - 0.98F /* threshold for slow adaption */ #define CVAD_ADAPT_FAST 1.0F - 0.92F /* threshold for fast adaption */ #define CVAD_ADAPT_REALLY_FAST 1.0F - 0.80F /* threshold for really fast adaption */ /* track table for algebraic code book search (MR475, MR515) */ static Word8 trackTable[4 * 5] = { /* subframe 1; track to code; -1 do not code this position */ 0, 1, 0, 1, - 1, /* subframe 2 */ 0, - 1, 1, 0, 1, /* subframe 3 */ 0, 1, 0, - 1, 1, /* subframe 4 */ 0, 1, - 1, 0, 1 }; static const Float32 gamma1[M] = { 0.9400024414063F, 0.8836059570313F, 0.8305969238281F, 0.78076171875F, 0.7339172363281F, 0.6898803710938F, 0.6484985351563F, 0.6095886230469F, 0.5730285644531F, 0.5386352539063F }; /* * gamma1 for the 12k2 coder */ static const Float32 gamma1_12k2[M] = { 0.8999938964844F, 0.8099975585938F, 0.72900390625F, 0.6560974121094F, 0.5904846191406F, 0.5314331054688F, 0.478271484375F, 0.4304504394531F, 0.3873901367188F, 0.3486633300781F }; static const Float32 gamma2[M] = { 0.6000061035156F, 0.3600158691406F, 0.2160034179688F, 0.1296081542969F, 0.0777587890625F, 0.04666137695313F, 0.02798461914063F, 0.01678466796875F, 0.01007080078125F, 0.00604248046875F }; /* 1/6 resolution interpolation filter (-3 dB at 3600 Hz) * Note: the 1/3 resolution filter is simply a subsampled * version of the 1/6 resolution filter, i.e. it uses * every second coefficient: * * inter_6(1/3)[k] = inter_6(1/3)[2*k], 0 <= k <= 3*L_INTER10 */ static Float32 b60[UP_SAMP_MAX*(L_INTERPOL-1)+1] = { 0.898529F, 0.865051F, 0.769257F, 0.624054F, 0.448639F, 0.265289F, 0.0959167F, - 0.0412598F, - 0.134338F, - 0.178986F, - 0.178528F, - 0.142609F, - 0.0849304F, - 0.0205078F, 0.0369568F, 0.0773926F, 0.0955200F, 0.0912781F, 0.0689392F, 0.0357056F, 0.000000F, - 0.0305481F, - 0.0504150F, - 0.0570068F, - 0.0508423F, - 0.0350037F, - 0.0141602F, 0.00665283F, 0.0230713F, 0.0323486F, 0.0335388F, 0.0275879F, 0.0167847F, 0.00411987F, - 0.00747681F, - 0.0156860F, - 0.0193481F, - 0.0183716F, - 0.0137634F, - 0.00704956F, 0.000000F, 0.00582886F, 0.00939941F, 0.0103760F, 0.00903320F, 0.00604248F, 0.00238037F, - 0.00109863F, - 0.00366211F, - 0.00497437F, - 0.00503540F, - 0.00402832F, - 0.00241089F, - 0.000579834F, 0.00103760F, 0.00222778F, 0.00277710F, 0.00271606F, 0.00213623F, 0.00115967F, 0.000000F }; /* same in fixed-point */ static const Word32 inter6[61] = { 29443, 28346, 25207, 20449, 14701, 8693, 3143, - 1352, - 4402, - 5865, - 5850, - 4673, - 2783, - 672, 1211, 2536, 3130, 2991, 2259, 1170, 0, - 1001, - 1652, - 1868, - 1666, - 1147, - 464, 218, 756, 1060, 1099, 904, 550, 135, - 245, - 514, - 634, - 602, - 451, - 231, 0, 191, 308, 340, 296, 198, 78, - 36, - 120, - 163, - 165, - 132, - 79, - 19, 34, 73, 91, 89, 70, 38, 0 }; static const Word16 startPos1[2] = { 1, 3 }; static const Word16 startPos2[4] = { 0, 1, 2, 4 }; static const Word16 startPos[2 * 4 * 2] = { 0, 2, 0, 3, 0, 2, 0, 3, 1, 3, 2, 4, 1, 4, 1, 4 }; /* Scalar quantization tables of the pitch gain and the codebook gain. */ #define NB_QUA_PITCH 16 static const Float32 qua_gain_pitch[NB_QUA_PITCH] = { 0.0F, 0.20001220703125F, 0.400146484375F, 0.5F, 0.5999755859375F, 0.70001220703125F, 0.75F, 0.79998779296875F, 0.8499755859375F, 0.9000244140625F, 0.95001220703125F, 1.0F, 1.04998779296875F, 1.0999755859375F, 1.1500244140625F, 1.20001220703125F }; static const Float32 qua_gain_pitch_MR122[NB_QUA_PITCH] = { 0.0F, 0.199951171875F, 0.400146484375F, 0.5F, 0.599853515625F, 0.699951171875F, 0.75F, 0.7998046875F, 0.849853515625F, 0.89990234375F, 0.949951171875F, 1.0F, 1.0498046875F, 1.099853515625F, 1.14990234375F, 1.199951171875F }; #define NB_QUA_CODE 32 static const Float32 gain_factor[NB_QUA_CODE] = { /* gain factor (g_fac) */ 0.0776367F, 0.100586F, 0.130859F, 0.170410F, 0.204590F, 0.235352F, 0.270508F, 0.311035F, 0.357910F, 0.411133F, 0.473145F, 0.543945F, 0.625488F, 0.719238F, 0.827148F, 0.951172F, 1.09424F, 1.25830F, 1.44678F, 1.66406F, 1.91357F, 2.20068F, 2.53076F, 2.91016F, 3.34717F, 3.84912F, 4.42627F, 5.09033F, 6.10840F, 7.94092F, 10.3232F, 13.4204F }; static const Word8 gray[8] = { 0, 1, 3, 2, 6, 4, 5, 7 }; /* * grid[0] = 1.0; * grid[61] = -1.0; * for (i = 1; i < 61; i++) * grid[i] = (Float32)cos((6.283185307*i)/(2.0*60)); */ static const Float32 grid[61] = { 1.00000F, 0.998630F, 0.994522F, 0.987688F, 0.978148F, 0.965926F, 0.951057F, 0.933580F, 0.913545F, 0.891007F, 0.866025F, 0.838671F, 0.809017F, 0.777146F, 0.743145F, 0.707107F, 0.669131F, 0.629320F, 0.587785F, 0.544639F, 0.500000F, 0.453990F, 0.406737F, 0.358368F, 0.309017F, 0.258819F, 0.207912F, 0.156434F, 0.104528F, 0.0523360F, 4.48966e-011F, - 0.0523360F, - 0.104528F, - 0.156434F, - 0.207912F, - 0.258819F, - 0.309017F, - 0.358368F, - 0.406737F, - 0.453990F, - 0.500000F, - 0.544639F, - 0.587785F, - 0.629320F, - 0.669131F, - 0.707107F, - 0.743145F, - 0.777146F, - 0.809017F, - 0.838671F, - 0.866025F, - 0.891007F, - 0.913545F, - 0.933580F, - 0.951057F, - 0.965926F, - 0.978148F, - 0.987688F, - 0.994522F, - 0.998630F, - 1.00000F }; /* * 1/6 resolution interpolation filter (-3 dB at 3600 Hz) * Note: The IS641 (7.4) 1/3 resolution filter is simply a subsampled * version of the 1/6 resolution filter, i.e. it uses * every second coefficient: * * b24[k](1/3) = b24[2*k](1/6), 0 <= k <= 3*L_INTER_SRCH */ static const Float32 b24[UP_SAMP_MAX*L_INTER_SRCH+1] = { 0.900848F, 0.864136F, 0.760071F, 0.605408F, 0.424072F, 0.242462F, 0.0840759F, - 0.0343933F, - 0.105560F, - 0.131348F, - 0.121124F, - 0.0884705F, - 0.0476379F, - 0.0102539F, 0.0162964F, 0.0296021F, 0.0312195F, 0.0251160F, 0.0157471F, 0.00671387F, 0.000000F, - 0.00399780F, - 0.00592041F, - 0.00656128F, 0.000000F }; /* * Exponential Window coefficients used to weight the autocorrelation * coefficients for 60 Hz bandwidth expansion of high pitched voice * before Levinson-Durbin recursion to compute the LPC coefficients. * * lagwindow[i] = exp( -0.5*(2*pi*F0*(i+1)/Fs)^2 ); i = 0,...,9 * F0 = 60 Hz, Fs = 8000 Hz */ static Float32 lag_wind[M] = { 0.99889028F, 0.99556851F, 0.99005681F, 0.98239160F, 0.97262347F, 0.96081644F, 0.94704735F, 0.93140495F, 0.91398895F, 0.89490914F }; /* initialization table for lsp history in DTX */ static const Float32 lsp_init_data[M] = { 0.9595F, 0.8413F, 0.6549F, 0.4154F, 0.1423F, - 0.1423F, - 0.4154F, - 0.6549F, - 0.8413F, - 0.9595F }; #define PAST_RQ_INIT_SIZE 8 /* initalization table for MA predictor in dtx mode */ static const Float32 past_rq_init[80] = { -62.9883F, -77.6367F, -107.178F, -154.785F, -160.156F, -188.721F, -173.584F, -122.559F, -65.4297F, -47.1191F, -0.488281F, 30.5176F, 29.7852F, -9.52148F, -2.19727F, 25.6348F, 31.4941F, 69.0918F, 90.8203F, 140.381F, -67.627F, -79.1016F, -48.0957F, -118.896F, -108.643F, -88.3789F, -71.2891F, -6.5918F, 43.2129F, 132.568F, 83.4961F, 126.221F, 125.977F, 31.7383F, 6.5918F, -25.3906F, -29.2969F, -34.1797F, -18.0664F, -13.6719F, -137.695F, -230.225F, -371.094F, -235.596F, -198.73F, -128.418F, -78.6133F, -0.488281F, 38.8184F, 160.4F, -76.1719F, -69.3359F, -94.2383F, -145.752F, -120.361F, -128.418F, -102.051F, -55.9082F, 25.6348F, 109.619F, -135.986F, -212.402F, -262.451F, -224.365F, -231.934F, -183.594F, -173.096F, -77.1484F, 15.1367F, 118.652F, -76.6602F, -46.6309F, -49.5605F, -80.5664F, -39.0625F, -25.1465F, -12.4512F, 31.9824F, 82.5195F, 125.732F }; /* LSF means ->normalize frequency domain */ static const Float32 mean_lsf_3[10] = { 377.441F, 554.688F, 922.363F, 1339.84F, 1702.15F, 2046.39F, 2452.88F, 2741.46F, 3116.70F, 3348.14F, }; static const Float32 mean_lsf_5[10] = { 337.891F, 507.080F, 834.961F, 1247.07F, 1646.00F, 1982.91F, 2407.96F, 2708.01F, 3104.00F, 3344.97F, }; /* LSF prediction factors (not in MR122) */ static const Float32 pred_fac[10] = { 0.291626F, 0.328644F, 0.383636F, 0.405640F, 0.438873F, 0.355560F, 0.323120F, 0.298065F, 0.262238F, 0.197876F }; /* codebooks from IS641 */ #define DICO1_SIZE_3 256 #define DICO2_SIZE_3 512 #define DICO3_SIZE_3 512 static const Float32 dico1_lsf_3[] = { 1.46484F, 20.0195F, -31.9824F, 37.5977F, -13.6719F, -179.443F, 44.6777F, -15.8691F, -64.6973F, 2.19727F, -51.2695F, -88.1348F, 27.5879F, 175.293F, 443.604F, 246.582F, 296.387F, 384.033F, 209.229F, 325.439F, 555.664F, 201.904F, 382.813F, 471.924F, 175.049F, 485.596F, 538.574F, 204.590F, 286.133F, 445.068F, 176.025F, 244.141F, 525.879F, 69.8242F, 116.211F, 368.408F, -60.3027F, -129.639F, 56.1523F, 35.8887F, -20.0195F, 138.916F, 6.34766F, -43.2129F, -230.469F, -6.59180F, -66.6504F, 168.945F, -40.0391F, -64.4531F, -44.6777F, 54.6875F, 192.871F, 253.662F, 219.482F, 230.957F, 146.729F, 118.408F, 188.232F, 280.762F, 127.930F, 165.283F, 220.459F, -34.1797F, 91.5527F, 189.941F, 100.098F, 165.039F, 104.736F, 73.4863F, 129.395F, 246.338F, 175.537F, 157.715F, 9.27734F, 55.1758F, 89.5996F, 9.76563F, 35.4004F, -10.9863F, -123.291F, 70.8008F, 29.5410F, -29.5410F, 73.7305F, 31.0059F, 40.5273F, -30.2734F, -93.5059F, -233.398F, -87.4023F, -111.084F, -238.525F, 174.561F, 214.355F, 218.262F, 238.770F, 225.342F, 51.5137F, 116.455F, 66.4063F, 15.6250F, 45.8984F, -19.0430F, 4.15039F, -34.9121F, -15.8691F, 9.27734F, 156.982F, 143.066F, 151.611F, -32.7148F, -104.004F, -158.936F, 84.7168F, 133.057F, 688.477F, 290.039F, 665.527F, 596.191F, 34.6680F, -19.5313F, 423.584F, 69.0918F, 31.7383F, 112.549F, -63.9648F, -97.4121F, -279.541F, -100.342F, 37.8418F, 104.980F, 80.3223F, 91.5527F, 190.186F, 12.9395F, -55.1758F, -33.9355F, -31.4941F, -57.6172F, 410.645F, 69.5801F, 181.641F, 323.975F, 180.176F, 170.166F, 406.250F, 76.1719F, 99.8535F, 64.9414F, 79.3457F, 175.781F, 32.9590F, 0.244141F, 53.9551F, 110.596F, 1.95313F, 49.5605F, 35.4004F, 72.9980F, 156.250F, 185.547F, 7.08008F, 114.258F, 155.762F, 25.1465F, 104.736F, 92.5293F, 102.539F, 232.910F, 227.539F, 323.730F, 295.410F, 307.129F, 171.875F, 247.070F, 281.250F, -40.5273F, -108.398F, -64.9414F, -77.1484F, -31.7383F, -91.7969F, 46.6309F, 281.006F, 464.844F, -58.5938F, -132.568F, -307.617F, -27.3438F, 65.4297F, 294.678F, 17.0898F, 259.277F, 386.475F, 67.8711F, 332.031F, 384.277F, -62.9883F, -66.4063F, -187.500F, 4.63867F, 137.451F, 546.875F, -0.732422F, -64.6973F, 32.9590F, -72.0215F, -144.287F, -94.7266F, 34.1797F, 86.4258F, -50.2930F, -63.4766F, -123.047F, -194.092F, -105.713F, -175.293F, -322.021F, 26.6113F, 80.8105F, 234.863F, -104.736F, -21.2402F, 159.180F, -72.2656F, 104.004F, 248.779F, -58.3496F, 189.209F, 207.764F, 119.385F, 325.684F, 261.963F, -81.5430F, -81.0547F, 6.10352F, 132.568F, 294.434F, 441.162F, 79.5898F, 14.8926F, 177.490F, 141.113F, 207.275F, 343.018F, -50.7813F, -67.6270F, 80.3223F, -37.1094F, 15.6250F, 163.330F, -105.957F, -165.527F, -177.490F, -110.840F, -17.3340F, 61.2793F, 147.705F, 117.188F, 62.0117F, -117.676F, 2.68555F, 243.164F, -70.5566F, 96.4355F, 118.652F, 176.270F, 256.104F, 351.563F, -7.32422F, -77.1484F, -191.895F, -25.8789F, -28.0762F, -151.123F, 210.205F, 359.863F, 344.727F, 257.568F, 333.496F, 289.063F, 198.242F, 302.002F, 225.830F, 10.2539F, -61.2793F, -140.625F, 83.4961F, 34.4238F, -110.840F, -41.0156F, -19.5313F, 331.787F, -83.4961F, -160.156F, -430.420F, 24.4141F, 200.439F, 177.002F, 241.699F, 182.373F, 195.313F, 81.0547F, 107.422F, 138.672F, 161.865F, 92.5293F, 208.008F, 27.3438F, 40.2832F, -90.0879F, 145.752F, 222.168F, 68.8477F, -1.95313F, 203.613F, 312.744F, -85.9375F, 139.648F, 169.678F, 112.793F, 548.340F, 440.918F, 84.2285F, 46.3867F, 335.449F, 101.563F, 223.389F, 528.809F, 41.0156F, -20.0195F, 68.3594F, -125.977F, -108.887F, 205.078F, 11.4746F, 130.127F, 10.7422F, -88.3789F, -173.584F, -279.053F, 5.37109F, 47.1191F, 359.375F, -20.7520F, 56.8848F, 442.627F, -15.1367F, 141.357F, 367.188F, 134.277F, 230.469F, 427.002F, 176.514F, 158.691F, 280.273F, 237.305F, 215.820F, 340.576F, -103.760F, 156.982F, 0.000000F, 244.141F, 232.422F, 268.066F, 60.7910F, 353.027F, 164.063F, -81.5430F, -21.2402F, 530.273F, -135.254F, 459.473F, 652.344F, 34.1797F, 445.801F, 452.393F, 224.609F, 427.002F, 632.324F, 262.695F, 471.924F, 497.559F, -33.4473F, -108.154F, -379.639F, 309.814F, 286.621F, 114.258F, -120.361F, -29.7852F, 371.338F, -110.107F, 252.197F, 296.387F, 117.676F, 413.818F, 272.949F, 198.975F, 158.447F, 93.7500F, -108.887F, -168.945F, 26.1230F, -77.8809F, -147.705F, -28.8086F, -50.5371F, -123.291F, 128.174F, -114.258F, -2.92969F, 667.969F, 18.3105F, 472.168F, 318.604F, 214.844F, 575.684F, 553.467F, 313.721F, 384.521F, 489.258F, -11.7188F, -74.2188F, -289.551F, -106.201F, -112.549F, -61.2793F, -89.3555F, -98.6328F, -133.545F, -70.5566F, -147.705F, -145.752F, -131.348F, -197.754F, -40.2832F, -29.2969F, 0.732422F, 86.9141F, 156.006F, 302.979F, 366.699F, 23.4375F, 43.2129F, 183.105F, -106.201F, -142.822F, -286.621F, -86.9141F, 26.6113F, -19.2871F, -118.408F, 70.3125F, 489.502F, 2.19727F, 272.461F, 178.467F, 214.844F, 520.996F, 230.957F, -64.6973F, 386.963F, 260.010F, 282.471F, 295.410F, 205.811F, -121.582F, -163.086F, 105.225F, 91.3086F, 78.3691F, -55.9082F, 351.563F, 512.939F, 337.158F, 109.619F, 112.549F, 281.982F, -25.6348F, 9.52148F, -93.7500F, -64.2090F, 89.5996F, 44.4336F, -90.5762F, -161.133F, 188.721F, -45.8984F, 281.006F, 237.061F, 325.439F, 398.438F, 350.342F, 188.965F, 309.326F, 298.096F, -117.676F, -203.125F, -363.525F, -57.8613F, -51.2695F, 209.961F, 217.285F, 394.287F, 259.766F, 115.234F, 259.277F, 291.016F, 45.1660F, 262.939F, 241.455F, -138.672F, -242.188F, -416.016F, -109.619F, -220.215F, -498.779F, -34.6680F, -92.0410F, -111.816F, -51.2695F, -135.254F, -251.221F, -2.68555F, 276.611F, 552.979F, -80.3223F, -164.795F, -218.018F, -61.0352F, 160.400F, 289.795F, 126.709F, 368.652F, 434.326F, 126.953F, 131.592F, 342.529F, 128.662F, 346.924F, 317.871F, -137.451F, -212.646F, -304.688F, -35.8887F, -113.037F, 214.600F, -18.5547F, 569.824F, 693.359F, 137.451F, 628.174F, 582.275F, 154.297F, 470.215F, 712.891F, 175.537F, 493.896F, 449.219F, -133.057F, -176.514F, 270.508F, 31.4941F, -30.5176F, 215.820F, 345.947F, 398.438F, 225.830F, -22.9492F, 382.324F, 427.490F, -83.2520F, 374.268F, 378.662F, 144.287F, 96.4355F, -66.8945F, -18.5547F, 239.502F, 691.162F, 37.3535F, 728.760F, 450.195F, 251.953F, 626.221F, 671.143F, 368.164F, 691.406F, 458.740F, 193.115F, 292.725F, 131.348F, -46.3867F, -110.596F, 363.525F, -67.8711F, -133.789F, 282.715F, -59.8145F, 473.877F, 499.023F, 250.000F, 380.859F, 402.832F, 125.000F, 61.7676F, 113.770F, -15.1367F, -78.8574F, 281.006F, -115.479F, -91.7969F, 123.779F, -105.713F, 336.914F, 527.832F, 219.482F, 474.365F, 352.783F, 32.7148F, 171.875F, 107.422F, 112.305F, 128.174F, -6.83594F, -109.863F, 68.1152F, 326.660F, 0.000000F, 237.061F, 61.5234F, -108.643F, -153.076F, -241.943F, -84.9609F, -146.973F, -347.656F, 97.1680F, 173.828F, 404.297F, -26.1230F, 76.6602F, -43.4570F, 22.7051F, 543.457F, 546.387F, 126.465F, 207.275F, 160.156F, -112.793F, -173.584F, -109.131F, 42.4805F, -8.30078F, 290.771F, -29.0527F, 10.2539F, 245.361F, -90.8203F, 66.8945F, 185.059F, 252.930F, 574.219F, 448.730F, 164.795F, 420.898F, 365.723F, 104.980F, 313.965F, 520.752F, -31.4941F, -107.178F, 0.000000F, -91.0645F, 195.313F, 523.438F, 1.46484F, 387.451F, 604.980F, 116.699F, 145.508F, 519.531F, -104.492F, -179.688F, 367.432F, 93.9941F, 43.4570F, 239.258F, 33.9355F, 109.619F, 299.072F, -128.418F, -205.566F, -239.746F, 35.4004F, 379.395F, 303.223F, 152.100F, 353.516F, 160.156F, 85.2051F, 248.047F, 361.816F, 7.56836F, -68.3594F, 101.318F, -77.1484F, 176.758F, 400.635F, 87.8906F, 258.301F, 135.742F, -106.445F, -87.4023F, 293.213F, -86.6699F, 274.170F, 473.389F, 97.9004F, 386.719F, 548.828F, -128.662F, -247.070F, 86.6699F, 56.8848F, 58.1055F, 545.166F, -134.277F, -218.994F, -156.006F, -89.1113F, -122.314F, 477.783F, 94.9707F, 454.102F, 395.752F, 39.5508F, 276.367F, 308.594F, -57.8613F, 286.621F, 339.355F, -156.250F, -100.342F, 28.3203F, -55.6641F, 413.574F, 561.035F, 400.146F, 533.691F, 553.467F, 137.207F, 310.791F, 648.926F, 78.8574F, 82.5195F, 433.105F, 141.113F, 270.264F, 208.008F, 5.37109F, 145.020F, 228.027F, -34.9121F, 175.293F, 108.887F }; static const Float32 dico2_lsf_3[] = { 12.2070F, 17.3340F, -2.19727F, -82.5195F, -170.410F, -343.506F, 24.9023F, -33.6914F, -200.195F, -75.6836F, -114.502F, -280.029F, 101.074F, 16.3574F, -65.1855F, 258.789F, 198.730F, 351.807F, 377.930F, 332.031F, 310.547F, 428.223F, 462.646F, 405.518F, 492.920F, 520.752F, 444.336F, 441.406F, 565.918F, 450.439F, 157.227F, -22.7051F, 110.840F, 209.473F, 80.3223F, -33.2031F, 119.385F, -62.9883F, -31.2500F, -48.3398F, -181.885F, -10.0098F, -12.6953F, -64.6973F, -240.479F, 84.4727F, 33.4473F, 116.943F, -425.049F, -182.617F, -166.992F, -283.936F, -421.143F, -89.5996F, -218.506F, -279.541F, -191.406F, -119.141F, -230.957F, -236.328F, -20.7520F, -95.2148F, -177.002F, 52.4902F, -83.0078F, -41.7480F, 249.023F, 223.633F, 480.713F, 137.695F, 43.7012F, 182.129F, 161.621F, 238.525F, 423.340F, 216.553F, 151.855F, 223.145F, 229.248F, 208.984F, 284.424F, 75.4395F, 167.969F, 196.045F, 223.877F, 39.3066F, 139.160F, 28.8086F, -4.88281F, -69.0918F, -199.219F, -10.2539F, 49.8047F, -299.805F, -79.3457F, -112.793F, -235.107F, -49.3164F, -34.9121F, -241.211F, -118.164F, -88.1348F, -171.387F, -238.770F, -116.455F, -73.7305F, -192.871F, -290.039F, -24.4141F, -191.895F, -265.625F, -257.324F, -231.201F, -411.133F, -49.3164F, -205.811F, -190.918F, -253.662F, -336.426F, -219.971F, -152.344F, -26.8555F, -20.7520F, 86.9141F, 52.0020F, -2.44141F, -120.361F, 88.8672F, 188.965F, 103.760F, 200.684F, 116.943F, -20.2637F, 135.986F, 126.953F, -242.188F, -380.859F, -139.648F, -147.217F, -180.908F, -6.34766F, -122.559F, -155.762F, -220.459F, 51.0254F, 74.7070F, 35.8887F, -77.1484F, -144.775F, -145.508F, -20.7520F, -51.5137F, -54.9316F, -224.121F, -129.150F, 28.5645F, 56.8848F, -107.178F, -180.176F, 268.799F, 183.350F, 154.541F, 355.713F, 418.945F, 368.896F, 430.908F, 355.713F, 222.168F, 273.926F, 282.227F, 207.275F, 330.566F, 211.914F, 114.746F, -212.646F, -280.762F, -438.477F, -212.646F, -210.205F, -242.188F, -28.8086F, 37.8418F, 51.7578F, -256.592F, -207.275F, -147.949F, -272.705F, -451.416F, -671.387F, -248.779F, -348.389F, -456.299F, 90.3320F, -44.9219F, -101.074F, 234.131F, 120.361F, 25.3906F, 233.887F, 253.662F, 132.568F, 37.5977F, 159.424F, 49.0723F, 304.932F, 123.779F, 36.6211F, 161.865F, 122.803F, 56.1523F, 152.100F, 189.697F, 164.795F, 160.889F, 21.4844F, -26.8555F, 205.811F, 59.5703F, 54.6875F, 93.2617F, 132.080F, 73.7305F, 176.758F, 105.713F, 162.598F, 284.668F, 179.199F, 83.2520F, -33.6914F, 4.88281F, -96.9238F, -288.818F, -103.516F, -11.2305F, -78.3691F, -85.9375F, -30.2734F, 325.439F, 249.268F, 263.672F, 63.9648F, 89.3555F, 176.514F, 225.098F, 69.0918F, -134.521F, 7.56836F, -155.273F, -149.170F, -168.213F, -170.166F, -101.318F, -232.422F, -190.186F, -49.0723F, -324.463F, -145.996F, -87.6465F, -232.666F, -313.721F, 40.5273F, 120.361F, 74.4629F, 53.9551F, 206.543F, 171.631F, 148.926F, 205.078F, 228.516F, 188.965F, -176.514F, -323.242F, -307.861F, -87.1582F, -250.244F, -338.867F, -267.578F, -335.938F, -89.1113F, -345.703F, -459.229F, -148.438F, -438.965F, -421.631F, -164.551F, -133.057F, -286.377F, -171.631F, 165.527F, 191.895F, 36.1328F, -30.0293F, 169.922F, 314.453F, 157.227F, 85.4492F, -2.44141F, 101.074F, 149.902F, 3.66211F, 33.4473F, 83.9844F, -51.5137F, -198.730F, -369.141F, -199.951F, -95.4590F, -227.051F, -143.555F, 11.4746F, -144.287F, -219.238F, -221.924F, -267.822F, -39.7949F, -310.547F, -284.912F, -38.3301F, -357.422F, -372.314F, -94.9707F, -311.035F, -290.039F, -152.344F, 163.818F, 52.0020F, 110.840F, 30.2734F, -66.8945F, -128.174F, -177.979F, -121.094F, -37.1094F, -328.125F, 29.7852F, 32.9590F, -709.229F, -143.799F, -96.1914F, -421.875F, 107.666F, -12.2070F, 360.352F, 220.703F, 192.139F, 77.1484F, 57.6172F, -107.422F, -84.7168F, 52.9785F, 100.830F, -222.412F, -223.877F, 29.5410F, -111.084F, -227.539F, 49.3164F, -22.4609F, -113.525F, -91.5527F, 119.141F, 95.2148F, 115.723F, 213.867F, 177.979F, 77.1484F, -443.115F, -320.313F, -163.330F, 21.2402F, 234.863F, 105.469F, 137.451F, -60.7910F, -258.301F, 61.0352F, 69.5801F, 269.775F, 278.564F, 104.248F, 169.922F, -253.418F, -406.250F, -386.230F, -231.445F, 84.4727F, 39.0625F, -75.4395F, -66.4063F, -209.473F, 163.574F, 152.344F, 305.176F, -230.469F, -99.6094F, -162.598F, -147.949F, -78.1250F, -93.7500F, -120.117F, 56.1523F, 15.8691F, 81.5430F, -12.2070F, -3.90625F, -3.90625F, -168.457F, -341.064F, 437.256F, 418.945F, 341.553F, 604.980F, 503.662F, 342.773F, 303.955F, 359.131F, 348.145F, -93.2617F, -253.174F, -0.488281F, 42.2363F, -97.1680F, 279.541F, 364.014F, 494.141F, 439.697F, 188.477F, 311.035F, 367.676F, 348.877F, 423.584F, 488.525F, 263.428F, 297.363F, 310.791F, -281.738F, -451.904F, -324.463F, -197.266F, -276.611F, -267.578F, -110.107F, -252.197F, -420.410F, 15.8691F, 141.113F, -20.5078F, -360.352F, -594.238F, -434.082F, -186.768F, -333.496F, -120.605F, -53.2227F, -145.020F, -227.295F, 82.2754F, -57.6172F, 137.207F, 575.439F, 649.902F, 473.145F, 363.525F, 311.523F, 213.379F, 46.1426F, 87.4023F, 91.3086F, -370.850F, -556.885F, -572.754F, -236.084F, -310.303F, -511.475F, -153.320F, -290.039F, -376.465F, 405.518F, 254.639F, 133.301F, 137.939F, 259.033F, 178.711F, -15.6250F, -204.102F, -105.957F, -106.445F, -23.4375F, 49.5605F, 263.184F, 296.875F, 399.414F, 221.436F, 374.512F, 240.723F, 79.5898F, 235.596F, 206.299F, 34.6680F, -20.5078F, 48.0957F, 114.746F, 580.811F, 383.301F, 276.611F, 114.746F, 296.387F, 96.4355F, 335.938F, 292.969F, 274.658F, 254.395F, 84.9609F, -132.568F, -301.270F, -91.7969F, -52.4902F, -44.1895F, 117.432F, -475.342F, -395.752F, -51.2695F, -183.105F, -289.307F, 95.2148F, 7.08008F, -97.4121F, 6.59180F, 200.195F, 301.758F, 184.326F, 169.678F, 239.014F, 99.8535F, -42.4805F, 292.236F, 252.686F, 222.656F, 331.055F, 450.684F, -242.188F, -350.830F, 118.164F, -362.549F, -415.039F, 50.7813F, -100.586F, 293.945F, 349.609F, -66.1621F, 218.750F, 279.297F, -101.563F, 433.838F, 350.098F, -414.063F, -645.508F, -49.8047F, -436.768F, -378.662F, 252.197F, -404.297F, -380.615F, 318.115F, -305.908F, -387.939F, 263.916F, -163.330F, -267.334F, -16.1133F, -166.504F, 78.1250F, -84.2285F, 160.889F, 74.4629F, 260.986F, -315.430F, -196.289F, -4.63867F, -399.170F, -315.186F, 7.08008F, -410.889F, -121.338F, 17.3340F, -70.0684F, -1.70898F, -24.4141F, -120.605F, -234.863F, -57.8613F, 208.008F, 459.229F, 424.805F, -297.119F, -338.623F, 55.4199F, -161.133F, 73.7305F, 91.0645F, 23.4375F, 265.381F, 306.885F, -262.207F, -407.471F, 39.0625F, 118.408F, 506.836F, 438.965F, -228.027F, -53.7109F, 134.766F, -145.508F, -149.414F, 57.8613F, 82.0313F, 419.922F, 214.600F, 156.982F, 153.564F, 105.957F, 309.326F, 127.441F, 398.682F, 3.66211F, 59.5703F, -107.666F, 360.107F, 175.049F, 44.9219F, 444.092F, 388.184F, 417.236F, 241.211F, 63.7207F, 228.760F, 510.986F, 572.510F, 371.094F, 522.217F, 453.613F, 392.090F, -140.869F, -141.357F, -293.701F, -233.398F, 32.9590F, -119.141F, -113.281F, 12.4512F, -82.5195F, -153.564F, -84.9609F, -176.514F, 279.785F, 506.104F, 352.051F, 535.156F, 357.910F, 222.412F, -352.539F, -383.789F, -556.152F, 341.797F, 173.340F, 316.650F, 325.928F, 154.541F, 226.563F, 350.098F, 535.645F, 633.301F, 591.309F, 538.086F, 459.229F, 239.746F, 547.363F, 452.637F, 92.7734F, 193.359F, 279.541F, -15.3809F, -131.592F, 101.074F, -61.5234F, -235.352F, -76.6602F, -307.861F, -166.748F, -190.430F, -202.881F, -128.418F, -245.361F, -406.738F, -277.100F, -103.516F, -393.311F, -110.352F, -72.9980F, 309.570F, 255.859F, 156.738F, 280.029F, 208.252F, 208.984F, -164.795F, -82.0313F, 33.9355F, 553.711F, 327.881F, 346.191F, 7.08008F, 187.500F, 194.580F, -298.828F, 103.271F, 137.695F, -321.777F, -264.160F, 59.8145F, -317.871F, -198.242F, 139.893F, -316.895F, -394.775F, 157.715F, -236.328F, 203.613F, 176.514F, 242.432F, 403.320F, 494.873F, -46.6309F, -199.463F, 105.469F, 161.621F, 14.6484F, 48.3398F, 152.832F, 243.408F, 324.707F, 402.344F, 479.248F, 314.697F, -389.893F, -22.7051F, -10.9863F, -265.625F, 9.03320F, -20.5078F, 403.564F, 636.475F, 570.557F, 260.010F, 498.047F, 580.322F, 278.076F, 567.871F, 517.090F, 209.717F, 87.1582F, 368.652F, 162.109F, 299.561F, 268.311F, 116.943F, 332.031F, 222.656F, 463.135F, 428.223F, 492.920F, 285.156F, 466.064F, 435.547F, 97.4121F, 8.30078F, 62.5000F, -144.775F, -74.2188F, -257.080F, 133.545F, 413.574F, 343.506F, 157.959F, -24.1699F, -83.2520F, 364.258F, 402.100F, 290.527F, 9.27734F, -157.227F, -51.7578F, 96.4355F, 206.543F, 54.1992F, -171.875F, -186.768F, -174.805F, -176.758F, -479.492F, -684.570F, -36.6211F, 71.0449F, -20.0195F, 301.025F, 356.201F, 245.850F, -34.1797F, -37.8418F, 37.3535F, 107.178F, 72.5098F, 382.813F, -373.291F, -100.098F, -155.273F, 375.000F, 111.084F, -57.8613F, -324.219F, -33.9355F, -63.4766F, 129.639F, 135.254F, 211.914F, 65.6738F, 308.594F, 147.949F, -56.8848F, 215.576F, 113.037F, 181.152F, 146.484F, -29.2969F, -17.8223F, 102.783F, 51.7578F, -107.178F, -14.1602F, 196.289F, -313.965F, -302.979F, 177.734F, 71.7773F, -119.629F, 12.2070F, -144.287F, -220.947F, -306.152F, 10.2539F, -167.725F, 35.8887F, -6.10352F, 66.6504F, 145.508F, -75.9277F, 296.143F, 146.729F, -184.082F, 207.275F, 142.578F, 104.736F, 148.193F, 143.311F, -146.973F, -40.5273F, 112.549F, -194.336F, -200.928F, 189.697F, 336.914F, 222.168F, 428.467F, 29.0527F, 345.947F, 237.305F, -53.4668F, -214.844F, -389.648F, -256.104F, -246.582F, 106.934F, -174.072F, -336.670F, 19.0430F, 0.000000F, -109.131F, -287.842F, -277.344F, -322.021F, -384.033F, 548.828F, 431.396F, 319.580F, 230.957F, 386.475F, 349.609F, 280.762F, 117.676F, 106.445F, -114.502F, -270.508F, 150.879F, -109.131F, -235.840F, 265.625F, -305.664F, -369.873F, -27.8320F, -269.531F, -490.234F, -141.357F, 51.2695F, 149.658F, 121.338F, -482.178F, -350.830F, 156.738F, -309.814F, -208.984F, 246.826F, -401.855F, -289.307F, 259.521F, -379.639F, -164.063F, 293.945F, -413.086F, -271.973F, 152.100F, -239.014F, -323.730F, -311.768F, 131.592F, -35.8887F, 218.262F, -330.566F, -218.994F, -105.957F, 216.797F, 115.967F, 104.492F, 37.3535F, -93.7500F, 82.5195F, -364.258F, -124.756F, 87.6465F, -237.793F, -272.217F, -114.746F, 25.6348F, -134.277F, 165.283F, -228.760F, -279.541F, 214.111F, 92.7734F, -63.4766F, 51.2695F, 411.377F, 225.586F, 306.641F, 433.350F, 290.527F, 267.334F, 346.436F, 154.053F, 130.127F, 153.076F, 72.9980F, -84.7168F, -100.342F, -130.371F, 157.959F, -158.691F, 7.08008F, -145.264F, -92.2852F, -333.740F, 381.592F, 342.285F, 273.682F, 357.666F, 265.869F, 344.238F, 158.203F, -511.719F, -266.113F, -1.46484F, 75.9277F, -47.3633F, -212.158F, -156.006F, -202.881F, 101.563F, -283.691F, -298.828F, 329.346F, -304.443F, -229.736F, 442.627F, -535.400F, -485.107F, 110.596F, -151.123F, -333.740F, -233.398F, -392.090F, -481.445F, -367.920F, -286.865F, -258.057F, -269.531F, -92.0410F, 146.729F, 49.0723F, 458.008F, 201.416F, 91.3086F, -104.980F, -322.998F, 7.08008F, -341.064F, -304.932F, -324.951F, -245.850F, -367.188F, 234.375F, -342.041F, -490.479F, 48.0957F, -336.670F, -475.830F, -57.6172F, -262.939F, 30.0293F, 103.027F, 150.146F, 309.814F, 133.301F, -74.7070F, 372.559F, 220.703F, 291.504F, 436.523F, 287.354F, -152.832F, -215.820F, -372.559F, 48.5840F, 187.012F, 367.188F, -260.010F, 210.449F, 48.0957F, -252.441F, -432.861F, -216.553F, -195.313F, 35.4004F, 146.240F, -276.855F, -126.709F, 152.832F, -294.189F, -470.215F, 122.070F, -222.168F, -254.150F, -340.576F, -360.352F, -382.568F, -236.572F, -127.686F, 205.566F, 8.30078F, 437.988F, 157.715F, 210.449F, -294.678F, -460.938F, -244.629F, -19.0430F, -2.19727F, -164.063F, 254.883F, 185.303F, 19.5313F, -146.484F, 278.076F, 248.779F, 13.9160F, 488.281F, 347.168F, -203.369F, 345.215F, 273.682F, -293.457F, 397.949F, 307.617F, -112.549F, 346.680F, 303.711F, 375.244F, 238.037F, 61.7676F, -69.0918F, 79.1016F, -87.6465F, 146.240F, -47.6074F, 25.8789F, 143.555F, 15.1367F, -143.311F, -184.814F, 157.471F, 50.0488F, 12.4512F, 293.213F, 185.059F, -295.166F, 164.307F, -95.2148F, -152.344F, 385.986F, 229.736F, -36.8652F, 249.756F, 179.443F, 688.477F, 317.627F, 168.457F, -73.7305F, 127.930F, -24.1699F, -219.727F, -387.695F, -290.283F, 264.648F, 61.2793F, 58.1055F, 491.699F, 437.500F, 246.582F, 303.955F, 398.682F, 425.049F, -299.561F, -375.977F, -294.922F, -151.611F, 111.328F, -26.6113F, 9.76563F, -15.8691F, 192.383F, -196.533F, -170.654F, -329.590F, -142.334F, 220.703F, 203.125F, -195.557F, 129.883F, 145.020F, 481.445F, 343.750F, 329.834F, -287.354F, -458.984F, -516.113F, -188.721F, 138.672F, 231.445F, -247.803F, 263.428F, 307.617F, -271.240F, 117.676F, -31.7383F, 434.082F, 254.883F, 190.430F, -364.014F, 59.8145F, 222.656F, -77.1484F, -278.564F, -223.877F, -130.859F, -352.051F, -572.754F, -191.650F, -377.441F, -485.352F, -489.014F, 62.7441F, 221.924F, -451.416F, -154.541F, -295.166F, -375.488F, -468.262F, -257.324F, 392.090F, 546.631F, 384.766F, -138.428F, -366.211F, -376.953F, -312.256F, 47.6074F, 334.229F, -199.463F, 71.5332F, 297.607F, -128.174F, 153.809F, 292.236F, -414.551F, -592.041F, -449.219F, -73.9746F, 178.467F, 182.373F, -285.400F, -61.2793F, 65.6738F, -231.934F, -18.3105F, 411.133F, -288.574F, -110.596F, 245.361F, -390.381F, 142.822F, 92.2852F, -506.592F, -139.404F, -104.248F, -129.150F, -282.959F, -285.889F, -69.0918F, -50.0488F, -137.695F, -194.336F, 304.199F, 175.049F, 555.908F, 226.318F, 131.592F, -110.840F, 136.475F, 107.422F, -175.049F, 356.445F, 394.287F, -251.465F, 256.836F, 393.066F, -285.400F, -33.6914F, 206.787F, 55.1758F, 9.52148F, -149.414F, -305.420F, -25.8789F, -177.979F, -158.936F, 236.328F, 317.871F, -174.316F, -155.273F, 421.631F, 86.1816F, 260.986F, 100.098F, -194.824F, -38.0859F, 268.311F, -140.137F, 224.121F, 108.887F, -319.824F, 247.070F, 113.770F, 343.750F, 388.428F, 186.768F, 348.877F, 336.914F, 428.955F, 475.830F, 477.539F, 580.566F, 385.254F, 499.756F, 524.414F, 223.633F, 23.9258F, -1.70898F, 462.158F, 346.191F, 522.705F, 84.9609F, 343.018F, 385.498F, 37.1094F, 276.855F, 439.697F, -65.1855F, 37.5977F, 340.576F, -284.668F, 114.502F, 257.324F, -278.809F, -98.8770F, -261.963F, -327.393F, -552.734F, -385.986F, -88.8672F, 212.158F, 416.504F, -283.691F, 134.033F, 378.418F, -299.072F, -471.680F, -406.738F, -362.549F, -482.666F, -501.709F, -421.631F, -221.191F, -23.9258F, -463.135F, 56.8848F, 364.258F, 217.773F, 26.3672F, -80.8105F, -421.875F, -285.645F, -415.039F, -258.789F, 483.398F, 437.012F, -261.230F, -425.049F, -466.064F, -2.68555F, 375.732F, 321.533F, -390.625F, 22.9492F, 121.338F, 102.783F, 108.154F, -48.0957F, -385.254F, -85.2051F, -242.676F, -146.240F, -131.592F, 278.320F, -235.596F, -346.436F, -31.4941F, -327.393F, 42.7246F, -109.131F, -91.5527F, 320.068F, 501.709F, -90.5762F, -158.691F, -74.9512F, -261.963F, 147.705F, 89.1113F, -502.197F, -27.5879F, 104.980F, 159.180F, 223.145F, 236.084F, -247.070F, -387.207F, -567.139F, 367.432F, 304.688F, 136.475F, 63.9648F, -118.652F, -97.9004F, -421.631F, 327.637F, 377.441F, 12.2070F, 13.6719F, 105.469F, -80.5664F, 29.0527F, -147.461F, -370.361F, -263.672F, -197.754F, 230.957F, 275.146F, 257.568F, -341.797F, -415.771F, -417.969F, -310.059F, -171.875F, -321.533F, 197.021F, 444.580F, 279.053F, 673.828F, 392.090F, 530.029F, 273.438F, 99.8535F, -36.6211F, -35.8887F, 98.6328F, 234.131F, 595.459F, 466.553F, 534.424F, -221.191F, -34.4238F, -211.426F, -220.703F, -34.6680F, -111.816F, -135.986F, -172.852F, -409.912F, -202.637F, -349.365F, -386.475F, -449.707F, -328.613F, -265.137F, -391.602F, -66.4063F, 223.389F, -291.992F, 188.477F, 257.813F, -155.762F, -301.270F, -463.135F, -122.070F, -19.7754F, -200.684F, -314.697F, -393.799F, -179.443F, -28.5645F, 191.650F, 41.0156F, -266.113F, 276.611F, 225.098F, -267.578F, -182.129F, 337.891F, 70.0684F, -133.545F, -259.521F, -335.938F, -537.354F, -293.945F, -531.250F, -383.301F, -428.955F, -368.896F, -547.119F, -188.232F, -424.072F, 268.311F, 202.637F, -387.695F, 176.758F, 303.467F, -376.465F, 169.189F, 196.533F, -412.598F, -58.5938F, 406.494F, -415.039F, -0.976563F, -163.086F, 524.658F, 199.219F, 254.395F, -199.707F, -449.463F, 5.37109F, -186.523F, -123.779F, 109.619F, -281.006F, -150.635F, 70.5566F, -205.811F, -389.648F, -58.5938F, 121.582F, -57.1289F, -160.400F, -183.594F, 117.188F, 409.668F, -77.8809F, -117.432F, 47.1191F, -197.998F, 41.7480F, -29.0527F, -519.531F, -49.3164F, -207.031F, 419.189F, 278.320F, 415.039F }; static const Float32 dico3_lsf_3[] = { 16.3574F, -4.15039F, 16.1133F, -2.92969F, -412.598F, -141.846F, -25.3906F, -66.4063F, -262.695F, -289.551F, -450.439F, -91.7969F, -278.320F, -226.074F, -102.539F, -14.1602F, -63.2324F, -160.156F, -276.855F, -135.010F, 436.523F, 299.561F, 111.084F, 31.4941F, 112.793F, 107.666F, -58.5938F, -128.906F, 205.078F, 125.488F, 31.7383F, -18.3105F, 271.973F, 152.100F, 37.3535F, 52.7344F, 260.742F, 137.695F, -1.46484F, -67.3828F, 273.193F, 177.490F, 46.3867F, -16.6016F, 171.875F, 74.7070F, 29.0527F, -64.4531F, 80.3223F, 14.8926F, -24.4141F, 38.0859F, 88.8672F, 30.0293F, 44.6777F, -50.7813F, -41.7480F, -30.0293F, 53.7109F, -15.8691F, -74.7070F, -15.1367F, 98.1445F, 4.15039F, -161.133F, -229.004F, -64.9414F, 0.000000F, 93.9941F, 57.3730F, 67.3828F, 69.5801F, 78.1250F, 65.4297F, -82.0313F, -48.8281F, -176.758F, 4.15039F, -20.5078F, 93.0176F, -132.813F, 104.736F, 120.605F, 126.709F, -28.5645F, 70.3125F, 74.2188F, 80.3223F, 156.982F, 38.3301F, 171.143F, 124.023F, 292.969F, 152.588F, 194.336F, 148.438F, 243.652F, 102.783F, 120.117F, 154.297F, 293.945F, 190.430F, 108.887F, 32.2266F, 306.885F, 206.055F, 133.545F, 109.619F, 202.393F, 160.645F, 132.080F, 114.746F, 276.367F, 307.129F, 224.121F, 156.006F, 133.545F, 12.4512F, 103.271F, 68.1152F, 2.19727F, 95.7031F, 20.2637F, 22.9492F, 132.324F, 132.568F, 55.9082F, -35.8887F, -48.3398F, 31.4941F, 47.3633F, -45.1660F, -210.693F, -322.510F, -73.7305F, 7.32422F, -145.752F, -153.564F, -4.63867F, 27.8320F, -219.727F, -263.916F, 113.770F, 86.1816F, -362.061F, -384.033F, 3.66211F, -34.9121F, -416.992F, -502.686F, -183.350F, 47.8516F, -458.008F, -504.639F, -156.738F, -62.9883F, -570.068F, -358.887F, -109.863F, -137.695F, -142.578F, -45.4102F, -212.891F, -101.074F, -440.674F, -241.211F, -274.658F, -319.824F, -177.246F, -275.635F, 6.83594F, 41.2598F, -253.662F, -210.938F, -175.293F, -60.0586F, 118.164F, 8.78906F, -56.8848F, -11.9629F, 64.6973F, 16.3574F, 70.5566F, 114.014F, 43.4570F, 132.568F, 197.754F, 131.836F, 20.5078F, 68.8477F, 164.063F, 171.631F, -238.037F, -189.697F, 31.4941F, 70.0684F, -229.004F, -55.4199F, 233.154F, 145.264F, -394.775F, -70.5566F, 204.102F, 158.447F, -450.928F, -52.4902F, 270.020F, 175.293F, -496.582F, -264.893F, 158.691F, 107.422F, -512.939F, -129.150F, 221.436F, 140.381F, -490.967F, -82.0313F, 163.574F, 49.8047F, -583.252F, -168.945F, 87.8906F, 33.4473F, -526.367F, -538.086F, -2.19727F, 68.3594F, -64.9414F, 29.0527F, 9.52148F, 47.1191F, 19.0430F, -14.4043F, -29.2969F, 55.1758F, -238.037F, -209.473F, -190.674F, -267.334F, -151.123F, -100.830F, -110.107F, -205.566F, -296.875F, -322.510F, -198.486F, -215.576F, -335.938F, -394.287F, -96.1914F, -104.492F, -179.932F, -271.729F, -134.033F, -192.871F, -214.844F, -238.037F, -236.084F, -156.738F, -240.479F, -216.309F, -310.791F, -332.275F, -115.479F, -196.289F, -342.041F, -343.506F, 39.0625F, -64.6973F, -224.365F, -67.1387F, -60.5469F, -61.0352F, -175.293F, -92.7734F, 23.6816F, -25.1465F, -91.5527F, -55.9082F, -101.318F, -47.1191F, -32.9590F, -135.498F, 153.320F, 88.1348F, 29.0527F, 52.7344F, 141.357F, 88.8672F, 95.4590F, 51.0254F, 154.785F, 127.441F, -37.5977F, -36.1328F, 128.418F, 94.9707F, 41.5039F, 8.05664F, 25.6348F, 65.1855F, 15.6250F, 92.7734F, -366.943F, -244.141F, -7.32422F, -90.0879F, -261.230F, 14.1602F, 157.959F, 54.4434F, -371.094F, -71.0449F, 151.611F, 74.9512F, -373.779F, 38.0859F, 186.035F, 98.6328F, -495.361F, 34.4238F, 179.199F, 121.826F, -451.416F, -158.691F, 74.7070F, 125.000F, -45.6543F, -25.3906F, -14.4043F, 106.934F, 32.7148F, -56.1523F, 38.0859F, -45.4102F, -14.8926F, -63.4766F, -3.90625F, 2.44141F, -138.916F, -0.732422F, -102.783F, -72.5098F, -421.143F, -127.197F, -84.4727F, 43.4570F, -332.520F, -14.4043F, -10.7422F, 38.3301F, -523.926F, -112.549F, -114.746F, -85.2051F, -529.785F, -0.244141F, -90.0879F, -29.5410F, -385.498F, -91.0645F, -219.727F, -247.803F, -272.705F, -144.287F, -149.658F, -191.406F, -136.963F, 29.7852F, -18.3105F, -109.619F, -0.976563F, -41.7480F, -30.0293F, -90.8203F, 46.8750F, 41.0156F, -18.5547F, -32.2266F, 61.5234F, -26.1230F, 83.0078F, 51.2695F, 95.7031F, 124.268F, 66.4063F, 44.1895F, -26.6113F, 35.4004F, 53.2227F, 29.0527F, -101.563F, -64.2090F, 118.408F, 64.6973F, -44.1895F, -1.95313F, -69.8242F, 55.1758F, -59.5703F, -53.2227F, 16.8457F, -70.8008F, -38.5742F, 46.6309F, -0.244141F, -15.6250F, -144.531F, -21.9727F, 52.0020F, -23.4375F, 62.2559F, 106.201F, 43.4570F, -19.5313F, -90.0879F, -4.39453F, -8.05664F, -19.5313F, -10.2539F, 101.318F, 34.1797F, -54.1992F, 279.053F, 158.936F, 158.447F, 80.3223F, 187.256F, 135.742F, 60.7910F, 57.3730F, 231.445F, 100.830F, 107.910F, 68.1152F, 34.4238F, 82.7637F, 86.9141F, 135.986F, -114.746F, -41.5039F, 24.1699F, 57.8613F, -138.916F, -195.313F, 85.9375F, 137.939F, 68.8477F, 115.479F, 114.746F, 81.0547F, -48.5840F, -168.457F, -313.477F, -223.877F, -47.1191F, -104.004F, -195.313F, -273.926F, -6.34766F, -90.5762F, -119.629F, -47.1191F, 155.518F, 145.264F, 126.709F, 80.5664F, 99.6094F, -28.0762F, 19.2871F, 2.92969F, 116.455F, 21.2402F, -25.1465F, -91.7969F, -162.598F, -84.7168F, -67.6270F, -71.0449F, -124.512F, -117.432F, 41.2598F, 72.5098F, -202.393F, -180.176F, -50.0488F, -41.7480F, -78.1250F, -131.836F, 80.0781F, 69.0918F, -209.717F, -233.887F, 107.910F, -0.488281F, 135.742F, 167.480F, 31.7383F, 13.6719F, 337.646F, 247.070F, 184.326F, 104.248F, 149.414F, 180.908F, 153.320F, 135.010F, -82.7637F, -194.336F, 32.7148F, 67.6270F, -154.541F, -264.893F, -0.488281F, -60.0586F, -214.844F, -252.686F, -392.334F, -259.766F, -242.676F, -115.723F, -277.832F, -119.141F, -101.074F, -194.092F, 17.8223F, -50.2930F, -1.95313F, -33.9355F, 107.178F, 49.8047F, -42.9688F, -141.113F, 5.61523F, 31.9824F, -65.6738F, -184.814F, -46.6309F, 59.8145F, -26.6113F, -82.5195F, 27.3438F, 77.1484F, 29.2969F, -99.1211F, -28.8086F, 149.170F, -43.9453F, -45.4102F, -157.471F, 28.0762F, -42.2363F, 8.30078F, -126.465F, -119.385F, -36.8652F, 14.8926F, -142.334F, -206.055F, 53.7109F, -33.6914F, -166.260F, -249.023F, 95.4590F, -4.15039F, -145.996F, -78.3691F, 38.3301F, -72.0215F, 31.4941F, 37.8418F, -226.074F, -213.623F, -240.967F, 69.5801F, 58.8379F, -20.2637F, -30.5176F, -30.5176F, 151.367F, 145.752F, 105.469F, 22.4609F, 95.9473F, 19.0430F, 99.8535F, 14.8926F, -95.9473F, -180.420F, -100.830F, -182.617F, 20.2637F, 13.1836F, 88.1348F, 6.59180F, -264.648F, 31.7383F, -82.2754F, -169.434F, -382.080F, 72.5098F, 77.6367F, -4.63867F, -457.275F, 8.78906F, 12.4512F, -77.3926F, -567.139F, -60.0586F, 56.3965F, -20.5078F, -562.988F, -191.162F, 9.76563F, -43.7012F, -545.166F, -227.051F, -115.723F, -112.793F, -184.082F, -20.9961F, -70.3125F, -152.832F, -588.623F, -111.084F, -15.3809F, 41.7480F, -268.311F, -267.090F, -6.34766F, -34.9121F, -291.260F, -111.084F, -99.1211F, -93.0176F, -147.705F, -51.2695F, -23.4375F, -12.4512F, -141.602F, -116.211F, -67.3828F, -3.66211F, -291.748F, -154.785F, -293.701F, -215.088F, -92.2852F, -53.9551F, -163.330F, -232.422F, 145.020F, 43.4570F, -98.3887F, -165.039F, 186.279F, 79.8340F, 146.729F, 70.8008F, 41.9922F, 73.2422F, 49.5605F, 38.3301F, -13.6719F, -82.0313F, 86.9141F, 5.85938F, -55.6641F, -72.2656F, -63.2324F, -7.08008F, -45.4102F, 64.2090F, 101.563F, 3.41797F, -86.1816F, 91.0645F, -2.92969F, -52.7344F, 62.7441F, 23.4375F, 42.4805F, 13.9160F, -372.559F, -150.391F, -232.910F, -121.826F, -121.338F, -37.1094F, -81.2988F, 30.5176F, 25.6348F, 48.8281F, 43.7012F, -23.6816F, -80.8105F, -54.6875F, 186.768F, 170.166F, 185.547F, 62.5000F, 73.4863F, 14.4043F, 111.084F, -20.7520F, 49.8047F, 70.3125F, -125.488F, 58.5938F, 61.2793F, -26.6113F, 62.5000F, 101.807F, -8.30078F, -100.830F, 24.6582F, 104.980F, 93.7500F, 38.0859F, -7.56836F, -2.44141F, 50.2930F, 104.004F, 143.799F, 35.4004F, 34.9121F, 17.3340F, 197.266F, 221.191F, 81.2988F, 85.2051F, 240.723F, 229.004F, 143.799F, 80.8105F, 317.383F, 201.172F, 45.6543F, 124.268F, 259.277F, 159.424F, 92.5293F, 113.770F, 356.934F, 228.760F, 97.9004F, 66.8945F, 192.139F, 210.205F, 64.6973F, 0.488281F, 148.682F, 135.010F, 6.83594F, 74.4629F, 226.074F, 83.0078F, 25.8789F, 94.2383F, 58.8379F, -65.1855F, -35.8887F, 54.9316F, -43.4570F, -130.371F, 84.7168F, 122.559F, -156.982F, -93.0176F, 96.9238F, 7.32422F, -158.936F, -178.955F, -106.201F, 97.1680F, -99.3652F, -177.246F, -118.164F, -60.5469F, -192.627F, -223.145F, -106.934F, -116.211F, -121.582F, -95.2148F, 18.3105F, -72.0215F, -235.352F, -144.043F, -147.949F, 36.6211F, -29.5410F, -11.9629F, -37.8418F, -19.0430F, 228.271F, 134.277F, 94.9707F, 9.27734F, -78.3691F, 31.0059F, 103.516F, 76.9043F, -69.5801F, -27.5879F, 69.0918F, 63.2324F, 160.645F, 49.5605F, 78.6133F, 118.652F, 220.459F, 123.291F, 182.617F, 101.807F, 149.170F, 103.271F, 135.498F, 125.000F, 58.3496F, -20.2637F, -141.113F, -4.63867F, -82.7637F, -178.467F, 85.2051F, 3.17383F, -228.027F, -341.553F, -27.8320F, -87.8906F, 26.1230F, 168.945F, 44.4336F, 21.9727F, -303.467F, -375.488F, -378.662F, -177.002F, -138.672F, -220.459F, -332.764F, -128.174F, -126.221F, -208.252F, -210.205F, -245.117F, -41.0156F, -168.457F, -203.857F, 15.3809F, -33.4473F, -135.742F, -133.545F, 35.1563F, -69.8242F, -199.463F, 118.408F, 77.8809F, -35.8887F, -99.6094F, 128.418F, 60.0586F, -84.7168F, -105.957F, 72.5098F, -6.83594F, -70.8008F, -114.990F, -270.996F, -313.721F, -112.305F, -87.6465F, -241.211F, -193.848F, 328.857F, 317.139F, 168.457F, 127.686F, 296.875F, 260.742F, 267.090F, 184.814F, 201.416F, 278.320F, 183.594F, 120.605F, 305.664F, 333.252F, 291.748F, 219.238F, 127.197F, 257.080F, 129.883F, 105.469F, -81.5430F, -52.7344F, -76.4160F, -64.2090F, -39.0625F, 12.6953F, -115.234F, -37.8418F, 31.0059F, 33.2031F, -92.7734F, 10.7422F, 207.764F, 100.098F, -39.5508F, -119.385F, 30.0293F, -62.2559F, -194.336F, -162.842F, 266.113F, 223.877F, 192.627F, 120.361F, 341.064F, 292.236F, 136.230F, 49.3164F, -12.4512F, -28.8086F, -83.4961F, -171.143F, 20.2637F, 26.3672F, -10.2539F, -107.666F, 14.8926F, 23.1934F, 70.0684F, 62.5000F, -6.59180F, 21.7285F, 127.930F, 129.639F, 85.6934F, 55.4199F, 144.531F, 133.057F, 170.166F, 37.8418F, -40.0391F, 74.9512F, 155.762F, 66.8945F, -119.385F, -12.2070F, 184.082F, 58.5938F, -40.5273F, -30.2734F, -28.3203F, -141.357F, -295.898F, -15.3809F, 46.3867F, -72.0215F, -253.906F, -316.406F, 35.8887F, -91.7969F, -43.2129F, -27.5879F, 205.322F, 302.979F, 256.592F, 163.086F, 0.488281F, 71.5332F, 134.521F, 74.2188F, -267.578F, -232.666F, -60.5469F, 91.7969F, -183.105F, -235.596F, 21.2402F, 125.977F, -67.1387F, -125.977F, 168.213F, 95.4590F, -92.5293F, -156.982F, 213.867F, 145.020F, -95.2148F, -247.314F, -157.471F, 139.893F, -26.1230F, -138.672F, -168.213F, -201.660F, -250.244F, -6.59180F, -80.0781F, -49.5605F, 210.205F, 182.861F, 133.789F, 56.8848F, -405.273F, -254.639F, 110.107F, 26.3672F, -161.133F, -151.367F, 104.980F, 57.6172F, 5.12695F, -96.6797F, -282.715F, -154.053F, 334.961F, 316.895F, 236.084F, 140.869F, 274.658F, 274.658F, 143.799F, 110.840F, -78.8574F, -211.182F, -114.014F, 37.3535F, -114.258F, -170.654F, -196.289F, -124.268F, -95.7031F, -175.293F, -49.8047F, -8.54492F, -147.217F, -266.846F, -138.428F, -39.5508F, -123.291F, -245.117F, -24.9023F, 85.4492F, 53.4668F, 54.6875F, 103.271F, 61.5234F, 96.4355F, 144.287F, 148.438F, 88.6230F, -182.129F, -23.4375F, 91.0645F, 41.9922F, 41.7480F, 72.0215F, 174.316F, 82.7637F, 56.8848F, 18.7988F, 26.1230F, 67.6270F, 38.3301F, 37.3535F, -121.826F, -86.9141F, 377.686F, 261.963F, 140.625F, 120.605F, -71.2891F, -82.7637F, -123.047F, -144.531F, -220.459F, -17.5781F, -151.123F, -117.432F, -389.160F, -272.705F, -138.428F, -62.0117F, -193.604F, -123.779F, -137.695F, -71.0449F, -120.117F, -129.883F, 122.559F, 136.719F, -93.2617F, 104.248F, 146.484F, 56.1523F, -55.4199F, 116.455F, 61.2793F, 18.3105F, 69.5801F, 205.566F, 198.486F, 116.211F, -319.824F, -325.439F, 45.4102F, 92.0410F, -143.311F, -223.877F, 156.982F, 93.0176F, -289.551F, -135.010F, 100.342F, 20.0195F, -275.146F, -200.195F, -42.4805F, -131.836F, -147.461F, 29.0527F, 132.568F, 50.0488F, -92.7734F, 160.400F, 221.924F, 138.428F, 27.3438F, -72.7539F, -91.3086F, 27.8320F, -209.229F, -61.2793F, 13.6719F, 38.8184F, 97.9004F, 84.2285F, -8.30078F, -34.1797F, -27.0996F, -148.193F, 10.0098F, 149.902F, 86.6699F, -27.8320F, -18.7988F, 115.723F, 141.113F, 13.6719F, 354.004F, 225.586F, 268.066F, 346.680F, 180.908F, 97.6563F, 60.0586F, 5.37109F, 143.555F, 76.4160F, -29.5410F, 79.8340F, 202.881F, 115.234F, -277.832F, -148.438F, 208.984F, 134.766F, -302.979F, -261.719F, 155.762F, 146.484F, -87.4023F, 62.0117F, -81.2988F, -73.9746F, -157.715F, 180.420F, 87.4023F, 18.0664F, 299.316F, 407.959F, 298.096F, 207.275F, 547.119F, 396.484F, 239.990F, 155.273F, 449.463F, 360.596F, 182.861F, 93.7500F, 85.4492F, 64.2090F, 21.2402F, 31.2500F, -464.355F, -229.736F, -35.1563F, -15.6250F, -423.340F, -62.2559F, 70.3125F, -7.56836F, -645.508F, -302.246F, 89.3555F, 57.3730F, -401.123F, -266.602F, -328.125F, -74.2188F, -132.080F, -262.451F, -272.461F, 30.0293F, -287.598F, -61.5234F, -199.219F, -43.9453F, -248.047F, 130.127F, 137.939F, 56.8848F, -118.896F, -104.980F, -45.8984F, 81.5430F, 211.670F, 301.758F, 130.371F, 41.7480F, -388.184F, -392.334F, 155.029F, 153.809F, -536.133F, 75.6836F, 225.586F, 100.586F, -575.684F, -80.0781F, 233.398F, 129.150F, -644.287F, -92.0410F, 153.809F, 67.8711F, -635.254F, 77.3926F, 195.068F, 72.9980F, -587.402F, 32.4707F, 83.0078F, 7.56836F, -526.367F, -358.398F, 31.9824F, 30.5176F, -289.063F, -119.629F, -33.9355F, 11.2305F, -181.641F, 109.131F, 217.529F, 137.695F, 16.3574F, -110.107F, 157.715F, 147.461F, -135.010F, -104.736F, -213.867F, 96.6797F, 39.5508F, -16.1133F, 318.604F, 223.389F, 116.943F, 141.357F, 265.625F, 193.848F, 109.863F, 67.8711F, 138.184F, 79.1016F, -258.057F, -37.5977F, 36.1328F, -43.2129F, -621.338F, 41.0156F, 261.230F, 144.531F, -573.975F, -10.2539F, 199.951F, 84.2285F, -572.266F, -172.607F, 176.025F, 61.0352F, -531.006F, -365.479F, -75.4395F, 29.7852F, -19.0430F, -17.8223F, 29.2969F, 42.2363F, -0.976563F, 63.9648F, -64.2090F, -63.7207F, -105.225F, -15.6250F, -98.8770F, -178.711F, -636.963F, 28.3203F, -20.2637F, -47.1191F, -372.314F, -230.469F, -116.455F, -177.002F, -124.023F, 74.9512F, 41.5039F, 41.9922F, 203.125F, 101.807F, 203.125F, 167.480F, -54.9316F, 43.2129F, 218.262F, 199.707F, -117.676F, -94.9707F, 312.256F, 253.662F, -93.5059F, 49.0723F, -85.4492F, 9.76563F, 178.223F, 155.029F, 55.1758F, 128.418F, 122.803F, 112.793F, 82.5195F, 97.1680F, 130.615F, 174.316F, 9.76563F, -68.8477F, 361.816F, 359.131F, 264.893F, 178.467F, 381.104F, 261.719F, 221.924F, 169.189F, 346.436F, 312.988F, 217.041F, 214.600F, 281.494F, 177.734F, 289.551F, 205.078F, -55.1758F, 275.879F, 231.689F, 168.213F, -120.605F, -240.723F, -379.883F, -31.2500F, -138.672F, -176.025F, -174.072F, -6.34766F, 77.3926F, 127.930F, 17.0898F, 32.9590F, -98.8770F, -211.182F, -431.152F, -159.180F, -42.4805F, -195.557F, 216.064F, 188.721F, -37.3535F, -22.2168F, 268.311F, 183.350F, -123.535F, -280.518F, 208.252F, 157.715F, 58.8379F, 190.918F, 126.709F, 131.592F, 452.393F, 415.039F, 268.799F, 166.992F, -304.932F, -362.793F, -113.281F, 45.8984F, -218.018F, -343.994F, -320.313F, -83.2520F, -32.9590F, 106.934F, -42.7246F, 4.39453F, 271.240F, 238.281F, 77.8809F, 50.7813F, -349.121F, -431.641F, 20.2637F, 111.816F, -129.395F, -244.141F, 74.9512F, 31.4941F, -205.078F, -3.66211F, -7.08008F, -86.9141F, -222.412F, -225.586F, -280.029F, -59.0820F, -29.0527F, -128.906F, 31.0059F, -32.4707F, -185.791F, -186.768F, 46.3867F, -20.2637F, -76.9043F, 218.506F, 127.441F, 56.3965F, -54.1992F, 24.9023F, -15.3809F, -104.492F, 77.1484F, 170.654F, 92.5293F, 17.0898F, 6.10352F, 174.805F, 76.6602F, -26.3672F, 123.779F, 213.379F, 138.184F, 58.1055F, 26.3672F, 229.736F, 126.709F, 47.6074F, 103.760F, -14.6484F, -104.248F, 62.7441F, 33.9355F, -25.1465F, -153.809F, 108.887F, 81.5430F, 90.3320F, 100.586F, 11.7188F, -41.9922F, -168.457F, -69.0918F, 135.986F, 45.6543F, -69.8242F, 38.5742F, 117.920F, 34.1797F, 65.9180F, -83.9844F, -154.053F, 225.586F, 141.357F, -28.3203F, 32.2266F, 34.6680F, 113.770F, -16.6016F, -15.6250F, 56.1523F, -35.4004F, -73.7305F, -132.324F, -196.045F, -222.656F, 248.535F, 179.932F, -188.721F, 247.803F, 153.809F, 72.5098F, -633.789F, 23.1934F, 108.643F, 82.0313F, -518.066F, 119.873F, 124.512F, 46.6309F, -305.908F, 39.3066F, -0.488281F, -79.1016F, -354.004F, -154.541F, -173.828F, -25.6348F, -205.566F, -62.0117F, -100.342F, 24.4141F, -156.250F, -70.8008F, 246.582F, 186.279F, -158.691F, 76.4160F, 285.400F, 178.223F, 34.1797F, 123.291F, 251.465F, 187.012F, 188.477F, 70.0684F, 260.498F, 200.928F, 120.850F, 182.861F, 74.4629F, 78.8574F, -40.0391F, 112.793F, 19.0430F, 97.4121F, -83.4961F, -213.379F, 16.8457F, 145.752F, -3.90625F, 151.367F, 151.611F, 82.2754F, -33.6914F, -108.398F, -64.6973F, 53.2227F, 20.5078F, -109.863F, 232.666F, 162.598F, -54.1992F, -196.045F, 132.080F, 147.461F, -224.854F, -335.938F, 59.5703F, 28.3203F, -205.322F, -176.514F, 153.809F, 143.555F, 34.1797F, 161.865F, 71.7773F, 89.8438F, 228.271F, 255.371F, 215.088F, 185.303F, 426.270F, 357.422F, 223.633F, 153.320F, 106.445F, 235.107F, 68.6035F, 0.244141F, -29.0527F, 18.0664F, 132.324F, 52.0020F, 0.244141F, -138.428F, 73.4863F, 58.8379F, 63.4766F, 106.201F, 54.1992F, 96.6797F, 228.516F, 233.643F, 270.508F, 171.631F, 124.512F, 123.535F, 197.266F, 116.699F, 146.729F, 169.434F, 234.375F, 151.367F, 237.305F, 180.908F, 239.258F, 146.484F, 203.613F, 175.049F, 187.256F, 166.992F, 156.982F, 237.305F, 228.271F, 155.762F, 122.314F, 161.377F, 175.781F, 207.764F, -25.6348F, -154.297F, -73.9746F, -28.5645F, -104.736F, 31.7383F, 192.627F, 107.910F, -127.441F, -45.8984F, 171.875F, 91.0645F, -185.303F, 10.2539F, 198.730F, 127.686F, -129.639F, -277.588F, 91.0645F, 141.113F, -166.504F, -293.701F, -111.084F, 69.5801F, -283.936F, -385.010F, -268.066F, 10.7422F, 19.7754F, -20.0195F, 173.828F, 88.6230F, 116.455F, 60.0586F, 232.910F, 151.855F, 391.602F, 395.996F, 311.768F, 217.529F, 343.994F, 209.717F, 225.586F, 217.773F, 188.965F, 254.150F, 231.201F, 278.809F, 9.76563F, -133.301F, -18.3105F, 70.3125F, -150.391F, -25.8789F, -170.166F, -6.34766F, -41.2598F, -39.0625F, -217.529F, -180.420F, -68.1152F, -93.7500F, -251.221F, -85.4492F, 434.814F, 319.336F, 255.371F, 199.219F, 385.742F, 374.268F, 359.375F, 287.598F, 367.432F, 262.695F, 296.875F, 219.482F, 217.285F, 220.703F, 137.695F, 159.668F, 224.609F, 168.945F, 249.268F, 208.984F, -120.361F, 32.2266F, 43.2129F, 123.291F, 17.3340F, 47.6074F, -6.83594F, 23.6816F, 111.328F, 85.6934F, -40.0391F, 21.4844F, 107.178F, 67.8711F, -9.76563F, 85.4492F, 340.576F, 231.689F, 57.1289F, -23.1934F, -196.533F, -115.234F, 9.27734F, -39.7949F, 89.5996F, -23.9258F, 119.385F, 127.686F, 250.244F, 287.598F, 295.898F, 221.191F, 77.8809F, 320.801F, 198.730F, 112.549F, -30.0293F, -132.568F, -196.289F, 109.131F, -182.617F, -79.1016F, -218.994F, -275.146F, -179.932F, -122.314F, -192.627F, -174.072F, 174.561F, 189.697F, 302.490F, 225.098F, 475.830F, 473.389F, 333.984F, 211.182F, 178.223F, 214.844F, 185.059F, 94.7266F, -212.646F, 110.840F, 4.15039F, -61.2793F, -93.0176F, -197.754F, -386.475F, 58.3496F, -127.197F, -235.840F, -193.359F, 63.2324F, -217.285F, -331.543F, -187.988F, -17.8223F, 40.5273F, 85.2051F, -51.7578F, 78.8574F, -205.078F, -73.4863F, 115.479F, 106.201F, -165.771F, -113.281F, 177.734F, 85.6934F, -38.0859F, -48.5840F, 162.842F, 105.469F, 7.08008F, -61.5234F, 101.318F, 117.188F, -178.467F, -92.5293F, 35.4004F, 136.475F, -128.906F, -154.053F, -282.715F, -38.8184F, 108.643F, 66.6504F, 30.0293F, 156.006F, 91.0645F, -30.7617F, 195.313F, 138.672F, 20.5078F, -39.5508F, 175.781F, 173.828F, -202.637F, -130.859F, -45.1660F, 54.1992F, 99.6094F, 110.352F, 122.314F, 188.232F, -218.994F, -330.811F, -16.3574F, 107.910F, -193.359F, -343.262F, 138.184F, 146.973F, 40.7715F, -79.5898F, 124.268F, 80.5664F, -23.1934F, -152.832F, -178.223F, -83.9844F, 407.227F, 297.119F, 190.186F, 111.084F, 321.289F, 202.148F, 142.578F, 175.537F, 98.6328F, -7.56836F, 247.314F, 192.627F, 21.7285F, 26.1230F, 217.529F, 134.033F, 212.646F, 385.986F, 223.877F, 163.818F, 211.426F, 361.084F, 314.697F, 208.496F, 95.4590F, 260.742F, 273.926F, 198.242F, 19.0430F, -137.207F, 84.2285F, 137.451F, 104.736F, -25.1465F, 101.807F, 192.139F, -29.7852F, -106.689F, 100.342F, 192.383F, -222.900F, -101.807F, 146.973F, 184.082F, -55.1758F, -3.90625F, 36.8652F, 185.547F, -170.898F, 28.8086F, -25.3906F, -3.41797F, -275.391F, 11.7188F, 69.3359F, 95.9473F, -95.2148F, -102.295F, -156.006F, -28.3203F, -222.168F, 74.7070F, 77.1484F, -3.17383F, 294.678F, 240.234F, 200.439F, 163.330F, -291.748F, -169.189F, 34.1797F, -52.0020F, -215.820F, -101.563F, -48.5840F, -136.230F, -150.391F, 59.8145F, -98.6328F, -162.109F, 63.9648F, 13.6719F, -150.635F, -176.758F, -20.7520F, -119.873F, -78.1250F, -160.156F, -139.160F, -202.881F, -31.4941F, -128.906F, -367.676F, -15.3809F, -89.5996F, -93.9941F, -87.4023F, -78.3691F, 0.976563F, 12.4512F, -89.3555F, -52.2461F, 77.8809F, 124.756F, 35.6445F, 163.818F, -4.15039F, -71.0449F, -26.8555F, 113.281F, -33.9355F, -121.094F, -49.3164F, 53.7109F, -76.1719F, -154.053F, -161.133F, -17.8223F, -159.912F, -200.195F, -161.621F, -159.424F, -314.453F, -209.229F, -104.980F, -232.666F, -234.131F, -64.4531F, -11.9629F, -114.258F, -17.5781F, -93.0176F, -85.4492F, -137.451F, -47.1191F, -99.3652F, 13.4277F, -99.6094F, -196.045F, 2.68555F, -75.4395F, 158.447F, 45.8984F, -48.3398F, -125.000F, 112.549F, -19.2871F, -111.816F, -321.777F, -64.2090F, -32.7148F, -127.686F, -404.541F, -106.201F, -120.850F, -186.768F, 13.9160F, -84.7168F, -101.074F, 105.957F, -278.564F, -59.0820F, -162.109F, -209.229F, 8.30078F, -16.6016F, -172.607F, -82.5195F }; #define MR515_3_SIZE 128 /* third codebook for MR475, MR515 */ static const Float32 mr515_3_lsf[] = { 102.295F, 39.7949F, -7.32422F, -63.9648F, -111.084F, -192.627F, -349.121F, -176.025F, 245.605F, 162.109F, 65.6738F, 6.10352F, 151.123F, 63.4766F, 44.6777F, 23.4375F, -236.328F, -331.543F, -94.7266F, 32.9590F, -169.189F, 203.857F, 111.328F, 37.5977F, 269.775F, 171.631F, 138.916F, 88.6230F, 396.729F, 323.730F, 240.479F, 182.617F, -53.7109F, 53.4668F, 18.5547F, -50.7813F, -355.225F, -405.762F, 11.9629F, 36.3770F, -235.352F, -41.9922F, -183.594F, -82.0313F, 152.588F, 51.0254F, -61.0352F, -16.1133F, -248.291F, -204.590F, -0.488281F, 77.3926F, -529.297F, -362.549F, -33.6914F, 30.0293F, -458.008F, -512.451F, -127.197F, 20.7520F, -236.084F, -89.3555F, -169.678F, -215.088F, -224.854F, -246.826F, -186.279F, -231.689F, -30.2734F, -62.5000F, -85.9375F, -161.133F, 43.4570F, 113.037F, 86.4258F, 74.2188F, -425.781F, -144.287F, -68.8477F, 19.2871F, -549.072F, 42.7246F, 211.670F, 121.826F, -33.6914F, -43.9453F, -44.1895F, -5.12695F, -559.326F, -302.979F, -112.305F, -126.953F, -188.232F, 110.107F, -2.44141F, -75.1953F, 66.1621F, -15.8691F, 0.976563F, 52.2461F, -68.1152F, -106.201F, -10.4980F, -84.9609F, -163.574F, 8.54492F, -15.8691F, -51.5137F, 196.777F, 130.615F, 20.7520F, 72.5098F, 13.9160F, 58.3496F, 176.270F, 120.361F, 54.9316F, 161.377F, 205.078F, 133.545F, -131.836F, -91.7969F, 3.41797F, 85.2051F, 114.502F, 176.025F, 80.8105F, 39.5508F, -132.813F, -183.594F, -15.1367F, -2.44141F, 97.1680F, -21.4844F, 176.758F, 171.143F, -4.63867F, -130.127F, -22.9492F, 146.729F, 33.2031F, -17.3340F, -166.260F, -182.373F, -40.5273F, -83.9844F, 63.7207F, -12.2070F, 39.3066F, -12.6953F, 118.408F, 82.2754F, -408.936F, 12.2070F, 46.3867F, -22.7051F, -557.129F, -56.3965F, -47.3633F, -20.0195F, -23.1934F, -145.264F, -37.5977F, 31.2500F, 218.262F, 122.314F, 143.555F, 111.572F, -84.2285F, 50.2930F, 29.7852F, 26.8555F, -154.053F, -55.4199F, -138.916F, 0.732422F, 99.6094F, 58.3496F, 96.9238F, 55.1758F, -48.0957F, -0.488281F, 31.2500F, 119.873F, 312.744F, 220.703F, 71.2891F, 52.4902F, 131.348F, 74.7070F, 63.2324F, 124.268F, -165.283F, -255.615F, 3.17383F, 78.3691F, -165.771F, -143.555F, -87.4023F, -51.7578F, -136.230F, 59.3262F, 157.715F, 116.943F, 118.652F, 83.4961F, 154.785F, 129.883F, 26.1230F, 195.801F, 80.8105F, 33.2031F, -27.3438F, -97.1680F, -251.709F, -69.8242F, -79.5898F, -172.119F, 70.3125F, 66.4063F, 317.139F, 279.297F, 287.598F, 209.961F, -103.271F, 29.5410F, -93.9941F, -36.1328F, -72.0215F, -73.7305F, -203.613F, -199.951F, 3.90625F, -5.85938F, -49.0723F, -116.211F, 135.498F, 22.2168F, -59.8145F, 71.7773F, -9.27734F, -92.5293F, -234.863F, -298.096F, -290.771F, -370.605F, -66.6504F, -96.4355F, -95.2148F, -247.314F, -157.471F, 139.893F, -449.951F, -251.465F, 123.291F, 114.258F, 181.641F, 231.201F, 148.682F, 120.361F, -168.213F, -286.133F, -153.320F, -32.9590F, -250.488F, 47.6074F, 100.342F, 47.8516F, 386.230F, 280.029F, 140.381F, 82.2754F, -302.490F, -189.697F, -158.203F, -34.6680F, 145.264F, 201.416F, 236.084F, 179.443F, -294.434F, -236.816F, -19.7754F, -83.4961F, -181.885F, 3.17383F, -17.5781F, 91.5527F, 110.840F, 4.63867F, 343.506F, 224.854F, -402.100F, -41.9922F, 210.205F, 137.207F, 226.563F, 375.244F, 259.521F, 180.664F, -603.516F, -232.422F, 64.4531F, 20.0195F, -122.559F, -235.596F, -325.684F, 30.0293F, 211.670F, 301.758F, 130.371F, 41.7480F, -566.406F, -112.305F, 190.430F, 88.6230F, -290.527F, -150.635F, 61.5234F, -14.8926F, -42.4805F, 8.30078F, 246.826F, 192.383F, -569.580F, 60.3027F, 103.271F, 37.3535F, -3.90625F, -86.6699F, 63.9648F, 109.619F, -384.766F, -261.963F, -132.813F, -90.5762F, -150.146F, -74.4629F, 256.592F, 196.533F, 167.725F, 128.906F, 1.46484F, -44.4336F, 228.271F, 213.623F, 244.629F, 197.510F, 48.5840F, 62.7441F, 30.7617F, 18.5547F, -142.578F, -277.832F, 146.240F, 135.742F, -269.775F, -339.600F, -388.428F, -126.709F, -238.525F, -323.486F, 26.3672F, 84.7168F, -176.270F, -238.037F, 89.1113F, 24.6582F, -35.4004F, 166.260F, 60.7910F, -37.3535F, 0.000000F, -81.5430F, -139.160F, 38.8184F, 100.586F, 69.5801F, -82.0313F, -150.635F, -232.666F, -235.840F, 216.553F, 168.213F, -305.420F, 20.5078F, -45.1660F, -97.1680F, -144.531F, 105.713F, 254.883F, 159.424F, 20.7520F, 80.3223F, -9.76563F, 88.1348F, -105.713F, -172.119F, 113.770F, 140.137F, -37.5977F, 159.668F, 144.531F, 70.8008F, -40.7715F, 17.5781F, 85.2051F, 42.7246F, 164.551F, 72.5098F, 238.525F, 175.781F, 301.514F, 293.945F, 184.814F, 119.141F, -97.6563F, -65.6738F, 131.348F, 90.8203F, -329.590F, -338.623F, -291.504F, -22.2168F, 308.105F, 213.867F, 189.209F, 170.898F, -146.240F, -9.27734F, -104.980F, -176.270F, 482.422F, 397.949F, 241.943F, 148.438F, 27.0996F, 67.3828F, -55.1758F, -23.4375F, -231.201F, -94.7266F, -2.68555F, -1.70898F, -73.9746F, -129.639F, -204.834F, 82.5195F, 423.340F, 417.480F, 343.018F, 247.314F, -125.977F, -208.740F, -157.471F, 51.2695F, -167.969F, -101.563F, 125.244F, 56.1523F, -200.684F, -155.518F, -279.785F, -78.1250F, -232.422F, -160.645F, -169.434F, 44.6777F, -27.8320F, -152.100F, 199.707F, 164.551F, -46.6309F, -49.8047F, 178.467F, 155.029F, 12.4512F, 298.096F, 215.576F, 140.625F, -232.910F, -105.225F, 201.660F, 145.996F, -83.4961F, -184.326F, -219.727F, -99.3652F, -274.902F, -86.4258F, -50.2930F, -125.000F, -133.545F, -197.754F, -87.1582F, -151.367F, 16.1133F, 125.732F, -17.8223F, -100.098F, -212.891F, -230.713F, -352.539F, -299.561F, 46.6309F, -4.15039F, -132.813F, -56.3965F, -375.977F, -132.813F, -219.971F, -216.309F }; #define MR795_1_SIZE 512 /* first codebook for MR795 */ static const Float32 mr795_1_lsf[] = { -217.285F, -378.418F, -620.361F, -199.951F, -236.816F, 42.7246F, -201.660F, -301.270F, -186.035F, -146.240F, -5.37109F, 154.785F, -197.998F, -240.967F, -220.215F, -78.8574F, 49.5605F, 6.34766F, -93.5059F, -57.3730F, -190.674F, -97.4121F, 308.105F, 221.191F, -227.539F, -341.553F, -336.914F, -152.344F, 22.7051F, 21.2402F, -101.074F, -131.592F, -168.701F, 9.03320F, 154.541F, 124.512F, -94.4824F, -116.211F, -324.707F, 97.4121F, 16.1133F, 64.2090F, -99.3652F, -11.9629F, -81.7871F, -101.807F, 254.150F, 455.322F, -190.186F, -265.869F, -351.563F, -182.129F, -209.473F, 203.125F, -141.846F, -185.303F, -90.5762F, -164.307F, -123.535F, 509.766F, -136.719F, -154.785F, -287.842F, 66.1621F, 58.8379F, 3.41797F, -106.934F, -59.5703F, -96.9238F, 113.037F, 293.457F, 255.615F, -147.949F, -194.580F, -351.074F, -12.4512F, -78.8574F, 117.432F, -54.6875F, -142.578F, -128.662F, 120.605F, 215.088F, 166.504F, -105.713F, -74.7070F, -244.629F, 135.254F, 160.889F, 54.1992F, 41.7480F, -39.0625F, -86.1816F, 166.260F, 438.965F, 382.080F, -208.008F, -288.330F, -413.818F, -82.0313F, -162.598F, 27.8320F, -141.846F, -184.570F, -181.641F, -47.6074F, 91.5527F, 121.338F, -113.525F, -196.289F, -268.066F, 37.5977F, 68.8477F, -31.9824F, -12.2070F, -46.6309F, -175.537F, 78.8574F, 178.711F, 376.465F, -176.270F, -199.951F, -342.773F, 25.6348F, -61.0352F, 45.1660F, -43.4570F, -122.559F, -181.152F, 78.3691F, 124.512F, 271.240F, -78.8574F, -138.428F, -235.840F, 31.0059F, 118.164F, 82.5195F, -39.0625F, 12.6953F, -82.5195F, 178.711F, 333.740F, 379.395F, -152.832F, -195.801F, -414.063F, -69.8242F, -143.066F, 165.039F, -169.678F, -83.7402F, -90.3320F, -119.629F, 72.0215F, 462.158F, -153.809F, -140.137F, -247.559F, -19.5313F, 157.471F, -16.8457F, -1.46484F, -77.6367F, -88.8672F, 190.918F, 354.004F, 253.418F, -76.4160F, -178.955F, -340.576F, 29.2969F, 14.6484F, 116.455F, -64.4531F, -142.822F, -30.0293F, 173.584F, 303.955F, 154.541F, -22.2168F, -86.6699F, -248.047F, 188.232F, 185.059F, 63.7207F, 61.7676F, 19.7754F, -115.723F, 227.051F, 540.771F, 419.922F, -197.266F, -268.311F, -469.971F, -136.719F, -190.918F, 41.2598F, -196.289F, -262.207F, -45.8984F, -152.832F, -13.4277F, 343.018F, -169.434F, -174.805F, -291.504F, -161.133F, 86.4258F, 80.3223F, -125.488F, -13.4277F, -132.568F, 89.3555F, 252.197F, 288.574F, -160.645F, -234.131F, -331.299F, -13.4277F, -44.9219F, 22.7051F, -147.705F, -69.8242F, -161.621F, 98.6328F, 109.619F, 201.904F, -69.8242F, -85.4492F, -308.350F, 153.320F, 74.7070F, 55.4199F, -3.90625F, 35.8887F, -152.100F, 45.4102F, 225.342F, 523.926F, -164.551F, -217.285F, -392.090F, -108.154F, -55.6641F, 82.7637F, -90.0879F, -192.871F, -99.8535F, 56.3965F, 20.9961F, 358.643F, -109.375F, -141.846F, -259.033F, 145.020F, 109.863F, -43.2129F, -30.2734F, -41.5039F, -109.131F, 163.818F, 282.959F, 342.773F, -116.211F, -162.842F, -368.896F, -18.7988F, -33.6914F, 174.805F, -43.2129F, -90.8203F, -93.0176F, 110.107F, 228.027F, 223.389F, -61.0352F, -105.469F, -200.684F, 66.4063F, 202.148F, 108.887F, 6.34766F, 4.63867F, -7.56836F, 170.410F, 413.086F, 529.297F, -157.715F, -238.525F, -469.727F, -43.7012F, -115.479F, 65.4297F, -92.5293F, -181.885F, -168.701F, 2.68555F, 31.0059F, 252.197F, -119.141F, -223.877F, -201.416F, 14.8926F, 78.8574F, 32.9590F, 35.8887F, -35.4004F, -167.480F, 167.236F, 191.895F, 410.645F, -123.535F, -207.031F, -316.650F, 8.54492F, 21.9727F, 54.1992F, -5.61523F, -84.4727F, -163.574F, 111.084F, 144.287F, 314.209F, -49.5605F, -144.775F, -265.137F, 159.180F, 85.9375F, 106.689F, 9.52148F, 15.3809F, -111.572F, 205.322F, 308.838F, 513.916F, -126.953F, -215.332F, -386.719F, -80.0781F, -173.584F, 346.924F, -145.508F, -83.4961F, -17.0898F, 51.0254F, 42.2363F, 470.703F, -103.271F, -145.996F, -224.854F, 102.783F, 147.705F, -9.27734F, -0.488281F, -59.8145F, -31.0059F, 218.750F, 480.713F, 277.100F, -92.5293F, -126.465F, -385.498F, 42.2363F, 28.8086F, 183.838F, -13.4277F, -93.0176F, -12.6953F, 240.479F, 249.268F, 183.838F, -0.488281F, -71.0449F, -217.529F, 183.838F, 242.188F, 103.271F, 64.4531F, 31.9824F, -47.8516F, 218.506F, 555.176F, 620.850F, -155.029F, -265.625F, -610.107F, -129.150F, -239.746F, 128.418F, -186.523F, -202.637F, -133.789F, -106.445F, 77.1484F, 146.240F, -164.795F, -229.492F, -182.129F, -13.9160F, 57.6172F, -2.68555F, -49.0723F, -19.7754F, -194.824F, 3.90625F, 206.299F, 380.371F, -179.932F, -240.479F, -295.898F, -114.258F, 4.15039F, 70.8008F, -68.1152F, -142.578F, -170.898F, 44.6777F, 200.684F, 172.119F, -64.6973F, -120.117F, -289.795F, 102.783F, 37.1094F, 114.258F, -95.2148F, 40.5273F, -65.4297F, 9.52148F, 378.418F, 456.055F, -155.029F, -235.840F, -383.545F, -110.596F, -120.117F, 222.168F, -69.3359F, -250.732F, -18.3105F, -44.1895F, -32.4707F, 452.148F, -108.643F, -152.344F, -286.621F, 102.539F, 89.5996F, -11.9629F, -94.9707F, -51.7578F, -41.2598F, 172.607F, 261.963F, 294.922F, -131.592F, -173.340F, -353.760F, 20.2637F, -39.7949F, 118.164F, -57.6172F, -132.568F, -86.6699F, 82.5195F, 286.865F, 198.730F, -60.0586F, -75.4395F, -233.887F, 147.949F, 185.547F, 14.6484F, 40.5273F, -1.95313F, -39.7949F, -74.7070F, 451.416F, 625.732F, -182.373F, -250.244F, -435.303F, -102.295F, -108.887F, 51.0254F, -175.293F, -138.184F, -130.371F, -123.535F, 169.189F, 209.229F, -113.037F, -170.166F, -264.160F, 79.3457F, 105.225F, -50.2930F, -3.66211F, -1.95313F, -186.279F, 133.057F, 224.365F, 370.605F, -149.170F, -191.162F, -320.557F, 62.5000F, -13.4277F, 50.7813F, -40.2832F, -84.9609F, -161.621F, 78.3691F, 166.016F, 227.051F, -79.5898F, -104.736F, -232.178F, 118.164F, 108.887F, 139.160F, -48.0957F, 17.5781F, -17.8223F, 221.924F, 355.225F, 425.049F, -137.451F, -179.932F, -481.934F, -30.2734F, -101.563F, 175.293F, -116.699F, -98.6328F, -76.6602F, -3.90625F, 108.887F, 399.414F, -134.521F, -131.104F, -183.105F, -14.1602F, 155.762F, 52.2461F, 13.4277F, -45.1660F, -66.1621F, 280.273F, 317.627F, 295.898F, -117.920F, -163.818F, -308.594F, 28.5645F, 69.5801F, 132.568F, -49.8047F, -95.4590F, -27.0996F, 125.244F, 375.488F, 208.496F, -27.8320F, -46.3867F, -238.770F, 214.111F, 145.264F, 113.281F, 63.4766F, 63.4766F, -75.9277F, 182.617F, 557.373F, 541.016F, -126.221F, -230.713F, -530.029F, -79.5898F, -172.852F, 92.2852F, -198.242F, -168.701F, -56.6406F, -136.719F, 167.725F, 343.994F, -178.711F, -168.457F, -204.102F, -87.6465F, 157.471F, 94.2383F, -64.6973F, 15.1367F, -165.527F, 35.4004F, 401.367F, 294.922F, -135.498F, -241.211F, -301.025F, -19.0430F, 3.41797F, 27.8320F, -79.8340F, -87.4023F, -119.385F, 95.7031F, 165.283F, 170.166F, -49.0723F, -57.6172F, -278.320F, 169.189F, 109.619F, 43.4570F, -59.3262F, 62.5000F, -105.713F, 149.170F, 338.135F, 599.609F, -149.414F, -219.971F, -357.422F, -74.9512F, -4.15039F, 121.826F, -76.9043F, -162.842F, -62.0117F, 62.5000F, 104.492F, 357.178F, -118.652F, -103.027F, -257.813F, 159.912F, 90.3320F, 4.39453F, -24.9023F, -45.1660F, -67.3828F, 184.326F, 385.254F, 325.928F, -119.141F, -147.217F, -346.191F, 44.4336F, -22.7051F, 212.402F, -17.8223F, -111.816F, -84.9609F, 203.857F, 210.449F, 233.643F, -68.8477F, -81.2988F, -182.129F, 133.545F, 204.834F, 104.492F, 66.6504F, -21.7285F, 3.17383F, 229.492F, 416.992F, 628.906F, -102.051F, -264.648F, -429.199F, -10.7422F, -87.4023F, 63.2324F, -121.338F, -156.982F, -136.719F, 24.1699F, 135.986F, 234.619F, -102.783F, -187.012F, -223.877F, 72.0215F, 79.5898F, 44.9219F, 42.7246F, 3.66211F, -152.832F, 129.883F, 214.355F, 483.643F, -108.154F, -187.500F, -311.279F, 53.9551F, 38.0859F, 65.4297F, 9.52148F, -88.6230F, -123.291F, 169.678F, 188.477F, 278.320F, -39.5508F, -112.061F, -222.656F, 173.096F, 108.398F, 160.645F, 6.10352F, 73.9746F, -76.1719F, 309.570F, 344.238F, 418.701F, -72.5098F, -187.012F, -448.242F, -64.2090F, -26.3672F, 261.230F, -99.1211F, -3.17383F, -31.4941F, 13.9160F, 106.934F, 667.480F, -91.3086F, -118.896F, -203.857F, 74.2188F, 169.922F, 40.0391F, 25.3906F, -57.3730F, 1.22070F, 393.311F, 463.867F, 341.553F, -55.9082F, -142.090F, -323.486F, 98.8770F, 46.8750F, 199.463F, -21.2402F, -106.934F, 27.0996F, 250.977F, 292.725F, 242.432F, 16.6016F, -42.7246F, -228.027F, 252.197F, 272.705F, 110.107F, 116.699F, 48.8281F, -60.5469F, 519.287F, 658.203F, 498.535F, -203.857F, -322.998F, -520.264F, -195.068F, -168.945F, 113.770F, -198.242F, -251.953F, -114.502F, -151.855F, 70.3125F, 224.609F, -171.143F, -205.322F, -261.230F, -100.342F, 125.000F, 1.95313F, -95.2148F, -22.2168F, -181.641F, -7.32422F, 254.639F, 283.447F, -200.684F, -280.273F, -282.227F, -71.7773F, -11.2305F, 26.8555F, -100.342F, -91.3086F, -165.527F, 52.2461F, 129.639F, 163.086F, -99.1211F, -102.539F, -291.504F, 118.896F, 56.6406F, 73.9746F, -77.6367F, 22.2168F, -115.234F, 30.0293F, 300.781F, 596.924F, -176.270F, -232.422F, -364.990F, -180.176F, -164.795F, 325.195F, -132.568F, -147.949F, -51.5137F, -23.1934F, -23.9258F, 368.164F, -134.033F, -125.488F, -291.260F, 115.479F, 51.5137F, 17.8223F, -70.3125F, -27.3438F, -94.9707F, 131.104F, 325.195F, 307.129F, -138.428F, -184.326F, -377.197F, 17.3340F, -69.0918F, 154.297F, -41.5039F, -117.432F, -120.361F, 166.260F, 244.629F, 199.463F, -86.9141F, -80.8105F, -214.111F, 102.295F, 172.363F, 84.4727F, 58.8379F, -8.30078F, -79.5898F, 92.0410F, 476.074F, 459.717F, -177.490F, -262.451F, -396.729F, -56.8848F, -132.568F, 28.3203F, -127.930F, -196.777F, -142.822F, -17.8223F, 116.699F, 177.979F, -70.3125F, -225.830F, -279.053F, 42.2363F, 109.131F, -12.6953F, 16.6016F, -55.9082F, -147.949F, 109.619F, 129.150F, 438.721F, -144.287F, -213.623F, -332.764F, 44.6777F, -35.1563F, 79.1016F, -25.1465F, -110.352F, -162.598F, 152.100F, 119.141F, 287.109F, -58.1055F, -124.756F, -245.117F, 79.5898F, 134.766F, 111.816F, 33.2031F, 26.3672F, -77.8809F, 152.832F, 327.881F, 459.717F, -119.629F, -157.715F, -422.363F, -45.4102F, -109.619F, 240.234F, -180.176F, -18.5547F, -41.5039F, -134.277F, 184.326F, 625.000F, -121.094F, -124.512F, -231.201F, 51.2695F, 169.434F, -12.6953F, 20.5078F, -78.6133F, -48.5840F, 266.113F, 396.729F, 298.828F, -91.7969F, -147.217F, -340.820F, 83.7402F, 18.0664F, 154.297F, -42.7246F, -122.559F, -7.81250F, 237.305F, 325.195F, 179.199F, 12.6953F, -72.0215F, -271.729F, 260.010F, 224.121F, 39.0625F, 95.9473F, 26.1230F, -96.9238F, 296.387F, 646.729F, 425.049F, -154.297F, -293.213F, -461.670F, -175.537F, -67.6270F, 86.1816F, -158.936F, -214.844F, -29.7852F, -51.5137F, 51.0254F, 326.660F, -137.207F, -174.316F, -258.545F, -50.7813F, 94.7266F, 38.8184F, -78.1250F, -14.8926F, -134.521F, 71.5332F, 266.602F, 352.295F, -158.203F, -211.182F, -305.908F, -11.9629F, -34.9121F, 74.4629F, -97.9004F, -55.4199F, -142.822F, 136.963F, 129.883F, 226.318F, -28.5645F, -108.154F, -290.039F, 123.779F, 106.445F, 71.2891F, -19.2871F, 56.8848F, -111.816F, 163.818F, 250.244F, 584.961F, -154.541F, -205.566F, -372.314F, -75.1953F, -69.8242F, 156.250F, -91.0645F, -151.611F, -99.3652F, 102.051F, 61.7676F, 318.604F, -76.9043F, -141.846F, -277.588F, 139.648F, 167.236F, -68.6035F, 14.8926F, -16.6016F, -90.5762F, 241.943F, 268.799F, 365.723F, -120.361F, -166.748F, -332.520F, -11.4746F, 40.0391F, 171.875F, -62.5000F, -76.6602F, -65.4297F, 154.053F, 231.689F, 256.836F, -28.8086F, -84.9609F, -203.369F, 16.6016F, 288.086F, 138.672F, 37.1094F, 28.5645F, 8.30078F, 271.729F, 464.355F, 546.631F, -146.729F, -234.131F, -416.504F, -34.9121F, -119.385F, 117.188F, -81.0547F, -159.912F, -140.137F, 13.1836F, 86.1816F, 291.016F, -112.793F, -159.180F, -194.336F, 36.6211F, 134.033F, 27.3438F, 47.6074F, -27.0996F, -125.732F, 165.771F, 270.508F, 402.100F, -136.230F, -182.861F, -297.119F, -2.19727F, 66.4063F, 83.2520F, -12.9395F, -64.6973F, -130.615F, 119.385F, 205.811F, 316.895F, -29.2969F, -117.676F, -251.953F, 154.297F, 132.568F, 99.6094F, 43.7012F, 74.7070F, -128.418F, 274.414F, 357.422F, 547.852F, -101.807F, -191.895F, -381.348F, -54.6875F, -93.7500F, 333.008F, -92.0410F, -112.061F, -6.10352F, 93.9941F, 119.385F, 530.762F, -81.0547F, -158.936F, -202.393F, 132.813F, 135.010F, 14.8926F, 5.37109F, -27.5879F, -21.7285F, 275.391F, 421.143F, 372.070F, -52.7344F, -91.0645F, -403.564F, 39.3066F, 77.1484F, 221.680F, -40.2832F, -54.1992F, -16.3574F, 332.520F, 286.865F, 192.627F, 17.8223F, -61.5234F, -187.256F, 180.176F, 227.539F, 150.391F, 88.3789F, 60.0586F, -30.7617F, 192.139F, 647.949F, 739.014F, -168.701F, -270.020F, -534.668F, -137.939F, -143.555F, 127.930F, -144.043F, -239.014F, -119.629F, -64.2090F, 96.9238F, 239.746F, -140.869F, -204.346F, -230.713F, -5.37109F, 106.201F, -11.9629F, -46.3867F, -28.8086F, -153.564F, -21.4844F, 302.734F, 369.385F, -155.273F, -256.592F, -248.779F, -71.0449F, 46.1426F, 63.2324F, -62.7441F, -114.746F, -153.564F, 35.4004F, 230.713F, 218.262F, -79.5898F, -88.8672F, -267.090F, 132.568F, 63.4766F, 153.809F, -49.3164F, 46.1426F, -51.0254F, 87.1582F, 336.670F, 510.498F, -138.916F, -262.451F, -353.760F, -174.316F, -58.3496F, 224.365F, -102.539F, -172.119F, -20.5078F, -26.6113F, -27.8320F, 587.646F, -100.830F, -129.150F, -287.354F, 117.676F, 89.8438F, 31.9824F, -45.4102F, -17.5781F, -31.9824F, 210.205F, 306.396F, 297.852F, -149.170F, -160.645F, -327.393F, 55.4199F, -29.5410F, 154.053F, -42.9688F, -119.385F, -53.2227F, 181.885F, 286.865F, 233.643F, -78.3691F, -36.1328F, -228.516F, 163.818F, 235.840F, 52.7344F, 83.0078F, -0.732422F, -34.9121F, 114.502F, 451.172F, 594.971F, -177.979F, -234.619F, -410.889F, -52.0020F, -62.0117F, 78.3691F, -124.756F, -106.934F, -127.197F, -30.7617F, 177.002F, 220.459F, -83.0078F, -167.236F, -251.953F, 77.1484F, 117.188F, 4.88281F, 5.61523F, -21.7285F, -134.521F, 86.1816F, 256.592F, 436.768F, -132.813F, -184.814F, -333.008F, 72.7539F, -6.10352F, 106.445F, -24.4141F, -95.7031F, -126.709F, 114.014F, 184.082F, 263.184F, -51.2695F, -97.1680F, -263.184F, 151.367F, 160.645F, 153.809F, 8.05664F, 35.8887F, -43.4570F, 224.854F, 411.865F, 468.994F, -79.3457F, -128.906F, -482.910F, 0.488281F, -69.5801F, 222.168F, -90.5762F, -119.629F, -56.1523F, 0.000000F, 145.752F, 490.723F, -121.094F, -96.4355F, -203.613F, 9.03320F, 230.713F, 59.8145F, 44.1895F, -39.0625F, -35.1563F, 361.572F, 335.205F, 331.299F, -86.6699F, -146.729F, -310.059F, 72.7539F, 78.6133F, 164.063F, -47.1191F, -82.0313F, 18.7988F, 265.869F, 374.268F, 225.098F, 43.2129F, -9.52148F, -274.658F, 243.164F, 190.674F, 130.859F, 111.328F, 89.3555F, -105.469F, 345.459F, 595.703F, 556.396F, -113.770F, -185.059F, -567.627F, -73.9746F, -124.268F, 94.4824F, -177.490F, -135.986F, 16.1133F, -35.4004F, 156.982F, 304.688F, -132.813F, -165.039F, -223.633F, -54.9316F, 210.449F, 143.555F, -37.1094F, 9.76563F, -130.127F, 103.271F, 347.412F, 380.371F, -139.648F, -205.811F, -279.541F, -31.2500F, 20.7520F, 112.549F, -58.1055F, -62.7441F, -142.578F, 147.705F, 182.617F, 210.205F, 5.85938F, -49.3164F, -343.994F, 194.580F, 118.896F, 73.9746F, -44.1895F, 88.8672F, -44.4336F, 150.391F, 336.426F, 718.262F, -120.605F, -208.008F, -351.807F, -71.2891F, 14.8926F, 198.242F, -20.5078F, -176.514F, -44.4336F, 135.498F, 129.883F, 367.676F, -89.1113F, -120.361F, -258.057F, 200.684F, 143.555F, 2.68555F, -3.41797F, -4.39453F, -56.1523F, 244.385F, 342.041F, 354.248F, -115.723F, -138.916F, -315.430F, 73.7305F, 15.1367F, 259.277F, -17.0898F, -91.7969F, -54.1992F, 239.746F, 237.793F, 280.518F, -47.8516F, -57.1289F, -194.092F, 116.943F, 268.066F, 121.826F, 88.3789F, 14.1602F, 17.0898F, 280.029F, 505.127F, 697.510F, -118.896F, -214.355F, -445.313F, 17.8223F, -70.3125F, 84.9609F, -87.4023F, -122.070F, -124.023F, 48.5840F, 176.025F, 303.223F, -19.0430F, -170.166F, -194.092F, 88.1348F, 130.859F, 47.8516F, 91.3086F, 26.8555F, -179.443F, 206.787F, 256.592F, 462.891F, -89.3555F, -174.072F, -288.574F, 76.9043F, 78.1250F, 104.736F, 17.5781F, -52.4902F, -109.863F, 185.303F, 216.309F, 332.764F, -7.32422F, -104.492F, -203.613F, 210.205F, 153.076F, 194.336F, 28.8086F, 114.258F, -68.1152F, 330.811F, 459.717F, 462.158F, -45.8984F, -156.738F, -393.555F, 15.3809F, -42.7246F, 292.480F, -102.051F, -51.5137F, 12.4512F, 101.074F, 143.311F, 635.010F, -57.1289F, -135.986F, -209.473F, 103.516F, 217.041F, 54.1992F, 33.2031F, -24.6582F, 20.2637F, 344.971F, 556.152F, 337.646F, -20.5078F, -108.643F, -339.111F, 101.074F, 76.4160F, 255.127F, 7.08008F, -83.7402F, 15.8691F, 378.906F, 402.100F, 239.258F, 44.6777F, -22.2168F, -202.393F, 310.791F, 344.971F, 87.8906F, 135.010F, 66.4063F, -26.1230F, 387.451F, 768.799F, 635.498F }; /* * Quantization tables for split_MQ of 2 sets of LSFs in a 20 ms frame. */ #define DICO1_SIZE_5 128 #define DICO2_SIZE_5 256 #define DICO3_SIZE_5 256 #define DICO4_SIZE_5 256 #define DICO5_SIZE_5 64 static const Float32 dico1_lsf_5[DICO1_SIZE_5 * 4] = { -110.107F, -260.010F, -129.150F, -318.604F, -109.863F, -184.570F, -121.338F, -210.693F, -93.7500F, -151.123F, -100.830F, -163.330F, -77.3926F, -131.348F, -80.8105F, -135.742F, -101.074F, -124.023F, -103.516F, -92.2852F, -66.8945F, -79.1016F, -105.957F, -149.902F, -55.1758F, -122.070F, -56.6406F, -125.488F, -64.2090F, -92.0410F, -72.7539F, -100.098F, -36.8652F, -173.340F, -42.4805F, -199.707F, -36.3770F, -100.586F, -38.0859F, -104.736F, -70.3125F, -112.793F, -45.4102F, -49.5605F, -41.5039F, -73.7305F, -46.6309F, -78.3691F, -31.9824F, -35.8887F, -72.5098F, -96.4355F, -55.6641F, -52.2461F, -59.8145F, -46.8750F, -16.3574F, -77.1484F, -17.3340F, -79.8340F, -25.3906F, -50.0488F, -22.9492F, -44.6777F, -34.9121F, -9.27734F, -47.1191F, -23.1934F, 3.90625F, -18.5547F, -30.2734F, -60.5469F, 5.61523F, -57.8613F, 5.85938F, -59.5703F, 4.39453F, -33.2031F, 10.7422F, -27.0996F, -8.05664F, -5.85938F, -6.10352F, 0.000000F, 36.3770F, 4.63867F, 5.61523F, -34.9121F, 38.5742F, -41.2598F, 42.4805F, -44.1895F, 32.4707F, -13.4277F, 40.2832F, -6.34766F, 27.0996F, 20.5078F, 23.9258F, 18.3105F, 21.2402F, 44.6777F, -28.0762F, -2.68555F, -1.95313F, 31.7383F, 2.68555F, 41.5039F, 62.0117F, 18.7988F, 50.0488F, 4.15039F, 44.6777F, 27.3438F, 63.9648F, 47.3633F, 49.3164F, 70.0684F, 23.1934F, 46.1426F, -10.2539F, -25.6348F, 57.1289F, 43.7012F, 9.52148F, 45.4102F, 39.7949F, 84.2285F, 81.0547F, 48.5840F, 72.9980F, 39.3066F, -13.1836F, 69.5801F, -19.0430F, 68.6035F, -32.4707F, 34.4238F, -44.4336F, 27.0996F, 60.7910F, 83.2520F, 66.1621F, 88.8672F, 22.7051F, 98.3887F, 18.3105F, 95.4590F, 22.4609F, 124.512F, -33.6914F, 53.7109F, -45.1660F, -7.08008F, -8.30078F, 88.1348F, -28.0762F, 78.1250F, 0.732422F, 135.254F, 24.1699F, 69.8242F, 53.2227F, 144.287F, -59.8145F, 99.1211F, -65.4297F, 110.596F, 0.000000F, 141.602F, 6.10352F, 147.949F, 67.1387F, 129.883F, 36.1328F, 109.863F, -17.8223F, 180.420F, -69.5801F, 126.465F, -70.3125F, 22.9492F, -49.5605F, 164.551F, -34.1797F, -18.0664F, 50.0488F, 174.316F, -27.8320F, 72.9980F, 42.9688F, 225.342F, 44.4336F, 135.986F, 58.5938F, 172.119F, -3.90625F, 125.244F, 118.408F, 144.775F, 71.5332F, 93.7500F, 110.107F, 150.635F, -9.27734F, 12.2070F, 137.451F, 129.150F, 73.9746F, 51.0254F, 112.061F, 88.6230F, 105.713F, 110.352F, 109.863F, 110.840F, 89.5996F, 147.949F, 116.455F, 180.908F, 105.469F, 86.1816F, 89.8438F, 65.1855F, 88.1348F, 174.805F, 66.6504F, 142.334F, 110.596F, 40.5273F, 124.512F, 41.9922F, 49.0723F, 153.564F, 66.8945F, 46.6309F, 138.672F, 156.006F, 73.7305F, 72.7539F, 154.785F, 94.4824F, 156.982F, 85.4492F, 143.311F, 136.719F, 149.414F, 137.939F, 146.484F, 192.383F, 118.896F, 164.063F, 125.000F, 247.803F, 78.3691F, 81.2988F, 87.1582F, 208.496F, -30.5176F, 100.830F, 115.723F, 173.828F, 4.15039F, -36.8652F, 137.695F, 69.5801F, 65.9180F, -58.8379F, 237.061F, 217.041F, 119.385F, 53.7109F, 124.512F, 218.750F, 134.033F, 225.586F, 79.8340F, 201.416F, 70.8008F, 222.412F, 131.836F, 270.508F, 38.5742F, 196.533F, 48.5840F, 233.643F, 124.756F, 178.223F, 24.4141F, 213.379F, 3.17383F, 193.115F, 106.201F, 154.297F, 165.039F, 237.305F, 60.7910F, 219.727F, 114.014F, 297.363F, 190.674F, 262.207F, 142.822F, 191.650F, -5.61523F, 163.330F, 65.1855F, 254.639F, 151.123F, 264.648F, 150.146F, 279.541F, 151.855F, 220.947F, 223.633F, 256.104F, 19.5313F, 80.8105F, 142.578F, 262.451F, 21.7285F, 156.006F, 241.211F, 234.619F, 187.988F, 175.781F, 194.824F, 170.654F, 120.117F, 109.131F, 219.482F, 153.076F, 66.1621F, 290.039F, 177.002F, 325.439F, 21.2402F, 147.217F, 203.125F, 391.357F, 150.391F, 275.146F, 217.285F, 367.432F, 244.141F, 282.227F, 211.426F, 246.338F, 242.920F, 201.904F, 280.518F, 209.473F, 199.463F, 354.004F, 188.721F, 322.266F, 122.070F, 339.111F, 76.1719F, 281.494F, -4.88281F, 264.648F, 15.6250F, 313.232F, 0.488281F, 286.133F, 97.4121F, 456.299F, 125.488F, 416.504F, 122.559F, 399.414F, 216.309F, 371.582F, 101.563F, 146.484F, 276.123F, 329.590F, 311.279F, 339.355F, 217.041F, 438.232F, 223.145F, 431.152F, 55.4199F, 288.818F, 305.176F, 445.801F, 123.291F, 452.637F, 224.365F, 574.463F, -48.5840F, 105.225F, 37.1094F, 423.584F, -52.0020F, -6.83594F, 95.7031F, 325.684F, -37.3535F, -12.6953F, 238.770F, 281.006F, -78.8574F, -97.6563F, 198.486F, 415.771F, -33.2031F, 20.5078F, 353.760F, 491.943F, -80.8105F, -34.9121F, -33.4473F, 291.016F, -62.5000F, 130.371F, -38.3301F, 251.709F, -74.9512F, -107.178F, 132.324F, 178.467F, -80.3223F, -102.539F, -23.6816F, 150.391F, -88.3789F, -41.0156F, -78.6133F, 89.3555F, -60.3027F, -26.8555F, -51.5137F, 21.7285F, -47.8516F, -75.4395F, 4.88281F, 14.4043F, -88.8672F, -113.037F, -69.8242F, 21.7285F, -82.0313F, 42.7246F, -105.469F, 34.4238F, -92.5293F, -46.3867F, -105.957F, -47.8516F, -19.2871F, 36.6211F, -67.8711F, -55.4199F, -68.3594F, 40.5273F, -135.498F, -103.027F, -37.8418F, 132.080F, -89.3555F, 13.1836F, -7.08008F, -20.2637F, -73.4863F, -188.965F, 45.4102F, 153.320F, -96.9238F, -64.4531F, 59.0820F, 71.5332F, -48.0957F, -142.822F, 30.2734F, 100.098F, 12.9395F, -32.4707F, 2.44141F, 83.0078F, -139.160F, -260.010F, 15.8691F, -108.887F, 16.6016F, -120.361F, 93.5059F, 228.760F, -87.1582F, -173.584F, -87.6465F, -61.0352F, -165.283F, -260.742F, 71.2891F, -6.34766F, 88.6230F, 1.46484F, 148.193F, 320.557F, -31.0059F, -2.44141F, 369.385F, 460.449F, 174.072F, 237.305F, 358.643F, 532.471F, 352.295F, 492.188F }; static const Float32 dico2_lsf_5[DICO2_SIZE_5 * 4] = { -398.193F, -390.625F, -438.477F, -559.082F, -250.732F, -432.129F, -268.555F, -494.385F, -311.768F, -338.867F, -333.740F, -374.512F, -231.201F, -356.689F, -237.305F, -372.070F, -243.896F, -298.340F, -249.023F, -286.133F, -198.975F, -240.967F, -242.188F, -334.717F, -296.875F, -245.605F, -314.697F, -267.090F, -181.641F, -309.570F, -184.326F, -315.674F, -210.449F, -225.342F, -220.947F, -240.234F, -165.527F, -256.592F, -167.236F, -256.348F, -265.381F, -240.479F, -259.277F, -165.771F, -241.455F, -156.494F, -275.146F, -238.281F, -186.035F, -159.668F, -217.285F, -196.777F, -203.369F, -266.357F, -172.363F, -153.564F, -151.611F, -196.777F, -156.250F, -198.242F, -189.209F, -154.785F, -190.186F, -132.568F, -243.164F, -137.939F, -262.451F, -141.602F, -133.301F, -149.170F, -139.648F, -151.123F, -185.547F, -70.8008F, -214.600F, -128.418F, -200.928F, -112.793F, -194.092F, -61.7676F, -135.010F, -101.318F, -143.799F, -107.178F, -130.127F, -83.0078F, -168.945F, -228.271F, -123.291F, -188.477F, -171.387F, -276.123F, -64.2090F, -74.7070F, -237.061F, -117.920F, -108.643F, -18.0664F, -135.498F, -133.789F, -149.902F, -31.4941F, -169.189F, -57.1289F, -96.6797F, -60.0586F, -115.967F, -61.0352F, -64.6973F, -98.6328F, -91.7969F, -125.488F, -101.807F, -124.512F, -73.2422F, -76.4160F, -81.5430F, -162.109F, -113.037F, -198.730F, -94.2383F, -171.875F, -82.2754F, -150.146F, -57.1289F, -49.0723F, -56.8848F, -58.3496F, -40.7715F, -138.428F, -49.5605F, -151.123F, -35.8887F, -101.318F, -28.0762F, -85.9375F, -40.5273F, -183.105F, -41.7480F, -185.791F, -65.9180F, -214.600F, -64.4531F, -220.459F, -89.5996F, -181.641F, 10.4980F, -115.967F, 3.41797F, -159.424F, 10.4980F, -163.574F, 2.68555F, -109.375F, -14.4043F, -127.197F, -30.7617F, -29.0527F, -37.8418F, -149.658F, -10.2539F, -210.693F, -6.59180F, -227.295F, 33.2031F, -117.920F, 44.6777F, -114.258F, 13.4277F, -72.7539F, 13.4277F, -74.2188F, 76.4160F, -148.682F, 76.4160F, -175.781F, 78.6133F, -40.7715F, 24.4141F, -132.080F, -0.732422F, -29.0527F, -27.0996F, -45.6543F, 56.8848F, -57.6172F, 63.4766F, -57.1289F, 6.34766F, -40.2832F, 32.7148F, -10.9863F, -9.76563F, -134.033F, 87.8906F, -49.5605F, 92.2852F, -94.7266F, 109.863F, -93.5059F, 67.1387F, 4.88281F, 44.4336F, -25.1465F, 60.0586F, -27.0996F, 105.225F, 9.03320F, 112.793F, -35.6445F, 118.896F, -38.3301F, -69.3359F, -14.4043F, 122.803F, -44.9219F, 5.85938F, 12.9395F, -0.732422F, 13.1836F, 29.7852F, 63.2324F, 81.2988F, 16.1133F, 118.164F, 25.3906F, 106.445F, 16.6016F, 47.6074F, 28.3203F, 46.3867F, 50.2930F, 65.6738F, -2.19727F, 117.676F, 85.9375F, 93.2617F, 69.5801F, 97.4121F, 67.6270F, 110.352F, 62.5000F, 16.8457F, 45.4102F, 3.17383F, 72.5098F, -3.17383F, 63.2324F, -23.1934F, 7.32422F, 13.6719F, 96.1914F, 47.8516F, 103.760F, 50.0488F, 111.328F, 68.6035F, 140.869F, 3.66211F, 46.6309F, 91.5527F, 70.8008F, 99.3652F, 140.625F, -13.6719F, 55.4199F, 132.813F, 98.8770F, 0.000000F, 134.033F, -22.4609F, 128.906F, -55.9082F, 85.6934F, -59.8145F, 82.5195F, -88.3789F, 106.201F, 40.7715F, 128.662F, -18.3105F, 73.7305F, 22.2168F, 201.172F, 31.4941F, 146.240F, 121.094F, 165.771F, 45.4102F, 182.861F, 37.3535F, 179.932F, -68.6035F, 146.484F, -84.9609F, 150.146F, -57.6172F, 187.744F, 10.0098F, 215.088F, 9.27734F, 217.285F, -53.7109F, 205.322F, -87.1582F, 215.576F, -95.9473F, 220.459F, -154.785F, 115.723F, -108.398F, 207.520F, -42.7246F, 165.527F, -120.361F, 59.0820F, -126.709F, 191.650F, -174.316F, 142.090F, -132.080F, 89.3555F, -132.568F, 105.957F, -145.752F, 122.070F, -186.768F, 54.1992F, -171.387F, 223.877F, -181.396F, 234.863F, -212.158F, 122.314F, -219.482F, 133.789F, -92.5293F, 48.8281F, -106.201F, 38.3301F, -199.951F, 52.2461F, -210.205F, 38.3301F, -149.902F, 9.76563F, -154.297F, 22.9492F, -215.576F, -13.1836F, -180.908F, 125.977F, -122.314F, 72.7539F, -149.902F, -41.7480F, -212.402F, -39.3066F, -211.182F, -5.61523F, -199.707F, 22.7051F, -247.803F, -65.1855F, -161.621F, -87.6465F, -134.033F, 0.488281F, -107.910F, -29.5410F, -92.0410F, 0.000000F, -55.4199F, 8.05664F, -101.074F, -30.7617F, -31.4941F, 51.7578F, -228.027F, 8.30078F, -264.160F, -68.8477F, -273.193F, -65.4297F, -173.340F, -201.416F, -102.539F, -46.6309F, -262.695F, -226.563F, -223.877F, -22.7051F, -153.320F, -87.4023F, 23.6816F, 1.70898F, -50.2930F, -95.9473F, -24.6582F, 5.85938F, -49.5605F, 9.27734F, -41.0156F, 20.2637F, -146.240F, -103.271F, -68.1152F, 104.004F, -170.898F, 28.8086F, -18.3105F, 50.2930F, -239.502F, -164.307F, -166.016F, 101.807F, -89.5996F, 9.03320F, -68.1152F, 115.723F, -31.4941F, -77.6367F, 77.8809F, 72.2656F, -152.832F, -9.52148F, 83.7402F, 146.973F, -169.922F, -9.52148F, -73.9746F, 229.492F, 25.3906F, 56.8848F, -92.7734F, 33.4473F, -8.78906F, 65.6738F, -18.3105F, -52.2461F, 29.2969F, 10.4980F, -129.150F, -116.455F, 112.061F, 40.0391F, -49.3164F, -55.9082F, -11.9629F, -40.7715F, 148.682F, 193.359F, 23.9258F, -53.7109F, 223.389F, 36.1328F, 71.5332F, 69.0918F, 212.158F, 22.2168F, 140.381F, 96.1914F, 79.5898F, -19.0430F, 175.049F, 16.3574F, 89.1113F, -78.8574F, 150.391F, -8.78906F, 178.467F, 6.59180F, 151.123F, 58.1055F, 154.297F, 66.6504F, 109.375F, 24.1699F, 195.557F, 116.211F, 212.158F, 66.6504F, 167.236F, 15.6250F, 192.627F, 17.5781F, 249.268F, 52.9785F, 193.604F, 112.061F, 179.199F, 87.8906F, 157.715F, 117.188F, 87.8906F, 78.6133F, 104.736F, 113.281F, 155.762F, 104.980F, 184.570F, 88.6230F, 244.141F, 98.6328F, 166.748F, 128.906F, 146.973F, 150.146F, 159.912F, 100.830F, 230.957F, 167.725F, 228.760F, 146.973F, 220.703F, 147.461F, 135.498F, 179.932F, 191.895F, 161.621F, 114.014F, 159.668F, 88.3789F, 143.799F, 226.807F, 173.340F, 121.582F, 116.699F, 101.318F, 102.539F, 169.189F, 215.576F, 198.486F, 166.748F, 190.674F, 225.830F, 222.900F, 229.248F, 177.246F, 178.711F, 119.873F, 208.252F, 129.639F, 231.445F, 179.199F, 235.107F, 76.9043F, 197.266F, 185.791F, 184.326F, 279.297F, 185.547F, 159.912F, 262.695F, 201.660F, 258.057F, 266.357F, 204.590F, 244.873F, 197.266F, 255.615F, 276.611F, 160.889F, 268.799F, 242.188F, 256.348F, 262.207F, 262.451F, 237.061F, 169.434F, 299.316F, 257.324F, 139.404F, 205.322F, 215.820F, 342.773F, 336.670F, 267.578F, 263.672F, 210.205F, 300.537F, 179.443F, 313.477F, 185.547F, 310.547F, 241.943F, 333.740F, 257.080F, 306.885F, 170.898F, 256.348F, 130.371F, 241.211F, 110.596F, 308.594F, 146.240F, 278.320F, 165.771F, 395.752F, 198.975F, 337.891F, 127.197F, 321.533F, 95.9473F, 381.836F, 196.533F, 353.516F, 167.480F, 260.742F, 158.203F, 213.623F, 74.9512F, 264.404F, 88.1348F, 255.615F, 77.3926F, 345.947F, 235.352F, 164.795F, 139.404F, 281.250F, 19.2871F, 271.973F, -11.4746F, 373.535F, 75.9277F, 420.166F, 76.6602F, 284.668F, 168.213F, 125.488F, -22.9492F, 85.2051F, 68.8477F, 344.727F, 80.0781F, 250.244F, 118.896F, -15.8691F, 13.9160F, 196.533F, 236.816F, 8.78906F, 15.1367F, 187.744F, -64.2090F, 193.115F, -84.4727F, 155.518F, 170.654F, -33.4473F, 151.367F, 130.371F, 132.080F, -179.443F, 47.3633F, 173.584F, 73.2422F, -65.4297F, -210.693F, 226.074F, 187.744F, -172.852F, -104.492F, 123.535F, 42.4805F, -217.773F, -153.809F, 106.201F, 133.545F, -350.342F, -62.9883F, 151.611F, 114.990F, -248.535F, -333.984F, -95.9473F, 127.197F, -224.609F, -167.480F, -6.10352F, 4.88281F, -239.746F, -282.227F, 83.0078F, 2.19727F, -380.371F, -277.100F, -85.9375F, 11.7188F, -385.498F, -98.1445F, -216.553F, 1.46484F, -282.227F, -216.797F, -133.789F, -85.9375F, -401.123F, -285.156F, -38.8184F, 148.926F, -494.141F, -235.107F, -54.9316F, 47.1191F, -404.297F, -478.516F, -59.8145F, -120.361F, -235.352F, -410.156F, -228.516F, -155.029F, -317.139F, -425.781F, -338.867F, -147.461F, -375.977F, -203.857F, -341.064F, -32.9590F, -387.695F, -70.8008F, -407.715F, -173.828F, -490.967F, -398.438F, -406.006F, -6.59180F, -551.270F, -197.998F, -282.471F, 44.9219F, -308.838F, 46.1426F, -333.740F, 143.066F, -490.967F, 49.0723F, -192.871F, 173.828F, -295.410F, 0.732422F, -252.197F, 197.266F, -305.420F, 202.637F, -27.0996F, 155.029F, -399.414F, 109.131F, -113.037F, -231.689F, -108.643F, -226.563F, -123.047F, -283.691F, -122.314F, -295.654F, 35.1563F, -85.6934F, -90.8203F, -256.836F, -69.0918F, -258.545F, -68.1152F, -274.170F, -140.381F, -351.074F, -143.311F, -394.043F, -228.271F, -240.234F, 55.9082F, 168.457F, -224.854F, -175.537F, -98.3887F, 332.520F, -167.236F, -113.525F, 213.379F, 96.9238F, -124.268F, -11.2305F, 77.3926F, 325.684F, -118.408F, 111.328F, 198.486F, 107.178F, -100.342F, 82.7637F, 219.238F, 260.498F, -103.760F, 11.2305F, 351.807F, 121.338F, -221.924F, -195.313F, 357.666F, 255.371F, -62.0117F, -78.3691F, 349.121F, 284.424F, 16.6016F, 85.4492F, 252.441F, 162.598F, 90.3320F, 2.68555F, 320.068F, 192.871F, 34.9121F, 56.6406F, 254.150F, 381.348F, -27.8320F, 161.865F, 394.531F, 263.184F, 110.840F, 141.357F, 311.279F, 253.906F, -18.5547F, 221.924F, 183.594F, 260.498F, 37.3535F, 125.000F, 84.9609F, 296.387F, 149.902F, 93.9941F, 449.951F, 197.266F, 65.6738F, 252.441F, 49.5605F, 265.137F, 159.180F, 248.291F, 435.303F, 275.879F, 104.736F, 323.975F, 94.4824F, 337.891F, -11.9629F, 288.818F, -17.5781F, 296.631F, -101.563F, 244.385F, 132.813F, 427.002F, -85.9375F, 298.584F, -122.559F, 292.725F, -143.799F, 138.916F, -55.4199F, 397.949F, -34.6680F, 385.254F, -56.1523F, 418.701F, -174.316F, 314.453F, -204.590F, 341.309F, 276.123F, 331.299F, -50.7813F, 300.781F, 106.689F, 235.596F, -226.807F, 199.707F, 197.998F, 344.238F, 209.717F, 367.920F, 40.0391F, 295.898F, 338.623F, 437.744F, 118.164F, 457.520F, 111.328F, 503.662F, 243.164F, 285.645F, 323.730F, 342.285F, 321.289F, 332.031F, 277.100F, 308.105F, 301.270F, 395.020F, 332.275F, 431.641F, 346.924F, 299.561F, 386.719F, 328.857F, 208.496F, 164.063F, 411.377F, 382.324F, 278.076F, 310.059F, 492.188F, 445.557F, 432.861F, 385.986F, 374.023F, 356.445F, 363.037F, 230.957F, 405.029F, 249.268F, 425.781F, 295.898F, 339.844F, 238.525F, 432.617F, 283.447F, 445.801F, 284.180F, 419.434F, 348.877F, 481.689F, 388.428F, 289.307F, 210.938F, 520.508F, 259.033F, 439.209F, 198.730F, 448.730F, 184.814F, 513.672F, 321.045F, 501.465F, 307.129F, 515.869F, 223.389F, 569.092F, 227.051F, 358.154F, 280.029F, 632.324F, 351.318F, 548.096F, 425.781F, 510.254F, 395.508F, 575.684F, 354.980F, 650.879F, 367.676F, 458.008F, 448.486F, 505.371F, 482.178F, 424.561F, 385.010F, 166.504F, 314.697F, 386.719F, 499.268F, 354.980F, 512.207F, 609.863F, 489.258F, 661.865F, 504.395F, 177.246F, 387.695F, 672.852F, 570.313F, 55.6641F, 206.787F, 599.609F, 405.029F, 8.78906F, 73.4863F, 474.121F, 477.783F, -108.887F, -23.4375F, 525.879F, 340.820F, 374.268F, 268.799F, 3.41797F, 148.438F, -225.342F, -178.711F, 337.646F, 483.887F, 328.369F, 232.422F, -166.016F, 78.3691F, 312.744F, 309.570F, -389.160F, 89.1113F, 229.736F, 230.957F, -424.072F, -200.684F, 579.590F, 680.420F, 444.580F, 680.664F }; static const Float32 dico3_lsf_5[DICO3_SIZE_5 * 4] = { -442.383F, -555.420F, -458.740F, -619.385F, -400.391F, -451.172F, -413.818F, -489.258F, -297.852F, -466.797F, -298.096F, -514.160F, -380.615F, -387.695F, -384.033F, -379.883F, -291.748F, -394.287F, -298.828F, -421.631F, -331.787F, -281.006F, -394.531F, -475.586F, -311.035F, -339.600F, -318.604F, -342.529F, -392.334F, -287.842F, -409.180F, -320.068F, -352.295F, -360.840F, -333.740F, -219.238F, -306.641F, -258.545F, -324.951F, -276.855F, -239.746F, -276.611F, -280.518F, -367.188F, -263.672F, -319.336F, -249.023F, -288.818F, -239.258F, -362.793F, -236.084F, -364.990F, -241.211F, -225.098F, -255.615F, -262.939F, -204.590F, -287.842F, -209.473F, -298.340F, -276.123F, -254.150F, -259.766F, -187.256F, -212.891F, -282.471F, -171.143F, -214.844F, -172.363F, -221.191F, -188.965F, -248.047F, -141.113F, -263.672F, -195.557F, -360.840F, -144.287F, -271.240F, -144.531F, -279.785F, -174.072F, -338.867F, -156.250F, -335.938F, -145.752F, -258.545F, -101.563F, -220.459F, -167.480F, -203.125F, -161.377F, -172.852F, -108.398F, -211.914F, -119.629F, -224.854F, -91.3086F, -189.453F, -151.123F, -285.645F, -142.822F, -134.033F, -187.744F, -194.092F, -106.201F, -160.889F, -129.395F, -180.908F, -121.582F, -204.346F, -87.1582F, -145.752F, -68.1152F, -212.646F, -59.3262F, -216.553F, -68.8477F, -162.354F, -68.3594F, -162.842F, -40.2832F, -136.719F, -96.1914F, -220.459F, -88.3789F, -100.098F, -109.375F, -142.334F, -99.8535F, -140.137F, -76.4160F, -87.1582F, -155.518F, -133.789F, -139.160F, -106.445F, -218.750F, -123.047F, -93.2617F, -184.814F, -14.1602F, -117.432F, -40.2832F, -150.879F, -46.6309F, -91.3086F, -57.1289F, -93.2617F, -54.1992F, -166.748F, -6.10352F, -117.188F, -102.051F, -87.6465F, -178.223F, -86.1816F, -79.1016F, -38.3301F, -105.469F, -78.6133F, -96.1914F, -73.9746F, -69.3359F, -25.3906F, -146.729F, -70.5566F, -135.742F, -47.8516F, -143.555F, -36.6211F, -160.889F, -148.438F, -115.479F, -5.85938F, -16.6016F, -109.375F, -115.723F, -1.95313F, -123.535F, -10.9863F, -182.617F, -44.9219F, -206.055F, -61.5234F, -219.971F, -22.2168F, -142.578F, -23.6816F, -159.180F, 33.6914F, -186.523F, -31.9824F, -165.527F, -2.92969F, -163.574F, 40.2832F, -63.2324F, -0.732422F, -205.078F, -26.1230F, -221.924F, 9.03320F, -242.188F, 10.7422F, -208.496F, -101.318F, -204.834F, 3.17383F, -244.385F, -66.1621F, -250.488F, -75.4395F, -194.824F, -116.699F, -203.125F, -119.141F, -230.225F, 41.0156F, -271.484F, -94.4824F, -289.307F, -24.6582F, -288.818F, -9.76563F, -229.736F, -77.1484F, -251.465F, -187.988F, -254.883F, -152.588F, -263.916F, -131.348F, -298.828F, -72.9980F, -320.313F, -106.445F, -292.236F, -161.865F, -284.912F, -39.3066F, -296.875F, -168.457F, -302.002F, -202.881F, -349.609F, -175.781F, -342.529F, -120.361F, -219.238F, -180.664F, -225.098F, -195.557F, -269.043F, -98.1445F, -385.498F, -235.352F, -259.033F, -155.762F, -309.814F, -351.074F, -365.967F, -228.027F, -366.699F, -218.506F, -390.137F, -137.695F, -420.654F, -175.049F, -147.949F, -145.752F, -284.668F, -264.893F, -334.229F, -114.258F, -475.098F, -364.502F, -448.730F, -232.666F, -471.680F, -227.295F, -365.967F, -45.8984F, -399.170F, -102.783F, -355.713F, -82.5195F, -353.516F, -5.37109F, -474.121F, -103.027F, -489.746F, -60.7910F, -121.094F, -27.8320F, -466.309F, -184.326F, -314.697F, 42.4805F, -354.248F, -26.6113F, -117.676F, -62.7441F, -298.096F, -124.023F, -394.775F, 36.8652F, -413.574F, 50.7813F, -159.668F, 26.1230F, -403.076F, 7.08008F, -278.564F, 68.1152F, -296.631F, 74.7070F, -299.805F, -123.535F, -178.223F, -42.7246F, -301.758F, -24.6582F, -236.572F, 134.521F, -212.402F, 67.8711F, -200.928F, 76.9043F, -137.451F, 91.7969F, -256.592F, 55.6641F, -123.779F, 68.3594F, -146.240F, 68.6035F, -185.059F, 61.7676F, -74.4629F, 92.5293F, -184.326F, -32.7148F, -149.170F, 161.133F, -201.172F, 130.859F, -199.463F, 157.715F, -100.830F, 11.9629F, -83.2520F, 43.2129F, -110.596F, 128.418F, -117.676F, 143.799F, -17.3340F, 82.7637F, -160.400F, 64.4531F, -59.5703F, 72.0215F, -57.8613F, 76.9043F, -94.4824F, 138.916F, -123.535F, -2.19727F, -92.0410F, 3.41797F, -39.0625F, 161.377F, -52.7344F, 9.76563F, -75.1953F, -11.2305F, 23.1934F, 52.2461F, -59.0820F, 40.7715F, -20.9961F, 46.8750F, -13.6719F, 6.59180F, -18.5547F, 7.56836F, 8.78906F, 75.4395F, -25.8789F, -44.4336F, -27.5879F, 18.0664F, -107.666F, -5.37109F, 5.61523F, 33.9355F, 19.7754F, -2.68555F, 10.7422F, 3.66211F, -21.2402F, -33.4473F, -28.8086F, -50.5371F, -38.5742F, -14.1602F, 66.4063F, -22.4609F, -38.0859F, -107.666F, 1.95313F, -33.2031F, 31.2500F, -53.9551F, 24.6582F, -53.2227F, 9.76563F, -48.0957F, -18.5547F, -111.328F, 2.19727F, -108.643F, 8.05664F, -103.271F, 55.1758F, 14.6484F, 17.8223F, -54.1992F, 38.0859F, -97.4121F, 68.3594F, -77.6367F, 59.8145F, -83.2520F, 40.5273F, -121.826F, 82.7637F, -46.3867F, 79.8340F, -53.4668F, 79.3457F, -33.4473F, -21.7285F, -145.508F, 24.4141F, -153.076F, 35.1563F, -165.283F, 118.896F, 6.83594F, 61.5234F, -95.4590F, 52.2461F, -10.0098F, 68.8477F, -6.83594F, 24.1699F, -69.8242F, 80.8105F, 11.9629F, 112.061F, -94.7266F, 137.939F, -90.0879F, 106.445F, 6.83594F, 82.0313F, -2.19727F, 96.9238F, -40.7715F, 150.879F, 8.30078F, 145.508F, -4.15039F, 136.963F, -34.1797F, 72.9980F, 19.2871F, 127.441F, 30.5176F, 49.5605F, 0.488281F, 59.5703F, 70.3125F, 62.2559F, 51.5137F, 42.7246F, 20.0195F, 145.508F, 45.6543F, 126.221F, 26.3672F, 93.0176F, 62.2559F, 89.1113F, 72.5098F, 121.338F, 85.9375F, 79.8340F, -20.0195F, 6.10352F, 51.2695F, 90.5762F, 59.8145F, 63.7207F, 0.732422F, 133.057F, 109.619F, 34.1797F, 71.7773F, 10.7422F, 72.0215F, 51.7578F, 84.7168F, 59.5703F, 120.605F, 80.8105F, 128.906F, 49.0723F, 74.9512F, 85.2051F, 100.342F, 149.658F, 69.3359F, 149.902F, 100.830F, 113.281F, 78.6133F, 152.344F, 96.9238F, 23.6816F, 48.8281F, -39.0625F, 93.7500F, 36.3770F, 88.3789F, 120.850F, 128.174F, 65.6738F, 142.822F, 8.05664F, 119.873F, -29.5410F, 105.713F, 104.248F, 149.170F, 121.582F, 125.977F, 41.7480F, 108.154F, 121.338F, 162.598F, 107.422F, 67.1387F, 138.184F, 140.381F, 35.6445F, 156.006F, 37.8418F, 163.574F, -8.05664F, 42.2363F, 51.7578F, 169.922F, -40.5273F, 146.729F, -46.6309F, 169.678F, -119.385F, 122.803F, 42.7246F, 181.152F, 52.2461F, 116.211F, 90.8203F, 264.404F, 141.113F, 129.395F, 143.066F, 189.697F, 103.760F, 213.379F, 76.9043F, 205.322F, 91.3086F, 207.031F, -40.2832F, 137.939F, 8.54492F, 241.943F, -9.52148F, 259.277F, 80.3223F, 173.828F, 191.895F, 205.078F, 157.471F, 194.092F, 161.377F, 165.039F, 139.404F, 224.121F, 154.297F, 263.428F, 164.307F, 199.463F, 77.6367F, 94.7266F, 213.379F, 247.070F, 137.695F, 207.031F, 214.844F, 151.367F, 135.986F, 116.943F, 163.818F, 110.596F, 168.945F, 114.258F, 205.078F, 156.738F, 206.055F, 157.471F, 123.535F, 104.492F, 218.994F, 138.428F, 204.346F, 94.4824F, 234.863F, 121.826F, 168.701F, 136.963F, 229.248F, 226.074F, 191.162F, 72.2656F, 192.871F, 65.4297F, 250.977F, 129.395F, 213.379F, 80.3223F, 133.789F, 34.9121F, 164.795F, 71.0449F, 122.803F, 16.1133F, 254.150F, 87.6465F, 191.895F, 23.6816F, 196.533F, 8.05664F, 204.346F, 114.746F, 124.756F, 11.9629F, 266.602F, 79.8340F, 286.621F, 78.8574F, 0.732422F, 59.0820F, 212.891F, 115.723F, 168.213F, 104.736F, 324.463F, 165.527F, 254.395F, 151.367F, 270.752F, 162.109F, 78.3691F, 47.1191F, 217.041F, 231.934F, 281.494F, 213.379F, 218.018F, 155.029F, 214.111F, 210.449F, 231.445F, 222.900F, 315.674F, 162.354F, 322.266F, 156.006F, 243.408F, 193.604F, 342.285F, 251.465F, 287.109F, 247.070F, 270.996F, 234.131F, 344.238F, 225.830F, 342.529F, 223.389F, 132.568F, 210.449F, 272.461F, 298.340F, 203.857F, 290.527F, 203.857F, 290.527F, 234.131F, 280.273F, 280.029F, 335.938F, 317.383F, 291.260F, 345.459F, 300.537F, 325.928F, 327.393F, 182.129F, 266.602F, 417.725F, 313.232F, 339.111F, 261.963F, 325.684F, 382.324F, 281.494F, 360.107F, 401.611F, 277.588F, 445.557F, 297.852F, 257.813F, 337.402F, 371.338F, 422.363F, 398.438F, 377.197F, 395.508F, 376.465F, 208.740F, 389.648F, 211.182F, 406.982F, 169.189F, 216.064F, 418.945F, 370.850F, 284.912F, 316.406F, 539.307F, 429.688F, 476.563F, 364.502F, 493.164F, 361.816F, 374.512F, 455.566F, 413.574F, 490.234F, 382.324F, 182.617F, 429.932F, 201.416F, 71.7773F, 339.844F, 264.648F, 502.441F, 151.611F, 321.045F, 89.1113F, 314.209F, 48.3398F, 250.977F, 119.141F, 343.750F, 60.7910F, 98.3887F, 247.559F, 381.104F, 79.1016F, 88.6230F, 401.611F, 254.883F, 47.1191F, 89.5996F, 496.582F, 453.857F, -61.2793F, 141.357F, 183.105F, 242.676F, -59.3262F, 7.32422F, 323.486F, 214.600F, -6.83594F, -41.2598F, 152.344F, 223.877F, -110.596F, 38.8184F, 45.4102F, 334.473F, -149.902F, 1.46484F, 131.104F, 95.7031F, -22.9492F, -71.0449F, 190.674F, 55.9082F, -31.2500F, -72.7539F, 59.8145F, 119.873F, -171.143F, -158.203F, 237.305F, 192.627F, -122.314F, -156.250F, 43.4570F, 62.2559F, -89.1113F, -95.2148F, -62.2559F, 77.3926F, -233.887F, -71.7773F, -46.6309F, 55.6641F, -189.209F, -109.131F, 38.3301F, -57.8613F, -160.400F, -175.781F, -99.3652F, 22.4609F, -28.5645F, -149.170F, 81.5430F, -56.1523F, -165.771F, -264.648F, -35.1563F, -77.3926F, -219.971F, -210.205F, -180.176F, -87.8906F, -20.7520F, -177.490F, -21.9727F, -192.139F, 24.4141F, -5.37109F, -95.4590F, -64.2090F, -13.6719F, -17.8223F, -82.2754F, -184.082F, 1.22070F, -46.1426F, -172.363F, -152.344F, 21.7285F, -83.9844F, -32.9590F, -271.729F, -86.1816F, -57.8613F, -166.992F, -277.100F, -67.1387F, -269.043F, -65.6738F, -293.701F, 37.1094F, 35.4004F, -176.270F, -300.781F, 11.9629F, 19.5313F, -304.688F, -189.453F, -60.5469F, 95.4590F, -178.711F, -133.545F, 114.502F, 53.2227F, -62.2559F, -210.938F, 16.8457F, 89.3555F, -40.5273F, -118.408F, -167.969F, 46.6309F, -295.898F, -291.992F, -41.5039F, -41.2598F, -319.336F, -398.193F, 78.3691F, 114.746F, -346.436F, -303.467F, -15.6250F, 66.4063F, -332.275F, -60.5469F, 120.117F, 137.939F, -176.025F, -148.682F, 47.6074F, 118.408F, -139.893F, -32.4707F, 104.248F, 49.3164F, -41.7480F, -28.8086F, 48.5840F, 140.381F, 0.488281F, -7.56836F, 169.434F, 184.326F, -333.496F, -9.52148F, 134.766F, 135.986F, -119.385F, 66.1621F, 166.016F, 131.104F, 3.17383F, -110.596F, 208.740F, 232.910F, -32.4707F, -12.6953F, -19.7754F, 180.176F, -285.400F, 155.518F, 257.568F, 258.545F, -23.1934F, 165.039F, 307.373F, 263.916F, 119.385F, 74.4629F, -109.619F, 232.910F, -130.371F, 243.164F, -236.572F, 211.426F, -258.301F, 258.545F, -315.918F, 150.879F, -345.703F, 150.635F, -111.816F, 333.496F, -38.8184F, 444.580F, -188.965F, -128.906F, -3.41797F, 270.996F, -293.457F, -219.971F, -188.477F, 105.713F, -306.641F, -306.396F, -246.826F, -73.7305F, -146.973F, -142.822F, -185.303F, -395.020F, -185.547F, -378.174F, -205.078F, -468.994F, -199.219F, -131.592F, -431.885F, -545.654F, -55.4199F, -8.78906F, -496.582F, -447.021F, -514.404F, -274.902F, -603.271F, -443.359F, -358.887F, 61.5234F, -659.424F, -101.318F, -139.404F, -114.014F, 368.408F, 379.395F, 532.227F, 482.178F, 567.871F, 493.164F }; static const Float32 dico4_lsf_5[DICO4_SIZE_5 * 4] = { -453.369F, -410.400F, -453.369F, -428.467F, -501.953F, -280.762F, -520.996F, -403.809F, -395.264F, -268.311F, -416.016F, -276.123F, -328.369F, -392.578F, -331.787F, -399.902F, -326.660F, -315.674F, -323.486F, -308.838F, -406.250F, -402.588F, -363.037F, -207.764F, -328.613F, -447.266F, -344.971F, -534.180F, -312.988F, -166.260F, -435.791F, -402.588F, -235.840F, -264.160F, -288.818F, -409.180F, -257.324F, -261.963F, -278.809F, -282.715F, -294.678F, -181.641F, -311.035F, -243.408F, -228.027F, -337.646F, -226.318F, -345.703F, -246.582F, -318.604F, -191.162F, -233.154F, -256.104F, -219.727F, -242.432F, -199.463F, -179.932F, -200.928F, -237.305F, -290.283F, -180.176F, -267.090F, -180.176F, -281.738F, -191.406F, -195.557F, -197.754F, -191.895F, -217.773F, -126.953F, -244.141F, -199.707F, -157.227F, -235.596F, -140.869F, -215.332F, -132.080F, -169.434F, -163.818F, -223.877F, -145.264F, -156.738F, -157.715F, -150.146F, -233.398F, -151.611F, -225.830F, -125.732F, -177.490F, -117.920F, -198.975F, -118.408F, -205.078F, -141.113F, -107.422F, -174.072F, -141.113F, -79.3457F, -160.400F, -163.574F, -94.2383F, -139.160F, -107.666F, -162.598F, -125.488F, -192.139F, -95.7031F, -129.150F, -127.441F, -110.596F, -118.896F, -103.271F, -150.391F, -142.822F, -150.635F, -38.3301F, -161.621F, -65.4297F, -166.016F, -84.9609F, -78.6133F, -78.8574F, -154.297F, -108.398F, -74.2188F, -104.980F, -81.0547F, -111.816F, -67.6270F, -114.258F, -160.889F, -193.604F, -77.8809F, -155.273F, -55.4199F, -135.254F, -91.0645F, -84.7168F, -81.5430F, -51.2695F, -111.328F, -46.8750F, -129.395F, -59.0820F, -52.7344F, -48.3398F, -89.3555F, -90.3320F, -82.5195F, -39.3066F, -99.8535F, -182.617F, -26.1230F, -92.7734F, -71.7773F, -156.982F, -54.4434F, -162.354F, -57.1289F, -180.908F, -34.4238F, -121.094F, -31.7383F, -124.512F, -33.9355F, -79.8340F, -41.9922F, -74.4629F, -74.7070F, -141.602F, -40.0391F, -64.2090F, -63.9648F, -41.9922F, -16.3574F, -98.1445F, 7.56836F, -89.3555F, -2.44141F, -106.445F, -20.9961F, -128.662F, 17.3340F, -92.0410F, -5.37109F, -148.682F, -2.92969F, -165.527F, -16.3574F, -77.8809F, 15.3809F, -46.6309F, 8.54492F, -44.1895F, -9.52148F, -59.0820F, 30.7617F, -40.7715F, -34.1797F, -132.813F, 37.8418F, -72.5098F, 42.4805F, -72.5098F, 9.27734F, -1.95313F, 28.5645F, -92.7734F, 48.0957F, -110.352F, 58.5938F, -127.441F, 54.4434F, -25.1465F, 26.8555F, -45.6543F, 21.2402F, -37.8418F, 41.2598F, -11.4746F, 38.3301F, 6.34766F, -20.2637F, -24.4141F, 31.2500F, 19.5313F, 51.0254F, -15.1367F, 1.46484F, 1.70898F, 5.37109F, 1.22070F, 77.6367F, -4.88281F, 60.5469F, -10.9863F, -48.8281F, -15.3809F, 38.0859F, -16.8457F, 61.0352F, -44.6777F, 90.0879F, -30.7617F, -27.5879F, -18.5547F, -34.6680F, -29.7852F, -15.6250F, -62.0117F, -7.56836F, 8.54492F, -43.2129F, -17.3340F, -1.70898F, 41.7480F, 22.7051F, 6.59180F, 26.3672F, 51.7578F, -80.5664F, -51.0254F, -30.0293F, -17.0898F, -68.1152F, 23.1934F, -23.4375F, 4.88281F, -45.8984F, -14.8926F, -76.6602F, 21.2402F, -73.2422F, -19.0430F, -86.4258F, -32.7148F, 2.68555F, 29.7852F, -34.1797F, 29.7852F, -67.1387F, 37.1094F, -71.5332F, 34.1797F, -20.0195F, 33.6914F, -78.3691F, -27.0996F, -117.188F, -38.0859F, -87.6465F, 18.5547F, -62.0117F, -9.76563F, -155.029F, -23.4375F, -127.441F, 19.2871F, -123.779F, 1.95313F, -65.4297F, 73.9746F, -131.592F, 16.6016F, -108.887F, 14.8926F, -127.441F, 74.7070F, 27.0996F, 46.1426F, -106.201F, 29.7852F, -92.5293F, 40.5273F, -139.404F, -97.1680F, -154.297F, -18.0664F, -182.373F, -23.1934F, -111.084F, 47.3633F, -232.422F, 20.2637F, -194.824F, 46.8750F, -184.326F, 46.8750F, -190.674F, -39.5508F, -151.123F, 57.1289F, -161.865F, -72.5098F, -119.141F, -26.6113F, -235.352F, -32.2266F, -204.590F, -16.6016F, -205.811F, 14.1602F, -271.484F, -20.9961F, -196.533F, -72.9980F, -230.469F, -61.7676F, -189.941F, -12.2070F, -235.596F, -134.033F, -85.9375F, -23.9258F, -242.188F, -83.7402F, -272.705F, -76.9043F, -272.705F, -74.9512F, -281.982F, -91.3086F, -155.518F, -56.1523F, -284.668F, -10.4980F, -317.139F, -24.4141F, -225.830F, -95.9473F, -311.035F, -146.484F, -168.213F, -31.7383F, -361.084F, -76.1719F, -322.510F, -62.0117F, -357.422F, -107.910F, -315.430F, -149.658F, -307.861F, -122.803F, -366.455F, -89.8438F, -322.754F, 6.34766F, -349.609F, -16.1133F, -425.537F, -39.3066F, -401.367F, -114.014F, -429.688F, -133.789F, -340.088F, -138.672F, -379.883F, -212.646F, -364.990F, -252.441F, -338.623F, -139.404F, -468.018F, -128.906F, -435.303F, -30.0293F, -463.135F, -56.3965F, -501.465F, -78.8574F, -500.977F, -221.191F, -482.422F, -138.428F, -468.018F, -151.367F, -499.756F, -241.455F, -262.939F, -90.3320F, -495.850F, -171.875F, -574.951F, -182.861F, -668.945F, -265.869F, -466.064F, 38.8184F, -491.211F, 60.5469F, -152.832F, -30.0293F, -571.045F, -234.863F, -163.330F, -99.6094F, -336.670F, -286.621F, -110.352F, -88.8672F, -254.883F, -179.443F, -32.2266F, 44.6777F, -395.508F, -183.594F, -133.545F, -74.9512F, -189.697F, -307.861F, -23.9258F, 10.0098F, -214.844F, -266.357F, -62.7441F, 23.6816F, -391.113F, -447.510F, 7.56836F, -6.34766F, -157.227F, -136.963F, -43.9453F, -133.301F, -93.9941F, -267.334F, -100.098F, -195.801F, -101.074F, -201.904F, -111.572F, -236.816F, -119.629F, -270.752F, -52.4902F, -223.633F, -35.1563F, -228.760F, -120.361F, -309.814F, -126.221F, -367.920F, 44.1895F, 24.6582F, -81.0547F, -217.041F, -204.102F, -228.760F, -136.475F, -104.736F, -153.564F, -133.545F, -44.6777F, -82.2754F, -133.057F, -20.0195F, -61.0352F, -69.8242F, 1.22070F, -32.2266F, -84.9609F, -61.5234F, -71.5332F, -115.234F, -38.5742F, 24.4141F, -7.08008F, 48.0957F, -57.6172F, -103.516F, -210.205F, -52.0020F, -34.1797F, -1.70898F, -104.248F, -108.154F, 45.6543F, -23.6816F, -166.992F, -179.688F, -71.5332F, 62.9883F, -89.8438F, -37.1094F, -36.6211F, 95.7031F, -148.682F, 42.7246F, -34.6680F, 72.9980F, -33.6914F, 37.1094F, -29.0527F, 80.3223F, -118.652F, -12.6953F, 71.5332F, 48.3398F, -44.6777F, 28.5645F, 42.7246F, 80.8105F, -14.1602F, -66.8945F, 56.3965F, 73.2422F, -70.3125F, 80.5664F, -74.4629F, 90.8203F, -27.0996F, 99.8535F, -2.19727F, 103.271F, 20.2637F, 62.5000F, 16.3574F, 89.5996F, -4.63867F, 60.5469F, 22.2168F, 27.5879F, -8.54492F, 99.1211F, -46.6309F, 37.5977F, 58.1055F, 72.2656F, 1.22070F, 48.0957F, 34.4238F, 53.9551F, 76.4160F, 48.3398F, 51.5137F, 102.783F, 59.5703F, 81.5430F, 21.4844F, 104.004F, -59.3262F, 110.840F, 49.3164F, 134.766F, -1.22070F, 98.3887F, 71.0449F, 45.1660F, 53.4668F, 73.4863F, 61.2793F, 33.6914F, 31.2500F, 16.8457F, 48.0957F, 70.3125F, -34.1797F, -14.8926F, 45.8984F, 88.1348F, 48.0957F, 145.996F, 107.910F, 66.6504F, 70.8008F, 34.9121F, 115.234F, 117.676F, 38.3301F, 90.3320F, 101.318F, 78.3691F, 90.8203F, 93.9941F, 98.1445F, 134.766F, 37.8418F, 5.85938F, 134.277F, 64.2090F, -2.68555F, 5.12695F, 87.8906F, 55.4199F, 35.8887F, -62.0117F, 103.516F, 23.6816F, 89.3555F, -3.17383F, 91.5527F, 34.4238F, 109.619F, 56.6406F, 96.6797F, 123.779F, 115.723F, 66.4063F, 171.143F, 79.1016F, 88.3789F, -11.4746F, 143.311F, 36.1328F, 132.568F, 16.8457F, 97.6563F, -12.4512F, 136.963F, 14.4043F, 53.7109F, -2.44141F, 85.9375F, 35.8887F, 50.2930F, 51.5137F, 159.424F, 45.1660F, 137.451F, 72.5098F, 137.939F, 69.3359F, 145.020F, 29.5410F, 187.012F, 46.8750F, 97.1680F, 28.8086F, 156.738F, 105.957F, 56.8848F, 64.4531F, 117.432F, 114.014F, 31.4941F, -40.2832F, 170.654F, 58.3496F, 21.9727F, 6.34766F, 83.4961F, 115.723F, -13.4277F, 6.59180F, 94.7266F, 22.9492F, -41.9922F, 0.000000F, 177.002F, 92.5293F, -14.6484F, 82.2754F, 90.3320F, 113.525F, 23.1934F, 77.8809F, 196.777F, 145.264F, 19.0430F, 63.4766F, 121.338F, 207.764F, 51.2695F, 136.719F, 111.816F, 140.137F, -113.281F, 49.3164F, 121.338F, 152.588F, -49.3164F, 37.1094F, 11.7188F, 173.828F, -4.88281F, 138.184F, 24.4141F, 174.561F, 111.084F, 114.258F, 100.342F, 147.705F, 77.8809F, 157.715F, 47.6074F, 150.146F, 97.9004F, 131.348F, 166.016F, 180.420F, 49.0723F, 162.842F, 105.957F, 232.910F, 110.840F, 103.760F, 157.715F, 119.873F, 147.949F, 166.260F, 101.563F, 124.023F, 121.338F, 200.684F, 104.004F, 198.975F, 161.133F, 157.959F, 153.320F, 174.805F, 170.166F, 113.770F, 150.879F, 111.572F, 167.236F, 112.305F, 89.1113F, 75.4395F, 176.025F, 138.428F, 204.102F, 146.729F, 148.682F, 73.2422F, 201.416F, 112.061F, 230.225F, 167.725F, 166.260F, 130.127F, 223.389F, 145.996F, 144.287F, 59.3262F, 213.867F, 110.107F, 213.379F, 102.539F, 191.895F, 77.3926F, 178.711F, 53.7109F, 225.098F, 77.3926F, 270.508F, 89.5996F, 129.639F, 113.770F, 250.977F, 158.447F, 257.080F, 150.146F, 252.441F, 135.010F, 202.393F, 146.973F, 249.268F, 195.068F, 226.318F, 196.045F, 214.355F, 186.279F, 195.068F, 121.094F, 335.205F, 188.721F, 142.822F, 187.988F, 196.045F, 227.051F, 268.311F, 193.604F, 298.340F, 210.449F, 295.166F, 218.506F, 250.244F, 177.490F, 188.477F, 206.299F, 286.133F, 272.217F, 211.670F, 249.268F, 202.637F, 247.314F, 205.322F, 222.168F, 123.535F, 171.631F, 302.490F, 262.939F, 151.367F, 199.951F, 291.992F, 264.404F, 281.982F, 263.916F, 278.809F, 221.436F, 377.686F, 273.682F, 319.580F, 158.203F, 327.881F, 149.414F, 362.305F, 241.211F, 361.084F, 228.760F, 240.479F, 324.219F, 233.154F, 327.393F, 104.736F, 222.168F, 205.322F, 326.660F, 137.695F, 287.842F, 100.586F, 282.227F, 348.389F, 322.266F, 350.098F, 324.707F, 156.250F, 185.547F, 421.387F, 344.238F, 46.3867F, 135.498F, 261.963F, 245.361F, 104.004F, 62.7441F, 204.834F, 239.258F, 57.3730F, 56.3965F, 371.094F, 284.912F, 26.6113F, 71.5332F, 247.559F, 383.057F, 74.4629F, 34.6680F, 280.273F, 131.592F, -71.0449F, -26.3672F, 296.143F, 237.305F, 5.37109F, -52.7344F, 162.842F, 202.148F, -117.676F, 106.934F, 110.596F, 349.365F, -141.846F, -103.027F, 192.627F, 94.4824F, -87.4023F, -110.840F, 42.4805F, 190.430F, -8.78906F, -90.8203F, 95.2148F, -32.7148F, -153.564F, 39.0625F, -74.7070F, 183.350F, -307.129F, -80.8105F, 43.2129F, 127.441F, -60.5469F, 140.137F, -61.2793F, 156.006F, -129.639F, 99.3652F, -145.508F, 96.1914F, -102.295F, 192.627F, -150.635F, 195.557F, -240.723F, 97.4121F, -209.229F, 177.490F, -1.70898F, 126.465F, -171.631F, 75.6836F, -279.053F, -5.85938F, -244.629F, 70.0684F, -234.375F, 88.6230F, -317.139F, 76.1719F, -374.512F, 59.8145F, -380.127F, 74.4629F, 6.83594F, 37.3535F, -209.717F, -42.7246F, -8.05664F, 81.0547F, -341.309F, -37.5977F, 51.7578F, 100.098F, -144.775F, -48.0957F, -266.602F, -171.875F, -220.703F, -15.8691F, 68.8477F, 89.5996F, -224.121F, -167.480F, 84.2285F, 22.7051F, -62.9883F, -87.1582F, 169.922F, 157.227F, -169.189F, -6.83594F, 109.375F, 120.361F, -66.6504F, 47.1191F, 128.662F, 133.301F, -59.3262F, -125.244F, 93.7500F, -33.2031F, 66.6504F, -86.1816F, 125.000F, -34.6680F, 131.104F, -48.3398F, 229.736F, 183.105F, 20.2637F, 60.5469F, 141.113F, 210.205F, -13.6719F, 144.531F, 205.566F, 10.7422F, 217.773F, 5.85938F, 8.05664F, 217.285F, -3.90625F, 239.746F, 202.881F, 341.309F, 374.756F, 463.379F, 418.945F, 335.938F, 475.586F, 357.666F }; static const Float32 dico5_lsf_5[DICO5_SIZE_5 * 4] = { -244.629F, -226.807F, -267.578F, -293.701F, -156.494F, -227.295F, -147.461F, -234.619F, -190.186F, -164.307F, -203.857F, -192.383F, -101.563F, -162.109F, -111.816F, -187.012F, -159.180F, -127.197F, -161.621F, -120.850F, -249.756F, -124.268F, -249.756F, -104.492F, -108.398F, -134.766F, -89.8438F, -109.619F, -116.943F, -51.5137F, -257.324F, -220.459F, -77.1484F, -60.7910F, -138.916F, -144.287F, -138.916F, -67.1387F, -132.080F, -46.6309F, -174.805F, -45.8984F, -205.566F, -64.4531F, -81.2988F, -60.5469F, -77.6367F, -55.6641F, -67.1387F, 0.244141F, -138.428F, -55.6641F, -28.0762F, -53.9551F, -58.1055F, -91.3086F, -48.0957F, -123.779F, -54.1992F, -141.357F, -62.9883F, -105.469F, -14.8926F, -59.5703F, -84.2285F, 0.488281F, -82.5195F, 9.52148F, -52.4902F, -41.2598F, -14.1602F, 0.000000F, -13.6719F, -1.46484F, -49.5605F, -31.9824F, 0.244141F, -45.4102F, -1.22070F, -51.5137F, 1.46484F, -92.7734F, 2.68555F, -102.051F, -28.3203F, 31.9824F, -32.7148F, 27.5879F, 21.7285F, -0.976563F, 17.3340F, -0.488281F, -4.63867F, -46.8750F, 63.9648F, 5.85938F, 46.1426F, 36.8652F, -32.4707F, -26.6113F, 45.4102F, -37.3535F, 40.5273F, -53.4668F, 9.03320F, 33.9355F, 47.1191F, 41.7480F, 82.2754F, 30.2734F, 38.5742F, -14.8926F, 34.4238F, 55.1758F, -3.17383F, 46.3867F, 56.3965F, 8.30078F, 86.4258F, 26.6113F, 77.1484F, 49.0723F, 59.5703F, 40.0391F, 80.5664F, -20.7520F, 95.2148F, -20.5078F, 62.0117F, 79.8340F, 62.7441F, 81.7871F, 119.873F, 35.8887F, 116.211F, 25.6348F, 13.1836F, 18.7988F, 106.689F, 90.3320F, 102.783F, 76.6602F, 109.619F, 83.4961F, 80.3223F, 30.7617F, 164.307F, 71.2891F, 139.404F, 94.7266F, 59.3262F, 47.1191F, 159.424F, 78.1250F, 151.611F, 68.3594F, 47.3633F, 92.7734F, 126.221F, 141.846F, 10.9863F, 78.8574F, 27.0996F, 103.027F, 119.385F, 96.4355F, 179.199F, 130.371F, 151.855F, 133.301F, 118.652F, 122.559F, 77.6367F, 139.648F, 46.1426F, 134.277F, 93.9941F, 103.027F, -38.3301F, 37.3535F, -30.5176F, 93.2617F, -48.0957F, 94.2383F, -64.2090F, 81.5430F, 55.6641F, 170.166F, -45.8984F, 0.244141F, 12.4512F, 72.5098F, -123.779F, 52.0020F, -91.7969F, 96.9238F, -5.85938F, 62.2559F, -133.545F, 21.7285F, -122.559F, -22.9492F, 94.4824F, 43.7012F, -151.367F, 16.6016F, -166.992F, 27.3438F, -156.738F, -85.4492F, -63.4766F, 41.9922F, -106.934F, -79.1016F, 64.4531F, 158.203F, -235.352F, -0.976563F, -273.682F, 1.70898F, -32.7148F, 32.7148F, -276.611F, -74.7070F, 34.9121F, 23.4375F, -102.539F, -121.338F, -298.096F, -85.4492F, -372.803F, -167.236F, -39.3066F, 17.5781F, 213.135F, 168.701F, 178.711F, 69.0918F, 224.854F, 86.1816F, 81.5430F, 115.967F, 267.334F, 200.439F, 210.938F, 127.930F, 205.811F, 121.338F, 174.316F, 173.584F, 192.383F, 183.105F, 262.695F, 174.316F, 293.945F, 183.838F, }; /* Table for MR475 gain */ #define MR475_VQ_SIZE 256 /* The table contains the following data: * * g_pitch(0) // for sub- * g_fac(0) // frame 0 and 2 * g_pitch(1) // for sub- * g_fac(1) // frame 1 and 3 * */ static const Float32 table_gain_MR475[MR475_VQ_SIZE * 4] = { 0.049561F, 0.031250F, 0.033081F, 0.034180F, 0.175354F, 0.277100F, 0.138306F, 0.830566F, 0.126160F, 0.137451F, 0.773743F, 0.157959F, 0.252197F, 0.438965F, 0.341858F, 1.290283F, 0.469299F, 0.091309F, 0.227966F, 0.107666F, 0.666016F, 0.644043F, 0.720642F, 0.608887F, 1.250610F, 0.194580F, 0.318481F, 0.164795F, 0.410400F, 2.039551F, 0.322388F, 0.414063F, 0.090820F, 0.104492F, 0.359009F, 0.110352F, 0.325439F, 0.994141F, 0.218689F, 0.309570F, 0.150696F, 0.219971F, 0.970093F, 0.245361F, 0.914429F, 0.798584F, 0.630554F, 1.186035F, 0.221863F, 0.493408F, 0.158447F, 0.203857F, 0.754395F, 1.194336F, 0.744995F, 0.416016F, 0.819824F, 0.391602F, 0.556519F, 0.571533F, 0.242188F, 0.375488F, 0.334412F, 2.425781F, 0.231628F, 0.101807F, 0.082947F, 0.101074F, 0.222168F, 0.383057F, 0.487976F, 0.864502F, 0.696106F, 0.157471F, 0.521973F, 0.155029F, 0.247559F, 0.336182F, 1.013672F, 1.495117F, 0.697021F, 0.170898F, 0.122498F, 0.148193F, 0.757751F, 0.385254F, 0.678650F, 1.136230F, 0.834961F, 0.416992F, 0.731812F, 0.300049F, 0.488037F, 1.781494F, 0.807556F, 1.395264F, 0.148193F, 0.282959F, 0.126526F, 0.473877F, 0.379517F, 1.494385F, 0.216431F, 0.440430F, 0.544739F, 0.439941F, 0.529724F, 0.385742F, 0.850525F, 0.873047F, 0.812561F, 1.522705F, 0.374878F, 0.275879F, 0.365845F, 0.423340F, 0.863098F, 1.138184F, 0.687927F, 0.810791F, 0.746216F, 0.378662F, 0.850281F, 0.736084F, 0.310120F, 2.554688F, 0.576416F, 1.637207F, 0.103088F, 0.166748F, 0.087646F, 0.318848F, 0.440186F, 0.960205F, 0.249146F, 0.662354F, 0.475647F, 0.171875F, 0.919800F, 0.195801F, 0.384460F, 1.272461F, 0.264709F, 1.307861F, 0.407471F, 0.132080F, 0.369995F, 0.152832F, 0.833191F, 0.903320F, 0.701782F, 0.587891F, 0.986084F, 0.174805F, 0.743225F, 0.183350F, 0.492249F, 2.804932F, 0.385376F, 0.550781F, 0.272583F, 0.121094F, 0.445129F, 0.127686F, 0.623352F, 0.935791F, 0.512329F, 0.741455F, 0.512878F, 0.235840F, 0.868408F, 0.458984F, 0.531189F, 1.320557F, 1.000671F, 1.187256F, 0.452881F, 0.483154F, 0.371643F, 0.300293F, 0.571960F, 1.073730F, 0.888550F, 0.821045F, 0.827576F, 0.701416F, 0.803406F, 0.357666F, 0.337769F, 0.409668F, 0.801880F, 3.606201F, 0.447876F, 0.146484F, 0.080444F, 0.133789F, 0.259521F, 0.864014F, 0.613037F, 0.577148F, 0.646179F, 0.151855F, 0.798828F, 0.163330F, 0.862183F, 0.860840F, 0.307556F, 2.388672F, 0.936157F, 0.151123F, 0.190125F, 0.144043F, 1.003540F, 0.735596F, 0.948608F, 1.017578F, 0.948303F, 0.393311F, 0.940247F, 0.299805F, 0.977966F, 2.270264F, 0.459839F, 1.214844F, 0.121460F, 0.296143F, 0.698669F, 0.282471F, 0.763672F, 1.347412F, 0.578308F, 0.645508F, 0.470947F, 0.496582F, 0.810547F, 0.546631F, 0.977234F, 1.243408F, 0.492310F, 1.650635F, 0.615417F, 0.344971F, 0.305298F, 0.572998F, 0.764343F, 1.458740F, 0.923218F, 0.707764F, 1.114746F, 0.558838F, 0.966003F, 0.616943F, 0.992737F, 2.503418F, 0.894226F, 2.763428F, 0.109680F, 0.082275F, 0.190125F, 0.096924F, 0.214233F, 0.714844F, 0.280273F, 0.651855F, 0.458923F, 0.153320F, 0.696716F, 0.160156F, 0.362915F, 0.594482F, 0.399414F, 1.798584F, 0.502808F, 0.202393F, 0.244141F, 0.210693F, 0.612305F, 0.608398F, 0.980042F, 0.866943F, 1.111084F, 0.257324F, 0.372498F, 0.354980F, 0.359131F, 1.928711F, 1.144531F, 0.846680F, 0.113770F, 0.132813F, 0.561401F, 0.166748F, 0.709412F, 1.015625F, 0.280396F, 0.401367F, 0.192749F, 0.282471F, 0.973694F, 0.625000F, 0.753723F, 0.911377F, 1.063232F, 1.284180F, 0.372681F, 0.489258F, 0.178040F, 0.425293F, 1.005066F, 1.283447F, 1.024597F, 0.410156F, 1.050110F, 0.429443F, 0.291321F, 0.788818F, 0.450806F, 1.473389F, 0.875366F, 2.444336F, 0.246277F, 0.107910F, 0.255981F, 0.111816F, 0.562378F, 0.547363F, 0.453308F, 1.029541F, 0.784912F, 0.195557F, 0.682739F, 0.201416F, 0.771973F, 0.508789F, 0.790771F, 1.600098F, 0.580139F, 0.243164F, 0.404602F, 0.240479F, 0.643127F, 0.610840F, 0.933167F, 1.222168F, 0.769165F, 0.501709F, 0.945068F, 0.403564F, 0.988403F, 1.689697F, 0.868591F, 1.413574F, 0.160278F, 0.202148F, 0.342712F, 0.411621F, 0.833923F, 1.410645F, 0.223877F, 0.379395F, 0.690491F, 0.642822F, 0.596313F, 0.356201F, 0.854675F, 1.155518F, 0.970276F, 1.535889F, 0.383179F, 0.456543F, 0.482788F, 0.557861F, 1.036255F, 1.115967F, 1.011719F, 0.939697F, 0.930664F, 0.564209F, 0.977966F, 0.791992F, 0.882507F, 4.347656F, 0.723083F, 0.674561F, 0.120911F, 0.343506F, 0.085449F, 0.213867F, 0.264587F, 0.865967F, 0.268005F, 1.027832F, 0.329895F, 0.166016F, 1.065735F, 0.190674F, 0.396790F, 1.249512F, 0.493835F, 1.874268F, 0.448914F, 0.193848F, 0.508606F, 0.288574F, 0.918030F, 0.771484F, 0.911133F, 0.741943F, 1.246399F, 0.214844F, 0.887756F, 0.208008F, 0.752991F, 3.590820F, 0.421387F, 0.468750F, 0.257874F, 0.227783F, 0.501587F, 0.265381F, 0.650574F, 0.997070F, 0.615356F, 1.106689F, 0.166931F, 0.205078F, 1.260803F, 0.263916F, 1.019958F, 1.456543F, 0.968811F, 1.117676F, 0.663513F, 0.628418F, 0.230286F, 0.284668F, 0.886169F, 0.987305F, 1.263367F, 0.641357F, 0.928894F, 0.667480F, 0.932251F, 0.533691F, 0.381897F, 0.787598F, 0.801086F, 4.755859F, 0.439209F, 0.227051F, 0.150269F, 0.395020F, 0.275574F, 0.754883F, 0.845459F, 1.044189F, 0.638428F, 0.203369F, 1.058289F, 0.197754F, 1.030945F, 0.558838F, 0.948853F, 2.006104F, 0.830261F, 0.411133F, 0.195129F, 0.447754F, 0.973389F, 0.688477F, 0.965088F, 1.300537F, 1.037964F, 0.595215F, 1.024658F, 0.323730F, 0.956482F, 1.991211F, 0.715698F, 2.088867F, 0.229614F, 0.501221F, 0.583679F, 0.321533F, 0.827698F, 1.657715F, 0.746277F, 0.472656F, 0.499268F, 0.866699F, 0.810974F, 0.434082F, 0.994812F, 1.611084F, 0.994324F, 1.894043F, 0.520081F, 0.622803F, 0.440979F, 0.645752F, 1.115051F, 1.828369F, 1.030579F, 0.548828F, 1.091431F, 0.704102F, 1.053772F, 0.812500F, 0.574768F, 4.922363F, 0.673950F, 2.031250F, 0.078491F, 0.151367F, 0.087341F, 0.142334F, 0.365784F, 0.558838F, 0.242798F, 0.885254F, 0.313965F, 0.183594F, 0.818420F, 0.202637F, 0.338928F, 0.698242F, 0.718018F, 1.442383F, 0.655334F, 0.136719F, 0.332397F, 0.137695F, 0.813049F, 0.734375F, 0.729126F, 0.899170F, 1.213806F, 0.194824F, 0.599670F, 0.177734F, 0.833923F, 2.135742F, 0.451111F, 0.745361F, 0.153503F, 0.189941F, 0.369263F, 0.203369F, 0.394836F, 1.238770F, 0.506897F, 0.601318F, 0.374817F, 0.455322F, 0.934326F, 0.308105F, 0.879395F, 1.110107F, 0.833923F, 1.102295F, 0.191467F, 0.728271F, 0.151306F, 0.307373F, 0.920898F, 1.134521F, 0.938843F, 0.636475F, 0.884521F, 0.583984F, 0.760620F, 0.619385F, 0.460144F, 0.719971F, 0.787903F, 2.944336F, 0.333740F, 0.166992F, 0.191711F, 0.176270F, 0.310120F, 0.311035F, 0.777100F, 1.025391F, 0.933960F, 0.166260F, 0.477234F, 0.144531F, 0.398804F, 0.493408F, 1.005737F, 2.133057F, 0.815674F, 0.215332F, 0.329407F, 0.219482F, 0.894531F, 0.531738F, 0.899719F, 1.031982F, 0.870972F, 0.316895F, 0.850159F, 0.495361F, 0.944641F, 1.826660F, 0.965271F, 1.116211F, 0.153870F, 0.491455F, 0.308960F, 0.440430F, 0.314880F, 1.606934F, 0.435181F, 0.878174F, 0.666504F, 0.393311F, 0.715881F, 0.416992F, 1.031677F, 0.843506F, 0.992920F, 1.621094F, 0.567993F, 0.245850F, 0.571838F, 0.514160F, 1.170776F, 1.229736F, 0.759338F, 1.042236F, 0.971619F, 0.325195F, 0.937317F, 0.857422F, 0.726196F, 3.452393F, 0.982727F, 1.673340F, 0.122681F, 0.179932F, 0.230652F, 0.210205F, 0.699097F, 0.703125F, 0.217529F, 0.864258F, 0.552795F, 0.302979F, 0.756287F, 0.218750F, 0.521606F, 1.130127F, 0.705627F, 1.410156F, 0.496155F, 0.143799F, 0.501587F, 0.143555F, 1.143066F, 0.916748F, 0.791809F, 0.768799F, 0.960022F, 0.185059F, 1.015259F, 0.184082F, 0.929077F, 2.719238F, 0.968689F, 0.539063F, 0.285217F, 0.148926F, 0.623657F, 0.165527F, 0.931213F, 1.012207F, 0.349670F, 0.812256F, 0.511292F, 0.407715F, 1.212280F, 0.566650F, 0.942993F, 1.345459F, 0.857788F, 1.338135F, 0.349609F, 0.705078F, 0.462646F, 0.328613F, 0.877930F, 1.300049F, 0.990967F, 0.964355F, 0.922729F, 0.914063F, 0.934204F, 0.350342F, 0.890930F, 0.993652F, 0.750793F, 3.832031F, 0.464905F, 0.414795F, 0.132446F, 0.215820F, 0.272156F, 1.114990F, 1.104370F, 0.807129F, 0.777710F, 0.198975F, 0.911011F, 0.221436F, 0.916504F, 1.045166F, 0.947144F, 2.042969F, 1.098267F, 0.265381F, 0.143921F, 0.211182F, 0.993713F, 0.924561F, 0.956970F, 1.122070F, 0.998291F, 0.374512F, 1.012207F, 0.539551F, 1.027405F, 2.367432F, 0.972229F, 1.101807F, 0.200012F, 0.264893F, 0.588562F, 0.533936F, 0.730774F, 1.481445F, 0.561462F, 1.089355F, 0.546570F, 0.397705F, 0.627991F, 0.747559F, 1.005920F, 1.258545F, 0.943970F, 1.725098F, 0.834839F, 0.620850F, 0.321838F, 0.555908F, 1.022095F, 1.516846F, 1.016541F, 0.832031F, 1.239258F, 0.821045F, 1.140625F, 0.484619F, 0.864990F, 3.141357F, 0.924927F, 3.833740F, 0.273010F, 0.249023F, 0.102600F, 0.216309F, 0.263123F, 1.050049F, 0.546387F, 0.892822F, 0.359680F, 0.280029F, 0.710876F, 0.354492F, 0.969604F, 0.543701F, 0.279663F, 1.622070F, 0.422913F, 0.294189F, 0.379639F, 0.195068F, 0.757751F, 0.832275F, 0.974609F, 0.946533F, 1.212097F, 0.514893F, 0.591370F, 0.522705F, 0.899780F, 2.155762F, 0.883789F, 0.634521F, 0.110901F, 0.302246F, 0.474304F, 0.198486F, 1.164490F, 1.076660F, 0.338989F, 0.503906F, 0.225037F, 0.694336F, 1.064148F, 0.550781F, 1.019104F, 1.095215F, 0.988708F, 1.315430F, 0.489990F, 0.674561F, 0.207825F, 0.517334F, 1.063599F, 1.337158F, 0.836060F, 0.680176F, 1.213318F, 0.664063F, 0.555298F, 0.947266F, 1.109131F, 1.179932F, 1.058105F, 2.980225F, 0.312256F, 0.243164F, 0.301208F, 0.241211F, 0.603516F, 0.752197F, 0.367065F, 1.311279F, 0.969299F, 0.406982F, 0.513000F, 0.288818F, 0.920837F, 0.577637F, 1.207092F, 1.709473F, 0.730164F, 0.381348F, 0.444275F, 0.275391F, 1.028992F, 0.374023F, 0.962036F, 1.313721F, 0.897705F, 0.504150F, 1.227112F, 0.526123F, 1.047241F, 2.012939F, 1.093201F, 1.542480F, 0.333679F, 0.367188F, 0.250244F, 0.628418F, 1.063293F, 1.662598F, 0.346252F, 0.705078F, 1.015381F, 0.825684F, 0.547791F, 0.447021F, 1.230408F, 1.156494F, 1.193237F, 1.780762F, 0.406372F, 0.678955F, 0.700195F, 0.810791F, 1.183899F, 1.233887F, 1.152222F, 1.152832F, 1.003357F, 0.579346F, 1.246948F, 1.070801F, 0.692932F, 6.476074F, 0.707581F, 0.749023F, 0.174927F, 0.382324F, 0.311768F, 0.261230F, 0.586792F, 1.199951F, 0.301453F, 0.863281F, 0.460266F, 0.214355F, 1.264465F, 0.207764F, 0.423462F, 1.072998F, 1.025330F, 1.887939F, 0.618713F, 0.248779F, 0.600891F, 0.235352F, 0.945679F, 0.965576F, 0.943542F, 0.837402F, 1.151306F, 0.239746F, 1.228027F, 0.235107F, 1.030029F, 3.146240F, 0.874878F, 1.025391F, 0.402771F, 0.297852F, 0.562866F, 0.198730F, 1.034058F, 1.253418F, 0.345520F, 1.195801F, 0.334961F, 0.438965F, 1.236450F, 0.967285F, 1.037903F, 1.508301F, 1.094299F, 1.447510F, 0.571594F, 0.834961F, 0.456177F, 0.481201F, 1.192444F, 1.263916F, 1.159851F, 0.733887F, 1.004272F, 0.924805F, 0.980835F, 0.577881F, 0.528809F, 0.669678F, 0.576477F, 6.435059F, 0.662598F, 0.314209F, 0.216980F, 0.246338F, 0.342163F, 0.884277F, 1.187317F, 1.345703F, 0.760071F, 0.194580F, 1.259399F, 0.222412F, 0.941589F, 0.748535F, 1.039856F, 2.508545F, 1.152527F, 0.642822F, 0.238831F, 0.309570F, 1.191345F, 0.822998F, 1.101807F, 1.276855F, 1.177429F, 0.409668F, 1.190674F, 0.774414F, 1.103027F, 2.625488F, 1.014709F, 1.671143F, 0.191284F, 0.561035F, 0.663391F, 0.594971F, 0.950928F, 1.687744F, 0.768860F, 0.825439F, 0.678467F, 0.804932F, 1.023071F, 0.591797F, 1.150696F, 1.639404F, 1.048035F, 2.413818F, 0.777771F, 0.635986F, 0.545471F, 0.766602F, 1.161682F, 1.895508F, 1.119812F, 0.947266F, 1.249695F, 0.898926F, 1.196411F, 0.825195F, 0.796143F, 4.729736F, 0.642456F, 5.645508F, }; /* * g_pitch , * g_fac , (g_code = g_code0*g_fac), */ /* table used in 'high' rates: MR67 MR74 MR102 */ #define VQ_SIZE_HIGHRATES 128 static const Float32 table_highrates[VQ_SIZE_HIGHRATES * 2] = { /*g_pit, g_fac, */ 0.0352173F, 0.161621F, 0.0491943F, 0.448242F, 0.189758F, 0.256836F, 0.255188F, 0.338623F, 0.144836F, 0.347900F, 0.198242F, 0.484619F, 0.111511F, 0.566406F, 0.0574341F, 0.809082F, 0.143494F, 0.726807F, 0.220703F, 0.590820F, 0.210632F, 0.755859F, 0.180359F, 1.05005F, 0.112793F, 1.09863F, 0.237061F, 1.32227F, 0.0724487F, 1.76025F, 0.188171F, 2.19727F, 0.450684F, 0.215576F, 0.363892F, 0.367676F, 0.314636F, 0.520996F, 0.484863F, 0.490479F, 0.397156F, 0.549316F, 0.468140F, 0.671875F, 0.363281F, 0.736328F, 0.298950F, 0.918945F, 0.426575F, 0.875977F, 0.498901F, 0.971191F, 0.370117F, 1.07520F, 0.470520F, 1.24194F, 0.337097F, 1.46997F, 0.474182F, 1.73975F, 0.369873F, 1.93799F, 0.341431F, 2.80444F, 0.645813F, 0.331055F, 0.552307F, 0.389893F, 0.597778F, 0.496826F, 0.546021F, 0.589600F, 0.628418F, 0.630859F, 0.574158F, 0.667480F, 0.531006F, 0.785645F, 0.595520F, 0.828857F, 0.621155F, 0.950195F, 0.559692F, 1.10547F, 0.619629F, 1.22168F, 0.556274F, 1.40015F, 0.640869F, 1.52979F, 0.617065F, 1.86304F, 0.539795F, 2.13062F, 0.546631F, 3.05078F, 0.788818F, 0.238281F, 0.697937F, 0.428467F, 0.740845F, 0.568359F, 0.695068F, 0.578125F, 0.653076F, 0.748047F, 0.752686F, 0.698486F, 0.715454F, 0.812256F, 0.687866F, 0.903320F, 0.662903F, 1.07739F, 0.737427F, 1.10669F, 0.688660F, 1.27075F, 0.729980F, 1.53931F, 0.681580F, 1.83936F, 0.740234F, 2.03345F, 0.669495F, 2.63110F, 0.628662F, 4.24219F, 0.848328F, 0.410400F, 0.767822F, 0.499268F, 0.809631F, 0.595459F, 0.856506F, 0.729736F, 0.821045F, 0.756348F, 0.756592F, 0.893066F, 0.824585F, 0.922852F, 0.786133F, 1.04297F, 0.825989F, 1.18677F, 0.773132F, 1.33228F, 0.845581F, 1.49072F, 0.795349F, 1.58276F, 0.827454F, 1.88501F, 0.790833F, 2.27319F, 0.837036F, 2.82007F, 0.768494F, 3.71240F, 0.922424F, 0.375977F, 0.919922F, 0.569580F, 0.886658F, 0.613037F, 0.896729F, 0.781006F, 0.938843F, 0.869141F, 0.862610F, 0.966797F, 0.921753F, 1.03418F, 0.874756F, 1.17773F, 0.906128F, 1.33081F, 0.934204F, 1.48511F, 0.874573F, 1.68164F, 0.919189F, 1.87720F, 0.879272F, 2.30127F, 0.939148F, 2.37817F, 0.904785F, 3.48413F, 0.830078F, 6.08862F, 1.00073F, 0.480713F, 1.02643F, 0.691406F, 0.959045F, 0.694092F, 0.982910F, 0.814453F, 1.00000F, 0.967529F, 1.03394F, 1.11792F, 0.958923F, 1.12280F, 0.990112F, 1.33008F, 1.02734F, 1.55811F, 0.960999F, 1.74341F, 0.996460F, 1.82349F, 1.01385F, 2.10547F, 1.03931F, 2.54346F, 0.970764F, 2.88501F, 1.03015F, 3.58643F, 1.00800F, 5.09521F, 1.10730F, 0.508545F, 1.18414F, 0.775879F, 1.06860F, 0.836426F, 1.22400F, 0.983154F, 1.10284F, 1.03735F, 1.15674F, 1.23682F, 1.08099F, 1.31885F, 1.21063F, 1.51172F, 1.09558F, 1.71240F, 1.30115F, 1.92310F, 1.09314F, 2.26782F, 1.16846F, 2.26807F, 1.25226F, 2.77856F, 1.10321F, 3.53638F, 1.22064F, 4.36572F, 1.15002F, 7.99902F }; /* table used in 'low' rates: MR475, MR515, MR59 */ #define VQ_SIZE_LOWRATES 64 static const Float32 table_lowrates[VQ_SIZE_LOWRATES * 2] = { /*g_pit, g_fac */ 0.659973F, 7.01978F, 1.25000F, 0.679932F, 1.14996F, 1.60986F, 0.379944F, 1.80981F, 1.04999F, 2.54980F, 1.31995F, 0.309814F, 1.28998F, 1.07983F, 0.689941F, 0.379883F, 1.15997F, 3.12988F, 1.06000F, 0.609863F, 1.08997F, 1.17993F, 0.609985F, 0.609863F, 1.06995F, 1.91992F, 0.869995F, 0.459961F, 0.969971F, 0.769775F, 0.409973F, 0.439941F, 1.10999F, 4.92993F, 1.09998F, 0.739990F, 1.01996F, 1.42993F, 0.539978F, 0.979980F, 0.969971F, 2.18994F, 1.09998F, 0.339844F, 1.01996F, 1.00000F, 0.500000F, 0.159912F, 0.929993F, 3.39990F, 0.869995F, 0.759766F, 0.859985F, 1.13989F, 0.329956F, 0.659912F, 0.819946F, 1.59985F, 0.759949F, 0.219971F, 0.759949F, 0.649902F, 0.229980F, 0.159912F, 0.899963F, 5.73999F, 1.16998F, 0.599854F, 1.22998F, 1.23999F, 0.419983F, 1.00000F, 1.25000F, 2.08984F, 1.19995F, 0.179932F, 1.15997F, 1.03979F, 0.479980F, 0.509766F, 0.699951F, 3.00000F, 0.969971F, 0.359863F, 0.959961F, 1.12988F, 0.559998F, 0.349854F, 0.979980F, 1.70996F, 0.904968F, 0.179932F, 0.919983F, 0.549805F, 0.309998F, 0.299805F, 0.809998F, 4.22998F, 1.00995F, 0.569824F, 0.919983F, 1.41992F, 0.239990F, 0.899902F, 0.869995F, 2.09985F, 1.02997F, 0.189941F, 0.919983F, 0.929932F, 0.369995F, 0.149902F, 0.569946F, 2.25977F, 0.809998F, 0.429932F, 0.809998F, 0.859863F, 0.149963F, 0.479980F, 0.699951F, 1.34985F, 0.639954F, 0.179932F, 0.709961F, 0.779785F, 0.0899658F, 0.189941F }; #define DTX_VQ_SIZE 47 static const Word32 qua_gain_code_MR122[NB_QUA_CODE+VQ_SIZE_HIGHRATES+VQ_SIZE_LOWRATES+(MR475_VQ_SIZE*2)+DTX_VQ_SIZE+1] = { - 3776, - 3394, - 3005, - 2615, - 2345, - 2138, - 1932, - 1726, - 1518, - 1314, - 1106, - 900, - 694, - 487, - 281, - 75, 133, 339, 545, 752, 958, 1165, 1371, 1577, 1784, 1991, 2197, 2404, 2673, 3060, 3448, 3836, /* high_rates */ - 2692, - 1185, - 2008, - 1600, - 1560, - 1070, - 840, - 313, - 471, - 777, - 414, 72, 139, 413, 835, 1163, - 2267, - 1478, - 963, - 1052, - 885, - 588, - 452, - 125, - 196, - 43, 107, 320, 569, 818, 977, 1523, - 1633, - 1391, - 1033, - 780, - 681, - 597, - 356, - 277, - 75, 148, 296, 497, 628, 919, 1117, 1648, - 2119, - 1252, - 835, - 810, - 429, - 530, - 307, - 150, 110, 150, 354, 637, 900, 1049, 1429, 2135, - 1316, - 1026, - 766, - 465, - 413, - 167, - 119, 62, 253, 424, 590, 678, 937, 1213, 1532, 1938, - 1445, - 832, - 723, - 365, - 207, - 50, 50, 242, 422, 584, 768, 930, 1231, 1280, 1844, 2669, - 1082, - 545, - 539, - 303, - 49, 165, 171, 421, 655, 821, 888, 1100, 1379, 1565, 1887, 2406, - 999, - 375, - 264, - 25, 54, 314, 409, 610, 795, 966, 1210, 1210, 1510, 1866, 2177, 3072, /* low_rates */ 2879, - 570, 703, 876, 1383, - 1731, 113, - 1430, 1686, - 731, 244, - 731, 964, - 1147, - 387, - 1213, 2357, - 445, 528, - 30, 1158, - 1594, 0, - 2708, 1808, - 406, 193, - 614, 694, - 2237, - 637, - 2708, 2582, - 755, 318, 0, 1089, - 2534, 58, - 995, 1623, - 1510, 180, - 1552, 793, - 2534, - 884, - 1780, 2131, - 831, 518, - 156, 1096, - 2454, - 107, - 2804, 1204, - 1247, - 223, - 1084, 443, - 2534, - 367, - 2454, /* MR475 */ - 5120, - 4988, - 1896, - 274, - 2932, - 2726, - 1216, 376, - 3536, - 3293, - 650, - 733, - 2418, - 2664, 1053, - 1303, - 3337, - 3256, - 9, - 1732, - 2237, - 2076, - 332, 252, - 1044, - 2350, 262, - 1296, - 1385, - 827, - 1447, 1309, - 3375, - 3386, - 1418, - 215, - 2731, - 2754, - 1610, 594, - 2610, - 2821, - 1409, 189, - 1292, - 1779, 853, 492, - 1865, - 1103, 593, - 1211, - 1213, - 1407, - 201, 621, - 1903, - 1270, 191, - 310, - 1435, - 453, 1386, 728, - 2646, - 1689, - 60, - 609, - 2602, - 2409, 356, 396, - 2991, - 2775, - 150, - 785, - 2577, - 2506, 1524, - 881, - 3119, - 3041, - 98, - 442, - 2134, - 1151, 411, 254, - 1075, - 1777, 105, - 291, - 524, - 1519, - 1318, 1895, - 2838, - 2972, - 216, - 812, - 2785, - 2677, - 221, 1286, - 2792, - 2863, - 454, 26, - 1379, - 1780, 1211, 287, - 1798, - 1868, 440, - 647, - 1034, - 892, 322, 740, - 1572, - 823, 558, - 511, - 860, - 714, 1356, 1502, - 3690, - 3448, - 496, - 632, - 2770, - 2706, - 768, 867, - 2360, - 2301, - 734, - 211, - 2005, - 1530, 970, - 246, - 2982, - 2646, 23, - 1349, - 1868, - 694, - 137, 369, - 1056, - 1263, 369, - 1317, - 1249, - 351, 572, 1320, - 3289, - 3237, - 890, 43, - 2411, - 2367, - 998, 694, - 2089, - 2105, - 728, 296, - 1019, - 1341, 775, 511, - 2362, - 1311, 508, - 1432, - 653, - 1525, 214, 634, - 1158, - 862, 162, - 92, - 846, - 345, 2171, - 582, - 1579, - 2279, - 213, 40, - 2653, - 2448, 329, 928, - 2424, - 1836, - 383, - 441, - 2272, - 2320, 1888, - 1119, - 2186, - 1960, - 4, 150, - 2341, - 1968, 555, 164, - 686, - 1856, - 19, - 656, - 597, - 928, - 353, 2304, - 2190, - 1372, - 416, 64, - 2353, - 2394, - 860, 1028, - 1313, - 1187, - 551, 388, - 767, - 1666, 1017, 1088, - 1020, - 1676, 747, - 1107, - 211, - 1233, 704, 943, - 700, - 646, 891, - 886, - 518, - 307, 2354, 1047, - 2789, - 2880, - 860, - 180, - 2504, - 2358, - 531, 541, - 2940, - 2929, - 456, - 157, - 2416, - 2552, 1121, - 434, - 2454, - 2353, 316, - 752, - 1162, - 1739, 154, 144, - 469, - 1743, 186, - 668, - 795, - 708, - 485, 1595, - 2644, - 2564, - 1725, 37, - 2651, - 2858, - 1044, 1119, - 2269, - 2240, - 933, 47, - 1698, - 1038, 890, 162, - 1049, - 1211, 701, - 192, - 1379, - 1292, - 251, 714, - 2073, - 983, 305, 61, - 1660, - 227, 1830, 760, - 2534, - 2304, - 520, - 216, - 1764, - 2245, 181, 508, - 2865, - 2868, - 128, - 389, - 2492, - 2500, 1478, - 913, - 2813, - 2657, 18, - 307, - 1326, - 839, 438, 430, - 516, - 1644, 388, - 54, - 133, - 1550, - 9, 1985, - 1300, - 2265, 161, - 317, - 2385, - 2227, 65, 1055, - 1960, - 2297, - 116, 170, - 1451, - 912, 1273, 143, - 1963, - 927, 581, 126, - 1362, - 430, 340, 806, - 704, - 868, 615, - 272, - 291, - 1070, 1691, 1985, - 2054, - 2262, 72, - 168, - 1881, - 1532, - 900, 715, - 1808, - 2415, - 271, - 81, - 981, - 959, 1135, - 672, - 1768, - 2389, 109, - 1013, - 539, - 881, 134, 405, - 582, - 974, 429, - 569, - 605, - 80, 244, 1613, - 2089, - 2101, - 421, 400, - 1328, - 1835, - 811, 792, - 1424, - 1905, - 1453, 403, - 1012, - 949, 1033, 640, - 1480, - 686, 751, - 516, - 283, - 1190, 215, 852, - 572, - 310, 310, 210, - 806, 101, 2760, - 427, - 1420, - 1983, 269, - 217, - 2275, - 2321, 104, 939, - 2055, - 2137, - 52, - 262, - 2110, - 2139, 1693, 37, - 1789, - 2387, 334, 264, - 1216, - 49, 607, 546, - 267, - 1081, 346, - 457, - 116, - 810, - 592, 2750, - 1710, - 2070, - 182, 439, - 2418, - 2221, - 428, 1359, - 653, - 1732, - 288, 361, - 1318, - 378, 1426, 759, - 854, - 767, 773, - 283, - 321, - 775, 730, 1302, - 669, - 393, 945, - 80, - 158, - 284, 2295, 2557, /* dtx */ - 1921, - 1878, - 1836, - 1793, - 1751, - 1708, - 1666, - 1623, - 1581, - 1538, - 1495, - 1453, - 1410, - 1368, - 1325, - 1283, - 1240, - 1198, - 1155, - 1113, - 1070, - 1028, - 985, - 943, - 900, - 858, - 815, - 773, - 730, - 688, - 645, - 602, - 560, - 517, - 475, - 432, - 390, - 347, - 305, - 262, - 220, - 177, - 135, - 92, - 50, - 7, 0, /* init value */ - 2381 }; static const Word32 qua_gain_code[NB_QUA_CODE+VQ_SIZE_HIGHRATES+VQ_SIZE_LOWRATES+(MR475_VQ_SIZE*2)+DTX_VQ_SIZE+3] = { - 22731, - 20428, - 18088, - 15739, - 14113, - 12867, - 11629, - 10387, - 9139, - 7906, - 6656, - 5416, - 4173, - 2931, - 1688, - 445, 801, 2044, 3285, 4530, 5772, 7016, 8259, 9501, 10745, 11988, 13231, 14474, 16096, 18429, 20763, 23097, /* high rates */ - 16214, - 7135, - 12086, - 9629, - 9394, - 6442, - 5056, - 1885, - 2838, - 4681, - 2490, 434, 836, 2484, 5030, 7002, - 13647, - 8900, - 5800, - 6335, - 5327, - 3537, - 2724, - 751, - 1177, - 260, 645, 1928, 3426, 4926, 5885, 9172, - 9831, - 8380, - 6220, - 4700, - 4099, - 3595, - 2144, - 1669, - 454, 891, 1781, 2993, 3782, 5534, 6728, 9921, - 12753, - 7539, - 5024, - 4872, - 2580, - 3192, - 1848, - 904, 663, 902, 2132, 3837, 5420, 6312, 8604, 12853, - 7921, - 6179, - 4610, - 2802, - 2482, - 1006, - 713, 374, 1523, 2552, 3551, 4084, 5639, 7304, 9221, 11667, - 8700, - 5007, - 4352, - 2197, - 1247, - 300, 298, 1454, 2542, 3518, 4623, 5602, 7413, 7706, 11102, 16067, - 6517, - 3283, - 3248, - 1825, - 294, 992, 1030, 2537, 3945, 4944, 5343, 6622, 8303, 9423, 11360, 14483, - 6013, - 2257, - 1589, - 151, 326, 1890, 2461, 3676, 4784, 5816, 7283, 7284, 9089, 11234, 13108, 18494, /* low_rates */ 17333, - 3431, 4235, 5276, 8325, - 10422, 683, - 8609, 10148, - 4398, 1472, - 4398, 5802, - 6907, - 2327, - 7303, 14189, - 2678, 3181, - 180, 6972, - 9599, 0, - 16305, 10884, - 2444, 1165, - 3697, 4180, - 13468, - 3833, - 16305, 15543, - 4546, 1913, 0, 6556, - 15255, 347, - 5993, 9771, - 9090, 1086, - 9341, 4772, - 15255, - 5321, - 10714, 12827, - 5002, 3118, - 938, 6598, - 14774, - 646, - 16879, 7251, - 7508, - 1343, - 6529, 2668, - 15255, - 2212, - 14774, /* MR475 */ - 30825, - 30028, - 11416, - 1652, - 17651, - 16414, - 7323, 2266, - 21289, - 19823, - 3914, - 4413, - 14560, - 16037, 6338, - 7842, - 20089, - 19604, - 53, - 10430, - 13469, - 12497, - 2001, 1517, - 6283, - 14145, 1579, - 7801, - 8339, - 4977, - 8713, 7881, - 20321, - 20385, - 8535, - 1296, - 16442, - 16581, - 9696, 3577, - 15714, - 16981, - 8484, 1135, - 7780, - 10708, 5136, 2962, - 11229, - 6643, 3572, - 7294, - 7304, - 8473, - 1208, 3739, - 11455, - 7646, 1150, - 1866, - 8638, - 2726, 8342, 4384, - 15933, - 10167, - 362, - 3665, - 15663, - 14504, 2142, 2387, - 18006, - 16707, - 905, - 4726, - 15513, - 15088, 9173, - 5305, - 18778, - 18307, - 591, - 2661, - 12849, - 6927, 2472, 1527, - 6470, - 10701, 632, - 1754, - 3155, - 9145, - 7938, 11408, - 17085, - 17891, - 1301, - 4889, - 16764, - 16117, - 1333, 7744, - 16808, - 17234, - 2732, 154, - 8300, - 10715, 7291, 1731, - 10824, - 11244, 2652, - 3894, - 6227, - 5372, 1937, 4457, - 9466, - 4954, 3358, - 3075, - 5176, - 4297, 8162, 9040, - 22215, - 20758, - 2986, - 3807, - 16679, - 16291, - 4626, 5220, - 14210, - 13852, - 4420, - 1271, - 12073, - 9212, 5842, - 1481, - 17956, - 15933, 137, - 8120, - 11244, - 4180, - 826, 2224, - 6359, - 7605, 2219, - 7927, - 7518, - 2111, 3447, 7949, - 19803, - 19487, - 5360, 259, - 14515, - 14253, - 6011, 4180, - 12577, - 12676, - 4384, 1784, - 6135, - 8071, 4665, 3078, - 14220, - 7896, 3060, - 8621, - 3931, - 9182, 1285, 3816, - 6974, - 5192, 975, - 554, - 5091, - 2075, 13071, - 3502, - 9504, - 13719, - 1280, 244, - 15972, - 14740, 1981, 5587, - 14593, - 11054, - 2308, - 2656, - 13678, - 13966, 11370, - 6739, - 13158, - 11799, - 27, 901, - 14092, - 11849, 3344, 989, - 4132, - 11176, - 114, - 3951, - 3596, - 5586, - 2124, 13869, - 13187, - 8262, - 2502, 384, - 14166, - 14416, - 5176, 6192, - 7906, - 7147, - 3320, 2336, - 4615, - 10032, 6125, 6551, - 6144, - 10092, 4495, - 6666, - 1273, - 7423, 4241, 5680, - 4212, - 3891, 5366, - 5337, - 3121, - 1847, 14175, 6302, - 16793, - 17341, - 5176, - 1085, - 15076, - 14199, - 3195, 3257, - 17698, - 17635, - 2746, - 946, - 14548, - 15365, 6748, - 2615, - 14774, - 14166, 1904, - 4525, - 6998, - 10472, 928, 865, - 2821, - 10493, 1122, - 4019, - 4785, - 4261, - 2922, 9604, - 15920, - 15438, - 10388, 222, - 15959, - 17204, - 6283, 6737, - 13658, - 13488, - 5618, 280, - 10222, - 6248, 5358, 977, - 6319, - 7294, 4218, - 1156, - 8300, - 7780, - 1514, 4296, - 12479, - 5917, 1839, 367, - 9992, - 1369, 11020, 4578, - 15255, - 13873, - 3133, - 1298, - 10621, - 13518, 1087, 3057, - 17250, - 17265, - 774, - 2339, - 15006, - 15053, 8896, - 5497, - 16938, - 15998, 107, - 1850, - 7980, - 5053, 2639, 2590, - 3108, - 9898, 2333, - 323, - 800, - 9329, - 57, 11948, - 7827, - 13638, 967, - 1906, - 14361, - 13410, 392, 6353, - 11799, - 13831, - 698, 1024, - 8736, - 5489, 7665, 861, - 11816, - 5582, 3495, 761, - 8201, - 2588, 2045, 4850, - 4240, - 5223, 3705, - 1636, - 1754, - 6443, 10180, 11952, - 12365, - 13618, 433, - 1009, - 11322, - 9225, - 5421, 4302, - 10883, - 14537, - 1633, - 489, - 5904, - 5771, 6831, - 4047, - 10643, - 14383, 656, - 6097, - 3245, - 5305, 809, 2438, - 3502, - 5862, 2584, - 3429, - 3642, - 482, 1471, 9712, - 12577, - 12649, - 2533, 2410, - 7996, - 11047, - 4882, 4768, - 8575, - 11470, - 8747, 2427, - 6092, - 5713, 6222, 3854, - 8911, - 4132, 4521, - 3108, - 1704, - 7162, 1293, 5132, - 3445, - 1866, 1868, 1264, - 4855, 608, 16615, - 2571, - 8552, - 11940, 1620, - 1308, - 13699, - 13976, 626, 5652, - 12374, - 12868, - 312, - 1579, - 12703, - 12877, 10194, 222, - 10773, - 14372, 2009, 1590, - 7323, - 296, 3655, 3289, - 1605, - 6506, 2082, - 2752, - 696, - 4878, - 3567, 16558, - 10297, - 12462, - 1094, 2640, - 14560, - 13370, - 2577, 8180, - 3931, - 10430, - 1733, 2173, - 7938, - 2274, 8585, 4567, - 5141, - 4619, 4655, - 1707, - 1931, - 4666, 4396, 7837, - 4026, - 2364, 5687, - 482, - 948, - 1709, 13820, 15394, /* dtx */ - 11560, - 11304, - 11048, - 10792, - 10536, - 10280, - 10024, - 9768, - 9512, - 9256, - 9000, - 8744, - 8488, - 8232, - 7976, - 7720, - 7464, - 7208, - 6952, - 6696, - 6440, - 6184, - 5928, - 5672, - 5416, - 5160, - 4904, - 4648, - 4392, - 4136, - 3880, - 3624, - 3368, - 3112, - 2856, - 2600, - 2344, - 2088, - 1832, - 1576, - 1320, - 1064, - 808, - 552, - 296, - 40, 0, /* init value */ - 14336, /* min */ - 32767, /* max */ 18284 }; /* * LP analysis is performed twice per frame using two different asymmetric windows. * The second window has its weight concentrated at the fourth subframe * and it consists of two parts: * the first part is half a Hamming window and * the second part is a quarter of a cosine function cycle. */ static const Float32 window_200_40[240] = { 0.0800000F, 0.0800570F, 0.0802281F, 0.0805132F, 0.0809123F, 0.0814251F, 0.0820517F, 0.0827919F, 0.0836454F, 0.0846121F, 0.0856917F, 0.0868840F, 0.0881886F, 0.0896053F, 0.0911337F, 0.0927733F, 0.0945239F, 0.0963849F, 0.0983560F, 0.100437F, 0.102626F, 0.104924F, 0.107330F, 0.109843F, 0.112463F, 0.115189F, 0.118020F, 0.120956F, 0.123996F, 0.127139F, 0.130384F, 0.133731F, 0.137178F, 0.140726F, 0.144372F, 0.148117F, 0.151959F, 0.155897F, 0.159930F, 0.164058F, 0.168278F, 0.172591F, 0.176995F, 0.181489F, 0.186072F, 0.190743F, 0.195500F, 0.200343F, 0.205270F, 0.210280F, 0.215372F, 0.220544F, 0.225795F, 0.231125F, 0.236531F, 0.242012F, 0.247567F, 0.253195F, 0.258893F, 0.264662F, 0.270499F, 0.276402F, 0.282371F, 0.288404F, 0.294499F, 0.300655F, 0.306871F, 0.313144F, 0.319473F, 0.325857F, 0.332295F, 0.338783F, 0.345322F, 0.351909F, 0.358543F, 0.365221F, 0.371943F, 0.378707F, 0.385510F, 0.392352F, 0.399231F, 0.406144F, 0.413091F, 0.420069F, 0.427077F, 0.434112F, 0.441175F, 0.448261F, 0.455371F, 0.462501F, 0.469650F, 0.476817F, 0.484000F, 0.491197F, 0.498405F, 0.505624F, 0.512852F, 0.520086F, 0.527325F, 0.534567F, 0.541811F, 0.549054F, 0.556295F, 0.563532F, 0.570763F, 0.577986F, 0.585201F, 0.592403F, 0.599593F, 0.606768F, 0.613927F, 0.621067F, 0.628187F, 0.635285F, 0.642360F, 0.649409F, 0.656431F, 0.663424F, 0.670387F, 0.677317F, 0.684213F, 0.691073F, 0.697896F, 0.704680F, 0.711423F, 0.718124F, 0.724780F, 0.731390F, 0.737953F, 0.744467F, 0.750930F, 0.757341F, 0.763698F, 0.770000F, 0.776245F, 0.782430F, 0.788556F, 0.794620F, 0.800622F, 0.806558F, 0.812428F, 0.818231F, 0.823965F, 0.829628F, 0.835220F, 0.840738F, 0.846182F, 0.851550F, 0.856840F, 0.862052F, 0.867184F, 0.872235F, 0.877204F, 0.882089F, 0.886889F, 0.891603F, 0.896230F, 0.900769F, 0.905218F, 0.909577F, 0.913844F, 0.918018F, 0.922098F, 0.926084F, 0.929974F, 0.933767F, 0.937463F, 0.941060F, 0.944558F, 0.947955F, 0.951251F, 0.954446F, 0.957537F, 0.960525F, 0.963409F, 0.966187F, 0.968860F, 0.971427F, 0.973886F, 0.976238F, 0.978482F, 0.980617F, 0.982643F, 0.984559F, 0.986365F, 0.988060F, 0.989644F, 0.991117F, 0.992478F, 0.993726F, 0.994862F, 0.995885F, 0.996796F, 0.997592F, 0.998276F, 0.998846F, 0.999301F, 0.999644F, 0.999872F, 0.999986F, 1.00000F, 0.999219F, 0.996878F, 0.992981F, 0.987533F, 0.980544F, 0.972023F, 0.961985F, 0.950444F, 0.937420F, 0.922932F, 0.907002F, 0.889657F, 0.870923F, 0.850828F, 0.829406F, 0.806688F, 0.782711F, 0.757511F, 0.731129F, 0.703605F, 0.674983F, 0.645307F, 0.614623F, 0.582980F, 0.550426F, 0.517013F, 0.482792F, 0.447818F, 0.412145F, 0.375828F, 0.338924F, 0.301491F, 0.263587F, 0.225272F, 0.186605F, 0.147647F, 0.108458F, 0.0690994F, 0.0296333F }; /* * LP analysis is performed twice per frame using two different asymmetric windows. * The second window has its weight concentrated at the fourth subframe * and it consists of two parts: * the first part is half a Hamming window and * the second part is a quarter of a cosine function cycle. */ static const Float32 window_232_8[240] = { 0.0800000F, 0.0800424F, 0.0801694F, 0.0803812F, 0.0806775F, 0.0810585F, 0.0815240F, 0.0820739F, 0.0827082F, 0.0834267F, 0.0842292F, 0.0851157F, 0.0860859F, 0.0871398F, 0.0882770F, 0.0894975F, 0.0908009F, 0.0921870F, 0.0936556F, 0.0952064F, 0.0968391F, 0.0985534F, 0.100349F, 0.102226F, 0.104183F, 0.106220F, 0.108338F, 0.110534F, 0.112810F, 0.115165F, 0.117598F, 0.120108F, 0.122696F, 0.125361F, 0.128102F, 0.130919F, 0.133812F, 0.136779F, 0.139820F, 0.142935F, 0.146123F, 0.149384F, 0.152717F, 0.156121F, 0.159596F, 0.163140F, 0.166754F, 0.170437F, 0.174188F, 0.178007F, 0.181892F, 0.185843F, 0.189859F, 0.193939F, 0.198084F, 0.202291F, 0.206561F, 0.210892F, 0.215283F, 0.219734F, 0.224245F, 0.228813F, 0.233439F, 0.238121F, 0.242859F, 0.247652F, 0.252498F, 0.257397F, 0.262349F, 0.267351F, 0.272404F, 0.277506F, 0.282656F, 0.287854F, 0.293098F, 0.298388F, 0.303722F, 0.309100F, 0.314520F, 0.319981F, 0.325484F, 0.331025F, 0.336606F, 0.342223F, 0.347877F, 0.353567F, 0.359290F, 0.365048F, 0.370837F, 0.376657F, 0.382508F, 0.388387F, 0.394295F, 0.400229F, 0.406189F, 0.412174F, 0.418182F, 0.424213F, 0.430265F, 0.436337F, 0.442428F, 0.448537F, 0.454663F, 0.460805F, 0.466961F, 0.473131F, 0.479313F, 0.485507F, 0.491710F, 0.497922F, 0.504142F, 0.510369F, 0.516601F, 0.522837F, 0.529077F, 0.535318F, 0.541561F, 0.547803F, 0.554043F, 0.560281F, 0.566516F, 0.572745F, 0.578969F, 0.585185F, 0.591393F, 0.597591F, 0.603779F, 0.609955F, 0.616119F, 0.622268F, 0.628402F, 0.634520F, 0.640620F, 0.646702F, 0.652764F, 0.658805F, 0.664825F, 0.670822F, 0.676794F, 0.682741F, 0.688662F, 0.694556F, 0.700421F, 0.706257F, 0.712062F, 0.717835F, 0.723576F, 0.729282F, 0.734954F, 0.740590F, 0.746189F, 0.751750F, 0.757272F, 0.762755F, 0.768196F, 0.773595F, 0.778951F, 0.784263F, 0.789530F, 0.794751F, 0.799925F, 0.805051F, 0.810129F, 0.815156F, 0.820133F, 0.825059F, 0.829932F, 0.834751F, 0.839517F, 0.844227F, 0.848881F, 0.853478F, 0.858018F, 0.862499F, 0.866920F, 0.871282F, 0.875582F, 0.879820F, 0.883996F, 0.888109F, 0.892157F, 0.896141F, 0.900059F, 0.903911F, 0.907696F, 0.911413F, 0.915061F, 0.918641F, 0.922151F, 0.925590F, 0.928958F, 0.932255F, 0.935480F, 0.938632F, 0.941710F, 0.944714F, 0.947644F, 0.950499F, 0.953278F, 0.955981F, 0.958607F, 0.961157F, 0.963628F, 0.966022F, 0.968338F, 0.970574F, 0.972731F, 0.974809F, 0.976806F, 0.978723F, 0.980559F, 0.982314F, 0.983988F, 0.985579F, 0.987089F, 0.988516F, 0.989861F, 0.991123F, 0.992302F, 0.993398F, 0.994410F, 0.995338F, 0.996183F, 0.996943F, 0.997619F, 0.998212F, 0.998719F, 0.999143F, 0.999481F, 0.999735F, 0.999905F, 0.999989F, 1.00000F, 0.979530F, 0.918958F, 0.820763F, 0.688967F, 0.528964F, 0.347305F, 0.151428F }; /* * LP analysis is performed twice per frame using two different asymmetric windows. * The first window has its weight concentrated at the second subframe * and it consists of two halves of Hamming windows with different sizes */ static const Float32 window_160_80[240] = { 0.0800000F, 0.0800898F, 0.0803591F, 0.0808079F, 0.0814359F, 0.0822430F, 0.0832287F, 0.0843928F, 0.0857347F, 0.0872539F, 0.0889499F, 0.0908220F, 0.0928695F, 0.0950914F, 0.0974871F, 0.100056F, 0.102796F, 0.105707F, 0.108787F, 0.112036F, 0.115451F, 0.119033F, 0.122779F, 0.126688F, 0.130758F, 0.134988F, 0.139376F, 0.143920F, 0.148619F, 0.153471F, 0.158473F, 0.163625F, 0.168924F, 0.174367F, 0.179953F, 0.185680F, 0.191545F, 0.197546F, 0.203681F, 0.209947F, 0.216342F, 0.222863F, 0.229508F, 0.236274F, 0.243159F, 0.250160F, 0.257273F, 0.264498F, 0.271829F, 0.279266F, 0.286804F, 0.294441F, 0.302174F, 0.310000F, 0.317916F, 0.325918F, 0.334004F, 0.342170F, 0.350414F, 0.358731F, 0.367119F, 0.375575F, 0.384095F, 0.392676F, 0.401314F, 0.410007F, 0.418750F, 0.427540F, 0.436375F, 0.445250F, 0.454162F, 0.463107F, 0.472083F, 0.481085F, 0.490109F, 0.499154F, 0.508214F, 0.517287F, 0.526369F, 0.535456F, 0.544544F, 0.553631F, 0.562713F, 0.571786F, 0.580846F, 0.589891F, 0.598915F, 0.607917F, 0.616893F, 0.625838F, 0.634750F, 0.643625F, 0.652460F, 0.661250F, 0.669993F, 0.678686F, 0.687324F, 0.695905F, 0.704425F, 0.712881F, 0.721269F, 0.729586F, 0.737830F, 0.745996F, 0.754082F, 0.762084F, 0.770000F, 0.777826F, 0.785559F, 0.793196F, 0.800734F, 0.808171F, 0.815502F, 0.822727F, 0.829840F, 0.836841F, 0.843726F, 0.850492F, 0.857137F, 0.863658F, 0.870053F, 0.876319F, 0.882454F, 0.888455F, 0.894320F, 0.900047F, 0.905633F, 0.911076F, 0.916375F, 0.921527F, 0.926529F, 0.931381F, 0.936080F, 0.940624F, 0.945012F, 0.949242F, 0.953312F, 0.957221F, 0.960967F, 0.964549F, 0.967964F, 0.971213F, 0.974293F, 0.977204F, 0.979944F, 0.982513F, 0.984909F, 0.987131F, 0.989178F, 0.991050F, 0.992746F, 0.994265F, 0.995607F, 0.996771F, 0.997757F, 0.998564F, 0.999192F, 0.999641F, 0.999910F, 1.00000F, 1.00000F, 0.999636F, 0.998546F, 0.996730F, 0.994193F, 0.990937F, 0.986968F, 0.982292F, 0.976917F, 0.970851F, 0.964104F, 0.956687F, 0.948610F, 0.939887F, 0.930532F, 0.920560F, 0.909986F, 0.898826F, 0.887100F, 0.874824F, 0.862019F, 0.848705F, 0.834903F, 0.820635F, 0.805922F, 0.790790F, 0.775260F, 0.759359F, 0.743111F, 0.726542F, 0.709677F, 0.692545F, 0.675171F, 0.657584F, 0.639810F, 0.621879F, 0.603818F, 0.585657F, 0.567423F, 0.549146F, 0.530854F, 0.512577F, 0.494343F, 0.476182F, 0.458121F, 0.440190F, 0.422416F, 0.404829F, 0.387455F, 0.370323F, 0.353458F, 0.336889F, 0.320641F, 0.304740F, 0.289210F, 0.274078F, 0.259365F, 0.245097F, 0.231295F, 0.217981F, 0.205176F, 0.192900F, 0.181174F, 0.170014F, 0.159440F, 0.149468F, 0.140113F, 0.131390F, 0.123313F, 0.115896F, 0.109149F, 0.103083F, 0.0977077F, 0.0930321F, 0.0890632F, 0.0858073F, 0.0832696F, 0.0814541F, 0.0803637F, 0.0800000F }; /* correlation weights */ static const Float32 corrweight[251] = { 0.624805F, 0.625813F, 0.626820F, 0.627827F, 0.628834F, 0.630024F, 0.631031F, 0.632221F, 0.633229F, 0.634419F, 0.635426F, 0.636616F, 0.637623F, 0.638813F, 0.640034F, 0.641224F, 0.642415F, 0.643605F, 0.644826F, 0.646016F, 0.647206F, 0.648427F, 0.649617F, 0.651021F, 0.652211F, 0.653615F, 0.654805F, 0.656209F, 0.657430F, 0.658834F, 0.660207F, 0.661611F, 0.663015F, 0.664418F, 0.665822F, 0.667226F, 0.668630F, 0.670217F, 0.671621F, 0.673208F, 0.674612F, 0.676229F, 0.677816F, 0.679434F, 0.681021F, 0.682607F, 0.684225F, 0.685812F, 0.687613F, 0.689230F, 0.691031F, 0.692831F, 0.694632F, 0.696432F, 0.698233F, 0.700034F, 0.702017F, 0.703818F, 0.705832F, 0.707816F, 0.709616F, 0.711814F, 0.713828F, 0.715812F, 0.718009F, 0.720237F, 0.722221F, 0.724631F, 0.726829F, 0.729026F, 0.731437F, 0.733818F, 0.736229F, 0.738609F, 0.741234F, 0.743614F, 0.746208F, 0.748833F, 0.751610F, 0.754234F, 0.757012F, 0.760033F, 0.762810F, 0.765831F, 0.768822F, 0.772027F, 0.775018F, 0.778222F, 0.781610F, 0.785028F, 0.788415F, 0.792016F, 0.795618F, 0.799219F, 0.803034F, 0.807031F, 0.811029F, 0.815027F, 0.819239F, 0.823634F, 0.828028F, 0.832636F, 0.837428F, 0.842219F, 0.847224F, 0.852412F, 0.857814F, 0.863216F, 0.869015F, 0.874813F, 0.881039F, 0.887417F, 0.894040F, 0.901028F, 0.908231F, 0.915616F, 0.923429F, 0.931639F, 0.940214F, 0.960021F, 1.00000F, 1.00000F, 1.00000F, 1.00000F, 1.00000F, 1.00000F, 1.00000F, 0.960021F, 0.940214F, 0.931639F, 0.923429F, 0.915616F, 0.908231F, 0.901028F, 0.894040F, 0.887417F, 0.881039F, 0.874813F, 0.869015F, 0.863216F, 0.857814F, 0.852412F, 0.847224F, 0.842219F, 0.837428F, 0.832636F, 0.828028F, 0.823634F, 0.819239F, 0.815027F, 0.811029F, 0.807031F, 0.803034F, 0.799219F, 0.795618F, 0.792016F, 0.788415F, 0.785028F, 0.781610F, 0.778222F, 0.775018F, 0.772027F, 0.768822F, 0.765831F, 0.762810F, 0.760033F, 0.757012F, 0.754234F, 0.751610F, 0.748833F, 0.746208F, 0.743614F, 0.741234F, 0.738609F, 0.736229F, 0.733818F, 0.731437F, 0.729026F, 0.726829F, 0.724631F, 0.722221F, 0.720237F, 0.718009F, 0.715812F, 0.713828F, 0.711814F, 0.709616F, 0.707816F, 0.705832F, 0.703818F, 0.702017F, 0.700034F, 0.698233F, 0.696432F, 0.694632F, 0.692831F, 0.691031F, 0.689230F, 0.687613F, 0.685812F, 0.684225F, 0.682607F, 0.681021F, 0.679434F, 0.677816F, 0.676229F, 0.674612F, 0.673208F, 0.671621F, 0.670217F, 0.668630F, 0.667226F, 0.665822F, 0.664418F, 0.663015F, 0.661611F, 0.660207F, 0.658834F, 0.657430F, 0.656209F, 0.654805F, 0.653615F, 0.652211F, 0.651021F, 0.649617F, 0.648427F, 0.647206F, 0.646016F, 0.644826F, 0.643605F, 0.642415F, 0.641224F, 0.640034F, 0.638813F, 0.637623F, 0.636616F, 0.635426F, 0.634419F, 0.633229F, 0.632221F, 0.631031F, 0.630024F, 0.628834F, 0.627827F, 0.626820F, 0.625813F, 0.624805F, 0.623615F, 0.622608F, 0.621632F, 0.620624F }; const struct { Word8 max_frac_lag; /* lag up to which fractional lags are used */ Word8 flag3; /* enable 1/3 instead of 1/6 fract. resolution */ Word8 first_frac; /* first fractional to check */ Word8 last_frac; /* last fractional to check */ Word8 delta_int_low; /* integer lag below TO to start search from */ Word8 delta_int_range; /* integer range around T0 */ Word8 delta_frc_low; /* fractional below T0 */ Word8 delta_frc_range; /* fractional range around T0 */ Word8 pit_min; /* minimum pitch */ } static mode_dep_parm[8] = { /* * MR475 */ { 84, 1, - 2, 2, 5, 10, 5, 9, PIT_MIN }, /* * MR515 */ { 84, 1, - 2, 2, 5, 10, 5, 9, PIT_MIN }, /* * MR59 */ { 84, 1, - 2, 2, 3, 6, 5, 9, PIT_MIN }, /* * MR67 */ { 84, 1, - 2, 2, 3, 6, 5, 9, PIT_MIN }, /* * MR74 */ { 84, 1, - 2, 2, 3, 6, 5, 9, PIT_MIN }, /* * MR795 */ { 84, 1, - 2, 2, 3, 6, 10, 19, PIT_MIN }, /* * MR102 */ { 84, 1, - 2, 2, 3, 6, 5, 9, PIT_MIN }, /* * MR122 */ { 94, 0, - 3, 3, 3, 6, 5, 9, PIT_MIN_MR122 } }; /* table used inbase 2 logharithm computation */ static const Word32 log2_table[33] = { 0, 1455, 2866, 4236, 5568, 6863, 8124, 9352, 10549, 11716, 12855, 13967, 15054, 16117, 17156, 18172, 19167, 20142, 21097, 22033, 22951, 23852, 24735, 25603, 26455, 27291, 28113, 28922, 29716, 30497, 31266, 32023, 32767 }; /* table used in 2 to the power computation */ static const Word32 pow2_table[33] = { 16384, 16743, 17109, 17484, 17867, 18258, 18658, 19066, 19484, 19911, 20347, 20792, 21247, 21713, 22188, 22674, 23170, 23678, 24196, 24726, 25268, 25821, 26386, 26964, 27554, 28158, 28774, 29405, 30048, 30706, 31379, 32066, 32767 }; #endif h323plus/plugins/audio/gsm-amr/src/interf_enc.c0000644000175000017500000004155611341106247020315 0ustar markmark/* * =================================================================== * TS 26.104 * REL-5 V5.4.0 2004-03 * REL-6 V6.1.0 2004-03 * 3GPP AMR Floating-point Speech Codec * =================================================================== * */ /* * interf_enc.c * * * Project: * AMR Floating-Point Codec * * Contains: * This module contains all the functions needed encoding 160 * 16-bit speech samples to AMR encoder parameters. * */ /* * include files */ #include #include #include #include "interf_enc.h" #include "interf_rom.h" #include "sp_enc.h" /* * Declare structure types */ /* Declaration transmitted frame types */ enum TXFrameType { TX_SPEECH_GOOD = 0, TX_SID_FIRST, TX_SID_UPDATE, TX_NO_DATA, TX_SPEECH_DEGRADED, TX_SPEECH_BAD, TX_SID_BAD, TX_ONSET, TX_N_FRAMETYPES /* number of frame types */ }; /* Declaration of interface structure */ typedef struct { Word16 sid_update_counter; /* Number of frames since last SID */ Word16 sid_handover_debt; /* Number of extra SID_UPD frames to schedule */ Word32 dtx; enum TXFrameType prev_ft; /* Type of the previous frame */ void *encoderState; /* Points encoder state structure */ } enc_interface_State; #ifdef ETSI /* * Prm2Bits * * * Parameters: * value I: value to be converted to binary * no_of_bits I: number of bits associated with value * bitstream O: address where bits are written * * Function: * Convert integer to binary and write the bits to the array. * The most significant bits are written first. * Returns: * void */ static void Int2Bin( Word16 value, Word16 no_of_bits, Word16 *bitstream ) { Word32 i, bit; Word16 *pt_bitstream; pt_bitstream = &bitstream[no_of_bits]; for ( i = 0; i < no_of_bits; i++ ) { bit = value & 0x0001; if ( bit == 0 ) { * --pt_bitstream = 0; } else { * --pt_bitstream = 1; } value = ( Word16 )( value >> 1 ); } } /* * Prm2Bits * * * Parameters: * mode I: AMR mode * prm I: analysis parameters * bits O: serial bits * * Function: * converts the encoder parameter vector into a vector of serial bits. * Returns: * void */ static void Prm2Bits( enum Mode mode, Word16 prm[], Word16 bits[] ) { Word32 i; switch ( mode ) { case MR122: for ( i = 0; i < PRMNO_MR122; i++ ) { Int2Bin( prm[i], bitno_MR122[i], bits ); bits += bitno_MR122[i]; } break; case MR102: for ( i = 0; i < PRMNO_MR102; i++ ) { Int2Bin( prm[i], bitno_MR102[i], bits ); bits += bitno_MR102[i]; } break; case MR795: for ( i = 0; i < PRMNO_MR795; i++ ) { Int2Bin( prm[i], bitno_MR795[i], bits ); bits += bitno_MR795[i]; } break; case MR74: for ( i = 0; i < PRMNO_MR74; i++ ) { Int2Bin( prm[i], bitno_MR74[i], bits ); bits += bitno_MR74[i]; } break; case MR67: for ( i = 0; i < PRMNO_MR67; i++ ) { Int2Bin( prm[i], bitno_MR67[i], bits ); bits += bitno_MR67[i]; } break; case MR59: for ( i = 0; i < PRMNO_MR59; i++ ) { Int2Bin( prm[i], bitno_MR59[i], bits ); bits += bitno_MR59[i]; } break; case MR515: for ( i = 0; i < PRMNO_MR515; i++ ) { Int2Bin( prm[i], bitno_MR515[i], bits ); bits += bitno_MR515[i]; } break; case MR475: for ( i = 0; i < PRMNO_MR475; i++ ) { Int2Bin( prm[i], bitno_MR475[i], bits ); bits += bitno_MR475[i]; } break; case MRDTX: for ( i = 0; i < PRMNO_MRDTX; i++ ) { Int2Bin( prm[i], bitno_MRDTX[i], bits ); bits += bitno_MRDTX[i]; } break; } return; } #else #ifndef IF2 /* * EncoderMMS * * * Parameters: * mode I: AMR mode * param I: Encoder output parameters * stream O: packed speech frame * frame_type I: frame type (DTX) * speech_mode I: speech mode (DTX) * * Function: * Pack encoder output parameters to octet structure according * importance table and AMR file storage format according to * RFC 3267. * Returns: * number of octets */ static int EncoderMMS( enum Mode mode, Word16 *param, UWord8 *stream, enum TXFrameType frame_type, enum Mode speech_mode ) { Word32 j = 0, k; Word16 *mask; memset(stream, 0, block_size[mode]); *stream = toc_byte[mode]; stream++; if ( mode == 15 ) { return 1; } else if ( mode == MRDTX ) { mask = order_MRDTX; for ( j = 1; j < 36; j++ ) { if ( param[ * mask] & *( mask + 1 ) ) *stream += 0x01; mask += 2; if ( j % 8 ) *stream <<= 1; else stream++; } /* add SID type information */ if ( frame_type == TX_SID_UPDATE ) *stream += 0x01; *stream <<= 3; /* speech mode indication */ *stream += ( unsigned char )(speech_mode & 0x0007); *stream <<= 1; /* don't shift at the end of the function */ return 6; } else if ( mode == MR475 ) { mask = order_MR475; for ( j = 1; j < 96; j++ ) { if ( param[ * mask] & *( mask + 1 ) ) *stream += 0x01; mask += 2; if ( j % 8 ) *stream <<= 1; else stream++; } } else if ( mode == MR515 ) { mask = order_MR515; for ( j = 1; j < 104; j++ ) { if ( param[ * mask] & *( mask + 1 ) ) *stream += 0x01; mask += 2; if ( j % 8 ) *stream <<= 1; else stream++; } } else if ( mode == MR59 ) { mask = order_MR59; for ( j = 1; j < 119; j++ ) { if ( param[ * mask] & *( mask + 1 ) ) *stream += 0x01; mask += 2; if ( j % 8 ) *stream <<= 1; else stream++; } } else if ( mode == MR67 ) { mask = order_MR67; for ( j = 1; j < 135; j++ ) { if ( param[ * mask] & *( mask + 1 ) ) *stream += 0x01; mask += 2; if ( j % 8 ) *stream <<= 1; else stream++; } } else if ( mode == MR74 ) { mask = order_MR74; for ( j = 1; j < 149; j++ ) { if ( param[ * mask] & *( mask + 1 ) ) *stream += 0x01; mask += 2; if ( j % 8 ) *stream <<= 1; else stream++; } } else if ( mode == MR795 ) { mask = order_MR795; for ( j = 1; j < 160; j++ ) { if ( param[ * mask] & *( mask + 1 ) ) *stream += 0x01; mask += 2; if ( j % 8 ) *stream <<= 1; else stream++; } } else if ( mode == MR102 ) { mask = order_MR102; for ( j = 1; j < 205; j++ ) { if ( param[ * mask] & *( mask + 1 ) ) *stream += 0x01; mask += 2; if ( j % 8 ) *stream <<= 1; else stream++; } } else if ( mode == MR122 ) { mask = order_MR122; for ( j = 1; j < 245; j++ ) { if ( param[ * mask] & *( mask + 1 ) ) *stream += 0x01; mask += 2; if ( j % 8 ) *stream <<= 1; else stream++; } } /* shift remaining bits */ if ( k = j % 8 ) *stream <<= ( 8 - k ); return( (int)block_size[mode] ); } #else /* * Encoder3GPP * * * Parameters: * mode I: AMR mode * param I: Encoder output parameters * stream O: packed speech frame * frame_type I: frame type (DTX) * speech_mode I: speech mode (DTX) * * Function: * Pack encoder output parameters to octet structure according * importance table. * Returns: * number of octets */ static int Encoder3GPP( enum Mode mode, Word16 *param, UWord8 *stream, enum TXFrameType frame_type, enum Mode speech_mode ) { Word32 j = 0; Word16 *mask; memset(stream, 0, block_size[mode]); if ( mode == 15 ) { *stream = 0xF; return 1; } else if ( mode == MRDTX ) { mask = order_MRDTX; *stream = 0x40; for ( j = 5; j < 40; j++ ) { if ( param[ * mask] & *( mask + 1 ) ) *stream += 0x80; mask += 2; if ( j % 8 ) *stream >>= 1; else stream++; } /* add SID type information */ if ( frame_type == TX_SID_UPDATE ) *stream += 0x80; stream++; /* speech mode indication */ *stream = ( unsigned char )speech_mode; /* don't shift at the end of the function */ return 6; } else if ( mode == MR475 ) { mask = order_MR475; *stream = 0; for ( j = 5; j < 100; j++ ) { if ( param[ * mask] & *( mask + 1 ) ) *stream += 0x80; mask += 2; if ( j % 8 ) *stream >>= 1; else stream++; } } else if ( mode == MR515 ) { mask = order_MR515; *stream = 0x8; for ( j = 5; j < 108; j++ ) { if ( param[ * mask] & *( mask + 1 ) ) *stream += 0x80; mask += 2; if ( j % 8 ) *stream >>= 1; else stream++; } } else if ( mode == MR59 ) { mask = order_MR59; *stream = 0x10; for ( j = 5; j < 123; j++ ) { if ( param[ * mask] & *( mask + 1 ) ) *stream += 0x80; mask += 2; if ( j % 8 ) *stream >>= 1; else stream++; } } else if ( mode == MR67 ) { mask = order_MR67; *stream = 0x18; for ( j = 5; j < 139; j++ ) { if ( param[ * mask] & *( mask + 1 ) ) *stream += 0x80; mask += 2; if ( j % 8 ) *stream >>= 1; else stream++; } } else if ( mode == MR74 ) { mask = order_MR74; *stream = 0x20; for ( j = 5; j < 153; j++ ) { if ( param[ * mask] & *( mask + 1 ) ) *stream += 0x80; mask += 2; if ( j % 8 ) *stream >>= 1; else stream++; } } else if ( mode == MR795 ) { mask = order_MR795; *stream = 0x28; for ( j = 5; j < 164; j++ ) { if ( param[ * mask] & *( mask + 1 ) ) *stream += 0x80; mask += 2; if ( j % 8 ) *stream >>= 1; else stream++; } } else if ( mode == MR102 ) { mask = order_MR102; *stream = 0x30; for ( j = 5; j < 209; j++ ) { if ( param[ * mask] & *( mask + 1 ) ) *stream += 0x80; mask += 2; if ( j % 8 ) *stream >>= 1; else stream++; } } else if ( mode == MR122 ) { mask = order_MR122; *stream = 0x38; for ( j = 5; j < 249; j++ ) { if ( param[ * mask] & *( mask + 1 ) ) *stream += 0x80; mask += 2; if ( j % 8 ) *stream >>= 1; else stream++; } } /* shift remaining bits */ *stream >>= ( 8 - j % 8 ); return( (int)block_size[mode] ); } #endif #endif /* * Sid_Sync_reset * * * Parameters: * st O: state structure * * Function: * Initializes state memory * * Returns: * void */ static void Sid_Sync_reset( enc_interface_State *st ) { st->sid_update_counter = 3; st->sid_handover_debt = 0; st->prev_ft = TX_SPEECH_GOOD; } /* * Encoder_Interface_Encode * * * Parameters: * st I: pointer to state structure * mode I: Speech Mode * speech I: Input speech * serial O: Output octet structure 3GPP or * ETSI serial stream * force_speech I: Force speech in DTX * * Function: * Encoding and packing one frame of speech * * Returns: * number of octets */ int Encoder_Interface_Encode( void *st, enum Mode mode, const Word16 *speech, #ifndef ETSI UWord8 *serial, #else Word16 *serial, #endif int force_speech ) { Word16 prm[PRMNO_MR122]; /* speech parameters, max size */ const Word16 *homing; /* pointer to homing frame */ Word16 homing_size; /* frame size for homing frame */ enc_interface_State * s; enum TXFrameType txFrameType; /* frame type */ int i, noHoming = 0; /* * used encoder mode, * if used_mode == -1, force VAD on */ enum Mode used_mode = -force_speech; s = ( enc_interface_State * )st; /* * Checks if all samples of the input frame matches the encoder * homing frame pattern, which is 0x0008 for all samples. */ for ( i = 0; i < 160; i++ ) { noHoming = speech[i] ^ 0x0008; if ( noHoming ) break; } if (noHoming){ Speech_Encode_Frame( s->encoderState, mode, speech, prm, &used_mode ); } else { switch ( mode ) { case MR122: homing = dhf_MR122; homing_size = 18; break; case MR102: homing = dhf_MR102; homing_size = 12; break; case MR795: homing = dhf_MR795; homing_size = 8; break; case MR74: homing = dhf_MR74; homing_size = 7; break; case MR67: homing = dhf_MR67; homing_size = 7; break; case MR59: homing = dhf_MR59; homing_size = 7; break; case MR515: homing = dhf_MR515; homing_size = 7; break; case MR475: homing = dhf_MR475; homing_size = 7; break; default: homing = NULL; homing_size = 0; break; } for( i = 0; i < homing_size; i++){ prm[i] = homing[i]; } /* rest of the parameters are zero */ memset(&prm[homing_size], 0, (PRMNO_MR122 - homing_size) << 1); used_mode = mode; } if ( used_mode == MRDTX ) { s->sid_update_counter--; if ( s->prev_ft == TX_SPEECH_GOOD ) { txFrameType = TX_SID_FIRST; s->sid_update_counter = 3; } else { /* TX_SID_UPDATE or TX_NO_DATA */ if ( ( s->sid_handover_debt > 0 ) && ( s->sid_update_counter > 2 ) ) { /* * ensure extra updates are properly delayed after * a possible SID_FIRST */ txFrameType = TX_SID_UPDATE; s->sid_handover_debt--; } else { if ( s->sid_update_counter == 0 ) { txFrameType = TX_SID_UPDATE; s->sid_update_counter = 8; } else { txFrameType = TX_NO_DATA; used_mode = 15; } } } } else { s->sid_update_counter = 8; txFrameType = TX_SPEECH_GOOD; } s->prev_ft = txFrameType; if ( noHoming == 0 ) { Speech_Encode_Frame_reset( s->encoderState, s->dtx ); Sid_Sync_reset( s ); } #ifndef ETSI #ifdef IF2 return Encoder3GPP( used_mode, prm, serial, txFrameType, mode ); #else return EncoderMMS( used_mode, prm, serial, txFrameType, mode ); #endif #else Prm2Bits( used_mode, prm, &serial[1] ); serial[0] = ( Word16 )txFrameType; serial[245] = ( Word16 )mode; return 500; #endif } /* * Encoder_Interface_init * * * Parameters: * dtx I: DTX flag * * Function: * Allocates state memory and initializes state memory * * Returns: * pointer to encoder interface structure */ void * Encoder_Interface_init( int dtx ) { enc_interface_State * s; /* allocate memory */ if ( ( s = ( enc_interface_State * ) malloc( sizeof( enc_interface_State ) ) ) == NULL ) { //fprintf( stderr, "Encoder_Interface_init: can not malloc state structure\n" ); return NULL; } s->encoderState = Speech_Encode_Frame_init( dtx ); Sid_Sync_reset( s ); s->dtx = dtx; return s; } /* * DecoderInterfaceExit * * * Parameters: * state I: state structure * * Function: * The memory used for state memory is freed * * Returns: * Void */ void Encoder_Interface_exit( void *state ) { enc_interface_State * s; s = ( enc_interface_State * )state; /* free memory */ Speech_Encode_Frame_exit( &s->encoderState ); free( s ); state = NULL; } h323plus/plugins/audio/gsm-amr/src/typedef.h0000644000175000017500000000155011341106247017634 0ustar markmark/* * =================================================================== * TS 26.104 * REL-5 V5.4.0 2004-03 * REL-6 V6.1.0 2004-03 * 3GPP AMR Floating-point Speech Codec * =================================================================== * */ /* This is valid for PC */ #ifndef _TYPEDEF_H #define _TYPEDEF_H // By Default we use VAD2 for Silence supression #define VAD2 1 typedef char Word8; typedef unsigned char UWord8; typedef float Float32; typedef double Float64; #if defined(__unix__) | defined(_VXWORKS) | defined(_RTEMS) | defined(_PSOS) // identifier structure modified to fix different platform compilation typedef short Word16; typedef int Word32; #else typedef short Word16; typedef long Word32; #endif #ifndef max #define max(a,b) ((a)>(b)?(a):(b)) #endif #ifndef min #define min(a,b) ((a)<(b)?(a):(b)) #endif #endif // !_TYPEDEF_H h323plus/plugins/audio/gsm-amr/src/amrcodec.txt0000644000175000017500000000056211341106247020343 0ustar markmarkThis plugin implements an interface to the AMR-NB codec for OpenH323. For licensing reasons, the amr codec itself is not distributed with this plugin. Instead, you must download it yourself from http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-610.zip Unzip that file, and unzip the file 26104-610_ANSI_C_source_code.zip within it into this directory. h323plus/plugins/audio/gsm-amr/src/sp_enc.h0000644000175000017500000000300311341106247017436 0ustar markmark/* * =================================================================== * TS 26.104 * R99 V3.3.0 2001-09 * REL-4 V4.2.0 2001-09 * 3GPP AMR Floating-point Speech Codec * =================================================================== * */ /* * sp_enc.h * * * Project: * AMR Floating-Point Codec * * Contains: * Defines interface to AMR encoder * */ #ifndef _SP_ENC_H #define _SP_ENC_H /* * include files */ #include "typedef.h" /* * definition of modes for encoder */ enum Mode { MR475 = 0, MR515, MR59, MR67, MR74, MR795, MR102, MR122, MRDTX }; #ifdef __cplusplus extern "C" { #endif /* * Function prototypes */ /* * initialize one instance of the speech encoder * Stores pointer to filter status struct in *st. This pointer has to * be passed to Speech_Encode_Frame in each call. * returns 0 on success */ extern void *Speech_Encode_Frame_init (int dtx); /* * reset speech encoder (i.e. set state memory to zero) * returns 0 on success */ extern int Speech_Encode_Frame_reset(void *st, int dtx); /* * de-initialize speech encoder (i.e. free status struct) * stores NULL in *st */ extern void Speech_Encode_Frame_exit (void **st); /* * Encodes one speech frame * Returns analysis parameters */ extern void Speech_Encode_Frame (void *st, enum Mode mode, const short *newSpeech, short *prm, enum Mode *usedMode); #ifdef __cplusplus } #endif #endif // !_SP_ENC_H h323plus/plugins/audio/gsm-amr/src/sp_dec.c0000644000175000017500000045635411341106247017444 0ustar markmark/* * =================================================================== * TS 26.104 * REL-5 V5.4.0 2004-03 * REL-6 V6.1.0 2004-03 * 3GPP AMR Floating-point Speech Codec * =================================================================== * */ /* * sp_dec.c * * * Project: * AMR Floating-Point Codec * * Contains: * This module contains all the functions needed decoding AMR * encoder parameters to 16-bit speech samples * */ /* * include files */ #include #include #include #include #include "sp_dec.h" #include "rom_dec.h" /* * Declare structure types */ enum DTXStateType { SPEECH = 0, DTX, DTX_MUTE }; /* * Decoder memory structure */ typedef struct { /* history vector of past synthesis speech energy */ Word32 frameEnergyHist[L_ENERGYHIST]; /* state flags */ Word16 bgHangover; /* counter; number of frames after last speech frame */ }Bgn_scdState; typedef struct { Word32 hangCount; /* counter; */ /* history vector of past synthesis speech energy */ Word32 cbGainHistory[L_CBGAINHIST]; Word16 hangVar; /* counter; */ }Cb_gain_averageState; typedef struct { Word32 lsp_meanSave[M]; /* Averaged LSPs saved for efficiency */ }lsp_avgState; typedef struct { Word32 past_r_q[M]; /* Past quantized prediction error, Q15 */ Word32 past_lsf_q[M]; /* Past dequantized lsfs, Q15 */ }D_plsfState; typedef struct { Word32 pbuf[5]; Word32 past_gain_pit; Word32 prev_gp; }ec_gain_pitchState; typedef struct { Word32 gbuf[5]; Word32 past_gain_code; Word32 prev_gc; }ec_gain_codeState; typedef struct { /* * normal MA predictor memory, Q10 * (contains 20*log10(quaErr)) */ Word32 past_qua_en[4]; /* * MA predictor memory for MR122 mode, Q10 * (contains log2(quaErr)) */ Word32 past_qua_en_MR122[4]; }gc_predState; typedef struct { Word32 gainMem[PHDGAINMEMSIZE]; Word32 prevCbGain; Word32 prevState; Word16 lockFull; Word16 onset; }ph_dispState; typedef struct { enum DTXStateType dtxGlobalState; /* contains previous state */ Word32 log_en; Word32 old_log_en; Word32 pn_seed_rx; Word32 lsp[M]; Word32 lsp_old[M]; Word32 lsf_hist[M * DTX_HIST_SIZE]; Word32 lsf_hist_mean[M * DTX_HIST_SIZE]; Word32 log_en_hist[DTX_HIST_SIZE]; Word32 true_sid_period_inv; Word16 since_last_sid; Word16 lsf_hist_ptr; Word16 log_pg_mean; Word16 log_en_hist_ptr; Word16 log_en_adjust; Word16 dtxHangoverCount; Word16 decAnaElapsedCount; Word16 sid_frame; Word16 valid_data; Word16 dtxHangoverAdded; /* updated in main decoder */ Word16 data_updated; /* marker to know if CNI data is ever renewed */ }dtx_decState; typedef struct { Word32 past_gain; }agcState; typedef struct { /* Excitation vector */ Word32 old_exc[L_SUBFR + PIT_MAX + L_INTERPOL]; Word32 *exc; Word32 lsp_old[M]; /* Filter's memory */ Word32 mem_syn[M]; /* pitch sharpening */ Word32 sharp; Word32 old_T0; /* Variable holding received ltpLag, used in background noise and BFI */ Word32 T0_lagBuff; /* Variables for the source characteristic detector (SCD) */ Word32 inBackgroundNoise; Word32 voicedHangover; Word32 ltpGainHistory[9]; /* Memories for bad frame handling */ Word32 excEnergyHist[9]; Word16 prev_bf; Word16 prev_pdf; Word16 state; Word16 nodataSeed; Bgn_scdState * background_state; Cb_gain_averageState * Cb_gain_averState; lsp_avgState * lsp_avg_st; D_plsfState * lsfState; ec_gain_pitchState * ec_gain_p_st; ec_gain_codeState * ec_gain_c_st; gc_predState * pred_state; ph_dispState * ph_disp_st; dtx_decState * dtxDecoderState; }Decoder_amrState; typedef struct { Word32 res2[L_SUBFR]; Word32 mem_syn_pst[M]; Word32 synth_buf[M + L_FRAME]; Word32 preemph_state_mem_pre; agcState * agc_state; }Post_FilterState; typedef struct { Word32 y2_hi; Word32 y2_lo; Word32 y1_hi; Word32 y1_lo; Word32 x0; Word32 x1; }Post_ProcessState; typedef struct { Decoder_amrState * decoder_amrState; Post_FilterState * post_state; Post_ProcessState * postHP_state; }Speech_Decode_FrameState; /* * CodAmrReset * * * Parameters: * state B: state structure * mode I: AMR mode * * Function: * Resets state memory * * Returns: * void */ static void Decoder_amr_reset( Decoder_amrState *state, enum Mode mode ) { Word32 i; /* Cb_gain_average_reset */ memset(state->Cb_gain_averState->cbGainHistory, 0, L_CBGAINHIST << 2); state->Cb_gain_averState->hangVar = 0; state->Cb_gain_averState->hangCount= 0; /* Initialize static pointer */ state->exc = state->old_exc + PIT_MAX + L_INTERPOL; /* Static vectors to zero */ memset( state->old_exc, 0, ( PIT_MAX + L_INTERPOL )<<2 ); if ( mode != MRDTX ) memset( state->mem_syn, 0, M <<2 ); /* initialize pitch sharpening */ state->sharp = SHARPMIN; state->old_T0 = 40; /* Initialize state->lsp_old [] */ if ( mode != MRDTX ) { state->lsp_old[0] = 30000; state->lsp_old[1] = 26000; state->lsp_old[2] = 21000; state->lsp_old[3] = 15000; state->lsp_old[4] = 8000; state->lsp_old[5] = 0; state->lsp_old[6] = -8000; state->lsp_old[7] = -15000; state->lsp_old[8] = -21000; state->lsp_old[9] = -26000; } /* Initialize memories of bad frame handling */ state->prev_bf = 0; state->prev_pdf = 0; state->state = 0; state->T0_lagBuff = 40; state->inBackgroundNoise = 0; state->voicedHangover = 0; if ( mode != MRDTX ) memset( state->excEnergyHist, 0, 9 <<2 ); memset( state->ltpGainHistory, 0, 9 <<2 ); if ( mode != MRDTX ) { state->lsp_avg_st->lsp_meanSave[0] = 1384; state->lsp_avg_st->lsp_meanSave[1] = 2077; state->lsp_avg_st->lsp_meanSave[2] = 3420; state->lsp_avg_st->lsp_meanSave[3] = 5108; state->lsp_avg_st->lsp_meanSave[4] = 6742; state->lsp_avg_st->lsp_meanSave[5] = 8122; state->lsp_avg_st->lsp_meanSave[6] = 9863; state->lsp_avg_st->lsp_meanSave[7] = 11092; state->lsp_avg_st->lsp_meanSave[8] = 12714; state->lsp_avg_st->lsp_meanSave[9] = 13701; } memset( state->lsfState->past_r_q, 0, M <<2 ); /* Past dequantized lsfs */ state->lsfState->past_lsf_q[0] = 1384; state->lsfState->past_lsf_q[1] = 2077; state->lsfState->past_lsf_q[2] = 3420; state->lsfState->past_lsf_q[3] = 5108; state->lsfState->past_lsf_q[4] = 6742; state->lsfState->past_lsf_q[5] = 8122; state->lsfState->past_lsf_q[6] = 9863; state->lsfState->past_lsf_q[7] = 11092; state->lsfState->past_lsf_q[8] = 12714; state->lsfState->past_lsf_q[9] = 13701; for ( i = 0; i < 5; i++ ) state->ec_gain_p_st->pbuf[i] = 1640; state->ec_gain_p_st->past_gain_pit = 0; state->ec_gain_p_st->prev_gp = 16384; for ( i = 0; i < 5; i++ ) state->ec_gain_c_st->gbuf[i] = 1; state->ec_gain_c_st->past_gain_code = 0; state->ec_gain_c_st->prev_gc = 1; if ( mode != MRDTX ) { for ( i = 0; i < NPRED; i++ ) { state->pred_state->past_qua_en[i] = MIN_ENERGY; state->pred_state->past_qua_en_MR122[i] = MIN_ENERGY_MR122; } } state->nodataSeed = 21845; /* Static vectors to zero */ memset( state->background_state->frameEnergyHist, 0, L_ENERGYHIST <<2 ); /* Initialize hangover handling */ state->background_state->bgHangover = 0; /* phDispReset */ memset( state->ph_disp_st->gainMem, 0, PHDGAINMEMSIZE <<2 ); state->ph_disp_st->prevState = 0; state->ph_disp_st->prevCbGain = 0; state->ph_disp_st->lockFull = 0; state->ph_disp_st->onset = 0; /* assume no onset in start */ if ( mode != MRDTX ) { state->dtxDecoderState->since_last_sid = 0; state->dtxDecoderState->true_sid_period_inv = 8192; state->dtxDecoderState->log_en = 3500; state->dtxDecoderState->old_log_en = 3500; /* low level noise for better performance in DTX handover cases*/ state->dtxDecoderState->pn_seed_rx = PN_INITIAL_SEED; /* Initialize state->lsp [] */ state->dtxDecoderState->lsp[0] = 30000; state->dtxDecoderState->lsp[1] = 26000; state->dtxDecoderState->lsp[2] = 21000; state->dtxDecoderState->lsp[3] = 15000; state->dtxDecoderState->lsp[4] = 8000; state->dtxDecoderState->lsp[5] = 0; state->dtxDecoderState->lsp[6] = -8000; state->dtxDecoderState->lsp[7] = -15000; state->dtxDecoderState->lsp[8] = -21000; state->dtxDecoderState->lsp[9] = -26000; /* Initialize state->lsp_old [] */ state->dtxDecoderState->lsp_old[0] = 30000; state->dtxDecoderState->lsp_old[1] = 26000; state->dtxDecoderState->lsp_old[2] = 21000; state->dtxDecoderState->lsp_old[3] = 15000; state->dtxDecoderState->lsp_old[4] = 8000; state->dtxDecoderState->lsp_old[5] = 0; state->dtxDecoderState->lsp_old[6] = -8000; state->dtxDecoderState->lsp_old[7] = -15000; state->dtxDecoderState->lsp_old[8] = -21000; state->dtxDecoderState->lsp_old[9] = -26000; state->dtxDecoderState->lsf_hist_ptr = 0; state->dtxDecoderState->log_pg_mean = 0; state->dtxDecoderState->log_en_hist_ptr = 0; /* initialize decoder lsf history */ state->dtxDecoderState->lsf_hist[0] = 1384; state->dtxDecoderState->lsf_hist[1] = 2077; state->dtxDecoderState->lsf_hist[2] = 3420; state->dtxDecoderState->lsf_hist[3] = 5108; state->dtxDecoderState->lsf_hist[4] = 6742; state->dtxDecoderState->lsf_hist[5] = 8122; state->dtxDecoderState->lsf_hist[6] = 9863; state->dtxDecoderState->lsf_hist[7] = 11092; state->dtxDecoderState->lsf_hist[8] = 12714; state->dtxDecoderState->lsf_hist[9] = 13701; for ( i = 1; i < DTX_HIST_SIZE; i++ ) { memcpy( &state->dtxDecoderState->lsf_hist[M * i], &state-> dtxDecoderState->lsf_hist[0], M <<2 ); } memset( state->dtxDecoderState->lsf_hist_mean, 0, M * DTX_HIST_SIZE <<2 ); /* initialize decoder log frame energy */ for ( i = 0; i < DTX_HIST_SIZE; i++ ) { state->dtxDecoderState->log_en_hist[i] = state->dtxDecoderState->log_en ; } state->dtxDecoderState->log_en_adjust = 0; state->dtxDecoderState->dtxHangoverCount = DTX_HANG_CONST; state->dtxDecoderState->decAnaElapsedCount = 31; state->dtxDecoderState->sid_frame = 0; state->dtxDecoderState->valid_data = 0; state->dtxDecoderState->dtxHangoverAdded = 0; state->dtxDecoderState->dtxGlobalState = DTX; state->dtxDecoderState->data_updated = 0; } return; } /* * rx_dtx_handler * * * Parameters: * st->dtxGlobalState I: DTX state * st->since_last_sid B: Frames after last SID frame * st->data_updated I: SID update flag * st->decAnaElapsedCount B: state machine that synch with the GSMEFR txDtx machine * st->dtxHangoverAdded B: DTX hangover * st->sid_frame O: SID frame indicator * st->valid_data O: Vaild data indicator * frame_type O: Frame type * * Function: * Find the new DTX state * * Returns: * DTXStateType DTX, DTX_MUTE or SPEECH */ static enum DTXStateType rx_dtx_handler( dtx_decState *st, enum RXFrameType frame_type ) { enum DTXStateType newState; enum DTXStateType encState; /* DTX if SID frame or previously in DTX{_MUTE} and (NO_RX OR BAD_SPEECH) */ if ( table_SID[frame_type] | ( ( st->dtxGlobalState != SPEECH ) & table_speech_bad[frame_type] ) ) { newState = DTX; /* stay in mute for these input types */ if ( ( st->dtxGlobalState == DTX_MUTE ) & table_mute[frame_type] ) { newState = DTX_MUTE; } /* * evaluate if noise parameters are too old * since_last_sid is reset when CN parameters have been updated */ st->since_last_sid += 1; /* no update of sid parameters in DTX for a long while */ if ((frame_type != RX_SID_UPDATE) & ( st->since_last_sid > DTX_MAX_EMPTY_THRESH )) { newState = DTX_MUTE; } } else { newState = SPEECH; st->since_last_sid = 0; } /* * reset the decAnaElapsed Counter when receiving CNI data the first * time, to robustify counter missmatch after handover * this might delay the bwd CNI analysis in the new decoder slightly. */ if ( ( st->data_updated == 0 ) & ( frame_type == RX_SID_UPDATE ) ) { st->decAnaElapsedCount = 0; } /* * update the SPE-SPD DTX hangover synchronization * to know when SPE has added dtx hangover */ st->decAnaElapsedCount += 1; st->dtxHangoverAdded = 0; encState = SPEECH; if ( table_DTX[frame_type] ) { encState = DTX; if( ( frame_type == RX_NO_DATA ) & ( newState == SPEECH ) ) { encState = SPEECH; } } if ( encState == SPEECH ) { st->dtxHangoverCount = DTX_HANG_CONST; } else { if ( st->decAnaElapsedCount > DTX_ELAPSED_FRAMES_THRESH ) { st->dtxHangoverAdded = 1; st->decAnaElapsedCount = 0; st->dtxHangoverCount = 0; } else if ( st->dtxHangoverCount == 0 ) { st->decAnaElapsedCount = 0; } else { st->dtxHangoverCount -= 1; } } if ( newState != SPEECH ) { /* * DTX or DTX_MUTE * CN data is not in a first SID, first SIDs are marked as SID_BAD * but will do backwards analysis if a hangover period has been added * according to the state machine above */ st->sid_frame = 0; st->valid_data = 0; if ( frame_type == RX_SID_FIRST ) { st->sid_frame = 1; } else if ( frame_type == RX_SID_UPDATE ) { st->sid_frame = 1; st->valid_data = 1; } else if ( frame_type == RX_SID_BAD ) { st->sid_frame = 1; /* use old data */ st->dtxHangoverAdded = 0; } } /* newState is used by both SPEECH AND DTX synthesis routines */ return newState; } /* * Lsf_lsp * * * Parameters: * lsf I: vector of LSFs * lsp O: vector of LSPs * * Function: * Transformation lsf to lsp, order M * * Returns: * void */ static void Lsf_lsp( Word32 lsf[], Word32 lsp[] ) { Word32 i, ind, offset, tmp; for ( i = 0; i < M; i++ ) { /* ind = b8-b15 of lsf[i] */ ind = lsf[i] >> 8; /* offset = b0-b7 of lsf[i] */ offset = lsf[i] & 0x00ff; /* lsp[i] = table[ind]+ ((table[ind+1]-table[ind])*offset) / 256 */ tmp = ( ( cos_table[ind+1]-cos_table[ind] )*offset ) << 1; lsp[i] = cos_table[ind] + ( tmp >> 9 ); } return; } /* * D_plsf_3 * * * Parameters: * st->past_lsf_q I: Past dequantized LFSs * st->past_r_q B: past quantized residual * mode I: AMR mode * bfi B: bad frame indicator * indice I: quantization indices of 3 submatrices, Q0 * lsp1_q O: quantized 1st LSP vector * * Function: * Decodes the LSP parameters using the received quantization indices. * 1st order MA prediction and split by 3 vector quantization (split-VQ) * * Returns: * void */ static void D_plsf_3( D_plsfState *st, enum Mode mode, Word16 bfi, Word16 * indice, Word32 *lsp1_q ) { Word32 lsf1_r[M], lsf1_q[M]; Word32 i, index, temp; const Word32 *p_cb1, *p_cb2, *p_cb3, *p_dico; /* if bad frame */ if ( bfi != 0 ) { /* use the past LSFs slightly shifted towards their mean */ for ( i = 0; i < M; i++ ) { /* lsfi_q[i] = ALPHA*past_lsf_q[i] + ONE_ALPHA*meanLsf[i]; */ lsf1_q[i] = ( ( st->past_lsf_q[i] * ALPHA ) >> 15 ) + ( ( mean_lsf_3[i] * ONE_ALPHA ) >> 15 ); } /* estimate past quantized residual to be used in next frame */ if ( mode != MRDTX ) { for ( i = 0; i < M; i++ ) { /* temp = meanLsf[i] + pastR2_q[i] * pred_fac; */ temp = mean_lsf_3[i] + ( ( st->past_r_q[i] * pred_fac[i] ) >> 15 ); st->past_r_q[i] = lsf1_q[i] - temp; } } else { for ( i = 0; i < M; i++ ) { /* temp = meanLsf[i] + pastR2_q[i]; */ temp = mean_lsf_3[i] + st->past_r_q[i]; st->past_r_q[i] = lsf1_q[i] - temp; } } } /* if good LSFs received */ else { if ( ( mode == MR475 ) | ( mode == MR515 ) ) { /* MR475, MR515 */ p_cb1 = dico1_lsf_3; p_cb2 = dico2_lsf_3; p_cb3 = mr515_3_lsf; } else if ( mode == MR795 ) { /* MR795 */ p_cb1 = mr795_1_lsf; p_cb2 = dico2_lsf_3; p_cb3 = dico3_lsf_3; } else { /* MR59, MR67, MR74, MR102, MRDTX */ p_cb1 = dico1_lsf_3; p_cb2 = dico2_lsf_3; p_cb3 = dico3_lsf_3; } /* decode prediction residuals from 3 received indices */ index = *indice++; p_dico = &p_cb1[index + index + index]; index = *indice++; lsf1_r[0] = *p_dico++; lsf1_r[1] = *p_dico++; lsf1_r[2] = *p_dico++; if ( ( mode == MR475 ) | ( mode == MR515 ) ) { /* MR475, MR515 only using every second entry */ index = index << 1; } p_dico = &p_cb2[index + index + index]; index = *indice++; lsf1_r[3] = *p_dico++; lsf1_r[4] = *p_dico++; lsf1_r[5] = *p_dico++; p_dico = &p_cb3[index << 2]; lsf1_r[6] = *p_dico++; lsf1_r[7] = *p_dico++; lsf1_r[8] = *p_dico++; lsf1_r[9] = *p_dico++; /* Compute quantized LSFs and update the past quantized residual */ if ( mode != MRDTX ) { for ( i = 0; i < M; i++ ) { lsf1_q[i] = lsf1_r[i] + ( mean_lsf_3[i] + ( ( st->past_r_q[i] * pred_fac[i] ) >> 15 ) ); } memcpy( st->past_r_q, lsf1_r, M <<2 ); } else { for ( i = 0; i < M; i++ ) { lsf1_q[i] = lsf1_r[i] + ( mean_lsf_3[i] + st->past_r_q[i] ); } memcpy( st->past_r_q, lsf1_r, M <<2 ); } } /* verification that LSFs has minimum distance of LSF_GAP Hz */ temp = LSF_GAP; for ( i = 0; i < M; i++ ) { if ( lsf1_q[i] < temp ) { lsf1_q[i] = temp; } temp = lsf1_q[i] + LSF_GAP; } memcpy( st->past_lsf_q, lsf1_q, M <<2 ); /* convert LSFs to the cosine domain */ Lsf_lsp( lsf1_q, lsp1_q ); return; } /* * pseudonoise * * * Parameters: * shift_reg B: Old CN generator shift register state * no_bits I: Number of bits * * Function: * pseudonoise * * Returns: * noise_bits */ static Word32 pseudonoise( Word32 *shift_reg, Word32 no_bits ) { Word32 noise_bits, Sn, i; Word32 s_reg; s_reg = *shift_reg; noise_bits = 0; for ( i = 0; i < no_bits; i++ ) { /* State n == 31 */ Sn = s_reg & 0x00000001L; /* State n == 3 */ if ( s_reg & 0x10000000L ) { Sn = Sn ^ 0x1L; } else { Sn = Sn ^ 0x0L; } noise_bits = ( noise_bits << 1 ) | ( s_reg & 1 ); s_reg = s_reg >> 1; if ( Sn & 1 ) { s_reg = s_reg | 0x40000000L; } } *shift_reg = s_reg; return noise_bits; } /* * Lsp_lsf * * * Parameters: * lsp I: LSP vector (range: -1<=val<1) * lsf O: LSF vector Old CN generator shift register state * * Function: * Transformation lsp to lsf, LPC order M * lsf[i] = arccos(lsp[i])/(2*pi) * * Returns: * void */ static void Lsp_lsf( Word32 lsp[], Word32 lsf[] ) { Word32 i, ind = 63; /* begin at end of table -1 */ for ( i = M - 1; i >= 0; i-- ) { /* find value in table that is just greater than lsp[i] */ while ( cos_table[ind] < lsp[i] ) { ind--; } lsf[i] = ( ( ( ( lsp[i] - cos_table[ind] ) * acos_slope[ind] ) + 0x800 ) >> 12 ) + ( ind << 8 ); } return; } /* * Reorder_lsf * * * Parameters: * lsf B: vector of LSFs (range: 0<=val<=0.5) * min_dist I: minimum required distance * * Function: * Make sure that the LSFs are properly ordered and to keep a certain minimum * distance between adjacent LSFs. LPC order = M. * * Returns: * void */ static void Reorder_lsf( Word32 *lsf, Word32 min_dist ) { Word32 lsf_min, i; lsf_min = min_dist; for ( i = 0; i < M; i++ ) { if ( lsf[i] < lsf_min ) { lsf[i] = lsf_min; } lsf_min = lsf[i] + min_dist; } } /* VC5.0 Global optimization does not work with this function */ #if _MSC_VER == 1100 #pragma optimize( "g", off ) #endif /* * Get_lsp_pol * * * Parameters: * lsp I: line spectral frequencies * f O: polynomial F1(z) or F2(z) * * Function: * Find the polynomial F1(z) or F2(z) from the LSPs. * * F1(z) = product ( 1 - 2 lsp[i] z^-1 + z^-2 ) * i=0,2,4,6,8 * F2(z) = product ( 1 - 2 lsp[i] z^-1 + z^-2 ) * i=1,3,5,7,9 * * where lsp[] is the LSP vector in the cosine domain. * * The expansion is performed using the following recursion: * * f[0] = 1 * b = -2.0 * lsp[0] * f[1] = b * for i=2 to 5 do * b = -2.0 * lsp[2*i-2]; * f[i] = b*f[i-1] + 2.0*f[i-2]; * for j=i-1 down to 2 do * f[j] = f[j] + b*f[j-1] + f[j-2]; * f[1] = f[1] + b; * * Returns: * void */ static void Get_lsp_pol( Word32 *lsp, Word32 *f ) { volatile Word32 f0, f1, f2, f3, f4, f5; Word32 l1, l2, l3, l4; /* f[0] = 1.0; */ f0 = 16777216L; /* f1 = *lsp * -1024; */ f1 = -lsp[0] << 10; l1 = lsp[2]; l2 = lsp[4]; l3 = lsp[6]; l4 = lsp[8]; f2 = f0 << 1; f2 -= ( ( ( f1 >> 16 ) * l1 ) + ( ( ( f1 & 0xFFFE ) * l1 ) >> 16 ) ) << 2; f1 -= l1 << 10; f3 = f1 << 1; f3 -= ( ( ( f2 >> 16 ) * l2 ) + ( ( ( f2 & 0xFFFE ) * l2 ) >> 16 ) ) << 2; f2 += f0; f2 -= ( ( ( f1 >> 16 ) * l2 ) + ( ( ( f1 & 0xFFFE ) * l2 ) >> 16 ) ) << 2; f1 -= l2 << 10; f4 = f2 << 1; f4 -= ( ( ( f3 >> 16 ) * l3 ) + ( ( ( f3 & 0xFFFE ) * l3 ) >> 16 ) ) << 2; f3 += f1; f3 -= ( ( ( f2 >> 16 ) * l3 ) + ( ( ( f2 & 0xFFFE ) * l3 ) >> 16 ) ) << 2; f2 += f0; f2 -= ( ( ( f1 >> 16 ) * l3 ) + ( ( ( f1 & 0xFFFE ) * l3 ) >> 16 ) ) << 2; f1 -= l3 << 10; f5 = f3 << 1; f5 -= ( ( ( f4 >> 16 ) * l4 ) + ( ( ( f4 & 0xFFFE ) * l4 ) >> 16 ) ) << 2; f4 += f2; f4 -= ( ( ( f3 >> 16 ) * l4 ) + ( ( ( f3 & 0xFFFE ) * l4 ) >> 16 ) ) << 2; f3 += f1; f3 -= ( ( ( f2 >> 16 ) * l4 ) + ( ( ( f2 & 0xFFFE ) * l4 ) >> 16 ) ) << 2; f2 += f0; f2 -= ( ( ( f1 >> 16 ) * l4 ) + ( ( ( f1 & 0xFFFE ) * l4 ) >> 16 ) ) << 2; f1 -= l4 << 10; f[0] = f0; f[1] = f1; f[2] = f2; f[3] = f3; f[4] = f4; f[5] = f5; return; } #if _MSC_VER == 1100 #pragma optimize( "", on ) #endif /* * Lsp_Az * * * Parameters: * lsp I: Line spectral frequencies * a O: Predictor coefficients * * Function: * Converts from the line spectral pairs (LSP) to LP coefficients, * for a 10th order filter. * * Find the coefficients of F1(z) and F2(z) * Multiply F1(z) by 1+z^{-1} and F2(z) by 1-z^{-1} * A(z) = ( F1(z) + F2(z) ) / 2 * * Returns: * void */ static void Lsp_Az( Word32 lsp[], Word32 a[] ) { Word32 f1[6], f2[6]; Word32 T0, i, j; Get_lsp_pol( &lsp[0], f1 ); Get_lsp_pol( &lsp[1], f2 ); for ( i = 5; i > 0; i-- ) { f1[i] += f1[i - 1]; f2[i] -= f2[i - 1]; } a[0] = 4096; for ( i = 1, j = 10; i <= 5; i++, j-- ) { T0 = f1[i] + f2[i]; a[i] = (Word16)(T0 >> 13); /* emulate fixed point bug */ if ( ( T0 & 4096 ) != 0 ) { a[i]++; } T0 = f1[i] - f2[i]; a[j] = (Word16)(T0 >> 13); /* emulate fixed point bug */ if ( ( T0 & 4096 ) != 0 ) { a[j]++; } } return; } /* * A_Refl * * * Parameters: * a I: Directform coefficients * refl O: Reflection coefficients * * Function: * Converts from the directform coefficients to reflection coefficients * * Returns: * void */ static void A_Refl( Word32 a[], Word32 refl[] ) { /* local variables */ int normShift; Word32 aState[M], bState[M]; Word32 normProd, acc, temp, mult, scale, i, j; /* initialize states */ memcpy( aState, a, M <<2 ); /* backward Levinson recursion */ for ( i = M - 1; i >= 0; i-- ) { if ( labs( aState[i] ) >= 4096 ) { goto ExitRefl; } refl[i] = aState[i] << 3; temp = ( refl[i] * refl[i] ) << 1; acc = ( MAX_32 - temp ); normShift=0; if (acc != 0){ temp = acc; while (!(temp & 0x40000000)) { normShift++; temp = temp << 1; } } else{ normShift = 0; } scale = 15 - normShift; acc = ( acc << normShift ); temp = ( acc + ( Word32 )0x00008000L ); if ( temp > 0 ) { normProd = temp >> 16; mult = 0x20000000L / normProd; } else mult = 16384; for ( j = 0; j < i; j++ ) { acc = aState[j] << 16; acc -= ( refl[i] * aState[i - j - 1] ) << 1; temp = ( acc + ( Word32 )0x00008000L ) >> 16; temp = ( mult * temp ) << 1; if ( scale > 0 ) { if ( ( temp & ( ( Word32 )1 << ( scale - 1 ) ) ) != 0 ) { temp = ( temp >> scale ) + 1; } else temp = ( temp >> scale ); } else temp = ( temp >> scale ); if ( labs( temp ) > 32767 ) { goto ExitRefl; } bState[j] = temp; } memcpy( aState, bState, i <<2 ); } return; ExitRefl: memset( refl, 0, M <<2 ); } /* * Log2_norm * * * Parameters: * x I: input value * exp I: exponent * exponent O: Integer part of Log2. (range: 0<=val<=30) * fraction O: Fractional part of Log2. (range: 0<=val<1) * * Function: * Computes log2 * * Computes log2(L_x, exp), where L_x is positive and * normalized, and exp is the normalisation exponent * If L_x is negative or zero, the result is 0. * * The function Log2(L_x) is approximated by a table and linear * interpolation. The following steps are used to compute Log2(L_x) * * exponent = 30-normExponent * i = bit25-b31 of L_x; 32<=i<=63 (because of normalization). * a = bit10-b24 * i -=32 * fraction = table[i]<<16 - (table[i] - table[i+1]) * a * 2 * * Returns: * void */ static void Log2_norm( Word32 x, Word32 exp, Word32 *exponent, Word32 * fraction ) { Word32 y, i, a; if ( x <= 0 ) { *exponent = 0; *fraction = 0; return; } /* Extract b25-b31 */ i = x >> 25; i = i - 32; /* Extract b10-b24 of fraction */ a = x >> 9; a = a & 0xFFFE; /* 2a */ /* fraction */ y = ( log2_table[i] << 16 ) - a * ( log2_table[i] - log2_table[i + 1] ); *fraction = y >> 16; *exponent = 30 - exp; return; } /* * Log2 * * * Parameters: * x I: input value * exponent O: Integer part of Log2. (range: 0<=val<=30) * fraction O: Fractional part of Log2. (range: 0<=val<1) * * Function: * Computes log2(L_x) * If x is negative or zero, the result is 0. * * Returns: * void */ static void Log2( Word32 x, Word32 *exponent, Word32 *fraction ) { int tmp, exp=0; if (x != 0){ tmp = x; while (!((tmp & 0x80000000) ^ ((tmp & 0x40000000) << 1))) { exp++; tmp = tmp << 1; } } Log2_norm( x <> (30-exponent) (with rounding) * * Returns: * result (range: 0<=val<=0x7fffffff) */ static Word32 Pow2( Word32 exponent, Word32 fraction ) { Word32 i, a, tmp, x, exp; /* Extract b10-b16 of fraction */ i = fraction >> 10; /* Extract b0-b9 of fraction */ a = ( fraction << 5 ) & 0x7fff; /* table[i] << 16 */ x = pow2_table[i] << 16; /* table[i] - table[i+1] */ tmp = pow2_table[i] - pow2_table[i + 1]; /* L_x -= tmp*a*2 */ x -= ( tmp * a ) << 1; if ( exponent >= -1 ) { exp = ( 30 - exponent ); /* Rounding */ if ( ( x & ( ( Word32 )1 << ( exp - 1 ) ) ) != 0 ) { x = ( x >> exp ) + 1; } else x = x >> exp; } else x = 0; return( x ); } /* * Build_CN_code * * * Parameters: * seed B: Old CN generator shift register state * cod O: Generated CN fixed codebook vector * * Function: * Generate CN fixed codebook vector * * Returns: * void */ static void Build_CN_code( Word32 *seed, Word32 cod[] ) { Word32 i, j, k; memset( cod, 0, L_SUBFR <<2 ); for ( k = 0; k < 10; k++ ) { i = pseudonoise( seed, 2 ); /* generate pulse position */ i = ( i * 20 ) >> 1; i = ( i + k ); j = pseudonoise( seed, 1 ); /* generate sign */ if ( j > 0 ) { cod[i] = 4096; } else { cod[i] = -4096; } } return; } /* * Build_CN_param * * * Parameters: * seed B: Old CN generator shift register state * nParam I: number of params * paramSizeTable I: size of params * parm O: CN Generated params * * Function: * Generate parameters for comfort noise generation * * Returns: * void */ static void Build_CN_param( Word16 *seed, enum Mode mode, Word16 parm[] ) { Word32 i; const Word32 *p; *seed = ( Word16 )( ( *seed * 31821 ) + 13849L ); p = &window_200_40[ * seed & 0x7F]; switch ( mode ) { case MR122: for ( i = 0; i < PRMNO_MR122; i++ ) { parm[i] = ( Word16 )( *p++ & ~( 0xFFFF << bitno_MR122[i] ) ); } break; case MR102: for ( i = 0; i < PRMNO_MR102; i++ ) { parm[i] = ( Word16 )( *p++ & ~( 0xFFFF << bitno_MR102[i] ) ); } break; case MR795: for ( i = 0; i < PRMNO_MR795; i++ ) { parm[i] = ( Word16 )( *p++ & ~( 0xFFFF << bitno_MR795[i] ) ); } break; case MR74: for ( i = 0; i < PRMNO_MR74; i++ ) { parm[i] = ( Word16 )( *p++ & ~( 0xFFFF << bitno_MR74[i] ) ); } break; case MR67: for ( i = 0; i < PRMNO_MR67; i++ ) { parm[i] = ( Word16 )( *p++ & ~( 0xFFFF << bitno_MR67[i] ) ); } break; case MR59: for ( i = 0; i < PRMNO_MR59; i++ ) { parm[i] = ( Word16 )( *p++ & ~( 0xFFFF << bitno_MR59[i] ) ); } break; case MR515: for ( i = 0; i < PRMNO_MR515; i++ ) { parm[i] = ( Word16 )( *p++ & ~( 0xFFFF << bitno_MR515[i] ) ); } break; case MR475: for ( i = 0; i < PRMNO_MR475; i++ ) { parm[i] = ( Word16 )( *p++ & ~( 0xFFFF << bitno_MR475[i] ) ); } break; } } /* * Syn_filt * * * Parameters: * a I: prediction coefficients [M+1] * x I: input signal * y O: output signal * lg I: size of filtering * mem B: memory associated with this filtering * update I: 0=no update, 1=update of memory. * * Function: * Perform synthesis filtering through 1/A(z). * * Returns: * void */ static Word32 Syn_filt( Word32 a[], Word32 x[], Word32 y[], Word32 lg, Word32 mem[] , Word32 update ) { Word32 tmp[50]; /* malloc is slow */ Word32 s, a0, overflow = 0; Word32 *yy, *yy_limit; /* Copy mem[] to yy[] */ memcpy( tmp, mem, 40 ); yy = tmp + M; yy_limit = yy + lg; a0 = a[0]; /* Do the filtering. */ while ( yy < yy_limit ) { s = *x++ * a0; s -= yy[-1] * a[1]; s -= yy[-2] * a[2]; s -= yy[-3] * a[3]; s -= yy[-4] * a[4]; s -= yy[-5] * a[5]; s -= yy[-6] * a[6]; s -= yy[-7] * a[7]; s -= yy[-8] * a[8]; s -= yy[-9] * a[9]; s -= yy[-10] * a[10]; if ( labs( s ) < 0x7ffffff ) *yy = ( s + 0x800L ) >> 12; else if ( s > 0 ) { *yy = 32767; overflow = 1; } else { *yy = -32768; overflow = 1; } yy++; } memcpy( y, &tmp[M], lg <<2 ); /* Update of memory if update==1 */ if ( update ) { memcpy( mem, &y[lg - M], 40 ); } return overflow; } /* * Syn_filt_overflow * * * Parameters: * a I: prediction coefficients [M+1] * x I: input signal * y O: output signal * lg I: size of filtering * mem B: memory associated with this filtering * update I: 0=no update, 1=update of memory. * * Function: * Perform synthesis filtering through 1/A(z). * Saturate after every multiplication. * Returns: * void */ static void Syn_filt_overflow( Word32 a[], Word32 x[], Word32 y[], Word32 lg, Word32 mem[] , Word32 update ) { Word32 tmp[50]; /* malloc is slow */ Word32 i, j, s, a0; Word32 *yy; /* Copy mem[] to yy[] */ memcpy( tmp, mem, 40 ); yy = tmp + M; a0 = a[0]; /* Do the filtering. */ for ( i = 0; i < lg; i++ ) { s = x[i] * a0; for ( j = 1; j <= M; j++ ) { s -= a[j] * yy[ - j]; if (s > 1073741823){ s = 1073741823; } else if ( s < -1073741824) { s = -1073741824; } } if ( labs( s ) < 0x7FFE800 ) *yy = ( s + 0x800L ) >> 12; else if ( s > 0 ) { *yy = 32767; } else { *yy = -32768; } yy++; } memcpy( y, &tmp[M], lg <<2 ); /* Update of memory if update==1 */ if ( update ) { memcpy( mem, &y[lg - M], 40 ); } return; } /* * dtx_dec * * * Parameters: * st B: DTX state struct * mem_syn I: AMR decoder state * lsfState B: LSF state struct * pred_state->past_qua_en O: table of past quantized energies * pred_state->past_qua_en_MR122 O: table of past quantized energies MR122 * averState->hangVar O: * averState->hangCount O: hangover variable * new_state I: new DTX state * mode I: AMR mode * parm I: vector of synthesis parameters * synth O: synthesised speech * A_t O: decoded LP filter in 4 subframes * * Function: * DTX * * Returns: * void */ static void dtx_dec( dtx_decState *st, Word32 *mem_syn, D_plsfState *lsfState, gc_predState *pred_state, Cb_gain_averageState *averState, enum DTXStateType new_state, enum Mode mode, Word16 parm[], Word32 synth[], Word32 A_t[] ) { Word32 ex[L_SUBFR], acoeff[11], acoeff_variab[M + 1], lsp_int[M]; Word32 refl[M], lsf[M], lsf_int[M], lsf_int_variab[M], lsp_int_variab[M]; Word32 i, j, int_fac, log_en_int, pred_err, log_pg_e, log_pg_m, log_pg; Word32 negative, lsf_mean, lsf_variab_index, lsf_variab_factor, ptr; Word16 log_en_index, log_en_int_e, log_en_int_m, level, ma_pred_init, tmp_int_length; if ( ( st->dtxHangoverAdded != 0 ) & ( st->sid_frame != 0 ) ) { /* * sidFirst after dtx hangover period * or sidUpd after dtxhangover */ /* set log_en_adjust to correct value */ st->log_en_adjust = dtx_log_en_adjust[mode]; ptr = st->lsf_hist_ptr + M; if ( ptr == 80 ) { ptr = 0; } memcpy( &st->lsf_hist[ptr], &st->lsf_hist[st->lsf_hist_ptr], M <<2 ); ptr = st->log_en_hist_ptr + 1; if ( ptr == DTX_HIST_SIZE ) { ptr = 0; } st->log_en_hist[ptr] = st->log_en_hist[st->log_en_hist_ptr]; /* Q11 */ /* * compute mean log energy and lsp * from decoded signal (SID_FIRST) */ st->log_en = 0; memset( lsf, 0, M <<2 ); /* average energy and lsp */ for ( i = 0; i < DTX_HIST_SIZE; i++ ) { st->log_en = st->log_en + ( st->log_en_hist[i] >> 3 ); for ( j = 0; j < M; j++ ) { lsf[j] += st->lsf_hist[i * M + j]; } } for ( j = 0; j < M; j++ ) { lsf[j] = lsf[j] >> 3; /* divide by 8 */ } Lsf_lsp( lsf, st->lsp ); /* * make log_en speech coder mode independent * added again later before synthesis */ st->log_en = st->log_en - st->log_en_adjust; /* compute lsf variability vector */ memcpy( st->lsf_hist_mean, st->lsf_hist, 80 <<2 ); for ( i = 0; i < M; i++ ) { lsf_mean = 0; /* compute mean lsf */ for ( j = 0; j < 8; j++ ) { lsf_mean += st->lsf_hist_mean[i + j * M]; } lsf_mean = lsf_mean >> 3; /* * subtract mean and limit to within reasonable limits * moreover the upper lsf's are attenuated */ for ( j = 0; j < 8; j++ ) { /* subtract mean */ st->lsf_hist_mean[i + j * M] = st->lsf_hist_mean[i + j * M] - lsf_mean; /* attenuate deviation from mean, especially for upper lsf's */ st->lsf_hist_mean[i + j * M] = ( st->lsf_hist_mean[i + j * M] * lsf_hist_mean_scale[i] ) >> 15; /* limit the deviation */ if ( st->lsf_hist_mean[i + j * M] < 0 ) { negative = 1; } else { negative = 0; } st->lsf_hist_mean[i + j * M] = labs( st->lsf_hist_mean[i + j * M] ); /* apply soft limit */ if ( st->lsf_hist_mean[i + j * M] > 655 ) { st->lsf_hist_mean[i + j * M] = 655 + ( ( st->lsf_hist_mean[i + j * M] - 655 ) >> 2 ); } /* apply hard limit */ if ( st->lsf_hist_mean[i + j * M] > 1310 ) { st->lsf_hist_mean[i + j * M] = 1310; } if ( negative != 0 ) { st->lsf_hist_mean[i + j * M] = -st->lsf_hist_mean[i + j * M]; } } } } if ( st->sid_frame != 0 ) { /* * Set old SID parameters, always shift * even if there is no new valid_data */ memcpy( st->lsp_old, st->lsp, M <<2 ); st->old_log_en = st->log_en; if ( st->valid_data != 0 ) /* new data available (no CRC) */ { /* Compute interpolation factor, since the division only works * for values of since_last_sid < 32 we have to limit the * interpolation to 32 frames */ tmp_int_length = st->since_last_sid; st->since_last_sid = 0; if ( tmp_int_length > 32 ) { tmp_int_length = 32; } if ( tmp_int_length >= 2 ) { st->true_sid_period_inv = 0x2000000 / ( tmp_int_length << 10 ); } else { st->true_sid_period_inv = 16384; /* 0.5 it Q15 */ } memcpy( lsfState->past_r_q, &past_rq_init[parm[0] * M], M <<2 ); D_plsf_3( lsfState, MRDTX, 0, &parm[1], st->lsp ); /* reset for next speech frame */ memset( lsfState->past_r_q, 0, M <<2 ); log_en_index = parm[4]; /* Q11 and divide by 4 */ st->log_en = ( Word16 )( log_en_index << 9 ); /* Subtract 2.5 in Q11 */ st->log_en = ( Word16 )( st->log_en - 5120 ); /* Index 0 is reserved for silence */ if ( log_en_index == 0 ) { st->log_en = MIN_16; } /* * no interpolation at startup after coder reset * or when SID_UPD has been received right after SPEECH */ if ( ( st->data_updated == 0 ) || ( st->dtxGlobalState == SPEECH ) ) { memcpy( st->lsp_old, st->lsp, M <<2 ); st->old_log_en = st->log_en; } } /* endif valid_data */ /* initialize gain predictor memory of other modes */ ma_pred_init = ( Word16 )( ( st->log_en >> 1 ) - 9000 ); if ( ma_pred_init > 0 ) { ma_pred_init = 0; } if ( ma_pred_init < - 14436 ) { ma_pred_init = -14436; } pred_state->past_qua_en[0] = ma_pred_init; pred_state->past_qua_en[1] = ma_pred_init; pred_state->past_qua_en[2] = ma_pred_init; pred_state->past_qua_en[3] = ma_pred_init; /* past_qua_en for other modes than MR122 */ ma_pred_init = ( Word16 )( ( 5443*ma_pred_init ) >> 15 ); /* scale down by factor 20*log10(2) in Q15 */ pred_state->past_qua_en_MR122[0] = ma_pred_init; pred_state->past_qua_en_MR122[1] = ma_pred_init; pred_state->past_qua_en_MR122[2] = ma_pred_init; pred_state->past_qua_en_MR122[3] = ma_pred_init; } /* endif sid_frame */ /* * CN generation * recompute level adjustment factor Q11 * st->log_en_adjust = 0.9*st->log_en_adjust + * 0.1*dtx_log_en_adjust[mode]); */ st->log_en_adjust = ( Word16 )( ( ( st->log_en_adjust * 29491 ) >> 15 ) + ( ( ( dtx_log_en_adjust[mode] << 5 ) * 3277 ) >> 20 ) ); /* Interpolate SID info */ /* Q10 */ if ( st->since_last_sid > 30 ) int_fac = 32767; else int_fac = ( Word16 )( (st->since_last_sid + 1) << 10 ); /* Q10 * Q15 -> Q10 */ int_fac = ( int_fac * st->true_sid_period_inv ) >> 15; /* Maximize to 1.0 in Q10 */ if ( int_fac > 1024 ) { int_fac = 1024; } /* Q10 -> Q14 */ int_fac = ( Word16 )( int_fac << 4 ); /* Q14 * Q11->Q26 */ log_en_int = ( int_fac * st->log_en ) << 1; for ( i = 0; i < M; i++ ) { /* Q14 * Q15 -> Q14 */ lsp_int[i] = ( int_fac * st->lsp[i] ) >> 15; } /* 1-k in Q14 */ int_fac = 16384 - int_fac; /* (Q14 * Q11 -> Q26) + Q26 -> Q26 */ log_en_int += ( int_fac * st->old_log_en ) << 1; for ( i = 0; i < M; i++ ) { /* Q14 + (Q14 * Q15 -> Q14) -> Q14 */ lsp_int[i] = lsp_int[i] + ( ( int_fac * st->lsp_old[i] ) >> 15 ); /* Q14 -> Q15 */ lsp_int[i] = lsp_int[i] << 1; } /* compute the amount of lsf variability */ /* -0.6 in Q12 */ lsf_variab_factor = st->log_pg_mean - 2457; /* *0.3 Q12*Q15 -> Q12 */ lsf_variab_factor = 4096 - ( ( lsf_variab_factor * 9830 ) >> 15 ); /* limit to values between 0..1 in Q12 */ if ( lsf_variab_factor >= 4096 ) { lsf_variab_factor = 32767; } else if ( lsf_variab_factor < 0 ) { lsf_variab_factor = 0; } else lsf_variab_factor = lsf_variab_factor << 3; /* -> Q15 */ /* get index of vector to do variability with */ lsf_variab_index = pseudonoise( &st->pn_seed_rx, 3 ); /* convert to lsf */ Lsp_lsf( lsp_int, lsf_int ); /* apply lsf variability */ memcpy( lsf_int_variab, lsf_int, M <<2 ); for ( i = 0; i < M; i++ ) { lsf_int_variab[i] = lsf_int_variab[i] + ( ( lsf_variab_factor * st-> lsf_hist_mean[i + lsf_variab_index * M] ) >> 15 ); } /* make sure that LSP's are ordered */ Reorder_lsf( lsf_int, LSF_GAP ); Reorder_lsf( lsf_int_variab, LSF_GAP ); /* copy lsf to speech decoders lsf state */ memcpy( lsfState->past_lsf_q, lsf_int, M <<2 ); /* convert to lsp */ Lsf_lsp( lsf_int, lsp_int ); Lsf_lsp( lsf_int_variab, lsp_int_variab ); /* Compute acoeffs Q12 acoeff is used for level * normalization and Post_Filter, acoeff_variab is * used for synthesis filter * by doing this we make sure that the level * in high frequenncies does not jump up and down */ Lsp_Az( lsp_int, acoeff ); Lsp_Az( lsp_int_variab, acoeff_variab ); /* For use in Post_Filter */ memcpy( &A_t[0], acoeff, MP1 <<2 ); memcpy( &A_t[MP1], acoeff, MP1 <<2 ); memcpy( &A_t[MP1 <<1], acoeff, MP1 <<2 ); memcpy( &A_t[MP1 + MP1 + MP1], acoeff, MP1 <<2 ); /* Compute reflection coefficients Q15 */ A_Refl( &acoeff[1], refl ); /* Compute prediction error in Q15 */ /* 0.99997 in Q15 */ pred_err = MAX_16; for ( i = 0; i < M; i++ ) { pred_err = ( pred_err * ( MAX_16 - ( ( refl[i] * refl[i] ) >> 15 ) ) ) >> 15; } /* compute logarithm of prediction gain */ Log2( pred_err, &log_pg_e, &log_pg_m ); /* convert exponent and mantissa to Word16 Q12 */ /* Q12 */ log_pg = ( log_pg_e - 15 ) << 12; /* saturate */ if (log_pg < -32768) { log_pg = -32768; } log_pg = ( -( log_pg + ( log_pg_m >> 3 ) ) ) >> 1; st->log_pg_mean = ( Word16 )( ( ( 29491*st->log_pg_mean ) >> 15 ) + ( ( 3277 * log_pg ) >> 15 ) ); /* Compute interpolated log energy */ /* Q26 -> Q16 */ log_en_int = log_en_int >> 10; /* Add 4 in Q16 */ log_en_int += 262144L; /* subtract prediction gain */ log_en_int = log_en_int - ( log_pg << 4 ); /* adjust level to speech coder mode */ log_en_int += st->log_en_adjust << 5; log_en_int_e = ( Word16 )( log_en_int >> 16 ); log_en_int_m = ( Word16 )( ( log_en_int - ( log_en_int_e << 16 ) ) >> 1 ); /* Q4 */ level = ( Word16 )( Pow2( log_en_int_e, log_en_int_m ) ); for ( i = 0; i < 4; i++ ) { /* Compute innovation vector */ Build_CN_code( &st->pn_seed_rx, ex ); for ( j = 0; j < L_SUBFR; j++ ) { ex[j] = ( level * ex[j] ) >> 15; } /* Synthesize */ Syn_filt( acoeff_variab, ex, &synth[i * L_SUBFR], L_SUBFR, mem_syn, 1 ); } /* next i */ /* reset codebook averaging variables */ averState->hangVar = 20; averState->hangCount = 0; if ( new_state == DTX_MUTE ) { /* * mute comfort noise as it has been quite a long time since * last SID update was performed */ Word32 num, denom; tmp_int_length = st->since_last_sid; if ( tmp_int_length > 32 ) { tmp_int_length = 32; } if ( tmp_int_length == 1 ) { st->true_sid_period_inv = MAX_16; } else { num = 1024; denom = ( tmp_int_length << 10 ); st->true_sid_period_inv = 0; for ( i = 0; i < 15; i++ ) { st->true_sid_period_inv <<= 1; num <<= 1; if ( num >= denom ) { num = num - denom; st->true_sid_period_inv += 1; } } } st->since_last_sid = 0; memcpy( st->lsp_old, st->lsp, M << 2 ); st->old_log_en = st->log_en; /* subtract 1/8 in Q11 i.e -6/8 dB */ st->log_en = st->log_en - 256; if (st->log_en < -32768) st->log_en = -32768; } /* * reset interpolation length timer * if data has been updated. */ if ( ( st->sid_frame != 0 ) & ( ( st->valid_data != 0 ) || ( ( st->valid_data == 0 ) & ( st->dtxHangoverAdded != 0 ) ) ) ) { st->since_last_sid = 0; st->data_updated = 1; } return; } /* * lsp_avg * * * Parameters: * st->lsp_meanSave B: LSP averages * lsp I: LSPs * * Function: * Calculate the LSP averages * * Returns: * void */ static void lsp_avg( lsp_avgState *st, Word32 *lsp ) { Word32 i, tmp; for ( i = 0; i < M; i++ ) { /* mean = 0.84*mean */ tmp = ( st->lsp_meanSave[i] << 16 ); tmp -= ( EXPCONST * st->lsp_meanSave[i] ) << 1; /* Add 0.16 of newest LSPs to mean */ tmp += ( EXPCONST * lsp[i] ) << 1; /* Save means */ tmp += 0x00008000L; st->lsp_meanSave[i] = tmp >> 16; } return; } /* * Int_lpc_1and3 * * * Parameters: * lsp_old I: LSP vector at the 4th subfr. of past frame [M] * lsp_mid I: LSP vector at the 2nd subframe of present frame [M] * lsp_new I: LSP vector at the 4th subframe of present frame [M] * Az O: interpolated LP parameters in subframes 1 and 3 * [AZ_SIZE] * * Function: * Interpolates the LSPs and converts to LPC parameters * to get a different LP filter in each subframe. * * The 20 ms speech frame is divided into 4 subframes. * The LSPs are quantized and transmitted at the 2nd and * 4th subframes (twice per frame) and interpolated at the * 1st and 3rd subframe. * * Returns: * void */ static void Int_lpc_1and3( Word32 lsp_old[], Word32 lsp_mid[], Word32 lsp_new[], Word32 Az[] ) { Word32 lsp[M]; Word32 i; /* lsp[i] = lsp_mid[i] * 0.5 + lsp_old[i] * 0.5 */ for ( i = 0; i < 10; i++ ) { lsp[i] = ( lsp_mid[i] >> 1 ) + ( lsp_old[i] >> 1 ); } /* Subframe 1 */ Lsp_Az( lsp, Az ); Az += MP1; /* Subframe 2 */ Lsp_Az( lsp_mid, Az ); Az += MP1; for ( i = 0; i < 10; i++ ) { lsp[i] = ( lsp_mid[i] >> 1 ) + ( lsp_new[i] >> 1 ); } /* Subframe 3 */ Lsp_Az( lsp, Az ); Az += MP1; /* Subframe 4 */ Lsp_Az( lsp_new, Az ); return; } /* * Int_lpc_1to3 * * * Parameters: * lsp_old I: LSP vector at the 4th subframe of past frame [M] * lsp_new I: LSP vector at the 4th subframe of present frame [M] * Az O: interpolated LP parameters in all subframes * [AZ_SIZE] * * Function: * Interpolates the LSPs and converts to LPC parameters to get a different * LP filter in each subframe. * * The 20 ms speech frame is divided into 4 subframes. * The LSPs are quantized and transmitted at the 4th * subframes (once per frame) and interpolated at the * 1st, 2nd and 3rd subframe. * * Returns: * void */ static void Int_lpc_1to3( Word32 lsp_old[], Word32 lsp_new[], Word32 Az[] ) { Word32 lsp[M]; Word32 i; for ( i = 0; i < 10; i++ ) { lsp[i] = ( lsp_new[i] >> 2 ) + ( lsp_old[i] - ( lsp_old[i] >> 2 ) ); } /* Subframe 1 */ Lsp_Az( lsp, Az ); Az += MP1; for ( i = 0; i < 10; i++ ) { lsp[i] = ( lsp_old[i] >> 1 ) + ( lsp_new[i] >> 1 ); } /* Subframe 2 */ Lsp_Az( lsp, Az ); Az += MP1; for ( i = 0; i < 10; i++ ) { lsp[i] = ( lsp_old[i] >> 2 ) + ( lsp_new[i] - ( lsp_new[i] >> 2 ) ); } /* Subframe 3 */ Lsp_Az( lsp, Az ); Az += MP1; /* Subframe 4 */ Lsp_Az( lsp_new, Az ); return; } /* * D_plsf_5 * * * Parameters: * st->past_lsf_q I: Past dequantized LFSs * st->past_r_q B: past quantized residual * bfi B: bad frame indicator * indice I: quantization indices of 3 submatrices, Q0 * lsp1_q O: quantized 1st LSP vector * lsp2_q O: quantized 2nd LSP vector * * Function: * Decodes the 2 sets of LSP parameters in a frame * using the received quantization indices. * * Returns: * void */ static void D_plsf_5( D_plsfState *st, Word16 bfi, Word16 *indice, Word32 *lsp1_q , Word32 *lsp2_q ) { Word32 lsf1_r[M], lsf2_r[M], lsf1_q[M], lsf2_q[M]; Word32 i, temp1, temp2, sign; const Word32 *p_dico; /* if bad frame */ if ( bfi != 0 ) { /* use the past LSFs slightly shifted towards their mean */ for ( i = 0; i < M; i += 2 ) { /* lsfi_q[i] = ALPHA*st->past_lsf_q[i] + ONE_ALPHA*meanLsf[i]; */ lsf1_q[i] = ( ( st->past_lsf_q[i] * ALPHA_122 ) >> 15 ) + ( ( mean_lsf_5[i] * ONE_ALPHA_122 ) >> 15 ); lsf1_q[i + 1] = ( ( st->past_lsf_q[i + 1] * ALPHA_122 ) >> 15 ) + ( ( mean_lsf_5[i + 1] * ONE_ALPHA_122 ) >> 15 ); } memcpy( lsf2_q, lsf1_q, M <<2 ); /* estimate past quantized residual to be used in next frame */ for ( i = 0; i < M; i += 2 ) { /* temp = meanLsf[i] + st->past_r_q[i] * LSPPpred_facMR122; */ temp1 = mean_lsf_5[i] + ( ( st->past_r_q[i] * LSP_PRED_FAC_MR122 ) >> 15 ); temp2 = mean_lsf_5[i + 1] +( ( st->past_r_q[i + 1] *LSP_PRED_FAC_MR122 ) >> 15 ); st->past_r_q[i] = lsf2_q[i] - temp1; st->past_r_q[i + 1] = lsf2_q[i + 1] -temp2; } } /* if good LSFs received */ else { /* decode prediction residuals from 5 received indices */ p_dico = &dico1_lsf_5[indice[0] << 2]; lsf1_r[0] = *p_dico++; lsf1_r[1] = *p_dico++; lsf2_r[0] = *p_dico++; lsf2_r[1] = *p_dico++; p_dico = &dico2_lsf_5[indice[1] << 2]; lsf1_r[2] = *p_dico++; lsf1_r[3] = *p_dico++; lsf2_r[2] = *p_dico++; lsf2_r[3] = *p_dico++; sign = ( Word16 )( indice[2] & 1 ); i = indice[2] >> 1; p_dico = &dico3_lsf_5[i << 2]; if ( sign == 0 ) { lsf1_r[4] = *p_dico++; lsf1_r[5] = *p_dico++; lsf2_r[4] = *p_dico++; lsf2_r[5] = *p_dico++; } else { lsf1_r[4] = ( Word16 )( -( *p_dico++ ) ); lsf1_r[5] = ( Word16 )( -( *p_dico++ ) ); lsf2_r[4] = ( Word16 )( -( *p_dico++ ) ); lsf2_r[5] = ( Word16 )( -( *p_dico++ ) ); } p_dico = &dico4_lsf_5[( indice[3]<<2 )]; lsf1_r[6] = *p_dico++; lsf1_r[7] = *p_dico++; lsf2_r[6] = *p_dico++; lsf2_r[7] = *p_dico++; p_dico = &dico5_lsf_5[( indice[4]<<2 )]; lsf1_r[8] = *p_dico++; lsf1_r[9] = *p_dico++; lsf2_r[8] = *p_dico++; lsf2_r[9] = *p_dico++; /* Compute quantized LSFs and update the past quantized residual */ for ( i = 0; i < M; i++ ) { temp1 = mean_lsf_5[i] + ( ( st->past_r_q[i] * LSP_PRED_FAC_MR122 ) >> 15 ); lsf1_q[i] = lsf1_r[i] + temp1; lsf2_q[i] = lsf2_r[i] + temp1; st->past_r_q[i] = lsf2_r[i]; } } /* verification that LSFs have minimum distance of LSF_GAP Hz */ Reorder_lsf( lsf1_q, LSF_GAP ); Reorder_lsf( lsf2_q, LSF_GAP ); memcpy( st->past_lsf_q, lsf2_q, M <<2 ); /* convert LSFs to the cosine domain */ Lsf_lsp( lsf1_q, lsp1_q ); Lsf_lsp( lsf2_q, lsp2_q ); return; } /* * Dec_lag3 * * * Parameters: * index I: received pitch index * t0_min I: minimum of search range * t0_max I: maximum of search range * i_subfr I: subframe flag * T0_prev I: integer pitch delay of last subframe used * in 2nd and 4th subframes * T0 O: integer part of pitch lag * T0_frac O : fractional part of pitch lag * flag4 I : flag for encoding with 4 bits * Function: * Decoding of fractional pitch lag with 1/3 resolution. * Extract the integer and fraction parts of the pitch lag from * the received adaptive codebook index. * * The fractional lag in 1st and 3rd subframes is encoded with 8 bits * while that in 2nd and 4th subframes is relatively encoded with 4, 5 * and 6 bits depending on the mode. * * Returns: * void */ static void Dec_lag3( Word32 index, Word32 t0_min, Word32 t0_max, Word32 i_subfr , Word32 T0_prev, Word32 *T0, Word32 *T0_frac, Word32 flag4 ) { Word32 i, tmp_lag; /* if 1st or 3rd subframe */ if ( i_subfr == 0 ) { if ( index < 197 ) { *T0 = ( ( ( index + 2 ) * 10923 ) >> 15 ) + 19; i = *T0 + *T0 + *T0; *T0_frac = ( index - i ) + 58; } else { *T0 = index - 112; *T0_frac = 0; } } /* 2nd or 4th subframe */ else { if ( flag4 == 0 ) { /* 'normal' decoding: either with 5 or 6 bit resolution */ i = ( ( ( index + 2 ) * 10923 ) >> 15 ) - 1; *T0 = i + t0_min; i = i + i + i; *T0_frac = ( index - 2 ) - i; } else { /* decoding with 4 bit resolution */ tmp_lag = T0_prev; if ( ( tmp_lag - t0_min ) > 5 ) tmp_lag = t0_min + 5; if ( ( t0_max - tmp_lag ) > 4 ) tmp_lag = t0_max - 4; if ( index < 4 ) { i = ( tmp_lag - 5 ); *T0 = i + index; *T0_frac = 0; } else { if ( index < 12 ) { i = ( ( ( index - 5 ) * 10923 ) >> 15 ) - 1; *T0 = i + tmp_lag; i = i + i + i; *T0_frac = ( index - 9 ) - i; } else { i = ( index - 12 ) + tmp_lag; *T0 = i + 1; *T0_frac = 0; } } } /* end if (decoding with 4 bit resolution) */ } return; } /* * Pred_lt_3or6_40 * * * Parameters: * exc B: excitation buffer * T0 I: integer pitch lag * frac I: fraction of lag * flag3 I: if set, upsampling rate = 3 (6 otherwise) * * Function: * Compute the result of long term prediction with fractional * interpolation of resolution 1/3 or 1/6. (Interpolated past excitation). * * Once the fractional pitch lag is determined, * the adaptive codebook vector v(n) is computed by interpolating * the past excitation signal u(n) at the given integer delay k * and phase (fraction) : * * 9 9 * v(n) = SUM[ u(n-k-i) * b60(t+i*6) ] + SUM[ u(n-k+1+i) * b60(6-t+i*6) ], * i=0 i=0 * n = 0, ...,39, t = 0, ...,5. * * The interpolation filter b60 is based on a Hamming windowed sin(x)/x * function truncated at Б 59 and padded with zeros at Б 60 (b60(60)=0)). * The filter has a cut-off frequency (-3 dB) at 3 600 Hz in * the over-sampled domain. * * Returns: * void */ static void Pred_lt_3or6_40( Word32 exc[], Word32 T0, Word32 frac, Word32 flag3 ) { Word32 s, i; Word32 *x0, *x1, *x2; const Word32 *c1, *c2; x0 = &exc[ - T0]; frac = -frac; if ( flag3 != 0 ) { frac <<= 1; /* inter_3l[k] = inter6[2*k] -> k' = 2*k */ } if ( frac < 0 ) { frac += 6; x0--; } c1 = &inter6[frac]; c2 = &inter6[6 - frac]; for ( i = 0; i < 40; i++ ) { x1 = x0++; x2 = x0; s = x1[0] * c1[0]; s += x1[ - 1] * c1[6]; s += x1[ - 2] * c1[12]; s += x1[ - 3] * c1[18]; s += x1[ - 4] * c1[24]; s += x1[ - 5] * c1[30]; s += x1[ - 6] * c1[36]; s += x1[ - 7] * c1[42]; s += x1[ - 8] * c1[48]; s += x1[ - 9] * c1[54]; s += x2[0] * c2[0]; s += x2[1] * c2[6]; s += x2[2] * c2[12]; s += x2[3] * c2[18]; s += x2[4] * c2[24]; s += x2[5] * c2[30]; s += x2[6] * c2[36]; s += x2[7] * c2[42]; s += x2[8] * c2[48]; s += x2[9] * c2[54]; exc[i] = ( s + 0x4000 ) >> 15; } } /* * Dec_lag6 * * * Parameters: * index I: received pitch index * pit_min I: minimum pitch lag * pit_max I: maximum pitch lag * i_subfr I: subframe flag * T0 B: integer part of pitch lag * T0_frac O : fractional part of pitch lag * * Function: * Decoding of fractional pitch lag with 1/6 resolution. * Extract the integer and fraction parts of the pitch lag from * the received adaptive codebook index. * * The fractional lag in 1st and 3rd subframes is encoded with 9 bits * while that in 2nd and 4th subframes is relatively encoded with 6 bits. * Note that in relative encoding only 61 values are used. If the * decoder receives 61, 62, or 63 as the relative pitch index, it means * that a transmission error occurred. In this case, the pitch lag from * previous subframe (actually from previous frame) is used. * * Returns: * void */ static void Dec_lag6( Word32 index, Word32 pit_min, Word32 pit_max, Word32 i_subfr, Word32 *T0, Word32 *T0_frac ) { Word32 t0_min, t0_max, i; /* if 1st or 3rd subframe */ if ( i_subfr == 0 ) { if ( index < 463 ) { /* T0 = (index+5)/6 + 17 */ *T0 = ( index + 5 ) / 6 + 17; i = *T0 + *T0 + *T0; /* *T0_frac = index - T0*6 + 105 */ *T0_frac = ( index - ( i + i ) ) + 105; } else { *T0 = index - 368; *T0_frac = 0; } } /* second or fourth subframe */ else { /* find t0_min and t0_max for 2nd (or 4th) subframe */ t0_min = *T0 - 5; if ( t0_min < pit_min ) { t0_min = pit_min; } t0_max = t0_min + 9; if ( t0_max > pit_max ) { t0_max = pit_max; t0_min = t0_max - 9; } /* i = (index+5)/6 - 1 */ i = ( index + 5 ) / 6 - 1; *T0 = i + t0_min; i = i + i + i; *T0_frac = ( index - 3 ) - ( i + i ); } } /* * decompress10 * * * Parameters: * MSBs I: MSB part of the index * LSBs I: LSB part of the index * index1 I: index for first pos in posIndex * index2 I: index for second pos in posIndex * index3 I: index for third pos in posIndex * pos_indx O: position of 3 pulses (decompressed) * Function: * Decompression of the linear codeword * * Returns: * void */ static void decompress10( Word32 MSBs, Word32 LSBs, Word32 index1, Word32 index2 , Word32 index3, Word32 pos_indx[] ) { Word32 divMSB; if (MSBs > 124) { MSBs = 124; } /* * pos_indx[index1] = ((MSBs-25*(MSBs/25))%5)*2 + (LSBs-4*(LSBs/4))%2; * pos_indx[index2] = ((MSBs-25*(MSBs/25))/5)*2 + (LSBs-4*(LSBs/4))/2; * pos_indx[index3] = (MSBs/25)*2 + LSBs/4; */ divMSB = MSBs / 25; pos_indx[index1] = ( ( ( MSBs - 25 * ( divMSB ) ) % 5 ) << 1 ) + ( LSBs & 0x1 ); pos_indx[index2] = ( ( ( MSBs - 25 * ( divMSB ) ) / 5 ) << 1 ) + ( ( LSBs & 0x2 ) >> 1 ); pos_indx[index3] = ( divMSB << 1 ) + ( LSBs >> 2 ); return; } /* * decompress_codewords * * * Parameters: * indx I: position of 8 pulses (compressed) * pos_indx O: position index of 8 pulses (position only) * * Function: * Decompression of the linear codewords to 4+three indeces * one bit from each pulse is made robust to errors by * minimizing the phase shift of a bit error. * * i0,i4,i1 => one index (7+3) bits, 3 LSBs more robust * i2,i6,i5 => one index (7+3) bits, 3 LSBs more robust * i3,i7 => one index (5+2) bits, 2-3 LSbs more robust * * Returns: * void */ static void decompress_codewords( Word16 indx[], Word32 pos_indx[] ) { Word32 ia, ib, MSBs, LSBs, MSBs0_24, tmp; /* * First index: 10x10x10 -> 2x5x2x5x2x5-> 125x2x2x2 -> 7+1x3 bits * MSBs = indx[NB_TRACK]/8; * LSBs = indx[NB_TRACK]%8; */ MSBs = *indx >> 3; LSBs = *indx & 0x7; decompress10( MSBs, LSBs, 0, 4, 1, pos_indx ); /* * Second index: 10x10x10 -> 2x5x2x5x2x5-> 125x2x2x2 -> 7+1x3 bits * MSBs = indx[NB_TRACK+1]/8; * LSBs = indx[NB_TRACK+1]%8; */ MSBs = indx[1] >> 3; LSBs = indx[1] & 0x7; decompress10( MSBs, LSBs, 2, 6, 5, pos_indx ); /* * Third index: 10x10 -> 2x5x2x5-> 25x2x2 -> 5+1x2 bits * MSBs = indx[NB_TRACK+2]/4; * LSBs = indx[NB_TRACK+2]%4; * MSBs0_24 = (MSBs*25+12)/32; * if ((MSBs0_24/5)%2==1) * pos_indx[3] = (4-(MSBs0_24%5))*2 + LSBs%2; * else * pos_indx[3] = (MSBs0_24%5)*2 + LSBs%2; * pos_indx[7] = (MSBs0_24/5)*2 + LSBs/2; */ MSBs = indx[2] >> 2; LSBs = indx[2] & 0x3; MSBs0_24 = ( ( ( MSBs * 25 ) + 12 ) >> 5 ); tmp = ( MSBs0_24 * 6554 ) >> 15; ia = tmp & 0x1; ib = ( MSBs0_24 - ( tmp * 5 ) ); if ( ia == 1 ) { ib = 4 - ib; } pos_indx[3] = ( ib << 1 ) + ( LSBs & 0x1 ); pos_indx[7] = ( tmp << 1 ) + ( LSBs >> 1 ); } /* * decode_2i40_9bits * * * Parameters: * subNr I: subframe number * sign I: signs of 2 pulses * index I: Positions of the 2 pulses * cod O: algebraic (fixed) codebook excitation * * Function: * Algebraic codebook decoder * * Returns: * void */ static void decode_2i40_9bits( Word32 subNr, Word32 sign, Word32 index, Word32 cod[] ) { Word32 pos[2]; Word32 i, j, k; /* Decode the positions */ /* table bit is the MSB */ j = ( index & 64 ) >> 6; i = index & 7; /* pos0 =i*5+startPos[j*8+subNr*2] */ i = ( i + ( i << 2 ) ); k = startPos[( j <<3 )+( subNr << 1 )]; pos[0] = i + k; index = index >> 3; i = index & 7; /* pos1 =i*5+startPos[j*8+subNr*2+1] */ i = ( i + ( i << 2 ) ); k = startPos[( ( j <<3 )+ ( subNr <<1 ) ) + 1]; pos[1] = ( Word16 )( i + k ); /* decode the signs and build the codeword */ memset( cod, 0, L_SUBFR <<2 ); for ( j = 0; j < 2; j++ ) { i = sign & 1; sign = sign >> 1; if ( i != 0 ) { cod[pos[j]] = 8191; /* +1.0 */ } else { cod[pos[j]] = -8192; /* -1.0 */ } } return; } /* * decode_2i40_11bits * * * Parameters: * sign I: signs of 2 pulses * index I: Positions of the 2 pulses * cod O: algebraic (fixed) codebook excitation * * Function: * Algebraic codebook decoder * * Returns: * void */ static void decode_2i40_11bits( Word32 sign, Word32 index, Word32 cod[] ) { Word32 pos[2]; Word32 i, j; /* Decode the positions */ j = index & 1; index = index >> 1; i = index & 7; /* pos0 =i*5+1+j*2 */ i = ( i + ( i << 2 ) ); i = ( i + 1 ); j = ( j << 1 ); pos[0] = i + j; index = index >> 3; j = index & 3; index = index >> 2; i = index & 7; if ( j == 3 ) { /* pos1 =i*5+4 */ i = ( i + ( i << 2 ) ); pos[1] = i + 4; } else { /* pos1 =i*5+j */ i = ( i + ( i << 2 ) ); pos[1] = i + j; } /* decode the signs and build the codeword */ memset( cod, 0, L_SUBFR <<2 ); for ( j = 0; j < 2; j++ ) { i = sign & 1; sign = sign >> 1; if ( i != 0 ) { cod[pos[j]] = 8191; /* +1.0 */ } else { cod[pos[j]] = -8192; /* -1.0 */ } } return; } /* * decode_3i40_14bits * * * Parameters: * sign I: signs of 3 pulses * index I: Positions of the 3 pulses * cod O: algebraic (fixed) codebook excitation * * Function: * Algebraic codebook decoder * * Returns: * void */ static void decode_3i40_14bits( Word32 sign, Word32 index, Word32 cod[] ) { Word32 pos[3]; Word32 i, j; /* Decode the positions */ i = index & 7; /* pos0 =i*5 */ pos[0] = i + ( i << 2 ); index = index >> 3; j = index & 1; index = index >> 1; i = index & 7; /* pos1 =i*5+1+j*2 */ i = ( i + ( i << 2 ) ); i = ( i + 1 ); j = ( j << 1 ); pos[1] = i + j; index = index >> 3; j = index & 1; index = index >> 1; i = index & 7; /* pos2 =i*5+2+j*2 */ i = ( i + ( i << 2 ) ); i = ( i + 2 ); j = ( j << 1 ); pos[2] = i + j; /* decode the signs and build the codeword */ memset( cod, 0, L_SUBFR <<2 ); for ( j = 0; j < 3; j++ ) { i = sign & 1; sign = sign >> 1; if ( i > 0 ) { cod[pos[j]] = 8191; /* +1.0 */ } else { cod[pos[j]] = -8192; /* -1.0 */ } } return; } /* * decode_3i40_14bits * * * Parameters: * sign I: signs of 4 pulses * index I: Positions of the 4 pulses * cod O: algebraic (fixed) codebook excitation * * Function: * Algebraic codebook decoder * * Returns: * void */ static void decode_4i40_17bits( Word32 sign, Word32 index, Word32 cod[] ) { Word32 pos[4]; Word32 i, j; /* Decode the positions */ i = index & 7; i = dgray[i]; /* pos0 =i*5 */ pos[0] = i + ( i << 2 ); index = index >> 3; i = index & 7; i = dgray[i]; /* pos1 =i*5+1 */ i = ( i + ( i << 2 ) ); pos[1] = i + 1; index = index >> 3; i = index & 7; i = dgray[i]; /* pos2 =i*5+1 */ i = ( i + ( i << 2 ) ); pos[2] = i + 2; index = index >> 3; j = index & 1; index = index >> 1; i = index & 7; i = dgray[i]; /* pos3 =i*5+3+j */ i = ( i + ( i << 2 ) ); i = ( i + 3 ); pos[3] = i + j; /* decode the signs and build the codeword */ memset( cod, 0, L_SUBFR <<2 ); for ( j = 0; j < 4; j++ ) { i = sign & 1; sign = sign >> 1; if ( i != 0 ) { cod[pos[j]] = 8191; } else { cod[pos[j]] = -8192; } } return; } /* * decode_8i40_31bits * * * Parameters: * index I: index of 8 pulses (sign+position) * cod O: algebraic (fixed) codebook excitation * * Function: * Algebraic codebook decoder * * Returns: * void */ static void decode_8i40_31bits( Word16 index[], Word32 cod[] ) { Word32 linear_codewords[8]; Word32 i, j, pos1, pos2, sign; memset( cod, 0, L_CODE <<2 ); decompress_codewords( &index[NB_TRACK_MR102], linear_codewords ); /* decode the positions and signs of pulses and build the codeword */ for ( j = 0; j < NB_TRACK_MR102; j++ ) { /* compute index i */ i = linear_codewords[j]; i <<= 2; /* position of pulse "j" */ pos1 = i + j; if ( index[j] == 0 ) { sign = POS_CODE; /* +1.0 */ } else { sign = -NEG_CODE; /* -1.0 */ } /* compute index i */ i = linear_codewords[j + 4]; i = i << 2; /* position of pulse "j+4" */ pos2 = i + j; cod[pos1] = sign; if ( pos2 < pos1 ) { sign = -( sign ); } cod[pos2] = cod[pos2] + sign; } return; } /* * decode_10i40_35bits * * * Parameters: * index I: index of 10 pulses (sign+position) * cod O: algebraic (fixed) codebook excitation * * Function: * Algebraic codebook decoder * * Returns: * void */ static void decode_10i40_35bits( Word16 index[], Word32 cod[] ) { Word32 i, j, pos1, pos2, sign, tmp; memset( cod, 0, L_CODE <<2 ); /* decode the positions and signs of pulses and build the codeword */ for ( j = 0; j < 5; j++ ) { /* compute index i */ tmp = index[j]; i = tmp & 7; i = dgray[i]; i = ( i * 5 ); /* position of pulse "j" */ pos1 = ( i + j ); i = ( tmp >> 3 ) & 1; if ( i == 0 ) { sign = 4096; /* +1.0 */ } else { sign = -4096; /* -1.0 */ } /* compute index i */ i = index[j + 5] & 7; i = dgray[i]; i = i * 5; /* position of pulse "j+5" */ pos2 = ( i + j ); cod[pos1] = sign; if ( pos2 < pos1 ) { sign = -( sign ); } cod[pos2] = cod[pos2] + sign; } return; } /* * gmed_n * * * Parameters: * ind I: values * n I: The number of gains (odd) * * Function: * Calculates N-point median. * * Returns: * index of the median value */ static Word32 gmed_n( Word32 ind[], Word32 n ) { Word32 tmp[NMAX], tmp2[NMAX]; Word32 max, medianIndex, i, j, ix = 0; for ( i = 0; i < n; i++ ) { tmp2[i] = ind[i]; } for ( i = 0; i < n; i++ ) { max = -32767; for ( j = 0; j < n; j++ ) { if ( tmp2[j] >= max ) { max = tmp2[j]; ix = j; } } tmp2[ix] = -32768; tmp[i] = ix; } medianIndex = tmp[( n >>1 )]; return( ind[medianIndex] ); } /* * ec_gain_pitch * * * Parameters: * st->pbuf I: last five gains * st->past_gain_pit I: past gain * state I: state of the state machine * gain_pitch O: pitch gain * * Function: * Calculates pitch from previous values. * * Returns: * void */ static void ec_gain_pitch( ec_gain_pitchState *st, Word16 state, Word32 * gain_pitch ) { Word32 tmp; /* calculate median of last five gains */ tmp = gmed_n( st->pbuf, 5 ); /* new gain = minimum(median, past_gain) * pdown[state] */ if ( tmp > st->past_gain_pit ) { tmp = st->past_gain_pit; } *gain_pitch = ( tmp * pdown[state] ) >> 15; } /* * d_gain_pitch * * * Parameters: * mode I: AMR mode * index I: index of quantization * * Function: * Decodes the pitch gain using the received index * * Returns: * gain */ static Word32 d_gain_pitch( enum Mode mode, Word32 index ) { Word32 gain; if ( mode == MR122 ) { /* clear 2 LSBits */ gain = ( qua_gain_pitch[index] >> 2 ) << 2; } else { gain = qua_gain_pitch[index]; } return gain; } /* * ec_gain_pitch_update * * * Parameters: * st->prev_gp B: previous pitch gain * st->past_gain_pit O: past gain * st->pbuf B: past gain buffer * bfi I: bad frame indicator * prev_bf I: previous frame was bad * gain_pitch B: pitch gain * * Function: * Update the pitch gain concealment state * Limit gain_pitch if the previous frame was bad * * Returns: * gain */ static void ec_gain_pitch_update( ec_gain_pitchState *st, Word32 bfi, Word32 prev_bf, Word32 *gain_pitch ) { if ( bfi == 0 ) { if ( prev_bf != 0 ) { if ( *gain_pitch > st->prev_gp ) { *gain_pitch = st->prev_gp; } } st->prev_gp = *gain_pitch; } st->past_gain_pit = *gain_pitch; /* if (st->past_gain_pit > 1.0) */ if ( st->past_gain_pit > 16384 ) { st->past_gain_pit = 16384; } st->pbuf[0] = st->pbuf[1]; st->pbuf[1] = st->pbuf[2]; st->pbuf[2] = st->pbuf[3]; st->pbuf[3] = st->pbuf[4]; st->pbuf[4] = st->past_gain_pit; } /* * gc_pred (366) * * * Parameters: * st->past_qua_en I: MA predictor * st->past_qua_en_MR122 I: MA predictor MR122 * mode I: AMR mode * code I: innovative codebook vector * exp_gcode0 O: predicted gain factor (exponent) * frac_gcode0 O: predicted gain factor (fraction) * exp_en I: innovation energy (MR795) (exponent) * frac_en I: innovation energy (MR795) (fraction) * * Function: * MA prediction of the innovation energy * * Mean removed innovation energy (dB) in subframe n * N-1 * E(n) = 10*log(gc*gc * SUM[(code(i) * code(i)]/N) - EMean * i=0 * N=40 * * Mean innovation energy (dB) * N-1 * Ei(n) = 10*log(SUM[(code(i) * code(i)]/N) * i=0 * * Predicted energy * 4 * Ep(n) = SUM[b(i) * R(n-i)] * i=1 * b = [0.68 0.58 0.34 0.19] * R(k) is quantified prediction error at subframe k * * E_Mean = 36 dB (MR122) * * Predicted gain gc is found by * * gc = POW[10, 0.05 * (Ep(n) + EMean - Ei)] * * Returns: * void */ static void gc_pred( gc_predState *st, enum Mode mode, Word32 *code, Word32 * exp_gcode0, Word32 *frac_gcode0, Word32 *exp_en, Word32 *frac_en ) { Word32 exp, frac, ener_code = 0, i = 0; /* energy of code: * ener_code = sum(code[i]^2) */ while ( i < L_SUBFR ) { ener_code += code[i] * code[i]; i++; } if ( ( 0x3fffffff <= ener_code ) | ( ener_code < 0 ) ) ener_code = MAX_32; else ener_code <<= 1; if ( mode == MR122 ) { Word32 ener; /* ener_code = ener_code / lcode; lcode = 40; 1/40 = 26214 Q20 */ ener_code = ( ( ener_code + 0x00008000L ) >> 16 ) * 52428; /* Q9 * Q20 -> Q30 */ /* energy of code: * ener_code(Q17) = 10 * Log10(energy) / constant * = 1/2 * Log2(energy) * constant = 20*Log10(2) */ /* ener_code = 1/2 * Log2(ener_code); Note: Log2=log2+30 */ Log2( ener_code, &exp, &frac ); ener_code = ( ( exp - 30 ) << 16 ) + ( frac << 1 ); /* Q16 for log(), ->Q17 for 1/2 log() */ /* * predicted energy: * ener(Q24) = (Emean + sum{pred[i]*pastEn[i]})/constant * = MEAN_ENER + sum(pred[i]*past_qua_en[i]) * constant = 20*Log10(2) */ ener = 0; i = 0; while ( i < 4 ) { ener += st->past_qua_en_MR122[i] * pred_MR122[i]; i++; } ener <<= 1; ener += MEAN_ENER_MR122; /* * predicted codebook gain * gc0 = Pow10( (ener*constant - ener_code*constant) / 20 ) * = Pow2(ener-ener_code) * = Pow2(int(d)+frac(d)) */ ener = ( ener - ener_code ) >> 1; /* Q16 */ *exp_gcode0 = ener >> 16; *frac_gcode0 = ( ener >> 1 ) - ( *exp_gcode0 << 15 ); } /* all modes except 12.2 */ else { Word32 tmp, gcode0; int exp_code; /* * Compute: meansEner - 10log10(ener_code/ LSufr) */ exp_code=0; if (ener_code != 0){ while (!(ener_code & 0x40000000)) { exp_code++; ener_code = ener_code << 1; } } /* Log2 = log2 + 27 */ Log2_norm( ener_code, exp_code, &exp, &frac ); /* fact = 10/log2(10) = 3.01 = 24660 Q13 */ /* Q0.Q15 * Q13 -> Q14 */ tmp = ( exp * ( -49320 ) ) + ( ( ( frac * ( -24660 ) ) >> 15 ) << 1 ); /* * tmp = meansEner - 10log10(ener_code/L_SUBFR) * = meansEner - 10log10(ener_code) + 10log10(L_SUBFR) * = K - fact * Log2(ener_code) * = K - fact * log2(ener_code) - fact*27 * * ==> K = meansEner + fact*27 + 10log10(L_SUBFR) * * meansEner = 33 = 540672 Q14 (MR475, MR515, MR59) * meansEner = 28.75 = 471040 Q14 (MR67) * meansEner = 30 = 491520 Q14 (MR74) * meansEner = 36 = 589824 Q14 (MR795) * meansEner = 33 = 540672 Q14 (MR102) * 10log10(L_SUBFR) = 16.02 = 262481.51 Q14 * fact * 27 = 1331640 Q14 * ----------------------------------------- * (MR475, MR515, MR59) K = 2134793.51 Q14 ~= 16678 * 64 * 2 * (MR67) K = 2065161.51 Q14 ~= 32268 * 32 * 2 * (MR74) K = 2085641.51 Q14 ~= 32588 * 32 * 2 * (MR795) K = 2183945.51 Q14 ~= 17062 * 64 * 2 * (MR102) K = 2134793.51 Q14 ~= 16678 * 64 * 2 */ if ( mode == MR102 ) { /* mean = 33 dB */ tmp += 2134784; /* Q14 */ } else if ( mode == MR795 ) { /* mean = 36 dB */ tmp += 2183936; /* Q14 */ /* * ener_code = * 2^27*2^exp_code * frac_en = ener_code / 2^16 * = * 2^11*2^exp_code * = *2^11*2^exp * 2^exp_en * := frac_en * 2^exp_en * * ==> exp_en = -11-exp_code; */ *frac_en = ener_code >> 16; *exp_en = -11 - exp_code; } else if ( mode == MR74 ) { /* mean = 30 dB */ tmp += 2085632; /* Q14 */ } else if ( mode == MR67 ) { /* mean = 28.75 dB */ tmp += 2065152; /* Q14 */ } else /* MR59, MR515, MR475 */ { /* mean = 33 dB */ tmp += 2134784; /* Q14 */ } /* * Compute gcode0 * = Sum(i=0,3) pred[i]*past_qua_en[i] - ener_code + meanEner */ tmp = tmp << 9; /* Q23 */ /* Q13 * Q10 -> Q23 */ i = 0; while ( i < 4 ) { tmp += pred[i] * st->past_qua_en[i]; i++; } gcode0 = tmp >> 15; /* Q8 */ /* * gcode0 = pow(10.0, gcode0/20) * = pow(2, 3.3219*gcode0/20) * = pow(2, 0.166*gcode0) */ /* 5439 Q15 = 0.165985 */ /* (correct: 1/(20*log10(2)) 0.166096 = 5443 Q15) */ /* For IS641 bitexactness */ if ( mode == MR74 ) { /* Q8 * Q15 -> Q24 */ tmp = gcode0 * 10878; } else { /* Q8 * Q15 -> Q24 */ tmp = gcode0 * 10886; } tmp = tmp >> 9; /* -> Q15 */ /* -> Q0.Q15 */ *exp_gcode0 = tmp >> 15; *frac_gcode0 = tmp - ( *exp_gcode0 * 32768 ); } } /* * gc_pred_update * * * Parameters: * st->past_qua_en B: MA predictor * st->past_qua_en_MR122 B: MA predictor MR122 * qua_ener_MR122 I: quantized energy for update (log2(quaErr)) * qua_ener I: quantized energy for update (20*log10(quaErr)) * * Function: * Update MA predictor with last quantized energy * * Returns: * void */ static void gc_pred_update( gc_predState *st, Word32 qua_ener_MR122, Word32 qua_ener ) { Word32 i; for ( i = 3; i > 0; i-- ) { st->past_qua_en[i] = st->past_qua_en[i - 1]; st->past_qua_en_MR122[i] = st->past_qua_en_MR122[i - 1]; } st->past_qua_en_MR122[0] = qua_ener_MR122; /* log2 (quaErr), Q10 */ st->past_qua_en[0] = qua_ener; /* 20*log10(quaErr), Q10 */ } /* * Dec_gain * * * Parameters: * pred_state->past_qua_en B: MA predictor * pred_state->past_qua_en_MR122 B: MA predictor MR122 * mode I: AMR mode * index I: index of quantization * code I: Innovative vector * evenSubfr I: Flag for even subframes * gain_pit O: Pitch gain * gain_cod O: Code gain * * Function: * Decode the pitch and codebook gains * * Returns: * void */ static void Dec_gain( gc_predState *pred_state, enum Mode mode, Word32 index, Word32 code[], Word32 evenSubfr, Word32 *gain_pit, Word32 *gain_cod ) { Word32 frac, gcode0, exp, qua_ener, qua_ener_MR122, g_code, tmp; const Word32 *p; /* Read the quantized gains (table depends on mode) */ index = index << 2; if ( ( mode == MR102 ) || ( mode == MR74 ) || ( mode == MR67 ) ) { p = &table_gain_highrates[index]; *gain_pit = *p++; g_code = *p++; qua_ener_MR122 = *p++; qua_ener = *p; } else { if ( mode == MR475 ) { index = index + ( ( 1 - evenSubfr ) << 1 ); p = &table_gain_MR475[index]; *gain_pit = *p++; g_code = *p++; /* * calculate predictor update values (not stored in 4.75 * quantizer table to save space): * qua_ener = log2(g) * qua_ener_MR122 = 20*log10(g) */ /* Log2(x Q12) = log2(x) + 12 */ Log2( g_code, &exp, &frac ); exp = exp - 12; tmp = frac >> 5; if ( ( frac & ( ( Word16 )1 << 4 ) ) != 0 ) { tmp++; } qua_ener_MR122 = tmp + ( exp << 10 ); /* 24660 Q12 ~= 6.0206 = 20*log10(2) */ tmp = exp * 49320; tmp += ( ( ( frac * 24660 ) >> 15 ) << 1 ); /* Q12 * Q0 = Q13 -> Q10 */ qua_ener = ( ( tmp << 13 ) + 0x00008000L ) >> 16; } else { p = &table_gain_lowrates[index]; *gain_pit = *p++; g_code = *p++; qua_ener_MR122 = *p++; qua_ener = *p; } } /* * predict codebook gain * gc0 = Pow2(int(d)+frac(d)) * = 2^exp + 2^frac * gcode0 (Q14) = 2^14*2^frac = gc0 * 2^(14-exp) */ gc_pred( pred_state, mode, code, &exp, &frac, NULL, NULL ); gcode0 = Pow2( 14, frac ); /* * read quantized gains, update table of past quantized energies * st->past_qua_en(Q10) = 20 * Log10(gFac) / constant * = Log2(gFac) * = qua_ener * constant = 20*Log10(2) */ if ( exp < 11 ) { *gain_cod = ( g_code * gcode0 ) >> ( 25 - exp ); } else { tmp = ( ( g_code * gcode0 ) << ( exp - 9 ) ); if ( ( tmp >> ( exp - 9 ) ) != ( g_code * gcode0 ) ) { *gain_cod = 0x7FFF; } else { *gain_cod = tmp >> 16; } } /* update table of past quantized energies */ gc_pred_update( pred_state, qua_ener_MR122, qua_ener ); return; } /* * gc_pred_average_limited * * * Parameters: * st->past_qua_en I: MA predictor * st->past_qua_en_MR122 I: MA predictor MR122 * ener_avg_MR122 O: everaged quantized energy (log2(quaErr)) * ener_avg O: averaged quantized energy (20*log10(quaErr)) * * Function: * Compute average limited quantized energy * Returns: * void */ static void gc_pred_average_limited( gc_predState *st, Word32 *ener_avg_MR122, Word32 *ener_avg ) { Word32 av_pred_en, i; /* do average in MR122 mode (log2() domain) */ av_pred_en = 0; for ( i = 0; i < NPRED; i++ ) { av_pred_en = ( av_pred_en + st->past_qua_en_MR122[i] ); } /* av_pred_en = 0.25*av_pred_en */ av_pred_en = ( av_pred_en * 8192 ) >> 15; /* if (av_pred_en < -14/(20Log10(2))) av_pred_en = .. */ if ( av_pred_en < MIN_ENERGY_MR122 ) { av_pred_en = MIN_ENERGY_MR122; } *ener_avg_MR122 = ( Word16 )av_pred_en; /* do average for other modes (20*log10() domain) */ av_pred_en = 0; for ( i = 0; i < NPRED; i++ ) { av_pred_en = ( av_pred_en + st->past_qua_en[i] ); if (av_pred_en < -32768) av_pred_en = -32768; else if (av_pred_en > 32767) av_pred_en = 32767; } /* av_pred_en = 0.25*av_pred_en */ av_pred_en = ( av_pred_en * 8192 ) >> 15; *ener_avg = av_pred_en; } /* * ec_gain_code * * * Parameters: * st->gbuf I: last five gains * st->past_gain_code I: past gain * pred_state B: MA predictor state * state I: state of the state machine * gain_code O: decoded innovation gain * * Function: * Conceal the codebook gain * * Returns: * void */ static void ec_gain_code( ec_gain_codeState *st, gc_predState *pred_state, Word16 state, Word32 *gain_code ) { Word32 tmp, qua_ener_MR122, qua_ener; /* calculate median of last five gain values */ tmp = gmed_n( st->gbuf, 5 ); /* new gain = minimum(median, past_gain) * cdown[state] */ if ( tmp > st->past_gain_code ) { tmp = st->past_gain_code; } tmp = ( tmp * cdown[state] ) >> 15; *gain_code = tmp; /* * update table of past quantized energies with average of * current values */ gc_pred_average_limited( pred_state, &qua_ener_MR122, &qua_ener ); gc_pred_update( pred_state, qua_ener_MR122, qua_ener ); } /* * ec_gain_code_update * * * Parameters: * st->gbuf B: last five gains * st->past_gain_code O: past gain * st->prev_gc B previous gain * bfi I: bad indicator * prev_bf I: previous frame bad indicator * gain_code O: decoded innovation gain * * Function: * Update the codebook gain concealment state * * Returns: * void */ static void ec_gain_code_update( ec_gain_codeState *st, Word16 bfi, Word16 prev_bf, Word32 *gain_code ) { /* limit gain_code by previous good gain if previous frame was bad */ if ( bfi == 0 ) { if ( prev_bf != 0 ) { if ( *gain_code > st->prev_gc ) { *gain_code = st->prev_gc; } } st->prev_gc = *gain_code; } /* update EC states: previous gain, gain buffer */ st->past_gain_code = *gain_code; st->gbuf[0] = st->gbuf[1]; st->gbuf[1] = st->gbuf[2]; st->gbuf[2] = st->gbuf[3]; st->gbuf[3] = st->gbuf[4]; st->gbuf[4] = *gain_code; return; } /* * d_gain_code * * * Parameters: * pred_state B: MA predictor state * mode I: AMR mode (MR795 or MR122) * index I: received quantization index * code I: innovation codevector * gain_code O: decoded innovation gain * * Function: * Decode the fixed codebook gain using the received index * * Returns: * void */ static void d_gain_code( gc_predState *pred_state, enum Mode mode, Word32 index, Word32 code[], Word32 *gain_code ) { Word32 g_code0, exp, frac, qua_ener_MR122, qua_ener; Word32 exp_inn_en, frac_inn_en, tmp, tmp2, i; const Word32 *p; /* * Decode codebook gain */ gc_pred( pred_state, mode, code, &exp, &frac, &exp_inn_en, &frac_inn_en ); p = &qua_gain_code[( ( index + index )+ index )]; /* Different scalings between MR122 and the other modes */ if ( mode == MR122 ) { /* predicted gain */ g_code0 = Pow2( exp, frac ); if ( g_code0 <= 2047 ) g_code0 = g_code0 << 4; else g_code0 = 32767; *gain_code = ( ( g_code0 * *p++ ) >> 15 ) << 1; if (*gain_code & 0xFFFF8000) *gain_code = 32767; } else { g_code0 = Pow2( 14, frac ); tmp = ( *p++ * g_code0 ) << 1; exp = 9 - exp; if ( exp > 0 ) { tmp = tmp >> exp; } else { for (i = exp; i < 0; i++) { tmp2 = tmp << 1; if ((tmp ^ tmp2) & 0x80000000) { tmp = (tmp & 0x80000000) ? 0x80000000 : 0x7FFFFFFF; break; } else { tmp = tmp2; } } } *gain_code = tmp >> 16; if (*gain_code & 0xFFFF8000) *gain_code = 32767; } /* * update table of past quantized energies */ qua_ener_MR122 = *p++; qua_ener = *p++; gc_pred_update( pred_state, qua_ener_MR122, qua_ener ); return; } /* * Int_lsf * * * Parameters: * lsf_old I: LSF vector at the 4th subframe of past frame * lsf_new I: LSF vector at the 4th subframe of present frame * i_subfr I: current subframe * lsf_out O: interpolated LSF parameters for current subframe * * Function: * Interpolates the LSFs for selected subframe * * The LSFs are interpolated at the 1st, 2nd and 3rd * ubframe and only forwarded at the 4th subframe. * * sf1: 3/4 F0 + 1/4 F1 * sf2: 1/2 F0 + 1/2 F1 * sf3: 1/4 F0 + 3/4 F1 * sf4: F1 * * Returns: * void */ static void Int_lsf( Word32 lsf_old[], Word32 lsf_new[], int i_subfr, Word32 lsf_out[] ) { Word32 i; switch ( i_subfr ) { case 0: for ( i = 0; i < 10; i++ ) { lsf_out[i] = lsf_old[i] - ( lsf_old[i] >> 2 ) + ( lsf_new[i] >> 2 ); } break; case 40: for ( i = 0; i < 10; i++ ) { lsf_out[i] = ( lsf_old[i] >> 1 ) + ( lsf_new[i] >> 1 ); } break; case 80: for ( i = 0; i < 10; i++ ) { lsf_out[i] = ( lsf_old[i] >> 2 ) - ( lsf_new[i] >> 2 ) + lsf_new[i]; } break; case 120: memcpy( lsf_out, lsf_new, M <<2 ); break; } } /* * Cb_gain_average * * * Parameters: * st->cbGainHistory B: codebook gain history * st->hangCount B: hangover counter * mode I: AMR mode * gain_code I: codebook gain * lsp I: The LSP for the current frame * lspAver I: The average of LSP for 8 frames * bfi I: bad frame indication * prev_bf I: previous bad frame indication * pdfi I: potential degraded bad frame indication * prev_pdf I: previous potential degraded bad frame indication * inBackgroundNoise I: background noise decision * voicedHangover I: number of frames after last voiced frame * * Function: * The mixed codebook gain, used to make codebook gain more smooth in background * * * Returns: * void */ static Word32 Cb_gain_average( Cb_gain_averageState *st, enum Mode mode, Word32 gain_code, Word32 lsp[], Word32 lspAver[], Word16 bfi, Word16 prev_bf, Word16 pdfi, Word16 prev_pdf, Word32 inBackgroundNoise, Word32 voicedHangover ) { Word32 tmp[M]; Word32 i, cbGainMix, tmp_diff, bgMix, cbGainMean, sum, diff, tmp1, tmp2; int shift1, shift2, shift; /* set correct cbGainMix for MR74, MR795, MR122 */ cbGainMix = gain_code; /* * Store list of CB gain needed in the CB gain averaging * */ st->cbGainHistory[0] = st->cbGainHistory[1]; st->cbGainHistory[1] = st->cbGainHistory[2]; st->cbGainHistory[2] = st->cbGainHistory[3]; st->cbGainHistory[3] = st->cbGainHistory[4]; st->cbGainHistory[4] = st->cbGainHistory[5]; st->cbGainHistory[5] = st->cbGainHistory[6]; st->cbGainHistory[6] = gain_code; /* compute lsp difference */ for ( i = 0; i < M; i++ ) { tmp1 = labs( lspAver[i]- lsp[i] ); shift1 = 0; if (tmp1 != 0){ while (!(tmp1 & 0x2000)) { shift1++; tmp1 = tmp1 << 1; } } tmp2 = lspAver[i]; shift2 = 0; if (tmp2 != 0){ while (!(tmp2 & 0x4000)) { shift2++; tmp2 = tmp2 << 1; } } tmp[i] = ( tmp1 << 15 ) / tmp2; shift = 2 + shift1 - shift2; if ( shift >= 0 ) { tmp[i] = tmp[i] >> shift; } else { tmp[i] = tmp[i] << -( shift ); } } diff = *tmp + tmp[1] + tmp[2] + tmp[3] + tmp[4] + tmp[5] + tmp[6] + tmp[7] + tmp[8] + tmp[9]; /* saturate */ if ( diff > 32767 ) { diff = 32767; } /* Compute hangover */ st->hangVar += 1; if ( diff <= 5325 ) { st->hangVar = 0; } if ( st->hangVar > 10 ) { /* Speech period, reset hangover variable */ st->hangCount = 0; } /* Compute mix constant (bgMix) */ bgMix = 8192; /* MR475, MR515, MR59, MR67, MR102 */ if ( ( mode <= MR67 ) | ( mode == MR102 ) ) { /* disable mix if too short time since */ if ( ( st->hangCount >= 40 ) & ( diff <= 5325 ) ) /* 0.65 in Q13 */ { /* if errors and presumed noise make smoothing probability stronger */ if ( ( ( ( ( pdfi != 0 ) & ( prev_pdf != 0 ) ) | ( bfi != 0 ) | ( prev_bf != 0 ) ) & ( ( voicedHangover > 1 ) ) & ( inBackgroundNoise != 0 ) & ( mode < MR67 ) ) ) { /* bgMix = min(0.25, max(0.0, diff-0.55)) / 0.25; */ tmp_diff = diff - 4506; /* 0.55 in Q13 */ /* max(0.0, diff-0.55) */ tmp1 = 0; if ( tmp_diff > 0 ) { tmp1 = tmp_diff; } /* min(0.25, tmp1) */ if ( 2048 >= tmp1 ) { bgMix = tmp1 << 2; } } else { /* bgMix = min(0.25, max(0.0, diff-0.40)) / 0.25; */ tmp_diff = diff - 3277; /* 0.4 in Q13 */ /* max(0.0, diff-0.40) */ tmp1 = 0; if ( tmp_diff > 0 ) { tmp1 = tmp_diff; } /* min(0.25, tmp1) */ if ( 2048 >= tmp1 ) { bgMix = tmp1 << 2; } } } /* * Smoothen the cb gain trajectory * smoothing depends on mix constant bgMix */ sum = st->cbGainHistory[2] + st->cbGainHistory[3] + st->cbGainHistory[4] + st->cbGainHistory[5] + st->cbGainHistory[6]; if ( sum > 163822 ) { cbGainMean = 32767; } else { cbGainMean = ( 3277 * sum + 0x00002000L ) >> 14; /* Q1 */ } /* more smoothing in error and bg noise (NB no DFI used here) */ if ( ( ( bfi != 0 ) | ( prev_bf != 0 ) ) & ( inBackgroundNoise != 0 ) & ( mode < MR67 ) ) { sum = 9362 * ( st->cbGainHistory[0] + st->cbGainHistory[1] + st-> cbGainHistory[2] + st->cbGainHistory[3] + st->cbGainHistory[4] + st->cbGainHistory[5] + st->cbGainHistory[6] ); cbGainMean = ( sum + 0x00008000L ) >> 16; /* Q1 */ } /* cbGainMix = bgMix*cbGainMix + (1-bgMix)*cbGainMean; */ sum = bgMix * cbGainMix; /* sum in Q14 */ sum += cbGainMean << 13; sum -= bgMix * cbGainMean; cbGainMix = ( sum + 0x00001000L ) >> 13; /* Q1 */ } st->hangCount += 1; if (st->hangCount & 0x80000000) st->hangCount = 40; return cbGainMix; } /* * ph_disp * * * Parameters: * state->gainMem B: LTP gain memory * state->prevCbGain B: Codebook gain memory * mode I: AMR mode * x B: LTP excitation signal -> total excitation signal * cbGain I: Codebook gain * ltpGain I: LTP gain * inno B: Innovation vector * pitch_fac I: pitch factor used to scale the LTP excitation * tmp_shift I: shift factor applied to sum of scaled LTP ex & innov. * before rounding * * Function: * Adaptive phase dispersion; forming of total excitation * * * Returns: * void */ static void ph_disp( ph_dispState *state, enum Mode mode, Word32 x[], Word32 cbGain, Word32 ltpGain, Word32 inno[], Word32 pitch_fac, Word32 tmp_shift) { Word32 inno_sav[L_SUBFR], ps_poss[L_SUBFR]; Word32 i, i1, impNr, temp1, temp2, j, nze, nPulse, ppos; const Word32 *ph_imp; /* Pointer to phase dispersion filter */ /* Update LTP gain memory */ state->gainMem[4] = state->gainMem[3]; state->gainMem[3] = state->gainMem[2]; state->gainMem[2] = state->gainMem[1]; state->gainMem[1] = state->gainMem[0]; state->gainMem[0] = ltpGain; /* basic adaption of phase dispersion */ /* no dispersion */ impNr = 2; /* if (ltpGain < 0.9) */ if ( ltpGain < PHDTHR2LTP ) { /* maximum dispersion */ impNr = 0; /* if (ltpGain > 0.6 */ if ( ltpGain > PHDTHR1LTP ) { /* medium dispersion */ impNr = 1; } } /* onset indicator */ /* onset = (cbGain > onFact * cbGainMem[0]) */ temp1 = ( ( state->prevCbGain * ONFACTPLUS1 ) + 0x1000 ) >> 13; if ( cbGain > temp1 ) { state->onset = ONLENGTH; } else { if ( state->onset > 0 ) { state->onset--; } } /* * if not onset, check ltpGain buffer and use max phase dispersion if * half or more of the ltpGain-parameters say so */ if ( state->onset == 0 ) { /* Check LTP gain memory and set filter accordingly */ i1 = 0; for ( i = 0; i < PHDGAINMEMSIZE; i++ ) { if ( state->gainMem[i] < PHDTHR1LTP ) { i1++; } } if ( i1 > 2 ) { impNr = 0; } } /* Restrict decrease in phase dispersion to one step if not onset */ if ( ( impNr > ( state->prevState + 1 ) ) & ( state->onset == 0 ) ) { impNr--; } /* if onset, use one step less phase dispersion */ if ( ( impNr<2 )&( state->onset>0 ) ) { impNr++; } /* disable for very low levels */ if ( cbGain < 10 ) { impNr = 2; } if ( state->lockFull == 1 ) { impNr = 0; } /* update static memory */ state->prevState = impNr; state->prevCbGain = cbGain; /* * do phase dispersion for all modes but 12.2 and 7.4; * don't modify the innovation if impNr >=2 (= no phase disp) */ if ( ( mode != MR122 ) & ( mode != MR102 ) & ( mode != MR74 ) & ( impNr < 2 ) ) { /* * track pulse positions, save innovation, * and initialize new innovation */ nze = 0; for ( i = 0; i < L_SUBFR; i++ ) { if ( inno[i] != 0 ) { ps_poss[nze] = i; nze++; } } memcpy( inno_sav, inno, L_SUBFR <<2 ); memset( inno, 0, L_SUBFR <<2 ); /* Choose filter corresponding to codec mode and dispersion criterium */ ph_imp = ph_imp_mid; if ( impNr == 0 ) { ph_imp = ph_imp_low; } if ( mode == MR795 ) { ph_imp = ph_imp_mid_MR795; if ( impNr == 0 ) { ph_imp = ph_imp_low_MR795; } } /* Do phase dispersion of innovation */ for ( nPulse = 0; nPulse < nze; nPulse++ ) { ppos = ps_poss[nPulse]; /* circular convolution with impulse response */ j = 0; for ( i = ppos; i < L_SUBFR; i++ ) { /* inno[i1] += inno_sav[ppos] * ph_imp[i1-ppos] */ temp1 = ( inno_sav[ppos] * ph_imp[j++] ) >> 15; inno[i] = inno[i] + temp1; } for ( i = 0; i < ppos; i++ ) { /* inno[i] += inno_sav[ppos] * ph_imp[L_SUBFR-ppos+i] */ temp1 = ( inno_sav[ppos] * ph_imp[j++] ) >> 15; inno[i] = inno[i] + temp1; } } } /* * compute total excitation for synthesis part of decoder * (using modified innovation if phase dispersion is active) */ for ( i = 0; i < L_SUBFR; i++ ) { /* x[i] = gain_pit*x[i] + cbGain*code[i]; */ temp1 = x[i] * pitch_fac + inno[i] * cbGain; temp2 = temp1 << tmp_shift; x[i] = ( temp2 + 0x4000 ) >> 15; if (labs(x[i]) > 32767) { if ((temp1 ^ temp2) & 0x80000000) { x[i] = (temp1 & 0x80000000) ? -32768: 32767; } else { x[i] = (temp2 & 0x80000000) ? -32768: 32767; } } } return; } /* * sqrt_l_exp * * * Parameters: * x I: input value * exp O: right shift to be applied to result * * Function: * Sqrt with exponent value. * * y = sqrt(x) * x = f * 2^-e, 0.5 <= f < 1 (normalization) * y = sqrt(f) * 2^(-e/2) * * a) e = 2k --> y = sqrt(f) * 2^-k * (k = e div 2, 0.707 <= sqrt(f) < 1) * b) e = 2k+1 --> y = sqrt(f/2) * 2^-k * (k = e div 2, 0.5 <= sqrt(f/2) < 0.707) * * * Returns: * y output value */ static Word32 sqrt_l_exp( Word32 x, Word32 *exp ) { Word32 y, a, i, tmp; int e; if ( x <= ( Word32 )0 ) { *exp = 0; return( Word32 )0; } e=0; if (x != 0){ tmp = x; while (!(tmp & 0x40000000)) { e++; tmp = tmp << 1; } } e = e & 0xFFFE; x = ( x << e ); *exp = ( Word16 )e; x = ( x >> 9 ); i = ( Word16 )( x >> 16 ); x = ( x >> 1 ); a = x & ( Word16 )0x7fff; i = ( i - 16 ); y = ( sqrt_table[i] << 16 ); tmp = ( sqrt_table[i] - sqrt_table[i + 1] ); y -= ( tmp * a ) << 1; return( y ); } /* * Ex_ctrl * * * Parameters: * excitation B: Current subframe excitation * excEnergy I: Exc. Energy, sqrt(totEx*totEx) * exEnergyHist I: History of subframe energies * voicedHangover I: number of frames after last voiced frame * prevBFI I: Set i previous bad frame indicators * carefulFlag I: Restrict dymamic in scaling * * Function: * Charaterice synthesis speech and detect background noise * * Returns: * background noise decision; 0 = no bgn, 1 = bgn */ static Word16 Ex_ctrl( Word32 excitation[], Word32 excEnergy, Word32 exEnergyHist[], Word32 voicedHangover, Word16 prevBFI, Word16 carefulFlag ) { Word32 i, testEnergy, scaleFactor, avgEnergy, prevEnergy, T0; int exp; /* get target level */ avgEnergy = gmed_n( exEnergyHist, 9 ); prevEnergy = ( exEnergyHist[7] + exEnergyHist[8] ) >> 1; if ( exEnergyHist[8] < prevEnergy ) { prevEnergy = exEnergyHist[8]; } /* upscaling to avoid too rapid energy rises for some cases */ if ( ( excEnergy5 ) ) { /* testEnergy = 4*prevEnergy; */ testEnergy = prevEnergy << 2; if ( ( voicedHangover < 7 ) || prevBFI != 0 ) { /* testEnergy = 3*prevEnergy */ testEnergy = testEnergy - prevEnergy; } if ( avgEnergy > testEnergy ) { avgEnergy = testEnergy; } /* scaleFactor=avgEnergy/excEnergy in Q0 */ exp=0; if (excEnergy != 0){ while (!(excEnergy & 0x4000)) { exp++; excEnergy = excEnergy << 1; } } excEnergy = 536838144 / excEnergy; T0 = ( avgEnergy * excEnergy ) << 1; T0 = ( T0 >> ( 20 - exp ) ); if ( T0 > 32767 ) { /* saturate */ T0 = 32767; } scaleFactor = T0; /* test if scaleFactor > 3.0 */ if ( ( carefulFlag != 0 ) & ( scaleFactor > 3072 ) ) { scaleFactor = 3072; } /* scale the excitation by scaleFactor */ for ( i = 0; i < L_SUBFR; i++ ) { T0 = ( scaleFactor * excitation[i] ) << 1; T0 = ( T0 >> 11 ); excitation[i] = T0; } } return 0; } /* * Inv_sqrt * * * Parameters: * x I: input value * * Function: * 1/sqrt(x) * * Returns: * y 1/sqrt(x) */ static Word32 Inv_sqrt( Word32 x ) { int i, a, tmp, exp; Word32 y; if ( x <= ( Word32 )0 ) return( ( Word32 )0x3fffffffL ); exp=0; while (!(x & 0x40000000)) { exp++; x = x << 1; } /* x is normalized */ exp = ( 30 - exp ); /* If exponent even -> shift right */ if ( ( exp & 1 ) == 0 ) { x = ( x >> 1 ); } exp = ( exp >> 1 ); exp = ( exp + 1 ); x = ( x >> 9 ); /* Extract b25-b31 */ i = ( Word16 )( x >> 16 ); /* Extract b10-b24 */ x = ( x >> 1 ); a = x & ( Word16 )0x7fff; i = ( i - 16 ); /* table[i] << 16 */ y = inv_sqrt_table[i] << 16; /* table[i] - table[i+1]) */ tmp = ( inv_sqrt_table[i] - inv_sqrt_table[i + 1] ); /* y -= tmp*a*2 */ y -= ( tmp * a ) << 1; /* denormalization */ y = ( y >> exp ); return( y ); } /* * energy_old * * * Parameters: * in I: input value * * Function: * Energy of signal * * Returns: * Energy */ static Word32 energy_old( Word32 in[] ) { Word32 temp, i, sum = 0; for ( i = 0; i < L_SUBFR; i += 8 ) { temp = in[i] >> 2; sum += temp * temp; temp = in[i + 1] >> 2; sum += temp * temp; temp = in[i + 2] >> 2; sum += temp * temp; temp = in[i + 3] >> 2; sum += temp * temp; temp = in[i + 4] >> 2; sum += temp * temp; temp = in[i + 5] >> 2; sum += temp * temp; temp = in[i + 6] >> 2; sum += temp * temp; temp = in[i + 7] >> 2; sum += temp * temp; } if ( sum & 0xC0000000 ) { return 0x7FFFFFFF; } return( sum << 1 ); } /* * energy_new * * * Parameters: * in I: input value * * Function: * Energy of signal * * Returns: * Energy */ static Word32 energy_new( Word32 in[] ) { Word32 i, s = 0, overflow = 0; s += in[0] * in[0]; for ( i = 1; i < L_SUBFR; i += 3 ) { s += in[i] * in[i]; s += in[i + 1] *in[i + 1]; s += in[i + 2] * in[i + 2]; if ( s & 0xC0000000 ) { overflow = 1; break; } } /* check for overflow */ if ( overflow ) { s = energy_old( in ); } else { s = ( s >> 3 ); } return s; } /* * agc2 * * * Parameters: * sig_in I: Post_Filter input signal * sig_out B: Post_Filter output signal * * Function: * Scales the excitation on a subframe basis * * Returns: * Energy */ static void agc2( Word32 *sig_in, Word32 *sig_out ) { Word32 s; int i, exp; Word16 gain_in, gain_out, g0; /* calculate gain_out with exponent */ s = energy_new( sig_out ); if ( s == 0 ) { return; } exp=0; while (!(s & 0x20000000)) { exp++; s = s << 1; } gain_out = ( Word16 )( ( s + 0x00008000L ) >> 16 ); /* calculate gain_in with exponent */ s = energy_new( sig_in ); if ( s == 0 ) { g0 = 0; } else { i = 0; while (!(s & 0x40000000)) { i++; s = s << 1; } if ( s < 0x7fff7fff ) gain_in = ( Word16 )( ( s + 0x00008000L ) >> 16 ); else gain_in = 32767; exp = ( exp - i ); /* * g0 = sqrt(gain_in/gain_out); */ /* s = gain_out / gain_in */ s = ( gain_out << 15 ) / gain_in; s = ( s << 7 ); if ( exp > 0 ) s = ( s >> exp ); else s = ( s << ( -exp ) ); s = Inv_sqrt( s ); g0 = ( Word16 )( ( ( s << 9 ) + 0x00008000L ) >> 16 ); } /* sig_out(n) = gain(n) * sig_out(n) */ for ( i = 0; i < L_SUBFR; i++ ) { sig_out[i] = ( sig_out[i] * g0 ) >> 12; } return; } /* * Bgn_scd * * * Parameters: * st->frameEnergyHist B: Frame Energy memory * st->bgHangover B: Background hangover counter * ltpGainHist I: LTP gain history * speech I: synthesis speech frame * voicedHangover O: number of frames after last voiced frame * * Function: * Charaterice synthesis speech and detect background noise * * Returns: * inbgNoise background noise decision; 0 = no bgn, 1 = bgn */ static Word16 Bgn_scd( Bgn_scdState *st, Word32 ltpGainHist[], Word32 speech[], Word32 *voicedHangover ) { Word32 temp, ltpLimit, frame_energyMin, currEnergy, noiseFloor, maxEnergy, maxEnergyLastPart, s, i; Word16 prevVoiced, inbgNoise; /* * Update the inBackgroundNoise flag (valid for use in next frame if BFI) * it now works as a energy detector floating on top * not as good as a VAD. */ s = 0; for ( i = 0; i < L_FRAME; i++ ) { s += speech[i] * speech[i]; } if ( (s < 0xFFFFFFF) & (s >= 0) ) currEnergy = s >> 13; else currEnergy = 32767; frame_energyMin = 32767; for ( i = 0; i < L_ENERGYHIST; i++ ) { if ( st->frameEnergyHist[i] < frame_energyMin ) frame_energyMin = st->frameEnergyHist[i]; } /* Frame Energy Margin of 16 */ noiseFloor = frame_energyMin << 4; maxEnergy = st->frameEnergyHist[0]; for ( i = 1; i < L_ENERGYHIST - 4; i++ ) { if ( maxEnergy < st->frameEnergyHist[i] ) { maxEnergy = st->frameEnergyHist[i]; } } maxEnergyLastPart = st->frameEnergyHist[2 * L_ENERGYHIST / 3]; for ( i = 2 * L_ENERGYHIST / 3 + 1; i < L_ENERGYHIST; i++ ) { if ( maxEnergyLastPart < st->frameEnergyHist[i] ) { maxEnergyLastPart = st->frameEnergyHist[i]; } } /* false */ inbgNoise = 0; /* * Do not consider silence as noise * Do not consider continuous high volume as noise * Or if the current noise level is very low * Mark as noise if under current noise limit * OR if the maximum energy is below the upper limit */ if ( ( maxEnergy> LOWERNOISELIMIT )&( currEnergyLOWERNOISELIMIT ) & ( ( currEnergy < noiseFloor ) || ( maxEnergyLastPart < UPPERNOISELIMIT ) ) ) { if ( ( st->bgHangover + 1 ) > 30 ) { st->bgHangover = 30; } else { st->bgHangover += 1; } } else { st->bgHangover = 0; } /* make final decision about frame state, act somewhat cautiosly */ if ( st->bgHangover > 1 ) inbgNoise = 1; /* true */ for ( i = 0; i < L_ENERGYHIST - 1; i++ ) { st->frameEnergyHist[i] = st->frameEnergyHist[i + 1]; } st->frameEnergyHist[L_ENERGYHIST - 1] = currEnergy; /* * prepare for voicing decision; * tighten the threshold after some time in noise */ ltpLimit = 13926; /* 0.85 Q14 */ if ( st->bgHangover > 8 ) { ltpLimit = 15565; /* 0.95 Q14 */ } if ( st->bgHangover > 15 ) { ltpLimit = 16383; /* 1.00 Q14 */ } /* weak sort of voicing indication. */ prevVoiced = 0; /* false */ if ( gmed_n( <pGainHist[4], 5 ) > ltpLimit ) { prevVoiced = 1; /* true */ } if ( st->bgHangover > 20 ) { if ( gmed_n( ltpGainHist, 9 ) > ltpLimit ) { prevVoiced = 1; /* true */ } else { prevVoiced = 0; /* false */ } } if ( prevVoiced ) { *voicedHangover = 0; } else { temp = *voicedHangover + 1; if ( temp > 10 ) { *voicedHangover = 10; } else { *voicedHangover = temp; } } return inbgNoise; } /* * dtx_dec_activity_update * * * Parameters: * st->lsf_hist_ptr B: LSF history pointer * st->lsf_hist B: LSF history * lsf I: lsf * frame I: noise frame * * Function: * Update lsp history and compute log energy. * * Returns: * void */ static void dtx_dec_activity_update( dtx_decState *st, Word32 lsf[], Word32 frame[] ) { Word32 frame_en; Word32 log_en_e, log_en_m, log_en, i; /* update lsp history */ st->lsf_hist_ptr += M; if ( st->lsf_hist_ptr == 80 ) { st->lsf_hist_ptr = 0; } memcpy( &st->lsf_hist[st->lsf_hist_ptr], lsf, M <<2 ); /* compute log energy based on frame energy */ frame_en = 0; /* Q0 */ for ( i = 0; (i < L_FRAME); i ++ ) { frame_en += frame[i] * frame[i]; if (frame_en & 0x80000000) break; } log_en = (frame_en & 0xC0000000) ? 0x7FFFFFFE: (Word32)frame_en << 1; Log2( log_en , &log_en_e, &log_en_m ); /* convert exponent and mantissa to Word16 Q10 */ log_en = log_en_e << 10; /* Q10 */ log_en = log_en + ( log_en_m >> 5 ); /* divide with L_FRAME i.e subtract with log2(L_FRAME) = 7.32193 */ log_en = log_en - 8521; /* * insert into log energy buffer, no division by two as * log_en in decoder is Q11 */ st->log_en_hist_ptr += 1; if ( st->log_en_hist_ptr == DTX_HIST_SIZE ) { st->log_en_hist_ptr = 0; } st->log_en_hist[st->log_en_hist_ptr] = log_en; /* Q11 */ } /* * Decoder_amr * * * Parameters: * st B: State variables * mode I: AMR mode * parm I: vector of synthesis parameters * frame_type I: received frame type * synth O: synthesis speech * A_t O: decoded LP filter in 4 subframes * * Function: * Speech decoder routine * * Returns: * void */ static void Decoder_amr( Decoder_amrState *st, enum Mode mode, Word16 parm[], enum RXFrameType frame_type, Word32 synth[], Word32 A_t[] ) { /* LSPs */ Word32 lsp_new[M]; Word32 lsp_mid[M]; /* LSFs */ Word32 prev_lsf[M]; Word32 lsf_i[M]; /* Algebraic codevector */ Word32 code[L_SUBFR]; /* excitation */ Word32 excp[L_SUBFR]; Word32 exc_enhanced[L_SUBFR]; /* Scalars */ Word32 i, i_subfr, overflow, T0_frac, index, temp, temp2, subfrNr, excEnergy; Word32 gain_code, gain_code_mix, pit_sharp, pit_flag, pitch_fac, t0_min, t0_max; Word32 gain_pit = 0, evenSubfr = 0, T0 = 0, index_mr475 = 0; Word32 *Az; /* Pointer on A_t */ Word16 flag4, carefulFlag; Word16 delta_frc_low, delta_frc_range, tmp_shift; Word16 bfi = 0, pdfi = 0; /* bad frame indication flag, potential degraded bad frame flag */ enum DTXStateType newDTXState; /* SPEECH , DTX, DTX_MUTE */ /* find the new DTX state SPEECH OR DTX */ newDTXState = rx_dtx_handler( st->dtxDecoderState, frame_type ); /* DTX actions */ if ( newDTXState != SPEECH ) { Decoder_amr_reset( st, MRDTX ); dtx_dec( st->dtxDecoderState, st->mem_syn, st->lsfState, st->pred_state, st->Cb_gain_averState, newDTXState, mode, parm, synth, A_t ); /* update average lsp */ Lsf_lsp( st->lsfState->past_lsf_q, st->lsp_old ); lsp_avg( st->lsp_avg_st, st->lsfState->past_lsf_q ); goto theEnd; } /* SPEECH action state machine */ if ( table_speech_bad[frame_type] ) { bfi = 1; if ( frame_type != RX_SPEECH_BAD ) { Build_CN_param( &st->nodataSeed, mode, parm ); } } else if ( frame_type == RX_SPEECH_DEGRADED ) { pdfi = 1; } if ( bfi != 0 ) { st->state += 1; } else if ( st->state == 6 ) { st->state = 5; } else { st->state = 0; } if ( st->state > 6 ) { st->state = 6; } /* * If this frame is the first speech frame after CNI period, * set the BFH state machine to an appropriate state depending * on whether there was DTX muting before start of speech or not * If there was DTX muting, the first speech frame is muted. * If there was no DTX muting, the first speech frame is not * muted. The BFH state machine starts from state 5, however, to * keep the audible noise resulting from a SID frame which is * erroneously interpreted as a good speech frame as small as * possible (the decoder output in this case is quickly muted) */ if ( st->dtxDecoderState->dtxGlobalState == DTX ) { st->state = 5; st->prev_bf = 0; } else if ( st->dtxDecoderState->dtxGlobalState == DTX_MUTE ) { st->state = 5; st->prev_bf = 1; } /* save old LSFs for CB gain smoothing */ memcpy( prev_lsf, st->lsfState->past_lsf_q, M <<2 ); /* * decode LSF parameters and generate interpolated lpc coefficients * for the 4 subframes */ if ( mode != MR122 ) { D_plsf_3( st->lsfState, mode, bfi, parm, lsp_new ); /* Advance synthesis parameters pointer */ parm += 3; Int_lpc_1to3( st->lsp_old, lsp_new, A_t ); } else { D_plsf_5( st->lsfState, bfi, parm, lsp_mid, lsp_new ); /* Advance synthesis parameters pointer */ parm += 5; Int_lpc_1and3( st->lsp_old, lsp_mid, lsp_new, A_t ); } /* update the LSPs for the next frame */ memcpy( st->lsp_old, lsp_new, M <<2 ); /* * Loop for every subframe in the analysis frame * * The subframe size is L_SUBFR and the loop is repeated * L_FRAME/L_SUBFR times * * - decode the pitch delay * - decode algebraic code * - decode pitch and codebook gains * - find the excitation and compute synthesis speech */ /* pointer to interpolated LPC parameters */ Az = A_t; evenSubfr = 0; subfrNr = -1; for ( i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR ) { subfrNr += 1; evenSubfr = 1 - evenSubfr; /* flag for first and 3th subframe */ pit_flag = i_subfr; if ( i_subfr == L_FRAME_BY2 ) { if ( ( mode != MR475 ) & ( mode != MR515 ) ) { pit_flag = 0; } } /* pitch index */ index = *parm++; /* * decode pitch lag and find adaptive codebook vector. */ if ( mode != MR122 ) { /* * flag4 indicates encoding with 4 bit resolution; * this is needed for mode MR475, MR515, MR59 and MR67 */ flag4 = 0; if ( ( mode == MR475 ) || ( mode == MR515 ) || ( mode == MR59 ) || ( mode == MR67 ) ) { flag4 = 1; } /* * get ranges for the t0_min and t0_max * only needed in delta decoding */ delta_frc_low = 5; delta_frc_range = 9; if ( mode == MR795 ) { delta_frc_low = 10; delta_frc_range = 19; } t0_min = st->old_T0 - delta_frc_low; if ( t0_min < PIT_MIN ) { t0_min = PIT_MIN; } t0_max = t0_min + delta_frc_range; if ( t0_max > PIT_MAX ) { t0_max = PIT_MAX; t0_min = t0_max - delta_frc_range; } Dec_lag3( index, t0_min, t0_max, pit_flag, st->old_T0, &T0, &T0_frac, flag4 ); st->T0_lagBuff = T0; if ( bfi != 0 ) { if ( st->old_T0 < PIT_MAX ) { /* Graceful pitch degradation */ st->old_T0 += 1; } T0 = st->old_T0; T0_frac = 0; if ( ( st->inBackgroundNoise != 0 ) & ( st->voicedHangover > 4 ) & ( ( mode == MR475 ) || ( mode == MR515 ) || ( mode == MR59 ) ) ) { T0 = st->T0_lagBuff; } } Pred_lt_3or6_40( st->exc, T0, T0_frac, 1 ); } else { Dec_lag6( index, PIT_MIN_MR122, PIT_MAX, pit_flag, &T0, &T0_frac ); if ( ( bfi != 0 ) || ( ( pit_flag != 0 ) & ( index > 60 ) ) ) { st->T0_lagBuff = T0; T0 = st->old_T0; T0_frac = 0; } Pred_lt_3or6_40( st->exc, T0, T0_frac, 0 ); } /* * (MR122 only: Decode pitch gain.) * Decode innovative codebook. * set pitch sharpening factor */ /* MR475, MR515 */ if ( ( mode == MR475 ) || ( mode == MR515 ) ) { /* index of position */ index = *parm++; /* signs */ i = *parm++; decode_2i40_9bits( subfrNr, i, index, code ); pit_sharp = st->sharp << 1; } /* MR59 */ else if ( mode == MR59 ) { /* index of position */ index = *parm++; /* signs */ i = *parm++; decode_2i40_11bits( i, index, code ); pit_sharp = st->sharp << 1; } /* MR67 */ else if ( mode == MR67 ) { /* index of position */ index = *parm++; /* signs */ i = *parm++; decode_3i40_14bits( i, index, code ); pit_sharp = st->sharp << 1; } /* MR74, MR795 */ else if ( mode <= MR795 ) { /* index of position */ index = *parm++; /* signs */ i = *parm++; decode_4i40_17bits( i, index, code ); pit_sharp = st->sharp << 1; } /* MR102 */ else if ( mode == MR102 ) { decode_8i40_31bits( parm, code ); parm += 7; pit_sharp = st->sharp << 1; } /* MR122 */ else { index = *parm++; if ( bfi != 0 ) { ec_gain_pitch( st->ec_gain_p_st, st->state, &gain_pit ); } else { gain_pit = d_gain_pitch( mode, index ); } ec_gain_pitch_update( st->ec_gain_p_st, bfi, st->prev_bf, &gain_pit ); decode_10i40_35bits( parm, code ); parm += 10; /* * pit_sharp = gain_pit; * if (pit_sharp > 1.0) pit_sharp = 1.0; */ pit_sharp = gain_pit; if ( pit_sharp > 16383 ) pit_sharp = 32767; else pit_sharp *= 2; } /* * Add the pitch contribution to code[]. */ for ( i = T0; i < L_SUBFR; i++ ) { temp = ( code[i - T0] * pit_sharp ) >> 15; code[i] = code[i] + temp; } /* * Decode codebook gain (MR122) or both pitch * gain and codebook gain (all others) * Update pitch sharpening "sharp" with quantized gain_pit */ if ( mode == MR475 ) { /* read and decode pitch and code gain */ if ( evenSubfr != 0 ) { /* index of gain(s) */ index_mr475 = *parm++; } if ( bfi == 0 ) { Dec_gain( st->pred_state, mode, index_mr475, code, evenSubfr, & gain_pit, &gain_code ); } else { ec_gain_pitch( st->ec_gain_p_st, st->state, &gain_pit ); ec_gain_code( st->ec_gain_c_st, st->pred_state, st->state, & gain_code ); } ec_gain_pitch_update( st->ec_gain_p_st, bfi, st->prev_bf, &gain_pit ); ec_gain_code_update( st->ec_gain_c_st, bfi, st->prev_bf, &gain_code ); pit_sharp = gain_pit; if ( pit_sharp > SHARPMAX ) { pit_sharp = SHARPMAX; } } else if ( ( mode <= MR74 ) || ( mode == MR102 ) ) { /* read and decode pitch and code gain */ /* index of gain(s) */ index = *parm++; if ( bfi == 0 ) { Dec_gain( st->pred_state, mode, index, code, evenSubfr, &gain_pit, & gain_code ); } else { ec_gain_pitch( st->ec_gain_p_st, st->state, &gain_pit ); ec_gain_code( st->ec_gain_c_st, st->pred_state, st->state, & gain_code ); } ec_gain_pitch_update( st->ec_gain_p_st, bfi, st->prev_bf, &gain_pit ); ec_gain_code_update( st->ec_gain_c_st, bfi, st->prev_bf, &gain_code ); pit_sharp = gain_pit; if ( pit_sharp > SHARPMAX ) { pit_sharp = SHARPMAX; } if ( mode == MR102 ) { if ( st->old_T0 > ( L_SUBFR + 5 ) ) { pit_sharp = pit_sharp >> 2; } } } else { /* read and decode pitch gain */ /* index of gain(s) */ index = *parm++; if ( mode == MR795 ) { /* decode pitch gain */ if ( bfi != 0 ) { ec_gain_pitch( st->ec_gain_p_st, st->state, &gain_pit ); } else { gain_pit = d_gain_pitch( mode, index ); } ec_gain_pitch_update( st->ec_gain_p_st, bfi, st->prev_bf, &gain_pit ); /* read and decode code gain */ index = *parm++; if ( bfi == 0 ) { d_gain_code( st->pred_state, mode, index, code, &gain_code ); } else { ec_gain_code( st->ec_gain_c_st, st->pred_state, st->state, & gain_code ); } ec_gain_code_update( st->ec_gain_c_st, bfi, st->prev_bf, &gain_code ); pit_sharp = gain_pit; if ( pit_sharp > SHARPMAX ) { pit_sharp = SHARPMAX; } } else { /* MR122 */ if ( bfi == 0 ) { d_gain_code( st->pred_state, mode, index, code, &gain_code ); } else { ec_gain_code( st->ec_gain_c_st, st->pred_state, st->state, & gain_code ); } ec_gain_code_update( st->ec_gain_c_st, bfi, st->prev_bf, &gain_code ); pit_sharp = gain_pit; } } /* * store pitch sharpening for next subframe * (for modes which use the previous pitch gain for * pitch sharpening in the search phase) * do not update sharpening in even subframes for MR475 */ if ( ( mode != MR475 ) || evenSubfr == 0 ) { st->sharp = gain_pit; if ( st->sharp > SHARPMAX ) { st->sharp = SHARPMAX; } } if ( pit_sharp > 16383 ) pit_sharp = 32767; else pit_sharp *= 2; if ( pit_sharp > 16384 ) { for ( i = 0; i < L_SUBFR; i++ ) { temp = ( st->exc[i] * pit_sharp ) >> 15; temp2 = ( temp * gain_pit ) << 1; if ( mode == MR122 ) { temp2 = ( temp2 >> 1 ); } excp[i] = ( temp2 + 0x00008000L ) >> 16; } } /* * Store list of LTP gains needed in the source * characteristic detector (SCD) */ if ( bfi == 0 ) { for (i = 0; i < 8; i++){ st->ltpGainHistory[i] = st->ltpGainHistory[i+1]; } st->ltpGainHistory[8] = gain_pit; } /* * Limit gain_pit if in background noise and BFI * for MR475, MR515, MR59 */ if ( ( st->prev_bf != 0 || bfi != 0 ) & ( st->inBackgroundNoise != 0 ) & ( ( mode == MR475 ) || ( mode == MR515 ) || ( mode == MR59 ) ) ) { /* if (gain_pit > 0.75) in Q14*/ if ( gain_pit > 12288 ) /* gain_pit = (gain_pit-0.75)/2.0 + 0.75; */ gain_pit = ( ( gain_pit - 12288 ) >> 1 ) + 12288; /* if (gain_pit > 0.90) in Q14*/ if ( gain_pit > 14745 ) { gain_pit = 14745; } } /* * Calculate CB mixed gain */ Int_lsf( prev_lsf, st->lsfState->past_lsf_q, i_subfr, lsf_i ); gain_code_mix = Cb_gain_average( st->Cb_gain_averState, mode, gain_code, lsf_i, st->lsp_avg_st->lsp_meanSave, bfi, st->prev_bf, pdfi, st-> prev_pdf, st->inBackgroundNoise, st->voicedHangover ); /* make sure that MR74, MR795, MR122 have original codeGain*/ /* MR74, MR795, MR122 */ if ( ( mode > MR67 ) & ( mode != MR102 ) ) { gain_code_mix = gain_code; } /* * Find the total excitation. * Find synthesis speech corresponding to st->exc[]. */ /* MR475, MR515, MR59, MR67, MR74, MR795, MR102*/ if ( mode <= MR102 ) { pitch_fac = gain_pit; tmp_shift = 1; } /* MR122 */ else { pitch_fac = gain_pit >> 1; tmp_shift = 2; } /* * copy unscaled LTP excitation to exc_enhanced (used in phase * dispersion below) and compute total excitation for LTP feedback */ memcpy( exc_enhanced, st->exc, L_SUBFR <<2 ); for ( i = 0; i < L_SUBFR; i++ ) { /* st->exc[i] = gain_pit*st->exc[i] + gain_code*code[i]; */ temp = ( st->exc[i] * pitch_fac ) + ( code[i] * gain_code ); temp2 = ( temp << tmp_shift ); if (((temp2 >> 1) ^ temp2) & 0x40000000) { if ((temp ^ temp2) & 0x80000000) { temp2 = (temp & 0x80000000) ? (-1073741824L) : 1073725439; } else { temp2 = (temp2 & 0x80000000) ? (-1073741824L) : 1073725439; } } st->exc[i] = ( temp2 + 0x00004000L ) >> 15; } /* * Adaptive phase dispersion */ /* free phase dispersion adaption */ st->ph_disp_st->lockFull = 0; if ( ( ( mode == MR475 ) || ( mode == MR515 ) || ( mode == MR59 ) ) & ( st ->voicedHangover > 3 ) & ( st->inBackgroundNoise != 0 ) & ( bfi != 0 ) ) { /* * Always Use full Phase Disp. * if error in bg noise */ st->ph_disp_st->lockFull = 1; } /* * apply phase dispersion to innovation (if enabled) and * compute total excitation for synthesis part */ ph_disp( st->ph_disp_st, mode, exc_enhanced, gain_code_mix, gain_pit, code , pitch_fac, tmp_shift ); /* * The Excitation control module are active during BFI. * Conceal drops in signal energy if in bg noise. */ temp2 = 0; for ( i = 0; i < L_SUBFR; i++ ) { temp2 += ( exc_enhanced[i] * exc_enhanced[i] ); } if ( temp2 > 0x3FFFFFFF ) { excEnergy = 11584; } else { temp2 = sqrt_l_exp( temp2, &temp ); temp2 = ( temp2 >> ( ( temp >> 1 ) + 15 ) ); excEnergy = temp2 >> 2; } if ( ( ( mode == MR475 ) || ( mode == MR515 ) || ( mode == MR59 ) ) & ( st ->voicedHangover > 5 ) & ( st->inBackgroundNoise != 0 ) & ( st-> state < 4 ) & ( ( ( pdfi != 0 ) & ( st->prev_pdf != 0 ) ) || bfi != 0 || st->prev_bf != 0 ) ) { carefulFlag = 0; if ( ( pdfi != 0 ) & ( bfi == 0 ) ) { carefulFlag = 1; } Ex_ctrl( exc_enhanced, excEnergy, st->excEnergyHist, st->voicedHangover , st->prev_bf, carefulFlag ); } if ( ( st->inBackgroundNoise != 0 ) & ( bfi != 0 || st->prev_bf != 0 ) & ( st->state < 4 ) ) {; /* do nothing! */ } else { /* Update energy history for all modes */ for (i = 0; i < 8; i++){ st->excEnergyHist[i] = st->excEnergyHist[i+1]; } st->excEnergyHist[8] = excEnergy; } /* * Excitation control module end. */ if ( pit_sharp > 16384 ) { for ( i = 0; i < L_SUBFR; i++ ) { excp[i] = excp[i] + exc_enhanced[i]; if (labs(excp[i]) > 32767) excp[i] = (excp[i] & 0x80000000) ? -32768 : 32767; } agc2( exc_enhanced, excp ); overflow = Syn_filt( Az, excp, &synth[i_subfr], L_SUBFR, st->mem_syn, 0 ); } else { overflow = Syn_filt( Az, exc_enhanced, &synth[i_subfr], L_SUBFR, st-> mem_syn, 0 ); } if ( overflow ) { for ( i = 0; i < PIT_MAX + L_INTERPOL + L_SUBFR; i++ ) { st->old_exc[i] = st->old_exc[i] >> 2; } for ( i = 0; i < L_SUBFR; i++ ) { exc_enhanced[i] = exc_enhanced[i] >> 2; } Syn_filt_overflow( Az, exc_enhanced, &synth[i_subfr], L_SUBFR, st->mem_syn, 1 ); } else { memcpy( st->mem_syn, &synth[i_subfr + 30], 40 ); } /* * Update signal for next frame. * -> shift to the left by L_SUBFR st->exc[] */ memcpy( &st->old_exc[0], &st->old_exc[L_SUBFR], ( PIT_MAX + L_INTERPOL )<< 2 ); /* interpolated LPC parameters for next subframe */ Az += MP1; /* store T0 for next subframe */ st->old_T0 = T0; } /* * Call the Source Characteristic Detector which updates * st->inBackgroundNoise and st->voicedHangover. */ st->inBackgroundNoise = Bgn_scd( st->background_state, &( st->ltpGainHistory[ 0] ), &( synth[0] ), &( st->voicedHangover ) ); dtx_dec_activity_update( st->dtxDecoderState, st->lsfState->past_lsf_q, synth ); /* store bfi for next subframe */ st->prev_bf = bfi; st->prev_pdf = pdfi; /* * Calculate the LSF averages on the eight * previous frames */ lsp_avg( st->lsp_avg_st, st->lsfState->past_lsf_q ); theEnd: st->dtxDecoderState->dtxGlobalState = newDTXState; return; } /* * Residu40 * * * Parameters: * a I: prediction coefficients * x I: speech signal * y O: residual signal * * Function: * The LP residual is computed by filtering the input * speech through the LP inverse filter a(z) * * Returns: * void */ static void Residu40( Word32 a[], Word32 x[], Word32 y[] ) { Word32 s, i, j; for ( i = 0; i < 40; i++ ) { s = a[0] * x[i] + a[1] * x[i - 1] + a[2] * x[i - 2] + a[3] * x[i - 3]; s += a[4] * x[i - 4] + a[5] * x[i - 5] + a[6] * x[i - 6] + a[7] * x[i - 7] ; s += a[8] * x[i - 8] + a[9] * x[i - 9] + a[10] * x[i - 10]; y[i] = ( s + 0x800 ) >> 12; if (abs(y[i]) > 32767){ /* go to safe mode */ for (i = 0; i < 40; i++) { s = a[0] * x[i]; for (j = 1; j <= 10; j++) { s += a[j] * x[i - j]; if (s > 1073741823){ s = 1073741823; } else if ( s < -1073741824) { s = -1073741824; } } y[i] = ( s + 0x800 ) >> 12; if (abs(y[i]) > 32767) y[i] = (y[i] & 0x80000000) ? -32768 : 32767; } return; } } return; } /* * agc * * * Parameters: * st->past_gain B: gain memory * sig_in I: Post_Filter input signal * sig_out B: Post_Filter output signal * agc_fac I: AGC factor * * Function: * Scales the Post_Filter output on a subframe basis * * Returns: * void */ static void agc( agcState *st, Word32 *sig_in, Word32 *sig_out, Word16 agc_fac ) { Word32 s, gain_in, gain_out, g0, gain; int exp, i; /* calculate gain_out with exponent */ s = energy_new( sig_out ); if ( s == 0 ) { st->past_gain = 0; return; } exp=0; i = s; while (!(i & 0x40000000)) { exp++; i = i << 1; } exp -=1; if (exp & 0x80000000) { s >>= 1; } else { s <<= exp; } gain_out = ( s + 0x00008000L ) >> 16; /* calculate gain_in with exponent */ s = energy_new( sig_in ); if ( s == 0 ) { g0 = 0; } else { i=0; while (!(s & 0x40000000)) { i++; s = s << 1; } s = s + 0x00008000L; if ( s >= 0 ) gain_in = s >> 16; else gain_in = 32767; exp = ( exp - i ); /* * g0 = (1-agc_fac) * sqrt(gain_in/gain_out); */ /* s = gain_out / gain_in */ s = ( gain_out << 15 ) / gain_in; exp = 7 - exp; if ( exp > 0 ){ if (exp > 31) { if(s){ s = 2147483647; } } else { s = s << exp ; } } else s = ( s >> ( -exp ) ); if (s < 0) s = 2147483647; s = Inv_sqrt( s ); i = ( ( s << 9 ) + 0x00008000L ) >> 16; if (i & 0xFFFF8000) i = 32767; /* g0 = i * (1-agc_fac) */ g0 = ( i * ( 32767 - agc_fac ) ) >> 15; } /* * compute gain[n] = agc_fac * gain[n-1] + (1-agc_fac) * sqrt(gain_in/gain_out) * sig_out[n] = gain[n] * sig_out[n] */ gain = st->past_gain; for ( i = 0; i < L_SUBFR; i++ ) { gain = ( gain * agc_fac ) >> 15; gain = gain + g0; sig_out[i] = ( sig_out[i] * gain ) >> 12; if (labs(sig_out[i]) > 32767) sig_out[i] = (sig_out[i] & 0x8000000) ? -32768 : 32767; } st->past_gain = gain; return; } /* * Post_Filter * * * Parameters: * st B: post filter states * mode I: AMR mode * syn B: synthesis speech * Az_4 I: interpolated LPC parameters in all subfr. * * Function: * Post_Filtering of synthesis speech. * * inverse filtering of syn[] through A(z/0.7) to get res2[] * tilt compensation filtering; 1 - MU*k*z^-1 * synthesis filtering through 1/A(z/0.75) * adaptive gain control * * Returns: * void */ static void Post_Filter( Post_FilterState *st, enum Mode mode, Word32 *syn, Word32 *Az_4 ) { Word32 h[22], Ap3[MP1], Ap4[MP1]; /* bandwidth expanded LP parameters */ Word32 tmp, i_subfr, i, temp1, temp2, overflow = 0; Word32 *Az, *p1, *p2, *syn_work = &st->synth_buf[M]; const Word32 *pgamma3 = &gamma3[0]; const Word32 *pgamma4 = &gamma4_gamma3_MR122[0]; /* * Post filtering */ memcpy( syn_work, syn, L_FRAME <<2 ); Az = Az_4; if ( ( mode == MR122 ) || ( mode == MR102 ) ) { pgamma3 = &gamma4_gamma3_MR122[0]; pgamma4 = &gamma4_MR122[0]; } for ( i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR ) { /* Find weighted filter coefficients Ap3[] and Ap[4] */ Ap3[0] = Az[0]; Ap4[0] = Az[0]; for ( i = 1; i <= 10; i++ ) { Ap3[i] = ( Az[i] * pgamma3[i - 1] +0x4000 ) >> 15; Ap4[i] = ( Az[i] * pgamma4[i - 1] +0x4000 ) >> 15; } /* filtering of synthesis speech by A(z/0.7) to find res2[] */ Residu40( Ap3, &syn_work[i_subfr], st->res2 ); /* tilt compensation filter */ /* impulse response of A(z/0.7)/A(z/0.75) */ memcpy( h, Ap3, MP1 <<2 ); memset( &h[M +1], 0, ( 22 - M - 1 )<<2 ); Syn_filt( Ap4, h, h, 22, &h[M +1], 0 ); /* 1st correlation of h[] */ tmp = 16777216 + h[1] * h[1]; for ( i = 2; i < 22; i++ ) { tmp += h[i] * h[i]; if (tmp > 0x3FFF8000) break; } temp1 = tmp >> 15; if (temp1 & 0xFFFF8000) temp1 = 32767; tmp = h[0] * h[1]; for ( i = 1; i < 21; i++ ) { tmp += h[i] * h[i + 1]; if (abs(tmp) > 1073741823) tmp = 1073741823; } temp2 = tmp >> 15; if ( temp2 <= 0 ) { temp2 = 0; } else { tmp = temp2 * 26214; temp2 = ( tmp & 0xffff8000 ) / temp1; } /* preemphasis */ p1 = st->res2 + 39; p2 = p1 - 1; tmp = *p1; do { *p1 = *p1 - ( ( temp2 * *p2-- ) >> 15 ); if (abs(*p1) > 32767) { *p1 = (*p1 & 0x80000000) ? -32768 : 32767; } p1--; *p1 = *p1 - ( ( temp2 * *p2-- ) >> 15 ); if (abs(*p1) > 32767) { *p1 = (*p1 & 0x80000000) ? -32768 : 32767; } p1--; *p1 = *p1 - ( ( temp2 * *p2-- ) >> 15 ); if (abs(*p1) > 32767) { *p1 = (*p1 & 0x80000000) ? -32768 : 32767; } p1--; } while( p1 > st->res2 ); *p1 = *p1 - ( ( temp2 * st->preemph_state_mem_pre ) >> 15 ); if (abs(*p1) > 32767) { *p1 = (*p1 & 0x80000000) ? -32768 : 32767; } st->preemph_state_mem_pre = tmp; /* filtering through 1/A(z/0.75) */ overflow = Syn_filt( Ap4, st->res2, &syn[i_subfr], L_SUBFR, st->mem_syn_pst, 0 ); if (overflow){ Syn_filt_overflow( Ap4, st->res2, &syn[i_subfr], L_SUBFR, st->mem_syn_pst, 1 ); overflow = 0; } else { memcpy(st->mem_syn_pst, &syn[i_subfr + 30], 40); } /* scale output to input */ agc( st->agc_state, &syn_work[i_subfr], &syn[i_subfr], AGC_FAC ); Az += MP1; } /* update syn_work[] buffer */ memcpy( &syn_work[- M], &syn_work[L_FRAME - M], M <<2 ); return; } /* * Post_Process * * * Parameters: * st B: post filter states * signal B: signal * * Function: * Postprocessing of input speech. * * 2nd order high pass filtering with cut off frequency at 60 Hz. * Multiplication of output by two. * * * Returns: * void */ static void Post_Process( Post_ProcessState *st, Word32 signal[] ) { Word32 x2, tmp, i = 0; Word32 mask = 0x40000000; do { x2 = st->x1; st->x1 = st->x0; st->x0 = signal[i]; /* * y[i] = b[0]*x[i]*2 + b[1]*x[i-1]*2 + b140[2]*x[i-2]/2 * + a[1]*y[i-1] + a[2] * y[i-2]; */ tmp = ( st->y1_hi * 15836) + ( ( ( st->y1_lo * 15836 ) & ( Word32 )0xffff8000 ) >> 15); tmp += (st->y2_hi * -7667) + ( ( ( st->y2_lo * ( -7667 ) ) & ( Word32 )0xffff8000 ) >> 15); tmp += st->x0 * 7699; tmp += st->x1 * -15398; if ( ( (tmp >> 1) ^ tmp ) & mask) tmp = (tmp & 0x80000000) ? -1073741824 : 1073741823; tmp += x2 * 7699; if ( ( (tmp >> 1) ^ tmp ) & mask) tmp = (tmp & 0x80000000) ? -1073741824 : 1073741823; tmp = tmp << 1; if ( ( (tmp >> 1) ^ tmp ) & mask) tmp = (tmp & 0x80000000) ? -1073741824 : 1073741823; tmp = tmp << 1; if ( ( (tmp >> 1) ^ tmp ) & mask) tmp = (tmp & 0x80000000) ? -1073741824 : 1073741823; if ( labs( tmp ) < 536862720 ) { signal[i++] = ( tmp + 0x00002000L ) >> 14; } else if ( tmp > 0 ) { signal[i++] = 32767; } else { signal[i++] = -32768; } st->y2_hi = st->y1_hi; st->y2_lo = st->y1_lo; st->y1_hi = tmp >> 15; st->y1_lo = ( ( tmp << 1 ) - ( st->y1_hi << 16 ) ) >> 1; } while( i < 160 ); return; } /* * Speech_Decode_Frame * * * Parameters: * st B: decoder memory * mode I: AMR mode * parm I: speech parameters * frame_type I: Frame type * synth O: synthesis speech * Function: * Decode one frame * * Returns: * void */ void Speech_Decode_Frame( void *st, enum Mode mode, Word16 *parm, enum RXFrameType frame_type, Word16 *synth ) { Word32 Az_dec[AZ_SIZE]; /* Decoded Az for post-filter in 4 subframes*/ Word32 synth_speech[L_FRAME]; Word32 i; /* Synthesis */ Decoder_amr( ( ( Speech_Decode_FrameState * ) st )->decoder_amrState, mode, parm, frame_type, synth_speech, Az_dec ); Post_Filter( ( ( Speech_Decode_FrameState * ) st )->post_state, mode, synth_speech, Az_dec ); /* post HP filter, and 15->16 bits */ Post_Process( ( ( Speech_Decode_FrameState * ) st )->postHP_state, synth_speech ); for ( i = 0; i < L_FRAME; i++ ) { #ifndef NO13BIT /* Truncate to 13 bits */ synth[i] = ( Word16 )( synth_speech[i] & 0xfff8 ); #else synth[i] = ( Word16 )( synth_speech[i]); #endif } return; } /* * Decoder_amr_exit * * * Parameters: * state I: state structure * * Function: * The memory used for state memory is freed * * Returns: * Void */ static void Decoder_amr_exit( Decoder_amrState **state ) { if ( state == NULL || *state == NULL ) return; free( ( *state )->lsfState ); free( ( *state )->ec_gain_p_st ); free( ( *state )->ec_gain_c_st ); free( ( *state )->pred_state ); free( ( *state )->background_state ); free( ( *state )->ph_disp_st ); free( ( *state )->Cb_gain_averState ); free( ( *state )->lsp_avg_st ); free( ( *state )->dtxDecoderState ); /* deallocate memory */ free( *state ); *state = NULL; return; } /* * Post_Filter_exit * * * Parameters: * state I: state structure * * Function: * The memory used for state memory is freed * * Returns: * Void */ static void Post_Filter_exit( Post_FilterState **state ) { if ( state == NULL || *state == NULL ) return; free( ( *state )->agc_state ); /* deallocate memory */ free( *state ); *state = NULL; return; } /* * Post_Process_reset * * * Parameters: * state B: state structure * * Function: * Resets state memory * * Returns: * -1 failure */ static int Post_Process_reset( Post_ProcessState *state ) { if ( ( Post_ProcessState * )state == NULL ) { //fprintf( stderr, "Post_Process_reset: invalid parameter\n" ); return-1; } state->y2_hi = 0; state->y2_lo = 0; state->y1_hi = 0; state->y1_lo = 0; state->x0 = 0; state->x1 = 0; return 0; } /* * Post_Process_exit * * * Parameters: * state I: state structure * * Function: * The memory used for state memory is freed * * Returns: * Void */ static void Post_Process_exit( Post_ProcessState **state ) { if ( state == NULL || *state == NULL ) return; /* deallocate memory */ free( *state ); *state = NULL; return; } /* * Decoder_amr_init * * * Parameters: * state O: state structure * * Function: * Allocates state memory and initializes state memory * * Returns: * success = 0 */ static int Decoder_amr_init( Decoder_amrState **state ) { Decoder_amrState * s; if ( ( Decoder_amrState * )state == NULL ) { //fprintf( stderr, "Decoder_amr_init: invalid parameter\n" ); return-1; } *state = NULL; /* allocate memory */ if ( ( s = ( Decoder_amrState * ) malloc( sizeof( Decoder_amrState ) ) ) == NULL ) { //fprintf( stderr, "Decoder_amr_init: can not malloc state structure\n" ); return-1; } /* DPlsf_init */ /* allocate memory */ if ( ( s->lsfState = ( D_plsfState * ) malloc( sizeof( D_plsfState ) ) ) == NULL ) { //fprintf( stderr, "DPlsf_init: can not malloc state structure\n" ); return-1; } /* ecGainPitchInit */ /* allocate memory */ if ( ( s->ec_gain_p_st = ( ec_gain_pitchState * ) malloc( sizeof( ec_gain_pitchState ) ) ) == NULL ) { //fprintf( stderr, "ecGainPitchInit: can not malloc state structure\n" ); return-1; } /* ecGainCodeInit */ /* allocate memory */ if ( ( s->ec_gain_c_st = ( ec_gain_codeState * ) malloc( sizeof( ec_gain_codeState ) ) ) == NULL ) { //fprintf( stderr, "ecGainCodeInit: can not malloc state structure\n" ); return-1; } /* gcPredInit */ /* allocate memory */ if ( ( s->pred_state = ( gc_predState * ) malloc( sizeof( gc_predState ) ) ) == NULL ) { //fprintf( stderr, "gcPredInit: can not malloc state structure\n" ); return-1; } /* Cb_gain_averageInit */ /* allocate memory */ if ( ( s->Cb_gain_averState = ( Cb_gain_averageState * ) malloc( sizeof( Cb_gain_averageState ) ) ) == NULL ) { //fprintf( stderr, "Cb_gain_averageInit: can not malloc state structure\n" ) ; return-1; } memset( s->Cb_gain_averState->cbGainHistory, 0, L_CBGAINHIST <<2 ); /* Initialize hangover handling */ s->Cb_gain_averState->hangVar = 0; s->Cb_gain_averState->hangCount = 0; /* lsp_avgInit */ /* allocate memory */ if ( ( s->lsp_avg_st = ( lsp_avgState * ) malloc( sizeof( lsp_avgState ) ) ) == NULL ) { //fprintf( stderr, "lsp_avgInit: can not malloc state structure\n" ); return-1; } /* Bgn_scdInit */ /* allocate memory */ if ( ( s->background_state = ( Bgn_scdState * ) malloc( sizeof( Bgn_scdState ) ) ) == NULL ) { //fprintf( stderr, "Bgn_scdInit: can not malloc state structure\n" ); return-1; } /* phDispInit */ /* allocate memory */ if ( ( s->ph_disp_st = ( ph_dispState * ) malloc( sizeof( ph_dispState ) ) ) == NULL ) { //fprintf( stderr, "phDispInit: can not malloc state structure\n" ); return-1; } /* dtxDecInit */ /* allocate memory */ if ( ( s->dtxDecoderState = ( dtx_decState * ) malloc( sizeof( dtx_decState ) ) ) == NULL ) { //fprintf( stderr, "dtxDecInit: can not malloc state structure\n" ); return-1; } Decoder_amr_reset( s, 0 ); *state = s; return 0; } /* * Post_Filter_reset * * * Parameters: * state B: state structure * * Function: * Resets state memory * * Returns: * -1 failure */ static int Post_Filter_reset( Post_FilterState *state ) { if ( ( Post_FilterState * )state == NULL ) { //fprintf( stderr, "Post_Filter_reset: invalid parameter\n" ); return-1; } state->preemph_state_mem_pre = 0; state->agc_state->past_gain = 4096; memset( state->mem_syn_pst, 0, M <<2 ); memset( state->res2, 0, L_SUBFR <<2 ); memset( state->synth_buf, 0, ( L_FRAME + M )<<2 ); return 0; } /* * Post_Filter_init * * * Parameters: * state O: state structure * * Function: * Allocates state memory and initializes state memory * * Returns: * success = 0 */ static int Post_Filter_init( Post_FilterState **state ) { Post_FilterState * s; if ( ( Post_FilterState * )state == NULL ) { //fprintf( stderr, "F057:invalid parameter\n" ); return-1; } *state = NULL; /* allocate memory */ if ( ( s = ( Post_FilterState * ) malloc( sizeof( Post_FilterState ) ) ) == NULL ) { //fprintf( stderr, "F057:can not malloc filter structure\n" ); return-1; } s->agc_state = NULL; /* allocate memory */ if ( ( s->agc_state = ( agcState * ) malloc( sizeof( agcState ) ) ) == NULL ) { //fprintf( stderr, "agcInit: can not malloc state structure\n" ); return-1; } Post_Filter_reset( s ); *state = s; return 0; } /* * Post_Process_init * * * Parameters: * state O: state structure * * Function: * Allocates state memory and initializes state memory * * Returns: * success = 0 */ static int Post_Process_init( Post_ProcessState **state ) { Post_ProcessState * s; if ( ( Post_ProcessState * )state == NULL ) { //fprintf( stderr, "Post_Process_init: invalid parameter\n" ); return-1; } *state = NULL; /* allocate memory */ if ( ( s = ( Post_ProcessState * ) malloc( sizeof( Post_ProcessState ) ) ) == NULL ) { //fprintf( stderr, "Post_Process_init: can not malloc state structure\n" ); return-1; } Post_Process_reset( s ); *state = s; return 0; } /* * Speech_Decode_Frame_exit * * * Parameters: * state I: state structure * * Function: * The memory used for state memory is freed * * Returns: * Void */ void Speech_Decode_Frame_exit( void **st ) { if ( (( Speech_Decode_FrameState * )( st )) == NULL ) return; Decoder_amr_exit( &( ( ( Speech_Decode_FrameState * ) st )->decoder_amrState ) ); Post_Filter_exit( &( ( ( Speech_Decode_FrameState * ) st )->post_state ) ); Post_Process_exit( &( ( ( Speech_Decode_FrameState * ) st )->postHP_state ) ) ; /* deallocate memory */ free( (( Speech_Decode_FrameState * )st) ); return; } /* * Speech_Decode_Frame_reset * * * Parameters: * state B: state structure * * Function: * Resets state memory * * Returns: * -1 = failure */ int Speech_Decode_Frame_reset( void **st ) { Speech_Decode_FrameState * state; if ( st == NULL || *st == NULL ) return (-1); state = ( Speech_Decode_FrameState * )st; Decoder_amr_reset( state->decoder_amrState, ( enum Mode ) 0 ); Post_Filter_reset( state->post_state ); Post_Process_reset( state->postHP_state ); return 0; } /* * Speech_Decode_Frame_init * * * Parameters: * state O: state structure * * Function: * Allocates state memory and initializes state memory * * Returns: * success = 0 */ void * Speech_Decode_Frame_init( ) { Speech_Decode_FrameState * s; /* allocate memory */ if ( ( s = ( Speech_Decode_FrameState * ) malloc( sizeof( Speech_Decode_FrameState ) ) ) == NULL ) { //fprintf( stderr, "Speech_Decode_Frame_init: can not malloc state structure\n" ); return NULL; } s->decoder_amrState = NULL; s->post_state = NULL; s->postHP_state = NULL; if ( Decoder_amr_init( &s->decoder_amrState ) || Post_Filter_init( &s-> post_state ) || Post_Process_init( &s->postHP_state ) ) { Speech_Decode_Frame_exit( ( void ** )( &s ) ); return NULL; } return s; } h323plus/plugins/audio/gsm-amr/src/rom_dec.h0000644000175000017500000037556011341106247017623 0ustar markmark/* * =================================================================== * TS 26.104 * REL-5 V5.4.0 2004-03 * REL-6 V6.1.0 2004-03 * 3GPP AMR Floating-point Speech Codec * =================================================================== * */ /* * rom_dec.h * * * Project: * AMR Floating-Point Codec * * Contains: * This file contains all the tables needed by AMR decoder functions. * */ #ifndef _ROM_DEC_H_ #define _ROM_DEC_H_ /* * include files */ #include"typedef.h" #include"interf_rom.h" /* * definition of constants */ #define M 10 /* Order of LP filter */ #define MP1 (M+1) /* Order of LP filter + 1 */ #define L_WINDOW 240 /* Window size in LP analysis */ #define L_NEXT 40 /* Overhead in LP analysis */ #define LTPG_MEM_SIZE 5 /* number of stored past LTP coding gains + 1 */ #define N_FRAME 7 /* old pitch gains in average calculation */ #define DTX_HIST_SIZE 8 /* DTX history size */ #define L_TOTAL 320 /* Total size of speech buffer. */ #define L_FRAME 160 /* Frame size */ #define L_FRAME_BY2 80 /* Frame size divided by 2 */ #define L_SUBFR 40 /* Subframe size */ #define L_CODE 40 /* codevector length */ #define PIT_MAX 143 /* Maximum pitch lag */ #define PIT_MIN 20 /* Minimum pitch lag */ #define PIT_MIN_MR122 18 /* Minimum pitch lag (MR122 mode) */ #define L_INTERPOL (10+1) /* Length of filter for interpolation */ #define NPRED 4 /* number of prediction taps */ #define SHARPMIN 0 /* Minimum value of pitch sharpening */ #define MAX_PRM_SIZE 57 /* max. num. of params */ #define L_INTER_SRCH 4 /* Length of filter for CL LTP search interpolation */ #define GP_CLIP 0.95F /* Pitch gain clipping */ #define UP_SAMP_MAX 6 #define NB_TRACK 5 /* number of tracks */ #define NB_TRACK_MR102 4 /* number of tracks mode mr102 */ #define STEP 5 /* codebook step size */ #define STEP_MR102 4 /* codebook step size mode mr102 */ #define NC M/2 /* Order of LP filter divided by 2 */ /* vad */ #define COMPLEN 9 /* Number of sub-bands used by VAD */ #define L_ENERGYHIST 60 #define L_CBGAINHIST 7 #define PHDGAINMEMSIZE 5 #define MIN_ENERGY -14336 /* 14 Q10 */ #define MIN_ENERGY_MR122 -2381 /* 14 / (20*log10(2)) Q10 */ #define PN_INITIAL_SEED 0x70816958L /* Pseudo noise generator seed value */ #define MIN_16 (Word16)-32768 #define MAX_16 (Word16)0x7fff #define MAX_32 (Word32)0x7fffffffL #define EXPCONST 5243 /* 0.16 in Q15 */ #define DTX_MAX_EMPTY_THRESH 50 #define DTX_ELAPSED_FRAMES_THRESH (24 + 7 -1) #define LSF_GAP 205 /* Minimum distance between LSF after quantization; 50 Hz = 205 */ #define LSP_PRED_FAC_MR122 21299 /* MR122 LSP prediction factor (0.65 Q15) */ #define POS_CODE 8191 #define NEG_CODE 8191 #define NMAX 9 /* largest N used in median calculation */ #define MEAN_ENER_MR122 783741L /* 36/(20*log10(2)) (Q17) */ #define SHARPMAX 13017 /* Maximum value of pitch sharpening */ #define FRAMEENERGYLIMIT 17578 /* 150 */ #define LOWERNOISELIMIT 20 /* 5 */ #define UPPERNOISELIMIT 1953 /* 50 */ #define AZ_SIZE (4*M+4) /* Size of array of LP filters in 4 subfr.s */ #define AGC_FAC 29491 /* Factor for automatic gain control 0.9 */ #define PHDGAINMEMSIZE 5 #define PHDTHR1LTP 9830 /* 0.6 in Q14 */ #define PHDTHR2LTP 14746 /* 0.9 in Q14 */ #define ONFACTPLUS1 16384 /* 2.0 in Q13 */ #define ONLENGTH 2 #define DTX_HANG_CONST 7 /* yields eight frames of SP HANGOVER */ /* number of parameters */ #define PRMNO_MR475 17 #define PRMNO_MR515 19 #define PRMNO_MR59 19 #define PRMNO_MR67 19 #define PRMNO_MR74 19 #define PRMNO_MR795 23 #define PRMNO_MR102 39 #define PRMNO_MR122 57 #define PRMNO_MRDTX 5 /* * tables */ /* level adjustment for different modes Q11 */ static const Word16 dtx_log_en_adjust[9] = { - 1023, /* MR475 */ - 878, /* MR515 */ - 732, /* MR59 */ - 586, /* MR67 */ - 440, /* MR74 */ - 294, /* MR795 */ - 148, /* MR102 */ 0, /* MR122 */ 0, /* MRDTX */ }; /* attenuation factors for codebook gain */ static const Word32 cdown[7] = { 32767, 32112, 32112, 32112, 32112, 32112, 22937 }; /* attenuation factors for adaptive codebook gain */ static const Word32 pdown[7] = { 32767, 32112, 32112, 26214, 9830, 6553, 6553 }; /* algebraic code book gain MA predictor coefficients */ static const Word32 pred[NPRED] = { 5571, 4751, 2785, 1556 }; /* algebraic code book gain MA predictor coefficients (MR122) */ static const Word32 pred_MR122[NPRED] = { 44, 37, 22, 12 }; static const Word32 gamma4_gamma3_MR122[M] = { 22938, 16057, 11240, 7868, 5508, 3856, 2699, 1889, 1322, 925 }; static const Word32 gamma3[M] = { 18022, 9912, 5451, 2998, 1649, 907, 499, 274, 151, 83 }; static const Word32 gamma4_MR122[M] = { 24576, 18432, 13824, 10368, 7776, 5832, 4374, 3281, 2461, 1846 }; /* adaptive codebook gain quantization table (MR122, MR795) */ #define NB_QUA_PITCH 16 static const Word32 qua_gain_pitch[NB_QUA_PITCH] = { 0, 3277, 6556, 8192, 9830, 11469, 12288, 13107, 13926, 14746, 15565, 16384, 17203, 18022, 18842, 19661 }; /* fixed codebook gain quantization table (MR122, MR795) */ #define NB_QUA_CODE 32 static const Word32 qua_gain_code[NB_QUA_CODE * 3] = { /* gain factor (g_fac) and quantized energy error (qua_ener_MR122, qua_ener) * are stored: * * qua_ener_MR122 = log2(g_fac) (not the rounded floating point value, but * the value the original EFR algorithm * calculates from g_fac [using Log2]) * qua_ener = 20*log10(g_fac); (rounded floating point value) * * * g_fac (Q11), * qua_ener_MR122 (Q10), * qua_ener (Q10) */ 159, - 3776, - 22731, 206, - 3394, - 20428, 268, - 3005, - 18088, 349, - 2615, - 15739, 419, - 2345, - 14113, 482, - 2138, - 12867, 554, - 1932, - 11629, 637, - 1726, - 10387, 733, - 1518, - 9139, 842, - 1314, - 7906, 969, - 1106, - 6656, 1114, - 900, - 5416, 1281, - 694, - 4173, 1473, - 487, - 2931, 1694, - 281, - 1688, 1948, - 75, - 445, 2241, 133, 801, 2577, 339, 2044, 2963, 545, 3285, 3408, 752, 4530, 3919, 958, 5772, 4507, 1165, 7016, 5183, 1371, 8259, 5960, 1577, 9501, 6855, 1784, 10745, 7883, 1991, 11988, 9065, 2197, 13231, 10425, 2404, 14474, 12510, 2673, 16096, 16263, 3060, 18429, 21142, 3448, 20763, 27485, 3836, 23097 }; /* gray coding table */ static const Word8 gray[8] = { 0, 1, 3, 2, 6, 4, 5, 7 }; /* gray decoding table */ static const Word32 dgray[8] = { 0, 1, 3, 2, 5, 6, 4, 7 }; /* table[i] = sqrt((i+16)*2^-6) * 2^15, i.e. sqrt(x) scaled Q15 */ static const Word32 sqrt_table[49] = { 16384, 16888, 17378, 17854, 18318, 18770, 19212, 19644, 20066, 20480, 20886, 21283, 21674, 22058, 22435, 22806, 23170, 23530, 23884, 24232, 24576, 24915, 25249, 25580, 25905, 26227, 26545, 26859, 27170, 27477, 27780, 28081, 28378, 28672, 28963, 29251, 29537, 29819, 30099, 30377, 30652, 30924, 31194, 31462, 31727, 31991, 32252, 32511, 32767 }; static const Word32 inv_sqrt_table[49] = { 32767, 31790, 30894, 30070, 29309, 28602, 27945, 27330, 26755, 26214, 25705, 25225, 24770, 24339, 23930, 23541, 23170, 22817, 22479, 22155, 21845, 21548, 21263, 20988, 20724, 20470, 20225, 19988, 19760, 19539, 19326, 19119, 18919, 18725, 18536, 18354, 18176, 18004, 17837, 17674, 17515, 17361, 17211, 17064, 16921, 16782, 16646, 16514, 16384 }; /* table used inbase 2 logharithm computation */ static const Word32 log2_table[33] = { 0, 1455, 2866, 4236, 5568, 6863, 8124, 9352, 10549, 11716, 12855, 13967, 15054, 16117, 17156, 18172, 19167, 20142, 21097, 22033, 22951, 23852, 24735, 25603, 26455, 27291, 28113, 28922, 29716, 30497, 31266, 32023, 32767 }; /* table used in 2 to the power computation */ static const Word32 pow2_table[33] = { 16384, 16743, 17109, 17484, 17867, 18258, 18658, 19066, 19484, 19911, 20347, 20792, 21247, 21713, 22188, 22674, 23170, 23678, 24196, 24726, 25268, 25821, 26386, 26964, 27554, 28158, 28774, 29405, 30048, 30706, 31379, 32066, 32767 }; /* table of cos(x) */ static const Word32 cos_table[65] = { 32767, 32729, 32610, 32413, 32138, 31786, 31357, 30853, 30274, 29622, 28899, 28106, 27246, 26320, 25330, 24279, 23170, 22006, 20788, 19520, 18205, 16846, 15447, 14010, 12540, 11039, 9512, 7962, 6393, 4808, 3212, 1608, 0, - 1608, - 3212, - 4808, - 6393, - 7962, - 9512, - 11039, - 12540, - 14010, - 15447, - 16846, - 18205, - 19520, - 20788, - 22006, - 23170, - 24279, - 25330, - 26320, - 27246, - 28106, - 28899, - 29622, - 30274, - 30853, - 31357, - 31786, - 32138, - 32413, - 32610, - 32729, - 32768 }; /* slope used to compute y = acos(x) */ static const Word32 acos_slope[64] = { - 26887, - 8812, - 5323, - 3813, - 2979, - 2444, - 2081, - 1811, - 1608, - 1450, - 1322, - 1219, - 1132, - 1059, - 998, - 946, - 901, - 861, - 827, - 797, - 772, - 750, - 730, - 713, - 699, - 687, - 677, - 668, - 662, - 657, - 654, - 652, - 652, - 654, - 657, - 662, - 668, - 677, - 687, - 699, - 713, - 730, - 750, - 772, - 797, - 827, - 861, - 901, - 946, - 998, - 1059, - 1132, - 1219, - 1322, - 1450, - 1608, - 1811, - 2081, - 2444, - 2979, - 3813, - 5323, - 8812, - 26887 }; /* All impulse responses are in Q15 */ /* phase dispersion impulse response (MR795) */ static const Word32 ph_imp_low_MR795[] = { 26777, 801, 2505, - 683, - 1382, 582, 604, - 1274, 3511, - 5894, 4534, - 499, - 1940, 3011, - 5058, 5614, - 1990, - 1061, - 1459, 4442, - 700, - 5335, 4609, 452, - 589, - 3352, 2953, 1267, - 1212, - 2590, 1731, 3670, - 4475, - 975, 4391, - 2537, 949, - 1363, - 979, 5734 }; /* phase dispersion impulse response (MR795) */ static const Word32 ph_imp_mid_MR795[] = { 30274, 3831, - 4036, 2972, - 1048, - 1002, 2477, - 3043, 2815, - 2231, 1753, - 1611, 1714, - 1775, 1543, - 1008, 429, - 169, 472, - 1264, 2176, - 2706, 2523, - 1621, 344, 826, - 1529, 1724, - 1657, 1701, - 2063, 2644, - 3060, 2897, - 1978, 557, 780, - 1369, 842, 655 }; /* phase dispersion impulse response (MR475 - MR67) */ static const Word32 ph_imp_low[] = { 14690, 11518, 1268, - 2761, - 5671, 7514, - 35, - 2807, - 3040, 4823, 2952, - 8424, 3785, 1455, 2179, - 8637, 8051, - 2103, - 1454, 777, 1108, - 2385, 2254, - 363, - 674, - 2103, 6046, - 5681, 1072, 3123, - 5058, 5312, - 2329, - 3728, 6924, - 3889, 675, - 1775, 29, 10145 }; /* phase dispersion impulse response (MR475 - MR67) */ static const Word32 ph_imp_mid[] = { 30274, 3831, - 4036, 2972, - 1048, - 1002, 2477, - 3043, 2815, - 2231, 1753, - 1611, 1714, - 1775, 1543, - 1008, 429, - 169, 472, - 1264, 2176, - 2706, 2523, - 1621, 344, 826, - 1529, 1724, - 1657, 1701, - 2063, 2644, - 3060, 2897, - 1978, 557, 780, - 1369, 842, 655 }; /* initialization table for the MA predictor in DTX */ #define PAST_RQ_INIT_SIZE 8 /* initalization table for MA predictor in dtx mode */ static const Word32 past_rq_init[80] = { - 258, - 318, - 439, - 634, - 656, - 773, - 711, - 502, - 268, - 193, - 2, 125, 122, - 39, - 9, 105, 129, 283, 372, 575, - 277, - 324, - 197, - 487, - 445, - 362, - 292, - 27, 177, 543, 342, 517, 516, 130, 27, - 104, - 120, - 140, - 74, - 56, - 564, - 943, - 1520, - 965, - 814, - 526, - 322, - 2, 159, 657, - 312, - 284, - 386, - 597, - 493, - 526, - 418, - 229, 105, 449, - 557, - 870, - 1075, - 919, - 950, - 752, - 709, - 316, 62, 486, - 314, - 191, - 203, - 330, - 160, - 103, - 51, 131, 338, 515 }; #define ALPHA 29491 #define ONE_ALPHA 3277 /* LSF means (not in MR122) */ static const Word32 mean_lsf_3[10] = { 1546, 2272, 3778, 5488, 6972, 8382, 10047, 11229, 12766, 13714 }; #define ALPHA_122 31128 #define ONE_ALPHA_122 1639 /* LSF means ->normalize frequency domain */ static const Word32 mean_lsf_5[10] = { 1384, 2077, 3420, 5108, 6742, 8122, 9863, 11092, 12714, 13701 }; /* LSF prediction factors (not in MR122) */ static const Word32 pred_fac[10] = { 9556, 10769, 12571, 13292, 14381, 11651, 10588, 9767, 8593, 6484 }; #define DICO1_SIZE_3 256 #define DICO2_SIZE_3 512 #define DICO3_SIZE_3 512 /* 1st LSF quantizer (not in MR122 and MR795) */ static const Word32 dico1_lsf_3[] = { 6, 82, - 131, 154, - 56, - 735, 183, - 65, - 265, 9, - 210, - 361, 113, 718, 1817, 1010, 1214, 1573, 857, 1333, 2276, 827, 1568, 1933, 717, 1989, 2206, 838, 1172, 1823, 721, 1000, 2154, 286, 476, 1509, - 247, - 531, 230, 147, - 82, 569, 26, - 177, - 944, - 27, - 273, 692, - 164, - 264, - 183, 224, 790, 1039, 899, 946, 601, 485, 771, 1150, 524, 677, 903, - 140, 375, 778, 410, 676, 429, 301, 530, 1009, 719, 646, 38, 226, 367, 40, 145, - 45, - 505, 290, 121, - 121, 302, 127, 166, - 124, - 383, - 956, - 358, - 455, - 977, 715, 878, 894, 978, 923, 211, 477, 272, 64, 188, - 78, 17, - 143, - 65, 38, 643, 586, 621, - 134, - 426, - 651, 347, 545, 2820, 1188, 2726, 2442, 142, - 80, 1735, 283, 130, 461, - 262, - 399, - 1145, - 411, 155, 430, 329, 375, 779, 53, - 226, - 139, - 129, - 236, 1682, 285, 744, 1327, 738, 697, 1664, 312, 409, 266, 325, 720, 135, 1, 221, 453, 8, 203, 145, 299, 640, 760, 29, 468, 638, 103, 429, 379, 420, 954, 932, 1326, 1210, 1258, 704, 1012, 1152, - 166, - 444, - 266, - 316, - 130, - 376, 191, 1151, 1904, - 240, - 543, - 1260, - 112, 268, 1207, 70, 1062, 1583, 278, 1360, 1574, - 258, - 272, - 768, 19, 563, 2240, - 3, - 265, 135, - 295, - 591, - 388, 140, 354, - 206, - 260, - 504, - 795, - 433, - 718, - 1319, 109, 331, 962, - 429, - 87, 652, - 296, 426, 1019, - 239, 775, 851, 489, 1334, 1073, - 334, - 332, 25, 543, 1206, 1807, 326, 61, 727, 578, 849, 1405, - 208, - 277, 329, - 152, 64, 669, - 434, - 678, - 727, - 454, - 71, 251, 605, 480, 254, - 482, 11, 996, - 289, 395, 486, 722, 1049, 1440, - 30, - 316, - 786, - 106, - 115, - 619, 861, 1474, 1412, 1055, 1366, 1184, 812, 1237, 925, 42, - 251, - 576, 342, 141, - 454, - 168, - 80, 1359, - 342, - 656, - 1763, 100, 821, 725, 990, 747, 800, 332, 440, 568, 663, 379, 852, 112, 165, - 369, 597, 910, 282, - 8, 834, 1281, - 352, 572, 695, 462, 2246, 1806, 345, 190, 1374, 416, 915, 2166, 168, - 82, 280, - 516, - 446, 840, 47, 533, 44, - 362, - 711, - 1143, 22, 193, 1472, - 85, 233, 1813, - 62, 579, 1504, 550, 944, 1749, 723, 650, 1148, 972, 884, 1395, - 425, 643, 0, 1000, 952, 1098, 249, 1446, 672, - 334, - 87, 2172, - 554, 1882, 2672, 140, 1826, 1853, 920, 1749, 2590, 1076, 1933, 2038, - 137, - 443, - 1555, 1269, 1174, 468, - 493, - 122, 1521, - 451, 1033, 1214, 482, 1695, 1118, 815, 649, 384, - 446, - 692, 107, - 319, - 605, - 118, - 207, - 505, 525, - 468, - 12, 2736, 75, 1934, 1305, 880, 2358, 2267, 1285, 1575, 2004, - 48, - 304, - 1186, - 435, - 461, - 251, - 366, - 404, - 547, - 289, - 605, - 597, - 538, - 810, - 165, - 120, 3, 356, 639, 1241, 1502, 96, 177, 750, - 435, - 585, - 1174, - 356, 109, - 79, - 485, 288, 2005, 9, 1116, 731, 880, 2134, 946, - 265, 1585, 1065, 1157, 1210, 843, - 498, - 668, 431, 374, 321, - 229, 1440, 2101, 1381, 449, 461, 1155, - 105, 39, - 384, - 263, 367, 182, - 371, - 660, 773, - 188, 1151, 971, 1333, 1632, 1435, 774, 1267, 1221, - 482, - 832, - 1489, - 237, - 210, 860, 890, 1615, 1064, 472, 1062, 1192, 185, 1077, 989, - 568, - 992, - 1704, - 449, - 902, - 2043, - 142, - 377, - 458, - 210, - 554, - 1029, - 11, 1133, 2265, - 329, - 675, - 893, - 250, 657, 1187, 519, 1510, 1779, 520, 539, 1403, 527, 1421, 1302, - 563, - 871, - 1248, - 147, - 463, 879, - 76, 2334, 2840, 563, 2573, 2385, 632, 1926, 2920, 719, 2023, 1840, - 545, - 723, 1108, 129, - 125, 884, 1417, 1632, 925, - 94, 1566, 1751, - 341, 1533, 1551, 591, 395, - 274, - 76, 981, 2831, 153, 2985, 1844, 1032, 2565, 2749, 1508, 2832, 1879, 791, 1199, 538, - 190, - 453, 1489, - 278, - 548, 1158, - 245, 1941, 2044, 1024, 1560, 1650, 512, 253, 466, - 62, - 323, 1151, - 473, - 376, 507, - 433, 1380, 2162, 899, 1943, 1445, 134, 704, 440, 460, 525, - 28, - 450, 279, 1338, 0, 971, 252, - 445, - 627, - 991, - 348, - 602, - 1424, 398, 712, 1656, - 107, 314, - 178, 93, 2226, 2238, 518, 849, 656, - 462, - 711, - 447, 174, - 34, 1191, - 119, 42, 1005, - 372, 274, 758, 1036, 2352, 1838, 675, 1724, 1498, 430, 1286, 2133, - 129, - 439, 0, - 373, 800, 2144, 6, 1587, 2478, 478, 596, 2128, - 428, - 736, 1505, 385, 178, 980, 139, 449, 1225, - 526, - 842, - 982, 145, 1554, 1242, 623, 1448, 656, 349, 1016, 1482, 31, - 280, 415, - 316, 724, 1641, 360, 1058, 556, - 436, - 358, 1201, - 355, 1123, 1939, 401, 1584, 2248, - 527, - 1012, 355, 233, 238, 2233, - 550, - 897, - 639, - 365, - 501, 1957, 389, 1860, 1621, 162, 1132, 1264, - 237, 1174, 1390, - 640, - 411, 116, - 228, 1694, 2298, 1639, 2186, 2267, 562, 1273, 2658, 323, 338, 1774, 578, 1107, 852, 22, 594, 934, - 143, 718, 446 }; /* 2nd LSF quantizer (not in MR122) */ static const Word32 dico2_lsf_3[] = { 50, 71, - 9, - 338, - 698, - 1407, 102, - 138, - 820, - 310, - 469, - 1147, 414, 67, - 267, 1060, 814, 1441, 1548, 1360, 1272, 1754, 1895, 1661, 2019, 2133, 1820, 1808, 2318, 1845, 644, - 93, 454, 858, 329, - 136, 489, - 258, - 128, - 198, - 745, - 41, - 52, - 265, - 985, 346, 137, 479, - 1741, - 748, - 684, - 1163, - 1725, - 367, - 895, - 1145, - 784, - 488, - 946, - 968, - 85, - 390, - 725, 215, - 340, - 171, 1020, 916, 1969, 564, 179, 746, 662, 977, 1734, 887, 622, 914, 939, 856, 1165, 309, 688, 803, 917, 161, 570, 118, - 20, - 283, - 816, - 42, 204, - 1228, - 325, - 462, - 963, - 202, - 143, - 988, - 484, - 361, - 702, - 978, - 477, - 302, - 790, - 1188, - 100, - 786, - 1088, - 1054, - 947, - 1684, - 202, - 843, - 782, - 1039, - 1378, - 901, - 624, - 110, - 85, 356, 213, - 10, - 493, 364, 774, 425, 822, 479, - 83, 557, 520, - 992, - 1560, - 572, - 603, - 741, - 26, - 502, - 638, - 903, 209, 306, 147, - 316, - 593, - 596, - 85, - 211, - 225, - 918, - 529, 117, 233, - 439, - 738, 1101, 751, 633, 1457, 1716, 1511, 1765, 1457, 910, 1122, 1156, 849, 1354, 868, 470, - 871, - 1150, - 1796, - 871, - 861, - 992, - 118, 155, 212, - 1051, - 849, - 606, - 1117, - 1849, - 2750, - 1019, - 1427, - 1869, 370, - 184, - 414, 959, 493, 104, 958, 1039, 543, 154, 653, 201, 1249, 507, 150, 663, 503, 230, 623, 777, 675, 659, 88, - 110, 843, 244, 224, 382, 541, 302, 724, 433, 666, 1166, 734, 341, - 138, 20, - 397, - 1183, - 424, - 46, - 321, - 352, - 124, 1333, 1021, 1080, 262, 366, 723, 922, 283, - 551, 31, - 636, - 611, - 689, - 697, - 415, - 952, - 779, - 201, - 1329, - 598, - 359, - 953, - 1285, 166, 493, 305, 221, 846, 703, 610, 840, 936, 774, - 723, - 1324, - 1261, - 357, - 1025, - 1388, - 1096, - 1376, - 365, - 1416, - 1881, - 608, - 1798, - 1727, - 674, - 545, - 1173, - 703, 678, 786, 148, - 123, 696, 1288, 644, 350, - 10, 414, 614, 15, 137, 344, - 211, - 814, - 1512, - 819, - 391, - 930, - 588, 47, - 591, - 898, - 909, - 1097, - 163, - 1272, - 1167, - 157, - 1464, - 1525, - 389, - 1274, - 1188, - 624, 671, 213, 454, 124, - 274, - 525, - 729, - 496, - 152, - 1344, 122, 135, - 2905, - 589, - 394, - 1728, 441, - 50, 1476, 904, 787, 316, 236, - 440, - 347, 217, 413, - 911, - 917, 121, - 455, - 932, 202, - 92, - 465, - 375, 488, 390, 474, 876, 729, 316, - 1815, - 1312, - 669, 87, 962, 432, 563, - 249, - 1058, 250, 285, 1105, 1141, 427, 696, - 1038, - 1664, - 1582, - 948, 346, 160, - 309, - 272, - 858, 670, 624, 1250, - 944, - 408, - 666, - 606, - 320, - 384, - 492, 230, 65, 334, - 50, - 16, - 16, - 690, - 1397, 1791, 1716, 1399, 2478, 2063, 1404, 1245, 1471, 1426, - 382, - 1037, - 2, 173, - 398, 1145, 1491, 2024, 1801, 772, 1274, 1506, 1429, 1735, 2001, 1079, 1218, 1273, - 1154, - 1851, - 1329, - 808, - 1133, - 1096, - 451, - 1033, - 1722, 65, 578, - 84, - 1476, - 2434, - 1778, - 765, - 1366, - 494, - 218, - 594, - 931, 337, - 236, 562, 2357, 2662, 1938, 1489, 1276, 874, 189, 358, 374, - 1519, - 2281, - 2346, - 967, - 1271, - 2095, - 628, - 1188, - 1542, 1661, 1043, 546, 565, 1061, 732, - 64, - 836, - 434, - 436, - 96, 203, 1078, 1216, 1636, 907, 1534, 986, 326, 965, 845, 142, - 84, 197, 470, 2379, 1570, 1133, 470, 1214, 395, 1376, 1200, 1125, 1042, 348, - 543, - 1234, - 376, - 215, - 181, 481, - 1947, - 1621, - 210, - 750, - 1185, 390, 29, - 399, 27, 820, 1236, 755, 695, 979, 409, - 174, 1197, 1035, 912, 1356, 1846, - 992, - 1437, 484, - 1485, - 1700, 208, - 412, 1204, 1432, - 271, 896, 1144, - 416, 1777, 1434, - 1696, - 2644, - 204, - 1789, - 1551, 1033, - 1656, - 1559, 1303, - 1253, - 1589, 1081, - 669, - 1095, - 66, - 682, 320, - 345, 659, 305, 1069, - 1292, - 804, - 19, - 1635, - 1291, 29, - 1683, - 497, 71, - 287, - 7, - 100, - 494, - 962, - 237, 852, 1881, 1740, - 1217, - 1387, 227, - 660, 302, 373, 96, 1087, 1257, - 1074, - 1669, 160, 485, 2076, 1798, - 934, - 220, 552, - 596, - 612, 237, 336, 1720, 879, 643, 629, 434, 1267, 522, 1633, 15, 244, - 441, 1475, 717, 184, 1819, 1590, 1709, 988, 261, 937, 2093, 2345, 1520, 2139, 1858, 1606, - 577, - 579, - 1203, - 956, 135, - 488, - 464, 51, - 338, - 629, - 348, - 723, 1146, 2073, 1442, 2192, 1466, 911, - 1444, - 1572, - 2278, 1400, 710, 1297, 1335, 633, 928, 1434, 2194, 2594, 2422, 2204, 1881, 982, 2242, 1854, 380, 792, 1145, - 63, - 539, 414, - 252, - 964, - 314, - 1261, - 683, - 780, - 831, - 526, - 1005, - 1666, - 1135, - 424, - 1611, - 452, - 299, 1268, 1048, 642, 1147, 853, 856, - 675, - 336, 139, 2268, 1343, 1418, 29, 768, 797, - 1224, 423, 564, - 1318, - 1082, 245, - 1302, - 812, 573, - 1298, - 1617, 646, - 968, 834, 723, 993, 1652, 2027, - 191, - 817, 432, 662, 60, 198, 626, 997, 1330, 1648, 1963, 1289, - 1597, - 93, - 45, - 1088, 37, - 84, 1653, 2607, 2337, 1065, 2040, 2377, 1139, 2326, 2118, 859, 357, 1510, 664, 1227, 1099, 479, 1360, 912, 1897, 1754, 2019, 1168, 1909, 1784, 399, 34, 256, - 593, - 304, - 1053, 547, 1694, 1407, 647, - 99, - 341, 1492, 1647, 1190, 38, - 644, - 212, 395, 846, 222, - 704, - 765, - 716, - 724, - 1964, - 2804, - 150, 291, - 82, 1233, 1459, 1007, - 140, - 155, 153, 439, 297, 1568, - 1529, - 410, - 636, 1536, 455, - 237, - 1328, - 139, - 260, 531, 554, 868, 269, 1264, 606, - 233, 883, 463, 742, 600, - 120, - 73, 421, 212, - 439, - 58, 804, - 1286, - 1241, 728, 294, - 490, 50, - 591, - 905, - 1254, 42, - 687, 147, - 25, 273, 596, - 311, 1213, 601, - 754, 849, 584, 429, 607, 587, - 602, - 166, 461, - 796, - 823, 777, 1380, 910, 1755, 119, 1417, 972, - 219, - 880, - 1596, - 1049, - 1010, 438, - 713, - 1379, 78, 0, - 447, - 1179, - 1136, - 1319, - 1573, 2248, 1767, 1309, 946, 1583, 1432, 1150, 482, 436, - 469, - 1108, 618, - 447, - 966, 1088, - 1252, - 1515, - 114, - 1104, - 2008, - 579, 210, 613, 497, - 1975, - 1437, 642, - 1269, - 856, 1011, - 1646, - 1185, 1063, - 1555, - 672, 1204, - 1692, - 1114, 623, - 979, - 1326, - 1277, 539, - 147, 894, - 1354, - 897, - 434, 888, 475, 428, 153, - 384, 338, - 1492, - 511, 359, - 974, - 1115, - 470, 105, - 550, 677, - 937, - 1145, 877, 380, - 260, 210, 1685, 924, 1256, 1775, 1190, 1095, 1419, 631, 533, 627, 299, - 347, - 411, - 534, 647, - 650, 29, - 595, - 378, - 1367, 1563, 1402, 1121, 1465, 1089, 1410, 648, - 2096, - 1090, - 6, 311, - 194, - 869, - 639, - 831, 416, - 1162, - 1224, 1349, - 1247, - 941, 1813, - 2193, - 1987, 453, - 619, - 1367, - 956, - 1606, - 1972, - 1507, - 1175, - 1057, - 1104, - 377, 601, 201, 1876, 825, 374, - 430, - 1323, 29, - 1397, - 1249, - 1331, - 1007, - 1504, 960, - 1401, - 2009, 197, - 1379, - 1949, - 236, - 1077, 123, 422, 615, 1269, 546, - 306, 1526, 904, 1194, 1788, 1177, - 626, - 884, - 1526, 199, 766, 1504, - 1065, 862, 197, - 1034, - 1773, - 887, - 800, 145, 599, - 1134, - 519, 626, - 1205, - 1926, 500, - 910, - 1041, - 1395, - 1476, - 1567, - 969, - 523, 842, 34, 1794, 646, 862, - 1207, - 1888, - 1002, - 78, - 9, - 672, 1044, 759, 80, - 600, 1139, 1019, 57, 2000, 1422, - 833, 1414, 1121, - 1202, 1630, 1260, - 461, 1420, 1244, 1537, 975, 253, - 283, 324, - 359, 599, - 195, 106, 588, 62, - 587, - 757, 645, 205, 51, 1201, 758, - 1209, 673, - 390, - 624, 1581, 941, - 151, 1023, 735, 2820, 1301, 690, - 302, 524, - 99, - 900, - 1588, - 1189, 1084, 251, 238, 2014, 1792, 1010, 1245, 1633, 1741, - 1227, - 1540, - 1208, - 621, 456, - 109, 40, - 65, 788, - 805, - 699, - 1350, - 583, 904, 832, - 801, 532, 594, 1972, 1408, 1351, - 1177, - 1880, - 2114, - 773, 568, 948, - 1015, 1079, 1260, - 1111, 482, - 130, 1778, 1044, 780, - 1491, 245, 912, - 316, - 1141, - 917, - 536, - 1442, - 2346, - 785, - 1546, - 1988, - 2003, 257, 909, - 1849, - 633, - 1209, - 1538, - 1918, - 1054, 1606, 2239, 1576, - 567, - 1500, - 1544, - 1279, 195, 1369, - 817, 293, 1219, - 525, 630, 1197, - 1698, - 2425, - 1840, - 303, 731, 747, - 1169, - 251, 269, - 950, - 75, 1684, - 1182, - 453, 1005, - 1599, 585, 378, - 2075, - 571, - 427, - 529, - 1159, - 1171, - 283, - 205, - 564, - 796, 1246, 717, 2277, 927, 539, - 454, 559, 440, - 717, 1460, 1615, - 1030, 1052, 1610, - 1169, - 138, 847, 226, 39, - 612, - 1251, - 106, - 729, - 651, 968, 1302, - 714, - 636, 1727, 353, 1069, 410, - 798, - 156, 1099, - 574, 918, 446, - 1310, 1012, 466, 1408, 1591, 765, 1429, 1380, 1757, 1949, 1956, 2378, 1578, 2047, 2148, 916, 98, - 7, 1893, 1418, 2141, 348, 1405, 1579, 152, 1134, 1801, - 267, 154, 1395, - 1166, 469, 1054, - 1142, - 405, - 1073, - 1341, - 2264, - 1581, - 364, 869, 1706, - 1162, 549, 1550, - 1225, - 1932, - 1666, - 1485, - 1977, - 2055, - 1727, - 906, - 98, - 1897, 233, 1492, 892, 108, - 331, - 1728, - 1170, - 1700, - 1060, 1980, 1790, - 1070, - 1741, - 1909, - 11, 1539, 1317, - 1600, 94, 497, 421, 443, - 197, - 1578, - 349, - 994, - 599, - 539, 1140, - 965, - 1419, - 129, - 1341, 175, - 447, - 375, 1311, 2055, - 371, - 650, - 307, - 1073, 605, 365, - 2057, - 113, 430, 652, 914, 967, - 1012, - 1586, - 2323, 1505, 1248, 559, 262, - 486, - 401, - 1727, 1342, 1546, 50, 56, 432, - 330, 119, - 604, - 1517, - 1080, - 810, 946, 1127, 1055, - 1400, - 1703, - 1712, - 1270, - 704, - 1317, 807, 1821, 1143, 2760, 1606, 2171, 1120, 409, - 150, - 147, 404, 959, 2439, 1911, 2189, - 906, - 141, - 866, - 904, - 142, - 458, - 557, - 708, - 1679, - 830, - 1431, - 1583, - 1842, - 1346, - 1086, - 1604, - 272, 915, - 1196, 772, 1056, - 638, - 1234, - 1897, - 500, - 81, - 822, - 1289, - 1613, - 735, - 117, 785, 168, - 1090, 1133, 922, - 1096, - 746, 1384, 287, - 547, - 1063, - 1376, - 2201, - 1204, - 2176, - 1570, - 1757, - 1511, - 2241, - 771, - 1737, 1099, 830, - 1588, 724, 1243, - 1542, 693, 805, - 1690, - 240, 1665, - 1700, - 4, - 668, 2149, 816, 1042, - 818, - 1841, 22, - 764, - 507, 449, - 1151, - 617, 289, - 843, - 1596, - 240, 498, - 234, - 657, - 752, 480, 1678, - 319, - 481, 193, - 811, 171, - 119, - 2128, - 202, - 848, 1717, 1140, 1700 }; /* 3rd LSF quantizer (not in MR122, MR515 and MR475) */ static const Word32 dico3_lsf_3[] = { 67, - 17, 66, - 12, - 1690, - 581, - 104, - 272, - 1076, - 1186, - 1845, - 376, - 1140, - 926, - 420, - 58, - 259, - 656, - 1134, - 553, 1788, 1227, 455, 129, 462, 441, - 240, - 528, 840, 514, 130, - 75, 1114, 623, 153, 216, 1068, 564, - 6, - 276, 1119, 727, 190, - 68, 704, 306, 119, - 264, 329, 61, - 100, 156, 364, 123, 183, - 208, - 171, - 123, 220, - 65, - 306, - 62, 402, 17, - 660, - 938, - 266, 0, 385, 235, 276, 285, 320, 268, - 336, - 200, - 724, 17, - 84, 381, - 544, 429, 494, 519, - 117, 288, 304, 329, 643, 157, 701, 508, 1200, 625, 796, 608, 998, 421, 492, 632, 1204, 780, 446, 132, 1257, 844, 547, 449, 829, 658, 541, 470, 1132, 1258, 918, 639, 547, 51, 423, 279, 9, 392, 83, 94, 542, 543, 229, - 147, - 198, 129, 194, - 185, - 863, - 1321, - 302, 30, - 597, - 629, - 19, 114, - 900, - 1081, 466, 353, - 1483, - 1573, 15, - 143, - 1708, - 2059, - 751, 196, - 1876, - 2067, - 642, - 258, - 2335, - 1470, - 450, - 564, - 584, - 186, - 872, - 414, - 1805, - 988, - 1125, - 1310, - 726, - 1129, 28, 169, - 1039, - 864, - 718, - 246, 484, 36, - 233, - 49, 265, 67, 289, 467, 178, 543, 810, 540, 84, 282, 672, 703, - 975, - 777, 129, 287, - 938, - 227, 955, 595, - 1617, - 289, 836, 649, - 1847, - 215, 1106, 718, - 2034, - 1085, 650, 440, - 2101, - 529, 907, 575, - 2011, - 336, 670, 204, - 2389, - 692, 360, 137, - 2156, - 2204, - 9, 280, - 266, 119, 39, 193, 78, - 59, - 120, 226, - 975, - 858, - 781, - 1095, - 619, - 413, - 451, - 842, - 1216, - 1321, - 813, - 883, - 1376, - 1615, - 394, - 428, - 737, - 1113, - 549, - 790, - 880, - 975, - 967, - 642, - 985, - 886, - 1273, - 1361, - 473, - 804, - 1401, - 1407, 160, - 265, - 919, - 275, - 248, - 250, - 718, - 380, 97, - 103, - 375, - 229, - 415, - 193, - 135, - 555, 628, 361, 119, 216, 579, 364, 391, 209, 634, 522, - 154, - 148, 526, 389, 170, 33, 105, 267, 64, 380, - 1503, - 1000, - 30, - 369, - 1070, 58, 647, 223, - 1520, - 291, 621, 307, - 1531, 156, 762, 404, - 2029, 141, 734, 499, - 1849, - 650, 306, 512, - 187, - 104, - 59, 438, 134, - 230, 156, - 186, - 61, - 260, - 16, 10, - 569, - 3, - 421, - 297, - 1725, - 521, - 346, 178, - 1362, - 59, - 44, 157, - 2146, - 461, - 470, - 349, - 2170, - 1, - 369, - 121, - 1579, - 373, - 900, - 1015, - 1117, - 591, - 613, - 784, - 561, 122, - 75, - 449, - 4, - 171, - 123, - 372, 192, 168, - 76, - 132, 252, - 107, 340, 210, 392, 509, 272, 181, - 109, 145, 218, 119, - 416, - 263, 485, 265, - 181, - 8, - 286, 226, - 244, - 218, 69, - 290, - 158, 191, - 1, - 64, - 592, - 90, 213, - 96, 255, 435, 178, - 80, - 369, - 18, - 33, - 80, - 42, 415, 140, - 222, 1143, 651, 649, 329, 767, 556, 249, 235, 948, 413, 442, 279, 141, 339, 356, 557, - 470, - 170, 99, 237, - 569, - 800, 352, 565, 282, 473, 470, 332, - 199, - 690, - 1284, - 917, - 193, - 426, - 800, - 1122, - 26, - 371, - 490, - 193, 637, 595, 519, 330, 408, - 115, 79, 12, 477, 87, - 103, - 376, - 666, - 347, - 277, - 291, - 510, - 481, 169, 297, - 829, - 738, - 205, - 171, - 320, - 540, 328, 283, - 859, - 958, 442, - 2, 556, 686, 130, 56, 1383, 1012, 755, 427, 612, 741, 628, 553, - 339, - 796, 134, 277, - 633, - 1085, - 2, - 246, - 880, - 1035, - 1607, - 1064, - 994, - 474, - 1138, - 488, - 414, - 795, 73, - 206, - 8, - 139, 439, 204, - 176, - 578, 23, 131, - 269, - 757, - 191, 245, - 109, - 338, 112, 316, 120, - 406, - 118, 611, - 180, - 186, - 645, 115, - 173, 34, - 518, - 489, - 151, 61, - 583, - 844, 220, - 138, - 681, - 1020, 391, - 17, - 598, - 321, 157, - 295, 129, 155, - 926, - 875, - 987, 285, 241, - 83, - 125, - 125, 620, 597, 432, 92, 393, 78, 409, 61, - 393, - 739, - 413, - 748, 83, 54, 361, 27, - 1084, 130, - 337, - 694, - 1565, 297, 318, - 19, - 1873, 36, 51, - 317, - 2323, - 246, 231, - 84, - 2306, - 783, 40, - 179, - 2233, - 930, - 474, - 462, - 754, - 86, - 288, - 626, - 2411, - 455, - 63, 171, - 1099, - 1094, - 26, - 143, - 1193, - 455, - 406, - 381, - 605, - 210, - 96, - 51, - 580, - 476, - 276, - 15, - 1195, - 634, - 1203, - 881, - 378, - 221, - 669, - 952, 594, 178, - 403, - 676, 763, 327, 601, 290, 172, 300, 203, 157, - 56, - 336, 356, 24, - 228, - 296, - 259, - 29, - 186, 263, 416, 14, - 353, 373, - 12, - 216, 257, 96, 174, 57, - 1526, - 616, - 954, - 499, - 497, - 152, - 333, 125, 105, 200, 179, - 97, - 331, - 224, 765, 697, 760, 256, 301, 59, 455, - 85, 204, 288, - 514, 240, 251, - 109, 256, 417, - 34, - 413, 101, 430, 384, 156, - 31, - 10, 206, 426, 589, 145, 143, 71, 808, 906, 333, 349, 986, 938, 589, 331, 1300, 824, 187, 509, 1062, 653, 379, 466, 1462, 937, 401, 274, 787, 861, 265, 2, 609, 553, 28, 305, 926, 340, 106, 386, 241, - 267, - 147, 225, - 178, - 534, 347, 502, - 643, - 381, 397, 30, - 651, - 733, - 435, 398, - 407, - 726, - 484, - 248, - 789, - 914, - 438, - 476, - 498, - 390, 75, - 295, - 964, - 590, - 606, 150, - 121, - 49, - 155, - 78, 935, 550, 389, 38, - 321, 127, 424, 315, - 285, - 113, 283, 259, 658, 203, 322, 486, 903, 505, 748, 417, 611, 423, 555, 512, 239, - 83, - 578, - 19, - 339, - 731, 349, 13, - 934, - 1399, - 114, - 360, 107, 692, 182, 90, - 1243, - 1538, - 1551, - 725, - 568, - 903, - 1363, - 525, - 517, - 853, - 861, - 1004, - 168, - 690, - 835, 63, - 137, - 556, - 547, 144, - 286, - 817, 485, 319, - 147, - 408, 526, 246, - 347, - 434, 297, - 28, - 290, - 471, - 1110, - 1285, - 460, - 359, - 988, - 794, 1347, 1299, 690, 523, 1216, 1068, 1094, 757, 825, 1140, 752, 494, 1252, 1365, 1195, 898, 521, 1053, 532, 432, - 334, - 216, - 313, - 263, - 160, 52, - 472, - 155, 127, 136, - 380, 44, 851, 410, - 162, - 489, 123, - 255, - 796, - 667, 1090, 917, 789, 493, 1397, 1197, 558, 202, - 51, - 118, - 342, - 701, 83, 108, - 42, - 441, 61, 95, 287, 256, - 27, 89, 524, 531, 351, 227, 592, 545, 697, 155, - 164, 307, 638, 274, - 489, - 50, 754, 240, - 166, - 124, - 116, - 579, - 1212, - 63, 190, - 295, - 1040, - 1296, 147, - 376, - 177, - 113, 841, 1241, 1051, 668, 2, 293, 551, 304, - 1096, - 953, - 248, 376, - 750, - 965, 87, 516, - 275, - 516, 689, 391, - 379, - 643, 876, 594, - 390, - 1013, - 645, 573, - 107, - 568, - 689, - 826, - 1025, - 27, - 328, - 203, 861, 749, 548, 233, - 1660, - 1043, 451, 108, - 660, - 620, 430, 236, 21, - 396, - 1158, - 631, 1372, 1298, 967, 577, 1125, 1125, 589, 454, - 323, - 865, - 467, 153, - 468, - 699, - 804, - 509, - 392, - 718, - 204, - 35, - 603, - 1093, - 567, - 162, - 505, - 1004, - 102, 350, 219, 224, 423, 252, 395, 591, 608, 363, - 746, - 96, 373, 172, 171, 295, 714, 339, 233, 77, 107, 277, 157, 153, - 499, - 356, 1547, 1073, 576, 494, - 292, - 339, - 504, - 592, - 903, - 72, - 619, - 481, - 1594, - 1117, - 567, - 254, - 793, - 507, - 564, - 291, - 492, - 532, 502, 560, - 382, 427, 600, 230, - 227, 477, 251, 75, 285, 842, 813, 476, - 1310, - 1333, 186, 377, - 587, - 917, 643, 381, - 1186, - 553, 411, 82, - 1127, - 820, - 174, - 540, - 604, 119, 543, 205, - 380, 657, 909, 567, 112, - 298, - 374, 114, - 857, - 251, 56, 159, 401, 345, - 34, - 140, - 111, - 607, 41, 614, 355, - 114, - 77, 474, 578, 56, 1450, 924, 1098, 1420, 741, 400, 246, 22, 588, 313, - 121, 327, 831, 472, - 1138, - 608, 856, 552, - 1241, - 1072, 638, 600, - 358, 254, - 333, - 303, - 646, 739, 358, 74, 1226, 1671, 1221, 849, 2241, 1624, 983, 636, 1841, 1477, 749, 384, 350, 263, 87, 128, - 1902, - 941, - 144, - 64, - 1734, - 255, 288, - 31, - 2644, - 1238, 366, 235, - 1643, - 1092, - 1344, - 304, - 541, - 1075, - 1116, 123, - 1178, - 252, - 816, - 180, - 1016, 533, 565, 233, - 487, - 430, - 188, 334, 867, 1236, 534, 171, - 1590, - 1607, 635, 630, - 2196, 310, 924, 412, - 2358, - 328, 956, 529, - 2639, - 377, 630, 278, - 2602, 317, 799, 299, - 2406, 133, 340, 31, - 2156, - 1468, 131, 125, - 1184, - 490, - 139, 46, - 744, 447, 891, 564, 67, - 451, 646, 604, - 553, - 429, - 876, 396, 162, - 66, 1305, 915, 479, 579, 1088, 794, 450, 278, 566, 324, - 1057, - 154, 148, - 177, - 2545, 168, 1070, 592, - 2351, - 42, 819, 345, - 2344, - 707, 721, 250, - 2175, - 1497, - 309, 122, - 78, - 73, 120, 173, - 4, 262, - 263, - 261, - 431, - 64, - 405, - 732, - 2609, 116, - 83, - 193, - 1525, - 944, - 477, - 725, - 508, 307, 170, 172, 832, 417, 832, 686, - 225, 177, 894, 818, - 482, - 389, 1279, 1039, - 383, 201, - 350, 40, 730, 635, 226, 526, 503, 462, 338, 398, 535, 714, 40, - 282, 1482, 1471, 1085, 731, 1561, 1072, 909, 693, 1419, 1282, 889, 879, 1153, 728, 1186, 840, - 226, 1130, 949, 689, - 494, - 986, - 1556, - 128, - 568, - 721, - 713, - 26, 317, 524, 70, 135, - 405, - 865, - 1766, - 652, - 174, - 801, 885, 773, - 153, - 91, 1099, 751, - 506, - 1149, 853, 646, 241, 782, 519, 539, 1853, 1700, 1101, 684, - 1249, - 1486, - 464, 188, - 893, - 1409, - 1312, - 341, - 135, 438, - 175, 18, 1111, 976, 319, 208, - 1430, - 1768, 83, 458, - 530, - 1000, 307, 129, - 840, - 15, - 29, - 356, - 911, - 924, - 1147, - 242, - 119, - 528, 127, - 133, - 761, - 765, 190, - 83, - 315, 895, 522, 231, - 222, 102, - 63, - 428, 316, 699, 379, 70, 25, 716, 314, - 108, 507, 874, 566, 238, 108, 941, 519, 195, 425, - 60, - 427, 257, 139, - 103, - 630, 446, 334, 370, 412, 48, - 172, - 690, - 283, 557, 187, - 286, 158, 483, 140, 270, - 344, - 631, 924, 579, - 116, 132, 142, 466, - 68, - 64, 230, - 145, - 302, - 542, - 803, - 912, 1018, 737, - 773, 1015, 630, 297, - 2596, 95, 445, 336, - 2122, 491, 510, 191, - 1253, 161, - 2, - 324, - 1450, - 633, - 712, - 105, - 842, - 254, - 411, 100, - 640, - 290, 1010, 763, - 650, 313, 1169, 730, 140, 505, 1030, 766, 772, 287, 1067, 823, 495, 749, 305, 323, - 164, 462, 78, 399, - 342, - 874, 69, 597, - 16, 620, 621, 337, - 138, - 444, - 265, 218, 84, - 450, 953, 666, - 222, - 803, 541, 604, - 921, - 1376, 244, 116, - 841, - 723, 630, 588, 140, 663, 294, 368, 935, 1046, 881, 759, 1746, 1464, 916, 628, 436, 963, 281, 1, - 119, 74, 542, 213, 1, - 567, 301, 241, 260, 435, 222, 396, 936, 957, 1108, 703, 510, 506, 808, 478, 601, 694, 960, 620, 972, 741, 980, 600, 834, 717, 767, 684, 643, 972, 935, 638, 501, 661, 720, 851, - 105, - 632, - 303, - 117, - 429, 130, 789, 442, - 522, - 188, 704, 373, - 759, 42, 814, 523, - 531, - 1137, 373, 578, - 682, - 1203, - 455, 285, - 1163, - 1577, - 1098, 44, 81, - 82, 712, 363, 477, 246, 954, 622, 1604, 1622, 1277, 891, 1409, 859, 924, 892, 774, 1041, 947, 1142, 40, - 546, - 75, 288, - 616, - 106, - 697, - 26, - 169, - 160, - 891, - 739, - 279, - 384, - 1029, - 350, 1781, 1308, 1046, 816, 1580, 1533, 1472, 1178, 1505, 1076, 1216, 899, 890, 904, 564, 654, 920, 692, 1021, 856, - 493, 132, 177, 505, 71, 195, - 28, 97, 456, 351, - 164, 88, 439, 278, - 40, 350, 1395, 949, 234, - 95, - 805, - 472, 38, - 163, 367, - 98, 489, 523, 1025, 1178, 1212, 906, 319, 1314, 814, 461, - 123, - 543, - 804, 447, - 748, - 324, - 897, - 1127, - 737, - 501, - 789, - 713, 715, 777, 1239, 922, 1949, 1939, 1368, 865, 730, 880, 758, 388, - 871, 454, 17, - 251, - 381, - 810, - 1583, 239, - 521, - 966, - 792, 259, - 890, - 1358, - 770, - 73, 166, 349, - 212, 323, - 840, - 301, 473, 435, - 679, - 464, 728, 351, - 156, - 199, 667, 432, 29, - 252, 415, 480, - 731, - 379, 145, 559, - 528, - 631, - 1158, - 159, 445, 273, 123, 639, 373, - 126, 800, 568, 84, - 162, 720, 712, - 830, - 536, - 185, 222, 408, 452, 501, 771, - 897, - 1355, - 67, 442, - 792, - 1406, 566, 602, 167, - 326, 509, 330, - 95, - 626, - 730, - 344, 1668, 1217, 779, 455, 1316, 828, 584, 719, 404, - 31, 1013, 789, 89, 107, 891, 549, 871, 1581, 917, 671, 866, 1479, 1289, 854, 391, 1068, 1122, 812, 78, - 562, 345, 563, 429, - 103, 417, 787, - 122, - 437, 411, 788, - 913, - 417, 602, 754, - 226, - 16, 151, 760, - 700, 118, - 104, - 14, - 1128, 48, 284, 393, - 390, - 419, - 639, - 116, - 910, 306, 316, - 13, 1207, 984, 821, 669, - 1195, - 693, 140, - 213, - 884, - 416, - 199, - 558, - 616, 245, - 404, - 664, 262, 56, - 617, - 724, - 85, - 491, - 320, - 656, - 570, - 831, - 129, - 528, - 1506, - 63, - 367, - 385, - 358, - 321, 4, 51, - 366, - 214, 319, 511, 146, 671, - 17, - 291, - 110, 464, - 139, - 496, - 202, 220, - 312, - 631, - 660, - 73, - 655, - 820, - 662, - 653, - 1288, - 857, - 430, - 953, - 959, - 264, - 49, - 468, - 72, - 381, - 350, - 563, - 193, - 407, 55, - 408, - 803, 11, - 309, 649, 188, - 198, - 512, 461, - 79, - 458, - 1318, - 263, - 134, - 523, - 1657, - 435, - 495, - 765, 57, - 347, - 414, 434, - 1141, - 242, - 664, - 857, 34, - 68, - 707, - 338 }; #define MR515_3_SIZE 128 /* 3rd LSF quantizer (MR515 and MR475) */ static const Word32 mr515_3_lsf[] = { 419, 163, - 30, - 262, - 455, - 789, - 1430, - 721, 1006, 664, 269, 25, 619, 260, 183, 96, - 968, - 1358, - 388, 135, - 693, 835, 456, 154, 1105, 703, 569, 363, 1625, 1326, 985, 748, - 220, 219, 76, - 208, - 1455, - 1662, 49, 149, - 964, - 172, - 752, - 336, 625, 209, - 250, - 66, - 1017, - 838, - 2, 317, - 2168, - 1485, - 138, 123, - 1876, - 2099, - 521, 85, - 967, - 366, - 695, - 881, - 921, - 1011, - 763, - 949, - 124, - 256, - 352, - 660, 178, 463, 354, 304, - 1744, - 591, - 282, 79, - 2249, 175, 867, 499, - 138, - 180, - 181, - 21, - 2291, - 1241, - 460, - 520, - 771, 451, - 10, - 308, 271, - 65, 4, 214, - 279, - 435, - 43, - 348, - 670, 35, - 65, - 211, 806, 535, 85, 297, 57, 239, 722, 493, 225, 661, 840, 547, - 540, - 376, 14, 349, 469, 721, 331, 162, - 544, - 752, - 62, - 10, 398, - 88, 724, 701, - 19, - 533, - 94, 601, 136, - 71, - 681, - 747, - 166, - 344, 261, - 50, 161, - 52, 485, 337, - 1675, 50, 190, - 93, - 2282, - 231, - 194, - 82, - 95, - 595, - 154, 128, 894, 501, 588, 457, - 345, 206, 122, 110, - 631, - 227, - 569, 3, 408, 239, 397, 226, - 197, - 2, 128, 491, 1281, 904, 292, 215, 538, 306, 259, 509, - 677, - 1047, 13, 321, - 679, - 588, - 358, - 212, - 558, 243, 646, 479, 486, 342, 634, 532, 107, 802, 331, 136, - 112, - 398, - 1031, - 286, - 326, - 705, 288, 272, 1299, 1144, 1178, 860, - 423, 121, - 385, - 148, - 295, - 302, - 834, - 819, 16, - 24, - 201, - 476, 555, 91, - 245, 294, - 38, - 379, - 962, - 1221, - 1191, - 1518, - 273, - 395, - 390, - 1013, - 645, 573, - 1843, - 1030, 505, 468, 744, 947, 609, 493, - 689, - 1172, - 628, - 135, - 1026, 195, 411, 196, 1582, 1147, 575, 337, - 1239, - 777, - 648, - 142, 595, 825, 967, 735, - 1206, - 970, - 81, - 342, - 745, 13, - 72, 375, 454, 19, 1407, 921, - 1647, - 172, 861, 562, 928, 1537, 1063, 740, - 2472, - 952, 264, 82, - 502, - 965, - 1334, 123, 867, 1236, 534, 171, - 2320, - 460, 780, 363, - 1190, - 617, 252, - 61, - 174, 34, 1011, 788, - 2333, 247, 423, 153, - 16, - 355, 262, 449, - 1576, - 1073, - 544, - 371, - 615, - 305, 1051, 805, 687, 528, 6, - 182, 935, 875, 1002, 809, 199, 257, 126, 76, - 584, - 1138, 599, 556, - 1105, - 1391, - 1591, - 519, - 977, - 1325, 108, 347, - 722, - 975, 365, 101, - 145, 681, 249, - 153, 0, - 334, - 570, 159, 412, 285, - 336, - 617, - 953, - 966, 887, 689, - 1251, 84, - 185, - 398, - 592, 433, 1044, 653, 85, 329, - 40, 361, - 433, - 705, 466, 574, - 154, 654, 592, 290, - 167, 72, 349, 175, 674, 297, 977, 720, 1235, 1204, 757, 488, - 400, - 269, 538, 372, - 1350, - 1387, - 1194, - 91, 1262, 876, 775, 700, - 599, - 38, - 430, - 722, 1976, 1630, 991, 608, 111, 276, - 226, - 96, - 947, - 388, - 11, - 7, - 303, - 531, - 839, 338, 1734, 1710, 1405, 1013, - 516, - 855, - 645, 210, - 688, - 416, 513, 230, - 822, - 637, - 1146, - 320, - 952, - 658, - 694, 183, - 114, - 623, 818, 674, - 191, - 204, 731, 635, 51, 1221, 883, 576, - 954, - 431, 826, 598, - 342, - 755, - 900, - 407, - 1126, - 354, - 206, - 512, - 547, - 810, - 357, - 620, 66, 515, - 73, - 410, - 872, - 945, - 1444, - 1227, 191, - 17, - 544, - 231, - 1540, - 544, - 901, - 886 }; #define MR795_1_SIZE 512 /* 1st LSF quantizer (MR795) */ static const Word32 mr795_1_lsf[] = { - 890, - 1550, - 2541, - 819, - 970, 175, - 826, - 1234, - 762, - 599, - 22, 634, - 811, - 987, - 902, - 323, 203, 26, - 383, - 235, - 781, - 399, 1262, 906, - 932, - 1399, - 1380, - 624, 93, 87, - 414, - 539, - 691, 37, 633, 510, - 387, - 476, - 1330, 399, 66, 263, - 407, - 49, - 335, - 417, 1041, 1865, - 779, - 1089, - 1440, - 746, - 858, 832, - 581, - 759, - 371, - 673, - 506, 2088, - 560, - 634, - 1179, 271, 241, 14, - 438, - 244, - 397, 463, 1202, 1047, - 606, - 797, - 1438, - 51, - 323, 481, - 224, - 584, - 527, 494, 881, 682, - 433, - 306, - 1002, 554, 659, 222, 171, - 160, - 353, 681, 1798, 1565, - 852, - 1181, - 1695, - 336, - 666, 114, - 581, - 756, - 744, - 195, 375, 497, - 465, - 804, - 1098, 154, 282, - 131, - 50, - 191, - 719, 323, 732, 1542, - 722, - 819, - 1404, 105, - 250, 185, - 178, - 502, - 742, 321, 510, 1111, - 323, - 567, - 966, 127, 484, 338, - 160, 52, - 338, 732, 1367, 1554, - 626, - 802, - 1696, - 286, - 586, 676, - 695, - 343, - 370, - 490, 295, 1893, - 630, - 574, - 1014, - 80, 645, - 69, - 6, - 318, - 364, 782, 1450, 1038, - 313, - 733, - 1395, 120, 60, 477, - 264, - 585, - 123, 711, 1245, 633, - 91, - 355, - 1016, 771, 758, 261, 253, 81, - 474, 930, 2215, 1720, - 808, - 1099, - 1925, - 560, - 782, 169, - 804, - 1074, - 188, - 626, - 55, 1405, - 694, - 716, - 1194, - 660, 354, 329, - 514, - 55, - 543, 366, 1033, 1182, - 658, - 959, - 1357, - 55, - 184, 93, - 605, - 286, - 662, 404, 449, 827, - 286, - 350, - 1263, 628, 306, 227, - 16, 147, - 623, 186, 923, 2146, - 674, - 890, - 1606, - 443, - 228, 339, - 369, - 790, - 409, 231, 86, 1469, - 448, - 581, - 1061, 594, 450, - 177, - 124, - 170, - 447, 671, 1159, 1404, - 476, - 667, - 1511, - 77, - 138, 716, - 177, - 372, - 381, 451, 934, 915, - 250, - 432, - 822, 272, 828, 446, 26, 19, - 31, 698, 1692, 2168, - 646, - 977, - 1924, - 179, - 473, 268, - 379, - 745, - 691, 11, 127, 1033, - 488, - 917, - 825, 61, 323, 135, 147, - 145, - 686, 685, 786, 1682, - 506, - 848, - 1297, 35, 90, 222, - 23, - 346, - 670, 455, 591, 1287, - 203, - 593, - 1086, 652, 352, 437, 39, 63, - 457, 841, 1265, 2105, - 520, - 882, - 1584, - 328, - 711, 1421, - 596, - 342, - 70, 209, 173, 1928, - 423, - 598, - 921, 421, 605, - 38, - 2, - 245, - 127, 896, 1969, 1135, - 379, - 518, - 1579, 173, 118, 753, - 55, - 381, - 52, 985, 1021, 753, - 2, - 291, - 891, 753, 992, 423, 264, 131, - 196, 895, 2274, 2543, - 635, - 1088, - 2499, - 529, - 982, 526, - 764, - 830, - 548, - 436, 316, 599, - 675, - 940, - 746, - 57, 236, - 11, - 201, - 81, - 798, 16, 845, 1558, - 737, - 985, - 1212, - 468, 17, 290, - 279, - 584, - 700, 183, 822, 705, - 265, - 492, - 1187, 421, 152, 468, - 390, 166, - 268, 39, 1550, 1868, - 635, - 966, - 1571, - 453, - 492, 910, - 284, - 1027, - 75, - 181, - 133, 1852, - 445, - 624, - 1174, 420, 367, - 49, - 389, - 212, - 169, 707, 1073, 1208, - 539, - 710, - 1449, 83, - 163, 484, - 236, - 543, - 355, 338, 1175, 814, - 246, - 309, - 958, 606, 760, 60, 166, - 8, - 163, - 306, 1849, 2563, - 747, - 1025, - 1783, - 419, - 446, 209, - 718, - 566, - 534, - 506, 693, 857, - 463, - 697, - 1082, 325, 431, - 206, - 15, - 8, - 763, 545, 919, 1518, - 611, - 783, - 1313, 256, - 55, 208, - 165, - 348, - 662, 321, 680, 930, - 326, - 429, - 951, 484, 446, 570, - 197, 72, - 73, 909, 1455, 1741, - 563, - 737, - 1974, - 124, - 416, 718, - 478, - 404, - 314, - 16, 446, 1636, - 551, - 537, - 750, - 58, 638, 214, 55, - 185, - 271, 1148, 1301, 1212, - 483, - 671, - 1264, 117, 285, 543, - 204, - 391, - 111, 513, 1538, 854, - 114, - 190, - 978, 877, 595, 464, 260, 260, - 311, 748, 2283, 2216, - 517, - 945, - 2171, - 326, - 708, 378, - 812, - 691, - 232, - 560, 687, 1409, - 732, - 690, - 836, - 359, 645, 386, - 265, 62, - 678, 145, 1644, 1208, - 555, - 988, - 1233, - 78, 14, 114, - 327, - 358, - 489, 392, 677, 697, - 201, - 236, - 1140, 693, 449, 178, - 243, 256, - 433, 611, 1385, 2456, - 612, - 901, - 1464, - 307, - 17, 499, - 315, - 667, - 254, 256, 428, 1463, - 486, - 422, - 1056, 655, 370, 18, - 102, - 185, - 276, 755, 1578, 1335, - 488, - 603, - 1418, 182, - 93, 870, - 73, - 458, - 348, 835, 862, 957, - 282, - 333, - 746, 547, 839, 428, 273, - 89, 13, 940, 1708, 2576, - 418, - 1084, - 1758, - 44, - 358, 259, - 497, - 643, - 560, 99, 557, 961, - 421, - 766, - 917, 295, 326, 184, 175, 15, - 626, 532, 878, 1981, - 443, - 768, - 1275, 221, 156, 268, 39, - 363, - 505, 695, 772, 1140, - 162, - 459, - 912, 709, 444, 658, 25, 303, - 312, 1268, 1410, 1715, - 297, - 766, - 1836, - 263, - 108, 1070, - 406, - 13, - 129, 57, 438, 2734, - 374, - 487, - 835, 304, 696, 164, 104, - 235, 5, 1611, 1900, 1399, - 229, - 582, - 1325, 405, 192, 817, - 87, - 438, 111, 1028, 1199, 993, 68, - 175, - 934, 1033, 1117, 451, 478, 200, - 248, 2127, 2696, 2042, - 835, - 1323, - 2131, - 799, - 692, 466, - 812, - 1032, - 469, - 622, 288, 920, - 701, - 841, - 1070, - 411, 512, 8, - 390, - 91, - 744, - 30, 1043, 1161, - 822, - 1148, - 1156, - 294, - 46, 110, - 411, - 374, - 678, 214, 531, 668, - 406, - 420, - 1194, 487, 232, 303, - 318, 91, - 472, 123, 1232, 2445, - 722, - 952, - 1495, - 738, - 675, 1332, - 543, - 606, - 211, - 95, - 98, 1508, - 549, - 514, - 1193, 473, 211, 73, - 288, - 112, - 389, 537, 1332, 1258, - 567, - 755, - 1545, 71, - 283, 632, - 170, - 481, - 493, 681, 1002, 817, - 356, - 331, - 877, 419, 706, 346, 241, - 34, - 326, 377, 1950, 1883, - 727, - 1075, - 1625, - 233, - 543, 116, - 524, - 806, - 585, - 73, 478, 729, - 288, - 925, - 1143, 173, 447, - 52, 68, - 229, - 606, 449, 529, 1797, - 591, - 875, - 1363, 183, - 144, 324, - 103, - 452, - 666, 623, 488, 1176, - 238, - 511, - 1004, 326, 552, 458, 136, 108, - 319, 626, 1343, 1883, - 490, - 646, - 1730, - 186, - 449, 984, - 738, - 76, - 170, - 550, 755, 2560, - 496, - 510, - 947, 210, 694, - 52, 84, - 322, - 199, 1090, 1625, 1224, - 376, - 603, - 1396, 343, 74, 632, - 175, - 502, - 32, 972, 1332, 734, 52, - 295, - 1113, 1065, 918, 160, 393, 107, - 397, 1214, 2649, 1741, - 632, - 1201, - 1891, - 719, - 277, 353, - 651, - 880, - 122, - 211, 209, 1338, - 562, - 714, - 1059, - 208, 388, 159, - 320, - 61, - 551, 293, 1092, 1443, - 648, - 865, - 1253, - 49, - 143, 305, - 401, - 227, - 585, 561, 532, 927, - 117, - 443, - 1188, 507, 436, 292, - 79, 233, - 458, 671, 1025, 2396, - 633, - 842, - 1525, - 308, - 286, 640, - 373, - 621, - 407, 418, 253, 1305, - 315, - 581, - 1137, 572, 685, - 281, 61, - 68, - 371, 991, 1101, 1498, - 493, - 683, - 1362, - 47, 164, 704, - 256, - 314, - 268, 631, 949, 1052, - 118, - 348, - 833, 68, 1180, 568, 152, 117, 34, 1113, 1902, 2239, - 601, - 959, - 1706, - 143, - 489, 480, - 332, - 655, - 574, 54, 353, 1192, - 462, - 652, - 796, 150, 549, 112, 195, - 111, - 515, 679, 1108, 1647, - 558, - 749, - 1217, - 9, 272, 341, - 53, - 265, - 535, 489, 843, 1298, - 120, - 482, - 1032, 632, 543, 408, 179, 306, - 526, 1124, 1464, 2244, - 417, - 786, - 1562, - 224, - 384, 1364, - 377, - 459, - 25, 385, 489, 2174, - 332, - 651, - 829, 544, 553, 61, 22, - 113, - 89, 1128, 1725, 1524, - 216, - 373, - 1653, 161, 316, 908, - 165, - 222, - 67, 1362, 1175, 789, 73, - 252, - 767, 738, 932, 616, 362, 246, - 126, 787, 2654, 3027, - 691, - 1106, - 2190, - 565, - 588, 524, - 590, - 979, - 490, - 263, 397, 982, - 577, - 837, - 945, - 22, 435, - 49, - 190, - 118, - 629, - 88, 1240, 1513, - 636, - 1051, - 1019, - 291, 189, 259, - 257, - 470, - 629, 145, 945, 894, - 326, - 364, - 1094, 543, 260, 630, - 202, 189, - 209, 357, 1379, 2091, - 569, - 1075, - 1449, - 714, - 239, 919, - 420, - 705, - 84, - 109, - 114, 2407, - 413, - 529, - 1177, 482, 368, 131, - 186, - 72, - 131, 861, 1255, 1220, - 611, - 658, - 1341, 227, - 121, 631, - 176, - 489, - 218, 745, 1175, 957, - 321, - 148, - 936, 671, 966, 216, 340, - 3, - 143, 469, 1848, 2437, - 729, - 961, - 1683, - 213, - 254, 321, - 511, - 438, - 521, - 126, 725, 903, - 340, - 685, - 1032, 316, 480, 20, 23, - 89, - 551, 353, 1051, 1789, - 544, - 757, - 1364, 298, - 25, 436, - 100, - 392, - 519, 467, 754, 1078, - 210, - 398, - 1078, 620, 658, 630, 33, 147, - 178, 921, 1687, 1921, - 325, - 528, - 1978, 2, - 285, 910, - 371, - 490, - 230, 0, 597, 2010, - 496, - 395, - 834, 37, 945, 245, 181, - 160, - 144, 1481, 1373, 1357, - 355, - 601, - 1270, 298, 322, 672, - 193, - 336, 77, 1089, 1533, 922, 177, - 39, - 1125, 996, 781, 536, 456, 366, - 432, 1415, 2440, 2279, - 466, - 758, - 2325, - 303, - 509, 387, - 727, - 557, 66, - 145, 643, 1248, - 544, - 676, - 916, - 225, 862, 588, - 152, 40, - 533, 423, 1423, 1558, - 572, - 843, - 1145, - 128, 85, 461, - 238, - 257, - 584, 605, 748, 861, 24, - 202, - 1409, 797, 487, 303, - 181, 364, - 182, 616, 1378, 2942, - 494, - 852, - 1441, - 292, 61, 812, - 84, - 723, - 182, 555, 532, 1506, - 365, - 493, - 1057, 822, 588, 11, - 14, - 18, - 230, 1001, 1401, 1451, - 474, - 569, - 1292, 302, 62, 1062, - 70, - 376, - 222, 982, 974, 1149, - 196, - 234, - 795, 479, 1098, 499, 362, 58, 70, 1147, 2069, 2857, - 487, - 878, - 1824, 73, - 288, 348, - 358, - 500, - 508, 199, 721, 1242, - 78, - 697, - 795, 361, 536, 196, 374, 110, - 735, 847, 1051, 1896, - 366, - 713, - 1182, 315, 320, 429, 72, - 215, - 450, 759, 886, 1363, - 30, - 428, - 834, 861, 627, 796, 118, 468, - 279, 1355, 1883, 1893, - 188, - 642, - 1612, 63, - 175, 1198, - 418, - 211, 51, 414, 587, 2601, - 234, - 557, - 858, 424, 889, 222, 136, - 101, 83, 1413, 2278, 1383, - 84, - 445, - 1389, 414, 313, 1045, 29, - 343, 65, 1552, 1647, 980, 183, - 91, - 829, 1273, 1413, 360, 553, 272, - 107, 1587, 3149, 2603 }; #define DICO1_SIZE_5 128 #define DICO2_SIZE_5 256 #define DICO3_SIZE_5 256 #define DICO4_SIZE_5 256 #define DICO5_SIZE_5 64 /* 1st LSF quantizer (MR122) */ static const Word32 dico1_lsf_5[DICO1_SIZE_5 * 4] = { - 451, - 1065, - 529, - 1305, - 450, - 756, - 497, - 863, - 384, - 619, - 413, - 669, - 317, - 538, - 331, - 556, - 414, - 508, - 424, - 378, - 274, - 324, - 434, - 614, - 226, - 500, - 232, - 514, - 263, - 377, - 298, - 410, - 151, - 710, - 174, - 818, - 149, - 412, - 156, - 429, - 288, - 462, - 186, - 203, - 170, - 302, - 191, - 321, - 131, - 147, - 297, - 395, - 228, - 214, - 245, - 192, - 67, - 316, - 71, - 327, - 104, - 205, - 94, - 183, - 143, - 38, - 193, - 95, 16, - 76, - 124, - 248, 23, - 237, 24, - 244, 18, - 136, 44, - 111, - 33, - 24, - 25, 0, 149, 19, 23, - 143, 158, - 169, 174, - 181, 133, - 55, 165, - 26, 111, 84, 98, 75, 87, 183, - 115, - 11, - 8, 130, 11, 170, 254, 77, 205, 17, 183, 112, 262, 194, 202, 287, 95, 189, - 42, - 105, 234, 179, 39, 186, 163, 345, 332, 199, 299, 161, - 54, 285, - 78, 281, - 133, 141, - 182, 111, 249, 341, 271, 364, 93, 403, 75, 391, 92, 510, - 138, 220, - 185, - 29, - 34, 361, - 115, 320, 3, 554, 99, 286, 218, 591, - 245, 406, - 268, 453, 0, 580, 25, 606, 275, 532, 148, 450, - 73, 739, - 285, 518, - 288, 94, - 203, 674, - 140, - 74, 205, 714, - 114, 299, 176, 923, 182, 557, 240, 705, - 16, 513, 485, 593, 293, 384, 451, 617, - 38, 50, 563, 529, 303, 209, 459, 363, 433, 452, 450, 454, 367, 606, 477, 741, 432, 353, 368, 267, 361, 716, 273, 583, 453, 166, 510, 172, 201, 629, 274, 191, 568, 639, 302, 298, 634, 387, 643, 350, 587, 560, 612, 565, 600, 788, 487, 672, 512, 1015, 321, 333, 357, 854, - 125, 413, 474, 712, 17, - 151, 564, 285, 270, - 241, 971, 889, 489, 220, 510, 896, 549, 924, 327, 825, 290, 911, 540, 1108, 158, 805, 199, 957, 511, 730, 100, 874, 13, 791, 435, 632, 676, 972, 249, 900, 467, 1218, 781, 1074, 585, 785, - 23, 669, 267, 1043, 619, 1084, 615, 1145, 622, 905, 916, 1049, 80, 331, 584, 1075, 89, 639, 988, 961, 770, 720, 798, 699, 492, 447, 899, 627, 271, 1188, 725, 1333, 87, 603, 832, 1603, 616, 1127, 890, 1505, 1000, 1156, 866, 1009, 995, 827, 1149, 858, 817, 1450, 773, 1320, 500, 1389, 312, 1153, - 20, 1084, 64, 1283, 2, 1172, 399, 1869, 514, 1706, 502, 1636, 886, 1522, 416, 600, 1131, 1350, 1275, 1390, 889, 1795, 914, 1766, 227, 1183, 1250, 1826, 505, 1854, 919, 2353, - 199, 431, 152, 1735, - 213, - 28, 392, 1334, - 153, - 52, 978, 1151, - 323, - 400, 813, 1703, - 136, 84, 1449, 2015, - 331, - 143, - 137, 1192, - 256, 534, - 157, 1031, - 307, - 439, 542, 731, - 329, - 420, - 97, 616, - 362, - 168, - 322, 366, - 247, - 110, - 211, 89, - 196, - 309, 20, 59, - 364, - 463, - 286, 89, - 336, 175, - 432, 141, - 379, - 190, - 434, - 196, - 79, 150, - 278, - 227, - 280, 166, - 555, - 422, - 155, 541, - 366, 54, - 29, - 83, - 301, - 774, 186, 628, - 397, - 264, 242, 293, - 197, - 585, 124, 410, 53, - 133, 10, 340, - 570, - 1065, 65, - 446, 68, - 493, 383, 937, - 357, - 711, - 359, - 250, - 677, - 1068, 292, - 26, 363, 6, 607, 1313, - 127, - 10, 1513, 1886, 713, 972, 1469, 2181, 1443, 2016 }; /* 2nd LSF quantizer (MR122) */ static const Word32 dico2_lsf_5[DICO2_SIZE_5 * 4] = { - 1631, - 1600, - 1796, - 2290, - 1027, - 1770, - 1100, - 2025, - 1277, - 1388, - 1367, - 1534, - 947, - 1461, - 972, - 1524, - 999, - 1222, - 1020, - 1172, - 815, - 987, - 992, - 1371, - 1216, - 1006, - 1289, - 1094, - 744, - 1268, - 755, - 1293, - 862, - 923, - 905, - 984, - 678, - 1051, - 685, - 1050, - 1087, - 985, - 1062, - 679, - 989, - 641, - 1127, - 976, - 762, - 654, - 890, - 806, - 833, - 1091, - 706, - 629, - 621, - 806, - 640, - 812, - 775, - 634, - 779, - 543, - 996, - 565, - 1075, - 580, - 546, - 611, - 572, - 619, - 760, - 290, - 879, - 526, - 823, - 462, - 795, - 253, - 553, - 415, - 589, - 439, - 533, - 340, - 692, - 935, - 505, - 772, - 702, - 1131, - 263, - 306, - 971, - 483, - 445, - 74, - 555, - 548, - 614, - 129, - 693, - 234, - 396, - 246, - 475, - 250, - 265, - 404, - 376, - 514, - 417, - 510, - 300, - 313, - 334, - 664, - 463, - 814, - 386, - 704, - 337, - 615, - 234, - 201, - 233, - 239, - 167, - 567, - 203, - 619, - 147, - 415, - 115, - 352, - 166, - 750, - 171, - 761, - 270, - 879, - 264, - 903, - 367, - 744, 43, - 475, 14, - 653, 43, - 670, 11, - 448, - 59, - 521, - 126, - 119, - 155, - 613, - 42, - 863, - 27, - 931, 136, - 483, 183, - 468, 55, - 298, 55, - 304, 313, - 609, 313, - 720, 322, - 167, 100, - 541, - 3, - 119, - 111, - 187, 233, - 236, 260, - 234, 26, - 165, 134, - 45, - 40, - 549, 360, - 203, 378, - 388, 450, - 383, 275, 20, 182, - 103, 246, - 111, 431, 37, 462, - 146, 487, - 157, - 284, - 59, 503, - 184, 24, 53, - 3, 54, 122, 259, 333, 66, 484, 104, 436, 68, 195, 116, 190, 206, 269, - 9, 482, 352, 382, 285, 399, 277, 452, 256, 69, 186, 13, 297, - 13, 259, - 95, 30, 56, 394, 196, 425, 205, 456, 281, 577, 15, 191, 375, 290, 407, 576, - 56, 227, 544, 405, 0, 549, - 92, 528, - 229, 351, - 245, 338, - 362, 435, 167, 527, - 75, 302, 91, 824, 129, 599, 496, 679, 186, 749, 153, 737, - 281, 600, - 348, 615, - 236, 769, 41, 881, 38, 890, - 220, 841, - 357, 883, - 393, 903, - 634, 474, - 444, 850, - 175, 678, - 493, 242, - 519, 785, - 714, 582, - 541, 366, - 543, 434, - 597, 500, - 765, 222, - 702, 917, - 743, 962, - 869, 501, - 899, 548, - 379, 200, - 435, 157, - 819, 214, - 861, 157, - 614, 40, - 632, 94, - 883, - 54, - 741, 516, - 501, 298, - 614, - 171, - 870, - 161, - 865, - 23, - 818, 93, - 1015, - 267, - 662, - 359, - 549, 2, - 442, - 121, - 377, 0, - 227, 33, - 414, - 126, - 129, 212, - 934, 34, - 1082, - 282, - 1119, - 268, - 710, - 825, - 420, - 191, - 1076, - 928, - 917, - 93, - 628, - 358, 97, 7, - 206, - 393, - 101, 24, - 203, 38, - 168, 83, - 599, - 423, - 279, 426, - 700, 118, - 75, 206, - 981, - 673, - 680, 417, - 367, 37, - 279, 474, - 129, - 318, 319, 296, - 626, - 39, 343, 602, - 696, - 39, - 303, 940, 104, 233, - 380, 137, - 36, 269, - 75, - 214, 120, 43, - 529, - 477, 459, 164, - 202, - 229, - 49, - 167, 609, 792, 98, - 220, 915, 148, 293, 283, 869, 91, 575, 394, 326, - 78, 717, 67, 365, - 323, 616, - 36, 731, 27, 619, 238, 632, 273, 448, 99, 801, 476, 869, 273, 685, 64, 789, 72, 1021, 217, 793, 459, 734, 360, 646, 480, 360, 322, 429, 464, 638, 430, 756, 363, 1000, 404, 683, 528, 602, 615, 655, 413, 946, 687, 937, 602, 904, 604, 555, 737, 786, 662, 467, 654, 362, 589, 929, 710, 498, 478, 415, 420, 693, 883, 813, 683, 781, 925, 913, 939, 726, 732, 491, 853, 531, 948, 734, 963, 315, 808, 761, 755, 1144, 760, 655, 1076, 826, 1057, 1091, 838, 1003, 808, 1047, 1133, 659, 1101, 992, 1050, 1074, 1075, 971, 694, 1226, 1054, 571, 841, 884, 1404, 1379, 1096, 1080, 861, 1231, 735, 1284, 760, 1272, 991, 1367, 1053, 1257, 700, 1050, 534, 988, 453, 1264, 599, 1140, 679, 1621, 815, 1384, 521, 1317, 393, 1564, 805, 1448, 686, 1068, 648, 875, 307, 1083, 361, 1047, 317, 1417, 964, 675, 571, 1152, 79, 1114, - 47, 1530, 311, 1721, 314, 1166, 689, 514, - 94, 349, 282, 1412, 328, 1025, 487, - 65, 57, 805, 970, 36, 62, 769, - 263, 791, - 346, 637, 699, - 137, 620, 534, 541, - 735, 194, 711, 300, - 268, - 863, 926, 769, - 708, - 428, 506, 174, - 892, - 630, 435, 547, - 1435, - 258, 621, 471, - 1018, - 1368, - 393, 521, - 920, - 686, - 25, 20, - 982, - 1156, 340, 9, - 1558, - 1135, - 352, 48, - 1579, - 402, - 887, 6, - 1156, - 888, - 548, - 352, - 1643, - 1168, - 159, 610, - 2024, - 963, - 225, 193, - 1656, - 1960, - 245, - 493, - 964, - 1680, - 936, - 635, - 1299, - 1744, - 1388, - 604, - 1540, - 835, - 1397, - 135, - 1588, - 290, - 1670, - 712, - 2011, - 1632, - 1663, - 27, - 2258, - 811, - 1157, 184, - 1265, 189, - 1367, 586, - 2011, 201, - 790, 712, - 1210, 3, - 1033, 808, - 1251, 830, - 111, 635, - 1636, 447, - 463, - 949, - 445, - 928, - 504, - 1162, - 501, - 1211, 144, - 351, - 372, - 1052, - 283, - 1059, - 279, - 1123, - 575, - 1438, - 587, - 1614, - 935, - 984, 229, 690, - 921, - 719, - 403, 1362, - 685, - 465, 874, 397, - 509, - 46, 317, 1334, - 485, 456, 813, 439, - 411, 339, 898, 1067, - 425, 46, 1441, 497, - 909, - 800, 1465, 1046, - 254, - 321, 1430, 1165, 68, 350, 1034, 666, 370, 11, 1311, 790, 143, 232, 1041, 1562, - 114, 663, 1616, 1078, 454, 579, 1275, 1040, - 76, 909, 752, 1067, 153, 512, 348, 1214, 614, 385, 1843, 808, 269, 1034, 203, 1086, 652, 1017, 1783, 1130, 429, 1327, 387, 1384, - 49, 1183, - 72, 1215, - 416, 1001, 544, 1749, - 352, 1223, - 502, 1199, - 589, 569, - 227, 1630, - 142, 1578, - 230, 1715, - 714, 1288, - 838, 1398, 1131, 1357, - 208, 1232, 437, 965, - 929, 818, 811, 1410, 859, 1507, 164, 1212, 1387, 1793, 484, 1874, 456, 2063, 996, 1170, 1326, 1402, 1316, 1360, 1135, 1262, 1234, 1618, 1361, 1768, 1421, 1227, 1584, 1347, 854, 672, 1685, 1566, 1139, 1270, 2016, 1825, 1773, 1581, 1532, 1460, 1487, 946, 1659, 1021, 1744, 1212, 1392, 977, 1772, 1161, 1826, 1164, 1718, 1429, 1973, 1591, 1185, 864, 2132, 1061, 1799, 814, 1838, 757, 2104, 1315, 2054, 1258, 2113, 915, 2331, 930, 1467, 1147, 2590, 1439, 2245, 1744, 2090, 1620, 2358, 1454, 2666, 1506, 1876, 1837, 2070, 1975, 1739, 1577, 682, 1289, 1584, 2045, 1454, 2098, 2498, 2004, 2711, 2066, 726, 1588, 2756, 2336, 228, 847, 2456, 1659, 36, 301, 1942, 1957, - 446, - 96, 2154, 1396, 1533, 1101, 14, 608, - 923, - 732, 1383, 1982, 1345, 952, - 680, 321, 1281, 1268, - 1594, 365, 941, 946, - 1737, - 822, 2374, 2787, 1821, 2788 }; /* 3rd LSF quantizer (MR122) */ static const Word32 dico3_lsf_5[DICO3_SIZE_5 * 4] = { - 1812, - 2275, - 1879, - 2537, - 1640, - 1848, - 1695, - 2004, - 1220, - 1912, - 1221, - 2106, - 1559, - 1588, - 1573, - 1556, - 1195, - 1615, - 1224, - 1727, - 1359, - 1151, - 1616, - 1948, - 1274, - 1391, - 1305, - 1403, - 1607, - 1179, - 1676, - 1311, - 1443, - 1478, - 1367, - 898, - 1256, - 1059, - 1331, - 1134, - 982, - 1133, - 1149, - 1504, - 1080, - 1308, - 1020, - 1183, - 980, - 1486, - 967, - 1495, - 988, - 922, - 1047, - 1077, - 838, - 1179, - 858, - 1222, - 1131, - 1041, - 1064, - 767, - 872, - 1157, - 701, - 880, - 706, - 906, - 774, - 1016, - 578, - 1080, - 801, - 1478, - 591, - 1111, - 592, - 1146, - 713, - 1388, - 640, - 1376, - 597, - 1059, - 416, - 903, - 686, - 832, - 661, - 708, - 444, - 868, - 490, - 921, - 374, - 776, - 619, - 1170, - 585, - 549, - 769, - 795, - 435, - 659, - 530, - 741, - 498, - 837, - 357, - 597, - 279, - 871, - 243, - 887, - 282, - 665, - 280, - 667, - 165, - 560, - 394, - 903, - 362, - 410, - 448, - 583, - 409, - 574, - 313, - 357, - 637, - 548, - 570, - 436, - 896, - 504, - 382, - 757, - 58, - 481, - 165, - 618, - 191, - 374, - 234, - 382, - 222, - 683, - 25, - 480, - 418, - 359, - 730, - 353, - 324, - 157, - 432, - 322, - 394, - 303, - 284, - 104, - 601, - 289, - 556, - 196, - 588, - 150, - 659, - 608, - 473, - 24, - 68, - 448, - 474, - 8, - 506, - 45, - 748, - 184, - 844, - 252, - 901, - 91, - 584, - 97, - 652, 138, - 764, - 131, - 678, - 12, - 670, 165, - 259, - 3, - 840, - 107, - 909, 37, - 992, 44, - 854, - 415, - 839, 13, - 1001, - 271, - 1026, - 309, - 798, - 478, - 832, - 488, - 943, 168, - 1112, - 387, - 1185, - 101, - 1183, - 40, - 941, - 316, - 1030, - 770, - 1044, - 625, - 1081, - 538, - 1224, - 299, - 1312, - 436, - 1197, - 663, - 1167, - 161, - 1216, - 690, - 1237, - 831, - 1432, - 720, - 1403, - 493, - 898, - 740, - 922, - 801, - 1102, - 402, - 1579, - 964, - 1061, - 638, - 1269, - 1438, - 1499, - 934, - 1502, - 895, - 1598, - 564, - 1723, - 717, - 606, - 597, - 1166, - 1085, - 1369, - 468, - 1946, - 1493, - 1838, - 953, - 1932, - 931, - 1499, - 188, - 1635, - 421, - 1457, - 338, - 1448, - 22, - 1942, - 422, - 2006, - 249, - 496, - 114, - 1910, - 755, - 1289, 174, - 1451, - 109, - 482, - 257, - 1221, - 508, - 1617, 151, - 1694, 208, - 654, 107, - 1651, 29, - 1141, 279, - 1215, 306, - 1228, - 506, - 730, - 175, - 1236, - 101, - 969, 551, - 870, 278, - 823, 315, - 563, 376, - 1051, 228, - 507, 280, - 599, 281, - 758, 253, - 305, 379, - 755, - 134, - 611, 660, - 824, 536, - 817, 646, - 413, 49, - 341, 177, - 453, 526, - 482, 589, - 71, 339, - 657, 264, - 244, 295, - 237, 315, - 387, 569, - 506, - 9, - 377, 14, - 160, 661, - 216, 40, - 308, - 46, 95, 214, - 242, 167, - 86, 192, - 56, 27, - 76, 31, 36, 309, - 106, - 182, - 113, 74, - 441, - 22, 23, 139, 81, - 11, 44, 15, - 87, - 137, - 118, - 207, - 158, - 58, 272, - 92, - 156, - 441, 8, - 136, 128, - 221, 101, - 218, 40, - 197, - 76, - 456, 9, - 445, 33, - 423, 226, 60, 73, - 222, 156, - 399, 280, - 318, 245, - 341, 166, - 499, 339, - 190, 327, - 219, 325, - 137, - 89, - 596, 100, - 627, 144, - 677, 487, 28, 252, - 391, 214, - 41, 282, - 28, 99, - 286, 331, 49, 459, - 388, 565, - 369, 436, 28, 336, - 9, 397, - 167, 618, 34, 596, - 17, 561, - 140, 299, 79, 522, 125, 203, 2, 244, 288, 255, 211, 175, 82, 596, 187, 517, 108, 381, 255, 365, 297, 497, 352, 327, - 82, 25, 210, 371, 245, 261, 3, 545, 449, 140, 294, 44, 295, 212, 347, 244, 494, 331, 528, 201, 307, 349, 411, 613, 284, 614, 413, 464, 322, 624, 397, 97, 200, - 160, 384, 149, 362, 495, 525, 269, 585, 33, 491, - 121, 433, 427, 611, 498, 516, 171, 443, 497, 666, 440, 275, 566, 575, 146, 639, 155, 670, - 33, 173, 212, 696, - 166, 601, - 191, 695, - 489, 503, 175, 742, 214, 476, 372, 1083, 578, 530, 586, 777, 425, 874, 315, 841, 374, 848, - 165, 565, 35, 991, - 39, 1062, 329, 712, 786, 840, 645, 795, 661, 676, 571, 918, 632, 1079, 673, 817, 318, 388, 874, 1012, 564, 848, 880, 620, 557, 479, 671, 453, 692, 468, 840, 642, 844, 645, 506, 428, 897, 567, 837, 387, 962, 499, 691, 561, 939, 926, 783, 296, 790, 268, 1028, 530, 874, 329, 548, 143, 675, 291, 503, 66, 1041, 359, 786, 97, 805, 33, 837, 470, 511, 49, 1092, 327, 1174, 323, 3, 242, 872, 474, 689, 429, 1329, 678, 1042, 620, 1109, 664, 321, 193, 889, 950, 1153, 874, 893, 635, 877, 862, 948, 913, 1293, 665, 1320, 639, 997, 793, 1402, 1030, 1176, 1012, 1110, 959, 1410, 925, 1403, 915, 543, 862, 1116, 1222, 835, 1190, 835, 1190, 959, 1148, 1147, 1376, 1300, 1193, 1415, 1231, 1335, 1341, 746, 1092, 1711, 1283, 1389, 1073, 1334, 1566, 1153, 1475, 1645, 1137, 1825, 1220, 1056, 1382, 1521, 1730, 1632, 1545, 1620, 1542, 855, 1596, 865, 1667, 693, 885, 1716, 1519, 1167, 1296, 2209, 1760, 1952, 1493, 2020, 1482, 1534, 1866, 1694, 2008, 1566, 748, 1761, 825, 294, 1392, 1084, 2058, 621, 1315, 365, 1287, 198, 1028, 488, 1408, 249, 403, 1014, 1561, 324, 363, 1645, 1044, 193, 367, 2034, 1859, - 251, 579, 750, 994, - 243, 30, 1325, 879, - 28, - 169, 624, 917, - 453, 159, 186, 1370, - 614, 6, 537, 392, - 94, - 291, 781, 229, - 128, - 298, 245, 491, - 701, - 648, 972, 789, - 501, - 640, 178, 255, - 365, - 390, - 255, 317, - 958, - 294, - 191, 228, - 775, - 447, 157, - 237, - 657, - 720, - 407, 92, - 117, - 611, 334, - 230, - 679, - 1084, - 144, - 317, - 901, - 861, - 738, - 360, - 85, - 727, - 90, - 787, 100, - 22, - 391, - 263, - 56, - 73, - 337, - 754, 5, - 189, - 706, - 624, 89, - 344, - 135, - 1113, - 353, - 237, - 684, - 1135, - 275, - 1102, - 269, - 1203, 152, 145, - 722, - 1232, 49, 80, - 1248, - 776, - 248, 391, - 732, - 547, 469, 218, - 255, - 864, 69, 366, - 166, - 485, - 688, 191, - 1212, - 1196, - 170, - 169, - 1308, - 1631, 321, 470, - 1419, - 1243, - 64, 272, - 1361, - 248, 492, 565, - 721, - 609, 195, 485, - 573, - 133, 427, 202, - 171, - 118, 199, 575, 2, - 31, 694, 755, - 1366, - 39, 552, 557, - 489, 271, 680, 537, 13, - 453, 855, 954, - 133, - 52, - 81, 738, - 1169, 637, 1055, 1059, - 95, 676, 1259, 1081, 489, 305, - 449, 954, - 534, 996, - 969, 866, - 1058, 1059, - 1294, 618, - 1416, 617, - 458, 1366, - 159, 1821, - 774, - 528, - 14, 1110, - 1202, - 901, - 772, 433, - 1256, - 1255, - 1011, - 302, - 602, - 585, - 759, - 1618, - 760, - 1549, - 840, - 1921, - 816, - 539, - 1769, - 2235, - 227, - 36, - 2034, - 1831, - 2107, - 1126, - 2471, - 1816, - 1470, 252, - 2701, - 415, - 571, - 467, 1509, 1554, 2180, 1975, 2326, 2020 }; /* 4th LSF quantizer (MR122) */ static const Word32 dico4_lsf_5[DICO4_SIZE_5 * 4] = { - 1857, - 1681, - 1857, - 1755, - 2056, - 1150, - 2134, - 1654, - 1619, - 1099, - 1704, - 1131, - 1345, - 1608, - 1359, - 1638, - 1338, - 1293, - 1325, - 1265, - 1664, - 1649, - 1487, - 851, - 1346, - 1832, - 1413, - 2188, - 1282, - 681, - 1785, - 1649, - 966, - 1082, - 1183, - 1676, - 1054, - 1073, - 1142, - 1158, - 1207, - 744, - 1274, - 997, - 934, - 1383, - 927, - 1416, - 1010, - 1305, - 783, - 955, - 1049, - 900, - 993, - 817, - 737, - 823, - 972, - 1189, - 738, - 1094, - 738, - 1154, - 784, - 801, - 810, - 786, - 892, - 520, - 1000, - 818, - 644, - 965, - 577, - 882, - 541, - 694, - 671, - 917, - 595, - 642, - 646, - 615, - 956, - 621, - 925, - 515, - 727, - 483, - 815, - 485, - 840, - 578, - 440, - 713, - 578, - 325, - 657, - 670, - 386, - 570, - 441, - 666, - 514, - 787, - 392, - 529, - 522, - 453, - 487, - 423, - 616, - 585, - 617, - 157, - 662, - 268, - 680, - 348, - 322, - 323, - 632, - 444, - 304, - 430, - 332, - 458, - 277, - 468, - 659, - 793, - 319, - 636, - 227, - 554, - 373, - 347, - 334, - 210, - 456, - 192, - 530, - 242, - 216, - 198, - 366, - 370, - 338, - 161, - 409, - 748, - 107, - 380, - 294, - 643, - 223, - 665, - 234, - 741, - 141, - 496, - 130, - 510, - 139, - 327, - 172, - 305, - 306, - 580, - 164, - 263, - 262, - 172, - 67, - 402, 31, - 366, - 10, - 436, - 86, - 527, 71, - 377, - 22, - 609, - 12, - 678, - 67, - 319, 63, - 191, 35, - 181, - 39, - 242, 126, - 167, - 140, - 544, 155, - 297, 174, - 297, 38, - 8, 117, - 380, 197, - 452, 240, - 522, 223, - 103, 110, - 187, 87, - 155, 169, - 47, 157, 26, - 83, - 100, 128, 80, 209, - 62, 6, 7, 22, 5, 318, - 20, 248, - 45, - 200, - 63, 156, - 69, 250, - 183, 369, - 126, - 113, - 76, - 142, - 122, - 64, - 254, - 31, 35, - 177, - 71, - 7, 171, 93, 27, 108, 212, - 330, - 209, - 123, - 70, - 279, 95, - 96, 20, - 188, - 61, - 314, 87, - 300, - 78, - 354, - 134, 11, 122, - 140, 122, - 275, 152, - 293, 140, - 82, 138, - 321, - 111, - 480, - 156, - 359, 76, - 254, - 40, - 635, - 96, - 522, 79, - 507, 8, - 268, 303, - 539, 68, - 446, 61, - 522, 306, 111, 189, - 435, 122, - 379, 166, - 571, - 398, - 632, - 74, - 747, - 95, - 455, 194, - 952, 83, - 798, 192, - 755, 192, - 781, - 162, - 619, 234, - 663, - 297, - 488, - 109, - 964, - 132, - 838, - 68, - 843, 58, - 1112, - 86, - 805, - 299, - 944, - 253, - 778, - 50, - 965, - 549, - 352, - 98, - 992, - 343, - 1117, - 315, - 1117, - 307, - 1155, - 374, - 637, - 230, - 1166, - 43, - 1299, - 100, - 925, - 393, - 1274, - 600, - 689, - 130, - 1479, - 312, - 1321, - 254, - 1464, - 442, - 1292, - 613, - 1261, - 503, - 1501, - 368, - 1322, 26, - 1432, - 66, - 1743, - 161, - 1644, - 467, - 1760, - 548, - 1393, - 568, - 1556, - 871, - 1495, - 1034, - 1387, - 571, - 1917, - 528, - 1783, - 123, - 1897, - 231, - 2054, - 323, - 2052, - 906, - 1976, - 567, - 1917, - 620, - 2047, - 989, - 1077, - 370, - 2031, - 704, - 2355, - 749, - 2740, - 1089, - 1909, 159, - 2012, 248, - 626, - 123, - 2339, - 962, - 669, - 408, - 1379, - 1174, - 452, - 364, - 1044, - 735, - 132, 183, - 1620, - 752, - 547, - 307, - 777, - 1261, - 98, 41, - 880, - 1091, - 257, 97, - 1602, - 1833, 31, - 26, - 644, - 561, - 180, - 546, - 385, - 1095, - 410, - 802, - 414, - 827, - 457, - 970, - 490, - 1109, - 215, - 916, - 144, - 937, - 493, - 1269, - 517, - 1507, 181, 101, - 332, - 889, - 836, - 937, - 559, - 429, - 629, - 547, - 183, - 337, - 545, - 82, - 250, - 286, 5, - 132, - 348, - 252, - 293, - 472, - 158, 100, - 29, 197, - 236, - 424, - 861, - 213, - 140, - 7, - 427, - 443, 187, - 97, - 684, - 736, - 293, 258, - 368, - 152, - 150, 392, - 609, 175, - 142, 299, - 138, 152, - 119, 329, - 486, - 52, 293, 198, - 183, 117, 175, 331, - 58, - 274, 231, 300, - 288, 330, - 305, 372, - 111, 409, - 9, 423, 83, 256, 67, 367, - 19, 248, 91, 113, - 35, 406, - 191, 154, 238, 296, 5, 197, 141, 221, 313, 198, 211, 421, 244, 334, 88, 426, - 243, 454, 202, 552, - 5, 403, 291, 185, 219, 301, 251, 138, 128, 69, 197, 288, - 140, - 61, 188, 361, 197, 598, 442, 273, 290, 143, 472, 482, 157, 370, 415, 321, 372, 385, 402, 552, 155, 24, 550, 263, - 11, 21, 360, 227, 147, - 254, 424, 97, 366, - 13, 375, 141, 449, 232, 396, 507, 474, 272, 701, 324, 362, - 47, 587, 148, 543, 69, 400, - 51, 561, 59, 220, - 10, 352, 147, 206, 211, 653, 185, 563, 297, 565, 284, 594, 121, 766, 192, 398, 118, 642, 434, 233, 264, 481, 467, 129, - 165, 699, 239, 90, 26, 342, 474, - 55, 27, 388, 94, - 172, 0, 725, 379, - 60, 337, 370, 465, 95, 319, 806, 595, 78, 260, 497, 851, 210, 560, 458, 574, - 464, 202, 497, 625, - 202, 152, 48, 712, - 20, 566, 100, 715, 455, 468, 411, 605, 319, 646, 195, 615, 401, 538, 680, 739, 201, 667, 434, 954, 454, 425, 646, 491, 606, 681, 416, 508, 497, 822, 426, 815, 660, 647, 628, 716, 697, 466, 618, 457, 685, 460, 365, 309, 721, 567, 836, 601, 609, 300, 825, 459, 943, 687, 681, 533, 915, 598, 591, 243, 876, 451, 874, 420, 786, 317, 732, 220, 922, 317, 1108, 367, 531, 466, 1028, 649, 1053, 615, 1034, 553, 829, 602, 1021, 799, 927, 803, 878, 763, 799, 496, 1373, 773, 585, 770, 803, 930, 1099, 793, 1222, 862, 1209, 895, 1025, 727, 772, 845, 1172, 1115, 867, 1021, 830, 1013, 841, 910, 506, 703, 1239, 1077, 620, 819, 1196, 1083, 1155, 1081, 1142, 907, 1547, 1121, 1309, 648, 1343, 612, 1484, 988, 1479, 937, 985, 1328, 955, 1341, 429, 910, 841, 1338, 564, 1179, 412, 1156, 1427, 1320, 1434, 1330, 640, 760, 1726, 1410, 190, 555, 1073, 1005, 426, 257, 839, 980, 235, 231, 1520, 1167, 109, 293, 1014, 1569, 305, 142, 1148, 539, - 291, - 108, 1213, 972, 22, - 216, 667, 828, - 482, 438, 453, 1431, - 581, - 422, 789, 387, - 358, - 454, 174, 780, - 36, - 372, 390, - 134, - 629, 160, - 306, 751, - 1258, - 331, 177, 522, - 248, 574, - 251, 639, - 531, 407, - 596, 394, - 419, 789, - 617, 801, - 986, 399, - 857, 727, - 7, 518, - 703, 310, - 1143, - 24, - 1002, 287, - 960, 363, - 1299, 312, - 1534, 245, - 1557, 305, 28, 153, - 859, - 175, - 33, 332, - 1398, - 154, 212, 410, - 593, - 197, - 1092, - 704, - 904, - 65, 282, 367, - 918, - 686, 345, 93, - 258, - 357, 696, 644, - 693, - 28, 448, 493, - 273, 193, 527, 546, - 243, - 513, 384, - 136, 273, - 353, 512, - 142, 537, - 198, 941, 750, 83, 248, 578, 861, - 56, 592, 842, 44, 892, 24, 33, 890, - 16, 982, 831, 1398, 1535, 1898, 1716, 1376, 1948, 1465 }; /* 5th LSF quantizer (MR122) */ static const Word32 dico5_lsf_5[DICO5_SIZE_5 * 4] = { - 1002, - 929, - 1096, - 1203, - 641, - 931, - 604, - 961, - 779, - 673, - 835, - 788, - 416, - 664, - 458, - 766, - 652, - 521, - 662, - 495, - 1023, - 509, - 1023, - 428, - 444, - 552, - 368, - 449, - 479, - 211, - 1054, - 903, - 316, - 249, - 569, - 591, - 569, - 275, - 541, - 191, - 716, - 188, - 842, - 264, - 333, - 248, - 318, - 228, - 275, 1, - 567, - 228, - 115, - 221, - 238, - 374, - 197, - 507, - 222, - 579, - 258, - 432, - 61, - 244, - 345, 2, - 338, 39, - 215, - 169, - 58, 0, - 56, - 6, - 203, - 131, 1, - 186, - 5, - 211, 6, - 380, 11, - 418, - 116, 131, - 134, 113, 89, - 4, 71, - 2, - 19, - 192, 262, 24, 189, 151, - 133, - 109, 186, - 153, 166, - 219, 37, 139, 193, 171, 337, 124, 158, - 61, 141, 226, - 13, 190, 231, 34, 354, 109, 316, 201, 244, 164, 330, - 85, 390, - 84, 254, 327, 257, 335, 491, 147, 476, 105, 54, 77, 437, 370, 421, 314, 449, 342, 329, 126, 673, 292, 571, 388, 243, 193, 653, 320, 621, 280, 194, 380, 517, 581, 45, 323, 111, 422, 489, 395, 734, 534, 622, 546, 486, 502, 318, 572, 189, 550, 385, 422, - 157, 153, - 125, 382, - 197, 386, - 263, 334, 228, 697, - 188, 1, 51, 297, - 507, 213, - 376, 397, - 24, 255, - 547, 89, - 502, - 94, 387, 179, - 620, 68, - 684, 112, - 642, - 350, - 260, 172, - 438, - 324, 264, 648, - 964, - 4, - 1121, 7, - 134, 134, - 1133, - 306, 143, 96, - 420, - 497, - 1221, - 350, - 1527, - 685, - 161, 72, 873, 691, 732, 283, 921, 353, 334, 475, 1095, 821, 864, 524, 843, 497, 714, 711, 788, 750, 1076, 714, 1204, 753 }; /* Scaling factors for the lsp variability operation */ static const Word16 lsf_hist_mean_scale[M] = { 20000, 20000, 20000, 20000, 20000, 18000, 16384, 8192, 0, 0 }; /* * The tables contains the following data: * * g_pitch (Q14), * g_fac (Q12), (g_code = g_code0*g_fac), * qua_ener_MR122 (Q10), (log2(g_fac)) * qua_ener (Q10) (20*log10(g_fac)) * * The log2() and log10() values are calculated on the fixed point value * (g_fac Q12) and not on the original floating point value of g_fac * to make the quantizer/MA predictdor use corresponding values. */ #define MR475_VQ_SIZE 256 /* The table contains the following data: * * g_pitch(0) (Q14) for sub- * g_fac(0) (Q12) frame 0 and 2 * g_pitch(1) (Q14) for sub- * g_fac(2) (Q12) frame 1 and 3 * */ static const Word32 table_gain_MR475[MR475_VQ_SIZE * 4] = { /* * g_pit(0), * g_fac(0), * g_pit(1), * g_fac(1) */ 812, 128, 542, 140, 2873, 1135, 2266, 3402, 2067, 563, 12677, 647, 4132, 1798, 5601, 5285, 7689, 374, 3735, 441, 10912, 2638, 11807, 2494, 20490, 797, 5218, 675, 6724, 8354, 5282, 1696, 1488, 428, 5882, 452, 5332, 4072, 3583, 1268, 2469, 901, 15894, 1005, 14982, 3271, 10331, 4858, 3635, 2021, 2596, 835, 12360, 4892, 12206, 1704, 13432, 1604, 9118, 2341, 3968, 1538, 5479, 9936, 3795, 417, 1359, 414, 3640, 1569, 7995, 3541, 11405, 645, 8552, 635, 4056, 1377, 16608, 6124, 11420, 700, 2007, 607, 12415, 1578, 11119, 4654, 13680, 1708, 11990, 1229, 7996, 7297, 13231, 5715, 2428, 1159, 2073, 1941, 6218, 6121, 3546, 1804, 8925, 1802, 8679, 1580, 13935, 3576, 13313, 6237, 6142, 1130, 5994, 1734, 14141, 4662, 11271, 3321, 12226, 1551, 13931, 3015, 5081, 10464, 9444, 6706, 1689, 683, 1436, 1306, 7212, 3933, 4082, 2713, 7793, 704, 15070, 802, 6299, 5212, 4337, 5357, 6676, 541, 6062, 626, 13651, 3700, 11498, 2408, 16156, 716, 12177, 751, 8065, 11489, 6314, 2256, 4466, 496, 7293, 523, 10213, 3833, 8394, 3037, 8403, 966, 14228, 1880, 8703, 5409, 16395, 4863, 7420, 1979, 6089, 1230, 9371, 4398, 14558, 3363, 13559, 2873, 13163, 1465, 5534, 1678, 13138, 14771, 7338, 600, 1318, 548, 4252, 3539, 10044, 2364, 10587, 622, 13088, 669, 14126, 3526, 5039, 9784, 15338, 619, 3115, 590, 16442, 3013, 15542, 4168, 15537, 1611, 15405, 1228, 16023, 9299, 7534, 4976, 1990, 1213, 11447, 1157, 12512, 5519, 9475, 2644, 7716, 2034, 13280, 2239, 16011, 5093, 8066, 6761, 10083, 1413, 5002, 2347, 12523, 5975, 15126, 2899, 18264, 2289, 15827, 2527, 16265, 10254, 14651, 11319, 1797, 337, 3115, 397, 3510, 2928, 4592, 2670, 7519, 628, 11415, 656, 5946, 2435, 6544, 7367, 8238, 829, 4000, 863, 10032, 2492, 16057, 3551, 18204, 1054, 6103, 1454, 5884, 7900, 18752, 3468, 1864, 544, 9198, 683, 11623, 4160, 4594, 1644, 3158, 1157, 15953, 2560, 12349, 3733, 17420, 5260, 6106, 2004, 2917, 1742, 16467, 5257, 16787, 1680, 17205, 1759, 4773, 3231, 7386, 6035, 14342, 10012, 4035, 442, 4194, 458, 9214, 2242, 7427, 4217, 12860, 801, 11186, 825, 12648, 2084, 12956, 6554, 9505, 996, 6629, 985, 10537, 2502, 15289, 5006, 12602, 2055, 15484, 1653, 16194, 6921, 14231, 5790, 2626, 828, 5615, 1686, 13663, 5778, 3668, 1554, 11313, 2633, 9770, 1459, 14003, 4733, 15897, 6291, 6278, 1870, 7910, 2285, 16978, 4571, 16576, 3849, 15248, 2311, 16023, 3244, 14459, 17808, 11847, 2763, 1981, 1407, 1400, 876, 4335, 3547, 4391, 4210, 5405, 680, 17461, 781, 6501, 5118, 8091, 7677, 7355, 794, 8333, 1182, 15041, 3160, 14928, 3039, 20421, 880, 14545, 852, 12337, 14708, 6904, 1920, 4225, 933, 8218, 1087, 10659, 4084, 10082, 4533, 2735, 840, 20657, 1081, 16711, 5966, 15873, 4578, 10871, 2574, 3773, 1166, 14519, 4044, 20699, 2627, 15219, 2734, 15274, 2186, 6257, 3226, 13125, 19480, 7196, 930, 2462, 1618, 4515, 3092, 13852, 4277, 10460, 833, 17339, 810, 16891, 2289, 15546, 8217, 13603, 1684, 3197, 1834, 15948, 2820, 15812, 5327, 17006, 2438, 16788, 1326, 15671, 8156, 11726, 8556, 3762, 2053, 9563, 1317, 13561, 6790, 12227, 1936, 8180, 3550, 13287, 1778, 16299, 6599, 16291, 7758, 8521, 2551, 7225, 2645, 18269, 7489, 16885, 2248, 17882, 2884, 17265, 3328, 9417, 20162, 11042, 8320, 1286, 620, 1431, 583, 5993, 2289, 3978, 3626, 5144, 752, 13409, 830, 5553, 2860, 11764, 5908, 10737, 560, 5446, 564, 13321, 3008, 11946, 3683, 19887, 798, 9825, 728, 13663, 8748, 7391, 3053, 2515, 778, 6050, 833, 6469, 5074, 8305, 2463, 6141, 1865, 15308, 1262, 14408, 4547, 13663, 4515, 3137, 2983, 2479, 1259, 15088, 4647, 15382, 2607, 14492, 2392, 12462, 2537, 7539, 2949, 12909, 12060, 5468, 684, 3141, 722, 5081, 1274, 12732, 4200, 15302, 681, 7819, 592, 6534, 2021, 16478, 8737, 13364, 882, 5397, 899, 14656, 2178, 14741, 4227, 14270, 1298, 13929, 2029, 15477, 7482, 15815, 4572, 2521, 2013, 5062, 1804, 5159, 6582, 7130, 3597, 10920, 1611, 11729, 1708, 16903, 3455, 16268, 6640, 9306, 1007, 9369, 2106, 19182, 5037, 12441, 4269, 15919, 1332, 15357, 3512, 11898, 14141, 16101, 6854, 2010, 737, 3779, 861, 11454, 2880, 3564, 3540, 9057, 1241, 12391, 896, 8546, 4629, 11561, 5776, 8129, 589, 8218, 588, 18728, 3755, 12973, 3149, 15729, 758, 16634, 754, 15222, 11138, 15871, 2208, 4673, 610, 10218, 678, 15257, 4146, 5729, 3327, 8377, 1670, 19862, 2321, 15450, 5511, 14054, 5481, 5728, 2888, 7580, 1346, 14384, 5325, 16236, 3950, 15118, 3744, 15306, 1435, 14597, 4070, 12301, 15696, 7617, 1699, 2170, 884, 4459, 4567, 18094, 3306, 12742, 815, 14926, 907, 15016, 4281, 15518, 8368, 17994, 1087, 2358, 865, 16281, 3787, 15679, 4596, 16356, 1534, 16584, 2210, 16833, 9697, 15929, 4513, 3277, 1085, 9643, 2187, 11973, 6068, 9199, 4462, 8955, 1629, 10289, 3062, 16481, 5155, 15466, 7066, 13678, 2543, 5273, 2277, 16746, 6213, 16655, 3408, 20304, 3363, 18688, 1985, 14172, 12867, 15154, 15703, 4473, 1020, 1681, 886, 4311, 4301, 8952, 3657, 5893, 1147, 11647, 1452, 15886, 2227, 4582, 6644, 6929, 1205, 6220, 799, 12415, 3409, 15968, 3877, 19859, 2109, 9689, 2141, 14742, 8830, 14480, 2599, 1817, 1238, 7771, 813, 19079, 4410, 5554, 2064, 3687, 2844, 17435, 2256, 16697, 4486, 16199, 5388, 8028, 2763, 3405, 2119, 17426, 5477, 13698, 2786, 19879, 2720, 9098, 3880, 18172, 4833, 17336, 12207, 5116, 996, 4935, 988, 9888, 3081, 6014, 5371, 15881, 1667, 8405, 1183, 15087, 2366, 19777, 7002, 11963, 1562, 7279, 1128, 16859, 1532, 15762, 5381, 14708, 2065, 20105, 2155, 17158, 8245, 17911, 6318, 5467, 1504, 4100, 2574, 17421, 6810, 5673, 2888, 16636, 3382, 8975, 1831, 20159, 4737, 19550, 7294, 6658, 2781, 11472, 3321, 19397, 5054, 18878, 4722, 16439, 2373, 20430, 4386, 11353, 26526, 11593, 3068, 2866, 1566, 5108, 1070, 9614, 4915, 4939, 3536, 7541, 878, 20717, 851, 6938, 4395, 16799, 7733, 10137, 1019, 9845, 964, 15494, 3955, 15459, 3430, 18863, 982, 20120, 963, 16876, 12887, 14334, 4200, 6599, 1220, 9222, 814, 16942, 5134, 5661, 4898, 5488, 1798, 20258, 3962, 17005, 6178, 17929, 5929, 9365, 3420, 7474, 1971, 19537, 5177, 19003, 3006, 16454, 3788, 16070, 2367, 8664, 2743, 9445, 26358, 10856, 1287, 3555, 1009, 5606, 3622, 19453, 5512, 12453, 797, 20634, 911, 15427, 3066, 17037, 10275, 18883, 2633, 3913, 1268, 19519, 3371, 18052, 5230, 19291, 1678, 19508, 3172, 18072, 10754, 16625, 6845, 3134, 2298, 10869, 2437, 15580, 6913, 12597, 3381, 11116, 3297, 16762, 2424, 18853, 6715, 17171, 9887, 12743, 2605, 8937, 3140, 19033, 7764, 18347, 3880, 20475, 3682, 19602, 3380, 13044, 19373, 10526, 23124 }; /* table used in 'high' rates: MR67 MR74 */ #define VQ_SIZE_HIGHRATES 128 static const Word32 table_gain_highrates[VQ_SIZE_HIGHRATES * 4] = { /* * Note: every 4th value (qua_ener) contains the original values from IS641 * to ensure bit-exactness; however, they are not exactly the * rounded value of (20*log10(g_fac)) */ /* * g_pit, * g_fac, * qua_ener_MR122, * qua_ener */ 577, 662, - 2692, - 16214, 806, 1836, - 1185, - 7135, 3109, 1052, - 2008, - 12086, 4181, 1387, - 1600, - 9629, 2373, 1425, - 1560, - 9394, 3248, 1985, - 1070, - 6442, 1827, 2320, - 840, - 5056, 941, 3314, - 313, - 1885, 2351, 2977, - 471, - 2838, 3616, 2420, - 777, - 4681, 3451, 3096, - 414, - 2490, 2955, 4301, 72, 434, 1848, 4500, 139, 836, 3884, 5416, 413, 2484, 1187, 7210, 835, 5030, 3083, 9000, 1163, 7002, 7384, 883, - 2267, - 13647, 5962, 1506, - 1478, - 8900, 5155, 2134, - 963, - 5800, 7944, 2009, - 1052, - 6335, 6507, 2250, - 885, - 5327, 7670, 2752, - 588, - 3537, 5952, 3016, - 452, - 2724, 4898, 3764, - 125, - 751, 6989, 3588, - 196, - 1177, 8174, 3978, - 43, - 260, 6064, 4404, 107, 645, 7709, 5087, 320, 1928, 5523, 6021, 569, 3426, 7769, 7126, 818, 4926, 6060, 7938, 977, 5885, 5594, 11487, 1523, 9172, 10581, 1356, - 1633, - 9831, 9049, 1597, - 1391, - 8380, 9794, 2035, - 1033, - 6220, 8946, 2415, - 780, - 4700, 10296, 2584, - 681, - 4099, 9407, 2734, - 597, - 3595, 8700, 3218, - 356, - 2144, 9757, 3395, - 277, - 1669, 10177, 3892, - 75, - 454, 9170, 4528, 148, 891, 10152, 5004, 296, 1781, 9114, 5735, 497, 2993, 10500, 6266, 628, 3782, 10110, 7631, 919, 5534, 8844, 8727, 1117, 6728, 8956, 12496, 1648, 9921, 12924, 976, - 2119, - 12753, 11435, 1755, - 1252, - 7539, 12138, 2328, - 835, - 5024, 11388, 2368, - 810, - 4872, 10700, 3064, - 429, - 2580, 12332, 2861, - 530, - 3192, 11722, 3327, - 307, - 1848, 11270, 3700, - 150, - 904, 10861, 4413, 110, 663, 12082, 4533, 150, 902, 11283, 5205, 354, 2132, 11960, 6305, 637, 3837, 11167, 7534, 900, 5420, 12128, 8329, 1049, 6312, 10969, 10777, 1429, 8604, 10300, 17376, 2135, 12853, 13899, 1681, - 1316, - 7921, 12580, 2045, - 1026, - 6179, 13265, 2439, - 766, - 4610, 14033, 2989, - 465, - 2802, 13452, 3098, - 413, - 2482, 12396, 3658, - 167, - 1006, 13510, 3780, - 119, - 713, 12880, 4272, 62, 374, 13533, 4861, 253, 1523, 12667, 5457, 424, 2552, 13854, 6106, 590, 3551, 13031, 6483, 678, 4084, 13557, 7721, 937, 5639, 12957, 9311, 1213, 7304, 13714, 11551, 1532, 9221, 12591, 15206, 1938, 11667, 15113, 1540, - 1445, - 8700, 15072, 2333, - 832, - 5007, 14527, 2511, - 723, - 4352, 14692, 3199, - 365, - 2197, 15382, 3560, - 207, - 1247, 14133, 3960, - 50, - 300, 15102, 4236, 50, 298, 14332, 4824, 242, 1454, 14846, 5451, 422, 2542, 15306, 6083, 584, 3518, 14329, 6888, 768, 4623, 15060, 7689, 930, 5602, 14406, 9426, 1231, 7413, 15387, 9741, 1280, 7706, 14824, 14271, 1844, 11102, 13600, 24939, 2669, 16067, 16396, 1969, - 1082, - 6517, 16817, 2832, - 545, - 3283, 15713, 2843, - 539, - 3248, 16104, 3336, - 303, - 1825, 16384, 3963, - 49, - 294, 16940, 4579, 165, 992, 15711, 4599, 171, 1030, 16222, 5448, 421, 2537, 16832, 6382, 655, 3945, 15745, 7141, 821, 4944, 16326, 7469, 888, 5343, 16611, 8624, 1100, 6622, 17028, 10418, 1379, 8303, 15905, 11817, 1565, 9423, 16878, 14690, 1887, 11360, 16515, 20870, 2406, 14483, 18142, 2083, - 999, - 6013, 19401, 3178, - 375, - 2257, 17508, 3426, - 264, - 1589, 20054, 4027, - 25, - 151, 18069, 4249, 54, 326, 18952, 5066, 314, 1890, 17711, 5402, 409, 2461, 19835, 6192, 610, 3676, 17950, 7014, 795, 4784, 21318, 7877, 966, 5816, 17910, 9289, 1210, 7283, 19144, 9290, 1210, 7284, 20517, 11381, 1510, 9089, 18075, 14485, 1866, 11234, 19999, 17882, 2177, 13108, 18842, 32764, 3072, 18494 }; /* table used in 'low' rates: MR475, MR515, MR59 */ #define VQ_SIZE_LOWRATES 64 static const Word32 table_gain_lowrates[VQ_SIZE_LOWRATES * 4] = { /* * g_pit, * g_fac, * qua_ener_MR122, * qua_ener */ 10813, 28753, 2879, 17333, 20480, 2785, - 570, - 3431, 18841, 6594, 703, 4235, 6225, 7413, 876, 5276, 17203, 10444, 1383, 8325, 21626, 1269, - 1731, - 10422, 21135, 4423, 113, 683, 11304, 1556, - 1430, - 8609, 19005, 12820, 1686, 10148, 17367, 2498, - 731, - 4398, 17858, 4833, 244, 1472, 9994, 2498, - 731, - 4398, 17530, 7864, 964, 5802, 14254, 1884, - 1147, - 6907, 15892, 3153, - 387, - 2327, 6717, 1802, - 1213, - 7303, 18186, 20193, 2357, 14189, 18022, 3031, - 445, - 2678, 16711, 5857, 528, 3181, 8847, 4014, - 30, - 180, 15892, 8970, 1158, 6972, 18022, 1392, - 1594, - 9599, 16711, 4096, 0, 0, 8192, 655, - 2708, - 16305, 15237, 13926, 1808, 10884, 14254, 3112, - 406, - 2444, 14090, 4669, 193, 1165, 5406, 2703, - 614, - 3697, 13434, 6553, 694, 4180, 12451, 901, - 2237, - 13468, 12451, 2662, - 637, - 3833, 3768, 655, - 2708, - 16305, 14745, 23511, 2582, 15543, 19169, 2457, - 755, - 4546, 20152, 5079, 318, 1913, 6881, 4096, 0, 0, 20480, 8560, 1089, 6556, 19660, 737, - 2534, - 15255, 19005, 4259, 58, 347, 7864, 2088, - 995, - 5993, 11468, 12288, 1623, 9771, 15892, 1474, - 1510, - 9090, 15728, 4628, 180, 1086, 9175, 1433, - 1552, - 9341, 16056, 7004, 793, 4772, 14827, 737, - 2534, - 15255, 15073, 2252, - 884, - 5321, 5079, 1228, - 1780, - 10714, 13271, 17326, 2131, 12827, 16547, 2334, - 831, - 5002, 15073, 5816, 518, 3118, 3932, 3686, - 156, - 938, 14254, 8601, 1096, 6598, 16875, 778, - 2454, - 14774, 15073, 3809, - 107, - 646, 6062, 614, - 2804, - 16879, 9338, 9256, 1204, 7251, 13271, 1761, - 1247, - 7508, 13271, 3522, - 223, - 1343, 2457, 1966, - 1084, - 6529, 11468, 5529, 443, 2668, 10485, 737, - 2534, - 15255, 11632, 3194, - 367, - 2212, 1474, 778, - 2454, - 14774 }; static const Word32 inter6[61] = { 29443, 28346, 25207, 20449, 14701, 8693, 3143, - 1352, - 4402, - 5865, - 5850, - 4673, - 2783, - 672, 1211, 2536, 3130, 2991, 2259, 1170, 0, - 1001, - 1652, - 1868, - 1666, - 1147, - 464, 218, 756, 1060, 1099, 904, 550, 135, - 245, - 514, - 634, - 602, - 451, - 231, 0, 191, 308, 340, 296, 198, 78, - 36, - 120, - 163, - 165, - 132, - 79, - 19, 34, 73, 91, 89, 70, 38, 0 }; /* * window for non-MR122 modesm; uses 40 samples lookahead * used only in BuildCNParam */ static const Word32 window_200_40[L_WINDOW] = { 2621, 2623, 2629, 2638, 2651, 2668, 2689, 2713, 2741, 2772, 2808, 2847, 2890, 2936, 2986, 3040, 3097, 3158, 3223, 3291, 3363, 3438, 3517, 3599, 3685, 3774, 3867, 3963, 4063, 4166, 4272, 4382, 4495, 4611, 4731, 4853, 4979, 5108, 5240, 5376, 5514, 5655, 5800, 5947, 6097, 6250, 6406, 6565, 6726, 6890, 7057, 7227, 7399, 7573, 7750, 7930, 8112, 8296, 8483, 8672, 8863, 9057, 9252, 9450, 9650, 9852, 10055, 10261, 10468, 10677, 10888, 11101, 11315, 11531, 11748, 11967, 12187, 12409, 12632, 12856, 13082, 13308, 13536, 13764, 13994, 14225, 14456, 14688, 14921, 15155, 15389, 15624, 15859, 16095, 16331, 16568, 16805, 17042, 17279, 17516, 17754, 17991, 18228, 18465, 18702, 18939, 19175, 19411, 19647, 19882, 20117, 20350, 20584, 20816, 21048, 21279, 21509, 21738, 21967, 22194, 22420, 22644, 22868, 23090, 23311, 23531, 23749, 23965, 24181, 24394, 24606, 24816, 25024, 25231, 25435, 25638, 25839, 26037, 26234, 26428, 26621, 26811, 26999, 27184, 27368, 27548, 27727, 27903, 28076, 28247, 28415, 28581, 28743, 28903, 29061, 29215, 29367, 29515, 29661, 29804, 29944, 30081, 30214, 30345, 30472, 30597, 30718, 30836, 30950, 31062, 31170, 31274, 31376, 31474, 31568, 31659, 31747, 31831, 31911, 31988, 32062, 32132, 32198, 32261, 32320, 32376, 32428, 32476, 32521, 32561, 32599, 32632, 32662, 32688, 32711, 32729, 32744, 32755, 32763, 32767, 32767, 32741, 32665, 32537, 32359, 32129, 31850, 31521, 31143, 30716, 30242, 29720, 29151, 28538, 27879, 27177, 26433, 25647, 24821, 23957, 23055, 22117, 21145, 20139, 19102, 18036, 16941, 15820, 14674, 13505, 12315, 11106, 9879, 8637, 7381, 6114, 4838, 3554, 2264, 971}; /* comparision optimization tables */ /* definition of bad speech */ static const UWord8 table_speech_bad[9] = {0, 0, 1, 1, 0, 0, 0, 1, 0}; static const UWord8 table_SID[9] = {0, 0, 0, 0, 1, 1, 1, 0, 0}; static const UWord8 table_DTX[9] = {0, 0, 0, 0, 1, 1, 1, 1, 0}; static const UWord8 table_mute[9] = {0, 0, 0, 0, 1, 0, 1, 1, 0}; /* track start positions for fixed codebook routines */ static const Word8 startPos[16] = { 0, 2, 0, 3, 0, 2, 0, 3, 1, 3, 2, 4, 1, 4, 1, 4 }; #endif h323plus/plugins/audio/gsm-amr/src/encoder.c0000644000175000017500000001403611341106247017611 0ustar markmark/* * =================================================================== * TS 26.104 * REL-5 V5.4.0 2004-03 * REL-6 V6.1.0 2004-03 * 3GPP AMR Floating-point Speech Codec * =================================================================== * */ /* * encoder.c * * * Project: * AMR Floating-Point Codec * * Contains: * Speech encoder main program * */ #include #include #include #include #include "typedef.h" #include "interf_enc.h" #ifndef ETSI #ifndef IF2 #define AMR_MAGIC_NUMBER "#!AMR\n" #endif #endif static const short modeConv[]={ 475, 515, 59, 67, 74, 795, 102, 122}; static void Usage(char* argv[]) { fprintf (stderr, "Usage of %s:\n\n" "[-dtx] mode speech_file bitstream_file \n\n" "or \n\n" "[-dtx] -modefile=mode_file speech_file bitstream_file \n\n\n" "mode = MR475, MR515, MR59, MR67, MR74, MR795, MR102, MR122 \n\n\n", argv[0]); } void Copyright(void){ fprintf (stderr, "===================================================================\n" " TS 26.104 \n" " REL-5 V5.4.0 2004-03 \n" " REL-6 V6.1.0 2004-03 \n" " 3GPP AMR Floating-point Speech Encoder \n" "===================================================================\n" ); } /* * main * * * Function: * Speech encoder main program * * Usage: encoder speech_file bitstream_file mode dtx mode_file * * Format for speech_file: * Speech is read from a binary file of 16 bits data. * * Format for ETSI bitstream file: * 1 word (2-byte) for the TX frame type * 244 words (2-byte) containing 244 bits. * Bit 0 = 0x0000 and Bit 1 = 0x0001 * 1 word (2-byte) for the mode indication * 4 words for future use, currently written as zero * * Format for 3GPP bitstream file: * Holds mode information and bits packed to octets. * Size is from 1 byte to 31 bytes. * * ETSI bitstream file format is defined using ETSI as preprocessor * definition * * mode : MR475, MR515, MR59, MR67, MR74, MR795, MR102, MR122 * mode_file : reads mode information from a file * Returns: * 0 */ int main (int argc, char * argv[]){ /* file strucrures */ FILE * file_speech = NULL; FILE * file_encoded = NULL; FILE * file_mode = NULL; /* input speech vector */ short speech[160]; /* counters */ int byte_counter, frames = 0, bytes = 0; /* pointer to encoder state structure */ int *enstate; /* requested mode */ enum Mode req_mode = MR122; int dtx = 0; /* temporary variables */ char mode_string[9]; long mode_tmp; /* bitstream filetype */ #ifndef ETSI unsigned char serial_data[32]; #else short serial_data[250] = {0}; #endif /* Process command line options */ if ((argc == 5) || (argc == 4)){ file_encoded = fopen(argv[argc - 1], "wb"); if (file_encoded == NULL){ Usage(argv); return 1; } file_speech = fopen(argv[argc - 2], "rb"); if (file_speech == NULL){ fclose(file_encoded); Usage(argv); return 1; } if (strncmp(argv[argc - 3], "-modefile=", 10) == 0){ file_mode = fopen(&argv[argc - 3][10], "rt"); if (file_mode == NULL){ Usage(argv); fclose(file_speech); fclose(file_encoded); return 1; } } else { mode_tmp = strtol(&argv[argc - 3][2], NULL, 0); for (req_mode = 0; req_mode < 8; req_mode++){ if (mode_tmp == modeConv[req_mode]) break; } if (req_mode == 8){ Usage(argv); fclose(file_speech); fclose(file_encoded); if (file_mode != NULL) fclose(file_mode); return 1; } } if (argc == 5){ if ((strcmp(argv[1], "-dtx") != 0)){ Usage(argv); fclose(file_speech); fclose(file_encoded); if (file_mode != NULL){ fclose(file_mode); } return 1; } else { dtx = 1; } } } else { Usage(argv); return 1; } enstate = Encoder_Interface_init(dtx); Copyright(); #ifndef VAD2 fprintf( stderr, "%s\n", "Code compiled with VAD option: VAD1"); #else fprintf( stderr, "%s\n", "Code compiled with VAD option: VAD2"); #endif #ifndef ETSI #ifndef IF2 /* write magic number to indicate single channel AMR file storage format */ bytes = fwrite(AMR_MAGIC_NUMBER, sizeof(char), strlen(AMR_MAGIC_NUMBER), file_encoded); #endif #endif /* read file */ while (fread( speech, sizeof (Word16), 160, file_speech ) > 0) { /* read mode */ if (file_mode != NULL){ req_mode = 8; if (fscanf(file_mode, "%9s\n", mode_string) != EOF) { mode_tmp = strtol(&mode_string[2], NULL, 0); for (req_mode = 0; req_mode < 8; req_mode++){ if (mode_tmp == modeConv[req_mode]){ break; } } } if (req_mode == 8){ break; } } frames ++; /* call encoder */ byte_counter = Encoder_Interface_Encode(enstate, req_mode, speech, serial_data, 0); bytes += byte_counter; fwrite(serial_data, sizeof (UWord8), byte_counter, file_encoded ); fflush(file_encoded); } Encoder_Interface_exit(enstate); #ifndef ETSI #ifdef IF2 fprintf ( stderr, "\n%s%i%s%i%s\n", "Frame structure AMR IF2: ", frames, " frames, ", bytes, " bytes."); #else fprintf ( stderr, "\n%s%i%s%i%s\n", "Frame structure AMR MIME file storage format: ", frames, " frames, ", bytes, " bytes."); #endif #else fprintf ( stderr, "\n%s%i%s\n", "Frame structure AMR ETSI: ", frames, " frames. "); #endif fclose(file_speech); fclose(file_encoded); if (file_mode != NULL) fclose(file_mode); return 0; } h323plus/plugins/audio/gsm-amr/amrcodec.c0000644000175000017500000004075211341106247017164 0ustar markmark/* * RFC3267/RFC4867 GSM-AMR Plugin codec for OpenH323/OPAL * * Copyright (C) 2004 MX Telecom Ltd. * * $Revision: 1.1 $ * $Author: shorne $ * $Date: 2010/02/24 02:19:19 $ */ #define _CRT_NONSTDC_NO_DEPRECATE 1 #define _CRT_SECURE_NO_WARNINGS 1 #include #include #include #ifndef PLUGIN_CODEC_DLL_EXPORTS #include "plugin-config.h" #endif #include #include "src/interf_enc.h" #include "src/interf_dec.h" #include "src/interf_rom.h" #include "src/rom_dec.h" #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE (!FALSE) #endif #if defined(_WIN32) || defined(_WIN32_WCE) #define STRCMPI _strcmpi #else #define STRCMPI strcasecmp #endif /*Disable some warnings on VC++*/ #ifdef _MSC_VER #pragma warning(disable : 4100) #endif /*************************************************************************** * * This plugin implements an interface to the GSM-AMR codec for OpenH323 (H.245 Annex I) * This should not be confused with GSM-AMR-NB (H.245 Annex R) * * The amr codec itself is not distributed with this plugin. See amrcodec.txt * in the src subdirectory of the plugin source. * * This code can currently only handle one frame per packet due to the RFC3267 * packetisation method which is ... difficult ... with the current OPAL plug in * architecture. So make sure "Rx Frames Per Packet" doesn;t change till it's fixed! * **************************************************************************/ /* generic parameters; see H.245 Annex I */ enum { H245_AMR_MAXAL_SDUFRAMES = 0 | PluginCodec_H245_Collapsing | PluginCodec_H245_TCS | PluginCodec_H245_OLC, H245_AMR_BITRATE = 1 | PluginCodec_H245_NonCollapsing | PluginCodec_H245_ReqMode, H245_AMR_GSMAMRCOMFORTNOISE = 2 | PluginCodec_H245_Collapsing | PluginCodec_H245_ReqMode | PluginCodec_H245_OLC, H245_AMR_GSMEFRCOMFORTNOISE = 3 | PluginCodec_H245_Collapsing | PluginCodec_H245_ReqMode | PluginCodec_H245_TCS | PluginCodec_H245_OLC, H245_AMR_IS_641COMFORTNOISE = 4 | PluginCodec_H245_Collapsing | PluginCodec_H245_ReqMode | PluginCodec_H245_TCS | PluginCodec_H245_OLC, H245_AMR_PDCEFRCOMFORTNOISE = 5 | PluginCodec_H245_Collapsing | PluginCodec_H245_ReqMode | PluginCodec_H245_TCS | PluginCodec_H245_OLC }; /* values of the bit rate parameter */ enum { AMR_BITRATE_475 = 0, AMR_BITRATE_515, AMR_BITRATE_590, AMR_BITRATE_670, AMR_BITRATE_740, AMR_BITRATE_795, AMR_BITRATE_1020, AMR_BITRATE_1220, AMR_BITRATE_CN, AMR_BITRATE_EFR, AMR_BITRATE_IS641, AMR_BITRATE_PDCEFR, AMR_BITRATE_DTX = 15 }; // this is what we hand back when we are asked to create an encoder typedef struct { void * encoder_state; // Encoder interface's opaque state unsigned mode; // current mode int vad; // silence suppression } AmrEncoderContext; ///////////////////////////////////////////////////////////////////////////// static void * amr_create_encoder(const struct PluginCodec_Definition * codec) { AmrEncoderContext * amr = malloc(sizeof(AmrEncoderContext)); if (amr == NULL ) return NULL; amr->encoder_state = Encoder_Interface_init(amr->vad); if (amr->encoder_state == NULL ) { free(amr); return NULL; } amr->mode = AMR_BITRATE_1220; // start off in mode 12.2kbps mode amr->vad = TRUE; return amr; } static void * amr_create_decoder(const struct PluginCodec_Definition * codec) { return Decoder_Interface_init(); } static void amr_destroy_encoder(const struct PluginCodec_Definition * codec, void * context) { AmrEncoderContext * amr = (AmrEncoderContext *)context; Encoder_Interface_exit(amr->encoder_state); free(amr); } static void amr_destroy_decoder(const struct PluginCodec_Definition * codec, void * context) { Decoder_Interface_exit(context); } static int amr_codec_encoder(const struct PluginCodec_Definition * codec, void * context, const void * fromPtr, unsigned * fromLen, void * toPtr, unsigned * toLen, unsigned int * flag) { AmrEncoderContext * amr = (AmrEncoderContext *)context; unsigned byteCount; unsigned char buffer[100]; // Need this as encoder is very rude and can output more bytes than to pointer might be pointing to if (*fromLen < L_FRAME*sizeof(short)) return FALSE; byteCount = Encoder_Interface_Encode(amr->encoder_state, (enum Mode)amr->mode, (const short *)fromPtr, buffer+1, 0); if (byteCount <= 1 || *toLen <= byteCount) { *toLen = 0; return byteCount == 1; // Is a DTX frame } buffer[0] = 0xf0; // CMR is always this for us memcpy(toPtr, buffer, *toLen); *toLen = byteCount+1; *fromLen = L_FRAME*sizeof(short); return TRUE; } static int amr_codec_decoder(const struct PluginCodec_Definition * codec, void * context, const void * fromPtr, unsigned * fromLen, void * toPtr, unsigned * toLen, unsigned int * flag) { unsigned char * packet; if (*toLen < L_FRAME*sizeof(short)) return FALSE; if (fromLen == NULL || *fromLen == 0) { unsigned char buffer[32]; buffer[0] = (AMR_BITRATE_DTX << 3)|4; Decoder_Interface_Decode(context, buffer, (short *)toPtr, 0); // Handle missing data return TRUE; } packet = (unsigned char *)fromPtr; Decoder_Interface_Decode(context, packet+1, (short *)toPtr, 0); // Skip over CMR *fromLen = block_size[packet[1] >> 3] + 1; // Actual bytes consumed *toLen = L_FRAME*sizeof(short); return TRUE; } static int amr_set_quality(const struct PluginCodec_Definition * codec, void * context, const char * name, void * parm, unsigned * parmLen) { int quality; if (parm == NULL || *parmLen != sizeof(quality)) return FALSE; quality = *(int *)parm; if (quality < 0) quality = 0; else if (quality > 31) quality = 31; /* 1-3 -> mode 7 4-7 -> mode 6 ... 28-31 -> mode 0 */ ((AmrEncoderContext *)context)->mode = 7 -(quality/4); return TRUE; } static int amr_get_quality(const struct PluginCodec_Definition * codec, void * context, const char * name, void * parm, unsigned * parmLen) { if (parm == NULL || *parmLen != sizeof(int)) return FALSE; *(int *)parm = (7 - ((AmrEncoderContext *)context)->mode)*4; return TRUE; } ///////////////////////////////////////////////////////////////////////////// static struct PluginCodec_Option const amrRxFramesPerPacket = { PluginCodec_IntegerOption, // PluginCodec_OptionTypes "Rx Frames Per Packet", // Generic (human readable) option name 0, // Read Only flag PluginCodec_MinMerge, // Merge mode "1", // Initial value NULL, // SIP/SDP FMTP name NULL, // SIP/SDP FMTP default value (option not included in FMTP if have this value) H245_AMR_MAXAL_SDUFRAMES, // H.245 Generic Capability number and scope bits "1", // Minimum value "1" // Maximum value // Do not change!! See above. }; static const char InitialModeStr[] = "Initial Mode"; static struct PluginCodec_Option const amrInitialMode = { PluginCodec_IntegerOption, // PluginCodec_OptionTypes InitialModeStr, // Generic (human readable) option name 0, // Read Only flag PluginCodec_NoMerge, // Merge mode "7", // Initial value NULL, // SIP/SDP FMTP name NULL, // SIP/SDP FMTP default value (option not included in FMTP if have this value) H245_AMR_BITRATE, // H.245 Generic Capability number and scope bits "0", // Minimum value "7" // Maximum value }; static const char VADStr[] = "VAD"; static struct PluginCodec_Option const amrVAD = { PluginCodec_BoolOption, // PluginCodec_OptionTypes VADStr, // Generic (human readable) option name 0, // Read Only flag PluginCodec_AndMerge, // Merge mode "True", // Initial value NULL, // SIP/SDP FMTP name NULL, // SIP/SDP FMTP default value (option not included in FMTP if have this value) H245_AMR_GSMAMRCOMFORTNOISE // H.245 Generic Capability number and scope bitsSE, }; static struct PluginCodec_Option const amrMediaPacketization = { PluginCodec_StringOption, // PluginCodec_OptionTypes "Media Packetization", // Generic (human readable) option name 0, // Read Only flag PluginCodec_EqualMerge, // Merge mode "RFC3267" // Initial value }; static struct PluginCodec_Option const * const amrOptionTable[] = { &amrRxFramesPerPacket, &amrInitialMode, &amrVAD, &amrMediaPacketization, NULL }; static int get_codec_options(const struct PluginCodec_Definition * defn, void * context, const char * name, void * parm, unsigned * parmLen) { if (parm == NULL || parmLen == NULL || *parmLen != sizeof(struct PluginCodec_Option **)) return FALSE; *(struct PluginCodec_Option const * const * *)parm = amrOptionTable; return TRUE; } static int set_codec_options(const struct PluginCodec_Definition * defn, void * context, const char * name, void * parm, unsigned * parmLen) { const char * const * option; AmrEncoderContext * amr; if (context == NULL || parm == NULL || parmLen == NULL || *parmLen != sizeof(const char **)) return FALSE; amr = (AmrEncoderContext *)context; for (option = (const char * const *)parm; *option != NULL; option += 2) { if (STRCMPI(option[0], InitialModeStr) == 0) { amr->mode = strtoul(option[1], NULL, 10); if (amr->mode > AMR_BITRATE_1220) amr->mode = AMR_BITRATE_1220; } else if (STRCMPI(option[0], VADStr) == 0) amr->vad = atoi(option[1]) != 0; } return TRUE; } ///////////////////////////////////////////////////////////////////////////// static struct PluginCodec_information licenseInfo = { // Tue 13 Jul 2004 00:11:32 UTC = 1089677492, "Richard van der Hoff, MX Telecom Ltd.", // source code author "$Ver$", // source code version "richardv@mxtelecom.com", // source code email "http://www.mxtelecom.com", // source code URL "Copyright (C) 2004 MX Telecom Ltd.", // source code copyright "None", // source code license // FIXME PluginCodec_License_None, // source code license "GSM-AMR (Adaptive Multirate Codec)", // codec description "3rd Generation Partnership Project", // codec author NULL, // codec version NULL, // codec email "http://www.3gpp.org", // codec URL "", // codec copyright information "", // codec license PluginCodec_License_RoyaltiesRequired // codec license code }; static struct PluginCodec_ControlDefn amrEncoderControlDefn[] = { { "get_codec_options", get_codec_options }, { "set_codec_options", set_codec_options }, { "set_quality", amr_set_quality }, { "get_quality", amr_get_quality }, { NULL } }; static const struct PluginCodec_H323GenericCodecData amrcap = { OpalPluginCodec_Identifer_AMR, // capability identifier (Ref: Table I.1 in H.245) 122 // Must always be this regardless of "Max Bit Rate" option }; static struct PluginCodec_Definition amrCodecDefn[] = { { // encoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic, // dynamic RTP type "GSM-AMR", // text decription "L16", // source format "GSM-AMR", // destination format NULL, // user data 8000, // samples per second 12200, // raw bits per second 20000, // microseconds per frame L_FRAME, // samples per frame 33, // bytes per frame 1, // recommended number of frames per packet 1, // maximum number of frames per packet 0, // IANA RTP payload code "AMR", // RTP payload name amr_create_encoder, // create codec function amr_destroy_encoder, // destroy codec amr_codec_encoder, // encode/decode amrEncoderControlDefn, // codec controls PluginCodec_H323Codec_generic, // h323CapabilityType &amrcap // h323CapabilityData }, { // decoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic | // dynamic RTP type PluginCodec_DecodeSilence, // Can accept missing (empty) frames and generate silence "GSM-AMR", // text decription "GSM-AMR", // source format "L16", // destination format NULL, // user data 8000, // samples per second 12200, // raw bits per second 30000, // microseconds per frame L_FRAME, // samples per frame 33, // bytes per frame 1, // recommended number of frames per packet 1, // maximum number of frames per packet 0, // IANA RTP payload code "AMR", // RTP payload name amr_create_decoder, // create codec function amr_destroy_decoder, // destroy codec amr_codec_decoder, // encode/decode NULL, // codec controls PluginCodec_H323Codec_generic, // h323CapabilityType &amrcap // h323CapabilityData } }; PLUGIN_CODEC_IMPLEMENT_ALL(AMR, amrCodecDefn, PLUGIN_CODEC_VERSION_OPTIONS) ///////////////////////////////////////////////////////////////////////////// h323plus/plugins/audio/SILK/0000755000175000017500000000000011513063445014435 5ustar markmarkh323plus/plugins/audio/SILK/silkSrc/0000755000175000017500000000000011513063445016047 5ustar markmarkh323plus/plugins/audio/SILK/silkSrc/SKP_Silk_tables_NLSF_CB1_16.h0000644000175000017500000000462211513063445022752 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #ifndef SKP_SILK_TABLES_NLSF_CB1_16_H #define SKP_SILK_TABLES_NLSF_CB1_16_H #include "SKP_Silk_define.h" #ifdef __cplusplus extern "C" { #endif #define NLSF_MSVQ_CB1_16_STAGES 10 #define NLSF_MSVQ_CB1_16_VECTORS 104 /* NLSF codebook entropy coding tables */ extern const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB1_16_CDF[ NLSF_MSVQ_CB1_16_VECTORS + NLSF_MSVQ_CB1_16_STAGES ]; extern const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB1_16_CDF_start_ptr[ NLSF_MSVQ_CB1_16_STAGES ]; extern const SKP_int SKP_Silk_NLSF_MSVQ_CB1_16_CDF_middle_idx[ NLSF_MSVQ_CB1_16_STAGES ]; #ifdef __cplusplus } #endif #endif h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_k2a_Q16.c0000644000175000017500000000632411513063445021023 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_k2a.c * * * * Step up function, converts reflection coefficients to prediction * * coefficients * * * * Copyright 2008 (c), Skype Limited * * Date: 080103 * * */ #include "SKP_Silk_SigProc_FIX.h" /* Step up function, converts reflection coefficients to prediction coefficients */ void SKP_Silk_k2a_Q16( SKP_int32 *A_Q24, /* O: Prediction coefficients [order] Q24 */ const SKP_int32 *rc_Q16, /* I: Reflection coefficients [order] Q16 */ const SKP_int32 order /* I: Prediction order */ ) { SKP_int k, n; SKP_int32 Atmp[ SigProc_MAX_ORDER_LPC ]; for( k = 0; k < order; k++ ) { for( n = 0; n < k; n++ ) { Atmp[ n ] = A_Q24[ n ]; } for( n = 0; n < k; n++ ) { A_Q24[ n ] = SKP_SMLAWW( A_Q24[ n ], Atmp[ k - n - 1 ], rc_Q16[ k ] ); } A_Q24[ k ] = -SKP_LSHIFT( rc_Q16[ k ], 8 ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_tables_pitch_lag.c0000644000175000017500000002660411513063445023206 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_tables.h" const SKP_uint16 SKP_Silk_pitch_lag_NB_CDF[ 8 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ] = { 0, 194, 395, 608, 841, 1099, 1391, 1724, 2105, 2544, 3047, 3624, 4282, 5027, 5865, 6799, 7833, 8965, 10193, 11510, 12910, 14379, 15905, 17473, 19065, 20664, 22252, 23814, 25335, 26802, 28206, 29541, 30803, 31992, 33110, 34163, 35156, 36098, 36997, 37861, 38698, 39515, 40319, 41115, 41906, 42696, 43485, 44273, 45061, 45847, 46630, 47406, 48175, 48933, 49679, 50411, 51126, 51824, 52502, 53161, 53799, 54416, 55011, 55584, 56136, 56666, 57174, 57661, 58126, 58570, 58993, 59394, 59775, 60134, 60472, 60790, 61087, 61363, 61620, 61856, 62075, 62275, 62458, 62625, 62778, 62918, 63045, 63162, 63269, 63368, 63459, 63544, 63623, 63698, 63769, 63836, 63901, 63963, 64023, 64081, 64138, 64194, 64248, 64301, 64354, 64406, 64457, 64508, 64558, 64608, 64657, 64706, 64754, 64803, 64851, 64899, 64946, 64994, 65041, 65088, 65135, 65181, 65227, 65272, 65317, 65361, 65405, 65449, 65492, 65535 }; const SKP_int SKP_Silk_pitch_lag_NB_CDF_offset = 43; const SKP_uint16 SKP_Silk_pitch_contour_NB_CDF[ 12 ] = { 0, 14445, 18587, 25628, 30013, 34859, 40597, 48426, 54460, 59033, 62990, 65535 }; const SKP_int SKP_Silk_pitch_contour_NB_CDF_offset = 5; const SKP_uint16 SKP_Silk_pitch_lag_MB_CDF[ 12 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ] = { 0, 132, 266, 402, 542, 686, 838, 997, 1167, 1349, 1546, 1760, 1993, 2248, 2528, 2835, 3173, 3544, 3951, 4397, 4882, 5411, 5984, 6604, 7270, 7984, 8745, 9552, 10405, 11300, 12235, 13206, 14209, 15239, 16289, 17355, 18430, 19507, 20579, 21642, 22688, 23712, 24710, 25677, 26610, 27507, 28366, 29188, 29971, 30717, 31427, 32104, 32751, 33370, 33964, 34537, 35091, 35630, 36157, 36675, 37186, 37692, 38195, 38697, 39199, 39701, 40206, 40713, 41222, 41733, 42247, 42761, 43277, 43793, 44309, 44824, 45336, 45845, 46351, 46851, 47347, 47836, 48319, 48795, 49264, 49724, 50177, 50621, 51057, 51484, 51902, 52312, 52714, 53106, 53490, 53866, 54233, 54592, 54942, 55284, 55618, 55944, 56261, 56571, 56873, 57167, 57453, 57731, 58001, 58263, 58516, 58762, 58998, 59226, 59446, 59656, 59857, 60050, 60233, 60408, 60574, 60732, 60882, 61024, 61159, 61288, 61410, 61526, 61636, 61742, 61843, 61940, 62033, 62123, 62210, 62293, 62374, 62452, 62528, 62602, 62674, 62744, 62812, 62879, 62945, 63009, 63072, 63135, 63196, 63256, 63316, 63375, 63434, 63491, 63549, 63605, 63661, 63717, 63772, 63827, 63881, 63935, 63988, 64041, 64094, 64147, 64199, 64252, 64304, 64356, 64409, 64461, 64513, 64565, 64617, 64669, 64721, 64773, 64824, 64875, 64925, 64975, 65024, 65072, 65121, 65168, 65215, 65262, 65308, 65354, 65399, 65445, 65490, 65535 }; const SKP_int SKP_Silk_pitch_lag_MB_CDF_offset = 64; const SKP_uint16 SKP_Silk_pitch_lag_WB_CDF[ 16 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ] = { 0, 106, 213, 321, 429, 539, 651, 766, 884, 1005, 1132, 1264, 1403, 1549, 1705, 1870, 2047, 2236, 2439, 2658, 2893, 3147, 3420, 3714, 4030, 4370, 4736, 5127, 5546, 5993, 6470, 6978, 7516, 8086, 8687, 9320, 9985, 10680, 11405, 12158, 12938, 13744, 14572, 15420, 16286, 17166, 18057, 18955, 19857, 20759, 21657, 22547, 23427, 24293, 25141, 25969, 26774, 27555, 28310, 29037, 29736, 30406, 31048, 31662, 32248, 32808, 33343, 33855, 34345, 34815, 35268, 35704, 36127, 36537, 36938, 37330, 37715, 38095, 38471, 38844, 39216, 39588, 39959, 40332, 40707, 41084, 41463, 41844, 42229, 42615, 43005, 43397, 43791, 44186, 44583, 44982, 45381, 45780, 46179, 46578, 46975, 47371, 47765, 48156, 48545, 48930, 49312, 49690, 50064, 50433, 50798, 51158, 51513, 51862, 52206, 52544, 52877, 53204, 53526, 53842, 54152, 54457, 54756, 55050, 55338, 55621, 55898, 56170, 56436, 56697, 56953, 57204, 57449, 57689, 57924, 58154, 58378, 58598, 58812, 59022, 59226, 59426, 59620, 59810, 59994, 60173, 60348, 60517, 60681, 60840, 60993, 61141, 61284, 61421, 61553, 61679, 61800, 61916, 62026, 62131, 62231, 62326, 62417, 62503, 62585, 62663, 62737, 62807, 62874, 62938, 62999, 63057, 63113, 63166, 63217, 63266, 63314, 63359, 63404, 63446, 63488, 63528, 63567, 63605, 63642, 63678, 63713, 63748, 63781, 63815, 63847, 63879, 63911, 63942, 63973, 64003, 64033, 64063, 64092, 64121, 64150, 64179, 64207, 64235, 64263, 64291, 64319, 64347, 64374, 64401, 64428, 64455, 64481, 64508, 64534, 64560, 64585, 64610, 64635, 64660, 64685, 64710, 64734, 64758, 64782, 64807, 64831, 64855, 64878, 64902, 64926, 64950, 64974, 64998, 65022, 65045, 65069, 65093, 65116, 65139, 65163, 65186, 65209, 65231, 65254, 65276, 65299, 65321, 65343, 65364, 65386, 65408, 65429, 65450, 65471, 65493, 65514, 65535 }; const SKP_int SKP_Silk_pitch_lag_WB_CDF_offset = 86; const SKP_uint16 SKP_Silk_pitch_lag_SWB_CDF[ 24 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ] = { 0, 253, 505, 757, 1008, 1258, 1507, 1755, 2003, 2249, 2494, 2738, 2982, 3225, 3469, 3713, 3957, 4202, 4449, 4698, 4949, 5203, 5460, 5720, 5983, 6251, 6522, 6798, 7077, 7361, 7650, 7942, 8238, 8539, 8843, 9150, 9461, 9775, 10092, 10411, 10733, 11057, 11383, 11710, 12039, 12370, 12701, 13034, 13368, 13703, 14040, 14377, 14716, 15056, 15398, 15742, 16087, 16435, 16785, 17137, 17492, 17850, 18212, 18577, 18946, 19318, 19695, 20075, 20460, 20849, 21243, 21640, 22041, 22447, 22856, 23269, 23684, 24103, 24524, 24947, 25372, 25798, 26225, 26652, 27079, 27504, 27929, 28352, 28773, 29191, 29606, 30018, 30427, 30831, 31231, 31627, 32018, 32404, 32786, 33163, 33535, 33902, 34264, 34621, 34973, 35320, 35663, 36000, 36333, 36662, 36985, 37304, 37619, 37929, 38234, 38535, 38831, 39122, 39409, 39692, 39970, 40244, 40513, 40778, 41039, 41295, 41548, 41796, 42041, 42282, 42520, 42754, 42985, 43213, 43438, 43660, 43880, 44097, 44312, 44525, 44736, 44945, 45153, 45359, 45565, 45769, 45972, 46175, 46377, 46578, 46780, 46981, 47182, 47383, 47585, 47787, 47989, 48192, 48395, 48599, 48804, 49009, 49215, 49422, 49630, 49839, 50049, 50259, 50470, 50682, 50894, 51107, 51320, 51533, 51747, 51961, 52175, 52388, 52601, 52813, 53025, 53236, 53446, 53655, 53863, 54069, 54274, 54477, 54679, 54879, 55078, 55274, 55469, 55662, 55853, 56042, 56230, 56415, 56598, 56779, 56959, 57136, 57311, 57484, 57654, 57823, 57989, 58152, 58314, 58473, 58629, 58783, 58935, 59084, 59230, 59373, 59514, 59652, 59787, 59919, 60048, 60174, 60297, 60417, 60533, 60647, 60757, 60865, 60969, 61070, 61167, 61262, 61353, 61442, 61527, 61609, 61689, 61765, 61839, 61910, 61979, 62045, 62109, 62170, 62230, 62287, 62343, 62396, 62448, 62498, 62547, 62594, 62640, 62685, 62728, 62770, 62811, 62852, 62891, 62929, 62967, 63004, 63040, 63075, 63110, 63145, 63178, 63212, 63244, 63277, 63308, 63340, 63371, 63402, 63432, 63462, 63491, 63521, 63550, 63578, 63607, 63635, 63663, 63690, 63718, 63744, 63771, 63798, 63824, 63850, 63875, 63900, 63925, 63950, 63975, 63999, 64023, 64046, 64069, 64092, 64115, 64138, 64160, 64182, 64204, 64225, 64247, 64268, 64289, 64310, 64330, 64351, 64371, 64391, 64411, 64431, 64450, 64470, 64489, 64508, 64527, 64545, 64564, 64582, 64600, 64617, 64635, 64652, 64669, 64686, 64702, 64719, 64735, 64750, 64766, 64782, 64797, 64812, 64827, 64842, 64857, 64872, 64886, 64901, 64915, 64930, 64944, 64959, 64974, 64988, 65003, 65018, 65033, 65048, 65063, 65078, 65094, 65109, 65125, 65141, 65157, 65172, 65188, 65204, 65220, 65236, 65252, 65268, 65283, 65299, 65314, 65330, 65345, 65360, 65375, 65390, 65405, 65419, 65434, 65449, 65463, 65477, 65492, 65506, 65521, 65535 }; const SKP_int SKP_Silk_pitch_lag_SWB_CDF_offset = 128; const SKP_uint16 SKP_Silk_pitch_contour_CDF[ 35 ] = { 0, 372, 843, 1315, 1836, 2644, 3576, 4719, 6088, 7621, 9396, 11509, 14245, 17618, 20777, 24294, 27992, 33116, 40100, 44329, 47558, 50679, 53130, 55557, 57510, 59022, 60285, 61345, 62316, 63140, 63762, 64321, 64729, 65099, 65535 }; const SKP_int SKP_Silk_pitch_contour_CDF_offset = 17; const SKP_uint16 SKP_Silk_pitch_delta_CDF[23] = { 0, 343, 740, 1249, 1889, 2733, 3861, 5396, 7552, 10890, 16053, 24152, 30220, 34680, 37973, 40405, 42243, 43708, 44823, 45773, 46462, 47055, 65535 }; const SKP_int SKP_Silk_pitch_delta_CDF_offset = 11; h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_errors.h0000644000175000017500000000677711513063445021254 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #ifndef SKP_SILK_ERRORS_H #define SKP_SILK_ERRORS_H #ifdef __cplusplus extern "C" { #endif /******************/ /* Error messages */ /******************/ #define SKP_SILK_NO_ERROR 0 /**************************/ /* Encoder error messages */ /**************************/ /* Input length is not a multiplum of 10 ms, or length is longer than the packet length */ #define SKP_SILK_ENC_INPUT_INVALID_NO_OF_SAMPLES -1 /* Sampling frequency not 8000, 12000, 16000 or 24000 Hertz */ #define SKP_SILK_ENC_FS_NOT_SUPPORTED -2 /* Packet size not 20, 40, 60, 80 or 100 ms */ #define SKP_SILK_ENC_PACKET_SIZE_NOT_SUPPORTED -3 /* Allocated payload buffer too short */ #define SKP_SILK_ENC_PAYLOAD_BUF_TOO_SHORT -4 /* Loss rate not between 0 and 100 percent */ #define SKP_SILK_ENC_WRONG_LOSS_RATE -5 /* Complexity setting not valid, use 0, 1 or 2 */ #define SKP_SILK_ENC_WRONG_COMPLEXITY_SETTING -6 /* Inband FEC setting not valid, use 0 or 1 */ #define SKP_SILK_ENC_WRONG_INBAND_FEC_SETTING -7 /* DTX setting not valid, use 0 or 1 */ #define SKP_SILK_ENC_WRONG_DTX_SETTING -8 /* Internal encoder error */ #define SKP_SILK_ENC_INTERNAL_ERROR -9 /**************************/ /* Decoder error messages */ /**************************/ /* Output sampling frequency lower than internal decoded sampling frequency */ #define SKP_SILK_DEC_WRONG_SAMPLING_FREQUENCY -10 /* Payload size exceeded the maximum allowed 1024 bytes */ #define SKP_SILK_DEC_PAYLOAD_TOO_LARGE -11 /* Payload has bit errors */ #define SKP_SILK_DEC_PAYLOAD_ERROR -12 #ifdef __cplusplus } #endif #endif h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_scale_vector.c0000644000175000017500000001144711513063445022372 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_SigProc_FIX.h" /* Multiply a vector by a constant */ void SKP_Silk_scale_vector16_Q14( SKP_int16 *data1, SKP_int gain_Q14, /* Gain in Q14 */ SKP_int dataSize ) { SKP_int i; SKP_int32 data32, gain_Q16; SKP_assert( gain_Q14 < 32768 ); SKP_assert( gain_Q14 >= -32768 ); gain_Q16 = SKP_LSHIFT( gain_Q14, 2 ); if( (SKP_int32)( (SKP_int_ptr_size)data1 & 3 ) != 0 ) { /* Input is not 4-byte aligned */ data1[ 0 ] = SKP_SMULWB( gain_Q16, data1[ 0 ] ); i = 1; } else { i = 0; } dataSize--; for( ; i < dataSize; i += 2 ) { data32 = *( (SKP_int32 *)&data1[ i ] ); /* load two values at once */ data1[ i ] = SKP_SMULWB( gain_Q16, data32 ); data1[ i + 1 ] = SKP_SMULWT( gain_Q16, data32 ); } if( i == dataSize ) { /* One sample left to process */ data1[ i ] = SKP_SMULWB( gain_Q16, data1[ i ] ); } } /* Multiply a vector by a constant */ void SKP_Silk_scale_vector32_Q26_lshift_18( SKP_int32 *data1, /* (I/O): Q0/Q18 */ SKP_int32 gain_Q26, /* (I): Q26 */ SKP_int dataSize /* (I): length */ ) { SKP_int i; for( i = 0; i < dataSize; i++ ) { data1[ i ] = (SKP_int32)SKP_CHECK_FIT32( SKP_RSHIFT64( SKP_SMULL( data1[ i ], gain_Q26 ), 8 ) );// OUTPUT: Q18 } } /* Multiply a vector by a constant */ void SKP_Silk_scale_vector32_16_Q14( SKP_int32 *data1, /* (I/O): Q0/Q0 */ SKP_int gain_Q14, /* (I): Q14 */ SKP_int dataSize /* (I): length */ ) { SKP_int i, gain_Q16; if( gain_Q14 < ( SKP_int16_MAX >> 2 ) ) { gain_Q16 = SKP_LSHIFT( gain_Q14, 2 ); for( i = 0; i < dataSize; i++ ) { data1[ i ] = SKP_SMULWB( data1[ i ], gain_Q16 ); } } else { SKP_assert( gain_Q14 >= SKP_int16_MIN ); for( i = 0; i < dataSize; i++ ) { data1[ i ] = SKP_LSHIFT( SKP_SMULWB( data1[ i ], gain_Q14 ), 2 ); } } } /* Multiply a vector by a constant, does not saturate output data */ void SKP_Silk_scale_vector32_Q16( SKP_int32 *data1, /* (I/O): Q0/Q0 */ SKP_int32 gain_Q16, /* (I): gain in Q16 ( SKP_int16_MIN <= gain_Q16 <= SKP_int16_MAX + 65536 ) */ const SKP_int dataSize /* (I): length */ ) { SKP_int i; SKP_assert( gain_Q16 <= SKP_int16_MAX + 65536 ); SKP_assert( gain_Q16 >= SKP_int16_MIN ); if( gain_Q16 > SKP_int16_MAX ) { gain_Q16 -= 65536; for( i = 0; i < dataSize; i++ ) { data1[ i ] = SKP_SMLAWB( data1[ i ], data1[ i ], gain_Q16 ); } } else { for( i = 0; i < dataSize; i++ ) { data1[ i ] = SKP_SMULWB( data1[ i ], gain_Q16 ); } } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_burg_modified.c0000644000175000017500000003320611513063445022515 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_burg_modified.c * * * * Calculates the reflection coefficients from the input vector * * Input vector contains nb_subfr sub vectors of length L_sub + D * * * * Copyright 2009 (c), Skype Limited * * Date: 100105 * */ #include "SKP_Silk_SigProc_FIX.h" #define MAX_FRAME_SIZE 544 // subfr_length * nb_subfr = ( 0.005 * 24000 + 16 ) * 4 = 544 #define MAX_NB_SUBFR 4 #define QA 24 #define N_BITS_HEAD_ROOM 2 #define MIN_RSHIFTS -16 #define MAX_RSHIFTS (32 - QA) /* Compute reflection coefficients from input signal */ void SKP_Silk_burg_modified( SKP_int32 *res_nrg, /* O residual energy */ SKP_int *res_nrg_Q, /* O residual energy Q value */ SKP_int32 A_Q16[], /* O prediction coefficients (length order) */ const SKP_int16 x[], /* I input signal, length: nb_subfr * ( D + subfr_length ) */ const SKP_int subfr_length, /* I input signal subframe length (including D preceeding samples) */ const SKP_int nb_subfr, /* I number of subframes stacked in x */ const SKP_int32 WhiteNoiseFrac_Q32, /* I fraction added to zero-lag autocorrelation */ const SKP_int D /* I order */ ) { SKP_int k, n, s, lz, rshifts, rshifts_extra; SKP_int32 C0, num, nrg, rc_Q31, Atmp_QA, Atmp1, tmp1, tmp2, x1, x2; const SKP_int16 *x_ptr; SKP_int32 C_first_row[ SigProc_MAX_ORDER_LPC ]; SKP_int32 C_last_row[ SigProc_MAX_ORDER_LPC ]; SKP_int32 Af_QA[ SigProc_MAX_ORDER_LPC ]; SKP_int32 CAf[ SigProc_MAX_ORDER_LPC + 1 ]; SKP_int32 CAb[ SigProc_MAX_ORDER_LPC + 1 ]; SKP_assert( subfr_length * nb_subfr <= MAX_FRAME_SIZE ); SKP_assert( nb_subfr <= MAX_NB_SUBFR ); /* Compute autocorrelations, added over subframes */ SKP_Silk_sum_sqr_shift( &C0, &rshifts, x, nb_subfr * subfr_length ); if( rshifts > MAX_RSHIFTS ) { C0 = SKP_LSHIFT32( C0, rshifts - MAX_RSHIFTS ); SKP_assert( C0 > 0 ); rshifts = MAX_RSHIFTS; } else { lz = SKP_Silk_CLZ32( C0 ) - 1; rshifts_extra = N_BITS_HEAD_ROOM - lz; if( rshifts_extra > 0 ) { rshifts_extra = SKP_min( rshifts_extra, MAX_RSHIFTS - rshifts ); C0 = SKP_RSHIFT32( C0, rshifts_extra ); } else { rshifts_extra = SKP_max( rshifts_extra, MIN_RSHIFTS - rshifts ); C0 = SKP_LSHIFT32( C0, -rshifts_extra ); } rshifts += rshifts_extra; } SKP_memset( C_first_row, 0, SigProc_MAX_ORDER_LPC * sizeof( SKP_int32 ) ); if( rshifts > 0 ) { for( s = 0; s < nb_subfr; s++ ) { x_ptr = x + s * subfr_length; for( n = 1; n < D + 1; n++ ) { C_first_row[ n - 1 ] += (SKP_int32)SKP_RSHIFT64( SKP_Silk_inner_prod16_aligned_64( x_ptr, x_ptr + n, subfr_length - n ), rshifts ); } } } else { for( s = 0; s < nb_subfr; s++ ) { x_ptr = x + s * subfr_length; for( n = 1; n < D + 1; n++ ) { C_first_row[ n - 1 ] += SKP_LSHIFT32( SKP_Silk_inner_prod_aligned( x_ptr, x_ptr + n, subfr_length - n ), -rshifts ); } } } SKP_memcpy( C_last_row, C_first_row, SigProc_MAX_ORDER_LPC * sizeof( SKP_int32 ) ); /* Initialize */ CAb[ 0 ] = CAf[ 0 ] = C0 + SKP_SMMUL( WhiteNoiseFrac_Q32, C0 ) + 1; // Q(-rshifts) for( n = 0; n < D; n++ ) { /* Update first row of correlation matrix (without first element) */ /* Update last row of correlation matrix (without last element, stored in reversed order) */ /* Update C * Af */ /* Update C * flipud(Af) (stored in reversed order) */ if( rshifts > -2 ) { for( s = 0; s < nb_subfr; s++ ) { x_ptr = x + s * subfr_length; x1 = -SKP_LSHIFT32( (SKP_int32)x_ptr[ n ], 16 - rshifts ); // Q(16-rshifts) x2 = -SKP_LSHIFT32( (SKP_int32)x_ptr[ subfr_length - n - 1 ], 16 - rshifts ); // Q(16-rshifts) tmp1 = SKP_LSHIFT32( (SKP_int32)x_ptr[ n ], QA - 16 ); // Q(QA-16) tmp2 = SKP_LSHIFT32( (SKP_int32)x_ptr[ subfr_length - n - 1 ], QA - 16 ); // Q(QA-16) for( k = 0; k < n; k++ ) { C_first_row[ k ] = SKP_SMLAWB( C_first_row[ k ], x1, x_ptr[ n - k - 1 ] ); // Q( -rshifts ) C_last_row[ k ] = SKP_SMLAWB( C_last_row[ k ], x2, x_ptr[ subfr_length - n + k ] ); // Q( -rshifts ) Atmp_QA = Af_QA[ k ]; tmp1 = SKP_SMLAWB( tmp1, Atmp_QA, x_ptr[ n - k - 1 ] ); // Q(QA-16) tmp2 = SKP_SMLAWB( tmp2, Atmp_QA, x_ptr[ subfr_length - n + k ] ); // Q(QA-16) } tmp1 = SKP_LSHIFT32( -tmp1, 32 - QA - rshifts ); // Q(16-rshifts) tmp2 = SKP_LSHIFT32( -tmp2, 32 - QA - rshifts ); // Q(16-rshifts) for( k = 0; k <= n; k++ ) { CAf[ k ] = SKP_SMLAWB( CAf[ k ], tmp1, x_ptr[ n - k ] ); // Q( -rshift ) CAb[ k ] = SKP_SMLAWB( CAb[ k ], tmp2, x_ptr[ subfr_length - n + k - 1 ] ); // Q( -rshift ) } } } else { for( s = 0; s < nb_subfr; s++ ) { x_ptr = x + s * subfr_length; x1 = -SKP_LSHIFT32( (SKP_int32)x_ptr[ n ], -rshifts ); // Q( -rshifts ) x2 = -SKP_LSHIFT32( (SKP_int32)x_ptr[ subfr_length - n - 1 ], -rshifts ); // Q( -rshifts ) tmp1 = SKP_LSHIFT32( (SKP_int32)x_ptr[ n ], 17 ); // Q17 tmp2 = SKP_LSHIFT32( (SKP_int32)x_ptr[ subfr_length - n - 1 ], 17 ); // Q17 for( k = 0; k < n; k++ ) { C_first_row[ k ] = SKP_MLA( C_first_row[ k ], x1, x_ptr[ n - k - 1 ] ); // Q( -rshifts ) C_last_row[ k ] = SKP_MLA( C_last_row[ k ], x2, x_ptr[ subfr_length - n + k ] ); // Q( -rshifts ) Atmp1 = SKP_RSHIFT_ROUND( Af_QA[ k ], QA - 17 ); // Q17 tmp1 = SKP_MLA( tmp1, x_ptr[ n - k - 1 ], Atmp1 ); // Q17 tmp2 = SKP_MLA( tmp2, x_ptr[ subfr_length - n + k ], Atmp1 ); // Q17 } tmp1 = -tmp1; // Q17 tmp2 = -tmp2; // Q17 for( k = 0; k <= n; k++ ) { CAf[ k ] = SKP_SMLAWW( CAf[ k ], tmp1, SKP_LSHIFT32( (SKP_int32)x_ptr[ n - k ], -rshifts - 1 ) ); // Q( -rshift ) CAb[ k ] = SKP_SMLAWW( CAb[ k ], tmp2, SKP_LSHIFT32( (SKP_int32)x_ptr[ subfr_length - n + k - 1 ], -rshifts - 1 ) );// Q( -rshift ) } } } /* Calculate nominator and denominator for the next order reflection (parcor) coefficient */ tmp1 = C_first_row[ n ]; // Q( -rshifts ) tmp2 = C_last_row[ n ]; // Q( -rshifts ) num = 0; // Q( -rshifts ) nrg = SKP_ADD32( CAb[ 0 ], CAf[ 0 ] ); // Q( 1-rshifts ) for( k = 0; k < n; k++ ) { Atmp_QA = Af_QA[ k ]; lz = SKP_Silk_CLZ32( SKP_abs( Atmp_QA ) ) - 1; lz = SKP_min( 32 - QA, lz ); Atmp1 = SKP_LSHIFT32( Atmp_QA, lz ); // Q( QA + lz ) tmp1 = SKP_ADD_LSHIFT32( tmp1, SKP_SMMUL( C_last_row[ n - k - 1 ], Atmp1 ), 32 - QA - lz ); // Q( -rshifts ) tmp2 = SKP_ADD_LSHIFT32( tmp2, SKP_SMMUL( C_first_row[ n - k - 1 ], Atmp1 ), 32 - QA - lz ); // Q( -rshifts ) num = SKP_ADD_LSHIFT32( num, SKP_SMMUL( CAb[ n - k ], Atmp1 ), 32 - QA - lz ); // Q( -rshifts ) nrg = SKP_ADD_LSHIFT32( nrg, SKP_SMMUL( SKP_ADD32( CAb[ k + 1 ], CAf[ k + 1 ] ), Atmp1 ), 32 - QA - lz ); // Q( 1-rshifts ) } CAf[ n + 1 ] = tmp1; // Q( -rshifts ) CAb[ n + 1 ] = tmp2; // Q( -rshifts ) num = SKP_ADD32( num, tmp2 ); // Q( -rshifts ) num = SKP_LSHIFT32( -num, 1 ); // Q( 1-rshifts ) /* Calculate the next order reflection (parcor) coefficient */ if( SKP_abs( num ) < nrg ) { rc_Q31 = SKP_DIV32_varQ( num, nrg, 31 ); } else { /* Negative energy or ratio too high; set remaining coefficients to zero and exit loop */ SKP_memset( &Af_QA[ n ], 0, ( D - n ) * sizeof( SKP_int32 ) ); SKP_assert( 0 ); break; } /* Update the AR coefficients */ for( k = 0; k < (n + 1) >> 1; k++ ) { tmp1 = Af_QA[ k ]; // QA tmp2 = Af_QA[ n - k - 1 ]; // QA Af_QA[ k ] = SKP_ADD_LSHIFT32( tmp1, SKP_SMMUL( tmp2, rc_Q31 ), 1 ); // QA Af_QA[ n - k - 1 ] = SKP_ADD_LSHIFT32( tmp2, SKP_SMMUL( tmp1, rc_Q31 ), 1 ); // QA } Af_QA[ n ] = SKP_RSHIFT32( rc_Q31, 31 - QA ); // QA /* Update C * Af and C * Ab */ for( k = 0; k <= n + 1; k++ ) { tmp1 = CAf[ k ]; // Q( -rshifts ) tmp2 = CAb[ n - k + 1 ]; // Q( -rshifts ) CAf[ k ] = SKP_ADD_LSHIFT32( tmp1, SKP_SMMUL( tmp2, rc_Q31 ), 1 ); // Q( -rshifts ) CAb[ n - k + 1 ] = SKP_ADD_LSHIFT32( tmp2, SKP_SMMUL( tmp1, rc_Q31 ), 1 ); // Q( -rshifts ) } } /* Return residual energy */ nrg = CAf[ 0 ]; // Q( -rshifts ) tmp1 = 1 << 16; // Q16 for( k = 0; k < D; k++ ) { Atmp1 = SKP_RSHIFT_ROUND( Af_QA[ k ], QA - 16 ); // Q16 nrg = SKP_SMLAWW( nrg, CAf[ k + 1 ], Atmp1 ); // Q( -rshifts ) tmp1 = SKP_SMLAWW( tmp1, Atmp1, Atmp1 ); // Q16 A_Q16[ k ] = -Atmp1; } *res_nrg = SKP_SMLAWW( nrg, SKP_SMMUL( WhiteNoiseFrac_Q32, C0 ), -tmp1 ); // Q( -rshifts ) *res_nrg_Q = -rshifts; } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_control_codec_FIX.c0000644000175000017500000010577311513063445023252 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" /* Control encoder SNR */ SKP_int SKP_Silk_control_encoder_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O Pointer to Silk encoder state */ const SKP_int API_fs_kHz, /* I External (API) sampling rate (kHz) */ const SKP_int PacketSize_ms, /* I Packet length (ms) */ SKP_int32 TargetRate_bps, /* I Target max bitrate (bps) (used if SNR_dB == 0) */ const SKP_int PacketLoss_perc, /* I Packet loss rate (in percent) */ const SKP_int INBandFec_enabled, /* I Enable (1) / disable (0) inband FEC */ const SKP_int DTX_enabled, /* I Enable / disable DTX */ const SKP_int InputFramesize_ms, /* I Inputframe in ms */ const SKP_int Complexity /* I Complexity (0->low; 1->medium; 2->high) */ ) { SKP_int32 LBRRRate_thres_bps; SKP_int k, fs_kHz, ret = 0; SKP_int32 frac_Q6; const SKP_int32 *rateTable; /* State machine for the SWB/WB switching */ fs_kHz = psEnc->sCmn.fs_kHz; /* Only switch during low speech activity, when no frames are sitting in the payload buffer */ if( API_fs_kHz == 8 || fs_kHz == 0 || API_fs_kHz < fs_kHz ) { // Switching is not possible, encoder just initialized, or internal mode higher than external fs_kHz = API_fs_kHz; } else { /* Resample all valid data in x_buf. Resampling the last part gets rid of a click, 5ms after switching */ /* this is because the same state is used when downsampling in API.c and is then up to date */ /* the click immidiatly after switching is most of the time still there */ if( psEnc->sCmn.fs_kHz == 24 ) { /* Accumulate the difference between the target rate and limit */ if( psEnc->sCmn.fs_kHz_changed == 0 ) { psEnc->sCmn.bitrateDiff += SKP_MUL( InputFramesize_ms, TargetRate_bps - SWB2WB_BITRATE_BPS_INITIAL ); } else { psEnc->sCmn.bitrateDiff += SKP_MUL( InputFramesize_ms, TargetRate_bps - SWB2WB_BITRATE_BPS ); } psEnc->sCmn.bitrateDiff = SKP_min( psEnc->sCmn.bitrateDiff, 0 ); /* Check if we should switch from 24 to 16 kHz */ #if SWITCH_TRANSITION_FILTERING if( ( psEnc->sCmn.sLP.transition_frame_no == 0 ) && /* Transition phase not active */ ( psEnc->sCmn.bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD || psEnc->sCmn.sSWBdetect.WB_detected == 1 ) && ( psEnc->speech_activity_Q8 < 128 && psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) { psEnc->sCmn.sLP.transition_frame_no = 1; /* Begin transition phase */ psEnc->sCmn.sLP.mode = 0; /* Switch down */ } if( ( psEnc->sCmn.sLP.transition_frame_no >= TRANSITION_FRAMES_DOWN ) && ( psEnc->sCmn.sLP.mode == 0 ) && /* Transition phase complete, ready to switch */ #else if( ( psEnc->sCmn.bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD || psEnc->sCmn.sSWBdetect.WB_detected == 1 ) && #endif ( psEnc->speech_activity_Q8 < 128 && psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) { SKP_int16 x_buf[ 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ]; SKP_int16 x_bufout[ 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ]; psEnc->sCmn.bitrateDiff = 0; fs_kHz = 16; SKP_memcpy( x_buf, psEnc->x_buf, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) ); SKP_memset( psEnc->sCmn.resample24To16state, 0, sizeof( psEnc->sCmn.resample24To16state ) ); #if LOW_COMPLEXITY_ONLY { SKP_int16 scratch[ ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) + SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ]; SKP_Silk_resample_2_3_coarse( &x_bufout[ 0 ], psEnc->sCmn.resample24To16state, &x_buf[ 0 ], SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape, (SKP_int16*)scratch ); } #else SKP_Silk_resample_2_3( &x_bufout[ 0 ], psEnc->sCmn.resample24To16state, &x_buf[ 0 ], SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape ); #endif /* set the first frame to zero, no performance difference was noticed though */ SKP_memset( x_bufout, 0, 320 * sizeof( SKP_int16 ) ); SKP_memcpy( psEnc->x_buf, x_bufout, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) ); #if SWITCH_TRANSITION_FILTERING psEnc->sCmn.sLP.transition_frame_no = 0; /* Transition phase complete */ #endif } } else if( psEnc->sCmn.fs_kHz == 16 ) { /* Check if we should switch from 16 to 24 kHz */ #if SWITCH_TRANSITION_FILTERING if( ( psEnc->sCmn.sLP.transition_frame_no == 0 ) && /* No transition phase running, ready to switch */ #else if( #endif ( API_fs_kHz > psEnc->sCmn.fs_kHz && TargetRate_bps >= WB2SWB_BITRATE_BPS && psEnc->sCmn.sSWBdetect.WB_detected == 0 ) && ( psEnc->speech_activity_Q8 < 128 && psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) { SKP_int16 x_buf[ 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ]; SKP_int16 x_bufout[ 3 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) / 2 ]; SKP_int32 resample16To24state[ 11 ]; psEnc->sCmn.bitrateDiff = 0; fs_kHz = 24; SKP_memcpy( x_buf, psEnc->x_buf, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) ); SKP_memset( resample16To24state, 0, sizeof(resample16To24state) ); SKP_Silk_resample_3_2( &x_bufout[ 0 ], resample16To24state, &x_buf[ 0 ], SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape ); /* set the first frame to zero, no performance difference was noticed though */ SKP_memset( x_bufout, 0, 480 * sizeof( SKP_int16 ) ); SKP_memcpy( psEnc->x_buf, x_bufout, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) ); #if SWITCH_TRANSITION_FILTERING psEnc->sCmn.sLP.mode = 1; /* Switch up */ #endif } else { /* accumulate the difference between the target rate and limit */ psEnc->sCmn.bitrateDiff += SKP_MUL( InputFramesize_ms, TargetRate_bps - WB2MB_BITRATE_BPS ); psEnc->sCmn.bitrateDiff = SKP_min( psEnc->sCmn.bitrateDiff, 0 ); /* Check if we should switch from 16 to 12 kHz */ #if SWITCH_TRANSITION_FILTERING if( ( psEnc->sCmn.sLP.transition_frame_no == 0 ) && /* Transition phase not active */ ( psEnc->sCmn.bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD ) && ( psEnc->speech_activity_Q8 < 128 && psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) { psEnc->sCmn.sLP.transition_frame_no = 1; /* Begin transition phase */ psEnc->sCmn.sLP.mode = 0; /* Switch down */ } if( ( psEnc->sCmn.sLP.transition_frame_no >= TRANSITION_FRAMES_DOWN ) && ( psEnc->sCmn.sLP.mode == 0 ) && /* Transition phase complete, ready to switch */ #else if( ( psEnc->sCmn.bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD ) && #endif ( psEnc->speech_activity_Q8 < 128 && psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) { SKP_int16 x_buf[ 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ]; SKP_memcpy( x_buf, psEnc->x_buf, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) ); psEnc->sCmn.bitrateDiff = 0; fs_kHz = 12; if( API_fs_kHz == 24 ) { /* Intermediate upsampling of x_bufFIX from 16 to 24 kHz */ SKP_int16 x_buf24[ 3 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) / 2 ]; SKP_int32 scratch[ 3 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) ]; SKP_int32 resample16To24state[ 11 ]; SKP_memset( resample16To24state, 0, sizeof( resample16To24state ) ); SKP_Silk_resample_3_2( &x_buf24[ 0 ], resample16To24state, &x_buf[ 0 ], SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape ); /* Update the state of the resampler used in API.c, from 24 to 12 kHz */ SKP_memset( psEnc->sCmn.resample24To12state, 0, sizeof( psEnc->sCmn.resample24To12state ) ); SKP_Silk_resample_1_2_coarse( &x_buf24[ 0 ], psEnc->sCmn.resample24To12state, &x_buf[ 0 ], scratch, SKP_RSHIFT( SKP_SMULBB( 3, SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape ), 2 ) ); /* set the first frame to zero, no performance difference was noticed though */ SKP_memset( x_buf, 0, 240 * sizeof( SKP_int16 ) ); SKP_memcpy( psEnc->x_buf, x_buf, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) ); } else if( API_fs_kHz == 16 ) { SKP_int16 x_bufout[ 3 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) / 4 ]; SKP_memset( psEnc->sCmn.resample16To12state, 0, sizeof( psEnc->sCmn.resample16To12state ) ); SKP_Silk_resample_3_4( &x_bufout[ 0 ], psEnc->sCmn.resample16To12state, &x_buf[ 0 ], SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape ); /* set the first frame to zero, no performance difference was noticed though */ SKP_memset( x_bufout, 0, 240 * sizeof( SKP_int16 ) ); SKP_memcpy( psEnc->x_buf, x_bufout, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) ); } #if SWITCH_TRANSITION_FILTERING psEnc->sCmn.sLP.transition_frame_no = 0; /* Transition phase complete */ #endif } } } else if( psEnc->sCmn.fs_kHz == 12 ) { /* Check if we should switch from 12 to 16 kHz */ #if SWITCH_TRANSITION_FILTERING if( ( psEnc->sCmn.sLP.transition_frame_no == 0 ) && /* No transition phase running, ready to switch */ #else if( #endif ( API_fs_kHz > psEnc->sCmn.fs_kHz && TargetRate_bps >= MB2WB_BITRATE_BPS ) && ( psEnc->speech_activity_Q8 < 128 && psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) { SKP_int16 x_buf[ 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ]; SKP_memcpy( x_buf, psEnc->x_buf, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) ); psEnc->sCmn.bitrateDiff = 0; fs_kHz = 16; /* Reset state of the resampler to be used */ if( API_fs_kHz == 24 ) { SKP_int16 x_bufout[ 2 * 2 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) / 3 ]; /* Intermediate upsampling of x_bufFIX from 12 to 24 kHz */ SKP_int16 x_buf24[ 2 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) ]; SKP_int32 scratch[ 3 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) ]; SKP_int32 resample12To24state[6]; SKP_memset( resample12To24state, 0, sizeof( resample12To24state ) ); SKP_Silk_resample_2_1_coarse( &x_buf[ 0 ], resample12To24state, &x_buf24[ 0 ], scratch, SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape ); SKP_memset( psEnc->sCmn.resample24To16state, 0, sizeof( psEnc->sCmn.resample24To16state ) ); #if LOW_COMPLEXITY_ONLY SKP_assert( sizeof( SKP_int16 ) * ( 2 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) + SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ) <= sizeof( scratch ) ); SKP_Silk_resample_2_3_coarse( &x_bufout[ 0 ], psEnc->sCmn.resample24To16state, &x_buf24[ 0 ], SKP_LSHIFT( SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape, 1 ), (SKP_int16*)scratch ); #else SKP_Silk_resample_2_3( &x_bufout[ 0 ], psEnc->sCmn.resample24To16state, &x_buf24[ 0 ], SKP_LSHIFT( SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape, 1 ) ); #endif /* set the first frame to zero, no performance difference was noticed though */ SKP_memset( x_bufout, 0, 320 * sizeof( SKP_int16 ) ); SKP_memcpy( psEnc->x_buf, x_bufout, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) ); } #if SWITCH_TRANSITION_FILTERING psEnc->sCmn.sLP.mode = 1; /* Switch up */ #endif } else { /* accumulate the difference between the target rate and limit */ psEnc->sCmn.bitrateDiff += SKP_MUL( InputFramesize_ms, TargetRate_bps - MB2NB_BITRATE_BPS ); psEnc->sCmn.bitrateDiff = SKP_min( psEnc->sCmn.bitrateDiff, 0 ); /* Check if we should switch from 12 to 8 kHz */ #if SWITCH_TRANSITION_FILTERING if( ( psEnc->sCmn.sLP.transition_frame_no == 0 ) && /* Transition phase not active */ ( psEnc->sCmn.bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD ) && ( psEnc->speech_activity_Q8 < 128 && psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) { psEnc->sCmn.sLP.transition_frame_no = 1; /* Begin transition phase */ psEnc->sCmn.sLP.mode = 0; /* Switch down */ } if( ( psEnc->sCmn.sLP.transition_frame_no >= TRANSITION_FRAMES_DOWN ) && ( psEnc->sCmn.sLP.mode == 0 ) && #else if( ( psEnc->sCmn.bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD ) && #endif ( psEnc->speech_activity_Q8 < 128 && psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) { SKP_int16 x_buf[ 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ]; SKP_memcpy( x_buf, psEnc->x_buf, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) ); psEnc->sCmn.bitrateDiff = 0; fs_kHz = 8; if( API_fs_kHz == 24 ) { SKP_int32 scratch[ 3 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) ]; /* Intermediate upsampling of x_buf from 12 to 24 kHz */ SKP_int16 x_buf24[ 2 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) ]; SKP_int32 resample12To24state[ 6 ]; SKP_memset( resample12To24state, 0, sizeof( resample12To24state ) ); SKP_Silk_resample_2_1_coarse( &x_buf[ 0 ], resample12To24state, &x_buf24[ 0 ], scratch, SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape ); /* Update the state of the resampler used in API.c, from 24 to 8 kHz */ SKP_memset( psEnc->sCmn.resample24To8state, 0, sizeof( psEnc->sCmn.resample24To8state ) ); SKP_Silk_resample_1_3( &x_buf[ 0 ], psEnc->sCmn.resample24To8state, &x_buf24[ 0 ], SKP_LSHIFT( SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape, 1 ) ); /* set the first frame to zero, no performance difference was noticed though */ SKP_memset( x_buf, 0, 160 * sizeof( SKP_int16 ) ); SKP_memcpy( psEnc->x_buf, x_buf, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) ); } else if( API_fs_kHz == 16 ) { /* Intermediate upsampling of x_bufFIX from 12 to 16 kHz */ SKP_int16 x_buf16[ 3 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) / 2 ]; SKP_int32 resample12To16state[11]; SKP_memset( resample12To16state, 0, sizeof( resample12To16state ) ); SKP_Silk_resample_3_2( &x_buf16[ 0 ], resample12To16state, &x_buf[ 0 ], SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape ); /* set the first frame to zero, no performance difference was noticed though */ SKP_memset( x_buf, 0, 160 * sizeof( SKP_int16 ) ); SKP_memcpy( psEnc->x_buf, x_buf, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) ); } else if( API_fs_kHz == 12 ) { SKP_int16 x_bufout[ 2 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) / 3 ]; SKP_memset( psEnc->sCmn.resample12To8state, 0, sizeof( psEnc->sCmn.resample12To8state ) ); #if LOW_COMPLEXITY_ONLY { SKP_int16 scratch[ ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) + SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ]; SKP_Silk_resample_2_3_coarse( &x_bufout[ 0 ], psEnc->sCmn.resample12To8state, &x_buf[ 0 ], SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape, scratch ); } #else SKP_Silk_resample_2_3( &x_bufout[ 0 ], psEnc->sCmn.resample12To8state, &x_buf[ 0 ], SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape ); #endif /* set the first frame to zero, no performance difference was noticed though */ SKP_memset( x_bufout, 0, 160 * sizeof( SKP_int16 ) ); SKP_memcpy( psEnc->x_buf, x_bufout, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) ); } #if SWITCH_TRANSITION_FILTERING psEnc->sCmn.sLP.transition_frame_no = 0; /* Transition phase complete */ #endif } } } else if( psEnc->sCmn.fs_kHz == 8 ) { /* Check if we should switch from 8 to 12 kHz */ #if SWITCH_TRANSITION_FILTERING if( ( psEnc->sCmn.sLP.transition_frame_no == 0 ) && /* No transition phase running, ready to switch */ #else if( #endif ( API_fs_kHz > psEnc->sCmn.fs_kHz && TargetRate_bps >= NB2MB_BITRATE_BPS ) && ( psEnc->speech_activity_Q8 < 128 && psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) { SKP_int16 x_buf[ 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ]; SKP_memcpy( x_buf, psEnc->x_buf, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) ); psEnc->sCmn.bitrateDiff = 0; fs_kHz = 12; /* Reset state of the resampler to be used */ if( API_fs_kHz == 24 ) { SKP_int16 x_buf24[ 3 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) ]; SKP_int32 scratch[ 3 * 3 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) / 2 ]; SKP_int32 resample8To24state[ 7 ]; /* Intermediate upsampling of x_bufFIX from 8 to 24 kHz */ SKP_memset( resample8To24state, 0, sizeof( resample8To24state ) ); SKP_Silk_resample_3_1( &x_buf24[ 0 ], resample8To24state, &x_buf[ 0 ], SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape ); SKP_memset( psEnc->sCmn.resample24To12state, 0, sizeof( psEnc->sCmn.resample24To12state ) ); SKP_Silk_resample_1_2_coarse( &x_buf24[ 0 ], psEnc->sCmn.resample24To12state, &x_buf[ 0 ], scratch, SKP_RSHIFT( SKP_SMULBB( 3, SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape ), 1 ) ); /* set the first frame to zero, no performance difference was noticed though */ SKP_memset( x_buf, 0, 240 * sizeof( SKP_int16 ) ); SKP_memcpy( psEnc->x_buf, x_buf, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) ); } else if( API_fs_kHz == 16 ) { SKP_int16 x_buf16[ 2 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) ]; SKP_int32 scratch[ 3 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) ]; SKP_int32 resample8To16state[ 6 ]; /* Intermediate upsampling of x_bufFIX from 8 to 16 kHz */ SKP_memset( resample8To16state, 0, sizeof( resample8To16state ) ); SKP_Silk_resample_2_1_coarse( &x_buf[ 0 ], resample8To16state, &x_buf16[ 0 ], scratch, SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape ); SKP_memset( psEnc->sCmn.resample16To12state, 0, sizeof( psEnc->sCmn.resample16To12state ) ); SKP_Silk_resample_3_4( &x_buf[ 0 ], psEnc->sCmn.resample16To12state, &x_buf16[ 0 ], SKP_LSHIFT( SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape, 1 ) ); /* set the first frame to zero, no performance difference was noticed though */ SKP_memset( x_buf, 0, 240 * sizeof( SKP_int16 ) ); SKP_memcpy( psEnc->x_buf, x_buf, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) ); } #if SWITCH_TRANSITION_FILTERING psEnc->sCmn.sLP.mode = 1; /* Switch up */ #endif } } else { // Internal sample frequency not supported! SKP_assert( 0 ); } } #if SWITCH_TRANSITION_FILTERING /* After switching up, stop transition filter during speech inactivity */ if( ( psEnc->sCmn.sLP.mode == 1 ) && ( psEnc->sCmn.sLP.transition_frame_no >= TRANSITION_FRAMES_UP ) && ( psEnc->speech_activity_Q8 < 128 ) && ( psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) { psEnc->sCmn.sLP.transition_frame_no = 0; /* Reset transition filter state */ SKP_memset( psEnc->sCmn.sLP.In_LP_State, 0, 2 * sizeof( SKP_int32 ) ); } #endif /* Set internal sampling frequency */ if( psEnc->sCmn.fs_kHz != fs_kHz ) { /* reset part of the state */ SKP_memset( &psEnc->sShape, 0, sizeof( SKP_Silk_shape_state_FIX ) ); SKP_memset( &psEnc->sPrefilt, 0, sizeof( SKP_Silk_prefilter_state_FIX ) ); SKP_memset( &psEnc->sNSQ, 0, sizeof( SKP_Silk_nsq_state ) ); SKP_memset( &psEnc->sPred, 0, sizeof( SKP_Silk_predict_state_FIX ) ); SKP_memset( psEnc->sNSQ.xq, 0, ( 2 * MAX_FRAME_LENGTH ) * sizeof( SKP_int16 ) ); SKP_memset( psEnc->sNSQ_LBRR.xq, 0, ( 2 * MAX_FRAME_LENGTH ) * sizeof( SKP_int16 ) ); SKP_memset( psEnc->sCmn.LBRR_buffer, 0, MAX_LBRR_DELAY * sizeof( SKP_SILK_LBRR_struct ) ); #if SWITCH_TRANSITION_FILTERING SKP_memset( psEnc->sCmn.sLP.In_LP_State, 0, 2 * sizeof( SKP_int32 ) ); if( psEnc->sCmn.sLP.mode == 1 ) { /* Begin transition phase */ psEnc->sCmn.sLP.transition_frame_no = 1; } else { /* End transition phase */ psEnc->sCmn.sLP.transition_frame_no = 0; } #endif psEnc->sCmn.inputBufIx = 0; psEnc->sCmn.nFramesInPayloadBuf = 0; psEnc->sCmn.nBytesInPayloadBuf = 0; psEnc->sCmn.oldest_LBRR_idx = 0; psEnc->sCmn.TargetRate_bps = 0; /* ensures that psEnc->SNR_dB is recomputed */ SKP_memset( psEnc->sPred.prev_NLSFq_Q15, 0, MAX_LPC_ORDER * sizeof( SKP_int ) ); /* Initialize non-zero parameters */ psEnc->sCmn.prevLag = 100; psEnc->sCmn.prev_sigtype = SIG_TYPE_UNVOICED; psEnc->sCmn.first_frame_after_reset = 1; psEnc->sPrefilt.lagPrev = 100; psEnc->sShape.LastGainIndex = 1; psEnc->sNSQ.lagPrev = 100; psEnc->sNSQ.prev_inv_gain_Q16 = 65536; psEnc->sNSQ_LBRR.prev_inv_gain_Q16 = 65536; psEnc->sCmn.fs_kHz = fs_kHz; if( psEnc->sCmn.fs_kHz == 8 ) { psEnc->sCmn.predictLPCOrder = MIN_LPC_ORDER; psEnc->sCmn.psNLSF_CB[ 0 ] = &SKP_Silk_NLSF_CB0_10; psEnc->sCmn.psNLSF_CB[ 1 ] = &SKP_Silk_NLSF_CB1_10; } else { psEnc->sCmn.predictLPCOrder = MAX_LPC_ORDER; psEnc->sCmn.psNLSF_CB[ 0 ] = &SKP_Silk_NLSF_CB0_16; psEnc->sCmn.psNLSF_CB[ 1 ] = &SKP_Silk_NLSF_CB1_16; } psEnc->sCmn.frame_length = SKP_SMULBB( FRAME_LENGTH_MS, fs_kHz ); psEnc->sCmn.subfr_length = SKP_DIV32_16( psEnc->sCmn.frame_length, NB_SUBFR ); psEnc->sCmn.la_pitch = SKP_SMULBB( LA_PITCH_MS, fs_kHz ); psEnc->sCmn.la_shape = SKP_SMULBB( LA_SHAPE_MS, fs_kHz ); psEnc->sPred.min_pitch_lag = SKP_SMULBB( 3, fs_kHz ); psEnc->sPred.max_pitch_lag = SKP_SMULBB( 18, fs_kHz ); psEnc->sPred.pitch_LPC_win_length = SKP_SMULBB( FIND_PITCH_LPC_WIN_MS, fs_kHz ); if( psEnc->sCmn.fs_kHz == 24 ) { psEnc->mu_LTP_Q8 = MU_LTP_QUANT_SWB_Q8; } else if( psEnc->sCmn.fs_kHz == 16 ) { psEnc->mu_LTP_Q8 = MU_LTP_QUANT_WB_Q8; } else if( psEnc->sCmn.fs_kHz == 12 ) { psEnc->mu_LTP_Q8 = MU_LTP_QUANT_MB_Q8; } else { psEnc->mu_LTP_Q8 = MU_LTP_QUANT_NB_Q8; } psEnc->sCmn.fs_kHz_changed = 1; /* Check that settings are valid */ SKP_assert( ( psEnc->sCmn.subfr_length * NB_SUBFR ) == psEnc->sCmn.frame_length ); } /* Set encoding complexity */ if( Complexity == 0 || LOW_COMPLEXITY_ONLY ) { /* Low complexity */ psEnc->sCmn.Complexity = 0; psEnc->sCmn.pitchEstimationComplexity = PITCH_EST_COMPLEXITY_LC_MODE; psEnc->pitchEstimationThreshold_Q16 = FIND_PITCH_CORRELATION_THRESHOLD_Q16_LC_MODE; psEnc->sCmn.pitchEstimationLPCOrder = 8; psEnc->sCmn.shapingLPCOrder = 12; psEnc->sCmn.nStatesDelayedDecision = 1; psEnc->NoiseShapingQuantizer = SKP_Silk_NSQ; psEnc->sCmn.useInterpolatedNLSFs = 0; psEnc->sCmn.LTPQuantLowComplexity = 1; psEnc->sCmn.NLSF_MSVQ_Survivors = MAX_NLSF_MSVQ_SURVIVORS_LC_MODE; } else if( Complexity == 1 ) { /* Medium complexity */ psEnc->sCmn.Complexity = 1; psEnc->sCmn.pitchEstimationComplexity = PITCH_EST_COMPLEXITY_MC_MODE; psEnc->pitchEstimationThreshold_Q16 = FIND_PITCH_CORRELATION_THRESHOLD_Q16_MC_MODE; psEnc->sCmn.pitchEstimationLPCOrder = 12; psEnc->sCmn.shapingLPCOrder = 16; psEnc->sCmn.nStatesDelayedDecision = 2; psEnc->NoiseShapingQuantizer = SKP_Silk_NSQ_del_dec; psEnc->sCmn.useInterpolatedNLSFs = 0; psEnc->sCmn.LTPQuantLowComplexity = 0; psEnc->sCmn.NLSF_MSVQ_Survivors = MAX_NLSF_MSVQ_SURVIVORS_MC_MODE; } else if( Complexity == 2 ) { /* High complexity */ psEnc->sCmn.Complexity = 2; psEnc->sCmn.pitchEstimationComplexity = PITCH_EST_COMPLEXITY_HC_MODE; psEnc->pitchEstimationThreshold_Q16 = FIND_PITCH_CORRELATION_THRESHOLD_Q16_HC_MODE; psEnc->sCmn.pitchEstimationLPCOrder = 16; psEnc->sCmn.shapingLPCOrder = 16; psEnc->sCmn.nStatesDelayedDecision = 4; psEnc->NoiseShapingQuantizer = SKP_Silk_NSQ_del_dec; psEnc->sCmn.useInterpolatedNLSFs = 1; psEnc->sCmn.LTPQuantLowComplexity = 0; psEnc->sCmn.NLSF_MSVQ_Survivors = MAX_NLSF_MSVQ_SURVIVORS; } else { ret = SKP_SILK_ENC_WRONG_COMPLEXITY_SETTING; } /* Dont have higher Pitch estimation LPC order than predict LPC order */ psEnc->sCmn.pitchEstimationLPCOrder = SKP_min_int( psEnc->sCmn.pitchEstimationLPCOrder, psEnc->sCmn.predictLPCOrder ); SKP_assert( psEnc->sCmn.pitchEstimationLPCOrder <= FIND_PITCH_LPC_ORDER_MAX ); SKP_assert( psEnc->sCmn.shapingLPCOrder <= SHAPE_LPC_ORDER_MAX ); SKP_assert( psEnc->sCmn.nStatesDelayedDecision <= DEL_DEC_STATES_MAX ); /* Set bitrate/coding quality */ TargetRate_bps = SKP_min( TargetRate_bps, 100000 ); if( psEnc->sCmn.fs_kHz == 8 ) { TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_NB_BPS ); } else if( psEnc->sCmn.fs_kHz == 12 ) { TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_MB_BPS ); } else if( psEnc->sCmn.fs_kHz == 16 ) { TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_WB_BPS ); } else { TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_SWB_BPS ); } if( TargetRate_bps != psEnc->sCmn.TargetRate_bps ) { psEnc->sCmn.TargetRate_bps = TargetRate_bps; /* if new TargetRate_bps, translate to SNR_dB value */ if( psEnc->sCmn.fs_kHz == 8 ) { rateTable = TargetRate_table_NB; } else if( psEnc->sCmn.fs_kHz == 12 ) { rateTable = TargetRate_table_MB; } else if( psEnc->sCmn.fs_kHz == 16 ) { rateTable = TargetRate_table_WB; } else { rateTable = TargetRate_table_SWB; } for( k = 1; k < TARGET_RATE_TAB_SZ; k++ ) { /* find bitrate interval in table and interpolate */ if( TargetRate_bps < rateTable[ k ] ) { frac_Q6 = SKP_DIV32( SKP_LSHIFT( TargetRate_bps - rateTable[ k - 1 ], 6 ), rateTable[ k ] - rateTable[ k - 1 ] ); psEnc->SNR_dB_Q7 = SKP_LSHIFT( SNR_table_Q1[ k - 1 ], 6 ) + SKP_MUL( frac_Q6, SNR_table_Q1[ k ] - SNR_table_Q1[ k - 1 ] ); break; } } } /* Set packet size */ if( ( PacketSize_ms != 20 ) && ( PacketSize_ms != 40 ) && ( PacketSize_ms != 60 ) && ( PacketSize_ms != 80 ) && ( PacketSize_ms != 100 ) ) { ret = SKP_SILK_ENC_PACKET_SIZE_NOT_SUPPORTED; } else { if( PacketSize_ms != psEnc->sCmn.PacketSize_ms ) { psEnc->sCmn.PacketSize_ms = PacketSize_ms; /* Packet length changes. Reset LBRR buffer */ SKP_Silk_LBRR_reset( &psEnc->sCmn ); } } /* Set packet loss rate measured by farend */ if( ( PacketLoss_perc < 0 ) || ( PacketLoss_perc > 100 ) ) { ret = SKP_SILK_ENC_WRONG_LOSS_RATE; } psEnc->sCmn.PacketLoss_perc = PacketLoss_perc; #if USE_LBRR if( INBandFec_enabled < 0 || INBandFec_enabled > 1 ) { ret = SKP_SILK_ENC_WRONG_INBAND_FEC_SETTING; } /* Only change settings if first frame in packet */ if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) { psEnc->sCmn.LBRR_enabled = INBandFec_enabled; if( psEnc->sCmn.fs_kHz == 8 ) { LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 9000; } else if( psEnc->sCmn.fs_kHz == 12 ) { LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 6000;; } else if( psEnc->sCmn.fs_kHz == 16 ) { LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 3000; } else { LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS; } if( psEnc->sCmn.TargetRate_bps >= LBRRRate_thres_bps ) { /* Set gain increase / rate reduction for LBRR usage */ /* Coarse tuned with pesq for now. */ /* Linear regression coefs G = 8 - 0.5 * loss */ /* Meaning that at 16% loss main rate and redundant rate is the same, -> G = 0 */ psEnc->sCmn.LBRR_GainIncreases = SKP_max_int( 8 - SKP_RSHIFT( psEnc->sCmn.PacketLoss_perc, 1 ), 0 ); /* Set main stream rate compensation */ if( psEnc->sCmn.LBRR_enabled && psEnc->sCmn.PacketLoss_perc > LBRR_LOSS_THRES ) { /* Tuned to give aprox same mean / weighted bitrate as no inband FEC */ psEnc->inBandFEC_SNR_comp_Q8 = ( 6 << 8 ) - SKP_LSHIFT( psEnc->sCmn.LBRR_GainIncreases, 7 ); } else { psEnc->inBandFEC_SNR_comp_Q8 = 0; psEnc->sCmn.LBRR_enabled = 0; } } else { psEnc->inBandFEC_SNR_comp_Q8 = 0; psEnc->sCmn.LBRR_enabled = 0; } } #else psEnc->sCmn.LBRR_enabled = 0; #endif /* Set DTX mode */ if( DTX_enabled < 0 || DTX_enabled > 1 ) { ret = SKP_SILK_ENC_WRONG_DTX_SETTING; } psEnc->sCmn.useDTX = DTX_enabled; return ret; } /* Control low bitrate redundancy usage */ void SKP_Silk_LBRR_ctrl_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O encoder state */ SKP_Silk_encoder_control_FIX *psEncCtrl /* I/O encoder control */ ) { SKP_int LBRR_usage; if( psEnc->sCmn.LBRR_enabled ) { /* Control LBRR */ /* Usage Control based on sensitivity and packet loss caracteristics */ /* For now only enable adding to next for active frames. Make more complex later */ LBRR_usage = SKP_SILK_NO_LBRR; if( psEnc->speech_activity_Q8 > LBRR_SPEECH_ACTIVITY_THRES_Q8 && psEnc->sCmn.PacketLoss_perc > LBRR_LOSS_THRES ) { // nb! maybe multiply loss prob and speech activity //if( psEnc->PacketLoss_burst > BURST_THRES ) // psEncCtrl->LBRR_usage = SKP_SILK_ADD_LBRR_TO_PLUS2; //} else { LBRR_usage = SKP_SILK_ADD_LBRR_TO_PLUS1;//SKP_SILK_NO_LBRR //} } psEncCtrl->sCmn.LBRR_usage = LBRR_usage; } else { psEncCtrl->sCmn.LBRR_usage = SKP_SILK_NO_LBRR; } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_tables_other.c0000644000175000017500000001566611513063445022403 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_structs.h" #include "SKP_Silk_define.h" #include "SKP_Silk_tables.h" #ifdef __cplusplus extern "C" { #endif /* Piece-wise linear mapping from bitrate in kbps to coding quality in dB SNR */ const SKP_int32 TargetRate_table_NB[ TARGET_RATE_TAB_SZ ] = { 0, 8000, 9000, 11000, 13000, 16000, 22000, 100000 }; const SKP_int32 TargetRate_table_MB[ TARGET_RATE_TAB_SZ ] = { 0, 10000, 12000, 14000, 17000, 21000, 28000, 100000 }; const SKP_int32 TargetRate_table_WB[ TARGET_RATE_TAB_SZ ] = { 0, 11000, 14000, 17000, 21000, 26000, 36000, 100000 }; const SKP_int32 TargetRate_table_SWB[ TARGET_RATE_TAB_SZ ] = { 0, 13000, 16000, 19000, 25000, 32000, 46000, 100000 }; const SKP_int32 SNR_table_Q1[ TARGET_RATE_TAB_SZ ] = { 19, 31, 35, 39, 43, 47, 54, 59 }; const SKP_int32 SNR_table_one_bit_per_sample_Q7[ 4 ] = { 1984, 2240, 2408, 2708 }; /* Filter coeficicnts for HP filter: 4. Order filter implementad as two biquad filters */ const SKP_int16 SKP_Silk_SWB_detect_B_HP_Q13[ NB_SOS ][ 3 ] = { //{400, -550, 400}, {400, 130, 400}, {400, 390, 400} {575, -948, 575}, {575, -221, 575}, {575, 104, 575} }; const SKP_int16 SKP_Silk_SWB_detect_A_HP_Q13[ NB_SOS ][ 2 ] = { {14613, 6868}, {12883, 7337}, {11586, 7911} //{14880, 6900}, {14400, 7300}, {13700, 7800} }; /* Decoder high-pass filter coefficients for 24 kHz sampling, -6 dB @ 44 Hz */ const SKP_int16 SKP_Silk_Dec_A_HP_24[ DEC_HP_ORDER ] = {-16220, 8030}; // second order AR coefs, Q13 const SKP_int16 SKP_Silk_Dec_B_HP_24[ DEC_HP_ORDER + 1 ] = {8000, -16000, 8000}; // second order MA coefs, Q13 /* Decoder high-pass filter coefficients for 16 kHz sampling, - 6 dB @ 46 Hz */ const SKP_int16 SKP_Silk_Dec_A_HP_16[ DEC_HP_ORDER ] = {-16127, 7940}; // second order AR coefs, Q13 const SKP_int16 SKP_Silk_Dec_B_HP_16[ DEC_HP_ORDER + 1 ] = {8000, -16000, 8000}; // second order MA coefs, Q13 /* Decoder high-pass filter coefficients for 12 kHz sampling, -6 dB @ 44 Hz */ const SKP_int16 SKP_Silk_Dec_A_HP_12[ DEC_HP_ORDER ] = {-16043, 7859}; // second order AR coefs, Q13 const SKP_int16 SKP_Silk_Dec_B_HP_12[ DEC_HP_ORDER + 1 ] = {8000, -16000, 8000}; // second order MA coefs, Q13 /* Decoder high-pass filter coefficients for 8 kHz sampling, -6 dB @ 43 Hz */ const SKP_int16 SKP_Silk_Dec_A_HP_8[ DEC_HP_ORDER ] = {-15885, 7710}; // second order AR coefs, Q13 const SKP_int16 SKP_Silk_Dec_B_HP_8[ DEC_HP_ORDER + 1 ] = {8000, -16000, 8000}; // second order MA coefs, Q13 /* table for LSB coding */ const SKP_uint16 SKP_Silk_lsb_CDF[ 3 ] = {0, 40000, 65535}; /* tables for LTPScale */ const SKP_uint16 SKP_Silk_LTPscale_CDF[ 4 ] = {0, 32000, 48000, 65535}; const SKP_int SKP_Silk_LTPscale_offset = 2; /* tables for VAD flag */ const SKP_uint16 SKP_Silk_vadflag_CDF[ 3 ] = {0, 22000, 65535}; // 66% for speech, 33% for no speech const SKP_int SKP_Silk_vadflag_offset = 1; /* tables for sampling rate */ const SKP_int SKP_Silk_SamplingRates_table[ 4 ] = {8, 12, 16, 24}; const SKP_uint16 SKP_Silk_SamplingRates_CDF[ 5 ] = {0, 16000, 32000, 48000, 65535}; const SKP_int SKP_Silk_SamplingRates_offset = 2; /* tables for NLSF interpolation factor */ const SKP_uint16 SKP_Silk_NLSF_interpolation_factor_CDF[ 6 ] = {0, 3706, 8703, 19226, 30926, 65535}; const SKP_int SKP_Silk_NLSF_interpolation_factor_offset = 4; /* Table for frame termination indication */ const SKP_uint16 SKP_Silk_FrameTermination_CDF[ 5 ] = {0, 20000, 45000, 56000, 65535}; const SKP_int SKP_Silk_FrameTermination_offset = 2; const SKP_uint16 SKP_Silk_FrameTermination_v4_CDF[ 6 ] = {0, 13107, 26214, 39321, 52428, 65535}; const SKP_int SKP_Silk_FrameTermination_v4_offset = 4; /* Table for random seed */ const SKP_uint16 SKP_Silk_Seed_CDF[ 5 ] = {0, 16384, 32768, 49152, 65535}; const SKP_int SKP_Silk_Seed_offset = 2; /* Quantization offsets */ const SKP_int16 SKP_Silk_Quantization_Offsets_Q10[ 2 ][ 2 ] = { { OFFSET_VL_Q10, OFFSET_VH_Q10 }, { OFFSET_UVL_Q10, OFFSET_UVH_Q10 } }; /* Table for LTPScale */ const SKP_int16 SKP_Silk_LTPScales_table_Q14[ 3 ] = { 15565, 11469, 8192 }; #if SWITCH_TRANSITION_FILTERING /* Elliptic/Cauer filters designed with 0.1 dB passband ripple, 80 dB minimum stopband attenuation, and [0.95 : 0.15 : 0.35] normalized cut off frequencies. */ /* Interpolation points for filter coefficients used in the bandwidth transition smoother */ const SKP_int32 SKP_Silk_Transition_LP_B_Q28[ TRANSITION_INT_NUM ][ TRANSITION_NB ] = { { 250767114, 501534038, 250767114 }, { 209867381, 419732057, 209867381 }, { 170987846, 341967853, 170987846 }, { 131531482, 263046905, 131531482 }, { 89306658, 178584282, 89306658 } }; /* Interpolation points for filter coefficients used in the bandwidth transition smoother */ const SKP_int32 SKP_Silk_Transition_LP_A_Q28[ TRANSITION_INT_NUM ][ TRANSITION_NA ] = { { 506393414, 239854379 }, { 411067935, 169683996 }, { 306733530, 116694253 }, { 185807084, 77959395 }, { 35497197, 57401098 } }; #endif #ifdef __cplusplus } #endif h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_bwexpander.c0000644000175000017500000000535011513063445022054 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_SigProc_FIX.h" /* Chirp (bandwidth expand) LP AR filter */ void SKP_Silk_bwexpander( SKP_int16 *ar, /* I/O AR filter to be expanded (without leading 1) */ const SKP_int d, /* I Length of ar */ SKP_int32 chirp_Q16 /* I Chirp factor (typically in the range 0 to 1) */ ) { SKP_int i; SKP_int32 chirp_minus_one_Q16; chirp_minus_one_Q16 = chirp_Q16 - 65536; /* NB: Dont use SKP_SMULWB, instead of SKP_RSHIFT_ROUND( SKP_MUL() , 16 ), below. */ /* Bias in SKP_SMULWB can lead to unstable filters */ for( i = 0; i < d - 1; i++ ) { ar[ i ] = (SKP_int16)SKP_RSHIFT_ROUND( SKP_MUL( chirp_Q16, ar[ i ] ), 16 ); chirp_Q16 += SKP_RSHIFT_ROUND( SKP_MUL( chirp_Q16, chirp_minus_one_Q16 ), 16 ); } ar[ d - 1 ] = (SKP_int16)SKP_RSHIFT_ROUND( SKP_MUL( chirp_Q16, ar[ d - 1 ] ), 16 ); } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_VQ_nearest_neighbor_FIX.c0000644000175000017500000001364011513063445024350 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" /* Entropy constrained MATRIX-weighted VQ, hard-coded to 5-element vectors, for a single input data vector */ void SKP_Silk_VQ_WMat_EC_FIX( SKP_int *ind, /* O index of best codebook vector */ SKP_int32 *rate_dist_Q14, /* O best weighted quantization error + mu * rate*/ const SKP_int16 *in_Q14, /* I input vector to be quantized */ const SKP_int32 *W_Q18, /* I weighting matrix */ const SKP_int16 *cb_Q14, /* I codebook */ const SKP_int16 *cl_Q6, /* I code length for each codebook vector */ const SKP_int mu_Q8, /* I tradeoff between weighted error and rate */ SKP_int L /* I number of vectors in codebook */ ) { SKP_int k; const SKP_int16 *cb_row_Q14; SKP_int32 sum1_Q14, sum2_Q16, diff_Q14_01, diff_Q14_23, diff_Q14_4; /* Loop over codebook */ *rate_dist_Q14 = SKP_int32_MAX; cb_row_Q14 = cb_Q14; for( k = 0; k < L; k++ ) { /* Pack pairs of int16 values per int32 */ diff_Q14_01 = (SKP_uint16)( in_Q14[ 0 ] - cb_row_Q14[ 0 ] ) | SKP_LSHIFT( ( SKP_int32 )in_Q14[ 1 ] - cb_row_Q14[ 1 ], 16 ); diff_Q14_23 = (SKP_uint16)( in_Q14[ 2 ] - cb_row_Q14[ 2 ] ) | SKP_LSHIFT( ( SKP_int32 )in_Q14[ 3 ] - cb_row_Q14[ 3 ], 16 ); diff_Q14_4 = in_Q14[ 4 ] - cb_row_Q14[ 4 ]; /* Weighted rate */ sum1_Q14 = SKP_SMULBB( mu_Q8, cl_Q6[ k ] ); SKP_assert( sum1_Q14 >= 0 ); /* Add weighted quantization error, assuming W_Q18 is symmetric */ /* NOTE: the code below loads two int16 values as one int32, and multiplies each using the */ /* SMLAWB and SMLAWT instructions. On a big-endian CPU the two int16 variables would be */ /* loaded in reverse order and the code will give the wrong result. In that case swapping */ /* the SMLAWB and SMLAWT instructions should solve the problem. */ /* first row of W_Q18 */ sum2_Q16 = SKP_SMULWT( W_Q18[ 1 ], diff_Q14_01 ); sum2_Q16 = SKP_SMLAWB( sum2_Q16, W_Q18[ 2 ], diff_Q14_23 ); sum2_Q16 = SKP_SMLAWT( sum2_Q16, W_Q18[ 3 ], diff_Q14_23 ); sum2_Q16 = SKP_SMLAWB( sum2_Q16, W_Q18[ 4 ], diff_Q14_4 ); sum2_Q16 = SKP_LSHIFT( sum2_Q16, 1 ); sum2_Q16 = SKP_SMLAWB( sum2_Q16, W_Q18[ 0 ], diff_Q14_01 ); sum1_Q14 = SKP_SMLAWB( sum1_Q14, sum2_Q16, diff_Q14_01 ); /* second row of W_Q18 */ sum2_Q16 = SKP_SMULWB( W_Q18[ 7 ], diff_Q14_23 ); sum2_Q16 = SKP_SMLAWT( sum2_Q16, W_Q18[ 8 ], diff_Q14_23 ); sum2_Q16 = SKP_SMLAWB( sum2_Q16, W_Q18[ 9 ], diff_Q14_4 ); sum2_Q16 = SKP_LSHIFT( sum2_Q16, 1 ); sum2_Q16 = SKP_SMLAWT( sum2_Q16, W_Q18[ 6 ], diff_Q14_01 ); sum1_Q14 = SKP_SMLAWT( sum1_Q14, sum2_Q16, diff_Q14_01 ); /* third row of W_Q18 */ sum2_Q16 = SKP_SMULWT( W_Q18[ 13 ], diff_Q14_23 ); sum2_Q16 = SKP_SMLAWB( sum2_Q16, W_Q18[ 14 ], diff_Q14_4 ); sum2_Q16 = SKP_LSHIFT( sum2_Q16, 1 ); sum2_Q16 = SKP_SMLAWB( sum2_Q16, W_Q18[ 12 ], diff_Q14_23 ); sum1_Q14 = SKP_SMLAWB( sum1_Q14, sum2_Q16, diff_Q14_23 ); /* fourth row of W_Q18 */ sum2_Q16 = SKP_SMULWB( W_Q18[ 19 ], diff_Q14_4 ); sum2_Q16 = SKP_LSHIFT( sum2_Q16, 1 ); sum2_Q16 = SKP_SMLAWT( sum2_Q16, W_Q18[ 18 ], diff_Q14_23 ); sum1_Q14 = SKP_SMLAWT( sum1_Q14, sum2_Q16, diff_Q14_23 ); /* last row of W_Q18 */ sum2_Q16 = SKP_SMULWB( W_Q18[ 24 ], diff_Q14_4 ); sum1_Q14 = SKP_SMLAWB( sum1_Q14, sum2_Q16, diff_Q14_4 ); SKP_assert( sum1_Q14 >= 0 ); /* find best */ if( sum1_Q14 < *rate_dist_Q14 ) { *rate_dist_Q14 = sum1_Q14; *ind = k; } /* Go to next cbk vector */ cb_row_Q14 += LTP_ORDER; } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_resample_3_2.c0000644000175000017500000000737311513063445022177 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * File Name: SKP_Silk_resample_3_2.c * * * * Resamples by a factor 3/2 * * * * Copyright 2008 (c), Skype Limited * * All rights reserved. * * * * Date: 081113 * * */ #include "SKP_Silk_SigProc_FIX.h" #define IN_SUBFR_LEN_RESAMPLE_3_2 80 /* Resamples by a factor 3/2 */ void SKP_Silk_resample_3_2( SKP_int16 *out, /* O: Fs_high signal [inLen*3/2] */ SKP_int32 *S, /* I/O: State vector [7+4] */ const SKP_int16 *in, /* I: Fs_low signal [inLen] */ SKP_int inLen /* I: Input length, must be a multiple of 2 */ ) { SKP_int LSubFrameIn, LSubFrameOut; SKP_int16 outH[ 3 * IN_SUBFR_LEN_RESAMPLE_3_2 ]; SKP_int32 scratch[ ( 9 * IN_SUBFR_LEN_RESAMPLE_3_2 ) / 2 ]; /* Check that input is multiple of 2 */ SKP_assert( inLen % 2 == 0 ); while( inLen > 0 ) { LSubFrameIn = SKP_min_int( IN_SUBFR_LEN_RESAMPLE_3_2, inLen ); LSubFrameOut = SKP_SMULWB( 98304, LSubFrameIn ); /* Upsample by a factor 3 */ SKP_Silk_resample_3_1( outH, &S[ 0 ], in, LSubFrameIn ); /* Downsample by a factor 2 */ /* Scratch size needs to be: 3 * LSubFrameOut * sizeof( SKP_int32 ) */ SKP_Silk_resample_1_2_coarse( outH, &S[ 7 ], out, scratch, LSubFrameOut ); in += LSubFrameIn; out += LSubFrameOut; inLen -= LSubFrameIn; } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_A2NLSF.c0000644000175000017500000002646411513063445020653 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* Conversion between prediction filter coefficients and NLSFs */ /* Requires the order to be an even number */ /* A piecewise linear approximation maps LSF <-> cos(LSF) */ /* Therefore the result is not accurate NLSFs, but the two */ /* function are accurate inverses of each other */ #include "SKP_Silk_SigProc_FIX.h" /* Number of binary divisions, when not in low complexity mode */ #define BIN_DIV_STEPS_A2NLSF_FIX 2 /* must be no higher than 16 - log2( LSF_COS_TAB_SZ_FIX ) */ #define QPoly 16 #define MAX_ITERATIONS_A2NLSF_FIX 50 /* Flag for using 2x as many cosine sampling points, reduces the risk of missing a root */ #define OVERSAMPLE_COSINE_TABLE 0 /* Helper function for A2NLSF(..) */ /* Transforms polynomials from cos(n*f) to cos(f)^n */ SKP_INLINE void SKP_Silk_A2NLSF_trans_poly( SKP_int32 *p, /* I/O Polynomial */ const SKP_int dd /* I Polynomial order (= filter order / 2 ) */ ) { SKP_int k, n; for( k = 2; k <= dd; k++ ) { for( n = dd; n > k; n-- ) { p[ n - 2 ] -= p[ n ]; } p[ k - 2 ] -= SKP_LSHIFT( p[ k ], 1 ); } } /* Helper function for A2NLSF(..) */ /* Polynomial evaluation */ SKP_INLINE SKP_int32 SKP_Silk_A2NLSF_eval_poly( /* return the polynomial evaluation, in QPoly */ SKP_int32 *p, /* I Polynomial, QPoly */ const SKP_int32 x, /* I Evaluation point, Q12 */ const SKP_int dd /* I Order */ ) { SKP_int n; SKP_int32 x_Q16, y32; y32 = p[ dd ]; /* QPoly */ x_Q16 = SKP_LSHIFT( x, 4 ); for( n = dd - 1; n >= 0; n-- ) { y32 = SKP_SMLAWW( p[ n ], y32, x_Q16 ); /* QPoly */ } return y32; } SKP_INLINE void SKP_Silk_A2NLSF_init( const SKP_int32 *a_Q16, SKP_int32 *P, SKP_int32 *Q, const SKP_int dd ) { SKP_int k; /* Convert filter coefs to even and odd polynomials */ P[dd] = SKP_LSHIFT( 1, QPoly ); Q[dd] = SKP_LSHIFT( 1, QPoly ); for( k = 0; k < dd; k++ ) { #if( QPoly < 16 ) P[ k ] = SKP_RSHIFT_ROUND( -a_Q16[ dd - k - 1 ] - a_Q16[ dd + k ], 16 - QPoly ); /* QPoly */ Q[ k ] = SKP_RSHIFT_ROUND( -a_Q16[ dd - k - 1 ] + a_Q16[ dd + k ], 16 - QPoly ); /* QPoly */ #elif( Qpoly == 16 ) P[ k ] = -a_Q16[ dd - k - 1 ] - a_Q16[ dd + k ]; // QPoly Q[ k ] = -a_Q16[ dd - k - 1 ] + a_Q16[ dd + k ]; // QPoly #else P[ k ] = SKP_LSHIFT( -a_Q16[ dd - k - 1 ] - a_Q16[ dd + k ], QPoly - 16 ); /* QPoly */ Q[ k ] = SKP_LSHIFT( -a_Q16[ dd - k - 1 ] + a_Q16[ dd + k ], QPoly - 16 ); /* QPoly */ #endif } /* Divide out zeros as we have that for even filter orders, */ /* z = 1 is always a root in Q, and */ /* z = -1 is always a root in P */ for( k = dd; k > 0; k-- ) { P[ k - 1 ] -= P[ k ]; Q[ k - 1 ] += Q[ k ]; } /* Transform polynomials from cos(n*f) to cos(f)^n */ SKP_Silk_A2NLSF_trans_poly( P, dd ); SKP_Silk_A2NLSF_trans_poly( Q, dd ); } /* Compute Normalized Line Spectral Frequencies (NLSFs) from whitening filter coefficients */ /* If not all roots are found, the a_Q16 coefficients are bandwidth expanded until convergence. */ void SKP_Silk_A2NLSF( SKP_int *NLSF, /* O Normalized Line Spectral Frequencies, Q15 (0 - (2^15-1)), [d] */ SKP_int32 *a_Q16, /* I/O Monic whitening filter coefficients in Q16 [d] */ const SKP_int d /* I Filter order (must be even) */ ) { SKP_int i, k, m, dd, root_ix, ffrac; SKP_int32 xlo, xhi, xmid; SKP_int32 ylo, yhi, ymid; SKP_int32 nom, den; SKP_int32 P[ SigProc_MAX_ORDER_LPC / 2 + 1 ]; SKP_int32 Q[ SigProc_MAX_ORDER_LPC / 2 + 1 ]; SKP_int32 *PQ[ 2 ]; SKP_int32 *p; /* Store pointers to array */ PQ[ 0 ] = P; PQ[ 1 ] = Q; dd = SKP_RSHIFT( d, 1 ); SKP_Silk_A2NLSF_init( a_Q16, P, Q, dd ); /* Find roots, alternating between P and Q */ p = P; /* Pointer to polynomial */ xlo = SKP_Silk_LSFCosTab_FIX_Q12[ 0 ]; // Q12 ylo = SKP_Silk_A2NLSF_eval_poly( p, xlo, dd ); if( ylo < 0 ) { /* Set the first NLSF to zero and move on to the next */ NLSF[ 0 ] = 0; p = Q; /* Pointer to polynomial */ ylo = SKP_Silk_A2NLSF_eval_poly( p, xlo, dd ); root_ix = 1; /* Index of current root */ } else { root_ix = 0; /* Index of current root */ } k = 1; /* Loop counter */ i = 0; /* Counter for bandwidth expansions applied */ while( 1 ) { /* Evaluate polynomial */ #if OVERSAMPLE_COSINE_TABLE xhi = SKP_Silk_LSFCosTab_FIX_Q12[ k >> 1 ] + ( ( SKP_Silk_LSFCosTab_FIX_Q12[ ( k + 1 ) >> 1 ] - SKP_Silk_LSFCosTab_FIX_Q12[ k >> 1 ] ) >> 1 ); /* Q12 */ #else xhi = SKP_Silk_LSFCosTab_FIX_Q12[ k ]; /* Q12 */ #endif yhi = SKP_Silk_A2NLSF_eval_poly( p, xhi, dd ); /* Detect zero crossing */ if( ( ylo <= 0 && yhi >= 0 ) || ( ylo >= 0 && yhi <= 0 ) ) { /* Binary division */ #if OVERSAMPLE_COSINE_TABLE ffrac = -128; #else ffrac = -256; #endif for( m = 0; m < BIN_DIV_STEPS_A2NLSF_FIX; m++ ) { /* Evaluate polynomial */ xmid = SKP_RSHIFT_ROUND( xlo + xhi, 1 ); ymid = SKP_Silk_A2NLSF_eval_poly( p, xmid, dd ); /* Detect zero crossing */ if( ( ylo <= 0 && ymid >= 0 ) || ( ylo >= 0 && ymid <= 0 ) ) { /* Reduce frequency */ xhi = xmid; yhi = ymid; } else { /* Increase frequency */ xlo = xmid; ylo = ymid; #if OVERSAMPLE_COSINE_TABLE ffrac = SKP_ADD_RSHIFT( ffrac, 64, m ); #else ffrac = SKP_ADD_RSHIFT( ffrac, 128, m ); #endif } } /* Interpolate */ if( SKP_abs( ylo ) < 65536 ) { /* Avoid dividing by zero */ den = ylo - yhi; nom = SKP_LSHIFT( ylo, 8 - BIN_DIV_STEPS_A2NLSF_FIX ) + SKP_RSHIFT( den, 1 ); if( den != 0 ) { ffrac += SKP_DIV32( nom, den ); } } else { /* No risk of dividing by zero because abs(ylo - yhi) >= abs(ylo) >= 65536 */ ffrac += SKP_DIV32( ylo, SKP_RSHIFT( ylo - yhi, 8 - BIN_DIV_STEPS_A2NLSF_FIX ) ); } #if OVERSAMPLE_COSINE_TABLE NLSF[ root_ix ] = (SKP_int)SKP_min_32( SKP_LSHIFT( (SKP_int32)k, 7 ) + ffrac, SKP_int16_MAX ); #else NLSF[ root_ix ] = (SKP_int)SKP_min_32( SKP_LSHIFT( (SKP_int32)k, 8 ) + ffrac, SKP_int16_MAX ); #endif SKP_assert( NLSF[ root_ix ] >= 0 ); SKP_assert( NLSF[ root_ix ] <= 32767 ); root_ix++; /* Next root */ if( root_ix >= d ) { /* Found all roots */ break; } /* Alternate pointer to polynomial */ p = PQ[ root_ix & 1 ]; /* Evaluate polynomial */ #if OVERSAMPLE_COSINE_TABLE xlo = SKP_Silk_LSFCosTab_FIX_Q12[ ( k - 1 ) >> 1 ] + ( ( SKP_Silk_LSFCosTab_FIX_Q12[ k >> 1 ] - SKP_Silk_LSFCosTab_FIX_Q12[ ( k - 1 ) >> 1 ] ) >> 1 ); // Q12 #else xlo = SKP_Silk_LSFCosTab_FIX_Q12[ k - 1 ]; // Q12 #endif ylo = SKP_LSHIFT( 1 - ( root_ix & 2 ), 12 ); } else { /* Increment loop counter */ k++; xlo = xhi; ylo = yhi; #if OVERSAMPLE_COSINE_TABLE if( k > 2 * LSF_COS_TAB_SZ_FIX ) { #else if( k > LSF_COS_TAB_SZ_FIX ) { #endif i++; if( i > MAX_ITERATIONS_A2NLSF_FIX ) { /* Set NLSFs to white spectrum and exit */ NLSF[ 0 ] = SKP_DIV32_16( 1 << 15, d + 1 ); for( k = 1; k < d; k++ ) { NLSF[ k ] = SKP_SMULBB( k + 1, NLSF[ 0 ] ); } return; } /* Error: Apply progressively more bandwidth expansion and run again */ SKP_Silk_bwexpander_32( a_Q16, d, 65536 - SKP_SMULBB( 66, i ) ); // 66_Q16 = 0.001 SKP_Silk_A2NLSF_init( a_Q16, P, Q, dd ); p = P; /* Pointer to polynomial */ xlo = SKP_Silk_LSFCosTab_FIX_Q12[ 0 ]; // Q12 ylo = SKP_Silk_A2NLSF_eval_poly( p, xlo, dd ); if( ylo < 0 ) { /* Set the first NLSF to zero and move on to the next */ NLSF[ 0 ] = 0; p = Q; /* Pointer to polynomial */ ylo = SKP_Silk_A2NLSF_eval_poly( p, xlo, dd ); root_ix = 1; /* Index of current root */ } else { root_ix = 0; /* Index of current root */ } k = 1; /* Reset loop counter */ } } } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_range_coder.c0000644000175000017500000003407011513063445022166 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main.h" /* Range encoder for one symbol */ void SKP_Silk_range_encoder( SKP_Silk_range_coder_state *psRC, /* I/O compressor data structure */ const SKP_int data, /* I uncompressed data */ const SKP_uint16 prob[] /* I cumulative density functions */ ) { SKP_uint32 low_Q16, high_Q16; SKP_uint32 base_tmp, range_Q32; /* Copy structure data */ SKP_uint32 base_Q32 = psRC->base_Q32; SKP_uint32 range_Q16 = psRC->range_Q16; SKP_int32 bufferIx = psRC->bufferIx; SKP_uint8 *buffer = psRC->buffer; if( psRC->error ) { return; } /* Update interval */ low_Q16 = prob[ data ]; high_Q16 = prob[ data + 1 ]; base_tmp = base_Q32; /* save current base, to test for carry */ base_Q32 += SKP_MUL_uint( range_Q16, low_Q16 ); range_Q32 = SKP_MUL_uint( range_Q16, high_Q16 - low_Q16 ); /* Check for carry */ if( base_Q32 < base_tmp ) { /* Propagate carry in buffer */ SKP_int bufferIx_tmp = bufferIx; while( ( ++buffer[ --bufferIx_tmp ] ) == 0 ); } /* Check normalization */ if( range_Q32 & 0xFF000000 ) { /* No normalization */ range_Q16 = SKP_RSHIFT_uint( range_Q32, 16 ); } else { if( range_Q32 & 0xFFFF0000 ) { /* Normalization of 8 bits shift */ range_Q16 = SKP_RSHIFT_uint( range_Q32, 8 ); } else { /* Normalization of 16 bits shift */ range_Q16 = range_Q32; /* Make sure not to write beyond buffer */ if( bufferIx >= psRC->bufferLength ) { psRC->error = RANGE_CODER_WRITE_BEYOND_BUFFER; return; } /* Write one byte to buffer */ buffer[ bufferIx++ ] = (SKP_uint8)( SKP_RSHIFT_uint( base_Q32, 24 ) ); base_Q32 = SKP_LSHIFT_ovflw( base_Q32, 8 ); } /* Make sure not to write beyond buffer */ if( bufferIx >= psRC->bufferLength ) { psRC->error = RANGE_CODER_WRITE_BEYOND_BUFFER; return; } /* Write one byte to buffer */ buffer[ bufferIx++ ] = (SKP_uint8)( SKP_RSHIFT_uint( base_Q32, 24 ) ); base_Q32 = SKP_LSHIFT_ovflw( base_Q32, 8 ); } /* Copy structure data back */ psRC->base_Q32 = base_Q32; psRC->range_Q16 = range_Q16; psRC->bufferIx = bufferIx; } /* Range encoder for multiple symbols */ void SKP_Silk_range_encoder_multi( SKP_Silk_range_coder_state *psRC, /* I/O compressor data structure */ const SKP_int data[], /* I uncompressed data [nSymbols] */ const SKP_uint16 * const prob[], /* I cumulative density functions */ const SKP_int nSymbols /* I number of data symbols */ ) { SKP_int k; for( k = 0; k < nSymbols; k++ ) { SKP_Silk_range_encoder( psRC, data[ k ], prob[ k ] ); } } /* Range decoder for one symbol */ void SKP_Silk_range_decoder( SKP_int data[], /* O uncompressed data */ SKP_Silk_range_coder_state *psRC, /* I/O compressor data structure */ const SKP_uint16 prob[], /* I cumulative density function */ SKP_int probIx /* I initial (middle) entry of cdf */ ) { SKP_uint32 low_Q16, high_Q16; SKP_uint32 base_tmp, range_Q32; /* Copy structure data */ SKP_uint32 base_Q32 = psRC->base_Q32; SKP_uint32 range_Q16 = psRC->range_Q16; SKP_int32 bufferIx = psRC->bufferIx; SKP_uint8 *buffer = &psRC->buffer[ 4 ]; if( psRC->error ) { /* Set output to zero */ *data = 0; return; } high_Q16 = prob[ probIx ]; base_tmp = SKP_MUL_uint( range_Q16, high_Q16 ); if( base_tmp > base_Q32 ) { while( 1 ) { low_Q16 = prob[ --probIx ]; base_tmp = SKP_MUL_uint( range_Q16, low_Q16 ); if( base_tmp <= base_Q32 ) { break; } high_Q16 = low_Q16; /* Test for out of range */ if( high_Q16 == 0 ) { psRC->error = RANGE_CODER_CDF_OUT_OF_RANGE; /* Set output to zero */ *data = 0; return; } } } else { while( 1 ) { low_Q16 = high_Q16; high_Q16 = prob[ ++probIx ]; base_tmp = SKP_MUL_uint( range_Q16, high_Q16 ); if( base_tmp > base_Q32 ) { probIx--; break; } /* Test for out of range */ if( high_Q16 == 0xFFFF ) { psRC->error = RANGE_CODER_CDF_OUT_OF_RANGE; /* Set output to zero */ *data = 0; return; } } } *data = probIx; base_Q32 -= SKP_MUL_uint( range_Q16, low_Q16 ); range_Q32 = SKP_MUL_uint( range_Q16, high_Q16 - low_Q16 ); /* Check normalization */ if( range_Q32 & 0xFF000000 ) { /* No normalization */ range_Q16 = SKP_RSHIFT_uint( range_Q32, 16 ); } else { if( range_Q32 & 0xFFFF0000 ) { /* Normalization of 8 bits shift */ range_Q16 = SKP_RSHIFT_uint( range_Q32, 8 ); /* Check for errors */ if( SKP_RSHIFT_uint( base_Q32, 24 ) ) { psRC->error = RANGE_CODER_NORMALIZATION_FAILED; /* Set output to zero */ *data = 0; return; } } else { /* Normalization of 16 bits shift */ range_Q16 = range_Q32; /* Check for errors */ if( SKP_RSHIFT( base_Q32, 16 ) ) { psRC->error = RANGE_CODER_NORMALIZATION_FAILED; /* Set output to zero */ *data = 0; return; } /* Update base */ base_Q32 = SKP_LSHIFT_uint( base_Q32, 8 ); /* Make sure not to read beyond buffer */ if( bufferIx < psRC->bufferLength ) { /* Read one byte from buffer */ base_Q32 |= (SKP_uint32)buffer[ bufferIx++ ]; } } /* Update base */ base_Q32 = SKP_LSHIFT_uint( base_Q32, 8 ); /* Make sure not to read beyond buffer */ if( bufferIx < psRC->bufferLength ) { /* Read one byte from buffer */ base_Q32 |= (SKP_uint32)buffer[ bufferIx++ ]; } } /* Check for zero interval length */ if( range_Q16 == 0 ) { psRC->error = RANGE_CODER_ZERO_INTERVAL_WIDTH; /* Set output to zero */ *data = 0; return; } /* Copy structure data back */ psRC->base_Q32 = base_Q32; psRC->range_Q16 = range_Q16; psRC->bufferIx = bufferIx; } /* Range decoder for multiple symbols */ void SKP_Silk_range_decoder_multi( SKP_int data[], /* O uncompressed data [nSymbols] */ SKP_Silk_range_coder_state *psRC, /* I/O compressor data structure */ const SKP_uint16 * const prob[], /* I cumulative density functions */ const SKP_int probStartIx[], /* I initial (middle) entries of cdfs [nSymbols] */ const SKP_int nSymbols /* I number of data symbols */ ) { SKP_int k; for( k = 0; k < nSymbols; k++ ) { SKP_Silk_range_decoder( &data[ k ], psRC, prob[ k ], probStartIx[ k ] ); } } /* Initialize range encoder */ void SKP_Silk_range_enc_init( SKP_Silk_range_coder_state *psRC /* O compressor data structure */ ) { /* Initialize structure */ psRC->bufferLength = MAX_ARITHM_BYTES; psRC->range_Q16 = 0x0000FFFF; psRC->bufferIx = 0; psRC->base_Q32 = 0; psRC->error = 0; } /* Initialize range decoder */ void SKP_Silk_range_dec_init( SKP_Silk_range_coder_state *psRC, /* O compressor data structure */ const SKP_uint8 buffer[], /* I buffer for compressed data [bufferLength] */ const SKP_int32 bufferLength /* I buffer length (in bytes) */ ) { /* check input */ if( bufferLength > MAX_ARITHM_BYTES ) { psRC->error = RANGE_CODER_DEC_PAYLOAD_TOO_LONG; return; } /* Initialize structure */ /* Copy to internal buffer */ SKP_memcpy( psRC->buffer, buffer, bufferLength * sizeof( SKP_uint8 ) ); psRC->bufferLength = bufferLength; psRC->bufferIx = 0; psRC->base_Q32 = SKP_LSHIFT_uint( (SKP_uint32)buffer[ 0 ], 24 ) | SKP_LSHIFT_uint( (SKP_uint32)buffer[ 1 ], 16 ) | SKP_LSHIFT_uint( (SKP_uint32)buffer[ 2 ], 8 ) | (SKP_uint32)buffer[ 3 ]; psRC->range_Q16 = 0x0000FFFF; psRC->error = 0; } /* Determine length of bitstream */ SKP_int SKP_Silk_range_coder_get_length( /* O returns number of BITS in stream */ const SKP_Silk_range_coder_state *psRC, /* I compressed data structure */ SKP_int *nBytes /* O number of BYTES in stream */ ) { SKP_int nBits; /* Number of additional bits (1..9) required to be stored to stream */ nBits = SKP_LSHIFT( psRC->bufferIx, 3 ) + SKP_Silk_CLZ32( psRC->range_Q16 - 1 ) - 14; *nBytes = SKP_RSHIFT( nBits + 7, 3 ); /* Return number of bits in bitstream */ return nBits; } /* Write shortest uniquely decodable stream to buffer, and determine its length */ void SKP_Silk_range_enc_wrap_up( SKP_Silk_range_coder_state *psRC /* I/O compressed data structure */ ) { SKP_int bufferIx_tmp, bits_to_store, bits_in_stream, nBytes, mask; SKP_uint32 base_Q24; /* Lower limit of interval, shifted 8 bits to the right */ base_Q24 = SKP_RSHIFT_uint( psRC->base_Q32, 8 ); bits_in_stream = SKP_Silk_range_coder_get_length( psRC, &nBytes ); /* Number of additional bits (1..9) required to be stored to stream */ bits_to_store = bits_in_stream - SKP_LSHIFT( psRC->bufferIx, 3 ); /* Round up to required resolution */ base_Q24 += SKP_RSHIFT_uint( 0x00800000, bits_to_store - 1 ); base_Q24 &= SKP_LSHIFT_ovflw( 0xFFFFFFFF, 24 - bits_to_store ); /* Check for carry */ if( base_Q24 & 0x01000000 ) { /* Propagate carry in buffer */ bufferIx_tmp = psRC->bufferIx; while( ( ++( psRC->buffer[ --bufferIx_tmp ] ) ) == 0 ); } /* Store to stream, making sure not to write beyond buffer */ if( psRC->bufferIx < psRC->bufferLength ) { psRC->buffer[ psRC->bufferIx++ ] = (SKP_uint8)SKP_RSHIFT_uint( base_Q24, 16 ); if( bits_to_store > 8 ) { if( psRC->bufferIx < psRC->bufferLength ) { psRC->buffer[ psRC->bufferIx++ ] = (SKP_uint8)SKP_RSHIFT_uint( base_Q24, 8 ); } } } /* Fill up any remaining bits in the last byte with 1s */ if( bits_in_stream & 7 ) { mask = SKP_RSHIFT( 0xFF, bits_in_stream & 7 ); if( nBytes - 1 < psRC->bufferLength ) { psRC->buffer[ nBytes - 1 ] |= mask; } } } /* Check that any remaining bits in the last byte are set to 1 */ void SKP_Silk_range_coder_check_after_decoding( SKP_Silk_range_coder_state *psRC /* I/O compressed data structure */ ) { SKP_int bits_in_stream, nBytes, mask; bits_in_stream = SKP_Silk_range_coder_get_length( psRC, &nBytes ); /* Make sure not to read beyond buffer */ if( nBytes - 1 >= psRC->bufferLength ) { psRC->error = RANGE_CODER_DECODER_CHECK_FAILED; return; } /* Test any remaining bits in last byte */ if( bits_in_stream & 7 ) { mask = SKP_RSHIFT( 0xFF, bits_in_stream & 7 ); if( ( psRC->buffer[ nBytes - 1 ] & mask ) != mask ) { psRC->error = RANGE_CODER_DECODER_CHECK_FAILED; return; } } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_find_pitch_lags_FIX.c0000644000175000017500000001445611513063445023547 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" /* Find pitch lags */ void SKP_Silk_find_pitch_lags_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O encoder state */ SKP_Silk_encoder_control_FIX *psEncCtrl, /* I/O encoder control */ SKP_int16 res[], /* O residual */ const SKP_int16 x[] /* I Speech signal */ ) { SKP_Silk_predict_state_FIX *psPredSt = &psEnc->sPred; SKP_int buf_len, i; SKP_int32 scale; SKP_int32 thrhld_Q15; const SKP_int16 *x_buf, *x_buf_ptr; SKP_int16 Wsig[ FIND_PITCH_LPC_WIN_MAX ], *Wsig_ptr; SKP_int32 auto_corr[ FIND_PITCH_LPC_ORDER_MAX + 1 ]; SKP_int16 rc_Q15[ FIND_PITCH_LPC_ORDER_MAX ]; SKP_int32 A_Q24[ FIND_PITCH_LPC_ORDER_MAX ]; SKP_int32 FiltState[ FIND_PITCH_LPC_ORDER_MAX ]; SKP_int16 A_Q12[ FIND_PITCH_LPC_ORDER_MAX ]; /******************************************/ /* Setup buffer lengths etc based of Fs. */ /******************************************/ buf_len = SKP_ADD_LSHIFT( psEnc->sCmn.la_pitch, psEnc->sCmn.frame_length, 1 ); /* Safty check */ SKP_assert( buf_len >= psPredSt->pitch_LPC_win_length ); x_buf = x - psEnc->sCmn.frame_length; /*************************************/ /* Estimate LPC AR coeficients */ /*************************************/ /* Calculate windowed signal */ /* First LA_LTP samples */ x_buf_ptr = x_buf + buf_len - psPredSt->pitch_LPC_win_length; Wsig_ptr = Wsig; SKP_Silk_apply_sine_window( Wsig_ptr, x_buf_ptr, 1, psEnc->sCmn.la_pitch ); /* Middle un - windowed samples */ Wsig_ptr += psEnc->sCmn.la_pitch; x_buf_ptr += psEnc->sCmn.la_pitch; SKP_memcpy( Wsig_ptr, x_buf_ptr, ( psPredSt->pitch_LPC_win_length - SKP_LSHIFT( psEnc->sCmn.la_pitch, 1 ) ) * sizeof( SKP_int16 ) ); /* Last LA_LTP samples */ Wsig_ptr += psPredSt->pitch_LPC_win_length - SKP_LSHIFT( psEnc->sCmn.la_pitch, 1 ); x_buf_ptr += psPredSt->pitch_LPC_win_length - SKP_LSHIFT( psEnc->sCmn.la_pitch, 1 ); SKP_Silk_apply_sine_window( Wsig_ptr, x_buf_ptr, 2, psEnc->sCmn.la_pitch ); /* Calculate autocorrelation sequence */ SKP_Silk_autocorr( auto_corr, &scale, Wsig, psPredSt->pitch_LPC_win_length, psEnc->sCmn.pitchEstimationLPCOrder + 1 ); /* add white noise, as fraction of energy */ auto_corr[ 0 ] = SKP_SMLAWB( auto_corr[ 0 ], auto_corr[ 0 ], FIND_PITCH_WHITE_NOISE_FRACTION_Q16 ); /* calculate the reflection coefficients using schur */ SKP_Silk_schur( rc_Q15, auto_corr, psEnc->sCmn.pitchEstimationLPCOrder ); /* convert reflection coefficients to prediction coefficients */ SKP_Silk_k2a( A_Q24, rc_Q15, psEnc->sCmn.pitchEstimationLPCOrder ); /* Convert From 32 bit Q24 to 16 bit Q12 coefs */ for( i = 0; i < psEnc->sCmn.pitchEstimationLPCOrder; i++ ) { A_Q12[ i ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT( A_Q24[ i ], 12 ) ); } /* Do BWE */ SKP_Silk_bwexpander( A_Q12, psEnc->sCmn.pitchEstimationLPCOrder, FIND_PITCH_BANDWITH_EXPANSION_Q16 ); /*****************************************/ /* LPC analysis filtering */ /*****************************************/ SKP_memset( FiltState, 0, psEnc->sCmn.pitchEstimationLPCOrder * sizeof( SKP_int16 ) ); SKP_Silk_MA_Prediction( x_buf, A_Q12, FiltState, res, buf_len, psEnc->sCmn.pitchEstimationLPCOrder ); SKP_memset( res, 0, psEnc->sCmn.pitchEstimationLPCOrder * sizeof( SKP_int16 ) ); /* Threshold for pitch estimator */ thrhld_Q15 = ( 1 << 14 ); // 0.5f in Q15 thrhld_Q15 = SKP_SMLABB( thrhld_Q15, -131, psEnc->sCmn.pitchEstimationLPCOrder ); thrhld_Q15 = SKP_SMLABB( thrhld_Q15, -13, ( SKP_int16 )SKP_Silk_SQRT_APPROX( SKP_LSHIFT( ( SKP_int32 )psEnc->speech_activity_Q8, 8 ) ) ); thrhld_Q15 = SKP_SMLABB( thrhld_Q15, 4587, psEnc->sCmn.prev_sigtype ); thrhld_Q15 = SKP_MLA( thrhld_Q15, -31, SKP_RSHIFT( psEncCtrl->input_tilt_Q15, 8 ) ); thrhld_Q15 = SKP_SAT16( thrhld_Q15 ); /*****************************************/ /* Call Pitch estimator */ /*****************************************/ psEncCtrl->sCmn.sigtype = SKP_Silk_pitch_analysis_core( res, psEncCtrl->sCmn.pitchL, &psEncCtrl->sCmn.lagIndex, &psEncCtrl->sCmn.contourIndex, &psEnc->LTPCorr_Q15, psEnc->sCmn.prevLag, psEnc->pitchEstimationThreshold_Q16, ( SKP_int16 )thrhld_Q15, psEnc->sCmn.fs_kHz, psEnc->sCmn.pitchEstimationComplexity ); } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_NLSF_MSVQ_decode.c0000644000175000017500000001103011513063445022620 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main.h" /* NLSF vector decoder */ void SKP_Silk_NLSF_MSVQ_decode( SKP_int *pNLSF_Q15, /* O Pointer to decoded output vector [LPC_ORDER x 1] */ const SKP_Silk_NLSF_CB_struct *psNLSF_CB, /* I Pointer to NLSF codebook struct */ const SKP_int *NLSFIndices, /* I Pointer to NLSF indices [nStages x 1] */ const SKP_int LPC_order /* I LPC order used */ ) { const SKP_int16 *pCB_element; SKP_int s; SKP_int i; /* Check that each index is within valid range */ SKP_assert( 0 <= NLSFIndices[ 0 ] && NLSFIndices[ 0 ] < psNLSF_CB->CBStages[ 0 ].nVectors ); /* Point to the first vector element */ pCB_element = &psNLSF_CB->CBStages[ 0 ].CB_NLSF_Q15[ SKP_MUL( NLSFIndices[ 0 ], LPC_order ) ]; /* Initialize with the codebook vector from stage 0 */ for( i = 0; i < LPC_order; i++ ) { pNLSF_Q15[ i ] = ( SKP_int )pCB_element[ i ]; } for( s = 1; s < psNLSF_CB->nStages; s++ ) { /* Check that each index is within valid range */ SKP_assert( 0 <= NLSFIndices[ s ] && NLSFIndices[ s ] < psNLSF_CB->CBStages[ s ].nVectors ); if( LPC_order == 16 ) { /* Point to the first vector element */ pCB_element = &psNLSF_CB->CBStages[ s ].CB_NLSF_Q15[ SKP_LSHIFT( NLSFIndices[ s ], 4 ) ]; /* Add the codebook vector from the current stage */ pNLSF_Q15[ 0 ] += pCB_element[ 0 ]; pNLSF_Q15[ 1 ] += pCB_element[ 1 ]; pNLSF_Q15[ 2 ] += pCB_element[ 2 ]; pNLSF_Q15[ 3 ] += pCB_element[ 3 ]; pNLSF_Q15[ 4 ] += pCB_element[ 4 ]; pNLSF_Q15[ 5 ] += pCB_element[ 5 ]; pNLSF_Q15[ 6 ] += pCB_element[ 6 ]; pNLSF_Q15[ 7 ] += pCB_element[ 7 ]; pNLSF_Q15[ 8 ] += pCB_element[ 8 ]; pNLSF_Q15[ 9 ] += pCB_element[ 9 ]; pNLSF_Q15[ 10 ] += pCB_element[ 10 ]; pNLSF_Q15[ 11 ] += pCB_element[ 11 ]; pNLSF_Q15[ 12 ] += pCB_element[ 12 ]; pNLSF_Q15[ 13 ] += pCB_element[ 13 ]; pNLSF_Q15[ 14 ] += pCB_element[ 14 ]; pNLSF_Q15[ 15 ] += pCB_element[ 15 ]; } else { /* Point to the first vector element */ pCB_element = &psNLSF_CB->CBStages[ s ].CB_NLSF_Q15[ SKP_SMULBB( NLSFIndices[ s ], LPC_order ) ]; /* Add the codebook vector from the current stage */ for( i = 0; i < LPC_order; i++ ) { pNLSF_Q15[ i ] += pCB_element[ i ]; } } } /* NLSF stabilization */ SKP_Silk_NLSF_stabilize( pNLSF_Q15, psNLSF_CB->NDeltaMin_Q15, LPC_order ); } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_decode_parameters_v4.c0000644000175000017500000001715211513063445023777 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main.h" /* Decode parameters from payload */ void SKP_Silk_decode_parameters_v4( SKP_Silk_decoder_state *psDec, /* I/O State */ SKP_Silk_decoder_control *psDecCtrl, /* I/O Decoder control */ SKP_int q[ MAX_FRAME_LENGTH ], /* O Excitation signal */ const SKP_int fullDecoding /* I Flag to tell if only arithmetic decoding */ ) { SKP_int i, k, Ix, nBytesUsed; SKP_int pNLSF_Q15[ MAX_LPC_ORDER ], pNLSF0_Q15[ MAX_LPC_ORDER ]; const SKP_int16 *cbk_ptr_Q14; const SKP_Silk_NLSF_CB_struct *psNLSF_CB = NULL; SKP_Silk_range_coder_state *psRC = &psDec->sRC; psDec->FrameTermination = SKP_SILK_MORE_FRAMES; psDecCtrl->sigtype = psDec->sigtype[ psDec->nFramesDecoded ]; psDecCtrl->QuantOffsetType = psDec->QuantOffsetType[ psDec->nFramesDecoded ]; psDec->vadFlag = psDec->vadFlagBuf[ psDec->nFramesDecoded ]; psDecCtrl->NLSFInterpCoef_Q2 = psDec->NLSFInterpCoef_Q2[ psDec->nFramesDecoded ]; psDecCtrl->Seed = psDec->Seed[ psDec->nFramesDecoded ]; /* Dequant Gains */ SKP_Silk_gains_dequant( psDecCtrl->Gains_Q16, psDec->GainsIndices[ psDec->nFramesDecoded ], &psDec->LastGainIndex, psDec->nFramesDecoded ); /****************/ /* Decode NLSFs */ /****************/ /* Set pointer to NLSF VQ CB for the current signal type */ psNLSF_CB = psDec->psNLSF_CB[ psDecCtrl->sigtype ]; /* From the NLSF path, decode an NLSF vector */ SKP_Silk_NLSF_MSVQ_decode( pNLSF_Q15, psNLSF_CB, psDec->NLSFIndices[ psDec->nFramesDecoded ], psDec->LPC_order ); /* Convert NLSF parameters to AR prediction filter coefficients */ SKP_Silk_NLSF2A_stable( psDecCtrl->PredCoef_Q12[ 1 ], pNLSF_Q15, psDec->LPC_order ); /* If just reset, e.g., because internal Fs changed, do not allow interpolation */ /* improves the case of packet loss in the first frame after a switch */ if( psDec->first_frame_after_reset == 1 ) { psDecCtrl->NLSFInterpCoef_Q2 = 4; } if( psDecCtrl->NLSFInterpCoef_Q2 < 4 ) { /* Calculation of the interpolated NLSF0 vector from the interpolation factor, */ /* the previous NLSF1, and the current NLSF1 */ for( i = 0; i < psDec->LPC_order; i++ ) { pNLSF0_Q15[ i ] = psDec->prevNLSF_Q15[ i ] + SKP_RSHIFT( SKP_MUL( psDecCtrl->NLSFInterpCoef_Q2, ( pNLSF_Q15[ i ] - psDec->prevNLSF_Q15[ i ] ) ), 2 ); } /* Convert NLSF parameters to AR prediction filter coefficients */ SKP_Silk_NLSF2A_stable( psDecCtrl->PredCoef_Q12[ 0 ], pNLSF0_Q15, psDec->LPC_order ); } else { /* Copy LPC coefficients for first half from second half */ SKP_memcpy( psDecCtrl->PredCoef_Q12[ 0 ], psDecCtrl->PredCoef_Q12[ 1 ], psDec->LPC_order * sizeof( SKP_int16 ) ); } SKP_memcpy( psDec->prevNLSF_Q15, pNLSF_Q15, psDec->LPC_order * sizeof( SKP_int ) ); /* After a packet loss do BWE of LPC coefs */ if( psDec->lossCnt ) { SKP_Silk_bwexpander( psDecCtrl->PredCoef_Q12[ 0 ], psDec->LPC_order, BWE_AFTER_LOSS_Q16 ); SKP_Silk_bwexpander( psDecCtrl->PredCoef_Q12[ 1 ], psDec->LPC_order, BWE_AFTER_LOSS_Q16 ); } if( psDecCtrl->sigtype == SIG_TYPE_VOICED ) { /*********************/ /* Decode pitch lags */ /*********************/ /* Decode pitch values */ SKP_Silk_decode_pitch( psDec->lagIndex[ psDec->nFramesDecoded ], psDec->contourIndex[ psDec->nFramesDecoded ], psDecCtrl->pitchL, psDec->fs_kHz ); /********************/ /* Decode LTP gains */ /********************/ psDecCtrl->PERIndex = psDec->PERIndex[ psDec->nFramesDecoded ]; /* Decode Codebook Index */ cbk_ptr_Q14 = SKP_Silk_LTP_vq_ptrs_Q14[ psDecCtrl->PERIndex ]; /* set pointer to start of codebook */ for( k = 0; k < NB_SUBFR; k++ ) { Ix = psDec->LTPIndex[ psDec->nFramesDecoded ][ k ]; for( i = 0; i < LTP_ORDER; i++ ) { psDecCtrl->LTPCoef_Q14[ SKP_SMULBB( k, LTP_ORDER ) + i ] = cbk_ptr_Q14[ SKP_SMULBB( Ix, LTP_ORDER ) + i ]; } } /**********************/ /* Decode LTP scaling */ /**********************/ Ix = psDec->LTP_scaleIndex[ psDec->nFramesDecoded ]; psDecCtrl->LTP_scale_Q14 = SKP_Silk_LTPScales_table_Q14[ Ix ]; } else { SKP_memset( psDecCtrl->pitchL, 0, NB_SUBFR * sizeof( SKP_int ) ); SKP_memset( psDecCtrl->LTPCoef_Q14, 0, NB_SUBFR * LTP_ORDER * sizeof( SKP_int16 ) ); psDecCtrl->PERIndex = 0; psDecCtrl->LTP_scale_Q14 = 0; } /*********************************************/ /* Decode quantization indices of excitation */ /*********************************************/ SKP_Silk_decode_pulses( psRC, psDecCtrl, q, psDec->frame_length ); /****************************************/ /* get number of bytes used so far */ /****************************************/ SKP_Silk_range_coder_get_length( psRC, &nBytesUsed ); psDec->nBytesLeft = psRC->bufferLength - nBytesUsed; if( psDec->nBytesLeft < 0 ) { psRC->error = RANGE_CODER_READ_BEYOND_BUFFER; } /****************************************/ /* check remaining bits in last byte */ /****************************************/ if( psDec->nBytesLeft == 0 ) { SKP_Silk_range_coder_check_after_decoding( psRC ); } if( psDec->nFramesInPacket == (psDec->nFramesDecoded + 1)) { /* To indicate the packet has been fully decoded */ psDec->FrameTermination = SKP_SILK_LAST_FRAME; } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_scale_copy_vector16.c0000644000175000017500000000444211513063445023570 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_SigProc_FIX.h" /* Copy and multiply a vector by a constant */ void SKP_Silk_scale_copy_vector16( SKP_int16 *data_out, const SKP_int16 *data_in, SKP_int32 gain_Q16, /* (I): gain in Q16 */ const SKP_int dataSize /* (I): length */ ) { SKP_int i; SKP_int32 tmp32; for( i = 0; i < dataSize; i++ ) { tmp32 = SKP_SMULWB( gain_Q16, data_in[ i ] ); data_out[ i ] = (SKP_int16)SKP_CHECK_FIT16( tmp32 ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_tables_NLSF_CB0_16.h0000644000175000017500000000462211513063445022751 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #ifndef SKP_SILK_TABLES_NLSF_CB0_16_H #define SKP_SILK_TABLES_NLSF_CB0_16_H #include "SKP_Silk_define.h" #ifdef __cplusplus extern "C" { #endif #define NLSF_MSVQ_CB0_16_STAGES 10 #define NLSF_MSVQ_CB0_16_VECTORS 216 /* NLSF codebook entropy coding tables */ extern const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ NLSF_MSVQ_CB0_16_VECTORS + NLSF_MSVQ_CB0_16_STAGES ]; extern const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB0_16_CDF_start_ptr[ NLSF_MSVQ_CB0_16_STAGES ]; extern const SKP_int SKP_Silk_NLSF_MSVQ_CB0_16_CDF_middle_idx[ NLSF_MSVQ_CB0_16_STAGES ]; #ifdef __cplusplus } #endif #endif h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_resample_2_3_rom.c0000644000175000017500000000665011513063445023051 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * File Name: SKP_Silk_resample_2_3_rom.c * * * * Description: Filter coefficients for FIR polyphase resampling * * * * Copyright 2009 (c), Skype Limited * * All rights reserved. * * * * Date: 090424 * * */ #include "SKP_Silk_resample_rom.h" const SKP_int16 SigProc_Resample_2_3_coarse_INTERPOL[ SigProc_Resample_2_3_coarse_NUM_INTERPOLATORS ][ SigProc_Resample_2_3_coarse_NUM_FIR_COEFS ] = { { 0, -74, 109, 0, -234, 329, 0, -610, 813, 0, -1437, 1954, 0, -4358, 8953, 21845, 8953, -4358, 0, 1954, -1437, 0, 813, -610, 0, 329, -234, 0, 109, -74, 0, 45 }, { 48, -62, 0, 133, -195, 0, 386, -526, 0, 936, -1243, 0, 2311, -3417, 0, 18026, 18026, 0, -3417, 2311, 0, -1243, 936, 0, -526, 386, 0, -195, 133, 0, -62, 48 }, }; const SKP_int16 SigProc_Resample_2_3_coarsest_INTERPOL[ SigProc_Resample_2_3_coarsest_NUM_INTERPOLATORS ][ SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS ] = { { 379, 0, -3081, 8239, 21845, 8239, -3081, 0, 379, -145 }, { 0, 696, -1951, 0, 17659, 17659, 0, -1951, 696, 0 }, }; h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_sigm_Q15.c0000644000175000017500000000734111513063445021304 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_sigm_Q15.c * * * * Approximate sigmoid function * * * * Copyright 2006 (c), Skype Limited * * Date: 060221 * * */ #include "SKP_Silk_SigProc_FIX.h" /********************************/ /* approximate sigmoid function */ /********************************/ /* fprintf(1, '%d, ', round(1024 * ([1 ./ (1 + exp(-(1:5))), 1] - 1 ./ (1 + exp(-(0:5)))))); */ static const SKP_int32 sigm_LUT_slope_Q10[ 6 ] = { 237, 153, 73, 30, 12, 7 }; /* fprintf(1, '%d, ', round(32767 * 1 ./ (1 + exp(-(0:5))))); */ static const SKP_int32 sigm_LUT_pos_Q15[ 6 ] = { 16384, 23955, 28861, 31213, 32178, 32548 }; /* fprintf(1, '%d, ', round(32767 * 1 ./ (1 + exp((0:5))))); */ static const SKP_int32 sigm_LUT_neg_Q15[ 6 ] = { 16384, 8812, 3906, 1554, 589, 219 }; SKP_int SKP_Silk_sigm_Q15( SKP_int in_Q5 ) { SKP_int ind; if( in_Q5 < 0 ) { /* Negative input */ in_Q5 = -in_Q5; if( in_Q5 >= 6 * 32 ) { return 0; /* Clip */ } else { /* Linear interpolation of look up table */ ind = SKP_RSHIFT( in_Q5, 5 ); return( sigm_LUT_neg_Q15[ ind ] - SKP_SMULBB( sigm_LUT_slope_Q10[ ind ], in_Q5 & 0x1F ) ); } } else { /* Positive input */ if( in_Q5 >= 6 * 32 ) { return 32767; /* clip */ } else { /* Linear interpolation of look up table */ ind = SKP_RSHIFT( in_Q5, 5 ); return( sigm_LUT_pos_Q15[ ind ] + SKP_SMULBB( sigm_LUT_slope_Q10[ ind ], in_Q5 & 0x1F ) ); } } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_structs.h0000644000175000017500000005230511513063445021433 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #ifndef SKP_SILK_STRUCTS_H #define SKP_SILK_STRUCTS_H #include "SKP_Silk_typedef.h" #include "SKP_Silk_SigProc_FIX.h" #include "SKP_Silk_define.h" #ifdef __cplusplus extern "C" { #endif /************************************/ /* Noise shaping quantization state */ /************************************/ typedef struct { SKP_int16 xq[ 2 * MAX_FRAME_LENGTH ]; /* Buffer for quantized output signal */ SKP_int32 sLTP_shp_Q10[ 2 * MAX_FRAME_LENGTH ]; SKP_int32 sLPC_Q14[ MAX_FRAME_LENGTH / NB_SUBFR + MAX_LPC_ORDER ]; SKP_int32 sLF_AR_shp_Q12; SKP_int lagPrev; SKP_int sLTP_buf_idx; SKP_int sLTP_shp_buf_idx; SKP_int32 rand_seed; SKP_int32 prev_inv_gain_Q16; SKP_int rewhite_flag; } SKP_Silk_nsq_state; /* FIX*/ /* Struct for Low BitRate Redundant (LBRR) information */ typedef struct { SKP_uint8 payload[ MAX_ARITHM_BYTES ]; SKP_int nBytes; /* Number of bytes in payload */ SKP_int usage; /* Tells how the payload should be used as FEC */ } SKP_SILK_LBRR_struct; /********************************/ /* VAD state */ /********************************/ typedef struct { SKP_int32 AnaState[ 2 ]; /* Analysis filterbank state: 0-8 kHz */ SKP_int32 AnaState1[ 2 ]; /* Analysis filterbank state: 0-4 kHz */ SKP_int32 AnaState2[ 2 ]; /* Analysis filterbank state: 0-2 kHz */ SKP_int32 XnrgSubfr[ VAD_N_BANDS ]; /* Subframe energies */ SKP_int32 NrgRatioSmth_Q8[ VAD_N_BANDS ]; /* Smoothed energy level in each band */ SKP_int16 HPstate; /* State of differentiator in the lowest band */ SKP_int32 NL[ VAD_N_BANDS ]; /* Noise energy level in each band */ SKP_int32 inv_NL[ VAD_N_BANDS ]; /* Inverse noise energy level in each band */ SKP_int32 NoiseLevelBias[ VAD_N_BANDS ]; /* Noise level estimator bias/offset */ SKP_int32 counter; /* Frame counter used in the initial phase */ } SKP_Silk_VAD_state; /*******************************/ /* Range encoder/decoder state */ /*******************************/ typedef struct { SKP_int32 bufferLength; SKP_int32 bufferIx; SKP_uint32 base_Q32; SKP_uint32 range_Q16; SKP_int32 error; SKP_uint8 buffer[ MAX_ARITHM_BYTES ]; /* Buffer containing payload */ } SKP_Silk_range_coder_state; /* Input frequency range detection struct */ typedef struct { SKP_int32 S_HP_8_kHz[ NB_SOS ][ 2 ]; /* HP filter State */ SKP_int32 ConsecSmplsAboveThres; SKP_int32 ActiveSpeech_ms; /* Accumulated time with active speech */ SKP_int SWB_detected; /* Flag to indicate SWB input */ SKP_int WB_detected; /* Flag to indicate WB input */ } SKP_Silk_detect_SWB_state; #if SWITCH_TRANSITION_FILTERING /* Variable cut-off low-pass filter state */ typedef struct { SKP_int32 In_LP_State[ 2 ]; /* Low pass filter state */ SKP_int32 transition_frame_no; /* Counter which is mapped to a cut-off frequency */ SKP_int mode; /* Operating mode, 0: switch down, 1: switch up */ } SKP_Silk_LP_state; #endif /* Structure for one stage of MSVQ */ typedef struct { const SKP_int32 nVectors; const SKP_int16 *CB_NLSF_Q15; const SKP_int16 *Rates_Q5; } SKP_Silk_NLSF_CBS; /* Structure containing NLSF MSVQ codebook */ typedef struct { const SKP_int32 nStages; /* Fields for (de)quantizing */ const SKP_Silk_NLSF_CBS *CBStages; const SKP_int *NDeltaMin_Q15; /* Fields for arithmetic (de)coding */ const SKP_uint16 *CDF; const SKP_uint16 * const *StartPtr; const SKP_int *MiddleIx; } SKP_Silk_NLSF_CB_struct; /********************************/ /* Encoder state */ /********************************/ typedef struct { SKP_Silk_range_coder_state sRC; /* Range coder state */ SKP_Silk_range_coder_state sRC_LBRR; /* Range coder state (for low bitrate redundancy) */ #if HIGH_PASS_INPUT SKP_int32 In_HP_State[ 2 ]; /* High pass filter state */ #endif #if SWITCH_TRANSITION_FILTERING SKP_Silk_LP_state sLP; /* Low pass filter state */ #endif SKP_Silk_VAD_state sVAD; /* Voice activity detector state */ SKP_int LBRRprevLastGainIndex; SKP_int prev_sigtype; SKP_int typeOffsetPrev; /* Previous signal type and quantization offset */ SKP_int prevLag; SKP_int prev_lagIndex; SKP_int fs_kHz; /* Sampling frequency (kHz) */ SKP_int fs_kHz_changed; /* Did we switch yet? */ SKP_int frame_length; /* Frame length (samples) */ SKP_int subfr_length; /* Subframe length (samples) */ SKP_int la_pitch; /* Look-ahead for pitch analysis (samples) */ SKP_int la_shape; /* Look-ahead for noise shape analysis (samples) */ SKP_int32 TargetRate_bps; /* Target bitrate (bps) */ SKP_int PacketSize_ms; /* Number of milliseconds to put in each packet */ SKP_int PacketLoss_perc; /* Packet loss rate measured by farend */ SKP_int32 frameCounter; SKP_int Complexity; /* Complexity setting: 0-> low; 1-> medium; 2->high */ SKP_int nStatesDelayedDecision; /* Number of states in delayed decision quantization */ SKP_int useInterpolatedNLSFs; /* Flag for using NLSF interpolation */ SKP_int shapingLPCOrder; /* Filter order for noise shaping filters */ SKP_int predictLPCOrder; /* Filter order for prediction filters */ SKP_int pitchEstimationComplexity; /* Complexity level for pitch estimator */ SKP_int pitchEstimationLPCOrder; /* Whitening filter order for pitch estimator */ SKP_int LTPQuantLowComplexity; /* Flag for low complexity LTP quantization */ SKP_int NLSF_MSVQ_Survivors; /* Number of survivors in NLSF MSVQ */ SKP_int first_frame_after_reset; /* Flag for deactivating NLSF interp. and fluc. reduction after resets */ /* Input/output buffering */ SKP_int16 inputBuf[ MAX_FRAME_LENGTH ]; /* buffer containin input signal */ SKP_int inputBufIx; SKP_int nFramesInPayloadBuf; /* number of frames sitting in outputBuf */ SKP_int nBytesInPayloadBuf; /* number of bytes sitting in outputBuf */ /* Parameters For LTP scaling Control */ SKP_int frames_since_onset; const SKP_Silk_NLSF_CB_struct *psNLSF_CB[ 2 ]; /* Pointers to voiced/unvoiced NLSF codebooks */ /* Struct for Inband LBRR */ SKP_SILK_LBRR_struct LBRR_buffer[ MAX_LBRR_DELAY ]; SKP_int oldest_LBRR_idx; SKP_int LBRR_enabled; SKP_int LBRR_GainIncreases; /* Number of shifts to Gains to get LBRR rate Voiced frames */ /* Bitrate control */ SKP_int32 bitrateDiff; /* accumulated diff. between the target bitrate and the SWB/WB limits */ #if LOW_COMPLEXITY_ONLY /* state for downsampling from 24 to 16 kHz in low complexity mode */ SKP_int16 resample24To16state[ SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ]; #else SKP_int32 resample24To16state[ 11 ]; /* state for downsampling from 24 to 16 kHz */ #endif SKP_int32 resample24To12state[ 6 ]; /* state for downsampling from 24 to 12 kHz */ SKP_int32 resample24To8state[ 7 ]; /* state for downsampling from 24 to 8 kHz */ SKP_int32 resample16To12state[ 15 ]; /* state for downsampling from 16 to 12 kHz */ SKP_int32 resample16To8state[ 6 ]; /* state for downsampling from 16 to 8 kHz */ #if LOW_COMPLEXITY_ONLY /* state for downsampling from 12 to 8 kHz in low complexity mode */ SKP_int16 resample12To8state[ SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ]; #else SKP_int32 resample12To8state[ 11 ]; /* state for downsampling from 12 to 8 kHz */ #endif /* DTX */ SKP_int noSpeechCounter; /* Counts concecutive nonactive frames, used by DTX */ SKP_int useDTX; /* Flag to enable DTX */ SKP_int inDTX; /* Flag to signal DTX period */ SKP_int vadFlag; /* Flag to indicate Voice Activity */ /* Struct for detecting SWB input */ SKP_Silk_detect_SWB_state sSWBdetect; /********************************************/ /* Buffers etc used by the new bitstream V4 */ /********************************************/ SKP_int q[ MAX_FRAME_LENGTH * MAX_FRAMES_PER_PACKET ]; /* pulse signal buffer */ SKP_int q_LBRR[ MAX_FRAME_LENGTH * MAX_FRAMES_PER_PACKET ]; /* pulse signal buffer */ SKP_int sigtype[ MAX_FRAMES_PER_PACKET ]; SKP_int QuantOffsetType[ MAX_FRAMES_PER_PACKET ]; SKP_int extension_layer; /* Add extension layer */ SKP_int bitstream_v; /* Holds bitstream version */ } SKP_Silk_encoder_state; /************************/ /* Encoder control */ /************************/ typedef struct { /* Quantization indices */ SKP_int lagIndex; SKP_int contourIndex; SKP_int PERIndex; SKP_int LTPIndex[ NB_SUBFR ]; SKP_int NLSFIndices[ NLSF_MSVQ_MAX_CB_STAGES ]; /* NLSF path of quantized LSF vector */ SKP_int NLSFInterpCoef_Q2; SKP_int GainsIndices[ NB_SUBFR ]; SKP_int32 Seed; SKP_int LTP_scaleIndex; SKP_int RateLevelIndex; SKP_int QuantOffsetType; SKP_int sigtype; /* Prediction and coding parameters */ SKP_int pitchL[ NB_SUBFR ]; SKP_int LBRR_usage; /* Low bitrate redundancy usage */ } SKP_Silk_encoder_control; /* Struct for Packet Loss Concealment */ typedef struct { SKP_int32 pitchL_Q8; /* Pitch lag to use for voiced concealment */ SKP_int16 LTPCoef_Q14[ LTP_ORDER ]; /* LTP coeficients to use for voiced concealment */ SKP_int16 prevLPC_Q12[ MAX_LPC_ORDER ]; SKP_int last_frame_lost; /* Was previous frame lost */ SKP_int32 rand_seed; /* Seed for unvoiced signal generation */ SKP_int16 randScale_Q14; /* Scaling of unvoiced random signal */ SKP_int32 conc_energy; SKP_int conc_energy_shift; SKP_int16 prevLTP_scale_Q14; SKP_int32 prevGain_Q16[ NB_SUBFR ]; SKP_int fs_kHz; } SKP_Silk_PLC_struct; /* Struct for CNG */ typedef struct { SKP_int32 CNG_exc_buf_Q10[ MAX_FRAME_LENGTH ]; SKP_int CNG_smth_NLSF_Q15[ MAX_LPC_ORDER ]; SKP_int32 CNG_synth_state[ MAX_LPC_ORDER ]; SKP_int32 CNG_smth_Gain_Q16; SKP_int32 rand_seed; SKP_int fs_kHz; } SKP_Silk_CNG_struct; /********************************/ /* Decoder state */ /********************************/ typedef struct { SKP_Silk_range_coder_state sRC; /* Range coder state */ SKP_int32 prev_inv_gain_Q16; SKP_int32 sLTP_Q16[ 2 * MAX_FRAME_LENGTH ]; SKP_int32 sLPC_Q14[ MAX_FRAME_LENGTH / NB_SUBFR + MAX_LPC_ORDER ]; SKP_int32 exc_Q10[ MAX_FRAME_LENGTH ]; SKP_int32 res_Q10[ MAX_FRAME_LENGTH ]; SKP_int16 outBuf[ 2 * MAX_FRAME_LENGTH ]; /* Buffer for output signal */ SKP_int sLTP_buf_idx; /* LTP_buf_index */ SKP_int lagPrev; /* Previous Lag */ SKP_int LastGainIndex; /* Previous gain index */ SKP_int LastGainIndex_EnhLayer; /* Previous gain index */ SKP_int typeOffsetPrev; /* Previous signal type and quantization offset */ SKP_int32 HPState[ DEC_HP_ORDER ]; /* HP filter state */ const SKP_int16 *HP_A; /* HP filter AR coefficients */ const SKP_int16 *HP_B; /* HP filter MA coefficients */ SKP_int fs_kHz; /* Sampling frequency in kHz */ SKP_int frame_length; /* Frame length (samples) */ SKP_int subfr_length; /* Subframe length (samples) */ SKP_int LPC_order; /* LPC order */ SKP_int prevNLSF_Q15[ MAX_LPC_ORDER ]; /* Used to interpolate LSFs */ SKP_int first_frame_after_reset; /* Flag for deactivating NLSF interp. and fluc. reduction after resets */ /* For buffering payload in case of more frames per packet */ SKP_int nBytesLeft; SKP_int nFramesDecoded; SKP_int nFramesInPacket; SKP_int moreInternalDecoderFrames; SKP_int FrameTermination; SKP_int32 resampleState[ 15 ]; const SKP_Silk_NLSF_CB_struct *psNLSF_CB[ 2 ]; /* Pointers to voiced/unvoiced NLSF codebooks */ SKP_int sigtype[ MAX_FRAMES_PER_PACKET ]; SKP_int QuantOffsetType[ MAX_FRAMES_PER_PACKET ]; SKP_int GainsIndices[ MAX_FRAMES_PER_PACKET ][ NB_SUBFR ]; SKP_int GainsIndices_EnhLayer[ MAX_FRAMES_PER_PACKET ][ NB_SUBFR ]; SKP_int NLSFIndices[ MAX_FRAMES_PER_PACKET ][ NLSF_MSVQ_MAX_CB_STAGES ]; SKP_int NLSFInterpCoef_Q2[ MAX_FRAMES_PER_PACKET ]; SKP_int lagIndex[ MAX_FRAMES_PER_PACKET ]; SKP_int contourIndex[ MAX_FRAMES_PER_PACKET ]; SKP_int PERIndex[ MAX_FRAMES_PER_PACKET ]; SKP_int LTPIndex[ MAX_FRAMES_PER_PACKET ][ NB_SUBFR ]; SKP_int LTP_scaleIndex[ MAX_FRAMES_PER_PACKET ]; SKP_int Seed[ MAX_FRAMES_PER_PACKET ]; SKP_int vadFlagBuf[ MAX_FRAMES_PER_PACKET ]; /* Parameters used to investigate if inband FEC is used */ SKP_int vadFlag; SKP_int no_FEC_counter; /* Counts number of frames wo inband FEC */ SKP_int inband_FEC_offset; /* 0: no FEC, 1: FEC with 1 packet offset, 2: FEC w 2 packets offset */ /* CNG state */ SKP_Silk_CNG_struct sCNG; /* Stuff used for PLC */ SKP_Silk_PLC_struct sPLC; SKP_int lossCnt; SKP_int prev_sigtype; /* Previous sigtype */ SKP_int bitstream_v; /* Holds bitstream version */ } SKP_Silk_decoder_state; /************************/ /* Decoder control */ /************************/ typedef struct { /* prediction and coding parameters */ SKP_int pitchL[ NB_SUBFR ]; SKP_int32 Gains_Q16[ NB_SUBFR ]; SKP_int32 Seed; /* holds interpolated and final coefficients, 4-byte aligned */ SKP_array_of_int16_4_byte_aligned( PredCoef_Q12[ 2 ], MAX_LPC_ORDER ); SKP_int16 LTPCoef_Q14[ LTP_ORDER * NB_SUBFR ]; SKP_int LTP_scale_Q14; /* quantization indices */ SKP_int PERIndex; SKP_int RateLevelIndex; SKP_int QuantOffsetType; SKP_int sigtype; SKP_int NLSFInterpCoef_Q2; } SKP_Silk_decoder_control; #ifdef __cplusplus } #endif #endif h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_schur64.c0000644000175000017500000001011611513063445021207 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_schur64.c * * * * Calculates the reflection coefficients from the correlation sequence * * using extra precision * * * * Copyright 2008 (c), Skype Limited * * Date: 080103 * * */ #include "SKP_Silk_SigProc_FIX.h" /* Slower than schur(), but more accurate. */ /* Uses SMULL(), available on armv4 */ SKP_int32 SKP_Silk_schur64( /* O: Returns residual energy */ SKP_int32 rc_Q16[], /* O: Reflection coefficients [order] Q16 */ const SKP_int32 c[], /* I: Correlations [order+1] */ SKP_int32 order /* I: Prediction order */ ) { SKP_int k, n; SKP_int32 C[ SigProc_MAX_ORDER_LPC + 1 ][ 2 ]; SKP_int32 Ctmp1_Q30, Ctmp2_Q30, rc_tmp_Q31; /* Check for invalid input */ if( c[ 0 ] <= 0 ) { SKP_memset( rc_Q16, 0, order * sizeof( SKP_int32 ) ); return 0; } for( k = 0; k < order + 1; k++ ) { C[ k ][ 0 ] = C[ k ][ 1 ] = c[ k ]; } for( k = 0; k < order; k++ ) { /* Get reflection coefficient: divide two Q30 values and get result in Q31 */ rc_tmp_Q31 = SKP_DIV32_varQ( -C[ k + 1 ][ 0 ], C[ 0 ][ 1 ], 31 ); /* Save the output */ rc_Q16[ k ] = SKP_RSHIFT_ROUND( rc_tmp_Q31, 15 ); /* Update correlations */ for( n = 0; n < order - k; n++ ) { Ctmp1_Q30 = C[ n + k + 1 ][ 0 ]; Ctmp2_Q30 = C[ n ][ 1 ]; /* Multiply and add the highest int32 */ C[ n + k + 1 ][ 0 ] = Ctmp1_Q30 + SKP_SMMUL( SKP_LSHIFT( Ctmp2_Q30, 1 ), rc_tmp_Q31 ); C[ n ][ 1 ] = Ctmp2_Q30 + SKP_SMMUL( SKP_LSHIFT( Ctmp1_Q30, 1 ), rc_tmp_Q31 ); } } return( C[ 0 ][ 1 ] ); } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_biquad.c0000644000175000017500000000717011513063445021164 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_biquad.c * * * * Second order ARMA filter * * Can handle slowly varying filter coefficients * * * * Copyright 2006 (c), Skype Limited * * Date: 060221 * * */ #include "SKP_Silk_SigProc_FIX.h" /* Second order ARMA filter */ /* Can handle slowly varying filter coefficients */ void SKP_Silk_biquad( const SKP_int16 *in, /* I: input signal */ const SKP_int16 *B, /* I: MA coefficients, Q13 [3] */ const SKP_int16 *A, /* I: AR coefficients, Q13 [2] */ SKP_int32 *S, /* I/O: state vector [2] */ SKP_int16 *out, /* O: output signal */ const SKP_int32 len /* I: signal length */ ) { SKP_int k, in16; SKP_int32 A0_neg, A1_neg, S0, S1, out32, tmp32; S0 = S[ 0 ]; S1 = S[ 1 ]; A0_neg = -A[ 0 ]; A1_neg = -A[ 1 ]; for( k = 0; k < len; k++ ) { /* S[ 0 ], S[ 1 ]: Q13 */ in16 = in[ k ]; out32 = SKP_SMLABB( S0, in16, B[ 0 ] ); S0 = SKP_SMLABB( S1, in16, B[ 1 ] ); S0 += SKP_LSHIFT( SKP_SMULWB( out32, A0_neg ), 3 ); S1 = SKP_LSHIFT( SKP_SMULWB( out32, A1_neg ), 3 ); S1 = SKP_SMLABB( S1, in16, B[ 2 ] ); tmp32 = SKP_RSHIFT_ROUND( out32, 13 ) + 1; out[ k ] = (SKP_int16)SKP_SAT16( tmp32 ); } S[ 0 ] = S0; S[ 1 ] = S1; } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_enc_API.c0000644000175000017500000003150311513063445021152 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_define.h" #include "SKP_Silk_main_FIX.h" #include "SKP_Silk_SDK_API.h" #include "SKP_Silk_control.h" #include "SKP_Silk_typedef.h" #include "SKP_Silk_structs.h" #define SKP_Silk_EncodeControlStruct SKP_SILK_SDK_EncControlStruct /****************************************/ /* Encoder functions */ /****************************************/ SKP_int SKP_Silk_SDK_Get_Encoder_Size( SKP_int *encSizeBytes ) { SKP_int ret = 0; *encSizeBytes = sizeof( SKP_Silk_encoder_state_FIX ); return ret; } /***************************************/ /* Read control structure from encoder */ /***************************************/ SKP_int SKP_Silk_SDK_QueryEncoder( const void *encState, /* I: State Vector */ SKP_Silk_EncodeControlStruct *encStatus /* O: Control Structure */ ) { SKP_Silk_encoder_state_FIX *psEnc; SKP_int ret = 0; psEnc = ( SKP_Silk_encoder_state_FIX* )encState; encStatus->sampleRate = ( unsigned short )SKP_SMULBB( psEnc->sCmn.fs_kHz, 1000 ); /* convert kHz -> Hz */ encStatus->packetSize = ( unsigned short )SKP_SMULBB( psEnc->sCmn.fs_kHz, psEnc->sCmn.PacketSize_ms ); /* convert samples -> ms */ encStatus->bitRate = ( unsigned short )psEnc->sCmn.TargetRate_bps; encStatus->packetLossPercentage = psEnc->sCmn.PacketLoss_perc; encStatus->complexity = psEnc->sCmn.Complexity; return ret; } /*************************/ /* Init or Reset encoder */ /*************************/ SKP_int SKP_Silk_SDK_InitEncoder( void *encState, /* I/O: State */ SKP_Silk_EncodeControlStruct *encStatus /* O: Control structure */ ) { SKP_Silk_encoder_state_FIX *psEnc; SKP_int ret = 0; psEnc = ( SKP_Silk_encoder_state_FIX* )encState; /* Reset Encoder */ if( ret += SKP_Silk_init_encoder_FIX( psEnc ) ) { SKP_assert( 0 ); } /* Read Control structure */ if( ret += SKP_Silk_SDK_QueryEncoder( encState, encStatus ) ) { SKP_assert( 0 ); } return ret; } /**************************/ /* Encode frame with Silk */ /**************************/ SKP_int SKP_Silk_SDK_Encode( void *encState, /* I/O: State */ const SKP_Silk_EncodeControlStruct *encControl, /* I: Control structure */ const SKP_int16 *samplesIn, /* I: Speech sample input vector */ SKP_int nSamplesIn, /* I: Number of samples in input vector */ SKP_uint8 *outData, /* O: Encoded output vector */ SKP_int16 *nBytesOut /* I/O: Number of bytes in outData (input: Max bytes) */ ) { SKP_int API_fs_kHz, PacketSize_ms, PacketLoss_perc, UseInBandFec, UseDTX, ret = 0; SKP_int nSamplesToBuffer, Complexity, input_ms, nSamplesFromInput = 0; SKP_int32 TargetRate_bps; SKP_int16 MaxBytesOut; SKP_Silk_encoder_state_FIX *psEnc = ( SKP_Silk_encoder_state_FIX* )encState; SKP_assert( encControl != NULL ); /* Check sampling frequency first, to avoid divide by zero later */ if( ( encControl->sampleRate != 8000 ) && ( encControl->sampleRate != 12000 ) && ( encControl->sampleRate != 16000 ) && ( encControl->sampleRate != 24000 ) ) { ret = SKP_SILK_ENC_FS_NOT_SUPPORTED; SKP_assert( 0 ); return( ret ); } /* Set Encoder parameters from Control structure */ API_fs_kHz = SKP_DIV32_16( ( SKP_int )encControl->sampleRate, 1000 ); /* convert Hz -> kHz */ PacketSize_ms = SKP_DIV32_16( ( SKP_int )encControl->packetSize, API_fs_kHz ); /* convert samples -> ms */ TargetRate_bps = ( SKP_int32 )encControl->bitRate; PacketLoss_perc = ( SKP_int )encControl->packetLossPercentage; UseInBandFec = ( SKP_int )encControl->useInBandFEC; Complexity = ( SKP_int )encControl->complexity; UseDTX = ( SKP_int )encControl->useDTX; /* Only accept input lengths that are multiplum of 10 ms */ input_ms = SKP_DIV32_16( nSamplesIn, API_fs_kHz ); if( ( input_ms % 10) != 0 || nSamplesIn < 0 ) { ret = SKP_SILK_ENC_INPUT_INVALID_NO_OF_SAMPLES; SKP_assert( 0 ); return( ret ); } /* Make sure no more than one packet can be produced */ if( nSamplesIn > SKP_SMULBB( psEnc->sCmn.PacketSize_ms, API_fs_kHz ) ) { ret = SKP_SILK_ENC_INPUT_INVALID_NO_OF_SAMPLES; SKP_assert( 0 ); return( ret ); } if( ( ret = SKP_Silk_control_encoder_FIX( psEnc, API_fs_kHz, PacketSize_ms, TargetRate_bps, PacketLoss_perc, UseInBandFec, UseDTX, input_ms, Complexity ) ) != 0 ) { SKP_assert( 0 ); return( ret ); } /* Detect energy above 8 kHz */ if( encControl->sampleRate == 24000 && psEnc->sCmn.sSWBdetect.SWB_detected == 0 && psEnc->sCmn.sSWBdetect.WB_detected == 0 ) { SKP_Silk_detect_SWB_input( &psEnc->sCmn.sSWBdetect, samplesIn, ( SKP_int )nSamplesIn ); } /* Input buffering/resampling and encoding */ MaxBytesOut = 0; /* return 0 output bytes if no encoder called */ while( 1 ) { /* Resample/buffer */ nSamplesToBuffer = psEnc->sCmn.frame_length - psEnc->sCmn.inputBufIx; if( encControl->sampleRate == SKP_SMULBB( psEnc->sCmn.fs_kHz, 1000 ) ) { /* Same sample frequency - copy the data */ nSamplesToBuffer = SKP_min_int( nSamplesToBuffer, nSamplesIn ); nSamplesFromInput = nSamplesToBuffer; SKP_memcpy( &psEnc->sCmn.inputBuf[ psEnc->sCmn.inputBufIx ], samplesIn, SKP_SMULBB( nSamplesToBuffer, sizeof( SKP_int16 ) ) ); } else if( encControl->sampleRate == 24000 && psEnc->sCmn.fs_kHz == 16 ) { /* Resample the data from 24 kHz to 16 kHz */ nSamplesToBuffer = SKP_min_int( nSamplesToBuffer, SKP_SMULWB( SKP_LSHIFT( nSamplesIn, 1 ), 21846 ) ); // 21846 = ceil(2/3)*2^15 nSamplesFromInput = SKP_RSHIFT( SKP_SMULBB( nSamplesToBuffer, 3 ), 1 ); #if LOW_COMPLEXITY_ONLY { SKP_int16 scratch[ MAX_FRAME_LENGTH + SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ]; SKP_assert( nSamplesFromInput <= MAX_FRAME_LENGTH ); SKP_Silk_resample_2_3_coarse( &psEnc->sCmn.inputBuf[ psEnc->sCmn.inputBufIx ], psEnc->sCmn.resample24To16state, samplesIn, nSamplesFromInput, scratch ); } #else SKP_Silk_resample_2_3( &psEnc->sCmn.inputBuf[ psEnc->sCmn.inputBufIx ], psEnc->sCmn.resample24To16state, samplesIn, nSamplesFromInput ); #endif } else if( encControl->sampleRate == 24000 && psEnc->sCmn.fs_kHz == 12 ) { SKP_int32 scratch[ 3 * MAX_FRAME_LENGTH ]; /* Resample the data from 24 kHz to 12 kHz */ nSamplesToBuffer = SKP_min_int( nSamplesToBuffer, SKP_RSHIFT( nSamplesIn, 1 ) ); nSamplesFromInput = SKP_LSHIFT16( nSamplesToBuffer, 1 ); SKP_Silk_resample_1_2_coarse( samplesIn, psEnc->sCmn.resample24To12state, &psEnc->sCmn.inputBuf[ psEnc->sCmn.inputBufIx ], scratch, nSamplesToBuffer ); } else if( encControl->sampleRate == 24000 && psEnc->sCmn.fs_kHz == 8 ) { /* Resample the data from 24 kHz to 8 kHz */ nSamplesToBuffer = SKP_min_int( nSamplesToBuffer, SKP_DIV32_16( nSamplesIn, 3 ) ); nSamplesFromInput = SKP_SMULBB( nSamplesToBuffer, 3 ); SKP_Silk_resample_1_3( &psEnc->sCmn.inputBuf[ psEnc->sCmn.inputBufIx ], psEnc->sCmn.resample24To8state, samplesIn, nSamplesFromInput); } else if( encControl->sampleRate == 16000 && psEnc->sCmn.fs_kHz == 12 ) { /* Resample the data from 16 kHz to 12 kHz */ nSamplesToBuffer = SKP_min_int( nSamplesToBuffer, SKP_RSHIFT( SKP_SMULBB( nSamplesIn, 3 ), 2 ) ); nSamplesFromInput = SKP_SMULWB( SKP_LSHIFT16( nSamplesToBuffer, 2 ), 21846 ); // 21846 = ceil((1/3)*2^16) SKP_Silk_resample_3_4( &psEnc->sCmn.inputBuf[ psEnc->sCmn.inputBufIx ], psEnc->sCmn.resample16To12state, samplesIn, nSamplesFromInput ); } else if( encControl->sampleRate == 16000 && psEnc->sCmn.fs_kHz == 8 ) { SKP_int32 scratch[ 3 * MAX_FRAME_LENGTH ]; /* Resample the data from 16 kHz to 8 kHz */ nSamplesToBuffer = SKP_min_int( nSamplesToBuffer, SKP_RSHIFT( nSamplesIn, 1 ) ); nSamplesFromInput = SKP_LSHIFT16( nSamplesToBuffer, 1 ); SKP_Silk_resample_1_2_coarse( samplesIn, psEnc->sCmn.resample16To8state, &psEnc->sCmn.inputBuf[ psEnc->sCmn.inputBufIx ], scratch, nSamplesToBuffer ); } else if( encControl->sampleRate == 12000 && psEnc->sCmn.fs_kHz == 8 ) { /* Resample the data from 12 kHz to 8 kHz */ nSamplesToBuffer = SKP_min_int( nSamplesToBuffer, SKP_SMULWB( SKP_LSHIFT( nSamplesIn, 1 ), 21846 ) ); nSamplesFromInput = SKP_RSHIFT( SKP_SMULBB( nSamplesToBuffer, 3 ), 1 ); #if LOW_COMPLEXITY_ONLY { SKP_int16 scratch[ MAX_FRAME_LENGTH + SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ]; SKP_assert( nSamplesFromInput <= MAX_FRAME_LENGTH ); SKP_Silk_resample_2_3_coarse( &psEnc->sCmn.inputBuf[ psEnc->sCmn.inputBufIx ], psEnc->sCmn.resample12To8state, samplesIn, nSamplesFromInput, scratch ); } #else SKP_Silk_resample_2_3( &psEnc->sCmn.inputBuf[ psEnc->sCmn.inputBufIx ], psEnc->sCmn.resample12To8state, samplesIn, nSamplesFromInput ); #endif } samplesIn += nSamplesFromInput; nSamplesIn -= nSamplesFromInput; psEnc->sCmn.inputBufIx += nSamplesToBuffer; /* Silk encoder */ if( psEnc->sCmn.inputBufIx >= psEnc->sCmn.frame_length ) { /* Enough data in input buffer, so encode */ if( MaxBytesOut == 0 ) { /* No payload obtained so far */ MaxBytesOut = *nBytesOut; if( ( ret = SKP_Silk_encode_frame_FIX( psEnc, outData, &MaxBytesOut, psEnc->sCmn.inputBuf ) ) != 0 ) { SKP_assert( 0 ); } } else { /* outData already contains a payload */ if( ( ret = SKP_Silk_encode_frame_FIX( psEnc, outData, nBytesOut, psEnc->sCmn.inputBuf ) ) != 0 ) { SKP_assert( 0 ); } /* Check that no second payload was created */ SKP_assert( *nBytesOut == 0 ); } psEnc->sCmn.inputBufIx = 0; } else { break; } } *nBytesOut = MaxBytesOut; if( psEnc->sCmn.useDTX && psEnc->sCmn.inDTX ) { /* Dtx simulation */ *nBytesOut = 0; } return ret; } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_pitch_analysis_core.c0000644000175000017500000010633711513063445023746 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /*********************************************************** * Pitch analyser function ********************************************************** */ #include "SKP_Silk_SigProc_FIX.h" #include "SKP_Silk_pitch_est_defines.h" #include "SKP_Silk_resample_rom.h" #define SCRATCH_SIZE 22 /************************************************************/ /* Internally used functions */ /************************************************************/ void SKP_FIX_P_Ana_calc_corr_st3( SKP_int32 cross_corr_st3[PITCH_EST_NB_SUBFR][PITCH_EST_NB_CBKS_STAGE3_MAX][PITCH_EST_NB_STAGE3_LAGS],/* (O) 3 DIM correlation array */ const SKP_int16 signal[], /* I vector to correlate */ SKP_int start_lag, /* I lag offset to search around */ SKP_int sf_length, /* I length of a 5 ms subframe */ SKP_int complexity /* I Complexity setting */ ); void SKP_FIX_P_Ana_calc_energy_st3( SKP_int32 energies_st3[PITCH_EST_NB_SUBFR][PITCH_EST_NB_CBKS_STAGE3_MAX][PITCH_EST_NB_STAGE3_LAGS],/* (O) 3 DIM energy array */ const SKP_int16 signal[], /* I vector to calc energy in */ SKP_int start_lag, /* I lag offset to search around */ SKP_int sf_length, /* I length of one 5 ms subframe */ SKP_int complexity /* I Complexity setting */ ); SKP_int32 SKP_FIX_P_Ana_find_scaling( const SKP_int16 *signal, const SKP_int signal_length, const SKP_int sum_sqr_len ); void SKP_Silk_decode_pitch( SKP_int lagIndex, /* I */ SKP_int contourIndex, /* O */ SKP_int pitch_lags[], /* O 4 pitch values */ SKP_int Fs_kHz /* I sampling frequency (kHz) */ ) { SKP_int lag, i, min_lag; min_lag = SKP_SMULBB( PITCH_EST_MIN_LAG_MS, Fs_kHz ); /* Only for 24 / 16 kHz version for now */ lag = min_lag + lagIndex; if( Fs_kHz == 8 ) { /* Only a small codebook for 8 khz */ for( i = 0; i < PITCH_EST_NB_SUBFR; i++ ) { pitch_lags[ i ] = lag + SKP_Silk_CB_lags_stage2[ i ][ contourIndex ]; } } else { for( i = 0; i < PITCH_EST_NB_SUBFR; i++ ) { pitch_lags[ i ] = lag + SKP_Silk_CB_lags_stage3[ i ][ contourIndex ]; } } } /*************************************************************/ /* FIXED POINT CORE PITCH ANALYSIS FUNCTION */ /*************************************************************/ SKP_int SKP_Silk_pitch_analysis_core( /* O Voicing estimate: 0 voiced, 1 unvoiced */ const SKP_int16 *signal, /* I Signal of length PITCH_EST_FRAME_LENGTH_MS*Fs_kHz */ SKP_int *pitch_out, /* O 4 pitch lag values */ SKP_int *lagIndex, /* O Lag Index */ SKP_int *contourIndex, /* O Pitch contour Index */ SKP_int *LTPCorr_Q15, /* I/O Normalized correlation; input: value from previous frame */ SKP_int prevLag, /* I Last lag of previous frame; set to zero is unvoiced */ const SKP_int32 search_thres1_Q16, /* I First stage threshold for lag candidates 0 - 1 */ const SKP_int search_thres2_Q15, /* I Final threshold for lag candidates 0 - 1 */ const SKP_int Fs_kHz, /* I Sample frequency (kHz) */ const SKP_int complexity /* I Complexity setting, 0-2, where 2 is highest */ ) { SKP_int16 signal_8kHz[ PITCH_EST_MAX_FRAME_LENGTH_ST_2 ]; SKP_int16 signal_4kHz[ PITCH_EST_MAX_FRAME_LENGTH_ST_1 ]; SKP_int32 scratch_mem[ 3 * PITCH_EST_MAX_FRAME_LENGTH ]; SKP_int16 *input_signal_ptr; SKP_int32 filt_state[ PITCH_EST_MAX_DECIMATE_STATE_LENGTH ]; SKP_int i, k, d, j; SKP_int16 C[ PITCH_EST_NB_SUBFR ][ ( PITCH_EST_MAX_LAG >> 1 ) + 5 ]; const SKP_int16 *target_ptr, *basis_ptr; SKP_int32 cross_corr, normalizer, energy, shift, energy_basis, energy_target; SKP_int d_srch[ PITCH_EST_D_SRCH_LENGTH ]; SKP_int16 d_comp[ ( PITCH_EST_MAX_LAG >> 1 ) + 5 ]; SKP_int Cmax, length_d_srch, length_d_comp; SKP_int32 sum, threshold, temp32; SKP_int CBimax, CBimax_new, CBimax_old, lag, start_lag, end_lag, lag_new; SKP_int32 CC[ PITCH_EST_NB_CBKS_STAGE2_EXT ], CCmax, CCmax_b, CCmax_new_b, CCmax_new; SKP_int32 energies_st3[ PITCH_EST_NB_SUBFR ][ PITCH_EST_NB_CBKS_STAGE3_MAX ][ PITCH_EST_NB_STAGE3_LAGS ]; SKP_int32 crosscorr_st3[ PITCH_EST_NB_SUBFR ][ PITCH_EST_NB_CBKS_STAGE3_MAX ][ PITCH_EST_NB_STAGE3_LAGS ]; SKP_int32 lag_counter; SKP_int frame_length, frame_length_8kHz, frame_length_4kHz, max_sum_sq_length; SKP_int sf_length, sf_length_8kHz, sf_length_4kHz; SKP_int min_lag, min_lag_8kHz, min_lag_4kHz; SKP_int max_lag, max_lag_8kHz, max_lag_4kHz; SKP_int32 contour_bias, diff; SKP_int32 lz, lshift; SKP_int cbk_offset, cbk_size, nb_cbks_stage2; SKP_int32 delta_lag_log2_sqr_Q7, lag_log2_Q7, prevLag_log2_Q7, prev_lag_bias_Q15, corr_thres_Q15; /* Check for valid sampling frequency */ SKP_assert( Fs_kHz == 8 || Fs_kHz == 12 || Fs_kHz == 16 || Fs_kHz == 24 ); /* Check for valid complexity setting */ SKP_assert( complexity >= SigProc_PITCH_EST_MIN_COMPLEX ); SKP_assert( complexity <= SigProc_PITCH_EST_MAX_COMPLEX ); SKP_assert( search_thres1_Q16 >= 0 && search_thres1_Q16 <= (1<<16) ); SKP_assert( search_thres2_Q15 >= 0 && search_thres2_Q15 <= (1<<15) ); /* Setup frame lengths max / min lag for the sampling frequency */ frame_length = PITCH_EST_FRAME_LENGTH_MS * Fs_kHz; frame_length_4kHz = PITCH_EST_FRAME_LENGTH_MS * 4; frame_length_8kHz = PITCH_EST_FRAME_LENGTH_MS * 8; sf_length = SKP_RSHIFT( frame_length, 3 ); sf_length_4kHz = SKP_RSHIFT( frame_length_4kHz, 3 ); sf_length_8kHz = SKP_RSHIFT( frame_length_8kHz, 3 ); min_lag = PITCH_EST_MIN_LAG_MS * Fs_kHz; min_lag_4kHz = PITCH_EST_MIN_LAG_MS * 4; min_lag_8kHz = PITCH_EST_MIN_LAG_MS * 8; max_lag = PITCH_EST_MAX_LAG_MS * Fs_kHz; max_lag_4kHz = PITCH_EST_MAX_LAG_MS * 4; max_lag_8kHz = PITCH_EST_MAX_LAG_MS * 8; SKP_memset( C, 0, sizeof( SKP_int16 ) * PITCH_EST_NB_SUBFR * ( ( PITCH_EST_MAX_LAG >> 1 ) + 5) ); /* Resample from input sampled at Fs_kHz to 8 kHz */ if( Fs_kHz == 12 ) { SKP_int16 R23[ SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS - 1 ]; SKP_memset( R23, 0, ( SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS - 1 ) * sizeof( SKP_int16 ) ); SKP_Silk_resample_2_3_coarsest( signal_8kHz, R23, signal, PITCH_EST_FRAME_LENGTH_MS * 12, (SKP_int16*)scratch_mem ); } else if( Fs_kHz == 16 ) { if( complexity == SigProc_PITCH_EST_MAX_COMPLEX ) { SKP_assert( 4 <= PITCH_EST_MAX_DECIMATE_STATE_LENGTH ); SKP_memset( filt_state, 0, 4 * sizeof( SKP_int32 ) ); SKP_Silk_resample_1_2_coarse( signal, filt_state, signal_8kHz, scratch_mem, frame_length_8kHz ); } else { SKP_assert( 2 <= PITCH_EST_MAX_DECIMATE_STATE_LENGTH ); SKP_memset( filt_state, 0, 2 * sizeof( SKP_int32 ) ); SKP_Silk_resample_1_2_coarsest( signal, filt_state, signal_8kHz, scratch_mem, frame_length_8kHz ); } } else if( Fs_kHz == 24 ) { /* Resample to 24 -> 8 khz */ SKP_assert( 7 <= PITCH_EST_MAX_DECIMATE_STATE_LENGTH ); SKP_memset( filt_state, 0, 7 * sizeof( SKP_int32 ) ); SKP_Silk_resample_1_3( signal_8kHz, filt_state, signal, 24 * PITCH_EST_FRAME_LENGTH_MS ); } else { SKP_assert( Fs_kHz == 8 ); SKP_memcpy( signal_8kHz, signal, frame_length_8kHz * sizeof( SKP_int16 ) ); } /* Decimate again to 4 kHz. Set mem to zero */ if( complexity == SigProc_PITCH_EST_MAX_COMPLEX ) { SKP_assert( 4 <= PITCH_EST_MAX_DECIMATE_STATE_LENGTH ); SKP_memset( filt_state, 0, 4 * sizeof( SKP_int32 ) ); SKP_Silk_resample_1_2_coarse( signal_8kHz, filt_state, signal_4kHz, scratch_mem, frame_length_4kHz ); } else { SKP_assert( 2 <= PITCH_EST_MAX_DECIMATE_STATE_LENGTH ); SKP_memset( filt_state, 0, 2 * sizeof( SKP_int32 ) ); SKP_Silk_resample_1_2_coarsest( signal_8kHz, filt_state, signal_4kHz, scratch_mem, frame_length_4kHz ); } /* Low-pass filter */ for( i = frame_length_4kHz - 1; i > 0; i-- ) { signal_4kHz[ i ] = SKP_ADD_SAT16( signal_4kHz[ i ], signal_4kHz[ i - 1 ] ); } /******************************************************************************* ** Scale 4 kHz signal down to prevent correlations measures from overflowing ** find scaling as max scaling for each 8kHz(?) subframe *******************************************************************************/ /* Inner product is calculated with different lengths, so scale for the worst case */ max_sum_sq_length = SKP_max_32( sf_length_8kHz, SKP_RSHIFT( frame_length_4kHz, 1 ) ); shift = SKP_FIX_P_Ana_find_scaling( signal_4kHz, frame_length_4kHz, max_sum_sq_length ); if( shift > 0 ) { for( i = 0; i < frame_length_4kHz; i++ ) { signal_4kHz[ i ] = SKP_RSHIFT( signal_4kHz[ i ], shift ); } } /****************************************************************************** * FIRST STAGE, operating in 4 khz ******************************************************************************/ target_ptr = &signal_4kHz[ SKP_RSHIFT( frame_length_4kHz, 1 ) ]; for( k = 0; k < 2; k++ ) { /* Check that we are within range of the array */ SKP_assert( target_ptr >= signal_4kHz ); SKP_assert( target_ptr + sf_length_8kHz <= signal_4kHz + frame_length_4kHz ); basis_ptr = target_ptr - min_lag_4kHz; /* Check that we are within range of the array */ SKP_assert( basis_ptr >= signal_4kHz ); SKP_assert( basis_ptr + sf_length_8kHz <= signal_4kHz + frame_length_4kHz ); normalizer = 0; cross_corr = 0; /* Calculate first vector products before loop */ cross_corr = SKP_Silk_inner_prod_aligned( target_ptr, basis_ptr, sf_length_8kHz ); normalizer = SKP_Silk_inner_prod_aligned( basis_ptr, basis_ptr, sf_length_8kHz ); normalizer = SKP_ADD_SAT32( normalizer, 1000 ); temp32 = SKP_DIV32( cross_corr, SKP_Silk_SQRT_APPROX( normalizer ) + 1 ); C[ k ][ min_lag_4kHz ] = (SKP_int16)SKP_SAT16( temp32 ); /* Q0 */ /* From now on normalizer is computed recursively */ for( d = min_lag_4kHz + 1; d <= max_lag_4kHz; d++ ) { basis_ptr--; /* Check that we are within range of the array */ SKP_assert( basis_ptr >= signal_4kHz ); SKP_assert( basis_ptr + sf_length_8kHz <= signal_4kHz + frame_length_4kHz ); cross_corr = SKP_Silk_inner_prod_aligned( target_ptr, basis_ptr, sf_length_8kHz ); /* Add contribution of new sample and remove contribution from oldest sample */ normalizer += SKP_SMULBB( basis_ptr[ 0 ], basis_ptr[ 0 ] ) - SKP_SMULBB( basis_ptr[ sf_length_8kHz ], basis_ptr[ sf_length_8kHz ] ); temp32 = SKP_DIV32( cross_corr, SKP_Silk_SQRT_APPROX( normalizer ) + 1 ); C[ k ][ d ] = (SKP_int16)SKP_SAT16( temp32 ); /* Q0 */ } /* Update target pointer */ target_ptr += sf_length_8kHz; } /* Combine two subframes into single correlation measure and apply short-lag bias */ for( i = max_lag_4kHz; i >= min_lag_4kHz; i-- ) { sum = (SKP_int32)C[ 0 ][ i ] + (SKP_int32)C[ 1 ][ i ]; /* Q0 */ SKP_assert( SKP_RSHIFT( sum, 1 ) == SKP_SAT16( SKP_RSHIFT( sum, 1 ) ) ); sum = SKP_RSHIFT( sum, 1 ); /* Q-1 */ SKP_assert( SKP_LSHIFT( (SKP_int32)-i, 4 ) == SKP_SAT16( SKP_LSHIFT( (SKP_int32)-i, 4 ) ) ); sum = SKP_SMLAWB( sum, sum, SKP_LSHIFT( -i, 4 ) ); /* Q-1 */ SKP_assert( sum == SKP_SAT16( sum ) ); C[ 0 ][ i ] = (SKP_int16)sum; /* Q-1 */ } /* Sort */ length_d_srch = 5 + complexity; SKP_assert( length_d_srch <= PITCH_EST_D_SRCH_LENGTH ); SKP_Silk_insertion_sort_decreasing_int16( &C[ 0 ][ min_lag_4kHz ], d_srch, max_lag_4kHz - min_lag_4kHz + 1, length_d_srch ); /* Escape if correlation is very low already here */ target_ptr = &signal_4kHz[ SKP_RSHIFT( frame_length_4kHz, 1 ) ]; energy = SKP_Silk_inner_prod_aligned( target_ptr, target_ptr, SKP_RSHIFT( frame_length_4kHz, 1 ) ); energy = SKP_ADD_SAT32( energy, 1000 ); /* Q0 */ Cmax = (SKP_int)C[ 0 ][ min_lag_4kHz ]; /* Q-1 */ threshold = SKP_SMULBB( Cmax, Cmax ); /* Q-2 */ /* Compare in Q-2 domain */ if( SKP_RSHIFT( energy, 4 + 2 ) > threshold ) { SKP_memset( pitch_out, 0, PITCH_EST_NB_SUBFR * sizeof( SKP_int ) ); *LTPCorr_Q15 = 0; *lagIndex = 0; *contourIndex = 0; return 1; } threshold = SKP_SMULWB( search_thres1_Q16, Cmax ); for( i = 0; i < length_d_srch; i++ ) { /* Convert to 8 kHz indices for the sorted correlation that exceeds the threshold */ if( C[ 0 ][ min_lag_4kHz + i ] > threshold ) { d_srch[ i ] = SKP_LSHIFT( d_srch[ i ] + min_lag_4kHz, 1 ); } else { length_d_srch = i; break; } } SKP_assert( length_d_srch > 0 ); for( i = min_lag_8kHz - 5; i < max_lag_8kHz + 5; i++ ) { d_comp[ i ] = 0; } for( i = 0; i < length_d_srch; i++ ) { d_comp[ d_srch[ i ] ] = 1; } /* Convolution */ for( i = max_lag_8kHz + 3; i >= min_lag_8kHz; i-- ) { d_comp[ i ] += d_comp[ i - 1 ] + d_comp[ i - 2 ]; } length_d_srch = 0; for( i = min_lag_8kHz; i < max_lag_8kHz + 1; i++ ) { if( d_comp[ i + 1 ] > 0 ) { d_srch[ length_d_srch ] = i; length_d_srch++; } } /* Convolution */ for( i = max_lag_8kHz + 3; i >= min_lag_8kHz; i-- ) { d_comp[ i ] += d_comp[ i - 1 ] + d_comp[ i - 2 ] + d_comp[ i - 3 ]; } length_d_comp = 0; for( i = min_lag_8kHz; i < max_lag_8kHz + 4; i++ ) { if( d_comp[ i ] > 0 ) { d_comp[ length_d_comp ] = i - 2; length_d_comp++; } } /********************************************************************************** ** SECOND STAGE, operating at 8 kHz, on lag sections with high correlation *************************************************************************************/ /****************************************************************************** ** Scale signal down to avoid correlations measures from overflowing *******************************************************************************/ /* find scaling as max scaling for each subframe */ shift = SKP_FIX_P_Ana_find_scaling( signal_8kHz, frame_length_8kHz, sf_length_8kHz ); if( shift > 0 ) { for( i = 0; i < frame_length_8kHz; i++ ) { signal_8kHz[ i ] = SKP_RSHIFT( signal_8kHz[ i ], shift ); } } /********************************************************************************* * Find energy of each subframe projected onto its history, for a range of delays *********************************************************************************/ SKP_memset( C, 0, PITCH_EST_NB_SUBFR * ( ( PITCH_EST_MAX_LAG >> 1 ) + 5 ) * sizeof( SKP_int16 ) ); target_ptr = &signal_8kHz[ frame_length_4kHz ]; /* point to middle of frame */ for( k = 0; k < PITCH_EST_NB_SUBFR; k++ ) { /* Check that we are within range of the array */ SKP_assert( target_ptr >= signal_8kHz ); SKP_assert( target_ptr + sf_length_8kHz <= signal_8kHz + frame_length_8kHz ); energy_target = SKP_Silk_inner_prod_aligned( target_ptr, target_ptr, sf_length_8kHz ); // ToDo: Calculate 1 / energy_target here and save one division inside next for loop for( j = 0; j < length_d_comp; j++ ) { d = d_comp[ j ]; basis_ptr = target_ptr - d; /* Check that we are within range of the array */ SKP_assert( basis_ptr >= signal_8kHz ); SKP_assert( basis_ptr + sf_length_8kHz <= signal_8kHz + frame_length_8kHz ); cross_corr = SKP_Silk_inner_prod_aligned( target_ptr, basis_ptr, sf_length_8kHz ); energy_basis = SKP_Silk_inner_prod_aligned( basis_ptr, basis_ptr, sf_length_8kHz ); if( cross_corr > 0 ) { energy = SKP_max( energy_target, energy_basis ); /* Find max to make sure first division < 1.0 */ lz = SKP_Silk_CLZ32( cross_corr ); lshift = SKP_LIMIT( lz - 1, 0, 15 ); temp32 = SKP_DIV32( SKP_LSHIFT( cross_corr, lshift ), SKP_RSHIFT( energy, 15 - lshift ) + 1 ); /* Q15 */ SKP_assert( temp32 == SKP_SAT16( temp32 ) ); temp32 = SKP_SMULWB( cross_corr, temp32 ); /* Q(-1), cc * ( cc / max(b, t) ) */ temp32 = SKP_ADD_SAT32( temp32, temp32 ); /* Q(0) */ lz = SKP_Silk_CLZ32( temp32 ); lshift = SKP_LIMIT( lz - 1, 0, 15 ); energy = SKP_min( energy_target, energy_basis ); C[ k ][ d ] = SKP_DIV32( SKP_LSHIFT( temp32, lshift ), SKP_RSHIFT( energy, 15 - lshift ) + 1 ); // Q15 } else { C[ k ][ d ] = 0; } } target_ptr += sf_length_8kHz; } /* search over lag range and lags codebook */ /* scale factor for lag codebook, as a function of center lag */ CCmax = SKP_int32_MIN; CCmax_b = SKP_int32_MIN; CBimax = 0; /* To avoid returning undefined lag values */ lag = -1; /* To check if lag with strong enough correlation has been found */ if( prevLag > 0 ) { if( Fs_kHz == 12 ) { prevLag = SKP_DIV32_16( SKP_LSHIFT( prevLag, 1 ), 3 ); } else if( Fs_kHz == 16 ) { prevLag = SKP_RSHIFT( prevLag, 1 ); } else if( Fs_kHz == 24 ) { prevLag = SKP_DIV32_16( prevLag, 3 ); } prevLag_log2_Q7 = SKP_Silk_lin2log( (SKP_int32)prevLag ); } else { prevLag_log2_Q7 = 0; } SKP_assert( search_thres2_Q15 == SKP_SAT16( search_thres2_Q15 ) ); corr_thres_Q15 = SKP_RSHIFT( SKP_SMULBB( search_thres2_Q15, search_thres2_Q15 ), 13 ); /* If input is 8 khz use a larger codebook here because it is last stage */ if( Fs_kHz == 8 && complexity > SigProc_PITCH_EST_MIN_COMPLEX ) { nb_cbks_stage2 = PITCH_EST_NB_CBKS_STAGE2_EXT; } else { nb_cbks_stage2 = PITCH_EST_NB_CBKS_STAGE2; } for( k = 0; k < length_d_srch; k++ ) { d = d_srch[ k ]; for( j = 0; j < nb_cbks_stage2; j++ ) { CC[ j ] = 0; for( i = 0; i < PITCH_EST_NB_SUBFR; i++ ) { /* Try all codebooks */ CC[ j ] = CC[ j ] + (SKP_int32)C[ i ][ d + SKP_Silk_CB_lags_stage2[ i ][ j ] ]; } } /* Find best codebook */ CCmax_new = SKP_int32_MIN; CBimax_new = 0; for( i = 0; i < nb_cbks_stage2; i++ ) { if( CC[ i ] > CCmax_new ) { CCmax_new = CC[ i ]; CBimax_new = i; } } /* Bias towards shorter lags */ lag_log2_Q7 = SKP_Silk_lin2log( (SKP_int32)d ); /* Q7 */ SKP_assert( lag_log2_Q7 == SKP_SAT16( lag_log2_Q7 ) ); SKP_assert( PITCH_EST_NB_SUBFR * PITCH_EST_SHORTLAG_BIAS_Q15 == SKP_SAT16( PITCH_EST_NB_SUBFR * PITCH_EST_SHORTLAG_BIAS_Q15 ) ); CCmax_new_b = CCmax_new - SKP_RSHIFT( SKP_SMULBB( PITCH_EST_NB_SUBFR * PITCH_EST_SHORTLAG_BIAS_Q15, lag_log2_Q7 ), 7 ); /* Q15 */ /* Bias towards previous lag */ SKP_assert( PITCH_EST_NB_SUBFR * PITCH_EST_PREVLAG_BIAS_Q15 == SKP_SAT16( PITCH_EST_NB_SUBFR * PITCH_EST_PREVLAG_BIAS_Q15 ) ); if( prevLag > 0 ) { delta_lag_log2_sqr_Q7 = lag_log2_Q7 - prevLag_log2_Q7; SKP_assert( delta_lag_log2_sqr_Q7 == SKP_SAT16( delta_lag_log2_sqr_Q7 ) ); delta_lag_log2_sqr_Q7 = SKP_RSHIFT( SKP_SMULBB( delta_lag_log2_sqr_Q7, delta_lag_log2_sqr_Q7 ), 7 ); prev_lag_bias_Q15 = SKP_RSHIFT( SKP_SMULBB( PITCH_EST_NB_SUBFR * PITCH_EST_PREVLAG_BIAS_Q15, ( *LTPCorr_Q15 ) ), 15 ); /* Q15 */ prev_lag_bias_Q15 = SKP_DIV32( SKP_MUL( prev_lag_bias_Q15, delta_lag_log2_sqr_Q7 ), delta_lag_log2_sqr_Q7 + ( 1 << 6 ) ); CCmax_new_b -= prev_lag_bias_Q15; /* Q15 */ } if( CCmax_new_b > CCmax_b && CCmax_new > corr_thres_Q15 ) { CCmax_b = CCmax_new_b; CCmax = CCmax_new; lag = d; CBimax = CBimax_new; } } if( lag == -1 ) { /* No suitable candidate found */ SKP_memset( pitch_out, 0, PITCH_EST_NB_SUBFR * sizeof( SKP_int ) ); *LTPCorr_Q15 = 0; *lagIndex = 0; *contourIndex = 0; return 1; } if( Fs_kHz > 8 ) { /****************************************************************************** ** Scale input signal down to avoid correlations measures from overflowing *******************************************************************************/ /* find scaling as max scaling for each subframe */ shift = SKP_FIX_P_Ana_find_scaling( signal, frame_length, sf_length ); if( shift > 0 ) { /* Move signal to scratch mem because the input signal should be unchanged */ /* Reuse the 32 bit scratch mem vector, use a 16 bit pointer from now */ input_signal_ptr = (SKP_int16*)scratch_mem; for( i = 0; i < frame_length; i++ ) { input_signal_ptr[ i ] = SKP_RSHIFT( signal[ i ], shift ); } } else { input_signal_ptr = (SKP_int16*)signal; } /*********************************************************************************/ /* Search in original signal */ CBimax_old = CBimax; /* Compensate for decimation */ SKP_assert( lag == SKP_SAT16( lag ) ); if( Fs_kHz == 12 ) { lag = SKP_RSHIFT( SKP_SMULBB( lag, 3 ), 1 ); } else if( Fs_kHz == 16 ) { lag = SKP_LSHIFT( lag, 1 ); } else { lag = SKP_SMULBB( lag, 3 ); } lag = SKP_LIMIT( lag, min_lag, max_lag ); start_lag = SKP_max_int( lag - 2, min_lag ); end_lag = SKP_min_int( lag + 2, max_lag ); lag_new = lag; /* to avoid undefined lag */ CBimax = 0; /* to avoid undefined lag */ SKP_assert( SKP_LSHIFT( CCmax, 13 ) >= 0 ); *LTPCorr_Q15 = (SKP_int)SKP_Silk_SQRT_APPROX( SKP_LSHIFT( CCmax, 13 ) ); /* Output normalized correlation */ CCmax = SKP_int32_MIN; /* pitch lags according to second stage */ for( k = 0; k < PITCH_EST_NB_SUBFR; k++ ) { pitch_out[ k ] = lag + 2 * SKP_Silk_CB_lags_stage2[ k ][ CBimax_old ]; } /* Calculate the correlations and energies needed in stage 3 */ SKP_FIX_P_Ana_calc_corr_st3( crosscorr_st3, input_signal_ptr, start_lag, sf_length, complexity ); SKP_FIX_P_Ana_calc_energy_st3( energies_st3, input_signal_ptr, start_lag, sf_length, complexity ); lag_counter = 0; SKP_assert( lag == SKP_SAT16( lag ) ); contour_bias = SKP_DIV32_16( PITCH_EST_FLATCONTOUR_BIAS_Q20, lag ); /* Setup cbk parameters acording to complexity setting */ cbk_size = (SKP_int)SKP_Silk_cbk_sizes_stage3[ complexity ]; cbk_offset = (SKP_int)SKP_Silk_cbk_offsets_stage3[ complexity ]; for( d = start_lag; d <= end_lag; d++ ) { for( j = cbk_offset; j < ( cbk_offset + cbk_size ); j++ ) { cross_corr = 0; energy = 0; for( k = 0; k < PITCH_EST_NB_SUBFR; k++ ) { SKP_assert( PITCH_EST_NB_SUBFR == 4 ); energy += SKP_RSHIFT( energies_st3[ k ][ j ][ lag_counter ], 2 ); /* use mean, to avoid overflow */ SKP_assert( energy >= 0 ); cross_corr += SKP_RSHIFT( crosscorr_st3[ k ][ j ][ lag_counter ], 2 ); /* use mean, to avoid overflow */ } if( cross_corr > 0 ) { /* Divide cross_corr / energy and get result in Q15 */ lz = SKP_Silk_CLZ32( cross_corr ); /* Divide with result in Q13, cross_corr could be larger than energy */ lshift = SKP_LIMIT( lz - 1, 0, 13 ); CCmax_new = SKP_DIV32( SKP_LSHIFT( cross_corr, lshift ), SKP_RSHIFT( energy, 13 - lshift ) + 1 ); CCmax_new = SKP_SAT16( CCmax_new ); CCmax_new = SKP_SMULWB( cross_corr, CCmax_new ); /* Saturate */ if( CCmax_new > SKP_RSHIFT( SKP_int32_MAX, 3 ) ) { CCmax_new = SKP_int32_MAX; } else { CCmax_new = SKP_LSHIFT( CCmax_new, 3 ); } /* Reduce depending on flatness of contour */ diff = j - SKP_RSHIFT( PITCH_EST_NB_CBKS_STAGE3_MAX, 1 ); diff = SKP_MUL( diff, diff ); diff = SKP_int16_MAX - SKP_RSHIFT( SKP_MUL( contour_bias, diff ), 5 ); /* Q20 -> Q15 */ SKP_assert( diff == SKP_SAT16( diff ) ); CCmax_new = SKP_LSHIFT( SKP_SMULWB( CCmax_new, diff ), 1 ); } else { CCmax_new = 0; } if( CCmax_new > CCmax ) { CCmax = CCmax_new; lag_new = d; CBimax = j; } } lag_counter++; } for( k = 0; k < PITCH_EST_NB_SUBFR; k++ ) { pitch_out[ k ] = lag_new + SKP_Silk_CB_lags_stage3[ k ][ CBimax ]; } *lagIndex = lag_new - min_lag; *contourIndex = CBimax; } else { /* Save Lags and correlation */ CCmax = SKP_max( CCmax, 0 ); *LTPCorr_Q15 = (SKP_int)SKP_Silk_SQRT_APPROX( SKP_LSHIFT( CCmax, 13 ) ); /* Output normalized correlation */ for( k = 0; k < PITCH_EST_NB_SUBFR; k++ ) { pitch_out[ k ] = lag + SKP_Silk_CB_lags_stage2[ k ][ CBimax ]; } *lagIndex = lag - min_lag_8kHz; *contourIndex = CBimax; } SKP_assert( *lagIndex >= 0 ); /* return as voiced */ return 0; } /*************************************************************************/ /* Calculates the correlations used in stage 3 search. In order to cover */ /* the whole lag codebook for all the searched offset lags (lag +- 2), */ /*************************************************************************/ void SKP_FIX_P_Ana_calc_corr_st3( SKP_int32 cross_corr_st3[ PITCH_EST_NB_SUBFR ][ PITCH_EST_NB_CBKS_STAGE3_MAX ][ PITCH_EST_NB_STAGE3_LAGS ],/* (O) 3 DIM correlation array */ const SKP_int16 signal[], /* I vector to correlate */ SKP_int start_lag, /* I lag offset to search around */ SKP_int sf_length, /* I length of a 5 ms subframe */ SKP_int complexity /* I Complexity setting */ ) { const SKP_int16 *target_ptr, *basis_ptr; SKP_int32 cross_corr; SKP_int i, j, k, lag_counter; SKP_int cbk_offset, cbk_size, delta, idx; SKP_int32 scratch_mem[ SCRATCH_SIZE ]; SKP_assert( complexity >= SigProc_PITCH_EST_MIN_COMPLEX ); SKP_assert( complexity <= SigProc_PITCH_EST_MAX_COMPLEX ); cbk_offset = SKP_Silk_cbk_offsets_stage3[ complexity ]; cbk_size = SKP_Silk_cbk_sizes_stage3[ complexity ]; target_ptr = &signal[ SKP_LSHIFT( sf_length, 2 ) ]; /* Pointer to middle of frame */ for( k = 0; k < PITCH_EST_NB_SUBFR; k++ ) { lag_counter = 0; /* Calculate the correlations for each subframe */ for( j = SKP_Silk_Lag_range_stage3[ complexity ][ k ][ 0 ]; j <= SKP_Silk_Lag_range_stage3[ complexity ][ k ][ 1 ]; j++ ) { basis_ptr = target_ptr - ( start_lag + j ); cross_corr = SKP_Silk_inner_prod_aligned( (SKP_int16*)target_ptr, (SKP_int16*)basis_ptr, sf_length ); SKP_assert( lag_counter < SCRATCH_SIZE ); scratch_mem[ lag_counter ] = cross_corr; lag_counter++; } delta = SKP_Silk_Lag_range_stage3[ complexity ][ k ][ 0 ]; for( i = cbk_offset; i < ( cbk_offset + cbk_size ); i++ ) { /* Fill out the 3 dim array that stores the correlations for */ /* each code_book vector for each start lag */ idx = SKP_Silk_CB_lags_stage3[ k ][ i ] - delta; for( j = 0; j < PITCH_EST_NB_STAGE3_LAGS; j++ ) { SKP_assert( idx + j < SCRATCH_SIZE ); SKP_assert( idx + j < lag_counter ); cross_corr_st3[ k ][ i ][ j ] = scratch_mem[ idx + j ]; } } target_ptr += sf_length; } } /********************************************************************/ /* Calculate the energies for first two subframes. The energies are */ /* calculated recursively. */ /********************************************************************/ void SKP_FIX_P_Ana_calc_energy_st3( SKP_int32 energies_st3[ PITCH_EST_NB_SUBFR ][ PITCH_EST_NB_CBKS_STAGE3_MAX ][ PITCH_EST_NB_STAGE3_LAGS ],/* (O) 3 DIM energy array */ const SKP_int16 signal[], /* I vector to calc energy in */ SKP_int start_lag, /* I lag offset to search around */ SKP_int sf_length, /* I length of one 5 ms subframe */ SKP_int complexity /* I Complexity setting */ ) { const SKP_int16 *target_ptr, *basis_ptr; SKP_int32 energy; SKP_int k, i, j, lag_counter; SKP_int cbk_offset, cbk_size, delta, idx; SKP_int32 scratch_mem[ SCRATCH_SIZE ]; SKP_assert( complexity >= SigProc_PITCH_EST_MIN_COMPLEX ); SKP_assert( complexity <= SigProc_PITCH_EST_MAX_COMPLEX ); cbk_offset = SKP_Silk_cbk_offsets_stage3[ complexity ]; cbk_size = SKP_Silk_cbk_sizes_stage3[ complexity ]; target_ptr = &signal[ SKP_LSHIFT( sf_length, 2 ) ]; for( k = 0; k < PITCH_EST_NB_SUBFR; k++ ) { lag_counter = 0; /* Calculate the energy for first lag */ basis_ptr = target_ptr - ( start_lag + SKP_Silk_Lag_range_stage3[ complexity ][ k ][ 0 ] ); energy = SKP_Silk_inner_prod_aligned( basis_ptr, basis_ptr, sf_length ); SKP_assert( energy >= 0 ); scratch_mem[ lag_counter ] = energy; lag_counter++; for( i = 1; i < ( SKP_Silk_Lag_range_stage3[ complexity ][ k ][ 1 ] - SKP_Silk_Lag_range_stage3[ complexity ][ k ][ 0 ] + 1 ); i++ ) { /* remove part outside new window */ energy -= SKP_SMULBB( basis_ptr[ sf_length - i ], basis_ptr[ sf_length - i ] ); SKP_assert( energy >= 0 ); /* add part that comes into window */ energy = SKP_ADD_SAT32( energy, SKP_SMULBB( basis_ptr[ -i ], basis_ptr[ -i ] ) ); SKP_assert( energy >= 0 ); SKP_assert( lag_counter < SCRATCH_SIZE ); scratch_mem[ lag_counter ] = energy; lag_counter++; } delta = SKP_Silk_Lag_range_stage3[ complexity ][ k ][ 0 ]; for( i = cbk_offset; i < ( cbk_offset + cbk_size ); i++ ) { /* Fill out the 3 dim array that stores the correlations for */ /* each code_book vector for each start lag */ idx = SKP_Silk_CB_lags_stage3[ k ][ i ] - delta; for( j = 0; j < PITCH_EST_NB_STAGE3_LAGS; j++ ) { SKP_assert( idx + j < SCRATCH_SIZE ); SKP_assert( idx + j < lag_counter ); energies_st3[ k ][ i ][ j ] = scratch_mem[ idx + j ]; SKP_assert( energies_st3[ k ][ i ][ j ] >= 0.0f ); } } target_ptr += sf_length; } } SKP_int32 SKP_FIX_P_Ana_find_scaling( const SKP_int16 *signal, const SKP_int signal_length, const SKP_int sum_sqr_len ) { SKP_int32 nbits, x_max; x_max = SKP_Silk_int16_array_maxabs( signal, signal_length ); if( x_max < SKP_int16_MAX ) { /* Number of bits needed for the sum of the squares */ nbits = 32 - SKP_Silk_CLZ32( SKP_SMULBB( x_max, x_max ) ); } else { /* Here we don't know if x_max should have been SKP_int16_MAX + 1, so we expect the worst case */ nbits = 30; } nbits += 17 - SKP_Silk_CLZ16( sum_sqr_len ); /* Without a guarantee of saturation, we need to keep the 31st bit free */ if( nbits < 31 ) { return 0; } else { return( nbits - 30 ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_residual_energy_FIX.c0000644000175000017500000001076611513063445023613 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" /* Calculates residual energies of input subframes where all subframes have LPC_order */ /* of preceeding samples */ void SKP_Silk_residual_energy_FIX( SKP_int32 nrgs[ NB_SUBFR ], /* O Residual energy per subframe */ SKP_int nrgsQ[ NB_SUBFR ], /* O Q value per subframe */ const SKP_int16 x[], /* I Input signal */ const SKP_int16 a_Q12[ 2 ][ MAX_LPC_ORDER ],/* I AR coefs for each frame half */ const SKP_int32 gains[ NB_SUBFR ], /* I Quantization gains */ const SKP_int subfr_length, /* I Subframe length */ const SKP_int LPC_order /* I LPC order */ ) { SKP_int offset, i, j, rshift, lz1, lz2; SKP_int16 *LPC_res_ptr, LPC_res[ ( MAX_FRAME_LENGTH + NB_SUBFR * MAX_LPC_ORDER ) / 2 ]; const SKP_int16 *x_ptr; SKP_int16 S[ MAX_LPC_ORDER ]; SKP_int32 tmp32; x_ptr = x; offset = LPC_order + subfr_length; /* Filter input to create the LPC residual for each frame half, and measure subframe energies */ for( i = 0; i < 2; i++ ) { /* Calculate half frame LPC residual signal including preceeding samples */ SKP_memset( S, 0, LPC_order * sizeof( SKP_int16 ) ); SKP_Silk_LPC_analysis_filter( x_ptr, a_Q12[ i ], S, LPC_res, ( NB_SUBFR >> 1 ) * offset, LPC_order ); /* Point to first subframe of the just calculated LPC residual signal */ LPC_res_ptr = LPC_res + LPC_order; for( j = 0; j < ( NB_SUBFR >> 1 ); j++ ) { /* Measure subframe energy */ SKP_Silk_sum_sqr_shift( &nrgs[ i * ( NB_SUBFR >> 1 ) + j ], &rshift, LPC_res_ptr, subfr_length ); /* Set Q values for the measured energy */ nrgsQ[ i * ( NB_SUBFR >> 1 ) + j ] = -rshift; /* Move to next subframe */ LPC_res_ptr += offset; } /* Move to next frame half */ x_ptr += ( NB_SUBFR >> 1 ) * offset; } /* Apply the squared subframe gains */ for( i = 0; i < NB_SUBFR; i++ ) { /* Fully upscale gains and energies */ lz1 = SKP_Silk_CLZ32( nrgs[ i ] ) - 1; lz2 = SKP_Silk_CLZ32( gains[ i ] ) - 1; tmp32 = SKP_LSHIFT32( gains[ i ], lz2 ); /* Find squared gains */ tmp32 = SKP_SMMUL( tmp32, tmp32 ); // Q( 2 * lz2 - 32 ) /* Scale energies */ nrgs[ i ] = SKP_SMMUL( tmp32, SKP_LSHIFT32( nrgs[ i ], lz1 ) ); // Q( nrgsQ[ i ] + lz1 + 2 * lz2 - 32 - 32 ) nrgsQ[ i ] += lz1 + 2 * lz2 - 32 - 32; } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_tables_NLSF_CB1_16.c0000644000175000017500000011407311513063445022747 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /**********************************************/ /* This file has been automatically generated */ /* */ /* ROM usage: 134+1785 Words */ /**********************************************/ #include "SKP_Silk_structs.h" #include "SKP_Silk_tables_NLSF_CB1_16.h" const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB1_16_CDF[ NLSF_MSVQ_CB1_16_VECTORS + NLSF_MSVQ_CB1_16_STAGES ] = { 0, 19099, 26957, 30639, 34242, 37546, 40447, 43287, 46005, 48445, 49865, 51284, 52673, 53975, 55221, 56441, 57267, 58025, 58648, 59232, 59768, 60248, 60729, 61210, 61690, 62171, 62651, 63132, 63613, 64093, 64574, 65054, 65535, 0, 28808, 38775, 46801, 51785, 55886, 59410, 62572, 65535, 0, 27376, 38639, 45052, 51465, 55448, 59021, 62594, 65535, 0, 33403, 39569, 45102, 49961, 54047, 57959, 61788, 65535, 0, 25851, 43356, 47828, 52204, 55964, 59413, 62507, 65535, 0, 34277, 40337, 45432, 50311, 54326, 58171, 61853, 65535, 0, 33538, 39865, 45302, 50076, 54549, 58478, 62159, 65535, 0, 27445, 35258, 40665, 46072, 51362, 56540, 61086, 65535, 0, 22080, 30779, 37065, 43085, 48849, 54613, 60133, 65535, 0, 13417, 21748, 30078, 38231, 46383, 53091, 59515, 65535 }; const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB1_16_CDF_start_ptr[ NLSF_MSVQ_CB1_16_STAGES ] = { &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[ 0 ], &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[ 33 ], &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[ 42 ], &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[ 51 ], &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[ 60 ], &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[ 69 ], &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[ 78 ], &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[ 87 ], &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[ 96 ], &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[ 105 ] }; const SKP_int SKP_Silk_NLSF_MSVQ_CB1_16_CDF_middle_idx[ NLSF_MSVQ_CB1_16_STAGES ] = { 5, 2, 2, 2, 2, 2, 2, 3, 3, 4 }; const SKP_int16 SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ NLSF_MSVQ_CB1_16_VECTORS ] = { 57, 98, 133, 134, 138, 144, 145, 147, 152, 177, 177, 178, 181, 183, 184, 202, 206, 215, 218, 222, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 38, 87, 97, 119, 128, 135, 140, 143, 40, 81, 107, 107, 129, 134, 134, 143, 31, 109, 114, 120, 128, 130, 131, 132, 43, 61, 124, 125, 132, 136, 141, 142, 30, 110, 118, 120, 129, 131, 133, 133, 31, 108, 115, 121, 124, 130, 133, 137, 40, 98, 115, 115, 116, 117, 123, 124, 50, 93, 108, 110, 112, 112, 114, 115, 73, 95, 95, 96, 96, 105, 107, 110 }; const SKP_int SKP_Silk_NLSF_MSVQ_CB1_16_ndelta_min_Q15[ 16 + 1 ] = { 148, 3, 60, 68, 117, 86, 121, 124, 152, 153, 207, 151, 225, 239, 126, 183, 792 }; const SKP_int16 SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * NLSF_MSVQ_CB1_16_VECTORS ] = { 1309, 3060, 5071, 6996, 9028, 10938, 12934, 14891, 16933, 18854, 20792, 22764, 24753, 26659, 28626, 30501, 1264, 2745, 4610, 6408, 8286, 10043, 12084, 14108, 16118, 18163, 20095, 22164, 24264, 26316, 28329, 30251, 1044, 2080, 3672, 5179, 7140, 9100, 11070, 13065, 15423, 17790, 19931, 22101, 24290, 26361, 28499, 30418, 1131, 2476, 4478, 6149, 7902, 9875, 11938, 13809, 15869, 17730, 19948, 21707, 23761, 25535, 27426, 28917, 1040, 2004, 4026, 6100, 8432, 10494, 12610, 14694, 16797, 18775, 20799, 22782, 24772, 26682, 28631, 30516, 2310, 3812, 5913, 7933, 10033, 11881, 13885, 15798, 17751, 19576, 21482, 23276, 25157, 27010, 28833, 30623, 1254, 2847, 5013, 6781, 8626, 10370, 12726, 14633, 16281, 17852, 19870, 21472, 23002, 24629, 26710, 27960, 1468, 3059, 4987, 7026, 8741, 10412, 12281, 14020, 15970, 17723, 19640, 21522, 23472, 25661, 27986, 30225, 2171, 3566, 5605, 7384, 9404, 11220, 13030, 14758, 16687, 18417, 20346, 22091, 24055, 26212, 28356, 30397, 2409, 4676, 7543, 9786, 11419, 12935, 14368, 15653, 17366, 18943, 20762, 22477, 24440, 26327, 28284, 30242, 2354, 4222, 6820, 9107, 11596, 13934, 15973, 17682, 19158, 20517, 21991, 23420, 25178, 26936, 28794, 30527, 1323, 2414, 4184, 6039, 7534, 9398, 11099, 13097, 14799, 16451, 18434, 20887, 23490, 25838, 28046, 30225, 1361, 3243, 6048, 8511, 11001, 13145, 15073, 16608, 18126, 19381, 20912, 22607, 24660, 26668, 28663, 30566, 1216, 2648, 5901, 8422, 10037, 11425, 12973, 14603, 16686, 18600, 20555, 22415, 24450, 26280, 28206, 30077, 2417, 4048, 6316, 8433, 10510, 12757, 15072, 17295, 19573, 21503, 23329, 24782, 26235, 27689, 29214, 30819, 1012, 2345, 4991, 7377, 9465, 11916, 14296, 16566, 18672, 20544, 22292, 23838, 25415, 27050, 28848, 30551, 1937, 3693, 6267, 8019, 10372, 12194, 14287, 15657, 17431, 18864, 20769, 22206, 24037, 25463, 27383, 28602, 1969, 3305, 5017, 6726, 8375, 9993, 11634, 13280, 15078, 16751, 18464, 20119, 21959, 23858, 26224, 29298, 1198, 2647, 5428, 7423, 9775, 12155, 14665, 16344, 18121, 19790, 21557, 22847, 24484, 25742, 27639, 28711, 1636, 3353, 5447, 7597, 9837, 11647, 13964, 16019, 17862, 20116, 22319, 24037, 25966, 28086, 29914, 31294, 2676, 4105, 6378, 8223, 10058, 11549, 13072, 14453, 15956, 17355, 18931, 20402, 22183, 23884, 25717, 27723, 1373, 2593, 4449, 5633, 7300, 8425, 9474, 10818, 12769, 15722, 19002, 21429, 23682, 25924, 28135, 30333, 1596, 3183, 5378, 7164, 8670, 10105, 11470, 12834, 13991, 15042, 16642, 17903, 20759, 25283, 27770, 30240, 2037, 3987, 6237, 8117, 9954, 12245, 14217, 15892, 17775, 20114, 22314, 25942, 26305, 26483, 26796, 28561, 2181, 3858, 5760, 7924, 10041, 11577, 13769, 15700, 17429, 19879, 23583, 24538, 25212, 25693, 28688, 30507, 1992, 3882, 6474, 7883, 9381, 12672, 14340, 15701, 16658, 17832, 20850, 22885, 24677, 26457, 28491, 30460, 2391, 3988, 5448, 7432, 11014, 12579, 13140, 14146, 15898, 18592, 21104, 22993, 24673, 27186, 28142, 29612, 1713, 5102, 6989, 7798, 8670, 10110, 12746, 14881, 16709, 18407, 20126, 22107, 24181, 26198, 28237, 30137, 1612, 3617, 6148, 8359, 9576, 11528, 14936, 17809, 18287, 18729, 19001, 21111, 24631, 26596, 28740, 30643, 2266, 4168, 7862, 9546, 9618, 9703, 10134, 13897, 16265, 18432, 20587, 22605, 24754, 26994, 29125, 30840, 1840, 3917, 6272, 7809, 9714, 11438, 13767, 15799, 19244, 21972, 22980, 23180, 23723, 25650, 29117, 31085, 1458, 3612, 6008, 7488, 9827, 11893, 14086, 15734, 17440, 19535, 22424, 24767, 29246, 29928, 30516, 30947, -102, -121, -31, -6, 5, -2, 8, -18, -4, 6, 14, -2, -12, -16, -12, -60, -126, -353, -574, -677, -657, -617, -498, -393, -348, -277, -225, -164, -102, -70, -31, 33, 4, 379, 387, 551, 605, 620, 532, 482, 442, 454, 385, 347, 322, 299, 266, 200, 1168, 951, 672, 246, 60, -161, -259, -234, -253, -282, -203, -187, -155, -176, -198, -178, 10, 170, 393, 609, 555, 208, -330, -571, -769, -633, -319, -43, 95, 105, 106, 116, -152, -140, -125, 5, 173, 274, 264, 331, -37, -293, -609, -786, -959, -814, -645, -238, -91, 36, -11, -101, -279, -227, -40, 90, 530, 677, 890, 1104, 999, 835, 564, 295, -280, -364, -340, -331, -284, 288, 761, 880, 988, 627, 146, -226, -203, -181, -142, 39, 24, -26, -107, -92, -161, -135, -131, -88, -160, -156, -75, -43, -36, -6, -33, 33, -324, -415, -108, 124, 157, 191, 203, 197, 144, 109, 152, 176, 190, 122, 101, 159, 663, 668, 480, 400, 379, 444, 446, 458, 343, 351, 310, 228, 133, 44, 75, 63, -84, 39, -29, 35, -94, -233, -261, -354, 77, 262, -24, -145, -333, -409, -404, -597, -488, -300, 910, 592, 412, 120, 130, -51, -37, -77, -172, -181, -159, -148, -72, -62, 510, 516, 113, -585, -1075, -957, -417, -195, 9, 7, -88, -173, -91, 54, 98, 95, -28, 197, -527, -621, 157, 122, -168, 147, 309, 300, 336, 315, 396, 408, 376, 106, -162, -170, -315, 98, 821, 908, 570, -33, -312, -568, -572, -378, -107, 23, 156, 93, -129, -87, 20, -72, -37, 40, 21, 27, 48, 75, 77, 65, 46, 71, 66, 47, 136, 344, 236, 322, 170, 283, 269, 291, 162, -43, -204, -259, -240, -305, -350, -312, 447, 348, 345, 257, 71, -131, -77, -190, -202, -40, 35, 133, 261, 365, 438, 303, -8, 22, 140, 137, -300, -641, -764, -268, -23, -25, 73, -162, -150, -212, -72, 6, 39, 78, 104, -93, -308, -136, 117, -71, -513, -820, -700, -450, -161, -23, 29, 78, 337, 106, -406, -782, -112, 233, 383, 62, -126, 6, -77, -29, -146, -123, -51, -27, -27, -381, -641, 402, 539, 8, -207, -366, -36, -27, -204, -227, -237, -189, -64, 51, -92, -137, -281, 62, 233, 92, 148, 294, 363, 416, 564, 625, 370, -36, -469, -462, 102, 168, 32, 117, -21, 97, 139, 89, 104, 35, 4, 82, 66, 58, 73, 93, -76, -320, -236, -189, -203, -142, -27, -73, 9, -9, -25, 12, -15, 4, 4, -50, 314, 180, 162, -49, 199, -108, -227, -66, -447, -67, -264, -394, 5, 55, -133, -176, -116, -241, 272, 109, 282, 262, 192, -64, -392, -514, 156, 203, 154, 72, -34, -160, -73, 3, -33, -431, 321, 18, -567, -590, -108, 88, 66, 51, -31, -193, -46, 65, -29, -23, 215, -31, 101, -113, 32, 304, 88, 320, 448, 5, -439, -562, -508, -135, -13, -171, -8, 182, -99, -181, -149, 376, 476, 64, -396, -652, -150, 176, 222, 65, -590, 719, 271, 399, 245, 72, -156, -152, -176, 59, 94, 125, -9, -7, 9, 1, -61, -116, -82, 1, 79, 22, -44, -15, -48, -65, -62, -101, -102, -54, -70, -78, -80, -25, 398, 71, 139, 38, 90, 194, 222, 249, 165, 94, 221, 262, 163, 91, -206, 573, 200, -287, -147, 5, -18, -85, -74, -125, -87, 85, 141, 4, -4, 28, 234, 48, -150, -111, -506, 237, -209, 345, 94, -124, 77, 121, 143, 12, -80, -48, 191, 144, -93, -65, -151, -643, 435, 106, 87, 7, 65, 102, 94, 68, 5, 99, 222, 93, 94, 355, -13, -89, -228, -503, 287, 109, 108, 449, 253, -29, -109, -116, 15, -73, -20, 131, -147, 72, 59, -150, -594, 273, 316, 132, 199, 106, 198, 212, 220, 82, 45, -13, 223, 137, 270, 38, 252, 135, -177, -207, -360, -102, 403, 406, -14, 83, 64, 51, -7, -99, -97, -88, -124, -65, 42, 32, 28, 29, 12, 20, 119, -26, -212, -201, 373, 251, 141, 103, 36, -52, 66, 18, -6, -95, -196, 5, 98, -85, -108, 218, -164, 20, 356, 172, 37, 266, 23, 112, -24, -99, -92, -178, 29, -278, 388, -60, -220, 300, -13, 154, 191, 15, -37, -110, -153, -150, -114, -7, -94, -31, -62, -177, 4, -70, 35, 453, 147, -247, -328, 101, 20, -114, 147, 108, -119, -109, -102, -238, 55, -102, 173, -89, 129, 138, -330, -160, 485, 154, -59, -170, -20, -34, -261, -40, -129, 77, -84, 69, 83, 160, 169, 63, -516, 30, 336, 52, -0, -52, -124, 158, 19, 197, -10, -375, 405, 285, 114, -395, -47, 196, 62, 87, -106, -65, -75, -69, -13, 34, 99, 59, 83, 98, 44, 0, 24, 18, 17, 70, -22, 194, 208, 144, -79, -15, 32, -104, -28, -105, -186, -212, -228, -79, -76, 51, -71, 72, 118, -34, -3, -171, 5, 2, -108, -125, 62, -58, 58, -121, 73, -466, 92, 63, -94, -78, -76, 212, 36, -225, -71, -354, 152, 143, -79, -246, -51, -31, -6, -270, 240, 210, 30, -157, -231, 74, -146, 88, -273, 156, 92, 56, 71, 2, 318, 164, 32, -110, -35, -41, -95, -106, 11, 132, -68, 55, 123, -83, -149, 212, 132, 0, -194, 55, 206, -108, -353, 289, -195, 1, 233, -22, -60, 20, 26, 68, 166, 27, -58, 130, 112, 107, 27, -165, 115, -93, -37, 38, 83, 483, 65, -229, -13, 157, 85, 50, 136, 10, 32, 83, 82, 55, 5, -9, -52, -78, -81, -51, 40, 18, -127, -224, -41, 53, -210, -113, 24, -17, -187, -89, 8, 121, 83, 77, 91, -74, -35, -112, -161, -173, 102, 132, -125, -61, 103, -260, 52, 166, -32, -156, -87, -56, 60, -70, -124, 242, 114, -251, -166, 201, 127, 28, -11, 23, -80, -115, -20, -51, -348, 340, -34, 133, 13, 92, -124, -136, -120, -26, -6, 17, 28, 21, 120, -168, 160, -35, 115, 28, 9, 7, -56, 39, 156, 256, -18, 1, 277, 82, -70, -144, -88, -13, -59, -157, 8, -134, 21, -40, 58, -21, 194, -276, 97, 279, -56, -140, 125, 57, -184, -204, -70, -2, 128, -202, -78, 230, -23, 161, -102, 1, 1, 180, -31, -86, -167, -57, -60, 27, -13, 99, 108, 111, 76, 69, 34, -21, 53, 38, 34, 78, 73, 219, 51, 15, -72, -103, -207, 30, 213, -14, 31, -94, -40, -144, 67, 4, 105, 59, -240, 25, 244, 69, 58, 23, -24, -5, -15, -133, -71, -67, 181, 29, -45, 121, 96, 51, -72, -53, 56, -153, -27, 85, 183, 211, 105, -34, -46, 43, -72, -93, 36, -128, 29, 111, -95, -156, -179, -235, 21, -39, -71, -33, -61, -252, 230, -131, 157, -21, -85, -28, -123, 80, -160, 63, 47, -6, -49, -96, -19, 17, -58, 17, -0, -13, -170, 25, -35, 59, 10, -31, -413, 81, 62, 18, -164, 245, 92, -165, 42, 26, 126, -248, 193, -55, 16, 39, 14, 50 }; const SKP_Silk_NLSF_CBS SKP_Silk_NLSF_CB1_16_Stage_info[ NLSF_MSVQ_CB1_16_STAGES ] = { { 32, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * 0 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ 0 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * 32 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ 32 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * 40 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ 40 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * 48 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ 48 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * 56 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ 56 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * 64 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ 64 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * 72 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ 72 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * 80 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ 80 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * 88 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ 88 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * 96 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ 96 ] } }; const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB1_16 = { NLSF_MSVQ_CB1_16_STAGES, SKP_Silk_NLSF_CB1_16_Stage_info, SKP_Silk_NLSF_MSVQ_CB1_16_ndelta_min_Q15, SKP_Silk_NLSF_MSVQ_CB1_16_CDF, SKP_Silk_NLSF_MSVQ_CB1_16_CDF_start_ptr, SKP_Silk_NLSF_MSVQ_CB1_16_CDF_middle_idx }; h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_interpolate.c0000644000175000017500000000521611513063445022244 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main.h" /* Interpolate two vectors */ void SKP_Silk_interpolate( SKP_int xi[ MAX_LPC_ORDER ], /* O interpolated vector */ const SKP_int x0[ MAX_LPC_ORDER ], /* I first vector */ const SKP_int x1[ MAX_LPC_ORDER ], /* I second vector */ const SKP_int ifact_Q2, /* I interp. factor, weight on 2nd vector */ const SKP_int d /* I number of parameters */ ) { SKP_int i; SKP_assert( ifact_Q2 >= 0 ); SKP_assert( ifact_Q2 <= ( 1 << 2 ) ); for( i = 0; i < d; i++ ) { xi[ i ] = ( SKP_int )( ( SKP_int32 )x0[ i ] + SKP_RSHIFT( SKP_MUL( ( SKP_int32 )x1[ i ] - ( SKP_int32 )x0[ i ], ifact_Q2 ), 2 ) ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_biquad_alt.c0000644000175000017500000000770111513063445022024 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_biquad_alt.c * * * * Second order ARMA filter * * Can handle slowly varying filter coefficients * * */ #include "SKP_Silk_SigProc_FIX.h" /* Second order ARMA filter, alternative implementation */ void SKP_Silk_biquad_alt( const SKP_int16 *in, /* I: Input signal */ const SKP_int32 *B_Q28, /* I: MA coefficients [3] */ const SKP_int32 *A_Q28, /* I: AR coefficients [2] */ SKP_int32 *S, /* I/O: State vector [2] */ SKP_int16 *out, /* O: Output signal */ const SKP_int32 len /* I: Signal length (must be even) */ ) { /* DIRECT FORM II TRANSPOSED (uses 2 element state vector) */ SKP_int k; SKP_int32 inval, A0_U_Q28, A0_L_Q28, A1_U_Q28, A1_L_Q28, out32_Q14; /* Negate A_Q28 values and split in two parts */ A0_L_Q28 = ( -A_Q28[ 0 ] ) & 0x00003FFF; /* lower part */ A0_U_Q28 = SKP_RSHIFT( -A_Q28[ 0 ], 14 ); /* upper part */ A1_L_Q28 = ( -A_Q28[ 1 ] ) & 0x00003FFF; /* lower part */ A1_U_Q28 = SKP_RSHIFT( -A_Q28[ 1 ], 14 ); /* upper part */ for( k = 0; k < len; k++ ) { /* S[ 0 ], S[ 1 ]: Q12 */ inval = in[ k ]; out32_Q14 = SKP_LSHIFT( SKP_SMLAWB( S[ 0 ], B_Q28[ 0 ], inval ), 2 ); S[ 0 ] = S[1] + SKP_RSHIFT( SKP_SMULWB( out32_Q14, A0_L_Q28 ), 14 ); S[ 0 ] = SKP_SMLAWB( S[ 0 ], out32_Q14, A0_U_Q28 ); S[ 0 ] = SKP_SMLAWB( S[ 0 ], B_Q28[ 1 ], inval); S[ 1 ] = SKP_RSHIFT( SKP_SMULWB( out32_Q14, A1_L_Q28 ), 14 ); S[ 1 ] = SKP_SMLAWB( S[ 1 ], out32_Q14, A1_U_Q28 ); S[ 1 ] = SKP_SMLAWB( S[ 1 ], B_Q28[ 2 ], inval ); /* Scale back to Q0 and saturate */ out[ k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT( out32_Q14, 14 ) + 2 ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_tables_pulses_per_block.c0000644000175000017500000002321311513063445024600 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_tables.h" const SKP_int SKP_Silk_max_pulses_table[ 4 ] = { 6, 8, 12, 18 }; const SKP_uint16 SKP_Silk_pulses_per_block_CDF[ 10 ][ 21 ] = { { 0, 47113, 61501, 64590, 65125, 65277, 65352, 65407, 65450, 65474, 65488, 65501, 65508, 65514, 65516, 65520, 65521, 65523, 65524, 65526, 65535 }, { 0, 26368, 47760, 58803, 63085, 64567, 65113, 65333, 65424, 65474, 65498, 65511, 65517, 65520, 65523, 65525, 65526, 65528, 65529, 65530, 65535 }, { 0, 9601, 28014, 45877, 57210, 62560, 64611, 65260, 65447, 65500, 65511, 65519, 65521, 65525, 65526, 65529, 65530, 65531, 65532, 65534, 65535 }, { 0, 3351, 12462, 25972, 39782, 50686, 57644, 61525, 63521, 64506, 65009, 65255, 65375, 65441, 65471, 65488, 65497, 65505, 65509, 65512, 65535 }, { 0, 488, 2944, 9295, 19712, 32160, 43976, 53121, 59144, 62518, 64213, 65016, 65346, 65470, 65511, 65515, 65525, 65529, 65531, 65534, 65535 }, { 0, 17013, 30405, 40812, 48142, 53466, 57166, 59845, 61650, 62873, 63684, 64223, 64575, 64811, 64959, 65051, 65111, 65143, 65165, 65183, 65535 }, { 0, 2994, 8323, 15845, 24196, 32300, 39340, 45140, 49813, 53474, 56349, 58518, 60167, 61397, 62313, 62969, 63410, 63715, 63906, 64056, 65535 }, { 0, 88, 721, 2795, 7542, 14888, 24420, 34593, 43912, 51484, 56962, 60558, 62760, 64037, 64716, 65069, 65262, 65358, 65398, 65420, 65535 }, { 0, 287, 789, 2064, 4398, 8174, 13534, 20151, 27347, 34533, 41295, 47242, 52070, 55772, 58458, 60381, 61679, 62533, 63109, 63519, 65535 }, { 0, 1, 3, 91, 4521, 14708, 28329, 41955, 52116, 58375, 61729, 63534, 64459, 64924, 65092, 65164, 65182, 65198, 65203, 65211, 65535 } }; const SKP_int SKP_Silk_pulses_per_block_CDF_offset = 6; const SKP_int16 SKP_Silk_pulses_per_block_BITS_Q6[ 9 ][ 20 ] = { { 30, 140, 282, 444, 560, 625, 654, 677, 731, 780, 787, 844, 859, 960, 896, 1024, 960, 1024, 960, 821 }, { 84, 103, 164, 252, 350, 442, 526, 607, 663, 731, 787, 859, 923, 923, 960, 1024, 960, 1024, 1024, 875 }, { 177, 117, 120, 162, 231, 320, 426, 541, 657, 803, 832, 960, 896, 1024, 923, 1024, 1024, 1024, 960, 1024 }, { 275, 182, 146, 144, 166, 207, 261, 322, 388, 450, 516, 582, 637, 710, 762, 821, 832, 896, 923, 734 }, { 452, 303, 216, 170, 153, 158, 182, 220, 274, 337, 406, 489, 579, 681, 896, 811, 896, 960, 923, 1024 }, { 125, 147, 170, 202, 232, 265, 295, 332, 368, 406, 443, 483, 520, 563, 606, 646, 704, 739, 757, 483 }, { 285, 232, 200, 190, 193, 206, 224, 244, 266, 289, 315, 340, 367, 394, 425, 462, 496, 539, 561, 350 }, { 611, 428, 319, 242, 202, 178, 172, 180, 199, 229, 268, 313, 364, 422, 482, 538, 603, 683, 739, 586 }, { 501, 450, 364, 308, 264, 231, 212, 204, 204, 210, 222, 241, 265, 295, 326, 362, 401, 437, 469, 321 } }; const SKP_uint16 SKP_Silk_rate_levels_CDF[ 2 ][ 10 ] = { { 0, 2005, 12717, 20281, 31328, 36234, 45816, 57753, 63104, 65535 }, { 0, 8553, 23489, 36031, 46295, 53519, 56519, 59151, 64185, 65535 } }; const SKP_int SKP_Silk_rate_levels_CDF_offset = 4; const SKP_int16 SKP_Silk_rate_levels_BITS_Q6[ 2 ][ 9 ] = { { 322, 167, 199, 164, 239, 178, 157, 231, 304 }, { 188, 137, 153, 171, 204, 285, 297, 237, 358 } }; const SKP_uint16 SKP_Silk_shell_code_table0[ 33 ] = { 0, 32748, 65535, 0, 9505, 56230, 65535, 0, 4093, 32204, 61720, 65535, 0, 2285, 16207, 48750, 63424, 65535, 0, 1709, 9446, 32026, 55752, 63876, 65535, 0, 1623, 6986, 21845, 45381, 59147, 64186, 65535 }; const SKP_uint16 SKP_Silk_shell_code_table1[ 52 ] = { 0, 32691, 65535, 0, 12782, 52752, 65535, 0, 4847, 32665, 60899, 65535, 0, 2500, 17305, 47989, 63369, 65535, 0, 1843, 10329, 32419, 55433, 64277, 65535, 0, 1485, 7062, 21465, 43414, 59079, 64623, 65535, 0, 0, 4841, 14797, 31799, 49667, 61309, 65535, 65535, 0, 0, 0, 8032, 21695, 41078, 56317, 65535, 65535, 65535 }; const SKP_uint16 SKP_Silk_shell_code_table2[ 102 ] = { 0, 32615, 65535, 0, 14447, 50912, 65535, 0, 6301, 32587, 59361, 65535, 0, 3038, 18640, 46809, 62852, 65535, 0, 1746, 10524, 32509, 55273, 64278, 65535, 0, 1234, 6360, 21259, 43712, 59651, 64805, 65535, 0, 1020, 4461, 14030, 32286, 51249, 61904, 65100, 65535, 0, 851, 3435, 10006, 23241, 40797, 55444, 63009, 65252, 65535, 0, 0, 2075, 7137, 17119, 31499, 46982, 58723, 63976, 65535, 65535, 0, 0, 0, 3820, 11572, 23038, 37789, 51969, 61243, 65535, 65535, 65535, 0, 0, 0, 0, 6882, 16828, 30444, 44844, 57365, 65535, 65535, 65535, 65535, 0, 0, 0, 0, 0, 10093, 22963, 38779, 54426, 65535, 65535, 65535, 65535, 65535 }; const SKP_uint16 SKP_Silk_shell_code_table3[ 207 ] = { 0, 32324, 65535, 0, 15328, 49505, 65535, 0, 7474, 32344, 57955, 65535, 0, 3944, 19450, 45364, 61873, 65535, 0, 2338, 11698, 32435, 53915, 63734, 65535, 0, 1506, 7074, 21778, 42972, 58861, 64590, 65535, 0, 1027, 4490, 14383, 32264, 50980, 61712, 65043, 65535, 0, 760, 3022, 9696, 23264, 41465, 56181, 63253, 65251, 65535, 0, 579, 2256, 6873, 16661, 31951, 48250, 59403, 64198, 65360, 65535, 0, 464, 1783, 5181, 12269, 24247, 39877, 53490, 61502, 64591, 65410, 65535, 0, 366, 1332, 3880, 9273, 18585, 32014, 45928, 56659, 62616, 64899, 65483, 65535, 0, 286, 1065, 3089, 6969, 14148, 24859, 38274, 50715, 59078, 63448, 65091, 65481, 65535, 0, 0, 482, 2010, 5302, 10408, 18988, 30698, 43634, 54233, 60828, 64119, 65288, 65535, 65535, 0, 0, 0, 1006, 3531, 7857, 14832, 24543, 36272, 47547, 56883, 62327, 64746, 65535, 65535, 65535, 0, 0, 0, 0, 1863, 4950, 10730, 19284, 29397, 41382, 52335, 59755, 63834, 65535, 65535, 65535, 65535, 0, 0, 0, 0, 0, 2513, 7290, 14487, 24275, 35312, 46240, 55841, 62007, 65535, 65535, 65535, 65535, 65535, 0, 0, 0, 0, 0, 0, 3606, 9573, 18764, 28667, 40220, 51290, 59924, 65535, 65535, 65535, 65535, 65535, 65535, 0, 0, 0, 0, 0, 0, 0, 4879, 13091, 23376, 36061, 49395, 59315, 65535, 65535, 65535, 65535, 65535, 65535, 65535 }; const SKP_uint16 SKP_Silk_shell_code_table_offsets[ 19 ] = { 0, 0, 3, 7, 12, 18, 25, 33, 42, 52, 63, 75, 88, 102, 117, 133, 150, 168, 187 }; h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_NLSF_MSVQ_encode_FIX.c0000644000175000017500000002673311513063445023360 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" /***********************/ /* NLSF vector encoder */ /***********************/ void SKP_Silk_NLSF_MSVQ_encode_FIX( SKP_int *NLSFIndices, /* O Codebook path vector [ CB_STAGES ] */ SKP_int *pNLSF_Q15, /* I/O Quantized NLSF vector [ LPC_ORDER ] */ const SKP_Silk_NLSF_CB_struct *psNLSF_CB, /* I Codebook object */ const SKP_int *pNLSF_q_Q15_prev, /* I Prev. quantized NLSF vector [LPC_ORDER] */ const SKP_int *pW_Q6, /* I NLSF weight vector [ LPC_ORDER ] */ const SKP_int NLSF_mu_Q15, /* I Rate weight for the RD optimization */ const SKP_int NLSF_mu_fluc_red_Q16, /* I Fluctuation reduction error weight */ const SKP_int NLSF_MSVQ_Survivors, /* I Max survivors from each stage */ const SKP_int LPC_order, /* I LPC order */ const SKP_int deactivate_fluc_red /* I Deactivate fluctuation reduction */ ) { SKP_int i, s, k, cur_survivors = 0, prev_survivors, input_index, cb_index, bestIndex; SKP_int32 rateDistThreshold_Q18; SKP_int pNLSF_in_Q15[ MAX_LPC_ORDER ]; #if( NLSF_MSVQ_FLUCTUATION_REDUCTION == 1 ) SKP_int32 se_Q15, wsse_Q20, bestRateDist_Q20; #endif #if( LOW_COMPLEXITY_ONLY == 1 ) SKP_int32 pRateDist_Q18[ NLSF_MSVQ_TREE_SEARCH_MAX_VECTORS_EVALUATED_LC_MODE ]; SKP_int32 pRate_Q5[ MAX_NLSF_MSVQ_SURVIVORS_LC_MODE ]; SKP_int32 pRate_new_Q5[ MAX_NLSF_MSVQ_SURVIVORS_LC_MODE ]; SKP_int pTempIndices[ MAX_NLSF_MSVQ_SURVIVORS_LC_MODE ]; SKP_int pPath[ MAX_NLSF_MSVQ_SURVIVORS_LC_MODE * NLSF_MSVQ_MAX_CB_STAGES ]; SKP_int pPath_new[ MAX_NLSF_MSVQ_SURVIVORS_LC_MODE * NLSF_MSVQ_MAX_CB_STAGES ]; SKP_int pRes_Q15[ MAX_NLSF_MSVQ_SURVIVORS_LC_MODE * MAX_LPC_ORDER ]; SKP_int pRes_new_Q15[ MAX_NLSF_MSVQ_SURVIVORS_LC_MODE * MAX_LPC_ORDER ]; #else SKP_int32 pRateDist_Q18[ NLSF_MSVQ_TREE_SEARCH_MAX_VECTORS_EVALUATED ]; SKP_int32 pRate_Q5[ MAX_NLSF_MSVQ_SURVIVORS ]; SKP_int32 pRate_new_Q5[ MAX_NLSF_MSVQ_SURVIVORS ]; SKP_int pTempIndices[ MAX_NLSF_MSVQ_SURVIVORS ]; SKP_int pPath[ MAX_NLSF_MSVQ_SURVIVORS * NLSF_MSVQ_MAX_CB_STAGES ]; SKP_int pPath_new[ MAX_NLSF_MSVQ_SURVIVORS * NLSF_MSVQ_MAX_CB_STAGES ]; SKP_int pRes_Q15[ MAX_NLSF_MSVQ_SURVIVORS * MAX_LPC_ORDER ]; SKP_int pRes_new_Q15[ MAX_NLSF_MSVQ_SURVIVORS * MAX_LPC_ORDER ]; #endif const SKP_int *pConstInt; SKP_int *pInt; const SKP_int16 *pCB_element; const SKP_Silk_NLSF_CBS *pCurrentCBStage; SKP_assert( NLSF_MSVQ_Survivors <= MAX_NLSF_MSVQ_SURVIVORS ); SKP_assert( ( LOW_COMPLEXITY_ONLY == 0 ) || ( NLSF_MSVQ_Survivors <= MAX_NLSF_MSVQ_SURVIVORS_LC_MODE ) ); /* Copy the input vector */ SKP_memcpy( pNLSF_in_Q15, pNLSF_Q15, LPC_order * sizeof( SKP_int ) ); /****************************************************/ /* Tree search for the multi-stage vector quantizer */ /****************************************************/ /* Clear accumulated rates */ SKP_memset( pRate_Q5, 0, NLSF_MSVQ_Survivors * sizeof( SKP_int32 ) ); /* Copy NLSFs into residual signal vector */ for( i = 0; i < LPC_order; i++ ) { pRes_Q15[ i ] = pNLSF_Q15[ i ]; } /* Set first stage values */ prev_survivors = 1; /* Loop over all stages */ for( s = 0; s < psNLSF_CB->nStages; s++ ) { /* Set a pointer to the current stage codebook */ pCurrentCBStage = &psNLSF_CB->CBStages[ s ]; /* Calculate the number of survivors in the current stage */ cur_survivors = SKP_min_32( NLSF_MSVQ_Survivors, SKP_SMULBB( prev_survivors, pCurrentCBStage->nVectors ) ); #if( NLSF_MSVQ_FLUCTUATION_REDUCTION == 0 ) /* Find a single best survivor in the last stage, if we */ /* do not need candidates for fluctuation reduction */ if( s == psNLSF_CB->nStages - 1 ) { cur_survivors = 1; } #endif /* Nearest neighbor clustering for multiple input data vectors */ SKP_Silk_NLSF_VQ_rate_distortion_FIX( pRateDist_Q18, pCurrentCBStage, pRes_Q15, pW_Q6, pRate_Q5, NLSF_mu_Q15, prev_survivors, LPC_order ); /* Sort the rate-distortion errors */ SKP_Silk_insertion_sort_increasing( pRateDist_Q18, pTempIndices, prev_survivors * pCurrentCBStage->nVectors, cur_survivors ); /* Discard survivors with rate-distortion values too far above the best one */ if( pRateDist_Q18[ 0 ] < SKP_int32_MAX / NLSF_MSVQ_SURV_MAX_REL_RD ) { rateDistThreshold_Q18 = SKP_MUL( NLSF_MSVQ_SURV_MAX_REL_RD, pRateDist_Q18[ 0 ] ); while( pRateDist_Q18[ cur_survivors - 1 ] > rateDistThreshold_Q18 && cur_survivors > 1 ) { cur_survivors--; } } /* Update accumulated codebook contributions for the 'cur_survivors' best codebook indices */ for( k = 0; k < cur_survivors; k++ ) { if( s > 0 ) { /* Find the indices of the input and the codebook vector */ if( pCurrentCBStage->nVectors == 8 ) { input_index = SKP_RSHIFT( pTempIndices[ k ], 3 ); cb_index = pTempIndices[ k ] & 7; } else { input_index = SKP_DIV32_16( pTempIndices[ k ], pCurrentCBStage->nVectors ); cb_index = pTempIndices[ k ] - SKP_SMULBB( input_index, pCurrentCBStage->nVectors ); } } else { /* Find the indices of the input and the codebook vector */ input_index = 0; cb_index = pTempIndices[ k ]; } /* Subtract new contribution from the previous residual vector for each of 'cur_survivors' */ pConstInt = &pRes_Q15[ SKP_SMULBB( input_index, LPC_order ) ]; pCB_element = &pCurrentCBStage->CB_NLSF_Q15[ SKP_SMULBB( cb_index, LPC_order ) ]; pInt = &pRes_new_Q15[ SKP_SMULBB( k, LPC_order ) ]; for( i = 0; i < LPC_order; i++ ) { pInt[ i ] = pConstInt[ i ] - ( SKP_int )pCB_element[ i ]; } /* Update accumulated rate for stage 1 to the current */ pRate_new_Q5[ k ] = pRate_Q5[ input_index ] + pCurrentCBStage->Rates_Q5[ cb_index ]; /* Copy paths from previous matrix, starting with the best path */ pConstInt = &pPath[ SKP_SMULBB( input_index, psNLSF_CB->nStages ) ]; pInt = &pPath_new[ SKP_SMULBB( k, psNLSF_CB->nStages ) ]; for( i = 0; i < s; i++ ) { pInt[ i ] = pConstInt[ i ]; } /* Write the current stage indices for the 'cur_survivors' to the best path matrix */ pInt[ s ] = cb_index; } if( s < psNLSF_CB->nStages - 1 ) { /* Copy NLSF residual matrix for next stage */ SKP_memcpy( pRes_Q15, pRes_new_Q15, SKP_SMULBB( cur_survivors, LPC_order ) * sizeof( SKP_int ) ); /* Copy rate vector for next stage */ SKP_memcpy( pRate_Q5, pRate_new_Q5, cur_survivors * sizeof( SKP_int32 ) ); /* Copy best path matrix for next stage */ SKP_memcpy( pPath, pPath_new, SKP_SMULBB( cur_survivors, psNLSF_CB->nStages ) * sizeof( SKP_int ) ); } prev_survivors = cur_survivors; } /* (Preliminary) index of the best survivor, later to be decoded */ bestIndex = 0; #if( NLSF_MSVQ_FLUCTUATION_REDUCTION == 1 ) /******************************/ /* NLSF fluctuation reduction */ /******************************/ if( deactivate_fluc_red != 1 ) { /* Search among all survivors, now taking also weighted fluctuation errors into account */ bestRateDist_Q20 = SKP_int32_MAX; for( s = 0; s < cur_survivors; s++ ) { /* Decode survivor to compare with previous quantized NLSF vector */ SKP_Silk_NLSF_MSVQ_decode( pNLSF_Q15, psNLSF_CB, &pPath_new[ SKP_SMULBB( s, psNLSF_CB->nStages ) ], LPC_order ); /* Compare decoded NLSF vector with the previously quantized vector */ wsse_Q20 = 0; for( i = 0; i < LPC_order; i += 2 ) { /* Compute weighted squared quantization error for index i */ se_Q15 = pNLSF_Q15[ i ] - pNLSF_q_Q15_prev[ i ]; // range: [ -32767 : 32767 ] wsse_Q20 = SKP_SMLAWB( wsse_Q20, SKP_SMULBB( se_Q15, se_Q15 ), pW_Q6[ i ] ); /* Compute weighted squared quantization error for index i + 1 */ se_Q15 = pNLSF_Q15[ i + 1 ] - pNLSF_q_Q15_prev[ i + 1 ]; // range: [ -32767 : 32767 ] wsse_Q20 = SKP_SMLAWB( wsse_Q20, SKP_SMULBB( se_Q15, se_Q15 ), pW_Q6[ i + 1 ] ); } SKP_assert( wsse_Q20 >= 0 ); /* Add the fluctuation reduction penalty to the rate distortion error */ wsse_Q20 = SKP_ADD_POS_SAT32( pRateDist_Q18[ s ], SKP_SMULWB( wsse_Q20, NLSF_mu_fluc_red_Q16 ) ); /* Keep index of best survivor */ if( wsse_Q20 < bestRateDist_Q20 ) { bestRateDist_Q20 = wsse_Q20; bestIndex = s; } } } #endif /* Copy best path to output argument */ SKP_memcpy( NLSFIndices, &pPath_new[ SKP_SMULBB( bestIndex, psNLSF_CB->nStages ) ], psNLSF_CB->nStages * sizeof( SKP_int ) ); /* Decode and stabilize the best survivor */ SKP_Silk_NLSF_MSVQ_decode( pNLSF_Q15, psNLSF_CB, NLSFIndices, LPC_order ); } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_encode_pulses.c0000644000175000017500000001770411513063445022553 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main.h" /*********************************************/ /* Encode quantization indices of excitation */ /*********************************************/ SKP_INLINE SKP_int combine_and_check( /* return ok */ SKP_int *pulses_comb, /* O */ const SKP_int *pulses_in, /* I */ SKP_int max_pulses, /* I max value for sum of pulses */ SKP_int len /* I number of output values */ ) { SKP_int k, sum; for( k = 0; k < len; k++ ) { sum = pulses_in[ 2 * k ] + pulses_in[ 2 * k + 1 ]; if( sum > max_pulses ) { return 1; } pulses_comb[ k ] = sum; } return 0; } /* Encode quantization indices of excitation */ void SKP_Silk_encode_pulses( SKP_Silk_range_coder_state *psRC, /* I/O Range coder state */ const SKP_int sigtype, /* I Sigtype */ const SKP_int QuantOffsetType,/* I QuantOffsetType */ const SKP_int q[], /* I quantization indices */ const SKP_int frame_length /* I Frame length */ ) { SKP_int i, k, j, iter, bit, nLS, scale_down, RateLevelIndex = 0; SKP_int32 abs_q, minSumBits_Q6, sumBits_Q6; SKP_int abs_pulses[ MAX_FRAME_LENGTH ]; SKP_int sum_pulses[ MAX_NB_SHELL_BLOCKS ]; SKP_int nRshifts[ MAX_NB_SHELL_BLOCKS ]; SKP_int pulses_comb[ 8 ]; SKP_int *abs_pulses_ptr; const SKP_int *pulses_ptr; const SKP_uint16 *cdf_ptr; const SKP_int16 *nBits_ptr; SKP_memset( pulses_comb, 0, 8 * sizeof( SKP_int ) ); // Fixing Valgrind reported problem /****************************/ /* Prepare for shell coding */ /****************************/ /* Calculate number of shell blocks */ iter = frame_length / SHELL_CODEC_FRAME_LENGTH; /* Take the absolute value of the pulses */ for( i = 0; i < frame_length; i+=4 ) { abs_pulses[i+0] = ( SKP_int )SKP_abs( q[ i + 0 ] ); abs_pulses[i+1] = ( SKP_int )SKP_abs( q[ i + 1 ] ); abs_pulses[i+2] = ( SKP_int )SKP_abs( q[ i + 2 ] ); abs_pulses[i+3] = ( SKP_int )SKP_abs( q[ i + 3 ] ); } /* Calc sum pulses per shell code frame */ abs_pulses_ptr = abs_pulses; for( i = 0; i < iter; i++ ) { nRshifts[ i ] = 0; while( 1 ) { /* 1+1 -> 2 */ scale_down = combine_and_check( pulses_comb, abs_pulses_ptr, SKP_Silk_max_pulses_table[ 0 ], 8 ); /* 2+2 -> 4 */ scale_down += combine_and_check( pulses_comb, pulses_comb, SKP_Silk_max_pulses_table[ 1 ], 4 ); /* 4+4 -> 8 */ scale_down += combine_and_check( pulses_comb, pulses_comb, SKP_Silk_max_pulses_table[ 2 ], 2 ); /* 8+8 -> 16 */ sum_pulses[ i ] = pulses_comb[ 0 ] + pulses_comb[ 1 ]; if( sum_pulses[ i ] > SKP_Silk_max_pulses_table[ 3 ] ) { scale_down++; } if( scale_down ) { /* We need to down scale the quantization signal */ nRshifts[ i ]++; for( k = 0; k < SHELL_CODEC_FRAME_LENGTH; k++ ) { abs_pulses_ptr[ k ] = SKP_RSHIFT( abs_pulses_ptr[ k ], 1 ); } } else { /* Jump out of while(1) loop and go to next shell coding frame */ break; } } abs_pulses_ptr += SHELL_CODEC_FRAME_LENGTH; } /**************/ /* Rate level */ /**************/ /* find rate level that leads to fewest bits for coding of pulses per block info */ minSumBits_Q6 = SKP_int32_MAX; for( k = 0; k < N_RATE_LEVELS - 1; k++ ) { nBits_ptr = SKP_Silk_pulses_per_block_BITS_Q6[ k ]; sumBits_Q6 = SKP_Silk_rate_levels_BITS_Q6[sigtype][ k ]; for( i = 0; i < iter; i++ ) { if( nRshifts[ i ] > 0 ) { sumBits_Q6 += nBits_ptr[ MAX_PULSES + 1 ]; } else { sumBits_Q6 += nBits_ptr[ sum_pulses[ i ] ]; } } if( sumBits_Q6 < minSumBits_Q6 ) { minSumBits_Q6 = sumBits_Q6; RateLevelIndex = k; } } SKP_Silk_range_encoder( psRC, RateLevelIndex, SKP_Silk_rate_levels_CDF[ sigtype ] ); /***************************************************/ /* Sum-Weighted-Pulses Encoding */ /***************************************************/ cdf_ptr = SKP_Silk_pulses_per_block_CDF[ RateLevelIndex ]; for( i = 0; i < iter; i++ ) { if( nRshifts[ i ] == 0 ) { SKP_Silk_range_encoder( psRC, sum_pulses[ i ], cdf_ptr ); } else { SKP_Silk_range_encoder( psRC, MAX_PULSES + 1, cdf_ptr ); for( k = 0; k < nRshifts[ i ] - 1; k++ ) { SKP_Silk_range_encoder( psRC, MAX_PULSES + 1, SKP_Silk_pulses_per_block_CDF[ N_RATE_LEVELS - 1 ] ); } SKP_Silk_range_encoder( psRC, sum_pulses[ i ], SKP_Silk_pulses_per_block_CDF[ N_RATE_LEVELS - 1 ] ); } } /******************/ /* Shell Encoding */ /******************/ for( i = 0; i < iter; i++ ) { if( sum_pulses[ i ] > 0 ) { SKP_Silk_shell_encoder( psRC, &abs_pulses[ i * SHELL_CODEC_FRAME_LENGTH ] ); } } /****************/ /* LSB Encoding */ /****************/ for( i = 0; i < iter; i++ ) { if( nRshifts[ i ] > 0 ) { pulses_ptr = &q[ i * SHELL_CODEC_FRAME_LENGTH ]; nLS = nRshifts[ i ] - 1; for( k = 0; k < SHELL_CODEC_FRAME_LENGTH; k++ ) { abs_q = SKP_abs( pulses_ptr[ k ] ); for( j = nLS; j > 0; j-- ) { bit = SKP_RSHIFT( abs_q, j ) & 1; SKP_Silk_range_encoder( psRC, bit, SKP_Silk_lsb_CDF ); } bit = abs_q & 1; SKP_Silk_range_encoder( psRC, bit, SKP_Silk_lsb_CDF ); } } } /****************/ /* Encode signs */ /****************/ SKP_Silk_encode_signs( psRC, q, frame_length, sigtype, QuantOffsetType, RateLevelIndex ); } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_decode_pulses.c0000644000175000017500000001216611513063445022536 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main.h" /*********************************************/ /* Decode quantization indices of excitation */ /*********************************************/ void SKP_Silk_decode_pulses( SKP_Silk_range_coder_state *psRC, /* I/O Range coder state */ SKP_Silk_decoder_control *psDecCtrl, /* I/O Decoder control */ SKP_int q[], /* O Excitation signal */ const SKP_int frame_length /* I Frame length (preliminary) */ ) { SKP_int i, j, k, iter, abs_q, nLS, bit; SKP_int sum_pulses[ MAX_NB_SHELL_BLOCKS ], nLshifts[ MAX_NB_SHELL_BLOCKS ]; SKP_int *pulses_ptr; const SKP_uint16 *cdf_ptr; /*********************/ /* Decode rate level */ /*********************/ SKP_Silk_range_decoder( &psDecCtrl->RateLevelIndex, psRC, SKP_Silk_rate_levels_CDF[ psDecCtrl->sigtype ], SKP_Silk_rate_levels_CDF_offset ); /* Calculate number of shell blocks */ iter = frame_length / SHELL_CODEC_FRAME_LENGTH; /***************************************************/ /* Sum-Weighted-Pulses Decoding */ /***************************************************/ cdf_ptr = SKP_Silk_pulses_per_block_CDF[ psDecCtrl->RateLevelIndex ]; for( i = 0; i < iter; i++ ) { nLshifts[ i ] = 0; SKP_Silk_range_decoder( &sum_pulses[ i ], psRC, cdf_ptr, SKP_Silk_pulses_per_block_CDF_offset ); /* LSB indication */ while( sum_pulses[ i ] == ( MAX_PULSES + 1 ) ) { nLshifts[ i ]++; SKP_Silk_range_decoder( &sum_pulses[ i ], psRC, SKP_Silk_pulses_per_block_CDF[ N_RATE_LEVELS - 1 ], SKP_Silk_pulses_per_block_CDF_offset ); } } /***************************************************/ /* Shell decoding */ /***************************************************/ for( i = 0; i < iter; i++ ) { if( sum_pulses[ i ] > 0 ) { SKP_Silk_shell_decoder( &q[ SKP_SMULBB( i, SHELL_CODEC_FRAME_LENGTH ) ], psRC, sum_pulses[ i ] ); } else { SKP_memset( &q[ SKP_SMULBB( i, SHELL_CODEC_FRAME_LENGTH ) ], 0, SHELL_CODEC_FRAME_LENGTH * sizeof( SKP_int ) ); } } /***************************************************/ /* LSB Decoding */ /***************************************************/ for( i = 0; i < iter; i++ ) { if( nLshifts[ i ] > 0 ) { nLS = nLshifts[ i ]; pulses_ptr = &q[ SKP_SMULBB( i, SHELL_CODEC_FRAME_LENGTH ) ]; for( k = 0; k < SHELL_CODEC_FRAME_LENGTH; k++ ) { abs_q = pulses_ptr[ k ]; for( j = 0; j < nLS; j++ ) { abs_q = SKP_LSHIFT( abs_q, 1 ); SKP_Silk_range_decoder( &bit, psRC, SKP_Silk_lsb_CDF, 1 ); abs_q += bit; } pulses_ptr[ k ] = abs_q; } } } /****************************************/ /* Decode and add signs to pulse signal */ /****************************************/ SKP_Silk_decode_signs( psRC, q, frame_length, psDecCtrl->sigtype, psDecCtrl->QuantOffsetType, psDecCtrl->RateLevelIndex); } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_NLSF2A_stable.c0000644000175000017500000000545411513063445022201 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main.h" /* Convert NLSF parameters to stable AR prediction filter coefficients */ void SKP_Silk_NLSF2A_stable( SKP_int16 pAR_Q12[ MAX_LPC_ORDER ], /* O Stabilized AR coefs [LPC_order] */ const SKP_int pNLSF[ MAX_LPC_ORDER ], /* I NLSF vector [LPC_order] */ const SKP_int LPC_order /* I LPC/LSF order */ ) { SKP_int i; SKP_int32 invGain_Q30; SKP_Silk_NLSF2A( pAR_Q12, pNLSF, LPC_order ); /* Ensure stable LPCs */ for( i = 0; i < MAX_LPC_STABILIZE_ITERATIONS; i++ ) { if( SKP_Silk_LPC_inverse_pred_gain( &invGain_Q30, pAR_Q12, LPC_order ) == 1 ) { SKP_Silk_bwexpander( pAR_Q12, LPC_order, 65536 - SKP_SMULBB( 66, i ) ); /* 66_Q16 = 0.001 */ } else { break; } } /* Reached the last iteration */ if( i == MAX_LPC_STABILIZE_ITERATIONS ) { for( i = 0; i < LPC_order; i++ ) { pAR_Q12[ i ] = 0; } } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_solve_LS_FIX.c0000644000175000017500000002411011513063445022144 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" /*****************************/ /* Internal function headers */ /*****************************/ typedef struct { SKP_int32 Q36_part; SKP_int32 Q48_part; } inv_D_t; /* Factorize square matrix A into LDL form */ SKP_INLINE void SKP_Silk_LDL_factorize_FIX( SKP_int32 *A, /* I/O Pointer to Symetric Square Matrix */ SKP_int M, /* I Size of Matrix */ SKP_int32 *L_Q16, /* I/O Pointer to Square Upper triangular Matrix */ inv_D_t *inv_D /* I/O Pointer to vector holding inverted diagonal elements of D */ ); /* Solve Lx = b, when L is lower triangular and has ones on the diagonal */ SKP_INLINE void SKP_Silk_LS_SolveFirst_FIX( const SKP_int32 *L_Q16, /* I Pointer to Lower Triangular Matrix */ SKP_int M, /* I Dim of Matrix equation */ const SKP_int32 *b, /* I b Vector */ SKP_int32 *x_Q16 /* O x Vector */ ); /* Solve L^t*x = b, where L is lower triangular with ones on the diagonal */ SKP_INLINE void SKP_Silk_LS_SolveLast_FIX( const SKP_int32 *L_Q16, /* I Pointer to Lower Triangular Matrix */ const SKP_int M, /* I Dim of Matrix equation */ const SKP_int32 *b, /* I b Vector */ SKP_int32 *x_Q16 /* O x Vector */ ); SKP_INLINE void SKP_Silk_LS_divide_Q16_FIX( SKP_int32 T[], /* I/O Numenator vector */ inv_D_t *inv_D, /* I 1 / D vector */ SKP_int M /* I dimension */ ); /* Solves Ax = b, assuming A is symmetric */ void SKP_Silk_solve_LDL_FIX( SKP_int32 *A, /* I Pointer to symetric square matrix A */ SKP_int M, /* I Size of matrix */ const SKP_int32 *b, /* I Pointer to b vector */ SKP_int32 *x_Q16 /* O Pointer to x solution vector */ ) { SKP_int32 L_Q16[ MAX_MATRIX_SIZE * MAX_MATRIX_SIZE ]; SKP_int32 Y[ MAX_MATRIX_SIZE ]; inv_D_t inv_D[ MAX_MATRIX_SIZE ]; SKP_assert( M <= MAX_MATRIX_SIZE ); /*************************************************** Factorize A by LDL such that A = L*D*L', where L is lower triangular with ones on diagonal ****************************************************/ SKP_Silk_LDL_factorize_FIX( A, M, L_Q16, inv_D ); /**************************************************** * substitute D*L'*x = Y. ie: L*D*L'*x = b => L*Y = b <=> Y = inv(L)*b ******************************************************/ SKP_Silk_LS_SolveFirst_FIX( L_Q16, M, b, Y ); /**************************************************** D*L'*x = Y <=> L'*x = inv(D)*Y, because D is diagonal just multiply with 1/d_i ****************************************************/ SKP_Silk_LS_divide_Q16_FIX( Y, inv_D, M ); /**************************************************** x = inv(L') * inv(D) * Y *****************************************************/ SKP_Silk_LS_SolveLast_FIX( L_Q16, M, Y, x_Q16 ); } SKP_INLINE void SKP_Silk_LDL_factorize_FIX( SKP_int32 *A, /* I Pointer to Symetric Square Matrix */ SKP_int M, /* I Size of Matrix */ SKP_int32 *L_Q16, /* I/O Pointer to Square Upper triangular Matrix */ inv_D_t *inv_D /* I/O Pointer to vector holding inverted diagonal elements of D */ ) { SKP_int i, j, k, status, loop_count; const SKP_int32 *ptr1, *ptr2; SKP_int32 diag_min_value, tmp_32, err; SKP_int32 v_Q0[ MAX_MATRIX_SIZE ], D_Q0[ MAX_MATRIX_SIZE ]; SKP_int32 one_div_diag_Q36, one_div_diag_Q40, one_div_diag_Q48; SKP_assert( M <= MAX_MATRIX_SIZE ); status = 1; diag_min_value = SKP_max_32( SKP_SMMUL( SKP_ADD_SAT32( A[ 0 ], A[ SKP_SMULBB( M, M ) - 1 ] ), FIND_LTP_COND_FAC_Q31 ), 1 << 9 ); for( loop_count = 0; loop_count < M && status == 1; loop_count++ ) { status = 0; for( j = 0; j < M; j++ ) { ptr1 = matrix_adr( L_Q16, j, 0, M ); tmp_32 = 0; for( i = 0; i < j; i++ ) { v_Q0[ i ] = SKP_SMULWW( D_Q0[ i ], ptr1[ i ] ); /* Q0 */ tmp_32 = SKP_SMLAWW( tmp_32, v_Q0[ i ], ptr1[ i ] ); /* Q0 */ } tmp_32 = SKP_SUB32( matrix_ptr( A, j, j, M ), tmp_32 ); if( tmp_32 < diag_min_value ) { tmp_32 = SKP_SUB32( SKP_SMULBB( loop_count + 1, diag_min_value ), tmp_32 ); /* Matrix not positive semi-definite, or ill conditioned */ for( i = 0; i < M; i++ ) { matrix_ptr( A, i, i, M ) = SKP_ADD32( matrix_ptr( A, i, i, M ), tmp_32 ); } status = 1; break; } D_Q0[ j ] = tmp_32; /* always < max(Correlation) */ /* two-step division */ one_div_diag_Q36 = SKP_INVERSE32_varQ( tmp_32, 36 ); /* Q36 */ one_div_diag_Q40 = SKP_LSHIFT( one_div_diag_Q36, 4 ); /* Q40 */ err = SKP_SUB32( 1 << 24, SKP_SMULWW( tmp_32, one_div_diag_Q40 ) ); /* Q24 */ one_div_diag_Q48 = SKP_SMULWW( err, one_div_diag_Q40 ); /* Q48 */ /* Save 1/Ds */ inv_D[ j ].Q36_part = one_div_diag_Q36; inv_D[ j ].Q48_part = one_div_diag_Q48; matrix_ptr( L_Q16, j, j, M ) = 65536; /* 1.0 in Q16 */ ptr1 = matrix_adr( A, j, 0, M ); ptr2 = matrix_adr( L_Q16, j + 1, 0, M ); for( i = j + 1; i < M; i++ ) { tmp_32 = 0; for( k = 0; k < j; k++ ) { tmp_32 = SKP_SMLAWW( tmp_32, v_Q0[ k ], ptr2[ k ] ); /* Q0 */ } tmp_32 = SKP_SUB32( ptr1[ i ], tmp_32 ); /* always < max(Correlation) */ /* tmp_32 / D_Q0[j] : Divide to Q16 */ matrix_ptr( L_Q16, i, j, M ) = SKP_ADD32( SKP_SMMUL( tmp_32, one_div_diag_Q48 ), SKP_RSHIFT( SKP_SMULWW( tmp_32, one_div_diag_Q36 ), 4 ) ); /* go to next column */ ptr2 += M; } } } SKP_assert( status == 0 ); } SKP_INLINE void SKP_Silk_LS_divide_Q16_FIX( SKP_int32 T[], /* I/O Numenator vector */ inv_D_t *inv_D, /* I 1 / D vector */ SKP_int M /* I Order */ ) { SKP_int i; SKP_int32 tmp_32; SKP_int32 one_div_diag_Q36, one_div_diag_Q48; for( i = 0; i < M; i++ ) { one_div_diag_Q36 = inv_D[ i ].Q36_part; one_div_diag_Q48 = inv_D[ i ].Q48_part; tmp_32 = T[ i ]; T[ i ] = SKP_ADD32( SKP_SMMUL( tmp_32, one_div_diag_Q48 ), SKP_RSHIFT( SKP_SMULWW( tmp_32, one_div_diag_Q36 ), 4 ) ); } } /* Solve Lx = b, when L is lower triangular and has ones on the diagonal */ SKP_INLINE void SKP_Silk_LS_SolveFirst_FIX( const SKP_int32 *L_Q16, /* I Pointer to Lower Triangular Matrix */ SKP_int M, /* I Dim of Matrix equation */ const SKP_int32 *b, /* I b Vector */ SKP_int32 *x_Q16 /* O x Vector */ ) { SKP_int i, j; const SKP_int32 *ptr32; SKP_int32 tmp_32; for( i = 0; i < M; i++ ) { ptr32 = matrix_adr( L_Q16, i, 0, M ); tmp_32 = 0; for( j = 0; j < i; j++ ) { tmp_32 = SKP_SMLAWW( tmp_32, ptr32[ j ], x_Q16[ j ] ); } x_Q16[ i ] = SKP_SUB32( b[ i ], tmp_32 ); } } /* Solve L^t*x = b, where L is lower triangular with ones on the diagonal */ SKP_INLINE void SKP_Silk_LS_SolveLast_FIX( const SKP_int32 *L_Q16, /* I Pointer to Lower Triangular Matrix */ const SKP_int M, /* I Dim of Matrix equation */ const SKP_int32 *b, /* I b Vector */ SKP_int32 *x_Q16 /* O x Vector */ ) { SKP_int i, j; const SKP_int32 *ptr32; SKP_int32 tmp_32; for( i = M - 1; i >= 0; i-- ) { ptr32 = matrix_adr( L_Q16, 0, i, M ); tmp_32 = 0; for( j = M - 1; j > i; j-- ) { tmp_32 = SKP_SMLAWW( tmp_32, ptr32[ SKP_SMULBB( j, M ) ], x_Q16[ j ] ); } x_Q16[ i ] = SKP_SUB32( b[ i ], tmp_32 ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_gain_quant.c0000644000175000017500000001132311513063445022040 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main.h" #define OFFSET ( ( MIN_QGAIN_DB * 128 ) / 6 + 16 * 128 ) #define SCALE_Q16 ( ( 65536 * ( N_LEVELS_QGAIN - 1 ) ) / ( ( ( MAX_QGAIN_DB - MIN_QGAIN_DB ) * 128 ) / 6 ) ) #define INV_SCALE_Q16 ( ( 65536 * ( ( ( MAX_QGAIN_DB - MIN_QGAIN_DB ) * 128 ) / 6 ) ) / ( N_LEVELS_QGAIN - 1 ) ) /* Gain scalar quantization with hysteresis, uniform on log scale */ void SKP_Silk_gains_quant( SKP_int ind[ NB_SUBFR ], /* O gain indices */ SKP_int32 gain_Q16[ NB_SUBFR ], /* I/O gains (quantized out) */ SKP_int *prev_ind, /* I/O last index in previous frame */ const SKP_int conditional /* I first gain is delta coded if 1 */ ) { SKP_int k; for( k = 0; k < NB_SUBFR; k++ ) { /* Add half of previous quantization error, convert to log scale, scale, floor() */ ind[ k ] = SKP_SMULWB( SCALE_Q16, SKP_Silk_lin2log( gain_Q16[ k ] ) - OFFSET ); /* Round towards previous quantized gain (hysteresis) */ if( ind[ k ] < *prev_ind ) { ind[ k ]++; } /* Compute delta indices and limit */ if( k == 0 && conditional == 0 ) { /* Full index */ ind[ k ] = SKP_LIMIT( ind[ k ], 0, N_LEVELS_QGAIN - 1 ); ind[ k ] = SKP_max_int( ind[ k ], *prev_ind + MIN_DELTA_GAIN_QUANT ); *prev_ind = ind[ k ]; } else { /* Delta index */ ind[ k ] = SKP_LIMIT( ind[ k ] - *prev_ind, MIN_DELTA_GAIN_QUANT, MAX_DELTA_GAIN_QUANT ); /* Accumulate deltas */ *prev_ind += ind[ k ]; /* Shift to make non-negative */ ind[ k ] -= MIN_DELTA_GAIN_QUANT; } /* Convert to linear scale and scale */ gain_Q16[ k ] = SKP_Silk_log2lin( SKP_min_32( SKP_SMULWB( INV_SCALE_Q16, *prev_ind ) + OFFSET, 3967 ) ); /* 3967 = 31 in Q7 */ } } /* Gains scalar dequantization, uniform on log scale */ void SKP_Silk_gains_dequant( SKP_int32 gain_Q16[ NB_SUBFR ], /* O quantized gains */ const SKP_int ind[ NB_SUBFR ], /* I gain indices */ SKP_int *prev_ind, /* I/O last index in previous frame */ const SKP_int conditional /* I first gain is delta coded if 1 */ ) { SKP_int k; for( k = 0; k < NB_SUBFR; k++ ) { if( k == 0 && conditional == 0 ) { *prev_ind = ind[ k ]; } else { /* Delta index */ *prev_ind += ind[ k ] + MIN_DELTA_GAIN_QUANT; } /* Convert to linear scale and scale */ gain_Q16[ k ] = SKP_Silk_log2lin( SKP_min_32( SKP_SMULWB( INV_SCALE_Q16, *prev_ind ) + OFFSET, 3967 ) ); /* 3967 = 31 in Q7 */ } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_main_FIX.h0000644000175000017500000005167111513063445021363 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #ifndef SKP_SILK_MAIN_FIX_H #define SKP_SILK_MAIN_FIX_H #include #include "SKP_Silk_SigProc_FIX.h" #include "SKP_Silk_structs_FIX.h" #include "SKP_Silk_main.h" #include "SKP_Silk_define_FIX.h" #include "SKP_Silk_PLC.h" #define TIC(TAG_NAME) #define TOC(TAG_NAME) #ifndef FORCE_CPP_BUILD #ifdef __cplusplus extern "C" { #endif #endif /*********************/ /* Encoder Functions */ /*********************/ /* Initializes the Silk encoder state */ SKP_int SKP_Silk_init_encoder_FIX( SKP_Silk_encoder_state_FIX *psEnc /* I/O Pointer to Silk FIX encoder state */ ); /* Control the Silk encoder */ SKP_int SKP_Silk_control_encoder_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O Pointer to Silk FIX encoder state */ const SKP_int API_fs_kHz, /* I External (API) sampling rate (kHz) */ const SKP_int PacketSize_ms, /* I Packet length (ms) */ SKP_int32 TargetRate_bps, /* I Target max bitrate (bps) (used if SNR_dB == 0) */ const SKP_int PacketLoss_perc, /* I Packet loss rate (in percent) */ const SKP_int INBandFec_enabled, /* I Enable (1) / disable (0) inband FEC */ const SKP_int DTX_enabled, /* I Enable / disable DTX */ const SKP_int InputFramesize_ms, /* I Inputframe in ms */ const SKP_int Complexity /* I Complexity (0->low; 1->medium; 2->high) */ ); /* Encoder main function */ SKP_int SKP_Silk_encode_frame_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O Pointer to Silk FIX encoder state */ SKP_uint8 *pCode, /* O Pointer to payload */ SKP_int16 *pnBytesOut, /* I/O Pointer to number of payload bytes; */ /* input: max length; output: used */ const SKP_int16 *pIn /* I Pointer to input speech frame */ ); /* Low BitRate Redundancy encoding functionality. Reuse all parameters but encode with lower bitrate */ void SKP_Silk_LBRR_encode_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O Pointer to Silk FIX encoder state */ SKP_Silk_encoder_control_FIX *psEncCtrl, /* I/O Pointer to Silk FIX encoder control struct */ SKP_uint8 *pCode, /* O Pointer to payload */ SKP_int16 *pnBytesOut, /* I/O Pointer to number of payload bytes */ SKP_int16 xfw[] /* I Input signal */ ); /* High-pass filter with cutoff frequency adaptation based on pitch lag statistics */ void SKP_Silk_HP_variable_cutoff_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O Encoder state */ SKP_Silk_encoder_control_FIX *psEncCtrl, /* I/O Encoder control */ SKP_int16 *out, /* O high-pass filtered output signal */ const SKP_int16 *in /* I input signal */ ); /****************/ /* Prefiltering */ /****************/ void SKP_Silk_prefilter_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O Encoder state */ const SKP_Silk_encoder_control_FIX *psEncCtrl, /* I Encoder control */ SKP_int16 xw[], /* O Weighted signal */ const SKP_int16 x[] /* I Speech signal */ ); /**************************************************************/ /* Compute noise shaping coefficients and initial gain values */ /**************************************************************/ void SKP_Silk_noise_shape_analysis_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O Encoder state */ SKP_Silk_encoder_control_FIX *psEncCtrl, /* I/O Encoder control */ const SKP_int16 *pitch_res, /* I LPC residual from pitch analysis */ const SKP_int16 *x /* I Input signal [ 2 * frame_length + la_shape ]*/ ); /* Processing of gains */ void SKP_Silk_process_gains_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O Encoder state */ SKP_Silk_encoder_control_FIX *psEncCtrl /* I/O Encoder control */ ); /* Control low bitrate redundancy usage */ void SKP_Silk_LBRR_ctrl_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O encoder state */ SKP_Silk_encoder_control_FIX *psEncCtrl /* I/O encoder control */ ); /* Calculation of LTP state scaling */ void SKP_Silk_LTP_scale_ctrl_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O encoder state */ SKP_Silk_encoder_control_FIX *psEncCtrl /* I/O encoder control */ ); /**********************************************/ /* Prediction Analysis */ /**********************************************/ /* Find pitch lags */ void SKP_Silk_find_pitch_lags_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O encoder state */ SKP_Silk_encoder_control_FIX *psEncCtrl, /* I/O encoder control */ SKP_int16 res[], /* O residual */ const SKP_int16 x[] /* I Speech signal */ ); void SKP_Silk_find_pred_coefs_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O encoder state */ SKP_Silk_encoder_control_FIX *psEncCtrl, /* I/O encoder control */ const SKP_int16 res_pitch[] /* I Residual from pitch analysis */ ); void SKP_Silk_find_LPC_FIX( SKP_int NLSF_Q15[], /* O LSFs */ SKP_int *interpIndex, /* O LSF interpolation index, only used for LSF interpolation */ const SKP_int prev_NLSFq_Q15[], /* I previous LSFs, only used for LSF interpolation */ const SKP_int useInterpolatedLSFs, /* I Flag */ const SKP_int LPC_order, /* I LPC order */ const SKP_int16 x[], /* I Input signal */ const SKP_int subfr_length /* I Input signal subframe length including preceeding samples */ ); void SKP_Silk_LTP_analysis_filter_FIX( SKP_int16 *LTP_res, /* O: LTP residual signal of length NB_SUBFR * ( pre_length + subfr_length ) */ const SKP_int16 *x, /* I: Pointer to input signal with at least max( pitchL ) preceeding samples */ const SKP_int16 LTPCoef_Q14[ LTP_ORDER * NB_SUBFR ],/* I: LTP_ORDER LTP coefficients for each NB_SUBFR subframe */ const SKP_int pitchL[ NB_SUBFR ], /* I: Pitch lag, one for each subframe */ const SKP_int32 invGains_Qxx[ NB_SUBFR ], /* I: Inverse quantization gains, one for each subframe */ const SKP_int Qxx, /* I: Inverse quantization gains Q domain */ const SKP_int subfr_length, /* I: Length of each subframe */ const SKP_int pre_length /* I: Length of the preceeding samples starting at &x[0] for each subframe */ ); /* Finds LTP vector from correlations */ void SKP_Silk_find_LTP_FIX( SKP_int16 b_Q14[ NB_SUBFR * LTP_ORDER ], /* O LTP coefs */ SKP_int32 WLTP[ NB_SUBFR * LTP_ORDER * LTP_ORDER ], /* O Weight for LTP quantization */ SKP_int *LTPredCodGain_Q7, /* O LTP coding gain */ const SKP_int16 r_first[], /* I residual signal after LPC signal + state for first 10 ms */ const SKP_int16 r_last[], /* I residual signal after LPC signal + state for last 10 ms */ const SKP_int lag[ NB_SUBFR ], /* I LTP lags */ const SKP_int32 Wght_Q15[ NB_SUBFR ], /* I weights */ const SKP_int subfr_length, /* I subframe length */ const SKP_int mem_offset, /* I number of samples in LTP memory */ SKP_int corr_rshifts[ NB_SUBFR ] /* O right shifts applied to correlations */ ); /* LTP tap quantizer */ void SKP_Silk_quant_LTP_gains_FIX( SKP_int16 B_Q14[], /* I/O (un)quantized LTP gains */ SKP_int cbk_index[], /* O Codebook Index */ SKP_int *periodicity_index, /* O Periodicity Index */ const SKP_int32 W_Q18[], /* I Error Weights in Q18 */ SKP_int mu_Q8, /* I Mu value (R/D tradeoff) */ SKP_int lowComplexity /* I Flag for low complexity */ ); /******************/ /* NLSF Quantizer */ /******************/ /* Limit, stabilize, convert and quantize NLSFs. */ void SKP_Silk_process_NLSFs_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O encoder state */ SKP_Silk_encoder_control_FIX *psEncCtrl, /* I/O encoder control */ SKP_int *pNLSF_Q15 /* I/O Normalized LSFs (quant out) (0 - (2^15-1)) */ ); /* LSF vector encoder */ void SKP_Silk_NLSF_MSVQ_encode_FIX( SKP_int *NLSFIndices, /* O Codebook path vector [ CB_STAGES ] */ SKP_int *pNLSF_Q15, /* I/O Quantized NLSF vector [ LPC_ORDER ] */ const SKP_Silk_NLSF_CB_struct *psNLSF_CB, /* I Codebook object */ const SKP_int *pNLSF_q_Q15_prev, /* I Prev. quantized NLSF vector [LPC_ORDER] */ const SKP_int *pW_Q6, /* I NLSF weight vector [ LPC_ORDER ] */ const SKP_int NLSF_mu_Q15, /* I Rate weight for the RD optimization */ const SKP_int NLSF_mu_fluc_red_Q16, /* I Fluctuation reduction error weight */ const SKP_int NLSF_MSVQ_Survivors, /* I Max survivors from each stage */ const SKP_int LPC_order, /* I LPC order */ const SKP_int deactivate_fluc_red /* I Deactivate fluctuation reduction */ ); /* Rate-Distortion calculations for multiple input data vectors */ void SKP_Silk_NLSF_VQ_rate_distortion_FIX( SKP_int32 *pRD_Q20, /* O Rate-distortion values [psNLSF_CBS->nVectors*N] */ const SKP_Silk_NLSF_CBS *psNLSF_CBS, /* I NLSF codebook stage struct */ const SKP_int *in_Q15, /* I Input vectors to be quantized */ const SKP_int *w_Q6, /* I Weight vector */ const SKP_int32 *rate_acc_Q5, /* I Accumulated rates from previous stage */ const SKP_int mu_Q15, /* I Weight between weighted error and rate */ const SKP_int N, /* I Number of input vectors to be quantized */ const SKP_int LPC_order /* I LPC order */ ); /* Compute weighted quantization errors for an LPC_order element input vector, over one codebook stage */ void SKP_Silk_NLSF_VQ_sum_error_FIX( SKP_int32 *err_Q20, /* O Weighted quantization errors [N*K] */ const SKP_int *in_Q15, /* I Input vectors to be quantized [N*LPC_order] */ const SKP_int *w_Q6, /* I Weighting vectors [N*LPC_order] */ const SKP_int16 *pCB_Q15, /* I Codebook vectors [K*LPC_order] */ const SKP_int N, /* I Number of input vectors */ const SKP_int K, /* I Number of codebook vectors */ const SKP_int LPC_order /* I Number of LPCs */ ); /* Entropy constrained MATRIX-weighted VQ, for a single input data vector */ void SKP_Silk_VQ_WMat_EC_FIX( SKP_int *ind, /* O index of best codebook vector */ SKP_int32 *rate_dist_Q14, /* O best weighted quantization error + mu * rate*/ const SKP_int16 *in_Q14, /* I input vector to be quantized */ const SKP_int32 *W_Q18, /* I weighting matrix */ const SKP_int16 *cb_Q14, /* I codebook */ const SKP_int16 *cl_Q6, /* I code length for each codebook vector */ const SKP_int mu_Q8, /* I tradeoff between weighted error and rate */ SKP_int L /* I number of vectors in codebook */ ); /******************/ /* Linear Algebra */ /******************/ /* Calculates correlation matrix X'*X */ void SKP_Silk_corrMatrix_FIX( const SKP_int16 *x, /* I x vector [L + order - 1] used to form data matrix X */ const SKP_int L, /* I Length of vectors */ const SKP_int order, /* I Max lag for correlation */ SKP_int32 *XX, /* O Pointer to X'*X correlation matrix [ order x order ]*/ SKP_int *rshifts /* I/O Right shifts of correlations */ ); /* Calculates correlation vector X'*t */ void SKP_Silk_corrVector_FIX( const SKP_int16 *x, /* I x vector [L + order - 1] used to form data matrix X */ const SKP_int16 *t, /* I target vector [L] */ const SKP_int L, /* I Length of vectors */ const SKP_int order, /* I Max lag for correlation */ SKP_int32 *Xt, /* O Pointer to X'*t correlation vector [order] */ const SKP_int rshifts /* I Right shifts of correlations */ ); /* Add noise to matrix diagonal */ void SKP_Silk_regularize_correlations_FIX( SKP_int32 *XX, /* I/O Correlation matrices */ SKP_int32 *xx, /* I/O Correlation values */ SKP_int32 noise, /* I Noise to add */ SKP_int D /* I Dimension of XX */ ); /* Solves Ax = b, assuming A is symmetric */ void SKP_Silk_solve_LDL_FIX( SKP_int32 *A, /* I Pointer to symetric square matrix A */ SKP_int M, /* I Size of matrix */ const SKP_int32 *b, /* I Pointer to b vector */ SKP_int32 *x_Q16 /* O Pointer to x solution vector */ ); /* Residual energy: nrg = wxx - 2 * wXx * c + c' * wXX * c */ SKP_int32 SKP_Silk_residual_energy16_covar_FIX( const SKP_int16 *c, /* I Prediction vector */ const SKP_int32 *wXX, /* I Correlation matrix */ const SKP_int32 *wXx, /* I Correlation vector */ SKP_int32 wxx, /* I Signal energy */ SKP_int D, /* I Dimension */ SKP_int cQ /* I Q value for c vector 0 - 15 */ ); /* Calculates residual energies of input subframes where all subframes have LPC_order */ /* of preceeding samples */ void SKP_Silk_residual_energy_FIX( SKP_int32 nrgs[ NB_SUBFR ], /* O Residual energy per subframe */ SKP_int nrgsQ[ NB_SUBFR ], /* O Q value per subframe */ const SKP_int16 x[], /* I Input signal */ const SKP_int16 a_Q12[ 2 ][ MAX_LPC_ORDER ],/* I AR coefs for each frame half */ const SKP_int32 gains[ NB_SUBFR ], /* I Quantization gains */ const SKP_int subfr_length, /* I Subframe length */ const SKP_int LPC_order /* I LPC order */ ); #ifndef FORCE_CPP_BUILD #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* FORCE_CPP_BUILD */ #endif /* SKP_SILK_MAIN_FIX_H */ h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_log2lin.c0000644000175000017500000000615611513063445021270 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_log2lin.c * * * * Convert input to a linear scale * * * * Copyright 2006 (c), Skype Limited * * Date: 060221 * * */ #include "SKP_Silk_SigProc_FIX.h" /* Approximation of 2^() (very close inverse of SKP_Silk_lin2log()) */ /* Convert input to a linear scale */ SKP_int32 SKP_Silk_log2lin( const SKP_int32 inLog_Q7 ) /* I: Input on log scale */ { SKP_int32 out, frac_Q7; if( inLog_Q7 < 0 ) { return 0; } out = SKP_LSHIFT( 1, SKP_RSHIFT( inLog_Q7, 7 ) ); frac_Q7 = inLog_Q7 & 0x7F; if( inLog_Q7 < 2048 ) { /* Piece-wise parabolic approximation */ out = SKP_ADD_RSHIFT( out, SKP_MUL( out, SKP_SMLAWB( frac_Q7, SKP_MUL( frac_Q7, 128 - frac_Q7 ), -174 ) ), 7 ); } else { /* Piece-wise parabolic approximation */ out = SKP_MLA( out, SKP_RSHIFT( out, 7 ), SKP_SMLAWB( frac_Q7, SKP_MUL( frac_Q7, 128 - frac_Q7 ), -174 ) ); } return out; } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_tables.h0000644000175000017500000002331311513063445021173 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #ifndef SKP_SILK_TABLES_H #define SKP_SILK_TABLES_H #include "SKP_Silk_define.h" #include "SKP_Silk_structs.h" #define PITCH_EST_MAX_LAG_MS 18 /* 18 ms -> 56 Hz */ #define PITCH_EST_MIN_LAG_MS 2 /* 2 ms -> 500 Hz */ #ifdef __cplusplus extern "C" { #endif /* entropy coding tables */ extern const SKP_uint16 SKP_Silk_type_offset_CDF[ 5 ]; /* 5 */ extern const SKP_uint16 SKP_Silk_type_offset_joint_CDF[ 4 ][ 5 ]; /* 20 */ extern const SKP_int SKP_Silk_type_offset_CDF_offset; extern const SKP_uint16 SKP_Silk_gain_CDF[ 2 ][ N_LEVELS_QGAIN + 1 ]; /* 130 */ extern const SKP_int SKP_Silk_gain_CDF_offset; extern const SKP_uint16 SKP_Silk_delta_gain_CDF[ MAX_DELTA_GAIN_QUANT - MIN_DELTA_GAIN_QUANT + 2 ]; /* 46 */ extern const SKP_int SKP_Silk_delta_gain_CDF_offset; extern const SKP_uint16 SKP_Silk_pitch_lag_NB_CDF[ 8 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ]; /* 130 */ extern const SKP_int SKP_Silk_pitch_lag_NB_CDF_offset; extern const SKP_uint16 SKP_Silk_pitch_lag_MB_CDF[ 12 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ]; /* 194 */ extern const SKP_int SKP_Silk_pitch_lag_MB_CDF_offset; extern const SKP_uint16 SKP_Silk_pitch_lag_WB_CDF[ 16 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ]; /* 258 */ extern const SKP_int SKP_Silk_pitch_lag_WB_CDF_offset; extern const SKP_uint16 SKP_Silk_pitch_lag_SWB_CDF[ 24 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ]; /* 386 */ extern const SKP_int SKP_Silk_pitch_lag_SWB_CDF_offset; extern const SKP_uint16 SKP_Silk_pitch_contour_CDF[ 35 ]; /* 35 */ extern const SKP_int SKP_Silk_pitch_contour_CDF_offset; extern const SKP_uint16 SKP_Silk_pitch_contour_NB_CDF[ 12 ]; /* 12 */ extern const SKP_int SKP_Silk_pitch_contour_NB_CDF_offset; extern const SKP_uint16 SKP_Silk_pitch_delta_CDF[23]; /* 23 */ extern const SKP_int SKP_Silk_pitch_delta_CDF_offset; extern const SKP_uint16 SKP_Silk_pulses_per_block_CDF[ N_RATE_LEVELS ][ MAX_PULSES + 3 ]; /* 210 */ extern const SKP_int SKP_Silk_pulses_per_block_CDF_offset; extern const SKP_int16 SKP_Silk_pulses_per_block_BITS_Q6[ N_RATE_LEVELS - 1 ][ MAX_PULSES + 2 ]; /* 180 */ extern const SKP_uint16 SKP_Silk_rate_levels_CDF[ 2 ][ N_RATE_LEVELS ]; /* 20 */ extern const SKP_int SKP_Silk_rate_levels_CDF_offset; extern const SKP_int16 SKP_Silk_rate_levels_BITS_Q6[ 2 ][ N_RATE_LEVELS - 1 ]; /* 18 */ extern const SKP_int SKP_Silk_max_pulses_table[ 4 ]; /* 4 */ extern const SKP_uint16 SKP_Silk_shell_code_table0[ 33 ]; /* 33 */ extern const SKP_uint16 SKP_Silk_shell_code_table1[ 52 ]; /* 52 */ extern const SKP_uint16 SKP_Silk_shell_code_table2[ 102 ]; /* 102 */ extern const SKP_uint16 SKP_Silk_shell_code_table3[ 207 ]; /* 207 */ extern const SKP_uint16 SKP_Silk_shell_code_table_offsets[ 19 ]; /* 19 */ extern const SKP_uint16 SKP_Silk_lsb_CDF[ 3 ]; /* 3 */ extern const SKP_uint16 SKP_Silk_sign_CDF[ 36 ][ 3 ]; /* 108 */ extern const SKP_uint16 SKP_Silk_LTP_per_index_CDF[ 4 ]; /* 4 */ extern const SKP_int SKP_Silk_LTP_per_index_CDF_offset; extern const SKP_int16 * const SKP_Silk_LTP_gain_BITS_Q6_ptrs[ NB_LTP_CBKS ]; /* 3 */ extern const SKP_uint16 * const SKP_Silk_LTP_gain_CDF_ptrs[ NB_LTP_CBKS ]; /* 3 */ extern const SKP_int SKP_Silk_LTP_gain_CDF_offsets[ NB_LTP_CBKS ]; /* 3 */ extern const SKP_int32 SKP_Silk_LTP_gain_middle_avg_RD_Q14; extern const SKP_uint16 SKP_Silk_LTPscale_CDF[ 4 ]; /* 4 */ extern const SKP_int SKP_Silk_LTPscale_offset; /* Tables for LTPScale */ extern const SKP_int16 SKP_Silk_LTPScales_table_Q14[ 3 ]; extern const SKP_uint16 SKP_Silk_vadflag_CDF[ 3 ]; /* 3 */ extern const SKP_int SKP_Silk_vadflag_offset; extern const SKP_int SKP_Silk_SamplingRates_table[ 4 ]; /* 4 */ extern const SKP_uint16 SKP_Silk_SamplingRates_CDF[ 5 ]; /* 5 */ extern const SKP_int SKP_Silk_SamplingRates_offset; extern const SKP_uint16 SKP_Silk_NLSF_interpolation_factor_CDF[ 6 ]; extern const SKP_int SKP_Silk_NLSF_interpolation_factor_offset; /* NLSF codebooks */ extern const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB0_16, SKP_Silk_NLSF_CB1_16; extern const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB0_10, SKP_Silk_NLSF_CB1_10; /* quantization tables */ extern const SKP_int16 * const SKP_Silk_LTP_vq_ptrs_Q14[ NB_LTP_CBKS ]; /* 168 */ extern const SKP_int SKP_Silk_LTP_vq_sizes[ NB_LTP_CBKS ]; /* 3 */ /* Piece-wise linear mapping from bitrate in kbps to coding quality in dB SNR */ extern const SKP_int32 TargetRate_table_NB[ TARGET_RATE_TAB_SZ ]; extern const SKP_int32 TargetRate_table_MB[ TARGET_RATE_TAB_SZ ]; extern const SKP_int32 TargetRate_table_WB[ TARGET_RATE_TAB_SZ ]; extern const SKP_int32 TargetRate_table_SWB[ TARGET_RATE_TAB_SZ ]; extern const SKP_int32 SNR_table_Q1[ TARGET_RATE_TAB_SZ ]; extern const SKP_int32 SNR_table_one_bit_per_sample_Q7[ 4 ]; /* Filter coeficicnts for HP filter: 4. Order filter implementad as two biquad filters */ extern const SKP_int16 SKP_Silk_SWB_detect_B_HP_Q13[ NB_SOS ][ 3 ]; extern const SKP_int16 SKP_Silk_SWB_detect_A_HP_Q13[ NB_SOS ][ 2 ]; /* Decoder high-pass filter coefficients for 24 kHz sampling */ extern const SKP_int16 SKP_Silk_Dec_A_HP_24[ DEC_HP_ORDER ]; /* 2 */ extern const SKP_int16 SKP_Silk_Dec_B_HP_24[ DEC_HP_ORDER + 1 ]; /* 3 */ /* Decoder high-pass filter coefficients for 16 kHz sampling */ extern const SKP_int16 SKP_Silk_Dec_A_HP_16[ DEC_HP_ORDER ]; /* 2 */ extern const SKP_int16 SKP_Silk_Dec_B_HP_16[ DEC_HP_ORDER + 1 ]; /* 3 */ /* Decoder high-pass filter coefficients for 12 kHz sampling */ extern const SKP_int16 SKP_Silk_Dec_A_HP_12[ DEC_HP_ORDER ]; /* 2 */ extern const SKP_int16 SKP_Silk_Dec_B_HP_12[ DEC_HP_ORDER + 1 ]; /* 3 */ /* Decoder high-pass filter coefficients for 8 kHz sampling */ extern const SKP_int16 SKP_Silk_Dec_A_HP_8[ DEC_HP_ORDER ]; /* 2 */ extern const SKP_int16 SKP_Silk_Dec_B_HP_8[ DEC_HP_ORDER + 1 ]; /* 3 */ /* Table for frame termination indication */ extern const SKP_uint16 SKP_Silk_FrameTermination_CDF[ 5 ]; extern const SKP_int SKP_Silk_FrameTermination_offset; extern const SKP_uint16 SKP_Silk_FrameTermination_v4_CDF[ 6 ]; extern const SKP_int SKP_Silk_FrameTermination_v4_offset; /* Table for random seed */ extern const SKP_uint16 SKP_Silk_Seed_CDF[ 5 ]; extern const SKP_int SKP_Silk_Seed_offset; /* Quantization offsets */ extern const SKP_int16 SKP_Silk_Quantization_Offsets_Q10[ 2 ][ 2 ]; #if SWITCH_TRANSITION_FILTERING /* Interpolation points for filter coefficients used in the bandwidth transition smoother */ extern const SKP_int32 SKP_Silk_Transition_LP_B_Q28[ TRANSITION_INT_NUM ][ TRANSITION_NB ]; extern const SKP_int32 SKP_Silk_Transition_LP_A_Q28[ TRANSITION_INT_NUM ][ TRANSITION_NA ]; #endif #ifdef __cplusplus } #endif #endif h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_macros.h0000644000175000017500000001261611513063445021211 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #ifndef _SKP_SILK_API_C_H_ #define _SKP_SILK_API_C_H_ // This is an inline header file for general platform. // (a32 * (SKP_int32)((SKP_int16)(b32))) >> 16 output have to be 32bit int #define SKP_SMULWB(a32, b32) ((((a32) >> 16) * (SKP_int32)((SKP_int16)(b32))) + ((((a32) & 0x0000FFFF) * (SKP_int32)((SKP_int16)(b32))) >> 16)) // a32 + (b32 * (SKP_int32)((SKP_int16)(c32))) >> 16 output have to be 32bit int #define SKP_SMLAWB(a32, b32, c32) ((a32) + ((((b32) >> 16) * (SKP_int32)((SKP_int16)(c32))) + ((((b32) & 0x0000FFFF) * (SKP_int32)((SKP_int16)(c32))) >> 16))) // (a32 * (b32 >> 16)) >> 16 #define SKP_SMULWT(a32, b32) (((a32) >> 16) * ((b32) >> 16) + ((((a32) & 0x0000FFFF) * ((b32) >> 16)) >> 16)) // a32 + (b32 * (c32 >> 16)) >> 16 #define SKP_SMLAWT(a32, b32, c32) ((a32) + (((b32) >> 16) * ((c32) >> 16)) + ((((b32) & 0x0000FFFF) * ((c32) >> 16)) >> 16)) // (SKP_int32)((SKP_int16)(a3))) * (SKP_int32)((SKP_int16)(b32)) output have to be 32bit int #define SKP_SMULBB(a32, b32) ((SKP_int32)((SKP_int16)(a32)) * (SKP_int32)((SKP_int16)(b32))) // a32 + (SKP_int32)((SKP_int16)(b32)) * (SKP_int32)((SKP_int16)(c32)) output have to be 32bit int #define SKP_SMLABB(a32, b32, c32) ((a32) + ((SKP_int32)((SKP_int16)(b32))) * (SKP_int32)((SKP_int16)(c32))) // (SKP_int32)((SKP_int16)(a32)) * (b32 >> 16) #define SKP_SMULBT(a32, b32) ((SKP_int32)((SKP_int16)(a32)) * ((b32) >> 16)) // a32 + (SKP_int32)((SKP_int16)(b32)) * (c32 >> 16) #define SKP_SMLABT(a32, b32, c32) ((a32) + ((SKP_int32)((SKP_int16)(b32))) * ((c32) >> 16)) // a64 + (b32 * c32) #define SKP_SMLAL(a64, b32, c32) (SKP_ADD64((a64), ((SKP_int64)(b32) * (SKP_int64)(c32)))) // (a32 * b32) >> 16 #define SKP_SMULWW(a32, b32) SKP_MLA(SKP_SMULWB((a32), (b32)), (a32), SKP_RSHIFT_ROUND((b32), 16)) // a32 + ((b32 * c32) >> 16) #define SKP_SMLAWW(a32, b32, c32) SKP_MLA(SKP_SMLAWB((a32), (b32), (c32)), (b32), SKP_RSHIFT_ROUND((c32), 16)) /* add/subtract with output saturated */ #define SKP_ADD_SAT32(a, b) ((((a) + (b)) & 0x80000000) == 0 ? \ ((((a) & (b)) & 0x80000000) != 0 ? SKP_int32_MIN : (a)+(b)) : \ ((((a) | (b)) & 0x80000000) == 0 ? SKP_int32_MAX : (a)+(b)) ) #define SKP_SUB_SAT32(a, b) ((((a)-(b)) & 0x80000000) == 0 ? \ (( (a) & ((b)^0x80000000) & 0x80000000) ? SKP_int32_MIN : (a)-(b)) : \ ((((a)^0x80000000) & (b) & 0x80000000) ? SKP_int32_MAX : (a)-(b)) ) SKP_INLINE SKP_int32 SKP_Silk_CLZ16(SKP_int16 in16) { SKP_int32 out32 = 0; if( in16 == 0 ) { return 16; } /* test nibbles */ if( in16 & 0xFF00 ) { if( in16 & 0xF000 ) { in16 >>= 12; } else { out32 += 4; in16 >>= 8; } } else { if( in16 & 0xFFF0 ) { out32 += 8; in16 >>= 4; } else { out32 += 12; } } /* test bits and return */ if( in16 & 0xC ) { if( in16 & 0x8 ) return out32 + 0; else return out32 + 1; } else { if( in16 & 0xE ) return out32 + 2; else return out32 + 3; } } SKP_INLINE SKP_int32 SKP_Silk_CLZ32(SKP_int32 in32) { /* test highest 16 bits and convert to SKP_int16 */ if( in32 & 0xFFFF0000 ) { return SKP_Silk_CLZ16((SKP_int16)(in32 >> 16)); } else { return SKP_Silk_CLZ16((SKP_int16)in32) + 16; } } #endif //_SKP_SILK_API_C_H_ h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_control.h0000644000175000017500000000753611513063445021412 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #ifndef SKP_SILK_CONTROL_H #define SKP_SILK_CONTROL_H #include "SKP_Silk_typedef.h" #ifdef __cplusplus extern "C" { #endif /***********************************************/ /* Structure for controlling encoder operation */ /***********************************************/ typedef struct { /* I: Sampling rate in Hertz; 8000/12000/16000/24000 */ SKP_int32 sampleRate; /* I: Number of samples per packet; must be equivalent of 20, 40, 60, 80 or 100 ms */ SKP_int packetSize; /* I: Bitrate during active speech in bits/second; internally limited */ SKP_int32 bitRate; /* I: Uplink Packet loss in pct (0...100) */ SKP_int packetLossPercentage; /* I: Complexity mode; 0 is lowest; 1 is medium and 2 is highest complexity */ SKP_int complexity; /* I: Flag to enable in-band Forward Error Correction (FEC); 0/1 */ SKP_int useInBandFEC; /* I: Flag to enable Discontinous Transmission; 0/1 */ SKP_int useDTX; } SKP_SILK_SDK_EncControlStruct; /**************************************************************************/ /* Structure for controlling decoder operation and reading decoder status */ /**************************************************************************/ typedef struct { /* I: Sampling rate in Hertz; 8000/12000/16000/24000 */ SKP_int32 sampleRate; /* O: Number of samples per frame */ SKP_int frameSize; /* O: Frames per packet 1, 2, 3, 4, 5 */ SKP_int framesPerPacket; /* O: Flag to indicate that the decoder has remaining payloads internally */ SKP_int moreInternalDecoderFrames; /* O: Distance between main payload and redundant payload in packets */ SKP_int inBandFECOffset; } SKP_SILK_SDK_DecControlStruct; #ifdef __cplusplus } #endif #endif h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_resample_1_2.c0000644000175000017500000001016011513063445022161 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_resample_1_2 * * * * Downsample by a factor 2 * * * * Copyright 2006 (c), Skype Limited * * Date: 060221 * * */ #include "SKP_Silk_SigProc_FIX.h" /* Coefficients for 2-fold resampling */ static SKP_int16 A20_Resample_1_2[ 3 ] = { 1254, 10102, 22898 }; static SKP_int16 A21_Resample_1_2[ 3 ] = { 4810, 16371, 29374 }; /* Downsample by a factor 2 */ void SKP_Silk_resample_1_2( const SKP_int16 *in, /* I: 16 kHz signal [2*len] */ SKP_int32 *S, /* I/O: State vector [6] */ SKP_int16 *out, /* O: 8 kHz signal [len] */ SKP_int32 *scratch, /* I: Scratch memory [4*len] */ const SKP_int32 len /* I: Number of OUTPUT samples*/ ) { SKP_int32 k, idx; /* De-interleave allpass inputs, and convert Q15 -> Q25 */ for( k = 0; k < len; k++ ) { idx = SKP_LSHIFT( k, 1 ); scratch[ k ] = SKP_LSHIFT( (SKP_int32)in[ idx ], 10 ); scratch[ k + len ] = SKP_LSHIFT( (SKP_int32)in[ idx + 1 ], 10 ); } idx = SKP_LSHIFT( len, 1 ); /* Allpass filters */ SKP_Silk_allpass_int( scratch, S, A21_Resample_1_2[ 0 ], scratch + idx, len ); SKP_Silk_allpass_int( scratch + idx, S + 1, A21_Resample_1_2[ 1 ], scratch + idx + len, len ); SKP_Silk_allpass_int( scratch + idx + len, S + 2, A21_Resample_1_2[ 2 ], scratch, len ); SKP_Silk_allpass_int( scratch + len, S + 3, A20_Resample_1_2[ 0 ], scratch + idx, len ); SKP_Silk_allpass_int( scratch + idx, S + 4, A20_Resample_1_2[ 1 ], scratch + idx + len, len ); SKP_Silk_allpass_int( scratch + idx + len, S + 5, A20_Resample_1_2[ 2 ], scratch + len, len ); /* Add two allpass outputs */ for( k = 0; k < len; k++ ) { out[ k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( scratch[ k ] + scratch[ k + len ], 11 ) ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_encode_parameters_v4.c0000644000175000017500000001712611513063445024012 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main.h" /*******************************************/ /* Encode parameters to create the payload */ /*******************************************/ void SKP_Silk_encode_parameters_v4( SKP_Silk_encoder_state *psEncC, /* I/O Encoder state */ SKP_Silk_encoder_control *psEncCtrlC, /* I/O Encoder control */ SKP_Silk_range_coder_state *psRC /* I/O Range encoder state */ ) { SKP_int i, k, typeOffset; SKP_int encode_absolute_lagIndex, delta_lagIndex; const SKP_Silk_NLSF_CB_struct *psNLSF_CB; /************************/ /* Encode sampling rate */ /************************/ /* only done for first frame in packet */ if( psEncC->nFramesInPayloadBuf == 0 ) { /* Initialize arithmetic coder */ SKP_Silk_range_enc_init( &psEncC->sRC ); psEncC->nBytesInPayloadBuf = 0; /* get sampling rate index */ for( i = 0; i < 3; i++ ) { if( SKP_Silk_SamplingRates_table[ i ] == psEncC->fs_kHz ) { break; } } SKP_Silk_range_encoder( psRC, i, SKP_Silk_SamplingRates_CDF ); } /*********************************************/ /* Encode VAD flag */ /*********************************************/ SKP_Silk_range_encoder( psRC, psEncC->vadFlag, SKP_Silk_vadflag_CDF ); /*******************************************/ /* Encode signal type and quantizer offset */ /*******************************************/ typeOffset = 2 * psEncCtrlC->sigtype + psEncCtrlC->QuantOffsetType; if( psEncC->nFramesInPayloadBuf == 0 ) { /* first frame in packet: independent coding */ SKP_Silk_range_encoder( psRC, typeOffset, SKP_Silk_type_offset_CDF ); } else { /* condidtional coding */ SKP_Silk_range_encoder( psRC, typeOffset, SKP_Silk_type_offset_joint_CDF[ psEncC->typeOffsetPrev ] ); } psEncC->typeOffsetPrev = typeOffset; /****************/ /* Encode gains */ /****************/ /* first subframe */ if( psEncC->nFramesInPayloadBuf == 0 ) { /* first frame in packet: independent coding */ SKP_Silk_range_encoder( psRC, psEncCtrlC->GainsIndices[ 0 ], SKP_Silk_gain_CDF[ psEncCtrlC->sigtype ] ); } else { /* condidtional coding */ SKP_Silk_range_encoder( psRC, psEncCtrlC->GainsIndices[ 0 ], SKP_Silk_delta_gain_CDF ); } /* remaining subframes */ for( i = 1; i < NB_SUBFR; i++ ) { SKP_Silk_range_encoder( psRC, psEncCtrlC->GainsIndices[ i ], SKP_Silk_delta_gain_CDF ); } /****************/ /* Encode NLSFs */ /****************/ /* Range encoding of the NLSF path */ psNLSF_CB = psEncC->psNLSF_CB[ psEncCtrlC->sigtype ]; SKP_Silk_range_encoder_multi( psRC, psEncCtrlC->NLSFIndices, psNLSF_CB->StartPtr, psNLSF_CB->nStages ); /* Encode NLSF interpolation factor */ SKP_assert( psEncC->useInterpolatedNLSFs == 1 || psEncCtrlC->NLSFInterpCoef_Q2 == ( 1 << 2 ) ); SKP_Silk_range_encoder( psRC, psEncCtrlC->NLSFInterpCoef_Q2, SKP_Silk_NLSF_interpolation_factor_CDF ); if( psEncCtrlC->sigtype == SIG_TYPE_VOICED ) { /*********************/ /* Encode pitch lags */ /*********************/ /* lag index */ encode_absolute_lagIndex = 1; if( psEncC->nFramesInPayloadBuf > 0 && psEncC->prev_sigtype == SIG_TYPE_VOICED ) { /* Delta Encoding */ delta_lagIndex = psEncCtrlC->lagIndex - psEncC->prev_lagIndex; if( delta_lagIndex > MAX_DELTA_LAG ) { delta_lagIndex = ( MAX_DELTA_LAG << 1 ) + 1; } else if ( delta_lagIndex < -MAX_DELTA_LAG ) { delta_lagIndex = ( MAX_DELTA_LAG << 1 ) + 1; } else { delta_lagIndex = delta_lagIndex + MAX_DELTA_LAG; encode_absolute_lagIndex = 0; /* Only use delta */ } SKP_Silk_range_encoder( psRC, delta_lagIndex, SKP_Silk_pitch_delta_CDF ); } if( encode_absolute_lagIndex ) { /* Absolute encoding */ if( psEncC->fs_kHz == 8 ) { SKP_Silk_range_encoder( psRC, psEncCtrlC->lagIndex, SKP_Silk_pitch_lag_NB_CDF ); } else if( psEncC->fs_kHz == 12 ) { SKP_Silk_range_encoder( psRC, psEncCtrlC->lagIndex, SKP_Silk_pitch_lag_MB_CDF ); } else if( psEncC->fs_kHz == 16 ) { SKP_Silk_range_encoder( psRC, psEncCtrlC->lagIndex, SKP_Silk_pitch_lag_WB_CDF ); } else { SKP_Silk_range_encoder( psRC, psEncCtrlC->lagIndex, SKP_Silk_pitch_lag_SWB_CDF ); } } psEncC->prev_lagIndex = psEncCtrlC->lagIndex; /* countour index */ if( psEncC->fs_kHz == 8 ) { /* Less codevectors used in 8 khz mode */ SKP_Silk_range_encoder( psRC, psEncCtrlC->contourIndex, SKP_Silk_pitch_contour_NB_CDF ); } else { /* Joint for 12, 16, 24 khz */ SKP_Silk_range_encoder( psRC, psEncCtrlC->contourIndex, SKP_Silk_pitch_contour_CDF ); } /********************/ /* Encode LTP gains */ /********************/ /* PERIndex value */ SKP_Silk_range_encoder( psRC, psEncCtrlC->PERIndex, SKP_Silk_LTP_per_index_CDF ); /* Codebook Indices */ for( k = 0; k < NB_SUBFR; k++ ) { SKP_Silk_range_encoder( psRC, psEncCtrlC->LTPIndex[ k ], SKP_Silk_LTP_gain_CDF_ptrs[ psEncCtrlC->PERIndex ] ); } /**********************/ /* Encode LTP scaling */ /**********************/ SKP_Silk_range_encoder( psRC, psEncCtrlC->LTP_scaleIndex, SKP_Silk_LTPscale_CDF ); } /***************/ /* Encode seed */ /***************/ SKP_Silk_range_encoder( psRC, psEncCtrlC->Seed, SKP_Silk_Seed_CDF ); } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_pitch_est_tables.c0000644000175000017500000000726611513063445023241 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_typedef.h" #include "SKP_Silk_pitch_est_defines.h" /********************************************************/ /* Auto Generated File from generate_pitch_est_tables.m */ /********************************************************/ const SKP_int16 SKP_Silk_CB_lags_stage2[PITCH_EST_NB_SUBFR][PITCH_EST_NB_CBKS_STAGE2_EXT] = { {0, 2,-1,-1,-1, 0, 0, 1, 1, 0, 1}, {0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0}, {0,-1, 2, 1, 0, 1, 1, 0, 0,-1,-1} }; const SKP_int16 SKP_Silk_CB_lags_stage3[PITCH_EST_NB_SUBFR][PITCH_EST_NB_CBKS_STAGE3_MAX] = { {-9,-7,-6,-5,-5,-4,-4,-3,-3,-2,-2,-2,-1,-1,-1, 0, 0, 0, 1, 1, 0, 1, 2, 2, 2, 3, 3, 4, 4, 5, 6, 5, 6, 8}, {-3,-2,-2,-2,-1,-1,-1,-1,-1, 0, 0,-1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 2, 1, 2, 2, 2, 2, 3}, { 3, 3, 2, 2, 2, 2, 1, 2, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,-1, 0, 0,-1,-1,-1,-1,-1,-2,-2,-2}, { 9, 8, 6, 5, 6, 5, 4, 4, 3, 3, 2, 2, 2, 1, 0, 1, 1, 0, 0, 0,-1,-1,-1,-2,-2,-2,-3,-3,-4,-4,-5,-5,-6,-7} }; const SKP_int16 SKP_Silk_Lag_range_stage3[ SigProc_PITCH_EST_MAX_COMPLEX + 1 ] [ PITCH_EST_NB_SUBFR ][ 2 ] = { /* Lags to search for low number of stage3 cbks */ { {-2,6}, {-1,5}, {-1,5}, {-2,7} }, /* Lags to search for middle number of stage3 cbks */ { {-4,8}, {-1,6}, {-1,6}, {-4,9} }, /* Lags to search for max number of stage3 cbks */ { {-9,12}, {-3,7}, {-2,7}, {-7,13} } }; const SKP_int16 SKP_Silk_cbk_sizes_stage3[SigProc_PITCH_EST_MAX_COMPLEX + 1] = { PITCH_EST_NB_CBKS_STAGE3_MIN, PITCH_EST_NB_CBKS_STAGE3_MID, PITCH_EST_NB_CBKS_STAGE3_MAX }; const SKP_int16 SKP_Silk_cbk_offsets_stage3[SigProc_PITCH_EST_MAX_COMPLEX + 1] = { ((PITCH_EST_NB_CBKS_STAGE3_MAX - PITCH_EST_NB_CBKS_STAGE3_MIN) >> 1), ((PITCH_EST_NB_CBKS_STAGE3_MAX - PITCH_EST_NB_CBKS_STAGE3_MID) >> 1), 0 }; h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_LSF_cos_table.c0000644000175000017500000001045511513063445022356 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_SigProc_FIX.h" // Q12 values (even) const SKP_int SKP_Silk_LSFCosTab_FIX_Q12[LSF_COS_TAB_SZ_FIX + 1] = { 8192, 8190, 8182, 8170, 8152, 8130, 8104, 8072, 8034, 7994, 7946, 7896, 7840, 7778, 7714, 7644, 7568, 7490, 7406, 7318, 7226, 7128, 7026, 6922, 6812, 6698, 6580, 6458, 6332, 6204, 6070, 5934, 5792, 5648, 5502, 5352, 5198, 5040, 4880, 4718, 4552, 4382, 4212, 4038, 3862, 3684, 3502, 3320, 3136, 2948, 2760, 2570, 2378, 2186, 1990, 1794, 1598, 1400, 1202, 1002, 802, 602, 402, 202, 0, -202, -402, -602, -802, -1002, -1202, -1400, -1598, -1794, -1990, -2186, -2378, -2570, -2760, -2948, -3136, -3320, -3502, -3684, -3862, -4038, -4212, -4382, -4552, -4718, -4880, -5040, -5198, -5352, -5502, -5648, -5792, -5934, -6070, -6204, -6332, -6458, -6580, -6698, -6812, -6922, -7026, -7128, -7226, -7318, -7406, -7490, -7568, -7644, -7714, -7778, -7840, -7896, -7946, -7994, -8034, -8072, -8104, -8130, -8152, -8170, -8182, -8190, -8192 }; h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_create_init_destroy.c0000644000175000017500000000473611513063445023763 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main.h" /************************/ /* Init Decoder State */ /************************/ SKP_int SKP_Silk_init_decoder( SKP_Silk_decoder_state *psDec /* I/O Decoder state pointer */ ) { SKP_memset( psDec, 0, sizeof( SKP_Silk_decoder_state ) ); /* Set sampling rate to 24 kHz, and init non-zero values */ SKP_Silk_decoder_set_fs( psDec, 24 ); /* Used to deactivate e.g. LSF interpolation and fluctuation reduction */ psDec->first_frame_after_reset = 1; psDec->prev_inv_gain_Q16 = 65536; /* Reset CNG state */ SKP_Silk_CNG_Reset( psDec ); SKP_Silk_PLC_Reset( psDec ); psDec->bitstream_v = USE_BIT_STREAM_V; return(0); } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_LP_variable_cutoff.c0000644000175000017500000002240511513063445023443 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* Elliptic/Cauer filters designed with 0.1 dB passband ripple, 80 dB minimum stopband attenuation, and [0.95 : 0.15 : 0.35] normalized cut off frequencies. */ #include "SKP_Silk_main.h" #if SWITCH_TRANSITION_FILTERING /* Helper function, that interpolates the filter taps */ SKP_INLINE void SKP_Silk_LP_interpolate_filter_taps( SKP_int32 B_Q28[ TRANSITION_NB ], SKP_int32 A_Q28[ TRANSITION_NA ], const SKP_int ind, const SKP_int32 fac_Q16 ) { SKP_int nb, na; if( ind < TRANSITION_INT_NUM - 1 ) { if( fac_Q16 > 0 ) { if( fac_Q16 == SKP_SAT16( fac_Q16 ) ) { /* fac_Q16 is in range of a 16-bit int */ /* Piece-wise linear interpolation of B and A */ for( nb = 0; nb < TRANSITION_NB; nb++ ) { B_Q28[ nb ] = SKP_SMLAWB( SKP_Silk_Transition_LP_B_Q28[ ind ][ nb ], SKP_Silk_Transition_LP_B_Q28[ ind + 1 ][ nb ] - SKP_Silk_Transition_LP_B_Q28[ ind ][ nb ], fac_Q16 ); } for( na = 0; na < TRANSITION_NA; na++ ) { A_Q28[ na ] = SKP_SMLAWB( SKP_Silk_Transition_LP_A_Q28[ ind ][ na ], SKP_Silk_Transition_LP_A_Q28[ ind + 1 ][ na ] - SKP_Silk_Transition_LP_A_Q28[ ind ][ na ], fac_Q16 ); } } else if( fac_Q16 == ( 1 << 15 ) ) { /* Neither fac_Q16 nor ( ( 1 << 16 ) - fac_Q16 ) is in range of a 16-bit int */ /* Piece-wise linear interpolation of B and A */ for( nb = 0; nb < TRANSITION_NB; nb++ ) { B_Q28[ nb ] = SKP_RSHIFT( SKP_Silk_Transition_LP_B_Q28[ ind ][ nb ] + SKP_Silk_Transition_LP_B_Q28[ ind + 1 ][ nb ], 1 ); } for( na = 0; na < TRANSITION_NA; na++ ) { A_Q28[ na ] = SKP_RSHIFT( SKP_Silk_Transition_LP_A_Q28[ ind ][ na ] + SKP_Silk_Transition_LP_A_Q28[ ind + 1 ][ na ], 1 ); } } else { /* ( ( 1 << 16 ) - fac_Q16 ) is in range of a 16-bit int */ SKP_assert( ( ( 1 << 16 ) - fac_Q16 ) == SKP_SAT16( ( ( 1 << 16 ) - fac_Q16) ) ); /* Piece-wise linear interpolation of B and A */ for( nb = 0; nb < TRANSITION_NB; nb++ ) { B_Q28[ nb ] = SKP_SMLAWB( SKP_Silk_Transition_LP_B_Q28[ ind + 1 ][ nb ], SKP_Silk_Transition_LP_B_Q28[ ind ][ nb ] - SKP_Silk_Transition_LP_B_Q28[ ind + 1 ][ nb ], ( 1 << 16 ) - fac_Q16 ); } for( na = 0; na < TRANSITION_NA; na++ ) { A_Q28[ na ] = SKP_SMLAWB( SKP_Silk_Transition_LP_A_Q28[ ind + 1 ][ na ], SKP_Silk_Transition_LP_A_Q28[ ind ][ na ] - SKP_Silk_Transition_LP_A_Q28[ ind + 1 ][ na ], ( 1 << 16 ) - fac_Q16 ); } } } else { SKP_memcpy( B_Q28, SKP_Silk_Transition_LP_B_Q28[ ind ], TRANSITION_NB * sizeof( SKP_int32 ) ); SKP_memcpy( A_Q28, SKP_Silk_Transition_LP_A_Q28[ ind ], TRANSITION_NA * sizeof( SKP_int32 ) ); } } else { SKP_memcpy( B_Q28, SKP_Silk_Transition_LP_B_Q28[ TRANSITION_INT_NUM - 1 ], TRANSITION_NB * sizeof( SKP_int32 ) ); SKP_memcpy( A_Q28, SKP_Silk_Transition_LP_A_Q28[ TRANSITION_INT_NUM - 1 ], TRANSITION_NA * sizeof( SKP_int32 ) ); } } /* Low-pass filter with variable cutoff frequency based on */ /* piece-wise linear interpolation between elliptic filters */ /* Start by setting psEncC->transition_frame_no = 1; */ /* Deactivate by setting psEncC->transition_frame_no = 0; */ void SKP_Silk_LP_variable_cutoff( SKP_Silk_LP_state *psLP, /* I/O LP filter state */ SKP_int16 *out, /* O Low-pass filtered output signal */ const SKP_int16 *in, /* I Input signal */ const SKP_int frame_length /* I Frame length */ ) { SKP_int32 B_Q28[ TRANSITION_NB ], A_Q28[ TRANSITION_NA ]; SKP_int fac_Q16 = 0, ind = 0; SKP_assert( psLP->transition_frame_no >= 0 ); SKP_assert( ( ( ( psLP->transition_frame_no <= TRANSITION_FRAMES_DOWN ) && ( psLP->mode == 0 ) ) || ( ( psLP->transition_frame_no <= TRANSITION_FRAMES_UP ) && ( psLP->mode == 1 ) ) ) ); /* Interpolate filter coefficients if needed */ if( psLP->transition_frame_no > 0 ) { if( psLP->mode == 0 ) { if( psLP->transition_frame_no < TRANSITION_FRAMES_DOWN ) { /* Calculate index and interpolation factor for interpolation */ #if( TRANSITION_INT_STEPS_DOWN == 32 ) fac_Q16 = SKP_LSHIFT( psLP->transition_frame_no, 16 - 5 ); #else fac_Q16 = SKP_DIV32_16( SKP_LSHIFT( psLP->transition_frame_no, 16 ), TRANSITION_INT_STEPS_DOWN ); #endif ind = SKP_RSHIFT( fac_Q16, 16 ); fac_Q16 -= SKP_LSHIFT( ind, 16 ); SKP_assert( ind >= 0 ); SKP_assert( ind < TRANSITION_INT_NUM ); /* Interpolate filter coefficients */ SKP_Silk_LP_interpolate_filter_taps( B_Q28, A_Q28, ind, fac_Q16 ); /* Increment transition frame number for next frame */ psLP->transition_frame_no++; } else if( psLP->transition_frame_no == TRANSITION_FRAMES_DOWN ) { /* End of transition phase */ SKP_Silk_LP_interpolate_filter_taps( B_Q28, A_Q28, TRANSITION_INT_NUM - 1, 0 ); } } else if( psLP->mode == 1 ) { if( psLP->transition_frame_no < TRANSITION_FRAMES_UP ) { /* Calculate index and interpolation factor for interpolation */ #if( TRANSITION_INT_STEPS_UP == 64 ) fac_Q16 = SKP_LSHIFT( TRANSITION_FRAMES_UP - psLP->transition_frame_no, 16 - 6 ); #else fac_Q16 = SKP_DIV32_16( SKP_LSHIFT( TRANSITION_FRAMES_UP - psLP->transition_frame_no, 16 ), TRANSITION_INT_STEPS_UP ); #endif ind = SKP_RSHIFT( fac_Q16, 16 ); fac_Q16 -= SKP_LSHIFT( ind, 16 ); SKP_assert( ind >= 0 ); SKP_assert( ind < TRANSITION_INT_NUM ); /* Interpolate filter coefficients */ SKP_Silk_LP_interpolate_filter_taps( B_Q28, A_Q28, ind, fac_Q16 ); /* Increment transition frame number for next frame */ psLP->transition_frame_no++; } else if( psLP->transition_frame_no == TRANSITION_FRAMES_UP ) { /* End of transition phase */ SKP_Silk_LP_interpolate_filter_taps( B_Q28, A_Q28, 0, 0 ); } } } if( psLP->transition_frame_no > 0 ) { /* ARMA low-pass filtering */ SKP_assert( TRANSITION_NB == 3 && TRANSITION_NA == 2 ); SKP_Silk_biquad_alt( in, B_Q28, A_Q28, psLP->In_LP_State, out, frame_length ); } else { /* Instead of using the filter, copy input directly to output */ SKP_memcpy( out, in, frame_length * sizeof( SKP_int16 ) ); } } #endif h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_corrMatrix_FIX.c0000644000175000017500000001712611513063445022561 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /********************************************************************** * Correlation Matrix Computations for LS estimate. **********************************************************************/ #include "SKP_Silk_main_FIX.h" /* Calculates correlation vector X'*t */ void SKP_Silk_corrVector_FIX( const SKP_int16 *x, /* I x vector [L + order - 1] used to form data matrix X */ const SKP_int16 *t, /* I target vector [L] */ const SKP_int L, /* I Length of vectors */ const SKP_int order, /* I Max lag for correlation */ SKP_int32 *Xt, /* O Pointer to X'*t correlation vector [order] */ const SKP_int rshifts /* I Right shifts of correlations */ ) { SKP_int lag, i; const SKP_int16 *ptr1, *ptr2; SKP_int32 inner_prod; ptr1 = &x[ order - 1 ]; /* Points to first sample of column 0 of X: X[:,0] */ ptr2 = t; /* Calculate X'*t */ if( rshifts > 0 ) { /* Right shifting used */ for( lag = 0; lag < order; lag++ ) { inner_prod = 0; for( i = 0; i < L; i++ ) { inner_prod += SKP_RSHIFT32( SKP_SMULBB( ptr1[ i ], ptr2[i] ), rshifts ); } Xt[ lag ] = inner_prod; /* X[:,lag]'*t */ ptr1--; /* Go to next column of X */ } } else { SKP_assert( rshifts == 0 ); for( lag = 0; lag < order; lag++ ) { Xt[ lag ] = SKP_Silk_inner_prod_aligned( ptr1, ptr2, L ); /* X[:,lag]'*t */ ptr1--; /* Go to next column of X */ } } } /* Calculates correlation matrix X'*X */ void SKP_Silk_corrMatrix_FIX( const SKP_int16 *x, /* I x vector [L + order - 1] used to form data matrix X */ const SKP_int L, /* I Length of vectors */ const SKP_int order, /* I Max lag for correlation */ SKP_int32 *XX, /* O Pointer to X'*X correlation matrix [ order x order ]*/ SKP_int *rshifts /* I/O Right shifts of correlations */ ) { SKP_int i, j, lag, rshifts_local, head_room_rshifts; SKP_int32 energy; const SKP_int16 *ptr1, *ptr2; /* Calculate energy to find shift used to fit in 32 bits */ SKP_Silk_sum_sqr_shift( &energy, &rshifts_local, x, L + order - 1 ); /* Add shifts to get the wanted head room */ head_room_rshifts = SKP_max( LTP_CORRS_HEAD_ROOM - SKP_Silk_CLZ32( energy ), 0 ); energy = SKP_RSHIFT32( energy, head_room_rshifts ); rshifts_local += head_room_rshifts; /* Calculate energy of first column (0) of X: X[:,0]'*X[:,0] */ /* Remove contribution of first order - 1 samples */ for( i = 0; i < order - 1; i++ ) { energy -= SKP_RSHIFT32( SKP_SMULBB( x[ i ], x[ i ] ), rshifts_local ); } if( rshifts_local < *rshifts ) { /* Adjust energy */ energy = SKP_RSHIFT32( energy, *rshifts - rshifts_local ); rshifts_local = *rshifts; } /* Calculate energy of remaining columns of X: X[:,j]'*X[:,j] */ /* Fill out the diagonal of the correlation matrix */ matrix_ptr( XX, 0, 0, order ) = energy; ptr1 = &x[ order - 1 ]; /* First sample of column 0 of X */ for( j = 1; j < order; j++ ) { energy = SKP_SUB32( energy, SKP_RSHIFT32( SKP_SMULBB( ptr1[ L - j ], ptr1[ L - j ] ), rshifts_local ) ); energy = SKP_ADD32( energy, SKP_RSHIFT32( SKP_SMULBB( ptr1[ -j ], ptr1[ -j ] ), rshifts_local ) ); matrix_ptr( XX, j, j, order ) = energy; } ptr2 = &x[ order - 2 ]; /* First sample of column 1 of X */ /* Calculate the remaining elements of the correlation matrix */ if( rshifts_local > 0 ) { /* Right shifting used */ for( lag = 1; lag < order; lag++ ) { /* Inner product of column 0 and column lag: X[:,0]'*X[:,lag] */ energy = 0; for( i = 0; i < L; i++ ) { energy += SKP_RSHIFT32( SKP_SMULBB( ptr1[ i ], ptr2[i] ), rshifts_local ); } /* Calculate remaining off diagonal: X[:,j]'*X[:,j + lag] */ matrix_ptr( XX, lag, 0, order ) = energy; matrix_ptr( XX, 0, lag, order ) = energy; for( j = 1; j < ( order - lag ); j++ ) { energy = SKP_SUB32( energy, SKP_RSHIFT32( SKP_SMULBB( ptr1[ L - j ], ptr2[ L - j ] ), rshifts_local ) ); energy = SKP_ADD32( energy, SKP_RSHIFT32( SKP_SMULBB( ptr1[ -j ], ptr2[ -j ] ), rshifts_local ) ); matrix_ptr( XX, lag + j, j, order ) = energy; matrix_ptr( XX, j, lag + j, order ) = energy; } ptr2--; /* Update pointer to first sample of next column (lag) in X */ } } else { for( lag = 1; lag < order; lag++ ) { /* Inner product of column 0 and column lag: X[:,0]'*X[:,lag] */ energy = SKP_Silk_inner_prod_aligned( ptr1, ptr2, L ); matrix_ptr( XX, lag, 0, order ) = energy; matrix_ptr( XX, 0, lag, order ) = energy; /* Calculate remaining off diagonal: X[:,j]'*X[:,j + lag] */ for( j = 1; j < ( order - lag ); j++ ) { energy = SKP_SUB32( energy, SKP_SMULBB( ptr1[ L - j ], ptr2[ L - j ] ) ); energy = SKP_SMLABB( energy, ptr1[ -j ], ptr2[ -j ] ); matrix_ptr( XX, lag + j, j, order ) = energy; matrix_ptr( XX, j, lag + j, order ) = energy; } ptr2--;/* Update pointer to first sample of next column (lag) in X */ } } *rshifts = rshifts_local; } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_resample_2_1_coarse.c0000644000175000017500000000744611513063445023532 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_resample_2_1_coarse.c * * * * Upsample by a factor 2, coarser * * * * Copyright 2006 (c), Skype Limited * * Date: 060221 * * */ #include "SKP_Silk_SigProc_FIX.h" /* Upsample by a factor 2, coarser */ void SKP_Silk_resample_2_1_coarse( const SKP_int16 *in, /* I: 8 kHz signal [len] */ SKP_int32 *S, /* I/O: State vector [4] */ SKP_int16 *out, /* O: 16 kHz signal [2*len] */ SKP_int32 *scratch, /* I: Scratch memory [3*len] */ const SKP_int32 len /* I: Number of INPUT samples */ ) { SKP_int32 k, idx; /* Coefficients for coarser 2-fold resampling */ const SKP_int16 A20c[ 2 ] = { 2119, 16663 }; const SKP_int16 A21c[ 2 ] = { 8050, 26861 }; /* Convert Q15 -> Q25 */ for( k = 0; k < len; k++ ) { scratch[ k ] = SKP_LSHIFT( (SKP_int32)in[ k ], 10 ); } idx = SKP_LSHIFT( len, 1 ); /* Allpass filters */ SKP_Silk_allpass_int( scratch, S, A20c[ 0 ], scratch + idx, len ); SKP_Silk_allpass_int( scratch + idx, S + 1, A20c[ 1 ], scratch + len, len ); SKP_Silk_allpass_int( scratch, S + 2, A21c[ 0 ], scratch + idx, len ); SKP_Silk_allpass_int( scratch + idx, S + 3, A21c[ 1 ], scratch, len ); /* Interleave two allpass outputs */ for( k = 0; k < len; k++ ) { idx = SKP_LSHIFT( k, 1 ); out[ idx ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( scratch[ k + len ], 10 ) ); out[ idx + 1 ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( scratch[ k ], 10 ) ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_resample_rom.h0000644000175000017500000001354211513063445022411 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * File Name: SKP_Silk_resample_rom.h * * * * Description: Header file for FIR resampling of * * 32 and 44 kHz input * * * * Copyright 2007 (c), Skype Limited * * All rights reserved. * * * * Date: 070807 * * */ #ifndef _SKP_SILK_FIX_RESAMPLE_ROM_H_ #define _SKP_SILK_FIX_RESAMPLE_ROM_H_ #include "SKP_Silk_typedef.h" #ifdef __cplusplus extern "C" { #endif #define SigProc_Resample_bw_1_4_NUM_INTERPOLATORS_LOG2 7 #define SigProc_Resample_bw_1_4_NUM_INTERPOLATORS (1 << SigProc_Resample_bw_1_4_NUM_INTERPOLATORS_LOG2) #define SigProc_Resample_bw_1_4_NUM_FIR_COEFS 6 extern const SKP_int16 SigProc_Resample_bw_1_4_INTERPOL[SigProc_Resample_bw_1_4_NUM_INTERPOLATORS][SigProc_Resample_bw_1_4_NUM_FIR_COEFS]; #define SigProc_Resample_bw_80_441_NUM_INTERPOLATORS_LOG2 6 #define SigProc_Resample_bw_80_441_NUM_INTERPOLATORS (1 << SigProc_Resample_bw_80_441_NUM_INTERPOLATORS_LOG2) #define SigProc_Resample_bw_80_441_NUM_FIR_COEFS 4 extern const SKP_int16 SigProc_Resample_bw_80_441_INTERPOL[SigProc_Resample_bw_80_441_NUM_INTERPOLATORS][SigProc_Resample_bw_80_441_NUM_FIR_COEFS]; #define SigProc_Resample_2_3_coarse_NUM_INTERPOLATORS 2 #define SigProc_Resample_2_3_coarse_NUM_FIR_COEFS 32 extern const SKP_int16 SigProc_Resample_2_3_coarse_INTERPOL[SigProc_Resample_2_3_coarse_NUM_INTERPOLATORS][SigProc_Resample_2_3_coarse_NUM_FIR_COEFS]; #define SigProc_Resample_2_3_coarsest_NUM_INTERPOLATORS 2 #define SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS 10 extern const SKP_int16 SigProc_Resample_2_3_coarsest_INTERPOL[SigProc_Resample_2_3_coarsest_NUM_INTERPOLATORS][SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS]; #define SigProc_Resample_3_2_coarse_NUM_INTERPOLATORS 3 #define SigProc_Resample_3_2_coarse_NUM_FIR_COEFS 8 extern const SKP_int16 SigProc_Resample_3_2_coarse_INTERPOL[SigProc_Resample_3_2_coarse_NUM_INTERPOLATORS][SigProc_Resample_3_2_coarse_NUM_FIR_COEFS]; #define SigProc_Resample_147_40_NUM_INTERPOLATORS 147 #define SigProc_Resample_147_40_NUM_FIR_COEFS 20 extern const SKP_int16 SigProc_Resample_147_40_INTERPOL[SigProc_Resample_147_40_NUM_INTERPOLATORS][SigProc_Resample_147_40_NUM_FIR_COEFS]; #define SigProc_Resample_147_40_alt_NUM_INTERPOLATORS 147 #define SigProc_Resample_147_40_alt_NUM_FIR_COEFS 10 extern const SKP_int16 SigProc_Resample_147_40_alt_INTERPOL[SigProc_Resample_147_40_alt_NUM_INTERPOLATORS][SigProc_Resample_147_40_alt_NUM_FIR_COEFS]; #define SigProc_Resample_147_40_coarse_NUM_INTERPOLATORS 147 #define SigProc_Resample_147_40_coarse_NUM_FIR_COEFS 16 extern const SKP_int16 SigProc_Resample_147_40_coarse_INTERPOL[SigProc_Resample_147_40_coarse_NUM_INTERPOLATORS][SigProc_Resample_147_40_coarse_NUM_FIR_COEFS]; #define SigProc_Resample_40_147_NUM_INTERPOLATORS 40 #define SigProc_Resample_40_147_NUM_FIR_COEFS 60 extern const SKP_int16 SigProc_Resample_40_147_INTERPOL[SigProc_Resample_40_147_NUM_INTERPOLATORS][SigProc_Resample_40_147_NUM_FIR_COEFS]; #define SigProc_Resample_40_147_coarse_NUM_INTERPOLATORS 40 #define SigProc_Resample_40_147_coarse_NUM_FIR_COEFS 30 extern const SKP_int16 SigProc_Resample_40_147_coarse_INTERPOL[SigProc_Resample_40_147_coarse_NUM_INTERPOLATORS][SigProc_Resample_40_147_coarse_NUM_FIR_COEFS]; #ifdef __cplusplus } #endif #endif // _SKP_SILK_FIX_RESAMPLE_ROM_H_ h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_encode_parameters.c0000644000175000017500000001577111513063445023405 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main.h" /*******************************************/ /* Encode parameters to create the payload */ /*******************************************/ void SKP_Silk_encode_parameters( SKP_Silk_encoder_state *psEncC, /* I/O Encoder state */ SKP_Silk_encoder_control *psEncCtrlC, /* I/O Encoder control */ SKP_Silk_range_coder_state *psRC, /* I/O Range encoder state */ const SKP_int *q /* I Quantization indices */ ) { SKP_int i, k, typeOffset; const SKP_Silk_NLSF_CB_struct *psNLSF_CB; /************************/ /* Encode sampling rate */ /************************/ /* only done for first frame in packet */ if( psEncC->nFramesInPayloadBuf == 0 ) { /* Initialize arithmetic coder */ SKP_Silk_range_enc_init( &psEncC->sRC ); psEncC->nBytesInPayloadBuf = 0; /* get sampling rate index */ for( i = 0; i < 3; i++ ) { if( SKP_Silk_SamplingRates_table[ i ] == psEncC->fs_kHz ) { break; } } SKP_Silk_range_encoder( psRC, i, SKP_Silk_SamplingRates_CDF ); } /*******************************************/ /* Encode signal type and quantizer offset */ /*******************************************/ typeOffset = 2 * psEncCtrlC->sigtype + psEncCtrlC->QuantOffsetType; if( psEncC->nFramesInPayloadBuf == 0 ) { /* first frame in packet: independent coding */ SKP_Silk_range_encoder( psRC, typeOffset, SKP_Silk_type_offset_CDF ); } else { /* condidtional coding */ SKP_Silk_range_encoder( psRC, typeOffset, SKP_Silk_type_offset_joint_CDF[ psEncC->typeOffsetPrev ] ); } psEncC->typeOffsetPrev = typeOffset; /****************/ /* Encode gains */ /****************/ /* first subframe */ if( psEncC->nFramesInPayloadBuf == 0 ) { /* first frame in packet: independent coding */ SKP_Silk_range_encoder( psRC, psEncCtrlC->GainsIndices[ 0 ], SKP_Silk_gain_CDF[ psEncCtrlC->sigtype ] ); } else { /* condidtional coding */ SKP_Silk_range_encoder( psRC, psEncCtrlC->GainsIndices[ 0 ], SKP_Silk_delta_gain_CDF ); } /* remaining subframes */ for( i = 1; i < NB_SUBFR; i++ ) { SKP_Silk_range_encoder( psRC, psEncCtrlC->GainsIndices[ i ], SKP_Silk_delta_gain_CDF ); } /****************/ /* Encode NLSFs */ /****************/ /* Range encoding of the NLSF path */ psNLSF_CB = psEncC->psNLSF_CB[ psEncCtrlC->sigtype ]; SKP_Silk_range_encoder_multi( psRC, psEncCtrlC->NLSFIndices, psNLSF_CB->StartPtr, psNLSF_CB->nStages ); /* Encode NLSF interpolation factor */ SKP_assert( psEncC->useInterpolatedNLSFs == 1 || psEncCtrlC->NLSFInterpCoef_Q2 == ( 1 << 2 ) ); SKP_Silk_range_encoder( psRC, psEncCtrlC->NLSFInterpCoef_Q2, SKP_Silk_NLSF_interpolation_factor_CDF ); if( psEncCtrlC->sigtype == SIG_TYPE_VOICED ) { /*********************/ /* Encode pitch lags */ /*********************/ /* lag index */ if( psEncC->fs_kHz == 8 ) { SKP_Silk_range_encoder( psRC, psEncCtrlC->lagIndex, SKP_Silk_pitch_lag_NB_CDF ); } else if( psEncC->fs_kHz == 12 ) { SKP_Silk_range_encoder( psRC, psEncCtrlC->lagIndex, SKP_Silk_pitch_lag_MB_CDF ); } else if( psEncC->fs_kHz == 16 ) { SKP_Silk_range_encoder( psRC, psEncCtrlC->lagIndex, SKP_Silk_pitch_lag_WB_CDF ); } else { SKP_Silk_range_encoder( psRC, psEncCtrlC->lagIndex, SKP_Silk_pitch_lag_SWB_CDF ); } /* countour index */ if( psEncC->fs_kHz == 8 ) { /* Less codevectors used in 8 khz mode */ SKP_Silk_range_encoder( psRC, psEncCtrlC->contourIndex, SKP_Silk_pitch_contour_NB_CDF ); } else { /* Joint for 12, 16, 24 khz */ SKP_Silk_range_encoder( psRC, psEncCtrlC->contourIndex, SKP_Silk_pitch_contour_CDF ); } /********************/ /* Encode LTP gains */ /********************/ /* PERIndex value */ SKP_Silk_range_encoder( psRC, psEncCtrlC->PERIndex, SKP_Silk_LTP_per_index_CDF ); /* Codebook Indices */ for( k = 0; k < NB_SUBFR; k++ ) { SKP_Silk_range_encoder( psRC, psEncCtrlC->LTPIndex[ k ], SKP_Silk_LTP_gain_CDF_ptrs[ psEncCtrlC->PERIndex ] ); } /**********************/ /* Encode LTP scaling */ /**********************/ SKP_Silk_range_encoder( psRC, psEncCtrlC->LTP_scaleIndex, SKP_Silk_LTPscale_CDF ); } /***************/ /* Encode seed */ /***************/ SKP_Silk_range_encoder( psRC, psEncCtrlC->Seed, SKP_Silk_Seed_CDF ); /*********************************************/ /* Encode quantization indices of excitation */ /*********************************************/ SKP_Silk_encode_pulses( psRC, psEncCtrlC->sigtype, psEncCtrlC->QuantOffsetType, q, psEncC->frame_length ); /*********************************************/ /* Encode VAD flag */ /*********************************************/ SKP_Silk_range_encoder( psRC, psEncC->vadFlag, SKP_Silk_vadflag_CDF ); } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_HP_variable_cutoff_FIX.c0000644000175000017500000001436711513063445024155 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" #if HIGH_PASS_INPUT #define SKP_RADIANS_CONSTANT_Q19 1482 // 0.45f * 2.0f * 3.14159265359 / 1000 #define SKP_LOG2_VARIABLE_HP_MIN_FREQ_Q7 809 // log(80) in Q7 /* High-pass filter with cutoff frequency adaptation based on pitch lag statistics */ void SKP_Silk_HP_variable_cutoff_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O Encoder state FIX */ SKP_Silk_encoder_control_FIX *psEncCtrl, /* I/O Encoder control FIX */ SKP_int16 *out, /* O high-pass filtered output signal */ const SKP_int16 *in /* I input signal */ ) { SKP_int quality_Q15; SKP_int32 B_Q28[ 3 ], A_Q28[ 2 ]; SKP_int32 Fc_Q19, r_Q28, r_Q22; SKP_int32 pitch_freq_Hz_Q16, pitch_freq_log_Q7, delta_freq_Q7; /*********************************************/ /* Estimate Low End of Pitch Frequency Range */ /*********************************************/ if( psEnc->sCmn.prev_sigtype == SIG_TYPE_VOICED ) { /* difference, in log domain */ pitch_freq_Hz_Q16 = SKP_DIV32_16( SKP_LSHIFT( SKP_MUL( psEnc->sCmn.fs_kHz, 1000 ), 16 ), psEnc->sCmn.prevLag ); pitch_freq_log_Q7 = SKP_Silk_lin2log( pitch_freq_Hz_Q16 ) - ( 16 << 7 ); //0x70 /* adjustment based on quality */ quality_Q15 = psEncCtrl->input_quality_bands_Q15[ 0 ]; pitch_freq_log_Q7 = SKP_SUB32( pitch_freq_log_Q7, SKP_SMULWB( SKP_SMULWB( SKP_LSHIFT( quality_Q15, 2 ), quality_Q15 ), pitch_freq_log_Q7 - SKP_LOG2_VARIABLE_HP_MIN_FREQ_Q7 ) ); pitch_freq_log_Q7 = SKP_ADD32( pitch_freq_log_Q7, SKP_RSHIFT( 19661 - quality_Q15, 9 ) ); // 19661_Q15 = 0.6_Q0 //delta_freq = pitch_freq_log - psEnc->variable_HP_smth1; delta_freq_Q7 = pitch_freq_log_Q7 - SKP_RSHIFT( psEnc->variable_HP_smth1_Q15, 8 ); if( delta_freq_Q7 < 0 ) { /* less smoothing for decreasing pitch frequency, to track something close to the minimum */ delta_freq_Q7 = SKP_MUL( delta_freq_Q7, 3 ); } /* limit delta, to reduce impact of outliers */ delta_freq_Q7 = SKP_LIMIT( delta_freq_Q7, -VARIABLE_HP_MAX_DELTA_FREQ_Q7, VARIABLE_HP_MAX_DELTA_FREQ_Q7 ); /* update smoother */ psEnc->variable_HP_smth1_Q15 = SKP_SMLAWB( psEnc->variable_HP_smth1_Q15, SKP_MUL( SKP_LSHIFT( psEnc->speech_activity_Q8, 1 ), delta_freq_Q7 ), VARIABLE_HP_SMTH_COEF1_Q16 ); } /* second smoother */ psEnc->variable_HP_smth2_Q15 = SKP_SMLAWB( psEnc->variable_HP_smth2_Q15, psEnc->variable_HP_smth1_Q15 - psEnc->variable_HP_smth2_Q15, VARIABLE_HP_SMTH_COEF2_Q16 ); /* convert from log scale to Hertz */ psEncCtrl->pitch_freq_low_Hz = SKP_Silk_log2lin( SKP_RSHIFT( psEnc->variable_HP_smth2_Q15, 8 ) ); //pow( 2.0, psEnc->variable_HP_smth2 ); /* limit frequency range */ psEncCtrl->pitch_freq_low_Hz = SKP_LIMIT( psEncCtrl->pitch_freq_low_Hz, VARIABLE_HP_MIN_FREQ_Q0, VARIABLE_HP_MAX_FREQ_Q0 ); /********************************/ /* Compute Filter Coefficients */ /********************************/ /* compute cut-off frequency, in radians */ //Fc_num = (SKP_float)( 0.45f * 2.0f * 3.14159265359 * psEncCtrl->pitch_freq_low_Hz ); //Fc_denom = (SKP_float)( 1e3f * psEnc->sCmn.fs_kHz ); SKP_assert( psEncCtrl->pitch_freq_low_Hz <= SKP_int32_MAX / SKP_RADIANS_CONSTANT_Q19 ); Fc_Q19 = SKP_DIV32_16( SKP_SMULBB( SKP_RADIANS_CONSTANT_Q19, psEncCtrl->pitch_freq_low_Hz ), psEnc->sCmn.fs_kHz ); // range: 3704 - 27787, 11-15 bits SKP_assert( Fc_Q19 >= 3704 ); SKP_assert( Fc_Q19 <= 27787 ); r_Q28 = ( 1 << 28 ) - SKP_MUL( 471, Fc_Q19 ); // 471_Q9 = 0.92_Q0, range: 255347779 to 266690872, 27-28 bits SKP_assert( r_Q28 >= 255347779 ); SKP_assert( r_Q28 <= 266690872 ); /* b = r * [ 1; -2; 1 ]; */ /* a = [ 1; -2 * r * ( 1 - 0.5 * Fc^2 ); r^2 ]; */ B_Q28[ 0 ] = r_Q28; B_Q28[ 1 ] = SKP_LSHIFT( -r_Q28, 1 ); B_Q28[ 2 ] = r_Q28; // -r * ( 2 - Fc * Fc ); r_Q22 = SKP_RSHIFT( r_Q28, 6 ); A_Q28[ 0 ] = SKP_SMULWW( r_Q22, SKP_SMULWW( Fc_Q19, Fc_Q19 ) - ( 2 << 22 ) ); A_Q28[ 1 ] = SKP_SMULWW( r_Q22, r_Q22 ); /********************************/ /* High-Pass Filter */ /********************************/ SKP_Silk_biquad_alt( in, B_Q28, A_Q28, psEnc->sCmn.In_HP_State, out, psEnc->sCmn.frame_length ); } #endif // HIGH_PASS_INPUT h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_lowpass_int.c0000644000175000017500000000647411513063445022267 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_lowpass_int.c * * * * First order low-pass filter, with input as SKP_int32, running at * * 48 kHz * * * * Copyright 2006 (c), Skype Limited * * Date: 060221 * * */ #include "SKP_Silk_SigProc_FIX.h" /* First order low-pass filter, with input as SKP_int32, running at 48 kHz */ void SKP_Silk_lowpass_int( const SKP_int32 *in, /* I: Q25 48 kHz signal; length = len */ SKP_int32 *S, /* I/O: Q25 state; length = 1 */ SKP_int32 *out, /* O: Q25 48 kHz signal; length = len */ const SKP_int32 len /* I: Number of samples */ ) { SKP_int k; SKP_int32 in_tmp, out_tmp, state; state = S[ 0 ]; for( k = len; k > 0; k-- ) { in_tmp = *in++; in_tmp -= SKP_RSHIFT( in_tmp, 2 ); /* multiply by 0.75 */ out_tmp = state + in_tmp; /* zero at nyquist */ state = in_tmp - SKP_RSHIFT( out_tmp, 1 ); /* pole */ *out++ = out_tmp; } S[ 0 ] = state; } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_tables_gain.c0000644000175000017500000000702411513063445022165 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_tables.h" #ifdef __cplusplus extern "C" { #endif const SKP_uint16 SKP_Silk_gain_CDF[ 2 ][ 65 ] = { { 0, 18, 45, 94, 181, 320, 519, 777, 1093, 1468, 1909, 2417, 2997, 3657, 4404, 5245, 6185, 7228, 8384, 9664, 11069, 12596, 14244, 16022, 17937, 19979, 22121, 24345, 26646, 29021, 31454, 33927, 36438, 38982, 41538, 44068, 46532, 48904, 51160, 53265, 55184, 56904, 58422, 59739, 60858, 61793, 62568, 63210, 63738, 64165, 64504, 64769, 64976, 65133, 65249, 65330, 65386, 65424, 65451, 65471, 65487, 65501, 65513, 65524, 65535 }, { 0, 214, 581, 1261, 2376, 3920, 5742, 7632, 9449, 11157, 12780, 14352, 15897, 17427, 18949, 20462, 21957, 23430, 24889, 26342, 27780, 29191, 30575, 31952, 33345, 34763, 36200, 37642, 39083, 40519, 41930, 43291, 44602, 45885, 47154, 48402, 49619, 50805, 51959, 53069, 54127, 55140, 56128, 57101, 58056, 58979, 59859, 60692, 61468, 62177, 62812, 63368, 63845, 64242, 64563, 64818, 65023, 65184, 65306, 65391, 65447, 65482, 65505, 65521, 65535 } }; const SKP_int SKP_Silk_gain_CDF_offset = 32; const SKP_uint16 SKP_Silk_delta_gain_CDF[ 46 ] = { 0, 2358, 3856, 7023, 15376, 53058, 59135, 61555, 62784, 63498, 63949, 64265, 64478, 64647, 64783, 64894, 64986, 65052, 65113, 65169, 65213, 65252, 65284, 65314, 65338, 65359, 65377, 65392, 65403, 65415, 65424, 65432, 65440, 65448, 65455, 65462, 65470, 65477, 65484, 65491, 65499, 65506, 65513, 65521, 65528, 65535 }; const SKP_int SKP_Silk_delta_gain_CDF_offset = 5; #ifdef __cplusplus } #endif h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_sum_sqr_shift.c0000644000175000017500000001101011513063445022571 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_sum_sqr_shift.c * * * * compute number of bits to right shift the sum of squares of a vector * * of int16s to make it fit in an int32 * * * * Copyright 2006-2008 (c), Skype Limited * * */ #include "SKP_Silk_SigProc_FIX.h" /* Compute number of bits to right shift the sum of squares of a vector */ /* of int16s to make it fit in an int32 */ void SKP_Silk_sum_sqr_shift( SKP_int32 *energy, /* O Energy of x, after shifting to the right */ SKP_int *shift, /* O Number of bits right shift applied to energy */ const SKP_int16 *x, /* I Input vector */ SKP_int len /* I Length of input vector */ ) { SKP_int i, shft; SKP_int32 in32, nrg_tmp, nrg; if( (SKP_int32)( (SKP_int_ptr_size)x & 2 ) != 0 ) { /* Input is not 4-byte aligned */ nrg = SKP_SMULBB( x[ 0 ], x[ 0 ] ); i = 1; } else { nrg = 0; i = 0; } shft = 0; len--; for( ; i < len; i += 2 ) { /* Load two values at once */ in32 = *( (SKP_int32 *)&x[ i ] ); nrg = SKP_SMLABB_ovflw( nrg, in32, in32 ); nrg = SKP_SMLATT_ovflw( nrg, in32, in32 ); if( nrg < 0 ) { /* Scale down */ nrg = (SKP_int32)SKP_RSHIFT_uint( (SKP_uint32)nrg, 2 ); shft = 2; break; } } for( ; i < len; i += 2 ) { /* Load two values at once */ in32 = *( (SKP_int32 *)&x[ i ] ); nrg_tmp = SKP_SMULBB( in32, in32 ); nrg_tmp = SKP_SMLATT_ovflw( nrg_tmp, in32, in32 ); nrg = (SKP_int32)SKP_ADD_RSHIFT_uint( nrg, (SKP_uint32)nrg_tmp, shft ); if( nrg < 0 ) { /* Scale down */ nrg = (SKP_int32)SKP_RSHIFT_uint( (SKP_uint32)nrg, 2 ); shft += 2; } } if( i == len ) { /* One sample left to process */ nrg_tmp = SKP_SMULBB( x[ i ], x[ i ] ); nrg = (SKP_int32)SKP_ADD_RSHIFT_uint( nrg, nrg_tmp, shft ); } /* Make sure to have at least one extra leading zero (two leading zeros in total) */ if( nrg & 0xC0000000 ) { nrg = SKP_RSHIFT_uint( (SKP_uint32)nrg, 2 ); shft += 2; } /* Output arguments */ *shift = shft; *energy = nrg; } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_common_pitch_est_defines.h0000644000175000017500000000754311513063445024757 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #ifndef SIGPROC_COMMON_PITCH_EST_DEFINES_H #define SIGPROC_COMMON_PITCH_EST_DEFINES_H #include "SKP_Silk_SigProc_FIX.h" /************************************************************/ /* Definitions For Fix pitch estimator */ /************************************************************/ #define PITCH_EST_MAX_FS_KHZ 24 /* Maximum sampling frequency used */ #define PITCH_EST_FRAME_LENGTH_MS 40 /* 40 ms */ #define PITCH_EST_MAX_FRAME_LENGTH (PITCH_EST_FRAME_LENGTH_MS * PITCH_EST_MAX_FS_KHZ) #define PITCH_EST_MAX_FRAME_LENGTH_ST_1 (PITCH_EST_MAX_FRAME_LENGTH >> 2) #define PITCH_EST_MAX_FRAME_LENGTH_ST_2 (PITCH_EST_MAX_FRAME_LENGTH >> 1) #define PITCH_EST_MAX_SF_FRAME_LENGTH (PITCH_EST_SUB_FRAME * PITCH_EST_MAX_FS_KHZ) #define PITCH_EST_MAX_LAG_MS 18 /* 18 ms -> 56 Hz */ #define PITCH_EST_MIN_LAG_MS 2 /* 2 ms -> 500 Hz */ #define PITCH_EST_MAX_LAG (PITCH_EST_MAX_LAG_MS * PITCH_EST_MAX_FS_KHZ) #define PITCH_EST_MIN_LAG (PITCH_EST_MIN_LAG_MS * PITCH_EST_MAX_FS_KHZ) #define PITCH_EST_NB_SUBFR 4 #define PITCH_EST_D_SRCH_LENGTH 24 #define PITCH_EST_MAX_DECIMATE_STATE_LENGTH 7 #define PITCH_EST_NB_STAGE3_LAGS 5 #define PITCH_EST_NB_CBKS_STAGE2 3 #define PITCH_EST_NB_CBKS_STAGE2_EXT 11 #define PITCH_EST_CB_mn2 1 #define PITCH_EST_CB_mx2 2 #define PITCH_EST_NB_CBKS_STAGE3_MAX 34 #define PITCH_EST_NB_CBKS_STAGE3_MID 24 #define PITCH_EST_NB_CBKS_STAGE3_MIN 16 extern const SKP_int16 SKP_Silk_CB_lags_stage2[PITCH_EST_NB_SUBFR][PITCH_EST_NB_CBKS_STAGE2_EXT]; extern const SKP_int16 SKP_Silk_CB_lags_stage3[PITCH_EST_NB_SUBFR][PITCH_EST_NB_CBKS_STAGE3_MAX]; extern const SKP_int16 SKP_Silk_Lag_range_stage3[ SigProc_PITCH_EST_MAX_COMPLEX + 1 ] [ PITCH_EST_NB_SUBFR ][ 2 ]; extern const SKP_int16 SKP_Silk_cbk_sizes_stage3[ SigProc_PITCH_EST_MAX_COMPLEX + 1 ]; extern const SKP_int16 SKP_Silk_cbk_offsets_stage3[ SigProc_PITCH_EST_MAX_COMPLEX + 1 ]; #endif h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_decode_core.c0000644000175000017500000003345311513063445022155 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main.h" /**********************************************************/ /* Core decoder. Performs inverse NSQ operation LTP + LPC */ /**********************************************************/ void SKP_Silk_decode_core( SKP_Silk_decoder_state *psDec, /* I/O Decoder state */ SKP_Silk_decoder_control *psDecCtrl, /* I Decoder control */ SKP_int16 xq[], /* O Decoded speech */ const SKP_int q[ MAX_FRAME_LENGTH ] /* I Pulse signal */ ) { SKP_int i, k, lag = 0, start_idx, NLSF_interpolation_flag, sigtype, LTP_scale_Q14; SKP_int16 *A_Q12, *B_Q14, *pxq, A_Q12_tmp[ MAX_LPC_ORDER ]; SKP_int16 sLTP[ MAX_FRAME_LENGTH ]; SKP_int32 Gain_Q16, *pred_lag_ptr, *pexc_Q10, *pres_Q10, LTP_pred_Q14, LPC_pred_Q10; SKP_int32 rand_seed, offset_Q10, dither; SKP_int32 vec_Q10[ MAX_FRAME_LENGTH / NB_SUBFR ], Atmp; SKP_int32 inv_gain_Q16, inv_gain_Q32, gain_adj_Q16, FiltState[ MAX_LPC_ORDER ]; SKP_assert( psDec->prev_inv_gain_Q16 != 0 ); offset_Q10 = SKP_Silk_Quantization_Offsets_Q10[ psDecCtrl->sigtype ][ psDecCtrl->QuantOffsetType ]; if( psDecCtrl->NLSFInterpCoef_Q2 < ( 1 << 2 ) ) { NLSF_interpolation_flag = 1; } else { NLSF_interpolation_flag = 0; } /* Decode excitation */ rand_seed = psDecCtrl->Seed; for( i = 0; i < psDec->frame_length; i++ ) { rand_seed = SKP_RAND( rand_seed ); /* dither = rand_seed < 0 ? 0xFFFFFFFF : 0; */ dither = SKP_RSHIFT( rand_seed, 31 ); psDec->exc_Q10[ i ] = SKP_LSHIFT( ( SKP_int32 )q[ i ], 10 ) + offset_Q10; psDec->exc_Q10[ i ] = ( psDec->exc_Q10[ i ] ^ dither ) - dither; rand_seed += q[ i ]; } pexc_Q10 = psDec->exc_Q10; pres_Q10 = psDec->res_Q10; pxq = &psDec->outBuf[ psDec->frame_length ]; psDec->sLTP_buf_idx = psDec->frame_length; /* Loop over subframes */ for( k = 0; k < NB_SUBFR; k++ ) { A_Q12 = psDecCtrl->PredCoef_Q12[ k >> 1 ]; /* Preload LPC coeficients to array on stack. Gives small performance gain */ SKP_memcpy( A_Q12_tmp, A_Q12, psDec->LPC_order * sizeof( SKP_int16 ) ); B_Q14 = &psDecCtrl->LTPCoef_Q14[ k * LTP_ORDER ]; Gain_Q16 = psDecCtrl->Gains_Q16[ k ]; LTP_scale_Q14 = psDecCtrl->LTP_scale_Q14; sigtype = psDecCtrl->sigtype; inv_gain_Q16 = SKP_DIV32( SKP_int32_MAX, SKP_RSHIFT( Gain_Q16, 1 ) ); inv_gain_Q16 = SKP_min( inv_gain_Q16, SKP_int16_MAX ); /* Calculate Gain adjustment factor */ gain_adj_Q16 = ( SKP_int32 )1 << 16; if( inv_gain_Q16 != psDec->prev_inv_gain_Q16 ) { gain_adj_Q16 = SKP_DIV32_varQ( inv_gain_Q16, psDec->prev_inv_gain_Q16, 16 ); } /* Avoid abrupt transition from voiced PLC to unvoiced normal decoding */ if( psDec->lossCnt && psDec->prev_sigtype == SIG_TYPE_VOICED && psDecCtrl->sigtype == SIG_TYPE_UNVOICED && k < ( NB_SUBFR >> 1 ) ) { SKP_memset( B_Q14, 0, LTP_ORDER * sizeof( SKP_int16 ) ); B_Q14[ LTP_ORDER/2 ] = ( SKP_int16 )1 << 12; /* 0.25 */ sigtype = SIG_TYPE_VOICED; psDecCtrl->pitchL[ k ] = psDec->lagPrev; LTP_scale_Q14 = ( SKP_int )1 << 14; } if( sigtype == SIG_TYPE_VOICED ) { /* Voiced */ lag = psDecCtrl->pitchL[ k ]; /* Re-whitening */ if( ( k & ( 3 - SKP_LSHIFT( NLSF_interpolation_flag, 1 ) ) ) == 0 ) { /* Rewhiten with new A coefs */ start_idx = psDec->frame_length - lag - psDec->LPC_order - LTP_ORDER / 2; start_idx = SKP_LIMIT( start_idx, 0, psDec->frame_length - psDec->LPC_order ); SKP_Silk_MA_Prediction( &psDec->outBuf[ start_idx + k * ( psDec->frame_length >> 2 ) ], A_Q12, FiltState, sLTP + start_idx, psDec->frame_length - start_idx, psDec->LPC_order ); /* After rewhitening the LTP state is unscaled */ inv_gain_Q32 = SKP_LSHIFT( inv_gain_Q16, 16 ); if( k == 0 ) { /* Do LTP downscaling */ inv_gain_Q32 = SKP_LSHIFT( SKP_SMULWB( inv_gain_Q32, psDecCtrl->LTP_scale_Q14 ), 2 ); } for( i = 0; i < (lag + LTP_ORDER/2); i++ ) { psDec->sLTP_Q16[ psDec->sLTP_buf_idx - i - 1 ] = SKP_SMULWB( inv_gain_Q32, sLTP[ psDec->frame_length - i - 1 ] ); } } else { /* Update LTP state when Gain changes */ if( gain_adj_Q16 != ( SKP_int32 )1 << 16 ) { for( i = 0; i < ( lag + LTP_ORDER / 2 ); i++ ) { psDec->sLTP_Q16[ psDec->sLTP_buf_idx - i - 1 ] = SKP_SMULWW( gain_adj_Q16, psDec->sLTP_Q16[ psDec->sLTP_buf_idx - i - 1 ] ); } } } } /* Scale short term state */ for( i = 0; i < MAX_LPC_ORDER; i++ ) { psDec->sLPC_Q14[ i ] = SKP_SMULWW( gain_adj_Q16, psDec->sLPC_Q14[ i ] ); } /* Save inv_gain */ SKP_assert( inv_gain_Q16 != 0 ); psDec->prev_inv_gain_Q16 = inv_gain_Q16; /* Long-term prediction */ if( sigtype == SIG_TYPE_VOICED ) { /* Setup pointer */ pred_lag_ptr = &psDec->sLTP_Q16[ psDec->sLTP_buf_idx - lag + LTP_ORDER / 2 ]; for( i = 0; i < psDec->subfr_length; i++ ) { /* Unrolled loop */ LTP_pred_Q14 = SKP_SMULWB( pred_lag_ptr[ 0 ], B_Q14[ 0 ] ); LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -1 ], B_Q14[ 1 ] ); LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -2 ], B_Q14[ 2 ] ); LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -3 ], B_Q14[ 3 ] ); LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -4 ], B_Q14[ 4 ] ); pred_lag_ptr++; /* Generate LPC residual */ pres_Q10[ i ] = SKP_ADD32( pexc_Q10[ i ], SKP_RSHIFT_ROUND( LTP_pred_Q14, 4 ) ); /* Update states */ psDec->sLTP_Q16[ psDec->sLTP_buf_idx ] = SKP_LSHIFT( pres_Q10[ i ], 6 ); psDec->sLTP_buf_idx++; } } else { SKP_memcpy( pres_Q10, pexc_Q10, psDec->subfr_length * sizeof( SKP_int32 ) ); } /* Short term prediction */ /* NOTE: the code below loads two int16 values in an int32, and multiplies each using the */ /* SMLAWB and SMLAWT instructions. On a big-endian CPU the two int16 variables would be */ /* loaded in reverse order and the code will give the wrong result. In that case swapping */ /* the SMLAWB and SMLAWT instructions should solve the problem. */ if( psDec->LPC_order == 16 ) { for( i = 0; i < psDec->subfr_length; i++ ) { /* unrolled */ Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 0 ] ); /* read two coefficients at once */ LPC_pred_Q10 = SKP_SMULWB( psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 1 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 2 ], Atmp ); Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 2 ] ); LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 3 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 4 ], Atmp ); Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 4 ] ); LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 5 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 6 ], Atmp ); Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 6 ] ); LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 7 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 8 ], Atmp ); Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 8 ] ); LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 9 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 10 ], Atmp ); Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 10 ] ); LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 11 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 12 ], Atmp ); Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 12 ] ); LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 13 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 14 ], Atmp ); Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 14 ] ); LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 15 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 16 ], Atmp ); /* Add prediction to LPC residual */ vec_Q10[ i ] = SKP_ADD32( pres_Q10[ i ], LPC_pred_Q10 ); /* Update states */ psDec->sLPC_Q14[ MAX_LPC_ORDER + i ] = SKP_LSHIFT( vec_Q10[ i ], 4 ); } } else { SKP_assert( psDec->LPC_order == 10 ); for( i = 0; i < psDec->subfr_length; i++ ) { /* unrolled */ Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 0 ] ); /* read two coefficients at once */ LPC_pred_Q10 = SKP_SMULWB( psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 1 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 2 ], Atmp ); Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 2 ] ); LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 3 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 4 ], Atmp ); Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 4 ] ); LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 5 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 6 ], Atmp ); Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 6 ] ); LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 7 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 8 ], Atmp ); Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 8 ] ); LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 9 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 10 ], Atmp ); /* Add prediction to LPC residual */ vec_Q10[ i ] = SKP_ADD32( pres_Q10[ i ], LPC_pred_Q10 ); /* Update states */ psDec->sLPC_Q14[ MAX_LPC_ORDER + i ] = SKP_LSHIFT( vec_Q10[ i ], 4 ); } } /* Scale with Gain */ for( i = 0; i < psDec->subfr_length; i++ ) { pxq[ i ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( SKP_SMULWW( vec_Q10[ i ], Gain_Q16 ), 10 ) ); } /* Update LPC filter state */ SKP_memcpy( psDec->sLPC_Q14, &psDec->sLPC_Q14[ psDec->subfr_length ], MAX_LPC_ORDER * sizeof( SKP_int32 ) ); pexc_Q10 += psDec->subfr_length; pres_Q10 += psDec->subfr_length; pxq += psDec->subfr_length; } /* Copy to output */ SKP_memcpy( xq, &psDec->outBuf[ psDec->frame_length ], psDec->frame_length * sizeof( SKP_int16 ) ); } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_find_LTP_FIX.c0000644000175000017500000002773611513063445022076 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" void SKP_Silk_fit_LTP( SKP_int32 LTP_coefs_Q16[ LTP_ORDER ], SKP_int16 LTP_coefs_Q14[ LTP_ORDER ] ); void SKP_Silk_find_LTP_FIX( SKP_int16 b_Q14[ NB_SUBFR * LTP_ORDER ], /* O LTP coefs */ SKP_int32 WLTP[ NB_SUBFR * LTP_ORDER * LTP_ORDER ], /* O Weight for LTP quantization */ SKP_int *LTPredCodGain_Q7, /* O LTP coding gain */ const SKP_int16 r_first[], /* I residual signal after LPC signal + state for first 10 ms */ const SKP_int16 r_last[], /* I residual signal after LPC signal + state for last 10 ms */ const SKP_int lag[ NB_SUBFR ], /* I LTP lags */ const SKP_int32 Wght_Q15[ NB_SUBFR ], /* I weights */ const SKP_int subfr_length, /* I subframe length */ const SKP_int mem_offset, /* I number of samples in LTP memory */ SKP_int corr_rshifts[ NB_SUBFR ] /* O right shifts applied to correlations */ ) { SKP_int i, k, lshift; const SKP_int16 *r_ptr, *lag_ptr; SKP_int16 *b_Q14_ptr; SKP_int32 regu; SKP_int32 *WLTP_ptr; SKP_int32 b_Q16[ LTP_ORDER ], delta_b_Q14[ LTP_ORDER ], d_Q14[ NB_SUBFR ], nrg[ NB_SUBFR ], g_Q26; SKP_int32 w[ NB_SUBFR ], WLTP_max, max_abs_d_Q14, max_w_bits; SKP_int32 temp32, denom32; SKP_int extra_shifts; SKP_int rr_shifts, maxRshifts, maxRshifts_wxtra, LZs; SKP_int32 LPC_res_nrg, LPC_LTP_res_nrg, div_Q16; SKP_int32 Rr[ LTP_ORDER ], rr[ NB_SUBFR ]; SKP_int32 wd, m_Q12; b_Q14_ptr = b_Q14; WLTP_ptr = WLTP; r_ptr = &r_first[ mem_offset ]; for( k = 0; k < NB_SUBFR; k++ ) { if( k == ( NB_SUBFR >> 1 ) ) { /* shift residual for last 10 ms */ r_ptr = &r_last[ mem_offset ]; } lag_ptr = r_ptr - ( lag[ k ] + LTP_ORDER / 2 ); SKP_Silk_sum_sqr_shift( &rr[ k ], &rr_shifts, r_ptr, subfr_length ); /* rr[ k ] in Q( -rr_shifts ) */ /* Assure headroom */ LZs = SKP_Silk_CLZ32( rr[k] ); if( LZs < LTP_CORRS_HEAD_ROOM ) { rr[ k ] = SKP_RSHIFT_ROUND( rr[ k ], LTP_CORRS_HEAD_ROOM - LZs ); rr_shifts += (LTP_CORRS_HEAD_ROOM - LZs); } corr_rshifts[ k ] = rr_shifts; SKP_Silk_corrMatrix_FIX( lag_ptr, subfr_length, LTP_ORDER, WLTP_ptr, &corr_rshifts[ k ] ); /* WLTP_fix_ptr in Q( -corr_rshifts[ k ] ) */ /* The correlation vector always have lower max abs value than rr and/or RR so head room is assured */ SKP_Silk_corrVector_FIX( lag_ptr, r_ptr, subfr_length, LTP_ORDER, Rr, corr_rshifts[ k ] ); /* Rr_fix_ptr in Q( -corr_rshifts[ k ] ) */ if( corr_rshifts[ k ] > rr_shifts ) { rr[ k ] = SKP_RSHIFT( rr[ k ], corr_rshifts[ k ] - rr_shifts ); /* rr[ k ] in Q( -corr_rshifts[ k ] ) */ } SKP_assert( rr[ k ] >= 0 ); regu = SKP_SMULWB( rr[ k ] + 1, LTP_DAMPING_Q16 ); SKP_Silk_regularize_correlations_FIX( WLTP_ptr, &rr[k], regu, LTP_ORDER ); SKP_Silk_solve_LDL_FIX( WLTP_ptr, LTP_ORDER, Rr, b_Q16 ); /* WLTP_fix_ptr and Rr_fix_ptr both in Q(-corr_rshifts[k]) */ /* Limit and store in Q14 */ SKP_Silk_fit_LTP( b_Q16, b_Q14_ptr ); /* Calculate residual energy */ nrg[ k ] = SKP_Silk_residual_energy16_covar_FIX( b_Q14_ptr, WLTP_ptr, Rr, rr[ k ], LTP_ORDER, 14 ); /* nrg_fix in Q( -corr_rshifts[ k ] ) */ /* temp = Wght[ k ] / ( nrg[ k ] * Wght[ k ] + 0.01f * subfr_length ); */ extra_shifts = SKP_min_int( corr_rshifts[ k ], LTP_CORRS_HEAD_ROOM ); denom32 = SKP_LSHIFT_SAT32( SKP_SMULWB( nrg[ k ], Wght_Q15[ k ] ), 1 + extra_shifts ) + /* Q( -corr_rshifts[ k ] + extra_shifts ) */ SKP_RSHIFT( SKP_SMULWB( subfr_length, 655 ), corr_rshifts[ k ] - extra_shifts ); /* Q( -corr_rshifts[ k ] + extra_shifts ) */ denom32 = SKP_max( denom32, 1 ); SKP_assert( ((SKP_int64)Wght_Q15[ k ] << 16 ) < SKP_int32_MAX ); /* Wght always < 0.5 in Q0 */ temp32 = SKP_DIV32( SKP_LSHIFT( ( SKP_int32 )Wght_Q15[ k ], 16 ), denom32 ); /* Q( 15 + 16 + corr_rshifts[k] - extra_shifts ) */ temp32 = SKP_RSHIFT( temp32, 31 + corr_rshifts[ k ] - extra_shifts - 26 ); /* Q26 */ /* Limit temp such that the below scaling never wraps around */ WLTP_max = 0; for( i = 0; i < LTP_ORDER * LTP_ORDER; i++ ) { WLTP_max = SKP_max( WLTP_ptr[ i ], WLTP_max ); } lshift = SKP_Silk_CLZ32( WLTP_max ) - 1 - 3; /* keep 3 bits free for vq_nearest_neighbor_fix */ SKP_assert( 26 - 18 + lshift >= 0 ); if( 26 - 18 + lshift < 31 ) { temp32 = SKP_min_32( temp32, SKP_LSHIFT( ( SKP_int32 )1, 26 - 18 + lshift ) ); } SKP_Silk_scale_vector32_Q26_lshift_18( WLTP_ptr, temp32, LTP_ORDER * LTP_ORDER ); /* WLTP_ptr in Q( 18 - corr_rshifts[ k ] ) */ w[ k ] = matrix_ptr( WLTP_ptr, ( LTP_ORDER >> 1 ), ( LTP_ORDER >> 1 ), LTP_ORDER ); /* w in Q( 18 - corr_rshifts[ k ] ) */ SKP_assert( w[k] >= 0 ); r_ptr += subfr_length; b_Q14_ptr += LTP_ORDER; WLTP_ptr += LTP_ORDER * LTP_ORDER; } maxRshifts = 0; for( k = 0; k < NB_SUBFR; k++ ) { maxRshifts = SKP_max_int( corr_rshifts[ k ], maxRshifts ); } /* compute LTP coding gain */ if( LTPredCodGain_Q7 != NULL ) { LPC_LTP_res_nrg = 0; LPC_res_nrg = 0; SKP_assert( LTP_CORRS_HEAD_ROOM >= 2 ); /* Check that no overflow will happen when adding */ for( k = 0; k < NB_SUBFR; k++ ) { LPC_res_nrg = SKP_ADD32( LPC_res_nrg, SKP_RSHIFT( SKP_ADD32( SKP_SMULWB( rr[ k ], Wght_Q15[ k ] ), 1 ), 1 + ( maxRshifts - corr_rshifts[ k ] ) ) ); /* Q( -maxRshifts ) */ LPC_LTP_res_nrg = SKP_ADD32( LPC_LTP_res_nrg, SKP_RSHIFT( SKP_ADD32( SKP_SMULWB( nrg[ k ], Wght_Q15[ k ] ), 1 ), 1 + ( maxRshifts - corr_rshifts[ k ] ) ) ); /* Q( -maxRshifts ) */ } LPC_LTP_res_nrg = SKP_max( LPC_LTP_res_nrg, 1 ); /* avoid division by zero */ div_Q16 = SKP_DIV32_varQ( LPC_res_nrg, LPC_LTP_res_nrg, 16 ); *LTPredCodGain_Q7 = ( SKP_int )SKP_SMULBB( 3, SKP_Silk_lin2log( div_Q16 ) - ( 16 << 7 ) ); SKP_assert( *LTPredCodGain_Q7 == ( SKP_int )SKP_SAT16( SKP_MUL( 3, SKP_Silk_lin2log( div_Q16 ) - ( 16 << 7 ) ) ) ); } /* smoothing */ /* d = sum( B, 1 ); */ b_Q14_ptr = b_Q14; for( k = 0; k < NB_SUBFR; k++ ) { d_Q14[ k ] = 0; for( i = 0; i < LTP_ORDER; i++ ) { d_Q14[ k ] += b_Q14_ptr[ i ]; } b_Q14_ptr += LTP_ORDER; } /* m = ( w * d' ) / ( sum( w ) + 1e-3 ); */ /* Find maximum absolute value of d_Q14 and the bits used by w in Q0 */ max_abs_d_Q14 = 0; max_w_bits = 0; for( k = 0; k < NB_SUBFR; k++ ) { max_abs_d_Q14 = SKP_max_32( max_abs_d_Q14, SKP_abs( d_Q14[ k ] ) ); /* w[ k ] is in Q( 18 - corr_rshifts[ k ] ) */ /* Find bits needed in Q( 18 - maxRshifts ) */ max_w_bits = SKP_max_32( max_w_bits, 32 - SKP_Silk_CLZ32( w[ k ] ) + corr_rshifts[ k ] - maxRshifts ); } /* max_abs_d_Q14 = (5 << 15); worst case, i.e. LTP_ORDER * -SKP_int16_MIN */ SKP_assert( max_abs_d_Q14 <= ( 5 << 15 ) ); /* How many bits is needed for w*d' in Q( 18 - maxRshifts ) in the worst case, of all d_Q14's being equal to max_abs_d_Q14 */ extra_shifts = max_w_bits + 32 - SKP_Silk_CLZ32( max_abs_d_Q14 ) - 14; /* Subtract what we got available; bits in output var plus maxRshifts */ extra_shifts -= ( 32 - 1 - 2 + maxRshifts ); /* Keep sign bit free as well as 2 bits for accumulation */ extra_shifts = SKP_max_int( extra_shifts, 0 ); maxRshifts_wxtra = maxRshifts + extra_shifts; temp32 = SKP_RSHIFT( 262, maxRshifts + extra_shifts ) + 1; /* 1e-3f in Q( 18 - (maxRshifts + extra_shifts) ) */ wd = 0; for( k = 0; k < NB_SUBFR; k++ ) { /* w has at least 2 bits of headroom so no overflow should happen */ temp32 = SKP_ADD32( temp32, SKP_RSHIFT( w[ k ], maxRshifts_wxtra - corr_rshifts[ k ] ) ); /* Q( 18 - maxRshifts_wxtra ) */ wd = SKP_ADD32( wd, SKP_LSHIFT( SKP_SMULWW( SKP_RSHIFT( w[ k ], maxRshifts_wxtra - corr_rshifts[ k ] ), d_Q14[ k ] ), 2 ) ); /* Q( 18 - maxRshifts_wxtra ) */ } m_Q12 = SKP_DIV32_varQ( wd, temp32, 12 ); b_Q14_ptr = b_Q14; for( k = 0; k < NB_SUBFR; k++ ) { /* w_fix[ k ] from Q( 18 - corr_rshifts[ k ] ) to Q( 16 ) */ if( 2 - corr_rshifts[k] > 0 ) { temp32 = SKP_RSHIFT( w[ k ], 2 - corr_rshifts[ k ] ); } else { temp32 = SKP_LSHIFT_SAT32( w[ k ], corr_rshifts[ k ] - 2 ); } g_Q26 = SKP_MUL( SKP_DIV32( LTP_SMOOTHING_Q26, SKP_RSHIFT( LTP_SMOOTHING_Q26, 10 ) + temp32 ), /* Q10 */ SKP_LSHIFT_SAT32( SKP_SUB_SAT32( ( SKP_int32 )m_Q12, SKP_RSHIFT( d_Q14[ k ], 2 ) ), 4 ) ); /* Q16 */ temp32 = 0; for( i = 0; i < LTP_ORDER; i++ ) { delta_b_Q14[ i ] = SKP_max_16( b_Q14_ptr[ i ], 1638 ); /* 1638_Q14 = 0.1_Q0 */ temp32 += delta_b_Q14[ i ]; /* Q14 */ } temp32 = SKP_DIV32( g_Q26, temp32 ); /* Q14->Q12 */ for( i = 0; i < LTP_ORDER; i++ ) { b_Q14_ptr[ i ] = SKP_LIMIT( ( SKP_int32 )b_Q14_ptr[ i ] + SKP_SMULWB( SKP_LSHIFT_SAT32( temp32, 4 ), delta_b_Q14[ i ] ), -16000, 28000 ); } b_Q14_ptr += LTP_ORDER; } } void SKP_Silk_fit_LTP( SKP_int32 LTP_coefs_Q16[ LTP_ORDER ], SKP_int16 LTP_coefs_Q14[ LTP_ORDER ] ) { SKP_int i; for( i = 0; i < LTP_ORDER; i++ ) { LTP_coefs_Q14[ i ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( LTP_coefs_Q16[ i ], 2 ) ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_apply_sine_window.c0000644000175000017500000001120311513063445023441 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_SigProc_FIX.h" /* Apply sine window to signal vector. */ /* Window types: */ /* 0 -> sine window from 0 to pi */ /* 1 -> sine window from 0 to pi/2 */ /* 2 -> sine window from pi/2 to pi */ /* every other sample of window is linearly interpolated, for speed */ void SKP_Silk_apply_sine_window( SKP_int16 px_win[], /* O Pointer to windowed signal */ const SKP_int16 px[], /* I Pointer to input signal */ const SKP_int win_type, /* I Selects a window type */ const SKP_int length /* I Window length, multiple of 4 */ ) { SKP_int k; SKP_int32 px32, f_Q16, c_Q20, S0_Q16, S1_Q16; /* Length must be multiple of 4 */ SKP_assert( ( length & 3 ) == 0 ); /* Input pointer must be 4-byte aligned */ SKP_assert( ( (SKP_int64)px & 3 ) == 0 ); if( win_type == 0 ) { f_Q16 = SKP_DIV32_16( 411775, length + 1 ); // 411775 = 2 * 65536 * pi } else { f_Q16 = SKP_DIV32_16( 205887, length + 1 ); // 205887 = 65536 * pi } /* factor used for cosine approximation */ c_Q20 = -SKP_RSHIFT( SKP_MUL( f_Q16, f_Q16 ), 12 ); /* c_Q20 becomes too large if length is too small */ SKP_assert( c_Q20 >= -32768 ); /* initialize state */ if( win_type < 2 ) { /* start from 0 */ S0_Q16 = 0; /* approximation of sin(f) */ S1_Q16 = f_Q16; } else { /* start from 1 */ S0_Q16 = ( 1 << 16 ); /* approximation of cos(f) */ S1_Q16 = ( 1 << 16 ) + SKP_RSHIFT( c_Q20, 5 ); } /* Uses the recursive equation: sin(n*f) = 2 * cos(f) * sin((n-1)*f) - sin((n-2)*f) */ /* 4 samples at a time */ for( k = 0; k < length; k += 4 ) { px32 = *( (SKP_int32 *)&px[ k ] ); /* load two values at once */ px_win[ k ] = (SKP_int16)SKP_SMULWB( SKP_RSHIFT( S0_Q16 + S1_Q16, 1 ), px32 ); px_win[ k + 1 ] = (SKP_int16)SKP_SMULWT( S1_Q16, px32 ); S0_Q16 = SKP_RSHIFT( SKP_MUL( c_Q20, S1_Q16 ), 20 ) + SKP_LSHIFT( S1_Q16, 1 ) - S0_Q16 + 1; S0_Q16 = SKP_min( S0_Q16, ( 1 << 16 ) ); px32 = *( (SKP_int32 *)&px[k + 2] ); /* load two values at once */ px_win[ k + 2 ] = (SKP_int16)SKP_SMULWB( SKP_RSHIFT( S0_Q16 + S1_Q16, 1 ), px32 ); px_win[ k + 3 ] = (SKP_int16)SKP_SMULWT( S0_Q16, px32 ); S1_Q16 = SKP_RSHIFT( SKP_MUL( c_Q20, S0_Q16 ), 20 ) + SKP_LSHIFT( S0_Q16, 1 ) - S1_Q16; S1_Q16 = SKP_min( S1_Q16, ( 1 << 16 ) ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_PLC.h0000644000175000017500000001022311513063445020333 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #ifndef SKP_SILK_PLC_FIX_H #define SKP_SILK_PLC_FIX_H #include "SKP_Silk_main_FIX.h" #define BWE_COEF_Q16 64880 /* 0.99 in Q16 */ #define V_PITCH_GAIN_START_MIN_Q14 11469 /* 0.7 in Q14 */ #define V_PITCH_GAIN_START_MAX_Q14 15565 /* 0.95 in Q14 */ #define MAX_PITCH_LAG_MS 18 #define SA_THRES_Q8 50 #define USE_SINGLE_TAP 1 #define RAND_BUF_SIZE 128 #define RAND_BUF_MASK (RAND_BUF_SIZE - 1) #define LOG2_INV_LPC_GAIN_HIGH_THRES 4 /* 2^4 = 12 dB LPC gain */ #define LOG2_INV_LPC_GAIN_LOW_THRES 8 /* 2^8 = 24 dB LPC gain */ #define PITCH_DRIFT_FAC_Q16 655 /* 0.01 in Q16 */ void SKP_Silk_PLC_Reset( SKP_Silk_decoder_state *psDec /* I/O Decoder state */ ); void SKP_Silk_PLC( SKP_Silk_decoder_state *psDec, /* I/O Decoder state */ SKP_Silk_decoder_control *psDecCtrl, /* I/O Decoder control */ SKP_int16 signal[], /* I/O signal */ SKP_int length, /* I length of residual */ SKP_int lost /* I Loss flag */ ); void SKP_Silk_PLC_update( SKP_Silk_decoder_state *psDec, /* I/O Decoder state */ SKP_Silk_decoder_control *psDecCtrl, /* I/O Decoder control */ SKP_int16 signal[], SKP_int length ); void SKP_Silk_PLC_conceal( SKP_Silk_decoder_state *psDec, /* I/O Decoder state */ SKP_Silk_decoder_control *psDecCtrl, /* I/O Decoder control */ SKP_int16 signal[], /* O LPC residual signal */ SKP_int length /* I length of signal */ ); void SKP_Silk_PLC_glue_frames( SKP_Silk_decoder_state *psDec, /* I/O decoder state */ SKP_Silk_decoder_control *psDecCtrl, /* I/O Decoder control */ SKP_int16 signal[], /* I/O signal */ SKP_int length /* I length of signal */ ); #endif h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_LPC_stabilize.c0000644000175000017500000001271711513063445022406 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_typedef.h" #include "SKP_Silk_SigProc_FIX.h" #define LPC_STABILIZE_LPC_MAX_ABS_VALUE_Q16 ( ( (SKP_int32)SKP_int16_MAX ) << 4 ) /* LPC stabilizer, for a single input data vector */ void SKP_Silk_LPC_stabilize( SKP_int16 *a_Q12, /* O stabilized LPC vector [L] */ SKP_int32 *a_Q16, /* I LPC vector [L] */ const SKP_int32 bwe_Q16, /* I Bandwidth expansion factor */ const SKP_int L /* I Number of LPC parameters in the input vector */ ) { SKP_int32 maxabs, absval, sc_Q16; SKP_int i, idx = 0; SKP_int32 invGain_Q30; SKP_Silk_bwexpander_32( a_Q16, L, bwe_Q16 ); /***************************/ /* Limit range of the LPCs */ /***************************/ /* Limit the maximum absolute value of the prediction coefficients */ while( SKP_TRUE ) { /* Find maximum absolute value and its index */ maxabs = SKP_int32_MIN; for( i = 0; i < L; i++ ) { absval = SKP_abs( a_Q16[ i ] ); if( absval > maxabs ) { maxabs = absval; idx = i; } } if( maxabs >= LPC_STABILIZE_LPC_MAX_ABS_VALUE_Q16 ) { /* Reduce magnitude of prediction coefficients */ sc_Q16 = SKP_DIV32( SKP_int32_MAX, SKP_RSHIFT( maxabs, 4 ) ); sc_Q16 = 65536 - sc_Q16; sc_Q16 = SKP_DIV32( sc_Q16, idx + 1 ); sc_Q16 = 65536 - sc_Q16; sc_Q16 = SKP_LSHIFT( SKP_SMULWB( sc_Q16, 32604 ), 1 ); // 0.995 in Q16 SKP_Silk_bwexpander_32( a_Q16, L, sc_Q16 ); } else { break; } } /* Convert to 16 bit Q12 */ for( i = 0; i < L; i++ ) { a_Q12[ i ] = (SKP_int16)SKP_RSHIFT_ROUND( a_Q16[ i ], 4 ); } /**********************/ /* Ensure stable LPCs */ /**********************/ while( SKP_Silk_LPC_inverse_pred_gain( &invGain_Q30, a_Q12, L ) == 1 ) { SKP_Silk_bwexpander( a_Q12, L, 65339 ); // 0.997 in Q16 } } void SKP_Silk_LPC_fit( SKP_int16 *a_QQ, /* O Stabilized LPC vector, Q(24-rshift) [L] */ SKP_int32 *a_Q24, /* I LPC vector [L] */ const SKP_int QQ, /* I Q domain of output LPC vector */ const SKP_int L /* I Number of LPC parameters in the input vector */ ) { SKP_int i, rshift, idx = 0; SKP_int32 maxabs, absval, sc_Q16; rshift = 24 - QQ; /***************************/ /* Limit range of the LPCs */ /***************************/ /* Limit the maximum absolute value of the prediction coefficients */ while( SKP_TRUE ) { /* Find maximum absolute value and its index */ maxabs = SKP_int32_MIN; for( i = 0; i < L; i++ ) { absval = SKP_abs( a_Q24[ i ] ); if( absval > maxabs ) { maxabs = absval; idx = i; } } maxabs = SKP_RSHIFT( maxabs, rshift ); if( maxabs >= SKP_int16_MAX ) { /* Reduce magnitude of prediction coefficients */ sc_Q16 = 65470 - SKP_DIV32( SKP_MUL( 65470 >> 2, maxabs - SKP_int16_MAX ), SKP_RSHIFT32( SKP_MUL( maxabs, idx + 1), 2 ) ); SKP_Silk_bwexpander_32( a_Q24, L, sc_Q16 ); } else { break; } } /* Convert to 16 bit Q(24-rshift) */ SKP_assert( rshift > 0 ); SKP_assert( rshift < 31 ); for( i = 0; i < L; i++ ) { a_QQ[ i ] = (SKP_int16)SKP_RSHIFT_ROUND( a_Q24[ i ], rshift ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_encode_frame_FIX.c0000644000175000017500000005167011513063445023040 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" /****************/ /* Encode frame */ /****************/ SKP_int SKP_Silk_encode_frame_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O Pointer to Silk FIX encoder state */ SKP_uint8 *pCode, /* O Pointer to payload */ SKP_int16 *pnBytesOut, /* I/O Pointer to number of payload bytes */ /* input: max length; output: used */ const SKP_int16 *pIn /* I Pointer to input speech frame */ ) { SKP_Silk_encoder_control_FIX sEncCtrl; SKP_int i, nBytes, ret = 0; SKP_int16 *x_frame, *res_pitch_frame; SKP_int16 xfw[ MAX_FRAME_LENGTH ]; SKP_int16 pIn_HP[ MAX_FRAME_LENGTH ]; SKP_int16 res_pitch[ 2 * MAX_FRAME_LENGTH + LA_PITCH_MAX ]; SKP_int LBRR_idx, frame_terminator, SNR_dB_Q7; const SKP_uint16 *FrameTermination_CDF; /* Low bitrate redundancy parameters */ SKP_uint8 LBRRpayload[ MAX_ARITHM_BYTES ]; SKP_int16 nBytesLBRR; //SKP_int32 Seed[ MAX_LAYERS ]; sEncCtrl.sCmn.Seed = psEnc->sCmn.frameCounter++ & 3; /**************************************************************/ /* Setup Input Pointers, and insert frame in input buffer */ /*************************************************************/ x_frame = psEnc->x_buf + psEnc->sCmn.frame_length; /* start of frame to encode */ res_pitch_frame = res_pitch + psEnc->sCmn.frame_length; /* start of pitch LPC residual frame */ /****************************/ /* Voice Activity Detection */ /****************************/ ret = SKP_Silk_VAD_GetSA_Q8( &psEnc->sCmn.sVAD, &psEnc->speech_activity_Q8, &SNR_dB_Q7, sEncCtrl.input_quality_bands_Q15, &sEncCtrl.input_tilt_Q15, pIn,psEnc->sCmn.frame_length ); /*******************************************/ /* High-pass filtering of the input signal */ /*******************************************/ #if HIGH_PASS_INPUT /* Variable high-pass filter */ SKP_Silk_HP_variable_cutoff_FIX( psEnc, &sEncCtrl, pIn_HP, pIn ); #else SKP_memcpy( pIn_HP, pIn,psEnc->sCmn.frame_length * sizeof( SKP_int16 ) ); #endif #if SWITCH_TRANSITION_FILTERING /* Ensure smooth bandwidth transitions */ SKP_Silk_LP_variable_cutoff( &psEnc->sCmn.sLP, x_frame + psEnc->sCmn.la_shape, pIn_HP, psEnc->sCmn.frame_length ); #else SKP_memcpy( x_frame + psEnc->sCmn.la_shape, pIn_HP,psEnc->sCmn.frame_length * sizeof( SKP_int16 ) ); #endif /*****************************************/ /* Find pitch lags, initial LPC analysis */ /*****************************************/ SKP_Silk_find_pitch_lags_FIX( psEnc, &sEncCtrl, res_pitch, x_frame ); /************************/ /* Noise shape analysis */ /************************/ SKP_Silk_noise_shape_analysis_FIX( psEnc, &sEncCtrl, res_pitch_frame, x_frame ); /*****************************************/ /* Prefiltering for noise shaper */ /*****************************************/ SKP_Silk_prefilter_FIX( psEnc, &sEncCtrl, xfw, x_frame ); /***************************************************/ /* Find linear prediction coefficients (LPC + LTP) */ /***************************************************/ SKP_Silk_find_pred_coefs_FIX( psEnc, &sEncCtrl, res_pitch ); /****************************************/ /* Process gains */ /****************************************/ SKP_Silk_process_gains_FIX( psEnc, &sEncCtrl ); psEnc->sCmn.sigtype[ psEnc->sCmn.nFramesInPayloadBuf ] = sEncCtrl.sCmn.sigtype; psEnc->sCmn.QuantOffsetType[ psEnc->sCmn.nFramesInPayloadBuf ] = sEncCtrl.sCmn.QuantOffsetType; /****************************************/ /* Low Bitrate Redundant Encoding */ /****************************************/ nBytesLBRR = MAX_ARITHM_BYTES; SKP_Silk_LBRR_encode_FIX( psEnc, &sEncCtrl, LBRRpayload, &nBytesLBRR, xfw ); /*****************************************/ /* Noise shaping quantization */ /*****************************************/ psEnc->NoiseShapingQuantizer( &psEnc->sCmn, &sEncCtrl.sCmn, &psEnc->sNSQ, xfw, &psEnc->sCmn.q[ psEnc->sCmn.nFramesInPayloadBuf *psEnc->sCmn.frame_length ], sEncCtrl.sCmn.NLSFInterpCoef_Q2, sEncCtrl.PredCoef_Q12[ 0 ], sEncCtrl.LTPCoef_Q14, sEncCtrl.AR2_Q13, sEncCtrl.HarmShapeGain_Q14, sEncCtrl.Tilt_Q14, sEncCtrl.LF_shp_Q14, sEncCtrl.Gains_Q16, sEncCtrl.Lambda_Q10, sEncCtrl.LTP_scale_Q14 ); /**************************************************/ /* Convert speech activity into VAD and DTX flags */ /**************************************************/ if( psEnc->speech_activity_Q8 < SPEECH_ACTIVITY_DTX_THRES_Q8 ) { psEnc->sCmn.vadFlag = NO_VOICE_ACTIVITY; psEnc->sCmn.noSpeechCounter++; if( psEnc->sCmn.noSpeechCounter > NO_SPEECH_FRAMES_BEFORE_DTX ) { psEnc->sCmn.inDTX = 1; } if( psEnc->sCmn.noSpeechCounter > MAX_CONSECUTIVE_DTX ) { psEnc->sCmn.noSpeechCounter = 0; psEnc->sCmn.inDTX = 0; } } else { psEnc->sCmn.noSpeechCounter = 0; psEnc->sCmn.inDTX = 0; psEnc->sCmn.vadFlag = VOICE_ACTIVITY; } /****************************************/ /* Initialize arithmetic coder */ /****************************************/ if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) { SKP_Silk_range_enc_init( &psEnc->sCmn.sRC ); psEnc->sCmn.nBytesInPayloadBuf = 0; } /****************************************/ /* Encode Parameters */ /****************************************/ if( psEnc->sCmn.bitstream_v == BIT_STREAM_V4 ) { SKP_Silk_encode_parameters_v4( &psEnc->sCmn, &sEncCtrl.sCmn, &psEnc->sCmn.sRC ); FrameTermination_CDF = SKP_Silk_FrameTermination_v4_CDF; } else { SKP_Silk_encode_parameters( &psEnc->sCmn, &sEncCtrl.sCmn, &psEnc->sCmn.sRC, &psEnc->sCmn.q[ psEnc->sCmn.nFramesInPayloadBuf *psEnc->sCmn.frame_length ] ); FrameTermination_CDF = SKP_Silk_FrameTermination_CDF; } /****************************************/ /* Update Buffers and State */ /****************************************/ /* Update Input buffer */ SKP_memmove( psEnc->x_buf, &psEnc->x_buf[ psEnc->sCmn.frame_length ], ( psEnc->sCmn.frame_length + psEnc->sCmn.la_shape ) * sizeof( SKP_int16 ) ); /* parameters needed for next frame */ psEnc->sCmn.prev_sigtype = sEncCtrl.sCmn.sigtype; psEnc->sCmn.prevLag = sEncCtrl.sCmn.pitchL[ NB_SUBFR - 1]; psEnc->sCmn.first_frame_after_reset = 0; if( psEnc->sCmn.sRC.error ) { /* encoder returned error: clear payload buffer */ psEnc->sCmn.nFramesInPayloadBuf = 0; } else { psEnc->sCmn.nFramesInPayloadBuf++; } /****************************************/ /* finalize payload and copy to output */ /****************************************/ if( psEnc->sCmn.nFramesInPayloadBuf * FRAME_LENGTH_MS >= psEnc->sCmn.PacketSize_ms ) { LBRR_idx = ( psEnc->sCmn.oldest_LBRR_idx + 1 ) & LBRR_IDX_MASK; /* Check if FEC information should be added */ frame_terminator = SKP_SILK_LAST_FRAME; if( psEnc->sCmn.LBRR_buffer[ LBRR_idx ].usage == SKP_SILK_ADD_LBRR_TO_PLUS1 ) { frame_terminator = SKP_SILK_LBRR_VER1; } if( psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].usage == SKP_SILK_ADD_LBRR_TO_PLUS2 ) { frame_terminator = SKP_SILK_LBRR_VER2; LBRR_idx = psEnc->sCmn.oldest_LBRR_idx; } /* Add the frame termination info to stream */ SKP_Silk_range_encoder( &psEnc->sCmn.sRC, frame_terminator, FrameTermination_CDF ); if( psEnc->sCmn.bitstream_v == BIT_STREAM_V4 ) { /* Code excitation signal */ for( i = 0; i sCmn.nFramesInPayloadBuf; i++ ) { SKP_Silk_encode_pulses( &psEnc->sCmn.sRC, psEnc->sCmn.sigtype[ i ],psEnc->sCmn.QuantOffsetType[ i ], &psEnc->sCmn.q[ i * psEnc->sCmn.frame_length],psEnc->sCmn.frame_length ); } } /* payload length so far */ SKP_Silk_range_coder_get_length( &psEnc->sCmn.sRC, &nBytes ); /* check that there is enough space in external output buffer, and move data */ if( *pnBytesOut >= nBytes ) { SKP_Silk_range_enc_wrap_up( &psEnc->sCmn.sRC ); SKP_memcpy( pCode, psEnc->sCmn.sRC.buffer, nBytes * sizeof( SKP_uint8 ) ); if( frame_terminator > SKP_SILK_MORE_FRAMES && *pnBytesOut >= nBytes + psEnc->sCmn.LBRR_buffer[ LBRR_idx ].nBytes ) { /* Get old packet and add to payload. */ SKP_memcpy( &pCode[ nBytes ], psEnc->sCmn.LBRR_buffer[ LBRR_idx ].payload, psEnc->sCmn.LBRR_buffer[ LBRR_idx ].nBytes * sizeof( SKP_uint8 ) ); nBytes += psEnc->sCmn.LBRR_buffer[ LBRR_idx ].nBytes; } *pnBytesOut = nBytes; /* Update FEC buffer */ SKP_memcpy( psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].payload, LBRRpayload, nBytesLBRR * sizeof( SKP_uint8 ) ); psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].nBytes = nBytesLBRR; /* This line tells describes how FEC should be used */ psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].usage = sEncCtrl.sCmn.LBRR_usage; psEnc->sCmn.oldest_LBRR_idx = ( psEnc->sCmn.oldest_LBRR_idx + 1 ) & LBRR_IDX_MASK; /* Reset number of frames in payload buffer */ psEnc->sCmn.nFramesInPayloadBuf = 0; } else { /* Not enough space: Payload will be discarded */ *pnBytesOut = 0; nBytes = 0; psEnc->sCmn.nFramesInPayloadBuf = 0; ret = SKP_SILK_ENC_PAYLOAD_BUF_TOO_SHORT; } } else { /* no payload for you this time */ *pnBytesOut = 0; /* Encode that more frames follows */ frame_terminator = SKP_SILK_MORE_FRAMES; SKP_Silk_range_encoder( &psEnc->sCmn.sRC, frame_terminator, FrameTermination_CDF ); /* payload length so far */ SKP_Silk_range_coder_get_length( &psEnc->sCmn.sRC, &nBytes ); if( psEnc->sCmn.bitstream_v == BIT_STREAM_V4 ) { /* Take into account the q signal that isnt in the bitstream yet */ nBytes += SKP_Silk_pulses_to_bytes( &psEnc->sCmn, &psEnc->sCmn.q[ (psEnc->sCmn.nFramesInPayloadBuf - 1) * psEnc->sCmn.frame_length ] ); } } /* Check for arithmetic coder errors */ if( psEnc->sCmn.sRC.error ) { ret = SKP_SILK_ENC_INTERNAL_ERROR; } /* simulate number of ms buffered in channel because of exceeding TargetRate */ SKP_assert( ( 8 * 1000 * ( (SKP_int64)nBytes - (SKP_int64)psEnc->sCmn.nBytesInPayloadBuf ) ) == SKP_SAT32( 8 * 1000 * ( (SKP_int64)nBytes - (SKP_int64)psEnc->sCmn.nBytesInPayloadBuf ) ) ); SKP_assert( psEnc->sCmn.TargetRate_bps > 0 ); psEnc->BufferedInChannel_ms += SKP_DIV32( 8 * 1000 * ( nBytes -psEnc->sCmn.nBytesInPayloadBuf ),psEnc->sCmn.TargetRate_bps ); psEnc->BufferedInChannel_ms -= FRAME_LENGTH_MS; psEnc->BufferedInChannel_ms = SKP_LIMIT( psEnc->BufferedInChannel_ms, 0, 100 ); psEnc->sCmn.nBytesInPayloadBuf = nBytes; if( psEnc->speech_activity_Q8 > WB_DETECT_ACTIVE_SPEECH_LEVEL_THRES_Q8 ) { psEnc->sCmn.sSWBdetect.ActiveSpeech_ms = SKP_ADD_POS_SAT32( psEnc->sCmn.sSWBdetect.ActiveSpeech_ms, FRAME_LENGTH_MS ); } return( ret ); } /* Low BitRate Redundancy encoding functionality. Reuse all parameters but encode residual with lower bitrate */ void SKP_Silk_LBRR_encode_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O Pointer to Silk encoder state */ SKP_Silk_encoder_control_FIX *psEncCtrl, /* I/O Pointer to Silk encoder control struct */ SKP_uint8 *pCode, /* O Pointer to payload */ SKP_int16 *pnBytesOut, /* I/O Pointer to number of payload bytes */ SKP_int16 xfw[] /* I Input signal */ ) { SKP_int i, TempGainsIndices[ NB_SUBFR ], frame_terminator; SKP_int nBytes, nFramesInPayloadBuf; SKP_int32 TempGains_Q16[ NB_SUBFR ]; SKP_int typeOffset, LTP_scaleIndex, Rate_only_parameters = 0; /*******************************************/ /* Control use of inband LBRR */ /*******************************************/ SKP_Silk_LBRR_ctrl_FIX( psEnc, psEncCtrl ); if( psEnc->sCmn.LBRR_enabled ) { /* Save original Gains */ SKP_memcpy( TempGainsIndices, psEncCtrl->sCmn.GainsIndices, NB_SUBFR * sizeof( SKP_int ) ); SKP_memcpy( TempGains_Q16, psEncCtrl->Gains_Q16, NB_SUBFR * sizeof( SKP_int32 ) ); typeOffset = psEnc->sCmn.typeOffsetPrev; // Temp save as cannot be overwritten LTP_scaleIndex = psEncCtrl->sCmn.LTP_scaleIndex; /* Set max rate where quant signal is encoded */ if( psEnc->sCmn.fs_kHz == 8 ) { Rate_only_parameters = 13500; } else if( psEnc->sCmn.fs_kHz == 12 ) { Rate_only_parameters = 15500; } else if( psEnc->sCmn.fs_kHz == 16 ) { Rate_only_parameters = 17500; } else if( psEnc->sCmn.fs_kHz == 24 ) { Rate_only_parameters = 19500; } else { SKP_assert( 0 ); } if( psEnc->sCmn.Complexity > 0 && psEnc->sCmn.TargetRate_bps > Rate_only_parameters ) { if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) { /* First frame in packet copy Everything */ SKP_memcpy( &psEnc->sNSQ_LBRR, &psEnc->sNSQ, sizeof( SKP_Silk_nsq_state ) ); psEnc->sCmn.LBRRprevLastGainIndex = psEnc->sShape.LastGainIndex; /* Increase Gains to get target LBRR rate */ psEncCtrl->sCmn.GainsIndices[ 0 ] = psEncCtrl->sCmn.GainsIndices[ 0 ] + psEnc->sCmn.LBRR_GainIncreases; psEncCtrl->sCmn.GainsIndices[ 0 ] = SKP_LIMIT( psEncCtrl->sCmn.GainsIndices[ 0 ], 0, N_LEVELS_QGAIN - 1 ); } /* Decode to get Gains in sync with decoder */ /* Overwrite unquantized gains with quantized gains */ SKP_Silk_gains_dequant( psEncCtrl->Gains_Q16, psEncCtrl->sCmn.GainsIndices, &psEnc->sCmn.LBRRprevLastGainIndex, psEnc->sCmn.nFramesInPayloadBuf ); /*****************************************/ /* Noise shaping quantization */ /*****************************************/ psEnc->NoiseShapingQuantizer( &psEnc->sCmn, &psEncCtrl->sCmn, &psEnc->sNSQ_LBRR, xfw, &psEnc->sCmn.q_LBRR[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length ], psEncCtrl->sCmn.NLSFInterpCoef_Q2, psEncCtrl->PredCoef_Q12[ 0 ], psEncCtrl->LTPCoef_Q14, psEncCtrl->AR2_Q13, psEncCtrl->HarmShapeGain_Q14, psEncCtrl->Tilt_Q14, psEncCtrl->LF_shp_Q14, psEncCtrl->Gains_Q16, psEncCtrl->Lambda_Q10, psEncCtrl->LTP_scale_Q14 ); } else { SKP_memset( &psEnc->sCmn.q_LBRR[ psEnc->sCmn.nFramesInPayloadBuf *psEnc->sCmn.frame_length ], 0, psEnc->sCmn.frame_length * sizeof( SKP_int ) ); psEncCtrl->sCmn.LTP_scaleIndex = 0; } /****************************************/ /* Initialize arithmetic coder */ /****************************************/ if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) { SKP_Silk_range_enc_init( &psEnc->sCmn.sRC_LBRR ); psEnc->sCmn.nBytesInPayloadBuf = 0; } /****************************************/ /* Encode Parameters */ /****************************************/ if( psEnc->sCmn.bitstream_v == BIT_STREAM_V4 ) { SKP_Silk_encode_parameters_v4( &psEnc->sCmn, &psEncCtrl->sCmn, &psEnc->sCmn.sRC_LBRR ); } else { SKP_Silk_encode_parameters( &psEnc->sCmn, &psEncCtrl->sCmn, &psEnc->sCmn.sRC_LBRR, &psEnc->sCmn.q_LBRR[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length] ); } if( psEnc->sCmn.sRC_LBRR.error ) { /* encoder returned error: clear payload buffer */ nFramesInPayloadBuf = 0; } else { nFramesInPayloadBuf = psEnc->sCmn.nFramesInPayloadBuf + 1; } /****************************************/ /* finalize payload and copy to output */ /****************************************/ if( SKP_SMULBB( nFramesInPayloadBuf, FRAME_LENGTH_MS ) >= psEnc->sCmn.PacketSize_ms ) { /* Check if FEC information should be added */ frame_terminator = SKP_SILK_LAST_FRAME; /* Add the frame termination info to stream */ SKP_Silk_range_encoder( &psEnc->sCmn.sRC_LBRR, frame_terminator, SKP_Silk_FrameTermination_CDF ); if( psEnc->sCmn.bitstream_v == BIT_STREAM_V4 ) { /*********************************************/ /* Encode quantization indices of excitation */ /*********************************************/ for( i = 0; i < nFramesInPayloadBuf; i++ ) { SKP_Silk_encode_pulses( &psEnc->sCmn.sRC_LBRR, psEnc->sCmn.sigtype[ i ], psEnc->sCmn.QuantOffsetType[ i ], &psEnc->sCmn.q_LBRR[ i * psEnc->sCmn.frame_length ], psEnc->sCmn.frame_length ); } } /* payload length so far */ SKP_Silk_range_coder_get_length( &psEnc->sCmn.sRC_LBRR, &nBytes ); /* check that there is enough space in external output buffer, and move data */ if( *pnBytesOut >= nBytes ) { SKP_Silk_range_enc_wrap_up( &psEnc->sCmn.sRC_LBRR ); SKP_memcpy( pCode, psEnc->sCmn.sRC_LBRR.buffer, nBytes * sizeof( SKP_uint8 ) ); *pnBytesOut = nBytes; } else { /* not enough space: payload will be discarded */ *pnBytesOut = 0; SKP_assert( 0 ); } } else { /* no payload for you this time */ *pnBytesOut = 0; /* Encode that more frames follows */ frame_terminator = SKP_SILK_MORE_FRAMES; SKP_Silk_range_encoder( &psEnc->sCmn.sRC_LBRR, frame_terminator, SKP_Silk_FrameTermination_CDF ); } /* Restore original Gains */ SKP_memcpy( psEncCtrl->sCmn.GainsIndices, TempGainsIndices, NB_SUBFR * sizeof( SKP_int ) ); SKP_memcpy( psEncCtrl->Gains_Q16, TempGains_Q16, NB_SUBFR * sizeof( SKP_int32 ) ); /* Restore LTP scale index and typeoffset */ psEncCtrl->sCmn.LTP_scaleIndex = LTP_scaleIndex; psEnc->sCmn.typeOffsetPrev = typeOffset; } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_resample_2_3.c0000644000175000017500000000752111513063445022172 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * File Name: SKP_Silk_resample_2_3.c * * * * Resamples by a factor 2/3 * * * * Copyright 2008 (c), Skype Limited * * All rights reserved. * * * * Date: 081113 * * */ #include "SKP_Silk_SigProc_FIX.h" #define OUT_SUBFR_LEN 80 /* Resamples by a factor 2/3 */ void SKP_Silk_resample_2_3( SKP_int16 *out, /* O: Fs_low signal [inLen * 2/3] */ SKP_int32 *S, /* I/O: State vector [7+4] */ const SKP_int16 *in, /* I: Fs_high signal [inLen] */ const SKP_int inLen /* I: Input length, must be a multiple of 3 */ ) { SKP_int outLen, LSubFrameIn, LSubFrameOut; SKP_int16 outH[ 3 * OUT_SUBFR_LEN ]; SKP_int32 scratch[ ( 9 * OUT_SUBFR_LEN ) / 2 ]; /* Check that input length is multiple of 3 */ SKP_assert( inLen % 3 == 0 ); outLen = SKP_DIV32_16( SKP_LSHIFT( inLen, 1 ), 3 ); while( outLen > 0 ) { LSubFrameOut = SKP_min_int( OUT_SUBFR_LEN, outLen ); LSubFrameIn = SKP_SMULWB( 98304, LSubFrameOut ); /* 98304_Q16 = 3/2_Q0 */ /* Upsample by a factor 2 */ /* Scratch size needs to be: 3 * LSubFrameIn * sizeof( SKP_int32 ) */ SKP_Silk_resample_2_1_coarse( in, &S[ 0 ], outH, scratch, LSubFrameIn ); /* Downsample by a factor 3 */ SKP_Silk_resample_1_3( out, &S[ 4 ], outH, SKP_LSHIFT( LSubFrameIn, 1 ) ); in += LSubFrameIn; out += LSubFrameOut; outLen -= LSubFrameOut; } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_inner_prod_aligned.c0000644000175000017500000001054511513063445023541 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_inner_prod_aligned.c * * * * * * Copyright 2008 (c), Skype Limited * * Date: 080601 * * */ #include "SKP_Silk_SigProc_FIX.h" /* sum= for(i=0;i6, memory access can be reduced by half. */ SKP_int32 SKP_Silk_inner_prod_aligned( const SKP_int16* const inVec1, /* I input vector 1 */ const SKP_int16* const inVec2, /* I input vector 2 */ const SKP_int len /* I vector lengths */ ) { SKP_int i; SKP_int32 sum = 0; for( i = 0; i < len; i++ ) { sum = SKP_SMLABB( sum, inVec1[ i ], inVec2[ i ] ); } return sum; } SKP_int64 SKP_Silk_inner_prod_aligned_64( const SKP_int32 *inVec1, /* I input vector 1 */ const SKP_int32 *inVec2, /* I input vector 2 */ const SKP_int len /* I vector lengths */ ) { SKP_int i; SKP_int64 sum = 0; for( i = 0; i < len; i++ ) { sum = SKP_SMLAL( sum, inVec1[ i ], inVec2[ i ] ); } return sum; } SKP_int64 SKP_Silk_inner_prod16_aligned_64( const SKP_int16 *inVec1, /* I input vector 1 */ const SKP_int16 *inVec2, /* I input vector 2 */ const SKP_int len /* I vector lengths */ ) { SKP_int i; SKP_int64 sum = 0; for( i = 0; i < len; i++ ) { sum = SKP_SMLALBB( sum, inVec1[ i ], inVec2[ i ] ); } return sum; } SKP_int32 SKP_Silk_inner_prod16_aligned_sat( const SKP_int16* const inVec1, /* I input vector 1 */ const SKP_int16* const inVec2, /* I input vector 2 */ const SKP_int len /* I vector lengths */ ) { SKP_int i; SKP_int32 sum = 0; for( i = 0; i < len; i++ ) { sum = SKP_ADD_SAT32( sum, SKP_SMULBB( inVec1[ i ], inVec2[ i ] ) ); } return sum; } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_SigProc_FIX.h0000644000175000017500000012563611513063445022010 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #ifndef _SKP_SILK_SIGPROC_FIX_H_ #define _SKP_SILK_SIGPROC_FIX_H_ #ifdef __cplusplus extern "C" { #endif #define SigProc_MAX_ORDER_LPC 16 /* max order of the LPC analysis in schur() and k2a() */ #define SigProc_MAX_CORRELATION_LENGTH 640 /* max input length to the correlation */ #include "SKP_Silk_typedef.h" #include #include /* for abs() */ #include "SKP_Silk_resample_rom.h" #include "SKP_Silk_macros.h" /********************************************************************/ /* SIGNAL PROCESSING FUNCTIONS */ /********************************************************************/ /* downsample by a factor 2 */ void SKP_Silk_resample_1_2( const SKP_int16 *in, /* I: 16 kHz signal [2*len] */ SKP_int32 *S, /* I/O: State vector [6] */ SKP_int16 *out, /* O: 8 kHz signal [len] */ SKP_int32 *scratch, /* I: Scratch memory [4*len] */ const SKP_int32 len /* I: Number of OUTPUT samples */ ); /*! * downsample by a factor 2, coarser (good for resampling audio) */ void SKP_Silk_resample_1_2_coarse( const SKP_int16 *in, /* I: 16 kHz signal [2*len] */ SKP_int32 *S, /* I/O: state vector [4] */ SKP_int16 *out, /* O: 8 kHz signal [len] */ SKP_int32 *scratch, /* I: scratch memory [3*len] */ const SKP_int32 len /* I: number of OUTPUT samples */ ); /*! * downsample by a factor 2, coarsest (good for signals that are already oversampled, or for analysis purposes) */ void SKP_Silk_resample_1_2_coarsest( const SKP_int16 *in, /* I: 16 kHz signal [2*len] */ SKP_int32 *S, /* I/O: State vector [2] */ SKP_int16 *out, /* O: 8 kHz signal [len] */ SKP_int32 *scratch, /* I: Scratch memory [3*len] */ const SKP_int32 len /* I: Number of OUTPUT samples */ ); /*! * upsample by a factor 2, coarser (good for resampling audio) */ void SKP_Silk_resample_2_1_coarse( const SKP_int16 *in, /* I: 8 kHz signal [len] */ SKP_int32 *S, /* I/O: State vector [4] */ SKP_int16 *out, /* O: 16 kHz signal [2*len] */ SKP_int32 *scratch, /* I: Scratch memory [3*len] */ const SKP_int32 len /* I: Number of INPUT samples */ ); /*! * Resamples by a factor 1/3 */ void SKP_Silk_resample_1_3( SKP_int16 *out, /* O: Fs_low signal [inLen/3] */ SKP_int32 *S, /* I/O: State vector [7] */ const SKP_int16 *in, /* I: Fs_high signal [inLen] */ const SKP_int32 inLen /* I: Input length, must be a multiple of 3 */ ); /*! * Resamples by a factor 3/1 */ void SKP_Silk_resample_3_1( SKP_int16 *out, /* O: Fs_high signal [inLen*3] */ SKP_int32 *S, /* I/O: State vector [7] */ const SKP_int16 *in, /* I: Fs_low signal [inLen] */ const SKP_int32 inLen /* I: Input length */ ); /*! * Resamples by a factor 2/3 */ void SKP_Silk_resample_2_3( SKP_int16 *out, /* O: Fs_low signal [inLen * 2/3] */ SKP_int32 *S, /* I/O: State vector [7+4] */ const SKP_int16 *in, /* I: Fs_high signal [inLen] */ const SKP_int inLen /* I: Input length, must be a multiple of 3 */ ); /*! * Resamples by a factor 3/2 */ void SKP_Silk_resample_3_2( SKP_int16 *out, /* O: Fs_high signal [inLen*3/2] */ SKP_int32 *S, /* I/O: State vector [7+4] */ const SKP_int16 *in, /* I: Fs_low signal [inLen] */ SKP_int inLen /* I: Input length, must be a multiple of 2 */ ); /*! * Resamples by a factor 4/3 */ void SKP_Silk_resample_4_3( SKP_int16 *out, /* O: Fs_low signal [inLen * 4/3] */ SKP_int32 *S, /* I/O: State vector [7+4+4] */ const SKP_int16 *in, /* I: Fs_high signal [inLen] */ const SKP_int inLen /* I: input length, must be a multiple of 3 */ ); /*! * Resamples by a factor 3/4 */ void SKP_Silk_resample_3_4( SKP_int16 *out, /* O: Fs_high signal [inLen*3/4] */ SKP_int32 *S, /* I/O: State vector [7+2+6] */ const SKP_int16 *in, /* I: Fs_low signal [inLen] */ SKP_int inLen /* I: Input length, must be a multiple of 4 */ ); /*! * resample with a factor 2/3 coarse */ void SKP_Silk_resample_2_3_coarse( SKP_int16 *out, /* O: Output signal */ SKP_int16 *S, /* I/O: Resampler state [ SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ] */ const SKP_int16 *in, /* I: Input signal */ const SKP_int frameLenIn, /* I: Number of input samples */ SKP_int16 *scratch /* I: Scratch memory [ frameLenIn + SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ] */ ); /*! * resample with a factor 2/3 coarsest */ void SKP_Silk_resample_2_3_coarsest( SKP_int16 *out, /* O: Output signal */ SKP_int16 *S, /* I/O: Resampler state [ SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS - 1 ] */ const SKP_int16 *in, /* I: Input signal */ const SKP_int frameLenIn, /* I: Number of input samples */ SKP_int16 *scratch /* I: Scratch memory [ frameLenIn + SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS - 1 ] */ ); /*! * First order low-pass filter, with input as SKP_int16, running at 48 kHz */ void SKP_Silk_lowpass_short( const SKP_int16 *in, /* I: Q15 48 kHz signal; [len] */ SKP_int32 *S, /* I/O: Q25 state; length = 1 */ SKP_int32 *out, /* O: Q25 48 kHz signal; [len] */ const SKP_int32 len /* O: Signal length */ ); /*! * First order low-pass filter, with input as SKP_int32, running at 48 kHz */ void SKP_Silk_lowpass_int( const SKP_int32 *in, /* I: Q25 48 kHz signal; length = len */ SKP_int32 *S, /* I/O: Q25 state; length = 1 */ SKP_int32 *out, /* O: Q25 48 kHz signal; length = len */ const SKP_int32 len /* I: Number of samples */ ); /*! * First-order allpass filter */ void SKP_Silk_allpass_int( const SKP_int32 *in, /* I: Q25 input signal [len] */ SKP_int32 *S, /* I/O: Q25 state [1] */ SKP_int A, /* I: Q15 coefficient (0 <= A < 32768) */ SKP_int32 *out, /* O: Q25 output signal [len] */ const SKP_int32 len /* I: Number of samples */ ); /*! * second order ARMA filter * can handle (slowly) varying coefficients */ void SKP_Silk_biquad( const SKP_int16 *in, /* I: input signal */ const SKP_int16 *B, /* I: MA coefficients, Q13 [3] */ const SKP_int16 *A, /* I: AR coefficients, Q13 [2] */ SKP_int32 *S, /* I/O: state vector [2] */ SKP_int16 *out, /* O: output signal */ const SKP_int32 len /* I: signal length */ ); /*! * second order ARMA filter; * slower than biquad() but uses more precise coefficients * can handle (slowly) varying coefficients */ void SKP_Silk_biquad_alt( const SKP_int16 *in, /* I: input signal */ const SKP_int32 *B_Q28, /* I: MA coefficients [3] */ const SKP_int32 *A_Q28, /* I: AR coefficients [2] */ SKP_int32 *S, /* I/O: state vector [2] */ SKP_int16 *out, /* O: output signal */ const SKP_int32 len /* I: signal length (must be even) */ ); /*! * variable order MA filter. Prediction error filter implementation. Coeficients negated and starting with coef to x[n - 1] */ void SKP_Silk_MA_Prediction( const SKP_int16 *in, /* I: Input signal */ const SKP_int16 *B, /* I: MA prediction coefficients, Q12 [order] */ SKP_int32 *S, /* I/O: State vector [order] */ SKP_int16 *out, /* O: Output signal */ const SKP_int32 len, /* I: Signal length */ const SKP_int32 order /* I: Filter order */ ); void SKP_Silk_MA_Prediction_Q13( const SKP_int16 *in, /* I: input signal */ const SKP_int16 *B, /* I: MA prediction coefficients, Q13 [order] */ SKP_int32 *S, /* I/O: state vector [order] */ SKP_int16 *out, /* O: output signal */ SKP_int32 len, /* I: signal length */ SKP_int32 order /* I: filter order */ ); /*! * 16th order AR filter for LPC synthesis, coefficients are in Q12 */ void SKP_Silk_LPC_synthesis_order16( const SKP_int16 *in, /* I: excitation signal */ const SKP_int16 *A_Q12, /* I: AR coefficients [16], between -8_Q0 and 8_Q0 */ const SKP_int32 Gain_Q26, /* I: gain */ SKP_int32 *S, /* I/O: state vector [16] */ SKP_int16 *out, /* O: output signal */ const SKP_int32 len /* I: signal length, must be multiple of 16 */ ); /* variable order MA prediction error filter. */ /* Inverse filter of SKP_Silk_LPC_synthesis_filter */ void SKP_Silk_LPC_analysis_filter( const SKP_int16 *in, /* I: Input signal */ const SKP_int16 *B, /* I: MA prediction coefficients, Q12 [order] */ SKP_int16 *S, /* I/O: State vector [order] */ SKP_int16 *out, /* O: Output signal */ const SKP_int32 len, /* I: Signal length */ const SKP_int32 Order /* I: Filter order */ ); /* even order AR filter */ void SKP_Silk_LPC_synthesis_filter( const SKP_int16 *in, /* I: excitation signal */ const SKP_int16 *A_Q12, /* I: AR coefficients [Order], between -8_Q0 and 8_Q0 */ const SKP_int32 Gain_Q26, /* I: gain */ SKP_int32 *S, /* I/O: state vector [Order] */ SKP_int16 *out, /* O: output signal */ const SKP_int32 len, /* I: signal length */ const SKP_int Order /* I: filter order, must be even */ ); /* Chirp (bandwidth expand) LP AR filter */ void SKP_Silk_bwexpander( SKP_int16 *ar, /* I/O AR filter to be expanded (without leading 1) */ const SKP_int d, /* I Length of ar */ SKP_int32 chirp_Q16 /* I Chirp factor (typically in the range 0 to 1) */ ); /* Chirp (bandwidth expand) LP AR filter */ void SKP_Silk_bwexpander_32( SKP_int32 *ar, /* I/O AR filter to be expanded (without leading 1) */ const SKP_int d, /* I Length of ar */ SKP_int32 chirp_Q16 /* I Chirp factor in Q16 */ ); /* Compute inverse of LPC prediction gain, and */ /* test if LPC coefficients are stable (all poles within unit circle) */ SKP_int SKP_Silk_LPC_inverse_pred_gain( /* O: Returns 1 if unstable, otherwise 0 */ SKP_int32 *invGain_Q30, /* O: Inverse prediction gain, Q30 energy domain */ const SKP_int16 *A_Q12, /* I: Prediction coefficients, Q12 [order] */ const SKP_int order /* I: Prediction order */ ); SKP_int SKP_Silk_LPC_inverse_pred_gain_Q13( /* O: returns 1 if unstable, otherwise 0 */ SKP_int32 *invGain_Q30, /* O: Inverse prediction gain, Q30 energy domain */ const SKP_int16 *A_Q13, /* I: Prediction coefficients, Q13 [order] */ const SKP_int order /* I: Prediction order */ ); /* split signal in two decimated bands using first-order allpass filters */ void SKP_Silk_ana_filt_bank_1( const SKP_int16 *in, /* I: Input signal [N] */ SKP_int32 *S, /* I/O: State vector [2] */ SKP_int16 *outL, /* O: Low band [N/2] */ SKP_int16 *outH, /* O: High band [N/2] */ SKP_int32 *scratch, /* I: Scratch memory [3*N/2] */ const SKP_int32 N /* I: Number of input samples */ ); /********************************************************************/ /* SCALAR FUNCTIONS */ /********************************************************************/ /* approximation of 128 * log2() (exact inverse of approx 2^() below) */ /* convert input to a log scale */ SKP_int32 SKP_Silk_lin2log(const SKP_int32 inLin); /* I: input in linear scale */ /* Approximation of a sigmoid function */ SKP_int SKP_Silk_sigm_Q15(SKP_int in_Q5); /* approximation of 2^() (exact inverse of approx log2() above) */ /* convert input to a linear scale */ SKP_int32 SKP_Silk_log2lin(const SKP_int32 inLog_Q7); /* I: input on log scale */ /* Function that returns the maximum absolut value of the input vector */ SKP_int16 SKP_Silk_int16_array_maxabs( /* O Maximum absolute value, max: 2^15-1 */ const SKP_int16 *vec, /* I Input vector [len] */ const SKP_int32 len /* I Length of input vector */ ); /* Compute number of bits to right shift the sum of squares of a vector */ /* of int16s to make it fit in an int32 */ void SKP_Silk_sum_sqr_shift( SKP_int32 *energy, /* O Energy of x, after shifting to the right */ SKP_int *shift, /* O Number of bits right shift applied to energy */ const SKP_int16 *x, /* I Input vector */ SKP_int len /* I Length of input vector */ ); /* Calculates the reflection coefficients from the correlation sequence */ /* Faster than schur64(), but much less accurate. */ /* Uses SMLAWB(), requiring armv5E and higher. */ void SKP_Silk_schur( SKP_int16 *rc_Q15, /* O: reflection coefficients [order] Q15 */ const SKP_int32 *c, /* I: correlations [order+1] */ const SKP_int32 order /* I: prediction order */ ); /* Calculates the reflection coefficients from the correlation sequence */ /* Slower than schur(), but more accurate. */ /* Uses SMULL(), available on armv4 */ SKP_int32 SKP_Silk_schur64( /* O: returns residual energy */ SKP_int32 rc_Q16[], /* O: Reflection coefficients [order] Q16 */ const SKP_int32 c[], /* I: Correlations [order+1] */ SKP_int32 order /* I: Prediction order */ ); /* Step up function, converts reflection coefficients to prediction coefficients */ void SKP_Silk_k2a( SKP_int32 *A_Q24, /* O: Prediction coefficients [order] Q24 */ const SKP_int16 *rc_Q15, /* I: Reflection coefficients [order] Q15 */ const SKP_int32 order /* I: Prediction order */ ); /* Step up function, converts reflection coefficients to prediction coefficients */ void SKP_Silk_k2a_Q16( SKP_int32 *A_Q24, /* O: Prediction coefficients [order] Q24 */ const SKP_int32 *rc_Q16, /* I: Reflection coefficients [order] Q16 */ const SKP_int32 order /* I: Prediction order */ ); /* Apply sine window to signal vector. */ /* Window types: */ /* 0 -> sine window from 0 to pi */ /* 1 -> sine window from 0 to pi/2 */ /* 2 -> sine window from pi/2 to pi */ /* every other sample of window is linearly interpolated, for speed */ void SKP_Silk_apply_sine_window( SKP_int16 px_win[], /* O Pointer to windowed signal */ const SKP_int16 px[], /* I Pointer to input signal */ const SKP_int win_type, /* I Selects a window type */ const SKP_int length /* I Window length, multiple of 4 */ ); /* Compute autocorrelation */ void SKP_Silk_autocorr( SKP_int32 *results, /* O Result (length correlationCount) */ SKP_int32 *scale, /* O Scaling of the correlation vector */ const SKP_int16 *inputData, /* I Input data to correlate */ const SKP_int inputDataSize, /* I Length of input */ const SKP_int correlationCount /* I Number of correlation taps to compute */ ); /* Pitch estimator */ #define SigProc_PITCH_EST_MIN_COMPLEX 0 #define SigProc_PITCH_EST_MID_COMPLEX 1 #define SigProc_PITCH_EST_MAX_COMPLEX 2 void SKP_Silk_decode_pitch( SKP_int lagIndex, /* I */ SKP_int contourIndex, /* O */ SKP_int pitch_lags[], /* O 4 pitch values */ SKP_int Fs_kHz /* I sampling frequency (kHz) */ ); SKP_int SKP_Silk_pitch_analysis_core( /* O Voicing estimate: 0 voiced, 1 unvoiced */ const SKP_int16 *signal, /* I Signal of length PITCH_EST_FRAME_LENGTH_MS*Fs_kHz */ SKP_int *pitch_out, /* O 4 pitch lag values */ SKP_int *lagIndex, /* O Lag Index */ SKP_int *contourIndex, /* O Pitch contour Index */ SKP_int *LTPCorr_Q15, /* I/O Normalized correlation; input: value from previous frame */ SKP_int prevLag, /* I Last lag of previous frame; set to zero is unvoiced */ const SKP_int32 search_thres1_Q16, /* I First stage threshold for lag candidates 0 - 1 */ const SKP_int search_thres2_Q15, /* I Final threshold for lag candidates 0 - 1 */ const SKP_int Fs_kHz, /* I Sample frequency (kHz) */ const SKP_int complexity /* I Complexity setting, 0-2, where 2 is highest */ ); /* parameter defining the size and accuracy of the piecewise linear */ /* cosine approximatin table. */ #define LSF_COS_TAB_SZ_FIX 128 /* rom table with cosine values */ extern const SKP_int SKP_Silk_LSFCosTab_FIX_Q12[ LSF_COS_TAB_SZ_FIX + 1 ]; void SKP_Silk_LPC_fit( SKP_int16 *a_QQ, /* O stabilized LPC vector, Q(24-rshift) [L] */ SKP_int32 *a_Q24, /* I LPC vector [L] */ const SKP_int QQ, /* I Q domain of output LPC vector */ const SKP_int L /* I Number of LPC parameters in the input vector */ ); /* Compute Normalized Line Spectral Frequencies (NLSFs) from whitening filter coefficients */ /* If not all roots are found, the a_Q16 coefficients are bandwidth expanded until convergence. */ void SKP_Silk_A2NLSF( SKP_int *NLSF, /* O Normalized Line Spectral Frequencies, Q15 (0 - (2^15-1)), [d] */ SKP_int32 *a_Q16, /* I/O Monic whitening filter coefficients in Q16 [d] */ const SKP_int d /* I Filter order (must be even) */ ); /* compute whitening filter coefficients from normalized line spectral frequencies */ void SKP_Silk_NLSF2A( SKP_int16 *a, /* o monic whitening filter coefficients in Q12, [d] */ const SKP_int *NLSF, /* i normalized line spectral frequencies in Q15, [d] */ const SKP_int d /* i filter order (should be even) */ ); void SKP_Silk_insertion_sort_increasing( SKP_int32 *a, /* I/O Unsorted / Sorted vector */ SKP_int *index, /* O: Index vector for the sorted elements */ const SKP_int L, /* I: Vector length */ const SKP_int K /* I: Number of correctly sorted positions */ ); void SKP_Silk_insertion_sort_decreasing( SKP_int *a, /* I/O: Unsorted / Sorted vector */ SKP_int *index, /* O: Index vector for the sorted elements */ const SKP_int L, /* I: Vector length */ const SKP_int K /* I: Number of correctly sorted positions */ ); void SKP_Silk_insertion_sort_decreasing_int16( SKP_int16 *a, /* I/O: Unsorted / Sorted vector */ SKP_int *index, /* O: Index vector for the sorted elements */ const SKP_int L, /* I: Vector length */ const SKP_int K /* I: Number of correctly sorted positions */ ); void SKP_Silk_insertion_sort_increasing_all_values( SKP_int *a, /* I/O: Unsorted / Sorted vector */ const SKP_int L /* I: Vector length */ ); /* NLSF stabilizer, for a single input data vector */ void SKP_Silk_NLSF_stabilize( SKP_int *NLSF_Q15, /* I/O: Unstable/stabilized normalized LSF vector in Q15 [L] */ const SKP_int *NDeltaMin_Q15, /* I: Normalized delta min vector in Q15, NDeltaMin_Q15[L] must be >= 1 [L+1] */ const SKP_int L /* I: Number of NLSF parameters in the input vector */ ); /* NLSF stabilizer, over multiple input column data vectors */ void SKP_Silk_NLSF_stabilize_multi( SKP_int *NLSF_Q15, /* I/O: Unstable/stabilized normalized LSF vectors in Q15 [LxN] */ const SKP_int *NDeltaMin_Q15, /* I: Normalized delta min vector in Q15, NDeltaMin_Q15[L] must be >= 1 [L+1] */ const SKP_int N, /* I: Number of input vectors to be stabilized */ const SKP_int L /* I: NLSF vector dimension */ ); /* Laroia low complexity NLSF weights */ void SKP_Silk_NLSF_VQ_weights_laroia( SKP_int *pNLSFW_Q6, /* O: Pointer to input vector weights [D x 1] */ const SKP_int *pNLSF_Q15, /* I: Pointer to input vector [D x 1] */ const SKP_int D /* I: Input vector dimension (even) */ ); /* Compute reflection coefficients from input signal */ void SKP_Silk_burg_modified( SKP_int32 *res_nrg, /* O residual energy */ SKP_int *res_nrgQ, /* O residual energy Q value */ SKP_int32 A_Q16[], /* O prediction coefficients (length order) */ const SKP_int16 x[], /* I input signal, length: nb_subfr * ( D + subfr_length ) */ const SKP_int subfr_length, /* I input signal subframe length (including D preceeding samples) */ const SKP_int nb_subfr, /* I number of subframes stacked in x */ const SKP_int32 WhiteNoiseFrac_Q32, /* I fraction added to zero-lag autocorrelation */ const SKP_int D /* I order */ ); /* Multiply a vector by a constant */ void SKP_Silk_scale_vector16_Q14( SKP_int16 *data1, SKP_int gain_Q14, /* Gain in Q14 */ SKP_int dataSize ); /* Copy and multiply a vector by a constant */ void SKP_Silk_scale_copy_vector16( SKP_int16 *data_out, const SKP_int16 *data_in, SKP_int32 gain_Q16, /* I: gain in Q16 */ const SKP_int dataSize /* I: length */ ); void SKP_Silk_scale_vector32_16_Q14( SKP_int32 *data1, /* I/O: Q0/Q0 */ SKP_int gain_Q14, /* I: Q14 */ SKP_int dataSize /* I: length */ ); /* Multiply a vector by a constant, does not saturate output data */ void SKP_Silk_scale_vector32_Q16( SKP_int32 *data1, /* I/O: Q0/Q0 */ SKP_int32 gain_Q16, /* I: gain in Q16 ( SKP_int16_MIN <= gain_Q16 <= SKP_int16_MAX + 65536 ) */ const SKP_int dataSize /* I: length */ ); /* Some for the LTP related function requires Q26 to work.*/ void SKP_Silk_scale_vector32_Q26_lshift_18( SKP_int32 *data1, /* I/O: Q0/Q18 */ SKP_int32 gain_Q26, /* I: Q26 */ SKP_int dataSize /* I: length */ ); /********************************************************************/ /* INLINE ARM MATH */ /********************************************************************/ /* return sum(inVec1[i]*inVec2[i]) */ /* inVec1 and inVec2 should be increasing ordered, and starting address should be 4 byte aligned. (a factor of 4)*/ SKP_int32 SKP_Silk_inner_prod_aligned( const SKP_int16* const inVec1, /* I input vector 1 */ const SKP_int16* const inVec2, /* I input vector 2 */ const SKP_int len /* I vector lengths */ ); SKP_int32 SKP_Silk_inner_prod16_aligned_sat( const SKP_int16* const inVec1, /* I input vector 1 */ const SKP_int16* const inVec2, /* I input vector 2 */ const SKP_int len /* I vector lengths */ ); SKP_int64 SKP_Silk_inner_prod_aligned_64( const SKP_int32 *inVec1, /* I input vector 1 */ const SKP_int32 *inVec2, /* I input vector 2 */ const SKP_int len /* I vector lengths */ ); SKP_int64 SKP_Silk_inner_prod16_aligned_64( const SKP_int16 *inVec1, /* I input vector 1 */ const SKP_int16 *inVec2, /* I input vector 2 */ const SKP_int len /* I vector lengths */ ); /********************************************************************/ /* MACROS */ /********************************************************************/ /* Define 4-byte aligned array of SKP_int16 */ #define SKP_array_of_int16_4_byte_aligned( arrayName, nElements ) \ SKP_int32 dummy_int32 ## arrayName; \ SKP_int16 arrayName[ (nElements) ] /* Useful Macros that can be adjusted to other platforms */ #define SKP_memcpy(a, b, c) memcpy((a), (b), (c)) /* Dest, Src, ByteCount */ #define SKP_memset(a, b, c) memset((a), (b), (c)) /* Dest, value, ByteCount */ #define SKP_memmove(a, b, c) memmove((a), (b), (c)) /* Dest, Src, ByteCount */ /* fixed point macros */ // (a32 * b32) output have to be 32bit int #define SKP_MUL(a32, b32) ((a32) * (b32)) // (a32 * b32) output have to be 32bit uint #define SKP_MUL_uint(a32, b32) SKP_MUL(a32, b32) // a32 + (b32 * c32) output have to be 32bit int #define SKP_MLA(a32, b32, c32) SKP_ADD32((a32),((b32) * (c32))) // a32 + (b32 * c32) output have to be 32bit uint #define SKP_MLA_uint(a32, b32, c32) SKP_MLA(a32, b32, c32) // ((a32 >> 16) * (b32 >> 16)) output have to be 32bit int #define SKP_SMULTT(a32, b32) (((a32) >> 16) * ((b32) >> 16)) // a32 + ((a32 >> 16) * (b32 >> 16)) output have to be 32bit int #define SKP_SMLATT(a32, b32, c32) SKP_ADD32((a32),((b32) >> 16) * ((c32) >> 16)) #define SKP_SMLALBB(a64, b16, c16) SKP_ADD64((a64),(SKP_int64)((SKP_int32)(b16) * (SKP_int32)(c16))) // (a32 * b32) #define SKP_SMULL(a32, b32) ((SKP_int64)(a32) * /*(SKP_int64)*/(b32)) // multiply-accumulate macros that allow overflow in the addition (ie, no asserts in debug mode) #define SKP_MLA_ovflw(a32, b32, c32) SKP_MLA(a32, b32, c32) #ifndef SKP_SMLABB_ovflw # define SKP_SMLABB_ovflw(a32, b32, c32) SKP_SMLABB(a32, b32, c32) #endif #define SKP_SMLABT_ovflw(a32, b32, c32) SKP_SMLABT(a32, b32, c32) #define SKP_SMLATT_ovflw(a32, b32, c32) SKP_SMLATT(a32, b32, c32) #define SKP_SMLAWB_ovflw(a32, b32, c32) SKP_SMLAWB(a32, b32, c32) #define SKP_SMLAWT_ovflw(a32, b32, c32) SKP_SMLAWT(a32, b32, c32) #define SKP_DIV64_32(a64, b32) ((a64)/(b32)) /* TODO: rewrite it as a set of SKP_DIV32.*/ #define SKP_DIV32_16(a32, b16) ((SKP_int32)((a32) / (b16))) #define SKP_DIV32(a32, b32) ((SKP_int32)((a32) / (b32))) // These macros enables checking for overflow in SKP_Silk_API_Debug.h #define SKP_ADD16(a, b) ((a) + (b)) #define SKP_ADD32(a, b) ((a) + (b)) #define SKP_ADD64(a, b) ((a) + (b)) #define SKP_SUB16(a, b) ((a) - (b)) #define SKP_SUB32(a, b) ((a) - (b)) #define SKP_SUB64(a, b) ((a) - (b)) #define SKP_SAT8(a) ((a) > SKP_int8_MAX ? SKP_int8_MAX : \ ((a) < SKP_int8_MIN ? SKP_int8_MIN : (a))) #define SKP_SAT16(a) ((a) > SKP_int16_MAX ? SKP_int16_MAX : \ ((a) < SKP_int16_MIN ? SKP_int16_MIN : (a))) #define SKP_SAT32(a) ((a) > SKP_int32_MAX ? SKP_int32_MAX : \ ((a) < SKP_int32_MIN ? SKP_int32_MIN : (a))) #define SKP_CHECK_FIT8(a) (a) #define SKP_CHECK_FIT16(a) (a) #define SKP_CHECK_FIT32(a) (a) #define SKP_ADD_SAT16(a, b) (SKP_int16)SKP_SAT16( SKP_ADD32( (SKP_int32)(a), (b) ) ) #define SKP_ADD_SAT64(a, b) ((((a) + (b)) & 0x8000000000000000LL) == 0 ? \ ((((a) & (b)) & 0x8000000000000000LL) != 0 ? SKP_int64_MIN : (a)+(b)) : \ ((((a) | (b)) & 0x8000000000000000LL) == 0 ? SKP_int64_MAX : (a)+(b)) ) #define SKP_SUB_SAT16(a, b) (SKP_int16)SKP_SAT16( SKP_SUB32( (SKP_int32)(a), (b) ) ) #define SKP_SUB_SAT64(a, b) ((((a)-(b)) & 0x8000000000000000LL) == 0 ? \ (( (a) & ((b)^0x8000000000000000LL) & 0x8000000000000000LL) ? SKP_int64_MIN : (a)-(b)) : \ ((((a)^0x8000000000000000LL) & (b) & 0x8000000000000000LL) ? SKP_int64_MAX : (a)-(b)) ) /* Saturation for positive input values */ #define SKP_POS_SAT32(a) ((a) > SKP_int32_MAX ? SKP_int32_MAX : (a)) /* Add with saturation for positive input values */ #define SKP_ADD_POS_SAT8(a, b) ((((a)+(b)) & 0x80) ? SKP_int8_MAX : ((a)+(b))) #define SKP_ADD_POS_SAT16(a, b) ((((a)+(b)) & 0x8000) ? SKP_int16_MAX : ((a)+(b))) #define SKP_ADD_POS_SAT32(a, b) ((((a)+(b)) & 0x80000000) ? SKP_int32_MAX : ((a)+(b))) #define SKP_ADD_POS_SAT64(a, b) ((((a)+(b)) & 0x8000000000000000LL) ? SKP_int64_MAX : ((a)+(b))) #define SKP_LSHIFT8(a, shift) ((a)<<(shift)) // shift >= 0, shift < 8 #define SKP_LSHIFT16(a, shift) ((a)<<(shift)) // shift >= 0, shift < 16 #define SKP_LSHIFT32(a, shift) ((a)<<(shift)) // shift >= 0, shift < 32 #define SKP_LSHIFT64(a, shift) ((a)<<(shift)) // shift >= 0, shift < 64 #define SKP_LSHIFT(a, shift) SKP_LSHIFT32(a, shift) // shift >= 0, shift < 32 #define SKP_RSHIFT8(a, shift) ((a)>>(shift)) // shift >= 0, shift < 8 #define SKP_RSHIFT16(a, shift) ((a)>>(shift)) // shift >= 0, shift < 16 #define SKP_RSHIFT32(a, shift) ((a)>>(shift)) // shift >= 0, shift < 32 #define SKP_RSHIFT64(a, shift) ((a)>>(shift)) // shift >= 0, shift < 64 #define SKP_RSHIFT(a, shift) SKP_RSHIFT32(a, shift) // shift >= 0, shift < 32 /* saturates before shifting */ #define SKP_LSHIFT_SAT16(a, shift) (SKP_LSHIFT16( SKP_LIMIT( (a), SKP_RSHIFT16( SKP_int16_MIN, (shift) ), \ SKP_RSHIFT16( SKP_int16_MAX, (shift) ) ), (shift) )) #define SKP_LSHIFT_SAT32(a, shift) (SKP_LSHIFT32( SKP_LIMIT( (a), SKP_RSHIFT32( SKP_int32_MIN, (shift) ), \ SKP_RSHIFT32( SKP_int32_MAX, (shift) ) ), (shift) )) #define SKP_LSHIFT_ovflw(a, shift) ((a)<<(shift)) // shift >= 0, allowed to overflow #define SKP_LSHIFT_uint(a, shift) ((a)<<(shift)) // shift >= 0 #define SKP_RSHIFT_uint(a, shift) ((a)>>(shift)) // shift >= 0 #define SKP_ADD_LSHIFT(a, b, shift) ((a) + SKP_LSHIFT((b), (shift))) // shift >= 0 #define SKP_ADD_LSHIFT32(a, b, shift) SKP_ADD32((a), SKP_LSHIFT32((b), (shift))) // shift >= 0 #define SKP_ADD_LSHIFT_uint(a, b, shift) ((a) + SKP_LSHIFT_uint((b), (shift))) // shift >= 0 #define SKP_ADD_RSHIFT(a, b, shift) ((a) + SKP_RSHIFT((b), (shift))) // shift >= 0 #define SKP_ADD_RSHIFT32(a, b, shift) SKP_ADD32((a), SKP_RSHIFT32((b), (shift))) // shift >= 0 #define SKP_ADD_RSHIFT_uint(a, b, shift) ((a) + SKP_RSHIFT_uint((b), (shift))) // shift >= 0 #define SKP_SUB_LSHIFT32(a, b, shift) SKP_SUB32((a), SKP_LSHIFT32((b), (shift))) // shift >= 0 #define SKP_SUB_RSHIFT32(a, b, shift) SKP_SUB32((a), SKP_RSHIFT32((b), (shift))) // shift >= 0 /* Requires that shift > 0 */ #define SKP_RSHIFT_ROUND(a, shift) ((shift) == 1 ? ((a) >> 1) + ((a) & 1) : (((a) >> ((shift) - 1)) + 1) >> 1) #define SKP_RSHIFT_ROUND64(a, shift) ((shift) == 1 ? ((a) >> 1) + ((a) & 1) : (((a) >> ((shift) - 1)) + 1) >> 1) /* Number of rightshift required to fit the multiplication */ #define SKP_NSHIFT_MUL_32_32(a, b) ( -(31- (32-SKP_Silk_CLZ32(SKP_abs(a)) + (32-SKP_Silk_CLZ32(SKP_abs(b))))) ) #define SKP_NSHIFT_MUL_16_16(a, b) ( -(15- (16-SKP_Silk_CLZ16(SKP_abs(a)) + (16-SKP_Silk_CLZ16(SKP_abs(b))))) ) #define SKP_min(a, b) (((a) < (b)) ? (a) : (b)) #define SKP_max(a, b) (((a) > (b)) ? (a) : (b)) /* Macro to convert floating-point constants to fixed-point */ #define SKP_FIX_CONST( C, Q ) ((SKP_int32)((C) * (1 << (Q)) + 0.5)) /* SKP_min() versions with typecast in the function call */ SKP_INLINE SKP_int SKP_min_int(SKP_int a, SKP_int b) { return (((a) < (b)) ? (a) : (b)); } SKP_INLINE SKP_int16 SKP_min_16(SKP_int16 a, SKP_int16 b) { return (((a) < (b)) ? (a) : (b)); } SKP_INLINE SKP_int32 SKP_min_32(SKP_int32 a, SKP_int32 b) { return (((a) < (b)) ? (a) : (b)); } SKP_INLINE SKP_int64 SKP_min_64(SKP_int64 a, SKP_int64 b) { return (((a) < (b)) ? (a) : (b)); } /* SKP_min() versions with typecast in the function call */ SKP_INLINE SKP_int SKP_max_int(SKP_int a, SKP_int b) { return (((a) > (b)) ? (a) : (b)); } SKP_INLINE SKP_int16 SKP_max_16(SKP_int16 a, SKP_int16 b) { return (((a) > (b)) ? (a) : (b)); } SKP_INLINE SKP_int32 SKP_max_32(SKP_int32 a, SKP_int32 b) { return (((a) > (b)) ? (a) : (b)); } SKP_INLINE SKP_int64 SKP_max_64(SKP_int64 a, SKP_int64 b) { return (((a) > (b)) ? (a) : (b)); } #define SKP_LIMIT( a, limit1, limit2) ((limit1) > (limit2) ? ((a) > (limit1) ? (limit1) : ((a) < (limit2) ? (limit2) : (a))) \ : ((a) > (limit2) ? (limit2) : ((a) < (limit1) ? (limit1) : (a)))) //#define SKP_non_neg(a) ((a) & ((-(a)) >> (8 * sizeof(a) - 1))) /* doesn't seem faster than SKP_max(0, a); #define SKP_abs(a) (((a) > 0) ? (a) : -(a)) // Be careful, SKP_abs returns wrong when input equals to SKP_intXX_MIN #define SKP_abs_int(a) (((a) ^ ((a) >> (8 * sizeof(a) - 1))) - ((a) >> (8 * sizeof(a) - 1))) #define SKP_abs_int32(a) (((a) ^ ((a) >> 31)) - ((a) >> 31)) #define SKP_abs_int64(a) (((a) > 0) ? (a) : -(a)) #define SKP_sign(a) ((a) > 0 ? 1 : ( (a) < 0 ? -1 : 0 )) #define SKP_sqrt(a) (sqrt(a)) /* PSEUDO-RANDOM GENERATOR */ /* Make sure to store the result as the seed for the next call (also in between */ /* frames), otherwise result won't be random at all. When only using some of the */ /* bits, take the most significant bits by right-shifting. Do not just mask off */ /* the lowest bits. */ #define SKP_RAND(seed) (SKP_MLA_ovflw(907633515, (seed), 196314165)) // Add some multiplication functions that can be easily mapped to ARM. // SKP_SMMUL: Signed top word multiply. // ARMv6 2 instruction cycles. // ARMv3M+ 3 instruction cycles. use SMULL and ignore LSB registers.(except xM) //#define SKP_SMMUL(a32, b32) (SKP_int32)SKP_RSHIFT(SKP_SMLAL(SKP_SMULWB((a32), (b32)), (a32), SKP_RSHIFT_ROUND((b32), 16)), 16) // the following seems faster on x86 #define SKP_SMMUL(a32, b32) (SKP_int32)SKP_RSHIFT64(SKP_SMULL((a32), (b32)), 32) #include "SKP_Silk_Inlines.h" #ifdef __cplusplus } #endif #endif h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_resample_1_2_coarse.c0000644000175000017500000000747211513063445023531 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_resample_1_2_coarse.c * * * * Downsample by a factor 2, coarser * * * * Copyright 2006 (c), Skype Limited * * Date: 060221 * * */ #include "SKP_Silk_SigProc_FIX.h" /* downsample by a factor 2, coarser */ void SKP_Silk_resample_1_2_coarse( const SKP_int16 *in, /* I: 16 kHz signal [2*len] */ SKP_int32 *S, /* I/O: State vector [4] */ SKP_int16 *out, /* O: 8 kHz signal [len] */ SKP_int32 *scratch, /* I: Scratch memory [3*len] */ const SKP_int32 len /* I: Number of OUTPUT samples*/ ) { SKP_int32 k, idx; /* Coefficients for coarser 2-fold resampling */ const SKP_int16 A20c[ 2 ] = { 2119, 16663 }; const SKP_int16 A21c[ 2 ] = { 8050, 26861 }; /* De-interleave allpass inputs, and convert Q15 -> Q25 */ for( k = 0; k < len; k++ ) { idx = SKP_LSHIFT( k, 1 ); scratch[ k ] = SKP_LSHIFT( (SKP_int32)in[ idx ], 10 ); scratch[ k + len ] = SKP_LSHIFT( (SKP_int32)in[ idx + 1 ], 10 ); } idx = SKP_LSHIFT( len, 1 ); /* Allpass filters */ SKP_Silk_allpass_int( scratch, S, A21c[ 0 ], scratch + idx, len ); SKP_Silk_allpass_int( scratch + idx, S + 1, A21c[ 1 ], scratch, len ); SKP_Silk_allpass_int( scratch + len, S + 2, A20c[ 0 ], scratch + idx, len ); SKP_Silk_allpass_int( scratch + idx, S + 3, A20c[ 1 ], scratch + len, len ); /* Add two allpass outputs */ for( k = 0; k < len; k++ ) { out[ k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( scratch[ k ] + scratch[ k + len ], 11 ) ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_tables_NLSF_CB1_10.h0000644000175000017500000000462011513063445022742 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #ifndef SKP_SILK_TABLES_NLSF_CB1_10_H #define SKP_SILK_TABLES_NLSF_CB1_10_H #include "SKP_Silk_define.h" #ifdef __cplusplus extern "C" { #endif #define NLSF_MSVQ_CB1_10_STAGES 6 #define NLSF_MSVQ_CB1_10_VECTORS 72 /* NLSF codebook entropy coding tables */ extern const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB1_10_CDF[ NLSF_MSVQ_CB1_10_VECTORS + NLSF_MSVQ_CB1_10_STAGES ]; extern const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB1_10_CDF_start_ptr[ NLSF_MSVQ_CB1_10_STAGES ]; extern const SKP_int SKP_Silk_NLSF_MSVQ_CB1_10_CDF_middle_idx[ NLSF_MSVQ_CB1_10_STAGES ]; #ifdef __cplusplus } #endif #endif h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_tables_NLSF_CB1_10.c0000644000175000017500000004711111513063445022737 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /**********************************************/ /* This file has been automatically generated */ /* */ /* ROM usage: 90+803 Words */ /**********************************************/ #include "SKP_Silk_structs.h" #include "SKP_Silk_tables_NLSF_CB1_10.h" const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB1_10_CDF[ NLSF_MSVQ_CB1_10_VECTORS + NLSF_MSVQ_CB1_10_STAGES ] = { 0, 17096, 24130, 28997, 33179, 36696, 40213, 42493, 44252, 45973, 47551, 49095, 50542, 51898, 53196, 54495, 55685, 56851, 57749, 58628, 59435, 60207, 60741, 61220, 61700, 62179, 62659, 63138, 63617, 64097, 64576, 65056, 65535, 0, 20378, 33032, 40395, 46721, 51707, 56585, 61157, 65535, 0, 15055, 25472, 35447, 42501, 48969, 54773, 60212, 65535, 0, 12069, 22440, 32812, 40145, 46870, 53595, 59630, 65535, 0, 10839, 19954, 27957, 35961, 43965, 51465, 58805, 65535, 0, 8933, 17674, 26415, 34785, 42977, 50820, 58496, 65535 }; const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB1_10_CDF_start_ptr[ NLSF_MSVQ_CB1_10_STAGES ] = { &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[ 0 ], &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[ 33 ], &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[ 42 ], &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[ 51 ], &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[ 60 ], &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[ 69 ] }; const SKP_int SKP_Silk_NLSF_MSVQ_CB1_10_CDF_middle_idx[ NLSF_MSVQ_CB1_10_STAGES ] = { 5, 3, 4, 4, 5, 5 }; const SKP_int16 SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[ NLSF_MSVQ_CB1_10_VECTORS ] = { 62, 103, 120, 127, 135, 135, 155, 167, 168, 172, 173, 176, 179, 181, 181, 185, 186, 198, 199, 203, 205, 222, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 54, 76, 101, 108, 119, 120, 123, 125, 68, 85, 87, 103, 107, 112, 115, 116, 78, 85, 85, 101, 105, 105, 110, 111, 83, 91, 97, 97, 97, 100, 101, 105, 92, 93, 93, 95, 96, 98, 99, 103 }; const SKP_int SKP_Silk_NLSF_MSVQ_CB1_10_ndelta_min_Q15[ 10 + 1 ] = { 462, 3, 64, 74, 98, 50, 97, 68, 120, 53, 639 }; const SKP_int16 SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 * NLSF_MSVQ_CB1_10_VECTORS ] = { 1877, 4646, 7712, 10745, 13964, 17028, 20239, 23182, 26471, 29287, 1612, 3278, 7086, 9975, 13228, 16264, 19596, 22690, 26037, 28965, 2169, 3830, 6460, 8958, 11960, 14750, 18408, 21659, 25018, 28043, 3680, 6024, 8986, 12256, 15201, 18188, 21741, 24460, 27484, 30059, 2584, 5187, 7799, 10902, 13179, 15765, 19017, 22431, 25891, 28698, 3731, 5751, 8650, 11742, 15090, 17407, 20391, 23421, 26228, 29247, 2107, 6323, 8915, 12226, 14775, 17791, 20664, 23679, 26829, 29353, 1677, 2870, 5386, 8077, 11817, 15176, 18657, 22006, 25513, 28689, 2111, 3625, 7027, 10588, 14059, 17193, 21137, 24260, 27577, 30036, 2428, 4010, 5765, 9376, 13805, 15821, 19444, 22389, 25295, 29310, 2256, 4628, 8377, 12441, 15283, 19462, 22257, 25551, 28432, 30304, 2352, 3675, 6129, 11868, 14551, 16655, 19624, 21883, 26526, 28849, 5243, 7248, 10558, 13269, 15651, 17919, 21141, 23827, 27102, 29519, 4422, 6725, 10449, 13273, 16124, 19921, 22826, 26061, 28763, 30583, 4508, 6291, 9504, 11809, 13827, 15950, 19077, 22084, 25740, 28658, 2540, 4297, 8579, 13578, 16634, 19101, 21547, 23887, 26777, 29146, 3377, 6358, 10224, 14518, 17905, 21056, 23637, 25784, 28161, 30109, 4177, 5942, 8159, 10108, 12130, 15470, 20191, 23326, 26782, 29359, 2492, 3801, 6144, 9825, 16000, 18671, 20893, 23663, 25899, 28974, 3011, 4727, 6834, 10505, 12465, 14496, 17065, 20052, 25265, 28057, 4149, 7197, 12338, 15076, 18002, 20190, 22187, 24723, 27083, 29125, 2975, 4578, 6448, 8378, 9671, 13225, 19502, 22277, 26058, 28850, 4102, 5760, 7744, 9484, 10744, 12308, 14677, 19607, 24841, 28381, 4931, 9287, 12477, 13395, 13712, 14351, 16048, 19867, 24188, 28994, 4141, 7867, 13140, 17720, 20064, 21108, 21692, 22722, 23736, 27449, 4011, 8720, 13234, 16206, 17601, 18289, 18524, 19689, 23234, 27882, 3420, 5995, 11230, 15117, 15907, 16783, 17762, 23347, 26898, 29946, 3080, 6786, 10465, 13676, 18059, 23615, 27058, 29082, 29563, 29905, 3038, 5620, 9266, 12870, 18803, 19610, 20010, 20802, 23882, 29306, 3314, 6420, 9046, 13262, 15869, 23117, 23667, 24215, 24487, 25915, 3469, 6963, 10103, 15282, 20531, 23240, 25024, 26021, 26736, 27255, 3041, 6459, 9777, 12896, 16315, 19410, 24070, 29353, 31795, 32075, -200, -134, -113, -204, -347, -440, -352, -211, -418, -172, -313, 59, 495, 772, 721, 614, 334, 444, 225, 242, 161, 16, 274, 564, -73, -188, -395, -171, 777, 508, 1340, 1145, 699, 196, 223, 173, 90, 25, -26, 18, 133, -105, -360, -277, 859, 634, 41, -557, -768, -926, -601, -1021, -1189, -365, 225, 107, 374, -50, 433, 417, 156, 39, -597, -1397, -1594, -592, -485, -292, 253, 87, -0, -6, -25, -345, -240, 120, 1261, 946, 166, -277, 241, 167, 170, 429, 518, 714, 602, 254, 134, 92, -152, -324, -394, 49, -151, -304, -724, -657, -162, -369, -35, 3, -2, -312, -200, -92, -227, 242, 628, 565, -124, 1056, 770, 101, -84, -33, 4, -192, -272, 5, -627, -977, 419, 472, 53, -103, 145, 322, -95, -31, -100, -303, -560, -1067, -413, 714, 283, 2, -223, -367, 523, 360, -38, -115, 378, -591, -718, 448, -481, -274, 180, -88, -581, -157, -696, -1265, 394, -479, -23, 124, -43, 19, -113, -236, -412, -659, -200, 2, -69, -342, 199, 55, 58, -36, -51, -62, 507, 507, 427, 442, 36, 601, -141, 68, 274, 274, 68, -12, -4, 71, -193, -464, -425, -383, 408, 203, -337, 236, 410, -59, -25, -341, -449, 28, -9, 90, 332, -14, -905, 96, -540, -242, 679, -59, 192, -24, 60, -217, 5, -37, 179, -20, 311, 519, 274, 72, -326, -1030, -262, 213, 380, 82, 328, 411, -540, 574, -283, 151, 181, -402, -278, -240, -110, -227, -264, -89, -250, -259, -27, 106, -239, -98, -390, 118, 61, 104, 294, 532, 92, -13, 60, -233, 335, 541, 307, -26, -110, -91, -231, -460, 170, 201, 96, -372, 132, 435, -302, 216, -279, -41, 74, 190, 368, 273, -186, -608, -157, 159, 12, 278, 245, 307, 25, -187, -16, 55, 30, -163, 548, -307, 106, -5, 27, 330, -416, 475, 438, -235, 104, 137, 21, -5, -300, -468, 521, -347, 170, -200, -219, 308, -122, -133, 219, -16, 359, 412, -89, -111, 48, 322, 142, 177, -286, -127, -39, -63, -42, -451, 160, 308, -57, 193, -48, 74, -346, 59, -27, 27, -469, -277, -344, 282, 262, 122, 171, -249, 27, 258, 188, -3, 67, -206, -284, 291, -117, -88, -477, 375, 50, 106, 99, -182, 438, -376, -401, -49, 119, -23, -10, -48, -116, -200, -310, 121, 73, 7, 237, -226, 139, -456, 397, 35, 3, -108, 323, -75, 332, 198, -99, -21 }; const SKP_Silk_NLSF_CBS SKP_Silk_NLSF_CB1_10_Stage_info[ NLSF_MSVQ_CB1_10_STAGES ] = { { 32, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 * 0 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[ 0 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 * 32 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[ 32 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 * 40 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[ 40 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 * 48 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[ 48 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 * 56 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[ 56 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 * 64 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[ 64 ] } }; const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB1_10 = { NLSF_MSVQ_CB1_10_STAGES, SKP_Silk_NLSF_CB1_10_Stage_info, SKP_Silk_NLSF_MSVQ_CB1_10_ndelta_min_Q15, SKP_Silk_NLSF_MSVQ_CB1_10_CDF, SKP_Silk_NLSF_MSVQ_CB1_10_CDF_start_ptr, SKP_Silk_NLSF_MSVQ_CB1_10_CDF_middle_idx }; h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_NSQ.c0000644000175000017500000006001111513063445020351 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main.h" SKP_INLINE void SKP_Silk_nsq_scale_states( SKP_Silk_nsq_state *NSQ, /* I/O NSQ state */ const SKP_int16 x[], /* I input in Q0 */ SKP_int32 x_sc_Q10[], /* O input scaled with 1/Gain */ SKP_int length, /* I length of input */ SKP_int16 sLTP[], /* I re-whitened LTP state in Q0 */ SKP_int32 sLTP_Q16[], /* O LTP state matching scaled input */ SKP_int subfr, /* I subframe number */ const SKP_int LTP_scale_Q14, /* I */ const SKP_int32 Gains_Q16[ NB_SUBFR ], /* I */ const SKP_int pitchL[ NB_SUBFR ] /* I */ ); SKP_INLINE void SKP_Silk_noise_shape_quantizer( SKP_Silk_nsq_state *NSQ, /* I/O NSQ state */ SKP_int sigtype, /* I Signal type */ const SKP_int32 x_sc_Q10[], /* I */ SKP_int q[], /* O */ SKP_int16 xq[], /* O */ SKP_int32 sLTP_Q16[], /* I/O LTP state */ const SKP_int16 a_Q12[], /* I Short term prediction coefs */ const SKP_int16 b_Q14[], /* I Long term prediction coefs */ const SKP_int16 AR_shp_Q13[], /* I Noise shaping AR coefs */ SKP_int lag, /* I Pitch lag */ SKP_int32 HarmShapeFIRPacked_Q14, /* I */ SKP_int Tilt_Q14, /* I Spectral tilt */ SKP_int32 LF_shp_Q14, /* I */ SKP_int32 Gain_Q16, /* I */ SKP_int Lambda_Q10, /* I */ SKP_int offset_Q10, /* I */ SKP_int length, /* I Input length */ SKP_int shapingLPCOrder, /* I Noise shaping AR filter order */ SKP_int predictLPCOrder /* I Prediction filter order */ ); void SKP_Silk_NSQ( SKP_Silk_encoder_state *psEncC, /* I/O Encoder State */ SKP_Silk_encoder_control *psEncCtrlC, /* I Encoder Control */ SKP_Silk_nsq_state *NSQ, /* I/O NSQ state */ const SKP_int16 x[], /* I prefiltered input signal */ SKP_int q[], /* O quantized qulse signal */ const SKP_int LSFInterpFactor_Q2, /* I LSF interpolation factor in Q2 */ const SKP_int16 PredCoef_Q12[ 2 * MAX_LPC_ORDER ], /* I Short term prediction coefficients */ const SKP_int16 LTPCoef_Q14[ LTP_ORDER * NB_SUBFR ], /* I Long term prediction coefficients */ const SKP_int16 AR2_Q13[ NB_SUBFR * SHAPE_LPC_ORDER_MAX ], /* I */ const SKP_int HarmShapeGain_Q14[ NB_SUBFR ], /* I */ const SKP_int Tilt_Q14[ NB_SUBFR ], /* I Spectral tilt */ const SKP_int32 LF_shp_Q14[ NB_SUBFR ], /* I */ const SKP_int32 Gains_Q16[ NB_SUBFR ], /* I */ const SKP_int Lambda_Q10, /* I */ const SKP_int LTP_scale_Q14 /* I LTP state scaling */ ) { SKP_int k, lag, start_idx, subfr_length, LSF_interpolation_flag; const SKP_int16 *A_Q12, *B_Q14, *AR_shp_Q13; SKP_int16 *pxq; SKP_int32 sLTP_Q16[ 2 * MAX_FRAME_LENGTH ]; SKP_int16 sLTP[ 2 * MAX_FRAME_LENGTH ]; SKP_int32 HarmShapeFIRPacked_Q14; SKP_int offset_Q10; SKP_int32 FiltState[ MAX_LPC_ORDER ]; SKP_int32 x_sc_Q10[ MAX_FRAME_LENGTH / NB_SUBFR ]; subfr_length = psEncC->frame_length / NB_SUBFR; NSQ->rand_seed = psEncCtrlC->Seed; /* Set unvoiced lag to the previous one, overwrite later for voiced */ lag = NSQ->lagPrev; SKP_assert( NSQ->prev_inv_gain_Q16 != 0 ); offset_Q10 = SKP_Silk_Quantization_Offsets_Q10[ psEncCtrlC->sigtype ][ psEncCtrlC->QuantOffsetType ]; if( LSFInterpFactor_Q2 == ( 1 << 2 ) ) { LSF_interpolation_flag = 0; } else { LSF_interpolation_flag = 1; } /* Setup pointers to start of sub frame */ NSQ->sLTP_shp_buf_idx = psEncC->frame_length; NSQ->sLTP_buf_idx = psEncC->frame_length; pxq = &NSQ->xq[ psEncC->frame_length ]; for( k = 0; k < NB_SUBFR; k++ ) { A_Q12 = &PredCoef_Q12[ (( k >> 1 ) | ( 1 - LSF_interpolation_flag )) * MAX_LPC_ORDER ]; B_Q14 = <PCoef_Q14[ k * LTP_ORDER ]; AR_shp_Q13 = &AR2_Q13[ k * SHAPE_LPC_ORDER_MAX ]; /* Noise shape parameters */ SKP_assert( HarmShapeGain_Q14[ k ] >= 0 ); HarmShapeFIRPacked_Q14 = SKP_RSHIFT( HarmShapeGain_Q14[ k ], 2 ); HarmShapeFIRPacked_Q14 |= SKP_LSHIFT( ( SKP_int32 )SKP_RSHIFT( HarmShapeGain_Q14[ k ], 1 ), 16 ); if( psEncCtrlC->sigtype == SIG_TYPE_VOICED ) { /* Voiced */ lag = psEncCtrlC->pitchL[ k ]; NSQ->rewhite_flag = 0; /* Re-whitening */ if( ( k & ( 3 - SKP_LSHIFT( LSF_interpolation_flag, 1 ) ) ) == 0 ) { /* Rewhiten with new A coefs */ start_idx = psEncC->frame_length - lag - psEncC->predictLPCOrder - LTP_ORDER / 2; start_idx = SKP_LIMIT( start_idx, 0, psEncC->frame_length - psEncC->predictLPCOrder ); /* Limit */ SKP_memset( FiltState, 0, psEncC->predictLPCOrder * sizeof( SKP_int32 ) ); SKP_Silk_MA_Prediction( &NSQ->xq[ start_idx + k * ( psEncC->frame_length >> 2 ) ], A_Q12, FiltState, sLTP + start_idx, psEncC->frame_length - start_idx, psEncC->predictLPCOrder ); NSQ->rewhite_flag = 1; NSQ->sLTP_buf_idx = psEncC->frame_length; } } SKP_Silk_nsq_scale_states( NSQ, x, x_sc_Q10, psEncC->subfr_length, sLTP, sLTP_Q16, k, LTP_scale_Q14, Gains_Q16, psEncCtrlC->pitchL ); SKP_Silk_noise_shape_quantizer( NSQ, psEncCtrlC->sigtype, x_sc_Q10, q, pxq, sLTP_Q16, A_Q12, B_Q14, AR_shp_Q13, lag, HarmShapeFIRPacked_Q14, Tilt_Q14[ k ], LF_shp_Q14[ k ], Gains_Q16[ k ], Lambda_Q10, offset_Q10, psEncC->subfr_length, psEncC->shapingLPCOrder, psEncC->predictLPCOrder ); x += psEncC->subfr_length; q += psEncC->subfr_length; pxq += psEncC->subfr_length; } /* Save scalars for this layer */ NSQ->sLF_AR_shp_Q12 = NSQ->sLF_AR_shp_Q12; NSQ->prev_inv_gain_Q16 = NSQ->prev_inv_gain_Q16; NSQ->lagPrev = psEncCtrlC->pitchL[ NB_SUBFR - 1 ]; /* Save quantized speech and noise shaping signals */ SKP_memcpy( NSQ->xq, &NSQ->xq[ psEncC->frame_length ], psEncC->frame_length * sizeof( SKP_int16 ) ); SKP_memcpy( NSQ->sLTP_shp_Q10, &NSQ->sLTP_shp_Q10[ psEncC->frame_length ], psEncC->frame_length * sizeof( SKP_int32 ) ); } /***********************************/ /* SKP_Silk_noise_shape_quantizer */ /***********************************/ SKP_INLINE void SKP_Silk_noise_shape_quantizer( SKP_Silk_nsq_state *NSQ, /* I/O NSQ state */ SKP_int sigtype, /* I Signal type */ const SKP_int32 x_sc_Q10[], /* I */ SKP_int q[], /* O */ SKP_int16 xq[], /* O */ SKP_int32 sLTP_Q16[], /* I/O LTP state */ const SKP_int16 a_Q12[], /* I Short term prediction coefs */ const SKP_int16 b_Q14[], /* I Long term prediction coefs */ const SKP_int16 AR_shp_Q13[], /* I Noise shaping AR coefs */ SKP_int lag, /* I Pitch lag */ SKP_int32 HarmShapeFIRPacked_Q14, /* I */ SKP_int Tilt_Q14, /* I Spectral tilt */ SKP_int32 LF_shp_Q14, /* I */ SKP_int32 Gain_Q16, /* I */ SKP_int Lambda_Q10, /* I */ SKP_int offset_Q10, /* I */ SKP_int length, /* I Input length */ SKP_int shapingLPCOrder, /* I Noise shaping AR filter order */ SKP_int predictLPCOrder /* I Prediction filter order */ ) { SKP_int i, j; SKP_int32 LTP_pred_Q14, LPC_pred_Q10, n_AR_Q10, n_LTP_Q14; SKP_int32 n_LF_Q10, r_Q10, q_Q0, q_Q10; SKP_int32 thr1_Q10, thr2_Q10, thr3_Q10; SKP_int32 Atmp, dither; SKP_int32 exc_Q10, LPC_exc_Q10, xq_Q10; SKP_int32 tmp, sLF_AR_shp_Q10; SKP_int32 *psLPC_Q14; SKP_int32 *shp_lag_ptr, *pred_lag_ptr; SKP_int32 a_Q12_tmp[ MAX_LPC_ORDER / 2 ], AR_shp_Q13_tmp[ MAX_LPC_ORDER / 2 ]; shp_lag_ptr = &NSQ->sLTP_shp_Q10[ NSQ->sLTP_shp_buf_idx - lag + HARM_SHAPE_FIR_TAPS / 2 ]; pred_lag_ptr = &sLTP_Q16[ NSQ->sLTP_buf_idx - lag + LTP_ORDER / 2 ]; /* Setup short term AR state */ psLPC_Q14 = &NSQ->sLPC_Q14[ MAX_LPC_ORDER - 1 ]; /* Quantization thresholds */ thr1_Q10 = SKP_SUB_RSHIFT32( -1536, Lambda_Q10, 1); thr2_Q10 = SKP_SUB_RSHIFT32( -512, Lambda_Q10, 1); thr2_Q10 = SKP_ADD_RSHIFT32( thr2_Q10, SKP_SMULBB( offset_Q10, Lambda_Q10 ), 10 ); thr3_Q10 = SKP_ADD_RSHIFT32( 512, Lambda_Q10, 1); /* Preload LPC coeficients to array on stack. Gives small performance gain */ SKP_memcpy( a_Q12_tmp, a_Q12, predictLPCOrder * sizeof( SKP_int16 ) ); SKP_memcpy( AR_shp_Q13_tmp, AR_shp_Q13, shapingLPCOrder * sizeof( SKP_int16 ) ); for( i = 0; i < length; i++ ) { /* Generate dither */ NSQ->rand_seed = SKP_RAND( NSQ->rand_seed ); /* dither = rand_seed < 0 ? 0xFFFFFFFF : 0; */ dither = SKP_RSHIFT( NSQ->rand_seed, 31 ); /* Short-term prediction */ SKP_assert( ( predictLPCOrder & 1 ) == 0 ); /* check that order is even */ SKP_assert( ( (SKP_int64)a_Q12 & 3 ) == 0 ); /* check that array starts at 4-byte aligned address */ SKP_assert( predictLPCOrder >= 10 ); /* check that unrolling works */ /* NOTE: the code below loads two int16 values in an int32, and multiplies each using the */ /* SMLAWB and SMLAWT instructions. On a big-endian CPU the two int16 variables would be */ /* loaded in reverse order and the code will give the wrong result. In that case swapping */ /* the SMLAWB and SMLAWT instructions should solve the problem. */ /* Partially unrolled */ Atmp = a_Q12_tmp[ 0 ]; /* read two coefficients at once */ LPC_pred_Q10 = SKP_SMULWB( psLPC_Q14[ 0 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -1 ], Atmp ); Atmp = a_Q12_tmp[ 1 ]; LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -2 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -3 ], Atmp ); Atmp = a_Q12_tmp[ 2 ]; LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -4 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -5 ], Atmp ); Atmp = a_Q12_tmp[ 3 ]; LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -6 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -7 ], Atmp ); Atmp = a_Q12_tmp[ 4 ]; LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -8 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -9 ], Atmp ); for( j = 10; j < predictLPCOrder; j += 2 ) { Atmp = a_Q12_tmp[ j >> 1 ]; /* read two coefficients at once */ LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -j ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -j - 1 ], Atmp ); } /* Long-term prediction */ if( sigtype == SIG_TYPE_VOICED ) { /* Unrolled loop */ LTP_pred_Q14 = SKP_SMULWB( pred_lag_ptr[ 0 ], b_Q14[ 0 ] ); LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -1 ], b_Q14[ 1 ] ); LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -2 ], b_Q14[ 2 ] ); LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -3 ], b_Q14[ 3 ] ); LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -4 ], b_Q14[ 4 ] ); pred_lag_ptr++; } else { LTP_pred_Q14 = 0; } /* Noise shape feedback */ SKP_assert( ( shapingLPCOrder & 1 ) == 0 ); /* check that order is even */ SKP_assert( ( (SKP_int64)AR_shp_Q13 & 3 ) == 0 ); /* check that array starts at 4-byte aligned address */ SKP_assert( shapingLPCOrder >= 12 ); /* check that unrolling works */ /* Partially unrolled */ Atmp = AR_shp_Q13_tmp[ 0 ]; /* read two coefficients at once */ n_AR_Q10 = SKP_SMULWB( psLPC_Q14[ 0 ], Atmp ); n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -1 ], Atmp ); Atmp = AR_shp_Q13_tmp[ 1 ]; n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -2 ], Atmp ); n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -3 ], Atmp ); Atmp = AR_shp_Q13_tmp[ 2 ]; n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -4 ], Atmp ); n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -5 ], Atmp ); Atmp = AR_shp_Q13_tmp[ 3 ]; n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -6 ], Atmp ); n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -7 ], Atmp ); Atmp = AR_shp_Q13_tmp[ 4 ]; n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -8 ], Atmp ); n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -9 ], Atmp ); Atmp = AR_shp_Q13_tmp[ 5 ]; n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -10 ], Atmp ); n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -11 ], Atmp ); for( j = 12; j < shapingLPCOrder; j += 2 ) { Atmp = AR_shp_Q13_tmp[ j >> 1 ]; /* read two coefficients at once */ n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -j ], Atmp ); n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -j - 1 ], Atmp ); } n_AR_Q10 = SKP_RSHIFT( n_AR_Q10, 1 ); /* Q11 -> Q10 */ n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, NSQ->sLF_AR_shp_Q12, Tilt_Q14 ); n_LF_Q10 = SKP_LSHIFT( SKP_SMULWB( NSQ->sLTP_shp_Q10[ NSQ->sLTP_shp_buf_idx - 1 ], LF_shp_Q14 ), 2 ); n_LF_Q10 = SKP_SMLAWT( n_LF_Q10, NSQ->sLF_AR_shp_Q12, LF_shp_Q14 ); SKP_assert( lag > 0 || sigtype == SIG_TYPE_UNVOICED); /* Long-term shaping */ if( lag > 0 ) { /* Symmetric, packed FIR coefficients */ n_LTP_Q14 = SKP_SMULWB( SKP_ADD32( shp_lag_ptr[ 0 ], shp_lag_ptr[ -2 ] ), HarmShapeFIRPacked_Q14 ); n_LTP_Q14 = SKP_SMLAWT( n_LTP_Q14, shp_lag_ptr[ -1 ], HarmShapeFIRPacked_Q14 ); shp_lag_ptr++; n_LTP_Q14 = SKP_LSHIFT( n_LTP_Q14, 6 ); } else { n_LTP_Q14 = 0; } /* Input minus prediction plus noise feedback */ //r = x[ i ] - LTP_pred - LPC_pred + n_AR + n_Tilt + n_LF + n_LTP; tmp = SKP_SUB32( LTP_pred_Q14, n_LTP_Q14 ); /* Add Q14 stuff */ tmp = SKP_RSHIFT_ROUND( tmp, 4 ); /* round to Q10 */ tmp = SKP_ADD32( tmp, LPC_pred_Q10 ); /* add Q10 stuff */ tmp = SKP_SUB32( tmp, n_AR_Q10 ); /* subtract Q10 stuff */ tmp = SKP_SUB32( tmp, n_LF_Q10 ); /* subtract Q10 stuff */ r_Q10 = SKP_SUB32( x_sc_Q10[ i ], tmp ); /* Flip sign depending on dither */ r_Q10 = ( r_Q10 ^ dither ) - dither; r_Q10 = SKP_SUB32( r_Q10, offset_Q10 ); r_Q10 = SKP_LIMIT( r_Q10, -64 << 10, 64 << 10 ); /* Quantize */ if( r_Q10 < thr1_Q10 ) { q_Q0 = SKP_RSHIFT_ROUND( SKP_ADD_RSHIFT32( r_Q10, Lambda_Q10, 1 ), 10 ); q_Q10 = SKP_LSHIFT( q_Q0, 10 ); } else if( r_Q10 < thr2_Q10 ) { q_Q0 = -1; q_Q10 = -1024; } else if( r_Q10 > thr3_Q10 ) { q_Q0 = SKP_RSHIFT_ROUND( SKP_SUB_RSHIFT32( r_Q10, Lambda_Q10, 1 ), 10 ); q_Q10 = SKP_LSHIFT( q_Q0, 10 ); } else { q_Q0 = 0; q_Q10 = 0; } q[ i ] = q_Q0; /* Excitation */ exc_Q10 = SKP_ADD32( q_Q10, offset_Q10 ); exc_Q10 = ( exc_Q10 ^ dither ) - dither; /* Add predictions */ LPC_exc_Q10 = SKP_ADD32( exc_Q10, SKP_RSHIFT_ROUND( LTP_pred_Q14, 4 ) ); xq_Q10 = SKP_ADD32( LPC_exc_Q10, LPC_pred_Q10 ); /* Scale XQ back to normal level before saving */ xq[ i ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( SKP_SMULWW( xq_Q10, Gain_Q16 ), 10 ) ); /* Update states */ psLPC_Q14++; *psLPC_Q14 = SKP_LSHIFT( xq_Q10, 4 ); sLF_AR_shp_Q10 = SKP_SUB32( xq_Q10, n_AR_Q10 ); NSQ->sLF_AR_shp_Q12 = SKP_LSHIFT( sLF_AR_shp_Q10, 2 ); NSQ->sLTP_shp_Q10[ NSQ->sLTP_shp_buf_idx ] = SKP_SUB32( sLF_AR_shp_Q10, n_LF_Q10 ); sLTP_Q16[NSQ->sLTP_buf_idx] = SKP_LSHIFT( LPC_exc_Q10, 6 ); NSQ->sLTP_shp_buf_idx++; NSQ->sLTP_buf_idx++; /* Make dither dependent on quantized signal */ NSQ->rand_seed += q[ i ]; } /* Update LPC synth buffer */ SKP_memcpy( NSQ->sLPC_Q14, &NSQ->sLPC_Q14[ length ], MAX_LPC_ORDER * sizeof( SKP_int32 ) ); } SKP_INLINE void SKP_Silk_nsq_scale_states( SKP_Silk_nsq_state *NSQ, /* I/O NSQ state */ const SKP_int16 x[], /* I input in Q0 */ SKP_int32 x_sc_Q10[], /* O input scaled with 1/Gain */ SKP_int length, /* I length of input */ SKP_int16 sLTP[], /* I re-whitened LTP state in Q0 */ SKP_int32 sLTP_Q16[], /* O LTP state matching scaled input */ SKP_int subfr, /* I subframe number */ const SKP_int LTP_scale_Q14, /* I */ const SKP_int32 Gains_Q16[ NB_SUBFR ], /* I */ const SKP_int pitchL[ NB_SUBFR ] /* I */ ) { SKP_int i, scale_length, lag; SKP_int32 inv_gain_Q16, gain_adj_Q16, inv_gain_Q32; inv_gain_Q16 = SKP_DIV32( SKP_int32_MAX, SKP_RSHIFT( Gains_Q16[ subfr ], 1) ); inv_gain_Q16 = SKP_min( inv_gain_Q16, SKP_int16_MAX ); lag = pitchL[ subfr ]; /* After rewhitening the LTP state is un-scaled */ if( NSQ->rewhite_flag ) { inv_gain_Q32 = SKP_LSHIFT( inv_gain_Q16, 16 ); if( subfr == 0 ) { /* Do LTP downscaling */ inv_gain_Q32 = SKP_LSHIFT( SKP_SMULWB( inv_gain_Q32, LTP_scale_Q14 ), 2 ); } for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx; i++ ) { sLTP_Q16[ i ] = SKP_SMULWB( inv_gain_Q32, sLTP[ i ] ); } } /* Prepare for Worst case. Next frame starts with max lag voiced */ scale_length = length * NB_SUBFR; /* approx max lag */ scale_length = scale_length - SKP_SMULBB( NB_SUBFR - (subfr + 1), length ); /* subtract samples that will be too old in next frame */ scale_length = SKP_max_int( scale_length, lag + LTP_ORDER ); /* make sure to scale whole pitch period if voiced */ /* Adjust for changing gain */ if( inv_gain_Q16 != NSQ->prev_inv_gain_Q16 ) { gain_adj_Q16 = SKP_DIV32_varQ( inv_gain_Q16, NSQ->prev_inv_gain_Q16, 16 ); for( i = NSQ->sLTP_shp_buf_idx - scale_length; i < NSQ->sLTP_shp_buf_idx; i++ ) { NSQ->sLTP_shp_Q10[ i ] = SKP_SMULWW( gain_adj_Q16, NSQ->sLTP_shp_Q10[ i ] ); } /* Scale LTP predict state */ if( NSQ->rewhite_flag == 0 ) { for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx; i++ ) { sLTP_Q16[ i ] = SKP_SMULWW( gain_adj_Q16, sLTP_Q16[ i ] ); } } NSQ->sLF_AR_shp_Q12 = SKP_SMULWW( gain_adj_Q16, NSQ->sLF_AR_shp_Q12 ); /* scale short term state */ for( i = 0; i < MAX_LPC_ORDER; i++ ) { NSQ->sLPC_Q14[ i ] = SKP_SMULWW( gain_adj_Q16, NSQ->sLPC_Q14[ i ] ); } } /* Scale input */ for( i = 0; i < length; i++ ) { x_sc_Q10[ i ] = SKP_RSHIFT( SKP_SMULBB( x[ i ], ( SKP_int16 )inv_gain_Q16 ), 6 ); } /* save inv_gain */ SKP_assert( inv_gain_Q16 != 0 ); NSQ->prev_inv_gain_Q16 = inv_gain_Q16; } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_CNG.c0000644000175000017500000001532711513063445020331 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" /* Generates excitation for CNG LPC synthesis */ SKP_INLINE void SKP_Silk_CNG_exc( SKP_int16 residual[], /* O CNG residual signal Q0 */ SKP_int32 exc_buf_Q10[], /* I Random samples buffer Q10 */ SKP_int32 Gain_Q16, /* I Gain to apply */ SKP_int length, /* I Length */ SKP_int32 *rand_seed /* I/O Seed to random index generator */ ) { SKP_int32 seed; SKP_int i, idx, exc_mask; exc_mask = CNG_BUF_MASK_MAX; while( exc_mask > length ) { exc_mask = SKP_RSHIFT( exc_mask, 1 ); } seed = *rand_seed; for( i = 0; i < length; i++ ) { seed = SKP_RAND( seed ); idx = ( SKP_int )( SKP_RSHIFT( seed, 24 ) & exc_mask ); SKP_assert( idx >= 0 ); SKP_assert( idx <= CNG_BUF_MASK_MAX ); residual[ i ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( SKP_SMULWW( exc_buf_Q10[ idx ], Gain_Q16 ), 10 ) ); } *rand_seed = seed; } void SKP_Silk_CNG_Reset( SKP_Silk_decoder_state *psDec /* I/O Decoder state */ ) { SKP_int i, NLSF_step_Q15, NLSF_acc_Q15; NLSF_step_Q15 = SKP_DIV32_16( SKP_int16_MAX, psDec->LPC_order + 1 ); NLSF_acc_Q15 = 0; for( i = 0; i < psDec->LPC_order; i++ ) { NLSF_acc_Q15 += NLSF_step_Q15; psDec->sCNG.CNG_smth_NLSF_Q15[ i ] = NLSF_acc_Q15; } psDec->sCNG.CNG_smth_Gain_Q16 = 0; psDec->sCNG.rand_seed = 3176576; } /* Updates CNG estimate, and applies the CNG when packet was lost */ void SKP_Silk_CNG( SKP_Silk_decoder_state *psDec, /* I/O Decoder state */ SKP_Silk_decoder_control *psDecCtrl, /* I/O Decoder control */ SKP_int16 signal[], /* I/O Signal */ SKP_int length /* I Length of residual */ ) { SKP_int i, subfr; SKP_int32 tmp_32, Gain_Q26, max_Gain_Q16; SKP_int16 LPC_buf[ MAX_LPC_ORDER ]; SKP_int16 CNG_sig[ MAX_FRAME_LENGTH ]; SKP_Silk_CNG_struct *psCNG; psCNG = &psDec->sCNG; if( psDec->fs_kHz != psCNG->fs_kHz ) { /* Reset state */ SKP_Silk_CNG_Reset( psDec ); psCNG->fs_kHz = psDec->fs_kHz; } if( psDec->lossCnt == 0 && psDec->vadFlag == NO_VOICE_ACTIVITY ) { /* Update CNG parameters */ /* Smoothing of LSF's */ for( i = 0; i < psDec->LPC_order; i++ ) { psCNG->CNG_smth_NLSF_Q15[ i ] += SKP_SMULWB( psDec->prevNLSF_Q15[ i ] - psCNG->CNG_smth_NLSF_Q15[ i ], CNG_NLSF_SMTH_Q16 ); } /* Find the subframe with the highest gain */ max_Gain_Q16 = 0; subfr = 0; for( i = 0; i < NB_SUBFR; i++ ) { if( psDecCtrl->Gains_Q16[ i ] > max_Gain_Q16 ) { max_Gain_Q16 = psDecCtrl->Gains_Q16[ i ]; subfr = i; } } /* Update CNG excitation buffer with excitation from this subframe */ SKP_memmove( &psCNG->CNG_exc_buf_Q10[ psDec->subfr_length ], psCNG->CNG_exc_buf_Q10, ( NB_SUBFR - 1 ) * psDec->subfr_length * sizeof( SKP_int32 ) ); SKP_memcpy( psCNG->CNG_exc_buf_Q10, &psDec->exc_Q10[ subfr * psDec->subfr_length ], psDec->subfr_length * sizeof( SKP_int32 ) ); /* Smooth gains */ for( i = 0; i < NB_SUBFR; i++ ) { psCNG->CNG_smth_Gain_Q16 += SKP_SMULWB( psDecCtrl->Gains_Q16[ i ] - psCNG->CNG_smth_Gain_Q16, CNG_GAIN_SMTH_Q16 ); } } /* Add CNG when packet is lost and / or when low speech activity */ if( psDec->lossCnt ) {//|| psDec->vadFlag == NO_VOICE_ACTIVITY ) { /* Generate CNG excitation */ SKP_Silk_CNG_exc( CNG_sig, psCNG->CNG_exc_buf_Q10, psCNG->CNG_smth_Gain_Q16, length, &psCNG->rand_seed ); /* Convert CNG NLSF to filter representation */ SKP_Silk_NLSF2A_stable( LPC_buf, psCNG->CNG_smth_NLSF_Q15, psDec->LPC_order ); Gain_Q26 = ( SKP_int32 )1 << 26; /* 1.0 */ /* Generate CNG signal, by synthesis filtering */ if( psDec->LPC_order == 16 ) { SKP_Silk_LPC_synthesis_order16( CNG_sig, LPC_buf, Gain_Q26, psCNG->CNG_synth_state, CNG_sig, length ); } else { SKP_Silk_LPC_synthesis_filter( CNG_sig, LPC_buf, Gain_Q26, psCNG->CNG_synth_state, CNG_sig, length, psDec->LPC_order ); } /* Mix with signal */ for( i = 0; i < length; i++ ) { tmp_32 = signal[ i ] + CNG_sig[ i ]; signal[ i ] = SKP_SAT16( tmp_32 ); } } else { SKP_memset( psCNG->CNG_synth_state, 0, psDec->LPC_order * sizeof( SKP_int32 ) ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_PLC.c0000644000175000017500000004353411513063445020341 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main.h" #include "SKP_Silk_PLC.h" #define NB_ATT 2 static const SKP_int16 HARM_ATT_Q15[NB_ATT] = { 32440, 31130 }; /* 0.99, 0.95 */ static const SKP_int16 PLC_RAND_ATTENUATE_V_Q15[NB_ATT] = { 31130, 26214 }; /* 0.95, 0.8 */ static const SKP_int16 PLC_RAND_ATTENUATE_UV_Q15[NB_ATT] = { 32440, 29491 }; /* 0.99, 0.9 */ void SKP_Silk_PLC_Reset( SKP_Silk_decoder_state *psDec /* I/O Decoder state */ ) { psDec->sPLC.pitchL_Q8 = SKP_RSHIFT( psDec->frame_length, 1 ); } void SKP_Silk_PLC( SKP_Silk_decoder_state *psDec, /* I Decoder state */ SKP_Silk_decoder_control *psDecCtrl, /* I Decoder control */ SKP_int16 signal[], /* O Concealed signal */ SKP_int length, /* I length of residual */ SKP_int lost /* I Loss flag */ ) { /* PLC control function */ if( psDec->fs_kHz != psDec->sPLC.fs_kHz ) { SKP_Silk_PLC_Reset( psDec ); psDec->sPLC.fs_kHz = psDec->fs_kHz; } if( lost ) { /****************************/ /* Generate Signal */ /****************************/ SKP_Silk_PLC_conceal( psDec, psDecCtrl, signal, length ); } else { /****************************/ /* Update state */ /****************************/ SKP_Silk_PLC_update( psDec, psDecCtrl, signal, length ); } } /**************************************************/ /* Update state of PLC */ /**************************************************/ void SKP_Silk_PLC_update( SKP_Silk_decoder_state *psDec, /* (I/O) Decoder state */ SKP_Silk_decoder_control *psDecCtrl, /* (I/O) Decoder control */ SKP_int16 signal[], SKP_int length ) { SKP_int32 LTP_Gain_Q14, temp_LTP_Gain_Q14; SKP_int i, j; SKP_Silk_PLC_struct *psPLC; psPLC = &psDec->sPLC; /* Update parameters used in case of packet loss */ psDec->prev_sigtype = psDecCtrl->sigtype; LTP_Gain_Q14 = 0; if( psDecCtrl->sigtype == SIG_TYPE_VOICED ) { /* Find the parameters for the last subframe which contains a pitch pulse */ for( j = 0; j * psDec->subfr_length < psDecCtrl->pitchL[ NB_SUBFR - 1 ]; j++ ) { temp_LTP_Gain_Q14 = 0; for( i = 0; i < LTP_ORDER; i++ ) { temp_LTP_Gain_Q14 += psDecCtrl->LTPCoef_Q14[ ( NB_SUBFR - 1 - j ) * LTP_ORDER + i ]; } if( temp_LTP_Gain_Q14 > LTP_Gain_Q14 ) { LTP_Gain_Q14 = temp_LTP_Gain_Q14; SKP_memcpy( psPLC->LTPCoef_Q14, &psDecCtrl->LTPCoef_Q14[ SKP_SMULBB( NB_SUBFR - 1 - j, LTP_ORDER ) ], LTP_ORDER * sizeof( SKP_int16 ) ); psPLC->pitchL_Q8 = SKP_LSHIFT( psDecCtrl->pitchL[ NB_SUBFR - 1 - j ], 8 ); } } #if USE_SINGLE_TAP SKP_memset( psPLC->LTPCoef_Q14, 0, LTP_ORDER * sizeof( SKP_int16 ) ); psPLC->LTPCoef_Q14[ LTP_ORDER / 2 ] = LTP_Gain_Q14; #endif /* Limit LT coefs */ if( LTP_Gain_Q14 < V_PITCH_GAIN_START_MIN_Q14 ) { SKP_int scale_Q10; SKP_int32 tmp; tmp = SKP_LSHIFT( V_PITCH_GAIN_START_MIN_Q14, 10 ); scale_Q10 = SKP_DIV32( tmp, SKP_max( LTP_Gain_Q14, 1 ) ); for( i = 0; i < LTP_ORDER; i++ ) { psPLC->LTPCoef_Q14[ i ] = SKP_RSHIFT( SKP_SMULBB( psPLC->LTPCoef_Q14[ i ], scale_Q10 ), 10 ); } } else if( LTP_Gain_Q14 > V_PITCH_GAIN_START_MAX_Q14 ) { SKP_int scale_Q14; SKP_int32 tmp; tmp = SKP_LSHIFT( V_PITCH_GAIN_START_MAX_Q14, 14 ); scale_Q14 = SKP_DIV32( tmp, SKP_max( LTP_Gain_Q14, 1 ) ); for( i = 0; i < LTP_ORDER; i++ ) { psPLC->LTPCoef_Q14[ i ] = SKP_RSHIFT( SKP_SMULBB( psPLC->LTPCoef_Q14[ i ], scale_Q14 ), 14 ); } } } else { psPLC->pitchL_Q8 = SKP_LSHIFT( SKP_SMULBB( psDec->fs_kHz, 18 ), 8 ); SKP_memset( psPLC->LTPCoef_Q14, 0, LTP_ORDER * sizeof( SKP_int16 )); } /* Save LPC coeficients */ SKP_memcpy( psPLC->prevLPC_Q12, psDecCtrl->PredCoef_Q12[ 1 ], psDec->LPC_order * sizeof( SKP_int16 ) ); psPLC->prevLTP_scale_Q14 = psDecCtrl->LTP_scale_Q14; /* Save Gains */ SKP_memcpy( psPLC->prevGain_Q16, psDecCtrl->Gains_Q16, NB_SUBFR * sizeof( SKP_int32 ) ); } void SKP_Silk_PLC_conceal( SKP_Silk_decoder_state *psDec, /* I/O Decoder state */ SKP_Silk_decoder_control *psDecCtrl, /* I/O Decoder control */ SKP_int16 signal[], /* O concealed signal */ SKP_int length /* I length of residual */ ) { SKP_int i, j, k; SKP_int16 *B_Q14, exc_buf[ MAX_FRAME_LENGTH ], *exc_buf_ptr; SKP_int16 rand_scale_Q14, A_Q12_tmp[ MAX_LPC_ORDER ]; SKP_int32 rand_seed, harm_Gain_Q15, rand_Gain_Q15; SKP_int lag, idx, shift1, shift2; SKP_int32 energy1, energy2, *rand_ptr, *pred_lag_ptr, Atmp; SKP_int32 sig_Q10[ MAX_FRAME_LENGTH ], *sig_Q10_ptr, LPC_exc_Q10, LPC_pred_Q10, LTP_pred_Q14; SKP_Silk_PLC_struct *psPLC; psPLC = &psDec->sPLC; /* Update LTP buffer */ SKP_memcpy( psDec->sLTP_Q16, &psDec->sLTP_Q16[ psDec->frame_length ], psDec->frame_length * sizeof( SKP_int32 ) ); /* LPC concealment. Apply BWE to previous LPC */ SKP_Silk_bwexpander( psPLC->prevLPC_Q12, psDec->LPC_order, BWE_COEF_Q16 ); /* Find random noise component */ /* Scale previous excitation signal */ exc_buf_ptr = exc_buf; for( k = ( NB_SUBFR >> 1 ); k < NB_SUBFR; k++ ) { for( i = 0; i < psDec->subfr_length; i++ ) { exc_buf_ptr[ i ] = ( SKP_int16 )SKP_RSHIFT( SKP_SMULWW( psDec->exc_Q10[ i + k * psDec->subfr_length ], psPLC->prevGain_Q16[ k ] ), 10 ); } exc_buf_ptr += psDec->subfr_length; } /* Find the subframe with lowest energy of the last two and use that as random noise generator */ SKP_Silk_sum_sqr_shift( &energy1, &shift1, exc_buf, psDec->subfr_length ); SKP_Silk_sum_sqr_shift( &energy2, &shift2, &exc_buf[ psDec->subfr_length ], psDec->subfr_length ); if( SKP_RSHIFT( energy1, shift2 ) < SKP_RSHIFT( energy1, shift2 ) ) { /* First sub-frame has lowest energy */ rand_ptr = &psDec->exc_Q10[ SKP_max_int( 0, 3 * psDec->subfr_length - RAND_BUF_SIZE ) ]; } else { /* Second sub-frame has lowest energy */ rand_ptr = &psDec->exc_Q10[ SKP_max_int( 0, psDec->frame_length - RAND_BUF_SIZE ) ]; } /* Setup Gain to random noise component */ B_Q14 = psPLC->LTPCoef_Q14; rand_scale_Q14 = psPLC->randScale_Q14; /* Setup attenuation gains */ harm_Gain_Q15 = HARM_ATT_Q15[ SKP_min_int( NB_ATT - 1, psDec->lossCnt ) ]; if( psDec->prev_sigtype == SIG_TYPE_VOICED ) { rand_Gain_Q15 = PLC_RAND_ATTENUATE_V_Q15[ SKP_min_int( NB_ATT - 1, psDec->lossCnt ) ]; } else { rand_Gain_Q15 = PLC_RAND_ATTENUATE_UV_Q15[ SKP_min_int( NB_ATT - 1, psDec->lossCnt ) ]; } /* First Lost frame */ if( psDec->lossCnt == 0 ) { rand_scale_Q14 = (1 << 14 ); /* Reduce random noise Gain for voiced frames */ if( psDec->prev_sigtype == SIG_TYPE_VOICED ) { for( i = 0; i < LTP_ORDER; i++ ) { rand_scale_Q14 -= B_Q14[ i ]; } rand_scale_Q14 = SKP_max_16( 3277, rand_scale_Q14 ); /* 0.2 */ rand_scale_Q14 = ( SKP_int16 )SKP_RSHIFT( SKP_SMULBB( rand_scale_Q14, psPLC->prevLTP_scale_Q14 ), 14 ); } /* Reduce random noise for unvoiced frames with high LPC gain */ if( psDec->prev_sigtype == SIG_TYPE_UNVOICED ) { SKP_int32 invGain_Q30, down_scale_Q30; SKP_Silk_LPC_inverse_pred_gain( &invGain_Q30, psPLC->prevLPC_Q12, psDec->LPC_order ); down_scale_Q30 = SKP_min_32( SKP_RSHIFT( ( 1 << 30 ), LOG2_INV_LPC_GAIN_HIGH_THRES ), invGain_Q30 ); down_scale_Q30 = SKP_max_32( SKP_RSHIFT( ( 1 << 30 ), LOG2_INV_LPC_GAIN_LOW_THRES ), down_scale_Q30 ); down_scale_Q30 = SKP_LSHIFT( down_scale_Q30, LOG2_INV_LPC_GAIN_HIGH_THRES ); rand_Gain_Q15 = SKP_RSHIFT( SKP_SMULWB( down_scale_Q30, rand_Gain_Q15 ), 14 ); } } rand_seed = psPLC->rand_seed; lag = SKP_RSHIFT_ROUND( psPLC->pitchL_Q8, 8 ); psDec->sLTP_buf_idx = psDec->frame_length; /***************************/ /* LTP synthesis filtering */ /***************************/ sig_Q10_ptr = sig_Q10; for( k = 0; k < NB_SUBFR; k++ ) { /* Setup pointer */ pred_lag_ptr = &psDec->sLTP_Q16[ psDec->sLTP_buf_idx - lag + LTP_ORDER / 2 ]; for( i = 0; i < psDec->subfr_length; i++ ) { rand_seed = SKP_RAND( rand_seed ); idx = SKP_RSHIFT( rand_seed, 25 ) & RAND_BUF_MASK; /* Unrolled loop */ LTP_pred_Q14 = SKP_SMULWB( pred_lag_ptr[ 0 ], B_Q14[ 0 ] ); LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -1 ], B_Q14[ 1 ] ); LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -2 ], B_Q14[ 2 ] ); LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -3 ], B_Q14[ 3 ] ); LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -4 ], B_Q14[ 4 ] ); pred_lag_ptr++; /* Generate LPC residual */ LPC_exc_Q10 = SKP_LSHIFT( SKP_SMULWB( rand_ptr[ idx ], rand_scale_Q14 ), 2 ); /* Random noise part */ LPC_exc_Q10 = SKP_ADD32( LPC_exc_Q10, SKP_RSHIFT_ROUND( LTP_pred_Q14, 4 ) ); /* Harmonic part */ /* Update states */ psDec->sLTP_Q16[ psDec->sLTP_buf_idx ] = SKP_LSHIFT( LPC_exc_Q10, 6 ); psDec->sLTP_buf_idx++; /* Save LPC residual */ sig_Q10_ptr[ i ] = LPC_exc_Q10; } sig_Q10_ptr += psDec->subfr_length; /* Gradually reduce LTP gain */ for( j = 0; j < LTP_ORDER; j++ ) { B_Q14[ j ] = SKP_RSHIFT( SKP_SMULBB( harm_Gain_Q15, B_Q14[ j ] ), 15 ); } /* Gradually reduce excitation gain */ rand_scale_Q14 = SKP_RSHIFT( SKP_SMULBB( rand_scale_Q14, rand_Gain_Q15 ), 15 ); /* Slowly increase pitch lag */ psPLC->pitchL_Q8 += SKP_SMULWB( psPLC->pitchL_Q8, PITCH_DRIFT_FAC_Q16 ); psPLC->pitchL_Q8 = SKP_min_32( psPLC->pitchL_Q8, SKP_LSHIFT( SKP_SMULBB( MAX_PITCH_LAG_MS, psDec->fs_kHz ), 8 ) ); lag = SKP_RSHIFT_ROUND( psPLC->pitchL_Q8, 8 ); } /***************************/ /* LPC synthesis filtering */ /***************************/ sig_Q10_ptr = sig_Q10; /* Preload LPC coeficients to array on stack. Gives small performance gain */ SKP_memcpy( A_Q12_tmp, psPLC->prevLPC_Q12, psDec->LPC_order * sizeof( SKP_int16 ) ); SKP_assert( psDec->LPC_order >= 10 ); /* check that unrolling works */ for( k = 0; k < NB_SUBFR; k++ ) { for( i = 0; i < psDec->subfr_length; i++ ){ /* unrolled */ Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 0 ] ); /* read two coefficients at once */ LPC_pred_Q10 = SKP_SMULWB( psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 1 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 2 ], Atmp ); Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 2 ] ); LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 3 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 4 ], Atmp ); Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 4 ] ); LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 5 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 6 ], Atmp ); Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 6 ] ); LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 7 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 8 ], Atmp ); Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 8 ] ); LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 9 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 10 ], Atmp ); for( j = 10 ; j < psDec->LPC_order ; j+=2 ) { Atmp = *( ( SKP_int32* )&A_Q12_tmp[ j ] ); LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 1 - j ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 2 - j ], Atmp ); } /* Add prediction to LPC residual */ sig_Q10_ptr[ i ] = SKP_ADD32( sig_Q10_ptr[ i ], LPC_pred_Q10 ); /* Update states */ psDec->sLPC_Q14[ MAX_LPC_ORDER + i ] = SKP_LSHIFT( sig_Q10_ptr[ i ], 4 ); } sig_Q10_ptr += psDec->subfr_length; /* Update LPC filter state */ SKP_memcpy( psDec->sLPC_Q14, &psDec->sLPC_Q14[ psDec->subfr_length ], MAX_LPC_ORDER * sizeof( SKP_int32 ) ); } /* Scale with Gain */ for( i = 0; i < psDec->frame_length; i++ ) { signal[ i ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( SKP_SMULWW( sig_Q10[ i ], psPLC->prevGain_Q16[ NB_SUBFR - 1 ] ), 10 ) ); } /**************************************/ /* Update states */ /**************************************/ psPLC->rand_seed = rand_seed; psPLC->randScale_Q14 = rand_scale_Q14; for( i = 0; i < NB_SUBFR; i++ ) { psDecCtrl->pitchL[ i ] = lag; } } /* Glues concealed frames with new good recieved frames */ void SKP_Silk_PLC_glue_frames( SKP_Silk_decoder_state *psDec, /* I/O decoder state */ SKP_Silk_decoder_control *psDecCtrl, /* I/O Decoder control */ SKP_int16 signal[], /* I/O signal */ SKP_int length /* I length of residual */ ) { SKP_int i, energy_shift; SKP_int32 energy; SKP_Silk_PLC_struct *psPLC; psPLC = &psDec->sPLC; if( psDec->lossCnt ) { /* Calculate energy in concealed residual */ SKP_Silk_sum_sqr_shift( &psPLC->conc_energy, &psPLC->conc_energy_shift, signal, length ); psPLC->last_frame_lost = 1; } else { if( psDec->sPLC.last_frame_lost ) { /* Calculate residual in decoded signal if last frame was lost */ SKP_Silk_sum_sqr_shift( &energy, &energy_shift, signal, length ); /* Normalize energies */ if( energy_shift > psPLC->conc_energy_shift ) { psPLC->conc_energy = SKP_RSHIFT( psPLC->conc_energy, energy_shift - psPLC->conc_energy_shift ); } else if( energy_shift < psPLC->conc_energy_shift ) { energy = SKP_RSHIFT( energy, psPLC->conc_energy_shift - energy_shift ); } /* Fade in the energy difference */ if( energy > psPLC->conc_energy ) { SKP_int32 frac_Q24, LZ; SKP_int32 gain_Q12, slope_Q12; LZ = SKP_Silk_CLZ32( psPLC->conc_energy ); LZ = LZ - 1; psPLC->conc_energy = SKP_LSHIFT( psPLC->conc_energy, LZ ); energy = SKP_RSHIFT( energy, SKP_max_32( 24 - LZ, 0 ) ); frac_Q24 = SKP_DIV32( psPLC->conc_energy, SKP_max( energy, 1 ) ); gain_Q12 = SKP_Silk_SQRT_APPROX( frac_Q24 ); slope_Q12 = SKP_DIV32_16( ( 1 << 12 ) - gain_Q12, length ); for( i = 0; i < length; i++ ) { signal[ i ] = SKP_RSHIFT( SKP_MUL( gain_Q12, signal[ i ] ), 12 ); gain_Q12 += slope_Q12; gain_Q12 = SKP_min( gain_Q12, ( 1 << 12 ) ); } } } psPLC->last_frame_lost = 0; } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_resample_2_3_coarse.c0000644000175000017500000001511311513063445023522 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * File Name: SKP_Silk_resample_2_3_coarse.c * * * * Description: Linear phase FIR polyphase implementation of resampling * * * * Copyright 2009 (c), Skype Limited * * All rights reserved. * * * * Date: 090423 * * */ #include "SKP_Silk_SigProc_FIX.h" #include "SKP_Silk_resample_rom.h" /* Resamples input data with a factor 2/3 */ void SKP_Silk_resample_2_3_coarse( SKP_int16 *out, /* O: Output signal */ SKP_int16 *S, /* I/O: Resampler state [ SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ] */ const SKP_int16 *in, /* I: Input signal */ const SKP_int frameLenIn, /* I: Number of input samples */ SKP_int16 *scratch /* I: Scratch memory [ frameLenIn + SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ] */ ) { SKP_int32 n, ind, interpol_ind, tmp, index_Q16; SKP_int16 *in_ptr; SKP_int frameLenOut; const SKP_int16 *interpol_ptr; /* Copy buffered samples to start of scratch */ SKP_memcpy( scratch, S, ( SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ) * sizeof( SKP_int16 ) ); /* Then append by the input signal */ SKP_memcpy( &scratch[ SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ], in, frameLenIn * sizeof( SKP_int16 ) ); frameLenOut = SKP_DIV32_16( SKP_MUL( 2, frameLenIn ), 3 ); index_Q16 = 0; SKP_assert( frameLenIn == ( ( frameLenOut * 3 ) / 2 ) ); /* Interpolate */ for( n = frameLenOut; n > 0; n-- ) { /* Integer part */ ind = SKP_RSHIFT( index_Q16, 16 ); /* Pointer to buffered input */ in_ptr = scratch + ind; /* Fractional part */ interpol_ind = ( SKP_SMULWB( index_Q16, SigProc_Resample_2_3_coarse_NUM_INTERPOLATORS ) & ( SigProc_Resample_2_3_coarse_NUM_INTERPOLATORS - 1 ) ); /* Pointer to FIR taps */ interpol_ptr = SigProc_Resample_2_3_coarse_INTERPOL[ interpol_ind ]; /* Interpolate */ /* Hardcoded for 32 FIR taps */ SKP_assert( SigProc_Resample_2_3_coarse_NUM_FIR_COEFS == 32 ); tmp = (SKP_int32)interpol_ptr[ 0 ] * in_ptr[ 0 ] + (SKP_int32)interpol_ptr[ 1 ] * in_ptr[ 1 ] + (SKP_int32)interpol_ptr[ 2 ] * in_ptr[ 2 ] + (SKP_int32)interpol_ptr[ 3 ] * in_ptr[ 3 ] + (SKP_int32)interpol_ptr[ 4 ] * in_ptr[ 4 ] + (SKP_int32)interpol_ptr[ 5 ] * in_ptr[ 5 ] + (SKP_int32)interpol_ptr[ 6 ] * in_ptr[ 6 ] + (SKP_int32)interpol_ptr[ 7 ] * in_ptr[ 7 ] + (SKP_int32)interpol_ptr[ 8 ] * in_ptr[ 8 ] + (SKP_int32)interpol_ptr[ 9 ] * in_ptr[ 9 ] + (SKP_int32)interpol_ptr[ 10 ] * in_ptr[ 10 ] + (SKP_int32)interpol_ptr[ 11 ] * in_ptr[ 11 ] + (SKP_int32)interpol_ptr[ 12 ] * in_ptr[ 12 ] + (SKP_int32)interpol_ptr[ 13 ] * in_ptr[ 13 ] + (SKP_int32)interpol_ptr[ 14 ] * in_ptr[ 14 ] + (SKP_int32)interpol_ptr[ 15 ] * in_ptr[ 15 ] + (SKP_int32)interpol_ptr[ 16 ] * in_ptr[ 16 ] + (SKP_int32)interpol_ptr[ 17 ] * in_ptr[ 17 ] + (SKP_int32)interpol_ptr[ 18 ] * in_ptr[ 18 ] + (SKP_int32)interpol_ptr[ 19 ] * in_ptr[ 19 ] + (SKP_int32)interpol_ptr[ 20 ] * in_ptr[ 20 ] + (SKP_int32)interpol_ptr[ 21 ] * in_ptr[ 21 ] + (SKP_int32)interpol_ptr[ 22 ] * in_ptr[ 22 ] + (SKP_int32)interpol_ptr[ 23 ] * in_ptr[ 23 ] + (SKP_int32)interpol_ptr[ 24 ] * in_ptr[ 24 ] + (SKP_int32)interpol_ptr[ 25 ] * in_ptr[ 25 ] + (SKP_int32)interpol_ptr[ 26 ] * in_ptr[ 26 ] + (SKP_int32)interpol_ptr[ 27 ] * in_ptr[ 27 ] + (SKP_int32)interpol_ptr[ 28 ] * in_ptr[ 28 ] + (SKP_int32)interpol_ptr[ 29 ] * in_ptr[ 29 ]; /* Round, saturate and store to output array */ *out++ = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( tmp, 15 ) ); /* Update index */ index_Q16 += ( ( 1 << 16 ) + ( 1 << 15 ) ); // (3/2)_Q0; } /* Move last part of input signal to the sample buffer to prepare for the next call */ SKP_memcpy( S, &in[ frameLenIn - ( SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ) ], ( SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ) * sizeof( SKP_int16 ) ); } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_LBRR_reset.c0000644000175000017500000000412711513063445021661 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main.h" /* Resets LBRR buffer, used if packet size changes */ void SKP_Silk_LBRR_reset( SKP_Silk_encoder_state *psEncC /* I/O state */ ) { SKP_int i; for( i = 0; i < MAX_LBRR_DELAY; i++ ) { psEncC->LBRR_buffer[ i ].usage = SKP_SILK_NO_LBRR; } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_NLSF_VQ_weights_laroia.c0000644000175000017500000000757511513063445024161 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_SigProc_FIX.h" /* R. Laroia, N. Phamdo and N. Farvardin, "Robust and Efficient Quantization of Speech LSP Parameters Using Structured Vector Quantization", Proc. IEEE Int. Conf. Acoust., Speech, Signal Processing, pp. 641-644, 1991. */ #define Q_OUT 6 /* Laroia low complexity NLSF weights */ void SKP_Silk_NLSF_VQ_weights_laroia( SKP_int *pNLSFW_Q6, /* O: Pointer to input vector weights [D x 1] */ const SKP_int *pNLSF_Q15, /* I: Pointer to input vector [D x 1] */ const SKP_int D /* I: Input vector dimension (even) */ ) { SKP_int k; SKP_int32 tmp1_int, tmp2_int; /* Check that we are guaranteed to end up within the required range */ SKP_assert( D > 0 ); SKP_assert( ( D & 1 ) == 0 ); /* First value */ tmp1_int = SKP_max_int( pNLSF_Q15[ 0 ], 1 ); tmp1_int = SKP_DIV32_16( 1 << ( 15 + Q_OUT ), tmp1_int ); tmp2_int = SKP_max_int( pNLSF_Q15[ 1 ] - pNLSF_Q15[ 0 ], 1 ); tmp2_int = SKP_DIV32_16( 1 << ( 15 + Q_OUT ), tmp2_int ); pNLSFW_Q6[ 0 ] = (SKP_int)SKP_min_int( tmp1_int + tmp2_int, SKP_int16_MAX ); SKP_assert( pNLSFW_Q6[ 0 ] > 0 ); /* Main loop */ for( k = 1; k < D - 1; k += 2 ) { tmp1_int = SKP_max_int( pNLSF_Q15[ k + 1 ] - pNLSF_Q15[ k ], 1 ); tmp1_int = SKP_DIV32_16( 1 << ( 15 + Q_OUT ), tmp1_int ); pNLSFW_Q6[ k ] = (SKP_int)SKP_min_int( tmp1_int + tmp2_int, SKP_int16_MAX ); SKP_assert( pNLSFW_Q6[ k ] > 0 ); tmp2_int = SKP_max_int( pNLSF_Q15[ k + 2 ] - pNLSF_Q15[ k + 1 ], 1 ); tmp2_int = SKP_DIV32_16( 1 << ( 15 + Q_OUT ), tmp2_int ); pNLSFW_Q6[ k + 1 ] = (SKP_int)SKP_min_int( tmp1_int + tmp2_int, SKP_int16_MAX ); SKP_assert( pNLSFW_Q6[ k + 1 ] > 0 ); } /* Last value */ tmp1_int = SKP_max_int( ( 1 << 15 ) - pNLSF_Q15[ D - 1 ], 1 ); tmp1_int = SKP_DIV32_16( 1 << ( 15 + Q_OUT ), tmp1_int ); pNLSFW_Q6[ D - 1 ] = (SKP_int)SKP_min_int( tmp1_int + tmp2_int, SKP_int16_MAX ); SKP_assert( pNLSFW_Q6[ D - 1 ] > 0 ); } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_perceptual_parameters_FIX.h0000644000175000017500000001313711513063445025021 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #ifndef SKP_SILK_PERCEPTUAL_PARAMETERS_FIX_H #define SKP_SILK_PERCEPTUAL_PARAMETERS_FIX_H #ifdef __cplusplus extern "C" { #endif /* reduction in coding SNR during low speech activity */ #define BG_SNR_DECR_dB_Q7 (3<<7) /* factor for reducing quantization noise during voiced speech */ #define HARM_SNR_INCR_dB_Q7 (2<<7) /* factor for reducing quantization noise for unvoiced sparse signals */ #define SPARSE_SNR_INCR_dB_Q7 (2<<7) /* threshold for sparseness measure above which to use lower quantization offset during unvoiced */ #define SPARSENESS_THRESHOLD_QNT_OFFSET_Q8 (3<<6) // 0.75 /* noise shaping filter chirp factor */ #define BANDWIDTH_EXPANSION_Q16 61604 // 0.94 /* difference between chirp factors for analysis and synthesis noise shaping filters at low bitrates */ #define LOW_RATE_BANDWIDTH_EXPANSION_DELTA_Q16 655 //0.01f /* factor to reduce all bandwidth expansion coefficients for super wideband, relative to wideband */ #define SWB_BANDWIDTH_EXPANSION_REDUCTION_Q16 (1<<16) // 1.0f; /* gain reduction for fricatives */ #define DE_ESSER_COEF_SWB_dB_Q7 (2 << 7) #define DE_ESSER_COEF_WB_dB_Q7 (1 << 7) /* extra harmonic boosting (signal shaping) at low bitrates */ #define LOW_RATE_HARMONIC_BOOST_Q16 6554 // 0.1 /* extra harmonic boosting (signal shaping) for noisy input signals */ #define LOW_INPUT_QUALITY_HARMONIC_BOOST_Q16 6554 // 0.1 /* harmonic noise shaping */ #define HARMONIC_SHAPING_Q16 19661 // 0.3 /* extra harmonic noise shaping for high bitrates or noisy input */ #define HIGH_RATE_OR_LOW_QUALITY_HARMONIC_SHAPING_Q16 13107 // 0.2 /* parameter for shaping noise towards higher frequencies */ #define HP_NOISE_COEF_Q16 19661 // 0.3 /* parameter for shaping noise extra towards higher frequencies during voiced speech */ #define HARM_HP_NOISE_COEF_Q24 7549747 // 0.45 /* parameter for applying a high-pass tilt to the input signal */ #define INPUT_TILT_Q26 2684355 // 0.04 /* parameter for extra high-pass tilt to the input signal at high rates */ #define HIGH_RATE_INPUT_TILT_Q12 246 // 0.06 /* parameter for reducing noise at the very low frequencies */ #define LOW_FREQ_SHAPING_Q0 3 /* less reduction of noise at the very low frequencies for signals with low SNR at low frequencies */ #define LOW_QUALITY_LOW_FREQ_SHAPING_DECR_Q1 1 // 0.5_Q0 /* fraction added to first autocorrelation value */ #define SHAPE_WHITE_NOISE_FRACTION_Q20 50 // 50_Q20 = 4.7684e-5 /* fraction of first autocorrelation value added to residual energy value; limits prediction gain */ #define SHAPE_MIN_ENERGY_RATIO_Q24 256 /* noise floor to put a low limit on the quantization step size */ #define NOISE_FLOOR_dB_Q7 (4 << 7) /* noise floor relative to active speech gain level */ #define RELATIVE_MIN_GAIN_dB_Q7 -6400 // -50_Q0 = -6400_Q7 /* subframe smoothing coefficient for determining active speech gain level (lower -> more smoothing) */ #define GAIN_SMOOTHING_COEF_Q10 1 // 1e-3_Q0 = 1.024_Q10 /* subframe smoothing coefficient for HarmBoost, HarmShapeGain, Tilt (lower -> more smoothing) */ #define SUBFR_SMTH_COEF_Q16 26214 // 0.4 #define NOISE_GAIN_VL_Q16 7864 #define NOISE_GAIN_VH_Q16 7864 #define NOISE_GAIN_UVL_Q16 6554 #define NOISE_GAIN_UVH_Q16 9830 #ifdef __cplusplus } #endif #endif //SKP_SILK_PERCEPTUAL_PARAMETERS_FIX_H h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_LTP_scale_ctrl_FIX.c0000644000175000017500000000755711513063445023270 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" #define NB_THRESHOLDS 11 /* Table containing trained thresholds for LTP scaling */ static const SKP_int16 LTPScaleThresholds_Q15[ NB_THRESHOLDS ] = { 31129, 26214, 16384, 13107, 9830, 6554, 4915, 3276, 2621, 2458, 0 }; void SKP_Silk_LTP_scale_ctrl_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O encoder state FIX */ SKP_Silk_encoder_control_FIX *psEncCtrl /* I/O encoder control FIX */ ) { SKP_int round_loss, frames_per_packet; SKP_int g_out_Q5, g_limit_Q15, thrld1_Q15, thrld2_Q15; /* 1st order high-pass filter */ psEnc->HPLTPredCodGain_Q7 = SKP_max_int( psEncCtrl->LTPredCodGain_Q7 - psEnc->prevLTPredCodGain_Q7, 0 ) + SKP_RSHIFT_ROUND( psEnc->HPLTPredCodGain_Q7, 1 ); psEnc->prevLTPredCodGain_Q7 = psEncCtrl->LTPredCodGain_Q7; /* combine input and filtered input */ g_out_Q5 = SKP_RSHIFT_ROUND( SKP_RSHIFT( psEncCtrl->LTPredCodGain_Q7, 1 ) + SKP_RSHIFT( psEnc->HPLTPredCodGain_Q7, 1 ), 3 ); g_limit_Q15 = SKP_Silk_sigm_Q15( g_out_Q5 - ( 3 << 5 ) ); /* mulitplid with 0.5 */ /* Default is minimum scaling */ psEncCtrl->sCmn.LTP_scaleIndex = 0; /* Round the loss measure to whole pct */ round_loss = ( SKP_int )psEnc->sCmn.PacketLoss_perc; /* Only scale if first frame in packet 0% */ if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) { frames_per_packet = SKP_DIV32_16( psEnc->sCmn.PacketSize_ms, FRAME_LENGTH_MS ); round_loss += frames_per_packet - 1; thrld1_Q15 = LTPScaleThresholds_Q15[ SKP_min_int( round_loss, NB_THRESHOLDS - 1 ) ]; thrld2_Q15 = LTPScaleThresholds_Q15[ SKP_min_int( round_loss + 1, NB_THRESHOLDS - 1 ) ]; if( g_limit_Q15 > thrld1_Q15 ) { /* Maximum scaling */ psEncCtrl->sCmn.LTP_scaleIndex = 2; } else if( g_limit_Q15 > thrld2_Q15 ) { /* Medium scaling */ psEncCtrl->sCmn.LTP_scaleIndex = 1; } } psEncCtrl->LTP_scale_Q14 = SKP_Silk_LTPScales_table_Q14[ psEncCtrl->sCmn.LTP_scaleIndex ]; } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_schur.c0000644000175000017500000001050111513063445021033 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_schur.c * * * * Calculates the reflection coefficients from the correlation sequence * * * * Copyright 2008 (c), Skype Limited * * Date: 080103 * * */ #include "SKP_Silk_SigProc_FIX.h" /* Faster than schur64(), but much less accurate. */ /* uses SMLAWB(), requiring armv5E and higher. */ void SKP_Silk_schur( SKP_int16 *rc_Q15, /* O: reflection coefficients [order] Q15 */ const SKP_int32 *c, /* I: correlations [order+1] */ const SKP_int32 order /* I: prediction order */ ) { SKP_int k, n, lz; SKP_int32 C[ SigProc_MAX_ORDER_LPC + 1 ][ 2 ]; SKP_int32 Ctmp1, Ctmp2, rc_tmp_Q15; /* Get number of leading zeros */ lz = SKP_Silk_CLZ32( c[ 0 ] ); /* Copy correlations and adjust level to Q30 */ if( lz < 2 ) { /* lz must be 1, so shift one to the right */ for( k = 0; k < order + 1; k++ ) { C[ k ][ 0 ] = C[ k ][ 1 ] = SKP_RSHIFT( c[ k ], 1 ); } } else if( lz > 2 ) { /* Shift to the left */ lz -= 2; for( k = 0; k < order + 1; k++ ) { C[ k ][ 0 ] = C[ k ][ 1 ] = SKP_LSHIFT( c[k], lz ); } } else { /* No need to shift */ for( k = 0; k < order + 1; k++ ) { C[ k ][ 0 ] = C[ k ][ 1 ] = c[ k ]; } } for( k = 0; k < order; k++ ) { /* Get reflection coefficient */ rc_tmp_Q15 = -SKP_DIV32_16( C[ k + 1 ][ 0 ], SKP_max_32( SKP_RSHIFT( C[ 0 ][ 1 ], 15 ), 1 ) ); /* Clip (shouldn't happen for properly conditioned inputs) */ rc_tmp_Q15 = SKP_SAT16( rc_tmp_Q15 ); /* Store */ rc_Q15[ k ] = (SKP_int16)rc_tmp_Q15; /* Update correlations */ for( n = 0; n < order - k; n++ ) { Ctmp1 = C[ n + k + 1 ][ 0 ]; Ctmp2 = C[ n ][ 1 ]; C[ n + k + 1 ][ 0 ] = SKP_SMLAWB( Ctmp1, SKP_LSHIFT( Ctmp2, 1 ), rc_tmp_Q15 ); C[ n ][ 1 ] = SKP_SMLAWB( Ctmp2, SKP_LSHIFT( Ctmp1, 1 ), rc_tmp_Q15 ); } } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_noise_shape_analysis_FIX.c0000644000175000017500000004403211513063445024623 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" #include "SKP_Silk_perceptual_parameters_FIX.h" /**************************************************************/ /* Compute noise shaping coefficients and initial gain values */ /**************************************************************/ void SKP_Silk_noise_shape_analysis_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O Encoder state FIX */ SKP_Silk_encoder_control_FIX *psEncCtrl, /* I/O Encoder control FIX */ const SKP_int16 *pitch_res, /* I LPC residual from pitch analysis */ const SKP_int16 *x /* I Input signal [ 2 * frame_length + la_shape ]*/ ) { SKP_Silk_shape_state_FIX *psShapeSt = &psEnc->sShape; SKP_int k, nSamples, lz, Qnrg, b_Q14, scale = 0, sz; SKP_int32 SNR_adj_dB_Q7, HarmBoost_Q16, HarmShapeGain_Q16, Tilt_Q16, tmp32; SKP_int32 nrg, pre_nrg_Q30, log_energy_Q7, log_energy_prev_Q7, energy_variation_Q7; SKP_int32 delta_Q16, BWExp1_Q16, BWExp2_Q16, gain_mult_Q16, gain_add_Q16, strength_Q16, b_Q8; SKP_int32 auto_corr[ SHAPE_LPC_ORDER_MAX + 1 ]; SKP_int32 refl_coef_Q16[ SHAPE_LPC_ORDER_MAX ]; SKP_int32 AR_Q24[ SHAPE_LPC_ORDER_MAX ]; SKP_int16 x_windowed[ SHAPE_LPC_WIN_MAX ]; const SKP_int16 *x_ptr, *pitch_res_ptr; SKP_int32 sqrt_nrg[ NB_SUBFR ], Qnrg_vec[ NB_SUBFR ]; /* Point to start of first LPC analysis block */ x_ptr = x + psEnc->sCmn.la_shape - SKP_SMULBB( SHAPE_LPC_WIN_MS, psEnc->sCmn.fs_kHz ) + psEnc->sCmn.frame_length / NB_SUBFR; /****************/ /* CONTROL SNR */ /****************/ /* Reduce SNR_dB values if recent bitstream has exceeded TargetRate */ psEncCtrl->current_SNR_dB_Q7 = psEnc->SNR_dB_Q7 - SKP_SMULWB( SKP_LSHIFT( ( SKP_int32 )psEnc->BufferedInChannel_ms, 7 ), 3277 ); /* Reduce SNR_dB if inband FEC used */ if( psEnc->speech_activity_Q8 > LBRR_SPEECH_ACTIVITY_THRES_Q8 ) { psEncCtrl->current_SNR_dB_Q7 -= SKP_RSHIFT( psEnc->inBandFEC_SNR_comp_Q8, 1 ); } /****************/ /* GAIN CONTROL */ /****************/ /* Input quality is the average of the quality in the lowest two VAD bands */ psEncCtrl->input_quality_Q14 = ( SKP_int )SKP_RSHIFT( ( SKP_int32 )psEncCtrl->input_quality_bands_Q15[ 0 ] + psEncCtrl->input_quality_bands_Q15[ 1 ], 2 ); /* Coding quality level, between 0.0_Q0 and 1.0_Q0, but in Q14 */ psEncCtrl->coding_quality_Q14 = SKP_RSHIFT( SKP_Silk_sigm_Q15( SKP_RSHIFT_ROUND( psEncCtrl->current_SNR_dB_Q7 - ( 18 << 7 ), 4 ) ), 1 ); /* Reduce coding SNR during low speech activity */ b_Q8 = ( 1 << 8 ) - psEnc->speech_activity_Q8; b_Q8 = SKP_SMULWB( SKP_LSHIFT( b_Q8, 8 ), b_Q8 ); SNR_adj_dB_Q7 = SKP_SMLAWB( psEncCtrl->current_SNR_dB_Q7, SKP_SMULBB( -BG_SNR_DECR_dB_Q7 >> ( 4 + 1 ), b_Q8 ), // Q11 SKP_SMULWB( ( 1 << 14 ) + psEncCtrl->input_quality_Q14, psEncCtrl->coding_quality_Q14 ) ); // Q12 if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) { /* Reduce gains for periodic signals */ SNR_adj_dB_Q7 = SKP_SMLAWB( SNR_adj_dB_Q7, HARM_SNR_INCR_dB_Q7 << 1, psEnc->LTPCorr_Q15 ); } else { /* For unvoiced signals and low-quality input, adjust the quality slower than SNR_dB setting */ SNR_adj_dB_Q7 = SKP_SMLAWB( SNR_adj_dB_Q7, SKP_SMLAWB( 6 << ( 7 + 2 ), -104856, psEncCtrl->current_SNR_dB_Q7 ), //-104856_Q18 = -0.4_Q0, Q9 ( 1 << 14 ) - psEncCtrl->input_quality_Q14 ); // Q14 } /*************************/ /* SPARSENESS PROCESSING */ /*************************/ /* Set quantizer offset */ if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) { /* Initally set to 0; may be overruled in process_gains(..) */ psEncCtrl->sCmn.QuantOffsetType = 0; psEncCtrl->sparseness_Q8 = 0; } else { /* Sparseness measure, based on relative fluctuations of energy per 2 milliseconds */ nSamples = SKP_LSHIFT( psEnc->sCmn.fs_kHz, 1 ); energy_variation_Q7 = 0; log_energy_prev_Q7 = 0; pitch_res_ptr = pitch_res; for( k = 0; k < FRAME_LENGTH_MS / 2; k++ ) { SKP_Silk_sum_sqr_shift( &nrg, &scale, pitch_res_ptr, nSamples ); nrg += SKP_RSHIFT( nSamples, scale ); // Q(-scale) log_energy_Q7 = SKP_Silk_lin2log( nrg ); if( k > 0 ) { energy_variation_Q7 += SKP_abs( log_energy_Q7 - log_energy_prev_Q7 ); } log_energy_prev_Q7 = log_energy_Q7; pitch_res_ptr += nSamples; } psEncCtrl->sparseness_Q8 = SKP_RSHIFT( SKP_Silk_sigm_Q15( SKP_SMULWB( energy_variation_Q7 - ( 5 << 7 ), 6554 ) ), 7 ); // 6554_Q16 = 0.1_Q0 /* Set quantization offset depending on sparseness measure */ if( psEncCtrl->sparseness_Q8 > SPARSENESS_THRESHOLD_QNT_OFFSET_Q8 ) { psEncCtrl->sCmn.QuantOffsetType = 0; } else { psEncCtrl->sCmn.QuantOffsetType = 1; } /* Increase coding SNR for sparse signals */ SNR_adj_dB_Q7 = SKP_SMLAWB( SNR_adj_dB_Q7, SPARSE_SNR_INCR_dB_Q7 << 8, psEncCtrl->sparseness_Q8 - ( 1 << 7 ) ); } /*******************************/ /* Control bandwidth expansion */ /*******************************/ delta_Q16 = SKP_SMULWB( ( 1 << 16 ) - SKP_SMULBB( 3, psEncCtrl->coding_quality_Q14 ), LOW_RATE_BANDWIDTH_EXPANSION_DELTA_Q16 ); BWExp1_Q16 = BANDWIDTH_EXPANSION_Q16 - delta_Q16; BWExp2_Q16 = BANDWIDTH_EXPANSION_Q16 + delta_Q16; if( psEnc->sCmn.fs_kHz == 24 ) { /* Less bandwidth expansion for super wideband */ BWExp1_Q16 = ( 1 << 16 ) - SKP_SMULWB( SWB_BANDWIDTH_EXPANSION_REDUCTION_Q16, ( 1 << 16 ) - BWExp1_Q16 ); BWExp2_Q16 = ( 1 << 16 ) - SKP_SMULWB( SWB_BANDWIDTH_EXPANSION_REDUCTION_Q16, ( 1 << 16 ) - BWExp2_Q16 ); } /* BWExp1 will be applied after BWExp2, so make it relative */ BWExp1_Q16 = SKP_DIV32_16( SKP_LSHIFT( BWExp1_Q16, 14 ), SKP_RSHIFT( BWExp2_Q16, 2 ) ); /********************************************/ /* Compute noise shaping AR coefs and gains */ /********************************************/ sz = ( SKP_int )SKP_SMULBB( SHAPE_LPC_WIN_MS, psEnc->sCmn.fs_kHz ); for( k = 0; k < NB_SUBFR; k++ ) { /* Apply window */ SKP_Silk_apply_sine_window( x_windowed, x_ptr, 0, SHAPE_LPC_WIN_MS * psEnc->sCmn.fs_kHz ); /* Update pointer: next LPC analysis block */ x_ptr += psEnc->sCmn.frame_length / NB_SUBFR; /* Calculate auto correlation */ SKP_Silk_autocorr( auto_corr, &scale, x_windowed, sz, psEnc->sCmn.shapingLPCOrder + 1 ); /* Add white noise, as a fraction of energy */ auto_corr[0] = SKP_ADD32( auto_corr[0], SKP_max_32( SKP_SMULWB( SKP_RSHIFT( auto_corr[ 0 ], 4 ), SHAPE_WHITE_NOISE_FRACTION_Q20 ), 1 ) ); /* Calculate the reflection coefficients using schur */ nrg = SKP_Silk_schur64( refl_coef_Q16, auto_corr, psEnc->sCmn.shapingLPCOrder ); /* Convert reflection coefficients to prediction coefficients */ SKP_Silk_k2a_Q16( AR_Q24, refl_coef_Q16, psEnc->sCmn.shapingLPCOrder ); /* Bandwidth expansion for synthesis filter shaping */ SKP_Silk_bwexpander_32( AR_Q24, psEnc->sCmn.shapingLPCOrder, BWExp2_Q16 ); /* Make sure to fit in Q13 SKP_int16 */ SKP_Silk_LPC_fit( &psEncCtrl->AR2_Q13[ k * SHAPE_LPC_ORDER_MAX ], AR_Q24, 13, psEnc->sCmn.shapingLPCOrder ); /* Compute noise shaping filter coefficients */ SKP_memcpy( &psEncCtrl->AR1_Q13[ k * SHAPE_LPC_ORDER_MAX ], &psEncCtrl->AR2_Q13[ k * SHAPE_LPC_ORDER_MAX ], psEnc->sCmn.shapingLPCOrder * sizeof( SKP_int16 ) ); /* Bandwidth expansion for analysis filter shaping */ SKP_assert( BWExp1_Q16 <= ( 1 << 16 ) ); // If ever breaking, use LPC_stabilize() in these cases to stay within range SKP_Silk_bwexpander( &psEncCtrl->AR1_Q13[ k * SHAPE_LPC_ORDER_MAX ], psEnc->sCmn.shapingLPCOrder, BWExp1_Q16 ); /* Increase residual energy */ nrg = SKP_SMLAWB( nrg, SKP_RSHIFT( auto_corr[ 0 ], 8 ), SHAPE_MIN_ENERGY_RATIO_Q24 ); Qnrg = -scale; // range: -12...30 SKP_assert( Qnrg >= -12 ); SKP_assert( Qnrg <= 30 ); /* Make sure that Qnrg is an even number */ if( Qnrg & 1 ) { Qnrg -= 1; nrg >>= 1; } tmp32 = SKP_Silk_SQRT_APPROX( nrg ); Qnrg >>= 1; // range: -6...15 sqrt_nrg[ k ] = tmp32; Qnrg_vec[ k ] = Qnrg; psEncCtrl->Gains_Q16[ k ] = SKP_LSHIFT_SAT32( tmp32, 16 - Qnrg ); /* Ratio of prediction gains, in energy domain */ SKP_Silk_LPC_inverse_pred_gain_Q13( &pre_nrg_Q30, &psEncCtrl->AR2_Q13[ k * SHAPE_LPC_ORDER_MAX ], psEnc->sCmn.shapingLPCOrder ); SKP_Silk_LPC_inverse_pred_gain_Q13( &nrg, &psEncCtrl->AR1_Q13[ k * SHAPE_LPC_ORDER_MAX ], psEnc->sCmn.shapingLPCOrder ); lz = SKP_min_32( SKP_Silk_CLZ32( pre_nrg_Q30 ) - 1, 19 ); pre_nrg_Q30 = SKP_DIV32( SKP_LSHIFT( pre_nrg_Q30, lz ), SKP_RSHIFT( nrg, 20 - lz ) + 1 ); // Q20 pre_nrg_Q30 = SKP_RSHIFT( SKP_LSHIFT_SAT32( pre_nrg_Q30, 9 ), 1 ); /* Q28 */ psEncCtrl->GainsPre_Q14[ k ] = ( SKP_int )SKP_Silk_SQRT_APPROX( pre_nrg_Q30 ); } /*****************/ /* Gain tweaking */ /*****************/ /* Increase gains during low speech activity and put lower limit on gains */ gain_mult_Q16 = SKP_Silk_log2lin( -SKP_SMLAWB( -16 << 7, SNR_adj_dB_Q7, 10486 ) ); // 10486_Q16 = 0.16_Q0 gain_add_Q16 = SKP_Silk_log2lin( SKP_SMLAWB( 16 << 7, NOISE_FLOOR_dB_Q7, 10486 ) ); // 10486_Q16 = 0.16_Q0 tmp32 = SKP_Silk_log2lin( SKP_SMLAWB( 16 << 7, RELATIVE_MIN_GAIN_dB_Q7, 10486 ) ); // 10486_Q16 = 0.16_Q0 tmp32 = SKP_SMULWW( psEnc->avgGain_Q16, tmp32 ); gain_add_Q16 = SKP_ADD_SAT32( gain_add_Q16, tmp32 ); SKP_assert( gain_mult_Q16 >= 0 ); for( k = 0; k < NB_SUBFR; k++ ) { psEncCtrl->Gains_Q16[ k ] = SKP_SMULWW( psEncCtrl->Gains_Q16[ k ], gain_mult_Q16 ); SKP_assert( psEncCtrl->Gains_Q16[ k ] >= 0 ); } for( k = 0; k < NB_SUBFR; k++ ) { psEncCtrl->Gains_Q16[ k ] = SKP_ADD_POS_SAT32( psEncCtrl->Gains_Q16[ k ], gain_add_Q16 ); psEnc->avgGain_Q16 = SKP_ADD_SAT32( psEnc->avgGain_Q16, SKP_SMULWB( psEncCtrl->Gains_Q16[ k ] - psEnc->avgGain_Q16, SKP_RSHIFT_ROUND( SKP_SMULBB( psEnc->speech_activity_Q8, GAIN_SMOOTHING_COEF_Q10 ), 2 ) ) ); } /************************************************/ /* Decrease level during fricatives (de-essing) */ /************************************************/ gain_mult_Q16 = ( 1 << 16 ) + SKP_RSHIFT_ROUND( SKP_MLA( INPUT_TILT_Q26, psEncCtrl->coding_quality_Q14, HIGH_RATE_INPUT_TILT_Q12 ), 10 ); if( psEncCtrl->input_tilt_Q15 <= 0 && psEncCtrl->sCmn.sigtype == SIG_TYPE_UNVOICED ) { if( psEnc->sCmn.fs_kHz == 24 ) { SKP_int32 essStrength_Q15 = SKP_SMULWW( -psEncCtrl->input_tilt_Q15, SKP_SMULBB( psEnc->speech_activity_Q8, ( 1 << 8 ) - psEncCtrl->sparseness_Q8 ) ); tmp32 = SKP_Silk_log2lin( ( 16 << 7 ) - SKP_SMULWB( essStrength_Q15, SKP_SMULWB( DE_ESSER_COEF_SWB_dB_Q7, 20972 ) ) ); // 20972_Q17 = 0.16_Q0 gain_mult_Q16 = SKP_SMULWW( gain_mult_Q16, tmp32 ); } else if( psEnc->sCmn.fs_kHz == 16 ) { SKP_int32 essStrength_Q15 = SKP_SMULWW(-psEncCtrl->input_tilt_Q15, SKP_SMULBB( psEnc->speech_activity_Q8, ( 1 << 8 ) - psEncCtrl->sparseness_Q8 )); tmp32 = SKP_Silk_log2lin( ( 16 << 7 ) - SKP_SMULWB( essStrength_Q15, SKP_SMULWB( DE_ESSER_COEF_WB_dB_Q7, 20972 ) ) ); // 20972_Q17 = 0.16_Q0 gain_mult_Q16 = SKP_SMULWW( gain_mult_Q16, tmp32 ); } else { SKP_assert( psEnc->sCmn.fs_kHz == 12 || psEnc->sCmn.fs_kHz == 8 ); } } for( k = 0; k < NB_SUBFR; k++ ) { psEncCtrl->GainsPre_Q14[ k ] = SKP_SMULWB( gain_mult_Q16, psEncCtrl->GainsPre_Q14[ k ] ); } /************************************************/ /* Control low-frequency shaping and noise tilt */ /************************************************/ /* Less low frequency shaping for noisy inputs */ strength_Q16 = SKP_MUL( LOW_FREQ_SHAPING_Q0, ( 1 << 16 ) + SKP_SMULBB( LOW_QUALITY_LOW_FREQ_SHAPING_DECR_Q1, psEncCtrl->input_quality_bands_Q15[ 0 ] - ( 1 << 15 ) ) ); if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) { /* Reduce low frequencies quantization noise for periodic signals, depending on pitch lag */ /*f = 400; freqz([1, -0.98 + 2e-4 * f], [1, -0.97 + 7e-4 * f], 2^12, Fs); axis([0, 1000, -10, 1])*/ SKP_int fs_kHz_inv = SKP_DIV32_16( 3277, psEnc->sCmn.fs_kHz ); // 0.2_Q0 = 3277_Q14 for( k = 0; k < NB_SUBFR; k++ ) { b_Q14 = fs_kHz_inv + SKP_DIV32_16( ( 3 << 14 ), psEncCtrl->sCmn.pitchL[ k ] ); /* Pack two coefficients in one int32 */ psEncCtrl->LF_shp_Q14[ k ] = SKP_LSHIFT( ( 1 << 14 ) - b_Q14 - SKP_SMULWB( strength_Q16, b_Q14 ), 16 ); psEncCtrl->LF_shp_Q14[ k ] |= (SKP_uint16)( b_Q14 - ( 1 << 14 ) ); } SKP_assert( HARM_HP_NOISE_COEF_Q24 < ( 1 << 23 ) ); // Guarantees that second argument to SMULWB() is within range of an SKP_int16 Tilt_Q16 = - HP_NOISE_COEF_Q16 - SKP_SMULWB( ( 1 << 16 ) - HP_NOISE_COEF_Q16, SKP_SMULWB( HARM_HP_NOISE_COEF_Q24, psEnc->speech_activity_Q8 ) ); } else { b_Q14 = SKP_DIV32_16( 21299, psEnc->sCmn.fs_kHz ); // 1.3_Q0 = 21299_Q14 /* Pack two coefficients in one int32 */ psEncCtrl->LF_shp_Q14[ 0 ] = SKP_LSHIFT( ( 1 << 14 ) - b_Q14 - SKP_SMULWB( strength_Q16, SKP_SMULWB( 39322, b_Q14 ) ), 16 ); // 0.6_Q0 = 39322_Q16 psEncCtrl->LF_shp_Q14[ 0 ] |= (SKP_uint16)( b_Q14 - ( 1 << 14 ) ); for( k = 1; k < NB_SUBFR; k++ ) { psEncCtrl->LF_shp_Q14[ k ] = psEncCtrl->LF_shp_Q14[ k - 1 ]; } Tilt_Q16 = -HP_NOISE_COEF_Q16; } /****************************/ /* HARMONIC SHAPING CONTROL */ /****************************/ /* Control boosting of harmonic frequencies */ HarmBoost_Q16 = SKP_SMULWB( SKP_SMULWB( ( 1 << 17 ) - SKP_LSHIFT( psEncCtrl->coding_quality_Q14, 3 ), psEnc->LTPCorr_Q15 ), LOW_RATE_HARMONIC_BOOST_Q16 ); /* More harmonic boost for noisy input signals */ HarmBoost_Q16 = SKP_SMLAWB( HarmBoost_Q16, ( 1 << 16 ) - SKP_LSHIFT( psEncCtrl->input_quality_Q14, 2 ), LOW_INPUT_QUALITY_HARMONIC_BOOST_Q16 ); if( USE_HARM_SHAPING && psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) { /* More harmonic noise shaping for high bitrates or noisy input */ HarmShapeGain_Q16 = SKP_SMLAWB( HARMONIC_SHAPING_Q16, ( 1 << 16 ) - SKP_SMULWB( ( 1 << 18 ) - SKP_LSHIFT( psEncCtrl->coding_quality_Q14, 4 ), psEncCtrl->input_quality_Q14 ), HIGH_RATE_OR_LOW_QUALITY_HARMONIC_SHAPING_Q16 ); /* Less harmonic noise shaping for less periodic signals */ HarmShapeGain_Q16 = SKP_SMULWB( SKP_LSHIFT( HarmShapeGain_Q16, 1 ), SKP_Silk_SQRT_APPROX( SKP_LSHIFT( psEnc->LTPCorr_Q15, 15 ) ) ); } else { HarmShapeGain_Q16 = 0; } /*************************/ /* Smooth over subframes */ /*************************/ for( k = 0; k < NB_SUBFR; k++ ) { psShapeSt->HarmBoost_smth_Q16 = SKP_SMLAWB( psShapeSt->HarmBoost_smth_Q16, HarmBoost_Q16 - psShapeSt->HarmBoost_smth_Q16, SUBFR_SMTH_COEF_Q16 ); psShapeSt->HarmShapeGain_smth_Q16 = SKP_SMLAWB( psShapeSt->HarmShapeGain_smth_Q16, HarmShapeGain_Q16 - psShapeSt->HarmShapeGain_smth_Q16, SUBFR_SMTH_COEF_Q16 ); psShapeSt->Tilt_smth_Q16 = SKP_SMLAWB( psShapeSt->Tilt_smth_Q16, Tilt_Q16 - psShapeSt->Tilt_smth_Q16, SUBFR_SMTH_COEF_Q16 ); psEncCtrl->HarmBoost_Q14[ k ] = ( SKP_int )SKP_RSHIFT_ROUND( psShapeSt->HarmBoost_smth_Q16, 2 ); psEncCtrl->HarmShapeGain_Q14[ k ] = ( SKP_int )SKP_RSHIFT_ROUND( psShapeSt->HarmShapeGain_smth_Q16, 2 ); psEncCtrl->Tilt_Q14[ k ] = ( SKP_int )SKP_RSHIFT_ROUND( psShapeSt->Tilt_smth_Q16, 2 ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_LPC_inv_pred_gain.c0000644000175000017500000002026711513063445023223 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_LPC_inverse_pred_gain.c * * * * Compute inverse of LPC prediction gain, and * * test if LPC coefficients are stable (all poles within unit circle) * * * * Copyright 2008 (c), Skype Limited * * */ #include "SKP_Silk_SigProc_FIX.h" #define QA 16 #define A_LIMIT 65520 /* Compute inverse of LPC prediction gain, and */ /* test if LPC coefficients are stable (all poles within unit circle) */ SKP_int SKP_Silk_LPC_inverse_pred_gain( /* O: Returns 1 if unstable, otherwise 0 */ SKP_int32 *invGain_Q30, /* O: Inverse prediction gain, Q30 energy domain */ const SKP_int16 *A_Q12, /* I: Prediction coefficients, Q12 [order] */ const SKP_int order /* I: Prediction order */ ) { SKP_int k, n, headrm; SKP_int32 rc_Q31, rc_mult1_Q30, rc_mult2_Q16; SKP_int32 Atmp_QA[ 2 ][ SigProc_MAX_ORDER_LPC ], tmp_QA; SKP_int32 *Aold_QA, *Anew_QA; Anew_QA = Atmp_QA[ order & 1 ]; /* Increase Q domain of the AR coefficients */ for( k = 0; k < order; k++ ) { Anew_QA[ k ] = SKP_LSHIFT( (SKP_int32)A_Q12[ k ], QA - 12 ); } *invGain_Q30 = ( 1 << 30 ); for( k = order - 1; k > 0; k-- ) { /* Check for stability */ if( ( Anew_QA[ k ] > A_LIMIT ) || ( Anew_QA[ k ] < -A_LIMIT ) ) { return 1; } /* Set RC equal to negated AR coef */ rc_Q31 = -SKP_LSHIFT( Anew_QA[ k ], 31 - QA ); /* rc_mult1_Q30 range: [ 1 : 2^30-1 ] */ rc_mult1_Q30 = ( SKP_int32_MAX >> 1 ) - SKP_SMMUL( rc_Q31, rc_Q31 ); SKP_assert( rc_mult1_Q30 > ( 1 << 15 ) ); /* reduce A_LIMIT if fails */ SKP_assert( rc_mult1_Q30 < ( 1 << 30 ) ); /* rc_mult2_Q16 range: [ 2^16 : SKP_int32_MAX ] */ rc_mult2_Q16 = SKP_INVERSE32_varQ( rc_mult1_Q30, 46 ); /* 16 = 46 - 30 */ /* Update inverse gain */ /* invGain_Q30 range: [ 0 : 2^30 ] */ *invGain_Q30 = SKP_LSHIFT( SKP_SMMUL( *invGain_Q30, rc_mult1_Q30 ), 2 ); SKP_assert( *invGain_Q30 >= 0 ); SKP_assert( *invGain_Q30 <= ( 1 << 30 ) ); /* Swap pointers */ Aold_QA = Anew_QA; Anew_QA = Atmp_QA[ k & 1 ]; /* Update AR coefficient */ headrm = SKP_Silk_CLZ32( rc_mult2_Q16 ) - 1; rc_mult2_Q16 = SKP_LSHIFT( rc_mult2_Q16, headrm ); /* Q: 16 + headrm */ for( n = 0; n < k; n++ ) { tmp_QA = Aold_QA[ n ] - SKP_LSHIFT( SKP_SMMUL( Aold_QA[ k - n - 1 ], rc_Q31 ), 1 ); Anew_QA[ n ] = SKP_LSHIFT( SKP_SMMUL( tmp_QA, rc_mult2_Q16 ), 16 - headrm ); } } /* Check for stability */ if( ( Anew_QA[ 0 ] > A_LIMIT ) || ( Anew_QA[ 0 ] < -A_LIMIT ) ) { return 1; } /* Set RC equal to negated AR coef */ rc_Q31 = -SKP_LSHIFT( Anew_QA[ 0 ], 31 - QA ); /* Range: [ 1 : 2^30 ] */ rc_mult1_Q30 = ( SKP_int32_MAX >> 1 ) - SKP_SMMUL( rc_Q31, rc_Q31 ); /* Update inverse gain */ /* Range: [ 0 : 2^30 ] */ *invGain_Q30 = SKP_LSHIFT( SKP_SMMUL( *invGain_Q30, rc_mult1_Q30 ), 2 ); SKP_assert( *invGain_Q30 >= 0 ); SKP_assert( *invGain_Q30 <= 1<<30 ); return 0; } /* For input in Q13 domain */ SKP_int SKP_Silk_LPC_inverse_pred_gain_Q13( /* O: Returns 1 if unstable, otherwise 0 */ SKP_int32 *invGain_Q30, /* O: Inverse prediction gain, Q30 energy domain */ const SKP_int16 *A_Q13, /* I: Prediction coefficients, Q13 [order] */ const SKP_int order /* I: Prediction order */ ) { SKP_int k, n, headrm; SKP_int32 rc_Q31, rc_mult1_Q30, rc_mult2_Q16; SKP_int32 Atmp_QA[ 2 ][ SigProc_MAX_ORDER_LPC ], tmp_QA; SKP_int32 *Aold_QA, *Anew_QA; Anew_QA = Atmp_QA[ order & 1 ]; /* Increase Q domain of the AR coefficients */ for( k = 0; k < order; k++ ) { Anew_QA[ k ] = SKP_LSHIFT( (SKP_int32)A_Q13[ k ], QA - 13 ); } *invGain_Q30 = ( 1 << 30 ); for( k = order - 1; k > 0; k-- ) { /* Check for stability */ if( ( Anew_QA[ k ] > A_LIMIT ) || ( Anew_QA[ k ] < -A_LIMIT ) ) { return 1; } /* Set RC equal to negated AR coef */ rc_Q31 = -SKP_LSHIFT( Anew_QA[ k ], 31 - QA ); /* rc_mult1_Q30 range: [ 1 : 2^30-1 ] */ rc_mult1_Q30 = ( SKP_int32_MAX >> 1 ) - SKP_SMMUL( rc_Q31, rc_Q31 ); SKP_assert( rc_mult1_Q30 > ( 1 << 15 ) ); /* reduce A_LIMIT if fails */ SKP_assert( rc_mult1_Q30 < ( 1 << 30 ) ); /* rc_mult2_Q16 range: [ 2^16 : SKP_int32_MAX ] */ rc_mult2_Q16 = SKP_INVERSE32_varQ( rc_mult1_Q30, 46 ); /* 16 = 46 - 30 */ /* Update inverse gain */ /* invGain_Q30 range: [ 0 : 2^30 ] */ *invGain_Q30 = SKP_LSHIFT( SKP_SMMUL( *invGain_Q30, rc_mult1_Q30 ), 2 ); SKP_assert( *invGain_Q30 >= 0 ); SKP_assert( *invGain_Q30 <= 1<<30 ); /* Swap pointers */ Aold_QA = Anew_QA; Anew_QA = Atmp_QA[ k & 1 ]; /* Update AR coefficient */ headrm = SKP_Silk_CLZ32( rc_mult2_Q16 ) - 1; rc_mult2_Q16 = SKP_LSHIFT( rc_mult2_Q16, headrm ); /* Q: 16 + headrm */ for( n = 0; n < k; n++ ) { tmp_QA = Aold_QA[ n ] - SKP_LSHIFT( SKP_SMMUL( Aold_QA[ k - n - 1 ], rc_Q31 ), 1 ); Anew_QA[ n ] = SKP_LSHIFT( SKP_SMMUL( tmp_QA, rc_mult2_Q16 ), 16 - headrm ); } } /* Check for stability */ if( ( Anew_QA[ 0 ] > A_LIMIT ) || ( Anew_QA[ 0 ] < -A_LIMIT ) ) { return 1; } /* Set RC equal to negated AR coef */ rc_Q31 = -SKP_LSHIFT( Anew_QA[ 0 ], 31 - QA ); /* Range: [ 1 : 2^30 ] */ rc_mult1_Q30 = ( SKP_int32_MAX >> 1 ) - SKP_SMMUL( rc_Q31, rc_Q31 ); /* Update inverse gain */ /* Range: [ 0 : 2^30 ] */ *invGain_Q30 = SKP_LSHIFT( SKP_SMMUL( *invGain_Q30, rc_mult1_Q30 ), 2 ); SKP_assert( *invGain_Q30 >= 0 ); SKP_assert( *invGain_Q30 <= 1<<30 ); return 0; } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_decoder_set_fs.c0000644000175000017500000000764111513063445022672 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main.h" /* Set decoder sampling rate */ void SKP_Silk_decoder_set_fs( SKP_Silk_decoder_state *psDec, /* I/O Decoder state pointer */ SKP_int fs_kHz /* I Sampling frequency (kHz) */ ) { if( psDec->fs_kHz != fs_kHz ) { psDec->fs_kHz = fs_kHz; psDec->frame_length = SKP_SMULBB( FRAME_LENGTH_MS, fs_kHz ); psDec->subfr_length = SKP_SMULBB( FRAME_LENGTH_MS / NB_SUBFR, fs_kHz ); if( psDec->fs_kHz == 8 ) { psDec->LPC_order = MIN_LPC_ORDER; psDec->psNLSF_CB[ 0 ] = &SKP_Silk_NLSF_CB0_10; psDec->psNLSF_CB[ 1 ] = &SKP_Silk_NLSF_CB1_10; } else { psDec->LPC_order = MAX_LPC_ORDER; psDec->psNLSF_CB[ 0 ] = &SKP_Silk_NLSF_CB0_16; psDec->psNLSF_CB[ 1 ] = &SKP_Silk_NLSF_CB1_16; } /* Reset part of the decoder state */ SKP_memset( psDec->sLPC_Q14, 0, MAX_LPC_ORDER * sizeof( SKP_int32 ) ); SKP_memset( psDec->outBuf, 0, MAX_FRAME_LENGTH * sizeof( SKP_int16 ) ); SKP_memset( psDec->prevNLSF_Q15, 0, MAX_LPC_ORDER * sizeof( SKP_int ) ); psDec->sLTP_buf_idx = 0; psDec->lagPrev = 100; psDec->LastGainIndex = 1; psDec->prev_sigtype = 0; psDec->first_frame_after_reset = 1; if( fs_kHz == 24 ) { psDec->HP_A = SKP_Silk_Dec_A_HP_24; psDec->HP_B = SKP_Silk_Dec_B_HP_24; } else if( fs_kHz == 16 ) { psDec->HP_A = SKP_Silk_Dec_A_HP_16; psDec->HP_B = SKP_Silk_Dec_B_HP_16; } else if( fs_kHz == 12 ) { psDec->HP_A = SKP_Silk_Dec_A_HP_12; psDec->HP_B = SKP_Silk_Dec_B_HP_12; } else if( fs_kHz == 8 ) { psDec->HP_A = SKP_Silk_Dec_A_HP_8; psDec->HP_B = SKP_Silk_Dec_B_HP_8; } else { /* unsupported sampling rate */ SKP_assert( 0 ); } } /* Check that settings are valid */ SKP_assert( psDec->frame_length > 0 && psDec->frame_length <= MAX_FRAME_LENGTH ); } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_resample_2_3_coarsest.c0000644000175000017500000001333411513063445024074 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * File Name: SKP_Silk_resample_2_3_coarsest.c * * * * Description: Linear phase FIR polyphase implementation of resampling * * * * Copyright 2009 (c), Skype Limited * * All rights reserved. * * * * Date: 090423 * * */ #include "SKP_Silk_SigProc_FIX.h" #include "SKP_Silk_resample_rom.h" /* Resamples input data with a factor 2/3 */ void SKP_Silk_resample_2_3_coarsest( SKP_int16 *out, /* O: Output signal */ SKP_int16 *S, /* I/O: Resampler state [ SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS - 1 ] */ const SKP_int16 *in, /* I: Input signal */ const SKP_int frameLenIn, /* I: Number of input samples */ SKP_int16 *scratch /* I: Scratch memory [ frameLenIn + SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS - 1 ] */ ) { SKP_int32 n, ind, interpol_ind, tmp, index_Q16; SKP_int16 *in_ptr; SKP_int frameLenOut; const SKP_int16 *interpol_ptr; /* Copy buffered samples to start of scratch */ SKP_memcpy( scratch, S, ( SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS - 1 ) * sizeof( SKP_int16 ) ); /* Then append by the input signal */ SKP_memcpy( &scratch[ SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS - 1 ], in, frameLenIn * sizeof( SKP_int16 ) ); frameLenOut = SKP_SMULWB( SKP_LSHIFT( (SKP_int32)frameLenIn, 1 ), 21846 ); // 21846_Q15 = (2/3)_Q0 rounded _up_ index_Q16 = 0; SKP_assert( frameLenIn == ( ( frameLenOut * 3 ) / 2 ) ); /* Interpolate */ for( n = frameLenOut; n > 0; n-- ) { /* Integer part */ ind = SKP_RSHIFT( index_Q16, 16 ); /* Pointer to buffered input */ in_ptr = scratch + ind; /* Fractional part */ interpol_ind = ( SKP_SMULWB( index_Q16, SigProc_Resample_2_3_coarsest_NUM_INTERPOLATORS ) & ( SigProc_Resample_2_3_coarsest_NUM_INTERPOLATORS - 1 ) ); /* Pointer to FIR taps */ interpol_ptr = SigProc_Resample_2_3_coarsest_INTERPOL[ interpol_ind ]; /* Interpolate: Hardcoded for 10 FIR taps */ SKP_assert( SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS == 10 ); tmp = SKP_SMULBB( interpol_ptr[ 0 ], in_ptr[ 0 ] ); tmp = SKP_SMLABB( tmp, interpol_ptr[ 1 ], in_ptr[ 1 ] ); tmp = SKP_SMLABB( tmp, interpol_ptr[ 2 ], in_ptr[ 2 ] ); tmp = SKP_SMLABB( tmp, interpol_ptr[ 3 ], in_ptr[ 3 ] ); tmp = SKP_SMLABB( tmp, interpol_ptr[ 4 ], in_ptr[ 4 ] ); tmp = SKP_SMLABB( tmp, interpol_ptr[ 5 ], in_ptr[ 5 ] ); tmp = SKP_SMLABB( tmp, interpol_ptr[ 6 ], in_ptr[ 6 ] ); tmp = SKP_SMLABB( tmp, interpol_ptr[ 7 ], in_ptr[ 7 ] ); tmp = SKP_SMLABB( tmp, interpol_ptr[ 8 ], in_ptr[ 8 ] ); tmp = SKP_SMLABB( tmp, interpol_ptr[ 9 ], in_ptr[ 9 ] ); /* Round, saturate and store to output array */ *out++ = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( tmp, 15 ) ); /* Update index */ index_Q16 += ( ( 1 << 16 ) + ( 1 << 15 ) ); // (3/2)_Q0; } /* Move last part of input signal to the sample buffer to prepare for the next call */ SKP_memcpy( S, &in[ frameLenIn - ( SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS - 1 ) ], ( SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS - 1 ) * sizeof( SKP_int16 ) ); } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_tables_type_offset.c0000644000175000017500000000426311513063445023600 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_tables.h" const SKP_uint16 SKP_Silk_type_offset_CDF[ 5 ] = { 0, 37522, 41030, 44212, 65535 }; const SKP_int SKP_Silk_type_offset_CDF_offset = 2; const SKP_uint16 SKP_Silk_type_offset_joint_CDF[ 4 ][ 5 ] = { { 0, 57686, 61230, 62358, 65535 }, { 0, 18346, 40067, 43659, 65535 }, { 0, 22694, 24279, 35507, 65535 }, { 0, 6067, 7215, 13010, 65535 } }; h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_define.h0000644000175000017500000003442011513063445021154 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #ifndef SKP_SILK_DEFINE_H #define SKP_SILK_DEFINE_H #include "SKP_Silk_errors.h" #include "SKP_Silk_typedef.h" #ifdef __cplusplus extern "C" { #endif #define MAX_FRAMES_PER_PACKET 5 #define BIT_STREAM_V3 3 #define BIT_STREAM_V4 4 #define USE_BIT_STREAM_V BIT_STREAM_V3 // Should be moved to a API call /* MAX DELTA LAG used for multiframe packets */ #define MAX_DELTA_LAG 10 /* Lower limit on bitrate for each mode */ #define MIN_TARGET_RATE_NB_BPS 5000 #define MIN_TARGET_RATE_MB_BPS 7000 #define MIN_TARGET_RATE_WB_BPS 8000 #define MIN_TARGET_RATE_SWB_BPS 20000 /* Transition bitrates between modes */ #define SWB2WB_BITRATE_BPS 30000 #define SWB2WB_BITRATE_BPS_INITIAL 25000 #define WB2SWB_BITRATE_BPS 35000 #define WB2MB_BITRATE_BPS 15000 #define MB2WB_BITRATE_BPS 20000 #define MB2NB_BITRATE_BPS 10000 #define NB2MB_BITRATE_BPS 14000 /* Integration/hysteresis threshold for lowering internal sample frequency */ /* 30000000 -> 6 sec if bitrate is 5000 bps below limit; 3 sec if bitrate is 10000 bps below limit */ #define ACCUM_BITS_DIFF_THRESHOLD 30000000 #define TARGET_RATE_TAB_SZ 8 /* DTX settings */ #define NO_SPEECH_FRAMES_BEFORE_DTX 5 /* eq 100 ms */ #define MAX_CONSECUTIVE_DTX 20 /* eq 400 ms */ #define USE_LBRR 1 /* Amount of concecutive no FEC packets before telling JB */ #define NO_LBRR_THRES 10 /* Maximum delay between real packet and LBRR packet */ #define MAX_LBRR_DELAY 2 #define LBRR_IDX_MASK 1 #define INBAND_FEC_MIN_RATE_BPS 18000 /* Dont use inband FEC below this total target rate */ #define LBRR_LOSS_THRES 2 /* Start adding LBRR at this loss rate (needs tuning) */ /* LBRR usage defines */ #define SKP_SILK_NO_LBRR 0 /* No LBRR information for this packet */ #define SKP_SILK_ADD_LBRR_TO_PLUS1 1 /* Add LBRR for this packet to packet n + 1 */ #define SKP_SILK_ADD_LBRR_TO_PLUS2 2 /* Add LBRR for this packet to packet n + 2 */ /* Frame termination indicator defines */ #define SKP_SILK_LAST_FRAME 0 /* Last frames in packet */ #define SKP_SILK_MORE_FRAMES 1 /* More frames to follow this one */ #define SKP_SILK_LBRR_VER1 2 /* LBRR information from packet n - 1 */ #define SKP_SILK_LBRR_VER2 3 /* LBRR information from packet n - 2 */ #define SKP_SILK_EXT_LAYER 4 /* Extension layers added */ /* Number of Second order Sections for SWB detection HP filter */ #define NB_SOS 3 #define HP_8_KHZ_THRES 10 /* average energy per sample, above 8 kHz */ #define CONCEC_SWB_SMPLS_THRES 480 * 15 /* 300 ms */ #define WB_DETECT_ACTIVE_SPEECH_MS_THRES 15000 /* ms of active speech needed for WB detection */ /* Low complexity setting */ #ifdef EMBEDDED_OPT # define LOW_COMPLEXITY_ONLY 1 #else # define LOW_COMPLEXITY_ONLY 0 #endif /* Activate bandwidth transition filtering for mode switching */ #ifdef EMBEDDED_OPT # define SWITCH_TRANSITION_FILTERING 0 #else #ifndef FORCE_FS_KHZ # define SWITCH_TRANSITION_FILTERING 1 #else # define SWITCH_TRANSITION_FILTERING 0 #endif #endif /* Decoder Parameters */ #define DEC_HP_ORDER 2 /* Maximum sampling frequency, should be 16 for embedded */ #define MAX_FS_KHZ 24 /* Signal Types used by silk */ #define SIG_TYPE_VOICED 0 #define SIG_TYPE_UNVOICED 1 /* VAD Types used by silk */ #define NO_VOICE_ACTIVITY 0 #define VOICE_ACTIVITY 1 /* number of samples per frame */ #define FRAME_LENGTH_MS 20 /* 20 ms */ #define MAX_FRAME_LENGTH (FRAME_LENGTH_MS * MAX_FS_KHZ) /* number of lookahead samples for pitch analysis */ #define LA_PITCH_MS 3 #define LA_PITCH_MAX (LA_PITCH_MS * MAX_FS_KHZ) /* number of lookahead samples for noise shape analysis */ #define LA_SHAPE_MS 5 #define LA_SHAPE_MAX (LA_SHAPE_MS * MAX_FS_KHZ) /* Order of LPC used in find pitch */ #define FIND_PITCH_LPC_ORDER_MAX 16 /* Length of LPC window used in find pitch */ #define FIND_PITCH_LPC_WIN_MS (30 + (LA_PITCH_MS << 1)) #define FIND_PITCH_LPC_WIN_MAX (FIND_PITCH_LPC_WIN_MS * MAX_FS_KHZ) #define PITCH_EST_COMPLEXITY_HC_MODE SigProc_PITCH_EST_MAX_COMPLEX #define PITCH_EST_COMPLEXITY_MC_MODE SigProc_PITCH_EST_MID_COMPLEX #define PITCH_EST_COMPLEXITY_LC_MODE SigProc_PITCH_EST_MIN_COMPLEX /* Max number of bytes in payload output buffer (may contain multiple frames) */ #define MAX_ARITHM_BYTES 1024 #define RANGE_CODER_WRITE_BEYOND_BUFFER -1 #define RANGE_CODER_CDF_OUT_OF_RANGE -2 #define RANGE_CODER_NORMALIZATION_FAILED -3 #define RANGE_CODER_ZERO_INTERVAL_WIDTH -4 #define RANGE_CODER_DECODER_CHECK_FAILED -5 #define RANGE_CODER_READ_BEYOND_BUFFER -6 #define RANGE_CODER_ILLEGAL_SAMPLING_RATE -7 #define RANGE_CODER_DEC_PAYLOAD_TOO_LONG -8 /* dB level of lowest gain quantization level */ #define MIN_QGAIN_DB 6 /* dB level of highest gain quantization level */ #define MAX_QGAIN_DB 86 /* Number of gain quantization levels */ #define N_LEVELS_QGAIN 64 /* Max increase in gain quantization index */ #define MAX_DELTA_GAIN_QUANT 40 /* Max decrease in gain quantization index */ #define MIN_DELTA_GAIN_QUANT -4 /* Quantization offsets (multiples of 4) */ #define OFFSET_VL_Q10 32 #define OFFSET_VH_Q10 100 #define OFFSET_UVL_Q10 100 #define OFFSET_UVH_Q10 256 /* Maximum numbers of iterations used to stabilize a LPC vector */ #define MAX_LPC_STABILIZE_ITERATIONS 20 #define MAX_LPC_ORDER 16 #define MIN_LPC_ORDER 10 /* Find Pred Coef defines */ #define LTP_ORDER 5 /* LTP quantization settings */ #define NB_LTP_CBKS 3 /* Number of subframes */ #define NB_SUBFR 4 /* Flag to use harmonic noise shaping */ #define USE_HARM_SHAPING 1 /* Max LPC order of noise shaping filters */ #define SHAPE_LPC_ORDER_MAX 16 #define HARM_SHAPE_FIR_TAPS 3 /* Length of LPC window used in noise shape analysis */ #define SHAPE_LPC_WIN_MS 15 #define SHAPE_LPC_WIN_16_KHZ (SHAPE_LPC_WIN_MS * 16) #define SHAPE_LPC_WIN_24_KHZ (SHAPE_LPC_WIN_MS * 24) #define SHAPE_LPC_WIN_MAX (SHAPE_LPC_WIN_MS * MAX_FS_KHZ) /* Maximum number of delayed decision states */ #define DEL_DEC_STATES_MAX 4 #define LTP_BUF_LENGTH 512 #define LTP_MASK (LTP_BUF_LENGTH - 1) #define DECISION_DELAY 32 #define DECISION_DELAY_MASK (DECISION_DELAY - 1) /* number of subframes for excitation entropy coding */ #define SHELL_CODEC_FRAME_LENGTH 16 #define MAX_NB_SHELL_BLOCKS (MAX_FRAME_LENGTH / SHELL_CODEC_FRAME_LENGTH) /* number of rate levels, for entropy coding of excitation */ #define N_RATE_LEVELS 10 /* maximum sum of pulses per shell coding frame */ #define MAX_PULSES 18 #define MAX_MATRIX_SIZE MAX_LPC_ORDER /* Max of LPC Order and LTP order */ #if( MAX_LPC_ORDER > DECISION_DELAY ) # define NSQ_LPC_BUF_LENGTH MAX_LPC_ORDER #else # define NSQ_LPC_BUF_LENGTH DECISION_DELAY #endif /***********************/ /* High pass filtering */ /***********************/ #define HIGH_PASS_INPUT 1 /***************************/ /* Voice activity detector */ /***************************/ #define VAD_N_BANDS 4 /* 0-1, 1-2, 2-4, and 4-8 kHz */ #define VAD_INTERNAL_SUBFRAMES_LOG2 2 #define VAD_INTERNAL_SUBFRAMES (1 << VAD_INTERNAL_SUBFRAMES_LOG2) #define VAD_NOISE_LEVEL_SMOOTH_COEF_Q16 1024 /* Must be < 4096 */ #define VAD_NOISE_LEVELS_BIAS 50 /* Sigmoid settings */ #define VAD_NEGATIVE_OFFSET_Q5 128 /* sigmoid is 0 at -128 */ #define VAD_SNR_FACTOR_Q16 45000 /* smoothing for SNR measurement */ #define VAD_SNR_SMOOTH_COEF_Q18 4096 /******************/ /* NLSF quantizer */ /******************/ # define NLSF_MSVQ_MAX_CB_STAGES 10 /* Update manually when changing codebooks */ # define NLSF_MSVQ_MAX_VECTORS_IN_STAGE 128 /* Update manually when changing codebooks */ # define NLSF_MSVQ_MAX_VECTORS_IN_STAGE_TWO_TO_END 16 /* Update manually when changing codebooks */ #define NLSF_MSVQ_FLUCTUATION_REDUCTION 1 #define MAX_NLSF_MSVQ_SURVIVORS 16 #define MAX_NLSF_MSVQ_SURVIVORS_LC_MODE 2 #define MAX_NLSF_MSVQ_SURVIVORS_MC_MODE 4 /* Based on above defines, calculate how much memory is necessary to allocate */ #if( NLSF_MSVQ_MAX_VECTORS_IN_STAGE > ( MAX_NLSF_MSVQ_SURVIVORS_LC_MODE * NLSF_MSVQ_MAX_VECTORS_IN_STAGE_TWO_TO_END ) ) # define NLSF_MSVQ_TREE_SEARCH_MAX_VECTORS_EVALUATED_LC_MODE NLSF_MSVQ_MAX_VECTORS_IN_STAGE #else # define NLSF_MSVQ_TREE_SEARCH_MAX_VECTORS_EVALUATED_LC_MODE MAX_NLSF_MSVQ_SURVIVORS_LC_MODE * NLSF_MSVQ_MAX_VECTORS_IN_STAGE_TWO_TO_END #endif #if( NLSF_MSVQ_MAX_VECTORS_IN_STAGE > ( MAX_NLSF_MSVQ_SURVIVORS * NLSF_MSVQ_MAX_VECTORS_IN_STAGE_TWO_TO_END ) ) # define NLSF_MSVQ_TREE_SEARCH_MAX_VECTORS_EVALUATED NLSF_MSVQ_MAX_VECTORS_IN_STAGE #else # define NLSF_MSVQ_TREE_SEARCH_MAX_VECTORS_EVALUATED MAX_NLSF_MSVQ_SURVIVORS * NLSF_MSVQ_MAX_VECTORS_IN_STAGE_TWO_TO_END #endif #define NLSF_MSVQ_SURV_MAX_REL_RD 4 /* Transition filtering for mode switching */ #if SWITCH_TRANSITION_FILTERING # define TRANSITION_TIME_UP_MS 5120 // 5120 = 64 * FRAME_LENGTH_MS * ( TRANSITION_INT_NUM - 1 ) = 64*(20*4) # define TRANSITION_TIME_DOWN_MS 2560 // 2560 = 32 * FRAME_LENGTH_MS * ( TRANSITION_INT_NUM - 1 ) = 32*(20*4) # define TRANSITION_NB 3 /* Hardcoded in tables */ # define TRANSITION_NA 2 /* Hardcoded in tables */ # define TRANSITION_INT_NUM 5 /* Hardcoded in tables */ # define TRANSITION_FRAMES_UP ( TRANSITION_TIME_UP_MS / FRAME_LENGTH_MS ) # define TRANSITION_FRAMES_DOWN ( TRANSITION_TIME_DOWN_MS / FRAME_LENGTH_MS ) # define TRANSITION_INT_STEPS_UP ( TRANSITION_FRAMES_UP / ( TRANSITION_INT_NUM - 1 ) ) # define TRANSITION_INT_STEPS_DOWN ( TRANSITION_FRAMES_DOWN / ( TRANSITION_INT_NUM - 1 ) ) #endif /* Row based */ #define matrix_ptr(Matrix_base_adr, row, column, N) *(Matrix_base_adr + ((row)*(N)+(column))) #define matrix_adr(Matrix_base_adr, row, column, N) (Matrix_base_adr + ((row)*(N)+(column))) /* Column based */ #ifndef matrix_c_ptr # define matrix_c_ptr(Matrix_base_adr, row, column, M) *(Matrix_base_adr + ((row)+(M)*(column))) #endif #define matrix_c_adr(Matrix_base_adr, row, column, M) (Matrix_base_adr + ((row)+(M)*(column))) /* BWE factors to apply after packet loss */ #define BWE_AFTER_LOSS_Q16 63570 #ifdef __cplusplus } #endif #endif h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_Inlines.h0000644000175000017500000002437111513063445021327 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /*! \file SKP_Silk_Inlines.h * \brief SigProcFix_Inlines.h defines inline signal processing functions. */ #ifndef _SKP_SILK_FIX_INLINES_H_ #define _SKP_SILK_FIX_INLINES_H_ #ifdef __cplusplus extern "C" { #endif /* count leading zeros of SKP_int64 */ SKP_INLINE SKP_int32 SKP_Silk_CLZ64(SKP_int64 in) { SKP_int32 in_upper; in_upper = (SKP_int32)SKP_RSHIFT64(in, 32); if (in_upper == 0) { /* Search in the lower 32 bits */ return 32 + SKP_Silk_CLZ32( (SKP_int32) in ); } else { /* Search in the upper 32 bits */ return SKP_Silk_CLZ32( in_upper ); } } /* get number of leading zeros and fractional part (the bits right after the leading one */ SKP_INLINE void SKP_Silk_CLZ_FRAC(SKP_int32 in, /* I: input */ SKP_int32 *lz, /* O: number of leading zeros */ SKP_int32 *frac_Q7) /* O: the 7 bits right after the leading one */ { SKP_int32 leadingZeros; leadingZeros = SKP_Silk_CLZ32(in); *lz = leadingZeros; if( leadingZeros < 24 ) { *frac_Q7 = SKP_RSHIFT(in, 24 - leadingZeros) & 0x7F; } else { *frac_Q7 = SKP_LSHIFT(in, leadingZeros - 24) & 0x7F; } } /* Approximation of square root */ /* Accuracy: < +/- 10% for output values > 15 */ /* < +/- 2.5% for output values > 120 */ SKP_INLINE SKP_int32 SKP_Silk_SQRT_APPROX(SKP_int32 x) { SKP_int32 y, lz, frac_Q7; if( x <= 0 ) { return 0; } SKP_Silk_CLZ_FRAC(x, &lz, &frac_Q7); if( lz & 1 ) { y = 32768; } else { y = 46214; /* 46214 = sqrt(2) * 32768 */ } /* get scaling right */ y >>= SKP_RSHIFT(lz, 1); /* increment using fractional part of input */ y = SKP_SMLAWB(y, y, SKP_SMULBB(213, frac_Q7)); return y; } /* returns the number of left shifts before overflow for a 16 bit number (ITU definition with norm(0)=0) */ SKP_INLINE SKP_int32 SKP_Silk_norm16(SKP_int16 a) { SKP_int32 a32; /* if ((a == 0) || (a == SKP_int16_MIN)) return(0); */ if ((a << 1) == 0) return(0); a32 = a; /* if (a32 < 0) a32 = -a32 - 1; */ a32 ^= SKP_RSHIFT(a32, 31); return SKP_Silk_CLZ32(a32) - 17; } /* returns the number of left shifts before overflow for a 32 bit number (ITU definition with norm(0)=0) */ SKP_INLINE SKP_int32 SKP_Silk_norm32(SKP_int32 a) { /* if ((a == 0) || (a == SKP_int32_MIN)) return(0); */ if ((a << 1) == 0) return(0); /* if (a < 0) a = -a - 1; */ a ^= SKP_RSHIFT(a, 31); return SKP_Silk_CLZ32(a) - 1; } /* Divide two int32 values and return result as int32 in a given Q-domain */ SKP_INLINE SKP_int32 SKP_DIV32_varQ( /* O returns a good approximation of "(a32 << Qres) / b32" */ const SKP_int32 a32, /* I numerator (Q0) */ const SKP_int32 b32, /* I denominator (Q0) */ const SKP_int Qres /* I Q-domain of result (>= 0) */ ) { SKP_int a_headrm, b_headrm, lshift; SKP_int32 b32_inv, a32_nrm, b32_nrm, result; SKP_assert( b32 != 0 ); SKP_assert( Qres >= 0 ); /* Compute number of bits head room and normalize inputs */ a_headrm = SKP_Silk_CLZ32( SKP_abs(a32) ) - 1; a32_nrm = SKP_LSHIFT(a32, a_headrm); /* Q: a_headrm */ b_headrm = SKP_Silk_CLZ32( SKP_abs(b32) ) - 1; b32_nrm = SKP_LSHIFT(b32, b_headrm); /* Q: b_headrm */ /* Inverse of b32, with 14 bits of precision */ b32_inv = SKP_DIV32_16( SKP_int32_MAX >> 2, SKP_RSHIFT(b32_nrm, 16) ); /* Q: 29 + 16 - b_headrm */ /* First approximation */ result = SKP_SMULWB(a32_nrm, b32_inv); /* Q: 29 + a_headrm - b_headrm */ /* Compute residual by subtracting product of denominator and first approximation */ a32_nrm -= SKP_LSHIFT_ovflw( SKP_SMMUL(b32_nrm, result), 3 ); /* Q: a_headrm */ /* Refinement */ result = SKP_SMLAWB(result, a32_nrm, b32_inv); /* Q: 29 + a_headrm - b_headrm */ /* Convert to Qres domain */ lshift = 29 + a_headrm - b_headrm - Qres; if( lshift <= 0 ) { return SKP_LSHIFT_SAT32(result, -lshift); } else { if( lshift < 32){ return SKP_RSHIFT(result, lshift); } else { /* Avoid undefined result */ return 0; } } } /* Invert int32 value and return result as int32 in a given Q-domain */ SKP_INLINE SKP_int32 SKP_INVERSE32_varQ( /* O returns a good approximation of "(1 << Qres) / b32" */ const SKP_int32 b32, /* I denominator (Q0) */ const SKP_int Qres /* I Q-domain of result (> 0) */ ) { SKP_int b_headrm, lshift; SKP_int32 b32_inv, b32_nrm, err_Q32, result; SKP_assert( b32 != 0 ); SKP_assert( Qres > 0 ); /* Compute number of bits head room and normalize input */ b_headrm = SKP_Silk_CLZ32( SKP_abs(b32) ) - 1; b32_nrm = SKP_LSHIFT(b32, b_headrm); /* Q: b_headrm */ /* Inverse of b32, with 14 bits of precision */ b32_inv = SKP_DIV32_16( SKP_int32_MAX >> 2, SKP_RSHIFT(b32_nrm, 16) ); /* Q: 29 + 16 - b_headrm */ /* First approximation */ result = SKP_LSHIFT(b32_inv, 16); /* Q: 61 - b_headrm */ /* Compute residual by subtracting product of denominator and first approximation from one */ err_Q32 = SKP_LSHIFT_ovflw( -SKP_SMULWB(b32_nrm, b32_inv), 3 ); /* Q32 */ /* Refinement */ result = SKP_SMLAWW(result, err_Q32, b32_inv); /* Q: 61 - b_headrm */ /* Convert to Qres domain */ lshift = 61 - b_headrm - Qres; if( lshift <= 0 ) { return SKP_LSHIFT_SAT32(result, -lshift); } else { if( lshift < 32){ return SKP_RSHIFT(result, lshift); }else{ /* Avoid undefined result */ return 0; } } } #define SKP_SIN_APPROX_CONST0 (1073735400) #define SKP_SIN_APPROX_CONST1 (-82778932) #define SKP_SIN_APPROX_CONST2 (1059577) #define SKP_SIN_APPROX_CONST3 (-5013) /* Sine approximation; an input of 65536 corresponds to 2 * pi */ /* Uses polynomial expansion of the input to the power 0, 2, 4 and 6 */ /* The relative error is below 1e-5 */ SKP_INLINE SKP_int32 SKP_Silk_SIN_APPROX_Q24( /* O returns approximately 2^24 * sin(x * 2 * pi / 65536) */ SKP_int32 x ) { SKP_int y_Q30; /* Keep only bottom 16 bits (the function repeats itself with period 65536) */ x &= 65535; /* Split range in four quadrants */ if( x <= 32768 ) { if( x < 16384 ) { /* Return cos(pi/2 - x) */ x = 16384 - x; } else { /* Return cos(x - pi/2) */ x -= 16384; } if( x < 1100 ) { /* Special case: high accuracy */ return SKP_SMLAWB( 1 << 24, SKP_MUL( x, x ), -5053 ); } x = SKP_SMULWB( SKP_LSHIFT( x, 8 ), x ); /* contains x^2 in Q20 */ y_Q30 = SKP_SMLAWB( SKP_SIN_APPROX_CONST2, x, SKP_SIN_APPROX_CONST3 ); y_Q30 = SKP_SMLAWW( SKP_SIN_APPROX_CONST1, x, y_Q30 ); y_Q30 = SKP_SMLAWW( SKP_SIN_APPROX_CONST0 + 66, x, y_Q30 ); } else { if( x < 49152 ) { /* Return -cos(3*pi/2 - x) */ x = 49152 - x; } else { /* Return -cos(x - 3*pi/2) */ x -= 49152; } if( x < 1100 ) { /* Special case: high accuracy */ return SKP_SMLAWB( -1 << 24, SKP_MUL( x, x ), 5053 ); } x = SKP_SMULWB( SKP_LSHIFT( x, 8 ), x ); /* contains x^2 in Q20 */ y_Q30 = SKP_SMLAWB( -SKP_SIN_APPROX_CONST2, x, -SKP_SIN_APPROX_CONST3 ); y_Q30 = SKP_SMLAWW( -SKP_SIN_APPROX_CONST1, x, y_Q30 ); y_Q30 = SKP_SMLAWW( -SKP_SIN_APPROX_CONST0, x, y_Q30 ); } return SKP_RSHIFT_ROUND( y_Q30, 6 ); } /* Cosine approximation; an input of 65536 corresponds to 2 * pi */ /* The relative error is below 1e-5 */ SKP_INLINE SKP_int32 SKP_Silk_COS_APPROX_Q24( /* O returns approximately 2^24 * cos(x * 2 * pi / 65536) */ SKP_int32 x ) { return SKP_Silk_SIN_APPROX_Q24( x + 16384 ); } #ifdef __cplusplus } #endif #endif //_SKP_SILK_FIX_INLINES_H_ h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_shell_coder.c0000644000175000017500000001723211513063445022202 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main.h" /* shell coder; pulse-subframe length is hardcoded */ SKP_INLINE void combine_pulses( SKP_int *out, /* O: combined pulses vector [len] */ const SKP_int *in, /* I: input vector [2 * len] */ const SKP_int len /* I: number of OUTPUT samples */ ) { SKP_int k; for( k = 0; k < len; k++ ) { out[ k ] = in[ 2 * k ] + in[ 2 * k + 1 ]; } } SKP_INLINE void encode_split( SKP_Silk_range_coder_state *sRC, /* I/O: compressor data structure */ const SKP_int p_child1, /* I: pulse amplitude of first child subframe */ const SKP_int p, /* I: pulse amplitude of current subframe */ const SKP_uint16 *shell_table /* I: table of shell cdfs */ ) { const SKP_uint16 *cdf; if( p > 0 ) { cdf = &shell_table[ SKP_Silk_shell_code_table_offsets[ p ] ]; SKP_Silk_range_encoder( sRC, p_child1, cdf ); } } SKP_INLINE void decode_split( SKP_int *p_child1, /* O: pulse amplitude of first child subframe */ SKP_int *p_child2, /* O: pulse amplitude of second child subframe */ SKP_Silk_range_coder_state *sRC, /* I/O: compressor data structure */ const SKP_int p, /* I: pulse amplitude of current subframe */ const SKP_uint16 *shell_table /* I: table of shell cdfs */ ) { SKP_int cdf_middle; const SKP_uint16 *cdf; if( p > 0 ) { cdf_middle = SKP_RSHIFT( p, 1 ); cdf = &shell_table[ SKP_Silk_shell_code_table_offsets[ p ] ]; SKP_Silk_range_decoder( p_child1, sRC, cdf, cdf_middle ); p_child2[ 0 ] = p - p_child1[ 0 ]; } else { p_child1[ 0 ] = 0; p_child2[ 0 ] = 0; } } /* Shell encoder, operates on one shell code frame of 16 pulses */ void SKP_Silk_shell_encoder( SKP_Silk_range_coder_state *sRC, /* I/O compressor data structure */ const SKP_int *pulses0 /* I data: nonnegative pulse amplitudes */ ) { SKP_int pulses1[ 8 ], pulses2[ 4 ], pulses3[ 2 ], pulses4[ 1 ]; /* this function operates on one shell code frame of 16 pulses */ SKP_assert( SHELL_CODEC_FRAME_LENGTH == 16 ); /* tree representation per pulse-subframe */ combine_pulses( pulses1, pulses0, 8 ); combine_pulses( pulses2, pulses1, 4 ); combine_pulses( pulses3, pulses2, 2 ); combine_pulses( pulses4, pulses3, 1 ); encode_split( sRC, pulses3[ 0 ], pulses4[ 0 ], SKP_Silk_shell_code_table3 ); encode_split( sRC, pulses2[ 0 ], pulses3[ 0 ], SKP_Silk_shell_code_table2 ); encode_split( sRC, pulses1[ 0 ], pulses2[ 0 ], SKP_Silk_shell_code_table1 ); encode_split( sRC, pulses0[ 0 ], pulses1[ 0 ], SKP_Silk_shell_code_table0 ); encode_split( sRC, pulses0[ 2 ], pulses1[ 1 ], SKP_Silk_shell_code_table0 ); encode_split( sRC, pulses1[ 2 ], pulses2[ 1 ], SKP_Silk_shell_code_table1 ); encode_split( sRC, pulses0[ 4 ], pulses1[ 2 ], SKP_Silk_shell_code_table0 ); encode_split( sRC, pulses0[ 6 ], pulses1[ 3 ], SKP_Silk_shell_code_table0 ); encode_split( sRC, pulses2[ 2 ], pulses3[ 1 ], SKP_Silk_shell_code_table2 ); encode_split( sRC, pulses1[ 4 ], pulses2[ 2 ], SKP_Silk_shell_code_table1 ); encode_split( sRC, pulses0[ 8 ], pulses1[ 4 ], SKP_Silk_shell_code_table0 ); encode_split( sRC, pulses0[ 10 ], pulses1[ 5 ], SKP_Silk_shell_code_table0 ); encode_split( sRC, pulses1[ 6 ], pulses2[ 3 ], SKP_Silk_shell_code_table1 ); encode_split( sRC, pulses0[ 12 ], pulses1[ 6 ], SKP_Silk_shell_code_table0 ); encode_split( sRC, pulses0[ 14 ], pulses1[ 7 ], SKP_Silk_shell_code_table0 ); } /* Shell decoder, operates on one shell code frame of 16 pulses */ void SKP_Silk_shell_decoder( SKP_int *pulses0, /* O data: nonnegative pulse amplitudes */ SKP_Silk_range_coder_state *sRC, /* I/O compressor data structure */ const SKP_int pulses4 /* I number of pulses per pulse-subframe */ ) { SKP_int pulses3[ 2 ], pulses2[ 4 ], pulses1[ 8 ]; /* this function operates on one shell code frame of 16 pulses */ SKP_assert( SHELL_CODEC_FRAME_LENGTH == 16 ); decode_split( &pulses3[ 0 ], &pulses3[ 1 ], sRC, pulses4, SKP_Silk_shell_code_table3 ); decode_split( &pulses2[ 0 ], &pulses2[ 1 ], sRC, pulses3[ 0 ], SKP_Silk_shell_code_table2 ); decode_split( &pulses1[ 0 ], &pulses1[ 1 ], sRC, pulses2[ 0 ], SKP_Silk_shell_code_table1 ); decode_split( &pulses0[ 0 ], &pulses0[ 1 ], sRC, pulses1[ 0 ], SKP_Silk_shell_code_table0 ); decode_split( &pulses0[ 2 ], &pulses0[ 3 ], sRC, pulses1[ 1 ], SKP_Silk_shell_code_table0 ); decode_split( &pulses1[ 2 ], &pulses1[ 3 ], sRC, pulses2[ 1 ], SKP_Silk_shell_code_table1 ); decode_split( &pulses0[ 4 ], &pulses0[ 5 ], sRC, pulses1[ 2 ], SKP_Silk_shell_code_table0 ); decode_split( &pulses0[ 6 ], &pulses0[ 7 ], sRC, pulses1[ 3 ], SKP_Silk_shell_code_table0 ); decode_split( &pulses2[ 2 ], &pulses2[ 3 ], sRC, pulses3[ 1 ], SKP_Silk_shell_code_table2 ); decode_split( &pulses1[ 4 ], &pulses1[ 5 ], sRC, pulses2[ 2 ], SKP_Silk_shell_code_table1 ); decode_split( &pulses0[ 8 ], &pulses0[ 9 ], sRC, pulses1[ 4 ], SKP_Silk_shell_code_table0 ); decode_split( &pulses0[ 10 ], &pulses0[ 11 ], sRC, pulses1[ 5 ], SKP_Silk_shell_code_table0 ); decode_split( &pulses1[ 6 ], &pulses1[ 7 ], sRC, pulses2[ 3 ], SKP_Silk_shell_code_table1 ); decode_split( &pulses0[ 12 ], &pulses0[ 13 ], sRC, pulses1[ 6 ], SKP_Silk_shell_code_table0 ); decode_split( &pulses0[ 14 ], &pulses0[ 15 ], sRC, pulses1[ 7 ], SKP_Silk_shell_code_table0 ); } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_LTP_analysis_filter_FIX.c0000644000175000017500000001063511513063445024334 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" void SKP_Silk_LTP_analysis_filter_FIX( SKP_int16 *LTP_res, /* O: LTP residual signal of length NB_SUBFR * ( pre_length + subfr_length ) */ const SKP_int16 *x, /* I: Pointer to input signal with at least max( pitchL ) preceeding samples */ const SKP_int16 LTPCoef_Q14[ LTP_ORDER * NB_SUBFR ],/* I: LTP_ORDER LTP coefficients for each NB_SUBFR subframe */ const SKP_int pitchL[ NB_SUBFR ], /* I: Pitch lag, one for each subframe */ const SKP_int32 invGains_Qxx[ NB_SUBFR ], /* I: Inverse quantization gains, one for each subframe */ const SKP_int Qxx, /* I: Inverse quantization gains Q domain */ const SKP_int subfr_length, /* I: Length of each subframe */ const SKP_int pre_length /* I: Length of the preceeding samples starting at &x[0] for each subframe */ ) { const SKP_int16 *x_ptr, *x_lag_ptr; SKP_int16 Btmp_Q14[ LTP_ORDER ]; SKP_int16 *LTP_res_ptr; SKP_int k, i, j; SKP_int32 LTP_est; x_ptr = x; LTP_res_ptr = LTP_res; for( k = 0; k < NB_SUBFR; k++ ) { x_lag_ptr = x_ptr - pitchL[ k ]; for( i = 0; i < LTP_ORDER; i++ ) { Btmp_Q14[ i ] = LTPCoef_Q14[ k * LTP_ORDER + i ]; } /* LTP analysis FIR filter */ for( i = 0; i < subfr_length + pre_length; i++ ) { LTP_res_ptr[ i ] = x_ptr[ i ]; /* Long-term prediction */ LTP_est = SKP_SMULBB( x_lag_ptr[ LTP_ORDER / 2 ], Btmp_Q14[ 0 ] ); for( j = 1; j < LTP_ORDER; j++ ) { LTP_est = SKP_SMLABB_ovflw( LTP_est, x_lag_ptr[ LTP_ORDER / 2 - j ], Btmp_Q14[ j ] ); } LTP_est = SKP_RSHIFT_ROUND( LTP_est, 14 ); // round and -> Q0 /* Subtract long-term prediction */ LTP_res_ptr[ i ] = ( SKP_int16 )SKP_SAT16( ( SKP_int32 )x_ptr[ i ] - LTP_est ); /* Scale residual */ if( Qxx == 16 ) { LTP_res_ptr[ i ] = SKP_SMULWB( invGains_Qxx[ k ], LTP_res_ptr[ i ] ); } else { LTP_res_ptr[ i ] = ( SKP_int16 )SKP_CHECK_FIT16( SKP_RSHIFT64( SKP_SMULL( invGains_Qxx[ k ], LTP_res_ptr[ i ] ), Qxx ) ); } x_lag_ptr++; } /* Update pointers */ LTP_res_ptr += subfr_length + pre_length; x_ptr += subfr_length; } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_sort.c0000644000175000017500000001721411513063445020706 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* Insertion sort (fast for already almost sorted arrays): */ /* Best case: O(n) for an already sorted array */ /* Worst case: O(n^2) for an inversely sorted array */ /* */ /* To be implemented: */ /* Shell short: http://en.wikipedia.org/wiki/Shell_sort */ #include "SKP_Silk_SigProc_FIX.h" void SKP_Silk_insertion_sort_increasing( SKP_int32 *a, /* I/O: Unsorted / Sorted vector */ SKP_int *index, /* O: Index vector for the sorted elements */ const SKP_int L, /* I: Vector length */ const SKP_int K /* I: Number of correctly sorted positions */ ) { SKP_int32 value; SKP_int i, j; /* Safety checks */ SKP_assert( K > 0 ); SKP_assert( L > 0 ); SKP_assert( L >= K ); /* Write start indices in index vector */ for( i = 0; i < K; i++ ) { index[ i ] = i; } /* Sort vector elements by value, increasing order */ for( i = 1; i < K; i++ ) { value = a[ i ]; for( j = i - 1; ( j >= 0 ) && ( value < a[ j ] ); j-- ) { a[ j + 1 ] = a[ j ]; /* Shift value */ index[ j + 1 ] = index[ j ]; /* Shift index */ } a[ j + 1 ] = value; /* Write value */ index[ j + 1 ] = i; /* Write index */ } /* If less than L values are asked check the remaining values, */ /* but only spend CPU to ensure that the K first values are correct */ for( i = K; i < L; i++ ) { value = a[ i ]; if( value < a[ K - 1 ] ) { for( j = K - 2; ( j >= 0 ) && ( value < a[ j ] ); j-- ) { a[ j + 1 ] = a[ j ]; /* Shift value */ index[ j + 1 ] = index[ j ]; /* Shift index */ } a[ j + 1 ] = value; /* Write value */ index[ j + 1 ] = i; /* Write index */ } } } void SKP_Silk_insertion_sort_decreasing( SKP_int *a, /* I/O: Unsorted / Sorted vector */ SKP_int *index, /* O: Index vector for the sorted elements */ const SKP_int L, /* I: Vector length */ const SKP_int K /* I: Number of correctly sorted positions */ ) { SKP_int value; SKP_int i, j; /* Safety checks */ SKP_assert( K > 0 ); SKP_assert( L > 0 ); SKP_assert( L >= K ); /* Write start indices in index vector */ for( i = 0; i < K; i++ ) { index[ i ] = i; } /* Sort vector elements by value, decreasing order */ for( i = 1; i < K; i++ ) { value = a[ i ]; for( j = i - 1; ( j >= 0 ) && ( value > a[ j ] ); j-- ) { a[ j + 1 ] = a[ j ]; /* Shift value */ index[ j + 1 ] = index[ j ]; /* Shift index */ } a[ j + 1 ] = value; /* Write value */ index[ j + 1 ] = i; /* Write index */ } /* If less than L values are asked check the remaining values, */ /* but only spend CPU to ensure that the K first values are correct */ for( i = K; i < L; i++ ) { value = a[ i ]; if( value > a[ K - 1 ] ) { for( j = K - 2; ( j >= 0 ) && ( value > a[ j ] ); j-- ) { a[ j + 1 ] = a[ j ]; /* Shift value */ index[ j + 1 ] = index[ j ]; /* Shift index */ } a[ j + 1 ] = value; /* Write value */ index[ j + 1 ] = i; /* Write index */ } } } void SKP_Silk_insertion_sort_decreasing_int16( SKP_int16 *a, /* I/O: Unsorted / Sorted vector */ SKP_int *index, /* O: Index vector for the sorted elements */ const SKP_int L, /* I: Vector length */ const SKP_int K /* I: Number of correctly sorted positions */ ) { SKP_int i, j; SKP_int value; /* Safety checks */ SKP_assert( K > 0 ); SKP_assert( L > 0 ); SKP_assert( L >= K ); /* Write start indices in index vector */ for( i = 0; i < K; i++ ) { index[ i ] = i; } /* Sort vector elements by value, decreasing order */ for( i = 1; i < K; i++ ) { value = a[ i ]; for( j = i - 1; ( j >= 0 ) && ( value > a[ j ] ); j-- ) { a[ j + 1 ] = a[ j ]; /* Shift value */ index[ j + 1 ] = index[ j ]; /* Shift index */ } a[ j + 1 ] = value; /* Write value */ index[ j + 1 ] = i; /* Write index */ } /* If less than L values are asked check the remaining values, */ /* but only spend CPU to ensure that the K first values are correct */ for( i = K; i < L; i++ ) { value = a[ i ]; if( value > a[ K - 1 ] ) { for( j = K - 2; ( j >= 0 ) && ( value > a[ j ] ); j-- ) { a[ j + 1 ] = a[ j ]; /* Shift value */ index[ j + 1 ] = index[ j ]; /* Shift index */ } a[ j + 1 ] = value; /* Write value */ index[ j + 1 ] = i; /* Write index */ } } } void SKP_Silk_insertion_sort_increasing_all_values( SKP_int *a, /* I/O: Unsorted / Sorted vector */ const SKP_int L /* I: Vector length */ ) { SKP_int value; SKP_int i, j; /* Safety checks */ SKP_assert( L > 0 ); /* Sort vector elements by value, increasing order */ for( i = 1; i < L; i++ ) { value = a[ i ]; for( j = i - 1; ( j >= 0 ) && ( value < a[ j ] ); j-- ) { a[ j + 1 ] = a[ j ]; /* Shift value */ } a[ j + 1 ] = value; /* Write value */ } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_structs_FIX.h0000644000175000017500000002057711513063445022147 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #ifndef SKP_SILK_STRUCTS_FIX_H #define SKP_SILK_STRUCTS_FIX_H #include "SKP_Silk_typedef.h" #include "SKP_Silk_define_FIX.h" #include "SKP_Silk_main.h" #include "SKP_Silk_structs.h" #if LOW_COMPLEXITY_ONLY #include "SKP_Silk_resample_rom.h" #endif #ifdef __cplusplus extern "C" { #endif /********************************/ /* Noise shaping analysis state */ /********************************/ typedef struct { SKP_int LastGainIndex; SKP_int32 HarmBoost_smth_Q16; SKP_int32 HarmShapeGain_smth_Q16; SKP_int32 Tilt_smth_Q16; } SKP_Silk_shape_state_FIX; /********************************/ /* Prefilter state */ /********************************/ typedef struct { SKP_int16 sLTP_shp1[ LTP_BUF_LENGTH ]; SKP_int32 sAR_shp2_Q14[ SHAPE_LPC_ORDER_MAX ]; SKP_int16 sLTP_shp2_FIX[ LTP_BUF_LENGTH ]; SKP_int sLTP_shp_buf_idx1; SKP_int sAR_shp_buf_idx2; SKP_int sLTP_shp_buf_idx2; SKP_int32 sLF_AR_shp1_Q12; SKP_int32 sLF_MA_shp1_Q12; SKP_int32 sLF_AR_shp2_Q12; SKP_int32 sLF_MA_shp2_Q12; SKP_int sHarmHP; SKP_int32 rand_seed; SKP_int lagPrev; } SKP_Silk_prefilter_state_FIX; /*****************************/ /* Prediction analysis state */ /*****************************/ typedef struct { SKP_int pitch_LPC_win_length; SKP_int min_pitch_lag; /* Lowest possible pitch lag (samples) */ SKP_int max_pitch_lag; /* Highest possible pitch lag (samples) */ SKP_int prev_NLSFq_Q15[ MAX_LPC_ORDER ]; /* Prev. quant. normalized LSF vector */ } SKP_Silk_predict_state_FIX; /********************************/ /* Encoder state FIX */ /********************************/ typedef struct { SKP_Silk_encoder_state sCmn; /* Common struct, shared with floating-point code */ #if HIGH_PASS_INPUT SKP_int32 variable_HP_smth1_Q15; /* State of first smoother */ SKP_int32 variable_HP_smth2_Q15; /* State of second smoother */ #endif SKP_Silk_shape_state_FIX sShape; /* Shape state */ SKP_Silk_prefilter_state_FIX sPrefilt; /* Prefilter State */ SKP_Silk_predict_state_FIX sPred; /* Prediction state */ SKP_Silk_nsq_state sNSQ; /* Noise Shape Quantizer State */ SKP_Silk_nsq_state sNSQ_LBRR; /* Noise Shape Quantizer State ( for low bitrate redundancy ) */ /* Function pointer to noise shaping quantizer (will be set to SKP_Silk_NSQ or SKP_Silk_NSQ_del_dec) */ void (* NoiseShapingQuantizer)( SKP_Silk_encoder_state *, SKP_Silk_encoder_control *, SKP_Silk_nsq_state *, const SKP_int16 *, SKP_int *, const SKP_int, const SKP_int16 *, const SKP_int16 *, const SKP_int16 *, const SKP_int *, const SKP_int *, const SKP_int32 *, const SKP_int32 *, SKP_int, const SKP_int ); /* Buffer for find pitch and noise shape analysis */ SKP_array_of_int16_4_byte_aligned( x_buf, 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ); SKP_int LTPCorr_Q15; /* Normalized correlation from pitch lag estimator */ SKP_int mu_LTP_Q8; /* Rate-distortion tradeoff in LTP quantization */ SKP_int32 SNR_dB_Q7; /* Quality setting */ SKP_int32 avgGain_Q16; /* average gain during active speech */ SKP_int32 avgGain_Q16_one_bit_per_sample; /* average gain during active speech */ SKP_int BufferedInChannel_ms; /* Simulated number of ms buffer because of exceeded TargetRate_bps */ SKP_int speech_activity_Q8; /* Speech activity in Q8 */ SKP_int32 pitchEstimationThreshold_Q16; /* Threshold for pitch estimator */ /* Parameters For LTP scaling Control */ SKP_int prevLTPredCodGain_Q7; SKP_int HPLTPredCodGain_Q7; SKP_int32 inBandFEC_SNR_comp_Q8; /* Compensation to SNR_dB when using inband FEC Voiced */ } SKP_Silk_encoder_state_FIX; /************************/ /* Encoder control FIX */ /************************/ typedef struct { SKP_Silk_encoder_control sCmn; /* Common struct, shared with floating-point code */ /* Prediction and coding parameters */ SKP_int32 Gains_Q16[ NB_SUBFR ]; SKP_array_of_int16_4_byte_aligned( PredCoef_Q12[ 2 ], MAX_LPC_ORDER ); SKP_int16 LTPCoef_Q14[ LTP_ORDER * NB_SUBFR ]; SKP_int LTP_scale_Q14; /* Noise shaping parameters */ /* Testing */ SKP_array_of_int16_4_byte_aligned( AR1_Q13, NB_SUBFR * SHAPE_LPC_ORDER_MAX ); SKP_array_of_int16_4_byte_aligned( AR2_Q13, NB_SUBFR * SHAPE_LPC_ORDER_MAX ); SKP_int32 LF_shp_Q14[ NB_SUBFR ]; /* Packs two int16 coefficients per int32 value */ SKP_int GainsPre_Q14[ NB_SUBFR ]; SKP_int HarmBoost_Q14[ NB_SUBFR ]; SKP_int Tilt_Q14[ NB_SUBFR ]; SKP_int HarmShapeGain_Q14[ NB_SUBFR ]; SKP_int Lambda_Q10; SKP_int input_quality_Q14; SKP_int coding_quality_Q14; SKP_int32 pitch_freq_low_Hz; SKP_int current_SNR_dB_Q7; /* measures */ SKP_int sparseness_Q8; SKP_int LTPredCodGain_Q7; SKP_int input_quality_bands_Q15[ VAD_N_BANDS ]; SKP_int input_tilt_Q15; SKP_int32 ResNrg[ NB_SUBFR ]; /* Residual energy per subframe */ SKP_int ResNrgQ[ NB_SUBFR ]; /* Q domain for the residual energy > 0 */ } SKP_Silk_encoder_control_FIX; #ifdef __cplusplus } #endif #endif h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_init_encoder_FIX.c0000644000175000017500000000601311513063445023062 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" /*********************************/ /* Initialize Silk Encoder state */ /*********************************/ SKP_int SKP_Silk_init_encoder_FIX( SKP_Silk_encoder_state_FIX *psEnc /* I/O Pointer to Silk encoder state */ ) { SKP_int ret = 0; /* Clear the entire encoder state */ SKP_memset( psEnc, 0, sizeof( SKP_Silk_encoder_state_FIX ) ); /* Initialize to 24 kHz sampling, 20 ms packets, 25 kbps, 0% packet loss, and init non-zero values */ ret = SKP_Silk_control_encoder_FIX( psEnc, 24, 20, 25, 0, 0, 0, 10, 1 ); #if HIGH_PASS_INPUT psEnc->variable_HP_smth1_Q15 = 200844; /* = SKP_Silk_log2(70)_Q0; */ psEnc->variable_HP_smth2_Q15 = 200844; /* = SKP_Silk_log2(70)_Q0; */ #endif /* Used to deactivate e.g. LSF interpolation and fluctuation reduction */ psEnc->sCmn.first_frame_after_reset = 1; psEnc->sCmn.fs_kHz_changed = 0; psEnc->sCmn.LBRR_enabled = 0; /* Initialize Silk VAD */ ret += SKP_Silk_VAD_Init( &psEnc->sCmn.sVAD ); /* Initialize NSQ */ psEnc->sNSQ.prev_inv_gain_Q16 = 65536; /* 1.0 in Q16 */ psEnc->sNSQ_LBRR.prev_inv_gain_Q16 = 65536; /* 1.0 in Q16 */ psEnc->sCmn.bitstream_v = USE_BIT_STREAM_V; return( ret ); } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_lin2log.c0000644000175000017500000000555311513063445021270 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_lin2log.c * * * * Convert input to a log scale * * Approximation of 128 * log2() * * * * Copyright 2006 (c), Skype Limited * * Date: 060221 * * */ #include "SKP_Silk_SigProc_FIX.h" /* Approximation of 128 * log2() (very close inverse of approx 2^() below) */ /* Convert input to a log scale */ SKP_int32 SKP_Silk_lin2log( const SKP_int32 inLin ) /* I: Input in linear scale */ { SKP_int32 lz, frac_Q7; SKP_Silk_CLZ_FRAC( inLin, &lz, &frac_Q7 ); /* Piece-wise parabolic approximation */ return( SKP_LSHIFT( 31 - lz, 7 ) + SKP_SMLAWB( frac_Q7, SKP_MUL( frac_Q7, 128 - frac_Q7 ), 179 ) ); } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_SDK_API.h0000644000175000017500000001755311513063445021044 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #ifndef SKP_SILK_SDK_API_H #define SKP_SILK_SDK_API_H #include "SKP_Silk_control.h" #include "SKP_Silk_typedef.h" #include "SKP_Silk_errors.h" #ifdef __cplusplus extern "C" { #endif #define SILK_MAX_FRAMES_PER_PACKET 5 /* Struct for TOC (Table of Contents) */ typedef struct { SKP_int framesInPacket; /* Number of 20 ms frames in packet */ SKP_int fs_kHz; /* Sampling frequency in packet */ SKP_int inbandLBRR; /* Does packet contain LBRR information */ SKP_int corrupt; /* Packet is corrupt */ SKP_int vadFlags[ SILK_MAX_FRAMES_PER_PACKET ]; /* VAD flag for each frame in packet */ SKP_int sigtypeFlags[ SILK_MAX_FRAMES_PER_PACKET ]; /* Signal type for each frame in packet */ } SKP_Silk_TOC_struct; /****************************************/ /* Encoder functions */ /****************************************/ /***********************************************/ /* Get size in bytes of the Silk encoder state */ /***********************************************/ SKP_int SKP_Silk_SDK_Get_Encoder_Size( SKP_int32 *encSizeBytes /* O: Number of bytes in SILK encoder state */ ); /*************************/ /* Init or reset encoder */ /*************************/ SKP_int SKP_Silk_SDK_InitEncoder( void *encState, /* I/O: State */ SKP_SILK_SDK_EncControlStruct *encStatus /* O: Encoder Status */ ); /***************************************/ /* Read control structure from encoder */ /***************************************/ SKP_int SKP_Silk_SDK_QueryEncoder( const void *encState, /* I: State */ SKP_SILK_SDK_EncControlStruct *encStatus /* O: Encoder Status */ ); /**************************/ /* Encode frame with Silk */ /**************************/ SKP_int SKP_Silk_SDK_Encode( void *encState, /* I/O: State */ const SKP_SILK_SDK_EncControlStruct *encControl, /* I: Control status */ const SKP_int16 *samplesIn, /* I: Speech sample input vector */ SKP_int nSamplesIn, /* I: Number of samples in input vector */ SKP_uint8 *outData, /* O: Encoded output vector */ SKP_int16 *nBytesOut /* I/O: Number of Bytes in outData (input: Max Bytes) */ ); /****************************************/ /* Decoder functions */ /****************************************/ /***********************************************/ /* Get size in bytes of the Silk decoder state */ /***********************************************/ SKP_int SKP_Silk_SDK_Get_Decoder_Size( SKP_int32 *decSizeBytes /* O: Number of bytes in SILK decoder state */ ); /*************************/ /* Init or Reset decoder */ /*************************/ SKP_int SKP_Silk_SDK_InitDecoder( void *decState /* I/O: State */ ); /******************/ /* Decode a frame */ /******************/ SKP_int SKP_Silk_SDK_Decode( void* decState, /* I/O: State */ SKP_SILK_SDK_DecControlStruct* decControl, /* I/O: Control Structure */ SKP_int lostFlag, /* I: 0: no loss, 1 loss */ const SKP_uint8 *inData, /* I: Encoded input vector */ const SKP_int nBytesIn, /* I: Number of input Bytes */ SKP_int16 *samplesOut, /* O: Decoded output speech vector */ SKP_int16 *nSamplesOut /* I/O: Number of samples (vector/decoded) */ ); /***************************************************************/ /* Find Low Bit Rate Redundancy (LBRR) information in a packet */ /***************************************************************/ void SKP_Silk_SDK_search_for_LBRR( void *decState, /* I: Decoder state, to select bitstream version only */ const SKP_uint8 *inData, /* I: Encoded input vector */ const SKP_int16 nBytesIn, /* I: Number of input Bytes */ SKP_int lost_offset, /* I: Offset from lost packet */ SKP_uint8 *LBRRData, /* O: LBRR payload */ SKP_int16 *nLBRRBytes /* O: Number of LBRR Bytes */ ); /************************************/ /* Get type of content for a packet */ /************************************/ void SKP_Silk_SDK_get_TOC( void *decState, /* I: Decoder state, to select bitstream version only */ const SKP_uint8 *inData, /* I: Encoded input vector */ const SKP_int16 nBytesIn, /* I: Number of input bytes */ SKP_Silk_TOC_struct *Silk_TOC /* O: Type of content */ ); /**************************/ /* Get the version number */ /**************************/ /* Return a pointer to string specifying the version */ const char *SKP_Silk_SDK_get_version(); #ifdef __cplusplus } #endif #endif h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_k2a.c0000644000175000017500000000635411513063445020377 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_k2a.c * * * * Step up function, converts reflection coefficients to prediction * * coefficients * * * * Copyright 2008 (c), Skype Limited * * Date: 080103 * * */ #include "SKP_Silk_SigProc_FIX.h" /* Step up function, converts reflection coefficients to prediction coefficients */ void SKP_Silk_k2a( SKP_int32 *A_Q24, /* O: Prediction coefficients [order] Q24 */ const SKP_int16 *rc_Q15, /* I: Reflection coefficients [order] Q15 */ const SKP_int32 order /* I: Prediction order */ ) { SKP_int k, n; SKP_int32 Atmp[ SigProc_MAX_ORDER_LPC ]; for( k = 0; k < order; k++ ) { for( n = 0; n < k; n++ ) { Atmp[ n ] = A_Q24[ n ]; } for( n = 0; n < k; n++ ) { A_Q24[ n ] = SKP_SMLAWB( A_Q24[ n ], SKP_LSHIFT( Atmp[ k - n - 1 ], 1 ), rc_Q15[ k ] ); } A_Q24[ k ] = -SKP_LSHIFT( (SKP_int32)rc_Q15[ k ], 9 ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_VAD.c0000644000175000017500000003314511513063445020332 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * File Name: SKP_Silk_VAD.c * Description: Silk VAD. */ #include #include "SKP_Silk_main.h" /**********************************/ /* Initialization of the Silk VAD */ /**********************************/ SKP_int SKP_Silk_VAD_Init( /* O Return value, 0 if success */ SKP_Silk_VAD_state *psSilk_VAD /* I/O Pointer to Silk VAD state */ ) { SKP_int b, ret = 0; /* reset state memory */ SKP_memset( psSilk_VAD, 0, sizeof( SKP_Silk_VAD_state ) ); /* init noise levels */ /* Initialize array with approx pink noise levels (psd proportional to inverse of frequency) */ for( b = 0; b < VAD_N_BANDS; b++ ) { psSilk_VAD->NoiseLevelBias[ b ] = SKP_max_32( SKP_DIV32_16( VAD_NOISE_LEVELS_BIAS, b + 1 ), 1 ); } /* Initialize state */ for( b = 0; b < VAD_N_BANDS; b++ ) { psSilk_VAD->NL[ b ] = SKP_MUL( 100, psSilk_VAD->NoiseLevelBias[ b ] ); psSilk_VAD->inv_NL[ b ] = SKP_DIV32( SKP_int32_MAX, psSilk_VAD->NL[ b ] ); } psSilk_VAD->counter = 15; /* init smoothed energy-to-noise ratio*/ for( b = 0; b < VAD_N_BANDS; b++ ) { psSilk_VAD->NrgRatioSmth_Q8[ b ] = 100 * 256; /* 100 * 256 --> 20 dB SNR */ } return( ret ); } /* Weighting factors for tilt measure */ const static SKP_int32 tiltWeights[ VAD_N_BANDS ] = { 30000, 6000, -12000, -12000 }; /***************************************/ /* Get the speech activity level in Q8 */ /***************************************/ SKP_int SKP_Silk_VAD_GetSA_Q8( /* O Return value, 0 if success */ SKP_Silk_VAD_state *psSilk_VAD, /* I/O Silk VAD state */ SKP_int *pSA_Q8, /* O Speech activity level in Q8 */ SKP_int *pSNR_dB_Q7, /* O SNR for current frame in Q7 */ SKP_int pQuality_Q15[ VAD_N_BANDS ], /* O Smoothed SNR for each band */ SKP_int *pTilt_Q15, /* O current frame's frequency tilt */ const SKP_int16 pIn[], /* I PCM input [framelength] */ const SKP_int framelength /* I Input frame length */ ) { SKP_int SA_Q15, input_tilt; SKP_int32 scratch[ 3 * MAX_FRAME_LENGTH / 2 ]; SKP_int decimated_framelength, dec_subframe_length, dec_subframe_offset, SNR_Q7, i, b, s; SKP_int32 sumSquared, smooth_coef_Q16; SKP_int16 HPstateTmp; SKP_int16 X[ VAD_N_BANDS ][ MAX_FRAME_LENGTH / 2 ]; SKP_int32 Xnrg[ VAD_N_BANDS ]; SKP_int32 NrgToNoiseRatio_Q8[ VAD_N_BANDS ]; SKP_int32 speech_nrg, x_tmp; SKP_int ret = 0; /* Safety checks */ SKP_assert( VAD_N_BANDS == 4 ); SKP_assert( MAX_FRAME_LENGTH >= framelength ); SKP_assert( framelength <= 512 ); /***********************/ /* Filter and Decimate */ /***********************/ /* 0-8 kHz to 0-4 kHz and 4-8 kHz */ SKP_Silk_ana_filt_bank_1( pIn, &psSilk_VAD->AnaState[ 0 ], &X[ 0 ][ 0 ], &X[ 3 ][ 0 ], &scratch[ 0 ], framelength ); /* 0-4 kHz to 0-2 kHz and 2-4 kHz */ SKP_Silk_ana_filt_bank_1( &X[ 0 ][ 0 ], &psSilk_VAD->AnaState1[ 0 ], &X[ 0 ][ 0 ], &X[ 2 ][ 0 ], &scratch[ 0 ], SKP_RSHIFT( framelength, 1 ) ); /* 0-2 kHz to 0-1 kHz and 1-2 kHz */ SKP_Silk_ana_filt_bank_1( &X[ 0 ][ 0 ], &psSilk_VAD->AnaState2[ 0 ], &X[ 0 ][ 0 ], &X[ 1 ][ 0 ], &scratch[ 0 ], SKP_RSHIFT( framelength, 2 ) ); /*********************************************/ /* HP filter on lowest band (differentiator) */ /*********************************************/ decimated_framelength = SKP_RSHIFT( framelength, 3 ); X[ 0 ][ decimated_framelength - 1 ] = SKP_RSHIFT( X[ 0 ][ decimated_framelength - 1 ], 1 ); HPstateTmp = X[ 0 ][ decimated_framelength - 1 ]; for( i = decimated_framelength - 1; i > 0; i-- ) { X[ 0 ][ i - 1 ] = SKP_RSHIFT( X[ 0 ][ i - 1 ], 1 ); X[ 0 ][ i ] -= X[ 0 ][ i - 1 ]; } X[ 0 ][ 0 ] -= psSilk_VAD->HPstate; psSilk_VAD->HPstate = HPstateTmp; /*************************************/ /* Calculate the energy in each band */ /*************************************/ for( b = 0; b < VAD_N_BANDS; b++ ) { /* Find the decimated framelength in the non-uniformly divided bands */ decimated_framelength = SKP_RSHIFT( framelength, SKP_min_int( VAD_N_BANDS - b, VAD_N_BANDS - 1 ) ); /* Split length into subframe lengths */ dec_subframe_length = SKP_RSHIFT( decimated_framelength, VAD_INTERNAL_SUBFRAMES_LOG2 ); dec_subframe_offset = 0; /* Compute energy per sub-frame */ /* initialize with summed energy of last subframe */ Xnrg[ b ] = psSilk_VAD->XnrgSubfr[ b ]; for( s = 0; s < VAD_INTERNAL_SUBFRAMES; s++ ) { sumSquared = 0; for( i = 0; i < dec_subframe_length; i++ ) { /* The energy will be less than dec_subframe_length * ( SKP_int16_MIN / 8 )^2. */ /* Therefore we can accumulate with no risk of overflow (unless dec_subframe_length > 128) */ x_tmp = SKP_RSHIFT( X[ b ][ i + dec_subframe_offset ], 3 ); sumSquared = SKP_SMLABB( sumSquared, x_tmp, x_tmp ); /* Safety check */ SKP_assert( sumSquared >= 0 ); } /* add/saturate summed energy of current subframe */ if( s < VAD_INTERNAL_SUBFRAMES - 1 ) { Xnrg[ b ] = SKP_ADD_POS_SAT32( Xnrg[ b ], sumSquared ); } else { /* look-ahead subframe */ Xnrg[ b ] = SKP_ADD_POS_SAT32( Xnrg[ b ], SKP_RSHIFT( sumSquared, 1 ) ); } dec_subframe_offset += dec_subframe_length; } psSilk_VAD->XnrgSubfr[ b ] = sumSquared; } /********************/ /* Noise estimation */ /********************/ SKP_Silk_VAD_GetNoiseLevels( &Xnrg[ 0 ], psSilk_VAD ); /***********************************************/ /* Signal-plus-noise to noise ratio estimation */ /***********************************************/ sumSquared = 0; input_tilt = 0; for( b = 0; b < VAD_N_BANDS; b++ ) { speech_nrg = Xnrg[ b ] - psSilk_VAD->NL[ b ]; if( speech_nrg > 0 ) { /* Divide, with sufficient resolution */ if( ( Xnrg[ b ] & 0xFF800000 ) == 0 ) { NrgToNoiseRatio_Q8[ b ] = SKP_DIV32( SKP_LSHIFT( Xnrg[ b ], 8 ), psSilk_VAD->NL[ b ] + 1 ); } else { NrgToNoiseRatio_Q8[ b ] = SKP_DIV32( Xnrg[ b ], SKP_RSHIFT( psSilk_VAD->NL[ b ], 8 ) + 1 ); } /* Convert to log domain */ SNR_Q7 = SKP_Silk_lin2log( NrgToNoiseRatio_Q8[ b ] ) - 8 * 128; /* Sum-of-squares */ sumSquared = SKP_SMLABB( sumSquared, SNR_Q7, SNR_Q7 ); /* Q14 */ /* Tilt measure */ if( speech_nrg < ( 1 << 20 ) ) { /* Scale down SNR value for small subband speech energies */ SNR_Q7 = SKP_SMULWB( SKP_LSHIFT( SKP_Silk_SQRT_APPROX( speech_nrg ), 6 ), SNR_Q7 ); } input_tilt = SKP_SMLAWB( input_tilt, tiltWeights[ b ], SNR_Q7 ); } else { NrgToNoiseRatio_Q8[ b ] = 256; } } /* Mean-of-squares */ sumSquared = SKP_DIV32_16( sumSquared, VAD_N_BANDS ); /* Q14 */ /* Root-mean-square approximation, scale to dBs, and write to output pointer */ *pSNR_dB_Q7 = ( SKP_int16 )( 3 * SKP_Silk_SQRT_APPROX( sumSquared ) ); /* Q7 */ /*********************************/ /* Speech Probability Estimation */ /*********************************/ SA_Q15 = SKP_Silk_sigm_Q15( SKP_SMULWB( VAD_SNR_FACTOR_Q16, *pSNR_dB_Q7 ) - VAD_NEGATIVE_OFFSET_Q5 ); /**************************/ /* Frequency Tilt Measure */ /**************************/ *pTilt_Q15 = SKP_LSHIFT( SKP_Silk_sigm_Q15( input_tilt ) - 16384, 1 ); /**************************************************/ /* Scale the sigmoid output based on power levels */ /**************************************************/ speech_nrg = 0; for( b = 0; b < VAD_N_BANDS; b++ ) { /* Accumulate signal-without-noise energies, higher frequency bands have more weight */ speech_nrg += ( b + 1 ) * SKP_RSHIFT( Xnrg[ b ] - psSilk_VAD->NL[ b ], 4 ); } /* Power scaling */ if( speech_nrg <= 0 ) { SA_Q15 = SKP_RSHIFT( SA_Q15, 1 ); } else if( speech_nrg < 32768 ) { /* square-root */ speech_nrg = SKP_Silk_SQRT_APPROX( SKP_LSHIFT( speech_nrg, 15 ) ); SA_Q15 = SKP_SMULWB( 32768 + speech_nrg, SA_Q15 ); } /* Copy the resulting speech activity in Q8 to *pSA_Q8 */ *pSA_Q8 = SKP_min_int( SKP_RSHIFT( SA_Q15, 7 ), SKP_uint8_MAX ); /***********************************/ /* Energy Level and SNR estimation */ /***********************************/ /* smoothing coefficient */ smooth_coef_Q16 = SKP_SMULWB( VAD_SNR_SMOOTH_COEF_Q18, SKP_SMULWB( SA_Q15, SA_Q15 ) ); for( b = 0; b < VAD_N_BANDS; b++ ) { /* compute smoothed energy-to-noise ratio per band */ psSilk_VAD->NrgRatioSmth_Q8[ b ] = SKP_SMLAWB( psSilk_VAD->NrgRatioSmth_Q8[ b ], NrgToNoiseRatio_Q8[ b ] - psSilk_VAD->NrgRatioSmth_Q8[ b ], smooth_coef_Q16 ); /* signal to noise ratio in dB per band */ SNR_Q7 = 3 * ( SKP_Silk_lin2log( psSilk_VAD->NrgRatioSmth_Q8[b] ) - 8 * 128 ); /* quality = sigmoid( 0.25 * ( SNR_dB - 16 ) ); */ pQuality_Q15[ b ] = SKP_Silk_sigm_Q15( SKP_RSHIFT( SNR_Q7 - 16 * 128, 4 ) ); } return( ret ); } /**************************/ /* Noise level estimation */ /**************************/ void SKP_Silk_VAD_GetNoiseLevels( const SKP_int32 pX[ VAD_N_BANDS ], /* I subband energies */ SKP_Silk_VAD_state *psSilk_VAD /* I/O Pointer to Silk VAD state */ ) { SKP_int k; SKP_int32 nl, nrg, inv_nrg; SKP_int coef, min_coef; /* Initially faster smoothing */ if( psSilk_VAD->counter < 1000 ) { /* 1000 = 20 sec */ min_coef = SKP_DIV32_16( SKP_int16_MAX, SKP_RSHIFT( psSilk_VAD->counter, 4 ) + 1 ); } else { min_coef = 0; } for( k = 0; k < VAD_N_BANDS; k++ ) { /* Get old noise level estimate for current band */ nl = psSilk_VAD->NL[ k ]; SKP_assert( nl >= 0 ); /* Add bias */ nrg = SKP_ADD_POS_SAT32( pX[ k ], psSilk_VAD->NoiseLevelBias[ k ] ); SKP_assert( nrg > 0 ); /* Invert energies */ inv_nrg = SKP_DIV32( SKP_int32_MAX, nrg ); SKP_assert( inv_nrg >= 0 ); /* Less update when subband energy is high */ if( nrg > SKP_LSHIFT( nl, 3 ) ) { coef = VAD_NOISE_LEVEL_SMOOTH_COEF_Q16 >> 3; } else if( nrg < nl ) { coef = VAD_NOISE_LEVEL_SMOOTH_COEF_Q16; } else { coef = SKP_SMULWB( SKP_SMULWW( inv_nrg, nl ), VAD_NOISE_LEVEL_SMOOTH_COEF_Q16 << 1 ); } /* Initially faster smoothing */ coef = SKP_max_int( coef, min_coef ); /* Smooth inverse energies */ psSilk_VAD->inv_NL[ k ] = SKP_SMLAWB( psSilk_VAD->inv_NL[ k ], inv_nrg - psSilk_VAD->inv_NL[ k ], coef ); SKP_assert( psSilk_VAD->inv_NL[ k ] >= 0 ); /* Compute noise level by inverting again */ nl = SKP_DIV32( SKP_int32_MAX, psSilk_VAD->inv_NL[ k ] ); SKP_assert( nl >= 0 ); /* Limit noise levels (guarantee 7 bits of head room) */ nl = SKP_min( nl, 0x00FFFFFF ); /* Store as part of state */ psSilk_VAD->NL[ k ] = nl; } /* Increment frame counter */ psSilk_VAD->counter++; } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_NLSF2A.c0000644000175000017500000001425411513063445020645 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* conversion between prediction filter coefficients and LSFs */ /* order should be even */ /* a piecewise linear approximation maps LSF <-> cos(LSF) */ /* therefore the result is not accurate LSFs, but the two */ /* function are accurate inverses of each other */ #include "SKP_Silk_SigProc_FIX.h" /* helper function for NLSF2A(..) */ SKP_INLINE void SKP_Silk_NLSF2A_find_poly( SKP_int32 *out, /* o intermediate polynomial, Q20 */ const SKP_int32 *cLSF, /* i vector of interleaved 2*cos(LSFs), Q20 */ SKP_int dd /* i polynomial order (= 1/2 * filter order) */ ) { SKP_int k, n; SKP_int32 ftmp; out[0] = SKP_LSHIFT( 1, 20 ); out[1] = -cLSF[0]; for( k = 1; k < dd; k++ ) { ftmp = cLSF[2*k]; // Q20 out[k+1] = SKP_LSHIFT( out[k-1], 1 ) - (SKP_int32)SKP_RSHIFT_ROUND64( SKP_SMULL( ftmp, out[k] ), 20 ); for( n = k; n > 1; n-- ) { out[n] += out[n-2] - (SKP_int32)SKP_RSHIFT_ROUND64( SKP_SMULL( ftmp, out[n-1] ), 20 ); } out[1] -= ftmp; } } /* compute whitening filter coefficients from normalized line spectral frequencies */ void SKP_Silk_NLSF2A( SKP_int16 *a, /* o monic whitening filter coefficients in Q12, [d] */ const SKP_int *NLSF, /* i normalized line spectral frequencies in Q15, [d] */ const SKP_int d /* i filter order (should be even) */ ) { SKP_int k, i, dd; SKP_int32 cos_LSF_Q20[SigProc_MAX_ORDER_LPC]; SKP_int32 P[SigProc_MAX_ORDER_LPC/2+1], Q[SigProc_MAX_ORDER_LPC/2+1]; SKP_int32 Ptmp, Qtmp; SKP_int32 f_int; SKP_int32 f_frac; SKP_int32 cos_val, delta; SKP_int32 a_int32[SigProc_MAX_ORDER_LPC]; SKP_int32 maxabs, absval, idx=0, sc_Q16; SKP_assert(LSF_COS_TAB_SZ_FIX == 128); /* convert LSFs to 2*cos(LSF(i)), using piecewise linear curve from table */ for( k = 0; k < d; k++ ) { SKP_assert(NLSF[k] >= 0 ); SKP_assert(NLSF[k] <= 32767 ); /* f_int on a scale 0-127 (rounded down) */ f_int = SKP_RSHIFT( NLSF[k], 15 - 7 ); /* f_frac, range: 0..255 */ f_frac = NLSF[k] - SKP_LSHIFT( f_int, 15 - 7 ); SKP_assert(f_int >= 0); SKP_assert(f_int < LSF_COS_TAB_SZ_FIX ); /* Read start and end value from table */ cos_val = SKP_Silk_LSFCosTab_FIX_Q12[ f_int ]; /* Q12 */ delta = SKP_Silk_LSFCosTab_FIX_Q12[ f_int + 1 ] - cos_val; /* Q12, with a range of 0..200 */ /* Linear interpolation */ cos_LSF_Q20[k] = SKP_LSHIFT( cos_val, 8 ) + SKP_MUL( delta, f_frac ); /* Q20 */ } dd = SKP_RSHIFT( d, 1 ); /* generate even and odd polynomials using convolution */ SKP_Silk_NLSF2A_find_poly( P, &cos_LSF_Q20[0], dd ); SKP_Silk_NLSF2A_find_poly( Q, &cos_LSF_Q20[1], dd ); /* convert even and odd polynomials to SKP_int32 Q12 filter coefs */ for( k = 0; k < dd; k++ ) { Ptmp = P[k+1] + P[k]; Qtmp = Q[k+1] - Q[k]; /* the Ptmp and Qtmp values at this stage need to fit in int32 */ a_int32[k] = -SKP_RSHIFT_ROUND( Ptmp + Qtmp, 9 ); /* Q20 -> Q12 */ a_int32[d-k-1] = SKP_RSHIFT_ROUND( Qtmp - Ptmp, 9 ); /* Q20 -> Q12 */ } /* Limit the maximum absolute value of the prediction coefficients */ for( i = 0; i < 10; i++ ) { /* Find maximum absolute value and its index */ maxabs = 0; for( k = 0; k < d; k++ ) { absval = SKP_abs( a_int32[k] ); if( absval > maxabs ) { maxabs = absval; idx = k; } } if( maxabs > SKP_int16_MAX ) { /* Reduce magnitude of prediction coefficients */ sc_Q16 = 65470 - SKP_DIV32( SKP_MUL( 65470 >> 2, maxabs - SKP_int16_MAX ), SKP_RSHIFT32( SKP_MUL( maxabs, idx + 1), 2 ) ); SKP_Silk_bwexpander_32( a_int32, d, sc_Q16 ); } else { break; } } /* Reached the last iteration */ if( i == 10 ) { SKP_assert(0); for( k = 0; k < d; k++ ) { a_int32[k] = SKP_SAT16( a_int32[k] ); } } /* Return as SKP_int16 Q12 coefficients */ for( k = 0; k < d; k++ ) { a[k] = (SKP_int16)a_int32[k]; } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_tables_LTP.c0000644000175000017500000001722511513063445021712 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_tables.h" const SKP_uint16 SKP_Silk_LTP_per_index_CDF[ 4 ] = { 0, 20992, 40788, 65535 }; const SKP_int SKP_Silk_LTP_per_index_CDF_offset = 1; const SKP_uint16 SKP_Silk_LTP_gain_CDF_0[ 11 ] = { 0, 49380, 54463, 56494, 58437, 60101, 61683, 62985, 64066, 64823, 65535 }; const SKP_uint16 SKP_Silk_LTP_gain_CDF_1[ 21 ] = { 0, 25290, 30654, 35710, 40386, 42937, 45250, 47459, 49411, 51348, 52974, 54517, 55976, 57423, 58865, 60285, 61667, 62895, 63827, 64724, 65535 }; const SKP_uint16 SKP_Silk_LTP_gain_CDF_2[ 41 ] = { 0, 4958, 9439, 13581, 17638, 21651, 25015, 28025, 30287, 32406, 34330, 36240, 38130, 39790, 41281, 42764, 44229, 45676, 47081, 48431, 49675, 50849, 51932, 52966, 53957, 54936, 55869, 56789, 57708, 58504, 59285, 60043, 60796, 61542, 62218, 62871, 63483, 64076, 64583, 65062, 65535 }; const SKP_int SKP_Silk_LTP_gain_CDF_offsets[ 3 ] = { 1, 3, 10 }; const SKP_int32 SKP_Silk_LTP_gain_middle_avg_RD_Q14 = 11010; const SKP_int16 SKP_Silk_LTP_gain_BITS_Q6_0[ 10 ] = { 26, 236, 321, 325, 339, 344, 362, 379, 412, 418 }; const SKP_int16 SKP_Silk_LTP_gain_BITS_Q6_1[ 20 ] = { 88, 231, 237, 244, 300, 309, 313, 324, 325, 341, 346, 351, 352, 352, 354, 356, 367, 393, 396, 406 }; const SKP_int16 SKP_Silk_LTP_gain_BITS_Q6_2[ 40 ] = { 238, 248, 255, 257, 258, 274, 284, 311, 317, 326, 326, 327, 339, 349, 350, 351, 352, 355, 358, 366, 371, 379, 383, 387, 388, 393, 394, 394, 407, 409, 412, 412, 413, 422, 426, 432, 434, 449, 454, 455 }; const SKP_uint16 * const SKP_Silk_LTP_gain_CDF_ptrs[ NB_LTP_CBKS ] = { SKP_Silk_LTP_gain_CDF_0, SKP_Silk_LTP_gain_CDF_1, SKP_Silk_LTP_gain_CDF_2 }; const SKP_int16 * const SKP_Silk_LTP_gain_BITS_Q6_ptrs[ NB_LTP_CBKS ] = { SKP_Silk_LTP_gain_BITS_Q6_0, SKP_Silk_LTP_gain_BITS_Q6_1, SKP_Silk_LTP_gain_BITS_Q6_2 }; const SKP_int16 SKP_Silk_LTP_gain_vq_0_Q14[ 10 ][ 5 ] = { { 594, 984, 2840, 1021, 669 }, { 10, 35, 304, -1, 23 }, { -694, 1923, 4603, 2975, 2335 }, { 2437, 3176, 3778, 1940, 481 }, { 214, -46, 7870, 4406, -521 }, { -896, 4818, 8501, 1623, -887 }, { -696, 3178, 6480, -302, 1081 }, { 517, 599, 1002, 567, 560 }, { -2075, -834, 4712, -340, 896 }, { 1435, -644, 3993, -612, -2063 } }; const SKP_int16 SKP_Silk_LTP_gain_vq_1_Q14[ 20 ][ 5 ] = { { 1655, 2918, 5001, 3010, 1775 }, { 113, 198, 856, 176, 178 }, { -843, 2479, 7858, 5371, 574 }, { 59, 5356, 7648, 2850, -315 }, { 3840, 4851, 6527, 1583, -1233 }, { 1620, 1760, 2330, 1876, 2045 }, { -545, 1854, 11792, 1547, -307 }, { -604, 689, 5369, 5074, 4265 }, { 521, -1331, 9829, 6209, -1211 }, { -1315, 6747, 9929, -1410, 546 }, { 117, -144, 2810, 1649, 5240 }, { 5392, 3476, 2425, -38, 633 }, { 14, -449, 5274, 3547, -171 }, { -98, 395, 9114, 1676, 844 }, { -908, 3843, 8861, -957, 1474 }, { 396, 6747, 5379, -329, 1269 }, { -335, 2830, 4281, 270, -54 }, { 1502, 5609, 8958, 6045, 2059 }, { -370, 479, 5267, 5726, 1174 }, { 5237, -1144, 6510, 455, 512 } }; const SKP_int16 SKP_Silk_LTP_gain_vq_2_Q14[ 40 ][ 5 ] = { { -278, 415, 9345, 7106, -431 }, { -1006, 3863, 9524, 4724, -871 }, { -954, 4624, 11722, 973, -300 }, { -117, 7066, 8331, 1959, -901 }, { 593, 3412, 6070, 4914, 1567 }, { 54, -51, 12618, 4228, -844 }, { 3157, 4822, 5229, 2313, 717 }, { -244, 1161, 14198, 779, 69 }, { -1218, 5603, 12894, -2301, 1001 }, { -132, 3960, 9526, 577, 1806 }, { -1633, 8815, 10484, -2452, 895 }, { 235, 450, 1243, 667, 437 }, { 959, -2630, 10897, 8772, -1852 }, { 2420, 2046, 8893, 4427, -1569 }, { 23, 7091, 8356, -1285, 1508 }, { -1133, 835, 7662, 6043, 2800 }, { 439, 391, 11016, 2253, 1362 }, { -1020, 2876, 13436, 4015, -3020 }, { 1060, -2690, 13512, 5565, -1394 }, { -1420, 8007, 11421, -152, -1672 }, { -893, 2895, 15434, -1490, 159 }, { -1054, 428, 12208, 8538, -3344 }, { 1772, -1304, 7593, 6185, 561 }, { 525, -1207, 6659, 11151, -1170 }, { 439, 2667, 4743, 2359, 5515 }, { 2951, 7432, 7909, -230, -1564 }, { -72, 2140, 5477, 1391, 1580 }, { 476, -1312, 15912, 2174, -1027 }, { 5737, 441, 2493, 2043, 2757 }, { 228, -43, 1803, 6663, 7064 }, { 4596, 9182, 1917, -200, 203 }, { -704, 12039, 5451, -1188, 542 }, { 1782, -1040, 10078, 7513, -2767 }, { -2626, 7747, 9019, 62, 1710 }, { 235, -233, 2954, 10921, 1947 }, { 10854, 2814, 1232, -111, 222 }, { 2267, 2778, 12325, 156, -1658 }, { -2950, 8095, 16330, 268, -3626 }, { 67, 2083, 7950, -80, -2432 }, { 518, -66, 1718, 415, 11435 } }; const SKP_int16 * const SKP_Silk_LTP_vq_ptrs_Q14[ NB_LTP_CBKS ] = { &SKP_Silk_LTP_gain_vq_0_Q14[ 0 ][ 0 ], &SKP_Silk_LTP_gain_vq_1_Q14[ 0 ][ 0 ], &SKP_Silk_LTP_gain_vq_2_Q14[ 0 ][ 0 ] }; const SKP_int SKP_Silk_LTP_vq_sizes[ NB_LTP_CBKS ] = { 10, 20, 40 }; h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_resample_3_2_rom.c0000644000175000017500000000553411513063445023051 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * File Name: SKP_Silk_resample_3_2_rom.c * * * * Description: Filter coefficients for FIR polyphase resampling * * * * Copyright 2009 (c), Skype Limited * * All rights reserved. * * * * Date: 090424 * * */ #include "SKP_Silk_resample_rom.h" const SKP_int16 SigProc_Resample_3_2_coarse_INTERPOL[ SigProc_Resample_3_2_coarse_NUM_INTERPOLATORS ][ SigProc_Resample_3_2_coarse_NUM_FIR_COEFS ] = { { 0, 0, 0, 32768, 0, 0, 0, 0 }, { -384, 1630, -5217, 26674, 12714, -3572, 1050, -236 }, { -236, 1050, -3572, 12714, 26674, -5217, 1630, -384 }, }; h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_code_signs.c0000644000175000017500000001053311513063445022031 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main.h" //#define SKP_enc_map(a) ((a) > 0 ? 1 : 0) //#define SKP_dec_map(a) ((a) > 0 ? 1 : -1) /* shifting avoids if-statement */ #define SKP_enc_map(a) ( SKP_RSHIFT( (a), 15 ) + 1 ) #define SKP_dec_map(a) ( SKP_LSHIFT( (a), 1 ) - 1 ) /* Encodes signs of excitation */ void SKP_Silk_encode_signs( SKP_Silk_range_coder_state *sRC, /* I/O Range coder state */ const SKP_int q[], /* I Pulse signal */ const SKP_int length, /* I Length of input */ const SKP_int sigtype, /* I Signal type */ const SKP_int QuantOffsetType, /* I Quantization offset type */ const SKP_int RateLevelIndex /* I Rate level index */ ) { SKP_int i; SKP_int inData; const SKP_uint16 *cdf; i = SKP_SMULBB( N_RATE_LEVELS - 1, SKP_LSHIFT( sigtype, 1 ) + QuantOffsetType ) + RateLevelIndex; cdf = SKP_Silk_sign_CDF[ i ]; for( i = 0; i < length; i++ ) { if( q[ i ] != 0 ) { inData = SKP_enc_map( q[ i ] ); /* - = 0, + = 1 */ SKP_Silk_range_encoder( sRC, inData, cdf ); } } } /* Decodes signs of excitation */ void SKP_Silk_decode_signs( SKP_Silk_range_coder_state *sRC, /* I/O Range coder state */ SKP_int q[], /* I/O pulse signal */ const SKP_int length, /* I length of output */ const SKP_int sigtype, /* I Signal type */ const SKP_int QuantOffsetType, /* I Quantization offset type */ const SKP_int RateLevelIndex /* I Rate Level Index */ ) { SKP_int i; SKP_int data; const SKP_uint16 *cdf; i = SKP_SMULBB( N_RATE_LEVELS - 1, SKP_LSHIFT( sigtype, 1 ) + QuantOffsetType ) + RateLevelIndex; cdf = SKP_Silk_sign_CDF[ i ]; for( i = 0; i < length; i++ ) { if( q[ i ] > 0 ) { SKP_Silk_range_decoder( &data, sRC, cdf, 1 ); /* attach sign */ /* implementation with shift, subtraction, multiplication */ q[ i ] *= SKP_dec_map( data ); } } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_NLSF_stabilize.c0000644000175000017500000001614011513063445022524 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* NLSF stabilizer: */ /* */ /* - Moves NLSFs futher apart if they are too close */ /* - Moves NLSFs away from borders if they are too close */ /* - High effort to achieve a modification with minimum */ /* Euclidean distance to input vector */ /* - Output are sorted NLSF coefficients */ /* */ #include "SKP_Silk_SigProc_FIX.h" /* Constant Definitions */ #define MAX_LOOPS 20 /* NLSF stabilizer, for a single input data vector */ void SKP_Silk_NLSF_stabilize( SKP_int *NLSF_Q15, /* I/O: Unstable/stabilized normalized LSF vector in Q15 [L] */ const SKP_int *NDeltaMin_Q15, /* I: Normalized delta min vector in Q15, NDeltaMin_Q15[L] must be >= 1 [L+1] */ const SKP_int L /* I: Number of NLSF parameters in the input vector */ ) { SKP_int center_freq_Q15, diff_Q15, min_center_Q15, max_center_Q15; SKP_int32 min_diff_Q15; SKP_int loops; SKP_int i, I=0, k; /* This is necessary to ensure an output within range of a SKP_int16 */ SKP_assert( NDeltaMin_Q15[L] >= 1 ); for( loops = 0; loops < MAX_LOOPS; loops++ ) { /**************************/ /* Find smallest distance */ /**************************/ /* First element */ min_diff_Q15 = NLSF_Q15[0] - NDeltaMin_Q15[0]; I = 0; /* Middle elements */ for( i = 1; i <= L-1; i++ ) { diff_Q15 = NLSF_Q15[i] - ( NLSF_Q15[i-1] + NDeltaMin_Q15[i] ); if( diff_Q15 < min_diff_Q15 ) { min_diff_Q15 = diff_Q15; I = i; } } /* Last element */ diff_Q15 = (1<<15) - ( NLSF_Q15[L-1] + NDeltaMin_Q15[L] ); if( diff_Q15 < min_diff_Q15 ) { min_diff_Q15 = diff_Q15; I = L; } /***************************************************/ /* Now check if the smallest distance non-negative */ /***************************************************/ if (min_diff_Q15 >= 0) { return; } if( I == 0 ) { /* Move away from lower limit */ NLSF_Q15[0] = NDeltaMin_Q15[0]; } else if( I == L) { /* Move away from higher limit */ NLSF_Q15[L-1] = (1<<15) - NDeltaMin_Q15[L]; } else { /* Find the lower extreme for the location of the current center frequency */ min_center_Q15 = 0; for( k = 0; k < I; k++ ) { min_center_Q15 += NDeltaMin_Q15[k]; } min_center_Q15 += SKP_RSHIFT( NDeltaMin_Q15[I], 1 ); /* Find the upper extreme for the location of the current center frequency */ max_center_Q15 = (1<<15); for( k = L; k > I; k-- ) { max_center_Q15 -= NDeltaMin_Q15[k]; } max_center_Q15 -= ( NDeltaMin_Q15[I] - SKP_RSHIFT( NDeltaMin_Q15[I], 1 ) ); /* Move apart, sorted by value, keeping the same center frequency */ center_freq_Q15 = SKP_LIMIT( SKP_RSHIFT_ROUND( (SKP_int32)NLSF_Q15[I-1] + (SKP_int32)NLSF_Q15[I], 1 ), min_center_Q15, max_center_Q15 ); NLSF_Q15[I-1] = center_freq_Q15 - SKP_RSHIFT( NDeltaMin_Q15[I], 1 ); NLSF_Q15[I] = NLSF_Q15[I-1] + NDeltaMin_Q15[I]; } } /* Safe and simple fall back method, which is less ideal than the above */ if( loops == MAX_LOOPS ) { /* Insertion sort (fast for already almost sorted arrays): */ /* Best case: O(n) for an already sorted array */ /* Worst case: O(n^2) for an inversely sorted array */ SKP_Silk_insertion_sort_increasing_all_values(&NLSF_Q15[0], L); /* First NLSF should be no less than NDeltaMin[0] */ NLSF_Q15[0] = SKP_max_int( NLSF_Q15[0], NDeltaMin_Q15[0] ); /* Keep delta_min distance between the NLSFs */ for( i = 1; i < L; i++ ) NLSF_Q15[i] = SKP_max_int( NLSF_Q15[i], NLSF_Q15[i-1] + NDeltaMin_Q15[i] ); /* Last NLSF should be no higher than 1 - NDeltaMin[L] */ NLSF_Q15[L-1] = SKP_min_int( NLSF_Q15[L-1], (1<<15) - NDeltaMin_Q15[L] ); /* Keep NDeltaMin distance between the NLSFs */ for( i = L-2; i >= 0; i-- ) NLSF_Q15[i] = SKP_min_int( NLSF_Q15[i], NLSF_Q15[i+1] - NDeltaMin_Q15[i+1] ); } } /* NLSF stabilizer, over multiple input column data vectors */ void SKP_Silk_NLSF_stabilize_multi( SKP_int *NLSF_Q15, /* I/O: Unstable/stabilized normalized LSF vectors in Q15 [LxN] */ const SKP_int *NDeltaMin_Q15, /* I: Normalized delta min vector in Q15, NDeltaMin_Q15[L] must be >= 1 [L+1] */ const SKP_int N, /* I: Number of input vectors to be stabilized */ const SKP_int L /* I: NLSF vector dimension */ ) { SKP_int n; /* loop over input data */ for( n = 0; n < N; n++ ) { SKP_Silk_NLSF_stabilize( &NLSF_Q15[n * L], NDeltaMin_Q15, L ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_decode_frame.c0000644000175000017500000001665111513063445022320 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main.h" #include "SKP_Silk_PLC.h" /****************/ /* Decode frame */ /****************/ SKP_int SKP_Silk_decode_frame( SKP_Silk_decoder_state *psDec, /* I/O Pointer to Silk decoder state */ SKP_int16 pOut[], /* O Pointer to output speech frame */ SKP_int16 *pN, /* O Pointer to size of output frame */ const SKP_uint8 pCode[], /* I Pointer to payload */ const SKP_int nBytes, /* I Payload length */ SKP_int action, /* I Action from Jitter Buffer */ SKP_int *decBytes /* O Used bytes to decode this frame */ ) { SKP_Silk_decoder_control sDecCtrl; SKP_int L, fs_Khz_old, LPC_order_old, ret = 0; SKP_int Pulses[ MAX_FRAME_LENGTH ]; L = psDec->frame_length; sDecCtrl.LTP_scale_Q14 = 0; /* Safety checks */ SKP_assert( L > 0 && L <= MAX_FRAME_LENGTH ); /********************************************/ /* Decode Frame if packet is not lost */ /********************************************/ *decBytes = 0; if( action == 0 ) { /********************************************/ /* Initialize arithmetic coder */ /********************************************/ fs_Khz_old = psDec->fs_kHz; LPC_order_old = psDec->LPC_order; if( psDec->nFramesDecoded == 0 ) { /* Initialize range decoder state */ SKP_Silk_range_dec_init( &psDec->sRC, pCode, nBytes ); if( psDec->bitstream_v == BIT_STREAM_V4 ) { SKP_Silk_decode_indices_v4( psDec ); } } /********************************************/ /* Decode parameters and pulse signal */ /********************************************/ if( psDec->bitstream_v == BIT_STREAM_V4 ) { SKP_Silk_decode_parameters_v4( psDec, &sDecCtrl, Pulses, 1 ); } else { SKP_Silk_decode_parameters( psDec, &sDecCtrl, Pulses, 1 ); } if( psDec->sRC.error ) { psDec->nBytesLeft = 0; action = 1; /* PLC operation */ psDec->fs_kHz = fs_Khz_old; /* revert fs if changed in decode_parameters */ psDec->LPC_order = LPC_order_old; /* revert lpc_order if changed in decode_parameters */ psDec->frame_length = fs_Khz_old * FRAME_LENGTH_MS; psDec->subfr_length = fs_Khz_old * FRAME_LENGTH_MS / NB_SUBFR; /* Avoid crashing */ *decBytes = psDec->sRC.bufferLength; if( psDec->sRC.error == RANGE_CODER_DEC_PAYLOAD_TOO_LONG ) { ret = SKP_SILK_DEC_PAYLOAD_TOO_LARGE; } else { ret = SKP_SILK_DEC_PAYLOAD_ERROR; } } else { *decBytes = psDec->sRC.bufferLength - psDec->nBytesLeft; psDec->nFramesDecoded++; /* Update lengths. Sampling frequency could have changed */ L = psDec->frame_length; /********************************************************/ /* Run inverse NSQ */ /********************************************************/ SKP_Silk_decode_core( psDec, &sDecCtrl, pOut, Pulses ); /********************************************************/ /* Update PLC state */ /********************************************************/ SKP_Silk_PLC( psDec, &sDecCtrl, pOut, L, action ); psDec->lossCnt = 0; psDec->prev_sigtype = sDecCtrl.sigtype; /* A frame has been decoded without errors */ psDec->first_frame_after_reset = 0; } } /*************************************************************/ /* Generate Concealment Frame if packet is lost, or corrupt */ /*************************************************************/ if( action == 1 ) { /* Handle packet loss by extrapolation */ SKP_Silk_PLC( psDec, &sDecCtrl, pOut, L, action ); psDec->lossCnt++; } /*************************/ /* Update output buffer. */ /*************************/ SKP_memcpy( psDec->outBuf, pOut, L * sizeof( SKP_int16 ) ); /****************************************************************/ /* Ensure smooth connection of extrapolated and good frames */ /****************************************************************/ SKP_Silk_PLC_glue_frames( psDec, &sDecCtrl, pOut, L ); /************************************************/ /* Comfort noise generation / estimation */ /************************************************/ SKP_Silk_CNG( psDec, &sDecCtrl, pOut , L ); /********************************************/ /* HP filter output */ /********************************************/ SKP_assert( ( ( psDec->fs_kHz == 12 ) && ( L % 3 ) == 0 ) || ( ( psDec->fs_kHz != 12 ) && ( L % 2 ) == 0 ) ); SKP_Silk_biquad( pOut, psDec->HP_B, psDec->HP_A, psDec->HPState, pOut, L ); /********************************************/ /* set output frame length */ /********************************************/ *pN = ( SKP_int16 )L; /* Update some decoder state variables */ psDec->lagPrev = sDecCtrl.pitchL[ NB_SUBFR - 1 ]; return ret; } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_allpass_int.c0000644000175000017500000000760611513063445022234 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_allpass_int.c * * * * First-order allpass filter with * * transfer function: * * * * A + Z^(-1) * * H(z) = ------------ * * 1 + A*Z^(-1) * * * * Implemented using minimum multiplier filter design. * * * * Reference: http://www.univ.trieste.it/~ramponi/teaching/ * * DSP/materiale/Ch6(2).pdf * * * * Copyright 2007 (c), Skype Limited * * Date: 070525 * * */ #include "SKP_Silk_SigProc_FIX.h" /* First-order allpass filter */ void SKP_Silk_allpass_int( const SKP_int32 *in, /* I: Q25 input signal [len] */ SKP_int32 *S, /* I/O: Q25 state [1] */ SKP_int A, /* I: Q15 coefficient (0 <= A < 32768) */ SKP_int32 *out, /* O: Q25 output signal [len] */ const SKP_int32 len /* I: Number of samples */ ) { SKP_int32 Y2, X2, S0; SKP_int k; S0 = S[ 0 ]; for( k = len - 1; k >= 0; k-- ) { Y2 = *in - S0; X2 = ( Y2 >> 15 ) * A + ( ( ( Y2 & 0x00007FFF ) * A ) >> 15 ); ( *out++ ) = S0 + X2; S0 = ( *in++ ) + X2; } S[ 0 ] = S0; } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_tables_NLSF_CB0_10.c0000644000175000017500000007350111513063445022740 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /**********************************************/ /* This file has been automatically generated */ /* */ /* ROM usage: 138+1331 Words */ /**********************************************/ #include "SKP_Silk_structs.h" #include "SKP_Silk_tables_NLSF_CB0_10.h" const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ NLSF_MSVQ_CB0_10_VECTORS + NLSF_MSVQ_CB0_10_STAGES ] = { 0, 2658, 4420, 6107, 7757, 9408, 10955, 12502, 13983, 15432, 16882, 18331, 19750, 21108, 22409, 23709, 25010, 26256, 27501, 28747, 29965, 31158, 32351, 33544, 34736, 35904, 36997, 38091, 39185, 40232, 41280, 42327, 43308, 44290, 45271, 46232, 47192, 48132, 49032, 49913, 50775, 51618, 52462, 53287, 54095, 54885, 55675, 56449, 57222, 57979, 58688, 59382, 60076, 60726, 61363, 61946, 62505, 63052, 63543, 63983, 64396, 64766, 65023, 65279, 65535, 0, 4977, 9542, 14106, 18671, 23041, 27319, 31596, 35873, 39969, 43891, 47813, 51652, 55490, 59009, 62307, 65535, 0, 8571, 17142, 25529, 33917, 42124, 49984, 57844, 65535, 0, 8732, 17463, 25825, 34007, 42189, 50196, 58032, 65535, 0, 8948, 17704, 25733, 33762, 41791, 49821, 57678, 65535, 0, 4374, 8655, 12936, 17125, 21313, 25413, 29512, 33611, 37710, 41809, 45820, 49832, 53843, 57768, 61694, 65535 }; const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB0_10_CDF_start_ptr[ NLSF_MSVQ_CB0_10_STAGES ] = { &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ 0 ], &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ 65 ], &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ 82 ], &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ 91 ], &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ 100 ], &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ 109 ] }; const SKP_int SKP_Silk_NLSF_MSVQ_CB0_10_CDF_middle_idx[ NLSF_MSVQ_CB0_10_STAGES ] = { 23, 8, 5, 5, 5, 9 }; const SKP_int16 SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[ NLSF_MSVQ_CB0_10_VECTORS ] = { 148, 167, 169, 170, 170, 173, 173, 175, 176, 176, 176, 177, 179, 181, 181, 181, 183, 183, 183, 184, 185, 185, 185, 185, 186, 189, 189, 189, 191, 191, 191, 194, 194, 194, 195, 195, 196, 198, 199, 200, 201, 201, 202, 203, 204, 204, 205, 205, 206, 209, 210, 210, 213, 214, 218, 220, 221, 226, 231, 234, 239, 256, 256, 256, 119, 123, 123, 123, 125, 126, 126, 126, 128, 130, 130, 131, 131, 135, 138, 139, 94, 94, 95, 95, 96, 98, 98, 99, 93, 93, 95, 96, 96, 97, 98, 100, 92, 93, 97, 97, 97, 97, 98, 98, 125, 126, 126, 127, 127, 128, 128, 128, 128, 128, 129, 129, 129, 130, 130, 131 }; const SKP_int SKP_Silk_NLSF_MSVQ_CB0_10_ndelta_min_Q15[ 10 + 1 ] = { 563, 3, 22, 20, 3, 3, 132, 119, 358, 86, 964 }; const SKP_int16 SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 * NLSF_MSVQ_CB0_10_VECTORS ] = { 2210, 4023, 6981, 9260, 12573, 15687, 19207, 22383, 25981, 29142, 3285, 4172, 6116, 10856, 15289, 16826, 19701, 22010, 24721, 29313, 1554, 2511, 6577, 10337, 13837, 16511, 20086, 23214, 26480, 29464, 3062, 4017, 5771, 10037, 13365, 14952, 20140, 22891, 25229, 29603, 2085, 3457, 5934, 8718, 11501, 13670, 17997, 21817, 24935, 28745, 2776, 4093, 6421, 10413, 15111, 16806, 20825, 23826, 26308, 29411, 2717, 4034, 5697, 8463, 14301, 16354, 19007, 23413, 25812, 28506, 2872, 3702, 5881, 11034, 17141, 18879, 21146, 23451, 25817, 29600, 2999, 4015, 7357, 11219, 12866, 17307, 20081, 22644, 26774, 29107, 2942, 3866, 5918, 11915, 13909, 16072, 20453, 22279, 27310, 29826, 2271, 3527, 6606, 9729, 12943, 17382, 20224, 22345, 24602, 28290, 2207, 3310, 5844, 9339, 11141, 15651, 18576, 21177, 25551, 28228, 3963, 4975, 6901, 11588, 13466, 15577, 19231, 21368, 25510, 27759, 2749, 3549, 6966, 13808, 15653, 17645, 20090, 22599, 26467, 28537, 2126, 3504, 5109, 9954, 12550, 14620, 19703, 21687, 26457, 29106, 3966, 5745, 7442, 9757, 14468, 16404, 19135, 23048, 25375, 28391, 3197, 4751, 6451, 9298, 13038, 14874, 17962, 20627, 23835, 28464, 3195, 4081, 6499, 12252, 14289, 16040, 18357, 20730, 26980, 29309, 1533, 2471, 4486, 7796, 12332, 15758, 19567, 22298, 25673, 29051, 2002, 2971, 4985, 8083, 13181, 15435, 18237, 21517, 24595, 28351, 3808, 4925, 6710, 10201, 12011, 14300, 18457, 20391, 26525, 28956, 2281, 3418, 4979, 8726, 15964, 18104, 20250, 22771, 25286, 28954, 3051, 5479, 7290, 9848, 12744, 14503, 18665, 23684, 26065, 28947, 2364, 3565, 5502, 9621, 14922, 16621, 19005, 20996, 26310, 29302, 4093, 5212, 6833, 9880, 16303, 18286, 20571, 23614, 26067, 29128, 2941, 3996, 6038, 10638, 12668, 14451, 16798, 19392, 26051, 28517, 3863, 5212, 7019, 9468, 11039, 13214, 19942, 22344, 25126, 29539, 4615, 6172, 7853, 10252, 12611, 14445, 19719, 22441, 24922, 29341, 3566, 4512, 6985, 8684, 10544, 16097, 18058, 22475, 26066, 28167, 4481, 5489, 7432, 11414, 13191, 15225, 20161, 22258, 26484, 29716, 3320, 4320, 6621, 9867, 11581, 14034, 21168, 23210, 26588, 29903, 3794, 4689, 6916, 8655, 10143, 16144, 19568, 21588, 27557, 29593, 2446, 3276, 5918, 12643, 16601, 18013, 21126, 23175, 27300, 29634, 2450, 3522, 5437, 8560, 15285, 19911, 21826, 24097, 26567, 29078, 2580, 3796, 5580, 8338, 9969, 12675, 18907, 22753, 25450, 29292, 3325, 4312, 6241, 7709, 9164, 14452, 21665, 23797, 27096, 29857, 3338, 4163, 7738, 11114, 12668, 14753, 16931, 22736, 25671, 28093, 3840, 4755, 7755, 13471, 15338, 17180, 20077, 22353, 27181, 29743, 2504, 4079, 8351, 12118, 15046, 18595, 21684, 24704, 27519, 29937, 5234, 6342, 8267, 11821, 15155, 16760, 20667, 23488, 25949, 29307, 2681, 3562, 6028, 10827, 18458, 20458, 22303, 24701, 26912, 29956, 3374, 4528, 6230, 8256, 9513, 12730, 18666, 20720, 26007, 28425, 2731, 3629, 8320, 12450, 14112, 16431, 18548, 22098, 25329, 27718, 3481, 4401, 7321, 9319, 11062, 13093, 15121, 22315, 26331, 28740, 3577, 4945, 6669, 8792, 10299, 12645, 19505, 24766, 26996, 29634, 4058, 5060, 7288, 10190, 11724, 13936, 15849, 18539, 26701, 29845, 4262, 5390, 7057, 8982, 10187, 15264, 20480, 22340, 25958, 28072, 3404, 4329, 6629, 7946, 10121, 17165, 19640, 22244, 25062, 27472, 3157, 4168, 6195, 9319, 10771, 13325, 15416, 19816, 24672, 27634, 2503, 3473, 5130, 6767, 8571, 14902, 19033, 21926, 26065, 28728, 4133, 5102, 7553, 10054, 11757, 14924, 17435, 20186, 23987, 26272, 4972, 6139, 7894, 9633, 11320, 14295, 21737, 24306, 26919, 29907, 2958, 3816, 6851, 9204, 10895, 18052, 20791, 23338, 27556, 29609, 5234, 6028, 8034, 10154, 11242, 14789, 18948, 20966, 26585, 29127, 5241, 6838, 10526, 12819, 14681, 17328, 19928, 22336, 26193, 28697, 3412, 4251, 5988, 7094, 9907, 18243, 21669, 23777, 26969, 29087, 2470, 3217, 7797, 15296, 17365, 19135, 21979, 24256, 27322, 29442, 4939, 5804, 8145, 11809, 13873, 15598, 17234, 19423, 26476, 29645, 5051, 6167, 8223, 9655, 12159, 17995, 20464, 22832, 26616, 28462, 4987, 5907, 9319, 11245, 13132, 15024, 17485, 22687, 26011, 28273, 5137, 6884, 11025, 14950, 17191, 19425, 21807, 24393, 26938, 29288, 7057, 7884, 9528, 10483, 10960, 14811, 19070, 21675, 25645, 28019, 6759, 7160, 8546, 11779, 12295, 13023, 16627, 21099, 24697, 28287, 3863, 9762, 11068, 11445, 12049, 13960, 18085, 21507, 25224, 28997, 397, 335, 651, 1168, 640, 765, 465, 331, 214, -194, -578, -647, -657, 750, 564, 613, 549, 630, 304, -52, 828, 922, 443, 111, 138, 124, 169, 14, 144, 83, 132, 58, -413, -752, 869, 336, 385, 69, 56, 830, -227, -266, -368, -440, -1195, 163, 126, -228, 802, 156, 188, 120, 376, 59, -358, -558, -1326, -254, -202, -789, 296, 92, -70, -129, -718, -1135, 292, -29, -631, 487, -157, -153, -279, 2, -419, -342, -34, -514, -799, -1571, -687, -609, -546, -130, -215, -252, -446, -574, -1337, 207, -72, 32, 103, -642, 942, 733, 187, 29, -211, -814, 143, 225, 20, 24, -268, -377, 1623, 1133, 667, 164, 307, 366, 187, 34, 62, -313, -832, -1482, -1181, 483, -42, -39, -450, -1406, -587, -52, -760, 334, 98, -60, -500, -488, -1058, 299, 131, -250, -251, -703, 1037, 568, -413, -265, 1687, 573, 345, 323, 98, 61, -102, 31, 135, 149, 617, 365, -39, 34, -611, 1201, 1421, 736, -414, -393, -492, -343, -316, -532, 528, 172, 90, 322, -294, -319, -541, 503, 639, 401, 1, -149, -73, -167, 150, 118, 308, 218, 121, 195, -143, -261, -1013, -802, 387, 436, 130, -427, -448, -681, 123, -87, -251, -113, 274, 310, 445, 501, 354, 272, 141, -285, 569, 656, 37, -49, 251, -386, -263, 1122, 604, 606, 336, 95, 34, 0, 85, 180, 207, -367, -622, 1070, -6, -79, -160, -92, -137, -276, -323, -371, -696, -1036, 407, 102, -86, -214, -482, -647, -28, -291, -97, -180, -250, -435, -18, -76, -332, 410, 407, 168, 539, 411, 254, 111, 58, -145, 200, 30, 187, 116, 131, -367, -475, 781, -559, 561, 195, -115, 8, -168, 30, 55, -122, 131, 82, -5, -273, -50, -632, 668, 4, 32, -26, -279, 315, 165, 197, 377, 155, -41, -138, -324, -109, -617, 360, 98, -53, -319, -114, -245, -82, 507, 468, 263, -137, -389, 652, 354, -18, -227, -462, -135, 317, 53, -16, 66, -72, -126, -356, -347, -328, -72, -337, 324, 152, 349, 169, -196, 179, 254, 260, 325, -74, -80, 75, -31, 270, 275, 87, 278, -446, -301, 309, 71, -25, -242, 516, 161, -162, -83, 329, 230, -311, -259, 177, -26, -462, 89, 257, 6, -130, -93, -456, -317, -221, -206, -417, -182, -74, 234, 48, 261, 359, 231, 258, 85, -282, 252, -147, -222, 251, -207, 443, 123, -417, -36, 273, -241, 240, -112, 44, -167, 126, -124, -77, 58, -401, 333, -118, 82, 126, 151, -433, 359, -130, -102, 131, -244, 86, 85, -462, 414, -240, 16, 145, 28, -205, -481, 373, 293, -72, -174, 62, 259, -8, -18, 362, 233, 185, 43, 278, 27, 193, 570, -248, 189, 92, 31, -275, -3, 243, 176, 438, 209, 206, -51, 79, 109, 168, -185, -308, -68, -618, 385, -310, -108, -164, 165, 61, -152, -101, -412, -268, -257, -40, -20, -28, -158, -301, 271, 380, -338, -367, -132, 64, 114, -131, -225, -156, -260, -63, -116, 155, -586, -202, 254, -287, 178, 227, -106, -294, 164, 298, -100, 185, 317, 193, -45, 28, 80, -87, -433, 22, -48, 48, -237, -229, -139, 120, -364, 268, -136, 396, 125, 130, -89, -272, 118, -256, -68, -451, 488, 143, -165, -48, -190, 106, 219, 47, 435, 245, 97, 75, -418, 121, -187, 570, -200, -351, 225, -21, -217, 234, -111, 194, 14, 242, 118, 140, -397, 355, 361, -45, -195 }; const SKP_Silk_NLSF_CBS SKP_Silk_NLSF_CB0_10_Stage_info[ NLSF_MSVQ_CB0_10_STAGES ] = { { 64, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 * 0 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[ 0 ] }, { 16, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 * 64 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[ 64 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 * 80 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[ 80 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 * 88 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[ 88 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 * 96 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[ 96 ] }, { 16, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 * 104 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[ 104 ] } }; const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB0_10 = { NLSF_MSVQ_CB0_10_STAGES, SKP_Silk_NLSF_CB0_10_Stage_info, SKP_Silk_NLSF_MSVQ_CB0_10_ndelta_min_Q15, SKP_Silk_NLSF_MSVQ_CB0_10_CDF, SKP_Silk_NLSF_MSVQ_CB0_10_CDF_start_ptr, SKP_Silk_NLSF_MSVQ_CB0_10_CDF_middle_idx }; h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_MA.c0000644000175000017500000002551411513063445020216 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_MA.c * * * * Variable order MA filter * * * * Copyright 2006 (c), Skype Limited * * Date: 060221 * * */ #include "SKP_Silk_SigProc_FIX.h" /* Variable order MA filter */ void SKP_Silk_MA( const SKP_int16 *in, /* I: input signal */ const SKP_int16 *B, /* I: MA coefficients, Q13 [order+1] */ SKP_int32 *S, /* I/O: state vector [order] */ SKP_int16 *out, /* O: output signal */ const SKP_int32 len, /* I: signal length */ const SKP_int32 order /* I: filter order */ ) { SKP_int k, d, in16; SKP_int32 out32; for( k = 0; k < len; k++ ) { in16 = in[ k ]; out32 = SKP_SMLABB( S[ 0 ], in16, B[ 0 ] ); out32 = SKP_RSHIFT_ROUND( out32, 13 ); for( d = 1; d < order; d++ ) { S[ d - 1 ] = SKP_SMLABB( S[ d ], in16, B[ d ] ); } S[ order - 1 ] = SKP_SMULBB( in16, B[ order ] ); /* Limit */ out[ k ] = (SKP_int16)SKP_SAT16( out32 ); } } /* Variable order MA prediction error filter */ void SKP_Silk_MA_Prediction( const SKP_int16 *in, /* I: Input signal */ const SKP_int16 *B, /* I: MA prediction coefficients, Q12 [order] */ SKP_int32 *S, /* I/O: State vector [order] */ SKP_int16 *out, /* O: Output signal */ const SKP_int32 len, /* I: Signal length */ const SKP_int32 order /* I: Filter order */ ) { SKP_int k, d, in16; SKP_int32 out32; SKP_int32 B32; if( ( order & 1 ) == 0 && (SKP_int32)( (SKP_int_ptr_size)B & 3 ) == 0 ) { /* Even order and 4-byte aligned coefficient array */ /* NOTE: the code below loads two int16 values in an int32, and multiplies each using the */ /* SMLABB and SMLABT instructions. On a big-endian CPU the two int16 variables would be */ /* loaded in reverse order and the code will give the wrong result. In that case swapping */ /* the SMLABB and SMLABT instructions should solve the problem. */ for( k = 0; k < len; k++ ) { in16 = in[ k ]; out32 = SKP_LSHIFT( in16, 12 ) - S[ 0 ]; out32 = SKP_RSHIFT_ROUND( out32, 12 ); for( d = 0; d < order - 2; d += 2 ) { B32 = *( (SKP_int32*)&B[ d ] ); /* read two coefficients at once */ S[ d ] = SKP_SMLABB_ovflw( S[ d + 1 ], in16, B32 ); S[ d + 1 ] = SKP_SMLABT_ovflw( S[ d + 2 ], in16, B32 ); } B32 = *( (SKP_int32*)&B[ d ] ); /* read two coefficients at once */ S[ order - 2 ] = SKP_SMLABB_ovflw( S[ order - 1 ], in16, B32 ); S[ order - 1 ] = SKP_SMULBT( in16, B32 ); /* Limit */ out[ k ] = (SKP_int16)SKP_SAT16( out32 ); } } else { /* Odd order or not 4-byte aligned coefficient array */ for( k = 0; k < len; k++ ) { in16 = in[ k ]; out32 = SKP_LSHIFT( in16, 12 ) - S[ 0 ]; out32 = SKP_RSHIFT_ROUND( out32, 12 ); for( d = 0; d < order - 1; d++ ) { S[ d ] = SKP_SMLABB_ovflw( S[ d + 1 ], in16, B[ d ] ); } S[ order - 1 ] = SKP_SMULBB( in16, B[ order - 1 ] ); /* Limit */ out[ k ] = (SKP_int16)SKP_SAT16( out32 ); } } } void SKP_Silk_MA_Prediction_Q13( const SKP_int16 *in, /* I: input signal */ const SKP_int16 *B, /* I: MA prediction coefficients, Q13 [order] */ SKP_int32 *S, /* I/O: state vector [order] */ SKP_int16 *out, /* O: output signal */ SKP_int32 len, /* I: signal length */ SKP_int32 order /* I: filter order */ ) { SKP_int k, d, in16; SKP_int32 out32, B32; if( ( order & 1 ) == 0 && (SKP_int32)( (SKP_int_ptr_size)B & 3 ) == 0 ) { /* Even order and 4-byte aligned coefficient array */ /* NOTE: the code below loads two int16 values in an int32, and multiplies each using the */ /* SMLABB and SMLABT instructions. On a big-endian CPU the two int16 variables would be */ /* loaded in reverse order and the code will give the wrong result. In that case swapping */ /* the SMLABB and SMLABT instructions should solve the problem. */ for( k = 0; k < len; k++ ) { in16 = in[ k ]; out32 = SKP_LSHIFT( in16, 13 ) - S[ 0 ]; out32 = SKP_RSHIFT_ROUND( out32, 13 ); for( d = 0; d < order - 2; d += 2 ) { B32 = *( (SKP_int32*)&B[ d ] ); /* read two coefficients at once */ S[ d ] = SKP_SMLABB( S[ d + 1 ], in16, B32 ); S[ d + 1 ] = SKP_SMLABT( S[ d + 2 ], in16, B32 ); } B32 = *( (SKP_int32*)&B[ d ] ); /* read two coefficients at once */ S[ order - 2 ] = SKP_SMLABB( S[ order - 1 ], in16, B32 ); S[ order - 1 ] = SKP_SMULBT( in16, B32 ); /* Limit */ out[ k ] = (SKP_int16)SKP_SAT16( out32 ); } } else { /* Odd order or not 4-byte aligned coefficient array */ for( k = 0; k < len; k++ ) { in16 = in[ k ]; out32 = SKP_LSHIFT( in16, 13 ) - S[ 0 ]; out32 = SKP_RSHIFT_ROUND( out32, 13 ); for( d = 0; d < order - 1; d++ ) { S[ d ] = SKP_SMLABB( S[ d + 1 ], in16, B[ d ] ); } S[ order - 1 ] = SKP_SMULBB( in16, B[ order - 1 ] ); /* Limit */ out[ k ] = (SKP_int16)SKP_SAT16( out32 ); } } } /* Variable order MA prediction error filter. */ /* Inverse filter of SKP_Silk_LPC_synthesis_filter */ void SKP_Silk_LPC_analysis_filter( const SKP_int16 *in, /* I: Input signal */ const SKP_int16 *B, /* I: MA prediction coefficients, Q12 [order] */ SKP_int16 *S, /* I/O: State vector [order] */ SKP_int16 *out, /* O: Output signal */ const SKP_int32 len, /* I: Signal length */ const SKP_int32 Order /* I: Filter order */ ) { SKP_int k, j, idx, Order_half = SKP_RSHIFT( Order, 1 ); SKP_int32 Btmp, B_align_Q12[ SigProc_MAX_ORDER_LPC >> 1 ], out32_Q12, out32; SKP_int16 SA, SB; /* Order must be even */ SKP_assert( 2 * Order_half == Order ); /* Combine two A_Q12 values and ensure 32-bit alignment */ for( k = 0; k < Order_half; k++ ) { idx = SKP_SMULBB( 2, k ); B_align_Q12[ k ] = ( ( (SKP_int32)B[ idx ] ) & 0x0000ffff ) | SKP_LSHIFT( (SKP_int32)B[ idx + 1 ], 16 ); } /* S[] values are in Q0 */ for( k = 0; k < len; k++ ) { SA = S[ 0 ]; out32_Q12 = 0; for( j = 0; j < ( Order_half - 1 ); j++ ) { idx = SKP_SMULBB( 2, j ) + 1; /* Multiply-add two prediction coefficients for each loop */ Btmp = B_align_Q12[ j ]; SB = S[ idx ]; S[ idx ] = SA; out32_Q12 = SKP_SMLABB( out32_Q12, SA, Btmp ); out32_Q12 = SKP_SMLABT( out32_Q12, SB, Btmp ); SA = S[ idx + 1 ]; S[ idx + 1 ] = SB; } /* Unrolled loop: epilog */ Btmp = B_align_Q12[ Order_half - 1 ]; SB = S[ Order - 1 ]; S[ Order - 1 ] = SA; out32_Q12 = SKP_SMLABB( out32_Q12, SA, Btmp ); out32_Q12 = SKP_SMLABT( out32_Q12, SB, Btmp ); /* Subtract prediction */ out32_Q12 = SKP_SUB_SAT32( SKP_LSHIFT( (SKP_int32)in[ k ], 12 ), out32_Q12 ); /* Scale to Q0 */ out32 = SKP_RSHIFT_ROUND( out32_Q12, 12 ); /* Saturate output */ out[ k ] = (SKP_int16)SKP_SAT16( out32 ); /* Move input line */ S[ 0 ] = in[ k ]; } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_tables_NLSF_CB0_16.c0000644000175000017500000022324311513063445022746 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /**********************************************/ /* This file has been automatically generated */ /* */ /* ROM usage: 246+3689 Words */ /**********************************************/ #include "SKP_Silk_structs.h" #include "SKP_Silk_tables_NLSF_CB0_16.h" const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ NLSF_MSVQ_CB0_16_VECTORS + NLSF_MSVQ_CB0_16_STAGES ] = { 0, 1449, 2749, 4022, 5267, 6434, 7600, 8647, 9695, 10742, 11681, 12601, 13444, 14251, 15008, 15764, 16521, 17261, 18002, 18710, 19419, 20128, 20837, 21531, 22225, 22919, 23598, 24277, 24956, 25620, 26256, 26865, 27475, 28071, 28667, 29263, 29859, 30443, 31026, 31597, 32168, 32727, 33273, 33808, 34332, 34855, 35379, 35902, 36415, 36927, 37439, 37941, 38442, 38932, 39423, 39914, 40404, 40884, 41364, 41844, 42324, 42805, 43285, 43754, 44224, 44694, 45164, 45623, 46083, 46543, 46993, 47443, 47892, 48333, 48773, 49213, 49653, 50084, 50515, 50946, 51377, 51798, 52211, 52614, 53018, 53422, 53817, 54212, 54607, 55002, 55388, 55775, 56162, 56548, 56910, 57273, 57635, 57997, 58352, 58698, 59038, 59370, 59702, 60014, 60325, 60630, 60934, 61239, 61537, 61822, 62084, 62346, 62602, 62837, 63072, 63302, 63517, 63732, 63939, 64145, 64342, 64528, 64701, 64867, 65023, 65151, 65279, 65407, 65535, 0, 5099, 9982, 14760, 19538, 24213, 28595, 32976, 36994, 41012, 44944, 48791, 52557, 56009, 59388, 62694, 65535, 0, 9955, 19697, 28825, 36842, 44686, 52198, 58939, 65535, 0, 8949, 17335, 25720, 33926, 41957, 49987, 57845, 65535, 0, 9724, 18642, 26998, 35355, 43532, 51534, 59365, 65535, 0, 8750, 17499, 26249, 34448, 42471, 50494, 58178, 65535, 0, 8730, 17273, 25816, 34176, 42536, 50203, 57869, 65535, 0, 8769, 17538, 26307, 34525, 42742, 50784, 58319, 65535, 0, 8736, 17101, 25466, 33653, 41839, 50025, 57864, 65535, 0, 4368, 8735, 12918, 17100, 21283, 25465, 29558, 33651, 37744, 41836, 45929, 50022, 54027, 57947, 61782, 65535 }; const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB0_16_CDF_start_ptr[ NLSF_MSVQ_CB0_16_STAGES ] = { &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 0 ], &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 129 ], &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 146 ], &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 155 ], &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 164 ], &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 173 ], &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 182 ], &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 191 ], &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 200 ], &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 209 ] }; const SKP_int SKP_Silk_NLSF_MSVQ_CB0_16_CDF_middle_idx[ NLSF_MSVQ_CB0_16_STAGES ] = { 42, 8, 4, 5, 5, 5, 5, 5, 5, 9 }; const SKP_int16 SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ NLSF_MSVQ_CB0_16_VECTORS ] = { 176, 181, 182, 183, 186, 186, 191, 191, 191, 196, 197, 201, 203, 206, 206, 206, 207, 207, 209, 209, 209, 209, 210, 210, 210, 211, 211, 211, 212, 214, 216, 216, 217, 217, 217, 217, 218, 218, 219, 219, 220, 221, 222, 223, 223, 223, 223, 224, 224, 224, 225, 225, 226, 226, 226, 226, 227, 227, 227, 227, 227, 227, 228, 228, 228, 228, 229, 229, 229, 230, 230, 230, 231, 231, 231, 231, 232, 232, 232, 232, 233, 234, 235, 235, 235, 236, 236, 236, 236, 237, 237, 237, 237, 240, 240, 240, 240, 241, 242, 243, 244, 244, 247, 247, 248, 248, 248, 249, 251, 255, 255, 256, 260, 260, 261, 264, 264, 266, 266, 268, 271, 274, 276, 279, 288, 288, 288, 288, 118, 120, 121, 121, 122, 125, 125, 129, 129, 130, 131, 132, 136, 137, 138, 145, 87, 88, 91, 97, 98, 100, 105, 106, 92, 95, 95, 96, 97, 97, 98, 99, 88, 92, 95, 95, 96, 97, 98, 109, 93, 93, 93, 96, 97, 97, 99, 101, 93, 94, 94, 95, 95, 99, 99, 99, 93, 93, 93, 96, 96, 97, 100, 102, 93, 95, 95, 96, 96, 96, 98, 99, 125, 125, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 129, 130, 131, 132 }; const SKP_int SKP_Silk_NLSF_MSVQ_CB0_16_ndelta_min_Q15[ 16 + 1 ] = { 266, 3, 40, 3, 3, 16, 78, 89, 107, 141, 188, 146, 272, 240, 235, 215, 632 }; const SKP_int16 SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * NLSF_MSVQ_CB0_16_VECTORS ] = { 1170, 2278, 3658, 5374, 7666, 9113, 11298, 13304, 15371, 17549, 19587, 21487, 23798, 26038, 28318, 30201, 1628, 2334, 4115, 6036, 7818, 9544, 11777, 14021, 15787, 17408, 19466, 21261, 22886, 24565, 26714, 28059, 1724, 2670, 4056, 6532, 8357, 10119, 12093, 14061, 16491, 18795, 20417, 22402, 24251, 26224, 28410, 29956, 1493, 3427, 4789, 6399, 8435, 10168, 12000, 14066, 16229, 18210, 20040, 22098, 24153, 26095, 28183, 30121, 1119, 2089, 4295, 6245, 8691, 10741, 12688, 15057, 17028, 18792, 20717, 22514, 24497, 26548, 28619, 30630, 1363, 2417, 3927, 5556, 7422, 9315, 11879, 13767, 16143, 18520, 20458, 22578, 24539, 26436, 28318, 30318, 1122, 2503, 5216, 7148, 9310, 11078, 13175, 14800, 16864, 18700, 20436, 22488, 24572, 26602, 28555, 30426, 600, 1317, 2970, 5609, 7694, 9784, 12169, 14087, 16379, 18378, 20551, 22686, 24739, 26697, 28646, 30355, 941, 1882, 4274, 5540, 8482, 9858, 11940, 14287, 16091, 18501, 20326, 22612, 24711, 26638, 28814, 30430, 635, 1699, 4376, 5948, 8097, 10115, 12274, 14178, 16111, 17813, 19695, 21773, 23927, 25866, 28022, 30134, 1408, 2222, 3524, 5615, 7345, 8849, 10989, 12772, 15352, 17026, 18919, 21062, 23329, 25215, 27209, 29023, 701, 1307, 3548, 6301, 7744, 9574, 11227, 12978, 15170, 17565, 19775, 22097, 24230, 26335, 28377, 30231, 1752, 2364, 4879, 6569, 7813, 9796, 11199, 14290, 15795, 18000, 20396, 22417, 24308, 26124, 28360, 30633, 901, 1629, 3356, 4635, 7256, 8767, 9971, 11558, 15215, 17544, 19523, 21852, 23900, 25978, 28133, 30184, 981, 1669, 3323, 4693, 6213, 8692, 10614, 12956, 15211, 17711, 19856, 22122, 24344, 26592, 28723, 30481, 1607, 2577, 4220, 5512, 8532, 10388, 11627, 13671, 15752, 17199, 19840, 21859, 23494, 25786, 28091, 30131, 811, 1471, 3144, 5041, 7430, 9389, 11174, 13255, 15157, 16741, 19583, 22167, 24115, 26142, 28383, 30395, 1543, 2144, 3629, 6347, 7333, 9339, 10710, 13596, 15099, 17340, 20102, 21886, 23732, 25637, 27818, 29917, 492, 1185, 2940, 5488, 7095, 8751, 11596, 13579, 16045, 18015, 20178, 22127, 24265, 26406, 28484, 30357, 1547, 2282, 3693, 6341, 7758, 9607, 11848, 13236, 16564, 18069, 19759, 21404, 24110, 26606, 28786, 30655, 685, 1338, 3409, 5262, 6950, 9222, 11414, 14523, 16337, 17893, 19436, 21298, 23293, 25181, 27973, 30520, 887, 1581, 3057, 4318, 7192, 8617, 10047, 13106, 16265, 17893, 20233, 22350, 24379, 26384, 28314, 30189, 2285, 3745, 5662, 7576, 9323, 11320, 13239, 15191, 17175, 19225, 21108, 22972, 24821, 26655, 28561, 30460, 1496, 2108, 3448, 6898, 8328, 9656, 11252, 12823, 14979, 16482, 18180, 20085, 22962, 25160, 27705, 29629, 575, 1261, 3861, 6627, 8294, 10809, 12705, 14768, 17076, 19047, 20978, 23055, 24972, 26703, 28720, 30345, 1682, 2213, 3882, 6238, 7208, 9646, 10877, 13431, 14805, 16213, 17941, 20873, 23550, 25765, 27756, 29461, 888, 1616, 3924, 5195, 7206, 8647, 9842, 11473, 16067, 18221, 20343, 22774, 24503, 26412, 28054, 29731, 805, 1454, 2683, 4472, 7936, 9360, 11398, 14345, 16205, 17832, 19453, 21646, 23899, 25928, 28387, 30463, 1640, 2383, 3484, 5082, 6032, 8606, 11640, 12966, 15842, 17368, 19346, 21182, 23638, 25889, 28368, 30299, 1632, 2204, 4510, 7580, 8718, 10512, 11962, 14096, 15640, 17194, 19143, 22247, 24563, 26561, 28604, 30509, 2043, 2612, 3985, 6851, 8038, 9514, 10979, 12789, 15426, 16728, 18899, 20277, 22902, 26209, 28711, 30618, 2224, 2798, 4465, 5320, 7108, 9436, 10986, 13222, 14599, 18317, 20141, 21843, 23601, 25700, 28184, 30582, 835, 1541, 4083, 5769, 7386, 9399, 10971, 12456, 15021, 18642, 20843, 23100, 25292, 26966, 28952, 30422, 1795, 2343, 4809, 5896, 7178, 8545, 10223, 13370, 14606, 16469, 18273, 20736, 23645, 26257, 28224, 30390, 1734, 2254, 4031, 5188, 6506, 7872, 9651, 13025, 14419, 17305, 19495, 22190, 24403, 26302, 28195, 30177, 1841, 2349, 3968, 4764, 6376, 9825, 11048, 13345, 14682, 16252, 18183, 21363, 23918, 26156, 28031, 29935, 1432, 2047, 5631, 6927, 8198, 9675, 11358, 13506, 14802, 16419, 18339, 22019, 24124, 26177, 28130, 30586, 1730, 2320, 3744, 4808, 6007, 9666, 10997, 13622, 15234, 17495, 20088, 22002, 23603, 25400, 27379, 29254, 1267, 1915, 5483, 6812, 8229, 9919, 11589, 13337, 14747, 17965, 20552, 22167, 24519, 26819, 28883, 30642, 1526, 2229, 4240, 7388, 8953, 10450, 11899, 13718, 16861, 18323, 20379, 22672, 24797, 26906, 28906, 30622, 2175, 2791, 4104, 6875, 8612, 9798, 12152, 13536, 15623, 17682, 19213, 21060, 24382, 26760, 28633, 30248, 454, 1231, 4339, 5738, 7550, 9006, 10320, 13525, 16005, 17849, 20071, 21992, 23949, 26043, 28245, 30175, 2250, 2791, 4230, 5283, 6762, 10607, 11879, 13821, 15797, 17264, 20029, 22266, 24588, 26437, 28244, 30419, 1696, 2216, 4308, 8385, 9766, 11030, 12556, 14099, 16322, 17640, 19166, 20590, 23967, 26858, 28798, 30562, 2452, 3236, 4369, 6118, 7156, 9003, 11509, 12796, 15749, 17291, 19491, 22241, 24530, 26474, 28273, 30073, 1811, 2541, 3555, 5480, 9123, 10527, 11894, 13659, 15262, 16899, 19366, 21069, 22694, 24314, 27256, 29983, 1553, 2246, 4559, 5500, 6754, 7874, 11739, 13571, 15188, 17879, 20281, 22510, 24614, 26649, 28786, 30755, 1982, 2768, 3834, 5964, 8732, 9908, 11797, 14813, 16311, 17946, 21097, 22851, 24456, 26304, 28166, 29755, 1824, 2529, 3817, 5449, 6854, 8714, 10381, 12286, 14194, 15774, 19524, 21374, 23695, 26069, 28096, 30212, 2212, 2854, 3947, 5898, 9930, 11556, 12854, 14788, 16328, 17700, 20321, 22098, 23672, 25291, 26976, 28586, 2023, 2599, 4024, 4916, 6613, 11149, 12457, 14626, 16320, 17822, 19673, 21172, 23115, 26051, 28825, 30758, 1628, 2206, 3467, 4364, 8679, 10173, 11864, 13679, 14998, 16938, 19207, 21364, 23850, 26115, 28124, 30273, 2014, 2603, 4114, 7254, 8516, 10043, 11822, 13503, 16329, 17826, 19697, 21280, 23151, 24661, 26807, 30161, 2376, 2980, 4422, 5770, 7016, 9723, 11125, 13516, 15485, 16985, 19160, 20587, 24401, 27180, 29046, 30647, 2454, 3502, 4624, 6019, 7632, 8849, 10792, 13964, 15523, 17085, 19611, 21238, 22856, 25108, 28106, 29890, 1573, 2274, 3308, 5999, 8977, 10104, 12457, 14258, 15749, 18180, 19974, 21253, 23045, 25058, 27741, 30315, 1943, 2730, 4140, 6160, 7491, 8986, 11309, 12775, 14820, 16558, 17909, 19757, 21512, 23605, 27274, 29527, 2021, 2582, 4494, 5835, 6993, 8245, 9827, 14733, 16462, 17894, 19647, 21083, 23764, 26667, 29072, 30990, 1052, 1775, 3218, 4378, 7666, 9403, 11248, 13327, 14972, 17962, 20758, 22354, 25071, 27209, 29001, 30609, 2218, 2866, 4223, 5352, 6581, 9980, 11587, 13121, 15193, 16583, 18386, 20080, 22013, 25317, 28127, 29880, 2146, 2840, 4397, 5840, 7449, 8721, 10512, 11936, 13595, 17253, 19310, 20891, 23417, 25627, 27749, 30231, 1972, 2619, 3756, 6367, 7641, 8814, 12286, 13768, 15309, 18036, 19557, 20904, 22582, 24876, 27800, 30440, 2005, 2577, 4272, 7373, 8558, 10223, 11770, 13402, 16502, 18000, 19645, 21104, 22990, 26806, 29505, 30942, 1153, 1822, 3724, 5443, 6990, 8702, 10289, 11899, 13856, 15315, 17601, 21064, 23692, 26083, 28586, 30639, 1304, 1869, 3318, 7195, 9613, 10733, 12393, 13728, 15822, 17474, 18882, 20692, 23114, 25540, 27684, 29244, 2093, 2691, 4018, 6658, 7947, 9147, 10497, 11881, 15888, 17821, 19333, 21233, 23371, 25234, 27553, 29998, 575, 1331, 5304, 6910, 8425, 10086, 11577, 13498, 16444, 18527, 20565, 22847, 24914, 26692, 28759, 30157, 1435, 2024, 3283, 4156, 7611, 10592, 12049, 13927, 15459, 18413, 20495, 22270, 24222, 26093, 28065, 30099, 1632, 2168, 5540, 7478, 8630, 10391, 11644, 14321, 15741, 17357, 18756, 20434, 22799, 26060, 28542, 30696, 1407, 2245, 3405, 5639, 9419, 10685, 12104, 13495, 15535, 18357, 19996, 21689, 24351, 26550, 28853, 30564, 1675, 2226, 4005, 8223, 9975, 11155, 12822, 14316, 16504, 18137, 19574, 21050, 22759, 24912, 28296, 30634, 1080, 1614, 3622, 7565, 8748, 10303, 11713, 13848, 15633, 17434, 19761, 21825, 23571, 25393, 27406, 29063, 1693, 2229, 3456, 4354, 5670, 10890, 12563, 14167, 15879, 17377, 19817, 21971, 24094, 26131, 28298, 30099, 2042, 2959, 4195, 5740, 7106, 8267, 11126, 14973, 16914, 18295, 20532, 21982, 23711, 25769, 27609, 29351, 984, 1612, 3808, 5265, 6885, 8411, 9547, 10889, 12522, 16520, 19549, 21639, 23746, 26058, 28310, 30374, 2036, 2538, 4166, 7761, 9146, 10412, 12144, 13609, 15588, 17169, 18559, 20113, 21820, 24313, 28029, 30612, 1871, 2355, 4061, 5143, 7464, 10129, 11941, 15001, 16680, 18354, 19957, 22279, 24861, 26872, 28988, 30615, 2566, 3161, 4643, 6227, 7406, 9970, 11618, 13416, 15889, 17364, 19121, 20817, 22592, 24720, 28733, 31082, 1700, 2327, 4828, 5939, 7567, 9154, 11087, 12771, 14209, 16121, 20222, 22671, 24648, 26656, 28696, 30745, 3169, 3873, 5046, 6868, 8184, 9480, 12335, 14068, 15774, 17971, 20231, 21711, 23520, 25245, 27026, 28730, 1564, 2391, 4229, 6730, 8905, 10459, 13026, 15033, 17265, 19809, 21849, 23741, 25490, 27312, 29061, 30527, 2864, 3559, 4719, 6441, 9592, 11055, 12763, 14784, 16428, 18164, 20486, 22262, 24183, 26263, 28383, 30224, 2673, 3449, 4581, 5983, 6863, 8311, 12464, 13911, 15738, 17791, 19416, 21182, 24025, 26561, 28723, 30440, 2419, 3049, 4274, 6384, 8564, 9661, 11288, 12676, 14447, 17578, 19816, 21231, 23099, 25270, 26899, 28926, 1278, 2001, 3000, 5353, 9995, 11777, 13018, 14570, 16050, 17762, 19982, 21617, 23371, 25083, 27656, 30172, 932, 1624, 2798, 4570, 8592, 9988, 11552, 13050, 16921, 18677, 20415, 22810, 24817, 26819, 28804, 30385, 2324, 2973, 4156, 5702, 6919, 8806, 10259, 12503, 15015, 16567, 19418, 21375, 22943, 24550, 27024, 29849, 1564, 2373, 3455, 4907, 5975, 7436, 11786, 14505, 16107, 18148, 20019, 21653, 23740, 25814, 28578, 30372, 3025, 3729, 4866, 6520, 9487, 10943, 12358, 14258, 16174, 17501, 19476, 21408, 23227, 24906, 27347, 29407, 1270, 1965, 6802, 7995, 9204, 10828, 12507, 14230, 15759, 17860, 20369, 22502, 24633, 26514, 28535, 30525, 2210, 2749, 4266, 7487, 9878, 11018, 12823, 14431, 16247, 18626, 20450, 22054, 23739, 25291, 27074, 29169, 1275, 1926, 4330, 6573, 8441, 10920, 13260, 15008, 16927, 18573, 20644, 22217, 23983, 25474, 27372, 28645, 3015, 3670, 5086, 6372, 7888, 9309, 10966, 12642, 14495, 16172, 18080, 19972, 22454, 24899, 27362, 29975, 2882, 3733, 5113, 6482, 8125, 9685, 11598, 13288, 15405, 17192, 20178, 22426, 24801, 27014, 29212, 30811, 2300, 2968, 4101, 5442, 6327, 7910, 12455, 13862, 15747, 17505, 19053, 20679, 22615, 24658, 27499, 30065, 2257, 2940, 4430, 5991, 7042, 8364, 9414, 11224, 15723, 17420, 19253, 21469, 23915, 26053, 28430, 30384, 1227, 2045, 3818, 5011, 6990, 9231, 11024, 13011, 17341, 19017, 20583, 22799, 25195, 26876, 29351, 30805, 1354, 1924, 3789, 8077, 10453, 11639, 13352, 14817, 16743, 18189, 20095, 22014, 24593, 26677, 28647, 30256, 3142, 4049, 6197, 7417, 8753, 10156, 11533, 13181, 15947, 17655, 19606, 21402, 23487, 25659, 28123, 30304, 1317, 2263, 4725, 7611, 9667, 11634, 14143, 16258, 18724, 20698, 22379, 24007, 25775, 27251, 28930, 30593, 1570, 2323, 3818, 6215, 9893, 11556, 13070, 14631, 16152, 18290, 21386, 23346, 25114, 26923, 28712, 30168, 2297, 3905, 6287, 8558, 10668, 12766, 15019, 17102, 19036, 20677, 22341, 23871, 25478, 27085, 28851, 30520, 1915, 2507, 4033, 5749, 7059, 8871, 10659, 12198, 13937, 15383, 16869, 18707, 23175, 25818, 28514, 30501, 2404, 2918, 5190, 6252, 7426, 9887, 12387, 14795, 16754, 18368, 20338, 22003, 24236, 26456, 28490, 30397, 1621, 2227, 3479, 5085, 9425, 12892, 14246, 15652, 17205, 18674, 20446, 22209, 23778, 25867, 27931, 30093, 1869, 2390, 4105, 7021, 11221, 12775, 14059, 15590, 17024, 18608, 20595, 22075, 23649, 25154, 26914, 28671, 2551, 3252, 4688, 6562, 7869, 9125, 10475, 11800, 15402, 18780, 20992, 22555, 24289, 25968, 27465, 29232, 2705, 3493, 4735, 6360, 7905, 9352, 11538, 13430, 15239, 16919, 18619, 20094, 21800, 23342, 25200, 29257, 2166, 2791, 4011, 5081, 5896, 9038, 13407, 14703, 16543, 18189, 19896, 21857, 24872, 26971, 28955, 30514, 1865, 3021, 4696, 6534, 8343, 9914, 12789, 14103, 16533, 17729, 21340, 22439, 24873, 26330, 28428, 30154, 3369, 4345, 6573, 8763, 10309, 11713, 13367, 14784, 16483, 18145, 19839, 21247, 23292, 25477, 27555, 29447, 1265, 2184, 5443, 7893, 10591, 13139, 15105, 16639, 18402, 19826, 21419, 22995, 24719, 26437, 28363, 30125, 1584, 2004, 3535, 4450, 8662, 10764, 12832, 14978, 16972, 18794, 20932, 22547, 24636, 26521, 28701, 30567, 3419, 4528, 6602, 7890, 9508, 10875, 12771, 14357, 16051, 18330, 20630, 22490, 25070, 26936, 28946, 30542, 1726, 2252, 4597, 6950, 8379, 9823, 11363, 12794, 14306, 15476, 16798, 18018, 21671, 25550, 28148, 30367, 3385, 3870, 5307, 6388, 7141, 8684, 12695, 14939, 16480, 18277, 20537, 22048, 23947, 25965, 28214, 29956, 2771, 3306, 4450, 5560, 6453, 9493, 13548, 14754, 16743, 18447, 20028, 21736, 23746, 25353, 27141, 29066, 3028, 3900, 6617, 7893, 9211, 10480, 12047, 13583, 15182, 16662, 18502, 20092, 22190, 24358, 26302, 28957, 2000, 2550, 4067, 6837, 9628, 11002, 12594, 14098, 15589, 17195, 18679, 20099, 21530, 23085, 24641, 29022, 2844, 3302, 5103, 6107, 6911, 8598, 12416, 14054, 16026, 18567, 20672, 22270, 23952, 25771, 27658, 30026, 4043, 5150, 7268, 9056, 10916, 12638, 14543, 16184, 17948, 19691, 21357, 22981, 24825, 26591, 28479, 30233, 2109, 2625, 4320, 5525, 7454, 10220, 12980, 14698, 17627, 19263, 20485, 22381, 24279, 25777, 27847, 30458, 1550, 2667, 6473, 9496, 10985, 12352, 13795, 15233, 17099, 18642, 20461, 22116, 24197, 26291, 28403, 30132, 2411, 3084, 4145, 5394, 6367, 8154, 13125, 16049, 17561, 19125, 21258, 22762, 24459, 26317, 28255, 29702, 4159, 4516, 5956, 7635, 8254, 8980, 11208, 14133, 16210, 17875, 20196, 21864, 23840, 25747, 28058, 30012, 2026, 2431, 2845, 3618, 7950, 9802, 12721, 14460, 16576, 18984, 21376, 23319, 24961, 26718, 28971, 30640, 3429, 3833, 4472, 4912, 7723, 10386, 12981, 15322, 16699, 18807, 20778, 22551, 24627, 26494, 28334, 30482, 4740, 5169, 5796, 6485, 6998, 8830, 11777, 14414, 16831, 18413, 20789, 22369, 24236, 25835, 27807, 30021, 150, 168, -17, -107, -142, -229, -320, -406, -503, -620, -867, -935, -902, -680, -398, -114, -398, -355, 49, 255, 114, 260, 399, 264, 317, 431, 514, 531, 435, 356, 238, 106, -43, -36, -169, -224, -391, -633, -776, -970, -844, -455, -181, -12, 85, 85, 164, 195, 122, 85, -158, -640, -903, 9, 7, -124, 149, 32, 220, 369, 242, 115, 79, 84, -146, -216, -70, 1024, 751, 574, 440, 377, 352, 203, 30, 16, -3, 81, 161, 100, -148, -176, 933, 750, 404, 171, -2, -146, -411, -442, -541, -552, -442, -269, -240, -52, 603, 635, 405, 178, 215, 19, -153, -167, -290, -219, 151, 271, 151, 119, 303, 266, 100, 69, -293, -657, 939, 659, 442, 351, 132, 98, -16, -1, -135, -200, -223, -89, 167, 154, 172, 237, -45, -183, -228, -486, 263, 608, 158, -125, -390, -227, -118, 43, -457, -392, -769, -840, 20, -117, -194, -189, -173, -173, -33, 32, 174, 144, 115, 167, 57, 44, 14, 147, 96, -54, -142, -129, -254, -331, 304, 310, -52, -419, -846, -1060, -88, -123, -202, -343, -554, -961, -951, 327, 159, 81, 255, 227, 120, 203, 256, 192, 164, 224, 290, 195, 216, 209, 128, 832, 1028, 889, 698, 504, 408, 355, 218, 32, -115, -84, -276, -100, -312, -484, 899, 682, 465, 456, 241, -12, -275, -425, -461, -367, -33, -28, -102, -194, -527, 863, 906, 463, 245, 13, -212, -305, -105, 163, 279, 176, 93, 67, 115, 192, 61, -50, -132, -175, -224, -271, -629, -252, 1158, 972, 638, 280, 300, 326, 143, -152, -214, -287, 53, -42, -236, -352, -423, -248, -129, -163, -178, -119, 85, 57, 514, 382, 374, 402, 424, 423, 271, 197, 97, 40, 39, -97, -191, -164, -230, -256, -410, 396, 327, 127, 10, -119, -167, -291, -274, -141, -99, -226, -218, -139, -224, -209, -268, -442, -413, 222, 58, 521, 344, 258, 76, -42, -142, -165, -123, -92, 47, 8, -3, -191, -11, -164, -167, -351, -740, 311, 538, 291, 184, 29, -105, 9, -30, -54, -17, -77, -271, -412, -622, -648, 476, 186, -66, -197, -73, -94, -15, 47, 28, 112, -58, -33, 65, 19, 84, 86, 276, 114, 472, 786, 799, 625, 415, 178, -35, -26, 5, 9, 83, 39, 37, 39, -184, -374, -265, -362, -501, 337, 716, 478, -60, -125, -163, 362, 17, -122, -233, 279, 138, 157, 318, 193, 189, 209, 266, 252, -46, -56, -277, -429, 464, 386, 142, 44, -43, 66, 264, 182, 47, 14, -26, -79, 49, 15, -128, -203, -400, -478, 325, 27, 234, 411, 205, 129, 12, 58, 123, 57, 171, 137, 96, 128, -32, 134, -12, 57, 119, 26, -22, -165, -500, -701, -528, -116, 64, -8, 97, -9, -162, -66, -156, -194, -303, -546, -341, 546, 358, 95, 45, 76, 270, 403, 205, 100, 123, 50, -53, -144, -110, -13, 32, -228, -130, 353, 296, 56, -372, -253, 365, 73, 10, -34, -139, -191, -96, 5, 44, -85, -179, -129, -192, -246, -85, -110, -155, -44, -27, 145, 138, 79, 32, -148, -577, -634, 191, 94, -9, -35, -77, -84, -56, -171, -298, -271, -243, -156, -328, -235, -76, -128, -121, 129, 13, -22, 32, 45, -248, -65, 193, -81, 299, 57, -147, 192, -165, -354, -334, -106, -156, -40, -3, -68, 124, -257, 78, 124, 170, 412, 227, 105, -104, 12, 154, 250, 274, 258, 4, -27, 235, 152, 51, 338, 300, 7, -314, -411, 215, 170, -9, -93, -77, 76, 67, 54, 200, 315, 163, 72, -91, -402, 158, 187, -156, -91, 290, 267, 167, 91, 140, 171, 112, 9, -42, -177, -440, 385, 80, 15, 172, 129, 41, -129, -372, -24, -75, -30, -170, 10, -118, 57, 78, -101, 232, 161, 123, 256, 277, 101, -192, -629, -100, -60, -232, 66, 13, -13, -80, -239, 239, 37, 32, 89, -319, -579, 450, 360, 3, -29, -299, -89, -54, -110, -246, -164, 6, -188, 338, 176, -92, 197, 137, 134, 12, -2, 56, -183, 114, -36, -131, -204, 75, -25, -174, 191, -15, -290, -429, -267, 79, 37, 106, 23, -384, 425, 70, -14, 212, 105, 15, -2, -42, -37, -123, 108, 28, -48, 193, 197, 173, -33, 37, 73, -57, 256, 137, -58, -430, -228, 217, -51, -10, -58, -6, 22, 104, 61, -119, 169, 144, 16, -46, -394, 60, 454, -80, -298, -65, 25, 0, -24, -65, -417, 465, 276, -3, -194, -13, 130, 19, -6, -21, -24, -180, -53, -85, 20, 118, 147, 113, -75, -289, 226, -122, 227, 270, 125, 109, 197, 125, 138, 44, 60, 25, -55, -167, -32, -139, -193, -173, -316, 287, -208, 253, 239, 27, -80, -188, -28, -182, -235, 156, -117, 128, -48, -58, -226, 172, 181, 167, 19, 62, 10, 2, 181, 151, 108, -16, -11, -78, -331, 411, 133, 17, 104, 64, -184, 24, -30, -3, -283, 121, 204, -8, -199, -21, -80, -169, -157, -191, -136, 81, 155, 14, -131, 244, 74, -57, -47, -280, 347, 111, -77, -128, -142, -194, -125, -6, -68, 91, 1, 23, 14, -154, -34, 23, -38, -343, 503, 146, -38, -46, -41, 58, 31, 63, -48, -117, 45, 28, 1, -89, -5, -44, -29, -448, 487, 204, 81, 46, -106, -302, 380, 120, -38, -12, -39, 70, -3, 25, -65, 30, -11, 34, -15, 22, -115, 0, -79, -83, 45, 114, 43, 150, 36, 233, 149, 195, 5, 25, -52, -475, 274, 28, -39, -8, -66, -255, 258, 56, 143, -45, -190, 165, -60, 20, 2, 125, -129, 51, -8, -335, 288, 38, 59, 25, -42, 23, -118, -112, 11, -55, -133, -109, 24, -105, 78, -64, -245, 202, -65, -127, 162, 40, -94, 89, -85, -119, -103, 97, 9, -70, -28, 194, 86, -112, -92, -114, 74, -49, 46, -84, -178, 113, 52, -205, 333, 88, 222, 56, -55, 13, 86, 4, -77, 224, 114, -105, 112, 125, -29, -18, -144, 22, -58, -99, 28, 114, -66, -32, -169, -314, 285, 72, -74, 179, 28, -79, -182, 13, -55, 147, 13, 12, -54, 31, -84, -17, -75, -228, 83, -375, 436, 110, -63, -27, -136, 169, -56, -8, -171, 184, -42, 148, 68, 204, 235, 110, -229, 91, 171, -43, -3, -26, -99, -111, 71, -170, 202, -67, 181, -37, 109, -120, 3, -55, -260, -16, 152, 91, 142, 42, 44, 134, 47, 17, -35, 22, 79, -169, 41, 46, 277, -93, -49, -126, 37, -103, -34, -22, -90, -134, -205, 92, -9, 1, -195, -239, 45, 54, 18, -23, -1, -80, -98, -20, -261, 306, 72, 20, -89, -217, 11, 6, -82, 89, 13, -129, -89, 83, -71, -55, 130, -98, -146, -27, -57, 53, 275, 17, 170, -5, -54, 132, -64, 72, 160, -125, -168, 72, 40, 170, 78, 248, 116, 20, 84, 31, -34, 190, 38, 13, -106, 225, 27, -168, 24, -157, -122, 165, 11, -161, -213, -12, -51, -101, 42, 101, 27, 55, 111, 75, 71, -96, -1, 65, -277, 393, -26, -44, -68, -84, -66, -95, 235, 179, -25, -41, 27, -91, -128, -222, 146, -72, -30, -24, 55, -126, -68, -58, -127, 13, -97, -106, 174, -100, 155, 101, -146, -21, 261, 22, 38, -66, 65, 4, 70, 64, 144, 59, 213, 71, -337, 303, -52, 51, -56, 1, 10, -15, -5, 34, 52, 228, 131, 161, -127, -214, 238, 123, 64, -147, -50, -34, -127, 204, 162, 85, 41, 5, -140, 73, -150, 56, -96, -66, -20, 2, -235, 59, -22, -107, 150, -16, -47, -4, 81, -67, 167, 149, 149, -157, 288, -156, -27, -8, 18, 83, -24, -41, -167, 158, -100, 93, 53, 201, 15, 42, 266, 278, -12, -6, -37, 85, 6, 20, -188, -271, 107, -13, -80, 51, 202, 173, -69, 78, -188, 46, 4, 153, 12, -138, 169, 5, -58, -123, -108, -243, 150, 10, -191, 246, -15, 38, 25, -10, 14, 61, 50, -206, -215, -220, 90, 5, -149, -219, 56, 142, 24, -376, 77, -80, 75, 6, 42, -101, 16, 56, 14, -57, 3, -17, 80, 57, -36, 88, -59, -97, -19, -148, 46, -219, 226, 114, -4, -72, -15, 37, -49, -28, 247, 44, 123, 47, -122, -38, 17, 4, -113, -32, -224, 154, -134, 196, 71, -267, -85, 28, -70, 89, -120, 99, -2, 64, 76, -166, -48, 189, -35, -92, -169, -123, 339, 38, -25, 38, -35, 225, -139, -50, -63, 246, 60, -185, -109, -49, -53, -167, 51, 149, 60, -101, -33, 25, -76, 120, 32, -30, -83, 102, 91, -186, -261, 131, -197 }; const SKP_Silk_NLSF_CBS SKP_Silk_NLSF_CB0_16_Stage_info[ NLSF_MSVQ_CB0_16_STAGES ] = { { 128, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 0 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 0 ] }, { 16, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 128 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 128 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 144 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 144 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 152 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 152 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 160 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 160 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 168 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 168 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 176 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 176 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 184 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 184 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 192 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 192 ] }, { 16, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 200 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 200 ] } }; const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB0_16 = { NLSF_MSVQ_CB0_16_STAGES, SKP_Silk_NLSF_CB0_16_Stage_info, SKP_Silk_NLSF_MSVQ_CB0_16_ndelta_min_Q15, SKP_Silk_NLSF_MSVQ_CB0_16_CDF, SKP_Silk_NLSF_MSVQ_CB0_16_CDF_start_ptr, SKP_Silk_NLSF_MSVQ_CB0_16_CDF_middle_idx }; h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_dec_API.c0000644000175000017500000003620011513063445021137 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_SDK_API.h" #include "SKP_Silk_main_FIX.h" /*********************/ /* Decoder functions */ /*********************/ SKP_int SKP_Silk_SDK_Get_Decoder_Size( SKP_int32 *decSizeBytes ) { SKP_int ret = 0; *decSizeBytes = sizeof( SKP_Silk_decoder_state ); return ret; } /* Reset decoder state */ SKP_int SKP_Silk_SDK_InitDecoder( void* decState /* I/O: State */ ) { SKP_int ret = 0; SKP_Silk_decoder_state *struc; struc = (SKP_Silk_decoder_state *)decState; ret = SKP_Silk_init_decoder( struc ); return ret; } /* Decode a frame */ SKP_int SKP_Silk_SDK_Decode( void* decState, /* I/O: State */ SKP_SILK_SDK_DecControlStruct* decControl, /* I/O: Control structure */ SKP_int lostFlag, /* I: 0: no loss, 1 loss */ const SKP_uint8 *inData, /* I: Encoded input vector */ const SKP_int nBytesIn, /* I: Number of input Bytes */ SKP_int16 *samplesOut, /* O: Decoded output speech vector */ SKP_int16 *nSamplesOut /* I/O: Number of samples (vector/decoded) */ ) { SKP_int ret = 0, used_bytes, prev_fs_kHz; SKP_Silk_decoder_state *psDec; psDec = (SKP_Silk_decoder_state *)decState; /**********************************/ /* Test if first frame in payload */ /**********************************/ if( psDec->moreInternalDecoderFrames == 0 ) { /* First Frame in Payload */ psDec->nFramesDecoded = 0; /* Used to count frames in packet */ } if( psDec->moreInternalDecoderFrames == 0 && /* First frame in packet */ lostFlag == 0 && /* Not packet loss */ nBytesIn > MAX_ARITHM_BYTES ) { /* Too long payload */ /* Avoid trying to decode a too large packet */ lostFlag = 1; ret = SKP_SILK_DEC_PAYLOAD_TOO_LARGE; } /* Save previous sample frequency */ prev_fs_kHz = psDec->fs_kHz; /* Call decoder for one frame */ ret += SKP_Silk_decode_frame( psDec, samplesOut, nSamplesOut, inData, nBytesIn, lostFlag, &used_bytes ); if( used_bytes ) { /* Only Call if not a packet loss */ if( psDec->nBytesLeft > 0 && psDec->FrameTermination == SKP_SILK_MORE_FRAMES && psDec->nFramesDecoded < 5 ) { /* We have more frames in the Payload */ psDec->moreInternalDecoderFrames = 1; } else { /* Last frame in Payload */ psDec->moreInternalDecoderFrames = 0; psDec->nFramesInPacket = psDec->nFramesDecoded; /* Track inband FEC usage */ if( psDec->vadFlag == VOICE_ACTIVITY ) { if( psDec->FrameTermination == SKP_SILK_LAST_FRAME ) { psDec->no_FEC_counter++; if( psDec->no_FEC_counter > NO_LBRR_THRES ) { psDec->inband_FEC_offset = 0; } } else if( psDec->FrameTermination == SKP_SILK_LBRR_VER1 ) { psDec->inband_FEC_offset = 1; /* FEC info with 1 packet delay */ psDec->no_FEC_counter = 0; } else if( psDec->FrameTermination == SKP_SILK_LBRR_VER2 ) { psDec->inband_FEC_offset = 2; /* FEC info with 2 packets delay */ psDec->no_FEC_counter = 0; } } } } if( psDec->fs_kHz * 1000 > decControl->sampleRate ) { ret = SKP_SILK_DEC_WRONG_SAMPLING_FREQUENCY; } /* Do any resampling if needed */ if( psDec->fs_kHz * 1000 != decControl->sampleRate ) { SKP_int16 samplesOut_tmp[ 2 * MAX_FRAME_LENGTH ]; SKP_int32 scratch[ 3 * MAX_FRAME_LENGTH ]; /* Copy to a tmpbuffer as the resampling writes to samplesOut */ memcpy( samplesOut_tmp, samplesOut, *nSamplesOut * sizeof( SKP_int16 ) ); /* Clear resampler state when switching internal sampling frequency */ if( prev_fs_kHz != psDec->fs_kHz ) { SKP_memset( psDec->resampleState, 0, sizeof( psDec->resampleState ) ); } if( psDec->fs_kHz == 16 && decControl->sampleRate == 24000 ) { /* Resample from 16 kHz to 24 kHz */ SKP_Silk_resample_3_2( samplesOut, psDec->resampleState, samplesOut_tmp, *nSamplesOut ); } else if( psDec->fs_kHz == 12 && decControl->sampleRate == 24000 ) { /* Resample from 12 kHz to 24 kHz */ SKP_Silk_resample_2_1_coarse( samplesOut_tmp, psDec->resampleState, samplesOut, scratch, *nSamplesOut ); } else if( psDec->fs_kHz == 8 && decControl->sampleRate == 24000 ) { /* Resample from 8 kHz to 24 kHz */ SKP_Silk_resample_3_1( samplesOut, psDec->resampleState, samplesOut_tmp, *nSamplesOut ); } else if( psDec->fs_kHz == 12 && decControl->sampleRate == 16000 ) { /* Resample from 12 kHz to 16 kHz */ SKP_Silk_resample_4_3( samplesOut, psDec->resampleState, samplesOut_tmp, *nSamplesOut ); } else if( psDec->fs_kHz == 8 && decControl->sampleRate == 16000 ) { /* Resample from 8 kHz to 16 kHz */ SKP_Silk_resample_2_1_coarse( samplesOut_tmp, psDec->resampleState, samplesOut, scratch, *nSamplesOut ); } else if( psDec->fs_kHz == 8 && decControl->sampleRate == 12000 ) { /* Resample from 8 kHz to 12 kHz */ SKP_Silk_resample_3_2( samplesOut, psDec->resampleState, samplesOut_tmp, *nSamplesOut ); } *nSamplesOut = SKP_DIV32( ( SKP_int32 )*nSamplesOut * decControl->sampleRate, psDec->fs_kHz * 1000 ); } /* Copy all parameters that are needed out of internal structure to the control stucture */ decControl->frameSize = ( SKP_int )psDec->frame_length; decControl->framesPerPacket = ( SKP_int )psDec->nFramesInPacket; decControl->inBandFECOffset = ( SKP_int )psDec->inband_FEC_offset; decControl->moreInternalDecoderFrames = ( SKP_int )psDec->moreInternalDecoderFrames; return ret; } /* Function to find LBRR information in a packet */ void SKP_Silk_SDK_search_for_LBRR( void *decState, /* I: Decoder state, to select bitstream version only */ const SKP_uint8 *inData, /* I: Encoded input vector */ const SKP_int16 nBytesIn, /* I: Number of input Bytes */ SKP_int lost_offset, /* I: Offset from lost packet */ SKP_uint8 *LBRRData, /* O: LBRR payload */ SKP_int16 *nLBRRBytes /* O: Number of LBRR Bytes */ ) { SKP_Silk_decoder_state *psDec; SKP_Silk_decoder_state sDec; // Local decoder state to avoid interfering with running decoder */ SKP_Silk_decoder_control sDecCtrl; SKP_int i, TempQ[ MAX_FRAME_LENGTH ]; psDec = ( SKP_Silk_decoder_state * )decState; if( lost_offset < 1 || lost_offset > MAX_LBRR_DELAY ) { /* No useful FEC in this packet */ *nLBRRBytes = 0; return; } sDec.nFramesDecoded = 0; sDec.fs_kHz = 0; /* Force update parameters LPC_order etc */ SKP_memset( sDec.prevNLSF_Q15, 0, MAX_LPC_ORDER * sizeof( SKP_int ) ); SKP_Silk_range_dec_init( &sDec.sRC, inData, ( SKP_int32 )nBytesIn ); if( psDec->bitstream_v == BIT_STREAM_V4 ) { /* Silk_v4 payload */ /* Decode all parameter indices for the whole packet*/ SKP_Silk_decode_indices_v4( &sDec ); /* Is there usable LBRR in this packet */ *nLBRRBytes = 0; if( ( sDec.FrameTermination - 1 ) & lost_offset && sDec.FrameTermination > 0 && sDec.nBytesLeft >= 0 ) { /* The wanted FEC is present in the packet */ for( i = 0; i < sDec.nFramesInPacket; i++ ) { SKP_Silk_decode_parameters_v4( &sDec, &sDecCtrl, TempQ, 0 ); if( sDec.nBytesLeft <= 0 || sDec.sRC.error ) { /* Corrupt stream */ LBRRData = NULL; *nLBRRBytes = 0; break; } else { sDec.nFramesDecoded++; } } if( LBRRData != NULL ) { /* The wanted FEC is present in the packet */ *nLBRRBytes = sDec.nBytesLeft; SKP_memcpy( LBRRData, &inData[ nBytesIn - sDec.nBytesLeft ], sDec.nBytesLeft * sizeof( SKP_uint8 ) ); } } } else { /* Silk_v3 payload */ while(1) { SKP_Silk_decode_parameters( &sDec, &sDecCtrl, TempQ, 0 ); if( sDec.sRC.error ) { /* Corrupt stream */ *nLBRRBytes = 0; return; }; if( ( sDec.FrameTermination - 1 ) & lost_offset && sDec.FrameTermination > 0 && sDec.nBytesLeft >= 0 ) { /* The wanted FEC is present in the packet */ *nLBRRBytes = sDec.nBytesLeft; SKP_memcpy( LBRRData, &inData[ nBytesIn - sDec.nBytesLeft ], sDec.nBytesLeft * sizeof( SKP_uint8 ) ); break; } if( sDec.nBytesLeft > 0 && sDec.FrameTermination == SKP_SILK_MORE_FRAMES ) { sDec.nFramesDecoded++; } else { LBRRData = NULL; *nLBRRBytes = 0; break; } } } } /* Getting type of content for a packet */ void SKP_Silk_SDK_get_TOC( void *decState, /* I/O: Decoder state, to select bitstream version only */ const SKP_uint8 *inData, /* I: Encoded input vector */ const SKP_int16 nBytesIn, /* I: Number of input bytes */ SKP_Silk_TOC_struct *Silk_TOC /* O: Type of content */ ) { SKP_Silk_decoder_state *psDec; SKP_Silk_decoder_state sDec; // Local Decoder state to avoid interfering with running decoder */ SKP_Silk_decoder_control sDecCtrl; SKP_int i, TempQ[ MAX_FRAME_LENGTH ]; psDec = (SKP_Silk_decoder_state *)decState; sDec.nFramesDecoded = 0; sDec.fs_kHz = 0; /* Force update parameters LPC_order etc */ SKP_Silk_range_dec_init( &sDec.sRC, inData, ( SKP_int32 )nBytesIn ); if( psDec->bitstream_v == BIT_STREAM_V4 ) { /* Silk_v4 payload */ /* Decode all parameter indices for the whole packet*/ SKP_Silk_decode_indices_v4( &sDec ); if( sDec.nFramesInPacket > SILK_MAX_FRAMES_PER_PACKET || sDec.sRC.error ) { /* Corrupt packet */ SKP_memset( Silk_TOC, 0, sizeof( SKP_Silk_TOC_struct ) ); Silk_TOC->corrupt = 1; } else { Silk_TOC->corrupt = 0; Silk_TOC->framesInPacket = sDec.nFramesInPacket; Silk_TOC->fs_kHz = sDec.fs_kHz; if( sDec.FrameTermination == SKP_SILK_LAST_FRAME ) { Silk_TOC->inbandLBRR = sDec.FrameTermination; } else { Silk_TOC->inbandLBRR = sDec.FrameTermination - 1; } /* Copy data */ for( i = 0; i < sDec.nFramesInPacket; i++ ) { Silk_TOC->vadFlags[ i ] = sDec.vadFlagBuf[ i ]; Silk_TOC->sigtypeFlags[ i ] = sDec.sigtype[ i ]; } } } else { /* Silk_v3 payload */ Silk_TOC->corrupt = 0; while( 1 ) { SKP_Silk_decode_parameters( &sDec, &sDecCtrl, TempQ, 0 ); Silk_TOC->vadFlags[ sDec.nFramesDecoded ] = sDec.vadFlag; Silk_TOC->sigtypeFlags[ sDec.nFramesDecoded ] = sDecCtrl.sigtype; if( sDec.sRC.error ) { /* Corrupt stream */ Silk_TOC->corrupt = 1; break; }; if( sDec.nBytesLeft > 0 && sDec.FrameTermination == SKP_SILK_MORE_FRAMES ) { sDec.nFramesDecoded++; } else { break; } } if( Silk_TOC->corrupt || sDec.FrameTermination == SKP_SILK_MORE_FRAMES || sDec.nFramesInPacket > SILK_MAX_FRAMES_PER_PACKET ) { /* Corrupt packet */ SKP_memset( Silk_TOC, 0, sizeof( SKP_Silk_TOC_struct ) ); Silk_TOC->corrupt = 1; } else { Silk_TOC->framesInPacket = sDec.nFramesDecoded; Silk_TOC->fs_kHz = sDec.fs_kHz; if( sDec.FrameTermination == SKP_SILK_LAST_FRAME ) { Silk_TOC->inbandLBRR = sDec.FrameTermination; } else { Silk_TOC->inbandLBRR = sDec.FrameTermination - 1; } } } } /**************************/ /* Get the version number */ /**************************/ /* Return a pointer to string specifying the version */ const char *SKP_Silk_SDK_get_version() { static const char version[] = "1.0.2"; return version; } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_array_maxabs.c0000644000175000017500000000650011513063445022364 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_int16_array_maxabs.c * * * * Function that returns the maximum absolut value of * * the input vector * * * * Copyright 2006 (c), Skype Limited * * Date: 060221 * * */ #include "SKP_Silk_SigProc_FIX.h" /* Function that returns the maximum absolut value of the input vector */ SKP_int16 SKP_Silk_int16_array_maxabs( /* O Maximum absolute value, max: 2^15-1 */ const SKP_int16 *vec, /* I Input vector [len] */ const SKP_int32 len /* I Length of input vector */ ) { SKP_int32 max = 0, i, lvl = 0, ind; ind = len - 1; max = SKP_SMULBB( vec[ ind ], vec[ ind ] ); for( i = len - 2; i >= 0; i-- ) { lvl = SKP_SMULBB( vec[ i ], vec[ i ] ); if( lvl > max ) { max = lvl; ind = i; } } /* Do not return 32768, as it will not fit in an int16 so may lead to problems later on */ lvl = SKP_abs( vec[ ind ] ); if( lvl > SKP_int16_MAX ) { return( SKP_int16_MAX ); } else { return( (SKP_int16)lvl ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_pulses_to_bytes.c0000644000175000017500000000742111513063445023141 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * File Name: SKP_Silk_pulses_to_bytes.c */ #include #include "SKP_Silk_main.h" /* nBytes = sum_over_shell_blocks( POLY_FIT_0 + POLY_FIT_1 * sum_abs_val + POLY_FIT_2 * sum_abs_val^2 ) */ #define POLY_FIT_0_Q15 12520 #define POLY_FIT_1_Q15 15862 #define POLY_FIT_2_Q20 -9222 // ToDo better training with /* Predict number of bytes used to encode q */ SKP_int SKP_Silk_pulses_to_bytes( /* O Return value, predicted number of bytes used to encode q */ SKP_Silk_encoder_state *psEncC, /* I/O Encoder State */ SKP_int q[] /* I Pulse signal */ ) { SKP_int i, j, iter, *q_ptr; SKP_int32 sum_abs_val, nBytes, acc_nBytes; /* Take the absolute value of the pulses */ iter = psEncC->frame_length / SHELL_CODEC_FRAME_LENGTH; /* Calculate rate as a nonlinaer mapping of sum abs value of each Shell block */ q_ptr = q; acc_nBytes = 0; for( j = 0; j < iter; j++ ) { sum_abs_val = 0; for(i = 0; i < SHELL_CODEC_FRAME_LENGTH; i+=4){ sum_abs_val += SKP_abs( q_ptr[ i + 0 ] ); sum_abs_val += SKP_abs( q_ptr[ i + 1 ] ); sum_abs_val += SKP_abs( q_ptr[ i + 2 ] ); sum_abs_val += SKP_abs( q_ptr[ i + 3 ] ); } /* Calculate nBytes used for thi sshell frame */ nBytes = SKP_SMULWB( SKP_SMULBB( sum_abs_val, sum_abs_val ), POLY_FIT_2_Q20 ); // Q4 nBytes = SKP_LSHIFT_SAT32( nBytes, 11 ); // Q15 nBytes += SKP_SMULBB( sum_abs_val, POLY_FIT_1_Q15 ); // Q15 nBytes += POLY_FIT_0_Q15; // Q15 acc_nBytes += nBytes; q_ptr += SHELL_CODEC_FRAME_LENGTH; /* update pointer */ } acc_nBytes = SKP_RSHIFT_ROUND( acc_nBytes, 15 ); // Q0 acc_nBytes = SKP_SAT16( acc_nBytes ); // just to be sure // Q0 return(( SKP_int )acc_nBytes); } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_pitch_est_defines.h0000644000175000017500000000451411513063445023402 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #ifndef SIGPROCFIX_PITCH_EST_DEFINES_H #define SIGPROCFIX_PITCH_EST_DEFINES_H #include "SKP_Silk_SigProc_FIX.h" #include "SKP_Silk_common_pitch_est_defines.h" /************************************************************/ /* Definitions For Fix pitch estimator */ /************************************************************/ #define PITCH_EST_SHORTLAG_BIAS_Q15 6554 /* 0.2f. for logarithmic weighting */ #define PITCH_EST_PREVLAG_BIAS_Q15 6554 /* Prev lag bias */ #define PITCH_EST_FLATCONTOUR_BIAS_Q20 52429 /* 0.05f */ #endif h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_residual_energy16_FIX.c0000644000175000017500000001077111513063445023756 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" /* Residual energy: nrg = wxx - 2 * wXx * c + c' * wXX * c */ SKP_int32 SKP_Silk_residual_energy16_covar_FIX( const SKP_int16 *c, /* I Prediction vector */ const SKP_int32 *wXX, /* I Correlation matrix */ const SKP_int32 *wXx, /* I Correlation vector */ SKP_int32 wxx, /* I Signal energy */ SKP_int D, /* I Dimension */ SKP_int cQ /* I Q value for c vector 0 - 15 */ ) { SKP_int i, j, lshifts, Qxtra; SKP_int32 c_max, w_max, tmp, tmp2, nrg; SKP_int cn[ MAX_MATRIX_SIZE ]; const SKP_int32 *pRow; /* Safety checks */ SKP_assert( D >= 0 ); SKP_assert( D <= 16 ); SKP_assert( cQ > 0 ); SKP_assert( cQ < 16 ); lshifts = 16 - cQ; Qxtra = lshifts; c_max = 0; for( i = 0; i < D; i++ ) { c_max = SKP_max_32( c_max, SKP_abs( ( SKP_int32 )c[ i ] ) ); } Qxtra = SKP_min_int( Qxtra, SKP_Silk_CLZ32( c_max ) - 17 ); w_max = SKP_max_32( wXX[ 0 ], wXX[ D * D - 1 ] ); Qxtra = SKP_min_int( Qxtra, SKP_Silk_CLZ32( SKP_MUL( D, SKP_RSHIFT( SKP_SMULWB( w_max, c_max ), 4 ) ) ) - 5 ); Qxtra = SKP_max_int( Qxtra, 0 ); for( i = 0; i < D; i++ ) { cn[ i ] = SKP_LSHIFT( ( SKP_int )c[ i ], Qxtra ); SKP_assert( SKP_abs(cn[i]) <= ( SKP_int16_MAX + 1 ) ); /* Check that SKP_SMLAWB can be used */ } lshifts -= Qxtra; /* Compute wxx - 2 * wXx * c */ tmp = 0; for( i = 0; i < D; i++ ) { tmp = SKP_SMLAWB( tmp, wXx[ i ], cn[ i ] ); } nrg = SKP_RSHIFT( wxx, 1 + lshifts ) - tmp; /* Q: -lshifts - 1 */ /* Add c' * wXX * c, assuming wXX is symmetric */ tmp2 = 0; for( i = 0; i < D; i++ ) { tmp = 0; pRow = &wXX[ i * D ]; for( j = i + 1; j < D; j++ ) { tmp = SKP_SMLAWB( tmp, pRow[ j ], cn[ j ] ); } tmp = SKP_SMLAWB( tmp, SKP_RSHIFT( pRow[ i ], 1 ), cn[ i ] ); tmp2 = SKP_SMLAWB( tmp2, tmp, cn[ i ] ); } nrg = SKP_ADD_LSHIFT32( nrg, tmp2, lshifts ); /* Q: -lshifts - 1 */ /* Keep one bit free always, because we add them for LSF interpolation */ if( nrg < 1 ) { nrg = 1; } else if( nrg > SKP_RSHIFT( SKP_int32_MAX, lshifts + 2 ) ) { nrg = SKP_int32_MAX >> 1; } else { nrg = SKP_LSHIFT( nrg, lshifts + 1 ); /* Q0 */ } return nrg; } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_bwexpander_32.c0000644000175000017500000000466611513063445022371 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_SigProc_FIX.h" /* Chirp (bandwidth expand) LP AR filter */ void SKP_Silk_bwexpander_32( SKP_int32 *ar, /* I/O AR filter to be expanded (without leading 1) */ const SKP_int d, /* I Length of ar */ SKP_int32 chirp_Q16 /* I Chirp factor in Q16 */ ) { SKP_int i; SKP_int32 tmp_chirp_Q16; tmp_chirp_Q16 = chirp_Q16; for( i = 0; i < d - 1; i++ ) { ar[ i ] = SKP_SMULWW( ar[ i ], tmp_chirp_Q16 ); tmp_chirp_Q16 = SKP_SMULWW( chirp_Q16, tmp_chirp_Q16 ); } ar[ d - 1 ] = SKP_SMULWW( ar[ d - 1 ], tmp_chirp_Q16 ); } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_NSQ_del_dec.c0000644000175000017500000011711711513063445022022 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main.h" typedef struct { SKP_int RandState[ DECISION_DELAY ]; SKP_int32 Q_Q10[ DECISION_DELAY ]; SKP_int32 Xq_Q10[ DECISION_DELAY ]; SKP_int32 Pred_Q16[ DECISION_DELAY ]; SKP_int32 Shape_Q10[ DECISION_DELAY ]; SKP_int32 Gain_Q16[ DECISION_DELAY ]; SKP_int32 sLPC_Q14[ MAX_FRAME_LENGTH / NB_SUBFR + NSQ_LPC_BUF_LENGTH ]; SKP_int32 LF_AR_Q12; SKP_int32 Seed; SKP_int32 SeedInit; SKP_int32 RD_Q10; } NSQ_del_dec_struct; typedef struct { SKP_int32 Q_Q10; SKP_int32 RD_Q10; SKP_int32 xq_Q14; SKP_int32 LF_AR_Q12; SKP_int32 sLTP_shp_Q10; SKP_int32 LPC_exc_Q16; } NSQ_sample_struct; SKP_INLINE void SKP_Silk_copy_del_dec_state( NSQ_del_dec_struct *DD_dst, /* I Dst del dec state */ NSQ_del_dec_struct *DD_src, /* I Src del dec state */ SKP_int LPC_state_idx /* I Index to LPC buffer */ ); SKP_INLINE void SKP_Silk_nsq_del_dec_scale_states( SKP_Silk_nsq_state *NSQ, /* I/O NSQ state */ NSQ_del_dec_struct psDelDec[], /* I/O Delayed decision states */ const SKP_int16 x[], /* I Input in Q0 */ SKP_int32 x_sc_Q10[], /* O Input scaled with 1/Gain in Q10 */ SKP_int length, /* I Length of input */ SKP_int16 sLTP[], /* I Re-whitened LTP state in Q0 */ SKP_int32 sLTP_Q16[], /* O LTP state matching scaled input */ SKP_int subfr, /* I Subframe number */ SKP_int nStatesDelayedDecision, /* I Number of del dec states */ SKP_int smpl_buf_idx, /* I Index to newest samples in buffers */ const SKP_int LTP_scale_Q14, /* I LTP state scaling */ const SKP_int32 Gains_Q16[ NB_SUBFR ], /* I */ const SKP_int pitchL[ NB_SUBFR ] /* I Pitch lag */ ); /******************************************/ /* Noise shape quantizer for one subframe */ /******************************************/ SKP_INLINE void SKP_Silk_noise_shape_quantizer_del_dec( SKP_Silk_nsq_state *NSQ, /* I/O NSQ state */ NSQ_del_dec_struct psDelDec[], /* I/O Delayed decision states */ SKP_int sigtype, /* I Signal type */ const SKP_int32 x_Q10[], /* I */ SKP_int q[], /* O */ SKP_int16 xq[], /* O */ SKP_int32 sLTP_Q16[], /* I/O LTP filter state */ const SKP_int16 a_Q12[], /* I Short term prediction coefs */ const SKP_int16 b_Q14[], /* I Long term prediction coefs */ const SKP_int16 AR_shp_Q13[], /* I Noise shaping coefs */ SKP_int lag, /* I Pitch lag */ SKP_int32 HarmShapeFIRPacked_Q14, /* I */ SKP_int Tilt_Q14, /* I Spectral tilt */ SKP_int32 LF_shp_Q14, /* I */ SKP_int32 Gain_Q16, /* I */ SKP_int Lambda_Q10, /* I */ SKP_int offset_Q10, /* I */ SKP_int length, /* I Input length */ SKP_int subfr, /* I Subframe number */ SKP_int shapingLPCOrder, /* I Shaping LPC filter order */ SKP_int predictLPCOrder, /* I Prediction LPC filter order */ SKP_int nStatesDelayedDecision, /* I Number of states in decision tree */ SKP_int *smpl_buf_idx, /* I Index to newest samples in buffers */ SKP_int decisionDelay /* I */ ); void SKP_Silk_NSQ_del_dec( SKP_Silk_encoder_state *psEncC, /* I/O Encoder State */ SKP_Silk_encoder_control *psEncCtrlC, /* I Encoder Control */ SKP_Silk_nsq_state *NSQ, /* I/O NSQ state */ const SKP_int16 x[], /* I Prefiltered input signal */ SKP_int q[], /* O Quantized pulse signal */ const SKP_int LSFInterpFactor_Q2, /* I LSF interpolation factor in Q2 */ const SKP_int16 PredCoef_Q12[ 2 * MAX_LPC_ORDER ], /* I Prediction coefs */ const SKP_int16 LTPCoef_Q14[ LTP_ORDER * NB_SUBFR ], /* I LT prediction coefs */ const SKP_int16 AR2_Q13[ NB_SUBFR * SHAPE_LPC_ORDER_MAX ], /* I */ const SKP_int HarmShapeGain_Q14[ NB_SUBFR ], /* I */ const SKP_int Tilt_Q14[ NB_SUBFR ], /* I Spectral tilt */ const SKP_int32 LF_shp_Q14[ NB_SUBFR ], /* I */ const SKP_int32 Gains_Q16[ NB_SUBFR ], /* I */ const SKP_int Lambda_Q10, /* I */ const SKP_int LTP_scale_Q14 /* I LTP state scaling */ ) { SKP_int i, k, lag, start_idx, LSF_interpolation_flag, Winner_ind, subfr; SKP_int last_smple_idx, smpl_buf_idx, decisionDelay, subfr_length; const SKP_int16 *A_Q12, *B_Q14, *AR_shp_Q13; SKP_int16 *pxq; SKP_int32 sLTP_Q16[ 2 * MAX_FRAME_LENGTH ]; SKP_int16 sLTP[ 2 * MAX_FRAME_LENGTH ]; SKP_int32 HarmShapeFIRPacked_Q14; SKP_int offset_Q10; SKP_int32 FiltState[ MAX_LPC_ORDER ], RDmin_Q10; SKP_int32 x_sc_Q10[ MAX_FRAME_LENGTH / NB_SUBFR ]; NSQ_del_dec_struct psDelDec[ DEL_DEC_STATES_MAX ]; NSQ_del_dec_struct *psDD; subfr_length = psEncC->frame_length / NB_SUBFR; /* Set unvoiced lag to the previous one, overwrite later for voiced */ lag = NSQ->lagPrev; SKP_assert( NSQ->prev_inv_gain_Q16 != 0 ); /* Initialize delayed decision states */ SKP_memset( psDelDec, 0, psEncC->nStatesDelayedDecision * sizeof( NSQ_del_dec_struct ) ); for( k = 0; k < psEncC->nStatesDelayedDecision; k++ ) { psDD = &psDelDec[ k ]; psDD->Seed = ( k + psEncCtrlC->Seed ) & 3; psDD->SeedInit = psDD->Seed; psDD->RD_Q10 = 0; psDD->LF_AR_Q12 = NSQ->sLF_AR_shp_Q12; psDD->Shape_Q10[ 0 ] = NSQ->sLTP_shp_Q10[ psEncC->frame_length - 1 ]; SKP_memcpy( psDD->sLPC_Q14, NSQ->sLPC_Q14, NSQ_LPC_BUF_LENGTH * sizeof( SKP_int32 ) ); } offset_Q10 = SKP_Silk_Quantization_Offsets_Q10[ psEncCtrlC->sigtype ][ psEncCtrlC->QuantOffsetType ]; smpl_buf_idx = 0; /* index of oldest samples */ decisionDelay = SKP_min_int( DECISION_DELAY, subfr_length ); /* For voiced frames limit the decision delay to lower than the pitch lag */ if( psEncCtrlC->sigtype == SIG_TYPE_VOICED ) { for( k = 0; k < NB_SUBFR; k++ ) { decisionDelay = SKP_min_int( decisionDelay, psEncCtrlC->pitchL[ k ] - LTP_ORDER / 2 - 1 ); } } if( LSFInterpFactor_Q2 == ( 1 << 2 ) ) { LSF_interpolation_flag = 0; } else { LSF_interpolation_flag = 1; } /* Setup pointers to start of sub frame */ pxq = &NSQ->xq[ psEncC->frame_length ]; NSQ->sLTP_shp_buf_idx = psEncC->frame_length; NSQ->sLTP_buf_idx = psEncC->frame_length; subfr = 0; for( k = 0; k < NB_SUBFR; k++ ) { A_Q12 = &PredCoef_Q12[ ( ( k >> 1 ) | ( 1 - LSF_interpolation_flag ) ) * MAX_LPC_ORDER ]; B_Q14 = <PCoef_Q14[ k * LTP_ORDER ]; AR_shp_Q13 = &AR2_Q13[ k * SHAPE_LPC_ORDER_MAX ]; NSQ->rewhite_flag = 0; if( psEncCtrlC->sigtype == SIG_TYPE_VOICED ) { /* Voiced */ lag = psEncCtrlC->pitchL[ k ]; /* Re-whitening */ if( ( k & ( 3 - SKP_LSHIFT( LSF_interpolation_flag, 1 ) ) ) == 0 ) { if( k == 2 ) { /* RESET DELAYED DECISIONS */ /* Find winner */ RDmin_Q10 = psDelDec[ 0 ].RD_Q10; Winner_ind = 0; for( i = 1; i < psEncC->nStatesDelayedDecision; i++ ) { if( psDelDec[ i ].RD_Q10 < RDmin_Q10 ) { RDmin_Q10 = psDelDec[ i ].RD_Q10; Winner_ind = i; } } for( i = 0; i < psEncC->nStatesDelayedDecision; i++ ) { if( i != Winner_ind ) { psDelDec[ i ].RD_Q10 += ( SKP_int32_MAX >> 4 ); SKP_assert( psDelDec[ i ].RD_Q10 >= 0 ); } } /* Copy final part of signals from winner state to output and long-term filter states */ psDD = &psDelDec[ Winner_ind ]; last_smple_idx = smpl_buf_idx + decisionDelay; for( i = 0; i < decisionDelay; i++ ) { last_smple_idx = ( last_smple_idx - 1 ) & DECISION_DELAY_MASK; q[ i - decisionDelay ] = ( SKP_int )SKP_RSHIFT( psDD->Q_Q10[ last_smple_idx ], 10 ); pxq[ i - decisionDelay ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( SKP_SMULWW( psDD->Xq_Q10[ last_smple_idx ], psDD->Gain_Q16[ last_smple_idx ] ), 10 ) ); NSQ->sLTP_shp_Q10[ NSQ->sLTP_shp_buf_idx - decisionDelay + i ] = psDD->Shape_Q10[ last_smple_idx ]; } subfr = 0; } /* Rewhiten with new A coefs */ start_idx = psEncC->frame_length - lag - psEncC->predictLPCOrder - LTP_ORDER / 2; start_idx = SKP_LIMIT( start_idx, 0, psEncC->frame_length - psEncC->predictLPCOrder ); SKP_memset( FiltState, 0, psEncC->predictLPCOrder * sizeof( SKP_int32 ) ); SKP_Silk_MA_Prediction( &NSQ->xq[ start_idx + k * psEncC->subfr_length ], A_Q12, FiltState, sLTP + start_idx, psEncC->frame_length - start_idx, psEncC->predictLPCOrder ); NSQ->sLTP_buf_idx = psEncC->frame_length; NSQ->rewhite_flag = 1; } } /* Noise shape parameters */ SKP_assert( HarmShapeGain_Q14[ k ] >= 0 ); HarmShapeFIRPacked_Q14 = SKP_RSHIFT( HarmShapeGain_Q14[ k ], 2 ); HarmShapeFIRPacked_Q14 |= SKP_LSHIFT( ( SKP_int32 )SKP_RSHIFT( HarmShapeGain_Q14[ k ], 1 ), 16 ); SKP_Silk_nsq_del_dec_scale_states( NSQ, psDelDec, x, x_sc_Q10, subfr_length, sLTP, sLTP_Q16, k, psEncC->nStatesDelayedDecision, smpl_buf_idx, LTP_scale_Q14, Gains_Q16, psEncCtrlC->pitchL ); SKP_Silk_noise_shape_quantizer_del_dec( NSQ, psDelDec, psEncCtrlC->sigtype, x_sc_Q10, q, pxq, sLTP_Q16, A_Q12, B_Q14, AR_shp_Q13, lag, HarmShapeFIRPacked_Q14, Tilt_Q14[ k ], LF_shp_Q14[ k ], Gains_Q16[ k ], Lambda_Q10, offset_Q10, psEncC->subfr_length, subfr++, psEncC->shapingLPCOrder, psEncC->predictLPCOrder, psEncC->nStatesDelayedDecision, &smpl_buf_idx, decisionDelay ); x += psEncC->subfr_length; q += psEncC->subfr_length; pxq += psEncC->subfr_length; } /* Find winner */ RDmin_Q10 = psDelDec[ 0 ].RD_Q10; Winner_ind = 0; for( k = 1; k < psEncC->nStatesDelayedDecision; k++ ) { if( psDelDec[ k ].RD_Q10 < RDmin_Q10 ) { RDmin_Q10 = psDelDec[ k ].RD_Q10; Winner_ind = k; } } /* Copy final part of signals from winner state to output and long-term filter states */ psDD = &psDelDec[ Winner_ind ]; psEncCtrlC->Seed = psDD->SeedInit; last_smple_idx = smpl_buf_idx + decisionDelay; for( i = 0; i < decisionDelay; i++ ) { last_smple_idx = ( last_smple_idx - 1 ) & DECISION_DELAY_MASK; q[ i - decisionDelay ] = ( SKP_int )SKP_RSHIFT( psDD->Q_Q10[ last_smple_idx ], 10 ); pxq[ i - decisionDelay ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( SKP_SMULWW( psDD->Xq_Q10[ last_smple_idx ], psDD->Gain_Q16[ last_smple_idx ] ), 10 ) ); NSQ->sLTP_shp_Q10[ NSQ->sLTP_shp_buf_idx - decisionDelay + i ] = psDD->Shape_Q10[ last_smple_idx ]; sLTP_Q16[ NSQ->sLTP_buf_idx - decisionDelay + i ] = psDD->Pred_Q16[ last_smple_idx ]; } SKP_memcpy( NSQ->sLPC_Q14, &psDD->sLPC_Q14[ psEncC->subfr_length ], NSQ_LPC_BUF_LENGTH * sizeof( SKP_int32 ) ); /* Update states */ NSQ->sLF_AR_shp_Q12 = psDD->LF_AR_Q12; NSQ->prev_inv_gain_Q16 = NSQ->prev_inv_gain_Q16; NSQ->lagPrev = psEncCtrlC->pitchL[ NB_SUBFR - 1 ]; /* Save quantized speech and noise shaping signals */ SKP_memcpy( NSQ->xq, &NSQ->xq[ psEncC->frame_length ], psEncC->frame_length * sizeof( SKP_int16 ) ); SKP_memcpy( NSQ->sLTP_shp_Q10, &NSQ->sLTP_shp_Q10[ psEncC->frame_length ], psEncC->frame_length * sizeof( SKP_int32 ) ); } /******************************************/ /* Noise shape quantizer for one subframe */ /******************************************/ SKP_INLINE void SKP_Silk_noise_shape_quantizer_del_dec( SKP_Silk_nsq_state *NSQ, /* I/O NSQ state */ NSQ_del_dec_struct psDelDec[], /* I/O Delayed decision states */ SKP_int sigtype, /* I Signal type */ const SKP_int32 x_Q10[], /* I */ SKP_int q[], /* O */ SKP_int16 xq[], /* O */ SKP_int32 sLTP_Q16[], /* I/O LTP filter state */ const SKP_int16 a_Q12[], /* I Short term prediction coefs */ const SKP_int16 b_Q14[], /* I Long term prediction coefs */ const SKP_int16 AR_shp_Q13[], /* I Noise shaping coefs */ SKP_int lag, /* I Pitch lag */ SKP_int32 HarmShapeFIRPacked_Q14, /* I */ SKP_int Tilt_Q14, /* I Spectral tilt */ SKP_int32 LF_shp_Q14, /* I */ SKP_int32 Gain_Q16, /* I */ SKP_int Lambda_Q10, /* I */ SKP_int offset_Q10, /* I */ SKP_int length, /* I Input length */ SKP_int subfr, /* I Subframe number */ SKP_int shapingLPCOrder, /* I Shaping LPC filter order */ SKP_int predictLPCOrder, /* I Prediction LPC filter order */ SKP_int nStatesDelayedDecision, /* I Number of states in decision tree */ SKP_int *smpl_buf_idx, /* I Index to newest samples in buffers */ SKP_int decisionDelay /* I */ ) { SKP_int i, j, k, Winner_ind, RDmin_ind, RDmax_ind, last_smple_idx; SKP_int32 Winner_rand_state; SKP_int32 LTP_pred_Q14, LPC_pred_Q10, n_AR_Q10, n_LTP_Q14; SKP_int32 n_LF_Q10; SKP_int32 r_Q10, rr_Q20, rd1_Q10, rd2_Q10, RDmin_Q10, RDmax_Q10; SKP_int32 q1_Q10, q2_Q10; SKP_int32 Atmp, dither; SKP_int32 exc_Q10, LPC_exc_Q10, xq_Q10; SKP_int32 tmp, sLF_AR_shp_Q10; SKP_int32 *pred_lag_ptr, *shp_lag_ptr; SKP_int32 *psLPC_Q14; SKP_int32 a_Q12_tmp[ MAX_LPC_ORDER / 2 ], AR_shp_Q13_tmp[ MAX_LPC_ORDER / 2 ]; NSQ_sample_struct psSampleState[ DEL_DEC_STATES_MAX ][ 2 ]; NSQ_del_dec_struct *psDD; NSQ_sample_struct *psSS; shp_lag_ptr = &NSQ->sLTP_shp_Q10[ NSQ->sLTP_shp_buf_idx - lag + HARM_SHAPE_FIR_TAPS / 2 ]; pred_lag_ptr = &sLTP_Q16[ NSQ->sLTP_buf_idx - lag + LTP_ORDER / 2 ]; /* Preload LPC coeficients to array on stack. Gives small performance gain */ SKP_memcpy( a_Q12_tmp, a_Q12, predictLPCOrder * sizeof( SKP_int16 ) ); SKP_memcpy( AR_shp_Q13_tmp, AR_shp_Q13, shapingLPCOrder * sizeof( SKP_int16 ) ); for( i = 0; i < length; i++ ) { /* Perform common calculations used in all states */ /* Long-term prediction */ if( sigtype == SIG_TYPE_VOICED ) { /* Unrolled loop */ LTP_pred_Q14 = SKP_SMULWB( pred_lag_ptr[ 0 ], b_Q14[ 0 ] ); LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -1 ], b_Q14[ 1 ] ); LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -2 ], b_Q14[ 2 ] ); LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -3 ], b_Q14[ 3 ] ); LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -4 ], b_Q14[ 4 ] ); pred_lag_ptr++; } else { LTP_pred_Q14 = 0; } /* Long-term shaping */ if( lag > 0 ) { /* Symmetric, packed FIR coefficients */ n_LTP_Q14 = SKP_SMULWB( SKP_ADD32( shp_lag_ptr[ 0 ], shp_lag_ptr[ -2 ] ), HarmShapeFIRPacked_Q14 ); n_LTP_Q14 = SKP_SMLAWT( n_LTP_Q14, shp_lag_ptr[ -1 ], HarmShapeFIRPacked_Q14 ); n_LTP_Q14 = SKP_LSHIFT( n_LTP_Q14, 6 ); shp_lag_ptr++; } else { n_LTP_Q14 = 0; } for( k = 0; k < nStatesDelayedDecision; k++ ) { /* Delayed decision state */ psDD = &psDelDec[ k ]; /* Sample state */ psSS = psSampleState[ k ]; /* Generate dither */ psDD->Seed = SKP_RAND( psDD->Seed ); /* dither = rand_seed < 0 ? 0xFFFFFFFF : 0; */ dither = SKP_RSHIFT( psDD->Seed, 31 ); /* Pointer used in short term prediction and shaping */ psLPC_Q14 = &psDD->sLPC_Q14[ NSQ_LPC_BUF_LENGTH - 1 + i ]; /* Short-term prediction */ SKP_assert( ( predictLPCOrder & 1 ) == 0 ); /* check that order is even */ SKP_assert( ( (SKP_int64)a_Q12 & 3 ) == 0 ); /* check that array starts at 4-byte aligned address */ SKP_assert( predictLPCOrder >= 10 ); /* check that unrolling works */ /* Partially unrolled */ Atmp = a_Q12_tmp[ 0 ]; /* read two coefficients at once */ LPC_pred_Q10 = SKP_SMULWB( psLPC_Q14[ 0 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -1 ], Atmp ); Atmp = a_Q12_tmp[ 1 ]; LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -2 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -3 ], Atmp ); Atmp = a_Q12_tmp[ 2 ]; LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -4 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -5 ], Atmp ); Atmp = a_Q12_tmp[ 3 ]; LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -6 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -7 ], Atmp ); Atmp = a_Q12_tmp[ 4 ]; LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -8 ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -9 ], Atmp ); for( j = 10; j < predictLPCOrder; j += 2 ) { Atmp = a_Q12_tmp[ j >> 1 ]; /* read two coefficients at once */ LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -j ], Atmp ); LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -j - 1 ], Atmp ); } /* Noise shape feedback */ SKP_assert( ( shapingLPCOrder & 1 ) == 0 ); /* check that order is even */ SKP_assert( ( (SKP_int64)AR_shp_Q13 & 3 ) == 0 ); /* check that array starts at 4-byte aligned address */ SKP_assert( shapingLPCOrder >= 12 ); /* check that unrolling works */ /* NOTE: the code below loads two int16 values in an int32, and multiplies each using the */ /* SMLAWB and SMLAWT instructions. On a big-endian CPU the two int16 variables would be */ /* loaded in reverse order and the code will give the wrong result. In that case swapping */ /* the SMLAWB and SMLAWT instructions should solve the problem. */ /* Partially unrolled */ Atmp = AR_shp_Q13_tmp[ 0 ]; /* read two coefficients at once */ n_AR_Q10 = SKP_SMULWB( psLPC_Q14[ 0 ], Atmp ); n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -1 ], Atmp ); Atmp = AR_shp_Q13_tmp[ 1 ]; n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -2 ], Atmp ); n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -3 ], Atmp ); Atmp = AR_shp_Q13_tmp[ 2 ]; n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -4 ], Atmp ); n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -5 ], Atmp ); Atmp = AR_shp_Q13_tmp[ 3 ]; n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -6 ], Atmp ); n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -7 ], Atmp ); Atmp = AR_shp_Q13_tmp[ 4 ]; n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -8 ], Atmp ); n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -9 ], Atmp ); Atmp = AR_shp_Q13_tmp[ 5 ]; n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -10 ], Atmp ); n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -11 ], Atmp ); for( j = 12; j < shapingLPCOrder; j += 2 ) { Atmp = AR_shp_Q13_tmp[ j >> 1 ]; /* read two coefficients at once */ n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -j ], Atmp ); n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -j - 1 ], Atmp ); } n_AR_Q10 = SKP_RSHIFT( n_AR_Q10, 1 ); /* Q11 -> Q10 */ n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psDD->LF_AR_Q12, Tilt_Q14 ); n_LF_Q10 = SKP_LSHIFT( SKP_SMULWB( psDD->Shape_Q10[ *smpl_buf_idx ], LF_shp_Q14 ), 2 ); n_LF_Q10 = SKP_SMLAWT( n_LF_Q10, psDD->LF_AR_Q12, LF_shp_Q14 ); /* Input minus prediction plus noise feedback */ /* r = x[ i ] - LTP_pred - LPC_pred + n_AR + n_Tilt + n_LF + n_LTP */ tmp = SKP_SUB32( LTP_pred_Q14, n_LTP_Q14 ); /* Add Q14 stuff */ tmp = SKP_RSHIFT_ROUND( tmp, 4 ); /* round to Q10 */ tmp = SKP_ADD32( tmp, LPC_pred_Q10 ); /* add Q10 stuff */ tmp = SKP_SUB32( tmp, n_AR_Q10 ); /* subtract Q10 stuff */ tmp = SKP_SUB32( tmp, n_LF_Q10 ); /* subtract Q10 stuff */ r_Q10 = SKP_SUB32( x_Q10[ i ], tmp ); /* residual error Q10 */ /* Flip sign depending on dither */ r_Q10 = ( r_Q10 ^ dither ) - dither; r_Q10 = SKP_SUB32( r_Q10, offset_Q10 ); r_Q10 = SKP_LIMIT( r_Q10, -64 << 10, 64 << 10 ); /* Find two quantization level candidates and measure their rate-distortion */ if( r_Q10 < -1536 ) { q1_Q10 = SKP_LSHIFT( SKP_RSHIFT_ROUND( r_Q10, 10 ), 10 ); r_Q10 = SKP_SUB32( r_Q10, q1_Q10 ); rd1_Q10 = SKP_RSHIFT( SKP_SMLABB( SKP_MUL( -SKP_ADD32( q1_Q10, offset_Q10 ), Lambda_Q10 ), r_Q10, r_Q10 ), 10 ); rd2_Q10 = SKP_ADD32( rd1_Q10, 1024 ); rd2_Q10 = SKP_SUB32( rd2_Q10, SKP_ADD_LSHIFT32( Lambda_Q10, r_Q10, 1 ) ); q2_Q10 = SKP_ADD32( q1_Q10, 1024 ); } else if( r_Q10 > 512 ) { q1_Q10 = SKP_LSHIFT( SKP_RSHIFT_ROUND( r_Q10, 10 ), 10 ); r_Q10 = SKP_SUB32( r_Q10, q1_Q10 ); rd1_Q10 = SKP_RSHIFT( SKP_SMLABB( SKP_MUL( SKP_ADD32( q1_Q10, offset_Q10 ), Lambda_Q10 ), r_Q10, r_Q10 ), 10 ); rd2_Q10 = SKP_ADD32( rd1_Q10, 1024 ); rd2_Q10 = SKP_SUB32( rd2_Q10, SKP_SUB_LSHIFT32( Lambda_Q10, r_Q10, 1 ) ); q2_Q10 = SKP_SUB32( q1_Q10, 1024 ); } else { /* r_Q10 >= -1536 && q1_Q10 <= 512 */ rr_Q20 = SKP_SMULBB( offset_Q10, Lambda_Q10 ); rd2_Q10 = SKP_RSHIFT( SKP_SMLABB( rr_Q20, r_Q10, r_Q10 ), 10 ); rd1_Q10 = SKP_ADD32( rd2_Q10, 1024 ); rd1_Q10 = SKP_ADD32( rd1_Q10, SKP_SUB_RSHIFT32( SKP_ADD_LSHIFT32( Lambda_Q10, r_Q10, 1 ), rr_Q20, 9 ) ); q1_Q10 = -1024; q2_Q10 = 0; } if( rd1_Q10 < rd2_Q10 ) { psSS[ 0 ].RD_Q10 = SKP_ADD32( psDD->RD_Q10, rd1_Q10 ); psSS[ 1 ].RD_Q10 = SKP_ADD32( psDD->RD_Q10, rd2_Q10 ); psSS[ 0 ].Q_Q10 = q1_Q10; psSS[ 1 ].Q_Q10 = q2_Q10; } else { psSS[ 0 ].RD_Q10 = SKP_ADD32( psDD->RD_Q10, rd2_Q10 ); psSS[ 1 ].RD_Q10 = SKP_ADD32( psDD->RD_Q10, rd1_Q10 ); psSS[ 0 ].Q_Q10 = q2_Q10; psSS[ 1 ].Q_Q10 = q1_Q10; } /* Update states for best quantization */ /* Quantized excitation */ exc_Q10 = SKP_ADD32( offset_Q10, psSS[ 0 ].Q_Q10 ); exc_Q10 = ( exc_Q10 ^ dither ) - dither; /* Add predictions */ LPC_exc_Q10 = exc_Q10 + SKP_RSHIFT_ROUND( LTP_pred_Q14, 4 ); xq_Q10 = SKP_ADD32( LPC_exc_Q10, LPC_pred_Q10 ); /* Update states */ sLF_AR_shp_Q10 = SKP_SUB32( xq_Q10, n_AR_Q10 ); psSS[ 0 ].sLTP_shp_Q10 = SKP_SUB32( sLF_AR_shp_Q10, n_LF_Q10 ); psSS[ 0 ].LF_AR_Q12 = SKP_LSHIFT( sLF_AR_shp_Q10, 2 ); psSS[ 0 ].xq_Q14 = SKP_LSHIFT( xq_Q10, 4 ); psSS[ 0 ].LPC_exc_Q16 = SKP_LSHIFT( LPC_exc_Q10, 6 ); /* Update states for second best quantization */ /* Quantized excitation */ exc_Q10 = SKP_ADD32( offset_Q10, psSS[ 1 ].Q_Q10 ); exc_Q10 = ( exc_Q10 ^ dither ) - dither; /* Add predictions */ LPC_exc_Q10 = exc_Q10 + SKP_RSHIFT_ROUND( LTP_pred_Q14, 4 ); xq_Q10 = SKP_ADD32( LPC_exc_Q10, LPC_pred_Q10 ); /* Update states */ sLF_AR_shp_Q10 = SKP_SUB32( xq_Q10, n_AR_Q10 ); psSS[ 1 ].sLTP_shp_Q10 = SKP_SUB32( sLF_AR_shp_Q10, n_LF_Q10 ); psSS[ 1 ].LF_AR_Q12 = SKP_LSHIFT( sLF_AR_shp_Q10, 2 ); psSS[ 1 ].xq_Q14 = SKP_LSHIFT( xq_Q10, 4 ); psSS[ 1 ].LPC_exc_Q16 = SKP_LSHIFT( LPC_exc_Q10, 6 ); } *smpl_buf_idx = ( *smpl_buf_idx - 1 ) & DECISION_DELAY_MASK; /* Index to newest samples */ last_smple_idx = ( *smpl_buf_idx + decisionDelay ) & DECISION_DELAY_MASK; /* Index to decisionDelay old samples */ /* Find winner */ RDmin_Q10 = psSampleState[ 0 ][ 0 ].RD_Q10; Winner_ind = 0; for( k = 1; k < nStatesDelayedDecision; k++ ) { if( psSampleState[ k ][ 0 ].RD_Q10 < RDmin_Q10 ) { RDmin_Q10 = psSampleState[ k ][ 0 ].RD_Q10; Winner_ind = k; } } /* Increase RD values of expired states */ Winner_rand_state = psDelDec[ Winner_ind ].RandState[ last_smple_idx ]; for( k = 0; k < nStatesDelayedDecision; k++ ) { if( psDelDec[ k ].RandState[ last_smple_idx ] != Winner_rand_state ) { psSampleState[ k ][ 0 ].RD_Q10 = SKP_ADD32( psSampleState[ k ][ 0 ].RD_Q10, ( SKP_int32_MAX >> 4 ) ); psSampleState[ k ][ 1 ].RD_Q10 = SKP_ADD32( psSampleState[ k ][ 1 ].RD_Q10, ( SKP_int32_MAX >> 4 ) ); SKP_assert( psSampleState[ k ][ 0 ].RD_Q10 >= 0 ); } } /* Find worst in first set and best in second set */ RDmax_Q10 = psSampleState[ 0 ][ 0 ].RD_Q10; RDmin_Q10 = psSampleState[ 0 ][ 1 ].RD_Q10; RDmax_ind = 0; RDmin_ind = 0; for( k = 1; k < nStatesDelayedDecision; k++ ) { /* find worst in first set */ if( psSampleState[ k ][ 0 ].RD_Q10 > RDmax_Q10 ) { RDmax_Q10 = psSampleState[ k ][ 0 ].RD_Q10; RDmax_ind = k; } /* find best in second set */ if( psSampleState[ k ][ 1 ].RD_Q10 < RDmin_Q10 ) { RDmin_Q10 = psSampleState[ k ][ 1 ].RD_Q10; RDmin_ind = k; } } /* Replace a state if best from second set outperforms worst in first set */ if( RDmin_Q10 < RDmax_Q10 ) { SKP_Silk_copy_del_dec_state( &psDelDec[ RDmax_ind ], &psDelDec[ RDmin_ind ], i ); SKP_memcpy( &psSampleState[ RDmax_ind ][ 0 ], &psSampleState[ RDmin_ind ][ 1 ], sizeof( NSQ_sample_struct ) ); } /* Write samples from winner to output and long-term filter states */ psDD = &psDelDec[ Winner_ind ]; if( subfr > 0 || i >= decisionDelay ) { q[ i - decisionDelay ] = ( SKP_int )SKP_RSHIFT( psDD->Q_Q10[ last_smple_idx ], 10 ); xq[ i - decisionDelay ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( SKP_SMULWW( psDD->Xq_Q10[ last_smple_idx ], psDD->Gain_Q16[ last_smple_idx ] ), 10 ) ); NSQ->sLTP_shp_Q10[ NSQ->sLTP_shp_buf_idx - decisionDelay ] = psDD->Shape_Q10[ last_smple_idx ]; sLTP_Q16[ NSQ->sLTP_buf_idx - decisionDelay ] = psDD->Pred_Q16[ last_smple_idx ]; } NSQ->sLTP_shp_buf_idx++; NSQ->sLTP_buf_idx++; /* Update states */ for( k = 0; k < nStatesDelayedDecision; k++ ) { psDD = &psDelDec[ k ]; psSS = &psSampleState[ k ][ 0 ]; psDD->LF_AR_Q12 = psSS->LF_AR_Q12; psDD->sLPC_Q14[ NSQ_LPC_BUF_LENGTH + i ] = psSS->xq_Q14; psDD->Xq_Q10[ *smpl_buf_idx ] = SKP_RSHIFT( psSS->xq_Q14, 4 ); psDD->Q_Q10[ *smpl_buf_idx ] = psSS->Q_Q10; psDD->Pred_Q16[ *smpl_buf_idx ] = psSS->LPC_exc_Q16; psDD->Shape_Q10[ *smpl_buf_idx ] = psSS->sLTP_shp_Q10; psDD->Seed = SKP_ADD_RSHIFT32( psDD->Seed, psSS->Q_Q10, 10 ); psDD->RandState[ *smpl_buf_idx ] = psDD->Seed; psDD->RD_Q10 = psSS->RD_Q10; psDD->Gain_Q16[ *smpl_buf_idx ] = Gain_Q16; } } /* Update LPC states */ for( k = 0; k < nStatesDelayedDecision; k++ ) { psDD = &psDelDec[ k ]; SKP_memcpy( psDD->sLPC_Q14, &psDD->sLPC_Q14[ length ], NSQ_LPC_BUF_LENGTH * sizeof( SKP_int32 ) ); } } SKP_INLINE void SKP_Silk_nsq_del_dec_scale_states( SKP_Silk_nsq_state *NSQ, /* I/O NSQ state */ NSQ_del_dec_struct psDelDec[], /* I/O Delayed decision states */ const SKP_int16 x[], /* I Input in Q0 */ SKP_int32 x_sc_Q10[], /* O Input scaled with 1/Gain in Q10 */ SKP_int length, /* I Length of input */ SKP_int16 sLTP[], /* I Re-whitened LTP state in Q0 */ SKP_int32 sLTP_Q16[], /* O LTP state matching scaled input */ SKP_int subfr, /* I Subframe number */ SKP_int nStatesDelayedDecision, /* I Number of del dec states */ SKP_int smpl_buf_idx, /* I Index to newest samples in buffers */ const SKP_int LTP_scale_Q14, /* I LTP state scaling */ const SKP_int32 Gains_Q16[ NB_SUBFR ], /* I */ const SKP_int pitchL[ NB_SUBFR ] /* I Pitch lag */ ) { SKP_int i, k, scale_length, lag; SKP_int32 inv_gain_Q16, gain_adj_Q16, inv_gain_Q32; NSQ_del_dec_struct *psDD; inv_gain_Q16 = SKP_DIV32( SKP_int32_MAX, SKP_RSHIFT( Gains_Q16[ subfr ], 1 ) ); inv_gain_Q16 = SKP_min( inv_gain_Q16, SKP_int16_MAX ); lag = pitchL[ subfr ]; /* After rewhitening the LTP state is un-scaled. So scale with inv_gain_Q16 */ if( NSQ->rewhite_flag ) { inv_gain_Q32 = SKP_LSHIFT( inv_gain_Q16, 16 ); if( subfr == 0 ) { /* Do LTP downscaling */ inv_gain_Q32 = SKP_LSHIFT( SKP_SMULWB( inv_gain_Q32, LTP_scale_Q14 ), 2 ); } for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx; i++ ) { SKP_assert( i < MAX_FRAME_LENGTH ); sLTP_Q16[ i ] = SKP_SMULWB( inv_gain_Q32, sLTP[ i ] ); } } /* Adjust for changing gain */ if( inv_gain_Q16 != NSQ->prev_inv_gain_Q16 ) { gain_adj_Q16 = SKP_DIV32_varQ( inv_gain_Q16, NSQ->prev_inv_gain_Q16, 16 ); for( k = 0; k < nStatesDelayedDecision; k++ ) { psDD = &psDelDec[ k ]; /* Scale scalar states */ psDD->LF_AR_Q12 = SKP_SMULWW( gain_adj_Q16, psDD->LF_AR_Q12 ); /* scale short term state */ for( i = 0; i < NSQ_LPC_BUF_LENGTH; i++ ) { psDD->sLPC_Q14[ NSQ_LPC_BUF_LENGTH - i - 1 ] = SKP_SMULWW( gain_adj_Q16, psDD->sLPC_Q14[ NSQ_LPC_BUF_LENGTH - i - 1 ] ); } for( i = 0; i < DECISION_DELAY; i++ ) { psDD->Pred_Q16[ i ] = SKP_SMULWW( gain_adj_Q16, psDD->Pred_Q16[ i ] ); psDD->Shape_Q10[ i ] = SKP_SMULWW( gain_adj_Q16, psDD->Shape_Q10[ i ] ); } } /* Scale long term shaping state */ /* Calculate length to be scaled, Worst case: Next frame is voiced with max lag */ scale_length = length * NB_SUBFR; /* aprox max lag */ scale_length = scale_length - SKP_SMULBB( NB_SUBFR - ( subfr + 1 ), length ); /* subtract samples that will be too old in next frame */ scale_length = SKP_max_int( scale_length, lag + LTP_ORDER ); /* make sure to scale whole pitch period if voiced */ for( i = NSQ->sLTP_shp_buf_idx - scale_length; i < NSQ->sLTP_shp_buf_idx; i++ ) { NSQ->sLTP_shp_Q10[ i ] = SKP_SMULWW( gain_adj_Q16, NSQ->sLTP_shp_Q10[ i ] ); } /* Scale LTP predict state */ if( NSQ->rewhite_flag == 0 ) { for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx; i++ ) { sLTP_Q16[ i ] = SKP_SMULWW( gain_adj_Q16, sLTP_Q16[ i ] ); } } } /* Scale input */ for( i = 0; i < length; i++ ) { x_sc_Q10[ i ] = SKP_RSHIFT( SKP_SMULBB( x[ i ], ( SKP_int16 )inv_gain_Q16 ), 6 ); } /* save inv_gain */ SKP_assert( inv_gain_Q16 != 0 ); NSQ->prev_inv_gain_Q16 = inv_gain_Q16; } SKP_INLINE void SKP_Silk_copy_del_dec_state( NSQ_del_dec_struct *DD_dst, /* I Dst del dec state */ NSQ_del_dec_struct *DD_src, /* I Src del dec state */ SKP_int LPC_state_idx /* I Index to LPC buffer */ ) { SKP_memcpy( DD_dst->RandState, DD_src->RandState, DECISION_DELAY * sizeof( SKP_int ) ); SKP_memcpy( DD_dst->Q_Q10, DD_src->Q_Q10, DECISION_DELAY * sizeof( SKP_int32 ) ); SKP_memcpy( DD_dst->Pred_Q16, DD_src->Pred_Q16, DECISION_DELAY * sizeof( SKP_int32 ) ); SKP_memcpy( DD_dst->Shape_Q10, DD_src->Shape_Q10, DECISION_DELAY * sizeof( SKP_int32 ) ); SKP_memcpy( DD_dst->Xq_Q10, DD_src->Xq_Q10, DECISION_DELAY * sizeof( SKP_int32 ) ); SKP_memcpy( &DD_dst->sLPC_Q14[ LPC_state_idx ], &DD_src->sLPC_Q14[ LPC_state_idx ], NSQ_LPC_BUF_LENGTH * sizeof( SKP_int32 ) ); DD_dst->LF_AR_Q12 = DD_src->LF_AR_Q12; DD_dst->Seed = DD_src->Seed; DD_dst->SeedInit = DD_src->SeedInit; DD_dst->RD_Q10 = DD_src->RD_Q10; } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_quant_LTP_gains_FIX.c0000644000175000017500000001222111513063445023446 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" void SKP_Silk_quant_LTP_gains_FIX( SKP_int16 B_Q14[], /* I/O (un)quantized LTP gains */ SKP_int cbk_index[], /* O Codebook Index */ SKP_int *periodicity_index, /* O Periodicity Index */ const SKP_int32 W_Q18[], /* I Error Weights in Q18 */ SKP_int mu_Q8, /* I Mu value (R/D tradeoff) */ SKP_int lowComplexity /* I Flag for low complexity */ ) { SKP_int j, k, temp_idx[ NB_SUBFR ], cbk_size; const SKP_uint16 *cdf_ptr; const SKP_int16 *cl_ptr; const SKP_int16 *cbk_ptr_Q14; const SKP_int16 *b_Q14_ptr; const SKP_int32 *W_Q18_ptr; SKP_int32 rate_dist_subfr, rate_dist, min_rate_dist; /***************************************************/ /* iterate over different codebooks with different */ /* rates/distortions, and choose best */ /***************************************************/ min_rate_dist = SKP_int32_MAX; for( k = 0; k < 3; k++ ) { cdf_ptr = SKP_Silk_LTP_gain_CDF_ptrs[ k ]; cl_ptr = SKP_Silk_LTP_gain_BITS_Q6_ptrs[ k ]; cbk_ptr_Q14 = SKP_Silk_LTP_vq_ptrs_Q14[ k ]; cbk_size = SKP_Silk_LTP_vq_sizes[ k ]; /* Setup pointer to first subframe */ W_Q18_ptr = W_Q18; b_Q14_ptr = B_Q14; rate_dist = 0; for( j = 0; j < NB_SUBFR; j++ ) { SKP_Silk_VQ_WMat_EC_FIX( &temp_idx[ j ], /* O index of best codebook vector */ &rate_dist_subfr, /* O best weighted quantization error + mu * rate */ b_Q14_ptr, /* I input vector to be quantized */ W_Q18_ptr, /* I weighting matrix */ cbk_ptr_Q14, /* I codebook */ cl_ptr, /* I code length for each codebook vector */ mu_Q8, /* I tradeoff between weighted error and rate */ cbk_size /* I number of vectors in codebook */ ); rate_dist = SKP_ADD_POS_SAT32( rate_dist, rate_dist_subfr ); b_Q14_ptr += LTP_ORDER; W_Q18_ptr += LTP_ORDER * LTP_ORDER; } /* Avoid never finding a codebook */ rate_dist = SKP_min( SKP_int32_MAX - 1, rate_dist ); if( rate_dist < min_rate_dist ) { min_rate_dist = rate_dist; SKP_memcpy( cbk_index, temp_idx, NB_SUBFR * sizeof( SKP_int ) ); *periodicity_index = k; } /* Break early in low-complexity mode if rate distortion is below threshold */ if( lowComplexity && ( rate_dist < SKP_Silk_LTP_gain_middle_avg_RD_Q14 ) ) { break; } } cbk_ptr_Q14 = SKP_Silk_LTP_vq_ptrs_Q14[ *periodicity_index ]; for( j = 0; j < NB_SUBFR; j++ ) { for( k = 0; k < LTP_ORDER; k++ ) { B_Q14[ j * LTP_ORDER + k ] = cbk_ptr_Q14[ SKP_MLA( k, cbk_index[ j ], LTP_ORDER ) ]; } } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_tables_sign.c0000644000175000017500000000572011513063445022210 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_tables.h" const SKP_uint16 SKP_Silk_sign_CDF[ 36 ][ 3 ] = { { 0, 37840, 65535 }, { 0, 36944, 65535 }, { 0, 36251, 65535 }, { 0, 35304, 65535 }, { 0, 34715, 65535 }, { 0, 35503, 65535 }, { 0, 34529, 65535 }, { 0, 34296, 65535 }, { 0, 34016, 65535 }, { 0, 47659, 65535 }, { 0, 44945, 65535 }, { 0, 42503, 65535 }, { 0, 40235, 65535 }, { 0, 38569, 65535 }, { 0, 40254, 65535 }, { 0, 37851, 65535 }, { 0, 37243, 65535 }, { 0, 36595, 65535 }, { 0, 43410, 65535 }, { 0, 44121, 65535 }, { 0, 43127, 65535 }, { 0, 40978, 65535 }, { 0, 38845, 65535 }, { 0, 40433, 65535 }, { 0, 38252, 65535 }, { 0, 37795, 65535 }, { 0, 36637, 65535 }, { 0, 59159, 65535 }, { 0, 55630, 65535 }, { 0, 51806, 65535 }, { 0, 48073, 65535 }, { 0, 45036, 65535 }, { 0, 48416, 65535 }, { 0, 43857, 65535 }, { 0, 42678, 65535 }, { 0, 41146, 65535 } }; h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_resample_3_4.c0000644000175000017500000001021311513063445022164 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * File Name: SKP_Silk_resample_3_4.c * * * * Resamples by a factor 3/4 * * * * Copyright 2009 (c), Skype Limited * * All rights reserved. * * * * Date: 090408 * * */ #include "SKP_Silk_SigProc_FIX.h" #define IN_SUBFR_LEN_RESAMPLE_3_4 80 /* Resamples by a factor 3/4 */ void SKP_Silk_resample_3_4( SKP_int16 *out, /* O: Fs_high signal [inLen*3/4] */ SKP_int32 *S, /* I/O: State vector [7+2+6] */ const SKP_int16 *in, /* I: Fs_low signal [inLen] */ SKP_int inLen /* I: Input length, must be a multiple of 4 */ ) { SKP_int LSubFrameIn, LSubFrameOut; SKP_int16 outH[ 3 * IN_SUBFR_LEN_RESAMPLE_3_4 ]; SKP_int16 outL[ ( 3 * IN_SUBFR_LEN_RESAMPLE_3_4 ) / 2 ]; SKP_int32 scratch[ ( 9 * IN_SUBFR_LEN_RESAMPLE_3_4 ) / 2 ]; /* Check that input is multiple of 4 */ SKP_assert( inLen % 4 == 0 ); while( inLen > 0 ) { LSubFrameIn = SKP_min_int( IN_SUBFR_LEN_RESAMPLE_3_4, inLen ); LSubFrameOut = SKP_SMULWB( 49152, LSubFrameIn ); /* Upsample by a factor 3 */ SKP_Silk_resample_3_1( outH, &S[ 0 ], in, LSubFrameIn ); /* Downsample by a factor 2 twice */ /* Scratch size needs to be: 3 * 2 * LSubFrameOut * sizeof( SKP_int32 ) */ /* I: state vector [2], scratch memory [3*len] */ SKP_Silk_resample_1_2_coarsest( outH, &S[ 7 ], outL, scratch, SKP_LSHIFT( LSubFrameOut, 1 ) ); /* Scratch size needs to be: 3 * LSubFrameOut * sizeof( SKP_int32 ) */ /* I: state vector [6], scratch memory [3*len] */ SKP_Silk_resample_1_2_coarse( outL, &S[ 9 ], out, scratch, LSubFrameOut ); in += LSubFrameIn; out += LSubFrameOut; inLen -= LSubFrameIn; } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_resample_1_3.c0000644000175000017500000001172311513063445022170 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_resample_1_3.c * * * * Downsamples by a factor 3 * * * * Copyright 2008 (c), Skype Limited * * Date: 081113 * * */ #include "SKP_Silk_SigProc_FIX.h" #define OUT_SUBFR_LEN 80 /* Downsamples by a factor 3 */ void SKP_Silk_resample_1_3( SKP_int16 *out, /* O: Fs_low signal [inLen/3] */ SKP_int32 *S, /* I/O: State vector [7] */ const SKP_int16 *in, /* I: Fs_high signal [inLen] */ const SKP_int32 inLen /* I: Input length, must be a multiple of 3 */ ) { SKP_int k, outLen, LSubFrameIn, LSubFrameOut; SKP_int32 out_tmp, limit = 102258000; // (102258000 + 1560) * 21 * 2^(-16) = 32767.5 SKP_int32 scratch0[ 3 * OUT_SUBFR_LEN ]; SKP_int32 scratch10[ OUT_SUBFR_LEN ], scratch11[ OUT_SUBFR_LEN ], scratch12[ OUT_SUBFR_LEN ]; /* coefficients for 3-fold resampling */ const SKP_int16 A30[ 2 ] = { 1773, 17818 }; const SKP_int16 A31[ 2 ] = { 4942, 25677 }; const SKP_int16 A32[ 2 ] = { 11786, 29304 }; /* Check that input is multiple of 3 */ SKP_assert( inLen % 3 == 0 ); outLen = SKP_DIV32_16( inLen, 3 ); while( outLen > 0 ) { LSubFrameOut = SKP_min_int( OUT_SUBFR_LEN, outLen ); LSubFrameIn = SKP_SMULBB( 3, LSubFrameOut ); /* Low-pass filter, Q15 -> Q25 */ SKP_Silk_lowpass_short( in, S, scratch0, LSubFrameIn ); /* De-interleave three allpass inputs */ for( k = 0; k < LSubFrameOut; k++ ) { scratch10[ k ] = scratch0[ 3 * k ]; scratch11[ k ] = scratch0[ 3 * k + 1 ]; scratch12[ k ] = scratch0[ 3 * k + 2 ]; } /* Allpass filters */ SKP_Silk_allpass_int( scratch10, S + 1, A32[ 0 ], scratch0, LSubFrameOut ); SKP_Silk_allpass_int( scratch0, S + 2, A32[ 1 ], scratch10, LSubFrameOut ); SKP_Silk_allpass_int( scratch11, S + 3, A31[ 0 ], scratch0, LSubFrameOut ); SKP_Silk_allpass_int( scratch0, S + 4, A31[ 1 ], scratch11, LSubFrameOut ); SKP_Silk_allpass_int( scratch12, S + 5, A30[ 0 ], scratch0, LSubFrameOut ); SKP_Silk_allpass_int( scratch0, S + 6, A30[ 1 ], scratch12, LSubFrameOut ); /* Add three allpass outputs */ for( k = 0; k < LSubFrameOut; k++ ) { out_tmp = scratch10[ k ] + scratch11[ k ] + scratch12[ k ]; if( out_tmp - limit > 0 ) { out[ k ] = SKP_int16_MAX; } else if( out_tmp + limit < 0 ) { out[ k ] = SKP_int16_MIN; } else { out[ k ] = (SKP_int16) SKP_SMULWB( out_tmp + 1560, 21 ); } } in += LSubFrameIn; out += LSubFrameOut; outLen -= LSubFrameOut; } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_define_FIX.h0000644000175000017500000001127311513063445021663 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #ifndef SKP_SILK_DEFINE_FIX_H #define SKP_SILK_DEFINE_FIX_H #ifdef __cplusplus extern "C" { #endif /* Head room for correlations */ #define LTP_CORRS_HEAD_ROOM 2 #define LPC_CORRS_HEAD_ROOM 10 #define WB_DETECT_ACTIVE_SPEECH_LEVEL_THRES_Q8 179 // 179.2_Q8 = 0.7f required speech activity for counting frame as active /* DTX settings */ #define SPEECH_ACTIVITY_DTX_THRES_Q8 26 // 25.60_Q8 = 0.1f #define LBRR_SPEECH_ACTIVITY_THRES_Q8 128 /* level of noise floor for whitening filter LPC analysis in pitch analysis */ #define FIND_PITCH_WHITE_NOISE_FRACTION_Q16 66 /* bandwdith expansion for whitening filter in pitch analysis */ #define FIND_PITCH_BANDWITH_EXPANSION_Q16 64881 /* Threshold used by pitch estimator for early escape */ #define FIND_PITCH_CORRELATION_THRESHOLD_Q16_HC_MODE 45875 // 0.7 #define FIND_PITCH_CORRELATION_THRESHOLD_Q16_MC_MODE 49152 // 0.75 #define FIND_PITCH_CORRELATION_THRESHOLD_Q16_LC_MODE 52429 // 0.8 /* Regualarization factor for correlation matrix. Equivalent to adding noise at -50 dB */ #define FIND_LTP_COND_FAC_Q31 21475 #define FIND_LPC_COND_FAC_Q32 257698 // 6e-5 /* Find Pred Coef defines */ #define INACTIVE_BWExp_Q16 64225 // 0.98 #define ACTIVE_BWExp_Q16 65470 // 0.999 #define LTP_DAMPING_Q16 66 #define LTP_SMOOTHING_Q26 6710886 /* LTP quantization settings */ #define MU_LTP_QUANT_NB_Q8 8 #define MU_LTP_QUANT_MB_Q8 6 #define MU_LTP_QUANT_WB_Q8 5 #define MU_LTP_QUANT_SWB_Q8 4 /***********************/ /* High pass filtering */ /***********************/ /* Smoothing parameters for low end of pitch frequency range estimation */ #define VARIABLE_HP_SMTH_COEF1_Q16 6554 // 0.1 #define VARIABLE_HP_SMTH_COEF2_Q16 983 // 0.015 /* Min and max values for low end of pitch frequency range estimation */ #define VARIABLE_HP_MIN_FREQ_Q0 80 #define VARIABLE_HP_MAX_FREQ_Q0 150 /* Max absolute difference between log2 of pitch frequency and smoother state, to enter the smoother */ #define VARIABLE_HP_MAX_DELTA_FREQ_Q7 51 // 0.4 in Q7 /* Defines for CN generation */ #define CNG_BUF_MASK_MAX 255 /* 2^floor(log2(MAX_FRAME_LENGTH)) */ #define CNG_GAIN_SMTH_Q16 4634 /* 0.25^(1/4) */ #define CNG_NLSF_SMTH_Q16 16348 /* 0.25 */ #ifdef __cplusplus } #endif #endif h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_ana_filt_bank_1.c0000644000175000017500000000772411513063445022714 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_ana_filt_bank_1.c * * * * Split signal into two decimated bands using first-order allpass filters * * * * Copyright 2006 (c), Skype Limited * * Date: 060221 * * */ #include "SKP_Silk_SigProc_FIX.h" /* Coefficients for 2-band filter bank based on first-order allpass filters */ static SKP_int16 A_fb1_20[ 1 ] = { 5394 }; static SKP_int16 A_fb1_21[ 1 ] = { 20623 }; /* Split signal into two decimated bands using first-order allpass filters */ void SKP_Silk_ana_filt_bank_1( const SKP_int16 *in, /* I: Input signal [N] */ SKP_int32 *S, /* I/O: State vector [2] */ SKP_int16 *outL, /* O: Low band [N/2] */ SKP_int16 *outH, /* O: High band [N/2] */ SKP_int32 *scratch, /* I: Scratch memory [3*N/2] */ const SKP_int32 N /* I: Number of input samples */ ) { SKP_int k, N2 = SKP_RSHIFT( N, 1 ); SKP_int32 out_tmp; /* De-interleave three allpass inputs, and convert Q15 -> Q25 */ for( k = 0; k < N2; k++ ) { scratch[ k + N ] = SKP_LSHIFT( (SKP_int32)in[ 2 * k ], 10 ); scratch[ k + N2 ] = SKP_LSHIFT( (SKP_int32)in[ 2 * k + 1 ], 10 ); } /* Allpass filters */ SKP_Silk_allpass_int( scratch + N2, S+0, A_fb1_20[ 0 ], scratch, N2 ); SKP_Silk_allpass_int( scratch + N, S+1, A_fb1_21[ 0 ], scratch + N2, N2 ); /* Add and subtract two allpass outputs to create bands */ for( k = 0; k < N2; k++ ) { out_tmp = scratch[ k ] + scratch[ k + N2 ]; outL[ k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( out_tmp, 11 ) ); out_tmp = scratch[ k ] - scratch[ k + N2 ]; outH[ k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( out_tmp, 11 ) ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_NLSF_VQ_sum_error_FIX.c0000644000175000017500000001022211513063445023662 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" /* Compute weighted quantization errors for an LPC_order element input vector, over one codebook stage */ void SKP_Silk_NLSF_VQ_sum_error_FIX( SKP_int32 *err_Q20, /* O Weighted quantization errors [N*K] */ const SKP_int *in_Q15, /* I Input vectors to be quantized [N*LPC_order] */ const SKP_int *w_Q6, /* I Weighting vectors [N*LPC_order] */ const SKP_int16 *pCB_Q15, /* I Codebook vectors [K*LPC_order] */ const SKP_int N, /* I Number of input vectors */ const SKP_int K, /* I Number of codebook vectors */ const SKP_int LPC_order /* I Number of LPCs */ ) { SKP_int i, n, m; SKP_int32 diff_Q15, sum_error, Wtmp_Q6; SKP_int32 Wcpy_Q6[ MAX_LPC_ORDER / 2 ]; const SKP_int16 *cb_vec_Q15; SKP_assert( LPC_order <= 16 ); SKP_assert( ( LPC_order & 1 ) == 0 ); /* Copy to local stack and pack two weights per int32 */ for( m = 0; m < SKP_RSHIFT( LPC_order, 1 ); m++ ) { Wcpy_Q6[ m ] = w_Q6[ 2 * m ] | SKP_LSHIFT( ( SKP_int32 )w_Q6[ 2 * m + 1 ], 16 ); } /* Loop over input vectors */ for( n = 0; n < N; n++ ) { /* Loop over codebook */ cb_vec_Q15 = pCB_Q15; for( i = 0; i < K; i++ ) { sum_error = 0; for( m = 0; m < LPC_order; m += 2 ) { /* Get two weights packed in an int32 */ Wtmp_Q6 = Wcpy_Q6[ SKP_RSHIFT( m, 1 ) ]; /* Compute weighted squared quantization error for index m */ diff_Q15 = in_Q15[ m ] - *cb_vec_Q15++; // range: [ -32767 : 32767 ] sum_error = SKP_SMLAWB( sum_error, SKP_SMULBB( diff_Q15, diff_Q15 ), Wtmp_Q6 ); /* Compute weighted squared quantization error for index m + 1 */ diff_Q15 = in_Q15[m + 1] - *cb_vec_Q15++; // range: [ -32767 : 32767 ] sum_error = SKP_SMLAWT( sum_error, SKP_SMULBB( diff_Q15, diff_Q15 ), Wtmp_Q6 ); } SKP_assert( sum_error >= 0 ); err_Q20[ i ] = sum_error; } err_Q20 += K; in_Q15 += LPC_order; } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_FIX_Win32_debug.lib0000644000175000017500000503712011513063445023024 0ustar markmark! / 1273638397 0 50083 ` H—Œ—Œ—Œ—ŒЙ6Й6Й6Й6Й6Й6Й6Й6Й6Й6Й6Й6Й6 № № № z2˜2˜2˜2˜2˜2˜2˜2˜2˜2˜2˜2˜OЂOЂOЂOЂOЂOЂOЂOЂOЂOЂOЂOЂOЂOЂo o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o ЗЗЗЗЗЗЗЗдЬдЬдЬдЬдЬдЬдЬдЬ        -H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-HIшIшIшIш]иsіsіsіsіsіsіsіsіsіsіsіsі Ю Ю Ю Ю Ю Ю Ю Ю Ю Юь*3р3р3р]Ј€€€€€€€€€€€€€ЌVРhххххххххІІІІ9999Wše„e„e„e„ƒ,ЁтЁтАЪАЪАЪАЪЭbЭbЭbъиъиъиЌ і і іCњZТrШŠшЂ6Ђ6Ђ6Ђ6Ђ6Ђ6Ђ6Ђ6Ђ6фBњооооооооооооооXXXXXX’’’’ИИИИИИИИ''''';(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(ќмќмќмќмќмќмќмќмќмќмќмќмќмќмќмќмќмќм ‘6 ‘6 ‘6 ‘6 ‘6 ‘6 ‘6 n n n n n n n n n cn cn cn cn cn cn cn cn cn ‰Њ ‰Њ ‰Њ ‰Њ ‰Њ ‰Њ Ќ& Ќ& Ќ& Ќ& Ќ& Ќ& ЭŽ ЭŽ ЭŽ ЭŽ ЭŽ єH єH єH єH єH $– $– $– $– $– FО `V `V `V `V `V `V `V `V ‰Ь ‰Ь ‰Ь ‰Ь ‰Ь ‰Ь ‰Ь Зђ лZ ј є 'ќ 'ќ 'ќ 'ќ GR GR GR GR GR GR i i i i i i i i i i i Њr Њr Њr Њr Њr Њr Њr Њr Њr ор ѓ @ ` :r Rќ i$      ›К ›К ›К ›К КL ж ж ж ж ж ж ж ж ђђ%d%d%d%d%d%d%dgЄgЄgЄgЄ К К К К К К К К К К Кˆˆˆˆ/:Z,Z,Z,Z,‡ц‡ц‡цДLДLДLДLДLДLДLџVџVџVџVџVџVџVџVџV?@a^a^a^a^†иЇтЬ Т@Ь@Ь@Ь@Ь@ЬiiiiiiИ.И.И.И.И.И.їР&&&&&?X?X?X?X?X?X?X?XЅЅТ‚Т‚Т‚Т‚Т‚Т‚№ЖHNNNNNNN`vtŒЎЖУ\У\У\У\У\У\сVјВ ю ю ю ю ю??_C@_1BM@HNONFFPH@?$AAs?$AAu?$AAm?$AA1?$AA_?$AAQ?$AA1?$AA4?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1KM@IGJINFHN@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_VQ_WMat_EC_FIX@@9@9_SKP_Silk_VQ_WMat_EC_FIX??_C@_1BA@CLOLADMK@?$AAn?$AAl?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BA@HFNBICOB@?$AAn?$AAr?$AAg?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1BK@OLBABGIA@?$AAi?$AAn?$AAv?$AA_?$AAn?$AAr?$AAg?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CA@KFLJAHPM@?$AAs?$AAu?$AAm?$AAS?$AAq?$AAu?$AAa?$AAr?$AAe?$AAd?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CG@BNFHGOHD@?$AAf?$AAr?$AAa?$AAm?$AAe?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA5?$AA1?$AA2?$AA?$AA@??_C@_1DC@NICFFDPC@?$AA?$CI?$AA2?$AA0?$AA?5?$AA?$CK?$AA?5?$AA2?$AA4?$AA?$CJ?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAf?$AAr?$AAa?$AAm?$AAe?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?$AA@??_C@_1DK@FPECHEBI@?$AAp?$AAs?$AAS?$AAi?$AAl?$AAk?$AA_?$AAV?$AAA?$AAD?$AA?9?$AA?$DO?$AAi?$AAn?$AAv?$AA_?$AAN?$AAL?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1IE@CCLGAEPI@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_VAD_GetNoiseLevels@@9@9?__LINE__Var@?1??SKP_Silk_VAD_GetSA_Q8@@9@9_SKP_Silk_VAD_GetNoiseLevels_SKP_Silk_VAD_GetSA_Q8_SKP_Silk_VAD_Init_SKP_Silk_type_offset_CDF_SKP_Silk_type_offset_CDF_offset_SKP_Silk_type_offset_joint_CDF_SKP_Silk_sign_CDF_SKP_Silk_max_pulses_table_SKP_Silk_pulses_per_block_BITS_Q6_SKP_Silk_pulses_per_block_CDF_SKP_Silk_pulses_per_block_CDF_offset_SKP_Silk_rate_levels_BITS_Q6_SKP_Silk_rate_levels_CDF_SKP_Silk_rate_levels_CDF_offset_SKP_Silk_shell_code_table0_SKP_Silk_shell_code_table1_SKP_Silk_shell_code_table2_SKP_Silk_shell_code_table3_SKP_Silk_shell_code_table_offsets_SKP_Silk_pitch_contour_CDF_SKP_Silk_pitch_contour_CDF_offset_SKP_Silk_pitch_contour_NB_CDF_SKP_Silk_pitch_contour_NB_CDF_offset_SKP_Silk_pitch_delta_CDF_SKP_Silk_pitch_delta_CDF_offset_SKP_Silk_pitch_lag_MB_CDF_SKP_Silk_pitch_lag_MB_CDF_offset_SKP_Silk_pitch_lag_NB_CDF_SKP_Silk_pitch_lag_NB_CDF_offset_SKP_Silk_pitch_lag_SWB_CDF_SKP_Silk_pitch_lag_SWB_CDF_offset_SKP_Silk_pitch_lag_WB_CDF_SKP_Silk_pitch_lag_WB_CDF_offset_SKP_Silk_Dec_A_HP_12_SKP_Silk_Dec_A_HP_16_SKP_Silk_Dec_A_HP_24_SKP_Silk_Dec_A_HP_8_SKP_Silk_Dec_B_HP_12_SKP_Silk_Dec_B_HP_16_SKP_Silk_Dec_B_HP_24_SKP_Silk_Dec_B_HP_8_SKP_Silk_FrameTermination_CDF_SKP_Silk_FrameTermination_offset_SKP_Silk_FrameTermination_v4_CDF_SKP_Silk_FrameTermination_v4_offset_SKP_Silk_LTPScales_table_Q14_SKP_Silk_LTPscale_CDF_SKP_Silk_LTPscale_offset_SKP_Silk_NLSF_interpolation_factor_CDF_SKP_Silk_NLSF_interpolation_factor_offset_SKP_Silk_Quantization_Offsets_Q10_SKP_Silk_SWB_detect_A_HP_Q13_SKP_Silk_SWB_detect_B_HP_Q13_SKP_Silk_SamplingRates_CDF_SKP_Silk_SamplingRates_offset_SKP_Silk_SamplingRates_table_SKP_Silk_Seed_CDF_SKP_Silk_Seed_offset_SKP_Silk_Transition_LP_A_Q28_SKP_Silk_Transition_LP_B_Q28_SKP_Silk_lsb_CDF_SKP_Silk_vadflag_CDF_SKP_Silk_vadflag_offset_SNR_table_Q1_SNR_table_one_bit_per_sample_Q7_TargetRate_table_MB_TargetRate_table_NB_TargetRate_table_SWB_TargetRate_table_WB_SKP_Silk_NLSF_CB1_16_SKP_Silk_NLSF_CB1_16_Stage_info_SKP_Silk_NLSF_MSVQ_CB1_16_CDF_SKP_Silk_NLSF_MSVQ_CB1_16_CDF_middle_idx_SKP_Silk_NLSF_MSVQ_CB1_16_CDF_start_ptr_SKP_Silk_NLSF_MSVQ_CB1_16_Q15_SKP_Silk_NLSF_MSVQ_CB1_16_ndelta_min_Q15_SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5_SKP_Silk_NLSF_CB1_10_SKP_Silk_NLSF_CB1_10_Stage_info_SKP_Silk_NLSF_MSVQ_CB1_10_CDF_SKP_Silk_NLSF_MSVQ_CB1_10_CDF_middle_idx_SKP_Silk_NLSF_MSVQ_CB1_10_CDF_start_ptr_SKP_Silk_NLSF_MSVQ_CB1_10_Q15_SKP_Silk_NLSF_MSVQ_CB1_10_ndelta_min_Q15_SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5_SKP_Silk_NLSF_CB0_16_SKP_Silk_NLSF_CB0_16_Stage_info_SKP_Silk_NLSF_MSVQ_CB0_16_CDF_SKP_Silk_NLSF_MSVQ_CB0_16_CDF_middle_idx_SKP_Silk_NLSF_MSVQ_CB0_16_CDF_start_ptr_SKP_Silk_NLSF_MSVQ_CB0_16_Q15_SKP_Silk_NLSF_MSVQ_CB0_16_ndelta_min_Q15_SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5_SKP_Silk_NLSF_CB0_10_SKP_Silk_NLSF_CB0_10_Stage_info_SKP_Silk_NLSF_MSVQ_CB0_10_CDF_SKP_Silk_NLSF_MSVQ_CB0_10_CDF_middle_idx_SKP_Silk_NLSF_MSVQ_CB0_10_CDF_start_ptr_SKP_Silk_NLSF_MSVQ_CB0_10_Q15_SKP_Silk_NLSF_MSVQ_CB0_10_ndelta_min_Q15_SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5_SKP_Silk_LTP_gain_BITS_Q6_0_SKP_Silk_LTP_gain_BITS_Q6_1_SKP_Silk_LTP_gain_BITS_Q6_2_SKP_Silk_LTP_gain_BITS_Q6_ptrs_SKP_Silk_LTP_gain_CDF_0_SKP_Silk_LTP_gain_CDF_1_SKP_Silk_LTP_gain_CDF_2_SKP_Silk_LTP_gain_CDF_offsets_SKP_Silk_LTP_gain_CDF_ptrs_SKP_Silk_LTP_gain_middle_avg_RD_Q14_SKP_Silk_LTP_gain_vq_0_Q14_SKP_Silk_LTP_gain_vq_1_Q14_SKP_Silk_LTP_gain_vq_2_Q14_SKP_Silk_LTP_per_index_CDF_SKP_Silk_LTP_per_index_CDF_offset_SKP_Silk_LTP_vq_ptrs_Q14_SKP_Silk_LTP_vq_sizes_SKP_Silk_delta_gain_CDF_SKP_Silk_delta_gain_CDF_offset_SKP_Silk_gain_CDF_SKP_Silk_gain_CDF_offset_SKP_Silk_sum_sqr_shift??_C@_1IG@MCJJGPJH@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1M@JJNOHMOJ@?$AAL?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1M@ONEGJFGG@?$AAK?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1O@HOHCBFDB@?$AAL?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAK?$AA?$AA@?__LINE__Var@?1??SKP_Silk_insertion_sort_decreasing@@9@9?__LINE__Var@?1??SKP_Silk_insertion_sort_decreasing_int16@@9@9?__LINE__Var@?1??SKP_Silk_insertion_sort_increasing@@9@9?__LINE__Var@?1??SKP_Silk_insertion_sort_increasing_all_values@@9@9_SKP_Silk_insertion_sort_decreasing_SKP_Silk_insertion_sort_decreasing_int16_SKP_Silk_insertion_sort_increasing_SKP_Silk_insertion_sort_increasing_all_values??_C@_1BA@JGCKBLPP@?$AAM?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1?$AA6?$AA?$AA@??_C@_1BC@LJHCOKEE@?$AAb?$AA3?$AA2?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BC@MIGJDBBJ@?$AAQ?$AAr?$AAe?$AAs?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1BI@MDCHJGIP@?$AAs?$AAt?$AAa?$AAt?$AAu?$AAs?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1IM@NKJIPJPB@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1JG@OAEABAGG@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_INVERSE32_varQ@@9@9@ae4c369d?__LINE__Var@?1??SKP_Silk_LDL_factorize_FIX@@9@9@ae4c369d?__LINE__Var@?1??SKP_Silk_solve_LDL_FIX@@9@9_SKP_Silk_solve_LDL_FIX_SKP_Silk_sigm_Q15_SKP_Silk_shell_decoder_SKP_Silk_shell_encoder??_C@_1BE@NOJNLPIL@?$AAQ?$AAr?$AAe?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@?__LINE__Var@?1??SKP_DIV32_varQ@@9@9@e900e1e8_SKP_Silk_schur64_SKP_Silk_schur??_C@_1CC@JEBOMLLA@?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA4?$AA?5?$AA?$DM?$AA?5?$AA3?$AA2?$AA7?$AA6?$AA8?$AA?$AA@??_C@_1CG@HPNFAFGH@?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA4?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA?9?$AA3?$AA2?$AA7?$AA6?$AA8?$AA?$AA@??_C@_1DG@DNCFEAIL@?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?5?$AA?$CL?$AA?5?$AA6?$AA5?$AA5?$AA3?$AA6?$AA?$AA@??_C@_1DI@DAHMJJNE@?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA4?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAs?$AAh?$AAo?$AAr?$AAt?$AA?$CJ?$AA0?$AAx?$AA8?$AA0?$AA0?$AA0?$AA?$CJ?$AA?$AA@??_C@_1DI@KJHOJGEJ@?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAs?$AAh?$AAo?$AAr?$AAt?$AA?$CJ?$AA0?$AAx?$AA8?$AA0?$AA0?$AA0?$AA?$CJ?$AA?$AA@??_C@_1JG@HDILJKBL@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_scale_vector16_Q14@@9@9?__LINE__Var@?1??SKP_Silk_scale_vector32_16_Q14@@9@9?__LINE__Var@?1??SKP_Silk_scale_vector32_Q16@@9@9_SKP_Silk_scale_vector16_Q14_SKP_Silk_scale_vector32_16_Q14_SKP_Silk_scale_vector32_Q16_SKP_Silk_scale_vector32_Q26_lshift_18_SKP_Silk_scale_copy_vector16_SKP_Silk_residual_energy_FIX??_C@_1BA@DACHAPFJ@?$AAc?$AAQ?$AA?5?$AA?$DM?$AA?5?$AA1?$AA6?$AA?$AA@??_C@_1BA@ELFBBFCB@?$AAD?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1?$AA6?$AA?$AA@??_C@_1GO@IAOHIPFH@?$AA?$CI?$AA?$CI?$AA?$CI?$AAc?$AAn?$AA?$FL?$AAi?$AA?$FN?$AA?$CJ?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$CJ?$AA?5?$AA?$DP?$AA?5?$AA?$CI?$AAc?$AAn?$AA?$FL?$AAi?$AA?$FN?$AA?$CJ?$AA?5?$AA?3?$AA?5?$AA?9?$AA?$CI?$AAc?$AAn?$AA?$FL@??_C@_1KI@KLLICAIO@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1O@FBLLIFKB@?$AAc?$AAQ?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1O@PBBFCMJK@?$AAD?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@?__LINE__Var@?1??SKP_Silk_residual_energy16_covar_FIX@@9@9_SKP_Silk_residual_energy16_covar_FIX??_C@_1BO@FMLBKELP@?$AAi?$AAn?$AAL?$AAe?$AAn?$AA?5?$AA?$CF?$AA?5?$AA3?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1JG@BAODBNBD@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_resample_4_3@@9@9_SKP_Silk_resample_4_3??_C@_1BO@DJHMAOHP@?$AAi?$AAn?$AAL?$AAe?$AAn?$AA?5?$AA?$CF?$AA?5?$AA4?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1JG@GOLOPNIF@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_resample_3_4@@9@9_SKP_Silk_resample_3_4_SigProc_Resample_3_2_coarse_INTERPOL??_C@_1BO@MBLOEFMJ@?$AAi?$AAn?$AAL?$AAe?$AAn?$AA?5?$AA?$CF?$AA?5?$AA2?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1JG@KINBPEAC@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_resample_3_2@@9@9_SKP_Silk_resample_3_2_SKP_Silk_resample_3_1_SigProc_Resample_2_3_coarse_INTERPOL_SigProc_Resample_2_3_coarsest_INTERPOL??_C@_1FE@DGLFBGCA@?$AAf?$AAr?$AAa?$AAm?$AAe?$AAL?$AAe?$AAn?$AAI?$AAn?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?5?$AA?$CI?$AA?5?$AAf?$AAr?$AAa?$AAm?$AAe?$AAL?$AAe?$AAn?$AAO?$AAu?$AAt?$AA?5?$AA?$CK?$AA?5@??_C@_1KI@GCLANMBF@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_resample_2_3_coarsest@@9@9_SKP_Silk_resample_2_3_coarsest??_C@_1KE@BCDGEAGJ@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_resample_2_3_coarse@@9@9_SKP_Silk_resample_2_3_coarse??_C@_1JG@PPNOLIPD@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_resample_2_3@@9@9_SKP_Silk_resample_2_3_SKP_Silk_resample_2_1_coarse??_C@_1JG@IIEAGKAD@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_resample_1_3@@9@9_SKP_Silk_resample_1_3_SKP_Silk_resample_1_2_coarsest_SKP_Silk_resample_1_2_coarse_SKP_Silk_resample_1_2_SKP_Silk_regularize_correlations_FIX_SKP_Silk_range_coder_check_after_decoding_SKP_Silk_range_coder_get_length_SKP_Silk_range_dec_init_SKP_Silk_range_decoder_SKP_Silk_range_decoder_multi_SKP_Silk_range_enc_init_SKP_Silk_range_enc_wrap_up_SKP_Silk_range_encoder_SKP_Silk_range_encoder_multi_SKP_Silk_quant_LTP_gains_FIX_SKP_Silk_pulses_to_bytes??_C@_1CC@CLPJMHLO@?$AAN?$AAL?$AAS?$AAF?$AA_?$AAm?$AAu?$AA_?$AAQ?$AA1?$AA5?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CG@IACBFFKN@?$AAN?$AAL?$AAS?$AAF?$AA_?$AAm?$AAu?$AA_?$AAQ?$AA1?$AA5?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1?$AA6?$AA4?$AA?$AA@??_C@_1CI@PPBFACJI@?$AAp?$AAN?$AAL?$AAS?$AAF?$AAW?$AA_?$AAQ?$AA6?$AA?$FL?$AA?5?$AAi?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA1?$AA?$AA@??_C@_1DC@CNMDEJKP@?$AAp?$AAN?$AAL?$AAS?$AAF?$AAW?$AA_?$AAQ?$AA6?$AA?$FL?$AA?5?$AAi?$AA?5?$AA?$FN?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?$AA@??_C@_1DE@MHPEDPJB@?$AAN?$AAL?$AAS?$AAF?$AA_?$AAm?$AAu?$AA_?$AAf?$AAl?$AAu?$AAc?$AA_?$AAr?$AAe?$AAd?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DM@BGIENKNI@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAs?$AAp?$AAa?$AAr?$AAs?$AAe?$AAn?$AAe?$AAs?$AAs?$AA_?$AAQ?$AA8?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DM@FFGDIEJB@?$AAN?$AAL?$AAS?$AAF?$AA_?$AAm?$AAu?$AA_?$AAf?$AAl?$AAu?$AAc?$AA_?$AAr?$AAe?$AAd?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1?$AA3?$AA1?$AA0?$AA7?$AA?$AA@??_C@_1DO@HFJHHMML@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAp?$AAe?$AAe?$AAc?$AAh?$AA_?$AAa?$AAc?$AAt?$AAi?$AAv?$AAi?$AAt?$AAy?$AA_?$AAQ?$AA8?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1EA@OKHJDLDN@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAs?$AAp?$AAa?$AAr?$AAs?$AAe?$AAn?$AAe?$AAs?$AAs?$AA_?$AAQ?$AA8?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA5?$AA6?$AA?$AA@??_C@_1EC@MAHEJDOO@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAp?$AAe?$AAe?$AAc?$AAh?$AA_?$AAa?$AAc?$AAt?$AAi?$AAv?$AAi?$AAt?$AAy?$AA_?$AAQ?$AA8?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA5?$AA6@??_C@_1HK@LAOFOGPD@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAs?$AAi?$AAg?$AAt?$AAy?$AAp?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$HM?$AA?$HM?$AA?5@??_C@_1KA@EPMJPGFK@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_process_NLSFs_FIX@@9@9_SKP_Silk_process_NLSFs_FIX??_C@_1CC@NDNHCOAK@?$AAg?$AAa?$AAi?$AAn?$AA_?$AAs?$AAq?$AAu?$AAa?$AAr?$AAe?$AAd?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1DG@LPMCFMEO@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAL?$AAa?$AAm?$AAb?$AAd?$AAa?$AA_?$AAQ?$AA1?$AA0?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1HC@GOPDELEO@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAL?$AAa?$AAm?$AAb?$AAd?$AAa?$AA_?$AAQ?$AA1?$AA0?$AA?5?$AA?$DM?$AA?5?$AA?$CI?$AA?$CI?$AAi?$AAn?$AAt?$AA?$CJ?$AA?$CI?$AA?$CI@??_C@_1KA@EOKJNLBE@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_process_gains_FIX@@9@9_SKP_Silk_process_gains_FIX??_C@_1CO@MKGFOLPD@?$AAH?$AAa?$AAr?$AAm?$AAS?$AAh?$AAa?$AAp?$AAe?$AAG?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA2?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1JI@JCPGDBFM@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_prefilter_FIX@@9@9_SKP_Silk_prefilter_FIX??_C@_1CO@CLMJDNHM@?$AAp?$AAs?$AAD?$AAe?$AAc?$AA?9?$AA?$DO?$AAL?$AAP?$AAC?$AA_?$AAo?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA1?$AA0?$AA?$AA@??_C@_1IE@DCLACDLB@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_PLC_conceal@@9@9_SKP_Silk_PLC_SKP_Silk_PLC_Reset_SKP_Silk_PLC_conceal_SKP_Silk_PLC_glue_frames_SKP_Silk_PLC_update_SKP_Silk_CB_lags_stage2_SKP_Silk_CB_lags_stage3_SKP_Silk_Lag_range_stage3_SKP_Silk_cbk_offsets_stage3_SKP_Silk_cbk_sizes_stage3??_C@_1BBG@LHPFCJDC@?$AA?$CI?$AA?$CI?$AA?$CI?$AAi?$AAn?$AAt?$AA?$CJ?$AA?9?$AAi?$AA?$CJ?$AA?$DM?$AA?$DM?$AA?$CI?$AA4?$AA?$CJ?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AA?$CI?$AA?$CI?$AA?$CI?$AAi?$AAn?$AAt?$AA?$CJ?$AA?9?$AAi?$AA?$CJ@??_C@_1BBO@IAGIEJDJ@?$AAs?$AAe?$AAa?$AAr?$AAc?$AAh?$AA_?$AAt?$AAh?$AAr?$AAe?$AAs?$AA2?$AA_?$AAQ?$AA1?$AA5?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAs?$AAe?$AAa?$AAr?$AAc?$AAh?$AA_?$AAt?$AAh@??_C@_1BDO@PNIOJCND@?$AAd?$AAe?$AAl?$AAt?$AAa?$AA_?$AAl?$AAa?$AAg?$AA_?$AAl?$AAo?$AAg?$AA2?$AA_?$AAs?$AAq?$AAr?$AA_?$AAQ?$AA7?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAd?$AAe?$AAl?$AAt?$AAa@??_C@_1BI@CKIDDDJK@?$AAe?$AAn?$AAe?$AAr?$AAg?$AAy?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BI@GHMOEKNM@?$AAF?$AAs?$AA_?$AAk?$AAH?$AAz?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA8?$AA?$AA@??_C@_1BK@DJOBKCKP@?$AAi?$AAd?$AAx?$AA?5?$AA?$CL?$AA?5?$AAj?$AA?5?$AA?$DM?$AA?5?$AA2?$AA2?$AA?$AA@??_C@_1BO@OIPMDBBP@?$AA?$CK?$AAl?$AAa?$AAg?$AAI?$AAn?$AAd?$AAe?$AAx?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CA@ELICKIGK@?$AAc?$AAo?$AAm?$AAp?$AAl?$AAe?$AAx?$AAi?$AAt?$AAy?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CA@OFHOLANM@?$AAc?$AAo?$AAm?$AAp?$AAl?$AAe?$AAx?$AAi?$AAt?$AAy?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA?$AA@??_C@_1CC@JNDFGPIE@?$AAl?$AAa?$AAg?$AA_?$AAc?$AAo?$AAu?$AAn?$AAt?$AAe?$AAr?$AA?5?$AA?$DM?$AA?5?$AA2?$AA2?$AA?$AA@??_C@_1CE@ONGPPNLF@?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA_?$AAd?$AA_?$AAs?$AAr?$AAc?$AAh?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1CI@NPEFNLDK@?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA_?$AAd?$AA_?$AAs?$AAr?$AAc?$AAh?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA4?$AA?$AA@??_C@_1CK@FDHCALM@?$AA?$CI?$AA?$CI?$AAC?$AAC?$AAm?$AAa?$AAx?$AA?$CJ?$AA?$DM?$AA?$DM?$AA?$CI?$AA1?$AA3?$AA?$CJ?$AA?$CJ?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CM@PBAFIMHH@?$AAi?$AAd?$AAx?$AA?5?$AA?$CL?$AA?5?$AAj?$AA?5?$AA?$DM?$AA?5?$AAl?$AAa?$AAg?$AA_?$AAc?$AAo?$AAu?$AAn?$AAt?$AAe?$AAr?$AA?$AA@??_C@_1DC@KBPDPJNG@?$AAb?$AAa?$AAs?$AAi?$AAs?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAs?$AAi?$AAg?$AAn?$AAa?$AAl?$AA_?$AA8?$AAk?$AAH?$AAz?$AA?$AA@??_C@_1DC@LLMPBJFI@?$AAb?$AAa?$AAs?$AAi?$AAs?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAs?$AAi?$AAg?$AAn?$AAa?$AAl?$AA_?$AA4?$AAk?$AAH?$AAz?$AA?$AA@??_C@_1DE@ODKBMEHK@?$AAt?$AAa?$AAr?$AAg?$AAe?$AAt?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAs?$AAi?$AAg?$AAn?$AAa?$AAl?$AA_?$AA8?$AAk?$AAH?$AAz?$AA?$AA@??_C@_1DE@PJJNCEPE@?$AAt?$AAa?$AAr?$AAg?$AAe?$AAt?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAs?$AAi?$AAg?$AAn?$AAa?$AAl?$AA_?$AA4?$AAk?$AAH?$AAz?$AA?$AA@??_C@_1EI@CGFOINEF@?$AAe?$AAn?$AAe?$AAr?$AAg?$AAi?$AAe?$AAs?$AA_?$AAs?$AAt?$AA3?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?$FL?$AA?5?$AAi?$AA?5?$AA?$FN?$AA?$FL?$AA?5?$AAj?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0@??_C@_1GO@BOFBILHA@?$AAs?$AAe?$AAa?$AAr?$AAc?$AAh?$AA_?$AAt?$AAh?$AAr?$AAe?$AAs?$AA2?$AA_?$AAQ?$AA1?$AA5?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAs?$AAe?$AAa?$AAr?$AAc?$AAh@??_C@_1GO@KOCNILKN@?$AAs?$AAe?$AAa?$AAr?$AAc?$AAh?$AA_?$AAt?$AAh?$AAr?$AAe?$AAs?$AA1?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAs?$AAe?$AAa?$AAr?$AAc?$AAh@??_C@_1HI@DLHADHCL@?$AAF?$AAs?$AA_?$AAk?$AAH?$AAz?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA8?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AAF?$AAs?$AA_?$AAk?$AAH?$AAz?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA1?$AA2?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AAF@??_C@_1HM@GJPHFHGO@?$AAb?$AAa?$AAs?$AAi?$AAs?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$CL?$AA?5?$AAs?$AAf?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA_?$AA8?$AAk?$AAH?$AAz?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAs?$AAi@??_C@_1HM@PEDCAAOJ@?$AAb?$AAa?$AAs?$AAi?$AAs?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$CL?$AA?5?$AAs?$AAf?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA_?$AA8?$AAk?$AAH?$AAz?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAs?$AAi@??_C@_1HO@JBNLFBHH@?$AAt?$AAa?$AAr?$AAg?$AAe?$AAt?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$CL?$AA?5?$AAs?$AAf?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA_?$AA8?$AAk?$AAH?$AAz?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAs@??_C@_1HO@MBOAGPA@?$AAt?$AAa?$AAr?$AAg?$AAe?$AAt?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$CL?$AA?5?$AAs?$AAf?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA_?$AA8?$AAk?$AAH?$AAz?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAs@??_C@_1KE@PNHGGPKF@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KO@DJANJIGL@?$AAs?$AAu?$AAm?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAs?$AAu?$AAm?$AA?$CJ?$AA?5?$AA?$DO?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?5?$AA?$DP?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?5@??_C@_1KO@JGOIALLO@?$AAl?$AAa?$AAg?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAl?$AAa?$AAg?$AA?$CJ?$AA?5?$AA?$DO?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?5?$AA?$DP?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?5@??_C@_1LG@MEPJGGBF@?$AAd?$AAi?$AAf?$AAf?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAd?$AAi?$AAf?$AAf?$AA?$CJ?$AA?5?$AA?$DO?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?5?$AA?$DP?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF@??_C@_1MG@KKMNIONB@?$AAt?$AAe?$AAm?$AAp?$AA3?$AA2?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAt?$AAe?$AAm?$AAp?$AA3?$AA2?$AA?$CJ?$AA?5?$AA?$DO?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?5?$AA?$DP?$AA?5?$AA0@??_C@_1OO@ONKNPBO@?$AAl?$AAa?$AAg?$AA_?$AAl?$AAo?$AAg?$AA2?$AA_?$AAQ?$AA7?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAl?$AAa?$AAg?$AA_?$AAl?$AAo?$AAg?$AA2?$AA_?$AAQ?$AA7?$AA?$CJ?$AA?5?$AA?$DO?$AA?5@??_C@_1PG@NNFJDOCI@?$AA?$CI?$AA?$CI?$AAs?$AAu?$AAm?$AA?$CJ?$AA?$DO?$AA?$DO?$AA?$CI?$AA1?$AA?$CJ?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AA?$CI?$AA?$CI?$AAs?$AAu?$AAm?$AA?$CJ?$AA?$DO?$AA?$DO?$AA?$CI?$AA1?$AA?$CJ?$AA?$CJ?$AA?$CJ?$AA?5@?__LINE__Var@?1??SKP_FIX_P_Ana_calc_corr_st3@@9@9?__LINE__Var@?1??SKP_FIX_P_Ana_calc_energy_st3@@9@9?__LINE__Var@?1??SKP_Silk_pitch_analysis_core@@9@9_SKP_FIX_P_Ana_calc_corr_st3_SKP_FIX_P_Ana_calc_energy_st3_SKP_FIX_P_Ana_find_scaling_SKP_Silk_decode_pitch_SKP_Silk_pitch_analysis_core__real@00000000??_C@_1BM@OAKBINLI@?$AAi?$AA?5?$AA?$DM?$AA?5?$AA?$CI?$AA2?$AA0?$AA?5?$AA?$CK?$AA?5?$AA2?$AA4?$AA?$CJ?$AA?$AA@??_C@_1CE@CDCNPFHF@?$AAi?$AAn?$AAv?$AA_?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CM@HIICPONF@?$AAp?$AAr?$AAe?$AAd?$AAi?$AAc?$AAt?$AAL?$AAP?$AAC?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA1?$AA0?$AA?$AA@??_C@_1CM@IMHBJNAM@?$AAs?$AAh?$AAa?$AAp?$AAi?$AAn?$AAg?$AAL?$AAP?$AAC?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA1?$AA2?$AA?$AA@??_C@_1DE@FABFECOD@?$AAp?$AAs?$AAD?$AAe?$AAl?$AAD?$AAe?$AAc?$AA?$FL?$AA?5?$AAi?$AA?5?$AA?$FN?$AA?4?$AAR?$AAD?$AA_?$AAQ?$AA1?$AA0?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DI@JFPPCDKE@?$AAN?$AAS?$AAQ?$AA?9?$AA?$DO?$AAp?$AAr?$AAe?$AAv?$AA_?$AAi?$AAn?$AAv?$AA_?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DI@LHFBDJGG@?$AAH?$AAa?$AAr?$AAm?$AAS?$AAh?$AAa?$AAp?$AAe?$AAG?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA4?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DK@GAKELIAC@?$AA?$CI?$AA?5?$AAp?$AAr?$AAe?$AAd?$AAi?$AAc?$AAt?$AAL?$AAP?$AAC?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$CG?$AA?5?$AA1?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DK@KGPFGICO@?$AA?$CI?$AA?5?$AAs?$AAh?$AAa?$AAp?$AAi?$AAn?$AAg?$AAL?$AAP?$AAC?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$CG?$AA?5?$AA1?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DM@CLHAPMEP@?$AA?$CI?$AA?5?$AA?$CI?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?$CJ?$AAa?$AA_?$AAQ?$AA1?$AA2?$AA?5?$AA?$CG?$AA?5?$AA3?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1EG@KKJLEIMK@?$AA?$CI?$AA?5?$AA?$CI?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?$CJ?$AAA?$AAR?$AA_?$AAs?$AAh?$AAp?$AA_?$AAQ?$AA1?$AA3?$AA?5?$AA?$CG?$AA?5?$AA3?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN@??_C@_1EI@OKPGODFG@?$AAp?$AAs?$AAS?$AAa?$AAm?$AAp?$AAl?$AAe?$AAS?$AAt?$AAa?$AAt?$AAe?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?$FL?$AA?5?$AA0?$AA?5?$AA?$FN?$AA?4?$AAR?$AAD?$AA_?$AAQ?$AA1?$AA0?$AA?5?$AA?$DO@??_C@_1JE@OAFNKFMA@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_DIV32_varQ@@9@9@ef08ea6f?__LINE__Var@?1??SKP_Silk_NSQ_del_dec@@9@9?__LINE__Var@?1??SKP_Silk_noise_shape_quantizer_del_dec@@9@9@ef08ea6f?__LINE__Var@?1??SKP_Silk_nsq_del_dec_scale_states@@9@9@ef08ea6f_SKP_Silk_NSQ_del_dec??_C@_1DA@LLBDPFOI@?$AAl?$AAa?$AAg?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AAs?$AAi?$AAg?$AAt?$AAy?$AAp?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA1?$AA?$AA@??_C@_1IE@DPKCPBGA@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_DIV32_varQ@@9@9@7adc298a?__LINE__Var@?1??SKP_Silk_NSQ@@9@9?__LINE__Var@?1??SKP_Silk_noise_shape_quantizer@@9@9@7adc298a?__LINE__Var@?1??SKP_Silk_nsq_scale_states@@9@9@7adc298a_SKP_Silk_NSQ??_C@_1BG@NHEGJHDL@?$AAQ?$AAn?$AAr?$AAg?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA3?$AA0?$AA?$AA@??_C@_1BI@ELPIDKKC@?$AAQ?$AAn?$AAr?$AAg?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA?9?$AA1?$AA2?$AA?$AA@??_C@_1CG@DDHEABGK@?$AAg?$AAa?$AAi?$AAn?$AA_?$AAm?$AAu?$AAl?$AAt?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DE@PJLPPCNB@?$AAB?$AAW?$AAE?$AAx?$AAp?$AA1?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA?$CI?$AA?5?$AA1?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA1?$AA6?$AA?5?$AA?$CJ?$AA?$AA@??_C@_1DO@HHEDJHOJ@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAG?$AAa?$AAi?$AAn?$AAs?$AA_?$AAQ?$AA1?$AA6?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1GI@NOLDCAAM@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAf?$AAs?$AA_?$AAk?$AAH?$AAz?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA1?$AA2?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AAp?$AAs?$AAE?$AAn@??_C@_1KO@DNFMFBAO@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_noise_shape_analysis_FIX@@9@9_SKP_Silk_noise_shape_analysis_FIX??_C@_1BO@GECJFEEH@?$AA?$CI?$AA?5?$AAD?$AA?5?$AA?$CG?$AA?5?$AA1?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CG@BMJAMABP@?$AAp?$AAN?$AAL?$AAS?$AAF?$AAW?$AA_?$AAQ?$AA6?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1CG@IOBCCDMG@?$AAp?$AAN?$AAL?$AAS?$AAF?$AAW?$AA_?$AAQ?$AA6?$AA?$FL?$AA?5?$AA0?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1CO@BDHLMLJD@?$AAp?$AAN?$AAL?$AAS?$AAF?$AAW?$AA_?$AAQ?$AA6?$AA?$FL?$AA?5?$AAD?$AA?5?$AA?9?$AA?5?$AA1?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1CO@IKJLKDPF@?$AAp?$AAN?$AAL?$AAS?$AAF?$AAW?$AA_?$AAQ?$AA6?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$CL?$AA?5?$AA1?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1KK@GMMBCADK@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1M@JPNCAKBH@?$AAD?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@?__LINE__Var@?1??SKP_Silk_NLSF_VQ_weights_laroia@@9@9_SKP_Silk_NLSF_VQ_weights_laroia??_C@_1BO@OHFJPFME@?$AAs?$AAu?$AAm?$AA_?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CA@IDMNNNNJ@?$AAL?$AAP?$AAC?$AA_?$AAo?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1?$AA6?$AA?$AA@??_C@_1CO@LAKNKFKO@?$AA?$CI?$AA?5?$AAL?$AAP?$AAC?$AA_?$AAo?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$CG?$AA?5?$AA1?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1KI@IGGEPIDH@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_NLSF_VQ_sum_error_FIX@@9@9_SKP_Silk_NLSF_VQ_sum_error_FIX??_C@_1CM@IKDIDOBM@?$AAp?$AAR?$AAD?$AA_?$AAv?$AAe?$AAc?$AA_?$AAQ?$AA2?$AA0?$AA?$FL?$AA?5?$AAi?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1GE@CAGJOFNO@?$AAr?$AAa?$AAt?$AAe?$AA_?$AAa?$AAc?$AAc?$AA_?$AAQ?$AA5?$AA?$FL?$AA?5?$AAn?$AA?5?$AA?$FN?$AA?5?$AA?$CL?$AA?5?$AAp?$AAs?$AAN?$AAL?$AAS?$AAF?$AA_?$AAC?$AAB?$AAS?$AA?9?$AA?$DO?$AAR@??_C@_1GO@NLELMEGP@?$AAr?$AAa?$AAt?$AAe?$AA_?$AAa?$AAc?$AAc?$AA_?$AAQ?$AA5?$AA?$FL?$AA?5?$AAn?$AA?5?$AA?$FN?$AA?5?$AA?$CL?$AA?5?$AAp?$AAs?$AAN?$AAL?$AAS?$AAF?$AA_?$AAC?$AAB?$AAS?$AA?9?$AA?$DO?$AAR@??_C@_1LE@FAEBNBAH@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_NLSF_VQ_rate_distortion_FIX@@9@9_SKP_Silk_NLSF_VQ_rate_distortion_FIX??_C@_1CM@MLOMEMMB@?$AAN?$AAD?$AAe?$AAl?$AAt?$AAa?$AAM?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA5?$AA?$FL?$AAL?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA1?$AA?$AA@??_C@_1JK@HECEIHEK@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_NLSF_stabilize@@9@9_SKP_Silk_NLSF_stabilize_SKP_Silk_NLSF_stabilize_multi??_C@_1BM@FGMDKMIO@?$AAw?$AAs?$AAs?$AAe?$AA_?$AAQ?$AA2?$AA0?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DE@CJNOBCLO@?$AAN?$AAL?$AAS?$AAF?$AA_?$AAM?$AAS?$AAV?$AAQ?$AA_?$AAS?$AAu?$AAr?$AAv?$AAi?$AAv?$AAo?$AAr?$AAs?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1?$AA6?$AA?$AA@??_C@_1KG@KJLKCDPF@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_NLSF_MSVQ_encode_FIX@@9@9_SKP_Silk_NLSF_MSVQ_encode_FIX??_C@_1JM@CGPKDJPK@?$AA0?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAN?$AAL?$AAS?$AAF?$AAI?$AAn?$AAd?$AAi?$AAc?$AAe?$AAs?$AA?$FL?$AA?5?$AA0?$AA?5?$AA?$FN?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAN?$AAL?$AAS?$AAF?$AAI?$AAn?$AAd@??_C@_1JM@MPEHCEOL@?$AA0?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAN?$AAL?$AAS?$AAF?$AAI?$AAn?$AAd?$AAi?$AAc?$AAe?$AAs?$AA?$FL?$AA?5?$AAs?$AA?5?$AA?$FN?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAN?$AAL?$AAS?$AAF?$AAI?$AAn?$AAd@??_C@_1JO@BEFLJAPD@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_NLSF_MSVQ_decode@@9@9_SKP_Silk_NLSF_MSVQ_decode_SKP_Silk_NLSF2A_stable??_C@_13COJANIEC@?$AA0?$AA?$AA@??_C@_1BG@LMNLJLAO@?$AAf?$AA_?$AAi?$AAn?$AAt?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BI@PHDAPKO@?$AAf?$AA_?$AAi?$AAn?$AAt?$AA?5?$AA?$DM?$AA?5?$AA1?$AA2?$AA8?$AA?$AA@??_C@_1BK@JFCFOHBA@?$AAN?$AAL?$AAS?$AAF?$AA?$FL?$AAk?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CC@NKKAAAON@?$AAN?$AAL?$AAS?$AAF?$AA?$FL?$AAk?$AA?$FN?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA3?$AA2?$AA7?$AA6?$AA7?$AA?$AA@??_C@_1IK@FEJLCIGL@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_NLSF2A@@9@9_SKP_Silk_NLSF2A??_C@_1DA@JCFNIGPD@?$AA2?$AA?5?$AA?$CK?$AA?5?$AAO?$AAr?$AAd?$AAe?$AAr?$AA_?$AAh?$AAa?$AAl?$AAf?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?$AA@??_C@_1IC@EPNMGKGN@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_LPC_analysis_filter@@9@9_SKP_Silk_LPC_analysis_filter_SKP_Silk_MA_SKP_Silk_MA_Prediction_SKP_Silk_MA_Prediction_Q13_SKP_Silk_LTP_scale_ctrl_FIX_SKP_Silk_LTP_analysis_filter_FIX_SKP_Silk_LSFCosTab_FIX_Q12_SKP_Silk_LPC_synthesis_order16??_C@_1CM@COEPNLF@?$AA2?$AA?$CK?$AAO?$AAr?$AAd?$AAe?$AAr?$AA_?$AAh?$AAa?$AAl?$AAf?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?$AA@??_C@_1KG@NEKGGACB@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_LPC_synthesis_filter@@9@9_SKP_Silk_LPC_synthesis_filter??_C@_1BG@JNKFEODB@?$AAr?$AAs?$AAh?$AAi?$AAf?$AAt?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1BI@JNMPMLNH@?$AAr?$AAs?$AAh?$AAi?$AAf?$AAt?$AA?5?$AA?$DM?$AA?5?$AA3?$AA1?$AA?$AA@??_C@_1JI@ILIMLOMI@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_LPC_fit@@9@9_SKP_Silk_LPC_fit_SKP_Silk_LPC_stabilize??_C@_1CE@PFOHEFL@?$AA?$CK?$AAi?$AAn?$AAv?$AAG?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA3?$AA0?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CM@OIKGGLDE@?$AA?$CK?$AAi?$AAn?$AAv?$AAG?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA3?$AA0?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1?$AA?$DM?$AA?$DM?$AA3?$AA0?$AA?$AA@??_C@_1DG@DLMGGFLH@?$AAr?$AAc?$AA_?$AAm?$AAu?$AAl?$AAt?$AA1?$AA_?$AAQ?$AA3?$AA0?$AA?5?$AA?$DM?$AA?5?$AA?$CI?$AA?5?$AA1?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA3?$AA0?$AA?5?$AA?$CJ?$AA?$AA@??_C@_1DG@HELIEBNE@?$AAr?$AAc?$AA_?$AAm?$AAu?$AAl?$AAt?$AA1?$AA_?$AAQ?$AA3?$AA0?$AA?5?$AA?$DO?$AA?5?$AA?$CI?$AA?5?$AA1?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA1?$AA5?$AA?5?$AA?$CJ?$AA?$AA@??_C@_1DI@LBPPEJDN@?$AA?$CK?$AAi?$AAn?$AAv?$AAG?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA3?$AA0?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA?$CI?$AA?5?$AA1?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA3?$AA0?$AA?5?$AA?$CJ?$AA?$AA@??_C@_1KA@HCIIPBDN@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_INVERSE32_varQ@@9@9@895cc594?__LINE__Var@?1??SKP_Silk_LPC_inverse_pred_gain@@9@9?__LINE__Var@?1??SKP_Silk_LPC_inverse_pred_gain_Q13@@9@9_SKP_Silk_LPC_inverse_pred_gain_SKP_Silk_LPC_inverse_pred_gain_Q13??_C@_1BA@MGAKPCGK@?$AAi?$AAn?$AAd?$AA?5?$AA?$DM?$AA?5?$AA5?$AA?$AA@??_C@_1BC@IMNKEJFJ@?$AAi?$AAn?$AAd?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BDG@NEENFDJJ@?$AA?$CI?$AA?5?$AA?$CI?$AA?5?$AA?$CI?$AA?5?$AAp?$AAs?$AAL?$AAP?$AA?9?$AA?$DO?$AAt?$AAr?$AAa?$AAn?$AAs?$AAi?$AAt?$AAi?$AAo?$AAn?$AA_?$AAf?$AAr?$AAa?$AAm?$AAe?$AA_?$AAn?$AAo?$AA?5@??_C@_1BFI@DNFCEACB@?$AA?$CI?$AA?5?$AA?$CI?$AA?5?$AA1?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA1?$AA6?$AA?5?$AA?$CJ?$AA?5?$AA?9?$AA?5?$AAf?$AAa?$AAc?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AA?$CI@??_C@_1DO@DCADNOIE@?$AAp?$AAs?$AAL?$AAP?$AA?9?$AA?$DO?$AAt?$AAr?$AAa?$AAn?$AAs?$AAi?$AAt?$AAi?$AAo?$AAn?$AA_?$AAf?$AAr?$AAa?$AAm?$AAe?$AA_?$AAn?$AAo?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1KC@HKPFDAB@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_LP_interpolate_filter_taps@@9@9@0c317abd?__LINE__Var@?1??SKP_Silk_LP_variable_cutoff@@9@9_SKP_Silk_LP_variable_cutoff_SKP_Silk_lowpass_short_SKP_Silk_lowpass_int_SKP_Silk_log2lin_SKP_Silk_lin2log_SKP_Silk_LBRR_reset_SKP_Silk_k2a_Q16_SKP_Silk_k2a??_C@_1BM@DGLBDNFJ@?$AAi?$AAf?$AAa?$AAc?$AAt?$AA_?$AAQ?$AA2?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CO@OKDJIDCP@?$AAi?$AAf?$AAa?$AAc?$AAt?$AA_?$AAQ?$AA2?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA?$CI?$AA?5?$AA1?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA2?$AA?5?$AA?$CJ?$AA?$AA@??_C@_1JE@EOJNJGLH@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_interpolate@@9@9_SKP_Silk_interpolate_SKP_Silk_inner_prod16_aligned_64_SKP_Silk_inner_prod16_aligned_sat_SKP_Silk_inner_prod_aligned_SKP_Silk_inner_prod_aligned_64_SKP_Silk_init_encoder_FIX??_C@_1BO@MHGOFBGJ@?$AAF?$AAc?$AA_?$AAQ?$AA1?$AA9?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA3?$AA7?$AA0?$AA4?$AA?$AA@??_C@_1CA@CGNJFIHE@?$AAF?$AAc?$AA_?$AAQ?$AA1?$AA9?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA7?$AA7?$AA8?$AA7?$AA?$AA@??_C@_1CG@NBNBOCII@?$AAr?$AA_?$AAQ?$AA2?$AA8?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA6?$AA6?$AA6?$AA9?$AA0?$AA8?$AA7?$AA2?$AA?$AA@??_C@_1CG@PBCECBCA@?$AAr?$AA_?$AAQ?$AA2?$AA8?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA2?$AA5?$AA5?$AA3?$AA4?$AA7?$AA7?$AA7?$AA9?$AA?$AA@??_C@_1GE@HEPMKMO@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAp?$AAi?$AAt?$AAc?$AAh?$AA_?$AAf?$AAr?$AAe?$AAq?$AA_?$AAl?$AAo?$AAw?$AA_?$AAH?$AAz?$AA?5?$AA?$DM?$AA?$DN?$AA?5@??_C@_1KK@FABLFNIP@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_HP_variable_cutoff_FIX@@9@9_SKP_Silk_HP_variable_cutoff_FIX_SKP_Silk_gains_dequant_SKP_Silk_gains_quant??_C@_1BBO@FPOODJNB@?$AAi?$AAn?$AAv?$AAG?$AAa?$AAi?$AAn?$AAs?$AA_?$AAQ?$AA1?$AA6?$AA?$FL?$AA?5?$AAi?$AA?5?$AA?$FN?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAi?$AAn?$AAv?$AAG?$AAa?$AAi?$AAn?$AAs?$AA_@??_C@_1DM@BEOFCHCG@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAG?$AAa?$AAi?$AAn?$AAs?$AA_?$AAQ?$AA1?$AA6?$AA?$FL?$AA?5?$AAi?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1KE@PBEDJMIH@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1LM@OHMGEGOM@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAf?$AAr?$AAa?$AAm?$AAe?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?5?$AA?9?$AA?5?$AAp?$AAs?$AAE?$AAn?$AAc@?__LINE__Var@?1??SKP_DIV32_varQ@@9@9@7b56cc59?__LINE__Var@?1??SKP_Silk_find_pred_coefs_FIX@@9@9_SKP_Silk_find_pred_coefs_FIX??_C@_1FE@GMHHDEFD@?$AAb?$AAu?$AAf?$AA_?$AAl?$AAe?$AAn?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAp?$AAs?$AAP?$AAr?$AAe?$AAd?$AAS?$AAt?$AA?9?$AA?$DO?$AAp?$AAi?$AAt?$AAc?$AAh?$AA_?$AAL?$AAP?$AAC?$AA_?$AAw@??_C@_1KE@NBKBKBGN@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_find_pitch_lags_FIX@@9@9_SKP_Silk_find_pitch_lags_FIX??_C@_1BE@MDHKAJHL@?$AAw?$AA?$FL?$AAk?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BK@DJLGCKLF@?$AAr?$AAr?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BPI@GHMDCLND@?$AA?$CK?$AAL?$AAT?$AAP?$AAr?$AAe?$AAd?$AAC?$AAo?$AAd?$AAG?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA7?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?5?$AAi?$AAn?$AAt?$AA?5?$AA?$CJ?$AA?$CI?$AA?$CI?$AA?$CI?$AA?$CI@??_C@_1CM@MGJMHKNN@?$AA2?$AA6?$AA?5?$AA?9?$AA?5?$AA1?$AA8?$AA?5?$AA?$CL?$AA?5?$AAl?$AAs?$AAh?$AAi?$AAf?$AAt?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DK@POBEBELK@?$AAm?$AAa?$AAx?$AA_?$AAa?$AAb?$AAs?$AA_?$AAd?$AA_?$AAQ?$AA1?$AA4?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA?$CI?$AA?5?$AA5?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA1?$AA5?$AA?5?$AA?$CJ?$AA?$AA@??_C@_1FO@CHLEGFAA@?$AA?$CI?$AA?$CI?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?$CJ?$AAW?$AAg?$AAh?$AAt?$AA_?$AAQ?$AA1?$AA5?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA1?$AA6?$AA?5@??_C@_1JG@BIDLHCFP@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_DIV32_varQ@@9@9@00c28631?__LINE__Var@?1??SKP_Silk_find_LTP_FIX@@9@9_SKP_Silk_find_LTP_FIX_SKP_Silk_fit_LTP??_C@_1BI@KIBFEKBP@?$AAs?$AAh?$AAi?$AAf?$AAt?$AA?5?$AA?$DO?$AA?5?$AA?9?$AA3?$AA2?$AA?$AA@??_C@_1JG@NMHMCPDF@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_find_LPC_FIX@@9@9_SKP_Silk_find_LPC_FIX_SKP_Silk_encode_pulses??_C@_1KC@DJLAKPOE@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AA?9?$AA?$DO?$AAu?$AAs?$AAe?$AAI?$AAn?$AAt?$AAe?$AAr?$AAp?$AAo?$AAl?$AAa?$AAt?$AAe?$AAd?$AAN?$AAL?$AAS?$AAF?$AAs?$AA?5?$AA?$DN?$AA?$DN?$AA?5@??_C@_1KG@LPICFBJE@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_encode_parameters_v4@@9@9_SKP_Silk_encode_parameters_v4??_C@_1KA@BLEBOLKK@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_encode_parameters@@9@9_SKP_Silk_encode_parameters??_C@_1DBG@CLGMOCDN@?$AA?$CI?$AA?5?$AA8?$AA?5?$AA?$CK?$AA?5?$AA1?$AA0?$AA0?$AA0?$AA?5?$AA?$CK?$AA?5?$AA?$CI?$AA?5?$AA?$CI?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?$CJ?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs@??_C@_1DO@JIICFILC@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAT?$AAa?$AAr?$AAg?$AAe?$AAt?$AAR?$AAa?$AAt?$AAe?$AA_?$AAb?$AAp?$AAs?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1JO@GLAGELIL@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_LBRR_encode_FIX@@9@9?__LINE__Var@?1??SKP_Silk_encode_frame_FIX@@9@9_SKP_Silk_LBRR_encode_FIX_SKP_Silk_encode_frame_FIX??_C@_1CA@KDOPHEIP@?$AA?$CK?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AAO?$AAu?$AAt?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DE@PCNFDAO@?$AAe?$AAn?$AAc?$AAC?$AAo?$AAn?$AAt?$AAr?$AAo?$AAl?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAv?$AAo?$AAi?$AAd?$AA?5?$AA?$CK?$AA?$CJ?$AA0?$AA?$CJ?$AA?$AA@??_C@_1IM@FNDJNDBN@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_SDK_Encode@@9@9?__LINE__Var@?1??SKP_Silk_SDK_InitEncoder@@9@9_SKP_Silk_SDK_Encode_SKP_Silk_SDK_Get_Encoder_Size_SKP_Silk_SDK_InitEncoder_SKP_Silk_SDK_QueryEncoder_SKP_Silk_detect_SWB_input??_C@_1HI@ONFEKPCP@?$AAp?$AAs?$AAD?$AAe?$AAc?$AA?9?$AA?$DO?$AAf?$AAr?$AAa?$AAm?$AAe?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAp?$AAs?$AAD?$AAe?$AAc@??_C@_1JK@DPINIPLC@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_decoder_set_fs@@9@9_SKP_Silk_decoder_set_fs_SKP_Silk_decode_pulses_SKP_Silk_decode_parameters_v4_SKP_Silk_decode_parameters_SKP_Silk_decode_indices_v4??_C@_1DA@PFPDKGMN@?$AAL?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAL?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA?$CI?$AA2?$AA0?$AA?5?$AA?$CK?$AA?5?$AA2?$AA4?$AA?$CJ?$AA?$AA@??_C@_1JG@NFKKGHCO@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1LO@DMEPPJEN@?$AA?$CI?$AA?5?$AA?$CI?$AA?5?$AAp?$AAs?$AAD?$AAe?$AAc?$AA?9?$AA?$DO?$AAf?$AAs?$AA_?$AAk?$AAH?$AAz?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA1?$AA2?$AA?5?$AA?$CJ?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AA?5?$AAL@?__LINE__Var@?1??SKP_Silk_decode_frame@@9@9_SKP_Silk_decode_frame??_C@_1CO@FMFHOPIM@?$AAp?$AAs?$AAD?$AAe?$AAc?$AA?9?$AA?$DO?$AAL?$AAP?$AAC?$AA_?$AAo?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA1?$AA0?$AA?$AA@??_C@_1DM@BCPANHBF@?$AAp?$AAs?$AAD?$AAe?$AAc?$AA?9?$AA?$DO?$AAp?$AAr?$AAe?$AAv?$AA_?$AAi?$AAn?$AAv?$AA_?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1JE@NHFBEJPL@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_DIV32_varQ@@9@9@fcbb61fb?__LINE__Var@?1??SKP_Silk_decode_core@@9@9_SKP_Silk_decode_core_SKP_Silk_SDK_Decode_SKP_Silk_SDK_Get_Decoder_Size_SKP_Silk_SDK_InitDecoder_SKP_Silk_SDK_get_TOC_SKP_Silk_SDK_get_version_SKP_Silk_SDK_search_for_LBRR_SKP_Silk_init_decoder??_C@_1BK@GPMMKKOB@?$AAr?$AAs?$AAh?$AAi?$AAf?$AAt?$AAs?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1JK@DHFFBKFD@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_corrVector_FIX@@9@9_SKP_Silk_corrMatrix_FIX_SKP_Silk_corrVector_FIX??_C@_1EE@OAFKHDBG@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAs?$AAh?$AAa?$AAp?$AAi?$AAn?$AAg?$AAL?$AAP?$AAC?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1@??_C@_1FA@EDFEJFMG@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAn?$AAS?$AAt?$AAa?$AAt?$AAe?$AAs?$AAD?$AAe?$AAl?$AAa?$AAy?$AAe?$AAd?$AAD?$AAe?$AAc?$AAi?$AAs?$AAi@??_C@_1FE@LHKJNAOP@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAp?$AAi?$AAt?$AAc?$AAh?$AAE?$AAs?$AAt?$AAi?$AAm?$AAa?$AAt?$AAi?$AAo?$AAn?$AAL?$AAP?$AAC?$AAO?$AAr@??_C@_1HK@MBKNNGNF@?$AA?$CI?$AA?5?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAs?$AAu?$AAb?$AAf?$AAr?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?5?$AA?$CK?$AA?5?$AA4?$AA?5?$AA?$CJ@??_C@_1KA@KGJKKDC@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_control_encoder_FIX@@9@9_SKP_Silk_LBRR_ctrl_FIX_SKP_Silk_control_encoder_FIX_SKP_Silk_decode_signs_SKP_Silk_encode_signs??_C@_1BC@DECOFODE@?$AAi?$AAd?$AAx?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BG@DNBMMII@?$AAi?$AAd?$AAx?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA5?$AA5?$AA?$AA@??_C@_1IE@MJIJMCHK@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_CNG_exc@@9@9@3894bdbb_SKP_Silk_CNG_SKP_Silk_CNG_Reset_SKP_Silk_bwexpander_32_SKP_Silk_bwexpander??_C@_1BM@HBLAOALE@?$AAn?$AAb?$AA_?$AAs?$AAu?$AAb?$AAf?$AAr?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA4?$AA?$AA@??_C@_1DO@JKIEFGO@?$AAs?$AAu?$AAb?$AAf?$AAr?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?5?$AA?$CK?$AA?5?$AAn?$AAb?$AA_?$AAs?$AAu?$AAb?$AAf?$AAr?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA5?$AA4?$AA4?$AA?$AA@??_C@_1JI@BLINLLKL@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1O@CPCINNBO@?$AAC?$AA0?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@?__LINE__Var@?1??SKP_DIV32_varQ@@9@9@72c1599a?__LINE__Var@?1??SKP_Silk_burg_modified@@9@9_SKP_Silk_burg_modified_SKP_Silk_biquad_alt_SKP_Silk_biquad_SKP_Silk_autocorr_SKP_Silk_int16_array_maxabs??_C@_1CA@KCBGFBFJ@?$AAc?$AA_?$AAQ?$AA2?$AA0?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA?9?$AA3?$AA2?$AA7?$AA6?$AA8?$AA?$AA@??_C@_1CI@IJJANPNF@?$AA?$CI?$AA?5?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?5?$AA?$CG?$AA?5?$AA3?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DG@BKABJEIB@?$AA?$CI?$AA?5?$AA?$CI?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?$CJ?$AAp?$AAx?$AA?5?$AA?$CG?$AA?5?$AA3?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1KA@BOBMNGBJ@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_apply_sine_window@@9@9_SKP_Silk_apply_sine_window_SKP_Silk_ana_filt_bank_1_SKP_Silk_allpass_int??_C@_1CK@FOMNKCKL@?$AAN?$AAL?$AAS?$AAF?$AA?$FL?$AA?5?$AAr?$AAo?$AAo?$AAt?$AA_?$AAi?$AAx?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DC@CDNNNAOH@?$AAN?$AAL?$AAS?$AAF?$AA?$FL?$AA?5?$AAr?$AAo?$AAo?$AAt?$AA_?$AAi?$AAx?$AA?5?$AA?$FN?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA3?$AA2?$AA7?$AA6?$AA7?$AA?$AA@??_C@_1IK@KPNHDBN@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_A2NLSF@@9@9_SKP_Silk_A2NLSF / 1273638397 0 49375 ` rŒ—6Й№ z ˜2ЂO oЗЬд H-шIи]іsЮ *ьр3Ј]€VЌhРхІ9šW„e,ƒтЁЪАbЭиъЌі њCТZШrшŠ6ЂBфњоX’˜Р'(;мќ6‘ n nc Њ‰ &Ќ ŽЭ Hє –$ ОF V` Ь‰ ђЗ Zл ј є ќ' RG i rЊ ро ѓ @ ` r: ќR $i  К› LК ж ђd%ЄgК ˆ:/,Zц‡LДVџ@?^aи†тЇ ЬТЬ@i.ИРї&X?Ѕ‚ТЖ№HN`tvŒЖЎ\УVсВјю H;D0Q0gDD0SDgB;3030BT;S0d;L8j14O50SO05oY0+0,;10C43+4OOo0+0rA161S7C04.a45-L<2`Xr+0081+0Y03oCC,1C111SaQ+1+D+3Xj++e101eReS6O3006,0[+e0000<.2g;rYLa1S#`T!jB-d[7999XWo,+CeVD RQ08VA5O403060Q`40j00Sj2Q1a00CrgOX<BCCADD;98654721.YYojeda`[XWVTSRQL321120-+,#! 000r//ggOeXI<BCCBA@D?> = /<<<;:  986547721.....bYbYbYYbbbqpomlkjih//edda`_^]0\f[ ZXWVUfTSRQS PPcNMMMMnLKJHGFE30-+,*)((((((((('&%$#"! 0??_C@_13COJANIEC@?$AA0?$AA?$AA@??_C@_1BA@CLOLADMK@?$AAn?$AAl?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BA@DACHAPFJ@?$AAc?$AAQ?$AA?5?$AA?$DM?$AA?5?$AA1?$AA6?$AA?$AA@??_C@_1BA@ELFBBFCB@?$AAD?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1?$AA6?$AA?$AA@??_C@_1BA@HFNBICOB@?$AAn?$AAr?$AAg?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1BA@JGCKBLPP@?$AAM?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1?$AA6?$AA?$AA@??_C@_1BA@MGAKPCGK@?$AAi?$AAn?$AAd?$AA?5?$AA?$DM?$AA?5?$AA5?$AA?$AA@??_C@_1BBG@LHPFCJDC@?$AA?$CI?$AA?$CI?$AA?$CI?$AAi?$AAn?$AAt?$AA?$CJ?$AA?9?$AAi?$AA?$CJ?$AA?$DM?$AA?$DM?$AA?$CI?$AA4?$AA?$CJ?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AA?$CI?$AA?$CI?$AA?$CI?$AAi?$AAn?$AAt?$AA?$CJ?$AA?9?$AAi?$AA?$CJ@??_C@_1BBO@FPOODJNB@?$AAi?$AAn?$AAv?$AAG?$AAa?$AAi?$AAn?$AAs?$AA_?$AAQ?$AA1?$AA6?$AA?$FL?$AA?5?$AAi?$AA?5?$AA?$FN?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAi?$AAn?$AAv?$AAG?$AAa?$AAi?$AAn?$AAs?$AA_@??_C@_1BBO@IAGIEJDJ@?$AAs?$AAe?$AAa?$AAr?$AAc?$AAh?$AA_?$AAt?$AAh?$AAr?$AAe?$AAs?$AA2?$AA_?$AAQ?$AA1?$AA5?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAs?$AAe?$AAa?$AAr?$AAc?$AAh?$AA_?$AAt?$AAh@??_C@_1BC@DECOFODE@?$AAi?$AAd?$AAx?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BC@IMNKEJFJ@?$AAi?$AAn?$AAd?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BC@LJHCOKEE@?$AAb?$AA3?$AA2?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BC@MIGJDBBJ@?$AAQ?$AAr?$AAe?$AAs?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1BDG@NEENFDJJ@?$AA?$CI?$AA?5?$AA?$CI?$AA?5?$AA?$CI?$AA?5?$AAp?$AAs?$AAL?$AAP?$AA?9?$AA?$DO?$AAt?$AAr?$AAa?$AAn?$AAs?$AAi?$AAt?$AAi?$AAo?$AAn?$AA_?$AAf?$AAr?$AAa?$AAm?$AAe?$AA_?$AAn?$AAo?$AA?5@??_C@_1BDO@PNIOJCND@?$AAd?$AAe?$AAl?$AAt?$AAa?$AA_?$AAl?$AAa?$AAg?$AA_?$AAl?$AAo?$AAg?$AA2?$AA_?$AAs?$AAq?$AAr?$AA_?$AAQ?$AA7?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAd?$AAe?$AAl?$AAt?$AAa@??_C@_1BE@MDHKAJHL@?$AAw?$AA?$FL?$AAk?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BE@NOJNLPIL@?$AAQ?$AAr?$AAe?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BFI@DNFCEACB@?$AA?$CI?$AA?5?$AA?$CI?$AA?5?$AA1?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA1?$AA6?$AA?5?$AA?$CJ?$AA?5?$AA?9?$AA?5?$AAf?$AAa?$AAc?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AA?$CI@??_C@_1BG@DNBMMII@?$AAi?$AAd?$AAx?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA5?$AA5?$AA?$AA@??_C@_1BG@JNKFEODB@?$AAr?$AAs?$AAh?$AAi?$AAf?$AAt?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1BG@LMNLJLAO@?$AAf?$AA_?$AAi?$AAn?$AAt?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BG@NHEGJHDL@?$AAQ?$AAn?$AAr?$AAg?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA3?$AA0?$AA?$AA@??_C@_1BI@CKIDDDJK@?$AAe?$AAn?$AAe?$AAr?$AAg?$AAy?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BI@ELPIDKKC@?$AAQ?$AAn?$AAr?$AAg?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA?9?$AA1?$AA2?$AA?$AA@??_C@_1BI@GHMOEKNM@?$AAF?$AAs?$AA_?$AAk?$AAH?$AAz?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA8?$AA?$AA@??_C@_1BI@JNMPMLNH@?$AAr?$AAs?$AAh?$AAi?$AAf?$AAt?$AA?5?$AA?$DM?$AA?5?$AA3?$AA1?$AA?$AA@??_C@_1BI@KIBFEKBP@?$AAs?$AAh?$AAi?$AAf?$AAt?$AA?5?$AA?$DO?$AA?5?$AA?9?$AA3?$AA2?$AA?$AA@??_C@_1BI@MDCHJGIP@?$AAs?$AAt?$AAa?$AAt?$AAu?$AAs?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BI@PHDAPKO@?$AAf?$AA_?$AAi?$AAn?$AAt?$AA?5?$AA?$DM?$AA?5?$AA1?$AA2?$AA8?$AA?$AA@??_C@_1BK@DJLGCKLF@?$AAr?$AAr?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BK@DJOBKCKP@?$AAi?$AAd?$AAx?$AA?5?$AA?$CL?$AA?5?$AAj?$AA?5?$AA?$DM?$AA?5?$AA2?$AA2?$AA?$AA@??_C@_1BK@GPMMKKOB@?$AAr?$AAs?$AAh?$AAi?$AAf?$AAt?$AAs?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BK@JFCFOHBA@?$AAN?$AAL?$AAS?$AAF?$AA?$FL?$AAk?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BK@OLBABGIA@?$AAi?$AAn?$AAv?$AA_?$AAn?$AAr?$AAg?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BM@DGLBDNFJ@?$AAi?$AAf?$AAa?$AAc?$AAt?$AA_?$AAQ?$AA2?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BM@FGMDKMIO@?$AAw?$AAs?$AAs?$AAe?$AA_?$AAQ?$AA2?$AA0?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BM@HBLAOALE@?$AAn?$AAb?$AA_?$AAs?$AAu?$AAb?$AAf?$AAr?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA4?$AA?$AA@??_C@_1BM@HNONFFPH@?$AAs?$AAu?$AAm?$AA1?$AA_?$AAQ?$AA1?$AA4?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BM@OAKBINLI@?$AAi?$AA?5?$AA?$DM?$AA?5?$AA?$CI?$AA2?$AA0?$AA?5?$AA?$CK?$AA?5?$AA2?$AA4?$AA?$CJ?$AA?$AA@??_C@_1BO@DJHMAOHP@?$AAi?$AAn?$AAL?$AAe?$AAn?$AA?5?$AA?$CF?$AA?5?$AA4?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BO@FMLBKELP@?$AAi?$AAn?$AAL?$AAe?$AAn?$AA?5?$AA?$CF?$AA?5?$AA3?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BO@GECJFEEH@?$AA?$CI?$AA?5?$AAD?$AA?5?$AA?$CG?$AA?5?$AA1?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BO@MBLOEFMJ@?$AAi?$AAn?$AAL?$AAe?$AAn?$AA?5?$AA?$CF?$AA?5?$AA2?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BO@MHGOFBGJ@?$AAF?$AAc?$AA_?$AAQ?$AA1?$AA9?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA3?$AA7?$AA0?$AA4?$AA?$AA@??_C@_1BO@OHFJPFME@?$AAs?$AAu?$AAm?$AA_?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BO@OIPMDBBP@?$AA?$CK?$AAl?$AAa?$AAg?$AAI?$AAn?$AAd?$AAe?$AAx?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BPI@GHMDCLND@?$AA?$CK?$AAL?$AAT?$AAP?$AAr?$AAe?$AAd?$AAC?$AAo?$AAd?$AAG?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA7?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?5?$AAi?$AAn?$AAt?$AA?5?$AA?$CJ?$AA?$CI?$AA?$CI?$AA?$CI?$AA?$CI@??_C@_1CA@CGNJFIHE@?$AAF?$AAc?$AA_?$AAQ?$AA1?$AA9?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA7?$AA7?$AA8?$AA7?$AA?$AA@??_C@_1CA@ELICKIGK@?$AAc?$AAo?$AAm?$AAp?$AAl?$AAe?$AAx?$AAi?$AAt?$AAy?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CA@IDMNNNNJ@?$AAL?$AAP?$AAC?$AA_?$AAo?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1?$AA6?$AA?$AA@??_C@_1CA@KCBGFBFJ@?$AAc?$AA_?$AAQ?$AA2?$AA0?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA?9?$AA3?$AA2?$AA7?$AA6?$AA8?$AA?$AA@??_C@_1CA@KDOPHEIP@?$AA?$CK?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AAO?$AAu?$AAt?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CA@KFLJAHPM@?$AAs?$AAu?$AAm?$AAS?$AAq?$AAu?$AAa?$AAr?$AAe?$AAd?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CA@OFHOLANM@?$AAc?$AAo?$AAm?$AAp?$AAl?$AAe?$AAx?$AAi?$AAt?$AAy?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA?$AA@??_C@_1CC@CLPJMHLO@?$AAN?$AAL?$AAS?$AAF?$AA_?$AAm?$AAu?$AA_?$AAQ?$AA1?$AA5?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CC@JEBOMLLA@?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA4?$AA?5?$AA?$DM?$AA?5?$AA3?$AA2?$AA7?$AA6?$AA8?$AA?$AA@??_C@_1CC@JNDFGPIE@?$AAl?$AAa?$AAg?$AA_?$AAc?$AAo?$AAu?$AAn?$AAt?$AAe?$AAr?$AA?5?$AA?$DM?$AA?5?$AA2?$AA2?$AA?$AA@??_C@_1CC@NDNHCOAK@?$AAg?$AAa?$AAi?$AAn?$AA_?$AAs?$AAq?$AAu?$AAa?$AAr?$AAe?$AAd?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1CC@NKKAAAON@?$AAN?$AAL?$AAS?$AAF?$AA?$FL?$AAk?$AA?$FN?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA3?$AA2?$AA7?$AA6?$AA7?$AA?$AA@??_C@_1CE@CDCNPFHF@?$AAi?$AAn?$AAv?$AA_?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CE@ONGPPNLF@?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA_?$AAd?$AA_?$AAs?$AAr?$AAc?$AAh?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1CE@PFOHEFL@?$AA?$CK?$AAi?$AAn?$AAv?$AAG?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA3?$AA0?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CG@BMJAMABP@?$AAp?$AAN?$AAL?$AAS?$AAF?$AAW?$AA_?$AAQ?$AA6?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1CG@BNFHGOHD@?$AAf?$AAr?$AAa?$AAm?$AAe?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA5?$AA1?$AA2?$AA?$AA@??_C@_1CG@DDHEABGK@?$AAg?$AAa?$AAi?$AAn?$AA_?$AAm?$AAu?$AAl?$AAt?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CG@HPNFAFGH@?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA4?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA?9?$AA3?$AA2?$AA7?$AA6?$AA8?$AA?$AA@??_C@_1CG@IACBFFKN@?$AAN?$AAL?$AAS?$AAF?$AA_?$AAm?$AAu?$AA_?$AAQ?$AA1?$AA5?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1?$AA6?$AA4?$AA?$AA@??_C@_1CG@IOBCCDMG@?$AAp?$AAN?$AAL?$AAS?$AAF?$AAW?$AA_?$AAQ?$AA6?$AA?$FL?$AA?5?$AA0?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1CG@NBNBOCII@?$AAr?$AA_?$AAQ?$AA2?$AA8?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA6?$AA6?$AA6?$AA9?$AA0?$AA8?$AA7?$AA2?$AA?$AA@??_C@_1CG@PBCECBCA@?$AAr?$AA_?$AAQ?$AA2?$AA8?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA2?$AA5?$AA5?$AA3?$AA4?$AA7?$AA7?$AA7?$AA9?$AA?$AA@??_C@_1CI@IJJANPNF@?$AA?$CI?$AA?5?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?5?$AA?$CG?$AA?5?$AA3?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CI@NPEFNLDK@?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA_?$AAd?$AA_?$AAs?$AAr?$AAc?$AAh?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA4?$AA?$AA@??_C@_1CI@PPBFACJI@?$AAp?$AAN?$AAL?$AAS?$AAF?$AAW?$AA_?$AAQ?$AA6?$AA?$FL?$AA?5?$AAi?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA1?$AA?$AA@??_C@_1CK@FDHCALM@?$AA?$CI?$AA?$CI?$AAC?$AAC?$AAm?$AAa?$AAx?$AA?$CJ?$AA?$DM?$AA?$DM?$AA?$CI?$AA1?$AA3?$AA?$CJ?$AA?$CJ?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CK@FOMNKCKL@?$AAN?$AAL?$AAS?$AAF?$AA?$FL?$AA?5?$AAr?$AAo?$AAo?$AAt?$AA_?$AAi?$AAx?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CM@COEPNLF@?$AA2?$AA?$CK?$AAO?$AAr?$AAd?$AAe?$AAr?$AA_?$AAh?$AAa?$AAl?$AAf?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?$AA@??_C@_1CM@HIICPONF@?$AAp?$AAr?$AAe?$AAd?$AAi?$AAc?$AAt?$AAL?$AAP?$AAC?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA1?$AA0?$AA?$AA@??_C@_1CM@IKDIDOBM@?$AAp?$AAR?$AAD?$AA_?$AAv?$AAe?$AAc?$AA_?$AAQ?$AA2?$AA0?$AA?$FL?$AA?5?$AAi?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CM@IMHBJNAM@?$AAs?$AAh?$AAa?$AAp?$AAi?$AAn?$AAg?$AAL?$AAP?$AAC?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA1?$AA2?$AA?$AA@??_C@_1CM@MGJMHKNN@?$AA2?$AA6?$AA?5?$AA?9?$AA?5?$AA1?$AA8?$AA?5?$AA?$CL?$AA?5?$AAl?$AAs?$AAh?$AAi?$AAf?$AAt?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CM@MLOMEMMB@?$AAN?$AAD?$AAe?$AAl?$AAt?$AAa?$AAM?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA5?$AA?$FL?$AAL?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA1?$AA?$AA@??_C@_1CM@OIKGGLDE@?$AA?$CK?$AAi?$AAn?$AAv?$AAG?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA3?$AA0?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1?$AA?$DM?$AA?$DM?$AA3?$AA0?$AA?$AA@??_C@_1CM@PBAFIMHH@?$AAi?$AAd?$AAx?$AA?5?$AA?$CL?$AA?5?$AAj?$AA?5?$AA?$DM?$AA?5?$AAl?$AAa?$AAg?$AA_?$AAc?$AAo?$AAu?$AAn?$AAt?$AAe?$AAr?$AA?$AA@??_C@_1CO@BDHLMLJD@?$AAp?$AAN?$AAL?$AAS?$AAF?$AAW?$AA_?$AAQ?$AA6?$AA?$FL?$AA?5?$AAD?$AA?5?$AA?9?$AA?5?$AA1?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1CO@CLMJDNHM@?$AAp?$AAs?$AAD?$AAe?$AAc?$AA?9?$AA?$DO?$AAL?$AAP?$AAC?$AA_?$AAo?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA1?$AA0?$AA?$AA@??_C@_1CO@FMFHOPIM@?$AAp?$AAs?$AAD?$AAe?$AAc?$AA?9?$AA?$DO?$AAL?$AAP?$AAC?$AA_?$AAo?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA1?$AA0?$AA?$AA@??_C@_1CO@IKJLKDPF@?$AAp?$AAN?$AAL?$AAS?$AAF?$AAW?$AA_?$AAQ?$AA6?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$CL?$AA?5?$AA1?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1CO@LAKNKFKO@?$AA?$CI?$AA?5?$AAL?$AAP?$AAC?$AA_?$AAo?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$CG?$AA?5?$AA1?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CO@MKGFOLPD@?$AAH?$AAa?$AAr?$AAm?$AAS?$AAh?$AAa?$AAp?$AAe?$AAG?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA2?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CO@OKDJIDCP@?$AAi?$AAf?$AAa?$AAc?$AAt?$AA_?$AAQ?$AA2?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA?$CI?$AA?5?$AA1?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA2?$AA?5?$AA?$CJ?$AA?$AA@??_C@_1DA@JCFNIGPD@?$AA2?$AA?5?$AA?$CK?$AA?5?$AAO?$AAr?$AAd?$AAe?$AAr?$AA_?$AAh?$AAa?$AAl?$AAf?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?$AA@??_C@_1DA@LLBDPFOI@?$AAl?$AAa?$AAg?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AAs?$AAi?$AAg?$AAt?$AAy?$AAp?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA1?$AA?$AA@??_C@_1DA@PFPDKGMN@?$AAL?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAL?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA?$CI?$AA2?$AA0?$AA?5?$AA?$CK?$AA?5?$AA2?$AA4?$AA?$CJ?$AA?$AA@??_C@_1DBG@CLGMOCDN@?$AA?$CI?$AA?5?$AA8?$AA?5?$AA?$CK?$AA?5?$AA1?$AA0?$AA0?$AA0?$AA?5?$AA?$CK?$AA?5?$AA?$CI?$AA?5?$AA?$CI?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?$CJ?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs@??_C@_1DC@CDNNNAOH@?$AAN?$AAL?$AAS?$AAF?$AA?$FL?$AA?5?$AAr?$AAo?$AAo?$AAt?$AA_?$AAi?$AAx?$AA?5?$AA?$FN?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA3?$AA2?$AA7?$AA6?$AA7?$AA?$AA@??_C@_1DC@CNMDEJKP@?$AAp?$AAN?$AAL?$AAS?$AAF?$AAW?$AA_?$AAQ?$AA6?$AA?$FL?$AA?5?$AAi?$AA?5?$AA?$FN?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?$AA@??_C@_1DC@KBPDPJNG@?$AAb?$AAa?$AAs?$AAi?$AAs?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAs?$AAi?$AAg?$AAn?$AAa?$AAl?$AA_?$AA8?$AAk?$AAH?$AAz?$AA?$AA@??_C@_1DC@LLMPBJFI@?$AAb?$AAa?$AAs?$AAi?$AAs?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAs?$AAi?$AAg?$AAn?$AAa?$AAl?$AA_?$AA4?$AAk?$AAH?$AAz?$AA?$AA@??_C@_1DC@NICFFDPC@?$AA?$CI?$AA2?$AA0?$AA?5?$AA?$CK?$AA?5?$AA2?$AA4?$AA?$CJ?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAf?$AAr?$AAa?$AAm?$AAe?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?$AA@??_C@_1DE@CJNOBCLO@?$AAN?$AAL?$AAS?$AAF?$AA_?$AAM?$AAS?$AAV?$AAQ?$AA_?$AAS?$AAu?$AAr?$AAv?$AAi?$AAv?$AAo?$AAr?$AAs?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1?$AA6?$AA?$AA@??_C@_1DE@FABFECOD@?$AAp?$AAs?$AAD?$AAe?$AAl?$AAD?$AAe?$AAc?$AA?$FL?$AA?5?$AAi?$AA?5?$AA?$FN?$AA?4?$AAR?$AAD?$AA_?$AAQ?$AA1?$AA0?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DE@MHPEDPJB@?$AAN?$AAL?$AAS?$AAF?$AA_?$AAm?$AAu?$AA_?$AAf?$AAl?$AAu?$AAc?$AA_?$AAr?$AAe?$AAd?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DE@ODKBMEHK@?$AAt?$AAa?$AAr?$AAg?$AAe?$AAt?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAs?$AAi?$AAg?$AAn?$AAa?$AAl?$AA_?$AA8?$AAk?$AAH?$AAz?$AA?$AA@??_C@_1DE@PCNFDAO@?$AAe?$AAn?$AAc?$AAC?$AAo?$AAn?$AAt?$AAr?$AAo?$AAl?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAv?$AAo?$AAi?$AAd?$AA?5?$AA?$CK?$AA?$CJ?$AA0?$AA?$CJ?$AA?$AA@??_C@_1DE@PJJNCEPE@?$AAt?$AAa?$AAr?$AAg?$AAe?$AAt?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAs?$AAi?$AAg?$AAn?$AAa?$AAl?$AA_?$AA4?$AAk?$AAH?$AAz?$AA?$AA@??_C@_1DE@PJLPPCNB@?$AAB?$AAW?$AAE?$AAx?$AAp?$AA1?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA?$CI?$AA?5?$AA1?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA1?$AA6?$AA?5?$AA?$CJ?$AA?$AA@??_C@_1DG@BKABJEIB@?$AA?$CI?$AA?5?$AA?$CI?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?$CJ?$AAp?$AAx?$AA?5?$AA?$CG?$AA?5?$AA3?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DG@DLMGGFLH@?$AAr?$AAc?$AA_?$AAm?$AAu?$AAl?$AAt?$AA1?$AA_?$AAQ?$AA3?$AA0?$AA?5?$AA?$DM?$AA?5?$AA?$CI?$AA?5?$AA1?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA3?$AA0?$AA?5?$AA?$CJ?$AA?$AA@??_C@_1DG@DNCFEAIL@?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?5?$AA?$CL?$AA?5?$AA6?$AA5?$AA5?$AA3?$AA6?$AA?$AA@??_C@_1DG@HELIEBNE@?$AAr?$AAc?$AA_?$AAm?$AAu?$AAl?$AAt?$AA1?$AA_?$AAQ?$AA3?$AA0?$AA?5?$AA?$DO?$AA?5?$AA?$CI?$AA?5?$AA1?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA1?$AA5?$AA?5?$AA?$CJ?$AA?$AA@??_C@_1DG@LPMCFMEO@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAL?$AAa?$AAm?$AAb?$AAd?$AAa?$AA_?$AAQ?$AA1?$AA0?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DI@DAHMJJNE@?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA4?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAs?$AAh?$AAo?$AAr?$AAt?$AA?$CJ?$AA0?$AAx?$AA8?$AA0?$AA0?$AA0?$AA?$CJ?$AA?$AA@??_C@_1DI@JFPPCDKE@?$AAN?$AAS?$AAQ?$AA?9?$AA?$DO?$AAp?$AAr?$AAe?$AAv?$AA_?$AAi?$AAn?$AAv?$AA_?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DI@KJHOJGEJ@?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAs?$AAh?$AAo?$AAr?$AAt?$AA?$CJ?$AA0?$AAx?$AA8?$AA0?$AA0?$AA0?$AA?$CJ?$AA?$AA@??_C@_1DI@LBPPEJDN@?$AA?$CK?$AAi?$AAn?$AAv?$AAG?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA3?$AA0?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA?$CI?$AA?5?$AA1?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA3?$AA0?$AA?5?$AA?$CJ?$AA?$AA@??_C@_1DI@LHFBDJGG@?$AAH?$AAa?$AAr?$AAm?$AAS?$AAh?$AAa?$AAp?$AAe?$AAG?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA4?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DK@FPECHEBI@?$AAp?$AAs?$AAS?$AAi?$AAl?$AAk?$AA_?$AAV?$AAA?$AAD?$AA?9?$AA?$DO?$AAi?$AAn?$AAv?$AA_?$AAN?$AAL?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DK@GAKELIAC@?$AA?$CI?$AA?5?$AAp?$AAr?$AAe?$AAd?$AAi?$AAc?$AAt?$AAL?$AAP?$AAC?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$CG?$AA?5?$AA1?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DK@KGPFGICO@?$AA?$CI?$AA?5?$AAs?$AAh?$AAa?$AAp?$AAi?$AAn?$AAg?$AAL?$AAP?$AAC?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$CG?$AA?5?$AA1?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DK@POBEBELK@?$AAm?$AAa?$AAx?$AA_?$AAa?$AAb?$AAs?$AA_?$AAd?$AA_?$AAQ?$AA1?$AA4?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA?$CI?$AA?5?$AA5?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA1?$AA5?$AA?5?$AA?$CJ?$AA?$AA@??_C@_1DM@BCPANHBF@?$AAp?$AAs?$AAD?$AAe?$AAc?$AA?9?$AA?$DO?$AAp?$AAr?$AAe?$AAv?$AA_?$AAi?$AAn?$AAv?$AA_?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DM@BEOFCHCG@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAG?$AAa?$AAi?$AAn?$AAs?$AA_?$AAQ?$AA1?$AA6?$AA?$FL?$AA?5?$AAi?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1DM@BGIENKNI@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAs?$AAp?$AAa?$AAr?$AAs?$AAe?$AAn?$AAe?$AAs?$AAs?$AA_?$AAQ?$AA8?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DM@CLHAPMEP@?$AA?$CI?$AA?5?$AA?$CI?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?$CJ?$AAa?$AA_?$AAQ?$AA1?$AA2?$AA?5?$AA?$CG?$AA?5?$AA3?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DM@FFGDIEJB@?$AAN?$AAL?$AAS?$AAF?$AA_?$AAm?$AAu?$AA_?$AAf?$AAl?$AAu?$AAc?$AA_?$AAr?$AAe?$AAd?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1?$AA3?$AA1?$AA0?$AA7?$AA?$AA@??_C@_1DO@DCADNOIE@?$AAp?$AAs?$AAL?$AAP?$AA?9?$AA?$DO?$AAt?$AAr?$AAa?$AAn?$AAs?$AAi?$AAt?$AAi?$AAo?$AAn?$AA_?$AAf?$AAr?$AAa?$AAm?$AAe?$AA_?$AAn?$AAo?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DO@HFJHHMML@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAp?$AAe?$AAe?$AAc?$AAh?$AA_?$AAa?$AAc?$AAt?$AAi?$AAv?$AAi?$AAt?$AAy?$AA_?$AAQ?$AA8?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DO@HHEDJHOJ@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAG?$AAa?$AAi?$AAn?$AAs?$AA_?$AAQ?$AA1?$AA6?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DO@JIICFILC@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAT?$AAa?$AAr?$AAg?$AAe?$AAt?$AAR?$AAa?$AAt?$AAe?$AA_?$AAb?$AAp?$AAs?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1DO@JKIEFGO@?$AAs?$AAu?$AAb?$AAf?$AAr?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?5?$AA?$CK?$AA?5?$AAn?$AAb?$AA_?$AAs?$AAu?$AAb?$AAf?$AAr?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA5?$AA4?$AA4?$AA?$AA@??_C@_1EA@OKHJDLDN@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAs?$AAp?$AAa?$AAr?$AAs?$AAe?$AAn?$AAe?$AAs?$AAs?$AA_?$AAQ?$AA8?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA5?$AA6?$AA?$AA@??_C@_1EC@MAHEJDOO@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAp?$AAe?$AAe?$AAc?$AAh?$AA_?$AAa?$AAc?$AAt?$AAi?$AAv?$AAi?$AAt?$AAy?$AA_?$AAQ?$AA8?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA5?$AA6@??_C@_1EE@OAFKHDBG@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAs?$AAh?$AAa?$AAp?$AAi?$AAn?$AAg?$AAL?$AAP?$AAC?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1@??_C@_1EG@KKJLEIMK@?$AA?$CI?$AA?5?$AA?$CI?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?$CJ?$AAA?$AAR?$AA_?$AAs?$AAh?$AAp?$AA_?$AAQ?$AA1?$AA3?$AA?5?$AA?$CG?$AA?5?$AA3?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN@??_C@_1EI@CGFOINEF@?$AAe?$AAn?$AAe?$AAr?$AAg?$AAi?$AAe?$AAs?$AA_?$AAs?$AAt?$AA3?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?$FL?$AA?5?$AAi?$AA?5?$AA?$FN?$AA?$FL?$AA?5?$AAj?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0@??_C@_1EI@OKPGODFG@?$AAp?$AAs?$AAS?$AAa?$AAm?$AAp?$AAl?$AAe?$AAS?$AAt?$AAa?$AAt?$AAe?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?$FL?$AA?5?$AA0?$AA?5?$AA?$FN?$AA?4?$AAR?$AAD?$AA_?$AAQ?$AA1?$AA0?$AA?5?$AA?$DO@??_C@_1FA@EDFEJFMG@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAn?$AAS?$AAt?$AAa?$AAt?$AAe?$AAs?$AAD?$AAe?$AAl?$AAa?$AAy?$AAe?$AAd?$AAD?$AAe?$AAc?$AAi?$AAs?$AAi@??_C@_1FE@DGLFBGCA@?$AAf?$AAr?$AAa?$AAm?$AAe?$AAL?$AAe?$AAn?$AAI?$AAn?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?5?$AA?$CI?$AA?5?$AAf?$AAr?$AAa?$AAm?$AAe?$AAL?$AAe?$AAn?$AAO?$AAu?$AAt?$AA?5?$AA?$CK?$AA?5@??_C@_1FE@GMHHDEFD@?$AAb?$AAu?$AAf?$AA_?$AAl?$AAe?$AAn?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAp?$AAs?$AAP?$AAr?$AAe?$AAd?$AAS?$AAt?$AA?9?$AA?$DO?$AAp?$AAi?$AAt?$AAc?$AAh?$AA_?$AAL?$AAP?$AAC?$AA_?$AAw@??_C@_1FE@LHKJNAOP@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAp?$AAi?$AAt?$AAc?$AAh?$AAE?$AAs?$AAt?$AAi?$AAm?$AAa?$AAt?$AAi?$AAo?$AAn?$AAL?$AAP?$AAC?$AAO?$AAr@??_C@_1FO@CHLEGFAA@?$AA?$CI?$AA?$CI?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?$CJ?$AAW?$AAg?$AAh?$AAt?$AA_?$AAQ?$AA1?$AA5?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA1?$AA6?$AA?5@??_C@_1GE@CAGJOFNO@?$AAr?$AAa?$AAt?$AAe?$AA_?$AAa?$AAc?$AAc?$AA_?$AAQ?$AA5?$AA?$FL?$AA?5?$AAn?$AA?5?$AA?$FN?$AA?5?$AA?$CL?$AA?5?$AAp?$AAs?$AAN?$AAL?$AAS?$AAF?$AA_?$AAC?$AAB?$AAS?$AA?9?$AA?$DO?$AAR@??_C@_1GE@HEPMKMO@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAp?$AAi?$AAt?$AAc?$AAh?$AA_?$AAf?$AAr?$AAe?$AAq?$AA_?$AAl?$AAo?$AAw?$AA_?$AAH?$AAz?$AA?5?$AA?$DM?$AA?$DN?$AA?5@??_C@_1GI@NOLDCAAM@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAf?$AAs?$AA_?$AAk?$AAH?$AAz?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA1?$AA2?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AAp?$AAs?$AAE?$AAn@??_C@_1GO@BOFBILHA@?$AAs?$AAe?$AAa?$AAr?$AAc?$AAh?$AA_?$AAt?$AAh?$AAr?$AAe?$AAs?$AA2?$AA_?$AAQ?$AA1?$AA5?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAs?$AAe?$AAa?$AAr?$AAc?$AAh@??_C@_1GO@IAOHIPFH@?$AA?$CI?$AA?$CI?$AA?$CI?$AAc?$AAn?$AA?$FL?$AAi?$AA?$FN?$AA?$CJ?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$CJ?$AA?5?$AA?$DP?$AA?5?$AA?$CI?$AAc?$AAn?$AA?$FL?$AAi?$AA?$FN?$AA?$CJ?$AA?5?$AA?3?$AA?5?$AA?9?$AA?$CI?$AAc?$AAn?$AA?$FL@??_C@_1GO@KOCNILKN@?$AAs?$AAe?$AAa?$AAr?$AAc?$AAh?$AA_?$AAt?$AAh?$AAr?$AAe?$AAs?$AA1?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAs?$AAe?$AAa?$AAr?$AAc?$AAh@??_C@_1GO@NLELMEGP@?$AAr?$AAa?$AAt?$AAe?$AA_?$AAa?$AAc?$AAc?$AA_?$AAQ?$AA5?$AA?$FL?$AA?5?$AAn?$AA?5?$AA?$FN?$AA?5?$AA?$CL?$AA?5?$AAp?$AAs?$AAN?$AAL?$AAS?$AAF?$AA_?$AAC?$AAB?$AAS?$AA?9?$AA?$DO?$AAR@??_C@_1HC@GOPDELEO@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAL?$AAa?$AAm?$AAb?$AAd?$AAa?$AA_?$AAQ?$AA1?$AA0?$AA?5?$AA?$DM?$AA?5?$AA?$CI?$AA?$CI?$AAi?$AAn?$AAt?$AA?$CJ?$AA?$CI?$AA?$CI@??_C@_1HI@DLHADHCL@?$AAF?$AAs?$AA_?$AAk?$AAH?$AAz?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA8?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AAF?$AAs?$AA_?$AAk?$AAH?$AAz?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA1?$AA2?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AAF@??_C@_1HI@ONFEKPCP@?$AAp?$AAs?$AAD?$AAe?$AAc?$AA?9?$AA?$DO?$AAf?$AAr?$AAa?$AAm?$AAe?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAp?$AAs?$AAD?$AAe?$AAc@??_C@_1HK@LAOFOGPD@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAs?$AAi?$AAg?$AAt?$AAy?$AAp?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$HM?$AA?$HM?$AA?5@??_C@_1HK@MBKNNGNF@?$AA?$CI?$AA?5?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAs?$AAu?$AAb?$AAf?$AAr?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?5?$AA?$CK?$AA?5?$AA4?$AA?5?$AA?$CJ@??_C@_1HM@GJPHFHGO@?$AAb?$AAa?$AAs?$AAi?$AAs?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$CL?$AA?5?$AAs?$AAf?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA_?$AA8?$AAk?$AAH?$AAz?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAs?$AAi@??_C@_1HM@PEDCAAOJ@?$AAb?$AAa?$AAs?$AAi?$AAs?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$CL?$AA?5?$AAs?$AAf?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA_?$AA8?$AAk?$AAH?$AAz?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAs?$AAi@??_C@_1HO@JBNLFBHH@?$AAt?$AAa?$AAr?$AAg?$AAe?$AAt?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$CL?$AA?5?$AAs?$AAf?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA_?$AA8?$AAk?$AAH?$AAz?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAs@??_C@_1HO@MBOAGPA@?$AAt?$AAa?$AAr?$AAg?$AAe?$AAt?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$CL?$AA?5?$AAs?$AAf?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA_?$AA8?$AAk?$AAH?$AAz?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAs@??_C@_1IC@EPNMGKGN@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1IE@CCLGAEPI@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1IE@DCLACDLB@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1IE@DPKCPBGA@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1IE@MJIJMCHK@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1IG@MCJJGPJH@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1IK@FEJLCIGL@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1IK@KPNHDBN@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1IM@FNDJNDBN@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1IM@NKJIPJPB@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1JE@EOJNJGLH@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1JE@NHFBEJPL@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1JE@OAFNKFMA@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1JG@BAODBNBD@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1JG@BIDLHCFP@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1JG@GOLOPNIF@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1JG@HDILJKBL@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1JG@IIEAGKAD@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1JG@KINBPEAC@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1JG@NFKKGHCO@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1JG@NMHMCPDF@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1JG@OAEABAGG@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1JG@PPNOLIPD@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1JI@BLINLLKL@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1JI@ILIMLOMI@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1JI@JCPGDBFM@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1JK@DHFFBKFD@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1JK@DPINIPLC@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1JK@HECEIHEK@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1JM@CGPKDJPK@?$AA0?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAN?$AAL?$AAS?$AAF?$AAI?$AAn?$AAd?$AAi?$AAc?$AAe?$AAs?$AA?$FL?$AA?5?$AA0?$AA?5?$AA?$FN?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAN?$AAL?$AAS?$AAF?$AAI?$AAn?$AAd@??_C@_1JM@MPEHCEOL@?$AA0?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAN?$AAL?$AAS?$AAF?$AAI?$AAn?$AAd?$AAi?$AAc?$AAe?$AAs?$AA?$FL?$AA?5?$AAs?$AA?5?$AA?$FN?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAN?$AAL?$AAS?$AAF?$AAI?$AAn?$AAd@??_C@_1JO@BEFLJAPD@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1JO@GLAGELIL@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KA@BLEBOLKK@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KA@BOBMNGBJ@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KA@EOKJNLBE@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KA@EPMJPGFK@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KA@HCIIPBDN@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KA@KGJKKDC@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KC@DJLAKPOE@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AA?9?$AA?$DO?$AAu?$AAs?$AAe?$AAI?$AAn?$AAt?$AAe?$AAr?$AAp?$AAo?$AAl?$AAa?$AAt?$AAe?$AAd?$AAN?$AAL?$AAS?$AAF?$AAs?$AA?5?$AA?$DN?$AA?$DN?$AA?5@??_C@_1KC@HKPFDAB@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KE@BCDGEAGJ@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KE@NBKBKBGN@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KE@PBEDJMIH@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KE@PNHGGPKF@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KG@KJLKCDPF@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KG@LPICFBJE@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KG@NEKGGACB@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KI@GCLANMBF@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KI@IGGEPIDH@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KI@KLLICAIO@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KK@FABLFNIP@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KK@GMMBCADK@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KM@IGJINFHN@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KO@DJANJIGL@?$AAs?$AAu?$AAm?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAs?$AAu?$AAm?$AA?$CJ?$AA?5?$AA?$DO?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?5?$AA?$DP?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?5@??_C@_1KO@DNFMFBAO@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1KO@JGOIALLO@?$AAl?$AAa?$AAg?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAl?$AAa?$AAg?$AA?$CJ?$AA?5?$AA?$DO?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?5?$AA?$DP?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?5@??_C@_1LE@FAEBNBAH@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@??_C@_1LG@MEPJGGBF@?$AAd?$AAi?$AAf?$AAf?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAd?$AAi?$AAf?$AAf?$AA?$CJ?$AA?5?$AA?$DO?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?5?$AA?$DP?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF@??_C@_1LM@OHMGEGOM@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAf?$AAr?$AAa?$AAm?$AAe?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?5?$AA?9?$AA?5?$AAp?$AAs?$AAE?$AAn?$AAc@??_C@_1LO@DMEPPJEN@?$AA?$CI?$AA?5?$AA?$CI?$AA?5?$AAp?$AAs?$AAD?$AAe?$AAc?$AA?9?$AA?$DO?$AAf?$AAs?$AA_?$AAk?$AAH?$AAz?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA1?$AA2?$AA?5?$AA?$CJ?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AA?5?$AAL@??_C@_1M@JJNOHMOJ@?$AAL?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1M@JPNCAKBH@?$AAD?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1M@ONEGJFGG@?$AAK?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1MG@KKMNIONB@?$AAt?$AAe?$AAm?$AAp?$AA3?$AA2?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAt?$AAe?$AAm?$AAp?$AA3?$AA2?$AA?$CJ?$AA?5?$AA?$DO?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?5?$AA?$DP?$AA?5?$AA0@??_C@_1O@CPCINNBO@?$AAC?$AA0?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1O@FBLLIFKB@?$AAc?$AAQ?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1O@HOHCBFDB@?$AAL?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAK?$AA?$AA@??_C@_1O@PBBFCMJK@?$AAD?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1OO@ONKNPBO@?$AAl?$AAa?$AAg?$AA_?$AAl?$AAo?$AAg?$AA2?$AA_?$AAQ?$AA7?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAl?$AAa?$AAg?$AA_?$AAl?$AAo?$AAg?$AA2?$AA_?$AAQ?$AA7?$AA?$CJ?$AA?5?$AA?$DO?$AA?5@??_C@_1PG@NNFJDOCI@?$AA?$CI?$AA?$CI?$AAs?$AAu?$AAm?$AA?$CJ?$AA?$DO?$AA?$DO?$AA?$CI?$AA1?$AA?$CJ?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AA?$CI?$AA?$CI?$AAs?$AAu?$AAm?$AA?$CJ?$AA?$DO?$AA?$DO?$AA?$CI?$AA1?$AA?$CJ?$AA?$CJ?$AA?$CJ?$AA?5@?__LINE__Var@?1??SKP_DIV32_varQ@@9@9@00c28631?__LINE__Var@?1??SKP_DIV32_varQ@@9@9@72c1599a?__LINE__Var@?1??SKP_DIV32_varQ@@9@9@7adc298a?__LINE__Var@?1??SKP_DIV32_varQ@@9@9@7b56cc59?__LINE__Var@?1??SKP_DIV32_varQ@@9@9@e900e1e8?__LINE__Var@?1??SKP_DIV32_varQ@@9@9@ef08ea6f?__LINE__Var@?1??SKP_DIV32_varQ@@9@9@fcbb61fb?__LINE__Var@?1??SKP_FIX_P_Ana_calc_corr_st3@@9@9?__LINE__Var@?1??SKP_FIX_P_Ana_calc_energy_st3@@9@9?__LINE__Var@?1??SKP_INVERSE32_varQ@@9@9@895cc594?__LINE__Var@?1??SKP_INVERSE32_varQ@@9@9@ae4c369d?__LINE__Var@?1??SKP_Silk_A2NLSF@@9@9?__LINE__Var@?1??SKP_Silk_CNG_exc@@9@9@3894bdbb?__LINE__Var@?1??SKP_Silk_HP_variable_cutoff_FIX@@9@9?__LINE__Var@?1??SKP_Silk_LBRR_encode_FIX@@9@9?__LINE__Var@?1??SKP_Silk_LDL_factorize_FIX@@9@9@ae4c369d?__LINE__Var@?1??SKP_Silk_LPC_analysis_filter@@9@9?__LINE__Var@?1??SKP_Silk_LPC_fit@@9@9?__LINE__Var@?1??SKP_Silk_LPC_inverse_pred_gain@@9@9?__LINE__Var@?1??SKP_Silk_LPC_inverse_pred_gain_Q13@@9@9?__LINE__Var@?1??SKP_Silk_LPC_synthesis_filter@@9@9?__LINE__Var@?1??SKP_Silk_LP_interpolate_filter_taps@@9@9@0c317abd?__LINE__Var@?1??SKP_Silk_LP_variable_cutoff@@9@9?__LINE__Var@?1??SKP_Silk_NLSF2A@@9@9?__LINE__Var@?1??SKP_Silk_NLSF_MSVQ_decode@@9@9?__LINE__Var@?1??SKP_Silk_NLSF_MSVQ_encode_FIX@@9@9?__LINE__Var@?1??SKP_Silk_NLSF_VQ_rate_distortion_FIX@@9@9?__LINE__Var@?1??SKP_Silk_NLSF_VQ_sum_error_FIX@@9@9?__LINE__Var@?1??SKP_Silk_NLSF_VQ_weights_laroia@@9@9?__LINE__Var@?1??SKP_Silk_NLSF_stabilize@@9@9?__LINE__Var@?1??SKP_Silk_NSQ@@9@9?__LINE__Var@?1??SKP_Silk_NSQ_del_dec@@9@9?__LINE__Var@?1??SKP_Silk_PLC_conceal@@9@9?__LINE__Var@?1??SKP_Silk_SDK_Encode@@9@9?__LINE__Var@?1??SKP_Silk_SDK_InitEncoder@@9@9?__LINE__Var@?1??SKP_Silk_VAD_GetNoiseLevels@@9@9?__LINE__Var@?1??SKP_Silk_VAD_GetSA_Q8@@9@9?__LINE__Var@?1??SKP_Silk_VQ_WMat_EC_FIX@@9@9?__LINE__Var@?1??SKP_Silk_apply_sine_window@@9@9?__LINE__Var@?1??SKP_Silk_burg_modified@@9@9?__LINE__Var@?1??SKP_Silk_control_encoder_FIX@@9@9?__LINE__Var@?1??SKP_Silk_corrVector_FIX@@9@9?__LINE__Var@?1??SKP_Silk_decode_core@@9@9?__LINE__Var@?1??SKP_Silk_decode_frame@@9@9?__LINE__Var@?1??SKP_Silk_decoder_set_fs@@9@9?__LINE__Var@?1??SKP_Silk_encode_frame_FIX@@9@9?__LINE__Var@?1??SKP_Silk_encode_parameters@@9@9?__LINE__Var@?1??SKP_Silk_encode_parameters_v4@@9@9?__LINE__Var@?1??SKP_Silk_find_LPC_FIX@@9@9?__LINE__Var@?1??SKP_Silk_find_LTP_FIX@@9@9?__LINE__Var@?1??SKP_Silk_find_pitch_lags_FIX@@9@9?__LINE__Var@?1??SKP_Silk_find_pred_coefs_FIX@@9@9?__LINE__Var@?1??SKP_Silk_insertion_sort_decreasing@@9@9?__LINE__Var@?1??SKP_Silk_insertion_sort_decreasing_int16@@9@9?__LINE__Var@?1??SKP_Silk_insertion_sort_increasing@@9@9?__LINE__Var@?1??SKP_Silk_insertion_sort_increasing_all_values@@9@9?__LINE__Var@?1??SKP_Silk_interpolate@@9@9?__LINE__Var@?1??SKP_Silk_noise_shape_analysis_FIX@@9@9?__LINE__Var@?1??SKP_Silk_noise_shape_quantizer@@9@9@7adc298a?__LINE__Var@?1??SKP_Silk_noise_shape_quantizer_del_dec@@9@9@ef08ea6f?__LINE__Var@?1??SKP_Silk_nsq_del_dec_scale_states@@9@9@ef08ea6f?__LINE__Var@?1??SKP_Silk_nsq_scale_states@@9@9@7adc298a?__LINE__Var@?1??SKP_Silk_pitch_analysis_core@@9@9?__LINE__Var@?1??SKP_Silk_prefilter_FIX@@9@9?__LINE__Var@?1??SKP_Silk_process_NLSFs_FIX@@9@9?__LINE__Var@?1??SKP_Silk_process_gains_FIX@@9@9?__LINE__Var@?1??SKP_Silk_resample_1_3@@9@9?__LINE__Var@?1??SKP_Silk_resample_2_3@@9@9?__LINE__Var@?1??SKP_Silk_resample_2_3_coarse@@9@9?__LINE__Var@?1??SKP_Silk_resample_2_3_coarsest@@9@9?__LINE__Var@?1??SKP_Silk_resample_3_2@@9@9?__LINE__Var@?1??SKP_Silk_resample_3_4@@9@9?__LINE__Var@?1??SKP_Silk_resample_4_3@@9@9?__LINE__Var@?1??SKP_Silk_residual_energy16_covar_FIX@@9@9?__LINE__Var@?1??SKP_Silk_scale_vector16_Q14@@9@9?__LINE__Var@?1??SKP_Silk_scale_vector32_16_Q14@@9@9?__LINE__Var@?1??SKP_Silk_scale_vector32_Q16@@9@9?__LINE__Var@?1??SKP_Silk_solve_LDL_FIX@@9@9_SKP_FIX_P_Ana_calc_corr_st3_SKP_FIX_P_Ana_calc_energy_st3_SKP_FIX_P_Ana_find_scaling_SKP_Silk_A2NLSF_SKP_Silk_CB_lags_stage2_SKP_Silk_CB_lags_stage3_SKP_Silk_CNG_SKP_Silk_CNG_Reset_SKP_Silk_Dec_A_HP_12_SKP_Silk_Dec_A_HP_16_SKP_Silk_Dec_A_HP_24_SKP_Silk_Dec_A_HP_8_SKP_Silk_Dec_B_HP_12_SKP_Silk_Dec_B_HP_16_SKP_Silk_Dec_B_HP_24_SKP_Silk_Dec_B_HP_8_SKP_Silk_FrameTermination_CDF_SKP_Silk_FrameTermination_offset_SKP_Silk_FrameTermination_v4_CDF_SKP_Silk_FrameTermination_v4_offset_SKP_Silk_HP_variable_cutoff_FIX_SKP_Silk_LBRR_ctrl_FIX_SKP_Silk_LBRR_encode_FIX_SKP_Silk_LBRR_reset_SKP_Silk_LPC_analysis_filter_SKP_Silk_LPC_fit_SKP_Silk_LPC_inverse_pred_gain_SKP_Silk_LPC_inverse_pred_gain_Q13_SKP_Silk_LPC_stabilize_SKP_Silk_LPC_synthesis_filter_SKP_Silk_LPC_synthesis_order16_SKP_Silk_LP_variable_cutoff_SKP_Silk_LSFCosTab_FIX_Q12_SKP_Silk_LTPScales_table_Q14_SKP_Silk_LTP_analysis_filter_FIX_SKP_Silk_LTP_gain_BITS_Q6_0_SKP_Silk_LTP_gain_BITS_Q6_1_SKP_Silk_LTP_gain_BITS_Q6_2_SKP_Silk_LTP_gain_BITS_Q6_ptrs_SKP_Silk_LTP_gain_CDF_0_SKP_Silk_LTP_gain_CDF_1_SKP_Silk_LTP_gain_CDF_2_SKP_Silk_LTP_gain_CDF_offsets_SKP_Silk_LTP_gain_CDF_ptrs_SKP_Silk_LTP_gain_middle_avg_RD_Q14_SKP_Silk_LTP_gain_vq_0_Q14_SKP_Silk_LTP_gain_vq_1_Q14_SKP_Silk_LTP_gain_vq_2_Q14_SKP_Silk_LTP_per_index_CDF_SKP_Silk_LTP_per_index_CDF_offset_SKP_Silk_LTP_scale_ctrl_FIX_SKP_Silk_LTP_vq_ptrs_Q14_SKP_Silk_LTP_vq_sizes_SKP_Silk_LTPscale_CDF_SKP_Silk_LTPscale_offset_SKP_Silk_Lag_range_stage3_SKP_Silk_MA_SKP_Silk_MA_Prediction_SKP_Silk_MA_Prediction_Q13_SKP_Silk_NLSF2A_SKP_Silk_NLSF2A_stable_SKP_Silk_NLSF_CB0_10_SKP_Silk_NLSF_CB0_10_Stage_info_SKP_Silk_NLSF_CB0_16_SKP_Silk_NLSF_CB0_16_Stage_info_SKP_Silk_NLSF_CB1_10_SKP_Silk_NLSF_CB1_10_Stage_info_SKP_Silk_NLSF_CB1_16_SKP_Silk_NLSF_CB1_16_Stage_info_SKP_Silk_NLSF_MSVQ_CB0_10_CDF_SKP_Silk_NLSF_MSVQ_CB0_10_CDF_middle_idx_SKP_Silk_NLSF_MSVQ_CB0_10_CDF_start_ptr_SKP_Silk_NLSF_MSVQ_CB0_10_Q15_SKP_Silk_NLSF_MSVQ_CB0_10_ndelta_min_Q15_SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5_SKP_Silk_NLSF_MSVQ_CB0_16_CDF_SKP_Silk_NLSF_MSVQ_CB0_16_CDF_middle_idx_SKP_Silk_NLSF_MSVQ_CB0_16_CDF_start_ptr_SKP_Silk_NLSF_MSVQ_CB0_16_Q15_SKP_Silk_NLSF_MSVQ_CB0_16_ndelta_min_Q15_SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5_SKP_Silk_NLSF_MSVQ_CB1_10_CDF_SKP_Silk_NLSF_MSVQ_CB1_10_CDF_middle_idx_SKP_Silk_NLSF_MSVQ_CB1_10_CDF_start_ptr_SKP_Silk_NLSF_MSVQ_CB1_10_Q15_SKP_Silk_NLSF_MSVQ_CB1_10_ndelta_min_Q15_SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5_SKP_Silk_NLSF_MSVQ_CB1_16_CDF_SKP_Silk_NLSF_MSVQ_CB1_16_CDF_middle_idx_SKP_Silk_NLSF_MSVQ_CB1_16_CDF_start_ptr_SKP_Silk_NLSF_MSVQ_CB1_16_Q15_SKP_Silk_NLSF_MSVQ_CB1_16_ndelta_min_Q15_SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5_SKP_Silk_NLSF_MSVQ_decode_SKP_Silk_NLSF_MSVQ_encode_FIX_SKP_Silk_NLSF_VQ_rate_distortion_FIX_SKP_Silk_NLSF_VQ_sum_error_FIX_SKP_Silk_NLSF_VQ_weights_laroia_SKP_Silk_NLSF_interpolation_factor_CDF_SKP_Silk_NLSF_interpolation_factor_offset_SKP_Silk_NLSF_stabilize_SKP_Silk_NLSF_stabilize_multi_SKP_Silk_NSQ_SKP_Silk_NSQ_del_dec_SKP_Silk_PLC_SKP_Silk_PLC_Reset_SKP_Silk_PLC_conceal_SKP_Silk_PLC_glue_frames_SKP_Silk_PLC_update_SKP_Silk_Quantization_Offsets_Q10_SKP_Silk_SDK_Decode_SKP_Silk_SDK_Encode_SKP_Silk_SDK_Get_Decoder_Size_SKP_Silk_SDK_Get_Encoder_Size_SKP_Silk_SDK_InitDecoder_SKP_Silk_SDK_InitEncoder_SKP_Silk_SDK_QueryEncoder_SKP_Silk_SDK_get_TOC_SKP_Silk_SDK_get_version_SKP_Silk_SDK_search_for_LBRR_SKP_Silk_SWB_detect_A_HP_Q13_SKP_Silk_SWB_detect_B_HP_Q13_SKP_Silk_SamplingRates_CDF_SKP_Silk_SamplingRates_offset_SKP_Silk_SamplingRates_table_SKP_Silk_Seed_CDF_SKP_Silk_Seed_offset_SKP_Silk_Transition_LP_A_Q28_SKP_Silk_Transition_LP_B_Q28_SKP_Silk_VAD_GetNoiseLevels_SKP_Silk_VAD_GetSA_Q8_SKP_Silk_VAD_Init_SKP_Silk_VQ_WMat_EC_FIX_SKP_Silk_allpass_int_SKP_Silk_ana_filt_bank_1_SKP_Silk_apply_sine_window_SKP_Silk_autocorr_SKP_Silk_biquad_SKP_Silk_biquad_alt_SKP_Silk_burg_modified_SKP_Silk_bwexpander_SKP_Silk_bwexpander_32_SKP_Silk_cbk_offsets_stage3_SKP_Silk_cbk_sizes_stage3_SKP_Silk_control_encoder_FIX_SKP_Silk_corrMatrix_FIX_SKP_Silk_corrVector_FIX_SKP_Silk_decode_core_SKP_Silk_decode_frame_SKP_Silk_decode_indices_v4_SKP_Silk_decode_parameters_SKP_Silk_decode_parameters_v4_SKP_Silk_decode_pitch_SKP_Silk_decode_pulses_SKP_Silk_decode_signs_SKP_Silk_decoder_set_fs_SKP_Silk_delta_gain_CDF_SKP_Silk_delta_gain_CDF_offset_SKP_Silk_detect_SWB_input_SKP_Silk_encode_frame_FIX_SKP_Silk_encode_parameters_SKP_Silk_encode_parameters_v4_SKP_Silk_encode_pulses_SKP_Silk_encode_signs_SKP_Silk_find_LPC_FIX_SKP_Silk_find_LTP_FIX_SKP_Silk_find_pitch_lags_FIX_SKP_Silk_find_pred_coefs_FIX_SKP_Silk_fit_LTP_SKP_Silk_gain_CDF_SKP_Silk_gain_CDF_offset_SKP_Silk_gains_dequant_SKP_Silk_gains_quant_SKP_Silk_init_decoder_SKP_Silk_init_encoder_FIX_SKP_Silk_inner_prod16_aligned_64_SKP_Silk_inner_prod16_aligned_sat_SKP_Silk_inner_prod_aligned_SKP_Silk_inner_prod_aligned_64_SKP_Silk_insertion_sort_decreasing_SKP_Silk_insertion_sort_decreasing_int16_SKP_Silk_insertion_sort_increasing_SKP_Silk_insertion_sort_increasing_all_values_SKP_Silk_int16_array_maxabs_SKP_Silk_interpolate_SKP_Silk_k2a_SKP_Silk_k2a_Q16_SKP_Silk_lin2log_SKP_Silk_log2lin_SKP_Silk_lowpass_int_SKP_Silk_lowpass_short_SKP_Silk_lsb_CDF_SKP_Silk_max_pulses_table_SKP_Silk_noise_shape_analysis_FIX_SKP_Silk_pitch_analysis_core_SKP_Silk_pitch_contour_CDF_SKP_Silk_pitch_contour_CDF_offset_SKP_Silk_pitch_contour_NB_CDF_SKP_Silk_pitch_contour_NB_CDF_offset_SKP_Silk_pitch_delta_CDF_SKP_Silk_pitch_delta_CDF_offset_SKP_Silk_pitch_lag_MB_CDF_SKP_Silk_pitch_lag_MB_CDF_offset_SKP_Silk_pitch_lag_NB_CDF_SKP_Silk_pitch_lag_NB_CDF_offset_SKP_Silk_pitch_lag_SWB_CDF_SKP_Silk_pitch_lag_SWB_CDF_offset_SKP_Silk_pitch_lag_WB_CDF_SKP_Silk_pitch_lag_WB_CDF_offset_SKP_Silk_prefilter_FIX_SKP_Silk_process_NLSFs_FIX_SKP_Silk_process_gains_FIX_SKP_Silk_pulses_per_block_BITS_Q6_SKP_Silk_pulses_per_block_CDF_SKP_Silk_pulses_per_block_CDF_offset_SKP_Silk_pulses_to_bytes_SKP_Silk_quant_LTP_gains_FIX_SKP_Silk_range_coder_check_after_decoding_SKP_Silk_range_coder_get_length_SKP_Silk_range_dec_init_SKP_Silk_range_decoder_SKP_Silk_range_decoder_multi_SKP_Silk_range_enc_init_SKP_Silk_range_enc_wrap_up_SKP_Silk_range_encoder_SKP_Silk_range_encoder_multi_SKP_Silk_rate_levels_BITS_Q6_SKP_Silk_rate_levels_CDF_SKP_Silk_rate_levels_CDF_offset_SKP_Silk_regularize_correlations_FIX_SKP_Silk_resample_1_2_SKP_Silk_resample_1_2_coarse_SKP_Silk_resample_1_2_coarsest_SKP_Silk_resample_1_3_SKP_Silk_resample_2_1_coarse_SKP_Silk_resample_2_3_SKP_Silk_resample_2_3_coarse_SKP_Silk_resample_2_3_coarsest_SKP_Silk_resample_3_1_SKP_Silk_resample_3_2_SKP_Silk_resample_3_4_SKP_Silk_resample_4_3_SKP_Silk_residual_energy16_covar_FIX_SKP_Silk_residual_energy_FIX_SKP_Silk_scale_copy_vector16_SKP_Silk_scale_vector16_Q14_SKP_Silk_scale_vector32_16_Q14_SKP_Silk_scale_vector32_Q16_SKP_Silk_scale_vector32_Q26_lshift_18_SKP_Silk_schur_SKP_Silk_schur64_SKP_Silk_shell_code_table0_SKP_Silk_shell_code_table1_SKP_Silk_shell_code_table2_SKP_Silk_shell_code_table3_SKP_Silk_shell_code_table_offsets_SKP_Silk_shell_decoder_SKP_Silk_shell_encoder_SKP_Silk_sigm_Q15_SKP_Silk_sign_CDF_SKP_Silk_solve_LDL_FIX_SKP_Silk_sum_sqr_shift_SKP_Silk_type_offset_CDF_SKP_Silk_type_offset_CDF_offset_SKP_Silk_type_offset_joint_CDF_SKP_Silk_vadflag_CDF_SKP_Silk_vadflag_offset_SNR_table_Q1_SNR_table_one_bit_per_sample_Q7_SigProc_Resample_2_3_coarse_INTERPOL_SigProc_Resample_2_3_coarsest_INTERPOL_SigProc_Resample_3_2_coarse_INTERPOL_TargetRate_table_MB_TargetRate_table_NB_TargetRate_table_SWB_TargetRate_table_WB__real@00000000 // 1273638397 0 4683 ` ..\out\Debug\SKP_Silk_VQ_nearest_neighbor_FIX.obj..\out\Debug\SKP_Silk_VAD.obj..\out\Debug\SKP_Silk_tables_type_offset.obj..\out\Debug\SKP_Silk_tables_sign.obj..\out\Debug\SKP_Silk_tables_pulses_per_block.obj..\out\Debug\SKP_Silk_tables_pitch_lag.obj..\out\Debug\SKP_Silk_tables_other.obj..\out\Debug\SKP_Silk_tables_NLSF_CB1_16.obj..\out\Debug\SKP_Silk_tables_NLSF_CB1_10.obj..\out\Debug\SKP_Silk_tables_NLSF_CB0_16.obj..\out\Debug\SKP_Silk_tables_NLSF_CB0_10.obj..\out\Debug\SKP_Silk_tables_LTP.obj..\out\Debug\SKP_Silk_tables_gain.obj..\out\Debug\SKP_Silk_sum_sqr_shift.obj..\out\Debug\SKP_Silk_sort.obj..\out\Debug\SKP_Silk_solve_LS_FIX.obj..\out\Debug\SKP_Silk_sigm_Q15.obj..\out\Debug\SKP_Silk_shell_coder.obj..\out\Debug\SKP_Silk_schur64.obj..\out\Debug\SKP_Silk_schur.obj..\out\Debug\SKP_Silk_scale_vector.obj..\out\Debug\SKP_Silk_scale_copy_vector16.obj..\out\Debug\SKP_Silk_residual_energy_FIX.obj..\out\Debug\SKP_Silk_residual_energy16_FIX.obj..\out\Debug\SKP_Silk_resample_4_3.obj..\out\Debug\SKP_Silk_resample_3_4.obj..\out\Debug\SKP_Silk_resample_3_2_rom.obj..\out\Debug\SKP_Silk_resample_3_2.obj..\out\Debug\SKP_Silk_resample_3_1.obj..\out\Debug\SKP_Silk_resample_2_3_rom.obj..\out\Debug\SKP_Silk_resample_2_3_coarsest.obj..\out\Debug\SKP_Silk_resample_2_3_coarse.obj..\out\Debug\SKP_Silk_resample_2_3.obj..\out\Debug\SKP_Silk_resample_2_1_coarse.obj..\out\Debug\SKP_Silk_resample_1_3.obj..\out\Debug\SKP_Silk_resample_1_2_coarsest.obj..\out\Debug\SKP_Silk_resample_1_2_coarse.obj..\out\Debug\SKP_Silk_resample_1_2.obj..\out\Debug\SKP_Silk_regularize_correlations_FIX.obj..\out\Debug\SKP_Silk_range_coder.obj..\out\Debug\SKP_Silk_quant_LTP_gains_FIX.obj..\out\Debug\SKP_Silk_pulses_to_bytes.obj..\out\Debug\SKP_Silk_process_NLSFs_FIX.obj..\out\Debug\SKP_Silk_process_gains_FIX.obj..\out\Debug\SKP_Silk_prefilter_FIX.obj..\out\Debug\SKP_Silk_PLC.obj..\out\Debug\SKP_Silk_pitch_est_tables.obj..\out\Debug\SKP_Silk_pitch_analysis_core.obj..\out\Debug\SKP_Silk_NSQ_del_dec.obj..\out\Debug\SKP_Silk_NSQ.obj..\out\Debug\SKP_Silk_noise_shape_analysis_FIX.obj..\out\Debug\SKP_Silk_NLSF_VQ_weights_laroia.obj..\out\Debug\SKP_Silk_NLSF_VQ_sum_error_FIX.obj..\out\Debug\SKP_Silk_NLSF_VQ_rate_distortion_FIX.obj..\out\Debug\SKP_Silk_NLSF_stabilize.obj..\out\Debug\SKP_Silk_NLSF_MSVQ_encode_FIX.obj..\out\Debug\SKP_Silk_NLSF_MSVQ_decode.obj..\out\Debug\SKP_Silk_NLSF2A_stable.obj..\out\Debug\SKP_Silk_NLSF2A.obj..\out\Debug\SKP_Silk_MA.obj..\out\Debug\SKP_Silk_LTP_scale_ctrl_FIX.obj..\out\Debug\SKP_Silk_LTP_analysis_filter_FIX.obj..\out\Debug\SKP_Silk_LSF_cos_table.obj..\out\Debug\SKP_Silk_LPC_synthesis_order16.obj..\out\Debug\SKP_Silk_LPC_synthesis_filter.obj..\out\Debug\SKP_Silk_LPC_stabilize.obj..\out\Debug\SKP_Silk_LPC_inv_pred_gain.obj..\out\Debug\SKP_Silk_LP_variable_cutoff.obj..\out\Debug\SKP_Silk_lowpass_short.obj..\out\Debug\SKP_Silk_lowpass_int.obj..\out\Debug\SKP_Silk_log2lin.obj..\out\Debug\SKP_Silk_lin2log.obj..\out\Debug\SKP_Silk_LBRR_reset.obj..\out\Debug\SKP_Silk_k2a_Q16.obj..\out\Debug\SKP_Silk_k2a.obj..\out\Debug\SKP_Silk_interpolate.obj..\out\Debug\SKP_Silk_inner_prod_aligned.obj..\out\Debug\SKP_Silk_init_encoder_FIX.obj..\out\Debug\SKP_Silk_HP_variable_cutoff_FIX.obj..\out\Debug\SKP_Silk_gain_quant.obj..\out\Debug\SKP_Silk_find_pred_coefs_FIX.obj..\out\Debug\SKP_Silk_find_pitch_lags_FIX.obj..\out\Debug\SKP_Silk_find_LTP_FIX.obj..\out\Debug\SKP_Silk_find_LPC_FIX.obj..\out\Debug\SKP_Silk_encode_pulses.obj..\out\Debug\SKP_Silk_encode_parameters_v4.obj..\out\Debug\SKP_Silk_encode_parameters.obj..\out\Debug\SKP_Silk_encode_frame_FIX.obj..\out\Debug\SKP_Silk_enc_API.obj..\out\Debug\SKP_Silk_detect_SWB_input.obj..\out\Debug\SKP_Silk_decoder_set_fs.obj..\out\Debug\SKP_Silk_decode_pulses.obj..\out\Debug\SKP_Silk_decode_parameters_v4.obj..\out\Debug\SKP_Silk_decode_parameters.obj..\out\Debug\SKP_Silk_decode_indices_v4.obj..\out\Debug\SKP_Silk_decode_frame.obj..\out\Debug\SKP_Silk_decode_core.obj..\out\Debug\SKP_Silk_dec_API.obj..\out\Debug\SKP_Silk_create_init_destroy.obj..\out\Debug\SKP_Silk_corrMatrix_FIX.obj..\out\Debug\SKP_Silk_control_codec_FIX.obj..\out\Debug\SKP_Silk_code_signs.obj..\out\Debug\SKP_Silk_CNG.obj..\out\Debug\SKP_Silk_bwexpander_32.obj..\out\Debug\SKP_Silk_bwexpander.obj..\out\Debug\SKP_Silk_burg_modified.obj..\out\Debug\SKP_Silk_biquad_alt.obj..\out\Debug\SKP_Silk_biquad.obj..\out\Debug\SKP_Silk_autocorr.obj..\out\Debug\SKP_Silk_array_maxabs.obj..\out\Debug\SKP_Silk_apply_sine_window.obj..\out\Debug\SKP_Silk_ana_filt_bank_1.obj..\out\Debug\SKP_Silk_allpass_int.obj..\out\Debug\SKP_Silk_A2NLSF.obj /0 1273638391 100666 8557 ` L ї-ъKЂ*.drectveAЄ .debug$SЬх@B.text§БЎ P`.debug$S$,@B.rdataЌ^@@@.data @0Р.rdata@0@.rtc$TMZ*.@0@.rtc$IMZ8<@0@.debug$T\F@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёЁ`J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_VQ_nearest_neighbor_FIX.obj:<!ovovMicrosoft (R) Optimizing Compiler=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_VQ_nearest_neighbor_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tєXprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9%%ѕ§эјжЅZЇњ‹ћЖA’Џ‹ц+7 @#nŽи,ˆ{ѓLj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_vq_nearest_neighbor_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 280 - ^ = $23 $T0 284 - ^ = $24 $T0 288 - ^ = U‹ььSVWНьўџџЙEИЬЬЬЬѓЋ‹E Чџџџ‹E‰EьЧEјы ‹EјƒР‰Eј‹Eј;E$ž‹EП‹UьП+ШЗЩ‹UПB‹UьПR+ТСр Ш‰MШ‹EПH‹UьПB+ШЗЩ‹UПB‹UьПR+ТСр Ш‰MМ‹EПH‹UьПB+Ш‰MАПE ‹Mј‹UП JЏС‰Eрƒ}р}%hjЁƒРPhjшƒФƒјuЬ‹E‹HСљ‹UШСњЏЪ‹E‹Pтџџ‹EШСјЏаСњЪ‰Mд‹E‹HСљПUМЏЪ‹E‹PтџџПEМЏаСњUдб‰Uд‹E‹H Сљ‹UМСњЏЪMд‹E‹P тџџ‹EМСјЏаСњЪ‰Mд‹E‹HСљПUАЏЪ‹E‹PтџџПEАЏаСњUдб‰Uд‹Eдбр‰Eд‹E‹СљПUШЏЪ‹E‹тџџПEШЏаСњUдб‰Uд‹EдСјПMШЏС‹UдтџџПMШЏбСњUра‰Uр‹E‹HСљПUМЏЪ‹E‹PтџџПEМЏаСњЪ‰Mд‹E‹H Сљ‹UМСњЏЪMд‹E‹P тџџ‹EМСјЏаСњЪ‰Mд‹E‹H$СљПUАЏЪ‹E‹P$тџџПEАЏаСњUдб‰Uд‹Eдбр‰Eд‹E‹HСљ‹UШСњЏЪMд‹E‹Pтџџ‹EШСјЏаСњЪ‰Mд‹EдСј‹MШСљЏСEр‹Uдтџџ‹MШСљЏбСњТ‰Eр‹E‹H4Сљ‹UМСњЏЪ‹E‹P4тџџ‹EМСјЏаСњЪ‰Mд‹E‹H8СљПUАЏЪ‹E‹P8тџџПEАЏаСњUдб‰Uд‹Eдбр‰Eд‹E‹H0СљПUМЏЪ‹E‹P0тџџПEМЏаСњUдб‰Uд‹EдСјПMМЏС‹UдтџџПMМЏбСњUра‰Uр‹E‹HLСљПUАЏЪ‹E‹PLтџџПEАЏаСњЪ‰Mд‹Eдбр‰Eд‹E‹HHСљ‹UМСњЏЪMд‹E‹PHтџџ‹EМСјЏаСњЪ‰Mд‹EдСј‹MМСљЏСEр‹Uдтџџ‹MМСљЏбСњТ‰Eр‹E‹H`СљПUАЏЪ‹E‹P`тџџПEАЏаСњЪ‰Mд‹EдСјПMАЏС‹UдтџџПMАЏбСњUра‰Uрy%hjЁƒР:PhjшƒФƒјuЬ‹E ‹Mр;}‹E ‹Mр‰‹E‹Mј‰‹EьƒР ‰EьщMћџџ_^[Ф;ьш‹х]УЭднфЄ­Дѕѕ$§ к ё‹=§щ SKP_Silk_VQ_WMat_EC_FIXРT € tind  trate_dist_Q14 in_Q14 W_Q18 cb_Q14 cl_Q6  mu_Q8 $tL Шџџџtdiff_Q14_01 Аџџџtdiff_Q14_4 јџџџtk рџџџtsum1_Q14 Мџџџtdiff_Q14_23 ьџџџcb_row_Q14 дџџџtsum2_Q16ђX§((L)€/€'0€-1€K3€t4€Ÿ5€В8€Ц:€ёB€ C€ND€€E€ЎF€ЖG€тH€ K€5L€gM€•N€O€ЯP€ћS€*T€XU€`V€ŽW€ЖZ€с[€щ\€]€G`€ra€šc€Сf€Ыg€гh€лl€фm€щn€ X \ Ь а j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_vq_nearest_neighbor_fix.c)sum1_Q14 >= 0!&VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SЬ.text§ .љО 1˜.debug$S$ЦMv  .rdataЌ;њt/-.dataДр:нш.rdataснb| .rtc$TMZЬ.L‹Ђ .rtc$IMZ žz]Б Ш .debug$T \з_SKP_Silk_VQ_WMat_EC_FIX__CrtDbgReportW??_C@_1KM@IGJINFHN@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_VQ_WMat_EC_FIX@@9@9??_C@_1BM@HNONFFPH@?$AAs?$AAu?$AAm?$AA1?$AA_?$AAQ?$AA1?$AA4?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase /50 1273638391 100666 21630 ` L$ї-ъK‡C›.drectveAД .debug$Sѕ…@B.rdata™@0@.textЉЏ P`.debug$ShЭ5@B.rtc$TMZgk@0@.rtc$IMZuy@0@.textGƒ P`.debug$SрЪЊ@B.text2 м'( P`.debug$SДž(R.@B.rdata ќ.@0@.rdata&/@0@.rdata„B/@@@.dataЦ/@0Р.rdata2Ъ/@0@.textGќ/ P`.debug$SфC0'1@B.textяY1H2 P`.debug$S”Ž2"4 @B.textyЄ45 P`.debug$S@15q6@B.text_Ѓ67 P`.debug$Sє 78@B.textрF8 P`.debug$SЌ&9в:@B.text;> P`.debug$S,ј>$A@B.rdata:VA@0@.rdataA@0@.rdataЊA@0@.dataКA@0Р.rdataОA@0@.textGЮA P`.debug$SфBљB@B.debug$T\+C@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёyLJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_VAD.obj:<!ovovMicrosoft (R) Optimizing Compilerэ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_VAD.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёА GtiltWeights"@SA_Method"SA_Parameter+SKP_Silk_VAD_state!wchar_t"SA_AttrTarget usize_t+SKP_Silk_VAD_stateєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆЊWb!Ј?~NЯзѕьЫ[иC-д2ўрм…ьЊ6о ЙОџ„w„љ”m–˜ЊдЉdkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїS(yFiдz<G;1=1•ЬXўrToрџЊtЩзЩ}*Мj_П#ХuХДR†(ЩЄёќ/:ˆзМJntГЬ?З`УД‰ >GO“VРА,пЊ@ў,^žїY†ЗLŽ_Ы'_PѓАз"Ќшš>šљ%?dl9Xndь.gИ§АЅНqHm”{’Џ‹ц+7 @#nŽи,ˆ{ѓч j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_vad.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 220 - ^ = $23 $T0 224 - ^ = $24 $T0 228 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 5248 - ^ = $23 $T0 5252 - ^ = $24 $T0 5256 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 232 - ^ = $23 $T0 236 - ^ = $24 $T0 240 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 272 - ^ = $23 $T0 276 - ^ = $24 $T0 280 - ^ = ˜ œ 0up бџџ бџџU‹ььиSVWН(џџџЙ6ИЬЬЬЬѓЋЧEьjpj‹EPшƒФ ЧEјы ‹EјƒР‰Eјƒ}ј}%j‹MјƒСИ2™їљPшƒФ‹Uј‹M‰D‘\ыЬЧEјы ‹EјƒР‰Eјƒ}ј}3‹Eј‹M‹T\kвd‹Eј‹M‰T<‹Mј‹uИџџџ™ї|Ž<‹Uј‹M‰D‘LыО‹EЧ@lЧEјы ‹EјƒР‰Eјƒ}ј}‹Eј‹MЧD(dыс‹Eь_^[Фи;ьш‹х]У._%ўѕ$иЦ ё7ђDSKP_Silk_VAD_InitиР € 'psSilk_VAD ьџџџtret јџџџtbђ˜(Œ*€+€%.€52€M3€p4€r7€Š8€Ё9€Л:€Н;€Ч>€п?€э@€яB€ђC€ X \ а д U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E ~ ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФ8 ёp0G@.SKP_max_32ФР € ta  tbђ0GЈ$ё€ђ€@ѓ€ %X% \% А% Д% U‹ьИ|шSVWН„ыџџЙИЬЬЬЬѓЋЁ3Х‰EќЧ…Lьџџ} р~%hjЁƒРPhjшƒФƒјuЬ} ~%hjЁƒРPhjшƒФƒјuЬ‹E P єџџQ•@ђџџR… ьџџP‹MQ‹URшƒФ‹E бјP єџџQ•`№џџR… ьџџP‹MƒСQ• ьџџRшƒФ‹E СјP єџџQ•€юџџR… ьџџP‹MƒСQ• ьџџRшƒФ‹E Сј‰…”єџџ‹…”єџџПŒEžьџџбљ‹•”єџџf‰ŒUžьџџ‹…”єџџf‹ŒEžьџџf‰(єџџ‹…”єџџƒш‰…dєџџы‹…dєџџƒш‰…dєџџƒНdєџџ~L‹…dєџџПŒEžьџџбљ‹•dєџџf‰ŒUžьџџ‹…dєџџПŒEžьџџ‹•dєџџП„U ьџџ+С‹dєџџf‰„M ьџџыœ‹EПH8П• ьџџ+бf‰• ьџџ‹Ef‹(єџџf‰H8Ч…Xєџџы‹…XєџџƒР‰…XєџџƒНXєџџ jИ+…XєџџPшƒФ‹U ‹Шгњ‰•”єџџ‹…”єџџСј‰…ˆєџџЧ…|єџџ‹…Xєџџ‹Xєџџ‹U‹LЉŒ…ˆьџџЧ…Lєџџы‹…LєџџƒР‰…LєџџƒНLєџџvЧ…@єџџЧ…dєџџы‹…dєџџƒР‰…dєџџ‹…dєџџ;…ˆєџџ}u‹…XєџџiРрŒ ьџџ‹•dєџџ•|єџџПQСј‰…XьџџП…XьџџПXьџџЏС…@єџџ‰…@єџџy%hjЁƒРBPhjшƒФƒјuЬщnџџџƒНLєџџ}U‹…Xєџџ‹Œ…ˆьџџ@єџџс€t Ч…„ыџџџџџы‹•Xєџџ‹„•ˆьџџ…@єџџ‰…„ыџџ‹Xєџџ‹•„ыџџ‰”ˆьџџыY‹…@єџџбј‹Xєџџ‹”ˆьџџат€t Ч…„ыџџџџџы‹…@єџџбј‹Xєџџ„ˆьџџ‰…„ыџџ‹•Xєџџ‹…„ыџџ‰„•ˆьџџ‹…|єџџ…ˆєџџ‰…|єџџщnўџџ‹…Xєџџ‹M‹•@єџџ‰Tщи§џџ‹EPˆьџџQшƒФЧ…@єџџЧEшЧ…Xєџџы‹…XєџџƒР‰…XєџџƒНXєџџ•‹…Xєџџ‹Xєџџ‹U‹„…ˆьџџ+DŠ<‰…dьџџƒНdьџџŽR‹…Xєџџ‹Œ…ˆьџџс€џu2‹…Xєџџ‹„…ˆьџџСр‹Xєџџ‹U‹LŠ<ƒС™їљ‹•Xєџџ‰„•pьџџы0‹…Xєџџ‹M‹L<СљƒС‹•Xєџџ‹„•ˆьџџ™їљ‹Xєџџ‰„pьџџ‹…Xєџџ‹Œ…pьџџQшƒФ-‰…pєџџП…pєџџПpєџџЏС…@єџџ‰…@єџџНdьџџ}M‹…dьџџPшƒФ‹№СцСўПpєџџЏё‹•dьџџRшƒФСр%џџПpєџџЏССј№‰Еpєџџ‹…Xєџџ‹ …СљП•pєџџЏЪ‹…Xєџџ‹…тџџП…pєџџЏаСњUшб‰Uшы‹…XєџџЧ„…pьџџщOўџџ‹…@єџџ™ƒтТСј‰…@єџџ‹…@єџџPшƒФkРПШ‹U‰ ‹EПkЩ‹UПiРШЏСјL€QшƒФ‰Eє‹EшPшƒФŒ€џџ‹U‰ Ч…dьџџЧ…Xєџџы‹…XєџџƒР‰…XєџџƒНXєџџ}7‹…XєџџƒР‹Xєџџ‹•Xєџџ‹u‹Œˆьџџ+L–<СљЏС…dьџџ‰…dьџџыБƒНdьџџ ‹Eєбј‰EєыZНdьџџ€}N‹…dьџџСрPшƒФ‰…dьџџ‹…dьџџ€СјПMєЏС‹•dьџџТ€тџџПMєЏбСњТ‰Eєhџ‹EєСјPшƒФ‹M ‰‹EєСјПMєЏС‹UєтџџПMєЏбСњТПаkв‹EєСјПMєЏС‹MєсџџПuєЏЮСљјСр Сја‰•4єџџЧ…Xєџџы‹…XєџџƒР‰…XєџџƒНXєџџМ‹…Xєџџ‹Xєџџ‹U‹„…pьџџ+DŠ(СјП4єџџЏС‹•Xєџџ‹Xєџџ‹u‹”•pьџџ+TŽ(тџџП4єџџЏбСњТ‹•Xєџџ‹MD‘(‹•Xєџџ‹M‰D‘(‹…Xєџџ‹M‹T(RшƒФ-kР‰…pєџџ‹…pєџџ-СјPшƒФ‹Xєџџ‹U‰Šщ(џџџ‹…LьџџR‹ЭPшXZ_^[‹Mќ3ЭшФ|;ьш‹х]У єџџ@  ьџџ€ˆьџџpьџџNrgToNoiseRatio_Q8XnrgXscratch N#K@JGFPBW>n=uF~B…>Д9х99.U8#F,B3>7|*4m\Ž\Л е )\Y3h3 \ZUf4‹3Џ2ДMУLам1ш0є/ . -ѕ$2 |Њ, ёћ;2 ,2 FSKP_Silk_VAD_GetSA_Q8|РМ … :ќџџџ       'psSilk_VAD  tpSA_Q8 tpSNR_dB_Q7 tpQuality_Q15 tpTilt_Q15 pIn  framelength єџџџtSA_Q15  ьџџ?X шџџџtinput_tilt dьџџtspeech_nrg |єџџtdec_subframe_offset Lьџџtret pєџџtSNR_Q7 Xєџџtb Xьџџtx_tmp ˆьџџ)Xnrg ”єџџtdecimated_framelength 4єџџtsmooth_coef_Q16  єџџ=scratch Lєџџts @єџџtsumSquared ˆєџџtdec_subframe_length dєџџti (єџџHPstateTmp pьџџ)NrgToNoiseRatio_Q8ђx2 (LlT€,_€6c€dd€’j€Лm€ьp€u€*v€Hw€]x€†y€Єz€а{€в|€щ}€ї‚€„€B‡€Qˆ€[Œ€u€Ž€Ї€а’€ќ“€–€@—€Eš€N›€Ёœ€Ѓž€ќЁ€Ђ€Ѓ€&Є€+Љ€>Ў€HЏ€OА€wБ€—В€ЄД€ЙЕ€щЖ€ыЗ€Л€<О€YС€eУ€ВХ€єЦ€іЧ€Щ€ Ь€!Я€;д€cй€{о€…п€Љс€от€рх€щц€ѓч€џщ€ъ€Mю€fє€Пѕ€чј€Wћ€{§€žў€Ѓ€Љ€ ,X, \, Ї0 Ћ0 Ж/ К/ Х. Щ. д- и- у1 ч1 ђ2 і2 <, @, sumSquared >= 0framelength <= 512j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_vad.cT(20 * 24) >= framelengthU‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФ8 ёq1G@.SKP_min_intФР € ta  tbђ0GЈ$з€и€@й€ UXU \U ДU ИU U‹ььфSVWНџџџЙ9ИЬЬЬЬѓЋƒ}3РыvEрPMьQ‹URшƒФ ‹Eьƒрt ЧEј€ыЧEј†Д‹Mьбљ‹Eјгј‰Eј‹EјСјПMрiЩеПбЏТ‹MјсџџПUрiвеПвЏЪСљMјШ‰Mј‹EјR‹ЭPшXZ_^[Фф;ьш‹х]Уьџџџрџџџfrac_Q7lz5gЄ`ЉMЛШ_д^р]ѕ$яф ёй:яяSKP_Silk_SQRT_APPROXфР$ €     tx рџџџtfrac_Q7 ьџџџtlz јџџџtyђxя lK€N€$O€(R€<T€DU€KV€MW€T[€a^€›`€ža€ \X\ \\ š^ ž^ Љ] ­] И_ М_ Ч` Ы` \ \ U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋ‹EPшƒФ‰Eј‹E ‹Mј‰ƒ}ј}Й+Mј‹Eгјƒр‹M‰ы‹Mјƒщ‹Eгрƒр‹M‰_^[ФЬ;ьш‹х]У#nqѕ$yЬ ‘ ёІ7yeSKP_Silk_CLZ_FRACЬР € tin  tlz tfrac_Q7 јџџџtleadingZerosђXyL;€>€-?€5@€;A€PB€RC€eE€ gXg \g шg ьg U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E%џџt‹EСјPшƒФыыЗEPшƒФƒР_^[ФР;ьш‹х]У0uAuWѕ$_Р  ёi4_KSKP_Silk_CLZ32РР € tin32ђH_<p€r€(s€9t€;u€Kw€ nXn \n Ќn Аn U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјПE…Рu ИщЂПE%џt0ПE%№tf‹EfСј f‰Eы‹EјƒР‰Eјf‹EfСјf‰Eы+ПE%№џt‹EјƒР‰Eјf‹EfСјf‰Eы ‹EјƒР ‰EјПEƒр tПEƒрt‹Eјы%ы‹EјƒРыыПEƒрt ‹EјƒРыы‹EјƒР_^[‹х]Уѕ$рЬ‘ ё{4рй SKP_Silk_CLZ16ЬР € in16 јџџџtout32ђ№рфL€M€%N€-O€7R€BS€MT€YU€[V€dW€pY€rZ€}[€†\€’]€”^€b€Іc€Џd€Дe€Жf€Оg€Рh€Щi€бj€гk€йm€ uXu \u Мu Рu U‹ьь SVWНєўџџЙCИЬЬЬЬѓЋ‹E xlш}‹E ‹HlСљƒСИџ™їљ‰EМыЧEМЧEјы ‹EјƒР‰Eјƒ}ј‹Eј‹M ‹T<‰Uьƒ}ь}%hjЁƒРPhjшƒФƒјuЬ‹Eј‹M‹‹Eј‹M T\т€t Ч…єўџџџџџы‹Uј‹E‹ ‹Uј‹E L\‰єўџџ‹єўџџ‰Mрƒ}р%hjЁƒРPhjшƒФƒјuЬИџџџ™ї}р‰Eдƒ}д}%hjЁƒРPhjшƒФƒјuЬ‹EьСр9Eр~ ЧEШ€щŽ‹Eр;Eь} ЧEШы}‹EдСјПMьЏС‹UдтџџПMьЏбСњТ‹UьСњƒТбњЏUдТСјСр ‹MдСљПUьЏЪ‹UдтџџПuьЏжСњЪ‹UьСњƒТбњЏUдЪсџџСс СљС‰EШ‹EМP‹MШQшƒФ‰EШ‹Eј‹M ‹Uд+TLСњПEШЏа‹Mј‹E ‹uд+tˆLцџџПMШЏёСўж‹Eј‹M TL‹Eј‹M ‰TL‹Eј‹M ƒ|L}&hj‹ƒТ'RhjшƒФƒјuЬ‹Mј‹u Иџџџ™ї|ŽL‰Eьƒ}ь}%hjЁƒР+PhjшƒФƒјuЬ}ьџџџ} ‹Eь‰…єўџџы Ч…єўџџџџџ‹єўџџ‰Mь‹Eј‹M ‹Uь‰T<щ^§џџ‹E ‹HlƒС‹U ‰Jl_^[Ф ;ьш‹х]УzŒŠB‘>юˆѕŒўB>%„,Œ5B<>ї—Y€aŒjBq>˜ŸŒЈBЏ>ѕ$ u  ёђA8SKP_Silk_VAD_GetNoiseLevels РL € pX  'psSilk_VAD Шџџџtcoef јџџџtk ьџџџtnl дџџџtinv_nrg рџџџtnrg Мџџџtmin_coefђј(ь €€*€A€C€J€f€s€ž€ч€ €!€I$€T%€`&€h'€o(€q)€ю-€0€K1€~4€‘5€М8€у;€№<€ѕ?€@€ |X| \| 4| 8| psSilk_VAD->inv_NL[ k ] >= 0inv_nrg >= 0nrg > 0 nl >= 0U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E ~ ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФ8 ёq1G@.SKP_max_intФР € ta  tbђ0GЈ$щ€ъ€@ы€ —X— \— Д— И— VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SїЌЎв.rdataY•y/.textH3№сmН<.debug$Sh‘žKУ _memset $ .rtc$TMZЬ.L3J .rtc$IMZžz]Yp .textGСв Uмtі€.debug$S рe=њx .text 2 (~c™{и4.debug$S Д ` (x‹ $LN44 $LN43# $LN42( $LN41* $LN45р $LN46и Ђ Е .rdata  Ў­LCЧ 7 .rdata &? QzQ а .rdata„~Рр.dataѕ˜oD›.rdata2а]8Чo‚  __chkstk .textGиьиоп„[Ќ.debug$SфкJаˆД .textяR-ЄTŒІђ.debug$S” їz>}С $LN7ф$LN6ь$LN8Ь$LN9Ф.textyУ‹f&‚нm.debug$S@Stёз .text_йIѕ=vЄёC.debug$Sє:Яq‘ъ .textр}BИ#u‘ћ.debug$SЌбЛ5сњ .textЭЊдѕёm9W.debug$S,._  .rdata:ћщcf'.rdataMWЛф.rdataK6•fE.data SŠnŠ .rdata!`ЗЏ8М!.text"GСв UdЈЏ.debug$S#ф"ПVf" .debug$T$\_tiltWeights_SKP_Silk_VAD_Init__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_max_32_SKP_Silk_VAD_GetSA_Q8_SKP_Silk_sigm_Q15_SKP_Silk_lin2log??_C@_1CA@KFLJAHPM@?$AAs?$AAu?$AAm?$AAS?$AAq?$AAu?$AAa?$AAr?$AAe?$AAd?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_Silk_ana_filt_bank_1??_C@_1CG@BNFHGOHD@?$AAf?$AAr?$AAa?$AAm?$AAe?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA5?$AA1?$AA2?$AA?$AA@__CrtDbgReportW??_C@_1IE@CCLGAEPI@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_VAD_GetSA_Q8@@9@9??_C@_1DC@NICFFDPC@?$AA?$CI?$AA2?$AA0?$AA?5?$AA?$CK?$AA?5?$AA2?$AA4?$AA?$CJ?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAf?$AAr?$AAa?$AAm?$AAe?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?$AA@___security_cookie@__security_check_cookie@4@_RTC_CheckStackVars@8_SKP_min_int_SKP_Silk_SQRT_APPROX_SKP_Silk_CLZ_FRAC_SKP_Silk_CLZ32_SKP_Silk_CLZ16_SKP_Silk_VAD_GetNoiseLevels??_C@_1DK@FPECHEBI@?$AAp?$AAs?$AAS?$AAi?$AAl?$AAk?$AA_?$AAV?$AAA?$AAD?$AA?9?$AA?$DO?$AAi?$AAn?$AAv?$AA_?$AAN?$AAL?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BK@OLBABGIA@?$AAi?$AAn?$AAv?$AA_?$AAn?$AAr?$AAg?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BA@HFNBICOB@?$AAn?$AAr?$AAg?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@?__LINE__Var@?1??SKP_Silk_VAD_GetNoiseLevels@@9@9??_C@_1BA@CLOLADMK@?$AAn?$AAl?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_max_int/80 1273638391 100666 4686 ` Lї-ъKН.drectveAД .debug$Sјѕэ@B.rdata8)@0@.debug$T\a@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё—[J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_tables_type_offset.obj:<!ovovMicrosoft (R) Optimizing Compilerќ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_tables_type_offset.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёт% ISKP_Silk_type_offset_CDF+ JSKP_Silk_type_offset_joint_CDF, SKP_Silk_type_offset_CDF_offset"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tєрprХО)ж$olŽг>u,Foьar6Z<Ѓ:…QЅB ‹>Œ^ЁA^ŠћsM,uОЭмз$?яюЬqўDьDьАШ~е*Јн­Wыћ%iАлT>№x гbќ:Tи™Ж+Ы ™kЈяЉЌŸ"+ќqЅ’СмспU#[Т)oњ mњюQл'f ЊWb!Ј?~NЯзѕьc[иC-д2ўрм…ьЊ6оЂЙОџ„w„љ”m–˜ЊдЉќГ‘МКGƒQйЛyјs‡Іk>љГ#u8^s.йxХЙSUжп„ьє9v[7Œ{њnс%к™ЮkhHPTЊŒ3їГГјїЬXўrToрџЊtЩRQq””п"ј–{*ї~ЃАз"Ќшš>šљ%?dlщ’Џ‹ц+7 @#nŽи,ˆ{4(yFiдz<G;1=1ѓvj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_type_offset.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hД И л п   ’’F ДЌџџVс.я–ѓџџЊGƒœ‹ЊџџІXз^ГŠџџГ/в2џџVОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sјѓ3dљ.rdata8^]Ѓ ?.debug$T\__SKP_Silk_type_offset_CDF_SKP_Silk_type_offset_CDF_offset_SKP_Silk_type_offset_joint_CDF/125 1273638391 100666 4578 ` Lї-ъKН.drectveAД .debug$S€ѕu@B.rdataи‰@@@.debug$T\a@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‰TJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_tables_sign.obj:<!ovovMicrosoft (R) Optimizing Compilerѕ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_tables_sign.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё€ LSKP_Silk_sign_CDF"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tєрprХО)ж$olŽг>u,Foьar6Z<Ѓ:…QЅB ‹>Œ^ЁA^ŠћsM,uОЭмз$?яюЬqўDьDьАШ~е*Јн­Wыћ%iАлT>№x гbќ:Tи™Ж+Ы ™kЈяЉЌŸ"+ќqЅ’СмспU#[Т)oњ mњюQл'f ЊWb!Ј?~NЯзѕьc[иC-д2ўрм…ьЊ6оЂЙОџ„w„љ”m–˜ЊдЉќГ‘МКGƒQйЛyјs‡Іk>љГ#u8^s.йxХЙSUжп„ьє9v[7Œ{њnс%к™ЮkhHPTЊŒ3їГГјїЬXўrToрџЊtЩRЮЁыѓc.цBЧВ+Л­œАз"Ќшš>šљ%?dlт’Џ‹ц+7 @#nŽи,ˆ{-(yFiдz<G;1=1ѓoj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_sign.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hЈ Ќ а“џџPџџ›џџш‰џџ›‡џџЏŠџџс†џџј…џџр„џџ+Кџџ‘ЏџџІџџ+џџЉ–џџ>џџл“џџ{‘џџѓŽџџ’ЉџџYЌџџwЈџџ џџН—џџёџџl•џџЃ“џџџџчџџNйџџ^ЪџџЩЛџџьЏџџ НџџQЋџџЖІџџК џџVОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S€Шhћ.rdataиngИw.debug$T\_SKP_Silk_sign_CDF/163 1273638391 100666 7374 ` Lї-ъK‡.drectveAД .debug$Sѕ…@B.rdataЖu@@@.debug$T\+@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёЁ`J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_tables_pulses_per_block.obj:<!ovovMicrosoft (R) Optimizing Compiler=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_tables_pulses_per_block.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёk* NSKP_Silk_pulses_per_block_CDF1 SKP_Silk_pulses_per_block_CDF_offset. PSKP_Silk_pulses_per_block_BITS_Q6% SSKP_Silk_rate_levels_CDF, SKP_Silk_rate_levels_CDF_offset) VSKP_Silk_rate_levels_BITS_Q6& GSKP_Silk_max_pulses_table' WSKP_Silk_shell_code_table0' XSKP_Silk_shell_code_table1' YSKP_Silk_shell_code_table2' TSKP_Silk_shell_code_table3. QSKP_Silk_shell_code_table_offsets"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tєрprХО)ж$olŽг>u,Foьar6Z<Ѓ:…QЅB ‹>Œ^ЁA^ŠћsM,uОЭмз$?яюЬqўDьDьАШ~е*Јн­Wыћ%iАлT>№x гbќ:Tи™Ж+Ы ™kЈяЉЌŸ"+ќqЅ’СмспU#[Т)oњ mњюQл'f ЊWb!Ј?~NЯзѕьc[иC-д2ўрм…ьЊ6оЂЙОџ„w„љ”m–˜ЊдЉќГ‘МКGƒQйЛyјs‡Іk>љГ#u8^s.йxХЙSUжп„ьє9v[7Œ{њnс%к™ЮkhHPTЊŒ3їГГјїЬXўrToрџЊtЩRB’р :уєѕЫБПљs˜SЈАз"Ќшš>šљ%?dlю’Џ‹ц+7 @#nŽи,ˆ{9(yFiдz<G;1=1ѓ{j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_pulses_per_block.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hР Ф ь №  # O S v z Є Ј Я г ї ћ  $ I M r v › Ÿ   И=№Nќeў§ўHџџЊџТџаџнџфџъџьџ№џёџѓџєџіџџџgКГхmі7ќYў5џџТџкџчџэџ№џѓџѕџіџјџљџњџџџ%nm5Гzп`єcќьўЇџмџчџяџёџѕџіџљџњџћџќџўџџџ Ў0tef›ўХ,сU№!јњћё§чў_џЁџПџаџйџсџхџшџџџш€ O$M }ШЋЯч6єењј§BџОџчџыџѕџљџћџўџџџuBХvlŸМкаNпХщв№™ѕФјпњ?ќ+§П§ўWўwўўŸўџџВ ƒ х=„^,~Ќ™TА•Ттам–фыеяiѓљѕВїујЂљ8њџџXбы v(:d_!‡ˆЋЩ‚оŽь(ѕ%њЬќ-ўюўNџvџŒџџџ.юо4ЗNгjх†OЁŠИfЫмйZфныя№Eє…іјџџ[Љt9ЉnуЃ”Ыф!ё.јЫћœ§DўŒўžўЎўГўЛўџџŒМ0qŽЅл L[Р€РР5TgЄќ^К_—л[››РРkБuxЂч@Њ‘#@Р€›РЖ’ІЯB„ТF}Цњ5@€›оФ/иЊ™žЖмQ–щCЉ€+€Р›}“ЊЪш 'Lp–Лу3^†РуѕушШОСЮрє !;ToŠЉЮ№1^cЌ?ђЪВЌДЧх 9lІт[ЋуJѕТl4чдЬЬвоё 'Fj‘ЕеAе­19O`zŠјВ™с€іџџi!С[ПŒзДбЧмчЙњџџBЇЧЄяВч0М‰™ЋЬ)эfьџџ!%Ілџџ§Ь}ёџџэO?nОРїџџ­ц$}Шй„љџџWJUUEБ чКњџџГџџю1Юџџя™уэџџФ ™CuЛ‰їџџ3Y(Ѓ~‰ићџџЭ–йS–ЉЧцoќџџщЭ97|Т}яџџџџ`ПTv §лџџџџџџgџџo8рЦџџKсчџџо аHйЖ„ѕџџв)§~щзћџџви SРЊщ%§џџќmЮ6~1ШаёLўџџSk 'ЩZ]Ÿ”и!іфўџџспB {†Зcхшљџџџџь4-ўY“Ы;яџџџџџџтМAьv,Џрџџџџџџџџm'ГY{—šдџџџџџџџџџџD~џџр;aСџџ2X~cтџџhњK4ББёџџ" В-Г~›віјџџтЂUмЇэхNќџџŠ/8~$ЧёўџџјЮ р%рZљЁuлїуўџџCайAЯ|zМ шЦњPџџџаї=э/З^Х›ђа>№Oќ‚џџџn4(9$™H}hГS혺ƒ§Ыџџџ) 9D7a‚•ЦЦциїCўЩџџџткЖЈ(,JъwrЊйгœэwњџџџџџюЫ Б№9п_АЛЙ3оwѓъќџџџџџџGVъ)TKеrІЁoЬkщZљџџџџџџџџб z—8г^№‰ Д!к7ђџџџџџџџџџџe%LIћoZШъџџџџџџџџџџџџ#3P[нŒѓРГчџџџџџџџџџџџџџџ !*4?KXfu…–ЈЛVОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SJoƒі.rdataЖAжI5>ДdИ‡ ЁHТLрpќИ 4№P.debug$T\s_SKP_Silk_max_pulses_table_SKP_Silk_pulses_per_block_CDF_SKP_Silk_pulses_per_block_CDF_offset_SKP_Silk_pulses_per_block_BITS_Q6_SKP_Silk_rate_levels_CDF_SKP_Silk_rate_levels_CDF_offset_SKP_Silk_rate_levels_BITS_Q6_SKP_Silk_shell_code_table0_SKP_Silk_shell_code_table1_SKP_Silk_shell_code_table2_SKP_Silk_shell_code_table3_SKP_Silk_shell_code_table_offsets/213 1273638391 100666 7982 ` Lї-ъK}.drectveAД .debug$SиѕЭ@B.rdata<х@@@.debug$T\!@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё“YJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_tables_pitch_lag.obj:<!ovovMicrosoft (R) Optimizing Compilerњ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_tables_pitch_lag.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёЫ& `SKP_Silk_pitch_lag_NB_CDF- SKP_Silk_pitch_lag_NB_CDF_offset& [SKP_Silk_pitch_lag_MB_CDF- SKP_Silk_pitch_lag_MB_CDF_offset& ]SKP_Silk_pitch_lag_WB_CDF- SKP_Silk_pitch_lag_WB_CDF_offset' ZSKP_Silk_pitch_lag_SWB_CDF. SKP_Silk_pitch_lag_SWB_CDF_offset' \SKP_Silk_pitch_contour_CDF. SKP_Silk_pitch_contour_CDF_offset* ^SKP_Silk_pitch_contour_NB_CDF1 SKP_Silk_pitch_contour_NB_CDF_offset% _SKP_Silk_pitch_delta_CDF, SKP_Silk_pitch_delta_CDF_offset"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tєрprХО)ж$olŽг>u,Foьar6Z<Ѓ:…QЅB ‹>Œ^ЁA^ŠћsM,uОЭмз$?яюЬqўDьDьАШ~е*Јн­Wыћ%iАлT>№x гbќ:Tи™Ж+Ы ™kЈяЉЌŸ"+ќqЅ’СмспU#[Т)oњ mњюQл'f ЊWb!Ј?~NЯзѕьc[иC-д2ўрм…ьЊ6оЂЙОџ„w„љ”m–˜ЊдЉќГ‘МКGƒQйЛyјs‡Іk>љГ#u8^s.йxХЙSUжп„ьє9v[7Œ{њnс%к™ЮkhHPTЊŒ3їГГјїЬXўrToрџЊtЩRУјД0F1€Џ3i9†Ц5–ЁАз"Ќшš>šљ%?dlч’Џ‹ц+7 @#nŽи,ˆ{2(yFiдz<G;1=1ѓtj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_pitch_lag.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hА Д и м   / 3 ^ b † Š Е Й о т   7 ; g k “ — Ц Ъ э ё Т‹`IKoМ9№ ч (КЃщ™#б'і,n2+8!>ADyJИPьV]їbВh.nesSxј|Vs…T‰…х“*—[š› ВЃШІнЉёЌАГ&Ж.Й/М%ПТыФЖЧpЪЭЉЯ'вдуж йHлZнVп=суЪфqцшщцъ8ьvэŸюГяД№ ё{ђCѓњѓЁє:ѕЦѕEіКі%їˆїуї8ј‡јвјљ\љљлљњQњŠњТњјњ-ћbћ–ћЩћќћ.ќ`ќ‘ќТќђќ#§S§ƒ§В§т§ў@ўoўўЫўјў%џQџ}џЉџдџџџ+m8›Hd=u+ˆ•ž*НМд™ціџџ@„ ’ЎFхE рЩШр  e и o-#`Ьf0)"P%Ѕ($,Ы/–37‡;Ё?ЫCўG3LcPŠT X \†`MdђgskЮnru§wУzh}яZ‚Ќ„щ†‰.‹=CB‘<“3•)—™› ŸЁЃЅ Ї ЉЋ­ЏБГЕЗѓИмКПМ›ОpР<ТФНХqЧЩОЪXЬъЭrЯђаjвйг@еžжєзBйˆкХлћм)оOпmрƒс‘т—у”фŠхvцZч6шщбщ’ъIыјыžь<эвэ`ючюhятяV№Ф№.ё“ёєёQђЋђѓUѓІѓєѓ@єŠєвєѕ\ѕŸѕсѕ!і`іŸіміїTїїЪїј=јuј­јхјљSљ‰љПљєљ)њ^њ“њЧњќњ0ћdћ™ћЭћќ5ќiќќбќ§8§k§§Я§ў0ўaўўПўюўџJџwџЅџвџџџVjеA­‹ўtэl№{ ЉNџМ‡ b M K \ ‚О€ЊiFB\–я!h$'И),~/Š2А5ь8<<ž?C‰F J‘MQ™TXƒ[х^5bqe–hЃk–nmq(tЦvHyЎ{ј}(€?‚?„)†џ‡Ф‰x‹ЙŽJв‘S“Я”G–М—0™ЄšœŒŸ| їЁtЃѕЄwІ§Ї…ЉЋšЌ'ЎЖЏEБдВcДђЕЗ Й•КМЁН"П РТУХnЦжЧ9Щ–ЪюЫ@ЭЮдЯбRвˆгЙдфе з*иEйZкjлtмyнyоtпiрYсDт*у фцфМхŽцZч"шфшЂщZъ ыМыeь эЈэAюеюdяэяq№я№hёмёJђГђѓvѓбѓ'єyєЧєѕWѕšѕкѕіQі‰іОіёі"їRїїЌїжїј(јOјuјšјОјсјљ%љGљgљ‡љЇљЦљхљњ!њ?њ\њyњ–њГњЯњыњћ#ћ?ћ[ћvћ‘ћЌћЧћсћќћќ0ќIќbќ{ќ”ќ­ќЦќоќіќ§'§?§W§n§†§ž§Ж§Ю§ц§ў§ў-ўEў\ўsў‹ўЂўЙўЯўцўќўџ)џ?џTџjџ€џ•џЊџПџеџъџџџ€§љѕ№ъулгЩО В І ™  ujaZUSTX_kzŽЅСт. [!‹"О#ѕ$/&l'Ћ(э)1+w,О-/R01ъ284‡5и6)8|9а:&<~=з>3@‘AёBTDКE$G‘HJvKяLkNьOqQћRˆTVЏWHYхZ„\'^Ь_sacЦdqfhЧipkmРneprІsBuлvoxџy‹{}”~€‹џ‚n„и…=‡ˆј‰O‹ Œэ6yИ‘ѓ’)”Z•‡–Џ—в˜ё™ ›"œ4AžJŸO OЁLЂDЃ9Є*ЅІЇщЇЭЈЎЉŒЊhЋAЌ­э­РЎ‘ЏaА/Б§БЩВ”Г_Д)ЕђЕМЖ…ЗNИЙсЙЋКuЛ@М НзНЄОqП?РСоСЏТУSФ&ХњХЮЦЃЧxШMЩ#ЪљЪЯЫЄЬyЭMЮ!ЯєЯЦа—бgв5гдЭд—е_ж&зъз­иnй-къкІл_мнЫно0пппŒр6спс…т(уЪуiфхŸх7цЬц^чэчzшщ‹щъъы‰ыьuьчьUэСэ)юŽюяюNяЉя№W№Љ№љ№Eёёжёђ]ђђкђѓOѓ‡ѓМѓ№ѓ"єSє‚єАєнєѕ2ѕ[ѕ„ѕЋѕбѕїѕі@іcі†іЉіЪіьі ї-їLїlї‹їЊїШїцїј!ј>јZјwј“јЏјЪјцјљљ6љPљjљƒљœљЕљЮљчљџљњ.њEњ\њsњŠњ њЖњЬњсњїњ ћ!ћ6ћJћ_ћsћ‡ћ›ћЏћТћжћщћќћќ!ќ4ќFќXќiќ{ќŒќќЎќОќЯќпќюќўќ§§,§;§J§Y§h§v§…§“§Ђ§А§П§Ю§м§ы§њ§ ўў'ў6ўFўUўeўuў…ў”ўЄўДўФўдўфўєўџџ"џ2џAџPџ_џnџ}џ‹џšџЉџЗџХџдџтџёџџџtK#,T ј oШХД$ѕ,Ѕ7вD)Qц^Xm\Єœ)­ЦЙїХŠЯйІрŽц}ыЁяlѓЄіљAћйќKўџџWфсa­ €Š*Е>X^ vx‡U”еЅМЊЏЭВ~ЕЯЗџџ VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sи}bЌ.rdata<[A` †(Ё$УАоЌИД?Р[М~˜8.debug$T\Й_SKP_Silk_pitch_lag_NB_CDF_SKP_Silk_pitch_lag_NB_CDF_offset_SKP_Silk_pitch_contour_NB_CDF_SKP_Silk_pitch_contour_NB_CDF_offset_SKP_Silk_pitch_lag_MB_CDF_SKP_Silk_pitch_lag_MB_CDF_offset_SKP_Silk_pitch_lag_WB_CDF_SKP_Silk_pitch_lag_WB_CDF_offset_SKP_Silk_pitch_lag_SWB_CDF_SKP_Silk_pitch_lag_SWB_CDF_offset_SKP_Silk_pitch_contour_CDF_SKP_Silk_pitch_contour_CDF_offset_SKP_Silk_pitch_delta_CDF_SKP_Silk_pitch_delta_CDF_offset/256 1273638391 100666 8519 ` Lї-ъK2.drectveAД .debug$S№ѕхH@B.rdataєЕ@0@.debug$T\Љ@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‹UJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_tables_other.obj:<!ovovMicrosoft (R) Optimizing Compilerі=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_tables_other.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёю KSKP_Silk_lsb_CDF" bSKP_Silk_LTPscale_CDF% SKP_Silk_LTPscale_offset) fSKP_Silk_LTPScales_table_Q14! KSKP_Silk_vadflag_CDF$ SKP_Silk_vadflag_offset) GSKP_Silk_SamplingRates_table' ISKP_Silk_SamplingRates_CDF* SKP_Silk_SamplingRates_offset3 cSKP_Silk_NLSF_interpolation_factor_CDF6 SKP_Silk_NLSF_interpolation_factor_offset aTargetRate_table_NB aTargetRate_table_MB aTargetRate_table_WB! aTargetRate_table_SWB aSNR_table_Q1, GSNR_table_one_bit_per_sample_Q7) iSKP_Silk_SWB_detect_B_HP_Q13) eSKP_Silk_SWB_detect_A_HP_Q13! dSKP_Silk_Dec_A_HP_24! fSKP_Silk_Dec_B_HP_24! dSKP_Silk_Dec_A_HP_16! fSKP_Silk_Dec_B_HP_16! dSKP_Silk_Dec_A_HP_12! fSKP_Silk_Dec_B_HP_12 dSKP_Silk_Dec_A_HP_8 fSKP_Silk_Dec_B_HP_8* ISKP_Silk_FrameTermination_CDF- SKP_Silk_FrameTermination_offset- cSKP_Silk_FrameTermination_v4_CDF0 SKP_Silk_FrameTermination_v4_offset ISKP_Silk_Seed_CDF! SKP_Silk_Seed_offset. lSKP_Silk_Quantization_Offsets_Q10) hSKP_Silk_Transition_LP_B_Q28) kSKP_Silk_Transition_LP_A_Q28"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tєрprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪљГ#u8^s.йxХЙSUжпkЈяЉЌŸ"+ќqЅ’СмсVU#[Т)oњ mњюQл'f—ЊWb!Ј?~NЯзѕьк[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉsoьar6Z<Ѓ:…QЅB ИГ‘МКGƒQйЛyјs‡Іkњмз$?яюЬqўDьDьАШ?>№x гbќ:Tи™Ж+Ы „ьє9v[7Œ{њnс%к™ЮkhHPTЊŒ3їГГјїЬXўrToрџЊtЩRАз"Ќшš>šљ%?dl˜щL~[џЊЮ.bыи—г‡]у’Џ‹ц+7 @#nŽи,ˆ{.(yFiдz<G;1=1ѓpj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_other.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hЈ Ќ Ч Ы ы я , , = A ` d † Š Б! Е! к" о" # # ;$ ?$ s w • ™ З Л й н ќ      E  I  p  t  ›  Ÿ  О  Т  с  х      '  +  J  N  m  q    “  Б % Е % н & с & '  ' ; ( ? ( m ) q )  * ‘ * А + Д + р - ф - .  . @(#ј*Ш2€>№U †'р.А6hBR`m †ј*А6hBRe Œ †Ш2€>8JЈa}АГ †#'+/6;РРh ” ?Lќ??#џ??h?9дS2ЉB-чЄР^@€С@С@€С@UСГ@€С@ѓС@€С@@œџџ}€Лџџ№Uџџ €>}€Лџџzџ!KЮxџџ NШЏРкџџ33ff™™ЬЬџџ@€Рџџ ddЭ<Э, gђVЭф gђuR‚ YšuR‚ F1 эbF1 кзљЦ­кз"ЖRкњЄ "ЖRFѓ.+уKf€, кaHэœєь0 уЅэЄ пkVОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S№H6{ыЈ.rdataєqHЋь .@C`Y€g ˆАІФФакд№мрш2ьHє]јr„›ЕЫф 0<=@eLPЏ\б`ѓlp+|A€dˆ‚ Ь.debug$T\О_TargetRate_table_NB_TargetRate_table_MB_TargetRate_table_WB_TargetRate_table_SWB_SNR_table_Q1_SNR_table_one_bit_per_sample_Q7_SKP_Silk_SWB_detect_B_HP_Q13_SKP_Silk_SWB_detect_A_HP_Q13_SKP_Silk_Dec_A_HP_24_SKP_Silk_Dec_B_HP_24_SKP_Silk_Dec_A_HP_16_SKP_Silk_Dec_B_HP_16_SKP_Silk_Dec_A_HP_12_SKP_Silk_Dec_B_HP_12_SKP_Silk_Dec_A_HP_8_SKP_Silk_Dec_B_HP_8_SKP_Silk_lsb_CDF_SKP_Silk_LTPscale_CDF_SKP_Silk_LTPscale_offset_SKP_Silk_vadflag_CDF_SKP_Silk_vadflag_offset_SKP_Silk_SamplingRates_table_SKP_Silk_SamplingRates_CDF_SKP_Silk_SamplingRates_offset_SKP_Silk_NLSF_interpolation_factor_CDF_SKP_Silk_NLSF_interpolation_factor_offset_SKP_Silk_FrameTermination_CDF_SKP_Silk_FrameTermination_offset_SKP_Silk_FrameTermination_v4_CDF_SKP_Silk_FrameTermination_v4_offset_SKP_Silk_Seed_CDF_SKP_Silk_Seed_offset_SKP_Silk_Quantization_Offsets_Q10_SKP_Silk_LTPScales_table_Q14_SKP_Silk_Transition_LP_B_Q28_SKP_Silk_Transition_LP_A_Q28 /295 1273638391 100666 9801 ` Lї-ъKЃ#.drectveAД .debug$Stѕi@B.rdataр щ!#@@@.debug$T\G#@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё—[J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_tables_NLSF_CB1_16.obj:<!ovovMicrosoft (R) Optimizing Compilerќ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_tables_NLSF_CB1_16.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёR* mSKP_Silk_NLSF_MSVQ_CB1_16_CDF4 ~SKP_Silk_NLSF_MSVQ_CB1_16_CDF_start_ptr5 SKP_Silk_NLSF_MSVQ_CB1_16_CDF_middle_idx/ tSKP_Silk_NLSF_MSVQ_CB1_16_rates_Q55 nSKP_Silk_NLSF_MSVQ_CB1_16_ndelta_min_Q15* }SKP_Silk_NLSF_MSVQ_CB1_16_Q15, qSKP_Silk_NLSF_CB1_16_Stage_info! |SKP_Silk_NLSF_CB1_16"@SA_Method"SA_ParametersSKP_Silk_NLSF_CBSsSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_struct|SKP_Silk_NLSF_CB_struct!wchar_t"SA_AttrTarget usize_tєрprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪљГ#u8^s.йxХЙSUжпkЈяЉЌŸ"+ќqЅ’СмсVU#[Т)oњ mњюQл'f—ЊWb!Ј?~NЯзѕьк[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉsхXч?Хn§эНЧw™яYrФГ‘МКGƒQйЛyјs‡Іkмз$?яюЬqўDьDьАШK>№x гbќ:Tи™Ж+Ы ьє9v[7Œ{њnс%к™кkhHPTЊŒ3їГГјїЬXўrToрџЊtЩ^Аз"Ќшš>šљ%?dlЄY[ƒt…іА`Х§yu"$ѕ’Џ‹ц+7 @#nŽи,ˆ{@(yFiдz<G;1=1ѓ‚j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_nlsf_cb1_16.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_nlsf_cb1_16.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hД И р ф   M Q ~ ‚ Е Й с х   ›JMiЏwТ…Њ’џЉЕГ=НЩТTШСЭзвЕзyмГпЉтх`чxщXы9эяњ№лђЛєœі}ј]њ>ќўџџˆpw—бЖIЪNкшlєџџ№jя–ќЏ ٘иц‚єџџ{‚‘š.А)Угgт\ёџџћd\ЉдКьЫœкш+єџџх…‘xБ‡Ф6д;уёџџƒЙ›іАœУеnфЯђџџ5kК‰йžјГЂШммžюџџ@V;xЩMЈбОUехъџџi4єT~uW•/ЕcЯ{шџџBTfxŠœЎРв9b…†Š‘“˜ББВЕЗИЪЮзкоуууууууууууу&Waw€‡Œ(Qkk††mrx€‚ƒ„+=|}„ˆŽnvxƒ……lsy|‚…‰(bsstu{|2]lnpprsI__``ikn”<DuVy|˜™Я—ся~Зє ЯTD#К*†2+:%BІI8QьXБ`#hвo%w№Й ^ ;'4/7і>ѓFN”VШ^ЬfЉn+v X;фŒ#>+ 3?<~EлMUVт^љfSoвvkЌ ~о“&Ђ.ё5§=BEьMЫTб\Пc"kѕpдКд№ ў(B1f9AWI?QўXФ`:hзo4w ф§1'i.=6Ж=WExLъSьZEb‚iЁpŸwц •}В!‚(Ж1)9™?МEžMрSкY5`Vh8mМѓ {r%"Ќ(љ/Ф6b>;EИLTА[=dRmv{ю хиМ$д+ц2І9/AёGzOKVї]dfФnНvi Dw:&›,‡2 8%=жCџIQЭWx_зf|n"v2 ~Є“#L-n6e>EжJ%PчU|[Zb8izp?w+n X—nЖ$[+)3Я9C@H—QТ[юdŽmvQЋ  ?!љ*Y3с:р@ЮFЕKАQOXT`,hїofwРX ц 5'Ё,­2 9.AЈHKPW‚_Јf.n}uq аЌё )е1р:CuLџS![Ю`{f)lrcxє) бљ$Œ.и7Ж@№H@PW]GcЊiАpWw‘m{S„(Ђ/Я7)=DАI!QОVх]wcїjКoБщ ™FЗ 'r-р3ц:oA H—NЧU2]pfrrЎW 4џ/&{/I9и?ЩFNM5T?YЄ_Ždїk'pd G­m&-Œ6“>ЦE”N/Wх]neЖmкt>zt ъ J'-3u8T>ЫCѓIВOЇVL]udKl]! a„щ %B*с1j=:JЕS‚\Deчm}v<o ќо!y'Ю,"2Ї6Т:AяEQУbzl vѕ“]Ет&е/‰7>oE’N*WVeСfsgЌh‘o…€є9'9-Щ5T=DЇM\к_|b]dp+wШ*JЫЅ$€18U=AЈErQeYe`YgKoќvW ”H+#1T3B7> HpRбYa`2jюmЌsБюMvо!~'Ъ1!:EAчGžN[Vu^VfMnЙuL!Ї h%-X:‘EoG)I9JwR7`фgDpГwкHЖJ%’%ч%–'I6‰?HkPMXВ`riХqxx0M€ђ%Ў,Ч5З=,KдUФYŒZЋ\2dНqmyВx@c&u.7v= DOL˜WП`>rшt4wуxšџ‡џсџњџўџюџќџўџєџ№џєџФџ‚џŸўТ§[§o§—§ўwўЄўыўџ\џšџКџсџ!{ƒ']lтКЦ[B+ ШЗ і<_џ§ўџџцў5џEџeџPџ:џNџ Њ‰a+аЖўХ§џќ‡§Сўеџ_ijthџtџƒџ­KлџлўŸ§юќAќвќ{§џЅџ$ѕџ›џщўџиџZЅzPчC4'шў”ўЌўЕўфў љpмs’џ5џKџrџ'цџ•џЄџ_џyџ}џЈџ`џdџЕџеџмџњџпџ!Мўaў”џ|ПЫХm˜АОzeŸ—œр{МОЪW_6ф…,K?Ќџ'уџ#ЂџџћўžўMшџoџГўgўlўЋ§ўдўŽPœx‚ЭџлџГџTџKџaџlџИџТџўqЗ§ЭћCќ_ў=џ ЈџSџЅџ6b_фџХё§“§zXџ“5,P;Œ˜xj^џVџХўb5Œ:пџШўШ§Ф§†ў•џœ]џЉџИџлџ(0KMA.GB/ˆXьBЊ #Ђеџ4џ§ўџЯўЂўШўП\YG}џГџBџ6џиџ#…mЖ/јџŒ‰дў§§єўщџчџI^џjџ,џИџ'NhЃџЬўxџuЙџџ§ЬќD§>ў_џщџNQjjўђќџщ>‚џГџуџnџ…џЭџхџхџƒў§’1џ’ўмџхџ4џџџCџРџ3Єџwџчў>щ\”&k 4qrмџ+ў2ўfЈ uыџa‹Yh#RB:I]ДџРўџCџ5џrџхџЗџ їџчџ ёџЮџ:ДЂЯџЧ”џџОџAўНџјўvў7{џPџŒџџmРРџxўў§œЫšHоџ`џЗџпџQўAЩ§В§”џXB3сџ?џвџAуџщџзсџeџ 0X@РIўЮ§ўyџѓџUџјџЖџKџkџxм@tўt§jџАоAВ§ЯѕHdџhџPџ;^}їџљџ УџŒџЎџOдџёџаџПџТџ›џšџЪџКџВџАџчџŽG‹&ZТољЅ^нЃ[2џ=ШсўmџюџЋџЖџƒџЉџUќџъ0jџ‘џўэ/џY^„џMy АџаџПЃџПџiџ}§ГjWAf^Dcо]^cѓџЇџџ ўmlС§уџ“џŒџЗџьџƒmџH;jџЎ§<„ЧjЦдмR-ѓџп‰&ќ‡Oџ1џ˜ўšџ“–ђџS@3љџџŸџЈџ„џПџ*  wцџ,џ7џuћg$ЬџBњџЁџ<џbЋџ”џк\џdЌ% pшџџЄџNџъў„Фџ$џ,ѓџšПлџ’џgџjџŽџљџЂџсџТџOџКџ#Х“ џИўeŽџ“l‰џ“џšџџ7šџ­ЇџŠЖў`џхšХџVџьџоџћўиџџMЌџES Љ?ќ§P4Ьџ„џžХіџ‰ў•ruўбџФ>W–џПџЕџЛџѓџ"c;Sb,FъџТаБџёџ ˜џфџ—џFџ,џџБџДџ3ЙџHvоџ§џUџ”џƒџ>Цџ:‡џI.ў\?ЂџВџДџд$џЙџžў˜Бџ џЭџсџњџђў№вcџџJnџXяўœ\8G>Є ’џнџзџЁџ–џ „Мџ7{­џkџд„>џ7Ю”џŸў!=џщъџФџDІЦџ‚pk[џsЃџлџ&SуAџѓџU2ˆ SR7їџЬџВџЏџЭџ(џ џзџ5.џџяџEџЇџySM[Жџнџџ_џSџf„ƒџУџgќў4ІрџdџЉџШџ<Кџ„џђrџZџЩѕџАџџьџЭџЄўTоџ… \„џxџˆџцџњџxXџ нџs Шџ'œюџRКџpџЈџѓџХџcџzџиџ:ыџТьўaШџtџ}9Hџ4џКџўџ€6џВџцщџЁšџДсџЊџYџЧџФџѓџcloLE"ыџ5&"NIл3Иџ™џ1џеђџЂџиџpџCi;џєE:шџћџёџ{џЙџНџЕгџy`3ИџЫџ8gџхџUЗгiоџвџ+ИџЃџ$€џoЁџdџMџџйџЙџпџУџџц}џыџЋџфџ…џP`џ?/њџЯџ џэџЦџѓџVџнџ; сџcўQ>\џѕ\[џ*~џСЩџ'2 @P`p€    А Р ф ш ь № є ј ќ    TX`dlpx|„ˆ”œ ЈЌДИРФЬад и м VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$St%‹Œw.rdataр#Щх]›7Х&#фL v8šФPуPШ.debug$T\_SKP_Silk_NLSF_MSVQ_CB1_16_CDF_SKP_Silk_NLSF_MSVQ_CB1_16_CDF_start_ptr_SKP_Silk_NLSF_MSVQ_CB1_16_CDF_middle_idx_SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5_SKP_Silk_NLSF_MSVQ_CB1_16_ndelta_min_Q15_SKP_Silk_NLSF_MSVQ_CB1_16_Q15_SKP_Silk_NLSF_CB1_16_Stage_info_SKP_Silk_NLSF_CB1_16 /340 1273638391 100666 7545 ` Lї-ъKг.drectveAД .debug$Stѕi@B.rdataˆ ‘@@@.debug$T\w@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё—[J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_tables_NLSF_CB1_10.obj:<!ovovMicrosoft (R) Optimizing Compilerќ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_tables_NLSF_CB1_10.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёR* †SKP_Silk_NLSF_MSVQ_CB1_10_CDF4 SKP_Silk_NLSF_MSVQ_CB1_10_CDF_start_ptr5 ƒSKP_Silk_NLSF_MSVQ_CB1_10_CDF_middle_idx/ „SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q55 …SKP_Silk_NLSF_MSVQ_CB1_10_ndelta_min_Q15* €SKP_Silk_NLSF_MSVQ_CB1_10_Q15, ‚SKP_Silk_NLSF_CB1_10_Stage_info! |SKP_Silk_NLSF_CB1_10"@SA_Method"SA_ParametersSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_struct|SKP_Silk_NLSF_CB_struct!wchar_t"SA_AttrTargetsSKP_Silk_NLSF_CBS usize_tєрprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪљГ#u8^s.йxХЙSUжпkЈяЉЌŸ"+ќqЅ’СмсVU#[Т)oњ mњюQл'f—ЊWb!Ј?~NЯзѕьк[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉsDџш]Гбp#”)БЂ]goФГ‘МКGƒQйЛyјs‡Іkмз$?яюЬqўDьDьАШK>№x гbќ:Tи™Ж+Ы ьє9v[7Œ{њnс%к™кkhHPTЊŒ3їГГјїЬXўrToрџЊtЩ^Аз"Ќшš>šљ%?dlЄѕХПEќ{ z,лVИфœЄѕ’Џ‹ц+7 @#nŽи,ˆ{@(yFiдz<G;1=1ѓ‚j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_nlsf_cb1_10.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_nlsf_cb1_10.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hД И р ф   M Q ~ ‚ Е Й с х   ШBB^Eq›X§ЅмЌ•ГПЙЧПnХКЪЬЯпд…йо•сх+ш/ыEэ$яёуђУєЂіјaњ@ќ ўџџšOЫЖћЩ нхюџџЯ:€cwŠІIПѕе4ыџџ%/ЈW,€бœЗ[бюшџџW*ђM5myŒНЋ ЩЕхџџх" E/gс‡сЇ„Ц€фџџBTfxŠЮ@Jb2aDx5>gx‡‡›ЇЈЌ­АГЕЕЙКЦЧЫЭоуууууууууу6Lelwx{}DUWgkpstNUUeiinoS[aaadei\]]_`bcgU& љ)Œ6„BOŽZgggrLЮ Ўї&Ќ3ˆ?ŒLЂXЕe%qyі<ў"И.ž9шG›TКa‹m`ˆ#р/a; GэTŒ_\kku Cw–*{3•=IJŸW#ep“wЪ!о-ђ:џCЇO}[tf?r;Гг"Т/З9EИP\ЭhЉr6 ).H;сHіUЉcp?)s\)ы6)C‘RФ^ЙkTu| Њ… $э5Э=єKuWЯb~rаЙ ™0Г;LёVЯco`v0 [ё\.з8AЈL{UžgБp{P>)е3#=џE•R]оiOsFEб(й3ќ>бM*YЭe[pwwœ“ %!.6N>…JDVŒdђoь Щƒ! 5њ@J+TO]™hкq1 ж№'Ж8ёE@RU\ИdnuQ6п|'b/n<пN[žhЏrМ йa&€>яHQo\+e.qУ wВ )Б0 8ЉBTNБb™m520ф:RFоNЋV“`ЫiХqŸ т0К Ч%Љ3.LWЪeВp€@ %ј)0U9—L aнnCG$Н0S458А>›M|^Bq-ЛT38E`NtRМTТXИ\9kЋ"В3N?СDqG\HщLТZъl\ kо+ ;#>AbE3[iњt ‚с(l5‹F?\Вišq{sбtо є2$F2sIšL*NBQJ]zrђ V#Ю3§=MZs\—^Ї_;e 3w'В;3PШZРaЅephwjс ;1&`2Л?вK^Љr3|K}8џzџџ4џЅўHў ў-џ^ўTџЧў;ябfNМсђЁ4ЗџDџuўUџ ќ<yЛФп­Zцџ…—џ˜ўыў[z)г§§bќЇ§ќ[ћ“ўсkvЮџБЁœ'Ћ§‹њЦљА§ўмў§WњџчџЇўџxэВІыўёЇЊ­ЪZў†\hџМўvў1iџаў,§o§^џўнџўџШў8џЄџџђt5„џ eЌџпџ@џ№ў§/ќЃи5™џ‘BЁџсџœџбўа§ећcўЪ!џ‘ў hкџџzБ§2§РўюўДЈџЛ§cџH§ћŠ!ўщџ|еџџџdўm§8џЛџЊўЧ7:мџЭџТџћћЋК$YsџDDєџќџG?џ0ўWўў˜ЫЏўьšХџчџЋў?ўїџZLђџwќ`ф§џЇХџРшџ<'џлџГьџ7HКўњћњўе|RH›ф§>хў—Еnўъўџ’џџјўЇџџ§ўхџjџžџzўv=h&\ѓџ<џO3цџ’џЅџџ4ўЊЩ`Œў„ГвўищўзџJОpFџ §cџŸ ѕ3Eџ№џ7]џ$ЭўjћџJ`ўлЖџh‰ћџдў,ў ЅўЊ8џ%џ4†џ{џл№џgœЇџ‘џ0BŽБтўџйџСџжџ=ў 4ЧџСаџJІў;хџ+ўыўЈўzЋџМ§џC2џфў#‹џЈџ#ўw2jcJџЖˆўoўЯџwщџіџаџŒџ8џЪўyIэџ‹8ў#”џCЕџLЦџыџ €@ PР``p€œ   Є Ј Ќ А ,08<DHPT\`hltx| € „ VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Stx–-$.rdataˆG›r§зИˆi#œLДvјšЬФˆу(p.debug$T\_SKP_Silk_NLSF_MSVQ_CB1_10_CDF_SKP_Silk_NLSF_MSVQ_CB1_10_CDF_start_ptr_SKP_Silk_NLSF_MSVQ_CB1_10_CDF_middle_idx_SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5_SKP_Silk_NLSF_MSVQ_CB1_10_ndelta_min_Q15_SKP_Silk_NLSF_MSVQ_CB1_10_Q15_SKP_Silk_NLSF_CB1_10_Stage_info_SKP_Silk_NLSF_CB1_10 /385 1273638391 100666 13833 ` Lї-ъKc3.drectveAД .debug$Stѕi@B.rdata  Љ1#@@@.debug$T\3@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё—[J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_tables_NLSF_CB0_16.obj:<!ovovMicrosoft (R) Optimizing Compilerќ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_tables_NLSF_CB0_16.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёR* ‰SKP_Silk_NLSF_MSVQ_CB0_16_CDF4 ~SKP_Silk_NLSF_MSVQ_CB0_16_CDF_start_ptr5 SKP_Silk_NLSF_MSVQ_CB0_16_CDF_middle_idx/ ‡SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q55 nSKP_Silk_NLSF_MSVQ_CB0_16_ndelta_min_Q15* ˆSKP_Silk_NLSF_MSVQ_CB0_16_Q15, qSKP_Silk_NLSF_CB0_16_Stage_info! |SKP_Silk_NLSF_CB0_16"@SA_Method"SA_ParametersSKP_Silk_NLSF_CBSsSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_struct|SKP_Silk_NLSF_CB_struct!wchar_t"SA_AttrTarget usize_tєрprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪљГ#u8^s.йxХЙSUжпkЈяЉЌŸ"+ќqЅ’СмсVU#[Т)oњ mњюQл'f—ЊWb!Ј?~NЯзѕьк[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉsаoWЏeЧPўи0ЯЅ@8IФГ‘МКGƒQйЛyјs‡Іkмз$?яюЬqўDьDьАШK>№x гbќ:Tи™Ж+Ы ьє9v[7Œ{њnс%к™кkhHPTЊŒ3їГГјїЬXўrToрџЊtЩ^Аз"Ќшš>šљ%?dlЄCŽ*ŽЖ^ е[цw„gФtѕ’Џ‹ц+7 @#nŽи,ˆ{@(yFiдz<G;1=1ѓ‚j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_nlsf_cb0_16.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_nlsf_cb0_16.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hД И р ф   M Q ~ ‚ Е Й с х   ЉН Ж“"АЧ!п%і)Ё-91„4Ћ7 :”=‰@mCRFIлK NeQTбV‡Y.\е^|adfёhSkЇmћoOrЃtыv2ym{Ј}зљ„†'ˆ3Š>Œ?Ž??’5”*–˜џ™ъ›дДŸ”ЁtЃTЅ5ЇЉъЊРЌ–ЎlА7ВДЯЕ‘ЗSЙЛЭМ…О=РѕСЄУSХЧБШVЪѓЫ†ЭЯЎа9вФгOекж\ипйbлфмNоЙп#ст№уJхžцъч6щnъЅыжью7яa№~ё„ђŠѓŠєuѕ`іFїјєјУљ‘њVћќНќc§џ§ўџўџџџыў&Ј9RL•^Гoа€‚4 Џ—ОMЭЩкќчцєџџу&ёL™pъŽЎцЫ;цџџѕ"ЗCxd†„хЃCУѕсџџќ%вHviŠ ЊNЩхчџџ."[D‰f†чЅ>ХBуџџ"yCиd€…(ІФ тџџA"‚DУfн†іІ`ЦЯуџџ "ЭBzcuƒoЃiУтџџ"v2ЬB#Sycvssƒp“lЃiГfУ г[тVёџџ$6HZl~Ђ* АЕЖЗККПППФХЩЫЮЮЮЯЯббббвввгггджииййййккллмноппппрррссттттууууууффффхххцццччччшшшшщъыыыььььээээ№№№№ёђѓєєїїјјјљћџџ       vxyyz}}‚ƒ„ˆ‰Š‘WX[abdij\__`aabcX\__`abm]]]`aace]^^__ccc]]]``adf]__```bc}}€€€€€€‚ƒ„ (NYkМ’№ызx’цJўђ™#",ј3 <DƒLяSі\Жežnљu\ ”ŠH%.Х6Ћ=D L SfYѕ_Zh›mМn и„Ѕ ‡'=/э6k@kIСO‚WЛ^pfњnuеc Еџѓ И'р.ђ6e?"GHNRVY^яenЉu_)Чeѓ!ѕ)1б:„BhIэPђWБ_ДgЫoІwSq WДўc$g.Ч5?XHъO2Xл_DgžnnvbЧ `ь^$F+w3а9рA IдOиWќ_ъg‹oкvX%š щ8&‰/7ћ?ЪGGPžXЃ`Ihцo“v­ZВЄ"!‚&Є.Я7л>EHfOTX‡`hŽpоv{Ѓ<Ёƒ'ђ/b7я>•EяL Uw] evmЖu€ЎФ яБ‘"э*ф1ј;‚BчIFR![bIj_qНм @f%л+В2B;D?MQVІ^пfйnvи< Љ…D&П+в7Г=PFЌO‘Wє^ fШnЉw…] X?"ѓ&&-o;ˆDCL\U\]zeхmшuе…ћ UEє!v)œ2k;/EMjV_рg3pwG |ˆT!”(k-g5ˆ=/C€McUЦ[КdЛmГu+ПH Б­$І+Ч35;eAL—V3^fпnЛv`-ЫЅ{$ж)5ћ:МC†N~UД\%dЊlнtьЁ| pЗ/"L- 5­>_FвNoVЩ^&gDo•v ъmХN‡%H.Д3Д@•F/MœS.^юgrpПw­:Q Ž&$–,Л8б?хEьK2S§Z]bEm8ww-ё оЉ!?'23‰?хE ONW;_gšnэuэЁ˜k$8,З3W;CKtRМYѕ`h‘oќvи<x ђˆ И%є+2ƒ:b@GuNВYHb9lНs?эуf 9*Ё1А9ДBgJђQZŒaOh0p‰v’Ѕ*^(Ў%}*w4е9U?F‰Qў[ЅdllsxPTK&Ч!r&б,У>-GwOіXЗ_,g–m#t%Ў{ x$†, 8M?ЈE§KŽT[]HeуnџvhO œ кž!x-І2т=иC’KОRV\!eаn[v`œžœ")К.7=*CЧJчVѓ_СgМo-wћ4 ‘Уf*%у*ѕ1B_ˆhйo(vЦЯѓj~.#P(е4…>ЙEgNшU]ЛeUnпuЪч †Ѓjo)g.§5Е=pC=NњV `EgTnгv ЈдС &&+ 17Т?шDоJnPŸ]ъh~pbw” Є цє+#ѕ,ќ1…=‹C#LсVв_jgqnyuэ у hЃ#)v.[5ž;BІKMRІXњ^xjuЦЯ|bТл-5T;зE9OюW&`hrp#xОа њL"Д&.н9З?FiRCYˆ_Рfn;t с щIЦ "(ў/r7ž=DL~S\еeРmvЄ& k Ъ&$-62Ф9Ш?$EaORVx\Ыb`iЊoч' И4е+Љ0"9Р?žEйLДRKZУe™p&x\ž‹ ч!Н'X.o5–:*BKtS*]fмmAvо+ VD!;'..П4Щ?ЂEёL SoZU`ЗhбuH Є FŠhћ%u+Ь4}E…KёRK[’bЁk.u?3Иўщ f'9-К4<@_HUP?YRaDhWpЭu›шг <Л`)/g6c<эGPўVž^эeЁm“u`xЄ6Ж!—(|-ё7}=ЭCDIвOYЬe~oшwХM Ы$Н)H/З4Џ<ЕGNЙT_ЖgЕpdw‹ВЅ ї&“+2ь7x@йFvL:RчXPaˆnЊw8N&,"?(С-6=D1MAU\1ck‡qЕ€ &Š*1W7>сCiMгU^fŠn“uњ clТK v+}:BwG4PоUŸ\ЉdйkЇrиLр‘хл K%‰*ъ0ˆ@]L‡TТ\Ъe–nІvєъ FQК#Ќ(p/)5ф<CH‘NдCБJQQ@X`=pjyЄ м3Т#O+у17љ>ўNXH` hpxa !Ждј%/0є6ž=3FOЯTр[b’i:pW …JЩ"л(т2Й:qCaMYUН\’cАj…q?w0 ч o)x%/+л1Р9,@єFPіVw^—fпnvq y х_Яw А0W6z=EиKОRй]Сg3pшvs щ В№t!Н%,„1o8ЊDhMяR;ZЖbiўpўбИ щ '.к2ъ8В>bENqTK[ћalмuЄXю к!' -њ2BѕHПOYё`Уh„pБv  <Ff"(з0Ї:З@кKSŸYц_i™tE  +W  .Љ8ы>фF3N•TМ\жdЂoЄvб ‘x%П*F0В7.?]DL SЛZJaгjпrі­’;є#L*л0–7=ФE‘OцW9`’gwo=wЂН Њ?–& +2_8w?ТHтO&VЛ\ЫbТiёqћ†ъ­љ Ј*Ь3 :BHЄPЩVЏ]‚cьjхoЧ Vофа]$ж*b1Ÿ8,? FNЖWCaтjuB •љRНе%N-ш3-<(CвNšWс`†ir[xќ˜ BЗцЇ0&6ƒ=aDmJЧPWXR`kkquб| Ng‚Ќ Ц$и+k= D5KнSk]ХeoАvЫ§ъ“N$+г2НCIJgPYkbќhЇrUxJ„Эе(w-(4с9gA GNўU`5hчo0vF б5љ1"Ќ' -}3K>їD–LšSП[;dлm`v%зuЛУ%r-?7‚?$IкPkWЧ]Џdsjqw" ъGЅ&$-3'9?rGŠS2[b+i(pиuљAn!Ќ)о1Ћ:ЮB\JХPEW?]†cЭiГp8w{Ы Сu“Ї"Ѓ)І/q6<хAI‡Zкdbo%wd f FlŸ&c0Ы9rAРGrOѓUЌ^XgJoНvUГ— нб$\2І7$=5CђHоOСVт\ emuMV mе+ч1ы6ц<€BАHsP;Va\Bb"iџoї Д PЂНЅ#ы(.*<\IRXс^peIk0r‘ Ѕ исˆ$-v4‡;BЛH~N(U.[pbIrvч ЋйN#_4o9Ÿ@ GИMaU(a[iq2wIЭ X†— К&ѕ17•@AE\SЇW)aкf oЪu) љ­;"E(С-74Р9c@сFMџRќZ…cЃksёˆCе_)S3;џ@тGrMЋSгY`EgЫn­u0дЯ bж! * 2‚:LBjIФQX<`™gpgw[ АЪв$%{*у18Г>šG–PкWюa8iqNwОЬѕ&Л _&c,њ1т7t<žAbFЇTЮcєmŸv9 Лєхь!—1[:`@eG9P V‹]me6nuг ъ bИ5%ь4Ђ9gAH‡HРPўV]Ћd lJuЫd`#Є*^1Я88?FыLmSХYљ`пg?ov=A р•ь'Д2j9лD?KPmWз^БdЧlњvk I%щ*@0у5;ЫBвHэOdV…^ГfѓnДuk 1пкE3Б>™DЕJ SъX‹_Эf_nt?ЄDг> #Ш+57R?гEфNhU ]“dšmИy`Ы§џQЁdlџPџЅю”ЋўџnџeўFўу§и§FўѓўџЬџ[{•ВзgџYџоў%џ——w/ dEлўo§Ћ“К_„b№џџџyџ8џ!џЇџЇšЌэгџIџџў`žƒџzўџŠџ+7ўxўџќИќ‹џ>џCџSџSџпџ ЎsЇ9,“`ЪџrџџџЕў06Ьџ]ўВќмћЈџ…џ6џЉўж§?ќIќGŸQџуxЫРЄр"Уиб€@yКј˜cк џЌџьўœџШўўƒЊбШёєџэўWў3ў‘ўпџфџšџ>џё§_ŠЯѕ ,џЯў—џЃА]CsР=Юџ|џQџ џёў‹§џ†Ь~,Fhџ*џсў5жџџ ўYўџџ]џNџ‰џU9~v’ЈЇХa('ŸџAџ\џџџfўŒG ‰џYџнўюўsџџџ&џuџ џ/џєўFўcўо: XLжџrџ[џ…џЄџ/§џAџѕџ\џYџЁў§7#И—џ тџЪџяџГџёўdў’§x§мКОџ;џЗџЂџёџ/pЦџпџATVrиqŸВнџцџ S'%'HџŠўїў–ў ўQЬоФџƒџ]џj†џџŠ>СНб ќвџШџыўSўа‚Ž,еџBЖ/цџБџ1€џ5џpў"ўEъ›Э :{9Ћ‰`€рџ†єџ9wъџ[џ ўC§№§Œџ@јџaїџ^џОџdџ>џбўо§Ћў"f_-L“Эd{2Ыџpџ’џѓџ џ~џa(8ŒўџmI оџuџAџ џ,ЋџMџџ@џ џЋџ’џeџдџхџ‘ŠO lџП§†§П^їџнџГџЌџШџUџжўёў џdџИўџДџ€џ‡џ ъџ -џПџСЏџ+9mџР[џžўВў–џdџиџ§џМџ|џўN|Њœуi˜џ šњхџы˜3R,ЦўeўзЊїџЃџГџLC6Ш;ЃHЅџnўžЛdџЅџ" Ї[ŒЋp жџOџHўPЌ)џŒўшџЕџтџVџ Šџ9N›џшЁ{e@џ‹§œџФџџB ѓџАџџя% YСўН§ТhуџеўЇџЪџ’џ џ\џDџRАЄџХ‰† ўџ8Iџrмџ}џ4џKчџRџПёџоўSўѕўO%j€ўЉFђџдiўџжџлџ…џlаџСХ­пџ%IЧџ‰ЦџRўџйЭџіџЦџњџh=‰џЉвџvў<ЦАџжўПџшџПџ_ўб§џ>џѓџ‚њџыџшџLџЫџЋџv“qЕџпўт†џу}mХ}Š,<ЩџYџрџuџ?џSџФў0џ§яАџDџфџJџџœ‹џ€аџЦџџЌЕЇ> Е—l№џѕџВџЕў›…h@Hџтџ§џхўyЬјџ9џыџАџWџcџAџxџQ›}џєJЧџбџшў[oГџ€џrџ>џƒџњџМџ[fџоџкџЉўї’кџвџзџ:?аџ‹џ-Їџћџдџуџ@ўчЬQ.–џвў|xкџєџйџF§џПџѕџ"ёџџБџ­џ-r+–$щ•УЬџ%ўйџјџОџџ8гџBџЅФџ}џ3јџБў &;жџŠџџ Щџ{џ“џ—џNРџ џЪПџџЂ(ЂџYЋџ‰џ™џa КџфџТVџЄџŽџJЯџ.ЌџNџq43џMXо8Щџ VГџрr—џp}уџюџpџЦџџrОџрџWџЦўHЖџГБџJџ Щџ“ ЪџЌџяџЕџџS‰ўДnСџхџxџЉШџјџUџИжџ”DЬыnџ[Ћеџ§џцџџ‘џGVџЪНџЕлџmˆџЩџќў№џ˜[Ž*,†/нџOWџ).ЃџЯџ‚џ%™џоџъџІџzџ3џ\їџ=џџ-6щџџџАџžџьџћў2HЇџ'џ ЎџY џЇџSЙџЩџ‚žџnџхџЧџ5ЊћџЪџ„РџH ƒџXџH(ЊNјtTоџО& –џсXџcџ†џЅ _џ+џєџЭџ›џ*e7oKG џџџAыў‰цџдџМџЌџОџЁџыГчџзџЅџ€џ"џ’Иџтџшџ7‚џМџЦџџ Ÿџ–џЎœџ›enџыџ&ОџAF@;еGЏў/Ьџ3Шџ ёџћџ"4фƒЁџ*џю{@mџЮџоџџЬЂU)tџIjџ8 џОџьџџ;ъџ•џ–№џбџќџQНџЇ••cџ dџхџјџSшџзџYџžœџ]5Щ* єџњџлџUDџёўkѓџАџ3Ъ­ЛџNDџ.™ vџЉЦџ…џ”џ џ– Aџіёџ&іџ=22џ)џ$џZkџ%џ8ŽˆўMАџK*›џ8ЧџяџP9мџXХџŸџэџlџ.%џтrќџИџёџ%Яџфџї,{/†џкџџрџ џšzџФGѕўЋџКџYˆџcўџ@LZџаџНнџЄџWџ…џS&чџ&нџсuџЮџСџі<Gџ“џЯџЫџYџ3•<›џпџДџx тџ­џf[Fџћўƒ;џ€ 0@P`p€ Ф Ш Ь а д и м р ф ш  $,08<DHPT\`hltx€„Œ” ˜ œ VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$St=xЪ.rdata #ь#РЈЂИj#ФLьvšШФуˆ.debug$T\_SKP_Silk_NLSF_MSVQ_CB0_16_CDF_SKP_Silk_NLSF_MSVQ_CB0_16_CDF_start_ptr_SKP_Silk_NLSF_MSVQ_CB0_16_CDF_middle_idx_SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5_SKP_Silk_NLSF_MSVQ_CB0_16_ndelta_min_Q15_SKP_Silk_NLSF_MSVQ_CB0_16_Q15_SKP_Silk_NLSF_CB0_16_Stage_info_SKP_Silk_NLSF_CB0_16 /430 1273638391 100666 8697 ` Lї-ъKS.drectveAД .debug$Stѕi@B.rdata @@@.debug$T\ї@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё—[J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_tables_NLSF_CB0_10.obj:<!ovovMicrosoft (R) Optimizing Compilerќ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_tables_NLSF_CB0_10.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёR* ŒSKP_Silk_NLSF_MSVQ_CB0_10_CDF4 SKP_Silk_NLSF_MSVQ_CB0_10_CDF_start_ptr5 ƒSKP_Silk_NLSF_MSVQ_CB0_10_CDF_middle_idx/ ‹SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q55 …SKP_Silk_NLSF_MSVQ_CB0_10_ndelta_min_Q15* ŠSKP_Silk_NLSF_MSVQ_CB0_10_Q15, ‚SKP_Silk_NLSF_CB0_10_Stage_info! |SKP_Silk_NLSF_CB0_10"@SA_Method"SA_ParametersSKP_Silk_NLSF_CBSsSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_struct|SKP_Silk_NLSF_CB_struct!wchar_t"SA_AttrTarget usize_tєрprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪљГ#u8^s.йxХЙSUжпkЈяЉЌŸ"+ќqЅ’СмсVU#[Т)oњ mњюQл'f—ЊWb!Ј?~NЯзѕьк[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉs“aХЖЦэЧЦ ДНЉ ёФГ‘МКGƒQйЛyјs‡Іkмз$?яюЬqўDьDьАШK>№x гbќ:Tи™Ж+Ы ьє9v[7Œ{њnс%к™кkhHPTЊŒ3їГГјїЬXўrToрџЊtЩ^Аз"Ќшš>šљ%?dlЄг–tш‹G„MЦЃІmгb>ѕ’Џ‹ц+7 @#nŽи,ˆ{@(yFiдz<G;1=1ѓ‚j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_nlsf_cb0_10.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_nlsf_cb0_10.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hД И р ф   M Q ~ ‚ Е Й с х   b DлMР$Ы*ж0Ÿ6H<ђA›G&MtR‰W\ВafmkKp uЖy_~ƒА‡@Œ…Ы”™(@ЁWЅ,Љ­зА˜ДXИМˆПљТWЦЂЩюЬ'аOгeж{йм†п{т@хічЌъ6эГяњё)єLі7јяљŒћўќџ§џўџџqF%7яHZЗjl{!Œ!œsЋХКФЩТицcѓџџ{!іBЙc}„ŒЄ@Уєсџџ"7Dсdз„ЭЄФАтџџє"(E…dтƒ?ЃТNсџџЯ!ˆ2хBASEcHsKƒN“QЃќВЈТSвЈсў№џџ‚ЄЖШк 3„wfVФ”ЇЉЊЊ­­ЏАААБГЕЕЕЗЗЗИЙЙЙЙКНННПППТТТУУФЦЧШЩЩЪЫЬЬЭЭЮбввежкмнтчъяw{{{}~~~€‚‚ƒƒ‡Š‹^^__`bbc]]_``abd\]aaaabb}~~€€€€€‚‚ƒЂЗE,$1G=KoW}eжqе Lфh*Й;КAѕLњU‘`rЯ Бa( 6@vNЎZpgsі Б‹5'54h:ЌNkYbЃs% ."э,f5MF9UgaIpи §­(;ІAYQ]Фfуr ТA!н7т??Ju[дdZo8 vљ+ѕBПIšR›[йd sЗ ЏНг+B2›CqNtX–hГq~ ‹.U6Ш>хOWЎj‚tпЧ Ю&2цCOIW`‚nŸю д{$…+#=HЙRЯcDn{oѕD-š4й<KxSІcolН н 6№5%=эDzNGXcgyoNА ѕт&19їLЗTYgВq~q&„8@ПJZcчn} 3R$ю2:*F“P]0o{ ёcм/б7Ј>ЕGњPdi}r§Ї †t,0Ž=oLWId{qв› y“}3K<=G T`Пnр=6й'ы.м7HЇOgqщZ s"\>ИFOѓXЦbqы gzx&Ш1Ї8щH„\бeq< э ~•%J:э@=JRЦfvr§\Б˜&Џ?nG[P>\гeШq} œ–Ž)|1s8žAРKУeeo\kќ$+ž3цMHW&bcs­ (C1m8MЉWZarю  Iь!0)с>ŠFЫWвenq–,‡3y;СNђVtgtј рн‹&=-в6АRЊZмgЯtвQЯ!Ÿ'?pLTTЅk™sŽ Ь c1й@]F†R‡ZЄjТs’ Т =p!Е;ЧMBU!^Чg–q дЬ’ ё&ƒ1лIсXjclr§ иaЬ#t8ЁTѕ\иiЁt C:j+|1Ё9#BаXGdНm“KŸ4ъ;CmNQW-j/tШ яŸ V/Ц:ЃHДT€`kёtrЦK -.3;xAЛPР[]e{ry ъ ŒK*HъOW}` iu. АV@ )%К1ъH№P—e oЋ -€ Ђ0 7/@tHRVёbFl™ 1™g$6+%3;+WлfDpљ Q X";(e11LО`tiТsкФxЮ'Ь-p6щ=kHMh•tІ‘#Ы' ;PDWfeЈmL щх ‰' CИLфVцaPkU H3g$* 48џО§y§o§ю4e%v0Ьџ<šЛoŠ|ЉS„:cў§ePE8>џіўўHўUћЃ~џ"œМxx;šўв§вњџ6џыќ(\Кџџ2§‘ћ$󟉧чcџgџщў]ўЊўоџў§сќнљQ§Ÿ§о§~џ)џџBўТ§ЧњЯИџ g~§ЎнЛ-џвќсєў‡ўWm›Є3nЛ">ЧўРќ6њcћужџйџ>ў‚њЕ§Ьџ§NbФџ ўўоћ+ƒџџA§ 8cўїў—=YCb=šџ‡•imйџ"§БрbўwўўЉўФўь§ЌZBкўСўу§ї‘kџЗџYџ–v4кyУqџћў ќоќƒД‚Uў@ўW§{Љџџџ6Нѕbуў9%Яџћ~ўљўb\^P_"UДЯ‘ў’§.њџБџ`џЄџwџьўНўўH§єћ—fЊџ*џўy§фџнўŸџLџџMўюџДџДўš—Ј›ўo:oџШЛtƒ‘ў%ў б§1УџXџ7†џƒRћџяўЮџˆ§œ цџщў;ЅХy›зџvџМў“џ—§hbЫџСўŽџ џЎџћдwџ{ўŒbюџџ2ўyџ=5№џBИџ‚џœўЅўИўИџЏўD˜]Љ<џГўEЖџАџKсџWBўгў5GчџџЁ^џ­џIцЩў§ўБцџ2ўY~џЃџ8ўУў#џ2џ_ўJџЖџъ0gчUцўќmџ"џћ1џЛ{_ўмџџ№џ,Yџ~„џГџ:oўMŠџR~—Oўg~џšџƒ џVU2ўžџ‘3џўu%ИџRџ>јџюџjщЙ+С:џН\эў§џѓАЖбЮЭџOmЈGџЬўМџ–§Ъў”џ\џЅ=hџ›џdўєўџўиџьџфџbџгў|Ўў‘ў|џ@r}џџdџќўСџŒџ›Ж§6џўсўВу–џкўЄ*œџЙ=СгџPЉџOўаџ0џџuџx”ў xџŒ}‚Їџ№ўvџМџ=ўш[џаџBџjл/ГѕaK^ўyEџ:8џЁўсыџ'џъ‘џТђvŒsўciгџ=џ@€@ рА€Р аќ       Ќ А И М Ф Ш а д м р ш ь є ј ќ   VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$St` й™.rdata .м$ p7#ќLvXš,ФHуЈ № .debug$T\_SKP_Silk_NLSF_MSVQ_CB0_10_CDF_SKP_Silk_NLSF_MSVQ_CB0_10_CDF_start_ptr_SKP_Silk_NLSF_MSVQ_CB0_10_CDF_middle_idx_SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5_SKP_Silk_NLSF_MSVQ_CB0_10_ndelta_min_Q15_SKP_Silk_NLSF_MSVQ_CB0_10_Q15_SKP_Silk_NLSF_CB0_10_Stage_info_SKP_Silk_NLSF_CB0_10 /475 1273638391 100666 7267 ` Lї-ъKK.drectveAД .debug$S ѕ"@B.rdata,i• @@@.debug$T\я@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‡SJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_tables_LTP.obj:<!ovovMicrosoft (R) Optimizing Compilerє=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_tables_LTP.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё#' bSKP_Silk_LTP_per_index_CDF. SKP_Silk_LTP_per_index_CDF_offset+ “SKP_Silk_LTP_gain_BITS_Q6_ptrs' SKP_Silk_LTP_gain_CDF_ptrs* gSKP_Silk_LTP_gain_CDF_offsets0 SKP_Silk_LTP_gain_middle_avg_RD_Q14% “SKP_Silk_LTP_vq_ptrs_Q14" gSKP_Silk_LTP_vq_sizes$ ‘SKP_Silk_LTP_gain_CDF_0$ MSKP_Silk_LTP_gain_CDF_1$ –SKP_Silk_LTP_gain_CDF_2( SKP_Silk_LTP_gain_BITS_Q6_0( OSKP_Silk_LTP_gain_BITS_Q6_1( •SKP_Silk_LTP_gain_BITS_Q6_2' SKP_Silk_LTP_gain_vq_0_Q14' —SKP_Silk_LTP_gain_vq_1_Q14' ”SKP_Silk_LTP_gain_vq_2_Q14"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tєрprХО)ж$olŽг>u,Foьar6Z<Ѓ:…QЅB ‹>Œ^ЁA^ŠћsM,uОЭмз$?яюЬqўDьDьАШ~е*Јн­Wыћ%iАлT>№x гbќ:Tи™Ж+Ы ™kЈяЉЌŸ"+ќqЅ’СмспU#[Т)oњ mњюQл'f ЊWb!Ј?~NЯзѕьc[иC-д2ўрм…ьЊ6оЂЙОџ„w„љ”m–˜ЊдЉќГ‘МКGƒQйЛyјs‡Іk>љГ#u8^s.йxХЙSUжп„ьє9v[7Œ{њnс%к™ЮkhHPTЊŒ3їГГјїЬXўrToрџЊtЩRЧк™ПfСЎќЖь^™ћп›Аз"Ќшš>šљ%?dlс’Џ‹ц+7 @#nŽи,ˆ{,(yFiдz<G;1=1ѓnj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_ltp.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hЄ Ј Э б §  * . S W  ƒ Б Е и м ќ  " & H L n r ˜ œ Т Ц ь №     >  B  RTŸџџфРПдЎмEфХъѓ№ іBњ7§џџЪbОw~‹ТЙЇТАcЙС”ШюЮѕдЈкOрёх}ыу№ЏѕSљдќџџ^п$ 5цD“TЗaymOv–~†ђ”n›AЁ ЇХЌlВщЗ/Н ТЁЦмЪцЮХв˜ж=кенlсˆф•ч‹ъ|эf№ ѓ—ѕћїLњGќ&ўџџ +ьAESXj{œЂXчэє,59DEUZ_``bdo‰Œ–юјџ7=FFGS]^_`cfns{ƒ„‰ŠŠ—™œœІЊАВСЦЧRи § #0џџJ§ƒћŸ  … h Т”сжвџО6ї§€ќв5!W‰ќH§j Pвў9Wъ70хїОќhЌў€›|§™œ§ёїwf ‰Т яqЦXАВЕќЏ Вћ>;ьр" Хўѓ//ћTр T§п§>. ЭўЄ§БљвЉ Эњe&AEћнњ[Щ&~њ"upџњ qx” y кџy?ўšл Uџžџ‹š#ŒLtќ"CќТŒ[ЗўѕБў ЙЪџощў" Žўп“^–uˆћnЧъўŸ$ТQўќ4%t™ќFќЪ-Эдў‹џš‹ Ї{ќQT Ж26ЭџJ1„ДќU жm Э џ‰v7 E>ћу^2їщ|џx6%AŸљo"є(lіыТл›ЕПКѕ‘*D"Фјt ўН"KпљГЄ ћњф“ћCю›№ З‡+ЭRќ< |4Џ4є$~ѕШ4НŽњtњG,hџxљƒќO J<.њŸтћЌА/Z!№ђьшњЉ)1 Iћ+nћЗk ‡7 ‹‡ хџфљИџ\eo,мрњ(>~§ћiЙН ћХ феџ ˜єо#}8џЫ@§/K\ћі№ћ^'Y1ѕОѕC;#>ЎыџŠ Љ*›f*ў а‘џолк %0œ†љzєŸЪ? жёC#Аџ€іОџЖŸЋ, (@ DHLPTМРФVОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S " Бœ\.rdata, h›WплЫŒН C \$uPŽЄ­АвДяШ №)@ELeXШЙМг .debug$T\ъ_SKP_Silk_LTP_per_index_CDF_SKP_Silk_LTP_per_index_CDF_offset_SKP_Silk_LTP_gain_CDF_0_SKP_Silk_LTP_gain_CDF_1_SKP_Silk_LTP_gain_CDF_2_SKP_Silk_LTP_gain_CDF_offsets_SKP_Silk_LTP_gain_middle_avg_RD_Q14_SKP_Silk_LTP_gain_BITS_Q6_0_SKP_Silk_LTP_gain_BITS_Q6_1_SKP_Silk_LTP_gain_BITS_Q6_2_SKP_Silk_LTP_gain_CDF_ptrs_SKP_Silk_LTP_gain_BITS_Q6_ptrs_SKP_Silk_LTP_gain_vq_0_Q14_SKP_Silk_LTP_gain_vq_1_Q14_SKP_Silk_LTP_gain_vq_2_Q14_SKP_Silk_LTP_vq_ptrs_Q14_SKP_Silk_LTP_vq_sizes /512 1273638391 100666 5043 ` Lї-ъK.drectveAД .debug$Sќѕё@B.rdatahA@@@.debug$T\Љ@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‰TJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_tables_gain.obj:<!ovovMicrosoft (R) Optimizing Compilerѕ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_tables_gain.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёњ šSKP_Silk_gain_CDF% SKP_Silk_gain_CDF_offset$ ˜SKP_Silk_delta_gain_CDF+ SKP_Silk_delta_gain_CDF_offset"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tєрprХО)ж$olŽг>u,Foьar6Z<Ѓ:…QЅB ‹>Œ^ЁA^ŠћsM,uОЭмз$?яюЬqўDьDьАШ~е*Јн­Wыћ%iАлT>№x гbќ:Tи™Ж+Ы ™kЈяЉЌŸ"+ќqЅ’СмспU#[Т)oњ mњюQл'f ЊWb!Ј?~NЯзѕьc[иC-д2ўрм…ьЊ6оЂЙОџ„w„љ”m–˜ЊдЉќГ‘МКGƒQйЛyјs‡Іk>љГ#u8^s.йxХЙSUжп„ьє9v[7Œ{њnс%к™ЮkhHPTЊŒ3їГГјїЬXўrToрџЊtЩRt‘‰.яќ:‰ЖШЏœАз"Ќшš>šљ%?dlт’Џ‹ц+7 @#nŽи,ˆ{-(yFiдz<G;1=1ѓoj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_gain.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hЈ Ќ Ш Ь я ѓ   -^Е@ EМuq Е I4})<Р Р%=+41Є7–>F NiV_h]qоz‡„VŽF˜BЂ$ЌФЕПиЧазHо6ф[щКэaёhєъіњјЅњјћ§а§mўсў2џjџџЋџПџЯџнџщџєџџџжEэH Pnащ$•+ь18>DJюOХU†[9aцf„lrowа|A‚Ы‡h “Ћ˜GžЪЃЉ:Ў=Г2ИНгСuЦїЪMЯoгdз@л пШтcцгщэ№сђ\ѕˆїeљђњ3ќ2§џ§ ўџoџЇџЪџсџёџџџ 6 ou,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒТiІц‚ЗЄьТўbвКŸciЯ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓЮj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sum_sqr_shift.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 256 - ^ = $23 $T0 260 - ^ = $24 $T0 264 - ^ = U‹ььќSVWНџџџЙ?ИЬЬЬЬѓЋ‹Eƒрt‹EП‹UПЏШ‰MШЧEјыЧEШЧEјЧEь‹Eƒш‰Eы ‹EјƒР‰Eј‹Eј;E}H‹Eј‹M‹A‰UрПEрПMрЏСEШ‰EШ‹EрСј‹MрСљЏСEШ‰EШy‹EШСш‰EШЧEьыыЇы ‹EјƒР‰Eј‹Eј;E}S‹Eј‹M‹A‰UрПEрПMрЏС‰Eд‹EрСј‹MрСљЏСEд‰Eд‹Eд‹MьгшEШ‰EШy‹EШСш‰EШ‹EьƒР‰Eьыœ‹Eј;Eu(‹Eј‹MПA‹Eј‹MПAЏа‰Uд‹Eд‹MьгјEШ‰EШ‹EШ%Рt‹EШСш‰EШ‹EьƒР‰Eь‹E ‹Mь‰‹E‹MШ‰_^[‹х]Уѕ$ƒќ\ ёї<ƒ|œSKP_Silk_sum_sqr_shiftќР< € tenergy  tshift x tlen дџџџtnrg_tmp рџџџtin32 јџџџti ьџџџtshft Шџџџtnrgђ8ƒ8$,-€1€&3€84€?5€A6€H7€O9€V:€a;€r=€~>€?€Є@€ІB€ЏC€ЖD€ИF€КG€ЭI€йJ€чK€ќL€ M€ O€P€R€ S€(U€BV€PZ€Z[€c\€l`€ta€|b€ X \ 8 < VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sx .textƒнм§KKеq.debug$SpЏxaР .rtc$TMZЬ.L3 .rtc$IMZžz]BY .debug$T\h_SKP_Silk_sum_sqr_shift__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/590 1273638391 100666 11419 ` Lї-ъKO#S.drectveA\ .debug$SH @B.textхџ P`.debug$S‰@B.rdataЛ@0@.rdata Щ@0@.rdata†е@@@.data[@0Р.rdata _@0@.rtc$TMZko@0@.rtc$IMZy}@0@.text‡Ё P`.debug$S#+@B.data]@0Р.text+aŒ P`.debug$S  @B.dataL @0Р.textЯP ! P`.debug$SlQ!Н"@B.dataя"@0Р.debug$T\ѓ"@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё{MJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_sort.obj:<!ovovMicrosoft (R) Optimizing Compilerю=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_sort.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒХg‡єПРXXeƒЪкв'Ц’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓХj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sort.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 232 - ^ = $23 $T0 236 - ^ = $24 $T0 240 - ^ = U‹ььфSVWНџџџЙ9ИЬЬЬЬѓЋƒ}%hjЁƒРPhjшƒФƒјuЬƒ}%hjЁƒРPhjшƒФƒјuЬ‹E;E}&hj‹ ƒСQhjшƒФƒјuЬЧEьы ‹EьƒР‰Eь‹Eь;E}‹Eь‹M ‹Uь‰ысЧEьы ‹EьƒР‰Eь‹Eь;E}{‹Eь‹M‹‰Uј‹Eьƒш‰Eры ‹Eрƒш‰Eрƒ}р|6‹Eр‹M‹Uј;}(‹Eр‹M‹Uр‹u‹–‰T‹Eр‹M ‹Uр‹u ‹–‰TыЛ‹Eр‹M‹Uј‰T‹Eр‹M ‹Uь‰Tщtџџџ‹E‰Eьы ‹EьƒР‰Eь‹Eь;EŠ‹Eь‹M‹‰Uј‹E‹M‹Uј;Tќ}j‹Eƒш‰Eры ‹Eрƒш‰Eрƒ}р|6‹Eр‹M‹Uј;}(‹Eр‹M‹Uр‹u‹–‰T‹Eр‹M ‹Uр‹u ‹–‰TыЛ‹Eр‹M‹Uј‰T‹Eр‹M ‹Uь‰Tщaџџџ_^[Фф;ьш‹х]У%#,5<PW`g}…Ž•$ѕ$фS ёжHЁSKP_Silk_insertion_sort_increasingфР$ € ta  tindex L K рџџџtj ьџџџti јџџџtvalueђ№8ф+€0€I1€t2€Ђ5€М6€Ш7€Ъ:€ф;€№<€=€+>€>?€@@€MA€ZB€_F€|G€ˆH€—I€ПJ€вK€хL€чM€єN€P€Q€ X \   L >= KL > 0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sort.c+K > 0).U‹ььфSVWНџџџЙ9ИЬЬЬЬѓЋƒ}%hjЁƒРPhjшƒФƒјuЬƒ}%hjЁƒРPhjшƒФƒјuЬ‹E;E}&hj‹ ƒСQhjшƒФƒјuЬЧEьы ‹EьƒР‰Eь‹Eь;E}‹Eь‹M ‹Uь‰ысЧEьы ‹EьƒР‰Eь‹Eь;E}{‹Eь‹M‹‰Uј‹Eьƒш‰Eры ‹Eрƒш‰Eрƒ}р|6‹Eр‹M‹Uј;~(‹Eр‹M‹Uр‹u‹–‰T‹Eр‹M ‹Uр‹u ‹–‰TыЛ‹Eр‹M‹Uј‰T‹Eр‹M ‹Uь‰Tщtџџџ‹E‰Eьы ‹EьƒР‰Eь‹Eь;EŠ‹Eь‹M‹‰Uј‹E‹M‹Uј;Tќ~j‹Eƒш‰Eры ‹Eрƒш‰Eрƒ}р|6‹Eр‹M‹Uј;~(‹Eр‹M‹Uр‹u‹–‰T‹Eр‹M ‹Uр‹u ‹–‰TыЛ‹Eр‹M‹Uј‰T‹Eр‹M ‹Uь‰Tщaџџџ_^[Фф;ьш‹х]У%#,95<PW9`g}…9Ž•$ѕ$фS ёжHЁSKP_Silk_insertion_sort_decreasingфР$ € ta  tindex L K рџџџtj ьџџџti јџџџtvalueђ№8фY€^€I_€t`€Ђc€Мd€Шe€Ъh€фi€№j€k€+l€>m€@n€Mo€Zp€_t€|u€ˆv€—w€Пx€вy€хz€ч{€є|€~€€ 5X5 \5 5 5 YU‹ььфSVWНџџџЙ9ИЬЬЬЬѓЋƒ}%hjЁƒРPhjшƒФƒјuЬƒ}%hjЁƒРPhjшƒФƒјuЬ‹E;E}&hj‹ ƒСQhjшƒФƒјuЬЧEјы ‹EјƒР‰Eј‹Eј;E}‹Eј‹M ‹Uј‰ысЧEјы ‹EјƒР‰Eј‹Eј;E‹Eј‹MПA‰Uр‹Eјƒш‰Eьы ‹Eьƒш‰Eьƒ}ь|9‹Eь‹MПA9Uр~*‹Eь‹M‹Uь‹uf‹Vf‰TA‹Eь‹M ‹Uь‹u ‹–‰TыИ‹Eь‹Mf‹Uрf‰TA‹Eь‹M ‹Uј‰Tщjџџџ‹E‰Eјы ‹EјƒР‰Eј‹Eј;E‘‹Eј‹MПA‰Uр‹E‹MПTAў9Uр~o‹Eƒш‰Eьы ‹Eьƒш‰Eьƒ}ь|9‹Eь‹MПA9Uр~*‹Eь‹M‹Uь‹uf‹Vf‰TA‹Eь‹M ‹Uь‹u ‹–‰TыИ‹Eь‹Mf‹Uрf‰TA‹Eь‹M ‹Uј‰TщZџџџ_^[Фф;ьш‹х]У%#,D5<PWD`g}…DŽ•#$ѕ$+фS ёмN+ЃSKP_Silk_insertion_sort_decreasing_int16фР$ € a  tindex L K ьџџџtj јџџџti рџџџtvalueђ№+8ф‡€Œ€I€tŽ€Ђ‘€М’€Ш“€Ъ–€ш—€ѕ˜€™€3š€F›€Hœ€W€dž€iЂ€†Ѓ€“Є€ЃЅ€ЬІ€сЇ€єЈ€іЉ€Њ€Ќ€­€ @X@ \@ @ @ ‡U‹ььфSVWНџџџЙ9ИЬЬЬЬѓЋƒ} %hjЁƒРPhjшƒФƒјuЬЧEьы ‹EьƒР‰Eь‹Eь;E }X‹Eь‹M‹‰Uј‹Eьƒш‰Eры ‹Eрƒш‰Eрƒ}р|#‹Eр‹M‹Uј;}‹Eр‹M‹Uр‹u‹–‰TыЮ‹Eр‹M‹Uј‰Tы—_^[Фф;ьш‹х]У%,O5<Ч$ѕ$ЯфS ёСSЯЛЅSKP_Silk_insertion_sort_increasing_all_valuesфР$ € ta  L рџџџtj ьџџџti јџџџtvalueђhЯ8 \Г€И€IЛ€cМ€oН€—О€ЊП€ЌР€ЙС€ЛТ€ KXK \K K K ГVОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SH .text Yo1ш\Ÿ§H.debug$S“4 .rdata “6P(.rdata yEєjЄ .rdata†n,5Д.data?(3wo.rdata  іЌliЈ т .rtc$TMZ Ь.Lё  .rtc$IMZ žz] . .text  yќdЙЬё!д.debug$S  Жќ€Y= .data(@Жa.text+ жъТ^G№Мˆ.debug$S эзi\š .data‚ŽŽpФ.textЯіiNЮе@.debug$Slнѕс9 .datatсЧ2.debug$T\v_SKP_Silk_insertion_sort_increasing??_C@_1O@HOHCBFDB@?$AAL?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAK?$AA?$AA@??_C@_1M@JJNOHMOJ@?$AAL?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@__CrtDbgReportW??_C@_1IG@MCJJGPJH@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_insertion_sort_increasing@@9@9??_C@_1M@ONEGJFGG@?$AAK?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_insertion_sort_decreasing?__LINE__Var@?1??SKP_Silk_insertion_sort_decreasing@@9@9_SKP_Silk_insertion_sort_decreasing_int16?__LINE__Var@?1??SKP_Silk_insertion_sort_decreasing_int16@@9@9_SKP_Silk_insertion_sort_increasing_all_values?__LINE__Var@?1??SKP_Silk_insertion_sort_increasing_all_values@@9@9 /621 1273638391 100666 19232 ` L ї-ъKЫ<ˆ.drectveA .debug$SxU@B.text2Эџ P`.debug$SИЉa@B.rdata–ї@@@.data@0Р.rdata‘@0@.rtc$TMZЁЅ@0@.rtc$IMZЏГ@0@.textъНЇ# P`.debug$Sдƒ$W( @B.rdataй(@0@.dataё(@0Р.textGѕ( P`.debug$Sр<)*@B.textrN*Р, P`.debug$Sм$-/@B.rdata2/@0@.rdataŒD/@@@.dataа/@0Р.rdataд/@0@.text_ц/E0 P`.debug$Sєc0W1@B.textр‰1 P`.debug$SЌi24@B.textзG45 P`.debug$Sˆ<5Ф6@B.textэі6 P`.debug$Sу7s9@B.text Ѕ9 P`.debug$SŒБ:=<@B.debug$T\o<@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‹UJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_solve_LS_FIX.obj:<!ovovMicrosoft (R) Optimizing Compilerі=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_solve_LS_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё€"@SA_Method"SA_Parameter­inv_D_t!wchar_t"SA_AttrTarget usize_t­inv_D_tєXprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9‹ NяХюП/=Уо Ва„’Џ‹ц+7 @#nŽи,ˆ{ѓ№ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_solve_ls_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 1440 - ^ = $23 $T0 1444 - ^ = $24 $T0 1448 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 512 - ^ = $23 $T0 516 - ^ = $24 $T0 520 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 288 - ^ = $23 $T0 292 - ^ = $24 $T0 296 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 244 - ^ = $23 $T0 248 - ^ = $24 $T0 252 - ^ = U‹ььœSVWНdњџџЙgИЬЬЬЬѓЋЁ3Х‰Eќƒ} ~%hjЁƒРPhjшƒФƒјuЬ…(ћџџPјћџџQ‹U R‹EPшƒФ…АћџџP‹MQ‹U R…јћџџPшƒФ‹E P(ћџџQ•АћџџRшƒФ ‹EPАћџџQ‹U R…јћџџPшƒФR‹ЭPшXZ_^[‹Mќ3ЭшФœ;ьш‹х]У‹џјћџџАћџџ@(ћџџ€inv_DYL_Q16!/ 6?Fj5ˆ}ЂvР„Эв$с#ю"ќ ѕ$2œЯ( ё%<2(2ПSKP_Silk_solve_LDL_FIXœРм … :ќџџџ      tA  tM b tx_Q16 (ћџџЙinv_D АћџџИY јћџџЗL_Q16ђP2(DL€(Q€SW€q]€c€Љh€Чi€ X \ Ј Ќ З Л Ц Ъ е й ф ш h l j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_solve_ls_fix.cLM <= 16).U‹ььќSVWНўџџЙИЬЬЬЬѓЋЁ3Х‰Eќƒ} ~%hjЁƒРPhjшƒФƒјuЬЧEаПE ПM ЏС‹U‹ ‹UL‚ќс€uVПE ПM ЏС‹U‹M‹#Tќт€t Ч… ўџџ€ыПE ПM ЏС‹U‹ ‹UL‚ќ‰ ўџџ‹… ўџџ‰…ўџџыSПM ПU ЏЪ‹E‹U‹ DŠќ%€u Ч…ўџџџџџыПM ПU ЏЪ‹E‹‹ETˆќ‰•ўџџ‹ўџџ‰ўџџh‹…ўџџ™jhуSRPшБ шPшƒФ‰E ЧEФы ‹EФƒР‰EФ‹EФ;E їƒ}а…эЧEаЧEшы ‹EшƒР‰Eш‹Eш;E У‹EшЏE ‹M‰UИЧE”ЧEєы ‹EєƒР‰Eє‹Eє;EшЩ‹Eє‹Œ…јўџџСљ‹Uє‹EИПЏЪ‹Eє‹”…јўџџтџџ‹Eє‹uИП†ЏаСњЪ‹Uє‹EИ‹СњƒТбњ‹EєЏ”…јўџџЪ‹Uє‰Œ•@џџџ‹Eє‹Œ…@џџџСљ‹Uє‹EИПЏЪ‹Eє‹”…@џџџтџџ‹Eє‹uИП†ЏаСњU”б‹Mє‹EИ‹ ˆСљƒСбљ‹EєЏŒ…@џџџб‰U”щ"џџџ‹EшЏE Eш‹M‹+U”‰U”‹E”;E }a‹EФƒРПШПU ЏЪ+M”‰M”ЧEєы ‹EєƒР‰Eє‹Eє;E }%‹EєЏE Eє‹M‹U”‹EєЏE Eє‹M‰ыЪЧEащF‹Eш‹M”‰Œ…јўџџj$‹E”PшƒФ‰…ьўџџ‹…ьўџџСр‰…рўџџ‹E”СјПрўџџЏС‹U”тџџПрўџџЏбСњТ‹•рўџџСњƒТбњЏU”ТЙ+Ш‰Mˆ‹EˆСјПрўџџЏС‹UˆтџџПрўџџЏбСњТ‹•рўџџСњƒТбњЏUˆТ‰…дўџџ‹Eш‹M‹•ьўџџ‰С‹Eш‹M‹•дўџџ‰TС‹EшЏE Eш‹MЧ‹EшЏE ‹M‰UИ‹EшƒРЏE ‹M‰UЌ‹EшƒР‰Eєы ‹EєƒР‰Eє‹Eє;E ЧE”ЧEмы ‹EмƒР‰Eм‹Eм;Eш}b‹Eм‹Œ…@џџџСљ‹Uм‹EЌПЏЪ‹Eм‹”…@џџџтџџ‹Eм‹uЌП†ЏаСњU”б‹Mм‹EЌ‹ ˆСљƒСбљ‹EмЏŒ…@џџџб‰U”ы‹Eє‹MИ‹+U”‰U”‹E”™‹Ш‹ђ‹…дўџџ™RPVQшБ ш‹U”СњПьўџџЏб‹M”сџџПЕьўџџЏЮСљб‹ьўџџСљƒСбљЏM”бСњТ‹UєЏU Uш‹M‰‘‹E ‹MЌ‰UЌщиўџџщ(ќџџщєћџџƒ}аt%hjЁƒР?PhjшƒФƒјuЬR‹ЭPшXZ_^[‹Mќ3ЭшФќ;ьш‹х]У‹џ@џџџ@јўџџ@D_Q0v_Q0!/ 6A?F8C?BEJ-QэCєBk=rA{‚•9š$Љ#Ж"Ф8а7м6ѕ$ъќD( ё@ъ(ъЊSKP_Silk_LDL_factorize_FIXќР< … :ќџџџ     tA  tM tL_Q16 Јinv_D шџџџtj Фџџџtloop_count Ќџџџptr2 ˆџџџterr аџџџtstatus ьўџџtone_div_diag_Q36 мџџџtk рўџџtone_div_diag_Q40 дўџџtone_div_diag_Q48 Иџџџptr1  џџџtdiag_min_value @џџџИv_Q0 ”џџџttmp_32 јўџџИD_Q0 єџџџtiђxъ(,lq€(x€Sz€Z{€O|€w}€~~€œ€Ќ€€Г€б‚€5ƒ€•„€š…€А‡€Иˆ€ЮŠ€ш‹€ Œ€ €Ž€€&“€:”€I•€–€б™€рš€№œ€€ž€'Ÿ€G €NЁ€hЂ€ШЃ€ЪЄ€йЈ€IЋ€UЌ€Z­€_Ў€dА€Б€ 5X5 \5 Ќ7 А7 Л6 П6 Ъ8 Ю8 й9 н9 \5 `5 status == 0qU‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E ~ ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФЖ ёp0G@.SKP_max_32ФР € ta  tbђ0G$ё€ђ€@ѓ€ JXJ \J АJ ДJ U‹ььSVWНфўџџЙGИЬЬЬЬѓЋƒ}u%hjЁƒРPhjшƒФƒјuЬƒ} %hjЁƒРPhjшƒФƒјuЬƒ}~ ‹E‰…єўџџы ‹Mїй‰єўџџ‹•єўџџRшƒФƒш‰Eј‹E‹Mјгр‰Eд‹MдСљИџџџ™їљ‰Eр‹EрСр‰EМ‹EдСјПMрЏС‹UдтџџПMрЏбСњТїиСр‰EШ‹EШСјПMрЏС‹UШтџџПMрЏбСњUМа‹EрСјƒРбјЏEШа‰UМИ=+Eј+E ‰Eьƒ}ь‹MьїйИ€гј‹MьїйКџџџгњ;Т~m‹MьїйИ€гј9EМ~‹MьїйК€гњ‰•єўџџы:‹MьїйИџџџгј9EМ}‹MьїйКџџџгњ‰•№ўџџы ‹EМ‰…№ўџџ‹№ўџџ‰єўџџ‹•єўџџ‰•ьўџџыk‹MьїйИџџџгј9EМ~‹MьїйКџџџгњ‰•шўџџы:‹MьїйИ€гј9EМ}‹MьїйК€гњ‰•фўџџы ‹EМ‰…фўџџ‹фўџџ‰шўџџ‹•шўџџ‰•ьўџџ‹Mьїй‹…ьўџџгрыыƒ}ь } ‹EМ‹Mьгјыы3Р_^[Ф;ьш‹х]У%a,]5Y<PUW]`Yg˜hj"ѕ$r( ёє8r^ЛSKP_INVERSE32_varQР\ € b32  Qres јџџџtb_headrm ьџџџtlshift Мџџџtresult Шџџџterr_Q32 дџџџtb32_nrm рџџџtb32_invђЈrœА€Д€IЕ€tИ€ЅЙ€АМ€СП€ЪТ€єХ€-Ш€;Щ€EЪ€HЫ€JЬ€PЭ€ZЮ€\а€^г€ QXQ \Q 4Q 8Q Qres > 0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАb32 != 0U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E%џџt‹EСјPшƒФыыЗEPшƒФƒР_^[ФР;ьш‹х]У0oAoW"ѕ$_Рš ёi4_KSKP_Silk_CLZ32РР € tin32ђH_<p€r€(s€9t€;u€Kw€ hXh \h Ќh Аh U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјПE…Рu ИщЂПE%џt0ПE%№tf‹EfСј f‰Eы‹EјƒР‰Eјf‹EfСјf‰Eы+ПE%№џt‹EјƒР‰Eјf‹EfСјf‰Eы ‹EјƒР ‰EјПEƒр tПEƒрt‹Eјы%ы‹EјƒРыыПEƒрt ‹EјƒРыы‹EјƒР_^[‹х]Уѕ$рЬ  ё{4рй SKP_Silk_CLZ16ЬР € in16 јџџџtout32ђ№рфL€M€%N€-O€7R€BS€MT€YU€[V€dW€pY€rZ€}[€†\€’]€”^€b€Іc€Џd€Дe€Жf€Оg€Рh€Щi€бj€гk€йm€ oXo \o Мo Рo U‹ьь№SVWНџџџЙ<ИЬЬЬЬѓЋЧEјы ‹EјƒР‰Eј‹Eј;E‡‹Eј‹M ‹С‰Uр‹Eј‹M ‹TС‰Uд‹Eј‹M‹‰Uь‹Eь™‹Ш‹ђ‹Eд™RPVQшБ ш‹UьСњПMрЏб‹MьсџџПuрЏЮСљб‹MрСљƒСбљЏMьбСњТ‹Uј‹M‰‘щdџџџ_^[Ф№;ьш‹х]УrCyBЯ"ѕ$з№ ~  ёэ@зУВSKP_Silk_LS_divide_Q16_FIX№Р0 € tT  Јinv_D tM рџџџtone_div_diag_Q36 дџџџtone_div_diag_Q48 ьџџџttmp_32 јџџџtiђXз(LИ€Н€<О€HП€UС€aТ€ОУ€УФ€ vXv \v 0v 4v U‹ьь№SVWНџџџЙ<ИЬЬЬЬѓЋЧEјы ‹EјƒР‰Eј‹Eј;E Њ‹EјЏE ‹M‰UрЧEдЧEьы ‹EьƒР‰Eь‹Eь;Eј}_‹Eь‹Mр‹Сњ‹Eь‹MПЏа‹Mь‹Eр‹ ˆсџџ‹Eь‹uП†ЏШСљMдЪ‹Uь‹E‹СњƒТбњ‹Eь‹uрЏ†Ъ‰Mды‹Eј‹M‹+Uд‹Eј‹M‰щAџџџ_^[‹х]Уѕ$э№~  ёх@эцЏSKP_Silk_LS_SolveFirst_FIX№Р0 € L_Q16  tM b tx_Q16 ьџџџtj рџџџptr32 дџџџttmp_32 јџџџtiђhэ( \Э€в€<г€Lд€Sе€mж€Ъз€Ьи€сй€цк€ }X} \} (} ,} U‹ьь№SVWНџџџЙ<ИЬЬЬЬѓЋ‹E ƒш‰Eјы ‹Eјƒш‰Eјƒ}јŒЩ‹E kРEј‹M‰UрЧEд‹E ƒш‰Eьы ‹Eьƒш‰Eь‹Eь;Eј~zПEьПM ЏС‹Uр‹‚Сј‹Mь‹UП ŠЏСПUьПM Џб‹Mр‹‘тџџ‹Mь‹uП ŽЏбСњUдаПEьПM ЏС‹Mь‹u‹ ŽСљƒСбљ‹uрЏ †б‰Uдщuџџџ‹Eј‹M‹+Uд‹Eј‹M‰щ$џџџ_^[‹х]Уѕ$ №~  ёф? ЕSKP_Silk_LS_SolveLast_FIX№Р0 € L_Q16  M b tx_Q16 ьџџџtj рџџџptr32 дџџџttmp_32 јџџџtiђh ( \у€ш€<щ€Nъ€Uы€qь€цэ€ыю€я€№€ „X„ \„ $„ („ VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sx.text2ёƒКЂЎ“К.debug$SИPА} $LN6$$LN5*$LN4,$LN7$LN8ј .rdata–FŸu7,.data…чТбч.rdataUЏn…\o ~ ™ .rtc$TMZЬ.LАЧ .rtc$IMZ žz]ж э .text ъJaаM:.debug$S д ЁЪ_Sќ $LN31р $LN30х $LN32Ш $LN33Р .rdata PЃŸ .data љЧƒгt __allshr __allmul .textGСв Uмtі€.debug$Sрe=њxЎ .textr GBі п…іk.debug$SмAозК .rdataЋPЮ.rdataŒы.datašNrг.rdataік–!.text_йIѕ=vЄёC.debug$Sє:Яq‘R .textр}BИ#u‘ћ.debug$SЌбЛ5сb .textз2ч(р+A.debug$Sˆf0r .textэєE7Аg8“.debug$Sм€{Ž .text B3Eж2ќ'c.debug$SŒ]ИЄнЊ .debug$T \Х_SKP_Silk_solve_LDL_FIX__CrtDbgReportW??_C@_1JG@OAEABAGG@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_solve_LDL_FIX@@9@9??_C@_1BA@JGCKBLPP@?$AAM?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1?$AA6?$AA?$AA@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_LDL_factorize_FIX??_C@_1BI@MDCHJGIP@?$AAs?$AAt?$AAa?$AAt?$AAu?$AAs?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@?__LINE__Var@?1??SKP_Silk_LDL_factorize_FIX@@9@9@ae4c369d_SKP_max_32_SKP_INVERSE32_varQ??_C@_1BC@MIGJDBBJ@?$AAQ?$AAr?$AAe?$AAs?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1IM@NKJIPJPB@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_INVERSE32_varQ@@9@9@ae4c369d??_C@_1BC@LJHCOKEE@?$AAb?$AA3?$AA2?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_Silk_CLZ32_SKP_Silk_CLZ16_SKP_Silk_LS_divide_Q16_FIX_SKP_Silk_LS_SolveFirst_FIX_SKP_Silk_LS_SolveLast_FIX/660 1273638391 100666 5532 ` Lї-ъK".drectveAT .debug$SД •I@B.rdataH…@0@.textЎЭ{ P`.debug$SPЃѓ@B.rtc$TMZ%)@0@.rtc$IMZ37@0@.debug$T\A@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёƒQJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_sigm_Q15.obj:<!ovovMicrosoft (R) Optimizing Compilerђ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_sigm_Q15.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёП ƒsigm_LUT_slope_Q10 ƒsigm_LUT_pos_Q15 ƒsigm_LUT_neg_Q15"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒХщ2БћєM=Ъ™VZk Ъ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓЩj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigm_q15.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ =   Є С Х р ф э™I @“]НpэyВ}$@l"BMлU‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋƒ}}G‹Eїи‰E}Р|3Рыnы.‹EСј‰Eј‹EјП …‹UƒтПТЏШ‹Uј‹•+Сы>ы<}Р| Иџы,ы*‹EСј‰Eј‹EјП…‹MƒсПбЏТ‹Mј_^[‹х]УK a  Ѓ ѕ$ЎЬW ё}7ЎЇSKP_Silk_sigm_Q15ЬР € tin_Q5 јџџџtindђЎ8„6€9€$;€,<€5=€9>€;@€DA€iC€kE€tF€{G€}I€†J€ЇM€ X \ Р Ф VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SД е)@s.rdataHЗ ˆ—*0.textЎ]vмЫdЁм.debug$SP Ќ< .rtc$TMZЬ.LOf .rtc$IMZžz]uŒ .debug$T\›_sigm_LUT_slope_Q10_sigm_LUT_pos_Q15_sigm_LUT_neg_Q15_SKP_Silk_sigm_Q15__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/695 1273638391 100666 12706 ` Lї-ъKc*N.drectveAl .debug$S­Щ @B.textˆ-Е, P`.debug$S<mЉ@B.rtc$TMZSW@0@.rtc$IMZae@0@.textao P`.debug$Sаш@B.text`z P`.debug$S4˜Ь @B.text|ў z#' P`.debug$S % '@B.textЂ'/( P`.debug$SˆM(е)@B.debug$T\*@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‰TJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_shell_coder.obj:<!ovovMicrosoft (R) Optimizing Compilerѕ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_shell_coder.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёz' WSKP_Silk_shell_code_table0' XSKP_Silk_shell_code_table1' YSKP_Silk_shell_code_table2' TSKP_Silk_shell_code_table3. QSKP_Silk_shell_code_table_offsets"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_t!ЧSKP_Silk_range_coder_state!ЧSKP_Silk_range_coder_stateєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlї/4z4ћя‹F+_ХЛ­A’Џ‹ц+7 @#nŽи,ˆ{Œ(yFiдz<G;1=1ѓ–j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_shell_coder.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 292 - ^ = $23 $T0 296 - ^ = $24 $T0 300 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 280 - ^ = $23 $T0 284 - ^ = $24 $T0 288 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 220 - ^ = $23 $T0 224 - ^ = $24 $T0 228 - ^ = Ј Ќ б е њ ў # ' L6 P6 U‹ьь SVWНрўџџЙHИЬЬЬЬѓЋЁ3Х‰Eќj‹E PMиQшƒФ jEиPMРQшƒФ jEРPMАQшƒФ jEАPMЄQшƒФ h‹EЄP‹MАQ‹URшƒФh‹EАP‹MРQ‹URшƒФh‹EРP‹MиQ‹URшƒФh‹EиP‹M ‹R‹EPшƒФh‹EмP‹M ‹QR‹EPшƒФh‹EФP‹MрQ‹URшƒФh‹EрP‹M ‹QR‹EPшƒФh‹EфP‹M ‹QR‹EPшƒФh‹EДP‹MШQ‹URшƒФh‹EШP‹MшQ‹URшƒФh‹EшP‹M ‹Q R‹EPшƒФh‹EьP‹M ‹Q(R‹EPшƒФh‹EЬP‹M№Q‹URшƒФh‹E№P‹M ‹Q0R‹EPшƒФh‹EєP‹M ‹Q8R‹EPшƒФR‹ЭPшXZ_^[‹Mќ3ЭшФ ;ьш‹х]УIиџџџ РџџџАџџџЄџџџpulses4pulses3pulses2pulses13-E-W-i-q‚4Š›4ЃД4МЯ4зы4ѓ4  4(<4DU4]n4vŠ4’І4ЎП4Чл4уї4 %4@LXdѕ$ˆ Ю( ё:<ˆ(ˆзSKP_Silk_shell_encoder Р` … :ќџџџ       СsRC  pulses0 Аџџџ(pulses3 Єџџџвpulses4 иџџџбpulses1 Рџџџ)pulses2ђРˆДV€(]€:^€L_€^`€pb€‰d€Ђf€Лg€жh€ђj€ k€'l€Cn€\p€uq€‘r€­t€Цu€тv€ўw€ X \ Ј Ќ З Л Ц Ъ е й ф ш ѓ ї | € !&U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјы ‹EјƒР‰Eј‹Eј;E}"‹Eјбр‹Mјбс‹U ‹‚‹U DŠ‹Mј‹U‰ŠыЭ_^[‹х]Уѕ$aЬ @ ё•4aZЬcombine_pulsesЬР € tout  in len јџџџtkђ@a4%€'€8(€X)€Z*€ -X- \- и- м- U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋƒ}~(‹EЗ E‹UJ‰Eј‹EјP‹M Q‹URшƒФ _^[ФЬ;ьш‹х]У+6E5Xѕ$`Ь@ ёБ2`LЯencode_splitЬР € СsRC  p_child1 p xshell_table јџџџxcdfђ@`42€5€$6€87€L9€ 4X4 \4 є4 ј4 U‹ььSVWНьўџџЙEИЬЬЬЬѓЋЁ3Х‰Eќh‹EP‹M QUєRE№PшƒФh‹E№P‹M QUмREиPшƒФh‹EиP‹M QUДREАPшƒФh‹EАP‹M Q‹UƒТR‹EPшƒФh‹EДP‹M Q‹UƒТ R‹EƒРPшƒФh‹EмP‹M QUМREИPшƒФh‹EИP‹M Q‹UƒТR‹EƒРPшƒФh‹EМP‹M Q‹UƒТR‹EƒРPшƒФh‹EєP‹M QUфREрPшƒФh‹EрP‹M QUФREРPшƒФh‹EРP‹M Q‹UƒТ$R‹EƒР PшƒФh‹EФP‹M Q‹UƒТ,R‹EƒР(PшƒФh‹EфP‹M QUЬREШPшƒФh‹EШP‹M Q‹UƒТ4R‹EƒР0PшƒФh‹EЬP‹M Q‹UƒТIF[IcxI€˜I ЛIУиIрћII&;ICXI`{IƒžIІЛIУоIцIB"/<AH@T?`>ѕ$| В( ё+<|(|йSKP_Silk_shell_decoderРT … :ќџџџ      tpulses0  СsRC pulses4 №џџџ(pulses3 Аџџџбpulses1 иџџџ)pulses2ђ |”€€(†€Eˆ€bŠ€‹€ŸŒ€ТŽ€п€€%’€B”€_•€‚–€Ѕ˜€Т™€хš€›€ =X= \= Ј@ Ќ@ З? Л? Ц> Ъ> еA йA фB шB l= p= U‹ььиSVWН(џџџЙ6ИЬЬЬЬѓЋƒ}~C‹Eбј‰Eј‹EЗ E‹UJ‰Eь‹EјP‹MьQ‹UR‹EPшƒФ‹E‹M+‹U ‰ ы‹EЧ‹E Ч_^[Фи;ьш‹х]У36QJ…ѕ$и$ ён2yдdecode_splitиР € tp_child1  tp_child2 СsRC p xshell_table јџџџtcdf_middle ьџџџxcdfђh \B€F€$G€,H€@I€XJ€eK€gL€pM€yO€ IXI \I I $I VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S іАž.textˆ,uGUuМ+3.debug$S<D*tR $LN6h$LN5p$LN4x$LN3€$LN78$LN808TpŒŸ Ў Щ .rtc$TMZЬ.Lрї .rtc$IMZžz] .texta4ŒС….debug$SвбА , .text `2›wžЙм.debug$S 4 o:Ё]< J b.text |'юЖГ•d.debug$S   o … $LN5d $LN4l $LN3t $LN6@ $LN78 .text  вc^ƒy}.debug$Sˆ ю&с% Ћ .debug$T\У_SKP_Silk_shell_encoder_SKP_Silk_shell_code_table0_SKP_Silk_shell_code_table1_SKP_Silk_shell_code_table2_SKP_Silk_shell_code_table3___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_combine_pulses_encode_split_SKP_Silk_range_encoder_SKP_Silk_shell_code_table_offsets_SKP_Silk_shell_decoder_decode_split_SKP_Silk_range_decoder/733 1273638391 100666 10635 ` Lї-ъKЕ!L.drectveAМ .debug$SЈ§@B.textђЅ— P`.debug$S$= @B.rtc$TMZЋЏ@0@.rtc$IMZЙН@0@.textЗЧ~ P`.debug$S@B.rdataB@0@.rdataŒV@@@.dataт@0Р.rdataц@0@.text_јW P`.debug$Sєui@B.textр› P`.debug$SЌ{'!@B.debug$T\Y!@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёPJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_schur64.obj:<!ovovMicrosoft (R) Optimizing Compilerё=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_schur64.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒay 09ФпЕ.ЄРv!Щ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_schur64.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 404 - ^ = $23 $T0 408 - ^ = $24 $T0 412 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 300 - ^ = $23 $T0 304 - ^ = $24 $T0 308 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = U‹ььSVWНpўџџЙdИЬЬЬЬѓЋЁ3Х‰Eќ‹E ƒ8‹EСрPj‹MQшƒФ 3Рщ^ЧEєы ‹EєƒР‰Eє‹EƒР9Eє})‹Eє‹Mє‹U ‹ ЉŒХ\џџџ‹Uє‹Eє‹ŒХ\џџџ‰ŒеXџџџыУЧEєы ‹EєƒР‰Eє‹Eє;Eєj‹…\џџџP‹Mє‹”Э`џџџїкRшƒФ ‰…4џџџ‹…4џџџСјƒРбј‹Mє‹U‰ŠЧEшы ‹EшƒР‰Eш‹E+Eє9Eш“‹EшEє‹ŒХ`џџџ‰Lџџџ‹Eш‹ŒХ\џџџ‰@џџџ‹…@џџџбр™‹Ш‹ђ‹…4џџџ™RPVQшБ ш…Lџџџ‹UшUє‰„е`џџџ‹…Lџџџбр™‹Ш‹ђ‹…4џџџ™RPVQшБ ш…@џџџ‹Uш‰„е\џџџщUџџџщїўџџ‹…\џџџR‹ЭPшXZ_^[‹Mќ3ЭшФ;ьш‹х]УIXџџџˆC>Ч)HO†АЕФбрьѕ$ђ V( ё36ђ(ђпSKP_Silk_schur64Ра … :ќџџџ    trc_Q16  c torder 4џџџtrc_tmp_Q31 єџџџtk XџџџнC шџџџtn LџџџtCtmp1_Q30 @џџџtCtmp2_Q30ђАђ8Є.€(4€05€E6€L9€i:€;€’=€А?€дB€ыE€ F€G€/J€fK€šL€ŸM€ЄO€ЊP€ X \ Ђ І Б Е Р Ф t x "U‹ьь(SVWНиўџџЙJИЬЬЬЬѓЋƒ} u%hjЁƒРPhjшƒФƒјuЬƒ}}%hjЁƒРPhjшƒФƒјuЬƒ}~ ‹E‰…шўџџы ‹Mїй‰шўџџ‹•шўџџRшƒФƒш‰Eј‹E‹Mјгр‰EШƒ} ~ ‹E ‰…шўџџы ‹M їй‰шўџџ‹•шўџџRшƒФƒш‰Eь‹E ‹Mьгр‰EМ‹MМСљИџџџ™їљ‰Eд‹EШСјПMдЏС‹UШтџџПMдЏбСњТ‰EА‹EМ™‹Ш‹ђ‹EА™RPVQшБ шСр‹UШ+а‰UШ‹EШСјПMдЏС‹UШтџџПMдЏбСњUАа‰UА‹EјƒР+Eь+E‰Eрƒ}р‹MрїйИ€гј‹MрїйКџџџгњ;Т~m‹MрїйИ€гј9EА~‹MрїйК€гњ‰•шўџџы:‹MрїйИџџџгј9EА}‹MрїйКџџџгњ‰•фўџџы ‹EА‰…фўџџ‹фўџџ‰шўџџ‹•шўџџ‰•рўџџыk‹MрїйИџџџгј9EА~‹MрїйКџџџгњ‰•мўџџы:‹MрїйИ€гј9EА}‹MрїйК€гњ‰•иўџџы ‹EА‰…иўџџ‹иўџџ‰мўџџ‹•мўџџ‰•рўџџ‹Mрїй‹…рўџџгрыыƒ}р } ‹EА‹Mргјыы3Р_^[Ф(;ьш‹х]У%:,652<.P-W6`2g.˜AдA3:Џѕ$З( Ш ё4ЗЃлSKP_DIV32_varQ(Рh € a32  b32 Qres ьџџџtb_headrm рџџџtlshift Аџџџtresult јџџџta_headrm Мџџџtb32_nrm Шџџџta32_nrm дџџџtb32_invђИЗ Ќ„€ˆ€I‰€tŒ€Ѕ€АŽ€с€ь’€§•€"˜€I›€qž€€Ÿ€Š €Ё€Ђ€•Ѓ€ŸЄ€ЁІ€ЃЉ€ )X) \) X) \) Qres >= 0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.h„b32 != 0U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E%џџt‹EСјPшƒФыыЗEPшƒФƒР_^[ФР;ьш‹х]У0HAHWѕ$_Р: ёi4_KSKP_Silk_CLZ32РР € tin32ђH_<p€r€(s€9t€;u€Kw€ AXA \A ЌA АA U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјПE…Рu ИщЂПE%џt0ПE%№tf‹EfСј f‰Eы‹EјƒР‰Eјf‹EfСјf‰Eы+ПE%№џt‹EјƒР‰Eјf‹EfСјf‰Eы ‹EјƒР ‰EјПEƒр tПEƒрt‹Eјы%ы‹EјƒРыыПEƒрt ‹EјƒРыы‹EјƒР_^[‹х]Уѕ$рЬЌ ё{4рй SKP_Silk_CLZ16ЬР € in16 јџџџtout32ђ№рфL€M€%N€-O€7R€BS€MT€YU€[V€dW€pY€rZ€}[€†\€’]€”^€b€Іc€Џd€Дe€Жf€Оg€Рh€Щi€бj€гk€йm€ HXH \H МH РH VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SЈ.textђ B_ MBY.debug$S$ нЈ6 $LN13№$LN14ф$LN15м_memset ) 8 S __allshr __allmul .rtc$TMZЬ.Lj .rtc$IMZžz]Ї .textЗ №ъэ ]PА'.debug$SФѓ_ŽЖ .rdata љлЗ.Ц  .rdata Œы( .data l!;bу .rdata ік–! .text _йIѕ=vЄёC.debug$Sє :Яq‘^ .textр}BИ#u‘ћ.debug$SЌбЛ5сn .debug$T\~_SKP_Silk_schur64___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_DIV32_varQ??_C@_1BE@NOJNLPIL@?$AAQ?$AAr?$AAe?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@__CrtDbgReportW??_C@_1IM@NKJIPJPB@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_DIV32_varQ@@9@9@e900e1e8??_C@_1BC@LJHCOKEE@?$AAb?$AA3?$AA2?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_Silk_CLZ32_SKP_Silk_CLZ16 /767 1273638391 100666 8757 ` L ї-ъKe8.drectveA .debug$S ]@B.text§ P`.debug$Sh]Х @B.rtc$TMZ37@0@.rtc$IMZAE@0@.text_OЎ P`.debug$SєЬР@B.textрђ P`.debug$SЌв~@B.textGА P`.debug$Sрїз@B.debug$T\ @B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё}NJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_schur.obj:<!ovovMicrosoft (R) Optimizing Compilerя=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_schur.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒ€9Oаg5‘•E˜ЭЅЭЧ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_schur.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 424 - ^ = $23 $T0 428 - ^ = $24 $T0 432 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = U‹ььЄSVWН\ўџџЙiИЬЬЬЬѓЋЁ3Х‰Eќ‹E ‹QшƒФ‰Eмƒ}м}UЧEєы ‹EєƒР‰Eє‹EƒР9Eє}3‹Eє‹M ‹бњ‰•`ўџџ‹Eє‹`ўџџ‰ŒХPџџџ‹Uє‹…`ўџџ‰„еLџџџыЙщЊƒ}м~^‹Eмƒш‰EмЧEєы ‹EєƒР‰Eє‹EƒР9Eє}6‹Eє‹M ‹‹Mмгт‰•`ўџџ‹Eє‹`ўџџ‰ŒХPџџџ‹Uє‹…`ўџџ‰„еLџџџыЖыFЧEєы ‹EєƒР‰Eє‹EƒР9Eє})‹Eє‹Mє‹U ‹ ЉŒХPџџџ‹Uє‹Eє‹ŒХPџџџ‰ŒеLџџџыУЧEєы ‹EєƒР‰Eє‹Eє;Eej‹…PџџџСјPшƒФ‹Ш‹Uє‹„еTџџџ™їљїи‰…(џџџН(џџџџ~ Ч…`ўџџџы0Н(џџџ€џџ} Ч…\ўџџ€џџы ‹…(џџџ‰…\ўџџ‹\ўџџ‰`ўџџ‹•`ўџџ‰•(џџџ‹Eє‹Mf‹•(џџџf‰AЧEшы ‹EшƒР‰Eш‹E+Eє9EшЏ‹EшEє‹ŒХTџџџ‰@џџџ‹Eш‹ŒХPџџџ‰4џџџ‹…4џџџбрСјП(џџџЏС‹•4џџџбттџџП(џџџЏбСњ•@џџџа‹EшEє‰”ХTџџџ‹…@џџџбрСјП(џџџЏС‹•@џџџбттџџП(џџџЏбСњ•4џџџа‹Eш‰”ХPџџџщ9џџџщ†ўџџR‹ЭPшXZ_^[‹Mќ3ЭшФЄ;ьш‹х]УLџџџˆC/&i4ЧЬлшєѕ$Є T( ё84(сSKP_Silk_schurЄРф … :ќџџџ    rc_Q15  c order (џџџtrc_tmp_Q15 4џџџtCtmp2 єџџџtk LџџџнC @џџџtCtmp1 мџџџtlz шџџџtnђ№8ф-€(3€96€?8€\9€:€;€š=€Ѓ>€Р?€є@€іA€јC€D€<E€>H€\K€‡N€лQ€ьT€ U€ V€0W€uX€ЗY€МZ€С[€ X \   Є Џ Г О Т x | U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E%џџt‹EСјPшƒФыыЗEPшƒФƒР_^[ФР;ьш‹х]У0-A-Wѕ$_РЦ ёi4_KSKP_Silk_CLZ32РР € tin32ђH_<p€r€(s€9t€;u€Kw€ &X& \& Ќ& А& U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјПE…Рu ИщЂПE%џt0ПE%№tf‹EfСј f‰Eы‹EјƒР‰Eјf‹EfСјf‰Eы+ПE%№џt‹EјƒР‰Eјf‹EfСјf‰Eы ‹EјƒР ‰EјПEƒр tПEƒрt‹Eјы%ы‹EјƒРыыПEƒрt ‹EјƒРыы‹EјƒР_^[‹х]Уѕ$рЬ8 ё{4рй SKP_Silk_CLZ16ЬР € in16 јџџџtout32ђ№рфL€M€%N€-O€7R€BS€MT€YU€[V€dW€pY€rZ€}[€†\€’]€”^€b€Іc€Џd€Дe€Жf€Оg€Рh€Щi€бj€гk€йm€ -X- \- М- Р- U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E ~ ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФЊ ёp0G@.SKP_max_32ФР € ta  tbђ0GH$ё€ђ€@ѓ€ 4X4 \4 А4 Д4 VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S .text эќ~ŒЯЃ.debug$Sh л $LN26$LN27ј$LN28№' 6 Q .rtc$TMZЬ.Lh .rtc$IMZžz]ŽЅ .text_йIѕ=vЄёC.debug$Sє:Яq‘Д .text р}BИ#u‘ћ.debug$S Ќ бЛ5сФ .text GСв Uмtі€.debug$S р e=њxд .debug$T \р_SKP_Silk_schur___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_CLZ32_SKP_Silk_CLZ16_SKP_max_32 /799 1273638392 100666 11263 ` Lј-ъKk Y.drectveA„ .debug$SXХ@B.textЂП P`.debug$SРй@B.rdata& @0@.rdata–1@@@.dataЧ@0Р.rdata"Ы@0@.rtc$TMZэё@0@.rtc$IMZћџ@0@.texty ‚ P`.debug$S< м@B.text . P`.debug$S€`р@B.data@0Р.rdata8@0@.textSNЁ P`.debug$Spћk@B.rdata8@0@.dataе@0Р.rdata6й@0@.debug$T\ @B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‹UJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_scale_vector.obj:<!ovovMicrosoft (R) Optimizing Compilerі=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_scale_vector.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёq"@SA_Method"SA_Parameter!wchar_t"SA_AttrTargettintptr_t usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒ4l*ЃЈа[У3uУ™XЮ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓБj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_scale_vector.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 232 - ^ = $23 $T0 236 - ^ = $24 $T0 240 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 220 - ^ = $23 $T0 224 - ^ = $24 $T0 228 - ^ = U‹ььфSVWНџџџЙ9ИЬЬЬЬѓЋ} €|%hjЁƒРPhjшƒФƒјuЬ} €џџ}%hjЁƒРPhjшƒФƒјuЬ‹E Ср‰Eр‹Eƒрt5‹EрСј‹MПЏТ‹Mрсџџ‹UПЏЪСљС‹Mf‰ЧEјыЧEј‹Eƒш‰Eы ‹EјƒР‰Eј‹Eј;E}k‹Eј‹M‹A‰Uь‹EрСјПMьЏС‹UртџџПMьЏбСњТ‹Uј‹Mf‰Q‹EрСј‹MьСљЏС‹Uртџџ‹MьСљЏбСњТ‹Uј‹Mf‰DQы„‹Eј;Eu8‹EрСј‹Mј‹UП JЏС‹Uртџџ‹Mј‹uП NЏбСњТ‹Uј‹Mf‰Q_^[Фф;ьш‹х]У(/8?V]fmš ѕ$Ђф [ ёзAЂŽцSKP_Silk_scale_vector16_Q14фР$ € data1  tgain_Q14 tdataSize јџџџti рџџџtgain_Q16 ьџџџtdata32ђЈЂ8œ$€(€L)€z+€ƒ-€‹/€З0€О1€Р2€Ч4€в5€у6€я7€8€L9€N:€V<€Ž>€ X \   gain_Q14 >= -32768j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_scale_vector.c$gain_Q14 < 32768%*U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјы ‹EјƒР‰Eј‹Eј;E}-‹Eј‹M‹™‹Ш‹ђ‹E ™RPVQшБш‹Uј‹M‰‘ыТ_^[ФЬ;ьш‹х]УO3V2q ѕ$yЬ Э ёЙKyeшSKP_Silk_scale_vector32_Q26_lshift_18ЬР € tdata1  tgain_Q26 tdataSize јџџџtiђ@y84F€I€8J€cK€eL€ 1X1 \1 ќ1 1 U‹ььиSVWН(џџџЙ6ИЬЬЬЬѓЋ} џ}a‹E Ср‰EьЧEјы ‹EјƒР‰Eј‹Eј;E}9‹Eј‹M‹СњПEьЏа‹Mј‹E‹ ˆсџџПEьЏШСљб‹Mј‹E‰ˆыЖщ„} €џџ}%hjЁƒР PhjшƒФƒјuЬЧEјы ‹EјƒР‰Eј‹Eј;E}<‹Eј‹M‹СњПE Џа‹Mј‹E‹ ˆсџџПE ЏШСљбСт‹Mј‹E‰ˆыГ_^[Фи;ьш‹х]У’B™>ЂЉ ѕ$ и ? ёЧD  шSKP_Silk_scale_vector32_16_Q14иР € tdata1  tgain_Q14 tdataSize јџџџti ьџџџtgain_Q16ђx 8 lT€W€'X€0Y€JZ€[€ƒ\€ˆ]€Ж^€а_€ `€ b€ :X: \: : : Tgain_Q14 >= ((short)0x8000)U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋ} џ~%hjЁƒРPhjшƒФƒјuЬ} €џџ}%hjЁƒРPhjшƒФƒјuЬ} џ~i‹E -‰E ЧEјы ‹EјƒР‰Eј‹Eј;E}B‹Eј‹M‹СњПE Џа‹Mј‹E‹ ˆсџџПE ЏШСљб‹Mј‹Eˆ‹Mј‹E‰ˆы­ыSЧEјы ‹EјƒР‰Eј‹Eј;E}9‹Eј‹M‹СњПE Џа‹Mј‹E‹ ˆсџџПE ЏШСљб‹Mј‹E‰ˆыЖ_^[ФЬ;ьш‹х]У(U/Q8?VM]QfmK ѕ$SЬ Э ёЏAS?ъSKP_Silk_scale_vector32_Q16ЬР € tdata1  tgain_Q16 dataSize јџџџtiђ€S8 tj€m€Ln€zp€ƒq€Žr€Јs€шt€ъu€ьv€w€=x€?z€ IXI \I №I єI gain_Q16 >= ((short)0x8000)jgain_Q16 <= 0x7FFF + 65536VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SX.textЂ Нk…•к(.debug$SР>ГŠм .rdata&+aг!Ё .rdata–;ОЄБ.datai8P/l.rdata"eX*ž .rtc$TMZ Ь.L 6 .rtc$IMZ žz]E \ .text yзЌ’{R^eџ.debug$S < §ŸcИk __allshr __allmul .text  Т]\m&ИєЛ.debug$S€ oЕэC’ .dataѕ˜oDВ.rdata8bУKч.textS Uо.ЉSyaС.debug$SpСђ;вŸ .rdata8џЬI…М.datag›Tt.rdata6‰вyїІ.debug$T\R_SKP_Silk_scale_vector16_Q14??_C@_1CG@HPNFAFGH@?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA4?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA?9?$AA3?$AA2?$AA7?$AA6?$AA8?$AA?$AA@__CrtDbgReportW??_C@_1JG@HDILJKBL@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_scale_vector16_Q14@@9@9??_C@_1CC@JEBOMLLA@?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA4?$AA?5?$AA?$DM?$AA?5?$AA3?$AA2?$AA7?$AA6?$AA8?$AA?$AA@__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_scale_vector32_Q26_lshift_18_SKP_Silk_scale_vector32_16_Q14?__LINE__Var@?1??SKP_Silk_scale_vector32_16_Q14@@9@9??_C@_1DI@DAHMJJNE@?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA4?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAs?$AAh?$AAo?$AAr?$AAt?$AA?$CJ?$AA0?$AAx?$AA8?$AA0?$AA0?$AA0?$AA?$CJ?$AA?$AA@_SKP_Silk_scale_vector32_Q16??_C@_1DI@KJHOJGEJ@?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAs?$AAh?$AAo?$AAr?$AAt?$AA?$CJ?$AA0?$AAx?$AA8?$AA0?$AA0?$AA0?$AA?$CJ?$AA?$AA@?__LINE__Var@?1??SKP_Silk_scale_vector32_Q16@@9@9??_C@_1DG@DNCFEAIL@?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?5?$AA?$CL?$AA?5?$AA6?$AA5?$AA5?$AA3?$AA6?$AA?$AA@ /838 1273638392 100666 5077 ` Lј-ъKo.drectveA, .debug$St m@B.text€с P`.debug$SdaХ@B.rtc$TMZїћ@0@.rtc$IMZ @0@.debug$T\@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё™\J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_scale_copy_vector16.obj:<!ovovMicrosoft (R) Optimizing Compiler§=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_scale_copy_vector16.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒє|Д`ПЙОcї>Р‹]~Sе’Џ‹ц+7 @#nŽи,ˆ{ (yFiдz<G;1=1ѓдj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_scale_copy_vector16.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 220 - ^ = $23 $T0 224 - ^ = $24 $T0 228 - ^ = U‹ььиSVWН(џџџЙ6ИЬЬЬЬѓЋЧEјы ‹EјƒР‰Eј‹Eј;E}A‹EСј‹Mј‹U П JЏС‹Uтџџ‹Mј‹u П NЏбСњТ‰Eь‹Eј‹Mf‹Uьf‰AыЎ_^[‹х]Уѕ$€иb ёйB€yьSKP_Silk_scale_copy_vector16иР € data_out  data_in tgain_Q16 dataSize јџџџti ьџџџttmp32ђH€8<%€)€8*€i+€w,€y-€ X \   VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$St .text€/щ‡9—Ъ.debug$Sd q?) .rtc$TMZЬ.L"9 .rtc$IMZžz]H_ .debug$T\n_SKP_Silk_scale_copy_vector16__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase /884 1273638392 100666 9309 ` L ј-ъKU8.drectveAЬ .debug$SЄ @B.textmБ P`.debug$Sвц@B.rtc$TMZ|€@0@.rtc$IMZŠŽ@0@.text_˜ї P`.debug$Sє @B.textр; P`.debug$SЌЧ@B.debug$T\љ@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё™\J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_residual_energy_FIX.obj:<!ovovMicrosoft (R) Optimizing Compiler§=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_residual_energy_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tєXprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9З"LO|槇2F {:Z‹’Џ‹ц+7 @#nŽи,ˆ{ѓ,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_residual_energy_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 900 - ^ = $23 $T0 904 - ^ = $24 $T0 908 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = U‹ьь€SVWН€ќџџЙрИЬЬЬЬѓЋЁ3Х‰Eќ‹E‰…x§џџ‹E E‰EєЧEшы ‹EшƒР‰Eшƒ}шЬ‹E брPjP§џџQшƒФ ‹E P‹MєбсQ•„§џџR…P§џџP‹MшСсMQ‹•x§џџRшƒФ‹E ŒE„§џџ‰MЌЧEмы ‹EмƒР‰Eмƒ}м}F‹EP‹MЌQUаR‹Eш‹MмA‹E QшƒФ‹Eаїи‹Mш‹Uм J‹U ‰Š‹Eє‹MЌA‰UЌыЋ‹Eєбр‹x§џџA‰•x§џџщ!џџџЧEшы ‹EшƒР‰Eшƒ}шУ‹Eш‹M‹RшƒФƒш‰EФ‹Eш‹M‹RшƒФƒш‰EИ‹Eш‹M‹‹MИгт‰•D§џџ‹…D§џџ™‹Ш‹ђ‹…D§џџ™RPVQшБ ш‰…D§џџ‹…D§џџ™‹№‹њ‹Eш‹M‹‹MФгр™RPWVшБ ш‹Uш‹M‰‘‹EИ‹MФA‹Eш‹M ‹LР‹Uш‹E ‰ щ*џџџR‹ЭPшXZ_^[‹Mќ3ЭшФ€;ьш‹х]Уаџџџ„§џџ P§џџ SLPC_resrshiftf—рI-a-™ Ща (4@LXѕ$m€ж( ёBm(mіSKP_Silk_residual_energy_FIX€РР … :ќџџџ      tnrgs  tnrgsQ x ёa_Q12 gains subfr_length  LPC_order мџџџtj аџџџtrshift Фџџџtlz1 Иџџџtlz2 x§џџx_ptr єџџџtoffset P§џџєS шџџџti D§џџttmp32 ЌџџџLPC_res_ptr „§џџѓLPC_resђаm(Ф)€(0€11€:4€V6€m7€ž:€Ћ;€У=€ч@€ћC€D€ F€G€"J€>L€VM€nO€‚R€ЊU€нV€ќW€X€ X \ Ў В Н С Ь а л п ъ ю D H !&U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E%џџt‹EСјPшƒФыыЗEPшƒФƒР_^[ФР;ьш‹х]У04A4Wѕ$_РH ёi4_KSKP_Silk_CLZ32РР € tin32ђH_<p€r€(s€9t€;u€Kw€ -X- \- Ќ- А- U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјПE…Рu ИщЂПE%џt0ПE%№tf‹EfСј f‰Eы‹EјƒР‰Eјf‹EfСјf‰Eы+ПE%№џt‹EјƒР‰Eјf‹EfСјf‰Eы ‹EјƒР ‰EјПEƒр tПEƒрt‹Eјы%ы‹EјƒРыыПEƒрt ‹EјƒРыы‹EјƒР_^[‹х]Уѕ$рЬК ё{4рй SKP_Silk_CLZ16ЬР € in16 јџџџtout32ђ№рфL€M€%N€-O€7R€BS€MT€YU€[V€dW€pY€rZ€}[€†\€’]€”^€b€Іc€Џd€Дe€Жf€Оg€Рh€Щi€бj€гk€йm€ 4X4 \4 М4 Р4 VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SЄ.textm—Иљr №.debug$SЧ ˆ` $LN14\$LN13^$LN12f$LN158$LN160" : _memset Xk z • __allshr __allmul .rtc$TMZЬ.LЌУ .rtc$IMZžz]вщ .text_йIѕ=vЄёC.debug$Sє:Яq‘ј .text р}BИ#u‘ћ.debug$S Ќ бЛ5с .debug$T \_SKP_Silk_residual_energy_FIX_SKP_Silk_sum_sqr_shift_SKP_Silk_LPC_analysis_filter___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_CLZ32_SKP_Silk_CLZ16 /930 1273638392 100666 13672 ` Lј-ъKd*c.drectveAд .debug$S@B.textЛ1ь" P`.debug$St@Д @B.rdatan" @@@.rdata @0@.rdata  @0@.rdataЎ @0@.rdataЈО @@@.dataf!@0Р.rdataj!@0@.rtc$TMZx!|!@0@.rtc$IMZ†!Š!@0@.text_”!ѓ! P`.debug$Sє"#@B.textр7# P`.debug$SЌ$У%@B.textGѕ% P`.debug$Sф<& '@B.textGR' P`.debug$Sф™'}(@B.textGЏ( P`.debug$Sрі(ж)@B.debug$T\*@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё^J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_residual_energy16_FIX.obj:<!ovovMicrosoft (R) Optimizing Compilerџ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_residual_energy16_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tєXprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9јBž5ВьVRSьQЭ’Џ‹ц+7 @#nŽи,ˆ{ѓ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_residual_energy16_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 396 - ^ = $23 $T0 400 - ^ = $24 $T0 404 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = U‹ььˆSVWНxўџџЙbИЬЬЬЬѓЋЁ3Х‰Eќƒ}}%hjЁƒРPhjшƒФƒјuЬƒ}~%hjЁƒРPhjшƒФƒјuЬƒ}%hjЁƒР PhjшƒФƒјuЬƒ}|%hjЁƒР PhjшƒФƒјuЬИ+E‰Eм‹Eм‰EаЧEФЧEєы ‹EєƒР‰Eє‹Eє;E}J‹Eє‹MПA…в~‹Eє‹MПA‰•xўџџы‹Eє‹MПAїк‰•xўџџ‹…xўџџP‹MФQшƒФ‰EФыЅ‹EФPшƒФƒшP‹MаQшƒФ‰Eа‹EЏE‹M ‹TќR‹E ‹QшƒФ‰EИ‹EИСјПMФЏС‹UИтџџПMФЏбСњТСјЏEPшƒФƒшP‹UаRшƒФ‰Eаj‹EаPшƒФ‰EаЧEєы ‹EєƒР‰Eє‹Eє;E‹Eє‹MПA‹Mагт‹Eє‰”…Lџџџ‹EєƒМ…Lџџџ~‹Mє‹”Lџџџ‰•xўџџы‹Eє‹Œ…Lџџџїй‰xўџџНxўџџ€~&hj‹ƒТRhjшƒФƒјuЬщjџџџ‹Eм+Eа‰EмЧEЌЧEєы ‹EєƒР‰Eє‹Eє;E}C‹Eє‹M‹Сњ‹EєПŒ…LџџџЏб‹Eє‹M‹%џџ‹MєПŒLџџџЏССјEЌТ‰EЌыЌ‹MмƒС‹Eгј+EЌ‰E”ЧE ЧEєы ‹EєƒР‰Eє‹Eє;EЧEЌ‹EєЏE‹M ‰•@џџџ‹EєƒР‰Eшы ‹EшƒР‰Eш‹Eш;E}I‹Eш‹@џџџ‹Сњ‹EшПŒ…LџџџЏб‹Eш‹@џџџ‹%џџ‹MшПŒLџџџЏССјEЌТ‰EЌыІ‹Eє‹@џџџ‹бњСњ‹EєПŒ…LџџџЏб‹Eє‹@џџџ‹бј%џџ‹MєПŒLџџџЏССјEЌТ‰EЌ‹EЌСј‹MєП”LџџџЏТ‹MЌсџџ‹UєП”•LџџџЏЪСљM Ш‰M щцўџџ‹E ‹MмгрE”‰E”ƒ}”} ЧE”ы)‹MмƒСИџџџгј9E”~ ЧE”џџџ?ы‹MмƒС‹E”гр‰E”‹E”R‹ЭPшXZ_^[‹Mќ3ЭшФˆ;ьш‹х]УLџџџ@cn//.6*?&F"Z!a*j&q"…Œ*•&œ"АЗ*Р&Ч"D_UCeQ…_КCЪQлXZb*k&r"{€21œ0ЈДѕ$Лˆи( ёЙJЛ(ЛњSKP_Silk_residual_energy16_covar_FIXˆРШ … :ќџџџ    c  wXX wXx twxx tD tcQ шџџџtj аџџџtQxtra Фџџџtc_max LџџџИcn Иџџџtw_max  џџџttmp2 Ќџџџttmp єџџџti @џџџpRow мџџџtlshifts ”џџџtnrgђxЛ(,l'€(.€S/€~0€Љ1€д3€п4€х6€ь7€8€N9€P:€o<€=€д>€х?€@€A€B€„C€F€”G€ЎH€яI€ёJ€M€ N€'O€.P€AQ€]R€ЄS€ІT€ёU€'V€,W€:Z€@[€I\€[]€b^€d_€ra€uc€ X \ Ж К Х Щ д и ќ  (((cn[i]) > 0) ? (cn[i]) : -(cn[i])) <= ( 0x7FFF + 1 )cQ < 16cQ > 0D <= 16j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_residual_energy16_fix.c'D >= 07<U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E%џџt‹EСјPшƒФыыЗEPшƒФƒР_^[ФР;ьш‹х]У0JAJW0ѕ$_РJ ёi4_KSKP_Silk_CLZ32РР € tin32ђH_<p€r€(s€9t€;u€Kw€ CXC \C ЌC АC U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјПE…Рu ИщЂПE%џt0ПE%№tf‹EfСј f‰Eы‹EјƒР‰Eјf‹EfСјf‰Eы+ПE%№џt‹EјƒР‰Eјf‹EfСјf‰Eы ‹EјƒР ‰EјПEƒр tПEƒрt‹Eјы%ы‹EјƒРыыПEƒрt ‹EјƒРыы‹EјƒР_^[‹х]Уѕ$рЬМ ё{4рй SKP_Silk_CLZ16ЬР € in16 јџџџtout32ђ№рфL€M€%N€-O€7R€BS€MT€YU€[V€dW€pY€rZ€}[€†\€’]€”^€b€Іc€Џd€Дe€Жf€Оg€Рh€Щi€бj€гk€йm€ JXJ \J МJ РJ U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФ. ёq1G@.SKP_min_intФР € ta  tbђ0G$з€и€@й€ QXQ \Q ДQ ИQ U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E ~ ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФ. ёq1G@.SKP_max_intФР € ta  tbђ0G$щ€ъ€@ы€ XXX \X ДX ИX U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E ~ ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФ. ёp0G@.SKP_max_32ФР € ta  tbђ0G$ё€ђ€@ѓ€ _X_ \_ А_ Д_ VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S.textЛ"цyЊzŽŽ.debug$St # ч  $LN31И$LN32Ќ$LN33Є.rdatanєQ\Т*.rdataѓЛc#.rdata™џY.rdata‹ЁX˜р .rdata ЈхуЎZ№ .data ‡—х=Ћ .rdata ЂЊQпц (; J e .rtc$TMZ Ь.L| “ .rtc$IMZ žz]Ђ Й .text_йIѕ=vЄёC.debug$Sє:Яq‘Ш .textр}BИ#u‘ћ.debug$SЌбЛ5си .textGиьиоп„[Ќ.debug$SфкJаˆш .textGСв UdЈЏ.debug$SфПVfѕ .textGСв Uмtі€.debug$Sрe=њx .debug$T\_SKP_Silk_residual_energy16_covar_FIX??_C@_1GO@IAOHIPFH@?$AA?$CI?$AA?$CI?$AA?$CI?$AAc?$AAn?$AA?$FL?$AAi?$AA?$FN?$AA?$CJ?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$CJ?$AA?5?$AA?$DP?$AA?5?$AA?$CI?$AAc?$AAn?$AA?$FL?$AAi?$AA?$FN?$AA?$CJ?$AA?5?$AA?3?$AA?5?$AA?9?$AA?$CI?$AAc?$AAn?$AA?$FL@??_C@_1BA@DACHAPFJ@?$AAc?$AAQ?$AA?5?$AA?$DM?$AA?5?$AA1?$AA6?$AA?$AA@??_C@_1O@FBLLIFKB@?$AAc?$AAQ?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1BA@ELFBBFCB@?$AAD?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1?$AA6?$AA?$AA@__CrtDbgReportW??_C@_1KI@KLLICAIO@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_residual_energy16_covar_FIX@@9@9??_C@_1O@PBBFCMJK@?$AAD?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_CLZ32_SKP_Silk_CLZ16_SKP_min_int_SKP_max_int_SKP_max_32/978 1273638392 100666 7739 ` L ј-ъKБ;.drectveAє .debug$Sд 5@B.textЃ Ќ P`.debug$S8VŽ@B.rdata–$@@@.dataК@0Р.rdataО@0@.rtc$TMZмр@0@.rtc$IMZъю@0@.textGј P`.debug$Sф?#@B.debug$T\U@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‹UJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_resample_4_3.obj:<!ovovMicrosoft (R) Optimizing Compilerі=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_resample_4_3.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒ)hдРќчjЪќЭ.РуЬuЮ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓBj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_4_3.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 3140 - ^ = $23 $T0 3144 - ^ = $24 $T0 3148 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = U‹ьь@ SVWНРѓџџЙИЬЬЬЬѓЋЁ3Х‰Eќ‹E™Йїљ…вt&hj‹ƒТRhjшƒФƒјuЬ‹EСр™Йїљ‰Eєƒ}єŽН‹EєPjPшƒФ‰EмПEмkРПMмiЩРСљС‰Eш‹EшP„єџџQ•є§џџR‹E P‹MQшƒФ‹EшбрP„єџџQ•,њџџR‹E ƒРPє§џџQшƒФ‹EшСрP,њџџQ‹U ƒТ R‹EPшƒФ‹Eш‹MA‰U‹Eм‹MA‰U‹Eє+Eм‰Eєщ9џџџR‹ЭPшXZ_^[‹Mќ3ЭшФ@ ;ьш‹х]Ує§џџр,њџџР„єџџ scratchoutHHoutH#8"@IP7Нч;@&O%\$ht€Œѕ$Ѓ@ [( ёp;Ѓ(ЃSKP_Silk_resample_4_3@ Р€ … :ќџџџ      out  tS in inLen ,њџџoutHH мџџџtLSubFrameOut „єџџscratch є§џџ>outH шџџџtLSubFrameIn єџџџtoutLenђˆЃ8|2€(9€];€n<€x=€‰>€ЂB€ФD€юG€I€J€'K€0L€5M€ X \ Ї Ћ Ж К Х Щ д и у ч А Д j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_4_3.c2inLen % 3 == 0+0U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФа ёq1G@.SKP_min_intФР € ta  tbђ0GH$з€и€@й€ 7X7 \7 Д7 И7 VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sд .textЃЩbVfёЊ „.debug$S8АШ $LN8$LN7˜$LN6ž$LN9l$LN10d 2 P .rdata–3’жЧ`.data*0"Z.rdataѕeJЃGЗЪ й є .rtc$TMZЬ.L " .rtc$IMZ žz]1 H .text Gиьиоп„[Ќ.debug$S ф кJаˆW .debug$T \d_SKP_Silk_resample_4_3_SKP_Silk_resample_1_3_SKP_Silk_resample_2_1_coarse__CrtDbgReportW??_C@_1JG@BAODBNBD@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_resample_4_3@@9@9??_C@_1BO@FMLBKELP@?$AAi?$AAn?$AAL?$AAe?$AAn?$AA?5?$AA?$CF?$AA?5?$AA3?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_min_int /1017 1273638392 100666 7744 ` L ј-ъK„<.drectveAє .debug$Sд 5@B.text’ › P`.debug$SEa@B.rdata–ї@@@.data@0Р.rdata‘@0@.rtc$TMZЏГ@0@.rtc$IMZНС@0@.textGЫ P`.debug$Sфі@B.debug$T\(@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‹UJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_resample_3_4.obj:<!ovovMicrosoft (R) Optimizing Compilerі=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_resample_3_4.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒД3 ŠZЛ >dхF1ЮН зЮ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓBj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_3_4.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 2408 - ^ = $23 $T0 2412 - ^ = $24 $T0 2416 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = U‹ььd SVWНœіџџЙYИЬЬЬЬѓЋЁ3Х‰Eќ‹E%€yHƒШќ@…Рt&hj‹ ƒСQhjшƒФƒјuЬƒ}ŽК‹EPjPшƒФ‰EєПEєkРПMєiЩРСљС‰Eш‹EєP‹MQ‹U R…ўџџPшƒФ‹EшбрP`їџџQ•§џџR‹E ƒРPўџџQшƒФ‹EшP`їџџQ‹UR‹E ƒР$P§џџQшƒФ‹Eє‹MA‰U‹Eш‹MA‰U‹E+Eє‰Eщ<џџџR‹ЭPшXZ_^[‹Mќ3ЭшФd ;ьш‹х]Уўџџр§џџ№`їџџ scratchoutLoutH$<#DMTr8Љгј+0'?&L%Xdp|ѕ$’d [( ё\;’(’SKP_Silk_resample_3_4d РЄ … :ќџџџ      out  tS in tinLen шџџџtLSubFrameOut `їџџscratch ўџџ>outH §џџoutL єџџџtLSubFrameInђ€’8 t2€(9€a;€k<€|=€•@€АE€кI€џK€ L€M€ N€%O€ X \ Ї Ћ Ж К Х Щ д и у ч œ   j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_3_4.c2inLen % 4 == 0,1U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФа ёq1G@.SKP_min_intФР € ta  tbђ0GH$з€и€@й€ 8X8 \8 Д8 И8 VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sд .text’§›дб6бжc.debug$Sйh $LN8€$LN7ˆ$LN6$LN9\$LN10T 9 Y p .rdata–Ѕr‹Й€.data*0"Z;.rdata5Я‡Цgзъ љ  .rtc$TMZЬ.L+B .rtc$IMZ žz]Q h .text Gиьиоп„[Ќ.debug$S ф кJаˆw .debug$T \„_SKP_Silk_resample_3_4_SKP_Silk_resample_1_2_coarse_SKP_Silk_resample_1_2_coarsest_SKP_Silk_resample_3_1__CrtDbgReportW??_C@_1JG@GOLOPNIF@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_resample_3_4@@9@9??_C@_1BO@DJHMAOHP@?$AAi?$AAn?$AAL?$AAe?$AAn?$AA?5?$AA?$CF?$AA?5?$AA4?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_min_int/1056 1273638392 100666 3501 ` Lј-ъKu .drectveAД .debug$Sр ѕе @B.rdata0щ @0@.debug$T\ @B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё“YJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_resample_3_2_rom.obj:<!ovovMicrosoft (R) Optimizing Compilerњ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_resample_3_2_rom.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёt1 SigProc_Resample_3_2_coarse_INTERPOL"@SA_Method"SA_Parameter"SA_AttrTargetє№’Џ‹ц+7 @#nŽи,ˆ{LkЈяЉЌŸ"+ќqЅ’Смс’U#[Т)oњ mњюQл'fгЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оUЙОџ„w„љ”m–˜ЊдЉЏГ‘МКGƒQйЛyјs‡ІkёЬXўrToрџЊtЩ3"џеОKšЪ8єў@$‚(yFiдz<G;1=1ѓФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_3_2_rom.cc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hА Д €€ў^Ÿы2hЊ1 ђџџ ђЊ12hŸы^€ўVОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sр Фш.rdata0^ыL.debug$T\*_SigProc_Resample_3_2_coarse_INTERPOL /1099 1273638392 100666 7531 ` L ј-ъKѓ:.drectveAє .debug$Sд 5@B.textQ Z P`.debug$Sє№ф @B.rdata–f@@@.dataќ@0Р.rdata@0@.rtc$TMZ"@0@.rtc$IMZ,0@0@.textG: P`.debug$Sфe@B.debug$T\—@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‹UJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_resample_3_2.obj:<!ovovMicrosoft (R) Optimizing Compilerі=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_resample_3_2.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒМZMu Ы}“5JkЕ;“Ю’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓBj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_3_2.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 2160 - ^ = $23 $T0 2164 - ^ = $24 $T0 2168 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = U‹ььlSVWН”їџџЙИЬЬЬЬѓЋЁ3Х‰Eќ‹E%€yHƒШў@…Рt&hj‹ ƒСQhjшƒФƒјuЬƒ}ŽŠ‹EPjPшƒФ‰EєПEєПMєСсСљС‰Eш‹EєP‹MQ‹U R…ўџџPшƒФ‹EшPXјџџQ‹UR‹E ƒРPўџџQшƒФ‹Eє‹MA‰U‹Eш‹MA‰U‹E+Eє‰EщlџџџR‹ЭPшXZ_^[‹Mќ3ЭшФl;ьш‹х]УўџџрXјџџ scratchoutH"<!DMTr6ЃШћ%$#(4@ѕ$Ql[( ё<;Q(QSKP_Silk_resample_3_2lРЌ … :ќџџџ     out  tS in tinLen шџџџtLSubFrameOut Xјџџscratch ўџџ>outH єџџџtLSubFrameInђxQ8 l2€(8€a:€k;€|<€?€ЊC€ЯE€лF€чG€№H€ѕI€ X \ Ї Ћ Ж К Х Щ д и | € j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_3_2.c2inLen % 2 == 0*/U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФа ёq1G@.SKP_min_intФР € ta  tbђ0GH$з€и€@й€ 6X6 \6 Д6 И6 VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sд .textQіq!нїш.debug$Sє :_F $LN7D$LN6L$LN8,$LN9$ 9 P .rdata–"{ф`.data*0"Z.rdataƒ„E>GЗЪ й є .rtc$TMZЬ.L " .rtc$IMZ žz]1 H .text Gиьиоп„[Ќ.debug$S ф кJаˆW .debug$T \d_SKP_Silk_resample_3_2_SKP_Silk_resample_1_2_coarse_SKP_Silk_resample_3_1__CrtDbgReportW??_C@_1JG@KINBPEAC@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_resample_3_2@@9@9??_C@_1BO@MBLOEFMJ@?$AAi?$AAn?$AAL?$AAe?$AAn?$AA?5?$AA?$CF?$AA?5?$AA2?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_min_int /1138 1273638392 100666 7802 ` L ј-ъK1.drectveA| .debug$Sд Н@B.textЈ‘9 P`.debug$Slm@B.rtc$TMZ?C@0@.rtc$IMZMQ@0@.textG[ P`.debug$SфЂ†@B.debug$T\И@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‹UJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_resample_3_1.obj:<!ovovMicrosoft (R) Optimizing Compilerі=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_resample_3_1.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒтф‡+Ё2цѓ7I+OЉЩ№ЃЮ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓBj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_3_1.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 1460 - ^ = $23 $T0 1464 - ^ = $24 $T0 1468 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = U‹ььАSVWНPњџџЙlИЬЬЬЬѓЋЁ3Х‰Eќ‹E‰EИИэf‰…4ћџџИšEf‰…6ћџџИNf‰…(ћџџИMdf‰…*ћџџИ .f‰…ћџџИxrf‰…ћџџƒ}Иށ‹EИPj(шƒФ‰EшПEшkР‰EмЧEєы ‹EєƒР‰Eє‹Eє;Eш}‹Eє‹MПAСт ‹Eє‰”…џџџыж‹EшP@ћџџQП•4ћџџR‹E ƒРPџџџQшƒФ‹EшP(§џџQП•6ћџџR‹E ƒРP@ћџџQшƒФ‹EшP@ћџџQП•(ћџџR‹E ƒР PџџџQшƒФ‹EшPШ§џџQП•*ћџџR‹E ƒРP@ћџџQшƒФ‹EшP@ћџџQП•ћџџR‹E ƒРPџџџQшƒФ‹EшPhўџџQП•ћџџR‹E ƒРP@ћџџQшƒФЧEєы ‹EєƒР‰Eє‹Eє;Eш}HПEєkР‰EФ‹EФ‹Mє‹”(§џџ‰”…@ћџџ‹EФ‹Mє‹”Ш§џџ‰”…Dћџџ‹EФ‹Mє‹”hўџџ‰”…HћџџыЇ‹EмP(§џџQ‹U R…@ћџџPшƒФЧEєы ‹EєƒР‰Eє‹Eє;Eм}}‹Eє‹Œ…(§џџ‰Mа‹EаСј ƒРбј=џ~ Ч…Tњџџџы<‹MаСљ ƒСбљљ€џџ} Ч…Pњџџ€џџы‹UаСњ ƒТбњ‰•Pњџџ‹…Pњџџ‰…Tњџџ‹Mє‹Uf‹…Tњџџf‰Jщrџџџ‹Eш‹MA‰U‹EИ+Eш‰EИ‹Eм‹MA‰Uщu§џџR‹ЭPшXZ_^[‹Mќ3ЭшФА;ьш‹х]Уџџџ (§џџр@ћџџр4ћџџ(ћџџћџџA32A31A30scratch1scratch0scratch00‡-№Bk”Н= (4@LXdp|ѕ$ЈА[( ё ;Ј(ЈSKP_Silk_resample_3_1АР№ … :ќџџџ         out  tS in inLen аџџџtout_tmp ИџџџtinLenTmp (ћџџdA31 џџџscratch00 єџџџtk @ћџџscratch1 Фџџџtidx мџџџtLSubFrameOut (§џџscratch0 ћџџdA32 шџџџtLSubFrameIn 4ћџџdA30ђ Ј8!/€(1€.7€F8€^9€v;€€<€‘=€›@€ЕA€ЬB€ЮF€їG€ I€IJ€rL€›M€ФP€оQ€шR€ќS€T€$U€&X€D[€^\€k]€ж^€л`€чa€№b€ќc€d€ X \ Ї Ћ Ж К Х Щ д и у ч ђ і     L P !&U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФа ёq1G@.SKP_min_intФР € ta  tbђ0GH$з€и€@й€ -X- \- Д- И- VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sд .textЈВМЕrтЈ>ж.debug$SlТл $LN23€$LN22„$LN21ˆ$LN20Œ$LN19•$LN18ž$LN248$LN250 1 GZ i „ .rtc$TMZЬ.L›В .rtc$IMZžz]Си .textGиьиоп„[Ќ.debug$SфкJаˆч .debug$T \є_SKP_Silk_resample_3_1_SKP_Silk_lowpass_int_SKP_Silk_allpass_int___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_min_int/1177 1273638392 100666 3755 ` Lј-ъK9 .drectveAД .debug$S ѕ @B.rdataЈ5 @@@.debug$T\н @B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё“YJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_resample_2_3_rom.obj:<!ovovMicrosoft (R) Optimizing Compilerњ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_resample_2_3_rom.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёЉ1 SigProc_Resample_2_3_coarse_INTERPOL3 SigProc_Resample_2_3_coarsest_INTERPOL"@SA_Method"SA_Parameter"SA_AttrTargetє№’Џ‹ц+7 @#nŽи,ˆ{LkЈяЉЌŸ"+ќqЅ’Смс’U#[Т)oњ mњюQл'fгЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оUЙОџ„w„љ”m–˜ЊдЉЏГ‘МКGƒQйЛyјs‡ІkёЬXўrToрџЊtЩ3<хzІiR№м@ц_єž{і~‚(yFiдz<G;1=1ѓФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_2_3_rom.cc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hА Д у ч ЖџmџIž§-cњЂњюљ"UUљ"њюЂcњ-ž§IџmЖџ-0Тџ…=џ‚ђ§Ј%ћ ЇђjFjFЇђ %ћЈђ§‚=џ…Тџ0{їѓ/ UU/ їѓ{oџИaјћDћDaјИVОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S УOб.rdataЈaЃТ~*€.debug$T\R_SigProc_Resample_2_3_coarse_INTERPOL_SigProc_Resample_2_3_coarsest_INTERPOL /1220 1273638392 100666 7259 ` L ј-ъKв,.drectveAЄ .debug$SД х™@B.text•­B P`.debug$SŒœ(@B.rdataЈZ@@@.data@0Р.rdataT@@@.rtc$TMZZ^@0@.rtc$IMZhl@0@.debug$T\v@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё^J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_resample_2_3_coarsest.obj:<!ovovMicrosoft (R) Optimizing Compilerџ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_resample_2_3_coarsest.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё•3 SigProc_Resample_2_3_coarsest_INTERPOL"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒyчП„УˆŽ“ђœj<з’Џ‹ц+7 @#nŽи,ˆ{"(yFiдz<G;1=1ѓжj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_2_3_coarsest.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 300 - ^ = $23 $T0 304 - ^ = $24 $T0 308 - ^ = М Р U‹ьь(SVWНиўџџЙJИЬЬЬЬѓЋj‹E P‹MQшƒФ ‹EбрP‹MQ‹UƒТRшƒФ ‹EбрСјiРVU‹MбссџџiЩVUСљС‰EАЧEШ‹EАkР™+Тбј9Et%hjЁƒРPhjшƒФƒјuЬ‹EА‰Eјы ‹Eјƒш‰Eјƒ}јŽЁ‹EШСј‰Eь‹Eь‹MA‰UМ‹EШСј‹MШсџџбсСљAƒт‰Uр‹EрkР‰EЄ‹EЄП‹UМПЏШ‰Mд‹EЄПH‹UМПBЏШMд‰Mд‹EЄПH‹UМПBЏШMд‰Mд‹EЄПH‹UМПBЏШMд‰Mд‹EЄПH‹UМПBЏШMд‰Mд‹EЄПH ‹UМПB ЏШMд‰Mд‹EЄПH ‹UМПB ЏШMд‰Mд‹EЄПH‹UМПBЏШMд‰Mд‹EЄПH‹UМПBЏШMд‰Mд‹EЄПH‹UМПBЏШMд‰Mд‹EдСјƒРбј=џ~ Ч…мўџџџы<‹MдСљƒСбљљ€џџ} Ч…иўџџ€џџы‹UдСњƒТбњ‰•иўџџ‹…иўџџ‰…мўџџ‹Mf‹•мўџџf‰‹EƒР‰E‹EШ€‰EШщLўџџj‹E‹MTAюR‹E PшƒФ _^[Ф(;ьш‹х]У)Bˆ˜Ÿzѕ$•(d ёaD•SKP_Silk_resample_2_3_coarsest(Рh € out  S in frameLenIn scratch Єџџџinterpol_ptr рџџџtinterpol_ind АџџџtframeLenOut дџџџttmp Шџџџtindex_Q16 јџџџtn ьџџџtind Мџџџin_ptrђш•8м2€9€0<€I>€p?€wA€ЌD€ЧG€аJ€мN€љQ€U€V€0W€GX€^Y€uZ€Œ[€Ѓ\€К]€б^€ш`€Xc€cd€hh€i€ X \ Є Ј j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_2_3_coarsest.c2frameLenIn == ( ( frameLenOut * 3 ) / 2 )#(VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SД „лeР.text• u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒžЇ%| АЇОy„ие’Џ‹ц+7 @#nŽи,ˆ{ (yFiдz<G;1=1ѓдj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_2_3_coarse.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 300 - ^ = $23 $T0 304 - ^ = $24 $T0 308 - ^ = И М U‹ьь(SVWНиўџџЙJИЬЬЬЬѓЋj>‹E P‹MQшƒФ ‹EбрP‹MQ‹UƒТ>RшƒФ ‹Eбр™Йїљ‰EАЧEШ‹EАkР™+Тбј9Et%hjЁƒРPhjшƒФƒјuЬ‹EА‰Eјы ‹Eјƒш‰Eјƒ}јŽљ‹EШСј‰Eь‹Eь‹MA‰UМ‹EШСј‹MШсџџбсСљAƒт‰Uр‹EрСр‰EЄ‹EЄП‹UМПЏШ‹UЄПB‹UМПRЏТШ‹EЄПP‹EМП@ЏаЪ‹UЄПB‹UМПRЏТШ‹EЄПP‹EМП@ЏаЪ‹UЄПB ‹UМПR ЏТШ‹EЄПP ‹EМП@ ЏаЪ‹UЄПB‹UМПRЏТШ‹EЄПP‹EМП@ЏаЪ‹UЄПB‹UМПRЏТШ‹EЄПP‹EМП@ЏаЪ‹UЄПB‹UМПRЏТШ‹EЄПP‹EМП@ЏаЪ‹UЄПB‹UМПRЏТШ‹EЄПP‹EМП@ЏаЪ‹UЄПB‹UМПRЏТШ‹EЄПP ‹EМП@ ЏаЪ‹UЄПB"‹UМПR"ЏТШ‹EЄПP$‹EМП@$ЏаЪ‹UЄПB&‹UМПR&ЏТШ‹EЄПP(‹EМП@(ЏаЪ‹UЄПB*‹UМПR*ЏТШ‹EЄПP,‹EМП@,ЏаЪ‹UЄПB.‹UМПR.ЏТШ‹EЄПP0‹EМП@0ЏаЪ‹UЄПB2‹UМПR2ЏТШ‹EЄПP4‹EМП@4ЏаЪ‹UЄПB6‹UМПR6ЏТШ‹EЄПP8‹EМП@8ЏаЪ‹UЄПB:‹UМПR:ЏТШ‰Mд‹EдСјƒРбј=џ~ Ч…мўџџџы<‹MдСљƒСбљљ€џџ} Ч…иўџџ€џџы‹UдСњƒТбњ‰•иўџџ‹…иўџџ‰…мўџџ‹Mf‹•мўџџf‰‹EƒР‰E‹EШ€‰EШщєќџџj>‹E‹MTAТR‹E PшƒФ _^[Ф(;ьш‹х]У)BqxˆщЛЮѕ$ж(b ё_BжТSKP_Silk_resample_2_3_coarse(Рh € out  S in frameLenIn scratch Єџџџinterpol_ptr рџџџtinterpol_ind АџџџtframeLenOut дџџџttmp Шџџџtindex_Q16 јџџџtn ьџџџtind Мџџџin_ptrђ ж8”2€9€0<€I>€Y?€`A€•D€АG€ЙJ€ХN€тQ€№d€)g€™j€Єk€Љo€Тp€ X \   Є j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_2_3_coarse.c2frameLenIn == ( ( frameLenOut * 3 ) / 2 )#(VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SЈ †dЗ.textж УKпЂvя э.debug$S@С1 "H .rdataЄПtІђX.data*0"Z.rdataTЉ†НF_memcpy  .rtc$TMZЬ.L6 .rtc$IMZ žz]E \ .debug$T \k_SKP_Silk_resample_2_3_coarse_SigProc_Resample_2_3_coarse_INTERPOL__CrtDbgReportW??_C@_1KE@BCDGEAGJ@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_resample_2_3_coarse@@9@9??_C@_1FE@DGLFBGCA@?$AAf?$AAr?$AAa?$AAm?$AAe?$AAL?$AAe?$AAn?$AAI?$AAn?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?5?$AA?$CI?$AA?5?$AAf?$AAr?$AAa?$AAm?$AAe?$AAL?$AAe?$AAn?$AAO?$AAu?$AAt?$AA?5?$AA?$CK?$AA?5@__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/1314 1273638392 100666 7575 ` L ј-ъK:.drectveAє .debug$Sд 5@B.texta j P`.debug$S @B.rdata–’@@@.data(@0Р.rdata,@0@.rtc$TMZJN@0@.rtc$IMZX\@0@.textGf P`.debug$Sф­‘@B.debug$T\У@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‹UJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_resample_2_3.obj:<!ovovMicrosoft (R) Optimizing Compilerі=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_resample_2_3.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒY­˜"n:mыŸm(LыАЮ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓBj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_2_3.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 2172 - ^ = $23 $T0 2176 - ^ = $24 $T0 2180 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = U‹ььxSVWНˆїџџЙИЬЬЬЬѓЋЁ3Х‰Eќ‹E™Йїљ…вt&hj‹ƒТRhjшƒФƒјuЬ‹Eбр™Йїљ‰Eєƒ}єŽŒ‹EєPjPшƒФ‰EмПEмПMмСсСљС‰Eш‹EшPLјџџQ•є§џџR‹E P‹MQшƒФ‹EшбрPє§џџQ‹U ƒТR‹EPшƒФ‹Eш‹MA‰U‹Eм‹MA‰U‹Eє+Eм‰EєщjџџџR‹ЭPшXZ_^[‹Mќ3ЭшФx;ьш‹х]У‹џє§џџрLјџџ scratchoutH"8!@IP~6Жж %$*#8DPѕ$ax[( ёO;a(aSKP_Silk_resample_2_3xРИ … :ќџџџ     out  tS in inLen мџџџtLSubFrameOut Lјџџscratch є§џџ>outH шџџџtLSubFrameIn єџџџtoutLenђ€a8 t2€(8€]:€m;€w<€ˆ=€›A€НD€нF€щG€ѕH€ўI€J€ X \ Ї Ћ Ж К Х Щ д и  ” j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_2_3.c2inLen % 3 == 0*/U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФа ёq1G@.SKP_min_intФР € ta  tbђ0GH$з€и€@й€ 6X6 \6 Д6 И6 VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sд .textaM^x!x"Є.debug$S дХъ№ $LN7T$LN6\$LN8<$LN94 2 P .rdata–г7ы(`.data*0"Z.rdataѕeJЃGЗЪ й є .rtc$TMZЬ.L " .rtc$IMZ žz]1 H .text Gиьиоп„[Ќ.debug$S ф кJаˆW .debug$T \d_SKP_Silk_resample_2_3_SKP_Silk_resample_1_3_SKP_Silk_resample_2_1_coarse__CrtDbgReportW??_C@_1JG@PPNOLIPD@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_resample_2_3@@9@9??_C@_1BO@FMLBKELP@?$AAi?$AAn?$AAL?$AAe?$AAn?$AA?5?$AA?$CF?$AA?5?$AA3?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_min_int /1353 1273638392 100666 6157 ` Lј-ъKэ#.drectveA, .debug$St m@B.textšс{ P`.debug$Sпѓ @B.rtc$TMZuy@0@.rtc$IMZƒ‡@0@.debug$T\‘@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё™\J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_resample_2_1_coarse.obj:<!ovovMicrosoft (R) Optimizing Compiler§=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_resample_2_1_coarse.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒ:zEv_ШƒА„и`Sе’Џ‹ц+7 @#nŽи,ˆ{ (yFiдz<G;1=1ѓдj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_2_1_coarse.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 252 - ^ = $23 $T0 256 - ^ = $24 $T0 260 - ^ = U‹ььјSVWНџџџЙ>ИЬЬЬЬѓЋИGf‰EрИAf‰EтИrf‰EдИэhf‰EжЧEјы ‹EјƒР‰Eј‹Eј;E}‹Eј‹MПAСт ‹Eј‹M‰ыз‹Eбр‰Eь‹EP‹Mь‹UŠPПMрQ‹U R‹EPшƒФ‹EP‹M‹UŠPПMтQ‹U ƒТR‹Eь‹MRшƒФ‹EP‹Mь‹UŠPПMдQ‹U ƒТR‹EPшƒФ‹EP‹MQПUжR‹E ƒР P‹Mь‹UŠPшƒФЧEјы ‹EјƒР‰Eј‹Eј;E‹Eјбр‰Eь‹EјE‹M‹Сњ ƒТбњњџ~ Ч… џџџџыN‹EјE‹M‹Сњ ƒТбњњ€џџ} Ч…џџџ€џџы‹EјE‹M‹Сњ ƒТбњ‰•џџџ‹…џџџ‰… џџџ‹Mь‹Uf‹… џџџf‰J‹Eј‹M‹Сњ ƒТбњњџ~ Ч… џџџџыH‹Eј‹M‹Сњ ƒТбњњ€џџ} Ч…џџџ€џџы‹Eј‹M‹Сњ ƒТбњ‰•џџџ‹…џџџ‰… џџџ‹Mь‹Uf‹… џџџf‰DJщиўџџR‹ЭPшXZ_^[Фј;ьш‹х]УIрџџџдџџџA21cA20c˜ФъNSet€Œѕ$šјb ё3Bšš§SKP_Silk_resample_2_1_coarseјР8 €     in  tS out tscratch len јџџџtk дџџџdA21c ьџџџtidx рџџџdA20cђ š8”.€2€03€B6€\7€r8€t:€|=€Ÿ>€Ы@€ёA€D€5E€=F€ФG€CH€HI€ X \ Ђ І Б Е Р Ф Я г t x VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$St .textš ‘ы—sžŒ%G.debug$S %НГW $LN18$LN17•$LN19x$LN20p" 8 G .rtc$TMZЬ.L^u .rtc$IMZžz]„› .debug$T\Њ_SKP_Silk_resample_2_1_coarse_SKP_Silk_allpass_int__RTC_CheckEsp@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase /1399 1273638392 100666 8904 ` L ј-ъK§?.drectveAє .debug$Sд 5@B.textп ш P`.debug$SЈтŠ@B.rdata–p@@@.data@0Р.rdata @0@.rtc$TMZ(,@0@.rtc$IMZ6:@0@.textGD P`.debug$Sф‹o@B.debug$T\Ё@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‹UJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_resample_1_3.obj:<!ovovMicrosoft (R) Optimizing Compilerі=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_resample_1_3.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒQ‡œІ5,х7щLˆЮ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓBj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_1_3.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 2260 - ^ = $23 $T0 2264 - ^ = $24 $T0 2268 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = U‹ььаSVWН0їџџЙ4ИЬЬЬЬѓЋЁ3Х‰EќЧEИPUИэf‰… јџџИšEf‰…јџџИNf‰…јџџИMdf‰…јџџИ .f‰…єїџџИxrf‰…іїџџ‹E™Йїљ…вt&hj‹ƒТ RhjшƒФƒјuЬ‹E™Йїљ‰Eшƒ}шŽZ‹EшPjPшƒФ‰EаПEаkР‰Eм‹EмP№ћџџQ‹U R‹EPшƒФЧEєы ‹EєƒР‰Eє‹Eє;Eа}G‹EєkР‹Mє‹”…№ћџџ‰”Јњџџ‹EєkР‹Mє‹”…єћџџ‰”`љџџ‹EєkР‹Mє‹”…јћџџ‰”јџџыЈ‹EаP№ћџџQП•єїџџR‹E ƒРPЈњџџQшƒФ‹EаPЈњџџQП•іїџџR‹E ƒРP№ћџџQшƒФ‹EаP№ћџџQП•јџџR‹E ƒР P`љџџQшƒФ‹EаP`љџџQП•јџџR‹E ƒРP№ћџџQшƒФ‹EаP№ћџџQП• јџџR‹E ƒРPјџџQшƒФ‹EаPјџџQП•јџџR‹E ƒРP№ћџџQшƒФЧEєы ‹EєƒР‰Eє‹Eє;Eа‰‹Eє‹Œ…Јњџџ‹UєŒ•`љџџ‹EєŒ…јџџ‰MФ‹EФ+EИ…Р~Иџ‹Mє‹Uf‰JыH‹EФEИyИ€џџ‹Mє‹Uf‰Jы/‹EФСјkР‹MФСсџџkЩСљС‹Uє‹Mf‰Qщbџџџ‹Eм‹MA‰U‹Eа‹MA‰U‹Eш+Eа‰Eшщœ§џџR‹ЭPшXZ_^[‹Mќ3ЭшФа;ьш‹х]УI№ћџџРЈњџџ@`љџџ@јџџ@ јџџјџџєїџџA32A31A30scratch12scratch11scratch10scratch0'‡&"˜ŸЫ;ѓ}ІЯј!J$)*8)E(T`lx„œЈѕ$па[( ё0;п(пSKP_Silk_resample_1_3аР … :ќџџџ          out  tS in inLen Фџџџtout_tmp јџџ scratch12 јџџdA31 Иџџџtlimit Јњџџ scratch10 єџџџtk аџџџtLSubFrameOut №ћџџ!scratch0 єїџџdA32 мџџџtLSubFrameIn шџџџtoutLen `љџџ scratch11  јџџdA30ђ8п8$,/€(1€/5€G6€_7€w:€Ќ<€К=€Ф>€е?€пB€њE€F€+G€BH€YI€[L€„M€­O€жP€џR€(S€QV€oW€X€šY€ЋZ€Г[€Т\€Ф]€ѓ_€јa€b€c€d€e€ X \ Ї Ћ Ж К Х Щ д и у ч ђ і      # p t j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_1_3.c/inLen % 3 == 0/4U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФа ёq1G@.SKP_min_intФР € ta  tbђ0GH$з€и€@й€ ;X; \; Д; И; VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sд .textпВ"WG о:ы.debug$SЈОё*r $LN22Ќ$LN21А$LN20Д$LN19И$LN18Т$LN17Ь$LN16ж$LN23X$LN24P 1 I .rdata–#хu_Y.datahПQј.rdataѕeJЃ@АУ в э .rtc$TMZЬ.L .rtc$IMZ žz]* A .text Gиьиоп„[Ќ.debug$S ф кJаˆP .debug$T \]_SKP_Silk_resample_1_3_SKP_Silk_allpass_int_SKP_Silk_lowpass_short__CrtDbgReportW??_C@_1JG@IIEAGKAD@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_resample_1_3@@9@9??_C@_1BO@FMLBKELP@?$AAi?$AAn?$AAL?$AAe?$AAn?$AA?5?$AA?$CF?$AA?5?$AA3?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_min_int/1438 1273638392 100666 5772 ` Lј-ъK#.drectveAT .debug$SЈ •=@B.datae@0Р.textЂk  P`.debug$S˜?з@B.rtc$TMZ  @0@.rtc$IMZ@0@.debug$T\%@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё^J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_resample_1_2_coarsest.obj:<!ovovMicrosoft (R) Optimizing Compilerџ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_resample_1_2_coarsest.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёŠ "A20cst "A21cst"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒЈKџѓг}мюu,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒЄІќeqe}ЃЈшOх/е’Џ‹ц+7 @#nŽи,ˆ{ (yFiдz<G;1=1ѓдj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_1_2_coarse.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 252 - ^ = $23 $T0 256 - ^ = $24 $T0 260 - ^ = U‹ььјSVWНџџџЙ>ИЬЬЬЬѓЋИGf‰EрИAf‰EтИrf‰EдИэhf‰EжЧEјы ‹EјƒР‰Eј‹Eј;E}:‹Eјбр‰Eь‹Eь‹MПAСт ‹Eј‹M‰‹Eь‹MПTAСт ‹EјE‹M‰ыЕ‹Eбр‰Eь‹EP‹Mь‹UŠPПMдQ‹U R‹EPшƒФ‹EP‹MQПUжR‹E ƒРP‹Mь‹UŠPшƒФ‹EP‹Mь‹UŠPПMрQ‹U ƒТR‹E‹MRшƒФ‹EP‹M‹UŠPПMтQ‹U ƒТ R‹Eь‹MRшƒФЧEјы ‹EјƒР‰Eј‹Eј;EЇ‹EјE‹Mј‹U‹ Š‹U ‚Сљ ƒСбљљџ~ Ч… џџџџы`‹EјE‹Mј‹U‹ Š‹U ‚Сљ ƒСбљљ€џџ} Ч…џџџ€џџы#‹EјE‹Mј‹U‹ Š‹U ‚Сљ ƒСбљ‰џџџ‹…џџџ‰… џџџ‹Mј‹Uf‹… џџџf‰JщDџџџR‹ЭPшXZ_^[Фј;ьш‹х]УIрџџџдџџџA21cA20cКр 8 !0<Hѕ$Vјb ё3BVV§SKP_Silk_resample_1_2_coarseјР8 €     in  tS out tscratch len јџџџtk дџџџdA21c ьџџџtidx рџџџdA20cђ V8”.€2€03€B6€\7€d8€z9€”:€–<€ž>€С?€чA€B€?E€]F€џG€H€ X \ Ђ І Б Е Р Ф Я г t x VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$St .textV 4™zaхbг{.debug$S zZdє $LN14L$LN13Q$LN154$LN16," 8 G .rtc$TMZЬ.L^u .rtc$IMZžz]„› .debug$T\Њ_SKP_Silk_resample_1_2_coarse_SKP_Silk_allpass_int__RTC_CheckEsp@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase /1532 1273638392 100666 6115 ` Lј-ъKН#.drectveAT .debug$S  •5@B.data]@0Р.textvkс P`.debug$SАc@B.rtc$TMZEI@0@.rtc$IMZSW@0@.debug$T\a@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‹UJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_resample_1_2.obj:<!ovovMicrosoft (R) Optimizing Compilerі=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_resample_1_2.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёž #A20_Resample_1_2 #A21_Resample_1_2"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒyIЦЂ–5е(ЮАuЬпЛ`@Ю’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓЭj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_1_2.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 228 - ^ = $23 $T0 232 - ^ = $24 $T0 236 - ^ = Ј Ќ Ч Ы цv'rYЪѓ?ОrU‹ььрSVWН џџџЙ8ИЬЬЬЬѓЋЧEјы ‹EјƒР‰Eј‹Eј;E}:‹Eјбр‰Eь‹Eь‹MПAСт ‹Eј‹M‰‹Eь‹MПTAСт ‹EјE‹M‰ыЕ‹Eбр‰Eь‹EP‹Mь‹UŠPП Q‹U R‹EPшƒФ‹EP‹Mь‹UŠ‹MˆRПP‹M ƒСQ‹Uь‹E QшƒФ‹EP‹MQПR‹E ƒРP‹Mь‹UŠ‹MˆRшƒФ‹EP‹Mь‹UŠPП Q‹U ƒТ R‹E‹MRшƒФ‹EP‹Mь‹UŠ‹MˆRПP‹M ƒСQ‹Uь‹E QшƒФ‹EP‹M‹UŠPП Q‹U ƒТR‹Eь‹M‹E ‚QшƒФЧEјы ‹EјƒР‰Eј‹Eј;EЇ‹EјE‹Mј‹U‹ Š‹U ‚Сљ ƒСбљљџ~ Ч…$џџџџы`‹EјE‹Mј‹U‹ Š‹U ‚Сљ ƒСбљљ€џџ} Ч… џџџ€џџы#‹EјE‹Mј‹U‹ Š‹U ‚Сљ ƒСбљ‰ џџџ‹… џџџ‰…$џџџ‹Mј‹Uf‹…$џџџf‰JщDџџџ_^[Фр;ьш‹х]У‹ ™З Юр § ,J ay –nѕ$vр[ ёЮ;vb§SKP_Silk_resample_1_2рР € in  tS out tscratch len јџџџtk ьџџџtidxђ v8”3€7€88€@9€V:€p;€r=€z@€ A€еB€D€3E€hF€I€ЛJ€]K€bL€ X \   VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S  za‘А.dataб,ВЊ.textv \šWѓЉ.debug$SАgЫъ( ? U .rtc$TMZЬ.Ld{ .rtc$IMZžz]ŠЁ .debug$T\А_A20_Resample_1_2_A21_Resample_1_2_SKP_Silk_resample_1_2_SKP_Silk_allpass_int__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase /1571 1273638392 100666 5906 ` Lј-ъKЄ.drectveA, .debug$Sиm@B.textqE P`.debug$SDЖњ@B.rtc$TMZ,0@0@.rtc$IMZ:>@0@.debug$T\H@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёЉdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_regularize_correlations_FIX.obj:<!ovovMicrosoft (R) Optimizing Compiler=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_regularize_correlations_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tєXprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9:CлСНф8Ув†вЛЅ“’Џ‹ц+7 @#nŽи,ˆ{ѓPj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_regularize_correlations_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјы ‹EјƒР‰Eј‹Eј;E}%‹EјЏEEј‹M‹U‹EјЏEEј‹M‰ыЪ‹E ‹M‹U ‰ _^[‹х]Уѕ$qЬо ёКJqj%SKP_Silk_regularize_correlations_FIXЬР € tXX  txx tnoise tD јџџџtiђHq(<%€'€8(€[)€]*€j+€ X \ ќ  VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sи.textqgє}С.Z˜Ш.debug$SDбЄ:П .rtc$TMZЬ.L*A .rtc$IMZžz]Pg .debug$T\v_SKP_Silk_regularize_correlations_FIX__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/1625 1273638392 100666 16847 ` Lј-ъK­8k.drectveAL .debug$S,@B.textЙ P`.debug$SшH0@B.rtc$TMZvz@0@.rtc$IMZ„ˆ@0@.textn’ P`.debug$S<P@B.textf‚ P`.debug$SРш Ј$@B.textxк$R% P`.debug$STf%К&@B.textVь& P`.debug$SB'F(@B.textДx(,) P`.debug$SP@)*@B.textbТ*$+ P`.debug$S 8+X,@B.text_Š,щ, P`.debug$Sє-ћ-@B.textр-. P`.debug$SЌ /Й0@B.textŸы0Š2 P`.debug$SЦ2т4 @B.textПP56 P`.debug$S˜K6у7 @B.debug$T\Q8@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‰TJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_range_coder.obj:<!ovovMicrosoft (R) Optimizing Compilerѕ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_range_coder.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёІ"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_t!ЧSKP_Silk_range_coder_state!ЧSKP_Silk_range_coder_stateєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlїf,!љгфYsЯћН_ѕWA’Џ‹ц+7 @#nŽи,ˆ{Œ(yFiдz<G;1=1ѓz j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_range_coder.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 308 - ^ = $23 $T0 312 - ^ = $24 $T0 316 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 292 - ^ = $23 $T0 296 - ^ = $24 $T0 300 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 272 - ^ = $23 $T0 276 - ^ = $24 $T0 280 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 232 - ^ = $23 $T0 236 - ^ = $24 $T0 240 - ^ = U‹ьь0SVWНаўџџЙLИЬЬЬЬѓЋ‹E‹H‰MШ‹E‹H ‰MМ‹E‹H‰MА‹EƒР‰EЄ‹Eƒxtщ8‹E ‹MЗA‰Uј‹E ‹MЗTA‰Uь‹EШ‰Eр‹EМЏEјEШ‰EШ‹Eь+EјЏEМ‰Eд‹EШ;Eрs;‹EА‰E˜‹E˜ƒш‰E˜‹MЄM˜Š€Тˆ•гўџџ‹EЄE˜ŠгўџџˆЖ•гўџџ…вuыЫ‹Eд%џt‹EдСш‰EМщ‡‹Eд%џџt ‹EдСш‰EМы<‹Eд‰EМ‹E‹MА;| ‹EЧ@џџџџыq‹EШСш‹MЄMАˆ‹UАƒТ‰UА‹EШСр‰EШ‹E‹MА;| ‹EЧ@џџџџы;‹EШСш‹MЄMАˆ‹UАƒТ‰UА‹EШСр‰EШ‹E‹MШ‰H‹E‹MМ‰H ‹E‹MА‰H_^[‹х]Уѕ$0 Ю ёn<ˆУSKP_Silk_range_encoder0Рp € СpsRC  data xprob Шџџџubase_Q32 Єџџџ buffer АџџџtbufferIx дџџџurange_Q32 Мџџџurange_Q16 јџџџulow_Q16 ьџџџuhigh_Q16 рџџџubase_tmp;“ ˜џџџtbufferIx_tmpђ8$,$€)€'*€0+€9,€B.€K/€P3€]4€k5€q6€~7€‹:€“<€™=€ЮA€иC€сD€цE€№G€љH€ћJ€L€ M€N€Q€.R€7U€AV€KW€MZ€d[€m_€v`€a€ˆb€ X \ ~ ‚ А Д U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјы ‹EјƒР‰Eј‹Eј;E}"‹Eј‹M‹R‹Eј‹M ‹R‹EPшƒФ ыЭ_^[ФЬ;ьш‹х]УQf ѕ$nЬ@ ёМBnZ2SKP_Silk_range_encoder_multiЬР € СpsRC  data zprob nSymbols јџџџtkђ@n4k€m€8n€Xo€Zp€ X \ ќ  U‹ьь SVWНрўџџЙHИЬЬЬЬѓЋ‹E ‹H‰MШ‹E ‹H ‰MМ‹E ‹H‰MА‹E ƒР‰EЄ‹E ƒxt‹EЧщ‹E‹MЗA‰Uь‹EМЏEь‰Eр‹Eр;EШv[И…РtP‹Eƒш‰E‹M‹UЗJ‰Eј‹EМЏEј‰Eр‹Eр;EШwы&‹Eј‰Eьƒ}ьu‹E Ч@ўџџџ‹EЧщыЇыeИ…Рt\‹Eь‰Eј‹EƒР‰E‹M‹UЗJ‰Eь‹EМЏEь‰Eр‹Eр;EШv ‹Eƒш‰Eы#}ьџџu‹E Ч@ўџџџ‹EЧщ)ы›‹E‹M‰‹EМЏEј‹MШ+Ш‰MШ‹Eь+EјЏEМ‰Eд‹Eд%џt‹EдСш‰EМщЕ‹Eд%џџt-‹EдСш‰EМ‹EШСш…Рt‹E Ч@§џџџ‹EЧщЖыS‹Eд‰EМ‹EШСш…Рt‹E Ч@§џџџ‹EЧщŒ‹EШСр‰EШ‹E ‹MА;}‹EЄEАЖ MШ‰MШ‹UАƒТ‰UА‹EШСр‰EШ‹E ‹MА;}‹EЄEАЖ MШ‰MШ‹UАƒТ‰UАƒ}Мu‹E Ч@ќџџџ‹EЧы‹E ‹MШ‰H‹E ‹MМ‰H ‹E ‹MА‰H_^[‹х]Уѕ$f В ёM<f_ЩSKP_Silk_range_decoder Р` € tdata  СpsRC xprob tprobIx Шџџџubase_Q32 Єџџџ buffer АџџџtbufferIx дџџџurange_Q32 Мџџџurange_Q16 јџџџulow_Q16 ьџџџuhigh_Q16 рџџџubase_tmpђ0fC$y€~€'€0€€9€Bƒ€K…€T†€Y‰€fŠ€p‹€xŒ€€—Ž€Ё€Љ€Ћ’€Б”€З•€С—€Ъ˜€Яš€б›€гœ€м€тž€јŸ€ € Ё€Ђ€Ѕ€І€(Ј€1Љ€6Ћ€8­€@Ў€OЏ€\В€fД€oЕ€tЖ€~И€‡К€‘Л€›Н€ЄО€ЉР€ЋТ€БФ€ЛХ€ХЧ€ЮШ€гЫ€мЭ€цЯ€ўг€е€з€)м€/н€9п€Bр€Dф€Mх€Vц€_ч€ 'X' \' ' ”' U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјы ‹EјƒР‰Eј‹Eј;E},‹Eј‹M‹R‹Eј‹M‹R‹E P‹Mј‹UŠPшƒФыУ_^[ФЬ;ьш‹х]У['p ѕ$xЬ@ ёдBxd4SKP_Silk_range_decoder_multiЬР € tdata  СpsRC zprob probStartIx nSymbols јџџџtkђ@x4ё€ѓ€8є€bѕ€dі€ .X. \. . . U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹EЧ‹EЧ@ џџ‹EЧ@‹EЧ@‹EЧ@_^[‹х]Уѕ$VР$ ёr=VO6SKP_Silk_range_enc_initРР € СpsRCђPVDќ€ў€'џ€1€;€E€O€ 5X5 \5 Д5 И5 U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ}~ ‹EЧ@јџџџыm‹EP‹M Q‹UƒТRшƒФ ‹E‹M‰‹EЧ@‹E ЖСс‹U ЖBСр Ш‹U ЖBСр Ш‹U ЖB Ш‹U‰J‹EЧ@ џџ‹EЧ@_^[ФР;ьш‹х]УC=Ќ ѕ$ДР $ ёž=Д 8SKP_Silk_range_dec_initРР € СpsRC  (buffer bufferLengthђpД d € €'€1€3€J€R€\€Œ€–€ € <X< \< р< ф< U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋ‹E‹p‹M‹Q ƒъRшƒФD№ђ‰Eј‹EјƒРСј‹M ‰‹Eј_^[ФЬ;ьш‹х]У/KZ ѕ$bЬ@ ёŸEbN/SKP_Silk_range_coder_get_lengthЬР € +psRC  tnBytes јџџџtnBitsђ@b4$€(€=*€K-€N.€ DXD \D рD фD U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E%џџt‹EСјPшƒФыыЗEPшƒФƒР_^[ФР;ьш‹х]У0RARW ѕ$_Р$ ёi4_KSKP_Silk_CLZ32РР € tin32ђH_<p€r€(s€9t€;u€Kw€ KXK \K ЌK АK U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјПE…Рu ИщЂПE%џt0ПE%№tf‹EfСј f‰Eы‹EјƒР‰Eјf‹EfСјf‰Eы+ПE%№џt‹EјƒР‰Eјf‹EfСјf‰Eы ‹EјƒР ‰EјПEƒр tПEƒрt‹Eјы%ы‹EјƒРыыПEƒрt ‹EјƒРыы‹EјƒР_^[‹х]Уѕ$рЬ@ ё{4рй SKP_Silk_CLZ16ЬР € in16 јџџџtout32ђ№рфL€M€%N€-O€7R€BS€MT€YU€[V€dW€pY€rZ€}[€†\€’]€”^€b€Іc€Џd€Дe€Жf€Оg€Рh€Щi€бj€гk€йm€ RXR \R МR РR U‹ьь SVWНєўџџЙCИЬЬЬЬѓЋ‹E‹HСщ‰MМEдP‹MQшƒФ‰Eр‹E‹HСс‹Uр+б‰Uь‹MьƒщИ€гјEМ‰EМЙ+MьƒШџгр#EМ‰EМ‹EМ%t@‹E‹H‰Mј‹Eјƒш‰Eј‹MMјŠQ€Тˆ•їўџџ‹EEјŠїўџџˆHЖ•їўџџ…вuыЩ‹E‹M‹P;}W‹EМСш‹M‹Q‹MˆD‹U‹BƒР‹M‰Aƒ}ь~/‹E‹M‹P;}"‹EМСш‹M‹Q‹MˆD‹U‹BƒР‹M‰A‹Eрƒрt3‹MрƒсИџгј‰EШ‹Eдƒш‹M;}‹EEдЖH MШ‹UUдˆJR‹ЭPшXZ_^[Ф ;ьш‹х]У‹џдџџџnBytes3Dc\h]z ˆ[”Zѕ$Ÿ – ё)@ŸŸ6SKP_Silk_range_enc_wrap_up РL €    СpsRC Мџџџubase_Q24 јџџџtbufferIx_tmp ьџџџtbits_to_store рџџџtbits_in_stream Шџџџtmask дџџџtnBytesђАŸЄ4€9€*;€=>€N@€aA€tD€~F€‡G€ОK€ЫL€эM€ѓN€O€"U€*V€:W€GX€][€ YXY \Y  Z ЄZ Џ[ Г[ О\ Т\ lY pY U‹ььфSVWНџџџЙ9ИЬЬЬЬѓЋEьP‹MQшƒФ‰Eј‹Eьƒш‹M;| ‹EЧ@ћџџџы4‹Eјƒрt,‹MјƒсИџгј‰Eр‹EEьЖH#Mр;Mрt ‹EЧ@ћџџџR‹ЭPшXZ_^[Фф;ьш‹х]УьџџџnBytes'D„g‰]› ЈfДeѕ$Пф  ё№OПП6SKP_Silk_range_coder_check_after_decodingфР$ €    СpsRC јџџџtbits_in_stream рџџџtmask ьџџџtnBytesђhП \a€d€1g€>h€Hi€Jm€Rn€bo€tp€~t€ dXd \d Џe Гe Оf Тf Эg бg 0d 4d VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S,.text д­Щ‰ž(.debug$Sш ZЙ .rtc$TMZЬ.L3 .rtc$IMZžz]BY .textn–mэ‡Žt.debug$S<‹e_Зh † .text fiШЙ№Оr.ф.debug$S Р KМr• .text x%ФђKsЕј’.debug$S T  №У,­ .text V4b ˜аC.debug$S Й­Ь7Ы .textДШєq]ІеˆЄ.debug$SPžТЃф _memcpy .textb˜'sіВк ].debug$S мЅыЅ§ .text_йIѕ=vЄёC.debug$Sє:Яq‘ .textр}BИ#u‘ћ.debug$SЌбЛ5с. .textŸхЖ&ѓФ@г.debug$S 5f> $LN11˜$LN12Œ$LN13„Z .textПHЗЃЭs.debug$S˜ йЮњq $LN6И$LN7Ќ$LN8Є.debug$T\œ_SKP_Silk_range_encoder__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_range_encoder_multi__RTC_CheckEsp_SKP_Silk_range_decoder_SKP_Silk_range_decoder_multi_SKP_Silk_range_enc_init_SKP_Silk_range_dec_init_SKP_Silk_range_coder_get_length_SKP_Silk_CLZ32_SKP_Silk_CLZ16_SKP_Silk_range_enc_wrap_up@_RTC_CheckStackVars@8_SKP_Silk_range_coder_check_after_decoding /1663 1273638393 100666 8059 ` Lљ-ъK+.drectveA, .debug$S”m @B.text‰eю P`.debug$S€Ž @B.rtc$TMZ”@0@.rtc$IMZžЂ@0@.debug$T\Ќ@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё™\J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_quant_LTP_gains_FIX.obj:<!ovovMicrosoft (R) Optimizing Compiler§=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_quant_LTP_gains_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё3+ “SKP_Silk_LTP_gain_BITS_Q6_ptrs' SKP_Silk_LTP_gain_CDF_ptrs0 SKP_Silk_LTP_gain_middle_avg_RD_Q14% “SKP_Silk_LTP_vq_ptrs_Q14" gSKP_Silk_LTP_vq_sizes"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tєXprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9ђWAкН‚bIЭј8SiДLє‹’Џ‹ц+7 @#nŽи,ˆ{ѓHj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_quant_ltp_gains_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 360 - ^ = $23 $T0 364 - ^ = $24 $T0 368 - ^ = И М х щ   @ D g k U‹ььdSVWНœўџџЙYИЬЬЬЬѓЋЁ3Х‰EќЧ…dџџџџџџЧEшы ‹EшƒР‰Eшƒ}шh‹Eш‹ …‰MИ‹Eш‹ …‰MЌ‹Eш‹ …‰M ‹Eш‹ …‰MФ‹E‰Eˆ‹E‰E”Ч…pџџџЧEєы ‹EєƒР‰Eєƒ}єƒ‹EФP‹MQ‹UЌR‹E P‹MˆQ‹U”R…|џџџP‹MєTаRшƒФ ‹…pџџџ…|џџџ%€t Ч…œўџџџџџы‹pџџџ|џџџ‰œўџџ‹•œўџџ‰•pџџџ‹E”ƒР ‰E”‹EˆƒРd‰EˆщjџџџНpџџџўџџ~ Ч…œўџџўџџы ‹…pџџџ‰…œўџџ‹œўџџ‰pџџџ‹…pџџџ;…dџџџ}&‹…pџџџ‰…dџџџjEаP‹M QшƒФ ‹E‹Mш‰ƒ}t‹…pџџџ;}ыщ…ўџџ‹E‹‹‰U ЧEєы ‹EєƒР‰Eєƒ}є}BЧEшы ‹EшƒР‰Eшƒ}ш}(‹Eє‹M ‹kвUш‹EєkРEш‹M‹u f‹Vf‰AыЩыЏR‹ЭPшXZ_^[‹Mќ3ЭшФd;ьш‹х]У‹џаџџџ|џџџrate_dist_subfrtemp_idxTan{мŒЉО%*9FT`lѕ$‰dж( ё/B‰(‰;SKP_Silk_quant_LTP_gains_FIXdРЄ … :ќџџџ     B_Q14  tcbk_index tperiodicity_index W_Q18 tmu_Q8 tlowComplexity єџџџtj Фџџџtcbk_size |џџџtrate_dist_subfr pџџџtrate_dist шџџџtk ”џџџb_Q14_ptr ˆџџџW_Q18_ptr аџџџ)temp_idx Иџџџxcdf_ptr  џџџcbk_ptr_Q14 Ќџџџcl_ptr dџџџtmin_rate_distђ‰(&€(5€26€N7€[8€h9€u:€‚=€ˆ>€Ž@€˜A€ДL€уN€ P€)Q€2R€7U€gW€uX€Y€“Z€›^€Џ_€Бa€Жc€Хd€нe€ѕf€g€h€i€ X \ Ў В Н С Ь а л п p t "'VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S” цZ.text‰вneї4‡#.debug$S€ ш­3ѕ $LN22p$LN21€$LN23X$LN24P"_memcpy G `w‘БЭр я   .rtc$TMZЬ.L!8 .rtc$IMZžz]G^ .debug$T\m_SKP_Silk_quant_LTP_gains_FIX_SKP_Silk_LTP_gain_middle_avg_RD_Q14_SKP_Silk_VQ_WMat_EC_FIX_SKP_Silk_LTP_vq_sizes_SKP_Silk_LTP_vq_ptrs_Q14_SKP_Silk_LTP_gain_BITS_Q6_ptrs_SKP_Silk_LTP_gain_CDF_ptrs___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase /1709 1273638393 100666 7080 ` Lљ-ъKF.drectveA, .debug$S”m@B.text‡ P`.debug$Sˆœ@B.rtc$TMZЮв@0@.rtc$IMZмр@0@.debug$T\ъ@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‘XJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_pulses_to_bytes.obj:<!ovovMicrosoft (R) Optimizing Compilerљ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_pulses_to_bytes.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё@"@SA_Method"SA_ParameterTSKP_SILK_LBRR_structKSKP_Silk_encoder_stateRSKP_Silk_LP_state+SKP_Silk_VAD_state!wchar_t"SA_AttrTargetsSKP_Silk_NLSF_CBS usize_t!ЧSKP_Silk_range_coder_stateTSKP_SILK_LBRR_struct+SKP_Silk_VAD_state!ЧSKP_Silk_range_coder_state PSKP_Silk_detect_SWB_stateRSKP_Silk_LP_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structKSKP_Silk_encoder_state PSKP_Silk_detect_SWB_state|SKP_Silk_NLSF_CB_structєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆЊWb!Ј?~NЯзѕьЫ[иC-д2ўрм…ьЊ6о ЙОџ„w„љ”m–˜ЊдЉdkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїS(yFiдz<G;1=1•ЬXўrToрџЊtЩзЩ}*Мj_П#ХuХДR†(ЩЄёќ/:ˆзМJntГЬ?З`УД‰ >GO“VРА,пЊ@ў,^žїY†ЗLŽ_Ы'_PѓАз"Ќшš>šљ%?dl9AKvўдЊž!№k‡G‡’Џ‹ц+7 @#nŽи,ˆ{ѓDj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_pulses_to_bytes.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 288 - ^ = $23 $T0 292 - ^ = $24 $T0 296 - ^ = U‹ььSVWНфўџџЙGИЬЬЬЬѓЋ‹E‹€Ь™ƒтТСј‰Eр‹E ‰EдЧEАЧEьы ‹EьƒР‰Eь‹Eь;EрЩЧEШЧEјы ‹EјƒР‰Eјƒ}јі‹Eј‹Mдƒ<~‹Uј‹Eд‹ ‰шўџџы‹Uј‹Eд‹ їй‰шўџџ‹UШ•шўџџ‰UШ‹Eј‹Mдƒ|~‹Uј‹Eд‹L‰шўџџы‹Uј‹Eд‹Lїй‰шўџџ‹UШ•шўџџ‰UШ‹Eј‹Mдƒ|~‹Uј‹Eд‹L‰шўџџы‹Uј‹Eд‹Lїй‰шўџџ‹UШ•шўџџ‰UШ‹Eј‹Mдƒ| ~‹Uј‹Eд‹L ‰шўџџы‹Uј‹Eд‹L їй‰шўџџ‹UШ•шўџџ‰UШщїўџџПEШПMШЏССјiРњлџџПUШПMШЏбтџџiвњлџџСњТ‰EМ}Мџџ~ Ч…шўџџџџы*}М№џ} Ч…фўџџ№џы ‹EМ‰…фўџџ‹фўџџ‰шўџџ‹•шўџџСт ‰UМПEШiРі=EМ‰EМ‹EМш0‰EМ‹EАEМ‰EА‹EдƒР@‰Eдщ"ўџџ‹EАСјƒРбј‰EА}Аџ~ Ч…шўџџџы*}А€џџ} Ч…фўџџ€џџы ‹EА‰…фўџџ‹фўџџ‰шўџџ‹•шўџџ‰UА‹EА_^[‹х]Уѕ$‡в ё>‡€MSKP_Silk_pulses_to_bytesР\ € =psEncC  tq ьџџџtj Аџџџtacc_nBytes дџџџtq_ptr Шџџџtsum_abs_val јџџџti МџџџtnBytes рџџџtiterђа‡(Ф-€1€34€95€@6€^7€e8€9€Л:€ј;€5<€r=€w?€Њ@€ѕA€B€D€F€"G€'I€5J€}L€€M€ X \ D H VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S”.text‡ њˆJ)нЖ.debug$Sт–‹ .rtc$TMZЬ.L5 .rtc$IMZžz]D[ .debug$T\j_SKP_Silk_pulses_to_bytes__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/1751 1273638393 100666 14324 ` Lљ-ъKз'_.drectveA4 .debug$Sxu@B.textњэч= P`.debug$STI #@B.rdata(3$@0@.rdata2[$@0@.rdata<$@0@.rdata4Щ$@0@.rdata&§$@0@.rdata"#%@0@.rdatazE%@@@.rdata@П%@@@.rdata<џ%@0@.rdataB;&@@@.rdata }&@@@.data'@0Р.rdata>!'@0@.rtc$TMZ_'c'@0@.rtc$IMZm'q'@0@.debug$T\{'@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё•ZJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_process_NLSFs_FIX.obj:<!ovovMicrosoft (R) Optimizing Compilerћ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_process_NLSFs_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё"@SA_Method"SA_Parameter PSKP_Silk_detect_SWB_stateTSKP_SILK_LBRR_structKSKP_Silk_encoder_stateRSKP_Silk_LP_state#mSKP_Silk_encoder_control_FIX+SKP_Silk_VAD_state!wchar_t!„SKP_Silk_predict_state_FIX!cSKP_Silk_encoder_state_FIXSKP_Silk_nsq_state‹SKP_Silk_encoder_control#‡SKP_Silk_prefilter_state_FIX"SA_AttrTargetsSKP_Silk_NLSF_CBS‰SKP_Silk_shape_state_FIX usize_t!ЧSKP_Silk_range_coder_stateSKP_Silk_nsq_stateTSKP_SILK_LBRR_struct+SKP_Silk_VAD_state!ЧSKP_Silk_range_coder_state PSKP_Silk_detect_SWB_stateRSKP_Silk_LP_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structKSKP_Silk_encoder_state‹SKP_Silk_encoder_control‰SKP_Silk_shape_state_FIX#‡SKP_Silk_prefilter_state_FIX!„SKP_Silk_predict_state_FIX!cSKP_Silk_encoder_state_FIX#mSKP_Silk_encoder_control_FIX|SKP_Silk_NLSF_CB_structєXprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9с Ібlизе С‡ЏИЌа‰’Џ‹ц+7 @#nŽи,ˆ{ѓFj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_process_nlsfs_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 492 - ^ = $23 $T0 496 - ^ = $24 $T0 500 - ^ = U‹ььшSVWНўџџЙzИЬЬЬЬѓЋЁ3Х‰Eќ‹EƒИ(Є}&hj‹ ƒС QhjшƒФƒјuЬ‹EИ(Є~&hj‹ ƒС QhjшƒФƒјuЬ‹E ƒИp}&hj‹ ƒСQhjшƒФƒјuЬ‹E Иp~&hj‹ ƒСQhjшƒФƒјuЬ‹E ƒxht/‹M ƒyht&hj‹ƒТRhjшƒФƒјuЬ‹E ƒxhuS‹EПˆ(ЄkЩџ‹UП‚(ЄiР<пСјLB‰M ‹EПˆ(ЄkЩѓ‹UП‚(ЄiР@3СјŒš‰M”ыj‹EПˆ(ЄkЩџ‹UП‚(ЄiРю|СјŒЄ‰M ‹E‹ˆ(Є‹U ŠpПСkРц‹M‹‘(Є‹M ‘pПвiв€fСњ„33‰E”ƒ} }%hjЁƒР PhjшƒФƒјuЬ} Є~%hjЁƒР!PhjшƒФƒјuЬƒ}”}%hjЁƒР"PhjшƒФƒјuЬ}”33~%hjЁƒР#PhjшƒФƒјuЬƒ} ~ ‹E ‰…ўџџы Ч…ўџџ‹ўџџ‰M ‹E‹ˆќQ‹UREЌPшƒФ ‹EƒИєu‹M ƒyD} Ч…ўџџы Ч…ўџџ‹•ўџџ‰Uєƒ}є„Q‹E‹ˆќQ‹U ‹BDP‹MQ‹UТрiR…4џџџPшƒФ‹E‹ˆќQ•4џџџR…ьўџџPшƒФ ‹E ПHD‹U ПBDЏШСс ‰MˆЧ…рўџџы‹…рўџџƒР‰…рўџџ‹E‹рўџџ;ˆќМ‹…рўџџ‹L…Ќбљ‹•рўџџ‹„•ьўџџСјПUˆЏТ‹•рўџџ‹”•ьўџџтџџПuˆЏжСњТШ‹…рўџџ‰L…Ќ‹…рўџџ|…Ќџ~&hj‹ ƒС=QhjшƒФƒјuЬ‹…рўџџƒ|…Ќ}&hj‹ ƒС>QhjшƒФƒјuЬщ џџџ‹E ‹Hh‹U‹„Šф ‰…|џџџ‹E‹ˆ Q‹U‹‚ќP‹M‹‘ R‹E”P‹M QUЌR‹EрiP‹|џџџQ‹UR‹E ƒРPшƒФ(‹E‹ˆќQ‹UR‹E ИPшƒФ ƒ}єtR‹E‹ˆќQ‹U ‹BDP‹MQ‹UТрiR…4џџџPшƒФ‹E‹ˆќQ•4џџџR‹E ˜PшƒФ ы'‹E‹ˆќбсQ‹U ТИR‹E ˜PшƒФ R‹ЭPшXZ_^[‹Mќ3ЭшФш;ьш‹х]УЌџџџ@4џџџ@ьўџџ@pNLSFW0_temp_Q6pNLSF0_temp_Q15pNLSFW_Q6N5M=IFEMAj@rI{E‚Aœ<ЄI­EДAб8йIтEщA 4IE!Aћ0I EA),0I9E@AT([IdEkA‚$‰I’E™Aн Ii I'E.AIQIZEaAЯю"DmzQŽP›OЈДРЬѕ$њш д( ёд@њ(њ‚SKP_Silk_process_NLSFs_FIXшР( … :ќџџџ      VpsEnc  hpsEncCtrl tpNLSF_Q15 ЌџџџИpNLSFW_Q6 ”џџџtNLSF_mu_fluc_red_Q16 ьўџџИpNLSFW0_temp_Q6 єџџџtdoInterpolate ˆџџџti_sqr_Q15 4џџџИpNLSF0_temp_Q15  џџџtNLSF_mu_Q15 |џџџ?psNLSF_CB рўџџtiђ@њ(%4$€(0€Z1€2€С3€і4€.9€7<€^=€ˆ>€ŠA€ДB€єD€E€MF€xG€ІI€ЪM€фQ€R€"V€PZ€p^€‡_€З`€a€;b€nc€sg€‰m€жq€ѕs€ћv€)y€K{€M}€t€ X \ Ќ А Л П Ъ Ю й н ш ь   pNLSFW_Q6[ i ] >= 1pNLSFW_Q6[ i ] <= 0x7FFFNLSF_mu_fluc_red_Q16 <= 13107NLSF_mu_fluc_red_Q16 >= 0NLSF_mu_Q15 <= 164NLSF_mu_Q15 >= 0psEncCtrl->sCmn.sigtype == 0 || psEncCtrl->sCmn.sigtype == 1psEncCtrl->sparseness_Q8 <= 256psEncCtrl->sparseness_Q8 >= 0psEnc->speech_activity_Q8 <= 256j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_process_nlsfs_fix.c$psEnc->speech_activity_Q8 >= 0V[VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sx.textњ=ЗU_a`№ЩT.debug$STДЅЊj $LN28а$LN27р$LN26№$LN29Ќ$LN30Є_memcpy  8 .rdata(жРщW.rdata2NЪЛЭуˆ ž .rdata<fђŽЎП.rdata4оЯ єu.rdata &с1'ч .rdata "kTw•– .rdata zщжd  .rdata @єЇ `е .rdata </Ќiэ™ .rdataBєЊѕ#S .rdata ЦZ1$.datai8P/п.rdata>U$ —Ят ё  .rtc$TMZЬ.L# : .rtc$IMZžz]I ` .debug$T\o _SKP_Silk_process_NLSFs_FIX_SKP_Silk_NLSF2A_stable_SKP_Silk_NLSF_MSVQ_encode_FIX??_C@_1CI@PPBFACJI@?$AAp?$AAN?$AAL?$AAS?$AAF?$AAW?$AA_?$AAQ?$AA6?$AA?$FL?$AA?5?$AAi?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA1?$AA?$AA@??_C@_1DC@CNMDEJKP@?$AAp?$AAN?$AAL?$AAS?$AAF?$AAW?$AA_?$AAQ?$AA6?$AA?$FL?$AA?5?$AAi?$AA?5?$AA?$FN?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?$AA@_SKP_Silk_interpolate_SKP_Silk_NLSF_VQ_weights_laroia??_C@_1DM@FFGDIEJB@?$AAN?$AAL?$AAS?$AAF?$AA_?$AAm?$AAu?$AA_?$AAf?$AAl?$AAu?$AAc?$AA_?$AAr?$AAe?$AAd?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1?$AA3?$AA1?$AA0?$AA7?$AA?$AA@??_C@_1DE@MHPEDPJB@?$AAN?$AAL?$AAS?$AAF?$AA_?$AAm?$AAu?$AA_?$AAf?$AAl?$AAu?$AAc?$AA_?$AAr?$AAe?$AAd?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CG@IACBFFKN@?$AAN?$AAL?$AAS?$AAF?$AA_?$AAm?$AAu?$AA_?$AAQ?$AA1?$AA5?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1?$AA6?$AA4?$AA?$AA@??_C@_1CC@CLPJMHLO@?$AAN?$AAL?$AAS?$AAF?$AA_?$AAm?$AAu?$AA_?$AAQ?$AA1?$AA5?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1HK@LAOFOGPD@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAs?$AAi?$AAg?$AAt?$AAy?$AAp?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$HM?$AA?$HM?$AA?5@??_C@_1EA@OKHJDLDN@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAs?$AAp?$AAa?$AAr?$AAs?$AAe?$AAn?$AAe?$AAs?$AAs?$AA_?$AAQ?$AA8?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA5?$AA6?$AA?$AA@??_C@_1DM@BGIENKNI@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAs?$AAp?$AAa?$AAr?$AAs?$AAe?$AAn?$AAe?$AAs?$AAs?$AA_?$AAQ?$AA8?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1EC@MAHEJDOO@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAp?$AAe?$AAe?$AAc?$AAh?$AA_?$AAa?$AAc?$AAt?$AAi?$AAv?$AAi?$AAt?$AAy?$AA_?$AAQ?$AA8?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA5?$AA6@__CrtDbgReportW??_C@_1KA@EPMJPGFK@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_process_NLSFs_FIX@@9@9??_C@_1DO@HFJHHMML@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAp?$AAe?$AAe?$AAc?$AAh?$AA_?$AAa?$AAc?$AAt?$AAi?$AAv?$AAi?$AAt?$AAy?$AA_?$AAQ?$AA8?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/1795 1273638393 100666 14781 ` Lљ-ъK‘/X.drectveA4 .debug$SЬu@B.textyAК P`.debug$Sќв Ю#@B.rdatar$@@@.rdata6r$@0@.rdata Ј$@@@.dataH%@0Р.rdata"L%@0@.rtc$TMZn%r%@0@.rtc$IMZ|%€%@0@.textяŠ%y& P`.debug$S”П&S( @B.textyе(N) P`.debug$S@b)Ђ*@B.text_д*3+ P`.debug$SєQ+E,@B.textрw, P`.debug$SЌW-/@B.debug$T\5/@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё•ZJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_process_gains_FIX.obj:<!ovovMicrosoft (R) Optimizing Compilerћ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_process_gains_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё"@SA_Method"SA_Parameter PSKP_Silk_detect_SWB_state|SKP_Silk_NLSF_CB_structTSKP_SILK_LBRR_structKSKP_Silk_encoder_stateRSKP_Silk_LP_state#mSKP_Silk_encoder_control_FIX+SKP_Silk_VAD_state!wchar_t!„SKP_Silk_predict_state_FIX!cSKP_Silk_encoder_state_FIXSKP_Silk_nsq_state‹SKP_Silk_encoder_control#‡SKP_Silk_prefilter_state_FIX"SA_AttrTargetsSKP_Silk_NLSF_CBS‰SKP_Silk_shape_state_FIX usize_t!ЧSKP_Silk_range_coder_stateSKP_Silk_nsq_stateTSKP_SILK_LBRR_struct+SKP_Silk_VAD_state!ЧSKP_Silk_range_coder_state PSKP_Silk_detect_SWB_stateRSKP_Silk_LP_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structKSKP_Silk_encoder_state‹SKP_Silk_encoder_control‰SKP_Silk_shape_state_FIX#‡SKP_Silk_prefilter_state_FIX!„SKP_Silk_predict_state_FIX!cSKP_Silk_encoder_state_FIX#mSKP_Silk_encoder_control_FIXєXprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9/-ж]žђWвед›*т‰’Џ‹ц+7 @#nŽи,ˆ{ѓœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_process_gains_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 304 - ^ = $23 $T0 308 - ^ = $24 $T0 312 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 232 - ^ = $23 $T0 236 - ^ = $24 $T0 240 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = U‹ьь,SVWНдўџџЙKИЬЬЬЬѓЋ‹E\a‰Eј‹E ƒxh…‹E ‹ˆtщСљƒСбљQшƒФїи‰EрЧEьы ‹EьƒР‰Eьƒ}ь}R‹Eь‹M ‹”€СњПEрЏа‹Mь‹E ‹Œˆ€сџџПEрЏШСљб‹Mь‹E ”ˆ€‹Mь‹E ‰”ˆ€ыŸ‹E Й€"+ˆlСљiЩ{T‹U И€"+‚l%џџiР{TСјШQшƒФ‹M™їЙа‰EдЧEьы ‹EьƒР‰Eьƒ}ьV‹Eь‹M ‹”Œ‰UА‹EАСјПMдЏС‹UАтџџПMдЏбСњТ‹UдСњƒТбњЏUАТ‰EЄ‹Eь‹M ƒМœ~i‹Eь‹M ƒМœ }P‹Eь‹M ƒМœu‹UЄбњ‹EЄƒра‰•мўџџы ‹Mь‹U ‹ŒŠœƒщ‹EЄгјƒРбј‰…мўџџ‹мўџџ‰MЄыЧEЄыK‹Eь‹M ƒМœt;‹Eь‹M ‹ŒœїйКџџџгњ9UЄ~ ЧEЄџџџы‹Eь‹M ‹Œœїй‹UЄгт‰UЄ‹Eь‹M ‹”€‰UШ‹EШ™‹Ш‹ђ‹EШ™RPVQшБ шEЄ%€ue‹EШ™‹Ш‹ђ‹EШ™RPVQшБ ш#EЄ%€t Ч…мўџџ€ы%‹EШ™‹Ш‹ђ‹EШ™RPVQшБ шEЄ‰…мўџџ‹•мўџџ‰•иўџџыc‹EШ™‹Ш‹ђ‹EШ™RPVQшБ ш EЄ%€u Ч…дўџџџџџы%‹EШ™‹Ш‹ђ‹EШ™RPVQшБ шEЄ‰…дўџџ‹•дўџџ‰•иўџџ‹…иўџџ‰EМ}МџЯ‹EЄСр‹MШСљПUШЏЪ‹UШтџџПuШЏжСњЪС‹MШСљƒСбљЏMШС‰EМƒ}М%hjЁƒР)PhjшƒФƒјuЬ‹EМPшƒФ‰EШ}Шџџ~ Ч…мўџџџџы*}Ш€џ} Ч…иўџџ€џы ‹EШ‰…иўџџ‹иўџџ‰мўџџ‹•мўџџСт‹Eь‹M ‰”€ыd‹EМPшƒФ‰EШ}Шџ~ Ч…мўџџџы*}Ш€џџ} Ч…иўџџ€џџы ‹EШ‰…иўџџ‹иўџџ‰мўџџ‹•мўџџСт‹Eь‹M ‰”€щ—ќџџ‹E‹ˆи Q‹UјR‹E €P‹M ƒСHQшƒФ‹E ƒxhu3‹E ‹ˆˆСљ‹U Štљ€~ ‹E Ч@dы ‹E Ч@d‹E ƒxh…‰‹EПˆ(Є‹UП‚(ЄkРСј HК3+б‹E Пˆ`kЩ‹E П€`iРЭСјШ+б‹M ПAdiРЭа‹M ПdkР‹M П‰diЩšСљС+а‹E ‰\щ„‹EПˆ(Є‹UП‚(ЄkРСј HК3+б‹E Пˆ`kЩ‹E П€`iРfСјШ+б‹M ПAdiРšа‹M ПdkР‹M П‰diЩšСљС+а‹E ‰\‹E ƒИ\}&hj‹ ƒСLQhjшƒФƒјuЬ‹E И\|&hj‹ ƒСMQhjшƒФƒјuЬ_^[Ф,;ьш‹х]УO&ќ%W)^(})„(Џ)Ж(т)щ()($– ŸІИ::Ё  #@H QXq'ѕ$y,д ё3@ye™SKP_Silk_process_gains_FIX,Рl € VpsEnc  hpsEncCtrl ьџџџtk Мџџџtgain_squared дџџџtInvMaxSqrVal_Q16 јџџџ‘psShapeSt АџџџtResNrg ЄџџџtResNrgPart рџџџts_Q16 Шџџџtgainђˆy(.|#€$€))€6+€[,€s-€У.€Х4€6€,8€<9€r:€‚;€’<€р=€т>€щ?€ы@€ћA€B€C€D€6G€FH€=I€JK€ˆL€ГM€ТN€O€P€(Q€}S€‚W€ЈY€БZ€Ю[€и\€к]€фb€ёg€uh€zm€ўo€0p€er€ X \ t x psEncCtrl->Lambda_Q10 < ((int)((2) * (1 << (10)) + 0.5))psEncCtrl->Lambda_Q10 >= 0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_process_gains_fix.c#gain_squared > 0.3U‹ььфSVWНџџџЙ9ИЬЬЬЬѓЋƒ}3РыvEрPMьQ‹URшƒФ ‹Eьƒрt ЧEј€ыЧEј†Д‹Mьбљ‹Eјгј‰Eј‹EјСјПMрiЩеПбЏТ‹MјсџџПUрiвеПвЏЪСљMјШ‰Mј‹EјR‹ЭPшXZ_^[Фф;ьш‹х]Уьџџџрџџџfrac_Q7lz5FЄ>Љ?Л'Ш=д<р;ѕ$яфF ёй:яяSKP_Silk_SQRT_APPROXфР$ €     tx рџџџtfrac_Q7 ьџџџtlz јџџџtyђxя lK€N€$O€(R€<T€DU€KV€MW€T[€a^€›`€ža€ :X: \: š< ž< Љ; ­; И= М= Ч> Ы> : : U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋ‹EPшƒФ‰Eј‹E ‹Mј‰ƒ}ј}Й+Mј‹Eгјƒр‹M‰ы‹Mјƒщ‹Eгрƒр‹M‰_^[ФЬ;ьш‹х]У#Mq'ѕ$yЬ И ёІ7yeSKP_Silk_CLZ_FRACЬР € tin  tlz tfrac_Q7 јџџџtleadingZerosђXyL;€>€-?€5@€;A€PB€RC€eE€ FXF \F шF ьF U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E%џџt‹EСјPшƒФыыЗEPшƒФƒР_^[ФР;ьш‹х]У0TATW'ѕ$_Р* ёi4_KSKP_Silk_CLZ32РР € tin32ђH_<p€r€(s€9t€;u€Kw€ MXM \M ЌM АM U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјПE…Рu ИщЂПE%џt0ПE%№tf‹EfСј f‰Eы‹EјƒР‰Eјf‹EfСјf‰Eы+ПE%№џt‹EјƒР‰Eјf‹EfСјf‰Eы ‹EјƒР ‰EјПEƒр tПEƒрt‹Eјы%ы‹EјƒРыыПEƒрt ‹EјƒРыы‹EјƒР_^[‹х]Уѕ$рЬИ ё{4рй SKP_Silk_CLZ16ЬР € in16 јџџџtout32ђ№рфL€M€%N€-O€7R€BS€MT€YU€[V€dW€pY€rZ€}[€†\€’]€”^€b€Іc€Џd€Дe€Жf€Оg€Рh€Щi€бj€гk€йm€ TXT \T МT РT VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SЬ.textysМ‡д%0у .debug$Sќ'Г‹ .rdatarPВй) .rdata6LЮžuэ˜ Ў .rdata ˆwQО.dataа‡Вy.rdata "пНYmЊ  . A __allshr __allmul .rtc$TMZ Ь.LP g .rtc$IMZ žz]v  .text яR-ЄTŒІђ.debug$S ” їz>}œ $LN7ф $LN6ь $LN8Ь $LN9Ф В .textyУ‹f&‚нm.debug$S@StёЩ .text_йIѕ=vЄёC.debug$Sє:Яq‘м .textр}BИ#u‘ћ.debug$SЌбЛ5сь .debug$T\ќ_SKP_Silk_process_gains_FIX??_C@_1HC@GOPDELEO@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAL?$AAa?$AAm?$AAb?$AAd?$AAa?$AA_?$AAQ?$AA1?$AA0?$AA?5?$AA?$DM?$AA?5?$AA?$CI?$AA?$CI?$AAi?$AAn?$AAt?$AA?$CJ?$AA?$CI?$AA?$CI@??_C@_1DG@LPMCFMEO@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAL?$AAa?$AAm?$AAb?$AAd?$AAa?$AA_?$AAQ?$AA1?$AA0?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_Silk_gains_quant__CrtDbgReportW??_C@_1KA@EOKJNLBE@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_process_gains_FIX@@9@9??_C@_1CC@NDNHCOAK@?$AAg?$AAa?$AAi?$AAn?$AA_?$AAs?$AAq?$AAu?$AAa?$AAr?$AAe?$AAd?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@_SKP_Silk_log2lin_SKP_Silk_sigm_Q15__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_SQRT_APPROX@_RTC_CheckStackVars@8_SKP_Silk_CLZ_FRAC_SKP_Silk_CLZ32_SKP_Silk_CLZ16 /1839 1273638393 100666 11860 ` L љ-ъKЕ';.drectveAє .debug$SP5@B.textF…Ы P`.debug$SШk3 @B.rdata˜Щ @@@.dataa!@0Р.rdata.e!@0@.rtc$TMZ“!—!@0@.rtc$IMZЁ!Ѕ!@0@.textˆЏ! P`.debug$S№7$''@B.debug$T\Y'@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёVJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_prefilter_FIX.obj:<!ovovMicrosoft (R) Optimizing Compilerї=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_prefilter_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё"@SA_Method"SA_Parameter PSKP_Silk_detect_SWB_state|SKP_Silk_NLSF_CB_structTSKP_SILK_LBRR_structKSKP_Silk_encoder_stateRSKP_Silk_LP_state#mSKP_Silk_encoder_control_FIX+SKP_Silk_VAD_state!wchar_t!„SKP_Silk_predict_state_FIX!cSKP_Silk_encoder_state_FIXSKP_Silk_nsq_state‹SKP_Silk_encoder_control#‡SKP_Silk_prefilter_state_FIX"SA_AttrTargetsSKP_Silk_NLSF_CBS‰SKP_Silk_shape_state_FIX usize_t!ЧSKP_Silk_range_coder_stateSKP_Silk_nsq_stateTSKP_SILK_LBRR_struct+SKP_Silk_VAD_state!ЧSKP_Silk_range_coder_state PSKP_Silk_detect_SWB_stateRSKP_Silk_LP_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structKSKP_Silk_encoder_state‹SKP_Silk_encoder_control‰SKP_Silk_shape_state_FIX#‡SKP_Silk_prefilter_state_FIX!„SKP_Silk_predict_state_FIX!cSKP_Silk_encoder_state_FIX#mSKP_Silk_encoder_control_FIXєpprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡ІkкKэфЖ'Šџм4'rƒ[~е*Јн­Wыћ%iАлУД‰ >GO“VРА,пч@ў,^žїY†ЗLŽ_Ы'_P0kЛY№x гbќ:Tи™Ж+Ы §љГ#u8^s.йxХЙSUжпCkhHPTЊŒ3їГГјї…(yFiдz<G;1=1ЧЬXўrToрџЊtЩ Щ}*Мj_П#ХuХДR†(KАз"Ќшš>šљ%?dl‘nЦаTЄЌІ3рќZ5vн’Џ‹ц+7 @#nŽи,ˆ{ѓj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_perceptual_parameters_fix.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_prefilter_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 1216 - ^ = $23 $T0 1220 - ^ = $24 $T0 1224 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 312 - ^ = $23 $T0 316 - ^ = $24 $T0 320 - ^ = U‹ььМSVWНDћџџЙ/ИЬЬЬЬѓЋЁ3Х‰Eќ‹Ela‰Eє‹E‰E ‹E‰E”‹Eє‹ˆd‰MаЧEмы ‹EмƒР‰Eмƒ}мV‹E ƒxhu ‹Eм‹M ‹Tl‰Uа‹Eм‹M ‹”LСњ‹Eм‹M О@+Д,ПЦЏа‹Mм‹E ‹ŒˆLсџџ‹Eм‹u П@+М†,ПЧЏШСљቕ|џџџy%hjЁƒРPhjшƒФƒјuЬ‹…|џџџСј‰…Xџџџ‹…|џџџбјСр …Xџџџ‰…Xџџџ‹Eм‹M ‹”<‰•pџџџ‹Eм‹M ‹” ‰•dџџџ‹EмСр‹M ”A‰UЌ‹E‹ˆјСсQj•(§џџRшƒФ ‹E‹ˆјQ‹U‹‚а‹MјP•ќџџR…(§џџP‹MЌQ‹U‹‚јбр‹M +ШQшƒФ‹E‹ˆј”Mќџџ‰Uˆ‹Eм‹M ‹”бњƒТбњ‰UИ‹Eм‹M П”,П…|џџџЏаТУѕ(‰UФ‹E ПˆdiЩіMФ‰MФ‹EФСј‹Mм‹U ‹ŒŠїйПбЏТ‹MФсџџ‹Uм‹u ‹”–їкПвЏЪСљС‰EФ‹EФСј ƒРбј‰EФ}Фџ~ Ч…Hћџџџы*}Ф€џџ} Ч…Dћџџ€џџы ‹EФ‰…Dћџџ‹Dћџџ‰Hћџџ‹•HћџџСт UИ‰UИ‹EˆППUИЏЪ‹EєП\‹EИСјЏаЪ‰p§џџЧEшы ‹EшƒР‰Eш‹E‹Mш;ˆа}3‹Eш‹MˆПAПEИЏа‹Mш‹EˆПLHў‹EИСјЏШб‹Mш‰”p§џџыЖ‹E‹ˆа‹UˆПDJў‹Mє‰\‹E‹ˆаQ‹UаR‹…dџџџP‹pџџџQ‹•XџџџR‹E”Pp§џџQ‹UєRшƒФ ‹E‹ˆа‹U J‰E ‹E‹ˆа‹U”J‰E”щ—ќџџ‹Eє‹M ‹Qx‰dR‹ЭPшXZ_^[‹Mќ3ЭшФМ;ьш‹х]Уp§џџр(§џџ@ќџџst_resfilterStatex_filt_Q12#о"хюѕxР7вз&ц%ѓ$ $ѕ$FМ(( ёU<F(FЋSKP_Silk_prefilter_FIXМРќ … :ќџџџ      VpsEnc  psEncCtrl xw x шџџџtj аџџџtlag ќџџЈst_res ЌџџџAR1_shp_Q13 ˆџџџpst_res p§џџx_filt_Q12 мџџџtk (§џџИfilterState! XџџџtHarmShapeFIRPacked_Q12 ИџџџtB_Q12  џџџpx |џџџtHarmShapeGain_Q12 Фџџџttmp_32 ”џџџpxw єџџџšP pџџџtTilt_Q14 dџџџtLF_shp_Q14ђ0F@#$1€(2€3>€9?€?@€KA€gC€pD€}H€лI€J€K€(L€;M€NN€aQ€S€ЧU€кX€ёY€Z€([€i\€w]€Хc€эd€ e€>f€@g€Zj€”l€Іm€Иn€Нp€Ьq€ X \ Ј Ќ З Л Ц Ъ е й ф ш ˜ œ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_prefilter_fix.c1HarmShapeGain_Q12 >= 0+0U‹ьь4SVWНЬўџџЙMИЬЬЬЬѓЋ‹E‰E˜‹E‹ˆ@‰Mр‹E‹ˆL‰MЄ‹E‹ˆP‰MАЧEјы ‹EјƒР‰Eј‹Eј;E$їƒ} ~d‹E Eр‰Eь‹Eьƒш%џ‹M˜ПAПEЏа‰Uд‹Eьƒш%џ‹M˜ПA‹EСјЏаUд‰Uд‹Eь%џ‹M˜ПAПEЏаUд‰UдыЧEд‹EЄСј‹MСљЏС‹UЄтџџ‹MСљЏбСњТ‹UАСњПMЏб‹MАсџџПuЏЮСљбТ‰EМ‹EЄСјПMЏС‹UЄтџџПMЏбСњТ‰EШ‹EШСр‹Mј‹U ‹ Š+Ш‰MЄ‹EМСр‹MЄ+Ш‰MА‹Eрƒш%џ‰Eр‹EАСј ƒРбј=џ~ Ч…аўџџџы<‹MАСљ ƒСбљљ€џџ} Ч…Ьўџџ€џџы‹UАСњ ƒТбњ‰•Ьўџџ‹…Ьўџџ‰…аўџџ‹Mр‹U˜f‹…аўџџf‰J‹EА+EдСј ƒРбј=џ~ Ч…аўџџџыB‹MА+MдСљ ƒСбљљ€џџ} Ч…Ьўџџ€џџы‹UА+UдСњ ƒТбњ‰•Ьўџџ‹…Ьўџџ‰…аўџџ‹Mј‹Uf‹…аўџџf‰Jщє§џџ‹E‹MЄ‰ˆL‹E‹MА‰ˆP‹E‹Mр‰ˆ@_^[‹х]Уѕ$ˆ4  ёЮ:ˆІSKP_Silk_prefilt_FIX4Рt € šP  tst_res_Q12 xw! tHarmShapeFIRPacked_Q12 tTilt_Q14 tLF_shp_Q14  tlag $tlength Шџџџtn_Tilt_Q10 дџџџtn_LTP_Q12 рџџџtLTP_shp_buf_idx ьџџџtidx АџџџtsLF_MA_shp_Q12 ˜џџџLTP_shp_buf јџџџti Мџџџtn_LF_Q10 ЄџџџtsLF_AR_shp_Q12ђрˆ@д~€…€$†€0‡€<ˆ€HŠ€f‹€lŽ€u€‘€В‘€Ю’€а“€з–€$—€I™€]š€kœ€y€фŸ€X €]Ѓ€iЄ€uЅ€І€ 7X7 \7 7 7 VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SP.textFрМvв›ЬьФ.debug$SШLЧ Ы $LN17($LN16/$LN15;$LN18$LN19ќ _memset 8 .rdata˜z\uzH.dataФŸ—H.rdata.чх60Уж х  .rtc$TMZЬ.L. .rtc$IMZ žz]= T .text ˆ€€ЄГсЛ5`.debug$S № ўRƒшc .debug$T \y_SKP_Silk_prefilter_FIX_SKP_Silk_MA_Prediction_Q13__CrtDbgReportW??_C@_1JI@JCPGDBFM@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_prefilter_FIX@@9@9??_C@_1CO@MKGFOLPD@?$AAH?$AAa?$AAr?$AAm?$AAS?$AAh?$AAa?$AAp?$AAe?$AAG?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA2?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_prefilt_FIX/1879 1273638393 100666 26181 ` L%љ-ъKќVЅ.drectveAм .debug$STq@B.rdata ­@0@.text9Й P`.debug$Sрђв@B.rtc$TMZ@0@.rtc$IMZ@0@.textœ М P`.debug$SXф<@B.text—n" P`.debug$S A"M% @B.textаЇ%w5% P`.debug$Slщ6U>@B.rdata„c?@@@.dataч?@0Р.rdata.ы?@0@.textG@ P`.debug$Sф`@DA@B.textGvA P`.debug$SрНAB@B.textGЯB P`.debug$SфCњC@B.textN,D P`.debug$SрzDZE@B.textGŒE P`.debug$SргEГF@B.text8хFI P`.debug$Sд‹I_L@B.text_ѕLTM P`.debug$SєrMfN@B.textр˜N P`.debug$SЌxO$Q@B.textяVQER P`.debug$S”‹RT @B.textyЁTU P`.debug$S@.UnV@B.debug$T\ V@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёyLJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_PLC.obj:<!ovovMicrosoft (R) Optimizing Compilerэ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_PLC.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёt dHARM_ATT_Q15% dPLC_RAND_ATTENUATE_V_Q15& dPLC_RAND_ATTENUATE_UV_Q15"@SA_Method"SA_ParameterДSKP_Silk_decoder_stateОSKP_Silk_decoder_controlУSKP_Silk_PLC_struct!wchar_tгSKP_Silk_CNG_struct"SA_AttrTargetsSKP_Silk_NLSF_CBS usize_t!ЧSKP_Silk_range_coder_state!ЧSKP_Silk_range_coder_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structУSKP_Silk_PLC_structгSKP_Silk_CNG_structДSKP_Silk_decoder_stateОSKP_Silk_decoder_control|SKP_Silk_NLSF_CB_structєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlїˆ0|Дћ<э Ÿт;ЊMX9’Џ‹ц+7 @#nŽи,ˆ{„(yFiдz<G;1=1ѓч j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 308 - ^ = $23 $T0 312 - ^ = $24 $T0 316 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 3444 - ^ = $23 $T0 3448 - ^ = $24 $T0 3452 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 296 - ^ = $23 $T0 300 - ^ = $24 $T0 304 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 232 - ^ = $23 $T0 236 - ^ = $24 $T0 240 - ^ = ˜ œ Г З к о И~šyšyffИ~3sU‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E‹ˆр+бљ‹U‰Š 7_^[‹х]Уѕ$9РЦ ёn892ЖSKP_Silk_PLC_ResetРР € ­psDecђ09$'€(€2)€ X \ А Д U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E‹M‹м+;‘d7t‹EPшƒФ‹E‹M‹‘м+‰d7ƒ}t‹EP‹MQ‹U R‹EPшƒФы‹EP‹MQ‹U R‹EPшƒФ_^[ФР;ьш‹х]У7g6-”&ѕ$œРЦ ёЕ2œˆбSKP_Silk_PLCРР € ­psDec  ЙpsDecCtrl signal tlength tlostђ`œ T2€4€25€>6€P9€V=€n>€pB€ˆD€ %X% \% ј% ќ% U‹ьь0SVWНаўџџЙLИЬЬЬЬѓЋ‹E 7‰EШ‹E‹M ‹‘Є‰l7ЧEј‹E ƒИЄ…ОЧEды ‹EдƒР‰Eд‹E‹MдЏˆф+‹U ;J ЧEьЧEры ‹EрƒР‰Eрƒ}р}И+EдkРEр‹M ПTAlUь‰Uьыг‹Eь;Eј~C‹Eь‰Eјj И+EдПШkЩ‹U DJlP‹MШƒСQшƒФ И+Eд‹M ‹Ст‹EШ‰щQџџџj j‹EШƒРPшƒФ ‹EШf‹Mјf‰H}јЭ,}kЧEА4Гƒ}ј~ ‹Eј‰…аўџџы Ч…аўџџ‹EА™їНаўџџ‰EМЧEры ‹EрƒР‰Eрƒ}р}"‹Eр‹MШПTAПEМЏаСњ ‹Mр‹EШf‰THыЯыr}јЭ<~iЧE˜@3ƒ}ј~ ‹Eј‰…аўџџы Ч…аўџџ‹E˜™їНаўџџ‰EЄЧEры ‹EрƒР‰Eрƒ}р}"‹Eр‹MШПTAПEЄЏаСњ‹Mр‹EШf‰THыЯы(‹EПˆм+kЩСс‹UШ‰ j j‹EШƒРPшƒФ ‹E‹ˆш+бсQ‹U ƒТLR‹EШƒРPшƒФ ‹EШ‹M f‹‘”f‰PDj‹E ƒРP‹MШƒСHQшƒФ _^[Ф0;ьш‹х]Уш/.1.S/|/&ѕ$—08 ё’9—ƒЛSKP_Silk_PLC_update0Рp € ­psDec  ЙpsDecCtrl signal tlength дџџџtj ШџџџПpsPLC ьџџџttemp_LTP_Gain_Q14 јџџџtLTP_Gain_Q14 рџџџtii1 Мџџџtscale_Q10 АџџџttmpiЅ Єџџџtscale_Q14 ˜џџџttmpђ8—$,O€T€)W€;X€BY€R[€}\€„]€œ^€И_€К`€Тa€Шd€яf€h€ k€l€(p€1t€8u€`v€xw€˜x€šy€Ѕ}€Ќ~€д€ь€€ €ƒ€„€%…€8‰€ZŠ€k€ƒŽ€ -X- \- T- X- •- ™- д- и- U‹ььp SVWНђџџЙ\ИЬЬЬЬѓЋЁ3Х‰Eќ‹E 7‰…tѓџџ‹E‹ˆр+СсQ‹U‹‚р+‹M”R‹EPшƒФ hp§‹E‹ˆш+Q‹•tѓџџƒТRшƒФ …ќџџ‰…ќћџџЧEмы ‹EмƒР‰Eмƒ}мьЧEєы ‹EєƒР‰Eє‹E‹Mє;ˆф+Ћ‹E‹MмЏˆф+Mє‹U‹„Š8Сј‹Mм‹•tѓџџПLŠHЏС‹U‹MмЏŠф+Mє‹U‹ŒŠ8сџџ‹Uм‹ЕtѓџџПT–HЏЪСљС‹M‹UмЏ‘ф+Uє‹Mм‹Еtѓџџ‹LŽHСљƒСбљ‹uЏŒ–8ССј ‹Uє‹ќћџџf‰Qщ:џџџ‹E‹ˆф+‹•ќћџџJ‰…ќћџџщџџџ‹E‹ˆф+Q•ќџџR…€ћџџPhћџџQшƒФ‹E‹ˆф+Q‹U‹‚ф+ŒEќџџQ•tћџџR…\ћџџPшƒФ‹…hћџџ‹tћџџгј‹•hћџџ‹tћџџгњ;Т}/‹E‹ˆф+kЩщ€QjшƒФ‹U„‚8‰…Pћџџы*‹E‹ˆр+щ€QjшƒФ‹U„‚8‰…Pћџџ‹…tѓџџƒР‰Eа‹…tѓџџf‹H8f‰№ћџџ‹E‹ˆh7QjшƒФПE‰•Аћџџ‹EƒИl7u$‹E‹ˆh7QjшƒФПE‰•Єћџџы"‹E‹ˆh7QjшƒФПE‰•Єћџџ‹EƒИh7…3И@f‰…№ћџџ‹EƒИl7unЧEєы ‹EєƒР‰Eєƒ}є}‹Eє‹MаПAП…№ћџџ+Тf‰…№ћџџыеЗ…№ћџџPhЭ шƒФf‰…№ћџџП…№ћџџ‹tѓџџПQDЏТСјf‰…№ћџџ‹EƒИl7…‹E‹ˆш+Q‹•tѓџџƒТR…hѓџџPшƒФ ‹…hѓџџPhшƒФ‰…\ѓџџ‹…\ѓџџPh@шƒФ‰…\ѓџџ‹…\ѓџџСр‰…\ѓџџ‹…\ѓџџСјПЄћџџЏС‹•\ѓџџтџџПЄћџџЏбСњТСј‰…Єћџџ‹…tѓџџ‹H4‰Мћџџ‹…tѓџџ‹СљƒСбљ‰˜ћџџ‹E‹M‹‘р+‰И+…Аѓџџ‰…ЄѓџџЧEмы ‹EмƒР‰Eмƒ}мC‹E‹ˆИ++˜ћџџ‹U„Š ‰…DћџџЧEєы ‹EєƒР‰Eє‹E‹Mє;ˆф+‹…МћџџiР5„Г kc6‰…Мћџџ‹…МћџџСјƒр‰…Œћџџ‹…Dћџџ‹Сљ‹UаПЏШ‹•Dћџџ‹%џџ‹UаПЏТСјШ‰€ѓџџ‹…Dћџџ‹HќСљ‹UаПBЏШ‹•Dћџџ‹Bќ%џџ‹UаПRЏТСј…€ѓџџС‰…€ѓџџ‹…Dћџџ‹HјСљ‹UаПBЏШ‹•Dћџџ‹Bј%џџ‹UаПRЏТСј…€ѓџџС‰…€ѓџџ‹…Dћџџ‹HєСљ‹UаПBЏШ‹•Dћџџ‹Bє%џџ‹UаПRЏТСј…€ѓџџС‰…€ѓџџ‹…Dћџџ‹H№Сљ‹UаПBЏШ‹•Dћџџ‹B№%џџ‹UаПRЏТСј…€ѓџџС‰…€ѓџџ‹…DћџџƒР‰…Dћџџ‹…Œћџџ‹Pћџџ‹СњП…№ћџџЏа‹Œћџџ‹…Pћџџ‹ ˆсџџП…№ћџџЏШСљбСт‰•˜ѓџџ‹…€ѓџџСјƒРбј…˜ѓџџ‰…˜ѓџџ‹…˜ѓџџСр‹M‹‘И+‹M‰„‘‹E‹ˆИ+ƒС‹U‰ŠИ+‹Eє‹Єѓџџ‹•˜ѓџџ‰щб§џџ‹E‹ˆф+‹•ЄѓџџЉ…ЄѓџџЧEшы ‹EшƒР‰Eшƒ}ш}#П…Аћџџ‹Mш‹UаП JЏССј‹Uш‹Mаf‰QыЮП…№ћџџПЄћџџЏССјf‰…№ћџџ‹…tѓџџ‹СљiЩ‹•tѓџџ‹%џџiРСјШ‹•tѓџџ ‹…tѓџџ‰‹EПˆм+kЩСсQ‹•tѓџџ‹PшƒФ‹tѓџџ‰‹…tѓџџ‹СљƒСбљ‰˜ћџџщЊќџџ…Аѓџџ‰…Єѓџџ‹E‹ˆш+бсQ‹•tѓџџƒТR…ШћџџPшƒФ ‹EƒИш+ })hj‹ С…QhjшƒФƒјuЬЧEмы ‹EмƒР‰Eмƒ}мЇЧEєы ‹EєƒР‰Eє‹E‹Mє;ˆф+>‹…Шћџџ‰…8ћџџ‹Eє‹M‹”TСњП…8ћџџЏа‹Mє‹E‹ŒˆTсџџП…8ћџџЏШСљቕŒѓџџ‹Eє‹M‹”PСњ‹…8ћџџСјЏа•Œѓџџ‹Mє‹E‹ŒˆPсџџ‹…8ћџџСјЏШСљቕŒѓџџ‹…Ьћџџ‰…8ћџџ‹Eє‹M‹”LСњП…8ћџџЏа‹Mє‹E‹ŒˆLсџџП…8ћџџЏШСљŒѓџџЪ‰Œѓџџ‹Eє‹M‹”HСњ‹…8ћџџСјЏа•Œѓџџ‹Mє‹E‹ŒˆHсџџ‹…8ћџџСјЏШСљቕŒѓџџ‹…аћџџ‰…8ћџџ‹Eє‹M‹”DСњП…8ћџџЏа‹Mє‹E‹ŒˆDсџџП…8ћџџЏШСљŒѓџџЪ‰Œѓџџ‹Eє‹M‹”@Сњ‹…8ћџџСјЏа•Œѓџџ‹Mє‹E‹Œˆ@сџџ‹…8ћџџСјЏШСљቕŒѓџџ‹…дћџџ‰…8ћџџ‹Eє‹M‹”<СњП…8ћџџЏа‹Mє‹E‹Œˆ<сџџП…8ћџџЏШСљŒѓџџЪ‰Œѓџџ‹Eє‹M‹”8Сњ‹…8ћџџСјЏа•Œѓџџ‹Mє‹E‹Œˆ8сџџ‹…8ћџџСјЏШСљቕŒѓџџ‹…ићџџ‰…8ћџџ‹Eє‹M‹”4СњП…8ћџџЏа‹Mє‹E‹Œˆ4сџџП…8ћџџЏШСљŒѓџџЪ‰Œѓџџ‹Eє‹M‹”0Сњ‹…8ћџџСјЏа•Œѓџџ‹Mє‹E‹Œˆ0сџџ‹…8ћџџСјЏШСљቕŒѓџџЧEш ы ‹EшƒР‰Eш‹E‹Mш;ˆш+С‹Eш‹ŒEШћџџ‰8ћџџ‹EєƒР+Eш‹M‹”СњП…8ћџџЏа‹MєƒС+Mш‹E‹ŒˆсџџП…8ћџџЏШСљŒѓџџЪ‰Œѓџџ‹EєƒР+Eш‹M‹”Сњ‹…8ћџџСјЏа•Œѓџџ‹MєƒС+Mш‹E‹Œˆсџџ‹…8ћџџСјЏШСљቕŒѓџџщ$џџџ‹Eє‹Єѓџџ‹•Œѓџџ‹Eє‹Єѓџџ‰‹Eє‹Єѓџџ‹Ст‹Eє‹M‰”XщЇћџџ‹E‹ˆф+‹•ЄѓџџЉ…Єѓџџj@‹E‹ˆф+‹U„ŠP‹MСQшƒФ щFћџџЧEєы ‹EєƒР‰Eє‹E‹Mє;ˆр+x‹Eє‹Œ…АѓџџСљ‹•tѓџџПBTЏШ‹Uє‹„•Аѓџџ%џџ‹•tѓџџПRTЏТСјШ‹…tѓџџ‹PTСњƒТбњ‹EєЏ”…АѓџџЪСљ ƒСбљљџ~Ч…”ђџџџщъ‹Mє‹”АѓџџСњ‹…tѓџџПHTЏб‹Eє‹Œ…Аѓџџсџџ‹…tѓџџП@TЏШСљб‹tѓџџ‹ATСјƒРбј‹MєЏ„АѓџџаСњ ƒТбњњ€џџ} Ч…ђџџ€џџыh‹Uє‹„•АѓџџСј‹tѓџџПQTЏТ‹Mє‹”Аѓџџтџџ‹tѓџџПITЏбСњТ‹•tѓџџ‹JTСљƒСбљ‹UєЏŒ•АѓџџССј ƒРбј‰…ђџџ‹…ђџџ‰…”ђџџ‹Mє‹Uf‹…”ђџџf‰Jщmўџџ‹…tѓџџ‹Мћџџ‰H4‹…tѓџџf‹№ћџџf‰H8ЧEєы ‹EєƒР‰Eєƒ}є}‹Eє‹M ‹•˜ћџџ‰ырR‹ЭPшXZ_^[‹Mќ3ЭшФp ;ьш‹х]УIќџџРШћџџ €ћџџtћџџhћџџ\ћџџАѓџџ€hѓџџinvGain_Q30sig_Q10energy2energy1shift2shift1A_Q12_tmpexc_bufQa/‚PНOюO+hWh˜ZЃ ЦZб ъZѕ ioСNеaяvКa/"M*I6E=A /ј@§S R&(?4>@=L<X;d:p9|8ˆ7ѕ$аp Њ( ёД:а(аЛSKP_Silk_PLC_concealp РА … :ќџџџ           ­psDec  ЙpsDecCtrl signal tlength шџџџtj аџџџB_Q14 ќћџџexc_buf_ptr ˜ћџџtlag hћџџtenergy1 €ћџџtshift1 Pћџџtrand_ptr Єѓџџtsig_Q10_ptr №ћџџrand_scale_Q14 АѓџџЎsig_Q10 мџџџtk 8ћџџtAtmp ШћџџєA_Q12_tmp Dћџџtpred_lag_ptr tѓџџПpsPLC Аћџџtharm_Gain_Q15 €ѓџџtLTP_pred_Q14 Œћџџtidx Мћџџtrand_seed ˜ѓџџtLPC_exc_Q10 Єћџџtrand_Gain_Q15 tћџџtshift2 єџџџti ќџџexc_buf ŒѓџџtLPC_pred_Q10 \ћџџtenergy2Ѕ hѓџџtinvGain_Q30 \ѓџџtdown_scale_Q30ђxаll–€( €6Ѓ€hІ€‰Њ€•Ћ€БЌ€еЎ€{Џ€€А€˜Б€Г€ФД€ѕЖ€И€BЙ€DЛ€nП€zР€‹У€­Ф€ЙХ€лЦ€нЧ€џЫ€Ь€Я€'а€?б€Yв€[г€w䈕и€Ѕл€Шн€то€ќп€ с€Bх€Qц€gч€yь€…э€Ёя€Р№€фё€ћђ€ ѕ€Bі€ї€Рј€џљ€>њ€M§€–ў€А€Ь€с€ѓ€ј€ €( €I €K €f€Ÿ€Щ€п€ф€№€€J€f€Š€– €и!€$ "€0 #€x $€Ф %€а &€ '€d (€p )€И *€ +€ ,€X -€Є .€Ш /€и 0€, 1€„ 2€‰ 5€Ї 8€У 9€Ш :€р <€ =€ @€1 A€ЄB€ЉG€ИH€ЩI€сJ€№K€ђL€ 6X6 \6 І> Њ> Е= Й= Ф< Ш< г; з; т: ц: ё9 ѕ9 8 8 7 7 ? "? -@ 1@ Њ6 Ў6 є6 ј6 j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.c–psDec->LPC_order >= 10U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФ ёq1G@.SKP_min_intФР € ta  tbђ0G`$з€и€@й€ ZXZ \Z ДZ ИZ U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФ ёp0G@.SKP_min_32ФР € ta  tbђ0G`$п€р€@с€ aXa \a Аa Дa U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E ~ ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФ ёq1G@.SKP_max_intФР € ta  tbђ0G`$щ€ъ€@ы€ hXh \h Дh Иh U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋПEПM ;С~ ПU‰•<џџџы ПE ‰…<џџџf‹…<џџџ_^[‹х]Уѕ$NФ ёp0NGЪSKP_max_16ФР € a  bђ0N`$э€ю€Gя€ oXo \o Аo Дo U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E ~ ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФ ёp0G@.SKP_max_32ФР € ta  tbђ0G`$ё€ђ€@ѓ€ vXv \v Аv Дv U‹ьь$SVWНмўџџЙIИЬЬЬЬѓЋ‹E 7‰Eд‹EƒИh7t-‹EP‹MQ‹UдƒТ@R‹EдƒР88ЛSKP_Silk_PLC_glue_frames$Рd €     ­psDec  ЙpsDecCtrl signal tlength дџџџПpsPLC рџџџtenergy јџџџti ьџџџtenergy_shiftљй Шџџџtfrac_Q24 МџџџtLZ Єџџџtslope_Q12 Аџџџtgain_Q12ђ№8фU€Y€)[€5]€S_€]`€ba€rc€Šf€•g€Ўh€Йi€Ъm€йq€ыr€єs€t€"v€Mx€\y€k{€…|€ }€Љ~€а€в‚€м…€ }X} \} ž Ђ ­~ Б~ М€ Р€ Ы Я |} €} ф} ш} U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E%џџt‹EСјPшƒФыыЗEPшƒФƒР_^[ФР;ьш‹х]У0AW&ѕ$_РЦ ёi4_KSKP_Silk_CLZ32РР € tin32ђH_<p€r€(s€9t€;u€Kw€ ˆXˆ \ˆ Ќˆ Аˆ U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјПE…Рu ИщЂПE%џt0ПE%№tf‹EfСј f‰Eы‹EјƒР‰Eјf‹EfСјf‰Eы+ПE%№џt‹EјƒР‰Eјf‹EfСјf‰Eы ‹EјƒР ‰EјПEƒр tПEƒрt‹Eјы%ы‹EјƒРыыПEƒрt ‹EјƒРыы‹EјƒР_^[‹х]Уѕ$рЬ  ё{4рй SKP_Silk_CLZ16ЬР € in16 јџџџtout32ђ№рфL€M€%N€-O€7R€BS€MT€YU€[V€dW€pY€rZ€}[€†\€’]€”^€b€Іc€Џd€Дe€Жf€Оg€Рh€Щi€бj€гk€йm€ X \ М Р U‹ььфSVWНџџџЙ9ИЬЬЬЬѓЋƒ}3РыvEрPMьQ‹URшƒФ ‹Eьƒрt ЧEј€ыЧEј†Д‹Mьбљ‹Eјгј‰Eј‹EјСјПMрiЩеПбЏТ‹MјсџџПUрiвеПвЏЪСљMјШ‰Mј‹EјR‹ЭPшXZ_^[Фф;ьш‹х]Уьџџџрџџџfrac_Q7lz5ЁЄšЉSЛ&Ш™д˜р—ѕ$яфu  ёй:яяSKP_Silk_SQRT_APPROXфР$ €     tx рџџџtfrac_Q7 ьџџџtlz јџџџtyђxяј lK€N€$O€(R€<T€DU€KV€MW€T[€a^€›`€ža€ –X– \– š˜ ž˜ Љ— ­— И™ М™ Чš Ыš – – U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋ‹EPшƒФ‰Eј‹E ‹Mј‰ƒ}ј}Й+Mј‹Eгјƒр‹M‰ы‹Mјƒщ‹Eгрƒр‹M‰_^[ФЬ;ьш‹х]У#ˆq&ѕ$yЬ   ёІ7yeSKP_Silk_CLZ_FRACЬР € tin  tlz tfrac_Q7 јџџџtleadingZerosђXyјL;€>€-?€5@€;A€PB€RC€eE€ ЁXЁ \Ё шЁ ьЁ VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$ST^Љџ.rdata Гžр,.text9 “TчUйbŽ.debug$Sр0P „G .rtc$TMZЬ.L[r .rtc$IMZžz]˜ .textœ~ŠёbЎЅ7.debug$S X)тЋhЇ Е .text —2ЪяGЈs%.debug$S    ќ,Ф _memset _memcpy .text а%ПЉ€“ѕ.debug$S l В…2й $LN55Œ $LN54˜ $LN53  $LN52Ј $LN51А $LN50З $LN49О $LN48Ш $LN56, $LN57$ я .rdata„PYЦџ.dataxО+˜К.rdata.hЪIзх| œ Д Щм ї .textGиьиоп„[Ќ.debug$SфкJаˆ .textGиьио^7єХ.debug$SрТ•‚v .textGСв UdЈЏ.debug$SфПVf' .textNBњi0Gв­Е.debug$SрЖЂж4 .textGСв Uмtі€.debug$Sрe=њx@ .text8 eŒ8gwU;.debug$SдУ{ЂL $LN18$$LN17+$LN19 $LN20.text_йIѕ=vЄёC.debug$Sє:Яq‘f .textр}BИ#u‘ћ.debug$S ЌбЛ5сv .text!яR-ЄTŒІђ.debug$S"” !їz>}†! $LN7ф!$LN6ь!$LN8Ь!$LN9Ф!.text#yУ‹f&‚нm.debug$S$@#Stёœ# .debug$T%\Џ_HARM_ATT_Q15_PLC_RAND_ATTENUATE_V_Q15_PLC_RAND_ATTENUATE_UV_Q15_SKP_Silk_PLC_Reset__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_PLC__RTC_CheckEsp_SKP_Silk_PLC_update_SKP_Silk_PLC_conceal__CrtDbgReportW??_C@_1IE@DCLACDLB@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_PLC_conceal@@9@9??_C@_1CO@CLMJDNHM@?$AAp?$AAs?$AAD?$AAe?$AAc?$AA?9?$AA?$DO?$AAL?$AAP?$AAC?$AA_?$AAo?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA1?$AA0?$AA?$AA@_SKP_Silk_LPC_inverse_pred_gain_SKP_Silk_sum_sqr_shift_SKP_Silk_bwexpander___security_cookie@__security_check_cookie@4@_RTC_CheckStackVars@8_SKP_min_int_SKP_min_32_SKP_max_int_SKP_max_16_SKP_max_32_SKP_Silk_PLC_glue_frames_SKP_Silk_CLZ32_SKP_Silk_CLZ16_SKP_Silk_SQRT_APPROX_SKP_Silk_CLZ_FRAC /1909 1273638393 100666 5074 ` Lљ-ъKѓ.drectveAД .debug$S˜ѕ @B.rdataІё@@@.debug$T\—@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё“YJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_pitch_est_tables.obj:<!ovovMicrosoft (R) Optimizing Compilerњ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_pitch_est_tables.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё&$ зSKP_Silk_CB_lags_stage2$ еSKP_Silk_CB_lags_stage3& йSKP_Silk_Lag_range_stage3& fSKP_Silk_cbk_sizes_stage3( fSKP_Silk_cbk_offsets_stage3"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tєАprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЈяЉЌŸ"+ќqЅ’СмсU#[Т)oњ mњюQл'fQЊWb!Ј?~NЯзѕь”[иC-д2ўрм…ьЊ6огЙОџ„w„љ”m–˜ЊдЉ-Г‘МКGƒQйЛyјs‡Іko‹’_&f№ЗbЙщ&х‹КЦxJх<ˆdŒ:Њ†O“"Мƒ–ьє9v[7Œ{њnс%к™`khHPTЊŒ3їГГјїЂЬXўrToрџЊtЩфАз"Ќшš>šљ%?dl*6SК@Ѓн3рorЇ—œy’Џ‹ц+7 @#nŽи,ˆ{Ф(yFiдz<G;1=1ѓj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_common_pitch_est_defines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_pitch_est_defines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_pitch_est_tables.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hА Д ж к ќ  $ ( L P џџџџџџџџџџџџїџљџњџћџћџќџќџ§џ§џўџўџўџџџџџџџ§џўџўџўџџџџџџџџџџџџџџџџџџџџџџџџџўџўџўџ џџџџџџўџўџўџ§џ§џќџќџћџћџњџљџўџџџџџўџќџџџџџќџ їџ §џўџљџ " VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S˜ [ U.rdataІ8ЇƒX6hQ˜l .debug$T\‰_SKP_Silk_CB_lags_stage2_SKP_Silk_CB_lags_stage3_SKP_Silk_Lag_range_stage3_SKP_Silk_cbk_sizes_stage3_SKP_Silk_cbk_offsets_stage3/1952 1273638393 100666 49528 ` LBљ-ъKЙ’*.drectveAd .debug$S8Ѕ н @B.text­Aю P`.debug$SЄІ@B.rtc$TMZим@0@.rtc$IMZцъ@0@.text9&є-FО P`.debug$S™M_!@B.rdataч`@0@.rdataЖa@@@.rdataЛa@0@.rdata*гa@0@.rdataЎ§a@@@.rdata>Ћb@@@.rdataющc@@@.rdataзd@@@.rdataЦѕe@@@.rdata|Лf@@@.rdata27g@0@.rdata~ig@@@.rdata4чg@0@.rdata$h@0@.rdata(?h@0@.rdataЎgh@@@.rdatai@@@.rdataі+j@@@.rdata|!k@@@.rdata2k@0@.rdata~Яk@@@.rdata4Ml@0@.rdatal@0@.rdatan™l@@@.rdatanm@@@.rdata um@0@.rdata •m@0@.rdataЄЕm@@@.dataYn@0Р.rdatax]n@@@.text_еn4o P`.debug$SєRoFp@B.textрxp P`.debug$SЌXqs@B.textG6s P`.debug$Sф}sat@B.textG“t P`.debug$SфкtОu@B.textG№u P`.debug$Sр7vw@B.textяIw8x P`.debug$S”~xz @B.texty”z { P`.debug$S@!{a|@B.textд“|g" P`.debug$S,Л€чƒ @B.rdata,U„@0@.rdata„@0@.rdata"›„@0@.dataН„@0Р.textшС„Љ‰4 P`.debug$ShБ‹ @B.rdataH‡@@@.rdataЯ@0@.dataг@0Р.textЄз{ P`.debug$SˆЃ+’@B.debug$T\]’@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё™\J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_pitch_analysis_core.obj:<!ovovMicrosoft (R) Optimizing Compiler§=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_pitch_analysis_core.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё&$ зSKP_Silk_CB_lags_stage2$ еSKP_Silk_CB_lags_stage3& йSKP_Silk_Lag_range_stage3& fSKP_Silk_cbk_sizes_stage3( fSKP_Silk_cbk_offsets_stage3"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tєАprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙxJх<ˆdŒ:Њ†O“"Мƒ– ‹’_&f№ЗbЙщ&х‹К`khHPTЊŒ3їГГјїЂЬXўrToрџЊtЩфАз"Ќшš>šљ%?dl*Џ˜ŸЧ0o{я RUxdуЎ|’Џ‹ц+7 @#nŽи,ˆ{Ч(yFiдz<G;1=1ѓŸj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_pitch_est_defines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_common_pitch_est_defines.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_pitch_analysis_core.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 232 - ^ = $23 $T0 236 - ^ = $24 $T0 240 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 21780 - ^ = $23 $T0 21784 - ^ = $24 $T0 21788 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 428 - ^ = $23 $T0 432 - ^ = $24 $T0 436 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 440 - ^ = $23 $T0 444 - ^ = $24 $T0 448 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 220 - ^ = $23 $T0 224 - ^ = $24 $T0 228 - ^ = И М о т   ,< 0< T; X; U‹ььфSVWНџџџЙ9ИЬЬЬЬѓЋПEбр‰Eр‹EрE‰Eјƒ}u9ЧEьы ‹EьƒР‰Eьƒ}ь}‹EьkР‹M П”HUј‹Eь‹M‰ывы7ЧEьы ‹EьƒР‰Eьƒ}ь}‹EьkРD‹M П”HUј‹Eь‹M‰ыв_^[‹х]У[”ѕ$­ф  ёщ;­ІSKP_Silk_decode_pitchфР$ € tlagIndex  tcontourIndex tpitch_lags tFs_kHz јџџџtlag рџџџtmin_lag ьџџџtiђx­h lD€G€'J€0K€6M€NN€kO€mP€oQ€‡R€ЄS€ІU€ X \ , 0 U‹ьИUшSVWН№ЊџџЙDИЬЬЬЬѓЋЁ3Х‰Eќƒ}(t7ƒ}( t1ƒ}(t+ƒ}(t%hjЁƒРPhjшƒФƒјuЬƒ},}%hjЁƒР PhjшƒФƒјuЬƒ},~%hjЁƒР!PhjшƒФƒјuЬƒ} | } ~%hjЁƒР#PhjшƒФƒјuЬƒ}$| }$€~%hjЁƒР$PhjшƒФƒјuЬ‹E(kР(‰…­џџЧ…ьЌџџ Ч…јЌџџ@‹…­џџСј‰…дЌџџ‹…ьЌџџСј‰…МЌџџ‹…јЌџџСј‰…ШЌџџ‹E(бр‰…АЌџџЧ…˜ЌџџЧ…ЄЌџџ‹E(kР‰…ŒЌџџЧ…tЌџџHЧ…€Ќџџhшj…јХџџPшƒФ ƒ}( u>jj…ШЋџџPшƒФ …HЭџџPhр‹MQ•ШЋџџR…8ќџџPшƒФщƒ}(…ƒƒ},u=jj…ЭџџPшƒФ ‹…јЌџџPHЭџџQ•8ќџџR…ЭџџP‹MQшƒФы;jj…ЭџџPшƒФ ‹…јЌџџPHЭџџQ•8ќџџR…ЭџџP‹MQшƒФщƒ}(u4jj…ЭџџPшƒФ hР‹EPЭџџQ•8ќџџRшƒФыGƒ}(t%hjЁƒРSPhjшƒФƒјuЬ‹…јЌџџбрP‹MQ•8ќџџRшƒФ ƒ},u@jj…ЭџџPшƒФ ‹…ьЌџџPHЭџџQ•PњџџR…ЭџџP8ќџџQшƒФы>jj…ЭџџPшƒФ ‹…ьЌџџPHЭџџQ•PњџџR…ЭџџP8ќџџQшƒФ‹…ьЌџџƒш‰… Эџџы‹… Эџџƒш‰… ЭџџƒН ЭџџŽЎ‹… ЭџџПŒEPњџџ‹• ЭџџП„UNњџџШљџ~ Ч…Ћџџџыb‹ ЭџџП”MPњџџ‹… ЭџџПŒENњџџбњ€џџ} Ч…ќЊџџ€џџы$‹• ЭџџП„UPњџџ‹ ЭџџП”MNњџџТ‰…ќЊџџ‹…ќЊџџ‰…Ћџџ‹ Эџџf‹•Ћџџf‰”MPњџџщ6џџџ‹…ьЌџџбјP‹ШЌџџQшƒФ‰…рЌџџ‹…рЌџџP‹ьЌџџQ•PњџџRшƒФ ‰…АХџџƒНАХџџ~OЧ… Эџџы‹… ЭџџƒР‰… Эџџ‹… Эџџ;…ьЌџџ}&‹… ЭџџП”EPњџџ‹АХџџгњ‹… Эџџf‰”EPњџџыН‹…ьЌџџбјŒEPњџџ‰ьХџџЧ…Эџџы‹…ЭџџƒР‰…ЭџџƒНЭџџs‹…ьХџџPњџџ;Сs&hj‹ƒТ}RhjшƒФƒјuЬ‹…ШЌџџ‹ьХџџA‹…ьЌџџŒEPњџџ;бv&hj‹ƒТ~RhjшƒФƒјuЬ‹…˜Ќџџбр‹ьХџџ+Ш‰рХџџ‹…рХџџPњџџ;Сs)hj‹ТƒRhjшƒФƒјuЬ‹…ШЌџџ‹рХџџA‹…ьЌџџŒEPњџџ;бv)hj‹Т„RhjшƒФƒјuЬЧ…ШХџџЧ…дХџџ‹…ШЌџџP‹рХџџQ‹•ьХџџRшƒФ ‰…дХџџ‹…ШЌџџP‹рХџџQ‹•рХџџRшƒФ ‰…ШХџџ‹…ШХџџш%€u@‹ШХџџсшс€t Ч…Ћџџ€ы‹•ШХџџТш‰•Ћџџ‹…Ћџџ‰…ќЊџџы>‹ШХџџЩшс€u Ч…јЊџџџџџы‹•ШХџџТш‰•јЊџџ‹…јЊџџ‰…ќЊџџ‹ќЊџџ‰ШХџџ‹…ШХџџPшƒФ‹ШƒС‹…дХџџ™їљ‰…$УџџН$Уџџџ~ Ч…Ћџџџы0Н$Уџџ€џџ} Ч…ќЊџџ€џџы ‹…$Уџџ‰…ќЊџџ‹ќЊџџ‰Ћџџ‹•ЭџџiвК„јХџџ‹˜Ќџџf‹•Ћџџf‰H‹…˜ЌџџƒР‰…єЬџџы‹…єЬџџƒР‰…єЬџџ‹…єЬџџ;…tЌџџŽ‹…рХџџƒш‰…рХџџ‹…рХџџPњџџ;Сs)hj‹Т•RhjшƒФƒјuЬ‹…ШЌџџ‹рХџџA‹…ьЌџџŒEPњџџ;бv)hj‹Т–RhjшƒФƒјuЬ‹…ШЌџџP‹рХџџQ‹•ьХџџRшƒФ ‰…дХџџ‹…рХџџП‹•рХџџПЏШ‹•ШЌџџ‹…рХџџПP‹…ШЌџџ‹ЕрХџџПFЏа+ЪШХџџ‰ШХџџ‹…ШХџџPшƒФ‹ШƒС‹…дХџџ™їљ‰…$УџџН$Уџџџ~ Ч…Ћџџџы0Н$Уџџ€џџ} Ч…ќЊџџ€џџы ‹…$Уџџ‰…ќЊџџ‹ќЊџџ‰Ћџџ‹•ЭџџiвК„јХџџ‹єЬџџf‹•Ћџџf‰HщQўџџ‹…ШЌџџ‹ьХџџA‰•ьХџџщqћџџ‹…tЌџџ‰… Эџџы‹… Эџџƒш‰… Эџџ‹… Эџџ;…˜ЌџџŒ1‹… ЭџџПŒEјХџџ‹• ЭџџП„UВЧџџШ‰<Уџџ‹…<Уџџбј=џ~ Ч…Ћџџџы6‹<Уџџбљљ€џџ} Ч…ќЊџџ€џџы‹•<Уџџбњ‰•ќЊџџ‹…ќЊџџ‰…Ћџџ‹<Уџџбљ;Ћџџt)hj‹ТЉRhjшƒФƒјuЬ‹…<Уџџбј‰…<Уџџ‹… ЭџџїиСр=џ~ Ч…Ћџџџы<‹ ЭџџїйСсљ€џџ} Ч…ќЊџџ€џџы‹• ЭџџїкСт‰•ќЊџџ‹…ќЊџџ‰…Ћџџ‹ ЭџџїйСс;Ћџџt)hj‹ТЋRhjшƒФƒјuЬ‹…<УџџСј‹ ЭџџїйСсПбЏТ‹<Уџџсџџ‹• ЭџџїкСтПвЏЪСљ<УџџШ‰<УџџН<Уџџџ~ Ч…Ћџџџы0Н<Уџџ€џџ} Ч…ќЊџџ€џџы ‹…<Уџџ‰…ќЊџџ‹ќЊџџ‰Ћџџ‹•<Уџџ;•Ћџџt'hjЁ­PhjшƒФƒјuЬ‹… Эџџf‹<Уџџf‰ŒEјХџџщЎ§џџ‹E,ƒР‰…TУџџƒНTУџџ~'hjЁГPhjшƒФƒјuЬ‹…TУџџP‹tЌџџ+˜ЌџџƒСQ•0ХџџR‹…˜ЌџџŒEјХџџQшƒФ‹…ьЌџџбјŒEPњџџ‰ьХџџ‹…ьЌџџбјP‹ьХџџQ‹•ьХџџRшƒФ ‰…МХџџ‹…МХџџш%€u@‹МХџџсшс€t Ч…Ћџџ€ы‹•МХџџТш‰•Ћџџ‹…Ћџџ‰…ќЊџџы>‹МХџџЩшс€u Ч…јЊџџџџџы‹•МХџџТш‰•јЊџџ‹…јЊџџ‰…ќЊџџ‹ќЊџџ‰МХџџ‹…˜ЌџџПŒEјХџџ‰`УџџП…`УџџП`УџџЏС‰…0Уџџ‹…МХџџСј;…0Уџџ~5jj‹E PшƒФ ‹EЧ‹EЧ‹EЧИщ@‹E СјП`УџџЏС‹U тџџП`УџџЏбСњТ‰…0УџџЧ… Эџџы‹… ЭџџƒР‰… Эџџ‹… Эџџ;…TУџџ}P‹…˜Ќџџ… ЭџџПŒEјХџџ;0Уџџ~$‹… Эџџ‹Œ…0Хџџ˜Ќџџбс‹• Эџџ‰Œ•0Хџџы‹… Эџџ‰…TУџџыы“ƒНTУџџ'hjЁЯPhjшƒФƒјuЬ‹…ЄЌџџƒш‰… Эџџы‹… ЭџџƒР‰… Эџџ‹…€ЌџџƒР9… Эџџ}3Р‹ Эџџf‰„MlУџџыЮЧ… Эџџы‹… ЭџџƒР‰… Эџџ‹… Эџџ;…TУџџ}‹… Эџџ‹Œ…0ХџџКf‰”MlУџџыЧ‹…€ЌџџƒР‰… Эџџы‹… Эџџƒш‰… Эџџ‹… Эџџ;…ЄЌџџ|>‹… ЭџџПŒEjУџџ‹• ЭџџП„UhУџџШ‹• ЭџџП„UlУџџС‹ Эџџf‰„MlУџџыЅЧ…TУџџ‹…ЄЌџџ‰… Эџџы‹… ЭџџƒР‰… Эџџ‹…€ЌџџƒР9… Эџџ}6‹… ЭџџПŒEnУџџ…Щ~"‹…TУџџ‹ Эџџ‰Œ…0Хџџ‹…TУџџƒР‰…TУџџыЊ‹…€ЌџџƒР‰… Эџџы‹… Эџџƒш‰… Эџџ‹… Эџџ;…ЄЌџџ|N‹… ЭџџПŒEjУџџ‹• ЭџџП„UhУџџШ‹• ЭџџП„UfУџџШ‹• ЭџџП„UlУџџС‹ Эџџf‰„MlУџџы•Ч…HУџџ‹…ЄЌџџ‰… Эџџы‹… ЭџџƒР‰… Эџџ‹…€ЌџџƒР9… Эџџ}:‹… ЭџџПŒElУџџ…Щ~&‹… Эџџƒш‹HУџџf‰„MlУџџ‹…HУџџƒР‰…HУџџыІ‹…ШЌџџP‹јЌџџQ•8ќџџRшƒФ ‰…АХџџƒНАХџџ~OЧ… Эџџы‹… ЭџџƒР‰… Эџџ‹… Эџџ;…јЌџџ}&‹… ЭџџП”E8ќџџ‹АХџџгњ‹… Эџџf‰”E8ќџџыНhшj…јХџџPшƒФ ‹…ьЌџџŒE8ќџџ‰ьХџџЧ…Эџџы‹…ЭџџƒР‰…ЭџџƒНЭџџ‹…ьХџџ8ќџџ;Сs)hj‹Т RhjшƒФƒјuЬ‹…ШЌџџ‹ьХџџA‹…јЌџџŒE8ќџџ;бv)hj‹Т RhjшƒФƒјuЬ‹…ШЌџџP‹ьХџџQ‹•ьХџџRшƒФ ‰…˜ХџџЧ…шЬџџы‹…шЬџџƒР‰…шЬџџ‹…шЬџџ;…HУџџ&‹…шЬџџПŒElУџџ‰єЬџџ‹…єЬџџбр‹ьХџџ+Ш‰рХџџ‹…рХџџ8ќџџ;Сs)hj‹ТRhjшƒФƒјuЬ‹…ШЌџџ‹рХџџA‹…јЌџџŒE8ќџџ;бv)hj‹ТRhjшƒФƒјuЬ‹…ШЌџџP‹рХџџQ‹•ьХџџRшƒФ ‰…дХџџ‹…ШЌџџP‹рХџџQ‹•рХџџRшƒФ ‰…ЄХџџƒНдХџџŽ‹…˜Хџџ;…ЄХџџ~‹˜Хџџ‰Ћџџы ‹•ЄХџџ‰•Ћџџ‹…Ћџџ‰…МХџџ‹…дХџџPшƒФ‰…PЌџџ‹…PЌџџƒшƒј~ Ч…Ћџџы2‹PЌџџƒщy Ч…ќЊџџы‹•PЌџџƒъ‰•ќЊџџ‹…ќЊџџ‰…Ћџџ‹Ћџџ‰DЌџџ‹…дХџџ‹DЌџџгрЙ+DЌџџ‹ЕМХџџгўƒЦ™їў‰…$УџџН$Уџџџ~ Ч…Ћџџџы0Н$Уџџ€џџ} Ч…ќЊџџ€џџы ‹…$Уџџ‰…ќЊџџ‹ќЊџџ‰Ћџџ‹•$Уџџ;•Ћџџt'hjЁPhjшƒФƒјuЬ‹…дХџџСјП$УџџЏС‹•дХџџтџџП$УџџЏбСњТ‰…$Уџџ‹…$Уџџ…$Уџџ%€u@‹$Уџџ#$Уџџс€t Ч…Ћџџ€ы‹•$Уџџ•$Уџџ‰•Ћџџ‹…Ћџџ‰…ќЊџџы>‹$Уџџ $Уџџс€u Ч…јЊџџџџџы‹•$Уџџ•$Уџџ‰•јЊџџ‹…јЊџџ‰…ќЊџџ‹ќЊџџ‰$Уџџ‹…$УџџPшƒФ‰…PЌџџ‹…PЌџџƒшƒј~ Ч…Ћџџы2‹PЌџџƒщy Ч…ќЊџџы‹•PЌџџƒъ‰•ќЊџџ‹…ќЊџџ‰…Ћџџ‹Ћџџ‰DЌџџ‹…˜Хџџ;…ЄХџџ}‹˜Хџџ‰Ћџџы ‹•ЄХџџ‰•Ћџџ‹…Ћџџ‰…МХџџ‹…$Уџџ‹DЌџџгрЙ+DЌџџ‹ЕМХџџгўƒЦ™їў‹ЭџџiЩК” јХџџ‹єЬџџf‰Jы‹…ЭџџiРКŒјХџџ3в‹…єЬџџf‰AщЙћџџ‹…ШЌџџ‹ьХџџA‰•ьХџџщвњџџЧ…Тџџ€Ч…„Тџџ€Ч…УџџЧ…єТџџџџџџƒ}~Pƒ}( u‹Eбр™Йїљ‰Eы$ƒ}(u ‹Eбј‰Eыƒ}(u‹E™Йїљ‰E‹EPшƒФ‰…ќЋџџы Ч…ќЋџџ}$џ~ Ч…Ћџџџы*}$€џџ} Ч…ќЊџџ€џџы ‹E$‰…ќЊџџ‹ќЊџџ‰Ћџџ‹U$;•Ћџџt'hjЁAPhjшƒФƒјuЬПE$ПM$ЏССј ‰…фЋџџƒ}(uƒ},~ Ч… Ќџџ ы Ч… ЌџџЧ…Эџџы‹…ЭџџƒР‰…Эџџ‹…Эџџ;…TУџџ7‹…Эџџ‹Œ…0Хџџ‰єЬџџЧ…шЬџџы‹…шЬџџƒР‰…шЬџџ‹…шЬџџ;… ЌџџŠ‹…шЬџџЧ„…œТџџЧ… Эџџы‹… ЭџџƒР‰… ЭџџƒН Эџџ}P‹… ЭџџiРКŒјХџџ‹• Эџџkв‹…шЬџџП”B•єЬџџПQ‹шЬџџ„œТџџ‹•шЬџџ‰„•œТџџы˜щUџџџЧ…lТџџ€Ч… УџџЧ… Эџџы‹… ЭџџƒР‰… Эџџ‹… Эџџ;… Ќџџ}6‹… Эџџ‹Œ…œТџџ;lТџџ~‹… Эџџ‹Œ…œТџџ‰lТџџ‹… Эџџ‰… Уџџы­‹…єЬџџPшƒФ‰…ЌџџНЌџџџ~ Ч…Ћџџџы0НЌџџ€џџ} Ч…ќЊџџ€џџы ‹…Ќџџ‰…ќЊџџ‹ќЊџџ‰Ћџџ‹•Ќџџ;•Ћџџt'hjЁ`PhjшƒФƒјuЬП…ЌџџiРhfСј‹lТџџ+Ш‰xТџџƒ}Žя‹…Ќџџ+…ќЋџџ‰…ЌџџНЌџџџ~ Ч…Ћџџџы0НЌџџ€џџ} Ч…ќЊџџ€џџы ‹…Ќџџ‰…ќЊџџ‹ќЊџџ‰Ћџџ‹•Ќџџ;•Ћџџt'hjЁhPhjшƒФƒјuЬП…ЌџџПЌџџЏССј‰…Ќџџ‹EПiЩhfСљ‰№Ћџџ‹…№ЋџџЏ…Ќџџ‹ЌџџƒС@™їљ‰…№Ћџџ‹…xТџџ+…№Ћџџ‰…xТџџ‹…xТџџ;…„Тџџ~>‹…lТџџ;…фЋџџ~0‹…xТџџ‰…„Тџџ‹…lТџџ‰…Тџџ‹…єЬџџ‰…єТџџ‹… Уџџ‰…УџџщЈќџџƒНєТџџџu5jj‹E PшƒФ ‹EЧ‹EЧ‹EЧИщj ƒ}(Ž~‹…дЌџџP‹­џџQ‹URшƒФ ‰…АХџџƒНАХџџ~^…HЭџџ‰…<ЭџџЧ… Эџџы‹… ЭџџƒР‰… Эџџ‹… Эџџ;…­џџ}'‹… Эџџ‹MПA‹АХџџгњ‹… Эџџ‹<Эџџf‰AыМы ‹E‰…<Эџџ‹…Уџџ‰…УџџНєТџџџ~ Ч…Ћџџџы0НєТџџ€џџ} Ч…ќЊџџ€џџы ‹…єТџџ‰…ќЊџџ‹ќЊџџ‰Ћџџ‹•єТџџ;•Ћџџt'hjЁ—PhjшƒФƒјuЬƒ}( uП…єТџџkРбј‰…єТџџы&ƒ}(u‹…єТџџбр‰…єТџџыП…єТџџkР‰…єТџџ‹…АЌџџ;…ŒЌџџ~^‹єТџџ;АЌџџ~‹•АЌџџ‰•Ћџџы4‹…єТџџ;…ŒЌџџ}‹ŒЌџџ‰ќЊџџы ‹•єТџџ‰•ќЊџџ‹…ќЊџџ‰…Ћџџ‹Ћџџ‰јЊџџы\‹•єТџџ;•ŒЌџџ~‹…ŒЌџџ‰…єЊџџы4‹єТџџ;АЌџџ}‹•АЌџџ‰•№Њџџы ‹…єТџџ‰…№Њџџ‹№Њџџ‰єЊџџ‹•єЊџџ‰•јЊџџ‹…јЊџџ‰…єТџџ‹…АЌџџP‹єТџџƒщQшƒФ‰…шТџџ‹…ŒЌџџP‹єТџџƒСQшƒФ‰…мТџџ‹…єТџџ‰…аТџџЧ…Уџџ‹…ТџџСр …Р})hj‹ СЅQhjшƒФƒјuЬ‹…ТџџСр PшƒФ‹M‰Ч…Тџџ€Ч…Эџџы‹…ЭџџƒР‰…ЭџџƒНЭџџ}.‹…ЭџџkР‹УџџП”H‹…єТџџ P‹•Эџџ‹E ‰ ыК‹E,P‹дЌџџQ‹•шТџџR‹…<ЭџџP­џџQшƒФ‹E,P‹дЌџџQ‹•шТџџR‹…<ЭџџPФЗџџQшƒФЧ…­џџНєТџџџ~ Ч…Ћџџџы0НєТџџ€џџ} Ч…ќЊџџ€џџы ‹…єТџџ‰…ќЊџџ‹ќЊџџ‰Ћџџ‹•єТџџ;•Ћџџt'hjЁВPhjшƒФƒјuЬИЭЬ™їНєТџџ‰…hЌџџ‹E,П E‰,Ќџџ‹E,П E‰8Ќџџ‹…шТџџ‰…єЬџџы‹…єЬџџƒР‰…єЬџџ‹…єЬџџ;…мТџџЊ‹…8Ќџџ‰…шЬџџы‹…шЬџџƒР‰…шЬџџ‹…8Ќџџ…,Ќџџ9…шЬџџaЧ…дХџџЧ…МХџџЧ…Эџџы‹…ЭџџƒР‰…ЭџџƒНЭџџš‹…ЭџџiРЈŒФЗџџ‹•шЬџџkвЪ‹…­џџ‹ СљМХџџ‰МХџџy'hjЁРPhjшƒФƒјuЬ‹…ЭџџiРЈŒ­џџ‹•шЬџџkвЪ‹…­џџ‹ СљдХџџ‰дХџџщJџџџƒНдХџџŽ=‹…дХџџPшƒФ‰…PЌџџ‹…PЌџџƒшƒј ~ Ч…Ћџџ ы2‹PЌџџƒщy Ч…ќЊџџы‹•PЌџџƒъ‰•ќЊџџ‹…ќЊџџ‰…Ћџџ‹Ћџџ‰DЌџџ‹…дХџџ‹DЌџџгрЙ +DЌџџ‹ЕМХџџгўƒЦ™їў‰…lТџџНlТџџџ~ Ч…Ћџџџы0НlТџџ€џџ} Ч…ќЊџџ€џџы ‹…lТџџ‰…ќЊџџ‹ќЊџџ‰Ћџџ‹•Ћџџ‰•lТџџ‹…дХџџСјПlТџџЏС‹•дХџџтџџПlТџџЏбСњТ‰…lТџџНlТџџџџџ~ Ч…lТџџџџџы‹…lТџџСр‰…lТџџ‹…шЬџџƒш‰…\Ќџџ‹…\ЌџџЏ…\Ќџџ‰…\Ќџџ‹…hЌџџЏ…\ЌџџСјЙџ+Ш‰\ЌџџН\Ќџџџ~ Ч…Ћџџџы0Н\Ќџџ€џџ} Ч…ќЊџџ€џџы ‹…\Ќџџ‰…ќЊџџ‹ќЊџџ‰Ћџџ‹•\Ќџџ;•Ћџџt'hjЁеPhjшƒФƒјuЬ‹…lТџџСјП\ЌџџЏС‹•lТџџтџџП\ЌџџЏбСњТбр‰…lТџџы Ч…lТџџ‹…lТџџ;…Тџџ~$‹…lТџџ‰…Тџџ‹…єЬџџ‰…аТџџ‹…шЬџџ‰…Уџџщxќџџ‹…­џџƒР‰…­џџщ5ќџџЧ…Эџџы‹…ЭџџƒР‰…ЭџџƒНЭџџ}+‹…ЭџџkРD‹УџџП”H•аТџџ‹…Эџџ‹M ‰ыН‹…аТџџ+…АЌџџ‹M‰‹E‹Уџџ‰щЏƒНТџџ~‹…Тџџ‰…Ћџџы Ч…Ћџџ‹Ћџџ‰Тџџ‹…ТџџСр PшƒФ‹M‰Ч…Эџџы‹…ЭџџƒР‰…ЭџџƒНЭџџ}+‹…ЭџџkР‹УџџП”H•єТџџ‹…Эџџ‹M ‰ыН‹…єТџџ+…ЄЌџџ‹M‰‹E‹Уџџ‰‹Eƒ8})hj‹ СѓQhjшƒФƒјuЬ3РR‹ЭPшXZ_^[‹Mќ3ЭшФU;ьш‹х]УI 8ќџџРPњџџрHЭџџ-ЭџџјХџџш0Хџџ`lУџџКœТџџ,ФЗџџ  ­џџ  ШЋџџR23crosscorr_st3energies_st3CCd_compd_srchCfilt_statescratch_memsignal_4kHzsignal_8kHz З#ГEВLЎUЊ\ІpЅwЎ€Њ‡І›ЁЂЎЋЊВІЯжЎпЊцІ™ ЎЊІТ•л•”)•Q“f•Ž’Ќ•Ы‘лтЎыЊђІŒ-•X“m•˜’‹кЎ%a‹iЎrЊyІЇ‡ЏЎИЊПІѓƒћЎЊІ<DЎPЊWІŽ{Б{bс;ƒCЎOЊVІ„ŒЎ˜ЊŸІТ{ сx z€ ЎŒ Њ“ І v$ Ў0 Њ7 Іу rъ Ўѕ Њќ І9 n@ ЎK ЊR ІŒ jР {Ў •‹i’ЎЊЄІ%‹•оeцЎђЊљІ'a/Ў;ЊBІe{к]тЎюЊѕІ#Y+Ў7Њ>Іa{„{кОУUЪЎеЊмІТОNQВPЙЎФЊЫІж€QфLыЎіЊ§І›HЂЎ­ЊДІ„•Э%­DДЎПЊЦІљгЬI@QЎ]ЊdІ|сЩѓ-•DœЎЇЊЎІд<х;Ш :Я Ўк Њс І>!О#6#Ў'#Њ.#Іџ#p$сГ$№$2ј$Ў%Њ %І %.%%Ж4%ЕA%ДP%-\%,h%+t%*€%)Œ%(˜%'Є%&А%%М%$Ш%#д%"ѕ$9&U({, ё B9&,9&SKP_Silk_pitch_analysis_coreUРPT … :ќџџџ              signal  tpitch_out tlagIndex tcontourIndex tLTPCorr_Q15 tprevLag  search_thres1_Q16 $search_thres2_Q15 (Fs_kHz ,complexity шЬџџtj АХџџtshift ЄХџџtenergy_basis TУџџtlength_d_srch єТџџtlag „ТџџtCCmax_b xТџџtCCmax_new_b lТџџtCCmax_new дЌџџtsf_length \Ќџџtdiff ,Ќџџtcbk_size ьХџџtarget_ptr єЬџџtd шТџџtstart_lag ьЌџџtframe_length_4kHz DЌџџtlshift Ќџџtdelta_lag_log2_sqr_Q7 фЋџџtcorr_thres_Q15 ШХџџtnormalizer ­џџtframe_length Эџџtk рХџџbasis_ptr <Уџџtsum ЄЌџџtmin_lag_8kHz tЌџџtmax_lag_4kHz №Ћџџtprev_lag_bias_Q15 јХџџјC 0Хџџїd_srch `УџџtCmax 0Уџџtthreshold УџџtCBimax_old ­џџѕcrosscorr_st3 ШЌџџtsf_length_8kHz МЌџџtsf_length_4kHz hЌџџtcontour_bias аТџџtlag_new АЌџџtmin_lag HЭџџіscratch_mem УџџtCBimax €Ќџџtmax_lag_8kHz PЌџџtlz Ќџџtlag_log2_Q7 Pњџџ>signal_4kHz дХџџtcross_corr <Эџџinput_signal_ptr МХџџtenergy ­џџtlag_counter 8Ќџџtcbk_offset мТџџtend_lag ТџџtCCmax ФЗџџѕenergies_st3 ŒЌџџtmax_lag  Ќџџtnb_cbks_stage2  Эџџti ˜Хџџtenergy_target  УџџtCBimax_new ќЋџџtprevLag_log2_Q7 8ќџџsignal_8kHz HУџџtlength_d_comp $Уџџttemp32 јЌџџtframe_length_8kHz ЭџџEfilt_state рЌџџtmax_sum_sq_length lУџџєd_comp œТџџCCC ˜Ќџџtmin_lag_4kHz9Я ШЋџџљR23ђИ 9&h4Ќ f€,ƒ€i†€”‡€П‰€ѓŠ€'€3Ž€=€G€V‘€e’€t“€”€‰•€“–€Ÿ—€Љ˜€Гš€Щ€ЯŸ€тЂ€ Ѓ€Є€І€0Љ€XЊ€ZЌ€mЏ€•А€šБ€ Д€ГЖ€вИ€дЙ€џК€О€!Р€4Т€_У€aХ€tЧ€ŸЫ€ЬЬ€uЭ€zе€˜ж€Лз€Фи€эй€к€р€(с€Pу€†ф€Ьц€тщ€ъ€dь€nэ€xя€›№€Оё€Zѓ€}є€щї€ј€*ћ€cќ€Ќў€Я€ €8 €Є €Љ €О €У €ђ € €  €Ў €D €Œ € € €# €/ €_ €“ €Ј €Э €i €} !€” #€Ѕ $€Е %€О &€Ч '€а (€к +€,€1.€M/€o0€q1€}2€4€5€Б7€т8€ђ9€є:€;€7<€9?€g@€ЃA€ЅC€ЏD€нE€яF€G€I€L€AM€N€P€™Q€ЧR€йS€№T€џV€`€$a€-b€Vc€zd€|j€’l€Ѕm€Эp€q€Os€ru€Ÿv€Гw€Щz€{€K}€n~€‘€ž€€в€ч‚€?ƒ€l„€щ…€†€К‡€Яˆ€'‰€[Š€Ÿ‹€ЁŒ€РŽ€Х€к€п•€щ–€ѓ˜€§™€›€ œ€€%ž€+Ÿ€5 €;Ё€IЃ€[Є€]Ѕ€gЇ€иЈ€ьЋ€јЌ€­€Ў€Б€;В€NГ€{Д€ŒЕ€АЗ€ўИ€Й€Л€М€Н€BО€WП€jР€vТ€xХ€Ц€ Ш€(Ь€2Э€DЮ€СЯ€ла€№б€в€!е€=ж€Iз€Uи€aй€mл€rн€{р€”с€т€Іу€Ац€Кь€кэ€у№€яё€ђ€=ѓ€?є€Aѕ€Jћ€V§€гў€йџ€э€ѓ€€€€ч€€% €1 €; €q €ˆ€’€Ж€т€ф€ €4€>€Л€Э€о€я€ €S !€] "€g #€ %€Х &€ю '€$!(€)!)€6!+€K!-€Ѓ!.€а!/€$"0€X"2€d"3€n"4€p"5€"8€Ž"9€Ё":€О";€;#<€q#=€s#>€}#A€‹#B€—#C€Ѓ#D€Џ#F€Д#G€У#H€Ш#J€ь#K€$L€$M€($N€3$O€8$Q€e$R€|$S€ $T€Щ$U€Ы$V€м$W€ч$Y€%[€%\€ !X! \! Ў, В, Н+ С+ Ь* а* л) п) ъ( ю( љ' §' & & % % &$ *$ 5# 9# D" H" S- W- b. f. %! )! L! P! *lagIndex >= 0diff == ((diff) > 0x7FFF ? 0x7FFF : ((diff) < ((short)0x8000) ? ((short)0x8000) : (diff)))energy >= 0((CCmax)<<(13)) >= 0lag == ((lag) > 0x7FFF ? 0x7FFF : ((lag) < ((short)0x8000) ? ((short)0x8000) : (lag)))delta_lag_log2_sqr_Q7 == ((delta_lag_log2_sqr_Q7) > 0x7FFF ? 0x7FFF : ((delta_lag_log2_sqr_Q7) < ((short)0x8000) ? ((short)0x8000) : (delta_lag_log2_sqr_Q7)))lag_log2_Q7 == ((lag_log2_Q7) > 0x7FFF ? 0x7FFF : ((lag_log2_Q7) < ((short)0x8000) ? ((short)0x8000) : (lag_log2_Q7)))search_thres2_Q15 == ((search_thres2_Q15) > 0x7FFF ? 0x7FFF : ((search_thres2_Q15) < ((short)0x8000) ? ((short)0x8000) : (search_thres2_Q15)))temp32 == ((temp32) > 0x7FFF ? 0x7FFF : ((temp32) < ((short)0x8000) ? ((short)0x8000) : (temp32)))basis_ptr + sf_length_8kHz <= signal_8kHz + frame_length_8kHzbasis_ptr >= signal_8kHztarget_ptr + sf_length_8kHz <= signal_8kHz + frame_length_8kHztarget_ptr >= signal_8kHzlength_d_srch > 0length_d_srch <= 24sum == ((sum) > 0x7FFF ? 0x7FFF : ((sum) < ((short)0x8000) ? ((short)0x8000) : (sum)))(((int)-i)<<(4)) == (((((int)-i)<<(4))) > 0x7FFF ? 0x7FFF : (((((int)-i)<<(4))) < ((short)0x8000) ? ((short)0x8000) : ((((int)-i)<<(4)))))((sum)>>(1)) == ((((sum)>>(1))) > 0x7FFF ? 0x7FFF : ((((sum)>>(1))) < ((short)0x8000) ? ((short)0x8000) : (((sum)>>(1)))))basis_ptr + sf_length_8kHz <= signal_4kHz + frame_length_4kHzbasis_ptr >= signal_4kHztarget_ptr + sf_length_8kHz <= signal_4kHz + frame_length_4kHztarget_ptr >= signal_4kHzFs_kHz == 8search_thres2_Q15 >= 0 && search_thres2_Q15 <= (1<<15)search_thres1_Q16 >= 0 && search_thres1_Q16 <= (1<<16)complexity <= 2complexity >= 0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_pitch_analysis_core.cfFs_kHz == 8 || Fs_kHz == 12 || Fs_kHz == 16 || Fs_kHz == 24U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E%џџt‹EСјPшƒФыыЗEPшƒФƒР_^[ФР;ьш‹х]У0ХAХWДѕ$_Рѓ ёi4_KSKP_Silk_CLZ32РР € tin32ђH_<p€r€(s€9t€;u€Kw€ ОXО \О ЌО АО U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјПE…Рu ИщЂПE%џt0ПE%№tf‹EfСј f‰Eы‹EјƒР‰Eјf‹EfСјf‰Eы+ПE%№џt‹EјƒР‰Eјf‹EfСјf‰Eы ‹EјƒР ‰EјПEƒр tПEƒрt‹Eјы%ы‹EјƒРыыПEƒрt ‹EјƒРыы‹EјƒР_^[‹х]Уѕ$рЬe ё{4рй SKP_Silk_CLZ16ЬР € in16 јџџџtout32ђ№рфL€M€%N€-O€7R€BS€MT€YU€[V€dW€pY€rZ€}[€†\€’]€”^€b€Іc€Џd€Дe€Жf€Оg€Рh€Щi€бj€гk€йm€ ХXХ \Х МХ РХ U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФз ёq1G@.SKP_min_intФР € ta  tbђ0GH$з€и€@й€ ЬXЬ \Ь ДЬ ИЬ U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E ~ ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФз ёq1G@.SKP_max_intФР € ta  tbђ0GH$щ€ъ€@ы€ гXг \г Дг Иг U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E ~ ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФз ёp0G@.SKP_max_32ФР € ta  tbђ0GH$ё€ђ€@ѓ€ кXк \к Ак Дк U‹ььфSVWНџџџЙ9ИЬЬЬЬѓЋƒ}3РыvEрPMьQ‹URшƒФ ‹Eьƒрt ЧEј€ыЧEј†Д‹Mьбљ‹Eјгј‰Eј‹EјСјПMрiЩеПбЏТ‹MјсџџПUрiвеПвЏЪСљMјШ‰Mј‹EјR‹ЭPшXZ_^[Фф;ьш‹х]Уьџџџрџџџfrac_Q7lz5ьЄхЉЖЛДШфдуртѕ$яф  ёй:яяSKP_Silk_SQRT_APPROXфР$ €     tx рџџџtfrac_Q7 ьџџџtlz јџџџtyђxяP lK€N€$O€(R€<T€DU€KV€MW€T[€a^€›`€ža€ сXс \с šу žу Љт ­т Иф Мф Чх Ых с с U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋ‹EPшƒФ‰Eј‹E ‹Mј‰ƒ}ј}Й+Mј‹Eгјƒр‹M‰ы‹Mјƒщ‹Eгрƒр‹M‰_^[ФЬ;ьш‹х]У#ОqДѕ$yЬ e ёІ7yeSKP_Silk_CLZ_FRACЬР € tin  tlz tfrac_Q7 јџџџtleadingZerosђXyPL;€>€-?€5@€;A€PB€RC€eE€ ьXь \ь шь ьь U‹ььЈSVWНXўџџЙjИЬЬЬЬѓЋЁ3Х‰Eќƒ}}%hjЁƒРPhjшƒФƒјuЬƒ}~%hjЁƒРPhjшƒФƒјuЬ‹EП E‰M ‹EП E‰M”‹EСр‹M A‰UєЧEИы ‹EИƒР‰EИƒ}ИРЧEЌ‹EСр‹MИП”ˆ‰UФы ‹EФƒР‰EФ‹EСр‹MИП”ˆ9UФm‹EEФбр‹Mє+Ш‰Mш‹EP‹MшQ‹UєRшƒФ ‰Eмƒ}Ќ|%hjЁƒРPhjшƒФƒјuЬ‹EЌ‹Mм‰Œ…џџџ‹EЌƒР‰EЌщtџџџ‹EСр‹MИП”ˆ‰Uˆ‹E ‰Eаы ‹EаƒР‰Eа‹E E”9Eав‹EИkРD‹MаП”H+Uˆ‰•|џџџЧEФы ‹EФƒР‰EФƒ}Ф—‹…|џџџEФƒј|&hj‹ ƒС QhjшƒФƒјuЬ‹…|џџџEФ;EЌ|&hj‹ ƒС!QhjшƒФƒјuЬ‹…|џџџEФ‹MИiЩЈM‹UаkвЪ‹UФ‹„…џџџ‰‘щVџџџщџџџ‹E‹MєA‰Uєщ-ўџџR‹ЭPшXZ_^[‹Mќ3ЭшФЈ;ьш‹х]УџџџXscratch_memГ/Ѕ6?ЊFІZЁajЊqІ…;“<йј{/6?ЊFІ{ЏчўяјЊџІњ#,Њ3І‹іЖŸЕЌДИѕФєѕ$дЈI( ёћAд(дёSKP_FIX_P_Ana_calc_corr_st3ЈРш … :ќџџџ    яcross_corr_st3  signal tstart_lag tsf_length tcomplexity Фџџџtj ”џџџtcbk_size єџџџtarget_ptr ˆџџџtdelta шџџџbasis_ptr Иџџџtk џџџћscratch_mem мџџџtcross_corr |џџџtidx Ќџџџtlag_counter  џџџtcbk_offset аџџџtiђ№дhфi€(p€Sq€~s€Œt€šv€Љw€Хx€Ь{€|€}€(~€S€`€€i€nƒ€‚„€Ђ‡€Мˆ€и‰€ Š€@‹€jŒ€o€tŽ€€€…€ ѓXѓ \ѓ ­є Бє Мѕ Рѕ Ыі Яі <ѓ @ѓ idx + j < lag_counteridx + j < 22lag_counter < 22iU‹ььДSVWНLўџџЙmИЬЬЬЬѓЋЁ3Х‰Eќƒ}}%hjЁƒРPhjшƒФƒјuЬƒ}~%hjЁƒРPhjшƒФƒјuЬ‹EП E‰M ‹EП E‰M”‹EСр‹M A‰UєЧEаы ‹EаƒР‰Eаƒ}авЧEЌ‹EСр‹MаП”ˆUбт‹Eє+Т‰Eш‹EP‹MшQ‹UшRшƒФ ‰Eмƒ}м}%hjЁƒРPhjшƒФƒјuЬ‹EЌ‹Mм‰Œ…џџџ‹EЌƒР‰EЌЧEФы ‹EФƒР‰EФ‹EСр‹MаП”ˆ‹EСр‹MаП„ˆ+аƒТ9UФА‹E+EФ‹MшПA‹E+EФ‹MшПAЏа‹Mм+Ъ‰Mмy%hjЁƒРPhjшƒФƒјuЬ‹EФїи‹MшПA‹EФїи‹MшПAЏаUмт€uc‹MФїй‹UшПJ‹MФїй‹UшП JЏС#Eм%€t Ч…Tўџџ€ы$‹UФїк‹EшП P‹UФїк‹EшПPЏЪMм‰Tўџџ‹…Tўџџ‰…Pўџџыa‹MФїй‹UшПJ‹MФїй‹UшП JЏС Eм%€u Ч…Lўџџџџџы$‹UФїк‹EшП P‹UФїк‹EшПPЏЪMм‰Lўџџ‹…Lўџџ‰…Pўџџ‹Pўџџ‰Mмƒ}м}%hjЁƒРPhjшƒФƒјuЬƒ}Ќ|%hjЁƒР PhjшƒФƒјuЬ‹EЌ‹Mм‰Œ…џџџ‹EЌƒР‰EЌщўџџ‹EСр‹MаП”ˆ‰Uˆ‹E ‰EФы ‹EФƒР‰EФ‹E E”9EФ‹EаkРD‹MФП”H+Uˆ‰•|џџџЧEИы ‹EИƒР‰EИƒ}Иу‹…|џџџEИƒј|&hj‹ ƒС+QhjшƒФƒјuЬ‹…|џџџEИ;EЌ|&hj‹ ƒС,QhjшƒФƒјuЬ‹…|џџџEИ‹MаiЩЈM‹UФkвЪ‹UИ‹„…џџџ‰‘‹EаiРЈE‹MФkЩС‹UИлипріФt%hjЁƒР.PhjшƒФƒјuЬщ џџџщЪўџџ‹E‹MєA‰UєщќџџR‹ЭPшXZ_^[‹Mќ3ЭшФД;ьш‹х]У‹џџџџXscratch_memГ/Ѕ6?ЊFІZЁajЊqІ…;“<йї{:ЊІarЌ:ГМЊУІЪ:бкЊсІѕќЊ ІAu­ўЕОЊХІсњщђЊљІLX_hЊoІЂЖБЕОДЬиѕ$шДЛ( ёїCш(шёSKP_FIX_P_Ana_calc_energy_st3ДРє … :ќџџџ    яenergies_st3  signal tstart_lag tsf_length tcomplexity Иџџџtj ”џџџtcbk_size єџџџtarget_ptr ˆџџџtdelta шџџџbasis_ptr аџџџtk џџџћscratch_mem |џџџtidx мџџџtenergy Ќџџџtlag_counter  џџџtcbk_offset Фџџџtiђ0шh#$€(Є€SЅ€~Ї€ŒЈ€šЊ€ЉЋ€ХЌ€ЬЏ€ъА€Б€,В€9Г€BЕ€„З€ЉИ€аЛ€УМ€юН€О€&П€/Р€4Т€HУ€hЦ€‚Ч€žШ€вЩ€Ъ€0Ы€|Ь€Э€†Ю€’Я€—а€ X \ Џ Г О Т Э б 8 < energies_st3[ k ][ i ][ j ] >= 0.0fU‹ььиSVWН(џџџЙ6ИЬЬЬЬѓЋ‹E P‹MQшƒФПа‰Uь}ьџ} ПEьПMьЏСPшƒФК +а‰UјыЧEјЗEPшƒФЙ+ШMј‰Mјƒ}ј}3Рыы‹Eјƒш_^[Фи;ьш‹х]У'&JОjХœДѕ$Єи - ёЭ@ЄнSKP_FIX_P_Ana_find_scalingиР € signal  signal_length sum_sqr_len јџџџtnbits ьџџџtx_maxђxЄh lз€к€4м€=о€[п€]с€dу€~ц€„ч€ˆш€Šщ€ы€ %X% \% % % VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S8 mКb}.text­-ЩqžНЋ.debug$SЄvƒuШ 4.rtc$TMZЬ.LMd .rtc$IMZžz]sŠ .text9&ОѕЖ…yјНЎ.debug$S!ѓМёџ™ $LN271и%$LN270м%$LN269ъ%$LN268ї%$LN267њ%$LN266&$LN265&$LN264 &$LN263&$LN262!&$LN261-&$LN272T%$LN273L%.rdata U№З .rdata ЖњY % .rdata EНvѕ Qn.rdata *ИїЇ‰ .rdata Ўˆw›) .rdata>Ѓ{Вњ.rdataюŠъ ^О.rdataђm‘џˆL .rdataЦЮбПП^.rdata|ё..rdata27z‹A№.rdata~,œ5љ.rdata454uаN .rdata$ŸА&x№ g .rdata(tVЩ‘ .rdataЎ]фџ4 .rdataЮдvНц .rdataі—Йmй а .rdata|Іпƒэ .rdata2ЙšЗ[Џ.rdata~ЋЫ№dL.rdata4ЛдIЪ_memcpy .rdata№;А  # C a _memset .rdata nгUъ\ .rdata!nU–ьF!.rdata" Ž‹ ".rdata# 8w­{#ы .rdata$Єs[цћ$.data%пЈMЖ%.rdata&xѓВв§щ&Об р ћ __chkstk .text'_йIѕ=vЄёC.debug$S(є':Яq‘' .text)р}BИ#u‘ћ.debug$S*Ќ)бЛ5с") .text+Gиьиоп„[Ќ.debug$S,ф+кJаˆ2+ .text-GСв UdЈЏ.debug$S.ф-ПVf?- .text/GСв Uмtі€.debug$S0р/e=њxL/ .text1яR-ЄTŒІђ.debug$S2” 1їz>}X1 $LN7ф1$LN6ь1$LN8Ь1$LN9Ф1.text3yУ‹f&‚нm.debug$S4@3Stёn3 .text5д"pзB8Г.debug$S6, 5uЦуЊ5 $LN20Ш5$LN21М5$LN22Д5.rdata7,”оž7.rdata8bуђi.8.rdata9"QќЛ#‘9.data:чlЊE:.text;ш4ц†СЮ2њ—К.debug$S<h ;Н+ўЄP; $LN30м;$LN31а;$LN32Ш;.rdata=HшЩcжo=.rdata>D>.data?эЎLT?ˆ.text@Є„œИд ‡H#.debug$SAˆ@bMƒ’@ Ў .debug$TB\Ы_SKP_Silk_decode_pitch_SKP_Silk_CB_lags_stage3_SKP_Silk_CB_lags_stage2__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_pitch_analysis_core??_C@_1BO@OIPMDBBP@?$AA?$CK?$AAl?$AAa?$AAg?$AAI?$AAn?$AAd?$AAe?$AAx?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1LG@MEPJGGBF@?$AAd?$AAi?$AAf?$AAf?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAd?$AAi?$AAf?$AAf?$AA?$CJ?$AA?5?$AA?$DO?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?5?$AA?$DP?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF@??_C@_1BI@CKIDDDJK@?$AAe?$AAn?$AAe?$AAr?$AAg?$AAy?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_Silk_cbk_offsets_stage3_SKP_Silk_cbk_sizes_stage3??_C@_1CK@FDHCALM@?$AA?$CI?$AA?$CI?$AAC?$AAC?$AAm?$AAa?$AAx?$AA?$CJ?$AA?$DM?$AA?$DM?$AA?$CI?$AA1?$AA3?$AA?$CJ?$AA?$CJ?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1KO@JGOIALLO@?$AAl?$AAa?$AAg?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAl?$AAa?$AAg?$AA?$CJ?$AA?5?$AA?$DO?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?5?$AA?$DP?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?5@??_C@_1BDO@PNIOJCND@?$AAd?$AAe?$AAl?$AAt?$AAa?$AA_?$AAl?$AAa?$AAg?$AA_?$AAl?$AAo?$AAg?$AA2?$AA_?$AAs?$AAq?$AAr?$AA_?$AAQ?$AA7?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAd?$AAe?$AAl?$AAt?$AAa@??_C@_1OO@ONKNPBO@?$AAl?$AAa?$AAg?$AA_?$AAl?$AAo?$AAg?$AA2?$AA_?$AAQ?$AA7?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAl?$AAa?$AAg?$AA_?$AAl?$AAo?$AAg?$AA2?$AA_?$AAQ?$AA7?$AA?$CJ?$AA?5?$AA?$DO?$AA?5@??_C@_1BBO@IAGIEJDJ@?$AAs?$AAe?$AAa?$AAr?$AAc?$AAh?$AA_?$AAt?$AAh?$AAr?$AAe?$AAs?$AA2?$AA_?$AAQ?$AA1?$AA5?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAs?$AAe?$AAa?$AAr?$AAc?$AAh?$AA_?$AAt?$AAh@_SKP_Silk_lin2log??_C@_1MG@KKMNIONB@?$AAt?$AAe?$AAm?$AAp?$AA3?$AA2?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAt?$AAe?$AAm?$AAp?$AA3?$AA2?$AA?$CJ?$AA?5?$AA?$DO?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?5?$AA?$DP?$AA?5?$AA0@??_C@_1HM@PEDCAAOJ@?$AAb?$AAa?$AAs?$AAi?$AAs?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$CL?$AA?5?$AAs?$AAf?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA_?$AA8?$AAk?$AAH?$AAz?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAs?$AAi@??_C@_1DC@KBPDPJNG@?$AAb?$AAa?$AAs?$AAi?$AAs?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAs?$AAi?$AAg?$AAn?$AAa?$AAl?$AA_?$AA8?$AAk?$AAH?$AAz?$AA?$AA@??_C@_1HO@MBOAGPA@?$AAt?$AAa?$AAr?$AAg?$AAe?$AAt?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$CL?$AA?5?$AAs?$AAf?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA_?$AA8?$AAk?$AAH?$AAz?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAs@??_C@_1DE@ODKBMEHK@?$AAt?$AAa?$AAr?$AAg?$AAe?$AAt?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAs?$AAi?$AAg?$AAn?$AAa?$AAl?$AA_?$AA8?$AAk?$AAH?$AAz?$AA?$AA@??_C@_1CE@ONGPPNLF@?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA_?$AAd?$AA_?$AAs?$AAr?$AAc?$AAh?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@_SKP_Silk_insertion_sort_decreasing_int16??_C@_1CI@NPEFNLDK@?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA_?$AAd?$AA_?$AAs?$AAr?$AAc?$AAh?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA4?$AA?$AA@??_C@_1KO@DJANJIGL@?$AAs?$AAu?$AAm?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAs?$AAu?$AAm?$AA?$CJ?$AA?5?$AA?$DO?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?5?$AA?$DP?$AA?5?$AA0?$AAx?$AA7?$AAF?$AAF?$AAF?$AA?5@??_C@_1BBG@LHPFCJDC@?$AA?$CI?$AA?$CI?$AA?$CI?$AAi?$AAn?$AAt?$AA?$CJ?$AA?9?$AAi?$AA?$CJ?$AA?$DM?$AA?$DM?$AA?$CI?$AA4?$AA?$CJ?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AA?$CI?$AA?$CI?$AA?$CI?$AAi?$AAn?$AAt?$AA?$CJ?$AA?9?$AAi?$AA?$CJ@??_C@_1PG@NNFJDOCI@?$AA?$CI?$AA?$CI?$AAs?$AAu?$AAm?$AA?$CJ?$AA?$DO?$AA?$DO?$AA?$CI?$AA1?$AA?$CJ?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AA?$CI?$AA?$CI?$AAs?$AAu?$AAm?$AA?$CJ?$AA?$DO?$AA?$DO?$AA?$CI?$AA1?$AA?$CJ?$AA?$CJ?$AA?$CJ?$AA?5@_SKP_Silk_inner_prod_aligned??_C@_1HM@GJPHFHGO@?$AAb?$AAa?$AAs?$AAi?$AAs?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$CL?$AA?5?$AAs?$AAf?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA_?$AA8?$AAk?$AAH?$AAz?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAs?$AAi@??_C@_1DC@LLMPBJFI@?$AAb?$AAa?$AAs?$AAi?$AAs?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAs?$AAi?$AAg?$AAn?$AAa?$AAl?$AA_?$AA4?$AAk?$AAH?$AAz?$AA?$AA@??_C@_1HO@JBNLFBHH@?$AAt?$AAa?$AAr?$AAg?$AAe?$AAt?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$CL?$AA?5?$AAs?$AAf?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA_?$AA8?$AAk?$AAH?$AAz?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAs@??_C@_1DE@PJJNCEPE@?$AAt?$AAa?$AAr?$AAg?$AAe?$AAt?$AA_?$AAp?$AAt?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAs?$AAi?$AAg?$AAn?$AAa?$AAl?$AA_?$AA4?$AAk?$AAH?$AAz?$AA?$AA@??_C@_1BI@GHMOEKNM@?$AAF?$AAs?$AA_?$AAk?$AAH?$AAz?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA8?$AA?$AA@_SKP_Silk_resample_1_3_SKP_Silk_resample_1_2_coarsest_SKP_Silk_resample_1_2_coarse_SKP_Silk_resample_2_3_coarsest??_C@_1GO@BOFBILHA@?$AAs?$AAe?$AAa?$AAr?$AAc?$AAh?$AA_?$AAt?$AAh?$AAr?$AAe?$AAs?$AA2?$AA_?$AAQ?$AA1?$AA5?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAs?$AAe?$AAa?$AAr?$AAc?$AAh@??_C@_1GO@KOCNILKN@?$AAs?$AAe?$AAa?$AAr?$AAc?$AAh?$AA_?$AAt?$AAh?$AAr?$AAe?$AAs?$AA1?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAs?$AAe?$AAa?$AAr?$AAc?$AAh@??_C@_1CA@OFHOLANM@?$AAc?$AAo?$AAm?$AAp?$AAl?$AAe?$AAx?$AAi?$AAt?$AAy?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA?$AA@??_C@_1CA@ELICKIGK@?$AAc?$AAo?$AAm?$AAp?$AAl?$AAe?$AAx?$AAi?$AAt?$AAy?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@__CrtDbgReportW??_C@_1KE@PNHGGPKF@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_pitch_analysis_core@@9@9??_C@_1HI@DLHADHCL@?$AAF?$AAs?$AA_?$AAk?$AAH?$AAz?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA8?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AAF?$AAs?$AA_?$AAk?$AAH?$AAz?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA1?$AA2?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AAF@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8_SKP_Silk_CLZ32_SKP_Silk_CLZ16_SKP_min_int_SKP_max_int_SKP_max_32_SKP_Silk_SQRT_APPROX_SKP_Silk_CLZ_FRAC_SKP_FIX_P_Ana_calc_corr_st3??_C@_1CM@PBAFIMHH@?$AAi?$AAd?$AAx?$AA?5?$AA?$CL?$AA?5?$AAj?$AA?5?$AA?$DM?$AA?5?$AAl?$AAa?$AAg?$AA_?$AAc?$AAo?$AAu?$AAn?$AAt?$AAe?$AAr?$AA?$AA@??_C@_1BK@DJOBKCKP@?$AAi?$AAd?$AAx?$AA?5?$AA?$CL?$AA?5?$AAj?$AA?5?$AA?$DM?$AA?5?$AA2?$AA2?$AA?$AA@??_C@_1CC@JNDFGPIE@?$AAl?$AAa?$AAg?$AA_?$AAc?$AAo?$AAu?$AAn?$AAt?$AAe?$AAr?$AA?5?$AA?$DM?$AA?5?$AA2?$AA2?$AA?$AA@_SKP_Silk_Lag_range_stage3?__LINE__Var@?1??SKP_FIX_P_Ana_calc_corr_st3@@9@9_SKP_FIX_P_Ana_calc_energy_st3??_C@_1EI@CGFOINEF@?$AAe?$AAn?$AAe?$AAr?$AAg?$AAi?$AAe?$AAs?$AA_?$AAs?$AAt?$AA3?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?$FL?$AA?5?$AAi?$AA?5?$AA?$FN?$AA?$FL?$AA?5?$AAj?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0@__real@00000000?__LINE__Var@?1??SKP_FIX_P_Ana_calc_energy_st3@@9@9__fltused_SKP_FIX_P_Ana_find_scaling_SKP_Silk_int16_array_maxabs/1998 1273638393 100666 37918 ` L+љ-ъK5zН.drectveAЬ .debug$SP ]@B.textKqМ+% P`.debug$Sœ.-Ъ4@B.rdata8œ5@0@.rdata4д5@0@.rdata”6@@@.dataœ6@0Р.rdata8 6@0@.rtc$TMZи6м6@0@.rtc$IMZц6ъ6@0@.textGє6 P`.debug$Sф;78@B.text‡Q8иP* P`.debug$S` |Rм^@B.rdataHr_@@@.rdata,К_@0@.rdataFц_@@@.rdata:,`@0@.rdata,f`@0@.rdata<’`@0@.dataЮ`@0Р.rdata:в`@0@.text* a6f P`.debug$SРЄfdj@B.rdata$–j@0@.dataКj@0Р.rdataОj@0@.textGкj P`.debug$Sф!kl@B.textЗ7lюn P`.debug$Spo€q@B.rdataВq@0@.rdataŒЦq@@@.dataRr@0Р.rdataVr@0@.text_hrЧr P`.debug$Sєхrйs@B.textр t P`.debug$SЌыt—v@B.text8Щvx P`.debug$S`GxЇy@B.debug$T\йy@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‰TJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_NSQ_del_dec.obj:<!ovovMicrosoft (R) Optimizing Compilerѕ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_NSQ_del_dec.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёR. lSKP_Silk_Quantization_Offsets_Q10"@SA_Method"SA_ParameterTSKP_SILK_LBRR_structKSKP_Silk_encoder_stateRSKP_Silk_LP_state+SKP_Silk_VAD_state!wchar_tSKP_Silk_nsq_state NSQ_del_dec_struct‹SKP_Silk_encoder_controlNSQ_sample_struct"SA_AttrTargetsSKP_Silk_NLSF_CBS usize_t!ЧSKP_Silk_range_coder_stateSKP_Silk_nsq_stateTSKP_SILK_LBRR_struct+SKP_Silk_VAD_state!ЧSKP_Silk_range_coder_state PSKP_Silk_detect_SWB_stateRSKP_Silk_LP_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structKSKP_Silk_encoder_state‹SKP_Silk_encoder_control NSQ_del_dec_structNSQ_sample_struct PSKP_Silk_detect_SWB_state|SKP_Silk_NLSF_CB_structєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlїН+w ЅіћTaУ`§§ЄZA’Џ‹ц+7 @#nŽи,ˆ{Œ(yFiдz<G;1=1ѓђ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nsq_del_dec.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 12360 - ^ = $23 $T0 12364 - ^ = $24 $T0 12368 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 884 - ^ = $23 $T0 888 - ^ = $24 $T0 892 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 296 - ^ = $23 $T0 300 - ^ = $24 $T0 304 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 300 - ^ = $23 $T0 304 - ^ = $24 $T0 308 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = Ј Ќ U‹ьИD0шSVWНМЯџџЙ ИЬЬЬЬѓЋЁ3Х‰Eќ‹E‹€Ь™ƒтТСј‰…|џџџ‹E‹ˆЄ‰Mм‹EƒИДu&hj‹ ƒСQhjшƒФƒјuЬ‹E‹ˆ№iЩpQj• аџџRшƒФ ЧEшы ‹EшƒР‰Eш‹E‹Mш;ˆ№В‹EшiРpŒ аџџ‰”аџџ‹E ‹MшHXƒс‹•”аџџ‰Šd‹…”аџџ‹”аџџ‹‘d‰h‹…”аџџЧ€l‹…”аџџ‹M‹‘ ‰`‹E‹ˆЬ‹•”аџџ‹E‹Œˆ|‰Šh€‹E€P‹”аџџСQшƒФ щ3џџџ‹E ‹Hh‹U ‹BdбрПŒˆ‰ЄшџџЧE”‹…|џџџPj шƒФ‰Eˆ‹E ƒxhu7ЧEшы ‹EшƒР‰Eшƒ}ш}‹Eш‹M ‹TlƒъR‹EˆPшƒФ‰Eˆывƒ}u ЧEФыЧEФ‹E‹ˆЬ‹UJ‰…Lџџџ‹E‹M‹‘Ь‰Ќ‹E‹M‹‘Ь‰ЈЧEЌЧEшы ‹EшƒР‰Eшƒ}шM‹EшбјЙ+MФ ССр‹U B‰…pџџџ‹EшkР‹M$A‰•dџџџ‹EшСр‹M(A‰•Xџџџ‹EЧ€И‹E ƒxh…9‹Eш‹M ‹Tl‰Uм‹EФбрЙ+Ш#Mш…ƒ}ш…‹… жџџ‰…PшџџЧEИЧEєы ‹EєƒР‰Eє‹E‹Mє;ˆ№}6‹EєiРp‹Œ жџџ;Pшџџ}‹EєiРp‹Œ жџџ‰Pшџџ‹Eє‰EИыГЧEєы ‹EєƒР‰Eє‹E‹Mє;ˆ№}i‹Eє;EИt_‹EєiРp‹Œ жџџСџџџ‹Uєiвp‰Œ жџџ‹EєiРpƒМ жџџ}&hj‹ ƒСQQhjшƒФƒјuЬы€‹EИiРpŒ аџџ‰”аџџ‹E”Eˆ‰E ЧEєы ‹EєƒР‰Eє‹Eє;EˆI‹E ƒшƒр‰E ‹E ‹”аџџ‹”€Сњ ‹Eє+Eˆ‹M‰‹E ‹”аџџ‹”Сњ‹E ‹”аџџП„€Џа‹M ‹…”аџџ‹Œˆсџџ‹E ‹Е”аџџП„†€ЏШСљб‹M ‹…”аџџ‹Œˆ€СљƒСбљ‹E ‹Е”аџџЏŒ†бСњ ƒТбњњџ~Ч…ЬЯџџџщ9‹M ‹•”аџџ‹„ŠСј‹M ‹•”аџџПŒŠ€ЏС‹U ‹”аџџ‹”‘тџџ‹M ‹Е”аџџПŒŽ€ЏбСњТ‹U ‹”аџџ‹”‘€СњƒТбњ‹M ‹Е”аџџЏ”ŽТСј ƒРбј=€џџ}Ч…ШЯџџ€џџщŽ‹U ‹…”аџџ‹ŒСљ‹U ‹…”аџџП”€ЏЪ‹E ‹•”аџџ‹„‚%џџ‹U ‹Е”аџџП”–€ЏТСјШ‹E ‹•”аџџ‹„‚€СјƒРбј‹U ‹Е”аџџЏ„–ШСљ ƒСбљ‰ШЯџџ‹…ШЯџџ‰…ЬЯџџ‹Mє+Mˆ‹•Lџџџf‹…ЬЯџџf‰J‹E‹ˆЌ+MˆMє‹U‹E ‹Е”аџџ‹„†‰„Š€щЂ§џџЧEЌ‹E‹ˆЬ+Mм‹U+Šќƒщ‰Mа‹E‹M‹Ь+‘ќyfƒ}а~ Ч…ЬЯџџыF‹E‹M‹Ь+‘ќ9Uа}‹E‹M‹Ь+‘ќ‰•ШЯџџы ‹Eа‰…ШЯџџ‹ШЯџџ‰ЬЯџџ‹•ЬЯџџ‰•ФЯџџыd‹E‹M‹Ь+‘ќ9Uа~‹E‹M‹Ь+‘ќ‰•РЯџџы'ƒ}а} Ч…МЯџџы ‹Eа‰…МЯџџ‹МЯџџ‰РЯџџ‹•РЯџџ‰•ФЯџџ‹…ФЯџџ‰Eа‹E‹ˆќСсQj•\шџџRшƒФ ‹E‹ˆќQ‹U‹‚Ь+EаP‹Mа”MМшџџR…\шџџP‹pџџџQ‹U‹EшЏ‚аEа‹MARшƒФ‹E‹M‹‘Ь‰Ј‹EЧ€И‹Eш‹M,ƒ<}&hj‹ƒТrRhjшƒФƒјuЬ‹Eш‹M,‹Сњ‰•Ашџџ‹Eш‹M,‹бњСт •Ашџџ‰•Ашџџ‹E ƒРlP‹M8Q‹U@R‹E”P‹M‹‘№R‹EшPD№џџQ•МшџџR‹…|џџџPhцџџQ‹UR… аџџP‹MQшƒФ4‹EЌ‰…ЬЯџџ‹MЌƒС‰MЌ‹UˆRE”P‹M‹‘№R‹E‹ˆќQ‹U‹‚јP‹ЬЯџџQ‹U‹‚аP‹ЄшџџQ‹U= 0psDelDec[ i ].RD_Q10 >= 0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nsq_del_dec.czNSQ->prev_inv_gain_Q16 != 09>U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФF ёq1G@.SKP_min_intФР € ta  tbђ0G`$з€и€@й€ EXE \E ДE ИE U‹ььpSVWНќџџЙмИЬЬЬЬѓЋЁ3Х‰Eќ‹E‹ˆЌ+M0‹U„Š„‰…˜ўџџ‹E‹ˆЈ+M0‹U DЉ…Єўџџ‹EXбрP‹M$Q•dўџџRшƒФ ‹ETбрP‹M,Q•<ўџџRшƒФ ЧEєы ‹EєƒР‰Eє‹Eє;ELџƒ}…'‹…Єўџџ‹Сљ‹U(ПЏШ‹•Єўџџ‹%џџ‹U(ПЏТСјШ‰M”‹…Єўџџ‹HќСљ‹U(ПBЏШ‹•Єўџџ‹Bќ%џџ‹U(ПRЏТСјE”С‰E”‹…Єўџџ‹HјСљ‹U(ПBЏШ‹•Єўџџ‹Bј%џџ‹U(ПRЏТСјE”С‰E”‹…Єўџџ‹HєСљ‹U(ПBЏШ‹•Єўџџ‹Bє%џџ‹U(ПRЏТСјE”С‰E”‹…Єўџџ‹H№Сљ‹U(ПBЏШ‹•Єўџџ‹B№%џџ‹U(ПRЏТСјE”С‰E”‹…ЄўџџƒР‰…ЄўџџыЧE”ƒ}0ŽЁ‹…˜ўџџ‹‹•˜ўџџJјСљПE4ЏШ‹•˜ўџџ‹‹•˜ўџџBј%џџПU4ЏТСјШ‰pџџџ‹…˜ўџџ‹HќСљ‹U4СњЏЪpџџџ‹…˜ўџџ‹Pќтџџ‹E4СјЏаСњЪ‰pџџџ‹…pџџџСр‰…pџџџ‹…˜ўџџƒР‰…˜ўџџы Ч…pџџџЧEмы ‹EмƒР‰Eм‹Eм;E\Ч‹EмiРpE ‰…h§џџ‹EмkР0Œt§џџ‰\§џџ‹…h§џџ‹ˆdiЩ5„Г Сkc6‹•h§џџ‰Šd‹…h§џџ‹ˆdСљ‰ьўџџ‹Eє‹h§џџ”|‰•Œўџџ‹EXƒрt&hj‹ ƒСCQhjшƒФƒјuЬ‹E$™ƒрƒт‰…ќџџ‰•”ќџџ‹…ќџџ …”ќџџt&hj‹ ƒСDQhjшƒФƒјuЬƒ}X }%hjЁƒРEPhjшƒФƒјuЬ‹…dўџџ‰…јўџџ‹…Œўџџ‹СљП•јўџџЏЪ‹…Œўџџ‹тџџП…јўџџЏаСњЪ‰Mˆ‹…Œўџџ‹HќСљ‹•јўџџСњЏЪMˆ‹…Œўџџ‹Pќтџџ‹…јўџџСјЏаСњЪ‰Mˆ‹…hўџџ‰…јўџџ‹…Œўџџ‹HјСљП•јўџџЏЪ‹…Œўџџ‹PјтџџП…јўџџЏаСњUˆб‰Uˆ‹…Œўџџ‹HєСљ‹•јўџџСњЏЪMˆ‹…Œўџџ‹Pєтџџ‹…јўџџСјЏаСњЪ‰Mˆ‹…lўџџ‰…јўџџ‹…Œўџџ‹H№СљП•јўџџЏЪ‹…Œўџџ‹P№тџџП…јўџџЏаСњUˆб‰Uˆ‹…Œўџџ‹HьСљ‹•јўџџСњЏЪMˆ‹…Œўџџ‹Pьтџџ‹…јўџџСјЏаСњЪ‰Mˆ‹…pўџџ‰…јўџџ‹…Œўџџ‹HшСљП•јўџџЏЪ‹…Œўџџ‹PштџџП…јўџџЏаСњUˆб‰Uˆ‹…Œўџџ‹HфСљ‹•јўџџСњЏЪMˆ‹…Œўџџ‹Pфтџџ‹…јўџџСјЏаСњЪ‰Mˆ‹…tўџџ‰…јўџџ‹…Œўџџ‹HрСљП•јўџџЏЪ‹…Œўџџ‹PртџџП…јўџџЏаСњUˆб‰Uˆ‹…Œўџџ‹HмСљ‹•јўџџСњЏЪMˆ‹…Œўџџ‹Pмтџџ‹…јўџџСјЏаСњЪ‰MˆЧEш ы ‹EшƒР‰Eш‹Eш;EXЅ‹Eшбј‹Œ…dўџџ‰јўџџ‹Eшїи‹Œўџџ‹СњП…јўџџЏа‹Mшїй‹…Œўџџ‹ ˆсџџП…јўџџЏШСљMˆЪ‰Mˆ‹Eшїи‹Œўџџ‹TќСњ‹…јўџџСјЏаUˆ‹Mшїй‹…Œўџџ‹Lˆќсџџ‹…јўџџСјЏШСљб‰UˆщFџџџ‹ETƒрt&hj‹ ƒС^QhjшƒФƒјuЬ‹E,™ƒрƒт‰…ќџџ‰•”ќџџ‹…ќџџ …”ќџџt&hj‹ ƒС_QhjшƒФƒјuЬƒ}T }%hjЁƒР`PhjшƒФƒјuЬ‹…<ўџџ‰…јўџџ‹…Œўџџ‹СљП•јўџџЏЪ‹…Œўџџ‹тџџП…јўџџЏаСњЪ‰|џџџ‹…Œўџџ‹HќСљ‹•јўџџСњЏЪ|џџџ‹…Œўџџ‹Pќтџџ‹…јўџџСјЏаСњЪ‰|џџџ‹…@ўџџ‰…јўџџ‹…Œўџџ‹HјСљП•јўџџЏЪ‹…Œўџџ‹PјтџџП…јўџџЏаСњ•|џџџቕ|џџџ‹…Œўџџ‹HєСљ‹•јўџџСњЏЪ|џџџ‹…Œўџџ‹Pєтџџ‹…јўџџСјЏаСњЪ‰|џџџ‹…Dўџџ‰…јўџџ‹…Œўџџ‹H№СљП•јўџџЏЪ‹…Œўџџ‹P№тџџП…јўџџЏаСњ•|џџџቕ|џџџ‹…Œўџџ‹HьСљ‹•јўџџСњЏЪ|џџџ‹…Œўџџ‹Pьтџџ‹…јўџџСјЏаСњЪ‰|џџџ‹…Hўџџ‰…јўџџ‹…Œўџџ‹HшСљП•јўџџЏЪ‹…Œўџџ‹PштџџП…јўџџЏаСњ•|џџџቕ|џџџ‹…Œўџџ‹HфСљ‹•јўџџСњЏЪ|џџџ‹…Œўџџ‹Pфтџџ‹…јўџџСјЏаСњЪ‰|џџџ‹…Lўџџ‰…јўџџ‹…Œўџџ‹HрСљП•јўџџЏЪ‹…Œўџџ‹PртџџП…јўџџЏаСњ•|џџџቕ|џџџ‹…Œўџџ‹HмСљ‹•јўџџСњЏЪ|џџџ‹…Œўџџ‹Pмтџџ‹…јўџџСјЏаСњЪ‰|џџџ‹…Pўџџ‰…јўџџ‹…Œўџџ‹HиСљП•јўџџЏЪ‹…Œўџџ‹PитџџП…јўџџЏаСњ•|џџџቕ|џџџ‹…Œўџџ‹HдСљ‹•јўџџСњЏЪ|џџџ‹…Œўџџ‹Pдтџџ‹…јўџџСјЏаСњЪ‰|џџџЧEш ы ‹EшƒР‰Eш‹Eш;ETБ‹Eшбј‹Œ…<ўџџ‰јўџџ‹Eшїи‹Œўџџ‹СњП…јўџџЏа‹Mшїй‹…Œўџџ‹ ˆсџџП…јўџџЏШСљ|џџџЪ‰|џџџ‹Eшїи‹Œўџџ‹TќСњ‹…јўџџСјЏа•|џџџ‹Mшїй‹…Œўџџ‹Lˆќсџџ‹…јўџџСјЏШСљቕ|џџџщ:џџџ‹…|џџџбј‰…|џџџ‹…h§џџ‹ˆ`СљПU8ЏЪ‹…h§џџ‹`тџџПE8ЏаСњ•|џџџቕ|џџџ‹E`‹‹•h§џџ‹„ŠСјПM<ЏС‹U`‹ ‹•h§џџ‹ŒŠсџџПU<ЏЪСљССр‰…dџџџ‹…h§џџ‹ˆ`Сљ‹U<СњЏЪdџџџ‹…h§џџ‹`тџџ‹E<СјЏаСњЪ‰dџџџ‹E”+…pџџџ‰…Мўџџ‹…МўџџСјƒРбј‰…Мўџџ‹…МўџџEˆ‰…Мўџџ‹…Мўџџ+…|џџџ‰…Мўџџ‹…Мўџџ+…dџџџ‰…Мўџџ‹Eє‹M‹+•Мўџџ‰•Xџџџ‹…Xџџџ3…ьўџџ+…ьўџџ‰…Xџџџ‹…Xџџџ+EH‰…XџџџНXџџџ~ Ч…”ќџџы0НXџџџџџ} Ч…ќџџџџы ‹…Xџџџ‰…ќџџ‹ќџџ‰”ќџџ‹•”ќџџ‰•XџџџНXџџџњџџ•‹…XџџџСј ƒРбјСр ‰…џџџ‹…Xџџџ+…џџџ‰…Xџџџ‹…џџџEHїиЏEDПXџџџП•XџџџЏЪССј ‰…@џџџ‹…@џџџ‰…4џџџ‹…Xџџџ‹MDA‹…4џџџ+Т‰…4џџџ‹…џџџ‰…џџџщНXџџџŽ‘‹…XџџџСј ƒРбјСр ‰…џџџ‹…Xџџџ+…џџџ‰…Xџџџ‹…џџџEHЏEDПXџџџП•XџџџЏЪССј ‰…@џџџ‹…@џџџ‰…4џџџ‹…Xџџџбр‹MD+Ш‹•4џџџ+ቕ4џџџ‹…џџџ-‰…џџџыyПEHПMDЏС‰…LџџџП…XџџџПXџџџЏС…LџџџСј ‰…4џџџ‹…4џџџ‰…@џџџ‹…Xџџџ‹MDA‹…LџџџСј +а•@џџџ‰•@џџџЧ…џџџќџџЧ…џџџ‹…@џџџ;…4џџџ}U‹…h§џџ‹ˆl@џџџ‹•\§џџ‰J‹…h§џџ‹ˆl4џџџ‹•\§џџ‰J‹…\§џџ‹џџџ‰‹…\§џџ‹џџџ‰HыS‹…h§џџ‹ˆl4џџџ‹•\§џџ‰J‹…h§џџ‹ˆl@џџџ‹•\§џџ‰J‹…\§џџ‹џџџ‰‹…\§џџ‹џџџ‰H‹…\§џџ‹MH‰рўџџ‹…рўџџ3…ьўџџ+…ьўџџ‰…рўџџ‹E”СјƒРбј…рўџџ‰…дўџџ‹…дўџџEˆ‰…Шўџџ‹…Шўџџ+…|џџџ‰…Аўџџ‹…Аўџџ+…dџџџ‹\§џџ‰A‹…АўџџСр‹\§џџ‰A ‹…ШўџџСр‹\§џџ‰A‹…дўџџСр‹\§џџ‰A‹…\§џџ‹MHH‰рўџџ‹…рўџџ3…ьўџџ+…ьўџџ‰…рўџџ‹E”СјƒРбј…рўџџ‰…дўџџ‹…дўџџEˆ‰…Шўџџ‹…Шўџџ+…|џџџ‰…Аўџџ‹…Аўџџ+…dџџџ‹\§џџ‰A(‹…АўџџСр‹\§џџ‰A$‹…ШўџџСр‹\§џџ‰A ‹…дўџџСр‹\§џџ‰A,щ$ёџџ‹E`‹ƒщƒс‹U`‰ ‹E`‹Mdƒс‰MЌ‹…x§џџ‰…(џџџЧEаЧEмы ‹EмƒР‰Eм‹Eм;E\}0‹EмkР0‹Œx§џџ;(џџџ}‹EмkР0‹Œx§џџ‰(џџџ‹Eм‰EаыП‹EаiРpE ‹MЌ‹ˆ‰U ЧEмы ‹EмƒР‰Eм‹Eм;E\•‹EмiРpE ‹MЌ‹ˆ;U ty‹EмkР0‹Œx§џџСџџџ‹Uмkв0‰Œx§џџ‹EмkР0‹Œ§џџСџџџ‹Uмkв0‰Œ§џџ‹EмkР0ƒМx§џџ})hj‹ СэQhjшƒФƒјuЬщVџџџ‹…x§џџ‰…џџџ‹…§џџ‰…(џџџЧEИЧEФЧEмы ‹EмƒР‰Eм‹Eм;E\}^‹EмkР0‹Œx§џџ;џџџ~‹EмkР0‹Œx§џџ‰џџџ‹Eм‰EИ‹EмkР0‹Œ§џџ;(џџџ}‹EмkР0‹Œ§џџ‰(џџџ‹Eм‰EФы‘‹…(џџџ;…џџџ}L‹EєP‹MФiЩpM Q‹UИiвpU RшƒФ j‹EФkР0ŒŒ§џџQ‹UИkв0„t§џџPшƒФ ‹EаiРpE ‰…h§џџƒ}P ‹Eє;EdŒT‹EЌ‹h§џџ‹”€Сњ ‹Eє+Ed‹M‰‹EЌ‹h§џџ‹”Сњ‹EЌ‹h§џџП„€Џа‹MЌ‹…h§џџ‹Œˆсџџ‹EЌ‹Еh§џџП„†€ЏШСљб‹MЌ‹…h§џџ‹Œˆ€СљƒСбљ‹EЌ‹Еh§џџЏŒ†бСњ ƒТбњњџ~Ч…”ќџџџщ9‹MЌ‹•h§џџ‹„ŠСј‹MЌ‹•h§џџПŒŠ€ЏС‹UЌ‹h§џџ‹”‘тџџ‹MЌ‹Еh§џџПŒŽ€ЏбСњТ‹UЌ‹h§џџ‹”‘€СњƒТбњ‹MЌ‹Еh§џџЏ”ŽТСј ƒРбј=€џџ}Ч…ќџџ€џџщŽ‹UЌ‹…h§џџ‹ŒСљ‹UЌ‹…h§џџП”€ЏЪ‹EЌ‹•h§џџ‹„‚%џџ‹UЌ‹Еh§џџП”–€ЏТСјШ‹EЌ‹•h§џџ‹„‚€СјƒРбј‹UЌ‹Еh§џџЏ„–ШСљ ƒСбљ‰ќџџ‹…ќџџ‰…”ќџџ‹Mє+Md‹Uf‹…”ќџџf‰J‹E‹ˆЌ+Md‹U‹EЌ‹Еh§џџ‹„†‰„Š€‹E‹ˆЈ+Md‹U ‹EЌ‹Еh§џџ‹„†€‰Š‹E‹ˆЌƒС‹U‰ŠЌ‹E‹ˆЈƒС‹U‰ŠЈЧEмы ‹EмƒР‰Eм‹Eм;E\-‹EмiРpE ‰…h§џџ‹EмkР0Œt§џџ‰\§џџ‹…h§џџ‹\§џџ‹Q ‰`‹Eє‹h§џџ‹•\§џџ‹R‰”€‹…\§џџ‹HСљ‹U`‹‹•h§џџ‰Œ‚‹E`‹‹•h§џџ‹…\§џџ‹‰„Š€‹E`‹‹•h§џџ‹…\§џџ‹@‰„Š€‹E`‹‹•h§џџ‹…\§џџ‹@‰„Š‹…\§џџ‹Сљ ‹•h§џџŠd‹…h§џџ‰ˆd‹E`‹‹•h§џџ‹…h§џџ‹€d‰Š‹…h§џџ‹\§џџ‹Q‰l‹E`‹‹•h§џџ‹E@‰„Š€щОўџџщьшџџЧEмы ‹EмƒР‰Eм‹Eм;E\}>‹EмiРpE ‰…h§џџh€‹EL‹h§џџ”R‹…h§џџPшƒФ ыБR‹ЭPшXZ_^[‹Mќ3ЭшФp;ьш‹х]Уdўџџ <ўџџ t§џџРpsSampleStateAR_shp_Q13_tmpa_Q12_tmp0o!ˆ!5q=mF'M#i‡m'—#ЋeВmЛ'Т#*a2m;'B#t]|m…'Œ# YЇmА'З#•UmЉ'А#ЙГ!ћ! Q32+18PDOPN\Mѕ$‡p`И( ёЭL‡(‡SKP_Silk_noise_shape_quantizer_del_decpРА … :ќџџџ      ]NSQ  psDelDec tsigtype x_Q10 tq xq  tsLTP_Q16 $a_Q12 (b_Q14 ,AR_shp_Q13 0tlag! 4tHarmShapeFIRPacked_Q14 8tTilt_Q14 <tLF_shp_Q14 @tGain_Q16 DtLambda_Q10 Htoffset_Q10 Ltlength Ptsubfr TtshapingLPCOrder XtpredictLPCOrder! \tnStatesDelayedDecision `tsmpl_buf_idx dtdecisionDelay шџџџtj 4џџџtrd2_Q10 ьўџџtdither Шўџџtxq_Q10 Ќџџџtlast_smple_idx @џџџtrd1_Q10 ˜ўџџtshp_lag_ptr рўџџtexc_Q10 мџџџtk pџџџtn_LTP_Q14 <ўџџбAR_shp_Q13_tmp t§џџ psSampleState јўџџtAtmp Єўџџtpred_lag_ptr dўџџбa_Q12_tmp ”џџџtLTP_pred_Q14 (џџџtRDmin_Q10 џџџtq2_Q10 Мўџџttmp аџџџtWinner_ind дўџџtLPC_exc_Q10 ŒўџџtpsLPC_Q14 џџџtq1_Q10 АўџџtsLF_AR_shp_Q10 h§џџpsDD єџџџti ˆџџџtLPC_pred_Q10 |џџџtn_AR_Q10 џџџtRDmax_Q10 \§џџpsSS ФџџџtRDmin_ind ИџџџtRDmax_ind Xџџџtr_Q10 Lџџџtrr_Q20 dџџџtn_LF_Q10  џџџtWinner_rand_stateђP‡ЧD@€(Q€DR€]U€vV€X€­\€З^€щ_€"`€[a€”b€Эc€мd€оe€хi€яk€2l€pm€n€Žo€p€šs€Иu€Ъx€н{€~€€,ƒ€Z„€Є…€Яˆ€л‰€Š€N‹€ZŒ€”€вŽ€о€€V‘€b’€œ“€к”€ц•€ –€^—€|˜€Ž™€вš€›€!ž€OŸ€™ €ФЇ€аЈ€Љ€LЊ€XЋ€˜Ќ€м­€шЎ€( Џ€l А€x Б€И В€ќ Г€ Д€H Е€Œ Ж€˜ З€и И€ Й€: К€L Л€– М€ц Н€ы О€љ П€9 С€‚ Т€Ц Ц€е Ч€щ Ш€ј Щ€ Ъ€ Ы€1 Я€I а€X б€Ќ д€М е€г ж€х з€и€!й€;к€Qл€aм€xн€Šо€Гп€Фр€пс€№т€ђу€ф€#х€4ц€Wч€aш€kы€yь€”э€Џю€Ня€Ь№€Юё€щђ€ѓ€є€!њ€2ћ€Jў€aџ€p€‚€—€Љ€Л€Э €п €ї€€€/€D€V€h€z€€€€Љ€А €Ъ!€п"€ђ#€ј%€њ(€)€-*€D+€d,€„-€Н/€Т2€Ю3€к4€с5€ш6€8€9€*:€0=€E>€X?€^A€`D€nE€”F€КJ€ЬK€оL€§N€ъO€P€2R€GS€\V€zW€ŒX€ŸY€ДZ€Э[€ы\€]€ ^€;_€^`€xa€b€Ђc€Їd€Ќf€Цg€иh€i€j€ LXL \L ИO МO ЧN ЫN жM кM хP щP єQ јQ L L psSampleState[ k ][ 0 ].RD_Q10 >= 0shapingLPCOrder >= 12( (long long)AR_shp_Q13 & 3 ) == 0( shapingLPCOrder & 1 ) == 0predictLPCOrder >= 10( (long long)a_Q12 & 3 ) == 0@( predictLPCOrder & 1 ) == 0U‹ьь$SVWНмўџџЙIИЬЬЬЬѓЋ‹E$‹M4‹ бљИџџџ™їљ‰EШ}Шџ} ‹EШ‰…мўџџы Ч…мўџџџ‹мўџџ‰MШ‹E$‹M8‹‰Uд‹EƒИИ„Щ‹EШСр‰EАƒ}$u(‹EАСјПM0ЏС‹UАтџџПM0ЏбСњТСр‰EА‹E‹ˆЈ+Mдƒщ‰Mјы ‹EјƒР‰Eј‹E‹Mј;ˆЈ}g}јр|%hjЁƒРPhjшƒФƒјuЬ‹EАСј‹Mј‹UП JЏС‹UАтџџ‹Mј‹uП NЏбСњТ‹Uј‹M ‰‘ы‚‹E‹MШ;ˆД„Tj‹E‹ˆДQ‹UШRшƒФ ‰EМЧEьы ‹EьƒР‰Eь‹Eь;E(Ю‹EьiРpE ‰EЄ‹EМСј‹MЄП‘`ЏТ‹MМсџџ‹UЄП’`ЏЪСљС‹MЄ‹‘`СњƒТбњЏUМТ‹MЄ‰`ЧEјы ‹EјƒР‰Eјƒ}ј }w‹EМСјЙ +Mј‹UЄПŒŠќЏС‹UМтџџЙ +Mј‹uЄПŒŽќЏбСњТК +Uј‹MЄ‹”‘ќСњƒТбњЏUМТЙ +Mј‹UЄ‰„ŠќщzџџџЧEјы ‹EјƒР‰Eјƒ}ј С‹EМСј‹Mј‹UЄПŒŠ€ЏС‹UМтџџ‹Mј‹uЄПŒŽ€ЏбСњТ‹Uј‹MЄ‹”‘€СњƒТбњЏUМТ‹Mј‹UЄ‰„Š€‹EМСј‹Mј‹UЄПŒŠЏС‹UМтџџ‹Mј‹uЄПŒŽЏбСњТ‹Uј‹MЄ‹”‘СњƒТбњЏUМТ‹Mј‹UЄ‰„Šщ,џџџщўџџ‹EСр‰Eр‹E$ƒРЙ+ШПбПEЏа‹Mр+Ъ‰Mр‹EдƒРP‹MрQшƒФ‰Eр‹E‹ˆЌ+Mр‰Mјы ‹EјƒР‰Eј‹E‹Mј;ˆЌ}`‹EМСј‹Mј‹UПŒŠ€ЏС‹UМтџџ‹Mј‹uПŒŽ€ЏбСњТ‹Uј‹M‹”‘€СњƒТбњЏUМТ‹Mј‹U‰„Š€ы‰‹EƒИИu{‹E‹ˆЈ+Mдƒщ‰Mјы ‹EјƒР‰Eј‹E‹Mј;ˆЈ}P‹EМСј‹Mј‹U П ŠЏС‹UМтџџ‹Mј‹u П ŽЏбСњТ‹Uј‹M ‹‘СњƒТбњЏUМТ‹Mј‹U ‰Šы™ЧEјы ‹EјƒР‰Eј‹Eј;E}‹Eј‹MПAПEШЏаСњ‹Mј‹E‰ˆыаƒ}Шu%hjЁƒРBPhjшƒФƒјuЬ‹E‹MШ‰ˆД_^[Ф$;ьш‹х]Уу„ъ€ѓ'њ#c’‹ц|э€і'§#"1ѕ$*$4* ёG*SKP_Silk_nsq_del_dec_scale_states$Рd € ]NSQ  psDelDec x tx_sc_Q10 tlength sLTP  tsLTP_Q16 $tsubfr! (tnStatesDelayedDecision ,tsmpl_buf_idx 0LTP_scale_Q14 4Gains_Q16 8pitchL дџџџtlag Шџџџtinv_gain_Q16 Мџџџtgain_adj_Q16 ьџџџtk ЄџџџpsDD јџџџti Аџџџtinv_gain_Q32 рџџџtscale_lengthђ`*)T{€€€4€[‚€g„€w…€€†€†ˆ€ЎŠ€й‹€Œ€>€@‘€R’€m”€‹•€š˜€ш›€œ€r€wž€“Ÿ€ё €OЁ€TЂ€YЇ€bЈ€Љ€—Ћ€ПЌ€­€А€+Б€VВ€ЄГ€ІИ€РЙ€нК€пН€ О€П€ xXx \x `x dx inv_gain_Q16 != 0{i < (20 * 24)U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E ~ ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФF ёq1G@.SKP_max_intФР € ta  tbђ0G`$щ€ъ€@ы€ ‹X‹ \‹ Д‹ И‹ U‹ьь(SVWНиўџџЙJИЬЬЬЬѓЋƒ} u%hjЁƒРPhjшƒФƒјuЬƒ}}%hjЁƒРPhjшƒФƒјuЬƒ}~ ‹E‰…шўџџы ‹Mїй‰шўџџ‹•шўџџRшƒФƒш‰Eј‹E‹Mјгр‰EШƒ} ~ ‹E ‰…шўџџы ‹M їй‰шўџџ‹•шўџџRшƒФƒш‰Eь‹E ‹Mьгр‰EМ‹MМСљИџџџ™їљ‰Eд‹EШСјПMдЏС‹UШтџџПMдЏбСњТ‰EА‹EМ™‹Ш‹ђ‹EА™RPVQшБ шСр‹UШ+а‰UШ‹EШСјПMдЏС‹UШтџџПMдЏбСњUАа‰UА‹EјƒР+Eь+E‰Eрƒ}р‹MрїйИ€гј‹MрїйКџџџгњ;Т~m‹MрїйИ€гј9EА~‹MрїйК€гњ‰•шўџџы:‹MрїйИџџџгј9EА}‹MрїйКџџџгњ‰•фўџџы ‹EА‰…фўџџ‹фўџџ‰шўџџ‹•шўџџ‰•рўџџыk‹MрїйИџџџгј9EА~‹MрїйКџџџгњ‰•мўџџы:‹MрїйИ€гј9EА}‹MрїйК€гњ‰•иўџџы ‹EА‰…иўџџ‹иўџџ‰мўџџ‹•мўџџ‰•рўџџ‹Mрїй‹…рўџџгрыыƒ}р } ‹EА‹Mргјыы3Р_^[Ф(;ьш‹х]У%Ђ,ž5š<#P–Wž`šg#˜ЋдЋ3Є:ЃЏ1ѕ$З( œ ё4ЗЃлSKP_DIV32_varQ(Рh € a32  b32 Qres ьџџџtb_headrm рџџџtlshift Аџџџtresult јџџџta_headrm Мџџџtb32_nrm Шџџџta32_nrm дџџџtb32_invђИЗјЌ„€ˆ€I‰€tŒ€Ѕ€АŽ€с€ь’€§•€"˜€I›€qž€€Ÿ€Š €Ё€Ђ€•Ѓ€ŸЄ€ЁІ€ЃЉ€ ’X’ \’ X’ \’ Qres >= 0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.h„b32 != 0U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E%џџt‹EСјPшƒФыыЗEPшƒФƒР_^[ФР;ьш‹х]У0ВAВW1ѕ$_Р  ёi4_KSKP_Silk_CLZ32РР € tin32ђH_<p€r€(s€9t€;u€Kw€ ЋXЋ \Ћ ЌЋ АЋ U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјПE…Рu ИщЂПE%џt0ПE%№tf‹EfСј f‰Eы‹EјƒР‰Eјf‹EfСјf‰Eы+ПE%№џt‹EјƒР‰Eјf‹EfСјf‰Eы ‹EјƒР ‰EјПEƒр tПEƒрt‹Eјы%ы‹EјƒРыыПEƒрt ‹EјƒРыы‹EјƒР_^[‹х]Уѕ$рЬ€  ё{4рй SKP_Silk_CLZ16ЬР € in16 јџџџtout32ђ№рфL€M€%N€-O€7R€BS€MT€YU€[V€dW€pY€rZ€}[€†\€’]€”^€b€Іc€Џd€Дe€Жf€Оg€Рh€Щi€бj€гk€йm€ ВXВ \В МВ РВ U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋh€‹E P‹MQшƒФ h€‹E €P‹MС€QшƒФ h€‹E €P‹MС€QшƒФ h€‹E P‹MСQшƒФ h€‹E P‹MСQшƒФ h€‹E‹M ”R‹E‹M”RшƒФ ‹E‹M ‹‘`‰`‹E‹M ‹‘d‰d‹E‹M ‹‘h‰h‹E‹M ‹‘l‰l_^[ФР;ьш‹х]У,!L!l!Œ!Ќ!е!01ѕ$8Р   ёЅA8$SKP_Silk_copy_del_dec_stateРР € DD_dst  DD_src tLPC_state_idxђx8 lЦ€Ч€3Ш€SЩ€sЪ€“Ы€ГЭ€мЮ€юЯ€а€б€$в€ ЙXЙ \Й шЙ ьЙ VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SPŽц.textK% 7R§=•.debug$SœДЖ $LN62$LN61$LN60&$LN590$LN585$LN57>$LN63Ь $LN64Ф .rdata8аcf›Ю .rdata4ЌВСcц‘_memcpy _memset Д .rdata”b€QeФ.dataј@‚.rdata 8yШЙЊ Zm | — __chkstk .rtc$TMZ Ь.LЎ Х .rtc$IMZ žz]д ы .text Gиьиоп„[Ќ.debug$S ф кJаˆњ .text‡*Цg˜b\b.debug$S` žћз| $LN64`$LN63n$LN62}$LN65<$LN664.rdataHћЇЫ/.rdata,яЊ№љ.rdataFц;Ѕ‡.rdata:ЭѕдŸW.rdata,6gY.rdata<ИŠаЃ.data 2жšm.rdata:с%…YГ.text* аƒ@цy.debug$SР~ЛЕšq  .rdata$_ИdЖ” .dataѓѓКП .rdataЎ.ŸO .textGСв UdЈЏ.debug$SфПVfН  .textЗ №ъэ VфЋЏ.debug$S Фѓ_ŽЪ  .rdata!љлЗ.к !.rdata"Œы, ".data#l!;bч #.rdata$ік–! $__allshr __allmul .text%_йIѕ=vЄёC.debug$S&є%:Яq‘b % .text'р}BИ#u‘ћ.debug$S(Ќ'бЛ5сr ' .text)8я)€ьšQЧЌ.debug$S*`)k™V‚ ) .debug$T+\Ÿ _SKP_Silk_NSQ_del_dec??_C@_1DI@LHFBDJGG@?$AAH?$AAa?$AAr?$AAm?$AAS?$AAh?$AAa?$AAp?$AAe?$AAG?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA4?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_Silk_MA_Prediction??_C@_1DE@FABFECOD@?$AAp?$AAs?$AAD?$AAe?$AAl?$AAD?$AAe?$AAc?$AA?$FL?$AA?5?$AAi?$AA?5?$AA?$FN?$AA?4?$AAR?$AAD?$AA_?$AAQ?$AA1?$AA0?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_Silk_Quantization_Offsets_Q10__CrtDbgReportW??_C@_1JE@OAFNKFMA@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_NSQ_del_dec@@9@9??_C@_1DI@JFPPCDKE@?$AAN?$AAS?$AAQ?$AA?9?$AA?$DO?$AAp?$AAr?$AAe?$AAv?$AA_?$AAi?$AAn?$AAv?$AA_?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_min_int_SKP_Silk_noise_shape_quantizer_del_dec??_C@_1EI@OKPGODFG@?$AAp?$AAs?$AAS?$AAa?$AAm?$AAp?$AAl?$AAe?$AAS?$AAt?$AAa?$AAt?$AAe?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?$FL?$AA?5?$AA0?$AA?5?$AA?$FN?$AA?4?$AAR?$AAD?$AA_?$AAQ?$AA1?$AA0?$AA?5?$AA?$DO@??_C@_1CM@IMHBJNAM@?$AAs?$AAh?$AAa?$AAp?$AAi?$AAn?$AAg?$AAL?$AAP?$AAC?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA1?$AA2?$AA?$AA@??_C@_1EG@KKJLEIMK@?$AA?$CI?$AA?5?$AA?$CI?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?$CJ?$AAA?$AAR?$AA_?$AAs?$AAh?$AAp?$AA_?$AAQ?$AA1?$AA3?$AA?5?$AA?$CG?$AA?5?$AA3?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN@??_C@_1DK@KGPFGICO@?$AA?$CI?$AA?5?$AAs?$AAh?$AAa?$AAp?$AAi?$AAn?$AAg?$AAL?$AAP?$AAC?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$CG?$AA?5?$AA1?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CM@HIICPONF@?$AAp?$AAr?$AAe?$AAd?$AAi?$AAc?$AAt?$AAL?$AAP?$AAC?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA1?$AA0?$AA?$AA@??_C@_1DM@CLHAPMEP@?$AA?$CI?$AA?5?$AA?$CI?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?$CJ?$AAa?$AA_?$AAQ?$AA1?$AA2?$AA?5?$AA?$CG?$AA?5?$AA3?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@?__LINE__Var@?1??SKP_Silk_noise_shape_quantizer_del_dec@@9@9@ef08ea6f??_C@_1DK@GAKELIAC@?$AA?$CI?$AA?5?$AAp?$AAr?$AAe?$AAd?$AAi?$AAc?$AAt?$AAL?$AAP?$AAC?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$CG?$AA?5?$AA1?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_Silk_nsq_del_dec_scale_states??_C@_1CE@CDCNPFHF@?$AAi?$AAn?$AAv?$AA_?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@?__LINE__Var@?1??SKP_Silk_nsq_del_dec_scale_states@@9@9@ef08ea6f??_C@_1BM@OAKBINLI@?$AAi?$AA?5?$AA?$DM?$AA?5?$AA?$CI?$AA2?$AA0?$AA?5?$AA?$CK?$AA?5?$AA2?$AA4?$AA?$CJ?$AA?$AA@_SKP_max_int_SKP_DIV32_varQ??_C@_1BE@NOJNLPIL@?$AAQ?$AAr?$AAe?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1IM@NKJIPJPB@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_DIV32_varQ@@9@9@ef08ea6f??_C@_1BC@LJHCOKEE@?$AAb?$AA3?$AA2?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_Silk_CLZ32_SKP_Silk_CLZ16_SKP_Silk_copy_del_dec_state/2036 1273638393 100666 28667 ` L%љ-ъKlYЄ.drectveAм .debug$SШх@B.textљ†! P`.debug$SјŠ"‚'@B.rdata8,(@0@.rdata„d(@@@.dataш(@0Р.rdata8ь(@0@.rtc$TMZ$)()@0@.rtc$IMZ2)6)@0@.texte@)Ѕ9' P`.debug$St+;ŸC @B.rdata0!D@0@.rdata,QD@0@.rdataF}D@@@.rdata:УD@0@.rdata,§D@0@.rdata<)E@0@.dataeE@0Р.rdata:iE@0@.textжЃEyI P`.debug$SПIЧL@B.dataљL@0Р.rdata$§L@0@.textG!M P`.debug$SфhMLN@B.textЗ~N5Q P`.debug$SЗQЧS@B.rdataљS@0@.rdataŒ T@@@.data™T@0Р.rdataT@0@.text_ЏTU P`.debug$Sє,U V@B.textрRV P`.debug$SЌ2WоX@B.debug$T\Y@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёyLJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_NSQ.obj:<!ovovMicrosoft (R) Optimizing Compilerэ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_NSQ.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёш. lSKP_Silk_Quantization_Offsets_Q10"@SA_Method"SA_ParameterTSKP_SILK_LBRR_structKSKP_Silk_encoder_stateRSKP_Silk_LP_state+SKP_Silk_VAD_state!wchar_tSKP_Silk_nsq_state‹SKP_Silk_encoder_control"SA_AttrTargetsSKP_Silk_NLSF_CBS usize_t!ЧSKP_Silk_range_coder_stateSKP_Silk_nsq_stateTSKP_SILK_LBRR_struct+SKP_Silk_VAD_state!ЧSKP_Silk_range_coder_state PSKP_Silk_detect_SWB_stateRSKP_Silk_LP_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structKSKP_Silk_encoder_state‹SKP_Silk_encoder_control PSKP_Silk_detect_SWB_state|SKP_Silk_NLSF_CB_structєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlї—†_щ™мБИВ’cМYU 9’Џ‹ц+7 @#nŽи,ˆ{„(yFiдz<G;1=1ѓч j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nsq.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 6688 - ^ = $23 $T0 6692 - ^ = $24 $T0 6696 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 564 - ^ = $23 $T0 568 - ^ = $24 $T0 572 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 272 - ^ = $23 $T0 276 - ^ = $24 $T0 280 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 300 - ^ = $23 $T0 304 - ^ = $24 $T0 308 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = ˜ œ U‹ьИшSVWНфхџџЙ‡ИЬЬЬЬѓЋЁ3Х‰Eќ‹E‹€Ь™ƒтТСј‰Eа‹E‹M ‹QX‰А‹E‹ˆЄ‰Mш‹EƒИДu&hj‹ ƒСQhjшƒФƒјuЬ‹E ‹Hh‹U ‹BdбрПŒˆ‰ьшџџƒ}u ЧEФыЧEФ‹E‹M‹‘Ь‰Ќ‹E‹M‹‘Ь‰Ј‹E‹ˆЬ‹UJ‰E”ЧEєы ‹EєƒР‰Eєƒ}єe‹EєбјЙ+MФ ССр‹U B‰EИ‹EєkР‹M$A‰UЌ‹EєСр‹M(A‰U ‹Eє‹M,ƒ<}&hj‹ƒТ%RhjшƒФƒјuЬ‹Eє‹M,‹Сњ‰•јшџџ‹Eє‹M,‹бњСт •јшџџ‰•јшџџ‹E ƒxh…Н‹Eє‹M ‹Tl‰Uш‹EЧ€И‹EФбрЙ+Ш#Mє…Ž‹E‹ˆЬ+Mш‹U+Šќƒщ‰Mм‹E‹M‹Ь+‘ќyfƒ}м~ Ч…єхџџыF‹E‹M‹Ь+‘ќ9Uм}‹E‹M‹Ь+‘ќ‰•№хџџы ‹Eм‰…№хџџ‹№хџџ‰єхџџ‹•єхџџ‰•ьхџџыd‹E‹M‹Ь+‘ќ9Uм~‹E‹M‹Ь+‘ќ‰•шхџџы'ƒ}м} Ч…фхџџы ‹Eм‰…фхџџ‹фхџџ‰шхџџ‹•шхџџ‰•ьхџџ‹…ьхџџ‰Eм‹E‹ˆќСсQj•ЄшџџRшƒФ ‹E‹ˆќQ‹U‹‚Ь+EмP‹Mм”MщџџR…ЄшџџP‹MИQ‹U‹‚ЬСјЏEєEм‹MARшƒФ‹EЧ€И‹E‹M‹‘Ь‰Ј‹E ƒРlP‹M8Q‹U@R‹EєPŒ№џџQ•щџџR‹E‹ˆаQ•МцџџR‹EP‹MQшƒФ(‹E‹ˆќQ‹U‹‚јP‹M‹‘аR‹…ьшџџP‹M= 0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nsq.cRNSQ->prev_inv_gain_Q16 != 038U‹ьь0SVWНа§џџЙŒИЬЬЬЬѓЋЁ3Х‰Eќ‹E‹ˆЌ+M,‹U„Š„‰…јўџџ‹E‹ˆЈ+M,‹UDЉ…ьўџџ‹EМ‰…џџџ‹E@бјЙњџџ+Ш‰|џџџ‹E@бјЙўџџ+Ш‰pџџџПEDПM@ЏССј …pџџџ‰…pџџџ‹E@бј‰…dџџџ‹EPбрP‹M Q•ФўџџRшƒФ ‹ELбрP‹M(Q•œўџџRшƒФ ЧEєы ‹EєƒР‰Eє‹Eє;EHв‹E‹ˆАiЩ5„Г Сkc6‹U‰ŠА‹E‹ˆАСљ‰Lџџџ‹EPƒрt&hj‹ ƒС$QhjшƒФƒјuЬ‹E ™ƒрƒт‰…а§џџ‰•д§џџ‹…а§џџ …д§џџt&hj‹ ƒС%QhjшƒФƒјuЬƒ}P }%hjЁƒР&PhjшƒФƒјuЬ‹…Фўџџ‰…Xџџџ‹…џџџ‹СљП•XџџџЏЪ‹…џџџ‹тџџП…XџџџЏаСњЪ‰Mа‹…џџџ‹HќСљ‹•XџџџСњЏЪMа‹…џџџ‹Pќтџџ‹…XџџџСјЏаСњЪ‰Mа‹…Шўџџ‰…Xџџџ‹…џџџ‹HјСљП•XџџџЏЪ‹…џџџ‹PјтџџП…XџџџЏаСњUаб‰Uа‹…џџџ‹HєСљ‹•XџџџСњЏЪMа‹…џџџ‹Pєтџџ‹…XџџџСјЏаСњЪ‰Mа‹…Ьўџџ‰…Xџџџ‹…џџџ‹H№СљП•XџџџЏЪ‹…џџџ‹P№тџџП…XџџџЏаСњUаб‰Uа‹…џџџ‹HьСљ‹•XџџџСњЏЪMа‹…џџџ‹Pьтџџ‹…XџџџСјЏаСњЪ‰Mа‹…аўџџ‰…Xџџџ‹…џџџ‹HшСљП•XџџџЏЪ‹…џџџ‹PштџџП…XџџџЏаСњUаб‰Uа‹…џџџ‹HфСљ‹•XџџџСњЏЪMа‹…џџџ‹Pфтџџ‹…XџџџСјЏаСњЪ‰Mа‹…дўџџ‰…Xџџџ‹…џџџ‹HрСљП•XџџџЏЪ‹…џџџ‹PртџџП…XџџџЏаСњUаб‰Uа‹…џџџ‹HмСљ‹•XџџџСњЏЪMа‹…џџџ‹Pмтџџ‹…XџџџСјЏаСњЪ‰MаЧEш ы ‹EшƒР‰Eш‹Eш;EPЅ‹Eшбј‹Œ…Фўџџ‰Xџџџ‹Eшїи‹џџџ‹СњП…XџџџЏа‹Mшїй‹…џџџ‹ ˆсџџП…XџџџЏШСљMаЪ‰Mа‹Eшїи‹џџџ‹TќСњ‹…XџџџСјЏаUа‹Mшїй‹…џџџ‹Lˆќсџџ‹…XџџџСјЏШСљб‰UащFџџџƒ} …'‹…ьўџџ‹Сљ‹U$ПЏШ‹•ьўџџ‹%џџ‹U$ПЏТСјШ‰Mм‹…ьўџџ‹HќСљ‹U$ПBЏШ‹•ьўџџ‹Bќ%џџ‹U$ПRЏТСјEмС‰Eм‹…ьўџџ‹HјСљ‹U$ПBЏШ‹•ьўџџ‹Bј%џџ‹U$ПRЏТСјEмС‰Eм‹…ьўџџ‹HєСљ‹U$ПBЏШ‹•ьўџџ‹Bє%џџ‹U$ПRЏТСјEмС‰Eм‹…ьўџџ‹H№Сљ‹U$ПBЏШ‹•ьўџџ‹B№%џџ‹U$ПRЏТСјEмС‰Eм‹…ьўџџƒР‰…ьўџџыЧEм‹ELƒрt&hj‹ ƒСPQhjшƒФƒјuЬ‹E(™ƒрƒт‰…а§џџ‰•д§џџ‹…а§џџ …д§џџt&hj‹ ƒСQQhjшƒФƒјuЬƒ}L }%hjЁƒРRPhjшƒФƒјuЬ‹…œўџџ‰…Xџџџ‹…џџџ‹СљП•XџџџЏЪ‹…џџџ‹тџџП…XџџџЏаСњЪ‰MФ‹…џџџ‹HќСљ‹•XџџџСњЏЪMФ‹…џџџ‹Pќтџџ‹…XџџџСјЏаСњЪ‰MФ‹… ўџџ‰…Xџџџ‹…џџџ‹HјСљП•XџџџЏЪ‹…џџџ‹PјтџџП…XџџџЏаСњUФб‰UФ‹…џџџ‹HєСљ‹•XџџџСњЏЪMФ‹…џџџ‹Pєтџџ‹…XџџџСјЏаСњЪ‰MФ‹…Єўџџ‰…Xџџџ‹…џџџ‹H№СљП•XџџџЏЪ‹…џџџ‹P№тџџП…XџџџЏаСњUФб‰UФ‹…џџџ‹HьСљ‹•XџџџСњЏЪMФ‹…џџџ‹Pьтџџ‹…XџџџСјЏаСњЪ‰MФ‹…Јўџџ‰…Xџџџ‹…џџџ‹HшСљП•XџџџЏЪ‹…џџџ‹PштџџП…XџџџЏаСњUФб‰UФ‹…џџџ‹HфСљ‹•XџџџСњЏЪMФ‹…џџџ‹Pфтџџ‹…XџџџСјЏаСњЪ‰MФ‹…Ќўџџ‰…Xџџџ‹…џџџ‹HрСљП•XџџџЏЪ‹…џџџ‹PртџџП…XџџџЏаСњUФб‰UФ‹…џџџ‹HмСљ‹•XџџџСњЏЪMФ‹…џџџ‹Pмтџџ‹…XџџџСјЏаСњЪ‰MФ‹…Аўџџ‰…Xџџџ‹…џџџ‹HиСљП•XџџџЏЪ‹…џџџ‹PитџџП…XџџџЏаСњUФб‰UФ‹…џџџ‹HдСљ‹•XџџџСњЏЪMФ‹…џџџ‹Pдтџџ‹…XџџџСјЏаСњЪ‰MФЧEш ы ‹EшƒР‰Eш‹Eш;ELЅ‹Eшбј‹Œ…œўџџ‰Xџџџ‹Eшїи‹џџџ‹СњП…XџџџЏа‹Mшїй‹…џџџ‹ ˆсџџП…XџџџЏШСљMФЪ‰MФ‹Eшїи‹џџџ‹TќСњ‹…XџџџСјЏаUФ‹Mшїй‹…џџџ‹Lˆќсџџ‹…XџџџСјЏШСљб‰UФщFџџџ‹EФбј‰EФ‹E‹ˆ СљПU4ЏЪ‹E‹ тџџПE4ЏаСњUФб‰UФ‹E‹ˆЌ‹U‹„Š|СјПM8ЏС‹U‹ŠЌ‹U‹ŒŠ|сџџПU8ЏЪСљССр‰EЌ‹E‹ˆ Сљ‹U8СњЏЪMЌ‹E‹ тџџ‹E8СјЏаСњЪ‰MЌƒ},+ƒ} t%hjЁƒРrPhjшƒФƒјuЬƒ},Ž’‹…јўџџ‹‹•јўџџJјСљПE0ЏШ‹•јўџџ‹‹•јўџџBј%џџПU0ЏТСјШ‰MИ‹…јўџџ‹HќСљ‹U0СњЏЪMИ‹…јўџџ‹Pќтџџ‹E0СјЏаСњЪ‰MИ‹…јўџџƒР‰…јўџџ‹EИСр‰EИыЧEИ‹Eм+EИ‰…џџџ‹…џџџСјƒРбј‰…џџџ‹…џџџEа‰…џџџ‹…џџџ+EФ‰…џџџ‹…џџџ+EЌ‰…џџџ‹Eє‹M‹+•џџџ‰U ‹E 3…Lџџџ+…Lџџџ‰E ‹E +ED‰E } ~ Ч…д§џџы*} џџ} Ч…а§џџџџы ‹E ‰…а§џџ‹а§џџ‰д§џџ‹•д§џџ‰U ‹E ;…|џџџ}‹E@бјE Сј ƒРбј‰E”‹E”Ср ‰EˆыT‹E ;…pџџџ}ЧE”џџџџЧEˆќџџы9‹E ;…dџџџ~ ‹E@бј‹M +ШСљ ƒСбљ‰M”‹E”Ср ‰EˆыЧE”ЧEˆ‹Eє‹M‹U”‰‹EˆED‰…@џџџ‹…@џџџ3…Lџџџ+…Lџџџ‰…@џџџ‹EмСјƒРбј…@џџџ‰…4џџџ‹…4џџџEа‰…(џџџ‹…(џџџСјПM<ЏС‹•(џџџтџџПM<ЏбСњТ‹U<СњƒТбњЏ•(џџџТСј ƒРбј=џ~Ч…д§џџџщ­‹…(џџџСјПM<ЏС‹•(џџџтџџПM<ЏбСњТ‹U<СњƒТбњЏ•(џџџТСј ƒРбј=€џџ} Ч…а§џџ€џџыJ‹…(џџџСјПM<ЏС‹•(џџџтџџПM<ЏбСњТ‹U<СњƒТбњЏ•(џџџТСј ƒРбј‰…а§џџ‹…а§џџ‰…д§џџ‹Mє‹Uf‹…д§џџf‰J‹…џџџƒР‰…џџџ‹…(џџџСр‹џџџ‰‹…(џџџ+EФ‰…џџџ‹…џџџСр‹M‰ ‹…џџџ+EЌ‹M‹‘Ќ‹M‰„‘€‹…4џџџСр‹M‹‘Ј‹M‰‘‹E‹ˆЌƒС‹U‰ŠЌ‹E‹ˆЈƒС‹U‰ŠЈ‹E‹ˆА‹Uє‹E ‹U‰ŠАщёџџj@‹EH‹M”€R‹E€PшƒФ R‹ЭPшXZ_^[‹Mќ3ЭшФ0;ьш‹х]УФўџџ œўџџ AR_shp_Q13_tmpa_Q12_tmp*ЫфBcJ_S!ZŒ[”_!ЄИWП_Ш!ЯoSw_€!‡ЙOС_Ъ!бхKь_ѕ!ќЈ GЏ _И !П ѕC-,#+0B<AH@ѕ$e0L;( ёKDe(e(SKP_Silk_noise_shape_quantizer0Рp … :ќџџџ     ]NSQ  tsigtype x_sc_Q10 tq xq tsLTP_Q16  a_Q12 $b_Q14 (AR_shp_Q13 ,tlag! 0tHarmShapeFIRPacked_Q14 4tTilt_Q14 8tLF_shp_Q14 <tGain_Q16 @tLambda_Q10 Dtoffset_Q10 Htlength LtshapingLPCOrder PtpredictLPCOrder шџџџtj Lџџџtdither (џџџtxq_Q10 ˆџџџtq_Q10 јўџџtshp_lag_ptr |џџџtthr1_Q10 @џџџtexc_Q10 Иџџџtn_LTP_Q14 œўџџбAR_shp_Q13_tmp XџџџtAtmp ”џџџtq_Q0 ьўџџtpred_lag_ptr Фўџџбa_Q12_tmp мџџџtLTP_pred_Q14 џџџttmp pџџџtthr2_Q10 4џџџtLPC_exc_Q10 џџџtpsLPC_Q14 dџџџtthr3_Q10 џџџtsLF_AR_shp_Q10 єџџџti аџџџtLPC_pred_Q10 Фџџџtn_AR_Q10  џџџtr_Q10 Ќџџџtn_LF_Q10ђшezмП€(Ы€DЬ€]Я€kв€}г€д€Ље€Йи€вй€ыл€ н€'р€9у€gф€Бх€мь€шэ€ю€[я€g№€Ёё€пђ€ыѓ€%є€cѕ€oі€Љї€чј€ѓљ€-њ€kћ€‰ќ€›§€пў€)џ€.€8€j€Ѓ€м€€N €] €_ €f€”€о€ €€J€ˆ€”€Ю€ €€R€€œ€ж€ € !€Z "€˜ #€Є $€о %€ &€: '€L (€ )€к *€п +€ч ,€ .€c /€› 1€Ь 4€ж 6€ 7€N 8€] 9€f :€h ;€o @€{ A€ B€ž C€­ D€М E€Ю I€р J€щ K€1 N€< O€O P€Z Q€e R€l S€u T€€ U€• V€ž W€  X€Ї Y€Ў [€К ^€Ц _€о b€ѕ c€f€j€+k€<l€Km€]o€yp€‘q€Іr€Лu€жv€лx€ќy€ ?X? \? АA ДA П@ У@ ЮB вB нC сC Œ? ? lag > 0 || sigtype == 1shapingLPCOrder >= 12( (long long)AR_shp_Q13 & 3 ) == 0( shapingLPCOrder & 1 ) == 0predictLPCOrder >= 10( (long long)a_Q12 & 3 ) == 0П( predictLPCOrder & 1 ) == 0U‹ьь SVWНєўџџЙCИЬЬЬЬѓЋ‹E ‹M(‹ бљИџџџ™їљ‰Eд}дџ} ‹Eд‰…єўџџы Ч…єўџџџ‹єўџџ‰Mд‹E ‹M,‹‰Uр‹EƒИИ„›‹EдСр‰EМƒ} u(‹EМСјПM$ЏС‹UМтџџПM$ЏбСњТСр‰EМ‹E‹ˆЈ+Mрƒщ‰Mјы ‹EјƒР‰Eј‹E‹Mј;ˆЈ}9‹EМСј‹Mј‹UП JЏС‹UМтџџ‹Mј‹uП NЏбСњТ‹Uј‹M‰‘ыА‹EСр‰Eь‹E ƒРЙ+ШПбПEЏа‹Mь+Ъ‰Mь‹EрƒРP‹MьQшƒФ‰Eь‹E‹Mд;ˆД„№j‹E‹ˆДQ‹UдRшƒФ ‰EШ‹E‹ˆЌ+Mь‰Mјы ‹EјƒР‰Eј‹E‹Mј;ˆЌ}`‹EШСј‹Mј‹UПŒŠ€ЏС‹UШтџџ‹Mј‹uПŒŽ€ЏбСњТ‹Uј‹M‹”‘€СњƒТбњЏUШТ‹Mј‹U‰„Š€ы‰‹EƒИИu{‹E‹ˆЈ+Mрƒщ‰Mјы ‹EјƒР‰Eј‹E‹Mј;ˆЈ}P‹EШСј‹Mј‹UП ŠЏС‹UШтџџ‹Mј‹uП ŽЏбСњТ‹Uј‹M‹‘СњƒТбњЏUШТ‹Mј‹U‰Šы™‹EШСј‹MП‘ ЏТ‹MШсџџ‹UП’ ЏЪСљС‹M‹‘ СњƒТбњЏUШТ‹M‰ ЧEјы ‹EјƒР‰Eјƒ}ј}`‹EШСј‹Mј‹UПŒŠ€ЏС‹UШтџџ‹Mј‹uПŒŽ€ЏбСњТ‹Uј‹M‹”‘€СњƒТбњЏUШТ‹Mј‹U‰„Š€ы‘ЧEјы ‹EјƒР‰Eј‹Eј;E}‹Eј‹M ПAПEдЏаСњ‹Mј‹E‰ˆыаƒ}дu%hjЁƒР5PhjшƒФƒјuЬ‹E‹Mд‰ˆД_^[Ф ;ьш‹х]УFys€’r™nЂ!ЉЮ+ѕ$ж (­ ёІ?жТ%SKP_Silk_nsq_scale_states РL € ]NSQ  x tx_sc_Q10 tlength sLTP tsLTP_Q16  tsubfr $LTP_scale_Q14 (Gains_Q16 ,pitchL рџџџtlag дџџџtinv_gain_Q16 Шџџџtgain_adj_Q16 јџџџti Мџџџtinv_gain_Q32 ьџџџtscale_lengthђ ж!‡€‹€4Œ€[€g€w‘€€’€†”€Ў–€й—€˜€œ€€:ž€PЁ€bЂ€}Є€ЅЅ€І€Љ€Њ€<Ћ€ŠЌ€ŒЎ€кБ€ђВ€PГ€RЗ€lИ€‰Й€‹М€ЖН€ТО€ jXj \j шj ьj ‡inv_gain_Q16 != 0U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E ~ ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФ ёq1G@.SKP_max_intФР € ta  tbђ0G`$щ€ъ€@ы€ yXy \y Дy Иy U‹ьь(SVWНиўџџЙJИЬЬЬЬѓЋƒ} u%hjЁƒРPhjшƒФƒјuЬƒ}}%hjЁƒРPhjшƒФƒјuЬƒ}~ ‹E‰…шўџџы ‹Mїй‰шўџџ‹•шўџџRшƒФƒш‰Eј‹E‹Mјгр‰EШƒ} ~ ‹E ‰…шўџџы ‹M їй‰шўџџ‹•шўџџRшƒФƒш‰Eь‹E ‹Mьгр‰EМ‹MМСљИџџџ™їљ‰Eд‹EШСјПMдЏС‹UШтџџПMдЏбСњТ‰EА‹EМ™‹Ш‹ђ‹EА™RPVQшБ шСр‹UШ+а‰UШ‹EШСјПMдЏС‹UШтџџПMдЏбСњUАа‰UА‹EјƒР+Eь+E‰Eрƒ}р‹MрїйИ€гј‹MрїйКџџџгњ;Т~m‹MрїйИ€гј9EА~‹MрїйК€гњ‰•шўџџы:‹MрїйИџџџгј9EА}‹MрїйКџџџгњ‰•фўџџы ‹EА‰…фўџџ‹фўџџ‰шўџџ‹•шўџџ‰•рўџџыk‹MрїйИџџџгј9EА~‹MрїйКџџџгњ‰•мўџџы:‹MрїйИ€гј9EА}‹MрїйК€гњ‰•иўџџы ‹EА‰…иўџџ‹иўџџ‰мўџџ‹•мўџџ‰•рўџџ‹Mрїй‹…рўџџгрыыƒ}р } ‹EА‹Mргјыы3Р_^[Ф(;ьш‹х]У%,Œ5ˆ<P„WŒ`ˆg˜™д™3’:‘Џ+ѕ$З( ‘ ё4ЗЃлSKP_DIV32_varQ(Рh € a32  b32 Qres ьџџџtb_headrm рџџџtlshift Аџџџtresult јџџџta_headrm Мџџџtb32_nrm Шџџџta32_nrm дџџџtb32_invђИЗјЌ„€ˆ€I‰€tŒ€Ѕ€АŽ€с€ь’€§•€"˜€I›€qž€€Ÿ€Š €Ё€Ђ€•Ѓ€ŸЄ€ЁІ€ЃЉ€ €X€ \€ X€ \€ Qres >= 0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.h„b32 != 0U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E%џџt‹EСјPшƒФыыЗEPшƒФƒР_^[ФР;ьш‹х]У0 A W+ѕ$_Р  ёi4_KSKP_Silk_CLZ32РР € tin32ђH_<p€r€(s€9t€;u€Kw€ ™X™ \™ Ќ™ А™ U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјПE…Рu ИщЂПE%џt0ПE%№tf‹EfСј f‰Eы‹EјƒР‰Eјf‹EfСјf‰Eы+ПE%№џt‹EјƒР‰Eјf‹EfСјf‰Eы ‹EјƒР ‰EјПEƒр tПEƒрt‹Eјы%ы‹EјƒРыыПEƒрt ‹EјƒРыы‹EјƒР_^[‹х]Уѕ$рЬu  ё{4рй SKP_Silk_CLZ16ЬР € in16 јџџџtout32ђ№рфL€M€%N€-O€7R€BS€MT€YU€[V€dW€pY€rZ€}[€†\€’]€”^€b€Іc€Џd€Дe€Жf€Оg€Рh€Щi€бj€гk€йm€  X  \  М  Р  VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SШІѓcŠ.text‰Nl/› .debug$Sј№ЮђЬ $LN25l$LN24u$LN23$LN22„$LN26<$LN274_memcpy  _memset .rdata8аcf›*о .rdata„‹д.data)ЧaЬ.rdata8yШЙяŸВ С м __chkstk .rtc$TMZ Ь.Lѓ   .rtc$IMZ žz] 0 .text e'‰књaчй‡.debug$S t Чђg? $LN38L $LN37[ $LN394 $LN40, .rdata 0‚ЙdЖ_ .rdata,яЊ№.rdataFц;Ѕ’.rdata:ЭѕдŸb.rdata,6gY .rdata<ИŠаЎ.dataЬ^Ex.rdata:с%…YЖ.textжH‰ё–ф.debug$Sъ•уt .dataЕфLq.rdata$_ИdЖШ.textGСв UdЈЏ.debug$SфПVfB  .textЗ №ъэ rю…Ж.debug$SФѓ_ŽO  .rdataљлЗ._ .rdataŒыБ .datal!;bl .rdata ік–!š __allshr __allmul .text!_йIѕ=vЄёC.debug$S"є!:Яq‘ч ! .text#р}BИ#u‘ћ.debug$S$Ќ#бЛ5сї # .debug$T%\ _SKP_Silk_NSQ_SKP_Silk_MA_Prediction??_C@_1DI@LHFBDJGG@?$AAH?$AAa?$AAr?$AAm?$AAS?$AAh?$AAa?$AAp?$AAe?$AAG?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA4?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_Silk_Quantization_Offsets_Q10__CrtDbgReportW??_C@_1IE@DPKCPBGA@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_NSQ@@9@9??_C@_1DI@JFPPCDKE@?$AAN?$AAS?$AAQ?$AA?9?$AA?$DO?$AAp?$AAr?$AAe?$AAv?$AA_?$AAi?$AAn?$AAv?$AA_?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_noise_shape_quantizer??_C@_1DA@LLBDPFOI@?$AAl?$AAa?$AAg?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AAs?$AAi?$AAg?$AAt?$AAy?$AAp?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA1?$AA?$AA@??_C@_1CM@IMHBJNAM@?$AAs?$AAh?$AAa?$AAp?$AAi?$AAn?$AAg?$AAL?$AAP?$AAC?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA1?$AA2?$AA?$AA@??_C@_1EG@KKJLEIMK@?$AA?$CI?$AA?5?$AA?$CI?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?$CJ?$AAA?$AAR?$AA_?$AAs?$AAh?$AAp?$AA_?$AAQ?$AA1?$AA3?$AA?5?$AA?$CG?$AA?5?$AA3?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN@??_C@_1DK@KGPFGICO@?$AA?$CI?$AA?5?$AAs?$AAh?$AAa?$AAp?$AAi?$AAn?$AAg?$AAL?$AAP?$AAC?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$CG?$AA?5?$AA1?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CM@HIICPONF@?$AAp?$AAr?$AAe?$AAd?$AAi?$AAc?$AAt?$AAL?$AAP?$AAC?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA1?$AA0?$AA?$AA@??_C@_1DM@CLHAPMEP@?$AA?$CI?$AA?5?$AA?$CI?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?$CJ?$AAa?$AA_?$AAQ?$AA1?$AA2?$AA?5?$AA?$CG?$AA?5?$AA3?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@?__LINE__Var@?1??SKP_Silk_noise_shape_quantizer@@9@9@7adc298a??_C@_1DK@GAKELIAC@?$AA?$CI?$AA?5?$AAp?$AAr?$AAe?$AAd?$AAi?$AAc?$AAt?$AAL?$AAP?$AAC?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$CG?$AA?5?$AA1?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_Silk_nsq_scale_states?__LINE__Var@?1??SKP_Silk_nsq_scale_states@@9@9@7adc298a??_C@_1CE@CDCNPFHF@?$AAi?$AAn?$AAv?$AA_?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_max_int_SKP_DIV32_varQ??_C@_1BE@NOJNLPIL@?$AAQ?$AAr?$AAe?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1IM@NKJIPJPB@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_DIV32_varQ@@9@9@7adc298a??_C@_1BC@LJHCOKEE@?$AAb?$AA3?$AA2?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_Silk_CLZ32_SKP_Silk_CLZ16 /2066 1273638393 100666 25028 ` Lљ-ъK Q‡.drectveAL .debug$SФ@B.text.Q5A P`.debug$S˜ 8ЁA!@B.rdatahыB@@@.rdata>SC@0@.rdata&‘C@0@.rdataЗC@0@.rdataЭC@0@.rdataЎхC@@@.data“D@0Р.rdata4—D@0@.rtc$TMZЫDЯD@0@.rtc$IMZйDнD@0@.text_чDFE P`.debug$SєdEXF@B.textрŠF P`.debug$SЌjGI@B.textGHI P`.debug$SрIoJ@B.textGЁJ P`.debug$SршJШK@B.textяњKщL P`.debug$S”/MУN @B.textyEOОO P`.debug$S@вOQ@B.debug$T\DQ@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёЃaJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_noise_shape_analysis_FIX.obj:<!ovovMicrosoft (R) Optimizing Compiler=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_noise_shape_analysis_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё"@SA_Method"SA_Parameter PSKP_Silk_detect_SWB_state|SKP_Silk_NLSF_CB_structTSKP_SILK_LBRR_structKSKP_Silk_encoder_stateRSKP_Silk_LP_state#mSKP_Silk_encoder_control_FIX+SKP_Silk_VAD_state!wchar_t!„SKP_Silk_predict_state_FIX!cSKP_Silk_encoder_state_FIXSKP_Silk_nsq_state‹SKP_Silk_encoder_control#‡SKP_Silk_prefilter_state_FIX"SA_AttrTargetsSKP_Silk_NLSF_CBS‰SKP_Silk_shape_state_FIX usize_t!ЧSKP_Silk_range_coder_stateSKP_Silk_nsq_stateTSKP_SILK_LBRR_struct+SKP_Silk_VAD_state!ЧSKP_Silk_range_coder_state PSKP_Silk_detect_SWB_stateRSKP_Silk_LP_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structKSKP_Silk_encoder_state‹SKP_Silk_encoder_control‰SKP_Silk_shape_state_FIX#‡SKP_Silk_prefilter_state_FIX!„SKP_Silk_predict_state_FIX!cSKP_Silk_encoder_state_FIX#mSKP_Silk_encoder_control_FIXєpprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡ІkкKэфЖ'Šџм4'rƒ[~е*Јн­Wыћ%iАлУД‰ >GO“VРА,пч@ў,^žїY†ЗLŽ_Ы'_P0kЛY№x гbќ:Tи™Ж+Ы §љГ#u8^s.йxХЙSUжпCkhHPTЊŒ3їГГјї…(yFiдz<G;1=1ЧЬXўrToрџЊtЩ Щ}*Мj_П#ХuХДR†(KАз"Ќшš>šљ%?dl‘bN'0 сwK:{rCЉiш’Џ‹ц+7 @#nŽи,ˆ{ѓp j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_perceptual_parameters_fix.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_noise_shape_analysis_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 1576 - ^ = $23 $T0 1580 - ^ = $24 $T0 1584 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 232 - ^ = $23 $T0 236 - ^ = $24 $T0 240 - ^ = U‹ьь$SVWНмљџџЙ‰ИЬЬЬЬѓЋЁ3Х‰Eќ‹E\a‰EєЧEЌ‹E‹ˆи‹U J‹UП‚ФkРбр+Ш‹U‹‚Ь™ƒтТСјA‰…ћџџ‹E‹ˆ$ЄСсСљiЩЭ ‹U‹‚$ЄСр%џџiРЭ СјШ‹U‹‚Є+С‹M ‰l‹EИ(Є€~‹E‹ˆ8Єбљ‹U ‹‚l+С‹M ‰l‹E ‹ˆx‹U Š|Сљ‹E ‰ˆ`‹E ‹ˆlщ СљƒСбљQшƒФбј‹U ‰‚d‹EЙ+ˆ(Є‰дўџџ‹…дўџџСрСјПдўџџЏС‹•дўџџСттџџПдўџџЏбСњТ‰…дўџџП…дўџџkРєСј‹M ‹‘`Т@Сњ‹M П‰dЏб‹M ‹‰`С@сџџ‹u ПЖdЏЮСљбПвЏТПдўџџkЩєсџџ‹U ‹’`Т@Сњ‹u ПЖdЏж‹u ‹Ж`Ц@цџџ‹} ППdЏїСўжПвЏЪСљС‹M l‰E”‹E ƒxhu*‹EПˆЄkЩ‹UП‚ЄСр СјE”С‰E”щŠ‹E ПˆlkЩў‹U П‚liРhfСјŒ Сљ‹U И@+‚`ПаЏЪ‹E Пlkвў‹E П€liРhfСј” тџџ‹E О@+А`ПЦЏаСњU”б‰U”‹E ƒxhu‹E Ч@d‹E Ч€pщž‹E‹ˆФбс‰MмЧ…(џџџЧ…4џџџ‹E‰…ћџџЧEшы ‹EшƒР‰Eшƒ}ш К‹EмP‹ћџџQUЌR…XџџџPшƒФ‹Eм‹MЌгј…Xџџџ‰…Xџџџ‹…XџџџPшƒФ‰…@џџџƒ}ш~J‹…@џџџ+…4џџџ…Р~‹@џџџ+4џџџ‰ьљџџы‹•@џџџ+•4џџџїк‰•ьљџџ‹…(џџџ…ьљџџ‰…(џџџ‹…@џџџ‰…4џџџ‹Eм‹ћџџA‰•ћџџщ3џџџ‹…(џџџ-€СјiРš‹(џџџщ€сџџiЩšСљСPшƒФСј‹U ‰‚p‹E ИpР~ ‹E Ч@dы ‹E Ч@d‹E ‹ˆpщ€Пб‹E ‹ˆpщ€ПСkРСјE”Т‰E”‹E ПˆdkЩК+бСњiв‹E ПˆdkЩИ+С%џџiРСја‰•џџџИЄ№+…џџџ‰…џџџ‹…џџџЄ№‰…џџџ‹EƒИФubИ+…џџџПШК+•џџџПТkРСјШК+ቕџџџИ+…џџџПШК+•џџџПТkРСјШК+ቕџџџ‹…џџџСр‹џџџСљ™їљ‰…џџџ‹EПˆФkЩ‰M ЧEшы ‹EшƒР‰Eшƒ}ш‹E‹ˆФkЩQj‹•ћџџR… ћџџPшƒФ‹E‹€Ь™ƒтТСј‹ћџџA‰•ћџџ‹E‹ˆјƒСQ‹U R… ћџџPMЌQ•ˆўџџRшƒФj‹…ˆўџџСјСјkР2‹ˆўџџСљсџџkЩ2СљСPшƒФ…ˆўџџ‰…ˆўџџ‹E‹ˆјQ•ˆўџџR…@ўџџPшƒФ ‰…Xџџџ‹E‹ˆјQ•@ўџџR…ј§џџPшƒФ ‹…џџџP‹M‹‘јR…ј§џџPшƒФ ‹E‹ˆјQj •ј§џџR‹EшСр‹M ”AŒRшƒФ‹E‹ˆјбсQ‹UшСт‹E ŒPŒQ‹UшСт‹E ŒPQшƒФ Нџџџ~'hjЁPhjшƒФƒјuЬ‹…џџџP‹M‹‘јR‹EшСр‹M ”ARшƒФ ‹…ˆўџџСјСјСр‹ˆўџџСљсџџСсСљXџџџШ‰Xџџџ‹EЌїи‰EФƒ}Фє}'hjЁ–PhjшƒФƒјuЬƒ}Ф~'hjЁ—PhjшƒФƒјuЬ‹EФƒрt‹EФƒш‰EФ‹…Xџџџбј‰…Xџџџ‹…XџџџPшƒФ‰…dџџџ‹EФбј‰EФ‹Eш‹dџџџ‰Œ…№њџџ‹Eш‹MФ‰Œ…ињџџЙ+MФИ€гјЙ+MФКџџџгњ;ТŽ…Й+MФИ€гј9…dџџџ~Й+MФК€гњ‰•ьљџџыFЙ+MФИџџџгј9…dџџџ}Й+MФКџџџгњ‰•шљџџы ‹…dџџџ‰…шљџџ‹шљџџ‰ьљџџ‹•ьљџџ‰•фљџџщ€Й+MФИџџџгј9…dџџџ~Й+MФКџџџгњ‰•рљџџыFЙ+MФИ€гј9…dџџџ}Й+MФК€гњ‰•мљџџы ‹…dџџџ‰…мљџџ‹мљџџ‰рљџџ‹•рљџџ‰•фљџџЙ+MФ‹…фљџџгр‹Mш‹U ‰„Š€‹E‹ˆјQ‹UшСт‹E ŒPŒQ•LџџџRшƒФ ‹E‹ˆјQ‹UшСт‹E ŒPQ•XџџџRшƒФ j‹…LџџџPшƒФƒшPшƒФ‰Eа‹…Lџџџ‹MагрЙ+Mа‹ЕXџџџгўƒЦ™їў‰…LџџџНLџџџџџ?~ Ч…ьљџџџџ?ы0НLџџџРџ} Ч…шљџџРџы ‹…Lџџџ‰…шљџџ‹шљџџ‰ьљџџ‹•ьљџџСт бњ‰•Lџџџ‹…LџџџPшƒФ‹Mш‹U ‰„Šщањџџ‹E”СјiРі(‹M”сџџiЩі(Сљ”јџџїкRшƒФ‰…јўџџhQшƒФ‰…ьўџџhџшƒФ‰…dџџџ‹E‹ˆЄСљП•dџџџЏЪ‹E‹ЄтџџП…dџџџЏаСњЪ‹•dџџџСњƒТбњ‹EЏЄЪ‰dџџџ‹…ьўџџ…dџџџ%€u@‹ьўџџ#dџџџс€t Ч…ьљџџ€ы‹•ьўџџ•dџџџ‰•ьљџџ‹…ьљџџ‰…шљџџы>‹ьўџџ dџџџс€u Ч…фљџџџџџы‹•ьўџџ•dџџџ‰•фљџџ‹…фљџџ‰…шљџџ‹шљџџ‰ьўџџƒНјўџџ}'hjЁЙPhjшƒФƒјuЬЧEшы ‹EшƒР‰Eшƒ}шЅ‹Eш‹M ‹”€СњП…јўџџЏа‹Mш‹E ‹Œˆ€сџџП…јўџџЏШСљб‹јўџџСљƒСбљ‹Eш‹u ЏŒ†€б‹Mш‹E ‰”ˆ€‹Eш‹M ƒМ€})hj‹ТНRhjшƒФƒјuЬщHџџџЧEшы ‹EшƒР‰Eшƒ}ші‹Eш‹M ‹”€•ьўџџт€t Ч…ьљџџџџџы‹Eш‹M ‹”€•ьўџџ‰•ьљџџ‹Eш‹M ‹•ьљџџ‰”€‹Eш‹M ‹U‹„€+‚ЄСј‹MП‘(ЄбњƒТбњПЪЏС‹Uш‹M ‹u‹”‘€+–Єтџџ‹MП‰(ЄбљƒСбљПЩЏбСњТ‹U‹ŠЄШс€… ‹Uш‹E ‹M‹”€+‘ЄСњ‹EПˆ(ЄбљƒСбљПСЏа‹Mш‹E ‹u‹Œˆ€+ŽЄсџџ‹EП€(ЄбјƒРἘЏШСљб‹M#‘Єт€t Ч…ьљџџ€ыu‹Uш‹E ‹M‹”€+‘ЄСњ‹EПˆ(ЄбљƒСбљПСЏа‹Mш‹E ‹u‹Œˆ€+ŽЄсџџ‹EП€(ЄбјƒРἘЏШСљб‹M‘Є‰•ьљџџ‹•ьљџџ‰•шљџџщ‹Eш‹M ‹U‹„€+‚ЄСј‹MП‘(ЄбњƒТбњПЪЏС‹Uш‹M ‹u‹”‘€+–Єтџџ‹MП‰(ЄбљƒСбљПЩЏбСњТ‹U ‚Є%€u Ч…фљџџџџџыw‹Eш‹M ‹U‹„€+‚ЄСј‹MП‘(ЄбњƒТбњПЪЏС‹Uш‹M ‹u‹”‘€+–Єтџџ‹MП‰(ЄбљƒСбљПЩЏбСњТ‹U‚Є‰…фљџџ‹…фљџџ‰…шљџџ‹M‹•шљџџ‰‘Єщїќџџ‹E ‹ˆdiЩіСУѕ(Сљ ƒСбљС‰јўџџ‹E ƒИˆС‹E ƒxh…Д‹EƒИФ…+‹E ‹ˆˆїйСљ‹UП‚(Є‹U О+ВpПжЏТ˜ЏШ‹U ‹‚ˆїи%џџ‹UП’(Є‹u П+ОpПїЏжПвЏТСјШ‹E ‹ˆїк‹EП€(Є‹u П+ОpПїЏЦСјƒРбјЏаЪ‰Ьњџџ‹…ЬњџџСјkРQ‹ЬњџџсџџkЩQСљСК+аRшƒФ‰…dџџџ‹…јўџџСјПdџџџЏС‹•јўџџтџџПdџџџЏбСњТ‹•dџџџСњƒТбњЏ•јўџџТ‰…јўџџщy‹EƒИФ…(‹E ‹ˆˆїйСљ‹UП‚(Є‹U О+ВpПжЏТ˜ЏШ‹U ‹‚ˆїи%џџ‹UП’(Є‹u П+ОpПїЏжПвЏТСјШ‹E ‹ˆїк‹EП€(Є‹u П+ОpПїЏЦСјƒРбјЏаЪ‰Рњџџ‹…РњџџСјkР(‹РњџџсџџkЩ(СљСК+аRшƒФ‰…dџџџ‹…јўџџСјПdџџџЏС‹•јўџџтџџПdџџџЏбСњТ‹•dџџџСњƒТбњЏ•јўџџТ‰…јўџџыA‹EƒИФ t5‹MƒЙФt)hj‹ТнRhjшƒФƒјuЬЧEшы ‹EшƒР‰Eшƒ}ш}K‹…јўџџСј‹Mш‹U ПŒŠЏС‹•јўџџтџџ‹Mш‹u ПŒŽЏбСњТ‹Uш‹M ‰„‘ыІ‹E ‹ˆxщ€ПбТk≕𢟟‹E ƒxh…‹MИЭ ™їЙФ‰…ДњџџЧEшы ‹EшƒР‰Eшƒ}ш…‹Mш‹u ИР™ї|Žl…Дњџџ‰EИИ@+EИ‹рўџџСљПUИЏЪ‹•рўџџтџџПuИЏжСњЪ+ССр‹Mш‹U ‰„Š ‹EИ-@ЗШ‹Uш‹E Œ ‹Uш‹E ‰Œ щhџџџ‹EПˆ(ЄkЩs‹UП‚(ЄiР33СјШПЩkЩ‹UП‚(ЄkРs‹UП’(Єiв33СњҘiР3ГСјШК3Гџџ+ቕpџџџще‹MИ3S™їЙФ‰EИИ@+EИ‹рўџџСљПUИkвПuИiіš™СўжПвЏЪ‹•рўџџтџџПuИkіП}Иiџš™СџїПіЏжСњЪ+ССр‹M ‰ ‹EИ-@ЗШ‹U Š ‹E ‰ˆ ЧEшы ‹EшƒР‰Eшƒ}ш}‹Eш‹M ‹Uш‹u ‹”–‰” ыеЧ…pџџџ3Гџџ‹E ‹ˆdСсК+бСњ‹EПˆЄЏб‹E ‹ˆdСсИ+С%џџ‹MП‰ЄЏССјаСњiвš‹E ‹ˆdСсИ+ССј‹MП‰ЄЏС‹M ‹‰dСсО+ёцџџ‹MП‰ЄЏёСўЦ%џџiРšСја‰Uˆ‹E ‹ˆ`СсК+бСњiвš‹E ‹ˆ`СсИ+С%џџiРšСјEˆТ‰EˆИ…Р„7‹E ƒxh…*‹E ‹ˆdСсК+бСњ‹E Пˆ`Џб‹E ‹ˆdСсИ+С%џџ‹M П‰`ЏССјаИ+ТСјiР33‹M ‹‘dСтЙ+ЪСљ‹U П’`ЏЪ‹U ‹’dСтО+ђцџџ‹U П’`ЏђСўЮК+бтџџiв33Сњ„ЭL‰…|џџџ‹Е|џџџбцСў‹E‹ˆЄСсQшƒФПаЏђ‹Н|џџџбччџџ‹E‹ˆЄСсQшƒФПаЏњСџї‰Е|џџџы Ч…|џџџЧEшы ‹EшƒР‰Eшƒ}ш‹Eє‹Mˆ+HСљiЩff‹Uє‹Eˆ+B%џџiРffСјШ‹UєJ‹Eє‰H‹Eє‹|џџџ+HСљiЩff‹Uє‹…|џџџ+B%џџiРffСјШ‹UєJ‹Eє‰H‹Eє‹pџџџ+H СљiЩff‹Uє‹…pџџџ+B %џџiРffСјШ‹UєJ ‹Eє‰H ‹Eє‹HбљƒСбљ‹Uш‹E ‰Œ,‹Eє‹HбљƒСбљ‹Uш‹E ‰ŒL‹Eє‹H бљƒСбљ‹Uш‹E ‰Œ<щщўџџR‹ЭPшXZ_^[‹Mќ3ЭшФ$;ьш‹х]У ЌџџџXџџџLџџџˆўџџD@ўџџ@ј§џџ@ ћџџа№њџџињџџQnrg_vecsqrt_nrgx_windowedAR_Q24refl_coef_Q16auto_corrpre_nrg_Q30nrgscaleHG…FЈE[GDMC~qЊBаA№@?R>f=m9x51Џ0ї/ў9 51$++965=1qx '8 'I \U jч x) &< &O &W %^ 9i 5p 1 ! 9% 5, 1t&Џ&"*965=1Ыxєx>CKRJ_Ilx„œЈДРЬиѕ$.$3( ёпG.(.:SKP_Silk_noise_shape_analysis_FIX$Рd … :ќџџџ            VpsEnc  hpsEncCtrl pitch_res x  џџџtsz №њџџ)sqrt_nrg Иџџџtb_Q14 ФџџџtQnrg шџџџtk мџџџtnSamples pџџџtTilt_Q16 Lџџџtpre_nrg_Q30 @џџџtlog_energy_Q7 џџџtdelta_Q16 рўџџtstrength_Q16 ћџџx_ptr |џџџtHarmShapeGain_Q16 єџџџ‘psShapeSt ”џџџtSNR_adj_dB_Q7 (џџџtenergy_variation_Q7 ьўџџtgain_add_Q16 ћџџpitch_res_ptr аџџџtlz ˆџџџtHarmBoost_Q16 @ўџџИrefl_coef_Q16 ј§џџИAR_Q24  ћџџ8x_windowed Ќџџџtscale џџџtBWExp1_Q16 ињџџ)Qnrg_vec dџџџttmp32 џџџtBWExp2_Q16 Xџџџtnrg 4џџџtlog_energy_prev_Q7 јўџџtgain_mult_Q16 дўџџtb_Q8 ˆўџџ7auto_corr&І ЬњџџtessStrength_Q15&с РњџџtessStrength_Q15л Дњџџtfs_kHz_invђx.@Œl)€(*€3+€:8€u>€КA€ЩB€шJ€L€1O€EP€S€EU€NW€sX€x\€c€ e€f€"g€'i€5j€?k€Il€Rm€nn€Œo€ q€Еr€Лs€u€v€#w€(y€n|€}}€‡~€‰€“ƒ€Х‰€ Š€‹€.Œ€:Ž€k€œ’€З—€Ч˜€уš€€) €TЃ€‘І€ЗЉ€зЌ€їЏ€#Е€YИ€ŒЙ€ЖМ€шО€№П€Р€JУ€RФ€[Х€iШ€~Щ€†Ы€–Ь€ЃЮ€ы а€ б€? г€_ 䈆 е€п ж€ћ з€ н€6 о€I п€\ р€А с€M т€} ф€™ х€ ц€9 ч€> щ€Z ъ€­ №€Kё€Pі€yј€–љ€Іћ€K§€ў€бџ€с€†€М€€ €J €b €Ћ €­€Ю€л€№€ €%€g€Œ€‘€є €љ!€ #€s$€%€Ј&€Т'€Ф(€Ю0€…4€Ъ6€ф:€В>€ ?€@€F€4H€kJ€ЈL€хN€џO€P€3Q€8R€ X \ Г З Т Ц б е р ф я ѓ ў      + / : > I M ƒ ‡ К О ё ѕ  $ psEnc->sCmn.fs_kHz == 12 || psEnc->sCmn.fs_kHz == 8psEncCtrl->Gains_Q16[ k ] >= 0gain_mult_Q16 >= 0Qnrg <= 30Qnrg >= -12j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_noise_shape_analysis_fix.c)BWExp1_Q16 <= ( 1 << 16 )PUU‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E%џџt‹EСјPшƒФыыЗEPшƒФƒР_^[ФР;ьш‹х]У0cAcWIѕ$_РЈ ёi4_KSKP_Silk_CLZ32РР € tin32ђH_<p€r€(s€9t€;u€Kw€ \X\ \\ Ќ\ А\ U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјПE…Рu ИщЂПE%џt0ПE%№tf‹EfСј f‰Eы‹EјƒР‰Eјf‹EfСјf‰Eы+ПE%№џt‹EјƒР‰Eјf‹EfСјf‰Eы ‹EјƒР ‰EјПEƒр tПEƒрt‹Eјы%ы‹EјƒРыыПEƒрt ‹EјƒРыы‹EјƒР_^[‹х]Уѕ$рЬ ё{4рй SKP_Silk_CLZ16ЬР € in16 јџџџtout32ђ№рфL€M€%N€-O€7R€BS€MT€YU€[V€dW€pY€rZ€}[€†\€’]€”^€b€Іc€Џd€Дe€Жf€Оg€Рh€Щi€бj€гk€йm€ cXc \c Мc Рc U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФŒ ёp0G@.SKP_min_32ФР € ta  tbђ0G$п€р€@с€ jXj \j Аj Дj U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E ~ ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФŒ ёp0G@.SKP_max_32ФР € ta  tbђ0G$ё€ђ€@ѓ€ qXq \q Аq Дq U‹ььфSVWНџџџЙ9ИЬЬЬЬѓЋƒ}3РыvEрPMьQ‹URшƒФ ‹Eьƒрt ЧEј€ыЧEј†Д‹Mьбљ‹Eјгј‰Eј‹EјСјПMрiЩеПбЏТ‹MјсџџПUрiвеПвЏЪСљMјШ‰Mј‹EјR‹ЭPшXZ_^[Фф;ьш‹х]Уьџџџрџџџfrac_Q7lz5ƒЄ|ЉKЛIШ{дzрyѕ$яфў ёй:яяSKP_Silk_SQRT_APPROXфР$ €     tx рџџџtfrac_Q7 ьџџџtlz јџџџtyђxя( lK€N€$O€(R€<T€DU€KV€MW€T[€a^€›`€ža€ xXx \x šz žz Љy ­y И{ М{ Ч| Ы| x x U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋ‹EPшƒФ‰Eј‹E ‹Mј‰ƒ}ј}Й+Mј‹Eгјƒр‹M‰ы‹Mјƒщ‹Eгрƒр‹M‰_^[ФЬ;ьш‹х]У#\qIѕ$yЬ  ёІ7yeSKP_Silk_CLZ_FRACЬР € tin  tlz tfrac_Q7 јџџџtleadingZerosђXy(L;€>€-?€5@€;A€PB€RC€eE€ ƒXƒ \ƒ шƒ ьƒ VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SФ.text.Aƒ№0д…ПгI.debug$S˜ !Œп(е $LN90м$LN89х$LN88ю$LN87љ$LN86$LN85$LN84$LN83$$LN82($LN91p$LN92h.rdatahмнSі'.rdata>wЯи•ё.rdata&&erTИ7 I .rdata$й€m.rdata }ЦФ ! 6 .rdata Ў8-Ў0F .data Др:н .rdata 4žkЪ9 _memcpy ы §  ' 9 L h z ’ ЅИ Ч т .rtc$TMZ Ь.Lљ  .rtc$IMZžz]6 .text_йIѕ=vЄёC.debug$Sє:Яq‘E .textр}BИ#u‘ћ.debug$SЌбЛ5сU .textGиьио^7єХ.debug$SрТ•‚ve .textGСв Uмtі€.debug$Sрe=њxq .textяR-ЄTŒІђ.debug$S” їz>}} $LN7ф$LN6ь$LN8Ь$LN9Ф.textyУ‹f&‚нm.debug$S@Stё“ .debug$T\І_SKP_Silk_noise_shape_analysis_FIX??_C@_1GI@NOLDCAAM@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAf?$AAs?$AA_?$AAk?$AAH?$AAz?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA1?$AA2?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AAp?$AAs?$AAE?$AAn@??_C@_1DO@HHEDJHOJ@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAG?$AAa?$AAi?$AAn?$AAs?$AA_?$AAQ?$AA1?$AA6?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CG@DDHEABGK@?$AAg?$AAa?$AAi?$AAn?$AA_?$AAm?$AAu?$AAl?$AAt?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_Silk_log2lin_SKP_Silk_LPC_inverse_pred_gain_Q13??_C@_1BG@NHEGJHDL@?$AAQ?$AAn?$AAr?$AAg?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA3?$AA0?$AA?$AA@??_C@_1BI@ELPIDKKC@?$AAQ?$AAn?$AAr?$AAg?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA?9?$AA1?$AA2?$AA?$AA@_SKP_Silk_bwexpander__CrtDbgReportW??_C@_1KO@DNFMFBAO@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_noise_shape_analysis_FIX@@9@9??_C@_1DE@PJLPPCNB@?$AAB?$AAW?$AAE?$AAx?$AAp?$AA1?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA?$CI?$AA?5?$AA1?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA1?$AA6?$AA?5?$AA?$CJ?$AA?$AA@_SKP_Silk_LPC_fit_SKP_Silk_bwexpander_32_SKP_Silk_k2a_Q16_SKP_Silk_schur64_SKP_Silk_autocorr_SKP_Silk_apply_sine_window_SKP_Silk_lin2log_SKP_Silk_sum_sqr_shift_SKP_Silk_sigm_Q15___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_CLZ32_SKP_Silk_CLZ16_SKP_min_32_SKP_max_32_SKP_Silk_SQRT_APPROX_SKP_Silk_CLZ_FRAC/2117 1273638393 100666 9727 ` Lљ-ъKL.drectveA  .debug$S№ M@B.textБ=ю" P`.debug$SєB6@B.rdata.h@0@.rdata.–@0@.rdata&Ф@0@.rdata&ъ@0@.rdata@0@.rdataЊ.@@@.dataи@0Р.rdata м@0@.rtc$TMZшь@0@.rtc$IMZіњ@0@.textG P`.debug$SфK/@B.textGa P`.debug$SфЈŒ@B.debug$T\О@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёŸ_J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_NLSF_VQ_weights_laroia.obj:<!ovovMicrosoft (R) Optimizing Compiler=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_NLSF_VQ_weights_laroia.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒбeм@_њпНEѕи’Џ‹ц+7 @#nŽи,ˆ{#(yFiдz<G;1=1ѓIj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf_vq_weights_laroia.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 232 - ^ = $23 $T0 236 - ^ = $24 $T0 240 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = U‹ььфSVWНџџџЙ9ИЬЬЬЬѓЋƒ}%hjЁƒРPhjшƒФƒјuЬ‹Eƒрt&hj‹ ƒСQhjшƒФƒјuЬj‹E ‹QшƒФ‰EьИ ™ї}ь‰Eьj‹E ‹M ‹P+RшƒФ‰EрИ ™ї}р‰Eрhџ‹EьEрPшƒФ‹M‰‹Eƒ8&hj‹ ƒСQhjшƒФƒјuЬЧEјы ‹EјƒР‰Eј‹Eƒш9Eјj‹Eј‹M ‹Uј‹u ‹D+–PшƒФ‰EьИ ™ї}ь‰Eьhџ‹EьEрPшƒФ‹Mј‹U‰Š‹Eј‹Mƒ<&hj‹ƒТRhjшƒФƒјuЬj‹Eј‹M ‹Uј‹u ‹D+D–PшƒФ‰EрИ ™ї}р‰Eрhџ‹EьEрPшƒФ‹Mј‹U‰DŠ‹Eј‹Mƒ|&hj‹ƒТRhjшƒФƒјuЬщшўџџj‹E‹M К€+TќRшƒФ‰EьИ ™ї}ь‰Eьhџ‹EьEрPшƒФ‹M‹U‰DŠќ‹E‹Mƒ|ќ&hj‹ƒТ!RhjшƒФƒјuЬ_^[Фф;ьш‹х]У%/,+5'<#R"Z+c'j#€HЅHШAнх+ю'ѕ#:H]Az‚+‹'’#ЗHкAљ+ '#6HYAx€+‰'#Љ0ѕ$Бф e ёлEБЬSKP_Silk_NLSF_VQ_weights_laroiaфР$ € tpNLSFW_Q6  pNLSF_Q15 D рџџџttmp2_int јџџџtk ьџџџttmp1_intђиБ8Ь,€1€I2€w5€Š6€–7€Џ8€Л9€д:€=€#>€D?€P@€mA€ŸC€СD€ЭE€ыF€G€#J€@K€LL€jM€N€ X \   pNLSFW_Q6[ D - 1 ] > 0pNLSFW_Q6[ k + 1 ] > 0pNLSFW_Q6[ k ] > 0pNLSFW_Q6[ 0 ] > 0( D & 1 ) == 0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf_vq_weights_laroia.c,D > 05:U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФз ёq1G@.SKP_min_intФР € ta  tbђ0GH$з€и€@й€ AXA \A ДA ИA U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E ~ ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФз ёq1G@.SKP_max_intФР € ta  tbђ0GH$щ€ъ€@ы€ HXH \H ДH ИH VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S№ .textБ"T=5ш 1ў.debug$SєЪR[ѓ .rdata.‡<ћя%.rdata.сTvР.rdata&SЄ–{].rdata&ŠGщс.rdata  •в›e н .rdata ЊJ№Ѕшэ .data †фъЈ .rdata  ‡3јо  .rtc$TMZ Ь.L' > .rtc$IMZžz]Md .textGиьиоп„[Ќ.debug$SфкJаˆs .textGСв UdЈЏ.debug$SфПVf€ .debug$T\_SKP_Silk_NLSF_VQ_weights_laroia??_C@_1CO@BDHLMLJD@?$AAp?$AAN?$AAL?$AAS?$AAF?$AAW?$AA_?$AAQ?$AA6?$AA?$FL?$AA?5?$AAD?$AA?5?$AA?9?$AA?5?$AA1?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1CO@IKJLKDPF@?$AAp?$AAN?$AAL?$AAS?$AAF?$AAW?$AA_?$AAQ?$AA6?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$CL?$AA?5?$AA1?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1CG@BMJAMABP@?$AAp?$AAN?$AAL?$AAS?$AAF?$AAW?$AA_?$AAQ?$AA6?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1CG@IOBCCDMG@?$AAp?$AAN?$AAL?$AAS?$AAF?$AAW?$AA_?$AAQ?$AA6?$AA?$FL?$AA?5?$AA0?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1BO@GECJFEEH@?$AA?$CI?$AA?5?$AAD?$AA?5?$AA?$CG?$AA?5?$AA1?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@__CrtDbgReportW??_C@_1KK@GMMBCADK@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_NLSF_VQ_weights_laroia@@9@9??_C@_1M@JPNCAKBH@?$AAD?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_min_int_SKP_max_int /2166 1273638393 100666 8768 ` L љ-ъK8.drectveAє .debug$SШ5@B.textŒ§‰ P`.debug$SЬG @B.rdata@0@.rdata.Ÿ@0@.rdataЈЭ@@@.datau@0Р.rdata y@0@.rtc$TMZ™@0@.rtc$IMZЇЋ@0@.debug$T\Е@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё^J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_NLSF_VQ_sum_error_FIX.obj:<!ovovMicrosoft (R) Optimizing Compilerџ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_NLSF_VQ_sum_error_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tєXprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9]& W умрh8т’Џ‹ц+7 @#nŽи,ˆ{ѓJj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf_vq_sum_error_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 324 - ^ = $23 $T0 328 - ^ = $24 $T0 332 - ^ = U‹ьь@SVWНРўџџЙPИЬЬЬЬѓЋЁ3Х‰Eќƒ} ~%hjЁƒРPhjшƒФƒјuЬ‹E ƒрt&hj‹ ƒСQhjшƒФƒјuЬЧEмы ‹EмƒР‰Eм‹E бј9Eм}#‹Eмбр‹Mмбс‹U‹LŠСс‹U ‚‹Eм‰L…ыЪЧEшы ‹EшƒР‰Eш‹Eш;Eb‹E‰E„ЧEєы ‹EєƒР‰Eє‹Eє;E!ЧEФЧEмы ‹EмƒР‰Eм‹Eм;E Р‹Eмбј‹L…‰MИ‹E„П‹Uм‹E ‹+б‰Uа‹E„ƒР‰E„ПEаПMаЏССјПUИЏТПMаПUаЏЪсџџПUИЏЪСљMФШ‰MФ‹E„П‹Uм‹E ‹T+б‰Uа‹E„ƒР‰E„ПEаПMаЏССј‹UИСњЏТEФПMаПUаЏЪсџџ‹UИСњЏЪСљС‰EФщ+џџџƒ}Ф}%hjЁƒР PhjшƒФƒјuЬ‹Eє‹M‹UФ‰щЪўџџ‹E‹M‰U‹E ‹M ‰U щ‰ўџџR‹ЭPшXZ_^[‹Mќ3ЭшФ@;ьш‹х]Уџџџ Wcpy_Q6'/&6"?F\d"mtюѕ"ўFK*Z)g(t€ѕ$Œ@и( ёГDŒ(Œ=SKP_Silk_NLSF_VQ_sum_error_FIX@Р€ … :ќџџџ    terr_Q20  in_Q15 w_Q6 pCB_Q15 N K  LPC_order мџџџtm Фџџџtsum_error аџџџtdiff_Q15 џџџбWcpy_Q6 ИџџџtWtmp_Q6 єџџџti шџџџtn „џџџcb_vec_Q15ђиŒ(Ь(€(.€S/€2€3€О4€Р7€о9€ф:€;€ <€'>€3A€PB€ˆE€ІF€тG€чH€I€J€#K€/L€;M€@N€ X \ А Д П У Ю в є ј sum_error >= 0( LPC_order & 1 ) == 0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf_vq_sum_error_fix.c(LPC_order <= 16/4VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SШ.textŒю^pшюн­W.debug$SЬ T—U— $LN18„$LN19x$LN20p.rdataŽ4Ђ$.rdata.КR-L/ .rdataЈ\;rw?.dataᇆeњ.rdata  ‹w8e/ ŸВ С м .rtc$TMZ Ь.Lѓ   .rtc$IMZ žz] 0 .debug$T \?_SKP_Silk_NLSF_VQ_sum_error_FIX??_C@_1BO@OHFJPFME@?$AAs?$AAu?$AAm?$AA_?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CO@LAKNKFKO@?$AA?$CI?$AA?5?$AAL?$AAP?$AAC?$AA_?$AAo?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$CG?$AA?5?$AA1?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@__CrtDbgReportW??_C@_1KI@IGGEPIDH@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_NLSF_VQ_sum_error_FIX@@9@9??_C@_1CA@IDMNNNNJ@?$AAL?$AAP?$AAC?$AA_?$AAo?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1?$AA6?$AA?$AA@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/2214 1273638393 100666 8492 ` L љ-ъKЩ3.drectveAє .debug$S 5@B.textœAн P`.debug$Sii@B.rdata,›@0@.rdatanЧ@@@.rdataД5@@@.dataщ@0Р.rdatadэ@@@.rtc$TMZQU@0@.rtc$IMZ_c@0@.debug$T\m@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёЉdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_NLSF_VQ_rate_distortion_FIX.obj:<!ovovMicrosoft (R) Optimizing Compiler=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_NLSF_VQ_rate_distortion_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё”"@SA_Method"SA_Parameter!wchar_t"SA_AttrTargetsSKP_Silk_NLSF_CBS usize_tsSKP_Silk_NLSF_CBSєXprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9 e}/ШŸПњJu'ЕhVX“’Џ‹ц+7 @#nŽи,ˆ{ѓPj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf_vq_rate_distortion_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 232 - ^ = $23 $T0 236 - ^ = $24 $T0 240 - ^ = U‹ььфSVWНџџџЙ9ИЬЬЬЬѓЋ‹E$P‹M ‹R‹E P‹M ‹QR‹EP‹MQ‹URшƒФ‹E‰EрЧEьы ‹EьƒР‰Eь‹Eь;E ЧEјы ‹EјƒР‰Eј‹E ‹Mј;ъ‹E ‹H‹UјПQ‹Mь‹UŠy%hjЁƒР PhjшƒФƒјuЬ‹E ‹H‹UјПQ‹Mь‹UŠ=џ~%hjЁƒРPhjшƒФƒјuЬ‹E ‹H‹UјПQ‹Mь‹U‹ ŠШПбПEЏа‹Mј‹Eрˆ‹Mј‹Eр‰ˆ‹Eј‹Mрƒ<}&hj‹ƒТRhjшƒФƒјuЬщџўџџ‹E ‹‹UрЉEрщЮўџџ_^[Фф;ьш‹х]У@$Є#ЋДЛцэі§KS\c”%ѕ$œф о ё@JœˆCSKP_Silk_NLSF_VQ_rate_distortion_FIXфР$ € tpRD_Q20  wpsNLSF_CBS in_Q15 w_Q6 rate_acc_Q5 mu_Q15  N $LPC_order рџџџtpRD_vec_Q20 јџџџti ьџџџtnђ€œ( t)€/€G2€M3€k5€‹6€Ш7€ 8€>9€p:€u;€ƒ<€ˆ=€ X \ € „ pRD_vec_Q20[ i ] >= 0rate_acc_Q5[ n ] + psNLSF_CBS->Rates_Q5[ i ] <= 0x7FFFj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf_vq_rate_distortion_fix.c)rate_acc_Q5[ n ] + psNLSF_CBS->Rates_Q5[ i ] >= 0*/VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S .textœљ(„ХХ^Dо.debug$So0`0 .rdata,џЇуі*.rdatanЬ№™Р† .rdataДuїš–.dataДр:нQ.rdata dымFŒ R r .rtc$TMZ Ь.L ˜ .rtc$IMZ žz]Ї О .debug$T \Э_SKP_Silk_NLSF_VQ_rate_distortion_FIX??_C@_1CM@IKDIDOBM@?$AAp?$AAR?$AAD?$AA_?$AAv?$AAe?$AAc?$AA_?$AAQ?$AA2?$AA0?$AA?$FL?$AA?5?$AAi?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1GO@NLELMEGP@?$AAr?$AAa?$AAt?$AAe?$AA_?$AAa?$AAc?$AAc?$AA_?$AAQ?$AA5?$AA?$FL?$AA?5?$AAn?$AA?5?$AA?$FN?$AA?5?$AA?$CL?$AA?5?$AAp?$AAs?$AAN?$AAL?$AAS?$AAF?$AA_?$AAC?$AAB?$AAS?$AA?9?$AA?$DO?$AAR@__CrtDbgReportW??_C@_1LE@FAEBNBAH@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_NLSF_VQ_rate_distortion_FIX@@9@9??_C@_1GE@CAGJOFNO@?$AAr?$AAa?$AAt?$AAe?$AA_?$AAa?$AAc?$AAc?$AA_?$AAQ?$AA5?$AA?$FL?$AA?5?$AAn?$AA?5?$AA?$FN?$AA?5?$AA?$CL?$AA?5?$AAp?$AAs?$AAN?$AAL?$AAS?$AAF?$AA_?$AAC?$AAB?$AAS?$AA?9?$AA?$DO?$AAR@_SKP_Silk_NLSF_VQ_sum_error_FIX__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/2268 1273638393 100666 9854 ` Lљ-ъK‘@.drectveA” .debug$SHе@B.textЬщ P`.debug$S$Mq@B.rdatašЃ@@@.data=@0Р.rdata,A@0@.rtc$TMZmq@0@.rtc$IMZ{@0@.textG‰ P`.debug$SфаД@B.textGц P`.debug$Sф-@B.textlCЏ P`.debug$S@У@B.debug$T\5@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёWJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_NLSF_stabilize.obj:<!ovovMicrosoft (R) Optimizing Compilerј=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_NLSF_stabilize.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒ;ЪOж%Q~Љ1ѓ ЫЬрXа’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓГj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf_stabilize.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 324 - ^ = $23 $T0 328 - ^ = $24 $T0 332 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = U‹ьь@SVWНРўџџЙPИЬЬЬЬѓЋЧEЄ‹E‹M ƒ<}&hj‹ƒТRhjшƒФƒјuЬЧEМы ‹EМƒР‰EМƒ}МO‹E‹M ‹+‰UШЧEЄЧEАы ‹EАƒР‰EА‹Eƒш9EА7‹EА‹M‹Tќ‹EА‹M ‹EА‹M‹+Т‰Eь‹Eь;EШ} ‹Eь‰EШ‹EА‰EЄыЕ‹E‹M‹Tќ‹E‹M И€+Т‰Eь‹Eь;EШ} ‹Eь‰EШ‹E‰EЄƒ}Ш|щЁƒ}Єu‹E‹M ‹‰щ‘‹EЄ;Eu‹E‹M К€+‹E‹M‰TќщlЧEрЧE˜ы ‹E˜ƒР‰E˜‹E˜;EЄ}‹E˜‹M ‹Uр‰Uрыо‹EЄ‹M ‹бњUр‰UрЧE䈋E‰E˜ы ‹E˜ƒш‰E˜‹E˜;EЄ~‹E˜‹M ‹Uд+‰Uдыо‹EЄ‹M ‹бњ‹EЄ‹M ‹+Т‹Mд+Ш‰Mд‹Eр;EдŽЪ‹MЄ‹U‹DŠќ‹MЄ‹UŠбј‹MЄ‹U‹LŠќ‹UЄ‹u –ƒсС;Eр~ ‹Eр‰…аўџџы|‹MЄ‹U‹DŠќ‹MЄ‹UŠбј‹MЄ‹U‹LŠќ‹UЄ‹u –ƒсС;Eд} ‹Eд‰…Ьўџџы3‹MЄ‹U‹DŠќ‹MЄ‹UŠбј‹MЄ‹U‹LŠќ‹UЄ‹u –ƒсС‰…Ьўџџ‹…Ьўџџ‰…аўџџ‹аўџџ‰ШўџџщХ‹UЄ‹E‹Lќ‹UЄ‹E бљ‹UЄ‹E‹Tќ‹EЄ‹u†ƒтЪ;Mд~ ‹Mд‰Фўџџы|‹UЄ‹E‹Lќ‹UЄ‹E бљ‹UЄ‹E‹Tќ‹EЄ‹u†ƒтЪ;Mр} ‹Mр‰Рўџџы3‹UЄ‹E‹Lќ‹UЄ‹E бљ‹UЄ‹E‹Tќ‹EЄ‹u†ƒтЪ‰Рўџџ‹Рўџџ‰Фўџџ‹•Фўџџ‰•Шўџџ‹…Шўџџ‰Eј‹EЄ‹M ‹бњ‹Eј+Т‹MЄ‹U‰DŠќ‹EЄ‹M‹Tќ‹EЄ‹M ‹EЄ‹M‰щžќџџƒ}М…ь‹EP‹MQшƒФ‹E ‹Q‹U‹PшƒФ‹M‰ЧEАы ‹EАƒР‰EА‹EА;E}1‹EА‹M‹Tќ‹EА‹M R‹UА‹E‹ QшƒФ‹UА‹M‰‘ыО‹E‹M К€+R‹E‹M‹TќRшƒФ‹M‹U‰DŠќ‹Eƒш‰EАы ‹EАƒш‰EАƒ}А|2‹EА‹M‹UА‹u ‹D+D–P‹MА‹U‹ŠPшƒФ‹MА‹U‰ŠыП_^[Ф@;ьш‹х]У2:CJещ5.5[.І.Фѕ$Ь@ ] ёZ=ЬИЬSKP_Silk_NLSF_stabilize@Р€ € tNLSF_Q15  NDeltaMin_Q15 L јџџџtcenter_freq_Q15 Шџџџtmin_diff_Q15 ЄџџџtI дџџџtmax_center_Q15 ˜џџџtk ьџџџtdiff_Q15 Мџџџtloops рџџџtmin_center_Q15 АџџџtiђˆЬ8.|/€3€%6€W8€s=€€>€‡@€ЄA€ХB€ЭC€гD€йF€лH€јI€J€K€ Q€R€U€W€,Y€4[€L]€Q_€X`€ra€b€ƒc€”f€›g€Дh€Уi€Хj€уn€‡o€Ёp€Нr€Тu€Ьz€м}€ѕ€€€@„€l‡€†ˆ€ИŠ€ X \ œ   j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf_stabilize.c/NDeltaMin_Q15[L] >= 1"'U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФЯ ёq1G@.SKP_min_intФР € ta  tbђ0GH$з€и€@й€ .X. \. Д. И. U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E ~ ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФЯ ёq1G@.SKP_max_intФР € ta  tbђ0GH$щ€ъ€@ы€ 5X5 \5 Д5 И5 U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјы ‹EјƒР‰Eј‹Eј;E} ‹EP‹M Q‹UјЏU‹E QшƒФ ыЯ_^[ФЬ;ьш‹х]УOdѕ$lЬA ёРClXGSKP_Silk_NLSF_stabilize_multiЬР € tNLSF_Q15  NDeltaMin_Q15 N L јџџџtnђ@l84“€—€8˜€V™€Xš€ <X< \< < < VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SH.textЬ &ЭœНZw{.debug$S$}Щžї  L .rdatašёљ„\.datahПQј.rdata,"е7ЗEй .rtc$TMZЬ.Lшџ .rtc$IMZ žz] % .text Gиьиоп„[Ќ.debug$S ф кJаˆ4 .text GСв UdЈЏ.debug$S ф ПVfA .textl%A§Џq*.debug$S@fЋйN .debug$T\m_SKP_Silk_NLSF_stabilize_SKP_Silk_insertion_sort_increasing_all_values__CrtDbgReportW??_C@_1JK@HECEIHEK@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_NLSF_stabilize@@9@9??_C@_1CM@MLOMEMMB@?$AAN?$AAD?$AAe?$AAl?$AAt?$AAa?$AAM?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA5?$AA?$FL?$AAL?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA1?$AA?$AA@__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_min_int_SKP_max_int_SKP_Silk_NLSF_stabilize_multi/2309 1273638393 100666 12305 ` L љ-ъKД'I.drectveA .debug$SЌ]@B.text” # P`.debug$Sрћл#@B.rdataщ$@0@.rdataІ%@@@.dataЋ%@0Р.rdata4Џ%@0@.rtc$TMZу%ч%@0@.rtc$IMZё%ѕ%@0@.textGџ% P`.debug$SрF&&'@B.debug$T\X'@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё›]J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_NLSF_MSVQ_encode_FIX.obj:<!ovovMicrosoft (R) Optimizing Compilerў=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_NLSF_MSVQ_encode_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёд"@SA_Method"SA_Parameter!wchar_t"SA_AttrTargetsSKP_Silk_NLSF_CBS usize_tsSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_struct|SKP_Silk_NLSF_CB_structєXprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9МcƒrЊ†+‹bšВ]Œ’Џ‹ц+7 @#nŽи,ˆ{ѓОj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf_msvq_encode_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 5076 - ^ = $23 $T0 5080 - ^ = $24 $T0 5084 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = U‹ьИашSVWН0ьџџЙєИЬЬЬЬѓЋЁ3Х‰EќЧEаƒ}$~%hjЁƒР!PhjшƒФƒјuЬ‹E(СрP‹M Q•LџџџRшƒФ ‹E$СрPjињџџQшƒФ ЧEєы ‹EєƒР‰Eє‹Eє;E(}‹Eє‹Mє‹U ‹ ЉŒ…0ёџџыкЧEФЧEшы ‹EшƒР‰Eш‹E‹Mш;‹EшkР ‹MA‰…јьџџПEФ‹јьџџПЏТP‹E$PшƒФ‰Eа‹E(P‹MФQ‹UR…ињџџP‹MQ•0ёџџR‹…јьџџP ћџџQшƒФ ‹EаP‹јьџџ‹UФЏR…HњџџP ћџџQшƒФН ћџџџџџ},‹… ћџџСр‰E”‹Eа‹Œ…ћџџ;M”~ƒ}а~ ‹Eаƒш‰EаырЧEмы ‹EмƒР‰Eм‹Eм;EаЎƒ}ш~d‹…јьџџƒ8u"‹Eм‹Œ…HњџџСљ‰MИ‹Eм‹Œ…Hњџџƒс‰MЌы5‹Eм‹јьџџ‹„…Hњџџ™ї9‰EИПEИ‹јьџџПЏТ‹Mм‹”Hњџџ+а‰UЌыЧEИ‹Eм‹Œ…Hњџџ‰MЌПEИПM(ЏС”…0ёџџ‰•эџџПEЌПM(ЏС‹•јьџџ‹JA‰•эџџПEмПM(ЏС”…(эџџ‰•эџџЧEєы ‹EєƒР‰Eє‹Eє;E(})‹Eє‹эџџПA‹Eє‹эџџ‹+Т‹Mє‹•эџџ‰ŠыЦ‹…јьџџ‹H‹UЌПQ‹MИ„ињџџ‹U쉄•њџџПEИ‹MПЏТ„…Рїџџ‰…эџџПEм‹MПЏТ„…8ѕџџ‰…эџџЧEєы ‹EєƒР‰Eє‹Eє;Eш}‹Eє‹эџџ‹Uє‹Еэџџ‹–‰ые‹Eш‹эџџ‹UЌ‰щ=ўџџ‹E‹ƒщ9Mш}iПEаПM(ЏССрP•(эџџR…0ёџџPшƒФ ‹EаСрPњџџQ•ињџџRшƒФ ПEа‹MПЏТСрP…8ѕџџPРїџџQшƒФ ‹Eа‰EФщзќџџЧE ƒ},„?Ч…(џџџџџџЧEшы ‹EшƒР‰Eш‹Eш;Eа‹E(PПMш‹UПЏШŒ8ѕџџQ‹UR‹E PшƒФЧ…4џџџЧEєы ‹EєƒР‰Eє‹Eє;E(х‹Eє‹M ‹Uє‹u‹+–‰…@џџџП…@џџџП@џџџЏССј‹Uє‹MП‘ЏТП@џџџП•@џџџЏЪсџџ‹Uє‹uП–ЏЪСљ4џџџШ‰4џџџ‹Eє‹M ‹Uє‹u‹D+D–‰…@џџџП…@џџџП@џџџЏССј‹Uє‹MПT‘ЏТП@џџџП•@џџџЏЪсџџ‹Uє‹uПT–ЏЪСљ4џџџШ‰4џџџщџџџƒН4џџџ}'hjЁІPhjшƒФƒјuЬ‹…4џџџСјПM ЏС‹•4џџџтџџПM ЏбСњТ‹Uш‹Œ• ћџџШс€t Ч…0ьџџџџџы8‹•4џџџСњПE Џа‹4џџџсџџПE ЏШСљб‹Mш” ћџџ‰•0ьџџ‹•0ьџџ‰•4џџџ‹…4џџџ;…(џџџ}‹…4џџџ‰…(џџџ‹Eш‰E щд§џџ‹E‹СсQПU ‹EПЏб”•8ѕџџR‹EPшƒФ ‹E(P‹MQ‹UR‹E PшƒФR‹ЭPшXZ_^[‹Mќ3ЭшФа;ьш‹х]УI Lџџџ@ ћџџињџџ@њџџ@Hњџџ@Рїџџ€8ѕџџ€0ёџџ(эџџpRes_new_Q15pRes_Q15pPath_newpPathpTempIndicespRate_new_Q5pRate_Q5pRateDist_Q18pNLSF_in_Q15 4#0:/A+J'Q#q"‰!EE lЂ"П"ц"Sqx+ƒ'Š#k"ƒ•3Є2Б1РЬиф№ќ ,ѕ$”а(з, ёNC”,”zSKP_Silk_NLSF_MSVQ_encode_FIXаР … :ќџџџ            tNLSFIndices  tpNLSF_Q15 ?psNLSF_CB pNLSF_q_Q15_prev pW_Q6 NLSF_mu_Q15  NLSF_mu_fluc_red_Q16 $NLSF_MSVQ_Survivors (LPC_order ,deactivate_fluc_red РїџџPpPath ињџџИpRate_Q5 Ќџџџtcb_index Фџџџtprev_survivors (џџџtbestRateDist_Q20 мџџџtk ”џџџtrateDistThreshold_Q18 0ёџџЗpRes_Q15  џџџtbestIndex @џџџtse_Q15 8ѕџџPpPath_new эџџpCB_element LџџџИpNLSF_in_Q15 њџџИpRate_new_Q5 шџџџts 4џџџtwsse_Q20  ћџџЗpRateDist_Q18 HњџџИpTempIndices (эџџЗpRes_new_Q15 єџџџti эџџpConstInt аџџџtcur_survivors Иџџџtinput_index эџџtpInt јьџџwpCurrentCBStageђP”(GD-€,.€3N€^T€x[€^€Њ_€Н`€Пc€Цf€цi€јl€x€L|€s€€€‹€ ‚€Љƒ€Ћ†€Щ‡€Я‰€кŠ€ъ‹€њŒ€ќ€Ž€1€3’€:“€G—€_˜€|™€”š€Ў›€еœ€зŸ€ћЂ€Ѓ€/Є€IЅ€aІ€cЈ€rЉ€wЋ€„­€ЉА€ЦГ€эЖ€ѓЗ€јК€џР€ У€Ф€1Ц€ZЩ€dЪ€‚Ь€šЭ€№а€ б€bв€gг€—ж€#й€1к€=л€Cн€Hт€rх€Šч€ X \ Џ Г О Т Э б м р ы я њ ў     ' + 6 : E I  ” wsse_Q20 >= 0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf_msvq_encode_fix.c-NLSF_MSVQ_Survivors <= 169>U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФL ёp0G@.SKP_min_32ФР € ta  tbђ0G$п€р€@с€ EXE \E АE ДE VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SЌ.text”#1\1 3<М\.debug$SрБђ $LN460$LN45=$LN44F$LN43P$LN42V$LN41c$LN40p$LN39y$LN38‡$LN47Ф$LN48М.rdata˜$L)#‰ Є Ш _memset _memcpy ю .rdataІIUl_ў.dataуwXRЙ.rdata4ёт эЂ Б Ь __chkstk .rtc$TMZ Ь.Lу њ .rtc$IMZ žz]    .text Gиьио^7єХ.debug$S р Т•‚v/ .debug$T \;_SKP_Silk_NLSF_MSVQ_encode_FIX??_C@_1BM@FGMDKMIO@?$AAw?$AAs?$AAs?$AAe?$AA_?$AAQ?$AA2?$AA0?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_Silk_NLSF_MSVQ_decode_SKP_Silk_insertion_sort_increasing_SKP_Silk_NLSF_VQ_rate_distortion_FIX__CrtDbgReportW??_C@_1KG@KJLKCDPF@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_NLSF_MSVQ_encode_FIX@@9@9??_C@_1DE@CJNOBCLO@?$AAN?$AAL?$AAS?$AAF?$AA_?$AAM?$AAS?$AAV?$AAQ?$AA_?$AAS?$AAu?$AAr?$AAv?$AAi?$AAv?$AAo?$AAr?$AAs?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1?$AA6?$AA?$AA@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_min_32 /2356 1273638393 100666 8683 ` L љ-ъKu/.drectveAЬ .debug$S, @B.textј91 P`.debug$S\•ё@B.rdataœ#@@@.rdatažП@@@.data]@0Р.rdataœa@@@.rtc$TMZ§@0@.rtc$IMZ @0@.debug$T\@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё“YJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_NLSF_MSVQ_decode.obj:<!ovovMicrosoft (R) Optimizing Compilerњ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_NLSF_MSVQ_decode.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёд"@SA_Method"SA_Parameter!wchar_t"SA_AttrTargetsSKP_Silk_NLSF_CBS usize_tsSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_struct|SKP_Silk_NLSF_CB_structєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlїBА-ь C*†д]i)F’Џ‹ц+7 @#nŽи,ˆ{‘(yFiдz<G;1=1ѓEj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf_msvq_decode.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 232 - ^ = $23 $T0 236 - ^ = $24 $T0 240 - ^ = U‹ььфSVWНџџџЙ9ИЬЬЬЬѓЋ‹Eƒ8|‹M ‹Q‹E‹; |&hj‹ƒТRhjшƒФƒјuЬ‹E ‹H‹U‹ЏE‹IA‰UјЧEры ‹EрƒР‰Eр‹Eр;E}‹Eр‹MјПA‹Eр‹M‰ыкЧEьы ‹EьƒР‰Eь‹E ‹Mь; ‹Eь‹Mƒ<|‹Uьkв ‹E ‹H‹Eь‹u‹†; |&hj‹ ƒСQhjшƒФƒјuЬƒ}…Q‹EьkР ‹M ‹Q‹Mь‹u‹ ŽСс‹TJ‰Eј‹EјП‹U ‹E‰‹EјПH‹UJ‹E‰H‹EјПH‹UJ‹E‰H‹EјПH‹UJ ‹E‰H ‹EјПH‹UJ‹E‰H‹EјПH ‹UJ‹E‰H‹EјПH ‹UJ‹E‰H‹EјПH‹UJ‹E‰H‹EјПH‹UJ ‹E‰H ‹EјПH‹UJ$‹E‰H$‹EјПH‹UJ(‹E‰H(‹EјПH‹UJ,‹E‰H,‹EјПH‹UJ0‹E‰H0‹EјПH‹UJ4‹E‰H4‹EјПH‹UJ8‹E‰H8‹EјПH‹UJ<‹E‰H<ы_‹EьkР ‹M ‹Q‹Mь‹uП ŽПuЏЮ‹TJ‰EјЧEры ‹EрƒР‰Eр‹Eр;E}‹Eр‹MјПA‹Eр‹M‹Eр‹M‰ыбщо§џџ‹EP‹M ‹QR‹EPшƒФ _^[Фф;ьш‹х]У6 >GNщёњн№!ѕ$јфг ёё?јфNSKP_Silk_NLSF_MSVQ_decodeфР$ € tpNLSF_Q15  ?psNLSF_CB NLSFIndices LPC_order јџџџpCB_element ьџџџts рџџџtiђ(ј"%€+€[.€s1€2€ 3€Ђ5€Т7€9€;€:>€J?€]@€pA€ƒB€–C€ЉD€МE€ЯF€тG€ѕH€I€J€.K€AL€TM€gN€iP€S€ЊT€ЦU€ШW€ЭZ€ф[€ X \ 4 8 0 <= NLSFIndices[ s ] && NLSFIndices[ s ] < psNLSF_CB->CBStages[ s ].nVectorsj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf_msvq_decode.c%0 <= NLSFIndices[ 0 ] && NLSFIndices[ 0 ] < psNLSF_CB->CBStages[ 0 ].nVectors&+VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S,.textј *юЯЖЭ†x.debug$S\/цаe  .rdataœИ-nД8 .rdatažщ]ќ.data _ь—а.rdataœЉ0г]Э .rtc$TMZ Ь.Lм ѓ .rtc$IMZ žz]  .debug$T \(_SKP_Silk_NLSF_MSVQ_decode_SKP_Silk_NLSF_stabilize??_C@_1JM@MPEHCEOL@?$AA0?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAN?$AAL?$AAS?$AAF?$AAI?$AAn?$AAd?$AAi?$AAc?$AAe?$AAs?$AA?$FL?$AA?5?$AAs?$AA?5?$AA?$FN?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAN?$AAL?$AAS?$AAF?$AAI?$AAn?$AAd@__CrtDbgReportW??_C@_1JO@BEFLJAPD@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_NLSF_MSVQ_decode@@9@9??_C@_1JM@CGPKDJPK@?$AA0?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAN?$AAL?$AAS?$AAF?$AAI?$AAn?$AAd?$AAi?$AAc?$AAe?$AAs?$AA?$FL?$AA?5?$AA0?$AA?5?$AA?$FN?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAN?$AAL?$AAS?$AAF?$AAI?$AAn?$AAd@__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase /2399 1273638393 100666 6491 ` Lљ-ъKџ$.drectveA, .debug$SАm@B.textќ P`.debug$SАi @B.rtc$TMZ‡‹@0@.rtc$IMZ•™@0@.debug$T\Ѓ@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёVJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_NLSF2A_stable.obj:<!ovovMicrosoft (R) Optimizing Compilerї=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_NLSF2A_stable.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlїї"}ђ1…s­ЇэMEK ЩC’Џ‹ц+7 @#nŽи,ˆ{Ž(yFiдz<G;1=1ѓBj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf2a_stable.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 220 - ^ = $23 $T0 224 - ^ = $24 $T0 228 - ^ = U‹ььиSVWН(џџџЙ6ИЬЬЬЬѓЋ‹EP‹M Q‹URшƒФ ЧEјы ‹EјƒР‰Eјƒ}ј}>‹EP‹MQUьRшƒФ ƒјu!ПEјkРBЙ+ШQ‹UR‹EPшƒФ ыыыГƒ}јu(ЧEјы ‹EјƒР‰Eј‹Eј;E}3Р‹Mј‹Uf‰JысR‹ЭPшXZ_^[Фи;ьш‹х]УьџџџinvGain_Q30+W{МСгрьѕ$ќи а ёя<ќќсSKP_Silk_NLSF2A_stableиР €    pAR_Q12  pNLSF LPC_order ьџџџtinvGain_Q30 јџџџtiђ€ќ t$€(€2+€J,€c-€‚.€„/€†1€ˆ4€Ž5€Ј6€Д7€Ж9€ X \ œ   Ћ Џ К О 0 4  VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SА.textќ\98КЧУН.debug$SА §НL $LN12№$LN13ф$LN14м 1 Q b q .rtc$TMZЬ.LˆŸ .rtc$IMZžz]ЎХ .debug$T\д_SKP_Silk_NLSF2A_stable_SKP_Silk_bwexpander_SKP_Silk_LPC_inverse_pred_gain_SKP_Silk_NLSF2A__RTC_CheckEsp@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase /2439 1273638393 100666 10553 ` Lљ-ъK N.drectveA” .debug$Sь еС@B.textШе# P`.debug$Sићг@B.rdata}@0@.rdata@0@.rdata™@0@.rdata"Џ@0@.rdataŠб@@@.data[@0Р.rdata_@0@.rtc$TMZy}@0@.rtc$IMZ‡‹@0@.text6•Ы P`.debug$Sx‰@B.debug$T\Л@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёOJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_NLSF2A.obj:<!ovovMicrosoft (R) Optimizing Compiler№=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_NLSF2A.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё‰"@SA_Method"SA_Parameter' ZSKP_Silk_LSFCosTab_FIX_Q12!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒa|ю2ОLИuЊџ „ЎШ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓ9j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf2a.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 596 - ^ = $23 $T0 600 - ^ = $24 $T0 604 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 232 - ^ = $23 $T0 236 - ^ = $24 $T0 240 - ^ = Ч Ы U‹ььPSVWНА§џџЙ”ИЬЬЬЬѓЋЁ3Х‰EќЧ…ˆўџџЧEєы ‹EєƒР‰Eє‹Eє;EB‹Eє‹M ƒ<}&hj‹ƒТRhjшƒФƒјuЬ‹Eє‹M <џ~&hj‹ƒТRhjшƒФƒјuЬ‹Eє‹M ‹Сњ‰•џџџ‹…џџџСр‹Mє‹U ‹ Š+Ш‰ џџџƒНџџџ}%hjЁƒРPhjшƒФƒјuЬНџџџ€|%hjЁƒРPhjшƒФƒјuЬ‹…џџџ‹ …‰џџџ‹…џџџ‹ …+џџџ‰єўџџ‹…џџџСр‹єўџџЏ џџџС‹Uє‰D•”щЉўџџ‹Eбј‰Eм‹EмPM”Q•hџџџRшƒФ ‹EмPM˜Q•<џџџRшƒФ ЧEєы ‹EєƒР‰Eє‹Eє;Eм}z‹Eє‹Œ…lџџџ‹UєŒ•hџџџ‰0џџџ‹Eє‹Mє‹”…@џџџ+”<џџџ‰•$џџџ‹…0џџџ…$џџџСјƒРбјїи‹Mє‰„Ќўџџ‹…$џџџ+…0џџџСјƒРбј‹M+Mє‰„ЈўџџщuџџџЧEшы ‹EшƒР‰Eшƒ}ш щЧ… ўџџЧEєы ‹EєƒР‰Eє‹Eє;E}b‹EєƒМ…Ќўџџ~‹Mє‹”Ќўџџ‰•Д§џџы‹Eє‹Œ…Ќўџџїй‰Д§џџ‹•Д§џџ‰•”ўџџ‹…”ўџџ;… ўџџ~‹…”ўџџ‰… ўџџ‹Eє‰…ˆўџџыН ўџџџ~P‹… ўџџ-џiРя?‹ˆўџџƒСЏ ўџџСљ™їљКОџ+а‰•|ўџџ‹…|ўџџP‹MQ•ЌўџџRшƒФ ыыщџџџƒ}ш …Њ3Рu&hj‹ ƒСLQhjшƒФƒјuЬЧEєы ‹EєƒР‰Eє‹Eє;E}f‹EєМ…Ќўџџџ~ Ч…Д§џџџы8‹MєМЌўџџ€џџ} Ч…А§џџ€џџы‹Uє‹„•Ќўџџ‰…А§џџ‹А§џџ‰Д§џџ‹Uє‹…Д§џџ‰„•Ќўџџы‰ЧEєы ‹EєƒР‰Eє‹Eє;E}‹Eє‹M‹Uєf‹”•Ќўџџf‰AыиR‹ЭPшXZ_^[‹Mќ3ЭшФP;ьш‹х]УI”џџџ@hџџџ$<џџџ$Ќўџџ@a_int32QPcos_LSF_Q204]3e/n+u'’&š/Ѓ+Њ'э"є/§+'%/.+5'K^ЊHСHQpx/+ˆ'LQ7`6m5|ˆ” Ќѕ$ШP U( ё5Ш(ШсSKP_Silk_NLSF2APР … :ќџџџ       a  NLSF d $џџџtQtmp єўџџtdelta |ўџџtsc_Q16 єџџџtk  џџџtf_frac мџџџtdd џџџtcos_val ЌўџџИa_int32 ”џџџИcos_LSF_Q20 ”ўџџtabsval ˆўџџtidx  ўџџtmaxabs џџџtf_int шџџџti hџџџYP <џџџYQ 0џџџtPtmpђ€Ш8-t@€(I€2N€PO€‚P€ЗS€ЩV€уX€Y€B\€U]€n`€a€’c€šf€Бg€Шj€тk€ќl€p€6q€Wr€\u€xw€‚x€œy€йz€ч{€ѓ|€ќ~€ў€€ ƒ€>„€X…€Z†€\ˆ€a‹€kŒ€•€ЏŽ€€“€/”€D•€F–€ X \ Ё Ѕ А Д П У Ю в н с ь № X \ 0f_int < 128f_int >= 0NLSF[k] <= 32767j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf2a.c@NLSF[k] >= 0<AU‹ььфSVWНџџџЙ9ИЬЬЬЬѓЋ‹EЧ‹E ‹їй‹U‰JЧEјы ‹EјƒР‰Eј‹Eј;Eа‹Eјбр‹M ‹‰Uр‹Eј‹M‹tќбц‹Eр™‹Ш‹њ‹Uј‹E‹™RPWQшБшƒРƒвБш+№‹Mј‹U‰tŠ‹Eј‰Eьы ‹Eьƒш‰Eьƒ}ь~P‹Eр™‹Ш‹ђ‹Uь‹E‹Dќ™RPVQшБшƒРƒвБш‹Mь‹U‹LŠј+Ш‹Uь‹E ‹Uь‹E‰ ыЁ‹E‹H+Mр‹U‰Jщџџџ_^[Фф;ьш‹х]УƒJŠI—IжJнIъI.5ѕ$6ф Ч ёР?6"VSKP_Silk_NLSF2A_find_polyфР$ € tout  cLSF tdd рџџџtftmp јџџџtk ьџџџtnђx68 l*€.€'/€40€R1€`2€Ї3€О4€ 5€6€7€"8€ HXH \H H H VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sь +ў™{.textШ#Ъ[дБЫь*.debug$SиzžзЬ $LN39А$LN38И$LN37К$LN36М$LN40€$LN41x.rdataЁј+№5 M.rdataq:MSi.rdataе ыС.rdata"8“.d“ .rdata Š$‡I]Ѓ .data =X›^ .rdata нІ6Х„ ыў   ( .rtc$TMZ Ь.L? V .rtc$IMZ žz]e | .text6Яђ,B>вD.debug$Sx \†л‹ __allshr __allmul .debug$T\І_SKP_Silk_NLSF2A??_C@_13COJANIEC@?$AA0?$AA?$AA@_SKP_Silk_bwexpander_32_SKP_Silk_LSFCosTab_FIX_Q12??_C@_1BI@PHDAPKO@?$AAf?$AA_?$AAi?$AAn?$AAt?$AA?5?$AA?$DM?$AA?5?$AA1?$AA2?$AA8?$AA?$AA@??_C@_1BG@LMNLJLAO@?$AAf?$AA_?$AAi?$AAn?$AAt?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1CC@NKKAAAON@?$AAN?$AAL?$AAS?$AAF?$AA?$FL?$AAk?$AA?$FN?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA3?$AA2?$AA7?$AA6?$AA7?$AA?$AA@__CrtDbgReportW??_C@_1IK@FEJLCIGL@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_NLSF2A@@9@9??_C@_1BK@JFCFOHBA@?$AAN?$AAL?$AAS?$AAF?$AA?$FL?$AAk?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_NLSF2A_find_poly /2472 1273638393 100666 11754 ` Lљ-ъKr&E.drectveA” .debug$S8е@B.text#  P`.debug$SЌ0м@B.rtc$TMZ@0@.rtc$IMZ @0@.text…* P`.debug$SDЏѓ@B.text…% P`.debug$SHЊђ@B.text`$„! P`.debug$Sђ!ђ$ @B.rdata‚`%@@@.dataт%@0Р.rdata0ц%@0@.debug$T\&@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёwKJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_MA.obj:<!ovovMicrosoft (R) Optimizing Compilerь=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_MA.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёq"@SA_Method"SA_Parameter!wchar_t"SA_AttrTargettintptr_t usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒА ЁзяxBЁъиcгђФ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓЇj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_ma.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 252 - ^ = $23 $T0 256 - ^ = $24 $T0 260 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 264 - ^ = $23 $T0 268 - ^ = $24 $T0 272 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 360 - ^ = $23 $T0 364 - ^ = $24 $T0 368 - ^ = U‹ььјSVWНџџџЙ>ИЬЬЬЬѓЋЧEјы ‹EјƒР‰Eј‹Eј;Eр‹Eј‹MПA‰UрПEр‹M ПЏТ‹M‰Eд‹EдСј ƒРбј‰EдЧEьы ‹EьƒР‰Eь‹Eь;E}&ПEр‹Mь‹U П JЏС‹Uь‹M‘‹Uь‹M‰D‘ќыЩПEр‹M‹U П JЏС‹U‹M‰D‘ќ}дџ~ Ч… џџџџы*}д€џџ} Ч…џџџ€џџы ‹Eд‰…џџџ‹џџџ‰ џџџ‹Uј‹Ef‹ џџџf‰ Pщ џџџ_^[‹х]Уѕ$#јQ ёё1# SKP_Silk_MAјР8 € in  B tS out len order ьџџџtd рџџџtin16 јџџџtk дџџџtout32ђx#8 l/€3€<4€I5€^6€l8€†9€Њ:€Ќ;€Ч>€?€@€ X \ 4 8 U‹ььSVWНќўџџЙAИЬЬЬЬѓЋ‹Eƒр…Y‹E ƒр…MЧEјы ‹EјƒР‰Eј‹Eј;E*‹Eј‹MПA‰Uр‹EрСр ‹M+‰Eд‹EдСј ƒРбј‰EдЧEьы ‹EьƒР‰Eь‹Eƒш9Eь}M‹Eь‹M ‹A‰UШПEрПMШЏС‹Uь‹MD‘‹Uь‹M‰‘ПEр‹MШСљЏС‹Uь‹MD‘‹Uь‹M‰D‘ыŸ‹Eь‹M ‹A‰UШПEрПMШЏС‹U‹MD‘ќ‹U‹M‰D‘јПEр‹MШСљЏС‹U‹M‰D‘ќ}дџ~ Ч…џџџџы*}д€џџ} Ч…ќўџџ€џџы ‹Eд‰…ќўџџ‹ќўџџ‰џџџ‹Uј‹Ef‹џџџf‰ PщСўџџщћЧEјы ‹EјƒР‰Eј‹Eј;Eн‹Eј‹MПA‰Uр‹EрСр ‹M+‰Eд‹EдСј ƒРбј‰EдЧEьы ‹EьƒР‰Eь‹Eƒш9Eь}&ПEр‹Mь‹U П JЏС‹Uь‹MD‘‹Uь‹M‰‘ыЦПEр‹M‹U ПLJўЏС‹U‹M‰D‘ќ}дџ~ Ч…џџџџы*}д€џџ} Ч…ќўџџ€џџы ‹Eд‰…ќўџџ‹ќўџџ‰џџџ‹Uј‹Ef‹џџџf‰ Pщџџџ_^[‹х]Уѕ$…У ё <…~ SKP_Silk_MA_PredictionРD € in  B tS out len order ьџџџtd рџџџtin16 јџџџtk ШџџџtB32 дџџџtout32ђј…8ьJ€O€6V€TW€aX€oY€}[€š\€І]€Ф^€х_€ч`€ѓa€b€)e€yf€~g€ƒi€Ёj€Ўk€Мl€Ъn€чo€ p€ q€)t€yu€~w€ X \ L P U‹ььSVWНќўџџЙAИЬЬЬЬѓЋ‹Eƒр…Y‹E ƒр…MЧEјы ‹EјƒР‰Eј‹Eј;E*‹Eј‹MПA‰Uр‹EрСр ‹M+‰Eд‹EдСј ƒРбј‰EдЧEьы ‹EьƒР‰Eь‹Eƒш9Eь}M‹Eь‹M ‹A‰UШПEрПMШЏС‹Uь‹MD‘‹Uь‹M‰‘ПEр‹MШСљЏС‹Uь‹MD‘‹Uь‹M‰D‘ыŸ‹Eь‹M ‹A‰UШПEрПMШЏС‹U‹MD‘ќ‹U‹M‰D‘јПEр‹MШСљЏС‹U‹M‰D‘ќ}дџ~ Ч…џџџџы*}д€џџ} Ч…ќўџџ€џџы ‹Eд‰…ќўџџ‹ќўџџ‰џџџ‹Uј‹Ef‹џџџf‰ PщСўџџщћЧEјы ‹EјƒР‰Eј‹Eј;Eн‹Eј‹MПA‰Uр‹EрСр ‹M+‰Eд‹EдСј ƒРбј‰EдЧEьы ‹EьƒР‰Eь‹Eƒш9Eь}&ПEр‹Mь‹U П JЏС‹Uь‹MD‘‹Uь‹M‰‘ыЦПEр‹M‹U ПLJўЏС‹U‹M‰D‘ќ}дџ~ Ч…џџџџы*}д€џџ} Ч…ќўџџ€џџы ‹Eд‰…ќўџџ‹ќўџџ‰џџџ‹Uј‹Ef‹џџџf‰ Pщџџџ_^[‹х]Уѕ$…У ё@…~ЃSKP_Silk_MA_Prediction_Q13РD € in  B tS out tlen torder ьџџџtd рџџџtin16 јџџџtk ШџџџtB32 дџџџtout32ђј…8ь€…€6Œ€T€aŽ€o€}‘€š’€І“€Ф”€х•€ч–€ѓ—€˜€)›€yœ€~€ƒŸ€Ё €ЎЁ€МЂ€ЪЄ€чЅ€ І€ Ї€)Њ€yЋ€~­€ &X& \& P& T& U‹ььdSVWНœўџџЙYИЬЬЬЬѓЋЁ3Х‰Eќ‹Eбј‰Eа‹Eабр;Et&hj‹ ƒСQhjшƒФƒјuЬЧEєы ‹EєƒР‰Eє‹Eє;Eа}2ПEєбр‰Eм‹Eм‹M ПAтџџ‹Eм‹M ПDAСр а‹Mє‰TœыНЧEєы ‹EєƒР‰Eє‹Eє;EF‹Ef‹f‰xџџџЧEЧEшы ‹EшƒР‰Eш‹Eаƒш9EшŠПEшL‰Mм‹Eш‹L…œ‰MФ‹Eм‹Mf‹Af‰•lџџџ‹Eм‹Mf‹•xџџџf‰AП…xџџџПMФЏСE‰EП…lџџџ‹MФСљЏСE‰E‹Eм‹Mf‹TAf‰•xџџџ‹Eм‹Mf‹•lџџџf‰TAщ^џџџ‹Eа‹L…˜‰MФ‹E‹Mf‹TAўf‰•lџџџ‹E‹Mf‹•xџџџf‰TAўП…xџџџПMФЏСE‰EП…lџџџ‹MФСљЏСE‰E‹Eє‹MПAСт +Uт€uO‹Eє‹MПAСт ‹E5€#ат€t Ч…Єўџџ€ы‹Mє‹UПJСр +E‰…Єўџџ‹Єўџџ‰ ўџџыL‹Uє‹EП PСс ё€#Mс€t Ч…œўџџџџџы‹Uє‹EП PСс +M‰œўџџ‹•œўџџ‰• ўџџ‹… ўџџ‰E‹EСј ƒРбј‰E„}„џ~ Ч…Єўџџџы*}„€џџ} Ч… ўџџ€џџы ‹E„‰… ўџџ‹ ўџџ‰Єўџџ‹Uє‹Ef‹Єўџџf‰ P‹E‹Mє‹Uf‹ Jf‰щЅ§џџR‹ЭPшXZ_^[‹Mќ3ЭшФd;ьш‹х]Уœџџџ B_align_Q12>;=C9L5S10A*@7?D/P.ѕ$`d5( ёЎB`(`юSKP_Silk_LPC_analysis_filterdРЄ … :ќџџџ    in  B S out len Order шџџџtj єџџџtk xџџџSA мџџџtidx œџџџбB_align_Q12 lџџџSB аџџџtOrder_half ФџџџtBtmp „џџџtout32 џџџtout32_Q12ђ`8И€(Й€0Н€`Р€zС€ƒТ€ЊУ€ЌЦ€ЪЧ€зШ€оЩ€џЪ€ Ь€Э€%Ю€6Я€Jа€`б€r∄㈉戓з€Ѕи€Зй€Ык€сн€р€Ћу€ћц€ ч€ш€ -X- \- Ў. В. Н/ С/ Ь0 а0 №- є- j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_ma.cИ2 * Order_half == OrderVОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S8.text#ŽZnj&Lr™.debug$SЌы јЃ .rtc$TMZЬ.L( .rtc$IMZžz]7N .text…{Ђi3ПЫu.debug$SDОD] .text …SЁБњ^kіЛ.debug$S H К7$u .text ` яAџЮ.:qM.debug$S  Dэпэ‘ $LN23T $LN24H $LN25@ Џ .rdata ‚Њ}hП .dataufЦиz.rdata0™Ъ*Ÿ­J] l ‡ .debug$T\ž_SKP_Silk_MA__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_MA_Prediction_SKP_Silk_MA_Prediction_Q13_SKP_Silk_LPC_analysis_filter__CrtDbgReportW??_C@_1IC@EPNMGKGN@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_LPC_analysis_filter@@9@9??_C@_1DA@JCFNIGPD@?$AA2?$AA?5?$AA?$CK?$AA?5?$AAO?$AAr?$AAd?$AAe?$AAr?$AA_?$AAh?$AAa?$AAl?$AAf?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?$AA@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8/2501 1273638394 100666 9003 ` L њ-ъKк1.drectveAє .debug$S<5q@B.rdata™@0@.textoЏ P`.debug$Snv@B.rtc$TMZЈЌ@0@.rtc$IMZЖК@0@.textGФ P`.debug$Sф я@B.textG! P`.debug$SфhL@B.debug$T\~@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё—[J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_LTP_scale_ctrl_FIX.obj:<!ovovMicrosoft (R) Optimizing Compilerќ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_LTP_scale_ctrl_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёj# жLTPScaleThresholds_Q15) fSKP_Silk_LTPScales_table_Q14"@SA_Method"SA_Parameter PSKP_Silk_detect_SWB_state|SKP_Silk_NLSF_CB_structTSKP_SILK_LBRR_structKSKP_Silk_encoder_stateRSKP_Silk_LP_state#mSKP_Silk_encoder_control_FIX+SKP_Silk_VAD_state!wchar_t!„SKP_Silk_predict_state_FIX!cSKP_Silk_encoder_state_FIXSKP_Silk_nsq_state‹SKP_Silk_encoder_control#‡SKP_Silk_prefilter_state_FIX"SA_AttrTargetsSKP_Silk_NLSF_CBS‰SKP_Silk_shape_state_FIX usize_t!ЧSKP_Silk_range_coder_stateSKP_Silk_nsq_stateTSKP_SILK_LBRR_struct+SKP_Silk_VAD_state!ЧSKP_Silk_range_coder_state PSKP_Silk_detect_SWB_stateRSKP_Silk_LP_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structKSKP_Silk_encoder_state‹SKP_Silk_encoder_control‰SKP_Silk_shape_state_FIX#‡SKP_Silk_prefilter_state_FIX!„SKP_Silk_predict_state_FIX!cSKP_Silk_encoder_state_FIX#mSKP_Silk_encoder_control_FIXєXprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9Gb~УсКKRэYxпvˆ"Š’Џ‹ц+7 @#nŽи,ˆ{ѓЙj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_ltp_scale_ctrl_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 268 - ^ = $23 $T0 272 - ^ = $24 $T0 276 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = Д И й н ™yff@33f&š3Ь = š U‹ььSVWНјўџџЙBИЬЬЬЬѓЋj‹E ‹M‹t+‘0ЄRшƒФ‹M‹‘4Єбњ‹M‹‰4ЄƒсбТ‹U‰‚4Є‹E‹M ‹‘t‰0Є‹E ‹ˆtбљ‹U‹‚4ЄбјШСљƒСбљ‰Mр‹Eрƒш`PшƒФ‰Eд‹E Ч@\‹E‹ˆф‰Mј‹EƒИи u|‹E‹€р™Йїљ‰Eь‹Eь‹MјTџ‰Uјj ‹EјPшƒФП E‰MШj ‹EјƒРPшƒФП E‰MМ‹Eд;EШ~ ‹E Ч@\ы‹Eд;EМ~ ‹E Ч@\‹E ‹H\ПM‹E ‰_^[Ф;ьш‹х]У4-œ№&ћ  & Ngѕ$oе ёAo[™SKP_Silk_LTP_scale_ctrl_FIXРH € VpsEnc  hpsEncCtrl ьџџџtframes_per_packet Шџџџtthrld1_Q15 Мџџџtthrld2_Q15 јџџџtround_loss рџџџtg_out_Q5 дџџџtg_limit_Q15ђЈo(œ+€1€_3€q6€”7€І:€А=€М@€ШB€мD€щE€F€H€&J€2K€:M€DP€[Q€ X \ ` d U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФG ёq1G@.SKP_min_intФР € ta  tbђ0G$з€и€@й€ &X& \& Д& И& U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E ~ ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФG ёq1G@.SKP_max_intФР € ta  tbђ0G$щ€ъ€@ы€ -X- \- Д- И- VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S<bУtџ.rdataS“ 8.textoуїИiŒС.debug$Sр#': 9W j .rtc$TMZЬ.Ly .rtc$IMZžz]ŸЖ .textGиьиоп„[Ќ.debug$S фкJаˆХ .text GСв UdЈЏ.debug$S ф ПVfв .debug$T \п_LTPScaleThresholds_Q15_SKP_Silk_LTP_scale_ctrl_FIX_SKP_Silk_LTPScales_table_Q14_SKP_Silk_sigm_Q15__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_min_int_SKP_max_int /2546 1273638394 100666 7278 ` Lњ-ъK%.drectveA, .debug$SЬm@B.text‘9Ъ P`.debug$S$( @B.rtc$TMZ–š@0@.rtc$IMZЄЈ@0@.debug$T\В@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёЁ`J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_LTP_analysis_filter_FIX.obj:<!ovovMicrosoft (R) Optimizing Compiler=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_LTP_analysis_filter_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tєXprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9ѕ…PС}>*}ЮkvБ’Џ‹ц+7 @#nŽи,ˆ{ѓLj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_ltp_analysis_filter_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 312 - ^ = $23 $T0 316 - ^ = $24 $T0 320 - ^ = U‹ьь4SVWНЬўџџЙMИЬЬЬЬѓЋЁ3Х‰Eќ‹E ‰Eє‹E‰EШЧEМы ‹EМƒР‰EМƒ}Мѓ‹EМ‹M‹бт‹Eє+Т‰EшЧEАы ‹EАƒР‰EАƒ}А}‹EМkРEА‹MА‹Uf‹Bf‰DMдызЧEАы ‹EАƒР‰EА‹E E$9EАm‹EА‹MШ‹UА‹uєf‹Vf‰A‹EшПHПUдЏЪ‰M˜ЧEЄы ‹EЄƒР‰EЄƒ}Є}"И+EЄ‹MшПA‹EЄПLEдЏбU˜‰U˜ыЯ‹E˜Сј ƒРбј‰E˜‹EА‹MєПA+U˜њџ~ Ч…аўџџџы@‹EА‹MєПA+U˜њ€џџ} Ч…Ьўџџ€џџы‹EА‹MєПA+U˜‰•Ьўџџ‹…Ьўџџ‰…аўџџ‹MА‹UШf‹…аўџџf‰Jƒ}uF‹EМ‹M‹Сњ‹EА‹MШПAЏа‹MМ‹E‹ ˆсџџ‹EА‹uШПFЏШСљб‹MА‹EШf‰Hы4‹EМ‹M‹™‹Ш‹ђ‹UА‹EШПP™RPVQш‹Mш‹MА‹UШf‰J‹EшƒР‰Eшщ{ўџџ‹E E$‹MШA‰UШ‹E ‹MєA‰Uєщњ§џџR‹ЭPшXZ_^[‹Mќ3ЭшФ4;ьш‹х]У‹џдџџџ Btmp_Q14џIN]jx„ѕ$‘4 к( ёмF‘(‘]SKP_Silk_LTP_analysis_filter_FIX4Рt … :ќџџџ    LTP_res  x LTPCoef_Q14 pitchL invGains_Qxx Qxx  subfr_length $pre_length Єџџџtj єџџџx_ptr Мџџџtk Аџџџti ˜џџџtLTP_est шџџџx_lag_ptr дџџџСBtmp_Q14 ШџџџLTP_res_ptrђш‘(м(€(/€.0€41€P3€c4€{5€“6€•9€Ж:€Ъ=€л>€ѓ?€@€A€#D€•G€›H€пI€сJ€M€N€#Q€2R€>S€CT€ X \ В Ж С Х а д   !VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SЬ.text‘ Њ Ж;Џ-{.debug$S ˆGЗ $LN21ˆ$LN22|$LN23t&9 H c __allshr __allmul .rtc$TMZЬ.Lz‘ .rtc$IMZžz] З .debug$T\Ц_SKP_Silk_LTP_analysis_filter_FIX___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/2596 1273638394 100666 4531 ` Lњ-ъK….drectveAД .debug$S ѕ@B.rdata%@@@.debug$T\)@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёVJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_LSF_cos_table.obj:<!ovovMicrosoft (R) Optimizing Compilerї=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_LSF_cos_table.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё‰"@SA_Method"SA_Parameter' ZSKP_Silk_LSFCosTab_FIX_Q12!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒuN=аKЎh—*1ѕVhœЯ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓ\j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lsf_cos_table.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hз л ўіъиТЈˆb: и b"мBю–:иr œ*Д:М<Ж. ~шNАnШtЦdЎ ј @ „ Ш J ŠЦ>xВъ"Z’Ъ6џџџnўџџІ§џџоќџџќџџNћџџˆњџџТљџџўјџџ:јџџvїџџЖіџџіѕџџ8ѕџџ|єџџРѓџџѓџџRђџџœёџџъ№џџ:№џџŒяџџтюџџ8юџџ’эџџ№ьџџPьџџВыџџыџџ‚ъџџ№щџџ`щџџвшџџJшџџФчџџDчџџЦцџџLцџџжхџџdхџџіфџџŽфџџ(фџџЦуџџjуџџуџџОтџџpтџџ$тџџосџџžсџџ`сџџ(сџџірџџЦрџџžрџџxрџџXрџџ>рџџ(рџџрџџ рџџрџџрџџVОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S ІSљK.rdata6jЋх.debug$T\ _SKP_Silk_LSFCosTab_FIX_Q12 /2636 1273638394 100666 7628 ` Lњ-ъKГ".drectveA, .debug$S| m@B.textМщЅ P`.debug$SьсЭ @B.rtc$TMZ;?@0@.rtc$IMZIM@0@.debug$T\W@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё^J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_LPC_synthesis_order16.obj:<!ovovMicrosoft (R) Optimizing Compilerџ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_LPC_synthesis_order16.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒ:ў|ЅžusUЧП‚|“5]Fз’Џ‹ц+7 @#nŽи,ˆ{"(yFiдz<G;1=1ѓжj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lpc_synthesis_order16.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 324 - ^ = $23 $T0 328 - ^ = $24 $T0 332 - ^ = U‹ьь@SVWНРўџџЙPИЬЬЬЬѓЋЁ3Х‰EќЧEєы ‹EєƒР‰Eєƒ}є}-‹Eєбр‹M ПAтџџ‹Eєбр‹M ПDAСр а‹Mє‰TЈыФЧEєы ‹EєƒР‰Eє‹Eє;Eь‹E‹H<‰Mш‹EЈ‰Eа‹E‹H8‰Mм‹E‹Mш‰H8‹EшСјПMаЏС‹UштџџПMаЏбСњТ‰Eœ‹EмСј‹MаСљЏСEœ‹Uмтџџ‹MаСљЏбСњТ‰Eœ‹E‹H4‰Mш‹E‹Mм‰H4‹EЌ‰Eа‹E‹H0‰Mм‹E‹Mш‰H0‹EшСјПMаЏС‹UштџџПMаЏбСњUœа‰Uœ‹EмСј‹MаСљЏСEœ‹Uмтџџ‹MаСљЏбСњТ‰Eœ‹E‹H,‰Mш‹E‹Mм‰H,‹EА‰Eа‹E‹H(‰Mм‹E‹Mш‰H(‹EшСјПMаЏС‹UштџџПMаЏбСњUœа‰Uœ‹EмСј‹MаСљЏСEœ‹Uмтџџ‹MаСљЏбСњТ‰Eœ‹E‹H$‰Mш‹E‹Mм‰H$‹EД‰Eа‹E‹H ‰Mм‹E‹Mш‰H ‹EшСјПMаЏС‹UштџџПMаЏбСњUœа‰Uœ‹EмСј‹MаСљЏСEœ‹Uмтџџ‹MаСљЏбСњТ‰Eœ‹E‹H‰Mш‹E‹Mм‰H‹EИ‰Eа‹E‹H‰Mм‹E‹Mш‰H‹EшСјПMаЏС‹UштџџПMаЏбСњUœа‰Uœ‹EмСј‹MаСљЏСEœ‹Uмтџџ‹MаСљЏбСњТ‰Eœ‹E‹H‰Mш‹E‹Mм‰H‹EМ‰Eа‹E‹H‰Mм‹E‹Mш‰H‹EшСјПMаЏС‹UштџџПMаЏбСњUœа‰Uœ‹EмСј‹MаСљЏСEœ‹Uмтџџ‹MаСљЏбСњТ‰Eœ‹E‹H ‰Mш‹E‹Mм‰H ‹EР‰Eа‹E‹H‰Mм‹E‹Mш‰H‹EшСјПMаЏС‹UштџџПMаЏбСњUœа‰Uœ‹EмСј‹MаСљЏСEœ‹Uмтџџ‹MаСљЏбСњТ‰Eœ‹E‹H‰Mш‹E‹Mм‰H‹EФ‰Eа‹E‹‰Mм‹E‹Mш‰‹EшСјПMаЏС‹UштџџПMаЏбСњUœа‰Uœ‹EмСј‹MаСљЏСEœ‹Uмтџџ‹MаСљЏбСњТ‰Eœ‹EСј‹Mє‹UП JЏС‹Uтџџ‹Mє‹uП NЏбСњUœат€…Œ‹UСњ‹Eє‹MПAЏа‹Mсџџ‹Eє‹uПFЏШСљб#Uœт€t Ч…Шўџџ€ы6‹MСљ‹Uє‹EПPЏЪ‹E%џџ‹Uє‹uПVЏТСјEœС‰…Шўџџ‹…Шўџџ‰…Фўџџщ‡‹MСљ‹Uє‹EПPЏЪ‹E%џџ‹Uє‹uПVЏТСјШ Mœс€u Ч…Рўџџџџџы7‹EСј‹Mє‹UП JЏС‹Uтџџ‹Mє‹uП NЏбСњUœа‰•Рўџџ‹•Рўџџ‰•Фўџџ‹…Фўџџ‰Eœ‹EœСј ƒРбј‰E}џ~ Ч…Шўџџџы*}€џџ} Ч…Фўџџ€џџы ‹E‰…Фўџџ‹Фўџџ‰Шўџџ‹Uє‹Ef‹Шўџџf‰ P}œџџџ~ Ч…Шўџџџџџы*}œј} Ч…Фўџџјы ‹Eœ‰…Фўџџ‹Фўџџ‰Шўџџ‹•ШўџџСт‹E‰P<щџљџџR‹ЭPшXZ_^[‹Mќ3Эш‹х]УIЈџџџ A_align_Q12}‚‘ Ќѕ$М@d( ё‚DМ(М_SKP_Silk_LPC_synthesis_order16@Р€ … :ќџџџ    in  A_Q12 Gain_Q26 tS out len єџџџtk шџџџtSA аџџџtAtmp мџџџtSB ЈџџџбA_align_Q12 œџџџtout32_Q10 џџџtout32ђ(М8B,€(1€@2€k3€m:€‹=€”>€š?€Ѓ@€ЌA€бB€§C€D€G€H€I€'J€OK€{L€„M€O€“P€œQ€ЅR€ЭS€љT€U€ W€X€Y€#Z€K[€w\€€]€‰_€`€˜a€Ёb€Щc€ѕd€ўe€g€ h€i€j€Gk€sl€|m€…o€‹p€”q€r€Хs€ёt€њu€x€ y€z€{€A|€m€€Цƒ€д†€$‰€rŠ€w‹€ X \ А Д П У Ю в Ф Ш VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S| .textМв‘ВЇ. .debug$Sь a”ЊК $LN23А$LN24Є$LN25œ$7 R .rtc$TMZЬ.Li€ .rtc$IMZžz]І .debug$T\Е_SKP_Silk_LPC_synthesis_order16___security_cookie@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/2684 1273638394 100666 7961 ` L њ-ъKg0.drectveAЄ .debug$Sx х@B.textШ]% P`.debug$S“Ћ @B.rdataІ@@@.dataП@0Р.rdata,У@0@.rtc$TMZяѓ@0@.rtc$IMZ§@0@.debug$T\ @B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё›]J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_LPC_synthesis_filter.obj:<!ovovMicrosoft (R) Optimizing Compilerў=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_LPC_synthesis_filter.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒЁд]јќИžsЈ”ОŸ?ж’Џ‹ц+7 @#nŽи,ˆ{!(yFiдz<G;1=1ѓеj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lpc_synthesis_filter.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 360 - ^ = $23 $T0 364 - ^ = $24 $T0 368 - ^ = U‹ььdSVWНœўџџЙYИЬЬЬЬѓЋЁ3Х‰Eќ‹E бј‰Eа‹Eабр;E t&hj‹ ƒСQhjшƒФƒјuЬЧEєы ‹EєƒР‰Eє‹Eє;Eа}2ПEєбр‰Eм‹Eм‹M ПAтџџ‹Eм‹M ПDAСр а‹Mє‰T„ыНЧEєы ‹EєƒР‰Eє‹Eє;EЌ‹E ‹M‹Tќ‰UФЧ…xџџџЧEшы ‹EшƒР‰Eш‹Eаƒш9EшТПEшL‰Mм‹Eш‹L…„‰MЌ‹E ƒш+Eм‹M‹‰UИ‹E ƒш+Eм‹M‹UФ‰‹EФСјПMЌЏС‹UФтџџПMЌЏбСњ•xџџџа‰•xџџџ‹EИСј‹MЌСљЏС…xџџџ‹UИтџџ‹MЌСљЏбСњТ‰…xџџџ‹E ƒш+Eм‹M‹‰UФ‹E ƒш+Eм‹M‹UИ‰щ&џџџ‹Eа‹L…€‰MЌ‹E‹‰MИ‹E‹MФ‰‹EФСјПMЌЏС‹UФтџџПMЌЏбСњ•xџџџа‰•xџџџ‹EИСј‹MЌСљЏС…xџџџ‹UИтџџ‹MЌСљЏбСњТ‰…xџџџ‹EСј‹Mє‹UП JЏС‹Uтџџ‹Mє‹uП NЏбСњ•xџџџат€…’‹UСњ‹Eє‹MПAЏа‹Mсџџ‹Eє‹uПFЏШСљб#•xџџџт€t Ч…Єўџџ€ы9‹MСљ‹Uє‹EПPЏЪ‹E%џџ‹Uє‹uПVЏТСј…xџџџС‰…Єўџџ‹…Єўџџ‰… ўџџщ‹MСљ‹Uє‹EПPЏЪ‹E%џџ‹Uє‹uПVЏТСјШ xџџџс€u Ч…œўџџџџџы:‹EСј‹Mє‹UП JЏС‹Uтџџ‹Mє‹uП NЏбСњ•xџџџа‰•œўџџ‹•œўџџ‰• ўџџ‹… ўџџ‰…xџџџ‹…xџџџСј ƒРбј‰…lџџџНlџџџџ~ Ч…Єўџџџы0Нlџџџ€џџ} Ч… ўџџ€џџы ‹…lџџџ‰… ўџџ‹ ўџџ‰Єўџџ‹Uє‹Ef‹Єўџџf‰ PНxџџџџџџ~ Ч…Єўџџџџџы0Нxџџџј} Ч… ўџџјы ‹…xџџџ‰… ўџџ‹ ўџџ‰Єўџџ‹•ЄўџџСт‹E ‹M‰Tќщ?ќџџR‹ЭPшXZ_^[‹Mќ3ЭшФd;ьш‹х]УI„џџџ A_align_Q12;CLS|"! ЌИѕ$Шdc( ёШCШ(ШaSKP_Silk_LPC_synthesis_filterdРЄ … :ќџџџ    in  A_Q12 Gain_Q26 tS out len  Order шџџџtj єџџџtk ФџџџtSA ЌџџџtAtmp мџџџtidx ИџџџtSB аџџџtOrder_half „џџџбA_align_Q12 xџџџtout32_Q10 lџџџtout32ђШ8.€(/€03€`6€z7€ƒ8€Њ9€Ќ<€Ъ=€з>€с?€@€ F€G€)H€;I€iJ€›K€­L€ПM€ФP€ЮQ€жR€оS€ T€>W€ЉZ€Н]€`€qa€vb€ X \ Џ Г О Т Э б   j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lpc_synthesis_filter.c.2*Order_half == Order',VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sx .textШ ?Ћъƒџˆ•V.debug$S Q§s $LN27М$LN28А$LN29Ј# .rdataІp"3.data иэ@ю.rdata,Vd?~"ВХ д я .rtc$TMZЬ.L .rtc$IMZ žz], C .debug$T \R_SKP_Silk_LPC_synthesis_filter__CrtDbgReportW??_C@_1KG@NEKGGACB@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_LPC_synthesis_filter@@9@9??_C@_1CM@COEPNLF@?$AA2?$AA?$CK?$AAO?$AAr?$AAd?$AAe?$AAr?$AA_?$AAh?$AAa?$AAl?$AAf?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?$AA@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase /2731 1273638394 100666 8575 ` L њ-ъKЛ<.drectveA .debug$Sd ]@B.textфСЅ P`.debug$S|џ{ @B.rtc$TMZщэ@0@.rtc$IMZїћ@0@.textоу P`.debug$SGc@B.rdata•@0@.rdata˜­@@@.dataE@0Р.rdataI@0@.debug$T\_@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёVJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_LPC_stabilize.obj:<!ovovMicrosoft (R) Optimizing Compilerї=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_LPC_stabilize.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЈяЉЌŸ"+ќqЅ’СмсU#[Т)oњ mњюQл'fQЊWb!Ј?~NЯзѕь”[иC-д2ўрм…ьЊ6огЙОџ„w„љ”m–˜ЊдЉ-Г‘МКGƒQйЛyјs‡Іkoьє9v[7Œ{њnс%к™ЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒЗt8Йн9‹‡0$(ѓЯ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓЮj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lpc_stabilize.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 272 - ^ = $23 $T0 276 - ^ = $24 $T0 280 - ^ = U‹ьь SVWНєўџџЙCИЬЬЬЬѓЋЧEШ‹EP‹MQ‹U RшƒФ И…Р„яЧEј€ЧEды ‹EдƒР‰Eд‹Eд;E}M‹Eд‹M ƒ<~‹Uд‹E ‹ ‰єўџџы‹Uд‹E ‹ їй‰єўџџ‹•єўџџ‰Uь‹Eь;Eј~ ‹Eь‰Eј‹Eд‰EШыЂ}ј№џ|q‹MјСљИџџџ™їљ‰EрИ+Eр‰Eр‹MШƒС‹Eр™їљ‰EрИ+Eр‰Eр‹EрСјiР\‹MрсџџiЩ\СљСбр‰Eр‹EрP‹MQ‹U RшƒФ ыыщџџџЧEды ‹EдƒР‰Eд‹Eд;E}‹Eд‹M ‹СњƒТбњ‹Eд‹Mf‰Aыв‹EP‹MQUМRшƒФ ƒјuh;џ‹EP‹MQшƒФ ыаR‹ЭPшXZ_^[Ф ;ьш‹х]УIМџџџinvGain_Q302%y“ЂЇЙШдѕ$ф \ ёB<ффЃSKP_Silk_LPC_stabilize РL €    a_Q12  ta_Q16 bwe_Q16 L МџџџtinvGain_Q30 рџџџtsc_Q16 ьџџџtabsval Шџџџtidx јџџџtmaxabs дџџџtiђјф8ь(€*€%-€93€F5€M6€g7€ž8€І9€Ќ:€В<€Д>€Н@€ЮA€йB€шC€ѓD€E€,F€.G€0I€5L€OM€jN€lS€…T€šU€œV€ X \ œ   Ћ Џ К О „ ˆ  U‹ьь SVWНєўџџЙCИЬЬЬЬѓЋЧEрИ+E‰EьИ…Р„ЧЧEд€ЧEјы ‹EјƒР‰Eј‹Eј;E}M‹Eј‹M ƒ<~‹Uј‹E ‹ ‰єўџџы‹Uј‹E ‹ їй‰єўџџ‹•єўџџ‰UШ‹EШ;Eд~ ‹EШ‰Eд‹Eј‰EрыЂ‹Eд‹Mьгј‰Eд}дџ|>‹Eд-џiРя?‹MрƒСЏMдСљ™їљКОџ+а‰UМ‹EМP‹MQ‹U RшƒФ ыыщ,џџџƒ}ь%hjЁƒР!PhjшƒФƒјuЬƒ}ь|%hjЁƒР"PhjшƒФƒјuЬЧEјы ‹EјƒР‰Eј‹Eј;E}Vƒ}ьu!‹Eј‹M ‹бњ‹Eј‹M ‹ƒра‰•єўџџы‹Mьƒщ‹Uј‹E ‹гњƒТбњ‰•єўџџ‹Eј‹Mf‹•єўџџf‰Aы™_^[Ф ;ьш‹х]Ує 840",6+=4F0M,жѕ$о \ ё6оЪЃSKP_Silk_LPC_fit РL € a_QQ  ta_Q24 QQ L ьџџџtrshift Мџџџtsc_Q16 рџџџtidx Шџџџtabsval дџџџtmaxabs јџџџtiђио8Ь^€_€%b€0h€=j€Dk€^l€•m€n€Ѓo€Љq€Ћs€Жt€Пw€чx€ћy€§z€џ|€€/€€Z€t‚€Шƒ€Ъ„€ 'X' \' D' H' rshift < 31j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lpc_stabilize.c^rshift > 0VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sd .textф ­…ˆзВ~™.debug$S| T0Ђ $LN18и$LN19Ь$LN20Ф 1 Q i x .rtc$TMZЬ.LІ .rtc$IMZžz]ЕЬ .textо -3јЊ‡ПѕО.debug$SїYђ“л .rdata ўёСэ F .rdata ˜югcV .data ‘xв+ .rdata .sЪ8 .debug$T \Œ_SKP_Silk_LPC_stabilize_SKP_Silk_bwexpander_SKP_Silk_LPC_inverse_pred_gain_SKP_Silk_bwexpander_32__RTC_CheckEsp@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_LPC_fit??_C@_1BI@JNMPMLNH@?$AAr?$AAs?$AAh?$AAi?$AAf?$AAt?$AA?5?$AA?$DM?$AA?5?$AA3?$AA1?$AA?$AA@__CrtDbgReportW??_C@_1JI@ILIMLOMI@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_LPC_fit@@9@9??_C@_1BG@JNKFEODB@?$AAr?$AAs?$AAh?$AAi?$AAf?$AAt?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@ /2771 1273638394 100666 16679 ` Lњ-ъKк1u.drectveAL .debug$SФ@B.textќQM- P`.debug$S @B.rdata,@0@.rdata8Й@0@.rdata$ё@0@.rdata6@0@.rdata K@@@.dataы@0Р.rdata6я@0@.rtc$TMZ%)@0@.rtc$IMZ37@0@.text_A  P`.debug$SєОВ@B.textрф P`.debug$SЌФ p"@B.textrЂ"% P`.debug$Sмx%T'@B.rdata†'@0@.rdataŒ˜'@@@.data$(@0Р.rdata((@0@.textќ:(6,- P`.debug$Sј- 1 @B.dataz1@0Р.debug$T\~1@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё•ZJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_LPC_inv_pred_gain.obj:<!ovovMicrosoft (R) Optimizing Compilerћ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_LPC_inv_pred_gain.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒнш|}НтHь7XqхЈг’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓ(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lpc_inv_pred_gain.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 444 - ^ = $23 $T0 448 - ^ = $24 $T0 452 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 288 - ^ = $23 $T0 292 - ^ = $24 $T0 296 - ^ = U‹ььИSVWНHўџџЙnИЬЬЬЬѓЋЁ3Х‰Eќ‹EƒрСрŒ0џџџ‰ џџџЧEєы ‹EєƒР‰Eє‹Eє;E}‹Eє‹M ПAСт‹Eє‹ џџџ‰ыд‹EЧ@‹Eƒш‰Eєы ‹Eєƒш‰Eєƒ}єŽ1‹Eє‹ џџџ<№џ‹Eє‹ џџџ<џџ} Ищц‹Eє‹ џџџ‹Стїк‰Uа‹Eа™‹Ш‹ђ‹Eа™RPVQшБ шКџџџ?+а‰UФ}Ф€%hjЁƒРPhjшƒФƒјuЬ}Ф@|%hjЁƒРPhjшƒФƒјuЬj.‹EФPшƒФ‰EИ‹E‹™‹Ш‹ђ‹EФ™RPVQшБ шСр‹U‰‹Eƒ8}&hj‹ ƒС!QhjшƒФƒјuЬ‹E8@~&hj‹ ƒС"QhjшƒФƒјuЬ‹… џџџ‰…џџџ‹EєƒрСрŒ0џџџ‰ џџџ‹EИPшƒФƒш‰Eм‹EИ‹Mмгр‰EИЧEшы ‹EшƒР‰Eш‹Eш;Eє}y‹Eє+Eш‹џџџ‹Dќ™‹Ш‹ђ‹Eа™RPVQшБ шбр‹Uш‹џџџ‹‘+а‰•$џџџ‹…$џџџ™‹Ш‹ђ‹EИ™RPVQшБ шЙ+Mмгр‹Uш‹ џџџ‰‘щvџџџщМ§џџ‹… џџџ8№џ‹… џџџ8џџ} ИщН‹… џџџ‹Ссїй‰Mа‹Eа™‹Ш‹ђ‹Eа™RPVQшБ шКџџџ?+а‰UФ‹E‹™‹Ш‹ђ‹EФ™RPVQшБ шСр‹U‰‹Eƒ8}&hj‹ ƒС?QhjшƒФƒјuЬ‹E8@~&hj‹ ƒС@QhjшƒФƒјuЬ3РR‹ЭPшXZ_^[‹Mќ3ЭшФИ;ьш‹х]УI0џџџ€Atmp_QA/э4є3 .*&#":!A*J&Q"eS‚4‰3žІ*Џ&Ж"Яз*р&ч"Ek4r3 4Ї343:4A3V^*g&n"‡*˜&Ÿ"ДЙ2Ш1е0ф№ѕ$ќИ `( ё Dќ(ќЭSKP_Silk_LPC_inverse_pred_gainИРј … :ќџџџ    tinvGain_Q30  A_Q12 order Фџџџtrc_mult1_Q30 єџџџtk  џџџtAnew_QA мџџџtheadrm $џџџttmp_QA шџџџtn 0џџџbAtmp_QA џџџtAold_QA аџџџtrc_Q31 Иџџџtrc_mult2_Q16ђ0ќ8#$/€(5€>7€X8€q9€s;€|<€š>€О?€ШC€мF€G€0H€^K€oO€•P€УQ€єT€U€X€(Y€3Z€M[€Œ\€С]€Ц^€Ыa€чb€ёf€i€'m€Mn€{o€Ќq€Ўr€ X \ А Д П У Ю в р ф *invGain_Q30 <= 1<<30*invGain_Q30 <= ( 1 << 30 )*invGain_Q30 >= 0rc_mult1_Q30 < ( 1 << 30 )j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lpc_inv_pred_gain.c/rc_mult1_Q30 > ( 1 << 15 )9>U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E%џџt‹EСјPшƒФыыЗEPшƒФƒР_^[ФР;ьш‹х]У0LALW0ѕ$_Рв ёi4_KSKP_Silk_CLZ32РР € tin32ђH_<p€r€(s€9t€;u€Kw€ EXE \E ЌE АE U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјПE…Рu ИщЂПE%џt0ПE%№tf‹EfСј f‰Eы‹EјƒР‰Eјf‹EfСјf‰Eы+ПE%№џt‹EјƒР‰Eјf‹EfСјf‰Eы ‹EјƒР ‰EјПEƒр tПEƒрt‹Eјы%ы‹EјƒРыыПEƒрt ‹EјƒРыы‹EјƒР_^[‹х]Уѕ$рЬD ё{4рй SKP_Silk_CLZ16ЬР € in16 јџџџtout32ђ№рфL€M€%N€-O€7R€BS€MT€YU€[V€dW€pY€rZ€}[€†\€’]€”^€b€Іc€Џd€Дe€Жf€Оg€Рh€Щi€бj€гk€йm€ LXL \L МL РL U‹ььSVWНфўџџЙGИЬЬЬЬѓЋƒ}u%hjЁƒРPhjшƒФƒјuЬƒ} %hjЁƒРPhjшƒФƒјuЬƒ}~ ‹E‰…єўџџы ‹Mїй‰єўџџ‹•єўџџRшƒФƒш‰Eј‹E‹Mјгр‰Eд‹MдСљИџџџ™їљ‰Eр‹EрСр‰EМ‹EдСјПMрЏС‹UдтџџПMрЏбСњТїиСр‰EШ‹EШСјПMрЏС‹UШтџџПMрЏбСњUМа‹EрСјƒРбјЏEШа‰UМИ=+Eј+E ‰Eьƒ}ь‹MьїйИ€гј‹MьїйКџџџгњ;Т~m‹MьїйИ€гј9EМ~‹MьїйК€гњ‰•єўџџы:‹MьїйИџџџгј9EМ}‹MьїйКџџџгњ‰•№ўџџы ‹EМ‰…№ўџџ‹№ўџџ‰єўџџ‹•єўџџ‰•ьўџџыk‹MьїйИџџџгј9EМ~‹MьїйКџџџгњ‰•шўџџы:‹MьїйИ€гј9EМ}‹MьїйК€гњ‰•фўџџы ‹EМ‰…фўџџ‹фўџџ‰шўџџ‹•шўџџ‰•ьўџџ‹Mьїй‹…ьўџџгрыыƒ}ь } ‹EМ‹Mьгјыы3Р_^[Ф;ьш‹х]У%c,_5[<"PWW_`[g"˜Ej0ѕ$rЖ ёє8r^ЛSKP_INVERSE32_varQР\ € b32  Qres јџџџtb_headrm ьџџџtlshift Мџџџtresult Шџџџterr_Q32 дџџџtb32_nrm рџџџtb32_invђЈr œА€Д€IЕ€tИ€ЅЙ€АМ€СП€ЪТ€єХ€-Ш€;Щ€EЪ€HЫ€JЬ€PЭ€ZЮ€\а€^г€ SXS \S 4S 8S Qres > 0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАb32 != 0U‹ььИSVWНHўџџЙnИЬЬЬЬѓЋЁ3Х‰Eќ‹EƒрСрŒ0џџџ‰ џџџЧEєы ‹EєƒР‰Eє‹Eє;E}‹Eє‹M ПAСт‹Eє‹ џџџ‰ыд‹EЧ@‹Eƒш‰Eєы ‹Eєƒш‰Eєƒ}єŽ1‹Eє‹ џџџ<№џ‹Eє‹ џџџ<џџ} Ищц‹Eє‹ џџџ‹Стїк‰Uа‹Eа™‹Ш‹ђ‹Eа™RPVQшБ шКџџџ?+а‰UФ}Ф€%hjЁƒРPhjшƒФƒјuЬ}Ф@|%hjЁƒРPhjшƒФƒјuЬj.‹EФPшƒФ‰EИ‹E‹™‹Ш‹ђ‹EФ™RPVQшБ шСр‹U‰‹Eƒ8}&hj‹ ƒС!QhjшƒФƒјuЬ‹E8@~&hj‹ ƒС"QhjшƒФƒјuЬ‹… џџџ‰…џџџ‹EєƒрСрŒ0џџџ‰ џџџ‹EИPшƒФƒш‰Eм‹EИ‹Mмгр‰EИЧEшы ‹EшƒР‰Eш‹Eш;Eє}y‹Eє+Eш‹џџџ‹Dќ™‹Ш‹ђ‹Eа™RPVQшБ шбр‹Uш‹џџџ‹‘+а‰•$џџџ‹…$џџџ™‹Ш‹ђ‹EИ™RPVQшБ шЙ+Mмгр‹Uш‹ џџџ‰‘щvџџџщМ§џџ‹… џџџ8№џ‹… џџџ8џџ} ИщН‹… џџџ‹Ссїй‰Mа‹Eа™‹Ш‹ђ‹Eа™RPVQшБ шКџџџ?+а‰UФ‹E‹™‹Ш‹ђ‹EФ™RPVQшБ шСр‹U‰‹Eƒ8}&hj‹ ƒС?QhjшƒФƒјuЬ‹E8@~&hj‹ ƒС@QhjшƒФƒјuЬ3РR‹ЭPшXZ_^[‹Mќ3ЭшФИ;ьш‹х]УI0џџџ€Atmp_QA/э4є3 .q&#":!AqJ&Q"eS‚4‰3žІqЏ&Ж"Язqр&ч"Ek4r3 4Ї343:4A3V^qg&n"‡q˜&Ÿ"ДmЙ2Ш1е0фl№kѕ$ќИ `( ёЄHќ(ќЭSKP_Silk_LPC_inverse_pred_gain_Q13ИРј … :ќџџџ    tinvGain_Q30  A_Q13 order Фџџџtrc_mult1_Q30 єџџџtk  џџџtAnew_QA мџџџtheadrm $џџџttmp_QA шџџџtn 0џџџbAtmp_QA џџџtAold_QA аџџџtrc_Q31 Иџџџtrc_mult2_Q16ђ0ќ8#$z€(€€>‚€Xƒ€q„€s†€|‡€š‰€ОŠ€ШŽ€м‘€’€0“€^–€oš€•›€Уœ€єŸ€ €Ѓ€(Є€3Ѕ€MІ€ŒЇ€СЈ€ЦЉ€ЫЌ€ч­€ёБ€Д€'И€MЙ€{К€ЌМ€ЎН€ jXj \j Дk Иk Уl Чl вm жm фj шj zVОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SФ.textќ-gKХЋБђ.debug$S Jše! $LN22є$LN23ш$LN24р.rdata,зђ}”$.rdata8‹ШЛ.rdata$q9šz.rdata6ЕїšёіЊ .rdata  Ё]p'К .data hПQјu .rdata 6жгфОЊ ^q € › __allshr __allmul .rtc$TMZ Ь.LВ Щ .rtc$IMZ žz]и я .text_йIѕ=vЄёC.debug$Sє:Яq‘ў .textр}BИ#u‘ћ.debug$SЌбЛ5с .textr GBі фЦИ†.debug$SмAоз .rdataЋP2.rdataŒы|.datašNr7.rdataік–!i.textќ-]к…yfФЧ.debug$S gЎФБЖ $LN22є$LN23ш$LN24р.dataј@‚к.debug$T\_SKP_Silk_LPC_inverse_pred_gain??_C@_1CM@OIKGGLDE@?$AA?$CK?$AAi?$AAn?$AAv?$AAG?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA3?$AA0?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1?$AA?$DM?$AA?$DM?$AA3?$AA0?$AA?$AA@??_C@_1DI@LBPPEJDN@?$AA?$CK?$AAi?$AAn?$AAv?$AAG?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA3?$AA0?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA?$CI?$AA?5?$AA1?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA3?$AA0?$AA?5?$AA?$CJ?$AA?$AA@??_C@_1CE@PFOHEFL@?$AA?$CK?$AAi?$AAn?$AAv?$AAG?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA3?$AA0?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1DG@DLMGGFLH@?$AAr?$AAc?$AA_?$AAm?$AAu?$AAl?$AAt?$AA1?$AA_?$AAQ?$AA3?$AA0?$AA?5?$AA?$DM?$AA?5?$AA?$CI?$AA?5?$AA1?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA3?$AA0?$AA?5?$AA?$CJ?$AA?$AA@__CrtDbgReportW??_C@_1KA@HCIIPBDN@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_LPC_inverse_pred_gain@@9@9??_C@_1DG@HELIEBNE@?$AAr?$AAc?$AA_?$AAm?$AAu?$AAl?$AAt?$AA1?$AA_?$AAQ?$AA3?$AA0?$AA?5?$AA?$DO?$AA?5?$AA?$CI?$AA?5?$AA1?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA1?$AA5?$AA?5?$AA?$CJ?$AA?$AA@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_CLZ32_SKP_Silk_CLZ16_SKP_INVERSE32_varQ??_C@_1BC@MIGJDBBJ@?$AAQ?$AAr?$AAe?$AAs?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@??_C@_1IM@NKJIPJPB@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_INVERSE32_varQ@@9@9@895cc594??_C@_1BC@LJHCOKEE@?$AAb?$AA3?$AA2?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_Silk_LPC_inverse_pred_gain_Q13?__LINE__Var@?1??SKP_Silk_LPC_inverse_pred_gain_Q13@@9@9 /2815 1273638394 100666 13362 ` Lњ-ъK")P.drectveAМ .debug$SМ§Й@B.text(с & P`.debug$S …% @B.rdataЇ@0@.rdataЗ@0@.rdata6Щ@@@.rdataЂџ@@@.dataЁ@0Р.rdata>Ѕ@0@.rtc$TMZуч@0@.rtc$IMZёѕ@0@.text›џš#% P`.debug$S, %8'@B.dataj'@0Р.rdataXn'@@@.debug$T\Ц(@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё—[J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_LP_variable_cutoff.obj:<!ovovMicrosoft (R) Optimizing Compilerќ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_LP_variable_cutoff.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёъ) hSKP_Silk_Transition_LP_B_Q28) kSKP_Silk_Transition_LP_A_Q28"@SA_Method"SA_ParameterRSKP_Silk_LP_state!wchar_t"SA_AttrTarget usize_tRSKP_Silk_LP_stateєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlї–uYl§%J‡,…| z5H’Џ‹ц+7 @#nŽи,ˆ{“(yFiдz<G;1=1ѓЙj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lp_variable_cutoff.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 260 - ^ = $23 $T0 264 - ^ = $24 $T0 268 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 228 - ^ = $23 $T0 232 - ^ = $24 $T0 236 - ^ = ДL ИL пK уK U‹ььSVWНџџџЙ@ИЬЬЬЬѓЋЁ3Х‰EќЧEаЧEФ‹Eƒx}&hj‹ ƒСQhjшƒФƒјuЬ‹Ex€ ‹Mƒy t;‹Uz ‹Eƒx t&hj‹ ƒСQhjшƒФƒјuЬ‹EƒxŽШ‹Eƒx …з‹Ex€Ђ‹E‹HСс ‰Mа‹EаСј‰EФ‹EФСр‹Mа+Ш‰Mаƒ}Ф}%hjЁƒРPhjшƒФƒјuЬƒ}Ф|%hjЁƒРPhjшƒФƒјuЬ‹EаP‹MФQUмREьPшƒФ‹E‹HƒС‹U‰Jы ‹Ex€ujjEмPMьQшƒФщф‹Eƒx …з‹ExЇ‹EЙ+HСс ‰Mа‹EаСј‰EФ‹EФСр‹Mа+Ш‰Mаƒ}Ф}%hjЁƒР-PhjшƒФƒјuЬƒ}Ф|%hjЁƒР.PhjшƒФƒјuЬ‹EаP‹MФQUмREьPшƒФ‹E‹HƒС‹U‰Jы ‹ExujjEмPMьQшƒФ‹Eƒx~"‹EP‹M Q‹UREмPMьQ‹URшƒФы‹EбрP‹MQ‹U RшƒФ R‹ЭPшXZ_^[‹Mќ3ЭшФ;ьш‹х]У‹џьџџџ мџџџA_Q28B_Q28.@-H)Q%X! ˜)Ё%Ј! )% !4;)D%K!iBšBђљ)% !$)-%4!RBƒBЌФбж1х0ђ/ ѕ$(е( ё>A(((mSKP_Silk_LP_variable_cutoffР@ … :ќџџџ     epsLP  out in frame_length мџџџ(A_Q28 ьџџџkB_Q28 аџџџtfac_Q16 Фџџџtindђ (!y€({€6}€e€Е‚€Тƒ€Я„€п‡€ы‹€єŒ€Ž€-€X’€p•€—€™€Ёš€І›€Гœ€УŸ€дЃ€нЄ€ыІ€Ї€AЊ€Y­€jЏ€vБ€ŠЖ€“Й€ГК€ЕМ€ЫО€ X \ ­ Б М Р Ы Я к о € „ ind < 5ind >= 0( ( ( psLP->transition_frame_no <= ( 2560 / 20 ) ) && ( psLP->mode == 0 ) ) || ( ( psLP->transition_frame_no <= ( 5120 / 20 ) ) && ( psLP->mode == 1 ) ) )j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lp_variable_cutoff.cypsLP->transition_frame_no >= 06;U‹ььрSVWН џџџЙ8ИЬЬЬЬѓЋƒ}9ƒ}Žњ}џ~ Ч…$џџџџы*}€џџ} Ч… џџџ€џџы ‹E‰… џџџ‹ џџџ‰$џџџ‹U;•$џџџ…3ЧEјы ‹EјƒР‰Eјƒ}ј€‹EkР ‹MƒСkЩ ‹Ukв ‹uј‹}ј‹ŒБ+ŒКСљПUЏЪ‹UƒТkв ‹ukі ‹}ј‹]ј‹”К+”žтџџПuЏжСњЪ‹UјŒ‹Eј‹U‰ ‚щmџџџЧEьы ‹EьƒР‰Eьƒ}ь}z‹EьСр‹MьСс‹UьСт‹u‹}‹Œё+ŒњСљПUЏЪ‹UьСт‹uьСц‹}‹]‹”њ+”отџџПuЏжСњЪ‹UŒа‹Eь‹U ‰ ‚щwџџџщw}€…’ЧEјы ‹EјƒР‰Eјƒ}ј}0‹EkР ‹MƒСkЩ ‹Uј‹„‹Uј„‘бј‹Mј‹U‰ŠыСЧEьы ‹EьƒР‰Eьƒ}ь}-‹EьСр‹MьСс‹U‹„а‹U„ббј‹Mь‹U ‰ŠыФщиИ+E=џ~ Ч…$џџџџы6Й+Mљ€џџ} Ч… џџџ€џџыК+U‰• џџџ‹… џџџ‰…$џџџЙ+M;$џџџt&hj‹ƒТ&RhjшƒФƒјuЬЧEјы ‹EјƒР‰Eјƒ}ј‘‹EƒРkР ‹MkЩ ‹UƒТkв ‹uј‹}ј‹ŒБ+ŒКСљК+UПвЏЪ‹Ukв ‹uƒЦkі ‹}ј‹]ј‹”К+”žтџџО+uПіЏжСњЪ‹UјŒ‹Eј‹U‰ ‚щ\џџџЧEьы ‹EьƒР‰Eьƒ}ьˆ‹EьСр‹MьСс‹UьСт‹u‹}‹Œё+ŒњСљК+UПвЏЪ‹UьСт‹uьСц‹}‹]‹”њ+”отџџО+uПіЏжСњЪ‹UŒа‹Eь‹U ‰ ‚щeџџџы3j ‹EkР P‹MQшƒФ j‹E ХQ‹U RшƒФ ы&j h0‹EPшƒФ jh ‹E PшƒФ _^[Фр;ьш‹х]УКLСLчLюL LOKVKyK€KœKэLїL2K<KДJМFХ%Ь!LLJLQLtLНKФKюKѕKK5L?NKXdLmwK€“/ѕ$›рG ёгI›‡ЁSKP_Silk_LP_interpolate_filter_tapsрР € tB_Q28  tA_Q28 ind fac_Q16 јџџџtnb ьџџџtnaђ› .€1€(2€23€€5€œ:€;€<€4A€ЉB€ЎC€РF€иJ€K€L€ P€KQ€MR€RT€йV€ѕ[€\€†]€Ђb€%c€*e€,f€Fg€_i€aj€tk€‡m€ BXB \B B B .( ( 1 << 16 ) - fac_Q16 ) == ((( ( 1 << 16 ) - fac_Q16)) > 0x7FFF ? 0x7FFF : ((( ( 1 << 16 ) - fac_Q16)) < ((short)0x8000) ? ((short)0x8000) : (( ( 1 << 16 ) - fac_Q16))))VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SМ)Еb`.text(& јчЎ~ /2.debug$S  ŸŠh- $LN24$LN23"$LN25$LN26ќ_memcpy ! .rdataРFNе6.rdataыy>{.rdata6ziњYШ .rdataЂ,,;Ÿ.data я7Y .rdata >†˜а‹ J] l ‡ .rtc$TMZ Ь.Lž Е .rtc$IMZ žz]Ф л .text ›%ф'гёЋ.debug$S,  x+ ъ .data иэ@.rdataX?%OтR4R.debug$T\p_SKP_Silk_LP_variable_cutoff_SKP_Silk_biquad_alt??_C@_1BA@MGAKPCGK@?$AAi?$AAn?$AAd?$AA?5?$AA?$DM?$AA?5?$AA5?$AA?$AA@??_C@_1BC@IMNKEJFJ@?$AAi?$AAn?$AAd?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1BDG@NEENFDJJ@?$AA?$CI?$AA?5?$AA?$CI?$AA?5?$AA?$CI?$AA?5?$AAp?$AAs?$AAL?$AAP?$AA?9?$AA?$DO?$AAt?$AAr?$AAa?$AAn?$AAs?$AAi?$AAt?$AAi?$AAo?$AAn?$AA_?$AAf?$AAr?$AAa?$AAm?$AAe?$AA_?$AAn?$AAo?$AA?5@__CrtDbgReportW??_C@_1KC@HKPFDAB@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_LP_variable_cutoff@@9@9??_C@_1DO@DCADNOIE@?$AAp?$AAs?$AAL?$AAP?$AA?9?$AA?$DO?$AAt?$AAr?$AAa?$AAn?$AAs?$AAi?$AAt?$AAi?$AAo?$AAn?$AA_?$AAf?$AAr?$AAa?$AAm?$AAe?$AA_?$AAn?$AAo?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_LP_interpolate_filter_taps?__LINE__Var@?1??SKP_Silk_LP_interpolate_filter_taps@@9@9@0c317abd??_C@_1BFI@DNFCEACB@?$AA?$CI?$AA?5?$AA?$CI?$AA?5?$AA1?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA1?$AA6?$AA?5?$AA?$CJ?$AA?5?$AA?9?$AA?5?$AAf?$AAa?$AAc?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AA?$CI@_SKP_Silk_Transition_LP_A_Q28_SKP_Silk_Transition_LP_B_Q28/2860 1273638394 100666 5101 ` Lњ-ъK.drectveA, .debug$Sd m@B.text†б P`.debug$SŒWу@B.rtc$TMZ@0@.rtc$IMZ#'@0@.debug$T\1@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёVJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_lowpass_short.obj:<!ovovMicrosoft (R) Optimizing Compilerї=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_lowpass_short.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒІІъдђ№ыvŒ1е?Я’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓЮj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lowpass_short.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 244 - ^ = $23 $T0 248 - ^ = $24 $T0 252 - ^ = U‹ьь№SVWНџџџЙ<ИЬЬЬЬѓЋ‹E ‹‰MдЧEјы ‹EјƒР‰Eј‹Eј;E}7‹Eј‹MПAiв‰Uь‹EдEь‰Eр‹Eрбј‹Mь+Ш‰Mд‹Eј‹M‹Uр‰ыИ‹E ‹Mд‰_^[‹х]Уѕ$†№\ ёф<†SKP_Silk_lowpass_short№Р0 € in  tS tout len дџџџtstate рџџџtout_tmp јџџџtk ьџџџtin_tmpђh†8 \/€3€&4€@5€S6€\7€i8€u9€w:€;€ X \ $ ( VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sd .text†РlуBђЊК.debug$SŒџ…нF .rtc$TMZЬ.L3 .rtc$IMZžz]BY .debug$T\h_SKP_Silk_lowpass_short__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase /2900 1273638394 100666 5113 ` Lњ-ъK›.drectveA, .debug$S\ m@B.text”Щ P`.debug$S”]ё@B.rtc$TMZ#'@0@.rtc$IMZ15@0@.debug$T\?@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‰TJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_lowpass_int.obj:<!ovovMicrosoft (R) Optimizing Compilerѕ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_lowpass_int.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒхшTс~тb]IНMП %Э’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓЬj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lowpass_int.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 244 - ^ = $23 $T0 248 - ^ = $24 $T0 252 - ^ = U‹ьь№SVWНџџџЙ<ИЬЬЬЬѓЋ‹E ‹‰Mд‹E‰Eјы ‹Eјƒш‰Eјƒ}ј~H‹E‹‰Mь‹UƒТ‰U‹EьСј‹Mь+Ш‰Mь‹EдEь‰Eр‹Eрбј‹Mь+Ш‰Mд‹E‹Mр‰‹UƒТ‰UыЉ‹E ‹Mд‰_^[‹х]Уѕ$”№Z ёт:” SKP_Silk_lowpass_int№Р0 € in  tS tout len дџџџtstate рџџџtout_tmp јџџџtk ьџџџtin_tmpђp”8 d.€2€&3€=4€N5€\6€e7€r8€ƒ9€…:€;€ X \ $ ( VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S\ .text”є”лŒH(†.debug$S”‰ТЬ .rtc$TMZЬ.L1 .rtc$IMZžz]@W .debug$T\f_SKP_Silk_lowpass_int__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase /2938 1273638394 100666 5092 ` Lњ-ъKŠ.drectveA, .debug$SP m@B.textпН P`.debug$SDœр@B.rtc$TMZ@0@.rtc$IMZ $@0@.debug$T\.@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёPJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_log2lin.obj:<!ovovMicrosoft (R) Optimizing Compilerё=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_log2lin.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒ‹5fEУ\Е гЈэАЩ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓШj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_log2lin.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 220 - ^ = $23 $T0 224 - ^ = $24 $T0 228 - ^ = U‹ььиSVWН(џџџЙ6ИЬЬЬЬѓЋƒ}}3Рщ­‹MСљИгр‰Eј‹Eƒр‰Eь}}DИ€+EьЏEьСјiРRџџџЙ€+MьЏMьсџџiЩRџџџСљMьШЏMјСљMј‰MјыD‹EјСјЙ€+MьЏMьСљiЩRџџџК€+UьЏUьтџџiвRџџџСњUьбЏТEј‰Eј‹Eј_^[‹х]Уѕ$пиV ё“6пи;SKP_Silk_log2linиР € inLog_Q7 јџџџtout ьџџџtfrac_Q7ђpп8 d)€,€$-€+0€;1€D2€M4€5€‘7€е9€и:€ X \ д и VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SP .textпШИ г.debug$SDБ.—M .rtc$TMZЬ.L- .rtc$IMZžz]<S .debug$T\b_SKP_Silk_log2lin__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/2972 1273638394 100666 7893 ` L њ-ъK<7.drectveA .debug$S4]@B.textЧ‘X P`.debug$SDžт @B.rtc$TMZdh@0@.rtc$IMZrv@0@.texty€љ P`.debug$S@ M@B.text_о P`.debug$Sєќ№@B.textр" P`.debug$SЌЎ@B.debug$T\р@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёPJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_lin2log.obj:<!ovovMicrosoft (R) Optimizing Compilerё=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_lin2log.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒЩ5#‘iъћжїДЫнЩ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓЌj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lin2log.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 220 - ^ = $23 $T0 224 - ^ = $24 $T0 228 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = U‹ььиSVWН(џџџЙ6ИЬЬЬЬѓЋEьPMјQ‹URшƒФ И+EјСрЙ€+Mь‹бЏUьСњiвГЙ€+MьЏMьсџџiЩГСљбEьТR‹ЭPшXZ_^[Фи;ьш‹х]Ујџџџьџџџfrac_Q7lz+%|“ ЌИѕ$ЧиV ёЫ6ЧЧ;SKP_Silk_lin2logиР €     inLin ьџџџtfrac_Q7 јџџџtlzђ8Ч8,)€,€2/€v0€ X \ – š Ѕ Љ Д И У Ч   U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋ‹EPшƒФ‰Eј‹E ‹Mј‰ƒ}ј}Й+Mј‹Eгјƒр‹M‰ы‹Mјƒщ‹Eгрƒр‹M‰_^[ФЬ;ьш‹х]У#,qѕ$yЬ Ш ёІ7yeSKP_Silk_CLZ_FRACЬР € tin  tlz tfrac_Q7 јџџџtleadingZerosђXy L;€>€-?€5@€;A€PB€RC€eE€ %X% \% ш% ь% U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E%џџt‹EСјPшƒФыыЗEPшƒФƒР_^[ФР;ьш‹х]У03A3Wѕ$_Р: ёi4_KSKP_Silk_CLZ32РР € tin32ђH_<p€r€(s€9t€;u€Kw€ ,X, \, Ќ, А, U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјПE…Рu ИщЂПE%џt0ПE%№tf‹EfСј f‰Eы‹EјƒР‰Eјf‹EfСјf‰Eы+ПE%№џt‹EјƒР‰Eјf‹EfСјf‰Eы ‹EјƒР ‰EјПEƒр tПEƒрt‹Eјы%ы‹EјƒРыыПEƒрt ‹EјƒРыы‹EјƒР_^[‹х]Уѕ$рЬШ ё{4рй SKP_Silk_CLZ16ЬР € in16 јџџџtout32ђ№рфL€M€%N€-O€7R€BS€MT€YU€[V€dW€pY€rZ€}[€†\€’]€”^€b€Іc€Џd€Дe€Жf€Оg€Рh€Щi€бj€гk€йm€ 3X3 \3 М3 Р3 VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S4.textЧr|7%j;.debug$SD ќ“‚ $LN4М$LN3Ф$LN5Є$LN6œ % .rtc$TMZЬ.L<S .rtc$IMZžz]by .textyУ‹f&‚нm.debug$S@Stёˆ .text _йIѕ=vЄёC.debug$S є :Яq‘› .text р}BИ#u‘ћ.debug$S Ќ бЛ5сЋ .debug$T \Л_SKP_Silk_lin2log__RTC_CheckEsp@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_CLZ_FRAC_SKP_Silk_CLZ32_SKP_Silk_CLZ16 /3006 1273638394 100666 6222 ` Lњ-ъKё.drectveA, .debug$S„m@B.textVё P`.debug$SGG@B.rtc$TMZy}@0@.rtc$IMZ‡‹@0@.debug$T\•@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‡SJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_LBRR_reset.obj:<!ovovMicrosoft (R) Optimizing Compilerє=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_LBRR_reset.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё@"@SA_Method"SA_ParameterTSKP_SILK_LBRR_structKSKP_Silk_encoder_stateRSKP_Silk_LP_state+SKP_Silk_VAD_state!wchar_t"SA_AttrTargetsSKP_Silk_NLSF_CBS usize_t!ЧSKP_Silk_range_coder_stateTSKP_SILK_LBRR_struct+SKP_Silk_VAD_state!ЧSKP_Silk_range_coder_state PSKP_Silk_detect_SWB_stateRSKP_Silk_LP_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structKSKP_Silk_encoder_state PSKP_Silk_detect_SWB_state|SKP_Silk_NLSF_CB_structєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlїќ,Ѓ#cљгиыH<^h+!@’Џ‹ц+7 @#nŽи,ˆ{‹(yFiдz<G;1=1ѓ?j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lbrr_reset.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјы ‹EјƒР‰Eјƒ}ј}‹EјiР‹MЧ„№ыи_^[‹х]Уѕ$VЬЭ ё~9VOqSKP_Silk_LBRR_resetЬР € =psEncC јџџџtiђ@V4"€%€6&€M'€O(€ X \ Р Ф VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S„.textVЌ% Vл4/8.debug$SrR\ .rtc$TMZЬ.L0 .rtc$IMZžz]?V .debug$T\e_SKP_Silk_LBRR_reset__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/3043 1273638394 100666 5611 ` Lњ-ъKр".drectveA, .debug$SP m@B.textYН P`.debug$SЈRњ @B.rtc$TMZhl@0@.rtc$IMZvz@0@.debug$T\„@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёPJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_k2a_Q16.obj:<!ovovMicrosoft (R) Optimizing Compilerё=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_k2a_Q16.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒ%Њv$0&|LЛиb?|mЩ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓШj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_k2a_q16.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 296 - ^ = $23 $T0 300 - ^ = $24 $T0 304 - ^ = U‹ьь$SVWНмўџџЙIИЬЬЬЬѓЋЁ3Х‰EќЧEєы ‹EєƒР‰Eє‹Eє;EеЧEшы ‹EшƒР‰Eш‹Eш;Eє}‹Eш‹Mш‹U‹ ЉL… ынЧEшы ‹EшƒР‰Eш‹Eш;Eє}s‹Eє+Eш‹L…œСљ‹Uє‹E ПЏЪ‹Eє+Eш‹T…œтџџ‹Eє‹u П†ЏаСњЪ‹Uш‹E‹б‹Eє+Eш‹Mє‹u ‹ ŽСљƒСбљЏL…œб‹Eш‹M‰щ|џџџ‹Eє‹M ‹Стїк‹Eє‹M‰щџџџR‹ЭPшXZ_^[‹Mќ3Эш‹х]УI џџџ@Atmp!&5DPѕ$Y$ V( ёї6Y(YЬSKP_Silk_k2a_Q16$Рd … :ќџџџ    tA_Q24  rc_Q16 order єџџџtk  џџџИAtmp шџџџtnђpY8 d-€(1€F2€`3€p4€r5€Œ6€њ7€џ8€9€:€ X \ Ђ І Б Е Р Ф 8 < VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SP .textYј ƒгЊ{.debug$SЈ У:Нй $LN12T$LN13H$LN14@) D .rtc$TMZЬ.L[r .rtc$IMZžz]˜ .debug$T\Ї_SKP_Silk_k2a_Q16___security_cookie@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase /3077 1273638394 100666 5559 ` Lњ-ъKА".drectveA, .debug$SD m@B.text9Бъ P`.debug$SЄ&Ъ @B.rtc$TMZ8<@0@.rtc$IMZFJ@0@.debug$T\T@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёyLJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_k2a.obj:<!ovovMicrosoft (R) Optimizing Compilerэ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_k2a.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒ™Ч`™ Eѕ]‰х=хAБчХ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_k2a.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 296 - ^ = $23 $T0 300 - ^ = $24 $T0 304 - ^ = U‹ьь$SVWНмўџџЙIИЬЬЬЬѓЋЁ3Х‰EќЧEєы ‹EєƒР‰Eє‹Eє;EЗЧEшы ‹EшƒР‰Eш‹Eш;Eє}‹Eш‹Mш‹U‹ ЉL… ынЧEшы ‹EшƒР‰Eш‹Eш;Eє}T‹Eє+Eш‹L…œбсСљ‹Uє‹E ПPЏЪ‹Eє+Eш‹T…œбттџџ‹Eє‹u ПFЏаСњЪ‹Uш‹E ‹Uш‹E‰ ы›‹Eє‹M ПAСт їк‹Eє‹M‰щ4џџџR‹ЭPшXZ_^[‹Mќ3Эш‹х]У џџџ@Atmp$0ѕ$9$ R( ёѓ29(9rSKP_Silk_k2a$Рd … :ќџџџ    tA_Q24  rc_Q15 order єџџџtk  џџџИAtmp шџџџtnђp98 d-€(1€F2€`3€p4€r5€Œ6€о7€р8€ј9€§:€ X \ ž Ђ ­ Б М Р 4 8 VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SD .text9;с—ЇWЈ.debug$SЄ VFїš $LN124$LN13($LN14 % @ .rtc$TMZЬ.LWn .rtc$IMZžz]}” .debug$T\Ѓ_SKP_Silk_k2a___security_cookie@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase /3107 1273638394 100666 7270 ` L њ-ъKЖ..drectveAЬ .debug$SЈ @B.textЯЕ„ P`.debug$SLо*@B.rdata.\@0@.rdata”Š@@@.data@0Р.rdata"@0@.rtc$TMZ>B@0@.rtc$IMZLP@0@.debug$T\Z@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‰TJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_interpolate.obj:<!ovovMicrosoft (R) Optimizing Compilerѕ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_interpolate.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlїру7…ЈўэѓЗЭѕ8EA’Џ‹ц+7 @#nŽи,ˆ{Œ(yFiдz<G;1=1ѓ@j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_interpolate.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋƒ}}%hjЁƒРPhjшƒФƒјuЬƒ}~%hjЁƒРPhjшƒФƒјuЬЧEјы ‹EјƒР‰Eј‹Eј;E}-‹Eј‹M‹Uј‹u ‹+–ЏEСј‹Mј‹U Š‹Mј‹U‰ŠыТ_^[ФЬ;ьш‹х]У%,5<PW`gЧ ѕ$ЯЬЮ ёМ:ЯЛsSKP_Silk_interpolateЬР € txi  x0 x1 ifact_Q2 d јџџџtiђPЯD&€)€I*€t,€Ž-€Й.€Л/€ X \ ќ  ifact_Q2 <= ( 1 << 2 )j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_interpolate.c&ifact_Q2 >= 0%*VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SЈ.textЯ ~&ћЯЬ{Р.debug$SLt‚Нn .rdata.;tЙН .rdata”Г‘ЫЭ.dataт№Y…ˆ.rdataOЕ>IГ .rtc$TMZ Ь.L( ? .rtc$IMZ žz]N e .debug$T \t_SKP_Silk_interpolate??_C@_1CO@OKDJIDCP@?$AAi?$AAf?$AAa?$AAc?$AAt?$AA_?$AAQ?$AA2?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA?$CI?$AA?5?$AA1?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA2?$AA?5?$AA?$CJ?$AA?$AA@__CrtDbgReportW??_C@_1JE@EOJNJGLH@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_interpolate@@9@9??_C@_1BM@DGLBDNFJ@?$AAi?$AAf?$AAa?$AAc?$AAt?$AA_?$AAQ?$AA2?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/3145 1273638394 100666 7765 ` L њ-ъKо3.drectveA .debug$ST]@B.texthБ P`.debug$SLe@B.rtc$TMZ—›@0@.rtc$IMZЅЉ@0@.textГB P`.debug$SLVЂ@B.textyд P`.debug$SPM@B.text1Я P`.debug$SPP@B.debug$T\‚@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё—[J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_inner_prod_aligned.obj:<!ovovMicrosoft (R) Optimizing Compilerќ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_inner_prod_aligned.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒёtђ9ѕщ•$n?пLн‰Гд’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓЗj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inner_prod_aligned.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 220 - ^ = $23 $T0 224 - ^ = $24 $T0 228 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 224 - ^ = $23 $T0 228 - ^ = $24 $T0 232 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 232 - ^ = $23 $T0 236 - ^ = $24 $T0 240 - ^ = U‹ььиSVWН(џџџЙ6ИЬЬЬЬѓЋЧEьЧEјы ‹EјƒР‰Eј‹Eј;E}‹Eј‹MПA‹Eј‹M ПAЏаUь‰Uьыа‹Eь_^[‹х]Уѕ$hи a ёЙAhaтSKP_Silk_inner_prod_alignedиР € ’inVec1  ’inVec2 len ьџџџtsum јџџџtiђPh8D0€2€%3€?4€\5€^6€a7€ X \ ќ  U‹ььмSVWН$џџџЙ7ИЬЬЬЬѓЋЧEшЧEьЧEјы ‹EјƒР‰Eј‹Eј;E}/‹Eј‹M‹™‹Ш‹ђ‹Uј‹E ‹™RPVQшEшUь‰Eш‰UьыР‹Eш‹Uь_^[Фм;ьш‹х]Уc!‡ ѕ$м г ёМD{tSKP_Silk_inner_prod_aligned_64мР € inVec1  inVec2 len шџџџsum јџџџtiђP8D>€@€,A€FB€sC€uD€{E€ X \ ќ  U‹ььмSVWН$џџџЙ7ИЬЬЬЬѓЋЧEшЧEьЧEјы ‹EјƒР‰Eј‹Eј;E}&‹Eј‹MПA‹Uј‹M ПQЏТ™EшUь‰Eш‰UьыЩ‹Eш‹Uь_^[‹х]Уѕ$yм г ёОFyrvSKP_Silk_inner_prod16_aligned_64мР € inVec1  inVec2 len шџџџsum јџџџtiђPy8DK€M€,N€FO€jP€lQ€rR€ (X( \( ( ( U‹ььфSVWНџџџЙ9ИЬЬЬЬѓЋЧEьЧEјы ‹EјƒР‰Eј‹Eј;Eф‹Eј‹MПA‹Eј‹M ПAЏаUьт€u[‹Mј‹UПJ‹Mј‹U П JЏС#Eь%€t Ч…$џџџ€ы ‹Uј‹EП P‹Uј‹E ПPЏЪMь‰$џџџ‹…$џџџ‰… џџџыY‹Mј‹UПJ‹Mј‹U П JЏС Eь%€u Ч…џџџџџџы ‹Uј‹EП P‹Uј‹E ПPЏЪMь‰џџџ‹…џџџ‰… џџџ‹ џџџ‰Mьщџџџ‹Eь_^[‹х]Уѕ$1ф E ёПG1*тSKP_Silk_inner_prod16_aligned_satфР$ € ’inVec1  ’inVec2 len ьџџџtsum јџџџtiђP18DY€[€%\€C]€"^€'_€*`€ /X/ \/ / / VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$ST.texth&u|ЊКЯNџ.debug$SLЖ“в1 .rtc$TMZЬ.L!8 .rtc$IMZžz]G^ .text^* *)ВS.debug$SLЯЄіm  __allmul .text yHaцvŠš.debug$S P „Љ'œ .text 1ѕŠиxœ„_.debug$S P БлЦЁО .debug$T \с_SKP_Silk_inner_prod_aligned__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_inner_prod_aligned_64__RTC_CheckEsp_SKP_Silk_inner_prod16_aligned_64_SKP_Silk_inner_prod16_aligned_sat /3190 1273638394 100666 7063 ` Lњ-ъKЌ .drectveA, .debug$S(m@B.textэ•‚ P`.debug$SXЊ@B.rtc$TMZ48@0@.rtc$IMZBF@0@.debug$T\P@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё“YJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_init_encoder_FIX.obj:<!ovovMicrosoft (R) Optimizing Compilerњ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_init_encoder_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёа"@SA_Method"SA_Parameter PSKP_Silk_detect_SWB_state|SKP_Silk_NLSF_CB_structTSKP_SILK_LBRR_structKSKP_Silk_encoder_stateRSKP_Silk_LP_state+SKP_Silk_VAD_state!wchar_t!„SKP_Silk_predict_state_FIX!cSKP_Silk_encoder_state_FIXSKP_Silk_nsq_state‹SKP_Silk_encoder_control#‡SKP_Silk_prefilter_state_FIX"SA_AttrTargetsSKP_Silk_NLSF_CBS‰SKP_Silk_shape_state_FIX usize_t!ЧSKP_Silk_range_coder_stateSKP_Silk_nsq_stateTSKP_SILK_LBRR_struct+SKP_Silk_VAD_state!ЧSKP_Silk_range_coder_state PSKP_Silk_detect_SWB_stateRSKP_Silk_LP_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structKSKP_Silk_encoder_state‹SKP_Silk_encoder_control‰SKP_Silk_shape_state_FIX#‡SKP_Silk_prefilter_state_FIX!„SKP_Silk_predict_state_FIX!cSKP_Silk_encoder_state_FIXєXprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9<Ђ›Kžля гтZКЌЃєˆ’Џ‹ц+7 @#nŽи,ˆ{ѓEj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_init_encoder_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјh<Єj‹EPшƒФ jj jjjjjj‹EPшƒФ$‰Eј‹EЧ€TaŒ‹EЧ€XaŒ‹EЧ€ ‹EЧ€Ш‹EЧ€‹E@PшƒФEј‰Eј‹EЧ€д‚‹EЧ€›‹EЧ€Pa‹Eј_^[ФЬ;ьш‹х]У1MЂхѕ$эЬг ё…?эй}SKP_Silk_init_encoder_FIXЬР € VpsEnc јџџџtretђэ(„$€%€%'€8*€W-€d.€q2€~3€‹4€˜7€Џ:€М;€Щ=€ж?€й@€ X \ Ш Ь VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S(.textэјЂЯф™зїв.debug$SXЊИ№  2 _memset P .rtc$TMZЬ.L_v .rtc$IMZžz]…œ .debug$T\Ћ_SKP_Silk_init_encoder_FIX_SKP_Silk_VAD_Init_SKP_Silk_control_encoder_FIX__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase /3233 1273638394 100666 11413 ` Lњ-ъK5#D.drectveAD .debug$S„…@B.textT ] P`.debug$S “Ÿ @B.rdata&!!@0@.rdata&G!@0@.rdata m!@0@.rdata!@0@.rdataЊЋ!@@@.dataU"@0Р.rdatadY"@@@.rtc$TMZН"С"@0@.rtc$IMZЫ"Я"@0@.debug$T\й"@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёŸ_J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_HP_variable_cutoff_FIX.obj:<!ovovMicrosoft (R) Optimizing Compiler=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_HP_variable_cutoff_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё"@SA_Method"SA_Parameter PSKP_Silk_detect_SWB_state|SKP_Silk_NLSF_CB_structTSKP_SILK_LBRR_structKSKP_Silk_encoder_stateRSKP_Silk_LP_state#mSKP_Silk_encoder_control_FIX+SKP_Silk_VAD_state!wchar_t!„SKP_Silk_predict_state_FIX!cSKP_Silk_encoder_state_FIXSKP_Silk_nsq_state‹SKP_Silk_encoder_control#‡SKP_Silk_prefilter_state_FIX"SA_AttrTargetsSKP_Silk_NLSF_CBS‰SKP_Silk_shape_state_FIX usize_t!ЧSKP_Silk_range_coder_stateSKP_Silk_nsq_stateTSKP_SILK_LBRR_struct+SKP_Silk_VAD_state!ЧSKP_Silk_range_coder_state PSKP_Silk_detect_SWB_stateRSKP_Silk_LP_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structKSKP_Silk_encoder_state‹SKP_Silk_encoder_control‰SKP_Silk_shape_state_FIX#‡SKP_Silk_prefilter_state_FIX!„SKP_Silk_predict_state_FIX!cSKP_Silk_encoder_state_FIX#mSKP_Silk_encoder_control_FIXєXprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9Tг063КhмЙЌзФŽ’Џ‹ц+7 @#nŽи,ˆ{ѓKj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_hp_variable_cutoff_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 328 - ^ = $23 $T0 332 - ^ = $24 $T0 336 - ^ = U‹ььDSVWНМўџџЙQИЬЬЬЬѓЋЁ3Х‰Eќ‹EƒИД…~‹E‹€ФiРшСр‹M™їЙМ‰E ‹E PшƒФ-‰E”‹E ‹ˆx‰Mє‹EєСрСјПMєЏС‹UєСттџџПMєЏбСњТСј‹U”ъ)ПЪЏС‹UєСтСњПMєЏб‹MєСссџџПuєЏЮСљбтџџ‹M”щ)ПЩЏбСњТ‹U”+а‰U”ИЭL+EєСј E”‰E”‹E‹ˆTaСљ‹U”+б‰Uˆy ‹EˆkР‰Eˆƒ}ˆ3~ Ч…Рўџџ3ы'ƒ}ˆЭ} Ч…МўџџЭџџџы ‹Eˆ‰…Мўџџ‹Мўџџ‰Рўџџ‹•Рўџџ‰Uˆ‹E‹ˆ(ЄбсЏMˆСљiЩš‹U‹‚(ЄбрЏEˆ%џџiРšСјШ‹UŠTa‹E‰ˆTa‹E‹M‹Ta+‘XaСњiвз‹E‹M‹€Ta+Xa%џџiРзСја‹M‘Xa‹E‰Xa‹E‹ˆXaСљQшƒФ‹U ‰‚h‹E Иh–~ Ч…Рўџџ–ы3‹M ƒЙhP} Ч…МўџџPы‹U ‹‚h‰…Мўџџ‹Мўџџ‰Рўџџ‹U ‹…Рўџџ‰‚h‹E ИhT~&hj‹ ƒС2QhjшƒФƒјuЬ‹E П€hiРЪ‹M™їЙФ‰EФ}Фx}%hjЁƒР4PhjшƒФƒјuЬ}Ф‹l~%hjЁƒР5PhjшƒФƒјuЬ‹EФiРзЙ+Ш‰MИ}ИCL8}%hjЁƒР8PhjшƒФƒјuЬ}И8aх~%hjЁƒР9PhjшƒФƒјuЬ‹EИ‰Eр‹EИїибр‰Eф‹EИ‰Eш‹EИСј‰EЌ‹EЌСј‹MФСљПUФЏЪ‹UФтџџПuФЏжСњЪ‹UФСњƒТбњЏUФŒ€џПбЏТ‹MЌсџџ‹UФСњПuФЏж‹uФцџџП}ФЏїСўж‹uФСўƒЦбўЏuФ”2€џПвЏЪСљС‹MФСљПUФЏЪ‹UФтџџПuФЏжСњЪ‹UФСњƒТбњЏUФŒ€џСљƒСбљЏMЌС‰Eа‹EЌСјПMЌЏС‹UЌтџџПMЌЏбСњТ‹UЌСњƒТбњЏUЌТ‰Eд‹E‹ˆЬQ‹UR‹E(PMаQUрR‹EPшƒФR‹ЭPшXZ_^[‹Mќ3ЭшФD;ьш‹х]УIрџџџ аџџџA_Q28B_Q283\210˜,Ё(Ј$м#у,ь(ѓ$ ,(!$KR,[(b$y€,‰($яќ654,8Dѕ$TDй( ёСET(TSKP_Silk_HP_variable_cutoff_FIXDР„ … :ќџџџ     VpsEnc  hpsEncCtrl out in Иџџџtr_Q28 єџџџtquality_Q15 ”џџџtpitch_freq_log_Q7  џџџtpitch_freq_Hz_Q16 ˆџџџtdelta_freq_Q7 аџџџ(A_Q28 ФџџџtFc_Q19 Ќџџџtr_Q22 рџџџkB_Q28ђT(ќ*€(3€85€W6€k9€w;€ћ<€ ?€ @€"B€+F€mJ€ЖN€Q€#T€€\€Е]€в^€_€.a€Ab€oc€g€Ѓh€­i€Гl€Мm€•n€Ыs€іt€ X \ Б Е Р Ф Я г о т   r_Q28 <= 266690872r_Q28 >= 255347779Fc_Q19 <= 27787Fc_Q19 >= 3704j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_hp_variable_cutoff_fix.c*psEncCtrl->pitch_freq_low_Hz <= 0x7FFFFFFF / 1482;@VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S„.textTь  ймdч.debug$S  œЏD $LN19H$LN18N$LN200$LN21(% .rdata&Ф†зЖ:.rdata&lE"–Й.rdata &ђ,Р8.rdata#•8Ј .rdata Њџд# .data ZOЯо .rdata dћѓ8a д ц ј   5 .rtc$TMZ Ь.LL c .rtc$IMZ žz]r ‰ .debug$T\˜_SKP_Silk_HP_variable_cutoff_FIX_SKP_Silk_biquad_alt??_C@_1CG@NBNBOCII@?$AAr?$AA_?$AAQ?$AA2?$AA8?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA6?$AA6?$AA6?$AA9?$AA0?$AA8?$AA7?$AA2?$AA?$AA@??_C@_1CG@PBCECBCA@?$AAr?$AA_?$AAQ?$AA2?$AA8?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA2?$AA5?$AA5?$AA3?$AA4?$AA7?$AA7?$AA7?$AA9?$AA?$AA@??_C@_1CA@CGNJFIHE@?$AAF?$AAc?$AA_?$AAQ?$AA1?$AA9?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA7?$AA7?$AA8?$AA7?$AA?$AA@??_C@_1BO@MHGOFBGJ@?$AAF?$AAc?$AA_?$AAQ?$AA1?$AA9?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA3?$AA7?$AA0?$AA4?$AA?$AA@__CrtDbgReportW??_C@_1KK@FABLFNIP@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_HP_variable_cutoff_FIX@@9@9??_C@_1GE@HEPMKMO@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAp?$AAi?$AAt?$AAc?$AAh?$AA_?$AAf?$AAr?$AAe?$AAq?$AA_?$AAl?$AAo?$AAw?$AA_?$AAH?$AAz?$AA?5?$AA?$DM?$AA?$DN?$AA?5@_SKP_Silk_log2lin_SKP_Silk_lin2log___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase /3282 1273638394 100666 8758 ` L њ-ъKФ4.drectveA .debug$Sˆ]@B.text:х P`.debug$S˜[ѓ@B.rtc$TMZ%)@0@.rtc$IMZ37@0@.textGA P`.debug$Sрˆh@B.textGš P`.debug$SфсХ@B.textСїИ P`.debug$S`ж6@B.debug$T\h@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‡SJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_gain_quant.obj:<!ovovMicrosoft (R) Optimizing Compilerє=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_gain_quant.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlїk`JТ[жZY=@ёI@’Џ‹ц+7 @#nŽи,ˆ{‹(yFiдz<G;1=1ѓ#j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_gain_quant.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 216 - ^ = $23 $T0 220 - ^ = $24 $T0 224 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = U‹ььдSVWН,џџџЙ5ИЬЬЬЬѓЋЧEјы ‹EјƒР‰Eјƒ}јь‹Eј‹M ‹RшƒФ-€П№kі‹Eј‹M ‹RшƒФ-€˜iРt Сј№‹Mј‹U‰4Š‹Eј‹M‹U‹;}‹Eј‹M‹ƒТ‹Eј‹M‰ƒ}ј…›ƒ}…‘‹Eј‹Mƒ<?~ Ч…0џџџ?ы3‹Uј‹Eƒ<} Ч…,џџџы‹Mј‹U‹Љ…,џџџ‹,џџџ‰0џџџ‹Uј‹E‹0џџџ‰ ‹E‹ƒщQ‹Uј‹E‹ QшƒФ‹Uј‹M‰‘‹E‹Mј‹U‹ Љщ•‹Eј‹M‹U‹+ƒј(~ Ч…0џџџ(ы?‹Mј‹U‹E‹ Š+ƒљќ} Ч…,џџџќџџџы‹Uј‹E‹M‹+‰•,џџџ‹…,џџџ‰…0џџџ‹Mј‹U‹…0џџџ‰Š‹E‹‹Uј‹E ‹U‰ ‹Eј‹M‹ƒТ‹Eј‹M‰h‹EПkЩ‹UПiРQСјŒ€QшƒФPшƒФ‹Uј‹M ‰‘щўџџ_^[Фд;ьш‹х]УEb*)"2ѕ$:дЭ ёО::&”SKP_Silk_gains_quantдР € tind  tgain_Q16 tprev_ind conditional јџџџtkђ˜:Œ)€,€:.€ƒ1€“2€Ј6€М8€9€::€H;€M=€К?€ЭA€тE€!F€&G€ X \   U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФ? ёp0G@.SKP_min_32ФР € ta  tbђ0G`$п€р€@с€ "X" \" А" Д" U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E ~ ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФ? ёq1G@.SKP_max_intФР € ta  tbђ0G`$щ€ъ€@ы€ )X) \) Д) И) U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјы ‹EјƒР‰Eјƒ}ј}wƒ}јuƒ}u‹E‹Mј‹U ‹ Љы‹Eј‹M ‹‹E‹T ќ‹E‰h‹EПkЩ‹UПiРQСјŒ€QшƒФPшƒФ‹Uј‹M‰‘щzџџџ_^[ФЬ;ьш‹х]У"˜Йѕ$СЬБ ёР<С­SKP_Silk_gains_dequantЬР € tgain_Q16  ind tprev_ind conditional јџџџtkђ`С TP€S€6T€BU€PV€RX€i\€Ј]€­^€ 0X0 \0 0 0 VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sˆ.text:;qKEVбnj.debug$S˜UF€&  , > .rtc$TMZЬ.LMd .rtc$IMZžz]sŠ .textGиьио^7єХ.debug$SрТ•‚v™ .text GСв UdЈЏ.debug$S ф ПVfЅ .text СЏY]7зTЬ.debug$S ` 7 oВ .debug$T \Ъ_SKP_Silk_gains_quant_SKP_Silk_log2lin_SKP_Silk_lin2log__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_min_32_SKP_max_int_SKP_Silk_gains_dequant/3319 1273638395 100666 16900 ` Lћ-ъK“3o.drectveA„ .debug$SиХ@B.text8е$ P`.debug$SЈ=!х$@B.rdataМЫ%@@@.rdata‡&@@@.rdataЄЅ'@@@.dataI(@0Р.rdata<M(@0@.rtc$TMZ‰((@0@.rtc$IMZ—(›(@0@.textЗЅ(\+ P`.debug$Sо+ю-@B.rdata .@0@.rdataŒ4.@@@.dataР.@0Р.rdataФ.@0@.text_ж.5/ P`.debug$SєS/G0@B.textрy0 P`.debug$SЌY13@B.debug$T\73@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё™\J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_find_pred_coefs_FIX.obj:<!ovovMicrosoft (R) Optimizing Compiler§=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_find_pred_coefs_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё"@SA_Method"SA_Parameter PSKP_Silk_detect_SWB_state|SKP_Silk_NLSF_CB_structTSKP_SILK_LBRR_structKSKP_Silk_encoder_stateRSKP_Silk_LP_state#mSKP_Silk_encoder_control_FIX+SKP_Silk_VAD_state!wchar_t!„SKP_Silk_predict_state_FIX!cSKP_Silk_encoder_state_FIXSKP_Silk_nsq_state‹SKP_Silk_encoder_control#‡SKP_Silk_prefilter_state_FIX"SA_AttrTargetsSKP_Silk_NLSF_CBS‰SKP_Silk_shape_state_FIX usize_t!ЧSKP_Silk_range_coder_stateSKP_Silk_nsq_stateTSKP_SILK_LBRR_struct+SKP_Silk_VAD_state!ЧSKP_Silk_range_coder_state PSKP_Silk_detect_SWB_stateRSKP_Silk_LP_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structKSKP_Silk_encoder_state‹SKP_Silk_encoder_control‰SKP_Silk_shape_state_FIX#‡SKP_Silk_prefilter_state_FIX!„SKP_Silk_predict_state_FIX!cSKP_Silk_encoder_state_FIX#mSKP_Silk_encoder_control_FIXєXprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9‚иЫо%Ёx_5w><Wћ‹’Џ‹ц+7 @#nŽи,ˆ{ѓЁj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_find_pred_coefs_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 1940 - ^ = $23 $T0 1944 - ^ = $24 $T0 1948 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 300 - ^ = $23 $T0 304 - ^ = $24 $T0 308 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = U‹ььSVWНpјџџЙфИЬЬЬЬѓЋЁ3Х‰EќЧ…TљџџџџџЧEєы ‹EєƒР‰Eєƒ}є}D‹Eє‹M ‹•Tљџџ;”€}‹…Tљџџ‰…tјџџы‹Mє‹U ‹„Š€‰…tјџџ‹tјџџ‰Tљџџы­ЧEєы ‹EєƒР‰Eєƒ}є›‹Eє‹M ƒМ€&hj‹ƒТRhjшƒФƒјuЬj‹Eє‹M ‹”€R‹…TљџџPшƒФ ‹Mє‰„Dўџџ‹EєМ…Dўџџk~‹Mє‹”Dўџџ‰•tјџџы Ч…tјџџk‹Eє‹tјџџ‰Œ…Dўџџ‹EєМ…Dўџџџ~ Ч…tјџџџы8‹MєМDўџџ€џџ} Ч…pјџџ€џџы‹Uє‹„•Dўџџ‰…pјџџ‹pјџџ‰tјџџ‹Uє‹„•Dўџџ;…tјџџt&hj‹ ƒСQhjшƒФƒјuЬ‹Eє‹Œ…DўџџСљ‹UєП„•DўџџЏШ‹Uє‹„•Dўџџ%џџ‹UєП”•DўџџЏТСјШ‰`љџџ‹…`љџџбј‹Mє‰„ўџџ‹MєИ™їМDўџџ‹Uє‰„•,ўџџщRўџџ‹E ƒxh…S‹E‹M‹Ь+‘ќ‹E ‹HlƒС;б}&hj‹ƒТ&RhjшƒФƒјuЬ…<љџџP‹M‹‘ЬR‹E‹ˆаQ•ўџџR‹E ƒРlP‹M‹‘Ьбњ‹E PQ‹UR‹E tP\ўџџQ‹U ТиRшƒФ(‹E‹ˆ Q‹U‹‚ЄP\ўџџQ‹U ƒТR‹E ƒР P‹M СиQшƒФ‹E P‹MQшƒФ‹E‹ˆќQ‹U‹‚аPjDўџџQ‹U ƒТlR‹E иP‹M‹‘Ь‹EŒP ›‹U‹‚ќбр+ШQlљџџQшƒФ щл‹E‹ˆЬ‹U„J ›‹M‹‘ќбт+Т‰…Р§џџ…lљџџ‰…Д§џџЧEєы ‹EєƒР‰Eєƒ}є}o‹E‹ˆа‹UŠќQ‹Eє‹Œ…DўџџQ‹•Р§џџR‹…Д§џџPшƒФ‹E‹ˆа‹UŠќ‹…Д§џџ H‰Д§џџ‹E‹ˆа‹•Р§џџJ‰…Р§џџы‚j(j‹E иPшƒФ ‹E Ч€t‹E‹ˆа‹UŠќQ…lљџџP‹M‹‘ќR‹EЙ+ˆ ‹UЏŠєQ‹EрiP‹M ƒСDQ•Ь§џџRшƒФ…Ь§џџP‹M Q‹URшƒФ ‹E‹ˆќQ‹U‹‚аP,ўџџQ‹U Т˜R…lљџџP‹M СœQ‹U ТŒRшƒФ‹E‹ˆќСсQ•Ь§џџR‹EрiPшƒФ R‹ЭPшXZ_^[‹Mќ3ЭшФ;ьш‹х]У\ўџџDўџџ,ўџџўџџЬ§џџ@lљџџ@<љџџLTP_corrs_rshiftLPC_in_preNLSF_Q15Wght_Q15local_gainsinvGains_Q16WLTP7Л6У2Ь.г*јKЌ)Д2Н.Ф*r%z2ƒ.Š*ё!, <™lеь4Yfk:z9‡8” ЌИФамшѕ$8 ж( ё6B8(8”SKP_Silk_find_pred_coefs_FIXРа … :ќџџџ          VpsEnc  hpsEncCtrl res_pitch Dўџџ)invGains_Q16 Д§џџx_pre_ptr lљџџ’LPC_in_pre ўџџ)Wght_Q15 Р§џџx_ptr <љџџ)LTP_corrs_rshift Tљџџtmin_gain_Q16 ,ўџџ)local_gains Ь§џџИNLSF_Q15 `љџџttmp єџџџti \ўџџ‘WLTPђ08(#$$€(0€21€J2€Œ3€Ž4€Њ6€р8€ ;€E>€б?€@€&C€@D€EF€RJ€—O€јT€3W€C[€ ]€Ѕb€Ыc€зd€яf€#g€Dh€\i€^k€sl€€s€мy€ѓ~€;€`ƒ€ X \ Ў В Н С Ь а л п ъ ю љ §     & * x | psEnc->sCmn.frame_length - psEnc->sCmn.predictLPCOrder >= psEncCtrl->sCmn.pitchL[ 0 ] + 5 / 2invGains_Q16[ i ] == ((invGains_Q16[ i ]) > 0x7FFF ? 0x7FFF : ((invGains_Q16[ i ]) < ((short)0x8000) ? ((short)0x8000) : (invGains_Q16[ i ])))j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_find_pred_coefs_fix.c$psEncCtrl->Gains_Q16[ i ] > 0?DU‹ьь(SVWНиўџџЙJИЬЬЬЬѓЋƒ} u%hjЁƒРPhjшƒФƒјuЬƒ}}%hjЁƒРPhjшƒФƒјuЬƒ}~ ‹E‰…шўџџы ‹Mїй‰шўџџ‹•шўџџRшƒФƒш‰Eј‹E‹Mјгр‰EШƒ} ~ ‹E ‰…шўџџы ‹M їй‰шўџџ‹•шўџџRшƒФƒш‰Eь‹E ‹Mьгр‰EМ‹MМСљИџџџ™їљ‰Eд‹EШСјПMдЏС‹UШтџџПMдЏбСњТ‰EА‹EМ™‹Ш‹ђ‹EА™RPVQшБ шСр‹UШ+а‰UШ‹EШСјПMдЏС‹UШтџџПMдЏбСњUАа‰UА‹EјƒР+Eь+E‰Eрƒ}р‹MрїйИ€гј‹MрїйКџџџгњ;Т~m‹MрїйИ€гј9EА~‹MрїйК€гњ‰•шўџџы:‹MрїйИџџџгј9EА}‹MрїйКџџџгњ‰•фўџџы ‹EА‰…фўџџ‹фўџџ‰шўџџ‹•шўџџ‰•рўџџыk‹MрїйИџџџгј9EА~‹MрїйКџџџгњ‰•мўџџы:‹MрїйИ€гј9EА}‹MрїйК€гњ‰•иўџџы ‹EА‰…иўџџ‹иўџџ‰мўџџ‹•мўџџ‰•рўџџ‹Mрїй‹…рўџџгрыыƒ}р } ‹EА‹Mргјыы3Р_^[Ф(;ьш‹х]У%[,W5S<*POWW`Sg*˜dдd3]:\Џ8ѕ$З( K ё4ЗЃлSKP_DIV32_varQ(Рh € a32  b32 Qres ьџџџtb_headrm рџџџtlshift Аџџџtresult јџџџta_headrm Мџџџtb32_nrm Шџџџta32_nrm дџџџtb32_invђИЗЌ„€ˆ€I‰€tŒ€Ѕ€АŽ€с€ь’€§•€"˜€I›€qž€€Ÿ€Š €Ё€Ђ€•Ѓ€ŸЄ€ЁІ€ЃЉ€ KXK \K XK \K Qres >= 0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.h„b32 != 0U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E%џџt‹EСјPшƒФыыЗEPшƒФƒР_^[ФР;ьш‹х]У0kAkW8ѕ$_РН ёi4_KSKP_Silk_CLZ32РР € tin32ђH_<p€r€(s€9t€;u€Kw€ dXd \d Ќd Аd U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјПE…Рu ИщЂПE%џt0ПE%№tf‹EfСј f‰Eы‹EјƒР‰Eјf‹EfСјf‰Eы+ПE%№џt‹EјƒР‰Eјf‹EfСјf‰Eы ‹EјƒР ‰EјПEƒр tПEƒрt‹Eјы%ы‹EјƒРыыПEƒрt ‹EјƒРыы‹EјƒР_^[‹х]Уѕ$рЬ/ ё{4рй SKP_Silk_CLZ16ЬР € in16 јџџџtout32ђ№рфL€M€%N€-O€7R€BS€MT€YU€[V€dW€pY€rZ€}[€†\€’]€”^€b€Іc€Џd€Дe€Жf€Оg€Рh€Щi€бj€гk€йm€ kXk \k Мk Рk VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sи.text8$‰‘yнуЗ.debug$SЈЌ›^ $LN31ь$LN30§$LN29$LN28$LN27$LN26&$LN253$LN32˜$LN33_memcpy " @ \ _memset s ‘ Г а ю .rdataМБОї.rdata ТŽ .rdataЄQЈгž.datai8P/Y.rdata <бQяŒ K^ m ˆ .rtc$TMZ Ь.LŸ Ж .rtc$IMZ žz]Х м .text З №ъэ \/i-.debug$S  Фѓ_Žы .rdataљлЗ.ћ.rdataŒыM.datal!;b.rdataік–!6__allshr __allmul .text_йIѕ=vЄёC.debug$Sє:Яq‘ƒ .textр}BИ#u‘ћ.debug$SЌбЛ5с“ .debug$T\Ѓ_SKP_Silk_find_pred_coefs_FIX_SKP_Silk_residual_energy_FIX_SKP_Silk_process_NLSFs_FIX_SKP_Silk_find_LPC_FIX_SKP_Silk_scale_copy_vector16_SKP_Silk_LTP_analysis_filter_FIX_SKP_Silk_LTP_scale_ctrl_FIX_SKP_Silk_quant_LTP_gains_FIX_SKP_Silk_find_LTP_FIX??_C@_1LM@OHMGEGOM@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAf?$AAr?$AAa?$AAm?$AAe?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?5?$AA?9?$AA?5?$AAp?$AAs?$AAE?$AAn?$AAc@??_C@_1BBO@FPOODJNB@?$AAi?$AAn?$AAv?$AAG?$AAa?$AAi?$AAn?$AAs?$AA_?$AAQ?$AA1?$AA6?$AA?$FL?$AA?5?$AAi?$AA?5?$AA?$FN?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAi?$AAn?$AAv?$AAG?$AAa?$AAi?$AAn?$AAs?$AA_@__CrtDbgReportW??_C@_1KE@PBEDJMIH@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_find_pred_coefs_FIX@@9@9??_C@_1DM@BEOFCHCG@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AAt?$AAr?$AAl?$AA?9?$AA?$DO?$AAG?$AAa?$AAi?$AAn?$AAs?$AA_?$AAQ?$AA1?$AA6?$AA?$FL?$AA?5?$AAi?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_DIV32_varQ??_C@_1BE@NOJNLPIL@?$AAQ?$AAr?$AAe?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1IM@NKJIPJPB@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_DIV32_varQ@@9@9@7b56cc59??_C@_1BC@LJHCOKEE@?$AAb?$AA3?$AA2?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_Silk_CLZ32_SKP_Silk_CLZ16/3365 1273638395 100666 14554 ` Lћ-ъKЪ._.drectveAф .debug$Sи%@B.textі§ѓ P`.debug$SАХ"@B.rdataЄЋ#@@@.dataO$@0Р.rdataTS$@@@.rtc$TMZЇ$Ћ$@0@.rtc$IMZЕ$Й$@0@.textяУ$В% P`.debug$S”ј%Œ' @B.texty(‡( P`.debug$S@›(л)@B.text_ *l* P`.debug$SєŠ*~+@B.textрА+ P`.debug$SЌ,<.@B.debug$T\n.@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё™\J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_find_pitch_lags_FIX.obj:<!ovovMicrosoft (R) Optimizing Compiler§=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_find_pitch_lags_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё"@SA_Method"SA_Parameter PSKP_Silk_detect_SWB_state|SKP_Silk_NLSF_CB_structTSKP_SILK_LBRR_structKSKP_Silk_encoder_stateRSKP_Silk_LP_state#mSKP_Silk_encoder_control_FIX+SKP_Silk_VAD_state!wchar_t!„SKP_Silk_predict_state_FIX!cSKP_Silk_encoder_state_FIXSKP_Silk_nsq_state‹SKP_Silk_encoder_control#‡SKP_Silk_prefilter_state_FIX"SA_AttrTargetsSKP_Silk_NLSF_CBS‰SKP_Silk_shape_state_FIX usize_t!ЧSKP_Silk_range_coder_stateSKP_Silk_nsq_stateTSKP_SILK_LBRR_struct+SKP_Silk_VAD_state!ЧSKP_Silk_range_coder_state PSKP_Silk_detect_SWB_stateRSKP_Silk_LP_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structKSKP_Silk_encoder_state‹SKP_Silk_encoder_control‰SKP_Silk_shape_state_FIX#‡SKP_Silk_prefilter_state_FIX!„SKP_Silk_predict_state_FIX!cSKP_Silk_encoder_state_FIX#mSKP_Silk_encoder_control_FIXєXprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9ˆЛkžZ4­jRV1:‹’Џ‹ц+7 @#nŽи,ˆ{ѓЁj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_find_pitch_lags_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 2340 - ^ = $23 $T0 2344 - ^ = $24 $T0 2348 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 232 - ^ = $23 $T0 236 - ^ = $24 $T0 240 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = U‹ьь SVWНріџџЙHИЬЬЬЬѓЋЁ3Х‰Eќ‹Eдi‰Eє‹E‹ˆЬ‹U‹‚д H‰Mш‹Eє‹Mш;}&hj‹ƒТRhjшƒФƒјuЬ‹E‹ˆЬбс‹U+б‰UИ‹Eш‹MИA‹Eє‹бс+б‰UЌ…фјџџ‰…ијџџ‹E‹ˆдQj‹UЌR‹…ијџџPшƒФ‹E‹ˆд‹•ијџџJ‰…ијџџ‹E‹ˆд‹UЌJ‰EЌ‹E‹ˆдбс‹Uє‹+СбрP‹MЌQ‹•ијџџRшƒФ ‹E‹ˆдбс‹Uє‹+С‹ијџџA‰•ијџџ‹E‹ˆдбс‹Uє‹+С‹MЌA‰UЌ‹E‹ˆдQj‹UЌR‹…ијџџPшƒФ‹E‹ˆ ƒСQ‹Uє‹PфјџџQUаR…ŒјџџPшƒФ‹…ŒјџџСјkРB‹ŒјџџсџџkЩBСљŒјџџШ‰Œјџџ‹E‹ˆ Q•ŒјџџR…dјџџPшƒФ ‹E‹ˆ Q•dјџџR…јџџPшƒФ ЧEмы ‹EмƒР‰Eм‹E‹Mм;ˆ }w‹Eм‹Œ…јџџСљ љџ~ Ч…фіџџџы?‹Uм‹„•јџџСј =€џџ} Ч…ріџџ€џџы‹Mм‹”јџџСњ ‰•ріџџ‹…ріџџ‰…фіџџ‹Mмf‹•фіџџf‰”MЌїџџщrџџџhq§‹E‹ˆ Q•ЌїџџRшƒФ ‹E‹ˆ бсQj•дїџџRшƒФ ‹E‹ˆ Q‹UшR‹EPдїџџQ•ЌїџџR‹EИPшƒФ‹E‹ˆ бсQj‹URшƒФ ЧEФ@‹EПˆ iЩ}џџџMФ‰MФ‹E‹ˆ(ЄСсQшƒФПаkвѓUФ‰UФ‹EПˆДiЩыMФ‰MФ‹E ‹ˆˆСљkЩсMФ‰MФ}Фџ~ Ч…фіџџџы*}Ф€џџ} Ч…ріџџ€џџы ‹EФ‰…ріџџ‹ріџџ‰фіџџ‹•фіџџ‰UФ‹E‹ˆ Q‹U‹‚ФPПMФQ‹U‹‚,ЄP‹M‹‘МR‹EЄP‹M ƒСQ‹U R‹E ƒРlP‹MQшƒФ(‹U ‰BhR‹ЭPшXZ_^[‹Mќ3ЭшФ ;ьш‹х]У‹џаџџџфјџџРŒјџџDdјџџ јџџ@дїџџ@Ќїџџ A_Q12FiltStateA_Q24rc_Q15auto_corrWsigscale.V-^)g%n!Ч t Ёэ Тп %WB*=B1Q0^/lx„œЈДРѕ$і ж( ёPBі(іSKP_Silk_find_pitch_lags_FIX Р` … :ќџџџ          VpsEnc  hpsEncCtrl res x фјџџ™Wsig ијџџWsig_ptr Иџџџx_buf јџџИA_Q24 Ќџџџx_buf_ptr Фџџџtthrhld_Q15 єџџџ•psPredSt дїџџИFiltState шџџџtbuf_len dјџџєrc_Q15 ЌїџџєA_Q12 мџџџti аџџџtscale Œјџџ7auto_corrђ і(!%€(&€35€K8€{:€ŽC€ЃD€ЏE€ЮH€цI€јJ€ M€AN€\O€{R€ЈU€дX€є[€^€4_€І`€Ћc€Щh€цi€j€,m€3n€Io€jp€€q€•r€нy€7z€ X \ Ў В Н С Ь а л п ъ ю љ §     & *  ” j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_find_pitch_lags_fix.c%buf_len >= psPredSt->pitch_LPC_win_length6;U‹ььфSVWНџџџЙ9ИЬЬЬЬѓЋƒ}3РыvEрPMьQ‹URшƒФ ‹Eьƒрt ЧEј€ыЧEј†Д‹Mьбљ‹Eјгј‰Eј‹EјСјПMрiЩеПбЏТ‹MјсџџПUрiвеПвЏЪСљMјШ‰Mј‹EјR‹ЭPшXZ_^[Фф;ьш‹х]Уьџџџрџџџfrac_Q7lz5MЄFЉ1Л/ШEдDрCѕ$яфK ёй:яяSKP_Silk_SQRT_APPROXфР$ €     tx рџџџtfrac_Q7 ьџџџtlz јџџџtyђxя lK€N€$O€(R€<T€DU€KV€MW€T[€a^€›`€ža€ BXB \B šD žD ЉC ­C ИE МE ЧF ЫF B B U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋ‹EPшƒФ‰Eј‹E ‹Mј‰ƒ}ј}Й+Mј‹Eгјƒр‹M‰ы‹Mјƒщ‹Eгрƒр‹M‰_^[ФЬ;ьш‹х]У#Tq/ѕ$yЬ Н ёІ7yeSKP_Silk_CLZ_FRACЬР € tin  tlz tfrac_Q7 јџџџtleadingZerosђXyL;€>€-?€5@€;A€PB€RC€eE€ MXM \M шM ьM U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E%џџt‹EСјPшƒФыыЗEPшƒФƒР_^[ФР;ьш‹х]У0[A[W/ѕ$_Р/ ёi4_KSKP_Silk_CLZ32РР € tin32ђH_<p€r€(s€9t€;u€Kw€ TXT \T ЌT АT U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјПE…Рu ИщЂПE%џt0ПE%№tf‹EfСј f‰Eы‹EјƒР‰Eјf‹EfСјf‰Eы+ПE%№џt‹EјƒР‰Eјf‹EfСјf‰Eы ‹EјƒР ‰EјПEƒр tПEƒрt‹Eјы%ы‹EјƒРыыПEƒрt ‹EјƒРыы‹EјƒР_^[‹х]Уѕ$рЬН ё{4рй SKP_Silk_CLZ16ЬР € in16 јџџџtout32ђ№рфL€M€%N€-O€7R€BS€MT€YU€[V€dW€pY€rZ€}[€†\€’]€”^€b€Іc€Џd€Дe€Жf€Оg€Рh€Щi€бj€гk€йm€ [X[ \[ М[ Р[ VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sи.textіћpоlл’3.debug$SАaХѕ $LN21Ф$LN20Ъ$LN19д$LN18к$LN17с$LN16ы$LN15№$LN22p$LN23h" @ _memset X m { ‹ _memcpy ž К .rdataЄЛ•11Ъ.data _ь—….rdataTк!DчИyŒ › Ж .rtc$TMZЬ.LЭф .rtc$IMZ žz]ѓ   .text яR-ЄTŒІђ.debug$S ” їz>} $LN7ф $LN6ь $LN8Ь $LN9Ф .text yУ‹f&‚нm.debug$S @ Stё/ .text_йIѕ=vЄёC.debug$Sє:Яq‘B .textр}BИ#u‘ћ.debug$SЌбЛ5сR .debug$T\b_SKP_Silk_find_pitch_lags_FIX_SKP_Silk_pitch_analysis_core_SKP_Silk_MA_Prediction_SKP_Silk_bwexpander_SKP_Silk_k2a_SKP_Silk_schur_SKP_Silk_autocorr_SKP_Silk_apply_sine_window__CrtDbgReportW??_C@_1KE@NBKBKBGN@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_find_pitch_lags_FIX@@9@9??_C@_1FE@GMHHDEFD@?$AAb?$AAu?$AAf?$AA_?$AAl?$AAe?$AAn?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAp?$AAs?$AAP?$AAr?$AAe?$AAd?$AAS?$AAt?$AA?9?$AA?$DO?$AAp?$AAi?$AAt?$AAc?$AAh?$AA_?$AAL?$AAP?$AAC?$AA_?$AAw@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_SQRT_APPROX_SKP_Silk_CLZ_FRAC_SKP_Silk_CLZ32_SKP_Silk_CLZ16/3411 1273638395 100666 26002 ` L%ћ-ъKšQЅ.drectveAм .debug$Sф@B.textкл.@ P`.debug$Sм[179@B.rdata:1:@0@.rdataјk:@@@.rdatac<@0@.rdata,w<@0@.rdata^Ѓ<@@@.rdata–=@@@.data—=@0Р.rdata›=@0@.rtc$TMZЕ=Й=@0@.rtc$IMZУ=Ч=@0@.text_б=0> P`.debug$SєN>B?@B.textрt? P`.debug$SЌT@B@B.textG2B P`.debug$SфyB]C@B.textGC P`.debug$SржCЖD@B.textGшD P`.debug$Sф/EF@B.textNEF P`.debug$Sр“FsG@B.textGЅG P`.debug$SрьGЬH@B.textЗўHЕK P`.debug$S7LGN@B.rdatayN@0@.rdataŒN@@@.dataO@0Р.rdataO@0@.textС/O P`.debug$S№O Q@B.debug$T\>Q@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‹UJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_find_LTP_FIX.obj:<!ovovMicrosoft (R) Optimizing Compilerі=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_find_LTP_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tєXprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9ЕВkЅгј]ђž™’ю„’Џ‹ц+7 @#nŽи,ˆ{ѓ{ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_find_ltp_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 724 - ^ = $23 $T0 728 - ^ = $24 $T0 732 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 300 - ^ = $23 $T0 304 - ^ = $24 $T0 308 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 216 - ^ = $23 $T0 220 - ^ = $24 $T0 224 - ^ = U‹ььаSVWН0§џџЙДИЬЬЬЬѓЋЁ3Х‰Eќ‹E‰EИ‹E ‰E ‹E(‹MA‰UаЧEшы ‹EшƒР‰Eшƒ}шCƒ}шu ‹E(‹MA‰Uа‹Eш‹M‹D‹Mа+Ш‰MФ‹E$P‹MаQ•РўџџR‹EшŒ…DўџџQшƒФ‹Eш‹Œ…DўџџQшƒФ‰…œўџџƒНœўџџ}И+…œўџџƒјu#‹Mш‹”Dўџџбњ‹Eш‹Œ…Dўџџƒсቕd§џџы%Й+œўџџƒщ‹Uш‹„•DўџџгјƒРбј‰…d§џџ‹Mш‹•d§џџ‰”DўџџИ+…œўџџ…Рўџџ‰…Рўџџ‹Eш‹M,‹•Рўџџ‰‹Eш‹M,R‹E Pj‹M$Q‹UФRшƒФ‹Eш‹M,‹R…\ўџџPj‹M$Q‹UаR‹EФPшƒФ‹Eш‹M,‹;•Рўџџ~%‹Eш‹M,‹ +Рўџџ‹Uш‹„•Dўџџгј‹Mш‰„Dўџџ‹EшƒМ…Dўџџ}&hj‹ ƒС(QhjшƒФƒјuЬ‹Eш‹Œ…DўџџƒССљkЩB‹Uш‹„•DўџџƒР%џџkРBСјШ‰MЌj‹EЌP‹Mш”DўџџR‹E PшƒФE„P\ўџџQj‹U RшƒФ‹EИPM„QшƒФjj‹Eш‹Œ…DўџџQ•\ўџџR‹E P‹MИQшƒФ‹Uш‰„•8џџџj‹Eш‹M,‹RшƒФ‰…Ьўџџ‹ЬўџџƒСИ€гј‹ЬўџџƒСКџџџгњ;ТŽ0‹Eш‹”…8џџџСњ‹Eш‹M ПЏа‹Mш‹„8џџџ%џџ‹Mш‹u П ŽЏССја‹ЬўџџƒСИ€гј;а~‹ЬўџџƒСК€гњ‰•d§џџщЕ‹Eш‹”…8џџџСњ‹Eш‹M ПЏа‹Mш‹„8џџџ%џџ‹Mш‹u П ŽЏССја‹ЬўџџƒСИџџџгј;а}‹ЬўџџƒСКџџџгњ‰•`§џџыB‹Eш‹Œ…8џџџСљ‹Uш‹E ПЏЪ‹Eш‹”…8џџџтџџ‹Eш‹u П†ЏаСњЪ‰`§џџ‹`§џџ‰d§џџ‹•d§џџ‰•\§џџщ+‹Eш‹”…8џџџСњ‹Eш‹M ПЏа‹Mш‹„8џџџ%џџ‹Mш‹u П ŽЏССја‹ЬўџџƒСИџџџгј;а~‹ЬўџџƒСКџџџгњ‰•X§џџщЕ‹Eш‹”…8џџџСњ‹Eш‹M ПЏа‹Mш‹„8џџџ%џџ‹Mш‹u П ŽЏССја‹ЬўџџƒСИ€гј;а}‹ЬўџџƒСК€гњ‰•T§џџыB‹Eш‹Œ…8џџџСљ‹Uш‹E ПЏЪ‹Eш‹”…8џџџтџџ‹Eш‹u П†ЏаСњЪ‰T§џџ‹T§џџ‰X§џџ‹•X§џџ‰•\§џџ‹ЬўџџƒС‹…\§џџгр‹U$Сњiв‹M$сџџiЩСљб‹Mш‹u,‹ Ž+ЬўџџгњТ‰…иўџџƒНиўџџ~‹…иўџџ‰…d§џџы Ч…d§џџ‹d§џџ‰иўџџ‹Eш‹M ‹™Бш‰…`§џџ‰•d§џџƒНd§џџ|4 Н`§џџџџџr&hj‹ƒТ:RhjшƒФƒјuЬ‹Eш‹M ‹Ср™їНиўџџ‰…фўџџ‹Eш‹M,‹ ƒС+Ьўџџƒщ‹•фўџџгњ‰•фўџџЧ…џџџЧEєы ‹EєƒР‰Eєƒ}є}<‹Eє‹M ‹;•џџџ~‹Eє‹M ‹‰•d§џџы ‹…џџџ‰…d§џџ‹d§џџ‰џџџыЕ‹…џџџPшƒФƒш‰Eм‹EмƒРy&hj‹ ƒСDQhjшƒФƒјuЬ‹EмƒРƒј}#‹MмƒСИгрP‹фўџџQшƒФ‰…фўџџj‹…фўџџP‹M QшƒФ ‹Eш‹M ‹Q0‰”…џџџ‹EшƒМ…џџџ}&hj‹ ƒСLQhjшƒФƒјuЬ‹E$‹MаA‰Uа‹EИƒР ‰EИ‹E ƒРd‰E щЊјџџЧ…ДўџџЧEшы ‹EшƒР‰Eшƒ}ш}!‹…ДўџџP‹Mш‹U,‹ŠPшƒФ‰…Дўџџыаƒ}„Ч…„ўџџЧ…ўџџЧEшы ‹EшƒР‰Eшƒ}шХ‹Eш‹Œ…DўџџСљ‹Uш‹E ПЏЪ‹Eш‹”…Dўџџтџџ‹Eш‹u П†ЏаСњT‹Eш‹M,‹ЕДўџџ+4ƒЦ‹Югњ•ўџџ‰•ўџџ‹Eш‹Œ…8џџџСљ‹Uш‹E ПЏЪ‹Eш‹”…8џџџтџџ‹Eш‹u П†ЏаСњT‹Eш‹M,‹ЕДўџџ+4ƒЦ‹Югњ•„ўџџ‰•„ўџџщ(џџџƒН„ўџџ~‹…„ўџџ‰…d§џџы Ч…d§џџ‹d§џџ‰„ўџџj‹…„ўџџP‹ўџџQшƒФ ‰…xўџџ‹…xўџџPшƒФ-ПШkЩ‹U‰ ‹…xўџџPшƒФ-kР=џ~ Ч…d§џџџыS‹xўџџQшƒФ-kР=€џџ} Ч…`§џџ€џџы‹•xўџџRшƒФ-kР‰…`§џџ‹…`§џџ‰…d§џџ‹M‹;•d§џџt%hjЁƒРfPhjшƒФƒјuЬ‹E‰EИЧEшы ‹EшƒР‰Eшƒ}ш}Q‹EшЧ„…PџџџЧEєы ‹EєƒР‰Eєƒ}є} ‹Eє‹MИПA‹Eш”…Pџџџ‹Mш‰”Pџџџыб‹EИƒР ‰EИы Ч…ќўџџЧ…№ўџџЧEшы ‹EшƒР‰Eшƒ}ш‘‹EшƒМ…Pџџџ~‹Mш‹”Pџџџ‰•d§џџы‹Eш‹Œ…Pџџџїй‰d§џџ‹•d§џџR‹…ќўџџPшƒФ‰…ќўџџ‹Eш‹Œ…џџџQшƒФК +а‹Eш‹M,+•ДўџџR‹•№ўџџRшƒФ‰…№ўџџщ\џџџНќўџџ€~'hjЁPhjшƒФƒјuЬ‹Е№ўџџƒЦ ‹…ќўџџPшƒФ+№ƒю‰ЕЬўџџ‹…ДўџџƒР‹Ьўџџ+Ш‰Ьўџџj‹…ЬўџџPшƒФ‰…Ьўџџ‹…Дўџџ…Ьўџџ‰…Јўџџ‹ДўџџЬўџџИгјƒР‰…фўџџЧ…8ўџџЧEшы ‹EшƒР‰Eшƒ}ше‹Eш‹M,‹•Јўџџ+‹Eш‹„…џџџ‹Ъгј…фўџџ‰…фўџџ‹Eш‹M,‹•Јўџџ+‹Eш‹„…џџџ‹ЪгјСј‹MшП”PџџџЏТ‹Mш‹U,‹ЕЈўџџ+4Š‹Mш‹”џџџ‹Югњтџџ‹MшПŒPџџџЏбСњТ‹Uш‹M,‹ЕЈўџџ+4‘‹Uш‹”•џџџ‹Югњ‹Mш‹ŒPџџџСљƒСбљЏбТ‹•8ўџџ‚‰…8ўџџщџџџj ‹…фўџџP‹8ўџџQшƒФ ‰…,ўџџ‹E‰EИЧEшы ‹EшƒР‰Eшƒ}шў‹Eш‹M,К+…в~'‹Eш‹M,К+‹Eш‹„…џџџ‹Ъгј‰…фўџџщ…‹Eш‹M,‹ ƒщК€гњ‹Eш‹M,‹ ƒщИџџџгј;аŽЁ‹Mш‹U,‹ ŠƒщИ€гј‹Mш9„џџџ~‹Uш‹E,‹ ƒщК€гњ‰•d§џџыV‹Eш‹M,‹ ƒщКџџџгњ‹Eш9”…џџџ}‹Mш‹U,‹ ŠƒщИџџџгј‰…`§џџы‹Mш‹”џџџ‰•`§џџ‹…`§џџ‰…d§џџ‹d§џџ‰\§џџщœ‹Uш‹E,‹ ƒщКџџџгњ‹Eш9”…џџџ~‹Mш‹U,‹ ŠƒщИџџџгј‰…X§џџыV‹Mш‹U,‹ ŠƒщИ€гј‹Mш9„џџџ}‹Uш‹E,‹ ƒщК€гњ‰•T§џџы‹Eш‹Œ…џџџ‰T§џџ‹•T§џџ‰•X§џџ‹…X§џџ‰…\§џџ‹Mш‹U,‹ Šƒщ‹…\§џџгр‰…фўџџ‹Eш‹Œ…PџџџСљ‹•,ўџџ+бт€uV‹Eш‹Œ…PџџџСљё€#,ўџџс€t Ч…d§џџ€ы‹Uш‹„•PџџџСј‹,ўџџ+Ш‰d§џџ‹•d§џџ‰•`§џџыT‹…,ўџџ5€‹Mш‹”PџџџСњ#Т%€t Ч…\§џџџџџы‹Eш‹Œ…PџџџСљ‹•,ўџџ+ቕ\§џџ‹…\§џџ‰…`§џџН`§џџџџџ~Ч…X§џџџџџщТ‹Mш‹”PџџџСњ‹…,ўџџ+Т%€uV‹Mш‹”PџџџСњђ€#•,ўџџт€t Ч…T§џџ€ы‹Eш‹Œ…PџџџСљ‹•,ўџџ+ቕT§џџ‹…T§џџ‰…P§џџыV‹,ўџџё€‹Uш‹„•PџџџСј#Шс€t Ч…L§џџџџџы‹Mш‹”PџџџСњ‹…,ўџџ+Т‰…L§џџ‹L§џџ‰P§џџНP§џџј}Ч…H§џџјщг‹Uш‹„•PџџџСј‹,ўџџ+Шс€uT‹Uш‹„•PџџџСј5€#…,ўџџ%€t Ч…D§џџ€ы‹Mш‹”PџџџСњ‹…,ўџџ+Т‰…D§џџ‹D§џџ‰@§џџыV‹•,ўџџђ€‹Eш‹Œ…PџџџСљ#бт€t Ч…<§џџџџџы‹Uш‹„•PџџџСј‹,ўџџ+Ш‰<§џџ‹•<§џџ‰•@§џџ‹…@§џџ‰…H§џџ‹H§џџ‰X§џџ‹фўџџС™Иfff™їљ‹•X§џџСтЏТ‰…,џџџЧ…фўџџЧEєы ‹EєƒР‰Eєƒ}є};hf‹Eє‹MИЗARшƒФ˜‹Mє‰„hџџџ‹Eє‹фўџџŒ…hџџџ‰фўџџыЖ‹…,џџџ™їНфўџџ‰…фўџџЧEєы ‹EєƒР‰Eєƒ}ємНфўџџџџџ~ Ч…d§џџџџџы0Нфўџџј} Ч…`§џџјы ‹…фўџџ‰…`§џџ‹`§џџ‰d§џџНфўџџџџџ~ Ч…\§џџџџџы0Нфўџџј} Ч…X§џџјы ‹•фўџџ‰•X§џџ‹…X§џџ‰…\§џџ‹Mє‹UИПJ‹d§џџСсСљ‹UєП”•hџџџЏЪ‹•\§џџСттџџ‹uєПДЕhџџџЏжСњЪС=`m~Ч…T§џџ`mщиНфўџџџџџ~ Ч…P§џџџџџы0Нфўџџј} Ч…L§џџјы ‹…фўџџ‰…L§џџ‹L§џџ‰P§џџНфўџџџџџ~ Ч…H§џџџџџы0Нфўџџј} Ч…D§џџјы ‹•фўџџ‰•D§џџ‹…D§џџ‰…H§џџ‹Mє‹UИПJ‹P§џџСсСљ‹UєП”•hџџџЏЪ‹•H§џџСттџџ‹uєПДЕhџџџЏжСњЪС=€Сџџ}Ч…@§џџ€СџџщоНфўџџџџџ~ Ч…<§џџџџџы0Нфўџџј} Ч…8§џџјы ‹…фўџџ‰…8§џџ‹8§џџ‰<§џџНфўџџџџџ~ Ч…4§џџџџџы0Нфўџџј} Ч…0§џџјы ‹•фўџџ‰•0§џџ‹…0§џџ‰…4§џџ‹Mє‹UИПJ‹<§џџСсСљ‹UєП”•hџџџЏЪ‹•4§џџСттџџ‹uєПДЕhџџџЏжСњЪС‰…@§џџ‹…@§џџ‰…T§џџ‹Mє‹UИf‹…T§џџf‰Jщ§џџ‹EИƒР ‰EИщяїџџR‹ЭPшXZ_^[‹Mќ3ЭшФа;ьш‹х]У„џџџhџџџPџџџ8џџџџџџРўџџ\ўџџDўџџrrRrrr_shiftswnrgd_Q14delta_b_Q14b_Q16BžAБWn@•?р>ш:ё6ј2K1d0tЁš/ИeЬFє.ќ:6 2ЛWб*й:т6щ2l2&W%_:h6o2гs ˆ4 !S !} !Ї !ж н :ц 6э 2й ђ W 7 > :I 6P 2n WЁ sш ˆвz E/D<CHT`lx„œЈѕ$ка(Я( ё:;к(к„SKP_Silk_find_LTP_FIXаР … :ќџџџ           b_Q14  tWLTP tLTPredCodGain_Q7 r_first r_last lag  Wght_Q15 $subfr_length (mem_offset ,tcorr_rshifts xўџџtdiv_Q16 \ўџџIRr иўџџtdenom32 Рўџџtrr_shifts мџџџtlshift  џџџtWLTP_ptr Dўџџ)rr шџџџtk Ќџџџtregu Ьўџџtextra_shifts œўџџtLZs hџџџIdelta_b_Q14 „џџџIb_Q16 ўџџtLPC_res_nrg 8ўџџtwd ЈўџџtmaxRshifts_wxtra ,ўџџtm_Q12 Иџџџb_Q14_ptr ќўџџtmax_abs_d_Q14 „ўџџtLPC_LTP_res_nrg єџџџti аџџџr_ptr Фџџџlag_ptr џџџtWLTP_max фўџџttemp32 ДўџџtmaxRshifts ,џџџtg_Q26 №ўџџtmax_w_bits Pџџџ)d_Q14 8џџџ)nrg џџџ)wђ`к(iT/€(@€.A€4B€@C€\D€bE€nG€ƒI€ЅK€ОL€ЧM€/N€FP€UQ€uS€œT€­U€вW€Y€5Z€R\€k_€{b€Ћe€Хg€’h€Пi€j€2k€Un€_o€wp€Бq€Гr€Шs€іt€u€$x€9z€I{€|}€ˆ~€‘€š€€Ÿ‚€Љƒ€С„€р…€тˆ€ь‰€іŠ€Œ€€|Ž€м€с€ ’€, “€K •€њ š€ ›€ œ€& €> ž€\ Ÿ€^  €g Ё€i І€s Ї€} Ј€™ Љ€ц Ќ€% ­€* А€] Г€€ Ж€— З€Ў Й€Р Л€м М€ц Н€ П€+ Р€в С€з Т€ѕ Ф€ћ Х€ Ч€) Ш€K Щ€P Ъ€еб€Ÿг€Љд€Се€фж€њз€ќи€й€+к€л€м€н€о€ X \ Ї Ћ Ж К Х Щ д и у ч ђ і      # . 2 | € max_abs_d_Q14 <= ( 5 << 15 )*LTPredCodGain_Q7 == ( int )((((3) * (SKP_Silk_lin2log( div_Q16 ) - ( 16 << 7 )))) > 0x7FFF ? 0x7FFF : ((((3) * (SKP_Silk_lin2log( div_Q16 ) - ( 16 << 7 )))) < ((short)0x8000) ? ((short)0x8000) : (((3) * (SKP_Silk_lin2log( div_Q16 ) - ( 16 << 7 ))))))w[k] >= 026 - 18 + lshift >= 0((long long)Wght_Q15[ k ] << 16 ) < 0x7FFFFFFFj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_find_ltp_fix.c/rr[ k ] >= 0KPU‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E%џџt‹EСјPшƒФыыЗEPшƒФƒР_^[ФР;ьш‹х]У0^A^WCѕ$_РA ёi4_KSKP_Silk_CLZ32РР € tin32ђH_<p€r€(s€9t€;u€Kw€ WXW \W ЌW АW U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјПE…Рu ИщЂПE%џt0ПE%№tf‹EfСј f‰Eы‹EјƒР‰Eјf‹EfСјf‰Eы+ПE%№џt‹EјƒР‰Eјf‹EfСјf‰Eы ‹EјƒР ‰EјПEƒр tПEƒрt‹Eјы%ы‹EјƒРыыПEƒрt ‹EјƒРыы‹EјƒР_^[‹х]Уѕ$рЬГ ё{4рй SKP_Silk_CLZ16ЬР € in16 јџџџtout32ђ№рфL€M€%N€-O€7R€BS€MT€YU€[V€dW€pY€rZ€}[€†\€’]€”^€b€Іc€Џd€Дe€Жf€Оg€Рh€Щi€бj€гk€йm€ ^X^ \^ М^ Р^ U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФ% ёq1G@.SKP_min_intФР € ta  tbђ0G$з€и€@й€ eXe \e Дe Иe U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФ% ёp0G@.SKP_min_32ФР € ta  tbђ0G$п€р€@с€ lXl \l Аl Дl U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E ~ ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФ% ёq1G@.SKP_max_intФР € ta  tbђ0G$щ€ъ€@ы€ sXs \s Дs Иs U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋПEПM ;С~ ПU‰•<џџџы ПE ‰…<џџџf‹…<џџџ_^[‹х]Уѕ$NФ% ёp0NGЪSKP_max_16ФР € a  bђ0N$э€ю€Gя€ zXz \z Аz Дz U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E ~ ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФ% ёp0G@.SKP_max_32ФР € ta  tbђ0G$ё€ђ€@ѓ€ X \ А Д U‹ьь(SVWНиўџџЙJИЬЬЬЬѓЋƒ} u%hjЁƒРPhjшƒФƒјuЬƒ}}%hjЁƒРPhjшƒФƒјuЬƒ}~ ‹E‰…шўџџы ‹Mїй‰шўџџ‹•шўџџRшƒФƒш‰Eј‹E‹Mјгр‰EШƒ} ~ ‹E ‰…шўџџы ‹M їй‰шўџџ‹•шўџџRшƒФƒш‰Eь‹E ‹Mьгр‰EМ‹MМСљИџџџ™їљ‰Eд‹EШСјПMдЏС‹UШтџџПMдЏбСњТ‰EА‹EМ™‹Ш‹ђ‹EА™RPVQшБ шСр‹UШ+а‰UШ‹EШСјПMдЏС‹UШтџџПMдЏбСњUАа‰UА‹EјƒР+Eь+E‰Eрƒ}р‹MрїйИ€гј‹MрїйКџџџгњ;Т~m‹MрїйИ€гј9EА~‹MрїйК€гњ‰•шўџџы:‹MрїйИџџџгј9EА}‹MрїйКџџџгњ‰•фўџџы ‹EА‰…фўџџ‹фўџџ‰шўџџ‹•шўџџ‰•рўџџыk‹MрїйИџџџгј9EА~‹MрїйКџџџгњ‰•мўџџы:‹MрїйИ€гј9EА}‹MрїйК€гњ‰•иўџџы ‹EА‰…иўџџ‹иўџџ‰мўџџ‹•мўџџ‰•рўџџ‹Mрїй‹…рўџџгрыыƒ}р } ‹EА‹Mргјыы3Р_^[Ф(;ьш‹х]У%˜,”5<2PŒW”`g2˜WдW3š:™ЏCѕ$З( — ё4ЗЃлSKP_DIV32_varQ(Рh € a32  b32 Qres ьџџџtb_headrm рџџџtlshift Аџџџtresult јџџџta_headrm Мџџџtb32_nrm Шџџџta32_nrm дџџџtb32_invђИЗЌ„€ˆ€I‰€tŒ€Ѕ€АŽ€с€ь’€§•€"˜€I›€qž€€Ÿ€Š €Ё€Ђ€•Ѓ€ŸЄ€ЁІ€ЃЉ€ ˆXˆ \ˆ Xˆ \ˆ Qres >= 0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.h„b32 != 0U‹ььдSVWН,џџџЙ5ИЬЬЬЬѓЋЧEјы ‹EјƒР‰Eјƒ}ј€‹Eј‹M‹бњƒТбњњџ~ Ч…0џџџџыF‹Eј‹M‹бњƒТбњњ€џџ} Ч…,џџџ€џџы‹Eј‹M‹бњƒТбњ‰•,џџџ‹…,џџџ‰…0џџџ‹Mј‹U f‹…0џџџf‰Jщmџџџ_^[‹х]Уѕ$Сд  ёœ6СКЃSKP_Silk_fit_LTPдР € tLTP_coefs_Q16  LTP_coefs_Q14 јџџџtiђ@С(4ф€ч€:ш€Ещ€Къ€ ЁXЁ \Ё мЁ рЁ VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sф.textк@РО}sd.debug$Sм5‡  $LN141Ќ$LN140Џ$LN139В$LN138М$LN137О$LN136Т$LN135Ш$LN134д$LN142L$LN143D.rdata:Y‰5Ч.rdataјѓ$е‰мБ .rdata mP3У .rdata,>уGКB.rdata ^cЊ Zи Ј Ю ц   .rdata –§Я .data hПQјз .rdata xkЅi l … ž ЖЩ и ѓ __allshl .rtc$TMZ Ь.L  ! .rtc$IMZžz]0G .text_йIѕ=vЄёC.debug$Sє:Яq‘V .textр}BИ#u‘ћ.debug$SЌбЛ5сf .textGиьиоп„[Ќ.debug$SфкJаˆv .textGиьио^7єХ.debug$SрТ•‚vƒ .textGСв UdЈЏ.debug$SфПVf .textNBњi0Gв­Е.debug$SрЖЂжœ .textGСв Uмtі€.debug$Sрe=њxЈ .textЗ №ъэ є’.debug$SФѓ_ŽД .rdataљлЗ.Ф.rdata Œы .data!l!;bб!.rdata"ік–!џ"__allshr __allmul .text#С"z4ŠО№.debug$S$#јˆТƒL# .debug$T%\^_SKP_Silk_find_LTP_FIX??_C@_1DK@POBEBELK@?$AAm?$AAa?$AAx?$AA_?$AAa?$AAb?$AAs?$AA_?$AAd?$AA_?$AAQ?$AA1?$AA4?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA?$CI?$AA?5?$AA5?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA1?$AA5?$AA?5?$AA?$CJ?$AA?$AA@??_C@_1BPI@GHMDCLND@?$AA?$CK?$AAL?$AAT?$AAP?$AAr?$AAe?$AAd?$AAC?$AAo?$AAd?$AAG?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA7?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA?$CI?$AA?5?$AAi?$AAn?$AAt?$AA?5?$AA?$CJ?$AA?$CI?$AA?$CI?$AA?$CI?$AA?$CI@_SKP_Silk_lin2log??_C@_1BE@MDHKAJHL@?$AAw?$AA?$FL?$AAk?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_Silk_scale_vector32_Q26_lshift_18??_C@_1CM@MGJMHKNN@?$AA2?$AA6?$AA?5?$AA?9?$AA?5?$AA1?$AA8?$AA?5?$AA?$CL?$AA?5?$AAl?$AAs?$AAh?$AAi?$AAf?$AAt?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1FO@CHLEGFAA@?$AA?$CI?$AA?$CI?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?$CJ?$AAW?$AAg?$AAh?$AAt?$AA_?$AAQ?$AA1?$AA5?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?5?$AA?$DM?$AA?$DM?$AA?5?$AA1?$AA6?$AA?5@_SKP_Silk_residual_energy16_covar_FIX_SKP_Silk_solve_LDL_FIX_SKP_Silk_regularize_correlations_FIX__CrtDbgReportW??_C@_1JG@BIDLHCFP@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_find_LTP_FIX@@9@9??_C@_1BK@DJLGCKLF@?$AAr?$AAr?$AA?$FL?$AA?5?$AAk?$AA?5?$AA?$FN?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_Silk_corrVector_FIX_SKP_Silk_corrMatrix_FIX_SKP_Silk_sum_sqr_shift___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_CLZ32_SKP_Silk_CLZ16_SKP_min_int_SKP_min_32_SKP_max_int_SKP_max_16_SKP_max_32_SKP_DIV32_varQ??_C@_1BE@NOJNLPIL@?$AAQ?$AAr?$AAe?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1IM@NKJIPJPB@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_DIV32_varQ@@9@9@00c28631??_C@_1BC@LJHCOKEE@?$AAb?$AA3?$AA2?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_Silk_fit_LTP/3450 1273638395 100666 10358 ` L ћ-ъK!D.drectveAЄ .debug$SЌх@B.textР‘Q" P`.debug$SдЅy%@B.rdata–ы@@@.data @0Р.rdata… @0@.rtc$TMZ Ё @0@.rtc$IMZЋ Џ @0@.debug$T\Й @B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‹UJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_find_LPC_FIX.obj:<!ovovMicrosoft (R) Optimizing Compilerі=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_find_LPC_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tєXprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9Nt?•F |К/cЌ˜`k„’Џ‹ц+7 @#nŽи,ˆ{ѓDj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_find_lpc_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 1228 - ^ = $23 $T0 1232 - ^ = $24 $T0 1236 - ^ = U‹ььШSVWН8ћџџЙ2ИЬЬЬЬѓЋЁ3Х‰Eќ‹E Ч‹EPhЂюj‹M Q‹UREЌPЌўџџQ•мўџџRшƒФ ƒ}…о‹EPhЂюj‹M Q‹U бт‹E PQ•єўџџR… ўџџPаўџџQшƒФ ‹… ўџџ+…Ќўџџ‰E”x!ƒ}” }‹…аўџџ‹M”гј‹мўџџ+Ш‰мўџџыPƒ}”р%hjЁƒР$PhjшƒФƒјuЬ‹M”їй‹…мўџџгј+…аўџџ‰…мўџџ‹… ўџџ‰…Ќўџџ‹EPєўџџQ‹URшƒФ Ч…ФўџџџџџЧEєы ‹Eєƒш‰Eєƒ}єŒч‹EP‹MєQ‹UR‹EP$ўџџQшƒФ‹EP$ўџџQ•lўџџRшƒФ ‹EбрPjlџџџQшƒФ ‹EP‹M бсQ•ќћџџR…lџџџPlўџџQ‹URшƒФ‹E +EP‹M”MќћџџR…HџџџP`џџџQшƒФ‹E +EP‹M”Mќћџџ‹E  BQ•<џџџR…TџџџPшƒФ‹…Hџџџ+…<џџџ‰E”x!‹…Tџџџ‹M”гј‰…Tџџџ‹…Hџџџїи‰…Иўџџы!‹M”їй‹…`џџџгј‰…`џџџ‹…<џџџїи‰…Иўџџ‹…`џџџ…Tџџџ‰…шўџџ‹…Иўџџ+…Ќўџџ‰E”x%‹…шўџџ‹M”гј;…мўџџ} ЧE ыЧE ы8‹E”їиƒј }'‹M”їй‹…мўџџгј9…шўџџ} ЧE ыЧE ыЧE ƒ} u ‹…шўџџ‰…мўџџ‹…Иўџџ‰…Ќўџџ‹E ‹Mє‰‹…шўџџ‰…Фўџџ‹…Иўџџ‰…”ўџџщўџџ‹E ƒ8u‹EPMЌQ‹URшƒФ R‹ЭPшXZ_^[‹Mќ3ЭшФШ;ьш‹х]УIЌџџџ@lџџџ `џџџTџџџHџџџ<џџџєўџџ@мўџџаўџџЌўџџ ўџџlўџџ $ўџџ@ќћџџ LPC_resNLSF0_Q15a_tmp_Q12res_tmp_nrg_Qres_nrg_Qres_tmp_nrgres_nrga_tmp_Q16rshift1rshift0res_nrg1res_nrg0Sa_Q163W2™2й1р-щ)№%2$w#‘"Ј!г ћ)[$hm6|5‰4˜ЄАМШдрьј(4@ѕ$РШЯ( ёЩ;Р(РŒSKP_Silk_find_LPC_FIXШР … :ќџџџ                 tNLSF_Q15  tinterpIndex prev_NLSFq_Q15 useInterpolatedNLSFs LPC_order x  subfr_length ”џџџtshift Hџџџtrshift0 ЌџџџИa_Q16  ўџџtres_tmp_nrg_Q  џџџtisInterpLower Ќўџџtres_nrg_Q єџџџtk єўџџИa_tmp_Q16 ”ўџџtres_nrg_2nd_Q Фўџџtres_nrg_2nd lўџџєa_tmp_Q12 lџџџєS <џџџtrshift1 Иўџџtres_nrg_interp_Q Tџџџtres_nrg1 шўџџtres_nrg_interp аўџџtres_tmp_nrg $ўџџИNLSF0_Q15 мўџџtres_nrg `џџџtres_nrg0 ќћџџѓLPC_resђШР(6М(€(9€1<€^>€hB€ F€ЏG€БH€ЗI€аK€вL€§M€N€"R€9U€CV€_X€~[€˜^€Џ_€кa€b€0e€?f€Ag€Rh€`i€bj€uk€ƒm€•p€Єq€Іr€Йs€Рt€Тu€Щw€Ыx€еy€ъz€ё{€ѓ|€њ~€ќ€„€ †€‡€!ˆ€)Š€5‹€AŒ€F€N‘€b“€ X \ Ї Ћ Ж К Х Щ д и у ч ђ і      # . 2 = A L P [ _ j n y } ˆ Œ   j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_find_lpc_fix.c(shift > -32;@VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SЌ.textР"C ъ4sg.debug$Sд%ц—а] $LN36D$LN35L$LN34V$LN33`$LN32n$LN31x$LN30„$LN29Œ$LN28–$LN27ž$LN26І$LN25Џ$LN24И$LN23К$LN37œ$LN38” 3 _memset Q i   .rdata– I  .dataᇆe[.rdataР+є‡с љ   6 .rtc$TMZЬ.LMd .rtc$IMZ žz]s Š .debug$T \™_SKP_Silk_find_LPC_FIX_SKP_Silk_sum_sqr_shift_SKP_Silk_LPC_analysis_filter_SKP_Silk_NLSF2A_stable_SKP_Silk_interpolate_SKP_Silk_A2NLSF__CrtDbgReportW??_C@_1JG@NMHMCPDF@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_find_LPC_FIX@@9@9??_C@_1BI@KIBFEKBP@?$AAs?$AAh?$AAi?$AAf?$AAt?$AA?5?$AA?$DO?$AA?5?$AA?9?$AA3?$AA2?$AA?$AA@_SKP_Silk_burg_modified___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/3489 1273638395 100666 10933 ` L ћ-ъK%7.drectveA| .debug$S`Н @B.text{•# P`.debug$Spnо!@B.rtc$TMZˆ"Œ"@0@.rtc$IMZ–"š"@0@.textxЄ" P`.debug$Sp#Œ$@B.debug$T\О$@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёVJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_encode_pulses.obj:<!ovovMicrosoft (R) Optimizing Compilerї=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_encode_pulses.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё›* NSKP_Silk_pulses_per_block_CDF. PSKP_Silk_pulses_per_block_BITS_Q6% SSKP_Silk_rate_levels_CDF) VSKP_Silk_rate_levels_BITS_Q6& GSKP_Silk_max_pulses_table KSKP_Silk_lsb_CDF"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_t!ЧSKP_Silk_range_coder_state!ЧSKP_Silk_range_coder_stateєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlїџtкQ5CŒЭiРxђЏТC’Џ‹ц+7 @#nŽи,ˆ{Ž(yFiдz<G;1=1ѓЗj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_encode_pulses.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 2608 - ^ = $23 $T0 2612 - ^ = $24 $T0 2616 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 220 - ^ = $23 $T0 224 - ^ = $24 $T0 228 - ^ = Ќ А и м   / 3 Z ^ ‚ † U‹ьь, SVWНдѕџџЙ‹ИЬЬЬЬѓЋЁ3Х‰EќЧE j j…ЬіџџPшƒФ ‹E™ƒтТСј‰EаЧEєы ‹EєƒР‰Eє‹Eє;E‹Eє‹Mƒ<~‹Uє‹E‹ ‰дѕџџы‹Uє‹E‹ їй‰дѕџџ‹Uє‹…дѕџџ‰„•єїџџ‹Eє‹Mƒ|~‹Uє‹E‹L‰дѕџџы‹Uє‹E‹Lїй‰дѕџџ‹Uє‹…дѕџџ‰„•јїџџ‹Eє‹Mƒ|~‹Uє‹E‹L‰дѕџџы‹Uє‹E‹Lїй‰дѕџџ‹Uє‹…дѕџџ‰„•ќїџџ‹Eє‹Mƒ| ~‹Uє‹E‹L ‰дѕџџы‹Uє‹E‹L їй‰дѕџџ‹Uє‹…дѕџџ‰„•јџџщхўџџ…єїџџ‰…РіџџЧEєы ‹EєƒР‰Eє‹Eє;Eа#‹EєЧ„…єіџџИ…Р„єjЁP‹РіџџQ•ЬіџџRшƒФ‰EЌjЁPЬіџџQ•ЬіџџRшƒФEЌ‰EЌjЁPЬіџџQ•ЬіџџRшƒФEЌ‰EЌ‹…Ьіџџ…аіџџ‹Mє‰„tїџџ‹Eє‹Œ…tїџџ; ~ ‹EЌƒР‰EЌƒ}ЌtM‹Eє‹Œ…єіџџƒС‹Uє‰Œ•єіџџЧEшы ‹EшƒР‰Eшƒ}ш}‹Eш‹Ріџџ‹бњ‹Eш‹Ріџџ‰ыеыыщџўџџ‹…РіџџƒР@‰…РіџџщШўџџЧEˆџџџЧEшы ‹EшƒР‰Eшƒ}ш Ј‹EшkР(‰…œіџџ‹E kР‹MшП”H‰•|џџџЧEєы ‹EєƒР‰Eє‹Eє;Eа}G‹EєƒМ…єіџџ~‹…œіџџПH&|џџџ‰|џџџы ‹Eє‹Œ…tїџџ‹•œіџџПJ…|џџџ‰…|џџџыЈ‹…|џџџ;Eˆ}‹…|џџџ‰Eˆ‹Eш‰E щEџџџ‹E kРP‹M Q‹URшƒФ ‹E kР*‰…ЈіџџЧEєы ‹EєƒР‰Eє‹Eє;Eаœ‹EєƒМ…єіџџu ‹…ЈіџџP‹Mє‹”tїџџR‹EPшƒФ ыj‹…ЈіџџPj‹MQшƒФ ЧEшы ‹EшƒР‰Eш‹Eє‹Œ…єіџџƒщ9Mш}hzj‹EPшƒФ ыаhz‹Eє‹Œ…tїџџQ‹URшƒФ щOџџџЧEєы ‹EєƒР‰Eє‹Eє;Eа})‹EєƒМ…tїџџ~‹EєСрŒ…єїџџQ‹URшƒФыЦЧEєы ‹EєƒР‰Eє‹Eє;Eаѓ‹EєƒМ…єіџџŽн‹EєСр‹M‰•Діџџ‹Eє‹Œ…єіџџƒщ‰MИЧEшы ‹EшƒР‰Eшƒ}шŸ‹Eш‹Діџџƒ<~‹Uш‹…Діџџ‹ ‰дѕџџы‹Uш‹…Діџџ‹ їй‰дѕџџ‹•дѕџџ‰U”‹EИ‰Eмы ‹Eмƒш‰Eмƒ}м~%‹E”‹Mмгјƒр‰EФh‹EФP‹MQшƒФ ыЬ‹E”ƒр‰EФh‹EФP‹MQшƒФ щNџџџщјўџџ‹E P‹MQ‹U R‹EP‹MQ‹URшƒФR‹ЭPшXZ_^[‹Mќ3ЭшФ, ;ьш‹х]Уєїџџ€tїџџxєіџџxЬіџџ pulses_combnRshiftssum_pulsesabs_pulses;Нб3ођ33Eь”ЂАќ?JThЎŠ—ЊЗсюѓ"! (4@Lѕ${, а( ёЕ<{({ИSKP_Silk_encode_pulses, Рl … :ќџџџ       СpsRC  sigtype QuantOffsetType q frame_length мџџџtj Фџџџtbit Ьіџџбpulses_comb œіџџnBits_ptr шџџџtk єїџџЎabs_pulses Ќџџџtscale_down  џџџtRateLevelIndex Ріџџtabs_pulses_ptr Діџџpulses_ptr tїџџЖsum_pulses |џџџtsumBits_Q6 Јіџџxcdf_ptr єџџџti ИџџџtnLS аџџџtiter ˆџџџtminSumBits_Q6 єіџџЖnRshifts ”џџџtabs_qђx{Ll>€(?€/J€BP€QS€oT€­U€юV€/W€pX€u[€\€Ÿ]€­_€Кa€лd€џg€#j€9k€Kl€To€Zq€qr€‰s€Ѓt€Ѕu€Їw€Љy€Ўz€Н{€Т€Щ‚€хƒ€і„€ …€'†€4‡€Jˆ€L‰€l‹€nŒ€y€‚Ž€ˆ€‘€Љ–€К—€и˜€х™€š€›€œ€>€Qž€SŸ€oЁ€tІ€ŽЇ€›Ј€ЕЊ€ЗЏ€еА€цБ€јВ€Г€$Д€dЕ€{Ж€‰З€žИ€ Й€ЉК€ОЛ€УН€ШТ€шУ€ X \ Ј Ќ З Л Ц Ъ е й ф ш ѓ ї ј ќ ',U‹ььиSVWН(џџџЙ6ИЬЬЬЬѓЋЧEјы ‹EјƒР‰Eј‹Eј;E}7‹Eјбр‹Mјбс‹U ‹‚‹U DЉEь‹Eь;E~Иы‹Eј‹M‹Uь‰ыИ3Р_^[‹х]Уѕ$xиE ёЮ7xqАcombine_and_checkиР € tpulses_comb  pulses_in tmax_pulses tlen јџџџtk ьџџџtsumђ`x T(€+€8,€R-€Z.€a0€m1€o3€q4€ 3X3 \3 3 3 VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S` ЏЊ$.text{#ˆ!ЄUt§.debug$SpŸEј› $LN61P$LN60\$LN59e$LN58p$LN62 $LN63 3E ]| ”ЎЬя_memset   , G .rtc$TMZЬ.L^u .rtc$IMZžz]„› .textx7E$œч4kё.debug$SpЬкРкЊ .debug$T \Н_SKP_Silk_encode_pulses_SKP_Silk_encode_signs_SKP_Silk_lsb_CDF_SKP_Silk_shell_encoder_SKP_Silk_pulses_per_block_CDF_SKP_Silk_range_encoder_SKP_Silk_rate_levels_CDF_SKP_Silk_rate_levels_BITS_Q6_SKP_Silk_pulses_per_block_BITS_Q6_SKP_Silk_max_pulses_table___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_combine_and_check /3529 1273638395 100666 11645 ` L ћ-ъKn$@.drectveAЄ .debug$SрхХ&@B.textAH. P`.debug$Sdx"@B.rdataІЊ"@@@.dataP#@0Р.rdataЂT#@@@.rtc$TMZі#њ#@0@.rtc$IMZ$$@0@.debug$T\$@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё›]J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_encode_parameters_v4.obj:<!ovovMicrosoft (R) Optimizing Compilerў=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_encode_parameters_v4.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё{% ISKP_Silk_type_offset_CDF+ JSKP_Silk_type_offset_joint_CDF šSKP_Silk_gain_CDF$ ˜SKP_Silk_delta_gain_CDF& `SKP_Silk_pitch_lag_NB_CDF& [SKP_Silk_pitch_lag_MB_CDF& ]SKP_Silk_pitch_lag_WB_CDF' ZSKP_Silk_pitch_lag_SWB_CDF' \SKP_Silk_pitch_contour_CDF* ^SKP_Silk_pitch_contour_NB_CDF% _SKP_Silk_pitch_delta_CDF' bSKP_Silk_LTP_per_index_CDF' SKP_Silk_LTP_gain_CDF_ptrs" bSKP_Silk_LTPscale_CDF! KSKP_Silk_vadflag_CDF) GSKP_Silk_SamplingRates_table' ISKP_Silk_SamplingRates_CDF3 cSKP_Silk_NLSF_interpolation_factor_CDF ISKP_Silk_Seed_CDF"@SA_Method"SA_ParameterTSKP_SILK_LBRR_structKSKP_Silk_encoder_stateRSKP_Silk_LP_state+SKP_Silk_VAD_state!wchar_t‹SKP_Silk_encoder_control"SA_AttrTargetsSKP_Silk_NLSF_CBS usize_t!ЧSKP_Silk_range_coder_stateTSKP_SILK_LBRR_struct+SKP_Silk_VAD_state!ЧSKP_Silk_range_coder_state PSKP_Silk_detect_SWB_stateRSKP_Silk_LP_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structKSKP_Silk_encoder_state‹SKP_Silk_encoder_control PSKP_Silk_detect_SWB_state|SKP_Silk_NLSF_CB_structєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlї]t Уѕ•ц0` \*…ЭJ’Џ‹ц+7 @#nŽи,ˆ{•(yFiдz<G;1=1ѓIj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_encode_parameters_v4.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 268 - ^ = $23 $T0 272 - ^ = $24 $T0 276 - ^ = И, М, п+ у+ * * ,) 0) R V z ~ Ђ І Ъ Ю ѓ ї   H L o s ˜ œ С Х х- щ-  0 0 3 / 7 / \  `  ‘  •  U‹ььSVWНјўџџЙBИЬЬЬЬѓЋ‹EƒИи u_‹EPшƒФ‹EЧ€м ЧEјы ‹EјƒР‰Eјƒ}ј}‹Eј‹M‹…;‘Фuыыиh‹EјP‹MQшƒФ h‹E‹ˆјQ‹URшƒФ ‹E ‹Hh‹U ‹Bd H‰Mр‹EƒИи uh‹EрP‹MQшƒФ ы#‹E‹ˆИkЩ СQ‹UрR‹EPшƒФ ‹E‹Mр‰ˆИ‹EƒИи u(‹E ‹HhiЩ‚СQ‹U ‹BHP‹MQшƒФ ыh‹E ‹HHQ‹URшƒФ ЧEјы ‹EјƒР‰Eјƒ}ј}h‹Eј‹M ‹THR‹EPшƒФ ыг‹E ‹Hh‹U‹„Šф ‰EМ‹EМ‹Q‹UМ‹BP‹M ƒСQ‹URшƒФ‹EƒИєt/‹M ƒyDt&hj‹ƒТERhjшƒФƒјuЬh‹E ‹HDQ‹URшƒФ ‹E ƒxh…ОЧEд‹EƒИи ~`‹EƒИДuT‹E ‹M‹+‘Р‰UШƒ}Ш ~ ЧEШыƒ}Ші} ЧEШы‹EШƒР ‰EШЧEдh‹EШP‹MQшƒФ ƒ}䄆‹EƒИФuh‹E ‹Q‹URшƒФ ыa‹EƒИФ uh‹E ‹Q‹URшƒФ ы<‹EƒИФuh‹E ‹Q‹URшƒФ ыh‹E ‹Q‹URшƒФ ‹E‹M ‹‰Р‹EƒИФuh‹E ‹HQ‹URшƒФ ыh‹E ‹HQ‹URшƒФ h‹E ‹HQ‹URшƒФ ЧEьы ‹EьƒР‰Eьƒ}ь}'‹E ‹H‹R‹Eь‹M ‹T R‹EPшƒФ ыЪh‹E ‹H\Q‹URшƒФ h‹E ‹HXQ‹URшƒФ _^[Ф;ьш‹х]У/1d0u/‚.Š-.У,а.ч+ѕ."*3.=)M.m).Ж(г'л#фыљ .|‰.ЇЖ.Ьл.ё. .;K.Ue.m}.ЅК.Фд.мь.џ2ѕ$ з ё+CѓПSKP_Silk_encode_parameters_v4РH € =psEncC  \psEncCtrlC СpsRC ьџџџtk# дџџџtencode_absolute_lagIndex Мџџџ?psNLSF_CB јџџџti Шџџџtdelta_lagIndex рџџџttypeOffsetђј<ь&€0€*3€64€C7€[8€p9€r;€t<€‰B€ЄG€ЖH€ТJ€зK€йM€ќO€U€W€:X€<Z€T^€l_€ˆ`€Šg€h€Нk€јl€o€v€$w€<y€Mz€S{€\|€b}€i~€k€t€€{‚€„€š†€І‡€Пˆ€Ы‰€фŠ€№‹€Œ€ € €.”€:–€R—€T™€lЁ€„Є€œЅ€СІ€УЋ€лВ€ѓГ€ X \ l p j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_encode_parameters_v4.c&psEncC->useInterpolatedNLSFs == 1 || psEncCtrlC->NLSFInterpCoef_Q2 == ( 1 << 2 )7<VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sр&,bOR.text.в!>..debug$Sd‰Ккw #6Mi…ЁРмї-Go .rdataІ('TI.dataт№Y…:.rdataЂЩа$;n/ Mfy™ГЩ с§ 4 .rtc$TMZЬ.LCZ .rtc$IMZ žz]i € .debug$T \_SKP_Silk_encode_parameters_v4_SKP_Silk_Seed_CDF_SKP_Silk_LTPscale_CDF_SKP_Silk_LTP_gain_CDF_ptrs_SKP_Silk_LTP_per_index_CDF_SKP_Silk_pitch_contour_CDF_SKP_Silk_pitch_contour_NB_CDF_SKP_Silk_pitch_lag_SWB_CDF_SKP_Silk_pitch_lag_WB_CDF_SKP_Silk_pitch_lag_MB_CDF_SKP_Silk_pitch_lag_NB_CDF_SKP_Silk_pitch_delta_CDF_SKP_Silk_NLSF_interpolation_factor_CDF__CrtDbgReportW??_C@_1KG@LPICFBJE@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_encode_parameters_v4@@9@9??_C@_1KC@DJLAKPOE@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AA?9?$AA?$DO?$AAu?$AAs?$AAe?$AAI?$AAn?$AAt?$AAe?$AAr?$AAp?$AAo?$AAl?$AAa?$AAt?$AAe?$AAd?$AAN?$AAL?$AAS?$AAF?$AAs?$AA?5?$AA?$DN?$AA?$DN?$AA?5@_SKP_Silk_range_encoder_multi_SKP_Silk_delta_gain_CDF_SKP_Silk_gain_CDF_SKP_Silk_type_offset_joint_CDF_SKP_Silk_type_offset_CDF_SKP_Silk_vadflag_CDF_SKP_Silk_range_encoder_SKP_Silk_SamplingRates_CDF_SKP_Silk_SamplingRates_table_SKP_Silk_range_enc_init__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase /3576 1273638395 100666 11306 ` L ћ-ъK##@.drectveAЄ .debug$SАх•$@B.textЄ§Ё- P`.debug$Sаc3!@B.rdata e!@@@.data"@0Р.rdataЂ "@@@.rtc$TMZЋ"Џ"@0@.rtc$IMZЙ"Н"@0@.debug$T\Ч"@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё•ZJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_encode_parameters.obj:<!ovovMicrosoft (R) Optimizing Compilerћ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_encode_parameters.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёT% ISKP_Silk_type_offset_CDF+ JSKP_Silk_type_offset_joint_CDF šSKP_Silk_gain_CDF$ ˜SKP_Silk_delta_gain_CDF& `SKP_Silk_pitch_lag_NB_CDF& [SKP_Silk_pitch_lag_MB_CDF& ]SKP_Silk_pitch_lag_WB_CDF' ZSKP_Silk_pitch_lag_SWB_CDF' \SKP_Silk_pitch_contour_CDF* ^SKP_Silk_pitch_contour_NB_CDF' bSKP_Silk_LTP_per_index_CDF' SKP_Silk_LTP_gain_CDF_ptrs" bSKP_Silk_LTPscale_CDF! KSKP_Silk_vadflag_CDF) GSKP_Silk_SamplingRates_table' ISKP_Silk_SamplingRates_CDF3 cSKP_Silk_NLSF_interpolation_factor_CDF ISKP_Silk_Seed_CDF"@SA_Method"SA_ParameterTSKP_SILK_LBRR_structKSKP_Silk_encoder_stateRSKP_Silk_LP_state+SKP_Silk_VAD_state!wchar_t‹SKP_Silk_encoder_control"SA_AttrTargetsSKP_Silk_NLSF_CBS usize_t!ЧSKP_Silk_range_coder_stateTSKP_SILK_LBRR_struct+SKP_Silk_VAD_state!ЧSKP_Silk_range_coder_state PSKP_Silk_detect_SWB_stateRSKP_Silk_LP_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structKSKP_Silk_encoder_state‹SKP_Silk_encoder_control PSKP_Silk_detect_SWB_state|SKP_Silk_NLSF_CB_structєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlїD•Вtжydchtћ(•;ЧG’Џ‹ц+7 @#nŽи,ˆ{’(yFiдz<G;1=1ѓFj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_encode_parameters.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 244 - ^ = $23 $T0 248 - ^ = $24 $T0 252 - ^ = Д- И- л, п, + + (* ,* N R v z ž Ђ Ц Ъ я ѓ   D H m q – š К О н0 с0  / / 1  5  f  j  U‹ьь№SVWНџџџЙ<ИЬЬЬЬѓЋ‹EƒИи u_‹EPшƒФ‹EЧ€м ЧEјы ‹EјƒР‰Eјƒ}ј}‹Eј‹M‹…;‘Фuыыиh‹EјP‹MQшƒФ ‹E ‹Hh‹U ‹Bd H‰Mр‹EƒИи uh‹EрP‹MQшƒФ ы#‹E‹ˆИkЩ СQ‹UрR‹EPшƒФ ‹E‹Mр‰ˆИ‹EƒИи u(‹E ‹HhiЩ‚СQ‹U ‹BHP‹MQшƒФ ыh‹E ‹HHQ‹URшƒФ ЧEјы ‹EјƒР‰Eјƒ}ј}h‹Eј‹M ‹THR‹EPшƒФ ыг‹E ‹Hh‹U‹„Šф ‰Eд‹Eд‹Q‹Uд‹BP‹M ƒСQ‹URшƒФ‹EƒИєt/‹M ƒyDt&hj‹ƒТ?RhjшƒФƒјuЬh‹E ‹HDQ‹URшƒФ ‹E ƒxh…3‹EƒИФuh‹E ‹Q‹URшƒФ ыa‹EƒИФ uh‹E ‹Q‹URшƒФ ы<‹EƒИФuh‹E ‹Q‹URшƒФ ыh‹E ‹Q‹URшƒФ ‹EƒИФuh‹E ‹HQ‹URшƒФ ыh‹E ‹HQ‹URшƒФ h‹E ‹HQ‹URшƒФ ЧEьы ‹EьƒР‰Eьƒ}ь}'‹E ‹H‹R‹Eь‹M ‹T R‹EPшƒФ ыЪh‹E ‹H\Q‹URшƒФ h‹E ‹HXQ‹URшƒФ ‹E‹ˆЬQ‹UR‹E ‹HdQ‹U ‹BhP‹MQшƒФh‹E‹ˆјQ‹URшƒФ _^[Ф№;ьш‹х]У/1d0u/‚.Ј-Е.Ь,к.+."*2.R*f.›)И(Р$Щ аою..4C.Yh.r.•Ѕ.ЏП.Чз.џ...6F.nv‰.œ2ѕ$Є№д ёі@ЄТSKP_Silk_encode_parameters№Р0 € =psEncC  \psEncCtrlC СpsRC q ьџџџtk дџџџ?psNLSF_CB јџџџti рџџџttypeOffsetђ˜Є0Œ'€0€*3€64€C7€[8€p9€r;€t<€‰B€›C€ЇE€МF€ОH€сJ€эP€љR€S€!U€9Y€QZ€m[€ob€‚c€Ђf€нg€ѕj€q€r€'s€3t€Lu€Xv€ow€qx€ˆ}€”€Ќ€€Ў‚€ЦŠ€о€іŽ€€”€5›€M €uІ€Ї€ X \ 8 < j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_encode_parameters.c'psEncC->useInterpolatedNLSFs == 1 || psEncCtrlC->NLSFInterpCoef_Q2 == ( 1 << 2 )7<VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SА$<ыDц.textЄ-,№їVlЪ.debug$SађЌB9  6 Nax”АЬы"=X€ .rdata 6GЙN.data‡—х=K.rdataЂЩа$;|= [t‡ЇС йѕ , .rtc$TMZЬ.L;R .rtc$IMZ žz]a x .debug$T \‡_SKP_Silk_encode_parameters_SKP_Silk_vadflag_CDF_SKP_Silk_encode_pulses_SKP_Silk_Seed_CDF_SKP_Silk_LTPscale_CDF_SKP_Silk_LTP_gain_CDF_ptrs_SKP_Silk_LTP_per_index_CDF_SKP_Silk_pitch_contour_CDF_SKP_Silk_pitch_contour_NB_CDF_SKP_Silk_pitch_lag_SWB_CDF_SKP_Silk_pitch_lag_WB_CDF_SKP_Silk_pitch_lag_MB_CDF_SKP_Silk_pitch_lag_NB_CDF_SKP_Silk_NLSF_interpolation_factor_CDF__CrtDbgReportW??_C@_1KA@BLEBOLKK@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_encode_parameters@@9@9??_C@_1KC@DJLAKPOE@?$AAp?$AAs?$AAE?$AAn?$AAc?$AAC?$AA?9?$AA?$DO?$AAu?$AAs?$AAe?$AAI?$AAn?$AAt?$AAe?$AAr?$AAp?$AAo?$AAl?$AAa?$AAt?$AAe?$AAd?$AAN?$AAL?$AAS?$AAF?$AAs?$AA?5?$AA?$DN?$AA?$DN?$AA?5@_SKP_Silk_range_encoder_multi_SKP_Silk_delta_gain_CDF_SKP_Silk_gain_CDF_SKP_Silk_type_offset_joint_CDF_SKP_Silk_type_offset_CDF_SKP_Silk_range_encoder_SKP_Silk_SamplingRates_CDF_SKP_Silk_SamplingRates_table_SKP_Silk_range_enc_init__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/3620 1273638395 100666 19150 ` Lћ-ъK›=h.drectveAl .debug$SD­ё@B.text† Ÿ#5 P`.debug$SБ%Й+@B.rdata>Ч,@0@.rdataž-@@@.dataЃ-@0Р.rdataЇ-@@@.rtc$TMZН0С0@0@.rtc$IMZЫ0Я0@0@.textжй0Џ6% P`.debug$Sl!8<@B.data7=@0Р.rdata;=@0@.debug$T\?=@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё“YJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_encode_frame_FIX.obj:<!ovovMicrosoft (R) Optimizing Compilerњ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_encode_frame_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёu* ISKP_Silk_FrameTermination_CDF- cSKP_Silk_FrameTermination_v4_CDF"@SA_Method"SA_ParameterTSKP_SILK_LBRR_structKSKP_Silk_encoder_stateRSKP_Silk_LP_state#mSKP_Silk_encoder_control_FIX+SKP_Silk_VAD_state!wchar_t!„SKP_Silk_predict_state_FIX!cSKP_Silk_encoder_state_FIXSKP_Silk_nsq_state‹SKP_Silk_encoder_control#‡SKP_Silk_prefilter_state_FIX"SA_AttrTargetsSKP_Silk_NLSF_CBS‰SKP_Silk_shape_state_FIX usize_t!ЧSKP_Silk_range_coder_stateSKP_Silk_nsq_stateTSKP_SILK_LBRR_struct+SKP_Silk_VAD_state!ЧSKP_Silk_range_coder_state PSKP_Silk_detect_SWB_stateRSKP_Silk_LP_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structKSKP_Silk_encoder_state‹SKP_Silk_encoder_control‰SKP_Silk_shape_state_FIX#‡SKP_Silk_prefilter_state_FIX!„SKP_Silk_predict_state_FIX!cSKP_Silk_encoder_state_FIX#mSKP_Silk_encoder_control_FIX PSKP_Silk_detect_SWB_state|SKP_Silk_NLSF_CB_structєXprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9жW]ІЖтN.%ЈрYцˆ’Џ‹ц+7 @#nŽи,ˆ{ѓКj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_encode_frame_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 6092 - ^ = $23 $T0 6096 - ^ = $24 $T0 6100 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 340 - ^ = $23 $T0 344 - ^ = $24 $T0 348 - ^ = А1 Д1 м3 р3 U‹ьИШшSVWН8шџџЙђИЬЬЬЬѓЋЁ3Х‰EќЧ…(§џџ‹E‹ˆшƒс‰Є§џџ‹U‹‚шƒР‹M‰ш‹E‹ˆЬ‹U„J ›‰…§џџ‹E‹ˆЬ”Mhэџџ‰•§џџ‹E‹ˆЬQ‹UREдPMФQ•DэџџR‹E(ЄP‹MС@QшƒФ‰…(§џџ‹EP€ѕџџQ•L§џџR‹EPшƒФ‹E‹ˆЬQ•€ѕџџR‹E‹ˆи‹•§џџJP‹MС0QшƒФ‹…§џџPhэџџQ•L§џџR‹EPшƒФ‹…§џџP‹§џџQ•L§џџR‹EPшƒФ‹…§џџPHљџџQ•L§џџR‹EPшƒФ…hэџџPL§џџQ‹URшƒФ …L§џџP‹MQшƒФ‹E‹ˆи ‹U‹…Д§џџ‰„Š$a‹E‹ˆи ‹U‹…А§џџ‰„Š8aИf‰…$щџџ…HљџџP$щџџQ•0щџџR…L§џџP‹MQшƒФ‹є‹…LўџџP‹MЈQ•Ь§џџR…XџџџPMˆQU˜R…иўџџP$ўџџQ•ф§џџR‹…§џџP‹M‹U‹и Џ‚Ь‹M”$R…HљџџP‹MС jQ•L§џџR‹EP‹M‹‘˜›џвƒФ<;єш‹EƒИ(Є}c‹EЧ€ј‹E‹ˆьƒС‹U‰Šь‹EƒИь~ ‹EЧ€є‹EƒИь~‹EЧ€ь‹EЧ€єы'‹EЧ€ь‹EЧ€є‹EЧ€ј‹EƒИи u‹EPшƒФ‹EЧ€м ‹EƒИPau#‹EPL§џџQ‹URшƒФ Ч…8эџџы?‹E‹M‹и Џ‘Ь‹EŒ$Q‹UR…L§џџP‹MQшƒФЧ…8эџџ‹E‹ˆЬ‹UŠибсQ‹E‹ˆЬ‹U„J ›P‹MС ›QшƒФ ‹E‹Д§џџ‰ˆД‹E‹Ф§џџ‰ˆМ‹EЧ€ ‹Eƒxt‹EЧ€и ы‹E‹ˆи ƒС‹U‰Šи ‹E‹ˆи kЩ‹U;ŠрŒд‹E‹ˆќƒСƒс‰\эџџЧ…Pэџџ‹…\эџџiР‹MƒМ№u Ч…Pэџџ‹E‹ˆќiЩ‹UƒМ №uЧ…Pэџџ‹E‹ˆќ‰\эџџ‹…8эџџP‹PэџџQ‹URшƒФ ‹EƒИPa…Ч…@§џџы‹…@§џџƒР‰…@§џџ‹E‹@§џџ;ˆи }U‹E‹ˆЬQ‹U‹…@§џџЏ‚Ь‹M”$R‹…@§џџ‹M‹”8aR‹…@§џџ‹M‹”$aR‹EPшƒФы‹…4§џџP‹MQшƒФ‹EП;4§џџŒ_‹EPшƒФ‹…4§џџP‹MƒСQ‹U RшƒФ ƒНPэџџŽˆ‹EП‹•\эџџiв‹E‹Е4§џџДь;Ю|b‹…\эџџiР‹M‹”ьR‹…\эџџiР‹M”ь R‹E …4§џџPшƒФ ‹…\эџџiР‹M‹•4§џџ”ь‰•4§џџ‹Ef‹4§џџf‰П…$щџџP0щџџQ‹U‹‚ќiР‹M”ь RшƒФ ‹E‹ˆќiЩП•$щџџ‹E‰”ь‹E‹ˆќiЩ‹U‹…Ш§џџ‰„ №‹E‹ˆќƒСƒс‹U‰Šќ‹EЧ€и ы)3Р‹Mf‰Ч…4§џџ‹EЧ€и Ч…(§џџќџџџщ„3Р‹Mf‰Ч…Pэџџ‹…8эџџP‹PэџџQ‹URшƒФ …4§џџP‹MQшƒФ‹EƒИPau9‹E‹ˆи ƒщ‹UЏŠЬ‹EŒˆ$Q‹URшƒФ…4§џџ‰…4§џџ‹Eƒxt Ч…(§џџїџџџ‹…4§џџ™‹Ш‹ђ‹U‹‚м ™+Шђjh@VQш‰…Xшџџ‰•\шџџƒН\шџџ|' НXшџџџџџvЧ…PшџџџџџЧ…TшџџщЋ‹…4§џџ™‹Ш‹ђ‹U‹‚м ™+Шђjh@VQш‰…Hшџџ‰•LшџџƒНLшџџџ$| НHшџџ€sЧ…@шџџ€Ч…Dшџџџџџџы3‹…4§џџ™‹Ш‹ђ‹U‹‚м ™+Шђjh@VQш‰…@шџџ‰•Dшџџ‹…@шџџ‰…Pшџџ‹Dшџџ‰Tшџџ‹…4§џџ™‹Ш‹ђ‹U‹‚м ™+Шђjh@VQш‰…8шџџ‰•<шџџ‹…8шџџ;…Pшџџu‹<шџџ;Tшџџt)hj‹ТьRhjшƒФƒјuЬ‹EƒИм)hj‹ СэQhjшƒФƒјuЬ‹E‹4§џџ+ˆм iЩ@‹u‹С™їОм‹U‚$Є‹M‰$Є‹E‹ˆ$Єƒщ‹U‰Š$Є‹EƒИ$Єd~ Ч…\шџџdы3‹MƒЙ$Є} Ч…Xшџџы‹U‹‚$Є‰…Xшџџ‹Xшџџ‰\шџџ‹U‹…\шџџ‰‚$Є‹E‹4§џџ‰ˆм ‹EИ(ЄГ~A‹E‹ˆƒСс€t Ч…\шџџџџџы‹U‹‚ƒР‰…\шџџ‹M‹•\шџџ‰‘‹…(§џџR‹ЭPшXZ_^[‹Mќ3ЭшФШ;ьш‹х]УIL§џџЌ4§џџHљџџР€ѕџџРhэџџDэџџ0щџџ$щџџnBytesLBRRLBRRpayloadSNR_dB_Q7res_pitchpIn_HPxfwnBytessEncCtrl A#>Н=с<;8:Y9z8”7Ї6 TžCI5y4†3К2Ч1џ0/’.Ї-Х,п+R+В+r/…-О*BjBЪB BB )J %V !] w  %‹ !’ Ќ Б @Р ?Э Cм ш є    $ 0 < ѕ$† Шг, ёЇ?† ,† кSKP_Silk_encode_frame_FIXШР … :ќџџџ           VpsEnc  pCode pnBytesOut pIn Hљџџxfw hэџџзres_pitch Pэџџtframe_terminator (§џџtret $щџџnBytesLBRR §џџx_frame DэџџtSNR_dB_Q7 L§џџmsEncCtrl @§џџti 4§џџtnBytes \эџџtLBRR_idx 8эџџxFrameTermination_CDF 0щџџХLBRRpayload §џџres_pitch_frame €ѕџџpIn_HP9–`ђ † (a'€,)€66€]<€v=€ŒD€ЪK€шR€Z€?_€`d€j€›o€Ўq€Чr€рw€ьx€€Ђ†€Ў‡€Лˆ€а‰€мŠ€щŒ€ѕ€Ž€€‘€’€+“€8™€Dš€P›€]Ё€iЂ€€Ѓ€ŠЄ€ŒІ€СЇ€ЫЎ€Б€В€$Г€1Е€:З€GИ€IЙ€^П€yС€ŽФ€˜Х€БЦ€ЛШ€зЩ€сЪ€№Э€ Я€б€Fг€™д€›з€Ўк€Рл€Ьм€цп€у€Yф€{ч€ˆы€Йь€йю€јя€ђ€ѓ€ѕ€'і€1ї€>ј€Hњ€Mќ€Uџ€_€y€Œ€˜€б €к€ф€j €Ÿ €в €ч €A €P €_ €  €І € X \ Ћ Џ К О Щ Э и м ч ы і њ     # ' 2 6 Я г ш ь psEnc->sCmn.TargetRate_bps > 0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_encode_frame_fix.c'( 8 * 1000 * ( (long long)nBytes - (long long)psEnc->sCmn.nBytesInPayloadBuf ) ) == ((8 * 1000 * ( (long long)nBytes - (long long)psEnc->sCmn.nBytesInPayloadBuf )) > 0x7FFFFFFF ? 0x7FFFFFFF : ((8 * 1000 * ( (long long)nBytes - (long long)psEnc->sCmn.nBytesInPayloadBuf )) < ((int)0x80000000) ? ((int)0x80000000) : (8 * 1000 * ( (long long)nBytes - (long long)psEnc->sCmn.nBytesInPayloadBuf ))))HMU‹ььPSVWНАўџџЙTИЬЬЬЬѓЋЁ3Х‰EќЧ…|џџџ‹E P‹MQшƒФ‹EƒИ„j‹E ƒРHPMмQшƒФ j‹E €PM QшƒФ ‹E‹ˆИ‰M”‹E ‹H\‰Mˆ‹EƒИФu Ч…|џџџМ4ыr‹EƒИФ u Ч…|џџџŒ<ыZ‹EƒИФu Ч…|џџџ\DыB‹EƒИФu Ч…|џџџ,Lы*3Рu&hj‹ ƒСQhjшƒФƒјuЬ‹EƒИьŽ“‹E‹ˆм;|џџџŽ~‹EƒИи …•hМ‹E jP‹MСм‚QшƒФ ‹E‹M‹‘\a‰А‹E ‹HH‹UŠ‹E ‰HH‹E ƒxH?~ Ч…Дўџџ?ы-‹M ƒyH} Ч…Аўџџы ‹U ‹BH‰…Аўџџ‹Аўџџ‰Дўџџ‹U ‹…Дўџџ‰BH‹E‹ˆи Q‹UТАR‹E ƒРHP‹M С€QшƒФ‹є‹E ‹ˆQ‹U ‹‚\P‹M С€Q‹U Т R‹E <P‹M СLQ‹U ТŒR‹E иP‹M С˜Q‹U ‹BDP‹M‹U‹и Џ‚Ь‹M”Є;R‹EP‹MСм‚Q‹U R‹EP‹M‹‘˜›џвƒФ<;єшы?‹E‹ˆЬСсQj‹U‹E‹Šи ЏˆЬ‹U„ŠЄ;PшƒФ ‹E Ч@\‹EƒИи u‹EPшƒФ‹EЧ€м ‹EƒИPau‹EP‹M Q‹URшƒФ ы8‹E‹M‹и Џ‘Ь‹EŒЄ;Q‹UТR‹E P‹MQшƒФ‹EƒИ$t ЧEИы‹E‹ˆи ƒС‰MИПEИkР‹M;рŒ%ЧEаh‹EаP‹MСQшƒФ ‹EƒИPaukЧEєы ‹EєƒР‰Eє‹Eє;EИ}Q‹E‹ˆЬQ‹U‹EєЏ‚Ь‹M”Є;R‹Eє‹M‹”8aR‹Eє‹M‹”$aR‹EPшƒФыžEФP‹MСQшƒФ‹EП;MФ|7‹EPшƒФ‹EФP‹MС(Q‹URшƒФ ‹Ef‹MФf‰ы23Р‹Mf‰3Рu&hj‹ ƒСsQhjшƒФƒјuЬы*3Р‹Mf‰ЧEаh‹EаP‹MСQшƒФ jEмP‹M ƒСHQшƒФ jE P‹M С€QшƒФ ‹E ‹Mˆ‰H\‹E‹M”‰ˆИR‹ЭPшXZ_^[‹Mќ3ЭшФP;ьш‹х]У‹џмџџџФџџџ џџџTempGains_Q16nBytesTempGainsIndices>;d`+w+јc_ !k+ [КCюZ5G42Ъ1н/R.j-†, +РcШ_б!иї1 /+7+YY^@m?zCˆX”W VЌUѕ$жPH( ё>ж(жЫSKP_Silk_LBRR_encode_FIXPР … :ќџџџ      VpsEnc  hpsEncCtrl  pCode pnBytesOut xfw мџџџ)TempGainsIndices аџџџtframe_terminator  џџџ)TempGains_Q16 ИџџџtnFramesInPayloadBuf ˆџџџtLTP_scaleIndex єџџџti ФџџџtnBytes ”џџџttypeOffset |џџџtRate_only_parameters9В`ђж(@ *€(.€22€B4€R6€g7€~9€Š:€“=€Ÿ>€Ћ?€З@€УA€ЯB€лC€чD€ёE€ѓF€I€BJ€RL€rN€„P€™Q€чV€^€О_€Рa€ѕb€џg€ h€i€)o€5p€Nq€Ps€ˆv€”x€›y€z€Ќ€€Тƒ€Щ†€фˆ€№Œ€ Ž€Y€[’€q•€|–€—€Ї™€Бš€Гœ€Л€хŸ€чЁ€яЄ€іЅ€Љ€&Њ€>­€GЎ€SА€ TXT \T ЊW ЎW ЙV НV ШU ЬU зX лX цY ъY :T >T TT XT *0VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SDqb Ѕ.text† 5Еƒ “9&ДQ.debug$SЅ_ƒ6 $LN48@ $LN47K $LN46W $LN45a $LN44k $LN43r $LN42v $LN41} $LN49р $LN50и .rdata>,zм .rdataž‘†Lƒь.data‡—х=Ї.rdata…;зІ _memcpy Р м §  _memmove -L hŠ Љ Т о ќ  7 U r “ ЊН и __chkstk __allmul я .rtc$TMZ Ь.Lў  .rtc$IMZ žz]$ ; .text ж%$DhJ*Lm@.debug$S l …QТпJ $LN36А $LN35О $LN34Х $LN37Œ $LN38„ _memset d .data m%MЮ| .rdataЁј+№ЋЫ .debug$T\у_SKP_Silk_encode_frame_FIX??_C@_1DO@JIICFILC@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAT?$AAa?$AAr?$AAg?$AAe?$AAt?$AAR?$AAa?$AAt?$AAe?$AA_?$AAb?$AAp?$AAs?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@__CrtDbgReportW??_C@_1JO@GLAGELIL@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_encode_frame_FIX@@9@9??_C@_1DBG@CLGMOCDN@?$AA?$CI?$AA?5?$AA8?$AA?5?$AA?$CK?$AA?5?$AA1?$AA0?$AA0?$AA0?$AA?5?$AA?$CK?$AA?5?$AA?$CI?$AA?5?$AA?$CI?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?$CJ?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs@_SKP_Silk_pulses_to_bytes_SKP_Silk_range_enc_wrap_up_SKP_Silk_range_coder_get_length_SKP_Silk_encode_pulses_SKP_Silk_range_encoder_SKP_Silk_FrameTermination_CDF_SKP_Silk_encode_parameters_SKP_Silk_FrameTermination_v4_CDF_SKP_Silk_encode_parameters_v4_SKP_Silk_range_enc_init_SKP_Silk_process_gains_FIX_SKP_Silk_find_pred_coefs_FIX_SKP_Silk_prefilter_FIX_SKP_Silk_noise_shape_analysis_FIX_SKP_Silk_find_pitch_lags_FIX_SKP_Silk_LP_variable_cutoff_SKP_Silk_HP_variable_cutoff_FIX_SKP_Silk_VAD_GetSA_Q8___security_cookie@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_LBRR_encode_FIX_SKP_Silk_gains_dequant?__LINE__Var@?1??SKP_Silk_LBRR_encode_FIX@@9@9??_C@_13COJANIEC@?$AA0?$AA?$AA@_SKP_Silk_LBRR_ctrl_FIX/3663 1273638395 100666 16301 ` Lћ-ъKQ4d.drectveA\ .debug$Sp@B.text8  P`.debug$SEU@B.rtc$TMZ‡‹@0@.rtc$IMZ•™@0@.text›Ѓ P`.debug$SX>–@B.textТШŠ P`.debug$SPјH @B.rdataŒz @@@.data!@0Р.rdata !@0@.texth!v)< P`.debug$SДЮ+‚1@B.rdata @2@0@.data`2@0Р.rdata4d2@0@.textG˜2 P`.debug$Sфп2У3@B.debug$T\ѕ3@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёPJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_enc_API.obj:<!ovovMicrosoft (R) Optimizing Compilerё=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_enc_API.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё"@SA_Method"SA_Parameter|SKP_Silk_NLSF_CB_structTSKP_SILK_LBRR_structKSKP_Silk_encoder_stateRSKP_Silk_LP_state+SKP_Silk_VAD_state!wchar_t!„SKP_Silk_predict_state_FIX!cSKP_Silk_encoder_state_FIXSKP_Silk_nsq_state‹SKP_Silk_encoder_control#‡SKP_Silk_prefilter_state_FIX"SA_AttrTargetsSKP_Silk_NLSF_CBS‰SKP_Silk_shape_state_FIX usize_t!ЧSKP_Silk_range_coder_stateSKP_Silk_nsq_stateTSKP_SILK_LBRR_struct+SKP_Silk_VAD_state!ЧSKP_Silk_range_coder_state PSKP_Silk_detect_SWB_stateRSKP_Silk_LP_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structKSKP_Silk_encoder_state‹SKP_Silk_encoder_control‰SKP_Silk_shape_state_FIX#‡SKP_Silk_prefilter_state_FIX!„SKP_Silk_predict_state_FIX!cSKP_Silk_encoder_state_FIX$оSKP_SILK_SDK_EncControlStruct PSKP_Silk_detect_SWB_state$оSKP_SILK_SDK_EncControlStructєˆprХО)ж$olŽг>u,Fмз$?яюЬqўDьDьАШ‹>№x гbќ:Tи™Ж+Ы аkЈяЉЌŸ"+ќqЅ’СмсU#[Т)oњ mњюQл'fWЊWb!Ј?~NЯзѕьš[иC-д2ўрм…ьЊ6ойЙОџ„w„љ”m–˜ЊдЉ3oьar6Z<Ѓ:…QЅB x˜›*'Я#ћ@5юm gљОB5|†?ЕP ќž}o[Г‘МКGƒQйЛyјs‡ІkFУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PйkЛYŒ^ЁA^ŠћsM,uОw~е*Јн­Wыћ%iАлЙЬXўrToрџЊtЩћЩ}*Мj_П#ХuХДR†(=Гђ)‚5ъжкKnх1ƒАз"Ќшš>šљ%?dlЩ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓ$ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sdk_api.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_control.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_enc_api.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 220 - ^ = $23 $T0 224 - ^ = $24 $T0 228 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 11892 - ^ = $23 $T0 11896 - ^ = $24 $T0 11900 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEј‹EЧ<Є‹Eј_^[‹х]Уѕ$8ЬV ёC81ѓSKP_Silk_SDK_Get_Encoder_SizeЬР € tencSizeBytes јџџџtretђ@8(4*€+€%-€./€10€ X \ а д U‹ььиSVWН(џџџЙ6ИЬЬЬЬѓЋЧEь‹E‰Eј‹EјПˆФiЩшЗб‹E ‰‹EјПˆФ‹UјП‚рЏШЗЩ‹U ‰J‹EјЗˆм‹U ‰J‹E ‹Mј‹‘ф‰P ‹E ‹Mј‹‘ь‰P‹Eь_^[‹х]Уѕ$›иШ ёА?›”сSKP_Silk_SDK_QueryEncoderиР € encState  мencStatus ьџџџtret јџџџVpsEncђh›( \:€<€%>€+@€CA€cB€sC€‚D€‘F€”G€ X \ № є U‹ььиSVWН(џџџЙ6ИЬЬЬЬѓЋЧEь‹E‰Eј‹EјPшƒФEь‰Eьt*3Рu&hj‹ ƒС QhjшƒФƒјuЬ‹E P‹MQшƒФEь‰Eьt*3Рu&hj‹ ƒСQhjшƒФƒјuЬ‹Eь_^[Фи;ьш‹х]У04D3L/U+\'r†3Ž/—+ž'К5ѕ$ТиШ ёЏ>ТЎѕSKP_Silk_SDK_InitEncoderиР € encState  мencStatus ьџџџtret јџџџVpsEncђ`Т( TP€R€%U€+X€?Y€i]€^€Ћb€Ўc€ &X& \& №& є& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_enc_api.cP0U‹ьИp.шSVWНбџџЙœ ИЬЬЬЬѓЋЁ3Х‰EќЧEИЧEˆ‹E‰…dџџџƒ} u%hjЁƒРPhjшƒФƒјuЬ‹E 8@tZ‹E 8р.tO‹E 8€>tD‹E 8Р]t9ЧEИўџџџ3Рu&hj‹ ƒСQhjшƒФƒјuЬ‹EИщ‹E ‹™Йшїљ‰Eє‹E ‹@™ї}є‰Eш‹E ‹H‰|џџџ‹E ‹H ‰Mм‹E ‹H‰Mа‹E ‹H‰M ‹E ‹H‰MФ‹E™ї}є‰E”‹E”™Й їљ…вuƒ}}9ЧEИџџџџ3Рu&hj‹ ƒСQhjшƒФƒјuЬ‹EИщv‹…dџџџПˆрПUєЏЪ9M~9ЧEИџџџџ3Рu&hj‹ ƒС&QhjшƒФƒјuЬ‹EИщ$‹E P‹M”Q‹UФR‹EаP‹MмQ‹•|џџџR‹EшP‹MєQ‹•dџџџRшƒФ$‰EИƒ}Иt23Рu&hj‹ ƒС,QhjшƒФƒјuЬ‹EИщЗ‹E 8Р]u;‹…dџџџƒИu,‹…dџџџƒИ u‹EP‹MQ‹•dџџџТќRшƒФ 3Рf‰…pџџџИ…Р„%‹…dџџџ‹dџџџ‹Ь+‘д ‰UЌ‹…dџџџПˆФiЩш‹U 9 uK‹EP‹MЌQшƒФ‰EЌ‹EЌ‰EˆПEЌбрP‹MQ‹•dџџџ‹‚д ‹dџџџ”A RшƒФ щ9‹E 8Р]…‹‹…dџџџƒИФu|‹EбрСјiРVU‹MбссџџiЩVUСљСP‹UЌRшƒФ‰EЌПEЌkРбј‰Eˆ‹EˆP‹MQ‹•dџџџТ R‹…dџџџ‹ˆд ‹•dџџџ„J PшƒФщŸ‹E 8Р]un‹…dџџџƒИФ u_‹EбјP‹MЌQшƒФ‰EЌ‹EЌбр‰Eˆ‹EЌPмшџџQ‹•dџџџ‹‚д ‹dџџџ”A R‹…dџџџ8P‹MQшƒФщ&‹E 8Р]up‹…dџџџƒИФua‹E™ЙїљP‹UЌRшƒФ‰EЌПEЌkР‰Eˆ‹EˆP‹MQ‹•dџџџТPR‹…dџџџ‹ˆд ‹•dџџџ„J PшƒФщЋ‹E 8€>…Ž‹…dџџџƒИФ uПEkРСјP‹MЌQшƒФ‰EЌ‹EЌСрСјiРVU‹MЌСссџџiЩVUСљС‰Eˆ‹EˆP‹MQ‹•dџџџТlR‹…dџџџ‹ˆд ‹•dџџџ„J PшƒФщ‹E 8€>un‹…dџџџƒИФu_‹EбјP‹MЌQшƒФ‰EЌ‹EЌбр‰Eˆ‹EЌPTвџџQ‹•dџџџ‹‚д ‹dџџџ”A R‹…dџџџЈP‹MQшƒФщ•‹E 8р.…†‹…dџџџƒИФuw‹EбрСјiРVU‹MбссџџiЩVUСљСP‹UЌRшƒФ‰EЌПEЌkРбј‰Eˆ‹EˆP‹MQ‹•dџџџТРR‹…dџџџ‹ˆд ‹•dџџџ„J PшƒФ‹Eˆ‹MA‰U‹E+Eˆ‰E‹…dџџџ‹ˆд MЌ‹•dџџџ‰Šд ‹…dџџџ‹dџџџ‹д ;‘ЬŒП…pџџџ…Рun‹Ef‹f‰pџџџ‹…dџџџ PpџџџQ‹UR‹…dџџџPшƒФ‰EИƒ}Иt-3Рu)hj‹ СƒQhjшƒФƒјuЬщŒ‹…dџџџ P‹MQ‹UR‹…dџџџPшƒФ‰EИƒ}Иt-3Рu)hj‹ СˆQhjшƒФƒјuЬ‹EП…Щt)hj‹Т‹RhjшƒФƒјuЬ‹…dџџџЧ€д ыыщЮњџџ‹Ef‹pџџџf‰‹…dџџџƒИ№t‹…dџџџƒИєt3Р‹Mf‰‹EИR‹ЭPшXZ_^[‹Mќ3ЭшФp.;ьш‹х]УIpџџџмшџџ€Tвџџ€scratchscratchMaxBytesOut Y#VJUQQZ+a'І3ЎQЗ+О'K3SQ\+c'3ЅQЎ+Е'ѕM 3Q+"'vLб`K[`ЁJв`IQ`•HЯ`2Gc`ЋIџ`EJбFц3юQњ+'/FD3LQX+_'wEQ‹+’'єAљXW5$@0?<>H=ѕ$hp.:, ёЪ9h,hїSKP_Silk_SDK_Encodep.РА- … :ќџџџ      encState  фencControl samplesIn tnSamplesIn  outData nBytesOut ЌџџџtnSamplesToBuffer Иџџџtret pџџџMaxBytesOut ФџџџtUseDTX єџџџtAPI_fs_kHz мџџџtPacketLoss_perc  џџџtComplexity шџџџtPacketSize_ms аџџџtUseInBandFec ”џџџtinput_ms dџџџVpsEnc ˆџџџtnSamplesFromInput |џџџtTargetRate_bpsZЧ мшџџёscratchZX TвџџёscratchђЈh(Rœp€,q€3r€:u€Cx€n|€š}€Ё~€Ы€гƒ€у„€№…€ќ†€‡€ˆ€‰€ Œ€*€?Ž€F€p€x”€‘•€˜–€Т—€Ъ›€œ€/€7Ё€`Ђ€}І€†Ї€“Љ€ЎЊ€ШЌ€л­€сЎ€Џ€1Б€eВ€qМ€­О€ЧС€мТ€фФ€&Х€@Ч€[Ш€eЪ€ЁЫ€ПЭ€йЮ€а€>б€Xд€mе€uз€Зи€ек€ л€х€Lш€Xщ€aъ€|э€šя€Ѕё€Вђ€сѓ€ѕ€ї€?ј€lћ€Ÿ§€Џў€Бџ€Г€И€Х€у€ы €ю € <X< \< Ѕ? Љ? Д> И> У= Ч= в@ ж@ сA хA А< Д< п< у< < < *nBytesOut == 0pencControl != ((void *)0)U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФВ ёq1G@.SKP_min_intФР € ta  tbђ0G€$з€и€@й€ `X` \` Д` И` VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sp.text8pzўхŒи.debug$Sўyп‰ .rtc$TMZЬ.L#: .rtc$IMZžz]I` .text›s“6R^ч‰Џ.debug$SX#/qWo .text Т Љ Tƒw4;.debug$S P „† 8Š Є .rdata Œ|7БlД .data Ђ Ыo .rdata Ёј+№ž О й .texth<ьV‘эпSк.debug$SДŘжЭш $LN41L$LN40T$LN39\$LN42($LN43 .rdata ноE§p ‹ Ђ Й з _memcpy ю   .dataœ ?k'.rdata4AЃљ<Q 0 __chkstk .textGиьиоп„[Ќ.debug$SфкJаˆG .debug$T\T_SKP_Silk_SDK_Get_Encoder_Size__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_SDK_QueryEncoder_SKP_Silk_SDK_InitEncoder__CrtDbgReportW??_C@_1IM@FNDJNDBN@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_SDK_InitEncoder@@9@9??_C@_13COJANIEC@?$AA0?$AA?$AA@_SKP_Silk_init_encoder_FIX__RTC_CheckEsp_SKP_Silk_SDK_Encode??_C@_1CA@KDOPHEIP@?$AA?$CK?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AAO?$AAu?$AAt?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_Silk_encode_frame_FIX_SKP_Silk_resample_3_4_SKP_Silk_resample_1_3_SKP_Silk_resample_1_2_coarse_SKP_Silk_resample_2_3_SKP_Silk_detect_SWB_input_SKP_Silk_control_encoder_FIX?__LINE__Var@?1??SKP_Silk_SDK_Encode@@9@9??_C@_1DE@PCNFDAO@?$AAe?$AAn?$AAc?$AAC?$AAo?$AAn?$AAt?$AAr?$AAo?$AAl?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA?$CI?$AA?$CI?$AAv?$AAo?$AAi?$AAd?$AA?5?$AA?$CK?$AA?$CJ?$AA0?$AA?$CJ?$AA?$AA@___security_cookie@__security_check_cookie@4@_RTC_CheckStackVars@8_SKP_min_int /3697 1273638395 100666 8673 ` L ћ-ъKХ7.drectveAЬ .debug$SШ е@B.textќ§љ P`.debug$SP­§@B.rtc$TMZ“—@0@.rtc$IMZЁЅ@0@.textGЏ P`.debug$Sфік@B.textG  P`.debug$SфS7@B.debug$T\i@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё“YJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_detect_SWB_input.obj:<!ovovMicrosoft (R) Optimizing Compilerњ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_detect_SWB_input.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёњ) iSKP_Silk_SWB_detect_B_HP_Q13) eSKP_Silk_SWB_detect_A_HP_Q13"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_t PSKP_Silk_detect_SWB_state PSKP_Silk_detect_SWB_stateєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlї”Ю@fžГ&rb+ЮЫУ=F’Џ‹ц+7 @#nŽи,ˆ{‘(yFiдz<G;1=1ѓКj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_detect_swb_input.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 1220 - ^ = $23 $T0 1224 - ^ = $24 $T0 1228 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = А Д л п U‹ььРSVWН@ћџџЙ0ИЬЬЬЬѓЋЁ3Х‰Eќhр‹EPшƒФ‰Eєj‹EєPшƒФ‰Eє‹EєP ќџџQ‹URhh‹E PшƒФЧEшы ‹EшƒР‰Eшƒ}ш}>‹EєP ќџџQ‹Uш‹E аQ‹Uш•P‹MшkЩСQ• ќџџRшƒФыГ‹EєP ќџџQ•ќџџR…ќџџPшƒФПEєkР ‹ќџџгј9…ќџџ~'‹E‹HM‹U‰J‹Ex ~ ‹EЧ@ ы<‹E‹H+M‹U‰J‹Eƒx~‹M‹Q‰•@ћџџы Ч…@ћџџ‹E‹@ћџџ‰H‹Ex˜:~‹Eƒx u ‹EЧ@$R‹ЭPшXZ_^[‹Mќ3ЭшФР;ьш‹х]УI ќџџРќџџќџџshiftenergy_32in_HP_8_kHz2,C3]bkЅВПтˆœЉИФамѕ$ќР г( ёf?ќ(ќчSKP_Silk_detect_SWB_inputРР … :ќџџџ      хpsSWBdetect  samplesIn tnSamplesIn ќџџtshift єџџџtHP_8_kHz_len ќџџtenergy_32 шџџџti  ќџџin_HP_8_kHzђЈќœ'€(-€<.€M4€r5€Š7€Ц8€Ш;€щ>€?€@€A€%C€'D€6E€cI€xJ€‚L€ X \ Ћ Џ К О Щ Э и м ч ы Ј Ќ %U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФH ёq1G@.SKP_min_intФР € ta  tbђ0G`$з€и€@й€ ,X, \, Д, И, U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E ~ ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФH ёq1G@.SKP_max_intФР € ta  tbђ0G`$щ€ъ€@ы€ 3X3 \3 Д3 И3 VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SШЏ‡ .textќ№—gЏPPСб.debug$SP?•dљ $LN14р$LN13ц$LN12№$LN15М$LN16Д 7 Hf„— І С .rtc$TMZЬ.Lия .rtc$IMZžz]ў .textGиьиоп„[Ќ.debug$SфкJаˆ$ .text GСв UdЈЏ.debug$S ф ПVf1 .debug$T \>_SKP_Silk_detect_SWB_input_SKP_Silk_sum_sqr_shift_SKP_Silk_biquad_SKP_Silk_SWB_detect_B_HP_Q13_SKP_Silk_SWB_detect_A_HP_Q13___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_min_int_SKP_max_int /3740 1273638395 100666 9533 ` L ћ-ъKК;.drectveAЬ .debug$SМ Щ@B.textEЙў P`.debug$Sюі@B.rdatax(@@@.rdataš @@@.data:@0Р.rdata>@0@.rtc$TMZBF@0@.rtc$IMZPT@0@.debug$T\^@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёWJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_decoder_set_fs.obj:<!ovovMicrosoft (R) Optimizing Compilerј=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_decoder_set_fs.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёj! |SKP_Silk_NLSF_CB0_16! |SKP_Silk_NLSF_CB1_16! |SKP_Silk_NLSF_CB0_10! |SKP_Silk_NLSF_CB1_10! dSKP_Silk_Dec_A_HP_24! fSKP_Silk_Dec_B_HP_24! dSKP_Silk_Dec_A_HP_16! fSKP_Silk_Dec_B_HP_16! dSKP_Silk_Dec_A_HP_12! fSKP_Silk_Dec_B_HP_12 dSKP_Silk_Dec_A_HP_8 fSKP_Silk_Dec_B_HP_8"@SA_Method"SA_ParameterДSKP_Silk_decoder_stateУSKP_Silk_PLC_struct!wchar_tгSKP_Silk_CNG_struct"SA_AttrTargetsSKP_Silk_NLSF_CBS usize_t!ЧSKP_Silk_range_coder_state!ЧSKP_Silk_range_coder_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structУSKP_Silk_PLC_structгSKP_Silk_CNG_structДSKP_Silk_decoder_state|SKP_Silk_NLSF_CB_structєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlїќ8VŒ{J—tЗфRgCЪеD’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓCj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_decoder_set_fs.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = Ќ* А* Я) г) ђ, і, + + 8' <' [& _& ~% ‚% Ё$ Ѕ$ Ф# Ш# ч" ы" ! ! , 0 U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E‹ˆм+;M „Р‹E‹M ‰ˆм+ПE kР‹M‰р+ПE kР‹M‰ф+‹EƒИм+u)‹EЧ€ш+ ‹EЧ€€,‹EЧ€„,ы'‹EЧ€ш+‹EЧ€€,‹EЧ€„,j@j‹EPшƒФ hРj‹E8$PшƒФ j@j‹Eь+PшƒФ ‹EЧ€И+‹EЧ€М+d‹EЧ€Р+‹EЧ€l7‹EЧ€,,ƒ} u‹EЧ€д+‹EЧ€и+щƒ} u‹EЧ€д+‹EЧ€и+ыnƒ} u‹EЧ€д+‹EЧ€и+ыLƒ} u‹EЧ€д+‹EЧ€и+ы*3Рu&hj‹ ƒС'QhjшƒФƒјuЬ‹EƒИр+~‹MЙр+р~&hj‹ƒТ,RhjшƒФƒјuЬ_^[ФР;ьш‹х]У~,‹+Ї*Д)Ц(о(ѓ(J'W&o%|$‘#ž"Г!Р Ыгму $=-ѕ$EРб ё†=E1§SKP_Silk_decoder_set_fsРР € ­psDec  tfs_kHzђ@E%4#€$€0%€<&€L'€\(€h)€u*€‚+€,€‘-€ž.€Ћ/€И2€Э3€х4€њ6€7€8€!9€.:€;<€A=€N>€`?€f@€sA€‚B€ˆC€•D€ЄE€ЊF€ЗG€ФH€ЦJ€№O€1P€ X \ Ш Ь psDec->frame_length > 0 && psDec->frame_length <= (20 * 24)j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_decoder_set_fs.c#027VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SМ—ўjв.textE4ŠRsЈKU.debug$Su,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlї ƒbў‡gpй e‹шT2C’Џ‹ц+7 @#nŽи,ˆ{Ž(yFiдz<G;1=1ѓBj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_decode_pulses.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 564 - ^ = $23 $T0 568 - ^ = $24 $T0 572 - ^ = Ќ А и м   2 6 ` d U‹ьь0SVWНа§џџЙŒИЬЬЬЬѓЋЁ3Х‰EќЁP‹M ‹‘ЄkвТR‹EP‹M СœQшƒФ‹E™ƒтТСј‰Eа‹E ‹ˆœkЩ*С‰”ўџџЧEєы ‹EєƒР‰Eє‹Eє;Eа}‹EєЧ„…ЌўџџЁP‹”ўџџQ‹UR‹EєŒ…,џџџQшƒФ‹EєƒМ…,џџџu;‹Eє‹Œ…ЌўџџƒС‹Uє‰Œ•ЌўџџЁPhz‹MQ‹Uє„•,џџџPшƒФыИщpџџџЧEєы ‹EєƒР‰Eє‹Eє;Eа}P‹EєƒМ…,џџџ~'‹Eє‹Œ…,џџџQ‹URПEєСр‹MRшƒФ ыj@jПEєСр‹MRшƒФ ыŸЧEєы ‹EєƒР‰Eє‹Eє;EаВ‹EєƒМ…ЌўџџŽœ‹Eє‹Œ…Ќўџџ‰MИПEєСр‹M‰• ўџџЧEмы ‹EмƒР‰Eмƒ}м}d‹Eм‹ ўџџ‹‰UФЧEшы ‹EшƒР‰Eш‹Eш;EИ}*‹EФбр‰EФjh‹EPMЌQшƒФ‹EФEЌ‰EФыХ‹Eм‹ ўџџ‹UФ‰ыщ9џџџ‹E ‹ˆœQ‹U ‹‚ P‹M ‹‘ЄR‹EP‹MQ‹URшƒФR‹ЭPшXZ_^[‹Mќ3ЭшФ0;ьш‹х]У‹џЌџџџ,џџџxЌўџџxnLshiftssum_pulsesbit)<PtЇУяѕ \x)|‰Ž ЊИФамѕ$ј0а( ёЩ<ј(јSKP_Silk_decode_pulses0Рp … :ќџџџ      СpsRC  ЙpsDecCtrl tq frame_length шџџџtj Ќџџџtbit мџџџtk  ўџџtpulses_ptr ,џџџЖsum_pulses ”ўџџxcdf_ptr єџџџti ИџџџtnLS аџџџtiter ЌўџџЖnLshifts Фџџџtabs_qђ(ј"'€(1€W4€f9€~:€˜;€І<€Ъ?€з@€юB€C€D€I€1J€>K€cL€eM€O€T€ŸU€АV€НW€аX€шY€їZ€[€\€0]€9^€;_€J`€Lb€Qh€ƒi€ X \ Ј Ќ З Л Ц Ъ е й ф ш   %*VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S  [Џš.textјМЮа3аЧ“T.debug$S4›1ь $LN25р$LN24щ$LN23є$LN26М$LN27Д 3_memset E ]ƒЂ Кдѕ  2 .rtc$TMZЬ.LI` .rtc$IMZžz]o† .debug$T\•_SKP_Silk_decode_pulses_SKP_Silk_decode_signs_SKP_Silk_lsb_CDF_SKP_Silk_shell_decoder_SKP_Silk_pulses_per_block_CDF_offset_SKP_Silk_pulses_per_block_CDF_SKP_Silk_range_decoder_SKP_Silk_rate_levels_CDF_SKP_Silk_rate_levels_CDF_offset___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/3821 1273638395 100666 9345 ` Lћ-ъK91.drectveA, .debug$SРm-@B.text Uu P`.debug$SМo+@B.rtc$TMZСХ@0@.rtc$IMZЯг@0@.debug$T\н@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё›]J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_decode_parameters_v4.obj:<!ovovMicrosoft (R) Optimizing Compilerў=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_decode_parameters_v4.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё\) fSKP_Silk_LTPScales_table_Q14% “SKP_Silk_LTP_vq_ptrs_Q14"@SA_Method"SA_ParameterДSKP_Silk_decoder_stateОSKP_Silk_decoder_controlУSKP_Silk_PLC_struct!wchar_tгSKP_Silk_CNG_struct"SA_AttrTargetsSKP_Silk_NLSF_CBS usize_t!ЧSKP_Silk_range_coder_state!ЧSKP_Silk_range_coder_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structУSKP_Silk_PLC_structгSKP_Silk_CNG_structДSKP_Silk_decoder_stateОSKP_Silk_decoder_control|SKP_Silk_NLSF_CB_structєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlїэТУ†nеХчЦкМJ’Џ‹ц+7 @#nŽи,ˆ{•(yFiдz<G;1=1ѓIj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_decode_parameters_v4.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 428 - ^ = $23 $T0 432 - ^ = $24 $T0 436 - ^ = И М у ч U‹ььЈSVWНXўџџЙjИЬЬЬЬѓЋЁ3Х‰EќЧ…(џџџ‹E‰…џџџ‹EЧ€@,‹E‹ˆ4,‹U ‹E‹Œˆˆ,‰ŠЄ‹E‹ˆ4,‹U ‹E‹Œˆœ,‰Š ‹E‹ˆ4,‹U‹E‹Œˆр.‰Šє.‹E‹ˆ4,‹U ‹E‹Œˆ.‰ŠЈ‹E‹ˆ4,‹U ‹E‹ŒˆЬ.‰J ‹E‹ˆ4,Q‹UТР+R‹E‹ˆ4,Сс‹U„ А,P‹M ƒСQшƒФ‹E ‹ˆЄ‹U‹„Š€,‰…(џџџ‹E‹ˆш+Q‹U‹‚4,kР(‹M”P-R‹…(џџџPMˆQшƒФ‹E‹ˆш+QUˆR‹E ƒРLPшƒФ ‹EƒИ,,u ‹E Ч€Ј‹E ƒИЈ}|ЧEєы ‹EєƒР‰Eє‹E‹Mє;ˆш+}:‹Eє‹Mє‹U‹D…ˆ+„Šь+‹M ЏЈСј‹Uє‹M„‘ь+‹Uє‰„•@џџџыЏ‹E‹ˆш+Q•@џџџR‹E ƒР,PшƒФ ы"‹E‹ˆш+бсQ‹U ƒТLR‹E ƒР,PшƒФ ‹E‹ˆш+СсQUˆR‹Eь+PшƒФ ‹EƒИh7tu,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlїxЯsЧJ?2МНКю5ј G’Џ‹ц+7 @#nŽи,ˆ{’(yFiдz<G;1=1ѓFj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_decode_parameters.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 536 - ^ = $23 $T0 540 - ^ = $24 $T0 544 - ^ = ДD ИD лC пC E E 6A :A VB ZB }? ? Ѓ@ Ї@ а5 д5 ј6 ќ6 '3 +3 O4 S4 ~1 ‚1 І2 Њ2 е/ й/ ў0  0 . + 2 + W , [ , ‡ - ‹ - Г . З . ц ( ъ (  )  ) ? % C % h & l & ” # ˜ # И $ М $ п " у "    -  1  S G W G ~ I ‚ I Ї J Ћ J г : з :  ; ; @ ' D ' g  k  “  —  Т  Ц  т ц U‹ььSVWНь§џџЙ…ИЬЬЬЬѓЋЁ3Х‰EќЧ…Мўџџ‹E‰…Аўџџ‹EƒИ4,uYЁPh‹АўџџQUмRшƒФƒ}м|ƒ}м~‹…АўџџЧ@љџџџщ’‹Eм‹ …‰Mа‹EаP‹MQшƒФ‹EƒИ4,u ЁPh‹АўџџQUмRшƒФы,ЁP‹M‹‘Ш+kв ТR‹…АўџџPMмQшƒФ‹Eмбј‹M ‰Є‹Eмƒр‹M ‰ ‹E‹Mм‰ˆШ+‹EƒИ4,u1ЁP‹M ‹‘Єiв‚ТR‹…АўџџPM”QшƒФыЁPh‹АўџџQU”RшƒФЧEєы ‹EєƒР‰Eєƒ}є}$ЁPh‹АўџџQ‹UєD•”PшƒФыЭ‹E‹ˆ4,Q‹UТР+RE”P‹M ƒСQшƒФ‹E ‹ˆЄ‹U‹„Š€,‰…Мўџџ‹…Мўџџ‹Q‹•Мўџџ‹BP‹Мўџџ‹QR‹…АўџџPdџџџQшƒФ‹E‹ˆш+Q•dџџџR‹…МўџџPџџџQшƒФЁPh‹АўџџQ‹U ТЈRшƒФ‹EƒИ,,u ‹E Ч€Јƒ}„Э‹E‹ˆш+Q•џџџR‹E ƒРLPшƒФ ‹E ƒИЈ}ЧEєы ‹EєƒР‰Eє‹E‹Mє;ˆш+}=‹Eє‹Mє‹U‹„…џџџ+„Šь+‹M ЏЈСј‹Uє‹M„‘ь+‹Uє‰„•дўџџыЌ‹E‹ˆш+Q•дўџџR‹E ƒР,PшƒФ ы"‹E‹ˆш+бсQ‹U ƒТLR‹E ƒР,PшƒФ ‹E‹ˆш+СсQ•џџџR‹Eь+PшƒФ ‹EƒИh7t$=K<S;Y:oHВ9;9_8„8Ў7Ь7№6і5H4"32HH2N1^Hh0n/~H’.˜-ЈHВ,И+ШHц*ю)є( H'K&\%mHК$Р#аHо"і! !+ 1AHksyH—ГHЦ N/M<LHT`lx„œѕ$рд( ёL@р(р SKP_Silk_decode_parametersРT … :ќџџџ          ­psDec  ЙpsDecCtrl tq fullDecoding шџџџtk аџџџtfs_kHz_dec Ќџџџ)Ixs ”џџџ)GainsIndices џџџИpNLSF_Q15 Мўџџ?psNLSF_CB єџџџti мџџџtIx dџџџ|NLSFIndices дўџџИpNLSF0_Q15 ФџџџtnBytesUsed Шўџџcbk_ptr_Q14 АўџџСpsRCђРрUД%€(,€2-€;3€G4€e7€q8€~9€ƒ;€<€ B€ЌD€ЪE€ЬH€јJ€K€L€!R€-T€\U€^W€|[€”\€Ж]€И`€пe€јh€+k€Rq€vu€‚v€y€™{€Й}€Х€€х‚€ ƒ€"†€B‡€DŠ€fŽ€‹‘€—’€Е“€г–€у›€яœ€€ž€;Ÿ€G €eЁ€gЂ€…І€‘Ј€ЏЉ€БЋ€ЯЏ€эЖ€Й€'Л€?Н€tП€ŒР€ВС€ДТ€ЙЧ€зШ€ыЩ€эЪ€§Ы€Ь€Э€*г€Hд€Qи€rн€–т€Кч€Эш€сщ€эъ€њ№€ё€ѓ€ X \ Ќ А Л П Ъ Ю й н ш ь ї ћ     $ ( Œ  SXVОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SИL;§П.textрYи§Хns†.debug$SLjf+ $LN45 $LN44Ћ$LN43Е$LN42С$LN41Ю$LN40в$LN39н$LN46L$LN47D K l‹­Ум є_memset ;RlˆЇСн 3Vu›Зкѕ2To‘ _memcpy І Оц , J b{›ЎШш# <Z rŽ­Р Я ъ .rtc$TMZЬ.L .rtc$IMZžz]'> .debug$T\M_SKP_Silk_decode_parameters_SKP_Silk_range_coder_check_after_decoding_SKP_Silk_range_coder_get_length_SKP_Silk_FrameTermination_CDF_SKP_Silk_FrameTermination_offset_SKP_Silk_vadflag_CDF_SKP_Silk_vadflag_offset_SKP_Silk_decode_pulses_SKP_Silk_Seed_CDF_SKP_Silk_Seed_offset_SKP_Silk_LTPScales_table_Q14_SKP_Silk_LTPscale_CDF_SKP_Silk_LTPscale_offset_SKP_Silk_LTP_gain_CDF_ptrs_SKP_Silk_LTP_gain_CDF_offsets_SKP_Silk_LTP_vq_ptrs_Q14_SKP_Silk_LTP_per_index_CDF_SKP_Silk_LTP_per_index_CDF_offset_SKP_Silk_decode_pitch_SKP_Silk_pitch_contour_CDF_SKP_Silk_pitch_contour_CDF_offset_SKP_Silk_pitch_contour_NB_CDF_SKP_Silk_pitch_contour_NB_CDF_offset_SKP_Silk_pitch_lag_SWB_CDF_SKP_Silk_pitch_lag_SWB_CDF_offset_SKP_Silk_pitch_lag_WB_CDF_SKP_Silk_pitch_lag_WB_CDF_offset_SKP_Silk_pitch_lag_MB_CDF_SKP_Silk_pitch_lag_MB_CDF_offset_SKP_Silk_pitch_lag_NB_CDF_SKP_Silk_pitch_lag_NB_CDF_offset_SKP_Silk_bwexpander_SKP_Silk_NLSF2A_stable_SKP_Silk_NLSF_interpolation_factor_CDF_SKP_Silk_NLSF_interpolation_factor_offset_SKP_Silk_NLSF_MSVQ_decode_SKP_Silk_range_decoder_multi_SKP_Silk_gains_dequant_SKP_Silk_delta_gain_CDF_SKP_Silk_delta_gain_CDF_offset_SKP_Silk_gain_CDF_SKP_Silk_gain_CDF_offset_SKP_Silk_type_offset_joint_CDF_SKP_Silk_type_offset_CDF_SKP_Silk_type_offset_CDF_offset_SKP_Silk_decoder_set_fs_SKP_Silk_SamplingRates_table_SKP_Silk_range_decoder_SKP_Silk_SamplingRates_CDF_SKP_Silk_SamplingRates_offset___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/3912 1273638395 100666 14286 ` Lћ-ъKА,P.drectveA, .debug$S€mэL@B.textЗхœ#M P`.debug$Sмž&z+@B.rtc$TMZ8,<,@0@.rtc$IMZF,J,@0@.debug$T\T,@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё•ZJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_decode_indices_v4.obj:<!ovovMicrosoft (R) Optimizing Compilerћ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_decode_indices_v4.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё"% ISKP_Silk_type_offset_CDF+ JSKP_Silk_type_offset_joint_CDF, SKP_Silk_type_offset_CDF_offset šSKP_Silk_gain_CDF% SKP_Silk_gain_CDF_offset$ ˜SKP_Silk_delta_gain_CDF+ SKP_Silk_delta_gain_CDF_offset& `SKP_Silk_pitch_lag_NB_CDF- SKP_Silk_pitch_lag_NB_CDF_offset& [SKP_Silk_pitch_lag_MB_CDF- SKP_Silk_pitch_lag_MB_CDF_offset& ]SKP_Silk_pitch_lag_WB_CDF- SKP_Silk_pitch_lag_WB_CDF_offset' ZSKP_Silk_pitch_lag_SWB_CDF. SKP_Silk_pitch_lag_SWB_CDF_offset' \SKP_Silk_pitch_contour_CDF. SKP_Silk_pitch_contour_CDF_offset* ^SKP_Silk_pitch_contour_NB_CDF1 SKP_Silk_pitch_contour_NB_CDF_offset% _SKP_Silk_pitch_delta_CDF, SKP_Silk_pitch_delta_CDF_offset' bSKP_Silk_LTP_per_index_CDF. SKP_Silk_LTP_per_index_CDF_offset' SKP_Silk_LTP_gain_CDF_ptrs* gSKP_Silk_LTP_gain_CDF_offsets" bSKP_Silk_LTPscale_CDF% SKP_Silk_LTPscale_offset! KSKP_Silk_vadflag_CDF$ SKP_Silk_vadflag_offset) GSKP_Silk_SamplingRates_table' ISKP_Silk_SamplingRates_CDF* SKP_Silk_SamplingRates_offset3 cSKP_Silk_NLSF_interpolation_factor_CDF6 SKP_Silk_NLSF_interpolation_factor_offset- cSKP_Silk_FrameTermination_v4_CDF0 SKP_Silk_FrameTermination_v4_offset ISKP_Silk_Seed_CDF! SKP_Silk_Seed_offset"@SA_Method"SA_ParameterДSKP_Silk_decoder_stateУSKP_Silk_PLC_struct!wchar_tгSKP_Silk_CNG_struct"SA_AttrTargetsSKP_Silk_NLSF_CBS usize_t!ЧSKP_Silk_range_coder_state!ЧSKP_Silk_range_coder_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structУSKP_Silk_PLC_structгSKP_Silk_CNG_structДSKP_Silk_decoder_state|SKP_Silk_NLSF_CB_structєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlї7KzoKЁŸ%Rыh7UG’Џ‹ц+7 @#nŽи,ˆ{’(yFiдz<G;1=1ѓFj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_decode_indices_v4.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 388 - ^ = $23 $T0 392 - ^ = $24 $T0 396 - ^ = Д6 И6 л5 п5 7 7 63 :3 V4 Z4 }1 1 Ѓ2 Ї2 а* д* ј+ ќ+ '( +( O) S) ~& ‚& І' Њ' е$ й$ ў%  % . 2 W ! [ ! ‡ " ‹ " Г # З # ц , ъ , -  - ;  ?  d  h  ”  ˜  Н  С  щ  э     4 8 8 8 W 9 [ 9 } <  < Ј > Ќ > б ? е ? § .  . 2 / 6 / j  n  ™    Ы  Я  ы  я  U‹ьь€SVWН€ўџџЙ`ИЬЬЬЬѓЋЦ…‡ўџџЧEШЧ…hџџџЧ…\џџџ‹E‰…Pџџџ‹EƒИ4,unЁPh‹PџџџQUрRшƒФƒ}р|ƒ}р~‹…PџџџЧ@љџџџщ†‹Eр‹ …‰Mд‹EдP‹MQшƒФЧEШЦ…‡ўџџЧEМ€Н‡ўџџu hшƒФƒ}М…ЦЁPh‹PџџџQ‹UШ‹EŒр.QшƒФƒ}Шu ЁPh‹PџџџQUрRшƒФы,ЁP‹M‹‘Ш+kв ТR‹…PџџџPMрQшƒФ‹Eрбј‰EА‹Eрƒр‰EЄ‹E‹Mр‰ˆШ+ƒ}Шu8ЁP‹MАiЩ‚СQ‹•PџџџR‹EШСр‹M”А,RшƒФы+ЁPh‹PџџџQ‹UШСт‹EŒА,QшƒФЧEјы ‹EјƒР‰Eјƒ}ј}3ЁPh‹PџџџQ‹UШСт‹EŒА,‹Uј‘PшƒФыО‹EА‹M‹”€,‰•\џџџ‹…\џџџ‹Q‹•\џџџ‹BP‹\џџџ‹QR‹…PџџџP‹MШkЩ(‹U„ P-PшƒФЁPh‹PџџџQ‹UШ‹EŒ.QшƒФƒ}А…xЧE€ƒ}Ш~i‹EШ‹MƒМ„,uYЁPh‹PџџџQ•tџџџRшƒФƒНtџџџ}/‹…tџџџƒш ‰…tџџџ‹…hџџџ…tџџџ‹MШ‹U‰„Š,.ЧE€ƒ}€„Э‹EƒИм+u-ЁPh‹PџџџQ‹UШ‹EŒ,.QшƒФщ”‹EƒИм+ u*ЁPh‹PџџџQ‹UШ‹EŒ,.QшƒФы^‹EƒИм+u*ЁPh‹PџџџQ‹UШ‹EŒ,.QшƒФы(ЁPh‹PџџџQ‹UШ‹EŒ,.QшƒФ‹EШ‹M‹”,.‰•hџџџ‹EƒИм+u*ЁPh‹PџџџQ‹UШ‹EŒ@.QшƒФы(ЁPh‹PџџџQ‹UШ‹EŒ@.QшƒФЁPh‹PџџџQ‹UШ‹EŒT.QшƒФЧEьы ‹EьƒР‰Eьƒ}ь}R‹EШ‹M‹”T.‹•P‹MШ‹U‹„ŠT.‹ …Q‹•PџџџR‹EШСр‹M”h.‹Eь ‚QшƒФыŸЁPh‹PџџџQ‹UШ‹EŒИ.QшƒФЁPh‹PџџџQU˜RшƒФ‹EШ‹M‹U˜‰”Ь.ЁPh‹PџџџQЦ…‡ўџџUМRшƒФ‹EШ‹M‹UА‰”ˆ,‹EШ‹M‹UЄ‰”œ,‹EШƒР‰EШщћџџEŒP‹PџџџQшƒФ‹…Pџџџ‹+MŒ‹U‰Š0,‹EƒИ0,} ‹…PџџџЧ@њџџџ‹E‹MШ‰ˆ8,€Н‡ўџџu hшƒФ‹E‹MМ‰ˆ@,R‹ЭPшXZ_^[Ф€;ьш‹х]УМџџџрџџџ˜џџџŒџџџtџџџdelta_lagIndexnBytesUsedseed_intIxFrameTerminationV?\>l=—<Ї;Э:вBф9ъ8=76(=27E5V=4‘3Џ=Й2П1м=ќ21%=w0/….Ÿ=Ю-д,ч==+C*]=v)|(–=Ќ'В&Ь=ж%м$і=##"==G!M g=ou=Огї=!=)/?=W]t=Еџ:B"A4@@L:Xdp|ѕ$З€д ё2@ЗЗЖSKP_Silk_decode_indices_v4€РР €        ­psDec ˜џџџtseed_int ьџџџtk hџџџtprev_lagIndex дџџџtfs_kHz_dec ЄџџџtQuantOffsetType ШџџџtFrameIndex \џџџ?psNLSF_CB јџџџti рџџџtIx tџџџtdelta_lagIndex МџџџtFrameTermination ŒџџџtnBytesUsed Аџџџtsigtype# €џџџtdecode_absolute_lagIndex PџџџСpsRCђhЗJ\"€%#€,%€6&€@'€I,€U-€s0€1€Œ2€‘4€ž5€Ў7€Е8€У;€у?€ D€F€/G€1J€]L€eM€nN€zT€€V€ЖW€ИY€у]€ћ^€,_€.f€Ai€~o€Іq€Аv€Зw€Эy€юz€ї{€|€}€&€€0‚€<ƒ€i„€u…€Ÿ†€Ћ‡€гˆ€е‰€§Œ€€‘€D’€F”€n›€–€ЎŸ€ў €Ѕ€(Ћ€FЌ€VА€{В€‹Г€›Е€ЄЖ€ЉЛ€ММ€аН€мО€щС€ѕТ€У€ X \  : Є: Џ Г О Т Э б м р ы я њ ў t x GLVОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S€L*ёњ.textЗMсЬgфАЛ;Ž.debug$Sмˆє $LN37€$LN36$LN35š$LN34Ѓ$LN38D$LN39< Acˆ›БШтў9\x›Крќ:\w™Дж№9d ‚›ЛЮш"CY$LN32Іr ‹Љ Снќ   " .rtc$TMZЬ.L2I .rtc$IMZžz]Xo .debug$T\~_SKP_Silk_decode_indices_v4_SKP_Silk_range_coder_get_length_SKP_Silk_FrameTermination_v4_CDF_SKP_Silk_FrameTermination_v4_offset_SKP_Silk_Seed_CDF_SKP_Silk_Seed_offset_SKP_Silk_LTPscale_CDF_SKP_Silk_LTPscale_offset_SKP_Silk_LTP_gain_CDF_ptrs_SKP_Silk_LTP_gain_CDF_offsets_SKP_Silk_LTP_per_index_CDF_SKP_Silk_LTP_per_index_CDF_offset_SKP_Silk_pitch_contour_CDF_SKP_Silk_pitch_contour_CDF_offset_SKP_Silk_pitch_contour_NB_CDF_SKP_Silk_pitch_contour_NB_CDF_offset_SKP_Silk_pitch_lag_SWB_CDF_SKP_Silk_pitch_lag_SWB_CDF_offset_SKP_Silk_pitch_lag_WB_CDF_SKP_Silk_pitch_lag_WB_CDF_offset_SKP_Silk_pitch_lag_MB_CDF_SKP_Silk_pitch_lag_MB_CDF_offset_SKP_Silk_pitch_lag_NB_CDF_SKP_Silk_pitch_lag_NB_CDF_offset_SKP_Silk_pitch_delta_CDF_SKP_Silk_pitch_delta_CDF_offset_SKP_Silk_NLSF_interpolation_factor_CDF_SKP_Silk_NLSF_interpolation_factor_offset_SKP_Silk_range_decoder_multi_SKP_Silk_delta_gain_CDF_SKP_Silk_delta_gain_CDF_offset_SKP_Silk_gain_CDF_SKP_Silk_gain_CDF_offset_SKP_Silk_type_offset_joint_CDF_SKP_Silk_type_offset_CDF_SKP_Silk_type_offset_CDF_offset_SKP_Silk_vadflag_CDF_SKP_Silk_vadflag_offset_SKP_Silk_decoder_set_fs_SKP_Silk_SamplingRates_table_SKP_Silk_range_decoder_SKP_Silk_SamplingRates_CDF_SKP_Silk_SamplingRates_offset__RTC_CheckEsp@_RTC_CheckStackVars@8__RTC_UninitUse__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/3956 1273638395 100666 10255 ` L ћ-ъK™?.drectveAЬ .debug$SX @B.texte P`.debug$Sˆ @B.rdataО™@@@.rdata–W@@@.dataэ@0Р.rdata0ё@0@.rtc$TMZ!%@0@.rtc$IMZ/3@0@.debug$T\=@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‹UJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_decode_frame.obj:<!ovovMicrosoft (R) Optimizing Compilerі=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_decode_frame.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё "@SA_Method"SA_ParameterДSKP_Silk_decoder_stateОSKP_Silk_decoder_controlУSKP_Silk_PLC_struct!wchar_tгSKP_Silk_CNG_struct"SA_AttrTargetsSKP_Silk_NLSF_CBS usize_t!ЧSKP_Silk_range_coder_state!ЧSKP_Silk_range_coder_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structУSKP_Silk_PLC_structгSKP_Silk_CNG_structДSKP_Silk_decoder_stateОSKP_Silk_decoder_control|SKP_Silk_NLSF_CB_structєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlї?йЗЪфA‘Й їr‹EB’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓDj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_decode_frame.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 2356 - ^ = $23 $T0 2360 - ^ = $24 $T0 2364 - ^ = U‹ьь0 SVWНаіџџЙLИЬЬЬЬѓЋЁ3Х‰EќЧ…џџџ‹E‹ˆр+‰@џџџЧEрƒН@џџџ~ Н@џџџр~%hjЁƒР PhjшƒФƒјuЬ‹E Чƒ}…г‹E‹ˆм+‰4џџџ‹E‹ˆш+‰(џџџ‹EƒИ4,u,‹EP‹MQ‹URшƒФ ‹EƒИp7u ‹EPшƒФ‹EƒИp7uj…”їџџPLџџџQ‹URшƒФыj…”їџџPLџџџQ‹URшƒФ‹Eƒx„‹EЧ€0,ЧE‹E‹4џџџ‰ˆм+‹E‹(џџџ‰ˆш+‹…4џџџkР‹M‰р+‹…4џџџkР™ƒтТСј‹M‰ф+‹E ‹M‹‰‹Eƒxјu Ч…џџџѕџџџы Ч…џџџєџџџщ‹E‹M‹+‘0,‹E ‰‹E‹ˆ4,ƒС‹U‰Š4,‹E‹ˆр+‰@џџџ…”їџџP‹M Q•LџџџR‹EPшƒФ‹EP‹@џџџQ‹U R…LџџџP‹MQшƒФ‹EЧ€h7‹E‹M№‰ˆl7‹EЧ€,,ƒ}u7‹EP‹@џџџQ‹U R…LџџџP‹MQшƒФ‹E‹ˆh7ƒС‹U‰Šh7‹…@џџџбрP‹M Q‹UТ8$RшƒФ ‹…@џџџP‹M Q•LџџџR‹EPшƒФ‹…@џџџP‹M Q•LџџџR‹EPшƒФ‹EƒИм+ u‹…@џџџ™Йїљ…вtH‹UƒКм+ t‹…@џџџ%€yHƒШў@…Рt&hj‹ ƒСoQhjшƒФƒјuЬ‹…@џџџP‹M Q‹UТЬ+R‹E‹ˆд+Q‹U‹‚и+P‹M QшƒФ‹Ef‹@џџџf‰‹E‹Xџџџ‰ˆМ+‹…џџџR‹ЭPшXZ_^[‹Mќ3ЭшФ0 ;ьш‹х]УLџџџЌ”їџџ€PulsessDecCtrl.^-e)n%u!Ь ф *;‰НлљAI)R%Y!”УШ1з0ф/№ќѕ$0 Я( ё;(SKP_Silk_decode_frame0 Рp … :ќџџџ     ­psDec  pOut pN (pCode nBytes taction  tdecBytes @џџџtL ”їџџЎPulses 4џџџtfs_Khz_old џџџtret (џџџtLPC_order_old LџџџОsDecCtrlђЈ2œ,€(.€22€A3€H6€‚;€‹<€•@€ЄA€ГB€ПD€гF€пG€ыN€їO€P€Q€1U€>V€KX€RY€aZ€p[€‚\€_€Їa€Аb€Кc€Мd€Цf€Ыg€оh€ѓk€p€ u€Bw€Ox€[{€h€nƒ€„€Ѕ‹€Ф€т•€›€fœ€›Ё€ЈЄ€ЗІ€НЇ€ X \ Ї Ћ Ж К Х Щ д и р ф ( ( psDec->fs_kHz == 12 ) && ( L % 3 ) == 0 ) || ( ( psDec->fs_kHz != 12 ) && ( L % 2 ) == 0 )j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_decode_frame.c,L > 0 && L <= (20 * 24)6;VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SX.textцЖѕѕоD.debug$Sˆ l’ $LN19 $LN18$LN20є$LN21ь .rdataОv^1,  _memcpy - ; Q m Œ Ј С .rdata–шŸб.data†фъŒ.rdata0Їъ„јИh{ Š Ѕ .rtc$TMZ Ь.LМ г .rtc$IMZ žz]т љ .debug$T \_SKP_Silk_decode_frame_SKP_Silk_biquad??_C@_1LO@DMEPPJEN@?$AA?$CI?$AA?5?$AA?$CI?$AA?5?$AAp?$AAs?$AAD?$AAe?$AAc?$AA?9?$AA?$DO?$AAf?$AAs?$AA_?$AAk?$AAH?$AAz?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA1?$AA2?$AA?5?$AA?$CJ?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AA?5?$AAL@_SKP_Silk_CNG_SKP_Silk_PLC_glue_frames_SKP_Silk_PLC_SKP_Silk_decode_core_SKP_Silk_decode_parameters_SKP_Silk_decode_parameters_v4_SKP_Silk_decode_indices_v4_SKP_Silk_range_dec_init__CrtDbgReportW??_C@_1JG@NFKKGHCO@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_decode_frame@@9@9??_C@_1DA@PFPDKGMN@?$AAL?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAL?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA?$CI?$AA2?$AA0?$AA?5?$AA?$CK?$AA?5?$AA2?$AA4?$AA?$CJ?$AA?$AA@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase /3995 1273638395 100666 20186 ` Lћ-ъK@Bf.drectveA„ .debug$SрХЅ@B.textЉЙb, P`.debug$SиŽ-f5@B.rdata.6@0@.rdata$>6@0@.rdata”b6@@@.dataі6@0Р.rdata<њ6@0@.rtc$TMZ67:7@0@.rtc$IMZD7H7@0@.textЗR7 : P`.debug$S‹:›<@B.rdataЭ<@0@.rdataŒс<@@@.datam=@0Р.rdataq=@0@.text_ƒ=т= P`.debug$Sє>є>@B.textр&? P`.debug$SЌ@ВA@B.debug$T\фA@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‰TJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_decode_core.obj:<!ovovMicrosoft (R) Optimizing Compilerѕ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_decode_core.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё:. lSKP_Silk_Quantization_Offsets_Q10"@SA_Method"SA_ParameterДSKP_Silk_decoder_stateОSKP_Silk_decoder_controlУSKP_Silk_PLC_struct!wchar_tгSKP_Silk_CNG_struct"SA_AttrTargetsSKP_Silk_NLSF_CBS usize_t!ЧSKP_Silk_range_coder_state!ЧSKP_Silk_range_coder_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structУSKP_Silk_PLC_structгSKP_Silk_CNG_structДSKP_Silk_decoder_stateОSKP_Silk_decoder_control|SKP_Silk_NLSF_CB_structєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlїЌ№:™ uе№д\с;ЭA’Џ‹ц+7 @#nŽи,ˆ{Œ(yFiдz<G;1=1ѓ™j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_decode_core.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 2064 - ^ = $23 $T0 2068 - ^ = $24 $T0 2072 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 300 - ^ = $23 $T0 304 - ^ = $24 $T0 308 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = Ј Ќ U‹ьь SVWНєїџџЙИЬЬЬЬѓЋЁ3Х‰EќЧEм‹EƒИu&hj‹ ƒСQhjшƒФƒјuЬ‹E ‹ˆЄ‹U ‹‚ брПŒˆ‰8ћџџ‹E ƒИЈ} ЧEФыЧEФ‹E ‹H ‰DћџџЧEєы ‹EєƒР‰Eє‹E‹Mє;ˆр+…‹…DћџџiР5„Г kc6‰…Dћџџ‹…DћџџСј‰…,ћџџ‹Eє‹M‹Ст •8ћџџ‹Eє‹M‰”8‹Eє‹M‹”83•,ћџџ+•,ћџџ‹Eє‹M‰”8‹Eє‹M‹•Dћџџ‰•Dћџџщ`џџџ‹E8‰…tћџџ‹EИ‰…hћџџ‹E‹ˆр+‹U„J8$‰Eˆ‹E‹M‹‘р+‰И+ЧEшы ‹EшƒР‰Eшƒ}шA‹EшбјСр‹M T,‰U ‹E‹ˆш+бсQ‹U R…`џџџPшƒФ ‹EшkР‹M TAl‰U”‹Eш‹M ‹T‰•Œћџџ‹E ‹ˆ”‰MЌ‹E ‹ˆЄ‰MИ‹ŒћџџбљИџџџ™їљ‰…,љџџН,љџџџ}‹…,љџџ‰…јџџы Ч…јџџџ‹јџџ‰,љџџЧ…љџџ‹E‹,љџџ;ˆt!j‹E‹ˆQ‹•,љџџRшƒФ ‰…љџџ‹EƒИh7tZ‹EƒИl7uN‹E ƒИЄuBƒ}ш}с€Šт€–у€оф€*х€6ц€~ч€Ъъ€цэ€ю€ђ€)ѓ€є€†ї€Ўј€Цљ€оњ€№ћ€ѕў€!€ X \ І Њ Е Й Ф Ш г з т ц ё ѕ ˆ Œ psDec->LPC_order == 10inv_gain_Q16 != 0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_decode_core.c'psDec->prev_inv_gain_Q16 != 06;U‹ьь(SVWНиўџџЙJИЬЬЬЬѓЋƒ} u%hjЁƒРPhjшƒФƒјuЬƒ}}%hjЁƒРPhjшƒФƒјuЬƒ}~ ‹E‰…шўџџы ‹Mїй‰шўџџ‹•шўџџRшƒФƒш‰Eј‹E‹Mјгр‰EШƒ} ~ ‹E ‰…шўџџы ‹M їй‰шўџџ‹•шўџџRшƒФƒш‰Eь‹E ‹Mьгр‰EМ‹MМСљИџџџ™їљ‰Eд‹EШСјПMдЏС‹UШтџџПMдЏбСњТ‰EА‹EМ™‹Ш‹ђ‹EА™RPVQшБ шСр‹UШ+а‰UШ‹EШСјПMдЏС‹UШтџџПMдЏбСњUАа‰UА‹EјƒР+Eь+E‰Eрƒ}р‹MрїйИ€гј‹MрїйКџџџгњ;Т~m‹MрїйИ€гј9EА~‹MрїйК€гњ‰•шўџџы:‹MрїйИџџџгј9EА}‹MрїйКџџџгњ‰•фўџџы ‹EА‰…фўџџ‹фўџџ‰шўџџ‹•шўџџ‰•рўџџыk‹MрїйИџџџгј9EА~‹MрїйКџџџгњ‰•мўџџы:‹MрїйИ€гј9EА}‹MрїйК€гњ‰•иўџџы ‹EА‰…иўџџ‹иўџџ‰мўџџ‹•мўџџ‰•рўџџ‹Mрїй‹…рўџџгрыыƒ}р } ‹EА‹Mргјыы3Р_^[Ф(;ьш‹х]У%R,N5J<!PFWN`Jg!˜[д[3T:SЏ/ѕ$З( C ё4ЗЃлSKP_DIV32_varQ(Рh € a32  b32 Qres ьџџџtb_headrm рџџџtlshift Аџџџtresult јџџџta_headrm Мџџџtb32_nrm Шџџџta32_nrm дџџџtb32_invђИЗјЌ„€ˆ€I‰€tŒ€Ѕ€АŽ€с€ь’€§•€"˜€I›€qž€€Ÿ€Š €Ё€Ђ€•Ѓ€ŸЄ€ЁІ€ЃЉ€ BXB \B XB \B Qres >= 0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.h„b32 != 0U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E%џџt‹EСјPшƒФыыЗEPшƒФƒР_^[ФР;ьш‹х]У0bAbW/ѕ$_РЕ ёi4_KSKP_Silk_CLZ32РР € tin32ђH_<p€r€(s€9t€;u€Kw€ [X[ \[ Ќ[ А[ U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјПE…Рu ИщЂПE%џt0ПE%№tf‹EfСј f‰Eы‹EјƒР‰Eјf‹EfСјf‰Eы+ПE%№џt‹EјƒР‰Eјf‹EfСјf‰Eы ‹EјƒР ‰EјПEƒр tПEƒрt‹Eјы%ы‹EјƒРыыПEƒрt ‹EјƒРыы‹EјƒР_^[‹х]Уѕ$рЬ' ё{4рй SKP_Silk_CLZ16ЬР € in16 јџџџtout32ђ№рфL€M€%N€-O€7R€BS€MT€YU€[V€dW€pY€rZ€}[€†\€’]€”^€b€Іc€Џd€Дe€Жf€Оg€Рh€Щi€бj€гk€йm€ bXb \b Мb Рb VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SрŽц.textЉј…e№ сŸl.debug$SићщД $LN65ˆ$LN64’$LN63š$LN62Ÿ$LN66X$LN67P.rdata.˜з .rdata$_ИdЖБ+ _memset _memcpy Cf .rdata”Yl]Rv.data‡—х=1.rdata <тЁщ\ ) 8 S .rtc$TMZ Ь.Lj  .rtc$IMZ žz] Ї .text З №ъэ Љс:.debug$S  Фѓ_ŽЖ .rdataљлЗ.Ц.rdataŒы.datal!;bг.rdataік–!__allshr __allmul .text_йIѕ=vЄёC.debug$Sє:Яq‘N .textр}BИ#u‘ћ.debug$SЌбЛ5с^ .debug$T\n_SKP_Silk_decode_core??_C@_1CO@FMFHOPIM@?$AAp?$AAs?$AAD?$AAe?$AAc?$AA?9?$AA?$DO?$AAL?$AAP?$AAC?$AA_?$AAo?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA1?$AA0?$AA?$AA@??_C@_1CE@CDCNPFHF@?$AAi?$AAn?$AAv?$AA_?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_Silk_MA_Prediction_SKP_Silk_Quantization_Offsets_Q10__CrtDbgReportW??_C@_1JE@NHFBEJPL@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_decode_core@@9@9??_C@_1DM@BCPANHBF@?$AAp?$AAs?$AAD?$AAe?$AAc?$AA?9?$AA?$DO?$AAp?$AAr?$AAe?$AAv?$AA_?$AAi?$AAn?$AAv?$AA_?$AAg?$AAa?$AAi?$AAn?$AA_?$AAQ?$AA1?$AA6?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_DIV32_varQ??_C@_1BE@NOJNLPIL@?$AAQ?$AAr?$AAe?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1IM@NKJIPJPB@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_DIV32_varQ@@9@9@fcbb61fb??_C@_1BC@LJHCOKEE@?$AAb?$AA3?$AA2?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@_SKP_Silk_CLZ32_SKP_Silk_CLZ16/4033 1273638395 100666 16214 ` Lћ-ъKє5c.drectveAф .debug$S\%@B.rdata@0@.text8‡ P`.debug$SПЯ@B.rtc$TMZ@0@.rtc$IMZ@0@.textQn P`.debug$S$‚І@B.text‚иZ  P`.debug$Sш!%@B.textаЊ%z( P`.debug$SH$)l,@B.textи-к/ P`.debug$S0p0 3@B.text*64`4 P`.debug$Sшj4R5@B.debug$T\˜5@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёPJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_dec_API.obj:<!ovovMicrosoft (R) Optimizing Compilerё=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_dec_API.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёŽ"@SA_Method"SA_ParameterДSKP_Silk_decoder_state$SKP_SILK_SDK_DecControlStructОSKP_Silk_decoder_controlУSKP_Silk_PLC_struct!wchar_tSKP_Silk_TOC_structгSKP_Silk_CNG_struct"SA_AttrTargetsSKP_Silk_NLSF_CBS usize_t!ЧSKP_Silk_range_coder_state$SKP_SILK_SDK_DecControlStructSKP_Silk_TOC_struct!ЧSKP_Silk_range_coder_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structУSKP_Silk_PLC_structгSKP_Silk_CNG_structДSKP_Silk_decoder_stateОSKP_Silk_decoder_control|SKP_Silk_NLSF_CB_structєˆ˜›*'Я#ћ@5юm gљGB5|†?ЕP ќž}o[kЈяЉЌŸ"+ќqЅ’СмсгU#[Т)oњ mњюQл'fЊWb!Ј?~NЯзѕьW[иC-д2ўрм…ьЊ6о–ЙОџ„w„љ”m–˜ЊдЉ№УД‰ >GO“VРА,п:@ў,^žїY†ЗLŽ_Ы'_PƒkЛYŒ^ЁA^ŠћsM,uОЈ~е*Јн­Wыћ%iАлъЩ}*Мj_П#ХuХДR†(,Аз"Ќшš>šљ%?dlr’Џ‹ц+7 @#nŽи,ˆ{Н>№x гbќ:Tи™Ж+Ы prХО)ж$olŽг>u,GЬXўrToрџЊtЩ‰з„~nЅUX љq.Ё Яoьar6Z<Ѓ:…QЅB (yFiдz<G;1=1ѓ™ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sdk_api.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_control.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_dec_api.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 220 - ^ = $23 $T0 224 - ^ = $24 $T0 228 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 7944 - ^ = $23 $T0 7948 - ^ = $24 $T0 7952 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 16536 - ^ = $23 $T0 16540 - ^ = $24 $T0 16544 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = 1.0.2U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEј‹EЧt7‹Eј_^[‹х]Уѕ$8ЬV ёC81ѓSKP_Silk_SDK_Get_Decoder_SizeЬР € tdecSizeBytes јџџџtretђ@8@4$€%€%'€.)€1*€ X \ а д U‹ььиSVWН(џџџЙ6ИЬЬЬЬѓЋЧEј‹E‰Eь‹EьPшƒФ‰Eј‹Eј_^[Фи;ьш‹х]У0$I%ѕ$QиШ ё™>Q="SKP_Silk_SDK_InitDecoderиР € decState ьџџџ­struc јџџџtretђHQ@<0€1€%4€+6€:8€=9€ #X# \# м# р# U‹ьИшSVWНќрџџЙСИЬЬЬЬѓЋЁ3Х‰EќЧEє‹E‰Eа‹EаƒИ<,u ‹EаЧ€4,‹EаƒИ<,uƒ}u}~ЧEЧEєѕџџџ‹Eа‹ˆм+‰MмEшP‹MQ‹UR‹EP‹M Q‹UR‹EаPшƒФEє‰Eєƒ}ш„я‹EаƒИ0,~*‹EаƒИ@,u‹EаƒИ4,}‹EаЧ€<,щЙ‹EаЧ€<,‹Eа‹Mа‹‘4,‰8,‹EаƒИє.…Š‹EаƒИ@,u0‹Eа‹ˆј.ƒС‹Uа‰Šј.‹EаƒИј. ~ ‹EаЧ€ќ.ыN‹EаƒИ@,u‹EаЧ€ќ.‹EаЧ€ј.ы&‹EаƒИ@,u‹EаЧ€ќ.‹EаЧ€ј.‹Eа‹ˆм+iЩш‹U ; ~ЧEєіџџџ‹Eа‹ˆм+iЩш‹U ; „т‹E ПбсQ‹UR…HјџџPшƒФ ‹Eа‹Mм;ˆм+tju%‹E ПQ•HјџџR‹EаD,P‹MQшƒФы~‹EаƒИм+u8‹E 8€>u-‹E ПQ•РсџџR‹EP‹MаСD,Q•HјџџRшƒФы:‹EаƒИм+u.‹E 8р.u#‹E ПQ•HјџџR‹EаD,P‹MQшƒФ‹E П‹M Џ‹Uа‹Šм+iЩш™їљ‹U f‰‹E ‹Mа‹‘р+‰P‹E ‹Mа‹‘8,‰P‹E ‹Mа‹‘ќ.‰P‹E ‹Mа‹‘<,‰P ‹EєR‹ЭPшXZ_^[‹Mќ3ЭшФ;ьш‹х]УIшџџџHјџџ€Рсџџ€scratchsamplesOut_tmpused_bytes <#9Є8і76S5š4й32\4˜51 ;:)%80D/P.\-ѕ$‚:, ёч9‚,‚$SKP_Silk_SDK_DecodeРD … :ќџџџ      decState  decControl tlostFlag (inData nBytesIn samplesOut  nSamplesOut аџџџ­psDec єџџџtret шџџџtused_bytes мџџџtprev_fs_kHzтс Рсџџёscratch HјџџŒsamplesOut_tmpђР‚@5ДE€,F€3I€9N€EP€RU€mW€tX€{\€‡`€Бb€Лc€пe€ьf€ёh€ўi€l€ m€,n€Ao€Mp€Zq€\r€hs€ut€„u€v€w€Њ}€Р~€Ч‚€с‡€§Š€ ‹€ Ž€7€_‘€v“€І”€Н–€х—€ќ™€!š€8œ€e€|Ÿ€ŸЂ€УІ€вЇ€сЈ€№Љ€џЋ€Ќ€ ,X, \, Ѕ/ Љ/ Д. И. У- Ч- в0 ж0 с1 х1 с, х, (, ,, U‹ьИ”@шSVWНlПџџЙ%ИЬЬЬЬѓЋЁ3Х‰Eќ‹E‰Eєƒ}|ƒ}~ 3Р‹Mf‰щЧ…ЌєџџЧ…Tєџџj@j…dєџџPшƒФ ПEP‹M Q•xШџџRшƒФ ‹EєƒИp7…њ…xШџџPшƒФ3Р‹Mf‰‹…Иєџџƒш#E„ЬƒНИєџџŽПƒНЈєџџŒВЧ…ИЧџџы‹…ИЧџџƒР‰…ИЧџџ‹…ИЧџџ;…Аєџџ}Uj…0РџџPФЧџџQ•xШџџRшƒФƒНЈєџџ~ ƒНˆШџџtЧE3Р‹Mf‰ыы‹…ЌєџџƒР‰…ЌєџџыŽƒ}t.‹Ef‹Јєџџf‰‹…ЈєџџPПM+ЈєџџM Q‹URшƒФ щЫИ…Р„Оj…0РџџPФЧџџQ•xШџџRшƒФƒНˆШџџt 3Р‹Mf‰щ‰‹…Иєџџƒш#EtBƒНИєџџ~9ƒНЈєџџ|0‹Ef‹Јєџџf‰‹…ЈєџџPПM+ЈєџџM Q‹URшƒФ ы9ƒНЈєџџ~ƒНИєџџu‹…ЌєџџƒР‰…ЌєџџыЧE3Р‹Mf‰ыщ5џџџR‹ЭPшXZ_^[‹Mќ3ЭшФ”@;ьш‹х]У‹џxШџџt7ФЧџџЌ0Рџџ€TempQsDecCtrlsDec <#9k6ƒLЂKJˆ7ЙI7eHj;y:†%”G FЌEИDѕ$а”@Џ, ё–Bа,а&SKP_Silk_SDK_search_for_LBRR”@Рд? … :ќџџџ      decState  (inData nBytesIn tlost_offset  LBRRData nLBRRBytes єџџџ­psDec 0РџџЎTempQ xШџџДsDec ФЧџџОsDecCtrl ИЧџџtiђpа@+dЗ€,Н€2П€>С€FТ€KХ€UЦ€_Ч€rШ€ŠЪ€šЬ€ЉЯ€Ба€нв€г€%е€7з€>и€Fй€Hк€Jл€Yн€[п€aс€nт€х€”ц€Ёч€Рщ€Щы€бь€жя€іё€ђ€$ѓ€&ѕ€8і€Gї€Iј€Pљ€Xњ€Zќ€_ў€ CXC \C ЎF ВF НE СE ЬD аD лG пG ъH юH иC мC U‹ьИ”@шSVWНlПџџЙ%ИЬЬЬЬѓЋЁ3Х‰Eќ‹E‰EєЧ…ЌєџџЧ…TєџџПEP‹M Q•xШџџRшƒФ ‹EєƒИp7…ы…xШџџPшƒФƒНАєџџ ƒНˆШџџtj8j‹EPшƒФ ‹EЧ@ щІ‹EЧ@ ‹E‹Аєџџ‰‹E‹Tєџџ‰HƒНИєџџu‹E‹Иєџџ‰Hы‹…Иєџџƒш‹M‰AЧ…ИЧџџы‹…ИЧџџƒР‰…ИЧџџ‹…ИЧџџ;…Аєџџ}6‹…ИЧџџ‹M‹•ИЧџџ‹”•Xїџџ‰T‹…ИЧџџ‹M‹•ИЧџџ‹”•ѕџџ‰T$ы­щ‹EЧ@ И…Р„„j…0РџџPФЧџџQ•xШџџRшƒФ‹…Ќєџџ‹M‹•lїџџ‰T‹…Ќєџџ‹M‹•hШџџ‰T$ƒНˆШџџt ‹EЧ@ ы*ƒНЈєџџ~ƒНИєџџu‹…ЌєџџƒР‰…Ќєџџыыщoџџџ‹Eƒx uƒНИєџџt ƒНАєџџ~j8j‹EPшƒФ ‹EЧ@ ы=‹E‹Ќєџџ‰‹E‹Tєџџ‰HƒНИєџџu‹E‹Иєџџ‰Hы‹…Иєџџƒш‹M‰AR‹ЭPшXZ_^[‹Mќ3ЭшФ”@;ьш‹х]УxШџџt7ФЧџџЌ0Рџџ€TempQsDecCtrlsDec <#9WLvK˜6ˆI6nXs;‚:%œWЈVДUРTѕ$и”@Џ, ё_:и,и(SKP_Silk_SDK_get_TOC”@Рд? … :ќџџџ      decState  (inData nBytesIn Silk_TOC єџџџ­psDec 0РџџЎTempQ xШџџДsDec ФЧџџОsDecCtrl ИЧџџtiђи@/„€, €2€<€F€^€n€}€€Ÿ€Љ€Ў€И€У€Я€и €ф!€ц"€ѕ%€&€8'€R(€T*€Y+€c,€p-€/€Ђ0€Е2€О4€Ш5€Ъ8€м9€ы:€э;€я=€є?€A€B€)C€+D€6E€BF€KG€WH€YI€hM€ SXS \S ІV ЊV ЕU ЙU ФT ШT гW зW тX цX  S ЄS U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋИ_^[‹х]У ѕ$*Р'  ёx>*#*SKP_Silk_SDK_get_versionРР €  versionђ0*@$T€V€#W€ _X_ \_ ž Ђ И_ М_ VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S\.rdataW‚_ž.text8аv=%ЮG•`.debug$S_с;Ъ/ .rtc$TMZЬ.LNe .rtc$IMZžz]t‹ .textQќ’›]jгЩ.debug$S $qNуš Д Ы .text ‚ь—пxZж.debug$S ш ˆC]к $LN31` $LN30h $LN29w $LN32< $LN334 я   ; _memset _memcpy R i| — __chkstk .text ањЮЬZœог.debug$S H ЊЯЎ $LN23М $LN22Т $LN21Ы $LN24˜ $LN25 Ь ш  # .textиЗрСЛEј.debug$S0мHuх< $LN25Ф$LN24Ъ$LN23г$LN26 $LN27˜.text*`§ШŽX…G.debug$SшšF R .debug$T\l?version@?1??SKP_Silk_SDK_get_version@@9@9_SKP_Silk_SDK_Get_Decoder_Size__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_SDK_InitDecoder_SKP_Silk_init_decoder__RTC_CheckEsp_SKP_Silk_SDK_Decode_SKP_Silk_resample_4_3_SKP_Silk_resample_3_1_SKP_Silk_resample_2_1_coarse_SKP_Silk_resample_3_2_SKP_Silk_decode_frame___security_cookie@__security_check_cookie@4@_RTC_CheckStackVars@8_SKP_Silk_SDK_search_for_LBRR_SKP_Silk_decode_parameters_SKP_Silk_decode_parameters_v4_SKP_Silk_decode_indices_v4_SKP_Silk_range_dec_init_SKP_Silk_SDK_get_TOC_SKP_Silk_SDK_get_version/4067 1273638395 100666 6442 ` Lћ-ъK!!.drectveA, .debug$S(m@B.text”•) P`.debug$S[w@B.rtc$TMZЉ­@0@.rtc$IMZЗЛ@0@.debug$T\Х@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё™\J:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_create_init_destroy.obj:<!ovovMicrosoft (R) Optimizing Compiler§=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_create_init_destroy.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёШ"@SA_Method"SA_ParameterДSKP_Silk_decoder_stateУSKP_Silk_PLC_struct!wchar_tгSKP_Silk_CNG_struct"SA_AttrTargetsSKP_Silk_NLSF_CBS usize_t!ЧSKP_Silk_range_coder_state!ЧSKP_Silk_range_coder_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structУSKP_Silk_PLC_structгSKP_Silk_CNG_structДSKP_Silk_decoder_state|SKP_Silk_NLSF_CB_structєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlїшћ•у!Ы@„NњВуЫЂŠI’Џ‹ц+7 @#nŽи,ˆ{”(yFiдz<G;1=1ѓHj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_create_init_destroy.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋht7j‹EPшƒФ j‹EPшƒФ‹EЧ€,,‹EЧ€‹EPшƒФ‹EPшƒФ‹EЧ€p73Р_^[ФР;ьш‹х]У*8^jŒѕ$”Рж ёq;”€SKP_Silk_init_decoderРР € ­psDecђh” \%€&€1(€?+€L,€Y/€e1€q3€~5€€6€ X \ Д И VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S(.text”ХZVыЂєŸЬ.debug$SИŒјƒ  / C _memset \ .rtc$TMZЬ.Lk‚ .rtc$IMZžz]‘Ј .debug$T\З_SKP_Silk_init_decoder_SKP_Silk_PLC_Reset_SKP_Silk_CNG_Reset_SKP_Silk_decoder_set_fs__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/4113 1273638395 100666 11766 ` Lћ-ъKГ&F.drectveA” .debug$Sе@B.text0н  P`.debug$SIQ@B.rdatašƒ@@@.data@0Р.rdata!@0@.rtc$TMZ;?@0@.rtc$IMZIM@0@.textIW  P`.debug$Spt! @B.text_і!U" P`.debug$Sєs"g#@B.textр™# P`.debug$SЌy$%&@B.debug$T\W&@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёWJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_corrMatrix_FIX.obj:<!ovovMicrosoft (R) Optimizing Compilerј=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_corrMatrix_FIX.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tєXprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9-fєэE§~MVŒХкЭЌ†’Џ‹ц+7 @#nŽи,ˆ{ѓ™j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_corrmatrix_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 256 - ^ = $23 $T0 260 - ^ = $24 $T0 264 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 296 - ^ = $23 $T0 300 - ^ = $24 $T0 304 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = U‹ььќSVWНџџџЙ?ИЬЬЬЬѓЋ‹E‹MTAў‰Uр‹E ‰Eдƒ}~xЧEјы ‹EјƒР‰Eј‹Eј;E}\ЧEШЧEьы ‹EьƒР‰Eь‹Eь;E}$‹Eь‹MрПA‹Eь‹MдПAЏа‹MгњUШ‰UШыЫ‹Eј‹M‹UШ‰‹Eрƒш‰Eры“ыmƒ}t%hjЁƒРPhjшƒФƒјuЬЧEјы ‹EјƒР‰Eј‹Eј;E}(‹EP‹MдQ‹UрRшƒФ ‹Mј‹U‰Š‹Eрƒш‰EрыЧ_^[Фќ;ьш‹х]УЖНЦЭ(ѕ$0ќб ё=0žSKP_Silk_corrVector_FIXќР< € x  t L order tXt rshifts јџџџtlag дџџџptr2 Шџџџtinner_prod рџџџptr1 ьџџџtiђА0(Є+€0€+1€13€75€Q6€X7€r8€”9€–:€Ђ;€Ћ<€­=€Џ>€к?€є@€A€B€D€ X \ X \ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_corrmatrix_fix.c+rshifts == 0"'U‹ьь$SVWНмўџџЙIИЬЬЬЬѓЋ‹E‹M TџR‹EPMдQUМRшƒФ‹EМPшƒФЙ+Ш…Щ~‹UМRшƒФЙ+Ш‰мўџџы Ч…мўџџ‹•мўџџ‰UШ‹EМ‹MШгј‰EМ‹EдEШ‰EдЧEјы ‹EјƒР‰Eј‹Eƒш9Eј}&‹Eј‹MПA‹Eј‹MПAЏа‹Mдгњ‹MМ+Ъ‰MМыЦ‹E‹Mд;}‹E‹+Mд‹UМгњ‰UМ‹E‹‰Mд‹EkР‹M‹UМ‰‹E‹MTAў‰UАЧEьы ‹EьƒР‰Eь‹Eь;E}e‹E +Eь‹MАПA‹E +Eь‹MАПAЏа‹Mдгњ‹MМ+Ъ‰MМ‹Eьїи‹MАПA‹Eьїи‹MАПAЏа‹MдгњUМ‰UМ‹EьЏEEь‹M‹UМ‰ыŠ‹E‹MTAќ‰UЄƒ}дŽ<ЧEры ‹EрƒР‰Eр‹Eр;EЧEМЧEјы ‹EјƒР‰Eј‹Eј;E }$‹Eј‹MАПA‹Eј‹MЄПAЏа‹MдгњUМ‰UМыЫ‹EрЏE‹M‹UМ‰‹EkРEр‹M‹UМ‰ЧEьы ‹EьƒР‰Eь‹E+Eр9Eьƒ‹E +Eь‹MАПA‹E +Eь‹MЄПAЏа‹Mдгњ‹MМ+Ъ‰MМ‹Eьїи‹MАПA‹Eьїи‹MЄПAЏа‹MдгњUМ‰UМ‹EрEьЏEEь‹M‹UМ‰‹EьЏE‹MрMьС‹U‹MМ‰ ‚щeџџџ‹EЄƒш‰EЄщвўџџщћЧEры ‹EрƒР‰Eр‹Eр;Eн‹E P‹MЄQ‹UАRшƒФ ‰EМ‹EрЏE‹M‹UМ‰‹EkРEр‹M‹UМ‰ЧEьы ‹EьƒР‰Eь‹E+Eр9Eь}y‹E +Eь‹MАПA‹E +Eь‹MЄПAЏа‹MМ+Ъ‰MМ‹Eьїи‹MАПA‹Eьїи‹MЄПAЏаUМ‰UМ‹EрEьЏEEь‹M‹UМ‰‹EьЏE‹MрMьС‹U‹MМ‰ ‚щsџџџ‹EЄƒш‰EЄщџџџ‹E‹Mд‰R‹ЭPшXZ_^[Ф$;ьш‹х]УIдџџџМџџџenergyrshifts_local63B;Y;ђ2ї4 1$00/ѕ$I$C ё‡=II›SKP_Silk_corrMatrix_FIX$Рd €     x  L order tXX trshifts ьџџџtj рџџџtlag Шџџџthead_room_rshifts Єџџџptr2 Аџџџptr1 дџџџtrshifts_local Мџџџtenergy јџџџtiђЈI(2œN€T€=W€‚Y€Z€–^€Г_€з`€йa€уc€ѓd€ћi€ j€k€1l€[m€n€”o€–q€Ѓs€­u€Ыw€вx€ьy€z€|€ }€2~€S€}€€Ѓ€Й‚€бƒ€ж„€п…€ф†€щ‡€‰€Š€.‹€@€]Ž€‚€Ѓ€Й‘€б’€ж“€п”€ф–€ь—€ .X. \. 0 Ё0 Ќ/ А/ Л1 П1 Ъ2 Ю2 Ш. Ь. U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E%џџt‹EСјPшƒФыыЗEPшƒФƒР_^[ФР;ьш‹х]У0BABWѕ$_РЕ ёi4_KSKP_Silk_CLZ32РР € tin32ђH_<p€r€(s€9t€;u€Kw€ ;X; \; Ќ; А; U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјПE…Рu ИщЂПE%џt0ПE%№tf‹EfСј f‰Eы‹EјƒР‰Eјf‹EfСјf‰Eы+ПE%№џt‹EјƒР‰Eјf‹EfСјf‰Eы ‹EјƒР ‰EјПEƒр tПEƒрt‹Eјы%ы‹EјƒРыыПEƒрt ‹EјƒРыы‹EјƒР_^[‹х]Уѕ$рЬ' ё{4рй SKP_Silk_CLZ16ЬР € in16 јџџџtout32ђ№рфL€M€%N€-O€7R€BS€MT€YU€[V€dW€pY€rZ€}[€†\€’]€”^€b€Іc€Џd€Дe€Жf€Оg€Рh€Щi€бj€гk€йm€ BXB \B МB РB VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S.text0%hŒљЄ1.debug$SƒШh  : .rdatašlˆЧJ.data?(3w.rdata,ып?3” .rtc$TMZЬ.LЃК .rtc$IMZ žz]Щ р .text I pY s^eG.debug$S p О_зˆя $LN304 $LN29; $LN31 $LN32    .text _йIѕ=vЄёC.debug$S є :Яq‘7 .textр}BИ#u‘ћ.debug$SЌбЛ5сG .debug$T\W_SKP_Silk_corrVector_FIX_SKP_Silk_inner_prod_aligned__CrtDbgReportW??_C@_1JK@DHFFBKFD@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_corrVector_FIX@@9@9??_C@_1BK@GPMMKKOB@?$AAr?$AAs?$AAh?$AAi?$AAf?$AAt?$AAs?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_corrMatrix_FIX_SKP_Silk_sum_sqr_shift@_RTC_CheckStackVars@8_SKP_Silk_CLZ32_SKP_Silk_CLZ16/4154 1273638396 100666 25964 ` Lќ-ъK=U‡.drectveA4 .debug$S”u @B.textƒН@4‹ P`.debug$SМЎ9jJ_@B.rdataP N@@@.rdataDpN@@@.rdataTДN@@@.rdatazO@@@.rdata ‚O@@@.data"P@0Р.rdata&P@0@.rtc$TMZ*P.P@0@.rtc$IMZ8Pu,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9џс5ѓG:4@$ќ9~“Љ‰’Џ‹ц+7 @#nŽи,ˆ{ѓ3j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_control_codec_fix.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 122240 - ^ = $23 $T0 122244 - ^ = $24 $T0 122248 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = ДG ИG зF лF њI ўI H !H @3 D3 b2 f2 „1 ˆ1 І0 Њ0 Щ/ Э/ U‹ьИ|ншSVWН„"ўџЙ_wИЬЬЬЬѓЋЁ3Х‰EќЧEа‹E‹ˆФ‰Mмƒ} tƒ}мt‹E ;Eм} ‹E ‰EмщЮ ‹EƒИФ…у‹EƒИШu ‹E-ЈaЏE$‹M‹U‰‚ы‹E-0uЏE$‹M‹U‰‚‹EƒИ}‹M‹‘‰•„"ўџы Ч…„"ўџ‹E‹„"ўџ‰ˆ‹EƒИ8uP‹EИ€<6ў~ ‹EƒИ u5‹EИ(Є€}&‹EƒИи u‹EЧ€8‹EЧ€<‹EИ8€Œя‹EƒИ<…п‹EИ(Є€Ь‹EƒИи …М‹EЧ€ЧEмhp‹E ›P@їџџQшƒФ j,j‹E PшƒФ ‹E‹ˆЬ‹U‹‚и HQ•@їџџR‹E PШюџџQшƒФh€j…ШюџџPшƒФ hp…ШюџџP‹MС ›QшƒФ ‹EЧ€8щл ‹EƒИФ…Д‹EƒИ8…‹E‹M ;ˆФާ}ИˆŒ№‹EƒИ …р‹EИ(Є€Э‹EƒИи …Н‹EЧ€ЧEмhp‹E ›PPцџџQшƒФ j,j…lйџџPшƒФ ‹E‹ˆЬ‹U‹‚и HQ•PцџџR…lйџџP йџџQшƒФhРj… йџџPшƒФ hp… йџџP‹MС ›QшƒФ ‹EЧ€<щ‹E-˜:ЏE$‹M‹U‰‚‹EƒИ}‹M‹‘‰•„"ўџы Ч…„"ўџ‹E‹„"ўџ‰ˆ‹EƒИ8uD‹EИ€<6ў5‹EИ(Є€}&‹EƒИи u‹EЧ€8‹EЧ€<‹EИ8€Œй‹EƒИ<…Щ‹EИ(Є€Ж‹EƒИи …Іhp‹E ›PєаџџQшƒФ ‹EЧ€ЧEм ƒ} …кj,j…h‘џџPшƒФ ‹E‹ˆЬ‹U‹‚и HQ•єаџџR…h‘џџPDФџџQшƒФjj‹E8PшƒФ ‹E‹ˆЬ‹U‹‚и HПбkвСњR…œ‘џџPєаџџQ‹UТ8R…DФџџPшƒФhрj…єаџџPшƒФ hp…єаџџP‹MС ›QшƒФ щ„ƒ} u~j €e €q€€Љ€в€о€€€.€@€L€X€a€m€v€‚€‰ €‹!€’#€Њ%€И&€у'€(€*€2€53€<4€>5€L6€X9€d>€p?€wA€ƒD€E€–I€ІK€ВL€ОM€ЧN€гO€мP€шQ€яR€ёS€јV€[€,^€D`€`a€bb€oc€|e€~f€‹g€˜o€Єp€Ћr€Зt€Кu€ X \ Ў+ В+ Н* С* Ь) а) л( п( ъ' ю' љ& §& % % $ $ &# *# 5" 9" D! H! S W b f q u € „  “ ž Ђ ­ Б М Р Ы Я к о щ э ј ќ     % ) 4 8 C G R V a, e, p- t- ц ъ ( , Š Ž Г З   J N s w я ѓ   {  Ъ Ю ў  ' + ‰  ь № psEnc->sCmn.nStatesDelayedDecision <= 4psEnc->sCmn.shapingLPCOrder <= 16psEnc->sCmn.pitchEstimationLPCOrder <= 16( psEnc->sCmn.subfr_length * 4 ) == psEnc->sCmn.frame_lengthj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_control_codec_fix.c*0inU‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФO ёq1G@.SKP_min_intФР € ta  tbђ0G$з€и€@й€ uXu \u Дu Иu U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E ~ ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФO ёq1G@.SKP_max_intФР € ta  tbђ0G$щ€ъ€@ы€ |X| \| Д| И| U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋ‹EƒИt4ЧEј‹EИ(Є€~‹EƒИф~ЧEј‹E ‹Mј‰H|ы ‹E Ч@|_^[‹х]Уѕ$oЬС ёŸ<oh™SKP_Silk_LBRR_ctrl_FIXЬР € VpsEnc  hpsEncCtrl јџџџtLBRR_usageђ`o( T|€€*„€1…€L‰€SŒ€\€^Ž€h€ ƒXƒ \ƒ рƒ фƒ VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S”хE?-.textƒ‹e6Ž h`‘Ю.debug$SМ_ˆŸ=С $LN145P$LN144c$LN143k$LN142s$LN141†$LN140Ž$LN139–$LN138œ$LN137Ѕ$LN136Й$LN135С$LN134е$LN133н$LN132х$LN131ы$LN130џ$LN129$LN128$LN127$LN126$LN125'$LN124;$LN123C$LN122K$LN121Q$LN120e$LN119n$LN118t$LN117}$LN146є$LN147ь" 7E[p….rdataPпrˆ2š.rdataDDтrT.rdataTfХš<а ц .rdatazЯ(žєЛбч§ .rdata  Ў‘_# .data ZOЯн .rdata Ёј+№ 0 G ^ | “ Б Ш _memset _memcpy пђ   __chkstk .rtc$TMZ Ь.L3 J .rtc$IMZ žz]Y p .textGиьиоп„[Ќ.debug$SфкJаˆ .textGСв UdЈЏ.debug$SфПVfŒ .textoД№ ›їќa.debug$S@Bcш™ .debug$T\Б_SKP_Silk_control_encoder_FIX_SKP_Silk_LBRR_reset_SNR_table_Q1_TargetRate_table_SWB_TargetRate_table_WB_TargetRate_table_MB_TargetRate_table_NB??_C@_1FA@EDFEJFMG@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAn?$AAS?$AAt?$AAa?$AAt?$AAe?$AAs?$AAD?$AAe?$AAl?$AAa?$AAy?$AAe?$AAd?$AAD?$AAe?$AAc?$AAi?$AAs?$AAi@??_C@_1EE@OAFKHDBG@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAs?$AAh?$AAa?$AAp?$AAi?$AAn?$AAg?$AAL?$AAP?$AAC?$AAO?$AAr?$AAd?$AAe?$AAr?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA1@??_C@_1FE@LHKJNAOP@?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAp?$AAi?$AAt?$AAc?$AAh?$AAE?$AAs?$AAt?$AAi?$AAm?$AAa?$AAt?$AAi?$AAo?$AAn?$AAL?$AAP?$AAC?$AAO?$AAr@_SKP_Silk_NSQ_del_dec_SKP_Silk_NSQ??_C@_1HK@MBKNNGNF@?$AA?$CI?$AA?5?$AAp?$AAs?$AAE?$AAn?$AAc?$AA?9?$AA?$DO?$AAs?$AAC?$AAm?$AAn?$AA?4?$AAs?$AAu?$AAb?$AAf?$AAr?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?5?$AA?$CK?$AA?5?$AA4?$AA?5?$AA?$CJ@_SKP_Silk_NLSF_CB1_16_SKP_Silk_NLSF_CB0_16_SKP_Silk_NLSF_CB1_10_SKP_Silk_NLSF_CB0_10__CrtDbgReportW??_C@_1KA@KGJKKDC@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_control_encoder_FIX@@9@9??_C@_13COJANIEC@?$AA0?$AA?$AA@_SKP_Silk_resample_3_1_SKP_Silk_resample_1_3_SKP_Silk_resample_2_1_coarse_SKP_Silk_resample_3_4_SKP_Silk_resample_1_2_coarse_SKP_Silk_resample_3_2_SKP_Silk_resample_2_3___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_min_int_SKP_max_int_SKP_Silk_LBRR_ctrl_FIX/4198 1273638396 100666 7494 ` L ќ-ъKY+.drectveA| .debug$S НЩ@B.textЃн€ P`.debug$SЌžJ@B.rtc$TMZ|€@0@.rtc$IMZŠŽ@0@.textй˜q P`.debug$SиЗ @B.debug$T\§@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‡SJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_code_signs.obj:<!ovovMicrosoft (R) Optimizing Compilerє=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_code_signs.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёЦ LSKP_Silk_sign_CDF"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_t!ЧSKP_Silk_range_coder_state!ЧSKP_Silk_range_coder_stateєXprХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪkЛY№x гbќ:Tи™Ж+Ы ЫљГ#u8^s.йxХЙSUжпkhHPTЊŒ3їГГјїSЩ}*Мj_П#ХuХДR†(•ЩЄёќ/:ˆзМJntГЬ?ЗмУД‰ >GO“VРА,п&ЬXўrToрџЊtЩh@ў,^žїY†ЗLŽ_Ы'_PБАз"Ќшš>šљ%?dlїУШЫ8ЬЈкBp@]fP@’Џ‹ц+7 @#nŽи,ˆ{‹(yFiдz<G;1=1ѓ?j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_code_signs.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 232 - ^ = $23 $T0 236 - ^ = $24 $T0 240 - ^ = Є Ј U‹ььфSVWНџџџЙ9ИЬЬЬЬѓЋ‹E‹MAПТkР E‰Eј‹EјkР‰EрЧEјы ‹EјƒР‰Eј‹Eј;E}4‹Eј‹M ƒ<t&‹Eј‹M ‹СњƒТ‰Uь‹EрP‹MьQ‹URшƒФ ыЛ_^[Фф;ьш‹х]У:†›ѕ$ЃфЭ ё ;ЃДSKP_Silk_encode_signsфР$ € СsRC  q length sigtype QuantOffsetType RateLevelIndex ьџџџtinData рџџџxcdf јџџџtiђ`Ѓ T-€2€33€A5€[6€g7€y8€:€;€ X \ L P U‹ььфSVWНџџџЙ9ИЬЬЬЬѓЋ‹E‹MAПТkР E‰Eј‹EјkР‰EрЧEјы ‹EјƒР‰Eј‹Eј;E}>‹Eј‹M ƒ<~0j‹EрP‹MQUьRшƒФ‹EьLџ‹Uј‹E Џ ‹Uј‹E ‰ ыБR‹ЭPшXZ_^[Фф;ьш‹х]У‹џьџџџdata:v&Ÿ%Є'ЖФ$а#ѕ$йфЭ ё7;ййSKP_Silk_decode_signsфР$ €    СsRC  tq length sigtype QuantOffsetType RateLevelIndex ьџџџtdata рџџџxcdf јџџџtiђ`й TF€K€3L€AN€[O€gP€}S€—U€™V€ "X" \" ›# Ÿ# Њ$ Ў$ Й% Н% x" |" VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S “$Кˆ.textЃс`ћg Б.debug$SЌ‹$эј  3F .rtc$TMZЬ.LUl .rtc$IMZžz]{’ .textйс‡№PЉЧу.debug$Sи mЂёЁ $LN7д$LN8Ш$LN9РИ а .debug$T \ч_SKP_Silk_encode_signs_SKP_Silk_range_encoder_SKP_Silk_sign_CDF__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_decode_signs_SKP_Silk_range_decoder@_RTC_CheckStackVars@8/4235 1273638396 100666 11767 ` Lќ-ъK&I.drectveAl .debug$S$­@B.text˜б P`.debug$SXiС@B.rtc$TMZѓї@0@.rtc$IMZ@0@.text@O P`.debug$Sяя @B.text#q ”" P`.debug$Sмю"Ъ$@B.rdataќ$@0@.rdata„%@@@.data–%@0Р.rdataš%@0@.debug$T\Ќ%@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёyLJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_CNG.obj:<!ovovMicrosoft (R) Optimizing Compilerэ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_CNG.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё "@SA_Method"SA_ParameterДSKP_Silk_decoder_stateОSKP_Silk_decoder_controlУSKP_Silk_PLC_struct!wchar_tгSKP_Silk_CNG_struct"SA_AttrTargetsSKP_Silk_NLSF_CBS usize_t!ЧSKP_Silk_range_coder_state!ЧSKP_Silk_range_coder_statesSKP_Silk_NLSF_CBS|SKP_Silk_NLSF_CB_structУSKP_Silk_PLC_structгSKP_Silk_CNG_structДSKP_Silk_decoder_stateОSKP_Silk_decoder_control|SKP_Silk_NLSF_CB_structєXprХО)ж$olŽг>u,FЩЄёќ/:ˆзМJntГЬ?З>Œ^ЁA^ŠћsM,uОЯЊWb!Ј?~NЯзѕь[иC-д2ўрм…ьЊ6оQЙОџ„w„љ”m–˜ЊдЉЋьє9v[7Œ{њnс%к™ѕkЈяЉЌŸ"+ќqЅ’Смс;U#[Т)oњ mњюQл'f|oьar6Z<Ѓ:…QЅB СГ‘МКGƒQйЛyјs‡Іk~е*Јн­Wыћ%iАлEУД‰ >GO“VРА,п@ў,^žїY†ЗLŽ_Ы'_PиkЛY№x гbќ:Tи™Ж+Ы ЅљГ#u8^s.йxХЙSUжпыkhHPTЊŒ3їГГјї-(yFiдz<G;1=1oЬXўrToрџЊtЩБЩ}*Мj_П#ХuХДR†(ѓАз"Ќшš>šљ%?dl9Д‘АкяЗАЅЂL“7‰кў%{’Џ‹ц+7 @#nŽи,ˆ{ѓj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_cng.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 232 - ^ = $23 $T0 236 - ^ = $24 $T0 240 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 1288 - ^ = $23 $T0 1292 - ^ = $24 $T0 1296 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 252 - ^ = $23 $T0 256 - ^ = $24 $T0 260 - ^ = U‹ььфSVWНџџџЙ9ИЬЬЬЬѓЋ‹E‹ˆш+ƒСИџ™їљ‰EьЧEрЧEјы ‹EјƒР‰Eј‹E‹Mј;ˆш+}‹EрEь‰Eр‹Eј‹M‹Uр‰”€6ыЮ‹EЧ€7‹EЧ€7€x0_^[‹х]Уѕ$˜фЦ ёЏ8˜‘ЖSKP_Silk_CNG_ResetфР$ € ­psDec рџџџtNLSF_acc_Q15 јџџџti ьџџџtNLSF_step_Q15ђh˜( \=€@€5A€<B€\C€eD€uE€wF€„G€‘H€ X \ № є U‹ььSVWНќњџџЙAИЬЬЬЬѓЋЁ3Х‰Eќ‹E/‰…Шћџџ‹E‹Шћџџ‹м+;‘t!‹EPшƒФ‹…Шћџџ‹M‹‘м+‰‹EƒИh7…б‹EƒИє.…СЧEєы ‹EєƒР‰Eє‹E‹Mє;ˆш+}y‹Eє‹M‹Uє‹ЕШћџџ‹„ь++„–€СјiРм?‹Mє‹U‹uє‹НШћџџ‹ŒŠь++ŒЗ€сџџiЩм?СљС‹Uє‹Шћџџ„‘€‹Uє‹Шћџџ‰„‘€щpџџџЧEФЧEшЧEєы ‹EєƒР‰Eєƒ}є}$‹Eє‹M ‹T;UФ~‹Eє‹M ‹T‰UФ‹Eє‰EшыЭ‹E‹ˆф+kЩСсQ‹•ШћџџR‹E‹ˆф+‹•ШћџџŠPшƒФ ‹E‹ˆф+СсQ‹U‹EшЏ‚ф+‹M”8R‹…ШћџџPшƒФ ЧEєы ‹EєƒР‰Eєƒ}є}`‹Eє‹M ‹•Шћџџ‹D+‚СјiР‹Mє‹U ‹ЕШћџџ‹LŠ+ށсџџiЩСљС‹•Шћџџ‚‹Шћџџ‰ы‘‹EƒИh7„[‹…ШћџџP‹MQ‹•Шћџџ‹‚P‹ШћџџQ•дћџџRшƒФ‹E‹ˆш+Q‹•ШћџџТ€REœPшƒФ ЧEа‹EƒИш+u1‹EPдћџџQ‹•ШћџџТРR‹EаPMœQ•дћџџRшƒФы9‹E‹ˆш+Q‹UR…дћџџP‹ШћџџСРQ‹UаREœPдћџџQшƒФЧEєы ‹EєƒР‰Eє‹Eє;E}l‹Eє‹MПA‹EєПŒEдћџџб‰Uм}мџ~ Ч…ћџџџы*}м€џџ} Ч…ќњџџ€џџы ‹Eм‰…ќњџџ‹ќњџџ‰ћџџ‹Uє‹Ef‹ћџџf‰ Pыƒы$‹E‹ˆш+СсQj‹•ШћџџТРRшƒФ R‹ЭPшXZ_^[‹Mќ3ЭшФ;ьш‹х]УIœџџџ дћџџРCNG_sigLPC_buf*Rœ)а(‹4Ў'№&+%з$ф#щ-ј,+" !, ѕ$@8( ё‡2@(@ЛSKP_Silk_CNGРD … :ќџџџ     ­psDec  ЙpsDecCtrl signal tlength дћџџCNG_sig Шћџџ7psCNG мџџџttmp_32 Фџџџtmax_Gain_Q16 шџџџtsubfr œџџџєLPC_buf єџџџti аџџџtGain_Q26ђ8@($,Q€(W€6Y€M[€Y]€n_€Žc€Ўd€"e€'g€.h€5i€Mj€\k€il€on€qp€Ѓq€зt€яu€Mv€Oz€_~€’€Еƒ€М†€Шˆ€ї‰€љ‹€2Ž€L€f€Ж‘€И’€К“€о•€ X \ ž! Ђ! ­ Б М" Р" Ы# Я# Ш Ь U‹ььјSVWНџџџЙ>ИЬЬЬЬѓЋЧEдџ‹Eд;E~ ‹Eдбј‰Eдыю‹E‹‰MјЧEьы ‹EьƒР‰Eь‹Eь;EЊ‹EјiР5„Г kc6‰Eј‹EјСј#Eд‰Eр}%hjЁƒР PhjшƒФƒјuЬ}рџ~%hjЁƒРPhjшƒФƒјuЬ‹Eр‹M ‹СњПEЏа‹Mр‹E ‹ ˆсџџПEЏШСљб‹MСљƒСбљ‹Eр‹u Џ †бСњ ƒТбњњџ~Ч… џџџџщО‹Mр‹U ‹ŠСјПMЏС‹Uр‹M ‹‘тџџПMЏбСњТ‹UСњƒТбњ‹Mр‹u ЏŽТСј ƒРбј=€џџ} Ч…џџџ€џџыR‹Uр‹E ‹ СљПUЏЪ‹Eр‹U ‹‚%џџПUЏТСјШ‹EСјƒРбј‹Uр‹u Џ–ШСљ ƒСбљ‰џџџ‹…џџџ‰… џџџ‹Mь‹Uf‹… џџџf‰JщAўџџ‹E‹Mј‰_^[Фј;ьш‹х]У}E„A=”9Ћ8ВAЛ=Т9+ѕ$#ј­ ё 6#;SKP_Silk_CNG_excјР8 € residual  texc_buf_Q10 tGain_Q16 tlength trand_seed јџџџtseed рџџџtidx ьџџџti дџџџtexc_maskђ#(„&€*€%+€-,€5-€7/€?0€]1€n2€z3€Ё4€Я5€6€7€8€ 4X4 \4 L4 P4 idx <= 255j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_cng.c&idx >= 0VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S$.text˜THP„E­.debug$SX5Rгƒ .rtc$TMZЬ.L/ .rtc$IMZžz]>U .text@pПѓn kЦu.debug$S д…Ъсd $LN270$LN268$LN28$LN29_memset r ‘ Б _memcpy _memmove Щм ы  .text # паŸƒRHUr.debug$S м $љПZ .rdata —‚T/ … .rdata „›Иџѓ• .data т№Y…P .rdata†nЪЌ€.debug$T\Э_SKP_Silk_CNG_Reset__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_CNG_SKP_Silk_LPC_synthesis_filter_SKP_Silk_LPC_synthesis_order16_SKP_Silk_NLSF2A_stable___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8_SKP_Silk_CNG_exc??_C@_1BG@DNBMMII@?$AAi?$AAd?$AAx?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA5?$AA5?$AA?$AA@__CrtDbgReportW??_C@_1IE@MJIJMCHK@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_CNG_exc@@9@9@3894bdbb??_C@_1BC@DECOFODE@?$AAi?$AAd?$AAx?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@ /4265 1273638396 100666 5206 ` Lќ-ъKі.drectveA, .debug$Sd m@B.text'б P`.debug$STјL@B.rtc$TMZ~‚@0@.rtc$IMZŒ@0@.debug$T\š@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёVJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_bwexpander_32.obj:<!ovovMicrosoft (R) Optimizing Compilerї=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_bwexpander_32.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒЉёXК9Ћ&Х+DcЦЯ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓЮj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_bwexpander_32.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 220 - ^ = $23 $T0 224 - ^ = $24 $T0 228 - ^ = U‹ььиSVWН(џџџЙ6ИЬЬЬЬѓЋ‹E‰EьЧEјы ‹EјƒР‰Eј‹E ƒш9Eј‰‹Eј‹M‹СњПEьЏа‹Mј‹E‹ ˆсџџПEьЏШСљб‹MьСљƒСбљ‹Eј‹uЏ †б‹Mј‹E‰ˆ‹EСјПMьЏС‹UтџџПMьЏбСњТ‹UьСњƒТбњЏUТ‰Eьщ_џџџ‹E ‹M‹TќСњПEьЏа‹M ‹E‹LˆќсџџПEьЏШСљб‹MьСљƒСбљ‹E ‹uЏL†ќб‹M ‹E‰Tˆќ_^[‹х]Уѕ$'и \ ёЛ<' 3SKP_Silk_bwexpander_32иР € tar  d tchirp_Q16 ьџџџttmp_chirp_Q16 јџџџtiђX'8L$€(€$)€E*€“+€Щ,€Ю-€ .€ X \ ќ  VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sd .text'јё)чР„Р.debug$STШŒР .rtc$TMZЬ.L3 .rtc$IMZžz]BY .debug$T\h_SKP_Silk_bwexpander_32__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/4305 1273638396 100666 5066 ` Lќ-ъKm.drectveA, .debug$SX m@B.textІХ P`.debug$SXkУ@B.rtc$TMZѕљ@0@.rtc$IMZ@0@.debug$T\@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‡SJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_bwexpander.obj:<!ovovMicrosoft (R) Optimizing Compilerє=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_bwexpander.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒž‰ яЊQ ’ќ›тSТљ2Ь’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓЫj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_bwexpander.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 220 - ^ = $23 $T0 224 - ^ = $24 $T0 228 - ^ = U‹ььиSVWН(џџџЙ6ИЬЬЬЬѓЋ‹E-‰EьЧEјы ‹EјƒР‰Eј‹E ƒш9Eј}7‹Eј‹MПAЏUСњƒТбњ‹Eј‹Mf‰A‹EЏEьСјƒРбјE‰EыЕ‹E ‹MПTAўЏUСњƒТбњ‹E ‹Mf‰TAў_^[‹х]Уѕ$Іи Y ёО9ІŸЧSKP_Silk_bwexpanderиР € ar  d tchirp_Q16 ьџџџtchirp_minus_one_Q16 јџџџtiђXІ8L$€(€),€F-€f.€{/€}0€Ÿ1€ X \   VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SX .textІЌе@Ђуsi.debug$SX#}0щ .rtc$TMZЬ.L0 .rtc$IMZžz]?V .debug$T\e_SKP_Silk_bwexpander__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/4342 1273638396 100666 18038 ` Lќ-ъKs9n.drectveAЌ .debug$SИэ@B.textєЅ™"? P`.debug$Sl%{,@B.rdataa-@0@.rdatae-@0@.rdatas-@0@.rdata˜-@@@.data'.@0Р.rdata>+.@0@.rtc$TMZi.m.@0@.rtc$IMZw.{.@0@.text_….ф. P`.debug$Sє/і/@B.textр(0 P`.debug$SЌ1Д2@B.textЗц25 P`.debug$S6/8@B.rdataa8@0@.rdataŒu8@@@.data9@0Р.rdata9@0@.debug$T\9@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёVJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_burg_modified.obj:<!ovovMicrosoft (R) Optimizing Compilerї=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_burg_modified.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒj%ˆp^ Т›s˜P!8 šЄЯ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓ$j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_burg_modified.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 776 - ^ = $23 $T0 780 - ^ = $24 $T0 784 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 300 - ^ = $23 $T0 304 - ^ = $24 $T0 308 - ^ = U‹ььSVWНќќџџЙСИЬЬЬЬѓЋЁ3Х‰Eќ‹EЏE= ~&hj‹ ƒС QhjшƒФƒјuЬƒ}~%hjЁƒР PhjшƒФƒјuЬ‹EЏEP‹MQUФREЌPшƒФƒ}Ф~E‹MФƒщ‹EЌгр‰EЌƒ}Ќ%hjЁƒРPhjшƒФƒјuЬЧEФщЄ‹EЌPшƒФƒш‰EаИ+Eа‰EИƒ}И~<И+EФ9EИ} ‹MИ‰ќќџџыК+UФ‰•ќќџџ‹…ќќџџ‰EИ‹EЌ‹MИгј‰EЌы<И№џџџ+EФ9EИ~ ‹MИ‰ќќџџыК№џџџ+UФ‰•ќќџџ‹…ќќџџ‰EИ‹MИїй‹EЌгр‰EЌ‹EФEИ‰EФj@j…ьўџџPшƒФ ƒ}ФŽ•ЧEмы ‹EмƒР‰Eм‹Eм;E}v‹EмЏE‹MA‰•4џџџЧEшы ‹EшƒР‰Eш‹E$ƒР9Eш}A‹E+EшP‹Mш‹•4џџџJP‹4џџџQшƒФ ‹MФш‹Uш„•шўџџ‹Mш‰„шўџџыЋщyџџџщЧEмы ‹EмƒР‰Eм‹Eм;E}u‹EмЏE‹MA‰•4џџџЧEшы ‹EшƒР‰Eш‹E$ƒР9Eш}@‹E+EшP‹Mш‹•4џџџJP‹4џџџQшƒФ ‹MФїйгр‹Uш„•шўџџ‹Mш‰„шўџџыЌщzџџџj@…ьўџџPЄўџџQшƒФ ‹E ™‹Ш‹ђ‹EЌ™RPVQшБ ш‹UЌD‰…ўџџ‹ўџџ‰Ф§џџЧEшы ‹EшƒР‰Eш‹Eш;E$J ƒ}ФўŽ3ЧEмы ‹EмƒР‰Eм‹Eм;E‹EмЏE‹MA‰•4џџџ‹Eш‹4џџџПAЙ+MФгтїк‰•Lџџџ‹E+Eш‹4џџџПTAўЙ+MФгтїк‰•@џџџ‹Eш‹4џџџПAСт‰•dџџџ‹E+Eш‹4џџџПTAўСт‰•XџџџЧEєы ‹EєƒР‰Eє‹Eє;Eшe‹…LџџџСј‹Mш+Mє‹•4џџџПLJўЏС‹•Lџџџтџџ‹Mш+Mє‹Е4џџџПLNўЏбСњТ‹Uє„•ьўџџ‹Mє‰„ьўџџ‹…@џџџСј‹M+MшMє‹•4џџџП JЏС‹•@џџџтџџ‹M+MшMє‹Е4џџџП NЏбСњТ‹Uє„•Єўџџ‹Mє‰„Єўџџ‹Eє‹Œ…\ўџџ‰|џџџ‹…|џџџСј‹Mш+Mє‹•4џџџПLJўЏС‹•|џџџтџџ‹Mш+Mє‹Е4џџџПLNўЏбСњ•dџџџа‰•dџџџ‹…|џџџСј‹M+MшMє‹•4џџџП JЏС‹•|џџџтџџ‹M+MшMє‹Е4џџџП NЏбСњ•Xџџџа‰•Xџџџщ†ўџџ‹…dџџџїиЙ+MФгр‰…dџџџ‹…XџџџїиЙ+MФгр‰…XџџџЧEєы ‹EєƒР‰Eє‹Eє;EшЕ‹…dџџџСј‹Mш+Mє‹•4џџџП JЏС‹•dџџџтџџ‹Mш+Mє‹Е4џџџП NЏбСњТ‹Uє„•ўџџ‹Mє‰„ўџџ‹…XџџџСј‹M+MшMє‹•4џџџПLJўЏС‹•Xџџџтџџ‹M+MшMє‹Е4џџџПLNўЏбСњТ‹Uє„•Ф§џџ‹Mє‰„Ф§џџщ6џџџщлќџџщЧEмы ‹EмƒР‰Eм‹Eм;Eф‹EмЏE‹MA‰•4џџџ‹Eш‹4џџџПA‹MФїйгтїк‰•Lџџџ‹E+Eш‹4џџџПTAў‹MФїйгтїк‰•@џџџ‹Eш‹4џџџПAСт‰•dџџџ‹E+Eш‹4џџџПTAўСт‰•XџџџЧEєы ‹EєƒР‰Eє‹Eє;EшС‹Eш+Eє‹4џџџПTAўЏ•Lџџџ‹Eє”…ьўџџ‹Mє‰”ьўџџ‹E+EшEє‹4џџџПAЏ•@џџџ‹Eє”…Єўџџ‹Mє‰”Єўџџ‹Eє‹Œ…\ўџџСљƒСбљ‰pџџџ‹Eш+Eє‹4џџџПTAўЏ•pџџџ•dџџџ‰•dџџџ‹E+EшEє‹4џџџПAЏ•pџџџ•Xџџџ‰•Xџџџщ*џџџ‹…dџџџїи‰…dџџџ‹…Xџџџїи‰…XџџџЧEєы ‹EєƒР‰Eє‹Eє;EшG‹…dџџџСј‹Mш+Mє‹•4џџџПJ‹MФїйƒщгтПЪЏС‹•dџџџтџџ‹Mш+Mє‹Е4џџџП4N‹MФїйƒщгцПЮЏбСњТ‹Uє‹”•ўџџа‹Eш+Eє‹4џџџПA‹MФїйƒщгрСјƒРбјЏ…dџџџа‹Mє‰”ўџџ‹…XџџџСј‹M+MшMє‹•4џџџПTJў‹MФїйƒщгтПЪЏС‹•Xџџџтџџ‹M+MшMє‹Е4џџџПtNў‹MФїйƒщгцПЮЏбСњТ‹Uє‹”•Ф§џџа‹E+EшEє‹4џџџПDAў‹MФїйƒщгрСјƒРбјЏ…Xџџџа‹Mє‰”Ф§џџщЄўџџщ§џџ‹Eш‹Œ…ьўџџ‰dџџџ‹Eш‹Œ…Єўџџ‰XџџџЧE ‹…Ф§џџ…ўџџ‰E”ЧEєы ‹EєƒР‰Eє‹Eє;Eш{‹Eє‹Œ…\ўџџ‰|џџџƒН|џџџ~‹…|џџџ‰…ќќџџы‹|џџџїй‰ќќџџ‹•ќќџџRшƒФƒш‰Eаƒ}а~ Ч…ќќџџы ‹Eа‰…ќќџџ‹ќќџџ‰Mа‹…|џџџ‹Mагр‰…pџџџ‹Eш+Eє‹„… ўџџ™‹Ш‹ђ‹…pџџџ™RPVQшБ шЙ+Mагр…dџџџ‰…dџџџ‹Eш+Eє‹„…шўџџ™‹Ш‹ђ‹…pџџџ™RPVQшБ шЙ+Mагр…Xџџџ‰…Xџџџ‹Eш+Eє‹„…Ф§џџ™‹Ш‹ђ‹…pџџџ™RPVQшБ шЙ+MагрE ‰E ‹Eє‹„…Ш§џџ‹Mє„ўџџ™‹Ш‹ђ‹…pџџџ™RPVQшБ шЙ+MагрE”‰E”щpўџџ‹Eш‹dџџџ‰Œ…ўџџ‹Eш‹Xџџџ‰Œ…Ш§џџ‹E …Xџџџ‰E ‹E їибр‰E ƒ} ~ ‹E ‰…ќќџџы ‹M їй‰ќќџџ‹•ќќџџ;U”}j‹E”P‹M QшƒФ ‰EˆыQ‹E$+EшСрPj‹Mш”\ўџџRшƒФ 3Рu)hj‹ СˆQhjшƒФƒјuЬщwЧEєы ‹EєƒР‰Eє‹EшƒРбј9Eє‹Eє‹Œ…\ўџџ‰dџџџ‹Eш+Eє‹Œ…Xўџџ‰Xџџџ‹…Xџџџ™‹Ш‹ђ‹Eˆ™RPVQшБ ш‹•dџџџB‹Mє‰„\ўџџ‹…dџџџ™‹Ш‹ђ‹Eˆ™RPVQшБ ш‹•XџџџB‹Mш+Mє‰„XўџџщWџџџ‹EˆСј‹Mш‰„\ўџџЧEєы ‹EєƒР‰Eє‹EшƒР9Eє‹Eє‹Œ…ўџџ‰dџџџ‹Eш+Eє‹Œ…Ш§џџ‰Xџџџ‹…Xџџџ™‹Ш‹ђ‹Eˆ™RPVQшБ ш‹•dџџџB‹Mє‰„ўџџ‹…dџџџ™‹Ш‹ђ‹Eˆ™RPVQшБ ш‹•XџџџB‹Mш+Mє‰„Ш§џџщYџџџщЁѕџџ‹…ўџџ‰E”Ч…dџџџЧEєы ‹EєƒР‰Eє‹Eє;E$ж‹Eє‹Œ…\ўџџСљƒСбљ‰pџџџ‹Eє‹Œ…ўџџСљП•pџџџЏЪ‹Eє‹”…ўџџтџџП…pџџџЏаСњU”б‹pџџџСљƒСбљ‹EєЏŒ…ўџџб‰U”‹…pџџџСјПpџџџЏС‹•pџџџтџџПpџџџЏбСњ•dџџџа‹…pџџџСјƒРбјЏ…pџџџа‰•dџџџ‹…pџџџїи‹Mє‹U‰Šщџџџ‹E ™‹Ш‹ђ‹EЌ™RPVQшБ ш‹№Сў‹•dџџџїкПТЏ№‹E ™‹Ш‹њ‹EЌ™RPWQшБ ш‹јчџџ‹•dџџџїкПТЏјСџ}”ў‹E ™‹Ш‹ђ‹EЌ™RPVQшБ ш‹•dџџџїкСњƒТбњЏТј‹E‰8‹EФїи‹M ‰R‹ЭPшXZ_^[‹Mќ3ЭшФ;ьш‹х]УФџџџЌџџџьўџџ@Єўџџ@\ўџџ@ўџџDФ§џџDCAbCAfAf_QAC_last_rowC_first_rowC0rshifts675?1H-O)c(j1s-z)œ$О#Х1Ю-е)ѓLž ;Њфќ:; Ln :u ;­ :Д ;ь :ѓ ;, :3 ;Д Zи ф ь 1ј -џ )k :r ; :Є ;+ :2 ;] :d ; :Ї;Я:ж; :;>C9R8_7lx„œЈДРѕ$є \( ё<є(єЊSKP_Silk_burg_modifiedРD … :ќџџџ          tres_nrg  tres_nrg_Q tA_Q16 x subfr_length nb_subfr  WhiteNoiseFrac_Q32 $D Иџџџtrshifts_extra ЌџџџtC0 ьўџџИC_first_row ЄўџџИC_last_row Lџџџtx1 єџџџtk Фџџџtrshifts dџџџttmp1 4џџџx_ptr \ўџџИAf_QA Ф§џџ7CAb аџџџtlz Xџџџttmp2 pџџџtAtmp1 мџџџts  џџџtnum шџџџtn |џџџtAtmp_QA @џџџtx2 ўџџ7CAf ”џџџtnrg ˆџџџtrc_Q31ђє8;€(G€\H€‡L€ЃM€ЉN€ЗO€тP€щQ€юR€S€ T€U€@V€KW€MX€|Y€‰[€’]€Ѕ^€Џ_€Щ`€мa€љc€8d€:e€?f€Dg€^h€qi€Žk€Ьl€Юm€гo€ыr€ t€>y€Hz€f{€y|€˜}€Л~€б€ы€€ €_‚€Йƒ€Щ„€…€i†€n‡€†ˆ€ž‰€МŠ€‹€lŒ€q€vŽ€{€™€Ќ‘€Ш’€ш“€ў”€•€6–€b—€˜€Ј™€Ьš€ђ›€їœ€€ž€1 €ЬЂ€s Ѓ€x Є€} Ј€ Љ€ Њ€Є Ћ€Г Ќ€б ­€с Ў€ Џ€? А€P В€ Г€Ю Д€ Ж€G З€L И€\ Й€l К€x Л€‚ О€Љ ψΠЈР҈п У€ Ф€ Ш€4 Щ€D Ъ€W Ы€‰ Ь€О Э€У Ю€г б€є в€ г€ д€I е€~ ж€ƒ з€ˆ ꈑ л€› м€Й н€б о€(п€yр€Šс€т€.у€8ф€ X \ Ј Ќ З Л Ц Ъ е й ф ш ѓ ї      $ \ ` 0C0 > 0nb_subfr <= 4j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_burg_modified.c;subfr_length * nb_subfr <= 544@EU‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E%џџt‹EСјPшƒФыыЗEPшƒФƒР_^[ФР;ьш‹х]У0SASW7ѕ$_РЮ ёi4_KSKP_Silk_CLZ32РР € tin32ђH_<p€r€(s€9t€;u€Kw€ LXL \L ЌL АL U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјПE…Рu ИщЂПE%џt0ПE%№tf‹EfСј f‰Eы‹EјƒР‰Eјf‹EfСјf‰Eы+ПE%№џt‹EјƒР‰Eјf‹EfСјf‰Eы ‹EјƒР ‰EјПEƒр tПEƒрt‹Eјы%ы‹EјƒРыыПEƒрt ‹EјƒРыы‹EјƒР_^[‹х]Уѕ$рЬ@ ё{4рй SKP_Silk_CLZ16ЬР € in16 јџџџtout32ђ№рфL€M€%N€-O€7R€BS€MT€YU€[V€dW€pY€rZ€}[€†\€’]€”^€b€Іc€Џd€Дe€Жf€Оg€Рh€Щi€бj€гk€йm€ SXS \S МS РS U‹ьь(SVWНиўџџЙJИЬЬЬЬѓЋƒ} u%hjЁƒРPhjшƒФƒјuЬƒ}}%hjЁƒРPhjшƒФƒјuЬƒ}~ ‹E‰…шўџџы ‹Mїй‰шўџџ‹•шўџџRшƒФƒш‰Eј‹E‹Mјгр‰EШƒ} ~ ‹E ‰…шўџџы ‹M їй‰шўџџ‹•шўџџRшƒФƒш‰Eь‹E ‹Mьгр‰EМ‹MМСљИџџџ™їљ‰Eд‹EШСјПMдЏС‹UШтџџПMдЏбСњТ‰EА‹EМ™‹Ш‹ђ‹EА™RPVQшБ шСр‹UШ+а‰UШ‹EШСјПMдЏС‹UШтџџПMдЏбСњUАа‰UА‹EјƒР+Eь+E‰Eрƒ}р‹MрїйИ€гј‹MрїйКџџџгњ;Т~m‹MрїйИ€гј9EА~‹MрїйК€гњ‰•шўџџы:‹MрїйИџџџгј9EА}‹MрїйКџџџгњ‰•фўџџы ‹EА‰…фўџџ‹фўџџ‰шўџџ‹•шўџџ‰•рўџџыk‹MрїйИџџџгј9EА~‹MрїйКџџџгњ‰•мўџџы:‹MрїйИ€гј9EА}‹MрїйК€гњ‰•иўџџы ‹EА‰…иўџџ‹иўџџ‰мўџџ‹•мўџџ‰•рўџџ‹Mрїй‹…рўџџгрыыƒ}р } ‹EА‹Mргјыы3Р_^[Ф(;ьш‹х]У%j,f5b<)P^Wf`bg)˜LдL3::;Џ7ѕ$З( В ё4ЗЃлSKP_DIV32_varQ(Рh € a32  b32 Qres ьџџџtb_headrm рџџџtlshift Аџџџtresult јџџџta_headrm Мџџџtb32_nrm Шџџџta32_nrm дџџџtb32_invђИЗ Ќ„€ˆ€I‰€tŒ€Ѕ€АŽ€с€ь’€§•€"˜€I›€qž€€Ÿ€Š €Ё€Ђ€•Ѓ€ŸЄ€ЁІ€ЃЉ€ ZXZ \Z XZ \Z Qres >= 0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.h„b32 != 0VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SИ.textє?цƒx8HП.debug$Sl_U}  $LN78Ф$LN77Ш$LN76Ь$LN75в$LN74н$LN73щ$LN72ь$LN79p$LN80h.rdataЁј+№_memcpy < Y _memset .rdata&[l{К .rdataЂh?в8 .rdata˜жѓH.data  *' .rdata >№3ы0 я  , __allmul __allshr .rtc$TMZ Ь.LC Z .rtc$IMZ žz]i € .text _йIѕ=vЄёC.debug$Sє :Яq‘ .textр}BИ#u‘ћ.debug$SЌбЛ5сŸ .textЗ №ъэ ѕ[D.debug$SФѓ_ŽЏ .rdataљлЗ.П.rdataŒы.datal!;bЬ.rdataік–!њ.debug$T\G_SKP_Silk_burg_modified??_C@_13COJANIEC@?$AA0?$AA?$AA@_SKP_Silk_inner_prod_aligned_SKP_Silk_inner_prod16_aligned_64??_C@_1O@CPCINNBO@?$AAC?$AA0?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@_SKP_Silk_sum_sqr_shift??_C@_1BM@HBLAOALE@?$AAn?$AAb?$AA_?$AAs?$AAu?$AAb?$AAf?$AAr?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA4?$AA?$AA@__CrtDbgReportW??_C@_1JI@BLINLLKL@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_burg_modified@@9@9??_C@_1DO@JKIEFGO@?$AAs?$AAu?$AAb?$AAf?$AAr?$AA_?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?5?$AA?$CK?$AA?5?$AAn?$AAb?$AA_?$AAs?$AAu?$AAb?$AAf?$AAr?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA5?$AA4?$AA4?$AA?$AA@___security_cookie__RTC_CheckEsp@__security_check_cookie@4@_RTC_CheckStackVars@8__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_Silk_CLZ32_SKP_Silk_CLZ16_SKP_DIV32_varQ??_C@_1BE@NOJNLPIL@?$AAQ?$AAr?$AAe?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$AA@??_C@_1IM@NKJIPJPB@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_DIV32_varQ@@9@9@72c1599a??_C@_1BC@LJHCOKEE@?$AAb?$AA3?$AA2?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA0?$AA?$AA@/4382 1273638396 100666 5688 ` Lќ-ъKл.drectveA, .debug$SX m@B.textDХ P`.debug$S( 1@B.rtc$TMZcg@0@.rtc$IMZqu@0@.debug$T\@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‡SJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_biquad_alt.obj:<!ovovMicrosoft (R) Optimizing Compilerє=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_biquad_alt.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒы/ыšмM7ЮМ’сЊ­GЬ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓЫj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_biquad_alt.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 288 - ^ = $23 $T0 292 - ^ = $24 $T0 296 - ^ = U‹ььSVWНфўџџЙGИЬЬЬЬѓЋ‹E‹їйсџ?‰Mд‹E‹їйСљ‰Mр‹E‹Hїйсџ?‰MМ‹E‹HїйСљ‰MШЧEјы ‹EјƒР‰Eј‹Eј;EХ‹Eј‹MПA‰Uь‹E ‹СљПUьЏЪ‹E ‹тџџПEьЏаСњЪ‹U‹ССр‰EА‹EАСјПMдЏС‹UАтџџПMдЏбСњТСј‹UB‹M‰‹EАСјПMрЏС‹UАтџџПMрЏбСњТ‹U‹M‰‹E ‹HСљПUьЏЪ‹E ‹PтџџПEьЏаСњЪ‹U ‹E‰‹EАСјПMМЏС‹UАтџџПMМЏбСњТСј‹U‰B‹EАСјПMШЏС‹UАтџџПMШЏбСњТ‹UB‹M‰A‹E ‹HСљПUьЏЪ‹E ‹PтџџПEьЏаСњЪ‹UJ‹E‰H‹EАСјƒР=џ~ Ч…шўџџџы8‹MАСљƒСљ€џџ} Ч…фўџџ€џџы‹UАСњƒТ‰•фўџџ‹…фўџџ‰…шўџџ‹Mј‹Uf‹…шўџџf‰Jщ&ўџџ_^[‹х]Уѕ$DY ёH9D=hSKP_Silk_biquad_altР\ € in  B_Q28 A_Q28 tS out len дџџџtA0_L_Q28 јџџџtk ШџџџtA1_U_Q28 МџџџtA1_L_Q28 Аџџџtout32_Q14 ьџџџtinval рџџџtA0_U_Q28ђ D8”.€4€.5€;6€L7€Z9€x;€…<€И>€ш?€@€FB€qC€ŸD€гG€8H€=I€ X \ ˆ Œ VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SX .textD”"aР Љк”.debug$S(іЋB7 .rtc$TMZЬ.L0 .rtc$IMZžz]?V .debug$T\e_SKP_Silk_biquad_alt__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/4419 1273638396 100666 5469 ` Lќ-ъK.drectveA, .debug$SL m@B.text}Й P`.debug$S$6Z@B.rtc$TMZŒ@0@.rtc$IMZšž@0@.debug$T\Ј@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёOJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_biquad.obj:<!ovovMicrosoft (R) Optimizing Compiler№=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_biquad.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒѓџ‡Тје&(-%u ХШ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_biquad.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 300 - ^ = $23 $T0 304 - ^ = $24 $T0 308 - ^ = U‹ьь(SVWНиўџџЙJИЬЬЬЬѓЋ‹E‹‰MШ‹E‹H‰MМ‹EПїй‰Mр‹EПHїй‰MдЧEјы ‹EјƒР‰Eј‹Eј;E‹Eј‹MПA‰UьПEь‹M ПЏТEШ‰EАПEь‹M ПQЏТEМ‰EШ‹EАСјПMрЏС‹UАтџџПMрЏбСњТ‹UШТ‰EШ‹EАСјПMдЏС‹UАтџџПMдЏбСњТСр‰EМПEь‹M ПQЏТEМ‰EМ‹EАСј ƒРбјƒР‰EЄ}Єџ~ Ч…мўџџџы*}Є€џџ} Ч…иўџџ€џџы ‹EЄ‰…иўџџ‹иўџџ‰мўџџ‹Uј‹Ef‹мўџџf‰ Pщъўџџ‹E‹MШ‰‹E‹MМ‰H_^[‹х]Уѕ$}(U ё95}vљSKP_Silk_biquad(Рh € in  B A tS out len ьџџџtin16 јџџџtk МџџџtS1 дџџџtA1_neg ШџџџtS0 рџџџtA0_neg Аџџџtout32 Єџџџttmp32ђЈ}8œ1€5€&6€/7€:8€F9€d;€q<€„>€˜?€УA€ыB€џC€D€`E€eF€mG€vH€ X \ | € VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SL .text}П“ЖqѕШи.debug$S$$‹e .rtc$TMZЬ.L, .rtc$IMZžz];R .debug$T\a_SKP_Silk_biquad__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase /4452 1273638396 100666 8812 ` Lќ-ъKF<.drectveAl .debug$SЈ­@B.textTUЉ P`.debug$Sљ@B.rtc$TMZCG@0@.rtc$IMZQU@0@.textG_ P`.debug$SфІŠ@B.textgМ# P`.debug$S KW@B.text_‰ш P`.debug$Sєњ@B.textр, P`.debug$SЌ И@B.debug$T\ъ@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёƒQJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_autocorr.obj:<!ovovMicrosoft (R) Optimizing Compilerђ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_autocorr.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒ\С.›PіpIПЏaЅаK&Ъ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_autocorr.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 260 - ^ = $23 $T0 264 - ^ = $24 $T0 268 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 196 - ^ = $23 $T0 200 - ^ = $24 $T0 204 - ^ = U‹ььSVWНџџџЙ@ИЬЬЬЬѓЋ‹EP‹MQшƒФ‰Eд‹EP‹MQ‹URшƒФ ‰EФ‰UШ‹EФƒР‹MШƒб‰EФ‰MШ‹EШP‹MФQшƒФ‰EьИ#+Eь‰Eр‹E ‹Mр‰ƒ}рZ‹EФ‹Mрїйгр‹M‰ЧEјы ‹EјƒР‰Eј‹Eј;Eд}/‹E+EјP‹Mј‹UJP‹MQшƒФ ‹Mрїйгр‹Uј‹M‰‘ыРы]‹EФ‹UШ‹Mрш‹M‰ЧEјы ‹EјƒР‰Eј‹Eј;Eд}0‹E+EјP‹Mј‹UJP‹MQшƒФ ‹Mрш‹Uј‹M‰‘ыП_^[Ф;ьш‹х]У'#>f*Шэ&1Lѕ$TW ё-7T@/SKP_Silk_autocorrР@ € tresults  tscale inputData inputDataSize correlationCount рџџџtnRightShifts дџџџtcorrCount ьџџџtlz Фџџџcorr64 јџџџtiђЈT8œ/€3€16€K9€]<€p?€{@€ƒB€‰C€˜F€ВG€пH€сI€уJ€іM€N€>O€@Q€ X \ p t U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФЩ ёq1G@.SKP_min_intФР € ta  tbђ0GH$з€и€@й€ #X# \# Д# И# U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋ‹E‹U Б ш‰Eјƒ}јu‹EPшƒФƒР ыы ‹EјPшƒФ_^[ФЬ;ьш‹х]У'91L1_ѕ$gЬ; ё|4gSASKP_Silk_CLZ64ЬР € in јџџџtin_upperђPg D*€-€..€40€E1€G3€S5€ *X* \* М* Р* U‹ььРSVWН@џџџЙ0ИЬЬЬЬѓЋ‹E%џџt‹EСјPшƒФыыЗEPшƒФƒР_^[ФР;ьш‹х]У08A8Wѕ$_Р­ ёi4_KSKP_Silk_CLZ32РР € tin32ђH_<p€r€(s€9t€;u€Kw€ 1X1 \1 Ќ1 А1 U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋЧEјПE…Рu ИщЂПE%џt0ПE%№tf‹EfСј f‰Eы‹EјƒР‰Eјf‹EfСјf‰Eы+ПE%№џt‹EјƒР‰Eјf‹EfСјf‰Eы ‹EјƒР ‰EјПEƒр tПEƒрt‹Eјы%ы‹EјƒРыыПEƒрt ‹EјƒРыы‹EјƒР_^[‹х]Уѕ$рЬ; ё{4рй SKP_Silk_CLZ16ЬР € in16 јџџџtout32ђ№рфL€M€%N€-O€7R€BS€MT€YU€[V€dW€pY€rZ€}[€†\€’]€”^€b€Іc€Џd€Дe€Жf€Оg€Рh€Щi€бj€гk€йm€ 8X8 \8 М8 Р8 VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$SЈ.textTбpgg#ТюF.debug$SGjХё  4 V __allshr .rtc$TMZЬ.Le| .rtc$IMZžz]‹Ђ .textGиьиоп„[Ќ.debug$SфкJаˆБ .text g›ы„žє=.debug$S   ;ЁО .text _йIѕ=vЄёC.debug$S є :Яq‘Ю .text р}BИ#u‘ћ.debug$SЌ бЛ5со .debug$T\ю_SKP_Silk_autocorr_SKP_Silk_inner_prod_aligned_SKP_Silk_inner_prod16_aligned_64__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase_SKP_min_int_SKP_Silk_CLZ64_SKP_Silk_CLZ32_SKP_Silk_CLZ16/4487 1273638396 100666 5225 ` Lќ-ъK.drectveA, .debug$S` m@B.textёЭ P`.debug$SœОZ@B.rtc$TMZŒ@0@.rtc$IMZšž@0@.debug$T\Ј@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‹UJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_array_maxabs.obj:<!ovovMicrosoft (R) Optimizing Compilerі=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_array_maxabs.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒа]}iэw”А) XuB0=Ю’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓЭj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_array_maxabs.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 248 - ^ = $23 $T0 252 - ^ = $24 $T0 256 - ^ = U‹ььєSVWН џџџЙ=ИЬЬЬЬѓЋЧEјЧEр‹E ƒш‰Eд‹Eд‹MПA‹Eд‹MПAЏа‰Uј‹E ƒш‰Eьы ‹Eьƒш‰Eьƒ}ь|0‹Eь‹MПA‹Eь‹MПAЏа‰Uр‹Eр;Eј~ ‹Eр‰Eј‹Eь‰EдыС‹Eд‹MПA…в~‹Eд‹MПA‰• џџџы‹Eд‹MПAїк‰• џџџ‹… џџџ‰Eр}рџ~ Иџыыf‹Eр_^[‹х]Уѕ$ёє[ ёУAёъўSKP_Silk_int16_array_maxabsєР4 € vec  len јџџџtmax рџџџtlvl ьџџџti дџџџtindђ˜ё8Œ,€-€,/€50€O1€i2€ƒ3€‹4€‘5€—7€™:€д;€н<€ф=€ц>€ъ@€ X \   VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S` .textё e.ЬybM.debug$SœСЬŽп .rtc$TMZЬ.L!8 .rtc$IMZžz]G^ .debug$T\m_SKP_Silk_int16_array_maxabs__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase /4526 1273638396 100666 7614 ` L ќ-ъK2.drectveAє .debug$Sp 5@B.textУЅh P`.debug$SPъ:@B.rdata l@0@.rdata6Œ@0@.rdata Т@@@.datab@0Р.rdata(f@0@.rtc$TMZŽ’@0@.rtc$IMZœ @0@.debug$T\Њ@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё•ZJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_apply_sine_window.obj:<!ovovMicrosoft (R) Optimizing Compilerћ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_apply_sine_window.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒ§Ÿ‘5[“'c†Uг­Ќ—lг’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓвj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_apply_sine_window.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 276 - ^ = $23 $T0 280 - ^ = $24 $T0 284 - ^ = U‹ььSVWН№ўџџЙDИЬЬЬЬѓЋ‹Eƒрt&hj‹ ƒСQhjшƒФƒјuЬ‹E ™ƒрƒт‰…№ўџџ‰•єўџџ‹…№ўџџ …єўџџt&hj‹ ƒСQhjшƒФƒјuЬƒ}u‹MƒСИH™їљ‰Eры‹MƒСИ?$™їљ‰Eр‹EрЏEрСј їи‰Eд}д€џџ}%hjЁƒРPhjшƒФƒјuЬƒ}}ЧEШ‹Eр‰EМыЧEШ‹EдСј‰EМЧEјы ‹EјƒР‰Eј‹Eј;Ej‹Eј‹M ‹A‰Uь‹EШEМбјСјПMьЏС‹UШUМбњтџџПMьЏбСњТ‹Uј‹Mf‰Q‹EМСј‹MьСљЏС‹UМтџџ‹MьСљЏбСњТ‹Uј‹Mf‰DQ‹EдЏEМСј‹MМH+UШƒТ‰UШ}Ш} ‹EШ‰…єўџџы Ч…єўџџ‹єўџџ‰MШ‹Eј‹M ‹TA‰Uь‹EШEМбјСјПMьЏС‹UШUМбњтџџПMьЏбСњТ‹Uј‹Mf‰DQ‹EШСј‹MьСљЏС‹UШтџџ‹MьСљЏбСњТ‹Uј‹Mf‰DQ‹EдЏEШСј‹MШH+UМ‰UМ}М} ‹EМ‰…єўџџы Ч…єўџџ‹єўџџ‰MМщўџџ_^[Ф;ьш‹х]У'#/8?qy‚‰йрщ№Л$ѕ$У` ё@УЏ,SKP_Silk_apply_sine_windowРP € px_win  px win_type length јџџџtk ьџџџtpx32 МџџџtS1_Q16 дџџџtc_Q20 ШџџџtS0_Q16 рџџџtf_Q16ђјУ8ь*€/€L2€–4€œ5€­6€Џ7€Р;€Я>€§A€C€ E€F€H€J€'O€EP€QQ€‡R€ИS€бT€јV€W€<X€mY€ƒZ€Њ[€Џ\€ X \ X \ c_Q20 >= -32768( (long long)px & 3 ) == 0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_apply_sine_window.c*( length & 3 ) == 0).VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$Sp .textУ <‚*Г.debug$SPOqr4 .rdata ћуD .rdata6ƒ]а‘L .rdata …zфK\.dataZOЯ.rdata (›ƒŸH й .rtc$TMZ Ь.Lш џ .rtc$IMZ žz] % .debug$T \4_SKP_Silk_apply_sine_window??_C@_1CA@KCBGFBFJ@?$AAc?$AA_?$AAQ?$AA2?$AA0?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA?9?$AA3?$AA2?$AA7?$AA6?$AA8?$AA?$AA@??_C@_1DG@BKABJEIB@?$AA?$CI?$AA?5?$AA?$CI?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?$CJ?$AAp?$AAx?$AA?5?$AA?$CG?$AA?5?$AA3?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@__CrtDbgReportW??_C@_1KA@BOBMNGBJ@?$AAj?$AA?3?$AA?2?$AAb?$AAl?$AAu?$AAe?$AAj?$AAe?$AAa?$AAn?$AAs?$AA?2?$AAd?$AAe?$AAn?$AAi?$AAm?$AA?2?$AAt?$AAr?$AAu?$AAn?$AAk?$AA?2?$AAc?$AAo?$AAd?$AAe?$AAc?$AAs?$AA?2@?__LINE__Var@?1??SKP_Silk_apply_sine_window@@9@9??_C@_1CI@IJJANPNF@?$AA?$CI?$AA?5?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?5?$AA?$CG?$AA?5?$AA3?$AA?5?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/4570 1273638396 100666 5919 ` Lќ-ъK#.drectveAT .debug$S˜ •-@B.dataU@0Р.text [f P`.debug$SФ˜\@B.rtc$TMZŽ’@0@.rtc$IMZœ @0@.debug$T\Њ@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‘XJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_ana_filt_bank_1.obj:<!ovovMicrosoft (R) Optimizing Compilerљ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_ana_filt_bank_1.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbёŽ "A_fb1_20 "A_fb1_21"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒ2ТЁdˆqazF ђДж­єб’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓаj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_ana_filt_bank_1.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 240 - ^ = $23 $T0 244 - ^ = $24 $T0 248 - ^ = А Д Ч Ы PU‹ьььSVWНџџџЙ;ИЬЬЬЬѓЋ‹Eбј‰EьЧEјы ‹EјƒР‰Eј‹Eј;Eь}9‹Eјбр‹MПAСт ‹EјE‹M‰‹Eјбр‹MПTAСт ‹EјEь‹M‰ыЖ‹EьP‹MQПR‹E P‹Mь‹UŠPшƒФ‹EьP‹Mь‹UŠPП Q‹U ƒТR‹E‹MRшƒФЧEјы ‹EјƒР‰Eј‹Eј;Eь ‹EјEь‹Mј‹U‹ Š‹U ‚‰Mр‹EрСј ƒРбј=џ~ Ч…џџџџы<‹MрСљ ƒСбљљ€џџ} Ч…џџџ€џџы‹UрСњ ƒТбњ‰•џџџ‹…џџџ‰…џџџ‹Mј‹Uf‹…џџџf‰J‹EјEь‹Mј‹U‹u‹ Š+ †‰Mр‹EрСј ƒРбј=џ~ Ч…џџџџы<‹MрСљ ƒСбљљ€џџ} Ч…џџџ€џџы‹UрСњ ƒТбњ‰•џџџ‹…џџџ‰…џџџ‹Mј‹Uf‹…џџџf‰Jщрўџџ_^[Фь;ьш‹х]У„ ˜А Чѕ$ ь^ ёє> ї4SKP_Silk_ana_filt_bank_1ьР, € in  tS outL outH tscratch N рџџџtout_tmp јџџџtk ьџџџtN2ђ 8„3€4€&8€@9€[:€w;€y>€Ÿ?€ЮB€ьC€D€oF€‡G€ђH€їI€ X \ 4 8 VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S˜ z­№.datann1.text y)›cE^ХŒ.debug$SФФE“  2 H .rtc$TMZЬ.LWn .rtc$IMZžz]}” .debug$T\Ѓ_A_fb1_20_A_fb1_21_SKP_Silk_ana_filt_bank_1_SKP_Silk_allpass_int__RTC_CheckEsp__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase /4612 1273638396 100666 5120 ` Lќ-ъKЂ.drectveA, .debug$S\ m@B.textЃЩ P`.debug$SŒlј@B.rtc$TMZ*.@0@.rtc$IMZ8<@0@.debug$T\F@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ё‰TJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_allpass_int.obj:<!ovovMicrosoft (R) Optimizing Compilerѕ=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_allpass_int.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё`"@SA_Method"SA_Parameter!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒ#Ў@wG%д)|ƒHНЭ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓЬj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_allpass_int.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 244 - ^ = $23 $T0 248 - ^ = $24 $T0 252 - ^ = U‹ьь№SVWНџџџЙ<ИЬЬЬЬѓЋ‹E ‹‰Mр‹Eƒш‰Eды ‹Eдƒш‰Eдƒ}д|T‹E‹+Mр‰Mј‹EјСјЏE‹MјсџЏMСљС‰Eь‹EрEь‹M‰‹UƒТ‰U‹E‹Mь‰Mр‹UƒТ‰Uы‹E ‹Mр‰_^[‹х]Уѕ$Ѓ№Z ёф:Ѓœ SKP_Silk_allpass_int№Р0 € in  tS tA tout len дџџџtk ьџџџtX2 рџџџtS0 јџџџtY2ђhЃ8 \9€=€&>€@?€K@€jA€~B€’C€”D€œE€ X \ $ ( VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S\ .textЃ#ЯT$bˆ.debug$SŒDЉc4 .rtc$TMZЬ.L1 .rtc$IMZžz]@W .debug$T\f_SKP_Silk_allpass_int__RTC_Shutdown.rtc$TMZ__RTC_Shutdown__RTC_InitBase.rtc$IMZ__RTC_InitBase/4650 1273638396 100666 12582 ` Lќ-ъKж'T.drectveA  .debug$S@M@B.textыЁŒ P`.debug$SДТv@B.rdata2 @0@.rdataŠ>@@@.dataШ@0Р.rdata*Ь@0@.rtc$TMZіњ@0@.rtc$IMZ@0@.textG P`.debug$SрY9 @B.textšk P`.debug$SX!]"@B.text#"В# P`.debug$Stа#D%@B.textšv% P`.debug$S8&H'@B.debug$T\z'@B /DEFAULTLIB:"LIBCMTD" /DEFAULTLIB:"OLDNAMES" /EDITANDCONTINUE ёOJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\SKP_Silk_A2NLSF.obj:<!ovovMicrosoft (R) Optimizing Compiler№=cwdJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrcclC:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.execmd-c -IJ:\bluejeans\denim\trunk\codecs\audio\silk\interface -ZI -nologo -W3 -WX- -Od -Oy- -DWIN32 -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MTd -GS -fp:fast -Zc:wchar_t -Zc:forScope -FoJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\ -FdJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdb -Gd -TC -analyze- -errorreport:prompt -Ij:\H323\ptlib\include -Ij:\H323\h323plus\include -Ij:\spranto\avirteos\dll -IJ:\BlueJeans\denim\trunk\connector\thirdparty\ptlib\include -IJ:\BlueJeans\denim\trunk\connector\thirdparty\h323plus\include -I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" -I"C:\Program Files\Microsoft DirectX SDK (March 2009)\Include" -I"C:\Program Files\WTL80\include" -IC:\programming\CVS_2\Opal\plugins -IC:\programming\CVS_2\Opal\plugins\video\common -I"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses" -I"C:\programming\avirteos_21\Dll\Win32 Static" -I"C:\programming\avirteos_21\Win32 Support Lib" -IC:\programming\CVS_2\ffmpeg -IC:\programming\CVS_2\x264\include -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\include" -I"C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -I"C:\Program Files\Microsoft SDKs\Windows\v7.0A\include" -XsrcSKP_Silk_A2NLSF.cpdbJ:\bluejeans\denim\trunk\codecs\audio\silk\out\Debug\vc100.pdbё‰"@SA_Method"SA_Parameter' ZSKP_Silk_LSFCosTab_FIX_Q12!wchar_t"SA_AttrTarget usize_tє€prХО)ж$olŽг>u,F>Œ^ЁA^ŠћsM,uОˆ~е*Јн­Wыћ%iАлЪьє9v[7Œ{њnс%к™kЈяЉЌŸ"+ќqЅ’СмсZU#[Т)oњ mњюQл'f›ЊWb!Ј?~NЯзѕьо[иC-д2ўрм…ьЊ6оЙОџ„w„љ”m–˜ЊдЉwГ‘МКGƒQйЛyјs‡ІkЙkhHPTЊŒ3їГГјїћЬXўrToрџЊtЩ=Аз"Ќшš>šљ%?dlƒL?pЅ“Ђ2ѕЙЕџtЦШ’Џ‹ц+7 @#nŽи,ˆ{(yFiдz<G;1=1ѓj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hc:\program files\microsoft visual studio 10.0\vc\include\stdlib.hc:\program files\microsoft visual studio 10.0\vc\include\limits.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hc:\program files\microsoft visual studio 10.0\vc\include\float.hc:\program files\microsoft visual studio 10.0\vc\include\crtdefs.hc:\program files\microsoft visual studio 10.0\vc\include\sal.hc:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hc:\program files\microsoft visual studio 10.0\vc\include\crtwrn.hc:\program files\microsoft visual studio 10.0\vc\include\string.hc:\program files\microsoft visual studio 10.0\vc\include\vadefs.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_a2nlsf.cj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.hc:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 488 - ^ = $23 $T0 492 - ^ = $24 $T0 496 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 200 - ^ = $23 $T0 204 - ^ = $24 $T0 208 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 232 - ^ = $23 $T0 236 - ^ = $24 $T0 240 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 208 - ^ = $23 $T0 212 - ^ = $24 $T0 216 - ^ = $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $20 $T0 220 - ^ = $23 $T0 224 - ^ = $24 $T0 228 - ^ = Ч& Ы& U‹ььфSVWНўџџЙyИЬЬЬЬѓЋЁ3Х‰Eќ…,џџџ‰…№ўџџ…џџџ‰…єўџџ‹Eбј‰Eа‹EаPџџџQ•,џџџR‹E PшƒФ…,џџџ‰…фўџџЁ‰EЌ‹EаP‹MЌQ‹•фўџџRшƒФ ‰Eˆƒ}ˆ}8‹EЧ…џџџ‰…фўџџ‹EаP‹MЌQ‹•фўџџRшƒФ ‰EˆЧEФыЧEФЧEшЧEєИ…Р„“‹Eш‹ …‰M ‹EаP‹M Q‹•фўџџRшƒФ ‰…|џџџƒ}ˆ ƒН|џџџ}ƒ}ˆŒƒН|џџџЧEИџџџЧEмы ‹EмƒР‰Eмƒ}м‰‹EЌE бј‹MЌM ƒсС‰E”‹EаP‹M”Q‹•фўџџRшƒФ ‰…pџџџƒ}ˆ ƒНpџџџ}ƒ}ˆ|ƒНpџџџ‹E”‰E ‹…pџџџ‰…|џџџы‹E”‰EЌ‹…pџџџ‰EˆИ€‹MмгјEИ‰EИщdџџџƒ}ˆ~ ‹Eˆ‰…ўџџы ‹Mˆїй‰ўџџНўџџ}C‹Eˆ+…|џџџ‰…Xџџџ‹EˆСр‹XџџџбљС‰…dџџџƒНXџџџt‹…dџџџ™їНXџџџEИ‰EИы‹Mˆ+|џџџСљ‹Eˆ™їљEИ‰EИhџ‹EшСрEИPшƒФ‹MФ‹U‰Š‹EФ‹Mƒ<}&hj‹ƒТ^RhjшƒФƒјuЬ‹EФ‹M<џ~&hj‹ƒТ_RhjшƒФƒјuЬ‹EФƒР‰EФ‹EФ;E|щw‹EФƒр‹Œ…№ўџџ‰фўџџ‹Eш‹ …ќџџџ‰MЌ‹EФƒрЙ+ШСс ‰Mˆщ:‹EшƒР‰Eш‹E ‰EЌ‹…|џџџ‰Eˆ}ш€Ž‹EєƒР‰Eєƒ}є2~O‹MƒСИ€™їљ‹U‰ЧEшы ‹EшƒР‰Eш‹Eш;E}‹EшƒРПШ‹UПЏШ‹Uш‹E‰ ывщМПEєkРBЙ+ШQ‹UR‹E PшƒФ ‹EаPџџџQ•,џџџR‹E PшƒФ…,џџџ‰…фўџџЁ‰EЌ‹EаP‹MЌQ‹•фўџџRшƒФ ‰Eˆƒ}ˆ}8‹EЧ…џџџ‰…фўџџ‹EаP‹MЌQ‹•фўџџRшƒФ ‰EˆЧEФыЧEФЧEшщ`ќџџR‹ЭPшXZ_^[‹Mќ3ЭшФф;ьш‹х]У‹џ,џџџ$џџџ$№ўџџPQQP'_Is&ŠBПBњ&BBƒ; %Ј!БИен!цэ)&уI&,BaB’*Ё)Ў(МШдрѕ$ыф U( ёћ5ы(ы­SKP_Silk_A2NLSFфР$ … :ќџџџ      tNLSF  ta_Q16 d мџџџtm Фџџџtroot_ix Иџџџtffrac  џџџtxhi ˆџџџtylo pџџџtymid №ўџџFPQ шџџџtk аџџџtdd Ќџџџtxlo |џџџtyhi єџџџti ,џџџYP џџџYQ dџџџtnom ”џџџtxmid Xџџџtden фўџџtpђxы8Ll}€(ˆ€4‰€@‹€H€f€r’€z“€”•€š—€Ѓ˜€Џ™€Щš€а›€вœ€йž€рŸ€ч €єЇ€Љ€Ќ€DБ€KГ€gЕ€}Ж€šЙ€ИЛ€ОМ€ЪН€ЬП€вР€лФ€ыЧ€№Ъ€Ь€'Э€=Ю€FЯ€Yб€[г€s舓л€Хм€њо€п€ с€ф€#ь€0ю€Cя€Hё€Qђ€Wѓ€`ј€mњ€vћ€|§€ў€Љџ€Ф€Ц€Ы€ъ€€ € €6 €< €E€Q€k€r€t€{€‚€‡€ X \ Ё Ѕ А Д П У Ю в н с < @ NLSF[ root_ix ] <= 32767j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_a2nlsf.c}NLSF[ root_ix ] >= 0/4U‹ььФSVWН<џџџЙ1ИЬЬЬЬѓЋ‹E;E } ‹M‰<џџџы ‹U ‰•<џџџ‹…<џџџ_^[‹х]Уѕ$GФЧ ёp0G@.SKP_min_32ФР € ta  tbђ0GH$п€р€@с€ ;X; \; А; Д; U‹ььфSVWНџџџЙ9ИЬЬЬЬѓЋ‹E‹M‹‰Uр‹E Ср‰Eь‹Eƒш‰Eјы ‹Eјƒш‰Eјƒ}ј|C‹EрСјПMьЏС‹UртџџПMьЏбСњТ‹Uј‹M‹‘а‹EьСјƒРбјЏEра‰UрыЎ‹Eр_^[‹х]Уѕ$šф 9 ёО?š“DSKP_Silk_A2NLSF_eval_polyфР$ € tp  x dd ьџџџtx_Q16 јџџџtn рџџџty32ђXš8LD€H€*I€3J€MK€ŽL€M€“N€ BXB \B B B U‹ььЬSVWН4џџџЙ3ИЬЬЬЬѓЋ‹E‹M Ч‹E‹MЧЧEјы ‹EјƒР‰Eј‹Eј;E}J‹E+Eј‹M‹Tќїк‹EEј‹M+‹Eј‹M ‰‹E+Eј‹M‹Tќїк‹EEј‹M‹Eј‹M‰ыЅ‹E‰Eјы ‹Eјƒш‰Eјƒ}ј~<‹Eј‹M ‹Uј‹u ‹Dќ+–‹Mј‹U ‰DŠќ‹Eј‹M‹Tќ‹Eј‹M‹Eј‹M‰TќыЕ‹EP‹M QшƒФ‹EP‹MQшƒФ_^[ФЬ;ьш‹х]УјPP(ѕ$#ЬЋ ёЉ:# SKP_Silk_A2NLSF_initЬР € a_Q16  tP tQ dd јџџџtkђˆ#8|V€Z€+[€8\€Rd€ve€šg€œl€Гm€аn€эo€яr€џs€t€ IXI \I ьI №I U‹ььиSVWН(џџџЙ6ИЬЬЬЬѓЋЧEјы ‹EјƒР‰Eј‹Eј;E [‹E ‰Eьы ‹Eьƒш‰Eь‹Eь;Eј~‹Eь‹M‹Uь‹u‹Dј+–‹Mь‹U‰DŠјыа‹Eј‹M‹бт‹Eј‹M‹Dј+Т‹Mј‹U‰DŠјы”_^[‹х]Уѕ$šи ё@š“ЅSKP_Silk_A2NLSF_trans_polyиР € tp  dd јџџџtk ьџџџtnђXš8L2€5€86€Q7€n8€p9€‘:€“;€ PXP \P рP фP VОaХpgJАспADcX~j:\bluejeans\denim\trunk\codecs\audio\silk\out\debug\vc100.pdbё@comp.idovЊџџ@feat.00џџ.drectveA.debug$S@+ў™{.textы•?wЫn(ж.debug$SДv˜хm $LN35ф$LN34ч$LN33щ$LN36Р$LN37И .rdata2SЅУ-в .rdataŠRм/т.dataAxU™œ.rdata*Џu]EТSo‚ ‘ Ќ .rtc$TMZ Ь.LУ к .rtc$IMZ žz]щ  .text Gиьио^7єХ.debug$S р Т•‚v .text šќѕ.C щё.debug$SX Б3 #if defined( __GNUC__ ) #include #endif #define SKP_int int /* used for counters etc; at least 16 bits */ #define SKP_int64 long long #define SKP_int32 int #define SKP_int16 short #define SKP_int8 signed char #define SKP_uint unsigned int /* used for counters etc; at least 16 bits */ #define SKP_uint64 unsigned long long #define SKP_uint32 unsigned int #define SKP_uint16 unsigned short #define SKP_uint8 unsigned char #define SKP_int_ptr_size intptr_t #if SKP_USE_DOUBLE_PRECISION_FLOATS # define SKP_float double # define SKP_float_MAX DBL_MAX #else # define SKP_float float # define SKP_float_MAX FLT_MAX #endif #define SKP_INLINE static __inline #ifdef _WIN32 # define SKP_STR_CASEINSENSITIVE_COMPARE(x, y) _stricmp(x, y) #else # define SKP_STR_CASEINSENSITIVE_COMPARE(x, y) strcasecmp(x, y) #endif #define SKP_int64_MAX ((SKP_int64)0x7FFFFFFFFFFFFFFFLL) // 2^63 - 1 #define SKP_int64_MIN ((SKP_int64)0x8000000000000000LL) // -2^63 #define SKP_int32_MAX 0x7FFFFFFF // 2^31 - 1 = 2147483647 #define SKP_int32_MIN ((SKP_int32)0x80000000) // -2^31 = -2147483648 #define SKP_int16_MAX 0x7FFF // 2^15 - 1 = 32767 #define SKP_int16_MIN ((SKP_int16)0x8000) // -2^15 = -32768 #define SKP_int8_MAX 0x7F // 2^7 - 1 = 127 #define SKP_int8_MIN ((SKP_int8)0x80) // -2^7 = -128 #define SKP_uint32_MAX 0xFFFFFFFF // 2^32 - 1 = 4294967295 #define SKP_uint32_MIN 0x00000000 #define SKP_uint16_MAX 0xFFFF // 2^16 - 1 = 65535 #define SKP_uint16_MIN 0x0000 #define SKP_uint8_MAX 0xFF // 2^8 - 1 = 255 #define SKP_uint8_MIN 0x00 #define SKP_TRUE 1 #define SKP_FALSE 0 /* assertions */ #if (defined _WIN32 && !defined _WINCE && !defined(__GNUC__) && !defined(NO_ASSERTS)) # ifndef SKP_assert # include /* ASSERTE() */ # define SKP_assert(COND) _ASSERTE(COND) # endif #else # define SKP_assert(COND) #endif #endif h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_LPC_synthesis_filter.c0000644000175000017500000001145111513063445024010 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_LPC_synthesis_filter.c * * Coefficients are in Q12 * * * * even order AR filter * * */ #include "SKP_Silk_SigProc_FIX.h" /* even order AR filter */ void SKP_Silk_LPC_synthesis_filter( const SKP_int16 *in, /* I: excitation signal */ const SKP_int16 *A_Q12, /* I: AR coefficients [Order], between -8_Q0 and 8_Q0 */ const SKP_int32 Gain_Q26, /* I: gain */ SKP_int32 *S, /* I/O: state vector [Order] */ SKP_int16 *out, /* O: output signal */ const SKP_int32 len, /* I: signal length */ const SKP_int Order /* I: filter order, must be even */ ) { SKP_int k, j, idx, Order_half = SKP_RSHIFT( Order, 1 ); SKP_int32 SA, SB, Atmp, A_align_Q12[SigProc_MAX_ORDER_LPC >> 1], out32_Q10, out32; /* Order must be even */ SKP_assert( 2*Order_half == Order ); /* combine two A_Q12 values and ensure 32-bit alignment */ for( k = 0; k < Order_half; k++ ) { idx = SKP_SMULBB( 2, k ); A_align_Q12[k] = (((SKP_int32)A_Q12[idx]) & 0x0000ffff) | SKP_LSHIFT( (SKP_int32)A_Q12[idx+1], 16 ); } /* S[] values are in Q14 */ for( k = 0; k < len; k++ ) { SA = S[Order-1]; out32_Q10 = 0; for( j=0;j<(Order_half-1); j++ ) { idx = SKP_SMULBB( 2, j ) + 1; /* multiply-add two prediction coefficients for each loop */ /* NOTE: the code below loads two int16 values in an int32, and multiplies each using the */ /* SMLAWB and SMLAWT instructions. On a big-endian CPU the two int16 variables would be */ /* loaded in reverse order and the code will give the wrong result. In that case swapping */ /* the SMLAWB and SMLAWT instructions should solve the problem. */ Atmp = A_align_Q12[j]; SB = S[Order - 1 - idx]; S[Order - 1 - idx] = SA; out32_Q10 = SKP_SMLAWB( out32_Q10, SA, Atmp ); out32_Q10 = SKP_SMLAWT( out32_Q10, SB, Atmp ); SA = S[Order - 2 - idx]; S[Order - 2 - idx] = SB; } /* unrolled loop: epilog */ Atmp = A_align_Q12[Order_half-1]; SB = S[0]; S[0] = SA; out32_Q10 = SKP_SMLAWB( out32_Q10, SA, Atmp ); out32_Q10 = SKP_SMLAWT( out32_Q10, SB, Atmp ); /* apply gain to excitation signal and add to prediction */ out32_Q10 = SKP_ADD_SAT32( out32_Q10, SKP_SMULWB( Gain_Q26, in[k] ) ); /* scale to Q0 */ out32 = SKP_RSHIFT_ROUND( out32_Q10, 10 ); /* saturate output */ out[k] = (SKP_int16)SKP_SAT16( out32 ); /* move result into delay line */ S[Order - 1] = SKP_LSHIFT_SAT32( out32_Q10, 4 ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_FIX_Win32_mt.lib0000644000175000017500001062217411513063445022363 0ustar markmark! / 1284597039 0 8847 ` U’ЁцЁцЁц@иддддддддддддв*в*в*в*в*в*в*в*в*в*в*в*в*в**T*T*T*T*T*T*T*T*T*T*T*T*T*T*T*T*T*T*T*T*T*T*T*T*T*T*T*T*T*T*T*T*T*T*T*Tr6r6r6r6r6r6r6r6м:м:м:м:м:м:м:м:/є/є/є/є/є/є/є/єШвШвШвШвШвШвШвШв*****************v<v<v<v<ЗАјnјnјnјnGцЃЌсўсў6МvмЙ.Й.Й.Й.‚= ƒвЮ L`œžју<у<љB < ‚ РЊ N Fд ‡ ШŠ о L L L L L L L L L ­ єЮ <" ‹R п 7 7 7 7 7 Ж Ж Ж Ж Ж іА іА іА іА іАŒ|D ШJв‹PарТТ`8ЖXў(@м‰h‰h‰h‰hр *dqlАvћЎA4A4‡&‡&бЄ#Ж`ќž.лxДZ`™зRŒŒŒŒ\ИЃ6ђ$ђ$:.Œ”н\н\Ij”№ър>ш‘‘˜˜˜˜gъ­šіœ@p“ИѕжQbž<XXXXXX}<РXРXrr  хЪхЪ :r xа Ж!!UЎ!•p!еЄ"№"Tј"•р"г<_SKP_Silk_VQ_WMat_EC_FIX_SKP_Silk_VAD_GetNoiseLevels_SKP_Silk_VAD_GetSA_Q8_SKP_Silk_VAD_Init_SKP_Silk_type_offset_CDF_SKP_Silk_type_offset_CDF_offset_SKP_Silk_type_offset_joint_CDF_SKP_Silk_sign_CDF_SKP_Silk_max_pulses_table_SKP_Silk_pulses_per_block_BITS_Q6_SKP_Silk_pulses_per_block_CDF_SKP_Silk_pulses_per_block_CDF_offset_SKP_Silk_rate_levels_BITS_Q6_SKP_Silk_rate_levels_CDF_SKP_Silk_rate_levels_CDF_offset_SKP_Silk_shell_code_table0_SKP_Silk_shell_code_table1_SKP_Silk_shell_code_table2_SKP_Silk_shell_code_table3_SKP_Silk_shell_code_table_offsets_SKP_Silk_pitch_contour_CDF_SKP_Silk_pitch_contour_CDF_offset_SKP_Silk_pitch_contour_NB_CDF_SKP_Silk_pitch_contour_NB_CDF_offset_SKP_Silk_pitch_delta_CDF_SKP_Silk_pitch_delta_CDF_offset_SKP_Silk_pitch_lag_MB_CDF_SKP_Silk_pitch_lag_MB_CDF_offset_SKP_Silk_pitch_lag_NB_CDF_SKP_Silk_pitch_lag_NB_CDF_offset_SKP_Silk_pitch_lag_SWB_CDF_SKP_Silk_pitch_lag_SWB_CDF_offset_SKP_Silk_pitch_lag_WB_CDF_SKP_Silk_pitch_lag_WB_CDF_offset_SKP_Silk_Dec_A_HP_12_SKP_Silk_Dec_A_HP_16_SKP_Silk_Dec_A_HP_24_SKP_Silk_Dec_A_HP_8_SKP_Silk_Dec_B_HP_12_SKP_Silk_Dec_B_HP_16_SKP_Silk_Dec_B_HP_24_SKP_Silk_Dec_B_HP_8_SKP_Silk_FrameTermination_CDF_SKP_Silk_FrameTermination_offset_SKP_Silk_FrameTermination_v4_CDF_SKP_Silk_FrameTermination_v4_offset_SKP_Silk_LTPScales_table_Q14_SKP_Silk_LTPscale_CDF_SKP_Silk_LTPscale_offset_SKP_Silk_NLSF_interpolation_factor_CDF_SKP_Silk_NLSF_interpolation_factor_offset_SKP_Silk_Quantization_Offsets_Q10_SKP_Silk_SWB_detect_A_HP_Q13_SKP_Silk_SWB_detect_B_HP_Q13_SKP_Silk_SamplingRates_CDF_SKP_Silk_SamplingRates_offset_SKP_Silk_SamplingRates_table_SKP_Silk_Seed_CDF_SKP_Silk_Seed_offset_SKP_Silk_Transition_LP_A_Q28_SKP_Silk_Transition_LP_B_Q28_SKP_Silk_lsb_CDF_SKP_Silk_vadflag_CDF_SKP_Silk_vadflag_offset_SNR_table_Q1_SNR_table_one_bit_per_sample_Q7_TargetRate_table_MB_TargetRate_table_NB_TargetRate_table_SWB_TargetRate_table_WB_SKP_Silk_NLSF_CB1_16_SKP_Silk_NLSF_CB1_16_Stage_info_SKP_Silk_NLSF_MSVQ_CB1_16_CDF_SKP_Silk_NLSF_MSVQ_CB1_16_CDF_middle_idx_SKP_Silk_NLSF_MSVQ_CB1_16_CDF_start_ptr_SKP_Silk_NLSF_MSVQ_CB1_16_Q15_SKP_Silk_NLSF_MSVQ_CB1_16_ndelta_min_Q15_SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5_SKP_Silk_NLSF_CB1_10_SKP_Silk_NLSF_CB1_10_Stage_info_SKP_Silk_NLSF_MSVQ_CB1_10_CDF_SKP_Silk_NLSF_MSVQ_CB1_10_CDF_middle_idx_SKP_Silk_NLSF_MSVQ_CB1_10_CDF_start_ptr_SKP_Silk_NLSF_MSVQ_CB1_10_Q15_SKP_Silk_NLSF_MSVQ_CB1_10_ndelta_min_Q15_SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5_SKP_Silk_NLSF_CB0_16_SKP_Silk_NLSF_CB0_16_Stage_info_SKP_Silk_NLSF_MSVQ_CB0_16_CDF_SKP_Silk_NLSF_MSVQ_CB0_16_CDF_middle_idx_SKP_Silk_NLSF_MSVQ_CB0_16_CDF_start_ptr_SKP_Silk_NLSF_MSVQ_CB0_16_Q15_SKP_Silk_NLSF_MSVQ_CB0_16_ndelta_min_Q15_SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5_SKP_Silk_NLSF_CB0_10_SKP_Silk_NLSF_CB0_10_Stage_info_SKP_Silk_NLSF_MSVQ_CB0_10_CDF_SKP_Silk_NLSF_MSVQ_CB0_10_CDF_middle_idx_SKP_Silk_NLSF_MSVQ_CB0_10_CDF_start_ptr_SKP_Silk_NLSF_MSVQ_CB0_10_Q15_SKP_Silk_NLSF_MSVQ_CB0_10_ndelta_min_Q15_SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5_SKP_Silk_LTP_gain_BITS_Q6_0_SKP_Silk_LTP_gain_BITS_Q6_1_SKP_Silk_LTP_gain_BITS_Q6_2_SKP_Silk_LTP_gain_BITS_Q6_ptrs_SKP_Silk_LTP_gain_CDF_0_SKP_Silk_LTP_gain_CDF_1_SKP_Silk_LTP_gain_CDF_2_SKP_Silk_LTP_gain_CDF_offsets_SKP_Silk_LTP_gain_CDF_ptrs_SKP_Silk_LTP_gain_middle_avg_RD_Q14_SKP_Silk_LTP_gain_vq_0_Q14_SKP_Silk_LTP_gain_vq_1_Q14_SKP_Silk_LTP_gain_vq_2_Q14_SKP_Silk_LTP_per_index_CDF_SKP_Silk_LTP_per_index_CDF_offset_SKP_Silk_LTP_vq_ptrs_Q14_SKP_Silk_LTP_vq_sizes_SKP_Silk_delta_gain_CDF_SKP_Silk_delta_gain_CDF_offset_SKP_Silk_gain_CDF_SKP_Silk_gain_CDF_offset_SKP_Silk_sum_sqr_shift_SKP_Silk_insertion_sort_decreasing_SKP_Silk_insertion_sort_decreasing_int16_SKP_Silk_insertion_sort_increasing_SKP_Silk_insertion_sort_increasing_all_values_SKP_Silk_solve_LDL_FIX_SKP_Silk_sigm_Q15_SKP_Silk_shell_decoder_SKP_Silk_shell_encoder_SKP_Silk_schur64_SKP_Silk_schur_SKP_Silk_scale_vector16_Q14_SKP_Silk_scale_vector32_16_Q14_SKP_Silk_scale_vector32_Q16_SKP_Silk_scale_vector32_Q26_lshift_18_SKP_Silk_scale_copy_vector16_SKP_Silk_residual_energy_FIX_SKP_Silk_residual_energy16_covar_FIX_SKP_Silk_resample_4_3_SKP_Silk_resample_3_4_SigProc_Resample_3_2_coarse_INTERPOL_SKP_Silk_resample_3_2_SKP_Silk_resample_3_1_SigProc_Resample_2_3_coarse_INTERPOL_SigProc_Resample_2_3_coarsest_INTERPOL_SKP_Silk_resample_2_3_coarsest_SKP_Silk_resample_2_3_coarse_SKP_Silk_resample_2_3_SKP_Silk_resample_2_1_coarse_SKP_Silk_resample_1_3_SKP_Silk_resample_1_2_coarsest_SKP_Silk_resample_1_2_coarse_SKP_Silk_resample_1_2_SKP_Silk_regularize_correlations_FIX_SKP_Silk_range_coder_check_after_decoding_SKP_Silk_range_coder_get_length_SKP_Silk_range_dec_init_SKP_Silk_range_decoder_SKP_Silk_range_decoder_multi_SKP_Silk_range_enc_init_SKP_Silk_range_enc_wrap_up_SKP_Silk_range_encoder_SKP_Silk_range_encoder_multi_SKP_Silk_quant_LTP_gains_FIX_SKP_Silk_pulses_to_bytes_SKP_Silk_process_NLSFs_FIX_SKP_Silk_process_gains_FIX_SKP_Silk_prefilter_FIX_SKP_Silk_PLC_SKP_Silk_PLC_Reset_SKP_Silk_PLC_conceal_SKP_Silk_PLC_glue_frames_SKP_Silk_PLC_update_SKP_Silk_CB_lags_stage2_SKP_Silk_CB_lags_stage3_SKP_Silk_Lag_range_stage3_SKP_Silk_cbk_offsets_stage3_SKP_Silk_cbk_sizes_stage3_SKP_FIX_P_Ana_calc_corr_st3_SKP_FIX_P_Ana_calc_energy_st3_SKP_FIX_P_Ana_find_scaling_SKP_Silk_decode_pitch_SKP_Silk_pitch_analysis_core_SKP_Silk_NSQ_del_dec_SKP_Silk_NSQ_SKP_Silk_noise_shape_analysis_FIX_SKP_Silk_NLSF_VQ_weights_laroia_SKP_Silk_NLSF_VQ_sum_error_FIX_SKP_Silk_NLSF_VQ_rate_distortion_FIX_SKP_Silk_NLSF_stabilize_SKP_Silk_NLSF_stabilize_multi_SKP_Silk_NLSF_MSVQ_encode_FIX_SKP_Silk_NLSF_MSVQ_decode_SKP_Silk_NLSF2A_stable_SKP_Silk_NLSF2A_SKP_Silk_LPC_analysis_filter_SKP_Silk_MA_SKP_Silk_MA_Prediction_SKP_Silk_MA_Prediction_Q13_SKP_Silk_LTP_scale_ctrl_FIX_SKP_Silk_LTP_analysis_filter_FIX_SKP_Silk_LSFCosTab_FIX_Q12_SKP_Silk_LPC_synthesis_order16_SKP_Silk_LPC_synthesis_filter_SKP_Silk_LPC_fit_SKP_Silk_LPC_stabilize_SKP_Silk_LPC_inverse_pred_gain_SKP_Silk_LPC_inverse_pred_gain_Q13_SKP_Silk_LP_variable_cutoff_SKP_Silk_lowpass_short_SKP_Silk_lowpass_int_SKP_Silk_log2lin_SKP_Silk_lin2log_SKP_Silk_LBRR_reset_SKP_Silk_k2a_Q16_SKP_Silk_k2a_SKP_Silk_interpolate_SKP_Silk_inner_prod16_aligned_64_SKP_Silk_inner_prod16_aligned_sat_SKP_Silk_inner_prod_aligned_SKP_Silk_inner_prod_aligned_64_SKP_Silk_init_encoder_FIX_SKP_Silk_HP_variable_cutoff_FIX_SKP_Silk_gains_dequant_SKP_Silk_gains_quant_SKP_Silk_find_pred_coefs_FIX_SKP_Silk_find_pitch_lags_FIX_SKP_Silk_find_LTP_FIX_SKP_Silk_fit_LTP_SKP_Silk_find_LPC_FIX_SKP_Silk_encode_pulses_SKP_Silk_encode_parameters_v4_SKP_Silk_encode_parameters_SKP_Silk_LBRR_encode_FIX_SKP_Silk_encode_frame_FIX_SKP_Silk_SDK_Encode_SKP_Silk_SDK_Get_Encoder_Size_SKP_Silk_SDK_InitEncoder_SKP_Silk_SDK_QueryEncoder_SKP_Silk_detect_SWB_input_SKP_Silk_decoder_set_fs_SKP_Silk_decode_pulses_SKP_Silk_decode_parameters_v4_SKP_Silk_decode_parameters_SKP_Silk_decode_indices_v4_SKP_Silk_decode_frame_SKP_Silk_decode_core_SKP_Silk_SDK_Decode_SKP_Silk_SDK_Get_Decoder_Size_SKP_Silk_SDK_InitDecoder_SKP_Silk_SDK_get_TOC_SKP_Silk_SDK_get_version_SKP_Silk_SDK_search_for_LBRR_SKP_Silk_init_decoder_SKP_Silk_corrMatrix_FIX_SKP_Silk_corrVector_FIX_SKP_Silk_LBRR_ctrl_FIX_SKP_Silk_control_encoder_FIX_SKP_Silk_decode_signs_SKP_Silk_encode_signs_SKP_Silk_CNG_SKP_Silk_CNG_Reset_SKP_Silk_bwexpander_32_SKP_Silk_bwexpander_SKP_Silk_burg_modified_SKP_Silk_biquad_alt_SKP_Silk_biquad_SKP_Silk_autocorr_SKP_Silk_int16_array_maxabs_SKP_Silk_apply_sine_window_SKP_Silk_ana_filt_bank_1_SKP_Silk_allpass_int_SKP_Silk_A2NLSF / 1284597039 0 8755 ` r’UцЁи@д*вT*6r:мє/вШ*‘˜ъgš­œіp@И“жѕbQ<žX<}XРr Ъхr: аx Ж !ЎU!p•!Єе!№"јT"р•"<г"000r//ggOeXI<BCCBA@D?> = /<<<;:  986547721.....bYbYbYYbbbqpomlkjih//edda`_^]0\f[ ZXWVUfTSRQS PPcNMMMMnLKJHGFE30-+,*)((((((((('&%$#"! _SKP_FIX_P_Ana_calc_corr_st3_SKP_FIX_P_Ana_calc_energy_st3_SKP_FIX_P_Ana_find_scaling_SKP_Silk_A2NLSF_SKP_Silk_CB_lags_stage2_SKP_Silk_CB_lags_stage3_SKP_Silk_CNG_SKP_Silk_CNG_Reset_SKP_Silk_Dec_A_HP_12_SKP_Silk_Dec_A_HP_16_SKP_Silk_Dec_A_HP_24_SKP_Silk_Dec_A_HP_8_SKP_Silk_Dec_B_HP_12_SKP_Silk_Dec_B_HP_16_SKP_Silk_Dec_B_HP_24_SKP_Silk_Dec_B_HP_8_SKP_Silk_FrameTermination_CDF_SKP_Silk_FrameTermination_offset_SKP_Silk_FrameTermination_v4_CDF_SKP_Silk_FrameTermination_v4_offset_SKP_Silk_HP_variable_cutoff_FIX_SKP_Silk_LBRR_ctrl_FIX_SKP_Silk_LBRR_encode_FIX_SKP_Silk_LBRR_reset_SKP_Silk_LPC_analysis_filter_SKP_Silk_LPC_fit_SKP_Silk_LPC_inverse_pred_gain_SKP_Silk_LPC_inverse_pred_gain_Q13_SKP_Silk_LPC_stabilize_SKP_Silk_LPC_synthesis_filter_SKP_Silk_LPC_synthesis_order16_SKP_Silk_LP_variable_cutoff_SKP_Silk_LSFCosTab_FIX_Q12_SKP_Silk_LTPScales_table_Q14_SKP_Silk_LTP_analysis_filter_FIX_SKP_Silk_LTP_gain_BITS_Q6_0_SKP_Silk_LTP_gain_BITS_Q6_1_SKP_Silk_LTP_gain_BITS_Q6_2_SKP_Silk_LTP_gain_BITS_Q6_ptrs_SKP_Silk_LTP_gain_CDF_0_SKP_Silk_LTP_gain_CDF_1_SKP_Silk_LTP_gain_CDF_2_SKP_Silk_LTP_gain_CDF_offsets_SKP_Silk_LTP_gain_CDF_ptrs_SKP_Silk_LTP_gain_middle_avg_RD_Q14_SKP_Silk_LTP_gain_vq_0_Q14_SKP_Silk_LTP_gain_vq_1_Q14_SKP_Silk_LTP_gain_vq_2_Q14_SKP_Silk_LTP_per_index_CDF_SKP_Silk_LTP_per_index_CDF_offset_SKP_Silk_LTP_scale_ctrl_FIX_SKP_Silk_LTP_vq_ptrs_Q14_SKP_Silk_LTP_vq_sizes_SKP_Silk_LTPscale_CDF_SKP_Silk_LTPscale_offset_SKP_Silk_Lag_range_stage3_SKP_Silk_MA_SKP_Silk_MA_Prediction_SKP_Silk_MA_Prediction_Q13_SKP_Silk_NLSF2A_SKP_Silk_NLSF2A_stable_SKP_Silk_NLSF_CB0_10_SKP_Silk_NLSF_CB0_10_Stage_info_SKP_Silk_NLSF_CB0_16_SKP_Silk_NLSF_CB0_16_Stage_info_SKP_Silk_NLSF_CB1_10_SKP_Silk_NLSF_CB1_10_Stage_info_SKP_Silk_NLSF_CB1_16_SKP_Silk_NLSF_CB1_16_Stage_info_SKP_Silk_NLSF_MSVQ_CB0_10_CDF_SKP_Silk_NLSF_MSVQ_CB0_10_CDF_middle_idx_SKP_Silk_NLSF_MSVQ_CB0_10_CDF_start_ptr_SKP_Silk_NLSF_MSVQ_CB0_10_Q15_SKP_Silk_NLSF_MSVQ_CB0_10_ndelta_min_Q15_SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5_SKP_Silk_NLSF_MSVQ_CB0_16_CDF_SKP_Silk_NLSF_MSVQ_CB0_16_CDF_middle_idx_SKP_Silk_NLSF_MSVQ_CB0_16_CDF_start_ptr_SKP_Silk_NLSF_MSVQ_CB0_16_Q15_SKP_Silk_NLSF_MSVQ_CB0_16_ndelta_min_Q15_SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5_SKP_Silk_NLSF_MSVQ_CB1_10_CDF_SKP_Silk_NLSF_MSVQ_CB1_10_CDF_middle_idx_SKP_Silk_NLSF_MSVQ_CB1_10_CDF_start_ptr_SKP_Silk_NLSF_MSVQ_CB1_10_Q15_SKP_Silk_NLSF_MSVQ_CB1_10_ndelta_min_Q15_SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5_SKP_Silk_NLSF_MSVQ_CB1_16_CDF_SKP_Silk_NLSF_MSVQ_CB1_16_CDF_middle_idx_SKP_Silk_NLSF_MSVQ_CB1_16_CDF_start_ptr_SKP_Silk_NLSF_MSVQ_CB1_16_Q15_SKP_Silk_NLSF_MSVQ_CB1_16_ndelta_min_Q15_SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5_SKP_Silk_NLSF_MSVQ_decode_SKP_Silk_NLSF_MSVQ_encode_FIX_SKP_Silk_NLSF_VQ_rate_distortion_FIX_SKP_Silk_NLSF_VQ_sum_error_FIX_SKP_Silk_NLSF_VQ_weights_laroia_SKP_Silk_NLSF_interpolation_factor_CDF_SKP_Silk_NLSF_interpolation_factor_offset_SKP_Silk_NLSF_stabilize_SKP_Silk_NLSF_stabilize_multi_SKP_Silk_NSQ_SKP_Silk_NSQ_del_dec_SKP_Silk_PLC_SKP_Silk_PLC_Reset_SKP_Silk_PLC_conceal_SKP_Silk_PLC_glue_frames_SKP_Silk_PLC_update_SKP_Silk_Quantization_Offsets_Q10_SKP_Silk_SDK_Decode_SKP_Silk_SDK_Encode_SKP_Silk_SDK_Get_Decoder_Size_SKP_Silk_SDK_Get_Encoder_Size_SKP_Silk_SDK_InitDecoder_SKP_Silk_SDK_InitEncoder_SKP_Silk_SDK_QueryEncoder_SKP_Silk_SDK_get_TOC_SKP_Silk_SDK_get_version_SKP_Silk_SDK_search_for_LBRR_SKP_Silk_SWB_detect_A_HP_Q13_SKP_Silk_SWB_detect_B_HP_Q13_SKP_Silk_SamplingRates_CDF_SKP_Silk_SamplingRates_offset_SKP_Silk_SamplingRates_table_SKP_Silk_Seed_CDF_SKP_Silk_Seed_offset_SKP_Silk_Transition_LP_A_Q28_SKP_Silk_Transition_LP_B_Q28_SKP_Silk_VAD_GetNoiseLevels_SKP_Silk_VAD_GetSA_Q8_SKP_Silk_VAD_Init_SKP_Silk_VQ_WMat_EC_FIX_SKP_Silk_allpass_int_SKP_Silk_ana_filt_bank_1_SKP_Silk_apply_sine_window_SKP_Silk_autocorr_SKP_Silk_biquad_SKP_Silk_biquad_alt_SKP_Silk_burg_modified_SKP_Silk_bwexpander_SKP_Silk_bwexpander_32_SKP_Silk_cbk_offsets_stage3_SKP_Silk_cbk_sizes_stage3_SKP_Silk_control_encoder_FIX_SKP_Silk_corrMatrix_FIX_SKP_Silk_corrVector_FIX_SKP_Silk_decode_core_SKP_Silk_decode_frame_SKP_Silk_decode_indices_v4_SKP_Silk_decode_parameters_SKP_Silk_decode_parameters_v4_SKP_Silk_decode_pitch_SKP_Silk_decode_pulses_SKP_Silk_decode_signs_SKP_Silk_decoder_set_fs_SKP_Silk_delta_gain_CDF_SKP_Silk_delta_gain_CDF_offset_SKP_Silk_detect_SWB_input_SKP_Silk_encode_frame_FIX_SKP_Silk_encode_parameters_SKP_Silk_encode_parameters_v4_SKP_Silk_encode_pulses_SKP_Silk_encode_signs_SKP_Silk_find_LPC_FIX_SKP_Silk_find_LTP_FIX_SKP_Silk_find_pitch_lags_FIX_SKP_Silk_find_pred_coefs_FIX_SKP_Silk_fit_LTP_SKP_Silk_gain_CDF_SKP_Silk_gain_CDF_offset_SKP_Silk_gains_dequant_SKP_Silk_gains_quant_SKP_Silk_init_decoder_SKP_Silk_init_encoder_FIX_SKP_Silk_inner_prod16_aligned_64_SKP_Silk_inner_prod16_aligned_sat_SKP_Silk_inner_prod_aligned_SKP_Silk_inner_prod_aligned_64_SKP_Silk_insertion_sort_decreasing_SKP_Silk_insertion_sort_decreasing_int16_SKP_Silk_insertion_sort_increasing_SKP_Silk_insertion_sort_increasing_all_values_SKP_Silk_int16_array_maxabs_SKP_Silk_interpolate_SKP_Silk_k2a_SKP_Silk_k2a_Q16_SKP_Silk_lin2log_SKP_Silk_log2lin_SKP_Silk_lowpass_int_SKP_Silk_lowpass_short_SKP_Silk_lsb_CDF_SKP_Silk_max_pulses_table_SKP_Silk_noise_shape_analysis_FIX_SKP_Silk_pitch_analysis_core_SKP_Silk_pitch_contour_CDF_SKP_Silk_pitch_contour_CDF_offset_SKP_Silk_pitch_contour_NB_CDF_SKP_Silk_pitch_contour_NB_CDF_offset_SKP_Silk_pitch_delta_CDF_SKP_Silk_pitch_delta_CDF_offset_SKP_Silk_pitch_lag_MB_CDF_SKP_Silk_pitch_lag_MB_CDF_offset_SKP_Silk_pitch_lag_NB_CDF_SKP_Silk_pitch_lag_NB_CDF_offset_SKP_Silk_pitch_lag_SWB_CDF_SKP_Silk_pitch_lag_SWB_CDF_offset_SKP_Silk_pitch_lag_WB_CDF_SKP_Silk_pitch_lag_WB_CDF_offset_SKP_Silk_prefilter_FIX_SKP_Silk_process_NLSFs_FIX_SKP_Silk_process_gains_FIX_SKP_Silk_pulses_per_block_BITS_Q6_SKP_Silk_pulses_per_block_CDF_SKP_Silk_pulses_per_block_CDF_offset_SKP_Silk_pulses_to_bytes_SKP_Silk_quant_LTP_gains_FIX_SKP_Silk_range_coder_check_after_decoding_SKP_Silk_range_coder_get_length_SKP_Silk_range_dec_init_SKP_Silk_range_decoder_SKP_Silk_range_decoder_multi_SKP_Silk_range_enc_init_SKP_Silk_range_enc_wrap_up_SKP_Silk_range_encoder_SKP_Silk_range_encoder_multi_SKP_Silk_rate_levels_BITS_Q6_SKP_Silk_rate_levels_CDF_SKP_Silk_rate_levels_CDF_offset_SKP_Silk_regularize_correlations_FIX_SKP_Silk_resample_1_2_SKP_Silk_resample_1_2_coarse_SKP_Silk_resample_1_2_coarsest_SKP_Silk_resample_1_3_SKP_Silk_resample_2_1_coarse_SKP_Silk_resample_2_3_SKP_Silk_resample_2_3_coarse_SKP_Silk_resample_2_3_coarsest_SKP_Silk_resample_3_1_SKP_Silk_resample_3_2_SKP_Silk_resample_3_4_SKP_Silk_resample_4_3_SKP_Silk_residual_energy16_covar_FIX_SKP_Silk_residual_energy_FIX_SKP_Silk_scale_copy_vector16_SKP_Silk_scale_vector16_Q14_SKP_Silk_scale_vector32_16_Q14_SKP_Silk_scale_vector32_Q16_SKP_Silk_scale_vector32_Q26_lshift_18_SKP_Silk_schur_SKP_Silk_schur64_SKP_Silk_shell_code_table0_SKP_Silk_shell_code_table1_SKP_Silk_shell_code_table2_SKP_Silk_shell_code_table3_SKP_Silk_shell_code_table_offsets_SKP_Silk_shell_decoder_SKP_Silk_shell_encoder_SKP_Silk_sigm_Q15_SKP_Silk_sign_CDF_SKP_Silk_solve_LDL_FIX_SKP_Silk_sum_sqr_shift_SKP_Silk_type_offset_CDF_SKP_Silk_type_offset_CDF_offset_SKP_Silk_type_offset_joint_CDF_SKP_Silk_vadflag_CDF_SKP_Silk_vadflag_offset_SNR_table_Q1_SNR_table_one_bit_per_sample_Q7_SigProc_Resample_2_3_coarse_INTERPOL_SigProc_Resample_2_3_coarsest_INTERPOL_SigProc_Resample_3_2_coarse_INTERPOL_TargetRate_table_MB_TargetRate_table_NB_TargetRate_table_SWB_TargetRate_table_WB // 1284597039 0 4113 ` Release\SKP_Silk_VQ_nearest_neighbor_FIX.objRelease\SKP_Silk_VAD.objRelease\SKP_Silk_tables_type_offset.objRelease\SKP_Silk_tables_sign.objRelease\SKP_Silk_tables_pulses_per_block.objRelease\SKP_Silk_tables_pitch_lag.objRelease\SKP_Silk_tables_other.objRelease\SKP_Silk_tables_NLSF_CB1_16.objRelease\SKP_Silk_tables_NLSF_CB1_10.objRelease\SKP_Silk_tables_NLSF_CB0_16.objRelease\SKP_Silk_tables_NLSF_CB0_10.objRelease\SKP_Silk_tables_LTP.objRelease\SKP_Silk_tables_gain.objRelease\SKP_Silk_sum_sqr_shift.objRelease\SKP_Silk_sort.objRelease\SKP_Silk_solve_LS_FIX.objRelease\SKP_Silk_sigm_Q15.objRelease\SKP_Silk_shell_coder.objRelease\SKP_Silk_schur64.objRelease\SKP_Silk_schur.objRelease\SKP_Silk_scale_vector.objRelease\SKP_Silk_scale_copy_vector16.objRelease\SKP_Silk_residual_energy_FIX.objRelease\SKP_Silk_residual_energy16_FIX.objRelease\SKP_Silk_resample_4_3.objRelease\SKP_Silk_resample_3_4.objRelease\SKP_Silk_resample_3_2_rom.objRelease\SKP_Silk_resample_3_2.objRelease\SKP_Silk_resample_3_1.objRelease\SKP_Silk_resample_2_3_rom.objRelease\SKP_Silk_resample_2_3_coarsest.objRelease\SKP_Silk_resample_2_3_coarse.objRelease\SKP_Silk_resample_2_3.objRelease\SKP_Silk_resample_2_1_coarse.objRelease\SKP_Silk_resample_1_3.objRelease\SKP_Silk_resample_1_2_coarsest.objRelease\SKP_Silk_resample_1_2_coarse.objRelease\SKP_Silk_resample_1_2.objRelease\SKP_Silk_regularize_correlations_FIX.objRelease\SKP_Silk_range_coder.objRelease\SKP_Silk_quant_LTP_gains_FIX.objRelease\SKP_Silk_pulses_to_bytes.objRelease\SKP_Silk_process_NLSFs_FIX.objRelease\SKP_Silk_process_gains_FIX.objRelease\SKP_Silk_prefilter_FIX.objRelease\SKP_Silk_PLC.objRelease\SKP_Silk_pitch_est_tables.objRelease\SKP_Silk_pitch_analysis_core.objRelease\SKP_Silk_NSQ_del_dec.objRelease\SKP_Silk_NSQ.objRelease\SKP_Silk_noise_shape_analysis_FIX.objRelease\SKP_Silk_NLSF_VQ_weights_laroia.objRelease\SKP_Silk_NLSF_VQ_sum_error_FIX.objRelease\SKP_Silk_NLSF_VQ_rate_distortion_FIX.objRelease\SKP_Silk_NLSF_stabilize.objRelease\SKP_Silk_NLSF_MSVQ_encode_FIX.objRelease\SKP_Silk_NLSF_MSVQ_decode.objRelease\SKP_Silk_NLSF2A_stable.objRelease\SKP_Silk_NLSF2A.objRelease\SKP_Silk_MA.objRelease\SKP_Silk_LTP_scale_ctrl_FIX.objRelease\SKP_Silk_LTP_analysis_filter_FIX.objRelease\SKP_Silk_LSF_cos_table.objRelease\SKP_Silk_LPC_synthesis_order16.objRelease\SKP_Silk_LPC_synthesis_filter.objRelease\SKP_Silk_LPC_stabilize.objRelease\SKP_Silk_LPC_inv_pred_gain.objRelease\SKP_Silk_LP_variable_cutoff.objRelease\SKP_Silk_lowpass_short.objRelease\SKP_Silk_lowpass_int.objRelease\SKP_Silk_log2lin.objRelease\SKP_Silk_lin2log.objRelease\SKP_Silk_LBRR_reset.objRelease\SKP_Silk_k2a_Q16.objRelease\SKP_Silk_k2a.objRelease\SKP_Silk_interpolate.objRelease\SKP_Silk_inner_prod_aligned.objRelease\SKP_Silk_init_encoder_FIX.objRelease\SKP_Silk_HP_variable_cutoff_FIX.objRelease\SKP_Silk_gain_quant.objRelease\SKP_Silk_find_pred_coefs_FIX.objRelease\SKP_Silk_find_pitch_lags_FIX.objRelease\SKP_Silk_find_LTP_FIX.objRelease\SKP_Silk_find_LPC_FIX.objRelease\SKP_Silk_encode_pulses.objRelease\SKP_Silk_encode_parameters_v4.objRelease\SKP_Silk_encode_parameters.objRelease\SKP_Silk_encode_frame_FIX.objRelease\SKP_Silk_enc_API.objRelease\SKP_Silk_detect_SWB_input.objRelease\SKP_Silk_decoder_set_fs.objRelease\SKP_Silk_decode_pulses.objRelease\SKP_Silk_decode_parameters_v4.objRelease\SKP_Silk_decode_parameters.objRelease\SKP_Silk_decode_indices_v4.objRelease\SKP_Silk_decode_frame.objRelease\SKP_Silk_decode_core.objRelease\SKP_Silk_dec_API.objRelease\SKP_Silk_create_init_destroy.objRelease\SKP_Silk_corrMatrix_FIX.objRelease\SKP_Silk_control_codec_FIX.objRelease\SKP_Silk_code_signs.objRelease\SKP_Silk_CNG.objRelease\SKP_Silk_bwexpander_32.objRelease\SKP_Silk_bwexpander.objRelease\SKP_Silk_burg_modified.objRelease\SKP_Silk_biquad_alt.objRelease\SKP_Silk_biquad.objRelease\SKP_Silk_autocorr.objRelease\SKP_Silk_array_maxabs.objRelease\SKP_Silk_apply_sine_window.objRelease\SKP_Silk_ana_filt_bank_1.objRelease\SKP_Silk_allpass_int.objRelease\SKP_Silk_A2NLSF.obj /0 1284597039 100666 19479 ` џџL/e‘L8ўГ ЅйЋMЌ›жЖ"&SТїK /e‘LгJ.drectveQ, .cil$fg"}@@.cil$gl Ÿ@@.cil$inЊ @@.cil$exЬ3Ћ @@.cil$syЫwA@@.cil$db‘BJ@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_VQ_nearest_neighbor_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_VQ_nearest_neighbor_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2ž2€ov V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_vq_nearest_neighbor_fix.c%%ѕ§эјжЅZЇњ‹ћЖAФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШSKP_Silk_VQ_WMat_EC_FIX‚€ €(€#€Пh Кsize_tu ЃSA_AttrTarget€)АSA_Parameter€)† strnlen†€ЎSA_Method€)†@ Лwchar_t!€ wcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOO€ O €ўO3 f0" D ЄBEOœO)SS&F-V-T-R-P-N-L-J-HLOSO*O+O,O/ЙJ†Cє3†At€џџџ2†AtKO0&ZЙP†CЎ 2†CЎ KO1&Y3†At2†AtK:`)a&Y3†At5†AtK)`ЙY†AtЙV†At"8bSO3&]ЙL†CЎ 3†A(0Є!­ ,†AtЙZ†CЎ 3†A(0Є!­ ,†At,„"!,†AtЙL†CЎ 3†A(0Є!­ ,†AtЙZ†CЎ 3†A(0Є!­ ,†At3†At 2†AtKO4&^ЙL†CЎ 3†A(0Є!­ ,†AtЙZ†CЎ 3†A(0Є!­ ,†At,„"!,†AtЙL†CЎ 3†A(0Є!­ ,†AtЙZ†CЎ 3†A(0Є!­ ,†At3†At 2†AtKO5&_ЙL†CЎ 3†A(0Є!­ ,†AtЙZ†CЎ 3†A(0Є!­ ,†At2†AtKO8&[ЙTІA“ ,„!,†AtЙR†CЎ ЙY†At3†A(0Є!­ ,„!,†At2†AtKO:3‚KOB&\ЙN†C” 3†A(0ІA“ 3†At Й]†At3†At ЙN†C” 3†A(0ІA“ 3†At€џџ Й]†At3†At 3†At 2†AtKOC&\Й\†AtЙN†C” 3†A(0ІA“ 3†At Й^†At,„!,†AtЙN†C” 3†A(0ІA“ 3†At€џџ Й^†At,„!,†At3†At 2†AtKOD&\Й\†AtЙN†C” 3†A (0ІA“ 3†At Й^†At3†At ЙN†C” 3†A (0ІA“ 3†At€џџ Й^†At3†At 3†At 2†AtKOE&\Й\†AtЙN†C” 3†A(0ІA“ 3†At Й_†At,„!,†AtЙN†C” 3†A(0ІA“ 3†At€џџ Й_†At,„!,†At3†At 2†AtKOF&\Й\†At3†At 2†AtKOG&\Й\†AtЙN†C” 3†A(0ІA“ 3†At Й]†At,„!,†AtЙN†C” 3†A(0ІA“ 3†At€џџ Й]†At,„!,†At3†At 2†AtKOH&[Й[†AtЙ\†At3†At Й]†At,„!,†AtЙ\†At3†At€џџ Й]†At,„!,†At3†At 2†AtKOK&\ЙN†C” 3†A(0ІA“ 3†At Й^†At,„!,†AtЙN†C” 3†A(0ІA“ 3†At€џџ Й^†At,„!,†At3†At 2†AtKOL&\Й\†AtЙN†C” 3†A (0ІA“ 3†At Й^†At3†At ЙN†C” 3†A (0ІA“ 3†At€џџ Й^†At3†At 3†At 2†AtKOM&\Й\†AtЙN†C” 3†A$(0ІA“ 3†At Й_†At,„!,†AtЙN†C” 3†A$(0ІA“ 3†At€џџ Й_†At,„!,†At3†At 2†AtKON&\Й\†At3†At 2†AtKOO&\Й\†AtЙN†C” 3†A(0ІA“ 3†At Й]†At3†At ЙN†C” 3†A(0ІA“ 3†At€џџ Й]†At3†At 3†At 2†AtKOP&[Й[†AtЙ\†At3†At Й]†At3†At Й\†At3†At€џџ Й]†At3†At 3†At 2†AtKOS&\ЙN†C” 3†A4(0ІA“ 3†At Й^†At3†At ЙN†C” 3†A4(0ІA“ 3†At€џџ Й^†At3†At 3†At 2†AtKOT&\Й\†AtЙN†C” 3†A8(0ІA“ 3†At Й_†At,„!,†AtЙN†C” 3†A8(0ІA“ 3†At€џџ Й_†At,„!,†At3†At 2†AtKOU&\Й\†At3†At 2†AtKOV&\Й\†AtЙN†C” 3†A0(0ІA“ 3†At Й^†At,„!,†AtЙN†C” 3†A0(0ІA“ 3†At€џџ Й^†At,„!,†At3†At 2†AtKOW&[Й[†AtЙ\†At3†At Й^†At,„!,†AtЙ\†At3†At€џџ Й^†At,„!,†At3†At 2†AtKOZ&\ЙN†C” 3†AL(0ІA“ 3†At Й_†At,„!,†AtЙN†C” 3†AL(0ІA“ 3†At€џџ Й_†At,„!,†At3†At 2†AtKO[&\Й\†At3†At 2†AtKO\&\Й\†AtЙN†C” 3†AH(0ІA“ 3†At Й^†At3†At ЙN†C” 3†AH(0ІA“ 3†At€џџ Й^†At3†At 3†At 2†AtKO]&[Й[†AtЙ\†At3†At Й^†At3†At Й\†At3†At€џџ Й^†At3†At 3†At 2†AtKO`&\ЙN†C” 3†A`(0ІA“ 3†At Й_†At,„!,†AtЙN†C” 3†A`(0ІA“ 3†At€џџ Й_†At,„!,†At3†At 2†AtKOa&[Й[†AtЙ\†At3†At Й_†At,„!,†AtЙ\†At3†At€џџ Й_†At,„!,†At3†At 2†AtKOc3‚KOfЙ[†AtЙJ†Cє0†At"8SOgЙJ†CєЙ[†At2†AtKOhЙH†CєЙY†At2†AtKOiTOl)&Z3†A †CЎ KOmT:a)bOnT)XOGTTOœOoM   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t b a `X VL†tTmu_Q8†€Rcl_Q6†€.Pcb_Q14†€.NW_Q18†€Lin_Q14†€.Jrate_dist_Q14†€tHind†€t \sum2_Q16†tZcb_row_Q14†€.^diff_Q14_23†t[sum1_Q14†tYk†t_diff_Q14_4†t]diff_Q14_01†t    ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ ” Љ ­ Ў  %@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg".cil$gl .cil$in.cil$exЬ3.cil$syЫ.cil$db‘ /45 1284597039 100666 24799 ` џџL/e‘L8ўГ ЅйЋMЌ›жЖ"&SТП` /e‘L›_.drectveQ, .cil$fgњ}@@.cil$gl w@@.cil$in&‡@@.cil$ex|B­@@.cil$syЗ )R@@.cil$dbЛр^@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_VAD.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_VAD.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2ї2€ov V €џџ€€џџ*€џџ+€џџ,€џџИc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьPc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЕc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_vad.cXndь.gИ§АЅНqHm”$ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYu,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_PФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ SKP_min_int†€€­€aШSKP_max_int†€€е€Ш%SKP_max_32†€€ѓ€{Ш=SKP_Silk_CLZ_FRAC‚€€ш€$9Шж DSKP_Silk_SQRT_APPROX†€€я€ЄZШ=ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШЉSKP_Silk_VAD_Init†€,€(€#€ h%НSKP_Silk_VAD_GetSA_Q8†€Љ€>+€Р€ hі љ ќ DЎYЎSKP_Silk_VAD_GetNoiseLevels‚€ё€†<€Љ €Hh ѕSKP_Silk_VAD_state€ Йsize_tuі SKP_Silk_ana_filt_bank_1‚€1 ЃSA_AttrTarget€)ќ SKP_Silk_sigm_Q15†€АSA_Parameter€)† strnlen†€ЎSA_Method€)†@Y$tiltWeights†€€d Кwchar_t!€ wcsnlen†€ SKP_Silk_VAD_state€љ SKP_Silk_lin2log†€ Y€0u€p€ бџџ€ бџџ[€@ OЕOO3 f0" D ЄBEOЖOЗOИOЗO€ OЖO8OOOЖO?OЕOOPOOЖOPOOЕOOœO!O$ OO% O& O' OЖO' OO( OOЖO( OO' OO& O#Ou OOЖOu OO& O\O% O&O’ OOЖO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€O$ OOсOOтOсOO& OOсO O$ OуOO& OуOO% OOуO OсOOуO!O$ OФOOсOФOOуOOФO O$ O"OOOO% OO OOO& OOOOOO O$ OOO!OуOOO"OO!O$ OOO"OOOO#OOOO$OOO$ O#OœO"O€ O €ўO3 f0" D ЄBEOœO*SS&ЉF-HLOSO+&L3†At2†AtKO.3†At€­@†Cƒ3†BupU†Bu3†AtU†AtЙH†CЇ#U†CƒLKO2&K3†At2†AtK:N)O&K3†At5†AtK)NЙK†At3†At"8PSO3ЙH†CЇ#3†At\'†Cы ЙK†At3†A(&%Н†At€ 3†AtU†At3†At2ЙK†At3†AtU†AtL2†AtKO4T:O)PO7&K3†At2†AtK:R)S&K3†At5†AtK)RЙK†At3†At"8TSO8ЙH†CЇ#3†At<'†Cы ЙK†At3†A(3†AtdЙH†CЇ#3†At\'†Cы ЙK†At3†A(0†At2†AtKO9ЙH†CЇ#3†AtL'†Cы ЙK†At3†A(3†At€џџџЙH†CЇ#3†At<'†Cы ЙK†At3†A(0†At2†AtKO:T:S)TO;ЙH†CЇ#3†Atl'†Cє3†At2†AtKO>&K3†At2†AtK:V)W&K3†At5†AtK)VЙK†At3†At"8XSO?ЙH†CЇ#3†At('†Cы ЙK†At3†A(3†At€d2†AtKO@T:W)XOBЙL†AtA†At:JOCT)JOGTTO€ O €ўO3 f0" D ЄBEOœOTSS&НF-f-d-b-`-^-\-ZLOSOUOVOWOXOYO[O\O]O^O_&{3†At2†AtKOb3‚KOc3‚KOd3‚KOj&і Н‚€яЙfІA“ UІA“ &k3†A(U†Cє&v3†A€ (U†C‘&v3†A(U†C‘ЙZ†CЇ#3†At'†Cы 3†A(U†CєЙd†CЎ U†CЎ LKOm&і Н‚€яЙfІA“ 3†At UІA“ &k3†A(U†Cє&v3†A€Р(U†C‘&v3†A(U†C‘ЙZ†CЇ#3†At'†Cы 3†A(U†Cє&v3†A(U†CЎ LKOp&і Н‚€яЙfІA“ 3†At UІA“ &k3†A(U†Cє&v3†A€р(U†C‘&v3†A(U†C‘ЙZ†CЇ#3†At'†Cы 3†A(U†Cє&v3†A(U†CЎ LKOu&lЙfІA“ 3†At 2†AtKOv&v3†A(Йl†At3†At3†A(&v3†A(Йl†At3†At3†A(0„!,†At3†At 2„!KOw&u&v3†A(Йl†At3†At3†A(0„!2„!KOx&pЙl†At3†At2†AtK:)€&p3†At6†AtK)Йp†At3†At$8SOy&v3†A(Йp†At3†At3†A(&v3†A(Йp†At3†At3†A(0„!,†At3†At 2„!KOz&v3†A(Йp†At3†A(&v3†A(Йp†At3†At3†A(0„!,†At„!KO{T:€)O|&v3†A(ЙZ†CЇ#3†At8'„C‘0„!,†At„!KO}ЙZ†CЇ#3†At8'„C‘Йu„!2„!KO€‚&q3†At2†AtK:‚)ƒ&q3†At5†AtK)‚Йq†At3†At"8„SO€„&lЙfІA“ &Н†At€ 3†AtU†At3†AtЙq†AtU†AtL 2†AtKO€‡&mЙl†At3†At 2†AtKO€ˆ&n3†At2†AtKO€Œ&wЙq†At3†A(ЙZ†CЇ#3†At'†Cы Йq†At3†A(0†At2†AtKO€&r3†At2†AtK:…)†&r3†At5†AtK)…Йr†At3†At"8‡SO€Ž&s3†At2†AtKO€&p3†At2†AtK:ˆ)‰&p3†At5†AtK)ˆЙp†AtЙm†At"8ŠSO€’&z&vЙq†At3†A€р(Йp†AtЙn†At3†A(0„!,†At3†At 2†AtKO€“&sЙs†AtЙz†At,„!,†AtЙz†At,„!,†At2†AtKO€–3‚KO€—T:‰)ŠO€šЙr†At3†At"8SO€›&wЙq†At3†A(&wЙq†At3†A(0†AtЙs†At3†Bu€€ 3†At€џџџ&wЙq†At3†A(0†AtЙs†AtCB2†AtKO€œT:‘)SO€ž&wЙq†At3†A(&wЙq†At3†A(0†AtЙs†At3†At 3†Bu€€ 3†At€џџџ&wЙq†At3†A(0†AtЙs†At3†At CB2†AtKO€ŸT)‘O€Ё&nЙm†At†AtKO€ЂT:†)‡O€ЃЙZ†CЇ#3†At'†Cы Йq†At3†A(Йs†At2†AtKO€ЄT:ƒ)„O€Љ&ЎН‚€ђЙZ†CЇ#U†CЇ#&w3†A(U†C” LKO€Ў&s3†At2†AtKO€Џ&j3†At2†AtKO€А&q3†At2†AtK:’)“&q3†At5†AtK)’Йq†At3†At"8”SO€Б&y&wЙq†At3†A(0†AtЙZ†CЇ#3†At<'†Cы Йq†At3†A(0†At2†AtKO€ВЙy†At3†At$8•SO€Д&wЙq†At3†A(0†At3†Bu€€џ 3†At8–SO€Е&xЙq†At3†A(&wЙq†At3†A(0†At3†At ЙZ†CЇ#3†At<'†Cы Йq†At3†A(0†At3†At2†AtKO€ЖT:˜)–SO€З&xЙq†At3†A(&wЙq†At3†A(0†AtЙZ†CЇ#3†At<'†Cы Йq†At3†A(0†At3†At 3†At2†AtKO€ИT)˜O€Л&o&љ Н†At€&xЙq†At3†A(0†AtUІA“ L3†At€2†AtKO€О&sЙs†AtЙo†At,„!,†AtЙo†At,„!,†At2†AtKO€СЙy†At3†At€"8žSO€У&o&DН†At€Йy†AtU†AtL3†At 3†At Йo†At,„!,†At&DН†At€Йy†AtU†AtL3†At 3†At€џџ Йo†At,„!,†At3†At 2†AtKO€ФTO€Х)ž&jЙj†At&YЙq†At3†A(0ІA“ 3†At Йo†At,„!,†At&YЙq†At3†A(0ІA“ 3†At€џџ Йo†At,„!,†At3†At 2†AtKO€ЦT:Ї)•SO€Ч&xЙq†At3†A(3†At€2†AtKO€ШT)ЇO€ЩT:“)”O€Ь&sЙs†At3†At2†AtKO€ЯЙ^†Cє3†At&DН†At€Йs†AtU†AtL,„!2†AtKO€д&i&ќ Н†At€3†AtЙ^†Cє0†At,„!,†At3†At€ШЏЙ^†Cє0†At,„!,†At3†At 3†At€€U†AtL2†AtKO€йЙb†Cє&ќ Н†At€Йj†AtU†AtL3†At€@3†At 2†AtKO€о&y3†At2†AtKO€п&q3†At2†AtK:Ў)Џ&q3†At5†AtK)ЎЙq†At3†At"8АSO€с&yЙq†At3†At&wЙq†At3†A(0†AtЙZ†CЇ#3†At<'†Cы Йq†At3†A(0†At3†At †AtKO€тT:Џ)АO€хЙy†At3†At!8БSO€ц&iЙi†At3†At 2†AtKO€чT:В)БЙy†At3†At€€"8ГSO€щ&y&DН†At€Йy†At3†At U†AtL2†AtKO€ъ&i3†At€€Йy†At3†At Йi†At,„!,†At3†At€€Йy†At3†At€џџ Йi†At,„!,†At3†At 2†AtKO€ыTO€ю)Г)ВЙ\†Cє&Н†At€ 3†At€џU†AtЙi†At3†At U†AtL2†AtKO€є&t3†AtЙi†At3†At Йi†At,„!,†AtЙi†At3†At€џџ Йi†At,„!,†At3†At ,„!,†At3†At€Йi†At3†At Йi†At,„!,†AtЙi†At3†At€џџ Йi†At,„!,†At3†At ,„!,†At3†At 2†AtKO€ѕ&q3†At2†AtK:Ф)Х&q3†At5†AtK)ФЙq†At3†At"8ЦSO€їO€јЙZ†CЇ#3†At('†Cы Йq†At3†A(ЙZ†CЇ#3†At('†Cы Йq†At3†A(0†At&xЙq†At3†A(0†AtЙZ†CЇ#3†At('†Cы Йq†At3†A(0†At3†At Йt†At,„!,†At&xЙq†At3†A(0†AtЙZ†CЇ#3†At('†Cы Йq†At3†A(0†At3†At€џџ Йt†At,„!,†At3†At 2†AtKO€ћ&o3†At&љ Н†At€ЙZ†CЇ#3†At('†Cы Йq†At3†A(0†AtUІA“ L3†At€2†AtKO€§Й`†CєЙq†At3†A(&ќ Н†At€Йo†At3†At€3†At U†AtL2†AtKO€ўT:Х)ЦO€Й{†AtA†At:hO€T)hOGTTO€ O €ўO3 f0" D ЄBEOœO€ SS&ЎF-Э-ЫLOSO€ O€ O€ O€ЙЭ†CЇ#3†Atl'†Cє0†At3†At€ш"8жSO€&е3†At€џЙЭ†CЇ#3†Atl'†Cє0†At3†At 3†At2†AtKO€T:и)жSO€&е3†At2†AtKO€T)иO€&а3†At2†AtK:й)к&а3†At5†AtK)йЙа†At3†At"8лSO€&бЙЭ†CЇ#3†At<'†Cы Йа†At3†A(0†At2†AtKO€3‚KO€&вЙЫ†C” Йа†At3†A(0ІA“ ЙЭ†CЇ#3†At\'†Cы Йа†At3†A(0†At3†Bu€€ 3†At€џџџЙЫ†C” Йа†At3†A(0ІA“ ЙЭ†CЇ#3†At\'†Cы Йа†At3†A(0†AtCB2†AtKO€3‚KO€ &г3†At€џџџЙв†At2†AtKO€!3‚KO€$Йв†AtЙб†At3†At $8рSO€%&д3†At€€2†AtKO€&T:с)рЙв†AtЙб†At"8тSO€'&д3†At€2†AtKO€(T:у)тSO€)&дЙг†At3†At Йб†At,„!,†AtЙг†At3†At€џџ Йб†At,„!,†At3†At Йг†AtЙб†At3†At 3†At3†At 3†At 3†At€Йг†At3†At Йб†At,„!,†AtЙг†At3†At€џџ Йб†At,„!,†At3†At Йг†AtЙб†At3†At 3†At3†At 3†At€џџ 3†At€3†At 2†AtKO€*T)у)сO€-&д&Н†At€ Йе†AtU†AtЙд†AtU†AtL2†AtKO€0ЙЭ†CЇ#3†AtL'†Cы Йа†At3†A(ЙЭ†CЇ#3†AtL'†Cы Йа†At3†A(0†AtЙг†AtЙЭ†CЇ#3†AtL'†Cы Йа†At3†A(0†At3†At Йд†At,„!,†AtЙг†AtЙЭ†CЇ#3†AtL'†Cы Йа†At3†A(0†At3†At€џџ Йд†At,„!,†At3†At 2†AtKO€13‚KO€4&б3†At€џџџЙЭ†CЇ#3†AtL'†Cы Йа†At3†A(0†At2†AtKO€53‚KO€8&бЙб†At3†At€џџџ"Йб†At3†At€џџџCB2†AtKO€;ЙЭ†CЇ#3†At<'†Cы Йа†At3†A(Йб†At2†AtKO€<T:к)лO€?ЙЭ†CЇ#3†Atl'†Cє3†At5†AtKO€@T)ЯOGTTOœO€AM   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t X W VT S RP O NJ HpsSilk_VAD†€Ї Kb†tLret†t   Ц Х ФГВБА Џ ЎЇž˜–•” “ ’‘Š ‰ ˆ‡ † …„ ƒ ‚ € h fframelength†€dpIn†€.bpTilt_Q15†€t`pQuality_Q15†€t^pSNR_dB_Q7†€t\pSA_Q8†€tZpsSilk_VAD†€Ї xNrgToNoiseRatio_Q8†€cuHPstateTmp„pi†tmdec_subframe_length†tssumSquared†trs†tkscratch†€@ Ё€ѓtsmooth_coef_Q16†tldecimated_framelength†twXnrg†Ё€czx_tmp†tqb†toSNR_Q7†t{ret†tndec_subframe_offset†tyspeech_nrg†tjinput_tilt†tvX„€€Ё€єiSA_Q15†t                утсрл к йижЯ ЭpsSilk_VAD†€ЇЫpX†€ еmin_coef†tвnrg†tгinv_nrg†tбnl†tаk†tдcoef†t        ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёэ!Ž"'!tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ ’ “ ” Ÿ   Љ Ў Б у ы э!Ž"ф"Ї#Љ#$‚$Ќ$я%ё%ђ%ѓ%є%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fgњ.cil$gl .cil$in&.cil$ex|B.cil$syЗ .cil$dbЛ /70 1284597039 100666 15770 ` џџL/e‘L8ўГ ЅйЋMЌ›жЖ"&SТz= /e‘LV<.drectveQ, .cil$fg}@@.cil$gl™ •@@.cil$in . @@.cil$exк'Ю @@.cil$sy#Ј4@@.cil$db‹Ы;@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_tables_type_offset.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_tables_type_offset.obj-FdRelease\vc100.pdb-errorreport:prompt†1j22€ov• V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШЗj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы Иj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fМc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЛc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩКc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьTc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkЁc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Оj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпРc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїхc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлфc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЙ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Ф j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_type_offset.cQq””п"ј–{*ї~Ч SKP_Silk_CLZ16†€ €У |€‡Шй SKP_Silk_CLZ32†€€ €,+ШЧ @SKP_Silk_CLZ_FRAC‚€€!€$9Шй ­SKP_Silk_SIN_APPROX_Q24†€€ !€‚€ZШ Нsize_tuХSKP_Silk_type_offset_joint_CDF„(€€b ЃSA_AttrTarget€)ФSKP_Silk_type_offset_CDF„ €€aАSA_Parameter€)†7strnlen†€ЎSA_Method€)†@ Оwchar_t!Ўwcsnlen†€ЦSKP_Silk_type_offset_CDF_offset†€€ Ф€’’€F €ДЌ€џџЦХ€Vс€.я€–ѓ€џџ€ЊG€ƒœ€‹Њ€џџ€ІX€з^€ГŠ€џџ€Г€/€в2€џџ[€@ OЕOO3 f0" D ЄBEOЖOЗOЖOOИOOЙOКOЛOМOЛO€ OКO8OOOКO?OЙOOTOOКOTOOЙOOИO#OЁOOКOЁOOИO\OЖO OЕOOОOOИOОOOПOOИOПO&OРOOКOРOO€ O €ўO3 f0" D ЄBEOРOtSS&<F-:-8LOSOuЙ8†C 3†At3†At&7Н†Bu€Й:†BuU†BuЙ8†C U†C LCBA†Bu:=OvT)=OGTTO€ O €ўO3 f0" D ЄBEOРO€!SS&ГF-Б-ЏLOSO€"ЙЏ†C† 3†Cƒ3†At&ЎН†Bu€ ЙБ†BuU†BuЙЏ†C† U†C† LCBA†Bu:ДO€#T)ДOGTTOПO'OфOOКOфOOхOOКOхOOфOOПO(OЙ OOИOЙ O+OПO)OФ OO€ O €ўO3 f0" D ЄBEOФ OLSS&Ч F-Х LOSOM&Щ 3†At2†AtKONЙХ „!,†At3†At8Ъ SOO3†AtA†At:Ш OPTOR)Ъ ЙХ „!,†At3†At€џ 8Ы SOSЙХ „!,†At3†At€№ 8Ь SOT&Х 3†At „!KOUT:Э )Ь SOV&Щ 3†At†AtKOW&Х 3†At„!KOXT)Э OYT:Ю )Ы SOZЙХ „!,†At3†At€№џ 8Я SO[&Щ 3†At†AtKO\&Х 3†At„!KO]T:а )Я SO^&Щ 3†At †AtKO_T)а O`T)Ю ObЙХ „!,†At3†At 8б SOcЙХ „!,†At3†At 8в OdЙЩ †At3†AtA†At:Ш Oe:г )в OfЙЩ †At3†AtA†At:Ш )г OgT:д )б SOhЙХ „!,†At3†At 8е OiЙЩ †At3†AtA†At:Ш Oj:ж )е OkЙЩ †At3†AtA†At:Ш )ж OlT)д OmT)Ш OGTTO€ O €ўO3 f0" D ЄBEOФ OpSS&й F-з LOSOrЙз †At3†Bu€џџ 8л SOs&Ч Н†At€ Йз †At3†At ,„!U„!LA†At:к OtT:н )л SOu&Ч Н†At€ Йз †At,„!U„!L3†AtA†At:к OvT)н OwT)к OGTTOПO+O€ O €ўO3 f0" D ЄBEOПO€зSS&F--LOSO€иЙ†AtЙ†At"Й†AtЙ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOПO€лSS& F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!: O€нT) OGTTO€ O €ўO3 f0" D ЄBEOПO€пSS&F-- LOSO€рЙ †AtЙ†At"Й †AtЙ†AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOПO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOПO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOПO€эSS&"F- -LOSO€юЙ„!,†AtЙ „!,†At$Й„!,†AtЙ „!,†AtCBA„!:#O€яT)#OGTTO€ O €ўO3 f0" D ЄBEOПO€ёSS&(F-&-$LOSO€ђЙ$†AtЙ&†At$Й$†AtЙ&†AtCBA†At:)O€ѓT))OGTTO€ O €ўO3 f0" D ЄBEOПO€ѕSS&.F-,-*LOSO€іЙ*ˆЙ,ˆ$Й*ˆЙ,ˆCBAˆ:/O€їT)/OGTTO0OO€ O €ўO3 f0" D ЄBEO0O*SS&3F-1LOSO+O-&5Й1ˆ3†At ,†At2†AtKO.Й5†At3†At87SO03†At &й Н†At€Й1ˆ,†AtU†AtLA†At:4O1T:9)7SO3&й Н†At€Й5†AtU†AtLA†At:4O4T)9O5T)4OGTTO€ O €ўO3 f0" D ЄBEO0O;SS&@F->-<-:LOSO&B&й Н†At€Й:†AtU†AtL2†AtKO?Й<†CєЙB†At2†AtKO@ЙB†At3†At"8CSOAЙ>†CєЙ:†At3†AtЙB†At 3†At 2†AtKOBT:D)CSOCЙ>†CєЙ:†AtЙB†At3†At 3†At 2†AtKODT)DOET)AOGTTO€ O €ўO3 f0" D ЄBEO0OKSS&GF-ELOSOLONЙE†At3†At!8LSOO3†AtA†At:HOPTOR)L&@Н‚€&KU†Cє&JU†CєЙE†AtU†AtLKOTЙJ†At3†At 8MSOU&I3†At€€2†AtKOVT:N)MSOW&I3†At€†Д2†AtKOXT)NO[&IЙJ†At3†At †AtKO^&IЙI†AtЙI†At3†At 3†At€еЙK†At,„!,†At,„!,†AtЙI†At3†At€џџ 3†At€еЙK†At,„!,†At,„!,†At3†At 2†AtKO`ЙI†AtA†At:HOaT)HOGTTO€ O €ўO3 f0" D ЄBEO0OdSS&]F-[LOSOfOiЙ[„!,†At3†At 3†At8`3†AtA†At:^Ok)`&_Й[„!2†AtKOm&_Й_†At3†At †AtKOo&й Н†At€Й_†AtU†AtL3†AtA†At:^OpT)^OGTTO€ O €ўO3 f0" D ЄBEO0OsSS&cF-aLOSOvЙa†At3†At 3†At8e3†AtA†At:dOy)e&aЙa†At3†At †AtKO{&й Н†At€Йa†AtU†AtL3†AtA†At:dO|T)dOGTTO€ O €ўO3 f0" D ЄBEO0O€„SS&lF-j-h-fLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&n&й Н†At€ЙfІA“ 3†At$ЙfІA“ ЙfІA“ CBU†AtL3†At2†AtKO€&rЙfІA“ Йn†At 2†AtKO€Ž&o&й Н†At€ЙhІA“ 3†At$ЙhІA“ ЙhІA“ CBU†AtL3†At2†AtKO€&sЙhІA“ Йo†At 2†AtKO€’&q3†At€џџџЙs†At3†At 2†AtKO€•&tЙr†At3†At Йq†At,„!,†AtЙr†At3†At€џџ Йq†At,„!,†At3†At 2†AtKO€˜&rЙs†At,ˆЙt†At,ˆ3†At ,†At3†At †AtKO€›&tЙt†AtЙr†At3†At Йq†At,„!,†AtЙr†At3†At€џџ Йq†At,„!,†At3†At 2†AtKO€ž&p3†AtЙn†AtЙo†AtЙjІA“ 2†AtKO€ŸЙp†At3†At!8‚SO€ 3†At€€Йp†At 3†At€џџџЙp†At $Йt†At3†At€€Йp†At $3†At€€Йp†At Йt†At3†At€џџџЙp†At "3†At€џџџЙp†At Йt†AtCBCBЙt†At3†At€џџџЙp†At $3†At€џџџЙp†At Йt†At3†At€€Йp†At "3†At€€Йp†At Йt†AtCBCBCBЙp†At A†At:mO€ЁT:ˆ)‚SO€ЂЙp†At3†At "8‰SO€ЃЙt†AtЙp†At A†At:mO€ЄT:Š)‰SO€І3†AtA†At:mO€ЇT)ŠO€ЈT)ˆO€ЉT)mOGTTO€ O €ўO3 f0" D ЄBEO0O€АSS&F--‹LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&‘&й Н†At€Й‹ІA“ 3†At$Й‹ІA“ Й‹ІA“ CBU†AtL3†At2†AtKO€Й&”Й‹ІA“ Й‘†At 2†AtKO€М&“3†At€џџџЙ”†At3†At 2†AtKO€П&–Й“†At3†At 2†AtKO€Т&•Й”†At3†At Й“†At,„!,†AtЙ”†At3†At€џџ Й“†At,„!,†At3†At 3†At 2†AtKO€Х&–Й–†AtЙ•†At3†At Й“†At,„!,†AtЙ•†At3†At€џџ Й“†At,„!,†At3†At Й•†AtЙ“†At3†At 3†At3†At 2†AtKO€Ш&’3†At=Й‘†AtЙІA“ 2†AtKO€ЩЙ’†At3†At!8ЂSO€Ъ3†At€€Й’†At 3†At€џџџЙ’†At $Й–†At3†At€€Й’†At $3†At€€Й’†At Й–†At3†At€џџџЙ’†At "3†At€џџџЙ’†At Й–†AtCBCBЙ–†At3†At€џџџЙ’†At $3†At€џџџЙ’†At Й–†At3†At€€Й’†At "3†At€€Й’†At Й–†AtCBCBCBЙ’†At A†At:O€ЫT:Ј)ЂSO€ЬЙ’†At3†At "8ЉSO€ЭЙ–†AtЙ’†At A†At:O€ЮT:Њ)ЉSO€а3†AtA†At:O€бT)ЊO€вT)ЈO€гT)OGTTO€ O €ўO3 f0" D ЄBEO0O€рSS&­F-ЋLOSO€сO€ф&Ћ3†At€џџ†AtKO€чЙЋ†At3†At€€!8АSO€шЙЋ†At3†At€@"8БSO€ъ&Ћ3†At€@ЙЋ†At2†AtKO€ыT:В)БSO€э&Ћ3†At€@†AtKO€юT)ВO€яЙЋ†At3†At€L"8ГSO€ё3†At€ЙЋ†AtЙЋ†At3†At 3†At€CьџџЙЋ†AtЙЋ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЎO€ђTO€ѓ)Г&ЋЙЋ†At3†At 3†At ЙЋ†At,„!,†AtЙЋ†At3†At 3†At€џџ ЙЋ†At,„!,†At3†At 2†AtKO€є&Џ3†At€љ*ЙЋ†At3†At 3†At€kьџџЙЋ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Џ3†At€ЬфћЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€і&Џ3†At€*чџ?ЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€їT:Ш)АSO€јЙЋ†At3†At€Р"8ЩSO€њ&Ћ3†At€РЙЋ†At2†AtKO€ћT:Ъ)ЩSO€§&Ћ3†At€Р†AtKO€ўT)ЪO€џЙЋ†At3†At€L"8ЫSO€3†At€џЙЋ†AtЙЋ†At3†At 3†At€НЙЋ†AtЙЋ†At3†At€џџ 3†At€Н3†At A†At:ЎO€TO€)Ы&ЋЙЋ†At3†At 3†At ЙЋ†At,„!,†AtЙЋ†At3†At 3†At€џџ ЙЋ†At,„!,†At3†At 2†AtKO€&Џ3†At€еяџЙЋ†At3†At 3†At€•ЙЋ†At3†At€џџ 3†At€•3†At 2†AtKO€&Џ3†At€4яЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€&Џ3†At€РЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€T)ШO€ЙЏ†At3†At 3†At3†At A†At:ЎO€ T)ЎOGTTO€ O €ўO3 f0" D ЄBEO0O€SS&тF-рLOSO€&­Н†At€Йр†At3†At€@U†AtLA†At:уO€T)уOGTTOПO€OОO OЖOOОO!OЕO OœOOœO5STM= :_MaxCount†u8_Str†€ Д Б_MaxCount†uЏ_Src†€ ж е д г в б а Я Ю Э Ь Ы Ъ Ш  Х in16„ Щ out32†t         н л к  з in32†t    b†ta†t   b„a„  b†t a†t  bˆaˆ  b†ta†t #  b„a„ ) &b†t$a†t / ,bˆ*aˆ 974 1inˆ 5in_upper†t  DCA >frac_Q7†€t<lz†€t:in†t BleadingZeros†t  NMLH Ex†t Iy†tJlz†!tKfrac_Q7†!t   `^ [a„ _a32†ted aa†t Љˆ‚m jQres†€hb32†€fa32†€ qb32_inv†tra32_nrm†tsb32_nrm†tna_headrm†ttresult†tplshift†tob_headrm†t    ЊЉЈЂ Qres†€‹b32†€ “b32_inv†t”b32_nrm†t•err_Q32†t–result†t’lshift†t‘b_headrm†t    ЫЪЩШГВБАЎ Ћx†t Џy_Q30†t        у рx†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ Љ с"т"@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl™ .cil$in .cil$exк'.cil$sy#.cil$db‹/110 1284597039 100666 16064 ` џџL/e‘L8ўГ ЅйЋMЌ›жЖ"&SТ > /e‘L|=.drectveQ, .cil$fg }@@.cil$gl' ‡@@.cil$inFЎ @@.cil$exо'є @@.cil$sy#в5@@.cil$db‡ѕ<@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_tables_sign.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_tables_sign.obj-FdRelease\vc100.pdb-errorreport:prompt†1j22€ov# V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШЗj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы Иj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fМc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЛc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩКc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьTc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkЁc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Оj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпРc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїхc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлфc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЙ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Ф j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_sign.cЮЁыѓc.цBЧВ+Л­Ч SKP_Silk_CLZ16†€ €У |€‡Шй SKP_Silk_CLZ32†€€ €,+ШЧ @SKP_Silk_CLZ_FRAC‚€€!€$9Шй ­SKP_Silk_SIN_APPROX_Q24†€€ !€‚€ZШ Нsize_tuцSKP_Silk_sign_CDF„€и€€Ћ ЃSA_AttrTarget€)АSA_Parameter€)†7strnlen†€ЎSA_Method€)†@ Оwchar_t!Ўwcsnlen†€ ц€а“€џџ€P€џџ€›€џџ€ш‰€џџ€›‡€џџ€ЏŠ€џџ€с†€џџ€ј…€џџ€р„€џџ€+К€џџ€‘Џ€џџ€І€џџ€+€џџ€Љ–€џџ€>€џџ€л“€џџ€{‘€џџ€ѓŽ€џџ€’Љ€џџ€YЌ€џџ€wЈ€џџ€ €џџ€Н—€џџ€ё€џџ€l•€џџ€Ѓ“€џџ€€џџ€ч€џџ€Nй€џџ€^Ъ€џџ€ЩЛ€џџ€ьЏ€џџ€ Н€џџ€QЋ€џџ€ЖІ€џџ€К €џџ[€@ OЕOO3 f0" D ЄBEOЖOЗOЖOOИOOЙOКOЛOМOЛO€ OКO8OOOКO?OЙOOTOOКOTOOЙOOИO#OЁOOКOЁOOИO\OЖO OЕOOОOOИOОOOПOOИOПO&OРOOКOРOO€ O €ўO3 f0" D ЄBEOРOtSS&<F-:-8LOSOuЙ8†C 3†At3†At&7Н†Bu€Й:†BuU†BuЙ8†C U†C LCBA†Bu:=OvT)=OGTTO€ O €ўO3 f0" D ЄBEOРO€!SS&ГF-Б-ЏLOSO€"ЙЏ†C† 3†Cƒ3†At&ЎН†Bu€ ЙБ†BuU†BuЙЏ†C† U†C† LCBA†Bu:ДO€#T)ДOGTTOПO'OфOOКOфOOхOOКOхOOфOOПO(OЙ OOИOЙ O+OПO)OФ OO€ O €ўO3 f0" D ЄBEOФ OLSS&Ч F-Х LOSOM&Щ 3†At2†AtKONЙХ „!,†At3†At8Ъ SOO3†AtA†At:Ш OPTOR)Ъ ЙХ „!,†At3†At€џ 8Ы SOSЙХ „!,†At3†At€№ 8Ь SOT&Х 3†At „!KOUT:Э )Ь SOV&Щ 3†At†AtKOW&Х 3†At„!KOXT)Э OYT:Ю )Ы SOZЙХ „!,†At3†At€№џ 8Я SO[&Щ 3†At†AtKO\&Х 3†At„!KO]T:а )Я SO^&Щ 3†At †AtKO_T)а O`T)Ю ObЙХ „!,†At3†At 8б SOcЙХ „!,†At3†At 8в OdЙЩ †At3†AtA†At:Ш Oe:г )в OfЙЩ †At3†AtA†At:Ш )г OgT:д )б SOhЙХ „!,†At3†At 8е OiЙЩ †At3†AtA†At:Ш Oj:ж )е OkЙЩ †At3†AtA†At:Ш )ж OlT)д OmT)Ш OGTTO€ O €ўO3 f0" D ЄBEOФ OpSS&й F-з LOSOrЙз †At3†Bu€џџ 8л SOs&Ч Н†At€ Йз †At3†At ,„!U„!LA†At:к OtT:н )л SOu&Ч Н†At€ Йз †At,„!U„!L3†AtA†At:к OvT)н OwT)к OGTTOПO+O€ O €ўO3 f0" D ЄBEOПO€зSS&F--LOSO€иЙ†AtЙ†At"Й†AtЙ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOПO€лSS& F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!: O€нT) OGTTO€ O €ўO3 f0" D ЄBEOПO€пSS&F-- LOSO€рЙ †AtЙ†At"Й †AtЙ†AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOПO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOПO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOПO€эSS&"F- -LOSO€юЙ„!,†AtЙ „!,†At$Й„!,†AtЙ „!,†AtCBA„!:#O€яT)#OGTTO€ O €ўO3 f0" D ЄBEOПO€ёSS&(F-&-$LOSO€ђЙ$†AtЙ&†At$Й$†AtЙ&†AtCBA†At:)O€ѓT))OGTTO€ O €ўO3 f0" D ЄBEOПO€ѕSS&.F-,-*LOSO€іЙ*ˆЙ,ˆ$Й*ˆЙ,ˆCBAˆ:/O€їT)/OGTTO0OO€ O €ўO3 f0" D ЄBEO0O*SS&3F-1LOSO+O-&5Й1ˆ3†At ,†At2†AtKO.Й5†At3†At87SO03†At &й Н†At€Й1ˆ,†AtU†AtLA†At:4O1T:9)7SO3&й Н†At€Й5†AtU†AtLA†At:4O4T)9O5T)4OGTTO€ O €ўO3 f0" D ЄBEO0O;SS&@F->-<-:LOSO&B&й Н†At€Й:†AtU†AtL2†AtKO?Й<†CєЙB†At2†AtKO@ЙB†At3†At"8CSOAЙ>†CєЙ:†At3†AtЙB†At 3†At 2†AtKOBT:D)CSOCЙ>†CєЙ:†AtЙB†At3†At 3†At 2†AtKODT)DOET)AOGTTO€ O €ўO3 f0" D ЄBEO0OKSS&GF-ELOSOLONЙE†At3†At!8LSOO3†AtA†At:HOPTOR)L&@Н‚€&KU†Cє&JU†CєЙE†AtU†AtLKOTЙJ†At3†At 8MSOU&I3†At€€2†AtKOVT:N)MSOW&I3†At€†Д2†AtKOXT)NO[&IЙJ†At3†At †AtKO^&IЙI†AtЙI†At3†At 3†At€еЙK†At,„!,†At,„!,†AtЙI†At3†At€џџ 3†At€еЙK†At,„!,†At,„!,†At3†At 2†AtKO`ЙI†AtA†At:HOaT)HOGTTO€ O €ўO3 f0" D ЄBEO0OdSS&]F-[LOSOfOiЙ[„!,†At3†At 3†At8`3†AtA†At:^Ok)`&_Й[„!2†AtKOm&_Й_†At3†At †AtKOo&й Н†At€Й_†AtU†AtL3†AtA†At:^OpT)^OGTTO€ O €ўO3 f0" D ЄBEO0OsSS&cF-aLOSOvЙa†At3†At 3†At8e3†AtA†At:dOy)e&aЙa†At3†At †AtKO{&й Н†At€Йa†AtU†AtL3†AtA†At:dO|T)dOGTTO€ O €ўO3 f0" D ЄBEO0O€„SS&lF-j-h-fLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&n&й Н†At€ЙfІA“ 3†At$ЙfІA“ ЙfІA“ CBU†AtL3†At2†AtKO€&rЙfІA“ Йn†At 2†AtKO€Ž&o&й Н†At€ЙhІA“ 3†At$ЙhІA“ ЙhІA“ CBU†AtL3†At2†AtKO€&sЙhІA“ Йo†At 2†AtKO€’&q3†At€џџџЙs†At3†At 2†AtKO€•&tЙr†At3†At Йq†At,„!,†AtЙr†At3†At€џџ Йq†At,„!,†At3†At 2†AtKO€˜&rЙs†At,ˆЙt†At,ˆ3†At ,†At3†At †AtKO€›&tЙt†AtЙr†At3†At Йq†At,„!,†AtЙr†At3†At€џџ Йq†At,„!,†At3†At 2†AtKO€ž&p3†AtЙn†AtЙo†AtЙjІA“ 2†AtKO€ŸЙp†At3†At!8‚SO€ 3†At€€Йp†At 3†At€џџџЙp†At $Йt†At3†At€€Йp†At $3†At€€Йp†At Йt†At3†At€џџџЙp†At "3†At€џџџЙp†At Йt†AtCBCBЙt†At3†At€џџџЙp†At $3†At€џџџЙp†At Йt†At3†At€€Йp†At "3†At€€Йp†At Йt†AtCBCBCBЙp†At A†At:mO€ЁT:ˆ)‚SO€ЂЙp†At3†At "8‰SO€ЃЙt†AtЙp†At A†At:mO€ЄT:Š)‰SO€І3†AtA†At:mO€ЇT)ŠO€ЈT)ˆO€ЉT)mOGTTO€ O €ўO3 f0" D ЄBEO0O€АSS&F--‹LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&‘&й Н†At€Й‹ІA“ 3†At$Й‹ІA“ Й‹ІA“ CBU†AtL3†At2†AtKO€Й&”Й‹ІA“ Й‘†At 2†AtKO€М&“3†At€џџџЙ”†At3†At 2†AtKO€П&–Й“†At3†At 2†AtKO€Т&•Й”†At3†At Й“†At,„!,†AtЙ”†At3†At€џџ Й“†At,„!,†At3†At 3†At 2†AtKO€Х&–Й–†AtЙ•†At3†At Й“†At,„!,†AtЙ•†At3†At€џџ Й“†At,„!,†At3†At Й•†AtЙ“†At3†At 3†At3†At 2†AtKO€Ш&’3†At=Й‘†AtЙІA“ 2†AtKO€ЩЙ’†At3†At!8ЂSO€Ъ3†At€€Й’†At 3†At€џџџЙ’†At $Й–†At3†At€€Й’†At $3†At€€Й’†At Й–†At3†At€џџџЙ’†At "3†At€џџџЙ’†At Й–†AtCBCBЙ–†At3†At€џџџЙ’†At $3†At€џџџЙ’†At Й–†At3†At€€Й’†At "3†At€€Й’†At Й–†AtCBCBCBЙ’†At A†At:O€ЫT:Ј)ЂSO€ЬЙ’†At3†At "8ЉSO€ЭЙ–†AtЙ’†At A†At:O€ЮT:Њ)ЉSO€а3†AtA†At:O€бT)ЊO€вT)ЈO€гT)OGTTO€ O €ўO3 f0" D ЄBEO0O€рSS&­F-ЋLOSO€сO€ф&Ћ3†At€џџ†AtKO€чЙЋ†At3†At€€!8АSO€шЙЋ†At3†At€@"8БSO€ъ&Ћ3†At€@ЙЋ†At2†AtKO€ыT:В)БSO€э&Ћ3†At€@†AtKO€юT)ВO€яЙЋ†At3†At€L"8ГSO€ё3†At€ЙЋ†AtЙЋ†At3†At 3†At€CьџџЙЋ†AtЙЋ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЎO€ђTO€ѓ)Г&ЋЙЋ†At3†At 3†At ЙЋ†At,„!,†AtЙЋ†At3†At 3†At€џџ ЙЋ†At,„!,†At3†At 2†AtKO€є&Џ3†At€љ*ЙЋ†At3†At 3†At€kьџџЙЋ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Џ3†At€ЬфћЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€і&Џ3†At€*чџ?ЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€їT:Ш)АSO€јЙЋ†At3†At€Р"8ЩSO€њ&Ћ3†At€РЙЋ†At2†AtKO€ћT:Ъ)ЩSO€§&Ћ3†At€Р†AtKO€ўT)ЪO€џЙЋ†At3†At€L"8ЫSO€3†At€џЙЋ†AtЙЋ†At3†At 3†At€НЙЋ†AtЙЋ†At3†At€џџ 3†At€Н3†At A†At:ЎO€TO€)Ы&ЋЙЋ†At3†At 3†At ЙЋ†At,„!,†AtЙЋ†At3†At 3†At€џџ ЙЋ†At,„!,†At3†At 2†AtKO€&Џ3†At€еяџЙЋ†At3†At 3†At€•ЙЋ†At3†At€џџ 3†At€•3†At 2†AtKO€&Џ3†At€4яЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€&Џ3†At€РЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€T)ШO€ЙЏ†At3†At 3†At3†At A†At:ЎO€ T)ЎOGTTO€ O €ўO3 f0" D ЄBEO0O€SS&тF-рLOSO€&­Н†At€Йр†At3†At€@U†AtLA†At:уO€T)уOGTTOПO€OОO OЖOOОO!OЕO OœOOœO€ŽSTM= :_MaxCount†u8_Str†€ Д Б_MaxCount†uЏ_Src†€ ж е д г в б а Я Ю Э Ь Ы Ъ Ш  Х in16„ Щ out32†t         н л к  з in32†t    b†ta†t   b„a„  b†t a†t  bˆaˆ  b†ta†t #  b„a„ ) &b†t$a†t / ,bˆ*aˆ 974 1inˆ 5in_upper†t  DCA >frac_Q7†€t<lz†€t:in†t BleadingZeros†t  NMLH Ex†t Iy†tJlz†!tKfrac_Q7†!t   `^ [a„ _a32†ted aa†t Љˆ‚m jQres†€hb32†€fa32†€ qb32_inv†tra32_nrm†tsb32_nrm†tna_headrm†ttresult†tplshift†tob_headrm†t    ЊЉЈЂ Qres†€‹b32†€ “b32_inv†t”b32_nrm†t•err_Q32†t–result†t’lshift†t‘b_headrm†t    ЫЪЩШГВБАЎ Ћx†t Џy_Q30†t        у рx†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ Љ Ћ!@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$gl' .cil$inF.cil$exо'.cil$sy#.cil$db‡/143 1284597039 100666 21017 ` џџL/e‘L8ўГ ЅйЋMЌ›жЖ"&SТљQ /e‘LеP.drectveQ, .cil$fg"}@@.cil$glu Ÿ@@.cil$in%@@.cil$exо'9!@@.cil$sy#I@@.cil$db›:P@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_tables_pulses_per_block.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_tables_pulses_per_block.obj-FdRelease\vc100.pdb-errorreport:prompt†1j22€ovq V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШЗj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы Иj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fМc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЛc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩКc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьTc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkЁc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Оj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпРc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїхc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлфc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЙ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Ф j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_pulses_per_block.cB’р :уєѕЫБПљs˜SЧ SKP_Silk_CLZ16†€ €У |€‡Шй SKP_Silk_CLZ32†€€ €,+ШЧ @SKP_Silk_CLZ_FRAC‚€€!€$9Шй ­SKP_Silk_SIN_APPROX_Q24†€€ !€‚€ZШйSKP_Silk_pulses_per_block_CDF„€Є€€‡ Нsize_tuлSKP_Silk_pulses_per_block_BITS_Q6„€h€€сфSKP_Silk_shell_code_table_offsets„&€€О ЃSA_AttrTarget€)мSKP_Silk_rate_levels_CDF„(€€‰пSKP_Silk_max_pulses_table†€€dкSKP_Silk_pulses_per_block_CDF_offset†€€АSA_Parameter€)†уSKP_Silk_shell_code_table3„€ž€€ПоSKP_Silk_rate_levels_BITS_Q6„$€€у7strnlen†€ЎSA_Method€)†@рSKP_Silk_shell_code_table0„B€€Р Оwchar_t!Ўwcsnlen†€сSKP_Silk_shell_code_table1„h€€СтSKP_Silk_shell_code_table2„€Ь€€ТнSKP_Silk_rate_levels_CDF_offset†€€ п й€ И€=№€Nќ€eў€§ў€Hџ€џ€Њџ€Тџ€аџ€нџ€фџ€ъџ€ьџ€№џ€ёџ€ѓџ€єџ€іџ€џџ€g€К€Гх€mі€7ќ€Yў€5џ€џ€Тџ€кџ€чџ€эџ€№џ€ѓџ€ѕџ€іџ€јџ€љџ€њџ€џџ€%€nm€5Г€zп€`є€cќ€ьў€Їџ€мџ€чџ€яџ€ёџ€ѕџ€іџ€љџ€њџ€ћџ€ќџ€ўџ€џџ€ €Ў0€te€f›€ўХ€,с€U№€!ј€њћ€ё§€чў€_џ€Ёџ€Пџ€аџ€йџ€сџ€хџ€шџ€џџ€ш€€ €O$€M€ }€ШЋ€Я€ч€6є€ењ€ј§€Bџ€Оџ€чџ€ыџ€ѕџ€љџ€ћџ€ўџ€џџ€uB€Хv€lŸ€М€ка€Nп€Хщ€в№€™ѕ€Фј€пњ€?ќ€+§€П§€ў€Wў€wў€ў€Ÿў€џџ€В €ƒ €х=€„^€,~€Ќ™€TА€•Т€та€м€–ф€ы€ея€iѓ€љѕ€Вї€уј€Ђљ€8њ€џџX€б€ы €v€(:€d_€!‡€ˆЋ€Щ€‚о€Žь€(ѕ€%њ€Ьќ€-ў€юў€Nџ€vџ€Œџ€џџ€€€€.€ю€о4€ЗN€гj€х†€OЁ€ŠИ€fЫ€мй€Zф€ны€я№€Eє€…і€ј€џџ[€Љ€t9€Љn€уЃ€”Ы€ф€!ё€.ј€Ыћ€œ§€Dў€Œў€žў€Ўў€Гў€Лў€џџкл€Œ€€М€0€q€Ž€Ѕ€л€ €€L€[€Р€€€€Р€€Р€5Tg€Є€ќ€^€К€€_€—€л€€[€›€›€Р€€Р€€€k€Бux€Ђ€ч€@€Њ€€‘€#€@€Р€€€€›€€€€Р€€€Ж€’€€І€Я€€B€„€Т€€F€}€Ц€њ€5€@€€€›€о€Ф€/€и€Њ€™€ž€Ж€м€€Q€–€щ€C€Љ€€€+€€€Р€›€}€“€Њ€Ъ€ш€ €'€L€p€–€Л€у€€3€^€†€Р€у€ѕ€у€€ш€Ш€О€С€Ю€р€є€ €!€;€T€o€Š€Љ€Ю€№€€1€^€c€Ќ€?€ђ€Ъ€В€Ќ€Д€Ч€х€ €9€l€І€т€€[€Ћ€у€J€ѕ€Т€l€4€€ч€д€Ь€Ь€в€о€ё€ €'€F€j€‘€Е€е€Aм€е€­1€9O€`z€Š€јВ€™с€€і€џџ€i!€С[€ПŒ€зД€б€Чм€ч€Йњ€џџно€B€Ї€Ч€Є€я€В€€ч€0€М€‰€™€Ћ€Ь€€)€э€fр€ь€џџ€!%€Іл€џџ€§€Ь}€ё€џџ€э€O?€nО€Рї€џџ€­€ц$€}€Ш鈄љ€џџ€W€J€UU€EБ€ ч€Књ€џџс€Г€џџ€ю1€Ю€џџ€я€™€уэ€џџ€Ф €™C€uЛ€‰ї€џџ€3€Y(€Ѓ~€‰и€ћ€џџ€Э€–€йS€–Љ€Чц€oќ€џџ€щ€Э9€7|€Т€}я€џџ€џџ€`€ПT€v €§л€џџ€џџ€џџт€g€џџ€o8€рЦ€џџ€€K€сч€џџ€о €аH€йЖ€„ѕ€џџ€в€)€§~€щз€ћ€џџ€в€и€ S€РЊ€щ€%§€џџ€ќ€m€Ю6€~€1Ш€аё€Lў€џџ€S€k €'€ЩZ€]Ÿ€”и€!і€фў€џџ€€с€пB€ {€†З€cх€шљ€џџ€џџ€ь€4-€ўY€“€Ы€;я€џџ€џџ€џџ€т€МA€ьv€,Џ€р€џџ€џџ€џџ€џџ€m'€ГY€{—€šд€џџ€џџ€џџ€џџ€џџу€D~€џџ€р;€aС€џџ€2€X~€cт€џџ€h€њK€4Б€Бё€џџ€" €В-€Г~€›в€іј€џџ€т€Ђ€U€мЇ€эх€Nќ€џџ€€Š€/8€~€$Ч€ё€ў€џџ€ј€Ю €р%€рZ€љЁ€uл€ї€уў€џџ€C€а€й€A€Я|€zМ€ ш€Цњ€Pџ€џџ€а€ї€=€э/€З^€Х›€ђа€>№€Oќ€‚џ€џџ€n€4€(€9$€™H€}€hГ€Sн€˜є€ƒ§€Ыџ€џџ€€)€ €9€D7€a€‚•€Ц€Цц€иї€Cў€Щџ€џџ€т€к€Ж€Ј(€,J€ъw€rЊ€йг€œэ€wњ€џ€џџ€џџ€ю€Ы €Б€№9€п_€А€ЛЙ€3о€wѓ€ъќ€џџ€џџ€џџ€G€V€ъ)€TK€еr€ІЁ€oЬ€kщ€Zљ€џџ€џџ€џџ€џџ€б €z€—8€г^€№‰€ Д€!к€7ђ€џџ€џџ€џџ€џџ€џџ€€e%€LI€ћo€€ZШ€ъ€џџ€џџ€џџ€џџ€џџ€џџ€€#3€P[€нŒ€ѓР€Гч€џџ€џџ€џџ€џџ€џџ€џџ€џџф !*4?KXfu€…€–€Ј€Л[€@ OЕOO3 f0" D ЄBEOЖOЗOЖOOИOOЙOКOЛOМOЛO€ OКO8OOOКO?OЙOOTOOКOTOOЙOOИO#OЁOOКOЁOOИO\OЖO OЕOOОOOИOОOOПOOИOПO&OРOOКOРOO€ O €ўO3 f0" D ЄBEOРOtSS&<F-:-8LOSOuЙ8†C 3†At3†At&7Н†Bu€Й:†BuU†BuЙ8†C U†C LCBA†Bu:=OvT)=OGTTO€ O €ўO3 f0" D ЄBEOРO€!SS&ГF-Б-ЏLOSO€"ЙЏ†C† 3†Cƒ3†At&ЎН†Bu€ ЙБ†BuU†BuЙЏ†C† U†C† LCBA†Bu:ДO€#T)ДOGTTOПO'OфOOКOфOOхOOКOхOOфOOПO(OЙ OOИOЙ O+OПO)OФ OO€ O €ўO3 f0" D ЄBEOФ OLSS&Ч F-Х LOSOM&Щ 3†At2†AtKONЙХ „!,†At3†At8Ъ SOO3†AtA†At:Ш OPTOR)Ъ ЙХ „!,†At3†At€џ 8Ы SOSЙХ „!,†At3†At€№ 8Ь SOT&Х 3†At „!KOUT:Э )Ь SOV&Щ 3†At†AtKOW&Х 3†At„!KOXT)Э OYT:Ю )Ы SOZЙХ „!,†At3†At€№џ 8Я SO[&Щ 3†At†AtKO\&Х 3†At„!KO]T:а )Я SO^&Щ 3†At †AtKO_T)а O`T)Ю ObЙХ „!,†At3†At 8б SOcЙХ „!,†At3†At 8в OdЙЩ †At3†AtA†At:Ш Oe:г )в OfЙЩ †At3†AtA†At:Ш )г OgT:д )б SOhЙХ „!,†At3†At 8е OiЙЩ †At3†AtA†At:Ш Oj:ж )е OkЙЩ †At3†AtA†At:Ш )ж OlT)д OmT)Ш OGTTO€ O €ўO3 f0" D ЄBEOФ OpSS&й F-з LOSOrЙз †At3†Bu€џџ 8л SOs&Ч Н†At€ Йз †At3†At ,„!U„!LA†At:к OtT:н )л SOu&Ч Н†At€ Йз †At,„!U„!L3†AtA†At:к OvT)н OwT)к OGTTOПO+O€ O €ўO3 f0" D ЄBEOПO€зSS&F--LOSO€иЙ†AtЙ†At"Й†AtЙ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOПO€лSS& F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!: O€нT) OGTTO€ O €ўO3 f0" D ЄBEOПO€пSS&F-- LOSO€рЙ †AtЙ†At"Й †AtЙ†AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOПO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOПO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOПO€эSS&"F- -LOSO€юЙ„!,†AtЙ „!,†At$Й„!,†AtЙ „!,†AtCBA„!:#O€яT)#OGTTO€ O €ўO3 f0" D ЄBEOПO€ёSS&(F-&-$LOSO€ђЙ$†AtЙ&†At$Й$†AtЙ&†AtCBA†At:)O€ѓT))OGTTO€ O €ўO3 f0" D ЄBEOПO€ѕSS&.F-,-*LOSO€іЙ*ˆЙ,ˆ$Й*ˆЙ,ˆCBAˆ:/O€їT)/OGTTO0OO€ O €ўO3 f0" D ЄBEO0O*SS&3F-1LOSO+O-&5Й1ˆ3†At ,†At2†AtKO.Й5†At3†At87SO03†At &й Н†At€Й1ˆ,†AtU†AtLA†At:4O1T:9)7SO3&й Н†At€Й5†AtU†AtLA†At:4O4T)9O5T)4OGTTO€ O €ўO3 f0" D ЄBEO0O;SS&@F->-<-:LOSO&B&й Н†At€Й:†AtU†AtL2†AtKO?Й<†CєЙB†At2†AtKO@ЙB†At3†At"8CSOAЙ>†CєЙ:†At3†AtЙB†At 3†At 2†AtKOBT:D)CSOCЙ>†CєЙ:†AtЙB†At3†At 3†At 2†AtKODT)DOET)AOGTTO€ O €ўO3 f0" D ЄBEO0OKSS&GF-ELOSOLONЙE†At3†At!8LSOO3†AtA†At:HOPTOR)L&@Н‚€&KU†Cє&JU†CєЙE†AtU†AtLKOTЙJ†At3†At 8MSOU&I3†At€€2†AtKOVT:N)MSOW&I3†At€†Д2†AtKOXT)NO[&IЙJ†At3†At †AtKO^&IЙI†AtЙI†At3†At 3†At€еЙK†At,„!,†At,„!,†AtЙI†At3†At€џџ 3†At€еЙK†At,„!,†At,„!,†At3†At 2†AtKO`ЙI†AtA†At:HOaT)HOGTTO€ O €ўO3 f0" D ЄBEO0OdSS&]F-[LOSOfOiЙ[„!,†At3†At 3†At8`3†AtA†At:^Ok)`&_Й[„!2†AtKOm&_Й_†At3†At †AtKOo&й Н†At€Й_†AtU†AtL3†AtA†At:^OpT)^OGTTO€ O €ўO3 f0" D ЄBEO0OsSS&cF-aLOSOvЙa†At3†At 3†At8e3†AtA†At:dOy)e&aЙa†At3†At †AtKO{&й Н†At€Йa†AtU†AtL3†AtA†At:dO|T)dOGTTO€ O €ўO3 f0" D ЄBEO0O€„SS&lF-j-h-fLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&n&й Н†At€ЙfІA“ 3†At$ЙfІA“ ЙfІA“ CBU†AtL3†At2†AtKO€&rЙfІA“ Йn†At 2†AtKO€Ž&o&й Н†At€ЙhІA“ 3†At$ЙhІA“ ЙhІA“ CBU†AtL3†At2†AtKO€&sЙhІA“ Йo†At 2†AtKO€’&q3†At€џџџЙs†At3†At 2†AtKO€•&tЙr†At3†At Йq†At,„!,†AtЙr†At3†At€џџ Йq†At,„!,†At3†At 2†AtKO€˜&rЙs†At,ˆЙt†At,ˆ3†At ,†At3†At †AtKO€›&tЙt†AtЙr†At3†At Йq†At,„!,†AtЙr†At3†At€џџ Йq†At,„!,†At3†At 2†AtKO€ž&p3†AtЙn†AtЙo†AtЙjІA“ 2†AtKO€ŸЙp†At3†At!8‚SO€ 3†At€€Йp†At 3†At€џџџЙp†At $Йt†At3†At€€Йp†At $3†At€€Йp†At Йt†At3†At€џџџЙp†At "3†At€џџџЙp†At Йt†AtCBCBЙt†At3†At€џџџЙp†At $3†At€џџџЙp†At Йt†At3†At€€Йp†At "3†At€€Йp†At Йt†AtCBCBCBЙp†At A†At:mO€ЁT:ˆ)‚SO€ЂЙp†At3†At "8‰SO€ЃЙt†AtЙp†At A†At:mO€ЄT:Š)‰SO€І3†AtA†At:mO€ЇT)ŠO€ЈT)ˆO€ЉT)mOGTTO€ O €ўO3 f0" D ЄBEO0O€АSS&F--‹LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&‘&й Н†At€Й‹ІA“ 3†At$Й‹ІA“ Й‹ІA“ CBU†AtL3†At2†AtKO€Й&”Й‹ІA“ Й‘†At 2†AtKO€М&“3†At€џџџЙ”†At3†At 2†AtKO€П&–Й“†At3†At 2†AtKO€Т&•Й”†At3†At Й“†At,„!,†AtЙ”†At3†At€џџ Й“†At,„!,†At3†At 3†At 2†AtKO€Х&–Й–†AtЙ•†At3†At Й“†At,„!,†AtЙ•†At3†At€џџ Й“†At,„!,†At3†At Й•†AtЙ“†At3†At 3†At3†At 2†AtKO€Ш&’3†At=Й‘†AtЙІA“ 2†AtKO€ЩЙ’†At3†At!8ЂSO€Ъ3†At€€Й’†At 3†At€џџџЙ’†At $Й–†At3†At€€Й’†At $3†At€€Й’†At Й–†At3†At€џџџЙ’†At "3†At€џџџЙ’†At Й–†AtCBCBЙ–†At3†At€џџџЙ’†At $3†At€џџџЙ’†At Й–†At3†At€€Й’†At "3†At€€Й’†At Й–†AtCBCBCBЙ’†At A†At:O€ЫT:Ј)ЂSO€ЬЙ’†At3†At "8ЉSO€ЭЙ–†AtЙ’†At A†At:O€ЮT:Њ)ЉSO€а3†AtA†At:O€бT)ЊO€вT)ЈO€гT)OGTTO€ O €ўO3 f0" D ЄBEO0O€рSS&­F-ЋLOSO€сO€ф&Ћ3†At€џџ†AtKO€чЙЋ†At3†At€€!8АSO€шЙЋ†At3†At€@"8БSO€ъ&Ћ3†At€@ЙЋ†At2†AtKO€ыT:В)БSO€э&Ћ3†At€@†AtKO€юT)ВO€яЙЋ†At3†At€L"8ГSO€ё3†At€ЙЋ†AtЙЋ†At3†At 3†At€CьџџЙЋ†AtЙЋ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЎO€ђTO€ѓ)Г&ЋЙЋ†At3†At 3†At ЙЋ†At,„!,†AtЙЋ†At3†At 3†At€џџ ЙЋ†At,„!,†At3†At 2†AtKO€є&Џ3†At€љ*ЙЋ†At3†At 3†At€kьџџЙЋ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Џ3†At€ЬфћЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€і&Џ3†At€*чџ?ЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€їT:Ш)АSO€јЙЋ†At3†At€Р"8ЩSO€њ&Ћ3†At€РЙЋ†At2†AtKO€ћT:Ъ)ЩSO€§&Ћ3†At€Р†AtKO€ўT)ЪO€џЙЋ†At3†At€L"8ЫSO€3†At€џЙЋ†AtЙЋ†At3†At 3†At€НЙЋ†AtЙЋ†At3†At€џџ 3†At€Н3†At A†At:ЎO€TO€)Ы&ЋЙЋ†At3†At 3†At ЙЋ†At,„!,†AtЙЋ†At3†At 3†At€џџ ЙЋ†At,„!,†At3†At 2†AtKO€&Џ3†At€еяџЙЋ†At3†At 3†At€•ЙЋ†At3†At€џџ 3†At€•3†At 2†AtKO€&Џ3†At€4яЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€&Џ3†At€РЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€T)ШO€ЙЏ†At3†At 3†At3†At A†At:ЎO€ T)ЎOGTTO€ O €ўO3 f0" D ЄBEO0O€SS&тF-рLOSO€&­Н†At€Йр†At3†At€@U†AtLA†At:уO€T)уOGTTOПO€OОO OЖOOОO!OЕO OœOOœO€ьSTM= :_MaxCount†u8_Str†€ Д Б_MaxCount†uЏ_Src†€ ж е д г в б а Я Ю Э Ь Ы Ъ Ш  Х in16„ Щ out32†t         н л к  з in32†t    b†ta†t   b„a„  b†t a†t  bˆaˆ  b†ta†t #  b„a„ ) &b†t$a†t / ,bˆ*aˆ 974 1inˆ 5in_upper†t  DCA >frac_Q7†€t<lz†€t:in†t BleadingZeros†t  NMLH Ex†t Iy†tJlz†!tKfrac_Q7†!t   `^ [a„ _a32†ted aa†t Љˆ‚m jQres†€hb32†€fa32†€ qb32_inv†tra32_nrm†tsb32_nrm†tna_headrm†ttresult†tplshift†tob_headrm†t    ЊЉЈЂ Qres†€‹b32†€ “b32_inv†t”b32_nrm†t•err_Q32†t–result†t’lshift†t‘b_headrm†t    ЫЪЩШГВБАЎ Ћx†t Џy_Q30†t        у рx†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ Љ ф"‡#‰#с#у#О%П%Р%С%Т%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg".cil$glu .cil$in%.cil$exо'.cil$sy#.cil$db› /188 1284597039 100666 22509 ` џџL/e‘L8ўГ ЅйЋMЌ›жЖ"&SТЭW /e‘LЉV.drectveQ, .cil$fg}@@.cil$glз ‘@@.cil$inЋh@@.cil$exо''@@.cil$sy#ёN@@.cil$db•V@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_tables_pitch_lag.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_tables_pitch_lag.obj-FdRelease\vc100.pdb-errorreport:prompt†1j22€ovг V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШЗj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы Иj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fМc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЛc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩКc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьTc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkЁc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Оj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпРc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїхc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлфc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЙ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Ф j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_pitch_lag.cУјД0F1€Џ3i9†Ц5–Ч SKP_Silk_CLZ16†€ €У |€‡Шй SKP_Silk_CLZ32†€€ €,+ШЧ @SKP_Silk_CLZ_FRAC‚€€!€$9Шй ­SKP_Silk_SIN_APPROX_Q24†€€ !€‚€ZШвSKP_Silk_pitch_lag_SWB_CDF_offset†€€бSKP_Silk_pitch_lag_SWB_CDF„€€€` Нsize_tuиSKP_Silk_pitch_delta_CDF_offset†€€ ЃSA_AttrTarget€)ЮSKP_Silk_pitch_lag_MB_CDF_offset†€€ЭSKP_Silk_pitch_lag_MB_CDF„€„€€fАSA_Parameter€)†гSKP_Silk_pitch_contour_CDF„F€€gЬSKP_Silk_pitch_lag_NB_CDF_offset†€€7strnlen†€аSKP_Silk_pitch_lag_WB_CDF_offset†€€ЯSKP_Silk_pitch_lag_WB_CDF„€€€hЎSA_Method€)†@еSKP_Silk_pitch_contour_NB_CDF„€€iдSKP_Silk_pitch_contour_CDF_offset†€€ Оwchar_t!зSKP_Silk_pitch_delta_CDF„.€€jЫSKP_Silk_pitch_lag_NB_CDF„€€€mЎwcsnlen†€жSKP_Silk_pitch_contour_NB_CDF_offset†€€ Ы€Т€‹€`€I€K€o€М€9€№ €ч €(€К€Ѓ€щ€€™€#€б'€і,€n2€+8€!>€AD€yJ€ИP€ьV€]€їb€Вh€.n€es€Sx€ј|€V€s…€T‰€€…€х“€*—€[š€€› €ВЃ€ШІ€нЉ€ёЌ€А€Г€&Ж€.Й€/М€%П€Т€ыФ€ЖЧ€pЪ€Э€ЉЯ€'в€д€уж€ й€Hл€Zн€Vп€=с€у€Ъф€qц€ш€щ€цъ€8ь€vэ€Ÿю€Гя€Д№€ ё€{ђ€Cѓ€њѓ€Ёє€:ѕ€Цѕ€Eі€Кі€%ї€ˆї€уї€8ј€‡ј€вј€љ€\љ€љ€лљ€њ€Qњ€Šњ€Тњ€јњ€-ћ€bћ€–ћ€Щћ€ќћ€.ќ€`ќ€‘ќ€Тќ€ђќ€#§€S§€ƒ§€В§€т§€ў€@ў€oў€ў€Ыў€јў€%џ€Qџ€}џ€Љџ€дџ€џџЬ+е€m8€›H€d€=u€+ˆ€•ž€*Н€Мд€™ц€і€џџжЭ€„€ €’€€Ў€F€х€€E€ €р€Щ€Ш€р € €e €и €o€-€€#€`€Ь€f€0€)"€P%€Ѕ(€$,€Ы/€–3€7€‡;€Ё?€ЫC€ўG€3L€cP€ŠT€ X€ \€†`€Md€ђg€sk€Юn€r€u€§w€Уz€h}€я€Z‚€Ќ„€щ†€‰€.‹€=€C€B‘€<“€3•€)—€™€›€€ Ÿ€Ё€Ѓ€Ѕ€ Ї€ Љ€Ћ€­€Џ€Б€Г€Е€З€ѓИ€мК€ПМ€›О€pР€<Т€Ф€НХ€qЧ€Щ€ОЪ€XЬ€ъЭ€rЯ€ђа€jв€йг€@е€žж€єз€Bй€ˆк€Хл€ћм€)о€Oп€mр€ƒс€‘т€—у€”ф€Šх€vц€Zч€6ш€щ€бщ€’ъ€Iы€јы€žь€<э€вэ€`ю€чю€hя€тя€V№€Ф№€.ё€“ё€єё€Qђ€Ћђ€ѓ€Uѓ€Іѓ€єѓ€@є€Šє€вє€ѕ€\ѕ€Ÿѕ€сѕ€!і€`і€Ÿі€мі€ї€Tї€ї€Ъї€ј€=ј€uј€­ј€хј€љ€Sљ€‰љ€Пљ€єљ€)њ€^њ€“њ€Чњ€ќњ€0ћ€dћ€™ћ€Эћ€ќ€5ќ€iќ€ќ€бќ€§€8§€k§€§€Я§€ў€0ў€aў€ў€Пў€юў€џ€Jџ€wџ€Ѕџ€вџ€џџЮ@Яj€е€A€­€€‹€ў€t€э€l€№€{€ €Љ€N€џ€М€‡ €b €M €K €\ €‚€О€€€€€Њ€i€F€B€\€–€я!€h$€'€И)€,€~/€Š2€А5€ь8€<<€ž?€C€‰F€ J€‘M€Q€™T€X€ƒ[€х^€5b€qe€–h€Ѓk€–n€mq€(t€Цv€Hy€Ў{€ј}€(€€?‚€?„€)†€џ‡€Ф‰€x‹€€ЙŽ€J€в‘€S“€Я”€G–€М—€0™€Єš€œ€Œ€Ÿ€| €їЁ€tЃ€ѕЄ€wІ€§Ї€…Љ€Ћ€šЌ€'Ў€ЖЏ€EБ€дВ€cД€ђЕ€З€ Й€•К€М€ЁН€"П€ Р€Т€У€Х€nЦ€жЧ€9Щ€–Ъ€юЫ€@Э€Ю€дЯ€б€Rв€ˆг€Йд€фе€ з€*и€Eй€Zк€jл€tм€yн€yо€tп€iр€Yс€Dт€*у€ ф€цф€Мх€Žц€Zч€"ш€фш€Ђщ€Zъ€ ы€Мы€eь€ э€Јэ€Aю€ею€dя€эя€q№€я№€hё€мё€Jђ€Гђ€ѓ€vѓ€бѓ€'є€yє€Чє€ѕ€Wѕ€šѕ€кѕ€і€Qі€‰і€Оі€ёі€"ї€Rї€ї€Ќї€жї€ј€(ј€Oј€uј€šј€Ој€сј€љ€%љ€Gљ€gљ€‡љ€Їљ€Цљ€хљ€њ€!њ€?њ€\њ€yњ€–њ€Гњ€Яњ€ыњ€ћ€#ћ€?ћ€[ћ€vћ€‘ћ€Ќћ€Чћ€сћ€ќћ€ќ€0ќ€Iќ€bќ€{ќ€”ќ€­ќ€Цќ€оќ€іќ€§€'§€?§€W§€n§€†§€ž§€Ж§€Ю§€ц§€ў§€ў€-ў€Eў€\ў€sў€‹ў€Ђў€Йў€Яў€цў€ќў€џ€)џ€?џ€Tџ€jџ€€џ€•џ€Њџ€Пџ€еџ€ъџ€џџаVб€§€љ€ѕ€№€ъ€у€л€г€Щ€О €В €І €™ € €€u€j€a€Z€U€S€T€X€_€k€z€Ž€Ѕ€С€т€€. €[!€‹"€О#€ѕ$€/&€l'€Ћ(€э)€1+€w,€О-€/€R0€1€ъ2€84€‡5€и6€)8€|9€а:€&<€~=€з>€3@€‘A€ёB€TD€КE€$G€‘H€J€vK€яL€kN€ьO€qQ€ћR€ˆT€V€ЏW€HY€хZ€„\€'^€Ь_€sa€c€Цd€qf€h€Чi€pk€m€Рn€ep€r€Іs€Bu€лv€ox€џy€‹{€}€”~€€€‹€џ‚€n„€и…€=‡€ˆ€ј‰€O‹€ Œ€э€6€y€И‘€ѓ’€)”€Z•€‡–€Џ—€в˜€ё™€ ›€"œ€4€Až€JŸ€O €OЁ€LЂ€DЃ€9Є€*Ѕ€І€Ї€щЇ€ЭЈ€ЎЉ€ŒЊ€hЋ€AЌ€­€э­€РЎ€‘Џ€aА€/Б€§Б€ЩВ€”Г€_Д€)Е€ђЕ€МЖ€…З€NИ€Й€сЙ€ЋК€uЛ€@М€ Н€зН€ЄО€qП€?ЈшоС€ЏТ€У€SФ€&Х€њХ€ЮЦ€ЃЧ€xШ€MЩ€#Ъ€љЪ€ЯЫ€ЄЬ€yЭ€MЮ€!Я€єЯ€Ца€—б€gв€5г€д€Эд€—е€_ж€&з€ъз€­и€nй€-к€ък€Іл€_м€н€Ын€о€0п€пп€Œр€6с€пс€…т€(у€Ъу€iф€х€Ÿх€7ц€Ьц€^ч€эч€zш€щ€‹щ€ъ€ъ€ы€‰ы€ь€uь€чь€Uэ€Сэ€)ю€Žю€яю€Nя€Љя€№€W№€Љ№€љ№€Eё€ё€жё€ђ€]ђ€ђ€кђ€ѓ€Oѓ€‡ѓ€Мѓ€№ѓ€"є€Sє€‚є€Ає€нє€ѕ€2ѕ€[ѕ€„ѕ€Ћѕ€бѕ€їѕ€і€@і€cі€†і€Љі€Ъі€ьі€ ї€-ї€Lї€lї€‹ї€Њї€Шї€цї€ј€!ј€>ј€Zј€wј€“ј€Џј€Ъј€цј€љ€љ€6љ€Pљ€jљ€ƒљ€œљ€Ељ€Юљ€чљ€џљ€њ€.њ€Eњ€\њ€sњ€Šњ€ њ€Жњ€Ьњ€сњ€їњ€ ћ€!ћ€6ћ€Jћ€_ћ€sћ€‡ћ€›ћ€Џћ€Тћ€жћ€щћ€ќћ€ќ€!ќ€4ќ€Fќ€Xќ€iќ€{ќ€Œќ€ќ€Ўќ€Оќ€Яќ€пќ€юќ€ўќ€§€§€,§€;§€J§€Y§€h§€v§€…§€“§€Ђ§€А§€П§€Ю§€м§€ы§€њ§€ ў€ў€'ў€6ў€Fў€Uў€eў€uў€…ў€”ў€Єў€Дў€Фў€дў€фў€єў€џ€џ€"џ€2џ€Aџ€Pџ€_џ€nџ€}џ€‹џ€šџ€Љџ€Зџ€Хџ€дџ€тџ€ёџ€џџв€€г€t€K€#€,€T €ј €o€Ш€Х€Д$€ѕ,€Ѕ7€вD€)Q€ц^€Xm€\€Єœ€)­€ЦЙ€їХ€ŠЯ€й€Ір€Žц€}ы€Ёя€lѓ€Єі€љ€Aћ€йќ€Kў€џџдз€W€ф€с€a€­ €€€€€Š*€Е>€X^€ v€x‡€U”€е€Ѕ€МЊ€Џ€ЭВ€~Е€ЯЗ€џџи [€@ OЕOO3 f0" D ЄBEOЖOЗOЖOOИOOЙOКOЛOМOЛO€ OКO8OOOКO?OЙOOTOOКOTOOЙOOИO#OЁOOКOЁOOИO\OЖO OЕOOОOOИOОOOПOOИOПO&OРOOКOРOO€ O €ўO3 f0" D ЄBEOРOtSS&<F-:-8LOSOuЙ8†C 3†At3†At&7Н†Bu€Й:†BuU†BuЙ8†C U†C LCBA†Bu:=OvT)=OGTTO€ O €ўO3 f0" D ЄBEOРO€!SS&ГF-Б-ЏLOSO€"ЙЏ†C† 3†Cƒ3†At&ЎН†Bu€ ЙБ†BuU†BuЙЏ†C† U†C† LCBA†Bu:ДO€#T)ДOGTTOПO'OфOOКOфOOхOOКOхOOфOOПO(OЙ OOИOЙ O+OПO)OФ OO€ O €ўO3 f0" D ЄBEOФ OLSS&Ч F-Х LOSOM&Щ 3†At2†AtKONЙХ „!,†At3†At8Ъ SOO3†AtA†At:Ш OPTOR)Ъ ЙХ „!,†At3†At€џ 8Ы SOSЙХ „!,†At3†At€№ 8Ь SOT&Х 3†At „!KOUT:Э )Ь SOV&Щ 3†At†AtKOW&Х 3†At„!KOXT)Э OYT:Ю )Ы SOZЙХ „!,†At3†At€№џ 8Я SO[&Щ 3†At†AtKO\&Х 3†At„!KO]T:а )Я SO^&Щ 3†At †AtKO_T)а O`T)Ю ObЙХ „!,†At3†At 8б SOcЙХ „!,†At3†At 8в OdЙЩ †At3†AtA†At:Ш Oe:г )в OfЙЩ †At3†AtA†At:Ш )г OgT:д )б SOhЙХ „!,†At3†At 8е OiЙЩ †At3†AtA†At:Ш Oj:ж )е OkЙЩ †At3†AtA†At:Ш )ж OlT)д OmT)Ш OGTTO€ O €ўO3 f0" D ЄBEOФ OpSS&й F-з LOSOrЙз †At3†Bu€џџ 8л SOs&Ч Н†At€ Йз †At3†At ,„!U„!LA†At:к OtT:н )л SOu&Ч Н†At€ Йз †At,„!U„!L3†AtA†At:к OvT)н OwT)к OGTTOПO+O€ O €ўO3 f0" D ЄBEOПO€зSS&F--LOSO€иЙ†AtЙ†At"Й†AtЙ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOПO€лSS& F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!: O€нT) OGTTO€ O €ўO3 f0" D ЄBEOПO€пSS&F-- LOSO€рЙ †AtЙ†At"Й †AtЙ†AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOПO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOПO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOПO€эSS&"F- -LOSO€юЙ„!,†AtЙ „!,†At$Й„!,†AtЙ „!,†AtCBA„!:#O€яT)#OGTTO€ O €ўO3 f0" D ЄBEOПO€ёSS&(F-&-$LOSO€ђЙ$†AtЙ&†At$Й$†AtЙ&†AtCBA†At:)O€ѓT))OGTTO€ O €ўO3 f0" D ЄBEOПO€ѕSS&.F-,-*LOSO€іЙ*ˆЙ,ˆ$Й*ˆЙ,ˆCBAˆ:/O€їT)/OGTTO0OO€ O €ўO3 f0" D ЄBEO0O*SS&3F-1LOSO+O-&5Й1ˆ3†At ,†At2†AtKO.Й5†At3†At87SO03†At &й Н†At€Й1ˆ,†AtU†AtLA†At:4O1T:9)7SO3&й Н†At€Й5†AtU†AtLA†At:4O4T)9O5T)4OGTTO€ O €ўO3 f0" D ЄBEO0O;SS&@F->-<-:LOSO&B&й Н†At€Й:†AtU†AtL2†AtKO?Й<†CєЙB†At2†AtKO@ЙB†At3†At"8CSOAЙ>†CєЙ:†At3†AtЙB†At 3†At 2†AtKOBT:D)CSOCЙ>†CєЙ:†AtЙB†At3†At 3†At 2†AtKODT)DOET)AOGTTO€ O €ўO3 f0" D ЄBEO0OKSS&GF-ELOSOLONЙE†At3†At!8LSOO3†AtA†At:HOPTOR)L&@Н‚€&KU†Cє&JU†CєЙE†AtU†AtLKOTЙJ†At3†At 8MSOU&I3†At€€2†AtKOVT:N)MSOW&I3†At€†Д2†AtKOXT)NO[&IЙJ†At3†At †AtKO^&IЙI†AtЙI†At3†At 3†At€еЙK†At,„!,†At,„!,†AtЙI†At3†At€џџ 3†At€еЙK†At,„!,†At,„!,†At3†At 2†AtKO`ЙI†AtA†At:HOaT)HOGTTO€ O €ўO3 f0" D ЄBEO0OdSS&]F-[LOSOfOiЙ[„!,†At3†At 3†At8`3†AtA†At:^Ok)`&_Й[„!2†AtKOm&_Й_†At3†At †AtKOo&й Н†At€Й_†AtU†AtL3†AtA†At:^OpT)^OGTTO€ O €ўO3 f0" D ЄBEO0OsSS&cF-aLOSOvЙa†At3†At 3†At8e3†AtA†At:dOy)e&aЙa†At3†At †AtKO{&й Н†At€Йa†AtU†AtL3†AtA†At:dO|T)dOGTTO€ O €ўO3 f0" D ЄBEO0O€„SS&lF-j-h-fLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&n&й Н†At€ЙfІA“ 3†At$ЙfІA“ ЙfІA“ CBU†AtL3†At2†AtKO€&rЙfІA“ Йn†At 2†AtKO€Ž&o&й Н†At€ЙhІA“ 3†At$ЙhІA“ ЙhІA“ CBU†AtL3†At2†AtKO€&sЙhІA“ Йo†At 2†AtKO€’&q3†At€џџџЙs†At3†At 2†AtKO€•&tЙr†At3†At Йq†At,„!,†AtЙr†At3†At€џџ Йq†At,„!,†At3†At 2†AtKO€˜&rЙs†At,ˆЙt†At,ˆ3†At ,†At3†At †AtKO€›&tЙt†AtЙr†At3†At Йq†At,„!,†AtЙr†At3†At€џџ Йq†At,„!,†At3†At 2†AtKO€ž&p3†AtЙn†AtЙo†AtЙjІA“ 2†AtKO€ŸЙp†At3†At!8‚SO€ 3†At€€Йp†At 3†At€џџџЙp†At $Йt†At3†At€€Йp†At $3†At€€Йp†At Йt†At3†At€џџџЙp†At "3†At€џџџЙp†At Йt†AtCBCBЙt†At3†At€џџџЙp†At $3†At€џџџЙp†At Йt†At3†At€€Йp†At "3†At€€Йp†At Йt†AtCBCBCBЙp†At A†At:mO€ЁT:ˆ)‚SO€ЂЙp†At3†At "8‰SO€ЃЙt†AtЙp†At A†At:mO€ЄT:Š)‰SO€І3†AtA†At:mO€ЇT)ŠO€ЈT)ˆO€ЉT)mOGTTO€ O €ўO3 f0" D ЄBEO0O€АSS&F--‹LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&‘&й Н†At€Й‹ІA“ 3†At$Й‹ІA“ Й‹ІA“ CBU†AtL3†At2†AtKO€Й&”Й‹ІA“ Й‘†At 2†AtKO€М&“3†At€џџџЙ”†At3†At 2†AtKO€П&–Й“†At3†At 2†AtKO€Т&•Й”†At3†At Й“†At,„!,†AtЙ”†At3†At€џџ Й“†At,„!,†At3†At 3†At 2†AtKO€Х&–Й–†AtЙ•†At3†At Й“†At,„!,†AtЙ•†At3†At€џџ Й“†At,„!,†At3†At Й•†AtЙ“†At3†At 3†At3†At 2†AtKO€Ш&’3†At=Й‘†AtЙІA“ 2†AtKO€ЩЙ’†At3†At!8ЂSO€Ъ3†At€€Й’†At 3†At€џџџЙ’†At $Й–†At3†At€€Й’†At $3†At€€Й’†At Й–†At3†At€џџџЙ’†At "3†At€џџџЙ’†At Й–†AtCBCBЙ–†At3†At€џџџЙ’†At $3†At€џџџЙ’†At Й–†At3†At€€Й’†At "3†At€€Й’†At Й–†AtCBCBCBЙ’†At A†At:O€ЫT:Ј)ЂSO€ЬЙ’†At3†At "8ЉSO€ЭЙ–†AtЙ’†At A†At:O€ЮT:Њ)ЉSO€а3†AtA†At:O€бT)ЊO€вT)ЈO€гT)OGTTO€ O €ўO3 f0" D ЄBEO0O€рSS&­F-ЋLOSO€сO€ф&Ћ3†At€џџ†AtKO€чЙЋ†At3†At€€!8АSO€шЙЋ†At3†At€@"8БSO€ъ&Ћ3†At€@ЙЋ†At2†AtKO€ыT:В)БSO€э&Ћ3†At€@†AtKO€юT)ВO€яЙЋ†At3†At€L"8ГSO€ё3†At€ЙЋ†AtЙЋ†At3†At 3†At€CьџџЙЋ†AtЙЋ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЎO€ђTO€ѓ)Г&ЋЙЋ†At3†At 3†At ЙЋ†At,„!,†AtЙЋ†At3†At 3†At€џџ ЙЋ†At,„!,†At3†At 2†AtKO€є&Џ3†At€љ*ЙЋ†At3†At 3†At€kьџџЙЋ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Џ3†At€ЬфћЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€і&Џ3†At€*чџ?ЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€їT:Ш)АSO€јЙЋ†At3†At€Р"8ЩSO€њ&Ћ3†At€РЙЋ†At2†AtKO€ћT:Ъ)ЩSO€§&Ћ3†At€Р†AtKO€ўT)ЪO€џЙЋ†At3†At€L"8ЫSO€3†At€џЙЋ†AtЙЋ†At3†At 3†At€НЙЋ†AtЙЋ†At3†At€џџ 3†At€Н3†At A†At:ЎO€TO€)Ы&ЋЙЋ†At3†At 3†At ЙЋ†At,„!,†AtЙЋ†At3†At 3†At€џџ ЙЋ†At,„!,†At3†At 2†AtKO€&Џ3†At€еяџЙЋ†At3†At 3†At€•ЙЋ†At3†At€џџ 3†At€•3†At 2†AtKO€&Џ3†At€4яЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€&Џ3†At€РЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€T)ШO€ЙЏ†At3†At 3†At3†At A†At:ЎO€ T)ЎOGTTO€ O €ўO3 f0" D ЄBEO0O€SS&тF-рLOSO€&­Н†At€Йр†At3†At€@U†AtLA†At:уO€T)уOGTTOПO€OОO OЖOOОO!OЕO OœOOœO€ШSTM= :_MaxCount†u8_Str†€ Д Б_MaxCount†uЏ_Src†€ ж е д г в б а Я Ю Э Ь Ы Ъ Ш  Х in16„ Щ out32†t         н л к  з in32†t    b†ta†t   b„a„  b†t a†t  bˆaˆ  b†ta†t #  b„a„ ) &b†t$a†t / ,bˆ*aˆ 974 1inˆ 5in_upper†t  DCA >frac_Q7†€t<lz†€t:in†t BleadingZeros†t  NMLH Ex†t Iy†tJlz†!tKfrac_Q7†!t   `^ [a„ _a32†ted aa†t Љˆ‚m jQres†€hb32†€fa32†€ qb32_inv†tra32_nrm†tsb32_nrm†tna_headrm†ttresult†tplshift†tob_headrm†t    ЊЉЈЂ Qres†€‹b32†€ “b32_inv†t”b32_nrm†t•err_Q32†t–result†t’lshift†t‘b_headrm†t    ЫЪЩШГВБАЎ Ћx†t Џy_Q30†t        у рx†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ Љ р"ц"ч"ш"щ"ъ"э"@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glз .cil$inЋ.cil$exо'.cil$sy#.cil$db• /226 1284597039 100666 18342 ` џџL/e‘L8ўГ ЅйЋMЌ›жЖ"&SТ†G /e‘LbF.drectveQ, .cil$fg }@@.cil$gl€‰@@.cil$in› @@.cil$exњ'Є@@.cil$sy#ž>@@.cil$dbЁСE@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_tables_other.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_tables_other.obj-FdRelease\vc100.pdb-errorreport:prompt†1j22€ov|V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Нc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїтc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлсc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Мj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_other.cщL~[џЊЮ.bыи—г‡]Уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB Ф SKP_Silk_CLZ16†€ €˜ |€‡Шж SKP_Silk_CLZ32†€€р€,+ШФ =SKP_Silk_CLZ_FRAC‚€€і€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€р €‚€ZШTargetRate_table_SWB† €€єSKP_Silk_SamplingRates_offset†€€эSKP_Silk_LTPscale_CDF„€€^ўTargetRate_table_MB† €€хSKP_Silk_lsb_CDF„€€ЊSKP_Silk_Seed_offset†€€ Лsize_tuSKP_Silk_Seed_CDF„ €€aSNR_table_Q1† €€ѕSKP_Silk_NLSF_interpolation_factor_CDF„ €€cђSKP_Silk_SamplingRates_table†€€dSKP_Silk_Dec_A_HP_24„€€DSKP_Silk_SWB_detect_A_HP_Q13„ €€ŽSKP_Silk_FrameTermination_offset†€€SKP_Silk_Dec_B_HP_24„€€ ЃSA_AttrTarget€)SKP_Silk_Transition_LP_B_Q28†<€€7яSKP_Silk_LTPScales_table_Q14„€€№SKP_Silk_vadflag_CDF„€€ЊSKP_Silk_FrameTermination_v4_CDF„ €€cџTargetRate_table_WB† €€АSA_Parameter€)†юSKP_Silk_LTPscale_offset†€€§TargetRate_table_NB† €€SKP_Silk_SWB_detect_B_HP_Q13„€€ SKP_Silk_Dec_B_HP_8„€€4strnlen†€ЎSA_Method€)†@SKP_Silk_Transition_LP_A_Q28†(€€9 Мwchar_t! SKP_Silk_Dec_B_HP_12„€€ SKP_Silk_FrameTermination_CDF„ €€aѓSKP_Silk_SamplingRates_CDF„ €€aёSKP_Silk_vadflag_offset†€€Ћwcsnlen†€SKP_Silk_Quantization_Offsets_Q10„€€EіSKP_Silk_NLSF_interpolation_factor_offset†€€SNR_table_one_bit_per_sample_Q7†€€dSKP_Silk_Dec_A_HP_16„€€DSKP_Silk_Dec_B_HP_16„€€ SKP_Silk_Dec_A_HP_8„€€D SKP_Silk_Dec_A_HP_12„€€DSKP_Silk_FrameTermination_v4_offset†€€ §€@€(#€ј*€Ш2€€>€№U€ †ў€'€р.€А6€hB€R€`m€ †џ€ј*€А6€hB€R€e€ Œ€ †€Ш2€€>€8J€Јa€}€АГ€ †#'+/6;€Р€Р€h €” €?€Lќ€?€?€#џ€?€?h€?€9€д€S2€Љ€B-€ч€ЄР€^€@€€С€@€С€€@€€С€@ €Uшà €@€€С€@ €ѓС€ €@€€С€@х€@œ€џџэ€}€€Л€џџю№€№U€џџёђ ѓ€€>€}€€Л€џџєѕ€z€џ!€K€Юx€џџі € N€ШЏ€Рк€џџ€33€ff€™™€ЬЬ€џџ€@€€€Р€џџ dd€я€Э<€Э,€ € gђ€VЭф€ gђ€uR‚ €Yš€uR‚ €F1 €эb€F1 €кз€љЦ­€кз€"ЖR€књЄ €"ЖR€Fѓ.€+уK€f€€, €кaH€эœє€ь0 €уЅ€эЄ€ пk[€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕOOМOOЖOМO&OНOOИOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOМO'OсOOИOсOOтOOИOтOOсOOМO(OЖ OOЖOЖ O+OМO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOМO+O€ O €ўO3 f0" D ЄBEOМO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOМO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOМO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOМO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOМO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOМO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOМO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOМO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOМO€OЕO OсOOтOсOOЖOOсO OЕO!OœOOсOOœOOУOOсOУOOЕOOУO OœOOœO€˜STM: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ Љ Њ!ƒ"Ф"Х"о"с"у"ф"џ"Ž##З$Й$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$gl€.cil$in›.cil$exњ'.cil$sy#.cil$dbЁ/260 1284597039 100666 27079 ` џџL/e‘L8ўГ ЅйЋMЌ›жЖ"&SТЇi /e‘Lƒh.drectveQ, .cil$fg}@@.cil$glf •@@.cil$inф*ћ @@.cil$exо'п8@@.cil$sy#Н`@@.cil$dbЃрg@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_tables_NLSF_CB1_16.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_tables_NLSF_CB1_16.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2Ь2€ovb V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Нc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїтc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлсc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Мj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы Уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_nlsf_cb1_16.hхXч?Хn§эНЧw™яYrœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_nlsf_cb1_16.cY[ƒt…іА`Х§yu"$Ф SKP_Silk_CLZ16†€ €˜ |€‡Шж SKP_Silk_CLZ32†€€р€,+ШФ =SKP_Silk_CLZ_FRAC‚€€і€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€р €‚€ZШФSKP_Silk_NLSF_MSVQ_CB1_16_CDF„€ф€!€ь Лsize_tuШSKP_Silk_NLSF_MSVQ_CB1_16_ndelta_min_Q15†D€!€ф ЃSA_AttrTarget€)АSA_Parameter€)†4strnlen†€ЪSKP_Silk_NLSF_CB1_16_Stage_info†x€!€х Ч Щ ЧSKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5„€а€!€эЎSA_Method€)†@ Мwchar_t!ЫSKP_Silk_NLSF_CB1_16†€€€€–ФХЦШЪЋwcsnlen†€ЩSKP_Silk_NLSF_MSVQ_CB1_16_Q15„€ €!€юХSKP_Silk_NLSF_MSVQ_CB1_16_CDF_start_ptr†(€!€чФ ЦSKP_Silk_NLSF_MSVQ_CB1_16_CDF_middle_idx†(€!€т SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_NLSF_CBS€› Ф€›J€Mi€Џw€Т…€Њ’€џ€Љ€ЕГ€=Н€ЩТ€TШ€СЭ€зв€Ез€yм€Гп€Љт€х€`ч€xщ€Xы€9э€я€њ№€лђ€Лє€œі€}ј€]њ€>ќ€ў€џџ€ˆp€w—€бЖ€IЪ€Nк€ш€lє€џџ€№j€я–€ќЏ€ Щ€˜и€ц€‚є€џџ€{‚€‘š€.А€)У€г€gт€\ё€џџ€ћd€\Љ€дК€ьЫ€œк€ш€+є€џџ€х…€‘€xБ€‡Ф€6д€;у€ё€џџ€ƒ€Й›€іА€œУ€е€nф€Яђ€џџ€5k€К‰€йž€јГ€ЂШ€мм€žю€џџ€@V€;x€Щ€MЈ€бО€Uе€хъ€џџ€i4€єT€~u€W•€/Е€cЯ€{ш€џџХФФBФTФfФxФ€ŠФ€œФ€ЎФ€РФ€вЦЧ9b€…€†€Š€€‘€“€˜€Б€Б€В€Е€З€И€Ъ€Ю€з€к€о€у€у€у€у€у€у€у€у€у€у€у€у&Waw€€€‡€Œ€(Qkk€€†€†€mrx€€€‚€ƒ€„+=|}€„€ˆ€€Žnvx€€ƒ€…€…lsy|€‚€…€‰(bsstu{|2]lnpprsI__``iknШ€”<DuVy|€˜€™€Я€—€с€я~€З€Щ€€є €Я€T€D#€К*€†2€+:€%B€ІI€8Q€ьX€Б`€#h€вo€%w€№€Й €€€^ €;'€4/€7€і>€ѓF€N€”V€Ш^€Ьf€Љn€+v€€ €X€;€ф€Œ#€>+€ 3€?<€~E€лM€UV€т^€љf€So€вv€k€Ќ €~€€о€“&€Ђ.€ё5€§=€BE€ьM€ЫT€б\€Пc€"k€ѕp€€д€К€д€№ €ў(€B1€f9€A€WI€?Q€ўX€Ф`€:h€зo€4w€ €ф€€§€1'€i.€=6€Ж=€WE€xL€ъS€ьZ€Eb€‚i€Ёp€Ÿw€ц€ €•€}€В!€‚(€Ж1€)9€™?€МE€žM€рS€кY€5`€Vh€8m€М€ѓ €{€r€%"€Ќ(€љ/€Ф6€b>€;E€ИL€T€А[€=d€Rm€v€{€ю €х€и€М$€д+€ц2€І9€/A€ёG€zO€KV€ї]€df€Фn€Нv€i €D€w€:&€›,€‡2€ 8€%=€жC€џI€Q€ЭW€x_€зf€|n€"v€2 €~€Є€“#€L-€n6€e>€E€жJ€%P€чU€|[€Zb€8i€zp€?w€+€n €X€—€n€Ж$€[+€)3€Я9€C@€H€—Q€Т[€юd€Žm€v€Q€Ћ € €?!€љ*€Y3€с:€р@€ЮF€ЕK€АQ€OX€T`€,h€їo€fw€Р€X € €ц €5'€Ё,€­2€ 9€.A€ЈH€KP€W€‚_€Јf€.n€}u€q €а€Ќ€ё €)€е1€р:€C€uL€џS€![€Ю`€{f€)l€r€cx€є€) €€б€љ$€Œ.€и7€Ж@€№H€@P€W€]€Gc€Њi€Аp€Ww€‘€m€{€S€„(€Ђ/€Я7€)=€D€АI€!Q€ОV€х]€wc€їj€Кo€Б€щ €™€F€З € '€r-€р3€ц:€oA€ H€—N€ЧU€2]€pf€rr€Ў€W €4€џ€/&€{/€I9€и?€ЩF€NM€5T€?Y€Є_€Žd€їk€'p€d€ €G€­€m&€-€Œ6€“>€ЦE€”N€/W€х]€ne€Жm€кt€>z€t € €ъ€ €J'€-€3€u8€T>€ЫC€ѓI€ВO€ЇV€L]€ud€Kl€]€! €a€€„€щ €%€B*€с1€j=€:J€ЕS€‚\€De€чm€}v€<€o €€ќ€о!€y'€Ю,€"2€Ї6€Т:€A€яE€Q€Уb€zl€ v€ѕ€“€]€Е€т&€е/€‰7€>€oE€’N€*W€Ve€Сf€sg€Ќh€‘o€…€€€€є€9'€9-€Щ5€T=€D€ЇM€\€к_€|b€]d€p€+w€Ш€*€J€Ы€Ѕ$€€1€8€U=€A€ЈE€rQ€eY€e`€Yg€Ko€ќv€W €”€H€€+€#1€T3€B7€>€ H€pR€бY€a`€2j€юm€Ќs€Б€ю€M€v€о!€~'€Ъ1€!:€EA€чG€žN€[V€u^€Vf€Mn€Йu€L€!€€Ї €h%€-€X:€‘E€oG€)I€9J€wR€7`€фg€Dp€Гw€к€H€Ж€J%€’%€ч%€–'€I6€‰?€H€kP€MX€В`€ri€Хq€xx€0€M€€€€ђ%€Ў,€Ч5€З=€,K€дU€ФY€ŒZ€Ћ\€2d€Нq€my€В€€x€@€c&€u.€7€v=€ D€OL€˜W€П`€>r€шt€4w€уx€šџ€‡џ€сџ€њџ€ўџ€юџ€ќџ€ўџ€єџ€№џ€єџ€Фџ€‚џ€Ÿў€Т§€[§€o§€—§€ў€wў€Єў€ыў€џ€\џ€šџ€Кџ€сџ!€{€ƒ€'€]€l€€т€К€Ц€€[€B€+€ €Ш€€З€ €і<€_џ€§ў€џ€џ€цў€5џ€Eџ€eџ€Pџ€:џ€Nџ €Њ€‰€a€+€а€Жў€Х§€џќ€‡§€Сў€еџ_ijt€hџ€tџ€ƒџ€­€€€K€лџ€лў€Ÿ§€юќ€Aќ€вќ€{§€џ€Ѕџ$€ѕџ€›џ€щў€џ€иџZ€€Ѕ€z€P€ч€C€4€'€шў€”ў€Ќў€Еў€фў€ €љ€p€м€s€’€џ€5џ€Kџ€rџ'€цџ€•џ€Єџ€_џ€yџ€}џ€Јџ€`џ€dџ€Еџ€еџ€мџ€њџ€пџ!€Мў€aў€”џ|€€П€Ы€Х€m€˜€А€Оze€Ÿ€—€œ€р€€{€М€О€Ъ€W€_€6€ф€…,K?€Ќџ'€уџ#€Ђџ€џ€ћў€žўM€€шџ€oџ€Гў€gў€lў€Ћ§€ў€дў€Ž€P€œx€‚€Эџ€лџ€Гџ€Tџ€Kџ€aџ€lџ€Иџ€Тџ€ў€q€З§€Эћ€Cќ€_ў€=џ €Јџ€Sџ€Ѕџ6b_€фџ€Х€ё§€“§€z€Xџ€“€5€,€P€;€Œ€˜€xj€^џ€Vџ€Хўb€5€Œ€:€пџ€Шў€Ш§€Ф§€†ў€•џ€œ]€џ€Љџ€Иџ€лџ(0KMA.GB/€ˆ€X€ь€B€Њ€€ €#€Ђ€еџ€4џ€§ў€џ€Яў€Ђў€Шў€П€\€Y€G€}џ€Гџ€Bџ€6џ€иџ#€…€€m€Ж€/€јџ€Œ€‰€дў€§€§€єў€щџ€чџI€^џ€jџ€,џ€Иџ'Nh€Ѓџ€Ьў€xџu€Йџ€џ§€Ьќ€D§€>ў€_џ€щџN€Qj€jў€ђќ€џ€щ€>€‚џ€Гџ€уџ€nџ€…џ€Эџ€хџ€хџ€ƒў€§€’€€1џ€’ў€мџ€хџ€4џ€џ€џ€Cџ€Рџ3€Єџ€wџ€чў>€щ\€”€&€k€ €4€q€r€мџ€+ў€2ўf€Ј u€ыџa€‹Yh#RB:I]€Дџ€Рў€џ€Cџ€5џ€rџ€хџ€Зџ €їџ€чџ €ёџ€Юџ€:€Д€Ђ€Яџ€Ч€”џ€џ€Оџ€Aў€Нџ€јў€vў7€{џ€Pџ€Œџ€џ€m€€€Р€Рџ€xў€ў§€œ€Ы€šH€оџ€`џ€Зџ€пџ€Qў€A€Щ§€В§€”џXB3€сџ€?џ€вџA€уџ€щџ€з€сџe€џ €0X€@€Р€Iў€Ю§€ў€yџ€ѓџ€Uџ€јџ€Ж€џ€Kџ€kџ€x€м@€tў€t§€jџ€А€оA€В§€Я€€€ѕH€dџ€hџ€Pџ;^}€їџ€љџ €Уџ€Œџ€ЎџO€дџ€ёџ€аџ€Пџ€Тџ€›џ€šџ€Ъџ€Кџ€Вџ€Аџ€чџ€ŽG€‹&Z€Т€о€љ€Ѕ^€н€€Ѓ[€2џ€=€Ш€сў€mџ€юџ€Ћџ€Жџ€ƒџ€ЉџU€€ќџ€ъ0€jџ€‘џ€ў€э€/џ€Y^€„џMy€ €Аџ€аџ€П€€Ѓџ€Пџ€iџ€}§€ГjWAf^Dc€о]^€c€ѓџ€Їџ€џ€ ў€ml€С€§€уџ€“џ€Œџ€Зџ€ьџ€ƒ€mџH;€jџ€Ў§€€<€„€Чj€Ц€д€мR-€ѓџ€п€‰€&€ќ€‡€Oџ€1џ€˜ў€šџ€“€–€ђџS@3€љџ€џ€Ÿџ€Јџ€„џ€Пџ*  w€цџ€,џ€7џ€u€ћ€g$€ЬџB€њџ€Ёџ€<џb€Ћџ€”џ€к€\џ€d€Ќ%€ p€шџ€џ€Єџ€Nџ€ъў€„€Фџ€$џ€,€ѓџ€š€П€лџ€’џ€gџ€jџ€Žџ€љџ€Ђџ€сџ€Тџ€Oџ€Кџ#€Х€“€ џ€Иўe€Žџ€“l€‰џ€“џ€šџ€џ7€šџ€­€Їџ€€Š€Жў€`џ€х€š€Хџ€Vџ€ьџ€оџ€ћў€иџ€џM€ЌџES€ €Љ?€ќ§€P4€Ьџ€„џ€ž€Х€іџ€‰ў€•€r€uў€бџ€Ф>W€–џ€Пџ€Еџ€Лџ€ѓџ"c;Sb,F€ъџ€Т€а€€Бџ€ёџ €˜џ€фџ€—џ€Fџ€,џ€џ€Бџ€Дџ3€ЙџHv€оџ€§џ€Uџ€”џ€ƒџ>€Цџ:€‡џI€.ў\?€Ђџ€Вџ€Дџ€д$€џ€Йџ€žў€˜€€Бџ€ џ€Эџ€сџ€њџ€ђў€№€в€cџ€џJ€nџX€яў€œ\8G€>€Є €’џ€нџ€зџ€Ёџ€–џ €„€Мџ7{€­џ€kџ€д€„€>џ7€Ю€”џ€Ÿў€!€=џ€щ€ъџ€ФџD€І€Цџ€‚pk€[џs€Ѓџ€лџ&S€уA€џ€ѓџ€U2€ˆ  SR7€їџ€Ьџ€Вџ€Џџ€Эџ(€џ€ џ€зџ5€.џ€џ€яџ€Eџ€ЇџySM[€Жџ€нџ€џ€_џ€Sџf€„€ƒџ€Уџg€ќў4€І€рџ€dџ€Љџ€Шџ<€Кџ€„џ€ђr€џ€Zџ€Щ€ѕџ€Аџ€џ€ьџ€Эџ€Єў€T€оџ€… \€„џ€xџ€ˆџ€цџ€њџx€Xџ€ €нџs €Шџ'€œ€€юџ€R€Кџ€pџ€Јџ€ѓџ€Хџ€cџ€zџ€иџ:€ыџ€Т€ьўa€€Шџ€tџ}9€Hџ€4џ€Кџ€ўџ€€€6џ€Вџ€ц€щџ€Ё€šџ€Д€сџ€Њџ€Yџ€Чџ€Фџ€ѓџcloLE"€ыџ5&"NI€л3€Иџ€™џ€1џ€е€ђџ€Ђџ€иџ€pџCi;€џ€єE:€шџ€ћџ€ёџ€{џ€Йџ€Нџ€Е€гџy`3€Иџ€Ыџ8€gџ€хџU€З€гi€оџ€вџ+€Иџ€Ѓџ$€€џo€Ёџ€dџ€Mџ€џ€йџ€Йџ€пџ€Уџ€џ€ц€}џ€€ыџ€Ћџ€фџ€…џP€`џ?/€њџ€Яџ€ џ€эџ€Цџ€ѓџ€Vџ€нџ; €сџ€cўQ>€\џ€ѕ\€[џ*~€џ€С€Щџ'2Ъ ЩЧЩ€Ч@Щ€ЧPЩ€Ч`Щ€ЧpЩ€Ч€€Щ€ Ч€Щ€ Ч€ Щ€ Ч€АЩ€ Ч€РЫ ЪШФХЦ[€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕOOМOOЖOМO&OНOOИOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOМO'OсOOИOсOOтOOИOтOOсOOМO(OЖ OOЖOЖ O+OМO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOМO+O€ O €ўO3 f0" D ЄBEOМO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOМO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOМO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOМO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOМO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOМO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOМO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOМO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOМO€OЕO OсOOтOсOOЖOOсO OЕO!OœO"OУOOсOУOOœO#OœO€СSTM: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёо –!Ž!›!!tuєƒ ˆ ‹ Œ Ž  ‘ Љ о Ž!–!›!т%ф%х%ч%ь%э%ю%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glf .cil$inф*.cil$exо'.cil$sy#.cil$dbЃ /300 1284597039 100666 21373 ` џџL/e‘L8ўГ ЅйЋMЌ›жЖ"&SТ]S /e‘L9R.drectveQ, .cil$fg}@@.cil$glf •@@.cil$inšћ @@.cil$exо'•"@@.cil$sy#sJ@@.cil$dbЃ–Q@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_tables_NLSF_CB1_10.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_tables_NLSF_CB1_10.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2Ь2€ovb V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Нc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїтc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлсc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Мj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_nlsf_cb1_10.cѕХПEќ{ z,лVИфœЄУj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_nlsf_cb1_10.hDџш]Гбp#”)БЂ]goФ SKP_Silk_CLZ16†€ €˜ |€‡Шж SKP_Silk_CLZ32†€€р€,+ШФ =SKP_Silk_CLZ_FRAC‚€€і€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€р €‚€ZШЩSKP_Silk_NLSF_MSVQ_CB1_10_Q15„€ €!€щХSKP_Silk_NLSF_MSVQ_CB1_10_CDF_start_ptr†€!€пФ Лsize_tuЪSKP_Silk_NLSF_CB1_10_Stage_info†H€!€с ЧЩ SKP_Silk_NLSF_CBS€›ЦSKP_Silk_NLSF_MSVQ_CB1_10_CDF_middle_idx†€!€УЧSKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5„€€!€ъ ЃSA_AttrTarget€)ЫSKP_Silk_NLSF_CB1_10†€€€€–ФХЦШЪАSA_Parameter€)†ШSKP_Silk_NLSF_MSVQ_CB1_10_ndelta_min_Q15†,€!€м4strnlen†€ЎSA_Method€)†@ Мwchar_t!Ћwcsnlen†€ФSKP_Silk_NLSF_MSVQ_CB1_10_CDF„€œ€!€ы SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› Ф€ШB€B^€Eq€›€X€€§Ѕ€мЌ€•Г€ПЙ€ЧП€nХ€КЪ€ЬЯ€пд€…й€о€•с€х€+ш€/ы€Eэ€$я€ё€уђ€Ує€Ђі€ј€aњ€@ќ€ ў€џџ€šO€€Ы€Ж€ћЩ€ н€хю€џџ€Я:€€c€wŠ€І€IП€ѕе€4ы€џџ€%/€ЈW€,€€бœ€З€[б€юш€џџ€W*€ђM€5m€yŒ€НЋ€ Щ€Ех€џџ€х"€ E€/g€с‡€сЇ€„Ц€€ф€џџХФФBФTФfФxФ€ŠЦЧ>gx€‡€‡€›€Ї€Ј€Ќ€­€А€Г€Е€Е€Й€К€Ц€Ч€Ы€Э€о€у€у€у€у€у€у€у€у€у€у6Lelwx{}DUWgkpstNUUeiinoS[aaadei\]]_`bcgШ€Ю@Jb2aDx5€Щ€U€&€ €љ)€Œ6€„B€O€ŽZ€gg€gr€L€Ю €Ў€ї&€Ќ3€ˆ?€ŒL€ЂX€Еe€%q€y€і€<€ў"€И.€ž9€шG€›T€Кa€‹m€`€ˆ€#€р/€a;€ G€эT€Œ_€\k€ku€ €C€w€–*€{3€•=€IJ€ŸW€#e€p€“€w€Ъ!€о-€ђ:€џC€ЇO€}[€tf€?r€;€Г€г"€Т/€З9€E€ИP€\€Эh€Љr€€6 € €€).€H;€сH€іU€Љc€p€?€)€s€\)€ы6€)C€‘R€Ф^€Йk€Tu€| €Њ€…€ $€э5€Э=€єK€uW€Яb€~r€а€€Й €™0€Г;€L€ёV€Яc€o€`v€0 €[€ё€\.€з8€A€ЈL€{U€žg€Бp€{€P€>)€е3€#=€џE€•R€]€оi€Os€F€E€б(€й3€ќ>€бM€*Y€Эe€[p€ww€œ€“€ %€!.€6€N>€…J€DV€Œd€ђo€ь €Щ€ƒ!€ 5€њ@€J€+T€O]€™h€кq€1 €ж€№'€Ж8€ёE€@R€U\€Иd€n€u€Q€6€п€|'€b/€n<€пN€[€žh€Џr€М €й€€a&€€>€яH€Q€o\€+e€.q€У €w€В€ )€Б0€ 8€ЉB€TN€Бb€™m€5€€20€ф:€RF€оN€ЋV€“`€Ыi€Хq€Ÿ €т€0€К €Ч%€Љ3€.L€W€Ъe€Вp€€€€@€ %€ј)€0€U9€—L€ a€нn€C€G$€Н0€S4€5€8€А>€›M€|^€Bq€-€Л€T3€8E€`N€tR€МT€ТX€И\€9k€Ћ€"€В3€N?€СD€qG€\H€щL€ТZ€ъl€\ €k€о+€ ;€#>€A€bE€3[€i€њt€ €‚€с(€l5€‹F€?\€Вi€šq€{s€бt€о €є€2$€F2€sI€šL€*N€BQ€J]€zr€ђ €€V#€Ю3€§=€MZ€s\€—^€Ї_€;e€ €3€w'€В;€3P€ШZ€Рa€Ѕe€ph€wj€с €;€1&€`2€Л?€вK€^€Љr€3|€K}€8џ€zџ€џ€4џ€Ѕў€Hў€ ў€-џ€^ў€Tџ€Чў;€я€€б€f€N€М€с€ђ€Ё€€4€Зџ€Dџ€uў€Uџ€ €ќ€<€y€Л€Ф€п€­Z€цџ€…€—џ€˜ў€ыў€[€z)€г§€§€bќ€Ї§€ќ€[ћ€“ў€сk€v€Юџ€Б€Ё€œ'€Ћ§€‹њ€Цљ€А§€ў€мў€§W€њџ€чџ€Їў€џx€э€В€І€ыў€ё€Ї€Њ€­€€Ъ€Z€ў€†\€hџ€Мў€vў1€iџ€аў€,§€o§€^џ€ў€нџ€ўџ€Шў€8џ€Єџ€џ€ђ€t€5€„џ€ €e€Ќџ€пџ€@џ€№ў€§€/ќ€Ѓ€и5€™џ€‘€B€Ёџ€сџ€œџ€бў€а§€ећ€cў€Ъ€€!џ€‘ў€ €h€кџ€џ€z€Б§€2§€Р€ў€юў€Д€Јџ€Л§€cџ€H§€ћ€Š€!ў€щџ|€еџ€џ€џ€dў€m§€8џ€Лџ€Њў€Ч7:€мџ€Эџ€Тџ€ћ€ћ€Ћ€К$€Y€sџD€€D€єџ€ќџG€?џ€0ў€Wў€ў€˜€Ы€Џў€ь€š€Хџ€чџ€Ћў€?ў€їџZ€L€ђџ€wќ`€ф§€џ€Ї€Хџ€Р€шџ<€'џ€лџ€Г€ьџ€7€€H€Кў€њћ€њў€е€|R€H€›€ф§€>€хў€—€Е€nў€ъў€џ€’џ€џ€јў€Їџ€џ€§ў€хџj€џ€žџ€zўv=h€&€\€ѓџ<€џ€O€€3€цџ€’џ€Ѕџ€џ€4ў€Њ€Щ`€Œў€„€Г€вў€и€щў€зџJ€О€p€€Fџ€ §€cџ€Ÿ €€ѕ€3€Eџ€№џ7€]џ€$€Эўj€ћџ€J€`ў€л€Ж€џh€‰€ћџ€дў€,ў€ €Ѕў€Њ€8џ€%џ€4€†џ€{џ€л€№џ€g€œ€Їџ€‘џ0€B€Ž€Б€тў€џ€йџ€Сџ€жџ€=ў€ €4€Чџ€С€аџJ€Іў;€хџ€+ў€ыў€Јў€€z€Ћ€џ€€М€§џC€2џ€фў€#€‹џ€Јџ€#ў€w2jc€Jџ€Ж€ˆў€oў€Яџw€щџ€іџ€аџ€Œџ€8џ€ЪўyI€э€џ€‹€8ў€#€”џ€C€Еџ€L€Ц€џ€ыџЪ ЩЧЩ€€Ч@Щ€ ЧPЩ€РЧ`Щ€`ЧpЩ€Ч€€ЫЪШФХЦ[€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕOOМOOЖOМO&OНOOИOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOМO'OсOOИOсOOтOOИOтOOсOOМO(OЖ OOЖOЖ O+OМO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOМO+O€ O €ўO3 f0" D ЄBEOМO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOМO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOМO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOМO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOМO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOМO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOМO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOМO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOМO€OЕO OсOOтOсOOЖOOсO OЕO!OœO"OУOOсOУOOœO#OœO€BSTM: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёо –!Ž!›!!tuєƒ ˆ ‹ Œ Ž  ‘ Љ о Ž!–!›!У%м%п%с%щ%ъ%ы%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glf .cil$inš.cil$exо'.cil$sy#.cil$dbЃ /340 1284597039 100666 39073 ` џџL/e‘L8ўГ ЅйЋMЌ›жЖ"&SТ˜ /e‘L]—.drectveQ, .cil$fg}@@.cil$glf •@@.cil$inОYћ @@.cil$exо'Йg@@.cil$sy#—@@.cil$dbЃК–@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_tables_NLSF_CB0_16.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_tables_NLSF_CB0_16.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2Ь2€ovb V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Нc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїтc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлсc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Мj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы Уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_nlsf_cb0_16.hаoWЏeЧPўи0ЯЅ@8Iœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_nlsf_cb0_16.cCŽ*ŽЖ^ е[цw„gФtФ SKP_Silk_CLZ16†€ €˜ |€‡Шж SKP_Silk_CLZ32†€€р€,+ШФ =SKP_Silk_CLZ_FRAC‚€€і€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€р €‚€ZШЦSKP_Silk_NLSF_MSVQ_CB0_16_CDF_middle_idx†(€!€тЧSKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5„€А€!€у Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†ШSKP_Silk_NLSF_MSVQ_CB0_16_ndelta_min_Q15†D€!€фЫSKP_Silk_NLSF_CB0_16†€€€€–ФХЦШЪЪSKP_Silk_NLSF_CB0_16_Stage_info†x€!€х Ч Щ 4strnlen†€ЩSKP_Silk_NLSF_MSVQ_CB0_16_Q15„€€!€цЎSA_Method€)†@ Мwchar_t!Ћwcsnlen†€ХSKP_Silk_NLSF_MSVQ_CB0_16_CDF_start_ptr†(€!€чФ ФSKP_Silk_NLSF_MSVQ_CB0_16_CDF„€Ф€!€ш SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_NLSF_CBS€› Ф€Љ€Н €Ж€“€"€А€Ч!€п%€і)€Ё-€91€„4€Ћ7€ :€”=€‰@€mC€RF€I€лK€ N€eQ€T€бV€‡Y€.\€е^€|a€d€f€ёh€Sk€Їm€ћo€Or€Ѓt€ыv€2y€m{€Ј}€з€љ€„€†€'ˆ€3Š€>Œ€?Ž€?€?’€5”€*–€˜€џ™€ъ›€д€ДŸ€”Ё€tЃ€TЅ€5Ї€Љ€ъЊ€РЌ€–Ў€lА€7В€Д€ЯЕ€‘З€SЙ€Л€ЭМ€…О€=Р€ѕС€ЄУ€SХ€Ч€БШ€VЪ€ѓЫ€†Э€Я€Ўа€9в€Фг€Oе€кж€\и€пй€bл€фм€Nо€Йп€#с€т€№у€Jх€žц€ъч€6щ€nъ€Ѕы€жь€ю€7я€a№€~ё€„ђ€Šѓ€Šє€uѕ€`і€Fї€ј€єј€Уљ€‘њ€Vћ€ќ€Нќ€c§€џ§€ў€џў€џ€џџ€ы€ў&€Ј9€RL€•^€Гo€а€€‚€4 €Џ€—О€MЭ€Щк€ќч€цє€џџ€у&€ёL€™p€ъ€ŽЎ€цЫ€;ц€џџ€ѕ"€ЗC€xd€†„€хЃ€CУ€ѕс€џџ€ќ%€вH€vi€Š€ Њ€NЩ€хч€џџ€."€[D€‰f€†€чЅ€>Х€Bу€џџ€"€yC€иd€€…€(І€Ф€ т€џџ€A"€‚D€Уf€н†€іІ€`Ц€Яу€џџ€ "€ЭB€zc€uƒ€oЃ€iУ€т€џџ€€"€v2€ЬB€#S€yc€vs€sƒ€p“€lЃ€iГ€fУ€ г€[т€Vё€џџХФФ€Ф€$Ф€6Ф€HФ€ZФ€lФ€~Ф€Ф€ЂЦ* Ч€А€Е€Ж€З€К€К€П€П€П€Ф€Х€Щ€Ы€Ю€Ю€Ю€Я€Я€б€б€б€б€в€в€в€г€г€г€д€ж€и€и€й€й€й€й€к€к€л€л€м€н€о€п€п€п€п€р€р€р€с€с€т€т€т€т€у€у€у€у€у€у€ф€ф€ф€ф€х€х€х€ц€ц€ц€ч€ч€ч€ч€ш€ш€ш€ш€щ€ъ€ы€ы€ы€ь€ь€ь€ь€э€э€э€э€№€№€№€№€ё€ђ€ѓ€є€є€ї€ї€ј€ј€ј€љ€ћ€џ€џ€€€€€€€ € € €€€€€ € € € vxyyz}}€€€‚€ƒ€„€ˆ€‰€Š€‘WX[abdij\__`aabcX\__`abm]]]`aace]^^__ccc]]]``adf]__```bc}}€€€€€€€€€€€€€€‚€ƒ€„Ш€ (NYk€€М€’€€№€ы€з€xЩ€’€ц€J€ў€ђ€™#€",€ј3€ <€D€ƒL€яS€і\€Жe€žn€љu€\€ €€”€Š€H%€.€Х6€Ћ=€D€ L€ S€fY€ѕ_€Zh€›m€М€n €и€„€Ѕ €‡'€=/€э6€k@€kI€СO€‚W€Л^€pf€њn€u€е€c €Е€џ€ѓ €И'€р.€ђ6€e?€"G€HN€RV€Y^€яe€n€Љu€_€)€Ч€e€ѓ!€ѕ)€1€б:€„B€hI€эP€ђW€Б_€Дg€Ыo€Іw€S€q €W€Д€ў€c$€g.€Ч5€?€XH€ъO€2X€л_€Dg€žn€nv€b€Ч €`€ь€^$€F+€w3€а9€рA€ I€дO€иW€ќ_€ъg€‹o€кv€X€%€š €щ€€8&€‰/€7€ћ?€ЪG€GP€žX€Ѓ`€Ih€цo€“v€­€Z€В€Є€"!€‚&€Є.€Я7€л>€EH€fO€TX€‡`€h€Žp€оv€{€Ѓ€€<€Ё€ƒ'€ђ/€b7€я>€•E€яL€ U€w]€ e€vm€Жu€€€Ў€Ф €я€Б€‘"€э*€ф1€ј;€‚B€чI€FR€![€b€Ij€_q€Н€€м €€@€f%€л+€В2€B;€D€?M€QV€І^€пf€йn€v€и€< €€Љ€…€D&€П+€в7€Г=€PF€ЌO€‘W€є^€ f€Шn€Љw€…€]€ €€X€?"€ѓ&€&-€o;€ˆD€CL€\U€\]€ze€хm€шu€е€…€ћ €U€E€є!€v)€œ2€k;€/E€M€jV€_€рg€3p€w€G€ €|€ˆ€T!€”(€k-€g5€ˆ=€/C€€M€cU€Ц[€Кd€Лm€Гu€+€П€H €Б€€­$€І+€Ч3€5;€eA€L€—V€3^€f€пn€Лv€€`€-€Ы€Ѕ€{$€ж)€5€ћ:€МC€†N€~U€Д\€%d€Њl€нt€ь€Ё€| €p€З€/"€L-€ 5€­>€_F€вN€oV€Щ^€&g€Do€•v€ €ъ€m€Х€N€‡%€H.€Д3€Д@€•F€/M€œS€.^€юg€rp€Пw€­€:€Q €Ž€&€$€–,€Л8€б?€хE€ьK€2S€§Z€]b€Em€8w€w€-€ё €о€€Љ!€?'€23€‰?€хE€ O€NW€;_€g€šn€эu€э€Ё€€˜€k$€8,€З3€W;€C€K€tR€МY€ѕ`€h€‘o€ќv€и€<€x €ђ€ˆ €И%€є+€2€ƒ:€b@€G€uN€ВY€Hb€9l€Нs€?€э€€у€f €9*€Ё1€А9€ДB€gJ€ђQ€Z€Œa€Oh€0p€‰v€’€Ѕ€*€^€(€Ў%€}*€w4€е9€U?€F€‰Q€ў[€Ѕd€ll€s€x€P€T€K€&€Ч!€r&€б,€У>€-G€wO€іX€З_€,g€–m€#t€%€Ў€{ €x€€$€†,€ 8€M?€ЈE€§K€ŽT€[]€He€уn€џv€h€O €œ €к€€ž!€x-€І2€т=€иC€’K€ОR€V\€!e€аn€[v€`€œ€ž€œ€"€)€К.€7€=€*C€ЧJ€чV€ѓ_€Сg€Мo€-w€ћ€4 €‘€У€f€*%€у*€ѕ1€B<€XA€гI€5O€vY€af€'p€šw€А€ю €q€Ш€Ф€м$€ъ*€І3€9€G€­N€SU€1\€dd€n€vw€C€€ѓ€‰€к€З$€л*€Ј0€­:€вH€kQ€_€ˆh€йo€(v€Ц€Я€ѓ€j€~€.#€P(€е4€…>€ЙE€gN€шU€]€Лe€Un€пu€Ъ€ч €†€Ѓ€j€o)€g.€§5€Е=€pC€=N€њV€ `€Eg€Tn€гv€ €Ј€д€С €&&€+€ 1€7€Т?€шD€оJ€nP€Ÿ]€ъh€~p€bw€” €Є €€ц€є€+#€ѕ,€ќ1€…=€‹C€#L€сV€в_€jg€qn€yu€€э €у €h€Ѓ#€)€v.€[5€ž;€B€ІK€MR€ІX€њ^€xj€u€€Ц€Я€|€b€Т€л-€5€T;€зE€9O€юW€&`€h€rp€#x€О€а €њ€L€"€Д&€.€н9€З?€F€iR€CY€ˆ_€Рf€n€;t€ €с €щ€I€Ц€ "€(€ў/€r7€ž=€DL€~S€\€еe€Рm€v€Є€& €k€ €Ъ&€$-€62€Ф9€Ш?€$E€aO€RV€x\€Ыb€`i€Њo€ч€' €И€4€е€+€Љ0€"9€Р?€žE€йL€ДR€KZ€Уe€™p€&x€\€ž€‹ € €ч!€Н'€X.€o5€–:€*B€K€tS€*]€f€мm€Av€о€+ €€V€D!€;'€..€П4€Щ?€ЂE€ёL€ S€oZ€U`€Зh€бu€H €Є €F€Š€h€ћ%€u+€Ь4€}<€YB€иJ€kP€Q_€,j€vq€Зw€– €Ў €€ƒ€а€‘"€(*€Œ6€Ѓ<€НB€›L€іR€HY€b€Ъm€Тt€%€т€ь €o€#€x'€Љ0€В7€…=€G€N€S€Z€тa€]l€kv€—€Њ €,€€C€#€-,€ч1€ф9€Ў@€ѕE€-M€T€5\€Šj€Ws€х€ €Ž€Ы€Q€5 €c&€9€N@€цE€ПL€[R€д\€+h€q€y€€я€’ €€ђ€Л$€№+€4€|:€*F€Q€RW€яa€Ij€Iq€‘w€Њ€2 €€ш€Е€ќ&€C-€A3€Y;€Ч@€вG€pN€§U€хb€пm€Иt€b€ €-€а€€"€)€ .€5€eC€nK€›Q€y[€d€el€v€Д€; €Ќ€п€й€n"€ў/€Ш5€Э;€tF€eL€ЈQ€6X€,a€˜l€шv€е€ €А€Э€n!€я'€њ-€Z4€v@€PF€НL€pR€ЮY€Жh€As€оx€€€Œ€C€N€ў!€1(€{.€ 6€г;€СD€HR€Œ\€уe€Њo€Џw€€M€і €€%€э)€i0€ 5€Ю=€BD€ТI€дP€JZ€Фc€$l€€E€…K€ёR€K[€’b€Ёk€.u€?€3€И€ў€щ €f'€9-€К4€<@€_H€UP€?Y€Ra€Dh€Wp€Эu€›€ш€г €<€Л€`)€/€g6€c<€эG€P€ўV€ž^€эe€Ёm€“u€`€x€Є€6€Ж!€—(€|-€ё7€}=€ЭC€DI€вO€Y€Ьe€~o€шw€€Х€M €€Ы$€Н)€H/€З4€Џ<€ЕG€N€ЙT€_€Жg€Еp€dw€‹€В€Ѕ€ €ї&€“+€2€ь7€x@€йF€vL€:R€чX€Pa€ˆn€Њw€8€N€&€€,"€?(€С-€6€=€D€1M€AU€\€1c€k€‡q€€Е€€ €€&€Š*€1€W7€>€сC€iM€гU€^€f€Šn€“u€њ€ €c€l€Т€K €v+€}:€B€wG€4P€оU€Ÿ\€Љd€йk€Їr€и€L€р€‘€х€л €K%€‰*€ъ0€ˆ@€]L€‡T€Т\€Ъe€–n€Іv€є€ъ €F€Q€К#€Ќ(€p/€)5€ф<€C€H€‘N€€дC€БJ€QQ€@X€`€=p€jy€Є€ €м€3€€Т#€O+€у1€7€љ>€ўN€X€H`€ h€p€x€a €!€Ж€д€ј€%€/0€є6€ž=€3F€O€ЯT€р[€b€’i€:p€€W €…€J€Щ"€л(€т2€Й:€qC€aM€YU€Н\€’c€Аj€…q€?w€0 €ч €o€)€x%€/+€л1€Р9€,@€єF€P€іV€w^€—f€пn€v€q €y €х€_€Я€w €А0€W6€z=€E€иK€ОR€й]€Сg€3p€шv€s €щ €В€№€t!€Н%€,€„1€o8€ЊD€hM€яR€;Z€Жb€i€ўp€ў€б€И €щ€ '€.€к2€ъ8€В>€bE€N€qT€K[€ћa€l€мu€Є€X€ю €к€!€'€ -€њ2€B€ѕH€ПO€Y€ё`€Уh€„p€Бv€ € €<€F€€f"€(€з0€Ї:€З@€кK€S€ŸY€ц_€i€™t€€E € €+€W€ € .€Љ8€ы>€фF€3N€•T€М\€жd€Ђo€Єv€б €‘€€x€%€П*€F0€В7€.?€]D€L€ S€ЛZ€Ja€гj€пr€і€­€’€;€є#€L*€л0€–7€=€ФE€‘O€цW€9`€’g€wo€=w€Ђ€Н €Њ€?€–&€ +€2€_8€w?€ТH€тO€&V€Л\€Ыb€Тi€ёq€ћ€†€ъ€­€љ €Ј*€Ь3€ :€B€H€ЄP€ЩV€Џ]€‚c€ьj€хo€Ч €V€о€ф€а€]$€ж*€b1€Ÿ8€,?€ F€N€ЖW€Ca€тj€u€B €•€љ€R€Н€е%€N-€ш3€-<€(C€вN€šW€с`€†i€r€[x€ќ€˜ €€B€З€ц€Ї0€&6€ƒ=€aD€mJ€ЧP€WX€R`€kk€qu€б€| €N€g€‚€Ќ €Ц$€и+€k=€ D€5K€нS€k]€Хe€o€Аv€Ы€§€ъ€“€N€$€+€г2€НC€IJ€gP€Y€kb€ќh€Їr€Ux€J€„€Э€€е(€w-€(4€с9€gA€ G€N€ўU€`€5h€чo€0v€F €б€5€љ€1"€Ќ'€ -€}3€K>€їD€–L€šS€П[€;d€лm€`v€%€з€u€Л€У%€r-€?7€‚?€$I€кP€kW€Ч]€Џd€sj€q€w€"€ €ъ€G€Ѕ&€$-€3€'9€?€rG€ŠS€2[€b€+i€(p€иu€љ€A€€n!€Ќ)€о1€Ћ:€ЮB€\J€ХP€EW€?]€†c€Эi€Гp€8w€{€Ы €С€u€“€Ї"€Ѓ)€І/€q6€<€хA€I€‡Z€кd€bo€%w€d €f €F€l€€Ÿ&€c0€Ы9€rA€РG€rO€ѓU€Ќ^€Xg€Jo€Нv€U€Г€— €н€б$€\2€І7€$=€5C€ђH€оO€СV€т\€ e€m€u€M€V € €m€е+€ч1€ы6€ц<€€B€АH€sP€;V€a\€Bb€"i€џo€ї €Д €P€Ђ€Н€Ѕ#€ы(€.€*<€\I€R€X€с^€pe€Ik€0r€‘ €Ѕ €€и€с€ˆ$€-€v4€‡;€B€ЛH€~N€(U€.[€pb€Ir€v€ч €Ћ€й€€N#€_4€o9€Ÿ@€ G€ИM€aU€(a€[i€q€2w€I€Э €X€†€— €К&€ѕ1€7€•@€AE€\S€ЇW€)a€кf€ o€Ъu€) €љ€­€;"€E(€С-€74€Р9€c@€сF€M€џR€ќZ€…c€Ѓk€s€ё€ˆ€C€е€_)€S3€;€џ@€тG€rM€ЋS€гY€`€Eg€Ыn€­u€0€д€Я €b€ж!€ *€ 2€‚:€LB€jI€ФQ€X€<`€™g€p€gw€[ €А€Ъ€в€$%€{*€у1€8€Г>€šG€–P€кW€юa€8i€q€Nw€О€Ь€ѕ€&€Л €_&€c,€њ1€т7€t<€žA€bF€ЇT€Юc€єm€Ÿv€9 €€Л€є€х€ь!€—1€[:€`@€eG€9P€ V€‹]€me€6n€u€г €ъ €b€И€5€%€ь4€Ђ9€gA€H€€‡H€РP€ўV€]€Ћd€ l€Ju€Ы€€d€`#€Є*€^1€Я8€8?€F€ыL€mS€ХY€љ`€пg€?o€v€=€A €р€•€€ь'€Д2€j9€лD€?K€P€mW€з^€Бd€Чl€њv€€k €I€%€щ*€@0€у5€;€ЫB€вH€эO€dV€…^€Гf€ѓn€Дu€k € €1€€п€к€E3€Б>€™D€ЕJ€ S€ъX€‹_€Эf€_n€t€?€Є€D€г€> €#€Ш+€57€R?€гE€фN€hU€ ]€“d€šm€€И€y€`€Ы€§џQ€Ёd€lџ€Pџ€Ѕ€ю€”€Ћ€ўџ€nџ€eў€Fў€у§€и§€Fў€ѓў€џ€Ьџ€[€{€•€В€з€gџ€Yџ€оў€%џ€—€€—w€/€ dE€лў€o§€Ћ€“€К€_€„b€№џ€џџ€yџ€8џ€!џ€Їџ€Ї€š€Ќ€э€гџ€Iџ€џ€ў€€`€ž€ƒџ€zў€џ€Šџ+€7ў€xў€џќ€Иќ€‹џ€>џ€Cџ€Sџ€Sџ€пџ €Ў€s€Ї9,€“`€Ъџ€rџ€џ€џ€Еў€0€6€Ьџ€]ў€Вќ€мћ€Јџ€…џ€6џ€Љў€ж§€?ќ€Iќ€G€ŸQ€џ€уx€Ы€€Р€Є€р€"€У€и€б€€€@€€y€К€ј€˜€c€к €џ€Ќџ€ьў€œџ€Шў€ў€ƒ€Њ€б€Ш€ё€єџ€эў€Wў€3ў€‘ў€пџ€фџ€šџ€>џ€ё§€_€Š€Я€ѕ €,џ€Яў€—џ€Ѓ€€А]Cs€Р=€Юџ€|џ€Qџ€ џ€ёў€‹§€џ€†€Ь€~€€,€F€€hџ€*џ€сў5€жџ€џ€ ў€Yў€џ€џ€]џ€Nџ€‰џU9€€~€v€’€Ј€Ї€€Хa('€Ÿџ€Aџ€\џ€џ€џ€fў€Œ€G €‰џ€Yџ€нў€юў€sџ€џ€џ€&џ€uџ€ џ€/џ€єў€Fў€cў€о:€ €X€L€жџ€rџ€[џ€…џ€Єџ/€§џ€Aџ€ѕџ€\џ€Yџ€Ёў€§€7€€#€И€—џ €тџ€Ъџ€яџ€Гџ€ёў€dў€’§€x§€м€К€Оџ€;џ€Зџ€Ђџ€ёџ/p€Цџ€пџATV€r€и€€€q€Ÿ€В€нџ€цџ S'%'€Hџ€Šў€їў€–ў€ ў€Q€Ь€о€Фџ€ƒџ€]џ€j€†џ€џ€€Š€€>€С€Н€б€ €ќ€вџ€Шџ€ыў€Sў€а€‚€Ž,€еџB€€Ж/€цџ€Бџ1€€џ€5џ€pў€"ў€E€ъ€›€Э€ :{9€Ћ€‰`€€€рџ€†€єџ9w€ъџ€[џ€ ў€C§€№§€Œџ@€јџa€їџ€^џ€Оџ€dџ€>џ€бў€о§€Ћў€"€f_-L€€“€Эd{2€Ыџ€pџ€’џ€ѓџ €џ€~џ€a€(8€Œў€џ€mI €оџ€uџ€Aџ€ џ,€Ћџ€Mџ€џ€@џ€ џ€Ћџ€’џ€eџ€дџ€хџ€‘€ŠO €lџ€П§€†§€П^€їџ€нџ€Гџ€Ќџ€Шџ€Uџ€жў€ёў€ џ€dџ€Иў€џ€Дџ€€џ€‡џ€ €ъџ -€џ€Пџ€С€Џџ€+9€mџ€Р€[џ€žў€Вў€–џ€dџ€иџ€§џ€Мџ|€џўN|€Њ€œ€уi€˜џ €š€њ€€€хџ€ы€˜3€R€,€Цў€eў€з€Њ€їџ€Ѓџ€ГџLC6€Ш€;€ЃH€Ѕџ€nў€ž€Л€dџ€Ѕџ€"€ €Ї[€Œ€Ћp €жџ€Oџ€Hў€P€Ќ€)€џ€Œў€шџ€Еџ€тџ€Vџ €Šџ9N€›џ€ш€Ё{€€e€@џ€‹§€œџ€Фџ€џB €ѓџ€Аџ€џ€я% Y€Сў€Н§€Т€h€уџ€еў€Їџ€Ъџ€’џ€ џ€\џ€Dџ€R€А€Єџ€Х€‰€† €ўџ8€Iџr€мџ€}џ€4џK€чџ€Rџ€П€ёџ€оў€Sў€ѕўO%j€€ў€ЉF€ђџ€дi€ўџ€жџ€лџ€…џl€аџ€С€Х€­€пџ%I€Чџ€€‰€Цџ€Rў€џ€й€Эџ€іџ€Цџ€њџh=€‰џ€Љ€€вџ€vў<€Ц€Аџ€жў€Пџ€шџ€Пџ€_ў€б€€§џ€>џ€ѓџ€‚€њџ€ыџ€шџ€Lџ€Ыџ€Ћџv€“q€Еџ€пў€т€†џ€у€}m€Х}€Š,<€Щџ€Yџ€рџ€uџ€?џ€Sџ€Фў€€0џ€§€я€Аџ€Dџ€фџ€Jџ€џ€œ€‹џ€€€аџ€Цџ€џ€Ќ€Е€Ї> €Е€—l€№џ€ѕџ€Вџ€Еў€›€…h@€Hџ€тџ€§џ€хўy€Ь€јџ€9џ€ыџ€Аџ€Wџ€cџ€Aџ€xџQ€›€}џ€єJ€Чџ€бџ€шў€[o€Гџ€€џ€rџ€>џ€ƒџ€њџ€Мџ[€fџ€оџ€кџ€Љў€ї€’€кџ€вџ€зџ:?€аџ€‹џ-€Їџ€ћџ€дџ€уџ€@ў€ч€ЬQ.€–џ€вў€|x€кџ€єџ€йџF€§џ€Пџ€ѕџ"€ёџ€џ€Бџ€­џ-r+€–$€щ€•€У€Ьџ€%ў€€йџ€јџ€Оџ€џ€8€€гџ€Bџ€Ѕ€Фџ}€џ3€јџ€Бў€ &;€жџ€Šџ€џ €Щџ€{џ€“џ€—џN€Рџ€ џ€Ъ€Пџ€џ€Ђ(€ЂџY€Ћџ€‰џ€™џa €Кџ€фџ€ТV€џ€Єџ€ŽџJ€Яџ.€Ќџ€Nџq4€3џ€MX€о8€Щџ V€Гџ€рr€—џp}€уџ€юџ€pџ€Цџ€џr€Оџ€рџ€Wџ€Цў€H€Жџ€Г€Бџ€Jџ €Щџ€“  €Ъџ€Ќџ€яџ€Еџ€џS€‰ў€Дn€Сџ€хџ€xџ€Љ€Шџ€јџ€Uџ€И€жџ€”D€Ь€ыn€џ[€Ћ€еџ€§џ€цџ€џ€‘џG€Vџ€Ъ€Нџ€Е€лџm€ˆџ€Щџ€ќў€№џ€˜[€Ž*,€†/€нџO€Wџ).€€Ѓџ€Яџ€‚џ%€™џ€оџ€ъџ€Іџ€zџ€3џ\€їџ€=џ€џ-6€щџ€џџ€Аџ€žџ€ьџ€ћў€2H€Їџ€'џ €ЎџY €џ€ЇџS€Йџ€Щџ€‚€žџ€nџ€хџ€Чџ5€€Њ€ћџ€Ъџ€„€РџH€ €ƒџ€XџH(€ЊN€јtT€оџ€О& €–џ€с€Xџ€cџ€†џ€Ѕ €_џ€+џ€єџ€Эџ€›џ*e7oKG€ џ€џџA€ыў€‰€цџ€дџ€Мџ€Ќџ€Оџ€Ёџ€ы€Г€чџ€зџ€Ѕџ€€џ€"џ€’€Иџ€тџ€шџ7€‚џ€Мџ€Цџ€џ €Ÿџ€–џ€Ў€œџ€›e€nџ€ыџ€&€ОџAF@€;€еG€Џў€/€Ьџ3€Шџ €ёџ€ћџ"4€ф€ƒ€Ё€џ€*џ€ю{@€mџ€Юџ€оџ€џ€Ь€ЂU)€tџI€jџ8€ џ€Оџ€ьџ€џ;€ъџ€•џ€–€№џ€бџ€ќџQ€Нџ€Ї€•€•€cџ€ €dџ€хџ€јџS€шџ€зџ€Yџ€ž€œџ]5€Щ*€ €€єџ€њџ€лџU€Dџ€ёўk€ѓџ€Аџ3€Ъ€­€ЛџN€Dџ.€™ €vџ€Љ€Цџ€…џ€”џ€ џ€– €Aџ€і€ёџ&€іџ=2€2џ€)џ€$џZ€kџ€%џ8€Ž€ˆўM€АџK*€›џ8€Чџ€яџP9€мџX€Хџ€Ÿџ€эџ€lџ.€%џ€тr€ќџ€Иџ€ёџ%€Яџ€фџ€ї,{/€†џ€кџ€џ€рџ€ џ€š€zџ€ФG€ѕў€Ћџ€КџY€ˆџc€ўџ@L€Zџ€аџ€Н€нџ€Єџ€Wџ€…џ€S&€чџ&€нџ€с€uџ€Юџ€Сџ€і<€Gџ€“џ€Яџ€Ыџ€Yџ3€•<€›џ€пџ€Дџx €тџ€­џf[€Fџ€ћў€ƒ€;џЪ€€ЩЧЩ€Ч€Щ€Ч€ Щ€Ч€0Щ€Ч€@Щ€Ч€PЩ€Ч€`Щ€Ч€pЩ€Ч€€Щ€Ч€Ы ЪШФХЦ[€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕOOМOOЖOМO&OНOOИOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOМO'OсOOИOсOOтOOИOтOOсOOМO(OЖ OOЖOЖ O+OМO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOМO+O€ O €ўO3 f0" D ЄBEOМO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOМO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOМO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOМO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOМO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOМO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOМO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOМO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOМO€OЕO OсOOтOсOOЖOOсO OЕO!OœO"OУOOсOУOOœO#OœO€)STM: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёо –!Ž!›!!tuєƒ ˆ ‹ Œ Ž  ‘ Љ о Ž!–!›!т%у%ф%х%ц%ч%ш%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glf .cil$inОY.cil$exо'.cil$sy#.cil$dbЃ /380 1284597039 100666 24839 ` џџL/e‘L8ўГ ЅйЋMЌ›жЖ"&SТч` /e‘LУ_.drectveQ, .cil$fg}@@.cil$glf •@@.cil$in$"ћ @@.cil$exо'0@@.cil$sy#§W@@.cil$dbЃ _@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_tables_NLSF_CB0_10.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_tables_NLSF_CB0_10.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2Ь2€ovb V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Нc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїтc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлсc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Мj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы Уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_nlsf_cb0_10.h“aХЖЦэЧЦ ДНЉ ёœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_nlsf_cb0_10.cг–tш‹G„MЦЃІmгb>Ф SKP_Silk_CLZ16†€ €˜ |€‡Шж SKP_Silk_CLZ32†€€р€,+ШФ =SKP_Silk_CLZ_FRAC‚€€і€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€р €‚€ZШШSKP_Silk_NLSF_MSVQ_CB0_10_ndelta_min_Q15†,€!€мЦSKP_Silk_NLSF_MSVQ_CB0_10_CDF_middle_idx†€!€УЩSKP_Silk_NLSF_MSVQ_CB0_10_Q15„€` €!€нЧSKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5„€№€!€о Лsize_tu ЃSA_AttrTarget€)ХSKP_Silk_NLSF_MSVQ_CB0_10_CDF_start_ptr†€!€пФФSKP_Silk_NLSF_MSVQ_CB0_10_CDF„€ќ€!€рАSA_Parameter€)†4strnlen†€ЎSA_Method€)†@ Мwchar_t!ЪSKP_Silk_NLSF_CB0_10_Stage_info†H€!€с ЧЩЋwcsnlen†€ЫSKP_Silk_NLSF_CB0_10†€€€€–ФХЦШЪ SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_NLSF_CBS€› Ф€b €D€л€M€Р$€Ы*€ж0€Ÿ6€H<€ђA€›G€&M€tR€‰W€\€Вa€f€mk€Kp€ u€Жy€_~€ƒ€А‡€@Œ€…€Ы”€™€(€@Ё€WЅ€,Љ€­€зА€˜Д€XИ€М€ˆП€љТ€WЦ€ЂЩ€юЬ€'а€Oг€eж€{й€м€†п€{т€@х€іч€Ќъ€6э€Гя€њё€)є€Lі€7ј€яљ€Œћ€ўќ€џ§€џў€џџ€q€F%€7€яH€Z€Зj€l{€!Œ€!œ€sЋ€ХК€ФЩ€Ти€ц€cѓ€џџ€{!€іB€Йc€}„€ŒЄ€@У€єс€џџ€"€7D€сd€з„€ЭЄ€Ф€Ат€џџ€є"€(E€…d€тƒ€?Ѓ€Т€Nс€џџ€€Я!€ˆ2€хB€AS€Ec€Hs€Kƒ€N“€QЃ€ќВ€ЈТ€Sв€Јс€ў№€џџХФФ€‚Ф€ЄФ€ЖФ€ШФ€кЦ Ч€”€Ї€Љ€Њ€Њ€­€­€Џ€А€А€А€Б€Г€Е€Е€Е€З€З€З€И€Й€Й€Й€Й€К€Н€Н€Н€П€П€П€Т€Т€Т€У€У€Ф€Ц€Ч€Ш€Щ€Щ€Ъ€Ы€Ь€Ь€Э€Э€Ю€б€в€в€е€ж€к€м€н€т€ч€ъ€я€€€w{{{}~~~€€€‚€‚€ƒ€ƒ€‡€Š€‹^^__`bbc]]_``abd\]aaaabb}~~€€€€€€€€€€€€€€‚€‚€ƒШ€3€„w€fV€ФЩ€Ђ€З€E€,$€1€G=€K€oW€}e€жq€е €L€ф€h*€Й;€КA€ѕL€њU€‘`€r€€Я €Б€a(€ 6€@€vN€ЎZ€pg€s€і €Б€‹€5'€54€h:€ЌN€kY€b€Ѓs€%€ €.€"€э,€f5€MF€9U€ga€Ip€и €§€€­(€;€ІA€YQ€]€Фf€уr€ €Т€A€!€н7€т?€?J€u[€дd€Zo€8 €v€љ€+€ѕB€ПI€šR€›[€йd€ s€З €Џ€Н€г+€B2€›C€qN€tX€–h€Гq€~ €€€‹.€U6€Ш>€хO€W€Ўj€‚t€п€Ч €Ю€&€2€цC€O€IW€`€‚n€Ÿ€ю €д€{$€…+€#=€H€ЙR€Яc€Dn€{€o€ѕ€D-€š4€й<€K€xS€Іc€ol€Н €н €6€№5€%=€эD€zN€GX€cg€yo€N€А €ѕ€т&€1€9€їL€ЗT€Yg€Вq€~€q€€&€„8€@€ПJ€Z€c€чn€} €€3€R$€ю2€:€*F€“P€]€0o€{ €ё€c€м/€б7€Ј>€ЕG€њP€di€}r€§€Ї €†€t€,0€Ž=€oL€W€Id€{q€в€› €y€“€}3€K<€=G€ T€`€Пn€р€=€6€й'€ы.€м7€H€ЇO€g€q€щ€Z €s€"€\>€ИF€O€ѓX€Цb€q€ы €g€z€x&€Ш1€Ї8€щH€„\€бe€q€< €э €~€•%€J:€э@€=J€R€Цf€vr€§€\€Б€˜&€Џ?€nG€[P€>\€гe€Шq€} €œ€–€Ž)€|1€s8€žA€РK€Уe€eo€€\€k€ќ$€+€ž3€цM€HW€&b€cs€€€­€ (€C1€m8€M€ЉW€Za€r€ю € €I€ь!€0)€с>€ŠF€ЫW€вe€n€€q€€–,€‡3€y;€СN€ђV€tg€t€ј €р€н€‹&€=-€в6€АR€ЊZ€мg€Яt€в€Q€€Я!€Ÿ'€?€pL€TT€Ѕk€™s€Ž €Ь €€c1€й@€]F€†R€‡Z€Єj€Тs€’ €Т €=€p!€Е;€ЧM€BU€!^€Чg€–q€ €д€Ь€’ €ё&€ƒ1€лI€сX€jc€lr€§ €и€a€€Ь#€t8€ЁT€ѕ\€иi€Ёt€ €C€:€j+€|1€Ё9€#B€аX€Gd€Нm€€“€K€Ÿ4€ъ;€C€mN€QW€-j€/t€Ш €я€Ÿ €V/€Ц:€ЃH€ДT€€`€k€ёt€r€Ц€K €-.€3;€xA€ЛP€Р[€]e€{r€y €ъ €Œ€K*€H€ъO€W€}`€ i€u€. €А€V€@ €)%€К1€ъH€№P€—e€ o€Ћ €-€€ €Ђ0€ 7€/@€tH€RV€ёb€Fl€™ €1€™€g$€6+€%3€;€+W€лf€Dp€љ €Q€ €X"€;(€e1€1L€О`€ti€Тs€к€Ф€x€Ю'€Ь-€p6€щ=€kH€Mh€•t€І€€‘€#€Ы'€ ;€P€DW€fe€Јm€L €щ€х€ €‰'€ C€ИL€фV€цa€Pk€U €H€3€g$€*€ 4€8<€hM€``€ђk€Ч €‘ € €o€{!€6:€YJ€ІU€бe€8p€%€ю€€F'€э-€L:€D€кN€Г]€ f€l€ћ€ж€Ё%€8,€з7€щT€ђ^€'i€гt€Ž €ш€У€є#€*€„F€7Q€*[€Єk€Љs€r€Œ€b€Њ'€ъ+€Х9€J€цQ€йg€Чq€y€Ж€)€2€Y9€АC€иM€@W€Qf€p€T €›€d€Ж€Г&€CG€ЅT€с\€Yi€Ÿq€І €‘ €u€Р;€еC€ПJ€лU€Р^€Кj€s€K€Ќ€б€!.€16€ю<€RC€пK€lg€Эs€Л€€ €З%€/€KF€№O€0Y€јg€.o€{€€g$€э+€L3€А:€MD€ŸX€›e€qn€€ф€+€f:€'C€сK€/U€I_€:i€hr€‘€Ь€8%€ѓ(€а*€л9€~J€ЋT€-d€sm€g€ј€b!€.€0€п2€ѓ@€kR€y`€n€€"&€<+€Е,€/€ˆ6€ЅF€T€ˆb€Eq€€O€‹€€€€§€б€K€ж€>џ€О§€y§€o§€ю€4€e€%€v€0€Ьџ€<€š€Лo€Š|€Љ€S€„:€cў€§€e€P€E8€>€џ€іў€ў€Hў€Uћ€Ѓ~€џ€"€œ€Мx€x;€šў€в§€вњ€џ€6џ€ыќ€(\€Кџ€џ€2§€‘ћ€$€уџ€‰§€ч€cџ€gџ€щў€]ў€Њў€оџ€ў§€сќ€нљ€Q§€Ÿ§€о§€~џ€)џ€џ€Bў€Т§€Чњ€Я€Иџ g€~§€Ў€н€Л€-џ€вќ€€с€єў€‡ў€W€m€›€Є€3€n€Л">€Чў€Рќ€6њ€cћ€у€жџ€йџ€>ў€‚њ€Е§€Ьџ€§€Nb€Фџ€ ў€ў€оћ€+€ƒ€џ€џ€A§€ €8€cў€їў€—€=€Y€Cb=€šџ€‡€•€i€m€йџ"€§€Б€€р€bў€wў€ў€Љў€Фў€ь§€€ЌZ€B€кў€Сў€у§€ї€€‘€kџ€Зџ€Yџ€–v€4€кy€У€qџ€ћў€ ќ€оќ€ƒ€Д€‚€Uў€@ў€W§{€Љџ€џ€џ€€6€Н€ѕ€b€€€уў€9€%€Яџ€ћ€~ў€љў€b€\€^€P_"U€Д€Я€‘ў€’§€.€њџ€Бџ€`џ€Єџ€wџ€ьў€Нў€ў€H§€єћ€—f€Њџ€*џ€ў€y§€фџ€нў€Ÿџ€Lџ€џ€Mў€юџ€Дџ€Дў€š€—€Ј€€›€ўo:€oџ€Ш€Лt€ƒ€‘ў€%ў€ €б§€1€У€џ€Xџ7€†џ€ƒR€ћџ€яў€Юџ€ˆ§€œ €цџ€щў€;€Ѕ€Х€y€›€зџ€vџ€Мў€“џ€—§€hb€Ыџ€Сў€Žџ€ џ€Ўџ€ћ€д€€wџ€{ў€Œ€b€юџ€џ€2ў€yџ€=5€№џB€Иџ€‚џ€œў€Ѕў€Иў€Иџ€Џў€D€˜€]€Љ€<џ€Г€ў€€E€Жџ€АџK€сџ€€W€€Bў€гў€5G€чџ€џ€€Ё€^џ€­џ€I€ц€Щў€§ў€Б€цџ€2ўY€€~џ€Ѓџ€8ў€Уў€#џ€2џ€_ў€Jџ€Жџ€ъ0€€g€ч€U€цў€ќ€mџ€"џ€ћ€1џ€Л{€_ў€мџ€€џ€№€џ,€Yџ~€„џ€Гџ:€oў€M€ŠџR~€—€Oў€g€~џ€šџ€ƒ€ џVU€2ў€ž€џ€‘€3џ€ў€u€%€Иџ€Rџ>€€јџ€юџ€j€щ€Й+€€С€:€џ€Н\€эў€§џ€ѓ€А€Ж€б€Ю€ЭџOm€Ј€Gџ€Ьў€Мџ€–§€€Ъў€”џ€\џ€Ѕ=€hџ€›џ€dў€єў€џў€иџ€ьџ€фџ€bџ€гў€€|€Ўў€‘ў€|џ@r€}џ€џ€dџ€ќў€Сџ€Œџ€›€Ж§€6џ€ў€сў€В€у€–џ€кў€Є€*€œџ€Й€=€С€гџP€Љџ€Oў€аџ0€џ€џ€uџx€”ў€ €xџ€Œ}€‚€Їџ€№ўv€џ€Мџ€=ў€ш€€[џ€аџ€Bџj€л/€Г€ѕaK€^ўy€Eџ€:€8џ€Ёў€с€ыџ€'џ€ъ€‘џ€Т€ђv€Œ€sў€c€i€гџ€=џЪ@ЩЧЩ€Ч€€Щ€@Ч€ Щ€рЧ€АЩ€€Ч€РЩ€ Ч€аЫЪШФХЦ[€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕOOМOOЖOМO&OНOOИOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOМO'OсOOИOсOOтOOИOтOOсOOМO(OЖ OOЖOЖ O+OМO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOМO+O€ O €ўO3 f0" D ЄBEOМO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOМO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOМO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOМO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOМO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOМO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOМO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOМO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOМO€OЕO OсOOтOсOOЖOOсO OЕO!OœO"OУOOсOУOOœO#OœO€{STM: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёо –!Ž!›!!tuєƒ ˆ ‹ Œ Ž  ‘ Љ о Ž!–!›!У%м%н%о%п%р%с%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glf .cil$in$".cil$exо'.cil$sy#.cil$dbЃ /420 1284597039 100666 19434 ` џџL/e‘L8ўГ ЅйЋMЌ›жЖ"&SТЪK /e‘LІJ.drectveQ, .cil$fg}@@.cil$glV …@@.cil$in) л@@.cil$exо'@@.cil$sy#тB@@.cil$dbЁJ@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_tables_LTP.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_tables_LTP.obj-FdRelease\vc100.pdb-errorreport:prompt†1j22€ovR V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШЗj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы Иj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fМc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЛc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩКc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьTc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkЁc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Оj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпРc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїхc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлфc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЙ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Ф j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_ltp.cЧк™ПfСЎќЖь^™ћпЧ SKP_Silk_CLZ16†€ €У |€‡Шй SKP_Silk_CLZ32†€€ €,+ШЧ @SKP_Silk_CLZ_FRAC‚€€!€$9Шй ­SKP_Silk_SIN_APPROX_Q24†€€ !€‚€ZШќSKP_Silk_LTP_vq_sizes† €€]SKP_Silk_LTP_gain_BITS_Q6_0„€!€ЌSKP_Silk_LTP_gain_vq_0_Q14„d€!€жыSKP_Silk_LTP_gain_CDF_offsets† €€]ъSKP_Silk_LTP_gain_CDF_ptrs† €€_SKP_Silk_LTP_gain_CDF_0„€!€з Нsize_tuщSKP_Silk_LTP_gain_BITS_Q6_ptrs† €€€ ЃSA_AttrTarget€)SKP_Silk_LTP_gain_vq_2_Q14„€€!€ичSKP_Silk_LTP_per_index_CDF„€€^шSKP_Silk_LTP_per_index_CDF_offset†€€АSA_Parameter€)†7strnlen†€SKP_Silk_LTP_gain_BITS_Q6_2„P€!€йьSKP_Silk_LTP_gain_middle_avg_RD_Q14†€€ЎSA_Method€)†@ Оwchar_t!Ўwcsnlen†€ћSKP_Silk_LTP_vq_ptrs_Q14† €€€SKP_Silk_LTP_gain_BITS_Q6_1„(€!€рSKP_Silk_LTP_gain_CDF_2„R€!€кSKP_Silk_LTP_gain_vq_1_Q14„€Ш€!€лSKP_Silk_LTP_gain_CDF_1„*€!€† ч€R€TŸ€џџш€фР€Пд€Ўм€Eф€Хъ€ѓ№€ і€Bњ€7§€џџ€Ъb€Оw€~‹€Т€ЙЇ€ТА€cЙ€С€”Ш€юЮ€ѕд€Јк€Oр€ёх€}ы€у№€Џѕ€Sљ€дќ€џџ€^€п$€ 5€цD€“T€Зa€ym€Ov€–~€†€€ђ”€n›€AЁ€ Ї€ХЌ€lВ€щЗ€/Н€ Т€ЁЦ€мЪ€цЮ€Хв€˜ж€=к€ен€lс€ˆф€•ч€‹ъ€|э€f№€ ѓ€—ѕ€ћї€Lњ€Gќ€&ў€џџы ь€+€ь€A€E€S€X€j€{€œ€ЂX€ч€э€є€,€5€9€D€E€U€Z€_€`€`€b€d€o€‰€Œ€–€ю€ј€џ€€€€€7€=€F€F€G€S€]€^€_€`€c€f€n€s€{€€ƒ€„€‰€Š€Š€—€™€œ€œ€€І€Њ€А€В€С€Ц€Чъщ€R€и€ €§€ #€0€џџ€J§€ƒ€ћ€Ÿ € €… €h €Т€”€с€ж€вџ€О€6€ї§€€ќ€в€5!€W€‰ќ€H§€j €P€вў€9€€W€ъ€7€0€хї€Оќ€h€Ќў€€€›€|§€™€œ§€ёї€w€f €‰€Т €яq€Ц€X€А€В€Еќ€Џ €В€ћ€>;€ь€р€" €Хў€€ѓ€€/€/ћ€T€р€ €T€§€п§€>€.€ €Эў€Є§€Б€љ€в€Љ€ €Эњ€e&€A€Eћ€нњ€[€Щ&€~њ€"u€pџ€њ €q€x€€” €y €кџ€y€?ў€š€л €Uџ€žџ€‹€š#€Œ€L€tќ€€"€Cќ€Т€Œ€[€€Зў€ѕ€Бў€ €Й€€Ъџ€о€щ€ў"€€ €Žў€п€“€^€–€u€ˆћ€n€Ч€€ъў€Ÿ€$€Т€Qў€ќ€€4%€t€™ќ€Fќ€€Ъ-€Э€дў€‹џ€š€‹ €Ї€{ќ€Q€T €Ж€2€6€Эџ€J1€„€Дќ€U €ж€m€ €Э€ џ€‰€v7€ E€>ћ€у€^2€ї€щ€|џ€x€6%€A€€Ÿљ€o"€є(€lі€€ы€Т€л€›€Е€П€Кѕ€‘*€D"€Фј€t €ў€Н"€K€пљ€Г€Є €ћњ€ф€“ћ€C€ю€›€№ €З€‡€+€Э€R€ќ€< €|4€Џ€4є€$€~ѕ€Ш4€Н€Žњ€tњ€G€,€hџ€xљ€ƒќ€O €J<€.њ€Ÿ€тћ€Ќ€А/€Z!€№ђ€ь€шњ€Љ€)€1€ €Iћ€€+€nћ€З€k €‡€7 €‹€‡ €€х€џ€фљ€Иџ€\€e€o€,€м€рњ€(>€~€§ћ€i€Й€Н €ћ€Х €ф€еџ€ €€˜€є€о#€}€8џ€Ы€@§€/€K€\ћ€€і€№ћ€^'€Y€1ѕ€Оѕ€C€;#>€Ў€ы€џ€Š €Љ*€›€f*€ў €а€‘џ€о€л€к €%0€œ€†љ€zє€Ÿ€Ъ?€ €жёC€#€€Аџ€€і€€Оџ€Ж€Ÿ€Ћ,ћќ ([€@ OЕOO3 f0" D ЄBEOЖOЗOЖOOИOOЙOКOЛOМOЛO€ OКO8OOOКO?OЙOOTOOКOTOOЙOOИO#OЁOOКOЁOOИO\OЖO OЕOOОOOИOОOOПOOИOПO&OРOOКOРOO€ O €ўO3 f0" D ЄBEOРOtSS&<F-:-8LOSOuЙ8†C 3†At3†At&7Н†Bu€Й:†BuU†BuЙ8†C U†C LCBA†Bu:=OvT)=OGTTO€ O €ўO3 f0" D ЄBEOРO€!SS&ГF-Б-ЏLOSO€"ЙЏ†C† 3†Cƒ3†At&ЎН†Bu€ ЙБ†BuU†BuЙЏ†C† U†C† LCBA†Bu:ДO€#T)ДOGTTOПO'OфOOКOфOOхOOКOхOOфOOПO(OЙ OOИOЙ O+OПO)OФ OO€ O €ўO3 f0" D ЄBEOФ OLSS&Ч F-Х LOSOM&Щ 3†At2†AtKONЙХ „!,†At3†At8Ъ SOO3†AtA†At:Ш OPTOR)Ъ ЙХ „!,†At3†At€џ 8Ы SOSЙХ „!,†At3†At€№ 8Ь SOT&Х 3†At „!KOUT:Э )Ь SOV&Щ 3†At†AtKOW&Х 3†At„!KOXT)Э OYT:Ю )Ы SOZЙХ „!,†At3†At€№џ 8Я SO[&Щ 3†At†AtKO\&Х 3†At„!KO]T:а )Я SO^&Щ 3†At †AtKO_T)а O`T)Ю ObЙХ „!,†At3†At 8б SOcЙХ „!,†At3†At 8в OdЙЩ †At3†AtA†At:Ш Oe:г )в OfЙЩ †At3†AtA†At:Ш )г OgT:д )б SOhЙХ „!,†At3†At 8е OiЙЩ †At3†AtA†At:Ш Oj:ж )е OkЙЩ †At3†AtA†At:Ш )ж OlT)д OmT)Ш OGTTO€ O €ўO3 f0" D ЄBEOФ OpSS&й F-з LOSOrЙз †At3†Bu€џџ 8л SOs&Ч Н†At€ Йз †At3†At ,„!U„!LA†At:к OtT:н )л SOu&Ч Н†At€ Йз †At,„!U„!L3†AtA†At:к OvT)н OwT)к OGTTOПO+O€ O €ўO3 f0" D ЄBEOПO€зSS&F--LOSO€иЙ†AtЙ†At"Й†AtЙ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOПO€лSS& F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!: O€нT) OGTTO€ O €ўO3 f0" D ЄBEOПO€пSS&F-- LOSO€рЙ †AtЙ†At"Й †AtЙ†AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOПO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOПO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOПO€эSS&"F- -LOSO€юЙ„!,†AtЙ „!,†At$Й„!,†AtЙ „!,†AtCBA„!:#O€яT)#OGTTO€ O €ўO3 f0" D ЄBEOПO€ёSS&(F-&-$LOSO€ђЙ$†AtЙ&†At$Й$†AtЙ&†AtCBA†At:)O€ѓT))OGTTO€ O €ўO3 f0" D ЄBEOПO€ѕSS&.F-,-*LOSO€іЙ*ˆЙ,ˆ$Й*ˆЙ,ˆCBAˆ:/O€їT)/OGTTO0OO€ O €ўO3 f0" D ЄBEO0O*SS&3F-1LOSO+O-&5Й1ˆ3†At ,†At2†AtKO.Й5†At3†At87SO03†At &й Н†At€Й1ˆ,†AtU†AtLA†At:4O1T:9)7SO3&й Н†At€Й5†AtU†AtLA†At:4O4T)9O5T)4OGTTO€ O €ўO3 f0" D ЄBEO0O;SS&@F->-<-:LOSO&B&й Н†At€Й:†AtU†AtL2†AtKO?Й<†CєЙB†At2†AtKO@ЙB†At3†At"8CSOAЙ>†CєЙ:†At3†AtЙB†At 3†At 2†AtKOBT:D)CSOCЙ>†CєЙ:†AtЙB†At3†At 3†At 2†AtKODT)DOET)AOGTTO€ O €ўO3 f0" D ЄBEO0OKSS&GF-ELOSOLONЙE†At3†At!8LSOO3†AtA†At:HOPTOR)L&@Н‚€&KU†Cє&JU†CєЙE†AtU†AtLKOTЙJ†At3†At 8MSOU&I3†At€€2†AtKOVT:N)MSOW&I3†At€†Д2†AtKOXT)NO[&IЙJ†At3†At †AtKO^&IЙI†AtЙI†At3†At 3†At€еЙK†At,„!,†At,„!,†AtЙI†At3†At€џџ 3†At€еЙK†At,„!,†At,„!,†At3†At 2†AtKO`ЙI†AtA†At:HOaT)HOGTTO€ O €ўO3 f0" D ЄBEO0OdSS&]F-[LOSOfOiЙ[„!,†At3†At 3†At8`3†AtA†At:^Ok)`&_Й[„!2†AtKOm&_Й_†At3†At †AtKOo&й Н†At€Й_†AtU†AtL3†AtA†At:^OpT)^OGTTO€ O €ўO3 f0" D ЄBEO0OsSS&cF-aLOSOvЙa†At3†At 3†At8e3†AtA†At:dOy)e&aЙa†At3†At †AtKO{&й Н†At€Йa†AtU†AtL3†AtA†At:dO|T)dOGTTO€ O €ўO3 f0" D ЄBEO0O€„SS&lF-j-h-fLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&n&й Н†At€ЙfІA“ 3†At$ЙfІA“ ЙfІA“ CBU†AtL3†At2†AtKO€&rЙfІA“ Йn†At 2†AtKO€Ž&o&й Н†At€ЙhІA“ 3†At$ЙhІA“ ЙhІA“ CBU†AtL3†At2†AtKO€&sЙhІA“ Йo†At 2†AtKO€’&q3†At€џџџЙs†At3†At 2†AtKO€•&tЙr†At3†At Йq†At,„!,†AtЙr†At3†At€џџ Йq†At,„!,†At3†At 2†AtKO€˜&rЙs†At,ˆЙt†At,ˆ3†At ,†At3†At †AtKO€›&tЙt†AtЙr†At3†At Йq†At,„!,†AtЙr†At3†At€џџ Йq†At,„!,†At3†At 2†AtKO€ž&p3†AtЙn†AtЙo†AtЙjІA“ 2†AtKO€ŸЙp†At3†At!8‚SO€ 3†At€€Йp†At 3†At€џџџЙp†At $Йt†At3†At€€Йp†At $3†At€€Йp†At Йt†At3†At€џџџЙp†At "3†At€џџџЙp†At Йt†AtCBCBЙt†At3†At€џџџЙp†At $3†At€џџџЙp†At Йt†At3†At€€Йp†At "3†At€€Йp†At Йt†AtCBCBCBЙp†At A†At:mO€ЁT:ˆ)‚SO€ЂЙp†At3†At "8‰SO€ЃЙt†AtЙp†At A†At:mO€ЄT:Š)‰SO€І3†AtA†At:mO€ЇT)ŠO€ЈT)ˆO€ЉT)mOGTTO€ O €ўO3 f0" D ЄBEO0O€АSS&F--‹LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&‘&й Н†At€Й‹ІA“ 3†At$Й‹ІA“ Й‹ІA“ CBU†AtL3†At2†AtKO€Й&”Й‹ІA“ Й‘†At 2†AtKO€М&“3†At€џџџЙ”†At3†At 2†AtKO€П&–Й“†At3†At 2†AtKO€Т&•Й”†At3†At Й“†At,„!,†AtЙ”†At3†At€џџ Й“†At,„!,†At3†At 3†At 2†AtKO€Х&–Й–†AtЙ•†At3†At Й“†At,„!,†AtЙ•†At3†At€џџ Й“†At,„!,†At3†At Й•†AtЙ“†At3†At 3†At3†At 2†AtKO€Ш&’3†At=Й‘†AtЙІA“ 2†AtKO€ЩЙ’†At3†At!8ЂSO€Ъ3†At€€Й’†At 3†At€џџџЙ’†At $Й–†At3†At€€Й’†At $3†At€€Й’†At Й–†At3†At€џџџЙ’†At "3†At€џџџЙ’†At Й–†AtCBCBЙ–†At3†At€џџџЙ’†At $3†At€џџџЙ’†At Й–†At3†At€€Й’†At "3†At€€Й’†At Й–†AtCBCBCBЙ’†At A†At:O€ЫT:Ј)ЂSO€ЬЙ’†At3†At "8ЉSO€ЭЙ–†AtЙ’†At A†At:O€ЮT:Њ)ЉSO€а3†AtA†At:O€бT)ЊO€вT)ЈO€гT)OGTTO€ O €ўO3 f0" D ЄBEO0O€рSS&­F-ЋLOSO€сO€ф&Ћ3†At€џџ†AtKO€чЙЋ†At3†At€€!8АSO€шЙЋ†At3†At€@"8БSO€ъ&Ћ3†At€@ЙЋ†At2†AtKO€ыT:В)БSO€э&Ћ3†At€@†AtKO€юT)ВO€яЙЋ†At3†At€L"8ГSO€ё3†At€ЙЋ†AtЙЋ†At3†At 3†At€CьџџЙЋ†AtЙЋ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЎO€ђTO€ѓ)Г&ЋЙЋ†At3†At 3†At ЙЋ†At,„!,†AtЙЋ†At3†At 3†At€џџ ЙЋ†At,„!,†At3†At 2†AtKO€є&Џ3†At€љ*ЙЋ†At3†At 3†At€kьџџЙЋ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Џ3†At€ЬфћЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€і&Џ3†At€*чџ?ЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€їT:Ш)АSO€јЙЋ†At3†At€Р"8ЩSO€њ&Ћ3†At€РЙЋ†At2†AtKO€ћT:Ъ)ЩSO€§&Ћ3†At€Р†AtKO€ўT)ЪO€џЙЋ†At3†At€L"8ЫSO€3†At€џЙЋ†AtЙЋ†At3†At 3†At€НЙЋ†AtЙЋ†At3†At€џџ 3†At€Н3†At A†At:ЎO€TO€)Ы&ЋЙЋ†At3†At 3†At ЙЋ†At,„!,†AtЙЋ†At3†At 3†At€џџ ЙЋ†At,„!,†At3†At 2†AtKO€&Џ3†At€еяџЙЋ†At3†At 3†At€•ЙЋ†At3†At€џџ 3†At€•3†At 2†AtKO€&Џ3†At€4яЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€&Џ3†At€РЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€T)ШO€ЙЏ†At3†At 3†At3†At A†At:ЎO€ T)ЎOGTTO€ O €ўO3 f0" D ЄBEO0O€SS&тF-рLOSO€&­Н†At€Йр†At3†At€@U†AtLA†At:уO€T)уOGTTOПO€OОO OЖOOОO!OЕO OœOOœO€ESTM= :_MaxCount†u8_Str†€ Д Б_MaxCount†uЏ_Src†€ ж е д г в б а Я Ю Э Ь Ы Ъ Ш  Х in16„ Щ out32†t         н л к  з in32†t    b†ta†t   b„a„  b†t a†t  bˆaˆ  b†ta†t #  b„a„ ) &b†t$a†t / ,bˆ*aˆ 974 1inˆ 5in_upper†t  DCA >frac_Q7†€t<lz†€t:in†t BleadingZeros†t  NMLH Ex†t Iy†tJlz†!tKfrac_Q7†!t   `^ [a„ _a32†ted aa†t Љˆ‚m jQres†€hb32†€fa32†€ qb32_inv†tra32_nrm†tsb32_nrm†tna_headrm†ttresult†tplshift†tob_headrm†t    ЊЉЈЂ Qres†€‹b32†€ “b32_inv†t”b32_nrm†t•err_Q32†t–result†t’lshift†t‘b_headrm†t    ЫЪЩШГВБАЎ Ћx†t Џy_Q30†t        у рx†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ Љ н"о"п"€#†#р#Ќ%ж%з%и%й%к%л%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glV .cil$in) .cil$exо'.cil$sy#.cil$dbЁ/452 1284597039 100666 16696 ` џџL/e‘L8ўГ ЅйЋMЌ›жЖ"&SТA /e‘Lє?.drectveQ, .cil$fg }@@.cil$glД ‡@@.cil$in1; @@.cil$exк'l@@.cil$sy#F8@@.cil$db‹i?@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_tables_gain.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_tables_gain.obj-FdRelease\vc100.pdb-errorreport:prompt†1j22€ovА V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШЗj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы Иj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fМc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЛc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩКc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьTc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkЁc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Оj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпРc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїхc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлфc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЙ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Ф j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™0j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables_gain.ct‘‰.яќ:‰ЖШЏЧ SKP_Silk_CLZ16†€ €У |€‡Шй SKP_Silk_CLZ32†€€ €,+ШЧ @SKP_Silk_CLZ_FRAC‚€€!€$9Шй ­SKP_Silk_SIN_APPROX_Q24†€€ !€‚€ZШ Нsize_tuЩSKP_Silk_delta_gain_CDF„\€€e ЃSA_AttrTarget€)АSA_Parameter€)†7strnlen†€ЪSKP_Silk_delta_gain_CDF_offset†€€ЎSA_Method€)†@ Оwchar_t!ШSKP_Silk_gain_CDF_offset†€€ЧSKP_Silk_gain_CDF„€€€lЎwcsnlen†€ Ч-^€Е€@€€ €E€М€u€q €Е €I€4€}€)€<€Р €Р%€=+€41€Є7€–>€F€ N€iV€_€h€]q€оz€‡„€VŽ€F˜€BЂ€$Ќ€ФЕ€П€иЧ€а€з€Hо€6ф€[щ€Кэ€aё€hє€ъі€њј€Ѕњ€јћ€§€а§€mў€сў€2џ€jџ€џ€Ћџ€Пџ€Яџ€нџ€щџ€єџ€џџ€ж€E€э€H €P€n€а€щ$€•+€ь1€8€>€D€J€юO€ХU€†[€9a€цf€„l€r€ow€а|€A‚€Ы‡€h€ “€Ћ˜€Gž€ЪЃ€Љ€:Ў€=Г€2И€Н€гС€uЦ€їЪ€MЯ€oг€dз€@л€ п€Шт€cц€гщ€э€№€сђ€\ѕ€ˆї€eљ€ђњ€3ќ€2§€џ§€ ў€џ€oџ€Їџ€Ъџ€сџ€ёџ€џџШ Щ€6 €€o€<€BЯ€џц€s№€@ѕ€ ј€Эљ€ ћ€оћ€‡ќ€§€~§€к§€ў€Yў€‘ў€Нў€фў€џ€"џ€:џ€Oџ€aџ€pџ€{џ€‡џ€џ€˜џ€ џ€Јџ€Џџ€Жџ€Оџ€Хџ€Ьџ€гџ€лџ€тџ€щџ€ёџ€јџ€џџЪ[€@ OЕOO3 f0" D ЄBEOЖOЗOЖOOИOOЙOКOЛOМOЛO€ OКO8OOOКO?OЙOOTOOКOTOOЙOOИO#OЁOOКOЁOOИO\OЖO OЕOOОOOИOОOOПOOИOПO&OРOOКOРOO€ O €ўO3 f0" D ЄBEOРOtSS&<F-:-8LOSOuЙ8†C 3†At3†At&7Н†Bu€Й:†BuU†BuЙ8†C U†C LCBA†Bu:=OvT)=OGTTO€ O €ўO3 f0" D ЄBEOРO€!SS&ГF-Б-ЏLOSO€"ЙЏ†C† 3†Cƒ3†At&ЎН†Bu€ ЙБ†BuU†BuЙЏ†C† U†C† LCBA†Bu:ДO€#T)ДOGTTOПO'OфOOКOфOOхOOКOхOOфOOПO(OЙ OOИOЙ O+OПO)OФ OO€ O €ўO3 f0" D ЄBEOФ OLSS&Ч F-Х LOSOM&Щ 3†At2†AtKONЙХ „!,†At3†At8Ъ SOO3†AtA†At:Ш OPTOR)Ъ ЙХ „!,†At3†At€џ 8Ы SOSЙХ „!,†At3†At€№ 8Ь SOT&Х 3†At „!KOUT:Э )Ь SOV&Щ 3†At†AtKOW&Х 3†At„!KOXT)Э OYT:Ю )Ы SOZЙХ „!,†At3†At€№џ 8Я SO[&Щ 3†At†AtKO\&Х 3†At„!KO]T:а )Я SO^&Щ 3†At †AtKO_T)а O`T)Ю ObЙХ „!,†At3†At 8б SOcЙХ „!,†At3†At 8в OdЙЩ †At3†AtA†At:Ш Oe:г )в OfЙЩ †At3†AtA†At:Ш )г OgT:д )б SOhЙХ „!,†At3†At 8е OiЙЩ †At3†AtA†At:Ш Oj:ж )е OkЙЩ †At3†AtA†At:Ш )ж OlT)д OmT)Ш OGTTO€ O €ўO3 f0" D ЄBEOФ OpSS&й F-з LOSOrЙз †At3†Bu€џџ 8л SOs&Ч Н†At€ Йз †At3†At ,„!U„!LA†At:к OtT:н )л SOu&Ч Н†At€ Йз †At,„!U„!L3†AtA†At:к OvT)н OwT)к OGTTOПO+O€ O €ўO3 f0" D ЄBEOПO€зSS&F--LOSO€иЙ†AtЙ†At"Й†AtЙ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOПO€лSS& F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!: O€нT) OGTTO€ O €ўO3 f0" D ЄBEOПO€пSS&F-- LOSO€рЙ †AtЙ†At"Й †AtЙ†AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOПO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOПO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOПO€эSS&"F- -LOSO€юЙ„!,†AtЙ „!,†At$Й„!,†AtЙ „!,†AtCBA„!:#O€яT)#OGTTO€ O €ўO3 f0" D ЄBEOПO€ёSS&(F-&-$LOSO€ђЙ$†AtЙ&†At$Й$†AtЙ&†AtCBA†At:)O€ѓT))OGTTO€ O €ўO3 f0" D ЄBEOПO€ѕSS&.F-,-*LOSO€іЙ*ˆЙ,ˆ$Й*ˆЙ,ˆCBAˆ:/O€їT)/OGTTO0OO€ O €ўO3 f0" D ЄBEO0O*SS&3F-1LOSO+O-&5Й1ˆ3†At ,†At2†AtKO.Й5†At3†At87SO03†At &й Н†At€Й1ˆ,†AtU†AtLA†At:4O1T:9)7SO3&й Н†At€Й5†AtU†AtLA†At:4O4T)9O5T)4OGTTO€ O €ўO3 f0" D ЄBEO0O;SS&@F->-<-:LOSO&B&й Н†At€Й:†AtU†AtL2†AtKO?Й<†CєЙB†At2†AtKO@ЙB†At3†At"8CSOAЙ>†CєЙ:†At3†AtЙB†At 3†At 2†AtKOBT:D)CSOCЙ>†CєЙ:†AtЙB†At3†At 3†At 2†AtKODT)DOET)AOGTTO€ O €ўO3 f0" D ЄBEO0OKSS&GF-ELOSOLONЙE†At3†At!8LSOO3†AtA†At:HOPTOR)L&@Н‚€&KU†Cє&JU†CєЙE†AtU†AtLKOTЙJ†At3†At 8MSOU&I3†At€€2†AtKOVT:N)MSOW&I3†At€†Д2†AtKOXT)NO[&IЙJ†At3†At †AtKO^&IЙI†AtЙI†At3†At 3†At€еЙK†At,„!,†At,„!,†AtЙI†At3†At€џџ 3†At€еЙK†At,„!,†At,„!,†At3†At 2†AtKO`ЙI†AtA†At:HOaT)HOGTTO€ O €ўO3 f0" D ЄBEO0OdSS&]F-[LOSOfOiЙ[„!,†At3†At 3†At8`3†AtA†At:^Ok)`&_Й[„!2†AtKOm&_Й_†At3†At †AtKOo&й Н†At€Й_†AtU†AtL3†AtA†At:^OpT)^OGTTO€ O €ўO3 f0" D ЄBEO0OsSS&cF-aLOSOvЙa†At3†At 3†At8e3†AtA†At:dOy)e&aЙa†At3†At †AtKO{&й Н†At€Йa†AtU†AtL3†AtA†At:dO|T)dOGTTO€ O €ўO3 f0" D ЄBEO0O€„SS&lF-j-h-fLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&n&й Н†At€ЙfІA“ 3†At$ЙfІA“ ЙfІA“ CBU†AtL3†At2†AtKO€&rЙfІA“ Йn†At 2†AtKO€Ž&o&й Н†At€ЙhІA“ 3†At$ЙhІA“ ЙhІA“ CBU†AtL3†At2†AtKO€&sЙhІA“ Йo†At 2†AtKO€’&q3†At€џџџЙs†At3†At 2†AtKO€•&tЙr†At3†At Йq†At,„!,†AtЙr†At3†At€џџ Йq†At,„!,†At3†At 2†AtKO€˜&rЙs†At,ˆЙt†At,ˆ3†At ,†At3†At †AtKO€›&tЙt†AtЙr†At3†At Йq†At,„!,†AtЙr†At3†At€џџ Йq†At,„!,†At3†At 2†AtKO€ž&p3†AtЙn†AtЙo†AtЙjІA“ 2†AtKO€ŸЙp†At3†At!8‚SO€ 3†At€€Йp†At 3†At€џџџЙp†At $Йt†At3†At€€Йp†At $3†At€€Йp†At Йt†At3†At€џџџЙp†At "3†At€џџџЙp†At Йt†AtCBCBЙt†At3†At€џџџЙp†At $3†At€џџџЙp†At Йt†At3†At€€Йp†At "3†At€€Йp†At Йt†AtCBCBCBЙp†At A†At:mO€ЁT:ˆ)‚SO€ЂЙp†At3†At "8‰SO€ЃЙt†AtЙp†At A†At:mO€ЄT:Š)‰SO€І3†AtA†At:mO€ЇT)ŠO€ЈT)ˆO€ЉT)mOGTTO€ O €ўO3 f0" D ЄBEO0O€АSS&F--‹LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&‘&й Н†At€Й‹ІA“ 3†At$Й‹ІA“ Й‹ІA“ CBU†AtL3†At2†AtKO€Й&”Й‹ІA“ Й‘†At 2†AtKO€М&“3†At€џџџЙ”†At3†At 2†AtKO€П&–Й“†At3†At 2†AtKO€Т&•Й”†At3†At Й“†At,„!,†AtЙ”†At3†At€џџ Й“†At,„!,†At3†At 3†At 2†AtKO€Х&–Й–†AtЙ•†At3†At Й“†At,„!,†AtЙ•†At3†At€џџ Й“†At,„!,†At3†At Й•†AtЙ“†At3†At 3†At3†At 2†AtKO€Ш&’3†At=Й‘†AtЙІA“ 2†AtKO€ЩЙ’†At3†At!8ЂSO€Ъ3†At€€Й’†At 3†At€џџџЙ’†At $Й–†At3†At€€Й’†At $3†At€€Й’†At Й–†At3†At€џџџЙ’†At "3†At€џџџЙ’†At Й–†AtCBCBЙ–†At3†At€џџџЙ’†At $3†At€џџџЙ’†At Й–†At3†At€€Й’†At "3†At€€Й’†At Й–†AtCBCBCBЙ’†At A†At:O€ЫT:Ј)ЂSO€ЬЙ’†At3†At "8ЉSO€ЭЙ–†AtЙ’†At A†At:O€ЮT:Њ)ЉSO€а3†AtA†At:O€бT)ЊO€вT)ЈO€гT)OGTTO€ O €ўO3 f0" D ЄBEO0O€рSS&­F-ЋLOSO€сO€ф&Ћ3†At€џџ†AtKO€чЙЋ†At3†At€€!8АSO€шЙЋ†At3†At€@"8БSO€ъ&Ћ3†At€@ЙЋ†At2†AtKO€ыT:В)БSO€э&Ћ3†At€@†AtKO€юT)ВO€яЙЋ†At3†At€L"8ГSO€ё3†At€ЙЋ†AtЙЋ†At3†At 3†At€CьџџЙЋ†AtЙЋ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЎO€ђTO€ѓ)Г&ЋЙЋ†At3†At 3†At ЙЋ†At,„!,†AtЙЋ†At3†At 3†At€џџ ЙЋ†At,„!,†At3†At 2†AtKO€є&Џ3†At€љ*ЙЋ†At3†At 3†At€kьџџЙЋ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Џ3†At€ЬфћЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€і&Џ3†At€*чџ?ЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€їT:Ш)АSO€јЙЋ†At3†At€Р"8ЩSO€њ&Ћ3†At€РЙЋ†At2†AtKO€ћT:Ъ)ЩSO€§&Ћ3†At€Р†AtKO€ўT)ЪO€џЙЋ†At3†At€L"8ЫSO€3†At€џЙЋ†AtЙЋ†At3†At 3†At€НЙЋ†AtЙЋ†At3†At€џџ 3†At€Н3†At A†At:ЎO€TO€)Ы&ЋЙЋ†At3†At 3†At ЙЋ†At,„!,†AtЙЋ†At3†At 3†At€џџ ЙЋ†At,„!,†At3†At 2†AtKO€&Џ3†At€еяџЙЋ†At3†At 3†At€•ЙЋ†At3†At€џџ 3†At€•3†At 2†AtKO€&Џ3†At€4яЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€&Џ3†At€РЙЋ†At3†At ЙЏ†At,„!,†AtЙЋ†At3†At€џџ ЙЏ†At,„!,†At3†At ЙЋ†AtЙЏ†At3†At 3†At3†At 2†AtKO€T)ШO€ЙЏ†At3†At 3†At3†At A†At:ЎO€ T)ЎOGTTO€ O €ўO3 f0" D ЄBEO0O€SS&тF-рLOSO€&­Н†At€Йр†At3†At€@U†AtLA†At:уO€T)уOGTTOПO€OОO OЖOOОO!OЕO OœOOœONSTM= :_MaxCount†u8_Str†€ Д Б_MaxCount†uЏ_Src†€ ж е д г в б а Я Ю Э Ь Ы Ъ Ш  Х in16„ Щ out32†t         н л к  з in32†t    b†ta†t   b„a„  b†t a†t  bˆaˆ  b†ta†t #  b„a„ ) &b†t$a†t / ,bˆ*aˆ 974 1inˆ 5in_upper†t  DCA >frac_Q7†€t<lz†€t:in†t BleadingZeros†t  NMLH Ex†t Iy†tJlz†!tKfrac_Q7†!t   `^ [a„ _a32†ted aa†t Љˆ‚m jQres†€hb32†€fa32†€ qb32_inv†tra32_nrm†tsb32_nrm†tna_headrm†ttresult†tplshift†tob_headrm†t    ЊЉЈЂ Qres†€‹b32†€ “b32_inv†t”b32_nrm†t•err_Q32†t–result†t’lshift†t‘b_headrm†t    ЫЪЩШГВБАЎ Ћx†t Џy_Q30†t        у рx†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ Љ х"ь"@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$glД .cil$in1.cil$exк'.cil$sy#.cil$db‹/485 1284597039 100666 16513 ` џџL/e‘L8ўГ ЅйЋMЌ›жЖ"&SТa@ /e‘L=?.drectveQ, .cil$fg}@@.cil$glо‹@@.cil$ini @@.cil$exщ+j @@.cil$sy^S6@@.cil$dbŒБ>@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_sum_sqr_shift.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_sum_sqr_shift.obj-FdRelease\vc100.pdb-errorreport:prompt†1j22€ovкV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sum_sqr_shift.cТiІц‚ЗЄьТўbвКŸciУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШ SKP_Silk_sum_sqr_shift‚€H€v'€#€h Лsize_tu intptr_tt ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO$O€ O €ўO3 f0" D ЄBEOœO-SS& F-ц-ф-т-рLOSO.O/O1Йф†CЎ ,†At3†At 3†At 8№SO3&эЙф†CЎ 3†A(0Є!­ ,„!,†AtЙф†CЎ 3†A(0Є!­ ,„!,†At2†AtKO4&щ3†At2†AtKO5T:ѕ)№SO6&э3†At2†AtKO7&щ3†At2†AtKO8T)ѕO9&ъ3†At2†AtKO:&ц3†At6†AtKO;:і)ї&щ3†At†AtK)іЙщ†AtЙц†At"8јSO=&ыЙф†CЎ Йщ†At3†A(,†Cє0†At2†AtKO>&эЙэ†AtЙы†At,„!,†AtЙы†At,„!,†At2†AtKO?&эЙэ†AtЙы†At3†At Йы†At3†At 2†AtKO@Йэ†At3†At"8ўSOB&эЙэ†At,†Bu3†At ,†At2†AtKOC&ъ3†At2†AtKOD:јOETOF)ўT:ї)јOG:)&щ3†At†AtK)Йщ†AtЙц†At"8SOI&ыЙф†CЎ Йщ†At3†A(,†Cє0†At2†AtKOJ&ьЙы†At,„!,†AtЙы†At,„!,†At2†AtKOK&ьЙь†AtЙы†At3†At Йы†At3†At 2†AtKOL&эЙэ†AtЙь†At,†BuЙъ†At ,†At2†AtKOMЙэ†At3†At"8 SOO&эЙэ†At,†Bu3†At ,†At2†AtKOP&ъ3†At†AtKOQTOR) T:)OSЙщ†AtЙц†At8SOU&ьЙф†CЎ Йщ†At3†A(0Є!­ ,„!,†AtЙф†CЎ Йщ†At3†A(0Є!­ ,„!,†At2†AtKOV&эЙэ†AtЙь†AtЙъ†At 2†AtKOWTOZ)Йэ†At3†Bu€Р 8SO[&эЙэ†At,†Bu3†At 2†AtKO\&ъ3†At†AtKO]TO`)Йт†CєЙъ†At2†AtKOaЙр†CєЙэ†At2†AtKObT)шOGTTOœOcM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t    ўј ї іѕ№ш цlen†tфx†€.тshift†€tрenergy†€t эnrg†tъshft†tщi†tыin32†tьnrg_tmp†t          ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ Љ ­ Ў Ш @comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glо.cil$in.cil$exщ+.cil$sy^.cil$dbŒ /520 1284597038 100666 20283 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТO .e‘LїM.drectveQ, .cil$fgќ}@@.cil$glГy@@.cil$in, @@.cil$exќ6- @@.cil$sy= )B@@.cil$db‘fM@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_sort.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_sort.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2L2€ovЏV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sort.cХg‡єПРXXeƒЪкв'У SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШ{SKP_Silk_insertion_sort_increasing‚€5€v'€#€h„SKP_Silk_insertion_sort_decreasing‚€5€и+€K€hSKP_Silk_insertion_sort_decreasing_int16‚€A€:0€s €h’SKP_Silk_insertion_sort_increasing_all_values‚€€#5€› bh Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO#O€ O €ўO3 f0" D ЄBEOœO+SS&{F-ц-ф-т-рLOSO,O-O03‚KO13‚KO23‚KO5&ъ3†At2†AtK:я)№&ъ3†At5†AtK)яЙъ†AtЙцІA“ "8ёSO6Йт†CєЙъ†At3†A(Йъ†At2†AtKO7T:№)ёO:&ъ3†At2†AtK:ђ)ѓ&ъ3†At5†AtK)ђЙъ†AtЙцІA“ "8єSO;&щЙр†CєЙъ†At3†A(0†At2†AtKO<&ыЙъ†At3†At2†AtK:ѕ)і&ы3†At6†AtK)ѕЙы†At3†At#8їЙщ†AtЙр†CєЙы†At3†A(0†At"8їSO=Йр†CєЙы†At3†At3†A(Йр†CєЙы†At3†A(0†At2†AtKO>Йт†CєЙы†At3†At3†A(Йт†CєЙы†At3†A(0†At2†AtKO?T:і)їO@Йр†CєЙы†At3†At3†A(Йщ†At2†AtKOAЙт†CєЙы†At3†At3†A(Йъ†At2†AtKOBT:ѓ)єOF&ъЙцІA“ 2†AtK:ј)љ&ъ3†At5†AtK)јЙъ†AtЙфІA“ "8њSOG&щЙр†CєЙъ†At3†A(0†At2†AtKOHЙщ†AtЙр†CєЙцІA“ 3†At3†A(0†At"8ћSOI&ыЙцІA“ 3†At2†AtK:ќ)§&ы3†At6†AtK)ќЙы†At3†At#8ўЙщ†AtЙр†CєЙы†At3†A(0†At"8ўSOJЙр†CєЙы†At3†At3†A(Йр†CєЙы†At3†A(0†At2†AtKOKЙт†CєЙы†At3†At3†A(Йт†CєЙы†At3†A(0†At2†AtKOLT:§)ўOMЙр†CєЙы†At3†At3†A(Йщ†At2†AtKONЙт†CєЙы†At3†At3†A(Йъ†At2†AtKOOTOP)ћT:љ)њOQT)шOGTTO€ O €ўO3 f0" D ЄBEOœOYSS&„F----џLOSOZO[O^3‚KO_3‚KO`3‚KOc& 3†At2†AtK:)& 3†At5†AtK)Й †AtЙІA“ "8SOdЙ†CєЙ †At3†A(Й †At2†AtKOeT:)Oh& 3†At2†AtK:)& 3†At5†AtK)Й †AtЙІA“ "8SOi&Йџ†CєЙ †At3†A(0†At2†AtKOj& Й †At3†At2†AtK:)& 3†At6†AtK)Й †At3†At#8Й†AtЙџ†CєЙ †At3†A(0†At$8SOkЙџ†CєЙ †At3†At3†A(Йџ†CєЙ †At3†A(0†At2†AtKOlЙ†CєЙ †At3†At3†A(Й†CєЙ †At3†A(0†At2†AtKOmT:)OnЙџ†CєЙ †At3†At3†A(Й†At2†AtKOoЙ†CєЙ †At3†At3†A(Й †At2†AtKOpT:)Ot& ЙІA“ 2†AtK:)& 3†At5†AtK)Й †AtЙІA“ "8SOu&Йџ†CєЙ †At3†A(0†At2†AtKOvЙ†AtЙџ†CєЙІA“ 3†At3†A(0†At$8SOw& ЙІA“ 3†At2†AtK:)& 3†At6†AtK)Й †At3†At#8Й†AtЙџ†CєЙ †At3†A(0†At$8SOxЙџ†CєЙ †At3†At3†A(Йџ†CєЙ †At3†A(0†At2†AtKOyЙ†CєЙ †At3†At3†A(Й†CєЙ †At3†A(0†At2†AtKOzT:)O{Йџ†CєЙ †At3†At3†A(Й†At2†AtKO|Й†CєЙ †At3†At3†A(Й †At2†AtKO}TO~)T:)OT)OGTTO€ O €ўO3 f0" D ЄBEOœO€‡SS&F-$-"- -LOSO€ˆO€‰O€Œ3‚KO€3‚KO€Ž3‚KO€‘&'3†At2†AtK:-).&'3†At5†AtK)-Й'†AtЙ$ІA“ "8/SO€’Й †CєЙ'†At3†A(Й'†At2†AtKO€“T:.)/O€–&'3†At2†AtK:0)1&'3†At5†AtK)0Й'†AtЙ$ІA“ "82SO€—&)Й†C‘Й'†At3†A(0„!2†AtKO€˜&(Й'†At3†At2†AtK:3)4&(3†At6†AtK)3Й(†At3†At#85Й)†AtЙ†C‘Й(†At3†A(0„!,†At$85SO€™Й†C‘Й(†At3†At3†A(Й†C‘Й(†At3†A(0„!2„!KO€šЙ †CєЙ(†At3†At3†A(Й †CєЙ(†At3†A(0†At2†AtKO€›T:4)5O€œЙ†C‘Й(†At3†At3†A(Й)†At2„!KO€Й †CєЙ(†At3†At3†A(Й'†At2†AtKO€žT:1)2O€Ђ&'Й$ІA“ 2†AtK:6)7&'3†At5†AtK)6Й'†AtЙ"ІA“ "88SO€Ѓ&)Й†C‘Й'†At3†A(0„!2†AtKO€ЄЙ)†AtЙ†C‘Й$ІA“ 3†At3†A(0„!,†At$89SO€Ѕ&(Й$ІA“ 3†At2†AtK::);&(3†At6†AtK):Й(†At3†At#8<Й)†AtЙ†C‘Й(†At3†A(0„!,†At$8<SO€ІЙ†C‘Й(†At3†At3†A(Й†C‘Й(†At3†A(0„!2„!KO€ЇЙ †CєЙ(†At3†At3†A(Й †CєЙ(†At3†A(0†At2†AtKO€ЈT:;)<O€ЉЙ†C‘Й(†At3†At3†A(Й)†At2„!KO€ЊЙ †CєЙ(†At3†At3†A(Й'†At2†AtKO€ЋTO€Ќ)9T:7)8O€­T)&OGTTO€ O €ўO3 f0" D ЄBEOœO€ГSS&’F-?-=LOSO€ДO€ЕO€И3‚KO€Л&C3†At2†AtK:F)G&C3†At5†AtK)FЙC†AtЙ?ІA“ "8HSO€М&BЙ=†CєЙC†At3†A(0†At2†AtKO€Н&DЙC†At3†At2†AtK:I)J&D3†At6†AtK)IЙD†At3†At#8KЙB†AtЙ=†CєЙD†At3†A(0†At"8KSO€ОЙ=†CєЙD†At3†At3†A(Й=†CєЙD†At3†A(0†At2†AtKO€ПT:J)KO€РЙ=†CєЙD†At3†At3†A(ЙB†At2†AtKO€СT:G)HO€ТT)AOGTTOœO€ФM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t ў § ќћњ љ јї і ѕє ѓ ђё № яш цK†€фL†€тindex†€tрa†€t щvalue†tъi†tыj†t                 K†€L†€index†€tџa†€t value†t i†t j†t      < ; :98 7 65 4 32 1 0/ . -& $K†€"L†€ index†€ta†€ )value†t'i†t(j†t      K J IH G FA ?L†€=a†€t Bvalue†tCi†tDj†t    ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ – Љ Е$С$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fgќ.cil$glГ.cil$in.cil$exќ6.cil$sy= .cil$db‘ /546 1284597038 100666 23433 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТi[ .e‘LEZ.drectveQ, .cil$fg }@@.cil$gl ‰@@.cil$in@@.cil$ex|=@@.cil$syќ “L@@.cil$dbЖY@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_solve_LS_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_solve_LS_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2+2€ov‰ V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_solve_ls_fix.c‹ NяХюП/=Уо ВаФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ %SKP_max_32†€€ѓ€{Ш=SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ŒSKP_INVERSE32_varQ†€;€"€•€еШж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШ+SKP_Silk_solve_LDL_FIX‚€ѕ€(€#?hT]fmTSKP_Silk_LDL_factorize_FIX‚€Ч€Ю)€м€їШ%ŒmSKP_Silk_LS_divide_Q16_FIX‚€Я€6€W mШ]SKP_Silk_LS_SolveFirst_FIX‚€Ь€ќ7€$ €’ШfSKP_Silk_LS_SolveLast_FIX‚€в€„:€ €ЈШ Hinv_D_t€Ъ Кsize_tu ЃSA_AttrTarget€)АSA_Parameter€)† strnlen†€ЎSA_Method€)†@ Лwchar_t!€ wcsnlen†€ Kinv_D_t€Ъ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOO€ O €ўO3 f0" D ЄBEOœOLSS&+F-t-r-p-nLOSOMONOOOQ3‚KOW&TН‚€Ш&yU†CХ%&wU†CєЙp†AtU†AtЙn†CєU†CєLKO]&]Н‚€Э&xU†CєЙr†C” U†C” Йp†AtU†At&wU†C” LKOc&mН‚€аЙp†AtU†At&yU†CХ%&xU†CєLKOh&fН‚€гЙt†CєU†Cє&xU†C” Йp†AtUІA“ &wU†C” LKOiT)vOGTTO€ O €ўO3 f0" D ЄBEOœOqSS&TF---}-{LOSOrOsOtOuOvOx3‚KOz&‡3†At2†AtKO{&‹&%Н†At€ 3†At€U†AtЙ{†Cє3†A(0†AtЙ{†CєЙ}†At,„!,†AtЙ}†At,„!,†At3†At3†A(0†At3†Bu€€ 3†AtЙ{†Cє3†A(0†AtЙ{†CєЙ}†At,„!,†AtЙ}†At,„!,†At3†At3†A(0†At 3†Bu€€ 3†At 3†At€€Й{†Cє3†A(0†AtЙ{†CєЙ}†At,„!,†AtЙ}†At,„!,†At3†At3†A(0†AtCBЙ{†Cє3†A(0†AtЙ{†CєЙ}†At,„!,†AtЙ}†At,„!,†At3†At3†A(0†At 3†Bu€€ 3†At3†At€џџџЙ{†Cє3†A(0†AtЙ{†CєЙ}†At,„!,†AtЙ}†At,„!,†At3†At3†A(0†AtCBCB,ˆ3ˆ€уS3†At ,†AtU†AtL2†AtKO|&ˆ3†At2†AtK:Ћ)Ќ&ˆ3†At5†AtK)ЋЙˆ†AtЙ}†At"8­Й‡†At3†At8­SO}&‡3†At2†AtKO~&…3†At2†AtK:Ў)Џ&…3†At5†AtK)ЎЙ…†AtЙ}†At"8АSO&‰Й†CєЙ…†AtЙ}†At3†At3†A2†C” KO€€&Œ3†At2†AtKO€&„3†At2†AtK:Б)В&„3†At5†AtK)БЙ„†AtЙ…†At"8ГSO€‚&ŽЙ„†At3†A(&Й„†At3†A(0†At3†At Й‰†C” Й„†At3†A(0ІA“ ,„!,†At&Й„†At3†A(0†At3†At€џџ Й‰†C” Й„†At3†A(0ІA“ ,„!,†At3†At &Й„†At3†A(0†AtЙ‰†C” Й„†At3†A(0ІA“ 3†At 3†At3†At 2†AtKO€ƒ&ŒЙŒ†At&ŽЙ„†At3†A(0†At3†At Й‰†C” Й„†At3†A(0ІA“ ,„!,†At&ŽЙ„†At3†A(0†At3†At€џџ Й‰†C” Й„†At3†A(0ІA“ ,„!,†At3†At &ŽЙ„†At3†A(0†AtЙ‰†C” Й„†At3†A(0ІA“ 3†At 3†At3†At 2†AtKO€„T:В)ГO€…&ŒЙ{†CєЙ…†AtЙ}†AtЙ…†At3†A0†AtЙŒ†At2†AtKO€‡ЙŒ†AtЙ‹†At"8МSO€ˆ&ŒЙˆ†At3†At,„!,†AtЙ‹†At,„!,†AtЙŒ†At2†AtKO€Š&„3†At2†AtK:С)Т&„3†At5†AtK)СЙ„†AtЙ}†At"8УSO€‹Й{†CєЙ„†AtЙ}†AtЙ„†At3†AЙ{†CєЙ„†AtЙ}†AtЙ„†At3†A0†AtЙŒ†At2†AtKO€ŒT:Т)УO€&‡3†At2†AtKO€Ž:АO€TO€)М&Й…†At3†A(ЙŒ†At2†AtKO€“&&ŒН†At€<3†At$UІA“ ЙŒ†AtUІA“ L2†AtKO€”&‘Й†At3†At 2†AtKO€•&3†At€ЙŒ†At3†At Й‘†At,„!,†AtЙŒ†At3†At€џџ Й‘†At,„!,†At3†At ЙŒ†AtЙ‘†At3†At 3†At3†At 2†AtKO€–&’Й†At3†At Й‘†At,„!,†AtЙ†At3†At€џџ Й‘†At,„!,†At3†At Й†AtЙ‘†At3†At 3†At3†At 2†AtKO€™Й†CХ%Й…†At3†A(3†At'†CєЙ†At2†AtKO€šЙ†CХ%Й…†At3†A(3†At'†CєЙ’†At2†AtKO€œЙ†CєЙ…†AtЙ}†AtЙ…†At3†A3†At€2†AtKO€&‰Й{†CєЙ…†AtЙ}†At3†At3†A2†C” KO€ž&ŠЙ†CєЙ…†At3†AtЙ}†At3†At3†A2†C” KO€Ÿ&„Й…†At3†At2†AtK:Ь)Э&„3†At5†AtK)ЬЙ„†AtЙ}†At"8ЮSO€ &Œ3†At2†AtKO€Ё&†3†At2†AtK:Я)а&†3†At5†AtK)ЯЙ††AtЙ…†At"8бSO€Ђ&ŒЙŒ†At&ŽЙ††At3†A(0†At3†At ЙŠ†C” Й††At3†A(0ІA“ ,„!,†At&ŽЙ††At3†A(0†At3†At€џџ ЙŠ†C” Й††At3†A(0ІA“ ,„!,†At3†At &ŽЙ††At3†A(0†AtЙŠ†C” Й††At3†A(0ІA“ 3†At 3†At3†At 2†AtKO€ЃT:а)бO€Є&ŒЙ‰†C” Й„†At3†A(0ІA“ ЙŒ†At2†AtKO€ЇO€ЈЙ†CєЙ„†AtЙ}†AtЙ…†At3†AЙŒ†At,ˆЙ’†At,ˆ3†At ,†AtЙŒ†At3†At Й†At,„!,†AtЙŒ†At3†At€џџ Й†At,„!,†At3†At ЙŒ†AtЙ†At3†At 3†At3†At 3†At 2†AtKO€Ћ&ŠЙ}†At3†A†C” KO€ЌT:Э)ЮO€­T:Џ)АO€ЎT:Ќ)­O€А3‚KO€БT)ƒOGTTO€ O €ўO3 f0" D ЄBEOœO€ИSS&mF-с-п-нLOSO€ЙO€КO€ЛO€Н&ф3†At2†AtK:ш)щ&ф3†At5†AtK)шЙф†AtЙс†At"8ъSO€О&цЙп†CХ%Йф†At3†A(3†At'†Cє0†At2†AtKO€П&чЙп†CХ%Йф†At3†A(3†At'†Cє0†At2†AtKO€С&хЙн†CєЙф†At3†A(0†At2†AtKO€ТЙн†CєЙф†At3†A(Йх†At,ˆЙч†At,ˆ3†At ,†AtЙх†At3†At Йц†At,„!,†AtЙх†At3†At€џџ Йц†At,„!,†At3†At Йх†AtЙц†At3†At 3†At3†At 3†At 2†AtKO€УT:щ)ъO€ФT)уOGTTO€ O €ўO3 f0" D ЄBEOœO€ЭSS&]F-ї-ѕ-ѓ-ёLOSO€ЮO€ЯO€аO€в&њ3†At2†AtK:ў)џ&њ3†At5†AtK)ўЙњ†AtЙѓ†At"8SO€г&ќЙё†C” Йњ†AtЙѓ†At3†At3†A2†C” KO€д&§3†At2†AtKO€е&ћ3†At2†AtK:)&ћ3†At5†AtK)Йћ†AtЙњ†At"8SO€ж&§Й§†AtЙќ†C” Йћ†At3†A(0ІA“ 3†At Йї†CєЙћ†At3†A(0†At,„!,†AtЙќ†C” Йћ†At3†A(0ІA“ 3†At€џџ Йї†CєЙћ†At3†A(0†At,„!,†At3†At Йќ†C” Йћ†At3†A(0ІA“ Йї†CєЙћ†At3†A(0†At3†At 3†At3†At 2†AtKO€зT:)O€иЙї†CєЙњ†At3†A(Йѕ†C” Йњ†At3†A(0ІA“ Й§†At2†AtKO€йT:џ)O€кT)љOGTTO€ O €ўO3 f0" D ЄBEOœO€уSS&fF-- - -LOSO€фO€хO€цO€ш&Й ІA“ 3†At2†AtK:)&3†At6†AtK)Й†At3†At#8SO€щ&Й†C” 3†AtЙ ІA“ Й†At3†A2†C” KO€ъ&3†At2†AtKO€ы&Й ІA“ 3†At2†AtK:)&3†At6†AtK)Й†AtЙ†At$8SO€ь&Й†AtЙ†C” Й†At,„!,†AtЙ ІA“ ,„!,†At3†A(0ІA“ 3†At Й†CєЙ†At3†A(0†At,„!,†AtЙ†C” Й†At,„!,†AtЙ ІA“ ,„!,†At3†A(0ІA“ 3†At€џџ Й†CєЙ†At3†A(0†At,„!,†At3†At Й†C” Й†At,„!,†AtЙ ІA“ ,„!,†At3†A(0ІA“ Й†CєЙ†At3†A(0†At3†At 3†At3†At 2†AtKO€эT:)O€юЙ†CєЙ†At3†A(Й †C” Й†At3†A(0ІA“ Й†At2†AtKO€яT:)O€№T)OGTTOœO€ёM   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t v tx_Q16†€trb†€pM†tnA†€t wL_Q16†€Ё€OxY†@Ё€Pyinv_D†€€Ё€дб а ЯЮ Э ЬУ Т СМГ В БА Џ Ў­ Ќ Ћƒ inv_D†€ХL_Q16†€t}M†t{A†€t „i†tD_Q0†@€PŒtmp_32†tŽv_Q0†@€P‹diag_min_value†t‰ptr1†€’one_div_diag_Q48†t‘one_div_diag_Q40†t†k†tone_div_diag_Q36†t‡status†terr†tŠptr2†€ˆloop_count†t…j†t       ъ щ шу сM†tпinv_D†€ХнT†€t фi†tхtmp_32†tчone_div_diag_Q48†tцone_div_diag_Q36†t    џ ўљ їx_Q16†€tѕb†€ѓM†tёL_Q16†€ њi†t§tmp_32†tќptr32†€ћj†t       x_Q16†€t b†€ M†€L_Q16†€ i†ttmp_32†tptr32†€j†t    ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёФ%Ъ%%!tuєƒ ˆ ‹ Œ Ž  ‘ “ ” Ÿ   Љ а ѕ#Л$М$Я$Ф%Х%Ч%Ш%Ъ%Ь%Э%Я%а%в%г%д%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$gl .cil$in.cil$ex|=.cil$syќ .cil$dbЖ /580 1284597038 100666 15894 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТі= .e‘Lв<.drectveQ, .cil$fg}@@.cil$gl@@@.cil$inС @@.cil$exc)Q @@.cil$sy”Д4@@.cil$dbŠH<@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_sigm_Q15.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_sigm_Q15.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2ѕ2€ov<V €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigm_q15.cХщ2БћєM=Ъ™VZk У SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШћ SKP_Silk_sigm_Q15†€€v'€#rhрстт$sigm_LUT_neg_Q15†€€Ур$sigm_LUT_slope_Q10†€€У Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@с$sigm_LUT_pos_Q15†€€У Мwchar_t!Њwcsnlen†€ р€э€™I с€@€“]€Нp€эy€В}€$т€@€l"€B€€M€л[€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO$O€ O €ўO3 f0" D ЄBEOœO6SS&ћ F-уLOSO7O9Йу†At3†At"8чSO;&уЙу†At2†AtKO<Йу†At3†At€Р#8шSO=3†AtA†At:хO>T:щ)шSO@&цЙу†At3†At 2†AtKOA&тЙц†At3†A(0ІA“ &рЙц†At3†A(0ІA“ ,„!,†AtЙу†At3†At ,„!,†AtA†At:хOBT)щOCT:ю)чSOEЙу†At3†At€Р#8яSOF3†At€џA†At:хOGT:№)яSOI&цЙу†At3†At 2†AtKOJ&сЙц†At3†A(0ІA“ &рЙц†At3†A(0ІA“ ,„!,†AtЙу†At3†At ,„!,†AtA†At:хOKT)№OLT)юOMT)хOGTTOœOOM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t №яющшчх уin_Q5†t цind†t        ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ Љ У%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl@.cil$in.cil$exc).cil$sy”.cil$dbŠ/610 1284597038 100666 21634 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТbT .e‘L>S.drectveQ, .cil$fg }@@.cil$gl‡ ‡@@.cil$in@@.cil$exў7@@.cil$syn H@@.cil$dbУ{R@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_shell_coder.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_shell_coder.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2…2€ovƒ V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_shell_coder.c/4z4ћя‹F+_ХЛ­Ф SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШNcombine_pulses‚€1€(€#;Ш\encode_split‚€И€‘)€Ÿ.Шхjdecode_split‚€М€w*€4RШх$SKP_Silk_shell_encoder‚€м€ћ+€ €EhстуфN\ SKP_Silk_shell_decoder‚€‚€Ч1€М €HhстуфjSKP_Silk_range_encoder‚€Ё$SKP_Silk_range_decoder‚€Є SKP_Silk_range_coder_state€ž SKP_Silk_range_coder_state€ž Мsize_tuхSKP_Silk_shell_code_table_offsets„&€О ЃSA_AttrTarget€)АSA_Parameter€)†фSKP_Silk_shell_code_table3„€ž!€П4strnlen†€ЎSA_Method€)†@сSKP_Silk_shell_code_table0„B!€Р Нwchar_t!Ћwcsnlen†€тSKP_Silk_shell_code_table1„h!€СуSKP_Silk_shell_code_table2„€Ь!€Т [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœOO€ O €ўO3 f0" D ЄBEOœO%SS&NF-L-J-HLOSO&O'&P3†At2†AtK:Q)R&P3†At5†AtK)QЙP†AtЙLІA“ "8SSO(ЙH†CєЙP†At3†A(ЙJ†C” 3†AtЙP†At3†A(0ІA“ ЙJ†C” 3†AtЙP†At3†At3†A(0ІA“ 2†AtKO)T:R)SO*T)OOGTTO€ O €ўO3 f0" D ЄBEOœO2SS&\F-Z-X-V-TLOSO3O5ЙXІA“ 3†At$8_SO6&^ЙZ†C’!&хЙXІA“ 3†A(0Є"‘!,†At3†A(2†C’!KO7&Н‚€ЂЙ^†C’!U†C’!ЙVІA“ UІA“ ЙT†CŸ!U†CŸ!LKO8TO9)_T)]OGTTO€ O €ўO3 f0" D ЄBEOœOBSS&jF-h-f-d-b-`LOSOCODOFЙfІA“ 3†At$8nSOG&lЙfІA“ 3†At 2†AtKOH&mЙh†C’!&хЙfІA“ 3†A(0Є"‘!,†At3†A(2†C’!KOI&$Н‚€ЅЙl†AtU†AtЙm†C’!U†C’!Йd†CŸ!U†CŸ!Й`†CєU†CєLKOJЙb†Cє3†A(ЙfІA“ Й`†Cє3†A(0†At2†AtKOKT:o)nSOLЙ`†Cє3†A(3†At2†AtKOMЙb†Cє3†A(3†At2†AtKONT)oOOT)kOGTTO€ O €ўO3 f0" D ЄBEOœOVSS&F-r-pLOSOWOZ3‚KO]&NН‚€K3†AtUІA“ Йr†C” U†C” &uU†CєLKO^&NН‚€K3†AtUІA“ &uU†C” &vU†CєLKO_&NН‚€K3†AtUІA“ &vU†C” &wU†CєLKO`&NН‚€K3†AtUІA“ &wU†C” &xU†CєLKOb&\Н‚€Й&фU†C’!&x3†A(0†AtUІA“ &w3†A(0†AtUІA“ Йp†CŸ!U†CŸ!LKOd&\Н‚€Й&уU†C’!&w3†A(0†AtUІA“ &v3†A(0†AtUІA“ Йp†CŸ!U†CŸ!LKOf&\Н‚€Й&тU†C’!&v3†A(0†AtUІA“ &u3†A(0†AtUІA“ Йp†CŸ!U†CŸ!LKOg&\Н‚€Й&сU†C’!&u3†A(0†AtUІA“ Йr†C” 3†A(0ІA“ UІA“ Йp†CŸ!U†CŸ!LKOh&\Н‚€Й&сU†C’!&u3†A(0†AtUІA“ Йr†C” 3†A(0ІA“ UІA“ Йp†CŸ!U†CŸ!LKOj&\Н‚€Й&тU†C’!&v3†A(0†AtUІA“ &u3†A(0†AtUІA“ Йp†CŸ!U†CŸ!LKOk&\Н‚€Й&сU†C’!&u3†A(0†AtUІA“ Йr†C” 3†A(0ІA“ UІA“ Йp†CŸ!U†CŸ!LKOl&\Н‚€Й&сU†C’!&u3†A (0†AtUІA“ Йr†C” 3†A(0ІA“ UІA“ Йp†CŸ!U†CŸ!LKOn&\Н‚€Й&уU†C’!&w3†A(0†AtUІA“ &v3†A(0†AtUІA“ Йp†CŸ!U†CŸ!LKOp&\Н‚€Й&тU†C’!&v3†A(0†AtUІA“ &u3†A(0†AtUІA“ Йp†CŸ!U†CŸ!LKOq&\Н‚€Й&сU†C’!&u3†A(0†AtUІA“ Йr†C” 3†A (0ІA“ UІA“ Йp†CŸ!U†CŸ!LKOr&\Н‚€Й&сU†C’!&u3†A(0†AtUІA“ Йr†C” 3†A((0ІA“ UІA“ Йp†CŸ!U†CŸ!LKOt&\Н‚€Й&тU†C’!&v3†A (0†AtUІA“ &u3†A(0†AtUІA“ Йp†CŸ!U†CŸ!LKOu&\Н‚€Й&сU†C’!&u3†A(0†AtUІA“ Йr†C” 3†A0(0ІA“ UІA“ Йp†CŸ!U†CŸ!LKOv&\Н‚€Й&сU†C’!&u3†A(0†AtUІA“ Йr†C” 3†A8(0ІA“ UІA“ Йp†CŸ!U†CŸ!LKOwT)tOGTTO€ O €ўO3 f0" D ЄBEOœO€€SS& F-~-|-zLOSO€O€„3‚KO€†&jН‚€Н&фU†C’!Й~ІA“ UІA“ Й|†CŸ!U†CŸ!&3†A(U†Cє&3†A(U†CєLKO€ˆ&jН‚€Н&уU†C’!&3†A(0†AtUІA“ Й|†CŸ!U†CŸ!&‚3†A(U†Cє&‚3†A(U†CєLKO€Š&jН‚€Н&тU†C’!&‚3†A(0†AtUІA“ Й|†CŸ!U†CŸ!&ƒ3†A(U†Cє&ƒ3†A(U†CєLKO€‹&jН‚€Н&сU†C’!&ƒ3†A(0†AtUІA“ Й|†CŸ!U†CŸ!Йz†Cє3†A(U†CєЙz†Cє3†A(U†CєLKO€Œ&jН‚€Н&сU†C’!&ƒ3†A(0†AtUІA“ Й|†CŸ!U†CŸ!Йz†Cє3†A (U†CєЙz†Cє3†A(U†CєLKO€Ž&jН‚€Н&тU†C’!&‚3†A(0†AtUІA“ Й|†CŸ!U†CŸ!&ƒ3†A (U†Cє&ƒ3†A(U†CєLKO€&jН‚€Н&сU†C’!&ƒ3†A(0†AtUІA“ Й|†CŸ!U†CŸ!Йz†Cє3†A(U†CєЙz†Cє3†A(U†CєLKO€&jН‚€Н&сU†C’!&ƒ3†A (0†AtUІA“ Й|†CŸ!U†CŸ!Йz†Cє3†A(U†CєЙz†Cє3†A(U†CєLKO€’&jН‚€Н&уU†C’!&3†A(0†AtUІA“ Й|†CŸ!U†CŸ!&‚3†A (U†Cє&‚3†A(U†CєLKO€”&jН‚€Н&тU†C’!&‚3†A(0†AtUІA“ Й|†CŸ!U†CŸ!&ƒ3†A(U†Cє&ƒ3†A(U†CєLKO€•&jН‚€Н&сU†C’!&ƒ3†A(0†AtUІA“ Й|†CŸ!U†CŸ!Йz†Cє3†A$(U†CєЙz†Cє3†A (U†CєLKO€–&jН‚€Н&сU†C’!&ƒ3†A(0†AtUІA“ Й|†CŸ!U†CŸ!Йz†Cє3†A,(U†CєЙz†Cє3†A((U†CєLKO€˜&jН‚€Н&тU†C’!&‚3†A (0†AtUІA“ Й|†CŸ!U†CŸ!&ƒ3†A(U†Cє&ƒ3†A(U†CєLKO€™&jН‚€Н&сU†C’!&ƒ3†A(0†AtUІA“ Й|†CŸ!U†CŸ!Йz†Cє3†A4(U†CєЙz†Cє3†A0(U†CєLKO€š&jН‚€Н&сU†C’!&ƒ3†A(0†AtUІA“ Й|†CŸ!U†CŸ!Йz†Cє3†A<(U†CєЙz†Cє3†A8(U†CєLKO€›T)€OGTTOœO€œM: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t S R QO Llen†€Jin†€Hout†€t Pk†t _] Zshell_table†€’Xp†€Vp_child1†€TsRC†€Ÿ ^cdf†€’ onk hshell_table†€’fp†€dsRC†€Ÿbp_child2†€t`p_child1†€t mcdf†€’lcdf_middle†t  t rpulses0†€psRC†€Ÿ vpulses2†Ё€cupulses1† Ё€пxpulses4†!€Кwpulses3†!€\€ ~pulses4†€|sRC†€Ÿzpulses0†€t ‚pulses2†Ё€cƒpulses1† Ё€пpulses3†!€\  ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёз ž!+!tuєƒ ˆ ‹ Œ Ž  ‘ “ ” Љ з м у ‘!’!ž!Ÿ!Ё!Ђ!Є!Ѕ!‚#м#п#Б$Ы$И%Й%К%М%Н%О%П%Р%С%Т%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$gl‡ .cil$in.cil$exў7.cil$syn .cil$dbУ/643 1284597038 100666 16355 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТУ? .e‘LŸ>.drectveQ, .cil$fg}@@.cil$glћ@@.cil$inz @@.cil$ex8+{ @@.cil$syVГ5@@.cil$db– >@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_schur64.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_schur64.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2ќ2€ovїV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_schur64.cay 09ФпЕ.ЄРv!У SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше hSKP_DIV32_varQ†€M€ €y€щШе ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШSKP_Silk_schur64†€X€v'€#€№hh Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO%O€ O €ўO3 f0" D ЄBEOœO.SS&F-ф-т-рLOSO/O0O1O4Йт†C” 3†A(0ІA“ 3†At!8эSO53†At€­@†CƒЙф†At3†BuU†Bu3†AtU†AtЙр†CєU†CƒLKO63†AtA†At:цO7TO9)э&ч3†At2†AtK:я)№&ч3†At5†AtK)яЙч†AtЙф†At3†At"8ёSO:&щЙч†At3†A(3†A(&щЙч†At3†A(3†A(Йт†C” Йч†At3†A(0ІA“ 2†At2†AtKO;T:№)ёO=&ч3†At2†AtK:ђ)ѓ&ч3†At5†AtK)ђЙч†AtЙф†At"8єSO?&ь&hН†At€N3†AtUІA“ &щ3†A(0†AtUІA“ &щЙч†At3†At3†A(3†A(0†AtUІA“ L2†AtKOBЙр†CєЙч†At3†A(Йь†At3†At 3†At3†At 2†AtKOE&ш3†At2†AtK:ѕ)і&ш3†At5†AtK)ѕЙш†AtЙф†AtЙч†At"8їSOF&ъ&щЙш†AtЙч†At3†At3†A(3†A(0†At2†AtKOG&ы&щЙш†At3†A(3†A(0†At2†AtKOJ&щЙш†AtЙч†At3†At3†A(3†A(Йъ†AtЙы†At3†At ,ˆЙь†At,ˆ3†At ,†At2†AtKOK&щЙш†At3†A(3†A(Йы†AtЙъ†At3†At ,ˆЙь†At,ˆ3†At ,†At2†AtKOLT:і)їOMT:ѓ)єOO&щ3†A(0†AtA†At:цOPT)цOGTTOœOQM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t ї і ѕє ѓ ђё № яэц фorder†tтc†€рrc_Q16†€t ыCtmp2_Q30†tъCtmp1_Q30†tшn†tщC†€ˆЁ€Жчk†tьrc_tmp_Q31†t      ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuƒєƒ ˆ ‹ Œ Ž  ‘ “ ” Љ Э Ю и$Ж%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glћ.cil$in.cil$ex8+.cil$syV.cil$db– /672 1284597038 100666 16918 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТіA .e‘Lв@.drectveQ, .cil$fgў}@@.cil$glё{@@.cil$inl @@.cil$ex-m @@.cil$syДŠ7@@.cil$db”>@@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_schur.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_schur.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2 2€ovэV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_schur.c€9Oаg5‘•E˜ЭЅЭУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ $SKP_max_32†€€я€{Ш<SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШSKP_Silk_schur‚€‚€v'€#€shе $ Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO$O€ O €ўO3 f0" D ЄBEOœO-SS&F-ф-т-рLOSO.O/O0O3&щ&е Н†At€Йт†C” 3†A(0ІA“ U†AtL2†AtKO6Йщ†At3†At"8юSO8&ч3†At2†AtK:я)№&ч3†At5†AtK)яЙч†AtЙфІA“ 3†At"8ёSO9&ъЙч†At3†A(3†A(&ъЙч†At3†A(3†A(Йт†C” Йч†At3†A(0ІA“ 3†At 2†At2†AtKO:T:№)ёO;T:ђ)юЙщ†At3†At$8ѓSO=&щ3†At†AtKO>&ч3†At2†AtK:є)ѕ&ч3†At5†AtK)єЙч†AtЙфІA“ 3†At"8іSO?&ъЙч†At3†A(3†A(&ъЙч†At3†A(3†A(Йт†C” Йч†At3†A(0ІA“ Йщ†At 2†At2†AtKO@T:ѕ)іOAT:ї)ѓSOC&ч3†At2†AtK:ј)љ&ч3†At5†AtK)јЙч†AtЙфІA“ 3†At"8њSOD&ъЙч†At3†A(3†A(&ъЙч†At3†A(3†A(Йт†C” Йч†At3†A(0ІA“ 2†At2†AtKOET:љ)њOFT)ї)ђOH&ч3†At2†AtK:ћ)ќ&ч3†At5†AtK)ћЙч†AtЙфІA“ "8§SOK&э&ъЙч†At3†At3†A(3†A(0†At&$Н†At€ 3†AtU†At&ъ3†A(0†At3†At U†AtL2†AtKON&эЙэ†At3†At€џ$3†At€џЙэ†At3†At€€џџ"3†At€€џџЙэ†AtCBCB2†AtKOQЙр†C‘Йч†At3†A(Йэ†At,„!2„!KOT&ш3†At2†AtK:)&ш3†At5†AtK)Йш†AtЙфІA“ Йч†At"8SOU&ы&ъЙш†AtЙч†At3†At3†A(3†A(0†At2†AtKOV&ь&ъЙш†At3†A(3†A(0†At2†AtKOW&ъЙш†AtЙч†At3†At3†A(3†A(Йы†AtЙь†At3†At 3†At Йэ†At,„!,†AtЙь†At3†At 3†At€џџ Йэ†At,„!,†At3†At 2†AtKOX&ъЙш†At3†A(3†A(Йь†AtЙы†At3†At 3†At Йэ†At,„!,†AtЙы†At3†At 3†At€џџ Йэ†At,„!,†At3†At 2†AtKOYT:)OZT:ќ)§O[T)цOGTTOœO\M9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t   § ќ ћњ љ јїі ѕ єѓђё № яюц фorder†€тc†€рrc_Q15†€ шn†tщlz†tыCtmp1†tъC†€ˆЁ€Жчk†tьCtmp2†tэrc_tmp_Q15†t          ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Ÿ   Љ ‚!Ж%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fgў.cil$glё.cil$in.cil$ex-.cil$syД.cil$db”/699 1284597038 100666 18200 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТјF .e‘LдE.drectveQ, .cil$fg }@@.cil$glЊ‰@@.cil$in3 @@.cil$ex#04 @@.cil$syы W;@@.cil$db’BE@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_scale_vector.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_scale_vector.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2B2€ovІV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_scale_vector.c4l*ЃЈа[У3uУ™XУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШСSKP_Silk_scale_vector16_Q14‚€Г€v'€#€ОhпSKP_Silk_scale_vector32_Q26_lshift_18‚€ў€Š*€№5hбSKP_Silk_scale_vector32_16_Q14‚€ў€x+€q€hиSKP_Silk_scale_vector32_Q16‚€Е€Л-€8 €’h Лsize_tu intptr_tt ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœOO€ O €ўO3 f0" D ЄBEOœO$SS&СF-ф-т-рLOSO%O&O(3‚KO)3‚KO+&щЙт†At3†At 2†AtKO-Йр†C‘,†At3†At 3†At 8юSO/Йр†C‘3†A(Йщ†At3†At Йр†C‘3†A(0„!,†AtЙщ†At3†At€џџ Йр†C‘3†A(0„!,†At3†At 2„!KO0&ч3†At2†AtKO1T:ѓ)юSO2&ч3†At2†AtKO3T)ѓO4&ф3†At6†AtKO5:є)ѕ&ч3†At†AtK)єЙч†AtЙф†At"8іSO6&шЙр†C‘Йч†At3†A(,†Cє0†At2†AtKO7Йр†C‘Йч†At3†A(Йщ†At3†At Йш†At,„!,†AtЙщ†At3†At€џџ Йш†At,„!,†At3†At 2„!KO8Йр†C‘Йч†At3†At3†A(Йщ†At3†At Йш†At3†At Йщ†At3†At€џџ Йш†At3†At 3†At 2„!KO9T:ѕ)іO:Йч†AtЙф†At8ќSO<Йр†C‘Йч†At3†A(Йщ†At3†At Йр†C‘Йч†At3†A(0„!,†AtЙщ†At3†At€џџ Йр†C‘Йч†At3†A(0„!,†At3†At 2„!KO=TO>)ќT)цOGTTO€ O €ўO3 f0" D ЄBEOœOFSS&пF---LOSOGOI&3†At2†AtK: ) &3†At5†AtK) Й†AtЙ†At"8 SOJЙ†CєЙ†At3†A(Й†CєЙ†At3†A(0†At,ˆЙ†At,ˆ3†At ,†At2†AtKOKT: ) OLT)OGTTO€ O €ўO3 f0" D ЄBEOœOTSS&бF---LOSOUOWЙ†At3†At€џ"8SOX&Й†At3†At 2†AtKOY&3†At2†AtK:)&3†At5†AtK)Й†AtЙ†At"8SOZЙ†CєЙ†At3†A(Й†CєЙ†At3†A(0†At3†At Й†At,„!,†AtЙ†CєЙ†At3†A(0†At3†At€џџ Й†At,„!,†At3†At 2†AtKO[T:)O\T:)SO]3‚KO^&3†At2†AtK:!)"&3†At5†AtK)!Й†AtЙ†At"8#SO_Й†CєЙ†At3†A(Й†CєЙ†At3†A(0†At3†At Й†At,„!,†AtЙ†CєЙ†At3†A(0†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO`T:")#OaT)ObT)OGTTO€ O €ўO3 f0" D ЄBEOœOjSS&иF-,-*-(LOSOkOm3‚KOn3‚KOpЙ*†At3†At€џ$82SOq&*3†At€†AtKOr&/3†At2†AtK:3)4&/3†At5†AtK)3Й/†AtЙ,ІA“ "85SOsЙ(†CєЙ/†At3†A(Й(†CєЙ/†At3†A(0†AtЙ(†CєЙ/†At3†A(0†At3†At Й*†At,„!,†AtЙ(†CєЙ/†At3†A(0†At3†At€џџ Й*†At,„!,†At3†At 2†AtKOtT:4)5OuT::)2SOv&/3†At2†AtK:;)<&/3†At5†AtK);Й/†AtЙ,ІA“ "8=SOwЙ(†CєЙ/†At3†A(Й(†CєЙ/†At3†A(0†At3†At Й*†At,„!,†AtЙ(†CєЙ/†At3†A(0†At3†At€џџ Й*†At,„!,†At3†At 2†AtKOxT:<)=OyT):OzT).OGTTOœO{M9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t ќі ѕ єѓюц фdataSize†tтgain_Q14†tрdata1†€ шdata32†tщgain_Q16†tчi†t          dataSize†tgain_Q26†tdata1†€t i†t # " !   dataSize†tgain_Q14†tdata1†€t gain_Q16†ti†t    = < ;:5 4 32. ,dataSize†€*gain_Q16†t(data1†€t /i†t      ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ Љ ў#Г%Е%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$glЊ.cil$in.cil$ex#0.cil$syы .cil$db’/733 1284597038 100666 15586 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТТ< .e‘Lž;.drectveQ, .cil$fg}@@.cil$glй—@@.cil$inp @@.cil$exТ(q @@.cil$syл33@@.cil$db;@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_scale_copy_vector16.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_scale_copy_vector16.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2ѓ2€ovеV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_scale_copy_vector16.cє|Д`ПЙОcї>Р‹]~SУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШЪSKP_Silk_scale_copy_vector16‚€€v'€#Ih Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœOO€ O €ўO3 f0" D ЄBEOœO%SS&ЪF-ц-ф-т-рLOSO&O'O)&щ3†At2†AtK:ы)ь&щ3†At5†AtK)ыЙщ†AtЙцІA“ "8эSO*&ъЙф†At3†At Йт†CЎ Йщ†At3†A(0Є!­ ,„!,†AtЙф†At3†At€џџ Йт†CЎ Йщ†At3†A(0Є!­ ,„!,†At3†At 2†AtKO+Йр†C‘Йщ†At3†A(Йъ†At,„!2„!KO,T:ь)эO-T)шOGTTOœO.M9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t э ь ыш цdataSize†€фgain_Q16†tтdata_in†€.рdata_out†€ ъtmp32†tщi†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ Љ ­ Ў ™$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glй.cil$in.cil$exТ(.cil$syл.cil$db/774 1284597038 100666 17910 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТжE .e‘LВD.drectveQ, .cil$fg}@@.cil$glm —@@.cil$in@@.cil$exн,@@.cil$sy. т:@@.cil$dbЂD@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_residual_energy_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_residual_energy_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2p2€ovi V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_residual_energy_fix.cЗ"LO|槇2F {:ZФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШGSKP_Silk_residual_energy_FIX‚€"€(€#€hж О  О SKP_Silk_LPC_analysis_filter‚€ъ Кsize_tu ЃSA_AttrTarget€) SKP_Silk_sum_sqr_shift‚€HАSA_Parameter€)† strnlen†€ЎSA_Method€)†@ Лwchar_t!€ wcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOO€ O €ўO3 f0" D ЄBEOœO)SS&GF-T-R-P-N-L-J-HLOSO*O+O,O-O.O0&_ЙL†CЎ 2†CЎ KO1&WЙTІA“ ЙRІA“ 2†AtKO4&X3†At2†AtK:b)c&X3†At5†AtK)bЙX†At3†At"8dSO63†At€­@†CƒЙTІA“ 3†BuU†Bu3†AtU†At&`U†CƒLKO7&О Н‚€ыЙTІA“ UІA“ 3†AtЙW†AtUІA“ &^U†C‘&`U†C‘ЙN†C $ЙX†At3†A (U†CЎ Й_†CЎ U†CЎ LKO:&]&^ЙTІA“ 3†A2†C‘KO;&Y3†At2†AtK:f)g&Y3†At5†AtK)fЙY†At3†At"8hSO=& Н‚€IЙRІA“ U†AtЙ]†C‘U†CЎ &ZU†CєЙH†CєЙX†At3†AtЙY†At3†A(U†CєLKO@ЙJ†CєЙX†At3†AtЙY†At3†A(ЙZ†At2†AtKOC&]ЙW†At3†A†C‘KODT:g)hOF&_3†AtЙW†At3†A†CЎ KOGT:c)dOJ&X3†At2†AtK:i)j&X3†At5†AtK)iЙX†At3†At"8kSOL&[&ж Н†At€ЙH†CєЙX†At3†A(0†AtU†AtL3†At2†AtKOM&\&ж Н†At€ЙP†C” ЙX†At3†A(0ІA“ U†AtL3†At2†AtKOO&aЙP†C” ЙX†At3†A(0ІA“ Й\†At 2†AtKOR&aЙa†At,ˆЙa†At,ˆ3†At ,†At2†AtKOUЙH†CєЙX†At3†A(Йa†At,ˆЙH†CєЙX†At3†A(0†AtЙ[†At ,ˆ3†At ,†At2†AtKOVЙJ†CєЙX†At3†A(Й[†At3†AtЙ\†At3†At 3†At †AtKOWT:j)kOXT)VOGTTOœOYM   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t k j ih g fd c bV TLPC_order†€Rsubfr_length†€Pgains†€Na_Q12†€ Lx†€.JnrgsQ†€tHnrgs†€t ^LPC_res„€ Ё€ь]LPC_res_ptr†€atmp32†tXi†t`S„ Ё€uWoffset†t_x_ptr†€.\lz2†t[lz1†tZrshift†!tYj†t     ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Љ Ў Ш Щ ѕ ъ#ы#ь# $Ђ$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glm .cil$in.cil$exн,.cil$sy. .cil$dbЂ/815 1284597038 100666 18936 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТиI .e‘LДH.drectveQ, .cil$fg}@@.cil$glЈ ›@@.cil$inC@@.cil$exЅ0D@@.cil$sy4 щ>@@.cil$db—H@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_residual_energy16_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_residual_energy16_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j22€ovЄ V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_residual_energy16_fix.cјBž5ВьVRSьQЭФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ SKP_min_int†€€­€aШSKP_max_int†€€е€Ш%SKP_max_32†€€ѓ€{Ш=SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШ8SKP_Silk_residual_energy16_covar_FIX†€ћ€(€#€ hж % Кsize_tu ЃSA_AttrTarget€)АSA_Parameter€)† strnlen†€ЎSA_Method€)†@ Лwchar_t!€ wcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOO€ O €ўO3 f0" D ЄBEOœO'SS&8F-R-P-N-L-J-HLOSO(O)O*O+O.3‚KO/3‚KO03‚KO13‚KO3&W3†AtЙR†At2†AtKO4&XЙW†At2†AtKO6&Y3†At2†AtKO7&U3†At2†AtK:d)e&U3†At5†AtK)dЙU†AtЙP†At"8fSO8&Y&%Н†At€ ЙH†CЎ ЙU†At3†A(0Є!­ ,†At3†At$ЙH†CЎ ЙU†At3†A(0Є!­ ,†AtЙH†CЎ ЙU†At3†A(0Є!­ ,†AtCBU†AtЙY†AtU†AtL2†AtKO9T:e)fO:&X&Н†At€ &ж Н†At€ЙY†AtU†AtL3†AtU†AtЙX†AtU†AtL2†AtKO<&Z&%Н†At€ ЙJ†C” ЙP†AtЙP†At3†At3†A(0ІA“ U†AtЙJ†C” 3†A(0ІA“ U†AtL2†AtKO=&X&Н†At€ &ж Н†At€ЙP†AtЙZ†At3†At ЙY†At,„!,†AtЙZ†At3†At€џџ ЙY†At,„!,†At3†At 3†At U†AtL3†AtU†AtЙX†AtU†AtL2†AtKO>&X&Н†At€ 3†AtU†AtЙX†AtU†AtL2†AtKO?&U3†At2†AtK:n)o&U3†At5†AtK)nЙU†AtЙP†At"8pSO@&^ЙU†At3†A(ЙH†CЎ ЙU†At3†A(0Є!­ ,†AtЙX†At 2†AtKOA3‚KOBT:o)pOC&WЙX†At†AtKOF&[3†At2†AtKOG&U3†At2†AtK:s)t&U3†At5†AtK)sЙU†AtЙP†At"8uSOH&[Й[†AtЙL†C” ЙU†At3†A(0ІA“ 3†At &^ЙU†At3†A(0†At,„!,†AtЙL†C” ЙU†At3†A(0ІA“ 3†At€џџ &^ЙU†At3†A(0†At,„!,†At3†At 2†AtKOIT:t)uOJ&]ЙN†At3†AtЙW†At Й[†At2†AtKOM&\3†At2†AtKON&U3†At2†AtK:z){&U3†At5†AtK)zЙU†AtЙP†At"8|SOO&[3†At2†AtKOP&_ЙJ†C” ЙU†AtЙP†At3†A(2†C” KOQ&VЙU†At3†At2†AtK:})~&V3†At5†AtK)}ЙV†AtЙP†At"8SOR&[Й[†AtЙ_†C” ЙV†At3†A(0ІA“ 3†At &^ЙV†At3†A(0†At,„!,†AtЙ_†C” ЙV†At3†A(0ІA“ 3†At€џџ &^ЙV†At3†A(0†At,„!,†At3†At 2†AtKOST:~)OT&[Й[†AtЙ_†C” ЙU†At3†A(0ІA“ 3†At 3†At &^ЙU†At3†A(0†At,„!,†AtЙ_†C” ЙU†At3†A(0ІA“ 3†At 3†At€џџ &^ЙU†At3†A(0†At,„!,†At3†At 2†AtKOU&\Й\†AtЙ[†At3†At &^ЙU†At3†A(0†At,„!,†AtЙ[†At3†At€џџ &^ЙU†At3†A(0†At,„!,†At3†At 2†AtKOVT:{)|OW&]Й]†AtЙ\†AtЙW†At 2†AtKOZЙ]†At3†At"8ŒSO[&]3†At2†AtKO\T:)ŒЙ]†At3†At€џџџЙW†At3†At $8ŽSO]&]3†At€џџџ?2†AtKO^T:)ŽSO_&]Й]†AtЙW†At3†At 2†AtKO`T))OaЙ]†AtA†At:TOcT)TOGTTOœOdM   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t ŽŒ ~ }| { zu t sp o nf e dT RcQ†tPD†tNwxx†tLwXx†€JwXX†€Hc†€. ]nrg†tWlshifts†t_pRow†€Ui†t[tmp†t\tmp2†tZw_max†t^cn†@€PYc_max†tXQxtra†tVj†t          ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ ” Ÿ   Љ ­ Ў а ћ#@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glЈ .cil$in.cil$exЅ0.cil$sy4 .cil$db—/858 1284597038 100666 16080 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТА> .e‘LŒ=.drectveQ, .cil$fg }@@.cil$glX‰@@.cil$inс @@.cil$exР)т @@.cil$syKЂ4@@.cil$dbŸэ<@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_resample_4_3.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_resample_4_3.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2ј2€ovTV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_4_3.c)hдРќчjЪќЭ.РуЬuУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ SKP_min_int†€€Љ€aШ<SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШ3 SKP_Silk_resample_4_3‚€С€v'€#~h   SKP_Silk_resample_1_3‚€С Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t! SKP_Silk_resample_2_1_coarse‚€ЩЊwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO'O€ O €ўO3 f0" D ЄBEOœO2SS&3 F-ц-ф-т-рLOSO3O4O5O6O93‚KO;&щЙцІA“ 3†At 3†At2†AtKO<)ђЙщ†At3†At$8ѓSO=&ы&Н†At€ Йщ†AtU†At3†AtPU†AtL2†AtKO>&ъ3†AtЙы†At,„!,†At3†At€РЙы†At,„!,†At3†At 2†AtKOB& Н‚€ЪЙъ†AtUІA“ &юU†Cє&ьU†C‘Йт†Cє3†A(U†CєЙф†CЎ U†CЎ LKOD& Н‚€ЪЙъ†At3†At UІA“ &юU†Cє&эU†C‘Йт†Cє3†A(U†Cє&ьU†CЎ LKOG& Н‚€ТЙъ†At3†At UІA“ &эU†CЎ Йт†Cє3†A (U†CєЙр†C‘U†C‘LKOI&фЙъ†At3†A†CЎ KOJ&рЙы†At3†A†C‘KOK&щЙы†At†AtKOLT:ђ)ѓOMT)шOGTTOœONM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t ѓ ђ ш цinLen†€фin†€.тS†€tрout†€ щoutLen†tъLSubFrameIn†tьoutH„€рЁ€ˆюscratch†€ Ё€ЉыLSubFrameOut†tэoutHH„€РЁ€‹   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ Ÿ   Љ Ў ‹!С!Т!Щ!Ъ!ˆ%Љ%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$glX.cil$in.cil$exР).cil$syK.cil$dbŸ/892 1284597038 100666 16071 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТЇ> .e‘Lƒ=.drectveQ, .cil$fg }@@.cil$glŒ‰@@.cil$in @@.cil$exœ) @@.cil$sy0В4@@.cil$dbЁт<@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_resample_3_4.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_resample_3_4.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2і2€ovˆV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_3_4.cД3 ŠZЛ >dхF1ЮН зУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ SKP_min_int†€€Љ€aШ<SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШ< SKP_Silk_resample_3_4‚€Ф€v'€#th№ ћ  № SKP_Silk_resample_1_2_coarse‚€Щћ SKP_Silk_resample_1_2_coarsest‚€Щ SKP_Silk_resample_3_1‚€С Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO'O€ O €ўO3 f0" D ЄBEOœO2SS&< F-ц-ф-т-рLOSO3O4O5O6O93‚KO;)№Йц†At3†At$8ёSO<&щ&Н†At€ Йц†AtU†At3†AtPU†AtL2†AtKO=&ъ3†AtЙщ†At,„!,†At3†At€РЙщ†At,„!,†At3†At 2†AtKO@& Н‚€ТЙщ†AtUІA“ Йф†CЎ U†CЎ Йт†Cє3†A(U†Cє&ыU†C‘LKOE&ћ Н‚€ЪЙъ†At3†At UІA“ &эU†Cє&ьU†C‘Йт†Cє3†A(U†Cє&ыU†CЎ LKOI&№ Н‚€ЪЙъ†AtUІA“ &эU†CєЙр†C‘U†C‘Йт†Cє3†A$(U†Cє&ьU†CЎ LKOK&фЙщ†At3†A†CЎ KOL&рЙъ†At3†A†C‘KOM&цЙщ†At†AtKONT:№)ёOOT)шOGTTOœOPM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t ё № ш цinLen†tфin†€.тS†€tрout†€ щLSubFrameIn†tьoutL„€№Ё€БыoutH„€рЁ€ˆэscratch†€ Ё€ЉъLSubFrameOut†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ Ÿ   Љ Ў С!Т!Ф!Щ!Ъ!ˆ%Љ%Б%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$glŒ.cil$in.cil$exœ).cil$sy0.cil$dbЁ /926 1284597038 100666 5194 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТ* .e‘L.drectveQ, .cil$fg}@@.cil$gl†‘@@.cil$inˆ@@.cil$exє Ÿ@@.cil$sy“@@.cil$dbs“@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_resample_3_2_rom.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_resample_3_2_rom.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2Ц2€ov‚V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_3_2_rom.c"џеОKšЪ8єў@$ ЃSA_AttrTarget€)АSA_Parameter€)†РSigProc_Resample_3_2_coarse_INTERPOL„0€€АЎSA_Method€)†@ Р€€€€ў€^€Ÿы€2h€Њ1€ ђ€€џ€џ€€ ђ€Њ1€2h€Ÿы€^€€ў[€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO+OœO'OœO/STM  ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёЉ А%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl†.cil$inˆ.cil$exє .cil$sy.cil$dbs/964 1284597038 100666 15904 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТ> .e‘Lм<.drectveQ, .cil$fg }@@.cil$glX‰@@.cil$inс @@.cil$exJ)т @@.cil$sy,4@@.cil$dbŸ=<@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_resample_3_2.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_resample_3_2.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2ѕ2€ovTV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_3_2.cМZMu Ы}“5JkЕ;“У SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ SKP_min_int†€€Љ€aШ<SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШ* SKP_Silk_resample_3_2‚€Ф€v'€#bh№  № SKP_Silk_resample_1_2_coarse‚€Щ SKP_Silk_resample_3_1‚€С Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO'O€ O €ўO3 f0" D ЄBEOœO2SS&* F-ц-ф-т-рLOSO3O4O5O83‚KO:)яЙц†At3†At$8№SO;&щ&Н†At€ Йц†AtU†At3†AtPU†AtL2†AtKO<&ъ3†AtЙщ†At,„!,†At3†At€€Йщ†At,„!,†At3†At 2†AtKO?& Н‚€ТЙщ†AtUІA“ Йф†CЎ U†CЎ Йт†Cє3†A(U†Cє&ыU†C‘LKOC&№ Н‚€ЪЙъ†AtUІA“ &ьU†CєЙр†C‘U†C‘Йт†Cє3†A(U†Cє&ыU†CЎ LKOE&фЙщ†At3†A†CЎ KOF&рЙъ†At3†A†C‘KOG&цЙщ†At†AtKOHT:я)№OIT)шOGTTOœOJM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t № я ш цinLen†tфin†€.тS†€tрout†€ щLSubFrameIn†tыoutH„€рЁ€ˆьscratch†€ Ё€ЉъLSubFrameOut†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ Ÿ   Љ Ў С!Т!Ф!Щ!Ъ!ˆ%Љ%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$glX.cil$in.cil$exJ).cil$sy.cil$dbŸ/998 1284597038 100666 17415 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТчC .e‘LУB.drectveQ, .cil$fg }@@.cil$glQ‰@@.cil$inк @@.cil$ex.л @@.cil$sy' ї8@@.cil$dbЅB@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_resample_3_1.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_resample_3_1.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2 2€ovMV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_3_1.cтф‡+Ё2цѓ7I+OЉЩ№ЃУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ SKP_min_int†€€Љ€aШ<SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШ SKP_Silk_resample_3_1‚€С€v'€#€”hd o d SKP_Silk_lowpass_int‚€ Лsize_tuo SKP_Silk_allpass_int‚€, ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO$O€ O €ўO3 f0" D ЄBEOœO/SS& F-ц-ф-т-рLOSO0O1&юЙцІA“ 2†AtKO2O3O4O7&ђ3†At'ЄCЎ 3†At€э2Є!­ K&ђ3†At'ЄCЎ 3†At€šE2Є!­ KO8&ѓ3†At'ЄCЎ 3†At€N2Є!­ K&ѓ3†At'ЄCЎ 3†At€Md2Є!­ KO9&є3†At'ЄCЎ 3†At€ .2Є!­ K&є3†At'ЄCЎ 3†At€xr2Є!­ KO;)іЙю†At3†At$8їSO<&ъ&Н†At€ Йю†AtU†At3†At(U†AtL2†AtKO=&ы3†AtЙъ†At,„!,†At2†AtKO@&щ3†At2†AtK:ќ)§&щ3†At5†AtK)ќЙщ†AtЙъ†At"8ўSOA&яЙщ†At3†A(Йф†CЎ Йщ†At3†A(0Є!­ ,†At3†At 2†AtKOBT:§)ўOF&o Н‚€/Йъ†AtUІA“ &ёU†Cє&ђ3†A(0Є!­ U†AtЙт†Cє3†AU†Cє&яU†C” LKOG&o Н‚€/Йъ†AtUІA“ &№U†Cє&ђ3†A(0Є!­ U†AtЙт†Cє3†AU†Cє&ёU†C” LKOI&o Н‚€/Йъ†AtUІA“ &ёU†Cє&ѓ3†A(0Є!­ U†AtЙт†Cє3†A U†Cє&яU†C” LKOJ&o Н‚€/Йъ†AtUІA“ &№3†A€ U†Cє&ѓ3†A(0Є!­ U†AtЙт†Cє3†AU†Cє&ёU†C” LKOL&o Н‚€/Йъ†AtUІA“ &ёU†Cє&є3†A(0Є!­ U†AtЙт†Cє3†AU†Cє&яU†C” LKOM&o Н‚€/Йъ†AtUІA“ &№3†A€@U†Cє&є3†A(0Є!­ U†AtЙт†Cє3†AU†Cє&ёU†C” LKOP&щ3†At2†AtK:)&щ3†At5†AtK)Йщ†AtЙъ†At"8SOQ&э3†AtЙщ†At,„!,†At2†AtKOR&ёЙэ†At3†A(&№Йщ†At3†A(0†At2†AtKOS&ёЙэ†At3†At3†A(&№Йщ†At3†At(3†A(0†At2†AtKOT&ёЙэ†At3†At3†A(&№Йщ†At3†AtP3†A(0†At2†AtKOUT:)OX&d Н‚€Йы†AtUІA“ &№U†CєЙт†CєU†Cє&ёU†C” LKO[&щ3†At2†AtK:)&щ3†At5†AtK)Йщ†AtЙы†At"8 SO\&ь&№Йщ†At3†A(0†At2†AtKO]Йр†C‘Йщ†At3†A(Йь†At3†At 3†At3†At 3†At€џ$3†At€џЙь†At3†At 3†At3†At 3†At€€џџ"3†At€€џџЙь†At3†At 3†At3†At CBCB,„!2„!KO^T:) O`&фЙъ†At3†A†CЎ KOa&юЙъ†At†AtKOb&рЙы†At3†A†C‘KOcT:і)їOdT)шOGTTOœOeM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t      ў § ќї і ш цinLen†€фin†€.тS†€tрout†€ ђA30„€DъLSubFrameIn†tєA32„€D№scratch0†€рЁ€AыLSubFrameOut†tэidx†tёscratch1†€рЁ€Aщk†tяscratch00†€ Ё€ЎѓA31„€DюinLenTmp†tьout_tmp†t      ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ ” ™ š Ÿ   Љ Ќ ­ Ў Џ С!С"Ф"Ў%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$glQ.cil$in.cil$ex..cil$sy' .cil$dbЅ /1032 1284597038 100666 5577 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТЉ .e‘L….drectveQ, .cil$fg}@@.cil$glЦ‘@@.cil$inХW@@.cil$exє  @@.cil$sy@@.cil$dbu@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_resample_2_3_rom.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_resample_2_3_rom.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2Ц2€ovТV €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_2_3_rom.c<хzІiR№м@ц_єž{і~ОSigProc_Resample_2_3_coarse_INTERPOL„€€€€Ћ ЃSA_AttrTarget€)АSA_Parameter€)†ЎSA_Method€)†@ПSigProc_Resample_2_3_coarsest_INTERPOL„(€€­ О€Жџm€џ€I€ž§€-€cњ€Ђ€њю€љ"€UU€љ"€њю€Ђ€cњ€-€ž§€I€џm€Жџ-0€Тџ€…€=џ€‚€ђ§€Ј€%ћ€ €Їђ€jF€jF€Їђ€ €%ћ€Ј€ђ§€‚€=џ€…€Тџ0П€{€їѓ€/ €UU€/ €їѓ€{€oџ€И€aј€ћD€ћD€aј€И[€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO+OœO'OœO3STM  ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёЉ Ћ%­%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glЦ.cil$inХ.cil$exє .cil$sy.cil$dbu /1070 1284597038 100666 17055 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТB .e‘L[A.drectveQ, .cil$fg}@@.cil$gl›@@.cil$inИ @@.cil$ex…-Й @@.cil$sy†>8@@.cil$db—Ф@@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_resample_2_3_coarsest.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_resample_2_3_coarsest.obj-FdRelease\vc100.pdb-errorreport:prompt†1j202€ovV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_2_3_coarsest.cyчП„УˆŽ“ђœj<У SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШR SKP_Silk_resample_2_3_coarsest‚€|€„'€#€bhЙ  Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€Й SigProc_Resample_2_3_coarsest_INTERPOL„(!€­ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO'OЕ OOœO(O€ O €ўO3 f0" D ЄBEOœO2SS&R F-ш-ц-ф-т-рLOSO3O4O5O6O93†At€Ќ@†Cƒ3†BuU†BuЙт†C‘U†CЫ Йш†C‘U†CƒLKO<3†At€Ќ@†CƒЙцІA“ 3†BuU†BuЙф†CЎ U†CЫ Йш†C‘3†A(U†CƒLKO>&ёЙцІA“ ,†At3†At 3†At 3†At€VUЙцІA“ ,†At3†At 3†At€џџ 3†At€VU3†At 2†AtKO?&я3†At2†AtKOA3‚KOD&ыЙё†At2†AtK:ќ)§&ы3†At6†AtK)ќЙы†At3†At$8ўSOG&ьЙя†At3†At 2†AtKOJ&№Йш†C‘Йь†At3†A2†C‘KOMON&эЙя†At3†At 3†AtЙя†At3†At€џџ 3†At3†At 3†At 2†AtKOQ&ђ&Й Йэ†At3†A(2†CЎ KOT3‚KOU&юЙђ†CЎ 3†A(0Є!­ ,„!,†AtЙ№†C‘3†A(0„!,†At2†AtKOV&юЙю†AtЙђ†CЎ 3†A(0Є!­ ,„!,†AtЙ№†C‘3†A(0„!,†At2†AtKOW&юЙю†AtЙђ†CЎ 3†A(0Є!­ ,„!,†AtЙ№†C‘3†A(0„!,†At2†AtKOX&юЙю†AtЙђ†CЎ 3†A(0Є!­ ,„!,†AtЙ№†C‘3†A(0„!,†At2†AtKOY&юЙю†AtЙђ†CЎ 3†A(0Є!­ ,„!,†AtЙ№†C‘3†A(0„!,†At2†AtKOZ&юЙю†AtЙђ†CЎ 3†A (0Є!­ ,„!,†AtЙ№†C‘3†A (0„!,†At2†AtKO[&юЙю†AtЙђ†CЎ 3†A (0Є!­ ,„!,†AtЙ№†C‘3†A (0„!,†At2†AtKO\&юЙю†AtЙђ†CЎ 3†A(0Є!­ ,„!,†AtЙ№†C‘3†A(0„!,†At2†AtKO]&юЙю†AtЙђ†CЎ 3†A(0Є!­ ,„!,†AtЙ№†C‘3†A(0„!,†At2†AtKO^&юЙю†AtЙђ†CЎ 3†A(0Є!­ ,„!,†AtЙ№†C‘3†A(0„!,†At2†AtKO`&р3†A5†C‘Йю†At3†At 3†At3†At 3†At€џ$3†At€џЙю†At3†At 3†At3†At 3†At€€џџ"3†At€€џџЙю†At3†At 3†At3†At CBCB,„!2„!KOc&я3†At€€†AtKOdT:§)ўOgOh3†At€Ќ@†Cƒ3†BuU†BuЙф†CЎ ЙцІA“ 3†At 3†A(U†CЫ Йт†C‘U†CƒLKOiT)ъOGTTOœOjM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t ў § ќъ шscratch†€цframeLenIn†€фin†€.тS†€рout†€ №in_ptr†€ьind†tыn†tяindex_Q16†tюtmp†tёframeLenOut†tэinterpol_ind†tђinterpol_ptr†€.   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ “ Љ ­ Ў Ы ќ$­%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl.cil$in.cil$ex…-.cil$sy†.cil$db— /1113 1284597038 100666 17848 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SҘE .e‘LtD.drectveQ, .cil$fg}@@.cil$gl—@@.cil$inВ @@.cil$exЄ0Г @@.cil$sy†W;@@.cil$db—нC@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_resample_2_3_coarse.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_resample_2_3_coarse.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2!2€ovV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_2_3_coarse.cžЇ%| АЇОy„иУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШG SKP_Silk_resample_2_3_coarse‚€|€„'€#€hИ И SigProc_Resample_2_3_coarse_INTERPOL„€€!€Ћ Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO'OЕ OOœO(O€ O €ўO3 f0" D ЄBEOœO2SS&G F-ш-ц-ф-т-рLOSO3O4O5O6O93†At€Ќ@†Cƒ3†Bu>U†BuЙт†C‘U†CЫ Йш†C‘U†CƒLKO<3†At€Ќ@†CƒЙцІA“ 3†BuU†BuЙф†CЎ U†CЫ Йш†C‘3†A>(U†CƒLKO>&ё3†AtЙцІA“ 3†At2†AtKO?&я3†At2†AtKOA3‚KOD&ыЙё†At2†AtK:ї)ј&ы3†At6†AtK)їЙы†At3†At$8љSOG&ьЙя†At3†At 2†AtKOJ&№Йш†C‘Йь†At3†A2†C‘KOMON&эЙя†At3†At 3†AtЙя†At3†At€џџ 3†At3†At 3†At 2†AtKOQ&ђ&И Йэ†At3†A@(2†CЎ KOU3‚KOVOWOXOYOZO[O\O]O^O_O`OaObOcOd&юЙђ†CЎ 3†A(0Є!­ ,†AtЙ№†C‘3†A(0„!,†AtЙђ†CЎ 3†A(0Є!­ ,†AtЙ№†C‘3†A(0„!,†AtЙђ†CЎ 3†A(0Є!­ ,†AtЙ№†C‘3†A(0„!,†AtЙђ†CЎ 3†A(0Є!­ ,†AtЙ№†C‘3†A(0„!,†AtЙђ†CЎ 3†A(0Є!­ ,†AtЙ№†C‘3†A(0„!,†AtЙђ†CЎ 3†A (0Є!­ ,†AtЙ№†C‘3†A (0„!,†AtЙђ†CЎ 3†A (0Є!­ ,†AtЙ№†C‘3†A (0„!,†AtЙђ†CЎ 3†A(0Є!­ ,†AtЙ№†C‘3†A(0„!,†AtЙђ†CЎ 3†A(0Є!­ ,†AtЙ№†C‘3†A(0„!,†AtЙђ†CЎ 3†A(0Є!­ ,†AtЙ№†C‘3†A(0„!,†AtЙђ†CЎ 3†A(0Є!­ ,†AtЙ№†C‘3†A(0„!,†AtЙђ†CЎ 3†A(0Є!­ ,†AtЙ№†C‘3†A(0„!,†AtЙђ†CЎ 3†A(0Є!­ ,†AtЙ№†C‘3†A(0„!,†AtЙђ†CЎ 3†A(0Є!­ ,†AtЙ№†C‘3†A(0„!,†AtЙђ†CЎ 3†A(0Є!­ ,†AtЙ№†C‘3†A(0„!,†AtЙђ†CЎ 3†A(0Є!­ ,†AtЙ№†C‘3†A(0„!,†AtЙђ†CЎ 3†A (0Є!­ ,†AtЙ№†C‘3†A (0„!,†AtЙђ†CЎ 3†A"(0Є!­ ,†AtЙ№†C‘3†A"(0„!,†AtЙђ†CЎ 3†A$(0Є!­ ,†AtЙ№†C‘3†A$(0„!,†AtЙђ†CЎ 3†A&(0Є!­ ,†AtЙ№†C‘3†A&(0„!,†AtЙђ†CЎ 3†A((0Є!­ ,†AtЙ№†C‘3†A((0„!,†AtЙђ†CЎ 3†A*(0Є!­ ,†AtЙ№†C‘3†A*(0„!,†AtЙђ†CЎ 3†A,(0Є!­ ,†AtЙ№†C‘3†A,(0„!,†AtЙђ†CЎ 3†A.(0Є!­ ,†AtЙ№†C‘3†A.(0„!,†AtЙђ†CЎ 3†A0(0Є!­ ,†AtЙ№†C‘3†A0(0„!,†AtЙђ†CЎ 3†A2(0Є!­ ,†AtЙ№†C‘3†A2(0„!,†AtЙђ†CЎ 3†A4(0Є!­ ,†AtЙ№†C‘3†A4(0„!,†AtЙђ†CЎ 3†A6(0Є!­ ,†AtЙ№†C‘3†A6(0„!,†AtЙђ†CЎ 3†A8(0Є!­ ,†AtЙ№†C‘3†A8(0„!,†AtЙђ†CЎ 3†A:(0Є!­ ,†AtЙ№†C‘3†A:(0„!,†At2†AtKOg&р3†A5†C‘Йю†At3†At 3†At3†At 3†At€џ$3†At€џЙю†At3†At 3†At3†At 3†At€€џџ"3†At€€џџЙю†At3†At 3†At3†At CBCB,„!2„!KOj&я3†At€€†AtKOkT:ј)љOnOo3†At€Ќ@†Cƒ3†Bu>U†BuЙф†CЎ ЙцІA“ 3†At3†A(U†CЫ Йт†C‘U†CƒLKOpT)ъOGTTOœOqM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t љ ј їъ шscratch†€цframeLenIn†€фin†€.тS†€рout†€ №in_ptr†€ьind†tыn†tяindex_Q16†tюtmp†tёframeLenOut†tэinterpol_ind†tђinterpol_ptr†€.   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ “ Љ ­ Ў Ы ќ$Ћ%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl.cil$in.cil$exЄ0.cil$sy†.cil$db—/1154 1284597038 100666 15964 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТ<> .e‘L=.drectveQ, .cil$fg }@@.cil$glX‰@@.cil$inс @@.cil$exn)т @@.cil$sy+P4@@.cil$db{<@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_resample_2_3.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_resample_2_3.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2ї2€ovTV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_2_3.cY­˜"n:mыŸm(LыАУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ SKP_min_int†€€Љ€aШ<SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШ! SKP_Silk_resample_2_3‚€С€v'€#lh   SKP_Silk_resample_1_3‚€С Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t! SKP_Silk_resample_2_1_coarse‚€ЩЊwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO'O€ O €ўO3 f0" D ЄBEOœO2SS&! F-ц-ф-т-рLOSO3O4O5O83‚KO:&щЙцІA“ 3†At 3†At2†AtKO;)ёЙщ†At3†At$8ђSO<&ы&Н†At€ Йщ†AtU†At3†AtPU†AtL2†AtKO=&ъ3†AtЙы†At,„!,†At3†At€€Йы†At,„!,†At3†At 2†AtKOA& Н‚€ЪЙъ†AtUІA“ &эU†Cє&ьU†C‘Йт†Cє3†A(U†CєЙф†CЎ U†CЎ LKOD& Н‚€ТЙъ†At3†At UІA“ &ьU†CЎ Йт†Cє3†A(U†CєЙр†C‘U†C‘LKOF&фЙъ†At3†A†CЎ KOG&рЙы†At3†A†C‘KOH&щЙы†At†AtKOIT:ё)ђOJT)шOGTTOœOKM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t ђ ё ш цinLen†€фin†€.тS†€tрout†€ щoutLen†tъLSubFrameIn†tьoutH„€рЁ€ˆэscratch†€ Ё€ЉыLSubFrameOut†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ Ÿ   Љ Ў С!Т!Щ!Ъ!ˆ%Љ%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$glX.cil$in.cil$exn).cil$sy+.cil$db/1188 1284597038 100666 16743 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТGA .e‘L#@.drectveQ, .cil$fg}@@.cil$gl—@@.cil$inœ @@.cil$exП, @@.cil$sy.\7@@.cil$db™Š?@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_resample_2_1_coarse.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_resample_2_1_coarse.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2ќ2€ovV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_2_1_coarse.c:zEv_ШƒА„и`SУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШ SKP_Silk_resample_2_1_coarse‚€Щ€v'€#€<ho  Лsize_tuo SKP_Silk_allpass_int‚€, ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO$O€ O €ўO3 f0" D ЄBEOœO.SS& F-ш-ц-ф-т-рLOSO/O2&э3†At'ЄCЎ 3†At€G2Є!­ K&э3†At'ЄCЎ 3†At€A2Є!­ KO3&ю3†At'ЄCЎ 3†At€r2Є!­ K&ю3†At'ЄCЎ 3†At€эh2Є!­ KO6&ы3†At2†AtK:я)№&ы3†At5†AtK)яЙы†AtЙшІA“ "8ёSO7Йц†CєЙы†At3†A(Йр†CЎ Йы†At3†A(0Є!­ ,†At3†At 2†AtKO8T:№)ёO:&ьЙшІA“ 3†At 2†AtKO=&o Н‚€/ЙшІA“ UІA“ Йц†CєЙь†At3†AU†Cє&э3†A(0Є!­ U†AtЙт†CєU†CєЙц†CєU†C” LKO>&o Н‚€/ЙшІA“ UІA“ Йц†CєЙшІA“ 3†AU†Cє&э3†A(0Є!­ U†AtЙт†Cє3†AU†CєЙц†CєЙь†At3†AU†C” LKO@&o Н‚€/ЙшІA“ UІA“ Йц†CєЙь†At3†AU†Cє&ю3†A(0Є!­ U†AtЙт†Cє3†AU†CєЙц†CєU†C” LKOA&o Н‚€/ЙшІA“ UІA“ Йц†CєU†Cє&ю3†A(0Є!­ U†AtЙт†Cє3†A U†CєЙц†CєЙь†At3†AU†C” LKOD&ы3†At2†AtK:ѓ)є&ы3†At5†AtK)ѓЙы†AtЙшІA“ "8ѕSOE&ьЙы†At3†At 2†AtKOFЙф†C‘Йь†At3†A(Йц†CєЙы†AtЙшІA“ 3†A(0†At3†At 3†At3†At 3†At€џ$3†At€џЙц†CєЙы†AtЙшІA“ 3†A(0†At3†At 3†At3†At 3†At€€џџ"3†At€€џџЙц†CєЙы†AtЙшІA“ 3†A(0†At3†At 3†At3†At CBCB,„!2„!KOGЙф†C‘Йь†At3†At3†A(Йц†CєЙы†At3†A(0†At3†At 3†At3†At 3†At€џ$3†At€џЙц†CєЙы†At3†A(0†At3†At 3†At3†At 3†At€€џџ"3†At€€џџЙц†CєЙы†At3†A(0†At3†At 3†At3†At CBCB,„!2„!KOHT:є)ѕOIT)ъOGTTOœOJM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t ѕ є ѓё № яъ шlen†€цscratch†€tфout†€тS†€tрin†€. эA20c„€Dьidx†tюA21c„€Dыk†t    ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Љ Ќ ­ Ў Џ Щ!Ф"@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl.cil$in.cil$exП,.cil$sy..cil$db™ /1229 1284597038 100666 17481 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТ)D .e‘LC.drectveQ, .cil$fg }@@.cil$glS‰@@.cil$inм @@.cil$ex+.н @@.cil$syX 9@@.cil$dbЅ`B@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_resample_1_3.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_resample_1_3.obj-FdRelease\vc100.pdb-errorreport:prompt†1j22€ovOV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_1_3.cQ‡œІ5,х7щLˆУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ SKP_min_int†€€Љ€aШ<SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШ SKP_Silk_resample_1_3‚€С€v'€#€—h[ o  Лsize_tuo SKP_Silk_allpass_int‚€, ЃSA_AttrTarget€)АSA_Parameter€)†[ SKP_Silk_lowpass_short‚€33strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO$O€ O €ўO3 f0" D ЄBEOœO/SS& F-ц-ф-т-рLOSO0O1&ю3†At€PU2†AtKO2O3O5&ѓ3†At'ЄCЎ 3†At€э2Є!­ K&ѓ3†At'ЄCЎ 3†At€šE2Є!­ KO6&є3†At'ЄCЎ 3†At€N2Є!­ K&є3†At'ЄCЎ 3†At€Md2Є!­ KO7&ѕ3†At'ЄCЎ 3†At€ .2Є!­ K&ѕ3†At'ЄCЎ 3†At€xr2Є!­ KO:3‚KO<&ъЙцІA“ 3†At2†AtKO=)љЙъ†At3†At$8њSO>&ь&Н†At€ Йъ†AtU†At3†AtPU†AtL2†AtKO?&ы3†AtЙь†At,„!,†At2†AtKOB&[ Н‚€ІЙы†AtUІA“ &яU†CєЙт†CєU†CєЙф†CЎ U†CЎ LKOE&щ3†At2†AtK:џ)&щ3†At5†AtK)џЙщ†AtЙь†At"8SOF&№Йщ†At3†A(&я3†AtЙщ†At3†A(0†At2†AtKOG&ёЙщ†At3†A(&я3†AtЙщ†At3†At3†A(0†At2†AtKOH&ђЙщ†At3†A(&я3†AtЙщ†At3†At3†A(0†At2†AtKOIT:)OL&o Н‚€/Йь†AtUІA“ &яU†Cє&ѕ3†A(0Є!­ U†AtЙт†Cє3†AU†Cє&№U†C” LKOM&o Н‚€/Йь†AtUІA“ &№U†Cє&ѕ3†A(0Є!­ U†AtЙт†Cє3†AU†Cє&яU†C” LKOO&o Н‚€/Йь†AtUІA“ &яU†Cє&є3†A(0Є!­ U†AtЙт†Cє3†A U†Cє&ёU†C” LKOP&o Н‚€/Йь†AtUІA“ &ёU†Cє&є3†A(0Є!­ U†AtЙт†Cє3†AU†Cє&яU†C” LKOR&o Н‚€/Йь†AtUІA“ &яU†Cє&ѓ3†A(0Є!­ U†AtЙт†Cє3†AU†Cє&ђU†C” LKOS&o Н‚€/Йь†AtUІA“ &ђU†Cє&ѓ3†A(0Є!­ U†AtЙт†Cє3†AU†Cє&яU†C” LKOV&щ3†At2†AtK:)&щ3†At5†AtK)Йщ†AtЙь†At"8SOW&э&№Йщ†At3†A(0†At&ёЙщ†At3†A(0†At&ђЙщ†At3†A(0†At2†AtKOXЙэ†AtЙю†At3†At$8SOYЙр†C‘Йщ†At3†A(3†At€џ2„!KOZT:)Йэ†AtЙю†At3†At"8SO[Йр†C‘Йщ†At3†A(3„!€€џџ2„!KO\T: )SO]Йр†C‘Йщ†At3†A(Йэ†At3†At€3†At 3†AtЙэ†At3†At€3†At€џџ 3†At3†At ,„!2„!KO^T) )O_T:)Oa&фЙы†At3†A†CЎ KOb&рЙь†At3†A†C‘KOc&ъЙь†At†AtKOdT:љ)њOeT)шOGTTOœOfM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t      џњ љ ш цinLen†€фin†€.тS†€tрout†€ ѓA30„€Dёscratch11†€@Ё€ЇъoutLen†tыLSubFrameIn†tѕA32„€Dяscratch0†€РЁ€ЈьLSubFrameOut†tщk†t№scratch10†€@Ё€Їюlimit†tєA31„€Dђscratch12†€@Ё€Їэout_tmp†t        ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Ÿ   Љ Ќ ­ Ў Џ С!Ф"Г$І%Ї%Ј%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$glS.cil$in.cil$ex+..cil$syX .cil$dbЅ /1263 1284597038 100666 16383 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТп? .e‘LЛ>.drectveQ, .cil$fg}@@.cil$glG›@@.cil$inт @@.cil$ex-+љ @@.cil$syќ&6@@.cil$db™">@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_resample_1_2_coarsest.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_resample_1_2_coarsest.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2њ2€ovCV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_1_2_coarsest.cЈKџѓг}мю&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO$O€ O €ўO3 f0" D ЄBEOœO3SS&ћ F-ъ-ш-ц-ф-тLOSO4O7&э3†At2†AtK:я)№&э3†At5†AtK)яЙэ†AtЙъІA“ "8ёSO8&юЙэ†At3†At 2†AtKO9Йш†CєЙэ†At3†A(Йт†CЎ Йю†At3†A(0Є!­ ,†At3†At 2†AtKO:Йш†CєЙэ†AtЙъІA“ 3†A(Йт†CЎ Йю†At3†At3†A(0Є!­ ,†At3†At 2†AtKO;T:№)ёO=&юЙъІA“ 3†At 2†AtKO?&o Н‚€/ЙъІA“ UІA“ Йш†CєЙю†At3†AU†Cє&с3†A(0„!U†AtЙф†CєU†CєЙш†CєU†C” LKO@&o Н‚€/ЙъІA“ UІA“ Йш†CєU†Cє&р3†A(0„!U†AtЙф†Cє3†AU†CєЙш†CєЙъІA“ 3†AU†C” LKOC&э3†At2†AtK:є)ѕ&э3†At5†AtK)єЙэ†AtЙъІA“ "8іSODЙц†C‘Йэ†At3†A(Йш†CєЙэ†At3†A(0†AtЙш†CєЙэ†AtЙю†At3†A(0†At3†At 3†At3†At 3†At€џ$3†At€џЙш†CєЙэ†At3†A(0†AtЙш†CєЙэ†AtЙю†At3†A(0†At3†At 3†At3†At 3†At€€џџ"3†At€€џџЙш†CєЙэ†At3†A(0†AtЙш†CєЙэ†AtЙю†At3†A(0†At3†At 3†At3†At CBCB,„!2„!KOET:ѕ)іOFT)ьOGTTOœOHM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t і ѕ єё № яь ъlen†€шscratch†€tцout†€фS†€tтin†€. юidx†tэk†t    ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Љ Ќ ­ Ў Џ В Щ!@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glG.cil$in.cil$ex-+.cil$syќ.cil$db™ /1306 1284597038 100666 16701 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТA .e‘Lљ?.drectveQ, .cil$fg}@@.cil$gl—@@.cil$inœ @@.cil$ex•, @@.cil$sy.27@@.cil$db™`?@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_resample_1_2_coarse.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_resample_1_2_coarse.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2њ2€ovV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_1_2_coarse.cЄІќeqe}ЃЈшOх/У SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШ№ SKP_Silk_resample_1_2_coarse‚€Щ€v'€#€1ho  Лsize_tuo SKP_Silk_allpass_int‚€, ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO$O€ O €ўO3 f0" D ЄBEOœO.SS&№ F-ш-ц-ф-т-рLOSO/O2&э3†At'ЄCЎ 3†At€G2Є!­ K&э3†At'ЄCЎ 3†At€A2Є!­ KO3&ю3†At'ЄCЎ 3†At€r2Є!­ K&ю3†At'ЄCЎ 3†At€эh2Є!­ KO6&ы3†At2†AtK:я)№&ы3†At5†AtK)яЙы†AtЙшІA“ "8ёSO7&ьЙы†At3†At 2†AtKO8Йц†CєЙы†At3†A(Йр†CЎ Йь†At3†A(0Є!­ ,†At3†At 2†AtKO9Йц†CєЙы†AtЙшІA“ 3†A(Йр†CЎ Йь†At3†At3†A(0Є!­ ,†At3†At 2†AtKO:T:№)ёO<&ьЙшІA“ 3†At 2†AtKO>&o Н‚€/ЙшІA“ UІA“ Йц†CєЙь†At3†AU†Cє&ю3†A(0Є!­ U†AtЙт†CєU†CєЙц†CєU†C” LKO?&o Н‚€/ЙшІA“ UІA“ Йц†CєU†Cє&ю3†A(0Є!­ U†AtЙт†Cє3†AU†CєЙц†CєЙь†At3†AU†C” LKOA&o Н‚€/ЙшІA“ UІA“ Йц†CєЙь†At3†AU†Cє&э3†A(0Є!­ U†AtЙт†Cє3†AU†CєЙц†CєЙшІA“ 3†AU†C” LKOB&o Н‚€/ЙшІA“ UІA“ Йц†CєЙшІA“ 3†AU†Cє&э3†A(0Є!­ U†AtЙт†Cє3†A U†CєЙц†CєЙь†At3†AU†C” LKOE&ы3†At2†AtK:є)ѕ&ы3†At5†AtK)єЙы†AtЙшІA“ "8іSOFЙф†C‘Йы†At3†A(Йц†CєЙы†At3†A(0†AtЙц†CєЙы†AtЙшІA“ 3†A(0†At3†At 3†At3†At 3†At€џ$3†At€џЙц†CєЙы†At3†A(0†AtЙц†CєЙы†AtЙшІA“ 3†A(0†At3†At 3†At3†At 3†At€€џџ"3†At€€џџЙц†CєЙы†At3†A(0†AtЙц†CєЙы†AtЙшІA“ 3†A(0†At3†At 3†At3†At CBCB,„!2„!KOGT:ѕ)іOHT)ъOGTTOœOKM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t і ѕ єё № яъ шlen†€цscratch†€tфout†€тS†€tрin†€. эA20c„€Dьidx†tюA21c„€Dыk†t    ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Љ Ќ ­ Ў Џ Щ!Ф"@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl.cil$in.cil$ex•,.cil$sy..cil$db™ /1347 1284597038 100666 16919 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТїA .e‘Lг@.drectveQ, .cil$fg }@@.cil$glI‰@@.cil$in/в @@.cil$ex=- @@.cil$syќ>8@@.cil$db™:@@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_resample_1_2.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_resample_1_2.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2њ2€ovEV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_1_2.cyIЦЂ–5е(ЮАuЬпЛ`@У SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШх SKP_Silk_resample_1_2‚€Щ€v'€#€_ho рс Лsize_tuo SKP_Silk_allpass_int‚€, ЃSA_AttrTarget€)р$A20_Resample_1_2„€€ЅАSA_Parameter€)†3strnlen†€с$A21_Resample_1_2„€€ЅЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ р€ц€v'€rYс€Ъ€ѓ?€Оr[€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO$O€ O €ўO3 f0" D ЄBEOœO3SS&х F-ъ-ш-ц-ф-тLOSO4O7&э3†At2†AtK:я)№&э3†At5†AtK)яЙэ†AtЙъІA“ "8ёSO8&юЙэ†At3†At 2†AtKO9Йш†CєЙэ†At3†A(Йт†CЎ Йю†At3†A(0Є!­ ,†At3†At 2†AtKO:Йш†CєЙэ†AtЙъІA“ 3†A(Йт†CЎ Йю†At3†At3†A(0Є!­ ,†At3†At 2†AtKO;T:№)ёO=&юЙъІA“ 3†At 2†AtKO@&o Н‚€/ЙъІA“ UІA“ Йш†CєЙю†At3†AU†Cє&с3†A(0„!U†AtЙф†CєU†CєЙш†CєU†C” LKOA&o Н‚€/ЙъІA“ UІA“ Йш†CєЙю†At3†AЙъІA“ 3†AU†Cє&с3†A(0„!U†AtЙф†Cє3†AU†CєЙш†CєЙю†At3†AU†C” LKOB&o Н‚€/ЙъІA“ UІA“ Йш†CєU†Cє&с3†A(0„!U†AtЙф†Cє3†AU†CєЙш†CєЙю†At3†AЙъІA“ 3†AU†C” LKOD&o Н‚€/ЙъІA“ UІA“ Йш†CєЙю†At3†AU†Cє&р3†A(0„!U†AtЙф†Cє3†A U†CєЙш†CєЙъІA“ 3†AU†C” LKOE&o Н‚€/ЙъІA“ UІA“ Йш†CєЙю†At3†AЙъІA“ 3†AU†Cє&р3†A(0„!U†AtЙф†Cє3†AU†CєЙш†CєЙю†At3†AU†C” LKOF&o Н‚€/ЙъІA“ UІA“ Йш†CєЙъІA“ 3†AU†Cє&р3†A(0„!U†AtЙф†Cє3†AU†CєЙш†CєЙю†At3†AЙъІA“ 3†AU†C” LKOI&э3†At2†AtK:є)ѕ&э3†At5†AtK)єЙэ†AtЙъІA“ "8іSOJЙц†C‘Йэ†At3†A(Йш†CєЙэ†At3†A(0†AtЙш†CєЙэ†AtЙъІA“ 3†A(0†At3†At 3†At3†At 3†At€џ$3†At€џЙш†CєЙэ†At3†A(0†AtЙш†CєЙэ†AtЙъІA“ 3†A(0†At3†At 3†At3†At 3†At€€џџ"3†At€€џџЙш†CєЙэ†At3†A(0†AtЙш†CєЙэ†AtЙъІA“ 3†A(0†At3†At 3†At3†At CBCB,„!2„!KOKT:ѕ)іOLT)ьOGTTOœONM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t і ѕ єё № яь ъlen†€шscratch†€tцout†€фS†€tтin†€. юidx†tэk†t    ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Љ Ќ ­ Ў Џ Щ!Ѕ%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$glI.cil$in/.cil$ex=-.cil$syќ.cil$db™ /1381 1284597038 100666 16627 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТг@ .e‘LЏ?.drectveQ, .cil$fg*}@@.cil$gl Ї@@.cil$inС @@.cil$exИ)Т @@.cil$sy­z7@@.cil$dbˆ'?@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_regularize_correlations_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_regularize_correlations_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2U2€ov V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_regularize_correlations_fix.c:CлСНф8Ув†вЛЅФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШ"SKP_Silk_regularize_correlations_FIX‚€ђ€(€#Ch Кsize_tu ЃSA_AttrTarget€)АSA_Parameter€)† strnlen†€ЎSA_Method€)†@ Лwchar_t!€ wcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOO€ O €ўO3 f0" D ЄBEOœO%SS&"F-N-L-J-HLOSO&O'&Q3†At2†AtK:R)S&Q3†At5†AtK)RЙQ†AtЙN†At"8TSO(ЙH†Cє3†A(ЙQ†AtЙN†AtЙQ†At3†AЙH†Cє3†A(ЙQ†AtЙN†AtЙQ†At3†A0†AtЙL†At2†AtKO)T:S)TO*ЙJ†Cє3†A(ЙL†At†AtKO+T)POGTTOœO,M   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t T S RP ND†tLnoise†tJxx†€tHXX†€t Qi†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ Љ ђ#@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg*.cil$gl .cil$in.cil$exИ).cil$sy­.cil$dbˆ /1430 1284597038 100666 24783 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТЏ` .e‘L‹_.drectveQ, .cil$fg }@@.cil$glI ‡@@.cil$inа@@.cil$ex{@б@@.cil$sywLP@@.cil$dbШУ^@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_range_coder.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_range_coder.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2н2€ovE V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_range_coder.cf,!љгфYsЯћН_ѕWФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШSKP_Silk_range_encoder‚€Ё€(€#€ѓhSKP_Silk_range_encoder_multi‚€ж€С,€З6h$SKP_Silk_range_decoder‚€Є€Н-€S €{h/SKP_Silk_range_decoder_multi‚€P€o5€E =h$2SKP_Silk_range_enc_init‚€}€ 6€ *h9SKP_Silk_range_dec_init‚€#€Љ7€% dh>SKP_Silk_range_coder_get_length†€[€ф9€Ž .hж ASKP_Silk_range_enc_wrap_up‚€}€о:€т €Фh>DSKP_Silk_range_coder_check_after_decoding‚€}€Г>€ь Rh> SKP_Silk_range_coder_state€ž SKP_Silk_range_coder_state€ž Мsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†4strnlen†€ЎSA_Method€)†@ Нwchar_t!Ћwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœOO€ O €ўO3 f0" D ЄBEOœO$SS&F-L-J-HLOSO%O&O)&SЙH†CŸ!3†At'†Cѕ0†Bu2†BuKO*&TЙH†CŸ!3†At '†Cѕ0†Bu2†BuKO+&UЙH†CŸ!3†At'†Cє0†At2†AtKO,&VЙH†CŸ!3†At'†CЂ%2†C KO.ЙH†CŸ!3†At'†Cє0†At8WSO/:NO0TO3)W&OЙL†C’!ЙJІA“ 3†A(0Є"‘!2†BuKO4&PЙL†C’!ЙJІA“ 3†At3†A(0Є"‘!2†BuKO5&QЙS†Bu2†BuKO6&SЙT†BuЙO†Bu†BuKO7&RЙT†BuЙP†BuЙO†Bu2†BuKO:ЙS†BuЙQ†Bu"8XSO<&YЙU†At2†AtKO=)[ЙV†C &Y3†At†At3†A(3‚ ‚ ,†At3†At8\:[)\O>TOA)XЙR†Bu3†Bu€џ 8]SOC&TЙR†Bu3†At 2†BuKODT:^)]SOEЙR†Bu3†Bu€џџ 8_SOG&TЙR†Bu3†At 2†BuKOHT:`)_SOJ&TЙR†Bu2†BuKOLЙU†AtЙH†CŸ!3†At'†Cє0†At#8aSOMЙH†CŸ!3†At'†Cє3†Atџ2†AtKON:NOOTOQ)aЙV†C &U3†At5†At3†A(ЙS†Bu3†At ,‚ 2‚ KOR&SЙS†Bu3†At 2†BuKOST)`OUЙU†AtЙH†CŸ!3†At'†Cє0†At#8cSOVЙH†CŸ!3†At'†Cє3†Atџ2†AtKOW:NOXTOZ)cЙV†C &U3†At5†At3†A(ЙS†Bu3†At ,‚ 2‚ KO[&SЙS†Bu3†At 2†BuKO\T)^O_ЙH†CŸ!3†At'†CѕЙS†Bu2†BuKO`ЙH†CŸ!3†At '†CѕЙT†Bu2†BuKOaЙH†CŸ!3†At'†CєЙU†At2†AtKObT)NOGTTO€ O €ўO3 f0" D ЄBEOœOkSS&F-k-i-g-eLOSOlOm&n3†At2†AtK:o)p&n3†At5†AtK)oЙn†AtЙkІA“ "8qSOn&Н‚€ЂЙi†C”!Йn†At3†A(0ІC“!U†C’!Йg†C” Йn†At3†A(0ІA“ UІA“ Йe†CŸ!U†CŸ!LKOoT:p)qOpT)mOGTTO€ O €ўO3 f0" D ЄBEOœOySS&$F-x-v-t-rLOSOzO{O~&Йt†CŸ!3†At'†Cѕ0†Bu2†BuKO&€Йt†CŸ!3†At '†Cѕ0†Bu2†BuKO€€&Йt†CŸ!3†At'†Cє0†At2†AtKO€&‚Йt†CŸ!3†At'†CЂ%3†A(2†C KO€ƒЙt†CŸ!3†At'†Cє0†At8ƒSO€…Йr†Cє3†At2†AtKO€†:zO€‡TO€‰)ƒ&|Йv†C’!Йx†At3†A(0Є"‘!2†BuKO€Š&}Й€†BuЙ|†Bu2†BuKO€‹Й}†BuЙ†Bu$8„SO€Œ)†3†At8‡SO€&{Йv†C’!&x3†At†At3†A(0Є"‘!2†BuKO€Ž&}Й€†BuЙ{†Bu2†BuKO€Й}†BuЙ†Bu!8ˆSO€:‡O€‘TO€’)ˆ&|Й{†Bu2†BuKO€”Й|†Bu3†At8‰SO€•Йt†CŸ!3†At'†Cє3†Atў2†AtKO€—Йr†Cє3†At2†AtKO€˜:zO€™TO€š)‰T:†)‡O€›T:Š)„SO€œ)Œ3†At8SO€&{Й|†Bu2†BuKO€ž&|Йv†C’!&x3†At†At3†A(0Є"‘!2†BuKO€Ÿ&}Й€†BuЙ|†Bu2†BuKO€ Й}†BuЙ†Bu$8ŽSO€Ё&x3†At6†AtKO€Ђ:O€ЃTO€Ѕ)ŽЙ|†Bu3†At€џџ8SO€ІЙt†CŸ!3†At'†Cє3†Atў2†AtKO€ЈЙr†Cє3†At2†AtKO€Љ:zO€ЊTO€Ћ)T:Œ)O€ЌT)ŠO€­Йr†CєЙx†At2†AtKO€Ў&Й€†BuЙ{†Bu†BuKO€Џ&~Й€†BuЙ|†BuЙ{†Bu2†BuKO€ВЙ~†Bu3†Bu€џ 8SO€Д&€Й~†Bu3†At 2†BuKO€ЕT:‘)SO€ЖЙ~†Bu3†Bu€џџ 8’SO€И&€Й~†Bu3†At 2†BuKO€КЙ†Bu3†At 8“SO€ЛЙt†CŸ!3†At'†Cє3†At§2†AtKO€НЙr†Cє3†At2†AtKO€О:zO€ПTO€Р)“T:”)’SO€Т&€Й~†Bu2†BuKO€ФЙ†Bu3†At 8•SO€ХЙt†CŸ!3†At'†Cє3†At§2†AtKO€ЧЙr†Cє3†At2†AtKO€Ш:zO€ЩTO€Ы)•&Й†Bu3†At 2†BuKO€ЭЙ†AtЙt†CŸ!3†At'†Cє0†At"8–SO€Я&Й‚†C &3†At5†At3†A(0‚ ,†Bu†BuKO€аTO€б)–T)”O€г&Й†Bu3†At 2†BuKO€еЙ†AtЙt†CŸ!3†At'†Cє0†At"8˜SO€з&Й‚†C &3†At5†At3†A(0‚ ,†Bu†BuKO€иTO€й)˜T)‘O€мЙ€†Bu3†At8šSO€нЙt†CŸ!3†At'†Cє3†Atќ2†AtKO€пЙr†Cє3†At2†AtKO€р:zO€сTO€ф)šЙt†CŸ!3†At'†CѕЙ†Bu2†BuKO€хЙt†CŸ!3†At '†CѕЙ€†Bu2†BuKO€цЙt†CŸ!3†At'†CєЙ†At2†AtKO€чT)zOGTTO€ O €ўO3 f0" D ЄBEOœO€ёSS&/F-Ѓ-Ё-Ÿ--›LOSO€ђO€ѓ&І3†At2†AtK:Ї)Ј&І3†At5†AtK)ЇЙІ†AtЙЃІA“ "8ЉSO€є&$Н‚€ЅЙЁ†C” ЙІ†At3†A(0ІA“ U†AtЙŸ†C”!ЙІ†At3†A(0ІC“!U†C’!Й†CŸ!U†CŸ!Й›†CєЙІ†At3†A(U†CєLKO€ѕT:Ј)ЉO€іT)ЅOGTTO€ O €ўO3 f0" D ЄBEOœO€ќSS&2F-ЊLOSO€ўЙЊ†CŸ!3†At'†Cє3†At€2†AtKO€џЙЊ†CŸ!3†At '†Cѕ3†At€џџ2†BuKO€ЙЊ†CŸ!3†At'†Cє3†At2†AtKO€ЙЊ†CŸ!3†At'†Cѕ3†At2†BuKO€ЙЊ†CŸ!3†At'†Cє3†At2†AtKO€T)ЌOGTTO€ O €ўO3 f0" D ЄBEOœO€ SS&9F-Б-Џ-­LOSO€ ЙБІA“ 3†At€$8ДSO€Й­†CŸ!3†At'†Cє3†Atј2†AtKO€:ГO€TO€)Д3†At€Ќ@†CƒЙБІA“ 3†BuU†BuЙЏ†C™"U†CЫ Й­†CŸ!3†At'‚Cа#U†CƒLKO€Й­†CŸ!3†At'†CєЙБІA“ 2†AtKO€Й­†CŸ!3†At'†Cє3†At2†AtKO€O€O€O€O€Й­†CŸ!3†At'†CѕЙЏ†C™"3†A(0Ђ˜",†Bu3†At ЙЏ†C™"3†A(0Ђ˜",†Bu3†At ЙЏ†C™"3†A(0Ђ˜",†Bu3†At ЙЏ†C™"3†A(0Ђ˜",†Bu 2†BuKO€Й­†CŸ!3†At '†Cѕ3†At€џџ2†BuKO€Й­†CŸ!3†At'†Cє3†At2†AtKO€T)ГOGTTO€ O €ўO3 f0" D ЄBEOœO€$SS&>F-М-КLOSO€%O€(&ПЙК†Cй"3†At'†C” 0ІA“ 3†At &ж Н†At€ЙК†Cй"3†At '†CЄ%0ІBЃ%3†AtU†AtL3†At2†AtKO€*ЙМ†CєЙП†At3†At3†At 2†AtKO€-ЙП†AtA†At:ОO€.T)ОOGTTO€ O €ўO3 f0" D ЄBEOœO€4SS&AF-РLOSO€5O€6O€9&ШЙР†CŸ!3†At'†Cѕ0†Bu3†At 2†BuKO€;&Х&>Н†At€\&ЦU†CєЙР†CŸ!U†Cй"L2†AtKO€>&ФЙХ†AtЙР†CŸ!3†At'†Cє0†At3†At 2†AtKO€@&Ш3†At€€ЙФ†At3†At †BuKO€A&Ш3†Bu€џџџџ3†AtЙФ†At †BuKO€DЙШ†Bu3†At€ 8ЩSO€F&УЙР†CŸ!3†At'†Cє0†At2†AtKO€G)ЫЙР†CŸ!3†At'†CЂ%&У3†At†At3†A(3‚ † ,†At3†At8Ь:Ы)ЬO€HTO€K)ЩЙР†CŸ!3†At'†Cє0†AtЙР†CŸ!3†At'†Cє0†At"8ЭSO€LЙР†CŸ!3†At'†CЂ%ЙР†CŸ!3†At'†Cє3†At5†At3†A(ЙШ†Bu3†At ,‚ 2† KO€MЙФ†At3†At$8ЯSO€NЙР†CŸ!3†At'†Cє0†AtЙР†CŸ!3†At'†Cє0†At"8аSO€OЙР†CŸ!3†At'†CЂ%ЙР†CŸ!3†At'†Cє3†At5†At3†A(ЙШ†Bu3†At ,‚ 2† KO€PTO€Q)аTO€R)ЯTO€U)ЭЙХ†At3†At 8вSO€V&Ч3†At€џЙХ†At3†At 2†AtKO€WЙЦ†At3†AtЙР†CŸ!3†At'†Cє0†At"8гSO€XЙР†CŸ!3†At'†CЂ%ЙЦ†At3†At3†A(ЙЧ†At† KO€YTO€Z)гTO€[)вT)ТOGTTO€ O €ўO3 f0" D ЄBEOœO€aSS&DF-дLOSO€bO€d&з&>Н†At€\&иU†CєЙд†CŸ!U†Cй"L2†AtKO€gЙи†At3†AtЙд†CŸ!3†At'†Cє0†At#8кSO€hЙд†CŸ!3†At'†Cє3†Atћ2†AtKO€i:жO€jTO€m)кЙз†At3†At 8лSO€n&й3†At€џЙз†At3†At 2†AtKO€oЙд†CŸ!3†At'†CЂ%Йи†At3†At3†A(0† ,†AtЙй†At Йй†At 8мSO€pЙд†CŸ!3†At'†Cє3†Atћ2†AtKO€q:жO€rTO€s)мTO€t)лT)жOGTTOœO€uM: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t ca`_^]\ [ XWN Lprob†€’Jdata†€HpsRC†€Ÿ Qbase_tmp†uPhigh_Q16†uOlow_Q16†uTrange_Q16†uRrange_Q32†uUbufferIx†tVbuffer†€ Sbase_Q32†u  YbufferIx_tmp†t      q p om knSymbols†€iprob†€”gdata†€epsRC†€Ÿ nk†t š˜–•”“’‘Ž Œ Љˆ‡ † „ƒz xprobIx†tvprob†€’tpsRC†€Ÿrdata†€t }base_tmp†u|high_Q16†u{low_Q16†u€range_Q16†u~range_Q32†ubufferIx†t‚buffer†€ base_Q32†u                  Љ Ј ЇЅ ЃnSymbols†€ЁprobStartIx†€Ÿprob†€”psRC†€Ÿ›data†€t Іk†t Ќ ЊpsRC†€Ÿ ДГ БbufferLength†€Џbuffer†€­psRC†€Ÿ  О МnBytes†€tКpsRC†€Y ПnBits†tгваЯЭЬ Ы ЩТ РpsRC†€Ÿ ЦnBytes†!tЧmask†tХbits_in_stream†tФbits_to_store†tУbufferIx_tmp†tШbase_Q24†u      млкж дpsRC†€Ÿ иnBytes†!tйmask†tзbits_in_stream†t     ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёз ž!. !tuƒ єѕƒ ˆ ‹ Œ Ž  ‘ “ ” Љ Ы з ‘!’!“!”!ž!Ÿ!Ё!Ђ!Є!Ѕ!˜"™"Ѓ"а"й"л"м"§"а#ж#Ђ%Ѓ%Є%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$glI .cil$in.cil$ex{@.cil$syw.cil$dbШ /1463 1284597038 100666 18296 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТXG .e‘L4F.drectveQ, .cil$fg}@@.cil$gl8 —@@.cil$inЯ@@.cil$ex--а@@.cil$syŽ §;@@.cil$dbЉ‹E@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_quant_LTP_gains_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_quant_LTP_gains_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2p2€ov4 V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_quant_ltp_gains_fix.cђWAкН‚bIЭј8SiДLєФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШДSKP_Silk_quant_LTP_gains_FIX‚€€(€#€hэю№џSKP_Silk_LTP_vq_sizes† €]юSKP_Silk_LTP_gain_CDF_ptrs† €_SKP_Silk_VQ_WMat_EC_FIX‚€  Кsize_tuэSKP_Silk_LTP_gain_BITS_Q6_ptrs† €€ ЃSA_AttrTarget€)АSA_Parameter€)† strnlen†€№SKP_Silk_LTP_gain_middle_avg_RD_Q14†€ЎSA_Method€)†@ Лwchar_t!€ wcsnlen†€џSKP_Silk_LTP_vq_ptrs_Q14† €€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOO€ O €ўO3 f0" D ЄBEOœO&SS&ДF-R-P-N-L-J-HLOSO'O(O)O*O+O,O-O5&`3†At€џџџ2†AtKO6&V3†At2†AtK:a)b&V3†At5†AtK)aЙV†At3†At"8cSO7&Y&юЙV†At3†A(0ІC“!2†C’!KO8&Z&эЙV†At3†A(0ІCН 2†CЎ KO9&[&џЙV†At3†A(0ІCН 2†CЎ KO:&X&ЙV†At3†A(0ІA“ 2†AtKO=&]ЙN†C” 2†C” KO>&\ЙH†C‘2†CЎ KO@&_3†At2†AtKOA&U3†At2†AtK:d)e&U3†At5†AtK)dЙU†At3†At"8fSOCODOEOFOGOHOIOJOKOL&Н‚€ЁЙX†AtU†AtЙP†AtUІA“ ЙZ†CЎ U†CЎ Й[†CЎ U†CЎ Й]†C” U†C” Й\†CЎ U†CЎ &^U†Cє&WЙU†At3†A(U†CєLKON&_Й_†AtЙ^†At3†Bu€€ 3†At€џџџЙ_†AtЙ^†AtCB2†AtKOP&\3†A †CЎ KOQ&]3†Ad†C” KORT:e)fOU&_3†At€ўџџЙ_†At"3†At€ўџџЙ_†AtCB2†AtKOWЙ_†AtЙ`†At"8gSOX&`Й_†At2†AtKOY3†At€Ќ@†Cƒ3†BuU†Bu&WU†CЫ ЙJ†CєU†CƒLKOZЙL†CєЙV†At2†AtKO[TO^)gЙR†At8iЙ_†AtЙ№ІA“ "8iSO_:cO`TOa)iT:b)cOc&[&џЙL†Cє0†At3†A(0ІCН 2†CЎ KOd&U3†At2†AtK:j)k&U3†At5†AtK)jЙU†At3†At"8lSOe&V3†At2†AtK:m)n&V3†At5†AtK)mЙV†At3†At"8oSOfЙH†C‘ЙU†At3†AtЙV†At3†A(Й[†CЎ ЙV†AtЙJ†CєЙU†At3†A(0†At3†At3†A(0Є!­ 2„!KOgT:n)oOhT:k)lOiT)TOGTTOœOkM   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t o n ml k jigf e dc b aT RlowComplexity†tPmu_Q8†tNW_Q18†€Lperiodicity_index†€tJcbk_index†€tHB_Q14†€ `min_rate_dist†tZcl_ptr†€.[cbk_ptr_Q14†€.Ycdf_ptr†€’Wtemp_idx†Ё€c]W_Q18_ptr†€\b_Q14_ptr†€.Vk†t_rate_dist†t^rate_dist_subfr†!tXcbk_size†tUj†t        ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё !tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Љ ­ Ў Н Ы у ’!“!н"п"€#“$ %Ё%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl8 .cil$in.cil$ex--.cil$syŽ .cil$dbЉ/1504 1284597038 100666 18200 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТјF .e‘LдE.drectveQ, .cil$fg}@@.cil$gl @@.cil$in“@@.cil$exI-”@@.cil$sy-н<@@.cil$dbЪ E@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_pulses_to_bytes.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_pulses_to_bytes.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2r2€ov V €џџ€€џџ*€џџ+€џџ,€џџИc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьPc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЕc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_pulses_to_bytes.cAKvўдЊž!№k‡G$ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYu,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_PФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШGSKP_Silk_pulses_to_bytes†€в€(€#€'h !SKP_Silk_NLSF_CB_struct€– SKP_Silk_detect_SWB_state€ "SKP_Silk_encoder_state€ё SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_LP_state€  SKP_Silk_detect_SWB_state€ SKP_Silk_range_coder_state€ž ѕSKP_Silk_VAD_state€ №SKP_SILK_LBRR_struct€ф SKP_Silk_range_coder_state€ž Йsize_tu SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)АSA_Parameter€)† strnlen†€ЎSA_Method€)†@ Кwchar_t!€ wcsnlen†€ SKP_Silk_VAD_state€ SKP_Silk_LP_state€  ]SKP_Silk_encoder_state€ё єSKP_SILK_LBRR_struct€ф [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЗO€ OЖO8OOOЖO?OЕOOPOOЖOPOOЕOOœO O$ OO% O& O' OЖO' OO( OOЖO( OO' OO& O#Ou OOЖOu OO& O\O% O&O’ OOЖO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€O$ OOсOOтOсOO& OOсO O$ OуOO& OуOO% OOуO OсOOуO!O$ OФOOсOФOOуOOФO O$ O"OOOO% OO OOO& OOOOOO O$ OOO!OуOOO"OO!O$ OOO"OOOO#OOOO$OOO$ O#OœO!O€ O €ўO3 f0" D ЄBEOœO-SS&GF-J-HLOSO.O/O1&OЙH†CГ!3†At€Ь'†Cє0†At3†At2†AtKO4&PЙJ†Cє2†CєKO5&S3†At2†AtKO6&N3†At2†AtK:T)U&N3†At5†AtK)TЙN†AtЙO†At"8VSO7&Q3†At2†AtKO8&M3†At2†AtK:W)X&M3†At†AtK)WЙM†At3†At"8YSO9&QЙP†CєЙM†At3†At3†A(0†At3†At$ЙP†CєЙM†At3†At3†A(0†AtЙP†CєЙM†At3†At3†A(0†AtCB†AtKO:&QЙP†CєЙM†At3†At3†A(0†At3†At$ЙP†CєЙM†At3†At3†A(0†AtЙP†CєЙM†At3†At3†A(0†AtCB†AtKO;&QЙP†CєЙM†At3†At3†A(0†At3†At$ЙP†CєЙM†At3†At3†A(0†AtЙP†CєЙM†At3†At3†A(0†AtCB†AtKO<&QЙP†CєЙM†At3†At3†A(0†At3†At$ЙP†CєЙM†At3†At3†A(0†AtЙP†CєЙM†At3†At3†A(0†AtCB†AtKO=T:X)YO?&RЙQ†At,„!,†AtЙQ†At,„!,†At3†At 3†At€њлџџЙQ†At,„!,†AtЙQ†At,„!,†At3†At€џџ 3†At€њлџџ3†At 2†AtKO@&RЙR†At3†At€џџ$3†At€џџЙR†At3†At€№џ"3†At€№џЙR†AtCBCB3†At 2†AtKOA&RЙQ†At,„!,†At3†At€і=†AtKOB&R3†At€ш0†AtKOD&SЙR†At†AtKOF&P3†A@†CєKOGT:U)VOI&SЙS†At3†At 3†At3†At 2†AtKOJ&SЙS†At3†At€џ$3†At€џЙS†At3†At€€џџ"3†At€€џџЙS†AtCBCB2†AtKOLЙS†AtA†At:LOMT)LOGTTOœONM   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t Y X WV U TL Jq†€tHpsEncC†€Г Oiter†tRnBytes†tMi†tQsum_abs_val†tPq_ptr†€tSacc_nBytes†tNj†t    ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёз ž!о –!Ž!›!Ў!ё!р!ф!ь!Œ"э!Ž"ю!ˆ" !tuєƒ ˆ ‹ Œ Ž  ‘ Љ з о Ž!–!›!ž!Ў!Г!р!ф!ь!э!ю!ё!ˆ"Œ"Ž"в#@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl .cil$in.cil$exI-.cil$sy-.cil$dbЪ/1541 1284597038 100666 20211 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТгN .e‘LЏM.drectveQ, .cil$fg}@@.cil$glМ“@@.cil$inO@@.cil$exV1P@@.cil$syоІC@@.cil$db+„L@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_process_NLSFs_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_process_NLSFs_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2„2€ovИV €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_process_nlsfs_fix.cс Ібlизе С‡ЏИЌаФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШЛSKP_Silk_process_NLSFs_FIX‚€€(€#€ЩhЊЦба $SKP_Silk_NLSF_CB_struct€– ѓSKP_Silk_encoder_control_FIX€ў ЬSKP_Silk_encoder_state_FIX€М ЦSKP_Silk_predict_state_FIX€о ЗSKP_Silk_prefilter_state_FIX€з БSKP_Silk_shape_state_FIX€в aSKP_Silk_encoder_control€  %SKP_Silk_encoder_state€ё SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_LP_state€  SKP_Silk_detect_SWB_state€ SKP_Silk_range_coder_state€ž јSKP_Silk_VAD_state€ ѓSKP_SILK_LBRR_struct€ф чSKP_Silk_nsq_state€к SKP_Silk_range_coder_state€ž Кsize_tuбSKP_Silk_interpolate‚€чЊSKP_Silk_NLSF_VQ_weights_laroia‚€1 ЖSKP_Silk_shape_state_FIX€вЦSKP_Silk_NLSF2A_stable‚€‚ SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)АSA_Parameter€)† ХSKP_Silk_prefilter_state_FIX€з pSKP_Silk_encoder_control€  ђSKP_Silk_nsq_state€к strnlen†€ ђSKP_Silk_encoder_state_FIX€М ЫSKP_Silk_predict_state_FIX€оЎSA_Method€)†@ Лwchar_t!€ wcsnlen†€ SKP_Silk_VAD_state€ SKP_Silk_encoder_control_FIX€ў SKP_Silk_LP_state€  `SKP_Silk_encoder_state€ё їSKP_SILK_LBRR_struct€фаSKP_Silk_NLSF_MSVQ_encode_FIX‚€R SKP_Silk_detect_SWB_state€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOO€ O €ўO3 f0" D ЄBEOœO$SS&ЛF-L-J-HLOSO%O&O'O(O)O,O-O.O03‚KO13‚KO23‚KO33‚KO43‚KO9ЙJ†Cћ!3†Ath'†Cє0†At3†At8]SO<&Q3†AtB3†AtџЙH†C­!3†At€(Є'†Cє0†At,„!,†At3†At€<пЙH†C­!3†At€(Є'†Cє0†At,„!,†At3†At 2†AtKO=&R3†At€š3†AtѓЙH†C­!3†At€(Є'†Cє0†At,„!,†At3†At€@3ЙH†C­!3†At€(Є'†Cє0†At,„!,†At3†At 2†AtKO>T:f)]SOA&Q3†At€Є3†AtџЙH†C­!3†At€(Є'†Cє0†At,„!,†At3†At€ю|ЙH†C­!3†At€(Є'†Cє0†At,„!,†At3†At 2†AtKOB&R3†At€333†AtцЙH†C­!3†At€(Є'†Cє0†AtЙJ†Cћ!3†At€p'†Cє0†At,„!,†At3†At€€fЙH†C­!3†At€(Є'†Cє0†AtЙJ†Cћ!3†At€p'†Cє0†At,„!,†At3†At 2†AtKOCT)fOD3‚KOE3‚KOF3‚KOG3‚KOI&QЙQ†At3†At$ЙQ†At3†AtCB2†AtKOLOM&ЊН‚€KЙH†C­!3†At€ќ'†Cє0†AtUІA“ ЙL†CєU†C” &PU†CєLKONOQ&OЙH†C­!3†At€є'†Cє0†At3†AtЙJ†Cћ!3†AtD'†Cє0†At3†At"2†AtKORЙO†At8sSOUOV&бН‚€шЙH†C­!3†At€ќ'†Cє0†AtUІA“ ЙJ†Cћ!3†AtD'†Cє0†AtUІA“ ЙL†CєU†C” ЙH†C­!3†At€рi'†C„!U†C” &UU†CєLKOYOZ&ЊН‚€KЙH†C­!3†At€ќ'†Cє0†AtUІA“ &UU†C” &VU†CєLKO[O^&SЙJ†Cћ!3†AtD'†Cє0†At,„!,†AtЙJ†Cћ!3†AtD'†Cє0†At,„!,†At3†At 2†AtKO_&W3†At2†AtK:x)y&W3†At5†AtK)xЙW†AtЙH†C­!3†At€ќ'†Cє0†At"8zSO`&PЙW†At3†A(&PЙW†At3†A(0†At3†At &VЙW†At3†A(0†At3†At ЙS†At,„!,†At&VЙW†At3†A(0†At3†At€џџ ЙS†At,„!,†At3†At 2†AtKOa3‚KOb3‚KOcT:y)zOdTOg)s&TЙH†C­!3†At€ф '†Cц!ЙJ†Cћ!3†Ath'†Cє0†At3†A(0†Cр 2†Cр KOjOkOlOm&аН‚€žЙH†C­!3†At€ '†Cє0†AtUІA“ ЙH†C­!3†At€ќ'†Cє0†AtUІA“ ЙH†C­!3†At€ '†Cє0†AtUІA“ ЙR†AtUІA“ ЙQ†AtUІA“ &PU†C” ЙH†C­!3†At€рi'†C„!U†C” ЙT†Cр U†Cр ЙL†CєU†CєЙJ†Cћ!3†At'†Cж"U†CєLKOnOq&ЦН‚€ƒЙH†C­!3†At€ќ'†Cє0†AtUІA“ ЙL†CєU†C” ЙJ†Cћ!3†At€˜'†CМ"3†A (U†C‘LKOsЙO†At8SOuOv&бН‚€шЙH†C­!3†At€ќ'†Cє0†AtUІA“ ЙJ†Cћ!3†AtD'†Cє0†AtUІA“ ЙL†CєU†C” ЙH†C­!3†At€рi'†C„!U†C” &UU†CєLKOy&ЦН‚€ƒЙH†C­!3†At€ќ'†Cє0†AtUІA“ &UU†C” ЙJ†Cћ!3†At€˜'†CМ"3†A(U†C‘LKO{T:‚)SO}3†At€Ќ@†CƒЙH†C­!3†At€ќ'†Cє0†At3†BuU†BuЙJ†Cћ!3†At€˜'†CМ"3†A (U†CЫ ЙJ†Cћ!3†At€˜'†CМ"3†A(U†CƒLKO~T)‚OT)NOGTTOœO€€M   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t ‚z y xsf]N LpNLSF_Q15†€tJpsEncCtrl†€ћHpsEnc†€­ Wi†tTpsNLSF_CB†€`QNLSF_mu_Q15†tUpNLSF0_temp_Q15†@Ё€PSi_sqr_Q15†tOdoInterpolate†tVpNLSFW0_temp_Q6†@Ё€PRNLSF_mu_fluc_red_Q16†tPpNLSFW_Q6†@Ё€P        ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёз ž!о –!Ž!›!Ќ!М!Ў!ё!Џ!в!А!з!Б!о!В!к!Д!Š"р!ф!ь!Œ"э!Ž"ю!ˆ"њ!ў!C!tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Љ Ы а з о р ‚!ƒ!„!Ž!–!›!ž!Ќ!­!Ў!Џ!А!Б!В!Д!М!в!з!к!о!р!ф!ц!ь!э!ю!ё!њ!ћ!ў!ˆ"Š"Œ"Ž"М"ж"ч#ш#$Б$Ы$в$ž%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glМ.cil$in.cil$exV1.cil$syо.cil$db+ /1580 1284597038 100666 21374 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТ^S .e‘L:R.drectveQ, .cil$fg}@@.cil$glБ“@@.cil$inD@@.cil$exъ5E@@.cil$syё/H@@.cil$db Q@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_process_gains_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_process_gains_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2Х2€ov­V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_process_gains_fix.c/-ж]žђWвед›*тФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж DSKP_Silk_SQRT_APPROX†€€я€ЄZШ=ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШXSKP_Silk_process_gains_FIX‚€€(€#€hќ џ DЖ ѓSKP_Silk_encoder_control_FIX€ў ЬSKP_Silk_encoder_state_FIX€М ЦSKP_Silk_predict_state_FIX€о ЗSKP_Silk_prefilter_state_FIX€з БSKP_Silk_shape_state_FIX€в aSKP_Silk_encoder_control€  %SKP_Silk_encoder_state€ё SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_LP_state€  SKP_Silk_detect_SWB_state€ SKP_Silk_range_coder_state€ž јSKP_Silk_VAD_state€ ѓSKP_SILK_LBRR_struct€ф чSKP_Silk_nsq_state€к SKP_Silk_range_coder_state€ž Кsize_tu ЖSKP_Silk_shape_state_FIX€в SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)ќ SKP_Silk_sigm_Q15†€АSA_Parameter€)†ЖSKP_Silk_gains_quant‚€( ХSKP_Silk_prefilter_state_FIX€з pSKP_Silk_encoder_control€  ђSKP_Silk_nsq_state€к strnlen†€ ђSKP_Silk_encoder_state_FIX€Мџ SKP_Silk_log2lin†€ ЫSKP_Silk_predict_state_FIX€оЎSA_Method€)†@ Лwchar_t!€ wcsnlen†€ SKP_Silk_VAD_state€ SKP_Silk_encoder_control_FIX€ў SKP_Silk_LP_state€  `SKP_Silk_encoder_state€ё їSKP_SILK_LBRR_struct€ф $SKP_Silk_NLSF_CB_struct€– SKP_Silk_detect_SWB_state€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOO€ O €ўO3 f0" D ЄBEOœO#SS&XF-J-HLOSO$&MЙH†C­!3†At€\a'†Cа!2†CЯ!KO%O&O)ЙJ†Cћ!3†Ath'†Cє0†At3†At8USO+&O&ќ Н†At€ЙJ†Cћ!3†At€t'†Cє0†At3†At€3†At 3†At3†At U†AtL2†AtKO,&N3†At2†AtK:V)W&N3†At5†AtK)VЙN†At3†At"8XSO-ЙJ†Cћ!3†At€€'†Cы ЙN†At3†A(ЙJ†Cћ!3†At€€'†Cы ЙN†At3†A(0†AtЙJ†Cћ!3†At€€'†Cы ЙN†At3†A(0†At3†At ЙO†At,„!,†AtЙJ†Cћ!3†At€€'†Cы ЙN†At3†A(0†At3†At€џџ ЙO†At,„!,†At3†At 2†AtKO.T:W)XO/TO3)UO4&P&џ Н†At€3†At€€"ЙJ†Cћ!3†At€l'†Cє0†At3†At 3†At€{T3†At€€"ЙJ†Cћ!3†At€l'†Cє0†At3†At€џџ 3†At€{T3†At UІA“ LЙH†C­!3†At€а'†Cє0†At2†AtKO6&N3†At2†AtK:d)e&N3†At5†AtK)dЙN†At3†At"8fSO8&SЙJ†Cћ!3†At€Œ'†Cы ЙN†At3†A(0†At2†AtKO9&TЙS†At3†At ЙP†At,„!,†AtЙS†At3†At€џџ ЙP†At,„!,†At3†At ЙS†AtЙP†At3†At 3†At3†At 2†AtKO:ЙJ†Cћ!3†At€œ'†Cы ЙN†At3†A(0†At3†At$8kSO;ЙJ†Cћ!3†At€œ'†Cы ЙN†At3†A(0†At3†At "8lSO<&TЙJ†Cћ!3†At€œ'†Cы ЙN†At3†A(0†At3†AtЙT†At3†At ЙT†At3†At ЙT†AtЙJ†Cћ!3†At€œ'†Cы ЙN†At3†A(0†At3†At 3†At3†At CB2†AtKO=T:m)lSO>&T3†At2†AtKO?T)mO@T:n)kЙJ†Cћ!3†At€œ'†Cы ЙN†At3†A(0†At3†At 8oSOAЙT†At3†At€џџџЙJ†Cћ!3†At€œ'†Cы ЙN†At3†A(0†At $8pSOB&T3†At€џџџ2†AtKOCT:q)pSOD&TЙT†AtЙJ†Cћ!3†At€œ'†Cы ЙN†At3†A(0†At 2†AtKOET)qOFTOG)o)n&QЙJ†Cћ!3†At€€'†Cы ЙN†At3†A(0†At2†AtKOH&RЙT†AtЙQ†At,ˆЙQ†At,ˆ3†At ,†At3†Bu€€ 3†AtЙT†AtЙQ†At,ˆЙQ†At,ˆ3†At ,†At 3†Bu€€ 3†At 3†At€€ЙT†AtЙQ†At,ˆЙQ†At,ˆ3†At ,†AtCBЙT†AtЙQ†At,ˆЙQ†At,ˆ3†At ,†At 3†Bu€€ 3†At3†At€џџџЙT†AtЙQ†At,ˆЙQ†At,ˆ3†At ,†AtCBCB2†AtKOIЙR†At3†At€џ"8}SOK&RЙT†At3†At ЙQ†At3†At ЙQ†At,„!,†AtЙQ†At3†At€џџ ЙQ†At,„!,†At3†At ЙQ†AtЙQ†At3†At 3†At3†At 2†AtKOL3‚KOM&Q&DН†At€ЙR†AtU†AtL2†AtKONЙJ†Cћ!3†At€€'†Cы ЙN†At3†A(ЙQ†At3†At€џџ$3†At€џџЙQ†At3†At€€џ"3†At€€џЙQ†AtCBCB3†At 2†AtKOOT:ˆ)}SOP&Q&DН†At€ЙR†AtU†AtL2†AtKOQЙJ†Cћ!3†At€€'†Cы ЙN†At3†A(ЙQ†At3†At€џ$3†At€џЙQ†At3†At€€џџ"3†At€€џџЙQ†AtCBCB3†At 2†AtKORT)ˆOST:e)fOVOW&ЖН‚€ЙH†C­!3†At€и '†Cє0†AtUІA“ ЙM†CЯ!3†At'†Cы U†CєЙJ†Cћ!3†At€€'†CЭ"U†CєЙJ†Cћ!3†AtH'†CЭ"U†CєLKOYЙJ†Cћ!3†Ath'†Cє0†At3†At8ŽSOZЙJ†Cћ!3†At€t'†Cє0†AtЙJ†Cћ!3†At€ˆ'†Cє0†At3†At 3†At€€$8SO[ЙJ†Cћ!3†Atd'†Cє3†At2†AtKO\T:)SO]ЙJ†Cћ!3†Atd'†Cє3†At2†AtKO^T)O_TOb)ŽЙJ†Cћ!3†Ath'†Cє0†At3†At8‘SOcOdOeOfOgЙJ†Cћ!3†At€\'†Cє3†At€33†AtЙH†C­!3†At€(Є'†Cє0†At,„!,†At3†AtЙH†C­!3†At€(Є'†Cє0†At,„!,†At3†At 3†AtЙJ†Cћ!3†At€`'†Cє0†At,„!,†At3†At€ЭЙJ†Cћ!3†At€`'†Cє0†At,„!,†At3†At 3†At€ЭЙJ†Cћ!3†Atd'†Cє0†At,„!,†At3†AtЙJ†Cћ!3†At€d'†Cє0†At,„!,†At3†At€šЙJ†Cћ!3†At€d'†Cє0†At,„!,†At3†At 2†AtKOhT:Њ)‘SOiOjOkOlOmЙJ†Cћ!3†At€\'†Cє3†At€33†AtЙH†C­!3†At€(Є'†Cє0†At,„!,†At3†AtЙH†C­!3†At€(Є'†Cє0†At,„!,†At3†At 3†AtЙJ†Cћ!3†At€`'†Cє0†At,„!,†At3†At€fЙJ†Cћ!3†At€`'†Cє0†At,„!,†At3†At 3†At€šЙJ†Cћ!3†Atd'†Cє0†At,„!,†At3†AtЙJ†Cћ!3†At€d'†Cє0†At,„!,†At3†At€šЙJ†Cћ!3†At€d'†Cє0†At,„!,†At3†At 2†AtKOnT)ЊOo3‚KOp3‚KOrT)LOGTTOœOsM   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t Њ‘Žˆ}qponmlkf e dX W VUL JpsEncCtrl†€ћHpsEnc†€­ Qgain†tOs_Q16†tTResNrgPart†tSResNrg†tMpsShapeSt†€ЯPInvMaxSqrVal_Q16†tRgain_squared†tNk†t                  ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёз ž!о –!Ž!›!Ќ!М!Ў!ё!Џ!в!А!з!Б!о!В!к!Д!Š"р!ф!ь!Œ"э!Ž"ю!ˆ"њ!ў!;!tuєƒ ˆ ‹ Œ Ž  ‘ ’ “ Љ з о ы Ž!–!›!ž!Ќ!­!Ў!Џ!А!Б!В!Д!М!Я!а!в!з!к!о!р!ф!ь!э!ю!ё!њ!ћ!ў!‚"ˆ"Š"Œ"Ž"Э"$‚$Ј$%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glБ.cil$in.cil$exъ5.cil$syё.cil$db/1619 1284597038 100666 22486 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТЖW .e‘L’V.drectveQ, .cil$fg}@@.cil$glЮ‹@@.cil$inY@@.cil$ex—7Z@@.cil$syz ёI@@.cil$db'kU@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_prefilter_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_prefilter_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2д2€ovЪV €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_prefilter_fix.cnЦаTЄЌІ3рќZ5vHj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_perceptual_parameters_fix.hкKэфЖ'Šџм4'rƒФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШJSKP_Silk_prefilter_FIX‚€К€(€#€ђhЄ YYSKP_Silk_prefilt_FIX‚€š€Ž1€Œ €SШ ѓSKP_Silk_encoder_control_FIX€ў ЬSKP_Silk_encoder_state_FIX€М ЦSKP_Silk_predict_state_FIX€о ЗSKP_Silk_prefilter_state_FIX€з БSKP_Silk_shape_state_FIX€в aSKP_Silk_encoder_control€  %SKP_Silk_encoder_state€ё SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_LP_state€  SKP_Silk_detect_SWB_state€ SKP_Silk_range_coder_state€ž јSKP_Silk_VAD_state€ ѓSKP_SILK_LBRR_struct€ф чSKP_Silk_nsq_state€к SKP_Silk_range_coder_state€ž Кsize_tuЄ SKP_Silk_MA_Prediction_Q13‚€D ЖSKP_Silk_shape_state_FIX€в SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)АSA_Parameter€)† ХSKP_Silk_prefilter_state_FIX€з pSKP_Silk_encoder_control€  ђSKP_Silk_nsq_state€к strnlen†€ ђSKP_Silk_encoder_state_FIX€М ЫSKP_Silk_predict_state_FIX€оЎSA_Method€)†@ Лwchar_t!€ wcsnlen†€ SKP_Silk_VAD_state€ SKP_Silk_encoder_control_FIX€ў SKP_Silk_LP_state€  `SKP_Silk_encoder_state€ё їSKP_SILK_LBRR_struct€ф $SKP_Silk_NLSF_CB_struct€– SKP_Silk_detect_SWB_state€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOOHOOœOO€ O €ўO3 f0" D ЄBEOœO1SS&JF-`-^-\-ZLOSO2&cЙZ†C­!3†At€la'†Cд!2†Cг!KO3O4O5O6O7O8O9O:O;O>&jЙ`†CЎ 2†CЎ KO?&kЙ^†C‘2†C‘KO@&fЙc†Cг!3†At€d'†Cє0†At2†AtKOA&e3†At2†AtK:t)u&e3†At5†AtK)tЙe†At3†At"8vSOCЙ\†CИ#3†Ath'†C” 0ІA“ 3†At8wSOD&fЙ\†CИ#3†Atl'†C—%Йe†At3†A(0ІA“ 2†AtKOETOH)w&mЙ\†CИ#3†At€L'†C—%Йe†At3†A(0ІA“ 3†At 3†At€@Й\†CИ#3†At€,'†C—%Йe†At3†A(0ІA“ ,„!,†AtЙ\†CИ#3†At€L'†C—%Йe†At3†A(0ІA“ 3†At€џџ 3†At€@Й\†CИ#3†At€,'†C—%Йe†At3†A(0ІA“ ,„!,†At3†At 2†AtKOI3‚KOJ&pЙm†At3†At 2†AtKOK&pЙm†At3†At 3†At †AtKOL&nЙ\†CИ#3†At€<'†C—%Йe†At3†A(0ІA“ 2†AtKOM&oЙ\†CИ#3†At€ '†C—%Йe†At3†A(0ІA“ 2†AtKON&iЙ\†CИ#3†At€'†CЬ"Йe†At3†At3†A(2†CЎ KOQ3†At€­@†CƒЙZ†C­!3†At€ј'†Cє0†At3†BuU†Bu3†AtU†At&rU†CƒLKOROS&Є Н‚€˜ЙZ†C­!3†At€ј'†Cє0†AtU†AtЙZ†C­!3†At€а'†Cє0†AtЙZ†C­!3†At€ј'†Cє0†AtU†At&sU†C‘&rU†CєЙi†CЎ U†CЎ Йj†CЎ ЙZ†C­!3†At€ј'†Cє0†At3†AU†CЎ LKOU&l&sЙZ†C­!3†At€ј'†Cє0†At3†A2†C‘KOX&hЙ\†CИ#3†At€'†C—%Йe†At3†A(0ІA“ 3†At 3†At3†At 2†AtKOY&g3†At€Уѕ(Й\†CИ#3†At€,'†C—%Йe†At3†A(0ІA“ ,„!,†AtЙm†At,„!,†At2†AtKOZ&gЙg†AtЙ\†CИ#3†At€d'†C” 0ІA“ ,„!,†At3†At€і2†AtKO[&gЙg†At3†At Й\†CИ#3†At€'†C—%Йe†At3†A(0ІA“ ,„!,†AtЙg†At3†At€џџ Й\†CИ#3†At€'†C—%Йe†At3†A(0ІA“ ,„!,†At3†At 2†AtKO\&gЙg†At3†At 3†At3†At 2†AtKO]&hЙg†At3†At€џ$3†At€џЙg†At3†At€€џџ"3†At€€џџЙg†AtCBCB3†At †AtKOc&q3†A(Йl†C‘3†A(0„!,†AtЙh†At,„!,†AtЙc†Cг!3†At€\'†Cє0†At,„!,†AtЙh†At3†At 2†AtKOd&d3†At2†AtK:“)”&d3†At5†AtK)“Йd†AtЙZ†C­!3†At€а'†Cє0†At"8•SOe&qЙd†At3†A(Йl†C‘Йd†At3†A(0„!,†AtЙh†At,„!,†AtЙl†C‘Йd†At3†At3†A(0„!,†AtЙh†At3†At 2†AtKOfT:”)•OgЙc†Cг!3†At€\'†CєЙl†C‘ЙZ†C­!3†At€а'†Cє0†At3†At3†A(0„!2†AtKOiOj&YН‚€›ЙZ†C­!3†At€а'†Cє0†AtU†AtЙf†AtU†AtЙo†AtU†AtЙn†AtU†AtЙp†AtU†AtЙk†C‘U†C‘&qU†CєЙc†Cг!U†Cг!LKOl&jЙZ†C­!3†At€а'†Cє0†At3†A†CЎ KOm&kЙZ†C­!3†At€а'†Cє0†At3†A†C‘KOnT:u)vOpЙc†Cг!3†At€d'†CєЙ\†CИ#3†Atl'†C—%3†A (0ІA“ 2†AtKOqT)bOGTTO€ O €ўO3 f0" D ЄBEOœO~SS&YF-Њ-Ј-І-Є-Ђ- -ž-œLOSOO€€O€O€‚O€…&ЕЙœ†Cг!3†At'†CК"2†C‘KO€†&ЏЙœ†Cг!3†At€@'†Cє0†At2†AtKO€‡&ДЙœ†Cг!3†At€L'†Cє0†At2†AtKO€ˆ&ГЙœ†Cг!3†At€P'†Cє0†At2†AtKO€Š&­3†At2†AtK:Ж)З&­3†At5†AtK)ЖЙ­†AtЙЊ†At"8ИSO€‹ЙЈ†At3†At$8ЙSO€3‚KO€Ž&ЎЙЈ†AtЙЏ†At2†AtKO€&АЙЕ†C‘ЙЎ†At3†At3†At3†At€џ 3†A(0„!,†AtЙЂ†At,„!,†At2†AtKO€&АЙА†AtЙЕ†C‘ЙЎ†At3†At3†At€џ 3†A(0„!,†AtЙЂ†At3†At 2†AtKO€‘&АЙА†AtЙЕ†C‘ЙЎ†At3†At3†At3†At€џ 3†A(0„!,†AtЙЂ†At,„!,†At2†AtKO€’T:Х)ЙSO€“&А3†At2†AtKO€”T)ХO€–&ВЙД†At3†At ЙІ†At3†At ЙД†At3†At€џџ ЙІ†At3†At 3†At ЙГ†At3†At ЙІ†At,„!,†AtЙГ†At3†At€џџ ЙІ†At,„!,†At3†At 2†AtKO€—&БЙД†At3†At ЙЄ†At,„!,†AtЙД†At3†At€џџ ЙЄ†At,„!,†At3†At 2†AtKO€™&ДЙž†CєЙ­†At3†A(0†AtЙБ†At3†At 2†AtKO€š&ГЙД†AtЙВ†At3†At 2†AtKO€œ&ЏЙЏ†At3†At3†At€џ 2†AtKO€ЙЕ†C‘ЙЏ†At3†A(ЙГ†At3†At 3†At3†At 3†At€џ$3†At€џЙГ†At3†At 3†At3†At 3†At€€џџ"3†At€€џџЙГ†At3†At 3†At3†At CBCB,„!2„!KO€ŸЙ †C‘Й­†At3†A(ЙГ†AtЙА†At3†At 3†At3†At 3†At€џ$3†At€џЙГ†AtЙА†At3†At 3†At3†At 3†At€€џџ"3†At€€џџЙГ†AtЙА†At3†At 3†At3†At CBCB,„!2„!KO€ T:З)ИO€ЃЙœ†Cг!3†At€L'†CєЙД†At2†AtKO€ЄЙœ†Cг!3†At€P'†CєЙГ†At2†AtKO€ЅЙœ†Cг!3†At€@'†CєЙЏ†At2†AtKO€ІT)ЌOGTTOœO€ЇM   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t • ” “wv u tb `x†€.^xw†€\psEncCtrl†€ИZpsEnc†€­ oLF_shp_Q14†tnTilt_Q14†tcP†€гkpxw†€gtmp_32†tmHarmShapeGain_Q12†tjpx†€.hB_Q12†tpHarmShapeFIRPacked_Q12†trfilterState†@Ё€Pek†tqx_filt_Q12†€рЁ€Alpst_res†€iAR1_shp_Q13†€.sst_res„€Ё€œflag†tdj†t   ХЙИ З ЖЌ Њlength†tЈlag†tІLF_shp_Q14†tЄTilt_Q14†tЂHarmShapeFIRPacked_Q12†t xw†€žst_res_Q12†€tœP†€г ДsLF_AR_shp_Q12†tВn_LF_Q10†t­i†tЕLTP_shp_buf†€ГsLF_MA_shp_Q12†tЎidx†tЏLTP_shp_buf_idx†tАn_LTP_Q12†tБn_Tilt_Q10†t     ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёз ž!о –!Ž!›!Ќ!М!Ў!ё!Џ!в!А!з!Б!о!В!к!Д!Š"р!ф!ь!Œ"э!Ž"ю!ˆ"њ!ў!A!tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Љ Ў а з о Ž!–!›!ž!Ќ!­!Ў!Џ!А!Б!В!Д!М!в!г!д!з!к!о!р!ф!ь!э!ю!ё!њ!ў!ˆ"Š"Œ"Ž"К"С"Ь"И#К#Ф$—%˜%š%›%œ%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glЮ.cil$in.cil$ex—7.cil$syz .cil$db'/1654 1284597038 100666 32421 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТ…~ .e‘La}.drectveQ, .cil$fgњ}@@.cil$glлw@@.cil$in4R@@.cil$exЪY†@@.cil$syPl@@.cil$db V|@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_PLC.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_PLC.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2€2€ovзV €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.cˆ0|Дћ<э Ÿт;ЊMXФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ SKP_min_int†€€­€aШ SKP_min_32†€€Ы€ПШSKP_max_int†€€е€ШSKP_max_16„€€Z€LШ%SKP_max_32†€€ѓ€{Ш=SKP_Silk_CLZ_FRAC‚€€ш€$9Шж DSKP_Silk_SQRT_APPROX†€€я€ЄZШ=ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШДSKP_Silk_PLC_Reset‚€q€(€#hПSKP_Silk_PLC‚€H€()€IMhДШбШSKP_Silk_PLC_update‚€€К*€ю€‹hбSKP_Silk_PLC_conceal‚€€У1€г €зh д т   %HIJкSKP_Silk_PLC_glue_frames‚€€‚T€~€hж  %D !SKP_Silk_NLSF_CB_struct€–I$PLC_RAND_ATTENUATE_V_Q15„€€D ЖSKP_Silk_decoder_control€y ƒSKP_Silk_decoder_state€j {SKP_Silk_CNG_struct€o nSKP_Silk_PLC_struct€™ SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_range_coder_state€ž SKP_Silk_range_coder_state€ž Мsize_tuд SKP_Silk_bwexpander‚€T SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€) SKP_Silk_sum_sqr_shift‚€Hт SKP_Silk_LPC_inverse_pred_gain†€>АSA_Parameter€)† ‚SKP_Silk_CNG_struct€o4strnlen†€ЎSA_Method€)†@ Нwchar_t! zSKP_Silk_PLC_struct€™ УSKP_Silk_decoder_control€yЋwcsnlen†€H$HARM_ATT_Q15„€€D ЕSKP_Silk_decoder_state€jJ$PLC_RAND_ATTENUATE_UV_Q15„€€D H€И~€šyI€šy€ffJ€И~€3s[€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœOOOOœOO€ O €ўO3 f0" D ЄBEOœO'SS&ДF-KLOSO(ЙK†Cж 3†At€ 7'†CєЙK†Cж 3†At€р+'†Cє0†At3†At 2†AtKO)T)MOGTTO€ O €ўO3 f0" D ЄBEOœO2SS&ПF-V-T-R-P-NLOSO4ЙN†Cж 3†At€м+'†Cє0†AtЙN†Cж 3†At€d7'†Cє0†At 8YSO5&ДН‚€rЙN†Cж U†Cж LKO6ЙN†Cж 3†At€d7'†CєЙN†Cж 3†At€м+'†Cє0†At2†AtKO7TO9)YЙV†At8ZSO=&бН‚€JЙT†AtU†AtЙR†C‘U†C‘ЙP†Cє U†Cє ЙN†Cж U†Cж LKO>T:[)ZSOB&ШН‚€JЙT†AtU†AtЙR†C‘U†C‘ЙP†Cє U†Cє ЙN†Cж U†Cж LKOCT)[ODT)XOGTTO€ O €ўO3 f0" D ЄBEOœOOSS&ШF-b-`-^-\LOSOPOQOROT&iЙ\†Cж 3†At€ 7'†C•%2†C”%KOWЙ\†Cж 3†At€l7'†CєЙ^†Cє 3†At€Є'†Cє0†At2†AtKOX&e3†At2†AtKOYЙ^†Cє 3†At€Є'†Cє0†At3†At8jSO[&h3†At2†AtK:k)l&h3†At5†AtK)kЙh†AtЙ\†Cж 3†At€ф+'†Cє0†AtЙ^†Cє 3†At'†Cы 3†A (0†At"8mSO\&f3†At2†AtKO]&g3†At2†AtK:n)o&g3†At5†AtK)nЙg†At3†At"8pSO^&fЙ^†Cє 3†Atl'†CК"3†AtЙh†At3†AtЙg†At3†A(0†!,†At†AtKO_T:o)pO`Йf†AtЙe†At$8qSOa&eЙf†At2†AtKObOd3†At€Ќ@†Cƒ3†Bu U†BuЙ^†Cє 3†Atl'†CК"3†AtЙh†At,„!,†At3†At3†A(U†CЫ Йi†C”%3†At'„C–%U†CƒLKOfЙi†C”%3†At'†CєЙ^†Cє 3†At'†Cы 3†AtЙh†At3†A(0†At3†At 2†AtKOgTOh)qT:l)mOk3†At€­@†Cƒ3†Bu U†Bu3†AtU†AtЙi†C”%3†At'„C–%U†CƒLKOlЙi†C”%3†At'†CК"3†A(Йe†At2†!KOpЙe†At3†At€Э,"8xSOqOrOt&z3†At€4Г2†AtKOu&yЙz†AtЙe†At3†At$Йe†At3†AtCB2†AtKOv&g3†At2†AtK:|)}&g3†At5†AtK)|Йg†At3†At"8~SOwЙi†C”%3†At'†CК"Йg†At3†A(Йi†C”%3†At'†CК"Йg†At3†A(0†!,†AtЙy†At,„!,†At3†At 2†!KOxT:})~OyT:ƒ)xЙe†At3†At€Э<$8„SOzO{O}&†3†At€@32†AtKO~&…Й††AtЙe†At3†At$Йe†At3†AtCB2†AtKO&g3†At2†AtK:ˆ)‰&g3†At5†AtK)ˆЙg†At3†At"8ŠSO€€Йi†C”%3†At'†CК"Йg†At3†A(Йi†C”%3†At'†CК"Йg†At3†A(0†!,†AtЙ…†At,„!,†At3†At 2†!KO€T:‰)ŠO€‚TO€ƒ)„)ƒT:)jSO€„Йi†C”%3†At'†CєЙ\†Cж 3†At€м+'†Cє0†At,„!,†At3†At3†At 2†AtKO€…3†At€­@†Cƒ3†Bu U†Bu3†AtU†AtЙi†C”%3†At'„C–%U†CƒLKO€†T)O€‰3†At€Ќ@†CƒЙ\†Cж 3†At€ш+'†Cє0†At3†BuU†BuЙ^†Cє 3†At,'†CМ"3†A (U†CЫ Йi†C”%3†At'„CЛ"U†CƒLKO€ŠЙi†C”%3†AtD'„C‘Й^†Cє 3†At€”'†Cє0†At2„!KO€3†At€Ќ@†Cƒ3†BuU†BuЙ^†Cє 3†At'†CЭ"U†CЫ Йi†C”%3†AtH'†CЭ"U†CƒLKO€ŽT)dOGTTO€ O €ўO3 f0" D ЄBEOœO€–SS&бF--›-™-—LOSO€—O€˜O€™O€šO€›O€œO€O€žO€ &ЙЙ—†Cж 3†At€ 7'†C•%2†C”%KO€Ѓ3†At€Ќ@†CƒЙ—†Cж 3†At€р+'†Cє0†At3†BuU†BuЙ—†Cж 3†At€'†Cы Й—†Cж 3†At€р+'†Cє0†At3†A(U†CЫ Й—†Cж 3†At€'†Cт$U†CƒLKO€І&д Н‚€t3†At€p§U†AtЙ—†Cж 3†At€ш+'†Cє0†AtUІA“ ЙЙ†C”%3†At'„CЛ"U†C‘LKO€Њ&Ѕ&Є2†C‘KO€Ћ&Ђ3†At2†AtK:Л)М&Ђ3†At5†AtK)ЛЙЂ†At3†At"8НSO€Ќ& 3†At2†AtK:О)П& 3†At5†AtK)ОЙ †AtЙ—†Cж 3†At€ф+'†Cє0†At"8РSO€­O€ЎЙЅ†C‘Й †At3†A(Й—†Cж 3†At€8'†Cы Й †AtЙЂ†AtЙ—†Cж 3†At€ф+'†Cє0†At3†A(0†At3†At ЙЙ†C”%3†AtH'†Cы ЙЂ†At3†A(0†At,„!,†AtЙ—†Cж 3†At€8'†Cы Й †AtЙЂ†AtЙ—†Cж 3†At€ф+'†Cє0†At3†A(0†At3†At€џџ ЙЙ†C”%3†AtH'†Cы ЙЂ†At3†A(0†At,„!,†At3†At Й—†Cж 3†At€8'†Cы Й †AtЙЂ†AtЙ—†Cж 3†At€ф+'†Cє0†At3†A(0†AtЙЙ†C”%3†AtH'†Cы ЙЂ†At3†A(0†At3†At 3†At3†At 3†At ,„!2„!KO€ЏT:П)РO€А&ЅЙ—†Cж 3†At€ф+'†Cє0†At3†A†C‘KO€БT:М)НO€Г& Н‚€IЙ—†Cж 3†At€ф+'†Cє0†AtU†At&ЄU†CЎ &­U†Cє&ЏU†CєLKO€Д& Н‚€IЙ—†Cж 3†At€ф+'†Cє0†AtU†At&ЄЙ—†Cж 3†At€ф+'†Cє0†At3†A(U†CЎ &ЎU†Cє&АU†CєLKO€ЖЙЏ†AtЙЎ†At ЙЏ†AtЙЎ†At "8ЦSO€И&БЙ—†Cж 3†At€8'†Cы &Н†At€ 3†AtЙ—†Cж 3†At€ф+'†Cє0†At3†At€€U†At3†AtU†AtL3†A(2†CєKO€ЙT:Ч)ЦSO€Л&БЙ—†Cж 3†At€8'†Cы &Н†At€ Й—†Cж 3†At€р+'†Cє0†At3†At€€U†At3†AtU†AtL3†A(2†CєKO€МT)ЧO€П&ЃЙЙ†C”%3†At'†CК"2†C‘KO€Р&ІЙЙ†C”%3†At8'„C‘0„!2„!KO€У&Љ&H&Н†At€ Й—†Cж 3†At€h7'†Cє0†AtU†At3†AtU†AtL3†A(0Є!­ 2†AtKO€ФЙ—†Cж 3†At€l7'†Cє0†At3†At8ШSO€Х&Њ&I&Н†At€ Й—†Cж 3†At€h7'†Cє0†AtU†At3†AtU†AtL3†A(0Є!­ 2†AtKO€ЦT:Щ)ШSO€Ч&Њ&J&Н†At€ Й—†Cж 3†At€h7'†Cє0†AtU†At3†AtU†AtL3†A(0Є!­ 2†AtKO€ШT)ЩO€ЫЙ—†Cж 3†At€h7'†Cє0†At3†At8ЪSO€Ь&І3†At€@2„!KO€ЯЙ—†Cж 3†At€l7'†Cє0†At3†At8ЫSO€а& 3†At2†AtK:Ь)Э& 3†At5†AtK)ЬЙ †At3†At"8ЮSO€б&ІЙЃ†C‘Й †At3†A(0„!,†At„!KO€вT:Э)ЮO€г&І&Н„!€ЙІ„!U„!3†At€Э U„!L2„!KO€д&ІЙІ„!,†AtЙЙ†C”%3†AtD'„C‘0„!,†At3†At ,„!2„!KO€еTO€и)ЫЙ—†Cж 3†At€l7'†Cє0†At3†At8дSO€йO€л&т Н†At€?Й—†Cж 3†At€ш+'†Cє0†AtUІA“ ЙЙ†C”%3†At'„CЛ"U†CЎ &еU†CєLKO€н&ж& Н†At€ Йе†AtU†At3†At€U†AtL2†AtKO€о&ж&%Н†At€ Йж†AtU†At3†At€@U†AtL2†AtKO€п&жЙж†At3†At 2†AtKO€с&ЊЙж†At3†At ЙЊ†At,„!,†AtЙж†At3†At€џџ ЙЊ†At,„!,†At3†At 3†At 2†AtKO€тTO€у)дTO€х)Ъ&ЈЙЙ†C”%3†At4'†Cє0†At2†AtKO€ц&ЋЙЙ†C”%3†At'†Cє0†At3†At 3†At3†At 2†AtKO€чЙ—†Cж 3†At€И+'†CєЙ—†Cж 3†At€р+'†Cє0†At2†AtKO€ь&Е&Д2†CєKO€э&Ђ3†At2†AtK:л)м&Ђ3†At5†AtK)лЙЂ†At3†At"8нSO€я&ВЙ—†Cж 3†At€'†Cы Й—†Cж 3†At€И+'†Cє0†AtЙЋ†At3†At3†A(2†CєKO€№& 3†At2†AtK:о)п& 3†At5†AtK)оЙ †AtЙ—†Cж 3†At€ф+'†Cє0†At"8рSO€ё&Ј3†At€kc6ЙЈ†At3†At€5„Г 2†AtKO€ђ&ЌЙЈ†At3†At 3†At 2†AtKO€ѕ&ИЙВ†Cє3†A(0†At3†At ЙЃ†C‘3†A(0„!,†AtЙВ†Cє3†A(0†At3†At€џџ ЙЃ†C‘3†A(0„!,†At3†At 2†AtKO€і&ИЙИ†AtЙВ†Cє3†Aќ(0†At3†At ЙЃ†C‘3†A(0„!,†AtЙВ†Cє3†Aќ(0†At3†At€џџ ЙЃ†C‘3†A(0„!,†At3†At 2†AtKO€ї&ИЙИ†AtЙВ†Cє3†Aј(0†At3†At ЙЃ†C‘3†A(0„!,†AtЙВ†Cє3†Aј(0†At3†At€џџ ЙЃ†C‘3†A(0„!,†At3†At 2†AtKO€ј&ИЙИ†AtЙВ†Cє3†Aє(0†At3†At ЙЃ†C‘3†A(0„!,†AtЙВ†Cє3†Aє(0†At3†At€џџ ЙЃ†C‘3†A(0„!,†At3†At 2†AtKO€љ&ИЙИ†AtЙВ†Cє3†A№(0†At3†At ЙЃ†C‘3†A(0„!,†AtЙВ†Cє3†A№(0†At3†At€џџ ЙЃ†C‘3†A(0„!,†At3†At 2†AtKO€њ&В3†A5†CєKO€§&ЖЙБ†CєЙЌ†At3†A(0†At3†At ЙІ„!,†AtЙБ†CєЙЌ†At3†A(0†At3†At€џџ ЙІ„!,†At3†At 3†At 2†AtKO€ў&ЖЙЖ†AtЙИ†At3†At 3†At3†At 2†AtKO€Й—†Cж 3†At€'†Cы Й—†Cж 3†At€И+'†Cє0†At3†A(ЙЖ†At3†At 2†AtKO€Й—†Cж 3†At€И+'†Cє3†At5†AtKO€ЙЕ†CєЙ †At3†A(ЙЖ†At2†AtKO€T:п)рO€&ЕЙ—†Cж 3†At€ф+'†Cє0†At3†A†CєKO€ &Ё3†At2†AtK:љ)њ&Ё3†At5†AtK)љЙЁ†At3†At"8ћSO€ ЙЃ†C‘ЙЁ†At3†A(ЙЉ†At,„!,†AtЙЃ†C‘ЙЁ†At3†A(0„!,†At3†At 2„!KO€ T:њ)ћO€ &ІЙІ„!,†AtЙЊ†At,„!,†At3†At 2„!KO€ЙЙ†C”%3†At'†CєЙЙ†C”%3†At'†Cє0†At3†At 3†At€ЙЙ†C”%3†At'†Cє0†At3†At€џџ 3†At€3†At †AtKO€ЙЙ†C”%3†At'†Cє& Н†At€ 3†AtЙ—†Cж 3†At€м+'†Cє0†At,„!,†At3†At U†AtЙЙ†C”%3†At'†Cє0†AtU†AtL2†AtKO€&ЋЙЙ†C”%3†At'†Cє0†At3†At 3†At3†At 2†AtKO€T:м)нO€&Е&Д2†CєKO€3†At€Ќ@†CƒЙ—†Cж 3†At€ш+'†Cє0†At3†BuU†BuЙЙ†C”%3†At'„CЛ"U†CЫ &ЇU†CƒLKO€3‚KO€&Ђ3†At2†AtK:)&Ђ3†At5†AtK)ЙЂ†At3†At"8SO€& 3†At2†AtK:)& 3†At5†AtK)Й †AtЙ—†Cж 3†At€ф+'†Cє0†At"8SO€&Г&Ї3†A(,†Cє0†At2†AtKO€ &ЗЙ—†Cж 3†At€'†Cы 3†AtЙ †At3†At3†A(0†At3†At ЙГ†At,„!,†AtЙ—†Cж 3†At€'†Cы 3†AtЙ †At3†At3†A(0†At3†At€џџ ЙГ†At,„!,†At3†At 2†AtKO€!&ЗЙЗ†AtЙ—†Cж 3†At€'†Cы 3†AtЙ †At3†At3†A(0†At3†At ЙГ†At3†At Й—†Cж 3†At€'†Cы 3†AtЙ †At3†At3†A(0†At3†At€џџ ЙГ†At3†At 3†At 2†AtKO€"&Г&Ї3†A(,†Cє0†At2†AtKO€#&ЗЙЗ†AtЙ—†Cж 3†At€'†Cы 3†AtЙ †At3†At3†A(0†At3†At ЙГ†At,„!,†AtЙ—†Cж 3†At€'†Cы 3†AtЙ †At3†At3†A(0†At3†At€џџ ЙГ†At,„!,†At3†At 2†AtKO€$&ЗЙЗ†AtЙ—†Cж 3†At€'†Cы 3†AtЙ †At3†At3†A(0†At3†At ЙГ†At3†At Й—†Cж 3†At€'†Cы 3†AtЙ †At3†At3†A(0†At3†At€џџ ЙГ†At3†At 3†At 2†AtKO€%&Г&Ї3†A(,†Cє0†At2†AtKO€&&ЗЙЗ†AtЙ—†Cж 3†At€'†Cы 3†AtЙ †At3†At3†A(0†At3†At ЙГ†At,„!,†AtЙ—†Cж 3†At€'†Cы 3†AtЙ †At3†At3†A(0†At3†At€џџ ЙГ†At,„!,†At3†At 2†AtKO€'&ЗЙЗ†AtЙ—†Cж 3†At€'†Cы 3†AtЙ †At3†At3†A(0†At3†At ЙГ†At3†At Й—†Cж 3†At€'†Cы 3†AtЙ †At3†At3†A(0†At3†At€џџ ЙГ†At3†At 3†At 2†AtKO€(&Г&Ї3†A (,†Cє0†At2†AtKO€)&ЗЙЗ†AtЙ—†Cж 3†At€'†Cы 3†AtЙ †At3†At3†A(0†At3†At ЙГ†At,„!,†AtЙ—†Cж 3†At€'†Cы 3†AtЙ †At3†At3†A(0†At3†At€џџ ЙГ†At,„!,†At3†At 2†AtKO€*&ЗЙЗ†AtЙ—†Cж 3†At€'†Cы 3†AtЙ †At3†At3†A(0†At3†At ЙГ†At3†At Й—†Cж 3†At€'†Cы 3†AtЙ †At3†At3†A(0†At3†At€џџ ЙГ†At3†At 3†At 2†AtKO€+&Г&Ї3†A(,†Cє0†At2†AtKO€,&ЗЙЗ†AtЙ—†Cж 3†At€'†Cы 3†AtЙ †At3†At 3†A(0†At3†At ЙГ†At,„!,†AtЙ—†Cж 3†At€'†Cы 3†AtЙ †At3†At 3†A(0†At3†At€џџ ЙГ†At,„!,†At3†At 2†AtKO€-&ЗЙЗ†AtЙ—†Cж 3†At€'†Cы 3†AtЙ †At3†At 3†A(0†At3†At ЙГ†At3†At Й—†Cж 3†At€'†Cы 3†AtЙ †At3†At 3†A(0†At3†At€џџ ЙГ†At3†At 3†At 2†AtKO€.&Ё3†At 2†AtK:-).&Ё3†At†AtK)-ЙЁ†AtЙ—†Cж 3†At€ш+'†Cє0†At"8/SO€/&Г&ЇЙЁ†At3†A(,†Cє0†At2†AtKO€0&ЗЙЗ†AtЙ—†Cж 3†At€'†Cы 3†AtЙ †At3†AtЙЁ†At3†A(0†At3†At ЙГ†At,„!,†AtЙ—†Cж 3†At€'†Cы 3†AtЙ †At3†AtЙЁ†At3†A(0†At3†At€џџ ЙГ†At,„!,†At3†At 2†AtKO€1&ЗЙЗ†AtЙ—†Cж 3†At€'†Cы 3†AtЙ †At3†AtЙЁ†At3†A(0†At3†At ЙГ†At3†At Й—†Cж 3†At€'†Cы 3†AtЙ †At3†AtЙЁ†At3†A(0†At3†At€џџ ЙГ†At3†At 3†At 2†AtKO€2T:.)/O€5ЙЕ†CєЙ †At3†A(ЙЕ†CєЙ †At3†A(0†AtЙЗ†At2†AtKO€8Й—†Cж 3†At€'†Cы 3†AtЙ †At3†A(ЙЕ†CєЙ †At3†A(0†At3†At 2†AtKO€9T:)O€:&ЕЙ—†Cж 3†At€ф+'†Cє0†At3†A†CєKO€<3†At€Ќ@†Cƒ3†Bu@U†BuЙ—†Cж 3†At€'†Cы Й—†Cж 3†At€ф+'†Cє0†At3†A(U†CЫ Й—†Cж 3†At€'†CР"U†CƒLKO€=T:)O€@& 3†At2†AtK:6)7& 3†At5†AtK)6Й †AtЙ—†Cж 3†At€р+'†Cє0†At"88SO€AЙ›†C‘Й †At3†A(&ДЙ †At3†A(0†At3†At ЙЙ†C”%3†AtH'†Cы 3†A (0†At,„!,†At&ДЙ †At3†A(0†At3†At€џџ ЙЙ†C”%3†AtH'†Cы 3†A (0†At,„!,†At3†At &ДЙ †At3†A(0†AtЙЙ†C”%3†AtH'†Cы 3†A (0†At3†At 3†At3†At 3†At 3†At3†At 3†At€џ$3†At€џ&ДЙ †At3†A(0†At3†At ЙЙ†C”%3†AtH'†Cы 3†A (0†At,„!,†At&ДЙ †At3†A(0†At3†At€џџ ЙЙ†C”%3†AtH'†Cы 3†A (0†At,„!,†At3†At &ДЙ †At3†A(0†AtЙЙ†C”%3†AtH'†Cы 3†A (0†At3†At 3†At3†At 3†At 3†At3†At 3†At€€џџ"3†At€€џџ&ДЙ †At3†A(0†At3†At ЙЙ†C”%3†AtH'†Cы 3†A (0†At,„!,†At&ДЙ †At3†A(0†At3†At€џџ ЙЙ†C”%3†AtH'†Cы 3†A (0†At,„!,†At3†At &ДЙ †At3†A(0†AtЙЙ†C”%3†AtH'†Cы 3†A (0†At3†At 3†At3†At 3†At 3†At3†At CBCB,„!2„!KO€BT:7)8O€GЙЙ†C”%3†At4'†CєЙЈ†At2†AtKO€HЙЙ†C”%3†At8'„C‘ЙІ„!2„!KO€I& 3†At2†AtK:`)a& 3†At5†AtK)`Й †At3†At"8bSO€JЙ™†Cє 3†At'†Cы Й †At3†A(ЙЋ†At2†AtKO€KT:a)bO€LT)ŸOGTTO€ O €ўO3 f0" D ЄBEOœO€USS&кF-i-g-e-cLOSO€VO€WO€XO€Y&oЙc†Cж 3†At€ 7'†C•%2†C”%KO€[Йc†Cж 3†At€h7'†Cє0†At8pSO€]& Н‚€IЙi†AtU†AtЙg†C‘U†CЎ Йo†C”%3†At@'†Cы U†CєЙo†C”%3†At<'†Cы U†CєLKO€_Йo†C”%3†At0'†Cє3†At2†AtKO€`T:q)pSO€aЙc†Cж 3†At€<7'†Cє0†At8rSO€c& Н‚€IЙi†AtU†AtЙg†C‘U†CЎ &mU†Cє&nU†CєLKO€fЙm†AtЙo†C”%3†At@'†Cє0†At$8sSO€gЙo†C”%3†At<'†CєЙo†C”%3†At<'†Cє0†AtЙm†AtЙo†C”%3†At@'†Cє0†At 2†AtKO€hT:t)sЙm†AtЙo†C”%3†At@'†Cє0†At"8uSO€i&nЙn†AtЙo†C”%3†At@'†Cє0†AtЙm†At 2†AtKO€jTO€m)u)tЙn†AtЙo†C”%3†At<'†Cє0†At$8vSO€nO€oO€q&x&ж Н†At€Йo†C”%3†At<'†Cє0†AtU†AtL2†AtKO€r&xЙx†At3†At2†AtKO€sЙo†C”%3†At<'†CєЙo†C”%3†At<'†Cє0†AtЙx†At 2†AtKO€t&nЙn†At&%Н†At€ 3†AtU†At3†AtЙx†AtU†AtL 2†AtKO€v&wЙo†C”%3†At<'†Cє0†AtЙn†At3†At$Йn†At3†AtCB2†AtKO€x&y&DН†At€Йw†AtU†AtL2†AtKO€y&z3†At€Йy†AtЙi†At2†AtKO€{&l3†At2†AtK:})~&l3†At5†AtK)}Йl†AtЙi†At"8SO€|Йg†C‘Йl†At3†A(Йy†AtЙg†C‘Йl†At3†A(0„!,†At3†At 2„!KO€}&yЙz†At†AtKO€~&yЙy†At3†At€"Йy†At3†At€CB2†AtKO€T:~)O€€TO€)vTO€‚)rЙo†C”%3†At0'†Cє3†At2†AtKO€„T)qO€…T)kOGTTOœO€†M: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t M KpsDec†€V [ZYX Vlost†tTlength†tRsignal†€PpsDecCtrl†€tNpsDec†€V    Š ‰ ˆ„ƒ~ } |xqp o nm l kjd blength†t`signal†€^psDecCtrl†€t\psDec†€V gi†teLTP_Gain_Q14†tftemp_LTP_Gain_Q14†tipsPLC†€”hj†t     ztmp†tyscale_Q10†t  †tmp†t…scale_Q14†t  b a `8 7 6/ . -    ћ њ љр п он м лдЮ Э ЬЫЪЩШЧЦР П ОН М ЛŸ length†t›signal†€™psDecCtrl†€t—psDec†€V Аenergy2†!tЗLPC_pred_Q10†tЄexc_buf„€РЁ€‹ i†tЎshift2†!tЊrand_Gain_Q15†tЖLPC_exc_Q10†tЈrand_seed†tЌidx†tИLTP_pred_Q14†tЉharm_Gain_Q15†tЙpsPLC†€”Вpred_lag_ptr†€tЇA_Q12_tmp„ Ё€uГAtmp†tЂk†tДsig_Q10†€€Ё€ZІrand_scale_Q14„Еsig_Q10_ptr†€tБrand_ptr†€t­shift1†!tЏenergy1†!tЋlag†tЅexc_buf_ptr†€ЃB_Q14†€Ёj†t          жdown_scale_Q30†tеinvGain_Q30†!t         ~ }vutsrqpk ilength†tgsignal†€epsDecCtrl†€tcpsDec†€V menergy_shift†!tli†tnenergy†!topsPLC†€”      ygain_Q12†tzslope_Q12†txLZ†twfrac_Q24†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёе ъ з ž!о –!ч я ш ™!ѓ љ Ž!›!C!tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ ’ “ Ÿ   Љ ­ Ў Ш Щ Ы д е ж з к о ч ш ъ ы я ё ђ ѓ є ѕ љ ‹!!Ž!–!™!›!ž!К"Л"М"Р"Ф"Ш"Ъ"Э"є"„$…$О$П$т$”%•%–%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fgњ.cil$glл.cil$in4.cil$exЪY.cil$sy.cil$db  /1679 1284597038 100666 16500 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТT@ .e‘L0?.drectveQ, .cil$fg}@@.cil$glV ‘@@.cil$inцч @@.cil$exГ'Э@@.cil$sy#€7@@.cil$dbЃ>@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_pitch_est_tables.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_pitch_est_tables.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2ч2€ovR V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іkžc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_pitch_est_tables.c6SК@Ѓн3рorЇ—œЛj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_pitch_est_defines.hxJх<ˆdŒ:Њ†O“"Мƒ–Нc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїтc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлсc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Мj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_common_pitch_est_defines.h‹’_&f№ЗbЙщ&х‹КФ SKP_Silk_CLZ16†€ €˜ |€‡Шж SKP_Silk_CLZ32†€€р€,+ШФ =SKP_Silk_CLZ_FRAC‚€€і€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€р €‚€ZШуSKP_Silk_CB_lags_stage3„€€€ Кsize_tuхSKP_Silk_cbk_sizes_stage3„€€цSKP_Silk_cbk_offsets_stage3„€€ ЃSA_AttrTarget€)АSA_Parameter€)†тSKP_Silk_CB_lags_stage2„X€€‘4strnlen†€ЎSA_Method€)†@фSKP_Silk_Lag_range_stage3„0€€“ Лwchar_t!Ћwcsnlen†€ т€џџ€џџ€џџ€џџ€џџ€џџу€їџ€љџ€њџ€ћџ€ћџ€ќџ€ќџ€§џ€§џ€ўџ€ўџ€ўџ€џџ€џџ€џџ€§џ€ўџ€ўџ€ўџ€џџ€џџ€џџ€џџ€џџ€џџ€џџ€џџ€џџ€џџ€џџ€џџ€ўџ€ўџ€ўџ €џџ€џџ€џџ€ўџ€ўџ€ўџ€§џ€§џ€ќџ€ќџ€ћџ€ћџ€њџ€љџф€ўџ€џџ€џџ€ўџ€ќџ€џџ€џџ€ќџ €їџ €§џ€ўџ€љџ х"ц [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕO#OžOOЗOžOOЕO\OœOOЛOOМOЕOМO&OНOOЗOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOМO'OсOOЗOсOOтOOЗOтOOсOOМO(OЖ OOЕOЖ O+OМO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOМO+O€ O €ўO3 f0" D ЄBEOМO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOМO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOМO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOМO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOМO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOМO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOМO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOМO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOМO€OЛOOсOOМOсOOЛO OœOOœOZSTM: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ Љ џ"%‘%“%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glV .cil$inц.cil$exГ'.cil$sy#.cil$db/1717 1284597038 100666 38287 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТo• .e‘LK”.drectveQ, .cil$fg}@@.cil$gl —@@.cil$inЖ@@.cil$exjЗ@@.cil$syЋНy@@.cil$dbуh“@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_pitch_analysis_core.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_pitch_analysis_core.obj-FdRelease\vc100.pdb-errorreport:prompt†1j22€ov V €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlрj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_pitch_est_defines.hxJх<ˆdŒ:Њ†O“"Мƒ–сj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_common_pitch_est_defines.h‹’_&f№ЗbЙщ&х‹Кœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_pitch_analysis_core.cЏ˜ŸЧ0o{я RUxdуЎУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ SKP_min_int†€€Љ€aШSKP_max_int†€€б€Ш$SKP_max_32†€€я€{Ш<SKP_Silk_CLZ_FRAC‚€€ф€$9Ше CSKP_Silk_SQRT_APPROX†€€ы€ЄZШ<ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШESKP_Silk_decode_pitch‚€v€Г'€#vhтуZSKP_Silk_pitch_analysis_core†€€)€€2 h е № ћ  R ј ц$CтухцёќёSKP_FIX_P_Ana_calc_corr_st3‚€„€7\€Р€џhцуфхцќSKP_FIX_P_Ana_calc_energy_st3‚€„€И`€м€КhцуфхцSKP_FIX_P_Ana_find_scaling†€€@h€ђThУ е № SKP_Silk_resample_1_2_coarse‚€ЩуSKP_Silk_CB_lags_stage3„€€ SKP_Silk_resample_1_3‚€Сћ SKP_Silk_resample_1_2_coarsest‚€ЩцSKP_Silk_inner_prod_aligned†€? Лsize_tuхSKP_Silk_cbk_sizes_stage3„€цSKP_Silk_cbk_offsets_stage3„€ ЃSA_AttrTarget€)АSA_Parameter€)†SKP_Silk_insertion_sort_decreasing_int16‚€AтSKP_Silk_CB_lags_stage2„X€‘3strnlen†€ЎSA_Method€)†@фSKP_Silk_Lag_range_stage3„0€“R SKP_Silk_resample_2_3_coarsest‚€| Мwchar_t!SKP_Silk_int16_array_maxabs„€6Њwcsnlen†€ј SKP_Silk_lin2log†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœOOрOOЕOрOOсOOЕOсOOрO OœOЕ OOœO!O€ O €ўO3 f0" D ЄBEOœODSS&EF- ---LOSOEOG&3†AtЙ †At,„!,†At2†AtKOJ& Й†AtЙ†At2†AtKOKЙ †At3†At8SOM&3†At2†AtK:)&3†At5†AtK)Й†At3†At"8SONЙ†CєЙ†At3†A(Й †At&тЙ†At3†A(Й†At3†A(0Є!­ ,†At2†AtKOOT:)OPT:)SOQ&3†At2†AtK:)&3†At5†AtK)Й†At3†At"8SORЙ†CєЙ†At3†A(Й †At&уЙ†At3†AD(Й†At3†A(0Є!­ ,†At2†AtKOST:)OTT)OUT) OGTTO€ O €ўO3 f0" D ЄBEOœOfSS&ZF-.-,-*-(-&-$-"- --LOSOgOhOiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzO{O|O}O~OO€€O€ƒ3‚KO€†3‚KO€‡3‚KO€‰3‚KO€Š3‚KO€&Z3†At(Й,ІA“ 2†AtKO€Ž&\3†At€ 2†AtKO€&[3†At€@2†AtKO€&^ЙZ†At3†At 2†AtKO€‘&`Й\†At3†At 2†AtKO€’&_Й[†At3†At 2†AtKO€“&a3†AtЙ,ІA“ 2†AtKO€”&c3†At2†AtKO€•&b3†At2†AtKO€–&d3†AtЙ,ІA“ 2†AtKO€—&f3†AtH2†AtKO€˜&e3†At€2†AtKO€š3†At€­@†Cƒ3†Bu€шU†Bu3†AtU†At&:U†CƒLKO€Й,ІA“ 3†At 8ySO€žO€Ÿ3†At€­@†Cƒ3†BuU†Bu3†AtU†At&zU†CƒLKO€ЁO€Ђ&R Н‚€}&3,†C‘U†C‘3†At€рUІA“ Й†CЎ U†CЎ &zU†C‘&1U†C‘LKO€ЃT:})yЙ,ІA“ 3†At8~SO€ЄЙ.ІA“ 3†At8SO€Ѕ3‚KO€І3†At€­@†Cƒ3†BuU†Bu3†AtU†At&5U†CƒLKO€ЈO€Љ&№ Н‚€ЪЙ[†AtUІA“ &3U†Cє&1U†C‘&5U†CєЙ†CЎ U†CЎ LKO€ЊT:‚)SO€Ћ3‚KO€Ќ3†At€­@†Cƒ3†BuU†Bu3†AtU†At&5U†CƒLKO€ЎO€Џ&ћ Н‚€ЪЙ[†AtUІA“ &3U†Cє&1U†C‘&5U†CєЙ†CЎ U†CЎ LKO€АT)‚O€БT:…)~Й,ІA“ 3†At8†SO€Г3‚KO€Д3†At€­@†Cƒ3†BuU†Bu3†AtU†At&5U†CƒLKO€Ж& Н‚€Т3†At€РUІA“ Й†CЎ U†CЎ &5U†Cє&1U†C‘LKO€ИT:‰)†SO€Й3‚KO€К3†At€Ќ@†CƒЙ[†At3†BuU†BuЙ†CЎ U†CЫ &1U†CƒLKO€ЛT)‰)…)}O€ОЙ.ІA“ 3†At8ŒSO€П3‚KO€Р3†At€­@†Cƒ3†BuU†Bu3†AtU†At&5U†CƒLKO€СO€Т&№ Н‚€ЪЙ\†AtUІA“ &3U†Cє&2U†C‘&5U†Cє&1U†CЎ LKO€УT:)ŒSO€Ф3‚KO€Х3†At€­@†Cƒ3†BuU†Bu3†AtU†At&5U†CƒLKO€ЦO€Ч&ћ Н‚€ЪЙ\†AtUІA“ &3U†Cє&2U†C‘&5U†Cє&1U†CЎ LKO€ШT)O€Ы&6Й\†At3†At2†AtK:’)“&63†At6†AtK)’Й6†At3†At$8”SO€Ь&2Й6†At3†A(&2Й6†At3†A(0„!,†At&2Й6†At3†At3†A(0„!,†At3†At€џ$3†At€џ&2Й6†At3†A(0„!,†At&2Й6†At3†At3†A(0„!,†At3†At€€џџ"3†At€€џџ&2Й6†At3†A(0„!,†At&2Й6†At3†At3†A(0„!,†AtCBCB,„!2„!KO€ЭT:“)”O€е&]&$Н†At€ Й\†At3†At U†AtЙ_†AtU†AtL2†AtKO€ж&@&Н†At€€Й]†AtUІA“ Й\†AtUІA“ &2U†CЎ L2†AtKO€зЙ@†At3†At$8›SO€и&63†At2†AtK:œ)&63†At5†AtK)œЙ6†AtЙ\†At"8žSO€й&2Й6†At3†A(&2Й6†At3†A(0„!,†AtЙ@†At 2„!KO€кT:)žO€лTO€р)›&;&2Й\†At3†At 3†A(2†CЎ KO€с&73†At2†AtK:Ÿ) &73†At5†AtK)ŸЙ7†At3†At"8ЁSO€у3‚KO€ф3‚KO€ц&<Й;†CЎ Йc†At3†A2†CЎ KO€щ3‚KO€ъ3‚KO€ь&>3†At2†AtKO€э&=3†At2†AtKO€я&=&цН†At€@Й_†AtUІA“ Й<†CЎ UІCН Й;†CЎ UІCН L2†AtKO€№&>&цН†At€@Й_†AtUІA“ Й<†CЎ UІCН Й<†CЎ UІCН L2†AtKO€ё&>Й>†At3†At€ш3†Bu€€ 3†AtЙ>†At3†At€ш 3†Bu€€ 3†At 3†At€€Й>†At3†At€шCBЙ>†At3†At€ш 3†Bu€€ 3†At3†At€џџџЙ>†At3†At€шCBCB2†AtKO€ѓ&JЙ=†At&CН†At€Й>†AtU†AtL3†At2†AtKO€є&:Й7†At3†A€К(Йc†At3†A(ЙJ†At3†At€џ$3†At€џЙJ†At3†At€€џџ"3†At€€џџЙJ†AtCBCB,„!2„!KO€ї&8Йc†At3†At2†AtK:Ћ)Ќ&83†At5†AtK)ЋЙ8†AtЙf†At!8­SO€ј&<3†A6†CЎ KO€ћ3‚KO€ќ3‚KO€ў&=&цН†At€@Й_†AtUІA“ Й<†CЎ UІCН Й;†CЎ UІCН L2†AtKO€O€O€&>Й<†CЎ 3†A(0Є!­ ,„!,†AtЙ<†CЎ 3†A(0Є!­ ,„!,†AtЙ<†CЎ Й_†At3†A(0Є!­ ,„!,†AtЙ<†CЎ Й_†At3†A(0Є!­ ,„!,†At†AtKO€&JЙ=†At&CН†At€Й>†AtU†AtL3†At2†AtKO€&:Й7†At3†A€К(Й8†At3†A(ЙJ†At3†At€џ$3†At€џЙJ†At3†At€€џџ"3†At€€џџЙJ†AtCBCB,„!2„!KO€T:Ќ)­O€ &;Й_†At3†A†CЎ KO€ T: )ЁO€ &6Йf†At2†AtK:М)Н&63†At6†AtK)МЙ6†AtЙc†At#8ОSO€&H&:3†A(Й6†At3†A(0„!,†At&:3†A€К(Й6†At3†A(0„!,†At2†AtKO€3‚KO€&HЙH†At3†At 2†AtKO€3‚KO€&HЙH†AtЙH†At3†At Й6†At3†At ,„!,†AtЙH†At3†At€џџ Й6†At3†At ,„!,†At3†At 2†AtKO€3‚KO€&:3†A(Й6†At3†A(ЙH†At,„!2„!KO€T:Н)ОO€&F3†AtЙ.ІA“ 2†AtKO€3‚KO€&Н‚€ZЙF†AtUІA“ Йf†AtЙc†At3†AtUІA“ &CU†Cє&:3†A(Йc†At3†A(U†C‘LKO€&;&2Й\†At3†At 3†A(2†CЎ KO€&?&цН†At€@Й\†At3†At UІA“ Й;†CЎ UІCН Й;†CЎ UІCН L2†AtKO€&?Й?†At3†At€ш3†Bu€€ 3†AtЙ?†At3†At€ш 3†Bu€€ 3†At 3†At€€Й?†At3†At€шCBЙ?†At3†At€ш 3†Bu€€ 3†At3†At€џџџЙ?†At3†At€шCBCB2†AtKO€ &E&:3†A(Йc†At3†A(0„!,†At2†AtKO€!&IЙE†At,„!,†AtЙE†At,„!,†At2†AtKO€#Й?†At3†At ЙI†At$8аSO€$3†At€­@†Cƒ3†BuU†Bu3†AtU†AtЙ†CєU†CƒLKO€%Й$†Cє3†At2†AtKO€&Й †Cє3†At2†AtKO€'Й"†Cє3†At2†AtKO€(3†AtA†At:0O€)TO€+)а&IЙ(ІA“ 3†At ЙE†At,„!,†AtЙ(ІA“ 3†At€џџ ЙE†At,„!,†At3†At 2†AtKO€,&63†At2†AtK:ж)з&63†At5†AtK)жЙ6†AtЙF†At"8иSO€.&:3†A(Йc†AtЙ6†At3†A(0„!,†AtЙI†At$8йSO€/&CЙ6†At3†A(&CЙ6†At3†A(0†AtЙc†At3†At 2†AtKO€0T:к)йSO€1&FЙ6†At2†AtKO€2:иO€3T)кO€4T:з)иO€53‚KO€7&6Йb†At3†At2†AtK:м)н&63†At5†AtK)мЙ6†AtЙe†At3†At"8оSO€8&DЙ6†At3†A(3†At2„!KO€9T:н)оO€:&63†At2†AtK:п)р&63†At5†AtK)пЙ6†AtЙF†At"8сSO€;&D&CЙ6†At3†A(0†At3†A(3†At2„!KO€<T:р)сO€?&6Йe†At3†At2†AtK:т)у&63†At6†AtK)тЙ6†AtЙb†At#8фSO€@&DЙ6†At3†A(&DЙ6†At3†At3†A(0„!,†At&DЙ6†At3†At3†A(0„!,†At„!KO€AT:у)фO€C&F3†At2†AtKO€D&6Йb†At2†AtK:х)ц&63†At5†AtK)хЙ6†AtЙe†At3†At"8чSO€E&DЙ6†At3†At3†A(0„!,†At3†At$8шSO€F&CЙF†At3†A(Й6†At2†AtKO€G&F3†At5†AtKO€HTO€I)шT:ц)чO€L&6Йe†At3†At2†AtK:щ)ъ&63†At6†AtK)щЙ6†AtЙb†At#8ыSO€M&DЙ6†At3†A(&DЙ6†At3†At3†A(0„!,†At&DЙ6†At3†At3†A(0„!,†At&DЙ6†At3†At3†A(0„!,†At„!KO€NT:ъ)ыO€P&G3†At2†AtKO€Q&6Йb†At2†AtK:ь)э&63†At5†AtK)ьЙ6†AtЙe†At3†At"8юSO€R&DЙ6†At3†A(0„!,†At3†At$8яSO€S&DЙG†At3†A(Й6†At3†At2„!KO€T&G3†At5†AtKO€UTO€V)яT:э)юO€`&@&Н†At€€Й_†AtUІA“ Й[†AtUІA“ &1U†CЎ L2†AtKO€aЙ@†At3†At$8№SO€b&63†At2†AtK:ё)ђ&63†At5†AtK)ёЙ6†AtЙ[†At"8ѓSO€c&1Й6†At3†A(&1Й6†At3†A(0„!,†AtЙ@†At 2„!KO€dT:ђ)ѓO€eTO€j)№3†At€­@†Cƒ3†Bu€шU†Bu3†AtU†At&:U†CƒLKO€l&;&1Й\†At3†A(2†CЎ KO€m&73†At2†AtK:ѕ)і&73†At5†AtK)ѕЙ7†At3†At"8їSO€p3‚KO€q3‚KO€s&B&цН†At€@Й_†AtUІA“ Й;†CЎ UІCН Й;†CЎ UІCН L2†AtKO€u&93†At2†AtK:њ)ћ&93†At5†AtK)њЙ9†AtЙG†At"8ќSO€v&8&DЙ9†At3†A(0„!2†AtKO€w&<Й;†CЎ Й8†At3†A2†CЎ KO€z3‚KO€{3‚KO€}&=&цН†At€@Й_†AtUІA“ Й<†CЎ UІCН Й;†CЎ UІCН L2†AtKO€~&A&цН†At€@Й_†AtUІA“ Й<†CЎ UІCН Й<†CЎ UІCН L2†AtKO€Й=†At3†At$8џSO€€&?ЙB†AtЙA†At$ЙB†AtЙA†AtCB2†AtKO€&i&е Н†At€Й=†AtU†AtL2†AtKO€‚&jЙi†At3†At3†At$3†AtЙi†At3†At3†At"3†AtЙi†At3†AtCBCB2†AtKO€ƒ&JЙ=†AtЙj†At Й?†At3†AtЙj†At 3†At2†AtKO€„3‚KO€…&JЙ=†At3†At ЙJ†At,„!,†AtЙ=†At3†At€џџ ЙJ†At,„!,†At3†At 2†AtKO€†&JЙJ†AtЙJ†At3†Bu€€ 3†AtЙJ†AtЙJ†At 3†Bu€€ 3†At 3†At€€ЙJ†AtЙJ†AtCBЙJ†AtЙJ†At 3†Bu€€ 3†At3†At€џџџЙJ†AtЙJ†AtCBCB2†AtKO€‡&i&е Н†At€ЙJ†AtU†AtL2†AtKO€ˆ&jЙi†At3†At3†At$3†AtЙi†At3†At3†At"3†AtЙi†At3†AtCBCB2†AtKO€‰&?ЙB†AtЙA†At"ЙB†AtЙA†AtCB2†AtKO€Š&:Й7†At3†A€К(Й8†At3†A(ЙJ†AtЙj†At Й?†At3†AtЙj†At 3†At2„!KO€‹T:)џSO€Œ&:Й7†At3†A€К(Й8†At3†A(3†At2„!KO€T)O€ŽT:ћ)ќO€&;Й_†At3†A†CЎ KO€T:і)їO€•&S3†At€€2†AtKO€–&T3†At€€2†AtKO€˜&K3†At2†AtKO€™&N3†Atџ2†AtKO€›Й&†At3†At$8 SO€œЙ,ІA“ 3†At 8 SO€&&Й&†At3†At 3†At2†AtKO€žT:) Й,ІA“ 3†At8SO€Ÿ&&Й&†At3†At 2†AtKO€ T:)Й,ІA“ 3†At8SO€Ё&&Й&†At3†At2†AtKO€ЂTO€Ѓ)))&p&ј Н†At€Й&†AtUІA“ L2†AtKO€ЄT:) SO€Ѕ&p3†At2†AtKO€ІT)O€Ї3‚KO€Ј&rЙ*ІA“ ,„!,†AtЙ*ІA“ ,„!,†At3†At 2†AtKO€ЋЙ,ІA“ 3†At8Й.ІA“ 3†At$8SO€Ќ&m3†At 2†AtKO€­T:)SO€Ў&m3†At2†AtKO€ЏT)O€Б&73†At2†AtK:)&73†At5†AtK)Й7†AtЙF†At"8SO€В&8&CЙ7†At3†A(0†At2†AtKO€Г&93†At2†AtK:) &93†At5†AtK)Й9†AtЙm†At"8!SO€Д&RЙ9†At3†A(3†At2†AtKO€Е&63†At2†AtK:")#&63†At5†AtK)"Й6†At3†At"8$SO€З&RЙ9†At3†A(&RЙ9†At3†A(0†At&:Й6†At3†A€К(Й8†At&тЙ6†At3†A(Й9†At3†A(0Є!­ ,†At3†A(0„!,†At2†AtKO€ИT:#)$O€ЙT: )!O€Л&V3†At€€2†AtKO€М&L3†At2†AtKO€Н&63†At2†AtK:')(&63†At5†AtK)'Й6†AtЙm†At"8)SO€О&RЙ6†At3†A(0†AtЙV†At$8*SO€П&V&RЙ6†At3†A(0†At2†AtKO€Р&LЙ6†At2†AtKO€СTO€Т)*T:())O€Х&o&ј Н†At€Й8†AtUІA“ L2†AtKO€Ц3‚KO€Ч3‚KO€Ш&UЙV†At3†At€hfЙo†At,„!,†At3†At 2†AtKO€Ы3‚KO€ЬЙ&†At3†At$83SO€Э&nЙo†AtЙp†At2†AtKO€Ю3‚KO€Я&nЙn†At,„!,†AtЙn†At,„!,†At3†At 2†AtKO€а&q3†At€hfЙ$†Cє0†At,„!,†At3†At 2†AtKO€б&qЙq†AtЙn†AtЙn†At3†At@2†AtKO€в&UЙq†At†AtKO€гTO€е)3ЙU†AtЙT†At$8>ЙV†AtЙr†At$8>SO€ж&TЙU†At2†AtKO€з&SЙV†At2†AtKO€и&NЙ8†At2†AtKO€й&KЙL†At2†AtKO€кTO€л)>T:)O€нЙN†At3†Atџ8?SO€п3†At€­@†Cƒ3†BuU†Bu3†AtU†AtЙ†CєU†CƒLKO€рЙ$†Cє3†At2†AtKO€сЙ †Cє3†At2†AtKO€тЙ"†Cє3†At2†AtKO€у3†AtA†At:0O€фTO€ц)?Й,ІA“ 3†At$8ASO€ь&@&Н†At€€Й^†AtUІA“ ЙZ†AtUІA“ Й†CЎ U†CЎ L2†AtKO€эЙ@†At3†At$8BSO€№&4&3,†C‘2†C‘KO€ё&63†At2†AtK:D)E&63†At5†AtK)DЙ6†AtЙZ†At"8FSO€ђЙ4†C‘Й6†At3†A(Й†CЎ Й6†At3†A(0Є!­ ,†AtЙ@†At 2„!KO€ѓT:E)FO€єT:G)BSO€ѕ&4Й†CЎ ,†C‘2†C‘KO€іT)GO€ћ&MЙK†At2†AtKO€§3‚KO€ўЙ,ІA“ 3†At 8JSO€џ&NЙN†At,„!,†At3†At3†At 2†AtKO€T:O)JЙ,ІA“ 3†At8PSO€&NЙN†At3†At 2†AtKO€T:Q)PSO€&NЙN†At,„!,†At3†At2†AtKO€T)Q)OO€&NЙa†AtЙd†At$ЙN†AtЙa†At$Йa†AtЙN†AtЙd†At"Йd†AtЙN†AtCBCBЙN†AtЙd†At$Йd†AtЙN†AtЙa†At"Йa†AtЙN†AtCBCBCB2†AtKO€&O&Н†At€ Йa†AtU†AtЙN†At3†AtU†AtL2†AtKO€&P&Н†At€ Йd†AtU†AtЙN†At3†AtU†AtL2†AtKO€ &QЙN†At2†AtKO€ &K3†At2†AtKO€ 3‚KO€ Й$†Cє&CН†At€ЙS†At3†At U†AtL2†AtKO€&S3†At€€2†AtKO€&73†At2†AtK:Y)Z&73†At5†AtK)YЙ7†At3†At"8[SO€Й†CєЙ7†At3†A(ЙN†At3†At&тЙ7†At3†A(ЙM†At3†A(0Є!­ ,†At2†AtKO€T:Z)[O€&ёН‚€…Й.ІA“ U†AtЙ^†AtU†AtЙO†AtU†AtЙ4†C‘U†CЎ &XU†C‚%LKO€&ќН‚€…Й.ІA“ U†AtЙ^†AtU†AtЙO†AtU†AtЙ4†C‘U†CЎ &WU†C‚%LKO€&Y3†At2†AtKO€3‚KO€&g3†At€ЭЬЙN†At2†AtKO€&l&хЙ.ІA“ 3†A(0Є!­ ,†At2†AtKO€&k&цЙ.ІA“ 3†A(0Є!­ ,†At2†AtKO€&8ЙO†At2†AtK:`)a&83†At5†AtK)`Й8†AtЙP†At!8bSO€ &9Йk†At2†AtK:c)d&93†At5†AtK)cЙ9†AtЙk†AtЙl†At"8eSO€!&=3†At2†AtKO€"&?3†At2†AtKO€#&73†At2†AtK:f)g&73†At5†AtK)fЙ7†At3†At"8hSO€$3‚KO€%&?&WЙ7†At3†A€Ј(Й9†At3†A(ЙY†At3†A(0†At3†At †AtKO€&3‚KO€'&=&XЙ7†At3†A€Ј(Й9†At3†A(ЙY†At3†A(0†At3†At †AtKO€(T:g)hO€)Й=†At3†At$8kSO€+&i&е Н†At€Й=†AtU†AtL2†AtKO€-&jЙi†At3†At3†At $3†At Йi†At3†At3†At"3†AtЙi†At3†AtCBCB2†AtKO€.&VЙ=†AtЙj†At Й?†At3†At Йj†At 3†At2†AtKO€/&VЙV†At3†At€џ$3†At€џЙV†At3†At€€џџ"3†At€€џџЙV†AtCBCB2†AtKO€0&VЙ=†At3†At ЙV†At,„!,†AtЙ=†At3†At€џџ ЙV†At,„!,†At3†At 2†AtKO€2ЙV†At3†At€џџџ$8sSO€3&V3†At€џџџ2†AtKO€4T:t)sSO€5&VЙV†At3†At 2†AtKO€6T)tO€8&hЙ9†At3†At2†AtKO€9&hЙh†AtЙh†At2†AtKO€:&h3†At€џЙg†AtЙh†At3†At 2†AtKO€;3‚KO€<&VЙV†At3†At Йh†At,„!,†AtЙV†At3†At€џџ Йh†At,„!,†At3†At 3†At 2†AtKO€=T:z)kSO€>&V3†At2†AtKO€?T)zO€AЙV†AtЙS†At$8{SO€B&SЙV†At2†AtKO€C&QЙ8†At2†AtKO€D&KЙ9†At2†AtKO€ETO€F){T:d)eO€G&Y3†At5†AtKO€HT:a)bO€J&73†At2†AtK:|)}&73†At5†AtK)|Й7†At3†At"8~SO€KЙ†CєЙ7†At3†A(ЙQ†At&уЙ7†At3†AD(ЙK†At3†A(0Є!­ ,†At2†AtKO€LT:})~O€MЙ †CєЙQ†AtЙa†At2†AtKO€NЙ"†CєЙK†At2†AtKO€OT:)ASO€Q&SЙS†At3†At$ЙS†At3†AtCB2†AtKO€RЙ$†Cє&CН†At€ЙS†At3†At U†AtL2†AtKO€S&73†At2†AtK:)‚&73†At5†AtK)Й7†At3†At"8ƒSO€TЙ†CєЙ7†At3†A(ЙN†At&тЙ7†At3†A(ЙK†At3†A(0Є!­ ,†At2†AtKO€UT:‚)ƒO€VЙ †CєЙN†AtЙb†At2†AtKO€WЙ"†CєЙK†At2†AtKO€XT)O€Y3‚KO€[3†AtA†At:0O€\T)0OGTTO€ O €ўO3 f0" D ЄBEOœO€iSS&ёF--‹-‰-‡-…LOSO€jO€kO€lO€mO€nO€p3‚KO€q3‚KO€s&—&цЙ†At3†A(0Є!­ 2†AtKO€t&˜&хЙ†At3†A(0Є!­ 2†AtKO€v&Й‡†CЎ Й‹†At3†At 3†A(2†CЎ KO€w&•3†At2†AtK:ž)Ÿ&•3†At5†AtK)žЙ•†At3†At"8 SO€x&–3†At2†AtKO€{&”&фЙ†At3†A(Й•†At3†A(3†A(0Є!­ 2†AtK:Ё)Ђ&”3†At5†AtK)ЁЙ”†At&фЙ†At3†A(Й•†At3†A(3†A(0Є!­ ,†At!8ЃSO€|&‘Й†CЎ Й‰†AtЙ”†At3†A2†CЎ KO€}&’&цН†At€@Й‹†AtUІA“ Й‘†CЎ ,†C‘UІCН Й†CЎ ,†C‘UІCН L2†AtKO€~3‚KO€&›Й–†At3†A(Й’†At2†AtKO€€&–3†At5†AtKO€T:Ђ)ЃO€ƒ&™&фЙ†At3†A(Й•†At3†A(3†A(0Є!­ 2†AtKO€„&“Й—†At2†AtK:Ї)Ј&“3†At5†AtK)ЇЙ“†AtЙ—†Atɘ†At"8ЉSO€‡&š&уЙ•†At3†AD(Й“†At3†A(0Є!­ ,†AtЙ™†At2†AtKO€ˆ&”3†At2†AtK:Њ)Ћ&”3†At5†AtK)ЊЙ”†At3†At"8ЌSO€‰3‚KO€Š3‚KO€‹Й…†C‚%Й•†At3†A€Ј(Й“†At3†A(Й”†At3†A(&›Йš†AtЙ”†At3†A(0†At2†AtKO€ŒT:Ћ)ЌO€T:Ј)ЉO€Ž&Й‹†At3†A†CЎ KO€T:Ÿ) O€T)OGTTO€ O €ўO3 f0" D ЄBEOœO€SS&ќF-З-Е-Г-Б-ЏLOSO€žO€ŸO€ O€ЁO€ЂO€Є3‚KO€Ѕ3‚KO€Ї&С&цЙЗ†At3†A(0Є!­ 2†AtKO€Ј&Т&хЙЗ†At3†A(0Є!­ 2†AtKO€Њ&КЙБ†CЎ ЙЕ†At3†At 3†A(2†CЎ KO€Ћ&Н3†At2†AtK:Ш)Щ&Н3†At5†AtK)ШЙН†At3†At"8ЪSO€Ќ&Р3†At2†AtKO€Џ&ЛЙК†CЎ ЙГ†At&фЙЗ†At3†A(ЙН†At3†A(3†A(0Є!­ ,†At3†A2†CЎ KO€А&М&цН†At€@ЙЕ†AtUІA“ ЙЛ†CЎ UІCН ЙЛ†CЎ UІCН L2†AtKO€Б3‚KO€В&ХЙР†At3†A(ЙМ†At2†AtKO€Г&Р3†At5†AtKO€Е&О3†At2†AtK:Ь)Э&О3†At5†AtK)ЬЙО†At&фЙЗ†At3†A(ЙН†At3†A(3†A(0Є!­ ,†At&фЙЗ†At3†A(ЙН†At3†A(3†A(0Є!­ ,†At3†At"8ЮSO€З&МЙЛ†CЎ ЙЕ†AtЙО†At3†A(0Є!­ ,„!,†AtЙЛ†CЎ ЙЕ†AtЙО†At3†A(0Є!­ ,„!,†At†AtKO€И3‚KO€Л&МЙМ†AtЙЛ†CЎ ЙО†At3†A(0Є!­ ,„!,†AtЙЛ†CЎ ЙО†At3†A(0Є!­ ,„!,†At3†Bu€€ 3†AtЙМ†AtЙЛ†CЎ ЙО†At3†A(0Є!­ ,„!,†AtЙЛ†CЎ ЙО†At3†A(0Є!­ ,„!,†At 3†Bu€€ 3†At 3†At€€ЙМ†AtЙЛ†CЎ ЙО†At3†A(0Є!­ ,„!,†AtЙЛ†CЎ ЙО†At3†A(0Є!­ ,„!,†AtCBЙМ†AtЙЛ†CЎ ЙО†At3†A(0Є!­ ,„!,†AtЙЛ†CЎ ЙО†At3†A(0Є!­ ,„!,†At 3†Bu€€ 3†At3†At€џџџЙМ†AtЙЛ†CЎ ЙО†At3†A(0Є!­ ,„!,†AtЙЛ†CЎ ЙО†At3†A(0Є!­ ,„!,†AtCBCB2†AtKO€М3‚KO€Н3‚KO€О&ХЙР†At3†A(ЙМ†At2†AtKO€П&Р3†At5†AtKO€РT:Э)ЮO€Т&У&фЙЗ†At3†A(ЙН†At3†A(3†A(0Є!­ 2†AtKO€У&ОЙС†At2†AtK:ы)ь&О3†At5†AtK)ыЙО†AtЙС†AtЙТ†At"8эSO€Ц&Ф&уЙН†At3†AD(ЙО†At3†A(0Є!­ ,†AtЙУ†At2†AtKO€Ч&П3†At2†AtK:ю)я&П3†At5†AtK)юЙП†At3†At"8№SO€Ш3‚KO€Щ3‚KO€ЪЙЏ†C‚%ЙН†At3†A€Ј(ЙО†At3†A(ЙП†At3†A(&ХЙФ†AtЙП†At3†A(0†At2†AtKO€Ы3‚KO€ЬT:я)№O€ЭT:ь)эO€Ю&КЙЕ†At3†A†CЎ KO€ЯT:Щ)ЪO€аT)ЙOGTTO€ O €ўO3 f0" D ЄBEOœO€зSS&F-ј-і-єLOSO€иO€к&ќ&Н„!€ŽЙіІA“ UІA“ Йє†CЎ U†CЎ L2†AtKO€мЙќ†At3†At€џ"8§SO€о&ћ3†At &е Н†At€Йќ†At,„!,†AtЙќ†At,„!,†AtU†AtL2†AtKO€пT:)§SO€с&ћ3†At2†AtKO€тT)O€у&ћ3†At&У Н†At€ ЙјІA“ U„!L†AtKO€цЙћ†At3†At"8SO€ч3†AtA†At:њO€шT:)SO€щЙћ†At3†AtA†At:њO€ъT)O€ыT)њOGTTOœO€эM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t        Fs_kHz†tpitch_lags†€tcontourIndex†tlagIndex†t i†tmin_lag†t lag†t    ƒ ‚ ~ } |{ztskh g fe d cb a `[ Z YQPOJGF E DBA?>3*) ( '$ # "!       џќ ћ њї і ѕѓ ђ ё№яю э ьы ъ щшч ц хф у тс р по н мкйи з жаО Н М­ Ќ ЋЁ   Ÿž  œ›” “ ’Œ‰†…‚~}y0 .complexity†€,Fs_kHz†€*search_thres2_Q15†€(search_thres1_Q16†€&prevLag†t$LTPCorr_Q15†€t"contourIndex†€t lagIndex†€tpitch_out†€tsignal†€. cmin_lag_4kHz†tRCC†,€ОDd_comp„€К€†]max_sum_sq_length†t5filt_state†Ё€Ь[frame_length_8kHz†tJtemp32†tGlength_d_comp†t1signal_8kHz„€РЁ€‹pprevLag_log2_Q7†tLCBimax_new†tBenergy_target†t6i†tmnb_cbks_stage2†tdmax_lag†tWenergies_st3†€  Ё€‡SCCmax†tPend_lag†tkcbk_offset†tYlag_counter†t?energy†t4input_signal_ptr†€=cross_corr†t2signal_4kHz„€рЁ€ˆolag_log2_Q7†tilz†temax_lag_8kHz†tKCBimax†t3scratch_mem†€-Ё€‰amin_lag†tQlag_new†tgcontour_bias†t`sf_length_4kHz†t_sf_length_8kHz†tXcrosscorr_st3†€  Ё€‡MCBimax_old†tIthreshold†tECmax†tCd_srch†`Ё€Š:C„€шЁ€‹qprev_lag_bias_Q15†tfmax_lag_4kHz†tbmin_lag_8kHz†tHsum†t<basis_ptr†€.7k†tZframe_length†t>normalizer†trcorr_thres_Q15†tndelta_lag_log2_sqr_Q7†tjlshift†t\frame_length_4kHz†tOstart_lag†t8d†t;target_ptr†€.lcbk_size†thdiff†t^sf_length†tVCCmax_new†tUCCmax_new_b†tTCCmax_b†tNlag†tFlength_d_srch†tAenergy_basis†t@shift†t9j†t zR23„Ё€Œ                                                                 Ќ Ћ ЊЉ Ј ЇЃ Ђ Ё  Ÿ ž complexity†t‹sf_length†t‰start_lag†t‡signal†€.…cross_corr_st3†€‚ “i†t—cbk_offset†t–lag_counter†tšidx†t’cross_corr†t›scratch_mem†X€•k†t‘basis_ptr†€.™delta†ttarget_ptr†€.˜cbk_size†t”j†t    № я юэ ь ыЮ Э ЬЪ Щ ШЙ Зcomplexity†tЕsf_length†tГstart_lag†tБsignal†€.Џenergies_st3†€‚ Оi†tСcbk_offset†tРlag_counter†tМenergy†tФidx†tХscratch_mem†X€Нk†tЛbasis_ptr†€.Уdelta†tКtarget_ptr†€.Тcbk_size†tПj†t    §њ јsum_sqr_len†€іsignal_length†€єsignal†€. ќx_max†tћnbits†t      ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё=!tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ ’ “ Ÿ   Љ ­ Ў Ж Н П Р Ы ‹!О!С!Т!Щ!Ъ!Ь!і"џ"$‚$Ž$С$к$ќ$§$џ$€%‚%„%…%†%‡%ˆ%‰%Š%‹%Œ%%Ž%%‘%“%@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl .cil$in.cil$exj.cil$syЋ.cil$dbу /1758 1284597038 100666 46952 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТHЗ .e‘L$Ж.drectveQ, .cil$fg }@@.cil$glТ‡@@.cil$inI@@.cil$exщŠJ@@.cil$syЗ3@@.cil$db:ъД@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_NSQ_del_dec.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_NSQ_del_dec.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2я2€ovОV €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nsq_del_dec.cН+w ЅіћTaУ`§§ЄZФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ SKP_min_int†€€­€aШSKP_max_int†€€е€Ш=SKP_Silk_CLZ_FRAC‚€€ш€$9Шж iSKP_DIV32_varQ†€M€€y€щШж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШІSKP_Silk_NSQ_del_dec‚€€(€#€Ёh— ~ЏЏSKP_Silk_noise_shape_quantizer_del_dec‚€n€ЂH€Ј €> Шc~SKP_Silk_nsq_del_dec_scale_states‚€k€Ѕz€T€пШ icSKP_Silk_copy_del_dec_state‚€v€r‡€Y€ŽШ !SKP_Silk_NLSF_CB_struct€– SKP_Silk_detect_SWB_state€ UNSQ_sample_struct€t HNSQ_del_dec_struct€h ^SKP_Silk_encoder_control€  "SKP_Silk_encoder_state€ё SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_LP_state€  SKP_Silk_detect_SWB_state€ SKP_Silk_range_coder_state€ž ѕSKP_Silk_VAD_state€ №SKP_SILK_LBRR_struct€ф фSKP_Silk_nsq_state€к SKP_Silk_range_coder_state€ž Мsize_tu— SKP_Silk_MA_Prediction‚€> SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)АSA_Parameter€)† \NSQ_sample_struct€t mSKP_Silk_encoder_control€  TNSQ_del_dec_struct€h яSKP_Silk_nsq_state€к4strnlen†€ЎSA_Method€)†@ Нwchar_t!Ћwcsnlen†€ SKP_Silk_VAD_state€SKP_Silk_Quantization_Offsets_Q10„€E SKP_Silk_LP_state€  ]SKP_Silk_encoder_state€ё єSKP_SILK_LBRR_struct€ф [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœOO€ O €ўO3 f0" D ЄBEOœOzSS&ІF-Ь-Ъ-Ш-Ц-Ф-Т-Р-О-М-К-И-Ж-Д-В-АLOSO{O|O}O~OO€€O€O€‚O€ƒO€„O€…O€†O€ˆ&йЙА†CГ!3†At€Ь'†Cє0†At3†At2†AtKO€‹&бЙД†CЖ!3†At€Є'†Cє0†At2†AtKO€3‚KO€3†At€­@†CƒЙА†CГ!3†At€№'†Cє0†At3†Bu€pU†Bu3†AtU†At&хU†CƒLKO€‘&а3†At2†AtK:щ)ъ&а3†At5†AtK)щЙа†AtЙА†CГ!3†At€№'†Cє0†At"8ыSO€’&ц&хЙа†At3†A€p(2†Cф$KO€“Йц†Cф$3†At€d'†CєЙа†AtЙВ†CЕ!3†AtX'†Cє0†At3†At 2†AtKO€”Йц†Cф$3†At€h'†CєЙц†Cф$3†At€d'†Cє0†At2†AtKO€•Йц†Cф$3†At€l'†Cє3†At2†AtKO€–Йц†Cф$3†At€`'†CєЙД†CЖ!3†At€ '†Cє0†At2†AtKO€—Йц†Cф$3†At€'†Cы 3†A(ЙД†CЖ!3†At€€'†Cы ЙА†CГ!3†At€Ь'†Cє0†At3†At3†A(0†At2†AtKO€˜3†At€Ќ@†Cƒ3†Bu€€U†BuЙД†CЖ!3†At€€'†CР"U†CЫ Йц†Cф$3†At€'†Cщ$U†CƒLKO€™T:ъ)ыO€›&с&ЙВ†CЕ!3†Ath'†Cє0†At3†A(ЙВ†CЕ!3†Atd'†Cє0†At3†A(0Є!­ 2†AtKO€œ&з3†At2†AtKO€ž&и&Н†At€ Йй†AtU†At3†At U†AtL2†AtKO€ ЙВ†CЕ!3†Ath'†Cє0†At3†At8эSO€Ё&а3†At2†AtK:ю)я&а3†At5†AtK)юЙа†At3†At"8№SO€Ђ&и&Н†At€ ЙВ†CЕ!3†Atl'†Cы Йа†At3†A(0†At3†At3†AtU†AtЙи†AtU†AtL2†AtKO€ЃT:я)№O€ЄTO€І)эЙКІA“ 3†At8ёSO€Ї&г3†At2†AtKO€ЈT:ђ)ёSO€Љ&г3†At2†AtKO€ЊT)ђO€­&нЙД†CЖ!3†At'†CК"ЙА†CГ!3†At€Ь'†Cє0†At3†A(2†C‘KO€ЎЙД†CЖ!3†At€Ќ'†CєЙА†CГ!3†At€Ь'†Cє0†At2†AtKO€ЏЙД†CЖ!3†At€Ј'†CєЙА†CГ!3†At€Ь'†Cє0†At2†AtKO€А&е3†At2†AtKO€Б&а3†At2†AtK:ѓ)є&а3†At5†AtK)ѓЙа†At3†At"8ѕSO€В&кЙМ†CЎ Йа†At3†At 3†AtЙг†At 3†At3†A(2†CЎ KO€Г&лЙО†CЎ Йа†At3†At3†A(2†CЎ KO€Д&мЙР†CЎ Йа†At3†At3†A(2†CЎ KO€ЖЙД†CЖ!3†At€И'†Cє3†At2†AtKO€ЗЙВ†CЕ!3†Ath'†Cє0†At3†At8іSO€Й&бЙВ†CЕ!3†Atl'†Cы Йа†At3†A(0†At2†AtKO€МЙа†At3†AtЙг†At3†At  3†At8їSO€НЙа†At3†At8јSO€Р&у&х3†A(3†At€l'†Cє0†At2†AtKO€С&д3†At2†AtKO€Т&Я3†At2†AtK:љ)њ&Я3†At5†AtK)љЙЯ†AtЙА†CГ!3†At€№'†Cє0†At"8ћSO€У&хЙЯ†At3†A€p(3†At€l'†Cє0†AtЙу†At"8ќSO€Ф&у&хЙЯ†At3†A€p(3†At€l'†Cє0†At2†AtKO€Х&дЙЯ†At2†AtKO€ЦTO€Ч)ќT:њ)ћO€Ш&Я3†At2†AtK:§)ў&Я3†At5†AtK)§ЙЯ†AtЙА†CГ!3†At€№'†Cє0†At"8џSO€ЩЙЯ†AtЙд†At 8SO€Ъ&хЙЯ†At3†A€p(3†At€l'†Cє3†At€џџџ†AtKO€Ы3‚KO€ЬTO€Э)T:ў)џO€а&ц&хЙд†At3†A€p(2†Cф$KO€б&жЙз†AtЙи†At2†AtKO€в&Я3†At2†AtK:)&Я3†At5†AtK)ЙЯ†AtЙи†At"8SO€г&жЙж†At3†At3†At 2†AtKO€дЙИ†CєЙЯ†AtЙи†At3†A(Йц†Cф$3†At€€'†Cы Йж†At3†A(0†At3†At 2†AtKO€еO€зЙн†C‘ЙЯ†AtЙи†At3†A(Йц†Cф$3†At€'†Cы Йж†At3†A(0†At3†At Йц†Cф$3†At€€'†Cы Йж†At3†A(0†At,„!,†AtЙц†Cф$3†At€'†Cы Йж†At3†A(0†At3†At€џџ Йц†Cф$3†At€€'†Cы Йж†At3†A(0†At,„!,†At3†At Йц†Cф$3†At€'†Cы Йж†At3†A(0†AtЙц†Cф$3†At€€'†Cы Йж†At3†A(0†At3†At 3†At3†At 3†At 3†At3†At 3†At€џ$3†At€џЙц†Cф$3†At€'†Cы Йж†At3†A(0†At3†At Йц†Cф$3†At€€'†Cы Йж†At3†A(0†At,„!,†AtЙц†Cф$3†At€'†Cы Йж†At3†A(0†At3†At€џџ Йц†Cф$3†At€€'†Cы Йж†At3†A(0†At,„!,†At3†At Йц†Cф$3†At€'†Cы Йж†At3†A(0†AtЙц†Cф$3†At€€'†Cы Йж†At3†A(0†At3†At 3†At3†At 3†At 3†At3†At 3†At€€џџ"3†At€€џџЙц†Cф$3†At€'†Cы Йж†At3†A(0†At3†At Йц†Cф$3†At€€'†Cы Йж†At3†A(0†At,„!,†AtЙц†Cф$3†At€'†Cы Йж†At3†A(0†At3†At€џџ Йц†Cф$3†At€€'†Cы Йж†At3†A(0†At,„!,†At3†At Йц†Cф$3†At€'†Cы Йж†At3†A(0†AtЙц†Cф$3†At€€'†Cы Йж†At3†A(0†At3†At 3†At3†At 3†At 3†At3†At CBCB,„!2„!KO€иЙД†CЖ!3†At€€'†Cы ЙД†CЖ!3†At€Ќ'†Cє0†AtЙи†AtЙЯ†At3†A(Йц†Cф$3†At€'†Cы Йж†At3†A(0†At2†AtKO€йT:)O€л&е3†At2†AtKO€мTO€п)ј&вЙА†CГ!3†At€Ь'†Cє0†AtЙб†AtЙА†CГ!3†At€ќ'†Cє0†At3†At2†AtKO€р&в3†AtЙА†CГ!3†At€Ь'†Cє0†AtЙА†CГ!3†At€ќ'†Cє0†At$Йв†At3†At$3†AtЙв†AtЙА†CГ!3†At€Ь'†Cє0†AtЙА†CГ!3†At€ќ'†Cє0†At"ЙА†CГ!3†At€Ь'†Cє0†AtЙА†CГ!3†At€ќ'†Cє0†AtЙв†AtCBCBЙв†AtЙА†CГ!3†At€Ь'†Cє0†AtЙА†CГ!3†At€ќ'†Cє0†At$ЙА†CГ!3†At€Ь'†Cє0†AtЙА†CГ!3†At€ќ'†Cє0†AtЙв†At3†At"3†AtЙв†AtCBCBCB2†AtKO€т3†At€­@†CƒЙА†CГ!3†At€ќ'†Cє0†At3†BuU†Bu3†AtU†At&тU†CƒLKO€уO€ф&— Н‚€?ЙА†CГ!3†At€ќ'†Cє0†AtUІA“ ЙА†CГ!3†At€Ь'†Cє0†AtЙв†AtUІA“ &пЙв†At3†AU†C‘&тU†CєЙк†CЎ U†CЎ ЙД†CЖ!3†At'†CК"Йв†AtЙа†AtЙА†CГ!3†At€а'†Cє0†At3†A(U†CЎ LKO€цЙД†CЖ!3†At€Ј'†CєЙА†CГ!3†At€Ь'†Cє0†At2†AtKO€чЙД†CЖ!3†At€И'†Cє3†At2†AtKO€шTO€щ)їTO€ь)і3‚KO€э&рЙТ†C” Йа†At3†A(0ІA“ 3†At 2†AtKO€ю&рЙТ†C” Йа†At3†A(0ІA“ 3†At ,†At3†At †AtKO€№O€ёO€ђ&~Н‚€lЙВ†CЕ!3†Atl'†CЭ"U†C” ЙШ†C” U†C” ЙЬІA“ UІA“ Йз†AtU†AtЙА†CГ!3†At€№'†Cє0†AtU†AtЙа†AtU†At&оU†Cє&пU†C‘Йй†AtU†At&фU†CєЙЖ†CЎ U†CЎ &хU†Cф$ЙД†CЖ!U†CЖ!LKO€єO€ѕO€іO€їO€ј&ЏН‚€oЙи†AtU†At&зU†CєЙА†CГ!3†At€№'†Cє0†AtU†AtЙА†CГ!3†At€ќ'†Cє0†AtU†AtЙА†CГ!3†At€ј'†Cє0†AtU†At&е3†At5†AtU†AtЙА†CГ!3†At€а'†Cє0†AtU†AtЙс†AtU†AtЙЪІA“ U†AtЙШ†C” Йа†At3†A(0ІA“ U†AtЙЦ†C” Йа†At3†A(0ІA“ U†AtЙФ†C” Йа†At3†A(0ІA“ U†AtЙр†AtU†AtЙб†AtU†AtЙм†CЎ U†CЎ Йл†CЎ U†CЎ Йк†CЎ U†CЎ &оU†CєЙн†C‘U†C‘ЙИ†CєU†Cє&фU†C” ЙВ†CЕ!3†Ath'†Cє0†AtU†At&хU†Cф$ЙД†CЖ!U†CЖ!LKO€њ&ЖЙА†CГ!3†At€а'†Cє0†At3†A†CЎ KO€ћ&ИЙА†CГ!3†At€а'†Cє0†At3†A†CєKO€ќ&нЙА†CГ!3†At€а'†Cє0†At3†A†C‘KO€§T:є)ѕO€&у&х3†A(3†At€l'†Cє0†At2†AtKO€&д3†At2†AtKO€&а3†At2†AtK:0)1&а3†At5†AtK)0Йа†AtЙА†CГ!3†At€№'†Cє0†At"82SO€&хЙа†At3†A€p(3†At€l'†Cє0†AtЙу†At"83SO€&у&хЙа†At3†A€p(3†At€l'†Cє0†At2†AtKO€&дЙа†At2†AtKO€TO€)3T:1)2O€ &ц&хЙд†At3†A€p(2†Cф$KO€ ЙВ†CЕ!3†AtX'†CєЙц†Cф$3†At€h'†Cє0†At2†AtKO€ &жЙз†AtЙи†At2†AtKO€ &Я3†At2†AtK:4)5&Я3†At5†AtK)4ЙЯ†AtЙи†At"86SO€&жЙж†At3†At3†At 2†AtKO€ЙИ†CєЙЯ†AtЙи†At3†A(Йц†Cф$3†At€€'†Cы Йж†At3†A(0†At3†At 2†AtKO€O€Йн†C‘ЙЯ†AtЙи†At3†A(Йц†Cф$3†At€'†Cы Йж†At3†A(0†At3†At Йц†Cф$3†At€€'†Cы Йж†At3†A(0†At,„!,†AtЙц†Cф$3†At€'†Cы Йж†At3†A(0†At3†At€џџ Йц†Cф$3†At€€'†Cы Йж†At3†A(0†At,„!,†At3†At Йц†Cф$3†At€'†Cы Йж†At3†A(0†AtЙц†Cф$3†At€€'†Cы Йж†At3†A(0†At3†At 3†At3†At 3†At 3†At3†At 3†At€џ$3†At€џЙц†Cф$3†At€'†Cы Йж†At3†A(0†At3†At Йц†Cф$3†At€€'†Cы Йж†At3†A(0†At,„!,†AtЙц†Cф$3†At€'†Cы Йж†At3†A(0†At3†At€џџ Йц†Cф$3†At€€'†Cы Йж†At3†A(0†At,„!,†At3†At Йц†Cф$3†At€'†Cы Йж†At3†A(0†AtЙц†Cф$3†At€€'†Cы Йж†At3†A(0†At3†At 3†At3†At 3†At 3†At3†At 3†At€€џџ"3†At€€џџЙц†Cф$3†At€'†Cы Йж†At3†A(0†At3†At Йц†Cф$3†At€€'†Cы Йж†At3†A(0†At,„!,†AtЙц†Cф$3†At€'†Cы Йж†At3†A(0†At3†At€џџ Йц†Cф$3†At€€'†Cы Йж†At3†A(0†At,„!,†At3†At Йц†Cф$3†At€'†Cы Йж†At3†A(0†AtЙц†Cф$3†At€€'†Cы Йж†At3†A(0†At3†At 3†At3†At 3†At 3†At3†At CBCB,„!2„!KO€ЙД†CЖ!3†At€€'†Cы ЙД†CЖ!3†At€Ќ'†Cє0†AtЙи†AtЙЯ†At3†A(Йц†Cф$3†At€'†Cы Йж†At3†A(0†At2†AtKO€&оЙД†CЖ!3†At€Ј'†Cє0†AtЙи†AtЙЯ†At3†A(Йц†Cф$3†At€€'†Cы Йж†At3†A(0†At2†AtKO€T:5)6O€3†At€Ќ@†Cƒ3†Bu€€U†BuЙц†Cф$3†At€'†Cы ЙА†CГ!3†At€а'†Cє0†At3†A(U†CЫ ЙД†CЖ!3†At€€'†CР"U†CƒLKO€ЙД†CЖ!3†At€ '†CєЙц†Cф$3†At€`'†Cє0†At2†AtKO€ЙД†CЖ!3†At€Д'†CєЙД†CЖ!3†At€Д'†Cє0†At2†AtKO€ЙД†CЖ!3†At€Є'†CєЙВ†CЕ!3†Atl'†Cы 3†A (0†At2†AtKO€3†At€Ќ@†CƒЙА†CГ!3†At€Ь'†Cє0†At3†BuU†BuЙД†CЖ!3†At'†CК"ЙА†CГ!3†At€Ь'†Cє0†At3†A(U†CЫ ЙД†CЖ!3†At'„Cп!U†CƒLKO€3†At€Ќ@†CƒЙА†CГ!3†At€Ь'†Cє0†At3†BuU†BuЙД†CЖ!3†At€€'†Cы ЙА†CГ!3†At€Ь'†Cє0†At3†A(U†CЫ ЙД†CЖ!3†At€€'†Cт$U†CƒLKO€!T)ЮOGTTO€ O €ўO3 f0" D ЄBEOœO€@SS&ЏF--Ž-Œ-Š-ˆ-†-„-‚-€-~-|-z-x-v-t-r-p-n-l-j-h-f-d-bLOSO€AO€BO€CO€DO€EO€FO€GO€HO€IO€JO€KO€LO€MO€NO€OO€Q&АЙb†CЖ!3†At€€'†Cы Йb†CЖ!3†At€Ќ'†Cє0†AtЙv†At3†At3†A(2†CєKO€R&ЏЙn†CєЙb†CЖ!3†At€Ј'†Cє0†AtЙv†At3†At3†A(2†CєKO€U3†At€Ќ@†CƒЙІAt3†BuU†BuЙp†CЎ U†CЫ &ВU†CƒLKO€V3†At€Ќ@†CƒЙˆ†At3†BuU†BuЙt†CЎ U†CЫ &ГU†CƒLKO€X&“3†At2†AtK:Й)К&“3†At5†AtK)ЙЙ“†AtЙ„†At"8ЛSO€\Йf†At3†At8МSO€^&›ЙЏ†Cє3†A(0†At3†At Йr†CЎ 3†A(0Є!­ ,„!,†AtЙЏ†Cє3†A(0†At3†At€џџ Йr†CЎ 3†A(0Є!­ ,„!,†At3†At 2†AtKO€_&›Й›†AtЙЏ†Cє3†Aќ(0†At3†At Йr†CЎ 3†A(0Є!­ ,„!,†AtЙЏ†Cє3†Aќ(0†At3†At€џџ Йr†CЎ 3†A(0Є!­ ,„!,†At3†At 2†AtKO€`&›Й›†AtЙЏ†Cє3†Aј(0†At3†At Йr†CЎ 3†A(0Є!­ ,„!,†AtЙЏ†Cє3†Aј(0†At3†At€џџ Йr†CЎ 3†A(0Є!­ ,„!,†At3†At 2†AtKO€a&›Й›†AtЙЏ†Cє3†Aє(0†At3†At Йr†CЎ 3†A(0Є!­ ,„!,†AtЙЏ†Cє3†Aє(0†At3†At€џџ Йr†CЎ 3†A(0Є!­ ,„!,†At3†At 2†AtKO€b&›Й›†AtЙЏ†Cє3†A№(0†At3†At Йr†CЎ 3†A(0Є!­ ,„!,†AtЙЏ†Cє3†A№(0†At3†At€џџ Йr†CЎ 3†A(0Є!­ ,„!,†At3†At 2†AtKO€c&Џ3†A5†CєKO€dT:б)МSO€e&›3†At2†AtKO€fT)бO€iЙv†At3†At$8вSO€k&žЙА†Cє3†A(0†AtЙА†Cє3†Aј(0†At3†At Йx†At,„!,†AtЙА†Cє3†A(0†AtЙА†Cє3†Aј(0†At3†At€џџ Йx†At,„!,†At3†At 2†AtKO€l&žЙž†AtЙА†Cє3†Aќ(0†At3†At Йx†At3†At ЙА†Cє3†Aќ(0†At3†At€џџ Йx†At3†At 3†At 2†AtKO€m&žЙž†At3†At 2†AtKO€n&А3†A5†CєKO€oT:з)вSO€p&ž3†At2†AtKO€qT)зO€s&•3†At2†AtK:и)й&•3†At5†AtK)иЙ•†AtЙŒ†At"8кSO€u&ЕЙd†Cф$Й•†At3†A€p(2†Cф$KO€x&Ж&ДЙ•†At3†A0(2†Cђ$KO€{ЙЕ†Cф$3†At€d'†Cє3†At€kc6ЙЕ†Cф$3†At€d'†Cє0†At3†At€5„Г 2†AtKO€~&ЉЙЕ†Cф$3†At€d'†Cє0†At3†At 2†AtKO€&БЙЕ†Cф$3†At€'†Cы 3†AtЙ“†At3†A(2†CєKO€ƒ3‚KO€„3‚KO€…3‚KO€ˆ&Ј&В3†A(0†At2†AtKO€‰&œЙБ†Cє3†A(0†At3†At ЙЈ†At,„!,†AtЙБ†Cє3†A(0†At3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€Š&œЙœ†AtЙБ†Cє3†Aќ(0†At3†At ЙЈ†At3†At ЙБ†Cє3†Aќ(0†At3†At€џџ ЙЈ†At3†At 3†At 2†AtKO€‹&Ј&В3†A(0†At2†AtKO€Œ&œЙœ†AtЙБ†Cє3†Aј(0†At3†At ЙЈ†At,„!,†AtЙБ†Cє3†Aј(0†At3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&œЙœ†AtЙБ†Cє3†Aє(0†At3†At ЙЈ†At3†At ЙБ†Cє3†Aє(0†At3†At€џџ ЙЈ†At3†At 3†At 2†AtKO€Ž&Ј&В3†A(0†At2†AtKO€&œЙœ†AtЙБ†Cє3†A№(0†At3†At ЙЈ†At,„!,†AtЙБ†Cє3†A№(0†At3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&œЙœ†AtЙБ†Cє3†Aь(0†At3†At ЙЈ†At3†At ЙБ†Cє3†Aь(0†At3†At€џџ ЙЈ†At3†At 3†At 2†AtKO€‘&Ј&В3†A (0†At2†AtKO€’&œЙœ†AtЙБ†Cє3†Aш(0†At3†At ЙЈ†At,„!,†AtЙБ†Cє3†Aш(0†At3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€“&œЙœ†AtЙБ†Cє3†Aф(0†At3†At ЙЈ†At3†At ЙБ†Cє3†Aф(0†At3†At€џџ ЙЈ†At3†At 3†At 2†AtKO€”&Ј&В3†A(0†At2†AtKO€•&œЙœ†AtЙБ†Cє3†Aр(0†At3†At ЙЈ†At,„!,†AtЙБ†Cє3†Aр(0†At3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€–&œЙœ†AtЙБ†Cє3†Aм(0†At3†At ЙЈ†At3†At ЙБ†Cє3†Aм(0†At3†At€џџ ЙЈ†At3†At 3†At 2†AtKO€—&”3†At 2†AtK:ђ)ѓ&”3†At†AtK)ђЙ”†AtЙŠ†At"8єSO€˜&Ј&ВЙ”†At3†At 3†A(0†At2†AtKO€™&œЙœ†AtЙБ†CєЙ”†At3†A(0†At3†At ЙЈ†At,„!,†AtЙБ†CєЙ”†At3†A(0†At3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€š&œЙœ†AtЙБ†CєЙ”†At3†At3†A(0†At3†At ЙЈ†At3†At ЙБ†CєЙ”†At3†At3†A(0†At3†At€џџ ЙЈ†At3†At 3†At 2†AtKO€›T:ѓ)єO€ž3‚KO€Ÿ3‚KO€ 3‚KO€Ї&Ј&Г3†A(0†At2†AtKO€Ј&ЙБ†Cє3†A(0†At3†At ЙЈ†At,„!,†AtЙБ†Cє3†A(0†At3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€Љ&Й†AtЙБ†Cє3†Aќ(0†At3†At ЙЈ†At3†At ЙБ†Cє3†Aќ(0†At3†At€џџ ЙЈ†At3†At 3†At 2†AtKO€Њ&Ј&Г3†A(0†At2†AtKO€Ћ&Й†AtЙБ†Cє3†Aј(0†At3†At ЙЈ†At,„!,†AtЙБ†Cє3†Aј(0†At3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€Ќ&Й†AtЙБ†Cє3†Aє(0†At3†At ЙЈ†At3†At ЙБ†Cє3†Aє(0†At3†At€џџ ЙЈ†At3†At 3†At 2†AtKO€­&Ј&Г3†A(0†At2†AtKO€Ў&Й†AtЙБ†Cє3†A№(0†At3†At ЙЈ†At,„!,†AtЙБ†Cє3†A№(0†At3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€Џ&Й†AtЙБ†Cє3†Aь(0†At3†At ЙЈ†At3†At ЙБ†Cє3†Aь(0†At3†At€џџ ЙЈ†At3†At 3†At 2†AtKO€А&Ј&Г3†A (0†At2†AtKO€Б&Й†AtЙБ†Cє3†Aш(0†At3†At ЙЈ†At,„!,†AtЙБ†Cє3†Aш(0†At3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€В&Й†AtЙБ†Cє3†Aф(0†At3†At ЙЈ†At3†At ЙБ†Cє3†Aф(0†At3†At€џџ ЙЈ†At3†At 3†At 2†AtKO€Г&Ј&Г3†A(0†At2†AtKO€Д&Й†AtЙБ†Cє3†Aр(0†At3†At ЙЈ†At,„!,†AtЙБ†Cє3†Aр(0†At3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€Е&Й†AtЙБ†Cє3†Aм(0†At3†At ЙЈ†At3†At ЙБ†Cє3†Aм(0†At3†At€џџ ЙЈ†At3†At 3†At 2†AtKO€Ж&Ј&Г3†A(0†At2†AtKO€З&Й†AtЙБ†Cє3†Aи(0†At3†At ЙЈ†At,„!,†AtЙБ†Cє3†Aи(0†At3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€И&Й†AtЙБ†Cє3†Aд(0†At3†At ЙЈ†At3†At ЙБ†Cє3†Aд(0†At3†At€џџ ЙЈ†At3†At 3†At 2†AtKO€Й&”3†At 2†AtK:)&”3†At†AtK)Й”†AtЙˆ†At"8SO€К&Ј&ГЙ”†At3†At 3†A(0†At2†AtKO€Л&Й†AtЙБ†CєЙ”†At3†A(0†At3†At ЙЈ†At,„!,†AtЙБ†CєЙ”†At3†A(0†At3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€М&Й†AtЙБ†CєЙ”†At3†At3†A(0†At3†At ЙЈ†At3†At ЙБ†CєЙ”†At3†At3†A(0†At3†At€џџ ЙЈ†At3†At 3†At 2†AtKO€НT:)O€О&Й†At3†At 2†AtKO€П&Й†AtЙЕ†Cф$3†At€`'†Cє0†At3†At Йz†At,„!,†AtЙЕ†Cф$3†At€`'†Cє0†At3†At€џџ Йz†At,„!,†At3†At 2†AtKO€С&ŸЙЕ†Cф$3†At€'†Cы ЙŽ†Cє0†At3†A(0†At3†At Й|†At,„!,†AtЙЕ†Cф$3†At€'†Cы ЙŽ†Cє0†At3†A(0†At3†At€џџ Й|†At,„!,†At3†At 3†At 2†AtKO€Т&ŸЙŸ†AtЙЕ†Cф$3†At€`'†Cє0†At3†At Й|†At3†At ЙЕ†Cф$3†At€`'†Cє0†At3†At€џџ Й|†At3†At 3†At 2†AtKO€Ц&­Й›†AtЙž†At2†AtKO€Ч&­Й­†At3†At 3†At3†At 2†AtKO€Ш&­Й­†AtЙœ†At2†AtKO€Щ&­Й­†AtЙ†At2†AtKO€Ъ&­Й­†AtЙŸ†At2†AtKO€Ы& Йh†C” Й“†At3†A(0ІA“ Й­†At2†AtKO€Я& Й †AtЙЉ†At ЙЉ†At2†AtKO€а& Й †AtЙ‚†At2†AtKO€б& Й †At3†At€$3†At€Й †At3†At€џџ"3†At€џџЙ †AtCBCB2†AtKO€дЙ †At3†At€њџџ"8#SO€е&ІЙ †At3†At 3†At3†At 3†At 2†AtKO€ж& Й †AtЙІ†At2†AtKO€з&ЂЙІ†AtЙ‚†AtЙ€†AtЙ †At,„!,†AtЙ †At,„!,†At3†At 2†AtKO€и&ЃЙЂ†At3†At€2†AtKO€й&ЃЙЃ†AtЙ€†AtЙ †At3†At 2†AtKO€к&ЇЙІ†At3†At€2†AtKO€лT:()#Й †At3†At€$8)SO€м&ІЙ †At3†At 3†At3†At 3†At 2†AtKO€н& Й †AtЙІ†At2†AtKO€о&ЂЙІ†AtЙ‚†AtЙ€†AtЙ †At,„!,†AtЙ †At,„!,†At3†At 2†AtKO€п&ЃЙЂ†At3†At€2†AtKO€р&ЃЙЃ†AtЙ€†AtЙ †At3†At 2†AtKO€с&ЇЙІ†At3†At€2†AtKO€тT:.))SO€у&ЁЙ‚†At,„!,†AtЙ€†At,„!,†At2†AtKO€ф&ЃЙЁ†AtЙ †At,„!,†AtЙ †At,„!,†At3†At 2†AtKO€х&ЂЙЃ†At3†At€2†AtKO€ц&ЂЙЂ†AtЙ€†AtЙ †At3†At ЙЁ†At3†At 2†AtKO€ч&І3†At€ќџџ2†AtKO€ш&Ї3†At2†AtKO€щT).)(O€ыЙЂ†AtЙЃ†At"87SO€ьЙЖ†Cђ$3†A(3†At'†CєЙЕ†Cф$3†At€l'†Cє0†AtЙЂ†At2†AtKO€эЙЖ†Cђ$3†A(3†At'†CєЙЕ†Cф$3†At€l'†Cє0†AtЙЃ†At2†AtKO€юЙЖ†Cђ$3†A(3†At'†CєЙІ†At2†AtKO€яЙЖ†Cђ$3†A(3†At'†CєЙЇ†At2†AtKO€№T:8)7SO€ёЙЖ†Cђ$3†A(3†At'†CєЙЕ†Cф$3†At€l'†Cє0†AtЙЃ†At2†AtKO€ђЙЖ†Cђ$3†A(3†At'†CєЙЕ†Cф$3†At€l'†Cє0†AtЙЂ†At2†AtKO€ѓЙЖ†Cђ$3†A(3†At'†CєЙЇ†At2†AtKO€єЙЖ†Cђ$3†A(3†At'†CєЙІ†At2†AtKO€ѕT)8O€њ&ЊЙ‚†AtЙЖ†Cђ$3†A(3†At'†Cє0†At2†AtKO€ћ&ЊЙЊ†AtЙЉ†At ЙЉ†At2†AtKO€ў&ЋЙЊ†AtЙ›†At3†At 3†At3†At 2†AtKO€џ&ЌЙЋ†AtЙœ†At2†AtKO€&ЎЙЌ†AtЙ†At2†AtKO€ЙЖ†Cђ$3†A(3†At'†CєЙЎ†AtЙŸ†At2†AtKO€ЙЖ†Cђ$3†A(3†At '†CєЙЎ†At3†At 2†AtKO€ЙЖ†Cђ$3†A(3†At'†CєЙЌ†At3†At 2†AtKO€ЙЖ†Cђ$3†A(3†At'†CєЙЋ†At3†At 2†AtKO€ &ЊЙ‚†AtЙЖ†Cђ$3†A(3†At'†Cє0†At2†AtKO€ &ЊЙЊ†AtЙЉ†At ЙЉ†At2†AtKO€&ЋЙЊ†AtЙ›†At3†At 3†At3†At 2†AtKO€&ЌЙЋ†AtЙœ†At2†AtKO€&ЎЙЌ†AtЙ†At2†AtKO€ЙЖ†Cђ$3†A(3†At'†CєЙЎ†AtЙŸ†At2†AtKO€ЙЖ†Cђ$3†A(3†At '†CєЙЎ†At3†At 2†AtKO€ЙЖ†Cђ$3†A(3†At'†CєЙЌ†At3†At 2†AtKO€ЙЖ†Cђ$3†A(3†At'†CєЙЋ†At3†At 2†AtKO€T:й)кO€ЙކCєЙކCє0†At3†At3†At 2†AtKO€&™ЙކCє0†AtЙ†At3†At 2†AtKO€&Є&Д3†A(3†At'†Cє0†At2†AtKO€&–3†At2†AtKO€ &•3†At2†AtK:9):&•3†At5†AtK)9Й•†AtЙŒ†At"8;SO€!&ДЙ•†At3†A0(3†A(3†At'†Cє0†AtЙЄ†At"8<SO€"&Є&ДЙ•†At3†A0(3†A(3†At'†Cє0†At2†AtKO€#&–Й•†At2†AtKO€$TO€%)<T::);O€(&šЙd†Cф$Й–†At3†A€p(3†At'†Cы Й™†At3†A(0†At2†AtKO€)&•3†At2†AtK:=)>&•3†At5†AtK)=Й•†AtЙŒ†At"8?SO€*Йd†Cф$Й•†At3†A€p(3†At'†Cы Й™†At3†A(0†AtЙš†At 8@SO€+&ДЙ•†At3†A0(3†A(3†At'†Cє&ДЙ•†At3†A0(3†A(3†At'†Cє0†At3†At€џџџ2†AtKO€,&ДЙ•†At3†A0(3†A(3†At'†Cє&ДЙ•†At3†A0(3†A(3†At'†Cє0†At3†At€џџџ2†AtKO€-3‚KO€.TO€/)@T:>)?O€2&Ѕ&Д3†A(3†At'†Cє0†At2†AtKO€3&Є&Д3†A(3†At'†Cє0†At2†AtKO€4&˜3†At2†AtKO€5&—3†At2†AtKO€6&•3†At2†AtK:B)C&•3†At5†AtK)BЙ•†AtЙŒ†At"8DSO€8&ДЙ•†At3†A0(3†A(3†At'†Cє0†AtЙЅ†At$8ESO€9&Ѕ&ДЙ•†At3†A0(3†A(3†At'†Cє0†At2†AtKO€:&˜Й•†At2†AtKO€;TO€=)E&ДЙ•†At3†A0(3†A(3†At'†Cє0†AtЙЄ†At"8FSO€>&Є&ДЙ•†At3†A0(3†A(3†At'†Cє0†At2†AtKO€?&—Й•†At2†AtKO€@TO€A)FT:C)DO€DЙЄ†AtЙЅ†At"8GSO€E&cН‚€wЙ“†AtU†AtЙd†Cф$Й—†At3†A€p(U†Cф$Йd†Cф$ɘ†At3†A€p(U†Cф$LKO€F3†At€Ќ@†Cƒ3†BuU†Bu&ДЙ—†At3†A0(3†A(U†CЫ &Дɘ†At3†A0(3†A(U†CƒLKO€GTO€J)G&ЕЙd†Cф$Й–†At3†A€p(2†Cф$KO€KЙ††At3†At$9JЙ“†AtЙ†At#8I)JSO€LЙj†CєЙ“†AtЙ†At3†A(ЙЕ†Cф$3†At€€'†Cы Й™†At3†A(0†At3†At 2†AtKO€MO€NЙl†C‘Й“†AtЙ†At3†A(ЙЕ†Cф$3†At€'†Cы Й™†At3†A(0†At3†At ЙЕ†Cф$3†At€€'†Cы Й™†At3†A(0†At,„!,†AtЙЕ†Cф$3†At€'†Cы Й™†At3†A(0†At3†At€џџ ЙЕ†Cф$3†At€€'†Cы Й™†At3†A(0†At,„!,†At3†At ЙЕ†Cф$3†At€'†Cы Й™†At3†A(0†AtЙЕ†Cф$3†At€€'†Cы Й™†At3†A(0†At3†At 3†At3†At 3†At 3†At3†At 3†At€џ$3†At€џЙЕ†Cф$3†At€'†Cы Й™†At3†A(0†At3†At ЙЕ†Cф$3†At€€'†Cы Й™†At3†A(0†At,„!,†AtЙЕ†Cф$3†At€'†Cы Й™†At3†A(0†At3†At€џџ ЙЕ†Cф$3†At€€'†Cы Й™†At3†A(0†At,„!,†At3†At ЙЕ†Cф$3†At€'†Cы Й™†At3†A(0†AtЙЕ†Cф$3†At€€'†Cы Й™†At3†A(0†At3†At 3†At3†At 3†At 3†At3†At 3†At€€џџ"3†At€€џџЙЕ†Cф$3†At€'†Cы Й™†At3†A(0†At3†At ЙЕ†Cф$3†At€€'†Cы Й™†At3†A(0†At,„!,†AtЙЕ†Cф$3†At€'†Cы Й™†At3†A(0†At3†At€џџ ЙЕ†Cф$3†At€€'†Cы Й™†At3†A(0†At,„!,†At3†At ЙЕ†Cф$3†At€'†Cы Й™†At3†A(0†AtЙЕ†Cф$3†At€€'†Cы Й™†At3†A(0†At3†At 3†At3†At 3†At 3†At3†At CBCB,„!2„!KO€OЙb†CЖ!3†At€€'†Cы Йb†CЖ!3†At€Ќ'†Cє0†AtЙ†At3†A(ЙЕ†Cф$3†At€'†Cы Й™†At3†A(0†At2†AtKO€PЙn†CєЙb†CЖ!3†At€Ј'†Cє0†AtЙ†At3†A(ЙЕ†Cф$3†At€€'†Cы Й™†At3†A(0†At2†AtKO€QTO€R)IЙb†CЖ!3†At€Ќ'†Cє3†At5†AtKO€SЙb†CЖ!3†At€Ј'†Cє3†At5†AtKO€V&•3†At2†AtK:s)t&•3†At5†AtK)sЙ•†AtЙŒ†At"8uSO€W&ЕЙd†Cф$Й•†At3†A€p(2†Cф$KO€X&Ж&ДЙ•†At3†A0(3†A(2†Cђ$KO€YЙЕ†Cф$3†At€`'†CєЙЖ†Cђ$3†At '†Cє0†At2†AtKO€ZЙЕ†Cф$3†At€'†Cы 3†At Й“†At3†A(ЙЖ†Cђ$3†At'†Cє0†At2†AtKO€[ЙЕ†Cф$3†At€'†Cы ЙŽ†Cє0†At3†A(ЙЖ†Cђ$3†At'†Cє0†At3†At 2†AtKO€\ЙЕ†Cф$3†At€€'†Cы ЙŽ†Cє0†At3†A(ЙЖ†Cђ$3†At'†Cє0†At2†AtKO€]ЙЕ†Cф$3†At€€'†Cы ЙŽ†Cє0†At3†A(ЙЖ†Cђ$3†At'†Cє0†At2†AtKO€^ЙЕ†Cф$3†At€'†Cы ЙŽ†Cє0†At3†A(ЙЖ†Cђ$3†At'†Cє0†At2†AtKO€_ЙЕ†Cф$3†At€d'†CєЙЕ†Cф$3†At€d'†Cє0†AtЙЖ†Cђ$3†At'†Cє0†At3†At 2†AtKO€`ЙЕ†Cф$3†At'†Cы ЙŽ†Cє0†At3†A(ЙЕ†Cф$3†At€d'†Cє0†At2†AtKO€aЙЕ†Cф$3†At€l'†CєЙЖ†Cђ$3†At'†Cє0†At2†AtKO€bЙЕ†Cф$3†At€€'†Cы ЙŽ†Cє0†At3†A(Й~†At2†AtKO€cT:t)uO€dT:К)ЛO€f&•3†At2†AtK:v)w&•3†At5†AtK)vЙ•†AtЙŒ†At"8xSO€g&ЕЙd†Cф$Й•†At3†A€p(2†Cф$KO€h3†At€Ќ@†Cƒ3†Bu€€U†BuЙЕ†Cф$3†At€'†Cы Й„†At3†A(U†CЫ ЙЕ†Cф$3†At€'†Cщ$U†CƒLKO€iT:w)xO€jT)’OGTTO€ O €ўO3 f0" D ЄBEOœO€{SS&~F-’--Ž-Œ-Š-ˆ-†-„-‚-€-~-|-zLOSO€|O€}O€~O€€&™3†At€џџџЙ†C” Йˆ†At3†A(0ІA“ 3†At ,†At2†AtKO€&™Й™†At3†At€џ"Й™†At3†At€џCB2†AtKO€‚&˜Й’†C” Йˆ†At3†A(0ІA“ 2†AtKO€„Йz†CЖ!3†At€И'†Cє0†At8žSO€…&›Й™†At3†At 2†AtKO€†Йˆ†At3†At8ŸSO€ˆ&›Й›†At3†At ЙŽІA“ ,„!,†AtЙ›†At3†At€џџ ЙŽІA“ ,„!,†At3†At 3†At 2†AtKO€‰TO€Š)Ÿ&•Йz†CЖ!3†At€Ј'†Cє0†Atɘ†At3†At2†AtK:Є)Ѕ&•3†At5†AtK)ЄЙ•†AtЙz†CЖ!3†At€Ј'†Cє0†At"8ІSO€‹3‚KO€ŒЙ††CєЙ•†At3†A(Й›†At3†At Й„†C‘Й•†At3†A(0„!,†AtЙ›†At3†At€џџ Й„†C‘Й•†At3†A(0„!,†At3†At 2†AtKO€T:Ѕ)ІO€ŽTO€‘)žЙ™†AtЙz†CЖ!3†At€Д'†Cє0†At 8ЌSO€’&š&iН†At€N3†AtUІA“ Йz†CЖ!3†At€Д'†Cє0†AtUІA“ Й™†AtUІA“ L2†AtKO€”&–3†At2†AtK:­)Ў&–3†At5†AtK)­Й–†AtЙŠ†At"8ЏSO€•&œЙ|†Cф$Й–†At3†A€p(2†Cф$KO€˜Йœ†Cф$3†At€`'†CєЙš†At3†At Йœ†Cф$3†At€`'†Cє0†At,„!,†AtЙš†At3†At€џџ Йœ†Cф$3†At€`'†Cє0†At,„!,†At3†At Йš†AtЙœ†Cф$3†At€`'†Cє0†At3†At 3†At3†At 2†AtKO€›&•3†At2†AtK:Д)Е&•3†At5†AtK)ДЙ•†At3†At "8ЖSO€œЙœ†Cф$3†At€'†Cы 3†At Й•†At3†At3†A(Йš†At3†At Йœ†Cф$3†At€'†Cы 3†At Й•†At3†At3†A(0†At,„!,†AtЙš†At3†At€џџ Йœ†Cф$3†At€'†Cы 3†At Й•†At3†At3†A(0†At,„!,†At3†At Йš†AtЙœ†Cф$3†At€'†Cы 3†At Й•†At3†At3†A(0†At3†At 3†At3†At 2†AtKO€T:Е)ЖO€ž&•3†At2†AtK:Л)М&•3†At5†AtK)ЛЙ•†At3†At "8НSO€ŸЙœ†Cф$3†At€€'†Cы Й•†At3†A(Йš†At3†At Йœ†Cф$3†At€€'†Cы Й•†At3†A(0†At,„!,†AtЙš†At3†At€џџ Йœ†Cф$3†At€€'†Cы Й•†At3†A(0†At,„!,†At3†At Йš†AtЙœ†Cф$3†At€€'†Cы Й•†At3†A(0†At3†At 3†At3†At 2†AtKO€ Йœ†Cф$3†At€'†Cы Й•†At3†A(Йš†At3†At Йœ†Cф$3†At€'†Cы Й•†At3†A(0†At,„!,†AtЙš†At3†At€џџ Йœ†Cф$3†At€'†Cы Й•†At3†A(0†At,„!,†At3†At Йš†AtЙœ†Cф$3†At€'†Cы Й•†At3†A(0†At3†At 3†At3†At 2†AtKO€ЁT:М)НO€ЂT:Ў)ЏO€Ї&—Й‚†At3†At2†AtKO€Ј&—Й—†At3†AtЙˆ†At3†At,„!,†AtЙ‚†At,„!,†At2†AtKO€Љ&—&Н†At€ ɘ†At3†AtU†AtЙ—†AtU†AtL2†AtKO€Ћ&•Йz†CЖ!3†At€Ќ'†Cє0†AtЙ—†At2†AtK:Ъ)Ы&•3†At5†AtK)ЪЙ•†AtЙz†CЖ!3†At€Ќ'†Cє0†At"8ЬSO€ЌЙz†CЖ!3†At€€'†Cы Й•†At3†A(Йš†At3†At Йz†CЖ!3†At€€'†Cы Й•†At3†A(0†At,„!,†AtЙš†At3†At€џџ Йz†CЖ!3†At€€'†Cы Й•†At3†A(0†At,„!,†At3†At Йš†AtЙz†CЖ!3†At€€'†Cы Й•†At3†A(0†At3†At 3†At3†At 2†AtKO€­T:Ы)ЬO€АЙz†CЖ!3†At€И'†Cє0†At3†At8бSO€Б&•Йz†CЖ!3†At€Ј'†Cє0†Atɘ†At3†At2†AtK:в)г&•3†At5†AtK)вЙ•†AtЙz†CЖ!3†At€Ј'†Cє0†At"8дSO€ВЙ††CєЙ•†At3†A(Йš†At3†At Й††CєЙ•†At3†A(0†At,„!,†AtЙš†At3†At€џџ Й††CєЙ•†At3†A(0†At,„!,†At3†At Йš†AtЙ††CєЙ•†At3†A(0†At3†At 3†At3†At 2†AtKO€ГT:г)дO€ДTO€Е)бTO€И)Ќ&•3†At2†AtK:й)к&•3†At5†AtK)йЙ•†AtЙ‚†At"8лSO€ЙЙ€†CєЙ•†At3†A(Й~†CЎ Й•†At3†A(0Є!­ ,„!,†AtЙ™†At,„!,†At3†At 2†AtKO€КT:к)лO€Н3‚KO€ОЙz†CЖ!3†At€Д'†CєЙ™†At2†AtKO€ПT)”OGTTO€ O €ўO3 f0" D ЄBEOœO€ЦSS&cF-ц-ф-тLOSO€Ч3†At€Ќ@†Cƒ3†Bu€€U†BuЙф†Cф$3†At'†Cњ$U†CЫ Йт†Cф$3†At'†Cњ$U†CƒLKO€Ш3†At€Ќ@†Cƒ3†Bu€€U†BuЙф†Cф$3†At€€'†Cњ$U†CЫ Йт†Cф$3†At€€'†Cњ$U†CƒLKO€Щ3†At€Ќ@†Cƒ3†Bu€€U†BuЙф†Cф$3†At€€'†Cњ$U†CЫ Йт†Cф$3†At€€'†Cњ$U†CƒLKO€Ъ3†At€Ќ@†Cƒ3†Bu€€U†BuЙф†Cф$3†At€'†Cњ$U†CЫ Йт†Cф$3†At€'†Cњ$U†CƒLKO€Ы3†At€Ќ@†Cƒ3†Bu€€U†BuЙф†Cф$3†At€'†Cњ$U†CЫ Йт†Cф$3†At€'†Cњ$U†CƒLKO€Э3†At€Ќ@†Cƒ3†Bu€€U†BuЙф†Cф$3†At€'†Cы Йц†At3†A(U†CЫ Йт†Cф$3†At€'†Cы Йц†At3†A(U†CƒLKO€ЮЙт†Cф$3†At€`'†CєЙф†Cф$3†At€`'†Cє0†At2†AtKO€ЯЙт†Cф$3†At€d'†CєЙф†Cф$3†At€d'†Cє0†At2†AtKO€аЙт†Cф$3†At€h'†CєЙф†Cф$3†At€h'†Cє0†At2†AtKO€бЙт†Cф$3†At€l'†CєЙф†Cф$3†At€l'†Cє0†At2†AtKO€вT)шOGTTOœO€дM: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t 6 5 432 1 0  џ ў §ќћ њ љјїіѕ є ѓђё№ я юэы ъ щЮ ЬLTP_scale_Q14†€ЪLambda_Q10†€ШGains_Q16†€ЦLF_shp_Q14†€ФTilt_Q14†€ТHarmShapeGain_Q14†€РAR2_Q13†€.ОLTPCoef_Q14†€.МPredCoef_Q12†€.КLSFInterpFactor_Q2†€Иq†€tЖx†€.ДNSQ†€ЖВpsEncCtrlC†€ЕАpsEncC†€Г пsLTP„€€Ё€[гLSF_interpolation_flag†tЯi†tцpsDD†€dхpsDelDec†€РЁ€p€pмAR_shp_Q13†€.еsubfr†tкA_Q12†€.дWinner_ind†tуRDmin_Q10†tтFiltState†@Ё€PиdecisionDelay†tсoffset_Q10†tоsLTP_Q16†€Ё€XрHarmShapeFIRPacked_Q14†tвstart_idx†tаk†tнpxq†€йsubfr_length†tжlast_smple_idx†tфx_sc_Q10†€рЁ€AлB_Q14†€.зsmpl_buf_idx†!tбlag†t                 x w vu t sJIGFED C B@? > =<; : 987.)(#  є ѓ ђк й извбМЛ К Й’ decisionDelay†tŽsmpl_buf_idx†€tŒnStatesDelayedDecision†tŠpredictLPCOrder†tˆshapingLPCOrder†t†subfr†t„length†t‚offset_Q10†t€Lambda_Q10†t~Gain_Q16†t|LF_shp_Q14†tzTilt_Q14†txHarmShapeFIRPacked_Q14†tvlag†ttAR_shp_Q13†€.rb_Q14†€.pa_Q12†€.nsLTP_Q16†€tlxq†€jq†€thx_Q10†€fsigtype†tdpsDelDec†€dbNSQ†€Ж šWinner_rand_state†tŸn_LF_Q10†tЁrr_Q20†t r_Q10†t˜RDmax_ind†t—RDmin_ind†tЖpsSS†€rЅRDmax_Q10†tn_AR_Q10†tœLPC_pred_Q10†t“i†tЕpsDD†€dЎsLF_AR_shp_Q10†tІq1_Q10†tБpsLPC_Q14†€tЋLPC_exc_Q10†t–Winner_ind†t­tmp†tЇq2_Q10†tЄRDmin_Q10†t›LTP_pred_Q14†tВa_Q12_tmp† Ё€пЏpred_lag_ptr†€tЈAtmp†tДpsSampleState†€РЁ€yГAR_shp_Q13_tmp† Ё€пžn_LTP_Q14†t•k†tЊexc_Q10†tАshp_lag_ptr†€tЂrd1_Q10†t™last_smple_idx†tЌxq_Q10†tЉdither†tЃrd2_Q10†t”j†t                        л к йд г вбЬ Ы ЪН М ЛЖ Е ДЏ Ў ­ЌІ Ѕ ЄŸž” ’pitchL†€Gains_Q16†€ŽLTP_scale_Q14†€Œsmpl_buf_idx†tŠnStatesDelayedDecision†tˆsubfr†t†sLTP_Q16†€t„sLTP†€‚length†t€x_sc_Q10†€t~x†€.|psDelDec†€dzNSQ†€Ж —scale_length†t›inv_gain_Q32†t•i†tœpsDD†€d–k†tšgain_adj_Q16†t™inv_gain_Q16†t˜lag†t           ш цLPC_state_idx†tфDD_src†€dтDD_dst†€d   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё з ž!о –!Ž!›!Ў!ё!В!к!Д!Š"р!ф!ь!Œ"э!Ž"ю!ˆ"у$ш$ё$є$Q!tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Ÿ   Љ ­ Ў Ы Э Ю а з и л о ы Ž!–!›!ž!Ў!В!Г!Д!Е!Ж!к!п!р!ф!ь!э!ю!ё!…"ˆ"Š"Œ"Ž"К"О"П"Р"С"Х"Э"п#т$у$ф$ш$щ$ы$ь$ю$я$№$ё$ђ$є$і$ї$љ$њ$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$glТ.cil$in.cil$exщŠ.cil$syЗ.cil$db:/1791 1284597038 100666 33703 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТ‡ƒ .e‘Lc‚.drectveQ, .cil$fgњ}@@.cil$glОw@@.cil$in5@@.cil$exф]6@@.cil$sy/o@@.cil$dbI@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_NSQ.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_NSQ.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2ь2€ovКV €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nsq.c—†_щ™мБИВ’cМYU Ф SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ SKP_max_int†€€е€Ш=SKP_Silk_CLZ_FRAC‚€€ш€$9Шж iSKP_DIV32_varQ†€M€€y€щШж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШ‡SKP_Silk_NSQ‚€€(€#€eh— \ƒƒSKP_Silk_noise_shape_quantizer‚€`€ˆ4€б €RШ\SKP_Silk_nsq_scale_states‚€]€ T€х€*Ш i !SKP_Silk_NLSF_CB_struct€– SKP_Silk_detect_SWB_state€ ^SKP_Silk_encoder_control€  "SKP_Silk_encoder_state€ё SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_LP_state€  SKP_Silk_detect_SWB_state€ SKP_Silk_range_coder_state€ž ѕSKP_Silk_VAD_state€ №SKP_SILK_LBRR_struct€ф фSKP_Silk_nsq_state€к SKP_Silk_range_coder_state€ž Мsize_tu— SKP_Silk_MA_Prediction‚€> SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)АSA_Parameter€)† mSKP_Silk_encoder_control€  яSKP_Silk_nsq_state€к4strnlen†€ЎSA_Method€)†@ Нwchar_t!Ћwcsnlen†€ SKP_Silk_VAD_state€SKP_Silk_Quantization_Offsets_Q10„€E SKP_Silk_LP_state€  ]SKP_Silk_encoder_state€ё єSKP_SILK_LBRR_struct€ф [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœOO€ O €ўO3 f0" D ЄBEOœORSS&‡F- -ž-œ-š-˜-–-”-’--Ž-Œ-Š-ˆ-†-„LOSOSOTOUOVOWOXOYOZO[O]&ІЙ„†CГ!3†At€Ь'†Cє0†At3†At2†AtKO_Йˆ†CЖ!3†At€А'†CєЙ††CЕ!3†AtX'†Cє0†At2†AtKOa&ЄЙˆ†CЖ!3†At€Є'†Cє0†At2†AtKOc3‚KOe&Џ&Й††CЕ!3†Ath'†Cє0†At3†A(Й††CЕ!3†Atd'†Cє0†At3†A(0Є!­ 2†AtKOgЙŽІA“ 3†At8ГSOh&Ї3†At2†AtKOiT:Д)ГSOj&Ї3†At2†AtKOkT)ДOnЙˆ†CЖ!3†At€Ќ'†CєЙ„†CГ!3†At€Ь'†Cє0†At2†AtKOoЙˆ†CЖ!3†At€Ј'†CєЙ„†CГ!3†At€Ь'†Cє0†At2†AtKOp&ЋЙˆ†CЖ!3†At'†CК"Й„†CГ!3†At€Ь'†Cє0†At3†A(2†C‘KOq&Ѓ3†At2†AtK:Е)Ж&Ѓ3†At5†AtK)ЕЙЃ†At3†At"8ЗSOr&ЈЙ†CЎ ЙЃ†At3†At 3†AtЙЇ†At 3†At3†A(2†CЎ KOs&ЉЙ’†CЎ ЙЃ†At3†At3†A(2†CЎ KOt&ЊЙ”†CЎ ЙЃ†At3†At3†A(2†CЎ KOw3‚KOx&ЎЙ–†C” ЙЃ†At3†A(0ІA“ 3†At 2†AtKOy&ЎЙ–†C” ЙЃ†At3†A(0ІA“ 3†At ,†At3†At †AtKO{Й††CЕ!3†Ath'†Cє0†At3†At8КSO}&ЄЙ††CЕ!3†Atl'†Cы ЙЃ†At3†A(0†At2†AtKOЙˆ†CЖ!3†At€И'†Cє3†At2†AtKO€ЙЃ†At3†AtЙЇ†At3†At  3†At8ЛSO€„&ЅЙ„†CГ!3†At€Ь'†Cє0†AtЙЄ†AtЙ„†CГ!3†At€ќ'†Cє0†At3†At2†AtKO€…&Ѕ3†AtЙ„†CГ!3†At€Ь'†Cє0†AtЙ„†CГ!3†At€ќ'†Cє0†At$ЙЅ†At3†At$3†AtЙЅ†AtЙ„†CГ!3†At€Ь'†Cє0†AtЙ„†CГ!3†At€ќ'†Cє0†At"Й„†CГ!3†At€Ь'†Cє0†AtЙ„†CГ!3†At€ќ'†Cє0†AtЙЅ†AtCBCBЙЅ†AtЙ„†CГ!3†At€Ь'†Cє0†AtЙ„†CГ!3†At€ќ'†Cє0†At$Й„†CГ!3†At€Ь'†Cє0†AtЙ„†CГ!3†At€ќ'†Cє0†AtЙЅ†At3†At"3†AtЙЅ†AtCBCBCB2†AtKO€‡3†At€­@†CƒЙ„†CГ!3†At€ќ'†Cє0†At3†BuU†Bu3†AtU†At&АU†CƒLKO€ˆO€‰&— Н‚€?Й„†CГ!3†At€ќ'†Cє0†AtUІA“ Й„†CГ!3†At€Ь'†Cє0†AtЙЅ†AtUІA“ &­ЙЅ†At3†AU†C‘&АU†CєЙЈ†CЎ U†CЎ Йˆ†CЖ!3†At'†CК"ЙЅ†AtЙЃ†AtЙ„†CГ!3†At€Ь'†Cє0†At3†At 3†A(U†CЎ LKO€‹Йˆ†CЖ!3†At€И'†Cє3†At2†AtKO€ŒЙˆ†CЖ!3†At€Ј'†CєЙ„†CГ!3†At€Ь'†Cє0†At2†AtKO€TO€Ž)ЛTO€)КO€‘&\Н‚€^Й††CЕ!3†Atl'†CЭ"U†C” Йœ†C” U†C” Й ІA“ UІA“ ЙЃ†AtU†At&ЌU†Cє&­U†C‘Й„†CГ!3†At€а'†Cє0†AtU†At&БU†CєЙІCЎ U†CЎ Йˆ†CЖ!U†CЖ!LKO€“O€”O€•O€–&ƒН‚€aЙ„†CГ!3†At€ќ'†Cє0†AtU†AtЙ„†CГ!3†At€ј'†Cє0†AtU†AtЙ„†CГ!3†At€а'†Cє0†AtU†AtЙЏ†AtU†AtЙžІA“ U†AtЙœ†C” ЙЃ†At3†A(0ІA“ U†AtЙš†C” ЙЃ†At3†A(0ІA“ U†Atɘ†C” ЙЃ†At3†A(0ІA“ U†AtЙЎ†AtU†AtЙЄ†AtU†AtЙЊ†CЎ U†CЎ ЙЉ†CЎ U†CЎ ЙЈ†CЎ U†CЎ &ЌU†CєЙЋ†C‘U†C‘ЙŒ†CєU†Cє&БU†C” Й††CЕ!3†Ath'†Cє0†AtU†AtЙˆ†CЖ!U†CЖ!LKO€˜&ŠЙ„†CГ!3†At€а'†Cє0†At3†A†CЎ KO€™&ŒЙ„†CГ!3†At€а'†Cє0†At3†A†CєKO€š&ЋЙ„†CГ!3†At€а'†Cє0†At3†A†C‘KO€›T:Ж)ЗO€žЙˆ†CЖ!3†At€ '†CєЙˆ†CЖ!3†At€ '†Cє0†At2†AtKO€ŸЙˆ†CЖ!3†At€Д'†CєЙˆ†CЖ!3†At€Д'†Cє0†At2†AtKO€ Йˆ†CЖ!3†At€Є'†CєЙ††CЕ!3†Atl'†Cы 3†A (0†At2†AtKO€Ђ3†At€Ќ@†CƒЙ„†CГ!3†At€Ь'†Cє0†At3†BuU†BuЙˆ†CЖ!3†At'†CК"Й„†CГ!3†At€Ь'†Cє0†At3†A(U†CЫ Йˆ†CЖ!3†At'„Cп!U†CƒLKO€Ѓ3†At€Ќ@†CƒЙ„†CГ!3†At€Ь'†Cє0†At3†BuU†BuЙˆ†CЖ!3†At€€'†Cы Й„†CГ!3†At€Ь'†Cє0†At3†A(U†CЫ Йˆ†CЖ!3†At€€'†Cт$U†CƒLKO€ЅT)ЂOGTTO€ O €ўO3 f0" D ЄBEOœO€ПSS&ƒF-у-с-п-н-л-й-з-е-г-б-Я-Э-Ы-Щ-Ч-Х-У-С-ПLOSO€РO€СO€ТO€УO€ФO€ХO€ЦO€ЧO€ШO€ЩO€Ы&ћЙП†CЖ!3†At€€'†Cы ЙП†CЖ!3†At€Ќ'†Cє0†AtЙб†At3†At3†A(2†CєKO€Ь&ќЙЩ†CєЙП†CЖ!3†At€Ј'†Cє0†AtЙб†At3†At3†A(2†CєKO€Я&њЙП†CЖ!3†At€€'†Cы 3†A<(2†CєKO€в&№3†At€њџџЙл†At3†At 2†AtKO€г&ё3†At€ўџџЙл†At3†At 2†AtKO€д&ёЙё†AtЙн†At,„!,†AtЙл†At,„!,†At3†At 2†AtKO€е&ђ3†At€Йл†At3†At 2†AtKO€и3†At€Ќ@†CƒЙу†At3†BuU†BuЙЫ†CЎ U†CЫ &§U†CƒLKO€й3†At€Ќ@†CƒЙс†At3†BuU†BuЙЯ†CЎ U†CЫ &ўU†CƒLKO€л&ц3†At2†AtK:)&ц3†At5†AtK)Йц†AtЙп†At"8SO€нЙП†CЖ!3†At€А'†Cє3†At€kc6ЙП†CЖ!3†At€А'†Cє0†At3†At€5„Г 2†AtKO€р&єЙП†CЖ!3†At€А'†Cє0†At3†At 2†AtKO€у3‚KO€ф3‚KO€х3‚KO€ь&ѓ&§3†A(0†At2†AtKO€э&щЙњ†Cє3†A(0†At3†At Йѓ†At,„!,†AtЙњ†Cє3†A(0†At3†At€џџ Йѓ†At,„!,†At3†At 2†AtKO€ю&щЙщ†AtЙњ†Cє3†Aќ(0†At3†At Йѓ†At3†At Йњ†Cє3†Aќ(0†At3†At€џџ Йѓ†At3†At 3†At 2†AtKO€я&ѓ&§3†A(0†At2†AtKO€№&щЙщ†AtЙњ†Cє3†Aј(0†At3†At Йѓ†At,„!,†AtЙњ†Cє3†Aј(0†At3†At€џџ Йѓ†At,„!,†At3†At 2†AtKO€ё&щЙщ†AtЙњ†Cє3†Aє(0†At3†At Йѓ†At3†At Йњ†Cє3†Aє(0†At3†At€џџ Йѓ†At3†At 3†At 2†AtKO€ђ&ѓ&§3†A(0†At2†AtKO€ѓ&щЙщ†AtЙњ†Cє3†A№(0†At3†At Йѓ†At,„!,†AtЙњ†Cє3†A№(0†At3†At€џџ Йѓ†At,„!,†At3†At 2†AtKO€є&щЙщ†AtЙњ†Cє3†Aь(0†At3†At Йѓ†At3†At Йњ†Cє3†Aь(0†At3†At€џџ Йѓ†At3†At 3†At 2†AtKO€ѕ&ѓ&§3†A (0†At2†AtKO€і&щЙщ†AtЙњ†Cє3†Aш(0†At3†At Йѓ†At,„!,†AtЙњ†Cє3†Aш(0†At3†At€џџ Йѓ†At,„!,†At3†At 2†AtKO€ї&щЙщ†AtЙњ†Cє3†Aф(0†At3†At Йѓ†At3†At Йњ†Cє3†Aф(0†At3†At€џџ Йѓ†At3†At 3†At 2†AtKO€ј&ѓ&§3†A(0†At2†AtKO€љ&щЙщ†AtЙњ†Cє3†Aр(0†At3†At Йѓ†At,„!,†AtЙњ†Cє3†Aр(0†At3†At€џџ Йѓ†At,„!,†At3†At 2†AtKO€њ&щЙщ†AtЙњ†Cє3†Aм(0†At3†At Йѓ†At3†At Йњ†Cє3†Aм(0†At3†At€џџ Йѓ†At3†At 3†At 2†AtKO€ћ&ч3†At 2†AtK:) &ч3†At†AtK)Йч†AtЙу†At"8!SO€ќ&ѓ&§Йч†At3†At 3†A(0†At2†AtKO€§&щЙщ†AtЙњ†CєЙч†At3†A(0†At3†At Йѓ†At,„!,†AtЙњ†CєЙч†At3†A(0†At3†At€џџ Йѓ†At,„!,†At3†At 2†AtKO€ў&щЙщ†AtЙњ†CєЙч†At3†At3†A(0†At3†At Йѓ†At3†At Йњ†CєЙч†At3†At3†A(0†At3†At€џџ Йѓ†At3†At 3†At 2†AtKO€џT: )!O€ЙС†At3†At8&SO€&шЙќ†Cє3†A(0†At3†At ЙЭ†CЎ 3†A(0Є!­ ,„!,†AtЙќ†Cє3†A(0†At3†At€џџ ЙЭ†CЎ 3†A(0Є!­ ,„!,†At3†At 2†AtKO€&шЙш†AtЙќ†Cє3†Aќ(0†At3†At ЙЭ†CЎ 3†A(0Є!­ ,„!,†AtЙќ†Cє3†Aќ(0†At3†At€џџ ЙЭ†CЎ 3†A(0Є!­ ,„!,†At3†At 2†AtKO€&шЙш†AtЙќ†Cє3†Aј(0†At3†At ЙЭ†CЎ 3†A(0Є!­ ,„!,†AtЙќ†Cє3†Aј(0†At3†At€џџ ЙЭ†CЎ 3†A(0Є!­ ,„!,†At3†At 2†AtKO€&шЙш†AtЙќ†Cє3†Aє(0†At3†At ЙЭ†CЎ 3†A(0Є!­ ,„!,†AtЙќ†Cє3†Aє(0†At3†At€џџ ЙЭ†CЎ 3†A(0Є!­ ,„!,†At3†At 2†AtKO€&шЙш†AtЙќ†Cє3†A№(0†At3†At ЙЭ†CЎ 3†A(0Є!­ ,„!,†AtЙќ†Cє3†A№(0†At3†At€џџ ЙЭ†CЎ 3†A(0Є!­ ,„!,†At3†At 2†AtKO€ &ќ3†A5†CєKO€ T:;)&SO€ &ш3†At2†AtKO€ T);O€3‚KO€3‚KO€3‚KO€&ѓ&ў3†A(0†At2†AtKO€&ъЙњ†Cє3†A(0†At3†At Йѓ†At,„!,†AtЙњ†Cє3†A(0†At3†At€џџ Йѓ†At,„!,†At3†At 2†AtKO€&ъЙъ†AtЙњ†Cє3†Aќ(0†At3†At Йѓ†At3†At Йњ†Cє3†Aќ(0†At3†At€џџ Йѓ†At3†At 3†At 2†AtKO€&ѓ&ў3†A(0†At2†AtKO€&ъЙъ†AtЙњ†Cє3†Aј(0†At3†At Йѓ†At,„!,†AtЙњ†Cє3†Aј(0†At3†At€џџ Йѓ†At,„!,†At3†At 2†AtKO€&ъЙъ†AtЙњ†Cє3†Aє(0†At3†At Йѓ†At3†At Йњ†Cє3†Aє(0†At3†At€џџ Йѓ†At3†At 3†At 2†AtKO€&ѓ&ў3†A(0†At2†AtKO€&ъЙъ†AtЙњ†Cє3†A№(0†At3†At Йѓ†At,„!,†AtЙњ†Cє3†A№(0†At3†At€џџ Йѓ†At,„!,†At3†At 2†AtKO€&ъЙъ†AtЙњ†Cє3†Aь(0†At3†At Йѓ†At3†At Йњ†Cє3†Aь(0†At3†At€џџ Йѓ†At3†At 3†At 2†AtKO€&ѓ&ў3†A (0†At2†AtKO€&ъЙъ†AtЙњ†Cє3†Aш(0†At3†At Йѓ†At,„!,†AtЙњ†Cє3†Aш(0†At3†At€џџ Йѓ†At,„!,†At3†At 2†AtKO€&ъЙъ†AtЙњ†Cє3†Aф(0†At3†At Йѓ†At3†At Йњ†Cє3†Aф(0†At3†At€џџ Йѓ†At3†At 3†At 2†AtKO€ &ѓ&ў3†A(0†At2†AtKO€!&ъЙъ†AtЙњ†Cє3†Aр(0†At3†At Йѓ†At,„!,†AtЙњ†Cє3†Aр(0†At3†At€џџ Йѓ†At,„!,†At3†At 2†AtKO€"&ъЙъ†AtЙњ†Cє3†Aм(0†At3†At Йѓ†At3†At Йњ†Cє3†Aм(0†At3†At€џџ Йѓ†At3†At 3†At 2†AtKO€#&ѓ&ў3†A(0†At2†AtKO€$&ъЙъ†AtЙњ†Cє3†Aи(0†At3†At Йѓ†At,„!,†AtЙњ†Cє3†Aи(0†At3†At€џџ Йѓ†At,„!,†At3†At 2†AtKO€%&ъЙъ†AtЙњ†Cє3†Aд(0†At3†At Йѓ†At3†At Йњ†Cє3†Aд(0†At3†At€џџ Йѓ†At3†At 3†At 2†AtKO€&&ч3†At 2†AtK:W)X&ч3†At†AtK)WЙч†AtЙс†At"8YSO€'&ѓ&ўЙч†At3†At 3†A(0†At2†AtKO€(&ъЙъ†AtЙњ†CєЙч†At3†A(0†At3†At Йѓ†At,„!,†AtЙњ†CєЙч†At3†A(0†At3†At€џџ Йѓ†At,„!,†At3†At 2†AtKO€)&ъЙъ†AtЙњ†CєЙч†At3†At3†A(0†At3†At Йѓ†At3†At Йњ†CєЙч†At3†At3†A(0†At3†At€џџ Йѓ†At3†At 3†At 2†AtKO€*T:X)YO€+&ъЙъ†At3†At 2†AtKO€,&ъЙъ†AtЙП†CЖ!3†At€ '†Cє0†At3†At Йе†At,„!,†AtЙП†CЖ!3†At€ '†Cє0†At3†At€џџ Йе†At,„!,†At3†At 2†AtKO€.&ьЙП†CЖ!3†At€€'†Cы ЙП†CЖ!3†At€Ќ'†Cє0†At3†At3†A(0†At3†At Йз†At,„!,†AtЙП†CЖ!3†At€€'†Cы ЙП†CЖ!3†At€Ќ'†Cє0†At3†At3†A(0†At3†At€џџ Йз†At,„!,†At3†At 3†At 2†AtKO€/&ьЙь†AtЙП†CЖ!3†At€ '†Cє0†At3†At Йз†At3†At ЙП†CЖ!3†At€ '†Cє0†At3†At€џџ Йз†At3†At 3†At 2†AtKO€13‚KO€4Йб†At3†At$8gSO€6&ыЙћ†Cє3†A(0†AtЙћ†Cє3†Aј(0†At3†At Йг†At,„!,†AtЙћ†Cє3†A(0†AtЙћ†Cє3†Aј(0†At3†At€џџ Йг†At,„!,†At3†At 2†AtKO€7&ыЙы†AtЙћ†Cє3†Aќ(0†At3†At Йг†At3†At Йћ†Cє3†Aќ(0†At3†At€џџ Йг†At3†At 3†At 2†AtKO€8&ћ3†A5†CєKO€9&ыЙы†At3†At 2†AtKO€:T:l)gSO€;&ы3†At2†AtKO€<T)lO€@&јЙш†AtЙы†At2†AtKO€A&јЙј†At3†At 3†At3†At 2†AtKO€B&јЙј†AtЙщ†At2†AtKO€C&јЙј†AtЙъ†At2†AtKO€D&јЙј†AtЙь†At2†AtKO€E&эЙУ†C” Йц†At3†A(0ІA“ Йј†At2†AtKO€I&эЙэ†AtЙє†At Йє†At2†AtKO€J&эЙэ†AtЙн†At2†AtKO€K&эЙэ†At3†At€$3†At€Йэ†At3†At€џџ"3†At€џџЙэ†AtCBCB2†AtKO€NЙэ†AtЙ№†At"8mSO€O&юЙэ†AtЙл†At3†At 3†At 3†At3†At 2†AtKO€P&яЙю†At3†At 2†AtKO€QT:n)mЙэ†AtЙё†At"8oSO€R&ю3†Atџ2†AtKO€S&я3†At€ќџџ2†AtKO€TT:p)oЙэ†AtЙђ†At$8qSO€U&юЙэ†AtЙл†At3†At 3†At 3†At3†At 2†AtKO€V&яЙю†At3†At 2†AtKO€WT:r)qSO€X&ю3†At2†AtKO€Y&я3†At2†AtKO€ZT)r)p)nO€[ЙХ†CєЙц†At3†A(Йю†At2†AtKO€^&ѕЙя†AtЙн†At2†AtKO€_&ѕЙѕ†AtЙє†At Йє†At2†AtKO€b&іЙѕ†AtЙш†At3†At 3†At3†At 2†AtKO€c&їЙі†AtЙщ†At2†AtKO€fЙЧ†C‘Йц†At3†A(Йї†At3†At Йй†At,„!,†AtЙї†At3†At€џџ Йй†At,„!,†At3†At Йї†AtЙй†At3†At 3†At3†At 3†At 3†At3†At 3†At€џ$3†At€џЙї†At3†At Йй†At,„!,†AtЙї†At3†At€џџ Йй†At,„!,†At3†At Йї†AtЙй†At3†At 3†At3†At 3†At 3†At3†At 3†At€€џџ"3†At€€џџЙї†At3†At Йй†At,„!,†AtЙї†At3†At€џџ Йй†At,„!,†At3†At Йї†AtЙй†At3†At 3†At3†At 3†At 3†At3†At CBCB,„!2„!KO€j&њ3†A5†CєKO€kЙњ†CєЙї†At3†At 2†AtKO€l&љЙї†AtЙъ†At2†AtKO€mЙП†CЖ!3†At€ '†CєЙљ†At3†At 2†AtKO€oЙП†CЖ!3†At€€'†Cы ЙП†CЖ!3†At€Ќ'†Cє0†At3†A(Йљ†AtЙь†At2†AtKO€pЙЩ†CєЙП†CЖ!3†At€Ј'†Cє0†At3†A(Йі†At3†At 2†AtKO€qЙП†CЖ!3†At€Ќ'†Cє3†At5†AtKO€rЙП†CЖ!3†At€Ј'†Cє3†At5†AtKO€uЙП†CЖ!3†At€А'†CєЙХ†CєЙц†At3†A(0†At†AtKO€vT:)O€x3†At€Ќ@†Cƒ3†Bu@U†BuЙП†CЖ!3†At€€'†Cы Йп†At3†A(U†CЫ ЙП†CЖ!3†At€€'†CР"U†CƒLKO€yT)хOGTTO€ O €ўO3 f0" D ЄBEOœO€‡SS&\F-­-Ћ-Љ-Ї-Ѕ-Ѓ-Ё-Ÿ--›LOSO€ˆO€‰O€‹&Г3†At€џџџЙЋ†C” ЙЇ†At3†A(0ІA“ 3†At ,†At2†AtKO€Œ&ГЙГ†At3†At€џ"ЙГ†At3†At€џCB2†AtKO€&ВЙ­†C” ЙЇ†At3†A(0ІA“ 2†AtKO€Й›†CЖ!3†At€И'†Cє0†At8ЗSO€‘&ЕЙГ†At3†At 2†AtKO€’ЙЇ†At3†At8ИSO€”&ЕЙЕ†At3†At ЙЉІA“ ,„!,†AtЙЕ†At3†At€џџ ЙЉІA“ ,„!,†At3†At 3†At 2†AtKO€•TO€–)И&АЙ›†CЖ!3†At€Ј'†Cє0†AtЙВ†At3†At2†AtK:Н)О&А3†At5†AtK)НЙА†AtЙ›†CЖ!3†At€Ј'†Cє0†At"8ПSO€—ЙЅ†CєЙА†At3†A(ЙЕ†At3†At ЙЃ†C‘ЙА†At3†A(0„!,†AtЙЕ†At3†At€џџ ЙЃ†C‘ЙА†At3†A(0„!,†At3†At 2†AtKO€˜T:О)ПO€™TO€œ)З&БЙЁ†At3†At2†AtKO€&БЙБ†At3†AtЙЇ†At3†At,„!,†AtЙЁ†At,„!,†At2†AtKO€ž&Б&Н†At€ ЙВ†At3†AtU†AtЙБ†AtU†AtL2†AtKO€ЁЙГ†AtЙ›†CЖ!3†At€Д'†Cє0†At 8ШSO€Ђ&Д&iН†At€N3†AtUІA“ Й›†CЖ!3†At€Д'†Cє0†AtUІA“ ЙГ†AtUІA“ L2†AtKO€Є&АЙ›†CЖ!3†At€Ќ'†Cє0†AtЙБ†At2†AtK:Щ)Ъ&А3†At5†AtK)ЩЙА†AtЙ›†CЖ!3†At€Ќ'†Cє0†At"8ЫSO€ЅЙ›†CЖ!3†At€€'†Cы ЙА†At3†A(ЙД†At3†At Й›†CЖ!3†At€€'†Cы ЙА†At3†A(0†At,„!,†AtЙД†At3†At€џџ Й›†CЖ!3†At€€'†Cы ЙА†At3†A(0†At,„!,†At3†At ЙД†AtЙ›†CЖ!3†At€€'†Cы ЙА†At3†A(0†At3†At 3†At3†At 2†AtKO€ІT:Ъ)ЫO€ЉЙ›†CЖ!3†At€И'†Cє0†At3†At8аSO€Њ&АЙ›†CЖ!3†At€Ј'†Cє0†AtЙВ†At3†At2†AtK:б)в&А3†At5†AtK)бЙА†AtЙ›†CЖ!3†At€Ј'†Cє0†At"8гSO€ЋЙЅ†CєЙА†At3†A(ЙД†At3†At ЙЅ†CєЙА†At3†A(0†At,„!,†AtЙД†At3†At€џџ ЙЅ†CєЙА†At3†A(0†At,„!,†At3†At ЙД†AtЙЅ†CєЙА†At3†A(0†At3†At 3†At3†At 2†AtKO€ЌT:в)гO€­TO€Ў)аЙ›†CЖ!3†At€ '†CєЙД†At3†At Й›†CЖ!3†At€ '†Cє0†At,„!,†AtЙД†At3†At€џџ Й›†CЖ!3†At€ '†Cє0†At,„!,†At3†At ЙД†AtЙ›†CЖ!3†At€ '†Cє0†At3†At 3†At3†At 2†AtKO€Б&А3†At2†AtK:м)н&А3†At5†AtK)мЙА†At3†At"8оSO€ВЙ›†CЖ!3†At€€'†Cы ЙА†At3†A(ЙД†At3†At Й›†CЖ!3†At€€'†Cы ЙА†At3†A(0†At,„!,†AtЙД†At3†At€џџ Й›†CЖ!3†At€€'†Cы ЙА†At3†A(0†At,„!,†At3†At ЙД†AtЙ›†CЖ!3†At€€'†Cы ЙА†At3†A(0†At3†At 3†At3†At 2†AtKO€ГT:н)оO€ДTO€З)Ш&А3†At2†AtK:у)ф&А3†At5†AtK)уЙА†AtЙЁ†At"8хSO€ИЙŸ†CєЙА†At3†A(Й†CЎ ЙА†At3†A(0Є!­ ,„!,†AtЙГ†At,„!,†At3†At 2†AtKO€ЙT:ф)хO€М3‚KO€НЙ›†CЖ!3†At€Д'†CєЙГ†At2†AtKO€ОT)ЏOGTTOœO€ПM: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t ЛКЗ Ж ЕДГЂ  LTP_scale_Q14†€žLambda_Q10†€œGains_Q16†€šLF_shp_Q14†€˜Tilt_Q14†€–HarmShapeGain_Q14†€”AR2_Q13†€.’LTPCoef_Q14†€.PredCoef_Q12†€.ŽLSFInterpFactor_Q2†€Œq†€tŠx†€.ˆNSQ†€Ж†psEncCtrlC†€Е„psEncC†€Г ­sLTP„€€Ё€[ЇLSF_interpolation_flag†tЊAR_shp_Q13†€.ЈA_Q12†€.АFiltState†@Ё€PЏoffset_Q10†tЌsLTP_Q16†€Ё€XЎHarmShapeFIRPacked_Q14†tЅstart_idx†tЃk†tЋpxq†€Іsubfr_length†tБx_sc_Q10†€рЁ€AЉB_Q14†€.Єlag†t     rqponmlgY X W;&!     х уpredictLPCOrder†tсshapingLPCOrder†tпlength†tнoffset_Q10†tлLambda_Q10†tйGain_Q16†tзLF_shp_Q14†tеTilt_Q14†tгHarmShapeFIRPacked_Q14†tбlag†tЯAR_shp_Q13†€.Эb_Q14†€.Ыa_Q12†€.ЩsLTP_Q16†€tЧxq†€Хq†€tУx_sc_Q10†€Сsigtype†tПNSQ†€Ж ьn_LF_Q10†tэr_Q10†tъn_AR_Q10†tщLPC_pred_Q10†tцi†tљsLF_AR_shp_Q10†tђthr3_Q10†tњpsLPC_Q14†€tіLPC_exc_Q10†tёthr2_Q10†tјtmp†tшLTP_pred_Q14†t§a_Q12_tmp† Ё€пќpred_lag_ptr†€tюq_Q0†tѓAtmp†tўAR_shp_Q13_tmp† Ё€пыn_LTP_Q14†tѕexc_Q10†t№thr1_Q10†tћshp_lag_ptr†€tяq_Q10†tїxq_Q10†tєdither†tчj†t           х ф уо н мг в баЫ Ъ ЩШП О НИЗЏ ­pitchL†€ЋGains_Q16†€ЉLTP_scale_Q14†€Їsubfr†tЅsLTP_Q16†€tЃsLTP†€Ёlength†tŸx_sc_Q10†€tx†€.›NSQ†€Ж Бscale_length†tЕinv_gain_Q32†tАi†tДgain_adj_Q16†tГinv_gain_Q16†tВlag†t           ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё з ž!о –!Ž!›!Ў!ё!В!к!Д!Š"р!ф!ь!Œ"э!Ž"ю!ˆ"E!tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Ÿ   Љ ­ Ў Ы Э Ю а з и л о ы Ž!–!›!ž!Ў!В!Г!Д!Е!Ж!к!п!р!ф!ь!э!ю!ё!…"ˆ"Š"Œ"Ž"К"О"П"Р"С"Х"Э"п#н$о$р$с$т$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fgњ.cil$glО.cil$in.cil$exф].cil$sy/.cil$db /1816 1284597038 100666 33425 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТq‚ .e‘LM.drectveQ, .cil$fg$}@@.cil$gl Ё@@.cil$inЌ@@.cil$exa^­@@.cil$sy№ s@@.cil$dbOў@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_noise_shape_analysis_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_noise_shape_analysis_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2]2€ovV €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_noise_shape_analysis_fix.cbN'0 сwK:{rCЉiHj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_perceptual_parameters_fix.hкKэфЖ'Šџм4'rƒФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ  SKP_min_32†€€Ы€ПШ%SKP_max_32†€€ѓ€{Ш=SKP_Silk_CLZ_FRAC‚€€ш€$9Шж DSKP_Silk_SQRT_APPROX†€€я€ЄZШ=ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШSSKP_Silk_noise_shape_analysis_FIX‚€Е€(€#€Ў hж д л щ љ ќ џ  )2=e %DeSKP_Silk_LPC_fit‚€A2SKP_Silk_apply_sine_window‚€4 ѓSKP_Silk_encoder_control_FIX€ў ЬSKP_Silk_encoder_state_FIX€М ЦSKP_Silk_predict_state_FIX€о ЗSKP_Silk_prefilter_state_FIX€з БSKP_Silk_shape_state_FIX€в aSKP_Silk_encoder_control€  %SKP_Silk_encoder_state€ё SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_LP_state€  SKP_Silk_detect_SWB_state€ SKP_Silk_range_coder_state€ž јSKP_Silk_VAD_state€ ѓSKP_SILK_LBRR_struct€ф чSKP_Silk_nsq_state€к SKP_Silk_range_coder_state€ž Кsize_tuд SKP_Silk_bwexpander‚€T ЖSKP_Silk_shape_state_FIX€в SKP_Silk_NLSF_CBS€›SKP_Silk_schur64†€X ЃSA_AttrTarget€) SKP_Silk_sum_sqr_shift‚€Hќ SKP_Silk_sigm_Q15†€АSA_Parameter€)† ХSKP_Silk_prefilter_state_FIX€з pSKP_Silk_encoder_control€  ђSKP_Silk_nsq_state€к strnlen†€ ђSKP_Silk_encoder_state_FIX€Мџ SKP_Silk_log2lin†€ ЫSKP_Silk_predict_state_FIX€ол SKP_Silk_bwexpander_32‚€"ЎSA_Method€)†@ Лwchar_t!)SKP_Silk_k2a_Q16‚€1€ wcsnlen†€ SKP_Silk_VAD_state€щ SKP_Silk_LPC_inverse_pred_gain_Q13†€> SKP_Silk_encoder_control_FIX€ў SKP_Silk_LP_state€ љ SKP_Silk_lin2log†€ `SKP_Silk_encoder_state€ё їSKP_SILK_LBRR_struct€ф=SKP_Silk_autocorr‚€B $SKP_Silk_NLSF_CB_struct€– SKP_Silk_detect_SWB_state€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOOHOOœOO€ O €ўO3 f0" D ЄBEOœO)SS&SF-O-M-K-ILOSO*&RЙI†C­!3†At€\a'†Cа!2†CЯ!KO+&X3†At2†AtKO,O-O.O/O0O1O2O3O5O8&oЙO†CЎ ЙI†C­!3†At€и'†Cє0†At3†A3†AtЙI†C­!3†At€Ф'†Cє0†At,„!,†At3†AЙI†C­!3†At€Ь'†Cє0†At3†At3†A2†CЎ KO>ЙK†Cћ!3†At€l'†CєЙI†C­!3†At€Є'†Cє0†AtЙI†C­!3†At€$Є'†Cє0†At3†At 3†At 3†At€Э ЙI†C­!3†At€$Є'†Cє0†At3†At 3†At€џџ 3†At€Э 3†At 2†AtKOAЙI†C­!3†At€(Є'†Cє0†At3†At€€$8}SOBЙK†Cћ!3†At€l'†CєЙI†C­!3†At€8Є'†Cє0†At3†At †AtKOCTOI)}OJЙK†Cћ!3†At€`'†CєЙK†Cћ!3†At€x'†Cы 3†A(0†AtЙK†Cћ!3†At€x'†Cы 3†A(0†At3†At 2†AtKOLЙK†Cћ!3†At€d'†Cє&ќ Н†At€ЙK†Cћ!3†At€l'†Cє0†At3†At€ 3†At 3†At3†At U†AtL3†At 2†AtKOO&j3†At€ЙI†C­!3†At€(Є'†Cє0†At2†AtKOP&jЙj†At3†At 3†At Йj†At,„!,†AtЙj†At3†At 3†At€џџ Йj†At,„!,†At3†At 2†AtKOQOS&ZЙK†Cћ!3†At€l'†Cє0†At3†AtєЙj†At,„!,†At3†At 3†At€@ЙK†Cћ!3†At€`'†Cє0†At3†At ЙK†Cћ!3†At€d'†Cє0†At,„!,†At3†At€@ЙK†Cћ!3†At€`'†Cє0†At3†At€џџ ЙK†Cћ!3†At€d'†Cє0†At,„!,†At3†At ,„!,†At3†AtєЙj†At,„!,†At3†At€џџ 3†At€@ЙK†Cћ!3†At€`'†Cє0†At3†At ЙK†Cћ!3†At€d'†Cє0†At,„!,†At3†At€@ЙK†Cћ!3†At€`'†Cє0†At3†At€џџ ЙK†Cћ!3†At€d'†Cє0†At,„!,†At3†At ,„!,†At3†At 2†AtKOUЙK†Cћ!3†Ath'†Cє0†At3†At8˜SOW&ZЙZ†At3†AtЙI†C­!3†At€Є'†Cє0†At,„!,†At3†At€ЙI†C­!3†At€Є'†Cє0†At,„!,†At3†At 2†AtKOXT:)˜SOZO\&ZЙZ†At3†At€ 3†AtўЙK†Cћ!3†At€l'†Cє0†At,„!,†At3†At€hfЙK†Cћ!3†At€l'†Cє0†At,„!,†At3†At 3†At 3†At€@ЙK†Cћ!3†At€`'†Cє0†At,„!,†At3†At€ 3†AtўЙK†Cћ!3†At€l'†Cє0†At,„!,†At3†At€hfЙK†Cћ!3†At€l'†Cє0†At,„!,†At3†At 3†At€џџ 3†At€@ЙK†Cћ!3†At€`'†Cє0†At,„!,†At3†At 2†AtKO]T)OcЙK†Cћ!3†Ath'†Cє0†At3†At8ЊSOeЙK†Cћ!3†Atd'†Cє3†At2†AtKOfЙK†Cћ!3†At€p'†Cє3†At2†AtKOgT:Ћ)ЊSOi&TЙI†C­!3†At€Ф'†Cє0†At3†At 2†AtKOj&c3†At2†AtKOk&b3†At2†AtKOl&pЙM†CЎ 2†CЎ KOm&S3†At2†AtK:Ќ)­&S3†At5†AtK)ЌЙS†At3†At "8ЎSOn& Н‚€IЙT†AtU†AtЙp†CЎ U†CЎ &XU†Cє&_U†CєLKOo&_ЙT†AtЙX†At †AtKOq&a&љ Н†At€Й_†AtUІA“ L2†AtKOrЙS†At3†At$8ЏSOs&cЙa†AtЙb†At3†At$Йa†AtЙb†AtЙa†AtЙb†AtCB†AtKOtTOu)Џ&bЙa†At2†AtKOv&pЙT†At3†A†CЎ KOwT:­)ЎOyЙK†Cћ!3†At€p'†Cє&ќ Н†At€Йc†At3†At€€3†At 3†At€šЙc†At3†At€€3†At€џџ 3†At€š3†At U†AtL3†At 2†AtKO|ЙK†Cћ!3†At€p'†Cє0†At3†At€Р$8ДSO}ЙK†Cћ!3†Atd'†Cє3†At2†AtKO~T:Е)ДSOЙK†Cћ!3†Atd'†Cє3†At2†AtKO€€T)ЕO€ƒ&ZЙZ†At3†AtЙK†Cћ!3†At€p'†Cє0†At3†At€€,„!,†At3†AtЙK†Cћ!3†At€p'†Cє0†At3†At€€,„!,†At3†At 2†AtKO€„T)ЋO€‰&d3†At€3†AtЙK†Cћ!3†At€d'†Cє0†At,„!,†At3†At 3†At€3†At€3†AtЙK†Cћ!3†At€d'†Cє0†At,„!,†At3†At€џџ 3†At€3†At 2†AtKO€Š&e3†At€Є№Йd†At2†AtKO€‹&f3†At€Є№Йd†At2†AtKO€ŒЙI†C­!3†At€Ф'†Cє0†At3†At8ЦSO€Ž&e3†At€3†At3†At€Йe†At,„!,†At3†At3†At€Йe†At,„!,†At3†At 2†AtKO€&f3†At€3†At3†At€Йf†At,„!,†At3†At3†At€Йf†At,„!,†At3†At 2†AtKO€TO€’)Ц&eЙe†At3†At Йf†At3†At 2†AtKO€—&Y3†AtЙI†C­!3†At€Ф'†Cє0†At,„!,†At2†AtKO€˜&S3†At2†AtK:е)ж&S3†At5†AtK)еЙS†At3†At"8зSO€š&2Н‚€3†AtЙI†C­!3†At€Ф'†Cє0†AtUІA“ 3†AtUІA“ Йo†CЎ U†CЎ &nU†C‘LKO€&oЙI†C­!3†At€Ь'†Cє0†At3†At3†A†CЎ KO€ &=Н‚€ ЙI†C­!3†At€ј'†Cє0†At3†AtUІA“ ЙY†AtUІA“ &nU†CЎ &XU†Cє&kU†CєLKO€Ѓ&k3†A(&k3†A(0†At&%Н†At€ 3†AtU†At&k3†A(0†At3†At 3†At 3†At2&k3†A(0†At3†At 3†At€џџ 3†At23†At U†AtL2†AtKO€І&_&Н†At€YЙI†C­!3†At€ј'†Cє0†AtU†At&kU†C” &lU†CєL2†AtKO€Љ&)Н‚€KЙI†C­!3†At€ј'†Cє0†AtUІA“ &lU†C” &mU†CєLKO€Ќ&л Н‚€#Йf†AtU†AtЙI†C­!3†At€ј'†Cє0†AtUІA“ &mU†CєLKO€Џ&eН‚€ZЙI†C­!3†At€ј'†Cє0†AtUІA“ 3†At UІA“ &mU†CєЙK†Cћ!3†At€Œ'†CК"ЙS†At3†At3†A(U†C‘LKO€ВO€Е3†At€Ќ@†CƒЙI†C­!3†At€ј'†Cє0†At3†BuU†BuЙK†Cћ!3†At€Œ'†CК"ЙS†At3†At3†A(U†CЫ ЙK†Cћ!3†At€'†CК"ЙS†At3†At3†A(U†CƒLKO€И3‚KO€Й&д Н‚€tЙe†AtU†AtЙI†C­!3†At€ј'†Cє0†AtUІA“ ЙK†Cћ!3†At€'†CК"ЙS†At3†At3†A(U†C‘LKO€М&_Й_†At&k3†A(0†At3†At 3†At 3†At€&k3†A(0†At3†At 3†At€џџ 3†At€3†At 2†AtKO€О&VЙX†At2†AtKO€П3‚KO€Р3‚KO€УЙV†At3†At 8фSO€Ф&V3†At†AtKO€Х&_3†At†AtKO€ЦTO€Ш)ф&^&DН†At€Й_†AtU†AtL2†AtKO€Щ&V3†At†AtKO€Ы&qЙS†At3†A(Й^†At2†AtKO€Ь&rЙS†At3†A(ЙV†At2†AtKO€ЮЙK†Cћ!3†At€€'†Cы ЙS†At3†A(3†At€€3†AtЙV†At 3†At€џџџ3†AtЙV†At $Й^†At3†At€€3†AtЙV†At $3†At€€3†AtЙV†At Й^†At3†At€џџџ3†AtЙV†At "3†At€џџџ3†AtЙV†At Й^†AtCBCBЙ^†At3†At€џџџ3†AtЙV†At $3†At€џџџ3†AtЙV†At Й^†At3†At€€3†AtЙV†At "3†At€€3†AtЙV†At Й^†AtCBCBCB3†AtЙV†At 2†AtKO€а&щ Н†At€?ЙI†C­!3†At€ј'†Cє0†AtUІA“ ЙK†Cћ!3†At€Œ'†CК"ЙS†At3†At3†A(U†CЎ &`U†CєLKO€б&щ Н†At€?ЙI†C­!3†At€ј'†Cє0†AtUІA“ ЙK†Cћ!3†At€'†CК"ЙS†At3†At3†A(U†CЎ &_U†CєLKO€г&U& Н†At€ 3†AtU†At&ж Н†At€Й`†AtU†AtL3†AtU†AtL2†AtKO€д&`Й`†AtЙU†At Й_†At3†AtЙU†At 3†At2†AtKO€е&`Й`†At3†At€џџ?$3†At€џџ?Й`†At3†At€Рџ"3†At€РџЙ`†AtCBCB3†At 3†At 2†AtKO€жЙK†Cћ!3†At€'†Cы ЙS†At3†A(&DН†At€Й`†AtU†AtL2†AtKO€зT:ж)зO€н&g&џ Н†At€3†At€јџџЙZ†At3†At 3†At€і(ЙZ†At3†At€џџ 3†At€і(3†At UІA“ L2†AtKO€о&h&џ Н†At€3†At€QUІA“ L2†AtKO€п&^&џ Н†At€3†At€џUІA“ L2†AtKO€р&^ЙI†C­!3†At€Є'†Cє0†At3†At Й^†At,„!,†AtЙI†C­!3†At€Є'†Cє0†At3†At€џџ Й^†At,„!,†At3†At ЙI†C­!3†At€Є'†Cє0†AtЙ^†At3†At 3†At3†At 2†AtKO€с&hЙh†AtЙ^†At3†Bu€€ 3†AtЙh†AtЙ^†At 3†Bu€€ 3†At 3†At€€Йh†AtЙ^†AtCBЙh†AtЙ^†At 3†Bu€€ 3†At3†At€џџџЙh†AtЙ^†AtCBCB2†AtKO€т3‚KO€ф&S3†At2†AtK:)&S3†At5†AtK)ЙS†At3†At"8SO€хЙK†Cћ!3†At€€'†Cы ЙS†At3†A(ЙK†Cћ!3†At€€'†Cы ЙS†At3†A(0†At3†At Йg†At,„!,†AtЙK†Cћ!3†At€€'†Cы ЙS†At3†A(0†At3†At€џџ Йg†At,„!,†At3†At ЙK†Cћ!3†At€€'†Cы ЙS†At3†A(0†AtЙg†At3†At 3†At3†At 2†AtKO€ц3‚KO€чT:)O€щ&S3†At2†AtK: ) &S3†At5†AtK) ЙS†At3†At"8 SO€ъЙK†Cћ!3†At€€'†Cы ЙS†At3†A(ЙK†Cћ!3†At€€'†Cы ЙS†At3†A(0†AtЙh†At3†Bu€€ 3†At€џџџЙK†Cћ!3†At€€'†Cы ЙS†At3†A(0†AtЙh†AtCB2†AtKO€ыO€№ЙI†C­!3†At€Є'†CєЙI†C­!3†At€Є'†Cє0†AtЙK†Cћ!3†At€€'†Cы ЙS†At3†A(0†AtЙI†C­!3†At€Є'†Cє0†At3†At ЙI†C­!3†At€(Є'†Cє0†At,„!,†At3†At3†At 3†At3†At ,„!,†AtЙK†Cћ!3†At€€'†Cы ЙS†At3†A(0†AtЙI†C­!3†At€Є'†Cє0†At3†At€џџ ЙI†C­!3†At€(Є'†Cє0†At,„!,†At3†At3†At 3†At3†At ,„!,†At3†At 3†Bu€€ 3†AtЙI†C­!3†At€Є'†Cє0†AtЙK†Cћ!3†At€€'†Cы ЙS†At3†A(0†AtЙI†C­!3†At€Є'†Cє0†At3†At ЙI†C­!3†At€(Є'†Cє0†At,„!,†At3†At3†At 3†At3†At ,„!,†AtЙK†Cћ!3†At€€'†Cы ЙS†At3†A(0†AtЙI†C­!3†At€Є'†Cє0†At3†At€џџ ЙI†C­!3†At€(Є'†Cє0†At,„!,†At3†At3†At 3†At3†At ,„!,†At3†At  3†Bu€€ 3†At 3†At€€ЙI†C­!3†At€Є'†Cє0†AtЙK†Cћ!3†At€€'†Cы ЙS†At3†A(0†AtЙI†C­!3†At€Є'†Cє0†At3†At ЙI†C­!3†At€(Є'†Cє0†At,„!,†At3†At3†At 3†At3†At ,„!,†AtЙK†Cћ!3†At€€'†Cы ЙS†At3†A(0†AtЙI†C­!3†At€Є'†Cє0†At3†At€џџ ЙI†C­!3†At€(Є'†Cє0†At,„!,†At3†At3†At 3†At3†At ,„!,†At3†At CBЙI†C­!3†At€Є'†Cє0†AtЙK†Cћ!3†At€€'†Cы ЙS†At3†A(0†AtЙI†C­!3†At€Є'†Cє0†At3†At ЙI†C­!3†At€(Є'†Cє0†At,„!,†At3†At3†At 3†At3†At ,„!,†AtЙK†Cћ!3†At€€'†Cы ЙS†At3†A(0†AtЙI†C­!3†At€Є'†Cє0†At3†At€џџ ЙI†C­!3†At€(Є'†Cє0†At,„!,†At3†At3†At 3†At3†At ,„!,†At3†At  3†Bu€€ 3†At3†At€џџџЙI†C­!3†At€Є'†Cє0†AtЙK†Cћ!3†At€€'†Cы ЙS†At3†A(0†AtЙI†C­!3†At€Є'†Cє0†At3†At ЙI†C­!3†At€(Є'†Cє0†At,„!,†At3†At3†At 3†At3†At ,„!,†AtЙK†Cћ!3†At€€'†Cы ЙS†At3†A(0†AtЙI†C­!3†At€Є'†Cє0†At3†At€џџ ЙI†C­!3†At€(Є'†Cє0†At,„!,†At3†At3†At 3†At3†At ,„!,†At3†At CBCB2†AtKO€ёT: ) O€і&g3†At€3†At€Уѕ(ЙK†Cћ!3†At€d'†Cє0†At3†At€і3†At 3†At3†At 2†AtKO€јЙK†Cћ!3†At€ˆ'†Cє0†At3†At!8›ЙK†Cћ!3†Ath'†Cє0†At3†At8›SO€љЙI†C­!3†At€Ф'†Cє0†At3†At8œSO€њO€ћ&ЙK†Cћ!3†At€ˆ'†Cє0†At3†At ЙI†C­!3†At€(Є'†Cє0†At,„!,†At3†At€ЙK†Cћ!3†At€p'†Cє0†At,„!,†At,„!,†AtЙK†Cћ!3†At€ˆ'†Cє0†At3†At€џџ ЙI†C­!3†At€(Є'†Cє0†At,„!,†At3†At€ЙK†Cћ!3†At€p'†Cє0†At,„!,†At,„!,†At3†At ЙK†Cћ!3†At€ˆ'†Cє0†AtЙI†C­!3†At€(Є'†Cє0†At,„!,†At3†At€ЙK†Cћ!3†At€p'†Cє0†At,„!,†At3†At 3†At3†At 2†AtKO€ќO€§&^&џ Н†At€3†At€Й†At3†At 3†AtQЙ†At3†At€џџ 3†AtQ3†At UІA“ L2†AtKO€ў&gЙg†At3†At Й^†At,„!,†AtЙg†At3†At€џџ Й^†At,„!,†At3†At Йg†AtЙ^†At3†At 3†At3†At 2†AtKO€џT:Ц)œЙI†C­!3†At€Ф'†Cє0†At3†At8ЧSO€O€&ШЙK†Cћ!3†At€ˆ'†Cє0†At3†At ЙI†C­!3†At€(Є'†Cє0†At,„!,†At3†At€ЙK†Cћ!3†At€p'†Cє0†At,„!,†At,„!,†AtЙK†Cћ!3†At€ˆ'†Cє0†At3†At€џџ ЙI†C­!3†At€(Є'†Cє0†At,„!,†At3†At€ЙK†Cћ!3†At€p'†Cє0†At,„!,†At,„!,†At3†At ЙK†Cћ!3†At€ˆ'†Cє0†AtЙI†C­!3†At€(Є'†Cє0†At,„!,†At3†At€ЙK†Cћ!3†At€p'†Cє0†At,„!,†At3†At 3†At3†At 2†AtKO€O€&^&џ Н†At€3†At€ЙШ†At3†At 3†At(ЙШ†At3†At€џџ 3†At(3†At UІA“ L2†AtKO€&gЙg†At3†At Й^†At,„!,†AtЙg†At3†At€џџ Й^†At,„!,†At3†At Йg†AtЙ^†At3†At 3†At3†At 2†AtKO€T:ё)ЧSO€3‚KO€T)ё)ЦO€TO€ )›&S3†At2†AtK:ѓ)є&S3†At5†AtK)ѓЙS†At3†At"8ѕSO€ ЙK†Cћ!3†At€'†Cы ЙS†At3†A(Йg†At3†At ЙK†Cћ!3†At€'†Cы ЙS†At3†A(0†At,„!,†AtЙg†At3†At€џџ ЙK†Cћ!3†At€'†Cы ЙS†At3†A(0†At,„!,†At3†At 2†AtKO€ T:є)ѕO€&i3†At3†At€3†AtЙK†Cћ!3†At€x'†Cы 3†A(0†At3†At€€,„!,†At2†AtKO€ЙK†Cћ!3†Ath'†Cє0†At3†At8ўSO€&џ3†At€Э ЙI†C­!3†At€Ф'†Cє0†At2†AtKO€&S3†At2†AtK:)&S3†At5†AtK)ЙS†At3†At"8SO€&WЙџ†At3†At€РЙK†Cћ!3†Atl'†Cы ЙS†At3†A(0†At2†AtKO€ЙK†Cћ!3†At€ '†Cы ЙS†At3†A(3†At€@ЙW†AtЙi†At3†At ЙW†At,„!,†AtЙi†At3†At€џџ ЙW†At,„!,†At3†At 3†At 2†AtKO€ЙK†Cћ!3†At€ '†Cы ЙS†At3†A(ЙW†At3†At€@,„"!,†At†AtKO€T:)O€3‚KO€O€&]3†At€3Гџџ3†At3†AtsЙI†C­!3†At€(Є'†Cє0†At,„!,†At3†At€33ЙI†C­!3†At€(Є'†Cє0†At,„!,†At3†At ,„!,†At3†At€3Г3†AtsЙI†C­!3†At€(Є'†Cє0†At,„!,†At3†At€33ЙI†C­!3†At€(Є'†Cє0†At,„!,†At3†At ,„!,†At3†At 2†AtKO€ T:)ўSO€!&W3†At€3SЙI†C­!3†At€Ф'†Cє0†At2†AtKO€#ЙK†Cћ!3†At€ '†Cы 3†A(3†At€@ЙW†AtЙi†At3†At 3†AtЙW†At,„!,†At3†At€š™ЙW†At,„!,†At3†At ,„!,†AtЙi†At3†At€џџ 3†AtЙW†At,„!,†At3†At€š™ЙW†At,„!,†At3†At ,„!,†At3†At 3†At 2†AtKO€$ЙK†Cћ!3†At€ '†Cы 3†A(ЙW†At3†At€@,„"!,†At†AtKO€%&S3†At2†AtK:&)'&S3†At5†AtK)&ЙS†At3†At"8(SO€&ЙK†Cћ!3†At€ '†Cы ЙS†At3†A(ЙK†Cћ!3†At€ '†Cы ЙS†At3†At3†A(0†At2†AtKO€'T:')(O€(&]3†At€3Гџџ2†AtKO€)T)O€/O€0&[3†At€ЙK†Cћ!3†At€d'†Cє0†At3†At 3†At ЙI†C­!3†At€Є'†Cє0†At,„!,†At3†At€ЙK†Cћ!3†At€d'†Cє0†At3†At 3†At€џџ ЙI†C­!3†At€Є'†Cє0†At,„!,†At3†At 3†At 3†At€š3†At€ЙK†Cћ!3†At€d'†Cє0†At3†At 3†At ЙI†C­!3†At€Є'†Cє0†At,„!,†At3†At€ЙK†Cћ!3†At€d'†Cє0†At3†At 3†At€џџ ЙI†C­!3†At€Є'†Cє0†At,„!,†At3†At 3†At€џџ 3†At€š3†At 2†AtKO€3O€4&[Й[†At3†At€ЙK†Cћ!3†At€`'†Cє0†At3†At 3†At 3†At€š3†At€ЙK†Cћ!3†At€`'†Cє0†At3†At 3†At€џџ 3†At€š3†At 2†AtKO€63†At89ЙK†Cћ!3†Ath'†Cє0†At3†At89SO€8O€:&\3†At€ЭL3†At€3†At€ЙK†Cћ!3†At€d'†Cє0†At3†At 3†At ЙK†Cћ!3†At€`'†Cє0†At,„!,†At3†At€ЙK†Cћ!3†At€d'†Cє0†At3†At 3†At€џџ ЙK†Cћ!3†At€`'†Cє0†At,„!,†At3†At 3†At 3†At€333†At€3†At€ЙK†Cћ!3†At€d'†Cє0†At3†At 3†At ЙK†Cћ!3†At€`'†Cє0†At,„!,†At3†At€ЙK†Cћ!3†At€d'†Cє0†At3†At 3†At€џџ ЙK†Cћ!3†At€`'†Cє0†At,„!,†At3†At 3†At€џџ 3†At€333†At 2†AtKO€=O€>&\Й\†At3†At 3†At &DН†At€ЙI†C­!3†At€Є'†Cє0†At3†At U†AtL,„!,†AtЙ\†At3†At 3†At€џџ &DН†At€ЙI†C­!3†At€Є'†Cє0†At3†At U†AtL,„!,†At3†At 2†AtKO€?T:J)9SO€@&\3†At2†AtKO€AT)JO€F&S3†At2†AtK:K)L&S3†At5†AtK)KЙS†At3†At"8MSO€GO€HЙR†CЯ!3†At'†CєЙR†CЯ!3†At'†Cє0†AtЙ[†AtЙR†CЯ!3†At'†Cє0†At3†At 3†At€ffЙ[†AtЙR†CЯ!3†At'†Cє0†At3†At€џџ 3†At€ff3†At 2†AtKO€IO€JЙR†CЯ!3†At'†CєЙR†CЯ!3†At'†Cє0†AtЙ\†AtЙR†CЯ!3†At'†Cє0†At3†At 3†At€ffЙ\†AtЙR†CЯ!3†At'†Cє0†At3†At€џџ 3†At€ff3†At 2†AtKO€KO€LЙR†CЯ!3†At '†CєЙR†CЯ!3†At '†Cє0†AtЙ]†AtЙR†CЯ!3†At '†Cє0†At3†At 3†At€ffЙ]†AtЙR†CЯ!3†At '†Cє0†At3†At€џџ 3†At€ff3†At 2†AtKO€NЙK†Cћ!3†At€,'†Cы ЙS†At3†A(ЙR†CЯ!3†At'†Cє0†At3†At 3†At3†At 2†AtKO€OЙK†Cћ!3†At€L'†Cы ЙS†At3†A(ЙR†CЯ!3†At'†Cє0†At3†At 3†At3†At 2†AtKO€PЙK†Cћ!3†At€<'†Cы ЙS†At3†A(ЙR†CЯ!3†At '†Cє0†At3†At 3†At3†At 2†AtKO€QT:L)MO€RT)QOGTTOœO€SM   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t M L KJ9( ' &  ўѕ є ѓёЧЦœ›       фз ж еЦЕДЏЎ ­ ЌЋЊ˜}Q Ox†€.Mpitch_res†€.KpsEncCtrl†€ћIpsEnc†€­ kauto_corr†DЁ€Ojb_Q8†tggain_mult_Q16†tblog_energy_prev_Q7†t_nrg†!tfBWExp2_Q16†t^tmp32†trQnrg_vec†€ceBWExp1_Q16†tXscale†!tnx_windowed„€аЁ€[mAR_Q24†@Ё€Plrefl_coef_Q16†@Ё€P[HarmBoost_Q16†tUlz†tppitch_res_ptr†€.hgain_add_Q16†tcenergy_variation_Q7†tZSNR_adj_dB_Q7†tRpsShapeSt†€Я\HarmShapeGain_Q16†tox_ptr†€.istrength_Q16†tddelta_Q16†talog_energy_Q7†t`pre_nrg_Q30†!t]Tilt_Q16†tTnSamples†tSk†tVQnrg†tWb_Q14†tqsqrt_nrg†€cYsz†t                essStrength_Q15†t ШessStrength_Q15†t   џfs_kHz_inv†t        ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёз ž!о –!Ž!›!Ќ!М!Ў!ё!Џ!в!А!з!Б!о!В!к!Д!Š"р!ф!ь!Œ"э!Ž"ю!ˆ"њ!ў!U!tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ ’ “ ” Ÿ   Ђ Ѓ Љ Ў Д Т Ш Щ Ы Я а д з о у ы Ž!–!›!ž!Ќ!­!Ў!Џ!А!Б!В!Д!М!Я!а!в!з!к!о!р!ф!ь!э!ю!ё!њ!ћ!ў!ˆ"Š"Œ"Ž"К"є"Е#$‚$ˆ$‰$Б$О$П$С$Ы$и$й$к$л$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg$.cil$gl .cil$in.cil$exa^.cil$sy№ .cil$dbO /1862 1284597038 100666 16450 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТ"@ .e‘Lў>.drectveQ, .cil$fg }@@.cil$glA@@.cil$inо @@.cil$exД+п @@.cil$syк“6@@.cil$db‘m>@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_NLSF_VQ_weights_laroia.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_NLSF_VQ_weights_laroia.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2ќ2€ov=V €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf_vq_weights_laroia.cбeм@_њпНEѕУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ SKP_min_int†€€Љ€aШSKP_max_int†€€б€Ш<SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШЉSKP_Silk_NLSF_VQ_weights_laroia‚€1€v'€#€ѓh Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœOO€ O €ўO3 f0" D ЄBEOœO,SS&ЉF-ф-т-рLOSO-O.O13‚KO23‚KO5&ш&Н†At€ 3†AtU†AtЙт†C” 3†A(0ІA“ U†AtL2†AtKO6&ш3†At€ Йш†At2†AtKO7&щ&Н†At€ 3†AtU†AtЙт†C” 3†A(0ІA“ Йт†C” 3†A(0ІA“ U†AtL2†AtKO8&щ3†At€ Йщ†At2†AtKO9Йр†Cє3†A(&Н†At€ 3†At€џU†AtЙш†AtЙщ†AtU†AtL2†AtKO:3‚KO=&ч3†At2†AtK:№)ё&ч3†At†AtK)№Йч†AtЙфІA“ 3†At"8ђSO>&ш&Н†At€ 3†AtU†AtЙт†C” Йч†At3†At3†A(0ІA“ Йт†C” Йч†At3†A(0ІA“ U†AtL2†AtKO?&ш3†At€ Йш†At2†AtKO@Йр†CєЙч†At3†A(&Н†At€ 3†At€џU†AtЙш†AtЙщ†AtU†AtL2†AtKOA3‚KOC&щ&Н†At€ 3†AtU†AtЙт†C” Йч†At3†At3†A(0ІA“ Йт†C” Йч†At3†At3†A(0ІA“ U†AtL2†AtKOD&щ3†At€ Йщ†At2†AtKOEЙр†CєЙч†At3†At3†A(&Н†At€ 3†At€џU†AtЙш†AtЙщ†AtU†AtL2†AtKOF3‚KOGT:ё)ђOJ&ш&Н†At€ 3†AtU†At3†At€€Йт†C” ЙфІA“ 3†At3†A(0ІA“ U†AtL2†AtKOK&ш3†At€ Йш†At2†AtKOLЙр†CєЙфІA“ 3†At3†A(&Н†At€ 3†At€џU†AtЙш†AtЙщ†AtU†AtL2†AtKOM3‚KONT)цOGTTOœOOM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t ђ ё №ц фD†€тpNLSF_Q15†€рpNLSFW_Q6†€t шtmp1_int†tчk†tщtmp2_int†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ ” Ÿ   Љ Б$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$glA.cil$in.cil$exД+.cil$syк.cil$db‘/1906 1284597038 100666 17748 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТ4E .e‘LD.drectveQ, .cil$fg}@@.cil$gl ›@@.cil$inЋ @@.cil$exг,Ќ @@.cil$syў:@@.cil$db“}C@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_NLSF_VQ_sum_error_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_NLSF_VQ_sum_error_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2ƒ2€ov V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf_vq_sum_error_fix.c]& W умрh8тФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШ№SKP_Silk_NLSF_VQ_sum_error_FIX‚€V€(€#€h Кsize_tu ЃSA_AttrTarget€)АSA_Parameter€)† strnlen†€ЎSA_Method€)†@ Лwchar_t!€ wcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOO€ O €ўO3 f0" D ЄBEOœO(SS&№F-T-R-P-N-L-J-HLOSO)O*O+O,O.3‚KO/3‚KO2&Y3†At2†AtK:a)b&Y3†At5†AtK)aЙY†AtЙTІA“ 3†At "8cSO3&]ЙY†At3†A(ЙL†C” 3†AtЙY†At3†A(0ІA“ ЙL†C” 3†AtЙY†At3†At3†A(0ІA“ ,†At3†At 2†AtKO4T:b)cO7&X3†At2†AtK:e)f&X3†At5†AtK)eЙX†AtЙPІA“ "8gSO9&^ЙN†CЎ 2†CЎ KO:&W3†At2†AtK:h)i&W3†At5†AtK)hЙW†AtЙRІA“ "8jSO;&[3†At2†AtKO<&Y3†At2†AtK:k)l&Y3†At†AtK)kЙY†AtЙTІA“ "8mSO>&\&]ЙY†At3†At 3†A(0†At2†AtKOA&ZЙJ†C” ЙY†At3†A(0ІA“ &^3†A5†CЎ 0Є!­ ,†At2†AtKOB&[Й[†AtЙZ†At,„!,†AtЙZ†At,„!,†At3†At Й\†At,„!,†AtЙZ†At,„!,†AtЙZ†At,„!,†At3†At€џџ Й\†At,„!,†At3†At 2†AtKOE&ZЙJ†C” ЙY†At3†At3†A(0ІA“ &^3†A5†CЎ 0Є!­ ,†At2†AtKOF&[Й[†AtЙZ†At,„!,†AtЙZ†At,„!,†At3†At Й\†At3†At ЙZ†At,„!,†AtЙZ†At,„!,†At3†At€џџ Й\†At3†At 3†At 2†AtKOGT:l)mOH3‚KOIЙH†CєЙW†At3†A(Й[†At2†AtKOJT:i)jOK&HЙRІA“ 3†A†CєKOL&JЙTІA“ 3†A†C” KOMT:f)gONT)VOGTTOœOPM   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t m l kj i hg f ec b aV TLPC_order†€RK†€PN†€NpCB_Q15†€.Lw_Q6†€Jin_Q15†€Herr_Q20†€t ^cb_vec_Q15†€.Xn†tWi†t\Wtmp_Q6†t]Wcpy_Q6† €пZdiff_Q15†t[sum_error†tYm†t      ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ ” Љ ­ Ў п#ж$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl .cil$in.cil$exг,.cil$syў.cil$db“/1949 1284597038 100666 17317 ` џџL.e‘L8ўГ ЅйЋMЌ›жЖ"&SТ…C .e‘LaB.drectveQ, .cil$fg*}@@.cil$glˆ Ї@@.cil$in/@@.cil$ex+0@@.cil$sy{C9@@.cil$dbЃОA@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_NLSF_VQ_rate_distortion_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_NLSF_VQ_rate_distortion_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2i2€ov„ V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf_vq_rate_distortion_fix.c e}/ШŸПњJu'ЕhVXФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШсSKP_Silk_NLSF_VQ_rate_distortion_FIX‚€M€(€#€Œh№ SKP_Silk_NLSF_CBS€› Кsize_tu SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)АSA_Parameter€)†№SKP_Silk_NLSF_VQ_sum_error_FIX‚€V strnlen†€ЎSA_Method€)†@ Лwchar_t!€ wcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOO€ O €ўO3 f0" D ЄBEOœO)SS&сF-V-T-R-P-N-L-J-HLOSO*O+O.O/&№Н‚€WЙVІA“ UІA“ ЙJ†C!3†At'†C” 0ІA“ UІA“ ЙTІA“ UІA“ ЙJ†C!3†At'†CЪ$0ІCН U†CЎ ЙN†C” U†C” ЙL†C” U†C” ЙH†CєU†CєLKO2&[ЙH†Cє2†CєKO3&Z3†At2†AtK:\)]&Z3†At5†AtK)\ЙZ†AtЙTІA“ "8^SO5&Y3†At2†AtK:_)`&Y3†At5†AtK)_ЙY†AtЙJ†C!3†At'†C” 0ІA“ "8aSO63‚KO73‚KO8Й[†CєЙY†At3†A(Й[†CєЙY†At3†A(0†AtЙP†C” ЙZ†At3†A(0ІA“ ЙJ†C!3†At'†CЪ$0ІCН ЙY†At3†A(0Є!­ ,†At,„!,†AtЙRІA“ ,„!,†At2†AtKO93‚KO:T:`)aO;&[ЙJ†C!3†At'†C” 0ІA“ 3†A†CєKOM   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t a ` _^ ] \X VLPC_order†€TN†€Rmu_Q15†€Prate_acc_Q5†€Nw_Q6†€Lin_Q15†€JpsNLSF_CBS†€HpRD_Q20†€t Zn†tYi†t[pRD_vec_Q20†€t    ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёŽ!›!!tuєƒ ˆ ‹ Œ Ž  ‘ “ ” Љ ­ Ў Н Ž!!›!Ъ$Э$ж$з$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg*.cil$glˆ .cil$in.cil$ex+.cil$sy{.cil$dbЃ /1998 1284597037 100666 19257 ` џџL-e‘L8ўГ ЅйЋMЌ›жЖ"&SТK -e‘LѕI.drectveQ, .cil$fg}@@.cil$glЖ@@.cil$inC @@.cil$ex:4D @@.cil$syо ~?@@.cil$db™\I@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_NLSF_stabilize.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_NLSF_stabilize.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2<2€ovВV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf_stabilize.c;ЪOж%Q~Љ1ѓ ЫЬрXУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ SKP_min_int†€€Љ€aШSKP_max_int†€€б€Ш<SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШ™SKP_Silk_NLSF_stabilize‚€1€v'€#€ъh’ЂSKP_Silk_NLSF_stabilize_multi‚€T€+3€? 2h™’SKP_Silk_insertion_sort_increasing_all_values‚€ Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO$O€ O €ўO3 f0" D ЄBEOœO/SS&™F-ф-т-рLOSO0O1O2O3&ю3†At2†AtKO63‚KO8&ь3†At2†AtK:ё)ђ&ь3†At5†AtK)ёЙь†At3†At"8ѓSO=&ыЙр†Cє3†A(0†AtЙт†C” 3†A(0ІA“ 2†AtKO>&ю3†At2†AtKO@&э3†At2†AtK:є)ѕ&э3†At5†AtK)єЙэ†AtЙфІA“ 3†At!8іSOA&шЙр†CєЙэ†At3†A(0†AtЙр†CєЙэ†At3†At3†A(0†AtЙт†C” Йэ†At3†A(0ІA“ 2†AtKOBЙш†AtЙы†At"8їSOC&ыЙш†At2†AtKOD&юЙэ†At2†AtKOETOF)їT:ѕ)іOH&ш3†At€€Йр†CєЙфІA“ 3†At3†A(0†AtЙт†C” ЙфІA“ 3†A(0ІA“ 2†AtKOIЙш†AtЙы†At"8јSOJ&ыЙш†At2†AtKOK&юЙфІA“ 2†AtKOLTOQ)јЙы†At3†At#8љSOR:цOSTOU)љЙю†At3†At8њSOWЙр†Cє3†A(Йт†C” 3†A(0ІA“ 2†AtKOYT:ћ)њЙю†AtЙфІA“ 8ќSO[Йр†CєЙфІA“ 3†At3†A(3†At€€Йт†C” ЙфІA“ 3†A(0ІA“ 2†AtKO]T:§)ќSO_&щ3†At2†AtKO`&я3†At2†AtK:ў)џ&я3†At5†AtK)ўЙя†AtЙю†At"8SOa&щЙт†C” Йя†At3†A(0ІA“ †AtKObT:џ)Oc&щЙт†C” Йю†At3†A(0ІA“ 3†At †AtKOf&ъ3†At€€2†AtKOg&яЙфІA“ 2†AtK:)&я3†At6†AtK)Йя†AtЙю†At$8SOh&ъЙт†C” Йя†At3†A(0ІA“ †AtKOiT:)Oj&ъЙт†C” Йю†At3†A(0ІA“ Йт†C” Йю†At3†A(0ІA“ 3†At †AtKOmOn&чЙщ†AtЙъ†At$Йр†CєЙю†At3†At3†A(0†AtЙр†CєЙю†At3†A(0†At3†At Йр†CєЙю†At3†At3†A(0†AtЙр†CєЙю†At3†A(0†At3†At Йщ†At$Йщ†AtЙр†CєЙю†At3†At3†A(0†AtЙр†CєЙю†At3†A(0†At3†At Йр†CєЙю†At3†At3†A(0†AtЙр†CєЙю†At3†A(0†At3†At Йъ†At"Йъ†AtЙр†CєЙю†At3†At3†A(0†AtЙр†CєЙю†At3†A(0†At3†At Йр†CєЙю†At3†At3†A(0†AtЙр†CєЙю†At3†A(0†At3†At CBCBЙр†CєЙю†At3†At3†A(0†AtЙр†CєЙю†At3†A(0†At3†At Йр†CєЙю†At3†At3†A(0†AtЙр†CєЙю†At3†A(0†At3†At Йъ†At$Йъ†AtЙр†CєЙю†At3†At3†A(0†AtЙр†CєЙю†At3†A(0†At3†At Йр†CєЙю†At3†At3†A(0†AtЙр†CєЙю†At3†A(0†At3†At Йщ†At"Йщ†AtЙр†CєЙю†At3†At3†A(0†AtЙр†CєЙю†At3†A(0†At3†At Йр†CєЙю†At3†At3†A(0†AtЙр†CєЙю†At3†A(0†At3†At CBCBCB2†AtKOoЙр†CєЙю†At3†At3†A(Йч†AtЙт†C” Йю†At3†A(0ІA“ 3†At 2†AtKOpЙр†CєЙю†At3†A(Йр†CєЙю†At3†At3†A(0†AtЙт†C” Йю†At3†A(0ІA“ 2†AtKOqT)§)ћOrT:ђ)ѓOuЙь†At3†At8(OvSOz&’Н‚€ЙфІA“ UІA“ Йр†Cє3†A(U†CєLKO}Йр†Cє3†A(&Н†At€ Йт†C” 3†A(0ІA“ U†AtЙр†Cє3†A(0†AtU†AtL2†AtKO€€&э3†At2†AtK:))*&э3†At5†AtK))Йэ†AtЙфІA“ "8+O€Йр†CєЙэ†At3†A(&Н†At€ Йр†CєЙэ†At3†At3†A(0†AtЙт†C” Йэ†At3†A(0ІA“ U†AtЙр†CєЙэ†At3†A(0†AtU†AtL2†AtK:*)+O€„Йр†CєЙфІA“ 3†At3†A(&Н†At€ 3†At€€Йт†C” ЙфІA“ 3†A(0ІA“ U†AtЙр†CєЙфІA“ 3†At3†A(0†AtU†AtL2†AtKO€‡&эЙфІA“ 3†At2†AtK:,)-&э3†At6†AtK),Йэ†At3†At#8.O€ˆЙр†CєЙэ†At3†A(&Н†At€ Йр†CєЙэ†At3†At3†A(0†AtЙт†C” Йэ†At3†At3†A(0ІA“ U†AtЙр†CєЙэ†At3†A(0†AtU†AtL2†AtK:-).O€‰TO€Š)(T)цOGTTO€ O €ўO3 f0" D ЄBEOœO€“SS&ЂF-5-3-1-/LOSO€”O€—&83†At2†AtK:9):&83†At5†AtK)9Й8†AtЙ3ІA“ "8;SO€˜&™Н‚€KЙ5ІA“ UІA“ Й1†C” U†C” Й/†CєЙ8†AtЙ5ІA“ 3†A(U†CєLKO€™T::);O€šT)7OGTTOœO€›M9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t . - ,+ * )(   џ ў§ќћњљјїі ѕ єѓ ђ ёц фL†€тNDeltaMin_Q15†€рNLSF_Q15†€t эi†tщmin_center_Q15†tьloops†tшdiff_Q15†tяk†tъmax_center_Q15†tюI†tыmin_diff_Q15†tчcenter_freq_Q15†t           ; : 97 5L†€3N†€1NDeltaMin_Q15†€/NLSF_Q15†€t 8n†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ ” – — Ÿ   Љ Б$Ы$д$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glЖ.cil$in.cil$ex:4.cil$syо .cil$db™ /2034 1284597037 100666 21988 ` џџL-e‘L8ўГ ЅйЋMЌ›жЖ"&SТФU -e‘L T.drectveQ, .cil$fg}@@.cil$glZ ™@@.cil$inѓ@@.cil$exs8є@@.cil$syr gG@@.cil$dbЧйS@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_NLSF_MSVQ_encode_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_NLSF_MSVQ_encode_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2э2€ovV V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf_msvq_encode_fix.cМcƒrЊ†+‹bšВ]Ф SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ  SKP_min_32†€€Ы€ПШ=SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШаSKP_Silk_NLSF_MSVQ_encode_FIX‚€R€(€#€Œh | zс $SKP_Silk_NLSF_CB_struct€–сSKP_Silk_NLSF_VQ_rate_distortion_FIX‚€M SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› Кsize_tu SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)АSA_Parameter€)†|SKP_Silk_insertion_sort_increasing‚€5 strnlen†€ЎSA_Method€)†@ Лwchar_t!€ wcsnlen†€zSKP_Silk_NLSF_MSVQ_decode‚€r [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOO€ O €ўO3 f0" D ЄBEOœO-SS&аF-Z-X-V-T-R-P-N-L-J-HLOSO.&`3†At2†AtKO/O0O2O?O@OAOBOCODOEOFOIOJOKOLON3‚KOO3‚KOT3†At€Ќ@†CƒЙXІA“ 3†BuU†BuЙJ†CєU†CЫ &fU†CƒLKO[3†At€­@†CƒЙVІA“ 3†BuU†Bu3†AtU†At&kU†CƒLKO^&]3†At2†AtK:z){&]3†At5†AtK)zЙ]†AtЙXІA“ "8|SO_&pЙ]†At3†A(ЙJ†CєЙ]†At3†A(0†At2†AtKO`T:{)|Oc&a3†At2†AtKOf&^3†At2†AtK:})~&^3†At5†AtK)}Й^†AtЙL†Cр 3†At'†C” 0ІA“ "8SOi&uЙL†Cр 3†At'†CЩ$0ІCШ$Й^†At3†A (2†C!KOl&`& Н†At€ Йa†At,„!,†AtЙu†C!3†At'†C” 0ІA“ ,„!,†AtU†AtЙVІA“ U†AtL2†AtKOwOx&сН‚€NЙXІA“ UІA“ Йa†AtUІA“ ЙRІA“ UІA“ &kU†C” ЙP†C” U†C” &pU†C” Йu†C!U†C!&jU†CєLKO{O|&|Н‚€6Й`†AtUІA“ Йa†AtЙu†C!3†At'†C” 0ІA“ UІA“ &mU†Cє&jU†CєLKO&j3†A(0†At3†At€џџџ"8„SO€€&e3†At&j3†A(0†At2†AtKO€)†&jЙ`†At3†At3†A(0†AtЙe†At$8‡Й`†At3†At$8‡SO€‚&`3†At6†AtKO€ƒT:†)‡O€„TO€†)„&_3†At2†AtK:ˆ)‰&_3†At5†AtK)ˆЙ_†AtЙ`†At"8ŠSO€‡Й^†At3†At$8‹SO€‰Йu†C!3†At'†C” 0ІA“ 3†At8ŒSO€Š&b&mЙ_†At3†A(0†At3†At 2†AtKO€‹&c&mЙ_†At3†A(0†At3†At 2†AtKO€ŒT:)ŒSO€&b&mЙ_†At3†A(0†AtЙu†C!3†At'†C” 0ІA“ ,†At2†AtKO€Ž&c&mЙ_†At3†A(0†AtЙb†At,„!,†AtЙu†C!3†At'†C” 0ІA“ ,„!,†At2†AtKO€T)O€T:“)‹SO€’&b3†At2†AtKO€“&c&mЙ_†At3†A(0†At2†AtKO€”T)“O€—&r&pЙb†At,„!,†AtЙXІA“ ,„!,†At3†A(2†C” KO€˜&tЙu†C!3†At'†CЪ$0ІCН Йc†At,„!,†AtЙXІA“ ,„!,†At3†A(2†CЎ KO€™&s&qЙ_†At,„!,†AtЙXІA“ ,„!,†At3†A(2†CєKO€š&]3†At2†AtK: )Ё&]3†At5†AtK) Й]†AtЙXІA“ "8ЂSO€›Йs†CєЙ]†At3†A(Йr†C” Й]†At3†A(0ІA“ Йt†CЎ Й]†At3†A(0Є!­ ,†At2†AtKO€œT:Ё)ЂO€Ÿ&lЙ_†At3†A(&kЙb†At3†A(0†AtЙu†C!3†At'†CЪ$0ІCН Йc†At3†A(0Є!­ ,†At2†AtKO€Ђ&r&nЙb†At,„!,†AtЙL†Cр 3†At'†C” 0ІA“ ,„!,†At3†A(2†C” KO€Ѓ&s&oЙ_†At,„!,†AtЙL†Cр 3†At'†C” 0ІA“ ,„!,†At3†A(2†CєKO€Є&]3†At2†AtK:Ќ)­&]3†At5†AtK)ЌЙ]†AtЙ^†At"8ЎSO€ЅЙs†CєЙ]†At3†A(Йr†C” Й]†At3†A(0ІA“ 2†AtKO€ІT:­)ЎO€ЈЙs†CєЙ^†At3†A(Йc†At2†AtKO€ЉT:‰)ŠO€ЋЙ^†AtЙL†Cр 3†At'†C” 0ІA“ 3†At"8ЏSO€­3†At€Ќ@†CƒЙ`†At,„!,†AtЙXІA“ ,„!,†At3†BuU†Bu&qU†CЫ &pU†CƒLKO€А3†At€Ќ@†CƒЙ`†At3†BuU†Bu&lU†CЫ &kU†CƒLKO€Г3†At€Ќ@†CƒЙ`†At,„!,†AtЙL†Cр 3†At'†C” 0ІA“ ,„!,†At3†BuU†Bu&oU†CЫ &nU†CƒLKO€ДTO€Ж)Џ&aЙ`†At2†AtKO€ЗT:~)O€К&d3†At2†AtKO€РЙZІA“ 3†At 8ЛSO€У&i3†At€џџџ2†AtKO€Ф&^3†At2†AtK:М)Н&^3†At5†AtK)МЙ^†AtЙ`†At"8ОSO€Ц&zН‚€sЙXІA“ UІA“ &oЙ^†At,„!,†AtЙL†Cр 3†At'†C” 0ІA“ ,„!,†At3†A(U†C” ЙL†Cр U†Cр ЙJ†CєU†CєLKO€Щ&h3†At2†AtKO€Ъ&]3†At2†AtK:У)Ф&]3†At†AtK)УЙ]†AtЙXІA“ "8ХSO€Ь&gЙJ†CєЙ]†At3†A(0†AtЙN†C” Й]†At3†A(0ІA“ 2†AtKO€Э&hЙh†AtЙg†At,„!,†AtЙg†At,„!,†At3†At ЙP†C” Й]†At3†A(0ІA“ ,„!,†AtЙg†At,„!,†AtЙg†At,„!,†At3†At€џџ ЙP†C” Й]†At3†A(0ІA“ ,„!,†At3†At 2†AtKO€а&gЙJ†CєЙ]†At3†At3†A(0†AtЙN†C” Й]†At3†At3†A(0ІA“ 2†AtKO€б&hЙh†AtЙg†At,„!,†AtЙg†At,„!,†At3†At ЙP†C” Й]†At3†At3†A(0ІA“ ,„!,†AtЙg†At,„!,†AtЙg†At,„!,†At3†At€џџ ЙP†C” Й]†At3†At3†A(0ІA“ ,„!,†At3†At 2†AtKO€вT:Ф)ХO€г3‚KO€ж&h&jЙ^†At3†A(0†AtЙh†At3†At ЙTІA“ ,„!,†AtЙh†At3†At€џџ ЙTІA“ ,„!,†At3†At 3†Bu€€ 3†At€џџџ&jЙ^†At3†A(0†AtЙh†At3†At ЙTІA“ ,„!,†AtЙh†At3†At€џџ ЙTІA“ ,„!,†At3†At CB2†AtKO€йЙh†AtЙi†At"8чSO€к&iЙh†At2†AtKO€л&dЙ^†At2†AtKO€мTO€н)чT:Н)ОO€оTO€т)Л3†At€Ќ@†CƒЙL†Cр 3†At'†C” 0ІA“ 3†BuU†Bu&oЙd†At,„!,†AtЙL†Cр 3†At'†C” 0ІA“ ,„!,†At3†A(U†CЫ ЙH†CєU†CƒLKO€х&zН‚€sЙXІA“ UІA“ ЙH†CєU†C” ЙL†Cр U†Cр ЙJ†CєU†CєLKO€чT)\OGTTOœO€шM   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t чХ Ф УО Н МЛЏЎ ­ ЌЂ Ё  “Œ‹Š ‰ ˆ‡ † „ ~ }| { z\ Zdeactivate_fluc_red†€XLPC_order†€VNLSF_MSVQ_Survivors†€TNLSF_mu_fluc_red_Q16†€RNLSF_mu_Q15†€PpW_Q6†€NpNLSF_q_Q15_prev†€LpsNLSF_CB†€`JpNLSF_Q15†€tHNLSFIndices†€t upCurrentCBStage†€spInt†€tbinput_index†t`cur_survivors†trpConstInt†€]i†tqpRes_new_Q15†€Ё€OmpTempIndices†@Ё€PjpRateDist_Q18†€Ё€Ohwsse_Q20†t^s†tlpRate_new_Q5†@Ё€PfpNLSF_in_Q15†@Ё€PtpCB_element†€.opPath_new†€€Ё€Pgse_Q15†tdbestIndex†tppRes_Q15†€Ё€OerateDistThreshold_Q18†t_k†tibestRateDist_Q20†taprev_survivors†tccb_index†tkpRate_Q5†@Ё€PnpPath†€€Ё€P                  ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёо –!Ž!›!+!tuƒєƒ ˆ ‹ Œ Ž  ‘ “ ” Ÿ   Љ ­ Ў Н Ы а о р Ž!!–!›!ђ"ѓ"Е$Ж$Ш$Щ$Ъ$Э$Ю$Я$а$в$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glZ .cil$in.cil$exs8.cil$syr .cil$dbЧ/2076 1284597037 100666 18324 ` џџL-e‘L8ўГ ЅйЋMЌ›жЖ"&SТtG -e‘LPF.drectveQ, .cil$fg}@@.cil$glЏ ‘@@.cil$in@@@.cil$ex/A@@.cil$syIT=@@.cil$dbГE@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_NLSF_MSVQ_decode.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_NLSF_MSVQ_decode.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2f2€ovЋ V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf_msvq_decode.cBА-ь C*†д]i)Ф SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШSKP_Silk_NLSF_MSVQ_decode‚€r€(€#€nhš !SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› Мsize_tušSKP_Silk_NLSF_stabilize‚€1 SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)АSA_Parameter€)†4strnlen†€ЎSA_Method€)†@ Нwchar_t!Ћwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœOO€ O €ўO3 f0" D ЄBEOœO%SS&F-N-L-J-HLOSO&O'O(O+3‚KO.&QЙJ†Cр 3†At'†CЩ$0ІCШ$3†A(3†At'†CЪ$0ІCН ЙL†C” 3†A(0ІA“ ЙNІA“ 3†A(2†CЎ KO1&S3†At2†AtK:U)V&S3†At5†AtK)UЙS†AtЙNІA“ "8WSO2ЙH†CєЙS†At3†A(ЙQ†CЎ ЙS†At3†A(0Є!­ ,†At2†AtKO3T:V)WO5&R3†At2†AtK:Y)Z&R3†At5†AtK)YЙR†AtЙJ†Cр 3†At'†C” 0ІA“ "8[SO73‚KO9ЙNІA“ 3†At8]SO;&QЙJ†Cр 3†At'†CЩ$0ІCШ$ЙR†At3†A (3†At'†CЪ$0ІCН ЙL†C” ЙR†At3†A(0ІA“ 3†At 3†A(2†CЎ KO>ЙH†Cє3†A(ЙQ†CЎ 3†A(0Є!­ ,†At†AtKO?ЙH†Cє3†A(ЙQ†CЎ 3†A(0Є!­ ,†At†AtKO@ЙH†Cє3†A(ЙQ†CЎ 3†A(0Є!­ ,†At†AtKOAЙH†Cє3†A (ЙQ†CЎ 3†A(0Є!­ ,†At†AtKOBЙH†Cє3†A(ЙQ†CЎ 3†A(0Є!­ ,†At†AtKOCЙH†Cє3†A(ЙQ†CЎ 3†A (0Є!­ ,†At†AtKODЙH†Cє3†A(ЙQ†CЎ 3†A (0Є!­ ,†At†AtKOEЙH†Cє3†A(ЙQ†CЎ 3†A(0Є!­ ,†At†AtKOFЙH†Cє3†A (ЙQ†CЎ 3†A(0Є!­ ,†At†AtKOGЙH†Cє3†A$(ЙQ†CЎ 3†A(0Є!­ ,†At†AtKOHЙH†Cє3†A((ЙQ†CЎ 3†A(0Є!­ ,†At†AtKOIЙH†Cє3†A,(ЙQ†CЎ 3†A(0Є!­ ,†At†AtKOJЙH†Cє3†A0(ЙQ†CЎ 3†A(0Є!­ ,†At†AtKOKЙH†Cє3†A4(ЙQ†CЎ 3†A(0Є!­ ,†At†AtKOLЙH†Cє3†A8(ЙQ†CЎ 3†A(0Є!­ ,†At†AtKOMЙH†Cє3†A<(ЙQ†CЎ 3†A(0Є!­ ,†At†AtKONT:^)]SOP&QЙJ†Cр 3†At'†CЩ$0ІCШ$ЙR†At3†A (3†At'†CЪ$0ІCН ЙL†C” ЙR†At3†A(0ІA“ ,„!,†AtЙNІA“ ,„!,†At3†A(2†CЎ KOS&S3†At2†AtK:c)d&S3†At5†AtK)cЙS†AtЙNІA“ "8eSOTЙH†CєЙS†At3†A(ЙQ†CЎ ЙS†At3†A(0Є!­ ,†At†AtKOUT:d)eOVT)^OWT:Z)[OZ&šН‚€KЙNІA“ UІA“ ЙJ†Cр 3†At'†Cг"0ІCв"U†C” ЙH†CєU†CєLKO[T)POGTTOœO\M: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t e d c^][ Z YW V UP NLPC_order†€LNLSFIndices†€JpsNLSF_CB†€`HpNLSF_Q15†€t Si†tRs†tQpCB_element†€.       ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёо –!Ž!›!!!tuєƒ ˆ ‹ Œ Ž  ‘ “ ” Љ ­ Ў Н о р Ž!–!›!в"г"ђ"Б$Ш$Щ$Ъ$Ы$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glЏ .cil$in.cil$ex/.cil$syI.cil$dbГ/2114 1284597037 100666 17015 ` џџL-e‘L8ўГ ЅйЋMЌ›жЖ"&SТWB -e‘L3A.drectveQ, .cil$fg}@@.cil$gl€ ‹@@.cil$in @@.cil$ex* @@.cil$syџ™8@@.cil$db›˜@@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_NLSF2A_stable.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_NLSF2A_stable.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2^2€ov| V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf2a_stable.cї"}ђ1…s­ЇэMEK ЩФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШ]SKP_Silk_NLSF2A_stable‚€‚€(€#qhд т s Мsize_tuд SKP_Silk_bwexpander‚€T ЃSA_AttrTarget€)т SKP_Silk_LPC_inverse_pred_gain†€>АSA_Parameter€)†4strnlen†€ЎSA_Method€)†@ Нwchar_t!Ћwcsnlen†€sSKP_Silk_NLSF2A‚€‚ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœOO€ O €ўO3 f0" D ЄBEOœO$SS&]F-L-J-HLOSO%O&O(&sН‚€ƒЙLІA“ UІA“ ЙJ†C” U†C” ЙH†C‘U†C‘LKO+&O3†At2†AtK:Q)R&O3†At5†AtK)QЙO†At3†At"8SSO,&т Н†At€?ЙLІA“ UІA“ ЙH†C‘U†CЎ &PU†CєL3†At8TSO-&д Н‚€t3†At€3†AtBЙO†At,„!,†AtU†AtЙLІA“ UІA“ ЙH†C‘U†C‘LKO.T:Y)TSO/:SO0T)YO1T:R)SO4ЙO†At3†At8ZSO5&O3†At2†AtK:[)\&O3†At5†AtK)[ЙO†AtЙLІA“ "8]SO6ЙH†C‘ЙO†At3†A(3†At2„!KO7T:\)]O8TO9)ZT)NOGTTOœO:M: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t ] \ [ZYTS R QN LLPC_order†€JpNLSF†€HpAR_Q12†€ Oi†tPinvGain_Q30†!t       ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Љ Ў д ‚!ƒ!є"О$П$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl€ .cil$in.cil$ex*.cil$syџ.cil$db› /2149 1284597037 100666 18511 ` џџL-e‘L8ўГ ЅйЋMЌ›жЖ"&SТ/H -e‘L G.drectveQ, .cil$fg}@@.cil$glc}@@.cil$inр @@.cil$ex&1с @@.cil$syf <@@.cil$dbžmF@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_NLSF2A.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_NLSF2A.obj-FdRelease\vc100.pdb-errorreport:prompt†1j212€ov_V €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_nlsf2a.ca|ю2ОLИuЊџ „ЎУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШцSKP_Silk_NLSF2A_find_poly‚€F€v'€#€ШrSKP_Silk_NLSF2A‚€‚€ў)€л€Рhк [ц Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€к SKP_Silk_bwexpander_32‚€"ЎSA_Method€)†@ Мwchar_t![SKP_Silk_LSFCosTab_FIX_Q12†€€*Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO"O€ O €ўO3 f0" D ЄBEOœO*SS&цF-ф-т-рLOSO+O,O.Йр†Cє3†A(3†At€2†AtKO/Йр†Cє3†A(Йт†C” 3†A(0ІA“ 2†AtKO0&ш3†At2†AtK:ы)ь&ш3†At5†AtK)ыЙш†AtЙф†At"8эSO1&ъЙт†C” 3†AtЙш†At3†A(0ІA“ 2†AtKO2Йр†CєЙш†At3†At3†A(Йр†CєЙш†At3†At3†A(0†At3†At Йъ†At,ˆЙр†CєЙш†At3†A(0†At,ˆ3†At 3ˆ3†At ,†At2†AtKO3&щЙш†At2†AtK:ђ)ѓ&щ3†At6†AtK)ђЙщ†At3†At$8єSO4Йр†CєЙщ†At3†A(Йр†CєЙщ†At3†At3†A(0†AtЙъ†At,ˆЙр†CєЙщ†At3†At3†A(0†At,ˆ3†At 3ˆ3†At ,†At†AtKO5T:ѓ)єO6Йр†Cє3†A(Йъ†At†AtKO7T:ь)эO8T)чOGTTO€ O €ўO3 f0" D ЄBEOœO@SS&rF-§-ћ-љLOSOAOBOCODOEOFOGOHOI&3†At2†AtKOK3‚KON&3†At2†AtK:)&3†At5†AtK)Й†AtЙ§ІA“ "8SOO3‚KOP3‚KOS&Йћ†C” Й†At3†A(0ІA“ 3†At 2†AtKOV& Йћ†C” Й†At3†A(0ІA“ Й†At3†At 2†AtKOX3‚KOY3‚KO\& &[Й†At3†A(0ІA“ 2†AtKO]& &[Й†At3†At3†A(0ІA“ Й †At2†AtKO`&Й†At3†A(Й †At3†At Й †AtЙ †At2†AtKOaT:)Oc&Й§ІA“ 3†At 2†AtKOf&цН‚€GЙ†AtU†At&3†A(U†C” &U†CєLKOg&цН‚€GЙ†AtU†At&3†A(U†C” &U†CєLKOj&3†At2†AtK:)&3†At5†AtK)Й†AtЙ†At"8SOk&&Й†At3†At3†A(0†At&Й†At3†A(0†At2†AtKOl&&Й†At3†At3†A(0†At&Й†At3†A(0†At2†AtKOp& Й†At3†A(Й†AtЙ†At3†At 3†At3†At 2†AtKOq& Й§ІA“ Й†At3†At3†A(Й†AtЙ†At3†At 3†At3†At 2†AtKOrT:)Ou&3†At2†AtK:)&3†At5†AtK)Й†At3†At "8SOw& 3†At2†AtKOx&3†At2†AtK:) &3†At5†AtK)Й†AtЙ§ІA“ "8!SOy&& Й†At3†A(0†At3†At$& Й†At3†A(0†At& Й†At3†A(0†AtCB2†AtKOzЙ†AtЙ †At$8"SO{& Й†At2†AtKO|&Й†At2†AtKO}TO~)"T: )!O€€Й †At3†At€џ$8#SO€‚O€ƒ&3†At€Оџ3†At€я?Й †At3†At€џЙ †AtЙ†At3†At3†At 2†AtKO€„&к Н‚€#Й†AtU†AtЙ§ІA“ UІA“ & U†CєLKO€…T:%)#SO€†:O€‡T)%O€ˆT:)O€‹Й†At3†At 8&SO€Œ3‚KO€&3†At2†AtK:())&3†At5†AtK)(Й†AtЙ§ІA“ "8*SO€Ž& Й†At3†A(& Й†At3†A(0†At3†At€џ$3†At€џ& Й†At3†A(0†At3†At€€џџ"3†At€€џџ& Й†At3†A(0†AtCBCB2†AtKO€T:))*O€TO€“)&&3†At2†AtK:-).&3†At5†AtK)-Й†AtЙ§ІA“ "8/SO€”Йљ†C‘Й†At3†A(& Й†At3†A(0†At,„!2„!KO€•T:.)/O€–T)џOGTTOœO€—M9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t є ѓ ђэ ь ыч фdd†tтcLSF†€рout†€t щn†tшk†tъftmp†t  / . -* ) (&%#"!         џ §d†€ћNLSF†€љa†€ Ptmp†tQ†$Ё€$P†$Ё€$i†tf_int†t maxabs†tidx†tabsval†tcos_LSF_Q20†@Ё€P a_int32†@Ё€P cos_val†tdd†t f_frac†tk†tsc_Q16†t delta†tQtmp†t            ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Ђ Ѓ Є Љ Њ а ‚!Ц$Ч$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glc.cil$in.cil$ex&1.cil$syf .cil$dbž /2177 1284597037 100666 22268 ` џџL-e‘L8ўГ ЅйЋMЌ›жЖ"&SТмV -e‘LИU.drectveQ, .cil$fgј}@@.cil$gl€u@@.cil$inѕ @@.cil$exh=і @@.cil$syУ ^H@@.cil$db—!U@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_MA.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_MA.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2У2€ov|V €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_ma.cА ЁзяxBЁъиcгђУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШьSKP_Silk_MA‚€>€v'€#€Ђh– SKP_Silk_MA_Prediction‚€>€+*€6€{hЃ SKP_Silk_MA_Prediction_Q13‚€D€:0€Є €{hН SKP_Silk_LPC_analysis_filter‚€ъ€И6€ €€h Лsize_tu intptr_tt ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO$O€ O €ўO3 f0" D ЄBEOœO/SS&ьF-ъ-ш-ц-ф-т-рLOSO0O1O3&ю3†At2†AtK:ђ)ѓ&ю3†At5†AtK)ђЙю†AtЙшІA“ "8єSO4&№Йр†CЎ Йю†At3†A(0Є!­ 2†AtKO5&ёЙф†Cє3†A(0†AtЙ№†At,„!,†AtЙт†CЎ 3†A(0Є!­ ,„!,†At2†AtKO6&ёЙё†At3†At 3†At3†At 2†AtKO8&я3†At2†AtK:љ)њ&я3†At5†AtK)љЙя†AtЙъІA“ "8ћSO9Йф†CєЙя†At3†At3†A(Йф†CєЙя†At3†A(0†AtЙ№†At,„!,†AtЙт†CЎ Йя†At3†A(0Є!­ ,„!,†At2†AtKO:T:њ)ћO;Йф†CєЙъІA“ 3†At3†A(Й№†At,„!,†AtЙт†CЎ ЙъІA“ 3†A(0Є!­ ,„!,†At2†AtKO>Йц†C‘Йю†At3†A(Йё†At3†At€џ$3†At€џЙё†At3†At€€џџ"3†At€€џџЙё†AtCBCB,„!2„!KO?T:ѓ)єO@T)эOGTTO€ O €ўO3 f0" D ЄBEOœOJSS&– F--- - - -LOSOKOLOMOOЙІA“ 3†At 3†At8Й †CЎ ,†At3†At 3†At8SOV&3†At2†AtK:)&3†At5†AtK)Й†AtЙІA“ "8SOW&Й†CЎ Й†At3†A(0Є!­ 2†AtKOX&Й†At3†At Й †Cє3†A(0†At2†AtKOY&Й†At3†At 3†At3†At 2†AtKO[&3†At2†AtK:) &3†At†AtK)Й†AtЙІA“ 3†At"8!SO\&Й †CЎ Й†At3†A(,†Cє0†At2†AtKO]Й †CєЙ†At3†A(Й †CєЙ†At3†At3†A(0†AtЙ†At,„!,†AtЙ†At,„!,†At2†AtKO^Й †CєЙ†At3†At3†A(Й †CєЙ†At3†At3†A(0†AtЙ†At,„!,†AtЙ†At3†At 2†AtKO_T: )!O`&Й †CЎ Й†At3†A(,†Cє0†At2†AtKOaЙ †CєЙІA“ 3†At3†A(Й †CєЙІA“ 3†At3†A(0†AtЙ†At,„!,†AtЙ†At,„!,†At2†AtKObЙ †CєЙІA“ 3†At3†A(Й†At,„!,†AtЙ†At3†At 2†AtKOeЙ †C‘Й†At3†A(Й†At3†At€џ$3†At€џЙ†At3†At€€џџ"3†At€€џџЙ†AtCBCB,„!2„!KOfT:)OgT:3)SOi&3†At2†AtK:4)5&3†At5†AtK)4Й†AtЙІA“ "86SOj&Й†CЎ Й†At3†A(0Є!­ 2†AtKOk&Й†At3†At Й †Cє3†A(0†At2†AtKOl&Й†At3†At 3†At3†At 2†AtKOn&3†At2†AtK:7)8&3†At5†AtK)7Й†AtЙІA“ 3†At"89SOoЙ †CєЙ†At3†A(Й †CєЙ†At3†At3†A(0†AtЙ†At,„!,†AtЙ †CЎ Й†At3†A(0Є!­ ,„!,†At2†AtKOpT:8)9OqЙ †CєЙІA“ 3†At3†A(Й†At,„!,†AtЙ †CЎ ЙІA“ 3†At3†A(0Є!­ ,„!,†At2†AtKOtЙ †C‘Й†At3†A(Й†At3†At€џ$3†At€џЙ†At3†At€€џџ"3†At€€џџЙ†AtCBCB,„!2„!KOuT:5)6OvT)3OwT)OGTTO€ O €ўO3 f0" D ЄBEOœO€SS&Ѓ F-O-M-K-I-G-ELOSO€‚O€ƒO€…ЙO†At3†At 3†At8YЙG†CЎ ,†At3†At 3†At8YSO€Œ&R3†At2†AtK:Z)[&R3†At5†AtK)ZЙR†AtЙM†At"8\SO€&TЙE†CЎ ЙR†At3†A(0Є!­ 2†AtKO€Ž&UЙT†At3†At ЙI†Cє3†A(0†At2†AtKO€&UЙU†At3†At 3†At3†At 2†AtKO€‘&S3†At2†AtK:])^&S3†At†AtK)]ЙS†AtЙO†At3†At"8_SO€’&VЙG†CЎ ЙS†At3†A(,†Cє0†At2†AtKO€“ЙI†CєЙS†At3†A(ЙI†CєЙS†At3†At3†A(0†AtЙT†At,„!,†AtЙV†At,„!,†At2†AtKO€”ЙI†CєЙS†At3†At3†A(ЙI†CєЙS†At3†At3†A(0†AtЙT†At,„!,†AtЙV†At3†At 2†AtKO€•T:^)_O€–&VЙG†CЎ ЙS†At3†A(,†Cє0†At2†AtKO€—ЙI†CєЙO†At3†At3†A(ЙI†CєЙO†At3†At3†A(0†AtЙT†At,„!,†AtЙV†At,„!,†At2†AtKO€˜ЙI†CєЙO†At3†At3†A(ЙT†At,„!,†AtЙV†At3†At 2†AtKO€›ЙK†C‘ЙR†At3†A(ЙU†At3†At€џ$3†At€џЙU†At3†At€€џџ"3†At€€џџЙU†AtCBCB,„!2„!KO€œT:[)\O€T:q)YSO€Ÿ&R3†At2†AtK:r)s&R3†At5†AtK)rЙR†AtЙM†At"8tSO€ &TЙE†CЎ ЙR†At3†A(0Є!­ 2†AtKO€Ё&UЙT†At3†At ЙI†Cє3†A(0†At2†AtKO€Ђ&UЙU†At3†At 3†At3†At 2†AtKO€Є&S3†At2†AtK:u)v&S3†At5†AtK)uЙS†AtЙO†At3†At"8wSO€ЅЙI†CєЙS†At3†A(ЙI†CєЙS†At3†At3†A(0†AtЙT†At,„!,†AtЙG†CЎ ЙS†At3†A(0Є!­ ,„!,†At2†AtKO€ІT:v)wO€ЇЙI†CєЙO†At3†At3†A(ЙT†At,„!,†AtЙG†CЎ ЙO†At3†At3†A(0Є!­ ,„!,†At2†AtKO€ЊЙK†C‘ЙR†At3†A(ЙU†At3†At€џ$3†At€џЙU†At3†At€€џџ"3†At€€џџЙU†AtCBCB,„!2„!KO€ЋT:s)tO€ЌT)qO€­T)QOGTTO€ O €ўO3 f0" D ЄBEOœO€ИSS&Н F--‹-‰-‡-…-ƒLOSO€Й&“ЙІA“ 3†At 2†AtKO€КO€ЛO€Н3‚KO€Р&3†At2†AtK:›)œ&3†At5†AtK)›Й†AtЙ“†At"8SO€С&’3†AtЙ†At,„!,†At2†AtKO€Т&•Й†At3†A(Й…†CЎ Й’†At3†A(0Є!­ ,†At3†At€џџ Й…†CЎ Й’†At3†At3†A(0Є!­ ,†At3†At 2†AtKO€УT:œ)O€Ц&3†At2†AtK:Є)Ѕ&3†At5†AtK)ЄЙ†AtЙ‹ІA“ "8ІSO€Ч&˜Й‡†C‘3†A(0„!2„!KO€Ш&–3†At2†AtKO€Щ&‘3†At2†AtK:Ї)Ј&‘3†At5†AtK)ЇЙ‘†AtЙ“†At3†At"8ЉSO€Ъ&’3†AtЙ‘†At,„!,†At3†At2†AtKO€Ь&”&•Й‘†At3†A(0†At2†AtKO€Э&™Й‡†C‘Й’†At3†A(0„!2„!KO€ЮЙ‡†C‘Й’†At3†A(ɘ„!2„!KO€Я&–Й–†Atɘ„!,†AtЙ”†At,„!,†At2†AtKO€а&–Й–†AtЙ™„!,†AtЙ”†At3†At 2†AtKO€б&˜Й‡†C‘Й’†At3†At3†A(0„!2„!KO€вЙ‡†C‘Й’†At3†At3†A(Й™„!2„!KO€гT:Ј)ЉO€ж&”&•Й“†At3†At3†A(0†At2†AtKO€з&™Й‡†C‘ЙІA“ 3†At3†A(0„!2„!KO€иЙ‡†C‘ЙІA“ 3†At3†A(ɘ„!2„!KO€й&–Й–†Atɘ„!,†AtЙ”†At,„!,†At2†AtKO€к&–Й–†AtЙ™„!,†AtЙ”†At3†At 2†AtKO€н&–Йƒ†CЎ Й†At3†A(0Є!­ ,†At3†At Й–†At3†Bu€€ 3†AtЙƒ†CЎ Й†At3†A(0Є!­ ,†At3†At Й–†At3†Bu€€ 3†Bu€€ 3†At€€Йƒ†CЎ Й†At3†A(0Є!­ ,†At3†At Й–†AtCBЙƒ†CЎ Й†At3†A(0Є!­ ,†At3†At 3†Bu€€ Й–†At 3†Bu€€ 3†At€џџџЙƒ†CЎ Й†At3†A(0Є!­ ,†At3†At Й–†AtCBCB2†AtKO€р&—Й–†At3†At 3†At3†At 2†AtKO€уЙ‰†C‘Й†At3†A(Й—†At3†At€џ$3†At€џЙ—†At3†At€€џџ"3†At€€џџЙ—†AtCBCB,„!2„!KO€цЙ‡†C‘3†A(Йƒ†CЎ Й†At3†A(0Є!­ 2„!KO€чT:Ѕ)ІO€шT)OGTTOœO€щM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t ћ њ љє ѓ ђэ ъorder†€шlen†€цout†€фS†€tтB†€.рin†€. ёout32†tюk†t№in16†tяd†t  9 8 76 5 43!      order†€len†€ out†€ S†€t B†€.in†€. out32†tB32†tk†tin16†td†t      w v ut s rq_ ^ ]\ [ ZYQ Oorder†tMlen†tKout†€IS†€tGB†€.Ein†€. Uout32†tVB32†tRk†tTin16†tSd†t      Љ Ј ЇІ Ѕ Є œ › Order†€‹len†€‰out†€‡S†€…B†€.ƒin†€. –out32_Q12†t—out32†t”Btmp†t“Order_half†t™SB„•B_align_Q12† €п’idx†t˜SA„k†t‘j†t     ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ Љ ­ Ў О"п#ъ#Ф$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fgј.cil$gl€.cil$in.cil$exh=.cil$syУ .cil$db—/2201 1284597037 100666 18824 ` џџL-e‘L8ўГ ЅйЋMЌ›жЖ"&SТhI -e‘LDH.drectveQ, .cil$fg}@@.cil$glъ•@@.cil$inF@@.cil$exC,Х@@.cil$sy.?@@.cil$db6G@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_LTP_scale_ctrl_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_LTP_scale_ctrl_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2Z2€ovцV €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_ltp_scale_ctrl_fix.cGb~УсКKRэYxпvˆ"Ф SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ SKP_min_int†€€­€aШSKP_max_int†€€е€Ш=SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШbSKP_Silk_LTP_scale_ctrl_FIX‚€€(€#€Шhќ ѓH ѓSKP_Silk_encoder_control_FIX€ў ЬSKP_Silk_encoder_state_FIX€М ЦSKP_Silk_predict_state_FIX€о ЗSKP_Silk_prefilter_state_FIX€з БSKP_Silk_shape_state_FIX€в aSKP_Silk_encoder_control€  %SKP_Silk_encoder_state€ё SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_LP_state€  SKP_Silk_detect_SWB_state€ SKP_Silk_range_coder_state€ž јSKP_Silk_VAD_state€ ѓSKP_SILK_LBRR_struct€ф чSKP_Silk_nsq_state€к SKP_Silk_range_coder_state€ž Кsize_tu ЖSKP_Silk_shape_state_FIX€в SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)ѓSKP_Silk_LTPScales_table_Q14„€ќ SKP_Silk_sigm_Q15†€АSA_Parameter€)† ХSKP_Silk_prefilter_state_FIX€з pSKP_Silk_encoder_control€  ђSKP_Silk_nsq_state€к strnlen†€ ђSKP_Silk_encoder_state_FIX€М ЫSKP_Silk_predict_state_FIX€оЎSA_Method€)†@ Лwchar_t!€ wcsnlen†€ SKP_Silk_VAD_state€H$LTPScaleThresholds_Q15„€€B SKP_Silk_encoder_control_FIX€ў SKP_Silk_LP_state€  `SKP_Silk_encoder_state€ё їSKP_SILK_LBRR_struct€ф $SKP_Silk_NLSF_CB_struct€– SKP_Silk_detect_SWB_state€ H€™y€ff€@€33€f&€š€3€Ь €= €š [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOO€ O €ўO3 f0" D ЄBEOœO+SS&bF-K-ILOSO,O-O0O1ЙI†C­!3†At€4Є'†Cє&Н†At€ 3†AtU†AtЙK†Cћ!3†At€t'†Cє0†AtЙI†C­!3†At€0Є'†Cє0†AtU†AtLЙI†C­!3†At€4Є'†Cє0†At3†At ЙI†C­!3†At€4Є'†Cє0†At3†At 2†AtKO3ЙI†C­!3†At€0Є'†CєЙK†Cћ!3†At€t'†Cє0†At2†AtKO6&PЙK†Cћ!3†At€t'†Cє0†At3†At ЙI†C­!3†At€4Є'†Cє0†At3†At 3†At 3†At3†At 2†AtKO7&Q&ќ Н†At€ЙP†At3†At`U†AtL2†AtKO:ЙK†Cћ!3†At\'†Cє3†At2†AtKO=&NЙI†C­!3†At€ф'†Cє0†At2†AtKO@ЙI†C­!3†At€и '†Cє0†At3†At8USOB&OЙI†C­!3†At€р'†Cє0†At3†At2†AtKOD&NЙO†At3†At†AtKOE&R&H&Н†At€ 3†At U†AtЙN†AtU†AtL3†A(0Є!­ 2†AtKOF&S&H&Н†At€ 3†At U†AtЙN†At3†AtU†AtL3†A(0Є!­ 2†AtKOHЙQ†AtЙR†At$8WSOJЙK†Cћ!3†At\'†Cє3†At2†AtKOKT:X)WЙQ†AtЙS†At$8YSOMЙK†Cћ!3†At\'†Cє3†At2†AtKONTOO)Y)XTOP)UЙK†Cћ!3†At€'†Cє&ѓЙK†Cћ!3†At\'†Cє0†At3†A(0Є!­ 2†AtKOQT)MOGTTOœORM   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t YXWUM KpsEncCtrl†€ћIpsEnc†€­ Qg_limit_Q15†tPg_out_Q5†tNround_loss†tSthrld2_Q15†tRthrld1_Q15†tOframes_per_packet†t     ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёз ž!о –!Ž!›!Ќ!М!Ў!ё!Џ!в!А!з!Б!о!В!к!Д!Š"р!ф!ь!Œ"э!Ž"ю!ˆ"њ!ў!4!tuєƒ ˆ ‹ Œ Ž  ‘ Ÿ   Љ ­ з о Ž!–!›!ž!Ќ!­!Ў!Џ!А!Б!В!Д!М!в!з!к!о!р!ф!ь!э!ю!ё!њ!ћ!ў!‚"ˆ"Š"Œ"Ž"џ"Т$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glъ.cil$inF.cil$exC,.cil$sy..cil$db/2241 1284597037 100666 18124 ` џџL-e‘L8ўГ ЅйЋMЌ›жЖ"&SТЌF -e‘LˆE.drectveQ, .cil$fg"}@@.cil$gl Ÿ@@.cil$inГ @@.cil$exї-Д @@.cil$syH Ћ;@@.cil$db•ѓD@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_LTP_analysis_filter_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_LTP_analysis_filter_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2ƒ2€ov V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_ltp_analysis_filter_fix.cѕ…PС}>*}ЮkvБФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШ’SKP_Silk_LTP_analysis_filter_FIX‚€€(€#€Qh Кsize_tu ЃSA_AttrTarget€)АSA_Parameter€)† strnlen†€ЎSA_Method€)†@ Лwchar_t!€ wcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOO€ O €ўO3 f0" D ЄBEOœO(SS&’F-V-T-R-P-N-L-J-HLOSO)O*O+O,O-O/&YЙJ†CЎ 2†CЎ KO0&\ЙH†C‘2†C‘KO1&]3†At2†AtK:a)b&]3†At5†AtK)aЙ]†At3†At"8cSO3&ZЙY†CЎ ЙN†C” Й]†At3†A(0ІA“ 3†A2†CЎ KO4&^3†At2†AtK:d)e&^3†At5†AtK)dЙ^†At3†At"8fSO5&[Й^†At3†A(ЙL†CЎ Й]†At3†AtЙ^†At3†A(0Є!­ 2„!KO6T:e)fO9&^3†At2†AtK:g)h&^3†At5†AtK)gЙ^†AtЙTІA“ ЙVІA“ "8iSO:Й\†C‘Й^†At3†A(ЙY†CЎ Й^†At3†A(0Є!­ 2„!KO=&`ЙZ†CЎ 3†A(0Є!­ ,„!,†At&[3†A(0„!,†At2†AtKO>&_3†At2†AtK:n)o&_3†At5†AtK)nЙ_†At3†At"8pSO?&`Й`†AtЙZ†CЎ 3†AtЙ_†At3†A(0Є!­ ,„!,†At&[Й_†At3†A(0„!,†At2†AtKO@T:o)pOA&`Й`†At3†At 3†At3†At 2†AtKODЙ\†C‘Й^†At3†A(ЙY†CЎ Й^†At3†A(0Є!­ ,†AtЙ`†At3†At€џ$3†At€џЙY†CЎ Й^†At3†A(0Є!­ ,†AtЙ`†At3†At€€џџ"3†At€€џџЙY†CЎ Й^†At3†A(0Є!­ ,†AtЙ`†AtCBCB,„!2„!KOGЙRІA“ 3†At8{SOHЙ\†C‘Й^†At3†A(ЙP†C” Й]†At3†A(0ІA“ 3†At Й\†C‘Й^†At3†A(0„!,†AtЙP†C” Й]†At3†A(0ІA“ 3†At€џџ Й\†C‘Й^†At3†A(0„!,†At3†At 2„!KOIT:€){SOJЙ\†C‘Й^†At3†A(ЙP†C” Й]†At3†A(0ІA“ ,ˆЙ\†C‘Й^†At3†A(0„!,ˆЙRІA“ ,„!2„!KOKT)€OM&Z3†A5†CЎ KONT:h)iOQ&\ЙTІA“ ЙVІA“ 3†A†C‘KOR&YЙTІA“ 3†A†CЎ KOST:b)cOTT)XOGTTOœOVM   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t €{p o ni h gf e dc b aX Vpre_length†€Tsubfr_length†€RQxx†€PinvGains_Qxx†€NpitchL†€LLTPCoef_Q14†€.Jx†€.HLTP_res†€ \LTP_res_ptr†€[Btmp_Q14„ €—Zx_lag_ptr†€.`LTP_est†t^i†t]k†tYx_ptr†€._j†t        ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Љ ­ Ў —!–$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg".cil$gl .cil$in.cil$exї-.cil$syH .cil$db•/2286 1284597037 100666 16077 ` џџL-e‘L8ўГ ЅйЋMЌ›жЖ"&SТ­> -e‘L‰=.drectveQ, .cil$fg}@@.cil$glЩ‹@@.cil$in T @@.cil$ex'^@@.cil$sy#п5@@.cil$db‡=@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_LSF_cos_table.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_LSF_cos_table.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2р2€ovХV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lsf_cos_table.cuN=аKЎh—*1ѕVhœУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШ Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t![SKP_Silk_LSFCosTab_FIX_Q12†€€€*Њwcsnlen†€ [€ €ў€і€ъ€и€Т€Ј€ˆ€b€:€ €и€ €b€"€м€€B€ю€–€:€и€r€ €œ€*€Д€:€М€<€Ж€.€ €€~€ш€N€А€€n€Ш€€t€Ц€€d€Ў €ј €@ €„ €Ш € €J €Š€Ц€€>€x€В€ъ€"€Z€’€Ъ€6џџџ€nўџџ€І§џџ€оќџџ€ќџџ€Nћџџ€ˆњџџ€Тљџџ€ўјџџ€:јџџ€vїџџ€Жіџџ€іѕџџ€8ѕџџ€|єџџ€Рѓџџ€ѓџџ€Rђџџ€œёџџ€ъ№џџ€:№џџ€Œяџџ€тюџџ€8юџџ€’эџџ€№ьџџ€Pьџџ€Выџџ€ыџџ€‚ъџџ€№щџџ€`щџџ€вшџџ€Jшџџ€Фчџџ€Dчџџ€Ццџџ€Lцџџ€жхџџ€dхџџ€іфџџ€Žфџџ€(фџџ€Цуџџ€jуџџ€уџџ€Отџџ€pтџџ€$тџџ€осџџ€žсџџ€`сџџ€(сџџ€ірџџ€Црџџ€žрџџ€xрџџ€Xрџџ€>рџџ€(рџџ€рџџ€ рџџ€рџџ€рџџ[€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœOOœOBSTM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ Љ Њ @comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glЩ.cil$in .cil$ex'.cil$sy#.cil$db‡ /2321 1284597037 100666 19195 ` џџL-e‘L8ўГ ЅйЋMЌ›жЖ"&SТлJ -e‘LЗI.drectveQ, .cil$fg}@@.cil$glп›@@.cil$inz @@.cil$ex6{ @@.cil$sy‹š@@@.cil$db’%I@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_LPC_synthesis_order16.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_LPC_synthesis_order16.obj-FdRelease\vc100.pdb-errorreport:prompt†1j292€ovлV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lpc_synthesis_order16.c:ў|ЅžusUЧП‚|“5]FУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZША SKP_Silk_LPC_synthesis_order16‚€†€v'€#€’h Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO"O€ O €ўO3 f0" D ЄBEOœO,SS&А F-ъ-ш-ц-ф-т-рLOSO-O.O1&э3†At2†AtK:є)ѕ&э3†At5†AtK)єЙэ†At3†At"8іSO2&ёЙэ†At3†A(Йт†CЎ 3†AtЙэ†At3†A(0Є!­ ,†At3†At€џџ Йт†CЎ 3†AtЙэ†At3†At3†A(0Є!­ ,†At3†At 2†AtKO3T:ѕ)іO:&э3†At2†AtK:љ)њ&э3†At5†AtK)љЙэ†AtЙъІA“ "8ћSO=&юЙц†Cє3†A<(0†At2†AtKO>&№&ё3†A(0†At2†AtKO?&яЙц†Cє3†A8(0†At2†AtKO@Йц†Cє3†A8(Йю†At2†AtKOA&ђЙю†At3†At Й№†At,„!,†AtЙю†At3†At€џџ Й№†At,„!,†At3†At 2†AtKOB&ђЙђ†AtЙя†At3†At Й№†At3†At Йя†At3†At€џџ Й№†At3†At 3†At 2†AtKOC&юЙц†Cє3†A4(0†At2†AtKODЙц†Cє3†A4(Йя†At2†AtKOG&№&ё3†A(0†At2†AtKOH&яЙц†Cє3†A0(0†At2†AtKOIЙц†Cє3†A0(Йю†At2†AtKOJ&ђЙђ†AtЙю†At3†At Й№†At,„!,†AtЙю†At3†At€џџ Й№†At,„!,†At3†At 2†AtKOK&ђЙђ†AtЙя†At3†At Й№†At3†At Йя†At3†At€џџ Й№†At3†At 3†At 2†AtKOL&юЙц†Cє3†A,(0†At2†AtKOMЙц†Cє3†A,(Йя†At2†AtKOO&№&ё3†A(0†At2†AtKOP&яЙц†Cє3†A((0†At2†AtKOQЙц†Cє3†A((Йю†At2†AtKOR&ђЙђ†AtЙю†At3†At Й№†At,„!,†AtЙю†At3†At€џџ Й№†At,„!,†At3†At 2†AtKOS&ђЙђ†AtЙя†At3†At Й№†At3†At Йя†At3†At€џџ Й№†At3†At 3†At 2†AtKOT&юЙц†Cє3†A$(0†At2†AtKOUЙц†Cє3†A$(Йя†At2†AtKOW&№&ё3†A (0†At2†AtKOX&яЙц†Cє3†A (0†At2†AtKOYЙц†Cє3†A (Йю†At2†AtKOZ&ђЙђ†AtЙю†At3†At Й№†At,„!,†AtЙю†At3†At€џџ Й№†At,„!,†At3†At 2†AtKO[&ђЙђ†AtЙя†At3†At Й№†At3†At Йя†At3†At€џџ Й№†At3†At 3†At 2†AtKO\&юЙц†Cє3†A(0†At2†AtKO]Йц†Cє3†A(Йя†At2†AtKO_&№&ё3†A(0†At2†AtKO`&яЙц†Cє3†A(0†At2†AtKOaЙц†Cє3†A(Йю†At2†AtKOb&ђЙђ†AtЙю†At3†At Й№†At,„!,†AtЙю†At3†At€џџ Й№†At,„!,†At3†At 2†AtKOc&ђЙђ†AtЙя†At3†At Й№†At3†At Йя†At3†At€џџ Й№†At3†At 3†At 2†AtKOd&юЙц†Cє3†A(0†At2†AtKOeЙц†Cє3†A(Йя†At2†AtKOg&№&ё3†A(0†At2†AtKOh&яЙц†Cє3†A(0†At2†AtKOiЙц†Cє3†A(Йю†At2†AtKOj&ђЙђ†AtЙю†At3†At Й№†At,„!,†AtЙю†At3†At€џџ Й№†At,„!,†At3†At 2†AtKOk&ђЙђ†AtЙя†At3†At Й№†At3†At Йя†At3†At€џџ Й№†At3†At 3†At 2†AtKOl&юЙц†Cє3†A (0†At2†AtKOmЙц†Cє3†A (Йя†At2†AtKOo&№&ё3†A(0†At2†AtKOp&яЙц†Cє3†A(0†At2†AtKOqЙц†Cє3†A(Йю†At2†AtKOr&ђЙђ†AtЙю†At3†At Й№†At,„!,†AtЙю†At3†At€џџ Й№†At,„!,†At3†At 2†AtKOs&ђЙђ†AtЙя†At3†At Й№†At3†At Йя†At3†At€џџ Й№†At3†At 3†At 2†AtKOt&юЙц†Cє3†A(0†At2†AtKOuЙц†Cє3†A(Йя†At2†AtKOx&№&ё3†A(0†At2†AtKOy&яЙц†Cє3†A(0†At2†AtKOzЙц†Cє3†A(Йю†At2†AtKO{&ђЙђ†AtЙю†At3†At Й№†At,„!,†AtЙю†At3†At€џџ Й№†At,„!,†At3†At 2†AtKO|&ђЙђ†AtЙя†At3†At Й№†At3†At Йя†At3†At€џџ Й№†At3†At 3†At 2†AtKO€€&ђЙђ†AtЙфІA“ 3†At Йр†CЎ Йэ†At3†A(0Є!­ ,„!,†AtЙфІA“ 3†At€џџ Йр†CЎ Йэ†At3†A(0Є!­ ,„!,†At3†At 3†Bu€€ 3†AtЙђ†AtЙфІA“ 3†At Йр†CЎ Йэ†At3†A(0Є!­ ,„!,†AtЙфІA“ 3†At€џџ Йр†CЎ Йэ†At3†A(0Є!­ ,„!,†At3†At  3†Bu€€ 3†At 3†At€€Йђ†AtЙфІA“ 3†At Йр†CЎ Йэ†At3†A(0Є!­ ,„!,†AtЙфІA“ 3†At€џџ Йр†CЎ Йэ†At3†A(0Є!­ ,„!,†At3†At CBЙђ†AtЙфІA“ 3†At Йр†CЎ Йэ†At3†A(0Є!­ ,„!,†AtЙфІA“ 3†At€џџ Йр†CЎ Йэ†At3†A(0Є!­ ,„!,†At3†At  3†Bu€€ 3†At3†At€џџџЙђ†AtЙфІA“ 3†At Йр†CЎ Йэ†At3†A(0Є!­ ,„!,†AtЙфІA“ 3†At€џџ Йр†CЎ Йэ†At3†A(0Є!­ ,„!,†At3†At CBCB2†AtKO€ƒ&ѓЙђ†At3†At 3†At3†At 2†AtKO€†Йш†C‘Йэ†At3†A(Йѓ†At3†At€џ$3†At€џЙѓ†At3†At€€џџ"3†At€€џџЙѓ†AtCBCB,„!2„!KO€‰Йц†Cє3†A<(Йђ†At3†At€џџџ$3†At€џџџЙђ†At3†At€ј"3†At€јЙђ†AtCBCB3†At 2†AtKO€ŠT:њ)ћO€‹T)ьOGTTOœO€ŽM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t ћ њ љі ѕ єь ъlen†€шout†€цS†€tфGain_Q26†€тA_Q12†€.рin†€. ѓout32†tђout32_Q10†tёA_align_Q12† €пяSB†t№Atmp†tюSA†tэk†t    ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ Љ ­ Ў †!п#@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glп.cil$in.cil$ex6.cil$sy‹.cil$db’ /2364 1284597037 100666 17738 ` џџL-e‘L8ўГ ЅйЋMЌ›жЖ"&SТ*E -e‘LD.drectveQ, .cil$fg}@@.cil$glн™@@.cil$inv @@.cil$ex0w @@.cil$syќw:@@.cil$db“sC@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_LPC_synthesis_filter.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_LPC_synthesis_filter.obj-FdRelease\vc100.pdb-errorreport:prompt†1j222€ovйV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lpc_synthesis_filter.cЁд]јќИžsЈ”ОŸ?У SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШЬ SKP_Silk_LPC_synthesis_filter‚€‰€v'€#€h Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO"O€ O €ўO3 f0" D ЄBEOœO.SS&Ь F-ь-ъ-ш-ц-ф-т-рLOSO/&ђЙьІA“ 3†At 2†AtKO0O33‚KO6&я3†At2†AtK:њ)ћ&я3†At5†AtK)њЙя†AtЙђ†At"8ќSO7&ё3†AtЙя†At,„!,†At2†AtKO8&іЙя†At3†A(Йт†CЎ Йё†At3†A(0Є!­ ,†At3†At€џџ Йт†CЎ Йё†At3†At3†A(0Є!­ ,†At3†At 2†AtKO9T:ћ)ќO<&я3†At2†AtK:)&я3†At5†AtK)Йя†AtЙъІA“ "8SO=&ѓЙц†CєЙьІA“ 3†At3†A(0†At2†AtKO>&ї3†At2†AtKO?&№3†At2†AtK:)&№3†At5†AtK)Й№†AtЙђ†At3†At"8SO@&ё3†AtЙ№†At,„!,†At3†At2†AtKOF&ѕ&іЙ№†At3†A(0†At2†AtKOG&єЙц†CєЙьІA“ 3†AtЙё†At3†A(0†At2†AtKOHЙц†CєЙьІA“ 3†AtЙё†At3†A(Йѓ†At2†AtKOI&їЙї†AtЙѓ†At3†At Йѕ†At,„!,†AtЙѓ†At3†At€џџ Йѕ†At,„!,†At3†At 2†AtKOJ&їЙї†AtЙє†At3†At Йѕ†At3†At Йє†At3†At€џџ Йѕ†At3†At 3†At 2†AtKOK&ѓЙц†CєЙьІA“ 3†AtЙё†At3†A(0†At2†AtKOLЙц†CєЙьІA“ 3†AtЙё†At3†A(Йє†At2†AtKOMT:)OP&ѕ&іЙђ†At3†At3†A(0†At2†AtKOQ&єЙц†Cє3†A(0†At2†AtKORЙц†Cє3†A(Йѓ†At2†AtKOS&їЙї†AtЙѓ†At3†At Йѕ†At,„!,†AtЙѓ†At3†At€џџ Йѕ†At,„!,†At3†At 2†AtKOT&їЙї†AtЙє†At3†At Йѕ†At3†At Йє†At3†At€џџ Йѕ†At3†At 3†At 2†AtKOW&їЙї†AtЙфІA“ 3†At Йр†CЎ Йя†At3†A(0Є!­ ,„!,†AtЙфІA“ 3†At€џџ Йр†CЎ Йя†At3†A(0Є!­ ,„!,†At3†At 3†Bu€€ 3†AtЙї†AtЙфІA“ 3†At Йр†CЎ Йя†At3†A(0Є!­ ,„!,†AtЙфІA“ 3†At€џџ Йр†CЎ Йя†At3†A(0Є!­ ,„!,†At3†At  3†Bu€€ 3†At 3†At€€Йї†AtЙфІA“ 3†At Йр†CЎ Йя†At3†A(0Є!­ ,„!,†AtЙфІA“ 3†At€џџ Йр†CЎ Йя†At3†A(0Є!­ ,„!,†At3†At CBЙї†AtЙфІA“ 3†At Йр†CЎ Йя†At3†A(0Є!­ ,„!,†AtЙфІA“ 3†At€џџ Йр†CЎ Йя†At3†A(0Є!­ ,„!,†At3†At  3†Bu€€ 3†At3†At€џџџЙї†AtЙфІA“ 3†At Йр†CЎ Йя†At3†A(0Є!­ ,„!,†AtЙфІA“ 3†At€џџ Йр†CЎ Йя†At3†A(0Є!­ ,„!,†At3†At CBCB2†AtKOZ&јЙї†At3†At 3†At3†At 2†AtKO]Йш†C‘Йя†At3†A(Йј†At3†At€џ$3†At€џЙј†At3†At€€џџ"3†At€€џџЙј†AtCBCB,„!2„!KO`Йц†CєЙьІA“ 3†At3†A(Йї†At3†At€џџџ$3†At€џџџЙї†At3†At€ј"3†At€јЙї†AtCBCB3†At 2†AtKOaT:)ObT)юOGTTOœOcM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t     ќ ћ њю ьOrder†€ъlen†€шout†€цS†€tфGain_Q26†€тA_Q12†€.рin†€. јout32†tїout32_Q10†tіA_align_Q12† €пђOrder_half†tєSB†tёidx†tѕAtmp†tѓSA†tяk†t№j†t     ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ Љ ­ Ў ‰!п#@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glн.cil$in.cil$ex0.cil$syќ.cil$db“/2406 1284597037 100666 17845 ` џџL-e‘L8ўГ ЅйЋMЌ›жЖ"&SТ•E -e‘LqD.drectveQ, .cil$fg}@@.cil$gl‹@@.cil$in @@.cil$exщ. @@.cil$syв :@@.cil$db›жC@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_LPC_stabilize.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_LPC_stabilize.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2(2€ov‹V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іkžc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lpc_stabilize.cЗt8Йн9‹‡0$(ѓМc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Лj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlУ SKP_Silk_CLZ16†€ €” |€‡Ше SKP_Silk_CLZ32†€€м€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ђ€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€м €‚€ZШшSKP_Silk_LPC_stabilize‚€A€„'€#€ъhг к с dSKP_Silk_LPC_fit‚€A€n+€‰€бhк  Кsize_tuг SKP_Silk_bwexpander‚€T ЃSA_AttrTarget€)с SKP_Silk_LPC_inverse_pred_gain†€>АSA_Parameter€)†3strnlen†€к SKP_Silk_bwexpander_32‚€"ЎSA_Method€)†@ Лwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕO#OžOOЗOžOOЕO\OœOOЛOOЕOЛO&OМOOЗOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЛO'OрOOЗOрOOсOOЗOсOOрOOЛO(OЕ OOЕOЕ O+OЛO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЛO+O€ O €ўO3 f0" D ЄBEOЛO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЛO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЛO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЛO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЛO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЛO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЛO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЛO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЛO€OœOO€ O €ўO3 f0" D ЄBEOœO(SS&шF-ц-ф-т-рLOSO)O*&ю3†At2†AtKO+O-&к Н‚€#ЙфІA“ U†AtЙцІA“ UІA“ Йт†CєU†CєLKO3)ё3†At8ђSO5&ъ3†At€€2†AtKO6&э3†At2†AtK:є)ѕ&э3†At5†AtK)єЙэ†AtЙцІA“ "8іSO7&ыЙт†CєЙэ†At3†A(0†At3†At$Йт†CєЙэ†At3†A(0†AtЙт†CєЙэ†At3†A(0†AtCB2†AtKO8Йы†AtЙъ†At$8їSO9&ъЙы†At2†AtKO:&юЙэ†At2†AtKO;TO<)їT:ѕ)іO>Йъ†At3†At€№џ#8љSO@&ь3†At€џџџЙъ†At3†At 2†AtKOA&ь3†At€Йь†At2†AtKOB&ьЙь†AtЙю†At3†At2†AtKOC&ь3†At€Йь†At2†AtKOD&ьЙь†At3†At 3†At€\Йь†At3†At€џџ 3†At€\3†At 3†At 2†AtKOE&к Н‚€#Йь†AtU†AtЙцІA“ UІA“ Йт†CєU†CєLKOFT:)љSOG:ђOHT)OIT:ё)ђOL&э3†At2†AtK:)&э3†At5†AtK)Йэ†AtЙцІA“ "8SOMЙр†C‘Йэ†At3†A(Йт†CєЙэ†At3†A(0†At3†At 3†At3†At ,„!2„!KONT:)OS)&с Н†At€?ЙцІA“ UІA“ Йр†C‘U†CЎ &яU†CєL3†At8SOT&г Н‚€t3†At€;џU†AtЙцІA“ UІA“ Йр†C‘U†C‘LKOUT:)OVT)щOGTTO€ O €ўO3 f0" D ЄBEOœO^SS&dF-- - -LOSO_&3†At2†AtKO`Ob&3†AtЙ ІA“ 2†AtKOh)3†At8SOj&3†At€€2†AtKOk&3†At2†AtK:)&3†At5†AtK)Й†AtЙІA“ "8SOl&Й †CєЙ†At3†A(0†At3†At$Й †CєЙ†At3†A(0†AtЙ †CєЙ†At3†A(0†AtCB2†AtKOmЙ†AtЙ†At$8SOn&Й†At2†AtKOo&Й†At2†AtKOpTOq)T:)Os&Й†AtЙ†At 2†AtKOtЙ†At3†At€џ#8SOvOw&3†At€Оџ3†At€я?Й†At3†At€џЙ†AtЙ†At3†At3†At 2†AtKOx&к Н‚€#Й†AtU†AtЙІA“ UІA“ Й †CєU†CєLKOyT:!)SOz:O{T)!O|T:)O3‚KO€€3‚KO€&3†At2†AtK:$)%&3†At5†AtK)$Й†AtЙІA“ "8&SO€‚Й†C‘Й†At3†A(Й†At3†AtЙ †CєЙ†At3†A(0†At3†At Й †CєЙ†At3†A(0†At3†At Й †CєЙ†At3†A(0†AtЙ†At3†At 3†At3†At CB,„!2„!KO€ƒT:%)&O€„T)OGTTOœO€…M9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t     љїі ѕ єђ ё щ цL†€фbwe_Q16†€тa_Q16†€tрa_Q12†€ эi†tъmaxabs†tюidx†tыabsval†tьsc_Q16†tяinvGain_Q30†!t       & % $!     L†€ QQ†€ a_Q24†€ta_QQ†€ i†tmaxabs†tabsval†tidx†tsc_Q16†trshift†t        ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ Ђ Ѓ Љ Ў д є"О$П$С$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl.cil$in.cil$exщ..cil$syв .cil$db› /2441 1284597037 100666 19009 ` џџL-e‘L8ўГ ЅйЋMЌ›жЖ"&SТ!J -e‘L§H.drectveQ, .cil$fg}@@.cil$glf“@@.cil$inљ @@.cil$exТ2њ @@.cil$syЋ М=@@.cil$db–gH@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_LPC_inv_pred_gain.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_LPC_inv_pred_gain.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2B2€ovbV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lpc_inv_pred_gain.cнш|}НтHь7XqхЈУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ‹SKP_INVERSE32_varQ†€;€€•€еШе ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШс SKP_Silk_LPC_inverse_pred_gain†€>€v'€#€Hhе ‹ш SKP_Silk_LPC_inverse_pred_gain_Q13†€>€Ю,€ч€Hhе ‹ Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO$O€ O €ўO3 f0" D ЄBEOœO/SS&с F-ф-т-рLOSO0O1O2O3O5&№&эЙфІA“ 3†At 3†A@(2†CєKO7&ч3†At2†AtK:ё)ђ&ч3†At5†AtK)ёЙч†AtЙфІA“ "8ѓSO8Й№†CєЙч†At3†A(Йт†CЎ Йч†At3†A(0Є!­ ,†At3†At 2†AtKO9T:ђ)ѓO;Йр†Cє3†At€@2†AtKO<&чЙфІA“ 3†At2†AtK:ѕ)і&ч3†At6†AtK)ѕЙч†At3†At$8їSO>Й№†CєЙч†At3†A(0†At3†At€№џ$9љЙ№†CєЙч†At3†A(0†At3†At€џџ"8ј)љSO?3†AtA†At:цO@TOC)ј&ъЙ№†CєЙч†At3†A(0†At3†At 2†AtKOF&ы3†At€џџџ?Йъ†At,ˆЙъ†At,ˆ3†At ,†At2†AtKOG3‚KOH3‚KOK&ь&‹Н†At€<3†At.UІA“ Йы†AtUІA“ L2†AtKOOЙр†CєЙр†Cє0†At,ˆЙы†At,ˆ3†At ,†At3†At 2†AtKOP3‚KOQ3‚KOT&яЙ№†Cє2†CєKOU&№&эЙч†At3†At 3†A@(2†CєKOX&щ&е Н†At€Йь†AtU†AtL3†At2†AtKOY&ьЙь†AtЙщ†At 2†AtKOZ&ш3†At2†AtK:)&ш3†At5†AtK)Йш†AtЙч†At"8SO[&юЙя†CєЙш†At3†A(0†AtЙя†CєЙч†AtЙш†At3†At3†A(0†At,ˆЙъ†At,ˆ3†At ,†At3†At 2†AtKO\Й№†CєЙш†At3†A(Йю†At,ˆЙь†At,ˆ3†At ,†At3†AtЙщ†At 2†AtKO]T:)O^T:і)їOaЙ№†Cє3†A(0†At3†At€№џ$9 Й№†Cє3†A(0†At3†At€џџ"8 ) SOb3†AtA†At:цOcTOf) &ъЙ№†Cє3†A(0†At3†At 2†AtKOi&ы3†At€џџџ?Йъ†At,ˆЙъ†At,ˆ3†At ,†At2†AtKOmЙр†CєЙр†Cє0†At,ˆЙы†At,ˆ3†At ,†At3†At 2†AtKOn3‚KOo3‚KOq3†AtA†At:цOrT)цOGTTO€ O €ўO3 f0" D ЄBEOœOzSS&ш F---LOSO{O|O}O~O€€&!&ЙІA“ 3†At 3†A@(2†CєKO€‚&3†At2†AtK:")#&3†At5†AtK)"Й†AtЙІA“ "8$SO€ƒЙ!†CєЙ†At3†A(Й†CЎ Й†At3†A(0Є!­ ,†At3†At 2†AtKO€„T:#)$O€†Й†Cє3†At€@2†AtKO€‡&ЙІA“ 3†At2†AtK:&)'&3†At6†AtK)&Й†At3†At$8(SO€‰Й!†CєЙ†At3†A(0†At3†At€№џ$9*Й!†CєЙ†At3†A(0†At3†At€џџ"8))*SO€Š3†AtA†At:O€‹TO€Ž))&Й!†CєЙ†At3†A(0†At3†At 2†AtKO€‘&3†At€џџџ?Й†At,ˆЙ†At,ˆ3†At ,†At2†AtKO€’3‚KO€“3‚KO€–&&‹Н†At€<3†At.UІA“ Й†AtUІA“ L2†AtKO€šЙ†CєЙ†Cє0†At,ˆЙ†At,ˆ3†At ,†At3†At 2†AtKO€›3‚KO€œ3‚KO€Ÿ& Й!†Cє2†CєKO€ &!&Й†At3†At 3†A@(2†CєKO€Ѓ&&е Н†At€Й†AtU†AtL3†At2†AtKO€Є&Й†AtЙ†At 2†AtKO€Ѕ&3†At2†AtK:3)4&3†At5†AtK)3Й†AtЙ†At"85SO€І&Й †CєЙ†At3†A(0†AtЙ †CєЙ†AtЙ†At3†At3†A(0†At,ˆЙ†At,ˆ3†At ,†At3†At 2†AtKO€ЇЙ!†CєЙ†At3†A(Й†At,ˆЙ†At,ˆ3†At ,†At3†AtЙ†At 2†AtKO€ЈT:4)5O€ЉT:')(O€ЌЙ!†Cє3†A(0†At3†At€№џ$9;Й!†Cє3†A(0†At3†At€џџ"8:);SO€­3†AtA†At:O€ЎTO€Б):&Й!†Cє3†A(0†At3†At 2†AtKO€Д&3†At€џџџ?Й†At,ˆЙ†At,ˆ3†At ,†At2†AtKO€ИЙ†CєЙ†Cє0†At,ˆЙ†At,ˆ3†At ,†At3†At 2†AtKO€Й3‚KO€К3‚KO€М3†AtA†At:O€НT)OGTTOœO€ОM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t     љјї і ѕѓ ђ ёц фorder†€тA_Q12†€.рinvGain_Q30†€t ьrc_mult2_Q16†tъrc_Q31†tяAold_QA†€tэAtmp_QA†€€Ё€=шn†tюtmp_QA†tщheadrm†t№Anew_QA†€tчk†tыrc_mult1_Q30†t     ;:5 4 3*)( ' &$ # " order†€A_Q13†€.invGain_Q30†€t rc_mult2_Q16†trc_Q31†t Aold_QA†€tAtmp_QA†€€Ё€=n†ttmp_QA†theadrm†t!Anew_QA†€tk†trc_mult1_Q30†t       ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ Љ ­ Ў Л$М$Н$О$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glf.cil$in.cil$exТ2.cil$syЋ .cil$db– /2480 1284597037 100666 20950 ` џџL-e‘L8ўГ ЅйЋMЌ›жЖ"&SТЖQ -e‘L’P.drectveQ, .cil$fg}@@.cil$gl •@@.cil$inВ@@.cil$exH7Г@@.cil$syц ћE@@.cil$dbБсO@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_LP_variable_cutoff.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_LP_variable_cutoff.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2І2€ov V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lp_variable_cutoff.c–uYl§%J‡,…| z5Ф SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШPSKP_Silk_LP_interpolate_filter_taps‚€5€Œ(€#€uШЭSKP_Silk_LP_variable_cutoff‚€Б€#2€Ђ€hŠ P SKP_Silk_LP_state€  Мsize_tuŠ SKP_Silk_biquad_alt‚€F ЃSA_AttrTarget€)SKP_Silk_Transition_LP_B_Q28†<!€7АSA_Parameter€)†4strnlen†€ЎSA_Method€)†@SKP_Silk_Transition_LP_A_Q28†(!€9 Нwchar_t!Ћwcsnlen†€ SKP_Silk_LP_state€  [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœO€ O €ўO3 f0" D ЄBEOœO.SS&PF-N-L-J-HLOSO/O1ЙLІA“ 3†At"8TSO2ЙNІA“ 3†At$8USO3ЙNІA“ ЙNІA“ 3†At€џ$3†At€џЙNІA“ 3†At€€џџ"3†At€€џџЙNІA“ CBCB8XSO5&R3†At2†AtK:Y)Z&R3†At5†AtK)YЙR†At3†At"8[SO6O:ЙH†CєЙR†At3†A(&ЙLІA“ 3†A (ЙR†At3†A(0ІA“ &ЙLІA“ 3†At3†A (ЙR†At3†A(0ІA“ &ЙLІA“ 3†A (ЙR†At3†A(0ІA“ 3†At ЙNІA“ ,„!,†At&ЙLІA“ 3†At3†A (ЙR†At3†A(0ІA“ &ЙLІA“ 3†A (ЙR†At3†A(0ІA“ 3†At€џџ ЙNІA“ ,„!,†At3†At 2†AtKO;T:Z)[O<&S3†At2†AtK:`)a&S3†At5†AtK)`ЙS†At3†At"8bSO=OAЙJ†CєЙS†At3†A(&ЙLІA“ 3†A(ЙS†At3†A(0ІA“ &ЙLІA“ 3†At3†A(ЙS†At3†A(0ІA“ &ЙLІA“ 3†A(ЙS†At3†A(0ІA“ 3†At ЙNІA“ ,„!,†At&ЙLІA“ 3†At3†A(ЙS†At3†A(0ІA“ &ЙLІA“ 3†A(ЙS†At3†A(0ІA“ 3†At€џџ ЙNІA“ ,„!,†At3†At 2†AtKOBT:a)bOCT:g)XЙNІA“ 3†At€€8hSOF&R3†At2†AtK:i)j&R3†At5†AtK)iЙR†At3†At"8kSOGOJЙH†CєЙR†At3†A(&ЙLІA“ 3†A (ЙR†At3†A(0ІA“ &ЙLІA“ 3†At3†A (ЙR†At3†A(0ІA“ 3†At 2†AtKOKT:j)kOL&S3†At2†AtK:l)m&S3†At5†AtK)lЙS†At3†At"8nSOMOPЙJ†CєЙS†At3†A(&ЙLІA“ 3†A(ЙS†At3†A(0ІA“ &ЙLІA“ 3†At3†A(ЙS†At3†A(0ІA“ 3†At 2†AtKOQT:m)nORT:o)hSOT3‚KOV&R3†At2†AtK:q)r&R3†At5†AtK)qЙR†At3†At"8sSOWO[ЙH†CєЙR†At3†A(&ЙLІA“ 3†At3†A (ЙR†At3†A(0ІA“ &ЙLІA“ 3†A (ЙR†At3†A(0ІA“ &ЙLІA“ 3†At3†A (ЙR†At3†A(0ІA“ 3†At 3†At€ЙNІA“ ,„!,†At&ЙLІA“ 3†A (ЙR†At3†A(0ІA“ &ЙLІA“ 3†At3†A (ЙR†At3†A(0ІA“ 3†At€џџ 3†At€ЙNІA“ ,„!,†At3†At 2†AtKO\T:r)sO]&S3†At2†AtK:x)y&S3†At5†AtK)xЙS†At3†At"8zSO^ObЙJ†CєЙS†At3†A(&ЙLІA“ 3†At3†A(ЙS†At3†A(0ІA“ &ЙLІA“ 3†A(ЙS†At3†A(0ІA“ &ЙLІA“ 3†At3†A(ЙS†At3†A(0ІA“ 3†At 3†At€ЙNІA“ ,„!,†At&ЙLІA“ 3†A(ЙS†At3†A(0ІA“ &ЙLІA“ 3†At3†A(ЙS†At3†A(0ІA“ 3†At€џџ 3†At€ЙNІA“ ,„!,†At3†At 2†AtKOcT:y)zOdT)o)gOeT:)USOf3†At€Ќ@†Cƒ3†Bu U†Bu&ЙLІA“ 3†A (U†CЫ ЙH†CєU†CƒLKOg3†At€Ќ@†Cƒ3†BuU†Bu&ЙLІA“ 3†A(U†CЫ ЙJ†CєU†CƒLKOhT)OiT:‚)TSOj3†At€Ќ@†Cƒ3†Bu U†Bu&3†A0(U†CЫ ЙH†CєU†CƒLKOk3†At€Ќ@†Cƒ3†BuU†Bu&3†A (U†CЫ ЙJ†CєU†CƒLKOlT)‚OmT)QOGTTO€ O €ўO3 f0" D ЄBEOœOySS&ЭF-‹-‰-‡-…LOSOzO{&3†At2†AtK&‘3†At2†AtKO}3‚KO~O3‚KO€‚Й…†CЏ#3†At'†Cє0†At3†At$8”SO€ƒЙ…†CЏ#3†At '†Cє0†At3†At8•SO€„Й…†CЏ#3†At'†Cє0†At3†At€€"8–SO€‡&Й…†CЏ#3†At'†Cє0†At3†At 2†AtKO€‹&‘Й†At3†At 2†AtKO€Œ&Й‘†At3†At †AtKO€Ž3‚KO€3‚KO€’&PН‚€6Й†AtUІA“ Й‘†AtUІA“ &U†Cє&ŽU†CєLKO€•Й…†CЏ#3†At'†Cє3†At5†AtKO€—T:™)–Й…†CЏ#3†At'†Cє0†At3†At€€8šSO€™&PН‚€63†AtUІA“ 3†AtUІA“ &U†Cє&ŽU†CєLKO€šTO€›)š)™T:›)•Й…†CЏ#3†At '†Cє0†At3†At8œSO€œЙ…†CЏ#3†At'†Cє0†At3†At€"8SO€Ÿ&3†At€Й…†CЏ#3†At'†Cє0†At3†At 2†AtKO€Ѓ&‘Й†At3†At 2†AtKO€Є&Й‘†At3†At †AtKO€І3‚KO€Ї3‚KO€Њ&PН‚€6Й†AtUІA“ Й‘†AtUІA“ &U†Cє&ŽU†CєLKO€­Й…†CЏ#3†At'†Cє3†At5†AtKO€ЏT: )Й…†CЏ#3†At'†Cє0†At3†At€8ЁSO€Б&PН‚€63†AtUІA“ 3†AtUІA“ &U†Cє&ŽU†CєLKO€ВTO€Г)Ё) TO€Д)œ)›TO€Ж)”Й…†CЏ#3†At'†Cє0†At3†At$8ЂSO€И3‚KO€Й&Š Н‚€)Й‹ІA“ UІA“ Й‡†C‘U†C‘Й…†CЏ#3†At'†CЮ!U†Cє&U†C” &ŽU†C” Й‰†CЎ U†CЎ LKO€КT:Є)ЂSO€М3†At€Ќ@†CƒЙ‹ІA“ 3†BuU†BuЙ‰†CЎ U†CЫ Й‡†C‘U†CƒLKO€НT)ЄO€ОT)OGTTOœO€РM: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t ‚z y xs r qon m lk j ihgb a `[ Z YXUTQ Nfac_Q16†€Lind†€JA_Q28†€tHB_Q28†€t Sna†tRnb†t             ЄЂЁ œ›š™–•” ‹frame_length†€‰in†€.‡out†€…psLP†€Џ ‘ind†tfac_Q16†tŽB_Q28† Ё€*A_Q28†!€\           ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёь!Œ""!tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Љ Ў Ц Ы м Ю!ь!Œ"Џ#Б#Љ$Њ$Е$Ж$З$Й$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl .cil$in.cil$exH7.cil$syц .cil$dbБ/2520 1284597037 100666 15626 ` џџL-e‘L8ўГ ЅйЋMЌ›жЖ"&SТъ< -e‘LЦ;.drectveQ, .cil$fg}@@.cil$glЭ‹@@.cil$inX @@.cil$exщ(Y @@.cil$syіB3@@.cil$dbŽ8;@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_lowpass_short.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_lowpass_short.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2ё2€ovЩV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lowpass_short.cІІъдђ№ыvŒ1е?У SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШ[ SKP_Silk_lowpass_short‚€3€v'€#Qh Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO%O€ O €ўO3 f0" D ЄBEOœO/SS&[ F-ц-ф-т-рLOSO0O1O3&ьЙт†Cє3†A(0†At2†AtKO4&щ3†At2†AtK:э)ю&щ3†At5†AtK)эЙщ†AtЙцІA“ "8яSO5&ъ3†At€Йр†CЎ Йщ†At3†A(0Є!­ ,†At2†AtKO6&ыЙь†AtЙъ†At2†AtKO7&ьЙъ†AtЙы†At3†At 2†AtKO8Йф†CєЙщ†At3†A(Йы†At2†AtKO9T:ю)яO:Йт†Cє3†A(Йь†At2†AtKO;T)шOGTTOœO>M9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t я ю эш цlen†€фout†€tтS†€tрin†€. ъin_tmp†tщk†tыout_tmp†tьstate†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ Љ ­ Ў Г$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glЭ.cil$in.cil$exщ(.cil$syі.cil$dbŽ/2555 1284597037 100666 15606 ` џџL-e‘L8ўГ ЅйЋMЌ›жЖ"&SТж< -e‘LВ;.drectveQ, .cil$fg }@@.cil$glЩ‡@@.cil$inP @@.cil$exп(Q @@.cil$syі03@@.cil$dbŒ&;@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_lowpass_int.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_lowpass_int.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2№2€ovХV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lowpass_int.cхшTс~тb]IНMП %У SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШd SKP_Silk_lowpass_int‚€€v'€#Ph Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO%O€ O €ўO3 f0" D ЄBEOœO.SS&d F-ц-ф-т-рLOSO/O0O2&ьЙт†Cє3†A(0†At2†AtKO3&щЙцІA“ 2†AtK:э)ю&щ3†At6†AtK)эЙщ†At3†At$8яSO4&ъ&р3†A5†C” 0ІA“ 2†AtKO5&ъЙъ†At3†At †AtKO6&ыЙь†AtЙъ†At2†AtKO7&ьЙъ†AtЙы†At3†At 2†AtKO8&ф3†A5†CєЙы†At2†AtKO9T:ю)яO:Йт†Cє3†A(Йь†At2†AtKO;T)шOGTTOœO>M9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t я ю эш цlen†€фout†€tтS†€tрin†€ ъin_tmp†tщk†tыout_tmp†tьstate†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ ” ™ Љ @comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$glЩ.cil$in.cil$exп(.cil$syі.cil$dbŒ/2588 1284597037 100666 15629 ` џџL-e‘L8ўГ ЅйЋMЌ›жЖ"&SТэ< -e‘LЩ;.drectveQ, .cil$fg}@@.cil$glС@@.cil$in@ @@.cil$exk)A @@.cil$sy”Ќ3@@.cil$db‰@;@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_log2lin.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_log2lin.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2№2€ovНV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_log2lin.c‹5fEУ\Е гЈэАУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШў SKP_Silk_log2lin†€€v'€#rh Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO$O€ O €ўO3 f0" D ЄBEOœO)SS&ў F-рLOSO*O,ЙрІA“ 3†At"8хSO-3†AtA†At:тO.TO0)х&у3†AtЙрІA“ 3†At 2†AtKO1&фЙрІA“ 3†At 2†AtKO2ЙрІA“ 3†At€"8цSO4&уЙу†AtЙу†AtЙф†AtЙф†At3†At€€Йф†At3†At 3†At€RџџџЙф†At3†At€€Йф†At3†At€џџ 3†At€Rџџџ3†At 3†At 2†AtKO5T:ы)цSO7&уЙу†AtЙу†At3†At Йф†AtЙф†At3†At€€Йф†At3†At 3†At€RџџџЙф†At3†At€€Йф†At3†At€џџ 3†At€Rџџџ3†At 2†AtKO8T)ыO9Йу†AtA†At:тO:T)тOGTTOœO;M9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t ыцхт рinLog_Q7†€ фfrac_Q7†tуout†t     ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ Љ $@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glС.cil$in.cil$exk).cil$sy”.cil$db‰ /2617 1284597037 100666 15360 ` џџL-e‘L8ўГ ЅйЋMЌ›жЖ"&SТр; -e‘LМ:.drectveQ, .cil$fg}@@.cil$glФ@@.cil$inC @@.cil$exz(D @@.cil$syrО2@@.cil$dbŒ0:@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_lin2log.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_lin2log.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2щ2€ovРV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lin2log.cЩ5#‘iъћжїДЫнУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШј SKP_Silk_lin2log†€€v'€#5h< Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO%O€ O €ўO3 f0" D ЄBEOœO)SS&ј F-рLOSO*O,&<Н‚€&фU†Cє&уU†CєЙрІA“ U†AtLKO/3†AtЙу†At3†At Йф†AtЙф†At3†At€€Йф†At3†At 3†At€ГЙф†At3†At€€Йф†At3†At€џџ 3†At€Г3†At A†At:тO0T)тOGTTOœO2M9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t т рinLin†€ уlz†!tфfrac_Q7†!t  ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ ’ “ Љ $@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glФ.cil$in.cil$exz(.cil$syr.cil$dbŒ/2646 1284597037 100666 17008 ` џџL-e‘L8ўГ ЅйЋMЌ›жЖ"&SТPB -e‘L,A.drectveQ, .cil$fg}@@.cil$glј …@@.cil$in}@@.cil$exm)~@@.cil$syuы8@@.cil$dbЬ`@@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_LBRR_reset.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_LBRR_reset.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2O2€ovє V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_lbrr_reset.cќ,Ѓ#cљгиыH<^h+!Ф SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШBSKP_Silk_LBRR_reset‚€щ€(€#+h !SKP_Silk_NLSF_CB_struct€– SKP_Silk_detect_SWB_state€ "SKP_Silk_encoder_state€ё SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_LP_state€  SKP_Silk_detect_SWB_state€ SKP_Silk_range_coder_state€ž ѕSKP_Silk_VAD_state€ №SKP_SILK_LBRR_struct€ф SKP_Silk_range_coder_state€ž Мsize_tu SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)АSA_Parameter€)†4strnlen†€ЎSA_Method€)†@ Нwchar_t!Ћwcsnlen†€ SKP_Silk_VAD_state€ SKP_Silk_LP_state€  ]SKP_Silk_encoder_state€ё єSKP_SILK_LBRR_struct€ф [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœOO€ O €ўO3 f0" D ЄBEOœO"SS&BF-HLOSO#O%&K3†At2†AtK:L)M&K3†At5†AtK)LЙK†At3†At"8NSO&ЙH†CГ!3†At€ь '†CЬ#ЙK†At3†A€(3†At€'†Cє3†At2†AtKO'T:M)NO(T)JOGTTOœO)M: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t N M LJ HpsEncC†€Г Ki†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёз ž!о –!Ž!›!Ў!ё!р!ф!ь!Œ"э!Ž"ю!ˆ"!!tuєƒ ˆ ‹ Œ Ž  ‘ Љ з о Ž!–!›!ž!Ў!Г!р!ф!щ!ь!э!ю!ё!ˆ"Œ"Ž"Ь#@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glј .cil$in.cil$exm).cil$syu.cil$dbЬ/2678 1284597037 100666 15972 ` џџL-e‘L8ўГ ЅйЋMЌ›жЖ"&SТD> -e‘L =.drectveQ, .cil$fg}@@.cil$glУ@@.cil$inB @@.cil$exH*C @@.cil$sy‹4@@.cil$dbŽ’<@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_k2a_Q16.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_k2a_Q16.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2ї2€ovПV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_k2a_q16.c%Њv$0&|LЛиb?|mУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШ(SKP_Silk_k2a_Q16‚€1€v'€#€Зh Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO%O€ O €ўO3 f0" D ЄBEOœO-SS&(F-ф-т-рLOSO.O/O1&ч3†At2†AtK:ъ)ы&ч3†At5†AtK)ъЙч†AtЙфІA“ "8ьSO2&ш3†At2†AtK:э)ю&ш3†At5†AtK)эЙш†AtЙч†At"8яSO3&щЙш†At3†A(Йр†CєЙш†At3†A(0†At2†AtKO4T:ю)яO5&ш3†At2†AtK:№)ё&ш3†At5†AtK)№Йш†AtЙч†At"8ђSO6Йр†CєЙш†At3†A(Йр†CєЙш†At3†A(0†At&щЙч†AtЙш†At3†At3†A(0†At3†At Йт†C” Йч†At3†A(0ІA“ ,„!,†At&щЙч†AtЙш†At3†At3†A(0†At3†At€џџ Йт†C” Йч†At3†A(0ІA“ ,„!,†At3†At &щЙч†AtЙш†At3†At3†A(0†AtЙт†C” Йч†At3†A(0ІA“ 3†At 3†At3†At 2†AtKO7T:ё)ђO8Йр†CєЙч†At3†A(Йт†C” Йч†At3†A(0ІA“ 3†At 2†AtKO9T:ы)ьO:T)цOGTTOœO;M9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t ђ ё №я ю эь ы ъц фorder†€тrc_Q16†€рA_Q24†€t шn†tщAtmp†@€Pчk†t     ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ ” Љ а Б$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glУ.cil$in.cil$exH*.cil$sy.cil$dbŽ/2707 1284597036 100666 15893 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТѕ= ,e‘Lб<.drectveQ, .cil$fgњ}@@.cil$glЛw@@.cil$in2 @@.cil$ex*3 @@.cil$sy:4@@.cil$dbA<@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_k2a.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_k2a.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2ј2€ovЗV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_k2a.c™Ч`™ Eѕ]‰х=хAБчУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШ!SKP_Silk_k2a‚€ €v'€#€Єh Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO%O€ O €ўO3 f0" D ЄBEOœO-SS&!F-ф-т-рLOSO.O/O1&ч3†At2†AtK:ъ)ы&ч3†At5†AtK)ъЙч†AtЙфІA“ "8ьSO2&ш3†At2†AtK:э)ю&ш3†At5†AtK)эЙш†AtЙч†At"8яSO3&щЙш†At3†A(Йр†CєЙш†At3†A(0†At2†AtKO4T:ю)яO5&ш3†At2†AtK:№)ё&ш3†At5†AtK)№Йш†AtЙч†At"8ђSO6Йр†CєЙш†At3†A(Йр†CєЙш†At3†A(0†At&щЙч†AtЙш†At3†At3†A(0†At3†At 3†At Йт†CЎ Йч†At3†A(0Є!­ ,„!,†At&щЙч†AtЙш†At3†At3†A(0†At3†At 3†At€џџ Йт†CЎ Йч†At3†A(0Є!­ ,„!,†At3†At 2†AtKO7T:ё)ђO8Йр†CєЙч†At3†A(Йт†CЎ Йч†At3†A(0Є!­ ,†At3†At 2†AtKO9T:ы)ьO:T)цOGTTOœO;M9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t ђ ё №я ю эь ы ъц фorder†€тrc_Q15†€.рA_Q24†€t шn†tщAtmp†@€Pчk†t     ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ Љ ­ Ў а ‹$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fgњ.cil$glЛ.cil$in.cil$ex*.cil$sy.cil$db /2732 1284597036 100666 16638 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТо@ ,e‘LК?.drectveQ, .cil$fg }@@.cil$glњ ‡@@.cil$in @@.cil$exн)‚ @@.cil$syЮ_7@@.cil$db-?@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_interpolate.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_interpolate.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2]2€ovі V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_interpolate.cру7…ЈўэѓЗЭѕ8EФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШhSKP_Silk_interpolate‚€ч€(€#Jh Мsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†4strnlen†€ЎSA_Method€)†@ Нwchar_t!Ћwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœOO€ O €ўO3 f0" D ЄBEOœO&SS&hF-P-N-L-J-HLOSO'O)3‚KO*3‚KO,&S3†At2†AtK:V)W&S3†At5†AtK)VЙS†AtЙPІA“ "8XSO-ЙH†CєЙS†At3†A(ЙJ†C” ЙS†At3†A(0ІA“ ,†AtЙL†C” ЙS†At3†A(0ІA“ ,†AtЙJ†C” ЙS†At3†A(0ІA“ ,†AtЙNІA“ 3†At ,†At2†AtKO.T:W)XO/T)ROGTTOœO0M: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t X W VR Pd†€Nifact_Q2†€Lx1†€Jx0†€Hxi†€t Si†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ ” Љ ч#@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$glњ .cil$in.cil$exн).cil$syЮ.cil$db/2765 1284597036 100666 17391 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТЯC ,e‘LЋB.drectveQ, .cil$fg}@@.cil$glž•@@.cil$in3 @@.cil$exe-4 @@.cil$sy{ ™8@@.cil$db—B@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_inner_prod_aligned.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_inner_prod_aligned.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2.2€ovšV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inner_prod_aligned.cёtђ9ѕщ•$n?пLн‰ГУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШцSKP_Silk_inner_prod_aligned†€?€v'€#>hєSKP_Silk_inner_prod_aligned_64ˆ€/€Ž(€Й&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO#O€ O €ўO3 f0" D ЄBEOœO0SS&цF-ф-т-рLOSO1O2&ш3†At2†AtKO3&ч3†At2†AtK:щ)ъ&ч3†At5†AtK)щЙч†AtЙфІA“ "8ыSO4&шЙш†AtЙрІCН Йч†At3†A(0Є!­ ,„!,†AtЙтІCН Йч†At3†A(0Є!­ ,„!,†At2†AtKO5T:ъ)ыO6Йш†AtA†At:цO7T)цOGTTO€ O €ўO3 f0" D ЄBEOœO>SS&єF-є-ђ-№LOSO?O@&ј3†At2ˆKOA&ї3†At2†AtK:љ)њ&ї3†At5†AtK)љЙї†AtЙєІA“ "8ћSOB&јЙјˆЙ№†C” Йї†At3†A(0ІA“ ,ˆЙђ†C” Йї†At3†A(0ІA“ ,ˆ2ˆKOCT:њ)ћODЙјˆAˆ:іOET)іOGTTO€ O €ўO3 f0" D ЄBEOœOKSS&ћF---ўLOSOLOM&3†At2ˆKON&3†At2†AtK:)&3†At5†AtK)Й†AtЙІA“ "8 SOO&ЙˆЙў†CЎ Й†At3†A(0Є!­ ,†AtЙ†CЎ Й†At3†A(0Є!­ ,†At,ˆ2ˆKOPT:) OQЙˆAˆ:ORT)OGTTO€ O €ўO3 f0" D ЄBEOœOYSS&эF--- LOSOZO[&3†At2†AtKO\&3†At2†AtK:)&3†At5†AtK)Й†AtЙІA“ "8SO]&Й†AtЙ ІCН Й†At3†A(0Є!­ ,„!,†AtЙІCН Й†At3†A(0Є!­ ,„!,†At3†Bu€€ 3†AtЙ†AtЙ ІCН Й†At3†A(0Є!­ ,„!,†AtЙІCН Й†At3†A(0Є!­ ,„!,†At 3†Bu€€ 3†At 3†At€€Й†AtЙ ІCН Й†At3†A(0Є!­ ,„!,†AtЙІCН Й†At3†A(0Є!­ ,„!,†AtCBЙ†AtЙ ІCН Й†At3†A(0Є!­ ,„!,†AtЙІCН Й†At3†A(0Є!­ ,„!,†At 3†Bu€€ 3†At3†At€џџџЙ†AtЙ ІCН Й†At3†A(0Є!­ ,„!,†AtЙІCН Й†At3†A(0Є!­ ,„!,†AtCBCB2†AtKO^T:)O_Й†AtA†At:O`T)OGTTOœOaM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t ы ъ щц фlen†€тinVec2†€=рinVec1†€= чi†tшsum†t ћ њ љі єlen†€ђinVec2†€№inVec1†€ їi†tјsumˆ     len†€inVec2†€.ўinVec1†€. i†tsumˆ    len†€inVec2†€= inVec1†€= i†tsum†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ ” Љ ­ Ў И Н П Џ$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glž.cil$in.cil$exe-.cil$sy{ .cil$db— /2805 1284597036 100666 17986 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТ"F ,e‘LўD.drectveQ, .cil$fg}@@.cil$gl‘@@.cil$in–@@.cil$ex+—@@.cil$sy\™<@@.cil$db ѕC@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_init_encoder_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_init_encoder_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2M2€ovV €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_init_encoder_fix.c<Ђ›Kžля гтZКЌЃєФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШSKP_Silk_init_encoder_FIX†€•€(€#oh$$SKP_Silk_control_encoder_FIX†€ ЬSKP_Silk_encoder_state_FIX€М ЦSKP_Silk_predict_state_FIX€о ЗSKP_Silk_prefilter_state_FIX€з БSKP_Silk_shape_state_FIX€в aSKP_Silk_encoder_control€  %SKP_Silk_encoder_state€ё SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_LP_state€  SKP_Silk_detect_SWB_state€ SKP_Silk_range_coder_state€ž јSKP_Silk_VAD_state€ ѓSKP_SILK_LBRR_struct€ф чSKP_Silk_nsq_state€к SKP_Silk_range_coder_state€ž Кsize_tu ЖSKP_Silk_shape_state_FIX€в SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)АSA_Parameter€)† ХSKP_Silk_prefilter_state_FIX€з pSKP_Silk_encoder_control€ SKP_Silk_VAD_Init†€, ђSKP_Silk_nsq_state€к strnlen†€ ђSKP_Silk_encoder_state_FIX€М ЫSKP_Silk_predict_state_FIX€оЎSA_Method€)†@ Лwchar_t!€ wcsnlen†€ SKP_Silk_VAD_state€ SKP_Silk_LP_state€  `SKP_Silk_encoder_state€ё їSKP_SILK_LBRR_struct€ф $SKP_Silk_NLSF_CB_struct€– SKP_Silk_detect_SWB_state€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOO€ O €ўO3 f0" D ЄBEOœO$SS&F-HLOSO%&K3†At2†AtKO'3†At€­@†Cƒ3†Bu€<ЄU†Bu3†AtU†AtЙH†C­!U†CƒLKO*&K&$Н†At€œ3†AtUІA“ 3†At UІA“ 3†AtUІA“ 3†AtUІA“ 3†AtUІA“ 3†AtU†At3†AtUІA“ 3†AtUІA“ ЙH†C­!U†C­!L2†AtKO-ЙH†C­!3†At€Ta'†Cє3†At€Œ2†AtKO.ЙH†C­!3†At€Xa'†Cє3†At€Œ2†AtKO2ЙH†C­!3†At€ '†Cє3†At2†AtKO3ЙH†C­!3†At€Ш'†Cє3†At2†AtKO4ЙH†C­!3†At€'†Cє3†At2†AtKO7&K&Н†At€-ЙH†C­!3†At€@'†CЋ#U†CЇ#L†AtKO:ЙH†C­!3†At€д‚'†Cє3†At€2†AtKO;ЙH†C­!3†At€›'†Cє3†At€2†AtKO=ЙH†C­!3†At€Pa'†Cє3†At2†AtKO?ЙK†AtA†At:JO@T)JOGTTOœOAM   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t J HpsEnc†€­ Kret†t  ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёз ž!о –!Ž!›!Ќ!М!Ў!ё!Џ!в!А!з!Б!о!В!к!Д!Š"р!ф!ь!Œ"э!Ž"ю!ˆ"3!tuƒєƒ ˆ ‹ Œ Ž  ‘ “ Љ з о Ž!–!›!ž!Ќ!­!Ў!Џ!А!Б!В!Д!М!в!з!к!о!р!ф!ь!э!ю!ё!€"ˆ"Š"Œ"Ž"•#œ#Ї#Ћ#Ќ$­$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl.cil$in.cil$ex+.cil$sy\.cil$db /2843 1284597036 100666 20145 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТ‘N ,e‘LmM.drectveQ, .cil$fg }@@.cil$gl}@@.cil$in@@.cil$exž1@@.cil$sy—ЙC@@.cil$dbPL@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_HP_variable_cutoff_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_HP_variable_cutoff_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2—2€ovyV €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_hp_variable_cutoff_fix.cTг063КhмЙЌзФФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШASKP_Silk_HP_variable_cutoff_FIX‚€­€(€#€ hŠ љ џ  ѓSKP_Silk_encoder_control_FIX€ў ЬSKP_Silk_encoder_state_FIX€М ЦSKP_Silk_predict_state_FIX€о ЗSKP_Silk_prefilter_state_FIX€з БSKP_Silk_shape_state_FIX€в aSKP_Silk_encoder_control€  %SKP_Silk_encoder_state€ё SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_LP_state€  SKP_Silk_detect_SWB_state€ SKP_Silk_range_coder_state€ž јSKP_Silk_VAD_state€ ѓSKP_SILK_LBRR_struct€ф чSKP_Silk_nsq_state€к SKP_Silk_range_coder_state€ž Кsize_tu ЖSKP_Silk_shape_state_FIX€в SKP_Silk_NLSF_CBS€›Š SKP_Silk_biquad_alt‚€F ЃSA_AttrTarget€)АSA_Parameter€)† ХSKP_Silk_prefilter_state_FIX€з pSKP_Silk_encoder_control€  ђSKP_Silk_nsq_state€к strnlen†€ ђSKP_Silk_encoder_state_FIX€Мџ SKP_Silk_log2lin†€ ЫSKP_Silk_predict_state_FIX€оЎSA_Method€)†@ Лwchar_t!€ wcsnlen†€ SKP_Silk_VAD_state€ SKP_Silk_encoder_control_FIX€ў SKP_Silk_LP_state€ љ SKP_Silk_lin2log†€ `SKP_Silk_encoder_state€ё їSKP_SILK_LBRR_struct€ф $SKP_Silk_NLSF_CB_struct€– SKP_Silk_detect_SWB_state€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOO€ O €ўO3 f0" D ЄBEOœO*SS&AF-N-L-J-HLOSO+O,O-O.O3ЙH†C­!3†At€Д'†Cє0†At3†At8ZSO5&WЙH†C­!3†At€Ф'†Cє0†At3†At€ш3†At ЙH†C­!3†At€М'†Cє0†At2†AtKO6&X&љ Н†At€ЙW†AtUІA“ L3†At€2†AtKO9&QЙJ†Cћ!3†At€x'†Cы 3†A(0†At2†AtKO:O;&XЙX†AtЙQ†At3†At 3†At ЙQ†At,„!,†AtЙQ†At3†At 3†At€џџ ЙQ†At,„!,†At3†At 3†At ЙX†At3†At€),„!,†AtЙQ†At3†At 3†At ЙQ†At,„!,†AtЙQ†At3†At 3†At€џџ ЙQ†At,„!,†At3†At 3†At€џџ ЙX†At3†At€),„!,†At3†At 2†AtKO<&XЙX†At3†At€ЭLЙQ†At3†At 2†AtKO?&YЙX†AtЙH†C­!3†At€Ta'†Cє0†At3†At 2†AtKO@ЙY†At3†At"8hSOB&YЙY†At3†At2†AtKOCTOF)h&YЙY†At3†At3$3†At3ЙY†At3†AtЭ"3†AtЭЙY†AtCBCB2†AtKOIOJЙH†C­!3†At€Ta'†CєЙH†C­!3†At€Ta'†Cє0†AtЙH†C­!3†At€(Є'†Cє0†At3†At ЙY†At3†At 3†At€šЙH†C­!3†At€(Є'†Cє0†At3†At ЙY†At3†At€џџ 3†At€š3†At 2†AtKOKTOM)ZONЙH†C­!3†At€Xa'†CєЙH†C­!3†At€Xa'†Cє0†AtЙH†C­!3†At€Ta'†Cє0†AtЙH†C­!3†At€Xa'†Cє0†At3†At 3†At€зЙH†C­!3†At€Ta'†Cє0†AtЙH†C­!3†At€Xa'†Cє0†At3†At€џџ 3†At€з3†At 2†AtKOQЙJ†Cћ!3†At€h'†Cє&џ Н†At€ЙH†C­!3†At€Xa'†Cє0†At3†At UІA“ L2†AtKOTЙJ†Cћ!3†At€h'†CєЙJ†Cћ!3†At€h'†Cє0†At3†At€–$3†At€–ЙJ†Cћ!3†At€h'†Cє0†At3†AtP"3†AtPЙJ†Cћ!3†At€h'†Cє0†AtCBCB2†AtKO\3‚KO]&T3†At€ЪЙJ†Cћ!3†At€h'†Cє0†At,„!,†AtЙH†C­!3†At€Ф'†Cє0†At2†AtKO^3‚KO_3‚KOa&U3†At€3†At€зЙT†At2†AtKOb3‚KOc3‚KOg&R3†A(ЙU†At2†AtKOh&R3†A(ЙU†At3†At 2†AtKOi&R3†A(ЙU†At2†AtKOl&VЙU†At3†At 2†AtKOm&S3†A(ЙV†At3†At ЙT†At3†At ЙT†At,„!,†AtЙT†At3†At€џџ ЙT†At,„!,†At3†At ЙT†AtЙT†At3†At 3†At3†At 3†At€€,„!,†AtЙV†At3†At€џџ ЙT†At3†At ЙT†At,„!,†AtЙT†At3†At€џџ ЙT†At,„!,†At3†At ЙT†AtЙT†At3†At 3†At3†At 3†At€€,„!,†At3†At ЙV†AtЙT†At3†At ЙT†At,„!,†AtЙT†At3†At€џџ ЙT†At,„!,†At3†At ЙT†AtЙT†At3†At 3†At3†At 3†At€€3†At 3†At3†At 2†AtKOn&S3†A(ЙV†At3†At ЙV†At,„!,†AtЙV†At3†At€џџ ЙV†At,„!,†At3†At ЙV†AtЙV†At3†At 3†At3†At 2†AtKOs&Š Н‚€)ЙH†C­!3†At€Ь'†Cє0†AtUІA“ ЙL†C‘U†C‘ЙH†C­!3†At€('†CЮ!U†Cє&SU†C” &RU†C” ЙN†CЎ U†CЎ LKOtT)POGTTOœOwM   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t hZP Nin†€.Lout†€JpsEncCtrl†€ћHpsEnc†€­ RB_Q28† Ё€*Vr_Q22†tTFc_Q19†tSA_Q28†!€\Ydelta_freq_Q7†tWpitch_freq_Hz_Q16†tXpitch_freq_log_Q7†tQquality_Q15†tUr_Q28†t    ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёз ž!о –!Ž!›!Ќ!М!Ў!ё!Џ!в!А!з!Б!о!В!к!Д!Š"р!ф!ь!Œ"э!Ž"ю!ˆ"њ!ў!<!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Љ Ў Ц з м о ы Ž!–!›!ž!Ќ!­!Ў!Џ!А!Б!В!Д!М!Ю!в!з!к!о!р!ф!ь!э!ю!ё!њ!ћ!ў!ˆ"Š"Œ"Ž"­#$‚$Љ$Њ$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$gl}.cil$in.cil$exž1.cil$sy—.cil$db /2887 1284597036 100666 18381 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТ­G ,e‘L‰F.drectveQ, .cil$fg}@@.cil$glф …@@.cil$ini@@.cil$exш.j@@.cil$syЁR=@@.cil$db–ѓE@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_gain_quant.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_gain_quant.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2s2€ovр V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_gain_quant.ck`JТ[жZY=@ёIФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ  SKP_min_32†€€Ы€ПШSKP_max_int†€€е€Ш=SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШMSKP_Silk_gains_quant‚€(€(€#€hљ џ  VSKP_Silk_gains_dequant‚€o€-€чghџ   Мsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†4strnlen†€џ SKP_Silk_log2lin†€ЎSA_Method€)†@ Нwchar_t!Ћwcsnlen†€љ SKP_Silk_lin2log†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœOO€ O €ўO3 f0" D ЄBEOœO)SS&MF-N-L-J-HLOSO*O,&Q3†At2†AtK:R)S&Q3†At5†AtK)RЙQ†At3†At"8TSO.ЙH†CєЙQ†At3†A(3†At&љ Н†At€ЙJ†CєЙQ†At3†A(0†AtUІA“ L3†At€€,„!,†At3†At€t &љ Н†At€ЙJ†CєЙQ†At3†A(0†AtUІA“ L3†At€€,„!,†At3†At 2†AtKO1ЙH†CєЙQ†At3†A(0†AtЙL†Cє0†At"8YSO2ЙH†CєЙQ†At3†A(3†At5†AtKO3TO6)YЙQ†At3†At8ZЙNІA“ 3†At8ZSO8ЙH†CєЙQ†At3†A(ЙH†CєЙQ†At3†A(0†At3†At?$3†At?ЙH†CєЙQ†At3†A(0†At3†At"3†AtЙH†CєЙQ†At3†A(0†AtCBCB2†AtKO9ЙH†CєЙQ†At3†A(&Н†At€ ЙL†Cє0†At3†AtќU†AtЙH†CєЙQ†At3†A(0†AtU†AtL2†AtKO:ЙL†CєЙH†CєЙQ†At3†A(0†At2†AtKO;T:[)ZSO=ЙH†CєЙQ†At3†A(ЙH†CєЙQ†At3†A(0†AtЙL†Cє0†At3†At($3†At(ЙH†CєЙQ†At3†A(0†AtЙL†Cє0†At3†Atќ"3†AtќЙH†CєЙQ†At3†A(0†AtЙL†Cє0†AtCBCB2†AtKO?ЙL†CєЙH†CєЙQ†At3†A(0†At†AtKOAЙH†CєЙQ†At3†A(3†Atќ†AtKOBT)[OEЙJ†CєЙQ†At3†A(&џ Н†At€& Н†At€ 3†At€U†At3†AtЙL†Cє0†At,„!,†At3†At€QЙL†Cє0†At,„!,†At3†At 3†At€€U†AtLUІA“ L2†AtKOFT:S)TOGT)POGTTO€ O €ўO3 f0" D ЄBEOœOPSS&VF-f-d-b-`LOSOQOS&i3†At2†AtK:j)k&i3†At5†AtK)jЙi†At3†At"8lSOTЙi†At3†At8mЙfІA“ 3†At8mSOUЙd†CєЙb†C” Йi†At3†A(0ІA“ 2†AtKOVT:n)mSOXЙd†CєЙb†C” Йi†At3†A(0ІA“ 3†Atќ†AtKOYT)nO\Й`†CєЙi†At3†A(&џ Н†At€& Н†At€ 3†At€U†At3†AtЙd†Cє0†At,„!,†At3†At€QЙd†Cє0†At,„!,†At3†At 3†At€€U†AtLUІA“ L2†AtKO]T:k)lO^T)hOGTTOœO_M: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t [ZYT S RP Nconditional†€Lprev_ind†€tJgain_Q16†€tHind†€t Qk†t    nml k jh fconditional†€dprev_ind†€tbind†€`gain_Q16†€t ik†t     ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ ” Ÿ   Љ я"$‚$Ј$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glф .cil$in.cil$exш..cil$syЁ.cil$db– /2919 1284597036 100666 21034 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТ R ,e‘LцP.drectveQ, .cil$fg}@@.cil$glН—@@.cil$inT@@.cil$exќ2U@@.cil$syI QF@@.cil$dbLšO@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_find_pred_coefs_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_find_pred_coefs_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2p2€ovЙV €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_find_pred_coefs_fix.c‚иЫо%Ёx_5w><WћФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж iSKP_DIV32_varQ†€M€€y€щШж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШrSKP_Silk_find_pred_coefs_FIX‚€Н€(€#€$h Ыib’ЇДЛGbSKP_Silk_LTP_scale_ctrl_FIX‚€ЛSKP_Silk_process_NLSFs_FIX‚€ ѓSKP_Silk_encoder_control_FIX€ў ЬSKP_Silk_encoder_state_FIX€М ЦSKP_Silk_predict_state_FIX€о ЗSKP_Silk_prefilter_state_FIX€з БSKP_Silk_shape_state_FIX€в aSKP_Silk_encoder_control€  %SKP_Silk_encoder_state€ё SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_LP_state€  SKP_Silk_detect_SWB_state€ SKP_Silk_range_coder_state€ž јSKP_Silk_VAD_state€ ѓSKP_SILK_LBRR_struct€ф чSKP_Silk_nsq_state€к SKP_Silk_range_coder_state€žЇSKP_Silk_find_LTP_FIX‚€ Кsize_tuЫSKP_Silk_scale_copy_vector16‚€ ЖSKP_Silk_shape_state_FIX€в SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)АSA_Parameter€)† ХSKP_Silk_prefilter_state_FIX€з pSKP_Silk_encoder_control€  ђSKP_Silk_nsq_state€к strnlen†€ ђSKP_Silk_encoder_state_FIX€М ЫSKP_Silk_predict_state_FIX€оДSKP_Silk_quant_LTP_gains_FIX‚€ЎSA_Method€)†@ Лwchar_t!SKP_Silk_find_LPC_FIX‚€ю’SKP_Silk_LTP_analysis_filter_FIX‚€€ wcsnlen†€ SKP_Silk_VAD_state€GSKP_Silk_residual_energy_FIX‚€" SKP_Silk_encoder_control_FIX€ў SKP_Silk_LP_state€  `SKP_Silk_encoder_state€ё їSKP_SILK_LBRR_struct€ф $SKP_Silk_NLSF_CB_struct€– SKP_Silk_detect_SWB_state€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOO€ O €ўO3 f0" D ЄBEOœO$SS&rF-L-J-HLOSO%O&O'O(O)O*O+O,O0&Y3†At€џџџ2†AtKO1&O3†At2†AtK:[)\&O3†At5†AtK)[ЙO†At3†At"8]SO2&YЙY†AtЙJ†Cћ!3†At€€'†Cы ЙO†At3†A(0†At"ЙY†AtЙJ†Cћ!3†At€€'†Cы ЙO†At3†A(0†AtCB2†AtKO3T:\)]O4&O3†At2†AtK:^)_&O3†At5†AtK)^ЙO†At3†At"8`SO63‚KO8&QЙO†At3†A(&iН†At€N3†AtUІA“ ЙJ†Cћ!3†At€€'†Cы ЙO†At3†A(0†AtUІA“ ЙY†AtUІA“ L2†AtKO;&QЙO†At3†A(&QЙO†At3†A(0†At3†At€k$&QЙO†At3†A(0†At3†At€kCB2†AtKO>3‚KO?&X&QЙO†At3†A(0†At3†At &QЙO†At3†A(0†At,„!,†At&QЙO†At3†A(0†At3†At€џџ &QЙO†At3†A(0†At,„!,†At3†At 2†AtKO@&SЙO†At3†A(ЙX†At3†At 2†AtKOC&RЙO†At3†A(3†At€&QЙO†At3†A(0†At2†AtKODT:_)`OFЙJ†Cћ!3†Ath'†Cє0†At3†At8hSOJ3‚KOMONOO&ЇН‚€&ZU†CєЙH†C­!3†At€Ь'†Cє0†AtUІA“ ЙH†C­!3†At€а'†Cє0†AtUІA“ &SU†C” ЙJ†Cћ!3†Atl'†CЭ"U†C” ЙL†CЎ ЙH†C­!3†At€Ь'†Cє0†At3†At 3†AU†CЎ ЙL†CЎ U†CЎ ЙJ†Cћ!3†At€t'†Cы U†Cє&PU†CєЙJ†Cћ!3†At€и'„Cј"U†C‘LKOSOT&ДН‚€ЙH†C­!3†At€ '†Cє0†AtU†AtЙH†C­!3†At€Є'†Cє0†AtU†At&PU†C” ЙJ†Cћ!3†At'†Cы U†CєЙJ†Cћ!3†At '†CЭ"U†CєЙJ†Cћ!3†At€и'„Cј"U†C‘LKOW&bН‚€ПЙJ†Cћ!U†Cћ!ЙH†C­!U†C­!LKOZO[&’Н‚€ЙH†C­!3†At€ќ'†Cє0†AtUІA“ ЙH†C­!3†At€а'†Cє0†AtUІA“ 3†AtUІA“ &QU†C” ЙJ†Cћ!3†Atl'†CЭ"U†C” ЙJ†Cћ!3†At€и'„Cј"U†CЎ ЙH†C­!3†At€ ›'†CК"ЙH†C­!3†At€Ь'†Cє0†At3†AЙH†C­!3†At€ќ'†Cє0†At3†AU†CЎ &WU†C‘LKO]T:j)hSOb&UЙH†C­!3†At€ ›'†CК"ЙH†C­!3†At€Ь'†Cє0†At3†AЙH†C­!3†At€ќ'†Cє0†At3†A2†CЎ KOc&V&W2†C‘KOd&O3†At2†AtK:k)l&O3†At5†AtK)kЙO†At3†At"8mSOeOf&ЫН‚€ЙH†C­!3†At€а'†Cє0†AtЙH†C­!3†At€ќ'†Cє0†AtUІA“ &QЙO†At3†A(0†AtU†AtЙU†CЎ U†CЎ ЙV†C‘U†C‘LKOg&VЙH†C­!3†At€а'†Cє0†AtЙH†C­!3†At€ќ'†Cє0†At3†A†C‘KOh&UЙH†C­!3†At€а'†Cє0†At3†A†CЎ KOiT:l)mOk3†At€­@†Cƒ3†Bu(U†Bu3†AtU†AtЙJ†Cћ!3†At€и'„Cј"U†CƒLKOlЙJ†Cћ!3†At€t'†Cє3†At2†AtKOmT)jOpOqOrOs&Н‚€ЙH†C­!3†At€а'†Cє0†AtЙH†C­!3†At€ќ'†Cє0†AtUІA“ &WU†CЎ ЙH†C­!3†At€ќ'†Cє0†AtUІA“ ЙH†C­!3†At€є'†Cє0†At3†AtЙH†C­!3†At€ '†Cє0†AtUІA“ ЙH†C­!3†At€рi'†C„!U†C” ЙJ†Cћ!3†AtD'†Cы U†Cє&TU†CєLKOtOxOy&ЛН‚€&TU†CєЙJ†Cћ!U†Cћ!ЙH†C­!U†C­!LKOzO}O~&GН‚€#ЙH†C­!3†At€ќ'†Cє0†AtUІA“ ЙH†C­!3†At€а'†Cє0†AtUІA“ &RU†C” ЙJ†Cћ!3†At€˜'„CЄ$U†C $&WU†CЎ ЙJ†Cћ!3†At€œ'†CЭ"U†CєЙJ†Cћ!3†At€Œ'†CЭ"U†CєLKO€3†At€Ќ@†CƒЙH†C­!3†At€ќ'†Cє0†At3†BuU†Bu&TU†CЫ ЙH†C­!3†At€рi'†C„!U†CƒLKO€ƒT)NOGTTOœO€…M   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t m l kjh` _ ^] \ [N Lres_pitch†€.JpsEncCtrl†€ћHpsEnc†€­ PWLTP†€Ё€%Oi†tXtmp†tTNLSF_Q15†@Ё€PRlocal_gains†Ё€cYmin_gain_Q16†tZLTP_corrs_rshift†Ё€cUx_ptr†€.SWght_Q15†Ё€cWLPC_in_pre„€@Ё€&Vx_pre_ptr†€QinvGains_Q16†Ё€c       ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёз ž!о –!Ž!›!Ќ!М!Ў!ё!Џ!в!А!з!Б!о!В!к!Д!Š"р!ф!ь!Œ"э!Ž"ю!ˆ"њ!ў!T!tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Љ Ў Ы Э Ю а з о у ы „!Ž!–!›!ž!Ќ!­!Ў!Џ!А!Б!В!Д!М!в!з!к!о!р!ф!ь!э!ю!ё!њ!ћ!ў!‚"ˆ"Š"Œ"Ž"К"Э"ј"Н#П#ю#‡$‘$“$”$–$—$™$š$›$$ž$ $Ђ$Ѓ$Є$Ѕ$І$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glН.cil$in.cil$exќ2.cil$syI .cil$dbL/2960 1284597036 100666 20620 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТlP ,e‘LHO.drectveQ, .cil$fg}@@.cil$glb—@@.cil$inљ@@.cil$exъ1њ@@.cil$sy% фD@@.cil$db? N@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_find_pitch_lags_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_find_pitch_lags_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2~2€ov^V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_find_pitch_lags_fix.cˆЛkžZ4­jRV1:Ф SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж DSKP_Silk_SQRT_APPROX†€€я€ЄZШ=ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШkSKP_Silk_find_pitch_lags_FIX‚€­€(€#€ѓh— д "2=[D2SKP_Silk_apply_sine_window‚€4 ѓSKP_Silk_encoder_control_FIX€ў ЬSKP_Silk_encoder_state_FIX€М ЦSKP_Silk_predict_state_FIX€о ЗSKP_Silk_prefilter_state_FIX€з БSKP_Silk_shape_state_FIX€в aSKP_Silk_encoder_control€  %SKP_Silk_encoder_state€ё SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_LP_state€  SKP_Silk_detect_SWB_state€ SKP_Silk_range_coder_state€ž јSKP_Silk_VAD_state€ ѓSKP_SILK_LBRR_struct€ф чSKP_Silk_nsq_state€к SKP_Silk_range_coder_state€ž Кsize_tu[SKP_Silk_pitch_analysis_core†€д SKP_Silk_bwexpander‚€T ЖSKP_Silk_shape_state_FIX€в— SKP_Silk_MA_Prediction‚€> SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)АSA_Parameter€)† ХSKP_Silk_prefilter_state_FIX€зSKP_Silk_schur‚€‚ pSKP_Silk_encoder_control€  ђSKP_Silk_nsq_state€к strnlen†€ ђSKP_Silk_encoder_state_FIX€М"SKP_Silk_k2a‚€  ЫSKP_Silk_predict_state_FIX€оЎSA_Method€)†@ Лwchar_t!€ wcsnlen†€ SKP_Silk_VAD_state€ SKP_Silk_encoder_control_FIX€ў SKP_Silk_LP_state€  `SKP_Silk_encoder_state€ё їSKP_SILK_LBRR_struct€ф=SKP_Silk_autocorr‚€B $SKP_Silk_NLSF_CB_struct€– SKP_Silk_detect_SWB_state€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOO€ O €ўO3 f0" D ЄBEOœO%SS&kF-N-L-J-HLOSO&&QЙH†C­!3†At€дi'†Cм!2†Cл!KO'O(O)O*O+O,O-O.O/O0O5&RЙH†C­!3†At€д'†Cє0†AtЙH†C­!3†At€Ь'†Cє0†At3†At 2†AtKO83‚KO:&VЙN†CЎ ЙH†C­!3†At€Ь'†Cє0†At3†A2†CЎ KOC&WЙV†CЎ ЙR†At3†AЙQ†Cл!3†At'†Cє0†At3†A2†CЎ KOD&Y&X2†C‘KOE&2Н‚€ЙH†C­!3†At€д'†Cє0†AtUІA“ 3†AtUІA“ ЙW†CЎ U†CЎ ЙY†C‘U†C‘LKOH&YЙH†C­!3†At€д'†Cє0†At3†A†C‘KOI&WЙH†C­!3†At€д'†Cє0†At3†A†CЎ KOJ3†At€Ќ@†CƒЙQ†Cл!3†At'†Cє0†AtЙH†C­!3†At€д'†Cє0†At3†At 3†BuU†BuЙW†CЎ U†CЫ ЙY†C‘U†CƒLKOM&YЙQ†Cл!3†At'†Cє0†AtЙH†C­!3†At€д'†Cє0†At3†At 3†A†C‘KON&WЙQ†Cл!3†At'†Cє0†AtЙH†C­!3†At€д'†Cє0†At3†At 3†A†CЎ KOO&2Н‚€ЙH†C­!3†At€д'†Cє0†AtUІA“ 3†AtUІA“ ЙW†CЎ U†CЎ ЙY†C‘U†C‘LKOR&=Н‚€ ЙH†C­!3†At€ '†Cє0†At3†AtUІA“ ЙQ†Cл!3†At'†Cє0†AtUІA“ &XU†CЎ &TU†Cє&ZU†CєLKOU&Z3†A(&Z3†A(0†At&Z3†A(0†At3†At 3†AtB&Z3†A(0†At3†At€џџ 3†AtB3†At 2†AtKOX&Н‚€ƒЙH†C­!3†At€ '†Cє0†AtUІA“ &ZU†C” &[U†C‘LKO[&"Н‚€ ЙH†C­!3†At€ '†Cє0†AtUІA“ &[U†CЎ &\U†CєLKO^&S3†At2†AtK:e)f&S3†At5†AtK)eЙS†AtЙH†C­!3†At€ '†Cє0†At"8gSO_&^ЙS†At3†A(&\ЙS†At3†A(0†At3†At 3†At€џ$3†At€џ&\ЙS†At3†A(0†At3†At 3†At€€џџ"3†At€€џџ&\ЙS†At3†A(0†At3†At CBCB,„!2„!KO`T:f)gOc&д Н‚€t3†At€q§U†AtЙH†C­!3†At€ '†Cє0†AtUІA“ &^U†C‘LKOh3†At€­@†CƒЙH†C­!3†At€ '†Cє0†At3†BuU†Bu3†AtU†At&]U†CƒLKOi&— Н‚€?ЙH†C­!3†At€ '†Cє0†AtUІA“ ЙR†AtUІA“ ЙL†C‘U†C‘&]U†Cє&^U†CЎ ЙV†CЎ U†CЎ LKOj3†At€­@†CƒЙH†C­!3†At€ '†Cє0†At3†BuU†Bu3†AtU†AtЙL†C‘U†CƒLKOm&U3†At€@2†AtKOn&UЙU†At3†At€}џџџЙH†C­!3†At€ '†Cє0†At,„!,†At2†AtKOo&UЙU†At3†Atѓ&DН†At€ЙH†C­!3†At€(Є'†Cє0†At3†At U†AtL,„!,†At2†AtKOp&UЙU†At3†At€ыЙH†C­!3†At€Д'†Cє0†At,„!,†At2†AtKOq&UЙU†At3†AtсЙJ†Cћ!3†At€ˆ'†Cє0†At3†At 2†AtKOr&UЙU†At3†At€џ$3†At€џЙU†At3†At€€џџ"3†At€€џџЙU†AtCBCB2†AtKOwOxOyЙJ†Cћ!3†Ath'†Cє&[Н†At€ЙH†C­!3†At€ '†Cє0†AtUІA“ ЙH†C­!3†At€Ф'†Cє0†AtUІA“ ЙU†At,„!UІA“ ЙH†C­!3†At€,Є'†Cє0†AtUІA“ ЙH†C­!3†At€М'†Cє0†AtU†AtЙH†C­!3†At€Є'†Cы U†CєЙJ†Cћ!3†At'†Cы U†CєЙJ†Cћ!3†At'†Cы U†CєЙJ†Cћ!3†Atl'†CЭ"U†CєЙL†C‘U†CЎ L2†AtKOzT)POGTTOœO{M   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t g f eP Nx†€.Lres†€JpsEncCtrl†€ћHpsEnc†€­ Zauto_corr†DЁ€OTscale†!tSi†t^A_Q12„ Ё€u[rc_Q15„ Ё€uRbuf_len†t]FiltState†@Ё€PQpsPredSt†€лUthrhld_Q15†tWx_buf_ptr†€.\A_Q24†@Ё€PVx_buf†€.YWsig_ptr†€XWsig„€РЁ€   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёз ž!о –!Ž!›!Ќ!М!Ў!ё!Џ!в!А!з!Б!о!В!к!Д!Š"р!ф!ь!Œ"э!Ž"ю!ˆ"њ!ў!M!tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ ’ “ ” Љ Ў Д Т Ы Я а д з о ы ѕ ‚!ƒ!Ž!–!›!ž!Ќ!­!Ў!Џ!А!Б!В!Д!М!в!з!к!л!м!о!р!ф!ь!э!ю!ё!њ!ћ!ў!ˆ"Š"Œ"Ž"О"П"Э"є"­#ˆ$‰$‹$Œ$Ž$$$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glb.cil$in.cil$exъ1.cil$sy% .cil$db?/3001 1284597036 100666 27601 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТБk ,e‘Lj.drectveQ, .cil$fg }@@.cil$glт ‰@@.cil$ink@@.cil$ex.Ll@@.cil$sy+ š\@@.cil$dbШХi@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_find_LTP_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_find_LTP_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2€2€ovо V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_find_ltp_fix.cЕВkЅгј]ђž™’юФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ SKP_min_int†€€­€aШ SKP_min_32†€€Ы€ПШSKP_max_int†€€е€ШSKP_max_16„€€Z€LШ%SKP_max_32†€€ѓ€{Ш=SKP_Silk_CLZ_FRAC‚€€ш€$9Шж iSKP_DIV32_varQ†€M€€y€щШж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШЇSKP_Silk_find_LTP_FIX‚€€(€#€kh ж љ  р %i "+8LLSKP_Silk_fit_LTP‚€ј€ŸJ€Б Vh SKP_Silk_corrMatrix_FIX‚€SKP_Silk_corrVector_FIX‚€+SKP_Silk_solve_LDL_FIX‚€ѕ Кsize_tu"SKP_Silk_regularize_correlations_FIX‚€ђ ЃSA_AttrTarget€) SKP_Silk_sum_sqr_shift‚€HАSA_Parameter€)† strnlen†€ЎSA_Method€)†@ Лwchar_t!€ wcsnlen†€8SKP_Silk_residual_energy16_covar_FIX†€ћљ SKP_Silk_lin2log†€рSKP_Silk_scale_vector32_Q26_lshift_18‚€ў [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOO€ O €ўO3 f0" D ЄBEOœO/SS&ЇF-_-]-[-Y-W-U-S-Q-O-MLOSO0O1O2O4O5O6O7O9O:O;OO@&gЙM†C‘2†C‘KOA&iЙO†Cє2†CєKOB&eЙS†CЎ Й]ІA“ 3†A(2†CЎ KOC&c3†At2†AtK:)‚&c3†At5†AtK)Йc†At3†At"8ƒSODЙc†At3†At8„SOE&eЙU†CЎ Й]ІA“ 3†A(2†CЎ KOFTOG)„&fЙe†CЎ ЙW†C” Йc†At3†A(0ІA“ 3†At3†A2†CЎ KOI& Н‚€IЙ[ІA“ U†AtЙe†CЎ U†CЎ &vU†Cє&~Йc†At3†A(U†CєLKOK&y&ж Н†At€&~Йc†At3†A(0†AtU†AtL2†AtKOLЙy†At3†At"8…SOM&~Йc†At3†A(3†AtЙy†At3†At&~Йc†At3†A(0†At3†At &~Йc†At3†A(0†At3†At &~Йc†At3†A(0†At3†AtЙy†At3†At 3†At3†At CB2†AtKON&v3†AtЙy†At†AtKOOTOP)…Й_†CєЙc†At3†A(Йv†At2†AtKOQ& Н‚€яЙ_†CєЙc†At3†A(U†CєЙi†CєU†Cє3†AtUІA“ Й[ІA“ UІA“ Йf†CЎ U†CЎ LKOS&Н‚€№Й_†CєЙc†At3†A(0†AtUІA“ &}U†Cє3†AtUІA“ Й[ІA“ UІA“ Йe†CЎ U†CЎ Йf†CЎ U†CЎ LKOTЙ_†CєЙc†At3†A(0†AtЙv†At$8†SOU&~Йc†At3†A(&~Йc†At3†A(0†AtЙ_†CєЙc†At3†A(0†AtЙv†At 2†AtKOVTOW)†3‚KOY&h&~Йc†At3†A(0†At3†At3†At 3†AtB&~Йc†At3†A(0†At3†At3†At€џџ 3†AtB3†At 2†AtKOZ&"Н‚€ѓ3†AtU†AtЙh†AtU†At&~Йc†At3†A(U†CєЙi†CєU†CєLKO\&+Н‚€і&jU†Cє&}U†C” 3†AtU†AtЙi†CєU†CєLKO_&LН‚€љЙg†C‘U†C‘&jU†CєLKOb&mЙc†At3†A(&8Н†At€ќ3†AtU†At3†AtU†At&~Йc†At3†A(0†AtU†At&}U†C” Йi†CєU†C” Йg†C‘U†CЎ L2†AtKOe&u&Н†At€ 3†AtU†AtЙ_†CєЙc†At3†A(0†AtU†AtL2†AtKOfOg&t3†At€€3†AtЙu†At 3†At€џџџ3†AtЙu†At $&mЙc†At3†A(0†At3†At ЙY†C” Йc†At3†A(0ІA“ ,„!,†At&mЙc†At3†A(0†At3†At€џџ ЙY†C” Йc†At3†A(0ІA“ ,„!,†At3†At 3†At€€3†AtЙu†At $3†At€€3†AtЙu†At &mЙc†At3†A(0†At3†At ЙY†C” Йc†At3†A(0ІA“ ,„!,†At&mЙc†At3†A(0†At3†At€џџ ЙY†C” Йc†At3†A(0ІA“ ,„!,†At3†At 3†At€џџџ3†AtЙu†At "3†At€џџџ3†AtЙu†At &mЙc†At3†A(0†At3†At ЙY†C” Йc†At3†A(0ІA“ ,„!,†At&mЙc†At3†A(0†At3†At€џџ ЙY†C” Йc†At3†A(0ІA“ ,„!,†At3†At CBCB&mЙc†At3†A(0†At3†At ЙY†C” Йc†At3†A(0ІA“ ,„!,†At&mЙc†At3†A(0†At3†At€џџ ЙY†C” Йc†At3†A(0ІA“ ,„!,†At3†At 3†At€џџџ3†AtЙu†At $3†At€џџџ3†AtЙu†At &mЙc†At3†A(0†At3†At ЙY†C” Йc†At3†A(0ІA“ ,„!,†At&mЙc†At3†A(0†At3†At€џџ ЙY†C” Йc†At3†A(0ІA“ ,„!,†At3†At 3†At€€3†AtЙu†At "3†At€€3†AtЙu†At &mЙc†At3†A(0†At3†At ЙY†C” Йc†At3†A(0ІA“ ,„!,†At&mЙc†At3†A(0†At3†At€џџ ЙY†C” Йc†At3†A(0ІA“ ,„!,†At3†At CBCBCB3†AtЙu†At Й[ІA“ 3†At 3†At€Й[ІA“ 3†At€џџ 3†At€3†At Й_†CєЙc†At3†A(0†AtЙu†At 2†AtKOh&tЙt†At3†At$Йt†At3†AtCB2†AtKOi3‚KOj&sЙY†C” Йc†At3†A(0ІA“ ,†At3†At Йt†At2†AtKOk&sЙs†At3†AtЙ_†CєЙc†At3†A(0†AtЙu†At3†At 2†AtKOn&p3†At2†AtKOo&b3†At2†AtK:А)Б&b3†At5†AtK)АЙb†At3†At"8ВSOp&pЙi†CєЙb†At3†A(0†AtЙp†At$Йi†CєЙb†At3†A(0†AtЙp†AtCB2†AtKOqT:Б)ВOr&d&ж Н†At€Йp†AtU†AtL3†At3†At2†AtKOs3‚KOt3†AtЙd†At3†At"8ДSOu&s& Н†At€ 3†At3†AtЙd†At U†AtЙs†AtU†AtL2†AtKOvTOx)Д&рН‚€џ3†AtU†AtЙs†AtU†AtЙi†CєU†CєLKOz&oЙc†At3†A(Йi†Cє3†A00†At2†AtKO{3‚KO}&eЙ[ІA“ 3†A†CЎ KO~&g3†A †C‘KO&i3†Ad†CєKO€€T:‚)ƒO€‚&w3†At2†AtKO€ƒ&c3†At2†AtK:З)И&c3†At5†AtK)ЗЙc†At3†At"8ЙSO€„&w&Н†At€ Йw†AtU†AtЙ_†CєЙc†At3†A(0†AtU†AtL2†AtKO€…T:И)ЙO€ˆЙQ†Cє3†Cƒ 8ЛSO€‰&{3†At2†AtKO€Š&z3†At2†AtKO€‹3‚KO€Œ&c3†At2†AtK:Н)О&c3†At5†AtK)НЙc†At3†At"8ПSO€&zЙz†At&~Йc†At3†A(0†At3†At ЙY†C” Йc†At3†A(0ІA“ ,„!,†At&~Йc†At3†A(0†At3†At€џџ ЙY†C” Йc†At3†A(0ІA“ ,„!,†At3†At 3†At3†AtЙw†AtЙ_†CєЙc†At3†A(0†At 2†AtKO€Ž&{Й{†At&mЙc†At3†A(0†At3†At ЙY†C” Йc†At3†A(0ІA“ ,„!,†At&mЙc†At3†A(0†At3†At€џџ ЙY†C” Йc†At3†A(0ІA“ ,„!,†At3†At 3†At3†AtЙw†AtЙ_†CєЙc†At3†A(0†At 2†AtKO€T:О)ПO€&{Й{†At3†At$Й{†At3†AtCB2†AtKO€’&|&iН†At€N3†AtUІA“ Й{†AtUІA“ Йz†AtUІA“ L2†AtKO€“ЙQ†Cє3†At&љ Н†At€Й|†AtUІA“ L3†At€,„!,†At2†AtKO€•3‚KO€–TO€š)Л&gЙM†C‘2†C‘KO€›&c3†At2†AtK:Ю)Я&c3†At5†AtK)ЮЙc†At3†At"8аSO€œ&lЙc†At3†A(3†At2†AtKO€&b3†At2†AtK:б)в&b3†At5†AtK)бЙb†At3†At"8гSO€ž&lЙc†At3†A(Йg†C‘Йb†At3†A(0„!,†At†AtKO€ŸT:в)гO€ &g3†A †C‘KO€ЁT:Я)аO€І&q3†At2†AtKO€Ї&r3†At2†AtKO€Ј&c3†At2†AtK:д)е&c3†At5†AtK)дЙc†At3†At"8жSO€Љ&q&%Н†At€ &lЙc†At3†A(0†At3†At$&lЙc†At3†A(0†At&lЙc†At3†A(0†AtCBU†AtЙq†AtU†AtL2†AtKO€Ќ&r&%Н†At€ 3†At &ж Н†At€&oЙc†At3†A(0†AtU†AtLЙ_†CєЙc†At3†A(0†AtЙw†AtU†AtЙr†AtU†AtL2†AtKO€­T:е)жO€А3‚KO€Г&uЙr†At3†At &ж Н†At€Йq†AtU†AtL3†At2†AtKO€Ж&u3†AtЙw†At†AtKO€З&u&Н†At€ 3†AtU†AtЙu†AtU†AtL2†AtKO€Й&xЙw†AtЙu†At2†AtKO€Л&s3†At€Йw†AtЙu†At 3†At2†AtKO€М&3†At2†AtKO€Н&c3†At2†AtK:и)й&c3†At5†AtK)иЙc†At3†At"8кSO€П&sЙs†At&oЙc†At3†A(0†AtЙx†AtЙ_†CєЙc†At3†A(0†At 2†AtKO€Р&Й†At&oЙc†At3†A(0†AtЙx†AtЙ_†CєЙc†At3†A(0†At 3†At &lЙc†At3†A(0†At,„!,†At&oЙc†At3†A(0†AtЙx†AtЙ_†CєЙc†At3†A(0†At 3†At€џџ &lЙc†At3†A(0†At,„!,†At3†At &oЙc†At3†A(0†AtЙx†AtЙ_†CєЙc†At3†A(0†At &lЙc†At3†A(0†At3†At 3†At3†At 3†At 2†AtKO€СT:й)кO€Т&€&iН†At€N3†At UІA“ Йs†AtUІA“ Й†AtUІA“ L2†AtKO€Ф&gЙM†C‘2†C‘KO€Х&c3†At2†AtK:п)р&c3†At5†AtK)пЙc†At3†At"8сSO€Ч3†AtЙ_†CєЙc†At3†A(0†At3†At$8тSO€Ш&s&oЙc†At3†A(0†At3†AtЙ_†CєЙc†At3†A(0†At 2†AtKO€ЩT:у)тSO€Ъ&s3†At€€Й_†CєЙc†At3†A(0†At3†At 3†At€џџџЙ_†CєЙc†At3†A(0†At3†At $&oЙc†At3†A(0†At3†At€€Й_†CєЙc†At3†A(0†At3†At $3†At€€Й_†CєЙc†At3†A(0†At3†At &oЙc†At3†A(0†At3†At€џџџЙ_†CєЙc†At3†A(0†At3†At "3†At€џџџЙ_†CєЙc†At3†A(0†At3†At &oЙc†At3†A(0†AtCBCB&oЙc†At3†A(0†At3†At€џџџЙ_†CєЙc†At3†A(0†At3†At $3†At€џџџЙ_†CєЙc†At3†A(0†At3†At &oЙc†At3†A(0†At3†At€€Й_†CєЙc†At3†A(0†At3†At "3†At€€Й_†CєЙc†At3†A(0†At3†At &oЙc†At3†A(0†AtCBCBCBЙ_†CєЙc†At3†A(0†At3†At 2†AtKO€ЫT)уO€ЭO€б&n3†At€fff3†At€™Йs†AtЙ€†At&lЙc†At3†A(0†At3†At 3†Bu€€ 3†AtЙ€†At&lЙc†At3†A(0†At3†At 3†Bu€€ 3†Bu€€ 3†At€€Й€†At&lЙc†At3†A(0†At3†At CBЙ€†At3†Bu€€ &lЙc†At3†A(0†At3†At 3†Bu€€ 3†At€џџџЙ€†At&lЙc†At3†A(0†At3†At CBCB3†At€џџџ$3†At€џџџЙ€†At&lЙc†At3†A(0†At3†At 3†Bu€€ 3†AtЙ€†At&lЙc†At3†A(0†At3†At 3†Bu€€ 3†Bu€€ 3†At€€Й€†At&lЙc†At3†A(0†At3†At CBЙ€†At3†Bu€€ &lЙc†At3†A(0†At3†At 3†Bu€€ 3†At€џџџЙ€†At&lЙc†At3†A(0†At3†At CBCB3†At€ј"3†At€јЙ€†At&lЙc†At3†A(0†At3†At 3†Bu€€ 3†AtЙ€†At&lЙc†At3†A(0†At3†At 3†Bu€€ 3†Bu€€ 3†At€€Й€†At&lЙc†At3†A(0†At3†At CBЙ€†At3†Bu€€ &lЙc†At3†A(0†At3†At 3†Bu€€ 3†At€џџџЙ€†At&lЙc†At3†A(0†At3†At CBCBCBCB3†At 2†AtKO€г&s3†At2†AtKO€д&b3†At2†AtK:)&b3†At5†AtK)Йb†At3†At"8SO€е&kЙb†At3†A(&Н„!€3†At€fU„!Йg†C‘Йb†At3†A(0„!U„!L2†AtKO€ж&s&kЙb†At3†A(0†At†AtKO€зT:)O€и&sЙn†AtЙs†At2†AtKO€й&b3†At2†AtK:)&b3†At5†AtK)Йb†At3†At"8SO€кЙg†C‘Йb†At3†A(Йg†C‘Йb†At3†A(0„!,†AtЙs†At3†At€џџџ$3†At€џџџЙs†At3†At€ј"3†At€јЙs†AtCBCB3†At 3†At &kЙb†At3†A(0†At,„!,†AtЙs†At3†At€џџџ$3†At€џџџЙs†At3†At€ј"3†At€јЙs†AtCBCB3†At 3†At€џџ &kЙb†At3†A(0†At,„!,†At3†At 3†At€`m$3†At€`mЙg†C‘Йb†At3†A(0„!,†AtЙs†At3†At€џџџ$3†At€џџџЙs†At3†At€ј"3†At€јЙs†AtCBCB3†At 3†At &kЙb†At3†A(0†At,„!,†AtЙs†At3†At€џџџ$3†At€џџџЙs†At3†At€ј"3†At€јЙs†AtCBCB3†At 3†At€џџ &kЙb†At3†A(0†At,„!,†At3†At 3†At€€Сџџ"3†At€€СџџЙg†C‘Йb†At3†A(0„!,†AtЙs†At3†At€џџџ$3†At€џџџЙs†At3†At€ј"3†At€јЙs†AtCBCB3†At 3†At &kЙb†At3†A(0†At,„!,†AtЙs†At3†At€џџџ$3†At€џџџЙs†At3†At€ј"3†At€јЙs†AtCBCB3†At 3†At€џџ &kЙb†At3†A(0†At,„!,†At3†At CBCB2„!KO€лT:)O€м&g3†A †C‘KO€нT:р)сO€оT)aOGTTO€ O €ўO3 f0" D ЄBEOœO€фSS&LF-v-tLOSO€хO€ч&y3†At2†AtK:z){&y3†At5†AtK)zЙy†At3†At"8|SO€шЙv†C‘Йy†At3†A(Йt†CєЙy†At3†A(0†At3†At 3†At3†At 3†At€џ$3†At€џЙt†CєЙy†At3†A(0†At3†At 3†At3†At 3†At€€џџ"3†At€€џџЙt†CєЙy†At3†A(0†At3†At 3†At3†At CBCB,„!2„!KO€щT:{)|O€ъT)xOGTTOœO€ыM   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t     утс р пк й иж е дг в ба Я ЮП О НЛЙ И ЗДВ Б А†…„ƒ ‚ a _corr_rshifts†€t]mem_offset†€[subfr_length†€YWght_Q15†€Wlag†€Ur_last†€.Sr_first†€.QLTPredCodGain_Q7†€tOWLTP†€tMb_Q14†€ ow†€cmnrg†€cld_Q14†€crmax_w_bits†tng_Q26†twmaxRshifts†tstemp32†tpWLTP_max†tflag_ptr†€.er_ptr†€.bi†t{LPC_LTP_res_nrg†tqmax_abs_d_Q14†tgb_Q14_ptr†€€m_Q12†txmaxRshifts_wxtra†twd†tzLPC_res_nrg†tjb_Q16†Ё€bkdelta_b_Q14†€byLZs†tuextra_shifts†thregu†tck†t~rr†Ё€ciWLTP_ptr†€tdlshift†tvrr_shifts†!ttdenom32†t}Rr†Ё€b|div_Q16†t                  | { zx vLTP_coefs_Q14†€tLTP_coefs_Q16†€t yi†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё0!tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Ÿ   Љ Ў Ш Щ Э Ю т у "’"я#№#ђ#ѓ#ѕ#і#ј#љ#ћ#ќ#ў#џ#$‚$„$…$‡$@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$glт .cil$in.cil$ex.L.cil$sy+ .cil$dbШ /3035 1284597036 100666 19274 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТ*K ,e‘LJ.drectveQ, .cil$fg }@@.cil$gl ‰@@.cil$inŒ@@.cil$exв/@@.cil$syі _>@@.cil$dbБUI@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_find_LPC_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_find_LPC_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j22€ovџ V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_find_lpc_fix.cNt?•F |К/cЌ˜`kФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШSKP_Silk_find_LPC_FIX‚€ю€(€#€ hО  lЛЦбО SKP_Silk_LPC_analysis_filter‚€ъ Кsize_tuбSKP_Silk_interpolate‚€чЦSKP_Silk_NLSF2A_stable‚€‚lSKP_Silk_A2NLSF‚€'ЛSKP_Silk_burg_modified‚€R ЃSA_AttrTarget€) SKP_Silk_sum_sqr_shift‚€HАSA_Parameter€)† strnlen†€ЎSA_Method€)†@ Лwchar_t!€ wcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOO€ O €ўO3 f0" D ЄBEOœO(SS&F-T-R-P-N-L-J-HLOSO)O*O,O-O.O/O2O3O4O5O6O9ЙJ†Cє3†At2†AtKO<&ЛН‚€фЙPІA“ UІA“ 3†At€ЂюUІA“ 3†AtUІA“ ЙTІA“ UІA“ ЙR†CЎ U†CЎ &XU†Cє&fU†Cє&bU†CєLKO>ЙNІA“ 3†At8lSOAOB&ЛН‚€фЙPІA“ UІA“ 3†At€ЂюUІA“ 3†AtUІA“ ЙTІA“ UІA“ ЙR†CЎ 3†AtЙTІA“ 3†AU†CЎ &`U†Cє&gU†Cє&cU†CєLKOF&ZЙg†AtЙf†At2†AtKOGЙZ†At3†At#8mSOHЙZ†At3†At "8nSOI&bЙb†AtЙc†AtЙZ†At 2†AtKOJTOK)nT:o)mSOL3‚KOM&bЙb†AtЙZ†At Йc†At2†AtKON&fЙg†At2†AtKOOT)oOR&lН‚€хЙPІA“ UІA“ &`U†CєЙH†CєU†CєLKOU&d3†At€џџџ2†AtKOV&W3†At2†AtK:q)r&W3†At6†AtK)qЙW†At3†At#8sSOX&бН‚€шЙPІA“ UІA“ ЙW†AtUІA“ ЙH†CєU†C” ЙL†C” U†C” &jU†CєLKO[&ЦН‚€ƒЙPІA“ UІA“ &jU†C” &iU†C‘LKO^3†At€­@†CƒЙPІA“ 3†BuU†Bu3†AtU†At&[U†CƒLKO_&О Н‚€ыЙPІA“ UІA“ 3†AtЙTІA“ UІA“ &kU†C‘&[U†C‘&iU†CЎ ЙR†CЎ U†CЎ LKOa& Н‚€IЙTІA“ ЙPІA“ U†At&kЙPІA“ 3†AU†CЎ &^U†Cє&\U†CєLKOb& Н‚€IЙTІA“ ЙPІA“ U†At&kЙPІA“ 3†AЙTІA“ 3†AU†CЎ &_U†Cє&]U†CєLKOe&ZЙ^†AtЙ_†At2†AtKOfЙZ†At3†At#8uSOg&]Й]†AtЙZ†At 2†AtKOh&eЙ^†At2†AtKOiT:v)uSOj&\Й\†AtЙZ†At 2†AtKOk&eЙ_†At2†AtKOlT)vOm&aЙ\†AtЙ]†At2†AtKOp&ZЙe†AtЙf†At2†AtKOqЙZ†At3†At#8wSOrЙa†AtЙZ†At Йb†At"8xSOs&Y3†At2†AtKOtT:y)xSOu&Y3†At2†AtKOvT)yOwT:z)wSOxЙZ†At3†At "8{SOyЙa†AtЙb†AtЙZ†At "8|SOz&Y3†At2†AtKO{T:})|SO|&Y3†At2†AtKO}T)}O~T:~){SO&Y3†At2†AtKO€€T)~O€T)zO€„ЙY†At3†At8SO€†&bЙa†At2†AtKO€‡&fЙe†At2†AtKO€ˆЙJ†CєЙW†At2†AtKO€‰TO€Š)&dЙa†At2†AtKO€‹&hЙe†At2†AtKO€ŒT:r)sO€TO€)lЙJ†Cє0†At3†At8€SO€‘&lН‚€хЙPІA“ UІA“ &XU†CєЙH†CєU†CєLKO€’TO€“)€T)VOGTTOœO€”M   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t €~}|{zyxwvus r qonmlV Tsubfr_length†€Rx†€.PLPC_order†€NuseInterpolatedNLSFs†€Lprev_NLSFq_Q15†€JinterpIndex†€tHNLSF_Q15†€t kLPC_res„€ Ё€ь\res_nrg0†!tbres_nrg†!tjNLSF0_Q15†@Ё€Pcres_tmp_nrg†!tares_nrg_interp†t]res_nrg1†!teres_nrg_interp_Q†t_rshift1†!t[S„ Ё€uia_tmp_Q12„ Ё€udres_nrg_2nd†thres_nrg_2nd_Q†t`a_tmp_Q16†@Ё€PWk†tfres_nrg_Q†!tYisInterpLower†tgres_tmp_nrg_Q†!tXa_Q16†@Ё€P^rshift0†!tZshift†t                   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё$!tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Ї Љ Ў Ш Щ а в ѕ ‚!ƒ!ф#х#ч#ш#ъ#ы#ь#ю#@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$gl .cil$in.cil$exв/.cil$syі .cil$dbБ/3069 1284597036 100666 21940 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТ”U ,e‘LpT.drectveQ, .cil$fg}@@.cil$gl6 ‹@@.cil$inС@@.cil$ex№7Т@@.cil$sy§ ВG@@.cil$dbСЏS@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_encode_pulses.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_encode_pulses.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2Љ2€ov2 V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_encode_pulses.cџtкQ5CŒЭiРxђЏТФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШPcombine_and_check†€й€(€#MШџSKP_Silk_encode_pulses‚€Ю€о)€с€Xh кмнпрцчPSKP_Silk_range_encoder‚€ЁкSKP_Silk_pulses_per_block_CDF„€Є!€‡ SKP_Silk_range_coder_state€ž SKP_Silk_range_coder_state€žцSKP_Silk_lsb_CDF„!€Њ Мsize_tuчSKP_Silk_encode_signs‚€ЇмSKP_Silk_pulses_per_block_BITS_Q6„€h!€с ЃSA_AttrTarget€)нSKP_Silk_rate_levels_CDF„(!€‰рSKP_Silk_max_pulses_table†€dАSA_Parameter€)†SKP_Silk_shell_encoder‚€мпSKP_Silk_rate_levels_BITS_Q6„$€у4strnlen†€ЎSA_Method€)†@ Нwchar_t!Ћwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœOO€ O €ўO3 f0" D ЄBEOœO(SS&PF-N-L-J-HLOSO)O+&R3†At2†AtK:T)U&R3†At5†AtK)TЙR†AtЙN†At"8VSO,&SЙJ†C” 3†AtЙR†At3†A(0ІA“ ЙJ†C” 3†AtЙR†At3†At3†A(0ІA“ 2†AtKO-ЙS†AtЙL†At$8WSO.3†AtA†At:QO/TO0)WЙH†CєЙR†At3†A(ЙS†At2†AtKO1T:U)VO33†AtA†At:QO4T)QOGTTO€ O €ўO3 f0" D ЄBEOœO>SS&џF-`-^-\-Z-XLOSO?&j3†At2†AtKO@OAOBOCODOEOFOGOHOJ3†At€­@†Cƒ3†Bu U†Bu3†AtU†At&qU†CƒLKOP&fЙ`ІA“ 3†At2†AtKOS&c3†At2†AtK:w)x&c3†At†AtK)wЙc†AtЙ`ІA“ "8ySOT&nЙc†At3†At3†A(Й^†C” Йc†At3†At3†A(0ІA“ 3†At$Й^†C” Йc†At3†At3†A(0ІA“ Й^†C” Йc†At3†At3†A(0ІA“ CB,†At2†AtKOU&nЙc†At3†At3†A(Й^†C” Йc†At3†At3†A(0ІA“ 3†At$Й^†C” Йc†At3†At3†A(0ІA“ Й^†C” Йc†At3†At3†A(0ІA“ CB,†At2†AtKOV&nЙc†At3†At3†A(Й^†C” Йc†At3†At3†A(0ІA“ 3†At$Й^†C” Йc†At3†At3†A(0ІA“ Й^†C” Йc†At3†At3†A(0ІA“ CB,†At2†AtKOW&nЙc†At3†At3†A(Й^†C” Йc†At3†At3†A(0ІA“ 3†At$Й^†C” Йc†At3†At3†A(0ІA“ Й^†C” Йc†At3†At3†A(0ІA“ CB,†At2†AtKOXT:x)yO[&r&n2†CєKO\&c3†At2†AtK:~)&c3†At5†AtK)~Йc†AtЙf†At"8€SO]&pЙc†At3†A(3†At2†AtKO_)‚3†At8ƒSOa&i&PН†At€к3†AtU†At&р3†A(0ІA“ U†AtЙr†CєU†C” &qU†CєL2†AtKOd&i&PН†At€к3†AtU†At&р3†A(0ІA“ U†At&qU†C” &qU†CєL†AtKOg&i&PН†At€к3†AtU†At&р3†A(0ІA“ U†At&qU†C” &qU†CєL†AtKOj&oЙc†At3†A(&q3†A(0†At&q3†A(0†At2†AtKOk&oЙc†At3†A(0†At&р3†A (0ІA“ $8„SOl&i3†At5†AtKOmTOo)„Йi†At8…SOq&pЙc†At3†A(3†At5†AtKOr&d3†At2†AtK:†)‡&d3†At5†AtK)†Йd†At3†At"8ˆSOsЙr†CєЙd†At3†A(Йr†CєЙd†At3†A(0†At3†At 2†AtKOtT:‡)ˆOuT:‰)…SOw:ƒOxT)‰OyT:‚)ƒOz&r3†A@†CєKO{T:)€O€&l3†At€џџџ2†AtKO€‚&d3†At2†AtK:Š)‹&d3†At5†AtK)ŠЙd†At3†At "8ŒSO€ƒ&u&мЙd†At3†A((2†CЎ KO€„&m&пЙZІA“ 3†A(Йd†At3†A(0Є!­ 2†AtKO€…&c3†At2†AtK:)Ž&c3†At5†AtK)Йc†AtЙf†At"8SO€†&pЙc†At3†A(0†At3†At$8SO€‡&mЙu†CЎ 3†A&(0Є!­ ,†At†AtKO€ˆT:‘)SO€‰&mЙu†CЎ &oЙc†At3†A(0†At3†A(0Є!­ ,†At†AtKO€ŠT)‘O€‹T:Ž)O€ŒЙm†AtЙl†At"8’SO€&lЙm†At2†AtKO€Ž&jЙd†At2†AtKO€TO€)’T:‹)ŒO€‘&Н‚€Ђ&нЙZІA“ 3†A(U†C’!Йj†AtUІA“ ЙX†CŸ!U†CŸ!LKO€–&t&кЙj†At3†A*(2†C’!KO€—&c3†At2†AtK:“)”&c3†At5†AtK)“Йc†AtЙf†At"8•SO€˜&pЙc†At3†A(0†At3†At8–SO€™&Н‚€ЂЙt†C’!U†C’!&oЙc†At3†A(0†AtUІA“ ЙX†CŸ!U†CŸ!LKO€šT:—)–SO€›&Н‚€ЂЙt†C’!U†C’!3†AtUІA“ ЙX†CŸ!U†CŸ!LKO€œ&d3†At2†AtK:˜)™&d3†At5†AtK)˜Йd†At&pЙc†At3†A(0†At3†At"8šSO€&Н‚€Ђ&к3†A€z(U†C’!3†AtUІA“ ЙX†CŸ!U†CŸ!LKO€žT:™)šO€Ÿ&Н‚€Ђ&к3†A€z(U†C’!&oЙc†At3†A(0†AtUІA“ ЙX†CŸ!U†CŸ!LKO€ T)—O€ЁT:”)•O€І&c3†At2†AtK:›)œ&c3†At5†AtK)›Йc†AtЙf†At"8SO€Ї&oЙc†At3†A(0†At3†At$8žSO€Ј&Н‚€н&nЙc†At3†At3†A(U†C” ЙX†CŸ!U†CŸ!LKO€ЉTO€Њ)žT:œ)O€Џ&c3†At2†AtK:Ÿ) &c3†At5†AtK)ŸЙc†AtЙf†At"8ЁSO€А&pЙc†At3†A(0†At3†At$8ЂSO€Б&sЙ^†C” Йc†At3†At3†A(2†C” KO€В&h&pЙc†At3†A(0†At3†At2†AtKO€Г&d3†At2†AtK:Ѓ)Є&d3†At5†AtK)ЃЙd†At3†At"8ЅSO€Д&kЙs†C” Йd†At3†A(0ІA“ 3†At$Йs†C” Йd†At3†A(0ІA“ Йs†C” Йd†At3†A(0ІA“ CB2†AtKO€Е&eЙh†At2†AtK:І)Ї&e3†At6†AtK)ІЙe†At3†At$8ЈSO€Ж&gЙk†AtЙe†At 3†At 2†AtKO€З&Н‚€Ђ&цU†C’!Йg†AtUІA“ ЙX†CŸ!U†CŸ!LKO€ИT:Ї)ЈO€Й&gЙk†At3†At 2†AtKO€К&Н‚€Ђ&цU†C’!Йg†AtUІA“ ЙX†CŸ!U†CŸ!LKO€ЛT:Є)ЅO€МTO€Н)ЂT: )ЁO€Т&чН‚€оЙj†AtUІA“ Й\ІA“ UІA“ ЙZІA“ UІA“ Й`ІA“ UІA“ Й^†C” U†C” ЙX†CŸ!U†CŸ!LKO€УT)bOGTTOœO€ФM: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t WV U TQ Nlen†tLmax_pulses†tJpulses_in†€Hpulses_comb†€t Ssum†tRk†t  Ј Ї ІЅ Є ЃЂЁ   Ÿž œ ›š ™ ˜—–• ” “’‘ Ž Œ ‹ Љˆ ‡ †…„ƒ ‚ €  ~y x wb `frame_length†€^q†€\QuantOffsetType†€Zsigtype†€XpsRC†€Ÿ kabs_q†tpnRshifts†x€…lminSumBits_Q6†tfiter†thnLS†tci†ttcdf_ptr†€’msumBits_Q6†tosum_pulses†x€…spulses_ptr†€rabs_pulses_ptr†€tjRateLevelIndex†tiscale_down†tnabs_pulses†€€Ё€Zdk†tunBits_ptr†€.qpulses_comb† Ё€пgbit†tej†t                        ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёз ž!*!tuƒєƒ ˆ ‹ Œ Ž  ‘ “ ” Љ ­ Ў з к ’!ž!Ÿ!Ё!Ђ!Ї!Њ!ф"…#‡#‰#Ю#й#к#м#н#о#п#с#у#@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl6 .cil$in.cil$ex№7.cil$sy§ .cil$dbС/3104 1284597036 100666 21451 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТЋS ,e‘L‡R.drectveQ, .cil$fg}@@.cil$gl—™@@.cil$in0@@.cil$ex41@@.cil$sy9 3H@@.cil$dblQ@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_encode_parameters_v4.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_encode_parameters_v4.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2t2€ov“V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_encode_parameters_v4.c]t Уѕ•ц0` \*…ЭФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШ6SKP_Silk_encode_parameters_v4‚€Ц€(€#€chХЦШЪЬЮавджишыюёѓєі2SKP_Silk_range_encoder‚€Ё !SKP_Silk_NLSF_CB_struct€–юSKP_Silk_LTPscale_CDF„!€^ыSKP_Silk_LTP_gain_CDF_ptrs† €_ SKP_Silk_detect_SWB_state€вSKP_Silk_pitch_lag_SWB_CDF„€!€` ^SKP_Silk_encoder_control€  "SKP_Silk_encoder_state€ё SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_LP_state€  SKP_Silk_detect_SWB_state€ SKP_Silk_range_coder_state€ž ѕSKP_Silk_VAD_state€ №SKP_SILK_LBRR_struct€ф SKP_Silk_range_coder_state€ž Мsize_tuSKP_Silk_Seed_CDF„ !€aЦSKP_Silk_type_offset_joint_CDF„(!€bіSKP_Silk_NLSF_interpolation_factor_CDF„ !€cѓSKP_Silk_SamplingRates_table†€dЪSKP_Silk_delta_gain_CDF„\!€e SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)ёSKP_Silk_vadflag_CDF„!€ЊSKP_Silk_range_encoder_multi‚€жшSKP_Silk_LTP_per_index_CDF„!€^ХSKP_Silk_type_offset_CDF„ !€aЮSKP_Silk_pitch_lag_MB_CDF„€„!€fАSA_Parameter€)†2SKP_Silk_range_enc_init‚€}дSKP_Silk_pitch_contour_CDF„F!€g mSKP_Silk_encoder_control€ 4strnlen†€аSKP_Silk_pitch_lag_WB_CDF„€!€hЎSA_Method€)†@жSKP_Silk_pitch_contour_NB_CDF„!€i Нwchar_t!иSKP_Silk_pitch_delta_CDF„.!€jШSKP_Silk_gain_CDF„€!€lЬSKP_Silk_pitch_lag_NB_CDF„€!€mєSKP_Silk_SamplingRates_CDF„ !€aЋwcsnlen†€ SKP_Silk_VAD_state€ SKP_Silk_LP_state€  ]SKP_Silk_encoder_state€ё єSKP_SILK_LBRR_struct€ф [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœOO€ O €ўO3 f0" D ЄBEOœO&SS&6F-L-J-HLOSO'O(O)O0ЙH†CГ!3†At€и '†Cє0†At3†At8USO3&2Н‚€~ЙH†CГ!3†At'†CЅ"U†CŸ!LKO4ЙH†CГ!3†At€м '†Cє3†At2†AtKO7&O3†At2†AtK:V)W&O3†At5†AtK)VЙO†At3†At"8XSO8&ѓЙO†At3†A(0ІA“ ЙH†CГ!3†At€Ф'†Cє0†At8YSO9:XO:TO;)YT:W)XO<&Н‚€Ђ&єU†C’!ЙO†AtUІA“ ЙL†CŸ!U†CŸ!LKO=TOB)U&Н‚€Ђ&ёU†C’!ЙH†CГ!3†At€ј'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKOG&Q3†AtЙJ†CЕ!3†Ath'†Cє0†AtЙJ†CЕ!3†Atd'†Cє0†At2†AtKOHЙH†CГ!3†At€и '†Cє0†At3†At8ZSOJ&Н‚€Ђ&ХU†C’!ЙQ†AtUІA“ ЙL†CŸ!U†CŸ!LKOKT:[)ZSOM&Н‚€Ђ&ЦЙH†CГ!3†At€И'†Cє0†At3†A (U†C’!ЙQ†AtUІA“ ЙL†CŸ!U†CŸ!LKONT)[OOЙH†CГ!3†At€И'†CєЙQ†At2†AtKOUЙH†CГ!3†At€и '†Cє0†At3†At8\SOW&Н‚€Ђ&ШЙJ†CЕ!3†Ath'†Cє0†At3†A€‚(U†C’!ЙJ†CЕ!3†AtH'†Cы 3†A(0†AtUІA“ ЙL†CŸ!U†CŸ!LKOXT:])\SOZ&Н‚€Ђ&ЪU†C’!ЙJ†CЕ!3†AtH'†Cы 3†A(0†AtUІA“ ЙL†CŸ!U†CŸ!LKO[T)]O^&O3†At2†AtK:^)_&O3†At5†AtK)^ЙO†At3†At"8`SO_&Н‚€Ђ&ЪU†C’!ЙJ†CЕ!3†AtH'†Cы ЙO†At3†A(0†AtUІA“ ЙL†CŸ!U†CŸ!LKO`T:_)`Og&TЙH†CГ!3†At€ф '†Cц!ЙJ†CЕ!3†Ath'†Cє0†At3†A(0†Cр 2†Cр KOh&Н‚€зЙT†Cр 3†At'†C” 0ІA“ UІA“ ЙT†Cр 3†At'†Cе"0ІCд"U†C”!ЙJ†CЕ!3†At'†Cж"U†C” ЙL†CŸ!U†CŸ!LKOk3‚KOl&Н‚€Ђ&іU†C’!ЙJ†CЕ!3†AtD'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKOoЙJ†CЕ!3†Ath'†Cє0†At3†At8bSOv&R3†At2†AtKOwЙH†CГ!3†At€и '†Cє0†At3†At$8cЙH†CГ!3†At€Д'†Cє0†At3†At8cSOy&SЙJ†CЕ!3†At'†Cє0†AtЙH†CГ!3†At€Р'†Cє0†At2†AtKOzЙS†At3†At $8dSO{&S3†At2†AtKO|T:e)dЙS†At3†Atі"8fSO}&S3†At2†AtKO~T:g)fSO&SЙS†At3†At 2†AtKO€€&R3†At2†AtKO€T)g)eO€‚&Н‚€Ђ&иU†C’!ЙS†AtUІA“ ЙL†CŸ!U†CŸ!LKO€ƒTO€„)cЙR†At8hSO€†ЙH†CГ!3†At€Ф'†Cє0†At3†At8iSO€‡&Н‚€Ђ&ЬU†C’!ЙJ†CЕ!3†At'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKO€ˆT:j)iЙH†CГ!3†At€Ф'†Cє0†At3†At 8kSO€‰&Н‚€Ђ&ЮU†C’!ЙJ†CЕ!3†At'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKO€ŠT:l)kЙH†CГ!3†At€Ф'†Cє0†At3†At8mSO€‹&Н‚€Ђ&аU†C’!ЙJ†CЕ!3†At'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKO€ŒT:n)mSO€&Н‚€Ђ&вU†C’!ЙJ†CЕ!3†At'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKO€ŽT)n)l)jO€TO€)hЙH†CГ!3†At€Р'†CєЙJ†CЕ!3†At'†Cє0†At2†AtKO€”ЙH†CГ!3†At€Ф'†Cє0†At3†At8oSO€–&Н‚€Ђ&жU†C’!ЙJ†CЕ!3†At'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKO€—T:p)oSO€™&Н‚€Ђ&дU†C’!ЙJ†CЕ!3†At'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKO€šT)pO€Ё&Н‚€Ђ&шU†C’!ЙJ†CЕ!3†At'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKO€Є&P3†At2†AtK:q)r&P3†At5†AtK)qЙP†At3†At"8sSO€Ѕ&Н‚€Ђ&ыЙJ†CЕ!3†At'†Cє0†At3†A(0ІC“!U†C’!ЙJ†CЕ!3†At '†Cы ЙP†At3†A(0†AtUІA“ ЙL†CŸ!U†CŸ!LKO€ІT:r)sO€Ћ&Н‚€Ђ&юU†C’!ЙJ†CЕ!3†At\'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKO€ЌTO€В)b&Н‚€Ђ&U†C’!ЙJ†CЕ!3†AtX'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKO€ГT)NOGTTOœO€ДM: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t s r qponmlkjihgfedcb` _ ^]\[ZYX W VUN LpsRC†€ŸJpsEncCtrlC†€ЕHpsEncC†€Г QtypeOffset†tSdelta_lagIndex†tOi†tTpsNLSF_CB†€`Rencode_absolute_lagIndex†tPk†t                       ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё з ž!о –!Ž!›!Ў!ё!Д!Š"р!ф!ь!Œ"э!Ž"ю!ˆ"G!tuєƒ ˆ ‹ Œ Ž  ‘ “ ” Љ з о р ы Ž!’!“!”!–!›!ž!Ÿ!Ё!Ђ!Њ!Ў!Г!Д!Е!р!ф!ц!ь!э!ю!ё!ˆ"Š"Œ"Ž"Ѕ"д"е"ж"о"п"р"с"т"у"ф"х"ц"ч"ш"щ"ъ"ь"э"§"ў"Ц#ж#з#@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl—.cil$in.cil$ex4.cil$sy9 .cil$db /3146 1284597036 100666 20976 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТаQ ,e‘LЌP.drectveQ, .cil$fg}@@.cil$gl“@@.cil$in @@.cil$ex 2!@@.cil$syЮСF@@.cil$dbO@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_encode_parameters.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_encode_parameters.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2n2€ov‰V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_encode_parameters.cD•Вtжydchtћ(•;ЧФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШ/SKP_Silk_encode_parameters‚€Щ€(€#€hХЦШЪЬЮавджшыюёѓєіџ2SKP_Silk_range_encoder‚€Ё !SKP_Silk_NLSF_CB_struct€–юSKP_Silk_LTPscale_CDF„!€^ыSKP_Silk_LTP_gain_CDF_ptrs† €_ SKP_Silk_detect_SWB_state€вSKP_Silk_pitch_lag_SWB_CDF„€!€` ^SKP_Silk_encoder_control€  "SKP_Silk_encoder_state€ё SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_LP_state€  SKP_Silk_detect_SWB_state€ SKP_Silk_range_coder_state€ž ѕSKP_Silk_VAD_state€ №SKP_SILK_LBRR_struct€ф SKP_Silk_range_coder_state€ž Мsize_tuSKP_Silk_Seed_CDF„ !€aЦSKP_Silk_type_offset_joint_CDF„(!€bіSKP_Silk_NLSF_interpolation_factor_CDF„ !€cѓSKP_Silk_SamplingRates_table†€dЪSKP_Silk_delta_gain_CDF„\!€e SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)ёSKP_Silk_vadflag_CDF„!€ЊSKP_Silk_range_encoder_multi‚€жшSKP_Silk_LTP_per_index_CDF„!€^ХSKP_Silk_type_offset_CDF„ !€aЮSKP_Silk_pitch_lag_MB_CDF„€„!€fАSA_Parameter€)†2SKP_Silk_range_enc_init‚€}дSKP_Silk_pitch_contour_CDF„F!€g mSKP_Silk_encoder_control€ 4strnlen†€џSKP_Silk_encode_pulses‚€ЮаSKP_Silk_pitch_lag_WB_CDF„€!€hЎSA_Method€)†@жSKP_Silk_pitch_contour_NB_CDF„!€i Нwchar_t!ШSKP_Silk_gain_CDF„€!€lЬSKP_Silk_pitch_lag_NB_CDF„€!€mєSKP_Silk_SamplingRates_CDF„ !€aЋwcsnlen†€ SKP_Silk_VAD_state€ SKP_Silk_LP_state€  ]SKP_Silk_encoder_state€ё єSKP_SILK_LBRR_struct€ф [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœOO€ O €ўO3 f0" D ЄBEOœO'SS&/F-N-L-J-HLOSO(O)O0ЙH†CГ!3†At€и '†Cє0†At3†At8USO3&2Н‚€~ЙH†CГ!3†At'†CЅ"U†CŸ!LKO4ЙH†CГ!3†At€м '†Cє3†At2†AtKO7&Q3†At2†AtK:V)W&Q3†At5†AtK)VЙQ†At3†At"8XSO8&ѓЙQ†At3†A(0ІA“ ЙH†CГ!3†At€Ф'†Cє0†At8YSO9:XO:TO;)YT:W)XO<&Н‚€Ђ&єU†C’!ЙQ†AtUІA“ ЙL†CŸ!U†CŸ!LKO=TOB)U&S3†AtЙJ†CЕ!3†Ath'†Cє0†AtЙJ†CЕ!3†Atd'†Cє0†At2†AtKOCЙH†CГ!3†At€и '†Cє0†At3†At8ZSOE&Н‚€Ђ&ХU†C’!ЙS†AtUІA“ ЙL†CŸ!U†CŸ!LKOFT:[)ZSOH&Н‚€Ђ&ЦЙH†CГ!3†At€И'†Cє0†At3†A (U†C’!ЙS†AtUІA“ ЙL†CŸ!U†CŸ!LKOIT)[OJЙH†CГ!3†At€И'†CєЙS†At2†AtKOPЙH†CГ!3†At€и '†Cє0†At3†At8\SOR&Н‚€Ђ&ШЙJ†CЕ!3†Ath'†Cє0†At3†A€‚(U†C’!ЙJ†CЕ!3†AtH'†Cы 3†A(0†AtUІA“ ЙL†CŸ!U†CŸ!LKOST:])\SOU&Н‚€Ђ&ЪU†C’!ЙJ†CЕ!3†AtH'†Cы 3†A(0†AtUІA“ ЙL†CŸ!U†CŸ!LKOVT)]OY&Q3†At2†AtK:^)_&Q3†At5†AtK)^ЙQ†At3†At"8`SOZ&Н‚€Ђ&ЪU†C’!ЙJ†CЕ!3†AtH'†Cы ЙQ†At3†A(0†AtUІA“ ЙL†CŸ!U†CŸ!LKO[T:_)`Ob&TЙH†CГ!3†At€ф '†Cц!ЙJ†CЕ!3†Ath'†Cє0†At3†A(0†Cр 2†Cр KOc&Н‚€зЙT†Cр 3†At'†C” 0ІA“ UІA“ ЙT†Cр 3†At'†Cе"0ІCд"U†C”!ЙJ†CЕ!3†At'†Cж"U†C” ЙL†CŸ!U†CŸ!LKOf3‚KOg&Н‚€Ђ&іU†C’!ЙJ†CЕ!3†AtD'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKOjЙJ†CЕ!3†Ath'†Cє0†At3†At8bSOqЙH†CГ!3†At€Ф'†Cє0†At3†At8cSOr&Н‚€Ђ&ЬU†C’!ЙJ†CЕ!3†At'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKOsT:d)cЙH†CГ!3†At€Ф'†Cє0†At3†At 8eSOt&Н‚€Ђ&ЮU†C’!ЙJ†CЕ!3†At'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKOuT:f)eЙH†CГ!3†At€Ф'†Cє0†At3†At8gSOv&Н‚€Ђ&аU†C’!ЙJ†CЕ!3†At'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKOwT:h)gSOx&Н‚€Ђ&вU†C’!ЙJ†CЕ!3†At'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKOyT)h)f)dO}ЙH†CГ!3†At€Ф'†Cє0†At3†At8iSO&Н‚€Ђ&жU†C’!ЙJ†CЕ!3†At'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKO€€T:j)iSO€‚&Н‚€Ђ&дU†C’!ЙJ†CЕ!3†At'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKO€ƒT)jO€Š&Н‚€Ђ&шU†C’!ЙJ†CЕ!3†At'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKO€&R3†At2†AtK:k)l&R3†At5†AtK)kЙR†At3†At"8mSO€Ž&Н‚€Ђ&ыЙJ†CЕ!3†At'†Cє0†At3†A(0ІC“!U†C’!ЙJ†CЕ!3†At '†Cы ЙR†At3†A(0†AtUІA“ ЙL†CŸ!U†CŸ!LKO€T:l)mO€”&Н‚€Ђ&юU†C’!ЙJ†CЕ!3†At\'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKO€•TO€›)b&Н‚€Ђ&U†C’!ЙJ†CЕ!3†AtX'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKO€ &џН‚€ЯЙH†CГ!3†At€Ь'†Cє0†AtUІA“ ЙN†C” U†C” ЙJ†CЕ!3†Atd'†Cє0†AtUІA“ ЙJ†CЕ!3†Ath'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKO€І&Н‚€Ђ&ёU†C’!ЙH†CГ!3†At€ј'†Cє0†AtUІA“ ЙL†CŸ!U†CŸ!LKO€ЇT)POGTTOœO€ЈM: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t m l kjihgfedcb` _ ^]\[ZYX W VUP Nq†€LpsRC†€ŸJpsEncCtrlC†€ЕHpsEncC†€Г StypeOffset†tQi†tTpsNLSF_CB†€`Rk†t                  ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё з ž!о –!Ž!›!Ў!ё!Д!Š"р!ф!ь!Œ"э!Ž"ю!ˆ"H!tuєƒ ˆ ‹ Œ Ž  ‘ “ ” Љ з о р ы Ž!’!“!”!–!›!ž!Ÿ!Ё!Ђ!Њ!Ў!Г!Д!Е!р!ф!ц!ь!э!ю!ё!ˆ"Š"Œ"Ž"Ѕ"д"е"ж"о"п"р"с"т"у"ф"х"ц"ч"ш"щ"ь"э"§"ў"Щ#Ю#Я#ж#з#@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl.cil$in.cil$ex 2.cil$syЮ.cil$db/3185 1284597036 100666 30023 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТ'u ,e‘Lt.drectveQ, .cil$fg}@@.cil$gl8‘@@.cil$inЩ@@.cil$exсOЪ@@.cil$syС Ћe@@.cil$db—lr@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_encode_frame_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_encode_frame_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2И2€ov4V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_encode_frame_fix.cжW]ІЖтN.%ЈрYцФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШ-SKP_Silk_encode_frame_FIX†€ €(€#€fh h{›ЇЊ&6˜ŸА8AJSXkr8SKP_Silk_LBRR_encode_FIX‚€С€h@€/ €Ьh h{›ЇЊП˜Ÿ]{SKP_Silk_range_encoder‚€Ё&SKP_Silk_VAD_GetSA_Q8†€Љ]SKP_Silk_LBRR_ctrl_FIX‚€ $SKP_Silk_NLSF_CB_struct€–ЇSKP_Silk_range_coder_get_length†€[ SKP_Silk_detect_SWB_state€SSKP_Silk_noise_shape_analysis_FIX‚€Е ѓSKP_Silk_encoder_control_FIX€ў ЬSKP_Silk_encoder_state_FIX€М ЦSKP_Silk_predict_state_FIX€о ЗSKP_Silk_prefilter_state_FIX€з БSKP_Silk_shape_state_FIX€в aSKP_Silk_encoder_control€  %SKP_Silk_encoder_state€ё SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_LP_state€  SKP_Silk_detect_SWB_state€ SKP_Silk_range_coder_state€ž јSKP_Silk_VAD_state€ ѓSKP_SILK_LBRR_struct€ф чSKP_Silk_nsq_state€к SKP_Silk_range_coder_state€ž Кsize_tu ЖSKP_Silk_shape_state_FIX€в SKP_Silk_NLSF_CBS€›˜SKP_Silk_encode_parameters‚€Щ ЃSA_AttrTarget€)SKP_Silk_FrameTermination_v4_CDF„ !€cJSKP_Silk_prefilter_FIX‚€КПSKP_Silk_gains_dequant‚€oАSA_Parameter€)†›SKP_Silk_range_enc_init‚€} ХSKP_Silk_prefilter_state_FIX€зАSKP_Silk_pulses_to_bytes†€в pSKP_Silk_encoder_control€  ђSKP_Silk_nsq_state€к strnlen†€hSKP_Silk_encode_pulses‚€Ю ђSKP_Silk_encoder_state_FIX€МЊSKP_Silk_range_enc_wrap_up‚€} ЫSKP_Silk_predict_state_FIX€оЎSA_Method€)†@kSKP_Silk_find_pitch_lags_FIX‚€­ŸSKP_Silk_encode_parameters_v4‚€Ц Лwchar_t!XSKP_Silk_process_gains_FIX‚€SKP_Silk_FrameTermination_CDF„ !€a€ wcsnlen†€ SKP_Silk_VAD_state€ASKP_Silk_HP_variable_cutoff_FIX‚€­rSKP_Silk_find_pred_coefs_FIX‚€Н SKP_Silk_encoder_control_FIX€ў memmove†€{ SKP_Silk_LP_state€  `SKP_Silk_encoder_state€ё6SKP_Silk_LP_variable_cutoff‚€Б їSKP_SILK_LBRR_struct€ф [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOO€ O €ўO3 f0" D ЄBEOœO'SS&-F-N-L-J-HLOSO(O)&T3†At2†AtKO*O+O,O-O.O/O2O3O6&Q3†AtX'†CєЙH†C­!3†At€ш'†Cє3†At5†At3†At 2†AtKO<&UЙH†C­!3†At€ ›'†CК"ЙH†C­!3†At€Ь'†Cє0†At3†A2†C‘KO=&V&YЙH†C­!3†At€Ь'†Cє0†At3†A2†C‘KOBOCOD&T&&Н†At€ЊЙH†C­!3†At€Ь'†Cє0†AtUІA“ ЙN†CЎ U†CЎ &Q3†At€ˆ'†Cы U†Cє&Q3†At€x'†CЭ"U†Cє&\U†CєЙH†C­!3†At€(Є'†Cы U†CєЙH†C­!3†At€@'†CЋ#U†CЇ#L2†AtKOK&AН‚€ЎЙN†CЎ U†CЎ &XU†C‘&QU†Cћ!ЙH†C­!U†C­!LKOR&6Н‚€ВЙH†C­!3†At€Ь'†Cє0†AtUІA“ &XU†CЎ ЙU†C‘ЙH†C­!3†At€и'†Cє0†At3†AU†C‘ЙH†C­!3†At€0'†CГ#U†CЏ#LKOZ&kН‚€ЎЙU†C‘U†CЎ &YU†C‘&QU†Cћ!ЙH†C­!U†C­!LKO_&SН‚€ЖЙU†C‘U†CЎ ЙV†C‘U†CЎ &QU†Cћ!ЙH†C­!U†C­!LKOd&JН‚€ЛЙU†C‘U†CЎ &WU†C‘&QU†CИ#ЙH†C­!U†C­!LKOj&rН‚€О&YU†CЎ &QU†Cћ!ЙH†C­!U†C­!LKOo&XН‚€П&QU†Cћ!ЙH†C­!U†C­!LKOqЙH†C­!3†At€$a'†Cы ЙH†C­!3†At€и '†Cє0†At3†A(&Q3†Ath'†Cє0†At2†AtKOrЙH†C­!3†At€8a'†Cы ЙH†C­!3†At€и '†Cє0†At3†A(&Q3†Atd'†Cє0†At2†AtKOw&_3†At€2„!KOx&8Н‚€Т&WU†C‘&_U†C‘&^U†C &QU†Cћ!ЙH†C­!U†C­!LKO}O~OO€€O€ЙH†C­!3†At€˜›'†Cч!0†DЙ!Н‚€Й&Q3†At€'†Cє0†AtUІA“ &Q3†At€\'†Cє0†AtU†At&Q3†At€€'†CЭ"U†C” &Q3†At€ '†CЭ"U†C” &Q3†At€<'†CЭ"U†C” &Q3†At€L'†CЭ"U†C” &Q3†At€Œ'„CУ#U†CЎ &Q3†At€и'„Cј"U†CЎ &Q3†At€˜'†CМ"3†A(U†CЎ &Q3†AtD'†Cє0†AtUІA“ ЙH†C­!3†At€$'†Cы ЙH†C­!3†At€и '†Cє0†AtЙH†C­!3†At€Ь'†Cє0†At3†A(U†Cє&WU†CЎ ЙH†C­!3†At€ j'†Cи!U†CЖ!&Q3†At'†CФ#U†CЕ!ЙH†C­!3†At'†Cы!U†CГ!LKO€†ЙH†C­!3†At€(Є'†Cє0†At3†At"8`SO€‡ЙH†C­!3†At€ј'†Cє3†At2†AtKO€ˆЙH†C­!3†At€ь'†Cє3†At5†AtKO€‰ЙH†C­!3†At€ь'†Cє0†At3†At$8aSO€ŠЙH†C­!3†At€є'†Cє3†At2†AtKO€‹TO€Œ)aЙH†C­!3†At€ь'†Cє0†At3†At$8bSO€ЙH†C­!3†At€ь'†Cє3†At2†AtKO€ŽЙH†C­!3†At€є'†Cє3†At2†AtKO€TO€)bT:c)`SO€‘ЙH†C­!3†At€ь'†Cє3†At2†AtKO€’ЙH†C­!3†At€є'†Cє3†At2†AtKO€“ЙH†C­!3†At€ј'†Cє3†At2†AtKO€”T)cO€™ЙH†C­!3†At€и '†Cє0†At3†At8dSO€š&›Н‚€~ЙH†C­!3†At'†CЅ"U†CŸ!LKO€›ЙH†C­!3†At€м '†Cє3†At2†AtKO€œTO€Ё)dЙH†C­!3†At€Pa'†Cє0†At3†At8eSO€Ђ&ŸН‚€ЧЙH†C­!3†At'†CЅ"U†CŸ!&Q3†At'†CФ#U†CЕ!ЙH†C­!3†At'†Cы!U†CГ!LKO€Ѓ&]&2†C’!KO€ЄT:f)eSO€ЅO€І&˜Н‚€ЪЙH†C­!3†At€$'†Cы ЙH†C­!3†At€и '†Cє0†AtЙH†C­!3†At€Ь'†Cє0†At3†A(U†C” ЙH†C­!3†At'†CЅ"U†CŸ!&Q3†At'†CФ#U†CЕ!ЙH†C­!3†At'†Cы!U†CГ!LKO€Ї&]&2†C’!KO€ЈT)fO€Ў& Н†Cƒ€|ЙH†C­!3†At€Ь'†Cє0†AtЙH†C­!3†At€и'†Cє0†At3†BuU†BuЙH†C­!3†At€ ›'†CК"ЙH†C­!3†At€Ь'†Cє0†At3†A(U†CЫ ЙH†C­!3†At€ ›'„CН!U†CƒLKO€БЙH†C­!3†At€Д'†Cє&Q3†Ath'†Cє0†At2†AtKO€ВЙH†C­!3†At€М'†Cє&Q3†Atl'†Cы 3†A (0†At2†AtKO€ГЙH†C­!3†At€ '†Cє3†At2†AtKO€ЕЙH†C­!3†At'†Cє0†At8hSO€ЗЙH†C­!3†At€и '†Cє3†At2†AtKO€ИT:i)hSO€ЙЙH†C­!3†At€и '†Cє3†At5†AtKO€КT)iO€ПЙH†C­!3†At€и '†Cє0†At3†AtЙH†C­!3†At€р'†Cє0†At#8jSO€С&ZЙH†C­!3†At€ќ'†Cє0†At3†At3†At 2†AtKO€Ф&[3†At2†AtKO€ХЙH†C­!3†At€ь '†CЬ#ЙZ†At3†A€(3†At€'†Cє0†At3†At8kSO€Ц&[3†At2†AtKO€ЧTO€Ш)kЙH†C­!3†At€ь '†CЬ#ЙH†C­!3†At€ќ'†Cє0†At3†A€(3†At€'†Cє0†At3†At8lSO€Щ&[3†At2†AtKO€Ъ&ZЙH†C­!3†At€ќ'†Cє0†At2†AtKO€ЫTO€Э)l&{Н‚€ЂЙ]†C’!U†C’!Й[†AtUІA“ ЙH†C­!3†At'†CЅ"U†CŸ!LKO€ЯЙH†C­!3†At€Pa'†Cє0†At3†At8mSO€б&R3†At2†AtK:n)o&R3†At5†AtK)nЙR†AtЙH†C­!3†At€и '†Cє0†At"8pSO€вO€г&hН‚€ЯЙH†C­!3†At€Ь'†Cє0†AtUІA“ ЙH†C­!3†At€$'†Cы ЙR†AtЙH†C­!3†At€Ь'†Cє0†At3†A(U†C” ЙH†C­!3†At€8a'†Cы ЙR†At3†A(0†AtUІA“ ЙH†C­!3†At€$a'†Cы ЙR†At3†A(0†AtUІA“ ЙH†C­!3†At'†CЅ"U†CŸ!LKO€дT:o)pO€еTO€з)m&ЇН†At€\&SU†CєЙH†C­!3†At'†CЅ"U†Cй"LKO€кЙL†C‘0„!,†AtЙS†At#8qSO€л&ЊН‚€~ЙH†C­!3†At'†CЅ"U†CŸ!LKO€м3†At€Ќ@†CƒЙS†At3†BuU†BuЙH†C­!3†At'‚Cа#U†CЫ ЙJ†C U†CƒLKO€оO€пЙ[†At3†At$8sЙL†C‘0„!,†AtЙS†AtЙH†C­!3†At€ь '†CЬ#ЙZ†At3†A€(3†At€'†Cє0†At#8sSO€сO€у3†At€Ќ@†CƒЙH†C­!3†At€ь '†CЬ#ЙZ†At3†A€(3†At€'†Cє0†At3†BuU†BuЙH†C­!3†At€ь '†CЬ#ЙZ†At3†A€(3†At'‚Cа#U†CЫ ЙJ†C ЙS†At3†A(U†CƒLKO€ф&SЙH†C­!3†At€ь '†CЬ#ЙZ†At3†A€(3†At€'†Cє0†At†AtKO€хTO€ч)sЙL†C‘ЙS†At2„!KO€ъO€ы3†At€Ќ@†CƒЙ_„!,†At3†BuU†Bu&^U†CЫ ЙH†C­!3†At€ь '†CЬ#ЙH†C­!3†At€ќ'†Cє0†At3†A€(3†At'‚Cа#U†CƒLKO€ьЙH†C­!3†At€ь '†CЬ#ЙH†C­!3†At€ќ'†Cє0†At3†A€(3†At€'†CєЙ_„!2†AtKO€юЙH†C­!3†At€ь '†CЬ#ЙH†C­!3†At€ќ'†Cє0†At3†A€(3†At€'†Cє&Q3†At|'†Cє0†At2†AtKO€яЙH†C­!3†At€ќ'†CєЙH†C­!3†At€ќ'†Cє0†At3†At3†At 2†AtKO€ђЙH†C­!3†At€и '†Cє3†At2†AtKO€ѓT:v)qSO€ѕЙL†C‘3†At2„!KO€і&S3†At2†AtKO€їЙH†C­!3†At€и '†Cє3†At2†AtKO€ј&T3†Atќ2†AtKO€љT)vO€њT:w)jSO€ќЙL†C‘3†At2„!KO€џ&[3†At2†AtKO€&{Н‚€ЂЙ]†C’!U†C’!Й[†AtUІA“ ЙH†C­!3†At'†CЅ"U†CŸ!LKO€&ЇН†At€\&SU†CєЙH†C­!3†At'†CЅ"U†Cй"LKO€ЙH†C­!3†At€Pa'†Cє0†At3†At8xSO€O€&S&АН†At€гЙH†C­!3†At€$'†Cы ЙH†C­!3†At€и '†Cє0†At3†AtЙH†C­!3†At€Ь'†Cє0†At3†A(U†CєЙH†C­!3†At'†Cы!U†CГ!L†AtKO€ TO€ )xT)wO€ ЙH†C­!3†At'†Cє0†At8ySO€&T3†Atї2†AtKO€TO€)yO€3‚KO€3‚KO€ЙH†C­!3†At€$Є'†Cє3†At€@ЙS†AtЙH†C­!3†At€м '†Cє0†AtЙH†C­!3†At€м'†Cє0†At†AtKO€ЙH†C­!3†At€$Є'†Cє3†At†AtKO€ЙH†C­!3†At€$Є'†CєЙH†C­!3†At€$Є'†Cє0†At3†Atd$3†AtdЙH†C­!3†At€$Є'†Cє0†At3†At"3†AtЙH†C­!3†At€$Є'†Cє0†AtCBCB2†AtKO€ЙH†C­!3†At€м '†CєЙS†At2†AtKO€ЙH†C­!3†At€(Є'†Cє0†At3†At€Г$8}SO€ЙH†C­!3†At€'†CєЙH†C­!3†At€'†Cє0†At3†At3†Bu€€ 3†At€џџџЙH†C­!3†At€'†Cє0†At3†AtCB2†AtKO€TO€)}ЙT†AtA†At:PO€ T)POGTTO€ O €ўO3 f0" D ЄBEOœO€*SS&8F-†-„-‚-€-~LOSO€+O€,O€-O€.&‘3†At2†AtKO€2&]Н‚€ПЙ€†Cћ!U†Cћ!Й~†C­!U†C­!LKO€4Й~†C­!3†At€'†Cє0†At8’SO€63†At€Ќ@†Cƒ3†BuU†BuЙ€†Cћ!3†AtH'†CЭ"U†CЫ &ŠU†CƒLKO€73†At€Ќ@†Cƒ3†BuU†BuЙ€†Cћ!3†At€€'†CЭ"U†CЫ &ŽU†CƒLKO€9&Й~†C­!3†At€И'†Cє0†At2†AtKO€:&Й€†Cћ!3†At\'†Cє0†At2†AtKO€=Й~†C­!3†At€Ф'†Cє0†At3†At8•SO€>&‘3†At€М42†AtKO€?T:–)•Й~†C­!3†At€Ф'†Cє0†At3†At 8—SO€@&‘3†At€Œ<2†AtKO€AT:˜)—Й~†C­!3†At€Ф'†Cє0†At3†At8™SO€B&‘3†At€\D2†AtKO€CT:š)™Й~†C­!3†At€Ф'†Cє0†At3†At8›SO€D&‘3†At€,L2†AtKO€ET:œ)›SO€F3‚KO€GT)œ)š)˜)–O€IЙ~†C­!3†At€ь'†Cє0†At3†At$8žЙ~†C­!3†At€м'†Cє0†AtЙ‘†At$8žSO€JЙ~†C­!3†At€и '†Cє0†At3†At8ŸSO€L3†At€Ќ@†Cƒ3†Bu€МU†BuЙ~†C­!3†At€ j'†Cи!U†CЫ Й~†C­!3†At€м‚'†Cи!U†CƒLKO€NЙ~†C­!3†At€А'†CєЙ~†C­!3†At€\a'†Cє0†At2†AtKO€PЙ€†Cћ!3†AtH'†Cы 3†A(Й€†Cћ!3†AtH'†Cы 3†A(0†AtЙ~†C­!3†At€'†Cє0†At2†AtKO€QЙ€†Cћ!3†AtH'†Cы 3†A(Й€†Cћ!3†AtH'†Cы 3†A(0†At3†At?$3†At?Й€†Cћ!3†AtH'†Cы 3†A(0†At3†At"3†AtЙ€†Cћ!3†AtH'†Cы 3†A(0†AtCBCB2†AtKO€RTO€U)ŸO€V&ПН‚€pЙ~†C­!3†At€и '†Cє0†AtUІA“ Й~†C­!3†At€А'†Cы U†CєЙ€†Cћ!3†AtH'†CЭ"U†C” Й€†Cћ!3†At€€'†CЭ"U†CєLKO€ZO€[O€\O€]O€^Й~†C­!3†At€˜›'†Cч!0†DЙ!Н‚€ЙЙ€†Cћ!3†At€'†Cє0†AtUІA“ Й€†Cћ!3†At€\'†Cє0†AtU†AtЙ€†Cћ!3†At€€'†CЭ"U†C” Й€†Cћ!3†At€ '†CЭ"U†C” Й€†Cћ!3†At€<'†CЭ"U†C” Й€†Cћ!3†At€L'†CЭ"U†C” Й€†Cћ!3†At€Œ'„CУ#U†CЎ Й€†Cћ!3†At€и'„Cј"U†CЎ Й€†Cћ!3†At€˜'†CМ"3†A(U†CЎ Й€†Cћ!3†AtD'†Cє0†AtUІA“ Й~†C­!3†At€Є;'†Cы Й~†C­!3†At€и '†Cє0†AtЙ~†C­!3†At€Ь'†Cє0†At3†A(U†CєЙ††C‘U†CЎ Й~†C­!3†At€м‚'†Cи!U†CЖ!Й€†Cћ!3†At'†CФ#U†CЕ!Й~†C­!3†At'†Cы!U†CГ!LKO€_T:Ё)žSO€`O€a3†At€­@†CƒЙ~†C­!3†At€Ь'†Cє0†At3†BuU†Bu3†AtU†AtЙ~†C­!3†At€Є;'†Cы Й~†C­!3†At€и '†Cє0†AtЙ~†C­!3†At€Ь'†Cє0†At3†A(U†CƒLKO€bЙ€†Cћ!3†At\'†Cє3†At2†AtKO€cT)ЁO€gЙ~†C­!3†At€и '†Cє0†At3†At8ЃSO€h&›Н‚€~Й~†C­!3†At€'†CЅ"U†CŸ!LKO€iЙ~†C­!3†At€м '†Cє3†At2†AtKO€jTO€o)ЃЙ~†C­!3†At€Pa'†Cє0†At3†At8ЄSO€p&ŸН‚€ЧЙ~†C­!3†At€'†CЅ"U†CŸ!Й€†Cћ!3†At'†CФ#U†CЕ!Й~†C­!3†At'†Cы!U†CГ!LKO€qT:Ѕ)ЄSO€rO€s&˜Н‚€ЪЙ~†C­!3†At€Є;'†Cы Й~†C­!3†At€и '†Cє0†AtЙ~†C­!3†At€Ь'†Cє0†At3†A(U†C” Й~†C­!3†At€'†CЅ"U†CŸ!Й€†Cћ!3†At'†CФ#U†CЕ!Й~†C­!3†At'†Cы!U†CГ!LKO€tT)ЅO€vЙ~†C­!3†At€$'†Cє0†At8ІSO€x&3†At2†AtKO€yT:Ї)ІSO€z&Й~†C­!3†At€и '†Cє0†At3†At2†AtKO€{T)ЇO€€Й†At,„!,†At3†AtЙ~†C­!3†At€р'†Cє0†At#8ЌSO€ƒ&‹3†At2†AtKO€†&{Н‚€Ђ&U†C’!Й‹†AtUІA“ Й~†C­!3†At€'†CЅ"U†CŸ!LKO€ˆЙ~†C­!3†At€Pa'†Cє0†At3†At8­SO€Œ&‰3†At2†AtK:Ў)Џ&‰3†At5†AtK)ЎЙ‰†AtЙ†At"8АSO€O€Ž&hН‚€ЯЙ~†C­!3†At€Ь'†Cє0†AtUІA“ Й~†C­!3†At€Є;'†Cы Й‰†AtЙ~†C­!3†At€Ь'†Cє0†At3†A(U†C” Й~†C­!3†At€8a'†Cы Й‰†At3†A(0†AtUІA“ Й~†C­!3†At€$a'†Cы Й‰†At3†A(0†AtUІA“ Й~†C­!3†At€'†CЅ"U†CŸ!LKO€T:Џ)АO€TO€’)­&ЇН†At€\&ŒU†CєЙ~†C­!3†At€'†CЅ"U†Cй"LKO€•Й„†C‘0„!,†AtЙŒ†At#8БSO€–&ЊН‚€~Й~†C­!3†At€'†CЅ"U†CŸ!LKO€—3†At€Ќ@†CƒЙŒ†At3†BuU†BuЙ~†C­!3†At€('‚Cа#U†CЫ Й‚†C U†CƒLKO€™Й„†C‘ЙŒ†At2„!KO€šT:Г)БSO€œЙ„†C‘3†At2„!KO€3‚KO€žT)ГO€ŸT:Е)ЌSO€ЁЙ„†C‘3†At2„!KO€Є&‹3†At2†AtKO€Ѕ&{Н‚€Ђ&U†C’!Й‹†AtUІA“ Й~†C­!3†At€'†CЅ"U†CŸ!LKO€ІT)ЕO€Љ3†At€Ќ@†Cƒ3†BuU†Bu&ŠU†CЫ Й€†Cћ!3†AtH'†CЭ"U†CƒLKO€Њ3†At€Ќ@†Cƒ3†BuU†Bu&ŽU†CЫ Й€†Cћ!3†At€€'†CЭ"U†CƒLKO€­Й€†Cћ!3†At\'†CєЙ†At2†AtKO€ЎЙ~†C­!3†At€И'†CєЙ†At2†AtKO€ЏTO€А)’T)ˆOGTTOœO€БM   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t }yxwvsqp o nmlkjihfedcba`P NpIn†€.LpnBytesOut†€JpCode†€ HpsEnc†€­ XpIn_HP„€РЁ€‹Vres_pitch_frame†€^LBRRpayload‚€Ё€œ]FrameTermination_CDF†€’ZLBRR_idx†tSnBytes†!tRi†tQsEncCtrl†€ЌЁˆ€ў\SNR_dB_Q7†!tUx_frame†€_nBytesLBRR„!Tret†t[frame_terminator†tYres_pitch„€Ё€дWxfw„€РЁ€‹                     ЕГБА Џ Ў­ЌЇІЅЄЃЁŸžœ›š™˜—–•’ˆ †xfw†€„pnBytesOut†€‚pCode†€ €psEncCtrl†€ћ~psEnc†€­ ‘Rate_only_parameters†ttypeOffset†tŒnBytes†!t‰i†tLTP_scaleIndex†tnFramesInPayloadBuf†tŽTempGains_Q16†Ё€c‹frame_terminator†tŠTempGainsIndices†Ё€c                      ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёз ž!о –!Ž!›!Ќ!М!Ў!ё!Џ!в!А!з!Б!о!В!к!Д!Š"р!ф!ь!Œ"э!Ž"ю!ˆ"њ!ў!y!tuƒ‘ єƒ ˆ ‹ Œ Ž  ‘ “ ” Љ Ў Ы з о у ы ћ ќ ‹!Ž!’!–!›!œ!ž!Ÿ!Ё!Ђ!Ќ!­!Ў!Џ!А!Б!В!Г!Д!Е!Ж!Й!М!Н!в!з!и!к!о!р!ф!ч!ы!ь!э!ю!ё!њ!ћ!ў!‚"ˆ"Š"Œ"Ž"Ѕ"К"М"Э"й"л"м"с"у"я"№"ј"§"ў" #Ї#Љ#Њ#Ћ#­#Ў#Џ#Б#В#Г#Е#Ж#И#К#Л#Н#О#П#С#Т#У#Ф#Ц#Ч#Щ#Ъ#Ь#Ю#Я#а#в#г#д#@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl8.cil$in.cil$exсO.cil$syС .cil$db— /3223 1284597036 100666 24853 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТѕ` ,e‘Lб_.drectveQ, .cil$fg}@@.cil$glў@@.cil$in}@@.cil$exG>~@@.cil$syН ХR@@.cil$dbO‚^@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_enc_API.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_enc_API.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2C2€ovњV €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсИc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fЛc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉКc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьSc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іk c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_enc_api.cГђ)‚5ъжкKnх1Нj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗПc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлОc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО” c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїИ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{У j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,“ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™/j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пфj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pхj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY&A&и Н†At€Й9†AtU†AtL2†AtKO?Й;†CєЙA†At2†AtKO@ЙA†At3†At"8BSOAЙ=†CєЙ9†At3†AtЙA†At 3†At 2†AtKOBT:C)BSOCЙ=†CєЙ9†AtЙA†At3†At 3†At 2†AtKODT)COET)@OGTTO€ O €ўO3 f0" D ЄBEO/OKSS&FF-DLOSOLONЙD†At3†At!8KSOO3†AtA†At:GOPTOR)K&?Н‚€&JU†Cє&IU†CєЙD†AtU†AtLKOTЙI†At3†At 8LSOU&H3†At€€2†AtKOVT:M)LSOW&H3†At€†Д2†AtKOXT)MO[&HЙI†At3†At †AtKO^&HЙH†AtЙH†At3†At 3†At€еЙJ†At,„!,†At,„!,†AtЙH†At3†At€џџ 3†At€еЙJ†At,„!,†At,„!,†At3†At 2†AtKO`ЙH†AtA†At:GOaT)GOGTTO€ O €ўO3 f0" D ЄBEO/OdSS&\F-ZLOSOfOiЙZ„!,†At3†At 3†At8_3†AtA†At:]Ok)_&^ЙZ„!2†AtKOm&^Й^†At3†At †AtKOo&и Н†At€Й^†AtU†AtL3†AtA†At:]OpT)]OGTTO€ O €ўO3 f0" D ЄBEO/OsSS&bF-`LOSOvЙ`†At3†At 3†At8d3†AtA†At:cOy)d&`Й`†At3†At †AtKO{&и Н†At€Й`†AtU†AtL3†AtA†At:cO|T)cOGTTO€ O €ўO3 f0" D ЄBEO/O€„SS&kF-i-g-eLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&m&и Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&qЙeІA“ Йm†At 2†AtKO€Ž&n&и Н†At€ЙgІA“ 3†At$ЙgІA“ ЙgІA“ CBU†AtL3†At2†AtKO€&rЙgІA“ Йn†At 2†AtKO€’&p3†At€џџџЙr†At3†At 2†AtKO€•&sЙq†At3†At Йp†At,„!,†AtЙq†At3†At€џџ Йp†At,„!,†At3†At 2†AtKO€˜&qЙr†At,ˆЙs†At,ˆ3†At ,†At3†At †AtKO€›&sЙs†AtЙq†At3†At Йp†At,„!,†AtЙq†At3†At€џџ Йp†At,„!,†At3†At 2†AtKO€ž&o3†AtЙm†AtЙn†AtЙiІA“ 2†AtKO€ŸЙo†At3†At!8SO€ 3†At€€Йo†At 3†At€џџџЙo†At $Йs†At3†At€€Йo†At $3†At€€Йo†At Йs†At3†At€џџџЙo†At "3†At€џџџЙo†At Йs†AtCBCBЙs†At3†At€џџџЙo†At $3†At€џџџЙo†At Йs†At3†At€€Йo†At "3†At€€Йo†At Йs†AtCBCBCBЙo†At A†At:lO€ЁT:‡)SO€ЂЙo†At3†At "8ˆSO€ЃЙs†AtЙo†At A†At:lO€ЄT:‰)ˆSO€І3†AtA†At:lO€ЇT)‰O€ЈT)‡O€ЉT)lOGTTO€ O €ўO3 f0" D ЄBEO/O€АSS&ŽF-Œ-ŠLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&и Н†At€ЙŠІA“ 3†At$ЙŠІA“ ЙŠІA“ CBU†AtL3†At2†AtKO€Й&“ЙŠІA“ Й†At 2†AtKO€М&’3†At€џџџЙ“†At3†At 2†AtKO€П&•Й’†At3†At 2†AtKO€Т&”Й“†At3†At Й’†At,„!,†AtЙ“†At3†At€џџ Й’†At,„!,†At3†At 3†At 2†AtKO€Х&•Й•†AtЙ”†At3†At Й’†At,„!,†AtЙ”†At3†At€џџ Й’†At,„!,†At3†At Й”†AtЙ’†At3†At 3†At3†At 2†AtKO€Ш&‘3†At=Й†AtЙŒІA“ 2†AtKO€ЩЙ‘†At3†At!8ЁSO€Ъ3†At€€Й‘†At 3†At€џџџЙ‘†At $Й•†At3†At€€Й‘†At $3†At€€Й‘†At Й•†At3†At€џџџЙ‘†At "3†At€џџџЙ‘†At Й•†AtCBCBЙ•†At3†At€џџџЙ‘†At $3†At€џџџЙ‘†At Й•†At3†At€€Й‘†At "3†At€€Й‘†At Й•†AtCBCBCBЙ‘†At A†At:O€ЫT:Ї)ЁSO€ЬЙ‘†At3†At "8ЈSO€ЭЙ•†AtЙ‘†At A†At:O€ЮT:Љ)ЈSO€а3†AtA†At:O€бT)ЉO€вT)ЇO€гT)OGTTO€ O €ўO3 f0" D ЄBEO/O€рSS&ЌF-ЊLOSO€сO€ф&Њ3†At€џџ†AtKO€чЙЊ†At3†At€€!8ЏSO€шЙЊ†At3†At€@"8АSO€ъ&Њ3†At€@ЙЊ†At2†AtKO€ыT:Б)АSO€э&Њ3†At€@†AtKO€юT)БO€яЙЊ†At3†At€L"8ВSO€ё3†At€ЙЊ†AtЙЊ†At3†At 3†At€CьџџЙЊ†AtЙЊ†At3†At€џџ 3†At€Cьџџ3†At A†At:­O€ђTO€ѓ)В&ЊЙЊ†At3†At 3†At ЙЊ†At,„!,†AtЙЊ†At3†At 3†At€џџ ЙЊ†At,„!,†At3†At 2†AtKO€є&Ў3†At€љ*ЙЊ†At3†At 3†At€kьџџЙЊ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ў3†At€ЬфћЙЊ†At3†At ЙЎ†At,„!,†AtЙЊ†At3†At€џџ ЙЎ†At,„!,†At3†At ЙЊ†AtЙЎ†At3†At 3†At3†At 2†AtKO€і&Ў3†At€*чџ?ЙЊ†At3†At ЙЎ†At,„!,†AtЙЊ†At3†At€џџ ЙЎ†At,„!,†At3†At ЙЊ†AtЙЎ†At3†At 3†At3†At 2†AtKO€їT:Ч)ЏSO€јЙЊ†At3†At€Р"8ШSO€њ&Њ3†At€РЙЊ†At2†AtKO€ћT:Щ)ШSO€§&Њ3†At€Р†AtKO€ўT)ЩO€џЙЊ†At3†At€L"8ЪSO€3†At€џЙЊ†AtЙЊ†At3†At 3†At€НЙЊ†AtЙЊ†At3†At€џџ 3†At€Н3†At A†At:­O€TO€)Ъ&ЊЙЊ†At3†At 3†At ЙЊ†At,„!,†AtЙЊ†At3†At 3†At€џџ ЙЊ†At,„!,†At3†At 2†AtKO€&Ў3†At€еяџЙЊ†At3†At 3†At€•ЙЊ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ў3†At€4яЙЊ†At3†At ЙЎ†At,„!,†AtЙЊ†At3†At€џџ ЙЎ†At,„!,†At3†At ЙЊ†AtЙЎ†At3†At 3†At3†At 2†AtKO€&Ў3†At€РЙЊ†At3†At ЙЎ†At,„!,†AtЙЊ†At3†At€џџ ЙЎ†At,„!,†At3†At ЙЊ†AtЙЎ†At3†At 3†At3†At 2†AtKO€T)ЧO€ЙЎ†At3†At 3†At3†At A†At:­O€ T)­OGTTO€ O €ўO3 f0" D ЄBEO/O€SS&сF-пLOSO€&ЌН†At€Йп†At3†At€@U†AtLA†At:тO€T)тOGTTO“ O€OНO OуOOЗOуOOфOOуO OхOO“ OхOOЕOOхO OцOOЗOцOO“ OOцO OЕOOцO!OхOЧOOЕOЧOOцOOЧO OхO"OOOНOOOхO#OуO!OцOOуO"OНO!OхOOНO"OфOOНO#OOOНO$OœOOHOOIOЗOIOOHOЗOOHO OЖOOHO!OœOOIOOœO OЗOOœO!OцOOœO"O€ O €ўO3 f0" D ЄBEOœO*SS&dF-ЈLOSO+&Ћ3†At2†AtKO-ЙЈ†Cє3†Bu€<Є2†AtKO/ЙЋ†AtA†At:ЊO0T)ЊOGTTO€ O €ўO3 f0" D ЄBEOœO:SS&nF-Џ-­LOSO;O<&Г3†At2†AtKO>&ВЙ­†CЫ ,†C­!2†C­!KO@ЙЏ†C‘#3†At'†CєЙВ†C­!3†At€Ф'†Cє0†At,„!,†At3†At€ш,„"!2†AtKOAЙЏ†C‘#3†At'†CєЙВ†C­!3†At€Ф'†Cє0†At,„!,†AtЙВ†C­!3†At€р'†Cє0†At,„!,†At,„"!2†AtKOBЙЏ†C‘#3†At'†CєЙВ†C­!3†At€м'†Cє0†At,„"!2†AtKOCЙЏ†C‘#3†At '†CєЙВ†C­!3†At€ф'†Cє0†At2†AtKODЙЏ†C‘#3†At'†CєЙВ†C­!3†At€ь'†Cє0†At2†AtKOFЙГ†AtA†At:БOGT)БOGTTO€ O €ўO3 f0" D ЄBEOœOPSS&iF-Т-РLOSOQOR&Ц3†At2†AtKOU&ХЙР†Cƒ,†C­!2†C­!KOX&Ц&Н†At€–ЙХ†C­!U†C­!L†At8ШSOY3‚KOZTO])Ш&Ц&nН†At€™ЙТ†C‘#U†C‘#ЙР†CƒU†CЫ L†At8ЪSO^3‚KO_TOb)ЪЙЦ†AtA†At:ФOcT)ФOGTTO€ O €ўO3 f0" D ЄBEOœOpSS&{F-ж-д-в-а-Ю-ЬLOSOq&о3†At2†AtKOr&т3†At2†AtKOsOtOu&хЙЬ†Cƒ,†C­!2†C­!KOx3‚KO{O|ЙЮ†C›#3†At'†C” 0ІA“ 3†At€@ 8шЙЮ†C›#3†At'†C” 0ІA“ 3†At€р. 8шЙЮ†C›#3†At'†C” 0ІA“ 3†At€€> 8шЙЮ†C›#3†At'†C” 0ІA“ 3†At€Р] 8шSO}&о3†Atў2†AtKO~3‚KOЙо†AtA†At:иO€€TO€ƒ)ш&йЙЮ†C›#3†At'†C” 0ІA“ ,†At3†At€ш2†AtKO€„&кЙЮ†C›#3†At'†C” 0ІA“ ,†AtЙй†At2†AtKO€…&уЙЮ†C›#3†At'†C” 0ІA“ ,†At2†AtKO€†&лЙЮ†C›#3†At '†C” 0ІA“ ,†At2†AtKO€‡&мЙЮ†C›#3†At'†C” 0ІA“ ,†At2†AtKO€ˆ&рЙЮ†C›#3†At'†C” 0ІA“ ,†At2†AtKO€‰&нЙЮ†C›#3†At'†C” 0ІA“ ,†At2†AtKO€Œ&сЙв†AtЙй†At2†AtKO€Йс†At3†At 3†At 9ѕЙв†At3†At"8є)ѕSO€Ž&о3†Atџ2†AtKO€3‚KO€Йо†AtA†At:иO€‘TO€”)єЙв†AtЙх†C­!3†At€р'†Cє0†At,„!,†AtЙй†At,„!,†At$8ћSO€•&о3†Atџ2†AtKO€–3‚KO€—Йо†AtA†At:иO€˜TO€š)ћO€›&о&$Н†At€œЙр†AtUІA“ Йс†AtUІA“ Йн†AtUІA“ Йм†AtUІA“ Йл†AtUІA“ Йу†AtU†AtЙк†AtUІA“ Йй†AtUІA“ Йх†C­!U†C­!L2†At3†At 8§SO€œ3‚KO€Йо†AtA†At:иO€žTO€Ё)§ЙЮ†C›#3†At'†C” 0ІA“ 3†At€Р]8џЙх†C­!3†At€'†Cє0†At3†At8џЙх†C­!3†At€ '†Cє0†At3†At8џSO€Ђ&-Н‚€Йв†AtU†AtЙа†CЎ U†CЎ Йх†C­!3†At€ќ'†Cž#U†CŠ#LKO€ЃTO€І)џ&ф3†At2„!KO€Ї)3†At8SO€Љ&пЙх†C­!3†At€Ь'†Cє0†AtЙх†C­!3†At€д '†Cє0†At2†AtKO€ЊЙЮ†C›#3†At'†C” 0ІA“ Йх†C­!3†At€Ф'†Cє0†At,„!,†At3†At€ш8SO€Ќ&п&Н†At€ Йв†AtU†AtЙп†AtU†AtL2†AtKO€­&тЙп†At2†AtKO€Ў3†At€Ќ@†CƒЙп†At,„!,†At3†AtU†BuЙа†CЎ U†CЫ Йх†C­!3†At€ '†CК"Йх†C­!3†At€д '†Cє0†At3†A(U†CƒLKO€ЏT:)ЙЮ†C›#3†At'†C” 0ІA“ 3†At€Р]8Йх†C­!3†At€Ф'†Cє0†At3†At8SO€Б&п&Н†At€ Йв†At3†At 3†At 3†At€VUЙв†At3†At 3†At€џџ 3†At€VU3†At U†AtЙп†AtU†AtL2†AtKO€В&тЙп†At,„!,†At3†At3†At 2†AtKO€ЛO€М&$ Н‚€ТЙт†AtUІA“ Йа†CЎ U†CЎ Йх†C­!3†At€ '†CП!U†CєЙх†C­!3†At€ '†CК"Йх†C­!3†At€д '†Cє0†At3†A(U†C‘LKO€ОT:)ЙЮ†C›#3†At'†C” 0ІA“ 3†At€Р]8Йх†C­!3†At€Ф'†Cє0†At3†At 8SO€ПO€С&п&Н†At€ Йв†At3†At U†AtЙп†AtU†AtL2†AtKO€Т&тЙп†At3†At 2†AtKO€УO€Ф&ѓ Н‚€ЪЙп†AtUІA“ &U†CєЙх†C­!3†At€ '†CК"Йх†C­!3†At€д '†Cє0†At3†A(U†C‘Йх†C­!3†At€8'†CЧ!U†CєЙа†CЎ U†CЎ LKO€ХT:)ЙЮ†C›#3†At'†C” 0ІA“ 3†At€Р]8Йх†C­!3†At€Ф'†Cє0†At3†At8SO€Ч&п&Н†At€ Йв†At3†AtU†AtЙп†AtU†AtL2†AtKO€Ш&тЙп†At,„!,†At3†At2†AtKO€ЩO€Ъ& Н‚€ТЙт†AtUІA“ Йа†CЎ U†CЎ Йх†C­!3†At€P'†CЭ!U†CєЙх†C­!3†At€ '†CК"Йх†C­!3†At€д '†Cє0†At3†A(U†C‘LKO€ЫT:")ЙЮ†C›#3†At'†C” 0ІA“ 3†At€€>8#Йх†C­!3†At€Ф'†Cє0†At3†At 8#SO€Э&п&Н†At€ Йв†At,„!,†At3†At3†At U†AtЙп†AtU†AtL2†AtKO€Ю&тЙп†At3†At 3†At 3†At€VUЙп†At3†At 3†At€џџ 3†At€VU3†At 2†AtKO€ЯO€а&? Н‚€ХЙт†AtU†AtЙа†CЎ U†CЎ Йх†C­!3†At€l'†CЫ!U†CєЙх†C­!3†At€ '†CК"Йх†C­!3†At€д '†Cє0†At3†A(U†C‘LKO€бT:,)#ЙЮ†C›#3†At'†C” 0ІA“ 3†At€€>8-Йх†C­!3†At€Ф'†Cє0†At3†At8-SO€вO€д&п&Н†At€ Йв†At3†At U†AtЙп†AtU†AtL2†AtKO€е&тЙп†At3†At 2†AtKO€жO€з&ѓ Н‚€ЪЙп†AtUІA“ &.U†CєЙх†C­!3†At€ '†CК"Йх†C­!3†At€д '†Cє0†At3†A(U†C‘Йх†C­!3†At€Ј'†CЧ!U†CєЙа†CЎ U†CЎ LKO€иT:/)-ЙЮ†C›#3†At'†C” 0ІA“ 3†At€р.80Йх†C­!3†At€Ф'†Cє0†At3†At80SO€к&п&Н†At€ Йв†At3†At 3†At 3†At€VUЙв†At3†At 3†At€џџ 3†At€VU3†At U†AtЙп†AtU†AtL2†AtKO€л&тЙп†At,„!,†At3†At3†At 2†AtKO€фO€х&$ Н‚€ТЙт†AtUІA“ Йа†CЎ U†CЎ Йх†C­!3†At€Р'†CП!U†CєЙх†C­!3†At€ '†CК"Йх†C­!3†At€д '†Cє0†At3†A(U†C‘LKO€чTO€ш)0)/),)")))&аЙт†At3†A†CЎ KO€щ&вЙт†At†AtKO€ъЙх†C­!3†At€д '†CєЙп†At†AtKO€эЙх†C­!3†At€д '†Cє0†AtЙх†C­!3†At€Ь'†Cє0†At#89SO€яЙф„!,†At3†At8:SO€ё&фЙж†C‘0„!2„!KO€ђ&о&-Н†At€ЁЙх†C­!3†At€ '„CЂ#U†CЎ &фU†C‘Йд†C U†C Йх†C­!U†C­!L2†At3†At 8;SO€ѓ3‚KO€єTO€ѕ);T:=):SO€ї&о&-Н†At€ЁЙх†C­!3†At€ '„CЂ#U†CЎ Йж†C‘U†C‘Йд†C U†C Йх†C­!U†C­!L2†At3†At 8>SO€ј3‚KO€љTO€ћ)>3‚KO€ќT)=O€§Йх†C­!3†At€д '†Cє3†At2†AtKO€ўT:A)9SO€џ:O€T)AO€T:)O€Йж†C‘Йф„!2„!KO€Йх†C­!3†At€№'†Cє0†At8BЙх†C­!3†At€є'†Cє0†At8BSO€Йж†C‘3†At2„!KO€TO€ )BЙо†AtA†At:иO€ T)иOGTTOœO€ M   _MaxCount†u _Str†€ ˆ  … _MaxCount†uƒ _Src†€ е д г в б а Я Ю Э Ь Ы Ъ Щ Ч  Ф in16„ Ш out32†t         м к й  ж in32†t    b†tџa†t   b„a„   b†t a†t  bˆaˆ  b†ta†t " b„a„ ( %b†t#a†t . +bˆ)aˆ 863 0inˆ 4in_upper†t  CB@ =frac_Q7†€t;lz†€t9in†t AleadingZeros†t  MLKG Dx†t Hy†tIlz†!tJfrac_Q7†!t   _] Za„ ^a32†tdc `a†t ‰ˆ‡l iQres†€gb32†€ea32†€ pb32_inv†tqa32_nrm†trb32_nrm†tma_headrm†tsresult†tolshift†tnb_headrm†t    ЉЈЇЁ ŒQres†€Šb32†€ ’b32_inv†t“b32_nrm†t”err_Q32†t•result†t‘lshift†tb_headrm†t    ЪЩШЧВБАЏ­ Њx†t Ўy_Q30†t        т пx†t Њ ЈencSizeBytes†€t Ћret†tБ ЏencStatus†€‘­encState†€K ВpsEnc†€­Гret†tЪШФ ТencStatus†€‘РencState†€ ХpsEnc†€­Цret†t  BA>=;:90/-,#"  џ§ћѕєши жnBytesOut†€дoutData†€ вnSamplesIn†tаsamplesIn†€.ЮencControl†€›ЬencState†€ уTargetRate_bps†tтnSamplesFromInput†tхpsEnc†€­сinput_ms†tмUseInBandFec†tкPacketSize_ms†tрComplexity†tлPacketLoss_perc†tйAPI_fs_kHz†tнUseDTX†tфMaxBytesOut„!оret†tпnSamplesToBuffer†t         scratch†€€Ё€!   .scratch†€€Ё€!          ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёз ž!о –!Ž!›!Ќ!М!Ў!ё!Џ!в!А!з!Б!о!В!к!Д!Š"р!ф!ь!Œ"э!Ž"ю!ˆ"#“#U!tuƒ‘ єƒ ˆ ‹ Œ Ž  ‘ “ ” Ÿ   Љ Ў Ы з о Ž!–!›!ž!Ќ!­!Ў!Џ!А!Б!В!Д!М!П!С!Т!Ф!Х!Ч!Щ!Ъ!Ы!Э!в!з!к!о!р!ф!ь!э!ю!ё!€"ˆ"Š"Œ"Ž"Ё"Џ"К"Š###‘#“#•#–#˜#™#›#œ##ž# #Ё#Ђ#Є#І#@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glў.cil$in.cil$exG>.cil$syН .cil$dbO /3252 1284597036 100666 17779 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТSE ,e‘L/D.drectveQ, .cil$fg}@@.cil$glg ‘@@.cil$inј@@.cil$ex@,љ@@.cil$syI9;@@.cil$db­‚C@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_detect_SWB_input.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_detect_SWB_input.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2_2€ovc V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_detect_swb_input.c”Ю@fžГ&rb+ЮЫУ=Ф SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ SKP_min_int†€€­€aШSKP_max_int†€€е€Ш=SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШФSKP_Silk_detect_SWB_input‚€€(€#€Эh}   SKP_Silk_detect_SWB_state€ SKP_Silk_detect_SWB_state€ Мsize_tuSKP_Silk_SWB_detect_A_HP_Q13„ !€Ž ЃSA_AttrTarget€) SKP_Silk_sum_sqr_shift‚€HАSA_Parameter€)†SKP_Silk_SWB_detect_B_HP_Q13„!€} SKP_Silk_biquad‚€D4strnlen†€ЎSA_Method€)†@ Нwchar_t!Ћwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœO O€ O €ўO3 f0" D ЄBEOœO'SS&ФF-L-J-HLOSO(O)O*O-&O&Н†At€ 3†At€рU†AtЙL†AtU†AtL2†AtKO.&O&Н†At€ 3†AtU†AtЙO†AtU†AtL2†AtKO3O4&} Н‚€KЙO†AtUІA“ &QU†C‘ЙH†CŠ#3†At'†C‹#3†A(U†Cє&3†A(U†CЎ &3†A(U†CЎ ЙJ†CЎ U†CЎ LKO5&P3†At2†AtK:T)U&P3†At5†AtK)TЙP†At3†At"8VSO6O7&} Н‚€KЙO†AtUІA“ &QU†C‘ЙH†CŠ#3†At'†C‹#ЙP†At3†A(U†Cє&ЙP†At3†A(U†CЎ &ЙP†At3†A(U†CЎ &QU†CЎ LKO8T:U)VO;& Н‚€IЙO†AtU†At&QU†CЎ &SU†Cє&RU†CєLKO>ЙR†At3†At ЙO†At,„!,†AtЙS†At $8[SO?ЙH†CŠ#3†At'†CєЙL†At†AtKO@ЙH†CŠ#3†At'†Cє0†At3†At€ $8\SOAЙH†CŠ#3†At '†Cє3†At2†AtKOBTOC)\T:])[SODЙH†CŠ#3†At'†CєЙL†At†AtKOEЙH†CŠ#3†At'†CєЙH†CŠ#3†At'†Cє0†At3†At$ЙH†CŠ#3†At'†Cє0†At3†AtCB2†AtKOFT)]OIЙH†CŠ#3†At'†Cє0†At3†At€˜:$8^ЙH†CŠ#3†At '†Cє0†At3†At8^SOJЙH†CŠ#3†At$'†Cє3†At2†AtKOKTOL)^T)NOGTTOœOMM: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t ^]\[V U TN LnSamplesIn†tJsamplesIn†€.HpsSWBdetect†€Š Qin_HP_8_kHz„€РЁ€‹Pi†tRenergy_32†!tOHP_8_kHz_len†tSshift†!t       ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёю!ˆ" !tu‘єƒ ˆ ‹ Œ Ž  ‘ “ Ÿ   Љ Ў Ф Ш Щ ‹!ю!ˆ"Ы"Š#‹##Ž##@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glg .cil$in.cil$ex@,.cil$syI.cil$db­ /3290 1284597036 100666 18629 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТЅH ,e‘LG.drectveQ, .cil$fg}@@.cil$gl”@@.cil$in!@@.cil$exЩ-"@@.cil$syЧы>@@.cil$dbЯВF@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_decoder_set_fs.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_decoder_set_fs.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2e2€ovV €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_decoder_set_fs.cќ8VŒ{J—tЗфRgCЪеФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШлSKP_Silk_decoder_set_fs‚€€(€#€h јљњћ      !SKP_Silk_NLSF_CB_struct€– ƒSKP_Silk_decoder_state€j {SKP_Silk_CNG_struct€o nSKP_Silk_PLC_struct€™ SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_range_coder_state€ž SKP_Silk_range_coder_state€ž Мsize_tu SKP_Silk_NLSF_CBS€›SKP_Silk_Dec_A_HP_24„!€DSKP_Silk_Dec_B_HP_24„!€ ЃSA_AttrTarget€)ћSKP_Silk_NLSF_CB1_10†Ё€€–АSA_Parameter€)† ‚SKP_Silk_CNG_struct€oјSKP_Silk_NLSF_CB0_16†Ё€€– SKP_Silk_Dec_B_HP_8„!€4strnlen†€ЎSA_Method€)†@ Нwchar_t! zSKP_Silk_PLC_struct€™ SKP_Silk_Dec_B_HP_12„!€љSKP_Silk_NLSF_CB1_16†Ё€€–Ћwcsnlen†€SKP_Silk_Dec_A_HP_16„!€D SKP_Silk_Dec_B_HP_16„!€ ЕSKP_Silk_decoder_state€j SKP_Silk_Dec_A_HP_8„!€D SKP_Silk_Dec_A_HP_12„!€DњSKP_Silk_NLSF_CB0_10†Ё€€– [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœOO€ O €ўO3 f0" D ЄBEOœO#SS&лF-J-HLOSO$ЙH†Cж 3†At€м+'†Cє0†AtЙJ†At 8MSO%ЙH†Cж 3†At€м+'†CєЙJ†At2†AtKO&ЙH†Cж 3†At€р+'†Cє3†AtЙJ†At,„!,†At2†AtKO'ЙH†Cж 3†At€ф+'†Cє3†AtЙJ†At,„!,†At2†AtKO(ЙH†Cж 3†At€м+'†Cє0†At3†At8VSO)ЙH†Cж 3†At€ш+'†Cє3†At 2†AtKO*ЙH†Cж 3†At€€,'†Cц!3†A(&њ2†Cр KO+ЙH†Cж 3†At€€,'†Cц!3†A(&ћ2†Cр KO,T:W)VSO-ЙH†Cж 3†At€ш+'†Cє3†At2†AtKO.ЙH†Cж 3†At€€,'†Cц!3†A(&ј2†Cр KO/ЙH†Cж 3†At€€,'†Cц!3†A(&љ2†Cр KO0T)WO23†At€­@†Cƒ3†Bu@U†Bu3†AtU†AtЙH†Cж 3†At€'†CР"U†CƒLKO33†At€­@†Cƒ3†Bu€РU†Bu3†AtU†AtЙH†Cж 3†At€8$'„Cп!U†CƒLKO43†At€­@†Cƒ3†Bu@U†Bu3†AtU†AtЙH†Cж 3†At€ь+'†C„!U†CƒLKO6ЙH†Cж 3†At€И+'†Cє3†At2†AtKO7ЙH†Cж 3†At€М+'†Cє3†Atd2†AtKO8ЙH†Cж 3†At€Р+'†Cє3†At2†AtKO9ЙH†Cж 3†At€l7'†Cє3†At2†AtKO:ЙH†Cж 3†At€,,'†Cє3†At2†AtKO<ЙJ†At3†At8[SO=ЙH†Cж 3†At€д+'†CЬ"&2†CЎ KO>ЙH†Cж 3†At€и+'†CЬ"&2†CЎ KO?T:\)[ЙJ†At3†At8]SO@ЙH†Cж 3†At€д+'†CЬ"&2†CЎ KOAЙH†Cж 3†At€и+'†CЬ"& 2†CЎ KOBT:^)]ЙJ†At3†At 8_SOCЙH†Cж 3†At€д+'†CЬ"& 2†CЎ KODЙH†Cж 3†At€и+'†CЬ"& 2†CЎ KOET:`)_ЙJ†At3†At8aSOFЙH†Cж 3†At€д+'†CЬ"& 2†CЎ KOGЙH†Cж 3†At€и+'†CЬ"& 2†CЎ KOHT:b)aSOJ3‚KOKT)b)`)^)\OLTOO)M3‚KOPT)LOGTTOœORM: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t ba`_^]\[WVML Jfs_kHz†tHpsDec†€V           ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёе ъ з ž!о –!ч я ш ™!Ž!›!'!tuƒєƒ ˆ ‹ Œ Ž  ‘ Љ Ў е ж з о р ч ш ъ я „!Ž!–!™!›!ž!п!ц!”"Р"Ф"Ь"џ"@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl”.cil$in.cil$exЩ-.cil$syЧ.cil$dbЯ /3326 1284597036 100666 18840 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТxI ,e‘LTH.drectveQ, .cil$fg}@@.cil$gl ‹@@.cil$in @@.cil$exГ.Ё@@.cil$syG T>@@.cil$dbЙ›G@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_decode_pulses.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_decode_pulses.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2~2€ov V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_decode_pulses.c ƒbў‡gpй e‹шT2Ф SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШSKP_Silk_decode_pulses‚€z€(€#€nhклноцє $кSKP_Silk_pulses_per_block_CDF„€Є!€‡$SKP_Silk_range_decoder‚€Є ЖSKP_Silk_decoder_control€y SKP_Silk_range_coder_state€ž SKP_Silk_range_coder_state€žцSKP_Silk_lsb_CDF„!€Њ Мsize_tu ЃSA_AttrTarget€)нSKP_Silk_rate_levels_CDF„(!€‰лSKP_Silk_pulses_per_block_CDF_offset†€АSA_Parameter€)† SKP_Silk_shell_decoder‚€‚4strnlen†€єSKP_Silk_decode_signs‚€ЉЎSA_Method€)†@ Нwchar_t! УSKP_Silk_decoder_control€yЋwcsnlen†€оSKP_Silk_rate_levels_CDF_offset†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœOO€ O €ўO3 f0" D ЄBEOœO'SS&F-N-L-J-HLOSO(O)O*O+O0O1&$Н‚€ЅЙоІA“ U†At&нЙJ†Cє 3†At€Є'†Cє0†At3†A(U†C’!ЙH†CŸ!U†CŸ!ЙJ†Cє 3†At€œ'†Cы U†CєLKO4&TЙNІA“ 3†At2†AtKO9&[&кЙJ†Cє 3†At€œ'†Cє0†At3†A*(2†C’!KO:&Q3†At2†AtK:\)]&Q3†At5†AtK)\ЙQ†AtЙT†At"8^SO;&YЙQ†At3†A(3†At2†AtKO<&$Н‚€ЅЙлІA“ U†AtЙ[†C’!U†C’!ЙH†CŸ!U†CŸ!&XЙQ†At3†A(U†CєLKO?)`&XЙQ†At3†A(0†At3†At8aSO@&YЙQ†At3†A(3†At5†AtKOAOB&$Н‚€ЅЙлІA“ U†At&к3†A€z(U†C’!ЙH†CŸ!U†CŸ!&XЙQ†At3†A(U†CєLKOCT:`)aODT:])^OI&Q3†At2†AtK:b)c&Q3†At5†AtK)bЙQ†AtЙT†At"8dSOJ&XЙQ†At3†A(0†At3†At$8eSOK& Н‚€ƒ&XЙQ†At3†A(0†AtUІA“ ЙH†CŸ!U†CŸ!ЙL†CєЙQ†At,„!,†At3†At3†A(U†CєLKOLT:j)eSOM3†At€­@†Cƒ3†Bu@U†Bu3†AtU†AtЙL†CєЙQ†At,„!,†At3†At3†A(U†CƒLKONT)jOOT:c)dOT&Q3†At2†AtK:p)q&Q3†At5†AtK)pЙQ†AtЙT†At"8rSOU&YЙQ†At3†A(0†At3†At$8sSOV&V&YЙQ†At3†A(0†At2†AtKOW&ZЙL†CєЙQ†At,„!,†At3†At3†A(2†CєKOX&S3†At2†AtK:x)y&S3†At5†AtK)xЙS†At3†At"8zSOY&UЙZ†CєЙS†At3†A(0†At2†AtKOZ&R3†At2†AtK:{)|&R3†At5†AtK){ЙR†AtЙV†At"8}SO[&UЙU†At3†At 2†AtKO\&$Н‚€Ѕ3†AtU†At&цU†C’!ЙH†CŸ!U†CŸ!&WU†CєLKO]&UЙW†At†AtKO^T:|)}O_ЙZ†CєЙS†At3†A(ЙU†At2†AtKO`T:y)zOaTOb)sT:q)rOgOh&єН‚€„ЙJ†Cє 3†At€œ'†Cє0†AtUІA“ ЙJ†Cє 3†At€ '†Cє0†AtUІA“ ЙJ†Cє 3†At€Є'†Cє0†AtUІA“ ЙNІA“ UІA“ ЙL†CєU†CєЙH†CŸ!U†CŸ!LKOiT)POGTTOœOjM: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t } | {z y xsr q pjed c ba ` ^ ] \P Nframe_length†€Lq†€tJpsDecCtrl†€tHpsRC†€Ÿ Uabs_q†tYnLshifts†x€…Titer†tVnLS†tQi†t[cdf_ptr†€’Xsum_pulses†xЁ€…Zpulses_ptr†€tSk†tWbit†!tRj†t           ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёз ž!ѓ љ $!tuƒєƒ ˆ ‹ Œ Ž  ‘ “ Љ з ы ѓ є љ ’!ž!Ÿ!Є!Ѕ!Љ!Њ!њ"‚#ƒ#„#…#‡#‰#@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl .cil$in.cil$exГ..cil$syG .cil$dbЙ/3361 1284597036 100666 21259 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТыR ,e‘LЧQ.drectveQ, .cil$fg}@@.cil$glГ™@@.cil$inL@@.cil$ex?6M@@.cil$sy& ŒG@@.cil$dbВP@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_decode_parameters_v4.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_decode_parameters_v4.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2y2€ovЏV €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_decode_parameters_v4.cэТУ†nеХчЦкМФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШџSKP_Silk_decode_parameters_v4‚€'€(€#€Еh д F№ќ>DV] !SKP_Silk_NLSF_CB_struct€–>SKP_Silk_range_coder_get_length†€[ ЖSKP_Silk_decoder_control€y ƒSKP_Silk_decoder_state€j {SKP_Silk_CNG_struct€o nSKP_Silk_PLC_struct€™ SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_range_coder_state€ž SKP_Silk_range_coder_state€ž Мsize_tuд SKP_Silk_bwexpander‚€TSKP_Silk_decode_pulses‚€z]SKP_Silk_NLSF2A_stable‚€‚ SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)№SKP_Silk_LTPScales_table_Q14„€VSKP_Silk_gains_dequant‚€oАSA_Parameter€)†DSKP_Silk_range_coder_check_after_decoding‚€} ‚SKP_Silk_CNG_struct€o4strnlen†€ЎSA_Method€)†@FSKP_Silk_decode_pitch‚€v Нwchar_t! zSKP_Silk_PLC_struct€™ УSKP_Silk_decoder_control€yЋwcsnlen†€ќSKP_Silk_LTP_vq_ptrs_Q14† €€SKP_Silk_NLSF_MSVQ_decode‚€r ЕSKP_Silk_decoder_state€j [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœOO€ O €ўO3 f0" D ЄBEOœO%SS&џF-N-L-J-HLOSO&O'O(O)&X3†Cƒ2†Cр KO*&ZЙH†Cж 3†At'†CЅ"2†CŸ!KO,ЙH†Cж 3†At€@,'†Cє3†At2†AtKO-ЙJ†Cє 3†At€Є'†CєЙH†Cж 3†At€ˆ,'†Cы ЙH†Cж 3†At€4,'†Cє0†At3†A(0†At2†AtKO.ЙJ†Cє 3†At€ '†CєЙH†Cж 3†At€œ,'†Cы ЙH†Cж 3†At€4,'†Cє0†At3†A(0†At2†AtKO/ЙH†Cж 3†At€є.'†CєЙH†Cж 3†At€р.'†Cы ЙH†Cж 3†At€4,'†Cє0†At3†A(0†At2†AtKO0ЙJ†Cє 3†At€Ј'†CєЙH†Cж 3†At€.'†Cы ЙH†Cж 3†At€4,'†Cє0†At3†A(0†At2†AtKO1ЙJ†Cє 3†At '†CєЙH†Cж 3†At€Ь.'†Cы ЙH†Cж 3†At€4,'†Cє0†At3†A(0†At2†AtKO4&VН‚€pЙH†Cж 3†At€4,'†Cє0†AtUІA“ ЙH†Cж 3†At€Р+'†Cы U†CєЙH†Cж 3†At€А,'†CЮ"ЙH†Cж 3†At€4,'†Cє0†At3†A(U†C” ЙJ†Cє 3†At'†CЭ"U†CєLKO:&XЙH†Cж 3†At€€,'†Cц!ЙJ†Cє 3†At€Є'†Cє0†At3†A(0†Cр 2†Cр KO=&Н‚€sЙH†Cж 3†At€ш+'†Cє0†AtUІA“ ЙH†Cж 3†At€P-'†Cз"ЙH†Cж 3†At€4,'†Cє0†At3†A((U†C” ЙX†Cр U†Cр &UU†CєLKO@&]Н‚€ƒЙH†Cж 3†At€ш+'†Cє0†AtUІA“ &UU†C” ЙJ†Cє 3†At,'†CМ"3†A (U†C‘LKODЙH†Cж 3†At€,,'†Cє0†At3†At8[SOEЙJ†Cє 3†At€Ј'†Cє3†At2†AtKOFTOH)[ЙJ†Cє 3†At€Ј'†Cє0†At3†At"8\SOK&Q3†At2†AtK:])^&Q3†At5†AtK)]ЙQ†AtЙH†Cж 3†At€ш+'†Cє0†At"8_SOLOM&VЙQ†At3†A(ЙH†Cж 3†At€ь+'†Cы ЙQ†At3†A(0†AtЙJ†Cє 3†At€Ј'†Cє0†At&UЙQ†At3†A(0†AtЙH†Cж 3†At€ь+'†Cы ЙQ†At3†A(0†At3†At 2†AtKONT:^)_OQ&]Н‚€ƒЙH†Cж 3†At€ш+'†Cє0†AtUІA“ &VU†C” ЙJ†Cє 3†At,'†CМ"3†A(U†C‘LKORT:`)\SOTOU3†At€Ќ@†CƒЙH†Cж 3†At€ш+'†Cє0†At3†BuU†BuЙJ†Cє 3†At,'†CМ"3†A (U†CЫ ЙJ†Cє 3†At,'†CМ"3†A(U†CƒLKOVT)`OX3†At€Ќ@†CƒЙH†Cж 3†At€ш+'†Cє0†At3†BuU†Bu&UU†CЫ ЙH†Cж 3†At€ь+'†C„!U†CƒLKO[ЙH†Cж 3†At€h7'†Cє0†At8cSO\&д Н‚€t3†At€RјU†AtЙH†Cж 3†At€ш+'†Cє0†AtUІA“ ЙJ†Cє 3†At,'†CМ"3†A(U†C‘LKO]&д Н‚€t3†At€RјU†AtЙH†Cж 3†At€ш+'†Cє0†AtUІA“ ЙJ†Cє 3†At,'†CМ"3†A (U†C‘LKO^TO`)cЙJ†Cє 3†At€Є'†Cє0†At3†At8dSOfOg&FН‚€wЙH†Cж 3†At€м+'†Cє0†AtU†AtЙJ†Cє 3†At'†CЭ"U†CєЙH†Cж 3†At€@.'†Cы ЙH†Cж 3†At€4,'†Cє0†At3†A(0†AtU†AtЙH†Cж 3†At€,.'†Cы ЙH†Cж 3†At€4,'†Cє0†At3†A(0†AtU†AtLKOlЙJ†Cє 3†At€˜'†CєЙH†Cж 3†At€T.'†Cы ЙH†Cж 3†At€4,'†Cє0†At3†A(0†At2†AtKOo&W&ќЙJ†Cє 3†At€˜'†Cє0†At3†A(0ІCН 2†CЎ KOq&R3†At2†AtK:e)f&R3†At5†AtK)eЙR†At3†At"8gSOr&SЙH†Cж 3†At€h.'†CЮ"ЙH†Cж 3†At€4,'†Cє0†At3†A(ЙR†At3†A(0†At2†AtKOs&Q3†At2†AtK:h)i&Q3†At5†AtK)hЙQ†At3†At"8jSOtЙJ†Cє 3†Atl'†CК"ЙR†At,„!,†At3†AtЙQ†At3†A(ЙW†CЎ ЙS†At,„!,†At3†AtЙQ†At3†A(0Є!­ 2†!KOuT:i)jOvT:f)gO{&SЙH†Cж 3†At€И.'†Cы ЙH†Cж 3†At€4,'†Cє0†At3†A(0†At2†AtKO|ЙJ†Cє 3†At€”'†Cє&№ЙS†At3†A(0Є!­ 2†AtKO}T:s)dSO~3†At€­@†Cƒ3†BuU†Bu3†AtU†AtЙJ†Cє 3†At'†CЭ"U†CƒLKO3†At€­@†Cƒ3†Bu(U†Bu3†AtU†AtЙJ†Cє 3†Atl'„Cј"U†CƒLKO€€ЙJ†Cє 3†At€˜'†Cє3†At2†AtKO€ЙJ†Cє 3†At€”'†Cє3†At2†AtKO€‚T)sO€‡&Н‚€{ЙH†Cж 3†At€р+'†Cє0†AtUІA“ ЙL†CєU†CєЙJ†Cє U†Cє ЙZ†CŸ!U†CŸ!LKO€Œ&>Н†At€\&TU†CєЙZ†CŸ!U†Cй"LKO€ЙH†Cж 3†At€0,'†CєЙZ†CŸ!3†At'†Cє0†AtЙT†At2†AtKO€ŽЙH†Cж 3†At€0,'†Cє0†At3†At"8vSO€ЙZ†CŸ!3†At'†Cє3†Atњ2†AtKO€TO€•)vЙH†Cж 3†At€0,'†Cє0†At3†At8wSO€–&DН‚€~ЙZ†CŸ!U†CŸ!LKO€—TO€™)wЙH†Cж 3†At€8,'†Cє0†AtЙH†Cж 3†At€4,'†Cє0†At3†At8xSO€›ЙH†Cж 3†At€@,'†Cє3†At2†AtKO€œTO€)xT)POGTTOœO€žM: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t xwvsj i hg f edc`_ ^ ]\[P NfullDecoding†€Lq†€tJpsDecCtrl†€tHpsDec†€V ZpsRC†€ŸWcbk_ptr_Q14†€.TnBytesUsed†!tVpNLSF0_Q15†@Ё€PSIx†tQi†tXpsNLSF_CB†€`UpNLSF_Q15†@Ё€PRk†t              ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёе ъ з ž!о –!ч я ш ™!ѓ љ Ž!›!H!tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Љ ­ Ў Н Ы а д е ж з о р ч ш ъ ы я ѓ є љ ‚!ƒ!„!Ž!–!™!›!ž!Ÿ!ц!Ѕ"Ї"К"М"Э"Ю"з"й"л"м"я"№"ђ"ѓ"є"і"ї"ј"њ"ћ"§"ў"џ"€#@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glГ.cil$in.cil$ex?6.cil$sy& .cil$db /3403 1284597036 100666 25058 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТТa ,e‘Lž`.drectveQ, .cil$fg}@@.cil$gl“@@.cil$in@@.cil$exѓ;@@.cil$syI U@@.cil$dbOO_@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_decode_parameters.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_decode_parameters.obj-FdRelease\vc100.pdb-errorreport:prompt†1j22€ov{V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_decode_parameters.cxЯsЧJ?2МНКю5ј Ф SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШѓSKP_Silk_decode_parameters‚€'€(€#€сh1д FХЦЧШЩЪЫЬЭЮЯабвгдежзшщыьюя№ёђѓєѕіїќ$/>DV]лѕSKP_Silk_SamplingRates_offset†€/SKP_Silk_range_decoder_multi‚€P !SKP_Silk_NLSF_CB_struct€–>SKP_Silk_range_coder_get_length†€[гSKP_Silk_pitch_lag_SWB_CDF_offset†€ьSKP_Silk_LTP_gain_CDF_offsets† €]юSKP_Silk_LTPscale_CDF„!€^ыSKP_Silk_LTP_gain_CDF_ptrs† €_$SKP_Silk_range_decoder‚€ЄвSKP_Silk_pitch_lag_SWB_CDF„€!€` ЖSKP_Silk_decoder_control€y ƒSKP_Silk_decoder_state€j {SKP_Silk_CNG_struct€o nSKP_Silk_PLC_struct€™ SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_range_coder_state€ž SKP_Silk_range_coder_state€žSKP_Silk_Seed_offset†€ Мsize_tuд SKP_Silk_bwexpander‚€TSKP_Silk_Seed_CDF„ !€aЦSKP_Silk_type_offset_joint_CDF„(!€bіSKP_Silk_NLSF_interpolation_factor_CDF„ !€cѓSKP_Silk_SamplingRates_table†€dSKP_Silk_decode_pulses‚€z]SKP_Silk_NLSF2A_stable‚€‚лSKP_Silk_decoder_set_fs‚€ЪSKP_Silk_delta_gain_CDF„\!€e SKP_Silk_NLSF_CBS€›SKP_Silk_FrameTermination_offset†€ ЃSA_AttrTarget€)№SKP_Silk_LTPScales_table_Q14„€ёSKP_Silk_vadflag_CDF„!€ЊЯSKP_Silk_pitch_lag_MB_CDF_offset†€шSKP_Silk_LTP_per_index_CDF„!€^ХSKP_Silk_type_offset_CDF„ !€aVSKP_Silk_gains_dequant‚€oЮSKP_Silk_pitch_lag_MB_CDF„€„!€fщSKP_Silk_LTP_per_index_CDF_offset†€АSA_Parameter€)†яSKP_Silk_LTPscale_offset†€DSKP_Silk_range_coder_check_after_decoding‚€}дSKP_Silk_pitch_contour_CDF„F!€g ‚SKP_Silk_CNG_struct€oЭSKP_Silk_pitch_lag_NB_CDF_offset†€4strnlen†€бSKP_Silk_pitch_lag_WB_CDF_offset†€аSKP_Silk_pitch_lag_WB_CDF„€!€hЫSKP_Silk_delta_gain_CDF_offset†€ЎSA_Method€)†@жSKP_Silk_pitch_contour_NB_CDF„!€iеSKP_Silk_pitch_contour_CDF_offset†€FSKP_Silk_decode_pitch‚€v Нwchar_t! zSKP_Silk_PLC_struct€™ЩSKP_Silk_gain_CDF_offset†€ШSKP_Silk_gain_CDF„€!€lЬSKP_Silk_pitch_lag_NB_CDF„€!€mSKP_Silk_FrameTermination_CDF„ !€a УSKP_Silk_decoder_control€yєSKP_Silk_SamplingRates_CDF„ !€aђSKP_Silk_vadflag_offset†€Ћwcsnlen†€ќSKP_Silk_LTP_vq_ptrs_Q14† €€їSKP_Silk_NLSF_interpolation_factor_offset†€SKP_Silk_NLSF_MSVQ_decode‚€rзSKP_Silk_pitch_contour_NB_CDF_offset†€ЧSKP_Silk_type_offset_CDF_offset†€ ЕSKP_Silk_decoder_state€j [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœOO€ O €ўO3 f0" D ЄBEOœO%SS&ѓF-N-L-J-HLOSO&O'O(O)O*O+O,&\3†Cƒ2†Cр KO-&^ЙH†Cж 3†At'†CЅ"2†CŸ!KO3ЙH†Cж 3†At€4,'†Cє0†At3†At8_SO4&$Н‚€ЅЙѕІA“ U†At&єU†C’!Й^†CŸ!U†CŸ!&SU†CєLKO7ЙS†At3†At"9aЙS†At3†At$8`)aSO8Й^†CŸ!3†At'†Cє3†Atљ2†AtKO9:PO:TO;)`&T&ѓЙS†At3†A(0ІA“ 2†AtKO<&лН‚€ЙT†AtU†AtЙH†Cж U†Cж LKO=TOB)_ЙH†Cж 3†At€4,'†Cє0†At3†At8bSOD&$Н‚€ЅЙЧІA“ U†At&ХU†C’!Й^†CŸ!U†CŸ!&SU†CєLKOET:c)bSOGOH&$Н‚€ЅЙЧІA“ U†At&ЦЙH†Cж 3†At€Ш+'†Cє0†At3†A (U†C’!Й^†CŸ!U†CŸ!&SU†CєLKOIT)cOJЙJ†Cє 3†At€Є'†CєЙS†At3†At 2†AtKOKЙJ†Cє 3†At€ '†CєЙS†At3†At 2†AtKOLЙH†Cж 3†At€Ш+'†CєЙS†At2†AtKORЙH†Cж 3†At€4,'†Cє0†At3†At8dSOT&$Н‚€ЅЙЩІA“ U†At&ШЙJ†Cє 3†At€Є'†Cє0†At3†A€‚(U†C’!Й^†CŸ!U†CŸ!&W3†A(U†CєLKOUT:e)dSOW&$Н‚€ЅЙЫІA“ U†At&ЪU†C’!Й^†CŸ!U†CŸ!&W3†A(U†CєLKOXT)eO[&Q3†At2†AtK:f)g&Q3†At5†AtK)fЙQ†At3†At"8hSO\&$Н‚€ЅЙЫІA“ U†At&ЪU†C’!Й^†CŸ!U†CŸ!&WЙQ†At3†A(U†CєLKO]T:g)hO`&VН‚€pЙH†Cж 3†At€4,'†Cє0†AtUІA“ ЙH†Cж 3†At€Р+'†Cы U†Cє&WU†C” ЙJ†Cє 3†At'†CЭ"U†CєLKOe&\ЙH†Cж 3†At€€,'†Cц!ЙJ†Cє 3†At€Є'†Cє0†At3†A(0†Cр 2†Cр KOh&/Н‚€QЙ\†Cр 3†At'†C” 0ІA“ UІA“ Й\†Cр 3†At'†Cг"0ІCв"U†C” Й\†Cр 3†At'†Cе"0ІCд"U†C”!Й^†CŸ!U†CŸ!&XU†CєLKOk&Н‚€sЙH†Cж 3†At€ш+'†Cє0†AtUІA“ &XU†C” Й\†Cр U†Cр &YU†CєLKOpOq&$Н‚€ЅЙїІA“ U†At&іU†C’!Й^†CŸ!U†CŸ!ЙJ†Cє 3†At€Ј'†Cы U†CєLKOuЙH†Cж 3†At€,,'†Cє0†At3†At8iSOvЙJ†Cє 3†At€Ј'†Cє3†At2†AtKOwTOy)iЙNІA“ 8jSO{&]Н‚€ƒЙH†Cж 3†At€ш+'†Cє0†AtUІA“ &YU†C” ЙJ†Cє 3†At,'†CМ"3†A (U†C‘LKO}ЙJ†Cє 3†At€Ј'†Cє0†At3†At"8kSO€€&Q3†At2†AtK:l)m&Q3†At5†AtK)lЙQ†AtЙH†Cж 3†At€ш+'†Cє0†At"8nSO€O€‚&ZЙQ†At3†A(ЙH†Cж 3†At€ь+'†Cы ЙQ†At3†A(0†AtЙJ†Cє 3†At€Ј'†Cє0†At&YЙQ†At3†A(0†AtЙH†Cж 3†At€ь+'†Cы ЙQ†At3†A(0†At3†At 2†AtKO€ƒT:m)nO€†&]Н‚€ƒЙH†Cж 3†At€ш+'†Cє0†AtUІA“ &ZU†C” ЙJ†Cє 3†At,'†CМ"3†A(U†C‘LKO€‡T:o)kSO€‰O€Š3†At€Ќ@†CƒЙH†Cж 3†At€ш+'†Cє0†At3†BuU†BuЙJ†Cє 3†At,'†CМ"3†A (U†CЫ ЙJ†Cє 3†At,'†CМ"3†A(U†CƒLKO€‹T)oO€ŒTO€Ž)j3†At€Ќ@†CƒЙH†Cж 3†At€ш+'†Cє0†At3†BuU†Bu&YU†CЫ ЙH†Cж 3†At€ь+'†C„!U†CƒLKO€‘ЙH†Cж 3†At€h7'†Cє0†At8rSO€’&д Н‚€t3†At€RјU†AtЙH†Cж 3†At€ш+'†Cє0†AtUІA“ ЙJ†Cє 3†At,'†CМ"3†A(U†C‘LKO€“&д Н‚€t3†At€RјU†AtЙH†Cж 3†At€ш+'†Cє0†AtUІA“ ЙJ†Cє 3†At,'†CМ"3†A (U†C‘LKO€”TO€–)rЙJ†Cє 3†At€Є'†Cє0†At3†At8sSO€›ЙH†Cж 3†At€м+'†Cє0†At3†At8tSO€œ&$Н‚€ЅЙЭІA“ U†At&ЬU†C’!Й^†CŸ!U†CŸ!&V3†A(U†CєLKO€T:u)tЙH†Cж 3†At€м+'†Cє0†At3†At 8vSO€ž&$Н‚€ЅЙЯІA“ U†At&ЮU†C’!Й^†CŸ!U†CŸ!&V3†A(U†CєLKO€ŸT:w)vЙH†Cж 3†At€м+'†Cє0†At3†At8xSO€ &$Н‚€ЅЙбІA“ U†At&аU†C’!Й^†CŸ!U†CŸ!&V3†A(U†CєLKO€ЁT:y)xSO€Ђ&$Н‚€ЅЙгІA“ U†At&вU†C’!Й^†CŸ!U†CŸ!&V3†A(U†CєLKO€ЃT)y)w)uO€ІЙH†Cж 3†At€м+'†Cє0†At3†At8zSO€Ј&$Н‚€ЅЙзІA“ U†At&жU†C’!Й^†CŸ!U†CŸ!&V3†A(U†CєLKO€ЉT:{)zSO€Ћ&$Н‚€ЅЙеІA“ U†At&дU†C’!Й^†CŸ!U†CŸ!&V3†A(U†CєLKO€ЌT){O€Џ&FН‚€wЙH†Cж 3†At€м+'†Cє0†AtU†AtЙJ†Cє 3†At'†CЭ"U†Cє&V3†A(0†AtU†At&V3†A(0†AtU†AtLKO€ЕO€Ж&$Н‚€ЅЙщІA“ U†At&шU†C’!Й^†CŸ!U†CŸ!ЙJ†Cє 3†At€˜'†Cы U†CєLKO€Й&[&ќЙJ†Cє 3†At€˜'†Cє0†At3†A(0ІCН 2†CЎ KO€Л&R3†At2†AtK:|)}&R3†At5†AtK)|ЙR†At3†At"8~SO€МO€Н&$Н‚€Ѕ&ьЙJ†Cє 3†At€˜'†Cє0†At3†A(0ІA“ U†At&ыЙJ†Cє 3†At€˜'†Cє0†At3†A(0ІC“!U†C’!Й^†CŸ!U†CŸ!&SU†CєLKO€П&Q3†At2†AtK:)€&Q3†At5†AtK)ЙQ†At3†At"8SO€РЙJ†Cє 3†Atl'†CК"ЙR†At,„!,†At3†AtЙQ†At3†A(Й[†CЎ ЙS†At,„!,†At3†AtЙQ†At3†A(0Є!­ 2†!KO€СT:€)O€ТT:})~O€Ч&$Н‚€ЅЙяІA“ U†At&юU†C’!Й^†CŸ!U†CŸ!&SU†CєLKO€ШЙJ†Cє 3†At€”'†Cє&№ЙS†At3†A(0Є!­ 2†AtKO€ЩT:Š)sSO€Ъ3†At€­@†Cƒ3†BuU†Bu3†AtU†AtЙJ†Cє 3†At'†CЭ"U†CƒLKO€Ы3†At€­@†Cƒ3†Bu(U†Bu3†AtU†AtЙJ†Cє 3†Atl'„Cј"U†CƒLKO€ЬЙJ†Cє 3†At€˜'†Cє3†At2†AtKO€ЭЙJ†Cє 3†At€”'†Cє3†At2†AtKO€ЮT)ŠO€г&$Н‚€ЅЙІA“ U†At&U†C’!Й^†CŸ!U†CŸ!&SU†CєLKO€дЙJ†Cє 3†At '†CєЙS†At2†AtKO€и&Н‚€{ЙH†Cж 3†At€р+'†Cє0†AtUІA“ ЙL†CєU†CєЙJ†Cє U†Cє Й^†CŸ!U†CŸ!LKO€н&$Н‚€ЅЙђІA“ U†At&ёU†C’!Й^†CŸ!U†CŸ!ЙH†Cж 3†At€є.'†Cы U†CєLKO€т&$Н‚€ЅЙІA“ U†At&U†C’!Й^†CŸ!U†CŸ!ЙH†Cж 3†At€@,'†Cы U†CєLKO€ч&>Н†At€\&UU†CєЙ^†CŸ!U†Cй"LKO€шЙH†Cж 3†At€0,'†CєЙ^†CŸ!3†At'†Cє0†AtЙU†At2†AtKO€щЙH†Cж 3†At€0,'†Cє0†At3†At"8ŽSO€ъЙ^†CŸ!3†At'†Cє3†Atњ2†AtKO€ыTO€№)ŽЙH†Cж 3†At€0,'†Cє0†At3†At8SO€ё&DН‚€~Й^†CŸ!U†CŸ!LKO€ђTO€ѓ)T)POGTTOœO€єM: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t ŽŠ € ~ } |{zyxwvutsron m lkjih g fedcba`_P NfullDecoding†€Lq†€tJpsDecCtrl†€tHpsDec†€V ^psRC†€Ÿ[cbk_ptr_Q14†€.UnBytesUsed†!tZpNLSF0_Q15†@Ё€PXNLSFIndices†(Ё€eSIx†!tQi†t\psNLSF_CB†€`YpNLSF_Q15†@Ё€PWGainsIndices†Ё€cVIxs†Ё€cTfs_kHz_dec†tRk†t                           ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёе ъ з ž!о –!ч я ш ™!ѓ љ Ž!›!e!tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Љ ­ Ў Н Ы а д е ж з о р у х ч ш ъ ы я ѓ є љ ‚!ƒ!„!Ž!’!“!”!–!™!›!ž!Ÿ!Є!Ѕ!Њ!ц!”"•"Ѕ"Ї"К"М"Э"а"б"в"г"д"е"й"л"м"н"о"п"р"с"т"у"ф"х"ц"ч"ш"щ"ь"э"я"№"ђ"ѓ"є"і"ї"ј"њ"ћ"§"ў"џ"€#@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl.cil$in.cil$exѓ;.cil$syI .cil$dbO/3442 1284597036 100666 23376 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТ0[ ,e‘L Z.drectveQ, .cil$fg}@@.cil$glћ“@@.cil$inŽ@@.cil$ex“7@@.cil$syй "O@@.cil$dbћX@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_decode_indices_v4.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_decode_indices_v4.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2y2€ovїV €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_decode_indices_v4.c7KzoKЁŸ%Rыh7UФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШіSKP_Silk_decode_indices_v4‚€q€(€#€h*ХЦЧШЩЪЫЬЭЮЯабвгдежзийшщыьюяёђѓєѕії$/>лѕSKP_Silk_SamplingRates_offset†€/SKP_Silk_range_decoder_multi‚€P !SKP_Silk_NLSF_CB_struct€–>SKP_Silk_range_coder_get_length†€[гSKP_Silk_pitch_lag_SWB_CDF_offset†€ьSKP_Silk_LTP_gain_CDF_offsets† €]юSKP_Silk_LTPscale_CDF„!€^ыSKP_Silk_LTP_gain_CDF_ptrs† €_$SKP_Silk_range_decoder‚€ЄвSKP_Silk_pitch_lag_SWB_CDF„€!€` ƒSKP_Silk_decoder_state€j {SKP_Silk_CNG_struct€o nSKP_Silk_PLC_struct€™ SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_range_coder_state€ž SKP_Silk_range_coder_state€žSKP_Silk_Seed_offset†€ Мsize_tuйSKP_Silk_pitch_delta_CDF_offset†€SKP_Silk_Seed_CDF„ !€aЦSKP_Silk_type_offset_joint_CDF„(!€bіSKP_Silk_NLSF_interpolation_factor_CDF„ !€cѓSKP_Silk_SamplingRates_table†€dлSKP_Silk_decoder_set_fs‚€ЪSKP_Silk_delta_gain_CDF„\!€e SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)ёSKP_Silk_vadflag_CDF„!€ЊЯSKP_Silk_pitch_lag_MB_CDF_offset†€SKP_Silk_FrameTermination_v4_CDF„ !€cшSKP_Silk_LTP_per_index_CDF„!€^ХSKP_Silk_type_offset_CDF„ !€aЮSKP_Silk_pitch_lag_MB_CDF„€„!€fщSKP_Silk_LTP_per_index_CDF_offset†€АSA_Parameter€)†яSKP_Silk_LTPscale_offset†€дSKP_Silk_pitch_contour_CDF„F!€g ‚SKP_Silk_CNG_struct€oЭSKP_Silk_pitch_lag_NB_CDF_offset†€4strnlen†€бSKP_Silk_pitch_lag_WB_CDF_offset†€аSKP_Silk_pitch_lag_WB_CDF„€!€hЫSKP_Silk_delta_gain_CDF_offset†€ЎSA_Method€)†@жSKP_Silk_pitch_contour_NB_CDF„!€iеSKP_Silk_pitch_contour_CDF_offset†€ Нwchar_t! zSKP_Silk_PLC_struct€™иSKP_Silk_pitch_delta_CDF„.!€jЩSKP_Silk_gain_CDF_offset†€ШSKP_Silk_gain_CDF„€!€lЬSKP_Silk_pitch_lag_NB_CDF„€!€mєSKP_Silk_SamplingRates_CDF„ !€aђSKP_Silk_vadflag_offset†€Ћwcsnlen†€їSKP_Silk_NLSF_interpolation_factor_offset†€зSKP_Silk_pitch_contour_NB_CDF_offset†€ЧSKP_Silk_type_offset_CDF_offset†€ ЕSKP_Silk_decoder_state€jSKP_Silk_FrameTermination_v4_offset†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœOO€ O €ўO3 f0" D ЄBEOœO"SS&іF-HLOSO#&O3†At2†AtKO$O%&W3†At2†AtKO&&X3†Cƒ2†Cр KO'&ZЙH†Cж 3†At'†CЅ"2†CŸ!KO,ЙH†Cж 3†At€4,'†Cє0†At3†At8[SO-&$Н‚€ЅЙѕІA“ U†At&єU†C’!ЙZ†CŸ!U†CŸ!&MU†CєLKO0ЙM†At3†At"9]ЙM†At3†At$8\)]SO1ЙZ†CŸ!3†At'†Cє3†Atљ2†AtKO2:JO3TO4)\&N&ѓЙM†At3†A(0ІA“ 2†AtKO5&лН‚€ЙN†AtU†AtЙH†Cж U†Cж LKO7&O3†At2†AtKO8&P3†At2†AtKO9TO;)[)_ЙP†At3†At8`SO?&$Н‚€ЅЙђІA“ U†At&ёU†C’!ЙZ†CŸ!U†CŸ!ЙH†Cж 3†At€р.'†Cы ЙO†At3†A(U†CєLKODЙO†At3†At8aSOF&$Н‚€ЅЙЧІA“ U†At&ХU†C’!ЙZ†CŸ!U†CŸ!&MU†CєLKOGT:b)aSOIOJ&$Н‚€ЅЙЧІA“ U†At&ЦЙH†Cж 3†At€Ш+'†Cє0†At3†A (U†C’!ЙZ†CŸ!U†CŸ!&MU†CєLKOKT)bOL&QЙM†At3†At 2†AtKOM&RЙM†At3†At 2†AtKONЙH†Cж 3†At€Ш+'†CєЙM†At2†AtKOTЙO†At3†At8cSOV&$Н‚€ЅЙЩІA“ U†At&ШЙQ†At3†A€‚(U†C’!ЙZ†CŸ!U†CŸ!ЙH†Cж 3†At€А,'†CЮ"ЙO†At3†A(3†A(U†CєLKOWT:d)cSOY&$Н‚€ЅЙЫІA“ U†At&ЪU†C’!ЙZ†CŸ!U†CŸ!ЙH†Cж 3†At€А,'†CЮ"ЙO†At3†A(3†A(U†CєLKOZT)dO]&K3†At2†AtK:e)f&K3†At5†AtK)eЙK†At3†At"8gSO^&$Н‚€ЅЙЫІA“ U†At&ЪU†C’!ЙZ†CŸ!U†CŸ!ЙH†Cж 3†At€А,'†CЮ"ЙO†At3†A(ЙK†At3†A(U†CєLKO_T:f)gOf&XЙH†Cж 3†At€€,'†Cц!ЙQ†At3†A(0†Cр 2†Cр KOi&/Н‚€QЙX†Cр 3†At'†C” 0ІA“ UІA“ ЙX†Cр 3†At'†Cг"0ІCв"U†C” ЙX†Cр 3†At'†Cе"0ІCд"U†C”!ЙZ†CŸ!U†CŸ!ЙH†Cж 3†At€P-'†Cз"ЙO†At3†A((U†CєLKOnOo&$Н‚€ЅЙїІA“ U†At&іU†C’!ЙZ†CŸ!U†CŸ!ЙH†Cж 3†At€.'†Cы ЙO†At3†A(U†CєLKOqЙQ†At3†At8hSOv&U3†At2†AtKOwЙO†At3†At$8iЙH†Cж 3†At€ˆ,'†Cы ЙO†At3†At3†A(0†At3†At8iSOy&$Н‚€ЅЙйІA“ U†At&иU†C’!ЙZ†CŸ!U†CŸ!&VU†CєLKOzЙV†At3†At"8jSO{&VЙV†At3†At 2†AtKO|ЙH†Cж 3†At€,.'†Cы ЙO†At3†A(ЙW†AtЙV†At2†AtKO}&U3†At2†AtKO~TO)jTO€€)iЙU†At8kSO€‚ЙH†Cж 3†At€м+'†Cє0†At3†At8lSO€ƒ&$Н‚€ЅЙЭІA“ U†At&ЬU†C’!ЙZ†CŸ!U†CŸ!ЙH†Cж 3†At€,.'†Cы ЙO†At3†A(U†CєLKO€„T:m)lЙH†Cж 3†At€м+'†Cє0†At3†At 8nSO€…&$Н‚€ЅЙЯІA“ U†At&ЮU†C’!ЙZ†CŸ!U†CŸ!ЙH†Cж 3†At€,.'†Cы ЙO†At3†A(U†CєLKO€†T:o)nЙH†Cж 3†At€м+'†Cє0†At3†At8pSO€‡&$Н‚€ЅЙбІA“ U†At&аU†C’!ЙZ†CŸ!U†CŸ!ЙH†Cж 3†At€,.'†Cы ЙO†At3†A(U†CєLKO€ˆT:q)pSO€‰&$Н‚€ЅЙгІA“ U†At&вU†C’!ЙZ†CŸ!U†CŸ!ЙH†Cж 3†At€,.'†Cы ЙO†At3†A(U†CєLKO€ŠT)q)o)mO€‹TO€Œ)k&WЙH†Cж 3†At€,.'†Cы ЙO†At3†A(0†At2†AtKO€ЙH†Cж 3†At€м+'†Cє0†At3†At8rSO€‘&$Н‚€ЅЙзІA“ U†At&жU†C’!ЙZ†CŸ!U†CŸ!ЙH†Cж 3†At€@.'†Cы ЙO†At3†A(U†CєLKO€’T:s)rSO€”&$Н‚€ЅЙеІA“ U†At&дU†C’!ЙZ†CŸ!U†CŸ!ЙH†Cж 3†At€@.'†Cы ЙO†At3†A(U†CєLKO€•T)sO€›&$Н‚€ЅЙщІA“ U†At&шU†C’!ЙZ†CŸ!U†CŸ!ЙH†Cж 3†At€T.'†Cы ЙO†At3†A(U†CєLKO€&L3†At2†AtK:t)u&L3†At5†AtK)tЙL†At3†At"8vSO€žO€Ÿ&$Н‚€Ѕ&ьЙH†Cж 3†At€T.'†Cы ЙO†At3†A(0†At3†A(0ІA“ U†At&ыЙH†Cж 3†At€T.'†Cы ЙO†At3†A(0†At3†A(0ІC“!U†C’!ЙZ†CŸ!U†CŸ!ЙH†Cж 3†At€h.'†CЮ"ЙO†At3†A(ЙL†At3†A(U†CєLKO€ T:u)vO€Ѕ&$Н‚€ЅЙяІA“ U†At&юU†C’!ЙZ†CŸ!U†CŸ!ЙH†Cж 3†At€И.'†Cы ЙO†At3†A(U†CєLKO€ІTO€Ћ)h&$Н‚€ЅЙІA“ U†At&U†C’!ЙZ†CŸ!U†CŸ!&SU†CєLKO€ЌЙH†Cж 3†At€Ь.'†Cы ЙO†At3†A(ЙS†At2†AtKO€А&$Н‚€ЅЙІA“ U†At&U†C’!ЙZ†CŸ!U†CŸ!&PU†CєLKO€ВЙH†Cж 3†At€ˆ,'†Cы ЙO†At3†A(ЙQ†At2†AtKO€ГЙH†Cж 3†At€œ,'†Cы ЙO†At3†A(ЙR†At2†AtKO€Е&O3†At5†AtKO€ЖT:_)`O€Л&>Н†At€\&TU†CєЙZ†CŸ!U†Cй"LKO€МЙH†Cж 3†At€0,'†CєЙZ†CŸ!3†At'†Cє0†AtЙT†At2†AtKO€НЙH†Cж 3†At€0,'†Cє0†At3†At"8xSO€ОЙZ†CŸ!3†At'†Cє3†Atњ2†AtKO€ПTO€С)xЙH†Cж 3†At€8,'†CєЙO†At2†AtKO€ТЙH†Cж 3†At€@,'†CєЙP†At2†AtKO€УT)JOGTTOœO€ФM: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t xv u tsrqponmlkjihg f edcba` _ ]\[J HpsDec†€V ZpsRC†€ŸUdecode_absolute_lagIndex†tQsigtype†tTnBytesUsed†!tPFrameTermination†!tVdelta_lagIndex†!tMIx†!tKi†tXpsNLSF_CB†€`OFrameIndex†tRQuantOffsetType†tNfs_kHz_dec†tWprev_lagIndex†tLk†tSseed_int†!t                      ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёе ъ з ž!о –!ч я ш ™!Ž!›!H!tuƒєƒ ˆ ‹ Œ Ž  ‘ “ ” Љ е ж з о р ч ш ъ ы я ё Ž!’!“!”!–!™!›!ž!Ÿ!Є!Ѕ!Њ!ц!”"•"Ѕ"Ю"а"б"в"г"д"е"з"й"л"м"н"о"п"р"с"т"у"ф"х"ц"ч"ш"щ"ъ"ь"э"@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glћ.cil$in.cil$ex“7.cil$syй .cil$db/3481 1284597036 100666 19613 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТ}L ,e‘LYK.drectveQ, .cil$fg }@@.cil$glE‰@@.cil$inЮ@@.cil$exЏ0Я@@.cil$syо~A@@.cil$db§\J@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_decode_frame.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_decode_frame.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2k2€ovAV €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_decode_frame.c?йЗЪфA‘Й їr‹EФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШъSKP_Silk_decode_frame†€€(€#€‘h } Пк9ѓіџ&кSKP_Silk_PLC_glue_frames‚€ !SKP_Silk_NLSF_CB_struct€–SKP_Silk_decode_core‚€CѓSKP_Silk_decode_parameters‚€' ЖSKP_Silk_decoder_control€y ƒSKP_Silk_decoder_state€j {SKP_Silk_CNG_struct€o nSKP_Silk_PLC_struct€™ SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_range_coder_state€ž SKP_Silk_range_coder_state€ž Мsize_tu SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)9SKP_Silk_range_dec_init‚€#АSA_Parameter€)† ‚SKP_Silk_CNG_struct€oіSKP_Silk_decode_indices_v4‚€q} SKP_Silk_biquad‚€D4strnlen†€ЎSA_Method€)†@ Нwchar_t! zSKP_Silk_PLC_struct€™&SKP_Silk_CNG‚€ УSKP_Silk_decoder_control€yЋwcsnlen†€џSKP_Silk_decode_parameters_v4‚€'ПSKP_Silk_PLC‚€H ЕSKP_Silk_decoder_state€j [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœOOOOœOO€ O €ўO3 f0" D ЄBEOœO,SS&ъF-T-R-P-N-L-J-HLOSO-O.&[3†At2†AtKO/O2&XЙH†Cж 3†At€р+'†Cє0†At2†AtKO3&W3†At€”'†Cє3†At2†AtKO63‚KO;ЙT†Cє3†At2†AtKO<ЙR†At3†At8^SO@&YЙH†Cж 3†At€м+'†Cє0†At2†AtKOA&ZЙH†Cж 3†At€ш+'†Cє0†At2†AtKOBЙH†Cж 3†At€4,'†Cє0†At3†At8_SOD&9Н‚€$ЙPІA“ UІA“ ЙN†C™"U†C™"ЙH†Cж 3†At'†CЅ"U†CŸ!LKOFЙH†Cж 3†At€p7'†Cє0†At3†At8`SOG&іН‚€rЙH†Cж U†Cж LKOHTOI)`TON)_ЙH†Cж 3†At€p7'†Cє0†At3†At8aSOO&џН‚€(3†AtUІA“ &\U†Cє&WU†Cє ЙH†Cж U†Cж LKOPT:b)aSOQ&ѓН‚€(3†AtUІA“ &\U†Cє&WU†Cє ЙH†Cж U†Cж LKORT)bOUЙH†Cж 3†At'†Cє0†At8cSOVЙH†Cж 3†At€0,'†Cє3†At2†AtKOX&R3†At2†AtKOYЙH†Cж 3†At€м+'†CєЙY†At2†AtKOZЙH†Cж 3†At€ш+'†CєЙZ†At2†AtKO[ЙH†Cж 3†At€р+'†CєЙY†At3†At2†AtKO\ЙH†Cж 3†At€ф+'†CєЙY†At3†At3†At2†AtKO_ЙT†CєЙH†Cж 3†At'†Cє0†At2†AtKOaЙH†Cж 3†At'†Cє0†At3†Atј8dSOb&[3†Atѕ2†AtKOcT:e)dSOd&[3†Atє2†AtKOeT)eOfT:f)cSOgЙT†CєЙH†Cж 3†At'†Cє0†AtЙH†Cж 3†At€0,'†Cє0†At2†AtKOhЙH†Cж 3†At€4,'†Cє3†At5†AtKOk&XЙH†Cж 3†At€р+'†Cє0†At2†AtKOp&Н‚€F&\U†C” ЙJ†C‘U†C‘&WU†Cє ЙH†Cж U†Cж LKOu&ПН‚€IЙR†AtU†AtЙX†AtU†AtЙJ†C‘U†C‘&WU†Cє ЙH†Cж U†Cж LKOwЙH†Cж 3†At€h7'†Cє3†At2†AtKOxЙH†Cж 3†At€l7'†Cє&W3†At€Є'†Cє0†At2†AtKO{ЙH†Cж 3†At€,,'†Cє3†At2†AtKO|T)fO}TO€)^ЙR†At3†At8gSO€ƒ&ПН‚€IЙR†AtU†AtЙX†AtU†AtЙJ†C‘U†C‘&WU†Cє ЙH†Cж U†Cж LKO€„ЙH†Cж 3†At€h7'†Cє3†At5†AtKO€†TO€‹)g3†At€Ќ@†CƒЙX†At3†BuU†BuЙJ†C‘U†CЫ ЙH†Cж 3†At€8$'„Cп!U†CƒLKO€&кН‚€JЙX†AtU†AtЙJ†C‘U†C‘&WU†Cє ЙH†Cж U†Cж LKO€•&&Н‚€JЙX†AtU†AtЙJ†C‘U†C‘&WU†Cє ЙH†Cж U†Cж LKO€šO€›3‚KO€œ&} Н‚€KЙX†AtUІA“ ЙJ†C‘U†C‘ЙH†Cж 3†At€Ь+'†CЮ!U†CєЙH†Cж 3†At€д+'†CЬ"0†CЎ U†CЎ ЙH†Cж 3†At€и+'†CЬ"0†CЎ U†CЎ ЙJ†C‘U†CЎ LKO€ЁЙL†C‘ЙX†At,„!2„!KO€ЄЙH†Cж 3†At€М+'†Cє&W3†At'†Cы 3†A (0†At2†AtKO€ІЙ[†AtA†At:VO€ЇT)VOGTTOœO€ЈM: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t gfedcba`_^V TdecBytes†€tRaction†tPnBytes†€NpCode†€LpN†€JpOut†€HpsDec†€V WsDecCtrl†€ЌЁˆ€yZLPC_order_old†t[ret†tYfs_Khz_old†t\Pulses†€€Ё€ZXL†t            ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёе ъ з ž!о –!ч я ш ™!ѓ љ Ž!›!<!tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Љ Ў Ф Ы е ж з к о ч ш ъ ы я ё ђ ѓ є љ !Ž!–!™!›!ž!Ÿ!Ю!п!™"›"Ѓ"Є"Ѕ"Ї"Ј"У"Ц"Ш"Щ"Ъ"Ы"Ь"@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$glE.cil$in.cil$exЏ0.cil$syо.cil$db§ /3515 1284597036 100666 29919 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТПt ,e‘L›s.drectveQ, .cil$fg }@@.cil$gl_ ‡@@.cil$inц@@.cil$ex§Vч@@.cil$syЩ фf@@.cil$dbю­r@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_decode_core.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_decode_core.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2.2€ov[ V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_decode_core.cЌ№:™ uе№д\с;ЭФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж iSKP_DIV32_varQ†€M€€y€щШж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШSKP_Silk_decode_core‚€C€(€#€Ю h— i !SKP_Silk_NLSF_CB_struct€– ЖSKP_Silk_decoder_control€y ƒSKP_Silk_decoder_state€j {SKP_Silk_CNG_struct€o nSKP_Silk_PLC_struct€™ SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_range_coder_state€ž SKP_Silk_range_coder_state€ž Мsize_tu— SKP_Silk_MA_Prediction‚€> SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)АSA_Parameter€)† ‚SKP_Silk_CNG_struct€o4strnlen†€ЎSA_Method€)†@ Нwchar_t! zSKP_Silk_PLC_struct€™ УSKP_Silk_decoder_control€yЋwcsnlen†€SKP_Silk_Quantization_Offsets_Q10„€E ЕSKP_Silk_decoder_state€j [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœOO€ O €ўO3 f0" D ЄBEOœO'SS&F-N-L-J-HLOSO(&S3†At2†AtKO)O*O+O,O-O.O/3‚KO1&d&ЙJ†Cє 3†At€Є'†Cє0†At3†A(ЙJ†Cє 3†At€ '†Cє0†At3†A(0Є!­ 2†AtKO3ЙJ†Cє 3†At€Ј'†Cє0†At3†At"8mSO4&U3†At2†AtKO5T:n)mSO6&U3†At2†AtKO7T)nO;&cЙJ†Cє 3†At '†Cє0†At2†AtKO<&Q3†At2†AtK:o)p&Q3†At5†AtK)oЙQ†AtЙH†Cж 3†At€р+'†Cє0†At"8qSO=&c3†At€kc6Йc†At3†At€5„Г 2†AtKO?&eЙc†At3†At 2†AtKOAЙH†Cж 3†At€8'†Cы ЙQ†At3†A(ЙN†C” ЙQ†At3†A(0ІA“ ,†At3†At Йd†At2†AtKOBЙH†Cж 3†At€8'†Cы ЙQ†At3†A(ЙH†Cж 3†At€8'†Cы ЙQ†At3†A(0†AtЙe†At Йe†At2†AtKOD&cЙN†C” ЙQ†At3†A(0ІA“ †AtKOET:p)qOH&_ЙH†Cж 3†At€8'†Cы 2†CєKOI&`ЙH†Cж 3†At€И'†Cы 2†CєKOJ&ZЙH†Cж 3†At€8$'†CК"ЙH†Cж 3†At€р+'†Cє0†At3†A(2†C‘KOKЙH†Cж 3†At€И+'†CєЙH†Cж 3†At€р+'†Cє0†At2†AtKOM&R3†At2†AtK:s)t&R3†At5†AtK)sЙR†At3†At"8uSON&XЙJ†Cє 3†At,'†CМ"ЙR†At3†At 3†A (2†C‘KOQ3†At€Ќ@†CƒЙH†Cж 3†At€ш+'†Cє0†At3†BuU†BuЙX†C‘U†CЫ &[U†CƒLKOR&YЙJ†Cє 3†Atl'†CК"ЙR†At3†At3†A(2†C‘KOS&]ЙJ†Cє 3†At'†Cы ЙR†At3†A(0†At2†AtKOT&WЙJ†Cє 3†At€”'†Cє0†At2†AtKOU&VЙJ†Cє 3†At€Є'†Cє0†At2†AtKOW&h3†At€џџџЙ]†At3†At 2†AtKOX&hЙh†At3†At€џ"Йh†At3†At€џCB2†AtKO[&j3†At€2†AtKO\Йh†AtЙH†Cж 3†At€'†Cє0†At 8ySO]&j&iН†At€N3†AtUІA“ ЙH†Cж 3†At€'†Cє0†AtUІA“ Йh†AtUІA“ L2†AtKO^TOa)yObЙH†Cж 3†At€h7'†Cє0†At8zЙH†Cж 3†At€l7'†Cє0†At3†At8zЙJ†Cє 3†At€Є'†Cє0†At3†At8zЙR†At3†At"8zSOd3†At€­@†Cƒ3†Bu U†Bu3†AtU†AtЙY†C‘U†CƒLKOeЙY†C‘3†A(3†At€2„!KOg&V3†At2†AtKOhЙJ†Cє 3†At'†Cы ЙR†At3†A(ЙH†Cж 3†At€М+'†Cє0†At2†AtKOi&W3†At€@2†AtKOjTOk)zЙV†At3†At8~SOn&SЙJ†Cє 3†At'†Cы ЙR†At3†A(0†At2†AtKOpЙR†At3†AtЙU†At3†At  3†At8SOr&TЙH†Cж 3†At€р+'†Cє0†AtЙS†AtЙH†Cж 3†At€ш+'†Cє0†At3†At2†AtKOs&T3†AtЙH†Cж 3†At€р+'†Cє0†AtЙH†Cж 3†At€ш+'†Cє0†At$ЙT†At3†At$3†AtЙT†AtЙH†Cж 3†At€р+'†Cє0†AtЙH†Cж 3†At€ш+'†Cє0†At"ЙH†Cж 3†At€р+'†Cє0†AtЙH†Cж 3†At€ш+'†Cє0†AtЙT†AtCBCBЙT†AtЙH†Cж 3†At€р+'†Cє0†AtЙH†Cж 3†At€ш+'†Cє0†At$ЙH†Cж 3†At€р+'†Cє0†AtЙH†Cж 3†At€ш+'†Cє0†AtЙT†At3†At"3†AtЙT†AtCBCBCB2†AtKOuOv&— Н‚€?ЙH†Cж 3†At€ш+'†Cє0†AtUІA“ ЙH†Cж 3†At€р+'†Cє0†AtЙT†AtUІA“ &\ЙT†At3†AU†C‘&kU†CєЙX†C‘U†CЎ ЙH†Cж 3†At€8$'†CК"ЙT†AtЙR†AtЙH†Cж 3†At€р+'†Cє0†At3†At 3†A(U†CЎ LKOy&iЙh†At3†At 2†AtKOzЙR†At3†At8€SO|&iЙi†At3†At ЙJ†Cє 3†At€”'†Cє0†At,„!,†AtЙi†At3†At€џџ ЙJ†Cє 3†At€”'†Cє0†At,„!,†At3†At 3†At 2†AtKO}TO~)€&Q3†At2†AtK:…)†&Q3†At5†AtK)…ЙQ†AtЙS†At3†At"8‡SOЙH†Cж 3†At€'†Cы ЙH†Cж 3†At€И+'†Cє0†AtЙQ†At3†At3†A(Йi†At3†At &\ЙH†Cж 3†At€р+'†Cє0†AtЙQ†At3†At3†A(0„!,†AtЙi†At3†At€џџ &\ЙH†Cж 3†At€р+'†Cє0†AtЙQ†At3†At3†A(0„!,†At3†At 2†AtKO€€T:†)‡O€T:Œ)SO€ƒЙj†At3†At€ 8ŽSO€„&Q3†At2†AtK:)&Q3†At5†AtK)ЙQ†AtЙS†At3†At"8‘SO€…ЙH†Cж 3†At€'†Cы ЙH†Cж 3†At€И+'†Cє0†AtЙQ†At3†At3†A(Йj†At3†At ЙH†Cж 3†At€'†Cы ЙH†Cж 3†At€И+'†Cє0†AtЙQ†At3†At3†A(0†At,„!,†AtЙj†At3†At€џџ ЙH†Cж 3†At€'†Cы ЙH†Cж 3†At€И+'†Cє0†AtЙQ†At3†At3†A(0†At,„!,†At3†At Йj†AtЙH†Cж 3†At€'†Cы ЙH†Cж 3†At€И+'†Cє0†AtЙQ†At3†At3†A(0†At3†At 3†At3†At 2†AtKO€†T:)‘O€‡TO€ˆ)ŽT)ŒO€‰TO€Œ)~&Q3†At2†AtK:–)—&Q3†At5†AtK)–ЙQ†At3†At"8˜SO€ЙH†Cж 3†At€'†Cы ЙQ†At3†A(Йj†At3†At ЙH†Cж 3†At€'†Cы ЙQ†At3†A(0†At,„!,†AtЙj†At3†At€џџ ЙH†Cж 3†At€'†Cы ЙQ†At3†A(0†At,„!,†At3†At Йj†AtЙH†Cж 3†At€'†Cы ЙQ†At3†A(0†At3†At 3†At3†At 2†AtKO€ŽT:—)˜O€‘3‚KO€’ЙH†Cж 3†At€'†CєЙh†At2†AtKO€–ЙV†At3†At8žSO€˜&^ЙH†Cж 3†At€'†Cы ЙH†Cж 3†At€И+'†Cє0†AtЙS†At3†At3†A(2†CєKO€™&Q3†At2†AtK:Ÿ) &Q3†At5†AtK)ŸЙQ†AtЙH†Cж 3†At€ф+'†Cє0†At"8ЁSO€›&aЙ^†Cє3†A(0†At3†At ЙY†C‘3†A(0„!,†AtЙ^†Cє3†A(0†At3†At€џџ ЙY†C‘3†A(0„!,†At3†At 2†AtKO€œ&aЙa†AtЙ^†Cє3†Aќ(0†At3†At ЙY†C‘3†A(0„!,†AtЙ^†Cє3†Aќ(0†At3†At€џџ ЙY†C‘3†A(0„!,†At3†At 2†AtKO€&aЙa†AtЙ^†Cє3†Aј(0†At3†At ЙY†C‘3†A(0„!,†AtЙ^†Cє3†Aј(0†At3†At€џџ ЙY†C‘3†A(0„!,†At3†At 2†AtKO€ž&aЙa†AtЙ^†Cє3†Aє(0†At3†At ЙY†C‘3†A(0„!,†AtЙ^†Cє3†Aє(0†At3†At€џџ ЙY†C‘3†A(0„!,†At3†At 2†AtKO€Ÿ&aЙa†AtЙ^†Cє3†A№(0†At3†At ЙY†C‘3†A(0„!,†AtЙ^†Cє3†A№(0†At3†At€џџ ЙY†C‘3†A(0„!,†At3†At 2†AtKO€ &^3†A5†CєKO€ЃЙ`†CєЙQ†At3†A(Й_†CєЙQ†At3†A(0†AtЙa†At3†At 3†At3†At 2†AtKO€ІЙH†Cж 3†At€'†Cы ЙH†Cж 3†At€И+'†Cє0†At3†A(Й`†CєЙQ†At3†A(0†At3†At 2†AtKO€ЇЙH†Cж 3†At€И+'†Cє3†At5†AtKO€ЈT: )ЁO€ЉT:Ж)žSO€Њ3†At€Ќ@†CƒЙH†Cж 3†At€ф+'†Cє0†At3†BuU†BuЙ_†CєU†CЫ Й`†CєU†CƒLKO€ЋT)ЖO€ГЙH†Cж 3†At€ш+'†Cє0†At3†At8ИSO€Д&Q3†At2†AtK:Й)К&Q3†At5†AtK)ЙЙQ†AtЙH†Cж 3†At€ф+'†Cє0†At"8ЛSO€Ж&g&[3†A(,†Cє0†At2†AtKO€З&bЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At Йg†At,„!,†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At€џџ Йg†At,„!,†At3†At 2†AtKO€И&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At Йg†At3†At ЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At€џџ Йg†At3†At 3†At 2†AtKO€Й&g&[3†A(,†Cє0†At2†AtKO€К&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At Йg†At,„!,†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At€џџ Йg†At,„!,†At3†At 2†AtKO€Л&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At Йg†At3†At ЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At€џџ Йg†At3†At 3†At 2†AtKO€М&g&[3†A(,†Cє0†At2†AtKO€Н&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At Йg†At,„!,†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At€џџ Йg†At,„!,†At3†At 2†AtKO€О&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At Йg†At3†At ЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At€џџ Йg†At3†At 3†At 2†AtKO€П&g&[3†A (,†Cє0†At2†AtKO€Р&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At Йg†At,„!,†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At€џџ Йg†At,„!,†At3†At 2†AtKO€С&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At Йg†At3†At ЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At€џџ Йg†At3†At 3†At 2†AtKO€Т&g&[3†A(,†Cє0†At2†AtKO€У&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At 3†A(0†At3†At Йg†At,„!,†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At 3†A(0†At3†At€џџ Йg†At,„!,†At3†At 2†AtKO€Ф&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At 3†A(0†At3†At Йg†At3†At ЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At 3†A(0†At3†At€џџ Йg†At3†At 3†At 2†AtKO€Х&g&[3†A(,†Cє0†At2†AtKO€Ц&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At 3†A(0†At3†At Йg†At,„!,†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At 3†A(0†At3†At€џџ Йg†At,„!,†At3†At 2†AtKO€Ч&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At 3†A(0†At3†At Йg†At3†At ЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At 3†A(0†At3†At€џџ Йg†At3†At 3†At 2†AtKO€Ш&g&[3†A(,†Cє0†At2†AtKO€Щ&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At 3†A(0†At3†At Йg†At,„!,†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At 3†A(0†At3†At€џџ Йg†At,„!,†At3†At 2†AtKO€Ъ&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At Йg†At3†At ЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At€џџ Йg†At3†At 3†At 2†AtKO€Ы&g&[3†A(,†Cє0†At2†AtKO€Ь&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At Йg†At,„!,†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At€џџ Йg†At,„!,†At3†At 2†AtKO€Э&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At Йg†At3†At ЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At€џџ Йg†At3†At 3†At 2†AtKO€а&fЙQ†At3†A(Й`†CєЙQ†At3†A(0†AtЙb†At2†AtKO€гЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†A(&fЙQ†At3†A(0†At3†At 2†AtKO€дT:К)ЛO€еT:ф)ИSO€ж3‚KO€з&Q3†At2†AtK:ц)ч&Q3†At5†AtK)цЙQ†AtЙH†Cж 3†At€ф+'†Cє0†At"8шSO€й&g&[3†A(,†Cє0†At2†AtKO€к&bЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At Йg†At,„!,†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At€џџ Йg†At,„!,†At3†At 2†AtKO€л&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At Йg†At3†At ЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At€џџ Йg†At3†At 3†At 2†AtKO€м&g&[3†A(,†Cє0†At2†AtKO€н&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At Йg†At,„!,†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At€џџ Йg†At,„!,†At3†At 2†AtKO€о&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At Йg†At3†At ЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At€џџ Йg†At3†At 3†At 2†AtKO€п&g&[3†A(,†Cє0†At2†AtKO€р&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At Йg†At,„!,†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At€џџ Йg†At,„!,†At3†At 2†AtKO€с&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At Йg†At3†At ЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At€џџ Йg†At3†At 3†At 2†AtKO€т&g&[3†A (,†Cє0†At2†AtKO€у&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At Йg†At,„!,†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At€џџ Йg†At,„!,†At3†At 2†AtKO€ф&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At Йg†At3†At ЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At3†A(0†At3†At€џџ Йg†At3†At 3†At 2†AtKO€х&g&[3†A(,†Cє0†At2†AtKO€ц&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At 3†A(0†At3†At Йg†At,„!,†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At 3†A(0†At3†At€џџ Йg†At,„!,†At3†At 2†AtKO€ч&bЙb†AtЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At 3†A(0†At3†At Йg†At3†At ЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†At 3†A(0†At3†At€џџ Йg†At3†At 3†At 2†AtKO€ъ&fЙQ†At3†A(Й`†CєЙQ†At3†A(0†AtЙb†At2†AtKO€эЙH†Cж 3†At€'†Cы 3†AtЙQ†At3†A(&fЙQ†At3†A(0†At3†At 2†AtKO€юT:ч)шO€яT)фO€ђ&Q3†At2†AtK:)&Q3†At5†AtK)ЙQ†AtЙH†Cж 3†At€ф+'†Cє0†At"8SO€ѓЙZ†C‘ЙQ†At3†A(&fЙQ†At3†A(0†At3†At Й]†At,„!,†At&fЙQ†At3†A(0†At3†At€џџ Й]†At,„!,†At3†At &fЙQ†At3†A(0†AtЙ]†At3†At 3†At3†At 3†At 3†At3†At 3†At€џ$3†At€џ&fЙQ†At3†A(0†At3†At Й]†At,„!,†At&fЙQ†At3†A(0†At3†At€џџ Й]†At,„!,†At3†At &fЙQ†At3†A(0†AtЙ]†At3†At 3†At3†At 3†At 3†At3†At 3†At€€џџ"3†At€€џџ&fЙQ†At3†A(0†At3†At Й]†At,„!,†At&fЙQ†At3†A(0†At3†At€џџ Й]†At,„!,†At3†At &fЙQ†At3†A(0†AtЙ]†At3†At 3†At3†At 3†At 3†At3†At CBCB,„!2„!KO€єT:)O€ї3†At€Ќ@†Cƒ3†Bu@U†BuЙH†Cж 3†At€'†Cы ЙH†Cж 3†At€ф+'†Cє0†At3†A(U†CЫ ЙH†Cж 3†At€'†CР"U†CƒLKO€ј&_ЙH†Cж 3†At€ф+'†Cє0†At3†A†CєKO€љ&`ЙH†Cж 3†At€ф+'†Cє0†At3†A†CєKO€њ&ZЙH†Cж 3†At€ф+'†Cє0†At3†A†C‘KO€ћT:t)uO€ў3†At€Ќ@†CƒЙH†Cж 3†At€р+'†Cє0†At3†BuU†BuЙH†Cж 3†At€8$'†CК"ЙH†Cж 3†At€р+'†Cє0†At3†A(U†CЫ ЙL†C‘U†CƒLKO€T)POGTTOœO€M: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t   ш ч цфЛ К ЙИЖЁ   Ÿž˜ — –‘  ŽŒ‡ † …€~zyu t sq p onmP Nq†€Lxq†€JpsDecCtrl†€tHpsDec†€V _pexc_Q10†€t\sLTP„€РЁ€‹Vsigtype†tiinv_gain_Q32†tbLPC_pred_Q10†tQi†t`pres_Q10†€tcrand_seed†t]Gain_Q16†tXA_Q12†€kFiltState†@Ё€PaLTP_pred_Q14†tdoffset_Q10†t^pred_lag_ptr†€t[A_Q12_tmp„ Ё€ugAtmp†tTstart_idx†tRk†tjgain_adj_Q16†thinv_gain_Q16†tfvec_Q10†€р€AZpxq†€UNLSF_interpolation_flag†tWLTP_scale_Q14†tedither†tYB_Q14†€Slag†t                        ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёе ъ з ž!о –!ч я ш ™!ѓ љ Ž!›!5!tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Љ ­ Ў Ы Э Ю а е ж з о ч ш ъ ы я ѓ є ѕ љ ‹!Ž!–!™!›!ž!К"М"О"П"Р"С"У"Х"@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$gl_ .cil$in.cil$ex§V.cil$syЩ .cil$dbю /3548 1284597036 100666 27048 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТˆi ,e‘Ldh.drectveQ, .cil$fg}@@.cil$gl?@@.cil$inО@@.cil$exsEЬ@@.cil$syў ?Y@@.cil$db'=g@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_dec_API.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_dec_API.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2A2€ov;V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sdk_api.h˜›*'Я#ћ@5юm gљЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_control.hB5|†?ЕP ќž}o[Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсИc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fЛc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉКc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьSc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іk c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Эj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_dec_api.cз„~nЅUX љq.Ё j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОѓ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјї j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{" j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,ђ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™Žj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlBj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пCj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_PDj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY& &7 Н†At€ɘ†AtU†AtL2†AtKO?Йš†CєЙ †At2†AtKO@Й †At3†At"8ЁSOAЙœ†Cєɘ†At3†AtЙ †At 3†At 2†AtKOBT:Ђ)ЁSOCЙœ†Cєɘ†AtЙ †At3†At 3†At 2†AtKODT)ЂOET)ŸOGTTO€ O €ўO3 f0" D ЄBEOŽOKSS&ЅF-ЃLOSOLONЙЃ†At3†At!8ЊSOO3†AtA†At:ІOPTOR)Њ&žН‚€&ЉU†Cє&ЈU†CєЙЃ†AtU†AtLKOTЙЈ†At3†At 8ЋSOU&Ї3†At€€2†AtKOVT:Ќ)ЋSOW&Ї3†At€†Д2†AtKOXT)ЌO[&ЇЙЈ†At3†At †AtKO^&ЇЙЇ†AtЙЇ†At3†At 3†At€еЙЉ†At,„!,†At,„!,†AtЙЇ†At3†At€џџ 3†At€еЙЉ†At,„!,†At,„!,†At3†At 2†AtKO`ЙЇ†AtA†At:ІOaT)ІOGTTO€ O €ўO3 f0" D ЄBEOŽOdSS&ЛF-ЙLOSOfOiЙЙ„!,†At3†At 3†At8О3†AtA†At:МOk)О&НЙЙ„!2†AtKOm&НЙН†At3†At †AtKOo&7 Н†At€ЙН†AtU†AtL3†AtA†At:МOpT)МOGTTO€ O €ўO3 f0" D ЄBEOŽOsSS&СF-ПLOSOvЙП†At3†At 3†At8У3†AtA†At:ТOy)У&ПЙП†At3†At †AtKO{&7 Н†At€ЙП†AtU†AtL3†AtA†At:ТO|T)ТOGTTO€ O €ўO3 f0" D ЄBEOŽO€„SS&ЪF-Ш-Ц-ФLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&Ь&7 Н†At€ЙФІA“ 3†At$ЙФІA“ ЙФІA“ CBU†AtL3†At2†AtKO€&аЙФІA“ ЙЬ†At 2†AtKO€Ž&Э&7 Н†At€ЙЦІA“ 3†At$ЙЦІA“ ЙЦІA“ CBU†AtL3†At2†AtKO€&бЙЦІA“ ЙЭ†At 2†AtKO€’&Я3†At€џџџЙб†At3†At 2†AtKO€•&вЙа†At3†At ЙЯ†At,„!,†AtЙа†At3†At€џџ ЙЯ†At,„!,†At3†At 2†AtKO€˜&аЙб†At,ˆЙв†At,ˆ3†At ,†At3†At †AtKO€›&вЙв†AtЙа†At3†At ЙЯ†At,„!,†AtЙа†At3†At€џџ ЙЯ†At,„!,†At3†At 2†AtKO€ž&Ю3†AtЙЬ†AtЙЭ†AtЙШІA“ 2†AtKO€ŸЙЮ†At3†At!8рSO€ 3†At€€ЙЮ†At 3†At€џџџЙЮ†At $Йв†At3†At€€ЙЮ†At $3†At€€ЙЮ†At Йв†At3†At€џџџЙЮ†At "3†At€џџџЙЮ†At Йв†AtCBCBЙв†At3†At€џџџЙЮ†At $3†At€џџџЙЮ†At Йв†At3†At€€ЙЮ†At "3†At€€ЙЮ†At Йв†AtCBCBCBЙЮ†At A†At:ЫO€ЁT:ц)рSO€ЂЙЮ†At3†At "8чSO€ЃЙв†AtЙЮ†At A†At:ЫO€ЄT:ш)чSO€І3†AtA†At:ЫO€ЇT)шO€ЈT)цO€ЉT)ЫOGTTO€ O €ўO3 f0" D ЄBEOŽO€АSS&эF-ы-щLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&я&7 Н†At€ЙщІA“ 3†At$ЙщІA“ ЙщІA“ CBU†AtL3†At2†AtKO€Й&ђЙщІA“ Йя†At 2†AtKO€М&ё3†At€џџџЙђ†At3†At 2†AtKO€П&єЙё†At3†At 2†AtKO€Т&ѓЙђ†At3†At Йё†At,„!,†AtЙђ†At3†At€џџ Йё†At,„!,†At3†At 3†At 2†AtKO€Х&єЙє†AtЙѓ†At3†At Йё†At,„!,†AtЙѓ†At3†At€џџ Йё†At,„!,†At3†At Йѓ†AtЙё†At3†At 3†At3†At 2†AtKO€Ш&№3†At=Йя†AtЙыІA“ 2†AtKO€ЩЙ№†At3†At!8SO€Ъ3†At€€Й№†At 3†At€џџџЙ№†At $Йє†At3†At€€Й№†At $3†At€€Й№†At Йє†At3†At€џџџЙ№†At "3†At€џџџЙ№†At Йє†AtCBCBЙє†At3†At€џџџЙ№†At $3†At€џџџЙ№†At Йє†At3†At€€Й№†At "3†At€€Й№†At Йє†AtCBCBCBЙ№†At A†At:юO€ЫT:)SO€ЬЙ№†At3†At "8SO€ЭЙє†AtЙ№†At A†At:юO€ЮT:)SO€а3†AtA†At:юO€бT)O€вT)O€гT)юOGTTO€ O €ўO3 f0" D ЄBEOŽO€рSS& F- LOSO€сO€ф& 3†At€џџ†AtKO€чЙ †At3†At€€!8SO€шЙ †At3†At€@"8SO€ъ& 3†At€@Й †At2†AtKO€ыT:)SO€э& 3†At€@†AtKO€юT)O€яЙ †At3†At€L"8SO€ё3†At€Й †AtЙ †At3†At 3†At€CьџџЙ †AtЙ †At3†At€џџ 3†At€Cьџџ3†At A†At: O€ђTO€ѓ)& Й †At3†At 3†At Й †At,„!,†AtЙ †At3†At 3†At€џџ Й †At,„!,†At3†At 2†AtKO€є& 3†At€љ*Й †At3†At 3†At€kьџџЙ †At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ& 3†At€ЬфћЙ †At3†At Й †At,„!,†AtЙ †At3†At€џџ Й †At,„!,†At3†At Й †AtЙ †At3†At 3†At3†At 2†AtKO€і& 3†At€*чџ?Й †At3†At Й †At,„!,†AtЙ †At3†At€џџ Й †At,„!,†At3†At Й †AtЙ †At3†At 3†At3†At 2†AtKO€їT:&)SO€јЙ †At3†At€Р"8'SO€њ& 3†At€РЙ †At2†AtKO€ћT:()'SO€§& 3†At€Р†AtKO€ўT)(O€џЙ †At3†At€L"8)SO€3†At€џЙ †AtЙ †At3†At 3†At€НЙ †AtЙ †At3†At€џџ 3†At€Н3†At A†At: O€TO€))& Й †At3†At 3†At Й †At,„!,†AtЙ †At3†At 3†At€џџ Й †At,„!,†At3†At 2†AtKO€& 3†At€еяџЙ †At3†At 3†At€•Й †At3†At€џџ 3†At€•3†At 2†AtKO€& 3†At€4яЙ †At3†At Й †At,„!,†AtЙ †At3†At€џџ Й †At,„!,†At3†At Й †AtЙ †At3†At 3†At3†At 2†AtKO€& 3†At€РЙ †At3†At Й †At,„!,†AtЙ †At3†At€џџ Й †At,„!,†At3†At Й †AtЙ †At3†At 3†At3†At 2†AtKO€T)&O€Й †At3†At 3†At3†At A†At: O€ T) OGTTO€ O €ўO3 f0" D ЄBEOŽO€SS&@F->LOSO€& Н†At€Й>†At3†At€@U†AtLA†At:AO€T)AOGTTOђ O€OO OBOOЗOBOOCOOBO ODOOђ ODOOEOOЭOEOOЗOOEO ODOFOOЗOFOOђ OOFO OEOOFO!ODO'OOEO'OOFOO'O ODO"OzOOOzOODO#OBO!OFOOBO"OO!ODOOO"OCOOO#OzOOO$OœOO€ O €ўO3 f0" D ЄBEOœO$SS&ђF-ЈLOSO%&Ћ3†At2†AtKO'ЙЈ†Cє3†Bu€t72†AtKO)ЙЋ†AtA†At:ЊO*T)ЊOGTTO€ O €ўO3 f0" D ЄBEOœO0SS&ѕF-­LOSO1&А3†At2†AtKO2O4&БЙ­†Cƒ,†Cж 2†Cж KO6&А&ŸН†At€ЙБ†Cж U†Cж L2†AtKO8ЙА†AtA†At:ЏO9T)ЏOGTTO€ O €ўO3 f0" D ЄBEOœOESS&F-П-Н-Л-Й-З-Е-ГLOSOF&Т3†At2†AtKOGOI&ХЙГ†Cƒ,†Cж 2†Cж KONЙХ†Cж 3†At€<,'†Cє0†At3†At8ЧSOPЙХ†Cж 3†At€4,'†Cє3†At2†AtKOQTOS)ЧOTOUЙХ†Cж 3†At€<,'†Cє0†At3†At8ШЙЗ†At3†At8ШЙЛІA“ 3†At€$8ШSOW&З3†At2†AtKOX&Т3†Atѕ2†AtKOYTO\)Ш&ФЙХ†Cж 3†At€м+'†Cє0†At2†AtKO_O`&Т&ГН†At€&УU†CєЙЗ†AtU†AtЙЛІA“ UІA“ ЙЙ†C™"U†C™"ЙП†C‘U†C‘ЙН†C‘U†C‘ЙХ†Cж U†Cж L†AtKObЙУ†At8ЩSOcЙХ†Cж 3†At€0,'†Cє0†At3†At$8ЪЙХ†Cж 3†At€@,'†Cє0†At3†At8ЪЙХ†Cж 3†At€4,'†Cє0†At3†At"8ЪSOeЙХ†Cж 3†At€<,'†Cє3†At2†AtKOfT:Ы)ЪSOhЙХ†Cж 3†At€<,'†Cє3†At2†AtKOiЙХ†Cж 3†At€8,'†CєЙХ†Cж 3†At€4,'†Cє0†At2†AtKOlЙХ†Cж 3†At€є.'†Cє0†At3†At8ЬSOmЙХ†Cж 3†At€@,'†Cє0†At3†At8ЭSOnЙХ†Cж 3†At€ј.'†Cє3†At5†AtKOoЙХ†Cж 3†At€ј.'†Cє0†At3†At $8ЮSOpЙХ†Cж 3†At€ќ.'†Cє3†At2†AtKOqTOr)ЮT:Я)ЭЙХ†Cж 3†At€@,'†Cє0†At3†At8аSOsЙХ†Cж 3†At€ќ.'†Cє3†At2†AtKOtЙХ†Cж 3†At€ј.'†Cє3†At2†AtKOuT:б)аЙХ†Cж 3†At€@,'†Cє0†At3†At8вSOvЙХ†Cж 3†At€ќ.'†Cє3†At2†AtKOwЙХ†Cж 3†At€ј.'†Cє3†At2†AtKOxTOy)в)б)ЯTOz)ЬT)ЫO{TO})ЩЙХ†Cж 3†At€м+'†Cє0†At3†At€шЙЕ†Cž"3†At'†Cє0†At$8гSO~&Т3†Atі2†AtKOTO€‚)гЙХ†Cж 3†At€м+'†Cє0†At3†At€шЙЕ†Cž"3†At'†Cє0†At 8дSO€ƒO€„O€‡3†At€Ќ@†CƒЙП†C‘0„!,†At3†BuU†BuЙН†C‘U†CЫ &еU†CƒLKO€ŠЙФ†AtЙХ†Cж 3†At€м+'†Cє0†At 8иSO€‹3†At€­@†Cƒ3†Bu8пSO€™&• Н‚€ТЙП†C‘0„!UІA“ &еU†CЎ ЙХ†Cж 3†At€D,'†CЫ!U†CєЙН†C‘U†C‘LKO€šT:р)пЙХ†Cж 3†At€м+'†Cє0†At3†At8сЙЕ†Cž"3†At'†Cє0†At3†At€€>8сSO€œ&h Н‚€ЪЙП†C‘0„!UІA“ &жU†CєЙН†C‘U†C‘ЙХ†Cж 3†At€D,'†CЫ!U†Cє&еU†CЎ LKO€T:т)сЙХ†Cж 3†At€м+'†Cє0†At3†At8уЙЕ†Cž"3†At'†Cє0†At3†At€р.8уSO€Ÿ&Œ Н‚€ХЙП†C‘0„!U†At&еU†CЎ ЙХ†Cж 3†At€D,'†CЫ!U†CєЙН†C‘U†C‘LKO€ TO€Ђ)у)т)р)о)м)кЙП†C‘ЙП†C‘0„!,†AtЙЕ†Cž"3†At'†Cє0†AtЙХ†Cж 3†At€м+'†Cє0†At3†At€ш2„!KO€ЃTO€І)дЙЕ†Cž"3†At'†CєЙХ†Cж 3†At€р+'†Cє0†At2†AtKO€ЇЙЕ†Cž"3†At'†CєЙХ†Cж 3†At€8,'†Cє0†At2†AtKO€ЈЙЕ†Cž"3†At'†CєЙХ†Cж 3†At€ќ.'†Cє0†At2†AtKO€ЉЙЕ†Cž"3†At '†CєЙХ†Cж 3†At€<,'†Cє0†At2†AtKO€ЋЙТ†AtA†At:СO€ЌT)СOGTTO€ O €ўO3 f0" D ЄBEOœO€ЗSS&F-є-ђ-№-ю-ь-ъLOSO€ИO€ЙO€КO€ЛO€Н&їЙъ†Cƒ,†Cж 2†Cж KO€ПЙ№†At3†At"9ўЙ№†At3†At$8§)ўSO€СЙє†C‘3†At2„!KO€Т:іO€УTO€Х)§&ј3†At€4,'†Cє3†At2†AtKO€Ц&ј3†At€м+'†Cє3†At2†AtKO€Ч3†At€­@†Cƒ3†Bu@U†Bu3†AtU†At&ј3†At€ь+'†C„!U†CƒLKO€Ш&Н‚€$ЙюЄ!­ ,†AtUІA“ Йь†C™"U†C™"&ј3†At'†CЅ"U†CŸ!LKO€ЪЙї†Cж 3†At€p7'†Cє0†At3†At8SO€Ь&ПН‚€r&јU†Cж LKO€ЯЙє†C‘3†At2„!KO€а&ј3†At€@,'†Cє0†At3†AtЙ№†At 8&ј3†At€@,'†Cє0†At3†At$8&ј3†At€0,'†Cє0†At3†At#8SO€в&њ3†At2†AtK:)&њ3†At5†AtK)Йњ†At&ј3†At€8,'†Cє0†At"8SO€г&ШН‚€(3†AtUІA“ &ћU†Cє&љU†Cє &јU†Cж LKO€е&ј3†At€0,'†Cє0†At3†At!9&ј3†At'†Cє0†At8)SO€з&ђ3†Cƒ2†C KO€иЙє†C‘3†At2„!KO€й:O€кT: )SO€л&ј3†At€4,'†Cє3†At5†AtKO€мT) O€нT:)O€пЙђ†C 3†Cƒ 8 SO€сЙє†C‘&ј3†At€0,'†Cє0†At2„!KO€т3†At€Ќ@†Cƒ&ј3†At€0,'†Cє0†At3†BuU†BuЙь†C™"ЙюЄ!­ ,†At&ј3†At€0,'†Cє0†At3†A(U†CЫ Йђ†C U†CƒLKO€уTO€ф) TO€х)T: )SO€ц)3†At8SO€ч&МН‚€(3†AtUІA“ &ћU†Cє&љU†Cє &јU†Cж LKO€щ&ј3†At'†Cє0†At8SO€ыЙє†C‘3†At2„!KO€ь:іO€эT)O€я&ј3†At€@,'†Cє0†At3†AtЙ№†At 8&ј3†At€@,'†Cє0†At3†At$8&ј3†At€0,'†Cє0†At3†At#8SO€ёЙє†C‘&ј3†At€0,'†Cє0†At2„!KO€ђ3†At€Ќ@†Cƒ&ј3†At€0,'†Cє0†At3†BuU†BuЙь†C™"ЙюЄ!­ ,†At&ј3†At€0,'†Cє0†At3†A(U†CЫ Йђ†C U†CƒLKO€ѓ:O€єTO€ѕ)&ј3†At€0,'†Cє0†At3†At$8&ј3†At€@,'†Cє0†At3†At8SO€і&ј3†At€4,'†Cє3†At5†AtKO€їT:)SO€ј&ђ3†Cƒ2†C KO€љЙє†C‘3†At2„!KO€њ:O€ћT)O€ќT:)O€§T) O€ўT)іOGTTO€ O €ўO3 f0" D ЄBEOœO€SS&F----LOSO€O€ O€ O€ O€ & Й†Cƒ,†Cж 2†Cж KO€&!3†At€4,'†Cє3†At2†AtKO€&!3†At€м+'†Cє3†At2†AtKO€&Н‚€$ЙЄ!­ ,†AtUІA“ Й†C™"U†C™"&!3†At'†CЅ"U†CŸ!LKO€Й †Cж 3†At€p7'†Cє0†At3†At8'SO€&ПН‚€r&!U†Cж LKO€&!3†At€8,'†Cє0†At3†At$9)&!3†At'†Cє0†At8())SO€3†At€­@†Cƒ3†Bu8U†Bu3†AtU†AtЙ†CЊ"U†CƒLKO€Й†CЊ"3†At '†Cє3†At2†AtKO€T:+)(SO€Й†CЊ"3†At '†Cє3†At2†AtKO€Й†CЊ"3†At'†Cє&!3†At€8,'†Cє0†At2†AtKO€Й†CЊ"3†At'†Cє&!3†At€м+'†Cє0†At2†AtKO€&!3†At€@,'†Cє0†At3†At8,SO€ Й†CЊ"3†At'†Cє&!3†At€@,'†Cє0†At2†AtKO€!T:-),SO€"Й†CЊ"3†At'†Cє&!3†At€@,'†Cє0†At3†At2†AtKO€#T)-O€%&#3†At2†AtK:.)/&#3†At5†AtK).Й#†At&!3†At€8,'†Cє0†At"80SO€&Й†CЊ"3†At'†Cы Й#†At3†A(&!3†At€р.'†Cы Й#†At3†A(0†At2†AtKO€'Й†CЊ"3†At$'†Cы Й#†At3†A(&!3†At€ˆ,'†Cы Й#†At3†A(0†At2†AtKO€(T:/)0O€)T)+O€*T:1)'SO€+Й†CЊ"3†At '†Cє3†At2†AtKO€,)33†At84SO€-&МН‚€(3†AtUІA“ &$U†Cє&"U†Cє &!U†Cж LKO€/Й†CЊ"3†At'†Cы &!3†At€4,'†Cє0†At3†A(&!3†At€є.'†Cє0†At2†AtKO€0Й†CЊ"3†At$'†Cы &!3†At€4,'†Cє0†At3†A(&"3†At€Є'†Cє0†At2†AtKO€2&!3†At'†Cє0†At85SO€4Й†CЊ"3†At '†Cє3†At2†AtKO€5:4O€6T)5O€8&!3†At€0,'†Cє0†At3†At$86&!3†At€@,'†Cє0†At3†At86SO€9&!3†At€4,'†Cє3†At5†AtKO€:T:7)6SO€;:4O€<T)7O€=T:3)4O€>O€?Й†CЊ"3†At '†Cє0†At99&!3†At€@,'†Cє0†At3†At99&!3†At€8,'†Cє0†At3†At$88)9SO€A3†At€­@†Cƒ3†Bu8U†Bu3†AtU†AtЙ†CЊ"U†CƒLKO€BЙ†CЊ"3†At '†Cє3†At2†AtKO€CT:;)8SO€DЙ†CЊ"3†At'†Cє&!3†At€4,'†Cє0†At2†AtKO€EЙ†CЊ"3†At'†Cє&!3†At€м+'†Cє0†At2†AtKO€F&!3†At€@,'†Cє0†At3†At8<SO€GЙ†CЊ"3†At'†Cє&!3†At€@,'†Cє0†At2†AtKO€HT:=)<SO€IЙ†CЊ"3†At'†Cє&!3†At€@,'†Cє0†At3†At2†AtKO€JT)=O€KT);O€LT)1O€MT)OGTTO€ O €ўO3 f0" D ЄBEOœO€TSS&FLOSO€UO€V&@A†C :>O€WT)>OGTTOœO€XMp  m _MaxCount†uk _Str†€ ч  ф _MaxCount†uт _Src†€ 4 3 2 1 0 / . - , + * ) ( &  # in16„ ' out32†t         ; 9 8  5 in32†t   c `b†t^a†t i fb„da„ o lb†tja†t u rbˆpaˆ { xb†tva†t  ~b„|a„ ‡ „b†t‚a†t  Šbˆˆaˆ —•’ inˆ “in_upper†t  ЂЁŸ œfrac_Q7†€tšlz†€t˜in†t  leadingZeros†t  ЌЋЊІ Ѓx†t Їy†tЈlz†!tЉfrac_Q7†!t   ОМ Йa„ Нa32†tУТ Пa†t шчцрЫ ШQres†€Цb32†€Фa32†€ Яb32_inv†tаa32_nrm†tбb32_nrm†tЬa_headrm†tвresult†tЮlshift†tЭb_headrm†t    ю ыQres†€щb32†€ ёb32_inv†tђb32_nrm†tѓerr_Q32†tєresult†t№lshift†tяb_headrm†t    )('&   x†t  y_Q30†t        A >x†t Њ ЈdecSizeBytes†€t Ћret†tЏ ­decState†€ Аret†tБstruc†€VутсрпонмлкйидгвбаЯЮЭЬЫЪЩШЧС ПnSamplesOut†€НsamplesOut†€ЛnBytesIn†€ЙinData†€ЗlostFlag†tЕdecControl†€ГdecState†€ Фprev_fs_kHz†tУused_bytes†!tТret†tХpsDec†€V            еsamplesOut_tmp„€€Ё€[жscratch†€€Ё€!              ў§і єnLBRRBytes†€ђLBRRData†€ №lost_offset†tюnBytesIn„€-ьinData†€ъdecState†€ њi†tљsDecCtrl†€ЌЁˆ€yјsDec†€t7Ёˆ€jћTempQ†€€Ё€ZїpsDec†€V             =<;987654 3 10 / .-,+)(' Silk_TOC†€*nBytesIn„€-inData†€decState†€ #i†t"sDecCtrl†€ЌЁˆ€y!sDec†€t7Ёˆ€j$TempQ†€€Ё€Z psDec†€V               >  ?version‚€-@  ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё е ъ з ž!о –!ч я ш ™!ѓ љ Ž!›!" "Љ"Ќ"M!tuƒ‘ є ƒ ˆ ‹ Œ Ž  ‘ “ Љ ­ Ў Ы е ж з к л о ч ш ъ ы я ё ђ ѓ є љ „!Ž!–!™!›!ž!Ÿ!С!Т!Ф!Х!Щ!Ъ!Ы!–"—"™"›"œ""ž" "Ё"Ѓ"Є"Ѕ"Ї"Ј"Љ"Њ"Ќ"­"Џ"Б"Г"Е"З"Й"@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl?.cil$in.cil$exsE.cil$syў .cil$db'/3577 1284597036 100666 17120 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТРB ,e‘LœA.drectveQ, .cil$fg}@@.cil$gl —@@.cil$in—@@.cil$exї)˜@@.cil$syI9@@.cil$dbФи@@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_create_init_destroy.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_create_init_destroy.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2L2€ovќ V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_create_init_destroy.cшћ•у!Ы@„NњВуЫЂŠФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШжSKP_Silk_init_decoder†€€(€#?hДл !SKP_Silk_NLSF_CB_struct€–SKP_Silk_CNG_Reset‚€qДSKP_Silk_PLC_Reset‚€q ƒSKP_Silk_decoder_state€j {SKP_Silk_CNG_struct€o nSKP_Silk_PLC_struct€™ SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_range_coder_state€ž SKP_Silk_range_coder_state€ž Мsize_tuлSKP_Silk_decoder_set_fs‚€ SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)АSA_Parameter€)† ‚SKP_Silk_CNG_struct€o4strnlen†€ЎSA_Method€)†@ Нwchar_t! zSKP_Silk_PLC_struct€™Ћwcsnlen†€ ЕSKP_Silk_decoder_state€j [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœOO€ O €ўO3 f0" D ЄBEOœO%SS&жF-HLOSO&3†At€­@†Cƒ3†Bu€t7U†Bu3†AtU†AtЙH†Cж U†CƒLKO(&лН‚€3†AtU†AtЙH†Cж U†Cж LKO+ЙH†Cж 3†At€,,'†Cє3†At2†AtKO,ЙH†Cж 3†At€'†Cє3†At€2†AtKO/&Н‚€rЙH†Cж U†Cж LKO1&ДН‚€rЙH†Cж U†Cж LKO3ЙH†Cж 3†At€p7'†Cє3†At2†AtKO53†AtA†At:JO6T)JOGTTOœO8M: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t J HpsDec†€V   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёе ъ з ž!о –!ч я ш ™!Ž!›!!!tuƒєƒ ˆ ‹ Œ Ž  ‘ Љ е ж з о ч ш ъ я ё ђ Ž!–!™!›!ž!”"•"–"@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl .cil$in.cil$exї).cil$syI.cil$dbФ/3618 1284597036 100666 20445 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТНO ,e‘L™N.drectveQ, .cil$fg}@@.cil$gl  @@.cil$in-@@.cil$ex95.@@.cil$sy— gC@@.cil$db›ўM@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_corrMatrix_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_corrMatrix_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2Е2€ovœ V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_corrmatrix_fix.c-fєэE§~MVŒХкЭЌФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШSKP_Silk_corrVector_FIX‚€€(€#€Ÿhч SKP_Silk_corrMatrix_FIX‚€€0+€‰€fhж  ччSKP_Silk_inner_prod_aligned†€? Кsize_tu ЃSA_AttrTarget€) SKP_Silk_sum_sqr_shift‚€HАSA_Parameter€)† strnlen†€ЎSA_Method€)†@ Лwchar_t!€ wcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœO O€ O €ўO3 f0" D ЄBEOœO+SS&F-R-P-N-L-J-HLOSO,O-O.O0&WЙH†CЎ ЙNІA“ 3†At3†A(2†CЎ KO1&XЙJ†CЎ 2†CЎ KO3ЙRІA“ 3†At$8ZSO5&U3†At2†AtK:[)\&U3†At5†AtK)[ЙU†AtЙNІA“ "8]SO6&Y3†At2†AtKO7&V3†At2†AtK:^)_&V3†At5†AtK)^ЙV†AtЙLІA“ "8`SO8&YЙW†CЎ ЙV†At3†A(0Є!­ ,„!,†AtЙX†CЎ ЙV†At3†A(0Є!­ ,„!,†AtЙRІA“ †AtKO9T:_)`O:ЙP†CєЙU†At3†A(ЙY†At2†AtKO;&W3†A6†CЎ KO3‚KO?&U3†At2†AtK:g)h&U3†At5†AtK)gЙU†AtЙNІA“ "8iSO@ЙP†CєЙU†At3†A(&чН†At€@ЙLІA“ UІA“ ЙX†CЎ UІCН ЙW†CЎ UІCН L2†AtKOA&W3†A6†CЎ KOBT:h)iOCT)eODT)TOGTTO€ O €ўO3 f0" D ЄBEOœONSS& F-r-p-n-l-jLOSOOOPOQOT& Н‚€IЙlІA“ ЙnІA“ 3†AtU†AtЙj†CЎ U†CЎ &xU†Cє&zU†CєLKOW&y3†At&ж Н†At€Йz†AtU†AtL3†At$3†At&ж Н†At€Йz†AtU†AtL3†AtCB2†AtKOY&zЙz†AtЙy†At 2†AtKOZ&xЙy†At†AtKO^&u3†At2†AtK:})~&u3†At5†AtK)}Йu†AtЙnІA“ 3†At"8SO_&zЙj†CЎ Йu†At3†A(0Є!­ ,„!,†AtЙj†CЎ Йu†At3†A(0Є!­ ,„!,†AtЙx†At †AtKO`T:~)OaЙx†AtЙr†Cє0†At"8„SOc&zЙz†AtЙr†Cє0†AtЙx†At 2†AtKOd&xЙr†Cє0†At2†AtKOeTOi)„Йp†Cє3†AtЙnІA“ 3†At3†AЙz†At2†AtKOj&{Йj†CЎ ЙnІA“ 3†At3†A(2†CЎ KOk&v3†At2†AtK:…)†&v3†At5†AtK)…Йv†AtЙnІA“ "8‡SOl&zЙz†AtЙ{†CЎ ЙlІA“ Йv†At3†A(0Є!­ ,„!,†AtЙ{†CЎ ЙlІA“ Йv†At3†A(0Є!­ ,„!,†AtЙx†At 2†AtKOm&zЙz†AtЙ{†CЎ Йv†At3†A(0Є!­ ,„!,†AtЙ{†CЎ Йv†At3†A(0Є!­ ,„!,†AtЙx†At 2†AtKOnЙp†CєЙv†AtЙnІA“ Йv†At3†AЙz†At2†AtKOoT:†)‡Oq&|Йj†CЎ ЙnІA“ 3†At3†A(2†CЎ KOsЙx†At3†At$8SOu&w3†At2†AtK:‘)’&w3†At5†AtK)‘Йw†AtЙnІA“ "8“SOw&z3†At2†AtKOx&u3†At2†AtK:”)•&u3†At5†AtK)”Йu†AtЙlІA“ "8–SOy&zЙ{†CЎ Йu†At3†A(0Є!­ ,„!,†AtЙ|†CЎ Йu†At3†A(0Є!­ ,„!,†AtЙx†At †AtKOzT:•)–O|Йp†CєЙw†AtЙnІA“ 3†At3†AЙz†At2†AtKO}Йp†Cє3†AtЙnІA“ Йw†At3†AЙz†At2†AtKO~&v3†At2†AtK:›)œ&v3†At5†AtK)›Йv†AtЙnІA“ Йw†At"8SO&zЙz†AtЙ{†CЎ ЙlІA“ Йv†At3†A(0Є!­ ,„!,†AtЙ|†CЎ ЙlІA“ Йv†At3†A(0Є!­ ,„!,†AtЙx†At 2†AtKO€€&zЙz†AtЙ{†CЎ Йv†At3†A(0Є!­ ,„!,†AtЙ|†CЎ Йv†At3†A(0Є!­ ,„!,†AtЙx†At 2†AtKO€Йp†CєЙw†AtЙv†AtЙnІA“ Йv†At3†AЙz†At2†AtKO€‚Йp†CєЙv†AtЙnІA“ Йw†AtЙv†At3†AЙz†At2†AtKO€ƒT:œ)O€„&|3†A6†CЎ KO€…T:’)“O€†T:І)SO€‡&w3†At2†AtK:Ї)Ј&w3†At5†AtK)ЇЙw†AtЙnІA“ "8ЉSO€‰&z&чН†At€@ЙlІA“ UІA“ Й|†CЎ UІCН Й{†CЎ UІCН L2†AtKO€ŠЙp†CєЙw†AtЙnІA“ 3†At3†AЙz†At2†AtKO€‹Йp†Cє3†AtЙnІA“ Йw†At3†AЙz†At2†AtKO€&v3†At2†AtK:Њ)Ћ&v3†At5†AtK)ЊЙv†AtЙnІA“ Йw†At"8ЌSO€Ž&zЙz†AtЙ{†CЎ ЙlІA“ Йv†At3†A(0Є!­ ,„!,†AtЙ|†CЎ ЙlІA“ Йv†At3†A(0Є!­ ,„!,†At2†AtKO€&zЙz†AtЙ{†CЎ Йv†At3†A(0Є!­ ,„!,†AtЙ|†CЎ Йv†At3†A(0Є!­ ,„!,†At2†AtKO€Йp†CєЙw†AtЙv†AtЙnІA“ Йv†At3†AЙz†At2†AtKO€‘Йp†CєЙv†AtЙnІA“ Йw†AtЙv†At3†AЙz†At2†AtKO€’T:Ћ)ЌO€“&|3†A6†CЎ KO€”T:Ј)ЉO€•T)ІO€–Йr†CєЙx†At2†AtKO€—T)tOGTTOœO€™M   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t i h ge` _ ^] \ [ZT Rrshifts†€PXt†€tNorder†€LL†€Jt†€.Hx†€. Vi†tWptr1†€.Yinner_prod†tXptr2†€.Ulag†t     Ќ Ћ ЊЉ Ј ЇІ œ ›– • ”“ ’ ‘‡ † …„ ~ }t rrshifts†€tpXX†€tnorder†€lL†€jx†€. ui†tzenergy†!txrshifts_local†!t{ptr1†€.|ptr2†€.yhead_room_rshifts†twlag†tvj†t            ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ Љ ­ Ў Н П Р Ш Щ "’"@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl  .cil$in.cil$ex95.cil$sy— .cil$db› /3654 1284597036 100666 36698 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТ: ,e‘LŽ.drectveQ, .cil$fg}@@.cil$glЭ“@@.cil$in`@@.cil$exxfa@@.cil$syдй{@@.cil$dbi­Œ@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_control_codec_FIX.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_control_codec_FIX.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2/2€ovЩV €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_control_codec_fix.cџс5ѓG:4@$ќ9~“ЉФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ SKP_min_int†€€­€aШSKP_max_int†€€е€Ш=SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШ$SKP_Silk_control_encoder_FIX†€€(€#€1 h ё    " + = ћќ§ў№Ћ]SKP_Silk_LBRR_ctrl_FIX‚€€e€Y>hTargetRate_table_SWB† !€SKP_Silk_NSQ_del_dec‚ €ё SKP_Silk_resample_1_2_coarse‚€Щ $SKP_Silk_NLSF_CB_struct€–+ SKP_Silk_resample_3_2‚€Ф SKP_Silk_resample_1_3‚€С SKP_Silk_detect_SWB_state€ SKP_Silk_resample_3_1‚€С ѓSKP_Silk_encoder_control_FIX€ў ЬSKP_Silk_encoder_state_FIX€М ЦSKP_Silk_predict_state_FIX€о ЗSKP_Silk_prefilter_state_FIX€з БSKP_Silk_shape_state_FIX€в aSKP_Silk_encoder_control€  %SKP_Silk_encoder_state€ё SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_LP_state€  SKP_Silk_detect_SWB_state€ SKP_Silk_range_coder_state€ž јSKP_Silk_VAD_state€ ѓSKP_SILK_LBRR_struct€ф чSKP_Silk_nsq_state€кTargetRate_table_MB† !€ SKP_Silk_range_coder_state€ž Кsize_tuSNR_table_Q1† € ЖSKP_Silk_shape_state_FIX€в SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)ўSKP_Silk_NLSF_CB1_10†Ё€€–" SKP_Silk_resample_2_3‚€СTargetRate_table_WB† !€АSA_Parameter€)†TargetRate_table_NB† !€ ХSKP_Silk_prefilter_state_FIX€зћSKP_Silk_NLSF_CB0_16†Ё€€– pSKP_Silk_encoder_control€  ђSKP_Silk_nsq_state€к strnlen†€ ђSKP_Silk_encoder_state_FIX€М= SKP_Silk_resample_3_4‚€ФЋSKP_Silk_LBRR_reset‚€щ ЫSKP_Silk_predict_state_FIX€оЎSA_Method€)†@ Лwchar_t!№SKP_Silk_NSQ‚ €ќSKP_Silk_NLSF_CB1_16†Ё€€– SKP_Silk_resample_2_1_coarse‚€Щ€ wcsnlen†€ SKP_Silk_VAD_state€ SKP_Silk_encoder_control_FIX€ў SKP_Silk_LP_state€  `SKP_Silk_encoder_state€ё їSKP_SILK_LBRR_struct€ф§SKP_Silk_NLSF_CB0_10†Ё€€– [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOO€ O €ўO3 f0" D ЄBEOœO*SS&$F-X-V-T-R-P-N-L-J-HLOSO+O,&^3†At2†AtKO-O.O1&]ЙH†C­!3†At€Ф'†Cє0†At2†AtKO4ЙJІA“ 3†At9bЙ]†At3†At9bЙJІA“ Й]†At"8a)bSO6&]ЙJІA“ 2†AtKO7T:c)aSO=ЙH†C­!3†At€Ф'†Cє0†At3†At8dSO?ЙH†C­!3†At€Ш'†Cє0†At3†At8eSO@ЙH†C­!3†At€'†CєЙVІA“ ЙN†At3†At€Јa†AtKOAT:f)eSOBЙH†C­!3†At€'†CєЙVІA“ ЙN†At3†At€0u†AtKOCT)fODЙH†C­!3†At€'†CєЙH†C­!3†At€'†Cє0†At3†At"ЙH†C­!3†At€'†Cє0†At3†AtCB2†AtKOHOIOJЙH†C­!3†At€8'†Cє0†At3†At8gЙH†C­!3†At€'†Cє0†At3†At€€<6ў!9hЙH†C­!3†At€ '†Cє0†At3†At8g)hЙH†C­!3†At€(Є'†Cє0†At3†At€€"8gЙH†C­!3†At€и '†Cє0†At3†At8gSOKЙH†C­!3†At€8'†Cє3†At2†AtKOLЙH†C­!3†At€<'†Cє3†At2†AtKOMTOO)gOSЙH†C­!3†At€8'†Cє0†At3†At€€#8iЙH†C­!3†At€<'†Cє0†At3†At8iЙH†C­!3†At€(Є'†Cє0†At3†At€€"8iЙH†C­!3†At€и '†Cє0†At3†At8iSOUOVOXЙH†C­!3†At€'†Cє3†At2†AtKOY&]3†At2†AtKO[3†At€Ќ@†Cƒ3†Bu€pU†BuЙH†C­!3†At€ ›'„CН!U†CЫ &jU†CƒLKO]3†At€­@†Cƒ3†Bu,U†Bu3†AtU†AtЙH†C­!3†At€ '†CП!U†CƒLKOe&" Н‚€ТЙH†C­!3†At€Ь'†Cє0†At3†At ЙH†C­!3†At€и'†Cє0†AtUІA“ &j3†A(U†CЎ ЙH†C­!3†At€ '†CП!U†Cє&k3†A(U†C‘LKOi3†At€­@†Cƒ3†Bu€€U†Bu3†AtU†At&kU†CƒLKOj3†At€Ќ@†Cƒ3†Bu€pU†Bu&kU†CЫ ЙH†C­!3†At€ ›'„CН!U†CƒLKOmЙH†C­!3†At€8'†Cє3†At2†AtKOoTOp)iT:o)dЙH†C­!3†At€Ф'†Cє0†At3†At8pSOtOxOyЙH†C­!3†At€8'†Cє0†At3†At8qЙJІA“ ЙH†C­!3†At€Ф'†Cє0†At$8qЙN†At3†At€Иˆ#8qЙH†C­!3†At€ '†Cє0†At3†At8qЙH†C­!3†At€(Є'†Cє0†At3†At€€"8qЙH†C­!3†At€и '†Cє0†At3†At8qSO{O|O}OЙH†C­!3†At€'†Cє3†At2†AtKO€€&]3†At2†AtKO€‚3†At€Ќ@†Cƒ3†Bu€pU†BuЙH†C­!3†At€ ›'„CН!U†CЫ &rU†CƒLKO€„3†At€­@†Cƒ3†Bu,U†Bu3†AtU†At&tU†CƒLKO€†&+ Н‚€ХЙH†C­!3†At€Ь'†Cє0†At3†At ЙH†C­!3†At€и'†Cє0†AtU†At&r3†A(U†CЎ &tU†Cє&s3†A(U†C‘LKO€‰3†At€­@†Cƒ3†Bu€РU†Bu3†AtU†At&sU†CƒLKO€Š3†At€Ќ@†Cƒ3†Bu€pU†Bu&sU†CЫ ЙH†C­!3†At€ ›'„CН!U†CƒLKO€ŒЙH†C­!3†At€<'†Cє3†At2†AtKO€ŽT:x)qSO€ЙH†C­!3†At€'†CєЙVІA“ ЙN†At3†At€˜:†AtKO€‘ЙH†C­!3†At€'†CєЙH†C­!3†At€'†Cє0†At3†At"ЙH†C­!3†At€'†Cє0†At3†AtCB2†AtKO€•O€–O€—ЙH†C­!3†At€8'†Cє0†At3†At8yЙH†C­!3†At€'†Cє0†At3†At€€<6ў!8yЙH†C­!3†At€(Є'†Cє0†At3†At€€"8yЙH†C­!3†At€и '†Cє0†At3†At8ySO€˜ЙH†C­!3†At€8'†Cє3†At2†AtKO€™ЙH†C­!3†At€<'†Cє3†At2†AtKO€šTO€œ)yO€ ЙH†C­!3†At€8'†Cє0†At3†At€€#8zЙH†C­!3†At€<'†Cє0†At3†At8zЙH†C­!3†At€(Є'†Cє0†At3†At€€"8zЙH†C­!3†At€и '†Cє0†At3†At8zSO€ЂO€Є3†At€Ќ@†Cƒ3†Bu€pU†BuЙH†C­!3†At€ ›'„CН!U†CЫ &{U†CƒLKO€ІЙH†C­!3†At€'†Cє3†At2†AtKO€Ї&]3†At 2†AtKO€ЉЙJІA“ 3†At8}SO€ЌO€­O€ЎO€А3†At€­@†Cƒ3†Bu,U†Bu3†AtU†At&€U†CƒLKO€Б&+ Н‚€ХЙH†C­!3†At€Ь'†Cє0†At3†At ЙH†C­!3†At€и'†Cє0†AtU†At&{3†A(U†CЎ &€U†Cє&~3†A(U†C‘LKO€Д3†At€­@†Cƒ3†BuU†Bu3†AtU†AtЙH†C­!3†At€8'†CЧ!U†CƒLKO€Е&ё Н‚€Ъ3†AtЙH†C­!3†At€Ь'†Cє0†At3†At ЙH†C­!3†At€и'†Cє0†At,„!,†At3†At UІA“ &U†Cє&{3†A(U†C‘ЙH†C­!3†At€8'†CЧ!U†Cє&~3†A(U†CЎ LKO€И3†At€­@†Cƒ3†Bu€рU†Bu3†AtU†At&{U†CƒLKO€Й3†At€Ќ@†Cƒ3†Bu€pU†Bu&{U†CЫ ЙH†C­!3†At€ ›'„CН!U†CƒLKO€ЛT:‡)}ЙJІA“ 3†At8ˆSO€МO€Н3†At€­@†Cƒ3†BuЙPІA“ 3†At"9ЙPІA“ 3†Atd$8)SO€?&^3†Atћ2†AtKO€@TO€A)ЙH†C­!3†At€ф'†CєЙPІA“ 2†AtKO€DЙRІA“ 3†At"9ЙRІA“ 3†At$8)SO€E&^3†Atљ2†AtKO€FTO€I)ЙH†C­!3†At€и '†Cє0†At3†At8SO€KЙH†C­!3†At€'†CєЙRІA“ 2†AtKO€LЙH†C­!3†At€Ф'†Cє0†At3†At8SO€M&[3†At€(#2†AtKO€NT:)ЙH†C­!3†At€Ф'†Cє0†At3†At 8SO€O&[3†At€р.2†AtKO€PT:)ЙH†C­!3†At€Ф'†Cє0†At3†At8SO€Q&[3†At€˜:2†AtKO€RT:)SO€S&[3†At€PF2†AtKO€TT)))O€VЙH†C­!3†At€м'†Cє0†AtЙ[†At#8 SO€[ЙH†C­!3†At€'†Cє&Н†At€ 3†AtU†At3†AtЙH†C­!3†At€ф'†Cє0†At3†At U†AtL2†AtKO€^ЙH†C­!3†At€'†Cє0†At8!ЙH†C­!3†At€ф'†Cє0†At3†At$8!SO€`ЙH†C­!3†At€8Є'†Cє3†At€ЙH†C­!3†At€'†Cє0†At3†At 2†AtKO€aT:")!SO€bЙH†C­!3†At€8Є'†Cє3†At2†AtKO€cЙH†C­!3†At€'†Cє3†At2†AtKO€dT)"O€eT:#) SO€fЙH†C­!3†At€8Є'†Cє3†At2†AtKO€gЙH†C­!3†At€'†Cє3†At2†AtKO€hT)#O€iTO€o)ЙTІA“ 3†At"9%ЙTІA“ 3†At$8$)%SO€p&^3†Atј2†AtKO€qTO€r)$ЙH†C­!3†At€№'†CєЙTІA“ 2†AtKO€tЙ^†AtA†At:ZO€uT)ZOGTTO€ O €ўO3 f0" D ЄBEOœO€|SS&]F-(-&LOSO€}O€Й&†C­!3†At€'†Cє0†At8,SO€„&+3†At2†AtKO€…Й&†C­!3†At€(Є'†Cє0†At3†At€€$8-Й&†C­!3†At€ф'†Cє0†At3†At$8-SO€‰&+3†At2†AtKO€‹TO€Œ)-Й(†Cћ!3†At|'†CєЙ+†At2†AtKO€T:.),SO€ŽЙ(†Cћ!3†At|'†Cє3†At2†AtKO€T).O€T)*OGTTOœO€’M   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t %$#"!        ќћњљјїієѓђё№яедвбШЦФОНГАЏЎЊЉЄЃš™˜‘ŽŒˆ‡}zyxqpoihgfedcbaZ XComplexity†€VInputFramesize_ms†€TDTX_enabled†€RINBandFec_enabled†€PPacketLoss_perc†€NTargetRate_bps†tLPacketSize_ms†€JAPI_fs_kHz†€HpsEnc†€­ `rateTable†€[LBRRRate_thres_bps†t^ret†t\k†t_frac_Q6†t]fs_kHz†t       kx_bufout„€pЁ€Кjx_buf„€pЁ€К  sx_bufout„€Ј Ё€ђtresample16To24state†,Ё€Оrx_buf„€pЁ€К   {x_buf„€pЁ€К €resample16To24state†,Ё€Оscratch†€ 2Ё€ѓ~x_buf24„€Ј Ё€ђ ‰x_bufout„€TЁ€є  x_buf„€pЁ€К ’x_bufout„€@ Ё€ѕ”scratch†€ 2Ё€ѓ“x_buf24„€рЁ€і•resample12To24state†Ё€Ц   ›x_buf„€pЁ€К žscratch†€ 2Ё€ѓŸx_buf24„€рЁ€і resample12To24state†Ё€Ц Іresample12To16state†,Ё€ОЅx_buf16„€Ј Ё€ђ Ћx_bufout„€ Ё€ї  Бx_buf„€pЁ€К Еscratch†€№KЁ€јДx_buf24„€PЁ€љЖresample8To24state†Ё€Ь Пx_buf16„€рЁ€іСresample8To16state†Ё€ЦРscratch†€ 2Ё€ѓ                                         .-,* (psEncCtrl†€ћ&psEnc†€­ +LBRR_usage†t     ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёз ž!о –!Ž!›!Ќ!М!Ў!ё!Џ!в!А!з!Б!о!В!к!Д!Š"р!ф!ь!Œ"э!Ž"ю!ˆ"њ!ў!b!tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Ÿ   Љ Ў Ы з о р „!Ž!–!›!ž!Ќ!­!Ў!Џ!А!Б!В!Г!Д!Й!К!М!Н!О!П!С!Т!Ф!Х!Ц!Ч!Щ!Ъ!Ы!Ь!Э!Ю!а!в!д!з!и!к!м!о!п!р!т!ф!ц!ч!щ!ъ!ы!ь!э!ю!ё!ђ!ѓ!є!ѕ!і!ї!ј!љ!њ!ћ!ў!€"‚"ƒ"…"ˆ"Š"Œ"Ž"@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glЭ.cil$in.cil$exxf.cil$syд.cil$dbi/3693 1284597036 100666 17797 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТeE ,e‘LAD.drectveQ, .cil$fg}@@.cil$gl …@@.cil$inˆ@@.cil$exШ+‰@@.cil$syK Q:@@.cil$dbЅœC@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_code_signs.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_code_signs.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2x2€ovџ V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛYŒ^ЁA^ŠћsM,uОЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Жj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define.hмз$?яюЬqўDьDьАШтj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_errors.h>№x гbќ:Tи™Ж+Ы уj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпФj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?Зj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,пj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_code_signs.cУШЫ8ЬЈкBp@]fPФ SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШчSKP_Silk_encode_signs‚€Ї€(€#]hчєSKP_Silk_decode_signs‚€Љ€&*€8^hч$SKP_Silk_range_encoder‚€Ё$SKP_Silk_range_decoder‚€Є SKP_Silk_range_coder_state€ž SKP_Silk_range_coder_state€ž Мsize_tuчSKP_Silk_sign_CDF„€и!€Ћ ЃSA_AttrTarget€)АSA_Parameter€)†4strnlen†€ЎSA_Method€)†@ Нwchar_t!Ћwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЛOКO€ OЙO8OOOЙO?OИOOSOOЙOSOOИOOЗO#O OOЙO OOЗO\OЖO&OНOOЙOНOO€ O €ўO3 f0" D ЄBEOНOtSS&9F-7-5LOSOuЙ5†C 3†At3†At&4Н†Bu€Й7†BuU†BuЙ5†C U†C LCBA†Bu::OvT):OGTTO€ O €ўO3 f0" D ЄBEOНO€!SS&АF-Ў-ЌLOSO€"ЙЌ†C† 3†Cƒ3†At&ЋН†Bu€ ЙЎ†BuU†BuЙЌ†C† U†C† LCBA†Bu:БO€#T)БOGTTOЖO'OсOOЙOсOOтOOЙOтOOсOOЖO(OЖ OOЗOЖ O+OЖO)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTOЖO+O€ O €ўO3 f0" D ЄBEOЖO€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЖO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEOЖO€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEOЖO€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTOЖO€OЕOOсOOтOсOOЗOOсO OЕOуOOЗOуOOЖOOуO OсOOуO!OЕOФOOсOФOOуOOФO OЕO"OOOOЖOO OOOЗOOOOOO OЕOOO!OуOOO"OO!OЕOOO"OOOO#OOOO$OOOЕO#OœOO€ O €ўO3 f0" D ЄBEOœO-SS&чF-R-P-N-L-J-HLOSO.O/O0O2&U3†At ЙNІA“ 3†At ЙPІA“ ,„!,†AtЙRІA“ 2†AtKO3&W&чЙU†At3†A(2†C’!KO5&U3†At2†AtK:\)]&U3†At5†AtK)\ЙU†AtЙLІA“ "8^SO6ЙJ†C” ЙU†At3†A(0ІA“ 3†At 8_SO7&VЙJ†C” ЙU†At3†A(0ІA“ 3†At 3†At2†AtKO8&Н‚€ЂЙW†C’!U†C’!ЙV†AtUІA“ ЙH†CŸ!U†CŸ!LKO9TO:)_T:])^O;T)TOGTTO€ O €ўO3 f0" D ЄBEOœOFSS&єF-j-h-f-d-b-`LOSOGOHOIOK&m3†At ЙfІA“ 3†At ЙhІA“ ,„!,†AtЙjІA“ 2†AtKOL&o&чЙm†At3†A(2†C’!KON&m3†At2†AtK:t)u&m3†At5†AtK)tЙm†AtЙdІA“ "8vSOOЙb†CєЙm†At3†A(0†At3†At$8wSOP&$Н‚€Ѕ3†AtU†AtЙo†C’!U†C’!Й`†CŸ!U†CŸ!&nU†CєLKOSЙb†CєЙm†At3†A(Йn†At3†At 3†At†AtKOTTOU)wT:u)vOVT)lOGTTOœOXM: 7_MaxCount†u5_Str†€ Б Ў_MaxCount†uЌ_Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t _^ ] \T RRateLevelIndex†€PQuantOffsetType†€Nsigtype†€Llength†€Jq†€HsRC†€Ÿ Ui†tWcdf†€’VinData†t  wv u tl jRateLevelIndex†€hQuantOffsetType†€fsigtype†€dlength†€bq†€t`sRC†€Ÿ mi†tocdf†€’ndata†!t    ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёз ž!!tuєƒ ˆ ‹ Œ Ž  ‘ “ ” Љ з ’!ž!Ÿ!Ё!Ђ!Є!Ѕ!Ї!Љ!Ћ!@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl .cil$in.cil$exШ+.cil$syK .cil$dbЅ /3725 1284597036 100666 21612 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТLT ,e‘L(S.drectveQ, .cil$fgњ}@@.cil$glа w@@.cil$inG@@.cil$exC7H@@.cil$syІ ‹G@@.cil$dbї1R@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_CNG.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_CNG.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2Ф2€ovЬ V €џџ€€џџ*€џџ+€џџ,€џџЕj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main_fix.hЩЄёќ/:ˆзМJntГЬ?ЗЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉИc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьQc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлЖc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uО& j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’Смс' c:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'f( c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡Іku c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїЖ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{С j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,% j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™-j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlсj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs_fix.hУД‰ >GO“VРА,птj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_define_fix.h@ў,^žїY†ЗLŽ_Ы'_Pуj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_main.hkЛY№x гbќ:Tи™Ж+Ы цj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_structs.hљГ#u8^s.йxХЙSUжпЧj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_tables.hoьar6Z<Ѓ:…QЅB j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_plc.hЩ}*Мj_П#ХuХДR†(œj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_cng.cД‘АкяЗАЅЂL“7‰кў%Ф SKP_Silk_CLZ16†€ €Š |€‡Шж SKP_Silk_CLZ32†€€в€,+ШФ =SKP_Silk_CLZ_FRAC‚€€ш€$9Шж ЊSKP_Silk_SIN_APPROX_Q24†€€в €‚€ZШRSKP_Silk_CNG_exc‚€€(€#€ѕШ†SKP_Silk_CNG_Reset‚€q€i,€2KhSKP_Silk_CNG‚€€п-€М€№h Б Э Ц†R $SKP_Silk_NLSF_CB_struct€–Э SKP_Silk_LPC_synthesis_filter‚€‰ ЙSKP_Silk_decoder_control€y †SKP_Silk_decoder_state€j ~SKP_Silk_CNG_struct€o qSKP_Silk_PLC_struct€™ SKP_Silk_NLSF_CB_struct€– SKP_Silk_NLSF_CBS€› SKP_Silk_range_coder_state€ž SKP_Silk_range_coder_state€ž Кsize_tuЦSKP_Silk_NLSF2A_stable‚€‚ SKP_Silk_NLSF_CBS€› ЃSA_AttrTarget€)АSA_Parameter€)† …SKP_Silk_CNG_struct€o strnlen†€ЎSA_Method€)†@ Лwchar_t! }SKP_Silk_PLC_struct€™Б SKP_Silk_LPC_synthesis_order16‚€† ЦSKP_Silk_decoder_control€y€ wcsnlen†€ memmove†€{ ИSKP_Silk_decoder_state€j [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOИO€ OЗO8OOOЗO?OЖOOQOOЗOQOOЖOOЕOO% OO& O' OЗO' OO( OOЗO( OO' OO& O#Ou OOЗOu OO& O\O% O&O’ OOЗO’ OO€ O €ўO3 f0" D ЄBEO’ OtSS& F- - LOSOuЙ †C 3†At3†At& Н†Bu€Й †BuU†BuЙ †C U†C LCBA†Bu: OvT) OGTTO€ O €ўO3 f0" D ЄBEO’ O€!SS&… F-ƒ - LOSO€"Й †C† 3†Cƒ3†At&€ Н†Bu€ Йƒ †BuU†BuЙ †C† U†C† LCBA†Bu:† O€#T)† OGTTO% O'OЖ OO& OЖ O+O% O)OС OO€ O €ўO3 f0" D ЄBEOС OLSS&Ф F-Т LOSOM&Ц 3†At2†AtKONЙТ „!,†At3†At8Ч SOO3†AtA†At:Х OPTOR)Ч ЙТ „!,†At3†At€џ 8Ш SOSЙТ „!,†At3†At€№ 8Щ SOT&Т 3†At „!KOUT:Ъ )Щ SOV&Ц 3†At†AtKOW&Т 3†At„!KOXT)Ъ OYT:Ы )Ш SOZЙТ „!,†At3†At€№џ 8Ь SO[&Ц 3†At†AtKO\&Т 3†At„!KO]T:Э )Ь SO^&Ц 3†At †AtKO_T)Э O`T)Ы ObЙТ „!,†At3†At 8Ю SOcЙТ „!,†At3†At 8Я OdЙЦ †At3†AtA†At:Х Oe:а )Я OfЙЦ †At3†AtA†At:Х )а OgT:б )Ю SOhЙТ „!,†At3†At 8в OiЙЦ †At3†AtA†At:Х Oj:г )в OkЙЦ †At3†AtA†At:Х )г OlT)б OmT)Х OGTTO€ O €ўO3 f0" D ЄBEOС OpSS&ж F-д LOSOrЙд †At3†Bu€џџ 8и SOs&Ф Н†At€ Йд †At3†At ,„!U„!LA†At:з OtT:к )и SOu&Ф Н†At€ Йд †At,„!U„!L3†AtA†At:з OvT)к OwT)з OGTTO% O+O€ O €ўO3 f0" D ЄBEO% O€зSS&F-џ-§LOSO€иЙ§†AtЙџ†At"Й§†AtЙџ†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEO% O€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEO% O€пSS& F- - LOSO€рЙ †AtЙ †At"Й †AtЙ †AtCBA†At:O€сT)OGTTO€ O €ўO3 f0" D ЄBEO% O€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEO% O€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEO% O€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!: O€яT) OGTTO€ O €ўO3 f0" D ЄBEO% O€ёSS&%F-#-!LOSO€ђЙ!†AtЙ#†At$Й!†AtЙ#†AtCBA†At:&O€ѓT)&OGTTO€ O €ўO3 f0" D ЄBEO% O€ѕSS&+F-)-'LOSO€іЙ'ˆЙ)ˆ$Й'ˆЙ)ˆCBAˆ:,O€їT),OGTTO-OO€ O €ўO3 f0" D ЄBEO-O*SS&0F-.LOSO+O-&2Й.ˆ3†At ,†At2†AtKO.Й2†At3†At84SO03†At &ж Н†At€Й.ˆ,†AtU†AtLA†At:1O1T:6)4SO3&ж Н†At€Й2†AtU†AtLA†At:1O4T)6O5T)1OGTTO€ O €ўO3 f0" D ЄBEO-O;SS&=F-;-9-7LOSO&?&ж Н†At€Й7†AtU†AtL2†AtKO?Й9†CєЙ?†At2†AtKO@Й?†At3†At"8@SOAЙ;†CєЙ7†At3†AtЙ?†At 3†At 2†AtKOBT:A)@SOCЙ;†CєЙ7†AtЙ?†At3†At 3†At 2†AtKODT)AOET)>OGTTO€ O €ўO3 f0" D ЄBEO-OKSS&DF-BLOSOLONЙB†At3†At!8ISOO3†AtA†At:EOPTOR)I&=Н‚€&HU†Cє&GU†CєЙB†AtU†AtLKOTЙG†At3†At 8JSOU&F3†At€€2†AtKOVT:K)JSOW&F3†At€†Д2†AtKOXT)KO[&FЙG†At3†At †AtKO^&FЙF†AtЙF†At3†At 3†At€еЙH†At,„!,†At,„!,†AtЙF†At3†At€џџ 3†At€еЙH†At,„!,†At,„!,†At3†At 2†AtKO`ЙF†AtA†At:EOaT)EOGTTO€ O €ўO3 f0" D ЄBEO-OdSS&ZF-XLOSOfOiЙX„!,†At3†At 3†At8]3†AtA†At:[Ok)]&\ЙX„!2†AtKOm&\Й\†At3†At †AtKOo&ж Н†At€Й\†AtU†AtL3†AtA†At:[OpT)[OGTTO€ O €ўO3 f0" D ЄBEO-OsSS&`F-^LOSOvЙ^†At3†At 3†At8b3†AtA†At:aOy)b&^Й^†At3†At †AtKO{&ж Н†At€Й^†AtU†AtL3†AtA†At:aO|T)aOGTTO€ O €ўO3 f0" D ЄBEO-O€„SS&iF-g-e-cLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&k&ж Н†At€ЙcІA“ 3†At$ЙcІA“ ЙcІA“ CBU†AtL3†At2†AtKO€&oЙcІA“ Йk†At 2†AtKO€Ž&l&ж Н†At€ЙeІA“ 3†At$ЙeІA“ ЙeІA“ CBU†AtL3†At2†AtKO€&pЙeІA“ Йl†At 2†AtKO€’&n3†At€џџџЙp†At3†At 2†AtKO€•&qЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€˜&oЙp†At,ˆЙq†At,ˆ3†At ,†At3†At †AtKO€›&qЙq†AtЙo†At3†At Йn†At,„!,†AtЙo†At3†At€џџ Йn†At,„!,†At3†At 2†AtKO€ž&m3†AtЙk†AtЙl†AtЙgІA“ 2†AtKO€ŸЙm†At3†At!8SO€ 3†At€€Йm†At 3†At€џџџЙm†At $Йq†At3†At€€Йm†At $3†At€€Йm†At Йq†At3†At€џџџЙm†At "3†At€џџџЙm†At Йq†AtCBCBЙq†At3†At€џџџЙm†At $3†At€џџџЙm†At Йq†At3†At€€Йm†At "3†At€€Йm†At Йq†AtCBCBCBЙm†At A†At:jO€ЁT:…)SO€ЂЙm†At3†At "8†SO€ЃЙq†AtЙm†At A†At:jO€ЄT:‡)†SO€І3†AtA†At:jO€ЇT)‡O€ЈT)…O€ЉT)jOGTTO€ O €ўO3 f0" D ЄBEO-O€АSS&ŒF-Š-ˆLOSO€БO€ВO€Д3‚KO€Е3‚KO€И&Ž&ж Н†At€ЙˆІA“ 3†At$ЙˆІA“ ЙˆІA“ CBU†AtL3†At2†AtKO€Й&‘ЙˆІA“ ЙŽ†At 2†AtKO€М&3†At€џџџЙ‘†At3†At 2†AtKO€П&“Й†At3†At 2†AtKO€Т&’Й‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&“Й“†AtЙ’†At3†At Й†At,„!,†AtЙ’†At3†At€џџ Й†At,„!,†At3†At Й’†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&3†At=ЙŽ†AtЙŠІA“ 2†AtKO€ЩЙ†At3†At!8ŸSO€Ъ3†At€€Й†At 3†At€џџџЙ†At $Й“†At3†At€€Й†At $3†At€€Й†At Й“†At3†At€џџџЙ†At "3†At€џџџЙ†At Й“†AtCBCBЙ“†At3†At€џџџЙ†At $3†At€џџџЙ†At Й“†At3†At€€Й†At "3†At€€Й†At Й“†AtCBCBCBЙ†At A†At:O€ЫT:Ѕ)ŸSO€ЬЙ†At3†At "8ІSO€ЭЙ“†AtЙ†At A†At:O€ЮT:Ї)ІSO€а3†AtA†At:O€бT)ЇO€вT)ЅO€гT)OGTTO€ O €ўO3 f0" D ЄBEO-O€рSS&ЊF-ЈLOSO€сO€ф&Ј3†At€џџ†AtKO€чЙЈ†At3†At€€!8­SO€шЙЈ†At3†At€@"8ЎSO€ъ&Ј3†At€@ЙЈ†At2†AtKO€ыT:Џ)ЎSO€э&Ј3†At€@†AtKO€юT)ЏO€яЙЈ†At3†At€L"8АSO€ё3†At€ЙЈ†AtЙЈ†At3†At 3†At€CьџџЙЈ†AtЙЈ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЋO€ђTO€ѓ)А&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€є&Ќ3†At€љ*ЙЈ†At3†At 3†At€kьџџЙЈ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ќ3†At€ЬфћЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€і&Ќ3†At€*чџ?ЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€їT:Х)­SO€јЙЈ†At3†At€Р"8ЦSO€њ&Ј3†At€РЙЈ†At2†AtKO€ћT:Ч)ЦSO€§&Ј3†At€Р†AtKO€ўT)ЧO€џЙЈ†At3†At€L"8ШSO€3†At€џЙЈ†AtЙЈ†At3†At 3†At€НЙЈ†AtЙЈ†At3†At€џџ 3†At€Н3†At A†At:ЋO€TO€)Ш&ЈЙЈ†At3†At 3†At ЙЈ†At,„!,†AtЙЈ†At3†At 3†At€џџ ЙЈ†At,„!,†At3†At 2†AtKO€&Ќ3†At€еяџЙЈ†At3†At 3†At€•ЙЈ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ќ3†At€4яЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€&Ќ3†At€РЙЈ†At3†At ЙЌ†At,„!,†AtЙЈ†At3†At€џџ ЙЌ†At,„!,†At3†At ЙЈ†AtЙЌ†At3†At 3†At3†At 2†AtKO€T)ХO€ЙЌ†At3†At 3†At3†At A†At:ЋO€ T)ЋOGTTO€ O €ўO3 f0" D ЄBEO-O€SS&пF-нLOSO€&ЊН†At€Йн†At3†At€@U†AtLA†At:рO€T)рOGTTO% O€OЕO OсOO& OсOOтOOсO OуOO% OуOOфOOхOфOO& OOфO OуOцOO& OцOO% OOцO OфOOцO!OуOЧOOфOЧOOцOOЧO OуO"OOOЕOOOуO#OсO!OцOOсO"OЕO!OуOOЕO"OтOOЕO#OOOЕO$OœOO€ O €ўO3 f0" D ЄBEOœO&SS&RF-P-N-L-J-HLOSO'O(O*&W3†At€џ2†AtKO+)YЙW†AtЙN†At$8ZSO,&WЙW†At3†At 2†AtKO-T:Y)ZO/&TЙP†Cє0†At2†AtKO0&U3†At2†AtK:[)\&U3†At5†AtK)[ЙU†AtЙN†At"8]SO1&T3†At€kc6ЙT†At3†At€5„Г 2†AtKO2&VЙT†At3†At ЙW†At 2†AtKO33‚KO43‚KO5ЙH†C‘ЙU†At3†A(ЙJ†CєЙV†At3†A(0†At3†At ЙL†At,„!,†AtЙJ†CєЙV†At3†A(0†At3†At€џџ ЙL†At,„!,†At3†At ЙJ†CєЙV†At3†A(0†AtЙL†At3†At 3†At3†At 3†At 3†At3†At 3†At€џ$3†At€џЙJ†CєЙV†At3†A(0†At3†At ЙL†At,„!,†AtЙJ†CєЙV†At3†A(0†At3†At€џџ ЙL†At,„!,†At3†At ЙJ†CєЙV†At3†A(0†AtЙL†At3†At 3†At3†At 3†At 3†At3†At 3†At€€џџ"3†At€€џџЙJ†CєЙV†At3†A(0†At3†At ЙL†At,„!,†AtЙJ†CєЙV†At3†A(0†At3†At€џџ ЙL†At,„!,†At3†At ЙJ†CєЙV†At3†A(0†AtЙL†At3†At 3†At3†At 3†At 3†At3†At CBCB,„!2„!KO6T:\)]O7ЙP†CєЙT†At2†AtKO8T)SOGTTO€ O €ўO3 f0" D ЄBEOœO=SS&†F-ˆLOSO>O@&Œ3†At€џЙˆ†Cж 3†At€ш+'†Cє0†At3†At2†AtKOA&3†At2†AtKOB&‹3†At2†AtK:)&‹3†At5†AtK)Й‹†AtЙˆ†Cж 3†At€ш+'†Cє0†At"8‘SOC&ЙŒ†At†AtKODЙˆ†Cж 3†At€€6'†Cы Й‹†At3†A(Й†At2†AtKOET:)‘OFЙˆ†Cж 3†At€7'†Cє3†At2†AtKOGЙˆ†Cж 3†At€7'†Cє3†At€€x02†AtKOHT)ŠOGTTO€ O €ўO3 f0" D ЄBEOœOQSS&F-˜-–-”-’LOSOROSOTOUOVOW&ЂЙ’†Cж 3†At€/'†Cэ 2†Cь KOYЙ’†Cж 3†At€м+'†Cє0†AtЙЂ†Cь 3†At€'†Cє0†At 8ЃSO[&†Н‚€rЙ’†Cж U†Cж LKO]ЙЂ†Cь 3†At€'†CєЙ’†Cж 3†At€м+'†Cє0†At2†AtKO^TO_)ЃЙ’†Cж 3†At€h7'†Cє0†At3†At8ЄЙ’†Cж 3†At€є.'†Cє0†At3†At8ЄSOc&›3†At2†AtK:Ѕ)І&›3†At5†AtK)ЅЙ›†AtЙ’†Cж 3†At€ш+'†Cє0†At"8ЇSOdЙЂ†Cь 3†At€€'†Cы Й›†At3†A(Й’†Cж 3†At€ь+'†Cы Й›†At3†A(0†AtЙЂ†Cь 3†At€€'†Cы Й›†At3†A(0†At3†At 3†At€м?Й’†Cж 3†At€ь+'†Cы Й›†At3†A(0†AtЙЂ†Cь 3†At€€'†Cы Й›†At3†A(0†At3†At€џџ 3†At€м?3†At †AtKOeT:І)ЇOg&Ÿ3†At2†AtKOh&œ3†At2†AtKOi&›3†At2†AtK:Ќ)­&›3†At5†AtK)ЌЙ›†At3†At"8ЎSOjЙ”†Cє 3†At'†Cы Й›†At3†A(0†AtЙŸ†At$8ЏSOk&ŸЙ”†Cє 3†At'†Cы Й›†At3†A(0†At2†AtKOl&œЙ›†At2†AtKOmTOn)ЏT:­)ЎOp& Н†Cƒ€|3†AtЙ’†Cж 3†At€ф+'†Cє0†At3†BuU†BuЙЂ†Cь 3†At'†C§ U†CЫ ЙЂ†Cь 3†At'†Cы Й’†Cж 3†At€ф+'†Cє0†At3†A(U†CƒLKOq3†At€Ќ@†CƒЙ’†Cж 3†At€ф+'†Cє0†At3†BuU†BuЙ’†Cж 3†At€8'†Cы Йœ†AtЙ’†Cж 3†At€ф+'†Cє0†At3†A(U†CЫ ЙЂ†Cь 3†At'†C§ U†CƒLKOt&›3†At2†AtK:В)Г&›3†At5†AtK)ВЙ›†At3†At"8ДSOuЙЂ†Cь 3†At€'†CєЙ”†Cє 3†At'†Cы Й›†At3†A(0†AtЙЂ†Cь 3†At€'†Cє0†At3†At 3†At€Й”†Cє 3†At'†Cы Й›†At3†A(0†AtЙЂ†Cь 3†At€'†Cє0†At3†At€џџ 3†At€3†At †AtKOvT:Г)ДOwTOz)ЄЙ’†Cж 3†At€h7'†Cє0†At8ЙSO}O~&RН‚€€ЙЂ†Cь 3†At€'†Cы U†Cєɘ†AtU†AtЙЂ†Cь 3†At€'†Cє0†AtU†AtЙЂ†Cь 3†At'†C§ U†Cє&ЁU†C‘LKO€&ЦН‚€ƒЙ’†Cж 3†At€ш+'†Cє0†AtUІA“ ЙЂ†Cь 3†At€€'†C„!U†C” & U†C‘LKO€ƒ&ž3†At€2†AtKO€†Й’†Cж 3†At€ш+'†Cє0†At3†At8ЛSO€‡O€ˆ&Б Н‚€‡ɘ†AtUІA“ &ЁU†C‘ЙЂ†Cь 3†At€Р'†C„!U†CєЙž†AtUІA“ & U†CЎ &ЁU†CЎ LKO€‰T:М)ЛSO€ŠO€‹&Э Н‚€ŠЙ’†Cж 3†At€ш+'†Cє0†AtUІA“ ɘ†AtUІA“ &ЁU†C‘ЙЂ†Cь 3†At€Р'†C„!U†CєЙž†AtUІA“ & U†CЎ &ЁU†CЎ LKO€ŒT)МO€Ž&›3†At2†AtK:Н)О&›3†At5†AtK)НЙ›†Atɘ†At"8ПSO€&Й–†C‘Й›†At3†A(0„!,†At&ЁЙ›†At3†A(0„!,†At2†AtKO€Й–†C‘Й›†At3†A(Й†At3†At€џ$3†At€џЙ†At3†At€€џџ"3†At€€џџЙ†AtCBCB2„!KO€‘T:О)ПO€’T:Т)ЙSO€“3†At€­@†CƒЙ’†Cж 3†At€ш+'†Cє0†At3†BuU†Bu3†AtU†AtЙЂ†Cь 3†At€Р'†C„!U†CƒLKO€”T)ТO€•T)šOGTTOœO€–M   _MaxCount†u _Str†€ †  ƒ _MaxCount†u _Src†€ г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Х  Т in16„ Ц out32†t         к и з  д in32†t    џb†t§a†t  b„a„   b†t a†t  bˆaˆ  b†ta†t   b„a„ & #b†t!a†t , )bˆ'aˆ 641 .inˆ 2in_upper†t  A@> ;frac_Q7†€t9lz†€t7in†t ?leadingZeros†t  KJIE Bx†t Fy†tGlz†!tHfrac_Q7†!t   ][ Xa„ \a32†tba ^a†t ‡†…j gQres†€eb32†€ca32†€ nb32_inv†toa32_nrm†tpb32_nrm†tka_headrm†tqresult†tmlshift†tlb_headrm†t    ЇІЅŸ ŠQres†€ˆb32†€ b32_inv†t‘b32_nrm†t’err_Q32†t“result†tlshift†tŽb_headrm†t    ШЧЦХАЏЎ­Ћ Јx†t Ќy_Q30†t        р нx†t ] \ [Z Y S Prand_seed†€tNlength†tLGain_Q16†tJexc_buf_Q10†€tHresidual†€ Wexc_mask†tUi†tVidx†tTseed†t  ‘  Š ˆpsDec†€V ŒNLSF_step_Q15†t‹i†tNLSF_acc_Q15†t ТП О НМЛЙД Г ВЏЎ ­ ЌЇ І ЅЄЃš ˜length†t–signal†€”psDecCtrl†€t’psDec†€V žGain_Q26†t›i†t LPC_buf„ Ё€uœsubfr†tŸmax_Gain_Q16†ttmp_32†tЂpsCNG†€lЁCNG_sig„€РЁ€‹             ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђёе ъ з ž!о –!ч я ш ™!ѓ љ Ž!›!9!tuƒ‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Љ Ў Ы е ж з о ч ш ъ ы ь э я ё ђ ѓ є ѕ љ ћ ќ § џ €!‚!ƒ!„!†!‡!‰!Š!‹!!Ž!–!™!›!ž!@comp.idovЊџџ@feat.00џџ.drectveQ.cil$fgњ.cil$glа .cil$in.cil$exC7.cil$syІ .cil$dbї/3750 1284597036 100666 15906 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТ> ,e‘Lо<.drectveQ, .cil$fg}@@.cil$glЯ‹@@.cil$inZ @@.cil$ex=*[ @@.cil$syМ˜4@@.cil$dbŠT<@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_bwexpander_32.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_bwexpander_32.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2ј2€ovЫV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_bwexpander_32.cЉёXК9Ћ&Х+DcЦУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШк SKP_Silk_bwexpander_32‚€"€v'€#€Џh Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœOO€ O €ўO3 f0" D ЄBEOœO$SS&к F-ф-т-рLOSO%O&O(&шЙф†At2†AtKO)&ч3†At2†AtK:щ)ъ&ч3†At5†AtK)щЙч†AtЙтІA“ 3†At"8ыSO*Йр†CєЙч†At3†A(Йр†CєЙч†At3†A(0†At3†At Йш†At,„!,†AtЙр†CєЙч†At3†A(0†At3†At€џџ Йш†At,„!,†At3†At Йр†CєЙч†At3†A(0†AtЙш†At3†At 3†At3†At 2†AtKO+&шЙф†At3†At Йш†At,„!,†AtЙф†At3†At€џџ Йш†At,„!,†At3†At Йф†AtЙш†At3†At 3†At3†At 2†AtKO,T:ъ)ыO-Йр†CєЙтІA“ 3†At3†A(Йр†CєЙтІA“ 3†At3†A(0†At3†At Йш†At,„!,†AtЙр†CєЙтІA“ 3†At3†A(0†At3†At€џџ Йш†At,„!,†At3†At Йр†CєЙтІA“ 3†At3†A(0†AtЙш†At3†At 3†At3†At 2†AtKO.T)цOGTTOœO/M9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t ы ъ щц фchirp_Q16†tтd†€рar†€t чi†tшtmp_chirp_Q16†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ Ђ Љ @comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glЯ.cil$in.cil$ex=*.cil$syМ.cil$dbŠ/3785 1284597036 100666 15626 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТъ< ,e‘LЦ;.drectveQ, .cil$fg}@@.cil$glЧ…@@.cil$inL @@.cil$ex+)M @@.cil$syТx3@@.cil$dbŒ:;@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_bwexpander.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_bwexpander.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2ю2€ovУV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_bwexpander.cž‰ яЊQ ’ќ›тSТљ2У SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШг SKP_Silk_bwexpander‚€T€v'€#gh Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœOO€ O €ўO3 f0" D ЄBEOœO$SS&г F-ф-т-рLOSO%O&O(&шЙф†At3†At€2†AtKO,&ч3†At2†AtK:щ)ъ&ч3†At5†AtK)щЙч†AtЙтІA“ 3†At"8ыSO-Йр†C‘Йч†At3†A(Йф†AtЙр†C‘Йч†At3†A(0„!,†At3†At 3†At3†At ,„!2„!KO.&фЙф†AtЙш†At3†At 3†At3†At †AtKO/T:ъ)ыO0Йр†C‘ЙтІA“ 3†At3†A(Йф†AtЙр†C‘ЙтІA“ 3†At3†A(0„!,†At3†At 3†At3†At ,„!2„!KO1T)цOGTTOœO2M9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t ы ъ щц фchirp_Q16†tтd†€рar†€ чi†tшchirp_minus_one_Q16†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ Љ д @comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glЧ.cil$in.cil$ex+).cil$syТ.cil$dbŒ/3817 1284597036 100666 23997 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТ] ,e‘Ly\.drectveQ, .cil$fg}@@.cil$gl‹@@.cil$in( @@.cil$exФD) @@.cil$syт эO@@.cil$dbЊЯ[@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_burg_modified.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_burg_modified.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2œ2€ov™V €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_burg_modified.cj%ˆp^ Т›s˜P!8 šЄУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше hSKP_DIV32_varQ†€M€ €y€щШе ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШКSKP_Silk_burg_modified‚€R€v'€#€^hе  цћhцSKP_Silk_inner_prod_aligned†€? Лsize_tuћSKP_Silk_inner_prod16_aligned_64ˆ€8 ЃSA_AttrTarget€) SKP_Silk_sum_sqr_shift‚€HАSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO&O€ O €ўO3 f0" D ЄBEOœO;SS&КF-ю-ь-ъ-ш-ц-ф-т-рLOSOO@OAOBODOEOG3‚KOH3‚KOL& Н‚€IЙъІA“ ЙшІA“ U†AtЙц†CЎ U†CЎ &ѕU†Cє&їU†CєLKOMЙѕ†At3†At$8 SON&їЙї†AtЙѕ†At3†At 2†AtKOO3‚KOP&ѕ3†At2†AtKOQT: ) SOR&є&е Н†At€Йї†AtU†AtL3†At2†AtKOS&і3†AtЙє†At2†AtKOTЙі†At3†At$8 SOU&іЙі†At3†AtЙѕ†At"Йі†At3†AtЙѕ†AtCB2†AtKOV&їЙї†AtЙі†At 2†AtKOWT: ) SOX&іЙі†At3†At№Йѕ†At$Йі†At3†At№Йѕ†AtCB2†AtKOY&їЙї†AtЙі†At 2†AtKOZT) O[&ѕЙі†At†AtKO\T) O]3†At€­@†Cƒ3†Bu@U†Bu3†AtU†At&U†CƒLKO^Йѕ†At3†At$8SO_&ѓ3†At2†AtK:)&ѓ3†At5†AtK)Йѓ†AtЙъІA“ "8SO`&Йц†CЎ Йѓ†AtЙшІA“ 3†A2†CЎ KOa&ђ3†At2†AtK:)&ђ3†At5†AtK)Йђ†AtЙюІA“ 3†At"8SObOc&Йђ†At3†At3†A(&ћНˆ€9ЙшІA“ Йђ†AtUІA“ Й†CЎ Йђ†At3†AU†CЎ Й†CЎ U†CЎ LЙѕ†At ,†At†AtKOdT:)OeT:)OfT:)SOg&ѓ3†At2†AtK:)&ѓ3†At5†AtK)Йѓ†AtЙъІA“ "8SOh&Йц†CЎ Йѓ†AtЙшІA“ 3†A2†CЎ KOi&ђ3†At2†AtK:)&ђ3†At5†AtK)Йђ†AtЙюІA“ 3†At"8SOjOk&Йђ†At3†At3†A(&цН†At€@ЙшІA“ Йђ†AtUІA“ Й†CЎ Йђ†At3†AUІCН Й†CЎ UІCН LЙѕ†At †AtKOlT:)OmT:)OnT)Oo3†At€Ќ@†Cƒ3†Bu@U†Bu&U†CЫ &U†CƒLKOr&3†A(&3†A(Йї†AtЙьІA“ ,ˆЙї†At,ˆ3†At ,†At3†At2†At2†AtKOt&ђ3†At2†AtK:!)"&ђ3†At5†AtK)!Йђ†AtЙюІA“ "8#SOyЙѕ†At3†Atў$8$SOz&ѓ3†At2†AtK:%)&&ѓ3†At5†AtK)%Йѓ†AtЙъІA“ "8'SO{&Йц†CЎ Йѓ†AtЙшІA“ 3†A2†CЎ KO|&џЙ†CЎ Йђ†At3†A(0Є!­ ,†At3†AtЙѕ†At 2†AtKO}&Й†CЎ ЙшІA“ Йђ†At3†At3†A(0Є!­ ,†At3†AtЙѕ†At 2†AtKO~&§Й†CЎ Йђ†At3†A(0Є!­ ,†At3†At 2†AtKO&ўЙ†CЎ ЙшІA“ Йђ†At3†At3†A(0Є!­ ,†At3†At 2†AtKO€€&ё3†At2†AtK:,)-&ё3†At5†AtK),Йё†AtЙђ†At"8.SO€&Йё†At3†A(&Йё†At3†A(0†AtЙџ†At3†At Й†CЎ Йђ†AtЙё†At3†At3†A(0Є!­ ,„!,†AtЙџ†At3†At€џџ Й†CЎ Йђ†AtЙё†At3†At3†A(0Є!­ ,„!,†At3†At 2†AtKO€‚&Йё†At3†A(&Йё†At3†A(0†AtЙ†At3†At Й†CЎ ЙшІA“ Йђ†AtЙё†At3†A(0Є!­ ,„!,†AtЙ†At3†At€џџ Й†CЎ ЙшІA“ Йђ†AtЙё†At3†A(0Є!­ ,„!,†At3†At 2†AtKO€ƒ&ћ&Йё†At3†A(0†At2†AtKO€„&§Й§†AtЙћ†At3†At Й†CЎ Йђ†AtЙё†At3†At3†A(0Є!­ ,„!,†AtЙћ†At3†At€џџ Й†CЎ Йђ†AtЙё†At3†At3†A(0Є!­ ,„!,†At3†At 2†AtKO€…&ўЙў†AtЙћ†At3†At Й†CЎ ЙшІA“ Йђ†AtЙё†At3†A(0Є!­ ,„!,†AtЙћ†At3†At€џџ Й†CЎ ЙшІA“ Йђ†AtЙё†At3†A(0Є!­ ,„!,†At3†At 2†AtKO€†T:-).O€‡&§Й§†At3†AtЙѕ†At 2†AtKO€ˆ&ўЙў†At3†AtЙѕ†At 2†AtKO€‰&ё3†At2†AtK:?)@&ё3†At5†AtK)?Йё†AtЙђ†At!8ASO€Š&Йё†At3†A(&Йё†At3†A(0†AtЙ§†At3†At Й†CЎ Йђ†AtЙё†At3†A(0Є!­ ,„!,†AtЙ§†At3†At€џџ Й†CЎ Йђ†AtЙё†At3†A(0Є!­ ,„!,†At3†At 2†AtKO€‹&Йё†At3†A(&Йё†At3†A(0†AtЙў†At3†At Й†CЎ ЙшІA“ Йђ†AtЙё†At3†At3†A(0Є!­ ,„!,†AtЙў†At3†At€џџ Й†CЎ ЙшІA“ Йђ†AtЙё†At3†At3†A(0Є!­ ,„!,†At3†At 2†AtKO€ŒT:@)AO€T:&)'O€ŽT:J)$SO€&ѓ3†At2†AtK:K)L&ѓ3†At5†AtK)KЙѓ†AtЙъІA“ "8MSO€&Йц†CЎ Йѓ†AtЙшІA“ 3†A2†CЎ KO€‘&џЙ†CЎ Йђ†At3†A(0Є!­ ,†AtЙѕ†At 2†AtKO€’&Й†CЎ ЙшІA“ Йђ†At3†At3†A(0Є!­ ,†AtЙѕ†At 2†AtKO€“&§Й†CЎ Йђ†At3†A(0Є!­ ,†At3†At 2†AtKO€”&ўЙ†CЎ ЙшІA“ Йђ†At3†At3†A(0Є!­ ,†At3†At 2†AtKO€•&ё3†At2†AtK:R)S&ё3†At5†AtK)RЙё†AtЙђ†At"8TSO€–&Йё†At3†A(&Йё†At3†A(0†AtЙџ†AtЙ†CЎ Йђ†AtЙё†At3†At3†A(0Є!­ ,†At2†AtKO€—&Йё†At3†A(&Йё†At3†A(0†AtЙ†AtЙ†CЎ ЙшІA“ Йђ†AtЙё†At3†A(0Є!­ ,†At2†AtKO€˜&ќ&Йё†At3†A(0†At3†At 3†At3†At 2†AtKO€™&§Й§†AtЙ†CЎ Йђ†AtЙё†At3†At3†A(0Є!­ ,†AtЙќ†At2†AtKO€š&ўЙў†AtЙ†CЎ ЙшІA“ Йђ†AtЙё†At3†A(0Є!­ ,†AtЙќ†At2†AtKO€›T:S)TO€œ&§Й§†At2†AtKO€&ўЙў†At2†AtKO€ž&ё3†At2†AtK:U)V&ё3†At5†AtK)UЙё†AtЙђ†At!8WSO€ŸO€ &Йё†At3†A(&Йё†At3†A(0†AtЙ§†At3†At Й†CЎ Йђ†AtЙё†At3†A(0Є!­ ,†AtЙѕ†At3†At ,„!,†AtЙ§†At3†At€џџ Й†CЎ Йђ†AtЙё†At3†A(0Є!­ ,†AtЙѕ†At3†At ,„!,†At3†At Й§†AtЙ†CЎ Йђ†AtЙё†At3†A(0Є!­ ,†AtЙѕ†At3†At 3†At 3†At3†At 2†AtKO€ЁO€Ђ&Йё†At3†A(&Йё†At3†A(0†AtЙў†At3†At Й†CЎ ЙшІA“ Йђ†AtЙё†At3†At3†A(0Є!­ ,†AtЙѕ†At3†At ,„!,†AtЙў†At3†At€џџ Й†CЎ ЙшІA“ Йђ†AtЙё†At3†At3†A(0Є!­ ,†AtЙѕ†At3†At ,„!,†At3†At Йў†AtЙ†CЎ ЙшІA“ Йђ†AtЙё†At3†At3†A(0Є!­ ,†AtЙѕ†At3†At 3†At 3†At3†At 2†AtKO€ЃT:V)WO€ЄT:L)MO€ЅT)JO€Ј&§&Йђ†At3†A(0†At2†AtKO€Љ&ў&Йђ†At3†A(0†At2†AtKO€Њ&ј3†At2†AtKO€Ћ&љ&3†A(0†At&3†A(0†At2†AtKO€Ќ&ё3†At2†AtK:j)k&ё3†At5†AtK)jЙё†AtЙђ†At"8lSO€­&ћ&Йё†At3†A(0†At2†AtKO€Ў&є&е Н†At€Йћ†At3†At$Йћ†AtЙћ†AtCBU†AtL3†At2†AtKO€Џ&є3†AtЙє†At"3†AtЙє†AtCB2†AtKO€А&ќЙћ†AtЙє†At 2†AtKO€В&§Й§†At&Йђ†AtЙё†At3†At3†A(0†At,ˆЙќ†At,ˆ3†At ,†At3†AtЙє†At 2†AtKO€Г&ўЙў†At&Йђ†AtЙё†At3†At3†A(0†At,ˆЙќ†At,ˆ3†At ,†At3†AtЙє†At 2†AtKO€Д&јЙј†At&Йђ†AtЙё†At3†A(0†At,ˆЙќ†At,ˆ3†At ,†At3†AtЙє†At 2†AtKO€ЕO€Ж&љЙљ†At&Йё†At3†At3†A(0†At&Йё†At3†At3†A(0†At,ˆЙќ†At,ˆ3†At ,†At3†AtЙє†At 2†AtKO€ЗT:k)lO€И&Йђ†At3†At3†A(Й§†At2†AtKO€Й&Йђ†At3†At3†A(Йў†At2†AtKO€К&јЙј†AtЙў†At2†AtKO€Л&јЙј†At3†At 2†AtKO€ОЙј†At3†At$Йј†AtЙј†AtCBЙљ†At"8uSO€П&њ&hН†At€N3†AtUІA“ Йљ†AtUІA“ Йј†AtUІA“ L2†AtKO€РT:v)uSO€Т3†At€­@†CƒЙюІA“ Йђ†At3†BuU†Bu3†AtU†At&Йђ†At3†A(U†CƒLKO€У3‚KO€Ф:#O€ХT)vO€Ш&ё3†At2†AtK:y)z&ё3†At5†AtK)yЙё†AtЙђ†At3†At3†At "8{SO€Щ&§&Йё†At3†A(0†At2†AtKO€Ъ&ў&Йђ†AtЙё†At3†At3†A(0†At2†AtKO€Ы&Йё†At3†A(Й§†AtЙў†At,ˆЙњ†At,ˆ3†At ,†At3†At 2†AtKO€Ь&Йђ†AtЙё†At3†At3†A(Йў†AtЙ§†At,ˆЙњ†At,ˆ3†At ,†At3†At 2†AtKO€ЭT:z){O€Ю&Йђ†At3†A(Йњ†At3†At 2†AtKO€б&ё3†At2†AtK:€)&ё3†At5†AtK)€Йё†AtЙђ†At3†At!8‚SO€в&§&Йё†At3†A(0†At2†AtKO€г&ў&Йђ†AtЙё†At3†At3†A(0†At2†AtKO€д&Йё†At3†A(Й§†AtЙў†At,ˆЙњ†At,ˆ3†At ,†At3†At 2†AtKO€е&Йђ†AtЙё†At3†At3†A(Йў†AtЙ§†At,ˆЙњ†At,ˆ3†At ,†At3†At 2†AtKO€жT:)‚O€зT:")#O€к&љ&3†A(0†At2†AtKO€л&§3†At€2†AtKO€м&ё3†At2†AtK:‡)ˆ&ё3†At5†AtK)‡Йё†AtЙюІA“ "8‰SO€н&ќ&Йё†At3†A(0†At3†At 3†At3†At 2†AtKO€о&љЙљ†At&Йё†At3†At3†A(0†At3†At Йќ†At,„!,†At&Йё†At3†At3†A(0†At3†At€џџ Йќ†At,„!,†At3†At &Йё†At3†At3†A(0†AtЙќ†At3†At 3†At3†At 2†AtKO€п&§Й§†AtЙќ†At3†At Йќ†At,„!,†AtЙќ†At3†At€џџ Йќ†At,„!,†At3†At Йќ†AtЙќ†At3†At 3†At3†At 2†AtKO€рЙф†CєЙё†At3†A(Йќ†At2†AtKO€сT:ˆ)‰O€тЙр†CєЙљ†AtЙьІA“ ,ˆЙї†At,ˆ3†At ,†At3†At Й§†At,„!,†AtЙьІA“ ,ˆЙї†At,ˆ3†At ,†At3†At€џџ Й§†At,„!,†At3†At ЙьІA“ ,ˆЙї†At,ˆ3†At ,†AtЙ§†At3†At 3†At3†At 2†AtKO€уЙт†CєЙѕ†At2†AtKO€фT)№OGTTOœO€хM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t ‰ ˆ ‡‚  €{ z yvul k jW V UT S RM L KJA @ ?. - ,' & %$# " !            № юD†€ьWhiteNoiseFrac_Q32†€ъnb_subfr†€шsubfr_length†€цx†€.фA_Q16†€tтres_nrg_Q†€tрres_nrg†€t њrc_Q31†tљnrg†tCAf†D€Ox2†tћAtmp_QA†tђn†tјnum†tѓs†tќAtmp1†tўtmp2†tєlz†tCAb†D€OAf_QA†@Ё€Px_ptr†€.§tmp1†tѕrshifts†!tёk†tџx1†tC_last_row†@Ё€PC_first_row†@Ё€PїC0†!tіrshifts_extra†t                           ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!!tuƒєƒ ˆ ‹ Œ Ž  ‘ “ Љ ­ Ў И Й Н П Р Ш Щ Ы Э Ю Я а в @comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl.cil$in.cil$exФD.cil$syт .cil$dbЊ /3852 1284597036 100666 16737 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТAA ,e‘L@.drectveQ, .cil$fg}@@.cil$glЩ…@@.cil$inN @@.cil$exШ,O @@.cil$syt7@@.cil$db’‹?@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_biquad_alt.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_biquad_alt.obj-FdRelease\vc100.pdb-errorreport:prompt†1j22€ovХV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_biquad_alt.cы/ыšмM7ЮМ’сЊ­GУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШ‰ SKP_Silk_biquad_alt‚€F€v'€#€Dh Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO"O€ O €ўO3 f0" D ЄBEOœO.SS&‰ F-ъ-ш-ц-ф-т-рLOSO0O1O4&№Йф†C” 3†A(0ІA“ 3†At€џ? 2†AtKO5&яЙф†C” 3†A(0ІA“ 3†At 2†AtKO6&ђЙф†C” 3†A(0ІA“ 3†At€џ? 2†AtKO7&ёЙф†C” 3†A(0ІA“ 3†At 2†AtKO9&э3†At2†AtK:є)ѕ&э3†At5†AtK)єЙэ†AtЙъІA“ "8іSO;&юЙр†CЎ Йэ†At3†A(0Є!­ 2†AtKO<&ѓЙц†Cє3†A(0†AtЙт†C” 3†A(0ІA“ 3†At Йю†At,„!,†AtЙт†C” 3†A(0ІA“ 3†At€џџ Йю†At,„!,†At3†At 3†At 2†AtKO>Йц†Cє3†A(Йц†Cє3†A(0†AtЙѓ†At3†At Й№†At,„!,†AtЙѓ†At3†At€џџ Й№†At,„!,†At3†At 3†At 2†AtKO?Йц†Cє3†A(Йц†Cє3†A(0†AtЙѓ†At3†At Йя†At,„!,†AtЙѓ†At3†At€џџ Йя†At,„!,†At3†At 2†AtKO@Йц†Cє3†A(Йц†Cє3†A(0†AtЙт†C” 3†A(0ІA“ 3†At Йю†At,„!,†AtЙт†C” 3†A(0ІA“ 3†At€џџ Йю†At,„!,†At3†At 2†AtKOBЙц†Cє3†A(Йѓ†At3†At Йђ†At,„!,†AtЙѓ†At3†At€џџ Йђ†At,„!,†At3†At 3†At 2†AtKOCЙц†Cє3†A(Йц†Cє3†A(0†AtЙѓ†At3†At Йё†At,„!,†AtЙѓ†At3†At€џџ Йё†At,„!,†At3†At 2†AtKODЙц†Cє3†A(Йц†Cє3†A(0†AtЙт†C” 3†A(0ІA“ 3†At Йю†At,„!,†AtЙт†C” 3†A(0ІA“ 3†At€џџ Йю†At,„!,†At3†At 2†AtKOGЙш†C‘Йэ†At3†A(Йѓ†At3†At 3†At3†At€џ$3†At€џЙѓ†At3†At 3†At3†At€€џџ"3†At€€џџЙѓ†At3†At 3†AtCBCB,„!2„!KOHT:ѕ)іOIT)ьOGTTOœOJM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t і ѕ єь ъlen†€шout†€цS†€tфA_Q28†€тB_Q28†€рin†€. яA0_U_Q28†tюinval†tѓout32_Q14†tђA1_L_Q28†tёA1_U_Q28†tэk†t№A0_L_Q28†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Љ ­ Ў Ц @comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glЩ.cil$in.cil$exШ,.cil$syt.cil$db’ /3884 1284597036 100666 16261 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТe? ,e‘LA>.drectveQ, .cil$fg}@@.cil$glС}@@.cil$in> @@.cil$ex+? @@.cil$sylE5@@.cil$dbБ=@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_biquad.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_biquad.obj-FdRelease\vc100.pdb-errorreport:prompt†1j22€ovНV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_biquad.cѓџ‡Тје&(-%u ХУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШ| SKP_Silk_biquad‚€D€v'€#€гh Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO%O€ O €ўO3 f0" D ЄBEOœO1SS&| F-ъ-ш-ц-ф-т-рLOSO2O3O5&ёЙц†Cє3†A(0†At2†AtKO6&ђЙц†Cє3†A(0†At2†AtKO7&яЙф†CЎ 3†A(0Є!­ ,†At2†AtKO8&№Йф†CЎ 3†A(0Є!­ ,†At2†AtKO9&э3†At2†AtK:ѕ)і&э3†At5†AtK)ѕЙэ†AtЙъІA“ "8їSO;&юЙр†CЎ Йэ†At3†A(0Є!­ 2†AtKO<&ѓЙё†AtЙю†At,„!,†AtЙт†CЎ 3†A(0Є!­ ,„!,†At2†AtKO>&ёЙђ†AtЙю†At,„!,†AtЙт†CЎ 3†A(0Є!­ ,„!,†At2†AtKO?&ёЙѓ†At3†At Йя†At,„!,†AtЙѓ†At3†At€џџ Йя†At,„!,†At3†At 3†At †AtKOA&ђЙѓ†At3†At Й№†At,„!,†AtЙѓ†At3†At€џџ Й№†At,„!,†At3†At 3†At 2†AtKOB&ђЙђ†AtЙю†At,„!,†AtЙт†CЎ 3†A(0Є!­ ,„!,†At2†AtKOC&єЙѓ†At3†At 3†At3†At 3†At2†AtKODЙш†C‘Йэ†At3†A(Йє†At3†At€џ$3†At€џЙє†At3†At€€џџ"3†At€€џџЙє†AtCBCB,„!2„!KOET:і)їOFЙц†Cє3†A(Йё†At2†AtKOGЙц†Cє3†A(Йђ†At2†AtKOHT)ьOGTTOœOIM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t ї і ѕь ъlen†€шout†€цS†€tфA†€.тB†€.рin†€. єtmp32†tѓout32†tяA0_neg†tёS0†t№A1_neg†tђS1†tэk†tюin16†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ Љ ­ Ў Ф @comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glС.cil$in.cil$ex+.cil$syl.cil$db /3912 1284597036 100666 16375 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТз? ,e‘LГ>.drectveQ, .cil$fg}@@.cil$gl’@@.cil$in @@.cil$ex„* @@.cil$sy|˜5@@.cil$dbŸ>@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_autocorr.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_autocorr.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2ћ2€ovŽV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_autocorr.c\С.›PіpIПЏaЅаK&У SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ SKP_min_int†€€Љ€aШ/SKP_Silk_CLZ64†€;€€й/Ше <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШ<SKP_Silk_autocorr‚€B€v'€#€Вhцћ/цSKP_Silk_inner_prod_aligned†€? Лsize_tuћSKP_Silk_inner_prod16_aligned_64ˆ€8 ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO%O€ O €ўO3 f0" D ЄBEOœO/SS&<F-ш-ц-ф-т-рLOSO0O1O3&ю&Н†At€ ЙшІA“ U†AtЙцІA“ U†AtL2†AtKO6&я&ћНˆ€9ЙцІA“ UІA“ Йф†CЎ U†CЎ Йф†CЎ U†CЎ L2ˆKO9&я3ˆˆKO<&ь&/Н†At€<ЙяˆUˆL2†AtKO?&э3†At#Йь†At2†AtKO@Йт†CєЙэ†At2†AtKOBЙэ†At3†At!8№SOCЙр†Cє3†A(Йяˆ,†AtЙэ†At 2†AtKOF&ы3†At2†AtK:ђ)ѓ&ы3†At5†AtK)ђЙы†AtЙю†At"8єSOGЙр†CєЙы†At3†A(&цН†At€@ЙцІA“ Йы†AtUІA“ Йф†CЎ Йы†At3†AUІCН Йф†CЎ UІCН LЙэ†At 2†AtKOHT:ѓ)єOIT:ѕ)№SOJЙр†Cє3†A(ЙяˆЙэ†At ,†At2†AtKOM&ы3†At2†AtK:ї)ј&ы3†At5†AtK)їЙы†AtЙю†At"8љSONЙр†CєЙы†At3†A(&ћНˆ€9ЙцІA“ Йы†AtUІA“ Йф†CЎ Йы†At3†AU†CЎ Йф†CЎ U†CЎ LЙэ†At ,†At2†AtKOOT:ј)љOPT)ѕOQT)ъOGTTOœORM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t љ ј їѕє ѓ ђ№ъ шcorrelationCount†€цinputDataSize†€фinputData†€.тscale†€tрresults†€t ыi†tяcorr64ˆьlz†tюcorrCount†tэnRightShifts†t      ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ Ÿ   Љ Ў И Й Л М Н П Р Т @comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl’.cil$in.cil$ex„*.cil$sy|.cil$dbŸ /3942 1284597036 100666 15888 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТ№= ,e‘LЬ<.drectveQ, .cil$fg }@@.cil$glг‰@@.cil$in\ @@.cil$ex*] @@.cil$syр^4@@.cil$dbŽ><@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_array_maxabs.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_array_maxabs.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2ј2€ovЯV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_array_maxabs.cа]}iэw”А) XuB0=У SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШSKP_Silk_int16_array_maxabs„€6€v'€#€–h Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO%O€ O €ўO3 f0" D ЄBEOœO,SS&F-т-рLOSO-&х3†At2†AtK&ч3†At2†AtKO/&шЙтІA“ 3†At2†AtKO0&хЙр†CЎ Йш†At3†A(0Є!­ ,„!,†AtЙр†CЎ Йш†At3†A(0Є!­ ,„!,†At2†AtKO1&цЙтІA“ 3†At2†AtK:э)ю&ц3†At6†AtK)эЙц†At3†At#8яSO2&чЙр†CЎ Йц†At3†A(0Є!­ ,„!,†AtЙр†CЎ Йц†At3†A(0Є!­ ,„!,†At2†AtKO3Йч†AtЙх†At$8єSO4&хЙч†At2†AtKO5&шЙц†At2†AtKO6TO7)єT:ю)яO:&чЙр†CЎ Йш†At3†A(0Є!­ ,†At3†At$Йр†CЎ Йш†At3†A(0Є!­ ,†AtЙр†CЎ Йш†At3†A(0Є!­ ,†AtCB2†AtKO;Йч†At3†At€џ$8ѕSO<3†At€џA„!:фO=T:і)ѕSO>Йч†At,„!A„!:фO?T)іO@T)фOGTTOœOAM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t іѕєя ю эф тlen†€рvec†€. шind†tцi†tчlvl†tхmax†t      ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ Љ ­ Ў Ж @comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$glг.cil$in.cil$ex*.cil$syр.cil$dbŽ/3976 1284597036 100666 16588 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТЌ@ ,e‘Lˆ?.drectveQ, .cil$fg}@@.cil$glз“@@.cil$inj @@.cil$ex;,k @@.cil$sySІ6@@.cil$dbљ>@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_apply_sine_window.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_apply_sine_window.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2 2€ovгV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_apply_sine_window.c§Ÿ‘5[“'c†Uг­Ќ—lУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШ1SKP_Silk_apply_sine_window‚€4€v'€#€-h Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœOO€ O €ўO3 f0" D ЄBEOœO*SS&1F-ц-ф-т-рLOSO+O,O/3‚KO23‚KO4ЙфІA“ 3†At8ёSO5&ы3†At€HЙцІA“ 3†At2†AtKO6T:ѓ)ёSO7&ы3†At€?$ЙцІA“ 3†At2†AtKO8T)ѓO;&ьЙы†AtЙы†At3†At 2†AtKO>3‚KOAЙфІA“ 3†At"8іSOC&э3†At2†AtKOE&юЙы†At2†AtKOFT:ї)іSOH&э3†At€2†AtKOJ&ю3†At€Йь†At3†At 2†AtKOKT)їOO&щ3†At2†AtK:ј)љ&щ3†At†AtK)јЙщ†AtЙцІA“ "8њSOP&ъЙт†CЎ Йщ†At3†A(,†Cє0†At2†AtKOQЙр†C‘Йщ†At3†A(Йэ†AtЙю†At3†At 3†At Йъ†At,„!,†AtЙэ†AtЙю†At3†At 3†At€џџ Йъ†At,„!,†At3†At ,„!2„!KORЙр†C‘Йщ†At3†At3†A(Йю†At3†At Йъ†At3†At Йю†At3†At€џџ Йъ†At3†At 3†At ,„!2„!KOS&эЙь†AtЙю†At3†At Йю†At3†At Йэ†At3†At2†AtKOT&эЙэ†At3†At€"Йэ†At3†At€CB2†AtKOV&ъЙт†CЎ Йщ†At3†At3†A(,†Cє0†At2†AtKOWЙр†C‘Йщ†At3†At3†A(Йэ†AtЙю†At3†At 3†At Йъ†At,„!,†AtЙэ†AtЙю†At3†At 3†At€џџ Йъ†At,„!,†At3†At ,„!2„!KOXЙр†C‘Йщ†At3†At3†A(Йэ†At3†At Йъ†At3†At Йэ†At3†At€џџ Йъ†At3†At 3†At ,„!2„!KOY&юЙь†AtЙэ†At3†At Йэ†At3†At Йю†At2†AtKOZ&юЙю†At3†At€"Йю†At3†At€CB2†AtKO[T:љ)њO\T)шOGTTOœO]M9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t њ љ јїіѓёш цlength†€фwin_type†€тpx†€.рpx_win†€ ыf_Q16†tэS0_Q16†tьc_Q20†tюS1_Q16†tъpx32†tщk†t       ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ Љ Ў Д @comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$glз.cil$in.cil$ex;,.cil$syS.cil$db/4015 1284597036 100666 16555 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТ‹@ ,e‘Lg?.drectveQ, .cil$fg}@@.cil$gl?@@.cil$inЮ @@.cil$exР+х @@.cil$sy)Ѕ6@@.cil$db™Ю>@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_ana_filt_bank_1.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_ana_filt_bank_1.obj-FdRelease\vc100.pdb-errorreport:prompt†1j22€ov;V €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_ana_filt_bank_1.c2ТЁdˆqazF ђДж­єУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШѕ SKP_Silk_ana_filt_bank_1‚€1€v'€#€ ho рс Лsize_tuo SKP_Silk_allpass_int‚€, ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€р$A_fb1_20„€€2с$A_fb1_21„€€2 р€с€P[€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO$O€ O €ўO3 f0" D ЄBEOœO3SS&ѕ F-ь-ъ-ш-ц-ф-тLOSO4&№ЙьІA“ 3†At 2†AtKO5O8&я3†At2†AtK:ђ)ѓ&я3†At5†AtK)ђЙя†AtЙ№†At"8єSO9Йъ†CєЙя†AtЙьІA“ 3†A(Йт†CЎ 3†AtЙя†At3†A(0Є!­ ,†At3†At 2†AtKO:Йъ†CєЙя†AtЙ№†At3†A(Йт†CЎ 3†AtЙя†At3†At3†A(0Є!­ ,†At3†At 2†AtKO;T:ѓ)єO>&o Н‚€/Й№†AtUІA“ Йъ†CєU†Cє&р3†A(0„!U†AtЙф†Cє3†AU†CєЙъ†CєЙ№†At3†AU†C” LKO?&o Н‚€/Й№†AtUІA“ Йъ†CєЙ№†At3†AU†Cє&с3†A(0„!U†AtЙф†Cє3†AU†CєЙъ†CєЙьІA“ 3†AU†C” LKOB&я3†At2†AtK:ї)ј&я3†At5†AtK)їЙя†AtЙ№†At"8љSOC&ёЙъ†CєЙя†At3†A(0†AtЙъ†CєЙя†AtЙ№†At3†A(0†At2†AtKODЙц†C‘Йя†At3†A(Йё†At3†At 3†At3†At 3†At€џ$3†At€џЙё†At3†At 3†At3†At 3†At€€џџ"3†At€€џџЙё†At3†At 3†At3†At CBCB,„!2„!KOF&ёЙъ†CєЙя†At3†A(0†AtЙъ†CєЙя†AtЙ№†At3†A(0†At2†AtKOGЙш†C‘Йя†At3†A(Йё†At3†At 3†At3†At 3†At€џ$3†At€џЙё†At3†At 3†At3†At 3†At€€џџ"3†At€€џџЙё†At3†At 3†At3†At CBCB,„!2„!KOHT:ј)љOIT)юOGTTOœOJM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t љ ј їє ѓ ђю ьN†€ъscratch†€tшoutH†€цoutL†€фS†€tтin†€. №N2†tяk†tёout_tmp†t    ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tu‘єƒ ˆ ‹ Œ Ž  ‘ “ ” Љ Ќ ­ Ў Џ Б В @comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl?.cil$in.cil$exР+.cil$sy).cil$db™ /4052 1284597036 100666 15647 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТџ< ,e‘Lл;.drectveQ, .cil$fg }@@.cil$glЩ‡@@.cil$inP @@.cil$ex)Q @@.cil$syћT3@@.cil$dbŒO;@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_allpass_int.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_allpass_int.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2ђ2€ovХV €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_allpass_int.c#Ў@wG%д)|ƒHНУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ <SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШo SKP_Silk_allpass_int‚€,€v'€#Zh Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€ЎSA_Method€)†@ Мwchar_t!Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO.O€ O €ўO3 f0" D ЄBEOœO9SS&o F-ш-ц-ф-т-рLOSO:O;O=&эЙт†Cє3†A(0†At2†AtKO>&юЙшІA“ 3†At2†AtK:я)№&ю3†At6†AtK)яЙю†At3†At#8ёSO?&ыЙр†C” 0ІA“ Йэ†At2†AtKO@&ьЙы†At3†At Йф†AtЙы†At3†At€џ Йф†At3†At 2†AtKOA&ц3†A5†CєЙэ†AtЙь†At2†AtKOB&э&р3†A5†C” 0ІA“ Йь†At2†AtKOCT:№)ёODЙт†Cє3†A(Йэ†At2†AtKOET)ъOGTTOœOFM9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t ё № яъ шlen†€цout†€tфA†tтS†€tрin†€ ыY2†tэS0†tьX2†tюk†t   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ ” Љ Ќ @comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg .cil$glЩ.cil$in.cil$ex).cil$syћ.cil$dbŒ /4085 1284597036 100666 20739 ` џџL,e‘L8ўГ ЅйЋMЌ›жЖ"&SТуP ,e‘LПO.drectveQ, .cil$fg}@@.cil$gl }@@.cil$in‡ @@.cil$exш7ˆ @@.cil$syЈ pC@@.cil$dbЇO@@ -compiler:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c2.dll" -typedil-fJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\SKP_Silk_A2NLSF.c-Gs4096-dos-Zi-W3-Og-Ob2-Gy-EHs-MT-GS-FoJ:\bluejeans\denim\trunk\codecs\audio\silk\silkSrc\Release\SKP_Silk_A2NLSF.obj-FdRelease\vc100.pdb-errorreport:prompt†1j2T2€ov V €џџ€€џџ*€џџ+€џџ,€џџЖj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_typedef.hkЈяЉЌŸ"+ќqЅ’СмсЗc:\program files (x86)\microsoft visual studio 10.0\vc\include\float.hU#[Т)oњ mњюQл'fКc:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.hЙОџ„w„љ”m–˜ЊдЉЙc:\program files (x86)\microsoft visual studio 10.0\vc\include\sal.h[иC-д2ўрм…ьЊ6оc:\program files (x86)\microsoft visual studio 10.0\vc\include\vadefs.hЬXўrToрџЊtЩИc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.hЊWb!Ј?~NЯзѕьRc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtwrn.hГ‘МКGƒQйЛyјs‡ІkŸc:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdbg.h(yFiдz<G;1=1Мc:\program files (x86)\microsoft visual studio 10.0\vc\include\string.hkhHPTЊŒ3їГГјїсc:\program files (x86)\microsoft visual studio 10.0\vc\include\limits.h~е*Јн­Wыћ%iАлрc:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h>Œ^ЁA^ŠћsM,uОЕ j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_resample_rom.h’Џ‹ц+7 @#nŽи,ˆ{Р j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_macros.hprХО)ж$olŽг>u,Еj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_sigproc_fix.hьє9v[7Œ{њnс%к™,j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_inlines.hАз"Ќшš>šљ%?dlœj:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\skp_silk_a2nlsf.cL?pЅ“Ђ2ѕЙЕџtЦУ SKP_Silk_CLZ16†€ €† |€‡Ше SKP_Silk_CLZ32†€€Ю€,+ШУ  SKP_min_32†€€Ч€ПШ<SKP_Silk_CLZ_FRAC‚€€ф€$9Ше ЉSKP_Silk_SIN_APPROX_Q24†€€Ю €‚€ZШфSKP_Silk_A2NLSF_trans_poly‚€€v'€#SШєSKP_Silk_A2NLSF_eval_poly†€€д(€БZШSKP_Silk_A2NLSF_init‚€€Q*€Q€­ШфkSKP_Silk_A2NLSF‚€'€6-€ќ€5hк [ є Лsize_tu ЃSA_AttrTarget€)АSA_Parameter€)†3strnlen†€к SKP_Silk_bwexpander_32‚€"ЎSA_Method€)†@ Мwchar_t![SKP_Silk_LSFCosTab_FIX_Q12†€€*Њwcsnlen†€ [€@ OЕOO3 f0" D ЄBEOЖOЗOИOЙOКOЙO€ OИO8OOOИO?OЗOOROOИOROOЗOOЖO#OŸOOИOŸOOЖO\OЕO&OМOOИOМOO€ O €ўO3 f0" D ЄBEOМOtSS&8F-6-4LOSOuЙ4†C 3†At3†At&3Н†Bu€Й6†BuU†BuЙ4†C U†C LCBA†Bu:9OvT)9OGTTO€ O €ўO3 f0" D ЄBEOМO€!SS&ЏF-­-ЋLOSO€"ЙЋ†C† 3†Cƒ3†At&ЊН†Bu€ Й­†BuU†BuЙЋ†C† U†C† LCBA†Bu:АO€#T)АOGTTOЕO'OрOOИOрOOсOOИOсOOрOOЕO(OЕ OOЖOЕ O+OЕO)OР OO€ O €ўO3 f0" D ЄBEOР OLSS&У F-С LOSOM&Х 3†At2†AtKONЙС „!,†At3†At8Ц SOO3†AtA†At:Ф OPTOR)Ц ЙС „!,†At3†At€џ 8Ч SOSЙС „!,†At3†At€№ 8Ш SOT&С 3†At „!KOUT:Щ )Ш SOV&Х 3†At†AtKOW&С 3†At„!KOXT)Щ OYT:Ъ )Ч SOZЙС „!,†At3†At€№џ 8Ы SO[&Х 3†At†AtKO\&С 3†At„!KO]T:Ь )Ы SO^&Х 3†At †AtKO_T)Ь O`T)Ъ ObЙС „!,†At3†At 8Э SOcЙС „!,†At3†At 8Ю OdЙХ †At3†AtA†At:Ф Oe:Я )Ю OfЙХ †At3†AtA†At:Ф )Я OgT:а )Э SOhЙС „!,†At3†At 8б OiЙХ †At3†AtA†At:Ф Oj:в )б OkЙХ †At3†AtA†At:Ф )в OlT)а OmT)Ф OGTTO€ O €ўO3 f0" D ЄBEOР OpSS&е F-г LOSOrЙг †At3†Bu€џџ 8з SOs&У Н†At€ Йг †At3†At ,„!U„!LA†At:ж OtT:й )з SOu&У Н†At€ Йг †At,„!U„!L3†AtA†At:ж OvT)й OwT)ж OGTTOЕO+O€ O €ўO3 f0" D ЄBEOЕO€зSS&F-ў-ќLOSO€иЙќ†AtЙў†At"Йќ†AtЙў†AtCBA†At:O€йT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€лSS&F--LOSO€мЙ„!,†AtЙ„!,†At"Й„!,†AtЙ„!,†AtCBA„!:O€нT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€пSS& F- -LOSO€рЙ†AtЙ †At"Й†AtЙ †AtCBA†At: O€сT) OGTTO€ O €ўO3 f0" D ЄBEOЕO€уSS&F--LOSO€фЙˆЙˆ"ЙˆЙˆCBAˆ:O€хT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€щSS&F--LOSO€ъЙ†AtЙ†At$Й†AtЙ†AtCBA†At:O€ыT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€эSS&F--LOSO€юЙ„!,†AtЙ„!,†At$Й„!,†AtЙ„!,†AtCBA„!:O€яT)OGTTO€ O €ўO3 f0" D ЄBEOЕO€ёSS&$F-"- LOSO€ђЙ †AtЙ"†At$Й †AtЙ"†AtCBA†At:%O€ѓT)%OGTTO€ O €ўO3 f0" D ЄBEOЕO€ѕSS&*F-(-&LOSO€іЙ&ˆЙ(ˆ$Й&ˆЙ(ˆCBAˆ:+O€їT)+OGTTO,OO€ O €ўO3 f0" D ЄBEO,O*SS&/F--LOSO+O-&1Й-ˆ3†At ,†At2†AtKO.Й1†At3†At83SO03†At &е Н†At€Й-ˆ,†AtU†AtLA†At:0O1T:5)3SO3&е Н†At€Й1†AtU†AtLA†At:0O4T)5O5T)0OGTTO€ O €ўO3 f0" D ЄBEO,O;SS&<F-:-8-6LOSO&>&е Н†At€Й6†AtU†AtL2†AtKO?Й8†CєЙ>†At2†AtKO@Й>†At3†At"8?SOAЙ:†CєЙ6†At3†AtЙ>†At 3†At 2†AtKOBT:@)?SOCЙ:†CєЙ6†AtЙ>†At3†At 3†At 2†AtKODT)@OET)=OGTTO€ O €ўO3 f0" D ЄBEO,OKSS&CF-ALOSOLONЙA†At3†At!8HSOO3†AtA†At:DOPTOR)H&<Н‚€&GU†Cє&FU†CєЙA†AtU†AtLKOTЙF†At3†At 8ISOU&E3†At€€2†AtKOVT:J)ISOW&E3†At€†Д2†AtKOXT)JO[&EЙF†At3†At †AtKO^&EЙE†AtЙE†At3†At 3†At€еЙG†At,„!,†At,„!,†AtЙE†At3†At€џџ 3†At€еЙG†At,„!,†At,„!,†At3†At 2†AtKO`ЙE†AtA†At:DOaT)DOGTTO€ O €ўO3 f0" D ЄBEO,OdSS&YF-WLOSOfOiЙW„!,†At3†At 3†At8\3†AtA†At:ZOk)\&[ЙW„!2†AtKOm&[Й[†At3†At †AtKOo&е Н†At€Й[†AtU†AtL3†AtA†At:ZOpT)ZOGTTO€ O €ўO3 f0" D ЄBEO,OsSS&_F-]LOSOvЙ]†At3†At 3†At8a3†AtA†At:`Oy)a&]Й]†At3†At †AtKO{&е Н†At€Й]†AtU†AtL3†AtA†At:`O|T)`OGTTO€ O €ўO3 f0" D ЄBEO,O€„SS&hF-f-d-bLOSO€…O€†O€ˆ3‚KO€‰3‚KO€Œ&j&е Н†At€ЙbІA“ 3†At$ЙbІA“ ЙbІA“ CBU†AtL3†At2†AtKO€&nЙbІA“ Йj†At 2†AtKO€Ž&k&е Н†At€ЙdІA“ 3†At$ЙdІA“ ЙdІA“ CBU†AtL3†At2†AtKO€&oЙdІA“ Йk†At 2†AtKO€’&m3†At€џџџЙo†At3†At 2†AtKO€•&pЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€˜&nЙo†At,ˆЙp†At,ˆ3†At ,†At3†At †AtKO€›&pЙp†AtЙn†At3†At Йm†At,„!,†AtЙn†At3†At€џџ Йm†At,„!,†At3†At 2†AtKO€ž&l3†AtЙj†AtЙk†AtЙfІA“ 2†AtKO€ŸЙl†At3†At!8~SO€ 3†At€€Йl†At 3†At€џџџЙl†At $Йp†At3†At€€Йl†At $3†At€€Йl†At Йp†At3†At€џџџЙl†At "3†At€џџџЙl†At Йp†AtCBCBЙp†At3†At€џџџЙl†At $3†At€џџџЙl†At Йp†At3†At€€Йl†At "3†At€€Йl†At Йp†AtCBCBCBЙl†At A†At:iO€ЁT:„)~SO€ЂЙl†At3†At "8…SO€ЃЙp†AtЙl†At A†At:iO€ЄT:†)…SO€І3†AtA†At:iO€ЇT)†O€ЈT)„O€ЉT)iOGTTO€ O €ўO3 f0" D ЄBEO,O€АSS&‹F-‰-‡LOSO€БO€ВO€Д3‚KO€Е3‚KO€И&&е Н†At€Й‡ІA“ 3†At$Й‡ІA“ Й‡ІA“ CBU†AtL3†At2†AtKO€Й&Й‡ІA“ Й†At 2†AtKO€М&3†At€џџџЙ†At3†At 2†AtKO€П&’Й†At3†At 2†AtKO€Т&‘Й†At3†At Й†At,„!,†AtЙ†At3†At€џџ Й†At,„!,†At3†At 3†At 2†AtKO€Х&’Й’†AtЙ‘†At3†At Й†At,„!,†AtЙ‘†At3†At€џџ Й†At,„!,†At3†At Й‘†AtЙ†At3†At 3†At3†At 2†AtKO€Ш&Ž3†At=Й†AtЙ‰ІA“ 2†AtKO€ЩЙŽ†At3†At!8žSO€Ъ3†At€€ЙކAt 3†At€џџџЙކAt $Й’†At3†At€€ЙކAt $3†At€€ЙކAt Й’†At3†At€џџџЙކAt "3†At€џџџЙކAt Й’†AtCBCBЙ’†At3†At€џџџЙކAt $3†At€џџџЙކAt Й’†At3†At€€ЙކAt "3†At€€ЙކAt Й’†AtCBCBCBЙŽ†At A†At:ŒO€ЫT:Є)žSO€ЬЙŽ†At3†At "8ЅSO€ЭЙ’†AtЙŽ†At A†At:ŒO€ЮT:І)ЅSO€а3†AtA†At:ŒO€бT)ІO€вT)ЄO€гT)ŒOGTTO€ O €ўO3 f0" D ЄBEO,O€рSS&ЉF-ЇLOSO€сO€ф&Ї3†At€џџ†AtKO€чЙЇ†At3†At€€!8ЌSO€шЙЇ†At3†At€@"8­SO€ъ&Ї3†At€@ЙЇ†At2†AtKO€ыT:Ў)­SO€э&Ї3†At€@†AtKO€юT)ЎO€яЙЇ†At3†At€L"8ЏSO€ё3†At€ЙЇ†AtЙЇ†At3†At 3†At€CьџџЙЇ†AtЙЇ†At3†At€џџ 3†At€Cьџџ3†At A†At:ЊO€ђTO€ѓ)Џ&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€є&Ћ3†At€љ*ЙЇ†At3†At 3†At€kьџџЙЇ†At3†At€џџ 3†At€kьџџ3†At 2†AtKO€ѕ&Ћ3†At€ЬфћЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€і&Ћ3†At€*чџ?ЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€їT:Ф)ЌSO€јЙЇ†At3†At€Р"8ХSO€њ&Ї3†At€РЙЇ†At2†AtKO€ћT:Ц)ХSO€§&Ї3†At€Р†AtKO€ўT)ЦO€џЙЇ†At3†At€L"8ЧSO€3†At€џЙЇ†AtЙЇ†At3†At 3†At€НЙЇ†AtЙЇ†At3†At€џџ 3†At€Н3†At A†At:ЊO€TO€)Ч&ЇЙЇ†At3†At 3†At ЙЇ†At,„!,†AtЙЇ†At3†At 3†At€џџ ЙЇ†At,„!,†At3†At 2†AtKO€&Ћ3†At€еяџЙЇ†At3†At 3†At€•ЙЇ†At3†At€џџ 3†At€•3†At 2†AtKO€&Ћ3†At€4яЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€&Ћ3†At€РЙЇ†At3†At ЙЋ†At,„!,†AtЙЇ†At3†At€џџ ЙЋ†At,„!,†At3†At ЙЇ†AtЙЋ†At3†At 3†At3†At 2†AtKO€T)ФO€ЙЋ†At3†At 3†At3†At A†At:ЊO€ T)ЊOGTTO€ O €ўO3 f0" D ЄBEO,O€SS&оF-мLOSO€&ЉН†At€Йм†At3†At€@U†AtLA†At:пO€T)пOGTTOЕO€OœO"O€ O €ўO3 f0" D ЄBEOœO2SS&фF-т-рLOSO3O5&ц3†At2†AtK:ш)щ&ц3†At5†AtK)шЙц†AtЙтІA“ !8ъSO6&чЙтІA“ 2†AtK:ы)ь&ч3†At6†AtK)ыЙч†AtЙц†At$8эSO7Йр†CєЙч†At3†At3†A(Йр†CєЙч†At3†A(0†At†AtKO8T:ь)эO9Йр†CєЙц†At3†At3†A(Йр†CєЙц†At3†A(0†At3†At †AtKO:T:щ)ъO;T)хOGTTO€ O €ўO3 f0" D ЄBEOœODSS&єF-ђ-№-юLOSOEOFOH&јЙю†CєЙђІA“ 3†A(0†At2†AtKOI&їЙ№ІA“ 3†At 2†AtKOJ&іЙђІA“ 3†At2†AtK:љ)њ&і3†At6†AtK)љЙі†At3†At#8ћSOK&јЙю†CєЙі†At3†A(0†AtЙј†At3†At Йї†At,„!,†AtЙј†At3†At€џџ Йї†At,„!,†At3†At Йј†AtЙї†At3†At 3†At3†At 2†AtKOLT:њ)ћOMЙј†AtA†At:ѕONT)ѕOGTTO€ O €ўO3 f0" D ЄBEOœOVSS&F----LOSOWOZЙ†CєЙІA“ 3†A(3†At€2†AtKO[Й†CєЙІA“ 3†A(3†At€2†AtKO\& 3†At2†AtK: ) & 3†At5†AtK) Й †AtЙІA“ "8 SOdЙ†CєЙ †At3†A(Й†C” ЙІA“ Й †At3†At3†A(0ІA“ Й†C” ЙІA“ Й †At3†A(0ІA“ 3†At 2†AtKOeЙ†CєЙ †At3†A(Й†C” ЙІA“ Й †At3†At3†A(0ІA“ Й†C” ЙІA“ Й †At3†A(0ІA“ 3†At 2†AtKOgT: ) Ol& ЙІA“ 2†AtK:)& 3†At6†AtK)Й †At3†At$8SOmЙ†CєЙ †At3†At3†A(Й†CєЙ †At3†A(0†At†AtKOnЙ†CєЙ †At3†At3†A(Й†CєЙ †At3†A(0†At†AtKOoT:)Or&фН‚€ЙІA“ UІA“ Й†CєU†CєLKOs&фН‚€ЙІA“ UІA“ Й†CєU†CєLKOtT) OGTTO€ O €ўO3 f0" D ЄBEOœO}SS&kF---LOSO~OO€€O€O€‚O€ƒO€„O€…O€ˆ&(3†A(&&2†CєKO€‰&(3†A(&'2†CєKO€‹&ЙІA“ 3†At 2†AtKO€&Н‚€Й†AtUІA“ &'U†Cє&&U†CєЙ†CєU†C” LKO€&)&&2†CєKO€’&&[3†A(0ІA“ 2†AtKO€“&!&єН†At€Й†AtUІA“ Й†AtUІA“ Й)†CєU†CєL2†AtKO€•Й!†At3†At"8*SO€—Й†Cє3†A(3†At2†AtKO€˜&)&'2†CєKO€™&!&єН†At€Й†AtUІA“ Й†AtUІA“ Й)†CєU†CєL2†AtKO€š&3†At2†AtKO€›T:+)*SO€œ&3†At2†AtKO€T)+O€ž&3†At2†AtKO€Ÿ&3†At2†AtKO€ )-3†At8.SO€Ї&&[Й†At3†A(0ІA“ 2†AtKO€Љ&"&єН†At€Й†AtUІA“ Й†AtUІA“ Й)†CєU†CєL2†AtKO€ЌЙ!†At3†At!81Й"†At3†At#90)1Й!†At3†At#8/Й"†At3†At!8/)0SO€Б&3†At€џџџ2†AtKO€Г&3†At2†AtK:2)3&3†At5†AtK)2Й†At3†At"84SO€Е& Й†AtЙ†At3†At Й†AtЙ†At3†At 2†AtKO€Ж&#&єН†At€Й†AtUІA“ Й †AtUІA“ Й)†CєU†CєL2†AtKO€ЙЙ!†At3†At!87Й#†At3†At#96)7Й!†At3†At#85Й#†At3†At!85)6SO€Л&Й †At2†AtKO€М&"Й#†At2†AtKO€НT:8)5SO€П&Й †At2†AtKO€Р&!Й#†At2†AtKO€Ф&Й†At3†At€€Й†At 2†AtKO€ЦT)8O€ЧT:3)4O€ЪЙ!†At3†At$Й!†AtЙ!†AtCB3†At€"89SO€Ь&%Й!†AtЙ"†At2†AtKO€Э&$Й!†At3†At Й%†At3†At 2†AtKO€ЮЙ%†At3†At 8:SO€Я&Й$†AtЙ%†At†AtKO€аTO€б):T:<)9SO€г&Й!†AtЙ!†AtЙ"†At3†At †AtKO€дT)<O€иЙ†CєЙ†At3†A(& Н†At€ 3†At€џU†AtЙ†At3†At Й†AtU†AtL2†AtKO€л3‚KO€м3‚KO€о&3†At5†AtKO€пЙ†AtЙІA“ #8BSO€с:.O€тTO€ф)B&)&(Й†At3†At 3†A(0†Cє2†CєKO€ь&&[Й†At3†At3†A(0ІA“ 2†AtKO€ю&!3†AtЙ†At3†At 3†At 2†AtKO€яT:C)/SO€ё&3†At5†AtKO€ђ&Й†At2†AtKO€ѓ&!Й"†At2†AtKO€јЙ†At3†At€€$8DSO€њ&3†At5†AtKO€ћЙ†At3†At2$8ESO€§Й†Cє3†A(3†At€€ЙІA“ 3†At2†AtKO€ў&3†At2†AtK:G)H&3†At5†AtK)GЙ†AtЙІA“ "8ISO€џЙ†CєЙ†At3†A(Й†At3†At,„!,†AtЙ†Cє3†A(0†At,„!,†At2†AtKO€T:H)IO€:O€TO€)E&к Н‚€#3†At€3†AtBЙ†At,„!,†AtU†AtЙІA“ UІA“ Й†CєU†CєLKO€&Н‚€Й†AtUІA“ &'U†Cє&&U†CєЙ†CєU†C” LKO€&)&&2†CєKO€ &&[3†A(0ІA“ 2†AtKO€ &!&єН†At€Й†AtUІA“ Й†AtUІA“ Й)†CєU†CєL2†AtKO€ Й!†At3†At"8RSO€ Й†Cє3†A(3†At2†AtKO€&)&'2†CєKO€&!&єН†At€Й†AtUІA“ Й†AtUІA“ Й)†CєU†CєL2†AtKO€&3†At2†AtKO€T:S)RSO€&3†At2†AtKO€T)SO€&3†At2†AtKO€TO€)DT)CO€T:-).O€T)OGTTOœO€M9 6_MaxCount†u4_Str†€ А ­_MaxCount†uЋ_Src†€ в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Ф  С in16„ Х out32†t         й з ж  г in32†t    ўb†tќa†t  b„a„    b†ta†t  bˆaˆ  b†ta†t  b„a„ % "b†t a†t + (bˆ&aˆ 530 -inˆ 1in_upper†t  @?= :frac_Q7†€t8lz†€t6in†t >leadingZeros†t  JIHD Ax†t Ey†tFlz†!tGfrac_Q7†!t   \Z Wa„ [a32†ta` ]a†t †…„~i fQres†€db32†€ba32†€ mb32_inv†tna32_nrm†tob32_nrm†tja_headrm†tpresult†tllshift†tkb_headrm†t    ІЅЄžŒ ‰Qres†€‡b32†€ b32_inv†tb32_nrm†t‘err_Q32†t’result†tŽlshift†tb_headrm†t    ЧЦХФЏЎ­ЌЊ Їx†t Ћy_Q30†t        п мx†t э ь ыъ щ шх тdd†€рp†€t чn†tцk†t  ћ њ љѕ ђdd†€№x†€юp†€t јy32†tіn†tїx_Q16†t          dd†€Q†€tP†€ta_Q16†€  k†t  SRI H GEDCB<:987654 3 210/. - +* d†€a_Q16†€tNLSF†€t )p†€t%den†t xmid†t$nom†t'Q†$Ё€$&P†$Ё€$i†t"yhi†txlo†tdd†tk†t(PQ†€%#ymid†t!ylo†txhi†tffrac†troot_ix†tm†t                   ^4 м‘{єGЄc=›S]j:\bluejeans\denim\trunk\codecs\audio\silk\silksrc\release\vc100.pdbѓђё!tuєƒ ˆ ‹ Œ Ž  ‘ “ ” – — ™ š œ  Ÿ   Ђ Ѓ Є Ѕ Ї Љ Њ @comp.idovЊџџ@feat.00џџ.drectveQ.cil$fg.cil$gl .cil$in.cil$exш7.cil$syЈ .cil$dbЇ h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_decode_parameters.c0000644000175000017500000002650711513063445023372 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main.h" /* Decode parameters from payload */ void SKP_Silk_decode_parameters( SKP_Silk_decoder_state *psDec, /* I/O State */ SKP_Silk_decoder_control *psDecCtrl, /* I/O Decoder control */ SKP_int q[], /* O Excitation signal */ const SKP_int fullDecoding /* I Flag to tell if only arithmetic decoding */ ) { SKP_int i, k, Ix, fs_kHz_dec, nBytesUsed; SKP_int Ixs[ NB_SUBFR ]; SKP_int GainsIndices[ NB_SUBFR ]; SKP_int NLSFIndices[ NLSF_MSVQ_MAX_CB_STAGES ]; SKP_int pNLSF_Q15[ MAX_LPC_ORDER ], pNLSF0_Q15[ MAX_LPC_ORDER ]; const SKP_int16 *cbk_ptr_Q14; const SKP_Silk_NLSF_CB_struct *psNLSF_CB = NULL; SKP_Silk_range_coder_state *psRC = &psDec->sRC; /************************/ /* Decode sampling rate */ /************************/ /* only done for first frame of packet */ if( psDec->nFramesDecoded == 0 ) { SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_SamplingRates_CDF, SKP_Silk_SamplingRates_offset ); /* check that sampling rate is supported */ if( Ix < 0 || Ix > 3 ) { psRC->error = RANGE_CODER_ILLEGAL_SAMPLING_RATE; return; } fs_kHz_dec = SKP_Silk_SamplingRates_table[ Ix ]; SKP_Silk_decoder_set_fs( psDec, fs_kHz_dec ); } /*******************************************/ /* Decode signal type and quantizer offset */ /*******************************************/ if( psDec->nFramesDecoded == 0 ) { /* first frame in packet: independent coding */ SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_type_offset_CDF, SKP_Silk_type_offset_CDF_offset ); } else { /* condidtional coding */ SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_type_offset_joint_CDF[ psDec->typeOffsetPrev ], SKP_Silk_type_offset_CDF_offset ); } psDecCtrl->sigtype = SKP_RSHIFT( Ix, 1 ); psDecCtrl->QuantOffsetType = Ix & 1; psDec->typeOffsetPrev = Ix; /****************/ /* Decode gains */ /****************/ /* first subframe */ if( psDec->nFramesDecoded == 0 ) { /* first frame in packet: independent coding */ SKP_Silk_range_decoder( &GainsIndices[ 0 ], psRC, SKP_Silk_gain_CDF[ psDecCtrl->sigtype ], SKP_Silk_gain_CDF_offset ); } else { /* condidtional coding */ SKP_Silk_range_decoder( &GainsIndices[ 0 ], psRC, SKP_Silk_delta_gain_CDF, SKP_Silk_delta_gain_CDF_offset ); } /* remaining subframes */ for( i = 1; i < NB_SUBFR; i++ ) { SKP_Silk_range_decoder( &GainsIndices[ i ], psRC, SKP_Silk_delta_gain_CDF, SKP_Silk_delta_gain_CDF_offset ); } /* Dequant Gains */ SKP_Silk_gains_dequant( psDecCtrl->Gains_Q16, GainsIndices, &psDec->LastGainIndex, psDec->nFramesDecoded ); /****************/ /* Decode NLSFs */ /****************/ /* Set pointer to NLSF VQ CB for the current signal type */ psNLSF_CB = psDec->psNLSF_CB[ psDecCtrl->sigtype ]; /* Arithmetically decode NLSF path */ SKP_Silk_range_decoder_multi( NLSFIndices, psRC, psNLSF_CB->StartPtr, psNLSF_CB->MiddleIx, psNLSF_CB->nStages ); /* From the NLSF path, decode an NLSF vector */ SKP_Silk_NLSF_MSVQ_decode( pNLSF_Q15, psNLSF_CB, NLSFIndices, psDec->LPC_order ); /************************************/ /* Decode NLSF interpolation factor */ /************************************/ SKP_Silk_range_decoder( &psDecCtrl->NLSFInterpCoef_Q2, psRC, SKP_Silk_NLSF_interpolation_factor_CDF, SKP_Silk_NLSF_interpolation_factor_offset ); /* If just reset, e.g., because internal Fs changed, do not allow interpolation */ /* improves the case of packet loss in the first frame after a switch */ if( psDec->first_frame_after_reset == 1 ) { psDecCtrl->NLSFInterpCoef_Q2 = 4; } if( fullDecoding ) { /* Convert NLSF parameters to AR prediction filter coefficients */ SKP_Silk_NLSF2A_stable( psDecCtrl->PredCoef_Q12[ 1 ], pNLSF_Q15, psDec->LPC_order ); if( psDecCtrl->NLSFInterpCoef_Q2 < 4 ) { /* Calculation of the interpolated NLSF0 vector from the interpolation factor, */ /* the previous NLSF1, and the current NLSF1 */ for( i = 0; i < psDec->LPC_order; i++ ) { pNLSF0_Q15[ i ] = psDec->prevNLSF_Q15[ i ] + SKP_RSHIFT( SKP_MUL( psDecCtrl->NLSFInterpCoef_Q2, ( pNLSF_Q15[ i ] - psDec->prevNLSF_Q15[ i ] ) ), 2 ); } /* Convert NLSF parameters to AR prediction filter coefficients */ SKP_Silk_NLSF2A_stable( psDecCtrl->PredCoef_Q12[ 0 ], pNLSF0_Q15, psDec->LPC_order ); } else { /* Copy LPC coefficients for first half from second half */ SKP_memcpy( psDecCtrl->PredCoef_Q12[ 0 ], psDecCtrl->PredCoef_Q12[ 1 ], psDec->LPC_order * sizeof( SKP_int16 ) ); } } SKP_memcpy( psDec->prevNLSF_Q15, pNLSF_Q15, psDec->LPC_order * sizeof( SKP_int ) ); /* After a packet loss do BWE of LPC coefs */ if( psDec->lossCnt ) { SKP_Silk_bwexpander( psDecCtrl->PredCoef_Q12[ 0 ], psDec->LPC_order, BWE_AFTER_LOSS_Q16 ); SKP_Silk_bwexpander( psDecCtrl->PredCoef_Q12[ 1 ], psDec->LPC_order, BWE_AFTER_LOSS_Q16 ); } if( psDecCtrl->sigtype == SIG_TYPE_VOICED ) { /*********************/ /* Decode pitch lags */ /*********************/ /* Get lag index */ if( psDec->fs_kHz == 8 ) { SKP_Silk_range_decoder( &Ixs[ 0 ], psRC, SKP_Silk_pitch_lag_NB_CDF, SKP_Silk_pitch_lag_NB_CDF_offset ); } else if( psDec->fs_kHz == 12 ) { SKP_Silk_range_decoder( &Ixs[ 0 ], psRC, SKP_Silk_pitch_lag_MB_CDF, SKP_Silk_pitch_lag_MB_CDF_offset ); } else if( psDec->fs_kHz == 16 ) { SKP_Silk_range_decoder( &Ixs[ 0 ], psRC, SKP_Silk_pitch_lag_WB_CDF, SKP_Silk_pitch_lag_WB_CDF_offset ); } else { SKP_Silk_range_decoder( &Ixs[ 0 ], psRC, SKP_Silk_pitch_lag_SWB_CDF, SKP_Silk_pitch_lag_SWB_CDF_offset ); } /* Get countour index */ if( psDec->fs_kHz == 8 ) { /* Less codevectors used in 8 khz mode */ SKP_Silk_range_decoder( &Ixs[ 1 ], psRC, SKP_Silk_pitch_contour_NB_CDF, SKP_Silk_pitch_contour_NB_CDF_offset ); } else { /* Joint for 12, 16, and 24 khz */ SKP_Silk_range_decoder( &Ixs[ 1 ], psRC, SKP_Silk_pitch_contour_CDF, SKP_Silk_pitch_contour_CDF_offset ); } /* Decode pitch values */ SKP_Silk_decode_pitch( Ixs[ 0 ], Ixs[ 1 ], psDecCtrl->pitchL, psDec->fs_kHz ); /********************/ /* Decode LTP gains */ /********************/ /* Decode PERIndex value */ SKP_Silk_range_decoder( &psDecCtrl->PERIndex, psRC, SKP_Silk_LTP_per_index_CDF, SKP_Silk_LTP_per_index_CDF_offset ); /* Decode Codebook Index */ cbk_ptr_Q14 = SKP_Silk_LTP_vq_ptrs_Q14[ psDecCtrl->PERIndex ]; // set pointer to start of codebook for( k = 0; k < NB_SUBFR; k++ ) { SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_LTP_gain_CDF_ptrs[ psDecCtrl->PERIndex ], SKP_Silk_LTP_gain_CDF_offsets[ psDecCtrl->PERIndex ] ); for( i = 0; i < LTP_ORDER; i++ ) { psDecCtrl->LTPCoef_Q14[ SKP_SMULBB( k, LTP_ORDER ) + i ] = cbk_ptr_Q14[ SKP_SMULBB( Ix, LTP_ORDER ) + i ]; } } /**********************/ /* Decode LTP scaling */ /**********************/ SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_LTPscale_CDF, SKP_Silk_LTPscale_offset ); psDecCtrl->LTP_scale_Q14 = SKP_Silk_LTPScales_table_Q14[ Ix ]; } else { SKP_memset( psDecCtrl->pitchL, 0, NB_SUBFR * sizeof( SKP_int ) ); SKP_memset( psDecCtrl->LTPCoef_Q14, 0, NB_SUBFR * LTP_ORDER * sizeof( SKP_int16 ) ); psDecCtrl->PERIndex = 0; psDecCtrl->LTP_scale_Q14 = 0; } /***************/ /* Decode seed */ /***************/ SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_Seed_CDF, SKP_Silk_Seed_offset ); psDecCtrl->Seed = ( SKP_int32 )Ix; /*********************************************/ /* Decode quantization indices of excitation */ /*********************************************/ SKP_Silk_decode_pulses( psRC, psDecCtrl, q, psDec->frame_length ); /*********************************************/ /* Decode VAD flag */ /*********************************************/ SKP_Silk_range_decoder( &psDec->vadFlag, psRC, SKP_Silk_vadflag_CDF, SKP_Silk_vadflag_offset ); /**************************************/ /* Decode Frame termination indicator */ /**************************************/ SKP_Silk_range_decoder( &psDec->FrameTermination, psRC, SKP_Silk_FrameTermination_CDF, SKP_Silk_FrameTermination_offset ); /****************************************/ /* get number of bytes used so far */ /****************************************/ SKP_Silk_range_coder_get_length( psRC, &nBytesUsed ); psDec->nBytesLeft = psRC->bufferLength - nBytesUsed; if( psDec->nBytesLeft < 0 ) { psRC->error = RANGE_CODER_READ_BEYOND_BUFFER; } /****************************************/ /* check remaining bits in last byte */ /****************************************/ if( psDec->nBytesLeft == 0 ) { SKP_Silk_range_coder_check_after_decoding( psRC ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_main.h0000644000175000017500000005726111513063445020656 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #ifndef SKP_SILK_MAIN_H #define SKP_SILK_MAIN_H #include "SKP_Silk_SigProc_FIX.h" #include "SKP_Silk_define.h" #include "SKP_Silk_structs.h" #include "SKP_Silk_tables.h" #include "SKP_Silk_PLC.h" #ifdef __cplusplus extern "C" { #endif /* Encodes signs of excitation */ void SKP_Silk_encode_signs( SKP_Silk_range_coder_state *psRC, /* I/O Range coder state */ const SKP_int q[], /* I pulse signal */ const SKP_int length, /* I length of input */ const SKP_int sigtype, /* I Signal type */ const SKP_int QuantOffsetType, /* I Quantization offset type */ const SKP_int RateLevelIndex /* I Rate Level Index */ ); /* Decodes signs of excitation */ void SKP_Silk_decode_signs( SKP_Silk_range_coder_state *psRC, /* I/O Range coder state */ SKP_int q[], /* I/O pulse signal */ const SKP_int length, /* I length of output */ const SKP_int sigtype, /* I Signal type */ const SKP_int QuantOffsetType, /* I Quantization offset type */ const SKP_int RateLevelIndex /* I Rate Level Index */ ); /***************/ /* Shell coder */ /***************/ /* Encode quantization indices of excitation */ void SKP_Silk_encode_pulses( SKP_Silk_range_coder_state *psRC, /* I/O Range coder state */ const SKP_int sigtype, /* I Sigtype */ const SKP_int QuantOffsetType, /* I QuantOffsetType */ const SKP_int q[], /* I quantization indices */ const SKP_int frame_length /* I Frame length */ ); /* Shell encoder, operates on one shell code frame of 16 pulses */ void SKP_Silk_shell_encoder( SKP_Silk_range_coder_state *psRC, /* I/O compressor data structure */ const SKP_int *pulses0 /* I data: nonnegative pulse amplitudes */ ); /* Shell decoder, operates on one shell code frame of 16 pulses */ void SKP_Silk_shell_decoder( SKP_int *pulses0, /* O data: nonnegative pulse amplitudes */ SKP_Silk_range_coder_state *psRC, /* I/O compressor data structure */ const SKP_int pulses4 /* I number of pulses per pulse-subframe */ ); /***************/ /* Range coder */ /***************/ /* Range encoder for one symbol */ void SKP_Silk_range_encoder( SKP_Silk_range_coder_state *psRC, /* I/O compressor data structure */ const SKP_int data, /* I uncompressed data */ const SKP_uint16 prob[] /* I cumulative density functions */ ); /* Range encoder for multiple symbols */ void SKP_Silk_range_encoder_multi( SKP_Silk_range_coder_state *psRC, /* I/O compressor data structure */ const SKP_int data[], /* I uncompressed data [nSymbols] */ const SKP_uint16 * const prob[], /* I cumulative density functions */ const SKP_int nSymbols /* I number of data symbols */ ); /* Range decoder for one symbol */ void SKP_Silk_range_decoder( SKP_int data[], /* O uncompressed data */ SKP_Silk_range_coder_state *psRC, /* I/O compressor data structure */ const SKP_uint16 prob[], /* I cumulative density function */ SKP_int probIx /* I initial (middle) entry of cdf */ ); /* Range decoder for multiple symbols */ void SKP_Silk_range_decoder_multi( SKP_int data[], /* O uncompressed data [nSymbols] */ SKP_Silk_range_coder_state *psRC, /* I/O compressor data structure */ const SKP_uint16 * const prob[], /* I cumulative density functions */ const SKP_int probStartIx[], /* I initial (middle) entries of cdfs [nSymbols] */ const SKP_int nSymbols /* I number of data symbols */ ); /* Initialize range coder structure for encoder */ void SKP_Silk_range_enc_init( SKP_Silk_range_coder_state *psRC /* O compressor data structure */ ); /* Initialize range coder structure for decoder */ void SKP_Silk_range_dec_init( SKP_Silk_range_coder_state *psRC, /* O compressor data structure */ const SKP_uint8 buffer[], /* I buffer for compressed data [bufferLength] */ const SKP_int32 bufferLength /* I buffer length (in bytes) */ ); /* Determine length of bitstream */ SKP_int SKP_Silk_range_coder_get_length( /* O returns number of BITS in stream */ const SKP_Silk_range_coder_state *psRC, /* I compressed data structure */ SKP_int *nBytes /* O number of BYTES in stream */ ); /* Write decodable stream to buffer, and determine its length */ void SKP_Silk_range_enc_wrap_up( SKP_Silk_range_coder_state *psRC /* I/O compressed data structure */ ); /* Check that any remaining bits in the last byte are set to 1 */ void SKP_Silk_range_coder_check_after_decoding( SKP_Silk_range_coder_state *psRC /* I/O compressed data structure */ ); /* Gain scalar quantization with hysteresis, uniform on log scale */ void SKP_Silk_gains_quant( SKP_int ind[ NB_SUBFR ], /* O gain indices */ SKP_int32 gain_Q16[ NB_SUBFR ], /* I/O gains (quantized out) */ SKP_int *prev_ind, /* I/O last index in previous frame */ const SKP_int conditional /* I first gain is delta coded if 1 */ ); /* Gains scalar dequantization, uniform on log scale */ void SKP_Silk_gains_dequant( SKP_int32 gain_Q16[ NB_SUBFR ], /* O quantized gains */ const SKP_int ind[ NB_SUBFR ], /* I gain indices */ SKP_int *prev_ind, /* I/O last index in previous frame */ const SKP_int conditional /* I first gain is delta coded if 1 */ ); /* Convert NLSF parameters to stable AR prediction filter coefficients */ void SKP_Silk_NLSF2A_stable( SKP_int16 pAR_Q12[ MAX_LPC_ORDER ], /* O Stabilized AR coefs [LPC_order] */ const SKP_int pNLSF[ MAX_LPC_ORDER ], /* I NLSF vector [LPC_order] */ const SKP_int LPC_order /* I LPC/LSF order */ ); /* Interpolate two vectors */ void SKP_Silk_interpolate( SKP_int xi[ MAX_LPC_ORDER ], /* O interpolated vector */ const SKP_int x0[ MAX_LPC_ORDER ], /* I first vector */ const SKP_int x1[ MAX_LPC_ORDER ], /* I second vector */ const SKP_int ifact_Q2, /* I interp. factor, weight on 2nd vector */ const SKP_int d /* I number of parameters */ ); /***********************************/ /* Noise shaping quantization (NSQ)*/ /***********************************/ void SKP_Silk_NSQ( SKP_Silk_encoder_state *psEncC, /* I/O Encoder State */ SKP_Silk_encoder_control *psEncCtrlC, /* I Encoder Control */ SKP_Silk_nsq_state *NSQ, /* I/O NSQ state */ const SKP_int16 x[], /* I prefiltered input signal */ SKP_int q[], /* O quantized qulse signal */ const SKP_int LSFInterpFactor_Q2, /* I LSF interpolation factor in Q2 */ const SKP_int16 PredCoef_Q12[ 2 * MAX_LPC_ORDER ], /* I Short term prediction coefficients */ const SKP_int16 LTPCoef_Q14[ LTP_ORDER * NB_SUBFR ], /* I Long term prediction coefficients */ const SKP_int16 AR2_Q13[ NB_SUBFR * SHAPE_LPC_ORDER_MAX ], /* I */ const SKP_int HarmShapeGain_Q14[ NB_SUBFR ], /* I */ const SKP_int Tilt_Q14[ NB_SUBFR ], /* I Spectral tilt */ const SKP_int32 LF_shp_Q14[ NB_SUBFR ], /* I */ const SKP_int32 Gains_Q16[ NB_SUBFR ], /* I */ const SKP_int Lambda_Q10, /* I */ const SKP_int LTP_scale_Q14 /* I LTP state scaling */ ); /* Noise shaping using delayed decision */ void SKP_Silk_NSQ_del_dec( SKP_Silk_encoder_state *psEncC, /* I/O Encoder State */ SKP_Silk_encoder_control *psEncCtrlC, /* I Encoder Control */ SKP_Silk_nsq_state *NSQ, /* I/O NSQ state */ const SKP_int16 x[], /* I Prefiltered input signal */ SKP_int q[], /* O Quantized pulse signal */ const SKP_int LSFInterpFactor_Q2, /* I LSF interpolation factor in Q2 */ const SKP_int16 PredCoef_Q12[ 2 * MAX_LPC_ORDER ], /* I Prediction coefs */ const SKP_int16 LTPCoef_Q14[ LTP_ORDER * NB_SUBFR ], /* I LT prediction coefs */ const SKP_int16 AR2_Q13[ NB_SUBFR * SHAPE_LPC_ORDER_MAX ], /* I */ const SKP_int HarmShapeGain_Q14[ NB_SUBFR ], /* I */ const SKP_int Tilt_Q14[ NB_SUBFR ], /* I Spectral tilt */ const SKP_int32 LF_shp_Q14[ NB_SUBFR ], /* I */ const SKP_int32 Gains_Q16[ NB_SUBFR ], /* I */ const SKP_int Lambda_Q10, /* I */ const SKP_int LTP_scale_Q14 /* I LTP state scaling */ ); /************/ /* Silk VAD */ /************/ /* Initialize the Silk VAD */ SKP_int SKP_Silk_VAD_Init( /* O Return value, 0 if success */ SKP_Silk_VAD_state *psSilk_VAD /* I/O Pointer to Silk VAD state */ ); /* Silk VAD noise level estimation */ void SKP_Silk_VAD_GetNoiseLevels( const SKP_int32 pX[ VAD_N_BANDS ], /* I subband energies */ SKP_Silk_VAD_state *psSilk_VAD /* I/O Pointer to Silk VAD state */ ); /* Get speech activity level in Q8 */ SKP_int SKP_Silk_VAD_GetSA_Q8( /* O Return value, 0 if success */ SKP_Silk_VAD_state *psSilk_VAD, /* I/O Silk VAD state */ SKP_int *pSA_Q8, /* O Speech activity level in Q8 */ SKP_int *pSNR_dB_Q7, /* O SNR for current frame in Q7 */ SKP_int pQuality_Q15[ VAD_N_BANDS ], /* O Smoothed SNR for each band */ SKP_int *pTilt_Q15, /* O current frame's frequency tilt */ const SKP_int16 pIn[], /* I PCM input [framelength] */ const SKP_int framelength /* I Input frame length */ ); /* Detect signal in 8 - 12 khz range */ void SKP_Silk_detect_SWB_input( SKP_Silk_detect_SWB_state *psSWBdetect, /* I/O Encoder state */ const SKP_int16 samplesIn[], /* I Input to encoder */ SKP_int nSamplesIn /* I Length of input */ ); #if SWITCH_TRANSITION_FILTERING /* Low-pass filter with variable cutoff frequency based on */ /* piece-wise linear interpolation between elliptic filters */ /* Start by setting transition_frame_no = 1; */ void SKP_Silk_LP_variable_cutoff( SKP_Silk_LP_state *psLP, /* I/O LP filter state */ SKP_int16 *out, /* O Low-pass filtered output signal */ const SKP_int16 *in, /* I Input signal */ const SKP_int frame_length /* I Frame length */ ); #endif /****************************************************/ /* Decoder Functions */ /****************************************************/ SKP_int SKP_Silk_create_decoder( SKP_Silk_decoder_state **ppsDec /* I/O Decoder state pointer pointer */ ); SKP_int SKP_Silk_free_decoder( SKP_Silk_decoder_state *psDec /* I/O Decoder state pointer */ ); SKP_int SKP_Silk_init_decoder( SKP_Silk_decoder_state *psDec /* I/O Decoder state pointer */ ); /* Set decoder sampling rate */ void SKP_Silk_decoder_set_fs( SKP_Silk_decoder_state *psDec, /* I/O Decoder state pointer */ SKP_int fs_kHz /* I Sampling frequency (kHz) */ ); /****************/ /* Decode frame */ /****************/ SKP_int SKP_Silk_decode_frame( SKP_Silk_decoder_state *psDec, /* I/O Pointer to Silk decoder state */ SKP_int16 pOut[], /* O Pointer to output speech frame */ SKP_int16 *pN, /* O Pointer to size of output frame */ const SKP_uint8 pCode[], /* I Pointer to payload */ const SKP_int nBytes, /* I Payload length */ SKP_int action, /* I Action from Jitter Buffer */ SKP_int *decBytes /* O Used bytes to decode this frame */ ); /* Decode parameters from payload */ void SKP_Silk_decode_parameters( SKP_Silk_decoder_state *psDec, /* I/O State */ SKP_Silk_decoder_control *psDecCtrl, /* I/O Decoder control */ SKP_int q[], /* O Excitation signal */ const SKP_int fullDecoding /* I Flag to tell if only arithmetic decoding */ ); /* Decode indices from payload v4 Bitstream */ void SKP_Silk_decode_indices_v4( SKP_Silk_decoder_state *psDec /* I/O State */ ); /* Decode parameters from payload v4 Bitstream */ void SKP_Silk_decode_parameters_v4( SKP_Silk_decoder_state *psDec, /* I/O State */ SKP_Silk_decoder_control *psDecCtrl, /* I/O Decoder control */ SKP_int q[ MAX_FRAME_LENGTH ], /* O Excitation signal */ const SKP_int fullDecoding /* I Flag to tell if only arithmetic decoding */ ); /* Core decoder. Performs inverse NSQ operation LTP + LPC */ void SKP_Silk_decode_core( SKP_Silk_decoder_state *psDec, /* I/O Decoder state */ SKP_Silk_decoder_control *psDecCtrl, /* I Decoder control */ SKP_int16 xq[], /* O Decoded speech */ const SKP_int q[ MAX_FRAME_LENGTH ] /* I Pulse signal */ ); /* NLSF vector decoder */ void SKP_Silk_NLSF_MSVQ_decode( SKP_int *pNLSF_Q15, /* O Pointer to decoded output [LPC_ORDER x 1] */ const SKP_Silk_NLSF_CB_struct *psNLSF_CB, /* I Pointer to NLSF codebook struct */ const SKP_int *NLSFIndices, /* I Pointer to NLSF indices [nStages x 1] */ const SKP_int LPC_order /* I LPC order */ ); /**********************/ /* Arithmetic coding */ /*********************/ /* Decode quantization indices of excitation (Shell coding) */ void SKP_Silk_decode_pulses( SKP_Silk_range_coder_state *psRC, /* I/O Range coder state */ SKP_Silk_decoder_control *psDecCtrl, /* I/O Decoder control */ SKP_int q[], /* O Excitation signal */ const SKP_int frame_length /* I Frame length (preliminary) */ ); /******************/ /* CNG */ /******************/ /* Reset CNG */ void SKP_Silk_CNG_Reset( SKP_Silk_decoder_state *psDec /* I/O Decoder state */ ); /* Updates CNG estimate, and applies the CNG when packet was lost */ void SKP_Silk_CNG( SKP_Silk_decoder_state *psDec, /* I/O Decoder state */ SKP_Silk_decoder_control *psDecCtrl, /* I/O Decoder control */ SKP_int16 signal[], /* I/O Signal */ SKP_int length /* I Length of residual */ ); /* Encoding of various parameters */ void SKP_Silk_encode_parameters( SKP_Silk_encoder_state *psEncC, /* I/O Encoder state */ SKP_Silk_encoder_control *psEncCtrlC, /* I/O Encoder control */ SKP_Silk_range_coder_state *psRC, /* I/O Range coder state */ const SKP_int *q /* I Quantization indices */ ); /* Encoding of various parameters */ void SKP_Silk_encode_parameters_v4( SKP_Silk_encoder_state *psEncC, /* I/O Encoder state */ SKP_Silk_encoder_control *psEncCtrlC, /* I/O Encoder control */ SKP_Silk_range_coder_state *psRC /* I/O Range encoder state */ ); /* Extract lowest layer encoding */ void SKP_Silk_get_low_layer_internal( const SKP_uint8 *indata, /* I: Encoded input vector */ const SKP_int16 nBytesIn, /* I: Number of input Bytes */ SKP_uint8 *Layer0data, /* O: Layer0 payload */ SKP_int16 *nLayer0Bytes /* O: Number of FEC Bytes */ ); /* Resets LBRR buffer, used if packet size changes */ void SKP_Silk_LBRR_reset( SKP_Silk_encoder_state *psEncC /* I/O Pointer to Silk encoder state */ ); /* Predict number of bytes used to encode q */ SKP_int SKP_Silk_pulses_to_bytes( /* O Return value, predicted number of bytes used to encode q */ SKP_Silk_encoder_state *psEncC, /* I/O Encoder State*/ SKP_int q[] /* I Pulse signal */ ); #ifdef __cplusplus } #endif #endif h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_lowpass_short.c0000644000175000017500000000652311513063445022627 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_lowpass_short.c * * * * First order low-pass filter, with input as SKP_int16, running at * * 48 kHz * * * * Copyright 2006 (c), Skype Limited * * Date: 060221 * * */ #include "SKP_Silk_SigProc_FIX.h" /* First order low-pass filter, with input as SKP_int16, running at 48 kHz */ void SKP_Silk_lowpass_short( const SKP_int16 *in, /* I: Q15 48 kHz signal; [len] */ SKP_int32 *S, /* I/O: Q25 state; length = 1 */ SKP_int32 *out, /* O: Q25 48 kHz signal; [len] */ const SKP_int32 len /* O: Signal length */ ) { SKP_int k; SKP_int32 in_tmp, out_tmp, state; state = S[ 0 ]; for( k = 0; k < len; k++ ) { in_tmp = SKP_MUL( 768, (SKP_int32)in[k] ); /* multiply by 0.75, going from Q15 to Q25 */ out_tmp = state + in_tmp; /* zero at nyquist */ state = in_tmp - SKP_RSHIFT( out_tmp, 1 ); /* pole */ out[ k ] = out_tmp; } S[ 0 ] = state; } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_resample_4_3.c0000644000175000017500000001005111513063445022164 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * File Name: SKP_Silk_resample_4_3.c * * * * Resamples by a factor 4/3 * * * * Copyright 2009 (c), Skype Limited * * All rights reserved. * * * * Date: 090407 * * */ #include "SKP_Silk_SigProc_FIX.h" #define OUT_SUBFR_LEN 80 /* Resamples by a factor 4/3 */ void SKP_Silk_resample_4_3( SKP_int16 *out, /* O: Fs_low signal [inLen * 4/3] */ SKP_int32 *S, /* I/O: State vector [7+4+4] */ const SKP_int16 *in, /* I: Fs_high signal [inLen] */ const SKP_int inLen /* I: input length, must be a multiple of 3 */ ) { SKP_int outLen, LSubFrameIn, LSubFrameOut; SKP_int16 outH[ 3 * OUT_SUBFR_LEN ]; SKP_int16 outHH[ 6 * OUT_SUBFR_LEN ]; SKP_int32 scratch[ 9 * OUT_SUBFR_LEN / 2 ]; /* Check that input is multiple of 3 */ SKP_assert( inLen % 3 == 0 ); outLen = SKP_DIV32_16( SKP_LSHIFT( inLen, 2 ), 3 ); while( outLen > 0 ) { LSubFrameOut = SKP_min_int( OUT_SUBFR_LEN, outLen ); LSubFrameIn = SKP_SMULWB( 49152, LSubFrameOut ); /* Upsample two times by a factor 2 */ /* Scratch size needs to be: 3 * LSubFrameIn * sizeof( SKP_int32 ) */ SKP_Silk_resample_2_1_coarse( in, &S[ 0 ], outH, scratch, LSubFrameIn ); /* Scratch size needs to be: 6 * LSubFrameIn * sizeof( SKP_int32 ) */ SKP_Silk_resample_2_1_coarse( outH, &S[ 4 ], outHH, scratch, SKP_LSHIFT( LSubFrameIn, 1 ) ); /* Downsample by a factor 3 */ SKP_Silk_resample_1_3( out, &S[ 8 ], outHH, SKP_LSHIFT( LSubFrameIn, 2 ) ); in += LSubFrameIn; out += LSubFrameOut; outLen -= LSubFrameOut; } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_NLSF_VQ_rate_distortion_FIX.c0000644000175000017500000000722311513063445025065 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" /* Rate-Distortion calculations for multiple input data vectors */ void SKP_Silk_NLSF_VQ_rate_distortion_FIX( SKP_int32 *pRD_Q20, /* O Rate-distortion values [psNLSF_CBS->nVectors*N] */ const SKP_Silk_NLSF_CBS *psNLSF_CBS, /* I NLSF codebook stage struct */ const SKP_int *in_Q15, /* I Input vectors to be quantized */ const SKP_int *w_Q6, /* I Weight vector */ const SKP_int32 *rate_acc_Q5, /* I Accumulated rates from previous stage */ const SKP_int mu_Q15, /* I Weight between weighted error and rate */ const SKP_int N, /* I Number of input vectors to be quantized */ const SKP_int LPC_order /* I LPC order */ ) { SKP_int i, n; SKP_int32 *pRD_vec_Q20; /* Compute weighted quantization errors for all input vectors over one codebook stage */ SKP_Silk_NLSF_VQ_sum_error_FIX( pRD_Q20, in_Q15, w_Q6, psNLSF_CBS->CB_NLSF_Q15, N, psNLSF_CBS->nVectors, LPC_order ); /* Loop over input vectors */ pRD_vec_Q20 = pRD_Q20; for( n = 0; n < N; n++ ) { /* Add rate cost to error for each codebook vector */ for( i = 0; i < psNLSF_CBS->nVectors; i++ ) { SKP_assert( rate_acc_Q5[ n ] + psNLSF_CBS->Rates_Q5[ i ] >= 0 ); SKP_assert( rate_acc_Q5[ n ] + psNLSF_CBS->Rates_Q5[ i ] <= SKP_int16_MAX ); pRD_vec_Q20[ i ] = SKP_SMLABB( pRD_vec_Q20[ i ], rate_acc_Q5[ n ] + psNLSF_CBS->Rates_Q5[ i ], mu_Q15 ); SKP_assert( pRD_vec_Q20[ i ] >= 0 ); } pRD_vec_Q20 += psNLSF_CBS->nVectors; } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_tables_NLSF_CB0_10.h0000644000175000017500000000462111513063445022742 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #ifndef SKP_SILK_TABLES_NLSF_CB0_10_H #define SKP_SILK_TABLES_NLSF_CB0_10_H #include "SKP_Silk_define.h" #ifdef __cplusplus extern "C" { #endif #define NLSF_MSVQ_CB0_10_STAGES 6 #define NLSF_MSVQ_CB0_10_VECTORS 120 /* NLSF codebook entropy coding tables */ extern const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ NLSF_MSVQ_CB0_10_VECTORS + NLSF_MSVQ_CB0_10_STAGES ]; extern const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB0_10_CDF_start_ptr[ NLSF_MSVQ_CB0_10_STAGES ]; extern const SKP_int SKP_Silk_NLSF_MSVQ_CB0_10_CDF_middle_idx[ NLSF_MSVQ_CB0_10_STAGES ]; #ifdef __cplusplus } #endif #endif h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_find_pred_coefs_FIX.c0000644000175000017500000001471311513063445023537 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" void SKP_Silk_find_pred_coefs_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O encoder state */ SKP_Silk_encoder_control_FIX *psEncCtrl, /* I/O encoder control */ const SKP_int16 res_pitch[] /* I Residual from pitch analysis */ ) { SKP_int i; SKP_int32 WLTP[ NB_SUBFR * LTP_ORDER * LTP_ORDER ]; SKP_int32 invGains_Q16[ NB_SUBFR ], local_gains[ NB_SUBFR ], Wght_Q15[ NB_SUBFR ]; SKP_int NLSF_Q15[ MAX_LPC_ORDER ]; const SKP_int16 *x_ptr; SKP_int16 *x_pre_ptr, LPC_in_pre[ NB_SUBFR * MAX_LPC_ORDER + MAX_FRAME_LENGTH ]; SKP_int32 tmp, min_gain_Q16; SKP_int LTP_corrs_rshift[ NB_SUBFR ]; /* weighting for weighted least squares */ min_gain_Q16 = SKP_int32_MAX >> 6; for( i = 0; i < NB_SUBFR; i++ ) { min_gain_Q16 = SKP_min( min_gain_Q16, psEncCtrl->Gains_Q16[ i ] ); } for( i = 0; i < NB_SUBFR; i++ ) { /* Divide to Q16 */ SKP_assert( psEncCtrl->Gains_Q16[ i ] > 0 ); /* Invert and normalize gains, and ensure that maximum invGains_Q16 is within range of a 16 bit int */ invGains_Q16[ i ] = SKP_DIV32_varQ( min_gain_Q16, psEncCtrl->Gains_Q16[ i ], 16 - 2 ); /* Ensure Wght_Q15 a minimum value 1 */ invGains_Q16[ i ] = SKP_max( invGains_Q16[ i ], 363 ); /* Square the inverted gains */ SKP_assert( invGains_Q16[ i ] == SKP_SAT16( invGains_Q16[ i ] ) ); tmp = SKP_SMULWB( invGains_Q16[ i ], invGains_Q16[ i ] ); Wght_Q15[ i ] = SKP_RSHIFT( tmp, 1 ); /* Invert the inverted and normalized gains */ local_gains[ i ] = SKP_DIV32( ( 1 << 16 ), invGains_Q16[ i ] ); } if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) { /**********/ /* VOICED */ /**********/ SKP_assert( psEnc->sCmn.frame_length - psEnc->sCmn.predictLPCOrder >= psEncCtrl->sCmn.pitchL[ 0 ] + LTP_ORDER / 2 ); /* LTP analysis */ SKP_Silk_find_LTP_FIX( psEncCtrl->LTPCoef_Q14, WLTP, &psEncCtrl->LTPredCodGain_Q7, res_pitch, res_pitch + SKP_RSHIFT( psEnc->sCmn.frame_length, 1 ), psEncCtrl->sCmn.pitchL, Wght_Q15, psEnc->sCmn.subfr_length, psEnc->sCmn.frame_length, LTP_corrs_rshift ); /* Quantize LTP gain parameters */ SKP_Silk_quant_LTP_gains_FIX( psEncCtrl->LTPCoef_Q14, psEncCtrl->sCmn.LTPIndex, &psEncCtrl->sCmn.PERIndex, WLTP, psEnc->mu_LTP_Q8, psEnc->sCmn.LTPQuantLowComplexity ); /* Control LTP scaling */ SKP_Silk_LTP_scale_ctrl_FIX( psEnc, psEncCtrl ); /* Create LTP residual */ SKP_Silk_LTP_analysis_filter_FIX( LPC_in_pre, psEnc->x_buf + psEnc->sCmn.frame_length - psEnc->sCmn.predictLPCOrder, psEncCtrl->LTPCoef_Q14, psEncCtrl->sCmn.pitchL, invGains_Q16, 16, psEnc->sCmn.subfr_length, psEnc->sCmn.predictLPCOrder ); } else { /************/ /* UNVOICED */ /************/ /* Create signal with prepended subframes, scaled by inverse gains */ x_ptr = psEnc->x_buf + psEnc->sCmn.frame_length - psEnc->sCmn.predictLPCOrder; x_pre_ptr = LPC_in_pre; for( i = 0; i < NB_SUBFR; i++ ) { SKP_Silk_scale_copy_vector16( x_pre_ptr, x_ptr, invGains_Q16[ i ], psEnc->sCmn.subfr_length + psEnc->sCmn.predictLPCOrder ); x_pre_ptr += psEnc->sCmn.subfr_length + psEnc->sCmn.predictLPCOrder; x_ptr += psEnc->sCmn.subfr_length; } SKP_memset( psEncCtrl->LTPCoef_Q14, 0, NB_SUBFR * LTP_ORDER * sizeof( SKP_int16 ) ); psEncCtrl->LTPredCodGain_Q7 = 0; } /* LPC_in_pre contains the LTP-filtered input for voiced, and the unfiltered input for unvoiced */ TIC(FIND_LPC) SKP_Silk_find_LPC_FIX( NLSF_Q15, &psEncCtrl->sCmn.NLSFInterpCoef_Q2, psEnc->sPred.prev_NLSFq_Q15, psEnc->sCmn.useInterpolatedNLSFs * ( 1 - psEnc->sCmn.first_frame_after_reset ), psEnc->sCmn.predictLPCOrder, LPC_in_pre, psEnc->sCmn.subfr_length + psEnc->sCmn.predictLPCOrder ); TOC(FIND_LPC) /* Quantize LSFs */ TIC(PROCESS_LSFS) SKP_Silk_process_NLSFs_FIX( psEnc, psEncCtrl, NLSF_Q15 ); TOC(PROCESS_LSFS) /* Calculate residual energy using quantized LPC coefficients */ SKP_Silk_residual_energy_FIX( psEncCtrl->ResNrg, psEncCtrl->ResNrgQ, LPC_in_pre, psEncCtrl->PredCoef_Q12, local_gains, psEnc->sCmn.subfr_length, psEnc->sCmn.predictLPCOrder ); /* Copy to prediction struct for use in next frame for fluctuation reduction */ SKP_memcpy( psEnc->sPred.prev_NLSFq_Q15, NLSF_Q15, psEnc->sCmn.predictLPCOrder * sizeof( SKP_int ) ); } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_resample_1_2_coarsest.c0000644000175000017500000000723011513063445024070 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_resample_1_2_coarsest.c * * * * Downsample by a factor 2, coarsest * * * * Copyright 2006 (c), Skype Limited * * Date: 060221 * * */ #include "SKP_Silk_SigProc_FIX.h" /* Coefficients for coarsest 2-fold resampling */ static SKP_int16 A20cst[ 1 ] = { 3786 }; static SKP_int16 A21cst[ 1 ] = { 17908 }; /* Downsample by a factor 2, coarsest */ void SKP_Silk_resample_1_2_coarsest( const SKP_int16 *in, /* I: 16 kHz signal [2*len] */ SKP_int32 *S, /* I/O: State vector [2] */ SKP_int16 *out, /* O: 8 kHz signal [len] */ SKP_int32 *scratch, /* I: Scratch memory [3*len] */ const SKP_int32 len /* I: Number of OUTPUT samples*/ ) { SKP_int32 k, idx; /* De-interleave allpass inputs, and convert Q15 -> Q25 */ for( k = 0; k < len; k++ ) { idx = SKP_LSHIFT( k, 1 ); scratch[ k ] = SKP_LSHIFT( (SKP_int32)in[ idx ], 10 ); scratch[ k + len ] = SKP_LSHIFT( (SKP_int32)in[ idx + 1 ], 10 ); } idx = SKP_LSHIFT( len, 1 ); /* Allpass filters */ SKP_Silk_allpass_int( scratch, S, A21cst[ 0 ], scratch + idx, len ); SKP_Silk_allpass_int( scratch + len, S + 1, A20cst[ 0 ], scratch, len ); /* Add two allpass outputs */ for( k = 0; k < len; k++ ) { out[ k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( scratch[ k ] + scratch[ k + idx ], 11 ) ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_prefilter_FIX.c0000644000175000017500000002225011513063445022415 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" #include "SKP_Silk_perceptual_parameters_FIX.h" /* SKP_Silk_prefilter. Prefilter for finding Quantizer input signal */ SKP_INLINE void SKP_Silk_prefilt_FIX( SKP_Silk_prefilter_state_FIX *P, /* I/O state */ SKP_int32 st_res_Q12[], /* I short term residual signal */ SKP_int16 xw[], /* O prefiltered signal */ SKP_int32 HarmShapeFIRPacked_Q12, /* I Harmonic shaping coeficients */ SKP_int Tilt_Q14, /* I Tilt shaping coeficient */ SKP_int32 LF_shp_Q14, /* I Low-frequancy shaping coeficients*/ SKP_int lag, /* I Lag for harmonic shaping */ SKP_int length /* I Length of signals */ ); void SKP_Silk_prefilter_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O Encoder state FIX */ const SKP_Silk_encoder_control_FIX *psEncCtrl, /* I Encoder control FIX */ SKP_int16 xw[], /* O Weighted signal */ const SKP_int16 x[] /* I Speech signal */ ) { SKP_Silk_prefilter_state_FIX *P = &psEnc->sPrefilt; SKP_int j, k, lag; SKP_int32 tmp_32, B_Q12; const SKP_int16 *AR1_shp_Q13; const SKP_int16 *px; SKP_int16 *pxw, *pst_res; SKP_int HarmShapeGain_Q12, Tilt_Q14, LF_shp_Q14; SKP_int32 HarmShapeFIRPacked_Q12; SKP_int32 x_filt_Q12[ MAX_FRAME_LENGTH / NB_SUBFR ], filterState[ MAX_LPC_ORDER ]; SKP_int16 st_res[ ( MAX_FRAME_LENGTH / NB_SUBFR ) + MAX_LPC_ORDER ]; /* Setup pointers */ px = x; pxw = xw; lag = P->lagPrev; for( k = 0; k < NB_SUBFR; k++ ) { /* Update Variables that change per sub frame */ if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) { lag = psEncCtrl->sCmn.pitchL[ k ]; } /* Noise shape parameters */ HarmShapeGain_Q12 = SKP_SMULWB( psEncCtrl->HarmShapeGain_Q14[ k ], 16384 - psEncCtrl->HarmBoost_Q14[ k ] ); SKP_assert( HarmShapeGain_Q12 >= 0 ); HarmShapeFIRPacked_Q12 = SKP_RSHIFT( HarmShapeGain_Q12, 2 ); HarmShapeFIRPacked_Q12 |= SKP_LSHIFT( ( SKP_int32 )SKP_RSHIFT( HarmShapeGain_Q12, 1 ), 16 ); Tilt_Q14 = psEncCtrl->Tilt_Q14[ k ]; LF_shp_Q14 = psEncCtrl->LF_shp_Q14[ k ]; AR1_shp_Q13 = &psEncCtrl->AR1_Q13[ k * SHAPE_LPC_ORDER_MAX ]; /* Short term FIR filtering*/ SKP_memset( filterState, 0, psEnc->sCmn.shapingLPCOrder * sizeof( SKP_int32 ) ); SKP_Silk_MA_Prediction_Q13( px - psEnc->sCmn.shapingLPCOrder, AR1_shp_Q13, filterState, st_res, psEnc->sCmn.subfr_length + psEnc->sCmn.shapingLPCOrder, psEnc->sCmn.shapingLPCOrder ); pst_res = st_res + psEnc->sCmn.shapingLPCOrder; /* Point to first sample */ /* reduce (mainly) low frequencies during harmonic emphasis */ B_Q12 = SKP_RSHIFT_ROUND( psEncCtrl->GainsPre_Q14[ k ], 2 ); tmp_32 = SKP_SMLABB( INPUT_TILT_Q26, psEncCtrl->HarmBoost_Q14[ k ], HarmShapeGain_Q12 ); /* Q26 */ tmp_32 = SKP_SMLABB( tmp_32, psEncCtrl->coding_quality_Q14, HIGH_RATE_INPUT_TILT_Q12 ); /* Q26 */ tmp_32 = SKP_SMULWB( tmp_32, -psEncCtrl->GainsPre_Q14[ k ] ); /* Q24 */ tmp_32 = SKP_RSHIFT_ROUND( tmp_32, 12 ); /* Q12 */ B_Q12 |= SKP_LSHIFT( SKP_SAT16( tmp_32 ), 16 ); /* NOTE: the code below loads two int16 values in an int32, and multiplies each using the */ /* SMLABB and SMLABT instructions. On a big-endian CPU the two int16 variables would be */ /* loaded in reverse order and the code will give the wrong result. In that case swapping */ /* the SMLABB and SMLABT instructions should solve the problem. */ x_filt_Q12[ 0 ] = SKP_SMLABT( SKP_SMULBB( pst_res[ 0 ], B_Q12 ), P->sHarmHP, B_Q12 ); for( j = 1; j < psEnc->sCmn.subfr_length; j++ ) { x_filt_Q12[ j ] = SKP_SMLABT( SKP_SMULBB( pst_res[ j ], B_Q12 ), pst_res[ j - 1 ], B_Q12 ); } P->sHarmHP = pst_res[ psEnc->sCmn.subfr_length - 1 ]; SKP_Silk_prefilt_FIX( P, x_filt_Q12, pxw, HarmShapeFIRPacked_Q12, Tilt_Q14, LF_shp_Q14, lag, psEnc->sCmn.subfr_length ); px += psEnc->sCmn.subfr_length; pxw += psEnc->sCmn.subfr_length; } P->lagPrev = psEncCtrl->sCmn.pitchL[ NB_SUBFR - 1 ]; } /* SKP_Silk_prefilter. Prefilter for finding Quantizer input signal */ SKP_INLINE void SKP_Silk_prefilt_FIX( SKP_Silk_prefilter_state_FIX *P, /* I/O state */ SKP_int32 st_res_Q12[], /* I short term residual signal */ SKP_int16 xw[], /* O prefiltered signal */ SKP_int32 HarmShapeFIRPacked_Q12, /* I Harmonic shaping coeficients */ SKP_int Tilt_Q14, /* I Tilt shaping coeficient */ SKP_int32 LF_shp_Q14, /* I Low-frequancy shaping coeficients*/ SKP_int lag, /* I Lag for harmonic shaping */ SKP_int length /* I Length of signals */ ) { SKP_int i, idx, LTP_shp_buf_idx; SKP_int32 n_LTP_Q12, n_Tilt_Q10, n_LF_Q10; SKP_int32 sLF_MA_shp_Q12, sLF_AR_shp_Q12; SKP_int16 *LTP_shp_buf; /* To speed up use temp variables instead of using the struct */ LTP_shp_buf = P->sLTP_shp1; LTP_shp_buf_idx = P->sLTP_shp_buf_idx1; sLF_AR_shp_Q12 = P->sLF_AR_shp1_Q12; sLF_MA_shp_Q12 = P->sLF_MA_shp1_Q12; for( i = 0; i < length; i++ ) { if( lag > 0 ) { /* unrolled loop */ SKP_assert( HARM_SHAPE_FIR_TAPS == 3 ); idx = lag + LTP_shp_buf_idx; n_LTP_Q12 = SKP_SMULBB( LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2 - 1) & LTP_MASK ], HarmShapeFIRPacked_Q12 ); n_LTP_Q12 = SKP_SMLABT( n_LTP_Q12, LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2 ) & LTP_MASK ], HarmShapeFIRPacked_Q12 ); n_LTP_Q12 = SKP_SMLABB( n_LTP_Q12, LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2 + 1) & LTP_MASK ], HarmShapeFIRPacked_Q12 ); } else { n_LTP_Q12 = 0; } n_LF_Q10 = SKP_SMLAWB( SKP_SMULWT( sLF_AR_shp_Q12, LF_shp_Q14 ), sLF_MA_shp_Q12, LF_shp_Q14 ); n_Tilt_Q10 = SKP_SMULWB( sLF_AR_shp_Q12, Tilt_Q14 ); sLF_AR_shp_Q12 = SKP_SUB32( st_res_Q12[ i ], SKP_LSHIFT( n_Tilt_Q10, 2 ) ); sLF_MA_shp_Q12 = SKP_SUB32( sLF_AR_shp_Q12, SKP_LSHIFT( n_LF_Q10, 2 ) ); LTP_shp_buf_idx = ( LTP_shp_buf_idx - 1 ) & LTP_MASK; LTP_shp_buf[ LTP_shp_buf_idx ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( sLF_MA_shp_Q12, 12 ) ); xw[i] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( SKP_SUB32( sLF_MA_shp_Q12, n_LTP_Q12 ), 12 ) ); } /* Copy temp variable back to state */ P->sLF_AR_shp1_Q12 = sLF_AR_shp_Q12; P->sLF_MA_shp1_Q12 = sLF_MA_shp_Q12; P->sLTP_shp_buf_idx1 = LTP_shp_buf_idx; } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_process_NLSFs_FIX.c0000644000175000017500000001514211513063445023106 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" /* Limit, stabilize, convert and quantize NLSFs. */ void SKP_Silk_process_NLSFs_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O Encoder state FIX */ SKP_Silk_encoder_control_FIX *psEncCtrl, /* I/O Encoder control FIX */ SKP_int *pNLSF_Q15 /* I/O Normalized LSFs (quant out) (0 - (2^15-1)) */ ) { SKP_int doInterpolate; SKP_int pNLSFW_Q6[ MAX_LPC_ORDER ]; SKP_int NLSF_mu_Q15, NLSF_mu_fluc_red_Q16; SKP_int32 i_sqr_Q15; const SKP_Silk_NLSF_CB_struct *psNLSF_CB; /* Used only for NLSF interpolation */ SKP_int pNLSF0_temp_Q15[ MAX_LPC_ORDER ]; SKP_int pNLSFW0_temp_Q6[ MAX_LPC_ORDER ]; SKP_int i; SKP_assert( psEnc->speech_activity_Q8 >= 0 ); SKP_assert( psEnc->speech_activity_Q8 <= 256 ); SKP_assert( psEncCtrl->sparseness_Q8 >= 0 ); SKP_assert( psEncCtrl->sparseness_Q8 <= 256 ); SKP_assert( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED || psEncCtrl->sCmn.sigtype == SIG_TYPE_UNVOICED ); /***********************/ /* Calculate mu values */ /***********************/ if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) { /* NLSF_mu = 0.002f - 0.001f * psEnc->speech_activity; */ /* NLSF_mu_fluc_red = 0.1f - 0.05f * psEnc->speech_activity; */ NLSF_mu_Q15 = SKP_SMLAWB( 66, -8388, psEnc->speech_activity_Q8 ); NLSF_mu_fluc_red_Q16 = SKP_SMLAWB( 6554, -838848, psEnc->speech_activity_Q8 ); } else { /* NLSF_mu = 0.005f - 0.004f * psEnc->speech_activity; */ /* NLSF_mu_fluc_red = 0.2f - 0.1f * psEnc->speech_activity - 0.1f * psEncCtrl->sparseness; */ NLSF_mu_Q15 = SKP_SMLAWB( 164, -33554, psEnc->speech_activity_Q8 ); NLSF_mu_fluc_red_Q16 = SKP_SMLAWB( 13107, -1677696, psEnc->speech_activity_Q8 + psEncCtrl->sparseness_Q8 ); } SKP_assert( NLSF_mu_Q15 >= 0 ); SKP_assert( NLSF_mu_Q15 <= 164 ); SKP_assert( NLSF_mu_fluc_red_Q16 >= 0 ); SKP_assert( NLSF_mu_fluc_red_Q16 <= 13107 ); NLSF_mu_Q15 = SKP_max( NLSF_mu_Q15, 1 ); /* Calculate NLSF weights */ TIC(NLSF_weights_FIX) SKP_Silk_NLSF_VQ_weights_laroia( pNLSFW_Q6, pNLSF_Q15, psEnc->sCmn.predictLPCOrder ); TOC(NLSF_weights_FIX) /* Update NLSF weights for interpolated NLSFs */ doInterpolate = ( psEnc->sCmn.useInterpolatedNLSFs == 1 ) && ( psEncCtrl->sCmn.NLSFInterpCoef_Q2 < ( 1 << 2 ) ); if( doInterpolate ) { /* Calculate the interpolated NLSF vector for the first half */ SKP_Silk_interpolate( pNLSF0_temp_Q15, psEnc->sPred.prev_NLSFq_Q15, pNLSF_Q15, psEncCtrl->sCmn.NLSFInterpCoef_Q2, psEnc->sCmn.predictLPCOrder ); /* Calculate first half NLSF weights for the interpolated NLSFs */ TIC(NLSF_weights_FIX) SKP_Silk_NLSF_VQ_weights_laroia( pNLSFW0_temp_Q6, pNLSF0_temp_Q15, psEnc->sCmn.predictLPCOrder ); TOC(NLSF_weights_FIX) /* Update NLSF weights with contribution from first half */ i_sqr_Q15 = SKP_LSHIFT( SKP_SMULBB( psEncCtrl->sCmn.NLSFInterpCoef_Q2, psEncCtrl->sCmn.NLSFInterpCoef_Q2 ), 11 ); for( i = 0; i < psEnc->sCmn.predictLPCOrder; i++ ) { pNLSFW_Q6[ i ] = SKP_SMLAWB( SKP_RSHIFT( pNLSFW_Q6[ i ], 1 ), pNLSFW0_temp_Q6[ i ], i_sqr_Q15 ); SKP_assert( pNLSFW_Q6[ i ] <= SKP_int16_MAX ); SKP_assert( pNLSFW_Q6[ i ] >= 1 ); } } /* Set pointer to the NLSF codebook for the current signal type and LPC order */ psNLSF_CB = psEnc->sCmn.psNLSF_CB[ psEncCtrl->sCmn.sigtype ]; /* Quantize NLSF parameters given the trained NLSF codebooks */ TIC(MSVQ_encode_FIX) SKP_Silk_NLSF_MSVQ_encode_FIX( psEncCtrl->sCmn.NLSFIndices, pNLSF_Q15, psNLSF_CB, psEnc->sPred.prev_NLSFq_Q15, pNLSFW_Q6, NLSF_mu_Q15, NLSF_mu_fluc_red_Q16, psEnc->sCmn.NLSF_MSVQ_Survivors, psEnc->sCmn.predictLPCOrder, psEnc->sCmn.first_frame_after_reset ); TOC(MSVQ_encode_FIX) /* Convert quantized NLSFs back to LPC coefficients */ SKP_Silk_NLSF2A_stable( psEncCtrl->PredCoef_Q12[ 1 ], pNLSF_Q15, psEnc->sCmn.predictLPCOrder ); if( doInterpolate ) { /* Calculate the interpolated, quantized LSF vector for the first half */ SKP_Silk_interpolate( pNLSF0_temp_Q15, psEnc->sPred.prev_NLSFq_Q15, pNLSF_Q15, psEncCtrl->sCmn.NLSFInterpCoef_Q2, psEnc->sCmn.predictLPCOrder ); /* Convert back to LPC coefficients */ SKP_Silk_NLSF2A_stable( psEncCtrl->PredCoef_Q12[ 0 ], pNLSF0_temp_Q15, psEnc->sCmn.predictLPCOrder ); } else { /* Copy LPC coefficients for first half from second half */ SKP_memcpy( psEncCtrl->PredCoef_Q12[ 0 ], psEncCtrl->PredCoef_Q12[ 1 ], psEnc->sCmn.predictLPCOrder * sizeof( SKP_int16 ) ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_regularize_correlations_FIX.c0000644000175000017500000000472511513063445025365 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" /* Add noise to matrix diagonal */ void SKP_Silk_regularize_correlations_FIX( SKP_int32 *XX, /* I/O Correlation matrices */ SKP_int32 *xx, /* I/O Correlation values */ SKP_int32 noise, /* I Noise to add */ SKP_int D /* I Dimension of XX */ ) { SKP_int i; for( i = 0; i < D; i++ ) { matrix_ptr( &XX[ 0 ], i, i, D ) = SKP_ADD32( matrix_ptr( &XX[ 0 ], i, i, D ), noise ); } xx[ 0 ] += noise; } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_LPC_synthesis_order16.c0000644000175000017500000001374411513063445024014 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_LPC_synthesis_order16.c * * Coefficients are in Q12 * * * * 16th order AR filter * * */ #include "SKP_Silk_SigProc_FIX.h" /* 16th order AR filter */ void SKP_Silk_LPC_synthesis_order16(const SKP_int16 *in, /* I: excitation signal */ const SKP_int16 *A_Q12, /* I: AR coefficients [16], between -8_Q0 and 8_Q0 */ const SKP_int32 Gain_Q26, /* I: gain */ SKP_int32 *S, /* I/O: state vector [16] */ SKP_int16 *out, /* O: output signal */ const SKP_int32 len /* I: signal length, must be multiple of 16 */ ) { SKP_int k; SKP_int32 SA, SB, Atmp, A_align_Q12[8], out32_Q10, out32; /* combine two A_Q12 values and ensure 32-bit alignment */ for( k = 0; k < 8; k++ ) { A_align_Q12[k] = (((SKP_int32)A_Q12[ 2*k ]) & 0x0000ffff) | SKP_LSHIFT( (SKP_int32)A_Q12[ 2*k + 1 ], 16 ); } /* S[] values are in Q14 */ /* NOTE: the code below loads two int16 values in an int32, and multiplies each using the */ /* SMLAWB and SMLAWT instructions. On a big-endian CPU the two int16 variables would be */ /* loaded in reverse order and the code will give the wrong result. In that case swapping */ /* the SMLAWB and SMLAWT instructions should solve the problem. */ for( k = 0; k < len; k++ ) { /* unrolled loop: prolog */ /* multiply-add two prediction coefficients per iteration */ SA = S[15]; Atmp = A_align_Q12[0]; SB = S[14]; S[14] = SA; out32_Q10 = SKP_SMULWB( SA, Atmp ); out32_Q10 = SKP_SMLAWT_ovflw( out32_Q10, SB, Atmp ); SA = S[13]; S[13] = SB; /* unrolled loop: main loop */ Atmp = A_align_Q12[1]; SB = S[12]; S[12] = SA; out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SA, Atmp ); out32_Q10 = SKP_SMLAWT_ovflw( out32_Q10, SB, Atmp ); SA = S[11]; S[11] = SB; Atmp = A_align_Q12[2]; SB = S[10]; S[10] = SA; out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SA, Atmp ); out32_Q10 = SKP_SMLAWT_ovflw( out32_Q10, SB, Atmp ); SA = S[9]; S[9] = SB; Atmp = A_align_Q12[3]; SB = S[8]; S[8] = SA; out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SA, Atmp ); out32_Q10 = SKP_SMLAWT_ovflw( out32_Q10, SB, Atmp ); SA = S[7]; S[7] = SB; Atmp = A_align_Q12[4]; SB = S[6]; S[6] = SA; out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SA, Atmp ); out32_Q10 = SKP_SMLAWT_ovflw( out32_Q10, SB, Atmp ); SA = S[5]; S[5] = SB; Atmp = A_align_Q12[5]; SB = S[4]; S[4] = SA; out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SA, Atmp ); out32_Q10 = SKP_SMLAWT_ovflw( out32_Q10, SB, Atmp ); SA = S[3]; S[3] = SB; Atmp = A_align_Q12[6]; SB = S[2]; S[2] = SA; out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SA, Atmp ); out32_Q10 = SKP_SMLAWT_ovflw( out32_Q10, SB, Atmp ); SA = S[1]; S[1] = SB; /* unrolled loop: epilog */ Atmp = A_align_Q12[7]; SB = S[0]; S[0] = SA; out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SA, Atmp ); out32_Q10 = SKP_SMLAWT_ovflw( out32_Q10, SB, Atmp ); /* unrolled loop: end */ /* apply gain to excitation signal and add to prediction */ out32_Q10 = SKP_ADD_SAT32( out32_Q10, SKP_SMULWB( Gain_Q26, in[k] ) ); /* scale to Q0 */ out32 = SKP_RSHIFT_ROUND( out32_Q10, 10 ); /* saturate output */ out[k] = (SKP_int16)SKP_SAT16( out32 ); /* move result into delay line */ S[15] = SKP_LSHIFT_SAT32( out32_Q10, 4 ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_detect_SWB_input.c0000644000175000017500000000755711513063445023132 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * Detect SWB input by measuring energy above 8 kHz. */ #include "SKP_Silk_main.h" void SKP_Silk_detect_SWB_input( SKP_Silk_detect_SWB_state *psSWBdetect, /* (I/O) encoder state */ const SKP_int16 samplesIn[], /* (I) input to encoder */ SKP_int nSamplesIn /* (I) length of input */ ) { SKP_int HP_8_kHz_len, i; SKP_int16 in_HP_8_kHz[ MAX_FRAME_LENGTH ]; SKP_int32 energy_32, shift; /* High pass filter with cutoff at 8 khz */ HP_8_kHz_len = SKP_min_int( nSamplesIn, MAX_FRAME_LENGTH ); HP_8_kHz_len = SKP_max_int( HP_8_kHz_len, 0 ); /* Cutoff around 9 khz */ /* A = conv(conv([8192,14613, 6868], [8192,12883, 7337]), [8192,11586, 7911]); */ /* B = conv(conv([575, -948, 575], [575, -221, 575]), [575, 104, 575]); */ SKP_Silk_biquad( samplesIn, SKP_Silk_SWB_detect_B_HP_Q13[ 0 ], SKP_Silk_SWB_detect_A_HP_Q13[ 0 ], psSWBdetect->S_HP_8_kHz[ 0 ], in_HP_8_kHz, HP_8_kHz_len ); for( i = 1; i < NB_SOS; i++ ) { SKP_Silk_biquad( in_HP_8_kHz, SKP_Silk_SWB_detect_B_HP_Q13[ i ], SKP_Silk_SWB_detect_A_HP_Q13[ i ], psSWBdetect->S_HP_8_kHz[ i ], in_HP_8_kHz, HP_8_kHz_len ); } /* Calculate energy in HP signal */ SKP_Silk_sum_sqr_shift( &energy_32, &shift, in_HP_8_kHz, HP_8_kHz_len ); /* Count concecutive samples above threshold, after adjusting threshold for number of input samples and shift */ if( energy_32 > SKP_RSHIFT( SKP_SMULBB( HP_8_KHZ_THRES, HP_8_kHz_len ), shift ) ) { psSWBdetect->ConsecSmplsAboveThres += nSamplesIn; if( psSWBdetect->ConsecSmplsAboveThres > CONCEC_SWB_SMPLS_THRES ) { psSWBdetect->SWB_detected = 1; } } else { psSWBdetect->ConsecSmplsAboveThres -= nSamplesIn; psSWBdetect->ConsecSmplsAboveThres = SKP_max( psSWBdetect->ConsecSmplsAboveThres, 0 ); } /* If sufficient speech activity and no SWB detected, we detect the signal as being WB */ if( ( psSWBdetect->ActiveSpeech_ms > WB_DETECT_ACTIVE_SPEECH_MS_THRES ) && ( psSWBdetect->SWB_detected == 0 ) ) { psSWBdetect->WB_detected = 1; } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_decode_indices_v4.c0000644000175000017500000002270011513063445023245 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main.h" /* Decode indices from payload */ void SKP_Silk_decode_indices_v4( SKP_Silk_decoder_state *psDec /* I/O State */ ) { SKP_int i, k, Ix, fs_kHz_dec, FrameIndex = 0, FrameTermination; SKP_int sigtype, QuantOffsetType, seed_int, nBytesUsed; SKP_int decode_absolute_lagIndex, delta_lagIndex, prev_lagIndex = 0; const SKP_Silk_NLSF_CB_struct *psNLSF_CB = NULL; SKP_Silk_range_coder_state *psRC = &psDec->sRC; /************************/ /* Decode sampling rate */ /************************/ /* only done for first frame of packet */ if( psDec->nFramesDecoded == 0 ) { SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_SamplingRates_CDF, SKP_Silk_SamplingRates_offset ); /* check that sampling rate is supported */ if( Ix < 0 || Ix > 3 ) { psRC->error = RANGE_CODER_ILLEGAL_SAMPLING_RATE; return; } fs_kHz_dec = SKP_Silk_SamplingRates_table[ Ix ]; SKP_Silk_decoder_set_fs( psDec, fs_kHz_dec ); FrameIndex = 0; FrameTermination = SKP_SILK_MORE_FRAMES; } while( FrameTermination == SKP_SILK_MORE_FRAMES ) { /*******************/ /* Decode VAD flag */ /*******************/ SKP_Silk_range_decoder( &psDec->vadFlagBuf[ FrameIndex ], psRC, SKP_Silk_vadflag_CDF, SKP_Silk_vadflag_offset ); /*******************************************/ /* Decode signal type and quantizer offset */ /*******************************************/ if( FrameIndex == 0 ) { /* first frame in packet: independent coding */ SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_type_offset_CDF, SKP_Silk_type_offset_CDF_offset ); } else { /* condidtional coding */ SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_type_offset_joint_CDF[ psDec->typeOffsetPrev ], SKP_Silk_type_offset_CDF_offset ); } sigtype = SKP_RSHIFT( Ix, 1 ); QuantOffsetType = Ix & 1; psDec->typeOffsetPrev = Ix; /****************/ /* Decode gains */ /****************/ /* first subframe */ if( FrameIndex == 0 ) { /* first frame in packet: independent coding */ SKP_Silk_range_decoder( &psDec->GainsIndices[ FrameIndex ][ 0 ], psRC, SKP_Silk_gain_CDF[ sigtype ], SKP_Silk_gain_CDF_offset ); } else { /* condidtional coding */ SKP_Silk_range_decoder( &psDec->GainsIndices[ FrameIndex ][ 0 ], psRC, SKP_Silk_delta_gain_CDF, SKP_Silk_delta_gain_CDF_offset ); } /* remaining subframes */ for( i = 1; i < NB_SUBFR; i++ ) { SKP_Silk_range_decoder( &psDec->GainsIndices[ FrameIndex ][ i ], psRC, SKP_Silk_delta_gain_CDF, SKP_Silk_delta_gain_CDF_offset ); } /**********************/ /* Decode LSF Indices */ /**********************/ /* Set pointer to LSF VQ CB for the current signal type */ psNLSF_CB = psDec->psNLSF_CB[ sigtype ]; /* Arithmetically decode NLSF path */ SKP_Silk_range_decoder_multi( psDec->NLSFIndices[ FrameIndex ], psRC, psNLSF_CB->StartPtr, psNLSF_CB->MiddleIx, psNLSF_CB->nStages ); /***********************************/ /* Decode LSF interpolation factor */ /***********************************/ SKP_Silk_range_decoder( &psDec->NLSFInterpCoef_Q2[ FrameIndex ], psRC, SKP_Silk_NLSF_interpolation_factor_CDF, SKP_Silk_NLSF_interpolation_factor_offset ); if( sigtype == SIG_TYPE_VOICED ) { /*********************/ /* Decode pitch lags */ /*********************/ /* Get lag index */ decode_absolute_lagIndex = 1; if( FrameIndex > 0 && psDec->sigtype[ FrameIndex - 1 ] == SIG_TYPE_VOICED ) { /* Decode Delta index */ SKP_Silk_range_decoder( &delta_lagIndex,psRC, SKP_Silk_pitch_delta_CDF, SKP_Silk_pitch_delta_CDF_offset ); if( delta_lagIndex < ( MAX_DELTA_LAG << 1 ) + 1 ) { delta_lagIndex = delta_lagIndex - MAX_DELTA_LAG; psDec->lagIndex[ FrameIndex ] = prev_lagIndex + delta_lagIndex; decode_absolute_lagIndex = 0; } } if( decode_absolute_lagIndex ) { /* Absolute decoding */ if( psDec->fs_kHz == 8 ) { SKP_Silk_range_decoder( &psDec->lagIndex[ FrameIndex ], psRC, SKP_Silk_pitch_lag_NB_CDF, SKP_Silk_pitch_lag_NB_CDF_offset ); } else if( psDec->fs_kHz == 12 ) { SKP_Silk_range_decoder( &psDec->lagIndex[ FrameIndex ], psRC, SKP_Silk_pitch_lag_MB_CDF, SKP_Silk_pitch_lag_MB_CDF_offset ); } else if( psDec->fs_kHz == 16 ) { SKP_Silk_range_decoder( &psDec->lagIndex[ FrameIndex ], psRC, SKP_Silk_pitch_lag_WB_CDF, SKP_Silk_pitch_lag_WB_CDF_offset ); } else { SKP_Silk_range_decoder( &psDec->lagIndex[ FrameIndex ], psRC, SKP_Silk_pitch_lag_SWB_CDF, SKP_Silk_pitch_lag_SWB_CDF_offset ); } } prev_lagIndex = psDec->lagIndex[ FrameIndex ]; /* Get countour index */ if( psDec->fs_kHz == 8 ) { /* Less codevectors used in 8 khz mode */ SKP_Silk_range_decoder( &psDec->contourIndex[ FrameIndex ], psRC, SKP_Silk_pitch_contour_NB_CDF, SKP_Silk_pitch_contour_NB_CDF_offset ); } else { /* Joint for 12, 16, and 24 khz */ SKP_Silk_range_decoder( &psDec->contourIndex[ FrameIndex ], psRC, SKP_Silk_pitch_contour_CDF, SKP_Silk_pitch_contour_CDF_offset ); } /********************/ /* Decode LTP gains */ /********************/ /* Decode PERIndex value */ SKP_Silk_range_decoder( &psDec->PERIndex[ FrameIndex ], psRC, SKP_Silk_LTP_per_index_CDF, SKP_Silk_LTP_per_index_CDF_offset ); for( k = 0; k < NB_SUBFR; k++ ) { SKP_Silk_range_decoder( &psDec->LTPIndex[ FrameIndex ][ k ], psRC, SKP_Silk_LTP_gain_CDF_ptrs[ psDec->PERIndex[ FrameIndex ] ], SKP_Silk_LTP_gain_CDF_offsets[ psDec->PERIndex[ FrameIndex ] ] ); } /**********************/ /* Decode LTP scaling */ /**********************/ SKP_Silk_range_decoder( &psDec->LTP_scaleIndex[ FrameIndex ], psRC, SKP_Silk_LTPscale_CDF, SKP_Silk_LTPscale_offset ); } /***************/ /* Decode seed */ /***************/ SKP_Silk_range_decoder( &seed_int, psRC, SKP_Silk_Seed_CDF, SKP_Silk_Seed_offset ); psDec->Seed[ FrameIndex ] = ( SKP_int32 )seed_int; /**************************************/ /* Decode Frame termination indicator */ /**************************************/ SKP_Silk_range_decoder( &FrameTermination, psRC, SKP_Silk_FrameTermination_v4_CDF, SKP_Silk_FrameTermination_v4_offset ); psDec->sigtype[ FrameIndex ] = sigtype; psDec->QuantOffsetType[ FrameIndex ] = QuantOffsetType; FrameIndex++; } /****************************************/ /* get number of bytes used so far */ /****************************************/ SKP_Silk_range_coder_get_length( psRC, &nBytesUsed ); psDec->nBytesLeft = psRC->bufferLength - nBytesUsed; if( psDec->nBytesLeft < 0 ) { psRC->error = RANGE_CODER_READ_BEYOND_BUFFER; } psDec->nFramesInPacket = FrameIndex; psDec->FrameTermination = FrameTermination; } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_resample_3_1.c0000644000175000017500000001171311513063445022167 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ /* * * SKP_Silk_resample_3_1.c * * * * Upsamples by a factor 3 * * * * Copyright 2008 (c), Skype Limited * * Date: 081113 * * */ #include "SKP_Silk_SigProc_FIX.h" #define IN_SUBFR_LEN_RESAMPLE_3_1 40 /* Resamples by a factor 3/1 */ void SKP_Silk_resample_3_1( SKP_int16 *out, /* O: Fs_high signal [inLen*3] */ SKP_int32 *S, /* I/O: State vector [7] */ const SKP_int16 *in, /* I: Fs_low signal [inLen] */ const SKP_int32 inLen /* I: Input length */ ) { SKP_int k, LSubFrameIn, LSubFrameOut; SKP_int32 out_tmp, idx, inLenTmp = inLen; SKP_int32 scratch00[ IN_SUBFR_LEN_RESAMPLE_3_1 ]; SKP_int32 scratch0[ 3 * IN_SUBFR_LEN_RESAMPLE_3_1 ]; SKP_int32 scratch1[ 3 * IN_SUBFR_LEN_RESAMPLE_3_1 ]; /* Coefficients for 3-fold resampling */ const SKP_int16 A30[ 2 ] = { 1773, 17818 }; const SKP_int16 A31[ 2 ] = { 4942, 25677 }; const SKP_int16 A32[ 2 ] = { 11786, 29304 }; while( inLenTmp > 0 ) { LSubFrameIn = SKP_min_int( IN_SUBFR_LEN_RESAMPLE_3_1, inLenTmp ); LSubFrameOut = SKP_SMULBB( 3, LSubFrameIn ); /* Convert Q15 -> Q25 */ for( k = 0; k < LSubFrameIn; k++ ) { scratch00[k] = SKP_LSHIFT( (SKP_int32)in[ k ], 10 ); } /* Allpass filtering */ /* Scratch size: 2 * 3* LSubFrame * sizeof(SKP_int32) */ SKP_Silk_allpass_int( scratch00, S + 1, A30[ 0 ], scratch1, LSubFrameIn ); SKP_Silk_allpass_int( scratch1, S + 2, A30[ 1 ], scratch0, LSubFrameIn ); SKP_Silk_allpass_int( scratch00, S + 3, A31[ 0 ], scratch1, LSubFrameIn ); SKP_Silk_allpass_int( scratch1, S + 4, A31[ 1 ], scratch0 + IN_SUBFR_LEN_RESAMPLE_3_1, LSubFrameIn ); SKP_Silk_allpass_int( scratch00, S + 5, A32[ 0 ], scratch1, LSubFrameIn ); SKP_Silk_allpass_int( scratch1, S + 6, A32[ 1 ], scratch0 + 2 * IN_SUBFR_LEN_RESAMPLE_3_1, LSubFrameIn ); /* Interleave three allpass outputs */ for( k = 0; k < LSubFrameIn; k++ ) { idx = SKP_SMULBB( 3, k ); scratch1[ idx ] = scratch0[ k ]; scratch1[ idx + 1 ] = scratch0[ k + IN_SUBFR_LEN_RESAMPLE_3_1 ]; scratch1[ idx + 2 ] = scratch0[ k + 2 * IN_SUBFR_LEN_RESAMPLE_3_1 ]; } /* Low-pass filtering */ SKP_Silk_lowpass_int( scratch1, S, scratch0, LSubFrameOut ); /* Saturate and convert to SKP_int16 */ for( k = 0; k < LSubFrameOut; k++ ) { out_tmp = scratch0[ k ]; out[ k ] = (SKP_int16) SKP_SAT16( SKP_RSHIFT_ROUND( out_tmp, 10 ) ); } in += LSubFrameIn; inLenTmp -= LSubFrameIn; out += LSubFrameOut; } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_find_LPC_FIX.c0000644000175000017500000001631611513063445022045 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" /* Finds LPC vector from correlations, and converts to NLSF */ void SKP_Silk_find_LPC_FIX( SKP_int NLSF_Q15[], /* O NLSFs */ SKP_int *interpIndex, /* O NLSF interpolation index, only used for NLSF interpolation */ const SKP_int prev_NLSFq_Q15[], /* I previous NLSFs, only used for NLSF interpolation */ const SKP_int useInterpolatedNLSFs, /* I Flag */ const SKP_int LPC_order, /* I LPC order */ const SKP_int16 x[], /* I Input signal */ const SKP_int subfr_length /* I Input signal subframe length including preceeding samples */ ) { SKP_int k; SKP_int32 a_Q16[ MAX_LPC_ORDER ]; SKP_int isInterpLower, shift; SKP_int16 S[ MAX_LPC_ORDER ]; SKP_int32 res_nrg0, res_nrg1; SKP_int rshift0, rshift1; /* Used only for LSF interpolation */ SKP_int32 a_tmp_Q16[ MAX_LPC_ORDER ], res_nrg_interp, res_nrg, res_tmp_nrg, res_nrg_2nd; SKP_int res_nrg_interp_Q, res_nrg_Q, res_tmp_nrg_Q, res_nrg_2nd_Q; SKP_int16 a_tmp_Q12[ MAX_LPC_ORDER ]; SKP_int NLSF0_Q15[ MAX_LPC_ORDER ]; SKP_int16 LPC_res[ ( MAX_FRAME_LENGTH + NB_SUBFR * MAX_LPC_ORDER ) / 2 ]; /* Default: no interpolation */ *interpIndex = 4; /* Burg AR analysis for the full frame */ SKP_Silk_burg_modified( &res_nrg, &res_nrg_Q, a_Q16, x, subfr_length, NB_SUBFR, FIND_LPC_COND_FAC_Q32, LPC_order ); if( useInterpolatedNLSFs == 1 ) { /* Optimal solution for last 10 ms */ SKP_Silk_burg_modified( &res_tmp_nrg, &res_tmp_nrg_Q, a_tmp_Q16, x + ( NB_SUBFR >> 1 ) * subfr_length, subfr_length, ( NB_SUBFR >> 1 ), FIND_LPC_COND_FAC_Q32, LPC_order ); /* subtract residual energy here, as that's easier than adding it to the */ /* residual energy of the first 10 ms in each iteration of the search below */ shift = res_tmp_nrg_Q - res_nrg_Q; if( shift >= 0 ) { if( shift < 32 ) { res_nrg = res_nrg - SKP_RSHIFT( res_tmp_nrg, shift ); } } else { SKP_assert( shift > -32 ); res_nrg = SKP_RSHIFT( res_nrg, -shift ) - res_tmp_nrg; res_nrg_Q = res_tmp_nrg_Q; } /* Convert to NLSFs */ SKP_Silk_A2NLSF( NLSF_Q15, a_tmp_Q16, LPC_order ); /* Search over interpolation indices to find the one with lowest residual energy */ res_nrg_2nd = SKP_int32_MAX; for( k = 3; k >= 0; k-- ) { /* Interpolate NLSFs for first half */ SKP_Silk_interpolate( NLSF0_Q15, prev_NLSFq_Q15, NLSF_Q15, k, LPC_order ); /* Convert to LPC for residual energy evaluation */ SKP_Silk_NLSF2A_stable( a_tmp_Q12, NLSF0_Q15, LPC_order ); /* Calculate residual energy with NLSF interpolation */ SKP_memset( S, 0, LPC_order * sizeof( SKP_int16 ) ); SKP_Silk_LPC_analysis_filter( x, a_tmp_Q12, S, LPC_res, 2 * subfr_length, LPC_order ); SKP_Silk_sum_sqr_shift( &res_nrg0, &rshift0, LPC_res + LPC_order, subfr_length - LPC_order ); SKP_Silk_sum_sqr_shift( &res_nrg1, &rshift1, LPC_res + LPC_order + subfr_length, subfr_length - LPC_order ); /* Add subframe energies from first half frame */ shift = rshift0 - rshift1; if( shift >= 0 ) { res_nrg1 = SKP_RSHIFT( res_nrg1, shift ); res_nrg_interp_Q = -rshift0; } else { res_nrg0 = SKP_RSHIFT( res_nrg0, -shift ); res_nrg_interp_Q = -rshift1; } res_nrg_interp = SKP_ADD32( res_nrg0, res_nrg1 ); /* Compare with first half energy without NLSF interpolation, or best interpolated value so far */ shift = res_nrg_interp_Q - res_nrg_Q; if( shift >= 0 ) { if( SKP_RSHIFT( res_nrg_interp, shift ) < res_nrg ) { isInterpLower = SKP_TRUE; } else { isInterpLower = SKP_FALSE; } } else { if( -shift < 32 ) { if( res_nrg_interp < SKP_RSHIFT( res_nrg, -shift ) ) { isInterpLower = SKP_TRUE; } else { isInterpLower = SKP_FALSE; } } else { isInterpLower = SKP_FALSE; } } /* Determine whether current interpolated NLSFs are best so far */ if( isInterpLower == SKP_TRUE ) { /* Interpolation has lower residual energy */ res_nrg = res_nrg_interp; res_nrg_Q = res_nrg_interp_Q; *interpIndex = k; } res_nrg_2nd = res_nrg_interp; res_nrg_2nd_Q = res_nrg_interp_Q; } } if( *interpIndex == 4 ) { /* NLSF interpolation is currently inactive, calculate NLSFs from full frame AR coefficients */ SKP_Silk_A2NLSF( NLSF_Q15, a_Q16, LPC_order ); } } h323plus/plugins/audio/SILK/silkSrc/SKP_Silk_process_gains_FIX.c0000644000175000017500000001400411513063445023256 0ustar markmark/*********************************************************************** Copyright (c) 2006-2010, Skype Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, (subject to the limitations in the disclaimer below) are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Skype Limited, nor the names of specific contributors, may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" /* Processing of gains */ void SKP_Silk_process_gains_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O Encoder state_FIX */ SKP_Silk_encoder_control_FIX *psEncCtrl /* I/O Encoder control_FIX */ ) { SKP_Silk_shape_state_FIX *psShapeSt = &psEnc->sShape; SKP_int k; SKP_int32 s_Q16, InvMaxSqrVal_Q16, gain, gain_squared, ResNrg, ResNrgPart; /* Gain reduction when LTP coding gain is high */ if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) { /*s = -0.5f * SKP_sigmoid( 0.25f * ( psEncCtrl->LTPredCodGain - 12.0f ) ); */ s_Q16 = -SKP_Silk_sigm_Q15( SKP_RSHIFT_ROUND( psEncCtrl->LTPredCodGain_Q7 - (12 << 7), 4 ) ); for( k = 0; k < NB_SUBFR; k++ ) { psEncCtrl->Gains_Q16[ k ] = SKP_SMLAWB( psEncCtrl->Gains_Q16[ k ], psEncCtrl->Gains_Q16[ k ], s_Q16 ); } } /* Limit the quantized signal */ /* 69 = 21.0f + 16/0.33 */ InvMaxSqrVal_Q16 = SKP_DIV32_16( SKP_Silk_log2lin( SKP_SMULWB( (69 << 7) - psEncCtrl->current_SNR_dB_Q7, SKP_FIX_CONST( 0.33, 16 )) ), psEnc->sCmn.subfr_length ); for( k = 0; k < NB_SUBFR; k++ ) { /* Soft limit on ratio residual energy and squared gains */ ResNrg = psEncCtrl->ResNrg[ k ]; ResNrgPart = SKP_SMULWW( ResNrg, InvMaxSqrVal_Q16 ); if( psEncCtrl->ResNrgQ[ k ] > 0 ) { if( psEncCtrl->ResNrgQ[ k ] < 32 ) { ResNrgPart = SKP_RSHIFT_ROUND( ResNrgPart, psEncCtrl->ResNrgQ[ k ] ); } else { ResNrgPart = 0; } } else if( psEncCtrl->ResNrgQ[k] != 0 ) { if( ResNrgPart > SKP_RSHIFT( SKP_int32_MAX, -psEncCtrl->ResNrgQ[ k ] ) ) { ResNrgPart = SKP_int32_MAX; } else { ResNrgPart = SKP_LSHIFT( ResNrgPart, -psEncCtrl->ResNrgQ[ k ] ); } } gain = psEncCtrl->Gains_Q16[ k ]; gain_squared = SKP_ADD_SAT32( ResNrgPart, SKP_SMMUL( gain, gain ) ); if( gain_squared < SKP_int16_MAX ) { /* recalculate with higher precision */ gain_squared = SKP_SMLAWW( SKP_LSHIFT( ResNrgPart, 16 ), gain, gain ); SKP_assert( gain_squared > 0 ); gain = SKP_Silk_SQRT_APPROX( gain_squared ); /* Q8 */ psEncCtrl->Gains_Q16[ k ] = SKP_LSHIFT_SAT32( gain, 8 ); /* Q16 */ } else { gain = SKP_Silk_SQRT_APPROX( gain_squared ); /* Q0 */ psEncCtrl->Gains_Q16[ k ] = SKP_LSHIFT_SAT32( gain, 16 ); /* Q16 */ } } /* Noise shaping quantization */ SKP_Silk_gains_quant( psEncCtrl->sCmn.GainsIndices, psEncCtrl->Gains_Q16, &psShapeSt->LastGainIndex, psEnc->sCmn.nFramesInPayloadBuf ); /* Set quantizer offset for voiced signals. Larger offset when LTP coding gain is low or tilt is high (ie low-pass) */ if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) { if( psEncCtrl->LTPredCodGain_Q7 + SKP_RSHIFT( psEncCtrl->input_tilt_Q15, 8 ) > ( 1 << 7 ) ) { psEncCtrl->sCmn.QuantOffsetType = 0; } else { psEncCtrl->sCmn.QuantOffsetType = 1; } } /* Quantizer boundary adjustment */ if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) { psEncCtrl->Lambda_Q10 = SKP_FIX_CONST( 1.3, 10 ) - SKP_SMULWB( SKP_FIX_CONST( 0.5, 18 ), psEnc->speech_activity_Q8 ) - SKP_SMULWB( SKP_FIX_CONST( 0.3, 12 ), psEncCtrl->input_quality_Q14 ) + SKP_SMULBB( SKP_FIX_CONST( 0.2, 10 ), psEncCtrl->sCmn.QuantOffsetType ) - SKP_SMULWB( SKP_FIX_CONST( 0.1, 12 ), psEncCtrl->coding_quality_Q14 ); } else { psEncCtrl->Lambda_Q10 = SKP_FIX_CONST( 1.3, 10 ) - SKP_SMULWB( SKP_FIX_CONST( 0.5, 18 ), psEnc->speech_activity_Q8 ) - SKP_SMULWB( SKP_FIX_CONST( 0.4, 12 ), psEncCtrl->input_quality_Q14 ) + SKP_SMULBB( SKP_FIX_CONST( 0.4, 10 ), psEncCtrl->sCmn.QuantOffsetType ) - SKP_SMULWB( SKP_FIX_CONST( 0.1, 12 ), psEncCtrl->coding_quality_Q14 ); } SKP_assert( psEncCtrl->Lambda_Q10 >= 0 ); SKP_assert( psEncCtrl->Lambda_Q10 < SKP_FIX_CONST( 2, 10 ) ); } h323plus/plugins/audio/SILK/silkcodec.cxx0000644000175000017500000004103611513063445017125 0ustar markmark/**************************************************************************** * Fixed Point SILK SDK 1.0.2 beta source code package * Copyright 2010 (c), Skype Limited * https://developer.skype.com/silk/ * Author of wrapper: Ravi Kalluri ****************************************************************************/ #define _CRT_NONSTDC_NO_DEPRECATE 1 #define _CRT_SECURE_NO_WARNINGS 1 #include #include #include #if defined(_MSC_VER) #define STRCMPI _strcmpi #else #define STRCMPI strcasecmp #endif #ifndef PLUGIN_CODEC_DLL_EXPORTS #include "plugin-config.h" #endif #include #include "silkSrc/SKP_Silk_SDK_API.h" static struct PluginCodec_information licenseInfo = { 1273081733, // version timestamp = Wed May 5 10:49:24 PDT 2010 "Skype Limited", // source code author "1.0.2", // source code version NULL, // source code email "https://developer.skype.com/silk/", // source code URL "Copyright 2010 (c), Skype Limited", // source code copyright "None", // source code license PluginCodec_License_None, // source code license "SILK", // codec description "Skype Limited", // codec author "1.0.2", // codec version NULL, // codec email "https://developer.skype.com/silk/", // codec URL "Copyright 2010 (c), Skype Limited", // codec copyright information "ITU-T General Public License (G.191)", // codec license PluginCodec_License_NoRoyalties // codec license code }; ///////////////////////////////////////////////////////////////////////////// #include "silkSrc/SKP_Silk_SDK_API.h" #include "silkSrc/SKP_Silk_control.h" #include "silkSrc/SKP_Silk_typedef.h" #include "silkSrc/SKP_Silk_errors.h" /* Codec specific settings */ #define MAX_BYTES_PER_FRAME 100 // Equals peak bitrate of 40 kbps #define MAX_INPUT_FRAMES 1 #define MAX_LBRR_DELAY 2 #define MAX_FRAME_LENGTH 480 // 20 ms frame #define SILK_FRAME_SAMPLES_8K 160 #define SILK_FRAME_SAMPLES_12K 240 #define SILK_FRAME_SAMPLES_16K 320 #define SILK_FRAME_SAMPLES_24K 480 // required bandwidth options in bits per second #define SILK_8K_SAMP_RATE 8000 #define SILK_12K_SAMP_RATE 12000 #define SILK_16K_SAMP_RATE 16000 #define SILK_24K_SAMP_RATE 24000 #define SILK_8K_MAX_BIT_RATE 20000 #define SILK_12K_MAX_BIT_RATE 25000 #define SILK_16K_MAX_BIT_RATE 30000 #define SILK_24K_MAX_BIT_RATE 40000 // bits and bytes per 20 ms frame, depending on bitrate // 60 bytes for 24000, 80 for 32000 #define SILK_FRAME_BITS(rate) ((SKP_int16)((rate) / 50)) #define SILK_FRAME_BYTES(rate) ((rate) / 400) ///////////////////////////////////////////////////////////////////////////// // Compress audio for transport struct SILKEncoderControl { SKP_SILK_SDK_EncControlStruct control; void * context; }; static void * SILKEncoderCreate (const struct PluginCodec_Definition * codec) { SKP_int ret; SKP_int32 encSizeBytes; struct SILKEncoderControl * ctxt; /* Create Encoder */ ret = SKP_Silk_SDK_Get_Encoder_Size( &encSizeBytes ); if( ret ) { printf( "SKP_Silk_create_encoder returned %d", ret ); } ctxt = (struct SILKEncoderControl*)malloc(1*(sizeof(struct SILKEncoderControl)+encSizeBytes)); ctxt->context = malloc( encSizeBytes ); // printf("\nbitrate in SILKEncoderCreate %d\n", codec->bitsPerSec); // printf( "\nSilky Encoder created"); ret = SKP_Silk_SDK_InitEncoder(ctxt->context, &ctxt->control ); if( ret ) { printf( "\nSKP_Silk_reset_encoder returned %d", ret ); } else { ctxt->control.sampleRate = codec->sampleRate; ctxt->control.packetSize = codec->parm.audio.samplesPerFrame; ctxt->control.packetLossPercentage = 0; ctxt->control.useInBandFEC = 0; ctxt->control.useDTX = 0; ctxt->control.complexity = 2; ctxt->control.bitRate = codec->bitsPerSec; } return ctxt; } static void SILKEncoderDestroy (const struct PluginCodec_Definition * codec, void * context) { struct SILKEncoderControl * ctxt = (struct SILKEncoderControl *)context; free (ctxt->context); free (ctxt); } static int SILKEncode (const struct PluginCodec_Definition * codec, void * context, const void * fromPtr, unsigned * fromLen, void * toPtr, unsigned * toLen, unsigned int * flag) { SKP_int ret; struct SILKEncoderControl * ctxt = (struct SILKEncoderControl *)context; /* Silk Encoder */ ret = SKP_Silk_SDK_Encode( ctxt->context, &ctxt->control, (const short *)fromPtr, (SKP_int16)*fromLen/2, (unsigned char *)toPtr, (short *)toLen); if( ret ) { printf( "\nSKP_Silk_Encode returned %i", ret ); } return 1; } ///////////////////////////////////////////////////////////////////////////// // Decoder struct SILKDecoderControl { SKP_SILK_SDK_DecControlStruct control; void * context; }; static void * SILKDecoderCreate (const struct PluginCodec_Definition * codec) { SKP_int16 ret; SKP_int32 decSizeBytes; struct SILKDecoderControl * ctxt; /* Create decoder */ ret = SKP_Silk_SDK_Get_Decoder_Size( &decSizeBytes ); if( ret ) { printf( "\nSKP_Silk_SDK_Get_Decoder_Size returned %d", ret ); } ctxt = (struct SILKDecoderControl*)malloc(1*(sizeof(struct SILKDecoderControl)+decSizeBytes)); ctxt->context = malloc( decSizeBytes ); ctxt->control.framesPerPacket = codec->parm.audio.maxFramesPerPacket; ctxt->control.sampleRate = codec->sampleRate; ctxt->control.frameSize = codec->parm.audio.samplesPerFrame; ctxt->control.inBandFECOffset = 0; ctxt->control.moreInternalDecoderFrames = 0; ret = SKP_Silk_SDK_InitDecoder( ctxt->context ); if( ret ) { printf( "\nSKP_Silk_InitDecoder returned %d", ret ); } return ctxt; } static void SILKDecoderDestroy (const struct PluginCodec_Definition * codec, void * context) { free (context); } static int SILKDecode (const struct PluginCodec_Definition * codec, void * context, const void * fromPtr, unsigned * fromLen, void * toPtr, unsigned * toLen, unsigned int * flag) { SKP_int16 ret=0; SKP_int16 len, tot_len; SKP_int16 *outPtr; struct SILKDecoderControl * ctxt = (struct SILKDecoderControl *)context; SKP_int frames; outPtr = (short *)toPtr; frames = 0; tot_len = 0; len = 0; do { ret = SKP_Silk_SDK_Decode( ctxt->context, &ctxt->control, 0, (const unsigned char *)fromPtr, (SKP_uint8)*fromLen, (short *)toPtr, &len ); if( ret ) { printf( "\nSKP_Silk_SDK_Decode returned %d", ret ); } frames++; *(short *)toPtr += len; tot_len += len; if( frames > MAX_INPUT_FRAMES ) { tot_len = 0; frames = 0; } } while( ctxt->control.moreInternalDecoderFrames ); *toLen = tot_len; return 1; } ///////////////////////////////////////////////////////////////////////////// // bitrate is a required SDP parameter in RFC 3047/5577 static const char BitRateOptionName[] = "BitRate"; static struct PluginCodec_Option BitRateOption = { PluginCodec_IntegerOption, // PluginCodec_OptionTypes BitRateOptionName, // Generic (human readable) option name 1, // Read Only flag PluginCodec_EqualMerge, // Merge mode "24000", // Initial value "bitrate", // SIP/SDP FMTP name "0", // SIP/SDP FMTP default value (option not included in FMTP if have this value) 0, // H.245 Generic Capability number and scope bits "12000", // Minimum value (enum values separated by ':') "40000" // Maximum value }; static struct PluginCodec_Option * const SILK_OptionTable[] = { &BitRateOption, NULL }; static int get_codec_options (const struct PluginCodec_Definition * defn, void * context, const char * name, void * parm, unsigned * parmLen) { if (context == NULL) return 0; /* if (defn->sampleRate == SILK_8K_SAMP_RATE) *(struct PluginCodec_Option const * const * *)parm = OptionTable8k; else if (defn->sampleRate == SILK_12K_SAMP_RATE) *(struct PluginCodec_Option const * const * *)parm = OptionTable12k; else if (defn->sampleRate == SILK_16K_SAMP_RATE) *(struct PluginCodec_Option const * const * *)parm = OptionTable16k; else *(struct PluginCodec_Option const * const * *)parm = OptionTable24k; */ *parmLen = 0; return 1; } static int encoder_set_options (const struct PluginCodec_Definition * defn, void * context, const char * name, void * parm, unsigned * parmLen) { int i; struct SILKEncoderControl * ctxt = (struct SILKEncoderControl *)context; char ** option = (char **)parm; for (i = 0; option[i] != NULL; i += 2) { if (ctxt && STRCMPI(option[0], PLUGINCODEC_OPTION_MAX_BIT_RATE) == 0) ctxt->control.bitRate = atoi(option[1]); if (ctxt && STRCMPI(option[0], PLUGINCODEC_OPTION_MAX_FRAME_SIZE) == 0) ctxt->control.sampleRate = atoi(option[1]); } return 1; } static struct PluginCodec_ControlDefn SILKEncodeControls[] = { { PLUGINCODEC_CONTROL_GET_CODEC_OPTIONS, get_codec_options }, { PLUGINCODEC_CONTROL_SET_CODEC_OPTIONS, encoder_set_options }, { NULL } }; static struct PluginCodec_ControlDefn SILKDecodeControls[] = { { PLUGINCODEC_CONTROL_GET_CODEC_OPTIONS, get_codec_options }, { NULL } }; #define OpalPluginCodec_Identifer_SILK "1.3.6.1.4.1.17090.1.3" #define OpalPluginCodec_Identifer_SILK_24K OpalPluginCodec_Identifer_SILK #define SILK_24K_Desc "SILK" #define SILK_24K_MediaFmt "SILK" #define SILK_24K_PayloadName "SILK" static unsigned int SILK_24K_ClockRate =24000; static unsigned int SILK_24K_MaxBitRate =SILK_24K_MAX_BIT_RATE; static unsigned int SILK_24K_Samples =SILK_FRAME_SAMPLES_24K; static unsigned int SILK_24K_BytesPerFrame =SILK_24K_MAX_BIT_RATE/400; static unsigned int SILK_24K_PayloadCode =100; static unsigned int SILK_24K_FRAMES =1; static unsigned int SILK_24K_SUPPORTMODE =240; // 8/12/16/24 k #define OpalPluginCodec_Identifer_SILK_16K OpalPluginCodec_Identifer_SILK #define SILK_16K_Desc "SILK" #define SILK_16K_MediaFmt "SILK" #define SILK_16K_PayloadName "SILK" static unsigned int SILK_16K_ClockRate =16000; static unsigned int SILK_16K_MaxBitRate =SILK_16K_MAX_BIT_RATE; static unsigned int SILK_16K_Samples =SILK_FRAME_SAMPLES_16K; static unsigned int SILK_16K_BytesPerFrame =SILK_16K_MAX_BIT_RATE/400; static unsigned int SILK_16K_PayloadCode =101; static unsigned int SILK_16K_FRAMES =1; static unsigned int SILK_16K_SUPPORTMODE =112; // 8/12/16/24 k #define SILKPLUGIN_CODEC(prefix) \ static const struct PluginCodec_H323GenericParameterDefinition prefix##_h323params[] = \ { \ {{1,0,0,0,0},1, PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_unsignedMin, {prefix##_FRAMES}}, \ {{1,0,0,0,0},2, PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_booleanArray, {prefix##_SUPPORTMODE}}, \ NULL \ }; \ static struct PluginCodec_H323GenericCodecData prefix##_Cap = \ { \ OpalPluginCodec_Identifer_##prefix, \ prefix##_MaxBitRate, \ 2, \ prefix##_h323params \ }; SILKPLUGIN_CODEC(SILK_16K); SILKPLUGIN_CODEC(SILK_24K); #define DECLARE_H323PARAM(prefix) \ { \ /* encoder */ \ PLUGIN_CODEC_VERSION_OPTIONS, /* codec API version */ \ &licenseInfo, /* license information */ \ PluginCodec_MediaTypeAudio | /* audio codec */ \ PluginCodec_InputTypeRaw | /* raw input data */ \ PluginCodec_OutputTypeRaw | /* raw output data */ \ PluginCodec_RTPTypeExplicit | /* specified RTP type */ \ PluginCodec_RTPTypeShared, /* RTP type shared */ \ prefix##_Desc, /* text decription */ \ "L16", /* source format */ \ prefix##_MediaFmt, /* destination format */ \ SILK_OptionTable, /* user data */ \ prefix##_ClockRate, /* samples per second */ \ prefix##_MaxBitRate, /* raw bits per second */ \ 20000, /* nanoseconds per frame */ \ {{ \ prefix##_Samples, /* samples per frame */ \ prefix##_BytesPerFrame, /* bytes per frame */ \ 1, /* recommended number of frames per packet */ \ 1, /* maximum number of frames per packet */ \ }}, \ prefix##_PayloadCode, /* IANA RTP payload code */ \ prefix##_PayloadName, /* RTP payload name */ \ SILKEncoderCreate, /* create codec function */ \ SILKEncoderDestroy, /* destroy codec */ \ SILKEncode, /* encode/decode */ \ SILKEncodeControls, /* codec controls */ \ PluginCodec_H323Codec_generic, /* h323CapabilityType */ \ (struct PluginCodec_H323GenericCodecData *)&prefix##_Cap /* h323CapabilityData */ \ }, \ { \ /* decoder */ \ PLUGIN_CODEC_VERSION_OPTIONS, /* codec API version */ \ &licenseInfo, /* license information */ \ PluginCodec_MediaTypeAudio | /* audio codec */ \ PluginCodec_InputTypeRaw | /* raw input data */ \ PluginCodec_OutputTypeRaw | /* raw output data */ \ PluginCodec_RTPTypeExplicit | /* specified RTP type */ \ PluginCodec_RTPTypeShared, /* RTP type shared */ \ prefix##_Desc, /* text decription */ \ prefix##_MediaFmt, /* source format */ \ "L16", /* destination format */ \ SILK_OptionTable, /* user data */ \ prefix##_ClockRate, /* samples per second */ \ prefix##_MaxBitRate, /* raw bits per second */ \ 20000, /* nanoseconds per frame */ \ {{ \ prefix##_Samples, /* samples per frame */ \ prefix##_BytesPerFrame, /* bytes per frame */ \ 1, /* recommended number of frames per packet */ \ 1, /* maximum number of frames per packet */ \ }}, \ prefix##_PayloadCode, /* IANA RTP payload code */ \ prefix##_PayloadName, /* RTP payload name */ \ SILKDecoderCreate, /* create codec function */ \ SILKDecoderDestroy, /* destroy codec */ \ SILKDecode, /* encode/decode */ \ SILKDecodeControls, /* decode controls */ \ PluginCodec_H323Codec_generic, /* h323CapabilityType */ \ (struct PluginCodec_H323GenericCodecData *)&prefix##_Cap /* h323CapabilityData */ \ } \ static struct PluginCodec_Definition SILKCodecDefn[] = { DECLARE_H323PARAM(SILK_16K) // ,DECLARE_H323PARAM(SILK_24K) }; extern "C" { PLUGIN_CODEC_IMPLEMENT_ALL(SILK, SILKCodecDefn, PLUGIN_CODEC_VERSION_OPTIONS) } h323plus/plugins/audio/SILK/Makefile0000644000175000017500000000727011513063445016103 0ustar markmarkSHLIB = silk_ptplugin.so VPATH = silkSrc: SRCS = \ silkCodec.c \ SKP_Silk_A2NLSF.c \ SKP_Silk_allpass_int.c \ SKP_Silk_ana_filt_bank_1.c \ SKP_Silk_apply_sine_window.c \ SKP_Silk_array_maxabs.c \ SKP_Silk_autocorr.c \ SKP_Silk_biquad.c \ SKP_Silk_biquad_alt.c \ SKP_Silk_burg_modified.c \ SKP_Silk_bwexpander.c \ SKP_Silk_bwexpander_32.c \ SKP_Silk_CNG.c \ SKP_Silk_code_signs.c \ SKP_Silk_control_codec_FIX.c \ SKP_Silk_corrMatrix_FIX.c \ SKP_Silk_create_init_destroy.c \ SKP_Silk_dec_API.c \ SKP_Silk_decode_core.c \ SKP_Silk_decode_frame.c \ SKP_Silk_decode_indices_v4.c \ SKP_Silk_decode_parameters.c \ SKP_Silk_decode_parameters_v4.c \ SKP_Silk_decode_pulses.c \ SKP_Silk_decoder_set_fs.c \ SKP_Silk_detect_SWB_input.c \ SKP_Silk_enc_API.c \ SKP_Silk_encode_frame_FIX.c \ SKP_Silk_encode_parameters.c \ SKP_Silk_encode_parameters_v4.c \ SKP_Silk_encode_pulses.c \ SKP_Silk_find_LPC_FIX.c \ SKP_Silk_find_LTP_FIX.c \ SKP_Silk_find_pitch_lags_FIX.c \ SKP_Silk_find_pred_coefs_FIX.c \ SKP_Silk_gain_quant.c \ SKP_Silk_HP_variable_cutoff_FIX.c \ SKP_Silk_init_encoder_FIX.c \ SKP_Silk_inner_prod_aligned.c \ SKP_Silk_interpolate.c \ SKP_Silk_k2a.c \ SKP_Silk_k2a_Q16.c \ SKP_Silk_LBRR_reset.c \ SKP_Silk_lin2log.c \ SKP_Silk_log2lin.c \ SKP_Silk_lowpass_int.c \ SKP_Silk_lowpass_short.c \ SKP_Silk_LPC_inv_pred_gain.c \ SKP_Silk_LPC_stabilize.c \ SKP_Silk_LPC_synthesis_filter.c \ SKP_Silk_LPC_synthesis_order16.c \ SKP_Silk_LP_variable_cutoff.c \ SKP_Silk_LSF_cos_table.c \ SKP_Silk_LTP_analysis_filter_FIX.c \ SKP_Silk_LTP_scale_ctrl_FIX.c \ SKP_Silk_MA.c \ SKP_Silk_NLSF2A.c \ SKP_Silk_NLSF2A_stable.c \ SKP_Silk_NLSF_MSVQ_decode.c \ SKP_Silk_NLSF_MSVQ_encode_FIX.c \ SKP_Silk_NLSF_stabilize.c \ SKP_Silk_NLSF_VQ_rate_distortion_FIX.c \ SKP_Silk_NLSF_VQ_sum_error_FIX.c \ SKP_Silk_NLSF_VQ_weights_laroia.c \ SKP_Silk_noise_shape_analysis_FIX.c \ SKP_Silk_NSQ.c \ SKP_Silk_NSQ_del_dec.c \ SKP_Silk_pitch_analysis_core.c \ SKP_Silk_pitch_est_tables.c \ SKP_Silk_PLC.c \ SKP_Silk_prefilter_FIX.c \ SKP_Silk_process_gains_FIX.c \ SKP_Silk_process_NLSFs_FIX.c \ SKP_Silk_pulses_to_bytes.c \ SKP_Silk_quant_LTP_gains_FIX.c \ SKP_Silk_range_coder.c \ SKP_Silk_regularize_correlations_FIX.c \ SKP_Silk_resample_1_2.c \ SKP_Silk_resample_1_2_coarse.c \ SKP_Silk_resample_1_2_coarsest.c \ SKP_Silk_resample_1_3.c \ SKP_Silk_resample_2_1_coarse.c \ SKP_Silk_resample_2_3.c \ SKP_Silk_resample_2_3_coarse.c \ SKP_Silk_resample_2_3_coarsest.c \ SKP_Silk_resample_2_3_rom.c \ SKP_Silk_resample_3_1.c \ SKP_Silk_resample_3_2.c \ SKP_Silk_resample_3_2_rom.c \ SKP_Silk_resample_3_4.c \ SKP_Silk_resample_4_3.c \ SKP_Silk_residual_energy16_FIX.c \ SKP_Silk_residual_energy_FIX.c \ SKP_Silk_scale_copy_vector16.c \ SKP_Silk_scale_vector.c \ SKP_Silk_schur.c \ SKP_Silk_schur64.c \ SKP_Silk_shell_coder.c \ SKP_Silk_sigm_Q15.c \ SKP_Silk_solve_LS_FIX.c \ SKP_Silk_sort.c \ SKP_Silk_sum_sqr_shift.c \ SKP_Silk_tables_gain.c \ SKP_Silk_tables_LTP.c \ SKP_Silk_tables_NLSF_CB0_10.c \ SKP_Silk_tables_NLSF_CB0_16.c \ SKP_Silk_tables_NLSF_CB1_10.c \ SKP_Silk_tables_NLSF_CB1_16.c \ SKP_Silk_tables_other.c \ SKP_Silk_tables_pitch_lag.c \ SKP_Silk_tables_pulses_per_block.c \ SKP_Silk_tables_sign.c \ SKP_Silk_tables_type_offset.c \ SKP_Silk_VAD.c \ SKP_Silk_VQ_nearest_neighbor_FIX.c CWARNERR= include ../../../mk/rules.mk h323plus/plugins/audio/SILK/silk_2008.vcproj0000644000175000017500000003635411513063445017310 0ustar markmark h323plus/plugins/audio/GSM0610/0000755000175000017500000000000011341106231014616 5ustar markmarkh323plus/plugins/audio/GSM0610/README0000644000175000017500000000320711341106231015500 0ustar markmark GSM 06.10 13 kbit/s RPE/LTP speech compression available -------------------------------------------------------- The Communications and Operating Systems Research Group (KBS) at the Technische Universitaet Berlin is currently working on a set of UNIX-based tools for computer-mediated telecooperation that will be made freely available. As part of this effort we are publishing an implementation of the European GSM 06.10 provisional standard for full-rate speech transcoding, prI-ETS 300 036, which uses RPE/LTP (residual pulse excitation/long term prediction) coding at 13 kbit/s. GSM 06.10 compresses frames of 160 13-bit samples (8 kHz sampling rate, i.e. a frame rate of 50 Hz) into 260 bits; for compatibility with typical UNIX applications, our implementation turns frames of 160 16-bit linear samples into 33-byte frames (1650 Bytes/s). The quality of the algorithm is good enough for reliable speaker recognition; even music often survives transcoding in recognizable form (given the bandwidth limitations of 8 kHz sampling rate). The interfaces offered are a front end modelled after compress(1), and a library API. Compression and decompression run faster than realtime on most SPARCstations. The implementation has been verified against the ETSI standard test patterns. Jutta Degener (jutta@cs.tu-berlin.de) Carsten Bormann (cabo@cs.tu-berlin.de) Communications and Operating Systems Research Group, TU Berlin Fax: +49.30.31425156, Phone: +49.30.31424315 -- Copyright 1992 by Jutta Degener and Carsten Bormann, Technische Universitaet Berlin. See the accompanying file "COPYRIGHT" for details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. h323plus/plugins/audio/GSM0610/inc/0000755000175000017500000000000011341106231015367 5ustar markmarkh323plus/plugins/audio/GSM0610/inc/private.h0000644000175000017500000001702111341106231017213 0ustar markmark/* * private.h * * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ #ifndef PRIVATE_H #define PRIVATE_H typedef short word; /* 16 bit signed int */ typedef long longword; /* 32 bit signed int */ typedef unsigned short uword; /* unsigned word */ typedef unsigned long ulongword; /* unsigned longword */ struct gsm_state { word dp0[ 280 ]; word z1; /* preprocessing.c, Offset_com. */ longword L_z2; /* Offset_com. */ int mp; /* Preemphasis */ word u[8]; /* short_term_aly_filter.c */ word LARpp[2][8]; /* */ word j; /* */ word ltp_cut; /* long_term.c, LTP crosscorr. */ word nrp; /* 40 */ /* long_term.c, synthesis */ word v[9]; /* short_term.c, synthesis */ word msr; /* decoder.c, Postprocessing */ char verbose; /* only used if !NDEBUG */ char fast; /* only used if FAST */ char wav_fmt; /* only used if WAV49 defined */ unsigned char frame_index; /* odd/even chaining */ unsigned char frame_chain; /* half-byte to carry forward */ }; #define MIN_WORD (-32767 - 1) #define MAX_WORD 32767 #define MIN_LONGWORD (-2147483647 - 1) #define MAX_LONGWORD 2147483647 #ifdef SASR /* flag: >> is a signed arithmetic shift right */ #undef SASR #define SASR(x, by) ((x) >> (by)) #else #define SASR(x, by) ((x) >= 0 ? (x) >> (by) : (~(-((x) + 1) >> (by)))) #endif /* SASR */ #include "proto.h" /* * Prototypes from add.c */ extern word gsm_mult P((word a, word b)); extern longword gsm_L_mult P((word a, word b)); extern word gsm_mult_r P((word a, word b)); extern word gsm_div P((word num, word denum)); extern word gsm_add P(( word a, word b )); extern longword gsm_L_add P(( longword a, longword b )); extern word gsm_sub P((word a, word b)); extern longword gsm_L_sub P((longword a, longword b)); extern word gsm_abs P((word a)); extern word gsm_norm P(( longword a )); extern longword gsm_L_asl P((longword a, int n)); extern word gsm_asl P((word a, int n)); extern longword gsm_L_asr P((longword a, int n)); extern word gsm_asr P((word a, int n)); /* * Inlined functions from add.h */ /* * #define GSM_MULT_R(a, b) (* word a, word b, !(a == b == MIN_WORD) *) \ * (0x0FFFF & SASR(((longword)(a) * (longword)(b) + 16384), 15)) */ #define GSM_MULT_R(a, b) /* word a, word b, !(a == b == MIN_WORD) */ \ (SASR( ((longword)(a) * (longword)(b) + 16384), 15 )) # define GSM_MULT(a,b) /* word a, word b, !(a == b == MIN_WORD) */ \ (SASR( ((longword)(a) * (longword)(b)), 15 )) # define GSM_L_MULT(a, b) /* word a, word b */ \ (((longword)(a) * (longword)(b)) << 1) # define GSM_L_ADD(a, b) \ ( (a) < 0 ? ( (b) >= 0 ? (a) + (b) \ : (utmp = (ulongword)-((a) + 1) + (ulongword)-((b) + 1)) \ >= MAX_LONGWORD ? MIN_LONGWORD : -(longword)utmp-2 ) \ : ((b) <= 0 ? (a) + (b) \ : (utmp = (ulongword)(a) + (ulongword)(b)) >= MAX_LONGWORD \ ? MAX_LONGWORD : utmp)) /* * # define GSM_ADD(a, b) \ * ((ltmp = (longword)(a) + (longword)(b)) >= MAX_WORD \ * ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp) */ /* Nonportable, but faster: */ #define GSM_ADD(a, b) \ ((ulongword)((ltmp = (longword)(a) + (longword)(b)) - MIN_WORD) > \ MAX_WORD - MIN_WORD ? (ltmp > 0 ? MAX_WORD : MIN_WORD) : ltmp) # define GSM_SUB(a, b) \ ((ltmp = (longword)(a) - (longword)(b)) >= MAX_WORD \ ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp) # define GSM_ABS(a) ((a) < 0 ? ((a) == MIN_WORD ? MAX_WORD : -(a)) : (a)) /* Use these if necessary: # define GSM_MULT_R(a, b) gsm_mult_r(a, b) # define GSM_MULT(a, b) gsm_mult(a, b) # define GSM_L_MULT(a, b) gsm_L_mult(a, b) # define GSM_L_ADD(a, b) gsm_L_add(a, b) # define GSM_ADD(a, b) gsm_add(a, b) # define GSM_SUB(a, b) gsm_sub(a, b) # define GSM_ABS(a) gsm_abs(a) */ /* * More prototypes from implementations.. */ extern void Gsm_Coder P(( struct gsm_state * S, word * s, /* [0..159] samples IN */ word * LARc, /* [0..7] LAR coefficients OUT */ word * Nc, /* [0..3] LTP lag OUT */ word * bc, /* [0..3] coded LTP gain OUT */ word * Mc, /* [0..3] RPE grid selection OUT */ word * xmaxc,/* [0..3] Coded maximum amplitude OUT */ word * xMc /* [13*4] normalized RPE samples OUT */)); extern void Gsm_Long_Term_Predictor P(( /* 4x for 160 samples */ struct gsm_state * S, word * d, /* [0..39] residual signal IN */ word * dp, /* [-120..-1] d' IN */ word * e, /* [0..40] OUT */ word * dpp, /* [0..40] OUT */ word * Nc, /* correlation lag OUT */ word * bc /* gain factor OUT */)); extern void Gsm_LPC_Analysis P(( struct gsm_state * S, word * s, /* 0..159 signals IN/OUT */ word * LARc)); /* 0..7 LARc's OUT */ extern void Gsm_Preprocess P(( struct gsm_state * S, word * s, word * so)); extern void Gsm_Encoding P(( struct gsm_state * S, word * e, word * ep, word * xmaxc, word * Mc, word * xMc)); extern void Gsm_Short_Term_Analysis_Filter P(( struct gsm_state * S, word * LARc, /* coded log area ratio [0..7] IN */ word * d /* st res. signal [0..159] IN/OUT */)); extern void Gsm_Decoder P(( struct gsm_state * S, word * LARcr, /* [0..7] IN */ word * Ncr, /* [0..3] IN */ word * bcr, /* [0..3] IN */ word * Mcr, /* [0..3] IN */ word * xmaxcr, /* [0..3] IN */ word * xMcr, /* [0..13*4] IN */ word * s)); /* [0..159] OUT */ extern void Gsm_Decoding P(( struct gsm_state * S, word xmaxcr, word Mcr, word * xMcr, /* [0..12] IN */ word * erp)); /* [0..39] OUT */ extern void Gsm_Long_Term_Synthesis_Filtering P(( struct gsm_state* S, word Ncr, word bcr, word * erp, /* [0..39] IN */ word * drp)); /* [-120..-1] IN, [0..40] OUT */ void Gsm_RPE_Decoding P(( struct gsm_state *S, word xmaxcr, word Mcr, word * xMcr, /* [0..12], 3 bits IN */ word * erp)); /* [0..39] OUT */ void Gsm_RPE_Encoding P(( struct gsm_state * S, word * e, /* -5..-1][0..39][40..44 IN/OUT */ word * xmaxc, /* OUT */ word * Mc, /* OUT */ word * xMc)); /* [0..12] OUT */ extern void Gsm_Short_Term_Synthesis_Filter P(( struct gsm_state * S, word * LARcr, /* log area ratios [0..7] IN */ word * drp, /* received d [0...39] IN */ word * s)); /* signal s [0..159] OUT */ extern void Gsm_Update_of_reconstructed_short_time_residual_signal P(( word * dpp, /* [0...39] IN */ word * ep, /* [0...39] IN */ word * dp)); /* [-120...-1] IN/OUT */ /* * Tables from table.c */ #ifndef GSM_TABLE_C extern word gsm_A[8], gsm_B[8], gsm_MIC[8], gsm_MAC[8]; extern word gsm_INVA[8]; extern word gsm_DLB[4], gsm_QLB[4]; extern word gsm_H[11]; extern word gsm_NRFAC[8]; extern word gsm_FAC[8]; #endif /* GSM_TABLE_C */ /* * Debugging */ #ifdef NDEBUG # define gsm_debug_words(a, b, c, d) /* nil */ # define gsm_debug_longwords(a, b, c, d) /* nil */ # define gsm_debug_word(a, b) /* nil */ # define gsm_debug_longword(a, b) /* nil */ #else /* !NDEBUG => DEBUG */ extern void gsm_debug_words P((char * name, int, int, word *)); extern void gsm_debug_longwords P((char * name, int, int, longword *)); extern void gsm_debug_longword P((char * name, longword)); extern void gsm_debug_word P((char * name, word)); #endif /* !NDEBUG */ #include "unproto.h" #endif /* PRIVATE_H */ h323plus/plugins/audio/GSM0610/inc/proto.h0000644000175000017500000000276111341106231016711 0ustar markmark/* * proto.h * * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ #ifndef PROTO_H #define PROTO_H #if __cplusplus # define NeedFunctionPrototypes 1 #endif #if __STDC__ # define NeedFunctionPrototypes 1 #endif #ifdef _NO_PROTO # undef NeedFunctionPrototypes #endif #undef P /* gnu stdio.h actually defines this... */ #undef P0 #undef P1 #undef P2 #undef P3 #undef P4 #undef P5 #undef P6 #undef P7 #undef P8 #if NeedFunctionPrototypes # define P( protos ) protos # define P0() (void) # define P1(x, a) (a) # define P2(x, a, b) (a, b) # define P3(x, a, b, c) (a, b, c) # define P4(x, a, b, c, d) (a, b, c, d) # define P5(x, a, b, c, d, e) (a, b, c, d, e) # define P6(x, a, b, c, d, e, f) (a, b, c, d, e, f) # define P7(x, a, b, c, d, e, f, g) (a, b, c, d, e, f, g) # define P8(x, a, b, c, d, e, f, g, h) (a, b, c, d, e, f, g, h) #else /* !NeedFunctionPrototypes */ # define P( protos ) ( /* protos */ ) # define P0() () # define P1(x, a) x a; # define P2(x, a, b) x a; b; # define P3(x, a, b, c) x a; b; c; # define P4(x, a, b, c, d) x a; b; c; d; # define P5(x, a, b, c, d, e) x a; b; c; d; e; # define P6(x, a, b, c, d, e, f) x a; b; c; d; e; f; # define P7(x, a, b, c, d, e, f, g) x a; b; c; d; e; f; g; # define P8(x, a, b, c, d, e, f, g, h) x a; b; c; d; e; f; g; h; #endif /* !NeedFunctionPrototypes */ #endif /* PROTO_H */ h323plus/plugins/audio/GSM0610/inc/config.h0000644000175000017500000000242311341106231017006 0ustar markmark/* * config.h * * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ #ifndef CONFIG_H #define CONFIG_H /*efine SIGHANDLER_T int * signal handlers are void */ /*efine HAS_SYSV_SIGNAL 1 * sigs not blocked/reset? */ #define HAS_STDLIB_H 1 /* /usr/include/stdlib.h */ /*efine HAS_LIMITS_H 1 * /usr/include/limits.h */ #define HAS_FCNTL_H 1 /* /usr/include/fcntl.h */ /*efine HAS_ERRNO_DECL 1 * errno.h declares errno */ #define HAS_FSTAT 1 /* fstat syscall */ #define HAS_FCHMOD 1 /* fchmod syscall */ #define HAS_CHMOD 1 /* chmod syscall */ #define HAS_FCHOWN 1 /* fchown syscall */ #define HAS_CHOWN 1 /* chown syscall */ /*efine HAS__FSETMODE 1 * _fsetmode -- set file mode */ #define HAS_STRING_H 1 /* /usr/include/string.h */ /*efine HAS_STRINGS_H 1 * /usr/include/strings.h */ #define HAS_UNISTD_H 1 /* /usr/include/unistd.h */ #define HAS_UTIME 1 /* POSIX utime(path, times) */ /*efine HAS_UTIMES 1 * use utimes() syscall instead */ #define HAS_UTIME_H 1 /* UTIME header file */ /*efine HAS_UTIMBUF 1 * struct utimbuf */ /*efine HAS_UTIMEUSEC 1 * microseconds in utimbuf? */ #endif /* CONFIG_H */ h323plus/plugins/audio/GSM0610/inc/unproto.h0000644000175000017500000000060211341106231017244 0ustar markmark/* * unproto.h * * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ #ifdef PROTO_H /* sic */ #undef PROTO_H #undef P #undef P0 #undef P1 #undef P2 #undef P3 #undef P4 #undef P5 #undef P6 #undef P7 #undef P8 #endif /* PROTO_H */ h323plus/plugins/audio/GSM0610/inc/gsm.h0000644000175000017500000000307311341106231016331 0ustar markmark/* * gsm.h * * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ #ifndef GSM_H #define GSM_H #ifdef __cplusplus # define NeedFunctionPrototypes 1 #endif #if __STDC__ # define NeedFunctionPrototypes 1 #endif #ifdef _NO_PROTO # undef NeedFunctionPrototypes #endif #ifdef NeedFunctionPrototypes # include /* for FILE * */ #endif #undef GSM_P #if NeedFunctionPrototypes # define GSM_P( protos ) protos #else # define GSM_P( protos ) ( /* protos */ ) #endif /* * Interface */ typedef struct gsm_state * gsm; typedef short gsm_signal; /* signed 16 bit */ typedef unsigned char gsm_byte; typedef gsm_byte gsm_frame[33]; /* 33 * 8 bits */ #define GSM_MAGIC 0xD /* 13 kbit/s RPE-LTP */ #define GSM_PATCHLEVEL 10 #define GSM_MINOR 0 #define GSM_MAJOR 1 #define GSM_OPT_VERBOSE 1 #define GSM_OPT_FAST 2 #define GSM_OPT_LTP_CUT 3 #define GSM_OPT_WAV49 4 #define GSM_OPT_FRAME_INDEX 5 #define GSM_OPT_FRAME_CHAIN 6 extern gsm gsm_create GSM_P((void)); extern void gsm_destroy GSM_P((gsm)); extern int gsm_print GSM_P((FILE *, gsm, gsm_byte *)); extern int gsm_option GSM_P((gsm, int, int *)); extern void gsm_encode GSM_P((gsm, gsm_signal *, gsm_byte *)); extern int gsm_decode GSM_P((gsm, gsm_byte *, gsm_signal *)); extern int gsm_explode GSM_P((gsm, gsm_byte *, gsm_signal *)); extern void gsm_implode GSM_P((gsm, gsm_signal *, gsm_byte *)); #undef GSM_P #endif /* GSM_H */ h323plus/plugins/audio/GSM0610/COPYRIGHT0000644000175000017500000000126211341106231016112 0ustar markmarkCopyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann, Technische Universitaet Berlin Any use of this software is permitted provided that this notice is not removed and that neither the authors nor the Technische Universitaet Berlin are deemed to have made any representations as to the suitability of this software for any purpose nor are held responsible for any defects of this software. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. As a matter of courtesy, the authors request to be informed about uses this software has found, about bugs in this software, and about any improvements that may be of general interest. Berlin, 28.11.1994 Jutta Degener Carsten Bormann h323plus/plugins/audio/GSM0610/Makefile.in0000644000175000017500000000566211341106231016674 0ustar markmark# # Makefile for GSM 06.10 # # Copyright (C) 2004 Post Increment, All Rights Reserved # # The contents of this file are subject to the Mozilla Public License # Version 1.0 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is Open H323 library. # # The Initial Developer of the Original Code is Post Increment # # Contributor(s): ______________________________________. # # $Revision: 1.1 $ # $Author: shorne $ # $Date: 2010/02/24 02:19:05 $ AC_PLUGIN_DIR=@AC_PLUGIN_DIR@ prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ target_os=@target_os@ GSM_SYSTEM=@GSM_SYSTEM@ GSM_LIBS=@GSM_LIBS@ GSM_CFLAGS=@GSM_CFLAGS@ SONAME = gsm0610 H323_EMBEDDED_GSM=@H323_EMBEDDED_GSM@ SRCDIR = ./src OBJDIR = ./obj PLUGINDIR =../.. CC =@CC@ CFLAGS =@CFLAGS@ CXX =@CXX@ LDSO =@LDSO@ PLUGINEXT =@PLUGINEXT@ STDCCFLAGS =@STDCCFLAGS@ LDFLAGS =@LDFLAGS@ EXTRACFLAGS =-I$(PLUGINDIR) SRCS += gsm06_10_codec.c ifeq ($(GSM_SYSTEM),no) SRCS += $(SRCDIR)/gsm_create.c \ $(SRCDIR)/gsm_destroy.c \ $(SRCDIR)/gsm_decode.c \ $(SRCDIR)/gsm_encode.c \ $(SRCDIR)/gsm_option.c \ $(SRCDIR)/code.c \ $(SRCDIR)/decode.c \ $(SRCDIR)/add.c \ $(SRCDIR)/gsm_lpc.c \ $(SRCDIR)/rpe.c \ $(SRCDIR)/preprocess.c \ $(SRCDIR)/long_term.c \ $(SRCDIR)/short_term.c \ $(SRCDIR)/table.c EXTRALIBS = GSM_CFLAGS = -I./inc -DWAV49 -DNeedFunctionPrototypes=1 else EXTRALIBS = $(GSM_LIBS) endif vpath %.o $(OBJDIR) vpath %.c $(SRCDIR) ifeq ($(H323_EMBEDDED_GSM),1) EXTRACCFLAGS=-DOPAL_STATIC_CODEC endif ifeq ($(VERBOSE),) Q_CC = @echo [CC] `echo $< | sed s^@OPALDIR@/^^` ; Q_LD = @echo [LD] `echo $(PLUGIN) | sed s^@OPALDIR@/^^` ; endif $(OBJDIR)/%.o : %.c @mkdir -p $(OBJDIR) >/dev/null 2>&1 $(Q_CC)$(CC) -I../../../include $(EXTRACCFLAGS) $(STDCCFLAGS) $(OPTCCFLAGS) $(GSM_CFLAGS) $(EXTRACFLAGS) $(CFLAGS) -c $< -o $@ PLUGIN = ./gsm0610_audio_pwplugin.$(PLUGINEXT) STATIC = ./libgsm0610_audio_s.a OBJECTS = $(addprefix $(OBJDIR)/,$(patsubst %.c,%.o,$(notdir $(SRCS)))) ifeq ($(H323_EMBEDDED_GSM),1) $(STATIC): $(OBJECTS) $(AR) rcs $@ $^ install: uninstall: else $(PLUGIN): $(OBJECTS) ifeq (solaris,$(findstring solaris,$(target_os))) $(Q_LD)$(CC) $(LDSO) $@ -o $@ $^ $(EXTRALIBS) else $(Q_LD)$(CC) $(LDSO) -o $@ $^ $(EXTRALIBS) endif endif install: mkdir -p $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR) install $(PLUGIN) $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR) uninstall: rm -f $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR)/$(PLUGIN) clean: rm -f $(OBJECTS) $(PLUGIN) ########################################### h323plus/plugins/audio/GSM0610/gsm0610_2008.vcproj0000644000175000017500000004203211341106231017612 0ustar markmark h323plus/plugins/audio/GSM0610/PART_OF_TOAST0000644000175000017500000000020111341106231016636 0ustar markmark This library is part of the toast software. You can get the complete package at: http://kbs.cs.tu-berlin.de/~jutta/toast.html h323plus/plugins/audio/GSM0610/gsm0610.dsp0000644000175000017500000001573311341106231016434 0ustar markmark# Microsoft Developer Studio Project File - Name="gsm0610" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=gsm0610 - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "gsm0610.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "gsm0610.mak" CFG="gsm0610 - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "gsm0610 - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "gsm0610 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "gsm0610 - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "..\..\Release" # PROP Intermediate_Dir "..\..\Release\GSM" # PROP Ignore_Export_Lib 1 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "gsm0610_EXPORTS" /Yu"stdafx.h" /FD /c # ADD CPP /nologo /MD /W3 /GR /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_CODEC_DLL_EXPORTS" /FD /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "NDEBUG" # ADD RSC /l 0xc09 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /machine:I386 /out:"../../Release/gsm0610_pwplugin.dll" /implib:"..\..\Release\GSM/gsm0610.lib" !ELSEIF "$(CFG)" == "gsm0610 - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "..\..\Debug" # PROP Intermediate_Dir "..\..\Debug\GSM" # PROP Ignore_Export_Lib 1 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "gsm0610_EXPORTS" /Yu"stdafx.h" /FD /GZ /c # ADD CPP /nologo /MDd /W4 /Gm /GR /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_CODEC_DLL_EXPORTS" /FD /GZ /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "_DEBUG" # ADD RSC /l 0xc09 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /debug /machine:I386 /out:"../../Debug/gsm0610_pwplugin.dll" /implib:"..\..\Debug\GSM/gsm0610.lib" /pdbtype:sept # SUBTRACT LINK32 /pdb:none !ENDIF # Begin Target # Name "gsm0610 - Win32 Release" # Name "gsm0610 - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\gsm06_10_codec.c # End Source File # End Group # Begin Group "GSM Files" # PROP Default_Filter ".c" # Begin Group "GSM Source" # PROP Default_Filter "" # Begin Source File SOURCE=.\src\add.c # ADD CPP /w /W0 /I "./inc" /D NeedFunctionPrototypes=1 /D "WAV49" # SUBTRACT CPP /D "PLUGIN_CODEC_DLL_EXPORTS" # End Source File # Begin Source File SOURCE=.\src\code.c # ADD CPP /w /W0 /I "./inc" /D NeedFunctionPrototypes=1 /D "WAV49" # SUBTRACT CPP /D "PLUGIN_CODEC_DLL_EXPORTS" # End Source File # Begin Source File SOURCE=.\src\decode.c # ADD CPP /w /W0 /I "./inc" /D NeedFunctionPrototypes=1 /D "WAV49" # SUBTRACT CPP /D "PLUGIN_CODEC_DLL_EXPORTS" # End Source File # Begin Source File SOURCE=.\src\gsm_create.c # ADD CPP /w /W0 /I "./inc" /D NeedFunctionPrototypes=1 /D "WAV49" # SUBTRACT CPP /D "PLUGIN_CODEC_DLL_EXPORTS" # End Source File # Begin Source File SOURCE=.\src\gsm_decode.c # ADD CPP /w /W0 /I "./inc" /D NeedFunctionPrototypes=1 /D "WAV49" # SUBTRACT CPP /D "PLUGIN_CODEC_DLL_EXPORTS" # End Source File # Begin Source File SOURCE=.\src\gsm_destroy.c # ADD CPP /w /W0 /I "./inc" /D NeedFunctionPrototypes=1 /D "WAV49" # SUBTRACT CPP /D "PLUGIN_CODEC_DLL_EXPORTS" # End Source File # Begin Source File SOURCE=.\src\gsm_encode.c # ADD CPP /w /W0 /I "./inc" /D NeedFunctionPrototypes=1 /D "WAV49" # SUBTRACT CPP /D "PLUGIN_CODEC_DLL_EXPORTS" # End Source File # Begin Source File SOURCE=.\src\gsm_lpc.c # ADD CPP /w /W0 /I "./inc" /D NeedFunctionPrototypes=1 /D "WAV49" # SUBTRACT CPP /D "PLUGIN_CODEC_DLL_EXPORTS" # End Source File # Begin Source File SOURCE=.\src\gsm_option.c # ADD CPP /w /W0 /I "./inc" /D NeedFunctionPrototypes=1 /D "WAV49" # SUBTRACT CPP /D "PLUGIN_CODEC_DLL_EXPORTS" # End Source File # Begin Source File SOURCE=.\src\long_term.c # ADD CPP /w /W0 /I "./inc" /D NeedFunctionPrototypes=1 /D "WAV49" # SUBTRACT CPP /D "PLUGIN_CODEC_DLL_EXPORTS" # End Source File # Begin Source File SOURCE=.\src\preprocess.c # ADD CPP /w /W0 /I "./inc" /D NeedFunctionPrototypes=1 /D "WAV49" # SUBTRACT CPP /D "PLUGIN_CODEC_DLL_EXPORTS" # End Source File # Begin Source File SOURCE=.\src\rpe.c # ADD CPP /w /W0 /I "./inc" /D NeedFunctionPrototypes=1 /D "WAV49" # SUBTRACT CPP /D "PLUGIN_CODEC_DLL_EXPORTS" # End Source File # Begin Source File SOURCE=.\src\short_term.c # ADD CPP /w /W0 /I "./inc" /D NeedFunctionPrototypes=1 /D "WAV49" # SUBTRACT CPP /D "PLUGIN_CODEC_DLL_EXPORTS" # End Source File # Begin Source File SOURCE=src\table.c # ADD CPP /w /W0 /I "./inc" /D NeedFunctionPrototypes=1 /D "WAV49" # SUBTRACT CPP /D "PLUGIN_CODEC_DLL_EXPORTS" # End Source File # End Group # Begin Group "GSM Headers" # PROP Default_Filter "" # Begin Source File SOURCE=.\src\gsm\inc\config.h # End Source File # Begin Source File SOURCE=.\src\gsm\inc\gsm.h # End Source File # Begin Source File SOURCE=.\src\gsm\inc\private.h # End Source File # Begin Source File SOURCE=.\src\gsm\inc\proto.h # End Source File # Begin Source File SOURCE=.\src\gsm\inc\unproto.h # End Source File # End Group # End Group # End Target # End Project h323plus/plugins/audio/GSM0610/gsm0610_2005.vcproj0000644000175000017500000004173111341106231017614 0ustar markmark h323plus/plugins/audio/GSM0610/src/0000755000175000017500000000000011341106231015405 5ustar markmarkh323plus/plugins/audio/GSM0610/src/gsm_lpc.c0000644000175000017500000001560011341106231017177 0ustar markmark/* * gsm_lpc.c * * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ #include #include #include "private.h" #include "gsm.h" #include "proto.h" #undef P /* * 4.2.4 .. 4.2.7 LPC ANALYSIS SECTION */ /* 4.2.4 */ static void Autocorrelation P2((s, L_ACF), word * s, /* [0..159] IN/OUT */ longword * L_ACF) /* [0..8] OUT */ /* * The goal is to compute the array L_ACF[k]. The signal s[i] must * be scaled in order to avoid an overflow situation. */ { register int k, i; word temp, smax, scalauto; #ifdef USE_FLOAT_MUL float float_s[160]; #endif /* Dynamic scaling of the array s[0..159] */ /* Search for the maximum. */ smax = 0; for (k = 0; k <= 159; k++) { temp = GSM_ABS( s[k] ); if (temp > smax) smax = temp; } /* Computation of the scaling factor. */ if (smax == 0) scalauto = 0; else { assert(smax > 0); scalauto = 4 - gsm_norm( (longword)smax << 16 );/* sub(4,..) */ } /* Scaling of the array s[0...159] */ if (scalauto > 0) { # ifdef USE_FLOAT_MUL # define SCALE(n) \ case n: for (k = 0; k <= 159; k++) \ float_s[k] = (float) \ (s[k] = GSM_MULT_R(s[k], 16384 >> (n-1)));\ break; # else # define SCALE(n) \ case n: for (k = 0; k <= 159; k++) \ s[k] = GSM_MULT_R( s[k], 16384 >> (n-1) );\ break; # endif /* USE_FLOAT_MUL */ switch (scalauto) { SCALE(1) SCALE(2) SCALE(3) SCALE(4) } # undef SCALE } # ifdef USE_FLOAT_MUL else for (k = 0; k <= 159; k++) float_s[k] = (float) s[k]; # endif /* Compute the L_ACF[..]. */ { # ifdef USE_FLOAT_MUL register float * sp = float_s; register float sl = *sp; # define STEP(k) L_ACF[k] += (longword)(sl * sp[ -(k) ]); # else word * sp = s; word sl = *sp; # define STEP(k) L_ACF[k] += ((longword)sl * sp[ -(k) ]); # endif # define NEXTI sl = *++sp for (k = 9; k--; L_ACF[k] = 0) ; STEP (0); NEXTI; STEP(0); STEP(1); NEXTI; STEP(0); STEP(1); STEP(2); NEXTI; STEP(0); STEP(1); STEP(2); STEP(3); NEXTI; STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); NEXTI; STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); NEXTI; STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6); NEXTI; STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6); STEP(7); for (i = 8; i <= 159; i++) { NEXTI; STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6); STEP(7); STEP(8); } for (k = 9; k--; L_ACF[k] <<= 1) ; } /* Rescaling of the array s[0..159] */ if (scalauto > 0) { assert(scalauto <= 4); for (k = 160; k--; *s++ <<= scalauto) ; } } #if defined(USE_FLOAT_MUL) && defined(FAST) static void Fast_Autocorrelation P2((s, L_ACF), word * s, /* [0..159] IN/OUT */ longword * L_ACF) /* [0..8] OUT */ { register int k, i; float f_L_ACF[9]; float scale; float s_f[160]; register float *sf = s_f; for (i = 0; i < 160; ++i) sf[i] = s[i]; for (k = 0; k <= 8; k++) { register float L_temp2 = 0; register float *sfl = sf - k; for (i = k; i < 160; ++i) L_temp2 += sf[i] * sfl[i]; f_L_ACF[k] = L_temp2; } scale = MAX_LONGWORD / f_L_ACF[0]; for (k = 0; k <= 8; k++) { L_ACF[k] = f_L_ACF[k] * scale; } } #endif /* defined (USE_FLOAT_MUL) && defined (FAST) */ /* 4.2.5 */ static void Reflection_coefficients P2( (L_ACF, r), longword * L_ACF, /* 0...8 IN */ register word * r /* 0...7 OUT */ ) { register int i, m, n; register word temp; register longword ltmp; word ACF[9]; /* 0..8 */ word P[ 9]; /* 0..8 */ word K[ 9]; /* 2..8 */ /* Schur recursion with 16 bits arithmetic. */ if (L_ACF[0] == 0) { for (i = 8; i--; *r++ = 0) ; return; } assert( L_ACF[0] != 0 ); temp = gsm_norm( L_ACF[0] ); assert(temp >= 0 && temp < 32); /* ? overflow ? */ for (i = 0; i <= 8; i++) ACF[i] = SASR( L_ACF[i] << temp, 16 ); /* Initialize array P[..] and K[..] for the recursion. */ for (i = 1; i <= 7; i++) K[ i ] = ACF[ i ]; for (i = 0; i <= 8; i++) P[ i ] = ACF[ i ]; /* Compute reflection coefficients */ for (n = 1; n <= 8; n++, r++) { temp = P[1]; temp = GSM_ABS(temp); if (P[0] < temp) { for (i = n; i <= 8; i++) *r++ = 0; return; } *r = gsm_div( temp, P[0] ); assert(*r >= 0); if (P[1] > 0) *r = -*r; /* r[n] = sub(0, r[n]) */ assert (*r != MIN_WORD); if (n == 8) return; /* Schur recursion */ temp = GSM_MULT_R( P[1], *r ); P[0] = (word) GSM_ADD( P[0], temp ); for (m = 1; m <= 8 - n; m++) { temp = GSM_MULT_R( K[ m ], *r ); P[m] = (word) GSM_ADD( P[ m+1 ], temp ); temp = GSM_MULT_R( P[ m+1 ], *r ); K[m] = (word) GSM_ADD( K[ m ], temp ); } } } /* 4.2.6 */ static void Transformation_to_Log_Area_Ratios P1((r), register word * r /* 0..7 IN/OUT */ ) /* * The following scaling for r[..] and LAR[..] has been used: * * r[..] = integer( real_r[..]*32768. ); -1 <= real_r < 1. * LAR[..] = integer( real_LAR[..] * 16384 ); * with -1.625 <= real_LAR <= 1.625 */ { register word temp; register int i; /* Computation of the LAR[0..7] from the r[0..7] */ for (i = 1; i <= 8; i++, r++) { temp = *r; temp = GSM_ABS(temp); assert(temp >= 0); if (temp < 22118) { temp >>= 1; } else if (temp < 31130) { assert( temp >= 11059 ); temp -= 11059; } else { assert( temp >= 26112 ); temp -= 26112; temp <<= 2; } *r = *r < 0 ? -temp : temp; assert( *r != MIN_WORD ); } } /* 4.2.7 */ static void Quantization_and_coding P1((LAR), register word * LAR /* [0..7] IN/OUT */ ) { register word temp; longword ltmp; /* This procedure needs four tables; the following equations * give the optimum scaling for the constants: * * A[0..7] = integer( real_A[0..7] * 1024 ) * B[0..7] = integer( real_B[0..7] * 512 ) * MAC[0..7] = maximum of the LARc[0..7] * MIC[0..7] = minimum of the LARc[0..7] */ # undef STEP # define STEP( A, B, MAC, MIC ) \ temp = GSM_MULT( A, *LAR ); \ temp = (word) GSM_ADD( temp, B ); \ temp = (word) GSM_ADD( temp, 256 ); \ temp = SASR( temp, 9 ); \ *LAR = temp>MAC ? MAC - MIC : (tempfast) Fast_Autocorrelation (s, L_ACF ); else #endif Autocorrelation (s, L_ACF ); Reflection_coefficients (L_ACF, LARc ); Transformation_to_Log_Area_Ratios (LARc); Quantization_and_coding (LARc); } h323plus/plugins/audio/GSM0610/src/gsm_decode.c0000644000175000017500000002452211341106231017647 0ustar markmark/* * gsm_decode.c * * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ #include "private.h" #include "gsm.h" #include "proto.h" int gsm_decode P3((s, c, target), gsm s, gsm_byte * c, gsm_signal * target) { word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4]; #ifdef WAV49 if (s->wav_fmt) { uword sr = 0; s->frame_index = !s->frame_index; if (s->frame_index) { sr = *c++; LARc[0] = sr & 0x3f; sr >>= 6; sr |= (uword)*c++ << 2; LARc[1] = sr & 0x3f; sr >>= 6; sr |= (uword)*c++ << 4; LARc[2] = sr & 0x1f; sr >>= 5; LARc[3] = sr & 0x1f; sr >>= 5; sr |= (uword)*c++ << 2; LARc[4] = sr & 0xf; sr >>= 4; LARc[5] = sr & 0xf; sr >>= 4; sr |= (uword)*c++ << 2; /* 5 */ LARc[6] = sr & 0x7; sr >>= 3; LARc[7] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 4; Nc[0] = sr & 0x7f; sr >>= 7; bc[0] = sr & 0x3; sr >>= 2; Mc[0] = sr & 0x3; sr >>= 2; sr |= (uword)*c++ << 1; xmaxc[0] = sr & 0x3f; sr >>= 6; xmc[0] = sr & 0x7; sr >>= 3; sr = *c++; xmc[1] = sr & 0x7; sr >>= 3; xmc[2] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; xmc[3] = sr & 0x7; sr >>= 3; xmc[4] = sr & 0x7; sr >>= 3; xmc[5] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; /* 10 */ xmc[6] = sr & 0x7; sr >>= 3; xmc[7] = sr & 0x7; sr >>= 3; xmc[8] = sr & 0x7; sr >>= 3; sr = *c++; xmc[9] = sr & 0x7; sr >>= 3; xmc[10] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; xmc[11] = sr & 0x7; sr >>= 3; xmc[12] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 4; Nc[1] = sr & 0x7f; sr >>= 7; bc[1] = sr & 0x3; sr >>= 2; Mc[1] = sr & 0x3; sr >>= 2; sr |= (uword)*c++ << 1; xmaxc[1] = sr & 0x3f; sr >>= 6; xmc[13] = sr & 0x7; sr >>= 3; sr = *c++; /* 15 */ xmc[14] = sr & 0x7; sr >>= 3; xmc[15] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; xmc[16] = sr & 0x7; sr >>= 3; xmc[17] = sr & 0x7; sr >>= 3; xmc[18] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; xmc[19] = sr & 0x7; sr >>= 3; xmc[20] = sr & 0x7; sr >>= 3; xmc[21] = sr & 0x7; sr >>= 3; sr = *c++; xmc[22] = sr & 0x7; sr >>= 3; xmc[23] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; xmc[24] = sr & 0x7; sr >>= 3; xmc[25] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 4; /* 20 */ Nc[2] = sr & 0x7f; sr >>= 7; bc[2] = sr & 0x3; sr >>= 2; Mc[2] = sr & 0x3; sr >>= 2; sr |= (uword)*c++ << 1; xmaxc[2] = sr & 0x3f; sr >>= 6; xmc[26] = sr & 0x7; sr >>= 3; sr = *c++; xmc[27] = sr & 0x7; sr >>= 3; xmc[28] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; xmc[29] = sr & 0x7; sr >>= 3; xmc[30] = sr & 0x7; sr >>= 3; xmc[31] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; xmc[32] = sr & 0x7; sr >>= 3; xmc[33] = sr & 0x7; sr >>= 3; xmc[34] = sr & 0x7; sr >>= 3; sr = *c++; /* 25 */ xmc[35] = sr & 0x7; sr >>= 3; xmc[36] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; xmc[37] = sr & 0x7; sr >>= 3; xmc[38] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 4; Nc[3] = sr & 0x7f; sr >>= 7; bc[3] = sr & 0x3; sr >>= 2; Mc[3] = sr & 0x3; sr >>= 2; sr |= (uword)*c++ << 1; xmaxc[3] = sr & 0x3f; sr >>= 6; xmc[39] = sr & 0x7; sr >>= 3; sr = *c++; xmc[40] = sr & 0x7; sr >>= 3; xmc[41] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; /* 30 */ xmc[42] = sr & 0x7; sr >>= 3; xmc[43] = sr & 0x7; sr >>= 3; xmc[44] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; xmc[45] = sr & 0x7; sr >>= 3; xmc[46] = sr & 0x7; sr >>= 3; xmc[47] = sr & 0x7; sr >>= 3; sr = *c++; xmc[48] = sr & 0x7; sr >>= 3; xmc[49] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; xmc[50] = sr & 0x7; sr >>= 3; xmc[51] = sr & 0x7; sr >>= 3; s->frame_chain = sr & 0xf; } else { sr = s->frame_chain; sr |= (uword)*c++ << 4; /* 1 */ LARc[0] = sr & 0x3f; sr >>= 6; LARc[1] = sr & 0x3f; sr >>= 6; sr = *c++; LARc[2] = sr & 0x1f; sr >>= 5; sr |= (uword)*c++ << 3; LARc[3] = sr & 0x1f; sr >>= 5; LARc[4] = sr & 0xf; sr >>= 4; sr |= (uword)*c++ << 2; LARc[5] = sr & 0xf; sr >>= 4; LARc[6] = sr & 0x7; sr >>= 3; LARc[7] = sr & 0x7; sr >>= 3; sr = *c++; /* 5 */ Nc[0] = sr & 0x7f; sr >>= 7; sr |= (uword)*c++ << 1; bc[0] = sr & 0x3; sr >>= 2; Mc[0] = sr & 0x3; sr >>= 2; sr |= (uword)*c++ << 5; xmaxc[0] = sr & 0x3f; sr >>= 6; xmc[0] = sr & 0x7; sr >>= 3; xmc[1] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; xmc[2] = sr & 0x7; sr >>= 3; xmc[3] = sr & 0x7; sr >>= 3; xmc[4] = sr & 0x7; sr >>= 3; sr = *c++; xmc[5] = sr & 0x7; sr >>= 3; xmc[6] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; /* 10 */ xmc[7] = sr & 0x7; sr >>= 3; xmc[8] = sr & 0x7; sr >>= 3; xmc[9] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; xmc[10] = sr & 0x7; sr >>= 3; xmc[11] = sr & 0x7; sr >>= 3; xmc[12] = sr & 0x7; sr >>= 3; sr = *c++; Nc[1] = sr & 0x7f; sr >>= 7; sr |= (uword)*c++ << 1; bc[1] = sr & 0x3; sr >>= 2; Mc[1] = sr & 0x3; sr >>= 2; sr |= (uword)*c++ << 5; xmaxc[1] = sr & 0x3f; sr >>= 6; xmc[13] = sr & 0x7; sr >>= 3; xmc[14] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; /* 15 */ xmc[15] = sr & 0x7; sr >>= 3; xmc[16] = sr & 0x7; sr >>= 3; xmc[17] = sr & 0x7; sr >>= 3; sr = *c++; xmc[18] = sr & 0x7; sr >>= 3; xmc[19] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; xmc[20] = sr & 0x7; sr >>= 3; xmc[21] = sr & 0x7; sr >>= 3; xmc[22] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; xmc[23] = sr & 0x7; sr >>= 3; xmc[24] = sr & 0x7; sr >>= 3; xmc[25] = sr & 0x7; sr >>= 3; sr = *c++; Nc[2] = sr & 0x7f; sr >>= 7; sr |= (uword)*c++ << 1; /* 20 */ bc[2] = sr & 0x3; sr >>= 2; Mc[2] = sr & 0x3; sr >>= 2; sr |= (uword)*c++ << 5; xmaxc[2] = sr & 0x3f; sr >>= 6; xmc[26] = sr & 0x7; sr >>= 3; xmc[27] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; xmc[28] = sr & 0x7; sr >>= 3; xmc[29] = sr & 0x7; sr >>= 3; xmc[30] = sr & 0x7; sr >>= 3; sr = *c++; xmc[31] = sr & 0x7; sr >>= 3; xmc[32] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; xmc[33] = sr & 0x7; sr >>= 3; xmc[34] = sr & 0x7; sr >>= 3; xmc[35] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; /* 25 */ xmc[36] = sr & 0x7; sr >>= 3; xmc[37] = sr & 0x7; sr >>= 3; xmc[38] = sr & 0x7; sr >>= 3; sr = *c++; Nc[3] = sr & 0x7f; sr >>= 7; sr |= (uword)*c++ << 1; bc[3] = sr & 0x3; sr >>= 2; Mc[3] = sr & 0x3; sr >>= 2; sr |= (uword)*c++ << 5; xmaxc[3] = sr & 0x3f; sr >>= 6; xmc[39] = sr & 0x7; sr >>= 3; xmc[40] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; xmc[41] = sr & 0x7; sr >>= 3; xmc[42] = sr & 0x7; sr >>= 3; xmc[43] = sr & 0x7; sr >>= 3; sr = *c++; /* 30 */ xmc[44] = sr & 0x7; sr >>= 3; xmc[45] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; xmc[46] = sr & 0x7; sr >>= 3; xmc[47] = sr & 0x7; sr >>= 3; xmc[48] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; xmc[49] = sr & 0x7; sr >>= 3; xmc[50] = sr & 0x7; sr >>= 3; xmc[51] = sr & 0x7; sr >>= 3; } } else #endif { /* GSM_MAGIC = (*c >> 4) & 0xF; */ if (((*c >> 4) & 0x0F) != GSM_MAGIC) return -1; LARc[0] = (*c++ & 0xF) << 2; /* 1 */ LARc[0] |= (*c >> 6) & 0x3; LARc[1] = *c++ & 0x3F; LARc[2] = (*c >> 3) & 0x1F; LARc[3] = (*c++ & 0x7) << 2; LARc[3] |= (*c >> 6) & 0x3; LARc[4] = (*c >> 2) & 0xF; LARc[5] = (*c++ & 0x3) << 2; LARc[5] |= (*c >> 6) & 0x3; LARc[6] = (*c >> 3) & 0x7; LARc[7] = *c++ & 0x7; Nc[0] = (*c >> 1) & 0x7F; bc[0] = (*c++ & 0x1) << 1; bc[0] |= (*c >> 7) & 0x1; Mc[0] = (*c >> 5) & 0x3; xmaxc[0] = (*c++ & 0x1F) << 1; xmaxc[0] |= (*c >> 7) & 0x1; xmc[0] = (*c >> 4) & 0x7; xmc[1] = (*c >> 1) & 0x7; xmc[2] = (*c++ & 0x1) << 2; xmc[2] |= (*c >> 6) & 0x3; xmc[3] = (*c >> 3) & 0x7; xmc[4] = *c++ & 0x7; xmc[5] = (*c >> 5) & 0x7; xmc[6] = (*c >> 2) & 0x7; xmc[7] = (*c++ & 0x3) << 1; /* 10 */ xmc[7] |= (*c >> 7) & 0x1; xmc[8] = (*c >> 4) & 0x7; xmc[9] = (*c >> 1) & 0x7; xmc[10] = (*c++ & 0x1) << 2; xmc[10] |= (*c >> 6) & 0x3; xmc[11] = (*c >> 3) & 0x7; xmc[12] = *c++ & 0x7; Nc[1] = (*c >> 1) & 0x7F; bc[1] = (*c++ & 0x1) << 1; bc[1] |= (*c >> 7) & 0x1; Mc[1] = (*c >> 5) & 0x3; xmaxc[1] = (*c++ & 0x1F) << 1; xmaxc[1] |= (*c >> 7) & 0x1; xmc[13] = (*c >> 4) & 0x7; xmc[14] = (*c >> 1) & 0x7; xmc[15] = (*c++ & 0x1) << 2; xmc[15] |= (*c >> 6) & 0x3; xmc[16] = (*c >> 3) & 0x7; xmc[17] = *c++ & 0x7; xmc[18] = (*c >> 5) & 0x7; xmc[19] = (*c >> 2) & 0x7; xmc[20] = (*c++ & 0x3) << 1; xmc[20] |= (*c >> 7) & 0x1; xmc[21] = (*c >> 4) & 0x7; xmc[22] = (*c >> 1) & 0x7; xmc[23] = (*c++ & 0x1) << 2; xmc[23] |= (*c >> 6) & 0x3; xmc[24] = (*c >> 3) & 0x7; xmc[25] = *c++ & 0x7; Nc[2] = (*c >> 1) & 0x7F; bc[2] = (*c++ & 0x1) << 1; /* 20 */ bc[2] |= (*c >> 7) & 0x1; Mc[2] = (*c >> 5) & 0x3; xmaxc[2] = (*c++ & 0x1F) << 1; xmaxc[2] |= (*c >> 7) & 0x1; xmc[26] = (*c >> 4) & 0x7; xmc[27] = (*c >> 1) & 0x7; xmc[28] = (*c++ & 0x1) << 2; xmc[28] |= (*c >> 6) & 0x3; xmc[29] = (*c >> 3) & 0x7; xmc[30] = *c++ & 0x7; xmc[31] = (*c >> 5) & 0x7; xmc[32] = (*c >> 2) & 0x7; xmc[33] = (*c++ & 0x3) << 1; xmc[33] |= (*c >> 7) & 0x1; xmc[34] = (*c >> 4) & 0x7; xmc[35] = (*c >> 1) & 0x7; xmc[36] = (*c++ & 0x1) << 2; xmc[36] |= (*c >> 6) & 0x3; xmc[37] = (*c >> 3) & 0x7; xmc[38] = *c++ & 0x7; Nc[3] = (*c >> 1) & 0x7F; bc[3] = (*c++ & 0x1) << 1; bc[3] |= (*c >> 7) & 0x1; Mc[3] = (*c >> 5) & 0x3; xmaxc[3] = (*c++ & 0x1F) << 1; xmaxc[3] |= (*c >> 7) & 0x1; xmc[39] = (*c >> 4) & 0x7; xmc[40] = (*c >> 1) & 0x7; xmc[41] = (*c++ & 0x1) << 2; xmc[41] |= (*c >> 6) & 0x3; xmc[42] = (*c >> 3) & 0x7; xmc[43] = *c++ & 0x7; /* 30 */ xmc[44] = (*c >> 5) & 0x7; xmc[45] = (*c >> 2) & 0x7; xmc[46] = (*c++ & 0x3) << 1; xmc[46] |= (*c >> 7) & 0x1; xmc[47] = (*c >> 4) & 0x7; xmc[48] = (*c >> 1) & 0x7; xmc[49] = (*c++ & 0x1) << 2; xmc[49] |= (*c >> 6) & 0x3; xmc[50] = (*c >> 3) & 0x7; xmc[51] = *c & 0x7; /* 33 */ } Gsm_Decoder(s, LARc, Nc, bc, Mc, xmaxc, xmc, target); return 0; } h323plus/plugins/audio/GSM0610/src/gsm_create.c0000644000175000017500000000134711341106231017667 0ustar markmark/* * gsm_create.c * * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ #include "config.h" #ifdef HAS_STRING_H #include #else # include "proto.h" extern char * memset P((char *, int, int)); #endif #ifdef HAS_STDLIB_H # include #else # ifdef HAS_MALLOC_H # include # else extern char * malloc(); # endif #endif #include #include "gsm.h" #include "private.h" #include "proto.h" gsm gsm_create P0() { gsm r; r = (gsm)malloc(sizeof(struct gsm_state)); if (!r) return r; memset((char *)r, 0, sizeof(*r)); r->nrp = 40; return r; } h323plus/plugins/audio/GSM0610/src/rpe.c0000644000175000017500000002535411341106231016350 0ustar markmark/* * rpe.c * * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ #include #include #include "private.h" #include "gsm.h" #include "proto.h" /* 4.2.13 .. 4.2.17 RPE ENCODING SECTION */ /* 4.2.13 */ static void Weighting_filter P2((e, x), register word * e, /* signal [-5..0.39.44] IN */ word * x /* signal [0..39] OUT */ ) /* * The coefficients of the weighting filter are stored in a table * (see table 4.4). The following scaling is used: * * H[0..10] = integer( real_H[ 0..10] * 8192 ); */ { /* word wt[ 50 ]; */ register longword L_result; register int k /* , i */ ; /* Initialization of a temporary working array wt[0...49] */ /* for (k = 0; k <= 4; k++) wt[k] = 0; * for (k = 5; k <= 44; k++) wt[k] = *e++; * for (k = 45; k <= 49; k++) wt[k] = 0; * * (e[-5..-1] and e[40..44] are allocated by the caller, * are initially zero and are not written anywhere.) */ e -= 5; /* Compute the signal x[0..39] */ for (k = 0; k <= 39; k++) { L_result = 8192 >> 1; /* for (i = 0; i <= 10; i++) { * L_temp = GSM_L_MULT( wt[k+i], gsm_H[i] ); * L_result = GSM_L_ADD( L_result, L_temp ); * } */ #undef STEP #define STEP( i, H ) (e[ k + i ] * (longword)H) /* Every one of these multiplications is done twice -- * but I don't see an elegant way to optimize this. * Do you? */ #ifdef STUPID_COMPILER L_result += STEP( 0, -134 ) ; L_result += STEP( 1, -374 ) ; /* + STEP( 2, 0 ) */ L_result += STEP( 3, 2054 ) ; L_result += STEP( 4, 5741 ) ; L_result += STEP( 5, 8192 ) ; L_result += STEP( 6, 5741 ) ; L_result += STEP( 7, 2054 ) ; /* + STEP( 8, 0 ) */ L_result += STEP( 9, -374 ) ; L_result += STEP( 10, -134 ) ; #else L_result += STEP( 0, -134 ) + STEP( 1, -374 ) /* + STEP( 2, 0 ) */ + STEP( 3, 2054 ) + STEP( 4, 5741 ) + STEP( 5, 8192 ) + STEP( 6, 5741 ) + STEP( 7, 2054 ) /* + STEP( 8, 0 ) */ + STEP( 9, -374 ) + STEP(10, -134 ) ; #endif /* L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x2) *) * L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x4) *) * * x[k] = SASR( L_result, 16 ); */ /* 2 adds vs. >>16 => 14, minus one shift to compensate for * those we lost when replacing L_MULT by '*'. */ L_result = SASR( L_result, 13 ); x[k] = (word) (( L_result < MIN_WORD ? MIN_WORD : (L_result > MAX_WORD ? MAX_WORD : L_result ))); } } /* 4.2.14 */ static void RPE_grid_selection P3((x,xM,Mc_out), word * x, /* [0..39] IN */ word * xM, /* [0..12] OUT */ word * Mc_out /* OUT */ ) /* * The signal x[0..39] is used to select the RPE grid which is * represented by Mc. */ { /* register word temp1; */ register int /* m, */ i; register longword L_result, L_temp; longword EM; /* xxx should be L_EM? */ word Mc; longword L_common_0_3; EM = 0; Mc = 0; /* for (m = 0; m <= 3; m++) { * L_result = 0; * * * for (i = 0; i <= 12; i++) { * * temp1 = SASR( x[m + 3*i], 2 ); * * assert(temp1 != MIN_WORD); * * L_temp = GSM_L_MULT( temp1, temp1 ); * L_result = GSM_L_ADD( L_temp, L_result ); * } * * if (L_result > EM) { * Mc = m; * EM = L_result; * } * } */ #undef STEP #define STEP( m, i ) L_temp = SASR( x[m + 3 * i], 2 ); \ L_result += L_temp * L_temp; /* common part of 0 and 3 */ L_result = 0; STEP( 0, 1 ); STEP( 0, 2 ); STEP( 0, 3 ); STEP( 0, 4 ); STEP( 0, 5 ); STEP( 0, 6 ); STEP( 0, 7 ); STEP( 0, 8 ); STEP( 0, 9 ); STEP( 0, 10); STEP( 0, 11); STEP( 0, 12); L_common_0_3 = L_result; /* i = 0 */ STEP( 0, 0 ); L_result <<= 1; /* implicit in L_MULT */ EM = L_result; /* i = 1 */ L_result = 0; STEP( 1, 0 ); STEP( 1, 1 ); STEP( 1, 2 ); STEP( 1, 3 ); STEP( 1, 4 ); STEP( 1, 5 ); STEP( 1, 6 ); STEP( 1, 7 ); STEP( 1, 8 ); STEP( 1, 9 ); STEP( 1, 10); STEP( 1, 11); STEP( 1, 12); L_result <<= 1; if (L_result > EM) { Mc = 1; EM = L_result; } /* i = 2 */ L_result = 0; STEP( 2, 0 ); STEP( 2, 1 ); STEP( 2, 2 ); STEP( 2, 3 ); STEP( 2, 4 ); STEP( 2, 5 ); STEP( 2, 6 ); STEP( 2, 7 ); STEP( 2, 8 ); STEP( 2, 9 ); STEP( 2, 10); STEP( 2, 11); STEP( 2, 12); L_result <<= 1; if (L_result > EM) { Mc = 2; EM = L_result; } /* i = 3 */ L_result = L_common_0_3; STEP( 3, 12 ); L_result <<= 1; if (L_result > EM) { Mc = 3; EM = L_result; } /**/ /* Down-sampling by a factor 3 to get the selected xM[0..12] * RPE sequence. */ for (i = 0; i <= 12; i ++) xM[i] = x[Mc + 3*i]; *Mc_out = Mc; } /* 4.12.15 */ static void APCM_quantization_xmaxc_to_exp_mant P3((xmaxc,exp_out,mant_out), word xmaxc, /* IN */ word * exp_out, /* OUT */ word * mant_out ) /* OUT */ { word exp, mant; /* Compute exponent and mantissa of the decoded version of xmaxc */ exp = 0; if (xmaxc > 15) exp = SASR(xmaxc, 3) - 1; mant = xmaxc - (exp << 3); if (mant == 0) { exp = -4; mant = 7; } else { while (mant <= 7) { mant = mant << 1 | 1; exp--; } mant -= 8; } assert( exp >= -4 && exp <= 6 ); assert( mant >= 0 && mant <= 7 ); *exp_out = exp; *mant_out = mant; } static void APCM_quantization P5((xM,xMc,mant_out,exp_out,xmaxc_out), word * xM, /* [0..12] IN */ word * xMc, /* [0..12] OUT */ word * mant_out, /* OUT */ word * exp_out, /* OUT */ word * xmaxc_out /* OUT */ ) { int i, itest; word xmax, xmaxc, temp, temp1, temp2; word exp, mant; /* Find the maximum absolute value xmax of xM[0..12]. */ xmax = 0; for (i = 0; i <= 12; i++) { temp = xM[i]; temp = GSM_ABS(temp); if (temp > xmax) xmax = temp; } /* Qantizing and coding of xmax to get xmaxc. */ exp = 0; temp = SASR( xmax, 9 ); itest = 0; for (i = 0; i <= 5; i++) { itest |= (temp <= 0); temp = SASR( temp, 1 ); assert(exp <= 5); if (itest == 0) exp++; /* exp = add (exp, 1) */ } assert(exp <= 6 && exp >= 0); temp = exp + 5; assert(temp <= 11 && temp >= 0); xmaxc = gsm_add( SASR(xmax, temp), exp << 3 ); /* Quantizing and coding of the xM[0..12] RPE sequence * to get the xMc[0..12] */ APCM_quantization_xmaxc_to_exp_mant( xmaxc, &exp, &mant ); /* This computation uses the fact that the decoded version of xmaxc * can be calculated by using the exponent and the mantissa part of * xmaxc (logarithmic table). * So, this method avoids any division and uses only a scaling * of the RPE samples by a function of the exponent. A direct * multiplication by the inverse of the mantissa (NRFAC[0..7] * found in table 4.5) gives the 3 bit coded version xMc[0..12] * of the RPE samples. */ /* Direct computation of xMc[0..12] using table 4.5 */ assert( exp <= 4096 && exp >= -4096); assert( mant >= 0 && mant <= 7 ); temp1 = 6 - exp; /* normalization by the exponent */ temp2 = gsm_NRFAC[ mant ]; /* inverse mantissa */ for (i = 0; i <= 12; i++) { assert(temp1 >= 0 && temp1 < 16); temp = xM[i] << temp1; temp = GSM_MULT( temp, temp2 ); temp = SASR(temp, 12); xMc[i] = temp + 4; /* see note below */ } /* NOTE: This equation is used to make all the xMc[i] positive. */ *mant_out = mant; *exp_out = exp; *xmaxc_out = xmaxc; } /* 4.2.16 */ static void APCM_inverse_quantization P4((xMc,mant,exp,xMp), register word * xMc, /* [0..12] IN */ word mant, word exp, register word * xMp) /* [0..12] OUT */ /* * This part is for decoding the RPE sequence of coded xMc[0..12] * samples to obtain the xMp[0..12] array. Table 4.6 is used to get * the mantissa of xmaxc (FAC[0..7]). */ { int i; word temp, temp1, temp2, temp3; longword ltmp; assert( mant >= 0 && mant <= 7 ); temp1 = gsm_FAC[ mant ]; /* see 4.2-15 for mant */ temp2 = gsm_sub( 6, exp ); /* see 4.2-15 for exp */ temp3 = gsm_asl( 1, gsm_sub( temp2, 1 )); for (i = 13; i--;) { assert( *xMc <= 7 && *xMc >= 0 ); /* 3 bit unsigned */ /* temp = gsm_sub( *xMc++ << 1, 7 ); */ temp = (*xMc++ << 1) - 7; /* restore sign */ assert( temp <= 7 && temp >= -7 ); /* 4 bit signed */ temp <<= 12; /* 16 bit signed */ temp = GSM_MULT_R( temp1, temp ); temp = (word) GSM_ADD( temp, temp3 ); *xMp++ = gsm_asr( temp, temp2 ); } } /* 4.2.17 */ static void RPE_grid_positioning P3((Mc,xMp,ep), word Mc, /* grid position IN */ register word * xMp, /* [0..12] IN */ register word * ep /* [0..39] OUT */ ) /* * This procedure computes the reconstructed long term residual signal * ep[0..39] for the LTP analysis filter. The inputs are the Mc * which is the grid position selection and the xMp[0..12] decoded * RPE samples which are upsampled by a factor of 3 by inserting zero * values. */ { int i = 13; assert(0 <= Mc && Mc <= 3); switch (Mc) { case 3: *ep++ = 0; case 2: do { *ep++ = 0; case 1: *ep++ = 0; case 0: *ep++ = *xMp++; } while (--i); } while (++Mc < 4) *ep++ = 0; /* int i, k; for (k = 0; k <= 39; k++) ep[k] = 0; for (i = 0; i <= 12; i++) { ep[ Mc + (3*i) ] = xMp[i]; } */ } /* 4.2.18 */ /* This procedure adds the reconstructed long term residual signal * ep[0..39] to the estimated signal dpp[0..39] from the long term * analysis filter to compute the reconstructed short term residual * signal dp[-40..-1]; also the reconstructed short term residual * array dp[-120..-41] is updated. */ #if 0 /* Has been inlined in code.c */ void Gsm_Update_of_reconstructed_short_time_residual_signal P3((dpp, ep, dp), word * dpp, /* [0...39] IN */ word * ep, /* [0...39] IN */ word * dp) /* [-120...-1] IN/OUT */ { int k; for (k = 0; k <= 79; k++) dp[ -120 + k ] = dp[ -80 + k ]; for (k = 0; k <= 39; k++) dp[ -40 + k ] = gsm_add( ep[k], dpp[k] ); } #endif /* Has been inlined in code.c */ void Gsm_RPE_Encoding P5((S,e,xmaxc,Mc,xMc), struct gsm_state * S, word * e, /* -5..-1][0..39][40..44 IN/OUT */ word * xmaxc, /* OUT */ word * Mc, /* OUT */ word * xMc) /* [0..12] OUT */ { word x[40]; word xM[13], xMp[13]; word mant, exp; Weighting_filter(e, x); RPE_grid_selection(x, xM, Mc); APCM_quantization( xM, xMc, &mant, &exp, xmaxc); APCM_inverse_quantization( xMc, mant, exp, xMp); RPE_grid_positioning( *Mc, xMp, e ); } void Gsm_RPE_Decoding P5((S, xmaxcr, Mcr, xMcr, erp), struct gsm_state * S, word xmaxcr, word Mcr, word * xMcr, /* [0..12], 3 bits IN */ word * erp /* [0..39] OUT */ ) { word exp, mant; word xMp[ 13 ]; APCM_quantization_xmaxc_to_exp_mant( xmaxcr, &exp, &mant ); APCM_inverse_quantization( xMcr, mant, exp, xMp ); RPE_grid_positioning( Mcr, xMp, erp ); } h323plus/plugins/audio/GSM0610/src/add.c0000644000175000017500000001255211341106231016306 0ustar markmark/* * add.c * * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ /* * See private.h for the more commonly used macro versions. */ #include #include #include "private.h" #include "gsm.h" #include "proto.h" #define saturate(x) \ ((x) < MIN_WORD ? MIN_WORD : (x) > MAX_WORD ? MAX_WORD: (x)) word gsm_add P2((a,b), word a, word b) { longword sum = (longword)a + (longword)b; return (word) saturate(sum); } word gsm_sub P2((a,b), word a, word b) { longword diff = (longword)a - (longword)b; return (word) saturate(diff); } word gsm_mult P2((a,b), word a, word b) { if (a == MIN_WORD && b == MIN_WORD) return MAX_WORD; else return SASR( (longword)a * (longword)b, 15 ); } word gsm_mult_r P2((a,b), word a, word b) { if (b == MIN_WORD && a == MIN_WORD) return MAX_WORD; else { longword prod = (longword)a * (longword)b + 16384; prod >>= 15; return prod & 0xFFFF; } } word gsm_abs P1((a), word a) { return a < 0 ? (a == MIN_WORD ? MAX_WORD : -a) : a; } longword gsm_L_mult P2((a,b),word a, word b) { assert( a != MIN_WORD || b != MIN_WORD ); return ((longword)a * (longword)b) << 1; } longword gsm_L_add P2((a,b), longword a, longword b) { if (a < 0) { if (b >= 0) return a + b; else { ulongword A = (ulongword)-(a + 1) + (ulongword)-(b + 1); return A >= MAX_LONGWORD ? MIN_LONGWORD :-(longword)A-2; } } else if (b <= 0) return a + b; else { ulongword A = (ulongword)a + (ulongword)b; return A > MAX_LONGWORD ? MAX_LONGWORD : A; } } longword gsm_L_sub P2((a,b), longword a, longword b) { if (a >= 0) { if (b >= 0) return a - b; else { /* a>=0, b<0 */ ulongword A = (ulongword)a + -(b + 1); return A >= MAX_LONGWORD ? MAX_LONGWORD : (A + 1); } } else if (b <= 0) return a - b; else { /* a<0, b>0 */ ulongword A = (ulongword)-(a + 1) + b; return A >= MAX_LONGWORD ? MIN_LONGWORD : -(longword)A - 1; } } static unsigned char const bitoff[ 256 ] = { 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; word gsm_norm P1((a), longword a ) /* * the number of left shifts needed to normalize the 32 bit * variable L_var1 for positive values on the interval * * with minimum of * minimum of 1073741824 (01000000000000000000000000000000) and * maximum of 2147483647 (01111111111111111111111111111111) * * * and for negative values on the interval with * minimum of -2147483648 (-10000000000000000000000000000000) and * maximum of -1073741824 ( -1000000000000000000000000000000). * * in order to normalize the result, the following * operation must be done: L_norm_var1 = L_var1 << norm( L_var1 ); * * (That's 'ffs', only from the left, not the right..) */ { assert(a != 0); if (a < 0) { if (a <= -1073741824) return 0; a = ~a; } return a & 0xffff0000 ? ( a & 0xff000000 ? -1 + bitoff[ 0xFF & (a >> 24) ] : 7 + bitoff[ 0xFF & (a >> 16) ] ) : ( a & 0xff00 ? 15 + bitoff[ 0xFF & (a >> 8) ] : 23 + bitoff[ 0xFF & a ] ); } longword gsm_L_asl P2((a,n), longword a, int n) { if (n >= 32) return 0; if (n <= -32) return -(a < 0); if (n < 0) return gsm_L_asr(a, -n); return a << n; } word gsm_asl P2((a,n), word a, int n) { if (n >= 16) return 0; if (n <= -16) return -(a < 0); if (n < 0) return gsm_asr(a, -n); return a << n; } longword gsm_L_asr P2((a,n), longword a, int n) { if (n >= 32) return -(a < 0); if (n <= -32) return 0; if (n < 0) return a << -n; # ifdef SASR return a >> n; # else if (a >= 0) return a >> n; else return -(longword)( -(ulongword)a >> n ); # endif } word gsm_asr P2((a,n), word a, int n) { if (n >= 16) return -(a < 0); if (n <= -16) return 0; if (n < 0) return a << -n; # ifdef SASR return a >> n; # else if (a >= 0) return a >> n; else return -(word)( -(uword)a >> n ); # endif } /* * (From p. 46, end of section 4.2.5) * * NOTE: The following lines gives [sic] one correct implementation * of the div(num, denum) arithmetic operation. Compute div * which is the integer division of num by denum: with denum * >= num > 0 */ word gsm_div P2((num,denum), word num, word denum) { longword L_num = num; longword L_denum = denum; word div = 0; int k = 15; /* The parameter num sometimes becomes zero. * Although this is explicitly guarded against in 4.2.5, * we assume that the result should then be zero as well. */ /* assert(num != 0); */ assert(num >= 0 && denum >= num); if (num == 0) return 0; while (k--) { div <<= 1; L_num <<= 1; if (L_num >= L_denum) { L_num -= L_denum; div++; } } return div; } h323plus/plugins/audio/GSM0610/src/gsm_destroy.c0000644000175000017500000000074111341106231020112 0ustar markmark/* * gsm_destroy.c * * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ #include "gsm.h" #include "config.h" #include "proto.h" #ifdef HAS_STDLIB_H # include #else # ifdef HAS_MALLOC_H # include # else extern void free(); # endif #endif void gsm_destroy P1((S), gsm S) { if (S) free((char *)S); } h323plus/plugins/audio/GSM0610/src/short_term.c0000644000175000017500000002425411341106231017746 0ustar markmark/* * short_term.c * * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ #include #include #include "private.h" #include "gsm.h" #include "proto.h" /* * SHORT TERM ANALYSIS FILTERING SECTION */ /* 4.2.8 */ static void Decoding_of_the_coded_Log_Area_Ratios P2((LARc,LARpp), word * LARc, /* coded log area ratio [0..7] IN */ word * LARpp) /* out: decoded .. */ { register word temp1 /* , temp2 */; register long ltmp; /* for GSM_ADD */ /* This procedure requires for efficient implementation * two tables. * * INVA[1..8] = integer( (32768 * 8) / real_A[1..8]) * MIC[1..8] = minimum value of the LARc[1..8] */ /* Compute the LARpp[1..8] */ /* for (i = 1; i <= 8; i++, B++, MIC++, INVA++, LARc++, LARpp++) { * * temp1 = GSM_ADD( *LARc, *MIC ) << 10; * temp2 = *B << 1; * temp1 = GSM_SUB( temp1, temp2 ); * * assert(*INVA != MIN_WORD); * * temp1 = GSM_MULT_R( *INVA, temp1 ); * *LARpp = GSM_ADD( temp1, temp1 ); * } */ #undef STEP #define STEP( B, MIC, INVA ) \ temp1 = (word) GSM_ADD( *LARc++, MIC ) << 10; \ temp1 = (word) GSM_SUB( temp1, B << 1 ); \ temp1 = GSM_MULT_R( INVA, temp1 ); \ *LARpp++ = (word) GSM_ADD( temp1, temp1 ); STEP( 0, -32, 13107 ); STEP( 0, -32, 13107 ); STEP( 2048, -16, 13107 ); STEP( -2560, -16, 13107 ); STEP( 94, -8, 19223 ); STEP( -1792, -8, 17476 ); STEP( -341, -4, 31454 ); STEP( -1144, -4, 29708 ); /* NOTE: the addition of *MIC is used to restore * the sign of *LARc. */ } /* 4.2.9 */ /* Computation of the quantized reflection coefficients */ /* 4.2.9.1 Interpolation of the LARpp[1..8] to get the LARp[1..8] */ /* * Within each frame of 160 analyzed speech samples the short term * analysis and synthesis filters operate with four different sets of * coefficients, derived from the previous set of decoded LARs(LARpp(j-1)) * and the actual set of decoded LARs (LARpp(j)) * * (Initial value: LARpp(j-1)[1..8] = 0.) */ static void Coefficients_0_12 P3((LARpp_j_1, LARpp_j, LARp), register word * LARpp_j_1, register word * LARpp_j, register word * LARp) { register int i; register longword ltmp; for (i = 1; i <= 8; i++, LARp++, LARpp_j_1++, LARpp_j++) { *LARp = (word) GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 )); *LARp = (word) GSM_ADD( *LARp, SASR( *LARpp_j_1, 1)); } } static void Coefficients_13_26 P3((LARpp_j_1, LARpp_j, LARp), register word * LARpp_j_1, register word * LARpp_j, register word * LARp) { register int i; register longword ltmp; for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) { *LARp = (word) GSM_ADD( SASR( *LARpp_j_1, 1), SASR( *LARpp_j, 1 )); } } static void Coefficients_27_39 P3((LARpp_j_1, LARpp_j, LARp), register word * LARpp_j_1, register word * LARpp_j, register word * LARp) { register int i; register longword ltmp; for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) { *LARp = (word) GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 )); *LARp = (word) GSM_ADD( *LARp, SASR( *LARpp_j, 1 )); } } static void Coefficients_40_159 P2((LARpp_j, LARp), register word * LARpp_j, register word * LARp) { register int i; for (i = 1; i <= 8; i++, LARp++, LARpp_j++) *LARp = *LARpp_j; } /* 4.2.9.2 */ static void LARp_to_rp P1((LARp), register word * LARp) /* [0..7] IN/OUT */ /* * The input of this procedure is the interpolated LARp[0..7] array. * The reflection coefficients, rp[i], are used in the analysis * filter and in the synthesis filter. */ { register int i; register word temp; register longword ltmp; for (i = 1; i <= 8; i++, LARp++) { /* temp = GSM_ABS( *LARp ); * * if (temp < 11059) temp <<= 1; * else if (temp < 20070) temp += 11059; * else temp = GSM_ADD( temp >> 2, 26112 ); * * *LARp = *LARp < 0 ? -temp : temp; */ if (*LARp < 0) { temp = *LARp == MIN_WORD ? MAX_WORD : -(*LARp); *LARp = - ((temp < 11059) ? temp << 1 : ((temp < 20070) ? temp + 11059 : (word) GSM_ADD( temp >> 2, 26112 ))); } else { temp = *LARp; *LARp = (temp < 11059) ? temp << 1 : ((temp < 20070) ? temp + 11059 : (word) GSM_ADD( temp >> 2, 26112 )); } } } /* 4.2.10 */ static void Short_term_analysis_filtering P4((S,rp,k_n,s), struct gsm_state * S, register word * rp, /* [0..7] IN */ register int k_n, /* k_end - k_start */ register word * s /* [0..n-1] IN/OUT */ ) /* * This procedure computes the short term residual signal d[..] to be fed * to the RPE-LTP loop from the s[..] signal and from the local rp[..] * array (quantized reflection coefficients). As the call of this * procedure can be done in many ways (see the interpolation of the LAR * coefficient), it is assumed that the computation begins with index * k_start (for arrays d[..] and s[..]) and stops with index k_end * (k_start and k_end are defined in 4.2.9.1). This procedure also * needs to keep the array u[0..7] in memory for each call. */ { register word * u = S->u; register int i; register word di, zzz, ui, sav, rpi; register longword ltmp; for (; k_n--; s++) { di = sav = *s; for (i = 0; i < 8; i++) { /* YYY */ ui = u[i]; rpi = rp[i]; u[i] = sav; zzz = GSM_MULT_R(rpi, di); sav = (word) GSM_ADD( ui, zzz); zzz = GSM_MULT_R(rpi, ui); di = (word) GSM_ADD( di, zzz ); } *s = di; } } #if defined(USE_FLOAT_MUL) && defined(FAST) static void Fast_Short_term_analysis_filtering P4((S,rp,k_n,s), struct gsm_state * S, register word * rp, /* [0..7] IN */ register int k_n, /* k_end - k_start */ register word * s /* [0..n-1] IN/OUT */ ) { register word * u = S->u; register int i; float uf[8], rpf[8]; register float scalef = 3.0517578125e-5; register float sav, di, temp; for (i = 0; i < 8; ++i) { uf[i] = u[i]; rpf[i] = rp[i] * scalef; } for (; k_n--; s++) { sav = di = *s; for (i = 0; i < 8; ++i) { register float rpfi = rpf[i]; register float ufi = uf[i]; uf[i] = sav; temp = rpfi * di + ufi; di += rpfi * ufi; sav = temp; } *s = di; } for (i = 0; i < 8; ++i) u[i] = uf[i]; } #endif /* ! (defined (USE_FLOAT_MUL) && defined (FAST)) */ static void Short_term_synthesis_filtering P5((S,rrp,k,wt,sr), struct gsm_state * S, register word * rrp, /* [0..7] IN */ register int k, /* k_end - k_start */ register word * wt, /* [0..k-1] IN */ register word * sr /* [0..k-1] OUT */ ) { register word * v = S->v; register int i; register word sri, tmp1, tmp2; register longword ltmp; /* for GSM_ADD & GSM_SUB */ while (k--) { sri = *wt++; for (i = 8; i--;) { /* sri = GSM_SUB( sri, gsm_mult_r( rrp[i], v[i] ) ); */ tmp1 = rrp[i]; tmp2 = v[i]; tmp2 = ( tmp1 == MIN_WORD && tmp2 == MIN_WORD ? MAX_WORD : 0x0FFFF & (( (longword)tmp1 * (longword)tmp2 + 16384) >> 15)) ; sri = (word) GSM_SUB( sri, tmp2 ); /* v[i+1] = GSM_ADD( v[i], gsm_mult_r( rrp[i], sri ) ); */ tmp1 = ( tmp1 == MIN_WORD && sri == MIN_WORD ? MAX_WORD : 0x0FFFF & (( (longword)tmp1 * (longword)sri + 16384) >> 15)) ; v[i+1] = (word) GSM_ADD( v[i], tmp1); } *sr++ = v[0] = sri; } } #if defined(FAST) && defined(USE_FLOAT_MUL) static void Fast_Short_term_synthesis_filtering P5((S,rrp,k,wt,sr), struct gsm_state * S, register word * rrp, /* [0..7] IN */ register int k, /* k_end - k_start */ register word * wt, /* [0..k-1] IN */ register word * sr /* [0..k-1] OUT */ ) { register word * v = S->v; register int i; float va[9], rrpa[8]; register float scalef = 3.0517578125e-5, temp; for (i = 0; i < 8; ++i) { va[i] = v[i]; rrpa[i] = (float)rrp[i] * scalef; } while (k--) { register float sri = *wt++; for (i = 8; i--;) { sri -= rrpa[i] * va[i]; if (sri < -32768.) sri = -32768.; else if (sri > 32767.) sri = 32767.; temp = va[i] + rrpa[i] * sri; if (temp < -32768.) temp = -32768.; else if (temp > 32767.) temp = 32767.; va[i+1] = temp; } *sr++ = va[0] = sri; } for (i = 0; i < 9; ++i) v[i] = va[i]; } #endif /* defined(FAST) && defined(USE_FLOAT_MUL) */ void Gsm_Short_Term_Analysis_Filter P3((S,LARc,s), struct gsm_state * S, word * LARc, /* coded log area ratio [0..7] IN */ word * s /* signal [0..159] IN/OUT */ ) { word * LARpp_j = S->LARpp[ S->j ]; word * LARpp_j_1 = S->LARpp[ S->j ^= 1 ]; word LARp[8]; #undef FILTER #if defined(FAST) && defined(USE_FLOAT_MUL) # define FILTER (* (S->fast \ ? Fast_Short_term_analysis_filtering \ : Short_term_analysis_filtering )) #else # define FILTER Short_term_analysis_filtering #endif Decoding_of_the_coded_Log_Area_Ratios( LARc, LARpp_j ); Coefficients_0_12( LARpp_j_1, LARpp_j, LARp ); LARp_to_rp( LARp ); FILTER( S, LARp, 13, s); Coefficients_13_26( LARpp_j_1, LARpp_j, LARp); LARp_to_rp( LARp ); FILTER( S, LARp, 14, s + 13); Coefficients_27_39( LARpp_j_1, LARpp_j, LARp); LARp_to_rp( LARp ); FILTER( S, LARp, 13, s + 27); Coefficients_40_159( LARpp_j, LARp); LARp_to_rp( LARp ); FILTER( S, LARp, 120, s + 40); } void Gsm_Short_Term_Synthesis_Filter P4((S, LARcr, wt, s), struct gsm_state * S, word * LARcr, /* received log area ratios [0..7] IN */ word * wt, /* received d [0..159] IN */ word * s /* signal s [0..159] OUT */ ) { word * LARpp_j = S->LARpp[ S->j ]; word * LARpp_j_1 = S->LARpp[ S->j ^=1 ]; word LARp[8]; #undef FILTER #if defined(FAST) && defined(USE_FLOAT_MUL) # define FILTER (* (S->fast \ ? Fast_Short_term_synthesis_filtering \ : Short_term_synthesis_filtering )) #else # define FILTER Short_term_synthesis_filtering #endif Decoding_of_the_coded_Log_Area_Ratios( LARcr, LARpp_j ); Coefficients_0_12( LARpp_j_1, LARpp_j, LARp ); LARp_to_rp( LARp ); FILTER( S, LARp, 13, wt, s ); Coefficients_13_26( LARpp_j_1, LARpp_j, LARp); LARp_to_rp( LARp ); FILTER( S, LARp, 14, wt + 13, s + 13 ); Coefficients_27_39( LARpp_j_1, LARpp_j, LARp); LARp_to_rp( LARp ); FILTER( S, LARp, 13, wt + 27, s + 27 ); Coefficients_40_159( LARpp_j, LARp ); LARp_to_rp( LARp ); FILTER(S, LARp, 120, wt + 40, s + 40); } h323plus/plugins/audio/GSM0610/src/table.c0000644000175000017500000000401311341106231016636 0ustar markmark/* * table.c * * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ /* Most of these tables are inlined at their point of use. */ /* 4.4 TABLES USED IN THE FIXED POINT IMPLEMENTATION OF THE RPE-LTP * CODER AND DECODER * * (Most of them inlined, so watch out.) */ #define GSM_TABLE_C #include "private.h" #include "gsm.h" /* Table 4.1 Quantization of the Log.-Area Ratios */ /* i 1 2 3 4 5 6 7 8 */ word gsm_A[8] = {20480, 20480, 20480, 20480, 13964, 15360, 8534, 9036}; word gsm_B[8] = { 0, 0, 2048, -2560, 94, -1792, -341, -1144}; word gsm_MIC[8] = { -32, -32, -16, -16, -8, -8, -4, -4 }; word gsm_MAC[8] = { 31, 31, 15, 15, 7, 7, 3, 3 }; /* Table 4.2 Tabulation of 1/A[1..8] */ word gsm_INVA[8]={ 13107, 13107, 13107, 13107, 19223, 17476, 31454, 29708 }; /* Table 4.3a Decision level of the LTP gain quantizer */ /* bc 0 1 2 3 */ word gsm_DLB[4] = { 6554, 16384, 26214, 32767 }; /* Table 4.3b Quantization levels of the LTP gain quantizer */ /* bc 0 1 2 3 */ word gsm_QLB[4] = { 3277, 11469, 21299, 32767 }; /* Table 4.4 Coefficients of the weighting filter */ /* i 0 1 2 3 4 5 6 7 8 9 10 */ word gsm_H[11] = {-134, -374, 0, 2054, 5741, 8192, 5741, 2054, 0, -374, -134 }; /* Table 4.5 Normalized inverse mantissa used to compute xM/xmax */ /* i 0 1 2 3 4 5 6 7 */ word gsm_NRFAC[8] = { 29128, 26215, 23832, 21846, 20165, 18725, 17476, 16384 }; /* Table 4.6 Normalized direct mantissa used to compute xM/xmax */ /* i 0 1 2 3 4 5 6 7 */ word gsm_FAC[8] = { 18431, 20479, 22527, 24575, 26623, 28671, 30719, 32767 }; h323plus/plugins/audio/GSM0610/src/gsm_encode.c0000644000175000017500000002611211341106231017656 0ustar markmark/* * gsm_encode.c * * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ #include "private.h" #include "gsm.h" #include "proto.h" void gsm_encode P3((s, source, c), gsm s, gsm_signal * source, gsm_byte * c) { word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4]; Gsm_Coder(s, source, LARc, Nc, bc, Mc, xmaxc, xmc); /* variable size GSM_MAGIC 4 LARc[0] 6 LARc[1] 6 LARc[2] 5 LARc[3] 5 LARc[4] 4 LARc[5] 4 LARc[6] 3 LARc[7] 3 Nc[0] 7 bc[0] 2 Mc[0] 2 xmaxc[0] 6 xmc[0] 3 xmc[1] 3 xmc[2] 3 xmc[3] 3 xmc[4] 3 xmc[5] 3 xmc[6] 3 xmc[7] 3 xmc[8] 3 xmc[9] 3 xmc[10] 3 xmc[11] 3 xmc[12] 3 Nc[1] 7 bc[1] 2 Mc[1] 2 xmaxc[1] 6 xmc[13] 3 xmc[14] 3 xmc[15] 3 xmc[16] 3 xmc[17] 3 xmc[18] 3 xmc[19] 3 xmc[20] 3 xmc[21] 3 xmc[22] 3 xmc[23] 3 xmc[24] 3 xmc[25] 3 Nc[2] 7 bc[2] 2 Mc[2] 2 xmaxc[2] 6 xmc[26] 3 xmc[27] 3 xmc[28] 3 xmc[29] 3 xmc[30] 3 xmc[31] 3 xmc[32] 3 xmc[33] 3 xmc[34] 3 xmc[35] 3 xmc[36] 3 xmc[37] 3 xmc[38] 3 Nc[3] 7 bc[3] 2 Mc[3] 2 xmaxc[3] 6 xmc[39] 3 xmc[40] 3 xmc[41] 3 xmc[42] 3 xmc[43] 3 xmc[44] 3 xmc[45] 3 xmc[46] 3 xmc[47] 3 xmc[48] 3 xmc[49] 3 xmc[50] 3 xmc[51] 3 */ #ifdef WAV49 if (s->wav_fmt) { s->frame_index = !s->frame_index; if (s->frame_index) { uword sr; sr = 0; sr = sr >> 6 | LARc[0] << 10; sr = sr >> 6 | LARc[1] << 10; *c++ = sr >> 4; sr = sr >> 5 | LARc[2] << 11; *c++ = sr >> 7; sr = sr >> 5 | LARc[3] << 11; sr = sr >> 4 | LARc[4] << 12; *c++ = sr >> 6; sr = sr >> 4 | LARc[5] << 12; sr = sr >> 3 | LARc[6] << 13; *c++ = sr >> 7; sr = sr >> 3 | LARc[7] << 13; sr = sr >> 7 | Nc[0] << 9; *c++ = sr >> 5; sr = sr >> 2 | bc[0] << 14; sr = sr >> 2 | Mc[0] << 14; sr = sr >> 6 | xmaxc[0] << 10; *c++ = sr >> 3; sr = sr >> 3 | xmc[0] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[1] << 13; sr = sr >> 3 | xmc[2] << 13; sr = sr >> 3 | xmc[3] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[4] << 13; sr = sr >> 3 | xmc[5] << 13; sr = sr >> 3 | xmc[6] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[7] << 13; sr = sr >> 3 | xmc[8] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[9] << 13; sr = sr >> 3 | xmc[10] << 13; sr = sr >> 3 | xmc[11] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[12] << 13; sr = sr >> 7 | Nc[1] << 9; *c++ = sr >> 5; sr = sr >> 2 | bc[1] << 14; sr = sr >> 2 | Mc[1] << 14; sr = sr >> 6 | xmaxc[1] << 10; *c++ = sr >> 3; sr = sr >> 3 | xmc[13] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[14] << 13; sr = sr >> 3 | xmc[15] << 13; sr = sr >> 3 | xmc[16] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[17] << 13; sr = sr >> 3 | xmc[18] << 13; sr = sr >> 3 | xmc[19] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[20] << 13; sr = sr >> 3 | xmc[21] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[22] << 13; sr = sr >> 3 | xmc[23] << 13; sr = sr >> 3 | xmc[24] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[25] << 13; sr = sr >> 7 | Nc[2] << 9; *c++ = sr >> 5; sr = sr >> 2 | bc[2] << 14; sr = sr >> 2 | Mc[2] << 14; sr = sr >> 6 | xmaxc[2] << 10; *c++ = sr >> 3; sr = sr >> 3 | xmc[26] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[27] << 13; sr = sr >> 3 | xmc[28] << 13; sr = sr >> 3 | xmc[29] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[30] << 13; sr = sr >> 3 | xmc[31] << 13; sr = sr >> 3 | xmc[32] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[33] << 13; sr = sr >> 3 | xmc[34] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[35] << 13; sr = sr >> 3 | xmc[36] << 13; sr = sr >> 3 | xmc[37] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[38] << 13; sr = sr >> 7 | Nc[3] << 9; *c++ = sr >> 5; sr = sr >> 2 | bc[3] << 14; sr = sr >> 2 | Mc[3] << 14; sr = sr >> 6 | xmaxc[3] << 10; *c++ = sr >> 3; sr = sr >> 3 | xmc[39] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[40] << 13; sr = sr >> 3 | xmc[41] << 13; sr = sr >> 3 | xmc[42] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[43] << 13; sr = sr >> 3 | xmc[44] << 13; sr = sr >> 3 | xmc[45] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[46] << 13; sr = sr >> 3 | xmc[47] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[48] << 13; sr = sr >> 3 | xmc[49] << 13; sr = sr >> 3 | xmc[50] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[51] << 13; sr = sr >> 4; *c = sr >> 8; s->frame_chain = *c; } else { uword sr; sr = 0; sr = sr >> 4 | s->frame_chain << 12; sr = sr >> 6 | LARc[0] << 10; *c++ = sr >> 6; sr = sr >> 6 | LARc[1] << 10; *c++ = sr >> 8; sr = sr >> 5 | LARc[2] << 11; sr = sr >> 5 | LARc[3] << 11; *c++ = sr >> 6; sr = sr >> 4 | LARc[4] << 12; sr = sr >> 4 | LARc[5] << 12; *c++ = sr >> 6; sr = sr >> 3 | LARc[6] << 13; sr = sr >> 3 | LARc[7] << 13; *c++ = sr >> 8; sr = sr >> 7 | Nc[0] << 9; sr = sr >> 2 | bc[0] << 14; *c++ = sr >> 7; sr = sr >> 2 | Mc[0] << 14; sr = sr >> 6 | xmaxc[0] << 10; *c++ = sr >> 7; sr = sr >> 3 | xmc[0] << 13; sr = sr >> 3 | xmc[1] << 13; sr = sr >> 3 | xmc[2] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[3] << 13; sr = sr >> 3 | xmc[4] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[5] << 13; sr = sr >> 3 | xmc[6] << 13; sr = sr >> 3 | xmc[7] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[8] << 13; sr = sr >> 3 | xmc[9] << 13; sr = sr >> 3 | xmc[10] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[11] << 13; sr = sr >> 3 | xmc[12] << 13; *c++ = sr >> 8; sr = sr >> 7 | Nc[1] << 9; sr = sr >> 2 | bc[1] << 14; *c++ = sr >> 7; sr = sr >> 2 | Mc[1] << 14; sr = sr >> 6 | xmaxc[1] << 10; *c++ = sr >> 7; sr = sr >> 3 | xmc[13] << 13; sr = sr >> 3 | xmc[14] << 13; sr = sr >> 3 | xmc[15] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[16] << 13; sr = sr >> 3 | xmc[17] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[18] << 13; sr = sr >> 3 | xmc[19] << 13; sr = sr >> 3 | xmc[20] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[21] << 13; sr = sr >> 3 | xmc[22] << 13; sr = sr >> 3 | xmc[23] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[24] << 13; sr = sr >> 3 | xmc[25] << 13; *c++ = sr >> 8; sr = sr >> 7 | Nc[2] << 9; sr = sr >> 2 | bc[2] << 14; *c++ = sr >> 7; sr = sr >> 2 | Mc[2] << 14; sr = sr >> 6 | xmaxc[2] << 10; *c++ = sr >> 7; sr = sr >> 3 | xmc[26] << 13; sr = sr >> 3 | xmc[27] << 13; sr = sr >> 3 | xmc[28] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[29] << 13; sr = sr >> 3 | xmc[30] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[31] << 13; sr = sr >> 3 | xmc[32] << 13; sr = sr >> 3 | xmc[33] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[34] << 13; sr = sr >> 3 | xmc[35] << 13; sr = sr >> 3 | xmc[36] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[37] << 13; sr = sr >> 3 | xmc[38] << 13; *c++ = sr >> 8; sr = sr >> 7 | Nc[3] << 9; sr = sr >> 2 | bc[3] << 14; *c++ = sr >> 7; sr = sr >> 2 | Mc[3] << 14; sr = sr >> 6 | xmaxc[3] << 10; *c++ = sr >> 7; sr = sr >> 3 | xmc[39] << 13; sr = sr >> 3 | xmc[40] << 13; sr = sr >> 3 | xmc[41] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[42] << 13; sr = sr >> 3 | xmc[43] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[44] << 13; sr = sr >> 3 | xmc[45] << 13; sr = sr >> 3 | xmc[46] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[47] << 13; sr = sr >> 3 | xmc[48] << 13; sr = sr >> 3 | xmc[49] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[50] << 13; sr = sr >> 3 | xmc[51] << 13; *c++ = sr >> 8; } } else #endif /* WAV49 */ { *c++ = ((GSM_MAGIC & 0xF) << 4) /* 1 */ | ((LARc[0] >> 2) & 0xF); *c++ = ((LARc[0] & 0x3) << 6) | (LARc[1] & 0x3F); *c++ = ((LARc[2] & 0x1F) << 3) | ((LARc[3] >> 2) & 0x7); *c++ = ((LARc[3] & 0x3) << 6) | ((LARc[4] & 0xF) << 2) | ((LARc[5] >> 2) & 0x3); *c++ = ((LARc[5] & 0x3) << 6) | ((LARc[6] & 0x7) << 3) | (LARc[7] & 0x7); *c++ = ((Nc[0] & 0x7F) << 1) | ((bc[0] >> 1) & 0x1); *c++ = ((bc[0] & 0x1) << 7) | ((Mc[0] & 0x3) << 5) | ((xmaxc[0] >> 1) & 0x1F); *c++ = ((xmaxc[0] & 0x1) << 7) | ((xmc[0] & 0x7) << 4) | ((xmc[1] & 0x7) << 1) | ((xmc[2] >> 2) & 0x1); *c++ = ((xmc[2] & 0x3) << 6) | ((xmc[3] & 0x7) << 3) | (xmc[4] & 0x7); *c++ = ((xmc[5] & 0x7) << 5) /* 10 */ | ((xmc[6] & 0x7) << 2) | ((xmc[7] >> 1) & 0x3); *c++ = ((xmc[7] & 0x1) << 7) | ((xmc[8] & 0x7) << 4) | ((xmc[9] & 0x7) << 1) | ((xmc[10] >> 2) & 0x1); *c++ = ((xmc[10] & 0x3) << 6) | ((xmc[11] & 0x7) << 3) | (xmc[12] & 0x7); *c++ = ((Nc[1] & 0x7F) << 1) | ((bc[1] >> 1) & 0x1); *c++ = ((bc[1] & 0x1) << 7) | ((Mc[1] & 0x3) << 5) | ((xmaxc[1] >> 1) & 0x1F); *c++ = ((xmaxc[1] & 0x1) << 7) | ((xmc[13] & 0x7) << 4) | ((xmc[14] & 0x7) << 1) | ((xmc[15] >> 2) & 0x1); *c++ = ((xmc[15] & 0x3) << 6) | ((xmc[16] & 0x7) << 3) | (xmc[17] & 0x7); *c++ = ((xmc[18] & 0x7) << 5) | ((xmc[19] & 0x7) << 2) | ((xmc[20] >> 1) & 0x3); *c++ = ((xmc[20] & 0x1) << 7) | ((xmc[21] & 0x7) << 4) | ((xmc[22] & 0x7) << 1) | ((xmc[23] >> 2) & 0x1); *c++ = ((xmc[23] & 0x3) << 6) | ((xmc[24] & 0x7) << 3) | (xmc[25] & 0x7); *c++ = ((Nc[2] & 0x7F) << 1) /* 20 */ | ((bc[2] >> 1) & 0x1); *c++ = ((bc[2] & 0x1) << 7) | ((Mc[2] & 0x3) << 5) | ((xmaxc[2] >> 1) & 0x1F); *c++ = ((xmaxc[2] & 0x1) << 7) | ((xmc[26] & 0x7) << 4) | ((xmc[27] & 0x7) << 1) | ((xmc[28] >> 2) & 0x1); *c++ = ((xmc[28] & 0x3) << 6) | ((xmc[29] & 0x7) << 3) | (xmc[30] & 0x7); *c++ = ((xmc[31] & 0x7) << 5) | ((xmc[32] & 0x7) << 2) | ((xmc[33] >> 1) & 0x3); *c++ = ((xmc[33] & 0x1) << 7) | ((xmc[34] & 0x7) << 4) | ((xmc[35] & 0x7) << 1) | ((xmc[36] >> 2) & 0x1); *c++ = ((xmc[36] & 0x3) << 6) | ((xmc[37] & 0x7) << 3) | (xmc[38] & 0x7); *c++ = ((Nc[3] & 0x7F) << 1) | ((bc[3] >> 1) & 0x1); *c++ = ((bc[3] & 0x1) << 7) | ((Mc[3] & 0x3) << 5) | ((xmaxc[3] >> 1) & 0x1F); *c++ = ((xmaxc[3] & 0x1) << 7) | ((xmc[39] & 0x7) << 4) | ((xmc[40] & 0x7) << 1) | ((xmc[41] >> 2) & 0x1); *c++ = ((xmc[41] & 0x3) << 6) /* 30 */ | ((xmc[42] & 0x7) << 3) | (xmc[43] & 0x7); *c++ = ((xmc[44] & 0x7) << 5) | ((xmc[45] & 0x7) << 2) | ((xmc[46] >> 1) & 0x3); *c++ = ((xmc[46] & 0x1) << 7) | ((xmc[47] & 0x7) << 4) | ((xmc[48] & 0x7) << 1) | ((xmc[49] >> 2) & 0x1); *c++ = ((xmc[49] & 0x3) << 6) | ((xmc[50] & 0x7) << 3) | (xmc[51] & 0x7); } } h323plus/plugins/audio/GSM0610/src/long_term.c0000644000175000017500000005573111341106231017552 0ustar markmark/* * long_term.c * * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ #include #include #include "private.h" #include "gsm.h" #include "proto.h" /* * 4.2.11 .. 4.2.12 LONG TERM PREDICTOR (LTP) SECTION */ /* * This module computes the LTP gain (bc) and the LTP lag (Nc) * for the long term analysis filter. This is done by calculating a * maximum of the cross-correlation function between the current * sub-segment short term residual signal d[0..39] (output of * the short term analysis filter; for simplification the index * of this array begins at 0 and ends at 39 for each sub-segment of the * RPE-LTP analysis) and the previous reconstructed short term * residual signal dp[ -120 .. -1 ]. A dynamic scaling must be * performed to avoid overflow. */ /* The next procedure exists in six versions. First two integer * version (if USE_FLOAT_MUL is not defined); then four floating * point versions, twice with proper scaling (USE_FLOAT_MUL defined), * once without (USE_FLOAT_MUL and FAST defined, and fast run-time * option used). Every pair has first a Cut version (see the -C * option to toast or the LTP_CUT option to gsm_option()), then the * uncut one. (For a detailed explanation of why this is altogether * a bad idea, see Henry Spencer and Geoff Collyer, ``#ifdef Considered * Harmful''.) */ #ifndef USE_FLOAT_MUL #ifdef LTP_CUT static void Cut_Calculation_of_the_LTP_parameters P5((st, d,dp,bc_out,Nc_out), struct gsm_state * st, register word * d, /* [0..39] IN */ register word * dp, /* [-120..-1] IN */ word * bc_out, /* OUT */ word * Nc_out /* OUT */ ) { register int k, lambda; word Nc, bc; word wt[40]; longword L_result; longword L_max, L_power; word R, S, dmax, scal, best_k; word ltp_cut; register word temp, wt_k; /* Search of the optimum scaling of d[0..39]. */ dmax = 0; for (k = 0; k <= 39; k++) { temp = d[k]; temp = GSM_ABS( temp ); if (temp > dmax) { dmax = temp; best_k = k; } } temp = 0; if (dmax == 0) scal = 0; else { assert(dmax > 0); temp = gsm_norm( (longword)dmax << 16 ); } if (temp > 6) scal = 0; else scal = 6 - temp; assert(scal >= 0); /* Search for the maximum cross-correlation and coding of the LTP lag */ L_max = 0; Nc = 40; /* index for the maximum cross-correlation */ wt_k = SASR(d[best_k], scal); for (lambda = 40; lambda <= 120; lambda++) { L_result = (longword)wt_k * dp[best_k - lambda]; if (L_result > L_max) { Nc = lambda; L_max = L_result; } } *Nc_out = Nc; L_max <<= 1; /* Rescaling of L_max */ assert(scal <= 100 && scal >= -100); L_max = L_max >> (6 - scal); /* sub(6, scal) */ assert( Nc <= 120 && Nc >= 40); /* Compute the power of the reconstructed short term residual * signal dp[..] */ L_power = 0; for (k = 0; k <= 39; k++) { register longword L_temp; L_temp = SASR( dp[k - Nc], 3 ); L_power += L_temp * L_temp; } L_power <<= 1; /* from L_MULT */ /* Normalization of L_max and L_power */ if (L_max <= 0) { *bc_out = 0; return; } if (L_max >= L_power) { *bc_out = 3; return; } temp = gsm_norm( L_power ); R = SASR( L_max << temp, 16 ); S = SASR( L_power << temp, 16 ); /* Coding of the LTP gain */ /* Table 4.3a must be used to obtain the level DLB[i] for the * quantization of the LTP gain b to get the coded version bc. */ for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break; *bc_out = bc; } #endif /* LTP_CUT */ static void Calculation_of_the_LTP_parameters P4((d,dp,bc_out,Nc_out), register word * d, /* [0..39] IN */ register word * dp, /* [-120..-1] IN */ word * bc_out, /* OUT */ word * Nc_out /* OUT */ ) { register int k, lambda; word Nc, bc; word wt[40]; longword L_max, L_power; word R, S, dmax, scal; register word temp; /* Search of the optimum scaling of d[0..39]. */ dmax = 0; for (k = 0; k <= 39; k++) { temp = d[k]; temp = GSM_ABS( temp ); if (temp > dmax) dmax = temp; } temp = 0; if (dmax == 0) scal = 0; else { assert(dmax > 0); temp = gsm_norm( (longword)dmax << 16 ); } if (temp > 6) scal = 0; else scal = 6 - temp; assert(scal >= 0); /* Initialization of a working array wt */ for (k = 0; k <= 39; k++) wt[k] = SASR( d[k], scal ); /* Search for the maximum cross-correlation and coding of the LTP lag */ L_max = 0; Nc = 40; /* index for the maximum cross-correlation */ for (lambda = 40; lambda <= 120; lambda++) { # undef STEP # define STEP(k) (longword)wt[k] * dp[k - lambda] register longword L_result; L_result = STEP(0) ; L_result += STEP(1) ; L_result += STEP(2) ; L_result += STEP(3) ; L_result += STEP(4) ; L_result += STEP(5) ; L_result += STEP(6) ; L_result += STEP(7) ; L_result += STEP(8) ; L_result += STEP(9) ; L_result += STEP(10) ; L_result += STEP(11) ; L_result += STEP(12) ; L_result += STEP(13) ; L_result += STEP(14) ; L_result += STEP(15) ; L_result += STEP(16) ; L_result += STEP(17) ; L_result += STEP(18) ; L_result += STEP(19) ; L_result += STEP(20) ; L_result += STEP(21) ; L_result += STEP(22) ; L_result += STEP(23) ; L_result += STEP(24) ; L_result += STEP(25) ; L_result += STEP(26) ; L_result += STEP(27) ; L_result += STEP(28) ; L_result += STEP(29) ; L_result += STEP(30) ; L_result += STEP(31) ; L_result += STEP(32) ; L_result += STEP(33) ; L_result += STEP(34) ; L_result += STEP(35) ; L_result += STEP(36) ; L_result += STEP(37) ; L_result += STEP(38) ; L_result += STEP(39) ; if (L_result > L_max) { Nc = lambda; L_max = L_result; } } *Nc_out = Nc; L_max <<= 1; /* Rescaling of L_max */ assert(scal <= 100 && scal >= -100); L_max = L_max >> (6 - scal); /* sub(6, scal) */ assert( Nc <= 120 && Nc >= 40); /* Compute the power of the reconstructed short term residual * signal dp[..] */ L_power = 0; for (k = 0; k <= 39; k++) { register longword L_temp; L_temp = SASR( dp[k - Nc], 3 ); L_power += L_temp * L_temp; } L_power <<= 1; /* from L_MULT */ /* Normalization of L_max and L_power */ if (L_max <= 0) { *bc_out = 0; return; } if (L_max >= L_power) { *bc_out = 3; return; } temp = gsm_norm( L_power ); R = SASR( L_max << temp, 16 ); S = SASR( L_power << temp, 16 ); /* Coding of the LTP gain */ /* Table 4.3a must be used to obtain the level DLB[i] for the * quantization of the LTP gain b to get the coded version bc. */ for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break; *bc_out = bc; } #else /* USE_FLOAT_MUL */ #ifdef LTP_CUT static void Cut_Calculation_of_the_LTP_parameters P5((st, d,dp,bc_out,Nc_out), struct gsm_state * st, /* IN */ register word * d, /* [0..39] IN */ register word * dp, /* [-120..-1] IN */ word * bc_out, /* OUT */ word * Nc_out /* OUT */ ) { register int k, lambda; word Nc, bc; word ltp_cut; float wt_float[40]; float dp_float_base[120], * dp_float = dp_float_base + 120; longword L_max, L_power; word R, S, dmax, scal; register word temp; /* Search of the optimum scaling of d[0..39]. */ dmax = 0; for (k = 0; k <= 39; k++) { temp = d[k]; temp = GSM_ABS( temp ); if (temp > dmax) dmax = temp; } temp = 0; if (dmax == 0) scal = 0; else { assert(dmax > 0); temp = gsm_norm( (longword)dmax << 16 ); } if (temp > 6) scal = 0; else scal = 6 - temp; assert(scal >= 0); ltp_cut = (longword)SASR(dmax, scal) * st->ltp_cut / 100; /* Initialization of a working array wt */ for (k = 0; k < 40; k++) { register word w = SASR( d[k], scal ); if (w < 0 ? w > -ltp_cut : w < ltp_cut) { wt_float[k] = 0.0; } else { wt_float[k] = w; } } for (k = -120; k < 0; k++) dp_float[k] = dp[k]; /* Search for the maximum cross-correlation and coding of the LTP lag */ L_max = 0; Nc = 40; /* index for the maximum cross-correlation */ for (lambda = 40; lambda <= 120; lambda += 9) { /* Calculate L_result for l = lambda .. lambda + 9. */ register float *lp = dp_float - lambda; register float W; register float a = lp[-8], b = lp[-7], c = lp[-6], d = lp[-5], e = lp[-4], f = lp[-3], g = lp[-2], h = lp[-1]; register float E; register float S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0, S5 = 0, S6 = 0, S7 = 0, S8 = 0; # undef STEP # define STEP(K, a, b, c, d, e, f, g, h) \ if ((W = wt_float[K]) != 0.0) { \ E = W * a; S8 += E; \ E = W * b; S7 += E; \ E = W * c; S6 += E; \ E = W * d; S5 += E; \ E = W * e; S4 += E; \ E = W * f; S3 += E; \ E = W * g; S2 += E; \ E = W * h; S1 += E; \ a = lp[K]; \ E = W * a; S0 += E; } else (a = lp[K]) # define STEP_A(K) STEP(K, a, b, c, d, e, f, g, h) # define STEP_B(K) STEP(K, b, c, d, e, f, g, h, a) # define STEP_C(K) STEP(K, c, d, e, f, g, h, a, b) # define STEP_D(K) STEP(K, d, e, f, g, h, a, b, c) # define STEP_E(K) STEP(K, e, f, g, h, a, b, c, d) # define STEP_F(K) STEP(K, f, g, h, a, b, c, d, e) # define STEP_G(K) STEP(K, g, h, a, b, c, d, e, f) # define STEP_H(K) STEP(K, h, a, b, c, d, e, f, g) STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3); STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7); STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11); STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15); STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19); STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23); STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27); STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31); STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35); STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39); if (S0 > L_max) { L_max = S0; Nc = lambda; } if (S1 > L_max) { L_max = S1; Nc = lambda + 1; } if (S2 > L_max) { L_max = S2; Nc = lambda + 2; } if (S3 > L_max) { L_max = S3; Nc = lambda + 3; } if (S4 > L_max) { L_max = S4; Nc = lambda + 4; } if (S5 > L_max) { L_max = S5; Nc = lambda + 5; } if (S6 > L_max) { L_max = S6; Nc = lambda + 6; } if (S7 > L_max) { L_max = S7; Nc = lambda + 7; } if (S8 > L_max) { L_max = S8; Nc = lambda + 8; } } *Nc_out = Nc; L_max <<= 1; /* Rescaling of L_max */ assert(scal <= 100 && scal >= -100); L_max = L_max >> (6 - scal); /* sub(6, scal) */ assert( Nc <= 120 && Nc >= 40); /* Compute the power of the reconstructed short term residual * signal dp[..] */ L_power = 0; for (k = 0; k <= 39; k++) { register longword L_temp; L_temp = SASR( dp[k - Nc], 3 ); L_power += L_temp * L_temp; } L_power <<= 1; /* from L_MULT */ /* Normalization of L_max and L_power */ if (L_max <= 0) { *bc_out = 0; return; } if (L_max >= L_power) { *bc_out = 3; return; } temp = gsm_norm( L_power ); R = SASR( L_max << temp, 16 ); S = SASR( L_power << temp, 16 ); /* Coding of the LTP gain */ /* Table 4.3a must be used to obtain the level DLB[i] for the * quantization of the LTP gain b to get the coded version bc. */ for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break; *bc_out = bc; } #endif /* LTP_CUT */ static void Calculation_of_the_LTP_parameters P4((d,dp,bc_out,Nc_out), register word * d, /* [0..39] IN */ register word * dp, /* [-120..-1] IN */ word * bc_out, /* OUT */ word * Nc_out /* OUT */ ) { register int k, lambda; word Nc, bc; float wt_float[40]; float dp_float_base[120], * dp_float = dp_float_base + 120; longword L_max, L_power; word R, S, dmax, scal; register word temp; /* Search of the optimum scaling of d[0..39]. */ dmax = 0; for (k = 0; k <= 39; k++) { temp = d[k]; temp = GSM_ABS( temp ); if (temp > dmax) dmax = temp; } temp = 0; if (dmax == 0) scal = 0; else { assert(dmax > 0); temp = gsm_norm( (longword)dmax << 16 ); } if (temp > 6) scal = 0; else scal = 6 - temp; assert(scal >= 0); /* Initialization of a working array wt */ for (k = 0; k < 40; k++) wt_float[k] = SASR( d[k], scal ); for (k = -120; k < 0; k++) dp_float[k] = dp[k]; /* Search for the maximum cross-correlation and coding of the LTP lag */ L_max = 0; Nc = 40; /* index for the maximum cross-correlation */ for (lambda = 40; lambda <= 120; lambda += 9) { /* Calculate L_result for l = lambda .. lambda + 9. */ register float *lp = dp_float - lambda; register float W; register float a = lp[-8], b = lp[-7], c = lp[-6], d = lp[-5], e = lp[-4], f = lp[-3], g = lp[-2], h = lp[-1]; register float E; register float S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0, S5 = 0, S6 = 0, S7 = 0, S8 = 0; # undef STEP # define STEP(K, a, b, c, d, e, f, g, h) \ W = wt_float[K]; \ E = W * a; S8 += E; \ E = W * b; S7 += E; \ E = W * c; S6 += E; \ E = W * d; S5 += E; \ E = W * e; S4 += E; \ E = W * f; S3 += E; \ E = W * g; S2 += E; \ E = W * h; S1 += E; \ a = lp[K]; \ E = W * a; S0 += E # define STEP_A(K) STEP(K, a, b, c, d, e, f, g, h) # define STEP_B(K) STEP(K, b, c, d, e, f, g, h, a) # define STEP_C(K) STEP(K, c, d, e, f, g, h, a, b) # define STEP_D(K) STEP(K, d, e, f, g, h, a, b, c) # define STEP_E(K) STEP(K, e, f, g, h, a, b, c, d) # define STEP_F(K) STEP(K, f, g, h, a, b, c, d, e) # define STEP_G(K) STEP(K, g, h, a, b, c, d, e, f) # define STEP_H(K) STEP(K, h, a, b, c, d, e, f, g) STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3); STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7); STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11); STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15); STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19); STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23); STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27); STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31); STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35); STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39); if (S0 > L_max) { L_max = S0; Nc = lambda; } if (S1 > L_max) { L_max = S1; Nc = lambda + 1; } if (S2 > L_max) { L_max = S2; Nc = lambda + 2; } if (S3 > L_max) { L_max = S3; Nc = lambda + 3; } if (S4 > L_max) { L_max = S4; Nc = lambda + 4; } if (S5 > L_max) { L_max = S5; Nc = lambda + 5; } if (S6 > L_max) { L_max = S6; Nc = lambda + 6; } if (S7 > L_max) { L_max = S7; Nc = lambda + 7; } if (S8 > L_max) { L_max = S8; Nc = lambda + 8; } } *Nc_out = Nc; L_max <<= 1; /* Rescaling of L_max */ assert(scal <= 100 && scal >= -100); L_max = L_max >> (6 - scal); /* sub(6, scal) */ assert( Nc <= 120 && Nc >= 40); /* Compute the power of the reconstructed short term residual * signal dp[..] */ L_power = 0; for (k = 0; k <= 39; k++) { register longword L_temp; L_temp = SASR( dp[k - Nc], 3 ); L_power += L_temp * L_temp; } L_power <<= 1; /* from L_MULT */ /* Normalization of L_max and L_power */ if (L_max <= 0) { *bc_out = 0; return; } if (L_max >= L_power) { *bc_out = 3; return; } temp = gsm_norm( L_power ); R = SASR( L_max << temp, 16 ); S = SASR( L_power << temp, 16 ); /* Coding of the LTP gain */ /* Table 4.3a must be used to obtain the level DLB[i] for the * quantization of the LTP gain b to get the coded version bc. */ for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break; *bc_out = bc; } #ifdef FAST #ifdef LTP_CUT static void Cut_Fast_Calculation_of_the_LTP_parameters P5((st, d,dp,bc_out,Nc_out), struct gsm_state * st, /* IN */ register word * d, /* [0..39] IN */ register word * dp, /* [-120..-1] IN */ word * bc_out, /* OUT */ word * Nc_out /* OUT */ ) { register int k, lambda; register float wt_float; word Nc, bc; word wt_max, best_k, ltp_cut; float dp_float_base[120], * dp_float = dp_float_base + 120; register float L_result, L_max, L_power; wt_max = 0; for (k = 0; k < 40; ++k) { if ( d[k] > wt_max) wt_max = d[best_k = k]; else if (-d[k] > wt_max) wt_max = -d[best_k = k]; } assert(wt_max >= 0); wt_float = (float)wt_max; for (k = -120; k < 0; ++k) dp_float[k] = (float)dp[k]; /* Search for the maximum cross-correlation and coding of the LTP lag */ L_max = 0; Nc = 40; /* index for the maximum cross-correlation */ for (lambda = 40; lambda <= 120; lambda++) { L_result = wt_float * dp_float[best_k - lambda]; if (L_result > L_max) { Nc = lambda; L_max = L_result; } } *Nc_out = Nc; if (L_max <= 0.) { *bc_out = 0; return; } /* Compute the power of the reconstructed short term residual * signal dp[..] */ dp_float -= Nc; L_power = 0; for (k = 0; k < 40; ++k) { register float f = dp_float[k]; L_power += f * f; } if (L_max >= L_power) { *bc_out = 3; return; } /* Coding of the LTP gain * Table 4.3a must be used to obtain the level DLB[i] for the * quantization of the LTP gain b to get the coded version bc. */ lambda = L_max / L_power * 32768.; for (bc = 0; bc <= 2; ++bc) if (lambda <= gsm_DLB[bc]) break; *bc_out = bc; } #endif /* LTP_CUT */ static void Fast_Calculation_of_the_LTP_parameters P4((d,dp,bc_out,Nc_out), register word * d, /* [0..39] IN */ register word * dp, /* [-120..-1] IN */ word * bc_out, /* OUT */ word * Nc_out /* OUT */ ) { register int k, lambda; word Nc, bc; float wt_float[40]; float dp_float_base[120], * dp_float = dp_float_base + 120; register float L_max, L_power; for (k = 0; k < 40; ++k) wt_float[k] = (float)d[k]; for (k = -120; k < 0; ++k) dp_float[k] = (float)dp[k]; /* Search for the maximum cross-correlation and coding of the LTP lag */ L_max = 0; Nc = 40; /* index for the maximum cross-correlation */ for (lambda = 40; lambda <= 120; lambda += 9) { /* Calculate L_result for l = lambda .. lambda + 9. */ register float *lp = dp_float - lambda; register float W; register float a = lp[-8], b = lp[-7], c = lp[-6], d = lp[-5], e = lp[-4], f = lp[-3], g = lp[-2], h = lp[-1]; register float E; register float S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0, S5 = 0, S6 = 0, S7 = 0, S8 = 0; # undef STEP # define STEP(K, a, b, c, d, e, f, g, h) \ W = wt_float[K]; \ E = W * a; S8 += E; \ E = W * b; S7 += E; \ E = W * c; S6 += E; \ E = W * d; S5 += E; \ E = W * e; S4 += E; \ E = W * f; S3 += E; \ E = W * g; S2 += E; \ E = W * h; S1 += E; \ a = lp[K]; \ E = W * a; S0 += E # define STEP_A(K) STEP(K, a, b, c, d, e, f, g, h) # define STEP_B(K) STEP(K, b, c, d, e, f, g, h, a) # define STEP_C(K) STEP(K, c, d, e, f, g, h, a, b) # define STEP_D(K) STEP(K, d, e, f, g, h, a, b, c) # define STEP_E(K) STEP(K, e, f, g, h, a, b, c, d) # define STEP_F(K) STEP(K, f, g, h, a, b, c, d, e) # define STEP_G(K) STEP(K, g, h, a, b, c, d, e, f) # define STEP_H(K) STEP(K, h, a, b, c, d, e, f, g) STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3); STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7); STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11); STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15); STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19); STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23); STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27); STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31); STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35); STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39); if (S0 > L_max) { L_max = S0; Nc = lambda; } if (S1 > L_max) { L_max = S1; Nc = lambda + 1; } if (S2 > L_max) { L_max = S2; Nc = lambda + 2; } if (S3 > L_max) { L_max = S3; Nc = lambda + 3; } if (S4 > L_max) { L_max = S4; Nc = lambda + 4; } if (S5 > L_max) { L_max = S5; Nc = lambda + 5; } if (S6 > L_max) { L_max = S6; Nc = lambda + 6; } if (S7 > L_max) { L_max = S7; Nc = lambda + 7; } if (S8 > L_max) { L_max = S8; Nc = lambda + 8; } } *Nc_out = Nc; if (L_max <= 0.) { *bc_out = 0; return; } /* Compute the power of the reconstructed short term residual * signal dp[..] */ dp_float -= Nc; L_power = 0; for (k = 0; k < 40; ++k) { register float f = dp_float[k]; L_power += f * f; } if (L_max >= L_power) { *bc_out = 3; return; } /* Coding of the LTP gain * Table 4.3a must be used to obtain the level DLB[i] for the * quantization of the LTP gain b to get the coded version bc. */ lambda = L_max / L_power * 32768.; for (bc = 0; bc <= 2; ++bc) if (lambda <= gsm_DLB[bc]) break; *bc_out = bc; } #endif /* FAST */ #endif /* USE_FLOAT_MUL */ /* 4.2.12 */ static void Long_term_analysis_filtering P6((bc,Nc,dp,d,dpp,e), word bc, /* IN */ word Nc, /* IN */ register word * dp, /* previous d [-120..-1] IN */ register word * d, /* d [0..39] IN */ register word * dpp, /* estimate [0..39] OUT */ register word * e /* long term res. signal [0..39] OUT */ ) /* * In this part, we have to decode the bc parameter to compute * the samples of the estimate dpp[0..39]. The decoding of bc needs the * use of table 4.3b. The long term residual signal e[0..39] * is then calculated to be fed to the RPE encoding section. */ { register int k; register longword ltmp; # undef STEP # define STEP(BP) \ for (k = 0; k <= 39; k++) { \ dpp[k] = GSM_MULT_R( BP, dp[k - Nc]); \ e[k] = (word) GSM_SUB( d[k], dpp[k] ); \ } switch (bc) { case 0: STEP( 3277 ); break; case 1: STEP( 11469 ); break; case 2: STEP( 21299 ); break; case 3: STEP( 32767 ); break; } } void Gsm_Long_Term_Predictor P7((S,d,dp,e,dpp,Nc,bc), /* 4x for 160 samples */ struct gsm_state * S, word * d, /* [0..39] residual signal IN */ word * dp, /* [-120..-1] d' IN */ word * e, /* [0..39] OUT */ word * dpp, /* [0..39] OUT */ word * Nc, /* correlation lag OUT */ word * bc /* gain factor OUT */ ) { assert( d ); assert( dp ); assert( e ); assert( dpp); assert( Nc ); assert( bc ); #if defined(FAST) && defined(USE_FLOAT_MUL) if (S->fast) #if defined (LTP_CUT) if (S->ltp_cut) Cut_Fast_Calculation_of_the_LTP_parameters(S, d, dp, bc, Nc); else #endif /* LTP_CUT */ Fast_Calculation_of_the_LTP_parameters(d, dp, bc, Nc ); else #endif /* FAST & USE_FLOAT_MUL */ #ifdef LTP_CUT if (S->ltp_cut) Cut_Calculation_of_the_LTP_parameters(S, d, dp, bc, Nc); else #endif Calculation_of_the_LTP_parameters(d, dp, bc, Nc); Long_term_analysis_filtering( *bc, *Nc, dp, d, dpp, e ); } /* 4.3.2 */ void Gsm_Long_Term_Synthesis_Filtering P5((S,Ncr,bcr,erp,drp), struct gsm_state * S, word Ncr, word bcr, register word * erp, /* [0..39] IN */ register word * drp /* [-120..-1] IN, [-120..40] OUT */ ) /* * This procedure uses the bcr and Ncr parameter to realize the * long term synthesis filtering. The decoding of bcr needs * table 4.3b. */ { register longword ltmp; /* for ADD */ register int k; word brp, drpp, Nr; /* Check the limits of Nr. */ Nr = Ncr < 40 || Ncr > 120 ? S->nrp : Ncr; S->nrp = Nr; assert(Nr >= 40 && Nr <= 120); /* Decoding of the LTP gain bcr */ brp = gsm_QLB[ bcr ]; /* Computation of the reconstructed short term residual * signal drp[0..39] */ assert(brp != MIN_WORD); for (k = 0; k <= 39; k++) { drpp = GSM_MULT_R( brp, drp[ k - Nr ] ); drp[k] = (word) GSM_ADD( erp[k], drpp ); } /* * Update of the reconstructed short term residual signal * drp[ -1..-120 ] */ for (k = 0; k <= 119; k++) drp[ -120 + k ] = drp[ -80 + k ]; } h323plus/plugins/audio/GSM0610/src/preprocess.c0000644000175000017500000000461111341106231017740 0ustar markmark/* * preprocess.c * * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ #include #include #include "private.h" #include "gsm.h" #include "proto.h" /* 4.2.0 .. 4.2.3 PREPROCESSING SECTION * * After A-law to linear conversion (or directly from the * Ato D converter) the following scaling is assumed for * input to the RPE-LTP algorithm: * * in: 0.1.....................12 * S.v.v.v.v.v.v.v.v.v.v.v.v.*.*.* * * Where S is the sign bit, v a valid bit, and * a "don't care" bit. * The original signal is called sop[..] * * out: 0.1................... 12 * S.S.v.v.v.v.v.v.v.v.v.v.v.v.0.0 */ void Gsm_Preprocess P3((S, s, so), struct gsm_state * S, word * s, word * so ) /* [0..159] IN/OUT */ { word z1 = S->z1; longword L_z2 = S->L_z2; word mp = S->mp; word s1; longword L_s2; longword L_temp; word msp, lsp; word SO; longword ltmp; /* for ADD */ ulongword utmp; /* for L_ADD */ register int k = 160; while (k--) { /* 4.2.1 Downscaling of the input signal */ SO = SASR( *s, 3 ) << 2; s++; assert (SO >= -0x4000); /* downscaled by */ assert (SO <= 0x3FFC); /* previous routine. */ /* 4.2.2 Offset compensation * * This part implements a high-pass filter and requires extended * arithmetic precision for the recursive part of this filter. * The input of this procedure is the array so[0...159] and the * output the array sof[ 0...159 ]. */ /* Compute the non-recursive part */ s1 = SO - z1; /* s1 = gsm_sub( *so, z1 ); */ z1 = SO; assert(s1 != MIN_WORD); /* Compute the recursive part */ L_s2 = s1; L_s2 <<= 15; /* Execution of a 31 bv 16 bits multiplication */ msp = SASR( L_z2, 15 ); lsp = (word) (L_z2-((longword)msp<<15)); /* gsm_L_sub(L_z2,(msp<<15)); */ L_s2 += GSM_MULT_R( lsp, 32735 ); L_temp = (longword)msp * 32735; /* GSM_L_MULT(msp,32735) >> 1;*/ L_z2 = GSM_L_ADD( L_temp, L_s2 ); /* Compute sof[k] with rounding */ L_temp = GSM_L_ADD( L_z2, 16384 ); /* 4.2.3 Preemphasis */ msp = GSM_MULT_R( mp, -28180 ); mp = SASR( L_temp, 15 ); *so++ = (word) GSM_ADD( mp, msp ); } S->z1 = z1; S->L_z2 = L_z2; S->mp = mp; } h323plus/plugins/audio/GSM0610/src/code.c0000644000175000017500000000466711341106231016500 0ustar markmark/* * code.c * * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ #include "config.h" #include #ifdef HAS_STDLIB_H #include #else # include "proto.h" extern char * memcpy P((char *, char *, int)); #endif #include "private.h" #include "gsm.h" #include "proto.h" /* * 4.2 FIXED POINT IMPLEMENTATION OF THE RPE-LTP CODER */ void Gsm_Coder P8((S,s,LARc,Nc,bc,Mc,xmaxc,xMc), struct gsm_state * S, word * s, /* [0..159] samples IN */ /* * The RPE-LTD coder works on a frame by frame basis. The length of * the frame is equal to 160 samples. Some computations are done * once per frame to produce at the output of the coder the * LARc[1..8] parameters which are the coded LAR coefficients and * also to realize the inverse filtering operation for the entire * frame (160 samples of signal d[0..159]). These parts produce at * the output of the coder: */ word * LARc, /* [0..7] LAR coefficients OUT */ /* * Procedure 4.2.11 to 4.2.18 are to be executed four times per * frame. That means once for each sub-segment RPE-LTP analysis of * 40 samples. These parts produce at the output of the coder: */ word * Nc, /* [0..3] LTP lag OUT */ word * bc, /* [0..3] coded LTP gain OUT */ word * Mc, /* [0..3] RPE grid selection OUT */ word * xmaxc,/* [0..3] Coded maximum amplitude OUT */ word * xMc /* [13*4] normalized RPE samples OUT */ ) { int k; word * dp = S->dp0 + 120; /* [ -120...-1 ] */ word * dpp = dp; /* [ 0...39 ] */ static word e[50]; word so[160]; Gsm_Preprocess (S, s, so); Gsm_LPC_Analysis (S, so, LARc); Gsm_Short_Term_Analysis_Filter (S, LARc, so); for (k = 0; k <= 3; k++, xMc += 13) { Gsm_Long_Term_Predictor ( S, so+k*40, /* d [0..39] IN */ dp, /* dp [-120..-1] IN */ e + 5, /* e [0..39] OUT */ dpp, /* dpp [0..39] OUT */ Nc++, bc++); Gsm_RPE_Encoding ( S, e + 5, /* e ][0..39][ IN/OUT */ xmaxc++, Mc++, xMc ); /* * Gsm_Update_of_reconstructed_short_time_residual_signal * ( dpp, e + 5, dp ); */ { register int i; register longword ltmp; for (i = 0; i <= 39; i++) dp[ i ] = (word) GSM_ADD( e[5 + i], dpp[i] ); } dp += 40; dpp += 40; } (void)memcpy( (char *)S->dp0, (char *)(S->dp0 + 160), 120 * sizeof(*S->dp0) ); } h323plus/plugins/audio/GSM0610/src/gsm_option.c0000644000175000017500000000213511341106231017730 0ustar markmark/* * gsm_option.c * * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ #include "private.h" #include "gsm.h" #include "proto.h" int gsm_option P3((r, opt, val), gsm r, int opt, int * val) { int result = -1; switch (opt) { case GSM_OPT_LTP_CUT: #ifdef LTP_CUT result = r->ltp_cut; if (val) r->ltp_cut = *val; #endif break; case GSM_OPT_VERBOSE: #ifndef NDEBUG result = r->verbose; if (val) r->verbose = *val; #endif break; case GSM_OPT_FAST: #if defined(FAST) && defined(USE_FLOAT_MUL) result = r->fast; if (val) r->fast = !!*val; #endif break; case GSM_OPT_FRAME_CHAIN: #ifdef WAV49 result = r->frame_chain; if (val) r->frame_chain = *val; #endif break; case GSM_OPT_FRAME_INDEX: #ifdef WAV49 result = r->frame_index; if (val) r->frame_index = *val; #endif break; case GSM_OPT_WAV49: #ifdef WAV49 result = r->wav_fmt; if (val) r->wav_fmt = !!*val; #endif break; default: break; } return result; } h323plus/plugins/audio/GSM0610/src/decode.c0000644000175000017500000000272011341106231016775 0ustar markmark/* * decode.c * * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ #include #include "private.h" #include "gsm.h" #include "proto.h" /* * 4.3 FIXED POINT IMPLEMENTATION OF THE RPE-LTP DECODER */ static void Postprocessing P2((S,s), struct gsm_state * S, register word * s) { register int k; register word msr = S->msr; register longword ltmp; /* for GSM_ADD */ register word tmp; for (k = 160; k--; s++) { tmp = GSM_MULT_R( msr, 28180 ); msr = (word) GSM_ADD(*s, tmp); /* Deemphasis */ *s = GSM_ADD(msr, msr) & 0xFFF8; /* Truncation & Upscaling */ } S->msr = msr; } void Gsm_Decoder P8((S,LARcr, Ncr,bcr,Mcr,xmaxcr,xMcr,s), struct gsm_state * S, word * LARcr, /* [0..7] IN */ word * Ncr, /* [0..3] IN */ word * bcr, /* [0..3] IN */ word * Mcr, /* [0..3] IN */ word * xmaxcr, /* [0..3] IN */ word * xMcr, /* [0..13*4] IN */ word * s) /* [0..159] OUT */ { int j, k; word erp[40], wt[160]; word * drp = S->dp0 + 120; for (j=0; j <= 3; j++, xmaxcr++, bcr++, Ncr++, Mcr++, xMcr += 13) { Gsm_RPE_Decoding( S, *xmaxcr, *Mcr, xMcr, erp ); Gsm_Long_Term_Synthesis_Filtering( S, *Ncr, *bcr, erp, drp ); for (k = 0; k <= 39; k++) wt[ j * 40 + k ] = drp[ k ]; } Gsm_Short_Term_Synthesis_Filter( S, LARcr, wt, s ); Postprocessing(S, s); } h323plus/plugins/audio/GSM0610/gsm06_10_codec.c0000644000175000017500000004241711341106231017363 0ustar markmark/* * GSM 06.10 Plugin codec for OpenH323/OPAL * * Copyright (C) 2004 Post Increment, All Rights Reserved * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Post Increment * * Contributor(s): ______________________________________. * * $Revision: 1.1 $ * $Author: shorne $ * $Date: 2010/02/24 02:19:05 $ */ #define _CRT_NONSTDC_NO_DEPRECATE 1 #define _CRT_SECURE_NO_WARNINGS 1 #include #include #include #ifndef PLUGIN_CODEC_DLL_EXPORTS #include "plugin-config.h" #endif #include #include #define BITS_PER_SECOND 13200 #define BYTES_PER_FRAME 33 #define MSGSM_BYTES_PER_FRAME 65 #define SAMPLES_PER_FRAME 160 #define MSGSM_SAMPLES_PER_FRAME 320 #define MAX_FRAMES_PER_PACKET 7 #define PREF_FRAMES_PER_PACKET 1 #define MIN(a,b) (((a)<=(b))?(a):(b)) #define PAYLOAD_CODE 3 #if defined(_WIN32) || defined(_WIN32_WCE) #define STRCMPI _strcmpi #else #define STRCMPI strcasecmp #endif ///////////////////////////////////////////////////////////////////////////// #ifdef _MSC_VER #pragma warning(disable:4100) #endif static void * create_codec(const struct PluginCodec_Definition * codec) { int opt = codec->userData != 0; struct gsm_state * context = gsm_create(); gsm_option(context, GSM_OPT_WAV49, &opt); return context; } static void destroy_codec(const struct PluginCodec_Definition * codec, void * _context) { struct gsm_state * context = (struct gsm_state *)_context; gsm_destroy(context); } static int codec_encoder(const struct PluginCodec_Definition * codec, void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { struct gsm_state * context = (struct gsm_state *)_context; int frames; if (*toLen < BYTES_PER_FRAME) return 0; if (*fromLen < SAMPLES_PER_FRAME * 2) return 0; frames = MIN(*fromLen / (SAMPLES_PER_FRAME * 2), (*toLen / BYTES_PER_FRAME)); if (frames == 0) return 0; *fromLen = frames * SAMPLES_PER_FRAME * 2; *toLen = frames * BYTES_PER_FRAME; while (frames-- > 0) { gsm_encode(context, (void *)from, to); to = ((char *)to) + BYTES_PER_FRAME; from = ((const char *)from) + SAMPLES_PER_FRAME * 2; } return 1; } static int codec_decoder(const struct PluginCodec_Definition * codec, void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { gsm context = (gsm)_context; if (*fromLen < BYTES_PER_FRAME) return 0; // if the packet is not 65 bytes long, assume it is frames of normal GSM if (*fromLen != 65) { int frames; if (*toLen < SAMPLES_PER_FRAME * 2) return 0; frames = MIN(*toLen / (SAMPLES_PER_FRAME * 2), (*fromLen / BYTES_PER_FRAME)); if (frames == 0) return 0; { int opt = 0; gsm_option(context, GSM_OPT_WAV49, &opt); } *fromLen = frames * BYTES_PER_FRAME; *toLen = frames * SAMPLES_PER_FRAME * 2; while (frames-- > 0) { gsm_decode(context, (void *)from, to); from = ((const char *)from) + BYTES_PER_FRAME; to = ((char *)to) + SAMPLES_PER_FRAME * 2; } return 1; } // MS-GSM packets are always 65 bytes long, and consists of two GSM packets if (*toLen < MSGSM_SAMPLES_PER_FRAME * 2) return 0; { int opt = 1; gsm_option(context, GSM_OPT_WAV49, &opt); } gsm_decode(context, (unsigned char *)from, (short *)to); gsm_decode(context, ((unsigned char *)from)+33, ((short *)to)+160); *toLen = MSGSM_SAMPLES_PER_FRAME * 2; return 1; } ///////////////////////////////////////////////////////////////////////////// static int codec_msgsm_encoder(const struct PluginCodec_Definition * codec, void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { struct gsm_state * context = (struct gsm_state *)_context; if (*fromLen < (MSGSM_SAMPLES_PER_FRAME*2) || *toLen < MSGSM_BYTES_PER_FRAME) return 0; gsm_encode(context, (short *)from, (unsigned char *)to); gsm_encode(context, ((short *)from)+160, ((unsigned char *)to)+32); *toLen = MSGSM_BYTES_PER_FRAME; return 1; } static int codec_msgsm_decoder(const struct PluginCodec_Definition * codec, void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { struct gsm_state * context = (struct gsm_state *)_context; if (*fromLen < MSGSM_BYTES_PER_FRAME || *toLen < (MSGSM_SAMPLES_PER_FRAME*2)) return 0; gsm_decode(context, (unsigned char *)from, (short *)to); gsm_decode(context, ((unsigned char *)from)+33, ((short *)to)+160); *toLen = MSGSM_SAMPLES_PER_FRAME * 2; return 1; } ///////////////////////////////////////////////////////////////////////////// static struct PluginCodec_information licenseInfo = { 1081086550, // timestamp = Sun 04 Apr 2004 01:49:10 PM UTC = "Craig Southeren, Post Increment", // source code author "1.1", // source code version "craigs@postincrement.com", // source code email "http://www.postincrement.com", // source code URL "Copyright (C) 2004 by Post Increment, All Rights Reserved", // source code copyright "MPL 1.0", // source code license PluginCodec_License_MPL, // source code license "GSM 06.10 Full-Rate", // codec description "Jutta Degener and Carsten Bormann", // codec author "Version 10", // codec version "jutta@cs.tu-berlin.de\ncabo@cs.tu-berlin.de", // codec email "http://kbs.cs.tu-berlin.de/~jutta/toast.html", // codec URL "Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann, Technische Universitaet Berlin", // codec copyright information NULL, // codec license PluginCodec_Licence_None // codec license code }; ///////////////////////////////////////////////////////////////////////////// static const char L16Desc[] = { "L16" }; static const char gsm0610[] = { "GSM-06.10" }; static const char msGSM[] = { "MS-GSM" }; static const char sdpGSM[] = { "gsm" }; // defined in draft-ema-vpim-msgsm-00.txt static const char sdpMSGSM[] = { "ms-gsm" }; static struct PluginCodec_H323AudioGSMData gsmCaps = { 0, // int comfortNoise:1; 0, // int scrambled:1; }; static const unsigned char msGSMHeader[] = { // unknown data 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x40, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, #define GSM_FIXED_START 20 // Offset to this point in header // standard MS waveformatex structure follows 0x31, 0x00, // WORD wFormatTag; /* format type */ 0x01, 0x00, // WORD nChannels; /* number of channels (i.e. mono, stereo...) */ 0x40, 0x1f, 0x00, 0x00, // DWORD nSamplesPerSec; /* sample rate */ 0x59, 0x06, 0x00, 0x00, // DWORD nAvgBytesPerSec; /* for buffer estimation */ 0x41, 0x00, // WORD nBlockAlign; /* block size of data */ 0x00, 0x00, // WORD wBitsPerSample; /* Number of bits per sample of mono data */ 0x02, 0x00, // WORD cbSize; /* The count in bytes of the size of #define GSM_FIXED_LEN 18 // Number of bytes from GSM_FIXED_START to here // extra GSM information 0x40, 0x01, // WORD numberOfSamples /* 320 */ // unknown data 0x00, 0x00 }; #define MICROSOFT_COUNTRY_CODE 181 #define MICROSOFT_T35EXTENSION 0 #define MICROSOFT_MANUFACTURER 21324 int msgsmCompareFunc(struct PluginCodec_H323NonStandardCodecData * data) { int val; if ((data == NULL) || (data->objectId != NULL) || (data->data == NULL)) return -1; val = MICROSOFT_COUNTRY_CODE - data->t35CountryCode; if (val != 0) return val; val = MICROSOFT_T35EXTENSION - data->t35Extension; if (val != 0) return val; val = MICROSOFT_MANUFACTURER - data->manufacturerCode; if (val != 0) return val; val = sizeof(msGSMHeader) - data->dataLength; if (val != 0) return val; return memcmp(data->data+GSM_FIXED_START, msGSMHeader+GSM_FIXED_START, GSM_FIXED_LEN); } static struct PluginCodec_H323NonStandardCodecData msgsmCap = { NULL, MICROSOFT_COUNTRY_CODE, MICROSOFT_T35EXTENSION, MICROSOFT_MANUFACTURER, msGSMHeader, sizeof(msGSMHeader), msgsmCompareFunc }; static int valid_for_h323( const struct PluginCodec_Definition * codec, void * context, const char * key, void * parm , unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(char *)) return 0; return (STRCMPI((const char *)parm, "h.323") == 0 || STRCMPI((const char *)parm, "h323") == 0) ? 1 : 0; } static struct PluginCodec_ControlDefn h323CoderControls[] = { { "valid_for_protocol", valid_for_h323 }, //{ "get_codec_options", coder_get_sip_options }, //{ "set_codec_options", encoder_set_options }, { NULL } }; ///////////////////////////////////////////////////////////////////////////// static struct PluginCodec_Definition gsmCodecDefn[4] = { { // encoder PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeExplicit, // specified RTP type gsm0610, // text decription L16Desc, // source format gsm0610, // destination format 0, // user data (no WAV49) 8000, // samples per second BITS_PER_SECOND, // raw bits per second 20000, // nanoseconds per frame SAMPLES_PER_FRAME, // samples per frame BYTES_PER_FRAME, // bytes per frame PREF_FRAMES_PER_PACKET, // recommended number of frames per packet MAX_FRAMES_PER_PACKET, // maximum number of frames per packe PAYLOAD_CODE, // IANA RTP payload code sdpGSM, // RTP payload name create_codec, // create codec function destroy_codec, // destroy codec codec_encoder, // encode/decode NULL, // codec controls PluginCodec_H323AudioCodec_gsmFullRate, // h323CapabilityType &gsmCaps // h323CapabilityData }, { // decoder PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeExplicit, // dynamic RTP type gsm0610, // text decription gsm0610, // source format L16Desc, // destination format 0, // user data (no WAV49) 8000, // samples per second BITS_PER_SECOND, // raw bits per second 20000, // nanoseconds per frame SAMPLES_PER_FRAME, // samples per frame BYTES_PER_FRAME, // bytes per frame PREF_FRAMES_PER_PACKET, // recommended number of frames per packet MAX_FRAMES_PER_PACKET, // maximum number of frames per packe PAYLOAD_CODE, // IANA RTP payload code sdpGSM, // RTP payload name create_codec, // create codec function destroy_codec, // destroy codec codec_decoder, // encode/decode NULL, // codec controls PluginCodec_H323AudioCodec_gsmFullRate, // h323CapabilityType &gsmCaps // h323CapabilityData }, // MS-GSM { // encoder PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic, // specified RTP type msGSM, // text decription L16Desc, // source format msGSM, // destination format (const void *)1, // user data (enable WAV49) 8000, // samples per second BITS_PER_SECOND, // raw bits per second 40000, // nanoseconds per frame MSGSM_SAMPLES_PER_FRAME, // samples per frame MSGSM_BYTES_PER_FRAME, // bytes per frame 1, // recommended number of frames per packet 1, // maximum number of frames per packe 0, // IANA RTP payload code sdpMSGSM, // RTP payload name create_codec, // create codec function destroy_codec, // destroy codec codec_msgsm_encoder, // encode/decode h323CoderControls, // codec controls PluginCodec_H323Codec_nonStandard, // h323CapabilityType &msgsmCap // h323CapabilityData }, { // decoder PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic, // dynamic RTP type msGSM, // text decription msGSM, // source format L16Desc, // destination format (const void *)1, // user data (enable WAV49) 8000, // samples per second BITS_PER_SECOND, // raw bits per second 40000, // nanoseconds per frame MSGSM_SAMPLES_PER_FRAME, // samples per frame MSGSM_BYTES_PER_FRAME, // bytes per frame 1, // recommended number of frames per packet 1, // maximum number of frames per packe 0, // IANA RTP payload code sdpMSGSM, // RTP payload name create_codec, // create codec function destroy_codec, // destroy codec codec_msgsm_decoder, // encode/decode h323CoderControls, // codec controls PluginCodec_H323Codec_nonStandard, // h323CapabilityType &msgsmCap // h323CapabilityData } }; PLUGIN_CODEC_IMPLEMENT_ALL(GSM_0610, gsmCodecDefn, PLUGIN_CODEC_VERSION) ///////////////////////////////////////////////////////////////////////////// h323plus/plugins/audio/GSM0610/gsm0610.vcproj0000644000175000017500000003707611341106231017155 0ustar markmark h323plus/plugins/audio/IMA_ADPCM/0000755000175000017500000000000011341106231015173 5ustar markmarkh323plus/plugins/audio/IMA_ADPCM/Makefile.in0000644000175000017500000000567011341106231017250 0ustar markmark# # Makefile for IMA-ADPCM codec plugin # # Copyright (C) 2004 Post Increment, All Rights Reserved # # The contents of this file are subject to the Mozilla Public License # Version 1.0 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is Open H323 library. # # The Initial Developer of the Original Code is Post Increment # # Contributor(s): ______________________________________. # # $Log: Makefile.in,v $ # Revision 1.1 2010/02/24 02:19:05 shorne # First commit of h323plus mirror # # Revision 1.3 2007/04/19 06:09:03 csoutheren # Fixed plugin build system to use better detection for OSX # Resolved 1636262 - Fix for audio plugins for OSX # # Revision 1.2 2006/08/01 13:06:49 rjongbloed # Added a raft of unvalidated audio codecs from OpenH323 tree # # Revision 1.1.2.1 2006/07/22 13:42:49 rjongbloed # Added more plug ins # # Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed # Imported all the audio codec plug ins from OpenH323 # # Revision 1.4 2006/02/09 23:43:22 csoutheren # Removed lines included incorrectly via copy and paste # # Revision 1.3 2004/08/22 04:20:19 csoutheren # Added -fPIC to build commands to fix problems on 64 bit platforms # Thanks to Klaus Kaempf # # Revision 1.2 2004/06/24 23:33:17 csoutheren # Changed Makefiles to ensure all plugins have correct suffix # # Revision 1.1 2004/05/10 12:42:24 csoutheren # Include IMA ADPCM plugin # # AC_PLUGIN_DIR=@AC_PLUGIN_DIR@ prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ target_os=@target_os@ SONAME = ima_adpcm SRCDIR = ./src OBJDIR = ./obj PLUGINDIR=../.. CC =@CC@ CFLAGS =@CFLAGS@ CXX =@CXX@ LDSO =@LDSO@ PLUGINEXT =@PLUGINEXT@ STDCCFLAGS =@STDCCFLAGS@ LDFLAGS =@LDFLAGS@ EXTRACFLAGS =-I$(PLUGINDIR) SRCS += ima_adpcm.c vpath %.o $(OBJDIR) vpath %.c $(SRCDIR) ifeq ($(VERBOSE),) Q_CC = @echo [CC] `echo $< | sed s^@OPALDIR@/^^` ; Q_LD = @echo [LD] `echo $(PLUGIN) | sed s^@OPALDIR@/^^` ; endif $(OBJDIR)/%.o : %.c @mkdir -p $(OBJDIR) >/dev/null 2>&1 $(Q_CC)$(CC) -I../../../include $(STDCCFLAGS) $(OPTCCFLAGS) $(EXTRACFLAGS) $(CFLAGS) -c $< -o $@ PLUGIN = ./ima_adpcm_audio_pwplugin.$(PLUGINEXT) OBJECTS = $(addprefix $(OBJDIR)/,$(patsubst %.c,%.o,$(notdir $(SRCS)))) $(PLUGIN): $(OBJECTS) ifeq (solaris,$(findstring solaris,$(target_os))) $(Q_LD)$(CC) $(LDSO) $@ -o $@ $^ $(EXTRALIBS) else $(Q_LD)$(CC) $(LDSO) -o $@ $^ $(EXTRALIBS) endif install: mkdir -p $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR) install $(PLUGIN) $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR) uninstall: rm -f $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR)/$(PLUGIN) clean: rm -f $(OBJECTS) $(PLUGIN) ########################################### h323plus/plugins/audio/IMA_ADPCM/ima_adpcm.c0000644000175000017500000004055511341106231017262 0ustar markmark/* * IMA-ADPC plugin codec for OpenH323/OPAL * * Copyright (C) 2004 Post Increment, All Rights Reserved * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Post Increment * * Contributor(s): ______________________________________. * * $Revision: 1.1 $ * $Author: shorne $ * $Date: 2010/02/24 02:19:05 $ */ #define _CRT_NONSTDC_NO_DEPRECATE 1 #define _CRT_SECURE_NO_WARNINGS 1 #include #include #include #ifndef PLUGIN_CODEC_DLL_EXPORTS #include "plugin-config.h" #endif #include //By LH, Microsoft IMA ADPCM CODEC Capability #define IMA_MAX_PACKET_SIZE 1 #define IMA_DESIRED_TRANSMIT_SIZE 1 #define IMA_SAMPLES_PER_FRAME 505 #define IMA_BYTES_PER_FRAME 256 #define IMA_NS_PER_FRAME 63100 #define PREF_FRAMES_PER_PACKET 1 #define MAX_FRAMES_PER_PACKET 1 #define IMA_BITS_SECOND 32443 static const unsigned char msIMAHeader[] = { // unknown data 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x01, 0x00, 0x00, 0xf9, 0x01, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, #define IMA_FIXED_START 20 // standard MS waveformatex structure follows 0x11, 0x00, // WORD wFormatTag; /* format type */ 0x01, 0x00, // WORD nChannels; /* number of channels (i.e. mono, stereo...) */ 0x40, 0x1f, 0x00, 0x00, // DWORD nSamplesPerSec; /* sample rate */ 0xd7, 0x0f, 0x00, 0x00, // DWORD nAvgBytesPerSec; /* for buffer estimation */ 0x00, 0x01, // WORD nBlockAlign; /* block size of data */ 0x04, 0x00, // WORD wBitsPerSample; /* Number of bits per sample of mono data */ 0x02, 0x00, // WORD cbSize; /* The count in bytes of the size of #define IMA_FIXED_LEN 18 // extra IMA information 0xf9, 0x01, // WORD numberOfSamples /* 505 */ // unknown data 0x00, 0x00 }; struct adpcm_state { short valprev; /* Previous output value */ char index; /* Index into stepsize table */ }; /* Intel ADPCM step variation table */ static int indexTable[16] = { -1, -1, -1, -1, 2, 4, 6, 8, -1, -1, -1, -1, 2, 4, 6, 8 }; static int stepsizeTable[89] = { 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 21, 23, 25, 28, 31, 34, 37, 41, 45, 50, 55, 60, 66, 73, 80, 88, 97, 107, 118, 130, 143, 157, 173, 190, 209, 230, 253, 279, 307, 337, 371, 408, 449, 494, 544, 598, 658, 724, 796, 876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066, 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358, 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899, 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767 }; static void adpcm_coder(short indata[], char outdata[], int len, struct adpcm_state *state) { short *inp; /* Input buffer pointer */ signed char *outp; /* output buffer pointer */ int val; /* Current input sample value */ int sign; /* Current adpcm sign bit */ int delta; /* Current adpcm output value */ int diff; /* Difference between val and valprev */ int step; /* Stepsize */ int valpred; /* Predicted output value */ int vpdiff; /* Current change to valpred */ char index; /* Current step change index */ int outputbuffer = 0; /* place to keep previous 4-bit value */ int bufferstep; /* toggle between outputbuffer/output */ outp = (signed char *)outdata; inp = indata; //create header valpred = *inp; memcpy(outp, (char *)inp, 2); inp++; outp += sizeof(short); index = state->index; memcpy(outp, (char *)&index, 1); inp++; outp++; *outp = 0; outp++; //create header ends len--; step = stepsizeTable[(int)index]; bufferstep = 1; for ( ; len > 0 ; len-- ) { val = *inp++; /* Step 1 - compute difference with previous value */ diff = val - valpred; sign = (diff < 0) ? 8 : 0; if ( sign ) diff = (-diff); /* Step 2 - Divide and clamp */ /* Note: ** This code *approximately* computes: ** delta = diff*4/step; ** vpdiff = (delta+0.5)*step/4; ** but in shift step bits are dropped. The net result of this is ** that even if you have fast mul/div hardware you cannot put it to ** good use since the fixup would be too expensive. */ delta = 0; vpdiff = (step >> 3); if ( diff >= step ) { delta = 4; diff -= step; vpdiff += step; } step >>= 1; if ( diff >= step ) { delta |= 2; diff -= step; vpdiff += step; } step >>= 1; if ( diff >= step ) { delta |= 1; vpdiff += step; } /* Step 3 - Update previous value */ if ( sign ) valpred -= vpdiff; else valpred += vpdiff; /* Step 4 - Clamp previous value to 16 bits */ if ( valpred > 32767 ) valpred = 32767; else if ( valpred < -32768 ) valpred = -32768; /* Step 5 - Assemble value, update index and step values */ delta |= sign; index = (char)(index + indexTable[delta]); if ( index < 0 ) index = 0; if ( index > 88 ) index = 88; step = stepsizeTable[(int)index]; /* Step 6 - Output value */ if ( bufferstep ) { outputbuffer = (delta << 4) & 0xf0; } else { *outp++ = (char)((delta & 0x0f) | outputbuffer); } bufferstep = !bufferstep; } /* Output last step, if needed */ if ( !bufferstep ) *outp++ = (char)outputbuffer; state->valprev = (short)valpred; state->index = index; } static void adpcm_decoder(char indata[], short outdata[], int len) { signed char *inp; /* Input buffer pointer */ short *outp; /* output buffer pointer */ int sign; /* Current adpcm sign bit */ int delta; /* Current adpcm output value */ int step; /* Stepsize */ int valpred; /* Predicted value */ int vpdiff; /* Current change to valpred */ int index; /* Current step change index */ int inputbuffer = 0; /* place to keep next 4-bit value */ int bufferstep; /* toggle between inputbuffer/input */ outp = outdata; inp = (signed char *)indata; valpred = 0; index = 0; memcpy((char *)&valpred, (char *)inp, 2); inp += 2; //skip first 16 bits sample index = (int)(unsigned char)*inp; inp += 2; //skip index step = stepsizeTable[index]; len -= 4; //skip header bufferstep = 0; len *= 2; for ( ; len > 0 ; len-- ) { /* Step 1 - get the delta value */ if ( bufferstep ) { delta = inputbuffer & 0xf; } else { inputbuffer = *inp++; delta = (inputbuffer >> 4) & 0xf; } bufferstep = !bufferstep; /* Step 2 - Find new index value (for later) */ index += indexTable[delta]; if ( index < 0 ) index = 0; if ( index > 88 ) index = 88; /* Step 3 - Separate sign and magnitude */ sign = delta & 8; delta = delta & 7; /* Step 4 - Compute difference and new predicted value */ /* ** Computes 'vpdiff = (delta+0.5)*step/4', but see comment ** in adpcm_coder. */ vpdiff = step >> 3; if ( delta & 4 ) vpdiff += step; if ( delta & 2 ) vpdiff += step>>1; if ( delta & 1 ) vpdiff += step>>2; if ( sign ) valpred -= vpdiff; else valpred += vpdiff; /* Step 5 - clamp output value */ if ( valpred > 32767 ) valpred = 32767; else if ( valpred < -32768 ) valpred = -32768; /* Step 6 - Update step value */ step = stepsizeTable[index]; /* Step 7 - Output value */ *outp++ = (char)valpred; } } ///////////////////////////////////////////////////////////////////////////// static void * create_codec(const struct PluginCodec_Definition * codec) { struct adpcm_state * s_adpcm = malloc(sizeof (struct adpcm_state)); s_adpcm->valprev = 0; s_adpcm->index = 0; return s_adpcm; } static int codec_encoder(const struct PluginCodec_Definition * codec, void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { struct adpcm_state * s_adpcm = (struct adpcm_state *)_context; if (*fromLen < (IMA_SAMPLES_PER_FRAME*2) || (*toLen < IMA_BYTES_PER_FRAME)) return 0; adpcm_coder((short *)from, (char *)to, IMA_SAMPLES_PER_FRAME, s_adpcm); return 1; } static int codec_decoder(const struct PluginCodec_Definition * codec, void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { //struct adpcm_state * s_adpcm = (struct adpcm_state *)_context; if (*toLen < (IMA_SAMPLES_PER_FRAME*2) || (*fromLen < IMA_BYTES_PER_FRAME)) return 0; adpcm_decoder((char *)from, (short *)to, IMA_BYTES_PER_FRAME); return 1; } static void destroy_codec(const struct PluginCodec_Definition * codec, void * _context) { free(_context); } ///////////////////////////////////////////////////////////////////////////// static struct PluginCodec_information licenseInfo = { 1084190703, // timestamp = Mon 10 May 2004 12:05:03 PM UTC = "Craig Southeren, Post Increment", // source code author "1.0", // source code version "craigs@postincrement.com", // source code email "http://www.postincrement.com", // source code URL "Copyright (C) 2004 by Post Increment, All Rights Reserved", // source code copyright "MPL 1.0", // source code license PluginCodec_License_MPL, // source code license NULL, // codec description NULL, // codec author NULL, // codec version NULL, // codec email NULL, // codec URL NULL, // codec copyright information NULL, // codec license PluginCodec_Licence_None // codec license code }; ///////////////////////////////////////////////////////////////////////////// static const char L16Desc[] = { "L16" }; static const char imaADPCM[] = "MS-IMA-ADPCM"; ///////////////////////////////////////////////////////////////////////////// #define MICROSOFT_COUNTRY_CODE 181 #define MICROSOFT_T35EXTENSION 0 #define MICROSOFT_MANUFACTURER 21324 int imaCompareFunc(struct PluginCodec_H323NonStandardCodecData * data) { int val; if (data == NULL || data->objectId != NULL || data->data == NULL) return -1; val = MICROSOFT_COUNTRY_CODE - data->t35CountryCode; if (val != 0) return val; val = MICROSOFT_T35EXTENSION - data->t35Extension; if (val != 0) return val; val = MICROSOFT_MANUFACTURER - data->manufacturerCode; if (val != 0) return val; val = sizeof(msIMAHeader) - data->dataLength; if (val != 0) return val; return memcmp(data->data+IMA_FIXED_START, msIMAHeader+IMA_FIXED_START, IMA_FIXED_LEN); } static struct PluginCodec_H323NonStandardCodecData imaADPCM_Cap = { NULL, MICROSOFT_COUNTRY_CODE, MICROSOFT_T35EXTENSION, MICROSOFT_MANUFACTURER, msIMAHeader, sizeof(msIMAHeader), imaCompareFunc }; static struct PluginCodec_Definition imaADPCMCodecDefn[] = { { // encoder PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeExplicit, // specified RTP type imaADPCM, // text decription L16Desc, // source format imaADPCM, // destination format 0, // user data 8000, // samples per second IMA_BITS_SECOND, // raw bits per second IMA_NS_PER_FRAME, // nanoseconds per frame IMA_SAMPLES_PER_FRAME, // samples per frame IMA_BYTES_PER_FRAME, // bytes per frame PREF_FRAMES_PER_PACKET, // recommended number of frames per packet MAX_FRAMES_PER_PACKET, // maximum number of frames per packe 0, // no IANA RTP payload code NULL, // RTP payload name create_codec, // create codec function destroy_codec, // destroy codec codec_encoder, // encode/decode NULL, // codec controls PluginCodec_H323Codec_nonStandard, // h323CapabilityType &imaADPCM_Cap // h323CapabilityData }, { // decoder PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic, // dynamic RTP type imaADPCM, // text decription imaADPCM, // source format L16Desc, // destination format 0, // user data 8000, // samples per second IMA_BITS_SECOND, // raw bits per second IMA_NS_PER_FRAME, // nanoseconds per frame IMA_SAMPLES_PER_FRAME, // samples per frame IMA_BYTES_PER_FRAME, // bytes per frame PREF_FRAMES_PER_PACKET, // recommended number of frames per packet MAX_FRAMES_PER_PACKET, // maximum number of frames per packe 0, // no IANA RTP payload code NULL, // RTP payload name create_codec, // create codec function destroy_codec, // destroy codec codec_decoder, // encode/decode NULL, // codec controls PluginCodec_H323Codec_nonStandard, // h323CapabilityType &imaADPCM_Cap // h323CapabilityData } }; PLUGIN_CODEC_IMPLEMENT_ALL(IMA_ADPCM, imaADPCMCodecDefn, PLUGIN_CODEC_VERSION) ///////////////////////////////////////////////////////////////////////////// h323plus/plugins/audio/IMA_ADPCM/IMA_ADPCM.vcproj0000644000175000017500000001053711341106231017740 0ustar markmark h323plus/plugins/audio/IMA_ADPCM/IMA_ADPCM_2008.vcproj0000644000175000017500000001201611341106231020403 0ustar markmark h323plus/plugins/audio/IMA_ADPCM/IMA_ADPCM.dsp0000644000175000017500000001015711341106231017221 0ustar markmark# Microsoft Developer Studio Project File - Name="IMA_ADPCM" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=IMA_ADPCM - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "IMA_ADPCM.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "IMA_ADPCM.mak" CFG="IMA_ADPCM - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "IMA_ADPCM - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "IMA_ADPCM - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "IMA_ADPCM - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "..\..\Release" # PROP Intermediate_Dir "..\..\Release\IMA_ADPCM" # PROP Ignore_Export_Lib 1 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IMA_ADPCM_EXPORTS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IMA_ADPCM_EXPORTS" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "NDEBUG" # ADD RSC /l 0xc09 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /machine:I386 /out:"../../Release/IMA_ADPCM_pwplugin.dll" /implib:..\..\Release\IMA_ADPCM/IMA_ADPCM_pwplugin.lib" !ELSEIF "$(CFG)" == "IMA_ADPCM - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "..\..\Debug" # PROP Intermediate_Dir "..\..\Debug\IMA_ADPCM" # PROP Ignore_Export_Lib 1 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IMA_ADPCM_EXPORTS" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IMA_ADPCM_EXPORTS" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "_DEBUG" # ADD RSC /l 0xc09 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /debug /machine:I386 /out:"../../Debug/IMA_ADPCM_pwplugin.dll" /implib:"..\..\Debug\IMA_ADPCM/IMA_ADPCM_pwplugin.lib" /pdbtype:sept # SUBTRACT LINK32 /pdb:none !ENDIF # Begin Target # Name "IMA_ADPCM - Win32 Release" # Name "IMA_ADPCM - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\ima_adpcm.c # ADD CPP /D "PLUGIN_CODEC_DLL_EXPORTS" # SUBTRACT CPP /D "IMA_ADPCM_EXPORTS" # End Source File # End Group # End Target # End Project h323plus/plugins/audio/IMA_ADPCM/IMA_ADPCM_2005.vcproj0000644000175000017500000001171511341106231020405 0ustar markmark h323plus/plugins/audio/SBC/0000755000175000017500000000000011341106241014271 5ustar markmarkh323plus/plugins/audio/SBC/Makefile.in0000644000175000017500000000477011341106241016346 0ustar markmark# # Makefile for SBC Codec Plugin # # Copyright (C) 2008 Christian Hoene, All Rights Reserved # # The contents of this file are subject to the Mozilla Public License # Version 1.0 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is Open H323 library. # # The Initial Developer of the Original Code is Christian Hoene # # Contributor(s): ______________________________________. # # $Log: Makefile.in,v $ # Revision 1.1 2010/02/24 02:19:13 shorne # First commit of h323plus mirror # # AC_PLUGIN_DIR=@AC_PLUGIN_DIR@ prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ SRCDIR = . PLUGINDIR=../.. SONAME = sbccodec SAMPLERATE_LIB = -lsamplerate CC =@CC@ CFLAGS =@CFLAGS@ CXXFLAGS =@CXXFLAGS@ CXX =@CXX@ LDSO =@LDSO@ PLUGINEXT =@PLUGINEXT@ STDCCFLAGS =@STDCCFLAGS@ -DSBC_DISABLE_PTLIB=1 -DOPAL_G711PLC=1 LDFLAGS =@LDFLAGS@ SBC_CFLAGS =@SBC_CFLAGS@ SBC_LIBS =@SBC_LIBS@ SBC_SYSTEM= @SBC_SYSTEM@ SRCS = $(SRCDIR)/sbccodec.cxx \ $(SRCDIR)/sbc.c \ $(SRCDIR)/g711a1_plc.cxx EXTRACCFLAGS = -I$(PLUGINDIR) EXTRALIBS = $(SAMPLERATE_LIB) OBJDIR = ./obj vpath %.o $(OBJDIR) vpath %.c $(SRCDIR) vpath %.cxx $(SRCDIR) ifeq ($(VERBOSE),) Q_CC = @echo [CC] `echo $< | sed s^@OPALDIR@/^^` ; Q_LD = @echo [LD] `echo $(PLUGIN) | sed s^@OPALDIR@/^^` ; endif $(OBJDIR)/%.o : %.c @mkdir -p $(OBJDIR) >/dev/null 2>&1 $(Q_CC)$(CC) -c $(STDCCFLAGS) $(EXTRACCFLAGS) $(CFLAGS) -o $@ $< $(OBJDIR)/%.o : %.cxx @mkdir -p $(OBJDIR) >/dev/null 2>&1 $(Q_CC)$(CXX) -c -I../../../include $(STDCCFLAGS) $(CXXFLAGS) $(EXTRACCFLAGS) -o $@ $< PLUGIN = ./sbc_audio_ptplugin.$(PLUGINEXT) OBJECTS = $(addprefix $(OBJDIR)/,$(patsubst %.cxx,%.o,$(patsubst %.c,%.o,$(notdir $(SRCS))))) $(PLUGIN): $(OBJECTS) $(Q_LD)$(CXX) $(LDSO) -o $@ $^ $(EXTRALIBS) $(SRCDIR)/g711a1_plc.cxx: ../../../src/codec/g711a1_plc.cxx @ln -s ../../../src/codec/g711a1_plc.cxx $(SRCDIR)/g711a1_plc.cxx install: mkdir -p $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR) install $(PLUGIN) $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR) uninstall: rm -f $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR)/$(PLUGIN) clean: rm -f $(OBJECTS) $(PLUGIN) distclean: clean rm -f Makefile g711a1_plc.cxx ########################################### h323plus/plugins/audio/SBC/sbccodec.h0000644000175000017500000000130111341106241016202 0ustar markmark /* * sbccodec.h * * Header file for SBC conversion routines. * */ #ifndef _SBCCODEC_H #define _SBCCODEC_H #define AUDIO_ENCODING_LINEAR (3) /* PCM 2's-complement (0-center) */ /* * The following is the definition of the state structure * used by the SBC encoder and decoder to preserve their internal * state between successive calls. */ typedef struct sbc_state_s { long yl; /* Locked or steady state step size multiplier. */ } sbc_state; /* External function definitions. */ void sbc_init_state( sbc_state *); int sbc_encoder( int sample, int in_coding, sbc_state *state_ptr); int sbc_decoder( int code, int out_coding, sbc_state *state_ptr); #endif /* !_SBCCODEC_H */ h323plus/plugins/audio/SBC/sbc_math.h0000644000175000017500000000504411341106241016225 0ustar markmark/* * * Bluetooth low-complexity, subband codec (SBC) library * * Copyright (C) 2004-2008 Marcel Holtmann * Copyright (C) 2004-2005 Henryk Ploetz * Copyright (C) 2005-2008 Brad Midgley * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * */ #define fabs(x) ((x) < 0 ? -(x) : (x)) /* C does not provide an explicit arithmetic shift right but this will always be correct and every compiler *should* generate optimal code */ #define ASR(val, bits) ((-2 >> 1 == -1) ? \ ((int32_t)(val)) >> (bits) : ((int32_t) (val)) / (1 << (bits))) #define SCALE_PROTO4_TBL 15 #define SCALE_ANA4_TBL 17 #define SCALE_PROTO8_TBL 16 #define SCALE_ANA8_TBL 17 #define SCALE_SPROTO4_TBL 12 #define SCALE_SPROTO8_TBL 14 #define SCALE_NPROTO4_TBL 11 #define SCALE_NPROTO8_TBL 11 #define SCALE4_STAGE1_BITS 15 #define SCALE4_STAGE2_BITS 16 #define SCALE4_STAGED1_BITS 15 #define SCALE4_STAGED2_BITS 16 #define SCALE8_STAGE1_BITS 15 #define SCALE8_STAGE2_BITS 15 #define SCALE8_STAGED1_BITS 15 #define SCALE8_STAGED2_BITS 16 typedef int32_t sbc_fixed_t; #define SCALE4_STAGE1(src) ASR(src, SCALE4_STAGE1_BITS) #define SCALE4_STAGE2(src) ASR(src, SCALE4_STAGE2_BITS) #define SCALE4_STAGED1(src) ASR(src, SCALE4_STAGED1_BITS) #define SCALE4_STAGED2(src) ASR(src, SCALE4_STAGED2_BITS) #define SCALE8_STAGE1(src) ASR(src, SCALE8_STAGE1_BITS) #define SCALE8_STAGE2(src) ASR(src, SCALE8_STAGE2_BITS) #define SCALE8_STAGED1(src) ASR(src, SCALE8_STAGED1_BITS) #define SCALE8_STAGED2(src) ASR(src, SCALE8_STAGED2_BITS) #define SBC_FIXED_0(val) { val = 0; } #define MUL(a, b) ((a) * (b)) #ifdef __arm__ #define MULA(a, b, res) ({ \ int tmp = res; \ __asm__( \ "mla %0, %2, %3, %0" \ : "=&r" (tmp) \ : "0" (tmp), "r" (a), "r" (b)); \ tmp; }) #else #define MULA(a, b, res) ((a) * (b) + (res)) #endif h323plus/plugins/audio/SBC/AUTHORS0000644000175000017500000000010711341106241015337 0ustar markmarkChristian Hoene All the code except the following h323plus/plugins/audio/SBC/sbc.h0000644000175000017500000000471311341106241015216 0ustar markmark/* * * Bluetooth low-complexity, subband codec (SBC) library * * Copyright (C) 2004-2008 Marcel Holtmann * Copyright (C) 2004-2005 Henryk Ploetz * Copyright (C) 2005-2006 Brad Midgley * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * */ #ifndef __SBC_H #define __SBC_H #ifdef __cplusplus extern "C" { #endif #include /* sampling frequency */ #define SBC_FREQ_16000 0x00 #define SBC_FREQ_32000 0x01 #define SBC_FREQ_44100 0x02 #define SBC_FREQ_48000 0x03 /* blocks */ #define SBC_BLK_4 0x00 #define SBC_BLK_8 0x01 #define SBC_BLK_12 0x02 #define SBC_BLK_16 0x03 /* channel mode */ #define SBC_MODE_MONO 0x00 #define SBC_MODE_DUAL_CHANNEL 0x01 #define SBC_MODE_STEREO 0x02 #define SBC_MODE_JOINT_STEREO 0x03 /* allocation method */ #define SBC_AM_LOUDNESS 0x00 #define SBC_AM_SNR 0x01 /* subbands */ #define SBC_SB_4 0x00 #define SBC_SB_8 0x01 /* Data endianess */ #define SBC_LE 0x00 #define SBC_BE 0x01 struct sbc_struct { unsigned long flags; uint8_t frequency; uint8_t blocks; uint8_t subbands; uint8_t mode; uint8_t allocation; uint8_t bitpool; uint8_t endian; void *priv; }; typedef struct sbc_struct sbc_t; int sbc_init(sbc_t *sbc, unsigned long flags); int sbc_reinit(sbc_t *sbc, unsigned long flags); int sbc_parse(sbc_t *sbc, void *input, int input_len); int sbc_decode(sbc_t *sbc, const void *input, int input_len, void *output, int output_len, int *len); int sbc_encode(sbc_t *sbc, const void *input, int input_len, void *output, int output_len, int *written); int sbc_get_frame_length(sbc_t *sbc); int sbc_get_frame_duration(sbc_t *sbc); int sbc_get_codesize(sbc_t *sbc); void sbc_finish(sbc_t *sbc); #ifdef __cplusplus } #endif #endif /* __SBC_H */ h323plus/plugins/audio/SBC/sbccodec.cxx0000644000175000017500000003270011341106241016564 0ustar markmark/* SBC Plugin codec for OpenH323/OPAL * * Copyright (C) 2008 Christian Hoene, All Rights Reserved * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Initial Developer of the Original Code is Christian Hoene * * Contributor(s): ______________________________________. * * $Revision: 1.1 $ * $Author: shorne $ * $Date: 2010/02/24 02:19:13 $ */ #define _CRT_NONSTDC_NO_DEPRECATE 1 #define _CRT_SECURE_NO_WARNINGS 1 #include #include #include //#include #include #ifndef PLUGIN_CODEC_DLL_EXPORTS #include "plugin-config.h" #endif //#include #if defined(_WIN32) || defined(_WIN32_WCE) #define STRCMPI _strcmpi #else #define STRCMPI strcasecmp #endif #include #include "../../../include/codec/g711a1_plc.h" #include "../../../include/codec/opalplugin.h" #define MAXRATE 48000 #define CHANNELS 2 extern "C" { #include "sbc.h" } struct PluginSbcContext { sbc_t sbcState; SRC_STATE *srcState; int lastPayloadSize; OpalG711_PLC *plcState[CHANNELS]; float *data1,*data2; // do buffers to store samples int data1_len, data2_len; // size of the buffers measured in float variables short *between; // buffer between resampling and SBC int between_len,between_count; // size of allocated buffer and number of sample stored in buffer double ratio; }; ///////////////////////////////////////////////////////////////////////////// /** * allocate and create encoder object */ static void * create_encoder(const struct PluginCodec_Definition * codec) { //PTRACE(3, "Codec\tSBC decoder created"); struct PluginSbcContext * context = new PluginSbcContext; context->lastPayloadSize = 0; /* set up samplerate convertion */ int error; if((context->srcState = src_new (SRC_SINC_FASTEST, CHANNELS, &error))==NULL) { //PTRACE(3, "Codec\tSBC resampling failed\n" << src_strerror(error)); return NULL; } context->data1 = context->data2 = NULL; context->data1_len = context->data2_len = 0; context->between = NULL; context->between_len = context->between_count = 0; /* init SBC */ if((error=sbc_init(&context->sbcState, 0))!=0) { //PTRACE(3, "Codec\tSBC sbc_init failed " << error); return NULL; } #if MAXRATE == 48000 context->sbcState.frequency = SBC_FREQ_48000; #elif MAXRATE == 44100 context->sbcState.frequency = SBC_FREQ_44100; #elif MAXRATE == 32000 context->sbcState.frequency = SBC_FREQ_32000; #elif MAXRATE == 16000 context->sbcState.frequency = SBC_FREQ_16000; #else #error #endif context->sbcState.mode = SBC_MODE_JOINT_STEREO; context->sbcState.subbands = SBC_SB_8; context->sbcState.blocks = SBC_BLK_16; context->sbcState.bitpool = 32; return context; } /** * changes the sample rate */ static int changerate(struct PluginSbcContext *context, const short *in, int *in_len, int in_rate, short *out, int *out_len, int out_rate, bool mono) { // enough output space? if(*in_len * in_rate > *out_len * out_rate) return -1; // alloc more memory if needed if(*in_len > context->data1_len) { context->data1_len = *in_len; if((context->data1 = (float*)realloc(context->data1, *in_len*sizeof(float)))==NULL) { //PTRACE(3, "Codec\tCONTEXT realloc failed\n"); return -1; } } if(*out_len > context->data2_len) { context->data2_len = *out_len; if((context->data2 = (float*)realloc(context->data2, *out_len*sizeof(float)))==NULL) { //PTRACE(3, "Codec\tCONTEXT realloc failed\n"); return -1; } } // copy short to float values short *p1=(short*)in; float *p2=context->data1; for(int i=0;i<*in_len;i++) *p2++ = (float)*p1++; // convert the rate SRC_DATA src_data = { context->data1, context->data2, *in_len/CHANNELS, *out_len/CHANNELS, 0, 0, 0, in_rate/double(out_rate) }; src_process(context->srcState, &src_data); *out_len = src_data.output_frames_gen * CHANNELS; *in_len = src_data.input_frames_used * CHANNELS; // copy float to short buffer p1=out; p2=context->data2; if(mono) { for(int i=0;i<*out_len;i+=2) { int d=int(*p2++ + *p2++)/2; if(d>32767) d=32767; if(d<-32768) d=-32768; *p1++ = short(d); } *out_len/=2; } else { for(int i=0;i<*out_len;i++) { int d=int(*p2++); if(d>32767) d=32767; if(d<-32768) d=-32768; *p1++ = short(d); } } return *out_len; } static int codec_encoder(const struct PluginCodec_Definition * codec, void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flags) { PluginSbcContext * context = (PluginSbcContext *)_context; short * sampleBuffer = (short *)from; // encode PCM data in sampleBuffer to buffer int lenFrom, lenTo; int countFrom=0, countTo=0; for(;;) { lenFrom=sbc_encode(&context->sbcState, (const char*)from+countFrom, *fromLen-countFrom, (char*)to+countTo, *toLen-countTo, &lenTo); if(lenFrom<0) { //PTRACE(3, "SBC Encode: failed with error code " << lenFrom); return 0; } if(lenFrom==0) break; countFrom += lenFrom; countTo += lenTo; } *fromLen = countFrom; *toLen = countTo; return 1; } /** * Destroy and delete encoder object */ static void destroy_encoder(const struct PluginCodec_Definition * codec, void * _context) { PluginSbcContext * context = (PluginSbcContext *)_context; src_delete(context->srcState); sbc_finish(&context->sbcState); free(context); } /** * allocate and create SBC decoder object */ static void * create_decoder(const struct PluginCodec_Definition * codec) { PluginSbcContext * context = new PluginSbcContext; //PTRACE(3, "Codec\tSBC decoder created"); int error; if((context->srcState = src_new (SRC_SINC_FASTEST, CHANNELS, &error))==NULL) { //PTRACE(3, "Codec\tSBC resampling failed\n" << src_strerror(error)); return NULL; } if((error=sbc_init(&context->sbcState, 0))!=0) { //PTRACE(3, "Codec\tSBC sbc_init left failed " << error); return NULL; } for(int i=0;iplcState[i] = new OpalG711_PLC(MAXRATE))!=NULL) { //PTRACE(3, "Codec\tSBC creatng PLC left failed " << error); return NULL; } } return context; } static int codec_decoder(const struct PluginCodec_Definition * codec, void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { struct PluginSbcContext * context = (struct PluginSbcContext *)_context; // decode frame int lenFrom, lenTo; int countFrom=0, countTo=0; for(;;) { lenFrom=sbc_decode(&context->sbcState, (const char*)from+countFrom, *fromLen-countFrom, (char*)to+countTo, *toLen-countTo, &lenTo); if(lenFrom<0) { //PTRACE(3, "SBC Encode: failed with error code " << lenFrom); return 0; } if(lenFrom==0) break; countFrom += lenFrom; countTo += lenTo; } *fromLen = countFrom; *toLen = countTo; return 1; } static void destroy_decoder(const struct PluginCodec_Definition * codec, void * _context) { struct PluginSbcContext * context = (struct PluginSbcContext *)_context; delete context->plcState; src_delete(context->srcState); sbc_finish(&context->sbcState); free(context); } ///////////////////////////////////////////////////////////////////////////// static struct PluginCodec_information licenseInfo = { 1205422679, // timestamp = Thu Mar 13 16:38 CET 2008 "Christian Hoene, University of TУМbingen", // source code author "0.1", // source code version "hoene@ieee.org", // source code email "http://www.uni-tuebingen.de", // source code URL "Copyright (C) 2008 by Christian Hoene, All Rights Reserved",// source code copyright "MPL 1.0", // source code license PluginCodec_License_MPL, // source code license "Subband Coding (SBC)", // codec description "Bluetooth SIG", // codec author "1.2", // codec version NULL, // codec email "http://www.bluetooth.com/", // codec URL NULL, // codec copyright information NULL, // codec license PluginCodec_License_NoRoyalties // codec license code }; #define EQUIVALENCE_COUNTRY_CODE 9 #define EQUIVALENCE_EXTENSION_CODE 0 #define EQUIVALENCE_MANUFACTURER_CODE 61 static const unsigned char sbcCapStr[] = { "BluetoothSBC" }; static struct PluginCodec_H323NonStandardCodecData sbcCap = { NULL, EQUIVALENCE_COUNTRY_CODE, EQUIVALENCE_EXTENSION_CODE, EQUIVALENCE_MANUFACTURER_CODE, sbcCapStr, sizeof(sbcCapStr)-1, NULL }; static const char L16Desc[] = { "L16" }; static const char sbc[] = { "SBC" }; static const char sdpSBC[] = { "sbc" }; static struct PluginCodec_Definition sbcCodecDefn[2] = { { // encoder PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic, // dynamic RTP type sbc, // text decription L16Desc, // source format sbc, // destination format (void *)NULL, // user data 48000, // samples per second 128000, // raw bits per second - TODO: is dynamic 22500, // nanoseconds per frame - TODO: is dynamic 64, // samples per frame - TODO: is dynamic 64, // bytes per frame - TODO: is dynamic 1, // recommended number of frames per packet 16, // maximum number of frames per packe 0, // IANA RTP payload code sdpSBC, // RTP payload name create_encoder, // create codec function destroy_encoder, // destroy codec codec_encoder, // encode/decode NULL, // codec controls PluginCodec_H323Codec_nonStandard, // h323CapabilityType &sbcCap // h323CapabilityData }, { // decoder PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic, // dynamic RTP type sbc, // text decription sbc, // source format L16Desc, // destination format (const void *)NULL, // user data 48000, // samples per second 128000, // raw bits per second - TODO! 10000, // nanoseconds per frame - TODO! 128, // samples per frame - TODO! 128, // bytes per frame - TODO! 1, // recommended number of frames per packet 16, // maximum number of frames per packe 0, // IANA RTP payload code sdpSBC, // RTP payload name create_decoder, // create codec function destroy_decoder, // destroy codec codec_decoder, // encode/decode NULL, // codec controls PluginCodec_H323Codec_nonStandard, // h323CapabilityType &sbcCap // h323CapabilityData } }; PLUGIN_CODEC_IMPLEMENT_ALL(LPC 10, sbcCodecDefn, PLUGIN_CODEC_VERSION) ///////////////////////////////////////////////////////////////////////////// h323plus/plugins/audio/SBC/sbc.c0000644000175000017500000011026611341106241015212 0ustar markmark/* * * Bluetooth low-complexity, subband codec (SBC) library * * Copyright (C) 2004-2008 Marcel Holtmann * Copyright (C) 2004-2005 Henryk Ploetz * Copyright (C) 2005-2008 Brad Midgley * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * */ /* todo items: use a log2 table for byte integer scale factors calculation (sum log2 results for high and low bytes) fill bitpool by 16 bits instead of one at a time in bits allocation/bitpool generation port to the dsp */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include "sbc_math.h" #include "sbc_tables.h" #include "sbc.h" #define SBC_SYNCWORD 0x9C /* This structure contains an unpacked SBC frame. Yes, there is probably quite some unused space herein */ struct sbc_frame { uint8_t frequency; uint8_t block_mode; uint8_t blocks; enum { MONO = SBC_MODE_MONO, DUAL_CHANNEL = SBC_MODE_DUAL_CHANNEL, STEREO = SBC_MODE_STEREO, JOINT_STEREO = SBC_MODE_JOINT_STEREO } mode; uint8_t channels; enum { LOUDNESS = SBC_AM_LOUDNESS, SNR = SBC_AM_SNR } allocation; uint8_t subband_mode; uint8_t subbands; uint8_t bitpool; uint8_t codesize; uint8_t length; /* bit number x set means joint stereo has been used in subband x */ uint8_t joint; /* only the lower 4 bits of every element are to be used */ uint8_t scale_factor[2][8]; /* raw integer subband samples in the frame */ int32_t sb_sample_f[16][2][8]; int32_t sb_sample[16][2][8]; /* modified subband samples */ int16_t pcm_sample[2][16*8]; /* original pcm audio samples */ }; struct sbc_decoder_state { int subbands; int32_t V[2][170]; int offset[2][16]; }; struct sbc_encoder_state { int subbands; int position[2]; int32_t X[2][160]; }; /* * Calculates the CRC-8 of the first len bits in data */ static const uint8_t crc_table[256] = { 0x00, 0x1D, 0x3A, 0x27, 0x74, 0x69, 0x4E, 0x53, 0xE8, 0xF5, 0xD2, 0xCF, 0x9C, 0x81, 0xA6, 0xBB, 0xCD, 0xD0, 0xF7, 0xEA, 0xB9, 0xA4, 0x83, 0x9E, 0x25, 0x38, 0x1F, 0x02, 0x51, 0x4C, 0x6B, 0x76, 0x87, 0x9A, 0xBD, 0xA0, 0xF3, 0xEE, 0xC9, 0xD4, 0x6F, 0x72, 0x55, 0x48, 0x1B, 0x06, 0x21, 0x3C, 0x4A, 0x57, 0x70, 0x6D, 0x3E, 0x23, 0x04, 0x19, 0xA2, 0xBF, 0x98, 0x85, 0xD6, 0xCB, 0xEC, 0xF1, 0x13, 0x0E, 0x29, 0x34, 0x67, 0x7A, 0x5D, 0x40, 0xFB, 0xE6, 0xC1, 0xDC, 0x8F, 0x92, 0xB5, 0xA8, 0xDE, 0xC3, 0xE4, 0xF9, 0xAA, 0xB7, 0x90, 0x8D, 0x36, 0x2B, 0x0C, 0x11, 0x42, 0x5F, 0x78, 0x65, 0x94, 0x89, 0xAE, 0xB3, 0xE0, 0xFD, 0xDA, 0xC7, 0x7C, 0x61, 0x46, 0x5B, 0x08, 0x15, 0x32, 0x2F, 0x59, 0x44, 0x63, 0x7E, 0x2D, 0x30, 0x17, 0x0A, 0xB1, 0xAC, 0x8B, 0x96, 0xC5, 0xD8, 0xFF, 0xE2, 0x26, 0x3B, 0x1C, 0x01, 0x52, 0x4F, 0x68, 0x75, 0xCE, 0xD3, 0xF4, 0xE9, 0xBA, 0xA7, 0x80, 0x9D, 0xEB, 0xF6, 0xD1, 0xCC, 0x9F, 0x82, 0xA5, 0xB8, 0x03, 0x1E, 0x39, 0x24, 0x77, 0x6A, 0x4D, 0x50, 0xA1, 0xBC, 0x9B, 0x86, 0xD5, 0xC8, 0xEF, 0xF2, 0x49, 0x54, 0x73, 0x6E, 0x3D, 0x20, 0x07, 0x1A, 0x6C, 0x71, 0x56, 0x4B, 0x18, 0x05, 0x22, 0x3F, 0x84, 0x99, 0xBE, 0xA3, 0xF0, 0xED, 0xCA, 0xD7, 0x35, 0x28, 0x0F, 0x12, 0x41, 0x5C, 0x7B, 0x66, 0xDD, 0xC0, 0xE7, 0xFA, 0xA9, 0xB4, 0x93, 0x8E, 0xF8, 0xE5, 0xC2, 0xDF, 0x8C, 0x91, 0xB6, 0xAB, 0x10, 0x0D, 0x2A, 0x37, 0x64, 0x79, 0x5E, 0x43, 0xB2, 0xAF, 0x88, 0x95, 0xC6, 0xDB, 0xFC, 0xE1, 0x5A, 0x47, 0x60, 0x7D, 0x2E, 0x33, 0x14, 0x09, 0x7F, 0x62, 0x45, 0x58, 0x0B, 0x16, 0x31, 0x2C, 0x97, 0x8A, 0xAD, 0xB0, 0xE3, 0xFE, 0xD9, 0xC4 }; static uint8_t sbc_crc8(const uint8_t *data, size_t len) { uint8_t crc = 0x0f; size_t i; uint8_t octet; for (i = 0; i < len / 8; i++) crc = crc_table[crc ^ data[i]]; octet = data[i]; for (i = 0; i < len % 8; i++) { char bit = ((octet ^ crc) & 0x80) >> 7; crc = ((crc & 0x7f) << 1) ^ (bit ? 0x1d : 0); octet = octet << 1; } return crc; } /* * Code straight from the spec to calculate the bits array * Takes a pointer to the frame in question, a pointer to the bits array and * the sampling frequency (as 2 bit integer) */ static void sbc_calculate_bits(const struct sbc_frame *frame, int (*bits)[8]) { uint8_t sf = frame->frequency; if (frame->mode == MONO || frame->mode == DUAL_CHANNEL) { int bitneed[2][8], loudness, max_bitneed, bitcount, slicecount, bitslice; int ch, sb; for (ch = 0; ch < frame->channels; ch++) { max_bitneed = 0; if (frame->allocation == SNR) { for (sb = 0; sb < frame->subbands; sb++) { bitneed[ch][sb] = frame->scale_factor[ch][sb]; if (bitneed[ch][sb] > max_bitneed) max_bitneed = bitneed[ch][sb]; } } else { for (sb = 0; sb < frame->subbands; sb++) { if (frame->scale_factor[ch][sb] == 0) bitneed[ch][sb] = -5; else { if (frame->subbands == 4) loudness = frame->scale_factor[ch][sb] - sbc_offset4[sf][sb]; else loudness = frame->scale_factor[ch][sb] - sbc_offset8[sf][sb]; if (loudness > 0) bitneed[ch][sb] = loudness / 2; else bitneed[ch][sb] = loudness; } if (bitneed[ch][sb] > max_bitneed) max_bitneed = bitneed[ch][sb]; } } bitcount = 0; slicecount = 0; bitslice = max_bitneed + 1; do { bitslice--; bitcount += slicecount; slicecount = 0; for (sb = 0; sb < frame->subbands; sb++) { if ((bitneed[ch][sb] > bitslice + 1) && (bitneed[ch][sb] < bitslice + 16)) slicecount++; else if (bitneed[ch][sb] == bitslice + 1) slicecount += 2; } } while (bitcount + slicecount < frame->bitpool); if (bitcount + slicecount == frame->bitpool) { bitcount += slicecount; bitslice--; } for (sb = 0; sb < frame->subbands; sb++) { if (bitneed[ch][sb] < bitslice + 2) bits[ch][sb] = 0; else { bits[ch][sb] = bitneed[ch][sb] - bitslice; if (bits[ch][sb] > 16) bits[ch][sb] = 16; } } for (sb = 0; bitcount < frame->bitpool && sb < frame->subbands; sb++) { if ((bits[ch][sb] >= 2) && (bits[ch][sb] < 16)) { bits[ch][sb]++; bitcount++; } else if ((bitneed[ch][sb] == bitslice + 1) && (frame->bitpool > bitcount + 1)) { bits[ch][sb] = 2; bitcount += 2; } } for (sb = 0; bitcount < frame->bitpool && sb < frame->subbands; sb++) { if (bits[ch][sb] < 16) { bits[ch][sb]++; bitcount++; } } } } else if (frame->mode == STEREO || frame->mode == JOINT_STEREO) { int bitneed[2][8], loudness, max_bitneed, bitcount, slicecount, bitslice; int ch, sb; max_bitneed = 0; if (frame->allocation == SNR) { for (ch = 0; ch < 2; ch++) { for (sb = 0; sb < frame->subbands; sb++) { bitneed[ch][sb] = frame->scale_factor[ch][sb]; if (bitneed[ch][sb] > max_bitneed) max_bitneed = bitneed[ch][sb]; } } } else { for (ch = 0; ch < 2; ch++) { for (sb = 0; sb < frame->subbands; sb++) { if (frame->scale_factor[ch][sb] == 0) bitneed[ch][sb] = -5; else { if (frame->subbands == 4) loudness = frame->scale_factor[ch][sb] - sbc_offset4[sf][sb]; else loudness = frame->scale_factor[ch][sb] - sbc_offset8[sf][sb]; if (loudness > 0) bitneed[ch][sb] = loudness / 2; else bitneed[ch][sb] = loudness; } if (bitneed[ch][sb] > max_bitneed) max_bitneed = bitneed[ch][sb]; } } } bitcount = 0; slicecount = 0; bitslice = max_bitneed + 1; do { bitslice--; bitcount += slicecount; slicecount = 0; for (ch = 0; ch < 2; ch++) { for (sb = 0; sb < frame->subbands; sb++) { if ((bitneed[ch][sb] > bitslice + 1) && (bitneed[ch][sb] < bitslice + 16)) slicecount++; else if (bitneed[ch][sb] == bitslice + 1) slicecount += 2; } } } while (bitcount + slicecount < frame->bitpool); if (bitcount + slicecount == frame->bitpool) { bitcount += slicecount; bitslice--; } for (ch = 0; ch < 2; ch++) { for (sb = 0; sb < frame->subbands; sb++) { if (bitneed[ch][sb] < bitslice + 2) { bits[ch][sb] = 0; } else { bits[ch][sb] = bitneed[ch][sb] - bitslice; if (bits[ch][sb] > 16) bits[ch][sb] = 16; } } } ch = 0; sb = 0; while (bitcount < frame->bitpool) { if ((bits[ch][sb] >= 2) && (bits[ch][sb] < 16)) { bits[ch][sb]++; bitcount++; } else if ((bitneed[ch][sb] == bitslice + 1) && (frame->bitpool > bitcount + 1)) { bits[ch][sb] = 2; bitcount += 2; } if (ch == 1) { ch = 0; sb++; if (sb >= frame->subbands) break; } else ch = 1; } ch = 0; sb = 0; while (bitcount < frame->bitpool) { if (bits[ch][sb] < 16) { bits[ch][sb]++; bitcount++; } if (ch == 1) { ch = 0; sb++; if (sb >= frame->subbands) break; } else ch = 1; } } } /* * Unpacks a SBC frame at the beginning of the stream in data, * which has at most len bytes into frame. * Returns the length in bytes of the packed frame, or a negative * value on error. The error codes are: * * -1 Data stream too short * -2 Sync byte incorrect * -3 CRC8 incorrect * -4 Bitpool value out of bounds */ static int sbc_unpack_frame(const uint8_t *data, struct sbc_frame *frame, size_t len) { int consumed; /* Will copy the parts of the header that are relevant to crc * calculation here */ uint8_t crc_header[11] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int crc_pos = 0; int32_t temp; int audio_sample; int ch, sb, blk, bit; /* channel, subband, block and bit standard counters */ int bits[2][8]; /* bits distribution */ uint32_t levels[2][8]; /* levels derived from that */ if (len < 4) return -1; if (data[0] != SBC_SYNCWORD) return -2; frame->frequency = (data[1] >> 6) & 0x03; frame->block_mode = (data[1] >> 4) & 0x03; switch (frame->block_mode) { case SBC_BLK_4: frame->blocks = 4; break; case SBC_BLK_8: frame->blocks = 8; break; case SBC_BLK_12: frame->blocks = 12; break; case SBC_BLK_16: frame->blocks = 16; break; } frame->mode = (data[1] >> 2) & 0x03; switch (frame->mode) { case MONO: frame->channels = 1; break; case DUAL_CHANNEL: /* fall-through */ case STEREO: case JOINT_STEREO: frame->channels = 2; break; } frame->allocation = (data[1] >> 1) & 0x01; frame->subband_mode = (data[1] & 0x01); frame->subbands = frame->subband_mode ? 8 : 4; frame->bitpool = data[2]; if ((frame->mode == MONO || frame->mode == DUAL_CHANNEL) && frame->bitpool > 16 * frame->subbands) return -4; if ((frame->mode == STEREO || frame->mode == JOINT_STEREO) && frame->bitpool > 32 * frame->subbands) return -4; /* data[3] is crc, we're checking it later */ consumed = 32; crc_header[0] = data[1]; crc_header[1] = data[2]; crc_pos = 16; if (frame->mode == JOINT_STEREO) { if (len * 8 < consumed + frame->subbands) return -1; frame->joint = 0x00; for (sb = 0; sb < frame->subbands - 1; sb++) frame->joint |= ((data[4] >> (7 - sb)) & 0x01) << sb; if (frame->subbands == 4) crc_header[crc_pos / 8] = data[4] & 0xf0; else crc_header[crc_pos / 8] = data[4]; consumed += frame->subbands; crc_pos += frame->subbands; } if (len * 8 < consumed + (4 * frame->subbands * frame->channels)) return -1; for (ch = 0; ch < frame->channels; ch++) { for (sb = 0; sb < frame->subbands; sb++) { /* FIXME assert(consumed % 4 == 0); */ frame->scale_factor[ch][sb] = (data[consumed >> 3] >> (4 - (consumed & 0x7))) & 0x0F; crc_header[crc_pos >> 3] |= frame->scale_factor[ch][sb] << (4 - (crc_pos & 0x7)); consumed += 4; crc_pos += 4; } } if (data[3] != sbc_crc8(crc_header, crc_pos)) return -3; sbc_calculate_bits(frame, bits); for (ch = 0; ch < frame->channels; ch++) { for (sb = 0; sb < frame->subbands; sb++) levels[ch][sb] = (1 << bits[ch][sb]) - 1; } for (blk = 0; blk < frame->blocks; blk++) { for (ch = 0; ch < frame->channels; ch++) { for (sb = 0; sb < frame->subbands; sb++) { if (levels[ch][sb] > 0) { audio_sample = 0; for (bit = 0; bit < bits[ch][sb]; bit++) { if (consumed > len * 8) return -1; if ((data[consumed >> 3] >> (7 - (consumed & 0x7))) & 0x01) audio_sample |= 1 << (bits[ch][sb] - bit - 1); consumed++; } frame->sb_sample[blk][ch][sb] = (((audio_sample << 1) | 1) << frame->scale_factor[ch][sb]) / levels[ch][sb] - (1 << frame->scale_factor[ch][sb]); } else frame->sb_sample[blk][ch][sb] = 0; } } } if (frame->mode == JOINT_STEREO) { for (blk = 0; blk < frame->blocks; blk++) { for (sb = 0; sb < frame->subbands; sb++) { if (frame->joint & (0x01 << sb)) { temp = frame->sb_sample[blk][0][sb] + frame->sb_sample[blk][1][sb]; frame->sb_sample[blk][1][sb] = frame->sb_sample[blk][0][sb] - frame->sb_sample[blk][1][sb]; frame->sb_sample[blk][0][sb] = temp; } } } } if ((consumed & 0x7) != 0) consumed += 8 - (consumed & 0x7); return consumed >> 3; } static void sbc_decoder_init(struct sbc_decoder_state *state, const struct sbc_frame *frame) { int i, ch; memset(state->V, 0, sizeof(state->V)); state->subbands = frame->subbands; for (ch = 0; ch < 2; ch++) for (i = 0; i < frame->subbands * 2; i++) state->offset[ch][i] = (10 * i + 10); } static inline void sbc_synthesize_four(struct sbc_decoder_state *state, struct sbc_frame *frame, int ch, int blk) { int i, k, idx; int32_t *v = state->V[ch]; int *offset = state->offset[ch]; for (i = 0; i < 8; i++) { /* Shifting */ offset[i]--; if (offset[i] < 0) { offset[i] = 79; memcpy(v + 80, v, 9 * sizeof(*v)); } /* Distribute the new matrix value to the shifted position */ v[offset[i]] = SCALE4_STAGED1( MULA(synmatrix4[i][0], frame->sb_sample[blk][ch][0], MULA(synmatrix4[i][1], frame->sb_sample[blk][ch][1], MULA(synmatrix4[i][2], frame->sb_sample[blk][ch][2], MUL (synmatrix4[i][3], frame->sb_sample[blk][ch][3]))))); } /* Compute the samples */ for (idx = 0, i = 0; i < 4; i++, idx += 5) { k = (i + 4) & 0xf; /* Store in output, Q0 */ frame->pcm_sample[ch][blk * 4 + i] = SCALE4_STAGED2( MULA(v[offset[i] + 0], sbc_proto_4_40m0[idx + 0], MULA(v[offset[k] + 1], sbc_proto_4_40m1[idx + 0], MULA(v[offset[i] + 2], sbc_proto_4_40m0[idx + 1], MULA(v[offset[k] + 3], sbc_proto_4_40m1[idx + 1], MULA(v[offset[i] + 4], sbc_proto_4_40m0[idx + 2], MULA(v[offset[k] + 5], sbc_proto_4_40m1[idx + 2], MULA(v[offset[i] + 6], sbc_proto_4_40m0[idx + 3], MULA(v[offset[k] + 7], sbc_proto_4_40m1[idx + 3], MULA(v[offset[i] + 8], sbc_proto_4_40m0[idx + 4], MUL( v[offset[k] + 9], sbc_proto_4_40m1[idx + 4]))))))))))); } } static inline void sbc_synthesize_eight(struct sbc_decoder_state *state, struct sbc_frame *frame, int ch, int blk) { int i, j, k, idx; int *offset = state->offset[ch]; for (i = 0; i < 16; i++) { /* Shifting */ offset[i]--; if (offset[i] < 0) { offset[i] = 159; for (j = 0; j < 9; j++) state->V[ch][j + 160] = state->V[ch][j]; } /* Distribute the new matrix value to the shifted position */ state->V[ch][offset[i]] = SCALE8_STAGED1( MULA(synmatrix8[i][0], frame->sb_sample[blk][ch][0], MULA(synmatrix8[i][1], frame->sb_sample[blk][ch][1], MULA(synmatrix8[i][2], frame->sb_sample[blk][ch][2], MULA(synmatrix8[i][3], frame->sb_sample[blk][ch][3], MULA(synmatrix8[i][4], frame->sb_sample[blk][ch][4], MULA(synmatrix8[i][5], frame->sb_sample[blk][ch][5], MULA(synmatrix8[i][6], frame->sb_sample[blk][ch][6], MUL( synmatrix8[i][7], frame->sb_sample[blk][ch][7]))))))))); } /* Compute the samples */ for (idx = 0, i = 0; i < 8; i++, idx += 5) { k = (i + 8) & 0xf; /* Store in output */ frame->pcm_sample[ch][blk * 8 + i] = SCALE8_STAGED2( // Q0 MULA(state->V[ch][offset[i] + 0], sbc_proto_8_80m0[idx + 0], MULA(state->V[ch][offset[k] + 1], sbc_proto_8_80m1[idx + 0], MULA(state->V[ch][offset[i] + 2], sbc_proto_8_80m0[idx + 1], MULA(state->V[ch][offset[k] + 3], sbc_proto_8_80m1[idx + 1], MULA(state->V[ch][offset[i] + 4], sbc_proto_8_80m0[idx + 2], MULA(state->V[ch][offset[k] + 5], sbc_proto_8_80m1[idx + 2], MULA(state->V[ch][offset[i] + 6], sbc_proto_8_80m0[idx + 3], MULA(state->V[ch][offset[k] + 7], sbc_proto_8_80m1[idx + 3], MULA(state->V[ch][offset[i] + 8], sbc_proto_8_80m0[idx + 4], MUL( state->V[ch][offset[k] + 9], sbc_proto_8_80m1[idx + 4]))))))))))); } } static int sbc_synthesize_audio(struct sbc_decoder_state *state, struct sbc_frame *frame) { int ch, blk; switch (frame->subbands) { case 4: for (ch = 0; ch < frame->channels; ch++) { for (blk = 0; blk < frame->blocks; blk++) sbc_synthesize_four(state, frame, ch, blk); } return frame->blocks * 4; case 8: for (ch = 0; ch < frame->channels; ch++) { for (blk = 0; blk < frame->blocks; blk++) sbc_synthesize_eight(state, frame, ch, blk); } return frame->blocks * 8; default: return -EIO; } } static void sbc_encoder_init(struct sbc_encoder_state *state, const struct sbc_frame *frame) { memset(&state->X, 0, sizeof(state->X)); state->subbands = frame->subbands; state->position[0] = state->position[1] = 9 * frame->subbands; } static inline void _sbc_analyze_four(const int32_t *in, int32_t *out) { sbc_fixed_t t[8], s[5]; t[0] = SCALE4_STAGE1( /* Q8 */ MULA(_sbc_proto_4[0], in[8] - in[32], /* Q18 */ MUL( _sbc_proto_4[1], in[16] - in[24]))); t[1] = SCALE4_STAGE1( MULA(_sbc_proto_4[2], in[1], MULA(_sbc_proto_4[3], in[9], MULA(_sbc_proto_4[4], in[17], MULA(_sbc_proto_4[5], in[25], MUL( _sbc_proto_4[6], in[33])))))); t[2] = SCALE4_STAGE1( MULA(_sbc_proto_4[7], in[2], MULA(_sbc_proto_4[8], in[10], MULA(_sbc_proto_4[9], in[18], MULA(_sbc_proto_4[10], in[26], MUL( _sbc_proto_4[11], in[34])))))); t[3] = SCALE4_STAGE1( MULA(_sbc_proto_4[12], in[3], MULA(_sbc_proto_4[13], in[11], MULA(_sbc_proto_4[14], in[19], MULA(_sbc_proto_4[15], in[27], MUL( _sbc_proto_4[16], in[35])))))); t[4] = SCALE4_STAGE1( MULA(_sbc_proto_4[17], in[4] + in[36], MULA(_sbc_proto_4[18], in[12] + in[28], MUL( _sbc_proto_4[19], in[20])))); t[5] = SCALE4_STAGE1( MULA(_sbc_proto_4[16], in[5], MULA(_sbc_proto_4[15], in[13], MULA(_sbc_proto_4[14], in[21], MULA(_sbc_proto_4[13], in[29], MUL( _sbc_proto_4[12], in[37])))))); /* don't compute t[6]... this term always multiplies * with cos(pi/2) = 0 */ t[7] = SCALE4_STAGE1( MULA(_sbc_proto_4[6], in[7], MULA(_sbc_proto_4[5], in[15], MULA(_sbc_proto_4[4], in[23], MULA(_sbc_proto_4[3], in[31], MUL( _sbc_proto_4[2], in[39])))))); s[0] = MUL( _anamatrix4[0], t[0] + t[4]); s[1] = MUL( _anamatrix4[2], t[2]); s[2] = MULA(_anamatrix4[1], t[1] + t[3], MUL(_anamatrix4[3], t[5])); s[3] = MULA(_anamatrix4[3], t[1] + t[3], MUL(_anamatrix4[1], -t[5] + t[7])); s[4] = MUL( _anamatrix4[3], t[7]); out[0] = SCALE4_STAGE2( s[0] + s[1] + s[2] + s[4]); /* Q0 */ out[1] = SCALE4_STAGE2(-s[0] + s[1] + s[3]); out[2] = SCALE4_STAGE2(-s[0] + s[1] - s[3]); out[3] = SCALE4_STAGE2( s[0] + s[1] - s[2] - s[4]); } static inline void sbc_analyze_four(struct sbc_encoder_state *state, struct sbc_frame *frame, int ch, int blk) { int32_t *x = &state->X[ch][state->position[ch]]; int16_t *pcm = &frame->pcm_sample[ch][blk * 4]; /* Input 4 Audio Samples */ x[40] = x[0] = pcm[3]; x[41] = x[1] = pcm[2]; x[42] = x[2] = pcm[1]; x[43] = x[3] = pcm[0]; _sbc_analyze_four(x, frame->sb_sample_f[blk][ch]); state->position[ch] -= 4; if (state->position[ch] < 0) state->position[ch] = 36; } static inline void _sbc_analyze_eight(const int32_t *in, int32_t *out) { sbc_fixed_t t[8], s[8]; t[0] = SCALE8_STAGE1( /* Q10 */ MULA(_sbc_proto_8[0], (in[16] - in[64]), /* Q18 = Q18 * Q0 */ MULA(_sbc_proto_8[1], (in[32] - in[48]), MULA(_sbc_proto_8[2], in[4], MULA(_sbc_proto_8[3], in[20], MULA(_sbc_proto_8[4], in[36], MUL( _sbc_proto_8[5], in[52]))))))); t[1] = SCALE8_STAGE1( MULA(_sbc_proto_8[6], in[2], MULA(_sbc_proto_8[7], in[18], MULA(_sbc_proto_8[8], in[34], MULA(_sbc_proto_8[9], in[50], MUL(_sbc_proto_8[10], in[66])))))); t[2] = SCALE8_STAGE1( MULA(_sbc_proto_8[11], in[1], MULA(_sbc_proto_8[12], in[17], MULA(_sbc_proto_8[13], in[33], MULA(_sbc_proto_8[14], in[49], MULA(_sbc_proto_8[15], in[65], MULA(_sbc_proto_8[16], in[3], MULA(_sbc_proto_8[17], in[19], MULA(_sbc_proto_8[18], in[35], MULA(_sbc_proto_8[19], in[51], MUL( _sbc_proto_8[20], in[67]))))))))))); t[3] = SCALE8_STAGE1( MULA( _sbc_proto_8[21], in[5], MULA( _sbc_proto_8[22], in[21], MULA( _sbc_proto_8[23], in[37], MULA( _sbc_proto_8[24], in[53], MULA( _sbc_proto_8[25], in[69], MULA(-_sbc_proto_8[15], in[15], MULA(-_sbc_proto_8[14], in[31], MULA(-_sbc_proto_8[13], in[47], MULA(-_sbc_proto_8[12], in[63], MUL( -_sbc_proto_8[11], in[79]))))))))))); t[4] = SCALE8_STAGE1( MULA( _sbc_proto_8[26], in[6], MULA( _sbc_proto_8[27], in[22], MULA( _sbc_proto_8[28], in[38], MULA( _sbc_proto_8[29], in[54], MULA( _sbc_proto_8[30], in[70], MULA(-_sbc_proto_8[10], in[14], MULA(-_sbc_proto_8[9], in[30], MULA(-_sbc_proto_8[8], in[46], MULA(-_sbc_proto_8[7], in[62], MUL( -_sbc_proto_8[6], in[78]))))))))))); t[5] = SCALE8_STAGE1( MULA( _sbc_proto_8[31], in[7], MULA( _sbc_proto_8[32], in[23], MULA( _sbc_proto_8[33], in[39], MULA( _sbc_proto_8[34], in[55], MULA( _sbc_proto_8[35], in[71], MULA(-_sbc_proto_8[20], in[13], MULA(-_sbc_proto_8[19], in[29], MULA(-_sbc_proto_8[18], in[45], MULA(-_sbc_proto_8[17], in[61], MUL( -_sbc_proto_8[16], in[77]))))))))))); t[6] = SCALE8_STAGE1( MULA( _sbc_proto_8[36], (in[8] + in[72]), MULA( _sbc_proto_8[37], (in[24] + in[56]), MULA( _sbc_proto_8[38], in[40], MULA(-_sbc_proto_8[39], in[12], MULA(-_sbc_proto_8[5], in[28], MULA(-_sbc_proto_8[4], in[44], MULA(-_sbc_proto_8[3], in[60], MUL( -_sbc_proto_8[2], in[76]))))))))); t[7] = SCALE8_STAGE1( MULA( _sbc_proto_8[35], in[9], MULA( _sbc_proto_8[34], in[25], MULA( _sbc_proto_8[33], in[41], MULA( _sbc_proto_8[32], in[57], MULA( _sbc_proto_8[31], in[73], MULA(-_sbc_proto_8[25], in[11], MULA(-_sbc_proto_8[24], in[27], MULA(-_sbc_proto_8[23], in[43], MULA(-_sbc_proto_8[22], in[59], MUL( -_sbc_proto_8[21], in[75]))))))))))); s[0] = MULA( _anamatrix8[0], t[0], MUL( _anamatrix8[1], t[6])); s[1] = MUL( _anamatrix8[7], t[1]); s[2] = MULA( _anamatrix8[2], t[2], MULA( _anamatrix8[3], t[3], MULA( _anamatrix8[4], t[5], MUL( _anamatrix8[5], t[7])))); s[3] = MUL( _anamatrix8[6], t[4]); s[4] = MULA( _anamatrix8[3], t[2], MULA(-_anamatrix8[5], t[3], MULA(-_anamatrix8[2], t[5], MUL( -_anamatrix8[4], t[7])))); s[5] = MULA( _anamatrix8[4], t[2], MULA(-_anamatrix8[2], t[3], MULA( _anamatrix8[5], t[5], MUL( _anamatrix8[3], t[7])))); s[6] = MULA( _anamatrix8[1], t[0], MUL( -_anamatrix8[0], t[6])); s[7] = MULA( _anamatrix8[5], t[2], MULA(-_anamatrix8[4], t[3], MULA( _anamatrix8[3], t[5], MUL( -_anamatrix8[2], t[7])))); out[0] = SCALE8_STAGE2( s[0] + s[1] + s[2] + s[3]); out[1] = SCALE8_STAGE2( s[1] - s[3] + s[4] + s[6]); out[2] = SCALE8_STAGE2( s[1] - s[3] + s[5] - s[6]); out[3] = SCALE8_STAGE2(-s[0] + s[1] + s[3] + s[7]); out[4] = SCALE8_STAGE2(-s[0] + s[1] + s[3] - s[7]); out[5] = SCALE8_STAGE2( s[1] - s[3] - s[5] - s[6]); out[6] = SCALE8_STAGE2( s[1] - s[3] - s[4] + s[6]); out[7] = SCALE8_STAGE2( s[0] + s[1] - s[2] + s[3]); } static inline void sbc_analyze_eight(struct sbc_encoder_state *state, struct sbc_frame *frame, int ch, int blk) { int32_t *x = &state->X[ch][state->position[ch]]; int16_t *pcm = &frame->pcm_sample[ch][blk * 8]; /* Input 8 Audio Samples */ x[80] = x[0] = pcm[7]; x[81] = x[1] = pcm[6]; x[82] = x[2] = pcm[5]; x[83] = x[3] = pcm[4]; x[84] = x[4] = pcm[3]; x[85] = x[5] = pcm[2]; x[86] = x[6] = pcm[1]; x[87] = x[7] = pcm[0]; _sbc_analyze_eight(x, frame->sb_sample_f[blk][ch]); state->position[ch] -= 8; if (state->position[ch] < 0) state->position[ch] = 72; } static int sbc_analyze_audio(struct sbc_encoder_state *state, struct sbc_frame *frame) { int ch, blk; switch (frame->subbands) { case 4: for (ch = 0; ch < frame->channels; ch++) for (blk = 0; blk < frame->blocks; blk++) sbc_analyze_four(state, frame, ch, blk); return frame->blocks * 4; case 8: for (ch = 0; ch < frame->channels; ch++) for (blk = 0; blk < frame->blocks; blk++) sbc_analyze_eight(state, frame, ch, blk); return frame->blocks * 8; default: return -EIO; } } /* * Packs the SBC frame from frame into the memory at data. At most len * bytes will be used, should more memory be needed an appropriate * error code will be returned. Returns the length of the packed frame * on success or a negative value on error. * * The error codes are: * -1 Not enough memory reserved * -2 Unsupported sampling rate * -3 Unsupported number of blocks * -4 Unsupported number of subbands * -5 Bitpool value out of bounds * -99 not implemented */ static int sbc_pack_frame(uint8_t *data, struct sbc_frame *frame, size_t len) { int produced; /* Will copy the header parts for CRC-8 calculation here */ uint8_t crc_header[11] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int crc_pos = 0; uint16_t audio_sample; int ch, sb, blk, bit; /* channel, subband, block and bit counters */ int bits[2][8]; /* bits distribution */ int levels[2][8]; /* levels are derived from that */ u_int32_t scalefactor[2][8]; /* derived from frame->scale_factor */ data[0] = SBC_SYNCWORD; data[1] = (frame->frequency & 0x03) << 6; data[1] |= (frame->block_mode & 0x03) << 4; data[1] |= (frame->mode & 0x03) << 2; data[1] |= (frame->allocation & 0x01) << 1; switch (frame->subbands) { case 4: /* Nothing to do */ break; case 8: data[1] |= 0x01; break; default: return -4; break; } data[2] = frame->bitpool; if ((frame->mode == MONO || frame->mode == DUAL_CHANNEL) && frame->bitpool > frame->subbands << 4) return -5; if ((frame->mode == STEREO || frame->mode == JOINT_STEREO) && frame->bitpool > frame->subbands << 5) return -5; /* Can't fill in crc yet */ produced = 32; crc_header[0] = data[1]; crc_header[1] = data[2]; crc_pos = 16; for (ch = 0; ch < frame->channels; ch++) { for (sb = 0; sb < frame->subbands; sb++) { frame->scale_factor[ch][sb] = 0; scalefactor[ch][sb] = 2; for (blk = 0; blk < frame->blocks; blk++) { while (scalefactor[ch][sb] < fabs(frame->sb_sample_f[blk][ch][sb])) { frame->scale_factor[ch][sb]++; scalefactor[ch][sb] *= 2; } } } } if (frame->mode == JOINT_STEREO) { /* like frame->sb_sample but joint stereo */ int32_t sb_sample_j[16][2]; /* scalefactor and scale_factor in joint case */ u_int32_t scalefactor_j[2]; uint8_t scale_factor_j[2]; frame->joint = 0; for (sb = 0; sb < frame->subbands - 1; sb++) { scale_factor_j[0] = 0; scalefactor_j[0] = 2; scale_factor_j[1] = 0; scalefactor_j[1] = 2; for (blk = 0; blk < frame->blocks; blk++) { /* Calculate joint stereo signal */ sb_sample_j[blk][0] = (frame->sb_sample_f[blk][0][sb] + frame->sb_sample_f[blk][1][sb]) >> 1; sb_sample_j[blk][1] = (frame->sb_sample_f[blk][0][sb] - frame->sb_sample_f[blk][1][sb]) >> 1; /* calculate scale_factor_j and scalefactor_j for joint case */ while (scalefactor_j[0] < fabs(sb_sample_j[blk][0])) { scale_factor_j[0]++; scalefactor_j[0] *= 2; } while (scalefactor_j[1] < fabs(sb_sample_j[blk][1])) { scale_factor_j[1]++; scalefactor_j[1] *= 2; } } /* decide whether to join this subband */ if ((scalefactor[0][sb] + scalefactor[1][sb]) > (scalefactor_j[0] + scalefactor_j[1]) ) { /* use joint stereo for this subband */ frame->joint |= 1 << sb; frame->scale_factor[0][sb] = scale_factor_j[0]; frame->scale_factor[1][sb] = scale_factor_j[1]; scalefactor[0][sb] = scalefactor_j[0]; scalefactor[1][sb] = scalefactor_j[1]; for (blk = 0; blk < frame->blocks; blk++) { frame->sb_sample_f[blk][0][sb] = sb_sample_j[blk][0]; frame->sb_sample_f[blk][1][sb] = sb_sample_j[blk][1]; } } } data[4] = 0; for (sb = 0; sb < frame->subbands - 1; sb++) data[4] |= ((frame->joint >> sb) & 0x01) << (frame->subbands - 1 - sb); crc_header[crc_pos >> 3] = data[4]; produced += frame->subbands; crc_pos += frame->subbands; } for (ch = 0; ch < frame->channels; ch++) { for (sb = 0; sb < frame->subbands; sb++) { data[produced >> 3] <<= 4; crc_header[crc_pos >> 3] <<= 4; data[produced >> 3] |= frame->scale_factor[ch][sb] & 0x0F; crc_header[crc_pos >> 3] |= frame->scale_factor[ch][sb] & 0x0F; produced += 4; crc_pos += 4; } } /* align the last crc byte */ if (crc_pos % 8) crc_header[crc_pos >> 3] <<= 8 - (crc_pos % 8); data[3] = sbc_crc8(crc_header, crc_pos); sbc_calculate_bits(frame, bits); for (ch = 0; ch < frame->channels; ch++) { for (sb = 0; sb < frame->subbands; sb++) levels[ch][sb] = (1 << bits[ch][sb]) - 1; } for (blk = 0; blk < frame->blocks; blk++) { for (ch = 0; ch < frame->channels; ch++) { for (sb = 0; sb < frame->subbands; sb++) { if (levels[ch][sb] > 0) { audio_sample = (uint16_t) ((((frame->sb_sample_f[blk][ch][sb]*levels[ch][sb]) >> (frame->scale_factor[ch][sb] + 1)) + levels[ch][sb]) >> 1); audio_sample <<= 16 - bits[ch][sb]; for (bit = 0; bit < bits[ch][sb]; bit++) { data[produced >> 3] <<= 1; if (audio_sample & 0x8000) data[produced >> 3] |= 0x1; audio_sample <<= 1; produced++; } } } } } /* align the last byte */ if (produced % 8) { data[produced >> 3] <<= 8 - (produced % 8); } return (produced + 7) >> 3; } struct sbc_priv { int init; struct sbc_frame frame; struct sbc_decoder_state dec_state; struct sbc_encoder_state enc_state; }; static void sbc_set_defaults(sbc_t *sbc, unsigned long flags) { sbc->frequency = SBC_FREQ_44100; sbc->mode = SBC_MODE_STEREO; sbc->subbands = SBC_SB_8; sbc->blocks = SBC_BLK_16; sbc->bitpool = 32; #if __BYTE_ORDER == __LITTLE_ENDIAN sbc->endian = SBC_LE; #elif __BYTE_ORDER == __BIG_ENDIAN sbc->endian = SBC_BE; #else #error "Unknown byte order" #endif } int sbc_init(sbc_t *sbc, unsigned long flags) { if (!sbc) return -EIO; memset(sbc, 0, sizeof(sbc_t)); sbc->priv = malloc(sizeof(struct sbc_priv)); if (!sbc->priv) return -ENOMEM; memset(sbc->priv, 0, sizeof(struct sbc_priv)); sbc_set_defaults(sbc, flags); return 0; } int sbc_parse(sbc_t *sbc, void *input, int input_len) { return sbc_decode(sbc, input, input_len, NULL, 0, NULL); } int sbc_decode(sbc_t *sbc, const void *input, int input_len, void *output, int output_len, int *written) { struct sbc_priv *priv; char *ptr; int i, ch, framelen, samples; if (!sbc && !input) return -100; // -EIO; priv = sbc->priv; framelen = sbc_unpack_frame(input, &priv->frame, input_len); if (!priv->init) { sbc_decoder_init(&priv->dec_state, &priv->frame); priv->init = 1; sbc->frequency = priv->frame.frequency; sbc->mode = priv->frame.mode; sbc->subbands = priv->frame.subband_mode; sbc->blocks = priv->frame.block_mode; sbc->allocation = priv->frame.allocation; sbc->bitpool = priv->frame.bitpool; priv->frame.codesize = sbc_get_codesize(sbc); priv->frame.length = sbc_get_frame_length(sbc); } if (!output) return framelen; if (written) *written = 0; samples = sbc_synthesize_audio(&priv->dec_state, &priv->frame); ptr = output; if (output_len < samples * priv->frame.channels * 2) samples = output_len / (priv->frame.channels * 2); for (i = 0; i < samples; i++) { for (ch = 0; ch < priv->frame.channels; ch++) { int16_t s; s = priv->frame.pcm_sample[ch][i]; #if __BYTE_ORDER == __LITTLE_ENDIAN if (sbc->endian == SBC_BE) { #elif __BYTE_ORDER == __BIG_ENDIAN if (sbc->endian == SBC_LE) { #else #error "Unknown byte order" #endif *ptr++ = (s & 0xff00) >> 8; *ptr++ = (s & 0x00ff); } else { *ptr++ = (s & 0x00ff); *ptr++ = (s & 0xff00) >> 8; } } } if (written) *written = samples * priv->frame.channels * 2; return framelen; } int sbc_encode(sbc_t *sbc, const void *input, int input_len, void *output, int output_len, int *written) { struct sbc_priv *priv; const char *ptr; int i, ch, framelen, samples; if (!sbc && !input) return -200; // -EIO; priv = sbc->priv; if (written) *written = 0; if (!priv->init) { priv->frame.frequency = sbc->frequency; priv->frame.mode = sbc->mode; priv->frame.channels = sbc->mode == SBC_MODE_MONO ? 1 : 2; priv->frame.allocation = sbc->allocation; priv->frame.subband_mode = sbc->subbands; priv->frame.subbands = sbc->subbands ? 8 : 4; priv->frame.block_mode = sbc->blocks; priv->frame.blocks = 4 + (sbc->blocks * 4); priv->frame.bitpool = sbc->bitpool; priv->frame.codesize = sbc_get_codesize(sbc); priv->frame.length = sbc_get_frame_length(sbc); sbc_encoder_init(&priv->enc_state, &priv->frame); priv->init = 1; } /* input must be large enough to encode a complete frame */ if (input_len < priv->frame.codesize) return 0; /* output must be large enough to receive the encoded frame */ if (!output || output_len < priv->frame.length) return -201; // -ENOSPC; ptr = input; for (i = 0; i < priv->frame.subbands * priv->frame.blocks; i++) { for (ch = 0; ch < priv->frame.channels; ch++) { int16_t s; #if __BYTE_ORDER == __LITTLE_ENDIAN if (sbc->endian == SBC_BE) #elif __BYTE_ORDER == __BIG_ENDIAN if (sbc->endian == SBC_LE) #else #error "Unknown byte order" #endif s = (ptr[0] & 0xff) << 8 | (ptr[1] & 0xff); else s = (ptr[0] & 0xff) | (ptr[1] & 0xff) << 8; ptr += 2; priv->frame.pcm_sample[ch][i] = s; } } samples = sbc_analyze_audio(&priv->enc_state, &priv->frame); framelen = sbc_pack_frame(output, &priv->frame, output_len); if (written) *written = framelen; return samples * priv->frame.channels * 2; } void sbc_finish(sbc_t *sbc) { if (!sbc) return; if (sbc->priv) free(sbc->priv); memset(sbc, 0, sizeof(sbc_t)); } int sbc_get_frame_length(sbc_t *sbc) { int ret; uint8_t subbands, channels, blocks, joint; struct sbc_priv *priv; priv = sbc->priv; if (!priv->init) { subbands = sbc->subbands ? 8 : 4; blocks = 4 + (sbc->blocks * 4); channels = sbc->mode == SBC_MODE_MONO ? 1 : 2; joint = sbc->mode == SBC_MODE_JOINT_STEREO ? 1 : 0; } else { subbands = priv->frame.subbands; blocks = priv->frame.blocks; channels = priv->frame.channels; joint = priv->frame.joint; } ret = 4 + (4 * subbands * channels) / 8; /* This term is not always evenly divide so we round it up */ if (channels == 1) ret += ((blocks * channels * sbc->bitpool) + 7) / 8; else ret += (((joint ? subbands : 0) + blocks * sbc->bitpool) + 7) / 8; return ret; } int sbc_get_frame_duration(sbc_t *sbc) { uint8_t subbands, blocks; uint16_t frequency; struct sbc_priv *priv; priv = sbc->priv; if (!priv->init) { subbands = sbc->subbands ? 8 : 4; blocks = 4 + (sbc->blocks * 4); } else { subbands = priv->frame.subbands; blocks = priv->frame.blocks; } switch (sbc->frequency) { case SBC_FREQ_16000: frequency = 16000; break; case SBC_FREQ_32000: frequency = 32000; break; case SBC_FREQ_44100: frequency = 44100; break; case SBC_FREQ_48000: frequency = 48000; break; default: return 0; } return (1000000 * blocks * subbands) / frequency; } int sbc_get_codesize(sbc_t *sbc) { uint8_t subbands, channels, blocks; struct sbc_priv *priv; priv = sbc->priv; if (!priv->init) { subbands = sbc->subbands ? 8 : 4; blocks = 4 + (sbc->blocks * 4); channels = sbc->mode == SBC_MODE_MONO ? 1 : 2; } else { subbands = priv->frame.subbands; blocks = priv->frame.blocks; channels = priv->frame.channels; } return subbands * blocks * channels * 2; } int sbc_reinit(sbc_t *sbc, unsigned long flags) { struct sbc_priv *priv; if (!sbc || !sbc->priv) return -EIO; priv = sbc->priv; if (priv->init == 1) memset(sbc->priv, 0, sizeof(struct sbc_priv)); sbc_set_defaults(sbc, flags); return 0; } h323plus/plugins/audio/SBC/COPYING0000644000175000017500000000262111341106241015325 0ustar markmarkRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. h323plus/plugins/audio/SBC/sbc_tables.h0000644000175000017500000002032111341106241016541 0ustar markmark/* * * Bluetooth low-complexity, subband codec (SBC) library * * Copyright (C) 2004-2008 Marcel Holtmann * Copyright (C) 2004-2005 Henryk Ploetz * Copyright (C) 2005-2006 Brad Midgley * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * */ /* A2DP specification: Appendix B, page 69 */ static const int sbc_offset4[4][4] = { { -1, 0, 0, 0 }, { -2, 0, 0, 1 }, { -2, 0, 0, 1 }, { -2, 0, 0, 1 } }; /* A2DP specification: Appendix B, page 69 */ static const int sbc_offset8[4][8] = { { -2, 0, 0, 0, 0, 0, 0, 1 }, { -3, 0, 0, 0, 0, 0, 1, 2 }, { -4, 0, 0, 0, 0, 0, 1, 2 }, { -4, 0, 0, 0, 0, 0, 1, 2 } }; #define SP4(val) ASR(val, SCALE_PROTO4_TBL) #define SA4(val) ASR(val, SCALE_ANA4_TBL) #define SP8(val) ASR(val, SCALE_PROTO8_TBL) #define SA8(val) ASR(val, SCALE_ANA8_TBL) #define SS4(val) ASR(val, SCALE_SPROTO4_TBL) #define SS8(val) ASR(val, SCALE_SPROTO8_TBL) #define SN4(val) ASR(val, SCALE_NPROTO4_TBL) #define SN8(val) ASR(val, SCALE_NPROTO8_TBL) static const int32_t _sbc_proto_4[20] = { SP4(0x02cb3e8c), SP4(0x22b63dc0), SP4(0x002329cc), SP4(0x053b7548), SP4(0x31eab940), SP4(0xec1f5e60), SP4(0xff3773a8), SP4(0x0061c5a7), SP4(0x07646680), SP4(0x3f239480), SP4(0xf89f23a8), SP4(0x007a4737), SP4(0x00b32807), SP4(0x083ddc80), SP4(0x4825e480), SP4(0x0191e578), SP4(0x00ff11ca), SP4(0x00fb7991), SP4(0x069fdc58), SP4(0x4b584000) }; static const int32_t _anamatrix4[4] = { SA4(0x2d413cc0), SA4(0x3b20d780), SA4(0x40000000), SA4(0x187de2a0) }; static const int32_t _sbc_proto_8[40] = { SP8(0x02e5cd20), SP8(0x22d0c200), SP8(0x006bfe27), SP8(0x07808930), SP8(0x3f1c8800), SP8(0xf8810d70), SP8(0x002cfdc6), SP8(0x055acf28), SP8(0x31f566c0), SP8(0xebfe57e0), SP8(0xff27c437), SP8(0x001485cc), SP8(0x041c6e58), SP8(0x2a7cfa80), SP8(0xe4c4a240), SP8(0xfe359e4c), SP8(0x0048b1f8), SP8(0x0686ce30), SP8(0x38eec5c0), SP8(0xf2a1b9f0), SP8(0xffe8904a), SP8(0x0095698a), SP8(0x0824a480), SP8(0x443b3c00), SP8(0xfd7badc8), SP8(0x00d3e2d9), SP8(0x00c183d2), SP8(0x084e1950), SP8(0x4810d800), SP8(0x017f43fe), SP8(0x01056dd8), SP8(0x00e9cb9f), SP8(0x07d7d090), SP8(0x4a708980), SP8(0x0488fae8), SP8(0x0113bd20), SP8(0x0107b1a8), SP8(0x069fb3c0), SP8(0x4b3db200), SP8(0x00763f48) }; static const int32_t sbc_proto_4_40m0[] = { SS4(0x00000000), SS4(0xffa6982f), SS4(0xfba93848), SS4(0x0456c7b8), SS4(0x005967d1), SS4(0xfffb9ac7), SS4(0xff589157), SS4(0xf9c2a8d8), SS4(0x027c1434), SS4(0x0019118b), SS4(0xfff3c74c), SS4(0xff137330), SS4(0xf81b8d70), SS4(0x00ec1b8b), SS4(0xfff0b71a), SS4(0xffe99b00), SS4(0xfef84470), SS4(0xf6fb4370), SS4(0xffcdc351), SS4(0xffe01dc7) }; static const int32_t sbc_proto_4_40m1[] = { SS4(0xffe090ce), SS4(0xff2c0475), SS4(0xf694f800), SS4(0xff2c0475), SS4(0xffe090ce), SS4(0xffe01dc7), SS4(0xffcdc351), SS4(0xf6fb4370), SS4(0xfef84470), SS4(0xffe99b00), SS4(0xfff0b71a), SS4(0x00ec1b8b), SS4(0xf81b8d70), SS4(0xff137330), SS4(0xfff3c74c), SS4(0x0019118b), SS4(0x027c1434), SS4(0xf9c2a8d8), SS4(0xff589157), SS4(0xfffb9ac7) }; static const int32_t sbc_proto_8_80m0[] = { SS8(0x00000000), SS8(0xfe8d1970), SS8(0xee979f00), SS8(0x11686100), SS8(0x0172e690), SS8(0xfff5bd1a), SS8(0xfdf1c8d4), SS8(0xeac182c0), SS8(0x0d9daee0), SS8(0x00e530da), SS8(0xffe9811d), SS8(0xfd52986c), SS8(0xe7054ca0), SS8(0x0a00d410), SS8(0x006c1de4), SS8(0xffdba705), SS8(0xfcbc98e8), SS8(0xe3889d20), SS8(0x06af2308), SS8(0x000bb7db), SS8(0xffca00ed), SS8(0xfc3fbb68), SS8(0xe071bc00), SS8(0x03bf7948), SS8(0xffc4e05c), SS8(0xffb54b3b), SS8(0xfbedadc0), SS8(0xdde26200), SS8(0x0142291c), SS8(0xff960e94), SS8(0xff9f3e17), SS8(0xfbd8f358), SS8(0xdbf79400), SS8(0xff405e01), SS8(0xff7d4914), SS8(0xff8b1a31), SS8(0xfc1417b8), SS8(0xdac7bb40), SS8(0xfdbb828c), SS8(0xff762170) }; static const int32_t sbc_proto_8_80m1[] = { SS8(0xff7c272c), SS8(0xfcb02620), SS8(0xda612700), SS8(0xfcb02620), SS8(0xff7c272c), SS8(0xff762170), SS8(0xfdbb828c), SS8(0xdac7bb40), SS8(0xfc1417b8), SS8(0xff8b1a31), SS8(0xff7d4914), SS8(0xff405e01), SS8(0xdbf79400), SS8(0xfbd8f358), SS8(0xff9f3e17), SS8(0xff960e94), SS8(0x0142291c), SS8(0xdde26200), SS8(0xfbedadc0), SS8(0xffb54b3b), SS8(0xffc4e05c), SS8(0x03bf7948), SS8(0xe071bc00), SS8(0xfc3fbb68), SS8(0xffca00ed), SS8(0x000bb7db), SS8(0x06af2308), SS8(0xe3889d20), SS8(0xfcbc98e8), SS8(0xffdba705), SS8(0x006c1de4), SS8(0x0a00d410), SS8(0xe7054ca0), SS8(0xfd52986c), SS8(0xffe9811d), SS8(0x00e530da), SS8(0x0d9daee0), SS8(0xeac182c0), SS8(0xfdf1c8d4), SS8(0xfff5bd1a) }; static const int32_t _anamatrix8[8] = { SA8(0x3b20d780), SA8(0x187de2a0), SA8(0x3ec52f80), SA8(0x3536cc40), SA8(0x238e7680), SA8(0x0c7c5c20), SA8(0x2d413cc0), SA8(0x40000000) }; static const int32_t synmatrix4[8][4] = { { SN4(0x05a82798), SN4(0xfa57d868), SN4(0xfa57d868), SN4(0x05a82798) }, { SN4(0x030fbc54), SN4(0xf89be510), SN4(0x07641af0), SN4(0xfcf043ac) }, { SN4(0x00000000), SN4(0x00000000), SN4(0x00000000), SN4(0x00000000) }, { SN4(0xfcf043ac), SN4(0x07641af0), SN4(0xf89be510), SN4(0x030fbc54) }, { SN4(0xfa57d868), SN4(0x05a82798), SN4(0x05a82798), SN4(0xfa57d868) }, { SN4(0xf89be510), SN4(0xfcf043ac), SN4(0x030fbc54), SN4(0x07641af0) }, { SN4(0xf8000000), SN4(0xf8000000), SN4(0xf8000000), SN4(0xf8000000) }, { SN4(0xf89be510), SN4(0xfcf043ac), SN4(0x030fbc54), SN4(0x07641af0) } }; static const int32_t synmatrix8[16][8] = { { SN8(0x05a82798), SN8(0xfa57d868), SN8(0xfa57d868), SN8(0x05a82798), SN8(0x05a82798), SN8(0xfa57d868), SN8(0xfa57d868), SN8(0x05a82798) }, { SN8(0x0471ced0), SN8(0xf8275a10), SN8(0x018f8b84), SN8(0x06a6d988), SN8(0xf9592678), SN8(0xfe70747c), SN8(0x07d8a5f0), SN8(0xfb8e3130) }, { SN8(0x030fbc54), SN8(0xf89be510), SN8(0x07641af0), SN8(0xfcf043ac), SN8(0xfcf043ac), SN8(0x07641af0), SN8(0xf89be510), SN8(0x030fbc54) }, { SN8(0x018f8b84), SN8(0xfb8e3130), SN8(0x06a6d988), SN8(0xf8275a10), SN8(0x07d8a5f0), SN8(0xf9592678), SN8(0x0471ced0), SN8(0xfe70747c) }, { SN8(0x00000000), SN8(0x00000000), SN8(0x00000000), SN8(0x00000000), SN8(0x00000000), SN8(0x00000000), SN8(0x00000000), SN8(0x00000000) }, { SN8(0xfe70747c), SN8(0x0471ced0), SN8(0xf9592678), SN8(0x07d8a5f0), SN8(0xf8275a10), SN8(0x06a6d988), SN8(0xfb8e3130), SN8(0x018f8b84) }, { SN8(0xfcf043ac), SN8(0x07641af0), SN8(0xf89be510), SN8(0x030fbc54), SN8(0x030fbc54), SN8(0xf89be510), SN8(0x07641af0), SN8(0xfcf043ac) }, { SN8(0xfb8e3130), SN8(0x07d8a5f0), SN8(0xfe70747c), SN8(0xf9592678), SN8(0x06a6d988), SN8(0x018f8b84), SN8(0xf8275a10), SN8(0x0471ced0) }, { SN8(0xfa57d868), SN8(0x05a82798), SN8(0x05a82798), SN8(0xfa57d868), SN8(0xfa57d868), SN8(0x05a82798), SN8(0x05a82798), SN8(0xfa57d868) }, { SN8(0xf9592678), SN8(0x018f8b84), SN8(0x07d8a5f0), SN8(0x0471ced0), SN8(0xfb8e3130), SN8(0xf8275a10), SN8(0xfe70747c), SN8(0x06a6d988) }, { SN8(0xf89be510), SN8(0xfcf043ac), SN8(0x030fbc54), SN8(0x07641af0), SN8(0x07641af0), SN8(0x030fbc54), SN8(0xfcf043ac), SN8(0xf89be510) }, { SN8(0xf8275a10), SN8(0xf9592678), SN8(0xfb8e3130), SN8(0xfe70747c), SN8(0x018f8b84), SN8(0x0471ced0), SN8(0x06a6d988), SN8(0x07d8a5f0) }, { SN8(0xf8000000), SN8(0xf8000000), SN8(0xf8000000), SN8(0xf8000000), SN8(0xf8000000), SN8(0xf8000000), SN8(0xf8000000), SN8(0xf8000000) }, { SN8(0xf8275a10), SN8(0xf9592678), SN8(0xfb8e3130), SN8(0xfe70747c), SN8(0x018f8b84), SN8(0x0471ced0), SN8(0x06a6d988), SN8(0x07d8a5f0) }, { SN8(0xf89be510), SN8(0xfcf043ac), SN8(0x030fbc54), SN8(0x07641af0), SN8(0x07641af0), SN8(0x030fbc54), SN8(0xfcf043ac), SN8(0xf89be510) }, { SN8(0xf9592678), SN8(0x018f8b84), SN8(0x07d8a5f0), SN8(0x0471ced0), SN8(0xfb8e3130), SN8(0xf8275a10), SN8(0xfe70747c), SN8(0x06a6d988) } }; h323plus/plugins/audio/G722/0000755000175000017500000000000011376323211014311 5ustar markmarkh323plus/plugins/audio/G722/Makefile.in0000644000175000017500000000423011341106231016346 0ustar markmark# # Makefile for G.722 codec plugin # # Copyright (C) 2008 Vox Lucida Pty. Ltd., All Rights Reserved # # The contents of this file are subject to the Mozilla Public License # Version 1.0 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is Open Phone Abstraction Library. # # The Initial Developer of the Original Code is Robert Jongbloed # # Contributor(s): ______________________________________. # # $Revision: 1.1 $ # $Author: shorne $ # $Date: 2010/02/24 02:19:05 $ # AC_PLUGIN_DIR=@AC_PLUGIN_DIR@ prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ target_os=@target_os@ SONAME = g722 STDCCFLAGS += @STDCCFLAGS@ -fPIC SRCDIR = ./VoIPCodecs OBJDIR = ./obj PLUGINDIR=../.. CC =@CC@ CXX =@CXX@ LDSO =@LDSO@ PLUGINEXT =@PLUGINEXT@ STDCCFLAGS =@STDCCFLAGS@ LDFLAGS =@LDFLAGS@ EXTRACFLAGS =-I$(PLUGINDIR) SRCS += g722codec.c \ $(SRCDIR)/g722_encode.c \ $(SRCDIR)/g722_decode.c \ $(SRCDIR)/bitstream.c vpath %.o $(OBJDIR) vpath %.c $(SRCDIR) ifeq ($(VERBOSE),) Q_CC = @echo [CC] `echo $< | sed s^@OPALDIR@/^^` ; Q_LD = @echo [LD] `echo $(PLUGIN) | sed s^@OPALDIR@/^^` ; endif $(OBJDIR)/%.o : %.c @mkdir -p $(OBJDIR) >/dev/null 2>&1 $(Q_CC)$(CC) -I../../../include $(STDCCFLAGS) $(OPTCCFLAGS) $(EXTRACFLAGS) $(CFLAGS) -c $< -o $@ PLUGIN = ./g722_audio_pwplugin.$(PLUGINEXT) OBJECTS = $(addprefix $(OBJDIR)/,$(patsubst %.c,%.o,$(notdir $(SRCS)))) all: $(PLUGIN) $(PLUGIN): $(OBJECTS) ifeq (solaris,$(findstring solaris,$(target_os))) $(Q_LD)$(CC) $(LDSO) $@ -o $@ $^ $(EXTRALIBS) else $(Q_LD)$(CC) $(LDSO) -o $@ $^ $(EXTRALIBS) endif install: mkdir -p $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR) install $(PLUGIN) $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR) uninstall: rm -f $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR)/$(PLUGIN) clean: rm -f $(OBJECTS) $(PLUGIN) ########################################### h323plus/plugins/audio/G722/VoIPCodecs/0000755000175000017500000000000011341106231016240 5ustar markmarkh323plus/plugins/audio/G722/VoIPCodecs/dc_restore.h0000644000175000017500000001017111341106231020542 0ustar markmark/* * VoIPcodecs - a series of DSP components for telephony * * dc_restore.h - General telephony routines to restore the zero D.C. * level to audio which has a D.C. bias. * * Written by Steve Underwood * * Copyright (C) 2001 Steve Underwood * * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Id: dc_restore.h,v 1.1 2010/02/24 02:19:05 shorne Exp $ */ /*! \file */ #if !defined(_SPANDSP_DC_RESTORE_H_) #define _SPANDSP_DC_RESTORE_H_ /*! \page dc_restore_page Removing DC bias from a signal \section dc_restore_page_sec_1 What does it do? Telecoms signals often contain considerable DC, but DC upsets a lot of signal processing functions. Placing a zero DC restorer at the front of the processing chain can often simplify the downstream processing. \section dc_restore_page_sec_2 How does it work? The DC restorer uses a leaky integrator to provide a long-ish term estimate of the DC bias in the signal. A 32 bit estimate is used for the 16 bit audio, so the noise introduced by the estimation can be keep in the lower bits, and the 16 bit DC value, which is subtracted from the signal, is fairly clean. The following code fragment shows the algorithm used. dc_bias is a 32 bit integer, while the sample and the resulting clean_sample are 16 bit integers. dc_bias += ((((int32_t) sample << 15) - dc_bias) >> 14); clean_sample = sample - (dc_bias >> 15); */ /*! Zero DC restoration descriptor. This defines the working state for a single instance of DC content filter. */ typedef struct { int32_t state; } dc_restore_state_t; #if defined(__cplusplus) extern "C" { #endif static __inline__ void dc_restore_init(dc_restore_state_t *dc) { dc->state = 0; } /*- End of function --------------------------------------------------------*/ static __inline__ int16_t dc_restore(dc_restore_state_t *dc, int16_t sample) { dc->state += ((((int32_t) sample << 15) - dc->state) >> 14); return (int16_t) (sample - (dc->state >> 15)); } /*- End of function --------------------------------------------------------*/ static __inline__ int16_t dc_restore_estimate(dc_restore_state_t *dc) { return (int16_t) (dc->state >> 15); } /*- End of function --------------------------------------------------------*/ static __inline__ int16_t saturate(int32_t amp) { int16_t amp16; /* Hopefully this is optimised for the common case - not clipping */ amp16 = (int16_t) amp; if (amp == amp16) return amp16; if (amp > INT16_MAX) return INT16_MAX; return INT16_MIN; } /*- End of function --------------------------------------------------------*/ #ifdef _MSC_VER __inline float rintf (float flt) { _asm { fld flt frndint } } __inline double rint(double dbl) { __asm { fld dbl frndint } } __inline long lrintf (float flt) { long retval; _asm { fld flt fistp retval } return retval; } #endif static __inline__ int16_t fsaturatef(float famp) { if (famp > 32767.0) return INT16_MAX; if (famp < -32768.0) return INT16_MIN; return (int16_t) rintf(famp); } /*- End of function --------------------------------------------------------*/ static __inline__ int16_t fsaturate(double damp) { if (damp > 32767.0) return INT16_MAX; if (damp < -32768.0) return INT16_MIN; return (int16_t) rint(damp); } /*- End of function --------------------------------------------------------*/ #if defined(__cplusplus) } #endif #endif /*- End of file ------------------------------------------------------------*/ h323plus/plugins/audio/G722/VoIPCodecs/inttypes.h0000644000175000017500000000421011341106231020265 0ustar markmark/* * SpanDSP - a series of DSP components for telephony * * inttypes.h - a fudge for MSVC, which lacks this header * * Written by Steve Underwood * * Copyright (C) 2006 Michael Jerris * * * This file is released in the public domain. * */ #if !defined(_INTTYPES_H_) #define _INTTYPES_H_ #ifdef __cplusplus extern "C" { #endif #ifdef _MSC_VER #if (_MSC_VER >= 1400) // VC8+ #ifndef _CRT_SECURE_NO_DEPRECATE #define _CRT_SECURE_NO_DEPRECATE #endif #ifndef _CRT_NONSTDC_NO_DEPRECATE #define _CRT_NONSTDC_NO_DEPRECATE #endif #endif // VC8+ #include typedef unsigned __int8 uint8_t; typedef unsigned __int16 uint16_t; typedef unsigned __int32 uint32_t; typedef unsigned __int64 uint64_t; typedef __int8 int8_t; typedef __int16 int16_t; typedef __int32 int32_t; typedef __int64 int64_t; #define inline __inline #define __inline__ __inline #define INT16_MAX 0x7fff #define INT16_MIN (-INT16_MAX - 1) #define _MMX_H_ /* disable the following warnings * C4100: The formal parameter is not referenced in the body of the function. The unreferenced parameter is ignored. * C4200: Non standard extension C zero sized array * C4706: assignment within conditional expression * C4244: conversion from 'type1' to 'type2', possible loss of data * C4295: array is too small to include a terminating null character * C4125: decimal digit terminates octal escape sequence */ #pragma warning(disable:4100 4200 4706 4295 4125) #pragma comment(lib, "ws2_32.lib") #define strncasecmp _strnicmp #define strcasecmp _stricmp #define snprintf _snprintf #if !defined(INFINITY) #define INFINITY 0x7fffffff #endif #else #include #endif #define PACKAGE "voipcodecs" #define VERSION "0.0.1andabit" #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647 - 1) #endif #define PRId8 "d" #define PRId16 "d" #define PRId32 "ld" #define PRId64 "lld" #define PRIu8 "u" #define PRIu16 "u" #define PRIu32 "lu" #define PRIu64 "llu" #ifdef __cplusplus } #endif #endif // _INTTYPES_H_ h323plus/plugins/audio/G722/VoIPCodecs/bitstream.c0000644000175000017500000000741111341106231020401 0ustar markmark/* * VoIPcodecs - a series of DSP components for telephony * * bitstream.c - Bitstream composition and decomposition routines. * * Written by Steve Underwood * * Copyright (C) 2006 Steve Underwood * * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the Lesser Lesser GNU General Public License version 2.1.1, as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Id: bitstream.c,v 1.1 2010/02/24 02:19:05 shorne Exp $ */ /*! \file */ #ifdef HAVE_CONFIG_H #include #endif #include "inttypes.h" #include #include #include #include "telephony.h" #include "bitstream.h" void bitstream_put(bitstream_state_t *s, uint8_t **c, unsigned int value, int bits) { value &= ((1 << bits) - 1); if (s->residue + bits <= 32) { s->bitstream |= (value << s->residue); s->residue += bits; } while (s->residue >= 8) { s->residue -= 8; *(*c)++ = (uint8_t) (s->bitstream & 0xFF); s->bitstream >>= 8; } } /*- End of function --------------------------------------------------------*/ void bitstream_put2(bitstream_state_t *s, uint8_t **c, unsigned int value, int bits) { value &= ((1 << bits) - 1); if (s->residue + bits <= 32) { s->bitstream = (s->bitstream << bits) | value; s->residue += bits; } while (s->residue >= 8) { s->residue -= 8; *(*c)++ = (uint8_t) ((s->bitstream >> s->residue) & 0xFF); } } /*- End of function --------------------------------------------------------*/ unsigned int bitstream_get(bitstream_state_t *s, const uint8_t **c, int bits) { unsigned int x; while (s->residue < (unsigned int) bits) { x = (unsigned int) *(*c)++; s->bitstream |= (x << s->residue); s->residue += 8; } s->residue -= bits; x = s->bitstream & ((1 << bits) - 1); s->bitstream >>= bits; return x; } /*- End of function --------------------------------------------------------*/ unsigned int bitstream_get2(bitstream_state_t *s, const uint8_t **c, int bits) { unsigned int x; while (s->residue < (unsigned int) bits) { x = (unsigned int) *(*c)++; s->bitstream = (s->bitstream << 8) | x; s->residue += 8; } s->residue -= bits; x = (s->bitstream >> s->residue) & ((1 << bits) - 1); return x; } /*- End of function --------------------------------------------------------*/ void bitstream_flush(bitstream_state_t *s, uint8_t **c) { if (s->residue > 0) { *(*c)++ = (uint8_t) ((s->bitstream << (8 - s->residue)) & 0xFF); s->residue = 0; } } /*- End of function --------------------------------------------------------*/ void bitstream_flush2(bitstream_state_t *s, uint8_t **c) { if (s->residue > 0) { *(*c)++ = (uint8_t) ((s->bitstream << (8 - s->residue)) & 0xFF); s->residue = 0; } } /*- End of function --------------------------------------------------------*/ bitstream_state_t *bitstream_init(bitstream_state_t *s) { if (s == NULL) return NULL; s->bitstream = 0; s->residue = 0; return s; } /*- End of function --------------------------------------------------------*/ /*- End of file ------------------------------------------------------------*/ h323plus/plugins/audio/G722/VoIPCodecs/telephony.h0000644000175000017500000000450011341106231020417 0ustar markmark/* * VoIPcodecs - a series of DSP components for telephony * * telephony.h - some very basic telephony definitions * * Written by Steve Underwood * * Copyright (C) 2003 Steve Underwood * * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the Lesser GNU General Public License version 2.1, as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Id: telephony.h,v 1.1 2010/02/24 02:19:05 shorne Exp $ */ #if !defined(_SPANDSP_TELEPHONY_H_) #define _SPANDSP_TELEPHONY_H_ #define SAMPLE_RATE 8000 /* This is based on A-law, but u-law is only 0.03dB different */ #define DBM0_MAX_POWER (3.14f + 3.02f) #define DBM0_MAX_SINE_POWER (3.14f) /* This is based on the ITU definition of dbOv in G.100.1 */ #define DBOV_MAX_POWER (0.0f) #define DBOV_MAX_SINE_POWER (-3.02f) /*! \brief A handler for pure receive. The buffer cannot be altered. */ typedef int (span_rx_handler_t)(void *s, const int16_t amp[], int len); /*! \brief A handler for receive, where the buffer can be altered. */ typedef int (span_mod_handler_t)(void *s, int16_t amp[], int len); /*! \brief A handler for transmit, where the buffer will be filled. */ typedef int (span_tx_handler_t)(void *s, int16_t amp[], int max_len); #define ms_to_samples(t) (((t)*SAMPLE_RATE)/1000) #if !defined(FALSE) #define FALSE 0 #endif #if !defined(TRUE) #define TRUE (!FALSE) #endif #include #if (_MSC_VER >= 1400) // VC8+ #define vc_assert(expr) assert(expr);__analysis_assume( expr ) #else #define vc_assert(expr) assert(expr) #endif #if defined(__cplusplus) /* C++ doesn't seem to have sane rounding functions/macros yet */ #ifndef _MSC_VER #define lrint(x) ((long int) (x)) #define lrintf(x) ((long int) (x)) #endif #endif #endif /*- End of file ------------------------------------------------------------*/ h323plus/plugins/audio/G722/VoIPCodecs/g722_decode.c0000644000175000017500000002647611341106231020407 0ustar markmark/* * VoIPcodecs - a series of DSP components for telephony * * g722_decode.c - The ITU G.722 codec, decode part. * * Written by Steve Underwood * * Copyright (C) 2005 Steve Underwood * * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, or * the Lesser GNU General Public License version 2.1, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * Based in part on a single channel G.722 codec which is: * * Copyright (c) CMU 1993 * Computer Science, Speech Group * Chengxiang Lu and Alex Hauptmann * * $Id: g722_decode.c,v 1.1 2010/02/24 02:19:05 shorne Exp $ */ /*! \file */ #ifdef HAVE_CONFIG_H #include #endif #include "inttypes.h" #include #include #if defined(HAVE_TGMATH_H) #include #endif #include #include "telephony.h" #include "dc_restore.h" #include "g722.h" static void block4(g722_decode_state_t *s, int band, int d); static void block4(g722_decode_state_t *s, int band, int d) { int wd1; int wd2; int wd3; int i; /* Block 4, RECONS */ s->band[band].d[0] = d; s->band[band].r[0] = saturate(s->band[band].s + d); /* Block 4, PARREC */ s->band[band].p[0] = saturate(s->band[band].sz + d); /* Block 4, UPPOL2 */ for (i = 0; i < 3; i++) s->band[band].sg[i] = s->band[band].p[i] >> 15; wd1 = saturate(s->band[band].a[1] << 2); wd2 = (s->band[band].sg[0] == s->band[band].sg[1]) ? -wd1 : wd1; if (wd2 > 32767) wd2 = 32767; wd3 = (s->band[band].sg[0] == s->band[band].sg[2]) ? 128 : -128; wd3 += (wd2 >> 7); wd3 += (s->band[band].a[2]*32512) >> 15; if (wd3 > 12288) wd3 = 12288; else if (wd3 < -12288) wd3 = -12288; s->band[band].ap[2] = wd3; /* Block 4, UPPOL1 */ s->band[band].sg[0] = s->band[band].p[0] >> 15; s->band[band].sg[1] = s->band[band].p[1] >> 15; wd1 = (s->band[band].sg[0] == s->band[band].sg[1]) ? 192 : -192; wd2 = (s->band[band].a[1]*32640) >> 15; s->band[band].ap[1] = saturate(wd1 + wd2); wd3 = saturate(15360 - s->band[band].ap[2]); if (s->band[band].ap[1] > wd3) s->band[band].ap[1] = wd3; else if (s->band[band].ap[1] < -wd3) s->band[band].ap[1] = -wd3; /* Block 4, UPZERO */ wd1 = (d == 0) ? 0 : 128; s->band[band].sg[0] = d >> 15; for (i = 1; i < 7; i++) { s->band[band].sg[i] = s->band[band].d[i] >> 15; wd2 = (s->band[band].sg[i] == s->band[band].sg[0]) ? wd1 : -wd1; wd3 = (s->band[band].b[i]*32640) >> 15; s->band[band].bp[i] = saturate(wd2 + wd3); } /* Block 4, DELAYA */ for (i = 6; i > 0; i--) { s->band[band].d[i] = s->band[band].d[i - 1]; s->band[band].b[i] = s->band[band].bp[i]; } for (i = 2; i > 0; i--) { s->band[band].r[i] = s->band[band].r[i - 1]; s->band[band].p[i] = s->band[band].p[i - 1]; s->band[band].a[i] = s->band[band].ap[i]; } /* Block 4, FILTEP */ wd1 = saturate(s->band[band].r[1] + s->band[band].r[1]); wd1 = (s->band[band].a[1]*wd1) >> 15; wd2 = saturate(s->band[band].r[2] + s->band[band].r[2]); wd2 = (s->band[band].a[2]*wd2) >> 15; s->band[band].sp = saturate(wd1 + wd2); /* Block 4, FILTEZ */ s->band[band].sz = 0; for (i = 6; i > 0; i--) { wd1 = saturate(s->band[band].d[i] + s->band[band].d[i]); s->band[band].sz += (s->band[band].b[i]*wd1) >> 15; } s->band[band].sz = saturate(s->band[band].sz); /* Block 4, PREDIC */ s->band[band].s = saturate(s->band[band].sp + s->band[band].sz); } /*- End of function --------------------------------------------------------*/ g722_decode_state_t *g722_decode_init(g722_decode_state_t *s, int rate, int options) { if (s == NULL) { if ((s = (g722_decode_state_t *) malloc(sizeof(*s))) == NULL) return NULL; } memset(s, 0, sizeof(*s)); if (rate == 48000) s->bits_per_sample = 6; else if (rate == 56000) s->bits_per_sample = 7; else s->bits_per_sample = 8; if ((options & G722_SAMPLE_RATE_8000)) s->eight_k = TRUE; if ((options & G722_PACKED) && s->bits_per_sample != 8) s->packed = TRUE; else s->packed = FALSE; s->band[0].det = 32; s->band[1].det = 8; return s; } /*- End of function --------------------------------------------------------*/ int g722_decode_release(g722_decode_state_t *s) { free(s); return 0; } /*- End of function --------------------------------------------------------*/ int g722_decode(g722_decode_state_t *s, int16_t amp[], const uint8_t g722_data[], int len) { static const int wl[8] = { -60, -30, 58, 172, 334, 538, 1198, 3042 }; static const int rl42[16] = { 0, 7, 6, 5, 4, 3, 2, 1, 7, 6, 5, 4, 3, 2, 1, 0 }; static const int ilb[32] = { 2048, 2093, 2139, 2186, 2233, 2282, 2332, 2383, 2435, 2489, 2543, 2599, 2656, 2714, 2774, 2834, 2896, 2960, 3025, 3091, 3158, 3228, 3298, 3371, 3444, 3520, 3597, 3676, 3756, 3838, 3922, 4008 }; static const int wh[3] = { 0, -214, 798 }; static const int rh2[4] = { 2, 1, 2, 1 }; static const int qm2[4] = { -7408, -1616, 7408, 1616 }; static const int qm4[16] = { 0, -20456, -12896, -8968, -6288, -4240, -2584, -1200, 20456, 12896, 8968, 6288, 4240, 2584, 1200, 0 }; static const int qm5[32] = { -280, -280, -23352, -17560, -14120, -11664, -9752, -8184, -6864, -5712, -4696, -3784, -2960, -2208, -1520, -880, 23352, 17560, 14120, 11664, 9752, 8184, 6864, 5712, 4696, 3784, 2960, 2208, 1520, 880, 280, -280 }; static const int qm6[64] = { -136, -136, -136, -136, -24808, -21904, -19008, -16704, -14984, -13512, -12280, -11192, -10232, -9360, -8576, -7856, -7192, -6576, -6000, -5456, -4944, -4464, -4008, -3576, -3168, -2776, -2400, -2032, -1688, -1360, -1040, -728, 24808, 21904, 19008, 16704, 14984, 13512, 12280, 11192, 10232, 9360, 8576, 7856, 7192, 6576, 6000, 5456, 4944, 4464, 4008, 3576, 3168, 2776, 2400, 2032, 1688, 1360, 1040, 728, 432, 136, -432, -136 }; static const int qmf_coeffs[12] = { 3, -11, 12, 32, -210, 951, 3876, -805, 362, -156, 53, -11, }; int dlowt; int rlow; int ihigh; int dhigh; int rhigh; int xout1; int xout2; int wd1; int wd2; int wd3; int code; int outlen; int i; int j; outlen = 0; rhigh = 0; for (j = 0; j < len; ) { if (s->packed) { /* Unpack the code bits */ if (s->in_bits < s->bits_per_sample) { s->in_buffer |= (g722_data[j++] << s->in_bits); s->in_bits += 8; } code = s->in_buffer & ((1 << s->bits_per_sample) - 1); s->in_buffer >>= s->bits_per_sample; s->in_bits -= s->bits_per_sample; } else { code = g722_data[j++]; } switch (s->bits_per_sample) { default: case 8: wd1 = code & 0x3F; ihigh = (code >> 6) & 0x03; wd2 = qm6[wd1]; wd1 >>= 2; break; case 7: wd1 = code & 0x1F; ihigh = (code >> 5) & 0x03; wd2 = qm5[wd1]; wd1 >>= 1; break; case 6: wd1 = code & 0x0F; ihigh = (code >> 4) & 0x03; wd2 = qm4[wd1]; break; } /* Block 5L, LOW BAND INVQBL */ wd2 = (s->band[0].det*wd2) >> 15; /* Block 5L, RECONS */ rlow = s->band[0].s + wd2; /* Block 6L, LIMIT */ if (rlow > 16383) rlow = 16383; else if (rlow < -16384) rlow = -16384; /* Block 2L, INVQAL */ wd2 = qm4[wd1]; dlowt = (s->band[0].det*wd2) >> 15; /* Block 3L, LOGSCL */ wd2 = rl42[wd1]; wd1 = (s->band[0].nb*127) >> 7; wd1 += wl[wd2]; if (wd1 < 0) wd1 = 0; else if (wd1 > 18432) wd1 = 18432; s->band[0].nb = wd1; /* Block 3L, SCALEL */ wd1 = (s->band[0].nb >> 6) & 31; wd2 = 8 - (s->band[0].nb >> 11); wd3 = (wd2 < 0) ? (ilb[wd1] << -wd2) : (ilb[wd1] >> wd2); s->band[0].det = wd3 << 2; block4(s, 0, dlowt); if (!s->eight_k) { /* Block 2H, INVQAH */ wd2 = qm2[ihigh]; dhigh = (s->band[1].det*wd2) >> 15; /* Block 5H, RECONS */ rhigh = dhigh + s->band[1].s; /* Block 6H, LIMIT */ if (rhigh > 16383) rhigh = 16383; else if (rhigh < -16384) rhigh = -16384; /* Block 2H, INVQAH */ wd2 = rh2[ihigh]; wd1 = (s->band[1].nb*127) >> 7; wd1 += wh[wd2]; if (wd1 < 0) wd1 = 0; else if (wd1 > 22528) wd1 = 22528; s->band[1].nb = wd1; /* Block 3H, SCALEH */ wd1 = (s->band[1].nb >> 6) & 31; wd2 = 10 - (s->band[1].nb >> 11); wd3 = (wd2 < 0) ? (ilb[wd1] << -wd2) : (ilb[wd1] >> wd2); s->band[1].det = wd3 << 2; block4(s, 1, dhigh); } if (s->itu_test_mode) { amp[outlen++] = (int16_t) (rlow << 1); amp[outlen++] = (int16_t) (rhigh << 1); } else { if (s->eight_k) { amp[outlen++] = (int16_t) rlow; } else { /* Apply the receive QMF */ memcpy(s->x, &s->x[2], 22*sizeof(s->x[0])); s->x[22] = rlow + rhigh; s->x[23] = rlow - rhigh; xout1 = 0; xout2 = 0; for (i = 0; i < 12; i++) { xout2 += s->x[2*i]*qmf_coeffs[i]; xout1 += s->x[2*i + 1]*qmf_coeffs[11 - i]; } amp[outlen++] = (int16_t) (xout1 >> 12); amp[outlen++] = (int16_t) (xout2 >> 12); } } } return outlen; } /*- End of function --------------------------------------------------------*/ /*- End of file ------------------------------------------------------------*/ h323plus/plugins/audio/G722/VoIPCodecs/bitstream.h0000644000175000017500000000565511341106231020416 0ustar markmark/* * VoIPcodecs - a series of DSP components for telephony * * bitstream.h - Bitstream composition and decomposition routines. * * Written by Steve Underwood * * Copyright (C) 2006 Steve Underwood * * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the Lesser GNU General Public License version 2.1, as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Id: bitstream.h,v 1.1 2010/02/24 02:19:05 shorne Exp $ */ /*! \file */ #if !defined(_SPANDSP_BITSTREAM_H_) #define _SPANDSP_BITSTREAM_H_ /*! \page bitstream_page Bitstream composition and decomposition \section bitstream_page_sec_1 What does it do? \section bitstream_page_sec_2 How does it work? */ /*! Bitstream handler state */ typedef struct { /*! The bit stream. */ unsigned int bitstream; /*! The residual bits in bitstream. */ unsigned int residue; } bitstream_state_t; #if defined(__cplusplus) extern "C" { #endif /*! \brief Put a chunk of bits into the output buffer. \param s A pointer to the bitstream context. \param c A pointer to the bitstream output buffer. \param value The value to be pushed into the output buffer. \param bits The number of bits of value to be pushed. 1 to 25 bit is valid. */ void bitstream_put(bitstream_state_t *s, uint8_t **c, unsigned int value, int bits); void bitstream_put2(bitstream_state_t *s, uint8_t **c, unsigned int value, int bits); /*! \brief Get a chunk of bits from the input buffer. \param s A pointer to the bitstream context. \param c A pointer to the bitstream input buffer. \param bits The number of bits of value to be grabbed. 1 to 25 bit is valid. \return The value retrieved from the input buffer. */ unsigned int bitstream_get(bitstream_state_t *s, const uint8_t **c, int bits); unsigned int bitstream_get2(bitstream_state_t *s, const uint8_t **c, int bits); /*! \brief Flush any residual bit to the output buffer. \param s A pointer to the bitstream context. \param c A pointer to the bitstream output buffer. */ void bitstream_flush(bitstream_state_t *s, uint8_t **c); void bitstream_flush2(bitstream_state_t *s, uint8_t **c); /*! \brief Initialise a bitstream context. \param s A pointer to the bitstream context. \return A pointer to the bitstream context. */ bitstream_state_t *bitstream_init(bitstream_state_t *s); #if defined(__cplusplus) } #endif #endif /*- End of file ------------------------------------------------------------*/ h323plus/plugins/audio/G722/VoIPCodecs/g722_encode.c0000644000175000017500000002577611341106231020423 0ustar markmark/* * VoIPcodecs - a series of DSP components for telephony * * g722_encode.c - The ITU G.722 codec, encode part. * * Written by Steve Underwood * * Copyright (C) 2005 Steve Underwood * * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, or * the Lesser GNU General Public License version 2.1, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * Based on a single channel 64kbps only G.722 codec which is: * ***** Copyright (c) CMU 1993 ***** * Computer Science, Speech Group * Chengxiang Lu and Alex Hauptmann * * $Id: g722_encode.c,v 1.1 2010/02/24 02:19:05 shorne Exp $ */ /*! \file */ #ifdef HAVE_CONFIG_H #include #endif #include "inttypes.h" #include #include #if defined(HAVE_TGMATH_H) #include #endif #include #include "telephony.h" #include "dc_restore.h" #include "g722.h" static void block4(g722_encode_state_t *s, int band, int d) { int wd1; int wd2; int wd3; int i; /* Block 4, RECONS */ s->band[band].d[0] = d; s->band[band].r[0] = saturate(s->band[band].s + d); /* Block 4, PARREC */ s->band[band].p[0] = saturate(s->band[band].sz + d); /* Block 4, UPPOL2 */ for (i = 0; i < 3; i++) s->band[band].sg[i] = s->band[band].p[i] >> 15; wd1 = saturate(s->band[band].a[1] << 2); wd2 = (s->band[band].sg[0] == s->band[band].sg[1]) ? -wd1 : wd1; if (wd2 > 32767) wd2 = 32767; wd3 = (wd2 >> 7) + ((s->band[band].sg[0] == s->band[band].sg[2]) ? 128 : -128); wd3 += (s->band[band].a[2]*32512) >> 15; if (wd3 > 12288) wd3 = 12288; else if (wd3 < -12288) wd3 = -12288; s->band[band].ap[2] = wd3; /* Block 4, UPPOL1 */ s->band[band].sg[0] = s->band[band].p[0] >> 15; s->band[band].sg[1] = s->band[band].p[1] >> 15; wd1 = (s->band[band].sg[0] == s->band[band].sg[1]) ? 192 : -192; wd2 = (s->band[band].a[1]*32640) >> 15; s->band[band].ap[1] = saturate(wd1 + wd2); wd3 = saturate(15360 - s->band[band].ap[2]); if (s->band[band].ap[1] > wd3) s->band[band].ap[1] = wd3; else if (s->band[band].ap[1] < -wd3) s->band[band].ap[1] = -wd3; /* Block 4, UPZERO */ wd1 = (d == 0) ? 0 : 128; s->band[band].sg[0] = d >> 15; for (i = 1; i < 7; i++) { s->band[band].sg[i] = s->band[band].d[i] >> 15; wd2 = (s->band[band].sg[i] == s->band[band].sg[0]) ? wd1 : -wd1; wd3 = (s->band[band].b[i]*32640) >> 15; s->band[band].bp[i] = saturate(wd2 + wd3); } /* Block 4, DELAYA */ for (i = 6; i > 0; i--) { s->band[band].d[i] = s->band[band].d[i - 1]; s->band[band].b[i] = s->band[band].bp[i]; } for (i = 2; i > 0; i--) { s->band[band].r[i] = s->band[band].r[i - 1]; s->band[band].p[i] = s->band[band].p[i - 1]; s->band[band].a[i] = s->band[band].ap[i]; } /* Block 4, FILTEP */ wd1 = saturate(s->band[band].r[1] + s->band[band].r[1]); wd1 = (s->band[band].a[1]*wd1) >> 15; wd2 = saturate(s->band[band].r[2] + s->band[band].r[2]); wd2 = (s->band[band].a[2]*wd2) >> 15; s->band[band].sp = saturate(wd1 + wd2); /* Block 4, FILTEZ */ s->band[band].sz = 0; for (i = 6; i > 0; i--) { wd1 = saturate(s->band[band].d[i] + s->band[band].d[i]); s->band[band].sz += (s->band[band].b[i]*wd1) >> 15; } s->band[band].sz = saturate(s->band[band].sz); /* Block 4, PREDIC */ s->band[band].s = saturate(s->band[band].sp + s->band[band].sz); } /*- End of function --------------------------------------------------------*/ g722_encode_state_t *g722_encode_init(g722_encode_state_t *s, int rate, int options) { if (s == NULL) { if ((s = (g722_encode_state_t *) malloc(sizeof(*s))) == NULL) return NULL; } memset(s, 0, sizeof(*s)); if (rate == 48000) s->bits_per_sample = 6; else if (rate == 56000) s->bits_per_sample = 7; else s->bits_per_sample = 8; if ((options & G722_SAMPLE_RATE_8000)) s->eight_k = TRUE; if ((options & G722_PACKED) && s->bits_per_sample != 8) s->packed = TRUE; else s->packed = FALSE; s->band[0].det = 32; s->band[1].det = 8; return s; } /*- End of function --------------------------------------------------------*/ int g722_encode_release(g722_encode_state_t *s) { free(s); return 0; } /*- End of function --------------------------------------------------------*/ int g722_encode(g722_encode_state_t *s, uint8_t g722_data[], const int16_t amp[], int len) { static const int q6[32] = { 0, 35, 72, 110, 150, 190, 233, 276, 323, 370, 422, 473, 530, 587, 650, 714, 786, 858, 940, 1023, 1121, 1219, 1339, 1458, 1612, 1765, 1980, 2195, 2557, 2919, 0, 0 }; static const int iln[32] = { 0, 63, 62, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 0 }; static const int ilp[32] = { 0, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 0 }; static const int wl[8] = { -60, -30, 58, 172, 334, 538, 1198, 3042 }; static const int rl42[16] = { 0, 7, 6, 5, 4, 3, 2, 1, 7, 6, 5, 4, 3, 2, 1, 0 }; static const int ilb[32] = { 2048, 2093, 2139, 2186, 2233, 2282, 2332, 2383, 2435, 2489, 2543, 2599, 2656, 2714, 2774, 2834, 2896, 2960, 3025, 3091, 3158, 3228, 3298, 3371, 3444, 3520, 3597, 3676, 3756, 3838, 3922, 4008 }; static const int qm4[16] = { 0, -20456, -12896, -8968, -6288, -4240, -2584, -1200, 20456, 12896, 8968, 6288, 4240, 2584, 1200, 0 }; static const int qm2[4] = { -7408, -1616, 7408, 1616 }; static const int qmf_coeffs[12] = { 3, -11, 12, 32, -210, 951, 3876, -805, 362, -156, 53, -11, }; static const int ihn[3] = {0, 1, 0}; static const int ihp[3] = {0, 3, 2}; static const int wh[3] = {0, -214, 798}; static const int rh2[4] = {2, 1, 2, 1}; int dlow; int dhigh; int el; int wd; int wd1; int ril; int wd2; int il4; int ih2; int wd3; int eh; int mih; int i; int j; /* Low and high band PCM from the QMF */ int xlow; int xhigh; int g722_bytes; /* Even and odd tap accumulators */ int sumeven; int sumodd; int ihigh; int ilow; int code; g722_bytes = 0; xhigh = 0; for (j = 0; j < len; ) { if (s->itu_test_mode) { xlow = xhigh = amp[j++] >> 1; } else { if (s->eight_k) { xlow = amp[j++]; } else { /* Apply the transmit QMF */ /* Shuffle the buffer down */ memcpy(s->x, &s->x[2], 22*sizeof(s->x[0])); s->x[22] = amp[j++]; s->x[23] = amp[j++]; /* Discard every other QMF output */ sumeven = 0; sumodd = 0; for (i = 0; i < 12; i++) { sumodd += s->x[2*i]*qmf_coeffs[i]; sumeven += s->x[2*i + 1]*qmf_coeffs[11 - i]; } xlow = (sumeven + sumodd) >> 13; xhigh = (sumeven - sumodd) >> 13; } } /* Block 1L, SUBTRA */ el = saturate(xlow - s->band[0].s); /* Block 1L, QUANTL */ wd = (el >= 0) ? el : -(el + 1); for (i = 1; i < 30; i++) { wd1 = (q6[i]*s->band[0].det) >> 12; if (wd < wd1) break; } ilow = (el < 0) ? iln[i] : ilp[i]; /* Block 2L, INVQAL */ ril = ilow >> 2; wd2 = qm4[ril]; dlow = (s->band[0].det*wd2) >> 15; /* Block 3L, LOGSCL */ il4 = rl42[ril]; wd = (s->band[0].nb*127) >> 7; s->band[0].nb = wd + wl[il4]; if (s->band[0].nb < 0) s->band[0].nb = 0; else if (s->band[0].nb > 18432) s->band[0].nb = 18432; /* Block 3L, SCALEL */ wd1 = (s->band[0].nb >> 6) & 31; wd2 = 8 - (s->band[0].nb >> 11); wd3 = (wd2 < 0) ? (ilb[wd1] << -wd2) : (ilb[wd1] >> wd2); s->band[0].det = wd3 << 2; block4(s, 0, dlow); if (s->eight_k) { /* Just leave the high bits as zero */ code = (0xC0 | ilow) >> (8 - s->bits_per_sample); } else { /* Block 1H, SUBTRA */ eh = saturate(xhigh - s->band[1].s); /* Block 1H, QUANTH */ wd = (eh >= 0) ? eh : -(eh + 1); wd1 = (564*s->band[1].det) >> 12; mih = (wd >= wd1) ? 2 : 1; ihigh = (eh < 0) ? ihn[mih] : ihp[mih]; /* Block 2H, INVQAH */ wd2 = qm2[ihigh]; dhigh = (s->band[1].det*wd2) >> 15; /* Block 3H, LOGSCH */ ih2 = rh2[ihigh]; wd = (s->band[1].nb*127) >> 7; s->band[1].nb = wd + wh[ih2]; if (s->band[1].nb < 0) s->band[1].nb = 0; else if (s->band[1].nb > 22528) s->band[1].nb = 22528; /* Block 3H, SCALEH */ wd1 = (s->band[1].nb >> 6) & 31; wd2 = 10 - (s->band[1].nb >> 11); wd3 = (wd2 < 0) ? (ilb[wd1] << -wd2) : (ilb[wd1] >> wd2); s->band[1].det = wd3 << 2; block4(s, 1, dhigh); code = ((ihigh << 6) | ilow) >> (8 - s->bits_per_sample); } if (s->packed) { /* Pack the code bits */ s->out_buffer |= (code << s->out_bits); s->out_bits += s->bits_per_sample; if (s->out_bits >= 8) { g722_data[g722_bytes++] = (uint8_t) (s->out_buffer & 0xFF); s->out_bits -= 8; s->out_buffer >>= 8; } } else { g722_data[g722_bytes++] = (uint8_t) code; } } return g722_bytes; } /*- End of function --------------------------------------------------------*/ /*- End of file ------------------------------------------------------------*/ h323plus/plugins/audio/G722/VoIPCodecs/g722.h0000644000175000017500000001175311341106231017101 0ustar markmark/* * VoIPcodecs - a series of DSP components for telephony * * g722.h - The ITU G.722 codec. * * Written by Steve Underwood * * Copyright (C) 2005 Steve Underwood * * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, or * the Lesser GNU General Public License version 2.1, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * Based on a single channel G.722 codec which is: * ***** Copyright (c) CMU 1993 ***** * Computer Science, Speech Group * Chengxiang Lu and Alex Hauptmann * * $Id: g722.h,v 1.1 2010/02/24 02:19:05 shorne Exp $ */ /*! \file */ #if !defined(_SPANDSP_G722_H_) #define _SPANDSP_G722_H_ #include "inttypes.h" /*! \page g722_page G.722 encoding and decoding \section g722_page_sec_1 What does it do? The G.722 module is a bit exact implementation of the ITU G.722 specification for all three specified bit rates - 64000bps, 56000bps and 48000bps. It passes the ITU tests. To allow fast and flexible interworking with narrow band telephony, the encoder and decoder support an option for the linear audio to be an 8k samples/second stream. In this mode the codec is considerably faster, and still fully compatible with wideband terminals using G.722. \section g722_page_sec_2 How does it work? ???. */ enum { G722_SAMPLE_RATE_8000 = 0x0001, G722_PACKED = 0x0002 }; typedef struct { /*! TRUE if the operating in the special ITU test mode, with the band split filters disabled. */ int itu_test_mode; /*! TRUE if the G.722 data is packed */ int packed; /*! TRUE if encode from 8k samples/second */ int eight_k; /*! 6 for 48000kbps, 7 for 56000kbps, or 8 for 64000kbps. */ int bits_per_sample; /*! Signal history for the QMF */ int x[24]; struct { int s; int sp; int sz; int r[3]; int a[3]; int ap[3]; int p[3]; int d[7]; int b[7]; int bp[7]; int sg[7]; int nb; int det; } band[2]; unsigned int in_buffer; int in_bits; unsigned int out_buffer; int out_bits; } g722_encode_state_t; typedef struct { /*! TRUE if the operating in the special ITU test mode, with the band split filters disabled. */ int itu_test_mode; /*! TRUE if the G.722 data is packed */ int packed; /*! TRUE if decode to 8k samples/second */ int eight_k; /*! 6 for 48000kbps, 7 for 56000kbps, or 8 for 64000kbps. */ int bits_per_sample; /*! Signal history for the QMF */ int x[24]; struct { int s; int sp; int sz; int r[3]; int a[3]; int ap[3]; int p[3]; int d[7]; int b[7]; int bp[7]; int sg[7]; int nb; int det; } band[2]; unsigned int in_buffer; int in_bits; unsigned int out_buffer; int out_bits; } g722_decode_state_t; #if defined(__cplusplus) extern "C" { #endif /*! Initialise an G.722 encode context. \param s The G.722 encode context. \param rate The required bit rate for the G.722 data. The valid rates are 64000, 56000 and 48000. \param options \return A pointer to the G.722 encode context, or NULL for error. */ g722_encode_state_t *g722_encode_init(g722_encode_state_t *s, int rate, int options); int g722_encode_release(g722_encode_state_t *s); /*! Encode a buffer of linear PCM data to G.722 \param s The G.722 context. \param g722_data The G.722 data produced. \param amp The audio sample buffer. \param len The number of samples in the buffer. \return The number of bytes of G.722 data produced. */ int g722_encode(g722_encode_state_t *s, uint8_t g722_data[], const int16_t amp[], int len); /*! Initialise an G.722 decode context. \param s The G.722 decode context. \param rate The bit rate of the G.722 data. The valid rates are 64000, 56000 and 48000. \param options \return A pointer to the G.722 decode context, or NULL for error. */ g722_decode_state_t *g722_decode_init(g722_decode_state_t *s, int rate, int options); int g722_decode_release(g722_decode_state_t *s); /*! Decode a buffer of G.722 data to linear PCM. \param s The G.722 context. \param amp The audio sample buffer. \param g722_data \param len \return The number of samples returned. */ int g722_decode(g722_decode_state_t *s, int16_t amp[], const uint8_t g722_data[], int len); #if defined(__cplusplus) } #endif #endif h323plus/plugins/audio/G722/g722codec.c0000644000175000017500000003020711376323211016136 0ustar markmark/* * G.722 Plugin codec for OpenH323/OPAL * * Copyright (C) 2008 by Hermon Labs, All Rights Reserved * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open Phone Abstraction Library. * * The Initial Developer of the Original Code is Eugene Mednikov * * Contributor(s): ______________________________________. * * $Revision: 1.2 $ * $Author: willamowius $ * $Date: 2010/05/23 22:04:57 $ */ #ifndef PLUGIN_CODEC_DLL_EXPORTS #include "plugin-config.h" #endif #include #include "VoIPCodecs/inttypes.h" #include "VoIPCodecs/g722.h" #define INCLUDE_SDP_16000_VERSION 0 /* Due to a spec error, clock rate is 8kHz even though this is 16kHz codec, see RFC3551/4.5.2. So some of these values have to be lied about so that the OPAL system gets it right. */ #define CLOCK_RATE 8000 // Clock rate is not samples/second in this case! #define BITS_PER_SECOND 64000 // raw bits per second #define FRAME_TIME 1000 // Microseconds in a millisecond #define SAMPLES_PER_FRAME 16 // Samples in a millisecond #define BYTES_PER_FRAME 8 // Bytes in a millisecond #define MAX_FRAMES_PER_PACKET 90 // 90 milliseconds, which means RTP packets smaller than 1500 bytes typical LAN maximum #define PREF_FRAMES_PER_PACKET 20 // 20 milliseconds // TODO: will never be loaded by H323Plus with this description! static const char L16Desc[] = "PCM-16-16kHz"; // Cannot use "L16" as usual, force 16kHz PCM static const char g722[] = "G.722-64k"; static const char sdpG722[] = "G722"; #if INCLUDE_SDP_16000_VERSION static const char g722_16[] = "G.722-16kHz"; #endif #define PAYLOAD_CODE 9 ///////////////////////////////////////////////////////////////////////////// static void * create_encoder(const struct PluginCodec_Definition * codec) { return g722_encode_init(NULL, BITS_PER_SECOND, 0); } static void destroy_encoder(const struct PluginCodec_Definition * codec, void * context) { g722_encode_release(context); } static int encode(const struct PluginCodec_Definition * codec, void * context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { g722_encode_state_t * state = context; if (*toLen < *fromLen / 4) return 0; // Destination buffer not big enough *toLen = g722_encode(state, to, from, *fromLen / 2); return 1; } ///////////////////////////////////////////////////////////////////////////// static void * create_decoder(const struct PluginCodec_Definition * codec) { return g722_decode_init(NULL, BITS_PER_SECOND, 0); } static void destroy_decoder(const struct PluginCodec_Definition * codec, void * context) { g722_decode_release(context); } static int decode(const struct PluginCodec_Definition * codec, void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { g722_decode_state_t * state = _context; if (*toLen < *fromLen * 4) return 0; // Destination buffer not big enough *toLen = g722_decode(state, to, from, *fromLen) * 2; return 1; } ///////////////////////////////////////////////////////////////////////////// static struct PluginCodec_information licenseInfo = { 1084181196, // timestamp = Mon 10 May 2004 09:26:36 AM UTC "Eugene Mednikov", // source code author "1.0", // source code version "em@hermonlabs.com", // source code email "http://www.hermonlabs.com", // source code URL "Copyright (C) 2008 by Hermon Labs, All Rights Reserved", // source code copyright "MPL 1.0", // source code license PluginCodec_License_MPL, // source code license "ITU G.722", // codec description "Steve Underwood", // codec author NULL, // codec version "steveu@coppice.org", // codec email NULL, // codec URL NULL, // codec copyright information NULL, // codec license PluginCodec_License_LGPL // codec license code }; ///////////////////////////////////////////////////////////////////////////// static struct PluginCodec_Definition g722CodecDefn[] = { #if INCLUDE_SDP_16000_VERSION // Include a version for SIP/SDP that indicates the more logical, though // incorrect by RFC3551/4.5.2, 16000Hz version of G.722. We use dynamic // payload types to avoid conflict with the compliant 8000Hz version. { // encoder PLUGIN_CODEC_VERSION_WIDEBAND, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic, // specified RTP type g722_16, // text decription L16Desc, // source format g722_16, // destination format 0, // user data 16000, // samples per second BITS_PER_SECOND, // raw bits per second FRAME_TIME, // microseconds per frame SAMPLES_PER_FRAME, // samples per frame BYTES_PER_FRAME, // bytes per frame PREF_FRAMES_PER_PACKET, // recommended number of frames per packet MAX_FRAMES_PER_PACKET, // maximum number of frames per packe PAYLOAD_CODE, // IANA RTP payload code sdpG722, // RTP payload name create_encoder, // create codec function destroy_encoder, // destroy codec encode, // encode/decode NULL, // codec controls 0, // h323CapabilityType NULL // h323CapabilityData }, { // decoder PLUGIN_CODEC_VERSION_WIDEBAND, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic, // specified RTP type g722_16, // text decription g722_16, // source format L16Desc, // destination format 0, // user data 16000, // samples per second BITS_PER_SECOND, // raw bits per second FRAME_TIME, // microseconds per frame SAMPLES_PER_FRAME, // samples per frame BYTES_PER_FRAME, // bytes per frame PREF_FRAMES_PER_PACKET, // recommended number of frames per packet MAX_FRAMES_PER_PACKET, // maximum number of frames per packe PAYLOAD_CODE, // IANA RTP payload code sdpG722, // RTP payload name create_decoder, // create codec function destroy_decoder, // destroy codec decode, // encode/decode NULL, // codec controls 0, // h323CapabilityType NULL // h323CapabilityData }, #endif // Standards compliant version { // encoder PLUGIN_CODEC_VERSION_WIDEBAND, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeExplicit, // specified RTP type g722, // text decription L16Desc, // source format g722, // destination format 0, // user data CLOCK_RATE, // samples per second BITS_PER_SECOND, // raw bits per second FRAME_TIME, // microseconds per frame SAMPLES_PER_FRAME, // samples per frame BYTES_PER_FRAME, // bytes per frame PREF_FRAMES_PER_PACKET, // recommended number of frames per packet MAX_FRAMES_PER_PACKET, // maximum number of frames per packe PAYLOAD_CODE, // IANA RTP payload code sdpG722, // RTP payload name create_encoder, // create codec function destroy_encoder, // destroy codec encode, // encode/decode NULL, // codec controls PluginCodec_H323AudioCodec_g722_64k, // h323CapabilityType NULL // h323CapabilityData }, { // decoder PLUGIN_CODEC_VERSION_WIDEBAND, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeExplicit, // specified RTP type g722, // text decription g722, // source format L16Desc, // destination format 0, // user data CLOCK_RATE, // samples per second BITS_PER_SECOND, // raw bits per second FRAME_TIME, // microseconds per frame SAMPLES_PER_FRAME, // samples per frame BYTES_PER_FRAME, // bytes per frame PREF_FRAMES_PER_PACKET, // recommended number of frames per packet MAX_FRAMES_PER_PACKET, // maximum number of frames per packe PAYLOAD_CODE, // IANA RTP payload code sdpG722, // RTP payload name create_decoder, // create codec function destroy_decoder, // destroy codec decode, // encode/decode NULL, // codec controls PluginCodec_H323AudioCodec_g722_64k, // h323CapabilityType NULL // h323CapabilityData } }; PLUGIN_CODEC_IMPLEMENT_ALL(G722, g722CodecDefn, PLUGIN_CODEC_VERSION_WIDEBAND) ///////////////////////////////////////////////////////////////////////////// h323plus/plugins/audio/G722/g722_2003.vcproj0000644000175000017500000001074111341106231016657 0ustar markmark h323plus/plugins/audio/G722/g722_2008.vcproj0000644000175000017500000001010411341106231016655 0ustar markmark h323plus/plugins/audio/G722/g722_2005.vcproj0000644000175000017500000001000311341106231016650 0ustar markmark h323plus/plugins/audio/G.722.1/0000755000175000017500000000000011551266156014537 5ustar markmarkh323plus/plugins/audio/G.722.1/Makefile.in0000644000175000017500000000345411445345106016605 0ustar markmark# # Makefile for G.722.1 codec plugin # # $Revision: 1.4 $ # $Author: willamowius $ # $Date: 2010/09/19 08:31:02 $ # AC_PLUGIN_DIR=@AC_PLUGIN_DIR@ prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ target_os=@target_os@ SONAME = g7221 STDCCFLAGS += @STDCCFLAGS@ -fPIC SRCDIR = ./G722-1 OBJDIR = ./obj PLUGINDIR=../.. CC =@CC@ CXX =@CXX@ LDSO =@LDSO@ PLUGINEXT =@PLUGINEXT@ STDCCFLAGS =@STDCCFLAGS@ LDFLAGS =@LDFLAGS@ EXTRACFLAGS =-I$(PLUGINDIR) SRCS += G7221Codec.cxx \ $(SRCDIR)/basop32.c \ $(SRCDIR)/coef2sam.c \ $(SRCDIR)/common.c \ $(SRCDIR)/count.c \ $(SRCDIR)/dct4_a.c \ $(SRCDIR)/dct4_s.c \ $(SRCDIR)/decoder.c \ $(SRCDIR)/encoder.c \ $(SRCDIR)/huff_tab.c \ $(SRCDIR)/sam2coef.c \ $(SRCDIR)/tables.c vpath %.o $(OBJDIR) vpath %.c $(SRCDIR) vpath %.cxx $(SRCDIR) ifeq ($(VERBOSE),) Q_CC = @echo [CC] `echo $< | sed s^@OPALDIR@/^^` ; Q_LD = @echo [LD] `echo $(PLUGIN) | sed s^@OPALDIR@/^^` ; endif $(OBJDIR)/%.o : %.c @mkdir -p $(OBJDIR) >/dev/null 2>&1 $(Q_CC)$(CXX) -I../../../include $(STDCCFLAGS) $(OPTCCFLAGS) $(EXTRACFLAGS) $(CFLAGS) -c $< -o $@ $(OBJDIR)/%.o : %.cxx @mkdir -p $(OBJDIR) >/dev/null 2>&1 $(Q_CC)$(CXX) -I../../../include $(STDCCFLAGS) $(OPTCCFLAGS) $(EXTRACFLAGS) $(CFLAGS) -c $< -o $@ PLUGIN = ./g7221_audio_pwplugin.$(PLUGINEXT) OBJECTS = $(addprefix $(OBJDIR)/,$(patsubst %.cxx,%.o,$(patsubst %.c,%.o,$(notdir $(SRCS))))) all: $(PLUGIN) $(PLUGIN): $(OBJECTS) ifeq (solaris,$(findstring solaris,$(target_os))) $(Q_LD)$(CC) $(LDSO) $@ -o $@ $^ $(EXTRALIBS) else $(Q_LD)$(CC) $(LDSO) -o $@ $^ $(EXTRALIBS) endif install: mkdir -p $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR) install $(PLUGIN) $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR) uninstall: rm -f $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR)/$(PLUGIN) clean: rm -f $(OBJECTS) $(PLUGIN) h323plus/plugins/audio/G.722.1/G722-1/0000755000175000017500000000000011400216234015277 5ustar markmarkh323plus/plugins/audio/G.722.1/G722-1/basop32.c0000644000175000017500000040577111341106231016731 0ustar markmark/* v.1.0 - 26.Jan.2000 ============================================================================= U U GGG SSSS TTTTT U U G S T U U G GG SSSS T U U G G S T UUU GG SSS T ======================================== ITU-T - USER'S GROUP ON SOFTWARE TOOLS ======================================== ============================================================= COPYRIGHT NOTE: This source code, and all of its derivations, is subject to the "ITU-T General Public License". Please have it read in the distribution disk, or in the ITU-T Recommendation G.191 on "SOFTWARE TOOLS FOR SPEECH AND AUDIO CODING STANDARDS". ============================================================= MODULE: BASOP, BASIC OPERATORS ORIGINAL BY: Incorporated from anonymous contributions for ETSI Standards as well as G.723.1, G.729, and G.722.1 DESCRIPTION: This file contains the definition of 16- and 32-bit basic operators to be used in the implementation of signal processing algorithms. The basic operators try to resemble assembly language instructions that are commonly found in digital signal processor (DSP) CPUs, thus allowing algorithm C-code implementations more directly mapeable to DSP assembly code. ********************************************************* NOTE: so far, this module does not have a demo program! ********************************************************* FUNCTIONS: Defined in basop.h. Self-documentation within each function. HISTORY: 26.Jan.00 v1.0 Incorporated to the STL from updated G.723.1/G.729 basic operator library (based on basicop2.c) and G.723.1's basop.c [L_mls(), div_l(), i_mult()] 05.Jul.00 v1.1 Added 32-bit shiftless accumulation basic operators (L_msu0, L_mac0, L_mult0). Improved documentation for i_mult(). ============================================================================= */ /*___________________________________________________________________________ | | | Basic arithmetic operators. | | | | $Id $ |___________________________________________________________________________| */ /*___________________________________________________________________________ | | | Include-Files | |___________________________________________________________________________| */ #include #include #include "typedef.h" #include "basop32.h" #if (WMOPS) #include "count.h" extern BASIC_OP multiCounter[MAXCOUNTERS]; extern int currCounter; #endif /*___________________________________________________________________________ | | | Local Functions | |___________________________________________________________________________| */ Word16 saturate (Word32 L_var1); /*___________________________________________________________________________ | | | Constants and Globals | |___________________________________________________________________________| */ Flag Overflow = 0; Flag Carry = 0; /*___________________________________________________________________________ | | | Functions | |___________________________________________________________________________| */ /*___________________________________________________________________________ | | | Function Name : saturate | | | | Purpose : | | | | Limit the 32 bit input to the range of a 16 bit word. | | | | Inputs : | | | | L_var1 | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. | | | | Outputs : | | | | none | | | | Return Value : | | | | var_out | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ Word16 saturate (Word32 L_var1) { Word16 var_out; if (L_var1 > 0X00007fffL) { Overflow = 1; var_out = MAX_16; } else if (L_var1 < (Word32) 0xffff8000L) { Overflow = 1; var_out = MIN_16; } else { var_out = extract_l (L_var1); #if (WMOPS) multiCounter[currCounter].extract_l--; #endif } return (var_out); } /* ------------------------- End of saturate() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : add | | | | Purpose : | | | | Performs the addition (var1+var2) with overflow control and saturation;| | the 16 bit result is set at +32767 when overflow occurs or at -32768 | | when underflow occurs. | | | | Complexity weight : 1 | | | | Inputs : | | | | var1 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | var2 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | var_out | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ Word16 add (Word16 var1, Word16 var2) { Word16 var_out; Word32 L_sum; L_sum = (Word32) var1 + var2; var_out = saturate (L_sum); #if (WMOPS) multiCounter[currCounter].add++; #endif return (var_out); } /* ------------------------- End of add() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : sub | | | | Purpose : | | | | Performs the subtraction (var1+var2) with overflow control and satu- | | ration; the 16 bit result is set at +32767 when overflow occurs or at | | -32768 when underflow occurs. | | | | Complexity weight : 1 | | | | Inputs : | | | | var1 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | var2 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | var_out | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ Word16 sub (Word16 var1, Word16 var2) { Word16 var_out; Word32 L_diff; L_diff = (Word32) var1 - var2; var_out = saturate (L_diff); #if (WMOPS) multiCounter[currCounter].sub++; #endif return (var_out); } /* ------------------------- End of sub() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : abs_s | | | | Purpose : | | | | Absolute value of var1; abs_s(-32768) = 32767. | | | | Complexity weight : 1 | | | | Inputs : | | | | var1 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | var_out | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0x0000 0000 <= var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ Word16 abs_s (Word16 var1) { Word16 var_out; if (var1 == (Word16) 0X8000) { var_out = MAX_16; } else { if (var1 < 0) { var_out = -var1; } else { var_out = var1; } } #if (WMOPS) multiCounter[currCounter].abs_s++; #endif return (var_out); } /* ------------------------- End of abs_s() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : shl | | | | Purpose : | | | | Arithmetically shift the 16 bit input var1 left var2 positions.Zero fill| | the var2 LSB of the result. If var2 is negative, arithmetically shift | | var1 right by -var2 with sign extension. Saturate the result in case of | | underflows or overflows. | | | | Complexity weight : 1 | | | | Inputs : | | | | var1 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | var2 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | var_out | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ Word16 shl (Word16 var1, Word16 var2) { Word16 var_out; Word32 result; if (var2 < 0) { if (var2 < -16) var2 = -16; var_out = shr (var1, (Word16) -var2); #if (WMOPS) multiCounter[currCounter].shr--; #endif } else { result = (Word32) var1 *((Word32) 1 << var2); if ((var2 > 15 && var1 != 0) || (result != (Word32) ((Word16) result))) { Overflow = 1; var_out = (var1 > 0) ? MAX_16 : MIN_16; } else { var_out = extract_l (result); #if (WMOPS) multiCounter[currCounter].extract_l--; #endif } } #if (WMOPS) multiCounter[currCounter].shl++; #endif return (var_out); } /* ------------------------- End of shl() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : shr | | | | Purpose : | | | | Arithmetically shift the 16 bit input var1 right var2 positions with | | sign extension. If var2 is negative, arithmetically shift var1 left by | | -var2 with sign extension. Saturate the result in case of underflows or | | overflows. | | | | Complexity weight : 1 | | | | Inputs : | | | | var1 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | var2 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | var_out | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ Word16 shr (Word16 var1, Word16 var2) { Word16 var_out; if (var2 < 0) { if (var2 < -16) var2 = -16; var_out = shl (var1, (Word16) -var2); #if (WMOPS) multiCounter[currCounter].shl--; #endif } else { if (var2 >= 15) { var_out = (var1 < 0) ? -1 : 0; } else { if (var1 < 0) { var_out = ~((~var1) >> var2); } else { var_out = var1 >> var2; } } } #if (WMOPS) multiCounter[currCounter].shr++; #endif return (var_out); } /* ------------------------- End of shr() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : mult | | | | Purpose : | | | | Performs the multiplication of var1 by var2 and gives a 16 bit result | | which is scaled i.e.: | | mult(var1,var2) = extract_l(L_shr((var1 times var2),15)) and | | mult(-32768,-32768) = 32767. | | | | Complexity weight : 1 | | | | Inputs : | | | | var1 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | var2 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | var_out | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ Word16 mult (Word16 var1, Word16 var2) { Word16 var_out; Word32 L_product; L_product = (Word32) var1 *(Word32) var2; L_product = (L_product & (Word32) 0xffff8000L) >> 15; if (L_product & (Word32) 0x00010000L) L_product = L_product | (Word32) 0xffff0000L; var_out = saturate (L_product); #if (WMOPS) multiCounter[currCounter].mult++; #endif return (var_out); } /* ------------------------- End of mult() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : L_mult | | | | Purpose : | | | | L_mult is the 32 bit result of the multiplication of var1 times var2 | | with one shift left i.e.: | | L_mult(var1,var2) = L_shl((var1 times var2),1) and | | L_mult(-32768,-32768) = 2147483647. | | | | Complexity weight : 1 | | | | Inputs : | | | | var1 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | var2 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | L_var_out | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | |___________________________________________________________________________| */ Word32 L_mult (Word16 var1, Word16 var2) { Word32 L_var_out; L_var_out = (Word32) var1 *(Word32) var2; if (L_var_out != (Word32) 0x40000000L) { L_var_out *= 2; } else { Overflow = 1; L_var_out = MAX_32; } #if (WMOPS) multiCounter[currCounter].L_mult++; #endif return (L_var_out); } /* ------------------------- End of L_mult() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : negate | | | | Purpose : | | | | Negate var1 with saturation, saturate in the case where input is -32768:| | negate(var1) = sub(0,var1). | | | | Complexity weight : 1 | | | | Inputs : | | | | var1 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | var_out | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ Word16 negate (Word16 var1) { Word16 var_out; var_out = (var1 == MIN_16) ? MAX_16 : -var1; #if (WMOPS) multiCounter[currCounter].negate++; #endif return (var_out); } /* ------------------------- End of negate() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : extract_h | | | | Purpose : | | | | Return the 16 MSB of L_var1. | | | | Complexity weight : 1 | | | | Inputs : | | | | L_var1 | | 32 bit long signed integer (Word32 ) whose value falls in the | | range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. | | | | Outputs : | | | | none | | | | Return Value : | | | | var_out | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ Word16 extract_h (Word32 L_var1) { Word16 var_out; var_out = (Word16) (L_var1 >> 16); #if (WMOPS) multiCounter[currCounter].extract_h++; #endif return (var_out); } /* ------------------------- End of extract_h() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : extract_l | | | | Purpose : | | | | Return the 16 LSB of L_var1. | | | | Complexity weight : 1 | | | | Inputs : | | | | L_var1 | | 32 bit long signed integer (Word32 ) whose value falls in the | | range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. | | | | Outputs : | | | | none | | | | Return Value : | | | | var_out | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ Word16 extract_l (Word32 L_var1) { Word16 var_out; var_out = (Word16) L_var1; #if (WMOPS) multiCounter[currCounter].extract_l++; #endif return (var_out); } /* ------------------------- End of extract_l() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : round | | | | Purpose : | | | | Round the lower 16 bits of the 32 bit input number into the MS 16 bits | | with saturation. Shift the resulting bits right by 16 and return the 16 | | bit number: | | round(L_var1) = extract_h(L_add(L_var1,32768)) | | | | Complexity weight : 1 | | | | Inputs : | | | | L_var1 | | 32 bit long signed integer (Word32 ) whose value falls in the | | range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. | | | | Outputs : | | | | none | | | | Return Value : | | | | var_out | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ Word16 round (Word32 L_var1) { Word16 var_out; Word32 L_rounded; L_rounded = L_add (L_var1, (Word32) 0x00008000L); #if (WMOPS) multiCounter[currCounter].L_add--; #endif var_out = extract_h (L_rounded); #if (WMOPS) multiCounter[currCounter].extract_h--; multiCounter[currCounter].round++; #endif return (var_out); } /* ------------------------- End of round() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : L_mac | | | | Purpose : | | | | Multiply var1 by var2 and shift the result left by 1. Add the 32 bit | | result to L_var3 with saturation, return a 32 bit result: | | L_mac(L_var3,var1,var2) = L_add(L_var3,L_mult(var1,var2)). | | | | Complexity weight : 1 | | | | Inputs : | | | | L_var3 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | | | var1 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | var2 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | L_var_out | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | |___________________________________________________________________________| */ Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2) { Word32 L_var_out; Word32 L_product; L_product = L_mult (var1, var2); #if (WMOPS) multiCounter[currCounter].L_mult--; #endif L_var_out = L_add (L_var3, L_product); #if (WMOPS) multiCounter[currCounter].L_add--; multiCounter[currCounter].L_mac++; #endif return (L_var_out); } /* ------------------------- End of L_mac() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : L_msu | | | | Purpose : | | | | Multiply var1 by var2 and shift the result left by 1. Subtract the 32 | | bit result to L_var3 with saturation, return a 32 bit result: | | L_msu(L_var3,var1,var2) = L_sub(L_var3,L_mult(var1,var2)). | | | | Complexity weight : 1 | | | | Inputs : | | | | L_var3 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | | | var1 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | var2 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | L_var_out | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | |___________________________________________________________________________| */ Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2) { Word32 L_var_out; Word32 L_product; L_product = L_mult (var1, var2); #if (WMOPS) multiCounter[currCounter].L_mult--; #endif L_var_out = L_sub (L_var3, L_product); #if (WMOPS) multiCounter[currCounter].L_sub--; multiCounter[currCounter].L_msu++; #endif return (L_var_out); } /* ------------------------- End of L_msu() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : L_macNs | | | | Purpose : | | | | Multiply var1 by var2 and shift the result left by 1. Add the 32 bit | | result to L_var3 without saturation, return a 32 bit result. Generate | | carry and overflow values : | | L_macNs(L_var3,var1,var2) = L_add_c(L_var3,L_mult(var1,var2)). | | | | Complexity weight : 1 | | | | Inputs : | | | | L_var3 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | | | var1 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | var2 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | L_var_out | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | | | | Caution : | | | | In some cases the Carry flag has to be cleared or set before using | | operators which take into account its value. | |___________________________________________________________________________| */ Word32 L_macNs (Word32 L_var3, Word16 var1, Word16 var2) { Word32 L_var_out; L_var_out = L_mult (var1, var2); #if (WMOPS) multiCounter[currCounter].L_mult--; #endif L_var_out = L_add_c (L_var3, L_var_out); #if (WMOPS) multiCounter[currCounter].L_add_c--; multiCounter[currCounter].L_macNs++; #endif return (L_var_out); } /* ------------------------- End of L_macNs() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : L_msuNs | | | | Purpose : | | | | Multiply var1 by var2 and shift the result left by 1. Subtract the 32 | | bit result from L_var3 without saturation, return a 32 bit result. Ge- | | nerate carry and overflow values : | | L_msuNs(L_var3,var1,var2) = L_sub_c(L_var3,L_mult(var1,var2)). | | | | Complexity weight : 1 | | | | Inputs : | | | | L_var3 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | | | var1 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | var2 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | L_var_out | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | | | | Caution : | | | | In some cases the Carry flag has to be cleared or set before using | | operators which take into account its value. | |___________________________________________________________________________| */ Word32 L_msuNs (Word32 L_var3, Word16 var1, Word16 var2) { Word32 L_var_out; L_var_out = L_mult (var1, var2); #if (WMOPS) multiCounter[currCounter].L_mult--; #endif L_var_out = L_sub_c (L_var3, L_var_out); #if (WMOPS) multiCounter[currCounter].L_sub_c--; multiCounter[currCounter].L_msuNs++; #endif return (L_var_out); } /* ------------------------- End of L_msuNs() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : L_add | | | | Purpose : | | | | 32 bits addition of the two 32 bits variables (L_var1+L_var2) with | | overflow control and saturation; the result is set at +2147483647 when | | overflow occurs or at -2147483648 when underflow occurs. | | | | Complexity weight : 2 | | | | Inputs : | | | | L_var1 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | | | L_var2 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | | | Outputs : | | | | none | | | | Return Value : | | | | L_var_out | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | |___________________________________________________________________________| */ Word32 L_add (Word32 L_var1, Word32 L_var2) { Word32 L_var_out; L_var_out = L_var1 + L_var2; if (((L_var1 ^ L_var2) & MIN_32) == 0) { if ((L_var_out ^ L_var1) & MIN_32) { L_var_out = (L_var1 < 0) ? MIN_32 : MAX_32; Overflow = 1; } } #if (WMOPS) multiCounter[currCounter].L_add++; #endif return (L_var_out); } /* ------------------------- End of L_add() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : L_sub | | | | Purpose : | | | | 32 bits subtraction of the two 32 bits variables (L_var1-L_var2) with | | overflow control and saturation; the result is set at +2147483647 when | | overflow occurs or at -2147483648 when underflow occurs. | | | | Complexity weight : 2 | | | | Inputs : | | | | L_var1 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | | | L_var2 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | | | Outputs : | | | | none | | | | Return Value : | | | | L_var_out | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | |___________________________________________________________________________| */ Word32 L_sub (Word32 L_var1, Word32 L_var2) { Word32 L_var_out; L_var_out = L_var1 - L_var2; if (((L_var1 ^ L_var2) & MIN_32) != 0) { if ((L_var_out ^ L_var1) & MIN_32) { L_var_out = (L_var1 < 0L) ? MIN_32 : MAX_32; Overflow = 1; } } #if (WMOPS) multiCounter[currCounter].L_sub++; #endif return (L_var_out); } /* ------------------------- End of L_sub() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : L_add_c | | | | Purpose : | | | | Performs 32 bits addition of the two 32 bits variables (L_var1+L_var2+C)| | with carry. No saturation. Generate carry and Overflow values. The car- | | ry and overflow values are binary variables which can be tested and as- | | signed values. | | | | Complexity weight : 2 | | | | Inputs : | | | | L_var1 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | | | L_var2 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | | | Outputs : | | | | none | | | | Return Value : | | | | L_var_out | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | | | | Caution : | | | | In some cases the Carry flag has to be cleared or set before using | | operators which take into account its value. | |___________________________________________________________________________| */ Word32 L_add_c (Word32 L_var1, Word32 L_var2) { Word32 L_var_out; Word32 L_test; Flag carry_int = 0; L_var_out = L_var1 + L_var2 + Carry; L_test = L_var1 + L_var2; if ((L_var1 > 0) && (L_var2 > 0) && (L_test < 0)) { Overflow = 1; carry_int = 0; } else { if ((L_var1 < 0) && (L_var2 < 0)) { if (L_test >= 0) { Overflow = 1; carry_int = 1; } else { Overflow = 0; carry_int = 1; } } else { if (((L_var1 ^ L_var2) < 0) && (L_test >= 0)) { Overflow = 0; carry_int = 1; } else { Overflow = 0; carry_int = 0; } } } if (Carry) { if (L_test == MAX_32) { Overflow = 1; Carry = carry_int; } else { if (L_test == (Word32) 0xFFFFFFFFL) { Carry = 1; } else { Carry = carry_int; } } } else { Carry = carry_int; } #if (WMOPS) multiCounter[currCounter].L_add_c++; #endif return (L_var_out); } /* ------------------------- End of L_add_c() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : L_sub_c | | | | Purpose : | | | | Performs 32 bits subtraction of the two 32 bits variables with carry | | (borrow) : L_var1-L_var2-C. No saturation. Generate carry and Overflow | | values. The carry and overflow values are binary variables which can | | be tested and assigned values. | | | | Complexity weight : 2 | | | | Inputs : | | | | L_var1 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | | | L_var2 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | | | Outputs : | | | | none | | | | Return Value : | | | | L_var_out | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | | | | Caution : | | | | In some cases the Carry flag has to be cleared or set before using | | operators which take into account its value. | |___________________________________________________________________________| */ Word32 L_sub_c (Word32 L_var1, Word32 L_var2) { Word32 L_var_out; Word32 L_test; Flag carry_int = 0; if (Carry) { Carry = 0; if (L_var2 != MIN_32) { L_var_out = L_add_c (L_var1, -L_var2); #if (WMOPS) multiCounter[currCounter].L_add_c--; #endif } else { L_var_out = L_var1 - L_var2; if (L_var1 > 0L) { Overflow = 1; Carry = 0; } } } else { L_var_out = L_var1 - L_var2 - (Word32) 0X00000001L; L_test = L_var1 - L_var2; if ((L_test < 0) && (L_var1 > 0) && (L_var2 < 0)) { Overflow = 1; carry_int = 0; } else if ((L_test > 0) && (L_var1 < 0) && (L_var2 > 0)) { Overflow = 1; carry_int = 1; } else if ((L_test > 0) && ((L_var1 ^ L_var2) > 0)) { Overflow = 0; carry_int = 1; } if (L_test == MIN_32) { Overflow = 1; Carry = carry_int; } else { Carry = carry_int; } } #if (WMOPS) multiCounter[currCounter].L_sub_c++; #endif return (L_var_out); } /* ------------------------- End of L_sub_c() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : L_negate | | | | Purpose : | | | | Negate the 32 bit variable L_var1 with saturation; saturate in the case | | where input is -2147483648 (0x8000 0000). | | | | Complexity weight : 2 | | | | Inputs : | | | | L_var1 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | | | Outputs : | | | | none | | | | Return Value : | | | | L_var_out | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | |___________________________________________________________________________| */ Word32 L_negate (Word32 L_var1) { Word32 L_var_out; L_var_out = (L_var1 == MIN_32) ? MAX_32 : -L_var1; #if (WMOPS) multiCounter[currCounter].L_negate++; #endif return (L_var_out); } /* ------------------------- End of L_negate() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : mult_r | | | | Purpose : | | | | Same as mult with rounding, i.e.: | | mult_r(var1,var2) = extract_l(L_shr(((var1 * var2) + 16384),15)) and | | mult_r(-32768,-32768) = 32767. | | | | Complexity weight : 2 | | | | Inputs : | | | | var1 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | var2 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | var_out | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ Word16 mult_r (Word16 var1, Word16 var2) { Word16 var_out; Word32 L_product_arr; L_product_arr = (Word32) var1 *(Word32) var2; /* product */ L_product_arr += (Word32) 0x00004000L; /* round */ L_product_arr &= (Word32) 0xffff8000L; L_product_arr >>= 15; /* shift */ if (L_product_arr & (Word32) 0x00010000L) /* sign extend when necessary */ { L_product_arr |= (Word32) 0xffff0000L; } var_out = saturate (L_product_arr); #if (WMOPS) multiCounter[currCounter].mult_r++; #endif return (var_out); } /* ------------------------- End of mult_r() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : L_shl | | | | Purpose : | | | | Arithmetically shift the 32 bit input L_var1 left var2 positions. Zero | | fill the var2 LSB of the result. If var2 is negative, arithmetically | | shift L_var1 right by -var2 with sign extension. Saturate the result in | | case of underflows or overflows. | | | | Complexity weight : 2 | | | | Inputs : | | | | L_var1 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | | | var2 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | L_var_out | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | |___________________________________________________________________________| */ Word32 L_shl (Word32 L_var1, Word16 var2) { Word32 L_var_out; if (var2 <= 0) { if (var2 < -32) var2 = -32; L_var_out = L_shr (L_var1, (Word16) -var2); #if (WMOPS) multiCounter[currCounter].L_shr--; #endif } else { for (; var2 > 0; var2--) { if (L_var1 > (Word32) 0X3fffffffL) { Overflow = 1; L_var_out = MAX_32; break; } else { if (L_var1 < (Word32) 0xc0000000L) { Overflow = 1; L_var_out = MIN_32; break; } } L_var1 *= 2; L_var_out = L_var1; } } #if (WMOPS) multiCounter[currCounter].L_shl++; #endif return (L_var_out); } /* ------------------------- End of L_shl() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : L_shr | | | | Purpose : | | | | Arithmetically shift the 32 bit input L_var1 right var2 positions with | | sign extension. If var2 is negative, arithmetically shift L_var1 left | | by -var2 and zero fill the -var2 LSB of the result. Saturate the result | | in case of underflows or overflows. | | | | Complexity weight : 2 | | | | Inputs : | | | | L_var1 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | | | var2 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | L_var_out | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | |___________________________________________________________________________| */ Word32 L_shr (Word32 L_var1, Word16 var2) { Word32 L_var_out; if (var2 < 0) { if (var2 < -32) var2 = -32; L_var_out = L_shl (L_var1, (Word16) -var2); #if (WMOPS) multiCounter[currCounter].L_shl--; #endif } else { if (var2 >= 31) { L_var_out = (L_var1 < 0L) ? -1 : 0; } else { if (L_var1 < 0) { L_var_out = ~((~L_var1) >> var2); } else { L_var_out = L_var1 >> var2; } } } #if (WMOPS) multiCounter[currCounter].L_shr++; #endif return (L_var_out); } /* ------------------------- End of L_shr() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : shr_r | | | | Purpose : | | | | Same as shr(var1,var2) but with rounding. Saturate the result in case of| | underflows or overflows : | | - If var2 is greater than zero : | | if (sub(shl(shr(var1,var2),1),shr(var1,sub(var2,1)))) | | is equal to zero | | then | | shr_r(var1,var2) = shr(var1,var2) | | else | | shr_r(var1,var2) = add(shr(var1,var2),1) | | - If var2 is less than or equal to zero : | | shr_r(var1,var2) = shr(var1,var2). | | | | Complexity weight : 2 | | | | Inputs : | | | | var1 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | var2 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | var_out | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ Word16 shr_r (Word16 var1, Word16 var2) { Word16 var_out; if (var2 > 15) { var_out = 0; } else { var_out = shr (var1, var2); #if (WMOPS) multiCounter[currCounter].shr--; #endif if (var2 > 0) { if ((var1 & ((Word16) 1 << (var2 - 1))) != 0) { var_out++; } } } #if (WMOPS) multiCounter[currCounter].shr_r++; #endif return (var_out); } /* ------------------------- End of shr_r() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : mac_r | | | | Purpose : | | | | Multiply var1 by var2 and shift the result left by 1. Add the 32 bit | | result to L_var3 with saturation. Round the LS 16 bits of the result | | into the MS 16 bits with saturation and shift the result right by 16. | | Return a 16 bit result. | | mac_r(L_var3,var1,var2) = round(L_mac(L_var3,var1,var2)) | | | | Complexity weight : 2 | | | | Inputs : | | | | L_var3 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | | | var1 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | var2 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | var_out | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0x0000 8000 <= L_var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ Word16 mac_r (Word32 L_var3, Word16 var1, Word16 var2) { Word16 var_out; L_var3 = L_mac (L_var3, var1, var2); #if (WMOPS) multiCounter[currCounter].L_mac--; #endif L_var3 = L_add (L_var3, (Word32) 0x00008000L); #if (WMOPS) multiCounter[currCounter].L_add--; #endif var_out = extract_h (L_var3); #if (WMOPS) multiCounter[currCounter].extract_h--; multiCounter[currCounter].mac_r++; #endif return (var_out); } /* ------------------------- End of mac_r() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : msu_r | | | | Purpose : | | | | Multiply var1 by var2 and shift the result left by 1. Subtract the 32 | | bit result to L_var3 with saturation. Round the LS 16 bits of the res- | | ult into the MS 16 bits with saturation and shift the result right by | | 16. Return a 16 bit result. | | msu_r(L_var3,var1,var2) = round(L_msu(L_var3,var1,var2)) | | | | Complexity weight : 2 | | | | Inputs : | | | | L_var3 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | | | var1 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | var2 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | var_out | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0x0000 8000 <= L_var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2) { Word16 var_out; L_var3 = L_msu (L_var3, var1, var2); #if (WMOPS) multiCounter[currCounter].L_msu--; #endif L_var3 = L_add (L_var3, (Word32) 0x00008000L); #if (WMOPS) multiCounter[currCounter].L_add--; #endif var_out = extract_h (L_var3); #if (WMOPS) multiCounter[currCounter].extract_h--; multiCounter[currCounter].msu_r++; #endif return (var_out); } /* ------------------------- End of msu_r() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : L_deposit_h | | | | Purpose : | | | | Deposit the 16 bit var1 into the 16 MS bits of the 32 bit output. The | | 16 LS bits of the output are zeroed. | | | | Complexity weight : 2 | | | | Inputs : | | | | var1 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | L_var_out | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= var_out <= 0x7fff 0000. | |___________________________________________________________________________| */ Word32 L_deposit_h (Word16 var1) { Word32 L_var_out; L_var_out = (Word32) var1 << 16; #if (WMOPS) multiCounter[currCounter].L_deposit_h++; #endif return (L_var_out); } /* ------------------------- End of L_deposit_h() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : L_deposit_l | | | | Purpose : | | | | Deposit the 16 bit var1 into the 16 LS bits of the 32 bit output. The | | 16 MS bits of the output are sign extended. | | | | Complexity weight : 2 | | | | Inputs : | | | | var1 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | L_var_out | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0xFFFF 8000 <= var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ Word32 L_deposit_l (Word16 var1) { Word32 L_var_out; L_var_out = (Word32) var1; #if (WMOPS) multiCounter[currCounter].L_deposit_l++; #endif return (L_var_out); } /* ------------------------- End of L_deposit_l() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : L_shr_r | | | | Purpose : | | | | Same as L_shr(L_var1,var2) but with rounding. Saturate the result in | | case of underflows or overflows : | | - If var2 is greater than zero : | | if (L_sub(L_shl(L_shr(L_var1,var2),1),L_shr(L_var1,sub(var2,1))))| | is equal to zero | | then | | L_shr_r(L_var1,var2) = L_shr(L_var1,var2) | | else | | L_shr_r(L_var1,var2) = L_add(L_shr(L_var1,var2),1) | | - If var2 is less than or equal to zero : | | L_shr_r(L_var1,var2) = L_shr(L_var1,var2). | | | | Complexity weight : 3 | | | | Inputs : | | | | L_var1 | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= var1 <= 0x7fff ffff. | | | | var2 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | L_var_out | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= var_out <= 0x7fff ffff. | |___________________________________________________________________________| */ Word32 L_shr_r (Word32 L_var1, Word16 var2) { Word32 L_var_out; if (var2 > 31) { L_var_out = 0; } else { L_var_out = L_shr (L_var1, var2); #if (WMOPS) multiCounter[currCounter].L_shr--; #endif if (var2 > 0) { if ((L_var1 & ((Word32) 1 << (var2 - 1))) != 0) { L_var_out++; } } } #if (WMOPS) multiCounter[currCounter].L_shr_r++; #endif return (L_var_out); } /* ------------------------- End of L_shr_r() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : L_abs | | | | Purpose : | | | | Absolute value of L_var1; Saturate in case where the input is | | -214783648 | | | | Complexity weight : 3 | | | | Inputs : | | | | L_var1 | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= var1 <= 0x7fff ffff. | | | | Outputs : | | | | none | | | | Return Value : | | | | L_var_out | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x0000 0000 <= var_out <= 0x7fff ffff. | |___________________________________________________________________________| */ Word32 L_abs (Word32 L_var1) { Word32 L_var_out; if (L_var1 == MIN_32) { L_var_out = MAX_32; } else { if (L_var1 < 0) { L_var_out = -L_var1; } else { L_var_out = L_var1; } } #if (WMOPS) multiCounter[currCounter].L_abs++; #endif return (L_var_out); } /* ------------------------- End of L_abs() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : L_sat | | | | Purpose : | | | | 32 bit L_var1 is set to 2147483647 if an overflow occured or to | | -2147483648 if an underflow occured on the most recent L_add_c, | | L_sub_c, L_macNs or L_msuNs operations. The carry and overflow values | | are binary values which can be tested and assigned values. | | | | Complexity weight : 4 | | | | Inputs : | | | | L_var1 | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= var1 <= 0x7fff ffff. | | | | Outputs : | | | | none | | | | Return Value : | | | | L_var_out | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= var_out <= 0x7fff ffff. | |___________________________________________________________________________| */ Word32 L_sat (Word32 L_var1) { Word32 L_var_out; L_var_out = L_var1; if (Overflow) { if (Carry) { L_var_out = MIN_32; } else { L_var_out = MAX_32; } Carry = 0; Overflow = 0; } #if (WMOPS) multiCounter[currCounter].L_sat++; #endif return (L_var_out); } /* ------------------------- End of L_sat() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : norm_s | | | | Purpose : | | | | Produces the number of left shift needed to normalize the 16 bit varia- | | ble var1 for positive values on the interval with minimum of 16384 and | | maximum of 32767, and for negative values on the interval with minimum | | of -32768 and maximum of -16384; in order to normalize the result, the | | following operation must be done : | | norm_var1 = shl(var1,norm_s(var1)). | | | | Complexity weight : 15 | | | | Inputs : | | | | var1 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | var_out | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0x0000 0000 <= var_out <= 0x0000 000f. | |___________________________________________________________________________| */ Word16 norm_s (Word16 var1) { Word16 var_out; if (var1 == 0) { var_out = 0; } else { if (var1 == (Word16) 0xffff) { var_out = 15; } else { if (var1 < 0) { var1 = ~var1; } for (var_out = 0; var1 < 0x4000; var_out++) { var1 <<= 1; } } } #if (WMOPS) multiCounter[currCounter].norm_s++; #endif return (var_out); } /* ------------------------- End of norm_s() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : div_s | | | | Purpose : | | | | Produces a result which is the fractional integer division of var1 by | | var2; var1 and var2 must be positive and var2 must be greater or equal | | to var1; the result is positive (leading bit equal to 0) and truncated | | to 16 bits. | | If var1 = var2 then div(var1,var2) = 32767. | | | | Complexity weight : 18 | | | | Inputs : | | | | var1 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0x0000 0000 <= var1 <= var2 and var2 != 0. | | | | var2 | | 16 bit short signed integer (Word16) whose value falls in the | | range : var1 <= var2 <= 0x0000 7fff and var2 != 0. | | | | Outputs : | | | | none | | | | Return Value : | | | | var_out | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0x0000 0000 <= var_out <= 0x0000 7fff. | | It's a Q15 value (point between b15 and b14). | |___________________________________________________________________________| */ Word16 div_s (Word16 var1, Word16 var2) { Word16 var_out = 0; Word16 iteration; Word32 L_num; Word32 L_denom; if ((var1 > var2) || (var1 < 0) || (var2 < 0)) { printf ("Division Error var1=%d var2=%d\n", var1, var2); abort(); /* exit (0); */ } if (var2 == 0) { printf ("Division by 0, Fatal error \n"); abort(); /* exit (0); */ } if (var1 == 0) { var_out = 0; } else { if (var1 == var2) { var_out = MAX_16; } else { L_num = L_deposit_l (var1); #if (WMOPS) multiCounter[currCounter].L_deposit_l--; #endif L_denom = L_deposit_l (var2); #if (WMOPS) multiCounter[currCounter].L_deposit_l--; #endif for (iteration = 0; iteration < 15; iteration++) { var_out <<= 1; L_num <<= 1; if (L_num >= L_denom) { L_num = L_sub (L_num, L_denom); #if (WMOPS) multiCounter[currCounter].L_sub--; #endif var_out = add (var_out, 1); #if (WMOPS) multiCounter[currCounter].add--; #endif } } } } #if (WMOPS) multiCounter[currCounter].div_s++; #endif return (var_out); } /* ------------------------- End of div_s() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : norm_l | | | | Purpose : | | | | Produces the number of left shifts needed to normalize the 32 bit varia-| | ble L_var1 for positive values on the interval with minimum of | | 1073741824 and maximum of 2147483647, and for negative values on the in-| | terval with minimum of -2147483648 and maximum of -1073741824; in order | | to normalize the result, the following operation must be done : | | norm_L_var1 = L_shl(L_var1,norm_l(L_var1)). | | | | Complexity weight : 30 | | | | Inputs : | | | | L_var1 | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= var1 <= 0x7fff ffff. | | | | Outputs : | | | | none | | | | Return Value : | | | | var_out | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0x0000 0000 <= var_out <= 0x0000 001f. | |___________________________________________________________________________| */ Word16 norm_l (Word32 L_var1) { Word16 var_out; if (L_var1 == 0) { var_out = 0; } else { if (L_var1 == (Word32) 0xffffffffL) { var_out = 31; } else { if (L_var1 < 0) { L_var1 = ~L_var1; } for (var_out = 0; L_var1 < (Word32) 0x40000000L; var_out++) { L_var1 <<= 1; } } } #if (WMOPS) multiCounter[currCounter].norm_l++; #endif return (var_out); } /* ------------------------- End of norm_l() ------------------------- */ /* ***************************************************************** Additional operators extracted from the G.723.1 Library Adapted for WMOPS calculations ***************************************************************** */ /*___________________________________________________________________________ | | | Function Name : L_mls | | | | Purpose : | | | | Multiplies a 16 bit word v by a 32 bit word Lv and returns a 32 bit | | word (multiplying 16 by 32 bit words gives 48 bit word; the function | | extracts the 32 MSB and shift the result to the left by 1). | | | | A 32 bit word can be written as | | Lv = a + b * 2^16 | | where a= unsigned 16 LSBs and b= signed 16 MSBs. | | The function returns v * Lv / 2^15 which is equivalent to | | a*v / 2^15 + b*v*2 | | | | Complexity weight : 6 [to be confirmed] | | | | Inputs : | | | | Lv | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= var1 <= 0x7fff ffff. | | v | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0x8000 <= var1 <= 0x7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | var_out | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= var_out <= 0x7fff ffff. | | | |___________________________________________________________________________| */ Word32 L_mls (Word32 Lv, Word16 v) { Word32 Temp ; Temp = Lv & (Word32) 0x0000ffff ; Temp = Temp * (Word32) v ; Temp = L_shr( Temp, (Word16) 15 ) ; Temp = L_mac( Temp, v, extract_h(Lv) ) ; #if (WMOPS) multiCounter[currCounter].L_shr--; multiCounter[currCounter].L_mac--; multiCounter[currCounter].extract_h--; multiCounter[currCounter].L_mls++; #endif return Temp ; } /* ------------------------- End of L_mls() ------------------------- */ /*__________________________________________________________________________ | | | Function Name : div_l | | | | Purpose : | | | | Produces a result which is the fractional integer division of L_var1 by| | var2; L_var1 and var2 must be positive and var2 << 16 must be greater or| | equal to L_var1; the result is positive (leading bit equal to 0) and | | truncated to 16 bits. | | If L_var1 == var2 << 16 then div_l(L_var1,var2) = 32767. | | | | Complexity weight : 20 | | | | Inputs : | | | | L_var1 | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x0000 0000 <= var1 <= (var2 << 16) and var2 != 0. | | L_var1 must be considered as a Q.31 value | | | | var2 | | 16 bit short signed integer (Word16) whose value falls in the | | range : var1 <= (var2<< 16) <= 0x7fff0000 and var2 != 0. | | var2 must be considered as a Q.15 value | | | | Outputs : | | | | none | | | | Return Value : | | | | var_out | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0x0000 0000 <= var_out <= 0x0000 7fff. | | It's a Q15 value (point between b15 and b14). | |___________________________________________________________________________| */ Word16 div_l (Word32 L_num, Word16 den) { Word16 var_out = (Word16)0; Word32 L_den; Word16 iteration; #if (WMOPS) multiCounter[currCounter].div_l++; #endif if ( den == (Word16) 0 ) { printf("Division by 0 in div_l, Fatal error \n"); exit(0); } if ( (L_num < (Word32) 0) || (den < (Word16) 0) ) { printf("Division Error in div_l, Fatal error \n"); exit(0); } L_den = L_deposit_h( den ) ; #if (WMOPS) multiCounter[currCounter].L_deposit_h--; #endif if ( L_num >= L_den ){ return MAX_16 ; } else { L_num = L_shr(L_num, (Word16)1) ; L_den = L_shr(L_den, (Word16)1); #if (WMOPS) multiCounter[currCounter].L_shr-=2; #endif for(iteration=(Word16)0; iteration< (Word16)15;iteration++) { var_out = shl( var_out, (Word16)1); L_num = L_shl( L_num, (Word16)1); #if (WMOPS) multiCounter[currCounter].shl--; multiCounter[currCounter].L_shl--; #endif if (L_num >= L_den) { L_num = L_sub(L_num,L_den); var_out = add(var_out, (Word16)1); #if (WMOPS) multiCounter[currCounter].L_sub--; multiCounter[currCounter].add--; #endif } } return var_out; } } /* ------------------------- End of div_l() ------------------------- */ /*__________________________________________________________________________ | | | Function Name : i_mult | | | | Purpose : | | | | Integer 16-bit multiplication. No overflow protection is performed if | | ORIGINAL_G7231 is defined. | | | | Complexity weight : TBD | | | | Inputs : | | | | a | | 16 bit short signed integer (Word16). | | | | b | | 16 bit short signed integer (Word16). | | | | Outputs : | | | | none | | | | Return Value : | | | | 16 bit short signed integer (Word16). No overflow checks | | are performed if ORIGINAL_G7231 is defined. | |___________________________________________________________________________| */ Word16 i_mult (Word16 a, Word16 b) { #ifdef ORIGINAL_G7231 return a*b ; #else Word32 register c=a*b; #if (WMOPS) multiCounter[currCounter].i_mult++; #endif return saturate(c) ; #endif } /* ------------------------- End of i_mult() ------------------------- */ /* ********************************************************************** The following three operators are not part of the original G.729/G.723.1 set of basic operators and implement shiftless accumulation operation. ********************************************************************** */ /*___________________________________________________________________________ | | Function Name : L_mult0 | | Purpose : | | L_mult0 is the 32 bit result of the multiplication of var1 times var2 | without one left shift. | | Complexity weight : 1 | | Inputs : | | var1 16 bit short signed integer (Word16) whose value falls in the | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | var2 16 bit short signed integer (Word16) whose value falls in the | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | Return Value : | | L_var_out | 32 bit long signed integer (Word32) whose value falls in the | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. |___________________________________________________________________________ */ Word32 L_mult0 (Word16 var1,Word16 var2) { Word32 L_var_out; L_var_out = (Word32)var1 * (Word32)var2; #if (WMOPS) multiCounter[currCounter].L_mult0++; #endif return(L_var_out); } /* ------------------------- End of L_mult0() ------------------------- */ /*___________________________________________________________________________ | | Function Name : L_mac0 | | Purpose : | | Multiply var1 by var2 (without left shift) and add the 32 bit result to | L_var3 with saturation, return a 32 bit result: | L_mac0(L_var3,var1,var2) = L_add(L_var3,(L_mult0(var1,var2)). | | Complexity weight : 1 | | Inputs : | | L_var3 32 bit long signed integer (Word32) whose value falls in the | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | var1 16 bit short signed integer (Word16) whose value falls in the | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | var2 16 bit short signed integer (Word16) whose value falls in the | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | Return Value : | | L_var_out | 32 bit long signed integer (Word32) whose value falls in the | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. |___________________________________________________________________________ */ Word32 L_mac0 (Word32 L_var3, Word16 var1, Word16 var2) { Word32 L_var_out; Word32 L_product; L_product = L_mult0(var1,var2); L_var_out = L_add(L_var3,L_product); #if (WMOPS) multiCounter[currCounter].L_mac0++; multiCounter[currCounter].L_mult0--; multiCounter[currCounter].L_add--; #endif return(L_var_out); } /* ------------------------- End of L_mac0() ------------------------- */ /*___________________________________________________________________________ | | Function Name : L_msu0 | | Purpose : | | Multiply var1 by var2 (without left shift) and subtract the 32 bit | result to L_var3 with saturation, return a 32 bit result: | L_msu0(L_var3,var1,var2) = L_sub(L_var3,(L_mult0(var1,var2)). | | Complexity weight : 1 | | Inputs : | | L_var3 32 bit long signed integer (Word32) whose value falls in the | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | var1 16 bit short signed integer (Word16) whose value falls in the | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | var2 16 bit short signed integer (Word16) whose value falls in the | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | Return Value : | | L_var_out | 32 bit long signed integer (Word32) whose value falls in the | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. |___________________________________________________________________________ */ Word32 L_msu0 (Word32 L_var3, Word16 var1, Word16 var2) { Word32 L_var_out; Word32 L_product; L_product = L_mult0(var1,var2); L_var_out = L_sub(L_var3,L_product); #if (WMOPS) multiCounter[currCounter].L_msu0++; multiCounter[currCounter].L_mult0--; multiCounter[currCounter].L_sub--; #endif return(L_var_out); } /* ------------------------- End of L_msu0() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : LU_shl | | | | Purpose : | | | | Arithmetically shift the 32 bit input L_var1 left var2 positions. Zero | | fill the var2 LSB of the result. If var2 is negative, arithmetically | | shift L_var1 right by -var2 with sign extension. Saturate the result in | | case of underflows or overflows. | | | | Complexity weight : 2 | | | | Inputs : | | | | L_var1 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | | | var2 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | L_var_out | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | |___________________________________________________________________________| */ UWord32 LU_shl (UWord32 L_var1, Word16 var2) { Word16 neg_var2; UWord32 L_var_out; if (var2 <= 0) { if (var2 < -32) var2 = -32; neg_var2 = negate(var2); L_var_out = LU_shr (L_var1, neg_var2); #if (WMOPS) multiCounter[currCounter].negate--; multiCounter[currCounter].LU_shr--; #endif } else { for (; var2 > 0; var2--) { if (L_var1 > (UWord32) 0X7fffffffL) { Overflow = 1; L_var_out = UMAX_32; break; } else { if (L_var1 < (UWord32) 0x00000001L) { Overflow = 1; L_var_out = MIN_32; break; } } L_var1 *= 2; L_var_out = L_var1; } } #if (WMOPS) multiCounter[currCounter].LU_shl++; #endif return (L_var_out); } /* ------------------------- End of LU_shl() ------------------------- */ /*___________________________________________________________________________ | | | Function Name : LU_shr | | | | Purpose : | | | | Arithmetically shift the 32 bit input L_var1 right var2 positions with | | sign extension. If var2 is negative, arithmetically shift L_var1 left | | by -var2 and zero fill the -var2 LSB of the result. Saturate the result | | in case of underflows or overflows. | | | | Complexity weight : 2 | | | | Inputs : | | | | L_var1 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | | | var2 | | 16 bit short signed integer (Word16) whose value falls in the | | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | | | Outputs : | | | | none | | | | Return Value : | | | | L_var_out | | 32 bit long signed integer (Word32) whose value falls in the | | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | |___________________________________________________________________________| */ UWord32 LU_shr (UWord32 L_var1, Word16 var2) { Word16 neg_var2; UWord32 L_var_out; if (var2 < 0) { if (var2 < -32) var2 = -32; neg_var2 = negate(var2); L_var_out = LU_shl (L_var1, neg_var2); #if (WMOPS) multiCounter[currCounter].negate--; multiCounter[currCounter].LU_shl--; #endif } else { if (var2 >= 32) { L_var_out = 0L; } else { L_var_out = L_var1 >> var2; } } #if (WMOPS) multiCounter[currCounter].LU_shr++; #endif return (L_var_out); } /* ------------------------- End of LU_shr() ------------------------- */ /* ************************** END OF BASOP32.C ************************** */ h323plus/plugins/audio/G.722.1/G722-1/huff_def.h0000644000175000017500000000435111341106231017220 0ustar markmark/*********************************************************************** ** ** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C ** > Software Release 2.1 (2008-06) ** (Simple repackaging; no change from 2005-05 Release 2.0 code) ** ** Љ 2004 Polycom, Inc. ** ** All rights reserved. ** ***********************************************************************/ #define REGION_POWER_STEPSIZE_DB 3.010299957 #define ABS_REGION_POWER_LEVELS 32 #define DIFF_REGION_POWER_LEVELS 24 #define DRP_DIFF_MIN -12 #define DRP_DIFF_MAX 11 #define MAX_NUM_BINS 16 #define MAX_VECTOR_INDICES 625 #define MAX_VECTOR_DIMENSION 5 extern Word16 differential_region_power_bits[MAX_NUMBER_OF_REGIONS][DIFF_REGION_POWER_LEVELS]; extern UWord16 differential_region_power_codes[MAX_NUMBER_OF_REGIONS][DIFF_REGION_POWER_LEVELS]; extern Word16 differential_region_power_decoder_tree[MAX_NUMBER_OF_REGIONS][DIFF_REGION_POWER_LEVELS-1][2]; extern Word16 mlt_quant_centroid[NUM_CATEGORIES][MAX_NUM_BINS]; extern Word16 expected_bits_table[NUM_CATEGORIES]; extern Word16 mlt_sqvh_bitcount_category_0[196]; extern UWord16 mlt_sqvh_code_category_0[196]; extern Word16 mlt_sqvh_bitcount_category_1[100]; extern UWord16 mlt_sqvh_code_category_1[100]; extern Word16 mlt_sqvh_bitcount_category_2[49]; extern UWord16 mlt_sqvh_code_category_2[49]; extern Word16 mlt_sqvh_bitcount_category_3[625]; extern UWord16 mlt_sqvh_code_category_3[625]; extern Word16 mlt_sqvh_bitcount_category_4[256]; extern UWord16 mlt_sqvh_code_category_4[256]; extern Word16 mlt_sqvh_bitcount_category_5[243]; extern UWord16 mlt_sqvh_code_category_5[243]; extern Word16 mlt_sqvh_bitcount_category_6[32]; extern UWord16 mlt_sqvh_code_category_6[32]; extern Word16 *table_of_bitcount_tables[NUM_CATEGORIES-1]; extern UWord16 *table_of_code_tables[NUM_CATEGORIES-1]; extern Word16 mlt_decoder_tree_category_0[180][2]; extern Word16 mlt_decoder_tree_category_1[93][2]; extern Word16 mlt_decoder_tree_category_2[47][2]; extern Word16 mlt_decoder_tree_category_3[519][2]; extern Word16 mlt_decoder_tree_category_4[208][2]; extern Word16 mlt_decoder_tree_category_5[191][2]; extern Word16 mlt_decoder_tree_category_6[31][2]; extern Word16 *table_of_decoder_tables[NUM_CATEGORIES-1]; h323plus/plugins/audio/G.722.1/G722-1/dct4_s.c0000644000175000017500000003722211341106231016630 0ustar markmark/******************************************************************************** ** ** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C ** > Software Release 2.1 (2008-06) ** (Simple repackaging; no change from 2005-05 Release 2.0 code) ** ** Љ 2004 Polycom, Inc. ** ** All rights reserved. ** ********************************************************************************/ /******************************************************************************** * Filename: dct_type_iv_s.c * * Purpose: Discrete Cosine Transform, Type IV used for inverse MLT * * The basis functions are * * cos(PI*(t+0.5)*(k+0.5)/block_length) * * for time t and basis function number k. Due to the symmetry of the expression * in t and k, it is clear that the forward and inverse transforms are the same. * *********************************************************************************/ /*************************************************************************** Include files ***************************************************************************/ #include "defs.h" #include "count.h" #include "dct4_s.h" /*************************************************************************** External variable declarations ***************************************************************************/ extern Word16 syn_bias_7khz[DCT_LENGTH]; extern Word16 dither[DCT_LENGTH]; extern Word16 max_dither[MAX_DCT_LENGTH]; extern Word16 dct_core_s[DCT_LENGTH_DIV_32][DCT_LENGTH_DIV_32]; extern cos_msin_t s_cos_msin_2[DCT_LENGTH_DIV_32]; extern cos_msin_t s_cos_msin_4[DCT_LENGTH_DIV_16]; extern cos_msin_t s_cos_msin_8[DCT_LENGTH_DIV_8]; extern cos_msin_t s_cos_msin_16[DCT_LENGTH_DIV_4]; extern cos_msin_t s_cos_msin_32[DCT_LENGTH_DIV_2]; extern cos_msin_t s_cos_msin_64[DCT_LENGTH]; extern cos_msin_t *s_cos_msin_table[]; /******************************************************************************** Function: dct_type_iv_s Syntax: void dct_type_iv_s (Word16 *input,Word16 *output,Word16 dct_length) Description: Discrete Cosine Transform, Type IV used for inverse MLT Design Notes: WMOPS: 7kHz | 24kbit | 32kbit -------|--------------|---------------- AVG | 1.74 | 1.74 -------|--------------|---------------- MAX | 1.74 | 1.74 -------|--------------|---------------- 14kHz | 24kbit | 32kbit | 48kbit -------|--------------|----------------|---------------- AVG | 3.62 | 3.62 | 3.62 -------|--------------|----------------|---------------- MAX | 3.62 | 3.62 | 3.62 -------|--------------|----------------|---------------- ********************************************************************************/ void dct_type_iv_s (Word16 *input,Word16 *output,Word16 dct_length) { Word16 buffer_a[MAX_DCT_LENGTH], buffer_b[MAX_DCT_LENGTH], buffer_c[MAX_DCT_LENGTH]; Word16 *in_ptr, *in_ptr_low, *in_ptr_high, *next_in_base; Word16 *out_ptr_low, *out_ptr_high, *next_out_base; Word16 *out_buffer, *in_buffer, *buffer_swap; Word16 in_val_low, in_val_high; Word16 out_val_low, out_val_high; Word16 in_low_even, in_low_odd; Word16 in_high_even, in_high_odd; Word16 out_low_even, out_low_odd; Word16 out_high_even, out_high_odd; Word16 *pair_ptr; Word16 cos_even, cos_odd, msin_even, msin_odd; Word16 set_span, set_count, set_count_log, pairs_left, sets_left; Word16 i,k; Word16 index; Word16 dummy; Word32 sum; cos_msin_t **table_ptr_ptr, *cos_msin_ptr; Word32 acca; Word16 temp; Word16 dct_length_log; Word16 *dither_ptr; /*++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* Do the sum/difference butterflies, the first part of */ /* converting one N-point transform into 32 - 10 point transforms */ /* transforms, where N = 1 << DCT_LENGTH_LOG. */ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ test(); if (dct_length==DCT_LENGTH) { dct_length_log = DCT_LENGTH_LOG; move16(); dither_ptr = dither; move16(); } else { dct_length_log = MAX_DCT_LENGTH_LOG; move16(); dither_ptr = max_dither; move16(); } in_buffer = input; move16(); out_buffer = buffer_a; move16(); index=0; move16(); i=0; move16(); for (set_count_log = 0; set_count_log <= dct_length_log - 2; set_count_log++) { /*===========================================================*/ /* Initialization for the loop over sets at the current size */ /*===========================================================*/ /* set_span = 1 << (DCT_LENGTH_LOG - set_count_log); */ set_span = shr(dct_length,set_count_log); set_count = shl(1,set_count_log); in_ptr = in_buffer; move16(); next_out_base = out_buffer; move16(); /*=====================================*/ /* Loop over all the sets of this size */ /*=====================================*/ temp = sub(index,1); test(); if(temp < 0) { for (sets_left = set_count;sets_left > 0;sets_left--) { /*||||||||||||||||||||||||||||||||||||||||||||*/ /* Set up output pointers for the current set */ /*||||||||||||||||||||||||||||||||||||||||||||*/ /* pointer arithmetic */ out_ptr_low = next_out_base; move16(); next_out_base += set_span; move16(); out_ptr_high = next_out_base; move16(); /*||||||||||||||||||||||||||||||||||||||||||||||||||*/ /* Loop over all the butterflies in the current set */ /*||||||||||||||||||||||||||||||||||||||||||||||||||*/ do { in_val_low = *in_ptr++; move16(); in_val_high = *in_ptr++; move16(); /* BEST METHOD OF GETTING RID OF BIAS, BUT COMPUTATIONALLY UNPLEASANT */ /* ALTERNATIVE METHOD, SMEARS BIAS OVER THE ENTIRE FRAME, COMPUTATIONALLY SIMPLEST. */ /* IF THIS WORKS, IT'S PREFERABLE */ dummy = add(in_val_low,dither_ptr[i++]); acca = L_add(dummy,in_val_high); out_val_low = extract_l(L_shr(acca,1)); dummy = add(in_val_low,dither_ptr[i++]); acca = L_add(dummy,-in_val_high); out_val_high = extract_l(L_shr(acca,1)); *out_ptr_low++ = out_val_low; move16(); *--out_ptr_high = out_val_high; move16(); test(); /* this involves comparison of pointers */ /* pointer arithmetic */ } while (out_ptr_low < out_ptr_high); } /* End of loop over sets of the current size */ } else { for (sets_left = set_count; sets_left > 0; sets_left--) { /*||||||||||||||||||||||||||||||||||||||||||||*/ /* Set up output pointers for the current set */ /*||||||||||||||||||||||||||||||||||||||||||||*/ out_ptr_low = next_out_base; move16(); next_out_base += set_span; move16(); out_ptr_high = next_out_base; move16(); /*||||||||||||||||||||||||||||||||||||||||||||||||||*/ /* Loop over all the butterflies in the current set */ /*||||||||||||||||||||||||||||||||||||||||||||||||||*/ do { in_val_low = *in_ptr++; move16(); in_val_high = *in_ptr++; move16(); out_val_low = add(in_val_low,in_val_high); out_val_high = add(in_val_low,negate(in_val_high)); *out_ptr_low++ = out_val_low; move16(); *--out_ptr_high = out_val_high; move16(); test(); } while (out_ptr_low < out_ptr_high); } /* End of loop over sets of the current size */ } /*============================================================*/ /* Decide which buffers to use as input and output next time. */ /* Except for the first time (when the input buffer is the */ /* subroutine input) we just alternate the local buffers. */ /*============================================================*/ in_buffer = out_buffer; move16(); test(); if (out_buffer == buffer_a) { out_buffer = buffer_b; move16(); } else { out_buffer = buffer_a; move16(); } index = add(index,1); } /* End of loop over set sizes */ /*++++++++++++++++++++++++++++++++*/ /* Do 32 - 10 point transforms */ /*++++++++++++++++++++++++++++++++*/ pair_ptr = in_buffer; move16(); buffer_swap = buffer_c; move16(); for (pairs_left = 1 << (dct_length_log - 1); pairs_left > 0; pairs_left--) { for ( k=0; k= 0; set_count_log--) { /*===========================================================*/ /* Initialization for the loop over sets at the current size */ /*===========================================================*/ /* set_span = 1 << (DCT_LENGTH_LOG - set_count_log); */ set_span = shr(dct_length,set_count_log); set_count = shl(1,set_count_log); next_in_base = in_buffer; move16(); test(); if (set_count_log == 0) { next_out_base = output; move16(); } else { next_out_base = out_buffer; move16(); } /*=====================================*/ /* Loop over all the sets of this size */ /*=====================================*/ for (sets_left = set_count; sets_left > 0; sets_left--) { /*|||||||||||||||||||||||||||||||||||||||||*/ /* Set up the pointers for the current set */ /*|||||||||||||||||||||||||||||||||||||||||*/ in_ptr_low = next_in_base; move16(); temp = shr(set_span,1); in_ptr_high = in_ptr_low + temp; move16(); next_in_base += set_span; move16(); out_ptr_low = next_out_base; move16(); next_out_base += set_span; move16(); out_ptr_high = next_out_base; move16(); cos_msin_ptr = *table_ptr_ptr; move16(); /*||||||||||||||||||||||||||||||||||||||||||||||||||||||*/ /* Loop over all the butterfly pairs in the current set */ /*||||||||||||||||||||||||||||||||||||||||||||||||||||||*/ do { in_low_even = *in_ptr_low++; move16(); in_low_odd = *in_ptr_low++; move16(); in_high_even = *in_ptr_high++; move16(); in_high_odd = *in_ptr_high++; move16(); cos_even = cos_msin_ptr[0].cosine; move16(); msin_even = cos_msin_ptr[0].minus_sine; move16(); cos_odd = cos_msin_ptr[1].cosine; move16(); msin_odd = cos_msin_ptr[1].minus_sine; move16(); cos_msin_ptr += 2; sum = 0L; move32(); sum = L_mac(sum,cos_even,in_low_even); sum = L_mac(sum,negate(msin_even),in_high_even); out_low_even = round(L_shl(sum,1)); sum = 0L; move32(); sum = L_mac(sum,msin_even,in_low_even); sum = L_mac(sum,cos_even,in_high_even); out_high_even = round(L_shl(sum,1)); sum = 0L; move32(); sum = L_mac(sum,cos_odd,in_low_odd); sum = L_mac(sum,msin_odd,in_high_odd); out_low_odd = round(L_shl(sum,1)); sum = 0L; move32(); sum = L_mac(sum,msin_odd,in_low_odd); sum = L_mac(sum,negate(cos_odd),in_high_odd); out_high_odd = round(L_shl(sum,1)); *out_ptr_low++ = out_low_even; move16(); *--out_ptr_high = out_high_even; move16(); *out_ptr_low++ = out_low_odd; move16(); *--out_ptr_high = out_high_odd; move16(); test(); } while (out_ptr_low < out_ptr_high); } /* End of loop over sets of the current size */ /*=============================================*/ /* Swap input and output buffers for next time */ /*=============================================*/ buffer_swap = in_buffer; move16(); in_buffer = out_buffer; move16(); out_buffer = buffer_swap; move16(); index = add(index,1); table_ptr_ptr++; } /*------------------------------------ ADD IN BIAS FOR OUTPUT -----------------------------------*/ if (dct_length==DCT_LENGTH) { for(i=0;i<320;i++) { sum = L_add(output[i],syn_bias_7khz[i]); acca = L_sub(sum,32767); test(); if (acca > 0) { sum = 32767L; move32(); } acca = L_add(sum,32768L); test(); if (acca < 0) { sum = -32768L; move32(); } output[i] = extract_l(sum); } } } h323plus/plugins/audio/G.722.1/G722-1/dct4_a.c0000644000175000017500000002767411341106231016620 0ustar markmark/********************************************************************************* ** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C ** > Software Release 2.1 (2008-06) ** (Simple repackaging; no change from 2005-05 Release 2.0 code) ** ** Љ 2004 Polycom, Inc. ** ** All rights reserved. ** *********************************************************************************/ /********************************************************************************* * Filename: dct_type_iv_a.c * * Purpose: Discrete Cosine Transform, Type IV used for MLT * * The basis functions are * * cos(PI*(t+0.5)*(k+0.5)/block_length) * * for time t and basis function number k. Due to the symmetry of the expression * in t and k, it is clear that the forward and inverse transforms are the same. * *********************************************************************************/ /********************************************************************************* Include files *********************************************************************************/ #include "defs.h" #include "count.h" #include "dct4_a.h" /********************************************************************************* External variable declarations *********************************************************************************/ extern Word16 anal_bias[DCT_LENGTH]; extern Word16 dct_core_a[DCT_LENGTH_DIV_32][DCT_LENGTH_DIV_32]; extern cos_msin_t a_cos_msin_2 [DCT_LENGTH_DIV_32]; extern cos_msin_t a_cos_msin_4 [DCT_LENGTH_DIV_16]; extern cos_msin_t a_cos_msin_8 [DCT_LENGTH_DIV_8]; extern cos_msin_t a_cos_msin_16[DCT_LENGTH_DIV_4]; extern cos_msin_t a_cos_msin_32[DCT_LENGTH_DIV_2]; extern cos_msin_t a_cos_msin_64[DCT_LENGTH]; extern cos_msin_t *a_cos_msin_table[]; /********************************************************************************* Function: dct_type_iv_a Syntax: void dct_type_iv_a (input, output, dct_length) Word16 input[], output[], dct_length; Description: Discrete Cosine Transform, Type IV used for MLT Design Notes: WMOPS: | 24kbit | 32kbit -------|--------------|---------------- AVG | 1.14 | 1.14 -------|--------------|---------------- MAX | 1.14 | 1.14 -------|--------------|---------------- 14kHz | 24kbit | 32kbit | 48kbit -------|--------------|----------------|---------------- AVG | 2.57 | 2.57 | 2.57 -------|--------------|----------------|---------------- MAX | 2.57 | 2.57 | 2.57 -------|--------------|----------------|---------------- *********************************************************************************/ void dct_type_iv_a (Word16 *input,Word16 *output,Word16 dct_length) { Word16 buffer_a[MAX_DCT_LENGTH], buffer_b[MAX_DCT_LENGTH], buffer_c[MAX_DCT_LENGTH]; Word16 *in_ptr, *in_ptr_low, *in_ptr_high, *next_in_base; Word16 *out_ptr_low, *out_ptr_high, *next_out_base; Word16 *out_buffer, *in_buffer, *buffer_swap; Word16 in_val_low, in_val_high; Word16 out_val_low, out_val_high; Word16 in_low_even, in_low_odd; Word16 in_high_even, in_high_odd; Word16 out_low_even, out_low_odd; Word16 out_high_even, out_high_odd; Word16 *pair_ptr; Word16 cos_even, cos_odd, msin_even, msin_odd; Word16 neg_cos_odd; Word16 neg_msin_even; Word32 sum; Word16 set_span, set_count, set_count_log, pairs_left, sets_left; Word16 i,k; Word16 index; cos_msin_t **table_ptr_ptr, *cos_msin_ptr; Word16 temp; Word32 acca; Word16 dct_length_log; /*++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* Do the sum/difference butterflies, the first part of */ /* converting one N-point transform into N/2 two-point */ /* transforms, where N = 1 << DCT_LENGTH_LOG. = 64/128 */ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ test(); if (dct_length==DCT_LENGTH) { dct_length_log = DCT_LENGTH_LOG; /* Add bias offsets */ for (i=0;i0;sets_left--) { /*||||||||||||||||||||||||||||||||||||||||||||*/ /* Set up output pointers for the current set */ /*||||||||||||||||||||||||||||||||||||||||||||*/ out_ptr_low = next_out_base; next_out_base = next_out_base + set_span; out_ptr_high = next_out_base; /*||||||||||||||||||||||||||||||||||||||||||||||||||*/ /* Loop over all the butterflies in the current set */ /*||||||||||||||||||||||||||||||||||||||||||||||||||*/ do { in_val_low = *in_ptr++; in_val_high = *in_ptr++; acca = L_add(in_val_low,in_val_high); acca = L_shr(acca,1); out_val_low = extract_l(acca); acca = L_sub(in_val_low,in_val_high); acca = L_shr(acca,1); out_val_high = extract_l(acca); *out_ptr_low++ = out_val_low; *--out_ptr_high = out_val_high; test(); } while (out_ptr_low < out_ptr_high); } /* End of loop over sets of the current size */ /*============================================================*/ /* Decide which buffers to use as input and output next time. */ /* Except for the first time (when the input buffer is the */ /* subroutine input) we just alternate the local buffers. */ /*============================================================*/ in_buffer = out_buffer; move16(); if (out_buffer == buffer_a) out_buffer = buffer_b; else out_buffer = buffer_a; index = add(index,1); } /* End of loop over set sizes */ /*++++++++++++++++++++++++++++++++*/ /* Do N/2 two-point transforms, */ /* where N = 1 << DCT_LENGTH_LOG */ /*++++++++++++++++++++++++++++++++*/ pair_ptr = in_buffer; move16(); buffer_swap = buffer_c; move16(); temp = sub(dct_length_log,1); temp = shl(1,temp); for (pairs_left=temp; pairs_left > 0; pairs_left--) { for ( k=0; k= 0; set_count_log--) { /*===========================================================*/ /* Initialization for the loop over sets at the current size */ /*===========================================================*/ /* set_span = 1 << (DCT_LENGTH_LOG - set_count_log); */ set_span = shr(dct_length,set_count_log); set_count = shl(1,set_count_log); next_in_base = in_buffer; move16(); test(); if (set_count_log == 0) { next_out_base = output; } else { next_out_base = out_buffer; } /*=====================================*/ /* Loop over all the sets of this size */ /*=====================================*/ for (sets_left = set_count; sets_left > 0;sets_left--) { /*|||||||||||||||||||||||||||||||||||||||||*/ /* Set up the pointers for the current set */ /*|||||||||||||||||||||||||||||||||||||||||*/ in_ptr_low = next_in_base; move16(); temp = shr(set_span,1); /* address arithmetic */ in_ptr_high = in_ptr_low + temp; next_in_base += set_span; out_ptr_low = next_out_base; next_out_base += set_span; out_ptr_high = next_out_base; cos_msin_ptr = *table_ptr_ptr; /*||||||||||||||||||||||||||||||||||||||||||||||||||||||*/ /* Loop over all the butterfly pairs in the current set */ /*||||||||||||||||||||||||||||||||||||||||||||||||||||||*/ do { /* address arithmetic */ in_low_even = *in_ptr_low++; in_low_odd = *in_ptr_low++; in_high_even = *in_ptr_high++; in_high_odd = *in_ptr_high++; cos_even = cos_msin_ptr[0].cosine; move16(); msin_even = cos_msin_ptr[0].minus_sine; move16(); cos_odd = cos_msin_ptr[1].cosine; move16(); msin_odd = cos_msin_ptr[1].minus_sine; move16(); cos_msin_ptr += 2; sum = 0L; sum=L_mac(sum,cos_even,in_low_even); neg_msin_even = negate(msin_even); sum=L_mac(sum,neg_msin_even,in_high_even); out_low_even = round(sum); sum = 0L; sum=L_mac(sum,msin_even,in_low_even); sum=L_mac(sum,cos_even,in_high_even); out_high_even= round(sum); sum = 0L; sum=L_mac(sum,cos_odd,in_low_odd); sum=L_mac(sum,msin_odd,in_high_odd); out_low_odd= round(sum); sum = 0L; sum=L_mac(sum,msin_odd,in_low_odd); neg_cos_odd = negate(cos_odd); sum=L_mac(sum,neg_cos_odd,in_high_odd); out_high_odd= round(sum); *out_ptr_low++ = out_low_even; *--out_ptr_high = out_high_even; *out_ptr_low++ = out_low_odd; *--out_ptr_high = out_high_odd; test(); } while (out_ptr_low < out_ptr_high); } /* End of loop over sets of the current size */ /*=============================================*/ /* Swap input and output buffers for next time */ /*=============================================*/ buffer_swap = in_buffer; in_buffer = out_buffer; out_buffer = buffer_swap; table_ptr_ptr++; } } h323plus/plugins/audio/G.722.1/G722-1/common.c0000644000175000017500000004127211341106231016740 0ustar markmark/**************************************************************************************** ** ** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C ** > Software Release 2.1 (2008-06) ** (Simple repackaging; no change from 2005-05 Release 2.0 code) ** ** Љ 2004 Polycom, Inc. ** ** All rights reserved. ** ****************************************************************************************/ /**************************************************************************************** Filename: common.c Purpose: Contains the functions used for both G.722.1 Annex C encoder and decoder Design Notes: ****************************************************************************************/ /**************************************************************************************** Include files ****************************************************************************************/ #include "defs.h" #include "huff_def.h" #include "huff_tab.h" #include "tables.h" #include "count.h" /**************************************************************************************** Function: categorize Syntax: void categorize(Word16 number_of_available_bits, Word16 number_of_regions, Word16 num_categorization_control_possibilities, Word16 rms_index, Word16 power_categories, Word16 category_balances) inputs: number_of_regions num_categorization_control_possibilities number_of_available_bits rms_index[MAX_NUMBER_OF_REGIONS] outputs: power_categories[MAX_NUMBER_OF_REGIONS] category_balances[MAX_NUM_CATEGORIZATION_CONTROL_POSSIBILITIES-1] Description: Computes a series of categorizations WMOPS: 7kHz | 24kbit | 32kbit -------|--------------|---------------- AVG | 0.14 | 0.14 -------|--------------|---------------- MAX | 0.15 | 0.15 -------|--------------|---------------- 14kHz | 24kbit | 32kbit | 48kbit -------|--------------|----------------|---------------- AVG | 0.42 | 0.45 | 0.48 -------|--------------|----------------|---------------- MAX | 0.47 | 0.52 | 0.52 -------|--------------|----------------|---------------- ****************************************************************************************/ void categorize(Word16 number_of_available_bits, Word16 number_of_regions, Word16 num_categorization_control_possibilities, Word16 *rms_index, Word16 *power_categories, Word16 *category_balances) { Word16 offset; Word16 temp; Word16 frame_size; /* At higher bit rates, there is an increase for most categories in average bit consumption per region. We compensate for this by pretending we have fewer available bits. */ test(); if (number_of_regions == NUMBER_OF_REGIONS) { frame_size = DCT_LENGTH; } else { frame_size = MAX_DCT_LENGTH; } temp = sub(number_of_available_bits,frame_size); test(); if (temp > 0) { number_of_available_bits = sub(number_of_available_bits,frame_size); number_of_available_bits = extract_l(L_mult0(number_of_available_bits,5)); number_of_available_bits = shr(number_of_available_bits,3); number_of_available_bits = add(number_of_available_bits,frame_size); } /* calculate the offset using the original category assignments */ offset = calc_offset(rms_index,number_of_regions,number_of_available_bits); /* compute the power categories based on the uniform offset */ compute_raw_pow_categories(power_categories,rms_index,number_of_regions,offset); /* adjust the category assignments */ /* compute the new power categories and category balances */ comp_powercat_and_catbalance(power_categories,category_balances,rms_index,number_of_available_bits,number_of_regions,num_categorization_control_possibilities,offset); } /*************************************************************************** Function: comp_powercat_and_catbalance Syntax: void comp_powercat_and_catbalance(Word16 *power_categories, Word16 *category_balances, Word16 *rms_index, Word16 number_of_available_bits, Word16 number_of_regions, Word16 num_categorization_control_possibilities, Word16 offset) inputs: *rms_index number_of_available_bits number_of_regions num_categorization_control_possibilities offset outputs: *power_categories *category_balances Description: Computes the power_categories and the category balances WMOPS: 7kHz | 24kbit | 32kbit -------|--------------|---------------- AVG | 0.10 | 0.10 -------|--------------|---------------- MAX | 0.11 | 0.11 -------|--------------|---------------- 14kHz | 24kbit | 32kbit | 48kbit -------|--------------|----------------|---------------- AVG | 0.32 | 0.35 | 0.38 -------|--------------|----------------|---------------- MAX | 0.38 | 0.42 | 0.43 -------|--------------|----------------|---------------- ***************************************************************************/ void comp_powercat_and_catbalance(Word16 *power_categories, Word16 *category_balances, Word16 *rms_index, Word16 number_of_available_bits, Word16 number_of_regions, Word16 num_categorization_control_possibilities, Word16 offset) { Word16 expected_number_of_code_bits; Word16 region; Word16 max_region; Word16 j; Word16 max_rate_categories[MAX_NUMBER_OF_REGIONS]; Word16 min_rate_categories[MAX_NUMBER_OF_REGIONS]; Word16 temp_category_balances[2*MAX_NUM_CATEGORIZATION_CONTROL_POSSIBILITIES]; Word16 raw_max, raw_min; Word16 raw_max_index, raw_min_index; Word16 max_rate_pointer, min_rate_pointer; Word16 max, min; Word16 itemp0; Word16 itemp1; Word16 min_plus_max; Word16 two_x_number_of_available_bits; Word16 temp; expected_number_of_code_bits = 0; move16(); for (region=0; region 0) { itemp0 = shl(max_rate_categories[region],1); itemp1 = sub(offset,rms_index[region]); itemp0 = sub(itemp1,itemp0); temp = sub(itemp0,raw_min); test(); if (temp < 0) { raw_min = itemp0; raw_min_index = region; } } } max_rate_pointer = sub(max_rate_pointer,1); temp_category_balances[max_rate_pointer] = raw_min_index; move16(); max = sub(max,expected_bits_table[max_rate_categories[raw_min_index]]); max_rate_categories[raw_min_index] = sub(max_rate_categories[raw_min_index],1); move16(); max = add(max,expected_bits_table[max_rate_categories[raw_min_index]]); } else { raw_max = -99; move16(); /* Search from highest freq regions to lowest for best region to reassign to a lower bit rate category. */ max_region = sub(number_of_regions,1); for (region= max_region; region >= 0; region--) { temp = sub(min_rate_categories[region],(NUM_CATEGORIES-1)); test(); if (temp < 0) { itemp0 = shl(min_rate_categories[region],1); itemp1 = sub(offset,rms_index[region]); itemp0 = sub(itemp1,itemp0); temp = sub(itemp0,raw_max); test(); if (temp > 0) { raw_max = itemp0; move16(); raw_max_index = region; move16(); } } } temp_category_balances[min_rate_pointer] = raw_max_index; move16(); min_rate_pointer = add(min_rate_pointer,1); min = sub(min,expected_bits_table[min_rate_categories[raw_max_index]]); min_rate_categories[raw_max_index] = add(min_rate_categories[raw_max_index],1); move16(); min = add(min,expected_bits_table[min_rate_categories[raw_max_index]]); } } for (region=0; region 0) { j = sub(NUM_CATEGORIES,1); move16(); } power_cats[region] = j; move16(); } bits = 0; move16(); /* compute the number of bits that will be used given the cat assignments */ for (region=0; region available_bits - 32) then divide the offset region for the bin search */ offset = sub(available_bits,32); temp = sub(bits,offset); test(); if (temp >= 0) { answer = test_offset; move16(); } delta = shr(delta,1); test(); /* for the while loop */ } while (delta > 0); return(answer); } /*************************************************************************** Function: compute_raw_pow_categories Syntax: void compute_raw_pow_categories(Word16 *power_categories, Word16 *rms_index, Word16 number_of_regions, Word16 offset) inputs: *rms_index number_of_regions offset outputs: *power_categories Description: This function computes the power categories given the offset This is kind of redundant since they were already computed in calc_offset to determine the offset. WMOPS: | 24kbit | 32kbit -------|--------------|---------------- AVG | 0.01 | 0.01 -------|--------------|---------------- MAX | 0.01 | 0.01 -------|--------------|---------------- 14kHz | 24kbit | 32kbit | 48kbit -------|--------------|----------------|---------------- AVG | 0.01 | 0.01 | 0.01 -------|--------------|----------------|---------------- MAX | 0.01 | 0.01 | 0.01 -------|--------------|----------------|---------------- ***************************************************************************/ void compute_raw_pow_categories(Word16 *power_categories,Word16 *rms_index,Word16 number_of_regions,Word16 offset) { Word16 region; Word16 j; Word16 temp; for (region=0; region 0) j = sub(NUM_CATEGORIES,1); power_categories[region] = j; move16(); } } h323plus/plugins/audio/G.722.1/G722-1/dct4_a.h0000644000175000017500000004511011341106231016606 0ustar markmark/**************************************************************************** ** ** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C ** > Software Release 2.1 (2008-06) ** (Simple repackaging; no change from 2005-05 Release 2.0 code) ** ** Љ 2004 Polycom, Inc. ** ** All rights reserved. ** ****************************************************************************/ /**************************************************************************** Filename: dct4_a.h Purpose: Contains tables used by dct4_a.c Design Notes: ****************************************************************************/ /*************************************************************************** Include files ***************************************************************************/ #include #include typedef struct { Word16 cosine; Word16 minus_sine; } cos_msin_t; cos_msin_t a_cos_msin_2[10] = { { 29805 , -1171 } , { 29621 , -3506 } , { 29255 , -5819 } , { 28708 , -8097 } , { 27984 , -10324 } , { 27088 , -12488 } , { 26025 , -14575 } , { 24801 , -16572 } , { 23425 , -18466 } , { 21903 , -20247 } }; cos_msin_t a_cos_msin_4[20] = { { 29822 , -586 } , { 29776 , -1756 } , { 29684 , -2924 } , { 29547 , -4087 } , { 29364 , -5244 } , { 29135 , -6392 } , { 28862 , -7531 } , { 28544 , -8659 } , { 28182 , -9773 } , { 27776 , -10871 } , { 27328 , -11954 } , { 26838 , -13017 } , { 26306 , -14061 } , { 25734 , -15083 } , { 25122 , -16081 } , { 24471 , -17055 } , { 23783 , -18003 } , { 23057 , -18923 } , { 22297 , -19813 } , { 21502 , -20673 } }; cos_msin_t a_cos_msin_8[40] = { { 29827 , -293 } , { 29815 , -878 } , { 29792 , -1464 } , { 29758 , -2048 } , { 29712 , -2632 } , { 29654 , -3215 } , { 29586 , -3797 } , { 29505 , -4377 } , { 29414 , -4955 } , { 29311 , -5532 } , { 29196 , -6106 } , { 29071 , -6678 } , { 28934 , -7248 } , { 28786 , -7814 } , { 28627 , -8378 } , { 28457 , -8938 } , { 28276 , -9495 } , { 28084 , -10049 } , { 27882 , -10598 } , { 27668 , -11144 } , { 27444 , -11685 } , { 27209 , -12221 } , { 26964 , -12753 } , { 26709 , -13280 } , { 26443 , -13802 } , { 26167 , -14318 } , { 25881 , -14829 } , { 25584 , -15335 } , { 25278 , -15834 } , { 24963 , -16327 } , { 24637 , -16814 } , { 24302 , -17295 } , { 23958 , -17769 } , { 23605 , -18236 } , { 23242 , -18695 } , { 22871 , -19148 } , { 22490 , -19594 } , { 22101 , -20031 } , { 21704 , -20461 } , { 21298 , -20884 } }; cos_msin_t a_cos_msin_16[80] = { { 29828 , -146 } , { 29825 , -439 } , { 29819 , -732 } , { 29811 , -1025 } , { 29799 , -1317 } , { 29785 , -1610 } , { 29767 , -1902 } , { 29747 , -2194 } , { 29724 , -2486 } , { 29698 , -2778 } , { 29670 , -3069 } , { 29638 , -3360 } , { 29604 , -3651 } , { 29567 , -3942 } , { 29526 , -4232 } , { 29483 , -4521 } , { 29438 , -4811 } , { 29389 , -5099 } , { 29338 , -5388 } , { 29283 , -5676 } , { 29226 , -5963 } , { 29166 , -6249 } , { 29103 , -6535 } , { 29038 , -6821 } , { 28969 , -7106 } , { 28898 , -7390 } , { 28824 , -7673 } , { 28748 , -7956 } , { 28668 , -8237 } , { 28586 , -8518 } , { 28501 , -8799 } , { 28413 , -9078 } , { 28323 , -9357 } , { 28229 , -9634 } , { 28133 , -9911 } , { 28035 , -10187 } , { 27933 , -10461 } , { 27829 , -10735 } , { 27723 , -11008 } , { 27613 , -11279 } , { 27501 , -11550 } , { 27387 , -11819 } , { 27269 , -12088 } , { 27149 , -12355 } , { 27027 , -12621 } , { 26901 , -12885 } , { 26774 , -13149 } , { 26643 , -13411 } , { 26510 , -13672 } , { 26375 , -13932 } , { 26237 , -14190 } , { 26096 , -14447 } , { 25953 , -14702 } , { 25807 , -14956 } , { 25659 , -15209 } , { 25509 , -15460 } , { 25356 , -15710 } , { 25200 , -15958 } , { 25043 , -16205 } , { 24882 , -16450 } , { 24720 , -16693 } , { 24554 , -16935 } , { 24387 , -17175 } , { 24217 , -17414 } , { 24045 , -17651 } , { 23871 , -17886 } , { 23694 , -18119 } , { 23515 , -18351 } , { 23334 , -18581 } , { 23150 , -18809 } , { 22964 , -19036 } , { 22776 , -19260 } , { 22586 , -19483 } , { 22394 , -19704 } , { 22199 , -19923 } , { 22003 , -20140 } , { 21804 , -20355 } , { 21603 , -20568 } , { 21400 , -20779 } , { 21195 , -20988 } }; cos_msin_t a_cos_msin_32[160]= { { 29828 , -73 } , { 29827 , -220 } , { 29826 , -366 } , { 29824 , -512 } , { 29821 , -659 } , { 29817 , -805 } , { 29813 , -952 } , { 29808 , -1098 } , { 29802 , -1244 } , { 29796 , -1390 } , { 29789 , -1537 } , { 29781 , -1683 } , { 29772 , -1829 } , { 29763 , -1975 } , { 29753 , -2121 } , { 29742 , -2267 } , { 29730 , -2413 } , { 29718 , -2559 } , { 29705 , -2705 } , { 29692 , -2851 } , { 29677 , -2997 } , { 29662 , -3142 } , { 29646 , -3288 } , { 29630 , -3433 } , { 29613 , -3579 } , { 29595 , -3724 } , { 29576 , -3869 } , { 29557 , -4014 } , { 29537 , -4159 } , { 29516 , -4304 } , { 29494 , -4449 } , { 29472 , -4594 } , { 29449 , -4738 } , { 29426 , -4883 } , { 29401 , -5027 } , { 29376 , -5172 } , { 29351 , -5316 } , { 29324 , -5460 } , { 29297 , -5604 } , { 29269 , -5747 } , { 29241 , -5891 } , { 29211 , -6034 } , { 29181 , -6178 } , { 29151 , -6321 } , { 29119 , -6464 } , { 29087 , -6607 } , { 29054 , -6749 } , { 29021 , -6892 } , { 28987 , -7034 } , { 28952 , -7177 } , { 28916 , -7319 } , { 28880 , -7460 } , { 28843 , -7602 } , { 28805 , -7744 } , { 28767 , -7885 } , { 28728 , -8026 } , { 28688 , -8167 } , { 28648 , -8308 } , { 28607 , -8448 } , { 28565 , -8589 } , { 28522 , -8729 } , { 28479 , -8869 } , { 28435 , -9008 } , { 28391 , -9148 } , { 28346 , -9287 } , { 28300 , -9426 } , { 28253 , -9565 } , { 28206 , -9703 } , { 28158 , -9842 } , { 28109 , -9980 } , { 28060 , -10118 } , { 28010 , -10255 } , { 27959 , -10393 } , { 27908 , -10530 } , { 27856 , -10667 } , { 27803 , -10803 } , { 27750 , -10940 } , { 27696 , -11076 } , { 27641 , -11212 } , { 27586 , -11347 } , { 27529 , -11482 } , { 27473 , -11617 } , { 27415 , -11752 } , { 27357 , -11886 } , { 27299 , -12021 } , { 27239 , -12154 } , { 27179 , -12288 } , { 27119 , -12421 } , { 27057 , -12554 } , { 26996 , -12687 } , { 26933 , -12819 } , { 26870 , -12951 } , { 26806 , -13083 } , { 26741 , -13215 } , { 26676 , -13346 } , { 26610 , -13476 } , { 26544 , -13607 } , { 26477 , -13737 } , { 26409 , -13867 } , { 26340 , -13996 } , { 26271 , -14125 } , { 26202 , -14254 } , { 26132 , -14383 } , { 26061 , -14511 } , { 25989 , -14638 } , { 25917 , -14766 } , { 25844 , -14893 } , { 25771 , -15020 } , { 25697 , -15146 } , { 25622 , -15272 } , { 25547 , -15397 } , { 25471 , -15523 } , { 25394 , -15648 } , { 25317 , -15772 } , { 25239 , -15896 } , { 25161 , -16020 } , { 25082 , -16143 } , { 25003 , -16266 } , { 24923 , -16389 } , { 24842 , -16511 } , { 24760 , -16632 } , { 24678 , -16754 } , { 24596 , -16875 } , { 24513 , -16995 } , { 24429 , -17115 } , { 24345 , -17235 } , { 24260 , -17354 } , { 24174 , -17473 } , { 24088 , -17592 } , { 24002 , -17710 } , { 23914 , -17827 } , { 23827 , -17945 } , { 23738 , -18061 } , { 23649 , -18178 } , { 23560 , -18293 } , { 23470 , -18409 } , { 23379 , -18524 } , { 23288 , -18638 } , { 23196 , -18752 } , { 23104 , -18866 } , { 23011 , -18979 } , { 22917 , -19092 } , { 22824 , -19204 } , { 22729 , -19316 } , { 22634 , -19427 } , { 22538 , -19538 } , { 22442 , -19649 } , { 22345 , -19759 } , { 22248 , -19868 } , { 22150 , -19977 } , { 22052 , -20086 } , { 21953 , -20194 } , { 21854 , -20301 } , { 21754 , -20408 } , { 21653 , -20515 } , { 21552 , -20621 } , { 21451 , -20726 } , { 21349 , -20831 } , { 21246 , -20936 } , { 21143 , -21040 } }; cos_msin_t a_cos_msin_64[320] = { {29827, -34}, {29827, -106}, {29827, -177}, {29827, -249}, {29826, -320}, {29825, -392}, {29824, -463}, {29823, -535}, {29821, -606}, {29819, -678}, {29818, -750}, {29816, -821}, {29814, -893}, {29812, -964}, {29809, -1035}, {29807, -1106}, {29804, -1177}, {29801, -1249}, {29797, -1320}, {29795, -1392}, {29791, -1463}, {29787, -1535}, {29784, -1606}, {29780, -1678}, {29776, -1749}, {29771, -1820}, {29767, -1892}, {29763, -1963}, {29758, -2035}, {29753, -2106}, {29748, -2177}, {29742, -2249}, {29737, -2320}, {29731, -2391}, {29726, -2462}, {29719, -2534}, {29713, -2605}, {29707, -2676}, {29701, -2747}, {29694, -2819}, {29686, -2890}, {29680, -2961}, {29673, -3032}, {29665, -3103}, {29658, -3174}, {29650, -3245}, {29643, -3316}, {29635, -3387}, {29626, -3459}, {29618, -3529}, {29610, -3600}, {29601, -3671}, {29592, -3742}, {29583, -3813}, {29574, -3884}, {29564, -3955}, {29554, -4026}, {29544, -4097}, {29535, -4167}, {29525, -4238}, {29514, -4309}, {29504, -4380}, {29493, -4450}, {29483, -4521}, {29472, -4591}, {29461, -4662}, {29450, -4733}, {29439, -4803}, {29427, -4874}, {29415, -4944}, {29403, -5015}, {29391, -5085}, {29379, -5155}, {29366, -5226}, {29353, -5296}, {29341, -5367}, {29328, -5438}, {29314, -5508}, {29301, -5578}, {29289, -5648}, {29274, -5718}, {29260, -5788}, {29247, -5858}, {29232, -5928}, {29218, -5998}, {29204, -6068}, {29188, -6139}, {29175, -6209}, {29159, -6279}, {29145, -6348}, {29128, -6418}, {29114, -6488}, {29097, -6557}, {29082, -6627}, {29066, -6697}, {29050, -6767}, {29034, -6837}, {29017, -6906}, {29001, -6975}, {28984, -7045}, {28966, -7114}, {28950, -7184}, {28933, -7254}, {28915, -7323}, {28897, -7392}, {28880, -7461}, {28862, -7530}, {28843, -7600}, {28825, -7669}, {28807, -7738}, {28788, -7806}, {28769, -7875}, {28751, -7944}, {28732, -8014}, {28712, -8082}, {28692, -8151}, {28672, -8219}, {28653, -8289}, {28633, -8357}, {28613, -8425}, {28593, -8494}, {28572, -8563}, {28551, -8632}, {28531, -8700}, {28510, -8768}, {28488, -8837}, {28468, -8905}, {28447, -8973}, {28425, -9041}, {28403, -9109}, {28381, -9177}, {28359, -9245}, {28336, -9313}, {28315, -9381}, {28292, -9448}, {28269, -9517}, {28246, -9584}, {28223, -9652}, {28200, -9720}, {28176, -9787}, {28153, -9854}, {28129, -9922}, {28105, -9990}, {28082, -10056}, {28057, -10124}, {28032, -10191}, {28009, -10258}, {27984, -10326}, {27959, -10392}, {27934, -10460}, {27909, -10526}, {27883, -10593}, {27858, -10661}, {27832, -10727}, {27807, -10794}, {27780, -10860}, {27754, -10927}, {27728, -10993}, {27701, -11059}, {27676, -11126}, {27648, -11192}, {27622, -11259}, {27595, -11324}, {27567, -11391}, {27540, -11456}, {27512, -11523}, {27484, -11588}, {27456, -11655}, {27429, -11720}, {27401, -11786}, {27372, -11852}, {27344, -11917}, {27315, -11982}, {27286, -12049}, {27257, -12114}, {27229, -12179}, {27199, -12244}, {27169, -12309}, {27140, -12375}, {27110, -12439}, {27080, -12505}, {27050, -12570}, {27019, -12634}, {26990, -12699}, {26958, -12764}, {26928, -12828}, {26897, -12892}, {26866, -12956}, {26835, -13021}, {26804, -13086}, {26773, -13149}, {26741, -13214}, {26709, -13278}, {26677, -13342}, {26645, -13406}, {26613, -13470}, {26581, -13534}, {26549, -13597}, {26515, -13661}, {26483, -13725}, {26450, -13788}, {26417, -13851}, {26384, -13915}, {26350, -13978}, {26316, -14041}, {26283, -14103}, {26248, -14166}, {26215, -14229}, {26180, -14292}, {26146, -14355}, {26112, -14417}, {26077, -14480}, {26042, -14543}, {26008, -14605}, {25972, -14667}, {25937, -14730}, {25901, -14792}, {25866, -14854}, {25830, -14916}, {25794, -14977}, {25759, -15039}, {25723, -15101}, {25687, -15162}, {25650, -15224}, {25613, -15286}, {25577, -15347}, {25540, -15408}, {25503, -15470}, {25465, -15531}, {25428, -15592}, {25391, -15653}, {25353, -15714}, {25315, -15774}, {25277, -15834}, {25240, -15895}, {25201, -15956}, {25162, -16016}, {25124, -16076}, {25086, -16136}, {25047, -16196}, {25008, -16256}, {24969, -16316}, {24930, -16375}, {24891, -16436}, {24851, -16496}, {24811, -16555}, {24772, -16615}, {24732, -16674}, {24692, -16732}, {24652, -16791}, {24612, -16852}, {24572, -16911}, {24531, -16969}, {24490, -17027}, {24449, -17086}, {24408, -17145}, {24367, -17203}, {24325, -17261}, {24284, -17320}, {24242, -17379}, {24200, -17436}, {24158, -17494}, {24116, -17552}, {24075, -17610}, {24032, -17668}, {23990, -17725}, {23947, -17782}, {23904, -17840}, {23862, -17897}, {23819, -17954}, {23775, -18011}, {23732, -18068}, {23689, -18125}, {23645, -18181}, {23602, -18238}, {23558, -18294}, {23514, -18351}, {23470, -18407}, {23426, -18464}, {23381, -18520}, {23337, -18576}, {23293, -18632}, {23248, -18688}, {23202, -18743}, {23158, -18799}, {23112, -18854}, {23068, -18910}, {23022, -18964}, {22977, -19020}, {22931, -19074}, {22885, -19129}, {22839, -19185}, {22793, -19239}, {22747, -19294}, {22700, -19348}, {22655, -19403}, {22607, -19457}, {22561, -19511}, {22514, -19565}, {22467, -19619}, {22421, -19673}, {22373, -19726}, {22326, -19780}, {22279, -19834}, {22230, -19887}, {22183, -19940}, {22135, -19993}, {22087, -20047}, {22039, -20099}, {21991, -20152}, {21942, -20205}, {21894, -20257}, {21845, -20309}, {21797, -20362}, {21748, -20413}, {21699, -20466}, {21650, -20518}, {21601, -20570}, {21551, -20621}, {21502, -20674} }; cos_msin_t *a_cos_msin_table[] = {a_cos_msin_2, a_cos_msin_4, a_cos_msin_8, a_cos_msin_16, a_cos_msin_32,a_cos_msin_64 }; Word16 dct_core_a[10][10] = { { 10453, 10196, 9688, 8941, 7973, 6810, 5479, 4013, 2448, 823 }, { 10196, 7973, 4013, -823, -5479, -8941, -10453, -9688, -6810, -2448 }, { 9688 , 4013, -4013, -9688, -9688, -4013, 4013, 9688, 9688, 4013 }, { 8941 , -823, -9688, -7973, 2448, 10196, 6810, -4013, -10453, -5479 }, { 7973 , -5479, -9688, 2448, 10453, 823, -10196, -4013, 8941, 6810 }, { 6810 , -8941, -4013, 10196, 823, -10453, 2448, 9688, -5479, -7973 }, { 5479 , -10453, 4013, 6810, -10196, 2448, 7973, -9688, 823, 8941 }, { 4013 , -9688, 9688, -4013, -4013, 9688, -9688, 4013, 4013, -9688 }, { 2448 , -6810, 9688, -10453, 8941, -5479, 823, 4013, -7973, 10196 }, { 823 , -2448, 4013, -5479, 6810, -7973, 8941, -9688, 10196, -10453 }}; Word16 anal_bias[320] = { 1, 1, 3, 1, 4, 1, 3, -2, 4, 3, 4, 1, 3, 0, 2, -3, 0, 0, 2, 2, 4, 1, 1, -5, 4, 1, 2, -1, 0, -1, 1, -2, 0, 2, 2, 2, 4, 1, 3, 0, 5, 3, 2, 0, 3, 0, 1, -4, 1, 1, 2, 0, 4, 0, 1, -4, 6, 1, 3, -1, 1, 0, 0, -4, 1, 1, 3, 1, 3, 2, 4, -2, 4, 3, 5, 1, 3, 0, 1, -3, 1, 1, 2, 0, 4, 1, 2, -4, 4, 2, 2, -1, 1, -1, 1, -4, 0, 0, 3, 0, 5, 2, 3, -1, 6, 2, 5, 0, 4, 0, 1, -3, 1, 0, 3, 0, 4, 0, 1, -3, 4, 1, 3, -1, 1, -2, 1, -4, 0, 1, 2, 1, 3, 2, 2, -2, 4, 3, 3, 0, 3, 0, 0, -2, 1, 0, 2, 0, 5, -1, 1, -3, 4, 2, 2, 0, 2, -3, 1, -4, -1, 1, 2, 2, 4, 1, 3, -1, 5, 2, 2, 0, 3, -1, 2, -3, 0, 1, 2, 2, 4, 0, 1, -5, 5, 1, 3, 0, 2, -1, 0, -2, 1, 2, 2, 2, 4, 1, 0, 0, 4, 2, 4, 1, 4, -1, 1, -4, 0, 1, 3, 1, 5, 1, 1, -2, 4, 0, 2, 0, 2, -1, 0, -2, 0, 1, 1, 1, 4, 2, 3, -2, 5, 4, 4, 0, 3, 0, 3, -4, 1, 2, 2, 0, 4, 1, 0, -3, 4, 2, 3, -1, 1, -1, 1, -4, 0, 2, 3, 1, 4, 1, 3, 0, 3, 3, 4, 1, 2, 0, 1, -3, 2, 2, 2, 1, 5, 0, 1, -4, 4, 1, 3, -2, 3, -1, 0, -2, 0, 2, 2, 0, 5, 1, 4, -1, 4, 3, 4, 1, 3, 0, 1, -4, 2, 0, 3, 1, 5, 0, 1, -5, 5, 2, 2, 0, 0, 0, 0, -4}; h323plus/plugins/audio/G.722.1/G722-1/decoder.c0000644000175000017500000011351211341106231017052 0ustar markmark/*************************************************************************** ** ** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C ** > Software Release 2.1 (2008-06) ** (Simple repackaging; no change from 2005-05 Release 2.0 code) ** ** Љ 2004 Polycom, Inc. ** ** All rights reserved. ** ***************************************************************************/ /*************************************************************************** Filename: decoder.c Purpose: Contains files used to implement the G.722.1 Annex C decoder Design Notes: ***************************************************************************/ /*************************************************************************** Include files ***************************************************************************/ #include "defs.h" #include "tables.h" #include "huff_def.h" #include "count.h" /*************************************************************************** Function: decoder Syntax: void decoder(Bit_Obj *bitobj, Rand_Obj *randobj, Word16 number_of_regions, Word16 *decoder_mlt_coefs, Word16 *p_mag_shift, Word16 *p_old_mag_shift, Word16 *old_decoder_mlt_coefs, Word16 frame_error_flag) inputs: Bit_Obj *bitobj Rand_Obj *randobj Word16 number_of_regions Word16 *p_old_mag_shift Word16 *old_decoder_mlt_coefs Word16 frame_error_flag outputs: Word16 *decoder_mlt_coefs, Word16 *p_mag_shift, Description: Decodes the out_words into mlt coefs using G.722.1 Annex C Design Notes: WMOPS: 7kHz | 24kbit | 32kbit -------|-------------|---------------- AVG | 0.84 | 0.94 -------|-------------|---------------- MAX | 0.90 | 1.00 -------|-------------|---------------- 14kHz | 24kbit | 32kbit | 48kbit -------|-------------|----------------|---------------- AVG | 1.31 | 1.56 | 1.88 -------|-------------|----------------|---------------- MAX | 1.59 | 1.80 | 1.98 -------|-------------|----------------|---------------- ***************************************************************************/ void decoder(Bit_Obj *bitobj, Rand_Obj *randobj, Word16 number_of_regions, Word16 *decoder_mlt_coefs, Word16 *p_mag_shift, Word16 *p_old_mag_shift, Word16 *old_decoder_mlt_coefs, Word16 frame_error_flag) { Word16 absolute_region_power_index[MAX_NUMBER_OF_REGIONS]; Word16 decoder_power_categories[MAX_NUMBER_OF_REGIONS]; Word16 decoder_category_balances[MAX_NUM_CATEGORIZATION_CONTROL_POSSIBILITIES-1]; UWord16 categorization_control; Word16 decoder_region_standard_deviation[MAX_NUMBER_OF_REGIONS]; Word16 i; Word16 num_categorization_control_bits; Word16 num_categorization_control_possibilities; Word16 number_of_coefs; Word16 number_of_valid_coefs; test(); if (number_of_regions==NUMBER_OF_REGIONS) { num_categorization_control_bits = NUM_CATEGORIZATION_CONTROL_BITS; move16(); num_categorization_control_possibilities = NUM_CATEGORIZATION_CONTROL_POSSIBILITIES; move16(); number_of_coefs = DCT_LENGTH; move16(); number_of_valid_coefs = NUMBER_OF_VALID_COEFS; move16(); } else { num_categorization_control_bits = MAX_NUM_CATEGORIZATION_CONTROL_BITS; move16(); num_categorization_control_possibilities = MAX_NUM_CATEGORIZATION_CONTROL_POSSIBILITIES; move16(); number_of_coefs = MAX_DCT_LENGTH; move16(); number_of_valid_coefs = MAX_NUMBER_OF_VALID_COEFS; move16(); } test(); if (frame_error_flag == 0) { /* convert the bits to absolute region power index and decoder_region_standard_deviation */ decode_envelope(bitobj, number_of_regions, decoder_region_standard_deviation, absolute_region_power_index, p_mag_shift); /* fill the categorization_control with NUM_CATEGORIZATION_CONTROL_BITS */ categorization_control = 0; for (i=0; inext_bit); } bitobj->number_of_bits_left = sub(bitobj->number_of_bits_left,num_categorization_control_bits); /* obtain decoder power categories and category balances */ /* based on the absolute region power index */ categorize(bitobj->number_of_bits_left, number_of_regions, num_categorization_control_possibilities, absolute_region_power_index, decoder_power_categories, decoder_category_balances); /* perform adjustmaents to the power categories and category balances based on the cat control */ rate_adjust_categories(categorization_control, decoder_power_categories, decoder_category_balances); /* decode the quantized bits into mlt coefs */ decode_vector_quantized_mlt_indices(bitobj, randobj, number_of_regions, decoder_region_standard_deviation, decoder_power_categories, decoder_mlt_coefs); /* test for frame errors */ test_4_frame_errors(bitobj, number_of_regions, num_categorization_control_possibilities, &frame_error_flag, categorization_control, absolute_region_power_index); } /* perform error handling operations */ error_handling(number_of_coefs, number_of_valid_coefs, &frame_error_flag, decoder_mlt_coefs, old_decoder_mlt_coefs, p_mag_shift, p_old_mag_shift); } /*************************************************************************** Function: decode_envelope Syntax: void decode_envelope(Bit_Obj *bitobj, Word16 number_of_regions, Word16 *decoder_region_standard_deviation, Word16 *absolute_region_power_index, Word16 *p_mag_shift) inputs: Bit_Obj *bitobj Word16 number_of_regions outputs: Word16 *decoder_region_standard_deviation Word16 *absolute_region_power_index Word16 *p_mag_shift Description: Recover differential_region_power_index from code bits Design Notes: WMOPS: 7kHz | 24kbit | 32kbit -------|--------------|---------------- AVG | 0.04 | 0.04 -------|--------------|---------------- MAX | 0.05 | 0.05 -------|--------------|---------------- 14kHz | 24kbit | 32kbit | 48kbit -------|--------------|----------------|---------------- AVG | 0.08 | 0.08 | 0.08 -------|--------------|----------------|---------------- MAX | 0.10 | 0.10 | 0.10 -------|--------------|----------------|---------------- ***************************************************************************/ void decode_envelope(Bit_Obj *bitobj, Word16 number_of_regions, Word16 *decoder_region_standard_deviation, Word16 *absolute_region_power_index, Word16 *p_mag_shift) { Word16 region; Word16 i; Word16 index; Word16 differential_region_power_index[MAX_NUMBER_OF_REGIONS]; Word16 max_index; Word16 temp; Word16 temp1; Word16 temp2; Word32 acca; index = 0; move16(); /* get 5 bits from the current code word */ for (i=0; i<5; i++) { get_next_bit(bitobj); index = shl(index,1); index = add(index,bitobj->next_bit); } bitobj->number_of_bits_left = sub(bitobj->number_of_bits_left,5); /* ESF_ADJUSTMENT_TO_RMS_INDEX compensates for the current (9/30/96) IMLT being scaled to high by the ninth power of sqrt(2). */ differential_region_power_index[0] = sub(index,ESF_ADJUSTMENT_TO_RMS_INDEX); move16(); /* obtain differential_region_power_index */ for (region=1; regionnext_bit == 0) { index = differential_region_power_decoder_tree[region][index][0]; move16(); } else { index = differential_region_power_decoder_tree[region][index][1]; move16(); } bitobj->number_of_bits_left = sub(bitobj->number_of_bits_left,1); test(); } while (index > 0); differential_region_power_index[region] = negate(index); move16(); } /* Reconstruct absolute_region_power_index[] from differential_region_power_index[]. */ absolute_region_power_index[0] = differential_region_power_index[0]; move16(); for (region=1; region 0) { max_index = i; move16(); } temp = add(temp,int_region_standard_deviation_table[i]); } i = 9; move16(); temp1 = sub(temp,8); temp2 = sub(max_index,28); test(); test(); logic16(); test(); logic16(); while ((i >= 0) && ((temp1 >= 0) || (temp2 > 0))) { i = sub(i,1); temp = shr(temp,1); max_index = sub(max_index,2); temp1 = sub(temp,8); temp2 = sub(max_index,28); test(); test(); logic16(); test(); logic16(); } *p_mag_shift = i; move16(); /* pointer arithmetic */ temp = (Word16 )(REGION_POWER_TABLE_NUM_NEGATIVES + (*p_mag_shift * 2)); for (region=0; region 0) { region = decoder_category_balances[i++]; move16(); decoder_power_categories[region] = add(decoder_power_categories[region],1); move16(); categorization_control = sub(categorization_control,1); } } /*************************************************************************** Function: decode_vector_quantized_mlt_indices Syntax: void decode_vector_quantized_mlt_indices(Bit_Obj *bitobj, Rand_Obj *randobj, Word16 number_of_regions, Word16 *decoder_region_standard_deviation, Word16 *decoder_power_categories, Word16 *decoder_mlt_coefs) inputs: Bit_Obj *bitobj Rand_Obj *randobj Word16 number_of_regions Word16 *decoder_region_standard_deviation Word16 *decoder_power_categories outputs: Word16 *decoder_mlt_coefs Description: Decode MLT coefficients Design Notes: WMOPS: 7kHz | 24kbit | 32kbit -------|--------------|---------------- AVG | 0.60 | 0.72 -------|--------------|---------------- MAX | 0.67 | 0.76 -------|--------------|---------------- 14kHz | 24kbit | 32kbit | 48kbit -------|--------------|----------------|---------------- AVG | 0.77 | 0.98 | 1.28 -------|--------------|----------------|---------------- MAX | 1.05 | 1.18 | 1.36 -------|--------------|----------------|---------------- ***************************************************************************/ void decode_vector_quantized_mlt_indices(Bit_Obj *bitobj, Rand_Obj *randobj, Word16 number_of_regions, Word16 *decoder_region_standard_deviation, Word16 *decoder_power_categories, Word16 *decoder_mlt_coefs) { Word16 standard_deviation; Word16 *decoder_mlt_ptr; Word16 decoder_mlt_value; Word16 noifillpos; Word16 noifillneg; Word16 noise_fill_factor[3] = {5793,8192,23170}; Word16 region; Word16 category; Word16 j,n; Word16 k[MAX_VECTOR_DIMENSION]; Word16 vec_dim; Word16 num_vecs; Word16 index; Word16 signs_index; Word16 bit; Word16 num_sign_bits; Word16 ran_out_of_bits_flag; Word16 *decoder_table_ptr; Word16 random_word; Word16 temp1; Word16 temp; Word32 acca; ran_out_of_bits_flag = 0; move16(); for (region=0; regionnumber_of_bits_left <= 0) { ran_out_of_bits_flag = 1; move16(); break; } get_next_bit(bitobj); test(); if (bitobj->next_bit == 0) { temp = shl(index,1); index = (Word16)*(decoder_table_ptr + temp); move16(); } else { temp = shl(index,1); index = (Word16)*(decoder_table_ptr + temp + 1); move16(); } bitobj->number_of_bits_left = sub(bitobj->number_of_bits_left,1); test(); } while (index > 0); test(); if (ran_out_of_bits_flag != 0) break; index = negate(index); /* convert index into array used to access the centroid table */ /* get the number of sign bits in the index */ num_sign_bits = index_to_array(index,k,category); temp = sub(bitobj->number_of_bits_left,num_sign_bits); test(); if (temp >= 0) { test(); if (num_sign_bits != 0) { signs_index = 0; move16(); for (j=0; jnext_bit); bitobj->number_of_bits_left = sub(bitobj->number_of_bits_left,1); } temp = sub(num_sign_bits,1); bit = shl(1,(temp)); } for (j=0; jnumber_of_bits_left = sub(bitobj->number_of_bits_left,1); } /**************************************************************************************** Function: index_to_array Syntax: number_of_non_zero = index_to_array(Word16 index, Word16 array[MAX_VECTOR_DIMENSION], Word16 category) inputs: Word16 index Word16 category outputs: Word16 array[MAX_VECTOR_DIMENSION] - used in decoder to access mlt_quant_centroid table Word16 number_of_non_zero - number of non zero elements in the array Description: Computes an array of sign bits with the length of the category vector Returns the number of sign bits and the array WMOPS: 7kHz | 24kbit | 32kbit -------|--------------|---------------- AVG | 0.00 | 0.00 -------|--------------|---------------- MAX | 0.00 | 0.00 -------|--------------|---------------- 14kHz | 24kbit | 32kbit | 48kbit -------|--------------|----------------|---------------- AVG | 0.00 | 0.00 | 0.00 -------|--------------|----------------|---------------- MAX | 0.00 | 0.00 | 0.00 -------|--------------|----------------|---------------- ****************************************************************************************/ Word16 index_to_array(Word16 index,Word16 *array,Word16 category) { Word16 j,q,p; Word16 number_of_non_zero; Word16 max_bin_plus_one; Word16 inverse_of_max_bin_plus_one; Word16 temp; number_of_non_zero = 0; move16(); p = index; move16(); max_bin_plus_one = add(max_bin[category],1); inverse_of_max_bin_plus_one = max_bin_plus_one_inverse[category]; move16(); temp = sub(vector_dimension[category],1); for (j=temp; j>=0; j--) { q = mult(p,inverse_of_max_bin_plus_one); temp = extract_l(L_mult0(q,max_bin_plus_one)); array[j] = sub(p,temp); move16(); p = q; move16(); temp = array[j]; move16(); test(); if (temp != 0) number_of_non_zero = add(number_of_non_zero,1); } return(number_of_non_zero); } /*************************************************************************** Function: test_4_frame_errors Syntax: void test_4_frame_errors(Bit_Obj *bitobj, Word16 number_of_regions, Word16 num_categorization_control_possibilities, Word16 *frame_error_flag, Word16 categorization_control, Word16 *absolute_region_power_index) inputs: bit_obj number_of_regions num_categorization_control_possibilities frame_error_flag categorization_control absolute_region_power_index outputs: frame_error_flag Description: Tests for error conditions and sets the frame_error_flag accordingly Design Notes: WMOPS: 7kHz | 24kbit | 32kbit -------|--------------|---------------- AVG | 0.01 | 0.01 -------|--------------|---------------- MAX | 0.04 | 0.08 -------|--------------|---------------- 14kHz | 24kbit | 32kbit | 48kbit -------|--------------|----------------|---------------- AVG | 0.01 | 0.01 | 0.01 -------|--------------|----------------|---------------- MAX | 0.02 | 0.06 | 0.08 -------|--------------|----------------|---------------- ***************************************************************************/ void test_4_frame_errors(Bit_Obj *bitobj, Word16 number_of_regions, Word16 num_categorization_control_possibilities, Word16 *frame_error_flag, Word16 categorization_control, Word16 *absolute_region_power_index) { Word16 region; Word16 i; Word16 temp; Word32 acca; Word32 accb; /* Test for bit stream errors. */ test(); if (bitobj->number_of_bits_left > 0) { for (i=0; inumber_of_bits_left; i++) { get_next_bit(bitobj); test(); if (bitobj->next_bit == 0) { *frame_error_flag = 1; move16(); } } } else { temp = sub(categorization_control,sub(num_categorization_control_possibilities,1)); test(); if (temp < 0) { test(); if (bitobj->number_of_bits_left < 0) { *frame_error_flag |= 2; logic16(); } } } /* checks to ensure that abs_region_power_index is within range */ /* the error flag is set if it is out of range */ for (region=0; region 31) || (absolute_region_power_index[region] < -8) */ acca = L_add(absolute_region_power_index[region],ESF_ADJUSTMENT_TO_RMS_INDEX); accb = L_sub(acca,31); acca = L_add(acca,8); test(); /* the next line was modifed in release 1.2 to * correct miss typed code and error checking. */ if ((accb > 0) || (acca < 0)) { *frame_error_flag |= 4; logic16(); } } } /*************************************************************************** Function: error_handling Syntax: void error_handling(Word16 number_of_coefs, Word16 number_of_valid_coefs, Word16 *frame_error_flag, Word16 *decoder_mlt_coefs, Word16 *old_decoder_mlt_coefs, Word16 *p_mag_shift, Word16 *p_old_mag_shift) inputs: number_of_coefs number_of_valid_coefs frame_error_flag old_decoder_mlt_coefs p_old_mag_shift outputs: decoder_mlt_coefs old_decoder_mlt_coefs p_mag_shift p_old_mag_shift Description: If both the current and previous frames are errored, set the mlt coefficients to 0. If only the current frame is errored, then repeat the previous frame's mlt coefficients. Design Notes: WMOPS: 7kHz | 24kbit | 32kbit -------|--------------|---------------- AVG | 0.02 | 0.02 -------|--------------|---------------- MAX | 0.03 | 0.03 -------|--------------|---------------- 14kHz | 24kbit | 32kbit | 48kbit -------|--------------|----------------|---------------- AVG | 0.03 | 0.03 | 0.03 -------|--------------|----------------|---------------- MAX | 0.03 | 0.03 | 0.06 -------|--------------|----------------|---------------- ***************************************************************************/ void error_handling(Word16 number_of_coefs, Word16 number_of_valid_coefs, Word16 *frame_error_flag, Word16 *decoder_mlt_coefs, Word16 *old_decoder_mlt_coefs, Word16 *p_mag_shift, Word16 *p_old_mag_shift) { Word16 i; test(); if (*frame_error_flag != 0) { for (i = 0; i < number_of_valid_coefs; i++) { decoder_mlt_coefs[i] = old_decoder_mlt_coefs[i]; move16(); } for (i = 0; i < number_of_valid_coefs; i++) { old_decoder_mlt_coefs[i] = 0; move16(); } *p_mag_shift = *p_old_mag_shift; move16(); *p_old_mag_shift = 0; move16(); } else { /* Store in case next frame is errored. */ for (i = 0; i < number_of_valid_coefs; i++) { old_decoder_mlt_coefs[i] = decoder_mlt_coefs[i]; move16(); } *p_old_mag_shift = *p_mag_shift; move16(); } /* Zero out the upper 1/8 of the spectrum. */ for (i = number_of_valid_coefs; i < number_of_coefs; i++) { decoder_mlt_coefs[i] = 0; move16(); } } /**************************************************************************************** Function: get_next_bit Syntax: void get_next_bit(Bit_Obj *bitobj) Description: Returns the next bit in the current word inside the bit object WMOPS: 7kHz | 24kbit | 32kbit -------|--------------|---------------- AVG | 0.00 | 0.00 -------|--------------|---------------- MAX | 0.00 | 0.00 -------|--------------|---------------- 14kHz | 24kbit | 32kbit | 48kbit -------|--------------|----------------|---------------- AVG | 0.00 | 0.00 | 0.00 -------|--------------|----------------|---------------- MAX | 0.00 | 0.00 | 0.00 -------|--------------|----------------|---------------- ****************************************************************************************/ void get_next_bit(Bit_Obj *bitobj) { Word16 temp; test(); if (bitobj->code_bit_count == 0) { bitobj->current_word = *bitobj->code_word_ptr++; move16(); bitobj->code_bit_count = 16; move16(); } bitobj->code_bit_count = sub(bitobj->code_bit_count,1); temp = shr(bitobj->current_word,bitobj->code_bit_count); logic16(); bitobj->next_bit = (Word16 )(temp & 1); } /**************************************************************************************** Function: get_rand Syntax: Word16 get_rand(Rand_Obj *randobj) Description: Returns a random Word16 based on the seeds inside the rand object WMOPS: 7kHz | 24kbit | 32kbit -------|--------------|---------------- AVG | 0.00 | 0.00 -------|--------------|---------------- MAX | 0.00 | 0.00 -------|--------------|---------------- 14kHz | 24kbit | 32kbit | 48kbit -------|--------------|----------------|---------------- AVG | 0.00 | 0.00 | 0.00 -------|--------------|----------------|---------------- MAX | 0.00 | 0.00 | 0.00 -------|--------------|----------------|---------------- ****************************************************************************************/ Word16 get_rand(Rand_Obj *randobj) { Word16 random_word; Word32 acca; acca = L_add(randobj->seed0,randobj->seed3); random_word = extract_l(acca); logic16(); test(); if ((random_word & 32768L) != 0) random_word = add(random_word,1); randobj->seed3 = randobj->seed2; move16(); randobj->seed2 = randobj->seed1; move16(); randobj->seed1 = randobj->seed0; move16(); randobj->seed0 = random_word; move16(); return(random_word); } h323plus/plugins/audio/G.722.1/G722-1/count.c0000644000175000017500000001541211341106231016575 0ustar markmark/* *************************************************************************** * * This file contains functions for the automatic complexity calculation * $Id $ *************************************************************************** */ #include #include #include #include "typedef.h" #include "count.h" /* Global counter variable for calculation of complexity weight */ BASIC_OP multiCounter[MAXCOUNTERS]; int currCounter=0; /* Zero equals global counter */ /*BASIC_OP counter;*/ const BASIC_OP op_weight = { /* G.729 & G.723.1 common operators */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 4, 15, 18, 30, 1, 2, 1, 2, 2, /* G.723.1 exclusives */ 6, 1, 1, /* shiftless 32-bit operators */ 1, 1, 1, /* G.722.1 exclusives */ 1, 1 }; /* function prototypes */ Word32 TotalWeightedOperation (void); Word32 DeltaWeightedOperation (void); /* local variable */ #if WMOPS /* Counters for separating counting for different objects */ static int maxCounter=0; static char* objectName[MAXCOUNTERS+1]; static Word16 fwc_corr[MAXCOUNTERS+1]; #define NbFuncMax 1024 static Word16 funcid[MAXCOUNTERS], nbframe[MAXCOUNTERS]; static Word32 glob_wc[MAXCOUNTERS], wc[MAXCOUNTERS][NbFuncMax]; static float total_wmops[MAXCOUNTERS]; static Word32 LastWOper[MAXCOUNTERS]; static char* my_strdup(const char *s) /* * duplicates UNIX function strdup() which is not ANSI standard: * -- malloc() memory area big enough to hold the string s * -- copy string into new area * -- return pointer to new area * * returns NULL if either s==NULL or malloc() fails */ { char *dup; if (s == NULL) return NULL; /* allocate memory for copy of ID string (including string terminator) */ /* NOTE: the ID strings will never be deallocated because there is no way to "destroy" a counter that is not longer needed */ if ((dup = (char *) malloc(strlen(s)+1)) == NULL) return NULL; return strcpy(dup, s); } #endif int getCounterId(char *objectNameArg) { #if WMOPS if(maxCounter>=MAXCOUNTERS-1) return 0; objectName[++maxCounter]=my_strdup(objectNameArg); return maxCounter; #else return 0; /* Dummy */ #endif } void setCounter(int counterId) { #if WMOPS if(counterId>maxCounter || counterId<0) { currCounter=0; return; } currCounter=counterId; #endif } #if WMOPS static Word32 WMOPS_frameStat() /* calculate the WMOPS seen so far and update the global per-frame maximum (glob_wc) */ { Word32 tot; tot = TotalWeightedOperation (); if (tot > glob_wc[currCounter]) glob_wc[currCounter] = tot; /* check if fwc() was forgotten at end of last frame */ if (tot > LastWOper[currCounter]) { if (!fwc_corr[currCounter]) { fprintf(stderr, "count: operations counted after last fwc() for '%s'; " "-> fwc() called\n", objectName[currCounter]?objectName[currCounter]:""); } fwc(); } return tot; } static void WMOPS_clearMultiCounter() { Word16 i; Word32 *ptr = (Word32 *) &multiCounter[currCounter]; for (i = 0; i < (sizeof (multiCounter[currCounter])/ sizeof (Word32)); i++) { *ptr++ = 0; } } #endif Word32 TotalWeightedOperation () { #if WMOPS Word16 i; Word32 tot, *ptr, *ptr2; tot = 0; ptr = (Word32 *) &multiCounter[currCounter]; ptr2 = (Word32 *) &op_weight; for (i = 0; i < (sizeof (multiCounter[currCounter])/ sizeof (Word32)); i++) { tot += ((*ptr++) * (*ptr2++)); } return ((Word32) tot); #else return 0; /* Dummy */ #endif } Word32 DeltaWeightedOperation () { #if WMOPS Word32 NewWOper, delta; NewWOper = TotalWeightedOperation (); delta = NewWOper - LastWOper[currCounter]; LastWOper[currCounter] = NewWOper; return (delta); #else return 0; /* Dummy */ #endif } void move16 (void) { #if WMOPS multiCounter[currCounter].DataMove16++; #endif } void move32 (void) { #if WMOPS multiCounter[currCounter].DataMove32++; #endif } void test (void) { #if WMOPS multiCounter[currCounter].Test++; #endif } void logic16 (void) { #if WMOPS multiCounter[currCounter].Logic16++; #endif } void logic32 (void) { #if WMOPS multiCounter[currCounter].Logic32++; #endif } void Init_WMOPS_counter (void) { #if WMOPS Word16 i; /* reset function weight operation counter variable */ for (i = 0; i < NbFuncMax; i++) wc[currCounter][i] = (Word32) 0; glob_wc[currCounter] = 0; nbframe[currCounter] = 0; total_wmops[currCounter] = 0.0; /* initially clear all counters */ WMOPS_clearMultiCounter(); LastWOper[currCounter] = 0; funcid[currCounter] = 0; #endif } void Reset_WMOPS_counter (void) { #if WMOPS Word32 tot = WMOPS_frameStat(); /* increase the frame counter --> a frame is counted WHEN IT BEGINS */ nbframe[currCounter]++; /* add wmops used in last frame to count, then reset counter */ /* (in first frame, this is a no-op */ total_wmops[currCounter] += ((float) tot) * 0.00005; /* clear counter before new frame starts */ WMOPS_clearMultiCounter(); LastWOper[currCounter] = 0; funcid[currCounter] = 0; /* new frame, set function id to zero */ #endif } Word32 fwc (void) /* function worst case */ { #if WMOPS Word32 tot; tot = DeltaWeightedOperation (); if (tot > wc[currCounter][funcid[currCounter]]) wc[currCounter][funcid[currCounter]] = tot; funcid[currCounter]++; return (tot); #else return 0; /* Dummy */ #endif } void WMOPS_output (Word16 dtx_mode) { #if WMOPS Word16 i; Word32 tot, tot_wm, tot_wc; /* get operations since last reset (or init), but do not update the counters (except the glob_wc[] maximum) so output CAN be called in each frame without problems. The frame counter is NOT updated! */ tot = WMOPS_frameStat(); tot_wm = total_wmops[currCounter] + ((float) tot) * 0.00005; fprintf (stdout, "%10s:WMOPS=%.3f", objectName[currCounter]?objectName[currCounter]:"", ((float) tot) * 0.00005); if (nbframe[currCounter] != 0) fprintf (stdout, " Average=%.3f", tot_wm / (float) nbframe[currCounter]); fprintf (stdout, " WorstCase=%.3f", ((float) glob_wc[currCounter]) * 0.00005); /* Worst worst case printed only when not in DTX mode */ if (dtx_mode == 0) { tot_wc = 0L; for (i = 0; i < funcid[currCounter]; i++) tot_wc += wc[currCounter][i]; fprintf (stdout, " WorstWC=%.3f", ((float) tot_wc) * 0.00005); } fprintf (stdout, " (%d frames)\n", nbframe[currCounter]); #endif } h323plus/plugins/audio/G.722.1/G722-1/defs.h0000644000175000017500000001773411341106231016404 0ustar markmark/*********************************************************************** ** ** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C ** > Software Release 2.1 (2008-06) ** (Simple repackaging; no change from 2005-05 Release 2.0 code) ** ** Љ 2004 Polycom, Inc. ** ** All rights reserved. ** ***********************************************************************/ #include #include #include #include "typedef.h" #include "basop32.h" #define PI 3.141592653589793238462 #define MAX_DCT_LENGTH 640 #define DCT_LENGTH 320 #define DCT_LENGTH_DIV_2 160 #define DCT_LENGTH_DIV_4 80 #define DCT_LENGTH_DIV_8 40 #define DCT_LENGTH_DIV_16 20 #define DCT_LENGTH_DIV_32 10 #define DCT_LENGTH_DIV_64 5 #define MAX(a,b) (a > b ? a : b) #define MIN(a,b) (a < b ? a : b) #define NUM_CATEGORIES 8 #define NUM_CATEGORIZATION_CONTROL_BITS 4 #define NUM_CATEGORIZATION_CONTROL_POSSIBILITIES 16 #define CORE_SIZE 10 #define DCT_LENGTH_LOG 6 #define MAX_DCT_LENGTH_LOG 7 /* region_size = (BLOCK_SIZE * 0.875)/NUM_REGIONS; */ #define NUMBER_OF_REGIONS 14 #define MAX_NUMBER_OF_REGIONS 28 #define REGION_SIZE 20 #define NUMBER_OF_VALID_COEFS (NUMBER_OF_REGIONS * REGION_SIZE) #define MAX_NUMBER_OF_VALID_COEFS (MAX_NUMBER_OF_REGIONS * REGION_SIZE) #define REGION_POWER_TABLE_SIZE 64 #define REGION_POWER_TABLE_NUM_NEGATIVES 24 #define MAX_NUM_CATEGORIZATION_CONTROL_BITS 5 #define MAX_NUM_CATEGORIZATION_CONTROL_POSSIBILITIES 32 #define ENCODER_SCALE_FACTOR 18318.0 /* The MLT output is incorrectly scaled by the factor product of ENCODER_SCALE_FACTOR and sqrt(160.) This is now (9/30/96) 1.0/2^(4.5) or 1/22.627. In the current implementation this must be an integer power of sqrt(2). The integer power is ESF_ADJUSTMENT_TO_RMS_INDEX. The -2 is to conform with the range defined in the spec. */ #define ESF_ADJUSTMENT_TO_RMS_INDEX (9-2) #define INTERMEDIATE_FILES_FLAG 0 /* Max bit rate is 48000 bits/sec. */ #define MAX_BITS_PER_FRAME 960 /***************************************************************************/ /* Type definitions */ /***************************************************************************/ typedef struct { Word16 code_bit_count; /* bit count of the current word */ Word16 current_word; /* current word in the bitstream being processed */ Word16 *code_word_ptr; /* pointer to the bitstream */ Word16 number_of_bits_left; /* number of bits left in the current word */ Word16 next_bit; /* next bit in the current word */ }Bit_Obj; typedef struct { Word16 seed0; Word16 seed1; Word16 seed2; Word16 seed3; }Rand_Obj; /***************************************************************************/ /* Function definitions */ /***************************************************************************/ extern Word16 compute_region_powers(Word16 *mlt_coefs, Word16 mag_shift, Word16 *drp_num_bits, UWord16 *drp_code_bits, Word16 *absolute_region_power_index, Word16 number_of_regions); void vector_quantize_mlts(Word16 number_of_available_bits, Word16 number_of_regions, Word16 num_categorization_control_possibilities, Word16 *mlt_coefs, Word16 *absolute_region_power_index, Word16 *power_categories, Word16 *category_balances, Word16 *p_categorization_control, Word16 *region_mlt_bit_counts, UWord32 *region_mlt_bits); Word16 vector_huffman(Word16 category, Word16 power_index, Word16 *raw_mlt_ptr, UWord32 *word_ptr); void adjust_abs_region_power_index(Word16 *absolute_region_power_index,Word16 *mlt_coefs,Word16 number_of_regions); void bits_to_words(UWord32 *region_mlt_bits,Word16 *region_mlt_bit_counts, Word16 *drp_num_bits,UWord16 *drp_code_bits,Word16 *out_words, Word16 categorization_control, Word16 number_of_regions, Word16 num_categorization_control_bits, Word16 number_of_bits_per_frame); void encoder(Word16 number_of_available_bits, Word16 number_of_regions, Word16 *mlt_coefs, Word16 mag_shift, Word16 *out_words); void decoder(Bit_Obj *bitobj, Rand_Obj *randobj, Word16 number_of_regions, Word16 *decoder_mlt_coefs, Word16 *p_mag_shift, Word16 *p_old_mag_shift, Word16 *old_decoder_mlt_coefs, Word16 frame_error_flag); Word16 samples_to_rmlt_coefs(Word16 *new_samples,Word16 *history,Word16 *coefs,Word16 dct_length); void rmlt_coefs_to_samples(Word16 *coefs, Word16 *old_samples, Word16 *out_samples, Word16 dct_length, Word16 mag_shift); Word16 index_to_array(Word16 index,Word16 *array,Word16 category); void categorize(Word16 number_of_available_bits, Word16 number_of_regions, Word16 num_categorization_control_possibilities, Word16 *rms_index, Word16 *power_categories, Word16 *category_balances); Word16 calc_offset(Word16 *rms_index,Word16 number_of_regions,Word16 available_bits); void compute_raw_pow_categories(Word16 *power_categories,Word16 *rms_index,Word16 number_of_regions,Word16 offset); void comp_powercat_and_catbalance(Word16 *power_categories, Word16 *category_balances, Word16 *rms_index, Word16 number_of_available_bits, Word16 number_of_regions, Word16 num_categorization_control_possibilities, Word16 offset); void dct_type_iv_a (Word16 *input,Word16 *output,Word16 dct_length); void dct_type_iv_s(Word16 *input,Word16 *output,Word16 dct_length); void decode_envelope(Bit_Obj *bitobj, Word16 number_of_regions, Word16 *decoder_region_standard_deviation, Word16 *absolute_region_power_index, Word16 *p_mag_shift); void decode_vector_quantized_mlt_indices(Bit_Obj *bitobj, Rand_Obj *randobj, Word16 number_of_regions, Word16 *decoder_region_standard_deviation, Word16 *dedecoder_power_categories, Word16 *dedecoder_mlt_coefs); void rate_adjust_categories(Word16 categorization_control, Word16 *decoder_power_categories, Word16 *decoder_category_balances); void get_next_bit(Bit_Obj *bitobj); Word16 get_rand(Rand_Obj *randobj); void test_4_frame_errors(Bit_Obj *bitobj, Word16 number_of_regions, Word16 num_categorization_control_possibilities, Word16 *frame_error_flag, Word16 categorization_control, Word16 *absolute_region_power_index); void error_handling(Word16 number_of_coefs, Word16 number_of_valid_coefs, Word16 *frame_error_flag, Word16 *decoder_mlt_coefs, Word16 *old_decoder_mlt_coefs, Word16 *p_mag_shift, Word16 *p_old_mag_shift); h323plus/plugins/audio/G.722.1/G722-1/encode.c0000644000175000017500000002572411341106231016711 0ustar markmark/************************************************************************* ** ** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C ** > Software Release 2.1 (2008-06) ** (Simple repackaging; no change from 2005-05 Release 2.0 code) ** ** Љ 2004 Polycom, Inc. ** ** All rights reserved. ** *************************************************************************/ /************************************************************************* Filename: encode.c Description: Contains the main function for the G.722.1 Annex C encoder Design Notes: WMOPS: 7kHz | 24kbit | 32kbit -------|--------------|---------------- AVG | 2.32 | 2.43 -------|--------------|---------------- MAX | 2.59 | 2.67 -------|--------------|---------------- 14kHz | 24kbit | 32kbit | 48kbit -------|--------------|----------------|---------------- AVG | 4.45 | 4.78 | 5.07 -------|--------------|----------------|---------------- MAX | 5.07 | 5.37 | 5.59 -------|--------------|----------------|---------------- *************************************************************************/ /************************************************************************************ Include files *************************************************************************************/ #include "defs.h" #include "count.h" /************************************************************************************ Local type declarations *************************************************************************************/ /* This object is used to control the command line input */ typedef struct { Word16 syntax; Word32 bit_rate; Word16 bandwidth; Word16 number_of_bits_per_frame; Word16 number_of_regions; Word16 frame_size; FILE *fpin; FILE *fp_bitstream; } ENCODER_CONTROL; /************************************************************************************ Constant definitions *************************************************************************************/ #define MAX_SAMPLE_RATE 32000 #define MAX_FRAMESIZE (MAX_SAMPLE_RATE/50) #define MEASURE_WMOPS 1 #define WMOPS 1 /*************************************************************************** Local function declarations ***************************************************************************/ void parse_command_line(char *argv[],ENCODER_CONTROL *control); void write_ITU_format(Word16 *out_words, Word16 number_of_bits_per_frame, Word16 number_of_16bit_words_per_frame, FILE *fp_bitstream); /************************************************************************************ Function: G.722.1 Annex C main encoder function Syntax: encode - 0 for packed format/1 for ITU format - input audio file to be encoded - encoded bitstream of the input file - 24, 32, and 48 kbps - 7 or 14 kHz Description: Main processing loop for the G.722.1 Annex C encoder Design Notes: 16kbit/sec is also supported for bandwidth of 7kHz *************************************************************************************/ main(Word16 argc,char *argv[]) { Word16 samples; Word16 input[MAX_FRAMESIZE]; Word16 history[MAX_FRAMESIZE]; Word16 number_of_16bit_words_per_frame; Word16 out_words[MAX_BITS_PER_FRAME/16]; Word16 mag_shift; Word16 i; Word16 mlt_coefs[MAX_FRAMESIZE]; Word16 frame_cnt = 0; ENCODER_CONTROL control; /* Check usage */ if (argc < 6) { printf("Usage: encode <0(packed)/1> \n\n"); printf("Valid Rates: 48kbps = 48000\n"); printf(" 32kbps = 32000\n"); printf(" 24kbps = 24000\n"); printf("\n"); printf("Bandwidth: 7kHz = 7000\n"); printf(" 14kHz = 14000\n"); printf("\n"); exit(1); } /* parse the command line input into the control structure */ parse_command_line(argv,&control); number_of_16bit_words_per_frame = (Word16)(control.number_of_bits_per_frame/16); /* initialize the mlt history buffer */ for (i=0;isyntax = (Word16)(atoi(*++argv)); if ((control->syntax != 0) && (control->syntax != 1)) { printf("syntax must be 0 for packed or 1 for ITU format\n"); exit(1); } if ((control->fpin = fopen(*++argv,"rb")) == NULL) { printf("codec: error opening %s.\n",*argv); exit(1); } if ((control->fp_bitstream = fopen(*++argv,"wb")) == NULL) { printf("codec: error opening %s.\n",*argv); exit(1); } control->bit_rate = (Word32)(atoi(*++argv)); if ((control->bit_rate < 16000) || (control->bit_rate > 48000) || ((control->bit_rate/800)*800 != control->bit_rate)) { printf("codec: Error. bit-rate must be multiple of 800 between 16000 and 48000\n"); exit(1); } control->number_of_bits_per_frame = (Word16)((control->bit_rate)/50); control->bandwidth = (Word16)(atoi(*++argv)); if (control->bandwidth == 7000) { control->number_of_regions = NUMBER_OF_REGIONS; control->frame_size = MAX_FRAMESIZE >> 1; printf("\n*************** G.722.1 ENCODER ***************\n"); printf("bandwidth = 7 khz\n"); printf("syntax = %d ",control->syntax); if (control->syntax == 0) printf(" packed bitstream\n"); else if (control->syntax == 1) printf(" ITU-format bitstream\n"); printf("sample_rate = 16000 bit_rate = %d\n",control->bit_rate); printf("framesize = %d samples\n",control->frame_size); printf("number_of_regions = %d\n",control->number_of_regions); printf("number_of_bits_per_frame = %d bits\n",control->number_of_bits_per_frame); printf("\n"); printf("\n"); } else if (control->bandwidth == 14000) { control->number_of_regions = MAX_NUMBER_OF_REGIONS; control->frame_size = MAX_FRAMESIZE; printf("\n*************** G.722.1 EXTENSION ENCODER ***************\n"); printf("bandwidth = 14 khz\n"); printf("syntax = %d ",control->syntax); if (control->syntax == 0) printf(" packed bitstream\n"); else if (control->syntax == 1) printf(" ITU-format bitstream\n"); printf("sample_rate = 32000 bit_rate = %d\n",control->bit_rate); printf("framesize = %d samples\n",control->frame_size); printf("number_of_regions = %d\n",control->number_of_regions); printf("number_of_bits_per_frame = %d bits\n",control->number_of_bits_per_frame); printf("\n"); printf("\n"); } else { printf("codec: Error. bandwidth must be 7000 or 14000\n"); exit(1); } } /************************************************************************************ Procedure/Function: Write ITU format function Syntax: void write_ITU_format(Word16 *out_words, Word16 number_of_bits_per_frame, Word16 number_of_16bit_words_per_frame, FILE *fp_bitstream) Description: Writes file output in PACKED ITU format ************************************************************************************/ void write_ITU_format(Word16 *out_words, Word16 number_of_bits_per_frame, Word16 number_of_16bit_words_per_frame, FILE *fp_bitstream) { Word16 frame_start = 0x6b21; Word16 one = 0x0081; Word16 zero = 0x007f; Word16 i,j; Word16 packed_word; Word16 bit_count; Word16 bit; Word16 out_array[MAX_BITS_PER_FRAME+2]; j = 0; out_array[j++] = frame_start; out_array[j++] = number_of_bits_per_frame; for (i=0; i= 0) { bit = (Word16)((packed_word >> bit_count) & 1); bit_count--; if (bit == 0) out_array[j++] = zero; else out_array[j++] = one; } } fwrite(out_array, 2, number_of_bits_per_frame+2, fp_bitstream); } h323plus/plugins/audio/G.722.1/G722-1/count.h0000644000175000017500000001360211341106231016601 0ustar markmark/* =========================================================================== COUNT.H ~~~~~~~ Prototypes and definitions for counting operations These functions, and the ones in basop32.h, makes it possible to measure the wMOPS of a codec. All functions in this file, and in basop32.h, updates a structure so that it will be possible the see how many calls to add, mul mulAdd ... that the code made, and estimate the wMOPS (and MIPS) for a sertain part of code It is also possible to measure the wMOPS separatly for different parts of the codec. This is done by creating a counter group (getCounterId) for each part of the code that one wants a separte measure for. Before a part of the code is executed a call to the "setCounter" function is needed to identify which counter group to use. Currently there is a limit of 255 different counter groups. In the end of this file there is a pice of code illustration how the functions can be used. History ~~~~~~~ 09.Aug.1999 V1.0.0 Input to UGST from ETSI AMR (count.h); 26.Jan.2000 V1.1.0 Added counter entries for G.723.1's L_mls(), div_l(), i_mult() [from basop32.c] 05.Jul.2000 V1.2.0 Added counter entries for 32bit shiftless operators L_mult0(), L_mac0(), L_msu0() =========================================================================== */ #ifndef COUNT_H #define COUNT_H "$Id $" #define MAXCOUNTERS 256 int getCounterId(char *objectName); /* * Create a counter group, the "objectname" will be used when printing * statistics for this counter group. * * Returns 0 if no more counter groups are available. */ void setCounter(int counterId); /* * Defines which counter group to use, default is zero. */ void Init_WMOPS_counter (void); /* * Initiates the current counter group. */ void Reset_WMOPS_counter (void); /* * Resets the current counter group. */ void WMOPS_output (Word16 notPrintWorstWorstCase); /* * Prints the statistics to the screen, if the argument if non zero * the statistics for worst worst case will not be printed. This is typically * done for dtx frames. * */ Word32 fwc (void); /* * worst worst case counter. * * This function calculates the worst possible case that can be reached. * * This is done by calling this function for each subpart of the calculations * for a frame. This function then stores the maximum wMOPS for each part. * * The WMOPS_output function add together all parts and presents the sum. */ void move16 (void); void move32 (void); void logic16 (void); void logic32 (void); void test (void); /* * The functions above increases the corresponding operation counter for * the current counter group. */ typedef struct { Word32 add; /* Complexity Weight of 1 */ Word32 sub; Word32 abs_s; Word32 shl; Word32 shr; Word32 extract_h; Word32 extract_l; Word32 mult; Word32 L_mult; Word32 negate; Word32 round; Word32 L_mac; Word32 L_msu; Word32 L_macNs; Word32 L_msuNs; Word32 L_add; /* Complexity Weight of 2 */ Word32 L_sub; Word32 L_add_c; Word32 L_sub_c; Word32 L_negate; Word32 L_shl; Word32 L_shr; Word32 mult_r; Word32 shr_r; Word32 shift_r; Word32 mac_r; Word32 msu_r; Word32 L_deposit_h; Word32 L_deposit_l; Word32 L_shr_r; /* Complexity Weight of 3 */ Word32 L_shift_r; Word32 L_abs; Word32 L_sat; /* Complexity Weight of 4 */ Word32 norm_s; /* Complexity Weight of 15 */ Word32 div_s; /* Complexity Weight of 18 */ Word32 norm_l; /* Complexity Weight of 30 */ Word32 DataMove16; /* Complexity Weight of 1 */ Word32 DataMove32; /* Complexity Weight of 2 */ Word32 Logic16; /* Complexity Weight of 1 */ Word32 Logic32; /* Complexity Weight of 2 */ Word32 Test; /* Complexity Weight of 2 */ /* Counters for G.723.1 basic operators*/ Word32 L_mls; /* Complexity Weight of 1 */ Word32 div_l; /* Complexity Weight of 1 */ Word32 i_mult; /* Complexity Weight of 1 */ Word32 L_mult0; /* Complexity Weight of 1 */ Word32 L_mac0; /* Complexity Weight of 1 */ Word32 L_msu0; /* Complexity Weight of 1 */ /* Counters for G.722.1 basic operators*/ Word32 LU_shl; /* Complexity Weight of 1 */ Word32 LU_shr; /* Complexity Weight of 1 */ } BASIC_OP; #ifdef THISISANEXAMPLE_0123456789 /* ----------------------------------------------------------------------- Example of how count.h could be used. In the example below it is assumed that the init_OBJECT functions does not use any calls to counter.h or basic_op.h. If this is the case a call to the function Reset_WMOPS_counter() must be done after each call to init_OBJECT if these operations is not to be included in the statistics. ----------------------------------------------------------------------- */ int main() { int spe1Id,spe2Id,cheId; /* initiate counters and objects */ spe1Id=getCounterId("Spe 5k8"); setCounter(spe1Id); Init_WMOPS_counter (); init_spe1(...); spe2Id=getCounterId("Spe 12k2"); setCounter(spe2Id); Init_WMOPS_counter (); init_spe2(...); cheId=getCounterId("Channel encoder"); setCounter(cheId); Init_WMOPS_counter (); init_che(...); ... while(data) { test(); /* Note this call to test(); */ if(useSpe1) setCounter(spe1Id); else setCounter(spe2Id); Reset_WMOPS_counter(); speEncode(...); WMOPS_output(0); /* Normal routine for displaying WMOPS info */ setCounter(cheId); Reset_WMOPS_counter(); preChannelInter(...); fwc(); /* Note the call to fwc() for each part */ convolve(...); fwc(); /* of the channel encoder. */ interleave(...); fwc(); WMOPS_output(0); /* Normal routine for displaying WMOPS info */ } } #endif /* Example */ #endif /* COUNT_H */ h323plus/plugins/audio/G.722.1/G722-1/huff_tab.h0000644000175000017500000000375211341106231017234 0ustar markmark/*********************************************************************** ** ** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C ** > Software Release 2.1 (2008-06) ** (Simple repackaging; no change from 2005-05 Release 2.0 code) ** ** Љ 2004 Polycom, Inc. ** ** All rights reserved. ** ***********************************************************************/ extern Word16 differential_region_power_bits[MAX_NUMBER_OF_REGIONS][DIFF_REGION_POWER_LEVELS]; extern UWord16 differential_region_power_codes[MAX_NUMBER_OF_REGIONS][DIFF_REGION_POWER_LEVELS]; extern Word16 differential_region_power_decoder_tree[MAX_NUMBER_OF_REGIONS][DIFF_REGION_POWER_LEVELS-1][2]; extern Word16 mlt_quant_centroid[NUM_CATEGORIES][MAX_NUM_BINS]; extern Word16 expected_bits_table[NUM_CATEGORIES]; extern Word16 mlt_sqvh_bitcount_category_0[196]; extern UWord16 mlt_sqvh_code_category_0[196]; extern Word16 mlt_sqvh_bitcount_category_1[100]; extern UWord16 mlt_sqvh_code_category_1[100]; extern Word16 mlt_sqvh_bitcount_category_2[49]; extern UWord16 mlt_sqvh_code_category_2[49]; extern Word16 mlt_sqvh_bitcount_category_3[625]; extern UWord16 mlt_sqvh_code_category_3[625]; extern Word16 mlt_sqvh_bitcount_category_4[256]; extern UWord16 mlt_sqvh_code_category_4[256]; extern Word16 mlt_sqvh_bitcount_category_5[243]; extern UWord16 mlt_sqvh_code_category_5[243]; extern Word16 mlt_sqvh_bitcount_category_6[32]; extern UWord16 mlt_sqvh_code_category_6[32]; extern Word16 *table_of_bitcount_tables[NUM_CATEGORIES-1]; extern UWord16 *table_of_code_tables[NUM_CATEGORIES-1]; extern Word16 mlt_decoder_tree_category_0[180][2]; extern Word16 mlt_decoder_tree_category_1[93][2]; extern Word16 mlt_decoder_tree_category_2[47][2]; extern Word16 mlt_decoder_tree_category_3[519][2]; extern Word16 mlt_decoder_tree_category_4[208][2]; extern Word16 mlt_decoder_tree_category_5[191][2]; extern Word16 mlt_decoder_tree_category_6[31][2]; extern Word16 *table_of_decoder_tables[NUM_CATEGORIES-1]; h323plus/plugins/audio/G.722.1/G722-1/coef2sam.c0000644000175000017500000001316311341106231017145 0ustar markmark/***************************************************************************** ** ** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C ** > Software Release 2.1 (2008-06) ** (Simple repackaging; no change from 2005-05 Release 2.0 code) ** ** Љ 2004 Polycom, Inc. ** ** All rights reserved. ** *****************************************************************************/ /***************************************************************************** * Filename: rmlt_coefs_to_samples.c * * Purpose: Convert Reversed MLT (Modulated Lapped Transform) * Coefficients to Samples * * The "Reversed MLT" is an overlapped block transform which uses * even symmetry * on the left, odd symmetry on the right and a * Type IV DCT as the block transform. * It is thus similar to a * MLT which uses odd symmetry on the left, even symmetry * on the * right and a Type IV DST as the block transform. In fact, it is * equivalent * to reversing the order of the samples, performing * an MLT and then negating all * the even-numbered coefficients. * *****************************************************************************/ /*************************************************************************** Include files ***************************************************************************/ #include "defs.h" #include "tables.h" #include "count.h" /*************************************************************************** Function: rmlt_coefs_to_samples Syntax: void rmlt_coefs_to_samples(Word16 *coefs, Word16 *old_samples, Word16 *out_samples, Word16 dct_length, Word16 mag_shift) inputs: Word16 *coefs Word16 *old_samples Word16 dct_length Word16 mag_shift outputs: Word16 *out_samples Description: Converts the mlt_coefs to samples Design Notes: WMOPS: 7kHz | 24kbit | 32kbit -------|--------------|---------------- AVG | 1.91 | 1.91 -------|--------------|---------------- MAX | 1.91 | 1.91 -------|--------------|---------------- 14kHz | 24kbit | 32kbit | 48kbit -------|--------------|----------------|---------------- AVG | 3.97 | 3.97 | 3.97 -------|--------------|----------------|---------------- MAX | 3.97 | 3.97 | 3.97 -------|--------------|----------------|---------------- ***************************************************************************/ void rmlt_coefs_to_samples(Word16 *coefs, Word16 *old_samples, Word16 *out_samples, Word16 dct_length, Word16 mag_shift) { Word16 index, vals_left; Word16 new_samples[MAX_DCT_LENGTH]; Word16 *new_ptr, *old_ptr; Word16 *win_new, *win_old; Word16 *out_ptr; Word16 half_dct_size; Word32 sum; half_dct_size = shr(dct_length,1); /* Perform a Type IV (inverse) DCT on the coefficients */ dct_type_iv_s(coefs, new_samples, dct_length); test(); if (mag_shift > 0) { for(index=0;index 0; vals_left--) { sum = 0L; move32(); sum = L_mac(sum,*win_new++, *--new_ptr); sum = L_mac(sum,*--win_old, *old_ptr++); *out_ptr++ = round(L_shl(sum,2)); move16(); } /* Get the second half of the windowed samples */ for (vals_left = half_dct_size; vals_left > 0; vals_left--) { sum = 0L; move32(); sum = L_mac(sum,*win_new++, *new_ptr++); sum = L_mac(sum,negate(*--win_old), *--old_ptr); *out_ptr++ = round(L_shl(sum,2)); move16(); } /* Save the second half of the new samples for */ /* next time, when they will be the old samples. */ /* pointer arithmetic */ new_ptr = new_samples + half_dct_size; move16(); old_ptr = old_samples; move16(); for (vals_left = half_dct_size; vals_left > 0; vals_left--) { *old_ptr++ = *new_ptr++; move16(); } } h323plus/plugins/audio/G.722.1/G722-1/basop32.h0000644000175000017500000001243211341106231016722 0ustar markmark/* =========================================================================== File: BASOP.H v.1.1 - 05.Jul.2000 =========================================================================== ITU-T STL BASIC OPERATORS GLOBAL FUNCTION PROTOTYPES History: 26.Jan.00 v1.0 Incorporated to the STL from updated G.723.1/G.729 basic operator library (based on basic_op.h) and G.723.1's basop.h. 05.Jul.00 v1.1 Added 32-bit shiftless mult/mac/msub operators ============================================================================ */ #ifndef BASOP_H_DEFINED #define BASOP_H_DEFINED 110 /*___________________________________________________________________________ | | | Constants and Globals | | | | $Id $ |___________________________________________________________________________| */ extern Flag Overflow; extern Flag Carry; #define MAX_32 (Word32)0x7fffffffL #define MIN_32 (Word32)0x80000000L #define MAX_16 (Word16)0x7fff #define MIN_16 (Word16)0x8000 #define UMAX_32 (Word32)0xffffffffL #define UMIN_32 (Word32)0x00000000L /*___________________________________________________________________________ | | | Prototypes for basic arithmetic operators | |___________________________________________________________________________| */ Word16 add (Word16 var1, Word16 var2); /* Short add, 1 */ Word16 sub (Word16 var1, Word16 var2); /* Short sub, 1 */ Word16 abs_s (Word16 var1); /* Short abs, 1 */ Word16 shl (Word16 var1, Word16 var2); /* Short shift left, 1 */ Word16 shr (Word16 var1, Word16 var2); /* Short shift right, 1 */ Word16 mult (Word16 var1, Word16 var2); /* Short mult, 1 */ Word32 L_mult (Word16 var1, Word16 var2); /* Long mult, 1 */ Word16 negate (Word16 var1); /* Short negate, 1 */ Word16 extract_h (Word32 L_var1); /* Extract high, 1 */ Word16 extract_l (Word32 L_var1); /* Extract low, 1 */ Word16 round (Word32 L_var1); /* Round, 1 */ Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2); /* Mac, 1 */ Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2); /* Msu, 1 */ Word32 L_macNs (Word32 L_var3, Word16 var1, Word16 var2); /* Mac without sat, 1 */ Word32 L_msuNs (Word32 L_var3, Word16 var1, Word16 var2); /* Msu without sat, 1 */ Word32 L_add (Word32 L_var1, Word32 L_var2); /* Long add, 2 */ Word32 L_sub (Word32 L_var1, Word32 L_var2); /* Long sub, 2 */ Word32 L_add_c (Word32 L_var1, Word32 L_var2); /* Long add with c, 2 */ Word32 L_sub_c (Word32 L_var1, Word32 L_var2); /* Long sub with c, 2 */ Word32 L_negate (Word32 L_var1); /* Long negate, 2 */ Word16 mult_r (Word16 var1, Word16 var2); /* Mult with round, 2 */ Word32 L_shl (Word32 L_var1, Word16 var2); /* Long shift left, 2 */ Word32 L_shr (Word32 L_var1, Word16 var2); /* Long shift right, 2*/ Word16 shr_r (Word16 var1, Word16 var2); /* Shift right with round, 2 */ Word16 mac_r (Word32 L_var3, Word16 var1, Word16 var2); /* Mac with rounding,2 */ Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2); /* Msu with rounding,2 */ Word32 L_deposit_h (Word16 var1); /* 16 bit var1 -> MSB, 2 */ Word32 L_deposit_l (Word16 var1); /* 16 bit var1 -> LSB, 2 */ Word32 L_shr_r (Word32 L_var1, Word16 var2); /* Long shift right with round, 3 */ Word32 L_abs (Word32 L_var1); /* Long abs, 3 */ Word32 L_sat (Word32 L_var1); /* Long saturation, 4 */ Word16 norm_s (Word16 var1); /* Short norm, 15 */ Word16 div_s (Word16 var1, Word16 var2); /* Short division, 18 */ Word16 norm_l (Word32 L_var1); /* Long norm, 30 */ /* Additional G.723.1 operators */ Word32 L_mls( Word32, Word16 ) ; /* Weight FFS; currently assigned 1 */ Word16 div_l( Word32, Word16 ) ; /* Weight FFS; currently assigned 1 */ Word16 i_mult(Word16 a, Word16 b); /* Weight FFS; currently assigned 1 */ /* New shiftless operators, not used in G.729/G.723.1 */ Word32 L_mult0(Word16 v1, Word16 v2); /* 32-bit Multiply w/o shift 1 */ Word32 L_mac0(Word32 L_v3, Word16 v1, Word16 v2); /* 32-bit Mac w/o shift 1 */ Word32 L_msu0(Word32 L_v3, Word16 v1, Word16 v2); /* 32-bit Msu w/o shift 1 */ /* Additional G.722.1 operators */ UWord32 LU_shl (UWord32 L_var1, Word16 var2); UWord32 LU_shr (UWord32 L_var1, Word16 var2); #endif /* BASOP_H_DEFINED */ /* ************************* END OF BASIC_OP.H ************************* */ h323plus/plugins/audio/G.722.1/G722-1/sam2coef.c0000644000175000017500000001675611341106231017160 0ustar markmark/****************************************************************************** ** ** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C ** > Software Release 2.1 (2008-06) ** (Simple repackaging; no change from 2005-05 Release 2.0 code) ** ** Љ 2004 Polycom, Inc. ** ** All rights reserved. ** ******************************************************************************/ /****************************************************************************** * Filename: samples_to_rmlt_coefs.c * * Purpose: Convert Samples to Reversed MLT (Modulated Lapped Transform) * Coefficients * * The "Reversed MLT" is an overlapped block transform which uses * even symmetry * on the left, odd symmetry on the right and a * Type IV DCT as the block transform. * It is thus similar to a * MLT which uses odd symmetry on the left, even symmetry * on the * right and a Type IV DST as the block transform. In fact, it is * equivalent * to reversing the order of the samples, performing * an MLT and then negating all * the even-numbered coefficients. * ******************************************************************************/ /*************************************************************************** Include files ***************************************************************************/ #include "defs.h" #include "tables.h" #include "count.h" /*************************************************************************** Function: samples_to_rmlt_coefs Syntax: Word16 samples_to_rmlt_coefs(new_samples, old_samples, coefs, dct_length) Word16 *new_samples; Word16 *old_samples; Word16 *coefs; Word16 dct_length; Description: Convert samples to MLT coefficients Design Notes: WMOPS: 7kHz | 24kbit | 32kbit -------|--------------|---------------- AVG | 1.40 | 1.40 -------|--------------|---------------- MAX | 1.40 | 1.40 -------|--------------|---------------- 14kHz | 24kbit | 32kbit | 48kbit -------|--------------|----------------|---------------- AVG | 3.07 | 3.07 | 3.07 -------|--------------|----------------|---------------- MAX | 3.10 | 3.10 | 3.10 -------|--------------|----------------|---------------- ***************************************************************************/ Word16 samples_to_rmlt_coefs(Word16 *new_samples,Word16 *old_samples,Word16 *coefs,Word16 dct_length) { Word16 index, vals_left,mag_shift,n; Word16 windowed_data[MAX_DCT_LENGTH]; Word16 *new_ptr, *old_ptr, *sam_low, *sam_high; Word16 *win_low, *win_high; Word16 *dst_ptr; Word16 neg_win_low; Word16 samp_high; Word16 half_dct_size; Word32 acca; Word32 accb; Word16 temp; Word16 temp1; Word16 temp2; Word16 temp5; half_dct_size = shr(dct_length,1); /*++++++++++++++++++++++++++++++++++++++++++++*/ /* Get the first half of the windowed samples */ /*++++++++++++++++++++++++++++++++++++++++++++*/ dst_ptr = windowed_data; move16(); /* address arithmetic */ test(); if (dct_length==DCT_LENGTH) { win_high = samples_to_rmlt_window + half_dct_size; } else { win_high = max_samples_to_rmlt_window + half_dct_size; } win_low = win_high; move16(); /* address arithmetic */ sam_high = old_samples + half_dct_size; sam_low = sam_high; move16(); for (vals_left = half_dct_size;vals_left > 0;vals_left--) { acca = 0L; move32(); acca = L_mac(acca,*--win_low, *--sam_low); acca = L_mac(acca,*win_high++, *sam_high++); temp = round(acca); *dst_ptr++ = temp; move16(); } /*+++++++++++++++++++++++++++++++++++++++++++++*/ /* Get the second half of the windowed samples */ /*+++++++++++++++++++++++++++++++++++++++++++++*/ sam_low = new_samples; move16(); /* address arithmetic */ sam_high = new_samples + dct_length; for (vals_left = half_dct_size; vals_left > 0; vals_left--) { acca = 0L; move32(); acca = L_mac(acca,*--win_high, *sam_low++); neg_win_low = negate(*win_low++); samp_high = *--sam_high; acca = L_mac(acca, neg_win_low, samp_high); temp = round(acca); *dst_ptr++=temp; move16(); } /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* Save the new samples for next time, when they will be the old samples */ /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ new_ptr = new_samples; move16(); old_ptr = old_samples; move16(); for (vals_left = dct_length;vals_left > 0;vals_left--) { *old_ptr++ = *new_ptr++; move16(); } /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* Calculate how many bits to shift up the input to the DCT. */ /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ temp1=0; move16(); for(index=0;index 0) { move16(); temp1 = temp2; } } mag_shift=0; move16(); temp = sub(temp1,14000); test(); if (temp >= 0) { mag_shift = 0; move16(); } else { temp = sub(temp1,438); test(); if(temp < 0) temp = add(temp1,1); else { temp = temp1; move16(); } accb = L_mult(temp,9587); acca = L_shr(accb,20); temp5 = extract_l(acca); temp = norm_s(temp5); test(); if (temp == 0) { mag_shift = 9; move16(); } else mag_shift = sub(temp,6); } acca = 0L; move32(); for(index=0; index 0) { for(index=0;index Software Release 2.1 (2008-06) ** (Simple repackaging; no change from 2005-05 Release 2.0 code) ** ** Љ 1999 PictureTel Coporation ** Andover, MA, USA ** ** All rights reserved. ** ***********************************************************************/ /*********************************************************************** Filename: tables.h Purpose: Contains table definitions used by G.722.1 Annex C Design Notes: ***********************************************************************/ /*********************************************************************** Include files ***********************************************************************/ #define REGION_POWER_TABLE_SIZE 64 #define NUM_CATEGORIES 8 #define DCT_LENGTH 320 #define MAX_DCT_LENGTH 640 extern Word16 int_region_standard_deviation_table[REGION_POWER_TABLE_SIZE]; extern Word16 standard_deviation_inverse_table[REGION_POWER_TABLE_SIZE]; extern Word16 step_size_inverse_table[NUM_CATEGORIES]; extern Word16 vector_dimension[NUM_CATEGORIES]; extern Word16 number_of_vectors[NUM_CATEGORIES]; /* The last category isn't really coded with scalar quantization. */ extern Word16 max_bin[NUM_CATEGORIES]; extern Word16 max_bin_plus_one_inverse[NUM_CATEGORIES]; extern Word16 int_dead_zone[NUM_CATEGORIES]; extern Word16 samples_to_rmlt_window[DCT_LENGTH]; extern Word16 rmlt_to_samples_window[DCT_LENGTH]; /* Add next line in Release 1.2 */ extern Word16 int_dead_zone_low_bits[NUM_CATEGORIES]; extern Word16 max_samples_to_rmlt_window[MAX_DCT_LENGTH]; extern Word16 max_rmlt_to_samples_window[MAX_DCT_LENGTH]; h323plus/plugins/audio/G.722.1/G722-1/huff_tab.c0000644000175000017500000012542511341106231017231 0ustar markmark/*********************************************************************** ** ** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C ** > Software Release 2.1 (2008-06) ** (Simple repackaging; no change from 2005-05 Release 2.0 code) ** ** Љ 2004 Polycom, Inc. ** ** All rights reserved. ** ***********************************************************************/ #include "defs.h" #include "huff_def.h" Word16 differential_region_power_bits[MAX_NUMBER_OF_REGIONS][DIFF_REGION_POWER_LEVELS] = { {99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99}, { 4, 6, 5, 5, 4, 4, 4, 4, 4, 4, 3, 3, 3, 4, 5, 7, 8, 9,11,11,12,12,12,12}, {10, 8, 6, 5, 5, 4, 3, 3, 3, 3, 3, 3, 4, 5, 7, 9,11,12,13,15,15,15,16,16}, {12,10, 8, 6, 5, 4, 4, 4, 4, 4, 4, 3, 3, 3, 4, 4, 5, 5, 7, 9,11,13,14,14}, {13,10, 9, 9, 7, 7, 5, 5, 4, 3, 3, 3, 3, 3, 4, 4, 4, 5, 7, 9,11,13,13,13}, {12,13,10, 8, 6, 6, 5, 5, 4, 4, 3, 3, 3, 3, 3, 4, 5, 5, 6, 7, 9,11,14,14}, {12,11, 9, 8, 8, 7, 5, 4, 4, 3, 3, 3, 3, 3, 4, 4, 5, 5, 7, 8,10,13,14,14}, {15,16,15,12,10, 8, 6, 5, 4, 3, 3, 3, 2, 3, 4, 5, 5, 7, 9,11,13,16,16,16}, {14,14,11,10, 9, 7, 7, 5, 5, 4, 3, 3, 2, 3, 3, 4, 5, 7, 9, 9,12,14,15,15}, { 9, 9, 9, 8, 7, 6, 5, 4, 3, 3, 3, 3, 3, 3, 4, 5, 6, 7, 8,10,11,12,13,13}, {14,12,10, 8, 6, 6, 5, 4, 3, 3, 3, 3, 3, 3, 4, 5, 6, 8, 8, 9,11,14,14,14}, {13,10, 9, 8, 6, 6, 5, 4, 4, 4, 3, 3, 2, 3, 4, 5, 6, 8, 9, 9,11,12,14,14}, {16,13,12,11, 9, 6, 5, 5, 4, 4, 4, 3, 2, 3, 3, 4, 5, 7, 8,10,14,16,16,16}, {13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, {13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, {13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, {13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, {13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, {13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, {13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, {13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, {13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, {13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, {13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, {13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, {13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, {13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, {13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}}; UWord16 differential_region_power_codes[MAX_NUMBER_OF_REGIONS][DIFF_REGION_POWER_LEVELS] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 8,38,18,10, 7, 6, 3, 2, 0, 1, 7, 6, 5, 4,11,78,158,318,1278,1279,2552,2553,2554,2555}, {36, 8, 3, 5, 0, 1, 7, 6, 4, 3, 2, 5, 3, 4, 5,19,74,150,302,1213,1214,1215,2424,2425}, {2582,644,160,41, 5,11, 7, 5, 4, 1, 0, 6, 4, 7, 3, 6, 4,21,81,323,1290,5167,10332,10333}, {2940,366,181,180,47,46,27,10, 8, 5, 1, 0, 3, 7, 4, 9,12,26,44,182,734,2941,2942,2943}, {3982,7967,994,249,63,26,19,18,14, 8, 6, 1, 0, 2, 5, 7,12,30,27,125,496,1990,15932,15933}, {3254,1626,407,206,202,100,30,14, 3, 5, 3, 0, 2, 4, 2,13,24,31,102,207,812,6511,13020,13021}, {1110,2216,1111,139,35, 9, 3,20,11, 4, 2, 1, 3, 3, 1, 0,21, 5,16,68,276,2217,2218,2219}, {1013,1014,127,62,29, 6, 4,16, 0, 1, 3, 2, 3, 1, 5, 9,17, 5,28,30,252,1015,2024,2025}, {381,380,372,191,94,44,16,10, 7, 3, 1, 0, 2, 6, 9,17,45,92,187,746,1494,2991,5980,5981}, {3036,758,188,45,43,10, 4, 3, 6, 4, 2, 0, 3, 7,11,20,42,44,46,95,378,3037,3038,3039}, {751,92,45,20,26, 4,12, 7, 4, 0, 4, 1, 3, 5, 5, 3,27,21,44,47,186,374,1500,1501}, {45572U,5697,2849,1425,357,45,23, 6,10, 7, 2, 2, 3, 0, 4, 6, 7,88,179,713,11392,45573U,45574U,45575U}, {2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, {2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, {2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, {2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, {2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, {2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, {2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, {2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, {2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, {2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, {2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, {2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, {2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, {2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, {2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}}; Word16 differential_region_power_decoder_tree[MAX_NUMBER_OF_REGIONS][DIFF_REGION_POWER_LEVELS-1][2] = { {{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0}}, {{ 1, 2},{ 3, 4},{ 5, 6},{ 7, 8},{ 9, 10},{ 11,-12},{-11,-10},{ -8, -9},{ -7, -6},{-13, 12},{ -5, -4},{ 0, 13},{ -3,-14},{ -2, 14},{ -1, 15},{-15, 16},{-16, 17},{-17, 18},{ 19, 20},{ 21, 22},{-18,-19},{-20,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{ 5, 6},{ 7, 8},{-10, -9},{ -8,-11},{ -7, -6},{ 9, -5},{ 10,-12},{ -4, 11},{-13, -3},{ 12, -2},{ 13,-14},{ -1, 14},{ 15,-15},{ 0, 16},{-16, 17},{-17, 18},{-18, 19},{ 20, 21},{ 22,-19},{-20,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{ 5, 6},{ 7, 8},{ 9, 10},{-12, 11},{-11,-13},{-10, -9},{ 12,-14},{ -8, -7},{-15, -6},{ 13, -5},{-16, -4},{ 14,-17},{ 15, -3},{ 16,-18},{ -2, 17},{ 18,-19},{ -1, 19},{-20, 20},{ 0, 21},{ 22,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{ 5, 6},{-11,-10},{ 7,-12},{ 8, -9},{ 9,-13},{-14, 10},{ -8,-15},{-16, 11},{ -7, 12},{-17, -6},{ 13, 14},{-18, 15},{ -5, -4},{ 16, 17},{ -3, -2},{-19, 18},{ -1, 19},{-20, 20},{ 21, 22},{ 0,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{ 5, 6},{-12,-11},{-13, 7},{ 8,-14},{-10, 9},{ 10,-15},{ -9, 11},{ -8, 12},{-16, 13},{ -7, -6},{-17, 14},{ -5,-18},{ 15, -4},{ 16,-19},{ 17, -3},{-20, 18},{ -2, 19},{-21, 20},{ 0, 21},{ 22, -1},{-22,-23}}, {{ 1, 2},{ 3, 4},{ 5, 6},{-11, 7},{-12,-10},{-13, -9},{ 8, 9},{-14, -8},{ 10,-15},{ -7, 11},{-16, 12},{ -6,-17},{ 13, 14},{ -5, 15},{-18, 16},{ -4, 17},{ -3,-19},{ 18, -2},{-20, 19},{ -1, 20},{ 0, 21},{ 22,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{ 5,-12},{ 6,-11},{-10,-13},{ -9, 7},{ 8,-14},{ 9, -8},{-15, 10},{ -7,-16},{ 11, -6},{ 12,-17},{ 13, -5},{-18, 14},{ 15, -4},{-19, 16},{ 17, -3},{-20, 18},{ 19, 20},{ 21, 22},{ 0, -2},{ -1,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{ 5,-12},{ 6,-13},{-11,-10},{ 7,-14},{ 8, -9},{ 9,-15},{ -8, 10},{ -7,-16},{ 11, 12},{ -6,-17},{ -5, 13},{ 14, 15},{-18, -4},{-19, 16},{ -3, 17},{ 18, -2},{-20, 19},{ 20, 21},{ 22, 0},{ -1,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{ 5, 6},{-11,-10},{-12, -9},{ 7, 8},{-13, -8},{ 9,-14},{ -7, 10},{ -6,-15},{ 11, 12},{ -5,-16},{ 13, 14},{-17, 15},{ -4, 16},{ 17,-18},{ 18, -3},{ -2, 19},{ -1, 0},{-19, 20},{-20, 21},{ 22,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{ 5, 6},{-11, 7},{-10,-12},{ -9, 8},{ -8,-13},{ 9, -7},{ 10,-14},{ -6, 11},{-15, 12},{ -5, 13},{-16, -4},{ 14, 15},{-17, -3},{-18, 16},{ 17,-19},{ -2, 18},{-20, 19},{ -1, 20},{ 21, 22},{ 0,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{ 5,-12},{ 6,-11},{ 7, 8},{-10,-13},{ -9, 9},{ -8,-14},{ 10, -7},{ 11,-15},{ -6, 12},{ -5, 13},{ -4,-16},{ 14, 15},{ -3,-17},{ 16, 17},{-18, -2},{ 18,-19},{ -1, 19},{-20, 20},{-21, 21},{ 22, 0},{-22,-23}}, {{ 1, 2},{ 3, 4},{ 5,-12},{-13, 6},{-11, 7},{-14, 8},{-10, 9},{-15, -9},{ -8, 10},{ -7,-16},{ 11, -6},{ 12, -5},{-17, 13},{ 14,-18},{ 15, -4},{ 16,-19},{ 17, -3},{ 18, -2},{ 19, -1},{-20, 20},{ 21, 22},{ 0,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, {{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}}; Word16 mlt_quant_centroid[NUM_CATEGORIES][MAX_NUM_BINS] = { { 0, 1606, 3119, 4586, 6049, 7502, 8941,10406,11851,13292,14736,16146,17566,19351, 0, 0}, { 0, 2229, 4341, 6401, 8471,10531,12583,14588,16673,18924, 0, 0, 0, 0, 0, 0}, { 0, 3055, 5998, 8929,11806,14680,17680, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 4121, 8192,12259,16322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 5413,11071,16315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 6785,14300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 8044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 8019, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}; Word16 expected_bits_table[NUM_CATEGORIES] = {52, 47, 43, 37, 29, 22, 16, 0}; Word16 mlt_sqvh_bitcount_category_0[196] = { 1, 4, 6, 6, 7, 7, 8, 8, 8, 9, 9,10,11,11, 4, 5, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,11,11, 5, 6, 7, 8, 8, 9, 9, 9, 9,10,10,10,11,12, 6, 7, 8, 9, 9, 9, 9,10,10,10,10,11,12,13, 7, 7, 8, 9, 9, 9,10,10, 10,10,11,11,12,13, 8, 8, 9, 9, 9,10,10,10,10,11, 11,12,13,14, 8, 8, 9, 9,10,10,11,11,11,12,12,13, 13,15, 8, 8, 9, 9,10,10,11,11,11,12,12,13,14,15, 9, 9, 9,10,10,10,11,11,12,13,12,14,15,16, 9, 9, 10,10,10,10,11,12,12,14,14,16,16,16, 9, 9,10,10, 11,11,12,13,13,14,14,15,15,16,10,10,10,11,11,12, 12,13,15,15,16,14,15,15,11,11,11,12,13,13,13,15, 16,16,16,16,14,15,11,11,12,13,13,14,15,16,16,16, 16,16,16,14}; UWord16 mlt_sqvh_code_category_0[196] = { 1, 2, 1, 24, 14, 51, 9, 68, 110, 26, 218, 54, 154, 761, 3, 10, 22, 8, 58, 22, 71, 16, 30, 50, 213, 75, 94, 632, 15, 18, 52, 23, 107, 5, 54, 63, 239, 46, 276, 271, 851, 252, 28, 10, 12, 1, 22, 133, 191, 55, 105, 278, 317, 554, 310, 276, 32, 50, 94, 20, 187, 219, 13, 268, 473, 445, 145, 849, 1277, 623, 1, 14, 0, 55, 238, 121, 120, 269, 318, 530, 639, 1117, 509, 556, 24, 78, 51, 153, 62, 308, 16, 25, 68, 1058, 428, 277, 2233, 1114, 92, 108, 141, 223, 270, 381, 24, 212, 760, 35, 1063, 279, 1717, 3439, 7, 21, 152, 73, 309, 310, 95, 944, 1890, 2232, 1891, 5107,10213, 4981, 61, 62, 9, 79, 474, 475, 848, 1059, 1056, 1716, 139, 4978, 4983, 4983, 140, 186, 76, 444, 144, 633, 1057, 838, 2237, 4472, 4473,10212,10212, 4983, 74, 78, 311, 213, 850, 1062, 1119, 508, 276, 277, 4982, 4473,10212,10212, 208, 70, 555, 418, 68, 510, 2552, 1115, 4980, 4979, 4982, 4982, 4473,10212, 215, 71, 253, 511, 839, 1718, 2488, 6876, 6877, 4979, 4979, 4982, 4982, 4473}; Word16 mlt_sqvh_bitcount_category_1[100] = { 1, 4, 5, 6, 7, 8, 8, 9,10,10, 4, 5, 6, 7, 7, 8, 8, 9, 9,11, 5, 5, 6, 7, 8, 8, 9, 9,10,11, 6, 6, 7, 8, 8, 9, 9,10,11,12, 7, 7, 8, 8, 9, 9,10,11, 11,13, 8, 8, 8, 9, 9,10,10,11,12,14, 8, 8, 8, 9, 10,11,11,12,13,15, 9, 9, 9,10,11,12,12,14,14,14, 9, 9, 9,10,11,12,14,16,14,14,10,10,11,12,13,14, 16,16,16,14}; UWord16 mlt_sqvh_code_category_1[100] = { 1, 2, 11, 27, 31, 9, 120, 31, 275, 310, 1, 0, 12, 5, 33, 54, 102, 111, 246, 448, 10, 14, 31, 39, 59, 100, 114, 202, 485, 969, 24, 26, 36, 52, 103, 30, 120, 242, 69, 1244, 35, 32, 14, 61, 113, 117, 233, 486, 487, 2491, 13, 12, 69, 110, 149, 35, 495, 449, 1978, 7751, 76, 75, 122, 136, 213, 68, 623, 930, 3959, 9961, 115, 16, 107, 225, 424, 850, 1936, 7916, 4981, 4981, 148, 154, 243, 407, 988, 851, 7750,19920, 7916, 4981, 406, 274, 464, 931, 3874, 7917, 19921,19920,19920, 7916}; Word16 mlt_sqvh_bitcount_category_2[49] = { 1, 4, 5, 7, 8, 9,10, 3, 4, 5, 7, 8, 9,10, 5, 5, 6, 7, 8,10,10, 7, 6, 7, 8, 9,10,12, 8, 8, 8, 9, 10,12,14, 8, 9, 9,10,11,15,16, 9,10,11,12,13,16, 15}; UWord16 mlt_sqvh_code_category_2[49] = { 1, 0, 10, 11, 28, 62, 363, 3, 2, 9, 8, 24, 53, 352, 7, 8, 13, 25, 89, 74, 355, 10, 23, 24, 29, 55, 354, 1449, 25, 19, 30, 52, 108, 438, 5793, 91, 36, 63, 353, 725,11584,23170, 180, 75, 218, 439, 2897,23171, 11584}; Word16 mlt_sqvh_bitcount_category_3[625] = { 2, 4, 6, 8,10, 5, 5, 6, 8,10, 7, 8, 8,10,12, 9, 9,10,12,15,10,11,13,16,16, 5, 6, 8,10,11, 5, 6, 8,10,12, 7, 7, 8,10,13, 9, 9,10,12,15,12,11,13, 16,16, 7, 9,10,12,15, 7, 8,10,12,13, 9, 9,11,13, 16,11,11,12,14,16,12,12,14,16,14, 9,11,12,16,16, 9,10,13,15,16,10,11,12,16,16,13,13,16,16,16,16, 16,15,16,16,11,13,16,16,15,11,13,15,16,16,13,13, 16,16,16,14,16,16,16,16,16,16,16,16,16, 4, 6, 8, 10,13, 6, 6, 8,10,13, 9, 8,10,12,16,10,10,11,15, 16,13,12,14,16,16, 5, 6, 8,11,13, 6, 6, 8,10,13, 8, 8, 9,11,14,10,10,12,12,16,13,12,13,15,16, 7, 8, 9,12,16, 7, 8,10,12,14, 9, 9,10,13,16,11,10, 12,15,16,13,13,16,16,15, 9,11,13,16,16, 9,10,12, 15,16,10,11,13,16,16,13,12,16,16,16,16,16,16,16, 16,11,13,16,16,16,11,13,16,16,16,12,13,15,16,16, 16,16,16,16,16,16,16,16,16,16, 6, 8,11,13,16, 8, 8,10,12,16,11,10,11,13,16,12,13,13,15,16,16,16, 14,16,15, 6, 8,10,13,16, 8, 8,10,12,16,10,10,11, 13,16,13,12,13,16,16,14,14,14,16,16, 8, 9,11,13, 16, 8, 9,11,16,14,10,10,12,15,16,12,12,13,16,16, 15,16,16,16,16,10,12,15,16,16,10,12,12,14,16,12, 12,13,16,16,14,15,16,16,16,16,16,16,16,16,12,15, 15,16,16,13,13,16,16,14,14,16,16,16,16,16,16,16, 16,16,14,15,16,16,16, 8,10,13,15,16,10,11,13,16, 16,13,13,14,16,16,16,16,16,16,16,16,16,16,16,16, 8,10,11,15,16, 9,10,12,16,16,12,12,15,16,16,16, 14,16,16,16,16,16,16,16,16, 9,11,14,16,16,10,11, 13,16,16,14,13,14,16,16,16,15,15,16,16,16,16,16, 16,16,11,13,16,16,16,11,13,15,16,16,13,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,15,16,16,16,16, 14,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16, 9,13,16,16,16,11,13,16,16,16,14,15, 16,16,16,15,16,16,16,16,16,16,16,16,16, 9,13,15, 15,16,12,13,14,16,16,16,15,16,16,16,16,16,16,16, 16,16,16,16,16,16,11,13,15,16,16,12,14,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,15,15,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,15, 16,16,13,16,16,16,16,16,16,16,16,16,16,16,16,16, 16}; UWord16 mlt_sqvh_code_category_3[625] = { 3, 8, 46, 145, 228, 4, 8, 47, 28, 455, 89, 2, 180, 5, 1335, 250, 12, 644, 1311, 139, 729, 251, 870, 2172, 2211, 5, 23, 112, 334, 1469, 21, 3, 5, 111, 2014, 88, 79, 152, 124, 2685, 297, 48, 110, 1310, 149, 501, 1231, 153, 2267, 2569, 57, 13, 653, 2587, 143, 75, 124, 118, 2611, 5242, 61, 50, 253, 3633, 2216, 476, 39, 57, 1926, 2236, 2586, 1329, 1920, 2566, 1926, 296, 233, 2590, 2240, 2217, 253, 613, 867, 144, 318, 614, 252, 2589, 2242, 2218, 872, 866, 2187, 2296, 2155, 2568, 2227, 150, 2567, 2296, 199, 2686, 2160, 2290,19145, 232, 2680, 128, 2192, 2212, 2684, 793, 2281, 2223, 2242, 1934, 2165, 2146, 2291, 2296, 2222, 2189, 2187, 2296, 2296, 6, 4, 82, 725, 3632, 15, 21, 56, 599, 148, 3, 162, 42, 411, 2301, 735, 654, 930, 137, 2586, 869, 1334, 1931, 2300, 2213, 9, 22, 146, 1290, 5240, 5, 12, 53, 630, 875, 80, 9, 8, 86, 2002, 210, 117, 56, 2019, 2162, 146, 397, 868, 131, 2151, 77, 160, 365, 2610, 2252, 59, 54, 41, 2591, 1928, 226, 14, 121, 5792, 2295, 1197, 728, 408, 130, 2157, 3635, 155, 2573, 2587, 130, 314, 64, 144, 2173, 2176, 115, 30, 409, 153, 2590, 631, 26, 4787, 2221, 2174, 2683, 1863, 2572, 319, 2150, 2177, 2194, 2571, 2257, 319, 65, 145, 2251, 2156, 2161, 909, 864, 2193, 2197, 2246, 2588, 5797, 156, 2258, 2221, 2158, 2199, 2214, 2152, 319, 2188, 2264, 2572, 319, 319, 30, 117, 219, 865, 2263, 147, 127, 239, 410, 2247, 27, 324, 1468, 2681, 2180, 1328, 5241, 147, 142, 2237, 2241, 2245, 1921, 2262, 142, 41, 11, 505, 2682, 2591, 0, 26, 229, 2015, 2577, 464, 98, 87, 5243, 2166, 149, 2016, 5244, 2190, 2198, 9573,11598,11599, 2235, 2190, 144, 298, 1004, 5245, 2277, 156, 104, 254, 2560, 1922, 612, 325, 2017, 129, 2588, 2608, 1330, 871, 2144, 2145, 132, 2147, 2148, 2149, 2144, 119, 1331, 133, 2153, 2154, 211, 58, 2609, 1923, 2159, 510, 163, 5246, 2163, 2164, 1924, 134, 2167, 2168, 2168, 2169, 2170, 2171, 2168, 2168, 1332, 135, 136, 2175, 2153, 150, 873, 2178, 2179, 1923, 1925, 2181, 2182, 2183, 2163, 2184, 2185, 2186, 2168, 2168, 1924, 134, 2167, 2168, 2168, 58, 326, 2687, 138, 2191, 31, 66, 874, 2195, 2196, 151, 152, 1927, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2205, 55, 103, 1230, 140, 2215, 118, 15, 1333, 2219, 2220, 2018, 511, 141, 2224, 2225, 2226, 1929, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2229, 366, 1005, 1930, 2238, 2239, 12, 1006, 5247, 2243, 2244, 1932, 3634, 1933, 2248, 2249, 2250, 145, 146, 2253, 2253, 2254, 2255, 2256, 2253, 2253, 1291, 5793, 2259, 2260, 2261, 477, 5794, 147, 2265, 2266, 5795, 2268, 2269, 2270, 2270, 2271, 2272, 2273, 2274, 2274, 2275, 2276, 2273, 2274, 2274, 148, 2278, 2279, 2280, 2260, 1935, 2282, 2283, 2284, 2265, 2285, 2286, 2287, 2270, 2270, 2288, 2289, 2273, 2274, 2274, 2271, 2272, 2273, 2274, 2274, 233, 5796, 2292, 2293, 2294, 1292, 3724, 2297, 2298, 2299, 2000, 151, 2302, 2303, 2200, 152, 2561, 2562, 2563, 2205, 2564, 2565, 2204, 2205, 2205, 363, 154, 154, 155, 2570, 59, 3725, 2001, 2574, 2575, 2576, 157, 2578, 2579, 2224, 2580, 2581, 2582, 2583, 2229, 2584, 2585, 2228, 2229, 2229, 654, 5798, 158, 2589, 2238, 2392, 2003, 2592, 2593, 2243, 2594, 2595, 2596, 2597, 2248, 2598, 2599, 2600, 2253, 2253, 2250, 145, 146, 2253, 2253, 2601, 2602, 2603, 2604, 2260, 2605, 2606, 2607, 6336, 2265, 6337, 6338, 6339, 2270, 2270, 6340, 6341, 2273, 2274, 2274, 2271, 2272, 2273, 2274, 2274, 6342, 6343, 2259, 2260, 2260,38288U,38289U, 147, 2265, 2265, 5795, 2268, 2269, 2270, 2270, 2271, 2272, 2273, 2274, 2274, 2271, 2272, 2273, 2274, 2274}; Word16 mlt_sqvh_bitcount_category_4[256] = { 2, 4, 7,10, 4, 5, 7,10, 7, 8,10,14,11,11,15,15, 4, 5, 9,12, 5, 5, 8,12, 8, 7,10,15,11,11,15,15, 7, 9,12,15, 8, 8,12,15,10,10,13,15,14,14,15,13, 11,13,15,15,11,13,15,15,14,15,15,13,15,15,13,13, 4, 5, 9,13, 5, 6, 9,13, 9, 9,11,15,14,13,15,15, 4, 6, 9,12, 5, 6, 9,13, 9, 8,11,15,13,12,15,15, 7, 9,12,15, 7, 8,11,15,10,10,14,15,14,15,15,14, 10,12,15,15,11,13,15,15,15,15,15,14,15,15,14,14, 6, 9,13,14, 8, 9,12,15,12,12,15,15,15,15,15,15, 7, 9,13,15, 8, 9,12,15,11,12,15,15,15,15,15,15, 9,11,15,15, 9,11,15,15,14,14,15,15,15,15,15,15, 14,15,15,15,14,15,15,15,15,15,15,15,14,14,15,15, 9,12,15,15,12,13,15,15,15,15,15,15,15,15,15,15, 10,12,15,15,12,14,15,15,15,15,15,15,15,15,15,15, 14,15,15,15,15,15,15,15,15,15,15,15,14,14,15,15, 15,15,15,15,15,15,15,15,14,14,15,15,14,14,15,15}; UWord16 mlt_sqvh_code_category_4[256] = { 1, 2, 4, 572, 10, 0, 69, 712, 91, 10, 46, 9182, 1426, 1430,30172,30194, 9, 28, 22, 2258, 16, 25, 142, 2179, 15, 111, 719, 1521, 1131, 1437, 1520,30196, 88, 283, 3803,30193, 13, 236, 2856,30166, 545, 951, 5709, 1522, 3241, 9180,30179, 5709, 1088, 4356,30410,30175, 1146, 377,30162,30163, 8715,30176,30165, 5709,30197,30184, 5709, 5709, 1, 23, 28, 5710, 26, 14, 29, 7538, 102, 103, 1429, 1524, 3237, 7060,30401,30201, 15, 13, 470, 3768, 24, 15, 281, 5747, 24, 181, 1128,30206, 5711, 3531,30156,30158, 116, 100, 2260,30187, 119, 234, 1764,30171, 716, 883, 9183,30164, 3236, 1528,30180, 9183, 885, 2870, 1532,30160, 1431, 5708,30192,30205,30402,30168,30173, 9183,30157,30161, 9183, 9183, 54, 25, 1621,15211, 180, 287, 2261,30198, 808, 811,30411,30413,30414,22986,22987,30411, 24, 273, 376,30159, 137, 280, 2871, 1523, 1768, 2259, 1525,30167, 1526,30169,30170, 1525, 443, 1434, 1527,30174, 474, 1769,30177,30178, 3238, 3239,30181,30181,30182,30183,30181,30181, 3240,30185,30186, 1527, 9181,30188,30189,30177,30190,30191,30181,30181, 3238, 3239,30181,30181, 440, 2857, 1529,30195, 2294, 7061, 1530,30199,30200, 1531,30202,30411,30203,30204,30411,30411, 203, 2872,30207,30400, 189,11492,30403,30404,30405,30406,30407, 1525,30408,30409, 1525, 1525, 8714, 1533,30412, 1527, 1534, 1535,30415,30177,30416,30417,30181,30181, 3238, 3239,30181,30181, 30418,30419, 1527, 1527,30420,30421,30177,30177, 3238, 3239,30181,30181, 3238, 3239,30181,30181}; Word16 mlt_sqvh_bitcount_category_5[243] = { 2, 4, 8, 4, 5, 9, 9,10,14, 4, 6,11, 5, 6,12,10, 11,15, 9,11,15,10,13,15,14,15, 6, 4, 6,12, 6, 7, 12,12,12,15, 5, 7,13, 6, 7,13,12,13,15,10,12,15, 11,13,15,15,15, 7, 8,13,15,11,12,15,15,15, 7,10, 13,15,12,15,15,15,15, 7,15,15, 7,15,15, 7, 6, 7, 7, 4, 5,11, 5, 7,12,11,12,15, 6, 7,13, 7, 8,14, 12,14,15,11,13,15,12,13,15,15,15, 8, 5, 6,13, 7, 8,15,12,14,15, 6, 8,14, 7, 8,15,14,15,15,12,12, 15,12,13,15,15,15, 8, 9,13,15,12,13,15,15,15, 8, 11,13,15,13,13,15,15,15, 8,14,15, 8,15,15, 8, 7, 8, 8, 8,10,15,11,12,15,15,15, 7,10,12,15,12,13, 15,15,15, 8,14,15, 7,15,15, 8, 7, 8, 8, 8,12,15, 12,13,15,15,15, 8,11,13,15,13,15,15,15,15, 8,15, 15, 8,15,15, 8, 7, 8, 8,14,15, 6,15,15, 8, 7, 8, 8,15,15, 8,15,15, 8, 7, 8, 8, 6, 8, 8, 7, 8, 8, 7, 8, 8}; UWord16 mlt_sqvh_code_category_5[243] = { 0, 5, 220, 10, 16, 443, 390, 391,14333, 11, 26, 1566, 26, 54, 3135, 508, 1558,28581, 255, 1782,28599, 885, 6208,28578,14335,28579, 54, 9, 35, 3129, 27, 68, 3537, 1562, 3568,28610, 25, 62, 4078, 58, 118, 7763, 3107, 7758,28563, 778, 3131,28598, 780, 7123,28630,28593,28586, 118, 243, 6210,28614, 1018, 3567,28601,28611,28570, 68, 388, 6256,28619, 1559,28562,28606,28565,28591, 118,28594,28571, 62,28618,28590, 118, 58, 118, 118, 4, 28, 1781, 31, 60, 3134, 1938, 3882,28574, 25, 96, 7757, 49, 126,14244, 3883,14334,28613, 1769, 4077,28602, 3106, 7756,28582,28621,28566, 126, 14, 61, 4079, 61, 138,28491, 3536, 8153,28573, 49, 96,12442, 119, 240,28490,12443,28560,28561, 3111, 3580, 28564, 3130, 7759,28567,28568,28569, 240, 444, 6209,28572, 3569, 6211,28575,28576,28577, 138, 778, 7760,28580, 7761, 7762,28583,28584,28585, 240,14319,28587, 96,28588,28589, 240, 119, 240, 240, 139, 968,28592, 1554, 3581,28595,28596,28597, 60, 971, 3560,28600, 3582, 7132, 28603,28604,28605, 126,14332,28607, 96,28608,28609, 126, 49, 126, 126, 241, 1558,28612, 1563, 6257,28615,28616,28617, 138, 1559, 7133,28620, 6220,28622,28623,28624,28625, 240,28626, 28627, 96,28628,28629, 240, 119, 240, 240, 8152,28631, 61,28632,28633, 138, 61, 138, 138,28634,28635, 96,28636,28637, 240, 119, 240, 240, 49, 96, 96, 119, 240, 240, 119, 240, 240}; Word16 mlt_sqvh_bitcount_category_6[32] = { 1, 4, 4, 6, 4, 6, 6, 8, 4, 6, 6, 8, 6, 9, 8,10, 4, 6, 7, 8, 6, 9, 8,11, 6, 9, 8,10, 8,10, 9,11}; UWord16 mlt_sqvh_code_category_6[32] = { 1, 2, 4, 2, 5, 29, 24, 101, 3, 31, 28, 105, 3, 5, 102, 424, 1, 30, 0, 107, 27, 200, 103, 806, 1, 4, 104, 402, 3, 425, 213, 807}; Word16 *table_of_bitcount_tables[NUM_CATEGORIES-1] = { mlt_sqvh_bitcount_category_0, mlt_sqvh_bitcount_category_1, mlt_sqvh_bitcount_category_2, mlt_sqvh_bitcount_category_3, mlt_sqvh_bitcount_category_4, mlt_sqvh_bitcount_category_5, mlt_sqvh_bitcount_category_6 }; UWord16 *table_of_code_tables[NUM_CATEGORIES-1] = { (UWord16 *)mlt_sqvh_code_category_0, (UWord16 *)mlt_sqvh_code_category_1, (UWord16 *)mlt_sqvh_code_category_2, (UWord16 *)mlt_sqvh_code_category_3, (UWord16 *)mlt_sqvh_code_category_4, (UWord16 *)mlt_sqvh_code_category_5, (UWord16 *)mlt_sqvh_code_category_6 }; Word16 mlt_decoder_tree_category_0[180][2] = { { 1, 0},{ 2, 3},{ 4, 5},{ 6, 7},{ 8, 9},{ -1, -14},{ 10, 11},{ 12, 13}, { 14, 15},{ 16, 17},{ 18, 19},{ -15, 20},{ 21, 22},{ 23, -28},{ 24, -2},{ 25, 26}, { 27, 28},{ 29, 30},{ 31, 32},{ -29, 33},{ -16, 34},{ -3, 35},{ 36, 37},{ -42, 38}, { 39, 40},{ 41, 42},{ 43, 44},{ -17, 45},{ -43, 46},{ 47, 48},{ -4, 49},{ -56, 50}, { 51, 52},{ 53, 54},{ 55, 56},{ -57, -5},{ -30, 57},{ 58, 59},{ -18, 60},{ 61, -70}, { 62, 63},{ 64, -6},{ 65, 66},{ -44, 67},{ -71, 68},{ 69, 70},{ -19, -31},{ -84, 71}, { 72, 73},{ 74, 75},{ 76, 77},{ -7, 78},{ 79, -20},{ 80, 81},{ -85, 82},{ -98, 83}, { -58, 84},{ 85, -32},{ -99, 86},{ -8, 87},{ 88, 89},{ -72, -45},{ 90, -33},{ 91,-112}, { -21, 92},{ -59,-113},{ -46, 93},{ -9, 94},{ -22, 95},{ 96, 97},{ 98, 99},{ -23, -86}, { 100, 101},{ -34, -73},{ 102,-126},{-127, -35},{ 103, -47},{ 104, 105},{ 106, 107},{-140,-100}, {-114, -87},{ 108, 109},{ 110, 111},{-141, -60},{ 112, -48},{ 113, -24},{ -10, -61},{ 114,-101}, { 115, 116},{ -74, -36},{ 117,-128},{ 118, -62},{ 119, 120},{ -37, 121},{ -11, -49},{ -88, 122}, { 123,-115},{-154, -25},{-142, 124},{-155,-129},{ 125, -50},{ 126, 127},{ -76, -75},{ 128, 129}, { -63, -77},{-102, -39},{ -38, 130},{ -51, 131},{ -89,-116},{-117,-156},{ 132, -52},{ -78, 133}, { 134,-103},{ 135, 136},{-143, -65},{ 137, -64},{-130,-131},{ -90, 138},{-104, -91},{ -92, 139}, {-169,-183},{ -26,-118},{ 140, 141},{-144, -66},{ -12, 142},{-168, 143},{-105,-157},{ 144,-182}, { 145, 146},{ -79, 147},{ -53,-170},{ 148, 149},{ -27,-145},{ 150, -80},{-106, -13},{-132, -67}, {-158, -40},{-119, 151},{ 152,-107},{ 153, 154},{ -41,-184},{ 155, 156},{ -54, 157},{-171, 158}, { -94, 159},{-134,-146},{ -93,-133},{-159,-108},{ 160, -81},{ 161,-160},{ 162, -68},{-120,-122}, {-172, 163},{ -55, -95},{ 164,-109},{-161, -82},{-173,-185},{ 165, -69},{-147,-186},{ 166, 167}, {-121, -96},{ 168,-148},{-174, 169},{ 170,-136},{ -83, 171},{ 172, 173},{-135,-110},{-187, 174}, {-149,-150},{ 175,-123},{-162,-163},{ -97,-175},{-188, 176},{ 177, 178},{ 179,-111},{-151,-124}, {-137,-177},{-176,-125},{-164,-138},{-189,-190},}; Word16 mlt_decoder_tree_category_1[93][2] = { { 1, 0},{ 2, 3},{ 4, 5},{ 6, 7},{ 8, -10},{ -1, 9},{ 10, 11},{ 12, 13}, { -11, 14},{ 15, 16},{ 17, 18},{ -20, -2},{ 19, 20},{ -21, 21},{ 22, 23},{ -12, 24}, { 25, 26},{ 27, 28},{ 29, 30},{ -30, 31},{ -31, -3},{ 32, -22},{ 33, -13},{ 34, 35}, { 36, 37},{ 38, 39},{ 40, -4},{ -41, -14},{ 41, -40},{ -32, 42},{ 43, -23},{ 44, 45}, { 46, 47},{ 48, -5},{ -51, -50},{ -42, 49},{ -33, 50},{ -15, 51},{ 52, 53},{ 54, -24}, { 55, -43},{ 56, -52},{ 57, -61},{ -60, 58},{ -25, 59},{ -16, -34},{ -6, 60},{ -62, 61}, { -71, 62},{ -35, -7},{ 63, -72},{ -53, -17},{ 64, -44},{ -26, -70},{ 65, -45},{ -36, 66}, { -63, 67},{ -80, -54},{ -81, 68},{ -27, 69},{ 70, -82},{ -18, 71},{ 72, -55},{ 73, -64}, { 74, -73},{ 75, -46},{ -37, 76},{ -91, -8},{ -9, 77},{ -90, -83},{ 78, -28},{ 79, -56}, { -65, -38},{ -74, 80},{ -19, -57},{ -92, 81},{ -47, -48},{ 82, -66},{ 83, -29},{ -84, 84}, { -75, -85},{ -67, -93},{ -39, 85},{ -76, 86},{ -58, 87},{ 88, -49},{ -94, 89},{ 90, -68}, { 91, -78},{ -86, -59},{ -77, -95},{ 92, -69},{ -87, -96},}; Word16 mlt_decoder_tree_category_2[47][2] = { { 1, 0},{ 2, 3},{ 4, 5},{ 6, -7},{ -1, 7},{ -8, 8},{ 9, 10},{ 11, 12}, { 13, -14},{ -15, -9},{ -2, 14},{ 15, 16},{ 17, 18},{ 19, -16},{ 20, -22},{ -10, 21}, { -21, -3},{ 22, 23},{ 24, 25},{ -23, -17},{ 26, 27},{ 28, -29},{ -11, -28},{ 29, 30}, { -4, -24},{ -30, 31},{ 32, -18},{ 33, -35},{ -36, 34},{ -31, -12},{ 35, -25},{ -5, -37}, { 36, 37},{ -42, 38},{ -19, -43},{ -32, 39},{ -13, -38},{ -26, -20},{ 40, -6},{ -44, 41}, { 42, -39},{ -33, -45},{ 43, -27},{ 44, -46},{ 45, -34},{ -40, 46},{ -41, -47},}; Word16 mlt_decoder_tree_category_3[519][2] = { { 1, 2},{ 3, 4},{ 5, 0},{ 6, 7},{ 8, 9},{ 10, 11},{ 12, 13},{ 14, 15}, { 16, 17},{-125, 18},{ -1, 19},{ 20, 21},{ 22, 23},{ 24, 25},{ -5, -25},{ 26, 27}, { -6,-150},{ 28, 29},{ 30, 31},{ 32, 33},{ 34, -30},{ 35, 36},{ 37, 38},{ 39, -31}, {-126,-155},{ 40, 41},{-156, 42},{ 43,-130},{ 44,-131},{-151, -26},{ 45, 46},{-250, 47}, { 48, 49},{ 50, 51},{ 52,-275},{ 53, 54},{ -2, -7},{ 55, 56},{ 57, 58},{ 59, 60}, { 61, 62},{ 63, 64},{ 65, 66},{ 67, 68},{ 69, 70},{ 71, -50},{ 72,-180},{ 73, 74}, { 75, 76},{ 77, -55},{ 78,-175},{ 79, -36},{ 80, 81},{ -35, -10},{ 82, 83},{-280, 84}, { -11, 85},{ 86, -32},{ 87, 88},{ 89,-161},{ 90,-276},{ 91, 92},{-281, 93},{ -8, 94}, { 95, 96},{ 97,-157},{-181,-400},{-132, 98},{-375, 99},{-160, 100},{-127, 101},{ -27, 102}, { 103,-251},{ -56, 104},{ 105,-256},{-300, -3},{-152,-255},{ 106, 107},{ -37, 108},{-305, 109}, {-176, 110},{-136, 111},{ -12, 112},{ 113, 114},{ 115,-135},{ 116, 117},{-162, 118},{ -16, -51}, {-186, 119},{ 120, 121},{ 122, 123},{ -41, 124},{ -61, 125},{ 126, 127},{ 128, 129},{ 130, -60}, { 131, 132},{-306, 133},{ 134,-205},{-405, 135},{ 136, 137},{ 138, 139},{-185, 140},{ 141,-500}, { -15, 142},{ 143, -80},{ -75, -40},{-301, 144},{ 145, 146},{-200, 147},{ 148, 149},{ 150, 151}, { 152,-525},{ 153,-177},{-425, 154},{ 155, -13},{-430, 156},{ 157,-406},{ 158, 159},{-206,-380}, { 160, 161},{ 162, 163},{ 164,-182},{-137, 165},{-286, 166},{ 167,-401},{ 168, 169},{ -42, -33}, { 170,-166},{ -57,-325},{ 171,-187},{ -38, 172},{ 173, 174},{-165,-330},{ -4,-282},{ 175,-257}, {-261,-311},{-376, 176},{ 177, 178},{ -28, 179},{ 180, -9},{-285, 181},{ 182, 183},{ 184,-277}, { 185,-133},{-310, -81},{ -85, 186},{-158,-210},{ -17, 187},{ 188, 189},{ 190, -52},{-141, 191}, { 192,-128},{-191, -20},{ 193,-140},{ 194, 195},{-211,-260},{ 196, 197},{ 198, 199},{ 200, -66}, {-201,-225},{-381, 201},{ 202, 203},{ 204, 205},{ 206, 207},{-163,-287},{ 208,-100},{ 209, 210}, { 211, 212},{ 213,-252},{-105, -76},{ 214, 215},{ 216, -21},{ -86, -62},{-307, 217},{ -65,-455}, {-550, 218},{ 219, 220},{ 221, 222},{ 223, 224},{ 225,-230},{-142, 226},{-302,-426},{-431, 227}, { 228, 229},{ 230,-190},{-402, -46},{-153,-450},{-505, 231},{ 232, 233},{ 234, 235},{ 236, 237}, { 238, 239},{-262, -29},{ 240, 241},{ 242, 243},{-167, -67},{-331,-530},{ 244, 245},{ 246, 247}, { 248, 249},{ 250, 251},{ 252, 253},{ 254, 255},{ 256, 257},{ 258, 259},{ 260, 261},{ 262,-336}, { 263,-171},{-192,-207},{-258,-138},{ 264, 265},{ 266, 267},{ 268, 269},{ 270, 271},{ 272, 273}, { 274, -45},{-335,-411},{ -43, -18},{-265, -71},{-316,-326},{-350,-407},{-146, -14},{ 275, 276}, { 277, 278},{ 279, 280},{ 281,-216},{ -34,-283},{-291,-312},{-410,-168},{-555, 282},{ -70, -53}, {-235, -87},{ -77,-183},{-315,-332},{-178, -58},{ 283, 284},{ 285, 286},{ 287, 288},{ 289, 290}, { 291, 292},{ 293, 294},{ 295, 296},{ 297, 298},{-202,-226},{-170,-267},{-134,-290},{-355,-385}, {-386, -47},{-526,-196},{ 299, 300},{ 301, 302},{ 303, 304},{ 305, 306},{ 307, 308},{ 309, 310}, { 311, 312},{ 313, 314},{ 315, 316},{ 317, 318},{ 319, 320},{ 321, 322},{ 323, 324},{ 325,-111}, {-231,-253},{ -91, -82},{-172,-145},{ -22,-317},{ -90,-356},{-382,-159},{ 326, 327},{ 328, 329}, { 330, 331},{ 332, 333},{ 334, 335},{-106,-263},{-278,-215},{-110, -39},{-101,-377},{-129, -63}, {-436,-195},{-506,-531},{ 336,-212},{-154,-266},{ -59,-288},{-292,-303},{-337,-432},{-188,-451}, {-456,-460},{-501,-236},{-551, 337},{ 338, 339},{ 340, 341},{ 342, 343},{ 344, 345},{ 346, 347}, { 348, 349},{ 350, 351},{ 352, 353},{ 354, 355},{ 356, 357},{ 358, 359},{ 360, 361},{ 362, 363}, { 364, 365},{ 366, 367},{ 368, 369},{ 370, 371},{ 372, 373},{ 374, 375},{ 376, 377},{ 378, 379}, { 380, 381},{ 382, 383},{ 384, 385},{ 386, 387},{ 388, 389},{ 390, 391},{ 392, 393},{ 394, 395}, { 396, 397},{ 398, 399},{ 400, 401},{ 402, 403},{ 404, 405},{ 406, 407},{ -72,-272},{-309,-333}, {-340,-360},{ -68,-387},{-184,-416},{-427,-147},{-435,-437},{-115,-480},{-510,-532},{-164,-556}, { 408,-295},{-296,-297},{-107,-313},{-193,-173},{-320,-327},{-341,-351},{-352,-143},{-378, -19}, {-403,-412},{-268, -54},{ -83,-441},{-442,-457},{-475, -44},{ -97,-511},{-515,-208},{-527,-528}, {-237,-536},{-552, 409},{ 410, 411},{ 412, 413},{ 414, 415},{ 416, 417},{ 418, 419},{ 420, 421}, { 422, 423},{ 424, 425},{ 426, 427},{ 428, 429},{ 430, 431},{ 432, 433},{ 434, 435},{ 436, 437}, { 438, 439},{ 440, 441},{ 442, 443},{ 444, 445},{ 446, 447},{ 448, 449},{ 450, 451},{ 452, 453}, { 454, 455},{ 456, 457},{ 458, 459},{ 460, 461},{ 462, 463},{ 464, 465},{ 466, 467},{ 468, 469}, { 470, 471},{ 472, 473},{ 474, 475},{ 476, 477},{ 478, 479},{ 480, 481},{ 482, 483},{ 484, 485}, { 486, 487},{ 488, 489},{ 490, 491},{ 492, 493},{ 494, 495},{ 496, 497},{ 498, 499},{ 500, 501}, { 502, 503},{ 504, 505},{ 506, 507},{ 508, 509},{ 510, 511},{ 512, 513},{ 514, 515},{ 516, 517}, { 518,-104},{ -84,-218},{-318,-319},{-117,-321},{-322,-323},{-219,-174},{-243,-328},{-329, -94}, {-228,-194},{-240,-334},{-102,-229},{-169,-338},{-339,-116},{-289,-342},{-343,-345},{-346,-347}, { -23,-203},{-214,-353},{-204,-220},{-357,-358},{-264,-361},{-362,-363},{-365,-366},{-367, -92}, {-245,-121},{-293,-379},{-108,-232},{-221,-383},{-384,-233},{-294,-241},{-388,-389},{-390,-391}, {-392,-393},{-394,-395},{-396,-397},{-398, -24},{-109,-149},{-242,-404},{ -64, -79},{ -89,-408}, {-409,-213},{-120,-113},{-413,-414},{-415, -96},{-417,-418},{-419,-420},{-421,-422},{-423,-298}, { -69,-269},{-428,-429},{ -78,-270},{ -88,-433},{-434,-271},{-234,-259},{-438,-439},{-440,-227}, {-179,-443},{-445,-446},{-447,-223},{-238,-452},{-453,-454},{-273,-254},{-246,-458},{-459, -48}, {-461,-462},{-463,-465},{-466,-467},{-468,-470},{-471,-304},{-476,-477},{-478,-112},{-481,-482}, {-483,-485},{-486,-487},{-490,-491},{-103,-118},{-502,-503},{-504,-189},{ -93,-507},{-508,-509}, {-148,-139},{-512,-513},{-308,-516},{-517,-518},{-520,-521},{ -73, -98},{ -95, -49},{-529,-222}, {-217,-197},{-533,-534},{-535,-284},{-537,-538},{-540,-541},{-542,-543},{-545,-546},{-144,-198}, {-314,-553},{-209,-279},{-557,-558},{-560,-561},{-562,-563},{-565,-566},{-567,-575},{-576,-577}, {-578,-580},{-581,-582},{-583,-585},{-586,-587},{-590,-591},{-600,-601},{-605,-606},}; Word16 mlt_decoder_tree_category_4[208][2] = { { 1, 2},{ 3, 0},{ 4, 5},{ 6, 7},{ 8, 9},{ 10, 11},{ 12, -64},{ -1, 13}, { 14, -16},{ -4, 15},{ 16, 17},{ 18, -80},{ -5, 19},{ 20, 21},{ -20, 22},{ 23, -65}, { -84, -21},{ -68, 24},{ -17, 25},{ 26, 27},{ 28, -81},{ -69, -85},{ 29, 30},{ 31, 32}, {-128, 33},{ 34, 35},{ -2, 36},{ 37, 38},{-144, 39},{ 40, -6},{ 41, 42},{ -32, 43}, { 44, -8},{ 45, -25},{ -96, 46},{ 47,-100},{ -9, 48},{ 49, -36},{ 50, -24},{ 51, 52}, { 53,-148},{ 54, 55},{ -22, 56},{ 57, 58},{-132, -89},{ 59, 60},{-101, 61},{ -37, 62}, { -18, 63},{ -88,-129},{ -66, -70},{ -97, 64},{ -72, -73},{ 65,-145},{-149, -86},{ 66, -33}, { 67,-133},{ 68, 69},{ 70, 71},{-192, 72},{ 73,-160},{ -82, 74},{-164, 75},{ -10, 76}, { 77,-208},{ 78, -40},{ 79, 80},{ -3, 81},{ -7, 82},{ 83, 84},{-104, 85},{ 86, -26}, { 87,-105},{ 88,-112},{ 89, 90},{ 91, -41},{ 92, 93},{ 94, 95},{ -48, 96},{ -90, 97}, { 98, -28},{ -52, 99},{ -12, 100},{ 101, -74},{ -13,-116},{-161, 102},{ 103, -29},{-102, 104}, {-152,-165},{ 105, 106},{ 107, 108},{ 109, 110},{ 111,-212},{ 112, 113},{-136, 114},{ 115,-137}, { 116, -23},{ -19,-153},{ -98,-134},{-196, 117},{ 118, 119},{ -38,-193},{-113,-150},{-209, 120}, { 121, -93},{ -83, 122},{ 123, 124},{ 125, 126},{ 127, 128},{ 129, 130},{ 131, -34},{-146, -53}, { 132, 133},{ 134, 135},{ 136, 137},{ 138,-130},{ -49, 139},{ 140, 141},{-117, -42},{ -67, -92}, { 142, -87},{ -77,-197},{ -71, 143},{ 144, 145},{ 146, 147},{ 148, 149},{ 150, 151},{ 152, 153}, { 154, 155},{ 156, 157},{ 158, 159},{ 160, 161},{ 162, 163},{ 164, 165},{ 166, 167},{ 168, 169}, {-108, -76},{-168,-169},{-176, -44},{-224, -56},{ -45,-180},{ -11,-106},{-213, 170},{ 171, 172}, { 173, 174},{ 175, 176},{ 177, 178},{ 179, 180},{ 181, 182},{ 183, 184},{ 185, 186},{ 187, 188}, { 189, 190},{ 191, 192},{ 193, 194},{ 195, 196},{ 197, 198},{ 199, 200},{ 201, 202},{ 203, 204}, { 205, 206},{ 207,-131},{ -30, -27},{ -43,-151},{ -75,-154},{-156,-162},{-109,-194},{-198,-201}, {-114,-225},{-228,-229},{-141,-142},{ -94,-124},{ -95,-147},{-115,-125},{ -54, -55},{-107, -58}, { -39,-155},{-121,-157},{-158,-103},{ -14,-122},{-163, -51},{ -57,-166},{-167, -46},{-110,-170}, {-172,-173},{ -61,-177},{-178, -99},{-181,-182},{-184,-185},{-118, -35},{ -15,-195},{ -31, -60}, {-135,-199},{-200, -79},{-202,-204},{-205,-119},{ -91,-210},{-211, -78},{-120,-214},{-215,-216}, {-217,-218},{-220,-221},{ -50,-138},{-226,-139},{-140,-230},{-232,-233},{-240,-241},{-244,-245}, }; Word16 mlt_decoder_tree_category_5[191][2] = { { 1, 2},{ 0, 3},{ 4, 5},{ 6, 7},{ 8, 9},{ 10, 11},{ -81, -1},{ 12, 13}, { 14, -27},{ -3, -9},{ 15, 16},{ 17, 18},{ 19, 20},{-108, 21},{ -4, 22},{ 23, -36}, { -12, 24},{ -82, 25},{ 26, -84},{ 27, -90},{ -10, -30},{ 28, 29},{ 30, -28},{ 31,-117}, { -13, 32},{ -39, 33},{ 34,-109},{ 35, -93},{ -85,-111},{ -37, 36},{ -31, 37},{ -91, 38}, { 39, 40},{ -40,-120},{ 41, 42},{-118, 43},{ -94, 44},{-112,-162},{ 45, 46},{ -2, 47}, { 48, 49},{-121,-189},{ 50, -54},{ 51, 52},{ 53, -18},{ 54, 55},{ -6, 56},{ 57, -5}, {-135, 58},{ 59, 60},{ 61, 62},{ -63, 63},{ 64, -7},{ -15, 65},{ 66, 67},{ -45, 68}, { 69, 70},{ 71, -21},{ 72, 73},{ 74, 75},{ 76, 77},{-163, 78},{ 79,-171},{-144, 80}, { -48, 81},{ -57, 82},{ 83, 84},{-165, 85},{ -16,-198},{ 86, 87},{ -11, 88},{ 89, -99}, { 90, -83},{ -19, 91},{ 92, 93},{ 94, 95},{ 96, 97},{ 98, 99},{ -87, 100},{ 101, 102}, {-190, -66},{ -33,-192},{ 103, 104},{ 105, 106},{-102, -42},{ 107,-126},{ 108, -29},{-129, -46}, { -86, -14},{-114, -32},{-172, 109},{ 110, -58},{ -34,-138},{ 111, 112},{ 113, 114},{ 115, 116}, { 117, 118},{ 119, 120},{-127,-166},{-174, 121},{ 122, 123},{ 124, 125},{ -88, -96},{ 126,-100}, { -38,-110},{ -22,-136},{ -55,-139},{-201, 127},{ -64,-193},{ 128, -49},{-175,-199},{ 129, 130}, { 131, 132},{ 133, 134},{ 135, 136},{ 137, 138},{ 139, 140},{ 141, 142},{ 143, 144},{ 145, 146}, { 147, 148},{ 149, 150},{-103, -92},{ -43,-130},{-145,-147},{-148, -41},{-216,-115},{-119,-123}, { -95, 151},{ 152, 153},{ 154, 155},{ 156, 157},{ 158, 159},{ 160, 161},{ 162, 163},{ 164, 165}, { 166, 167},{ 168, 169},{ 170, 171},{ 172, 173},{ 174, 175},{ 176, 177},{ 178, 179},{ 180, 181}, { 182, 183},{ 184, 185},{ 186, 187},{ 188, 189},{ 190,-153},{-180, -8},{ -97, -24},{-122,-113}, {-124,-125},{ -67, -44},{-128, -69},{-106,-131},{-132,-133},{ -61, -73},{-137,-116},{ -89,-140}, {-141,-142},{ -23, -25},{-146, -17},{-104,-149},{-150,-151},{ -52,-154},{-156,-157},{ -76, -70}, {-164, -51},{ -72,-167},{-168,-169},{ -47, -20},{-173, -59},{-101,-176},{-177,-178},{ -68,-181}, {-183,-184},{ -35, -60},{-191, -98},{ -56,-194},{-195,-196},{ -75, -65},{-200,-105},{-202,-203}, {-204,-205},{-207,-208},{-210,-211},{ -50,-217},{-219,-220},{-225,-226},{-228,-229},}; Word16 mlt_decoder_tree_category_6[31][2] = { { 1, 0},{ 2, 3},{ 4, 5},{ 6, 7},{ 8, -16},{ -1, -8},{ -2, -4},{ 9, 10}, { 11, 12},{ 13, 14},{ 15, 16},{ 17, -24},{ -3, -12},{ -6, 18},{ 19, -20},{ -10, -5}, { -17, -9},{ -18, 20},{ 21, 22},{ 23, 24},{ 25, -28},{ 26, -7},{ -14, -22},{ -26, -11}, { 27, -19},{ -25, -13},{ -21, 28},{ 29, -30},{ -27, 30},{ -15, -29},{ -23, -31},}; Word16 *table_of_decoder_tables[NUM_CATEGORIES-1] = { (Word16 *)mlt_decoder_tree_category_0, (Word16 *)mlt_decoder_tree_category_1, (Word16 *)mlt_decoder_tree_category_2, (Word16 *)mlt_decoder_tree_category_3, (Word16 *)mlt_decoder_tree_category_4, (Word16 *)mlt_decoder_tree_category_5, (Word16 *)mlt_decoder_tree_category_6, }; h323plus/plugins/audio/G.722.1/G722-1/typedef.h0000644000175000017500000000303611400216234017112 0ustar markmark/* =========================================================================== File: TYPEDEF.H v.1.0 - 26.Jan.2000 =========================================================================== ITU-T STL BASIC OPERATORS TYPE DEFINITION PROTOTYPES History: 01.Nov-05 Removed Word8: it was never used and conflicted with other libs. /tsz 26.Jan.00 v1.0 Incorporated to the STL from updated G.723.1/G.729 basic operator library (based on basic_op.h) ============================================================================ */ #ifndef TYPEDEF_H #define TYPEDEF_H "$Id $" #include #if defined(__BORLANDC__) || defined(__WATCOMC__) || defined(_MSC_VER) || defined(__ZTC__) || defined(__CYGWIN__) || defined(__MINGW32__) //typedef signed char Word8; typedef short Word16; typedef long Word32; typedef int Flag; #elif defined(__sun) //typedef signed char Word8; typedef short Word16; typedef long Word32; typedef int Flag; #elif defined(__unix__) || defined(__unix) || defined(__APPLE__) //typedef signed char Word8; typedef short Word16; typedef int Word32; typedef int Flag; #endif /* define 16 bit unsigned types for G.722.1 */ #if INT_MAX == 32767 typedef unsigned int UWord16; #elif SHRT_MAX == 32767 typedef unsigned short UWord16; #endif /* define 32 bit unsigned types for G.722.1 */ #if INT_MAX == 2147483647L typedef unsigned int UWord32; #elif LONG_MAX == 2147483647L typedef unsigned long UWord32; #endif #endif /* TYPEDEF_H */ h323plus/plugins/audio/G.722.1/G722-1/tables.c0000644000175000017500000003730111341106231016720 0ustar markmark/**************************************************************************** ** ** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C ** > Software Release 2.1 (2008-06) ** (Simple repackaging; no change from 2005-05 Release 2.0 code) ** ** Љ 2004 Polycom, Inc. ** ** All rights reserved. ** ****************************************************************************/ /**************************************************************************** Filename: tables.c Purpose: Contains tables used by G.722.1 Annex C Design Notes: ****************************************************************************/ /*************************************************************************** Include files ***************************************************************************/ #include "defs.h" Word16 int_region_standard_deviation_table[REGION_POWER_TABLE_SIZE] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 3, 4, 6, 8, 11, 16, 23, 32, 45, 64, 91, 128, 181, 256, 362, 512, 724, 1024, 1448, 2048, 2896, 4096, 5793, 8192, 11585, 16384, 23170, 0,0,0,0,0,0, 0,0,0,0}; Word16 standard_deviation_inverse_table[REGION_POWER_TABLE_SIZE] = { 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 23170, 16384, 11585, 8192, 5793, 4096, 2896, 2048, 1448, 1024, 724, 512, 362, 256, 181, 128, 91, 64, 45, 32, 23, 16, 11, 8, 6, 4, 3, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}; Word16 step_size_inverse_table[NUM_CATEGORIES]={ 23167,16384,11585,8192,5793,4096,2896,2896 }; Word16 vector_dimension[NUM_CATEGORIES] = { 2, 2, 2, 4, 4, 5, 5, 1}; Word16 number_of_vectors[NUM_CATEGORIES] = {10,10,10, 5, 5, 4, 4,20}; /* The last category isn't really coded with scalar quantization. */ Word16 max_bin[NUM_CATEGORIES] = {13, 9, 6, 4, 3, 2, 1, 1}; Word16 max_bin_plus_one_inverse[NUM_CATEGORIES] = { 2341,3277,4682,6554,8193,10923,16385,16385 }; /* * Release 1.2. * Add new version of int_dead_zone[] to go with * changes to vector_huffman() in encoder.c. * */ /************** See new version of table below Word16 int_dead_zone[NUM_CATEGORIES]= { 9830,10813,11796,12780,13763,14746,16384,16384 }; ***************/ /******** New version of table added in Release 1.2 ********/ Word16 int_dead_zone[NUM_CATEGORIES]= { 2457, 2703, 2949, 3195, 3440, 3686, 4096, 4096 }; /* * Release 1.2. * Added this new table to go with * changes to vector_huffman() in encoder.c, * accompanies the new table for int_dead_zone[]. */ Word16 int_dead_zone_low_bits[NUM_CATEGORIES]= { 2, 1, 0, 0, 3, 2, 0, 0 }; Word16 samples_to_rmlt_window[DCT_LENGTH]= { 44, 134, 224, 314, 404, 494, 584, 674, 764, 853, 943, 1033, 1123, 1213, 1302, 1392, 1482, 1571, 1661, 1750, 1840, 1929, 2019, 2108, 2197, 2286, 2376, 2465, 2554, 2643, 2732, 2821, 2909, 2998, 3087, 3175, 3264, 3352, 3441, 3529, 3617, 3705, 3793, 3881, 3969, 4057, 4144, 4232, 4319, 4407, 4494, 4581, 4668, 4755, 4842, 4928, 5015, 5101, 5188, 5274, 5360, 5446, 5532, 5617, 5703, 5788, 5873, 5959, 6043, 6128, 6213, 6297, 6382, 6466, 6550, 6634, 6718, 6801, 6885, 6968, 7051, 7134, 7217, 7299, 7382, 7464, 7546, 7628, 7709, 7791, 7872, 7953, 8034, 8115, 8195, 8276, 8356, 8436, 8515, 8595, 8674, 8753, 8832, 8911, 8989, 9068, 9146, 9223, 9301, 9378, 9455, 9532, 9609, 9685, 9762, 9838, 9913, 9989, 10064, 10139, 10214, 10288, 10363, 10437, 10510, 10584, 10657, 10730, 10803, 10875, 10948, 11020, 11091, 11163, 11234, 11305, 11375, 11446, 11516, 11586, 11655, 11724, 11793, 11862, 11930, 11998, 12066, 12134, 12201, 12268, 12334, 12401, 12467, 12532, 12598, 12663, 12728, 12792, 12857, 12920, 12984, 13047, 13110, 13173, 13235, 13297, 13359, 13420, 13481, 13542, 13602, 13662, 13722, 13782, 13841, 13899, 13958, 14016, 14074, 14131, 14188, 14245, 14301, 14357, 14413, 14468, 14523, 14578, 14632, 14686, 14739, 14793, 14845, 14898, 14950, 15002, 15053, 15104, 15155, 15205, 15255, 15305, 15354, 15403, 15451, 15500, 15547, 15595, 15642, 15688, 15734, 15780, 15826, 15871, 15916, 15960, 16004, 16047, 16091, 16133, 16176, 16218, 16259, 16300, 16341, 16382, 16422, 16461, 16501, 16540, 16578, 16616, 16654, 16691, 16728, 16764, 16800, 16836, 16871, 16906, 16940, 16974, 17008, 17041, 17074, 17106, 17138, 17170, 17201, 17232, 17262, 17292, 17321, 17350, 17379, 17407, 17435, 17462, 17489, 17516, 17542, 17567, 17593, 17617, 17642, 17666, 17689, 17713, 17735, 17758, 17779, 17801, 17822, 17842, 17863, 17882, 17901, 17920, 17939, 17957, 17974, 17991, 18008, 18024, 18040, 18055, 18070, 18085, 18099, 18113, 18126, 18139, 18151, 18163, 18174, 18185, 18196, 18206, 18216, 18225, 18234, 18242, 18250, 18257, 18265, 18271, 18277, 18283, 18288, 18293, 18298, 18302, 18305, 18308, 18311, 18313, 18315, 18316, 18317, 18317, }; Word16 rmlt_to_samples_window[DCT_LENGTH]= { 44, 133, 222, 310, 399, 488, 577, 666, 754, 843, 932, 1020, 1109, 1198, 1286, 1375, 1464, 1552, 1641, 1729, 1817, 1906, 1994, 2082, 2171, 2259, 2347, 2435, 2523, 2611, 2699, 2786, 2874, 2962, 3049, 3137, 3224, 3312, 3399, 3486, 3573, 3660, 3747, 3834, 3921, 4008, 4094, 4181, 4267, 4353, 4439, 4526, 4611, 4697, 4783, 4869, 4954, 5040, 5125, 5210, 5295, 5380, 5465, 5549, 5634, 5718, 5802, 5886, 5970, 6054, 6138, 6221, 6304, 6388, 6471, 6553, 6636, 6719, 6801, 6883, 6965, 7047, 7129, 7211, 7292, 7373, 7454, 7535, 7616, 7696, 7777, 7857, 7937, 8016, 8096, 8175, 8254, 8333, 8412, 8491, 8569, 8647, 8725, 8803, 8880, 8957, 9035, 9111, 9188, 9264, 9341, 9417, 9492, 9568, 9643, 9718, 9793, 9868, 9942, 10016, 10090, 10163, 10237, 10310, 10383, 10455, 10528, 10600, 10672, 10743, 10815, 10886, 10957, 11027, 11098, 11168, 11237, 11307, 11376, 11445, 11514, 11582, 11650, 11718, 11785, 11853, 11920, 11986, 12053, 12119, 12185, 12250, 12315, 12380, 12445, 12509, 12573, 12637, 12701, 12764, 12826, 12889, 12951, 13013, 13075, 13136, 13197, 13257, 13318, 13378, 13437, 13497, 13556, 13614, 13673, 13731, 13788, 13846, 13903, 13959, 14016, 14072, 14128, 14183, 14238, 14292, 14347, 14401, 14454, 14508, 14561, 14613, 14665, 14717, 14769, 14820, 14871, 14921, 14971, 15021, 15070, 15119, 15168, 15216, 15264, 15311, 15359, 15405, 15452, 15498, 15544, 15589, 15634, 15678, 15722, 15766, 15810, 15853, 15895, 15938, 15979, 16021, 16062, 16103, 16143, 16183, 16223, 16262, 16300, 16339, 16377, 16414, 16452, 16488, 16525, 16561, 16596, 16632, 16666, 16701, 16735, 16768, 16801, 16834, 16867, 16899, 16930, 16961, 16992, 17022, 17052, 17082, 17111, 17140, 17168, 17196, 17223, 17250, 17277, 17303, 17329, 17354, 17379, 17404, 17428, 17452, 17475, 17498, 17520, 17542, 17564, 17585, 17606, 17626, 17646, 17665, 17684, 17703, 17721, 17739, 17756, 17773, 17790, 17806, 17821, 17836, 17851, 17865, 17879, 17893, 17906, 17918, 17931, 17942, 17954, 17965, 17975, 17985, 17995, 18004, 18012, 18021, 18028, 18036, 18043, 18049, 18055, 18061, 18066, 18071, 18076, 18079, 18083, 18086, 18089, 18091, 18093, 18094, 18095, 18095, }; Word16 max_samples_to_rmlt_window[MAX_DCT_LENGTH]={ 0, 43, 89, 133, 178, 222, 268, 314, 357, 403, 447, 493, 538, 582, 628, 671, 717, 763, 807, 853, 896, 942, 987, 1031, 1077, 1121, 1166, 1212, 1256, 1301, 1345, 1390, 1436, 1480, 1526, 1569, 1615, 1660, 1704, 1749, 1793, 1838, 1884, 1928, 1973, 2016, 2062, 2107, 2151, 2196, 2239, 2285, 2331, 2374, 2419, 2463, 2508, 2553, 2597, 2642, 2685, 2730, 2776, 2819, 2864, 2908, 2952, 2998, 3041, 3086, 3129, 3174, 3219, 3263, 3307, 3350, 3396, 3440, 3483, 3528, 3571, 3616, 3661, 3704, 3748, 3791, 3836, 3881, 3923, 3968, 4011, 4055, 4100, 4143, 4187, 4230, 4274, 4318, 4362, 4406, 4448, 4493, 4537, 4580, 4624, 4666, 4710, 4755, 4797, 4841, 4883, 4927, 4971, 5013, 5057, 5099, 5144, 5187, 5229, 5273, 5315, 5359, 5402, 5444, 5488, 5530, 5573, 5617, 5658, 5702, 5743, 5787, 5830, 5871, 5915, 5956, 6000, 6043, 6084, 6127, 6169, 6211, 6254, 6296, 6339, 6380, 6423, 6465, 6507, 6549, 6590, 6633, 6675, 6716, 6759, 6799, 6842, 6884, 6925, 6967, 7007, 7050, 7092, 7132, 7175, 7215, 7257, 7299, 7339, 7381, 7421, 7462, 7504, 7544, 7586, 7626, 7667, 7709, 7749, 7790, 7830, 7871, 7912, 7952, 7993, 8032, 8073, 8114, 8153, 8194, 8234, 8275, 8315, 8355, 8395, 8434, 8474, 8515, 8554, 8594, 8632, 8673, 8713, 8752, 8792, 8830, 8871, 8910, 8949, 8989, 9027, 9066, 9106, 9144, 9184, 9221, 9261, 9300, 9338, 9378, 9415, 9454, 9493, 9531, 9570, 9607, 9646, 9685, 9722, 9761, 9798, 9836, 9875, 9912, 9950, 9987, 10025, 10064, 10100, 10138, 10175, 10213, 10250, 10287, 10325, 10361, 10398, 10436, 10472, 10510, 10545, 10583, 10620, 10656, 10692, 10728, 10766, 10803, 10838, 10874, 10910, 10947, 10983, 11018, 11055, 11089, 11126, 11162, 11197, 11233, 11268, 11303, 11340, 11374, 11410, 11444, 11480, 11515, 11549, 11585, 11619, 11654, 11689, 11723, 11758, 11791, 11826, 11861, 11895, 11930, 11963, 11997, 12032, 12065, 12099, 12132, 12166, 12201, 12233, 12267, 12300, 12333, 12367, 12400, 12433, 12465, 12499, 12532, 12563, 12597, 12629, 12662, 12695, 12727, 12759, 12790, 12823, 12856, 12887, 12920, 12951, 12983, 13016, 13046, 13078, 13109, 13141, 13173, 13203, 13235, 13266, 13296, 13328, 13358, 13389, 13419, 13450, 13481, 13510, 13541, 13571, 13602, 13632, 13661, 13692, 13721, 13751, 13781, 13810, 13840, 13869, 13898, 13929, 13957, 13986, 14015, 14044, 14073, 14101, 14130, 14158, 14187, 14216, 14244, 14272, 14300, 14328, 14357, 14384, 14412, 14439, 14468, 14495, 14522, 14550, 14577, 14604, 14632, 14658, 14686, 14711, 14739, 14765, 14792, 14819, 14844, 14871, 14897, 14923, 14949, 14975, 15001, 15027, 15053, 15079, 15103, 15129, 15155, 15180, 15205, 15229, 15255, 15280, 15304, 15329, 15353, 15378, 15403, 15426, 15451, 15475, 15499, 15523, 15546, 15570, 15594, 15618, 15641, 15664, 15688, 15711, 15734, 15757, 15780, 15802, 15825, 15848, 15871, 15892, 15915, 15937, 15960, 15982, 16003, 16026, 16047, 16069, 16090, 16112, 16133, 16154, 16175, 16197, 16217, 16239, 16259, 16279, 16301, 16320, 16341, 16361, 16382, 16402, 16421, 16441, 16461, 16481, 16501, 16520, 16539, 16558, 16578, 16597, 16615, 16635, 16653, 16672, 16691, 16709, 16728, 16746, 16764, 16782, 16800, 16818, 16835, 16853, 16871, 16888, 16905, 16923, 16940, 16957, 16974, 16991, 17008, 17024, 17041, 17057, 17074, 17090, 17106, 17122, 17138, 17154, 17169, 17185, 17201, 17216, 17231, 17246, 17262, 17277, 17291, 17306, 17321, 17336, 17350, 17364, 17379, 17393, 17407, 17421, 17435, 17449, 17462, 17476, 17490, 17502, 17515, 17528, 17542, 17554, 17567, 17580, 17592, 17605, 17618, 17629, 17642, 17653, 17666, 17678, 17689, 17701, 17712, 17724, 17736, 17746, 17757, 17768, 17779, 17790, 17800, 17811, 17822, 17832, 17842, 17852, 17862, 17872, 17882, 17892, 17902, 17911, 17920, 17930, 17938, 17947, 17956, 17965, 17974, 17983, 17991, 17999, 18008, 18016, 18025, 18032, 18040, 18047, 18055, 18063, 18070, 18078, 18085, 18092, 18099, 18106, 18112, 18119, 18126, 18132, 18138, 18144, 18151, 18157, 18163, 18168, 18174, 18179, 18185, 18191, 18196, 18201, 18206, 18211, 18216, 18220, 18225, 18229, 18234, 18238, 18242, 18246, 18250, 18254, 18257, 18260, 18264, 18268, 18271, 18274, 18277, 18280, 18283, 18286, 18288, 18291, 18293, 18295, 18297, 18300, 18301, 18303, 18305, 18306, 18308, 18309, 18311, 18312, 18312, 18314, 18315, 18315, 18316, 18316, 18317, 18317, 18317 }; Word16 max_rmlt_to_samples_window[MAX_DCT_LENGTH]={ 0, 43, 88, 131, 176, 219, 265, 310, 353, 398, 442, 487, 532, 575, 620, 663, 709, 754, 797, 842, 885, 931, 975, 1019, 1064, 1107, 1152, 1197, 1240, 1286, 1329, 1373, 1419, 1462, 1507, 1550, 1595, 1640, 1683, 1728, 1771, 1816, 1861, 1904, 1949, 1992, 2037, 2081, 2125, 2170, 2212, 2258, 2302, 2345, 2390, 2433, 2477, 2522, 2565, 2610, 2652, 2697, 2742, 2784, 2829, 2872, 2916, 2961, 3004, 3048, 3091, 3136, 3180, 3223, 3267, 3310, 3354, 3399, 3441, 3485, 3528, 3572, 3616, 3659, 3703, 3745, 3790, 3834, 3876, 3920, 3962, 4006, 4050, 4093, 4136, 4179, 4222, 4266, 4309, 4352, 4394, 4438, 4482, 4524, 4568, 4610, 4653, 4697, 4739, 4782, 4824, 4867, 4911, 4953, 4996, 5038, 5081, 5124, 5166, 5209, 5251, 5294, 5337, 5378, 5421, 5463, 5506, 5548, 5590, 5633, 5674, 5717, 5759, 5800, 5843, 5884, 5927, 5970, 6011, 6053, 6094, 6136, 6178, 6219, 6262, 6302, 6345, 6387, 6428, 6470, 6510, 6552, 6594, 6635, 6677, 6717, 6759, 6801, 6841, 6883, 6922, 6964, 7006, 7046, 7087, 7127, 7169, 7210, 7250, 7291, 7331, 7372, 7413, 7453, 7494, 7533, 7574, 7615, 7655, 7695, 7735, 7776, 7816, 7855, 7896, 7935, 7975, 8016, 8054, 8095, 8134, 8174, 8214, 8253, 8293, 8332, 8371, 8412, 8450, 8490, 8528, 8568, 8607, 8646, 8685, 8723, 8763, 8802, 8840, 8879, 8917, 8956, 8995, 9033, 9072, 9109, 9148, 9187, 9225, 9264, 9301, 9340, 9378, 9415, 9454, 9491, 9529, 9567, 9604, 9642, 9679, 9717, 9755, 9791, 9829, 9866, 9903, 9941, 9977, 10015, 10051, 10089, 10126, 10162, 10199, 10235, 10272, 10309, 10345, 10382, 10417, 10454, 10491, 10526, 10563, 10598, 10635, 10672, 10706, 10742, 10778, 10814, 10850, 10885, 10921, 10955, 10991, 11027, 11061, 11097, 11131, 11166, 11202, 11236, 11271, 11305, 11340, 11376, 11409, 11444, 11478, 11513, 11547, 11580, 11615, 11648, 11683, 11717, 11751, 11785, 11817, 11852, 11886, 11918, 11952, 11985, 12018, 12053, 12085, 12118, 12150, 12184, 12217, 12249, 12282, 12314, 12347, 12380, 12411, 12444, 12476, 12508, 12541, 12572, 12604, 12635, 12668, 12700, 12731, 12763, 12794, 12826, 12858, 12888, 12920, 12950, 12982, 13013, 13043, 13074, 13105, 13135, 13166, 13196, 13227, 13257, 13287, 13317, 13347, 13377, 13407, 13437, 13467, 13496, 13525, 13555, 13585, 13614, 13643, 13672, 13701, 13730, 13760, 13787, 13817, 13845, 13873, 13903, 13930, 13959, 13987, 14015, 14043, 14071, 14099, 14126, 14154, 14183, 14209, 14237, 14264, 14292, 14319, 14346, 14373, 14400, 14427, 14454, 14480, 14507, 14533, 14560, 14586, 14612, 14639, 14664, 14691, 14717, 14742, 14768, 14793, 14819, 14845, 14870, 14896, 14920, 14945, 14971, 14996, 15020, 15044, 15070, 15094, 15118, 15143, 15167, 15192, 15216, 15239, 15263, 15287, 15311, 15335, 15358, 15382, 15405, 15428, 15452, 15474, 15498, 15520, 15543, 15566, 15588, 15611, 15633, 15656, 15678, 15700, 15722, 15744, 15766, 15788, 15809, 15831, 15852, 15874, 15895, 15916, 15937, 15958, 15979, 16000, 16020, 16041, 16061, 16082, 16103, 16122, 16143, 16162, 16183, 16203, 16222, 16242, 16261, 16281, 16300, 16319, 16339, 16357, 16377, 16396, 16414, 16433, 16451, 16470, 16488, 16506, 16525, 16542, 16561, 16579, 16596, 16614, 16631, 16649, 16667, 16683, 16700, 16717, 16735, 16752, 16768, 16785, 16801, 16818, 16834, 16850, 16867, 16883, 16899, 16915, 16930, 16945, 16961, 16977, 16992, 17007, 17022, 17037, 17052, 17067, 17081, 17096, 17111, 17126, 17140, 17154, 17168, 17182, 17196, 17209, 17223, 17237, 17250, 17264, 17277, 17290, 17303, 17315, 17329, 17341, 17354, 17367, 17379, 17391, 17404, 17415, 17428, 17439, 17451, 17463, 17475, 17486, 17497, 17509, 17520, 17531, 17542, 17552, 17563, 17574, 17584, 17595, 17605, 17616, 17626, 17636, 17646, 17655, 17665, 17675, 17684, 17694, 17703, 17712, 17721, 17730, 17739, 17747, 17756, 17764, 17773, 17781, 17789, 17798, 17806, 17813, 17821, 17829, 17836, 17843, 17851, 17858, 17866, 17872, 17879, 17886, 17893, 17899, 17906, 17912, 17918, 17924, 17931, 17937, 17942, 17948, 17953, 17959, 17964, 17970, 17975, 17980, 17985, 17990, 17995, 17999, 18004, 18008, 18012, 18016, 18021, 18025, 18028, 18032, 18036, 18039, 18043, 18046, 18049, 18052, 18055, 18058, 18061, 18064, 18067, 18069, 18071, 18073, 18075, 18078, 18079, 18081, 18083, 18084, 18086, 18087, 18089, 18090, 18090, 18091, 18092, 18093, 18094, 18094, 18095, 18095, 18095 }; h323plus/plugins/audio/G.722.1/G722-1/dct4_s.h0000644000175000017500000005652311341106231016642 0ustar markmark/*********************************************************************** ** ** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C ** > Software Release 2.1 (2008-06) ** (Simple repackaging; no change from 2005-05 Release 2.0 code) ** ** Љ 2004 Polycom, Inc. ** ** All rights reserved. ** ***********************************************************************/ /*********************************************************************** Filename: dct4_s.h Purpose: Contains tables used by dct4_s.c Design Notes: ***********************************************************************/ /*************************************************************************** Include files ***************************************************************************/ typedef struct { Word16 cosine; Word16 minus_sine; } cos_msin_t; /*************************************************************************** The dct_core_s table was generated by the following code for(i=0;i<10;++i) { for(k=0;k<10;++k) { dct_core_s[i][k]=(short) (FTOI(((.9*32768.)*cos(3.1415926*(k+0.5)*(i+0.5)/10.)))); } } ***************************************************************************/ Word16 dct_core_s[10][10] = { { 29400, 28676, 27246, 25145, 22425, 19153, 15409, 11286, 6885, 2314 }, { 28676, 22425, 11286, -2314, -15409, -25145, -29400, -27246, -19153, -6885 }, { 27246, 11286, -11286, -27246, -27246, -11286, 11286, 27246, 27246, 11286 }, { 25145, -2314, -27246, -22425, 6885, 28676, 19153, -11286, -29400, -15409 }, { 22425, -15409, -27246, 6885, 29400, 2314, -28676, -11286, 25145, 19153 }, { 19153, -25145, -11286, 28676, 2314, -29400, 6885, 27246, -15409, -22425 }, { 15409, -29400, 11286, 19153, -28676, 6885, 22425, -27246, 2314, 25145 }, { 11286, -27246, 27246, -11286, -11286, 27246, -27246, 11286, 11286, -27246 }, { 6885, -19153, 27246, -29400, 25145, -15409, 2314, 11286, -22425, 28676 }, { 2314, -6885, 11286, -15409, 19153, -22425, 25145, -27246, 28676, -29400 } }; Word16 syn_bias_7khz[DCT_LENGTH] = { -4, 4, -5, -2, 0, -4, 6, 2, -2, -4, -3, 3, 0, 0, -2, 4, 0, 0, 3, -6, 8, 5, 4, 5, -8, 0, -2, 0, 0, -3, 3, 0, 0, 0, 1, -1, -2, 0, 0, 2, -2, -5, -2, 3, 2, -1, -1, -6, 3, 1, -7, 4, 4, 0, 1, 4, 1, 0, 1, -5, -1, 1, -6, 0, -1, -1, 3, 0, -2, 1, 2, -4, 0, 9, 0, -3, 1, 1, 1, 0, -3, -2, -1, -4, -2, 0, 5, 2, -3, 5, 0, -2, 4, 4, 0, -6, -4, 2, 0, 0, 0, -1, -1, -2, 0, 6, 1, 0, 0, -1, 0, -4, -1, 0, -4, 1, -1, -5, 0, 1, 2, 4, 0, -8, -4, 0, -2, -2, 2, 5, -3, -1, 1, -4, 0, 0, 0, -1, -3, 0, -5, -4, 0, -2, 0, 7, 1, 0, 5, -2, -1, 2, 2, -2, 3, 7, -3, 4, 1, -4, 0, 0, 3, -7, -5, 0, 0, 4, 0, -2, -1, 0, -5, 0, 2, 0, 11, 5, -1, 0, 2, 2, -2, -2, 5, 4, -3, 1, 0, -2, 1, 3, 2, 0, 1, 0, 0, 0, 5, 6, -2, -1, 0, 2, 3, 2, 0, -3, 4, 5, 0, -1, 0, 3, 1, -2, -3, -2, -1, 2, -1, -1, -2, -7, 4, 6, -5, -6, -3, -4, 0, 2, -5, -2, 3, 0, 0, 0, 2, -2, -4, 3, 3, 1, 0, 0, 4, -1, 8, 13, 1, 2, 0, 2, 0, -1, 4, -3, 1, 0, -1, 3, 0, 0, -5, 0, 6, 2, 4, 5, 2, -1, -1, 3, 6, 1, 1, 2, -4, 0, -1, -6, -2, -2, 2, 1, 2, 6, 2, 0, -2, -2, 0, -1, 2, 0, 0, 3, -2, 1, 3, 1, 2, -1, -2, 2, 2, -4, 0, 0, -3, 0, -4, -3, 6, 7, 2, 2, 0, -3}; Word16 dither[DCT_LENGTH]= { 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0}; Word16 max_dither[MAX_DCT_LENGTH]= { 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0 }; /******************************************************************************** The s_cos_min tables were generated by the following code: double angle, scale; int index; for (index = 0;index < length;index++) { angle = scale * ((double)index + 0.5); table[index].cosine = (short) (FTOI((18427)* cos(angle))); table[index].minus_sine = (short) (FTOI((18427)*(-sin(angle)))); } ********************************************************************************/ cos_msin_t s_cos_msin_2[DCT_LENGTH_DIV_32] = { { 18413 , -723 } , { 18299 , -2166 } , { 18073 , -3595 } , { 17735 , -5002 } , { 17288 , -6378 } , { 16734 , -7715 } , { 16077 , -9004 } , { 15321 , -10237 } , { 14471 , -11408 } , { 13531 , -12508 } }; cos_msin_t s_cos_msin_4[DCT_LENGTH_DIV_16] = { { 18423 , -362 } , { 18395 , -1085 } , { 18338 , -1806 } , { 18253 , -2525 } , { 18140 , -3239 } , { 17999 , -3949 } , { 17830 , -4653 } , { 17634 , -5349 } , { 17410 , -6037 } , { 17159 , -6716 } , { 16883 , -7385 } , { 16580 , -8042 } , { 16251 , -8686 } , { 15898 , -9318 } , { 15520 , -9935 } , { 15118 , -10536 } , { 14692 , -11122 } , { 14244 , -11690 } , { 13774 , -12240 } , { 13283 , -12772 } }; cos_msin_t s_cos_msin_8[DCT_LENGTH_DIV_8] = { { 18426 , -181 } , { 18419 , -543 } , { 18405 , -904 } , { 18384 , -1265 } , { 18355 , -1626 } , { 18320 , -1986 } , { 18277 , -2345 } , { 18228 , -2704 } , { 18171 , -3061 } , { 18107 , -3417 } , { 18037 , -3772 } , { 17959 , -4126 } , { 17875 , -4477 } , { 17783 , -4827 } , { 17685 , -5176 } , { 17580 , -5522 } , { 17468 , -5866 } , { 17350 , -6208 } , { 17225 , -6547 } , { 17093 , -6884 } , { 16954 , -7219 } , { 16809 , -7550 } , { 16658 , -7879 } , { 16500 , -8204 } , { 16336 , -8526 } , { 16165 , -8846 } , { 15988 , -9161 } , { 15805 , -9473 } , { 15616 , -9782 } , { 15421 , -10087 } , { 15220 , -10387 } , { 15013 , -10684 } , { 14801 , -10977 } , { 14582 , -11265 } , { 14358 , -11550 } , { 14129 , -11829 } , { 13894 , -12104 } , { 13654 , -12375 } , { 13408 , -12641 } , { 13157 , -12901 } }; cos_msin_t s_cos_msin_16[DCT_LENGTH_DIV_4] = { { 18427 , -90 } , { 18425 , -271 } , { 18421 , -452 } , { 18416 , -633 } , { 18409 , -814 } , { 18400 , -995 } , { 18389 , -1175 } , { 18377 , -1356 } , { 18363 , -1536 } , { 18347 , -1716 } , { 18329 , -1896 } , { 18310 , -2076 } , { 18288 , -2256 } , { 18265 , -2435 } , { 18241 , -2614 } , { 18214 , -2793 } , { 18186 , -2972 } , { 18156 , -3150 } , { 18124 , -3328 } , { 18090 , -3506 } , { 18055 , -3684 } , { 18018 , -3861 } , { 17979 , -4037 } , { 17939 , -4214 } , { 17897 , -4390 } , { 17853 , -4565 } , { 17807 , -4740 } , { 17760 , -4915 } , { 17710 , -5089 } , { 17660 , -5262 } , { 17607 , -5436 } , { 17553 , -5608 } , { 17497 , -5780 } , { 17439 , -5952 } , { 17380 , -6123 } , { 17319 , -6293 } , { 17257 , -6463 } , { 17192 , -6632 } , { 17126 , -6800 } , { 17059 , -6968 } , { 16990 , -7135 } , { 16919 , -7302 } , { 16846 , -7467 } , { 16772 , -7632 } , { 16696 , -7797 } , { 16619 , -7960 } , { 16540 , -8123 } , { 16459 , -8285 } , { 16377 , -8446 } , { 16294 , -8607 } , { 16208 , -8766 } , { 16121 , -8925 } , { 16033 , -9083 } , { 15943 , -9240 } , { 15852 , -9396 } , { 15759 , -9551 } , { 15664 , -9705 } , { 15568 , -9858 } , { 15471 , -10011 } , { 15372 , -10162 } , { 15271 , -10313 } , { 15169 , -10462 } , { 15066 , -10610 } , { 14961 , -10758 } , { 14854 , -10904 } , { 14747 , -11049 } , { 14637 , -11194 } , { 14527 , -11337 } , { 14415 , -11479 } , { 14301 , -11620 } , { 14187 , -11760 } , { 14071 , -11898 } , { 13953 , -12036 } , { 13834 , -12172 } , { 13714 , -12308 } , { 13593 , -12442 } , { 13470 , -12575 } , { 13346 , -12706 } , { 13220 , -12837 } , { 13094 , -12966 } }; cos_msin_t s_cos_msin_32[DCT_LENGTH_DIV_2] = { { 18427 , -45 } , { 18427 , -136 } , { 18426 , -226 } , { 18424 , -317 } , { 18423 , -407 } , { 18420 , -497 } , { 18418 , -588 } , { 18415 , -678 } , { 18411 , -769 } , { 18407 , -859 } , { 18403 , -949 } , { 18398 , -1040 } , { 18392 , -1130 } , { 18387 , -1220 } , { 18380 , -1310 } , { 18374 , -1401 } , { 18367 , -1491 } , { 18359 , -1581 } , { 18351 , -1671 } , { 18343 , -1761 } , { 18334 , -1851 } , { 18324 , -1941 } , { 18315 , -2031 } , { 18305 , -2121 } , { 18294 , -2211 } , { 18283 , -2301 } , { 18271 , -2390 } , { 18259 , -2480 } , { 18247 , -2570 } , { 18234 , -2659 } , { 18221 , -2749 } , { 18207 , -2838 } , { 18193 , -2927 } , { 18178 , -3017 } , { 18163 , -3106 } , { 18148 , -3195 } , { 18132 , -3284 } , { 18116 , -3373 } , { 18099 , -3462 } , { 18082 , -3551 } , { 18064 , -3639 } , { 18046 , -3728 } , { 18027 , -3816 } , { 18009 , -3905 } , { 17989 , -3993 } , { 17969 , -4081 } , { 17949 , -4170 } , { 17928 , -4258 } , { 17907 , -4346 } , { 17886 , -4434 } , { 17864 , -4521 } , { 17841 , -4609 } , { 17818 , -4696 } , { 17795 , -4784 } , { 17772 , -4871 } , { 17747 , -4958 } , { 17723 , -5045 } , { 17698 , -5132 } , { 17672 , -5219 } , { 17647 , -5306 } , { 17620 , -5392 } , { 17594 , -5479 } , { 17567 , -5565 } , { 17539 , -5651 } , { 17511 , -5737 } , { 17483 , -5823 } , { 17454 , -5909 } , { 17425 , -5994 } , { 17395 , -6080 } , { 17365 , -6165 } , { 17335 , -6250 } , { 17304 , -6335 } , { 17272 , -6420 } , { 17241 , -6505 } , { 17208 , -6590 } , { 17176 , -6674 } , { 17143 , -6758 } , { 17110 , -6842 } , { 17076 , -6926 } , { 17042 , -7010 } , { 17007 , -7093 } , { 16972 , -7177 } , { 16937 , -7260 } , { 16901 , -7343 } , { 16864 , -7426 } , { 16828 , -7509 } , { 16791 , -7591 } , { 16753 , -7674 } , { 16715 , -7756 } , { 16677 , -7838 } , { 16638 , -7919 } , { 16599 , -8001 } , { 16560 , -8082 } , { 16520 , -8164 } , { 16480 , -8245 } , { 16439 , -8325 } , { 16398 , -8406 } , { 16357 , -8486 } , { 16315 , -8567 } , { 16272 , -8647 } , { 16230 , -8726 } , { 16187 , -8806 } , { 16143 , -8885 } , { 16100 , -8964 } , { 16055 , -9043 } , { 16011 , -9122 } , { 15966 , -9200 } , { 15920 , -9279 } , { 15875 , -9357 } , { 15829 , -9435 } , { 15782 , -9512 } , { 15735 , -9589 } , { 15688 , -9667 } , { 15640 , -9744 } , { 15592 , -9820 } , { 15544 , -9897 } , { 15495 , -9973 } , { 15446 , -10049 } , { 15396 , -10124 } , { 15347 , -10200 } , { 15296 , -10275 } , { 15246 , -10350 } , { 15195 , -10425 } , { 15143 , -10499 } , { 15092 , -10573 } , { 15040 , -10647 } , { 14987 , -10721 } , { 14934 , -10794 } , { 14881 , -10868 } , { 14828 , -10941 } , { 14774 , -11013 } , { 14719 , -11086 } , { 14665 , -11158 } , { 14610 , -11230 } , { 14555 , -11301 } , { 14499 , -11372 } , { 14443 , -11444 } , { 14387 , -11514 } , { 14330 , -11585 } , { 14273 , -11655 } , { 14216 , -11725 } , { 14158 , -11795 } , { 14100 , -11864 } , { 14041 , -11933 } , { 13983 , -12002 } , { 13924 , -12070 } , { 13864 , -12138 } , { 13804 , -12206 } , { 13744 , -12274 } , { 13684 , -12341 } , { 13623 , -12408 } , { 13562 , -12475 } , { 13501 , -12541 } , { 13439 , -12608 } , { 13377 , -12673 } , { 13314 , -12739 } , { 13252 , -12804 } , { 13189 , -12869 } , { 13125 , -12934 } , { 13062 , -12998 } }; cos_msin_t s_cos_msin_64[DCT_LENGTH] = { {18426, -21}, {18426, -66}, {18426, -110}, {18426, -154}, {18425, -198}, {18425, -242}, {18424, -286}, {18424, -331}, {18423, -374}, {18421, -419}, {18421, -463}, {18419, -507}, {18418, -552}, {18417, -595}, {18415, -639}, {18414, -684}, {18412, -728}, {18410, -772}, {18408, -816}, {18406, -860}, {18404, -904}, {18402, -949}, {18400, -992}, {18397, -1037}, {18394, -1081}, {18392, -1125}, {18389, -1169}, {18387, -1213}, {18384, -1257}, {18380, -1301}, {18378, -1345}, {18374, -1389}, {18371, -1433}, {18367, -1477}, {18364, -1521}, {18360, -1566}, {18356, -1609}, {18352, -1653}, {18348, -1697}, {18344, -1742}, {18339, -1785}, {18335, -1829}, {18331, -1873}, {18326, -1917}, {18322, -1961}, {18317, -2005}, {18312, -2049}, {18307, -2092}, {18302, -2137}, {18297, -2180}, {18292, -2224}, {18286, -2268}, {18281, -2312}, {18275, -2356}, {18270, -2399}, {18264, -2443}, {18258, -2487}, {18252, -2531}, {18246, -2574}, {18240, -2618}, {18233, -2662}, {18227, -2706}, {18220, -2749}, {18214, -2793}, {18207, -2836}, {18200, -2880}, {18193, -2924}, {18186, -2967}, {18179, -3011}, {18172, -3055}, {18164, -3098}, {18157, -3142}, {18149, -3185}, {18141, -3229}, {18134, -3272}, {18126, -3316}, {18118, -3359}, {18109, -3403}, {18101, -3446}, {18094, -3489}, {18085, -3533}, {18076, -3576}, {18068, -3619}, {18059, -3663}, {18050, -3706}, {18041, -3749}, {18032, -3792}, {18023, -3836}, {18014, -3879}, {18005, -3922}, {17995, -3965}, {17986, -4008}, {17975, -4051}, {17966, -4094}, {17956, -4138}, {17946, -4180}, {17936, -4224}, {17926, -4266}, {17916, -4309}, {17905, -4353}, {17895, -4395}, {17884, -4438}, {17874, -4481}, {17863, -4524}, {17852, -4567}, {17841, -4609}, {17830, -4652}, {17819, -4695}, {17807, -4738}, {17796, -4780}, {17784, -4823}, {17772, -4865}, {17761, -4908}, {17749, -4951}, {17738, -4993}, {17725, -5036}, {17713, -5078}, {17701, -5121}, {17689, -5163}, {17676, -5205}, {17664, -5248}, {17651, -5290}, {17638, -5333}, {17626, -5375}, {17613, -5417}, {17599, -5459}, {17586, -5501}, {17573, -5544}, {17560, -5586}, {17546, -5627}, {17533, -5670}, {17519, -5712}, {17505, -5753}, {17492, -5795}, {17478, -5837}, {17464, -5879}, {17450, -5921}, {17435, -5963}, {17421, -6005}, {17406, -6046}, {17392, -6088}, {17377, -6130}, {17363, -6172}, {17348, -6213}, {17333, -6254}, {17318, -6296}, {17303, -6338}, {17288, -6379}, {17272, -6420}, {17257, -6462}, {17241, -6503}, {17225, -6545}, {17210, -6586}, {17194, -6627}, {17178, -6668}, {17162, -6709}, {17145, -6750}, {17130, -6791}, {17113, -6832}, {17097, -6874}, {17080, -6915}, {17064, -6956}, {17047, -6996}, {17030, -7037}, {17013, -7078}, {16996, -7119}, {16979, -7159}, {16962, -7200}, {16945, -7241}, {16927, -7281}, {16910, -7322}, {16892, -7362}, {16874, -7403}, {16856, -7444}, {16838, -7484}, {16821, -7524}, {16802, -7564}, {16784, -7605}, {16766, -7645}, {16748, -7685}, {16729, -7725}, {16711, -7765}, {16692, -7805}, {16674, -7845}, {16654, -7885}, {16635, -7925}, {16616, -7964}, {16597, -8004}, {16578, -8044}, {16559, -8084}, {16539, -8124}, {16520, -8164}, {16500, -8203}, {16480, -8242}, {16461, -8282}, {16441, -8322}, {16421, -8361}, {16401, -8400}, {16380, -8440}, {16360, -8479}, {16340, -8518}, {16319, -8557}, {16299, -8597}, {16278, -8635}, {16257, -8674}, {16237, -8713}, {16215, -8752}, {16195, -8791}, {16173, -8829}, {16152, -8868}, {16131, -8907}, {16110, -8946}, {16088, -8985}, {16067, -9023}, {16045, -9061}, {16023, -9100}, {16001, -9138}, {15979, -9176}, {15957, -9215}, {15935, -9253}, {15913, -9291}, {15891, -9329}, {15868, -9367}, {15846, -9405}, {15823, -9443}, {15800, -9481}, {15778, -9519}, {15755, -9557}, {15732, -9595}, {15709, -9632}, {15686, -9670}, {15662, -9708}, {15639, -9745}, {15615, -9782}, {15592, -9820}, {15569, -9857}, {15544, -9894}, {15521, -9932}, {15497, -9969}, {15473, -10006}, {15449, -10043}, {15425, -10080}, {15401, -10117}, {15377, -10154}, {15352, -10191}, {15327, -10227}, {15303, -10264}, {15278, -10301}, {15254, -10337}, {15229, -10374}, {15204, -10411}, {15180, -10447}, {15154, -10483}, {15129, -10519}, {15104, -10556}, {15078, -10592}, {15053, -10628}, {15027, -10664}, {15002, -10700}, {14976, -10736}, {14950, -10772}, {14924, -10808}, {14898, -10844}, {14872, -10879}, {14846, -10915}, {14820, -10950}, {14794, -10985}, {14767, -11021}, {14741, -11056}, {14714, -11092}, {14687, -11127}, {14661, -11162}, {14635, -11197}, {14607, -11232}, {14581, -11267}, {14554, -11302}, {14526, -11337}, {14499, -11372}, {14472, -11407}, {14444, -11441}, {14417, -11476}, {14389, -11511}, {14362, -11545}, {14334, -11579}, {14306, -11614}, {14278, -11648}, {14251, -11682}, {14222, -11716}, {14194, -11750}, {14166, -11784}, {14137, -11818}, {14109, -11852}, {14081, -11886}, {14053, -11919}, {14023, -11953}, {13995, -11987}, {13966, -12020}, {13937, -12054}, {13909, -12087}, {13879, -12120}, {13851, -12153}, {13821, -12187}, {13792, -12220}, {13763, -12253}, {13733, -12286}, {13704, -12319}, {13674, -12351}, {13645, -12385}, {13615, -12417}, {13585, -12450}, {13555, -12482}, {13525, -12514}, {13495, -12546}, {13465, -12579}, {13435, -12611}, {13405, -12644}, {13374, -12676}, {13345, -12708}, {13314, -12739}, {13283, -12772} }; cos_msin_t *s_cos_msin_table[] = {s_cos_msin_2, s_cos_msin_4, s_cos_msin_8, s_cos_msin_16, s_cos_msin_32, s_cos_msin_64 }; h323plus/plugins/audio/G.722.1/G722-1/encoder.c0000644000175000017500000011415011341106231017063 0ustar markmark/*************************************************************************** ** ** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C ** > Software Release 2.1 (2008-06) ** (Simple repackaging; no change from 2005-05 Release 2.0 code) ** ** Љ 2004 Polycom, Inc. ** ** All rights reserved. ** ***************************************************************************/ /*************************************************************************** Filename: encoder.c Purpose: Contains files used to implement the G.722.1 Annex C encoder Design Notes: ***************************************************************************/ /*************************************************************************** Include files ***************************************************************************/ #include #include #include "defs.h" #include "huff_def.h" #include "tables.h" #include "count.h" /*************************************************************************** Function: encoder Syntax: void encoder(Word16 number_of_available_bits, Word16 number_of_regions, Word16 mlt_coefs, Word16 mag_shift, Word16 out_words) inputs: number_of_available_bits number_of_regions mag_shift mlt_coefs[DCT_LENGTH] outputs: out_words[MAX_BITS_PER_FRAME/16] Description: Encodes the mlt coefs into out_words using G.722.1 Annex C WMOPS: 7kHz | 24kbit | 32kbit -------|--------------|---------------- AVG | 0.93 | 1.04 -------|--------------|---------------- MAX | 1.20 | 1.28 -------|--------------|---------------- 14kHz | 24kbit | 32kbit | 48kbit -------|--------------|----------------|---------------- AVG | 1.39 | 1.71 | 2.01 -------|--------------|----------------|---------------- MAX | 2.00 | 2.30 | 2.52 -------|--------------|----------------|---------------- ***************************************************************************/ void encoder(Word16 number_of_available_bits, Word16 number_of_regions, Word16 *mlt_coefs, Word16 mag_shift, Word16 *out_words) { Word16 num_categorization_control_bits; Word16 num_categorization_control_possibilities; Word16 number_of_bits_per_frame; Word16 number_of_envelope_bits; Word16 categorization_control; Word16 region; Word16 absolute_region_power_index[MAX_NUMBER_OF_REGIONS]; Word16 power_categories[MAX_NUMBER_OF_REGIONS]; Word16 category_balances[MAX_NUM_CATEGORIZATION_CONTROL_POSSIBILITIES-1]; Word16 drp_num_bits[MAX_NUMBER_OF_REGIONS+1]; UWord16 drp_code_bits[MAX_NUMBER_OF_REGIONS+1]; Word16 region_mlt_bit_counts[MAX_NUMBER_OF_REGIONS]; UWord32 region_mlt_bits[4*MAX_NUMBER_OF_REGIONS]; Word16 mag_shift_offset; Word16 temp; /* initialize variables */ test(); if (number_of_regions == NUMBER_OF_REGIONS) { num_categorization_control_bits = NUM_CATEGORIZATION_CONTROL_BITS; move16(); num_categorization_control_possibilities = NUM_CATEGORIZATION_CONTROL_POSSIBILITIES; move16(); } else { num_categorization_control_bits = MAX_NUM_CATEGORIZATION_CONTROL_BITS; move16(); num_categorization_control_possibilities = MAX_NUM_CATEGORIZATION_CONTROL_POSSIBILITIES; move16(); } number_of_bits_per_frame = number_of_available_bits; move16(); for (region=0; region= 0) { temp = extract_l(L_shr(current_word,j)); out_word = add(out_word,temp); out_words[out_word_index++] = out_word; move16(); out_word_bits_free = 16; move16(); out_word_bits_free = sub(out_word_bits_free,j); acca = (current_word << out_word_bits_free); out_word = extract_l(acca); } else { j = negate(j); acca = (current_word << j); accb = L_deposit_l(out_word); acca = L_add(accb,acca); out_word = extract_l(acca); out_word_bits_free = sub(out_word_bits_free,current_word_bits_left); } } /* These code bits are left justified. */ for (region=0;region 0) current_word_bits_left = region_bit_count; else current_word_bits_left = 32; current_word = *in_word_ptr++; acca = L_deposit_l(out_word_index); acca = L_shl(acca,4); acca = L_sub(acca,number_of_bits_per_frame); /* from while loop */ test(); test(); logic16(); while ((region_bit_count > 0) && (acca < 0)) { /* from while loop */ test(); test(); logic16(); temp = sub(current_word_bits_left,out_word_bits_free); test(); if (temp >= 0) { temp = sub(32,out_word_bits_free); accb = LU_shr(current_word,temp); slice = (UWord16)extract_l(accb); out_word = add(out_word,slice); test(); current_word <<= out_word_bits_free; current_word_bits_left = sub(current_word_bits_left,out_word_bits_free); out_words[out_word_index++] = extract_l(out_word); move16(); out_word = 0; move16(); out_word_bits_free = 16; move16(); } else { temp = sub(32,current_word_bits_left); accb = LU_shr(current_word,temp); slice = (UWord16)extract_l(accb); temp = sub(out_word_bits_free,current_word_bits_left); test(); accb = slice << temp; acca = L_deposit_l(out_word); acca = L_add(acca,accb); out_word = extract_l(acca); out_word_bits_free = sub(out_word_bits_free,current_word_bits_left); current_word_bits_left = 0; move16(); } test(); if (current_word_bits_left == 0) { current_word = *in_word_ptr++; region_bit_count = sub(region_bit_count,32); /* current_word_bits_left = MIN(32,region_bit_count); */ temp = sub(32,region_bit_count); test(); if(temp > 0) current_word_bits_left = region_bit_count; else current_word_bits_left = 32; } acca = L_deposit_l(out_word_index); acca = L_shl(acca,4); acca = L_sub(acca,number_of_bits_per_frame); } accb = L_deposit_l(out_word_index); accb = L_shl(accb,4); accb = L_sub(accb,number_of_bits_per_frame); } } /* Fill out with 1's. */ test(); while (acca < 0) { test(); current_word = 0x0000ffff; move32(); temp = sub(16,out_word_bits_free); acca = LU_shr(current_word,temp); slice = (UWord16)extract_l(acca); out_word = add(out_word,slice); out_words[out_word_index++] = out_word; move16(); out_word = 0; move16(); out_word_bits_free = 16; move16(); acca = L_deposit_l(out_word_index); acca = L_shl(acca,4); acca = L_sub(acca,number_of_bits_per_frame); } } /*************************************************************************** Function: adjust_abs_region_power_index Syntax: adjust_abs_region_power_index(Word16 *absolute_region_power_index, Word16 *mlt_coefs, Word16 number_of_regions) inputs: *mlt_coefs *absolute_region_power_index number_of_regions outputs: *absolute_region_power_index Description: Adjusts the absolute power index WMOPS: 7kHz | 24kbit | 32kbit -------|--------------|---------------- AVG | 0.03 | 0.03 -------|--------------|---------------- MAX | 0.12 | 0.12 -------|--------------|---------------- 14kHz | 24kbit | 32kbit | 48kbit -------|--------------|----------------|---------------- AVG | 0.03 | 0.03 | 0.03 -------|--------------|----------------|---------------- MAX | 0.14 | 0.14 | 0.14 -------|--------------|----------------|---------------- ***************************************************************************/ void adjust_abs_region_power_index(Word16 *absolute_region_power_index,Word16 *mlt_coefs,Word16 number_of_regions) { Word16 n,i; Word16 region; Word16 *raw_mlt_ptr; Word32 acca; Word16 temp; for (region=0; region 0) { temp = extract_l(L_mult0(region,REGION_SIZE)); raw_mlt_ptr = &mlt_coefs[temp]; for (i=0; i 0) { test(); long_accumulator = L_shr(long_accumulator,1); acca = (long_accumulator & 0x7fff0000L); logic32(); power_shift = add(power_shift,1); } acca = L_sub(long_accumulator,32767); temp = add(power_shift,15); test(); test(); logic16(); while ((acca <= 0) && (temp >= 0)) { test(); test(); logic16(); long_accumulator = L_shl(long_accumulator,1); acca = L_sub(long_accumulator,32767); power_shift--; temp = add(power_shift,15); } long_accumulator = L_shr(long_accumulator,1); /* 28963 corresponds to square root of 2 times REGION_SIZE(20). */ acca = L_sub(long_accumulator,28963); test(); if (acca >= 0) power_shift = add(power_shift,1); acca = L_deposit_l(mag_shift); acca = L_shl(acca,1); acca = L_sub(power_shift,acca); acca = L_add(35,acca); acca = L_sub(acca,REGION_POWER_TABLE_NUM_NEGATIVES); absolute_region_power_index[region] = extract_l(acca); } /* Before we differentially encode the quantized region powers, adjust upward the valleys to make sure all the peaks can be accurately represented. */ temp = sub(number_of_regions,2); for (region = temp; region >= 0; region--) { temp1 = sub(absolute_region_power_index[region+1],DRP_DIFF_MAX); temp2 = sub(absolute_region_power_index[region],temp1); test(); if (temp2 < 0) { absolute_region_power_index[region] = temp1; move16(); } } /* The MLT is currently scaled too low by the factor ENCODER_SCALE_FACTOR(=18318)/32768 * (1./sqrt(160). This is the ninth power of 1 over the square root of 2. So later we will add ESF_ADJUSTMENT_TO_RMS_INDEX (now 9) to drp_code_bits[0]. */ /* drp_code_bits[0] can range from 1 to 31. 0 will be used only as an escape sequence. */ temp1 = sub(1,ESF_ADJUSTMENT_TO_RMS_INDEX); temp2 = sub(absolute_region_power_index[0],temp1); test(); if (temp2 < 0) { absolute_region_power_index[0] = temp1; move16(); } temp1 = sub(31,ESF_ADJUSTMENT_TO_RMS_INDEX); /* * The next line was corrected in Release 1.2 */ temp2 = sub(absolute_region_power_index[0], temp1); test(); if (temp2 > 0) { absolute_region_power_index[0] = temp1; move16(); } differential_region_power_index[0] = absolute_region_power_index[0]; move16(); number_of_bits = 5; move16(); drp_num_bits[0] = 5; move16(); drp_code_bits[0] = (UWord16)add(absolute_region_power_index[0],ESF_ADJUSTMENT_TO_RMS_INDEX); move16(); /* Lower limit the absolute region power indices to -8 and upper limit them to 31. Such extremes may be mathematically impossible anyway.*/ for (region=1; region 0) { absolute_region_power_index[region] = temp1; move16(); } } for (region=1; region 0)) { test(); test(); logic16(); (*p_categorization_control)--; region = category_balances[*p_categorization_control]; move16(); power_categories[region] = sub(power_categories[region],1); move16(); total_mlt_bits = sub(total_mlt_bits,region_mlt_bit_counts[region]); category = power_categories[region]; move16(); raw_mlt_ptr = &mlt_coefs[region*REGION_SIZE]; move16(); temp = sub(category,(NUM_CATEGORIES-1)); test(); if (temp < 0) { region_mlt_bit_counts[region] = vector_huffman(category, absolute_region_power_index[region],raw_mlt_ptr, ®ion_mlt_bits[shl(region,2)]); } else { region_mlt_bit_counts[region] = 0; move16(); } total_mlt_bits = add(total_mlt_bits,region_mlt_bit_counts[region]); temp = sub(total_mlt_bits,number_of_available_bits); } /* If too many bits... */ /* Set up for while loop test */ temp1 = sub(total_mlt_bits,number_of_available_bits); temp2 = sub(*p_categorization_control,sub(num_categorization_control_possibilities,1)); test(); test(); logic16(); while ((temp1 > 0) && (temp2 < 0)) { /* operations for while contitions */ test(); test(); logic16(); region = category_balances[*p_categorization_control]; move16(); power_categories[region] = add(power_categories[region],1); move16(); total_mlt_bits = sub(total_mlt_bits,region_mlt_bit_counts[region]); category = power_categories[region]; move16(); temp = extract_l(L_mult0(region,REGION_SIZE)); raw_mlt_ptr = &mlt_coefs[temp]; move16(); temp = sub(category,(NUM_CATEGORIES-1)); test(); if (temp < 0) { region_mlt_bit_counts[region] = vector_huffman(category, absolute_region_power_index[region],raw_mlt_ptr, ®ion_mlt_bits[shl(region,2)]); } else { region_mlt_bit_counts[region] = 0; move16(); } total_mlt_bits = add(total_mlt_bits,region_mlt_bit_counts[region]); (*p_categorization_control)++; temp1 = sub(total_mlt_bits,number_of_available_bits); temp2 = sub(*p_categorization_control,sub(num_categorization_control_possibilities,1)); } } /*************************************************************************** Function: vector_huffman Syntax: Word16 vector_huffman(Word16 category, Word16 power_index, Word16 *raw_mlt_ptr, UWord32 *word_ptr) inputs: Word16 category Word16 power_index Word16 *raw_mlt_ptr outputs: number_of_region_bits *word_ptr Description: Huffman encoding for each region based on category and power_index WMOPS: 7kHz | 24kbit | 32kbit -------|--------------|---------------- AVG | 0.03 | 0.03 -------|--------------|---------------- MAX | 0.04 | 0.04 -------|--------------|---------------- 14kHz | 24kbit | 32kbit | 48kbit -------|--------------|----------------|---------------- AVG | 0.03 | 0.03 | 0.03 -------|--------------|----------------|---------------- MAX | 0.04 | 0.04 | 0.04 -------|--------------|----------------|---------------- ***************************************************************************/ Word16 vector_huffman(Word16 category, Word16 power_index, Word16 *raw_mlt_ptr, UWord32 *word_ptr) { Word16 inv_of_step_size_times_std_dev; Word16 j,n; Word16 k; Word16 number_of_region_bits; Word16 number_of_non_zero; Word16 vec_dim; Word16 num_vecs; Word16 kmax, kmax_plus_one; Word16 index,signs_index; Word16 *bitcount_table_ptr; UWord16 *code_table_ptr; Word32 code_bits; Word16 number_of_code_bits; UWord32 current_word; Word16 current_word_bits_free; Word32 acca; Word32 accb; Word16 temp; Word16 mytemp; /* new variable in Release 1.2 */ Word16 myacca; /* new variable in Release 1.2 */ /* initialize variables */ vec_dim = vector_dimension[category]; move16(); num_vecs = number_of_vectors[category]; move16(); kmax = max_bin[category]; move16(); kmax_plus_one = add(kmax,1); move16(); current_word = 0L; move16(); current_word_bits_free = 32; move16(); number_of_region_bits = 0; move16(); /* set up table pointers */ bitcount_table_ptr = (Word16 *)table_of_bitcount_tables[category]; code_table_ptr = (UWord16 *) table_of_code_tables[category]; /* compute inverse of step size * standard deviation */ acca = L_mult(step_size_inverse_table[category],standard_deviation_inverse_table[power_index]); acca = L_shr(acca,1); acca = L_add(acca,4096); acca = L_shr(acca,13); /* * The next two lines are new to Release 1.2 */ mytemp = acca & 0x3; acca = L_shr(acca,2); inv_of_step_size_times_std_dev = extract_l(acca); for (n=0; n 0) { signs_index = add(signs_index,1); } temp = sub(k,kmax); test(); if (temp > 0) { k = kmax; move16(); } } acca = L_shr(L_mult(index,(kmax_plus_one)),1); index = extract_l(acca); index = add(index,k); raw_mlt_ptr++; } code_bits = *(code_table_ptr+index); number_of_code_bits = add((*(bitcount_table_ptr+index)),number_of_non_zero); number_of_region_bits = add(number_of_region_bits,number_of_code_bits); acca = code_bits << number_of_non_zero; accb = L_deposit_l(signs_index); acca = L_add(acca,accb); code_bits = acca; move32(); /* msb of codebits is transmitted first. */ j = sub(current_word_bits_free,number_of_code_bits); test(); if (j >= 0) { test(); acca = code_bits << j; current_word = L_add(current_word,acca); current_word_bits_free = j; move16(); } else { j = negate(j); acca = L_shr(code_bits,j); current_word = L_add(current_word,acca); *word_ptr++ = current_word; move16(); current_word_bits_free = sub(32,j); test(); current_word = code_bits << current_word_bits_free; } } *word_ptr++ = current_word; move16(); return (number_of_region_bits); } h323plus/plugins/audio/G.722.1/G722-1/decode.c0000644000175000017500000003020411341106231016664 0ustar markmark/*************************************************************************** ** ** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C ** > Software Release 2.1 (2008-06) ** (Simple repackaging; no change from 2005-05 Release 2.0 code) ** ** Љ 2004 Polycom, Inc. ** ** All rights reserved. ** ***************************************************************************/ /*************************************************************************** Filename: decode.c Purpose: Contains the main function for the G.722.1 Annex C decoder Design Notes: WMOPS: 7kHz | 24kbit | 32kbit -------|--------------|---------------- AVG | 2.73 | 2.85 -------|--------------|---------------- MAX | 2.79 | 2.88 -------|--------------|---------------- 14kHz | 24kbit | 32kbit | 48kbit -------|--------------|----------------|---------------- AVG | 5.28 | 5.53 | 5.85 -------|--------------|----------------|---------------- MAX | 5.56 | 5.77 | 5.95 -------|--------------|----------------|---------------- ***************************************************************************/ /*************************************************************************** Include files ***************************************************************************/ #include "defs.h" #include "count.h" /************************************************************************************ Local type declarations *************************************************************************************/ /* This object is used to control the command line input */ typedef struct { Word16 syntax; Word32 bit_rate; Word16 bandwidth; Word16 number_of_bits_per_frame; Word16 number_of_regions; Word16 frame_size; FILE *fpout; FILE *fp_bitstream; } DECODER_CONTROL; /************************************************************************************ Constant definitions *************************************************************************************/ #define MAX_SAMPLE_RATE 32000 #define MAX_FRAMESIZE (MAX_SAMPLE_RATE/50) #define MEASURE_WMOPS 1 #define WMOPS 1 /*************************************************************************** Local function declarations ***************************************************************************/ void parse_command_line(char *argv[],DECODER_CONTROL *control); Word16 read_ITU_format(Word16 *, Word16 *, Word16, FILE *); /************************************************************************************ Function: G722.1 Annex C main decoder function Syntax: decode - 0 for packed format/1 for ITU format - encoded bitstream file - output audio file - 24, 32, and 48 kbps - 7 or 14 kHz Description: Main processing loop for the G.722.1 Annex C decoder Design Notes: 16kbit/sec is also supported for bandwidth of 7kHz ************************************************************************************/ main(Word16 argc,char *argv[]) { Word16 i; Word16 words; Word16 output[MAX_DCT_LENGTH]; Word16 number_of_16bit_words_per_frame; Word16 out_words[MAX_BITS_PER_FRAME/16]; Word16 frame_error_flag = 0; Word16 frame_cnt = 0; Word16 decoder_mlt_coefs[MAX_DCT_LENGTH]; Word16 mag_shift; Word16 old_mag_shift=0; Word16 old_decoder_mlt_coefs[MAX_DCT_LENGTH]; Word16 old_samples[MAX_DCT_LENGTH>>1]; Bit_Obj bitobj; Rand_Obj randobj; DECODER_CONTROL control; if (argc < 6) { printf("Usage: decode <0(packed)/1> \n\n"); printf("Valid Rates: 48kbps = 48000\n"); printf(" 32kbps = 32000\n"); printf(" 24kbps = 24000\n"); printf("\n"); printf("Bandwidth: 7kHz = 7000\n"); printf(" 14kHz = 14000\n"); printf("\n"); exit(1); } /* parse the command line input into the control structure */ parse_command_line(argv,&control); number_of_16bit_words_per_frame = (Word16)((control.number_of_bits_per_frame)/16); /* initialize the coefs history */ for (i=0;i> 1);i++) old_samples[i] = 0; /* initialize the random number generator */ randobj.seed0 = 1; randobj.seed1 = 1; randobj.seed2 = 1; randobj.seed3 = 1; /* Read first frame of samples from disk. */ if (control.syntax == 0) words = (Word16 )fread(out_words, 2, number_of_16bit_words_per_frame, control.fp_bitstream); else words = read_ITU_format(out_words, &frame_error_flag, number_of_16bit_words_per_frame, control.fp_bitstream); #if MEASURE_WMOPS Init_WMOPS_counter (); #endif while(words == number_of_16bit_words_per_frame) { frame_cnt++; /* reinit the current word to point to the start of the buffer */ bitobj.code_word_ptr = out_words; bitobj.current_word = *out_words; bitobj.code_bit_count = 0; bitobj.number_of_bits_left = control.number_of_bits_per_frame; #if MEASURE_WMOPS Reset_WMOPS_counter (); #endif /* process the out_words into decoder_mlt_coefs */ decoder(&bitobj, &randobj, control.number_of_regions, decoder_mlt_coefs, &mag_shift, &old_mag_shift, old_decoder_mlt_coefs, frame_error_flag); /* convert the decoder_mlt_coefs to samples */ rmlt_coefs_to_samples(decoder_mlt_coefs, old_samples, output, control.frame_size, mag_shift); /* For ITU testing, off the 2 lsbs. */ for (i=0; isyntax = (Word16 )(atoi(*++argv)); if ((control->syntax != 0) && (control->syntax != 1)) { printf("syntax must be 0 for packed or 1 for ITU format\n"); exit(1); } if((control->fp_bitstream = fopen(*++argv,"rb")) == NULL) { printf("codec: error opening %s.\n",*argv); exit(1); } if((control->fpout = fopen(*++argv,"wb")) == NULL) { printf("codec: error opening %s.\n",*argv); exit(1); } control->bit_rate = (Word32)(atoi(*++argv)); if ((control->bit_rate < 16000) || (control->bit_rate > 48000) || ((control->bit_rate/800)*800 != control->bit_rate)) { printf("codec: Error. bit-rate must be multiple of 800 between 16000 and 48000\n"); exit(1); } control->number_of_bits_per_frame = (Word16 )((control->bit_rate)/50); control->bandwidth = (Word16)(atoi(*++argv)); if (control->bandwidth == 7000) { control->number_of_regions = NUMBER_OF_REGIONS; control->frame_size = MAX_FRAMESIZE >> 1; printf("\n*************** G.722.1 DECODER ***************\n"); printf("bandwidth = 7 khz\n"); printf("syntax = %d ",control->syntax); if (control->syntax == 0) printf(" packed bitstream\n"); else if (control->syntax == 1) printf(" ITU-format bitstream\n"); printf("sample_rate = 16000 bit_rate = %d\n",control->bit_rate); printf("framesize = %d samples\n",control->frame_size); printf("number_of_regions = %d\n",control->number_of_regions); printf("number_of_bits_per_frame = %d bits\n",control->number_of_bits_per_frame); printf("\n"); printf("\n"); } else if (control->bandwidth == 14000) { control->number_of_regions = MAX_NUMBER_OF_REGIONS; control->frame_size = MAX_FRAMESIZE; printf("\n*************** G.722.1 EXTENSION DECODER ***************\n"); printf("bandwidth = 14 khz\n"); printf("syntax = %d ",control->syntax); if (control->syntax == 0) printf(" packed bitstream\n"); else if (control->syntax == 1) printf(" ITU-format bitstream\n"); printf("sample_rate = 32000 bit_rate = %d\n",control->bit_rate); printf("framesize = %d samples\n",control->frame_size); printf("number_of_regions = %d\n",control->number_of_regions); printf("number_of_bits_per_frame = %d bits\n",control->number_of_bits_per_frame); printf("\n"); printf("\n"); } else { printf("codec: Error. bandwidth must be 7000 or 14000\n"); exit(1); } } /*************************************************************************** Procedure/Function: Read ITU format function Syntax: Description: reads file input in ITU format Design Notes: ***************************************************************************/ Word16 read_ITU_format(Word16 *out_words, Word16 *p_frame_error_flag, Word16 number_of_16bit_words_per_frame, FILE *fp_bitstream) { Word16 i,j; Word16 nsamp; Word16 packed_word; Word16 bit_count; Word16 bit; Word16 in_array[MAX_BITS_PER_FRAME+2]; Word16 one = 0x0081; Word16 zero = 0x007f; Word16 frame_start = 0x6b21; nsamp = (Word16 )fread(in_array, 2, 2 + 16*number_of_16bit_words_per_frame, fp_bitstream); j = 0; bit = in_array[j++]; if (bit != frame_start) { *p_frame_error_flag = 1; } else { *p_frame_error_flag = 0; /* increment j to skip over the number of bits in frame */ j++; for (i=0; i= 0) { bit = in_array[j++]; if (bit == zero) bit = 0; else if (bit == one) bit = 1; else { *p_frame_error_flag = 1; /* printf("read_ITU_format: bit not zero or one: %4x\n",bit); */ } packed_word <<= 1; packed_word = (Word16 )(packed_word + bit); bit_count--; } out_words[i] = packed_word; } } return((Word16)((nsamp-1)/16)); } h323plus/plugins/audio/G.722.1/G.722.1_2008.vcproj0000644000175000017500000001444111445330011017257 0ustar markmark h323plus/plugins/audio/G.722.1/G7221Codec.cxx0000644000175000017500000007276111551266156016740 0ustar markmark/**************************************************************************** * * ITU G.722.1 wideband audio codec plugin for OpenH323/OPAL * * Copyright (C) 2009 Nimajin Software Consulting, All Rights Reserved * * Permission to copy, use, sell and distribute this file is granted * provided this copyright notice appears in all copies. * Permission to modify the code herein and to distribute modified code is * granted provided this copyright notice appears in all copies, and a * notice that the code was modified is included with the copyright notice. * * This software and information is provided "as is" without express or im- * plied warranty, and with no claim as to its suitability for any purpose. * **************************************************************************** * * ITU-T 7/14kHz Audio Coder (G.722.1) AKA Polycom 'Siren' * SDP usage described in RFC 5577 * H.245 capabilities defined in G.722.1 Annex A & H.245 Appendix VIII * This implementation employs ITU-T G.722.1 (2005-05) fixed point reference * code, release 2.1 (2008-06) * This implements only standard bit rates 24000 & 32000 at 16kHz (Siren7) * sampling rate, not extended modes or 32000 sampling rate (Siren14). * G.722.1 does not implement any silence handling (VAD/CNG) * Static variables are not used, so multiple instances can run simultaneously. * G.722.1 is patented by Polycom, but is royalty-free if you follow their * license terms. See: * http://www.polycom.com/company/about_us/technology/siren14_g7221c/faq.html * * Initial development by: Ted Szoczei, Nimajin Software Consulting, 09-12-09 * Portions developed by: Robert Jongbloed, Vox Lucida * ****************************************************************************/ #define _CRT_NONSTDC_NO_DEPRECATE 1 #define _CRT_SECURE_NO_WARNINGS 1 #include #include #include #ifdef _MSC_VER #include #else #include #endif #ifndef PLUGIN_CODEC_DLL_EXPORTS #include "plugin-config.h" #endif #include #if defined(_WIN32) || defined(_WIN32_WCE) #include #include #define STRCMPI _strcmpi #else #include #define STRCMPI strcasecmp #endif #ifdef _MSC_VER extern "C" { #endif #include "G722-1/defs.h" #ifdef _MSC_VER } #endif static char * num2str(int num) { char buf[20]; sprintf(buf, "%i", num); return strdup(buf); } static struct PluginCodec_information licenseInfo = { 1260388706, // version timestamp = Wed Dec 09 19:58:26 2009 UTC "Ted Szoczei, Nimajin Software Consulting", // source code author "1.0", // source code version "ted.szoczei@nimajin.com", // source code email NULL, // source code URL "Copyright (c) 2009 Nimajin Software Consulting", // source code copyright "None", // source code license PluginCodec_License_None, // source code license "ITU-T 7/14kHz Audio Coder (G.722.1 Annex C)", // codec description "Polycom, Inc.", // codec author "2.1 2008-06-26", // codec version NULL, // codec email "http://www.itu.int/rec/T-REC-G.722.1/e", // codec URL "(c) 2005 Polycom, Inc. All rights reserved.", // codec copyright information "ITU-T General Public License (G.191)", // codec license PluginCodec_License_NoRoyalties // codec license code }; ///////////////////////////////////////////////////////////////////////////// #define FORMAT_NAME_G722_1_16_24K "G.722.1-24k" // text decription and mediaformat name #define FORMAT_NAME_G722_1_16_32K "G.722.1-32k" // text decription and mediaformat name #define FORMAT_NAME_G722_1c "G.722.1c" #define RTP_NAME_G722_1 "G7221" // MIME name rfc's 3047, 5577 #define G722_1_16K_FRAME_SAMPLES 320 #define G722_1_32K_FRAME_SAMPLES 640 // required bandwidth options in bits per second #define G722_1_16_24_BIT_RATE 24000 #define G722_1_16_32_BIT_RATE 32000 #define G722_1c_BIT_RATE 48000 // required bandwidth options in bits per second #define G722_1_16K_SAMPLING_RATE 16000 #define G722_1_32K_SAMPLING_RATE 32000 // bits and bytes per 20 ms frame, depending on bitrate // 60 bytes for 24000, 80 for 32000 #define G722_1_FRAME_BITS(rate) ((Word16)((rate) / 50)) #define G722_1_FRAME_BYTES(rate) ((rate) / 400) ///////////////////////////////////////////////////////////////////////////// // Compress audio for transport typedef struct { unsigned bitsPerSec; // can be changed between frames unsigned sampleRate; // whether G.722.1 ot G.722.1c Word16 history [G722_1_32K_FRAME_SAMPLES]; Word16 mlt_coefs [G722_1_32K_FRAME_SAMPLES]; Word16 mag_shift; } G7221EncoderContext; #define PLUGINCODEC_OPTION_SUPPORTMODE "Generic Parameter 2" static int encoder_set_options( const struct PluginCodec_Definition * codec, void * _context, const char *, void * parm, unsigned * parmLen) { if (_context == NULL || parmLen == NULL || *parmLen != sizeof(const char **)) return 0; G7221EncoderContext * context = (G7221EncoderContext *)_context; if (context == NULL) return 0; unsigned bitRate = 0; unsigned maxBitRate = 0; if (parm != NULL) { const char ** options = (const char **)parm; int i; for (i = 0; options[i] != NULL; i += 2) { if (STRCMPI(options[i], PLUGINCODEC_OPTION_MAX_BIT_RATE) == 0) maxBitRate = (unsigned)(atoi(options[i+1])); if (STRCMPI(options[i], PLUGINCODEC_OPTION_SUPPORTMODE) == 0) bitRate = (unsigned)(atoi(options[i+1])); } } if (context->sampleRate == 16000) { maxBitRate /= 100; // Hack as G.722.1 send act bitrate not act/100 } else if (bitRate > 0) { switch (bitRate) { case 16: maxBitRate = 48000; break; case 32: maxBitRate = 32000; break; case 64: maxBitRate = 16000; break; default: maxBitRate = 16000; break; } context->bitsPerSec = maxBitRate; } // Write back the option list the changed information if (parm != NULL) { char ** options = (char **)parm; if (options == NULL) return 0; for (int i = 0; options[i] != NULL; i += 2) { if (STRCMPI(options[i], PLUGINCODEC_OPTION_MAX_BIT_RATE) == 0) options[i+1] = num2str(maxBitRate); } } return 1; } static void * G7221EncoderCreate (const struct PluginCodec_Definition * codec) { unsigned i; G7221EncoderContext * Context = (G7221EncoderContext *) malloc (sizeof(G7221EncoderContext)); if (Context == NULL) return NULL; Context->sampleRate = codec->sampleRate; Context->bitsPerSec = codec->bitsPerSec; // initialize the mlt history buffer for (i = 0; i < codec->parm.audio.samplesPerFrame; i++) Context->history[i] = 0; return Context; } static void G7221EncoderDestroy (const struct PluginCodec_Definition * codec, void * context) { free (context); } static int G7221Encode (const struct PluginCodec_Definition * codec, void * context, const void * fromPtr, unsigned * fromLen, void * toPtr, unsigned * toLen, unsigned int * flag) { int i = 0; G7221EncoderContext * Context = (G7221EncoderContext *) context; if (Context == NULL) return 0; if (*fromLen < codec->parm.audio.samplesPerFrame) return 0; // Source is not a full frame if (*toLen < G722_1_FRAME_BYTES (Context->bitsPerSec)) return 0; // Destination buffer not big enough // Convert input samples to rmlt coefs Context->mag_shift = samples_to_rmlt_coefs ((Word16 *) fromPtr, Context->history, Context->mlt_coefs, *fromLen/2); // Encode the mlt coefs encoder (G722_1_FRAME_BITS (Context->bitsPerSec), NUMBER_OF_REGIONS, Context->mlt_coefs, Context->mag_shift, (Word16 *) toPtr); for (i = 0; i < (short)codec->parm.audio.samplesPerFrame; i++) ((Word16 *) toPtr) [i] =ntohs(((Word16 *)toPtr)[i]); // return the number of encoded bytes to the caller *fromLen = codec->parm.audio.samplesPerFrame*2; *toLen = G722_1_FRAME_BYTES (Context->bitsPerSec); return 1; } ///////////////////////////////////////////////////////////////////////////// // Convert encoded source to audio typedef struct { unsigned bitsPerSec; // can be changed between frames unsigned sampleRate; Bit_Obj bitobj; Rand_Obj randobj; Word16 decoder_mlt_coefs [G722_1_32K_FRAME_SAMPLES]; Word16 mag_shift; Word16 old_samples [G722_1_32K_FRAME_SAMPLES / 2]; Word16 old_decoder_mlt_coefs [G722_1_32K_FRAME_SAMPLES]; Word16 old_mag_shift; Word16 frame_error_flag; } G7221DecoderContext; static void * G7221DecoderCreate (const struct PluginCodec_Definition * codec) { unsigned i; G7221DecoderContext * Context = (G7221DecoderContext *) malloc (sizeof(G7221DecoderContext)); if (Context == NULL) return NULL; Context->sampleRate = codec->sampleRate; Context->bitsPerSec = codec->bitsPerSec; Context->old_mag_shift = 0; Context->frame_error_flag = 0; // initialize the coefs history for (i = 0; i < codec->parm.audio.samplesPerFrame; i++) Context->old_decoder_mlt_coefs[i] = 0; for (i = 0; i < (codec->parm.audio.samplesPerFrame >> 1); i++) Context->old_samples[i] = 0; // initialize the random number generator Context->randobj.seed0 = 1; Context->randobj.seed1 = 1; Context->randobj.seed2 = 1; Context->randobj.seed3 = 1; return Context; } static void G7221DecoderDestroy (const struct PluginCodec_Definition * codec, void * context) { free (context); } static int G7221Decode (const struct PluginCodec_Definition * codec, void * context, const void * fromPtr, unsigned * fromLen, void * toPtr, unsigned * toLen, unsigned int * flag) { short i; G7221DecoderContext * Context = (G7221DecoderContext *) context; if (Context == NULL) return 0; //printf("Decode: FromLen->%i ToLen->%i\n", *fromLen, *toLen); if (*fromLen < G722_1_FRAME_BYTES (Context->bitsPerSec)) return 0; // Source is not a full frame if (*toLen < codec->parm.audio.samplesPerFrame*2) return 0; // Destination buffer not big enough // reinit the current word to point to the start of the buffer Context->bitobj.code_word_ptr = (Word16 *) fromPtr; Context->bitobj.current_word = *((Word16 *) fromPtr); Context->bitobj.code_bit_count = 0; Context->bitobj.number_of_bits_left = G722_1_FRAME_BITS(Context->bitsPerSec); for (i = 0; i < (short)*fromLen/2; i++) ((Word16 *) fromPtr) [i] =ntohs(((Word16 *)fromPtr)[i]); // process the out_words into decoder_mlt_coefs decoder (&Context->bitobj, &Context->randobj, NUMBER_OF_REGIONS, \ Context->decoder_mlt_coefs, &Context->mag_shift, &Context->old_mag_shift, \ Context->old_decoder_mlt_coefs, Context->frame_error_flag); // convert the decoder_mlt_coefs to samples rmlt_coefs_to_samples (Context->decoder_mlt_coefs, Context->old_samples, (Word16 *) toPtr, codec->parm.audio.samplesPerFrame, Context->mag_shift); //For ITU testing, off the 2 lsbs. for (i = 0; i < (short)codec->parm.audio.samplesPerFrame; i++) ((Word16 *) toPtr) [i] &= 0xFFFC; // return the number of decoded bytes to the caller *fromLen = G722_1_FRAME_BYTES (Context->bitsPerSec); *toLen = codec->parm.audio.samplesPerFrame*2; return 1; } ///////////////////////////////////////////////////////////////////////////// // bitrate is a required SDP parameter in RFC 3047/5577 static const char BitRateOptionName[] = "BitRate"; static struct PluginCodec_Option BitRateOption16_24k = { PluginCodec_IntegerOption, // PluginCodec_OptionTypes BitRateOptionName, // Generic (human readable) option name 1, // Read Only flag PluginCodec_EqualMerge, // Merge mode "16000", // Initial value "bitrate", // SIP/SDP FMTP name "0", // SIP/SDP FMTP default value (option not included in FMTP if have this value) 0, // H.245 Generic Capability number and scope bits "24000", // Minimum value (enum values separated by ':') "24000" // Maximum value }; static struct PluginCodec_Option BitRateOption16_32k = { PluginCodec_IntegerOption, // PluginCodec_OptionTypes BitRateOptionName, // Generic (human readable) option name 1, // Read Only flag PluginCodec_EqualMerge, // Merge mode "16000", // Initial value "bitrate", // SIP/SDP FMTP name "0", // SIP/SDP FMTP default value (option not included in FMTP if have this value) 0, // H.245 Generic Capability number and scope bits "32000", // Minimum value (enum values separated by ':') "32000" // Maximum value }; static struct PluginCodec_Option BitRateOption32k = { PluginCodec_IntegerOption, // PluginCodec_OptionTypes BitRateOptionName, // Generic (human readable) option name 1, // Read Only flag PluginCodec_EqualMerge, // Merge mode "32000", // Initial value "bitrate", // SIP/SDP FMTP name "0", // SIP/SDP FMTP default value (option not included in FMTP if have this value) 0, // H.245 Generic Capability number and scope bits "240", // Minimum value (enum values separated by ':') "480" // Maximum value }; static struct PluginCodec_Option * const OptionTable1624k[] = { &BitRateOption16_24k, NULL }; static struct PluginCodec_Option * const OptionTable1632k[] = { &BitRateOption16_32k, NULL }; static struct PluginCodec_Option * const OptionTable32k[] = { &BitRateOption32k, NULL }; static int get_codec_options (const struct PluginCodec_Definition * defn, void * context, const char * name, void * parm, unsigned * parmLen) { if (parm == NULL || parmLen == NULL || *parmLen != sizeof(struct PluginCodec_Option **)) return 0; if (defn->sampleRate == G722_1_32K_SAMPLING_RATE) { *(struct PluginCodec_Option const * const * *)parm = OptionTable32k; } else { if (defn->bitsPerSec == G722_1_16_32_BIT_RATE) *(struct PluginCodec_Option const * const * *)parm = OptionTable1632k; else *(struct PluginCodec_Option const * const * *)parm = OptionTable1624k; } //*(struct PluginCodec_Option const * const * *)parm = (defn->sampleRate == G722_1_16K_SAMPLING_RATE)? OptionTable1632k : OptionTable32k; *parmLen = 0; return 1; } // Options are read-only, so set_codec_options not implemented // get_codec_options returns pointers to statics, and toCustomized and // toNormalized are not implemented, so free_codec_options is not necessary static struct PluginCodec_ControlDefn G7221Controls[] = { { PLUGINCODEC_CONTROL_GET_CODEC_OPTIONS, get_codec_options }, { PLUGINCODEC_CONTROL_SET_CODEC_OPTIONS, encoder_set_options }, { NULL } }; ///////////////////////////////////////////////////////////////////////////////////////// // G.722.1 16k codec // 24k bitRate static unsigned int G7221_24_FRAMES = 1; static unsigned int G7221_24_MAXBITRATE = 24000; // 32k bitRate static unsigned int G7221_32_FRAMES = 1; static unsigned int G7221_32_MAXBITRATE = 32000; #define G7221PLUGIN_CODEC(prefix) \ static const struct PluginCodec_H323GenericParameterDefinition prefix##_h323params[] = \ { \ {{1,0,0,0,0},1,PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_unsignedMin, {prefix##_FRAMES}}, \ NULL \ }; \ static struct PluginCodec_H323GenericCodecData prefix##_Cap = \ { \ OpalPluginCodec_Identifer_G7221, \ prefix##_MAXBITRATE, \ 1, \ prefix##_h323params \ }; \ G7221PLUGIN_CODEC(G7221_24); G7221PLUGIN_CODEC(G7221_32); ///////////////////////////////////////////////////////////////////////////// // G.722.1c 32k codec static unsigned int G7221c_FRAMES = 1; static unsigned int G7221c_SUPPORTMODE = 112; //24/36/48 k static unsigned int G7221c_MAXBITRATE = 480; #define G7221cPLUGIN_CODEC(prefix) \ static const struct PluginCodec_H323GenericParameterDefinition prefix##_h323params[] = \ { \ {{1,0,0,0,0},1, PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_unsignedMin, {prefix##_FRAMES}}, \ {{1,0,0,0,0},2, PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_booleanArray, {prefix##_SUPPORTMODE}}, \ NULL \ }; \ static struct PluginCodec_H323GenericCodecData prefix##_Cap = \ { \ OpalPluginCodec_Identifer_G7221ext, \ prefix##_MAXBITRATE, \ 2, \ prefix##_h323params \ }; G7221cPLUGIN_CODEC(G7221c); ///////////////////////////////////////////////////////////////////////////// static struct PluginCodec_Definition G7221CodecDefn[] = { { // G.722.1 16kHz , 32kbps encoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic | // dynamic RTP type PluginCodec_RTPTypeShared, // RTP type shared with other codecs in this definition FORMAT_NAME_G722_1_16_32K, // text decription "L16", // source format FORMAT_NAME_G722_1_16_32K, // destination format NULL, // user data G722_1_16K_SAMPLING_RATE, // samples per second G722_1_16_32_BIT_RATE, // raw bits per second 20000, // microseconds per frame {{ G722_1_16K_FRAME_SAMPLES, // samples per frame G722_1_16_32_BIT_RATE/400, // bytes per frame 1, // recommended number of frames per packet 1, // maximum number of frames per packet }}, 121, // IANA RTP payload code RTP_NAME_G722_1, // RTP payload name G7221EncoderCreate, // create codec function G7221EncoderDestroy, // destroy codec G7221Encode, // encode/decode G7221Controls, // codec controls PluginCodec_H323Codec_generic, // h323CapabilityType &G7221_32_Cap // h323CapabilityData }, { // G.722.1 16kHz, 32 kbps decoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic | // dynamic RTP type PluginCodec_RTPTypeShared, // RTP type shared with other codecs in this definition FORMAT_NAME_G722_1_16_32K, // text decription FORMAT_NAME_G722_1_16_32K, // source format "L16", // destination format NULL, // user data G722_1_16K_SAMPLING_RATE, // samples per second G722_1_16_32_BIT_RATE, // raw bits per second 20000, // microseconds per frame {{ G722_1_16K_FRAME_SAMPLES, // samples per frame G722_1_16_32_BIT_RATE/400, // bytes per frame 1, // recommended number of frames per packet 1, // maximum number of frames per packet }}, 121, // IANA RTP payload code RTP_NAME_G722_1, // RTP payload name G7221DecoderCreate, // create codec function G7221DecoderDestroy, // destroy codec G7221Decode, // encode/decode G7221Controls, // codec controls PluginCodec_H323Codec_generic, // h323CapabilityType &G7221_32_Cap // h323CapabilityData }, { // G.722.1 16kHz , 24kbps encoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic | // dynamic RTP type PluginCodec_RTPTypeShared, // RTP type shared with other codecs in this definition FORMAT_NAME_G722_1_16_24K, // text decription "L16", // source format FORMAT_NAME_G722_1_16_24K, // destination format NULL, // user data G722_1_16K_SAMPLING_RATE, // samples per second G722_1_16_24_BIT_RATE, // raw bits per second 20000, // microseconds per frame {{ G722_1_16K_FRAME_SAMPLES, // samples per frame G722_1_16_24_BIT_RATE/400, // bytes per frame 1, // recommended number of frames per packet 1, // maximum number of frames per packet }}, 121, // IANA RTP payload code RTP_NAME_G722_1, // RTP payload name G7221EncoderCreate, // create codec function G7221EncoderDestroy, // destroy codec G7221Encode, // encode/decode G7221Controls, // codec controls PluginCodec_H323Codec_generic, // h323CapabilityType &G7221_24_Cap // h323CapabilityData }, { // G.722.1 16kHz, 24 kbps decoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic | // dynamic RTP type PluginCodec_RTPTypeShared, // RTP type shared with other codecs in this definition FORMAT_NAME_G722_1_16_24K, // text decription FORMAT_NAME_G722_1_16_24K, // source format "L16", // destination format NULL, // user data G722_1_16K_SAMPLING_RATE, // samples per second G722_1_16_24_BIT_RATE, // raw bits per second 20000, // microseconds per frame {{ G722_1_16K_FRAME_SAMPLES, // samples per frame G722_1_16_24_BIT_RATE/400, // bytes per frame 1, // recommended number of frames per packet 1, // maximum number of frames per packet }}, 121, // IANA RTP payload code RTP_NAME_G722_1, // RTP payload name G7221DecoderCreate, // create codec function G7221DecoderDestroy, // destroy codec G7221Decode, // encode/decode G7221Controls, // codec controls PluginCodec_H323Codec_generic, // h323CapabilityType &G7221_24_Cap // h323CapabilityData }, #if 0 { // G.722.1 32kHz encoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic | // dynamic RTP type PluginCodec_RTPTypeShared, // RTP type shared with other codecs in this definition FORMAT_NAME_G722_1c, // text decription "L16", // source format FORMAT_NAME_G722_1c, // destination format NULL, // user data G722_1_32K_SAMPLING_RATE, // samples per second G722_1c_BIT_RATE, // raw bits per second 20000, // microseconds per frame {{ G722_1_32K_FRAME_SAMPLES, // samples per frame G722_1c_BIT_RATE/400, // bytes per frame 1, // recommended number of frames per packet 1, // maximum number of frames per packet }}, 122, // IANA RTP payload code RTP_NAME_G722_1, // RTP payload name G7221EncoderCreate, // create codec function G7221EncoderDestroy, // destroy codec G7221Encode, // encode/decode G7221Controls, // codec controls PluginCodec_H323Codec_generic, // h323CapabilityType &G7221c_Cap // h323CapabilityData }, { // G.722.1 32kHz decoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic | // dynamic RTP type PluginCodec_RTPTypeShared, // RTP type shared with other codecs in this definition FORMAT_NAME_G722_1c, // text decription FORMAT_NAME_G722_1c, // source format "L16", // destination format NULL, // user data G722_1_32K_SAMPLING_RATE, // samples per second G722_1c_BIT_RATE, // raw bits per second 20000, // microseconds per frame {{ G722_1_32K_FRAME_SAMPLES, // samples per frame G722_1c_BIT_RATE/400, // bytes per frame 1, // recommended number of frames per packet 1, // maximum number of frames per packet }}, 122, // IANA RTP payload code RTP_NAME_G722_1, // RTP payload name G7221DecoderCreate, // create codec function G7221DecoderDestroy, // destroy codec G7221Decode, // encode/decode G7221Controls, // codec controls PluginCodec_H323Codec_generic, // h323CapabilityType &G7221c_Cap // h323CapabilityData } #endif }; extern "C" { PLUGIN_CODEC_IMPLEMENT_ALL(G7221, G7221CodecDefn, PLUGIN_CODEC_VERSION_OPTIONS) } ///////////////////////////////////////////////////////////////////////////// h323plus/plugins/audio/G.722.1/G.722.1_2005.vcproj0000644000175000017500000001475311341106231017262 0ustar markmark h323plus/plugins/audio/G.722.2/0000755000175000017500000000000011376326052014535 5ustar markmarkh323plus/plugins/audio/G.722.2/Makefile.in0000644000175000017500000000366711376326052016616 0ustar markmark# # Makefile for G.722 codec plugin # # $Revision: 1.1 $ # $Author: willamowius $ # $Date: 2010/05/23 22:28:58 $ # AC_PLUGIN_DIR=@AC_PLUGIN_DIR@ prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ target_os=@target_os@ SONAME = g7222 STDCCFLAGS += @STDCCFLAGS@ -fPIC SRCDIR = ./AMR-WB OBJDIR = ./obj PLUGINDIR=../.. CC =@CC@ CXX =@CXX@ LDSO =@LDSO@ PLUGINEXT =@PLUGINEXT@ STDCCFLAGS =@STDCCFLAGS@ LDFLAGS =@LDFLAGS@ EXTRACFLAGS =-I$(PLUGINDIR) SRCS = G7222Codec.cpp \ $(SRCDIR)/dec_acelp.c \ $(SRCDIR)/dec_dtx.c \ $(SRCDIR)/dec_gain.c \ $(SRCDIR)/dec_if.c \ $(SRCDIR)/dec_lpc.c \ $(SRCDIR)/dec_main.c \ $(SRCDIR)/dec_rom.c \ $(SRCDIR)/dec_util.c \ $(SRCDIR)/enc_acelp.c \ $(SRCDIR)/enc_dtx.c \ $(SRCDIR)/enc_gain.c \ $(SRCDIR)/enc_if.c \ $(SRCDIR)/enc_lpc.c \ $(SRCDIR)/enc_main.c \ $(SRCDIR)/enc_rom.c \ $(SRCDIR)/enc_util.c \ $(SRCDIR)/if_rom.c vpath %.o $(OBJDIR) vpath %.c $(SRCDIR) ifeq ($(VERBOSE),) Q_CC = @echo [CC] `echo $< | sed s^@OPALDIR@/^^` ; Q_LD = @echo [LD] `echo $(PLUGIN) | sed s^@OPALDIR@/^^` ; endif $(OBJDIR)/%.o : %.c @mkdir -p $(OBJDIR) >/dev/null 2>&1 $(Q_CC)$(CC) -I../../../include $(STDCCFLAGS) $(OPTCCFLAGS) $(EXTRACFLAGS) $(CFLAGS) -c $< -o $@ $(OBJDIR)/%.o : %.cpp @mkdir -p $(OBJDIR) >/dev/null 2>&1 $(Q_CC)$(CC) -I../../../include $(STDCCFLAGS) $(OPTCCFLAGS) $(EXTRACFLAGS) $(CFLAGS) -c $< -o $@ PLUGIN = ./g7222_audio_pwplugin.$(PLUGINEXT) OBJECTS = $(addprefix $(OBJDIR)/,$(patsubst %.cpp,%.o,$(patsubst %.c,%.o,$(notdir $(SRCS))))) all: $(PLUGIN) $(PLUGIN): $(OBJECTS) ifeq (solaris,$(findstring solaris,$(target_os))) $(Q_LD)$(CC) $(LDSO) $@ -o $@ $^ $(EXTRALIBS) else $(Q_LD)$(CC) $(LDSO) -o $@ $^ $(EXTRALIBS) endif install: mkdir -p $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR) install $(PLUGIN) $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR) uninstall: rm -f $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR)/$(PLUGIN) clean: rm -f $(OBJECTS) $(PLUGIN) h323plus/plugins/audio/G.722.2/G7222Codec.cpp0000644000175000017500000007207211341106231016675 0ustar markmark/**************************************************************************** * * AMR-WB (ITU G.722.2) Plugin codec for OpenH323/OPAL * * Copyright (c) 2009 Nimajin Software Consulting, All Rights Reserved * * Permission to copy, use, sell and distribute this file is granted * provided this copyright notice appears in all copies. * Permission to modify the code herein and to distribute modified code is * granted provided this copyright notice appears in all copies, and a * notice that the code was modified is included with the copyright notice. * * This software and information is provided "as is" without express or im- * plied warranty, and with no claim as to its suitability for any purpose. * **************************************************************************** * * AMR WB ACELP wideband decoder described in 3GPP TS 26.171, 26.190, 26.201 * AMR-WB is, in fact, ITU G.722.2. * G.722.2 Annex F specifies usage in H.245. * There is newer but conflicting H.245 info in H.245 v13 Annex R. * This code follows the G.722.2 H.245 signaling. * Its payload format & SDP parameters are described in IETF RFC 3267 * This implementation employs 3GPP TS 26.173 fixed point reference code. * It implements Adaptive Multi Rate Wideband speech transcoder (3GPP TS * 26.190), Voice Activity Detection (3GPP TS 26.194), and comfort noise (3GPP * TS 26.192) * This build has not defined IF2 * Encodes to octet-aligned format only (not bandwidth efficient) * Encodes to 23.85 kbps only (no mode change support) * Mode adaption not supported (needs work to link decoder to encoder) * Decoder handles only 1 frame (no multichannel or interleaving) * Decoder can handle any mode, and both octet-aligned and bandwidth efficient * AMR-WB is patented. Use requires licence from VoiceAge. * * Initial development by: Ted Szoczei, Nimajin Software Consulting, 09-12-31 * * 06-04-03 Revise to conform to RFC 3267: use correct packet sizes, handle * missing CMR, detect use of bandwidth efficient mode, pass quality * indicator to decoder. /tsz ****************************************************************************/ #define _CRT_NONSTDC_NO_DEPRECATE 1 #define _CRT_SECURE_NO_WARNINGS 1 #include #ifndef PLUGIN_CODEC_DLL_EXPORTS #include "plugin-config.h" #endif #include static struct PluginCodec_information AMRWBLicenseInformation = { 1262283223, // version timestamp = Thu Dec 31 18:13:43 2009 "Ted Szoczei, Nimajin Software Consulting", // source code author "1.0", // source code version "ted.szoczei@nimajin.com", // source code email "http://www.nimajin.com", // source code URL "Copyright (c) 2009 Nimajin Software Consulting", // source code copyright "None", // source code license PluginCodec_License_None, // source code license "G.722.2 AMR-WB (Wideband Adaptive Multirate Codec)", // codec description "3rd Generation Partnership Project (3GPP)", // codec author "TS 26.173 V6.0.0 2004-12", // codec version NULL, // codec email "http://www.3gpp.org", // codec URL "", // codec copyright information "", // codec license PluginCodec_License_RoyaltiesRequired // codec license code }; ///////////////////////////////////////////////////////////////////////////// extern "C" { #include "AMR-WB/enc_if.h" #include "AMR-WB/dec_if.h" }; enum ConversionMode { // these equate to modes in enc_main.c AMRWB_7k = 0, // 6.60 kbit/s AMRWB_9k, // 8.85 kbit/s AMRWB_12k, // 12.65 kbit/s AMRWB_14k, // 14.25 kbit/s AMRWB_16k, // 15.85 kbit/s AMRWB_18k, // 18.25 kbit/s AMRWB_20k, // 19.85 kbit/s AMRWB_23k, // 23.05 kbit/s AMRWB_24k, // 23.85 kbit/s default AMRWB_MODES, AMRWB_SID = 9, // dtx AMRWB_LOST = 14, AMRWB_NODATA = 15 }; // This stuff copied from AMR-WB/if_rom.c // AMR-WB did not extern their block size table, they only use it to clear data before encoding. // One encoded frame (bytes): includes TOC, but not header // AMRWB_core_block_bits is the number of bits for each core frame // AMRWB_block_size_octet is the number of octets for each core frame and ToC for RFC 3267 octet-aligned packing const UWord16 AMRWB_core_block_bits[16]= { 132, 177, 253, 285, 317, 365, 397, 461, 477, 40, 40, 0, 0, 0, 0, 0 }; const UWord16 AMRWB_efficient_ToC_bits = 6; const UWord16 AMRWB_efficient_CMR_bits = 4; const UWord8 AMRWB_block_size_octet[16]= { 18, 24, 33, 37, 41, 47, 51, 59, 61, 6, 6, 0, 0, 0, 1, 1 }; // RFC 3267 octet-aligned ToC adds 8 bits to each core speech bits frame and 8 per packet for header // RFC 3267 bandwidth-efficient adds 6 bits to each core speech bits frame and 4 per packet for header // 3GPP IF1 mode adds 24 bits to core speech bits // 3GPP IF2 mode adds 5 bits to core speech bits #define AMRWB_ALIGNED_BPS(mode) ((AMRWB_block_size_octet[(mode)] + 1) * 50 * 8) // All formats except 3GPP IF1 pad the core frame to fill the last octet (even when there are multiple // frames within the packet). // This build has not defined IF2 // RFC 3267 bandwidth-efficient format does not pad between multiple ToC entries. // LOST & NODATA packets have no core data, Thus the rounding-up for block size only counts for // their ToC entries. // works with 320 samples per frame (20 ms) #define AMRWB_FRAME_SAMPLES 320 ///////////////////////////////////////////////////////////////////////////// // Convert PCM16-16KHZ to AMR-WB // Convert 320 samples of audio (mode 0 produces 19 bytes output, mode 8, 62) // Output packed according to RFC 3267, section 4.4 (octet aligned) // Supports only single 20 ms frame per packet. // this is what we hand back when we are asked to create an encoder typedef struct { void * state; // Encoder interface's opaque state unsigned mode; // current mode int vad; // silence suppression 1/0 } AMRWBEncoderContext; static void * AMRWBEncoderCreate (const struct PluginCodec_Definition * codec) { AMRWBEncoderContext * Context = (AMRWBEncoderContext *) malloc (sizeof(AMRWBEncoderContext)); if (Context == NULL) return NULL; Context->mode = AMRWB_24k; // start off in 23.85kbps mode Context->vad = 0; // with no VAD/DTX/CN Context->state = E_IF_init (); if (Context->state == NULL) { free (Context); return NULL; } return Context; } static void AMRWBEncoderDestroy (const struct PluginCodec_Definition * codec, void * context) { AMRWBEncoderContext * Context = (AMRWBEncoderContext *)context; E_IF_exit (Context->state); free (Context); } static int AMRWBEncode (const struct PluginCodec_Definition * codec, void * context, const void * fromPtr, unsigned * fromLen, void * toPtr, unsigned * toLen, unsigned int * flag) { AMRWBEncoderContext * Context = (AMRWBEncoderContext *)context; if (*fromLen != AMRWB_FRAME_SAMPLES * sizeof(short)) { //PTRACE(2, "Codec\tAMR-WB encoder: Audio data of size " << *fromLen << " did not match expected " << AMRWB_FRAME_SAMPLES * sizeof(short)); return 0; } if (*toLen < (unsigned) AMRWB_block_size_octet[Context->mode] + 1) { //PTRACE(2,"Codec\tAMR-WB encoder: Output buffer of size " << *toLen << " too short for mode " << mode); return 0; } // First byte is CMR (change mode request). 0xF0 means we'll take anything. UWord8 * Dest = (UWord8 *) toPtr; *Dest++ = 0x80;//0xF0; / 0x80 means we want 24kbps only (BT phone won't accept 0xF0) // Next byte is TOC (containing frame type), then follows encoded data // The TOC and data are both written by E_IF_encode. int ByteCount = E_IF_encode (Context->state, (Word16) Context->mode, (short *) fromPtr, Dest, Context->vad); if (ByteCount < 1) { *toLen = 0; return 0; // Bad mode } *toLen = ByteCount + 1; return 1; } ///////////////////////////////////////////////////////////////////////////// // Convert AMR-WB to PCM16-16KHZ // Convert encoded source to 320 samples of audio. // Allows only input packed according to RFC 3267, section 4.4 (octet aligned), // but header byte (change mode request) may be missing. // this code does not handle multiple frame packets! static void * AMRWBDecoderCreate (const struct PluginCodec_Definition * codec) { return D_IF_init (); } static void AMRWBDecoderDestroy (const struct PluginCodec_Definition * codec, void * context) { D_IF_exit (context); } // AMRWB_7k = 0 0x04 frame_type = 0, fqi = 1 // AMRWB_9k, 0x0C frame_type = 1, fqi = 1 // AMRWB_12k, 0x14 frame_type = 2, fqi = 1 // AMRWB_14k, 0x1C frame_type = 3, fqi = 1 // AMRWB_16k, 0x24 frame_type = 4, fqi = 1 // AMRWB_18k, 0x2C frame_type = 5, fqi = 1 // AMRWB_20k, 0x34 frame_type = 6, fqi = 1 // AMRWB_23k, 0x3C frame_type = 7, fqi = 1 // AMRWB_24k, 0x44 frame_type = 8, fqi = 1 // AMRWB_SID = 9, 0x4C frame_type = 9, fqi = 1 DTX/VAD/CN // AMRWB_LOST = 14, // AMRWB_NODATA = 15 static int AMRWBTypeGet (const UWord8 byte) { if ((byte & 0x03) != 0) // pad bits must be 0 return -1; int Type = (byte >> 3) & 0x0F; if (Type > AMRWB_SID && Type != AMRWB_LOST && Type != AMRWB_NODATA) return -1; return Type; } int AMRWBIsBandWidthEfficient (const unsigned short word, const unsigned int packetSize) { int RequestedMode = (word >> 12) & 0x0F; if (RequestedMode > AMRWB_24k && RequestedMode != AMRWB_NODATA) return 0; int Type = (word >> 7) & 0x0F; if (Type > AMRWB_SID && Type != AMRWB_LOST && Type != AMRWB_NODATA) return 0; // this code does not handle multiple frame packets! unsigned int ExpectedSize = (AMRWB_core_block_bits[Type] + AMRWB_efficient_ToC_bits + AMRWB_efficient_CMR_bits + 7) / 8; return (ExpectedSize == packetSize)? 1 : 0; } static int AMRWBDecode (const struct PluginCodec_Definition * codec, void * context, const void * fromPtr, unsigned * fromLen, void * toPtr, unsigned * toLen, unsigned int * flag) { if (fromPtr == NULL || fromLen == NULL || (*flag & PluginCodec_CoderSilenceFrame) != 0) { // no data: return comfort noise D_IF_decode (context, NULL, (Word16 *) toPtr, _no_frame); } else { if (*fromLen < 1) { //PTRACE(2,"Codec\tAMR-WB decoder: No input"); return 0; } if (*toLen < AMRWB_FRAME_SAMPLES * sizeof(short)) { //PTRACE(2,"Codec\tAMR-WB decoder: Output buffer of size " << *toLen << " less than " << AMRWB_FRAME_SAMPLES * sizeof(short) << " required"); return 0; } // test the input packet UWord8 * Src = (UWord8 *) fromPtr; int Quality = ((*(Src + 1) & 0x04) == 0)? _bad_frame : _good_frame; int Followed = (*(Src + 1) >> 7) & 0x01; int FrameType = AMRWBTypeGet (*(Src + 1)); int RequestedMode = -1; int ValidPacket = -1; // -3=bad CMR octet, -2=bad size, -1=bad frametype, 0=bad CMR value, 1=good int Input = 1; // offset into Src of start of data (Toc) for decoding if (FrameType >= 0) { // check for valid header & ToC pair ValidPacket = (*fromLen == AMRWB_block_size_octet[FrameType] + 1)? 1 : -2; if (ValidPacket > 0) { // size is right if ((*Src & 0x0F) != 0) // test CMR byte structure ValidPacket = -3; else { // test CMR value RequestedMode = (*Src >> 4) & 0x0F; if (RequestedMode < AMRWB_7k || (RequestedMode > AMRWB_24k && RequestedMode != 0x0F)) ValidPacket = 0; // probably proper octet-aligned packet but possibly bad, check alternatives } } } if (ValidPacket <= 0) { // not a valid 2-octet header & TOC, try just ToC int TOCFrameType = AMRWBTypeGet (*Src); if (TOCFrameType >= 0 && *fromLen == AMRWB_block_size_octet[TOCFrameType]) { ValidPacket = 1; FrameType = TOCFrameType; Quality = ((*Src & 0x04) == 0)? _bad_frame : _good_frame; Followed = (*Src & 0x80) >> 7; Input = 0; //PTRACE(2, "Codec\tAMR-WB decoder: Received packet without header (CMR) octet - contrary to RFC 3267, processed anyway"); //PTRACE(2, "Codec\tAMR-WB decoder: First octet value was ToC 0x" // << hex << setfill('0') << setprecision(2) << (unsigned) *Src << dec << setfill(' ') // << " (F=" << Followed << " FT=" << FrameType << " Q=" << (Quality ^ 1) << ')'); } } // check if invalid octet-aligned packet is bandwidth efficient type if (ValidPacket < 0 && AMRWBIsBandWidthEfficient ((*Src << 8) + *(Src + 1), *fromLen)) { //PTRACE(2, "Codec\tAMR-WB decoder: Received packet appeared to be packed in RFC 3267 bandwidth efficient mode. Unsupported."); return 0; } switch (ValidPacket) { // it's octet-aligned but bad case -1: //PTRACE(2, "Codec\tAMR-WB decoder: Received packet with invalid ToC octet 0x" // << hex << setfill('0') << setprecision(2) << (unsigned)*(Src + 1) << dec << setfill(' ')); return 0; case -2: //PTRACE(2, "Codec\tAMR-WB decoder: Packet size " << *fromLen << " did not match expected " << (unsigned)(AMRWB_block_size_octet[FrameType] + 1) << " for frame type " << FrameType); return 0; case -3: //PTRACE(2, "Codec\tAMR-WB decoder: Received packet with invalid header octet 0x" // << hex << setfill('0') << setprecision(2) << (unsigned) *Src << dec << setfill(' ')); return 0; } // Aw.. we did all that work and can't change encoder's mode because send & receive contexts are not attached! //if (ValidPacket == 0) // PTRACE(2, "Codec\tAMR-WB decoder: Received packet with invalid requested mode " << RequestedMode << ", mode change ignored"); //else if (RequestedMode != 0x0F) // 0x0F means no change requested, so we'll just stick to sending whatever the last mode was // mode = (ConversionMode) RequestedMode; //if (Followed) // PTRACE(2, "Codec\tAMR-WB decoder: Received packet indicated multiple frames. Unsupported. Audio was lost."); D_IF_decode (context, Src + Input, (Word16 *) toPtr, Quality); // return the number of decoded bytes to the caller *fromLen = AMRWB_block_size_octet[FrameType] + Input; // Actual bytes consumed } *toLen = AMRWB_FRAME_SAMPLES * sizeof(short); return 1; } ///////////////////////////////////////////////////////////////////////////// // H.245 generic parameters; see G.722.2 enum { H245_G7222_MAXAL_SDUFRAMES_RX = 0 | PluginCodec_H245_Collapsing | PluginCodec_H245_TCS, H245_G7222_MAXAL_SDUFRAMES_TX = 0 | PluginCodec_H245_Collapsing | PluginCodec_H245_OLC, H245_G7222_REQUEST_MODE = 1 | PluginCodec_H245_NonCollapsing| PluginCodec_H245_ReqMode, H245_G7222_OCTET_ALIGNED = 2 | PluginCodec_H245_Collapsing | PluginCodec_H245_TCS | PluginCodec_H245_OLC | PluginCodec_H245_ReqMode, H245_G7222_MODE_SET = 3 | PluginCodec_H245_Collapsing | PluginCodec_H245_TCS | PluginCodec_H245_OLC | PluginCodec_H245_ReqMode, H245_G7222_MODE_CHANGE_PERIOD = 4 | PluginCodec_H245_Collapsing | PluginCodec_H245_TCS | PluginCodec_H245_OLC | PluginCodec_H245_ReqMode, H245_G7222_MODE_CHANGE_NEIGHBOUR=5| PluginCodec_H245_Collapsing | PluginCodec_H245_TCS | PluginCodec_H245_OLC | PluginCodec_H245_ReqMode, H245_G7222_CRC = 6 | PluginCodec_H245_Collapsing | PluginCodec_H245_TCS | PluginCodec_H245_OLC | PluginCodec_H245_ReqMode, H245_G7222_ROBUST_SORTING = 7 | PluginCodec_H245_Collapsing | PluginCodec_H245_TCS | PluginCodec_H245_OLC | PluginCodec_H245_ReqMode, H245_G7222_INTERLEAVING = 8 | PluginCodec_H245_Collapsing | PluginCodec_H245_TCS | PluginCodec_H245_OLC | PluginCodec_H245_ReqMode, }; // limit frames per packet to 1 static struct PluginCodec_Option const AMRWBOptionRxFramesPerPacket = { PluginCodec_IntegerOption, // PluginCodec_OptionTypes PLUGINCODEC_OPTION_RX_FRAMES_PER_PACKET, // Generic (human readable) option name false, // User Read/Only flag PluginCodec_MinMerge, // Merge mode "1", // Initial value NULL, // SIP/SDP FMTP name NULL, // SIP/SDP FMTP default value (option not included in FMTP if have this value) H245_G7222_MAXAL_SDUFRAMES_RX, // H.245 generic capability code and bit mask "1", // Minimum value "1" // Maximum value // Do not change!! See above. }; static struct PluginCodec_Option const AMRWBOptionTxFramesPerPacket = { PluginCodec_IntegerOption, // Option type PLUGINCODEC_OPTION_TX_FRAMES_PER_PACKET, // User visible name false, // User Read/Only flag PluginCodec_MinMerge, // Merge mode "1", // Initial value NULL, // FMTP option name NULL, // FMTP default value H245_G7222_MAXAL_SDUFRAMES_TX, // H.245 generic capability code and bit mask "1", // Minimum value "1" // Maximum value }; // this is here so FMTP always adds 'octet-align=1' // this option is indicated in fmtp by its presence static struct PluginCodec_Option const AMRWBOptionOctetAlign = { PluginCodec_BoolOption, // Option type "Octet Aligned", // User visible name true, // User Read/Only flag PluginCodec_EqualMerge, // Merge mode "1", // Initial value "octet-align", // FMTP option name NULL, // FMTP default value H245_G7222_OCTET_ALIGNED // H.245 generic capability code and bit mask }; static struct PluginCodec_Option const ModeSetG7222 = { PluginCodec_IntegerOption, // Option type "Mode Set", // User visible name true, // User Read/Only flag PluginCodec_EqualMerge, // Merge mode "0x1ff", // Initial value NULL, // FMTP option name NULL, // FMTP default value H245_G7222_MODE_SET // H.245 generic capability code and bit mask }; static struct PluginCodec_Option const ModeChangePeriodG7222 = { PluginCodec_IntegerOption, // Option type "Mode Change Period", // User visible name false, // User Read/Only flag PluginCodec_MinMerge, // Merge mode "0", // Initial value NULL, // FMTP option name NULL, // FMTP default value H245_G7222_MODE_CHANGE_PERIOD, // H.245 generic capability code and bit mask "0", // Minimum value "1000" // Maximum value }; static struct PluginCodec_Option const ModeChangeNeighbourG7222 = { PluginCodec_BoolOption, // Option type "Mode Change Neighbour", // User visible name false, // User Read/Only flag PluginCodec_AndMerge, // Merge mode "0", // Initial value NULL, // FMTP option name NULL, // FMTP default value H245_G7222_MODE_CHANGE_NEIGHBOUR // H.245 generic capability code and bit mask }; static struct PluginCodec_Option const CRC_G7222 = { PluginCodec_BoolOption, // Option type "CRC", // User visible name true, // User Read/Only flag PluginCodec_AndMerge, // Merge mode "0", // Initial value NULL, // FMTP option name NULL, // FMTP default value H245_G7222_CRC // H.245 generic capability code and bit mask }; static struct PluginCodec_Option const RobustSortingG7222 = { PluginCodec_BoolOption, // Option type "Robust Sorting", // User visible name true, // User Read/Only flag PluginCodec_AndMerge, // Merge mode "0", // Initial value NULL, // FMTP option name NULL, // FMTP default value H245_G7222_ROBUST_SORTING // H.245 generic capability code and bit mask }; static struct PluginCodec_Option const InterleavingG7222 = { PluginCodec_BoolOption, // Option type "Interleaving", // User visible name true, // User Read/Only flag PluginCodec_AndMerge, // Merge mode "0", // Initial value NULL, // FMTP option name NULL, // FMTP default value H245_G7222_INTERLEAVING // H.245 generic capability code and bit mask }; static struct PluginCodec_Option const MediaPacketizationRFC3267 = { PluginCodec_StringOption, // Option type PLUGINCODEC_MEDIA_PACKETIZATION, // User visible name true, // User Read/Only flag PluginCodec_NoMerge, // Merge mode "RFC3267" // Initial value }; #ifdef PLUGINCODEC_MEDIA_PACKETIZATIONS static struct PluginCodec_Option const MediaPacketizationsRFC3267 = { PluginCodec_StringOption, // Option type PLUGINCODEC_MEDIA_PACKETIZATIONS, // User visible name true, // User Read/Only flag PluginCodec_NoMerge, // Merge mode "RFC3267,RFC4867" // Initial value }; #endif static struct PluginCodec_Option const * const AMRWBOptionTable[] = { &AMRWBOptionRxFramesPerPacket, &AMRWBOptionTxFramesPerPacket, &MediaPacketizationRFC3267, #ifdef PLUGINCODEC_MEDIA_PACKETIZATIONS &MediaPacketizationsRFC3267, #endif &AMRWBOptionOctetAlign, //&ModeSetG7222, &ModeChangePeriodG7222, &ModeChangeNeighbourG7222, &CRC_G7222, &RobustSortingG7222, &InterleavingG7222, NULL }; static int AMRWBOptionsGet (const struct PluginCodec_Definition * defn, void * context, const char * name, void * parm, unsigned * parmLen) { if (parm == NULL || parmLen == NULL || *parmLen != sizeof(struct PluginCodec_Option **)) return 0; *(struct PluginCodec_Option const * const * *)parm = AMRWBOptionTable; return 1; } static struct PluginCodec_ControlDefn AMRWBEncoderControlDefn[] = { { "get_codec_options", AMRWBOptionsGet }, { NULL } }; ///////////////////////////////////////////////////////////////////////////// // Ref. Table F.1/G.722.2 static const struct PluginCodec_H323GenericCodecData AMRWBG7222Capability = { OpalPluginCodec_Identifer_G7222, // capability identifier }; // Note: because these parameters are defined in options, they're not needed here ///////////////////////////////////////////////////////////////////////////// // Effects of PluginCodec_DecodeSilence when stream detects silence: // Encoder // DecodeSilence=1: Transcode will pass us 0 for fromPtr & fromLen // Typically we will use this to fill output with comfort noise frame // DecodeSilence=0: Transcode will pass us input of inputBytesPerFrame 0's // Decoder // DecodeSilence=1: Transcode will pass us 0 for fromPtr & fromLen and set PluginCodec_CoderSilenceFrame flag // Typically we will use this to fill output with comfort noise // DecodeSilence=0: Transcode will not call us, and pass along an outputBytesPerFrame 0-filled frame // AMR-WB encoder supports VAD if dtx flag is set. Then encoder will send SIDs during silence. // But encoder requires full frame to detect silence, so leave PluginCodec_DecodeSilence off encoder. // AMR-WB decoder will generate something if told frame was lost, so use PluginCodec_DecodeSilence on decoder // to indicate lost frame with PluginCodec_CoderSilenceFrame flag. static struct PluginCodec_Definition AMRWBCodecDefinition[] = { { // amr-wb encoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &AMRWBLicenseInformation, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic, // dynamic RTP type "G.722.2(AMR-WB)", // text decription "PCM-16-16kHz", // source format "G.722.2", // destination format NULL, // user data 16000, // samples per second AMRWB_ALIGNED_BPS (AMRWB_24k), // raw bits per second 20000, // microseconds per frame AMRWB_FRAME_SAMPLES, // samples per frame AMRWB_block_size_octet[AMRWB_24k] + 1, // bytes per frame 1, // recommended number of frames per packet 1, // maximum number of frames per packet 0, // IANA RTP payload code "AMR-WB", // RTP payload name AMRWBEncoderCreate, // create codec function AMRWBEncoderDestroy, // destroy codec AMRWBEncode, // encode/decode AMRWBEncoderControlDefn, // codec controls PluginCodec_H323Codec_generic, // h323CapabilityType &AMRWBG7222Capability // h323CapabilityData }, { // amr-wb decoder PLUGIN_CODEC_VERSION_OPTIONS, // codec API version &AMRWBLicenseInformation, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic | // dynamic RTP type PluginCodec_DecodeSilence, // Can accept missing (empty) frames and generate silence "G.722.2(AMR-WB)", // text decription "G.722.2", // source format "PCM-16-16kHz", // destination format NULL, // user data 16000, // samples per second AMRWB_ALIGNED_BPS (AMRWB_24k), // raw bits per second 20000, // microseconds per frame AMRWB_FRAME_SAMPLES, // samples per frame AMRWB_block_size_octet[AMRWB_24k] + 1, // bytes per frame 1, // recommended number of frames per packet 1, // maximum number of frames per packet 0, // IANA RTP payload code "AMR-WB", // RTP payload name AMRWBDecoderCreate, // create codec function AMRWBDecoderDestroy, // destroy codec AMRWBDecode, // encode/decode NULL, // codec controls PluginCodec_H323Codec_generic, // h323CapabilityType &AMRWBG7222Capability // h323CapabilityData } }; extern "C" { PLUGIN_CODEC_IMPLEMENT_ALL(AMRWB, AMRWBCodecDefinition, PLUGIN_CODEC_VERSION_OPTIONS) }; ///////////////////////////////////////////////////////////////////////////// h323plus/plugins/audio/G.722.2/AMR-WB/0000755000175000017500000000000011341106231015445 5ustar markmarkh323plus/plugins/audio/G.722.2/AMR-WB/enc_lpc.h0000644000175000017500000000262011341106231017221 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #ifndef ENC_LPC_H #define ENC_LPC_H #include "typedef.h" void E_LPC_int_isp_find(Word16 isp_old[], Word16 isp_new[], const Word16 frac[], Word16 Az[]); void E_LPC_f_int_isp_find(Float32 isp_old[], Float32 isp_new[], Float32 a[], Word32 nb_subfr, Word32 m); void E_LPC_a_weight(Float32 *a, Float32 *ap, Float32 gamma, Word32 m); void E_LPC_isf_isp_conversion(Word16 isf[], Word16 isp[], Word16 m); Word16 E_LPC_isf_sub_vq(Float32 *x, const Float32 *E_ROM_dico, Word32 dim, Word32 E_ROM_dico_size, Float32 *distance); void E_LPC_isp_a_conversion(Word16 isp[], Word16 a[], Word16 m); void E_LPC_isp_isf_conversion(Float32 isp[], Float32 isf[], Word32 m); void E_LPC_lag_wind(Float32 r[], Word32 m); void E_LPC_lev_dur(Float32 *a, Float32 *r, Word32 m); void E_LPC_a_isp_conversion(Float32 *a, Float32 *isp, Float32 *old_isp, Word32 m); void E_LPC_isf_2s3s_quantise(Float32 *isf1, Word16 *isf_q, Word16 *past_isfq, Word32 *indice, Word32 nb_surv); void E_LPC_isf_2s5s_quantise(Float32 *isf1, Word16 *isf_q, Word16 *past_isfq, Word32 *indice, Word32 nb_surv); #endif h323plus/plugins/audio/G.722.2/AMR-WB/dec_dtx.h0000644000175000017500000000450711341106231017236 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #ifndef DEC_DTX_H #define DEC_DTX_H #include "typedef.h" #define M 16 /* Order of LP filter */ #define SPEECH 0 #define DTX 1 #define D_DTX_MUTE 2 #define D_DTX_HIST_SIZE 8 typedef struct { Word16 mem_isf_buf[M * D_DTX_HIST_SIZE]; /* ISF vector history (8 frames)*/ Word16 mem_isf[M]; /* ISF vector */ Word16 mem_isf_prev[M]; /* Previous ISF vector */ Word16 mem_log_en_buf[D_DTX_HIST_SIZE];/* logarithmic frame energy history*/ Word16 mem_true_sid_period_inv; /* inverse of true SID update rate */ Word16 mem_log_en; /* logarithmic frame energy */ Word16 mem_log_en_prev; /* previous logarithmic frame energy */ Word16 mem_cng_seed; /* Comfort noise excitation seed */ Word16 mem_hist_ptr; /* index to beginning of LSF history */ Word16 mem_dither_seed; /* comfort noise dithering seed */ Word16 mem_cn_dith; /* background noise stationarity information*/ Word16 mem_since_last_sid; /* number of frames since last SID frame */ UWord8 mem_dec_ana_elapsed_count;/* counts elapsed speech frames after DTX*/ UWord8 mem_dtx_global_state; /* DTX state flags */ UWord8 mem_data_updated; /* flags CNI updates */ UWord8 mem_dtx_hangover_count;/* counts down in hangover period */ UWord8 mem_sid_frame; /* flags SID frames */ UWord8 mem_valid_data; /* flags SID frames containing valid data */ UWord8 mem_dtx_hangover_added;/* flags hangover period at end of speech */ } D_DTX_State; int D_DTX_init(D_DTX_State **st, const Word16 *isf_init); int D_DTX_reset(D_DTX_State *st, const Word16 *isf_init); void D_DTX_exit(D_DTX_State **st); UWord8 D_DTX_rx_handler(D_DTX_State *st, UWord8 frame_type); void D_DTX_exe(D_DTX_State *st, Word16 *exc2, Word16 new_state, Word16 isf[], Word16 **prms); void D_DTX_activity_update(D_DTX_State *st, Word16 isf[], Word16 exc[]); #endif h323plus/plugins/audio/G.722.2/AMR-WB/enc_acelp.h0000644000175000017500000000225311341106231017531 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #ifndef ENC_E_ACELP_H #define ENC_E_ACELP_H #include "typedef.h" void E_ACELP_Gain2_Q_init(Word16 *mem); void E_ACELP_xy2_corr(Float32 xn[], Float32 y1[], Float32 y2[], Float32 g_corr[]); Float32 E_ACELP_xy1_corr(Float32 xn[], Float32 y1[], Float32 g_corr[]); void E_ACELP_xh_corr(Float32 *x, Float32 *y, Float32 *h); void E_ACELP_codebook_target_update(Float32 *x, Float32 *x2, Float32 *y, Float32 gain); void E_ACELP_2t(Float32 dn[], Float32 cn[], Float32 H[], Word16 code[], Float32 y[], Word32 *index); void E_ACELP_4t(Float32 dn[], Float32 cn[], Float32 H[], Word16 code[], Float32 y[], Word32 nbbits, Word16 mode, Word32 _index[]); Word32 E_ACELP_gains_quantise(Word16 code[], Word32 nbits, Float32 f_gain_pit, Word16 *gain_pit, Word32 *gain_code, Float32 *coeff, Word32 gp_clip, Word16 *past_qua_en); #endif h323plus/plugins/audio/G.722.2/AMR-WB/enc_util.h0000644000175000017500000000370111341106231017421 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #ifndef ENC_UTIL_H #define ENC_UTIL_H #include "typedef.h" #include "enc_main.h" Word16 E_UTIL_saturate(Word32 inp); Word32 E_UTIL_saturate_31(Word32 inp); Word16 E_UTIL_random(Word16 *seed); Word32 E_UTIL_mpy_32_16 (Word16 hi, Word16 lo, Word16 n); Word32 E_UTIL_pow2(Word16 exponant, Word16 fraction); void E_UTIL_log2_32 (Word32 L_x, Word16 *exponent, Word16 *fraction); void E_UTIL_normalised_inverse_sqrt(Word32 *frac, Word16 *exp); Word32 E_UTIL_dot_product12(Word16 x[], Word16 y[], Word32 lg, Word32 *exp); Word16 E_UTIL_norm_s (Word16 var1); Word16 E_UTIL_norm_l (Word32 L_var1); void E_UTIL_l_extract(Word32 L_32, Word16 *hi, Word16 *lo); void E_UTIL_hp50_12k8(Float32 signal[], Word32 lg, Float32 mem[]); void E_UTIL_preemph(Word16 x[], Word16 mu, Word32 lg, Word16 *mem); void E_UTIL_f_preemph(Float32 *signal, Float32 mu, Word32 L, Float32 *mem); void E_UTIL_deemph(Float32 *signal, Float32 mu, Word32 L, Float32 *mem); void E_UTIL_deemph_32(Word16 x_hi[], Word16 x_lo[], Word16 y[], Word16 mu, Word16 L, Word16 *mem); void E_UTIL_decim_12k8(Float32 sig16k[], Word32 lg, Float32 sig12k8[], Float32 mem[]); void E_UTIL_residu(Float32 *a, Float32 *x, Float32 *y, Word32 l); void E_UTIL_convolve(Word16 x[], Word16 q, Float32 h[], Float32 y[]); void E_UTIL_f_convolve(Float32 x[], Float32 h[], Float32 y[]); void E_UTIL_autocorr(Float32 *x, Float32 *r); void E_UTIL_signal_up_scale(Word16 x[], Word16 exp); void E_UTIL_signal_down_scale(Word16 x[], Word32 lg, Word16 exp); void E_UTIL_synthesis(Float32 a[], Float32 x[], Float32 y[], Word32 l, Float32 mem[], Word32 update_m); Word32 E_UTIL_enc_synthesis(Float32 Aq[], Float32 exc[], Float32 synth16k[], Coder_State *st); #endif h323plus/plugins/audio/G.722.2/AMR-WB/dec_main.h0000644000175000017500000000623711341106231017365 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #ifndef DEC_MAIN_H #define DEC_MAIN_H #include "typedef.h" #include "dec_dtx.h" #define L_FRAME 256 /* Frame size */ #define PIT_MAX 231 /* Maximum pitch lag */ #define L_INTERPOL (16 + 1) /* Length of filter for interpolation */ #define L_MEANBUF 3 #define L_FILT 12 /* Delay of up-sampling filter */ #define L_FILT16k 15 /* Delay of down-sampling filter */ #define M16k 20 /* Order of LP filter */ typedef struct { Word32 mem_gc_thres; /* threshold for noise enhancer */ Word16 mem_exc[(L_FRAME + 1) + PIT_MAX + L_INTERPOL];/* old excitation vector */ Word16 mem_isf_buf[L_MEANBUF * M];/* isf buffer(frequency domain) */ Word16 mem_hf[2 * L_FILT16k]; /* HF band-pass filter memory */ Word16 mem_hf2[2 * L_FILT16k]; /* HF band-pass filter memory */ Word16 mem_hf3[2 * L_FILT16k]; /* HF band-pass filter memory */ Word16 mem_oversamp[2 * L_FILT]; /* synthesis oversampled filter memory */ Word16 mem_gain[23]; /* gain decoder memory */ Word16 mem_syn_hf[M16k]; /* HF synthesis memory */ Word16 mem_isp[M]; /* old isp (immittance spectral pairs) */ Word16 mem_isf[M]; /* old isf (frequency domain) */ Word16 mem_isf_q[M]; /* past isf quantizer */ Word16 mem_syn_hi[M]; /* modified synthesis memory (MSB) */ Word16 mem_syn_lo[M]; /* modified synthesis memory (LSB) */ Word16 mem_ph_disp[8]; /* phase dispersion memory */ Word16 mem_sig_out[6]; /* hp50 filter memory for synthesis */ Word16 mem_hp400[6]; /* hp400 filter memory for synthesis */ Word16 mem_lag[5]; /* LTP lag history */ Word16 mem_subfr_q[4]; /* old maximum scaling factor */ Word16 mem_tilt_code; /* tilt of code */ Word16 mem_q; /* old scaling factor */ Word16 mem_deemph; /* speech deemph filter memory */ Word16 mem_seed; /* random memory for frame erasure */ Word16 mem_seed2; /* random memory for HF generation */ Word16 mem_seed3; /* random memory for lag concealment */ Word16 mem_T0; /* old pitch lag */ Word16 mem_T0_frac; /* old pitch fraction lag */ UWord16 mem_vad_hist; /* VAD history */ D_DTX_State *dtx_decSt; UWord8 mem_bfi; /* Previous BFI */ UWord8 mem_state; /* BGH state machine memory */ UWord8 mem_first_frame; /* First frame indicator */ } Decoder_State; #endif h323plus/plugins/audio/G.722.2/AMR-WB/dec_dtx.c0000644000175000017500000004663611341106231017242 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #include #include #include #include "typedef.h" #include "dec_dtx.h" #include "dec_lpc.h" #include "dec_util.h" #define MAX_31 (Word32)0x3FFFFFFF #define L_FRAME 256 /* Frame size */ #define RX_SPEECH_LOST 2 #define RX_SPEECH_BAD 3 #define RX_SID_FIRST 4 #define RX_SID_UPDATE 5 #define RX_SID_BAD 6 #define RX_NO_DATA 7 #define ISF_GAP 128 /* 50 */ #define D_DTX_MAX_EMPTY_THRESH 50 #define GAIN_FACTOR 75 #define ISF_FACTOR_LOW 256 #define ISF_FACTOR_STEP 2 #define ISF_DITH_GAP 448 #define D_DTX_HANG_CONST 7 /* yields eight frames of SP HANGOVER */ #define D_DTX_ELAPSED_FRAMES_THRESH (24 + 7 - 1) #define RANDOM_INITSEED 21845 /* own random init value */ /* * D_DTX_reset * * Parameters: * st O: state struct * * Function: * Initializes state memory * * Returns: * non-zero with error, zero for ok */ int D_DTX_reset(D_DTX_State *st, const Word16 *isf_init) { Word32 i; if(st == (D_DTX_State*)NULL) { return(-1); } st->mem_since_last_sid = 0; st->mem_true_sid_period_inv = (1 << 13); /* 0.25 in Q15 */ st->mem_log_en = 3500; st->mem_log_en_prev = 3500; /* low level noise for better performance in DTX handover cases */ st->mem_cng_seed = RANDOM_INITSEED; st->mem_hist_ptr = 0; /* Init isf_hist[] and decoder log frame energy */ memcpy(st->mem_isf, isf_init, M * sizeof(Word16)); memcpy(st->mem_isf_prev, isf_init, M * sizeof(Word16)); for(i = 0; i < D_DTX_HIST_SIZE; i++) { memcpy(&st->mem_isf_buf[i * M], isf_init, M * sizeof(Word16)); st->mem_log_en_buf[i] = 3500; } st->mem_dtx_hangover_count = D_DTX_HANG_CONST; st->mem_dec_ana_elapsed_count = 127; st->mem_sid_frame = 0; st->mem_valid_data = 0; st->mem_dtx_hangover_added = 0; st->mem_dtx_global_state = SPEECH; st->mem_data_updated = 0; st->mem_dither_seed = RANDOM_INITSEED; st->mem_cn_dith = 0; return(0); } /* * D_DTX_init * * Parameters: * st I/O: state struct * * Function: * Allocates state memory and initializes state memory * * Returns: * non-zero with error, zero for ok */ int D_DTX_init(D_DTX_State **st, const Word16 *isf_init) { D_DTX_State *s; if(st == (D_DTX_State**)NULL) { return(-1); } *st = NULL; /* allocate memory */ if((s = (D_DTX_State*)malloc(sizeof(D_DTX_State))) == NULL) { return(-1); } D_DTX_reset(s, isf_init); *st = s; return(0); } /* * D_DTX_exit * * Parameters: * state I/0: State struct * * Function: * The memory used for state memory is freed * * Returns: * void */ void D_DTX_exit(D_DTX_State **st) { if(st == NULL || *st == NULL) { return; } /* deallocate memory */ free(*st); *st = NULL; return; } /* * D_DTX_rx_handler * * Parameters: * st I/O: State struct * frame_type I: Frame type * * Function: * Analyze received frame * * Table of new SPD synthesis states * * | previous SPD_synthesis_state * Incoming | * frame_type | SPEECH | DTX | D_DTX_MUTE * --------------------------------------------------------------- * RX_SPEECH_GOOD , | | | * RX_SPEECH_PR_DEGRADED | SPEECH | SPEECH | SPEECH * ---------------------------------------------------------------- * RX_SPEECH_BAD, | SPEECH | DTX | D_DTX_MUTE * ---------------------------------------------------------------- * RX_SID_FIRST, | DTX | DTX/(D_DTX_MUTE)| D_DTX_MUTE * ---------------------------------------------------------------- * RX_SID_UPDATE, | DTX | DTX | DTX * ---------------------------------------------------------------- * RX_SID_BAD, | DTX | DTX/(D_DTX_MUTE)| D_DTX_MUTE * ---------------------------------------------------------------- * RX_NO_DATA, | SPEECH | DTX/(D_DTX_MUTE)| D_DTX_MUTE * RX_SPARE |(class2 garb.)| | * ---------------------------------------------------------------- * * Returns: * new state */ UWord8 D_DTX_rx_handler(D_DTX_State *st, UWord8 frame_type) { UWord8 newState; UWord8 encState; /* DTX if SID frame or previously in DTX{_MUTE} * and (NO_RX OR BAD_SPEECH) */ if((frame_type == RX_SID_FIRST) | (frame_type == RX_SID_UPDATE) | (frame_type == RX_SID_BAD) | (((st->mem_dtx_global_state == DTX) | (st->mem_dtx_global_state == D_DTX_MUTE)) & ((frame_type == RX_NO_DATA) | (frame_type == RX_SPEECH_BAD) | (frame_type == RX_SPEECH_LOST)))) { newState = DTX; /* stay in mute for these input types */ if((st->mem_dtx_global_state == D_DTX_MUTE) & ((frame_type == RX_SID_BAD) | (frame_type == RX_SID_FIRST) | (frame_type == RX_SPEECH_LOST) | (frame_type == RX_NO_DATA))) { newState = D_DTX_MUTE; } /* evaluate if noise parameters are too old */ /* since_last_sid is reset when CN parameters have been updated */ st->mem_since_last_sid = D_UTIL_saturate(st->mem_since_last_sid + 1); /* no update of sid parameters in DTX for a Word32 while */ if(st->mem_since_last_sid > D_DTX_MAX_EMPTY_THRESH) { newState = D_DTX_MUTE; } } else { newState = SPEECH; st->mem_since_last_sid = 0; } /* * reset the decAnaElapsed Counter when receiving CNI data the first * time, to robustify counter missmatch after handover * this might delay the bwd CNI analysis in the new decoder slightly. */ if((st->mem_data_updated == 0) & (frame_type == RX_SID_UPDATE)) { st->mem_dec_ana_elapsed_count = 0; } /* * update the SPE-SPD DTX hangover synchronization * to know when SPE has added dtx hangover */ st->mem_dec_ana_elapsed_count++; /* saturate */ if(st->mem_dec_ana_elapsed_count > 127) { st->mem_dec_ana_elapsed_count = 127; } st->mem_dtx_hangover_added = 0; if((frame_type == RX_SID_FIRST) | (frame_type == RX_SID_UPDATE) | (frame_type == RX_SID_BAD) | (frame_type == RX_NO_DATA)) { encState = DTX; } else { encState = SPEECH; } if(encState == SPEECH) { st->mem_dtx_hangover_count = D_DTX_HANG_CONST; } else { if(st->mem_dec_ana_elapsed_count > D_DTX_ELAPSED_FRAMES_THRESH) { st->mem_dtx_hangover_added = 1; st->mem_dec_ana_elapsed_count = 0; st->mem_dtx_hangover_count = 0; } else if(st->mem_dtx_hangover_count == 0) { st->mem_dec_ana_elapsed_count = 0; } else { st->mem_dtx_hangover_count--; } } if(newState != SPEECH) { /* * DTX or D_DTX_MUTE * CN data is not in a first SID, first SIDs are marked as SID_BAD * but will do backwards analysis if a hangover period has been added * according to the state machine above */ st->mem_sid_frame = 0; st->mem_valid_data = 0; if(frame_type == RX_SID_FIRST) { st->mem_sid_frame = 1; } else if(frame_type == RX_SID_UPDATE) { st->mem_sid_frame = 1; st->mem_valid_data = 1; } else if(frame_type == RX_SID_BAD) { st->mem_sid_frame = 1; st->mem_dtx_hangover_added = 0; /* use old data */ } } return newState; /* newState is used by both SPEECH AND DTX synthesis routines */ } /* * D_DTX_cn_dithering * * Parameters: * isf I/O: CN ISF vector * L_log_en_int I/O: energy parameter * dither_seed I/O: random seed * * Function: * Confort noise dithering * * Returns: * void */ static void D_DTX_cn_dithering(Word16 isf[M], Word32 *L_log_en_int, Word16 *dither_seed) { Word32 temp, temp1, i, dither_fac, rand_dith,rand_dith2; /* Insert comfort noise dithering for energy parameter */ rand_dith = D_UTIL_random(dither_seed) >> 1; rand_dith2 = D_UTIL_random(dither_seed) >>1; rand_dith = rand_dith + rand_dith2; *L_log_en_int = *L_log_en_int + ((rand_dith * GAIN_FACTOR) << 1); if(*L_log_en_int < 0) { *L_log_en_int = 0; } /* Insert comfort noise dithering for spectral parameters (ISF-vector) */ dither_fac = ISF_FACTOR_LOW; rand_dith = D_UTIL_random(dither_seed) >> 1; rand_dith2 = D_UTIL_random(dither_seed) >> 1; rand_dith = rand_dith + rand_dith2; temp = isf[0] + (((rand_dith * dither_fac) + 0x4000) >> 15); /* Make sure that isf[0] will not get negative values */ if(temp < ISF_GAP) { isf[0] = ISF_GAP; } else { isf[0] = (Word16)temp; } for(i = 1; i < M - 1; i++) { dither_fac = dither_fac + ISF_FACTOR_STEP; rand_dith = D_UTIL_random(dither_seed) >> 1; rand_dith2 = D_UTIL_random(dither_seed) >> 1; rand_dith = rand_dith + rand_dith2; temp = isf[i] + (((rand_dith * dither_fac) + 0x4000) >> 15); temp1 = temp - isf[i - 1]; /* Make sure that isf spacing remains at least ISF_DITH_GAP Hz */ if(temp1 < ISF_DITH_GAP) { isf[i] = (Word16)(isf[i - 1] + ISF_DITH_GAP); } else { isf[i] = (Word16)temp; } } /* Make sure that isf[M-2] will not get values above 16384 */ if(isf[M - 2] > 16384) { isf[M - 2] = 16384; } return; } /* * D_DTX_exe * * Parameters: * st I/O: state struct * exc2 O: CN excitation * new_state I: New DTX state * prms I: Vector of synthesis parameters * isf O: CN ISF vector * * Function: * Confort noise generation * * Returns: * void */ void D_DTX_exe(D_DTX_State *st, Word16 *exc2, Word16 new_state, Word16 isf[], Word16 **prms) { Word32 i, j, L_tmp, ptr; Word32 exp0, int_fac; Word32 gain; Word32 L_isf[M], L_log_en_int, level32, ener32; Word16 log_en_index; Word16 tmp_int_length; Word16 exp, log_en_int_e, log_en_int_m, level; /* * This function is called if synthesis state is not SPEECH. * The globally passed inputs to this function are * st->sid_frame * st->valid_data * st->dtxHangoverAdded * new_state (SPEECH, DTX, D_DTX_MUTE) */ if((st->mem_dtx_hangover_added != 0) & (st->mem_sid_frame != 0)) { /* sid_first after dtx hangover period * or sid_upd after dtxhangover * consider twice the last frame */ ptr = st->mem_hist_ptr + 1; if(ptr == D_DTX_HIST_SIZE) { ptr = 0; } memcpy(&st->mem_isf_buf[ptr * M], &st->mem_isf_buf[st->mem_hist_ptr * M], M * sizeof(Word16)); st->mem_log_en_buf[ptr] = st->mem_log_en_buf[st->mem_hist_ptr]; /* compute mean log energy and isf from decoded signal (SID_FIRST) */ st->mem_log_en = 0; memset(L_isf, 0, M * sizeof(Word32)); /* average energy and isf */ for(i = 0; i < D_DTX_HIST_SIZE; i++) { /* * Division by D_DTX_HIST_SIZE = 8 has been done in dtx_buffer log_en * is in Q10 */ st->mem_log_en = (Word16)(st->mem_log_en + st->mem_log_en_buf[i]); for(j = 0; j < M; j++) { L_isf[j] = L_isf[j] + st->mem_isf_buf[i * M + j]; } } /* st->log_en in Q9 */ st->mem_log_en = (Word16)(st->mem_log_en >> 1); /* * Add 2 in Q9, in order to have only positive values for Pow2 * this value is subtracted back after Pow2 function */ st->mem_log_en = (Word16)(st->mem_log_en + 1024); if(st->mem_log_en < 0) { st->mem_log_en = 0; } for(j = 0; j < M; j++) { st->mem_isf[j] = (Word16)(L_isf[j]>>3); /* divide by 8 */ } } if(st->mem_sid_frame != 0) { /* * Set old SID parameters, always shift * even if there is no new valid_data */ memcpy(st->mem_isf_prev, st->mem_isf, M * sizeof(Word16)); st->mem_log_en_prev = st->mem_log_en; if(st->mem_valid_data != 0) /* new data available (no CRC) */ { /* st->true_sid_period_inv = 1.0f/st->since_last_sid; */ /* * Compute interpolation factor, since the division only works * for values of since_last_sid < 32 we have to limit * the interpolation to 32 frames */ tmp_int_length = st->mem_since_last_sid; if(tmp_int_length > 32) { tmp_int_length = 32; } if(tmp_int_length >= 2) { st->mem_true_sid_period_inv = (Word16)(0x2000000 / (tmp_int_length << 10)); } else { st->mem_true_sid_period_inv = 1 << 14; /* 0.5 it Q15 */ } D_LPC_isf_noise_d(*prms, st->mem_isf); (*prms) += 5; log_en_index = *(*prms)++; /* read background noise stationarity information */ st->mem_cn_dith = *(*prms)++; /* * st->log_en = (Float32)log_en_index / 2.625 - 2.0; * log2(E) in Q9 (log2(E) lies in between -2:22) */ st->mem_log_en = (Word16)(log_en_index << (15 - 6)); /* Divide by 2.625 */ st->mem_log_en = (Word16)((st->mem_log_en * 12483) >> 15); /* * Subtract 2 in Q9 is done later, after Pow2 function * no interpolation at startup after coder reset * or when SID_UPD has been received right after SPEECH */ if((st->mem_data_updated == 0) || (st->mem_dtx_global_state == SPEECH)) { memcpy(st->mem_isf_prev, st->mem_isf, M * sizeof(Word16)); st->mem_log_en_prev = st->mem_log_en; } } /* endif valid_data */ } /* endif sid_frame */ if((st->mem_sid_frame != 0) && (st->mem_valid_data != 0)) { st->mem_since_last_sid = 0; } /* Interpolate SID info */ if(st->mem_since_last_sid < 32) { int_fac = st->mem_since_last_sid << 10; /* Q10 */ } else { int_fac = 32767; } /* Q10 * Q15 -> Q10 */ int_fac = (int_fac * st->mem_true_sid_period_inv) >> 15; /* Maximize to 1.0 in Q10 */ if(int_fac > 1024) { int_fac = 1024; } int_fac = int_fac << 4; /* Q10 -> Q14 */ L_log_en_int = (int_fac * st->mem_log_en) << 1; /* Q14 * Q9 -> Q24 */ for(i = 0; i < M; i++) { /* Q14 * Q15 -> Q14 */ isf[i] = (Word16)((int_fac * st->mem_isf[i]) >> 15); } int_fac = 16384 - int_fac; /* 1-k in Q14 */ /* ( Q14 * Q9 -> Q24 ) + Q24 -> Q24 */ L_log_en_int = L_log_en_int + ((int_fac * st->mem_log_en_prev) << 1); for(i = 0; i < M; i++) { /* Q14 + (Q14 * Q15 -> Q14) -> Q14 */ L_tmp = isf[i] + ((int_fac * st->mem_isf_prev[i]) >> 15); isf[i] = (Word16)(L_tmp << 1); /* Q14 -> Q15 */ } /* If background noise is non-stationary, insert comfort noise dithering */ if(st->mem_cn_dith != 0) { D_DTX_cn_dithering(isf, &L_log_en_int, &st->mem_dither_seed); } /* L_log_en_int corresponds to log2(E)+2 in Q24, i.e log2(gain)+1 in Q25 */ L_log_en_int = (L_log_en_int >> 9); /* Q25 -> Q16 */ /* Find integer part */ log_en_int_e = (Word16)((L_log_en_int)>>16); /* Find fractional part */ log_en_int_m = (Word16)((L_log_en_int - (log_en_int_e << 16)) >> 1); /* * Subtract 2 from L_log_en_int in Q9, * i.e divide the gain by 2 (energy by 4) * Add 16 in order to have the result of pow2 in Q16 */ log_en_int_e = (Word16)(log_en_int_e + (16 - 1)); /* level = (Float32)( pow( 2.0f, log_en ) ); */ level32 = D_UTIL_pow2(log_en_int_e, log_en_int_m); /* Q16 */ exp0 = D_UTIL_norm_l(level32); level32 = (level32 << exp0); /* level in Q31 */ exp0 = (15 - exp0); level = (Word16)(level32 >> 16); /* level in Q15 */ /* generate white noise vector */ for(i = 0; i < L_FRAME; i++) { exc2[i] = (Word16)((D_UTIL_random(&(st->mem_cng_seed)) >> 4)); } /* gain = level / sqrt(ener) * sqrt(L_FRAME) */ /* energy of generated excitation */ ener32 = D_UTIL_dot_product12(exc2, exc2, L_FRAME, &exp); D_UTIL_normalised_inverse_sqrt(&ener32, &exp); gain = ener32 >>16; gain = (level * gain) >> 15; /* gain in Q15 */ /* Multiply by sqrt(L_FRAME)=16, i.e. shift left by 4 */ exp = (Word16)(exp0 + exp + 4); if(exp >= 0) { for(i = 0; i < L_FRAME; i++) { L_tmp = (exc2[i] * gain) >> 15; /* Q0 * Q15 */ exc2[i] = (Word16)(L_tmp << exp); } } else { exp = (Word16)-exp; for(i = 0; i < L_FRAME; i++) { L_tmp = (exc2[i] * gain) >> 15; /* Q0 * Q15 */ exc2[i] = (Word16)(L_tmp >> exp); } } if(new_state == D_DTX_MUTE) { /* * mute comfort noise as it has been quite a long time since * last SID update was performed */ tmp_int_length = st->mem_since_last_sid; if(tmp_int_length > 32) { tmp_int_length = 32; } st->mem_true_sid_period_inv = D_UTIL_saturate((0x02000000 / (tmp_int_length << 10))); st->mem_since_last_sid = 0; st->mem_log_en_prev = st->mem_log_en; /* subtract 1/8 in Q9 (energy), i.e -3/8 dB */ st->mem_log_en = D_UTIL_saturate(st->mem_log_en - 64); } /* reset interpolation length timer if data has been updated. */ if((st->mem_sid_frame != 0) && ((st->mem_valid_data != 0) || ((st->mem_valid_data == 0) && (st->mem_dtx_hangover_added) != 0))) { st->mem_since_last_sid = 0; st->mem_data_updated = 1; } return; } /* * D_DTX_activity_update * * Parameters: * st I/O: state struct * isf O: ISF vector * exc O: excitation * * Function: * Confort noise generation * * Returns: * void */ void D_DTX_activity_update(D_DTX_State *st, Word16 isf[], Word16 exc[]) { Word32 L_frame_en, log_en; Word32 i; Word16 log_en_e, log_en_m; st->mem_hist_ptr = (Word16)(st->mem_hist_ptr + 1); if(st->mem_hist_ptr == D_DTX_HIST_SIZE) { st->mem_hist_ptr = 0; } memcpy(&st->mem_isf_buf[st->mem_hist_ptr * M], isf, M * sizeof(Word16)); /* compute log energy based on excitation frame energy in Q0 */ L_frame_en = 0; for(i = 0; i < L_FRAME; i++) { L_frame_en = L_frame_en + (exc[i] * exc[i]); if (L_frame_en > MAX_31) { L_frame_en = MAX_31; break; } } /* * log_en = * (Float32)log10(L_frame_en/(Float32)L_FRAME)/(Float32)log10(2.0f); */ D_UTIL_log2(L_frame_en, &log_en_e, &log_en_m); /* * convert exponent and mantissa to Word16 Q7. * Q7 is used to simplify averaging in dtx_enc */ log_en = log_en_e << 7; /* Q7 */ log_en = log_en + (log_en_m >> (15 - 7)); /* Divide by L_FRAME = 256, i.e subtract 8 in Q7 = 1024 */ log_en = log_en - 1024; /* insert into log energy buffer */ st->mem_log_en_buf[st->mem_hist_ptr] = (Word16)log_en; return; } h323plus/plugins/audio/G.722.2/AMR-WB/dec_rom.c0000644000175000017500000016326111341106231017232 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #include "typedef.h" #define L_SUBFR 64 /* Subframe size */ #define L_FIR 31 #define ORDER 16 /* Order of linear prediction filter */ #define M 16 /* Order of LP filter */ #define NB_SUBFR 4 /* Number of subframe per frame */ #define UP_SAMP 4 #define L_INTERPOL2 16 #define SIZE_BK1 256 #define SIZE_BK2 256 #define SIZE_BK21 64 #define SIZE_BK22 128 #define SIZE_BK23 128 #define SIZE_BK24 32 #define SIZE_BK25 32 #define SIZE_BK21_36b 128 #define SIZE_BK22_36b 128 #define SIZE_BK23_36b 64 #define SIZE_BK_NOISE1 64 #define SIZE_BK_NOISE2 64 #define SIZE_BK_NOISE3 64 #define SIZE_BK_NOISE4 32 #define SIZE_BK_NOISE5 32 /* 16-byte align start */ /* * isf codebooks: two-stage VQ with split-by-5 in 2nd stage * * codebook vector dimension number of vectors * ~~~~~~~~ ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ * 1_1 9 256 * 1_2 7 256 * 2_1 3 64 * 2_2 3 128 * 2_3 3 128 * 2_4 3 32 * 2_5 4 32 */ /* * 1st stage codebook; 1st split: isf0 to isf8 */ const Word16 D_ROM_dico1_isf[SIZE_BK1 * 9] = { 579, 1081, 1035, 390, 3, -263, -198, -82, 38, 18, -68, -12, 313, 761, 405, 249, 111, -76, 740, 1263, 1292, 1006, 997, 1019, 1017, 976, 923, -91, 827, 948, 648, 613, 535, 522, 490, 421, 41, -44, -281, -472, 652, 534, 193, 135, -90, 41, -121, -356, -60, 663, 307, 61, -48, -344, 557, 946, 1049, 867, 846, 990, 1112, 1262, 1241, -118, -204, 328, 512, 870, 793, 610, 402, 186, 156, 293, 74, -338, -475, -897, -594, -161, -497, 226, 131, -138, 307, 169, -271, -164, -387, -624, 62, -32, -61, -252, -541, -828, -1027, -523, -662, 102, -61, 141, 112, -270, -251, -541, 25, -150, 6, -132, -356, -686, -96, -322, -522, -31, -326, -36, -209, -521, -229, 307, -132, -5, -99, -384, 60, -51, -237, -668, -973, -407, -708, -75, -172, 26, -138, -266, 111, -302, 43, -278, -356, -359, 570, 822, 496, -154, -312, -92, 137, 279, 371, -146, 368, 409, 68, 6, 77, 167, 202, 162, 633, 898, 996, 756, 662, 683, 783, 909, 996, -103, 294, 607, 415, 483, 462, 480, 431, 408, -120, -338, -612, -524, 584, 331, 92, 433, 276, -178, -293, -154, -41, 269, 100, -9, 213, 160, 830, 736, 278, 820, 1254, 686, 712, 1039, 473, -218, -304, 463, 454, 397, 273, 202, 286, 273, -232, 7, 6, -388, -472, -427, -378, -167, -100, -294, -183, 134, -47, 101, -88, -84, -117, -3, 57, 17, -202, -634, -989, -1119, -533, 176, -36, 120, -28, 23, 111, -319, 318, -22, -77, 266, -271, -464, -434, -658, -640, -385, -385, -99, -69, -198, -259, -266, -44, -39, -139, -137, 171, 66, 9, -145, -377, -846, -1000, -111, -325, 342, 135, -81, -286, -380, 192, -57, 307, 76, -24, -140, 677, 702, 247, 56, 249, 141, -105, -236, -99, 36, -39, -69, 348, 198, -93, 322, 91, -72, 503, 885, 1508, 1307, 1282, 1172, 1119, 1209, 1061, 416, 719, 989, 1227, 1001, 1052, 954, 741, 1044, -127, -376, -657, 139, 623, 223, 501, 306, 220, -113, -384, -796, 504, 438, 85, 213, -83, -194, 585, 1132, 1233, 1091, 1247, 1433, 1512, 1448, 1314, -174, -422, 7, 1155, 1089, 1182, 1003, 945, 806, 8, -126, -317, -103, -351, -695, -98, -268, -537, 33, -103, -290, 167, -39, -407, 44, -208, -375, 104, -23, -64, -291, -637, -851, -1084, -61, -112, -75, -306, -434, 218, -148, -354, -680, -133, -216, -121, -377, -718, -97, -130, -361, -156, -379, -599, -56, -254, -586, 235, 157, -214, 11, -260, -149, -124, -267, -397, -580, -593, -527, -805, -385, 346, -193, -440, -708, -351, -141, -255, -499, -147, -185, 448, 660, 494, 208, 509, 461, 338, 291, 149, -223, 88, 335, 159, 212, 191, 286, 308, 205, -31, 469, 803, 659, 619, 658, 843, 987, 1113, -171, -242, 514, 362, 295, 524, 552, 694, 585, -64, -308, -448, -21, 284, 786, 446, 289, 92, -218, -390, -7, 169, 206, 330, 352, 408, 358, -36, 702, 959, 859, 861, 1115, 1269, 1357, 1305, -133, -341, -65, 678, 417, 440, 486, 518, 780, 33, -44, -191, -344, -461, -755, -201, 217, -31, -353, -547, -44, 123, -61, -68, -79, 29, 60, 73, -57, -406, -766, -1243, -1203, 240, 400, 165, -73, -282, -601, -213, -171, -375, 332, 35, -103, -29, -207, -553, -476, -638, -908, 172, -22, -135, -192, -239, -164, -103, -111, -47, 153, 125, 110, -1, -203, -570, -1030, -1424, -535, 155, 1, 147, -333, -653, -865, -197, -158, -21, -44, 95, 108, 389, 588, 490, 33, -237, -524, -628, -136, -260, 40, -177, -462, 453, 862, 380, 131, -130, -405, 842, 1678, 1841, 1549, 1474, 1256, 1082, 905, 742, 370, 1216, 1768, 1633, 1212, 636, 22, -330, 71, -76, -281, -741, -742, 898, 619, 277, 71, -222, -32, -265, -556, -25, 994, 682, 305, 126, -165, 73, 738, 893, 968, 993, 1768, 2273, 1840, 1391, -69, -349, -585, 234, 1158, 903, 626, 510, 251, -1, -99, -272, -210, -603, -351, -540, -811, -383, -16, -230, -504, 410, 149, -205, -343, -651, -639, 103, -9, -227, -205, -562, -781, -1079, -1208, -156, 143, 63, -135, -67, -317, -602, -784, -1154, -640, -144, -391, -674, -622, -200, -254, -660, -947, -395, -40, -250, -625, 27, 543, 94, -131, -386, -673, -123, -371, -757, -451, -564, -614, -415, -711, -35, -116, -309, -593, -268, 239, -33, -338, -650, -135, 94, 251, 554, 57, -312, -423, -154, -57, 235, -268, -71, 381, 114, -44, -87, 125, 173, 133, 1513, 1714, 1238, 534, 276, 315, 461, 459, 508, -131, -19, 1149, 670, 486, 356, 309, 369, 296, -223, -501, -899, -722, -70, 6, 131, 310, 394, -99, -303, -517, 249, 64, -53, 135, -11, 453, -147, -399, -730, -401, 817, 738, 802, 749, 575, -154, -435, -739, 800, 593, 366, 529, 318, 326, -224, 45, -39, -387, -515, -518, -608, -384, -321, -315, -377, 143, -101, -113, -377, -177, -144, -12, 117, 40, -239, -651, -1051, -581, -737, -990, -328, 26, -50, -157, -23, -453, -283, -531, -546, 192, -252, -501, -743, -589, -627, -499, -328, -118, -72, -324, -494, -244, -306, -144, -177, -262, -135, -78, -36, -234, -519, -961, -1290, -314, -479, -371, -45, -95, -292, -535, -8, -300, 112, -164, -277, 198, -99, -128, 880, 836, 579, 351, 23, -95, -217, -27, -258, 124, 1011, 597, 425, 144, 7, -73, 421, 1293, 1640, 1623, 1742, 1617, 1499, 1284, 1006, -95, 752, 1680, 1569, 1618, 1436, 1200, 980, 712, -69, -300, -683, -435, 1132, 899, 504, 332, 109, -74, -323, -637, 563, 1074, 608, 371, 105, -49, -78, 831, 1194, 1110, 1378, 1481, 1492, 1365, 1217, -259, -121, 1440, 1334, 1628, 1490, 1438, 1223, 933, -82, -306, -613, -222, -378, -675, -545, -671, -845, 53, -124, -347, 422, 52, -125, -270, -529, 9, 79, -89, -320, -662, -999, -1199, -1243, -676, -297, -68, -273, -611, 137, -146, -397, -627, -845, -220, -112, -346, -797, -826, 234, -132, -188, -278, -522, -159, -405, -734, -419, 293, 74, -167, -167, 184, -153, -437, -833, -1080, -336, -472, -561, -340, -253, -169, -423, -820, -904, -131, -19, -346, -604, 31, 33, -31, 312, 62, -148, 49, -59, 564, 486, -306, -333, 194, -44, 67, 72, 147, 205, 243, -207, -49, 1360, 983, 969, 991, 1014, 1110, 973, -211, -172, 883, 627, 711, 674, 705, 798, 746, -88, -325, -763, -974, 687, 908, 514, 382, 172, -292, -612, -805, 63, 131, 270, 259, 352, 348, -235, -84, 955, 818, 1120, 1289, 1559, 1480, 1285, -180, -461, -614, 657, 691, 745, 854, 783, 713, -97, -309, -477, -614, -777, -734, -768, -526, -472, -344, -476, -35, -169, 49, -77, -150, -240, -141, -52, -268, -639, -919, -1278, -1113, -342, -333, -151, -68, -242, -585, -73, -209, -478, -159, -429, 133, -197, -499, -1005, -1268, -272, -224, -105, -67, 17, -363, -618, -414, -116, -62, 20, 10, 116, 108, -195, -475, -906, -1260, -891, -441, -277, -142, -28, -226, -519, -950, -700, -275, -266, -116, -105, 82, 404, 511, 520, 327, 17, -194, -333, -536, -586, -114, -130, 276, 237, 204, 342, 135, -16, -111, 670, 1208, 1168, 860, 742, 601, 528, 403, 309, 397, 621, 966, 752, 579, 398, 400, 329, 252, 191, 180, -137, -467, 272, 106, -95, 17, -192, -80, -290, -626, 194, 598, 196, 21, -281, 77, 510, 864, 1108, 807, 939, 902, 925, 717, 481, 137, 367, 534, 764, 670, 382, 296, 153, 84, 303, 497, 144, -85, -125, -539, -482, -464, -764, 233, 347, 68, -147, 169, -210, -242, -226, -482, 307, 422, 154, -175, -386, -722, -724, -904, -1015, 309, 308, 160, -60, -470, -420, -598, -791, -219, 68, 121, -137, -560, -146, -446, -515, -494, -729, 130, 53, -227, 46, 474, 32, -161, -192, -490, 213, 164, -71, -465, -876, -161, -456, -587, -48, 218, 117, 39, 177, -194, -88, -226, -418, 50, 210, 547, 569, 279, 121, -44, -50, 10, -84, 58, 140, 182, -5, 267, 117, 106, 211, 198, 539, 835, 913, 719, 617, 544, 591, 565, 642, 153, 559, 872, 460, 222, 108, 188, 180, 183, 158, 119, 284, -153, -271, 229, 87, 110, -57, -183, 82, 118, 21, 13, 40, 118, 191, 185, 162, 889, 654, 108, -34, 244, 488, 561, 532, 163, 56, 609, 341, 50, 329, 68, 266, 218, 100, 206, 18, -304, -107, -436, -487, -65, -306, -86, 154, 134, -30, -45, -73, -104, -80, -96, 245, 330, 10, -440, -849, -1082, 79, 40, -265, 196, 372, 272, -181, -493, -389, 275, 80, -59, 2, -12, -246, -505, -100, -436, 21, -187, -431, -221, -48, 36, -271, -186, -147, -109, 26, 71, 213, 140, 72, -351, -620, -84, -363, 69, 46, 91, 167, -3, -95, -99, -105, -48, 114, 147, 259, 249, 172, 607, 406, 52, 59, -189, -320, 115, -85, -54, 574, 128, 226, -59, -253, 130, -62, 1033, 1308, 1035, 1127, 1098, 1029, 961, 823, 39, 364, 757, 940, 728, 660, 659, 583, 770, -115, -338, -760, -471, 394, 37, 441, 178, 6, -57, -305, -525, 796, 453, 188, -4, -114, 248, 71, 444, 797, 731, 1096, 1157, 1222, 1029, 811, 135, 359, 551, 425, 749, 815, 874, 704, 502, 132, 247, 0, -206, -449, -750, -258, -514, -633, 248, 249, 91, 121, -195, -499, -90, -282, -435, 78, 20, -277, -623, -983, -1224, -415, -458, -639, 347, 509, 208, -179, -464, -728, -76, -237, -486, -103, -343, -756, -713, -265, -609, -191, -398, -636, -121, -383, -749, 567, 252, -36, -354, -417, -50, 204, 100, -149, -650, -1081, -47, -7, -263, 111, -46, -180, -267, -324, -562, -394, -692, 398, 292, 482, 670, 683, 624, 442, 165, 116, 36, -149, 108, 247, 291, 247, 355, 122, 109, 224, 296, -14, 945, 990, 801, 755, 815, 847, 913, 892, 292, 349, 725, 482, 388, 329, 429, 620, 667, -34, 197, 213, -127, 84, 494, 620, 575, 375, 126, 207, 172, 167, 362, 202, 296, 395, 455, -6, 250, 539, 467, 636, 801, 1149, 1287, 1118, 27, 240, 369, 280, 440, 411, 634, 892, 953, 159, 170, -58, -395, -797, -690, 77, -211, -334, -5, -28, -13, -74, -335, -603, 300, 88, -205, 82, -33, -364, -698, -1203, -1153, 110, -146, -289, 113, 1, -243, -588, -994, -496, 414, 160, 42, -56, -247, -440, -693, -996, -479, 11, -178, -357, -151, -353, -327, -211, -340, 141, 65, 425, 453, 34, -169, -455, -932, -1215, 138, 499, 256, 324, 68, 139, -15, -547, -478, 17, 306, 502, 481, -32, -134, 445, 129, -143, -244, -503, -507, -599, 61, -140, -345, 496, 458, -2, 20, -227, -514, 394, 1765, 1666, 1339, 1117, 806, 642, 479, 380, 215, 519, 920, 1053, 1090, 791, 528, 290, 155, -54, -233, -647, -602, 639, 294, -2, -167, -442, -78, -315, -791, -113, 820, 403, 158, -116, -356, 529, 1851, 2003, 1228, 622, -41, -416, 344, 819, -105, -379, -236, 1224, 893, 749, 568, 356, 214, -17, -199, -144, 50, -283, -247, -578, -846, -1087, 69, -11, -381, -206, 209, -284, -387, -416, -716, 39, -5, -145, -374, -682, -909, -1074, -1169, -1066, 287, 226, 67, -221, -662, -171, -421, -642, -707, -132, -348, -538, -448, -20, -4, -354, -748, -933, 4, -75, -289, -598, 317, 52, -208, -297, -559, -88, -264, -358, -589, -631, -248, -523, -822, -1071, 70, -8, 54, -314, -515, 92, -146, -274, -493, 199, 62, 391, 158, -141, 71, -219, -203, -207, 152, 40, 329, 162, -29, 48, -149, 108, 127, 635, 1058, 883, 492, 372, 312, 317, 274, 241, 267, 722, 1256, 882, 625, 248, 8, -81, -60, -58, -138, -291, -600, -12, -2, -39, 147, 117, -107, -345, -513, 459, 76, 92, -272, 388, 262, 362, 516, 203, -409, -716, -831, -331, 185, 209, -117, -391, -298, 671, 292, 538, 257, 166, -38, -102, -319, -194, -283, -573, -262, -579, -219, -444, -235, 78, 11, -168, -101, -229, -263, -321, -123, 70, 50, -170, -599, -996, -588, -263, -516, -455, 394, 363, 229, -136, -538, 21, -183, -348, -201, -124, -368, -640, -879, -847, -209, -409, -494, -515, -127, -341, -541, -425, -510, -10, -252, -473, -291, 84, -69, -201, -676, -868, 103, -311, -132, -320, 5, -173, -188, -297, -628, 197, -57, 7, -11, 49, -160, 56, 558, 111, 33, -311, -440, -463, -1, -246, -307, 862, 453, 139, -170, -355, -232, 279, 966, 1642, 1478, 1463, 1123, 795, 525, 339, -197, -38, 1702, 1331, 1252, 950, 692, 504, 426, -108, -344, -861, -1172, 444, 354, 88, -46, -220, -53, -321, -494, 1113, 744, 364, 198, -34, -75, 457, 955, 1177, 1214, 1427, 1457, 1345, 917, 539, -69, 199, 897, 1140, 1343, 1183, 977, 742, 522, 122, 44, -269, 27, -155, -562, -307, -590, -773, 154, 42, -160, 252, -129, -305, -471, -733, -371, 135, 185, -82, -416, -722, -913, -504, -743, -880, 149, 214, -84, -329, -680, -835, -426, -661, -81, -128, -380, -735, -998, -337, 17, -182, -467, -697, -84, -290, -510, -592, 13, 440, 154, -38, -279, 70, -61, -246, -727, -1047, -80, -381, -535, -704, 178, -2, -146, -670, -938, 482, 138, 63, 65, -11, 15, 772, 443, 142, -20, -209, -126, -161, -32, -249, 95, 552, 124, 30, -343, 82, -86, 148, 751, 1515, 1105, 867, 606, 474, 448, 399, -163, -257, 899, 1097, 906, 751, 502, 390, 294, -51, -258, -447, -806, -368, 763, 464, 364, 183, -166, -374, -367, 87, 35, 399, 418, 856, 833, -205, -310, 588, 778, 785, 1065, 1118, 1245, 1157, -173, -312, 107, 345, 400, 790, 870, 1113, 1001, -7, -120, -387, -410, -614, -943, -226, -384, -491, -203, -288, -51, -331, -90, -178, -408, -573, -338, 56, -29, -273, -627, -1041, -798, -247, -467, 148, 66, -2, -205, -205, -575, -349, -57, -352, -58, -45, -225, -471, -924, -497, 77, -32, 44, -135, -277, -491, -497, -502, -424, -202, -137, 77, 96, 26, -179, -469, -1008, -1260, 262, -35, -132, -259, -66, -232, -447, -533, -789, -191, -100, -267, 364 }; /* * 1st stage codebook; 2nd split: isf9 to isf15 */ const Word16 D_ROM_dico2_isf[SIZE_BK2 * 7] = { 1357, 1313, 1136, 784, 438, 181, 145, 636, 648, 667, 568, 442, 217, 362, 427, 440, 674, 524, 332, 117, -417, 121, 295, 468, 465, 230, 44, -221, -147, -240, 149, 80, 390, 278, 106, -418, -556, 552, 511, 235, 144, -95, 43, 193, 274, 150, 67, 34, -273, -43, -126, 171, 416, 282, 63, -354, -372, -86, -344, -108, -94, -182, -89, -600, -840, -200, 465, 258, -11, -253, -48, 329, 97, -290, -543, -795, -354, -570, -117, 187, 10, -133, -416, -76, -618, -129, -247, -371, 45, -76, 277, -1022, -1079, 126, 474, 254, 127, 52, -281, 76, -167, -361, -283, -551, -283, -119, -52, -1, 134, -32, -204, -415, 1064, 827, 637, 684, 464, 209, 12, 482, 416, 449, 371, 335, 294, 194, 719, 576, 365, 135, 113, 91, -199, 298, 176, 493, 366, 194, 163, 36, -35, -236, -259, -36, -4, 99, 152, -98, -306, -27, 228, 90, 111, -86, 91, 13, -211, -258, -106, 86, -64, 73, -35, -57, -31, 162, 35, -192, -109, -335, -629, -66, -61, -128, 322, -495, -669, -728, 193, 31, -220, 122, 324, 95, -89, -91, -409, -710, -154, 0, -234, 92, 33, -343, -609, -220, -343, -408, -476, -655, -153, 82, 222, -490, -745, -255, 49, -48, 135, -127, 119, -67, -328, -390, -272, -545, -56, -57, -130, -10, -7, -164, -47, -22, 984, 1064, 961, 568, 210, -27, 16, 811, 691, 754, 514, 224, -35, 166, 662, 704, 618, 386, 57, -211, -257, 510, 359, 418, 393, 91, -144, -18, -193, -31, -27, 223, 89, -143, 24, -112, -98, 471, 319, 185, 3, 175, 252, 146, -47, 272, 48, -211, -234, 146, 69, 203, 364, 68, -52, 51, -259, -478, -697, -349, -758, -501, 63, -501, -769, -289, 79, -311, -497, -106, 251, 53, -235, -469, -895, -884, 145, -416, -551, 140, -133, -523, -775, 44, -326, -423, -713, -497, -86, -431, 99, -757, -772, -160, -76, -46, -32, 379, 85, -35, -200, -401, -663, -1040, -247, -180, -330, -92, -376, 27, -183, -110, 1279, 1086, 781, 502, 324, 164, 157, 682, 466, 449, 277, 146, 28, 409, 635, 472, 390, 107, -232, -538, -139, 196, 396, 332, 213, 209, -29, -81, 150, -95, -312, 76, -77, -320, -50, 46, 9, 47, 175, 139, 30, 384, 218, 206, -24, -250, -96, -276, -183, 26, 119, 38, 14, -4, -133, -52, -477, -614, -987, -715, -631, -813, 200, -744, -1009, -1065, -745, -631, -171, 18, -137, -251, -483, -613, -980, -1203, 12, -605, -767, -562, -686, -1088, -515, 58, -202, -428, -782, -1072, -96, -234, -179, -480, -709, -1070, -897, -131, -92, 321, -145, -193, -512, -729, -572, -765, -210, -331, -585, -525, -631, -281, -208, -303, 1165, 1104, 939, 828, 716, 426, 155, 6, -109, 820, 778, 415, 113, -27, 381, 339, 314, 265, 121, -9, -474, -373, 47, 584, 442, 99, -231, -113, -496, -38, -285, 262, 305, 170, 4, -587, -556, 69, 66, 471, 354, 13, -138, 70, -18, 106, 67, 167, -302, -445, -141, 185, 191, 151, 83, -133, -257, -521, -720, -198, 134, -46, -182, -819, -1168, -777, 512, 359, 95, -113, 137, -2, -74, -138, -401, -114, -371, -242, -466, 204, 223, -31, -212, -192, -532, -637, -466, -686, 256, 277, -139, -1141, -1244, -381, -75, -54, 14, 88, -311, 115, -143, -499, -343, 124, -416, -616, -147, -135, 43, -4, 121, -369, 835, 783, 641, 390, 355, 350, 64, 72, 194, 443, 467, 436, 219, 372, 464, 369, 192, 4, -156, -72, -226, 57, 206, 303, 205, 188, 101, 265, -40, -205, -488, -184, 276, 64, -26, -217, -433, -297, 137, 328, 308, -289, 378, 81, -308, -465, 57, -37, 227, -100, 24, -36, -151, 199, 8, 143, -426, -697, -1059, -133, 388, 161, 321, -644, -1023, -1271, 39, 66, -123, 70, 372, 177, -173, -556, -553, -304, -189, -117, -369, -425, -122, -462, -152, -73, -649, -850, -1189, -767, 497, 360, 222, -798, -1139, -1455, -190, 430, 234, 179, 42, -94, -405, -692, 38, -202, -246, -169, -366, -290, -88, -64, 32, -292, 1010, 923, 938, 710, 465, 230, 342, 217, 300, 1054, 675, 68, -458, -179, 78, 453, 316, 18, -237, -496, -243, 167, 21, 424, 215, -91, -303, -170, -290, -81, -70, -67, 40, 54, -59, -353, -427, -90, 53, 94, 9, 54, -28, 318, 283, 15, -240, -58, 79, -75, -121, 229, 35, 58, 6, -133, -351, -514, -744, -834, -705, -137, 164, -1124, -1388, -1055, -230, -73, 40, 36, -163, -233, -532, -785, -1170, -697, 96, -788, -959, -246, -430, -624, -165, -8, -856, -540, -630, -907, -337, -70, 76, -937, -1042, -659, -733, -208, 199, -26, -523, 78, -98, -501, -869, -890, -81, -624, -703, -45, -348, -25, 87, -186, 1005, 823, 546, 249, 90, -22, 207, 298, 397, 381, 319, 200, 62, 303, 473, 379, 133, -247, -632, -441, 75, 284, 208, 391, 115, -25, 44, 95, -72, 79, -95, -63, -129, -293, 203, -164, -349, 115, 122, 69, -1, 378, 348, 170, 99, 58, -179, -302, 188, -190, -2, 150, 23, -51, -11, 216, -615, -863, -1090, -1427, -802, -48, -6, -961, -1276, -1548, -727, -58, 56, 223, -124, -255, -561, -988, -1277, -148, -82, -480, -660, -891, -1191, -1339, -325, 20, -621, -917, -1296, -1350, 264, 289, 50, -844, -1022, -1345, -1329, -293, 46, 278, -260, -468, -829, -1176, -533, -560, -78, -215, -484, -822, -1233, -791, 15, -138, 1301, 1317, 1262, 1048, 716, 357, -64, 578, 824, 925, 802, 630, 362, 102, 470, 925, 767, 514, 327, 190, -112, 225, 492, 495, 437, 598, 384, -45, 43, 82, -42, 175, 519, 342, -64, -304, -154, 159, 576, 403, 221, 327, 214, 244, 122, -62, 312, 92, -160, 218, 208, 310, 268, 306, 323, -199, -285, -269, -79, -124, -143, -153, 236, -205, -384, -426, 344, 59, -185, -184, -272, 247, 126, -210, -518, -468, 78, -99, -120, 502, 160, -280, -557, 304, -423, -17, -283, -443, 215, 212, -140, -564, -684, -228, 510, 361, 130, 323, -428, 335, 98, -65, 36, -215, -246, -362, 51, 364, -16, -234, 150, -165, 914, 883, 751, 653, 676, 464, -153, 631, 545, 535, 720, 596, 360, -81, 783, 712, 512, 439, 341, 251, -391, 497, 417, 249, 372, 295, 173, -193, 128, -110, -385, 93, 39, 173, -231, 216, -59, -253, 462, 389, 154, 69, 455, 270, -4, -337, -49, 233, -322, 307, 143, 53, 218, 128, 236, -156, -37, -186, -240, -411, -110, 9, 399, -140, -365, -628, 258, 380, 214, 277, 131, 454, 177, -285, -520, 108, -214, 77, -141, 201, -123, -490, -131, 60, -14, -194, -521, -741, 273, 362, -33, -362, -566, -287, -228, 161, 237, 317, -269, 195, -75, -375, -204, 11, 77, -128, -264, -156, -223, -475, 265, 27, 1238, 1147, 916, 689, 432, 210, -280, 800, 664, 879, 726, 411, 160, -164, 454, 686, 536, 275, 147, 46, 111, 303, 486, 512, 355, 241, 181, -69, 79, 92, 29, 147, 233, 52, 17, -171, 289, 131, 439, 271, 3, -10, 413, 241, 144, 174, 155, -2, 14, 58, 217, 247, 219, 149, 175, -18, 228, -8, -240, -206, -513, -191, 202, -96, -272, -454, 33, -300, -575, 46, -10, -108, -246, -347, -770, -535, 9, -326, -430, -61, -321, -704, -299, 201, -1, -280, -603, -419, -185, 18, -36, -516, -522, -379, -291, -181, -97, 27, -159, -313, -525, -224, -510, -831, -197, -292, -459, -59, -310, -562, -143, -351, 1066, 912, 631, 389, 207, 86, -224, 596, 512, 596, 505, 314, 122, -48, 787, 861, 441, -93, -303, 33, -190, 257, 469, 337, 51, 15, 298, -93, 295, 73, -119, 25, 36, 23, 108, -28, -3, -32, 114, 21, 185, 107, 482, 305, 15, -279, -319, 52, 96, 226, 46, 115, 72, -136, 133, -125, 18, -207, -559, -590, -503, -482, 321, -571, -789, -951, -172, -441, -538, 113, 181, 14, -310, -641, -1001, -202, 159, -136, -393, -433, -513, -911, -144, -22, 72, -265, -706, -954, -159, 53, 332, -338, -591, -852, -383, -395, 56, 44, 43, -158, -464, -897, -631, -157, -294, -161, -128, -328, -573, -483, -125, 11, 1017, 906, 1051, 1005, 679, 341, -102, 359, 334, 1567, 1314, 723, 105, 10, -65, 726, 529, 301, 220, 43, -273, -510, 436, 719, 566, 358, 179, 114, -560, 298, 133, -120, 342, 225, 14, -899, -101, 217, 617, 400, 146, -58, -41, 352, 82, -196, 39, 121, -167, -212, 59, 447, 284, 423, 250, -169, -371, -484, -596, 30, -41, 249, 22, -372, -650, -794, 477, 445, 216, -79, -352, 275, 17, -443, -929, 92, 19, -699, -696, 431, 264, -49, -310, 182, -978, -217, -430, -400, 101, 261, 72, -929, -889, -357, -13, 463, 378, 236, -826, 56, 30, -299, -360, -128, -51, -878, -299, -111, 75, 65, 36, 3, 817, 368, -25, 354, 697, 591, -173, 309, 212, 222, 751, 484, 140, -56, 593, 379, 70, -8, 258, 180, 110, 165, -46, 255, 297, 219, 273, 105, 160, -70, -358, -181, 379, 330, 319, -238, -369, -198, 740, 580, 319, -143, 201, 109, -202, -456, 328, 276, -141, 203, 170, 111, 42, 207, 360, 188, -345, -399, -513, -233, 650, 422, 81, -635, -961, -1220, 463, 539, 204, 209, 202, -25, -194, -498, -787, 193, -143, -449, -538, 195, -106, -331, 68, 62, -228, -477, -840, -576, 317, 128, 283, -671, -937, -807, -114, 391, 335, -62, 246, 2, -314, -679, -303, 180, -88, -107, -272, 90, -198, -28, 290, -112, 885, 1149, 1021, 712, 496, 281, -83, 269, 492, 787, 643, 347, 70, 124, 336, 636, 499, 92, -229, -179, 191, 26, 402, 564, 340, 149, -11, 135, -440, 561, 470, 204, -72, -186, 140, -720, 14, 355, 229, 68, -133, 465, 110, 310, 103, 12, 106, 29, 158, -178, 113, 161, 142, 121, 115, 27, -651, -414, -645, -152, -164, -13, -429, -639, -944, -681, -104, -81, 52, -189, -663, -164, -316, -683, -954, -205, -83, -609, -669, -172, -517, -694, 283, -80, -646, -152, -383, -678, -246, -40, -143, -747, -796, -745, -390, -98, 43, 275, -599, -199, -398, -433, -436, -538, 31, -1107, -568, -376, -265, -126, -21, 1, 847, 573, 308, 392, 305, 101, 55, 273, 293, 201, 267, 346, 201, 123, 727, 480, 226, 2, -65, -138, 164, 273, 208, 173, 292, 12, 253, 174, 340, 207, 180, 88, 116, 46, 475, -460, -166, -30, 13, 110, 173, 396, 137, 88, 43, -137, -94, 34, 284, 96, -14, 226, 40, 63, 70, 130, -467, -735, -1012, -1174, -307, 305, -67, -612, -920, -1146, -567, -8, 92, -25, -182, -271, -492, -754, -857, 287, -75, -494, -787, -689, -683, -709, 137, -326, -288, -550, -903, -1105, 334, 321, -62, -354, -653, -834, -445, 1, 377, -152, -162, -306, -608, -937, -297, 247, -192, -234, -477, -244, -488, -266, 342, -332 }; /* * 2nd stage codebook; 1st split: isf2_0 to isf2_2 */ const Word16 D_ROM_dico21_isf[SIZE_BK21 * 3] = { 329, 409, 249, -33, 505, 160, -29, -14, 582, -262, 127, 354, 145, 237, 175, -152, 245, 122, 27, 42, 340, -84, -93, 311, 285, 222, -156, 47, -43, -504, 234, 121, 385, 104, -317, 45, 176, 195, 8, 104, -59, -94, 177, 53, 192, -34, -127, 152, 570, 277, -34, -67, -329, -639, -157, -272, 462, -177, -462, 198, 322, 179, 115, -386, 171, 19, 19, -12, 195, -120, -252, 201, 304, 36, -336, -128, -221, -380, 171, -185, 296, -242, -312, 23, 198, 39, 16, -3, -177, -111, 111, -93, 76, -92, -223, 4, 177, 406, -44, -168, 380, -149, -4, 273, 331, -420, 513, 277, 21, 247, 47, -58, 131, -2, -3, 134, 180, -145, 40, 175, 189, 74, -145, -27, -45, -325, 370, -114, -21, -83, -415, -173, 77, 95, -51, -40, -30, -67, 71, 88, 86, -35, -98, 14, 69, 197, -334, -196, 79, -231, -348, -137, 218, -352, -89, -85, 47, 201, -130, -165, 37, -15, -43, 3, 86, -161, -108, 79, 83, 21, -237, -81, -149, -238, 150, -186, -251, -186, -249, -162, -19, 66, -139, -26, -50, -181, 24, 11, 0, -130, -105, -98 }; /* * 2nd stage codebook; 2nd split: isf2_3 to isf2_5 */ const Word16 D_ROM_dico22_isf[SIZE_BK22 * 3] = { -127, 310, 42, -242, 197, 5, -151, 84, -17, -214, 127, -149, -247, -131, 159, -268, -267, -95, -217, 1, -79, -271, -80, -185, -45, 436, 159, 165, 199, 391, -33, 81, 187, -66, -42, 355, -298, -57, 343, -108, -537, 226, -144, -23, 193, 176, -402, 87, 53, 296, 25, -84, 253, -104, -58, 105, -126, -169, 174, -314, -48, 44, -294, -164, -417, -242, -139, 3, -194, -155, -207, -211, 119, 322, 213, 333, 50, 380, 237, 247, -2, 466, -16, 201, 238, -255, -107, 67, -440, -149, 122, -88, -139, 88, -247, -73, -41, 231, 167, -62, 155, 16, -65, 16, 77, -68, -2, -63, -151, -300, 160, -18, -333, 54, -56, -94, 5, 2, -190, 14, 92, 148, 209, 108, 9, 272, 108, 35, 110, 142, -85, 145, 47, -157, 279, 3, -320, 246, 43, -72, 68, 86, -217, 135, 36, 140, 79, 56, 175, -49, 26, 45, 3, 73, 55, -101, 109, -183, -242, -4, -283, -242, 48, -68, -48, -6, -153, -122, 161, 196, 96, 232, 80, 190, 165, 97, 11, 258, -31, 71, 267, -77, -91, 311, -209, 87, 152, -14, -22, 150, -149, 9, -324, 557, 187, -384, 307, 46, -251, 27, 77, -365, 77, -52, -482, -84, 160, -424, -515, -64, -294, -120, -4, -476, -116, -109, -97, 318, 365, 106, 627, 445, -190, 120, 287, -146, 65, 619, -427, 242, 363, -361, -371, 432, -347, 102, 168, -629, 195, -14, -65, 476, -47, -297, 320, -168, -55, 356, -264, -391, 82, -286, -51, -31, -556, -178, -399, -586, -205, -49, -360, -343, -238, -337, 220, 457, 58, 561, 467, 259, 340, 270, -168, 450, 77, -280, 60, 167, -413, 133, -252, -492, 216, 157, -290, 282, 0, -495, -226, 293, 183, -157, 135, 122, -158, -59, 39, -133, -118, -97, -332, -309, 113, -160, -425, -6, -149, -211, 24, -80, -277, -90, -11, 125, 338, 130, -71, 465, 5, -45, 184, 237, -95, 253, -139, -197, 297, -19, -300, 511, -63, -152, 139, 250, -289, 336, 124, 339, -150, 34, 176, -208, 171, 166, -116, 94, 38, -229, 75, -65, -339, -78, -205, -385, 0, -30, -163, -56, -110, -242, 321, 244, 194, 505, 238, -1, 317, 116, 65, 309, 88, -74, 452, -51, -50, 334, -217, -290, 211, 41, -152, 238, -55, -260 }; /* * 2nd stage codebook; 3rd split: isf2_6 to isf2_8 */ const Word16 D_ROM_dico23_isf[SIZE_BK23 * 3] = { -10, 151, 359, 136, 298, 223, 255, -104, 290, 423, 6, 183, -270, -269, -98, -52, -82, 13, -82, -274, -97, 90, -246, -72, -299, -70, 421, -88, 365, 430, 187, -318, 381, 380, 37, 488, -373, -316, 79, -308, -101, 5, -135, -451, 8, 72, -421, -154, 180, 170, -121, 62, 177, -40, 326, 80, -105, 248, 263, -5, -168, -181, -221, -2, -23, -158, -14, -149, -121, 119, -91, -147, 119, 332, -153, 49, 303, 34, 442, -55, -69, 217, 454, 58, -359, -187, -375, -42, 50, -274, -8, -267, -249, 85, -86, -346, -77, -40, 345, 89, 134, 219, 156, -80, 160, 108, 40, 116, -158, -206, 29, 5, -32, 175, -65, -158, 146, 55, -78, 73, -114, -222, 353, -47, 81, 211, 49, -151, 268, 105, 4, 302, -263, -132, 183, -151, -28, 201, -177, -307, 166, 101, -221, 130, 74, 58, -98, 32, 44, 13, 194, 30, -142, 170, 96, 8, -136, -119, -91, -65, 8, -55, 3, -188, 12, 45, -63, -49, 149, -21, -19, 24, 144, 95, 254, -22, 60, 161, 196, 96, -158, -61, 48, -70, 33, 82, -23, -321, 58, 155, -147, 5, -364, 328, 77, -21, 453, 173, -108, 82, 630, 367, 263, 208, -300, -62, -176, -205, 143, -158, -169, -410, -264, 257, -269, -100, -636, 289, -2, -292, 627, 173, -382, -363, 387, 248, 524, 447, -521, -111, -107, -395, 118, -274, -343, -680, -125, -172, -447, -663, 75, 148, -367, -79, 263, -94, 249, 148, -286, 380, 271, -162, -142, -4, -186, -57, 111, -125, -35, -108, -254, 100, 29, -242, -80, 303, -264, -78, 464, -57, 248, -22, -494, 661, 662, 44, -193, -40, -330, -178, 145, -337, -90, -199, -400, -40, -23, -498, -192, 114, 315, -41, 244, 190, 88, -97, 485, 241, 80, 212, -246, 40, 87, -156, 147, 134, -2, -334, 239, 308, -203, 110, -459, 251, 422, -218, 310, 228, -86, -346, 654, 184, 175, 425, -481, -63, 169, -349, 117, 188, -125, -560, 310, 158, -416, 94, 46, 171, -192, -63, 157, 14, 256, -35, -271, 322, 123, 53, -214, 4, -76, -156, 86, -18, 128, -197, -232, 265, -90, -98, -308, 332, -145, -131, 308, 58, 509, 59, -339, 562, 196, -14, -378, 100, -47, -234, 202, 1, 104, -270, -493, 319, -210, -325 }; /* * 2nd stage codebook; 4th split: isf2_9 to isf2_11 */ const Word16 D_ROM_dico24_isf[SIZE_BK24 * 3] = { -79, -89, -4, -171, 77, -211, 160, -193, 98, 120, -103, 323, 32, -22, -129, 72, 78, -268, 182, -76, -66, 309, 99, -145, -229, -157, -84, -383, 98, -71, -90, -352, 12, -284, -178, 178, -65, -125, -166, -87, -175, -351, 42, -198, -48, 154, -140, -243, -77, 18, 108, -39, 355, 91, 87, 8, 155, -4, 158, 239, 128, 95, -54, 7, 246, -124, 258, 15, 89, 206, 216, 98, -201, 9, 18, -312, 233, 204, -39, -174, 155, -144, -9, 284, -57, 70, -69, -157, 187, 18, 54, -30, 23, 24, 135, 55 }; /* * 2nd stage codebook; 5th split: isf2_12 to isf2_15 */ const Word16 D_ROM_dico25_isf[SIZE_BK25 * 4] = { 169, 142, -119, 115, 206, -20, 94, 226, -106, 313, -21, 16, -62, 161, 71, 255, -89, 101, -185, 125, 72, -30, -201, 344, -258, 33, -8, 81, -104, -154, 72, 296, 144, -68, -268, -25, 81, -78, -87, 106, 22, 155, -186, -119, -46, -28, 27, 91, -114, -37, -175, -33, -94, -222, -189, 122, -132, -119, -191, -270, -172, -173, 18, -43, 279, 135, -42, -128, 187, -86, 229, -138, 159, 240, 140, 46, 69, 25, 227, 77, 21, 115, 13, 8, 68, -248, 126, 81, -150, 137, 207, -9, -154, -133, 289, 67, 143, -37, -86, -326, 180, -32, 19, -23, 26, 168, 116, -233, -32, -26, 118, -78, 3, -8, -45, -115, 57, -215, -54, -83, -209, 112, -22, -167, -91, -151, 168, -262 }; /* * isf codebooks: two-stage VQ with split-by-3 in 2nd stage * 1st stage is kept the same as the 46 bit quantizer * * codebook vector dimension number of vectors * ~~~~~~~~ ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ * 1_1 9 256 * 1_2 7 256 * 2_1 5 128 * 2_2 4 128 * 2_3 7 64 */ const Word16 D_ROM_dico21_isf_36b[SIZE_BK21_36b * 5] = { -52, -96, 212, 315, -73, 82, -204, 363, 136, -197, -126, -331, 183, 218, 143, -49, -41, 557, 230, 72, 2, -73, 163, 377, 221, 133, 111, 278, 215, -110, -102, -20, 284, 113, 273, 84, 319, 290, 18, 85, -25, -5, 125, 132, -204, -38, -5, 286, -9, -356, -140, -256, 92, 117, -189, -144, 191, 313, 51, -98, 167, -10, 44, 247, 36, 381, 197, 238, 74, 6, 38, -408, 29, -3, -85, 92, 266, 157, -25, -200, 161, -121, 70, 84, -140, -16, -86, 112, -94, -189, -269, -270, 351, 107, -24, -68, -67, 492, -103, -155, -53, -131, 62, 122, 10, 135, 84, 283, -55, -120, -12, -219, 331, -81, 167, 220, -136, 147, -172, -42, 140, -95, -109, -88, -194, 0, -2, -4, -33, -381, -66, -217, 152, -186, -402, 244, 108, 156, -140, -395, 113, -136, -196, 110, -24, 214, 118, 11, -64, -131, -110, -286, -6, -332, 16, 94, 97, 79, -291, -205, -5, -39, -20, 252, -96, 76, 174, 101, 163, 61, -69, -239, -55, 399, 6, -115, 319, 164, 275, 196, -15, 36, -47, 331, 121, 226, 209, 271, 325, 184, 13, -80, -218, 471, 353, 288, 378, 16, -51, 251, 174, 116, 52, 149, -279, 235, 276, 39, 120, -48, 0, -108, -108, 241, -339, -93, 534, 45, 33, -87, 194, 149, -71, 405, -44, 409, 370, 81, -186, -154, 25, -102, -448, 124, -173, 22, 408, -110, -310, -214, -26, 23, -83, 114, 14, -110, 164, 52, 223, -82, 37, -25, -263, 306, -15, -466, 415, 292, 165, -18, 29, -19, -171, 155, 182, 179, 144, -27, 231, 258, -103, -247, -396, 238, 113, 375, -154, -109, -4, 156, 98, 85, -292, -5, -124, 116, 139, -116, -98, -294, -14, -83, -278, -117, -378, 106, 33, -106, -344, -484, 119, 17, -412, 138, 166, 384, 101, -204, 88, -156, -121, -284, -300, -1, -166, 280, 33, -152, -313, -81, -37, 22, 229, 153, 37, -60, -83, 236, -8, -41, -169, -228, 126, -20, 363, -235, 17, 364, -156, 156, -25, -30, 72, 144, 156, 153, -26, 256, 97, 144, -21, -37, 48, -65, 250, 63, 77, 273, -128, 124, -129, -26, 40, 9, -115, -6, 82, 38, -90, -182, -336, -13, 28, 158, 91, -30, 241, 137, -170, -17, 146, 14, -11, 33, 61, 192, 197, 54, -84, 85, 23, -200, -78, -29, 140, 122, 237, 106, -341, 136, -57, -142, -85, -16, -74, -59, -90, -8, -187, -20, -211, -267, 216, -179, -110, -50, -7, 220, -267, -70, -57, -42, -17, -15, 71, 32, 21, 63, -137, 33, -137, -175, 104, -68, 97, -67, -43, 133, -301, 221, -116, -200, -81, -92, -272, -64, -41, -54, -244, -220, -287, -242, -50, -87, -89, -245, 236, 102, -166, -295, 66, 24, -162, -71, 95, 66, 136, -90, -220, -36, -98, -161, -222, -188, 29, -18, 18, -19, -415, 9, 49, 61, 100, 39, -56, -111, 82, 135, -31, 52, -90, -153, -93, 189, 182, -214, 295, 119, -74, 284, 2, 137, 37, 47, 182, 92, 117, 184, -53, 373, -21, -14, -35, 136, 391, 146, 129, -164, -28, 333, 92, 80, -84, 100, -134, -8, 217, -32, 3, -47, -151, 251, -215, 142, 92, -224, 310, -172, -275, 98, 159, 155, -177, 112, 53, 205, 27, 8, -240, 192, 169, 120, -319, -201, 106, 11, 36, -86, -237, 455, -109, -154, -163, 174, -55, -38, 32, -101, -78, -59, -205, -321, -97, 69, 79, -310, 44, 18, -185, 34, -115, -20, -148, -39, 203, -29, 154, -30, -158, 166, -45, -131, -317, -24, 363, -165, -205, -112, -222, 265, -32, -44, -150, 54, -193, -6, -38, -255, -169, -115, -266, 87, -189, -36, -169, -60, -87, -266, -436, -170, -68, -81, -278, 24, 38, -23, -19, -155, -256, 141, -61, -226, -565, -175, 71, 9, -29, -237, -515, 263 }; const Word16 D_ROM_dico22_isf_36b[SIZE_BK22_36b * 4] = { -298, -6, 95, 31, -213, -87, -122, 261, 4, -49, 208, 14, -129, -110, 30, 118, -214, 258, 110, -235, -41, -18, -126, 120, 103, 65, 127, -37, 126, -36, -24, 25, -138, -67, -278, -186, -164, -194, -201, 78, -211, -87, -51, -221, -174, -79, -94, -39, 23, -6, -157, -240, 22, -110, -153, -68, 148, -5, -2, -149, -1, -135, -39, -179, 68, 360, -117, -15, 137, 47, -278, 146, 136, 260, 135, 65, 61, 116, -45, 97, 231, 379, 87, -120, 338, 177, -272, 3, 266, 156, 28, -69, 260, 84, -85, 86, -266, 154, -256, -182, -17, -65, -304, -6, -40, 175, -151, -180, -27, 27, -87, -63, 121, 114, -166, -469, 159, -66, -323, -231, 214, 152, -141, -212, 137, 36, -184, -51, -282, -237, 40, 10, -48, -235, -37, 251, -54, -323, 136, 29, -88, -174, 213, 198, -390, 99, -63, -375, 107, -169, -164, 424, 69, -111, 141, -167, 74, -129, 65, 144, -353, -207, -205, -109, -160, -386, -355, 98, -176, -493, -20, -143, -252, -432, -2, 216, -90, -174, -168, -411, 13, -284, -229, -160, -87, -279, 34, -251, -75, -263, -58, -42, 420, 53, -211, -358, 384, -35, -374, 396, 68, -228, 323, -2, 167, -307, 192, 194, 459, 329, -5, -332, 375, 79, -7, 313, 282, -124, 200, -92, 271, -162, -70, 180, -157, -298, -514, -309, 58, -163, -546, 18, 124, -364, 167, -238, 83, -411, -117, 96, 140, -112, -388, -624, 259, -133, -317, 41, 163, -130, -64, -334, 226, -165, -124, -110, -466, -61, 6, 229, -153, 205, -145, 242, -159, 48, 195, 148, -58, 28, 31, 279, -303, 185, 279, -4, -61, 197, 59, 86, -114, 123, 168, -52, 35, 36, 100, 126, -407, 102, -77, -40, -338, -1, -342, 156, -179, 105, -34, -97, -185, 84, -35, 108, -133, 107, -91, -357, -180, 54, -229, 24, -44, 47, 47, -182, -66, 13, 45, 4, -339, 251, 64, 226, -42, 101, -350, 275, -99, 398, 142, 121, 111, 12, -102, 260, 0, 505, 260, -94, 161, 285, -96, 224, -4, 206, 314, 33, 167, 139, 88, 204, -235, 316, -60, -25, -8, -150, -312, 201, -36, 292, 61, -104, -40, 174, -162, 42, -21, 402, -29, -351, 21, 152, -360, -93, 57, 191, 212, -196, 76, 158, -21, -69, -328, -185, 331, 119, -53, 285, 56, 337, -107, -24, 405, 29, -18, 137, 272, 277, -255, 22, 173, -191, 295, 322, 325, 302, 21, -27, 332, -178, 119, 13, 271, 129, -455, -180, 116, -191, -227, 62, -148, 524, -176, -287, 282, -157, -243, 13, 199, 430, -59, -49, 115, -365, 72, -172, -137, 93, -138, -126, 141, -84, 5, -124, 38, -20, -258, 311, 601, 213, 94, 130, -61, 502, -1, -157, 485, 313, 146, -74, 158, 345, 276, 135, 280, -57, 490, 252, 99, 43, 267, -74, 429, 105, 278, -23, 119, 94, -542, 488, 257, -115, -84, -244, -438, 478, -113, -545, 387, 101, -95, -306, 111, 498, 95, 166, 22, -301, 420, -15, -58, -78, 270, 29, 122, -282, 160, -240, 50, -38 }; const Word16 D_ROM_dico23_isf_36b[SIZE_BK23_36b * 7] = { 81, -18, 68, -27, -122, -280, -4, 45, -177, 209, -30, -136, -74, 131, -44, 101, -75, -88, -48, -137, -54, -245, -28, 63, -18, -112, -103, 58, -79, -6, 220, -65, 114, -35, -50, 109, -65, 143, -114, 129, 76, 125, 166, 90, -61, -242, 186, -74, -43, -46, -92, 49, -227, 24, -155, 39, 67, 85, 99, -42, 53, -184, -281, 142, -122, 0, 21, -142, -15, -17, 223, 92, -21, -48, -82, -14, -167, 51, -37, -243, -30, -90, 18, -56, 54, 105, 74, 86, 69, 13, -101, 196, 72, -89, 43, 65, 19, 39, 121, 34, 131, -82, 25, 213, -156, 101, -102, -136, -21, 57, 214, 22, 36, -124, 205, 204, 58, -156, -83, 83, -117, 137, 137, 85, 116, 44, -92, -148, -68, 11, -102, -197, -220, -76, -185, -58, 132, -26, -183, 85, -7, -31, -2, 23, 205, -151, 10, -27, -37, -5, -18, 292, 131, 1, 117, -168, 9, -93, 80, -59, -125, -182, -244, 98, -24, 135, -22, 94, 221, 97, 106, 42, 43, -160, 83, 25, -64, -21, 6, 14, -15, 154, 126, 15, -140, 150, -10, -207, -114, 79, -63, -211, -70, -28, -217, 165, 46, 38, -22, 281, 132, -62, 109, 112, 54, -112, -93, 208, 27, 296, 115, 10, -147, 41, 216, 42, -276, 50, -115, -254, 167, 117, -2, 61, 17, 144, 34, -72, -186, -150, 272, -29, -66, -89, -95, -149, 129, 251, 122, 0, -50, -234, -91, 36, 26, -105, -102, -88, -121, -236, -7, -11, -204, 109, 5, -191, 105, -15, 163, -80, 32, -24, -209, 41, 294, 70, -106, -94, -204, -118, 120, -50, -37, -82, -241, 46, -131, -29, 150, -55, 33, 155, 120, -89, -8, 7, 62, 213, 82, 61, 18, -161, 144, 152, 30, 131, 65, -87, -255, -17, -107, -8, 85, -64, 51, -162, 223, -53, -134, 261, 69, -56, 218, 72, -111, 2, 155, -113, -87, 49, 85, -28, -163, 42, -1, -196, 7, 39, -245, 14, -137, -79, 11, -160, 202, -293, -94, 33, 208, 100, 56, -44, 326, -78, -41, 232, 13, -142, 227, 80, -16, -87, 201, 33, -133, 15, -183, -58, -192, -47, 184, -128, 133, 99, -205, 11, -155, 78, 52, 72, 141, -246, 26, 99, 151, 59, 115, -64, -79, -47, -16, -14, 6, 47, -43, -72, -178, -27, 162, 112, 43, -174, -175, 238, 186, 71, -54, -188, -76, -225, 233, 39, -39, -158, 122, 44, -26, 43, 84, 130, -93, -51, 22, 3, 92, -150, 136, -182, -57, 97, -131, 179, -78, 80, 91, -165, 90, -2, 148, 15, 130, 65, 175, 117, -138, 114, -137, 132, 3, -10, -186, 140, -4, -37, 254, -62, 92, -109 }; /* * isf codebooks: split-by-5 VQ * * codebook vector dimension number of vectors * ~~~~~~~~ ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ * 1 2 64 * 2 3 64 * 3 3 64 * 4 4 32 * 5 4 32 */ /* * 1st split: isf0 to isf1 */ const Word16 D_ROM_dico1_isf_noise[SIZE_BK_NOISE1 * 2] = { -269, -673, -222, -537, -233, -430, -138, -451, -212, -331, -192, -241, -87, -231, -191, -128, -70, -106, -164, -6, 74, -179, 27, -33, -102, 74, -162, 115, -94, 172, -6, 130, -143, 234, 14, 218, -65, 270, 88, 182, -124, 341, -44, 381, 38, 335, 117, 274, -112, 454, 74, 431, -5, 488, 175, 384, -83, 561, 122, 529, 21, 601, 229, 481, 231, 303, 226, 608, 300, 372, 210, 187, 306, 265, 328, 473, 382, 331, 371, 132, 139, 58, 365, 21, 250, -82, 443, 218, 483, 110, 426, 415, 579, 222, 518, 333, 573, 448, 455, 529, 685, 329, 332, 580, 595, 593, 468, 645, 762, 517, 326, 709, 485, 793, 130, 684, 671, 737, 354, 876, 88, 806, -65, 706, -35, 1016, 266, 1123 }; /* * 2nd split: isf2 to isf4 */ const Word16 D_ROM_dico2_isf_noise[SIZE_BK_NOISE2 * 3] = { -824, -884, -949, -805, -456, -418, -442, -438, -541, -217, -578, -793, -168, -444, -582, -287, -492, -274, -552, -297, -300, -163, -333, -358, -370, -232, -232, -175, -358, -159, -381, -21, -357, -184, -159, -162, -53, -191, -280, 18, -267, -215, -138, 61, -283, 71, -95, -294, 13, -156, -546, 0, -83, -79, 44, 97, -316, 178, -52, -213, 222, -261, -422, 237, -118, -44, 141, 145, -132, 363, 81, -287, 213, 65, 34, -107, 94, -5, 91, -29, 126, -355, 51, -41, -219, -76, 145, -63, 100, 244, -719, 44, 27, -572, -124, 155, -423, 133, 315, -917, 71, 224, -268, 318, 131, -93, -190, 420, -97, 122, 491, -79, 317, 355, 130, 100, 325, 86, -293, 210, 133, 258, 161, 176, -73, 465, 195, 300, 384, 348, 22, 221, 376, 183, 409, 377, 286, 202, 242, 213, 659, 257, 565, 248, 344, 408, -76, 405, 440, 509, 612, 385, 379, 536, 607, 216, -56, 582, 192, 100, 517, 567, -365, 448, 445, 728, 347, 10, 505, 357, 759, 636, 582, 658, 335, 517, 852, 378, 809, 572, -195, 878, 829, 529, 707, 987, 918, 726, 392, 1250, 997, 1063 }; /* * 3rd split: isf5 to isf7 */ const Word16 D_ROM_dico3_isf_noise[SIZE_BK_NOISE3 * 3] = { -805, -838, -774, -522, -627, -828, -477, -486, -603, -295, -481, -634, -366, -384, -393, -186, -414, -396, -237, -394, -106, -252, -202, -275, -61, -177, -442, -84, -198, -199, -179, -125, -31, -72, -47, -163, -298, -220, 215, -64, -168, 251, -133, 156, -59, -30, -2, 127, 54, 66, -61, -233, 21, 251, 209, -50, 32, 33, 194, 136, -117, -18, 475, 202, 46, 309, 256, 185, 53, 35, 200, 390, 200, 263, 242, -216, 302, 294, 128, 358, 0, 19, 431, 287, 224, 447, 280, 367, 165, 213, 397, 314, 319, 383, 379, 75, 277, 325, 462, 394, 505, 334, 251, 98, -213, 450, 153, 448, 565, 226, 76, 470, 383, 502, 635, 390, 278, 237, 135, 620, 342, 401, 649, 331, 551, 518, 130, 418, 592, 531, 306, 737, 729, 389, 580, 497, 557, 699, 296, 383, 874, 283, 624, 759, 126, 622, 476, 559, 595, 472, 382, 770, 616, 719, 613, 745, 540, 639, 928, 517, 826, 801, 684, 811, 604, 752, 786, 857, 933, 661, 350, 694, 450, 1061, 562, 911, 1051, 824, 813, 1104, 758, 1047, 882, 1140, 917, 889, 1039, 1246, 1426, 1483, 1666, 1876 }; /* * 4th split: isf8 to isf11 */ const Word16 D_ROM_dico4_isf_noise[SIZE_BK_NOISE4 * 4] = { -776, -854, -891, -920, -552, -610, -663, -741, -321, -370, -476, -565, 274, -160, -456, 201, 265, 67, -160, -306, -8, -210, 79, 272, 163, 236, 307, 308, 578, 317, 64, 298, -9, 197, 342, 620, 343, 232, 314, 622, 173, 149, 548, 527, 356, 370, 481, 376, 135, 444, 488, 556, 391, 471, 487, 653, 228, 424, 576, 835, 422, 372, 722, 682, 295, 673, 693, 635, 539, 596, 590, 449, 475, 618, 659, 818, 735, 517, 491, 673, 602, 346, 257, 877, 625, 635, 849, 720, 727, 818, 698, 595, 653, 481, 690, 1139, 814, 762, 704, 908, 507, 747, 898, 936, 848, 855, 924, 785, 646, 1037, 882, 795, 772, 845, 1024, 1151, 1133, 983, 818, 921, 940, 1068, 1252, 1302, 1588, 1767, 1718, 1513 }; /* * 5th split: isf12 to isf15 */ const Word16 D_ROM_dico5_isf_noise[SIZE_BK_NOISE5 * 4] = { -810, -879, -945, -254, 248, 184, 671, 128, 288, 703, 918, 99, 658, 558, 662, 219, 552, 585, 910, 208, 559, 804, 759, 119, 606, 774, 921, -139, 782, 761, 748, 208, 756, 708, 983, 56, 544, 864, 1010, 152, 737, 698, 987, 299, 771, 924, 879, 103, 536, 785, 961, 405, 667, 916, 801, 328, 738, 705, 773, 439, 823, 871, 992, 355, 640, 1004, 1052, 369, 724, 822, 949, 597, 415, 655, 729, 482, 1009, 896, 793, 363, 908, 803, 687, -25, 1016, 838, 1011, 189, 947, 1112, 942, 222, 914, 1049, 981, 527, 956, 987, 1011, -120, 781, 1049, 1121, 92, 1178, 1053, 884, 47, 1123, 1059, 1182, 118, 933, 972, 1277, 357, 1109, 918, 1101, 503, 1039, 1286, 1220, 317, 1351, 1207, 1010, 326 }; /* * Table of pitch and codebook gains * * g_pitch(Q14), g_code(Q11) * * pitch gain are ordered in table to reduce complexity * during quantization of gains. */ /* Number of quantization level is 64 */ const Word16 D_ROM_qua_gain6b[64 * 2] = { 1566, 1332, 1577, 3557, 3071, 6490, 4193, 10163, 4496, 2534, 5019, 4488, 5586, 15614, 5725, 1422, 6453, 580, 6724, 6831, 7657, 3527, 8072, 2099, 8232, 5319, 8827, 8775, 9740, 2868, 9856, 1465, 10087, 12488, 10241, 4453, 10859, 6618, 11321, 3587, 11417, 1800, 11643, 2428, 11718, 988, 12312, 5093, 12523, 8413, 12574, 26214, 12601, 3396, 13172, 1623, 13285, 2423, 13418, 6087, 13459, 12810, 13656, 3607, 14111, 4521, 14144, 1229, 14425, 1871, 14431, 7234, 14445, 2834, 14628, 10036, 14860, 17496, 15161, 3629, 15209, 5819, 15299, 2256, 15518, 4722, 15663, 1060, 15759, 7972, 15939, 11964, 16020, 2996, 16086, 1707, 16521, 4254, 16576, 6224, 16894, 2380, 16906, 681, 17213, 8406, 17610, 3418, 17895, 5269, 18168, 11748, 18230, 1575, 18607, 32767, 18728, 21684, 19137, 2543, 19422, 6577, 19446, 4097, 19450, 9056, 20371, 14885 }; /* Number of quantization level is 128 */ const Word16 D_ROM_qua_gain7b[128 * 2] = { 204, 441, 464, 1977, 869, 1077, 1072, 3062, 1281, 4759, 1647, 1539, 1845, 7020, 1853, 634, 1995, 2336, 2351, 15400, 2661, 1165, 2702, 3900, 2710, 10133, 3195, 1752, 3498, 2624, 3663, 849, 3984, 5697, 4214, 3399, 4415, 1304, 4695, 2056, 5376, 4558, 5386, 676, 5518, 23554, 5567, 7794, 5644, 3061, 5672, 1513, 5957, 2338, 6533, 1060, 6804, 5998, 6820, 1767, 6937, 3837, 7277, 414, 7305, 2665, 7466, 11304, 7942, 794, 8007, 1982, 8007, 1366, 8326, 3105, 8336, 4810, 8708, 7954, 8989, 2279, 9031, 1055, 9247, 3568, 9283, 1631, 9654, 6311, 9811, 2605, 10120, 683, 10143, 4179, 10245, 1946, 10335, 1218, 10468, 9960, 10651, 3000, 10951, 1530, 10969, 5290, 11203, 2305, 11325, 3562, 11771, 6754, 11839, 1849, 11941, 4495, 11954, 1298, 11975, 15223, 11977, 883, 11986, 2842, 12438, 2141, 12593, 3665, 12636, 8367, 12658, 1594, 12886, 2628, 12984, 4942, 13146, 1115, 13224, 524, 13341, 3163, 13399, 1923, 13549, 5961, 13606, 1401, 13655, 2399, 13782, 3909, 13868, 10923, 14226, 1723, 14232, 2939, 14278, 7528, 14439, 4598, 14451, 984, 14458, 2265, 14792, 1403, 14818, 3445, 14899, 5709, 15017, 15362, 15048, 1946, 15069, 2655, 15405, 9591, 15405, 4079, 15570, 7183, 15687, 2286, 15691, 1624, 15699, 3068, 15772, 5149, 15868, 1205, 15970, 696, 16249, 3584, 16338, 1917, 16424, 2560, 16483, 4438, 16529, 6410, 16620, 11966, 16839, 8780, 17030, 3050, 17033, 18325, 17092, 1568, 17123, 5197, 17351, 2113, 17374, 980, 17566, 26214, 17609, 3912, 17639, 32767, 18151, 7871, 18197, 2516, 18202, 5649, 18679, 3283, 18930, 1370, 19271, 13757, 19317, 4120, 19460, 1973, 19654, 10018, 19764, 6792, 19912, 5135, 20040, 2841, 21234, 19833 }; /* * 1/4 resolution interpolation filter (-3 dB at 0.856*fs/2) in Q14 */ const Word16 D_ROM_inter4_2[UP_SAMP * 2 * L_INTERPOL2] = { 0, 1, 2, 1, -2, -7, -10, -7, 4, 19, 28, 22, -2, -33, -55, -49, -10, 47, 91, 92, 38, -52, -133, -153, -88, 43, 175, 231, 165, -9, -209, -325, -275, -60, 226, 431, 424, 175, -213, -544, -619, -355, 153, 656, 871, 626, -16, -762, -1207, -1044, -249, 853, 1699, 1749, 780, -923, -2598, -3267, -2147, 968, 5531, 10359, 14031, 15401, 14031, 10359, 5531, 968, -2147, -3267, -2598, -923, 780, 1749, 1699, 853, -249, -1044, -1207, -762, -16, 626, 871, 656, 153, -355, -619, -544, -213, 175, 424, 431, 226, -60, -275, -325, -209, -9, 165, 231, 175, 43, -88, -153, -133, -52, 38, 92, 91, 47, -10, -49, -55, -33, -2, 22, 28, 19, 4, -7, -10, -7, -2, 1, 2, 1, 0, 0 }; /* * 1/5 resolution interpolation filter (in Q14) * -1.5dB @ 6kHz, -6dB @ 6.4kHz, -10dB @ 6.6kHz, -20dB @ 6.9kHz, -25dB @ 7kHz, -55dB @ 8kHz */ const Word16 D_ROM_fir_up[120] = { -1, -4, -7, -6, 0, 12, 24, 30, 23, 0, -33, -62, -73, -52, 0, 68, 124, 139, 96, 0, -119, -213, -235, -160, 0, 191, 338, 368, 247, 0, -291, -510, -552, -369, 0, 430, 752, 812, 542, 0, -634, -1111, -1204, -809, 0, 963, 1708, 1881, 1288, 0, -1616, -2974, -3432, -2496, 0, 3792, 8219, 12368, 15317, 16384, 15317, 12368, 8219, 3792, 0, -2496, -3432, -2974, -1616, 0, 1288, 1881, 1708, 963, 0, -809, -1204, -1111, -634, 0, 542, 812, 752, 430, 0, -369, -552, -510, -291, 0, 247, 368, 338, 191, 0, -160, -235, -213, -119, 0, 96, 139, 124, 68, 0, -52, -73, -62, -33, 0, 23, 30, 24, 12, 0, -6, -7, -4, -1, 0 }; /* table x4/5 */ const Word16 D_ROM_fir_down[120] = { -1, -3, -6, -5, 0, 9, 19, 24, 18, 0, -26, -50, -58, -41, 0, 54, 99, 111, 77, 0, -95, -170, -188, -128, 0, 153, 270, 294, 198, 0, -233, -408, -441, -295, 0, 344, 601, 649, 434, 0, -507, -888, -964, -647, 0, 770, 1366, 1505, 1030, 0, -1293, -2379, -2746, -1997, 0, 3034, 6575, 9894, 12254, 13107, 12254, 9894, 6575, 3034, 0, -1997, -2746, -2379, -1293, 0, 1030, 1505, 1366, 770, 0, -647, -964, -888, -507, 0, 434, 649, 601, 344, 0, -295, -441, -408, -233, 0, 198, 294, 270, 153, 0, -128, -188, -170, -95, 0, 77, 111, 99, 54, 0, -41, -58, -50, -26, 0, 18, 24, 19, 9, 0, -5, -6, -3, -1, 0 }; /* * Impulse response with phase dispersion */ /* 2.0 - 6.4 kHz phase dispersion */ const Word16 D_ROM_ph_imp_low[L_SUBFR] = { 20182, 9693, 3270, -3437, 2864, -5240, 1589, -1357, 600, 3893, -1497, -698, 1203, -5249, 1199, 5371, -1488, -705, -2887, 1976, 898, 721, -3876, 4227, -5112, 6400, -1032, -4725, 4093, -4352, 3205, 2130, -1996, -1835, 2648, -1786, -406, 573, 2484, -3608, 3139, -1363, -2566, 3808, -639, -2051, -541, 2376, 3932, -6262, 1432, -3601, 4889, 370, 567, -1163, -2854, 1914, 39, -2418, 3454, 2975, -4021, 3431 }; /* 3.2 - 6.4 kHz phase dispersion */ const Word16 D_ROM_ph_imp_mid[L_SUBFR] = { 24098, 10460, -5263, -763, 2048, -927, 1753, -3323, 2212, 652, -2146, 2487, -3539, 4109, -2107, -374, -626, 4270, -5485, 2235, 1858, -2769, 744, 1140, -763, -1615, 4060, -4574, 2982, -1163, 731, -1098, 803, 167, -714, 606, -560, 639, 43, -1766, 3228, -2782, 665, 763, 233, -2002, 1291, 1871, -3470, 1032, 2710, -4040, 3624, -4214, 5292, -4270, 1563, 108, -580, 1642, -2458, 957, 544, 2540 }; /* * Table for synthesis of signal at 16kHz with HF extension. */ const Word16 D_ROM_hp_gain[16] = { 3624, 4673, 5597, 6479, 7425, 8378, 9324, 10264, 11210, 12206, 13391, 14844, 16770, 19655, 24289, 32728 }; /* * isp and isf tables for initialization */ const Word16 D_ROM_isp[M] = { 32138, 30274, 27246, 23170, 18205, 12540, 6393, 0, -6393, -12540, -18205, -23170, -27246, -30274, -32138, 1475 }; const Word16 D_ROM_isf[M] = { 1024, 2048, 3072, 4096, 5120, 6144, 7168, 8192, 9216, 10240, 11264, 12288, 13312, 14336, 15360, 3840 }; /* * means of ISFs */ const Word16 D_ROM_mean_isf[ORDER] = { 738, 1326, 2336, 3578, 4596, 5662, 6711, 7730, 8750, 9753, 10705, 11728, 12833, 13971, 15043, 4037 }; const Word16 D_ROM_mean_isf_noise[ORDER] = { 478, 1100, 2213, 3267, 4219, 5222, 6198, 7240, 8229, 9153, 10098, 11108, 12144, 13184, 14165, 3803 }; /* 16-byte align end */ /* * LTP gain & fixed codebook gain consealement */ /* pitch gain weight */ const Word16 D_ROM_pdown_unusable[7] = {32767, 31130, 29491, 24576, 7537, 1638, 328}; const Word16 D_ROM_cdown_unusable[7] = {32767, 16384, 8192, 8192, 8192, 4915, 3277}; /* codebook gain weight */ const Word16 D_ROM_pdown_usable[7] = {32767, 32113, 31457, 24576, 7537, 1638, 328}; const Word16 D_ROM_cdown_usable[7] = {32767, 32113, 32113, 32113, 32113, 32113, 22938}; /* * filter coefficients (gain=4.0) */ const Word16 D_ROM_fir_6k_7k[L_FIR] = { -32, 47, 32, -27, -369, 1122, -1421, 0, 3798, -8880, 12349, -10984, 3548, 7766, -18001, 22118, -18001, 7766, 3548, -10984, 12349, -8880, 3798, 0, -1421, 1122, -369, -27, 32, 47, -32 }; const Word16 D_ROM_fir_7k[L_FIR] = { -21, 47, -89, 146, -203, 229, -177, 0, 335, -839, 1485, -2211, 2931, -3542, 3953, 28682, 3953, -3542, 2931, -2211, 1485, -839, 335, 0, -177, 229, -203, 146, -89, 47, -21 }; /* * LPC interpolation coef {0.45, 0.8, 0.96, 1.0}; in Q15 */ const Word16 D_ROM_interpol_frac[NB_SUBFR] = {14746, 26214, 31457, 32767}; /* * Math tables */ const Word16 D_ROM_pow2[33] = { 16384, 16743, 17109, 17484, 17867, 18258, 18658, 19066, 19484, 19911, 20347, 20792, 21247, 21713, 22188, 22674, 23170, 23678, 24196, 24726, 25268, 25821, 26386, 26964, 27554, 28158, 28774, 29405, 30048, 30706, 31379, 32066, 32767 }; const Word16 D_ROM_isqrt[49] = { 32767, 31790, 30894, 30070, 29309, 28602, 27945, 27330, 26755, 26214, 25705, 25225, 24770, 24339, 23930, 23541, 23170, 22817, 22479, 22155, 21845, 21548, 21263, 20988, 20724, 20470, 20225, 19988, 19760, 19539, 19326, 19119, 18919, 18725, 18536, 18354, 18176, 18004, 17837, 17674, 17515, 17361, 17211, 17064, 16921, 16782, 16646, 16514, 16384 }; const Word16 D_ROM_log2[33] = { 0, 1455, 2866, 4236, 5568, 6863, 8124, 9352, 10549, 11716, 12855, 13967, 15054, 16117, 17156, 18172, 19167, 20142, 21097, 22033, 22951, 23852, 24735, 25603, 26455, 27291, 28113, 28922, 29716, 30497, 31266, 32023, 32767 }; /* table of cos(x) in Q15 */ const Word16 D_ROM_cos[129] = { 32767, 32758, 32729, 32679, 32610, 32522, 32413, 32286, 32138, 31972, 31786, 31581, 31357, 31114, 30853, 30572, 30274, 29957, 29622, 29269, 28899, 28511, 28106, 27684, 27246, 26791, 26320, 25833, 25330, 24812, 24279, 23732, 23170, 22595, 22006, 21403, 20788, 20160, 19520, 18868, 18205, 17531, 16846, 16151, 15447, 14733, 14010, 13279, 12540, 11793, 11039, 10279, 9512, 8740, 7962, 7180, 6393, 5602, 4808, 4011, 3212, 2411, 1608, 804, 0, -804, -1608, -2411, -3212, -4011, -4808, -5602, -6393, -7180, -7962, -8740, -9512, -10279, -11039, -11793, -12540, -13279, -14010, -14733, -15447, -16151, -16846, -17531, -18205, -18868, -19520, -20160, -20788, -21403, -22006, -22595, -23170, -23732, -24279, -24812, -25330, -25833, -26320, -26791, -27246, -27684, -28106, -28511, -28899, -29269, -29622, -29957, -30274, -30572, -30853, -31114, -31357, -31581, -31786, -31972, -32138, -32286, -32413, -32522, -32610, -32679, -32729, -32758, -32768 }; h323plus/plugins/audio/G.722.2/AMR-WB/dec_main.c0000644000175000017500000006341011341106231017354 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #include #include #include #include #include "typedef.h" #include "dec_main.h" #include "dec_dtx.h" #include "dec_acelp.h" #include "dec_gain.h" #include "dec_lpc.h" #include "dec_util.h" #define MAX_16 (Word16)0x7fff #define MIN_16 (Word16)0x8000 #define L_FRAME 256 /* Frame size */ #define NB_SUBFR 4 /* Number of subframe per frame */ #define L_SUBFR 64 /* Subframe size */ #define MODE_7k 0 /* modes */ #define MODE_9k 1 #define MODE_12k 2 #define MODE_14k 3 #define MODE_16k 4 #define MODE_18k 5 #define MODE_20k 6 #define MODE_23k 7 #define MODE_24k 8 #define RX_SPEECH_PROBABLY_DEGRADED 1 /* rx types */ #define RX_SPEECH_LOST 2 #define RX_SPEECH_BAD 3 #define RX_NO_DATA 7 #define Q_MAX 8 /* scaling max for signal */ #define PIT_SHARP 27853 /* pitch sharpening factor = 0.85 Q15 */ #define PIT_MIN 34 /* Minimum pitch lag with resolution 1/4 */ #define PIT_FR2 128 /* Minimum pitch lag with resolution 1/2 */ #define PIT_FR1_9b 160 /* Minimum pitch lag with resolution 1 */ #define PIT_FR1_8b 92 /* Minimum pitch lag with resolution 1 */ extern const Word16 D_ROM_isp[]; extern const Word16 D_ROM_isf[]; extern const Word16 D_ROM_interpol_frac[]; #ifdef WIN32 #pragma warning( disable : 4310) #endif /* * Decoder_reset * * Parameters: * st I/O: pointer to state structure * reset_all I: perform full reset * * Function: * Initialisation of variables for the decoder section. * * * Returns: * void */ void D_MAIN_reset(void *st, Word16 reset_all) { Word32 i; Decoder_State *dec_state; dec_state = (Decoder_State*)st; memset(dec_state->mem_exc, 0, (PIT_MAX + L_INTERPOL) * sizeof(Word16)); memset(dec_state->mem_isf_q, 0, M * sizeof(Word16)); dec_state->mem_T0_frac = 0; /* old pitch value = 64.0 */ dec_state->mem_T0 = 64; dec_state->mem_first_frame = 1; dec_state->mem_gc_thres = 0; dec_state->mem_tilt_code = 0; memset(dec_state->mem_ph_disp, 0, 8 * sizeof(Word16)); /* scaling memories for excitation */ dec_state->mem_q = Q_MAX; dec_state->mem_subfr_q[3] = Q_MAX; dec_state->mem_subfr_q[2] = Q_MAX; dec_state->mem_subfr_q[1] = Q_MAX; dec_state->mem_subfr_q[0] = Q_MAX; if(reset_all != 0) { /* routines initialization */ D_GAIN_init(dec_state->mem_gain); memset(dec_state->mem_oversamp, 0, (2 * 12) * sizeof(Word16)); memset(dec_state->mem_sig_out, 0, 6 * sizeof(Word16)); memset(dec_state->mem_hf, 0, (31 - 1) * sizeof(Word16)); memset(dec_state->mem_hf3, 0, (31 - 1) * sizeof(Word16)); memset(dec_state->mem_hp400, 0, 6 * sizeof(Word16)); D_GAIN_lag_concealment_init(dec_state->mem_lag); /* isp initialization */ memcpy(dec_state->mem_isp, D_ROM_isp, M * sizeof(Word16)); memcpy(dec_state->mem_isf, D_ROM_isf, M * sizeof(Word16)); for(i = 0; i < L_MEANBUF; i++) { memcpy(&dec_state->mem_isf_buf[i * M], D_ROM_isf, M * sizeof(Word16)); } /* variable initialization */ dec_state->mem_deemph = 0; dec_state->mem_seed = 21845; /* init random with 21845 */ dec_state->mem_seed2 = 21845; dec_state->mem_seed3 = 21845; dec_state->mem_state = 0; dec_state->mem_bfi = 0; /* Static vectors to zero */ memset(dec_state->mem_syn_hf, 0, M16k * sizeof(Word16)); memset(dec_state->mem_syn_hi, 0, M * sizeof(Word16)); memset(dec_state->mem_syn_lo, 0, M * sizeof(Word16)); D_DTX_reset(dec_state->dtx_decSt, D_ROM_isf); dec_state->mem_vad_hist = 0; } return; } /* * Decoder_init * * Parameters: * spd_state O: pointer to state structure * * Function: * Initialization of variables for the decoder section. * Memory allocation. * * Returns: * return zero if succesful */ Word32 D_MAIN_init(void **spd_state) { /* Decoder states */ Decoder_State *st; *spd_state = NULL; /* * Memory allocation for coder state. */ if((st = (Decoder_State*)malloc(sizeof(Decoder_State))) == NULL) { return(-1); } st->dtx_decSt = NULL; D_DTX_init(&st->dtx_decSt, D_ROM_isf); D_MAIN_reset((void *)st, 1); *spd_state = (void *)st; return(0); } /* * Decoder_close * * Parameters: * spd_state I: pointer to state structure * * Function: * Free coder memory. * * Returns: * void */ void D_MAIN_close(void **spd_state) { D_DTX_exit(&(((Decoder_State *)(*spd_state))->dtx_decSt)); free(*spd_state); return; } /* * Decoder_exe * * Parameters: * mode I: used mode * prms I: parameter vector * synth_out O: synthesis speech * spe_state B: state structure * frame_type I: received frame type * * Function: * Main decoder routine. * * Returns: * 0 if successful */ Word32 D_MAIN_decode(Word16 mode, Word16 prms[], Word16 synth16k[], void *spd_state, UWord8 frame_type) { Word32 code2[L_SUBFR]; /* algebraic codevector */ Word32 L_tmp, L_tmp2, L_gain_code, L_stab_fac; Word32 i, j, i_subfr, pit_flag; Word32 T0, T0_frac, T0_max, select, T0_min = 0; Word16 exc2[L_FRAME]; /* excitation vector */ Word16 Aq[NB_SUBFR * (M + 1)]; /* A(z) quantized for the 4 subframes */ Word16 code[L_SUBFR]; /* algebraic codevector */ Word16 excp[L_SUBFR]; /* excitation vector */ Word16 HfIsf[M16k]; Word16 ispnew[M]; /* immittance spectral pairs at 4nd sfr*/ Word16 isf[M]; /* ISF (frequency domain) at 4nd sfr */ Word16 isf_tmp[M]; /* ISF tmp */ Word16 ind[8]; /* quantization indices */ Word16 index, fac, voice_fac, max, Q_new = 0; Word16 gain_pit, gain_code, gain_code_lo, tmp; Word16 corr_gain = 0; UWord16 pit_sharp = 0; Word16 *exc; /* Excitation vector */ Word16 *p_Aq; /* ptr to A(z) for the 4 subframes */ Word16 *p_isf; /* prt to isf */ Decoder_State *st; /* Decoder states */ UWord8 newDTXState, bfi, unusable_frame; UWord8 vad_flag; st = (Decoder_State*)spd_state; /* find the new DTX state SPEECH OR DTX */ newDTXState = D_DTX_rx_handler(st->dtx_decSt, frame_type); if(newDTXState != SPEECH) { D_DTX_exe(st->dtx_decSt, exc2, newDTXState, isf, &prms); } /* SPEECH action state machine */ if((frame_type == RX_SPEECH_BAD) | (frame_type == RX_SPEECH_PROBABLY_DEGRADED)) { /* bfi for all index, bits are not usable */ bfi = 1; unusable_frame = 0; } else if((frame_type == RX_NO_DATA) | (frame_type == RX_SPEECH_LOST)) { /* bfi only for lsf, gains and pitch period */ bfi = 1; unusable_frame = 1; } else { bfi = 0; unusable_frame = 0; } if(bfi != 0) { st->mem_state = (UWord8)(st->mem_state + 1); if(st->mem_state > 6) { st->mem_state = 6; } } else { st->mem_state = (UWord8)(st->mem_state >> 1); } /* * If this frame is the first speech frame after CNI period, * set the BFH state machine to an appropriate state depending * on whether there was DTX muting before start of speech or not * If there was DTX muting, the first speech frame is muted. * If there was no DTX muting, the first speech frame is not * muted. The BFH state machine starts from state 5, however, to * keep the audible noise resulting from a SID frame which is * erroneously interpreted as a good speech frame as small as * possible (the decoder output in this case is quickly muted) */ if(st->dtx_decSt->mem_dtx_global_state == DTX) { st->mem_state = 5; st->mem_bfi = 0; } else if(st->dtx_decSt->mem_dtx_global_state == D_DTX_MUTE) { st->mem_state = 5; st->mem_bfi = 1; } if(newDTXState == SPEECH) { vad_flag = (UWord8)(*prms++); if(bfi == 0) { if(vad_flag == 0) { st->mem_vad_hist = (Word16)(st->mem_vad_hist + 1); if(st->mem_vad_hist > 32767) { st->mem_vad_hist = 32767; } } else { st->mem_vad_hist = 0; } } } /* * DTX-CNG */ if(newDTXState != SPEECH) /* CNG mode */ { /* * increase slightly energy of noise below 200 Hz * Convert ISFs to the cosine domain */ D_LPC_isf_isp_conversion(isf, ispnew, M); D_LPC_isp_a_conversion(ispnew, Aq, 1, M); memcpy(isf_tmp, st->mem_isf, M * sizeof(Word16)); for(i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR) { j = (i_subfr >> 6); for(i = 0; i < M; i++) { L_tmp = (isf_tmp[i] * (32767 - D_ROM_interpol_frac[j])) << 1; L_tmp = L_tmp + ((isf[i] * D_ROM_interpol_frac[j]) << 1); HfIsf[i] = (Word16)((L_tmp + 0x8000) >> 16); } D_UTIL_dec_synthesis(Aq, &exc2[i_subfr], 0, &synth16k[i_subfr * 5 /4], (Word16) 1, HfIsf, mode, newDTXState, bfi, st); } /* reset speech coder memories */ D_MAIN_reset(st, 0); memcpy(st->mem_isf, isf, M * sizeof(Word16)); st->mem_bfi = bfi; st->dtx_decSt->mem_dtx_global_state = (UWord8)newDTXState; return(0); } /* * ACELP */ exc = st->mem_exc + PIT_MAX + L_INTERPOL; /* Decode the ISFs */ if(mode <= MODE_7k) { ind[0] = *prms++; ind[1] = *prms++; ind[2] = *prms++; ind[3] = *prms++; ind[4] = *prms++; D_LPC_isf_2s3s_decode(ind, isf, st->mem_isf_q, st->mem_isf, st->mem_isf_buf, bfi); } else { ind[0] = *prms++; ind[1] = *prms++; ind[2] = *prms++; ind[3] = *prms++; ind[4] = *prms++; ind[5] = *prms++; ind[6] = *prms++; D_LPC_isf_2s5s_decode(ind, isf, st->mem_isf_q, st->mem_isf, st->mem_isf_buf, bfi); } /* Convert ISFs to the cosine domain */ D_LPC_isf_isp_conversion(isf, ispnew, M); if(st->mem_first_frame != 0) { st->mem_first_frame = 0; memcpy(st->mem_isp, ispnew, M * sizeof(Word16)); } /* Find the interpolated ISPs and convert to a[] for all subframes */ D_LPC_int_isp_find(st->mem_isp, ispnew, D_ROM_interpol_frac, Aq); /* update isp memory for the next frame */ memcpy(st->mem_isp, ispnew, M * sizeof(Word16)); /* Check stability on isf : distance between old isf and current isf */ L_tmp = 0; p_isf = st->mem_isf; for(i = 0; i < M - 1; i++) { tmp = (Word16)((isf[i] - p_isf[i])); L_tmp = L_tmp + (tmp * tmp); } if(L_tmp < 3276928) { L_tmp = L_tmp >> 7; L_tmp = (L_tmp * 26214) >> 15; /* tmp = L_tmp*0.8/256 */ L_tmp = 20480 - L_tmp; /* 1.25 - tmp */ L_stab_fac = L_tmp << 1; /* Q14 -> Q15 with saturation */ if(L_stab_fac > 0x7FFF) { L_stab_fac = 0x7FFF; } } else { L_stab_fac = 0x0; } memcpy(isf_tmp, st->mem_isf, M * sizeof(Word16)); memcpy(st->mem_isf, isf, M * sizeof(Word16)); /* * Loop for every subframe in the analysis frame * * The subframe size is L_SUBFR and the loop is repeated L_FRAME/L_SUBFR * times * - decode the pitch delay and filter mode * - decode algebraic code * - decode pitch and codebook gains * - find voicing factor and tilt of code for next subframe * - find the excitation and compute synthesis speech */ p_Aq = Aq; /* pointer to interpolated LPC parameters */ for(i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR) { pit_flag = i_subfr; if((i_subfr == (2 * L_SUBFR)) & (mode > MODE_7k)) { pit_flag = 0; } /* * - Decode pitch lag * Lag indeces received also in case of BFI, * so that the parameter pointer stays in sync. */ if(pit_flag == 0) { if(mode <= MODE_9k) { index = *prms++; if(index < ((PIT_FR1_8b - PIT_MIN) * 2)) { T0 = (PIT_MIN + (index >> 1)); T0_frac = (index - ((T0 - PIT_MIN) << 1)); T0_frac = (T0_frac << 1); } else { T0 = index + (PIT_FR1_8b - ((PIT_FR1_8b - PIT_MIN) * 2)); T0_frac = 0; } } else { index = *prms++; if(index < ((PIT_FR2 - PIT_MIN) * 4)) { T0 = PIT_MIN + (index >> 2); T0_frac = index - ((T0 - PIT_MIN) << 2); } else if(index < ((((PIT_FR2 - PIT_MIN) * 4) + ((PIT_FR1_9b - PIT_FR2) * 2)))) { index = (Word16)((index - ((PIT_FR2 - PIT_MIN) * 4))); T0 = PIT_FR2 + (index >> 1); T0_frac = index - ((T0 - PIT_FR2) << 1); T0_frac = T0_frac << 1; } else { T0 = index + (PIT_FR1_9b - ((PIT_FR2 - PIT_MIN) * 4) - ((PIT_FR1_9b - PIT_FR2) * 2)); T0_frac = 0; } } /* find T0_min and T0_max for subframe 2 and 4 */ T0_min = T0 - 8; if(T0_min < PIT_MIN) { T0_min = PIT_MIN; } T0_max = T0_min + 15; if(T0_max > PIT_MAX) { T0_max = PIT_MAX; T0_min = T0_max - 15; } } else { /* if subframe 2 or 4 */ if(mode <= MODE_9k) { index = *prms++; T0 = T0_min + (index >> 1); T0_frac = index - ((T0 - T0_min) << 1); T0_frac = T0_frac << 1; } else { index = *prms++; T0 = T0_min + (index >> 2); T0_frac = index - ((T0 - T0_min) << 2); } } /* check BFI after pitch lag decoding */ if(bfi != 0) /* if frame erasure */ { D_GAIN_lag_concealment(&(st->mem_gain[17]), st->mem_lag, &T0, &(st->mem_T0), &(st->mem_seed3), unusable_frame); T0_frac = 0; } /* * Find the pitch gain, the interpolation filter * and the adaptive codebook vector. */ D_GAIN_adaptive_codebook_excitation(&exc[i_subfr], T0, T0_frac); if(unusable_frame) { select = 1; } else { if(mode <= MODE_9k) { select = 0; } else { select = *prms++; } } if(select == 0) { /* find pitch excitation with lp filter */ for(i = 0; i < L_SUBFR; i++) { L_tmp = 2949 * exc[i - 1 + i_subfr]; L_tmp = L_tmp + (10486 * exc[i + i_subfr]); L_tmp = L_tmp + (2949 * exc[i + 1 + i_subfr]); code[i] = (Word16)((L_tmp + 0x2000) >> 14); } memcpy(&exc[i_subfr], code, L_SUBFR * sizeof(Word16)); } /* * Decode innovative codebook. * Add the fixed-gain pitch contribution to code[]. */ if(unusable_frame != 0) { /* the innovative code doesn't need to be scaled (see Q_gain2) */ for(i = 0; i < L_SUBFR; i++) { code[i] = (Word16)(D_UTIL_random(&(st->mem_seed)) >> 3); } } else if(mode <= MODE_7k) { ind[0] = *prms++; D_ACELP_decode_2t(ind[0], code); } else if(mode <= MODE_9k) { memcpy(ind, prms, 4 * sizeof(Word16)); prms += 4; D_ACELP_decode_4t(ind, 20, code); } else if(mode <= MODE_12k) { memcpy(ind, prms, 4 * sizeof(Word16)); prms += 4; D_ACELP_decode_4t(ind, 36, code); } else if(mode <= MODE_14k) { memcpy(ind, prms, 4 * sizeof(Word16)); prms += 4; D_ACELP_decode_4t(ind, 44, code); } else if(mode <= MODE_16k) { memcpy(ind, prms, 4 * sizeof(Word16)); prms += 4; D_ACELP_decode_4t(ind, 52, code); } else if(mode <= MODE_18k) { memcpy(ind, prms, 8 * sizeof(Word16)); prms += 8; D_ACELP_decode_4t(ind, 64, code); } else if(mode <= MODE_20k) { memcpy(ind, prms, 8 * sizeof(Word16)); prms += 8; D_ACELP_decode_4t(ind, 72, code); } else { memcpy(ind, prms, 8 * sizeof(Word16)); prms += 8; D_ACELP_decode_4t(ind, 88, code); } tmp = 0; D_UTIL_preemph(code, st->mem_tilt_code, L_SUBFR, &tmp); L_tmp = T0; if(T0_frac > 2) { L_tmp = L_tmp + 1; } D_GAIN_pitch_sharpening(code, L_tmp, PIT_SHARP); /* * Decode codebooks gains. */ index = *prms++; /* codebook gain index */ if(mode <= MODE_9k) { D_GAIN_decode(index, 6, code, &gain_pit, &L_gain_code, bfi, st->mem_bfi, st->mem_state, unusable_frame, st->mem_vad_hist, st->mem_gain); } else { D_GAIN_decode(index, 7, code, &gain_pit, &L_gain_code, bfi, st->mem_bfi, st->mem_state, unusable_frame, st->mem_vad_hist, st->mem_gain); } /* find best scaling to perform on excitation (Q_new) */ tmp = st->mem_subfr_q[0]; for(i = 1; i < 4; i++) { if(st->mem_subfr_q[i] < tmp) { tmp = st->mem_subfr_q[i]; } } /* limit scaling (Q_new) to Q_MAX */ if(tmp > Q_MAX) { tmp = Q_MAX; } Q_new = 0; L_tmp = L_gain_code; /* L_gain_code in Q16 */ while((L_tmp < 0x08000000L) && (Q_new < tmp)) { L_tmp = (L_tmp << 1); Q_new = (Word16)((Q_new + 1)); } if(L_tmp < 0x7FFF7FFF) { gain_code = (Word16)((L_tmp + 0x8000) >> 16); /* scaled gain_code with Qnew */ } else { gain_code = 32767; } if(Q_new > st->mem_q) { D_UTIL_signal_up_scale(exc + i_subfr - (PIT_MAX + L_INTERPOL), PIT_MAX + L_INTERPOL + L_SUBFR, (Word16)(Q_new - st->mem_q)); } else { D_UTIL_signal_down_scale(exc + i_subfr - (PIT_MAX + L_INTERPOL), PIT_MAX + L_INTERPOL + L_SUBFR, (Word16)(st->mem_q - Q_new)); } st->mem_q = Q_new; /* * Update parameters for the next subframe. * - tilt of code: 0.0 (unvoiced) to 0.5 (voiced) */ if(bfi == 0) { /* LTP-Lag history update */ for(i = 4; i > 0; i--) { st->mem_lag[i] = st->mem_lag[i - 1]; } st->mem_lag[0] = (Word16)T0; st->mem_T0 = (Word16)T0; st->mem_T0_frac = 0; /* Remove fraction in case of BFI */ } /* find voice factor in Q15 (1=voiced, -1=unvoiced) */ memcpy(exc2, &exc[i_subfr], L_SUBFR * sizeof(Word16)); D_UTIL_signal_down_scale(exc2, L_SUBFR, 3); /* post processing of excitation elements */ if(mode <= MODE_9k) { pit_sharp = (Word16)(gain_pit << 1); if(pit_sharp > 16384) { if(pit_sharp > 32767) { pit_sharp = 32767; } for(i = 0; i < L_SUBFR; i++) { L_tmp = (exc2[i] * pit_sharp) >> 15; L_tmp = L_tmp * gain_pit; excp[i] = (Word16)((L_tmp + 0x8000) >> 16); } } } voice_fac = D_GAIN_find_voice_factor(exc2, -3, gain_pit, code, gain_code, L_SUBFR); /* tilt of code for next subframe: 0.5=voiced, 0=unvoiced */ st->mem_tilt_code = (Word16)((voice_fac >> 2) + 8192); /* * Find the total excitation. * Find synthesis speech corresponding to exc[]. * Find maximum value of excitation for next scaling */ memcpy(exc2, &exc[i_subfr], L_SUBFR * sizeof(Word16)); max = 1; for(i = 0; i < L_SUBFR; i++) { L_tmp = (code[i] * gain_code) << 5; L_tmp = L_tmp + (exc[i + i_subfr] * gain_pit); L_tmp = (L_tmp + 0x2000) >> 14; if((L_tmp > MIN_16) & (L_tmp < 32768)) { exc[i + i_subfr] = (Word16)L_tmp; tmp = (Word16)(abs(L_tmp)); if(tmp > max) { max = tmp; } } else if(L_tmp > MAX_16) { exc[i + i_subfr] = MAX_16; max = MAX_16; } else { exc[i + i_subfr] = MIN_16; max = MAX_16; } } /* tmp = scaling possible according to max value of excitation */ tmp = (Word16)((D_UTIL_norm_s(max) + Q_new) - 1); st->mem_subfr_q[3] = st->mem_subfr_q[2]; st->mem_subfr_q[2] = st->mem_subfr_q[1]; st->mem_subfr_q[1] = st->mem_subfr_q[0]; st->mem_subfr_q[0] = tmp; /* * phase dispersion to enhance noise in low bit rate */ /* L_gain_code in Q16 */ D_UTIL_l_extract(L_gain_code, &gain_code, &gain_code_lo); if(mode <= MODE_7k) { j = 0; /* high dispersion for rate <= 7.5 kbit/s */ } else if(mode <= MODE_9k) { j = 1; /* low dispersion for rate <= 9.6 kbit/s */ } else { j = 2; /* no dispersion for rate > 9.6 kbit/s */ } D_ACELP_phase_dispersion(gain_code, gain_pit, code, (Word16)j, st->mem_ph_disp); /* * noise enhancer * - Enhance excitation on noise. (modify gain of code) * If signal is noisy and LPC filter is stable, move gain * of code 1.5 dB toward gain of code threshold. * This decrease by 3 dB noise energy variation. */ L_tmp = 16384 - (voice_fac >> 1); /* 1=unvoiced, 0=voiced */ fac = (Word16)((L_stab_fac * L_tmp) >> 15); L_tmp = L_gain_code; if(L_tmp < st->mem_gc_thres) { L_tmp = (L_tmp + D_UTIL_mpy_32_16(gain_code, gain_code_lo, 6226)); if(L_tmp > st->mem_gc_thres) { L_tmp = st->mem_gc_thres; } } else { L_tmp = D_UTIL_mpy_32_16(gain_code, gain_code_lo, 27536); if(L_tmp < st->mem_gc_thres) { L_tmp = st->mem_gc_thres; } } st->mem_gc_thres = L_tmp; L_gain_code = D_UTIL_mpy_32_16(gain_code, gain_code_lo, (Word16)(32767 - fac)); D_UTIL_l_extract(L_tmp, &gain_code, &gain_code_lo); L_gain_code = L_gain_code + D_UTIL_mpy_32_16(gain_code, gain_code_lo, fac); /* * pitch enhancer * - Enhance excitation on voice. (HP filtering of code) * On voiced signal, filtering of code by a smooth fir HP * filter to decrease energy of code in low frequency. */ L_tmp2 = (voice_fac >> 3) + 4096; /* 0.25=voiced, 0=unvoiced */ L_tmp = (code[0] << 15) - (code[1] * L_tmp2); code2[0] = (L_tmp + 0x4000) >> 15; for(i = 1; i < L_SUBFR - 1; i++) { L_tmp = code[i] << 15; L_tmp = L_tmp - (code[i + 1] * L_tmp2); L_tmp = L_tmp - (code[i - 1] * L_tmp2); code2[i] = (L_tmp + 0x4000) >> 15; } L_tmp = code[L_SUBFR - 1] << 15; L_tmp = L_tmp - (code[L_SUBFR - 2] * L_tmp2); code2[L_SUBFR - 1] = (L_tmp + 0x4000) >> 15; /* build excitation */ gain_code = (Word16)(((L_gain_code << Q_new) + 0x8000) >> 16); for(i = 0; i < L_SUBFR; i++) { L_tmp = (code2[i] * gain_code) << 5; L_tmp = L_tmp + (exc2[i] * gain_pit); L_tmp = (L_tmp + 0x2000) >> 14; exc2[i] = D_UTIL_saturate(L_tmp); } if(mode <= MODE_9k) { if(pit_sharp > 16384) { for(i = 0; i < L_SUBFR; i++) { L_tmp = (excp[i] + exc2[i]); excp[i] = D_UTIL_saturate(L_tmp); } D_GAIN_adaptive_control(exc2, excp, L_SUBFR); memcpy(exc2, excp, L_SUBFR * sizeof(Word16)); } } if(mode <= MODE_7k) { j = (i_subfr >> 6); for(i = 0; i < M; i++) { L_tmp = isf_tmp[i] * (32767 - D_ROM_interpol_frac[j]); L_tmp = L_tmp + (isf[i] * D_ROM_interpol_frac[j]); HfIsf[i] = (Word16)((L_tmp + 0x4000) >> 15); } } else { memset(st->mem_syn_hf, 0, (M16k - M) * sizeof(Word16)); } if(mode >= MODE_24k) { corr_gain = *prms++; D_UTIL_dec_synthesis(p_Aq, exc2, Q_new, &synth16k[i_subfr * 5 / 4], corr_gain, HfIsf, mode, newDTXState, bfi, st); } else { D_UTIL_dec_synthesis(p_Aq, exc2, Q_new, &synth16k[i_subfr * 5 / 4], 0, HfIsf, mode, newDTXState, bfi, st); } p_Aq += (M + 1); /* interpolated LPC parameters for next subframe */ } /* * Update signal for next frame * -> save past of exc[] * -> save pitch parameters. */ memmove(st->mem_exc, &st->mem_exc[L_FRAME], (PIT_MAX + L_INTERPOL) * sizeof(Word16)); D_UTIL_signal_down_scale(exc, L_FRAME, Q_new); D_DTX_activity_update(st->dtx_decSt, isf, exc); st->dtx_decSt->mem_dtx_global_state = (UWord8)newDTXState; st->mem_bfi = bfi; return(0); } h323plus/plugins/audio/G.722.2/AMR-WB/dec_lpc.h0000644000175000017500000000202311341106231017204 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #ifndef DEC_LPC_H #define DEC_LPC_H #include "typedef.h" void D_LPC_isf_noise_d(Word16 *indice, Word16 *isf_q); void D_LPC_isf_isp_conversion(Word16 isf[], Word16 isp[], Word16 m); void D_LPC_isp_a_conversion(Word16 isp[], Word16 a[], Word32 adaptive_scaling, Word16 m); void D_LPC_a_weight(Word16 a[], Word16 ap[], Word16 gamma, Word16 m); void D_LPC_isf_2s3s_decode(Word16 *indice, Word16 *isf_q, Word16* past_isfq, Word16 *isfold, Word16 *isf_buf, Word16 bfi); void D_LPC_isf_2s5s_decode(Word16 *indice, Word16 *isf_q, Word16 *past_isfq, Word16 *isfold, Word16 *isf_buf, Word16 bfi); void D_LPC_int_isp_find(Word16 isp_old[], Word16 isp_new[], const Word16 frac[], Word16 Az[]); void D_LPC_isf_extrapolation(Word16 HfIsf[]); #endif h323plus/plugins/audio/G.722.2/AMR-WB/dec_gain.h0000644000175000017500000000227111341106231017351 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #ifndef DEC_GAIN_H #define DEC_GAIN_H #include "typedef.h" void D_GAIN_init(Word16 *mem); void D_GAIN_decode(Word16 index, Word16 nbits, Word16 code[], Word16 *gain_pit, Word32 *gain_cod, Word16 bfi, Word16 prev_bfi, Word16 state, Word16 unusable_frame, Word16 vad_hist, Word16 *mem); void D_GAIN_adaptive_control(Word16 *sig_in, Word16 *sig_out, Word16 l_trm); void D_GAIN_lag_concealment_init(Word16 lag_hist[]); void D_GAIN_lag_concealment(Word16 gain_hist[], Word16 lag_hist[], Word32 *T0, Word16 *old_T0, Word16 *seed, Word16 unusable_frame); void D_GAIN_adaptive_codebook_excitation(Word16 exc[], Word32 T0, Word32 frac); void D_GAIN_pitch_sharpening(Word16 *x, Word32 pit_lag, Word16 sharp); Word16 D_GAIN_find_voice_factor(Word16 exc[], Word16 Q_exc, Word16 gain_pit, Word16 code[], Word16 gain_code, Word16 L_subfr); #endif h323plus/plugins/audio/G.722.2/AMR-WB/enc_dtx.h0000644000175000017500000000677111341106231017255 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #ifndef ENC_F_DTX_H #define ENC_F_DTX_H #include "typedef.h" #define M 16 /* Order of LP filter */ #define DTX_HIST_SIZE 8 /* 8 frames */ #define COMPLEN 12 /* Number of sub-bands used by VAD */ #define F_5TH_CNT 5 /* Number of 5th order filters in VAD */ #define F_3TH_CNT 6 /* Number of 3th order filters in VAD */ typedef struct { Float32 mem_isf[M * DTX_HIST_SIZE]; /* LSP history */ Float32 mem_distance[28]; /* ISF history distance matrix */ Float32 mem_distance_sum[DTX_HIST_SIZE];/* Sum of ISF history distances */ Float32 mem_log_en[DTX_HIST_SIZE]; /* logarithmic frame energy history */ Word16 mem_hist_ptr; /* pointer to the cyclic history vectors */ Word16 mem_log_en_index; /* Index for logarithmic energy */ Word16 mem_cng_seed; /* Comfort noise excitation seed */ Word16 mem_dtx_hangover_count; /* DTX hangover period */ Word16 mem_dec_ana_elapsed_count;/* counter for elapsed speech frames */ /* in DTX */ } E_DTX_State; typedef struct { Float64 mem_pow_sum; /* power of previous frame */ Float32 mem_bckr_est[COMPLEN]; /* background noise estimate */ Float32 mem_ave_level[COMPLEN]; /* averaged input components */ /* for stationary estimation */ Float32 mem_level[COMPLEN]; /* input levels of the previous frame */ Float32 mem_sub_level[COMPLEN]; /* input levels calculated at the end of */ /* a frame (lookahead) */ Float32 mem_a_data5[F_5TH_CNT][2];/* memory for the filter bank */ Float32 mem_a_data3[F_3TH_CNT]; /* memory for the filter bank */ Float32 mem_sp_max; /* maximum level */ Float32 mem_speech_level; /* estimated speech level */ Word16 mem_burst_count; /* counts length of a speech burst */ Word16 mem_hang_count; /* hangover counter */ Word16 mem_stat_count; /* stationary counter */ Word16 mem_vadreg; /* flags for intermediate VAD decisions */ Word16 mem_pitch_tone; /* flags for pitch and tone detection */ Word16 mem_sp_est_cnt; /* counter for speech level estimation */ Word16 mem_sp_max_cnt; /* counts frames that contains speech */ } E_DTX_Vad_State; Word32 E_DTX_init(E_DTX_State **st); Word32 E_DTX_reset(E_DTX_State *st); void E_DTX_exit(E_DTX_State **st); void E_DTX_tx_handler(E_DTX_State *st, Word32 vad_flag, Word16 *usedMode); void E_DTX_buffer(E_DTX_State *st, Float32 isf_new[], Float32 enr, Word16 codec_mode); void E_DTX_exe(E_DTX_State *st, Float32 *exc2, Word16 **pt_prms); Word32 E_DTX_vad_init(E_DTX_Vad_State **st); Word32 E_DTX_vad_reset(E_DTX_Vad_State *st); void E_DTX_vad_exit(E_DTX_Vad_State **st); void E_DTX_pitch_tone_detection(E_DTX_Vad_State *st, Float32 p_gain); Word16 E_DTX_vad(E_DTX_Vad_State *st, Float32 in_buf[]); #endif h323plus/plugins/audio/G.722.2/AMR-WB/enc_gain.h0000644000175000017500000000274711341106231017373 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #ifndef ENC_GAIN_H #define ENC_GAIN_H #include "typedef.h" void E_GAIN_clip_init(Float32 mem[]); Word32 E_GAIN_clip_test(Float32 mem[]); void E_GAIN_clip_isf_test(Float32 isf[], Float32 mem[]); void E_GAIN_clip_pit_test(Float32 gain_pit, Float32 mem[]); void E_GAIN_lp_decim2(Float32 x[], Word32 l, Float32 *mem); Word32 E_GAIN_olag_median(Word32 prev_ol_lag, Word32 old_ol_lag[5]); Word32 E_GAIN_open_loop_search(Float32 *wsp, Word32 L_min, Word32 L_max, Word32 nFrame, Word32 L_0, Float32 *gain, Float32 *mem, Float32 hp_old_wsp[], UWord8 weight_flg); Word32 E_GAIN_closed_loop_search(Float32 exc[], Float32 xn[], Float32 h[], Word32 t0_min, Word32 t0_max, Word32 *pit_frac, Word32 i_subfr, Word32 t0_fr2, Word32 t0_fr1); void E_GAIN_adaptive_codebook_excitation(Word16 exc[], Word16 T0, Word32 frac, Word16 L_subfr); void E_GAIN_pitch_sharpening(Word16 *x, Word16 pit_lag); void E_GAIN_f_pitch_sharpening(Float32 *x, Word32 pit_lag); Word32 E_GAIN_voice_factor(Word16 exc[], Word16 Q_exc, Word16 gain_pit, Word16 code[], Word16 gain_code); #endif h323plus/plugins/audio/G.722.2/AMR-WB/enc_gain.c0000644000175000017500000004032711341106231017362 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #include #include #include "typedef.h" #include "enc_util.h" #define L_FRAME 256 /* Frame size */ #define L_SUBFR 64 /* Subframe size */ #define HP_ORDER 3 #define L_INTERPOL1 4 #define L_INTERPOL2 16 #define PIT_SHARP 27853 /* pitch sharpening factor = 0.85 Q15 */ #define F_PIT_SHARP 0.85F /* pitch sharpening factor */ #define PIT_MIN 34 /* Minimum pitch lag with resolution 1/4 */ #define UP_SAMP 4 #define DIST_ISF_MAX 120 #define DIST_ISF_THRES 60 #define GAIN_PIT_THRES 0.9F #define GAIN_PIT_MIN 0.6F extern const Float32 E_ROM_corrweight[]; extern const Float32 E_ROM_inter4_1[]; extern const Word16 E_ROM_inter4_2[]; /* * E_GAIN_clip_init * * Parameters: * mem O: memory of gain of pitch clipping algorithm * * Function: * Initialises state memory * * Returns: * void */ void E_GAIN_clip_init(Float32 mem[]) { mem[0] = DIST_ISF_MAX; mem[1] = GAIN_PIT_MIN; } /* * E_GAIN_clip_test * * Parameters: * mem I: memory of gain of pitch clipping algorithm * * Function: * Gain clipping test to avoid unstable synthesis on frame erasure * * Returns: * Test result */ Word32 E_GAIN_clip_test(Float32 mem[]) { Word32 clip; clip = 0; if ((mem[0] < DIST_ISF_THRES) && (mem[1] > GAIN_PIT_THRES)) { clip = 1; } return (clip); } /* * E_GAIN_clip_isf_test * * Parameters: * isf I: isf values (in frequency domain) * mem I/O: memory of gain of pitch clipping algorithm * * Function: * Check resonance for pitch clipping algorithm * * Returns: * void */ void E_GAIN_clip_isf_test(Float32 isf[], Float32 mem[]) { Word32 i; Float32 dist, dist_min; dist_min = isf[1] - isf[0]; for (i = 2; i < M - 1; i++) { dist = isf[i] - isf[i-1]; if (dist < dist_min) { dist_min = dist; } } dist = 0.8F * mem[0] + 0.2F * dist_min; if (dist > DIST_ISF_MAX) { dist = DIST_ISF_MAX; } mem[0] = dist; return; } /* * E_GAIN_clip_pit_test * * Parameters: * gain_pit I: gain of quantized pitch * mem I/O: memory of gain of pitch clipping algorithm * * Function: * Test quantised gain of pitch for pitch clipping algorithm * * Returns: * void */ void E_GAIN_clip_pit_test(Float32 gain_pit, Float32 mem[]) { Float32 gain; gain = 0.9F * mem[1] + 0.1F * gain_pit; if (gain < GAIN_PIT_MIN) { gain = GAIN_PIT_MIN; } mem[1] = gain; return; } /* * E_GAIN_lp_decim2 * * Parameters: * x I/O: signal to process * l I: size of filtering * mem I/O: memory (size = 3) * * Function: * Decimate a vector by 2 with 2nd order fir filter. * * Returns: * void */ void E_GAIN_lp_decim2(Float32 x[], Word32 l, Float32 *mem) { Float32 x_buf[L_FRAME + 3]; Float32 temp; Word32 i, j; /* copy initial filter states into buffer */ memcpy(x_buf, mem, 3 * sizeof(Float32)); memcpy(&x_buf[3], x, l * sizeof(Float32)); for (i = 0; i < 3; i++) { mem[i] = ((x[l - 3 + i] > 1e-10) | (x[l - 3 + i] < -1e-10)) ? x[l - 3 + i] : 0; } for (i = 0, j = 0; i < l; i += 2, j++) { temp = x_buf[i] * 0.13F; temp += x_buf[i + 1] * 0.23F; temp += x_buf[i + 2] * 0.28F; temp += x_buf[i + 3] * 0.23F; temp += x_buf[i + 4] * 0.13F; x[j] = temp; } return; } /* * E_GAIN_open_loop_search * * Parameters: * wsp I: signal (end pntr) used to compute the open loop pitch * L_min I: minimum pitch lag * L_max I: maximum pitch lag * nFrame I: length of frame to compute pitch * L_0 I: old open-loop lag * gain O: open-loop pitch-gain * hp_wsp_mem I/O: memory of the highpass filter for hp_wsp[] (lg = 9) * hp_old_wsp O: highpass wsp[] * weight_flg I: is weighting function used * * Function: * Find open loop pitch lag * * Returns: * open loop pitch lag */ Word32 E_GAIN_open_loop_search(Float32 *wsp, Word32 L_min, Word32 L_max, Word32 nFrame, Word32 L_0, Float32 *gain, Float32 *hp_wsp_mem, Float32 hp_old_wsp[], UWord8 weight_flg) { Word32 i, j, k, L = 0; Float32 o, R0, R1, R2, R0_max = -1.0e23f; const Float32 *ww, *we; Float32 *data_a, *data_b, *hp_wsp, *p, *p1; ww = &E_ROM_corrweight[198]; we = &E_ROM_corrweight[98 + L_max - L_0]; for (i = L_max; i > L_min; i--) { p = &wsp[0]; p1 = &wsp[-i]; /* Compute the correlation R0 and the energy R1. */ R0 = 0.0; for (j = 0; j < nFrame; j += 2) { R0 += p[j] * p1[j]; R0 += p[j + 1] * p1[j + 1]; } /* Weighting of the correlation function. */ R0 *= *ww--; /* Weight the neighborhood of the old lag. */ if ((L_0 > 0) & (weight_flg == 1)) { R0 *= *we--; } /* Store the values if a currest maximum has been found. */ if (R0 >= R0_max) { R0_max = R0; L = i; } } data_a = hp_wsp_mem; data_b = hp_wsp_mem + HP_ORDER; hp_wsp = hp_old_wsp + L_max; for (k = 0; k < nFrame; k++) { data_b[0] = data_b[1]; data_b[1] = data_b[2]; data_b[2] = data_b[3]; data_b[HP_ORDER] = wsp[k]; o = data_b[0] * 0.83787057505665F; o += data_b[1] * -2.50975570071058F; o += data_b[2] * 2.50975570071058F; o += data_b[3] * -0.83787057505665F; o -= data_a[0] * -2.64436711600664F; o -= data_a[1] * 2.35087386625360F; o -= data_a[2] * -0.70001156927424F; data_a[2] = data_a[1]; data_a[1] = data_a[0]; data_a[0] = o; hp_wsp[k] = o; } p = &hp_wsp[0]; p1 = &hp_wsp[-L]; R0 = 0.0F; R1 = 0.0F; R2 = 0.0F; for (j = 0; j < nFrame; j++) { R1 += p1[j] * p1[j]; R2 += p[j] * p[j]; R0 += p[j] * p1[j]; } *gain = (Float32)(R0 / (sqrt(R1 * R2) + 1e-5)); memcpy(hp_old_wsp, &hp_old_wsp[nFrame], L_max * sizeof(Float32)); return(L); } /* * E_GAIN_sort * * Parameters: * n I: number of lags * ra I/O: lags / sorted lags * * Function: * Sort open-loop lags * * Returns: * void */ static void E_GAIN_sort(Word32 n, Word32 *ra) { Word32 l, j, ir, i, rra; l = (n >> 1) + 1; ir = n; for (;;) { if (l > 1) { rra = ra[--l]; } else { rra = ra[ir]; ra[ir] = ra[1]; if (--ir == 1) { ra[1] = rra; return; } } i = l; j = l << 1; while (j <= ir) { if (j < ir && ra[j] < ra[j + 1]) { ++j; } if (rra < ra[j]) { ra[i] = ra[j]; j += (i = j); } else { j = ir + 1; } } ra[i] = rra; } } /* * E_GAIN_olag_median * * Parameters: * prev_ol_lag I: previous open-loop lag * old_ol_lag I: old open-loop lags * * Function: * Median of 5 previous open-loop lags * * Returns: * median of 5 previous open-loop lags */ Word32 E_GAIN_olag_median(Word32 prev_ol_lag, Word32 old_ol_lag[5]) { Word32 tmp[6] = {0}; Word32 i; /* Use median of 5 previous open-loop lags as old lag */ for (i = 4; i > 0; i--) { old_ol_lag[i] = old_ol_lag[i-1]; } old_ol_lag[0] = prev_ol_lag; for (i = 0; i < 5; i++) { tmp[i+1] = old_ol_lag[i]; } E_GAIN_sort(5, tmp); return tmp[3]; } /* * E_GAIN_norm_corr * * Parameters: * exc I: excitation buffer * xn I: target signal * h I: weighted synthesis filter impulse response (Q15) * t0_min I: minimum value in the searched range * t0_max I: maximum value in the searched range * corr_norm O: normalized correlation (Q15) * * Function: * Find the normalized correlation between the target vector and the * filtered past excitation (correlation between target and filtered * excitation divided by the square root of energy of filtered excitation) * Size of subframe = L_SUBFR. * * Returns: * void */ static void E_GAIN_norm_corr(Float32 exc[], Float32 xn[], Float32 h[], Word32 t_min, Word32 t_max, Float32 corr_norm[]) { Float32 excf[L_SUBFR]; /* filtered past excitation */ Float32 alp, ps, norm; Word32 t, j, k; k = - t_min; /* compute the filtered excitation for the first delay t_min */ E_UTIL_f_convolve(&exc[k], h, excf); /* loop for every possible period */ for (t = t_min; t <= t_max; t++) { /* Compute correlation between xn[] and excf[] */ ps = 0.0F; alp = 0.01F; for (j = 0; j < L_SUBFR; j++) { ps += xn[j] * excf[j]; alp += excf[j] * excf[j]; } /* Compute 1/sqrt(energie of excf[]) */ norm = (Float32)(1.0F / sqrt(alp)); /* Normalize correlation = correlation * (1/sqrt(energy)) */ corr_norm[t] = ps * norm; /* update the filtered excitation excf[] for the next iteration */ if (t != t_max) { k--; for (j = L_SUBFR - 1; j > 0; j--) { excf[j] = excf[j - 1] + exc[k] * h[j]; } excf[0] = exc[k]; } } return; } /* * E_GAIN_norm_corr_interpolate * * Parameters: * x I: input vector * frac I: fraction (-4..+3) * * Function: * Interpolating the normalized correlation * * Returns: * interpolated value */ static Float32 E_GAIN_norm_corr_interpolate(Float32 *x, Word32 frac) { Float32 s, *x1, *x2; const Float32 *c1, *c2; if (frac < 0) { frac += 4; x--; } x1 = &x[0]; x2 = &x[1]; c1 = &E_ROM_inter4_1[frac]; c2 = &E_ROM_inter4_1[4 - frac]; s = x1[0] * c1[0] + x2[0] * c2[0]; s += x1[-1] * c1[4] + x2[1] * c2[4]; s += x1[-2] * c1[8] + x2[2] * c2[8]; s += x1[-3] * c1[12] + x2[3] * c2[12]; return s; } /* * E_GAIN_closed_loop_search * * Parameters: * exc I: excitation buffer * xn I: target signal * h I: weighted synthesis filter impulse response * t0_min I: minimum value in the searched range * t0_max I: maximum value in the searched range * pit_frac O: chosen fraction * i_subfr I: flag to first subframe * t0_fr2 I: minimum value for resolution 1/2 * t0_fr1 I: minimum value for resolution 1 * * Function: * Find the closed loop pitch period with 1/4 subsample resolution. * * Returns: * chosen integer pitch lag */ Word32 E_GAIN_closed_loop_search(Float32 exc[], Float32 xn[], Float32 h[], Word32 t0_min, Word32 t0_max, Word32 *pit_frac, Word32 i_subfr, Word32 t0_fr2, Word32 t0_fr1) { Float32 corr_v[15 + 2 * L_INTERPOL1 + 1]; Float32 cor_max, max, temp; Float32 *corr; Word32 i, fraction, step; Word32 t0, t_min, t_max; /* Find interval to compute normalized correlation */ t_min = t0_min - L_INTERPOL1; t_max = t0_max + L_INTERPOL1; /* allocate memory to normalized correlation vector */ corr = &corr_v[-t_min]; /* corr[t_min..t_max] */ /* Compute normalized correlation between target and filtered excitation */ E_GAIN_norm_corr(exc, xn, h, t_min, t_max, corr); /* find integer pitch */ max = corr[t0_min]; t0 = t0_min; for(i = t0_min + 1; i <= t0_max; i++) { if( corr[i] > max) { max = corr[i]; t0 = i; } } /* If first subframe and t0 >= t0_fr1, do not search fractionnal pitch */ if((i_subfr == 0) & (t0 >= t0_fr1)) { *pit_frac = 0; return(t0); } /* * Search fractionnal pitch with 1/4 subsample resolution. * Test the fractions around t0 and choose the one which maximizes * the interpolated normalized correlation. */ step = 1; /* 1/4 subsample resolution */ fraction = -3; if (((i_subfr == 0) & (t0 >= t0_fr2)) | (t0_fr2 == PIT_MIN)) { step = 2; /* 1/2 subsample resolution */ fraction = -2; } if (t0 == t0_min) { fraction = 0; } cor_max = E_GAIN_norm_corr_interpolate(&corr[t0], fraction); for (i = (fraction + step); i <= 3; i += step) { temp = E_GAIN_norm_corr_interpolate(&corr[t0], i); if (temp > cor_max) { cor_max = temp; fraction = i; } } /* limit the fraction value in the interval [0,1,2,3] */ if (fraction < 0) { fraction += 4; t0 -= 1; } *pit_frac = fraction; return (t0); } /* * E_GAIN_adaptive_codebook_excitation * * Parameters: * exc I/O: excitation buffer * T0 I: integer pitch lag * frac I: fraction of lag * L_subfr I: subframe size * * Function: * Compute the result of Word32 term prediction with fractional * interpolation of resolution 1/4. * * Returns: * interpolated signal (adaptive codebook excitation) */ void E_GAIN_adaptive_codebook_excitation(Word16 exc[], Word16 T0, Word32 frac, Word16 L_subfr) { Word32 i, j, k, L_sum; Word16 *x; x = &exc[-T0]; frac = -(frac); if (frac < 0) { frac = (frac + UP_SAMP); x--; } x = x - L_INTERPOL2 + 1; for (j = 0; j < L_subfr; j++) { L_sum = 0L; for (i = 0, k = ((UP_SAMP - 1) - frac); i < 2 * L_INTERPOL2; i++, k += UP_SAMP) { L_sum = L_sum + (x[i] * E_ROM_inter4_2[k]); } L_sum = (L_sum + 0x2000) >> 14; exc[j] = E_UTIL_saturate(L_sum); x++; } return; } /* * E_GAIN_pitch_sharpening * * Parameters: * x I/O: impulse response (or algebraic code) * pit_lag I: pitch lag * * Function: * Performs Pitch sharpening routine for one subframe. * pitch sharpening factor is 0.85 * * Returns: * void */ void E_GAIN_pitch_sharpening(Word16 *x, Word16 pit_lag) { Word32 L_tmp, i; for (i = pit_lag; i < L_SUBFR; i++) { L_tmp = x[i] << 15; L_tmp += x[i - pit_lag] * PIT_SHARP; x[i] = (Word16)((L_tmp + 0x4000) >> 15); } return; } void E_GAIN_f_pitch_sharpening(Float32 *x, Word32 pit_lag) { Word32 i; for (i = pit_lag; i < L_SUBFR; i++) { x[i] += x[i - pit_lag] * F_PIT_SHARP; } return; } /* * E_GAIN_voice_factor * * Parameters: * exc I: pitch excitation (Q_exc) * Q_exc I: exc format * gain_pit I: gain of pitch (Q14) * code I: Fixed codebook excitation (Q9) * gain_code I: gain of code (Q0) * * * Function: * Find the voicing factor (1=voice to -1=unvoiced) * Subframe length is L_SUBFR * * Returns: * factor (-1=unvoiced to 1=voiced) (Q15) */ Word32 E_GAIN_voice_factor(Word16 exc[], Word16 Q_exc, Word16 gain_pit, Word16 code[], Word16 gain_code) { Word32 i, L_tmp, tmp, exp, ener1, exp1, ener2, exp2; ener1 = E_UTIL_dot_product12(exc, exc, L_SUBFR, &exp1) >> 16; exp1 = exp1 - (Q_exc + Q_exc); L_tmp = (gain_pit * gain_pit) << 1; exp = E_UTIL_norm_l(L_tmp); tmp = (L_tmp << exp) >> 16; ener1 = (ener1 * tmp) >> 15; exp1 = (exp1 - exp) - 10; /* 10 -> gain_pit Q14 to Q9 */ ener2 = E_UTIL_dot_product12(code, code, L_SUBFR, &exp2) >> 16; exp = E_UTIL_norm_s(gain_code); tmp = gain_code << exp; tmp = (tmp * tmp) >> 15; ener2 = (ener2 * tmp) >> 15; exp2 = exp2 - (exp + exp); i = exp1 - exp2; if (i >= 0) { ener1 = ener1 >> 1; ener2 = ener2 >> (i + 1); } else { i = 1 - i; if (i < 32) { ener1 = ener1 >> i; } else { ener1 = 0; } ener2 = ener2 >> 1; } tmp = ener1 - ener2; ener1 = (ener1 + ener2) + 1; tmp = (tmp << 15) / ener1; return (tmp); } h323plus/plugins/audio/G.722.2/AMR-WB/dec_lpc.c0000644000175000017500000004772311341106231017217 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #include #include "typedef.h" #include "dec_util.h" #define M 16 /* Order of LP filter */ #define MP1 (M + 1) #define M16k 20 #define NC16k (M16k / 2) #define MU 10923 /* Prediction factor (1.0/3.0) in Q15 */ #define L_MEANBUF 3 #define ALPHA 29491 /* 0. 9 in Q15 */ #define ONE_ALPHA (32768-ALPHA) /* (1.0 - ALPHA) in Q15 */ #define ORDER 16 /* order of linear prediction filter */ #define ISF_GAP 128 /* 50 Hz */ #define INV_LENGTH 2731 /* 1/12 */ extern const Word16 D_ROM_dico1_isf[]; extern const Word16 D_ROM_dico2_isf[]; extern const Word16 D_ROM_dico21_isf_36b[]; extern const Word16 D_ROM_dico22_isf_36b[]; extern const Word16 D_ROM_dico23_isf_36b[]; extern const Word16 D_ROM_dico21_isf[]; extern const Word16 D_ROM_dico22_isf[]; extern const Word16 D_ROM_dico23_isf[]; extern const Word16 D_ROM_dico24_isf[]; extern const Word16 D_ROM_dico25_isf[]; extern const Word16 D_ROM_dico1_isf_noise[]; extern const Word16 D_ROM_dico2_isf_noise[]; extern const Word16 D_ROM_dico3_isf_noise[]; extern const Word16 D_ROM_dico4_isf_noise[]; extern const Word16 D_ROM_dico5_isf_noise[]; extern const Word16 D_ROM_mean_isf[]; extern const Word16 D_ROM_mean_isf_noise[]; extern const Word16 D_ROM_cos[]; /* * D_LPC_isf_reorder * * Parameters: * isf I/O: vector of isfs * min_dist I: quantized ISFs (in frequency domain) * n I: LPC order * * Function: * To make sure that the isfs are properly order and to keep a certain * minimum distance between consecutive isfs. * * Returns: * void */ static void D_LPC_isf_reorder(Word16 *isf, Word16 min_dist, Word16 n) { Word32 i, isf_min; isf_min = min_dist; for(i = 0; i < n - 1; i++) { if(isf[i] < isf_min) { isf[i] = (Word16)isf_min; } isf_min = isf[i] + min_dist; } return; } /* * D_LPC_isf_noise_d * * Parameters: * indice I: indices of the selected codebook entries * isf_q O: quantized ISFs (in frequency domain) * * Function: * Decoding of ISF parameters * * Returns: * void */ void D_LPC_isf_noise_d(Word16 *indice, Word16 *isf_q) { Word32 i; for(i = 0; i < 2; i++) { isf_q[i] = D_ROM_dico1_isf_noise[indice[0] * 2 + i]; } for(i = 0; i < 3; i++) { isf_q[i + 2] = D_ROM_dico2_isf_noise[indice[1] * 3 + i]; } for(i = 0; i < 3; i++) { isf_q[i + 5] = D_ROM_dico3_isf_noise[indice[2] * 3 + i]; } for(i = 0; i < 4; i++) { isf_q[i + 8] = D_ROM_dico4_isf_noise[indice[3] * 4 + i]; } for(i = 0; i < 4; i++) { isf_q[i + 12] = D_ROM_dico5_isf_noise[indice[4] * 4 + i]; } for(i = 0; i < ORDER; i++) { isf_q[i] = (Word16)(isf_q[i]+ D_ROM_mean_isf_noise[i]); } D_LPC_isf_reorder(isf_q, ISF_GAP, ORDER); return; } /* * D_LPC_isf_isp_conversion * * Parameters: * isp O: (Q15) isp[m] (range: -1<=val<1) * isf I: (Q15) isf[m] normalized (range: 0.0 <= val <= 0.5) * m I: LPC order * * Function: * Transformation isf to isp * * ISP are immitance spectral pair in cosine domain (-1 to 1). * ISF are immitance spectral pair in frequency domain (0 to 6400). * Returns: * void */ void D_LPC_isf_isp_conversion(Word16 isf[], Word16 isp[], Word16 m) { Word32 i, ind, offset, tmp; for(i = 0; i < m - 1; i++) { isp[i] = isf[i]; } isp[m - 1] = (Word16)(isf[m - 1] << 1); for(i = 0; i < m; i++) { ind = isp[i] >> 7; /* ind = b7-b15 of isf[i] */ offset = isp[i] & 0x007f; /* offset = b0-b6 of isf[i] */ /* isp[i] = table[ind]+ ((table[ind+1]-table[ind])*offset) / 128 */ tmp = (D_ROM_cos[ind + 1] - D_ROM_cos[ind]) * offset; isp[i] = (Word16)(D_ROM_cos[ind] + (tmp >> 7)); } return; } /* * D_LPC_isp_pol_get * * Parameters: * isp I: Immitance spectral pairs (cosine domaine) * f O: the coefficients of F1 or F2 * n I: no of coefficients (m/2) * k16 I: 16k flag * * Function: * Find the polynomial F1(z) or F2(z) from the ISPs. * This is performed by expanding the product polynomials: * * F1(z) = product ( 1 - 2 isp_i z^-1 + z^-2 ) * i=0,2,4,6,8 * F2(z) = product ( 1 - 2 isp_i z^-1 + z^-2 ) * i=1,3,5,7 * * where isp_i are the ISPs in the cosine domain. * * Returns: * void */ static void D_LPC_isp_pol_get(Word16 *isp, Word32 *f, Word32 n, Word16 k16) { Word32 i, j, t0, s1, s2; Word16 hi, lo; s1 = 8388608; s2 = 512; if(k16) { s1 >>= 2; s2 >>= 2; } /* All computation in Q23 */ f[0] = s1; /* f[0] = 1.0; in Q23 */ f[1] = isp[0] * (-s2); /* f[1] = -2.0*isp[0] in Q23 */ f += 2; /* Advance f pointer */ isp += 2; /* Advance isp pointer */ for(i = 2; i <= n; i++) { *f = f[ - 2]; for(j = 1; j < i; j++, f--) { D_UTIL_l_extract(f[- 1], &hi, &lo); t0 = D_UTIL_mpy_32_16(hi, lo, *isp); /* t0 = f[-1] * isp */ t0 = (t0 << 1); *f = (*f - t0); /* *f -= t0 */ *f = (*f + f[ - 2]); /* *f += f[-2] */ } *f = *f - (*isp * s2); /* *f -= isp << 8 */ f += i; /* Advance f pointer */ isp += 2; /* Advance isp pointer */ } return; } /* * D_LPC_isp_a_conversion * * Parameters: * isp I: (Q15) Immittance spectral pairs * a O: (Q12) Predictor coefficients (order = M) * m I: order of LP filter * * Function: * Convert ISPs to predictor coefficients a[] * * Returns: * void */ void D_LPC_isp_a_conversion(Word16 isp[], Word16 a[], Word32 adaptive_scaling, Word16 m) { Word32 j, i, nc, tmax, q, q_sug, r; Word32 f1[NC16k + 1], f2[NC16k]; Word32 t0; Word16 hi, lo; nc = m >> 1; if(nc > 8) { D_LPC_isp_pol_get(&isp[0], f1, nc, 1); for(i = 0; i <= nc; i++) { f1[i] = (f1[i] << 2); } } else { D_LPC_isp_pol_get(&isp[0], f1, nc, 0); } if(nc > 8) { D_LPC_isp_pol_get(&isp[1], f2, nc - 1, 1); for(i = 0; i <= nc - 1; i++) { f2[i] = (f2[i] << 2); } } else { D_LPC_isp_pol_get(&isp[1], f2, nc - 1, 0); } /* * Multiply F2(z) by (1 - z^-2) */ for(i = nc - 1; i > 1; i--) { f2[i] = f2[i] - f2[i - 2]; /* f2[i] -= f2[i-2]; */ } /* * Scale F1(z) by (1+isp[m-1]) and F2(z) by (1-isp[m-1]) */ for(i = 0; i < nc; i++) { /* f1[i] *= (1.0 + isp[M-1]); */ D_UTIL_l_extract(f1[i], &hi, &lo); t0 = D_UTIL_mpy_32_16(hi, lo, isp[m - 1]); f1[i] = f1[i] + t0; /* f2[i] *= (1.0 - isp[M-1]); */ D_UTIL_l_extract(f2[i], &hi, &lo); t0 = D_UTIL_mpy_32_16(hi, lo, isp[m - 1]); f2[i] = f2[i] - t0; } /* * A(z) = (F1(z)+F2(z))/2 * F1(z) is symmetric and F2(z) is antisymmetric */ /* a[0] = 1.0; */ a[0] = 4096; tmax = 1; for(i = 1, j = m - 1; i < nc; i++, j--) { /* a[i] = 0.5*(f1[i] + f2[i]); */ t0 = f1[i] + f2[i]; /* f1[i] + f2[i] */ tmax |= labs(t0); a[i] = (Word16)((t0 + 0x800) >> 12); /* from Q23 to Q12 and * 0.5 */ /* a[j] = 0.5*(f1[i] - f2[i]); */ t0 = (f1[i] - f2[i]); /* f1[i] - f2[i] */ tmax |= labs(t0); a[j] = (Word16)((t0 + 0x800) >> 12); /* from Q23 to Q12 and * 0.5 */ } /* rescale data if overflow has occured and reprocess the loop */ if (adaptive_scaling) { q = 4 - D_UTIL_norm_l(tmax); /* adaptive scaling enabled */ } else { q = 0; /* adaptive scaling disabled */ } if (q > 0) { q_sug = 12 + q; r = 1 << (q_sug - 1); for (i = 1, j = m - 1; i < nc; i++, j--) { /* a[i] = 0.5*(f1[i] + f2[i]); */ t0 = f1[i] + f2[i]; /* f1[i] + f2[i] */ a[i] = (Word16)((t0 + r) >> q_sug); /* from Q23 to Q12 and * 0.5 */ /* a[j] = 0.5*(f1[i] - f2[i]); */ t0 = f1[i] - f2[i]; /* f1[i] - f2[i] */ a[j] = (Word16)((t0 + r) >> q_sug); /* from Q23 to Q12 and * 0.5 */ } a[0] = (Word16)(a[0] >> q); } else { q_sug = 12; r = 1 << (q_sug - 1); q = 0; } /* a[NC] = 0.5*f1[NC]*(1.0 + isp[M-1]); */ D_UTIL_l_extract(f1[nc], &hi, &lo); t0 = D_UTIL_mpy_32_16(hi, lo, isp[m - 1]); t0 = f1[nc] + t0; a[nc] = (Word16)((t0 + r) >> q_sug); /* from Q23 to Q12 and * 0.5 */ /* a[m] = isp[m-1]; */ a[m] = (Word16)((isp[m - 1] >> (2 + q)) + 1); /* from Q15 to Q12 */ a[m] = (Word16)(a[m] >> 1); return; } /* * D_LPC_a_weight * * Parameters: * a I: LP filter coefficients * ap O: weighted LP filter coefficients * gamma I: weighting factor * m I: order of LP filter * * Function: * Weighting of LP filter coefficients, ap[i] = a[i] * (gamma^i). * * Returns: * void */ void D_LPC_a_weight(Word16 a[], Word16 ap[], Word16 gamma, Word16 m) { Word32 i, fac; ap[0] = a[0]; fac = gamma; for(i = 1; i < m; i++) { ap[i] = (Word16)(((a[i] * fac) + 0x4000) >> 15); fac = ((fac * gamma) + 0x4000) >> 15; } ap[m] = (Word16)(((a[m] * fac) + 0x4000) >> 15); return; } /* * D_LPC_isf_2s3s_decode * * Parameters: * indice I: quantisation indices * isf_q O: quantised ISFs in the cosine domain * past_isfq I/O: past ISF quantizer * isfold I: past quantised ISF * isf_buf O: isf buffer * bfi I: Bad frame indicator * * Function: * Decoding of ISF parameters. * * Returns: * void */ void D_LPC_isf_2s3s_decode(Word16 *indice, Word16 *isf_q, Word16 *past_isfq, Word16 *isfold, Word16 *isf_buf, Word16 bfi) { Word32 ref_isf[M]; Word32 L_tmp, i, j; Word16 tmp; if(bfi == 0) /* Good frame */ { for(i = 0; i < 9; i++) { isf_q[i] = D_ROM_dico1_isf[indice[0] * 9 + i]; } for(i = 0; i < 7; i++) { isf_q[i + 9] = D_ROM_dico2_isf[indice[1] * 7 + i]; } for(i = 0; i < 5; i++) { isf_q[i] = (Word16)(isf_q[i] + D_ROM_dico21_isf_36b[indice[2] * 5 + i]); } for(i = 0; i < 4; i++) { isf_q[i + 5] = (Word16)(isf_q[i + 5] + D_ROM_dico22_isf_36b[indice[3] * 4 + i]); } for(i = 0; i < 7; i++) { isf_q[i + 9] = (Word16)(isf_q[i + 9] + D_ROM_dico23_isf_36b[indice[4] * 7 + i]); } for(i = 0; i < ORDER; i++) { tmp = isf_q[i]; isf_q[i] = (Word16)((tmp + D_ROM_mean_isf[i]) + ((MU * past_isfq[i]) >> 15)); past_isfq[i] = tmp; } for(i = 0; i < M; i++) { for(j = (L_MEANBUF - 1); j > 0; j--) { isf_buf[j * M + i] = isf_buf[(j - 1) * M + i]; } isf_buf[i] = isf_q[i]; } } else { /* bad frame */ for(i = 0; i < M; i++) { L_tmp = D_ROM_mean_isf[i]; for(j = 0; j < L_MEANBUF; j++) { L_tmp = L_tmp + isf_buf[j * M + i]; } ref_isf[i] = (L_tmp + 0x1) >> 2; } /* use the past ISFs slightly shifted towards their mean */ for(i = 0; i < ORDER; i++) { isf_q[i] = (Word16)((((ALPHA * isfold[i]) >> 15) + ((ONE_ALPHA * ref_isf[i]) >> 15))); } /* estimate past quantized residual to be used in next frame */ for(i = 0; i < ORDER; i++) { /* predicted ISF */ L_tmp = ref_isf[i] + ((past_isfq[i] * MU) >> 15); /* past_isfq[i] *= 0.5 */ past_isfq[i] = (Word16)((isf_q[i] - L_tmp) >> 1); } } D_LPC_isf_reorder(isf_q, ISF_GAP, ORDER); return; } /* * D_LPC_isf_2s5s_decode * * Parameters: * indice I: quantization indices * isf_q O: quantized ISFs in the cosine domain * past_isfq I/O: past ISF quantizer * isfold I: past quantized ISF * isf_buf O: isf buffer * bfi I: Bad frame indicator * * Function: * Decoding of ISF parameters. * * Returns: * void */ void D_LPC_isf_2s5s_decode(Word16 *indice, Word16 *isf_q, Word16 *past_isfq, Word16 *isfold, Word16 *isf_buf, Word16 bfi) { Word32 ref_isf[M]; Word32 i, j, L_tmp; Word16 tmp; if(bfi == 0) /* Good frame */ { for(i = 0; i < 9; i++) { isf_q[i] = D_ROM_dico1_isf[indice[0] * 9 + i]; } for(i = 0; i < 7; i++) { isf_q[i + 9] = D_ROM_dico2_isf[indice[1] * 7 + i]; } for(i = 0; i < 3; i++) { isf_q[i] = (Word16)(isf_q[i] + D_ROM_dico21_isf[indice[2] * 3 + i]); } for(i = 0; i < 3; i++) { isf_q[i + 3] = (Word16)(isf_q[i + 3] + D_ROM_dico22_isf[indice[3] * 3 + i]); } for(i = 0; i < 3; i++) { isf_q[i + 6] = (Word16)(isf_q[i + 6] + D_ROM_dico23_isf[indice[4] * 3 + i]); } for(i = 0; i < 3; i++) { isf_q[i + 9] = (Word16)(isf_q[i + 9] + D_ROM_dico24_isf[indice[5] * 3 + i]); } for(i = 0; i < 4; i++) { isf_q[i + 12] = (Word16)(isf_q[i + 12] + D_ROM_dico25_isf[indice[6] * 4 + i]); } for(i = 0; i < ORDER; i++) { tmp = isf_q[i]; isf_q[i] = (Word16)((tmp + D_ROM_mean_isf[i]) + ((MU * past_isfq[i]) >> 15)); past_isfq[i] = tmp; } for(i = 0; i < M; i++) { for(j = (L_MEANBUF - 1); j > 0; j--) { isf_buf[j * M + i] = isf_buf[(j - 1) * M + i]; } isf_buf[i] = isf_q[i]; } } else { /* bad frame */ for(i = 0; i < M; i++) { L_tmp = D_ROM_mean_isf[i]; for(j = 0; j < L_MEANBUF; j++) { L_tmp = L_tmp + isf_buf[j * M + i]; } ref_isf[i] = (L_tmp + 0x1) >> 2; } /* use the past ISFs slightly shifted towards their mean */ for(i = 0; i < ORDER; i++) { isf_q[i] = (Word16)(((ALPHA * isfold[i]) >> 15) + ((ONE_ALPHA * ref_isf[i]) >> 15)); } /* estimate past quantized residual to be used in next frame */ for(i = 0; i < ORDER; i++) { /* predicted ISF */ L_tmp = ref_isf[i] + ((past_isfq[i] * MU) >> 15); /* past_isfq[i] *= 0.5 */ past_isfq[i] = (Word16)((isf_q[i] - L_tmp) >> 1); } } D_LPC_isf_reorder(isf_q, ISF_GAP, ORDER); return; } /* * D_LPC_int_isp_find * * Parameters: * isp_old I: isps from past frame * isp_new I: isps from present frame * frac I: (Q15) fraction for 3 first subfr * Az O: LP coefficients in 4 subframes * * Function: * Find the interpolated ISP parameters for all subframes. * * Returns: * void */ void D_LPC_int_isp_find(Word16 isp_old[], Word16 isp_new[], const Word16 frac[], Word16 Az[]) { Word32 tmp, i, k, fac_old, fac_new; Word16 isp[M]; for(k = 0; k < 3; k++) { fac_new = frac[k]; fac_old = (32767 - fac_new) + 1; /* 1.0 - fac_new */ for(i = 0; i < M; i++) { tmp = isp_old[i] * fac_old; tmp += isp_new[i] * fac_new; isp[i] = (Word16)((tmp + 0x4000) >> 15); } D_LPC_isp_a_conversion(isp, Az, 0, M); Az += MP1; } /* 4th subframe: isp_new (frac=1.0) */ D_LPC_isp_a_conversion(isp_new, Az, 0, M); return; } /* * D_LPC_isf_extrapolation * * Parameters: * HfIsf I/O: ISF vector * * Function: * Conversion of 16th-order 12.8kHz ISF vector * into 20th-order 16kHz ISF vector * * Returns: * void */ void D_LPC_isf_extrapolation(Word16 HfIsf[]) { Word32 IsfDiff[M - 2]; Word32 IsfCorr[3]; Word32 tmp, tmp2, tmp3, mean, i; Word32 MaxCorr, exp, exp2, coeff; Word16 hi, lo; HfIsf[M16k - 1] = HfIsf[M - 1]; /* Difference vector */ for(i = 1; i < M - 1; i++) { IsfDiff[i - 1] = HfIsf[i] - HfIsf[i - 1]; } tmp = 0; /* Mean of difference vector */ for(i = 3; i < (M - 1); i++) { tmp = tmp + (IsfDiff[i - 1] * INV_LENGTH); } mean = (tmp + 0x4000) >> 15; IsfCorr[0] = 0; IsfCorr[1] = 0; IsfCorr[2] = 0; tmp = 0; for(i = 0; i < M - 2; i++) { if(IsfDiff[i] > tmp) { tmp = IsfDiff[i]; } } exp = D_UTIL_norm_s((Word16)tmp); for(i = 0; i < M - 2; i++) { IsfDiff[i] = IsfDiff[i] << exp; } mean = mean << exp; for(i = 7; i < M - 2; i++) { tmp2 = IsfDiff[i] - mean; tmp3 = IsfDiff[i - 2] - mean; tmp = (tmp2 * tmp3) << 1; D_UTIL_l_extract(tmp, &hi, &lo); tmp = D_UTIL_mpy_32(hi, lo, hi, lo); IsfCorr[0] = (IsfCorr[0] + tmp); } for(i = 7; i < M - 2; i++) { tmp2 = IsfDiff[i] - mean; tmp3 = IsfDiff[i - 3] - mean; tmp = (tmp2 * tmp3) << 1; D_UTIL_l_extract(tmp, &hi, &lo); tmp = D_UTIL_mpy_32(hi, lo, hi, lo); IsfCorr[1] = (IsfCorr[1] + tmp); } for(i = 7; i < M - 2; i++) { tmp2 = IsfDiff[i] - mean; tmp3 = IsfDiff[i - 4] - mean; tmp = (tmp2 * tmp3) << 1; D_UTIL_l_extract(tmp, &hi, &lo); tmp = D_UTIL_mpy_32(hi, lo, hi, lo); IsfCorr[2] = (IsfCorr[2] + tmp); } if(IsfCorr[0] > IsfCorr[1]) { MaxCorr = 0; } else { MaxCorr = 1; } if(IsfCorr[2] > IsfCorr[MaxCorr]) { MaxCorr = 2; } MaxCorr = MaxCorr + 1; /* Maximum correlation of difference vector */ for(i = M - 1; i < (M16k - 1); i++) { tmp = (HfIsf[i - 1 - MaxCorr] - HfIsf[i - 2 - MaxCorr]); HfIsf[i] = (Word16)(HfIsf[i - 1] + tmp); } /* tmp=7965+(HfIsf[2]-HfIsf[3]-HfIsf[4])/6; */ tmp = HfIsf[4] + HfIsf[3]; tmp = HfIsf[2] - tmp; tmp = (tmp * 5461) >> 15; tmp = tmp + 20390; if(tmp > 19456) { /* Maximum value of ISF should be at most 7600 Hz */ tmp = 19456; } tmp = tmp - HfIsf[M - 2]; tmp2 = HfIsf[M16k - 2] - HfIsf[M - 2]; exp2 = D_UTIL_norm_s((Word16)tmp2); exp = D_UTIL_norm_s((Word16)tmp); exp = exp - 1; tmp = tmp << exp; tmp2 = tmp2 << exp2; coeff = (tmp << 15) / tmp2; /* Coefficient for stretching the ISF vector */ exp = exp2 - exp; if(exp >= 0) { for(i = M - 1; i < M16k - 1; i++) { tmp = ((HfIsf[i] - HfIsf[i - 1]) * coeff) >> 15; IsfDiff[i - (M - 1)] = tmp << exp; } } else { exp = 15 - exp; for(i = M - 1; i < M16k - 1; i++) { IsfDiff[i - (M - 1)] = ((HfIsf[i] - HfIsf[i - 1]) * coeff) >> exp; } } for(i = M; i < (M16k - 1); i++) { /* The difference between ISF(n) and ISF(n-2) should be at least 500 Hz */ tmp = ((IsfDiff[i - (M - 1)] + IsfDiff[i - M]) - 1280); if(tmp < 0) { if(IsfDiff[i - (M - 1)] > IsfDiff[i - M]) { IsfDiff[i - M] = (1280 - IsfDiff[i - (M - 1)]); } else { IsfDiff[i - (M - 1)] = (1280 - IsfDiff[i - M]); } } } for(i = M - 1; i < M16k - 1; i++) { HfIsf[i] = (Word16)(HfIsf[i - 1] + IsfDiff[i - (M - 1)]); } for(i = 0; i < M16k - 1; i++) { HfIsf[i] = (Word16)((HfIsf[i] * 13107) >> 14); /* Scale the ISF vector correctly for 16000 kHz */ } D_LPC_isf_isp_conversion(HfIsf, HfIsf, M16k); return; } h323plus/plugins/audio/G.722.2/AMR-WB/dec_util.c0000644000175000017500000007443011341106231017411 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #include #include #include "typedef.h" #include "dec_main.h" #include "dec_lpc.h" #define MAX_16 (Word16)0x7FFF #define MIN_16 (Word16)0x8000 #define L_SUBFR 64 /* Subframe size */ #define L_SUBFR16k 80 /* Subframe size at 16kHz */ #define M16k 20 /* Order of LP filter */ #define PREEMPH_FAC 22282 /* preemphasis factor (0.68 in Q15) */ #define FAC4 4 #define FAC5 5 #define UP_FAC 20480 /* 5/4 in Q14 */ #define INV_FAC5 6554 /* 1/5 in Q15 */ #define NB_COEF_UP 12 #define L_FIR 31 #define MODE_7k 0 #define MODE_24k 8 extern const Word16 D_ROM_pow2[]; extern const Word16 D_ROM_isqrt[]; extern const Word16 D_ROM_log2[]; extern const Word16 D_ROM_fir_up[]; extern const Word16 D_ROM_fir_6k_7k[]; extern const Word16 D_ROM_fir_7k[]; extern const Word16 D_ROM_hp_gain[]; #ifdef WIN32 #pragma warning( disable : 4310) #endif /* * D_UTIL_random * * Parameters: * seed I/O: seed for random number * * Function: * Signed 16 bits random generator. * * Returns: * random number */ Word16 D_UTIL_random(Word16 *seed) { /*static Word16 seed = 21845;*/ *seed = (Word16)(*seed * 31821L + 13849L); return(*seed); } /* * D_UTIL_pow2 * * Parameters: * exponant I: (Q0) Integer part. (range: 0 <= val <= 30) * fraction I: (Q15) Fractionnal part. (range: 0.0 <= val < 1.0) * * Function: * L_x = pow(2.0, exponant.fraction) (exponant = interger part) * = pow(2.0, 0.fraction) << exponant * * Algorithm: * * The function Pow2(L_x) is approximated by a table and linear * interpolation. * * 1 - i = bit10 - b15 of fraction, 0 <= i <= 31 * 2 - a = bit0 - b9 of fraction * 3 - L_x = table[i] << 16 - (table[i] - table[i + 1]) * a * 2 * 4 - L_x = L_x >> (30-exponant) (with rounding) * * Returns: * range 0 <= val <= 0x7fffffff */ Word32 D_UTIL_pow2(Word16 exponant, Word16 fraction) { Word32 L_x, tmp, i, exp; Word16 a; L_x = fraction * 32; /* L_x = fraction<<6 */ i = L_x >> 15; /* Extract b10-b16 of fraction */ a = (Word16)(L_x); /* Extract b0-b9 of fraction */ a = (Word16)(a & (Word16)0x7fff); L_x = D_ROM_pow2[i] << 16; /* table[i] << 16 */ tmp = D_ROM_pow2[i] - D_ROM_pow2[i + 1]; /* table[i] - table[i+1] */ tmp = L_x - ((tmp * a) << 1); /* L_x -= tmp*a*2 */ exp = 30 - exponant; if (exp <= 31) { L_x = tmp >> exp; if ((1 << (exp - 1)) & tmp) { L_x++; } } else { L_x = 0; } return(L_x); } /* * D_UTIL_norm_l * * Parameters: * L_var1 I: 32 bit Word32 signed integer (Word32) whose value * falls in the range 0x8000 0000 <= var1 <= 0x7fff ffff. * * Function: * Produces the number of left shifts needed to normalize the 32 bit * variable L_var1 for positive values on the interval with minimum of * 1073741824 and maximum of 2147483647, and for negative values on * the interval with minimum of -2147483648 and maximum of -1073741824; * in order to normalize the result, the following operation must be done : * norm_L_var1 = L_shl(L_var1,norm_l(L_var1)). * * Returns: * 16 bit Word16 signed integer (Word16) whose value falls in the range * 0x0000 0000 <= var_out <= 0x0000 001f. */ Word16 D_UTIL_norm_l(Word32 L_var1) { Word16 var_out; if(L_var1 == 0) { var_out = 0; } else { if(L_var1 == (Word32)0xffffffffL) { var_out = 31; } else { if(L_var1 < 0) { L_var1 = ~L_var1; } for(var_out = 0; L_var1 < (Word32)0x40000000L; var_out++) { L_var1 <<= 1; } } } return(var_out); } /* * D_UTIL_norm_s * * Parameters: * L_var1 I: 32 bit Word32 signed integer (Word32) whose value * falls in the range 0xffff 8000 <= var1 <= 0x0000 7fff. * * Function: * Produces the number of left shift needed to normalize the 16 bit * variable var1 for positive values on the interval with minimum * of 16384 and maximum of 32767, and for negative values on * the interval with minimum of -32768 and maximum of -16384. * * Returns: * 16 bit Word16 signed integer (Word16) whose value falls in the range * 0x0000 0000 <= var_out <= 0x0000 000f. */ Word16 D_UTIL_norm_s(Word16 var1) { Word16 var_out; if(var1 == 0) { var_out = 0; } else { if(var1 == -1) { var_out = 15; } else { if(var1 < 0) { var1 = (Word16)~var1; } for(var_out = 0; var1 < 0x4000; var_out++) { var1 <<= 1; } } } return(var_out); } /* * D_UTIL_dot_product12 * * Parameters: * x I: 12bit x vector * y I: 12bit y vector * lg I: vector length * exp O: exponent of result (0..+30) * * Function: * Compute scalar product of using accumulator. * The result is normalized (in Q31) with exponent (0..30). * * Returns: * Q31 normalised result (1 < val <= -1) */ Word32 D_UTIL_dot_product12(Word16 x[], Word16 y[], Word16 lg, Word16 *exp) { Word32 sum, i, sft; sum = 0L; for(i = 0; i < lg; i++) { sum += x[i] * y[i]; } sum = (sum << 1) + 1; /* Normalize acc in Q31 */ sft = D_UTIL_norm_l(sum); sum = sum << sft; *exp = (Word16)(30 - sft); /* exponent = 0..30 */ return(sum); } /* * D_UTIL_normalised_inverse_sqrt * * Parameters: * frac I/O: (Q31) normalized value (1.0 < frac <= 0.5) * exp I/O: exponent (value = frac x 2^exponent) * * Function: * Compute 1/sqrt(value). * If value is negative or zero, result is 1 (frac=7fffffff, exp=0). * * The function 1/sqrt(value) is approximated by a table and linear * interpolation. * 1. If exponant is odd then shift fraction right once. * 2. exponant = -((exponant - 1) >> 1) * 3. i = bit25 - b30 of fraction, 16 <= i <= 63 ->because of normalization. * 4. a = bit10 - b24 * 5. i -= 16 * 6. fraction = table[i]<<16 - (table[i] - table[i+1]) * a * 2 * * Returns: * void */ void D_UTIL_normalised_inverse_sqrt(Word32 *frac, Word16 *exp) { Word32 i, tmp; Word16 a; if(*frac <= (Word32)0) { *exp = 0; *frac = 0x7fffffffL; return; } if((*exp & 0x1) == 1) /* If exponant odd -> shift right */ { *frac = *frac >> 1; } *exp = (Word16)(-((*exp - 1) >> 1)); *frac = *frac >> 9; i = *frac >>16; /* Extract b25-b31 */ *frac = *frac >> 1; a = (Word16)(*frac); /* Extract b10-b24 */ a = (Word16)(a & (Word16)0x7fff); i = i - 16; *frac = D_ROM_isqrt[i] << 16; /* table[i] << 16 */ tmp = D_ROM_isqrt[i] - D_ROM_isqrt[i + 1]; /* table[i] - table[i+1]) */ *frac = *frac - ((tmp * a) << 1); /* frac -= tmp*a*2 */ return; } /* * D_UTIL_inverse_sqrt * * Parameters: * L_x I/O: (Q0) input value (range: 0<=val<=7fffffff) * * Function: * Compute 1/sqrt(L_x). * If value is negative or zero, result is 1 (7fffffff). * * The function 1/sqrt(value) is approximated by a table and linear * interpolation. * 1. Normalization of L_x * 2. call Normalised_Inverse_sqrt(L_x, exponant) * 3. L_y = L_x << exponant * * Returns: * (Q31) output value (range: 0 <= val < 1) */ Word32 D_UTIL_inverse_sqrt(Word32 L_x) { Word32 L_y; Word16 exp; exp = D_UTIL_norm_l(L_x); L_x = (L_x << exp); /* L_x is normalized */ exp = (Word16)(31 - exp); D_UTIL_normalised_inverse_sqrt(&L_x, &exp); if(exp < 0) { L_y = (L_x >> -exp); /* denormalization */ } else { L_y = (L_x << exp); /* denormalization */ } return(L_y); } /* * D_UTIL_normalised_log2 * * Parameters: * L_x I: input value (normalized) * exp I: norm_l (L_x) * exponent O: Integer part of Log2. (range: 0<=val<=30) * fraction O: Fractional part of Log2. (range: 0<=val<1) * * Function: * Computes log2(L_x, exp), where L_x is positive and * normalized, and exp is the normalisation exponent * If L_x is negative or zero, the result is 0. * * The function Log2(L_x) is approximated by a table and linear * interpolation. The following steps are used to compute Log2(L_x) * * 1. exponent = 30 - norm_exponent * 2. i = bit25 - b31 of L_x; 32 <= i <= 63 (because of normalization). * 3. a = bit10 - b24 * 4. i -= 32 * 5. fraction = table[i] << 16 - (table[i] - table[i + 1]) * a * 2 * * * Returns: * void */ static void D_UTIL_normalised_log2(Word32 L_x, Word16 exp, Word16 *exponent, Word16 *fraction) { Word32 i, a, tmp; Word32 L_y; if (L_x <= 0) { *exponent = 0; *fraction = 0; return; } *exponent = (Word16)(30 - exp); L_x = L_x >> 10; i = L_x >> 15; /* Extract b25-b31 */ a = L_x; /* Extract b10-b24 of fraction */ a = a & 0x00007fff; i = i - 32; L_y = D_ROM_log2[i] << 16; /* table[i] << 16 */ tmp = D_ROM_log2[i] - D_ROM_log2[i + 1]; /* table[i] - table[i+1] */ L_y = L_y - ((tmp * a) << 1); /* L_y -= tmp*a*2 */ *fraction = (Word16)(L_y >> 16); return; } /* * D_UTIL_log2 * * Parameters: * L_x I: input value * exponent O: Integer part of Log2. (range: 0<=val<=30) * fraction O: Fractional part of Log2. (range: 0<=val<1) * * Function: * Computes log2(L_x), where L_x is positive. * If L_x is negative or zero, the result is 0. * * Returns: * void */ void D_UTIL_log2(Word32 L_x, Word16 *exponent, Word16 *fraction) { Word16 exp; exp = D_UTIL_norm_l(L_x); D_UTIL_normalised_log2((L_x <>1 * * Function: * Extract from a 32 bit integer two 16 bit DPF. * * Returns: * void */ void D_UTIL_l_extract(Word32 L_32, Word16 *hi, Word16 *lo) { *hi = (Word16)(L_32 >> 16); *lo = (Word16)((L_32 >> 1) - (*hi * 32768)); return; } /* * D_UTIL_mpy_32_16 * * Parameters: * hi I: hi part of 32 bit number * lo I: lo part of 32 bit number * n I: 16 bit number * * Function: * Multiply a 16 bit integer by a 32 bit (DPF). The result is divided * by 2^15. * * L_32 = (hi1*lo2)<<1 + ((lo1*lo2)>>15)<<1 * * Returns: * 32 bit result */ Word32 D_UTIL_mpy_32_16(Word16 hi, Word16 lo, Word16 n) { Word32 L_32; L_32 = hi * n; L_32 += (lo * n) >> 15; return(L_32 << 1); } /* * D_UTIL_mpy_32 * * Parameters: * hi1 I: hi part of first number * lo1 I: lo part of first number * hi2 I: hi part of second number * lo2 I: lo part of second number * * Function: * Multiply two 32 bit integers (DPF). The result is divided by 2^31 * * L_32 = (hi1*lo2)<<1 + ((lo1*lo2)>>15)<<1 * * Returns: * 32 bit result */ Word32 D_UTIL_mpy_32(Word16 hi1, Word16 lo1, Word16 hi2, Word16 lo2) { Word32 L_32; L_32 = hi1 * hi2; L_32 += (hi1 * lo2) >> 15; L_32 += (lo1 * hi2) >> 15; return(L_32 << 1); } /* * D_UTIL_saturate * * Parameters: * inp I: 32-bit number * * Function: * Saturation to 16-bit number * * Returns: * 16-bit number */ Word16 D_UTIL_saturate(Word32 inp) { Word16 out; if ((inp < MAX_16) & (inp > MIN_16)) { out = (Word16)inp; } else { if (inp > 0) { out = MAX_16; } else { out = MIN_16; } } return(out); } /* * D_UTIL_signal_up_scale * * Parameters: * x I/O: signal to scale * lg I: size of x[] * exp I: exponent: x = round(x << exp) * * Function: * Scale signal up to get maximum of dynamic. * * Returns: * 32 bit result */ void D_UTIL_signal_up_scale(Word16 x[], Word16 lg, Word16 exp) { Word32 i, tmp; for (i = 0; i < lg; i++) { tmp = x[i] << exp; x[i] = D_UTIL_saturate(tmp); } return; } /* * D_UTIL_signal_down_scale * * Parameters: * x I/O: signal to scale * lg I: size of x[] * exp I: exponent: x = round(x << exp) * * Function: * Scale signal up to get maximum of dynamic. * * Returns: * 32 bit result */ void D_UTIL_signal_down_scale(Word16 x[], Word16 lg, Word16 exp) { Word32 i, tmp; for(i = 0; i < lg; i++) { tmp = x[i] << 16; tmp = tmp >> exp; x[i] = (Word16)((tmp + 0x8000) >> 16); } return; } /* * D_UTIL_deemph_32 * * Parameters: * x_hi I: input signal (bit31..16) * x_lo I: input signal (bit15..4) * y O: output signal (x16) * mu I: (Q15) deemphasis factor * L I: vector size * mem I/O: memory (y[-1]) * * Function: * Filtering through 1/(1-mu z^-1) * * Returns: * void */ static void D_UTIL_deemph_32(Word16 x_hi[], Word16 x_lo[], Word16 y[], Word16 mu, Word16 L, Word16 *mem) { Word32 i, fac; Word32 tmp; fac = mu >> 1; /* Q15 --> Q14 */ /* L_tmp = hi<<16 + lo<<4 */ tmp = (x_hi[0] << 12) + x_lo[0]; tmp = (tmp << 6) + (*mem * fac); tmp = (tmp + 0x2000) >> 14; y[0] = D_UTIL_saturate(tmp); for(i = 1; i < L; i++) { tmp = (x_hi[i] << 12) + x_lo[i]; tmp = (tmp << 6) + (y[i - 1] * fac); tmp = (tmp + 0x2000) >> 14; y[i] = D_UTIL_saturate(tmp); } *mem = y[L - 1]; return; } /* * D_UTIL_synthesis_32 * * Parameters: * a I: LP filter coefficients * m I: order of LP filter * exc I: excitation * Qnew I: exc scaling = 0(min) to 8(max) * sig_hi O: synthesis high * sig_lo O: synthesis low * lg I: size of filtering * * Function: * Perform the synthesis filtering 1/A(z). * * Returns: * void */ static void D_UTIL_synthesis_32(Word16 a[], Word16 m, Word16 exc[], Word16 Qnew, Word16 sig_hi[], Word16 sig_lo[], Word16 lg) { Word32 i, j, a0, s; Word32 tmp, tmp2; /* See if a[0] is scaled */ s = D_UTIL_norm_s((Word16)a[0]) - 2; a0 = a[0] >> (4 + Qnew); /* input / 16 and >>Qnew */ /* Do the filtering. */ for(i = 0; i < lg; i++) { tmp = 0; for(j = 1; j <= m; j++) { tmp -= sig_lo[i - j] * a[j]; } tmp = tmp >> (15 - 4); /* -4 : sig_lo[i] << 4 */ tmp2 = exc[i] * a0; for(j = 1; j <= m; j++) { tmp2 -= sig_hi[i - j] * a[j]; } tmp += tmp2 << 1; tmp <<= s; /* sig_hi = bit16 to bit31 of synthesis */ sig_hi[i] = (Word16)(tmp >> 13); /* sig_lo = bit4 to bit15 of synthesis */ sig_lo[i] = (Word16)((tmp >> 1) - (sig_hi[i] * 4096)); } return; } /* * D_UTIL_hp50_12k8 * * Parameters: * signal I/O: signal * lg I: lenght of signal * mem I/O: filter memory [6] * * Function: * 2nd order high pass filter with cut off frequency at 50 Hz. * * Algorithm: * * y[i] = b[0]*x[i] + b[1]*x[i-1] + b[2]*x[i-2] * + a[1]*y[i-1] + a[2]*y[i-2]; * * b[3] = {0.989501953f, -1.979003906f, 0.989501953f}; * a[3] = {1.000000000F, 1.978881836f,-0.966308594f}; * * * Returns: * void */ static void D_UTIL_hp50_12k8(Word16 signal[], Word16 lg, Word16 mem[]) { Word32 i, L_tmp; Word16 y2_hi, y2_lo, y1_hi, y1_lo, x0, x1, x2; y2_hi = mem[0]; y2_lo = mem[1]; y1_hi = mem[2]; y1_lo = mem[3]; x0 = mem[4]; x1 = mem[5]; for(i = 0; i < lg; i++) { x2 = x1; x1 = x0; x0 = signal[i]; /* y[i] = b[0]*x[i] + b[1]*x[i-1] + b140[2]*x[i-2] */ /* + a[1]*y[i-1] + a[2] * y[i-2]; */ L_tmp = 8192L; /* rounding to maximise precision */ L_tmp = L_tmp + (y1_lo * 16211); L_tmp = L_tmp + (y2_lo * (-8021)); L_tmp = L_tmp >> 14; L_tmp = L_tmp + (y1_hi * 32422); L_tmp = L_tmp + (y2_hi * (-16042)); L_tmp = L_tmp + (x0 * 8106); L_tmp = L_tmp + (x1 * (-16212)); L_tmp = L_tmp + (x2 * 8106); L_tmp = L_tmp << 2; /* coeff Q11 --> Q14 */ y2_hi = y1_hi; y2_lo = y1_lo; D_UTIL_l_extract(L_tmp, &y1_hi, &y1_lo); L_tmp = (L_tmp + 0x4000) >> 15; /* coeff Q14 --> Q15 with saturation */ signal[i] = D_UTIL_saturate(L_tmp); } mem[0] = y2_hi; mem[1] = y2_lo; mem[2] = y1_hi; mem[3] = y1_lo; mem[4] = x0; mem[5] = x1; return; } /* * D_UTIL_interpol * * Parameters: * x I: input vector * fir I: filter coefficient * frac I: fraction (0..resol) * up_samp I: resolution * nb_coef I: number of coefficients * * Function: * Fractional interpolation of signal at position (frac/up_samp) * * Returns: * result of interpolation */ Word16 D_UTIL_interpol(Word16 *x, Word16 const *fir, Word16 frac, Word16 resol, Word16 nb_coef) { Word32 i, k; Word32 sum; x = x - nb_coef + 1; sum = 0L; for(i = 0, k = ((resol - 1) - frac); i < 2 * nb_coef; i++, k = (Word16)(k + resol)) { sum = sum + (x[i] * fir[k]); } if((sum < 536846336) & (sum > -536879104)) { sum = (sum + 0x2000) >> 14; } else if(sum > 536846336) { sum = 32767; } else { sum = -32768; } return((Word16)sum); /* saturation can occur here */ } /* * D_UTIL_up_samp * * Parameters: * res_d I: signal to upsampling * res_u O: upsampled output * L_frame I: length of output * * Function: * Upsampling * * Returns: * void */ static void D_UTIL_up_samp(Word16 *sig_d, Word16 *sig_u, Word16 L_frame) { Word32 pos, i, j; Word16 frac; pos = 0; /* position with 1/5 resolution */ for(j = 0; j < L_frame; j++) { i = (pos * INV_FAC5) >> 15; /* integer part = pos * 1/5 */ frac = (Word16)(pos - ((i << 2) + i)); /* frac = pos - (pos/5)*5 */ sig_u[j] = D_UTIL_interpol(&sig_d[i], D_ROM_fir_up, frac, FAC5, NB_COEF_UP); pos = pos + FAC4; /* position + 4/5 */ } return; } /* * D_UTIL_oversamp_16k * * Parameters: * sig12k8 I: signal to oversampling * lg I: length of input * sig16k O: oversampled signal * mem I/O: memory (2*12) * * Function: * Oversampling from 12.8kHz to 16kHz * * Returns: * void */ static void D_UTIL_oversamp_16k(Word16 sig12k8[], Word16 lg, Word16 sig16k[], Word16 mem[]) { Word16 lg_up; Word16 signal[L_SUBFR + (2 * NB_COEF_UP)]; memcpy(signal, mem, (2 * NB_COEF_UP) * sizeof(Word16)); memcpy(signal + (2 * NB_COEF_UP), sig12k8, lg * sizeof(Word16)); lg_up = (Word16)(((lg * UP_FAC) >> 15) << 1); D_UTIL_up_samp(signal + NB_COEF_UP, sig16k, lg_up); memcpy(mem, signal + lg, (2 * NB_COEF_UP) * sizeof(Word16)); return; } /* * D_UTIL_hp400_12k8 * * Parameters: * signal I/O: signal * lg I: lenght of signal * mem I/O: filter memory [6] * * Function: * 2nd order high pass filter with cut off frequency at 400 Hz. * * Algorithm: * * y[i] = b[0]*x[i] + b[1]*x[i-1] + b[2]*x[i-2] * + a[1]*y[i-1] + a[2]*y[i-2]; * * b[3] = {0.893554687, -1.787109375, 0.893554687}; * a[3] = {1.000000000, 1.787109375, -0.864257812}; * * * Returns: * void */ void D_UTIL_hp400_12k8(Word16 signal[], Word16 lg, Word16 mem[]) { Word32 i, L_tmp; Word16 y2_hi, y2_lo, y1_hi, y1_lo, x0, x1, x2; y2_hi = mem[0]; y2_lo = mem[1]; y1_hi = mem[2]; y1_lo = mem[3]; x0 = mem[4]; x1 = mem[5]; for(i = 0; i < lg; i++) { x2 = x1; x1 = x0; x0 = signal[i]; /* y[i] = b[0]*x[i] + b[1]*x[i-1] + b140[2]*x[i-2] */ /* + a[1]*y[i-1] + a[2] * y[i-2]; */ L_tmp = 8192L + (y1_lo * 29280); L_tmp = L_tmp + (y2_lo * (-14160)); L_tmp = (L_tmp >> 14); L_tmp = L_tmp + (y1_hi * 58560); L_tmp = L_tmp + (y2_hi * (-28320)); L_tmp = L_tmp + (x0 * 1830); L_tmp = L_tmp + (x1 * (-3660)); L_tmp = L_tmp + (x2 * 1830); L_tmp = (L_tmp << 1); /* coeff Q12 --> Q13 */ y2_hi = y1_hi; y2_lo = y1_lo; D_UTIL_l_extract(L_tmp, &y1_hi, &y1_lo); /* signal is divided by 16 to avoid overflow in energy computation */ signal[i] = (Word16)((L_tmp + 0x8000) >> 16); } mem[0] = y2_hi; mem[1] = y2_lo; mem[2] = y1_hi; mem[3] = y1_lo; mem[4] = x0; mem[5] = x1; return; } /* * D_UTIL_synthesis * * Parameters: * a I: LP filter coefficients * m I: order of LP filter * x I: input signal * y O: output signal * lg I: size of filtering * mem I/O: initial filter states * update_m I: update memory flag * * Function: * Perform the synthesis filtering 1/A(z). * * Returns: * void */ static void D_UTIL_synthesis(Word16 a[], Word16 m, Word16 x[], Word16 y[], Word16 lg, Word16 mem[], Word16 update) { Word32 i, j, tmp, s; Word16 y_buf[L_SUBFR16k + M16k], a0; Word16 *yy; yy = &y_buf[m]; /* See if a[0] is scaled */ s = D_UTIL_norm_s(a[0]) - 2; /* copy initial filter states into synthesis buffer */ memcpy(y_buf, mem, m * sizeof(Word16)); a0 = (Word16)(a[0] >> 1); /* input / 2 */ /* Do the filtering. */ for(i = 0; i < lg; i++) { tmp = x[i] * a0; for(j = 1; j <= m; j++) { tmp -= a[j] * yy[i - j]; } tmp <<= s; y[i] = yy[i] = (Word16)((tmp + 0x800) >> 12); } /* Update memory if required */ if(update) { memcpy(mem, &yy[lg - m], m * sizeof(Word16)); } return; } /* * D_UTIL_bp_6k_7k * * Parameters: * signal I/O: signal * lg I: lenght of signal * mem I/O: filter memory [4] * * Function: * 15th order band pass 6kHz to 7kHz FIR filter. * * Returns: * void */ void D_UTIL_bp_6k_7k(Word16 signal[], Word16 lg, Word16 mem[]) { Word32 x[L_SUBFR16k + (L_FIR - 1)]; Word32 i, j, tmp; for(i = 0; i < (L_FIR - 1); i++) { x[i] = (Word16)mem[i]; /* gain of filter = 4 */ } for(i = 0; i < lg; i++) { x[i + L_FIR - 1] = signal[i] >> 2; /* gain of filter = 4 */ } for(i = 0; i < lg; i++) { tmp = 0; for(j = 0; j < L_FIR; j++) { tmp += x[i + j] * D_ROM_fir_6k_7k[j]; } signal[i] = (Word16)((tmp + 0x4000) >> 15); } for(i = 0; i < (L_FIR - 1); i++) { mem[i] = (Word16)x[lg + i]; /* gain of filter = 4 */ } return; } /* * D_UTIL_hp_7k * * Parameters: * signal I/O: ISF vector * lg I: length of signal * mem I/O: memory (30) * * Function: * 15th order high pass 7kHz FIR filter * * Returns: * void */ static void D_UTIL_hp_7k(Word16 signal[], Word16 lg, Word16 mem[]) { Word32 i, j, tmp; Word16 x[L_SUBFR16k + (L_FIR - 1)]; memcpy(x, mem, (L_FIR - 1) * sizeof(Word16)); memcpy(&x[L_FIR - 1], signal, lg * sizeof(Word16)); for(i = 0; i < lg; i++) { tmp = 0; for(j = 0; j < L_FIR; j++) { tmp += x[i + j] * D_ROM_fir_7k[j]; } signal[i] = (Word16)((tmp + 0x4000) >> 15); } memcpy(mem, x + lg, (L_FIR - 1) * sizeof(Word16)); return; } /* * D_UTIL_Dec_synthesis * * Parameters: * Aq I: quantized Az * exc I: excitation at 12kHz * Q_new I: scaling performed on exc * synth16k O: 16kHz synthesis signal * prms I: parameters * HfIsf I/O: High frequency ISF:s * mode I: codec mode * newDTXState I: dtx state * bfi I: bad frame indicator * st I/O: State structure * * Function: * Synthesis of signal at 16kHz with HF extension. * * Returns: * void */ void D_UTIL_dec_synthesis(Word16 Aq[], Word16 exc[], Word16 Q_new, Word16 synth16k[], Word16 prms, Word16 HfIsf[], Word16 mode, Word16 newDTXState, Word16 bfi, Decoder_State *st) { Word32 tmp, i; Word16 exp; Word16 ener, exp_ener; Word32 fac; Word16 synth_hi[M + L_SUBFR], synth_lo[M + L_SUBFR]; Word16 synth[L_SUBFR]; Word16 HF[L_SUBFR16k]; /* High Frequency vector */ Word16 Ap[M16k + 1]; Word16 HfA[M16k + 1]; Word16 HF_corr_gain; Word16 HF_gain_ind; Word32 gain1, gain2; Word16 weight1, weight2; /* * Speech synthesis * * - Find synthesis speech corresponding to exc2[]. * - Perform fixed deemphasis and hp 50hz filtering. * - Oversampling from 12.8kHz to 16kHz. */ memcpy(synth_hi, st->mem_syn_hi, M * sizeof(Word16)); memcpy(synth_lo, st->mem_syn_lo, M * sizeof(Word16)); D_UTIL_synthesis_32(Aq, M, exc, Q_new, synth_hi + M, synth_lo + M, L_SUBFR); memcpy(st->mem_syn_hi, synth_hi + L_SUBFR, M * sizeof(Word16)); memcpy(st->mem_syn_lo, synth_lo + L_SUBFR, M * sizeof(Word16)); D_UTIL_deemph_32(synth_hi + M, synth_lo + M, synth, PREEMPH_FAC, L_SUBFR, &(st->mem_deemph)); D_UTIL_hp50_12k8(synth, L_SUBFR, st->mem_sig_out); D_UTIL_oversamp_16k(synth, L_SUBFR, synth16k, st->mem_oversamp); /* * HF noise synthesis * * - Generate HF noise between 5.5 and 7.5 kHz. * - Set energy of noise according to synthesis tilt. * tilt > 0.8 ==> - 14 dB (voiced) * tilt 0.5 ==> - 6 dB (voiced or noise) * tilt < 0.0 ==> 0 dB (noise) */ /* generate white noise vector */ for(i = 0; i < L_SUBFR16k; i++) { HF[i] = (Word16)(D_UTIL_random(&(st->mem_seed2)) >> 3); } /* energy of excitation */ D_UTIL_signal_down_scale(exc, L_SUBFR, 3); Q_new = (Word16)(Q_new - 3); ener = (Word16)(D_UTIL_dot_product12(exc, exc, L_SUBFR, &exp_ener) >> 16); exp_ener = (Word16)(exp_ener - (Q_new << 1)); /* set energy of white noise to energy of excitation */ tmp = (Word16)(D_UTIL_dot_product12(HF, HF, L_SUBFR16k, &exp) >> 16); if(tmp > ener) { tmp = tmp >> 1; /* Be sure tmp < ener */ exp = (Word16)(exp + 1); } tmp = (tmp << 15) / ener; if(tmp > 32767) { tmp = 32767; } tmp = tmp << 16; /* result is normalized */ exp = (Word16)(exp - exp_ener); D_UTIL_normalised_inverse_sqrt(&tmp, &exp); /* L_tmp x 2, L_tmp in Q31 */ /* tmp = 2 x sqrt(ener_exc/ener_hf) */ if(exp >= 0) { tmp = tmp >> (15 - exp); } else { tmp = tmp >> (-exp); tmp = tmp >> 15; } /* saturation */ if(tmp > 0x7FFF) { tmp = 0x7FFF; } for(i = 0; i < L_SUBFR16k; i++) { HF[i] = (Word16)((HF[i] * tmp) >> 15); } /* find tilt of synthesis speech (tilt: 1=voiced, -1=unvoiced) */ D_UTIL_hp400_12k8(synth, L_SUBFR, st->mem_hp400); tmp = 0L; for(i = 0; i < L_SUBFR; i++) { tmp = tmp + (synth[i] * synth[i]); } tmp = (tmp << 1) + 1; exp = D_UTIL_norm_l(tmp); ener = (Word16)((tmp << exp) >> 16); /* ener = r[0] */ tmp = 0L; for(i = 1; i < L_SUBFR; i++) { tmp = tmp + (synth[i] * synth[i - 1]); } tmp = (tmp << 1) + 1; tmp = (tmp << exp) >> 16; /* tmp = r[1] */ if(tmp > 0) { fac = ((tmp << 15) / ener); if(fac > 32767) { fac = 32767; } } else { fac = 0; } /* modify energy of white noise according to synthesis tilt */ gain1 = (32767 - fac); gain2 = ((32767 - fac) * 20480) >> 15; gain2 = (gain2 << 1); if(gain2 > 32767) gain2 = 32767; if(st->mem_vad_hist > 0) { weight1 = 0; weight2 = 32767; } else { weight1 = 32767; weight2 = 0; } tmp = (weight1 * gain1) >> 15; tmp = tmp + ((weight2 * gain2) >> 15); if(tmp != 0) { tmp = tmp + 1; } if(tmp < 3277) { tmp = 3277; /* 0.1 in Q15 */ } if((mode == MODE_24k) & (bfi == 0)) { /* HF correction gain */ HF_gain_ind = prms; HF_corr_gain = D_ROM_hp_gain[HF_gain_ind]; /* HF gain */ for(i = 0; i < L_SUBFR16k; i++) { HF[i] = (Word16)(((HF[i] * HF_corr_gain) >> 15) << 1); } } else { for(i = 0; i < L_SUBFR16k; i++) { HF[i] = (Word16)((HF[i] * tmp) >> 15); } } if((mode <= MODE_7k) & (newDTXState == SPEECH)) { D_LPC_isf_extrapolation(HfIsf); D_LPC_isp_a_conversion(HfIsf, HfA, 0, M16k); D_LPC_a_weight(HfA, Ap, 29491, M16k); /* fac=0.9 */ D_UTIL_synthesis(Ap, M16k, HF, HF, L_SUBFR16k, st->mem_syn_hf, 1); } else { /* synthesis of noise: 4.8kHz..5.6kHz --> 6kHz..7kHz */ D_LPC_a_weight(Aq, Ap, 19661, M); /* fac=0.6 */ D_UTIL_synthesis(Ap, M, HF, HF, L_SUBFR16k, st->mem_syn_hf + (M16k - M), 1); } /* noise High Pass filtering (1ms of delay) */ D_UTIL_bp_6k_7k(HF, L_SUBFR16k, st->mem_hf); if(mode == MODE_24k) { /* Low Pass filtering (7 kHz) */ D_UTIL_hp_7k(HF, L_SUBFR16k, st->mem_hf3); } /* add filtered HF noise to speech synthesis */ for(i = 0; i < L_SUBFR16k; i++) { tmp = (synth16k[i] + HF[i]); synth16k[i] = D_UTIL_saturate(tmp); } return; } /* * D_UTIL_preemph * * Parameters: * x I/O: signal * mu I: preemphasis factor * lg I: vector size * mem I/O: memory (x[-1]) * * Function: * Filtering through 1 - mu z^-1 * * * Returns: * void */ void D_UTIL_preemph(Word16 x[], Word16 mu, Word16 lg, Word16 *mem) { Word32 i, L_tmp; Word16 temp; temp = x[lg - 1]; for(i = lg - 1; i > 0; i--) { L_tmp = x[i] << 15; L_tmp = L_tmp - (x[i - 1] * mu); x[i] = (Word16)((L_tmp + 0x4000) >> 15); } L_tmp = x[0] << 15; L_tmp = L_tmp - (*mem * mu); x[0] = (Word16)((L_tmp + 0x4000) >> 15); *mem = temp; return; } h323plus/plugins/audio/G.722.2/AMR-WB/enc_if.h0000644000175000017500000000101511341106231017036 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #ifndef WB_E_IF_H #define WB_E_IF_H #include "typedef.h" #define L_FRAME16k 320 /* Frame size at 16kHz */ #define NB_SERIAL_MAX 61 /* max serial size */ int E_IF_encode(void *st, Word16 mode, Word16 *speech, UWord8 *serial, Word16 dtx); void *E_IF_init(void); void E_IF_exit(void *state); #endif h323plus/plugins/audio/G.722.2/AMR-WB/enc_main.h0000644000175000017500000001007411341106231017371 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #ifndef ENC_MAIN_H #define ENC_MAIN_H #include "typedef.h" #include "enc_dtx.h" #define L_FRAME 256 /* Frame size */ #define L_TOTAL 384 /* Total size of speech buffer. */ #define L_FILT16k 15 /* Delay of down-sampling filter */ #define PIT_MAX 231 /* Maximum pitch lag */ #define OPL_DECIM 2 /* Decimation in open-loop pitch analysis */ #define L_INTERPOL (16+1) /* Length of filter for interpolation */ typedef struct { /* Float32 */ Float32 mem_speech[L_TOTAL]; /* old speech vector at 12.8kHz */ Float32 mem_wsp[L_FRAME + PIT_MAX / OPL_DECIM]; /* old decimated weighted */ /* speech vector */ Float32 mem_hp_wsp[L_FRAME / OPL_DECIM + (PIT_MAX / OPL_DECIM)]; Float32 mem_decim[2 * L_FILT16k]; /* speech decimated filter memory */ Float32 mem_hf[2 * L_FILT16k]; /* HF band-pass filter memory */ Float32 mem_hf2[2 * L_FILT16k]; /* HF band-pass filter memory */ Float32 mem_hf3[2 * L_FILT16k]; /* HF band-pass filter memory */ Float32 mem_isp[M]; /* old isp (immittance spectral pairs)*/ Float32 mem_syn[M]; /* synthesis memory */ Float32 mem_syn2[M]; /* modified synthesis memory */ Float32 mem_syn_hf[M]; /* HF synthesis memory */ Float32 mem_isf[M]; /* old isf (frequency domain) */ Float32 mem_hf_wsp[9]; /* Open-loop lag gain filter memory */ Float32 mem_sig_in[4]; /* hp50 filter memory */ Float32 mem_sig_out[4]; /* hp50 filter memory for synthesis */ Float32 mem_hp400[4]; /* hp400 filter memory for synthesis */ Float32 mem_decim2[3]; /* wsp decimation filter memory */ Float32 mem_gp_clip[2]; /* gain of pitch clipping memory */ Float32 mem_preemph; /* speech preemph filter memory */ Float32 mem_deemph; /* speech deemph filter memory */ Float32 mem_wsp_df; /* Open-loop LTP deemph filter memory */ Float32 mem_w0; /* target vector memory */ Float32 mem_ol_gain; /* Open-loop gain */ Float32 mem_ada_w; /* weighting level */ Float32 mem_gc_threshold; /* threshold for noise enhancer */ Float32 mem_gain_alpha; /* Higher band gain weighting factor */ /* Word32 */ Word32 mem_ol_lag[5]; /* Open loop lag history */ Word32 mem_T0_med; /* weighted open loop pitch lag */ /* Word16 */ Word16 mem_exc[(L_FRAME + 1) + PIT_MAX + L_INTERPOL]; /* old excitation vector */ Word16 mem_isp_q[M]; /* quantized old isp */ Word16 mem_isf_q[M]; /* past isf quantizer */ Word16 mem_gain_q[4]; /* gain quantizer memory */ Word16 mem_subfr_q[4]; /* old maximum scaling factor */ Word16 mem_tilt_code; /* tilt of code */ Word16 mem_q; /* old scaling factor */ Word16 mem_seed; /* random memory for HF generation */ /* other */ E_DTX_Vad_State *vadSt; E_DTX_State *dtx_encSt; UWord8 mem_first_frame; /* First frame indicator */ UWord8 mem_ol_wght_flg; /* switches lag weighting on and off */ UWord8 mem_vad_hist; /* VAD history */ } Coder_State; #endif h323plus/plugins/audio/G.722.2/AMR-WB/enc.h0000644000175000017500000000077211341106231016371 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #ifndef ENC_H #define ENC_H #include "typedef.h" Word16 E_MAIN_init(void **spe_state); void E_MAIN_reset(void *st, Word16 reset_all); Word16 E_MAIN_encode(Word16 * mode, Word16 input_sp[], Word16 prms[], void *spe_state, Word16 allow_dtx); void E_MAIN_close(void **spe_state); #endif h323plus/plugins/audio/G.722.2/AMR-WB/dec_acelp.c0000644000175000017500000003443111341106231017515 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #include #include "typedef.h" #include "dec_util.h" #define L_SUBFR 64 /* Subframe size */ #define PRED_ORDER 4 #define MEAN_ENER 30 /* average innovation energy */ extern const Word16 D_ROM_ph_imp_low[]; extern const Word16 D_ROM_ph_imp_mid[]; /* * D_ACELP_add_pulse * * Parameters: * pos I: position of pulse * nb_pulse I: number of pulses * track I: track * code O: fixed codebook * * Function: * Add pulses to fixed codebook * * Returns: * void */ static void D_ACELP_add_pulse(Word32 pos[], Word32 nb_pulse, Word32 track, Word16 code[]) { Word32 i, k; for(k = 0; k < nb_pulse; k++) { /* i = ((pos[k] & (16-1))*NB_TRACK) + track; */ i = ((pos[k] & (16 - 1)) << 2) + track; if((pos[k] & 16) == 0) { code[i] = (Word16)(code[i] + 512); } else { code[i] = (Word16)(code[i] - 512); } } return; } /* * D_ACELP_decode_1p_N1 * * Parameters: * index I: pulse index * N I: number of bits for position * offset I: offset * pos O: position of the pulse * * Function: * Decode 1 pulse with N+1 bits * * Returns: * void */ static void D_ACELP_decode_1p_N1(Word32 index, Word32 N, Word32 offset, Word32 pos[]) { Word32 i, pos1, mask; mask = ((1 << N) - 1); /* * Decode 1 pulse with N+1 bits */ pos1 = ((index & mask) + offset); i = ((index >> N) & 1); if(i == 1) { pos1 += 16; } pos[0] = pos1; return; } /* * D_ACELP_decode_2p_2N1 * * Parameters: * index I: pulse index * N I: number of bits for position * offset I: offset * pos O: position of the pulse * * Function: * Decode 2 pulses with 2*N+1 bits * * Returns: * void */ static void D_ACELP_decode_2p_2N1(Word32 index, Word32 N, Word32 offset, Word32 pos[]) { Word32 i, pos1, pos2; Word32 mask; mask = ((1 << N) - 1); /* * Decode 2 pulses with 2*N+1 bits */ pos1 = (((index >> N) & mask) + offset); i = (index >> (2 * N)) & 1; pos2 = ((index & mask) + offset); if((pos2 - pos1) < 0) { if(i == 1) { pos1 += 16; } else { pos2 += 16; } } else { if(i == 1) { pos1 += 16; pos2 += 16; } } pos[0] = pos1; pos[1] = pos2; return; } /* * D_ACELP_decode_3p_3N1 * * Parameters: * index I: pulse index * N I: number of bits for position * offset I: offset * pos O: position of the pulse * * Function: * Decode 3 pulses with 3*N+1 bits * * Returns: * void */ static void D_ACELP_decode_3p_3N1(Word32 index, Word32 N, Word32 offset, Word32 pos[]) { Word32 j, mask, idx; /* * Decode 3 pulses with 3*N+1 bits */ mask = ((1 << ((2 * N) - 1)) - 1); idx = index & mask; j = offset; if(((index >> ((2 * N) - 1)) & 1) == 1) { j += (1 << (N - 1)); } D_ACELP_decode_2p_2N1(idx, N - 1, j, pos); mask = ((1 << (N + 1)) - 1); idx = (index >> (2 * N)) & mask; D_ACELP_decode_1p_N1(idx, N, offset, pos + 2); return; } /* * D_ACELP_decode_4p_4N1 * * Parameters: * index I: pulse index * N I: number of bits for position * offset I: offset * pos O: position of the pulse * * Function: * Decode 4 pulses with 4*N+1 bits * * Returns: * void */ static void D_ACELP_decode_4p_4N1(Word32 index, Word32 N, Word32 offset, Word32 pos[]) { Word32 j, mask, idx; /* * Decode 4 pulses with 4*N+1 bits */ mask = ((1 << ((2 * N) - 1)) - 1); idx = index & mask; j = offset; if(((index >> ((2 * N) - 1)) & 1) == 1) { j += (1 << (N - 1)); } D_ACELP_decode_2p_2N1(idx, N - 1, j, pos); mask = ((1 << ((2 * N) + 1)) - 1); idx = (index >> (2 * N)) & mask; D_ACELP_decode_2p_2N1(idx, N, offset, pos + 2); return; } /* * D_ACELP_decode_4p_4N * * Parameters: * index I: pulse index * N I: number of bits for position * offset I: offset * pos O: position of the pulse * * Function: * Decode 4 pulses with 4*N bits * * Returns: * void */ static void D_ACELP_decode_4p_4N(Word32 index, Word32 N, Word32 offset, Word32 pos[]) { Word32 j, n_1; /* * Decode 4 pulses with 4*N bits */ n_1 = N - 1; j = offset + (1 << n_1); switch((index >> ((4 * N) - 2)) & 3) { case 0: if(((index >> ((4 * n_1) + 1)) & 1) == 0) { D_ACELP_decode_4p_4N1(index, n_1, offset, pos); } else { D_ACELP_decode_4p_4N1(index, n_1, j, pos); } break; case 1: D_ACELP_decode_1p_N1((index >> ((3 * n_1) + 1)), n_1, offset, pos); D_ACELP_decode_3p_3N1(index, n_1, j, pos + 1); break; case 2: D_ACELP_decode_2p_2N1((index >> ((2 * n_1) + 1)), n_1, offset, pos); D_ACELP_decode_2p_2N1(index, n_1, j, pos + 2); break; case 3: D_ACELP_decode_3p_3N1((index >> (n_1 + 1)), n_1, offset, pos); D_ACELP_decode_1p_N1(index, n_1, j, pos + 3); break; } return; } /* * D_ACELP_decode_5p_5N * * Parameters: * index I: pulse index * N I: number of bits for position * offset I: offset * pos O: position of the pulse * * Function: * Decode 5 pulses with 5*N bits * * Returns: * void */ static void D_ACELP_decode_5p_5N(Word32 index, Word32 N, Word32 offset, Word32 pos[]) { Word32 j, n_1; Word32 idx; /* * Decode 5 pulses with 5*N bits */ n_1 = N - 1; j = offset + (1 << n_1); idx = (index >> ((2 * N) + 1)); if(((index >> ((5 * N) - 1)) & 1) == 0) { D_ACELP_decode_3p_3N1(idx, n_1, offset, pos); D_ACELP_decode_2p_2N1(index, N, offset, pos + 3); } else { D_ACELP_decode_3p_3N1(idx, n_1, j, pos); D_ACELP_decode_2p_2N1(index, N, offset, pos + 3); } return; } /* * D_ACELP_decode_6p_6N_2 * * Parameters: * index I: pulse index * N I: number of bits for position * offset I: offset * pos O: position of the pulse * * Function: * Decode 6 pulses with 6*N-2 bits * * Returns: * void */ static void D_ACELP_decode_6p_6N_2(Word32 index, Word32 N, Word32 offset, Word32 pos[]) { Word32 j, n_1, offsetA, offsetB; n_1 = N - 1; j = offset + (1 << n_1); offsetA = offsetB = j; if(((index >> ((6 * N) - 5)) & 1) == 0) { offsetA = offset; } else { offsetB = offset; } switch((index >> ((6 * N) - 4)) & 3) { case 0: D_ACELP_decode_5p_5N(index >> N, n_1, offsetA, pos); D_ACELP_decode_1p_N1(index, n_1, offsetA, pos + 5); break; case 1: D_ACELP_decode_5p_5N(index >> N, n_1, offsetA, pos); D_ACELP_decode_1p_N1(index, n_1, offsetB, pos + 5); break; case 2: D_ACELP_decode_4p_4N(index >> ((2 * n_1) + 1), n_1, offsetA, pos); D_ACELP_decode_2p_2N1(index, n_1, offsetB, pos + 4); break; case 3: D_ACELP_decode_3p_3N1(index >> ((3 * n_1) + 1), n_1, offset, pos); D_ACELP_decode_3p_3N1(index, n_1, j, pos + 3); break; } return; } /* * D_ACELP_decode_2t * * Parameters: * index I: 12 bits index * code O: (Q9) algebraic (fixed) codebook excitation * * Function: * 12 bits algebraic codebook decoder. * 2 tracks x 32 positions per track = 64 samples. * * 12 bits --> 2 pulses in a frame of 64 samples. * * All pulses can have two (2) possible amplitudes: +1 or -1. * Each pulse can have 32 possible positions. * * codevector length 64 * number of track 2 * number of position 32 * * Returns: * void */ void D_ACELP_decode_2t(Word16 index, Word16 code[]) { Word32 i0, i1; memset(code, 0, 64 * sizeof(Word16)); /* decode the positions and signs of pulses and build the codeword */ i0 = (index >> 5) & 0x0000003E; i1 = ((index & 0x0000001F) << 1) + 1; if(((index >> 6) & 32) == 0) { code[i0] = 512; } else { code[i0] = -512; } if((index & 32) == 0) { code[i1] = 512; } else { code[i1] = -512; } return; } /* * D_ACELP_decode_4t * * Parameters: * index I: index * mode I: speech mode * code I: (Q9) algebraic (fixed) codebook excitation * * Function: * 20, 36, 44, 52, 64, 72, 88 bits algebraic codebook. * 4 tracks x 16 positions per track = 64 samples. * * 20 bits 5+5+5+5 --> 4 pulses in a frame of 64 samples. * 36 bits 9+9+9+9 --> 8 pulses in a frame of 64 samples. * 44 bits 13+9+13+9 --> 10 pulses in a frame of 64 samples. * 52 bits 13+13+13+13 --> 12 pulses in a frame of 64 samples. * 64 bits 2+2+2+2+14+14+14+14 --> 16 pulses in a frame of 64 samples. * 72 bits 10+2+10+2+10+14+10+14 --> 18 pulses in a frame of 64 samples. * 88 bits 11+11+11+11+11+11+11+11 --> 24 pulses in a frame of 64 samples. * * All pulses can have two (2) possible amplitudes: +1 or -1. * Each pulse can sixteen (16) possible positions. * * codevector length 64 * number of track 4 * number of position 16 * * Returns: * void */ void D_ACELP_decode_4t(Word16 index[], Word16 nbbits, Word16 code[]) { Word32 k, L_index, pos[6]; memset(code, 0, 64 * sizeof(Word16)); /* decode the positions and signs of pulses and build the codeword */ if(nbbits == 20) { for(k = 0; k < 4; k++) { L_index = index[k]; D_ACELP_decode_1p_N1(L_index, 4, 0, pos); D_ACELP_add_pulse(pos, 1, k, code); } } else if(nbbits == 36) { for(k = 0; k < 4; k++) { L_index = index[k]; D_ACELP_decode_2p_2N1(L_index, 4, 0, pos); D_ACELP_add_pulse(pos, 2, k, code); } } else if(nbbits == 44) { for(k = 0; k < 4 - 2; k++) { L_index = index[k]; D_ACELP_decode_3p_3N1(L_index, 4, 0, pos); D_ACELP_add_pulse(pos, 3, k, code); } for(k = 2; k < 4; k++) { L_index = index[k]; D_ACELP_decode_2p_2N1(L_index, 4, 0, pos); D_ACELP_add_pulse(pos, 2, k, code); } } else if(nbbits == 52) { for(k = 0; k < 4; k++) { L_index = index[k]; D_ACELP_decode_3p_3N1(L_index, 4, 0, pos); D_ACELP_add_pulse(pos, 3, k, code); } } else if(nbbits == 64) { for(k = 0; k < 4; k++) { L_index = ((index[k] << 14) + index[k + 4]); D_ACELP_decode_4p_4N(L_index, 4, 0, pos); D_ACELP_add_pulse(pos, 4, k, code); } } else if(nbbits == 72) { for(k = 0; k < 4 - 2; k++) { L_index = ((index[k] << 10) + index[k + 4]); D_ACELP_decode_5p_5N(L_index, 4, 0, pos); D_ACELP_add_pulse(pos, 5, k, code); } for(k = 2; k < 4; k++) { L_index = ((index[k] << 14) + index[k + 4]); D_ACELP_decode_4p_4N(L_index, 4, 0, pos); D_ACELP_add_pulse(pos, 4, k, code); } } else if(nbbits == 88) { for(k = 0; k < 4; k++) { L_index = ((index[k] << 11) + index[k + 4]); D_ACELP_decode_6p_6N_2(L_index, 4, 0, pos); D_ACELP_add_pulse(pos, 6, k, code); } } return; } /* * D_ACELP_phase_dispersion * * Parameters: * gain_code I: (Q0) gain of code * gain_pit I: (Q14) gain of pitch * code I/O: code vector * mode I: level, 0=hi, 1=lo, 2=off * disp_mem I/O: static memory (size = 8) * * Function: * An adaptive anti-sparseness post-processing procedure is * applied to the fixed codebook vector in order to * reduce perceptual artifacts arising from the sparseness * of the algebraic fixed codebook vectors with only * a few non-zero samples per subframe. * * Returns: * void */ void D_ACELP_phase_dispersion(Word16 gain_code, Word16 gain_pit, Word16 code[], Word16 mode, Word16 disp_mem[]) { Word32 code2[2 * L_SUBFR] = {0}; Word32 i, j, state; Word16 *prev_gain_pit, *prev_gain_code, *prev_state; prev_state = disp_mem; prev_gain_code = disp_mem + 1; prev_gain_pit = disp_mem + 2; if(gain_pit < 9830) /* 0.6 in Q14 */ { state = 0; } else if(gain_pit < 14746) /* 0.9 in Q14 */ { state = 1; } else { state = 2; } for(i = 5; i > 0; i--) { prev_gain_pit[i] = prev_gain_pit[i - 1]; } prev_gain_pit[0] = gain_pit; if((gain_code - *prev_gain_code) > (*prev_gain_code << 1)) { /* onset */ if(state < 2) { state = state + 1; } } else { j = 0; for(i = 0; i < 6; i++) { if(prev_gain_pit[i] < 9830) /* 0.6 in Q14 */ j = (j + 1); } if(j > 2) { state = 0; } if((state - *prev_state) > 1) { state = state - 1; } } *prev_gain_code = gain_code; *prev_state = (Word16)state; /* circular convolution */ state = state + mode; /* level of dispersion */ if(state == 0) { for(i = 0; i < L_SUBFR; i++) { if(code[i] != 0) { for(j = 0; j < L_SUBFR; j++) { code2[i + j] = code2[i + j] + (((code[i] * D_ROM_ph_imp_low[j]) + 0x4000) >> 15); } } } } else if(state == 1) { for(i = 0; i < L_SUBFR; i++) { if(code[i] != 0) { for(j = 0; j < L_SUBFR; j++) { code2[i + j] = code2[i + j] + (((code[i] * D_ROM_ph_imp_mid[j]) + 0x4000) >> 15); } } } } if(state < 2) { for(i = 0; i < L_SUBFR; i++) { code[i] = (Word16)(code2[i] + code2[i + L_SUBFR]); } } return; } h323plus/plugins/audio/G.722.2/AMR-WB/dec_if.c0000644000175000017500000004476411341106231017041 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #include #include #include "typedef.h" #include "dec_if.h" #include "if_rom.h" #include "dec.h" #define L_FRAME16k 320 /* Frame size at 16kHz */ #define MODE_7k 0 /* modes */ #define MODE_9k 1 #define MODE_12k 2 #define MODE_14k 3 #define MODE_16k 4 #define MODE_18k 5 #define MODE_20k 6 #define MODE_23k 7 #define MODE_24k 8 #define MRDTX 9 #define NUM_OF_MODES 10 #define LOST_FRAME 14 #define MRNO_DATA 15 #define EHF_MASK (Word16)0x0008 /* homing frame pattern */ typedef struct { Word16 reset_flag_old; /* previous was homing frame */ Word16 prev_ft; /* previous frame type */ Word16 prev_mode; /* previous mode */ void *decoder_state; /* Points decoder state */ } WB_dec_if_state; Word16 nb_of_param_first[NUM_OF_SPMODES]= { 9, 14, 15, 15, 15, 19, 19, 19, 19 }; extern const Word16 mode_7k[]; extern const Word16 mode_9k[]; extern const Word16 mode_12k[]; extern const Word16 mode_14k[]; extern const Word16 mode_16k[]; extern const Word16 mode_18k[]; extern const Word16 mode_20k[]; extern const Word16 mode_23k[]; extern const Word16 mode_24k[]; extern const Word16 mode_DTX[]; extern const Word16 nb_of_param[]; extern const Word16 dfh_M7k[]; extern const Word16 dfh_M9k[]; extern const Word16 dfh_M12k[]; extern const Word16 dfh_M14k[]; extern const Word16 dfh_M16k[]; extern const Word16 dfh_M18k[]; extern const Word16 dfh_M20k[]; extern const Word16 dfh_M23k[]; extern const Word16 dfh_M24k[]; /* overall table with the parameters of the decoder homing frames for all modes */ extern const Word16 *dhf[10]; /* * Decoder_Interface_Homing_Frame_test * * Parameters: * input_frame I: input parameters * mode I: speech mode * * Function: * Check parameters for matching homing frame * * Returns: * If homing frame */ Word16 D_IF_homing_frame_test(Word16 input_frame[], Word16 mode) { if (mode != MODE_24k) { /* perform test for COMPLETE parameter frame */ return (Word16)!memcmp(input_frame, dhf[mode], nb_of_param[mode] * sizeof(Word16)); } else { /* discard high-band energy */ return (Word16)!( (memcmp(input_frame, dhf[MODE_24k], 19 * sizeof(Word16))) | (memcmp(input_frame + 20, dhf[MODE_24k] + 20, 11 * sizeof(Word16))) | (memcmp(input_frame + 32, dhf[MODE_24k] + 32, 11 * sizeof(Word16))) | (memcmp(input_frame + 44, dhf[MODE_24k] + 44, 11 * sizeof(Word16))) ); } } Word16 D_IF_homing_frame_test_first(Word16 input_frame[], Word16 mode) { /* perform test for FIRST SUBFRAME of parameter frame ONLY */ return (Word16)!memcmp(input_frame, dhf[mode], nb_of_param_first[mode] * sizeof(Word16)); } #ifdef IF2 /* * D_IF_conversion * * * Parameters: * param O: AMR parameters * stream I: input bitstream * frame_type O: frame type * speech_mode O: speech mode in DTX * fqi O: frame quality indicator * * Function: * Unpacks IF2 octet stream * * Returns: * mode used mode */ Word16 D_IF_conversion(Word16 *param, UWord8 *stream, UWord8 *frame_type, Word16 *speech_mode, Word16 *fqi) { Word32 mode; Word32 j; Word16 const *mask; memset(param, 0, PRMNO_24k << 1); mode = *stream >> 4; /* SID indication IF2 corresponds to mode 10 */ if (mode == 9) { mode ++; } *fqi = (Word16)((*stream >> 3) & 0x1); *stream <<= (HEADER_SIZE - 1); switch (mode) { case MRDTX: mask = mode_DTX; for (j = HEADER_SIZE; j < T_NBBITS_SID; j++) { if (*stream & 0x80) { param[*mask] = (Word16)(param[*mask] + *(mask + 1)); } mask += 2; if ( j % 8 ) { *stream <<= 1; } else { stream++; } } /* get SID type bit */ *frame_type = RX_SID_FIRST; if (*stream & 0x80) { *frame_type = RX_SID_UPDATE; } *stream <<= 1; /* speech mode indicator */ *speech_mode = (Word16)(*stream >> 4); break; case MRNO_DATA: *frame_type = RX_NO_DATA; break; case LOST_FRAME: *frame_type = RX_SPEECH_LOST; break; case MODE_7k: mask = mode_7k; for (j = HEADER_SIZE; j < T_NBBITS_7k; j++) { if ( *stream & 0x80 ) { param[*mask] = (Word16)(param[*mask] + *(mask + 1)); } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } *frame_type = RX_SPEECH_GOOD; break; case MODE_9k: mask = mode_9k; for (j = HEADER_SIZE; j < T_NBBITS_9k; j++) { if (*stream & 0x80) { param[*mask] = (Word16)(param[*mask] + *(mask + 1)); } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } *frame_type = RX_SPEECH_GOOD; break; case MODE_12k: mask = mode_12k; for (j = HEADER_SIZE; j < T_NBBITS_12k; j++) { if (*stream & 0x80) { param[*mask] = (Word16)(param[*mask] + *(mask + 1)); } mask += 2; if ( j % 8 ) { *stream <<= 1; } else { stream++; } } *frame_type = RX_SPEECH_GOOD; break; case MODE_14k: mask = mode_14k; for (j = HEADER_SIZE; j < T_NBBITS_14k; j++) { if (*stream & 0x80) { param[*mask] = (Word16)(param[*mask] + *(mask + 1)); } mask += 2; if ( j % 8 ) { *stream <<= 1; } else { stream++; } } *frame_type = RX_SPEECH_GOOD; break; case MODE_16k: mask = mode_16k; for (j = HEADER_SIZE; j < T_NBBITS_16k; j++) { if (*stream & 0x80) { param[*mask] = (Word16)(param[*mask] + *(mask + 1)); } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } *frame_type = RX_SPEECH_GOOD; break; case MODE_18k: mask = mode_18k; for (j = HEADER_SIZE; j < T_NBBITS_18k; j++) { if (*stream & 0x80) { param[*mask] = (Word16)(param[*mask] + *(mask + 1)); } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } *frame_type = RX_SPEECH_GOOD; break; case MODE_20k: mask = mode_20k; for (j = HEADER_SIZE; j < T_NBBITS_20k; j++) { if (*stream & 0x80) { param[*mask] = (Word16)(param[*mask] + *(mask + 1)); } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } *frame_type = RX_SPEECH_GOOD; break; case MODE_23k: mask = mode_23k; for (j = HEADER_SIZE; j < T_NBBITS_23k; j++) { if (*stream & 0x80) { param[*mask] = (Word16)(param[*mask] + *(mask + 1)); } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } *frame_type = RX_SPEECH_GOOD; break; case MODE_24k: mask = mode_24k; for (j = HEADER_SIZE; j < T_NBBITS_24k; j++) { if (*stream & 0x80) { param[*mask] = (Word16)(param[*mask] + *(mask + 1)); } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } *frame_type = RX_SPEECH_GOOD; break; default: *frame_type = RX_SPEECH_LOST; *fqi = 0; break; } if (*fqi == 0) { if (*frame_type == RX_SPEECH_GOOD) { *frame_type = RX_SPEECH_BAD; } if ((*frame_type == RX_SID_FIRST) | (*frame_type == RX_SID_UPDATE)) { *frame_type = RX_SID_BAD; } } return (Word16)mode; } #else /* * D_IF_mms_conversion * * * Parameters: * param O: AMR parameters * stream I: input bitstream * frame_type O: frame type * speech_mode O: speech mode in DTX * fqi O: frame quality indicator * * Function: * Unpacks MMS formatted octet stream (see RFC 3267, section 5.3) * * Returns: * mode used mode */ Word16 D_IF_mms_conversion(Word16 *param, UWord8 *stream, UWord8 *frame_type, Word16 *speech_mode, Word16 *fqi) { Word32 mode; Word32 j; Word16 const *mask; memset(param, 0, PRMNO_24k << 1); *fqi = (Word16)((*stream >> 2) & 0x01); mode = (Word32)((*stream >> 3) & 0x0F); /* SID indication IF2 corresponds to mode 10 */ if (mode == 9) { mode ++; } stream++; switch (mode) { case MRDTX: mask = mode_DTX; for (j = 1; j <= NBBITS_SID; j++) { if (*stream & 0x80) { param[*mask] = (Word16)(param[*mask] + *(mask + 1)); } mask += 2; if ( j % 8 ) { *stream <<= 1; } else { stream++; } } /* get SID type bit */ *frame_type = RX_SID_FIRST; if (*stream & 0x80) { *frame_type = RX_SID_UPDATE; } *stream <<= 1; /* speech mode indicator */ *speech_mode = (Word16)(*stream >> 4); break; case MRNO_DATA: *frame_type = RX_NO_DATA; break; case LOST_FRAME: *frame_type = RX_SPEECH_LOST; break; case MODE_7k: mask = mode_7k; for (j = 1; j <= NBBITS_7k; j++) { if ( *stream & 0x80 ) { param[*mask] = (Word16)(param[*mask] + *(mask + 1)); } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } *frame_type = RX_SPEECH_GOOD; break; case MODE_9k: mask = mode_9k; for (j = 1; j <= NBBITS_9k; j++) { if (*stream & 0x80) { param[*mask] = (Word16)(param[*mask] + *(mask + 1)); } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } *frame_type = RX_SPEECH_GOOD; break; case MODE_12k: mask = mode_12k; for (j = 1; j <= NBBITS_12k; j++) { if (*stream & 0x80) { param[*mask] = (Word16)(param[*mask] + *(mask + 1)); } mask += 2; if ( j % 8 ) { *stream <<= 1; } else { stream++; } } *frame_type = RX_SPEECH_GOOD; break; case MODE_14k: mask = mode_14k; for (j = 1; j <= NBBITS_14k; j++) { if (*stream & 0x80) { param[*mask] = (Word16)(param[*mask] + *(mask + 1)); } mask += 2; if ( j % 8 ) { *stream <<= 1; } else { stream++; } } *frame_type = RX_SPEECH_GOOD; break; case MODE_16k: mask = mode_16k; for (j = 1; j <= NBBITS_16k; j++) { if (*stream & 0x80) { param[*mask] = (Word16)(param[*mask] + *(mask + 1)); } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } *frame_type = RX_SPEECH_GOOD; break; case MODE_18k: mask = mode_18k; for (j = 1; j <= NBBITS_18k; j++) { if (*stream & 0x80) { param[*mask] = (Word16)(param[*mask] + *(mask + 1)); } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } *frame_type = RX_SPEECH_GOOD; break; case MODE_20k: mask = mode_20k; for (j = 1; j <= NBBITS_20k; j++) { if (*stream & 0x80) { param[*mask] = (Word16)(param[*mask] + *(mask + 1)); } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } *frame_type = RX_SPEECH_GOOD; break; case MODE_23k: mask = mode_23k; for (j = 1; j <= NBBITS_23k; j++) { if (*stream & 0x80) { param[*mask] = (Word16)(param[*mask] + *(mask + 1)); } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } *frame_type = RX_SPEECH_GOOD; break; case MODE_24k: mask = mode_24k; for (j = 1; j <= NBBITS_24k; j++) { if (*stream & 0x80) { param[*mask] = (Word16)(param[*mask] + *(mask + 1)); } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } *frame_type = RX_SPEECH_GOOD; break; default: *frame_type = RX_SPEECH_LOST; *fqi = 0; break; } if (*fqi == 0) { if (*frame_type == RX_SPEECH_GOOD) { *frame_type = RX_SPEECH_BAD; } if ((*frame_type == RX_SID_FIRST) | (*frame_type == RX_SID_UPDATE)) { *frame_type = RX_SID_BAD; } } return (Word16)mode; } #endif /* * D_IF_decode * * * Parameters: * st B: pointer to state structure * bits I: bitstream form the encoder * synth O: decoder output * lfi I: lost frame indicator * _good_frame, _bad_frame, _lost_frame, _no_frame * * Function: * Decoding one frame of speech. Lost frame indicator can be used * to inform encoder about the problems in the received frame. * _good_frame:good speech or sid frame is received. * _bad_frame: frame with possible bit errors * _lost_frame:speech of sid frame is lost in transmission * _no_frame: indicates non-received frames in dtx-operation * Returns: * */ void D_IF_decode( void *st, UWord8 *bits, Word16 *synth, Word32 lfi) { Word32 i; Word16 mode = 0; /* AMR mode */ Word16 speech_mode = MODE_7k; /* speech mode */ Word16 fqi; /* frame quality indicator */ Word16 prm[PRMNO_24k]; /* AMR parameters */ UWord8 frame_type; /* frame type */ Word16 reset_flag = 0; /* reset flag */ WB_dec_if_state * s; /* pointer to structure */ s = (WB_dec_if_state*)st; /* bits -> param, if needed */ if ((lfi == _good_frame) | (lfi == _bad_frame)) { /* add fqi data */ #ifdef IF2 *bits = (UWord8)((Word32)*bits & ~(lfi << 3)); #else *bits = (UWord8)((Word32)*bits & ~(lfi << 2)); #endif /* * extract mode information and frame_type, * octets to parameters */ #ifdef IF2 mode = D_IF_conversion( prm, bits, &frame_type, &speech_mode, &fqi); #else mode = D_IF_mms_conversion( prm, bits, &frame_type, &speech_mode, &fqi); #endif } else if (lfi == _no_frame) { frame_type = RX_NO_DATA; } else { frame_type = RX_SPEECH_LOST; } /* * if no mode information * guess one from the previous frame */ if ((frame_type == RX_SPEECH_LOST) | (frame_type == RX_NO_DATA)) { mode = s->prev_mode; } if (mode == MRDTX) { mode = speech_mode; } /* if homed: check if this frame is another homing frame */ if (s->reset_flag_old == 1) { /* only check until end of first subframe */ reset_flag = D_IF_homing_frame_test_first(prm, mode); } /* produce encoder homing frame if homed & input=decoder homing frame */ if ((reset_flag != 0) && (s->reset_flag_old != 0)) { for (i = 0; i < L_FRAME16k; i++) { synth[i] = EHF_MASK; } } else { D_MAIN_decode(mode, prm, synth, s->decoder_state, frame_type); } for (i = 0; i < L_FRAME16k; i++) /* Delete the 2 LSBs (14-bit input) */ { synth[i] = (Word16) (synth[i] & 0xfffC); } /* if not homed: check whether current frame is a homing frame */ if ((s->reset_flag_old == 0) & (mode < 9)) { /* check whole frame */ reset_flag = D_IF_homing_frame_test(prm, mode); } /* reset decoder if current frame is a homing frame */ if (reset_flag != 0) { D_MAIN_reset(s->decoder_state, 1); } s->reset_flag_old = reset_flag; s->prev_ft = frame_type; s->prev_mode = mode; } /* * D_IF_reset * * Parameters: * st O: state struct * * Function: * Reset homing frame counter * * Returns: * void */ void D_IF_reset(WB_dec_if_state *st) { st->reset_flag_old = 1; st->prev_ft = RX_SPEECH_GOOD; st->prev_mode = MODE_7k; /* minimum bitrate */ } /* * D_IF_init * * Parameters: * * Function: * Allocates state memory and initializes state memory * * Returns: * pointer to encoder interface structure */ void *D_IF_init( void) { WB_dec_if_state *s = NULL; /* allocate memory */ if ((s = (WB_dec_if_state*) malloc(sizeof(WB_dec_if_state))) == NULL) { return NULL; } D_MAIN_init(&(s->decoder_state)); if (s->decoder_state == NULL) { free(s); return NULL; } D_IF_reset(s); return s; } /* * D_IF_exit * * Parameters: * state I: state structure * * Function: * The memory used for state memory is freed * * Returns: * Void */ void D_IF_exit(void *state) { WB_dec_if_state *s; s = (WB_dec_if_state *)state; /* free memory */ D_MAIN_close(&s->decoder_state); free(s); state = NULL; } h323plus/plugins/audio/G.722.2/AMR-WB/dec_util.h0000644000175000017500000000254511341106231017414 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #ifndef DEC_UTIL_H #define DEC_UTIL_H #include "typedef.h" #include "dec_main.h" Word16 D_UTIL_random(Word16 *seed); Word32 D_UTIL_pow2(Word16 exponant, Word16 fraction); Word16 D_UTIL_norm_l (Word32 L_var1); Word16 D_UTIL_norm_s (Word16 var1); Word32 D_UTIL_dot_product12(Word16 x[], Word16 y[], Word16 lg, Word16 *exp); void D_UTIL_normalised_inverse_sqrt(Word32 *frac, Word16 *exp); Word32 D_UTIL_inverse_sqrt(Word32 L_x); void D_UTIL_log2(Word32 L_x, Word16 *exponent, Word16 *fraction); void D_UTIL_l_extract(Word32 L_32, Word16 *hi, Word16 *lo); Word32 D_UTIL_mpy_32_16 (Word16 hi, Word16 lo, Word16 n); Word32 D_UTIL_mpy_32 (Word16 hi1, Word16 lo1, Word16 hi2, Word16 lo2); Word16 D_UTIL_saturate(Word32 inp); void D_UTIL_signal_up_scale(Word16 x[], Word16 lg, Word16 exp); void D_UTIL_signal_down_scale(Word16 x[], Word16 lg, Word16 exp); void D_UTIL_dec_synthesis(Word16 Aq[], Word16 exc[], Word16 Q_new, Word16 synth16k[], Word16 prms, Word16 HfIsf[], Word16 mode, Word16 newDTXState, Word16 bfi, Decoder_State *st); void D_UTIL_preemph(Word16 x[], Word16 mu, Word16 lg, Word16 *mem); #endif h323plus/plugins/audio/G.722.2/AMR-WB/typedef.h0000644000175000017500000000074611341106231017265 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #ifndef typedef_h #define typedef_h /* change these typedef declarations to correspond with your platform */ typedef char Word8; typedef unsigned char UWord8; typedef short Word16; typedef unsigned short UWord16; typedef long Word32; typedef double Float64; typedef float Float32; #endifh323plus/plugins/audio/G.722.2/AMR-WB/enc_dtx.c0000644000175000017500000011400711341106231017240 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #include #include #include #include "typedef.h" #include "enc_lpc.h" #include "enc_util.h" #define DTX_HIST_SIZE_MIN_ONE 7 #define DTX_HANG_CONST 7 /* yields eight frames of SP HANGOVER */ #define DTX_ELAPSED_FRAMES_THRESH (24 + 7 -1) #define MED_THRESH 2.25 #define GAIN_THR 1.406 #define ORDER 16 /* order of linear prediction filter */ #define RANDOM_INITSEED 21845 /* own random init value */ #define MRDTX 9 #define SIZE_BK_NOISE1 64 #define SIZE_BK_NOISE2 64 #define SIZE_BK_NOISE3 64 #define SIZE_BK_NOISE4 32 #define SIZE_BK_NOISE5 32 #define FRAME_LEN 256 /* Length (samples) of the input frame */ #define SCALE 128 /* (UNITY * UNITY) / 512 */ #define TONE_THR 0.65f /* Threshold for tone detection */ /* constants for speech level estimation */ #define SP_EST_COUNT 80 #define SP_ACTIVITY_COUNT 25 #define ALPHA_SP_UP (1.0f - 0.85f) #define ALPHA_SP_DOWN (1.0f - 0.85f) #define NOM_LEVEL 2050.0F /* about -26 dBov */ #define SPEECH_LEVEL_INIT NOM_LEVEL #define MIN_SPEECH_LEVEL1 (NOM_LEVEL * 0.063F) /* NOM_LEVEL -24 dB */ #define MIN_SPEECH_LEVEL2 (NOM_LEVEL * 0.2F) /* NOM_LEVEL -14 dB */ #define MIN_SPEECH_SNR 0.125F /* 0 dB, lowest SNR estimation */ /* Constants for background spectrum update */ #define ALPHA_UP1 (1.0f - 0.95f) /* Normal update, upwards: */ #define ALPHA_DOWN1 (1.0f - 0.936f) /* Normal update, downwards */ #define ALPHA_UP2 (1.0f - 0.985f) /* Forced update, upwards */ #define ALPHA_DOWN2 (1.0f - 0.943f) /* Forced update, downwards */ #define ALPHA3 (1.0f - 0.95f) /* Update downwards */ #define ALPHA4 (1.0f - 0.9f) /* For stationary estimation */ #define ALPHA5 (1.0f - 0.5f) /* For stationary estimation */ /* Constants for VAD threshold */ #define THR_MIN (1.6F * SCALE) /* Minimum threshold */ #define THR_HIGH (6.0F * SCALE) /* Highest threshold */ #define THR_LOW (1.7F * SCALE) /* Lowest threshold */ #define NO_P1 31744.0F /* ilog2(1), Noise level for highest threshold */ #define NO_P2 19786.0F /* ilog2(0.1, Noise level for lowest threshold */ #define NO_SLOPE ((Float32)(THR_LOW - THR_HIGH) / (Float32)(NO_P2 - NO_P1)) #define SP_CH_MIN (-0.75F * SCALE) #define SP_CH_MAX (0.75F * SCALE) #define SP_P1 22527.0F /* ilog2(NOM_LEVEL / 4) */ #define SP_P2 17832.0F /* ilog2(NOM_LEVEL * 4) */ #define SP_SLOPE ((Float32)(SP_CH_MAX - SP_CH_MIN) / (Float32)(SP_P2 - SP_P1)) /* Constants for hangover length */ #define HANG_HIGH 12 /* longest hangover */ #define HANG_LOW 2 /* shortest hangover */ #define HANG_P1 THR_LOW /* threshold for longest hangover */ #define HANG_P2 (4 * SCALE) /* threshold for Word16est hangover */ #define HANG_SLOPE ((Float32)(HANG_LOW - HANG_HIGH) / (Float32)(HANG_P2 - HANG_P1)) /* Constants for burst length */ #define BURST_HIGH 8 /* longest burst length */ #define BURST_LOW 3 /* shortest burst length */ #define BURST_P1 THR_HIGH /* threshold for Word32est burst */ #define BURST_P2 THR_LOW /* threshold for Word16est burst */ #define BURST_SLOPE ((Float32)(BURST_LOW - BURST_HIGH) / (Float32)(BURST_P2 - BURST_P1)) /* Parameters for background spectrum recovery function */ #define STAT_COUNT 20 /* threshold of stationary detection counter */ #define STAT_THR_LEVEL 184 /* Threshold level for stationarity detection */ #define STAT_THR 1000 /* Threshold for stationarity detection */ /* Limits for background noise estimate */ #define NOISE_MIN 40 /* minimum */ #define NOISE_MAX 20000 /* maximum */ #define NOISE_INIT 150 /* initial */ /* Thresholds for signal power (now calculated on 2 frames) */ #define VAD_POW_LOW 30000.0f /* If input power is lower than this, VAD is set to 0 */ #define POW_PITCH_TONE_THR 686080.0f /* If input power is lower, pitch detection is ignored */ /* Constants for the filter bank */ #define COEFF3 0.407806f /* coefficient for the 3rd order filter */ #define COEFF5_1 0.670013f /* 1st coefficient the for 5th order filter */ #define COEFF5_2 0.195007f /* 2nd coefficient the for 5th order filter */ extern const Float32 E_ROM_en_adjust[]; extern const Float32 E_ROM_mean_isf_noise[]; extern const Float32 E_ROM_dico1_isf_noise[]; extern const Float32 E_ROM_dico2_isf_noise[]; extern const Float32 E_ROM_dico3_isf_noise[]; extern const Float32 E_ROM_dico4_isf_noise[]; extern const Float32 E_ROM_dico5_isf_noise[]; extern const Float32 E_ROM_isf[]; /* * E_DTX_isf_history_aver * * Parameters: * isf_old I/O: ISF vectors * indices I: ISF indices * isf_aver O: averaged ISFs * * Function: * Perform the ISF averaging * * Returns: * void */ static void E_DTX_isf_history_aver(Float32 isf_old[], Word16 indices[], Float32 isf_aver[]) { Float32 isf_tmp[2 * M]; Float32 tmp; Word32 i, j, k; /* * Memorize in isf_tmp[][] the ISF vectors to be replaced by * the median ISF vector prior to the averaging */ for (k = 0; k < 2; k++) { if (indices[k] != -1) { for (i = 0; i < M; i++) { isf_tmp[k * M + i] = isf_old[indices[k] * M + i]; isf_old[indices[k] * M + i] = isf_old[indices[2] * M + i]; } } } /* Perform the ISF averaging */ for (j = 0; j < M; j++) { tmp = 0; for (i = 0; i < DTX_HIST_SIZE; i++) { tmp += isf_old[i * M + j]; } isf_aver[j] = tmp; } /* Retrieve from isf_tmp[][] the ISF vectors saved prior to averaging */ for (k = 0; k < 2; k++) { if (indices[k] != -1) { for (i = 0; i < M; i++) { isf_old[indices[k] * M + i] = isf_tmp[k * M + i]; } } } return; } /* * E_DTX_dithering_control * * Parameters: * st I: state struct * * Function: * Analysis of the variation and stationarity * of the background noise. * * Returns: * Dithering decision */ static Word16 E_DTX_dithering_control(E_DTX_State * st) { Float32 ISF_diff, gain_diff, mean, tmp; Word32 i; Word16 CN_dith; /* determine how stationary the spectrum of background noise is */ ISF_diff = 0.0F; for (i = 0; i < 8; i++) { ISF_diff += st->mem_distance_sum[i]; } if (ISF_diff > 5147609.0f) { CN_dith = 1; } else { CN_dith = 0; } /* determine how stationary the energy of background noise is */ mean = 0.0f; for (i = 0; i < DTX_HIST_SIZE; i++) { mean += st->mem_log_en[i] / (Float32)DTX_HIST_SIZE; } gain_diff = 0.0f; for (i = 0; i < DTX_HIST_SIZE; i++) { tmp = (Float32)fabs(st->mem_log_en[i] - mean); gain_diff += tmp; } if (gain_diff > GAIN_THR) { CN_dith = 1; } return CN_dith; } /* * E_DTX_buffer * * Parameters: * st I/O: state struct * isf_new I: isf vector * enr I: residual energy (for L_FRAME) * codec_mode I: speech coder mode * * Function: * Handles the DTX buffer * * Returns: * void */ void E_DTX_buffer(E_DTX_State *st, Float32 isf_new[], Float32 enr, Word16 codec_mode) { Float32 log_en; /* update pointer to circular buffer */ st->mem_hist_ptr++; if (st->mem_hist_ptr == DTX_HIST_SIZE) { st->mem_hist_ptr = 0; } /* copy isf vector into buffer */ memcpy(&st->mem_isf[st->mem_hist_ptr * M], isf_new, M * sizeof(Float32)); enr += 1e-10F; log_en = (Float32)(log10(enr / ((Float64)L_FRAME)) / log10(2.0F)); /* Subtract ~ 3 dB */ st->mem_log_en[st->mem_hist_ptr] = log_en + E_ROM_en_adjust[codec_mode]; return; } /* * E_DTX_frame_indices_find * * Parameters: * st I/O: state struct * isf_old_tx I: isf vector * indices I: distance indices * * Function: * Find indices for min/max distances * * Returns: * void */ static void E_DTX_frame_indices_find(E_DTX_State * st, Word16 indices[]) { Float32 L_tmp, tmp, summin, summax, summax2nd; Word32 i, j, k; Word16 ptr; /* * Remove the effect of the oldest frame from the column * sum sumD[0..E_DTX_HIST_SIZE-1]. sumD[E_DTX_HIST_SIZE] is * not updated since it will be removed later. */ k = DTX_HIST_SIZE_MIN_ONE; j = -1; for (i = 0; i < DTX_HIST_SIZE_MIN_ONE; i++) { j = j + k; st->mem_distance_sum[i] = st->mem_distance_sum[i] - st->mem_distance[j]; k--; } /* * Shift the column sum sumD. The element sumD[E_DTX_HIST_SIZE-1] * corresponding to the oldest frame is removed. The sum of * the distances between the latest isf and other isfs, * i.e. the element sumD[0], will be computed during this call. * Hence this element is initialized to zero. */ for (i = DTX_HIST_SIZE_MIN_ONE; i > 0; i--) { st->mem_distance_sum[i] = st->mem_distance_sum[i - 1]; } st->mem_distance_sum[0] = 0.0F; /* * Remove the oldest frame from the distance matrix. * Note that the distance matrix is replaced by a one- * dimensional array to save static memory. */ k = 0; for (i = 27; i >= 12; i = i - k) { k++; for (j = k; j > 0; j--) { st->mem_distance[i - j + 1] = st->mem_distance[i - j - k]; } } /* * Compute the first column of the distance matrix D * (squared Euclidean distances from isf1[] to isf_old_tx[][]). */ ptr = st->mem_hist_ptr; for (i = 1; i < DTX_HIST_SIZE; i++) { /* Compute the distance between the latest isf and the other isfs. */ ptr--; if (ptr < 0) { ptr = DTX_HIST_SIZE_MIN_ONE; } L_tmp = 0; for (j = 0; j < M; j++) { tmp = st->mem_isf[st->mem_hist_ptr * M + j] - st->mem_isf[ptr * M + j]; L_tmp += tmp * tmp; } st->mem_distance[i - 1] = L_tmp; /* Update also the column sums. */ st->mem_distance_sum[0] += st->mem_distance[i - 1]; st->mem_distance_sum[i] += st->mem_distance[i - 1]; } /* Find the minimum and maximum distances */ summax = st->mem_distance_sum[0]; summin = st->mem_distance_sum[0]; indices[0] = 0; indices[2] = 0; for (i = 1; i < DTX_HIST_SIZE; i++) { if (st->mem_distance_sum[i] > summax) { indices[0] = (Word16)i; summax = st->mem_distance_sum[i]; } if (st->mem_distance_sum[i] < summin) { indices[2] = (Word16)i; summin = st->mem_distance_sum[i]; } } /* Find the second largest distance */ summax2nd = -100000000.0; indices[1] = -1; for (i = 0; i < DTX_HIST_SIZE; i++) { if ((st->mem_distance_sum[i] > summax2nd) && (i != indices[0])) { indices[1] = (Word16)i; summax2nd = st->mem_distance_sum[i]; } } for (i = 0; i < 3; i++) { indices[i] = (Word16)(st->mem_hist_ptr - indices[i]); if (indices[i] < 0) { indices[i] += DTX_HIST_SIZE; } } /* * If maximum distance / MED_THRESH is smaller than minimum distance * then the median ISF vector replacement is not performed */ L_tmp = (Float32)(summax / MED_THRESH); if (L_tmp <= summin) { indices[0] = -1; } /* * If second largest distance/MED_THRESH is smaller than * minimum distance then the median ISF vector replacement is * not performed */ L_tmp = (Float32)(summax2nd / MED_THRESH); if (L_tmp <= summin) { indices[1] = -1; } return; } /* * E_DTX_isf_q * * Parameters: * isf I: ISF in the frequency domain (0..6400) * isf_q O: quantised ISF * indice O: quantisation indices * * Function: * The ISF vector is quantized using VQ with split-by-5 * * Returns: * void */ static void E_DTX_isf_q(Float32 *isf, Word16 **indice) { Word32 i; Float32 tmp; for (i = 0; i < ORDER; i++) { isf[i] = isf[i] - E_ROM_mean_isf_noise[i]; } (*indice)[0] = E_LPC_isf_sub_vq(&isf[0], E_ROM_dico1_isf_noise, 2, SIZE_BK_NOISE1, &tmp); (*indice)[1] = E_LPC_isf_sub_vq(&isf[2], E_ROM_dico2_isf_noise, 3, SIZE_BK_NOISE2, &tmp); (*indice)[2] = E_LPC_isf_sub_vq(&isf[5], E_ROM_dico3_isf_noise, 3, SIZE_BK_NOISE3, &tmp); (*indice)[3] = E_LPC_isf_sub_vq(&isf[8], E_ROM_dico4_isf_noise, 4, SIZE_BK_NOISE4, &tmp); (*indice)[4] = E_LPC_isf_sub_vq(&isf[12], E_ROM_dico5_isf_noise, 4, SIZE_BK_NOISE5, &tmp); return; } /* * E_DTX_exe * * Parameters: * st I/O: state struct * exc2 O: CN excitation * pt_prms O: analysis parameters * * Function: * Confort noise parameters are encoded for the SID frame * * Returns: * void */ void E_DTX_exe(E_DTX_State *st, Float32 *exc2, Word16 **pt_prms) { Float32 isf[M]; Float32 log_en, level, gain, ener; Word32 i,j; Word16 isf_order[3]; Word16 CN_dith; /* VOX mode computation of SID parameters */ log_en = 0.0F; memset(isf, 0, M * sizeof(Float32)); /* average energy and isf */ for (i = 0; i < DTX_HIST_SIZE; i++) { log_en += st->mem_log_en[i] / (Float32)DTX_HIST_SIZE; } E_DTX_frame_indices_find(st, isf_order); E_DTX_isf_history_aver(st->mem_isf, isf_order, isf); for (j = 0; j < M; j++) { isf[j] = isf[j] / (Float32)DTX_HIST_SIZE; /* divide by 8 */ } /* quantize logarithmic energy to 6 bits (-6 : 66 dB) */ st->mem_log_en_index = (Word16)((log_en + 2.0F) * 2.625F); if(st->mem_log_en_index > 63) { st->mem_log_en_index = 63; } if(st->mem_log_en_index < 0) { st->mem_log_en_index = 0; } E_DTX_isf_q(isf, pt_prms); (*pt_prms) += 5; **pt_prms = st->mem_log_en_index; (*pt_prms) += 1; CN_dith = E_DTX_dithering_control(st); **pt_prms = CN_dith; (*pt_prms) += 1; /* adjust level to speech coder mode */ log_en = (Float32)((Float32)st->mem_log_en_index / 2.625 - 2.0); level = (Float32)(pow( 2.0, log_en )); /* generate white noise vector */ for (i = 0; i < L_FRAME; i++) { exc2[i] = (Float32)E_UTIL_random(&(st->mem_cng_seed)); } ener = 0.01F; for (i = 0; i < L_FRAME; i++) { ener += exc2[i] * exc2[i]; } gain = (Float32)sqrt(level * L_FRAME / ener); for (i = 0; i < L_FRAME; i++) { exc2[i] *= gain; } return; } /* * E_DTX_reset * * Parameters: * st O: state struct * * Function: * Initializes state memory * * Returns: * non-zero with error, zero for ok */ Word32 E_DTX_reset(E_DTX_State *st) { Word32 i; if (st == (E_DTX_State *) NULL) { return -1; } st->mem_hist_ptr = 0; st->mem_log_en_index = 0; /* Init isf_hist[] */ for(i = 0; i < DTX_HIST_SIZE; i++) { memcpy(&st->mem_isf[i * M], E_ROM_isf, M * sizeof(Float32)); } st->mem_cng_seed = RANDOM_INITSEED; /* Reset energy history */ memset(st->mem_log_en, 0, DTX_HIST_SIZE * sizeof(Float32)); st->mem_dtx_hangover_count = DTX_HANG_CONST; st->mem_dec_ana_elapsed_count = DTX_ELAPSED_FRAMES_THRESH; memset(st->mem_distance, 0, 28 * sizeof(Float32)); memset(st->mem_distance_sum, 0, (DTX_HIST_SIZE - 1) * sizeof(Float32)); return 0; } /* * E_DTX_init * * Parameters: * st I/O: state struct * * Function: * Allocates state memory and initializes state memory * * Returns: * non-zero with error, zero for ok */ Word32 E_DTX_init (E_DTX_State **st) { E_DTX_State* s; if (st == (E_DTX_State **) NULL) { return -1; } *st = NULL; /* allocate memory */ if ((s= (E_DTX_State *) malloc(sizeof(E_DTX_State))) == NULL) { return -1; } E_DTX_reset(s); *st = s; return 0; } /* * E_DTX_exit * * Parameters: * state I/0: State struct * * Function: * The memory used for state memory is freed * * Returns: * void */ void E_DTX_exit (E_DTX_State **st) { if (st == NULL || *st == NULL) { return; } /* deallocate memory */ free(*st); *st = NULL; return; } /* * E_DTX_tx_handler * * Parameters: * st I/O: State struct * vad_flag I: vad decision * usedMode I/O: mode changed or not * * Function: * Adds extra speech hangover to analyze speech on the decoding side. * * Returns: * void */ void E_DTX_tx_handler(E_DTX_State *st, Word32 vad_flag, Word16 *usedMode) { /* this state machine is in synch with the GSMEFR txDtx machine */ st->mem_dec_ana_elapsed_count++; if (vad_flag != 0) { st->mem_dtx_hangover_count = DTX_HANG_CONST; } else { /* non-speech */ if (st->mem_dtx_hangover_count == 0) { /* out of decoder analysis hangover */ st->mem_dec_ana_elapsed_count = 0; *usedMode = MRDTX; } else { /* in possible analysis hangover */ st->mem_dtx_hangover_count--; /* decAnaElapsedCount + dtxHangoverCount < E_DTX_ELAPSED_FRAMES_THRESH */ if ((st->mem_dec_ana_elapsed_count + st->mem_dtx_hangover_count) < DTX_ELAPSED_FRAMES_THRESH) { *usedMode = MRDTX; /* if Word16 time since decoder update, do not add extra HO */ } /* else override VAD and stay in speech mode *usedMode and add extra hangover */ } } return; } /* * E_DTX_filter5 * * Parameters: * in0 I/O: input values / output low-pass part * in1 I/O: input values / output high-pass part * data I/O: updated filter memory * * Function: * Fifth-order half-band lowpass/highpass filter pair with decimation. * * Returns: * void */ static void E_DTX_filter5(Float32 *in0, Float32 *in1, Float32 data[]) { Float32 temp0, temp1, temp2; temp0 = *in0 - COEFF5_1 * data[0]; temp1 = data[0] + COEFF5_1 * temp0; data[0] = ((temp0 > 1e-10) | (temp0 < -1e-10)) ? temp0 : 0; temp0 = *in1 - COEFF5_2 * data[1]; temp2 = data[1] + COEFF5_2 * temp0; data[1] = ((temp0 > 1e-10) | (temp0 < -1e-10)) ? temp0 : 0; *in0 = (temp1 + temp2) * 0.5F; *in1 = (temp1 - temp2) * 0.5F; } /* * E_DTX_filter3 * * Parameters: * in0 I/O: input values / output low-pass part * in1 I/O: input values / output high-pass part * data I/O: updated filter memory * * Function: * Third-order half-band lowpass/highpass filter pair with decimation. * * Returns: * void */ static void E_DTX_filter3(Float32 *in0, Float32 *in1, Float32 *data) { Float32 temp1, temp2; temp1 = *in1 - COEFF3 * *data; temp2 = *data + COEFF3 * temp1; *data = ((temp1 > 1e-10) | (temp1 < -1e-10)) ? temp1 : 0; *in1 = (*in0 - temp2) * 0.5F; *in0 = (*in0 + temp2) * 0.5F; } /* * E_DTX_level_calculation * * Parameters: * data I: signal buffer * sub_level I/0: level calculated at the end of the previous frame / * level of signal calculated from the last * (count2 - count1) samples * count1 I: number of samples to be counted * count2 I: number of samples to be counted * ind_m I: step size for the index of the data buffer * ind_a I: starting index of the data buffer * scale I: scaling for the level calculation * * Function: * Calculate signal level in a sub-band. Level is calculated * by summing absolute values of the input data. * * Because speech coder has a lookahead, signal level calculated * over the lookahead (data[count1 - count2]) is stored (*sub_level) * and added to the level of the next frame. Additionally, group * delay and decimation of the filter bank is taken into the count * for the values of the counters (count1, count2). * * Returns: * signal level */ static Float32 E_DTX_level_calculation(Float32 data[], Float32 *sub_level, Word16 count1, Word16 count2, Word16 ind_m, Word16 ind_a, Float32 scale) { Float64 l_temp1, l_temp2; Float32 level; Word32 i; l_temp1 = 0.0; for (i = count1; i < count2; i++) { l_temp1 += fabs(data[ind_m * i + ind_a]); } l_temp1 *= 2.0; l_temp2 = l_temp1 + *sub_level / scale; *sub_level = (Float32)(l_temp1 * scale); for (i = 0; i < count1; i++) { l_temp2 += 2.0f * fabs(data[ind_m * i + ind_a]); } level = (Float32)(l_temp2 * scale); return level; } /* * E_DTX_filter_bank * * Parameters: * st I/0: State struct * in I: input frame * level I: signal levels at each band * * Function: * Divide input signal into bands and calculate level of * the signal in each band * * Returns: * void */ static void E_DTX_filter_bank(E_DTX_Vad_State *st, Float32 in[], Float32 level[]) { Float32 tmp_buf[FRAME_LEN]; Word32 i, j; /* shift input 1 bit down for safe scaling */ for (i = 0; i < FRAME_LEN; i++) { tmp_buf[i] = in[i] * 0.5F; } /* run the filter bank */ for (i = 0; i < (FRAME_LEN >> 1); i++) { j = i << 1; E_DTX_filter5(&tmp_buf[j], &tmp_buf[j + 1], st->mem_a_data5[0]); } for (i = 0; i < (FRAME_LEN >> 2); i++) { j = i << 2; E_DTX_filter5(&tmp_buf[j], &tmp_buf[j + 2], st->mem_a_data5[1]); E_DTX_filter5(&tmp_buf[j + 1], &tmp_buf[j + 3], st->mem_a_data5[2]); } for (i = 0; i < (FRAME_LEN >> 3); i++) { j = i << 3; E_DTX_filter5(&tmp_buf[j], &tmp_buf[j + 4], st->mem_a_data5[3]); E_DTX_filter5(&tmp_buf[j + 2], &tmp_buf[j + 6], st->mem_a_data5[4]); E_DTX_filter3(&tmp_buf[j + 3], &tmp_buf[j + 7], &st->mem_a_data3[0]); } for (i = 0; i < (FRAME_LEN >> 4); i++) { j = i << 4; E_DTX_filter3(&tmp_buf[j], &tmp_buf[j + 8], &st->mem_a_data3[1]); E_DTX_filter3(&tmp_buf[j + 4], &tmp_buf[j + 12], &st->mem_a_data3[2]); E_DTX_filter3(&tmp_buf[j + 6], &tmp_buf[j + 14], &st->mem_a_data3[3]); } for (i = 0; i < (FRAME_LEN >> 5); i++) { j = i << 5; E_DTX_filter3(&tmp_buf[j + 0], &tmp_buf[j + 16], &st->mem_a_data3[4]); E_DTX_filter3(&tmp_buf[j + 8], &tmp_buf[j + 24], &st->mem_a_data3[5]); } /* calculate levels in each frequency band */ /* 4800 - 6400 Hz*/ level[11] = E_DTX_level_calculation(tmp_buf, &st->mem_sub_level[11], (FRAME_LEN >> 2) - 48, FRAME_LEN >> 2, 4, 1, 0.25F); /* 4000 - 4800 Hz*/ level[10] = E_DTX_level_calculation(tmp_buf, &st->mem_sub_level[10], (FRAME_LEN >> 3) - 24, FRAME_LEN >> 3, 8, 7, 0.5F); /* 3200 - 4000 Hz*/ level[9] = E_DTX_level_calculation(tmp_buf, &st->mem_sub_level[9], (FRAME_LEN >> 3) - 24, FRAME_LEN >> 3, 8, 3, 0.5F); /* 2400 - 3200 Hz*/ level[8] = E_DTX_level_calculation(tmp_buf, &st->mem_sub_level[8], (FRAME_LEN >> 3) - 24, FRAME_LEN >> 3, 8, 2, 0.5F); /* 2000 - 2400 Hz*/ level[7] = E_DTX_level_calculation(tmp_buf, &st->mem_sub_level[7], (FRAME_LEN >> 4) - 12, FRAME_LEN >> 4, 16, 14, 1.0F); /* 1600 - 2000 Hz*/ level[6] = E_DTX_level_calculation(tmp_buf, &st->mem_sub_level[6], (FRAME_LEN >> 4) - 12, FRAME_LEN >> 4, 16, 6, 1.0F); /* 1200 - 1600 Hz*/ level[5] = E_DTX_level_calculation(tmp_buf, &st->mem_sub_level[5], (FRAME_LEN >> 4) - 12, FRAME_LEN >> 4, 16, 4, 1.0F); /* 800 - 1200 Hz*/ level[4] = E_DTX_level_calculation(tmp_buf, &st->mem_sub_level[4], (FRAME_LEN >> 4) - 12, FRAME_LEN >> 4, 16, 12, 1.0F); /* 600 - 800 Hz*/ level[3] = E_DTX_level_calculation(tmp_buf, &st->mem_sub_level[3], (FRAME_LEN >> 5) - 6, FRAME_LEN >> 5, 32, 8, 2.0F); /* 400 - 600 Hz*/ level[2] = E_DTX_level_calculation(tmp_buf, &st->mem_sub_level[2], (FRAME_LEN >> 5) - 6, FRAME_LEN >> 5, 32, 24, 2.0F); /* 200 - 400 Hz*/ level[1] = E_DTX_level_calculation(tmp_buf, &st->mem_sub_level[1], (FRAME_LEN >> 5) - 6, FRAME_LEN >> 5, 32, 16, 2.0F); /* 0 - 200 Hz*/ level[0] = E_DTX_level_calculation(tmp_buf, &st->mem_sub_level[0], (FRAME_LEN >> 5) - 6, FRAME_LEN >> 5, 32, 0, 2.0F); } /* * E_DTX_update_cntrl * * Parameters: * st I/0: State struct * level I: sub-band levels of the input frame * * Function: * Control update of the background noise estimate. * * Returns: * void */ static void E_DTX_update_cntrl(E_DTX_Vad_State *st, Float32 level[]) { Float32 stat_rat; Float32 num, denom; Float32 alpha; Word32 i; /* if fullband pitch or tone have been detected for a while, initialize stat_count */ if ((st->mem_pitch_tone & 0x7c00) == 0x7c00) { st->mem_stat_count = STAT_COUNT; } else { /* if 8 last vad-decisions have been "0", reinitialize stat_count */ if ((st->mem_vadreg & 0x7f80) == 0) { st->mem_stat_count = STAT_COUNT; } else { stat_rat = 0; for (i = 0; i < COMPLEN; i++) { if (level[i] > st->mem_ave_level[i]) { num = level[i]; denom = st->mem_ave_level[i]; } else { num = st->mem_ave_level[i]; denom = level[i]; } /* Limit nimimum value of num and denom to STAT_THR_LEVEL */ if (num < STAT_THR_LEVEL) { num = STAT_THR_LEVEL; } if (denom < STAT_THR_LEVEL) { denom = STAT_THR_LEVEL; } stat_rat += num/denom * 64; } /* compare stat_rat with a threshold and update stat_count */ if (stat_rat > STAT_THR) { st->mem_stat_count = STAT_COUNT; } else { if ((st->mem_vadreg & 0x4000) != 0) { if (st->mem_stat_count != 0) { st->mem_stat_count--; } } } } } /* Update average amplitude estimate for stationarity estimation */ alpha = ALPHA4; if (st->mem_stat_count == STAT_COUNT) { alpha = 1.0; } else if ((st->mem_vadreg & 0x4000) == 0) { alpha = ALPHA5; } for (i = 0; i < COMPLEN; i++) { st->mem_ave_level[i] += alpha * (level[i] - st->mem_ave_level[i]); } } /* * E_DTX_hangover_addition * * Parameters: * st I/0: State struct * low_power I: flag power of the input frame * hang_len I: hangover length * burst_len I: minimum burst length for hangover addition * * Function: * Add hangover after speech bursts. * * Returns: * VAD_flag indicating final VAD decision */ static Word16 E_DTX_hangover_addition(E_DTX_Vad_State *st, Word16 low_power, Word16 hang_len, Word16 burst_len) { /* * if the input power (pow_sum) is lower than a threshold, clear * counters and set VAD_flag to "0" "fast exit" */ if (low_power != 0) { st->mem_burst_count = 0; st->mem_hang_count = 0; return 0; } /* update the counters (hang_count, burst_count) */ if ((st->mem_vadreg & 0x4000) != 0) { st->mem_burst_count++; if (st->mem_burst_count >= burst_len) { st->mem_hang_count = hang_len; } return 1; } else { st->mem_burst_count = 0; if (st->mem_hang_count > 0) { st->mem_hang_count--; return 1; } } return 0; } /* * E_DTX_noise_estimate_update * * Parameters: * st I/0: State struct * level I: sub-band levels of the input frame * * Function: * Update of background noise estimate * * Returns: * void */ static void E_DTX_noise_estimate_update(E_DTX_Vad_State *st, Float32 level[]) { Float32 alpha_up, alpha_down, bckr_add, temp; Word32 i; /* Control update of bckr_est[] */ E_DTX_update_cntrl(st, level); /* Choose update speed */ bckr_add = 2.0; if ((0x7800 & st->mem_vadreg) == 0) { alpha_up = ALPHA_UP1; alpha_down = ALPHA_DOWN1; } else { if (st->mem_stat_count == 0) { alpha_up = ALPHA_UP2; alpha_down = ALPHA_DOWN2; } else { alpha_up = 0.0; alpha_down = ALPHA3; bckr_add = 0.0; } } /* Update noise estimate (bckr_est) */ for (i = 0; i < COMPLEN; i++) { temp = st->mem_level[i] - st->mem_bckr_est[i]; if (temp < 0.0) { /* update downwards*/ st->mem_bckr_est[i] += -2 + (alpha_down * temp); /* limit minimum value of the noise estimate to NOISE_MIN */ if (st->mem_bckr_est[i] < NOISE_MIN) { st->mem_bckr_est[i] = NOISE_MIN; } } else { /* update upwards */ st->mem_bckr_est[i] += bckr_add + (alpha_up * temp); /* limit maximum value of the noise estimate to NOISE_MAX */ if (st->mem_bckr_est[i] > NOISE_MAX) { st->mem_bckr_est[i] = NOISE_MAX; } } } /* Update signal levels of the previous frame (old_level) */ memcpy(st->mem_level, level, COMPLEN * sizeof(Float32)); } /* * E_DTX_decision * * Parameters: * st I/0: State struct * level I: sub-band levels of the input frame * pow_sum I: power of the input frame * * Function: * Calculates VAD_flag * * Returns: * VAD_flag */ static Word16 E_DTX_decision(E_DTX_Vad_State *st, Float32 level[COMPLEN], Float64 pow_sum) { Float64 snr_sum; Float32 vad_thr, temp, noise_level; Float32 ilog2_speech_level, ilog2_noise_level; Float32 temp2; Word32 i; Word16 low_power_flag; Word16 hang_len,burst_len; /* * Calculate squared sum of the input levels (level) * divided by the background noise components (bckr_est). */ snr_sum = 0.0; for (i = 0; i < COMPLEN; i++) { temp = level[i] / st->mem_bckr_est[i]; snr_sum += temp * temp; } /* Calculate average level of estimated background noise */ temp = 0.0; for (i = 1; i < COMPLEN; i++) /* ignore lowest band */ { temp += st->mem_bckr_est[i]; } noise_level = (Float32)(temp * 0.0625); /* * if SNR is lower than a threshold (MIN_SPEECH_SNR), * and increase speech_level */ temp = noise_level * MIN_SPEECH_SNR * 8; if (st->mem_speech_level <= temp) { st->mem_speech_level = temp; /* avoid log10 error */ temp -= 1E-8F; } ilog2_noise_level = (Float32)(-1024.0F * log10(noise_level / 2147483648.0F) / log10(2.0F)); /* * If SNR is very poor, speech_level is probably corrupted by noise level. This * is correctred by subtracting -MIN_SPEECH_SNR*noise_level from speech level */ ilog2_speech_level = (Float32)(-1024.0F * log10((st->mem_speech_level - temp) / 2147483648.0F) / log10(2.0F)); temp = NO_SLOPE * (ilog2_noise_level- NO_P1) + THR_HIGH; temp2 = SP_CH_MIN + SP_SLOPE * (ilog2_speech_level - SP_P1); if (temp2 < SP_CH_MIN) { temp2 = SP_CH_MIN; } if (temp2 > SP_CH_MAX) { temp2 = SP_CH_MAX; } vad_thr = temp + temp2; if (vad_thr < THR_MIN) { vad_thr = THR_MIN; } /* Shift VAD decision register */ st->mem_vadreg = (Word16)(st->mem_vadreg >> 1); /* Make intermediate VAD decision */ if (snr_sum > (vad_thr * (Float32)COMPLEN / 128.0F)) { st->mem_vadreg = (Word16)(st->mem_vadreg | 0x4000); } /* primary vad decision made */ /* check if the input power (pow_sum) is lower than a threshold" */ if (pow_sum < VAD_POW_LOW) { low_power_flag = 1; } else { low_power_flag = 0; } /* Update speech subband background noise estimates */ E_DTX_noise_estimate_update(st, level); hang_len = (Word16)((HANG_SLOPE * (vad_thr - HANG_P1) - 0.5) + HANG_HIGH); if (hang_len < HANG_LOW) { hang_len = HANG_LOW; } burst_len = (Word16)((BURST_SLOPE * (vad_thr - BURST_P1) - 0.5) + BURST_HIGH); return(E_DTX_hangover_addition(st, low_power_flag, hang_len,burst_len)); } /* * E_DTX_dpeech_estimate * * Parameters: * st I/0: State struct * in_level I: level of the input frame * * Function: * Estimate speech level * * Maximum signal level is searched and stored to the variable sp_max. * The speech frames must locate within SP_EST_COUNT number of frames to be counted. * Thus, noisy frames having occasional VAD = "1" decisions will not * affect to the estimated speech_level. * * Returns: * void */ static void E_DTX_speech_estimate(E_DTX_Vad_State *st, Float32 in_level) { Float32 alpha, tmp; /* if the required activity count cannot be achieved, reset counters */ if (SP_ACTIVITY_COUNT > (SP_EST_COUNT - st->mem_sp_est_cnt + st->mem_sp_max_cnt)) { st->mem_sp_est_cnt = 0; st->mem_sp_max = 0.0; st->mem_sp_max_cnt = 0; } st->mem_sp_est_cnt++; if (((st->mem_vadreg & 0x4000) || (in_level > st->mem_speech_level)) && (in_level > MIN_SPEECH_LEVEL1)) { if (in_level > st->mem_sp_max) { st->mem_sp_max = in_level; } st->mem_sp_max_cnt++; if (st->mem_sp_max_cnt >= SP_ACTIVITY_COUNT) { tmp = st->mem_sp_max / 2.0F; /* scale to get "average" speech level*/ if (tmp > st->mem_speech_level) { alpha = ALPHA_SP_UP; } else { alpha = ALPHA_SP_DOWN; } if (tmp > MIN_SPEECH_LEVEL2) { st->mem_speech_level += alpha * (tmp - st->mem_speech_level); } st->mem_sp_max = 0.0; st->mem_sp_max_cnt = 0; st->mem_sp_est_cnt = 0; } } } /* * E_DTX_vad_reset * * Parameters: * state I/0: State struct * * Function: * Initialises state memory * * Returns: * non-zero with error, zero for ok */ Word32 E_DTX_vad_reset (E_DTX_Vad_State *state) { Word32 i; if (state == (E_DTX_Vad_State *) NULL) { return -1; } /* Initialize pitch detection variables */ state->mem_pitch_tone = 0; state->mem_vadreg = 0; state->mem_hang_count = 0; state->mem_burst_count = 0; state->mem_hang_count = 0; /* initialize memory used by the filter bank */ memset(state->mem_a_data5, 0, F_5TH_CNT * 2 * sizeof(Float32)); memset(state->mem_a_data3, 0, F_3TH_CNT * sizeof(Float32)); /* initialize the rest of the memory */ for (i = 0; i < COMPLEN; i++) { state->mem_bckr_est[i] = NOISE_INIT; state->mem_level[i] = NOISE_INIT; state->mem_ave_level[i] = NOISE_INIT; state->mem_sub_level[i] = 0; } state->mem_sp_est_cnt = 0; state->mem_sp_max = 0; state->mem_sp_max_cnt = 0; state->mem_speech_level = SPEECH_LEVEL_INIT; state->mem_pow_sum = 0; state->mem_stat_count = 0; return 0; } /* * E_DTX_vad_init * * Parameters: * state I/0: State struct * * Function: * Allocates state memory and initializes state memory * * Returns: * non-zero with error, zero for ok */ Word32 E_DTX_vad_init (E_DTX_Vad_State **state) { E_DTX_Vad_State* s; if (state == (E_DTX_Vad_State **) NULL) { return -1; } *state = NULL; /* allocate memory */ if ((s = (E_DTX_Vad_State *) malloc(sizeof(E_DTX_Vad_State))) == NULL) { return -1; } E_DTX_vad_reset(s); *state = s; return 0; } /* * E_DTX_vad_exit * * Parameters: * state I/0: State struct * * Function: * The memory used for state memory is freed * * Returns: * void */ void E_DTX_vad_exit (E_DTX_Vad_State **state) { if (state == NULL || *state == NULL) { return; } /* deallocate memory */ free(*state); *state = NULL; return; } /* * E_DTX_pitch_tone_detection * * Parameters: * state I/0: State struct * p_gain I: pitch gain * * Function: * Set tone flag if pitch gain is high. This is used to detect * signaling tones and other signals with high pitch gain. * * Returns: * void */ void E_DTX_pitch_tone_detection (E_DTX_Vad_State *st, Float32 p_gain) { /* update tone flag and pitch flag */ st->mem_pitch_tone = (Word16)(st->mem_pitch_tone >> 1); /* if (pitch_gain > TONE_THR) set tone flag */ if (p_gain > TONE_THR) { st->mem_pitch_tone = (Word16)(st->mem_pitch_tone | 0x4000); } } /* * E_DTX_vad * * Parameters: * st I/0: State struct * in_buf I: samples of the input frame * * Function: * Main program for Voice Activity Detection (VAD) * * Returns: * VAD Decision, 1 = speech, 0 = noise */ Word16 E_DTX_vad(E_DTX_Vad_State *st, Float32 in_buf[]) { Float64 L_temp, pow_sum; Float32 level[COMPLEN]; Float32 temp; Word32 i; Word16 VAD_flag; /* Calculate power of the input frame. */ L_temp = 0.0; for (i = 0; i < FRAME_LEN; i++) { L_temp += in_buf[i] * in_buf[i]; } L_temp *= 2.0; /* pow_sum = power of current frame and previous frame */ pow_sum = L_temp + st->mem_pow_sum; /* save power of current frame for next call */ st->mem_pow_sum = L_temp; /* If input power is very low, clear tone flag */ if (pow_sum < POW_PITCH_TONE_THR) { st->mem_pitch_tone = (Word16)(st->mem_pitch_tone & 0x1fff); } /* Run the filter bank and calculate signal levels at each band */ E_DTX_filter_bank(st, in_buf, level); /* compute VAD decision */ VAD_flag = E_DTX_decision(st, level, pow_sum); /* Calculate input level */ L_temp = 0.0; for (i = 1; i < COMPLEN; i++) /* ignore lowest band */ { L_temp += level[i]; } temp = (Float32)(L_temp / 16.0F); E_DTX_speech_estimate(st, temp); /* Estimate speech level */ return(VAD_flag); } h323plus/plugins/audio/G.722.2/AMR-WB/enc_util.c0000644000175000017500000007054611341106231017427 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #include #include #include "typedef.h" #include "enc_main.h" #include "enc_lpc.h" #ifdef WIN32 #pragma warning( disable : 4310) #endif #define MAX_16 (Word16)0x7FFF #define MIN_16 (Word16)0x8000 #define MAX_31 (Word32)0x3FFFFFFF #define MIN_31 (Word32)0xC0000000 #define L_FRAME16k 320 /* Frame size at 16kHz */ #define L_SUBFR16k 80 /* Subframe size at 16kHz */ #define L_SUBFR 64 /* Subframe size */ #define M16k 20 /* Order of LP filter */ #define L_WINDOW 384 /* window size in LP analysis */ #define PREEMPH_FAC 0.68F /* preemphasis factor */ extern const Word16 E_ROM_pow2[]; extern const Word16 E_ROM_log2[]; extern const Word16 E_ROM_isqrt[]; extern const Float32 E_ROM_fir_6k_7k[]; extern const Float32 E_ROM_hp_gain[]; extern const Float32 E_ROM_fir_ipol[]; extern const Float32 E_ROM_hamming_cos[]; /* * E_UTIL_random * * Parameters: * seed I/O: seed for random number * * Function: * Signed 16 bits random generator. * * Returns: * random number */ Word16 E_UTIL_random(Word16 *seed) { /*static Word16 seed = 21845;*/ *seed = (Word16) (*seed * 31821L + 13849L); return(*seed); } /* * E_UTIL_saturate * * Parameters: * inp I: 32-bit number * * Function: * Saturation to 16-bit number * * Returns: * 16-bit number */ Word16 E_UTIL_saturate(Word32 inp) { Word16 out; if ((inp < MAX_16) & (inp > MIN_16)) { out = (Word16)inp; } else { if (inp > 0) { out = MAX_16; } else { out = MIN_16; } } return(out); } /* * E_UTIL_saturate_31 * * Parameters: * inp I: 32-bit number * * Function: * Saturation to 31-bit number * * Returns: * 31(32)-bit number */ Word32 E_UTIL_saturate_31(Word32 inp) { Word32 out; if ((inp < MAX_31) & (inp > MIN_31)) { out = inp; } else { if (inp > 0) { out = MAX_31; } else { out = MIN_31; } } return(out); } /* * E_UTIL_norm_s * * Parameters: * L_var1 I: 32 bit Word32 signed integer (Word32) whose value * falls in the range 0xffff 8000 <= var1 <= 0x0000 7fff. * * Function: * Produces the number of left shift needed to normalize the 16 bit * variable var1 for positive values on the interval with minimum * of 16384 and maximum of 32767, and for negative values on * the interval with minimum of -32768 and maximum of -16384. * * Returns: * 16 bit Word16 signed integer (Word16) whose value falls in the range * 0x0000 0000 <= var_out <= 0x0000 000f. */ Word16 E_UTIL_norm_s (Word16 var1) { Word16 var_out; if (var1 == 0) { var_out = 0; } else { if (var1 == -1) { var_out = 15; } else { if (var1 < 0) { var1 = (Word16)~var1; } for (var_out = 0; var1 < 0x4000; var_out++) { var1 <<= 1; } } } return (var_out); } /* * E_UTIL_norm_l * * Parameters: * L_var1 I: 32 bit Word32 signed integer (Word32) whose value * falls in the range 0x8000 0000 <= var1 <= 0x7fff ffff. * * Function: * Produces the number of left shifts needed to normalize the 32 bit * variable L_var1 for positive values on the interval with minimum of * 1073741824 and maximum of 2147483647, and for negative values on * the interval with minimum of -2147483648 and maximum of -1073741824; * in order to normalize the result, the following operation must be done: * norm_L_var1 = L_shl(L_var1,norm_l(L_var1)). * * Returns: * 16 bit Word16 signed integer (Word16) whose value falls in the range * 0x0000 0000 <= var_out <= 0x0000 001f. */ Word16 E_UTIL_norm_l (Word32 L_var1) { Word16 var_out; if (L_var1 == 0) { var_out = 0; } else { if (L_var1 == (Word32) 0xffffffffL) { var_out = 31; } else { if (L_var1 < 0) { L_var1 = ~L_var1; } for (var_out = 0; L_var1 < (Word32) 0x40000000L; var_out++) { L_var1 <<= 1; } } } return (var_out); } /* * E_UTIL_l_extract * * Parameters: * L_32 I: 32 bit integer. * hi O: b16 to b31 of L_32 * lo O: (L_32 - hi<<16)>>1 * * Function: * Extract from a 32 bit integer two 16 bit DPF. * * Returns: * void */ void E_UTIL_l_extract(Word32 L_32, Word16 *hi, Word16 *lo) { *hi = (Word16)(L_32 >> 16); *lo = (Word16)((L_32 >> 1) - ((*hi * 16384) << 1)); return; } /* * E_UTIL_mpy_32_16 * * Parameters: * hi I: hi part of 32 bit number * lo I: lo part of 32 bit number * n I: 16 bit number * * Function: * Multiply a 16 bit integer by a 32 bit (DPF). The result is divided * by 2^15. * * L_32 = (hi1*lo2)<<1 + ((lo1*lo2)>>15)<<1 * * Returns: * 32 bit result */ Word32 E_UTIL_mpy_32_16 (Word16 hi, Word16 lo, Word16 n) { Word32 L_32; L_32 = (hi * n) << 1; L_32 = L_32 + (((lo * n) >> 15) << 1); return (L_32); } /* * E_UTIL_pow2 * * Parameters: * exponant I: (Q0) Integer part. (range: 0 <= val <= 30) * fraction I: (Q15) Fractionnal part. (range: 0.0 <= val < 1.0) * * Function: * L_x = pow(2.0, exponant.fraction) (exponant = interger part) * = pow(2.0, 0.fraction) << exponant * * Algorithm: * * The function Pow2(L_x) is approximated by a table and linear * interpolation. * * 1 - i = bit10 - b15 of fraction, 0 <= i <= 31 * 2 - a = bit0 - b9 of fraction * 3 - L_x = table[i] << 16 - (table[i] - table[i + 1]) * a * 2 * 4 - L_x = L_x >> (30-exponant) (with rounding) * * Returns: * range 0 <= val <= 0x7fffffff */ Word32 E_UTIL_pow2(Word16 exponant, Word16 fraction) { Word32 L_x, tmp, i, exp; Word16 a; L_x = fraction * 32; /* L_x = fraction<<6 */ i = L_x >> 15; /* Extract b10-b16 of fraction */ a = (Word16)(L_x); /* Extract b0-b9 of fraction */ a = (Word16)(a & (Word16)0x7fff); L_x = E_ROM_pow2[i] << 16; /* table[i] << 16 */ tmp = E_ROM_pow2[i] - E_ROM_pow2[i + 1]; /* table[i] - table[i+1] */ L_x = L_x - ((tmp * a) << 1); /* L_x -= tmp*a*2 */ exp = 30 - exponant; L_x = (L_x + (1 << (exp - 1))) >> exp; return(L_x); } /* * E_UTIL_normalised_log2 * * Parameters: * L_x I: input value (normalized) * exp I: norm_l (L_x) * exponent O: Integer part of Log2. (range: 0<=val<=30) * fraction O: Fractional part of Log2. (range: 0<=val<1) * * Function: * Computes log2(L_x, exp), where L_x is positive and * normalized, and exp is the normalisation exponent * If L_x is negative or zero, the result is 0. * * The function Log2(L_x) is approximated by a table and linear * interpolation. The following steps are used to compute Log2(L_x) * * 1. exponent = 30 - norm_exponent * 2. i = bit25 - b31 of L_x; 32 <= i <= 63 (because of normalization). * 3. a = bit10 - b24 * 4. i -= 32 * 5. fraction = table[i] << 16 - (table[i] - table[i + 1]) * a * 2 * * * Returns: * void */ static void E_UTIL_normalised_log2(Word32 L_x, Word16 exp, Word16 *exponent, Word16 *fraction) { Word32 i, a, tmp; Word32 L_y; if (L_x <= 0) { *exponent = 0; *fraction = 0; return; } *exponent = (Word16)(30 - exp); L_x = L_x >> 10; i = L_x >> 15; /* Extract b25-b31 */ a = L_x; /* Extract b10-b24 of fraction */ a = a & 0x00007fff; i = i - 32; L_y = E_ROM_log2[i] << 16; /* table[i] << 16 */ tmp = E_ROM_log2[i] - E_ROM_log2[i + 1]; /* table[i] - table[i+1] */ L_y = L_y - ((tmp * a) << 1); /* L_y -= tmp*a*2 */ *fraction = (Word16)(L_y >> 16); return; } /* * E_UTIL_log2 * * Parameters: * L_x I: input value * exponent O: Integer part of Log2. (range: 0<=val<=30) * fraction O: Fractional part of Log2. (range: 0<=val<1) * * Function: * Computes log2(L_x), where L_x is positive. * If L_x is negative or zero, the result is 0. * * Returns: * void */ void E_UTIL_log2_32 (Word32 L_x, Word16 *exponent, Word16 *fraction) { Word16 exp; exp = E_UTIL_norm_l(L_x); E_UTIL_normalised_log2((L_x << exp), exp, exponent, fraction); } /* * E_UTIL_interpol * * Parameters: * x I: input vector * fir I: filter coefficient * frac I: fraction (0..resol) * resol I: resolution * nb_coef I: number of coefficients * * Function: * Fractional interpolation of signal at position (frac/up_samp) * * Returns: * result of interpolation */ static Float32 E_UTIL_interpol(Float32 *x, Word32 frac, Word32 up_samp, Word32 nb_coef) { Word32 i; Float32 s; Float32 *x1, *x2; const Float32 *c1, *c2; x1 = &x[0]; x2 = &x[1]; c1 = &E_ROM_fir_ipol[frac]; c2 = &E_ROM_fir_ipol[up_samp - frac]; s = 0.0; for(i = 0; i < nb_coef; i++) { s += x1[-i] * c1[up_samp * i] + x2[i] * c2[up_samp * i]; } return s; } /* * E_UTIL_hp50_12k8 * * Parameters: * signal I/O: signal * lg I: lenght of signal * mem I/O: filter memory [6] * * Function: * 2nd order high pass filter with cut off frequency at 50 Hz. * * Algorithm: * * y[i] = b[0]*x[i] + b[1]*x[i-1] + b[2]*x[i-2] * + a[1]*y[i-1] + a[2]*y[i-2]; * * b[3] = {0.989501953f, -1.979003906f, 0.989501953f}; * a[3] = {1.000000000F, 1.978881836f,-0.966308594f}; * * * Returns: * void */ void E_UTIL_hp50_12k8(Float32 signal[], Word32 lg, Float32 mem[]) { Word32 i; Float32 x0, x1, x2, y0, y1, y2; y1 = mem[0]; y2 = mem[1]; x0 = mem[2]; x1 = mem[3]; for(i = 0; i < lg; i++) { x2 = x1; x1 = x0; x0 = signal[i]; y0 = y1 * 1.978881836F + y2 * -0.979125977F + x0 * 0.989501953F + x1 * -1.979003906F + x2 * 0.989501953F; signal[i] = y0; y2 = y1; y1 = y0; } mem[0] = ((y1 > 1e-10) | (y1 < -1e-10)) ? y1 : 0; mem[1] = ((y2 > 1e-10) | (y2 < -1e-10)) ? y2 : 0; mem[2] = ((x0 > 1e-10) | (x0 < -1e-10)) ? x0 : 0; mem[3] = ((x1 > 1e-10) | (x1 < -1e-10)) ? x1 : 0; return; } /* * E_UTIL_hp400_12k8 * * Parameters: * signal I/O: signal * lg I: lenght of signal * mem I/O: filter memory [4] * * Function: * 2nd order high pass filter with cut off frequency at 400 Hz. * * Algorithm: * * y[i] = b[0]*x[i] + b[1]*x[i-1] + b[2]*x[i-2] * + a[1]*y[i-1] + a[2]*y[i-2]; * * b[3] = {0.893554687, -1.787109375, 0.893554687}; * a[3] = {1.000000000, 1.787109375, -0.864257812}; * * * Returns: * void */ static void E_UTIL_hp400_12k8(Float32 signal[], Word32 lg, Float32 mem[]) { Word32 i; Float32 x0, x1, x2; Float32 y0, y1, y2; y1 = mem[0]; y2 = mem[1]; x0 = mem[2]; x1 = mem[3]; for(i = 0; i < lg; i++) { x2 = x1; x1 = x0; x0 = signal[i]; y0 = y1 * 1.787109375F + y2 * -0.864257812F + x0 * 0.893554687F + x1 * - 1.787109375F + x2 * 0.893554687F; signal[i] = y0; y2 = y1; y1 = y0; } mem[0] = y1; mem[1] = y2; mem[2] = x0; mem[3] = x1; return; } /* * E_UTIL_bp_6k_7k * * Parameters: * signal I/O: signal * lg I: lenght of signal * mem I/O: filter memory [4] * * Function: * 15th order band pass 6kHz to 7kHz FIR filter. * * Returns: * void */ static void E_UTIL_bp_6k_7k(Float32 signal[], Word32 lg, Float32 mem[]) { Float32 x[L_SUBFR16k + 30]; Float32 s0, s1, s2, s3; Float32 *px; Word32 i, j; memcpy(x, mem, 30 * sizeof(Float32)); memcpy(x + 30, signal, lg * sizeof(Float32)); px = x; for(i = 0; i < lg; i++) { s0 = 0; s1 = px[0] * E_ROM_fir_6k_7k[0]; s2 = px[1] * E_ROM_fir_6k_7k[1]; s3 = px[2] * E_ROM_fir_6k_7k[2]; for(j = 3; j < 31; j += 4) { s0 += px[j] * E_ROM_fir_6k_7k[j]; s1 += px[j + 1] * E_ROM_fir_6k_7k[j + 1]; s2 += px[j + 2] * E_ROM_fir_6k_7k[j + 2]; s3 += px[j + 3] * E_ROM_fir_6k_7k[j + 3]; } px++; signal[i] = (Float32)((s0 + s1 + s2 + s3) * 0.25F); /* gain of coef = 4.0 */ } memcpy(mem, x + lg, 30 * sizeof(Float32)); return; } /* * E_UTIL_preemph * * Parameters: * x I/O: signal * mu I: preemphasis factor * lg I: vector size * mem I/O: memory (x[-1]) * * Function: * Filtering through 1 - mu z^-1 * * * Returns: * void */ void E_UTIL_preemph(Word16 x[], Word16 mu, Word32 lg, Word16 *mem) { Word32 i, L_tmp; Word16 temp; temp = x[lg - 1]; for (i = lg - 1; i > 0; i--) { L_tmp = x[i] << 15; L_tmp -= x[i - 1] * mu; x[i] = (Word16)((L_tmp + 0x4000) >> 15); } L_tmp = (x[0] << 15); L_tmp -= *mem * mu; x[0] = (Word16)((L_tmp + 0x4000) >> 15); *mem = temp; return; } void E_UTIL_f_preemph(Float32 *signal, Float32 mu, Word32 L, Float32 *mem) { Word32 i; Float32 temp; temp = signal[L - 1]; for (i = L - 1; i > 0; i--) { signal[i] = signal[i] - mu * signal[i - 1]; } signal[0] -= mu * (*mem); *mem = temp; return; } /* * E_UTIL_deemph * * Parameters: * signal I/O: signal * mu I: deemphasis factor * L I: vector size * mem I/O: memory (signal[-1]) * * Function: * Filtering through 1/(1-mu z^-1) * Signal is divided by 2. * * Returns: * void */ void E_UTIL_deemph(Float32 *signal, Float32 mu, Word32 L, Float32 *mem) { Word32 i; signal[0] = signal[0] + mu * (*mem); for (i = 1; i < L; i++) { signal[i] = signal[i] + mu * signal[i - 1]; } *mem = signal[L - 1]; if ((*mem < 1e-10) & (*mem > -1e-10)) { *mem = 0; } return; } /* * E_UTIL_synthesis * * Parameters: * a I: LP filter coefficients * m I: order of LP filter * x I: input signal * y O: output signal * lg I: size of filtering * mem I/O: initial filter states * update_m I: update memory flag * * Function: * Perform the synthesis filtering 1/A(z). * Memory size is always M. * * Returns: * void */ void E_UTIL_synthesis(Float32 a[], Float32 x[], Float32 y[], Word32 l, Float32 mem[], Word32 update_m) { Float32 buf[L_FRAME16k + M16k]; /* temporary synthesis buffer */ Float32 s; Float32 *yy; Word32 i, j; /* copy initial filter states into synthesis buffer */ memcpy(buf, mem, M * sizeof(Float32)); yy = &buf[M]; for (i = 0; i < l; i++) { s = x[i]; for (j = 1; j <= M; j += 4) { s -= a[j] * yy[i - j]; s -= a[j + 1] * yy[i - (j + 1)]; s -= a[j + 2] * yy[i - (j + 2)]; s -= a[j + 3] * yy[i - (j + 3)]; } yy[i] = s; y[i] = s; } /* Update memory if required */ if (update_m) { memcpy(mem, &yy[l - M], M * sizeof(Float32)); } return; } /* * E_UTIL_down_samp * * Parameters: * res I: signal to down sample * res_d O: down sampled signal * L_frame_d I: length of output * * Function: * Down sample to 4/5 * * Returns: * void */ static void E_UTIL_down_samp(Float32 *res, Float32 *res_d, Word32 L_frame_d) { Word32 i, j, frac; Float32 pos, fac; fac = 0.8F; pos = 0; for(i = 0; i < L_frame_d; i++) { j = (Word32)pos; /* j = (Word32)( (Float32)i * inc); */ frac = (Word32)(((pos - (Float32)j) * 4) + 0.5); res_d[i] = fac * E_UTIL_interpol(&res[j], frac, 4, 15); pos += 1.25F; } return; } /* * E_UTIL_decim_12k8 * * Parameters: * sig16k I: signal to decimate * lg I: length of input * sig12k8 O: decimated signal * mem I/O: memory (2*15) * * Function: * Decimation of 16kHz signal to 12.8kHz. * * Returns: * void */ void E_UTIL_decim_12k8(Float32 sig16k[], Word32 lg, Float32 sig12k8[], Float32 mem[]) { Float32 signal[(2 * 15) + L_FRAME16k]; memcpy(signal, mem, 2 * 15 * sizeof(Float32)); memcpy(&signal[2 * 15], sig16k, lg * sizeof(Float32)); E_UTIL_down_samp(signal + 15, sig12k8, lg * 4 / 5); memcpy(mem, &signal[lg], 2 * 15 * sizeof(Float32)); return; } /* * E_UTIL_residu * * Parameters: * a I: LP filter coefficients (Q12) * x I: input signal (usually speech) * y O: output signal (usually residual) * l I: size of filtering * * Function: * Compute the LP residual by filtering the input speech through A(z). * Order of LP filter = M. * * Returns: * void */ void E_UTIL_residu(Float32 *a, Float32 *x, Float32 *y, Word32 l) { Float32 s; Word32 i; for (i = 0; i < l; i++) { s = x[i]; s += a[1] * x[i - 1]; s += a[2] * x[i - 2]; s += a[3] * x[i - 3]; s += a[4] * x[i - 4]; s += a[5] * x[i - 5]; s += a[6] * x[i - 6]; s += a[7] * x[i - 7]; s += a[8] * x[i - 8]; s += a[9] * x[i - 9]; s += a[10] * x[i - 10]; s += a[11] * x[i - 11]; s += a[12] * x[i - 12]; s += a[13] * x[i - 13]; s += a[14] * x[i - 14]; s += a[15] * x[i - 15]; s += a[16] * x[i - 16]; y[i] = s; } return; } /* * E_UTIL_convolve * * Parameters: * x I: input vector * h I: impulse response (or second input vector) (Q15) * y O: output vetor (result of convolution) * * Function: * Perform the convolution between two vectors x[] and h[] and * write the result in the vector y[]. All vectors are of length L. * Only the first L samples of the convolution are considered. * Vector size = L_SUBFR * * Returns: * void */ void E_UTIL_convolve(Word16 x[], Word16 q, Float32 h[], Float32 y[]) { Float32 fx[L_SUBFR]; Float32 temp, scale; Word32 i, n; scale = (Float32)pow(2, -q); for (i = 0; i < L_SUBFR; i++) { fx[i] = (Float32)(scale * x[i]); } for (n = 0; n < L_SUBFR; n += 2) { temp = 0.0; for (i = 0; i <= n; i++) { temp += (Float32)(fx[i] * h[n - i]); } y[n] = temp; temp = 0.0; for (i = 0; i <= (n + 1); i += 2) { temp += (Float32)(fx[i] * h[(n + 1) - i]); temp += (Float32)(fx[i + 1] * h[n - i]); } y[n + 1] = temp; } return; } void E_UTIL_f_convolve(Float32 x[], Float32 h[], Float32 y[]) { Float32 temp; Word32 i, n; for (n = 0; n < L_SUBFR; n += 2) { temp = 0.0; for (i = 0; i <= n; i++) { temp += x[i] * h[n - i]; } y[n] = temp; temp = 0.0; for (i = 0; i <= (n + 1); i += 2) { temp += x[i] * h[(n + 1) - i]; temp += x[i + 1] * h[n - i]; } y[n + 1] = temp; } return; } /* * E_UTIL_signal_up_scale * * Parameters: * x I/O: signal to scale * exp I: exponent: x = round(x << exp) * * Function: * Scale signal up to get maximum of dynamic. * * Returns: * void */ void E_UTIL_signal_up_scale(Word16 x[], Word16 exp) { Word32 i; Word32 tmp; for (i = 0; i < (PIT_MAX + L_INTERPOL + L_SUBFR); i++) { tmp = x[i] << exp; x[i] = E_UTIL_saturate(tmp); } return; } /* * E_UTIL_signal_down_scale * * Parameters: * x I/O: signal to scale * lg I: size of x[] * exp I: exponent: x = round(x << exp) * * Function: * Scale signal up to get maximum of dynamic. * * Returns: * 32 bit result */ void E_UTIL_signal_down_scale(Word16 x[], Word32 lg, Word16 exp) { Word32 i, tmp; for (i = 0; i < lg; i++) { tmp = x[i] << 16; tmp = tmp >> exp; x[i] = (Word16)((tmp + 0x8000) >> 16); } return; } /* * E_UTIL_dot_product12 * * Parameters: * x I: 12bit x vector * y I: 12bit y vector * lg I: vector length (x*4) * exp O: exponent of result (0..+30) * * Function: * Compute scalar product of using accumulator. * The result is normalized (in Q31) with exponent (0..30). * * Returns: * Q31 normalised result (1 < val <= -1) */ Word32 E_UTIL_dot_product12(Word16 x[], Word16 y[], Word32 lg, Word32 *exp) { Word32 i, sft, L_sum, L_sum1, L_sum2, L_sum3, L_sum4; L_sum1 = 0L; L_sum2 = 0L; L_sum3 = 0L; L_sum4 = 0L; for (i = 0; i < lg; i += 4) { L_sum1 += x[i] * y[i]; L_sum2 += x[i + 1] * y[i + 1]; L_sum3 += x[i + 2] * y[i + 2]; L_sum4 += x[i + 3] * y[i + 3]; } L_sum1 = E_UTIL_saturate_31(L_sum1); L_sum2 = E_UTIL_saturate_31(L_sum2); L_sum3 = E_UTIL_saturate_31(L_sum3); L_sum4 = E_UTIL_saturate_31(L_sum4); L_sum1 += L_sum3; L_sum2 += L_sum4; L_sum1 = E_UTIL_saturate_31(L_sum1); L_sum2 = E_UTIL_saturate_31(L_sum2); L_sum = L_sum1 + L_sum2; L_sum = (E_UTIL_saturate_31(L_sum) << 1) + 1; /* Normalize acc in Q31 */ sft = E_UTIL_norm_l(L_sum); L_sum = (L_sum << sft); *exp = (30 - sft); /* exponent = 0..30 */ return (L_sum); } /* * E_UTIL_normalised_inverse_sqrt * * Parameters: * frac I/O: (Q31) normalized value (1.0 < frac <= 0.5) * exp I/O: exponent (value = frac x 2^exponent) * * Function: * Compute 1/sqrt(value). * If value is negative or zero, result is 1 (frac=7fffffff, exp=0). * * The function 1/sqrt(value) is approximated by a table and linear * interpolation. * 1. If exponant is odd then shift fraction right once. * 2. exponant = -((exponant - 1) >> 1) * 3. i = bit25 - b30 of fraction, 16 <= i <= 63 ->because of normalization. * 4. a = bit10 - b24 * 5. i -= 16 * 6. fraction = table[i]<<16 - (table[i] - table[i+1]) * a * 2 * * Returns: * void */ void E_UTIL_normalised_inverse_sqrt(Word32 *frac, Word16 *exp) { Word32 i, a, tmp; if (*frac <= (Word32) 0) { *exp = 0; *frac = 0x7fffffffL; return; } if ((Word16) (*exp & 1) == 1) /* If exponant odd -> shift right */ { *frac = (*frac >> 1); } *exp = (Word16)(-((*exp - 1) >> 1)); *frac = (*frac >> 9); i = *frac >> 16; /* Extract b25-b31 */ *frac = (*frac >> 1); a = (Word16)*frac; /* Extract b10-b24 */ a = a & 0x00007fff; i = i - 16; *frac = E_ROM_isqrt[i] << 16; /* table[i] << 16 */ tmp = E_ROM_isqrt[i] - E_ROM_isqrt[i + 1]; /* table[i] - table[i+1]) */ *frac = *frac - ((tmp * a) << 1); /* frac -= tmp*a*2 */ return; } /* * E_UTIL_enc_synthesis * * Parameters: * Aq I: quantized Az * exc I: excitation at 12kHz * synth16k O: 16kHz synthesis signal * st I/O: State structure * * Function: * Synthesis of signal at 16kHz with HF extension. * * Returns: * The quantised gain index when using the highest mode, otherwise zero */ Word32 E_UTIL_enc_synthesis(Float32 Aq[], Float32 exc[], Float32 synth16k[], Coder_State *st) { Float32 synth[L_SUBFR]; Float32 HF[L_SUBFR16k]; /* High Frequency vector */ Float32 Ap[M + 1]; Float32 HF_SP[L_SUBFR16k]; /* High Frequency vector (from original signal) */ Float32 HP_est_gain, HP_calc_gain, HP_corr_gain, fac, tmp, ener, dist_min; Float32 dist, gain2; Word32 i, hp_gain_ind = 0; /* * speech synthesis * ---------------- * - Find synthesis speech corresponding to exc2[]. * - Perform fixed deemphasis and hp 50hz filtering. * - Oversampling from 12.8kHz to 16kHz. */ E_UTIL_synthesis(Aq, exc, synth, L_SUBFR, st->mem_syn2, 1); E_UTIL_deemph(synth, PREEMPH_FAC, L_SUBFR, &(st->mem_deemph)); E_UTIL_hp50_12k8(synth, L_SUBFR, st->mem_sig_out); /* Original speech signal as reference for high band gain quantisation */ memcpy(HF_SP, synth16k, L_SUBFR16k * sizeof(Float32)); /* * HF noise synthesis * ------------------ * - Generate HF noise between 6 and 7 kHz. * - Set energy of noise according to synthesis tilt. * tilt > 0.8 ==> - 14 dB (voiced) * tilt 0.5 ==> - 6 dB (voiced or noise) * tilt < 0.0 ==> 0 dB (noise) */ /* generate white noise vector */ for(i = 0; i < L_SUBFR16k; i++) { HF[i] = (Float32)E_UTIL_random(&(st->mem_seed)); } /* set energy of white noise to energy of excitation */ ener = 0.01F; tmp = 0.01F; for(i = 0; i < L_SUBFR; i++) { ener += exc[i] * exc[i]; } for(i = 0; i < L_SUBFR16k; i++) { tmp += HF[i] * HF[i]; } tmp = (Float32)(sqrt(ener / tmp)); for(i = 0; i < L_SUBFR16k; i++) { HF[i] *= tmp; } /* find tilt of synthesis speech (tilt: 1=voiced, -1=unvoiced) */ E_UTIL_hp400_12k8(synth, L_SUBFR, st->mem_hp400); ener = 0.001f; tmp = 0.001f; for(i = 1; i < L_SUBFR; i++) { ener += synth[i] * synth[i]; tmp += synth[i] * synth[i - 1]; } fac = tmp / ener; /* modify energy of white noise according to synthesis tilt */ HP_est_gain = 1.0F - fac; gain2 = (1.0F - fac) * 1.25F; if(st->mem_vad_hist) { HP_est_gain = gain2; } if(HP_est_gain < 0.1) { HP_est_gain = 0.1f; } if(HP_est_gain > 1.0) { HP_est_gain = 1.0f; } /* synthesis of noise: 4.8kHz..5.6kHz --> 6kHz..7kHz */ E_LPC_a_weight(Aq, Ap, 0.6f, M); E_UTIL_synthesis(Ap, HF, HF, L_SUBFR16k, st->mem_syn_hf, 1); /* noise High Pass filtering (0.94ms of delay) */ E_UTIL_bp_6k_7k(HF, L_SUBFR16k, st->mem_hf); /* noise High Pass filtering (0.94ms of delay) */ E_UTIL_bp_6k_7k(HF_SP, L_SUBFR16k, st->mem_hf2); ener = 0.001F; tmp = 0.001F; for(i = 0; i < L_SUBFR16k; i++) { ener += HF_SP[i] * HF_SP[i]; tmp += HF[i] * HF[i]; } HP_calc_gain = (Float32)sqrt(ener /tmp); st->mem_gain_alpha *= st->dtx_encSt->mem_dtx_hangover_count / 7; if(st->dtx_encSt->mem_dtx_hangover_count > 6) { st->mem_gain_alpha = 1.0F; } HP_corr_gain = (HP_calc_gain * st->mem_gain_alpha) + ((1.0F - st->mem_gain_alpha) * HP_est_gain); /* Quantise the correction gain */ dist_min = 100000.0F; for(i = 0; i < 16; i++) { dist = (HP_corr_gain - E_ROM_hp_gain[i]) * (HP_corr_gain - E_ROM_hp_gain[i]); if(dist_min > dist) { dist_min = dist; hp_gain_ind = i; } } HP_corr_gain = (Float32)E_ROM_hp_gain[hp_gain_ind]; /* return the quantised gain index when using the highest mode, otherwise zero */ return(hp_gain_ind); } /* * E_UTIL_autocorr * * Parameters: * x I: input signal * r_h O: autocorrelations * * Function: * Compute the autocorrelations of windowed speech signal. * order of LP filter is M. Window size is L_WINDOW. * Analysis window is "window". * * Returns: * void */ void E_UTIL_autocorr(Float32 *x, Float32 *r) { Float32 t[L_WINDOW + M]; Word32 i, j; for (i = 0; i < L_WINDOW; i += 4) { t[i] = x[i] * E_ROM_hamming_cos[i]; t[i + 1] = x[i + 1] * E_ROM_hamming_cos[i + 1]; t[i + 2] = x[i + 2] * E_ROM_hamming_cos[i + 2]; t[i + 3] = x[i + 3] * E_ROM_hamming_cos[i + 3]; } memset(&t[L_WINDOW], 0, M * sizeof(Float32)); memset(r, 0, (M + 1) * sizeof(Float32)); for (j = 0; j < L_WINDOW; j++) { r[0] += t[j] * t[j]; r[1] += t[j] * t[j + 1]; r[2] += t[j] * t[j + 2]; r[3] += t[j] * t[j + 3]; r[4] += t[j] * t[j + 4]; r[5] += t[j] * t[j + 5]; r[6] += t[j] * t[j + 6]; r[7] += t[j] * t[j + 7]; r[8] += t[j] * t[j + 8]; r[9] += t[j] * t[j + 9]; r[10] += t[j] * t[j + 10]; r[11] += t[j] * t[j + 11]; r[12] += t[j] * t[j + 12]; r[13] += t[j] * t[j + 13]; r[14] += t[j] * t[j + 14]; r[15] += t[j] * t[j + 15]; r[16] += t[j] * t[j + 16]; } if (r[0] < 1.0F) { r[0] = 1.0F; } return; } h323plus/plugins/audio/G.722.2/AMR-WB/enc_rom.c0000644000175000017500000034402111341106231017237 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #include "typedef.h" #define L_SUBFR 64 /* Subframe size */ #define ORDER 16 /* Order of linear prediction filter */ #define M 16 /* Order of LP filter */ #define NB_SUBFR 4 /* Number of subframe per frame */ #define UP_SAMP 4 #define L_INTERPOL1 4 #define L_INTERPOL2 16 #define L_WINDOW 384 /* hamming cos window size */ #define SIZE_BK1 256 #define SIZE_BK2 256 #define SIZE_BK21 64 #define SIZE_BK22 128 #define SIZE_BK23 128 #define SIZE_BK24 32 #define SIZE_BK25 32 #define SIZE_BK21_36b 128 #define SIZE_BK22_36b 128 #define SIZE_BK23_36b 64 #define SIZE_BK_NOISE1 64 #define SIZE_BK_NOISE2 64 #define SIZE_BK_NOISE3 64 #define SIZE_BK_NOISE4 32 #define SIZE_BK_NOISE5 32 #define NB_QUA_GAIN6B 64 /* Number of quantization level */ #define NB_QUA_GAIN7B 128 /* Number of quantization level */ /* 16-byte align start */ /* * isf codebooks: two-stage VQ with split-by-5 in 2nd stage * * codebook vector dimension number of vectors * ~~~~~~~~ ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ * 1_1 9 256 * 1_2 7 256 * 2_1 3 64 * 2_2 3 128 * 2_3 3 128 * 2_4 3 32 * 2_5 4 32 */ /* * 1st stage codebook; 1st split: isf0 to isf8 */ const Float32 E_ROM_dico1_isf[SIZE_BK1 * 9] = { 226.1477F, 422.2338F, 404.4563F, 152.3442F, 1.2553F, -102.5648F, -77.5073F, -32.1403F, 14.9134F, 6.9890F, -26.5711F, -4.8001F, 122.2654F, 297.4533F, 158.0168F, 97.1963F, 43.4786F, -29.4927F, 289.1461F, 493.4574F, 504.5048F, 393.1421F, 389.3840F, 397.8990F, 397.4072F, 381.0959F, 360.5083F, -35.6482F, 323.0566F, 370.2882F, 252.9499F, 239.6172F, 209.0563F, 203.9713F, 191.4865F, 164.6219F, 16.1026F, -17.1264F, -109.6817F, -184.2085F, 254.5133F, 208.7087F, 75.3774F, 52.8718F, -35.2364F, 15.8336F, -47.0775F, -139.1713F, -23.5561F, 259.0049F, 120.0214F, 23.8825F, -18.5948F, -134.3813F, 217.4017F, 369.5988F, 409.6801F, 338.5433F, 330.4056F, 386.7012F, 434.5276F, 492.7760F, 484.6164F, -46.1429F, -79.6218F, 128.1106F, 199.9543F, 339.7710F, 309.8338F, 238.4430F, 156.8895F, 72.7742F, 61.1308F, 114.6106F, 28.7939F, -131.9070F, -185.5015F, -350.3943F, -232.0556F, -62.9803F, -194.0513F, 88.2757F, 51.2294F, -53.9555F, 120.0698F, 65.9863F, -105.8813F, -64.0929F, -151.0651F, -243.7652F, 24.1201F, -12.6302F, -23.7808F, -98.2577F, -211.1396F, -323.5447F, -401.0499F, -204.4768F, -258.4671F, 39.7202F, -23.9607F, 55.2442F, 43.6804F, -105.4100F, -97.8749F, -211.3002F, 9.7097F, -58.7138F, 2.1766F, -51.7480F, -138.9340F, -268.1601F, -37.5098F, -125.8675F, -203.7929F, -12.2603F, -127.2472F, -14.0622F, -81.7822F, -203.4806F, -89.5766F, 119.8931F, -51.7010F, -2.1055F, -38.5536F, -149.8808F, 23.6196F, -19.7370F, -92.7527F, -260.9933F, -380.1402F, -158.8319F, -276.5396F, -29.3644F, -67.0346F, 10.0869F, -54.0238F, -104.0772F, 43.4993F, -118.0066F, 16.7674F, -108.4172F, -138.9907F, -140.3299F, 222.5364F, 321.1411F, 193.8368F, -60.0340F, -121.7460F, -35.9078F, 53.6514F, 109.0639F, 145.0366F, -57.1173F, 143.6362F, 159.6491F, 26.6189F, 2.3305F, 30.0608F, 65.3329F, 78.8683F, 63.4622F, 247.1436F, 350.7171F, 389.0685F, 295.2953F, 258.6614F, 266.7955F, 305.9202F, 355.1905F, 389.1698F, -40.0882F, 114.6876F, 237.0104F, 161.9769F, 188.5636F, 180.3751F, 187.4189F, 168.3521F, 159.5175F, -46.7654F, -132.1011F, -238.9261F, -204.8685F, 228.1911F, 129.1599F, 36.0960F, 169.1651F, 107.7902F, -69.5087F, -114.5055F, -60.0494F, -15.9078F, 105.1520F, 39.1060F, -3.6140F, 83.1345F, 62.4498F, 324.4036F, 287.6214F, 108.7328F, 320.4871F, 489.7306F, 267.9902F, 278.2168F, 405.7287F, 184.7344F, -85.2571F, -118.8197F, 180.9905F, 177.4239F, 154.8864F, 106.5995F, 78.7528F, 111.5907F, 106.4840F, -90.5891F, 2.5823F, 2.5231F, -151.4854F, -184.4761F, -166.9757F, -147.6148F, -65.2055F, -39.1239F, -114.9974F, -71.3698F, 52.3087F, -18.1814F, 39.4264F, -34.2483F, -32.8691F, -45.8165F, -1.2029F, 22.1063F, 6.7469F, -79.0146F, -247.7831F, -386.2835F, -437.2287F, -208.2931F, 68.6375F, -14.1447F, 46.7840F, -11.0692F, 9.1612F, 43.4278F, -124.5574F, 124.1172F, -8.5368F, -30.1898F, 103.7909F, -105.9007F, -181.3862F, -169.7189F, -257.0920F, -250.0032F, -150.2815F, -150.4918F, -38.5650F, -26.7658F, -77.3138F, -101.1008F, -103.9903F, -17.1337F, -15.2577F, -54.2134F, -53.5373F, 66.9219F, 25.6872F, 3.6265F, -56.7222F, -147.2143F, -330.5455F, -390.5518F, -43.3139F, -126.9112F, 133.5488F, 52.7399F, -31.5816F, -111.6706F, -148.4743F, 75.1588F, -22.0969F, 119.9764F, 29.6891F, -9.5309F, -54.7378F, 264.5383F, 274.1302F, 96.5690F, 21.7008F, 97.2691F, 55.1255F, -40.9705F, -92.2272F, -38.6482F, 13.8969F, -15.1538F, -27.1357F, 135.8413F, 77.4989F, -36.1739F, 125.8114F, 35.5744F, -28.2436F, 196.2991F, 345.8166F, 588.9347F, 510.5197F, 500.8432F, 457.6244F, 436.9384F, 472.1788F, 414.4815F, 162.4519F, 280.7038F, 386.4482F, 479.3623F, 390.8287F, 411.1292F, 372.5701F, 289.3485F, 407.8594F, -49.5343F, -147.0080F, -256.8338F, 54.1618F, 243.5530F, 87.1110F, 195.7264F, 119.5070F, 85.9479F, -43.9641F, -150.1866F, -310.9041F, 196.7455F, 171.2780F, 33.0834F, 83.3645F, -32.4579F, -75.7126F, 228.4330F, 442.3277F, 481.6548F, 426.3000F, 487.1132F, 559.8019F, 590.4699F, 565.5949F, 513.3911F, -68.0544F, -164.7799F, 2.8141F, 451.2739F, 425.3554F, 461.7245F, 391.6532F, 369.1004F, 314.9413F, 3.2743F, -49.3561F, -123.9568F, -40.1754F, -137.2377F, -271.6588F, -38.4305F, -104.5226F, -209.8071F, 12.8092F, -40.2922F, -113.2953F, 65.4057F, -15.2443F, -159.0118F, 17.0998F, -81.3044F, -146.3446F, 40.4305F, -8.9102F, -24.9719F, -113.7701F, -248.7160F, -332.5068F, -423.4328F, -23.8073F, -43.9266F, -29.4866F, -119.6504F, -169.5775F, 85.2585F, -57.7724F, -138.3062F, -265.4940F, -52.0935F, -84.4635F, -47.3285F, -147.4516F, -280.5169F, -38.0164F, -50.7237F, -141.1316F, -60.9737F, -147.8608F, -233.9212F, -22.0146F, -99.1479F, -228.8716F, 91.6618F, 61.1343F, -83.5247F, 4.2834F, -101.7035F, -58.0283F, -48.6094F, -104.2664F, -155.2664F, -226.4858F, -231.7223F, -205.7180F, -314.6280F, -150.3995F, 135.1819F, -75.2552F, -171.9896F, -276.5969F, -137.0060F, -55.2086F, -99.5797F, -195.1097F, -57.2647F, -72.3255F, 174.9245F, 258.0028F, 192.8297F, 81.3562F, 198.8450F, 180.2081F, 132.0824F, 113.5126F, 58.1412F, -87.2559F, 34.2946F, 130.7081F, 62.1078F, 82.7816F, 74.4854F, 111.6818F, 120.3099F, 80.1334F, -11.9671F, 183.3834F, 313.7754F, 257.2813F, 241.7612F, 256.9710F, 329.4492F, 385.5374F, 434.7875F, -66.8195F, -94.6890F, 200.6887F, 141.3063F, 115.2635F, 204.7280F, 215.7973F, 270.9673F, 228.4647F, -24.9070F, -120.1441F, -175.1481F, -8.0896F, 110.9215F, 307.0280F, 174.2457F, 112.7169F, 35.9639F, -85.1717F, -152.2496F, -2.5803F, 66.0904F, 80.5138F, 128.8919F, 137.5303F, 159.4245F, 139.7766F, -14.1396F, 274.4125F, 374.6268F, 335.3957F, 336.4666F, 435.5791F, 495.5083F, 529.9642F, 509.9389F, -51.7794F, -133.3125F, -25.4473F, 264.8054F, 162.9175F, 171.9332F, 189.6735F, 202.1561F, 304.5228F, 12.7820F, -17.2653F, -74.5083F, -134.5510F, -180.1133F, -294.9349F, -78.6120F, 84.8225F, -12.0772F, -137.7282F, -213.7303F, -17.3509F, 48.2225F, -23.9524F, -26.4293F, -30.7054F, 11.1575F, 23.4229F, 28.3886F, -22.3550F, -158.4269F, -299.3692F, -485.7126F, -469.8884F, 93.8213F, 156.3351F, 64.4156F, -28.7029F, -110.1881F, -234.8032F, -83.3735F, -66.7772F, -146.3531F, 129.8178F, 13.7979F, -40.1959F, -11.2220F, -81.0542F, -215.8795F, -186.0052F, -249.1487F, -354.7951F, 67.0249F, -8.7287F, -52.7080F, -75.1895F, -93.5102F, -63.8842F, -40.2971F, -43.3423F, -18.3122F, 59.9384F, 48.9469F, 42.9198F, -0.3036F, -79.3921F, -222.4614F, -402.4193F, -556.4007F, -208.9512F, 60.4822F, 0.2592F, 57.2596F, -130.2469F, -254.9911F, -337.7263F, -76.9102F, -61.5888F, -8.3782F, -17.2822F, 37.1637F, 42.0772F, 151.9460F, 229.6417F, 191.5279F, 12.9809F, -92.7110F, -204.7091F, -245.2630F, -53.2589F, -101.3680F, 15.8084F, -69.0148F, -180.2926F, 176.9411F, 336.6405F, 148.3504F, 51.2260F, -50.6708F, -158.2893F, 328.7315F, 655.2856F, 719.0299F, 605.1412F, 575.6907F, 490.5742F, 422.8277F, 353.4364F, 289.8675F, 144.5240F, 474.8398F, 690.7612F, 638.0545F, 473.3627F, 248.6244F, 8.4810F, -128.9032F, 27.8837F, -29.8052F, -109.6768F, -289.4402F, -289.9344F, 350.9098F, 241.8981F, 108.0220F, 27.7568F, -86.8368F, -12.5998F, -103.5273F, -217.2510F, -9.8401F, 388.4400F, 266.5437F, 118.9818F, 49.1643F, -64.3603F, 28.5445F, 288.4229F, 348.8730F, 378.0052F, 387.8595F, 690.6161F, 887.8799F, 718.7092F, 543.2699F, -27.0127F, -136.3472F, -228.6534F, 91.4073F, 452.4637F, 352.8853F, 244.5759F, 199.3164F, 97.9452F, -0.2574F, -38.8124F, -106.0784F, -81.9691F, -235.3859F, -136.9961F, -210.8024F, -316.9619F, -149.7671F, -6.3268F, -89.9384F, -197.0412F, 160.1820F, 58.3899F, -80.1867F, -134.0614F, -254.4108F, -249.4793F, 40.1439F, -3.4822F, -88.7857F, -80.2522F, -219.3521F, -305.1500F, -421.5967F, -471.9935F, -60.7522F, 55.8529F, 24.5260F, -52.9174F, -26.1113F, -123.8744F, -235.0002F, -306.0707F, -450.7246F, -249.8812F, -56.2297F, -152.7118F, -263.1169F, -243.0294F, -78.2260F, -99.3225F, -257.7953F, -369.9445F, -154.2971F, -15.4570F, -97.8124F, -244.1879F, 10.4628F, 212.1971F, 36.6411F, -51.0200F, -150.9477F, -262.8206F, -47.9169F, -145.0780F, -295.8412F, -176.3119F, -220.4176F, -239.8767F, -162.2583F, -277.5646F, -13.5098F, -45.4312F, -120.7871F, -231.7391F, -104.6837F, 93.3399F, -13.0435F, -131.8873F, -253.9684F, -52.8010F, 36.7261F, 97.8902F, 216.2452F, 22.2667F, -121.9688F, -165.2371F, -60.1795F, -22.1111F, 91.7368F, -104.8126F, -27.6777F, 148.6412F, 44.3956F, -17.0786F, -34.0943F, 48.6552F, 67.5896F, 52.1341F, 590.8627F, 669.3461F, 483.5975F, 208.4471F, 107.7190F, 123.1392F, 179.9797F, 179.2124F, 198.5541F, -51.3512F, -7.3050F, 448.6575F, 261.8456F, 189.7417F, 139.0593F, 120.8041F, 144.0752F, 115.5179F, -87.2434F, -195.6786F, -351.1762F, -282.1990F, -27.3961F, 2.1866F, 51.0065F, 120.9792F, 154.0704F, -38.7878F, -118.5436F, -201.9035F, 97.1421F, 24.9785F, -20.8748F, 52.5830F, -4.3230F, 177.0334F, -57.4864F, -155.8205F, -285.0674F, -156.5139F, 319.0307F, 288.4199F, 313.3522F, 292.7644F, 224.7193F, -60.1766F, -170.1086F, -288.5482F, 312.6666F, 231.6275F, 142.7810F, 206.6260F, 124.0985F, 127.5073F, -87.3474F, 17.7221F, -15.2086F, -151.2513F, -201.3116F, -202.2629F, -237.4979F, -150.1082F, -125.3288F, -123.1549F, -147.2588F, 55.9560F, -39.6018F, -44.1818F, -147.1130F, -69.1241F, -56.1722F, -4.4924F, 45.5201F, 15.5222F, -93.3382F, -254.1893F, -410.5618F, -226.8515F, -287.7839F, -386.6172F, -128.1340F, 10.1233F, -19.6005F, -61.5127F, -8.8349F, -177.1218F, -110.5849F, -207.5041F, -213.2586F, 74.8075F, -98.2741F, -195.7624F, -290.1091F, -230.1600F, -244.7515F, -194.7701F, -128.1076F, -46.1729F, -28.2903F, -126.3800F, -193.1177F, -95.3231F, -119.6219F, -56.1586F, -69.0881F, -102.1922F, -52.5595F, -30.4027F, -13.9604F, -91.5188F, -202.7529F, -375.3352F, -503.8488F, -122.5019F, -187.2047F, -144.9473F, -17.6464F, -37.1158F, -113.9219F, -208.9531F, -3.1283F, -117.0010F, 43.6858F, -64.0984F, -108.2942F, 77.5131F, -38.6401F, -49.9736F, 343.9084F, 326.3879F, 226.1680F, 136.9212F, 9.0736F, -37.1756F, -84.7974F, -10.5004F, -100.6890F, 48.4106F, 394.7867F, 233.0419F, 165.9509F, 56.3291F, 2.7924F, -28.5845F, 164.3221F, 505.0226F, 640.4844F, 633.9930F, 680.5828F, 631.7908F, 585.4574F, 501.5025F, 393.1295F, -37.0300F, 293.6539F, 656.3401F, 612.9729F, 632.0821F, 560.9024F, 468.8401F, 382.9867F, 278.2211F, -26.9959F, -117.0381F, -266.9459F, -169.9414F, 442.3678F, 351.1593F, 196.7216F, 129.6217F, 42.5401F, -28.9160F, -126.1295F, -248.8180F, 219.9974F, 419.6462F, 237.5276F, 144.8018F, 41.0794F, -19.0438F, -30.6524F, 324.5342F, 466.4269F, 433.6403F, 538.3355F, 578.5025F, 582.9940F, 533.2873F, 475.3817F, -101.0867F, -47.3945F, 562.3863F, 521.2437F, 635.9947F, 581.9960F, 561.7294F, 477.7560F, 364.4759F, -32.1078F, -119.5424F, -239.6324F, -86.9073F, -147.6602F, -263.4799F, -212.9377F, -261.9229F, -330.2635F, 20.8260F, -48.5704F, -135.4246F, 164.8506F, 20.4817F, -48.8885F, -105.4348F, -206.6621F, 3.6375F, 30.9311F, -34.7599F, -124.8998F, -258.7565F, -390.0532F, -468.4556F, -485.3543F, -264.1984F, -115.9895F, -26.5921F, -106.6166F, -238.7686F, 53.4977F, -56.8913F, -155.1848F, -245.0791F, -329.9394F, -85.9503F, -43.8040F, -135.2615F, -311.2635F, -322.8195F, 91.5184F, -51.5741F, -73.3097F, -108.7735F, -204.0501F, -61.9589F, -158.0212F, -286.8211F, -163.7011F, 114.5577F, 29.0545F, -65.0919F, -65.1646F, 71.9506F, -59.8760F, -170.6047F, -325.2270F, -421.8182F, -131.3054F, -184.2594F, -219.1312F, -132.9352F, -98.8301F, -65.8626F, -165.1987F, -320.2537F, -353.1492F, -51.0331F, -7.3456F, -135.3074F, -235.8573F, 12.1485F, 12.8460F, -11.9241F, 121.7405F, 24.2470F, -57.8971F, 19.1365F, -23.0243F, 220.3897F, 189.9156F, -119.6102F, -129.9914F, 75.9549F, -17.3359F, 26.2798F, 28.0181F, 57.3185F, 79.8925F, 95.0199F, -81.0524F, -19.0879F, 531.3251F, 384.0082F, 378.6000F, 387.1200F, 396.1896F, 433.4382F, 379.9696F, -82.3204F, -67.1148F, 345.0646F, 244.9884F, 277.8043F, 263.1406F, 275.4622F, 311.7924F, 291.4141F, -34.2889F, -127.1388F, -298.1820F, -380.4511F, 268.4245F, 354.6007F, 200.7670F, 149.3555F, 67.1469F, -114.0830F, -239.0252F, -314.3921F, 24.6004F, 51.2722F, 105.4223F, 101.1157F, 137.3569F, 135.9245F, -91.7432F, -32.7591F, 373.1560F, 319.3955F, 437.4347F, 503.4907F, 608.7997F, 578.2119F, 502.0230F, -70.3367F, -179.9099F, -239.7652F, 256.5794F, 269.9891F, 291.1810F, 333.6932F, 305.8695F, 278.4421F, -38.0671F, -120.8247F, -186.4547F, -239.7784F, -303.6527F, -286.7954F, -300.0361F, -205.3057F, -184.5087F, -134.2125F, -185.9339F, -13.8119F, -65.8529F, 19.0133F, -30.1823F, -58.4970F, -93.5678F, -55.1841F, -20.3990F, -104.7817F, -249.4716F, -358.9899F, -499.3363F, -434.6861F, -133.7299F, -130.1813F, -59.0671F, -26.7201F, -94.4739F, -228.6340F, -28.5857F, -81.7289F, -186.7961F, -62.0135F, -167.5409F, 51.9732F, -76.8652F, -194.8085F, -392.5224F, -495.1741F, -106.3757F, -87.6781F, -40.9442F, -25.9922F, 6.6919F, -141.6526F, -241.2805F, -161.8672F, -45.4915F, -24.1067F, 7.6906F, 3.7741F, 45.2149F, 42.3436F, -76.2028F, -185.3649F, -353.8127F, -492.3104F, -348.1328F, -172.4144F, -108.0814F, -55.5374F, -10.8210F, -88.1331F, -202.9139F, -371.2243F, -273.3005F, -107.5773F, -103.9134F, -45.1607F, -40.9613F, 31.8985F, 157.9412F, 199.7964F, 203.2689F, 127.6304F, 6.7547F, -75.7475F, -130.0489F, -209.2208F, -228.8015F, -44.6527F, -50.6749F, 107.6295F, 92.4422F, 79.8121F, 133.5672F, 52.5620F, -6.2270F, -43.2877F, 261.9115F, 472.0228F, 456.3473F, 335.7553F, 289.8814F, 234.7976F, 206.1187F, 157.4174F, 120.7698F, 155.2229F, 242.6315F, 377.1642F, 293.6065F, 226.0318F, 155.2748F, 156.4116F, 128.6701F, 98.5061F, 74.5256F, 70.1303F, -53.6869F, -182.3488F, 106.1648F, 41.5585F, -37.0232F, 6.5336F, -75.1722F, -31.2252F, -113.3890F, -244.5892F, 75.8334F, 233.5228F, 76.5742F, 8.2886F, -109.6154F, 29.9907F, 199.0678F, 337.3158F, 432.8418F, 315.2969F, 366.8018F, 352.4917F, 361.4405F, 280.1715F, 187.7336F, 53.4911F, 143.3279F, 208.4704F, 298.2910F, 261.7387F, 149.2119F, 115.7060F, 59.9002F, 32.6898F, 118.3519F, 194.3090F, 56.3174F, -33.3258F, -48.8783F, -210.5418F, -188.4141F, -181.0565F, -298.4099F, 91.1937F, 135.5274F, 26.3852F, -57.5649F, 66.0117F, -82.2194F, -94.6889F, -88.3680F, -188.1230F, 119.8292F, 164.8051F, 60.2985F, -68.4990F, -150.8028F, -282.2156F, -282.8785F, -353.0452F, -396.4856F, 120.5806F, 120.4464F, 62.5068F, -23.5466F, -183.4260F, -164.0083F, -233.7240F, -309.0768F, -85.4341F, 26.4925F, 47.3529F, -53.5415F, -218.9011F, -56.8672F, -174.1118F, -201.0902F, -193.1382F, -284.6390F, 50.9597F, 20.8274F, -88.6445F, 17.8450F, 185.2710F, 12.4814F, -62.7698F, -74.9989F, -191.3486F, 83.3881F, 63.9878F, -27.8680F, -181.7226F, -342.0545F, -62.8876F, -178.1327F, -229.1320F, -18.6240F, 85.1419F, 45.8095F, 15.3667F, 69.0366F, -75.9137F, -34.4539F, -88.4330F, -163.4411F, 19.3370F, 81.8880F, 213.5459F, 222.3313F, 109.1533F, 47.1884F, -17.2578F, -19.4486F, 3.7457F, -32.8905F, 22.8266F, 54.6145F, 70.9314F, -2.0301F, 104.3592F, 45.7102F, 41.3375F, 82.5320F, 77.2795F, 210.7176F, 326.3462F, 356.6618F, 280.9097F, 240.9705F, 212.4392F, 230.9905F, 220.8317F, 250.9306F, 59.6089F, 218.2601F, 340.5622F, 179.8372F, 86.7106F, 42.1021F, 73.5578F, 70.2340F, 71.3620F, 61.9071F, 46.6476F, 111.0709F, -59.8230F, -105.9862F, 89.4424F, 34.0065F, 42.7793F, -22.3657F, -71.5290F, 31.9224F, 46.2106F, 8.2769F, 5.2717F, 15.6736F, 45.9446F, 74.5921F, 72.2933F, 63.1228F, 347.0971F, 255.3817F, 42.2624F, -13.4026F, 95.4917F, 190.7911F, 219.1920F, 207.8866F, 63.7817F, 21.7322F, 237.9311F, 133.1283F, 19.5484F, 128.6760F, 26.4302F, 103.7761F, 85.3130F, 39.2312F, 80.2880F, 7.1932F, -118.9054F, -41.8213F, -170.3956F, -190.1681F, -25.3174F, -119.5246F, -33.4058F, 60.1838F, 52.1765F, -11.5418F, -17.6690F, -28.5228F, -40.5342F, -31.3702F, -37.5340F, 95.6257F, 128.8044F, 3.7503F, -171.8902F, -331.7014F, -422.7089F, 30.8156F, 15.6229F, -103.6316F, 76.5623F, 145.2620F, 106.4321F, -70.8798F, -192.7731F, -152.0614F, 107.2952F, 31.2426F, -23.0299F, 0.9016F, -4.6471F, -96.0447F, -197.1141F, -39.1036F, -170.4243F, 8.3031F, -73.0702F, -168.4342F, -86.2673F, -18.7660F, 13.9540F, -105.8362F, -72.7468F, -57.3178F, -42.7630F, 10.3291F, 27.6536F, 83.1109F, 54.8163F, 28.1776F, -137.0164F, -242.1605F, -32.9744F, -141.6118F, 26.8712F, 17.8517F, 35.5325F, 65.1065F, -1.1122F, -37.2264F, -38.7638F, -41.0658F, -18.6295F, 44.3877F, 57.2718F, 101.1713F, 97.2361F, 67.3819F, 236.9884F, 158.4350F, 20.2720F, 23.0851F, -73.7010F, -124.8067F, 44.9800F, -33.1049F, -21.2276F, 224.2546F, 49.9567F, 88.2466F, -23.1899F, -98.6740F, 50.9732F, -24.3959F, 403.6523F, 511.0127F, 404.3978F, 440.2577F, 428.9172F, 401.8223F, 375.5111F, 321.4924F, 15.1345F, 142.1195F, 295.8327F, 367.1741F, 284.5674F, 257.7681F, 257.3533F, 227.7437F, 300.6506F, -44.9562F, -131.9449F, -296.8129F, -184.1626F, 153.8183F, 14.5297F, 172.3343F, 69.5618F, 2.2208F, -22.2475F, -119.2772F, -205.2499F, 310.9423F, 177.0844F, 73.5587F, -1.5010F, -44.3403F, 96.9000F, 27.7742F, 173.5793F, 311.4776F, 285.5815F, 427.9854F, 452.0145F, 477.2097F, 401.7775F, 316.6574F, 52.6696F, 140.2801F, 215.3995F, 166.1714F, 292.6204F, 318.2898F, 341.5682F, 274.8850F, 196.1860F, 51.5561F, 96.4057F, -0.0610F, -80.6567F, -175.2689F, -292.8310F, -100.7723F, -200.9591F, -247.1591F, 96.6859F, 97.0977F, 35.4401F, 47.1563F, -76.2811F, -194.8284F, -34.9894F, -110.1535F, -169.8929F, 30.4654F, 7.6447F, -108.2569F, -243.2014F, -383.8708F, -478.0505F, -162.0353F, -178.7682F, -249.4727F, 135.4580F, 198.9998F, 81.4247F, -69.9475F, -181.4226F, -284.4768F, -29.8270F, -92.7044F, -189.7940F, -40.1188F, -133.9427F, -295.2091F, -278.5829F, -103.4496F, -237.8449F, -74.7856F, -155.3338F, -248.5054F, -47.4470F, -149.6037F, -292.4242F, 221.6694F, 98.4280F, -14.0849F, -138.2963F, -163.0445F, -19.4243F, 79.5896F, 39.1792F, -58.2936F, -253.9809F, -422.3516F, -18.3412F, -2.7302F, -102.9275F, 43.5500F, -17.9005F, -70.1182F, -104.1536F, -126.4881F, -219.3935F, -153.8877F, -270.2488F, 155.3837F, 114.2388F, 188.3484F, 261.8459F, 266.6991F, 243.5570F, 172.7795F, 64.3333F, 45.3547F, 14.1479F, -58.3812F, 42.3610F, 96.6123F, 113.8369F, 96.5219F, 138.7232F, 47.5273F, 42.4855F, 87.4416F, 115.5724F, -5.4013F, 368.9961F, 386.7844F, 312.8328F, 294.8554F, 318.4847F, 330.7657F, 356.5357F, 348.3268F, 113.9440F, 136.1339F, 283.1776F, 188.4109F, 151.5282F, 128.5029F, 167.5631F, 242.2409F, 260.3565F, -13.3113F, 76.9204F, 83.0527F, -49.6054F, 32.9182F, 193.1624F, 242.1413F, 224.6298F, 146.4784F, 49.3300F, 80.8438F, 67.2940F, 65.3665F, 141.4567F, 78.9471F, 115.6802F, 154.3108F, 177.7814F, -2.1684F, 97.5184F, 210.7061F, 182.4635F, 248.3353F, 312.9833F, 448.6478F, 502.5403F, 436.6044F, 10.4934F, 93.6577F, 144.0456F, 109.2677F, 171.7553F, 160.5641F, 247.6292F, 348.4738F, 372.3836F, 62.0393F, 66.4595F, -22.8432F, -154.2429F, -311.1715F, -269.7167F, 30.1724F, -82.4276F, -130.4250F, -1.8658F, -10.8456F, -5.2486F, -28.7596F, -130.9176F, -235.6978F, 116.9998F, 34.2436F, -79.9885F, 32.1393F, -12.8439F, -142.0784F, -272.6861F, -469.8031F, -450.3773F, 42.8701F, -56.9028F, -113.0164F, 44.2438F, 0.5177F, -95.0709F, -229.7896F, -388.2228F, -193.8794F, 161.5550F, 62.3152F, 16.3412F, -21.7573F, -96.5696F, -171.8374F, -270.5201F, -389.2275F, -187.1907F, 4.2880F, -69.4009F, -139.6222F, -59.1336F, -137.9044F, -127.8821F, -82.4177F, -132.8951F, 55.2591F, 25.2046F, 165.8443F, 176.7896F, 13.1713F, -65.9463F, -177.8707F, -363.8923F, -474.4700F, 53.7845F, 194.7626F, 99.8684F, 126.7437F, 26.4565F, 54.2781F, -5.8084F, -213.5320F, -186.7453F, 6.5259F, 119.4530F, 196.2039F, 188.0246F, -12.3442F, -52.3945F, 174.0135F, 50.5399F, -55.6784F, -95.2558F, -196.2955F, -198.2056F, -234.0973F, 23.6446F, -54.5462F, -134.7219F, 193.6175F, 178.7128F, -0.9450F, 7.7510F, -88.8611F, -200.7396F, 154.0881F, 689.2718F, 650.6971F, 522.8596F, 436.5025F, 314.9000F, 250.7824F, 187.1628F, 148.5410F, 83.9959F, 202.8234F, 359.2843F, 411.3538F, 425.6817F, 308.8017F, 206.3666F, 113.2320F, 60.3929F, -21.1689F, -91.1694F, -252.6742F, -235.0333F, 249.5398F, 114.6655F, -0.7796F, -65.2547F, -172.8182F, -30.5567F, -123.2070F, -309.0227F, -44.0884F, 320.4634F, 157.6161F, 61.6828F, -45.3025F, -139.1032F, 206.4974F, 723.0883F, 782.3015F, 479.5419F, 242.9557F, -15.8222F, -162.4184F, 134.4517F, 319.9661F, -41.0232F, -148.1419F, -92.0839F, 478.0700F, 348.8458F, 292.6417F, 221.8808F, 139.1332F, 83.7320F, -6.8324F, -77.6477F, -56.3444F, 19.3478F, -110.6184F, -96.5414F, -225.9007F, -330.6617F, -424.5623F, 26.9337F, -4.4548F, -148.8763F, -80.3516F, 81.8311F, -110.8947F, -150.9911F, -162.4880F, -279.5481F, 15.4135F, -1.8583F, -56.8319F, -146.1688F, -266.5346F, -355.1809F, -419.6793F, -456.7536F, -416.2208F, 112.1756F, 88.2059F, 26.0259F, -86.2333F, -258.4741F, -66.9660F, -164.5662F, -250.9281F, -276.0475F, -51.5026F, -135.9180F, -210.3467F, -175.0943F, -7.7200F, -1.5529F, -138.1960F, -292.0197F, -364.5311F, 1.6098F, -29.3697F, -112.8375F, -233.4716F, 123.6812F, 20.4676F, -81.0632F, -116.0258F, -218.5294F, -34.1878F, -103.0825F, -139.6876F, -229.9859F, -246.3806F, -96.8411F, -204.4168F, -321.0166F, -418.4522F, 27.1891F, -2.9717F, 21.2254F, -122.5167F, -201.1399F, 36.0115F, -56.9192F, -106.8464F, -192.5580F, 77.7097F, 24.2840F, 152.6398F, 61.5673F, -54.9359F, 27.7810F, -85.7347F, -79.4392F, -81.0366F, 59.2315F, 15.7636F, 128.6461F, 63.2966F, -11.4618F, 18.7670F, -58.2229F, 42.0642F, 49.7434F, 247.9855F, 413.3163F, 345.0402F, 192.3750F, 145.4847F, 121.6956F, 123.6805F, 107.2007F, 94.2462F, 104.2558F, 282.0381F, 490.4723F, 344.7097F, 244.1310F, 96.7224F, 2.9896F, -31.7180F, -23.3323F, -22.5118F, -53.8832F, -113.5013F, -234.2837F, -4.7630F, -0.8369F, -15.3972F, 57.4113F, 45.6486F, -41.6155F, -134.7804F, -200.2841F, 179.2444F, 29.8214F, 36.0840F, -106.4028F, 151.5328F, 102.1621F, 141.5078F, 201.5805F, 79.4698F, -159.8402F, -279.6548F, -324.4731F, -129.3751F, 72.2403F, 81.4769F, -45.8403F, -152.7728F, -116.5580F, 262.2678F, 114.2470F, 210.0651F, 100.2266F, 64.9777F, -14.6634F, -39.9272F, -124.8000F, -75.7294F, -110.6360F, -223.7299F, -102.2257F, -226.1053F, -85.4944F, -173.4764F, -91.6640F, 30.6543F, 4.1065F, -65.4408F, -39.3890F, -89.5364F, -102.5911F, -125.5036F, -48.1974F, 27.2660F, 19.3735F, -66.4810F, -233.9350F, -388.9383F, -229.7098F, -102.6715F, -201.6806F, -177.6036F, 153.9685F, 141.8902F, 89.4281F, -53.1892F, -209.9941F, 8.0810F, -71.3509F, -135.8233F, -78.6157F, -48.4004F, -143.6756F, -250.1705F, -343.5184F, -330.9693F, -81.7413F, -159.8642F, -192.9882F, -201.0525F, -49.7401F, -133.3727F, -211.5154F, -166.0789F, -199.3352F, -4.0380F, -98.3591F, -184.6634F, -113.6087F, 32.7128F, -26.7812F, -78.3951F, -264.0457F, -339.2219F, 40.1904F, -121.6728F, -51.6241F, -125.0696F, 1.8568F, -67.7562F, -73.4413F, -115.9242F, -245.2522F, 77.1352F, -22.1839F, 2.7514F, -4.3203F, 19.0296F, -62.4543F, 21.8088F, 217.8850F, 43.1886F, 12.7766F, -121.5772F, -171.9543F, -180.7850F, -0.3986F, -96.1580F, -120.0616F, 336.5914F, 176.9306F, 54.3062F, -66.4501F, -138.8101F, -90.7495F, 109.0295F, 377.1798F, 641.5853F, 577.4881F, 571.3625F, 438.8002F, 310.6432F, 204.9863F, 132.6160F, -76.9013F, -15.0371F, 664.7503F, 520.0686F, 489.1051F, 371.2256F, 270.3431F, 196.9454F, 166.5973F, -42.2498F, -134.3667F, -336.4376F, -457.6409F, 173.4562F, 138.1508F, 34.3921F, -18.1609F, -85.9677F, -20.8727F, -125.4622F, -192.7956F, 434.5861F, 290.6413F, 142.0824F, 77.1623F, -13.2305F, -29.4274F, 178.7104F, 373.0402F, 459.7581F, 474.3989F, 557.5211F, 569.2194F, 525.4768F, 358.3187F, 210.4229F, -26.8194F, 77.7574F, 350.3222F, 445.4183F, 524.4524F, 462.1511F, 381.7293F, 289.9692F, 204.0649F, 47.7632F, 17.1803F, -105.1057F, 10.4223F, -60.5128F, -219.3625F, -119.8198F, -230.6158F, -301.9153F, 60.2078F, 16.2198F, -62.5382F, 98.4891F, -50.3729F, -119.2299F, -183.9794F, -286.1903F, -145.0719F, 52.5866F, 72.1675F, -32.1273F, -162.5446F, -282.0867F, -356.6873F, -196.9938F, -290.2792F, -343.8752F, 58.1756F, 83.5942F, -32.7989F, -128.5429F, -265.7008F, -326.2490F, -166.5130F, -258.2744F, -31.7978F, -49.8436F, -148.3240F, -287.2763F, -389.7832F, -131.7967F, 6.5863F, -71.1640F, -182.3324F, -272.4139F, -32.6407F, -113.2022F, -199.3120F, -231.3794F, 5.2103F, 172.0263F, 60.2526F, -14.7182F, -108.9096F, 27.2077F, -23.7367F, -95.9858F, -283.8613F, -409.0134F, -31.3871F, -148.6489F, -208.9727F, -274.8275F, 69.4333F, -0.7143F, -57.0494F, -261.8966F, -366.3107F, 188.4734F, 53.9671F, 24.5447F, 25.3948F, -4.4283F, 5.6792F, 301.6043F, 172.8969F, 55.6507F, -7.7604F, -81.7609F, -49.2316F, -63.0654F, -12.4033F, -97.3530F, 37.2340F, 215.5548F, 48.4286F, 11.6666F, -133.9813F, 32.1272F, -33.6059F, 57.9103F, 293.2768F, 591.9909F, 431.5314F, 338.6320F, 236.6151F, 185.2476F, 175.1540F, 156.0322F, -63.6185F, -100.3640F, 351.1546F, 428.5004F, 353.7403F, 293.3142F, 196.1020F, 152.1965F, 114.6518F, -20.0721F, -100.8514F, -174.7278F, -314.6773F, -143.5646F, 298.1905F, 181.1825F, 142.0341F, 71.3729F, -64.7951F, -146.2021F, -143.2170F, 33.9854F, 13.8056F, 156.0337F, 163.4005F, 334.1913F, 325.3497F, -79.9064F, -121.2133F, 229.6626F, 303.8755F, 306.8218F, 415.8466F, 436.8824F, 486.2830F, 451.8081F, -67.6130F, -122.0631F, 41.7635F, 134.7727F, 156.2778F, 308.4236F, 340.0357F, 434.5742F, 391.1108F, -2.6037F, -46.9405F, -151.3320F, -160.0405F, -239.8193F, -368.3138F, -88.0921F, -150.1500F, -191.7920F, -79.3309F, -112.6262F, -20.0215F, -129.1640F, -35.3227F, -69.4806F, -159.3188F, -223.7142F, -132.1779F, 21.9835F, -11.3374F, -106.7910F, -244.8813F, -406.4640F, -311.7320F, -96.4711F, -182.5312F, 57.8956F, 25.8713F, -0.7151F, -79.9440F, -80.0111F, -224.4878F, -136.2209F, -22.1062F, -137.4635F, -22.6838F, -17.4638F, -88.0421F, -183.7897F, -361.0791F, -194.1127F, 29.9571F, -12.3110F, 17.3506F, -52.9132F, -108.1431F, -191.9295F, -193.9598F, -196.0948F, -165.6809F, -79.0258F, -53.5949F, 30.1916F, 37.3619F, 10.0420F, -70.0023F, -183.1197F, -393.7681F, -492.0758F, 102.2096F, -13.6587F, -51.6821F, -101.1752F, -25.8195F, -90.5090F, -174.4579F, -208.3670F, -308.3139F, -74.5783F, -38.9631F, -104.3672F, 142.1591F }; /* * 1st stage codebook; 2nd split: isf9 to isf15 */ const Float32 E_ROM_dico2_isf[SIZE_BK2 * 7] = { 530.1115F, 512.7983F, 443.8771F, 306.1447F, 171.2327F, 70.8250F, 56.8183F, 248.5479F, 252.9719F, 260.5429F, 221.7305F, 172.6754F, 84.8419F, 141.5120F, 166.9014F, 171.9745F, 263.4265F, 204.8570F, 129.5061F, 45.8705F, -162.9417F, 47.0761F, 115.3926F, 182.9788F, 181.5048F, 89.7111F, 17.3276F, -86.2999F, -57.3148F, -93.7950F, 58.2071F, 31.0844F, 152.3217F, 108.6931F, 41.3677F, -163.1767F, -217.0378F, 215.5667F, 199.7393F, 91.8320F, 56.3535F, -37.1534F, 16.9371F, 75.2105F, 106.8429F, 58.4518F, 26.0167F, 13.3113F, -106.5544F, -16.6336F, -49.0904F, 66.7054F, 162.6404F, 110.2851F, 24.4686F, -138.4124F, -145.3240F, -33.7683F, -134.5548F, -42.3167F, -36.8413F, -70.9451F, -34.7360F, -234.5519F, -328.1575F, -78.2304F, 181.4482F, 100.8272F, -4.3886F, -98.7986F, -18.7314F, 128.6640F, 38.0685F, -113.4033F, -211.9919F, -310.5748F, -138.0866F, -222.6271F, -45.5429F, 72.9616F, 3.9276F, -52.1214F, -162.3586F, -29.6134F, -241.3416F, -50.3196F, -96.3331F, -145.0456F, 17.4087F, -29.8105F, 108.3555F, -399.1142F, -421.4348F, 49.0965F, 185.0085F, 99.2830F, 49.7543F, 20.2726F, -109.7596F, 29.7695F, -65.3607F, -141.1745F, -110.3974F, -215.1475F, -110.3518F, -46.4209F, -20.4624F, -0.5266F, 52.1919F, -12.3074F, -79.8395F, -162.1720F, 415.6808F, 323.0418F, 248.6461F, 267.3440F, 181.1869F, 81.5855F, 4.8347F, 188.1995F, 162.5893F, 175.4467F, 144.9775F, 131.0177F, 114.8023F, 75.6850F, 280.8494F, 225.0358F, 142.4128F, 52.8503F, 44.0619F, 35.6548F, -77.7252F, 116.2722F, 68.6422F, 192.5792F, 142.9262F, 75.7274F, 63.5846F, 13.9314F, -13.4854F, -92.0420F, -101.3018F, -13.9503F, -1.5377F, 38.4848F, 59.2146F, -38.0921F, -119.6284F, -10.4956F, 88.8682F, 35.1836F, 43.2013F, -33.7051F, 35.4547F, 5.0305F, -82.4376F, -100.9264F, -41.5222F, 33.5725F, -24.8381F, 28.3963F, -13.4840F, -22.4480F, -11.9734F, 63.1961F, 13.8177F, -75.0030F, -42.4115F, -130.9516F, -245.5204F, -25.9129F, -23.6896F, -49.8110F, 125.7094F, -193.2334F, -261.3991F, -284.3770F, 75.4337F, 11.9830F, -86.1044F, 47.5069F, 126.4967F, 37.0484F, -34.7501F, -35.5687F, -159.6523F, -277.2735F, -60.1203F, -0.1156F, -91.4527F, 35.7808F, 12.8593F, -134.0804F, -237.8749F, -85.9030F, -134.0644F, -159.5199F, -185.8239F, -255.9559F, -59.8235F, 31.9001F, 86.5795F, -191.3466F, -290.9137F, -99.7657F, 18.9475F, -18.6283F, 52.5484F, -49.6458F, 46.4725F, -26.2220F, -128.3100F, -152.1911F, -106.3316F, -212.7650F, -21.8051F, -22.1899F, -50.6587F, -4.0987F, -2.7160F, -63.9780F, -18.1671F, -8.5809F, 384.5044F, 415.7100F, 375.3419F, 221.7875F, 82.0605F, -10.5889F, 6.1831F, 316.8826F, 269.9225F, 294.6225F, 200.5877F, 87.3740F, -13.6950F, 64.9923F, 258.7122F, 274.8100F, 241.2115F, 150.6316F, 22.2879F, -82.2525F, -100.3677F, 199.2028F, 140.2225F, 163.4630F, 153.3341F, 35.3954F, -56.3718F, -6.8714F, -75.2059F, -12.0741F, -10.5019F, 87.1330F, 34.8811F, -55.7089F, 9.3485F, -43.9131F, -38.3306F, 184.0508F, 124.7862F, 72.2168F, 1.2740F, 68.2432F, 98.5331F, 56.9808F, -18.2386F, 106.3234F, 18.7400F, -82.2337F, -91.2981F, 56.8543F, 26.8486F, 79.2505F, 142.2529F, 26.5547F, -20.1961F, 20.0251F, -101.2805F, -186.8430F, -272.0712F, -136.2303F, -296.2366F, -195.7741F, 24.4320F, -195.6167F, -300.4726F, -112.7403F, 30.7313F, -121.6459F, -194.0080F, -41.2612F, 98.2285F, 20.7275F, -91.7240F, -183.2970F, -349.5879F, -345.3007F, 56.7721F, -162.4512F, -215.0840F, 54.6896F, -51.9437F, -204.1752F, -302.6133F, 17.1211F, -127.3559F, -165.3954F, -278.6780F, -194.2370F, -33.4488F, -168.4021F, 38.6555F, -295.7049F, -301.6402F, -62.3113F, -29.8345F, -17.8150F, -12.4093F, 147.9211F, 33.3799F, -13.6109F, -78.2303F, -156.7363F, -259.0581F, -406.3858F, -96.3685F, -70.3287F, -128.8603F, -35.8870F, -146.8926F, 10.7114F, -71.6699F, -42.8127F, 499.4422F, 424.3595F, 305.0398F, 196.0019F, 126.5760F, 63.9795F, 61.1516F, 266.3734F, 181.9720F, 175.4860F, 108.0995F, 56.9864F, 10.7695F, 159.6035F, 247.9333F, 184.5145F, 152.3734F, 41.9318F, -90.6959F, -210.2689F, -54.1531F, 76.7519F, 154.5846F, 129.7565F, 83.0209F, 81.7690F, -11.2691F, -31.6182F, 58.5084F, -37.0541F, -121.7467F, 29.7202F, -30.0062F, -124.9186F, -19.6730F, 18.1514F, 3.4725F, 18.4977F, 68.3406F, 54.2768F, 11.6546F, 150.1885F, 85.0507F, 80.6332F, -9.5051F, -97.5608F, -37.4477F, -107.8952F, -71.4574F, 10.1458F, 46.5077F, 14.7448F, 5.4868F, -1.5563F, -51.9743F, -20.1740F, -186.2883F, -239.8358F, -385.3964F, -279.2732F, -246.3584F, -317.5150F, 77.9409F, -290.8109F, -394.1977F, -416.1625F, -291.0747F, -246.4900F, -66.6275F, 7.0910F, -53.3572F, -98.2187F, -188.6130F, -239.5862F, -382.9682F, -469.8791F, 4.8130F, -236.2064F, -299.8000F, -219.3447F, -267.9179F, -424.8446F, -200.9900F, 22.5746F, -78.8698F, -167.2648F, -305.5687F, -418.8565F, -37.5231F, -91.3323F, -69.9264F, -187.4632F, -276.9708F, -417.8298F, -350.3085F, -51.2638F, -35.7869F, 125.5794F, -56.7695F, -75.4877F, -200.1077F, -284.6027F, -223.5758F, -298.6907F, -81.9158F, -129.2158F, -228.6000F, -204.9319F, -246.4877F, -109.8989F, -81.0975F, -118.3144F, 455.1133F, 431.3343F, 366.9250F, 323.3162F, 279.7654F, 166.3696F, 60.4075F, 2.2427F, -42.4551F, 320.2264F, 303.9626F, 161.9218F, 44.0682F, -10.4932F, 148.9215F, 132.3074F, 122.6564F, 103.3307F, 47.4590F, -3.4202F, -185.0445F, -145.6115F, 18.4827F, 228.0817F, 172.5267F, 38.5907F, -90.1562F, -43.9888F, -193.6085F, -14.9922F, -111.3547F, 102.4688F, 119.0297F, 66.3613F, 1.6199F, -229.1052F, -217.2523F, 26.9406F, 25.7113F, 183.7947F, 138.0997F, 4.9246F, -54.0735F, 27.3595F, -6.9751F, 41.3897F, 26.0272F, 65.3047F, -117.9287F, -173.6861F, -55.0424F, 72.3582F, 74.4772F, 59.1275F, 32.2629F, -52.0966F, -100.2805F, -203.3997F, -281.1161F, -77.1917F, 52.4149F, -18.1558F, -70.9170F, -319.7560F, -456.2388F, -303.5891F, 199.8376F, 140.0785F, 37.0556F, -44.1020F, 53.3338F, -0.8373F, -29.0162F, -53.8806F, -156.4895F, -44.6551F, -144.9031F, -94.4005F, -181.9505F, 79.8505F, 87.0198F, -12.1349F, -82.6727F, -75.0313F, -207.6459F, -248.8868F, -181.9412F, -267.7931F, 100.0395F, 108.0778F, -54.3928F, -445.8355F, -486.1193F, -148.8008F, -29.2654F, -20.9138F, 5.3055F, 34.4656F, -121.3450F, 45.0588F, -55.9190F, -194.9437F, -134.0013F, 48.6244F, -162.3284F, -240.5215F, -57.3889F, -52.6141F, 16.9554F, -1.6593F, 47.0915F, -144.2315F, 326.1222F, 306.0203F, 250.4581F, 152.3629F, 138.5136F, 136.6061F, 24.8198F, 27.9826F, 75.7094F, 172.8544F, 182.3980F, 170.1943F, 85.7041F, 145.3514F, 181.4035F, 144.2242F, 74.8556F, 1.4272F, -61.0836F, -28.1913F, -88.2541F, 22.2453F, 80.4679F, 118.3400F, 80.0672F, 73.2458F, 39.5447F, 103.6288F, -15.5237F, -80.2624F, -190.5397F, -72.0487F, 107.7333F, 24.8407F, -9.9839F, -84.5773F, -169.2563F, -115.8907F, 53.5535F, 128.0731F, 120.4292F, -112.8952F, 147.5641F, 31.5040F, -120.2366F, -181.4932F, 22.0867F, -14.3306F, 88.8276F, -38.8943F, 9.5208F, -14.2124F, -59.1263F, 77.8884F, 3.1099F, 55.9227F, -166.2941F, -272.4271F, -413.5079F, -51.9034F, 151.3775F, 62.8211F, 125.4737F, -251.4761F, -399.5025F, -496.4470F, 15.1387F, 25.6129F, -47.9447F, 27.2588F, 145.3730F, 69.2023F, -67.5157F, -217.2383F, -216.1160F, -118.5795F, -73.6690F, -45.7917F, -144.0127F, -166.1374F, -47.5218F, -180.4311F, -59.2610F, -28.7005F, -253.6976F, -332.1650F, -464.5507F, -299.7163F, 194.1511F, 140.7432F, 86.8261F, -311.8663F, -444.9106F, -568.2597F, -74.2214F, 168.0938F, 91.5796F, 69.8801F, 16.2576F, -36.8680F, -158.1385F, -270.2551F, 14.7501F, -79.0270F, -96.1519F, -66.0490F, -143.0125F, -113.3699F, -34.3890F, -25.0086F, 12.5482F, -114.0537F, 394.4650F, 360.5732F, 366.5918F, 277.4828F, 181.5850F, 89.9984F, 133.6822F, 84.7064F, 117.2216F, 411.7273F, 263.7720F, 26.7575F, -178.8131F, -69.9364F, 30.5200F, 177.1075F, 123.5531F, 7.2231F, -92.4543F, -193.6012F, -94.9796F, 65.2717F, 8.1559F, 165.7135F, 84.0440F, -35.7379F, -118.5377F, -66.5232F, -113.0977F, -31.5885F, -27.3286F, -26.0692F, 15.5114F, 21.2791F, -23.2414F, -138.0497F, -166.9724F, -35.1916F, 20.7464F, 36.6236F, 3.5627F, 20.9882F, -11.0900F, 124.4114F, 110.4337F, 5.6888F, -93.7853F, -22.5026F, 30.8623F, -29.4226F, -47.2009F, 89.3512F, 13.6996F, 22.5131F, 2.3075F, -51.7825F, -137.2009F, -200.8273F, -290.6017F, -325.7113F, -275.5810F, -53.4554F, 64.1025F, -438.9569F, -542.2731F, -412.1423F, -89.9884F, -28.4069F, 15.6647F, 13.8672F, -63.4932F, -90.8672F, -207.9037F, -306.7191F, -456.9608F, -272.1003F, 37.6908F, -307.9492F, -374.7438F, -96.2506F, -168.0490F, -243.8695F, -64.5296F, -3.1349F, -334.4494F, -210.9558F, -246.0072F, -354.2072F, -131.6393F, -27.1645F, 29.5091F, -366.0860F, -407.0811F, -257.3381F, -286.1801F, -81.4441F, 77.6511F, -10.1480F, -204.4162F, 30.5330F, -38.3922F, -195.6373F, -339.5407F, -347.7475F, -31.6897F, -243.6551F, -274.7409F, -17.3959F, -136.0264F, -9.8248F, 34.1080F, -72.7180F, 392.4115F, 321.3055F, 213.3703F, 97.3249F, 35.2497F, -8.7278F, 80.8223F, 116.4944F, 155.2541F, 148.9464F, 124.6089F, 78.0606F, 24.1574F, 118.5191F, 184.6981F, 148.0850F, 51.9562F, -96.3499F, -247.0329F, -172.3801F, 29.4305F, 110.9024F, 81.4259F, 152.8654F, 45.1114F, -9.8257F, 17.3401F, 36.9414F, -27.9329F, 30.8783F, -37.1648F, -24.5270F, -50.2764F, -114.4973F, 79.3175F, -64.1897F, -136.2614F, 44.8825F, 47.6375F, 26.8591F, -0.2729F, 147.6527F, 135.7539F, 66.4931F, 38.8074F, 22.5599F, -70.1020F, -117.9085F, 73.4314F, -74.1601F, -0.9165F, 58.6634F, 8.8413F, -20.0486F, -4.3857F, 84.5215F, -240.3710F, -336.9822F, -425.7879F, -557.5921F, -313.4519F, -18.6503F, -2.2911F, -375.5428F, -498.5622F, -604.7405F, -284.0899F, -22.5439F, 21.7506F, 87.1215F, -48.5853F, -99.7448F, -219.1610F, -385.9877F, -498.9206F, -58.0072F, -32.0391F, -187.4733F, -257.8106F, -348.0662F, -465.0402F, -523.0202F, -126.9367F, 7.9922F, -242.4066F, -358.0976F, -506.2984F, -527.3067F, 103.2345F, 112.8789F, 19.5721F, -329.7812F, -399.2909F, -525.3788F, -519.3241F, -114.6023F, 18.0531F, 108.4014F, -101.3959F, -182.8774F, -323.7689F, -459.4139F, -208.2967F, -218.5872F, -30.6618F, -83.9128F, -188.9391F, -321.0572F, -481.5454F, -309.1473F, 5.7541F, -53.7133F, 508.3954F, 514.6412F, 492.8828F, 409.4624F, 279.6907F, 139.5316F, -25.0946F, 225.7716F, 321.9763F, 361.4909F, 313.2012F, 246.2739F, 141.2217F, 40.0333F, 183.5499F, 361.1524F, 299.5782F, 200.8792F, 127.5401F, 74.2915F, -43.7510F, 87.8314F, 192.1731F, 193.5542F, 170.6556F, 233.6155F, 150.0142F, -17.3959F, 16.6972F, 31.8549F, -16.4255F, 68.2118F, 202.5792F, 133.4167F, -24.8757F, -118.5934F, -60.2884F, 62.2425F, 224.9154F, 157.3277F, 86.2001F, 127.8335F, 83.3985F, 95.4353F, 47.7289F, -24.4079F, 122.0239F, 35.9347F, -62.3200F, 85.0292F, 81.2156F, 121.2625F, 104.6399F, 119.6594F, 126.2998F, -77.7217F, -111.4887F, -105.1822F, -30.9685F, -48.2729F, -55.9544F, -59.5831F, 92.3539F, -80.0937F, -149.8609F, -166.3557F, 134.5224F, 22.8807F, -72.2311F, -71.7019F, -106.2400F, 96.5443F, 49.1033F, -82.1511F, -202.4001F, -182.6395F, 30.4307F, -38.6498F, -47.0332F, 196.2347F, 62.6390F, -109.4412F, -217.5327F, 118.6330F, -165.3289F, -6.5073F, -110.5468F, -172.9718F, 83.9014F, 82.6244F, -54.8262F, -220.1304F, -267.2490F, -88.9432F, 199.2986F, 140.8517F, 50.8656F, 126.1685F, -167.2625F, 130.8662F, 38.2409F, -25.2887F, 14.1618F, -84.0247F, -96.2550F, -141.5362F, 19.9235F, 142.0336F, -6.1892F, -91.4426F, 58.7228F, -64.2743F, 356.9441F, 345.0619F, 293.3749F, 255.2251F, 264.2440F, 181.1552F, -59.9296F, 246.4391F, 212.9810F, 208.9891F, 281.1677F, 232.7401F, 140.5526F, -31.7890F, 305.7318F, 278.3117F, 199.8758F, 171.6015F, 133.0515F, 98.0317F, -152.6052F, 194.0116F, 162.7764F, 97.4355F, 145.3808F, 115.4215F, 67.7161F, -75.3193F, 50.0116F, -43.0169F, -150.4608F, 36.4008F, 15.3428F, 67.7103F, -90.2827F, 84.1801F, -22.9641F, -98.8488F, 180.4238F, 151.9562F, 59.9903F, 26.9906F, 177.5510F, 105.3890F, -1.4605F, -131.7380F, -19.1906F, 90.9329F, -125.9315F, 119.9137F, 55.8859F, 20.5790F, 85.2794F, 50.1218F, 92.1433F, -60.8729F, -14.4439F, -72.6866F, -93.8542F, -160.4042F, -42.8567F, 3.3977F, 156.0409F, -54.5578F, -142.4629F, -245.2400F, 100.6745F, 148.4848F, 83.6861F, 108.3569F, 51.3106F, 177.4475F, 69.0944F, -111.1996F, -202.9647F, 42.3005F, -83.6978F, 30.1802F, -55.2034F, 78.5647F, -47.9833F, -191.5273F, -51.2293F, 23.2575F, -5.5372F, -75.8171F, -203.4011F, -289.5156F, 106.7613F, 141.4280F, -13.0810F, -141.4010F, -221.2458F, -112.2780F, -89.1527F, 63.0527F, 92.4026F, 123.8935F, -105.1256F, 76.2826F, -29.3279F, -146.3319F, -79.8275F, 4.2937F, 30.2187F, -50.0448F, -103.1965F, -61.1121F, -87.1858F, -185.4814F, 103.5567F, 10.4906F, 483.7709F, 447.9613F, 357.9065F, 269.2391F, 168.5860F, 81.9800F, -109.5565F, 312.3829F, 259.3732F, 343.4722F, 283.4192F, 160.6555F, 62.4472F, -64.0786F, 177.4189F, 268.0235F, 209.2622F, 107.3129F, 57.2866F, 17.7874F, 43.3733F, 118.3413F, 189.8245F, 200.1482F, 138.5254F, 93.9936F, 70.6362F, -26.8448F, 30.9857F, 35.8345F, 11.3604F, 57.5567F, 90.9626F, 20.1319F, 6.8180F, -66.7255F, 112.7395F, 51.2972F, 171.5931F, 105.7922F, 1.0289F, -4.0888F, 161.4374F, 94.0077F, 56.1444F, 67.9007F, 60.5061F, -0.5993F, 5.5333F, 22.6145F, 84.7579F, 96.3842F, 85.7332F, 58.1820F, 68.5529F, -7.0445F, 89.2476F, -2.9310F, -93.5695F, -80.5243F, -200.4216F, -74.7223F, 78.7932F, -37.6075F, -106.1347F, -177.1898F, 12.7187F, -117.0868F, -224.7555F, 18.0710F, -3.9184F, -42.1867F, -96.2393F, -135.5441F, -300.7351F, -209.1140F, 3.3638F, -127.2731F, -168.0130F, -23.6514F, -125.4722F, -275.0623F, -116.8249F, 78.4081F, -0.3268F, -109.2929F, -235.6517F, -163.5220F, -72.4472F, 7.1522F, -14.1950F, -201.5567F, -203.8994F, -147.8831F, -113.7655F, -70.6486F, -37.9403F, 10.4648F, -61.9333F, -122.2785F, -205.0957F, -87.3765F, -199.0248F, -324.4658F, -76.9686F, -114.1747F, -179.4460F, -22.8678F, -120.9749F, -219.5858F, -55.7430F, -137.0347F, 416.5525F, 356.2247F, 246.4192F, 151.7590F, 80.9813F, 33.7425F, -87.5668F, 232.7198F, 199.8298F, 232.8017F, 197.1352F, 122.7492F, 47.7377F, -18.8607F, 307.4450F, 336.4361F, 172.1882F, -36.4639F, -118.2980F, 12.7783F, -74.1220F, 100.4413F, 183.0223F, 131.6807F, 19.7279F, 5.8399F, 116.3680F, -36.1637F, 115.0603F, 28.3727F, -46.6535F, 9.9458F, 14.2165F, 8.8947F, 42.1125F, -11.0346F, -1.0867F, -12.6705F, 44.5022F, 8.2729F, 72.2938F, 41.9570F, 188.4713F, 119.1476F, 5.8222F, -109.1441F, -124.7922F, 20.2470F, 37.4241F, 88.4120F, 18.1026F, 44.8535F, 28.1015F, -53.1688F, 52.0384F, -48.7039F, 7.0136F, -80.7959F, -218.2056F, -230.6367F, -196.4241F, -188.3921F, 125.5651F, -223.0832F, -308.3413F, -371.4560F, -67.3406F, -172.4539F, -210.1611F, 44.0330F, 70.5425F, 5.5613F, -121.1026F, -250.2220F, -391.0280F, -78.8702F, 62.0359F, -53.2080F, -153.5175F, -168.9519F, -200.2387F, -356.0113F, -56.1841F, -8.4833F, 28.1989F, -103.3445F, -275.6373F, -372.5401F, -62.2850F, 20.7805F, 129.8285F, -131.8626F, -230.9837F, -332.7086F, -149.5865F, -154.3909F, 21.7068F, 17.3275F, 16.7300F, -61.8863F, -181.1369F, -350.5149F, -246.6439F, -61.1861F, -114.9767F, -62.9283F, -50.0990F, -128.3168F, -223.8037F, -188.6130F, -48.9473F, 4.2910F, 397.1338F, 354.0856F, 410.7048F, 392.6840F, 265.0492F, 133.1239F, -39.9595F, 140.3398F, 130.2926F, 612.1718F, 513.2461F, 282.4946F, 41.1820F, 3.7939F, -25.5253F, 283.5953F, 206.7656F, 117.4847F, 85.9801F, 16.9447F, -106.7023F, -199.2065F, 170.3263F, 280.7031F, 221.1866F, 139.8684F, 69.7774F, 44.7026F, -218.6125F, 116.3745F, 51.8822F, -46.6960F, 133.6225F, 87.8249F, 5.3826F, -351.2338F, -39.4894F, 84.6148F, 241.0717F, 156.3851F, 57.0277F, -22.5485F, -16.1558F, 137.3482F, 31.9090F, -76.7114F, 15.3505F, 47.2591F, -65.0792F, -82.6497F, 23.1536F, 174.7281F, 111.0391F, 165.1666F, 97.6276F, -66.0758F, -144.8786F, -188.8722F, -232.9240F, 11.8115F, -15.8240F, 97.1230F, 8.4134F, -145.3324F, -253.9705F, -310.2223F, 186.1852F, 173.7029F, 84.4147F, -31.0347F, -137.6416F, 107.5353F, 6.4667F, -172.8744F, -362.7197F, 36.0251F, 7.3423F, -273.1752F, -271.7551F, 168.5304F, 103.1478F, -19.2394F, -121.0773F, 71.0605F, -382.1200F, -84.7432F, -167.9304F, -156.0550F, 39.5436F, 102.1275F, 28.0496F, -362.7133F, -347.0801F, -139.5875F, -5.2563F, 181.0231F, 147.5667F, 92.1709F, -322.5983F, 22.0118F, 11.8984F, -116.7982F, -140.8088F, -50.1710F, -20.0495F, -342.8153F, -116.9352F, -43.2698F, 29.1059F, 25.4655F, 14.1526F, 1.1041F, 319.3257F, 143.9371F, -9.8398F, 138.1817F, 272.2951F, 230.7682F, -67.6844F, 120.5561F, 82.8050F, 86.9118F, 293.3890F, 188.8921F, 54.7609F, -21.7199F, 231.6328F, 148.0905F, 27.2085F, -3.2337F, 100.6721F, 70.2593F, 42.8315F, 64.4154F, -17.9857F, 99.5439F, 116.0344F, 85.7395F, 106.6537F, 41.0177F, 62.6236F, -27.4056F, -139.7237F, -70.5707F, 148.2318F, 128.9077F, 124.7000F, -92.9236F, -144.0688F, -77.1586F, 288.9071F, 226.4347F, 124.6281F, -55.6669F, 78.3503F, 42.4807F, -79.0042F, -178.3122F, 128.1446F, 107.8855F, -55.1806F, 79.1238F, 66.4433F, 43.2504F, 16.2992F, 80.8281F, 140.7251F, 73.5809F, -134.6119F, -155.8599F, -200.3194F, -90.9865F, 253.7969F, 164.9683F, 31.5576F, -248.1197F, -375.5200F, -476.6351F, 180.7157F, 210.6575F, 79.8609F, 81.7351F, 78.7261F, -9.7665F, -75.8617F, -194.4922F, -307.4282F, 75.4347F, -56.0501F, -175.4331F, -210.0029F, 75.9892F, -41.3638F, -129.4197F, 26.7040F, 24.1293F, -89.1388F, -186.3199F, -327.9780F, -225.0781F, 123.8019F, 49.8056F, 110.5614F, -262.0009F, -365.9398F, -315.0958F, -44.6833F, 152.6366F, 130.9091F, -24.3555F, 96.1914F, 0.9431F, -122.7709F, -265.0437F, -118.4077F, 70.4388F, -34.3324F, -41.7155F, -106.2450F, 35.3080F, -77.1729F, -11.0485F, 113.3317F, -43.5801F, 345.8234F, 448.9382F, 398.8093F, 278.1467F, 193.7783F, 109.9307F, -32.5084F, 105.2215F, 192.0218F, 307.4095F, 251.2213F, 135.6460F, 27.1659F, 48.2501F, 131.1255F, 248.6208F, 194.8135F, 35.9742F, -89.6413F, -70.1114F, 74.4933F, 10.3277F, 157.1341F, 220.2146F, 132.8669F, 58.2022F, -4.2414F, 52.5998F, -171.9997F, 219.1700F, 183.7592F, 79.7388F, -28.2743F, -72.7875F, 54.8047F, -281.0813F, 5.4272F, 138.6439F, 89.6476F, 26.7423F, -52.0621F, 181.8158F, 42.9908F, 121.1063F, 40.1449F, 4.6961F, 41.3091F, 11.3680F, 61.7374F, -69.6739F, 44.0933F, 62.9511F, 55.3414F, 47.1718F, 45.0520F, 10.5398F, -254.2462F, -161.6377F, -252.0311F, -59.3082F, -64.1228F, -5.1355F, -167.6060F, -249.7012F, -368.7658F, -266.1853F, -40.5172F, -31.5949F, 20.3852F, -73.7292F, -259.0964F, -63.9727F, -123.4555F, -266.6797F, -372.6790F, -79.9634F, -32.2913F, -237.8991F, -261.1591F, -67.3100F, -201.9258F, -271.1355F, 110.5556F, -31.4253F, -252.1870F, -59.5241F, -149.7008F, -264.8359F, -95.9333F, -15.7623F, -55.9292F, -291.6127F, -310.8436F, -291.0997F, -152.3425F, -38.1903F, 16.9302F, 107.5521F, -234.1635F, -77.8775F, -155.4929F, -169.1375F, -170.1633F, -210.0618F, 12.2871F, -432.5516F, -222.0327F, -146.7204F, -103.4423F, -49.3643F, -8.0516F, 0.3778F, 330.7150F, 223.7578F, 120.2566F, 152.9689F, 119.1688F, 39.3462F, 21.3169F, 106.4649F, 114.2936F, 78.3297F, 104.4772F, 135.1724F, 78.5670F, 48.1339F, 284.0033F, 187.5895F, 88.2418F, 0.6583F, -25.3445F, -53.7671F, 63.9802F, 106.5275F, 81.1295F, 67.7705F, 114.2483F, 4.6206F, 98.6728F, 68.0557F, 132.7267F, 80.9311F, 70.2013F, 34.2614F, 45.4356F, 17.9487F, 185.5185F, -179.6926F, -64.9953F, -11.8397F, 5.1401F, 42.9932F, 67.5337F, 154.7699F, 53.6060F, 34.2805F, 16.7478F, -53.4059F, -36.7348F, 13.1978F, 110.7422F, 37.6082F, -5.5267F, 88.1530F, 15.7336F, 24.4194F, 27.1976F, 50.6641F, -182.5485F, -287.0959F, -395.1311F, -458.4781F, -119.8993F, 119.0388F, -26.2634F, -239.2084F, -359.3420F, -447.6111F, -221.6196F, -3.2312F, 35.8538F, -9.6860F, -70.9599F, -105.8073F, -192.0091F, -294.5047F, -334.6240F, 111.9638F, -29.3527F, -193.0902F, -307.5872F, -268.9553F, -266.8591F, -276.8985F, 53.4395F, -127.3159F, -112.3830F, -214.7503F, -352.5892F, -431.6330F, 130.6462F, 125.3650F, -24.3701F, -138.4310F, -254.9568F, -325.5955F, -173.9416F, 0.3136F, 147.4202F, -59.5469F, -63.4081F, -119.3462F, -237.6156F, -366.1194F, -116.1935F, 96.5096F, -74.8714F, -91.5009F, -186.5192F, -95.3213F, -190.6698F, -103.7853F, 133.5730F, -129.6124F }; /* * 2nd stage codebook; 1st split: isf2_0 to isf2_2 */ const Float32 E_ROM_dico21_isf[SIZE_BK21 * 3] = { 128.4688F, 159.8148F, 97.2755F, -12.9836F, 197.1542F, 62.3669F, -11.1370F, -5.4038F, 227.1786F, -102.5247F, 49.5302F, 138.2452F, 56.6014F, 92.4597F, 68.2462F, -59.4614F, 95.8021F, 47.7671F, 10.6214F, 16.4206F, 132.7432F, -33.0052F, -36.4880F, 121.6274F, 111.3621F, 86.8573F, -60.9301F, 18.4019F, -16.9460F, -196.8595F, 91.2159F, 47.1568F, 150.3417F, 40.7444F, -123.8314F, 17.6656F, 68.7560F, 76.0870F, 3.0834F, 40.5189F, -22.9558F, -36.8239F, 68.9463F, 20.8592F, 75.1641F, -13.4297F, -49.7472F, 59.4394F, 222.6512F, 108.2263F, -13.1594F, -26.2678F, -128.5232F, -249.6796F, -61.3770F, -106.3253F, 180.3803F, -69.2195F, -180.5594F, 77.3840F, 125.7118F, 69.8739F, 44.7696F, -150.6344F, 66.9866F, 7.4132F, 7.5039F, -4.7150F, 76.2746F, -46.9159F, -98.2953F, 78.4325F, 118.5603F, 14.1695F, -131.2373F, -50.1565F, -86.1739F, -148.3825F, 66.6965F, -72.1903F, 115.4583F, -94.5599F, -121.9918F, 8.8523F, 77.1679F, 15.2443F, 6.1163F, -1.0987F, -69.2605F, -43.3316F, 43.3928F, -36.3404F, 29.4998F, -36.0829F, -87.1134F, 1.6094F, 69.0548F, 158.6352F, -17.3680F, -65.7580F, 148.4039F, -58.1224F, -1.4207F, 106.6547F, 129.4115F, -163.9787F, 200.5753F, 108.3887F, 8.0981F, 96.4962F, 18.4523F, -22.7513F, 51.0308F, -0.8203F, -1.3389F, 52.2067F, 70.5057F, -56.5316F, 15.5148F, 68.5082F, 73.6822F, 28.9345F, -56.5083F, -10.5212F, -17.6820F, -126.8611F, 144.6737F, -44.4661F, -8.2446F, -32.2712F, -161.9950F, -67.5138F, 29.9266F, 37.2667F, -20.0451F, -15.7787F, -11.7016F, -26.2432F, 27.7648F, 34.4647F, 33.4065F, -13.8614F, -38.4420F, 5.6107F, 27.0098F, 76.8588F, -130.2875F, -76.5280F, 30.9527F, -90.1727F, -135.8326F, -53.3710F, 85.3346F, -137.4852F, -34.8750F, -33.3215F, 18.2807F, 78.3958F, -50.7970F, -64.5101F, 14.5083F, -5.6925F, -16.6084F, 1.0141F, 33.5889F, -63.0082F, -42.0433F, 31.0393F, 32.2577F, 8.3123F, -92.4112F, -31.6346F, -58.2893F, -92.9305F, 58.7086F, -72.6659F, -98.0877F, -72.8089F, -97.1838F, -63.2264F, -7.5866F, 25.6299F, -54.3822F, -10.3321F, -19.4552F, -70.7729F, 9.4725F, 4.3403F, 0.0721F, -50.7563F, -41.0679F, -38.2745F }; /* * 2nd stage codebook; 2nd split: isf2_3 to isf2_5 */ const Float32 E_ROM_dico22_isf[SIZE_BK22 * 3] = { -49.5271F, 121.1295F, 16.4769F, -94.4022F, 76.8061F, 2.1280F, -58.8683F, 32.7926F, -6.6703F, -83.7461F, 49.5749F, -58.1205F, -96.5332F, -51.1816F, 62.2310F, -104.6874F, -104.4218F, -36.9709F, -84.8023F, 0.4441F, -31.0082F, -105.8907F, -31.0867F, -72.0962F, -17.4561F, 170.2726F, 62.0341F, 64.3231F, 77.6492F, 152.6545F, -13.0558F, 31.6496F, 73.1381F, -25.9540F, -16.3235F, 138.6579F, -116.2904F, -22.1347F, 133.9606F, -42.0923F, -209.9028F, 88.4509F, -56.0897F, -9.1734F, 75.5450F, 68.7883F, -157.0452F, 33.8343F, 20.5838F, 115.6837F, 9.8136F, -32.8948F, 98.7358F, -40.4656F, -22.8099F, 41.1383F, -49.3496F, -66.1700F, 67.9190F, -122.8227F, -18.8196F, 17.0630F, -114.9884F, -64.0458F, -162.7084F, -94.5118F, -54.2084F, 1.0923F, -75.9526F, -60.5415F, -80.9324F, -82.4130F, 46.5760F, 125.8621F, 83.1458F, 129.9934F, 19.7027F, 148.2803F, 92.6546F, 96.4434F, -0.8040F, 181.9977F, -6.0791F, 78.6212F, 93.0392F, -99.5781F, -41.6073F, 26.0437F, -172.0070F, -58.1634F, 47.8475F, -34.2895F, -54.2498F, 34.4187F, -96.6345F, -28.5027F, -15.8270F, 90.1190F, 65.2787F, -24.1274F, 60.7006F, 6.3059F, -25.2307F, 6.3412F, 30.0794F, -26.6845F, -0.7965F, -24.5917F, -59.0614F, -117.3599F, 62.4002F, -7.0821F, -130.0555F, 20.9710F, -21.7086F, -36.6794F, 1.9468F, 0.6440F, -74.2564F, 5.5161F, 35.9276F, 57.9971F, 81.4502F, 42.2272F, 3.3575F, 106.2218F, 42.1565F, 13.6719F, 43.0135F, 55.6116F, -33.1310F, 56.8126F, 18.4410F, -61.4055F, 109.0841F, 1.0223F, -125.1248F, 96.1657F, 16.9404F, -28.1707F, 26.5748F, 33.5245F, -84.6827F, 52.6704F, 14.2066F, 54.8716F, 30.7506F, 21.9479F, 68.4119F, -19.0589F, 10.1034F, 17.7161F, 1.1122F, 28.3594F, 21.5207F, -39.3190F, 42.6619F, -71.6784F, -94.4716F, -1.6345F, -110.6804F, -94.5938F, 18.7091F, -26.5385F, -18.5676F, -2.2267F, -59.7051F, -47.6606F, 63.0633F, 76.6895F, 37.6845F, 90.5993F, 31.2041F, 74.2520F, 64.4418F, 37.7231F, 4.2748F, 100.9151F, -12.1708F, 27.5607F, 104.1606F, -30.0584F, -35.7097F, 121.5339F, -81.6812F, 34.1503F, 59.3840F, -5.5457F, -8.5514F, 58.5319F, -58.3782F, 3.4649F, -126.3823F, 217.4185F, 72.9956F, -149.8116F, 119.9919F, 17.7920F, -98.1555F, 10.6050F, 30.1117F, -142.4950F, 30.1718F, -20.4500F, -188.3500F, -32.7229F, 62.5055F, -165.4842F, -201.2336F, -25.1871F, -114.8346F, -46.6803F, -1.4401F, -185.9166F, -45.3806F, -42.6756F, -37.7442F, 124.2892F, 142.7720F, 41.5423F, 244.7676F, 173.7613F, -74.1037F, 46.8818F, 112.0588F, -57.0922F, 25.5056F, 241.9654F, -166.9268F, 94.6864F, 141.8443F, -141.0368F, -145.0649F, 168.9254F, -135.5530F, 39.8468F, 65.4743F, -245.6494F, 76.1803F, -5.6309F, -25.5608F, 185.7902F, -18.2246F, -116.1471F, 125.0659F, -65.5997F, -21.6448F, 139.2267F, -103.0516F, -152.7089F, 32.1737F, -111.7466F, -19.9673F, -12.1771F, -217.1499F, -69.4452F, -156.0378F, -228.9529F, -79.9513F, -19.3186F, -140.5787F, -134.0792F, -92.8863F, -131.5222F, 85.7696F, 178.6823F, 22.5404F, 219.0179F, 182.4547F, 100.9819F, 132.7898F, 105.4102F, -65.5694F, 175.6583F, 30.2382F, -109.3055F, 23.2833F, 65.0492F, -161.3234F, 51.9178F, -98.2708F, -192.0347F, 84.2797F, 61.1831F, -113.4513F, 110.0580F, 0.1775F, -193.4730F, -88.3674F, 114.5595F, 71.3481F, -61.4713F, 52.7833F, 47.8295F, -61.8477F, -23.0151F, 15.1016F, -52.0862F, -46.0690F, -37.7005F, -129.6202F, -120.6827F, 44.2216F, -62.4412F, -165.8667F, -2.2683F, -58.1508F, -82.2449F, 9.3842F, -31.2569F, -108.3441F, -35.0348F, -4.4143F, 48.6610F, 132.2242F, 50.8942F, -27.6676F, 181.6500F, 2.0066F, -17.6839F, 71.9731F, 92.7139F, -37.1637F, 98.9732F, -54.3785F, -76.9789F, 115.8870F, -7.4354F, -117.3479F, 199.5254F, -24.6757F, -59.5165F, 54.3134F, 97.6902F, -113.0194F, 131.1002F, 48.4163F, 132.4722F, -58.7820F, 13.3327F, 68.6117F, -81.0715F, 66.7414F, 64.6961F, -45.2427F, 36.7779F, 14.7160F, -89.5910F, 29.2181F, -25.5238F, -132.3077F, -30.5052F, -80.0320F, -150.5560F, 0.1157F, -11.7322F, -63.8467F, -21.6912F, -43.0765F, -94.6223F, 125.3290F, 95.1208F, 75.9759F, 197.4010F, 92.9319F, -0.5012F, 123.8246F, 45.4969F, 25.5317F, 120.7415F, 34.4155F, -28.8961F, 176.6600F, -20.0903F, -19.4091F, 130.6288F, -84.9368F, -113.4633F, 82.2281F, 16.0388F, -59.4614F, 93.1589F, -21.5846F, -101.7248F }; /* * 2nd stage codebook; 3rd split: isf2_6 to isf2_8 */ const Float32 E_ROM_dico23_isf[SIZE_BK23 * 3] = { -3.8995F, 58.9472F, 140.2168F, 53.1422F, 116.3810F, 87.0383F, 99.7094F, -40.4441F, 113.1331F, 165.1496F, 2.2135F, 71.5223F, -105.3934F, -104.9144F, -38.2897F, -20.3247F, -32.1811F, 5.1214F, -32.0250F, -106.9634F, -37.7452F, 35.0256F, -95.9288F, -28.2073F, -116.9343F, -27.2704F, 164.5334F, -34.2352F, 142.6884F, 167.9453F, 72.9835F, -124.0776F, 148.8355F, 148.2748F, 14.5359F, 190.7047F, -145.5305F, -123.4847F, 30.8224F, -120.2600F, -39.3306F, 2.0939F, -52.9049F, -176.3645F, 3.0609F, 27.9487F, -164.3167F, -60.3281F, 70.4088F, 66.5042F, -47.2043F, 24.2507F, 69.1997F, -15.5014F, 127.5028F, 31.2976F, -40.8233F, 96.9136F, 102.7271F, -1.9768F, -65.7818F, -70.8663F, -86.5155F, -0.6444F, -8.8675F, -61.8361F, -5.3369F, -58.3089F, -47.3390F, 46.4765F, -35.6284F, -57.4718F, 46.3328F, 129.6813F, -59.6592F, 18.9988F, 118.4842F, 13.3515F, 172.5430F, -21.3132F, -26.8827F, 84.7525F, 177.2668F, 22.5077F, -140.2432F, -73.0634F, -146.3583F, -16.3786F, 19.6063F, -107.1305F, -3.0698F, -104.1769F, -97.1330F, 33.2378F, -33.4660F, -134.9635F, -29.8971F, -15.7433F, 134.7990F, 34.9346F, 52.2504F, 85.7197F, 60.8752F, -31.2562F, 62.5970F, 42.3279F, 15.7348F, 45.3299F, -61.8761F, -80.5864F, 11.3831F, 1.9118F, -12.4255F, 68.2023F, -25.4049F, -61.6688F, 57.1412F, 21.3127F, -30.3874F, 28.3554F, -44.5637F, -86.8534F, 137.9897F, -18.2977F, 31.6219F, 82.2796F, 19.0573F, -58.8750F, 104.6892F, 41.1433F, 1.5028F, 117.9977F, -102.7489F, -51.4207F, 71.3300F, -59.0984F, -10.9389F, 78.5554F, -69.1486F, -120.0273F, 65.0256F, 39.6252F, -86.2109F, 50.9690F, 29.0714F, 22.6919F, -38.4256F, 12.6360F, 17.2986F, 5.2183F, 75.9445F, 11.6720F, -55.4942F, 66.2898F, 37.5939F, 3.0594F, -53.0062F, -46.4272F, -35.4140F, -25.4219F, 2.9542F, -21.2949F, 1.3392F, -73.4502F, 4.6640F, 17.5926F, -24.6153F, -19.1614F, 58.2567F, -8.0154F, -7.3521F, 9.4616F, 56.2212F, 37.1474F, 99.2497F, -8.5999F, 23.5678F, 62.8908F, 76.5199F, 37.4883F, -61.5740F, -23.6494F, 18.8743F, -27.4404F, 12.7151F, 31.8660F, -8.8214F, -125.3200F, 22.5806F, 60.3707F, -57.3931F, 1.9729F, -142.0781F, 128.1134F, 29.9265F, -8.1434F, 177.0072F, 67.7176F, -42.2467F, 31.9985F, 246.1330F, 143.5303F, 102.5801F, 81.3050F, -117.3709F, -24.3191F, -68.7836F, -80.1727F, 55.9021F, -61.6700F, -65.9167F, -159.9841F, -103.0851F, 100.4774F, -105.1623F, -39.0393F, -248.4434F, 113.0562F, -0.9632F, -114.2012F, 244.7349F, 67.3892F, -149.2039F, -141.9386F, 151.3480F, 96.8171F, 204.6967F, 174.6282F, -203.4799F, -43.3805F, -41.7327F, -154.4080F, 46.2418F, -107.0591F, -133.7993F, -265.7036F, -48.9596F, -67.3323F, -174.6485F, -259.0245F, 29.4362F, 57.7183F, -143.2330F, -30.9358F, 102.7735F, -36.8946F, 97.2809F, 57.7730F, -111.7326F, 148.5371F, 105.7429F, -63.3760F, -55.6062F, -1.6898F, -72.6741F, -22.0825F, 43.4697F, -48.9841F, -13.6583F, -42.0695F, -99.1267F, 39.0227F, 11.1441F, -94.4170F, -31.1674F, 118.4450F, -103.1298F, -30.5761F, 181.1050F, -22.4168F, 96.8625F, -8.6867F, -192.7743F, 258.0970F, 258.6485F, 17.2359F, -75.4867F, -15.7399F, -128.9883F, -69.4209F, 56.4875F, -131.4587F, -35.1219F, -77.9249F, -156.1559F, -15.4754F, -8.8922F, -194.7119F, -74.8584F, 44.6175F, 122.9601F, -15.9046F, 95.4389F, 74.2532F, 34.5640F, -37.7631F, 189.4453F, 93.9878F, 31.0970F, 82.8675F, -96.2834F, 15.6201F, 33.9921F, -60.9930F, 57.5930F, 52.2667F, -0.7661F, -130.2809F, 93.4385F, 120.2708F, -79.2677F, 42.9508F, -179.2200F, 97.8633F, 164.7641F, -85.0375F, 121.2092F, 89.0752F, -33.4305F, -135.1092F, 255.3923F, 71.7349F, 68.5372F, 165.8218F, -187.7999F, -24.7305F, 65.9037F, -136.4161F, 45.6197F, 73.4184F, -48.8887F, -218.9293F, 120.9648F, 61.8728F, -162.4253F, 36.5784F, 17.9416F, 66.9736F, -75.1315F, -24.6266F, 61.4069F, 5.3953F, 100.0199F, -13.7281F, -105.7749F, 125.9485F, 48.0431F, 20.6117F, -83.4273F, 1.6803F, -29.7397F, -60.9733F, 33.6154F, -6.9071F, 49.9381F, -77.0001F, -90.5842F, 103.7070F, -35.1051F, -38.3706F, -120.2797F, 129.5670F, -56.7507F, -51.1815F, 120.2600F, 22.5398F, 198.7324F, 23.1592F, -132.3752F, 219.6951F, 76.6881F, -5.4836F, -147.6706F, 39.1117F, -18.2240F, -91.4913F, 78.8627F, 0.3161F, 40.5908F, -105.4075F, -192.5737F, 124.6250F, -81.8382F, -127.0619F }; /* * 2nd stage codebook; 4th split: isf2_9 to isf2_11 */ const Float32 E_ROM_dico24_isf[SIZE_BK24 * 3] = { -30.8071F, -34.8458F, -1.7377F, -66.7509F, 30.0385F, -82.3340F, 62.4748F, -75.5700F, 38.3392F, 47.0287F, -40.0671F, 126.1063F, 12.5178F, -8.7146F, -50.3954F, 27.9620F, 30.3537F, -104.7235F, 71.0260F, -29.6231F, -25.7014F, 120.7753F, 38.6709F, -56.4990F, -89.5313F, -61.4613F, -32.9542F, -149.7260F, 38.4143F, -27.8365F, -35.1587F, -137.6189F, 4.6136F, -110.8198F, -69.6633F, 69.4652F, -25.4794F, -48.9702F, -64.6927F, -34.0250F, -68.5378F, -137.1167F, 16.3769F, -77.3935F, -18.8382F, 60.1539F, -54.6626F, -95.0395F, -29.9828F, 6.8644F, 42.3138F, -15.0985F, 138.6659F, 35.6532F, 34.1357F, 3.3162F, 60.3957F, -1.5046F, 61.8542F, 93.5327F, 49.8233F, 37.2486F, -21.0923F, 2.6462F, 96.2433F, -48.4645F, 100.8559F, 5.8835F, 34.9436F, 80.3813F, 84.4933F, 38.3143F, -78.4639F, 3.3495F, 7.0416F, -121.9442F, 90.8917F, 79.7252F, -15.2997F, -67.8455F, 60.6317F, -56.1035F, -3.5687F, 110.7510F, -22.2741F, 27.4204F, -26.9833F, -61.1362F, 73.0974F, 7.1390F, 21.0362F, -11.6205F, 9.0680F, 9.3252F, 52.8599F, 21.3451F }; /* * 2nd stage codebook; 5th split: isf2_12 to isf2_15 */ const Float32 E_ROM_dico25_isf[SIZE_BK25 * 4] = { 65.8574F, 55.5896F, -46.5520F, 44.9019F, 80.4838F, -7.7875F, 36.7110F, 88.1867F, -41.5522F, 122.0924F, -8.3769F, 6.2406F, -24.0605F, 63.0705F, 27.8308F, 99.4548F, -34.8725F, 39.6270F, -72.1743F, 48.7995F, 28.2859F, -11.6999F, -78.4246F, 134.1911F, -100.6717F, 12.7337F, -3.2716F, 31.4897F, -40.5514F, -60.1846F, 28.1000F, 115.5554F, 56.1050F, -26.6471F, -104.7202F, -9.7237F, 31.5196F, -30.3722F, -34.0636F, 41.4375F, 8.5013F, 60.4295F, -72.4835F, -46.4772F, -18.1378F, -10.8741F, 10.5206F, 35.6699F, -44.7247F, -14.6405F, -68.4296F, -12.8925F, -36.6233F, -86.8592F, -73.8785F, 47.7951F, -51.6319F, -46.3776F, -74.4907F, -105.4981F, -67.2817F, -67.7186F, 6.9193F, -16.9668F, 108.8168F, 52.7624F, -16.3049F, -50.0846F, 72.9801F, -33.7268F, 89.4150F, -54.0673F, 62.1588F, 93.8928F, 54.7414F, 17.8328F, 26.7626F, 9.6218F, 88.5287F, 29.9594F, 8.1440F, 44.9198F, 5.0806F, 2.9996F, 26.4759F, -96.7328F, 49.0444F, 31.6496F, -58.6349F, 53.6024F, 80.8924F, -3.3883F, -60.0341F, -51.9482F, 112.9073F, 26.0056F, 55.9483F, -14.6255F, -33.5049F, -127.3506F, 70.1847F, -12.4499F, 7.3368F, -8.8635F, 10.1728F, 65.7077F, 45.2101F, -90.9790F, -12.5750F, -10.0652F, 45.9762F, -30.2995F, 1.2805F, -3.2898F, -17.5766F, -44.9828F, 22.1316F, -84.0894F, -21.1065F, -32.5923F, -81.6581F, 43.6873F, -8.6894F, -65.0775F, -35.4129F, -58.9663F, 65.8078F, -102.2045F }; /* * isf codebooks: two-stage VQ with split-by-3 in 2nd stage * 1st stage is kept the same as the 46 bit quantizer * * codebook vector dimension number of vectors * ~~~~~~~~ ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ * 1_1 9 256 * 1_2 7 256 * 2_1 5 128 * 2_2 4 128 * 2_3 7 64 */ const Float32 E_ROM_dico21_isf_36b[SIZE_BK21_36b * 5] = { -20.3147F, -37.6762F, 82.8575F, 122.9161F, -28.4468F, 31.9756F, -79.5400F, 141.6557F, 53.2923F, -77.0688F, -49.3360F, -129.1711F, 71.5448F, 85.1944F, 55.7117F, -19.1147F, -16.1797F, 217.6729F, 89.8943F, 28.1868F, 0.9668F, -28.5091F, 63.7145F, 147.3305F, 86.3104F, 52.0605F, 43.3415F, 108.6263F, 83.9071F, -42.8628F, -39.7734F, -7.6796F, 110.7755F, 44.0677F, 106.4663F, 32.7239F, 124.4301F, 113.4192F, 7.2217F, 33.0503F, -9.5746F, -1.9619F, 48.6607F, 51.4268F, -79.8193F, -14.9729F, -2.0174F, 111.5604F, -3.5774F, -139.2041F, -54.5000F, -100.1092F, 35.8796F, 45.5500F, -73.7805F, -56.2694F, 74.4424F, 122.2707F, 20.1155F, -38.3887F, 65.2094F, -3.9808F, 17.2638F, 96.6362F, 14.0115F, 148.8982F, 77.1199F, 93.1280F, 28.7596F, 2.2577F, 14.8324F, -159.4414F, 11.4260F, -1.0211F, -33.2422F, 35.9112F, 103.8106F, 61.4044F, -9.7034F, -78.2548F, 62.7658F, -47.4034F, 27.3267F, 32.6865F, -54.7569F, -6.2693F, -33.7779F, 43.5591F, -36.6678F, -73.8111F, -104.9376F, -105.4944F, 137.0911F, 41.7979F, -9.4558F, -26.6750F, -26.3288F, 192.3279F, -40.3915F, -60.3539F, -20.5168F, -51.3274F, 24.2191F, 47.5655F, 3.7810F, 52.7448F, 32.7149F, 110.3630F, -21.5464F, -46.7397F, -4.6471F, -85.4498F, 129.3530F, -31.6973F, 65.0658F, 85.9795F, -53.2356F, 57.2992F, -67.2997F, -16.4516F, 54.7607F, -37.1454F, -42.4738F, -34.5633F, -75.7294F, 0.0517F, -0.6519F, -1.3703F, -12.9917F, -148.9960F, -25.8564F, -84.6818F, 59.5151F, -72.5006F, -156.8837F, 95.5045F, 42.2665F, 60.9475F, -54.5273F, -154.2295F, 44.2810F, -53.2856F, -76.4082F, 42.9736F, -9.5286F, 83.7851F, 46.2184F, 4.1979F, -25.1575F, -51.0520F, -43.1590F, -111.8518F, -2.3420F, -129.5042F, 6.3083F, 36.5568F, 37.9981F, 30.8304F, -113.4959F, -79.9345F, -1.8493F, -15.3605F, -7.7093F, 98.5986F, -37.6177F, 29.8557F, 67.8956F, 39.3578F, 63.5122F, 23.6349F, -27.0502F, -93.1902F, -21.6230F, 155.8476F, 2.5165F, -44.7515F, 124.6855F, 64.1401F, 107.4525F, 76.4296F, -5.6913F, 14.2025F, -18.3757F, 129.1303F, 47.2448F, 88.4045F, 81.8179F, 106.0131F, 126.8375F, 71.9790F, 5.1288F, -31.2676F, -85.3474F, 183.8293F, 137.8851F, 112.3553F, 147.7620F, 6.3634F, -19.8307F, 97.9225F, 68.1479F, 45.1480F, 20.4456F, 58.0360F, -109.0384F, 91.7441F, 107.7617F, 15.1212F, 47.0576F, -18.7769F, 0.0359F, -42.2360F, -42.2471F, 94.1364F, -132.5071F, -36.3673F, 208.5491F, 17.4150F, 13.0281F, -33.9693F, 75.8679F, 58.1435F, -27.7181F, 158.0312F, -17.2012F, 159.6027F, 144.6236F, 31.6370F, -72.6323F, -59.9622F, 9.6094F, -39.8213F, -175.1189F, 48.5059F, -67.6102F, 8.4503F, 159.5329F, -43.0075F, -121.1605F, -83.4178F, -10.0988F, 8.8687F, -32.4219F, 44.4166F, 5.5756F, -42.8299F, 63.9306F, 20.2856F, 86.9213F, -32.1874F, 14.3835F, -9.6605F, -102.7732F, 119.7146F, -5.8143F, -181.8677F, 162.2914F, 114.1354F, 64.3820F, -7.2207F, 11.2529F, -7.2901F, -66.7670F, 60.6365F, 71.2140F, 69.9911F, 56.0744F, -10.7183F, 90.0489F, 100.9538F, -40.2531F, -96.6451F, -154.5512F, 92.9078F, 43.9867F, 146.6528F, -60.2643F, -42.7063F, -1.4891F, 60.9280F, 38.2143F, 33.0628F, -113.9071F, -1.8860F, -48.5082F, 45.4740F, 54.2829F, -45.4768F, -38.2865F, -114.7585F, -5.4061F, -32.4176F, -108.6457F, -45.8426F, -147.6796F, 41.4813F, 12.9066F, -41.5456F, -134.2382F, -189.2112F, 46.4330F, 6.8074F, -160.9846F, 53.8969F, 64.9889F, 149.8519F, 39.6080F, -79.5860F, 34.3934F, -61.0983F, -47.2568F, -110.8652F, -117.2089F, -0.3717F, -64.7306F, 109.4393F, 12.8368F, -59.4424F, -122.1797F, -31.4694F, -14.4126F, 8.5189F, 89.4622F, 59.7035F, 14.3509F, -23.3690F, -32.3486F, 92.0827F, -3.3169F, -16.0022F, -66.1460F, -89.0215F, 49.1022F, -7.9295F, 141.6034F, -91.8393F, 6.6528F, 142.3305F, -60.9383F, 61.1140F, -9.9035F, -11.7998F, 27.9396F, 56.3528F, 60.7524F, 59.7717F, -10.3224F, 100.1088F, 37.9471F, 56.4210F, -8.0706F, -14.3273F, 18.7969F, -25.3479F, 97.6871F, 24.5711F, 30.0075F, 106.4596F, -49.8085F, 48.5911F, -50.4430F, -10.2232F, 15.4334F, 3.6211F, -45.0851F, -2.3100F, 32.1923F, 14.7250F, -35.3260F, -71.2667F, -131.2863F, -5.1029F, 11.0382F, 61.7451F, 35.4884F, -11.6345F, 94.0117F, 53.4418F, -66.3264F, -6.6649F, 57.0155F, 5.4850F, -4.4053F, 12.7554F, 23.6955F, 74.8564F, 77.0331F, 21.2315F, -32.6182F, 33.2036F, 9.1670F, -78.1914F, -30.2862F, -11.1652F, 54.5347F, 47.7388F, 92.4139F, 41.3020F, -133.3741F, 53.0528F, -22.2909F, -55.2830F, -33.2798F, -6.2896F, -28.8257F, -23.1116F, -35.0033F, -3.2927F, -72.9685F, -7.7727F, -82.3073F, -104.1028F, 84.5118F, -69.8221F, -43.1637F, -19.5349F, -2.7976F, 85.8117F, -104.2825F, -27.2739F, -22.1902F, -16.4648F, -6.6730F, -5.7920F, 27.7237F, 12.5658F, 8.3566F, 24.7755F, -53.6096F, 12.7618F, -53.5741F, -68.1802F, 40.6279F, -26.4454F, 38.0614F, -26.1757F, -16.7503F, 52.0974F, -117.6298F, 86.4284F, -45.3502F, -78.0491F, -31.6007F, -35.9389F, -106.1265F, -24.8954F, -15.9989F, -21.2401F, -95.2454F, -86.1251F, -112.2460F, -94.4001F, -19.4652F, -33.9923F, -34.6433F, -95.7000F, 92.3440F, 39.8654F, -64.8912F, -115.0483F, 25.8969F, 9.4794F, -63.2644F, -27.6289F, 36.9308F, 25.6901F, 52.9741F, -35.3425F, -86.0458F, -14.2567F, -38.4101F, -62.7105F, -86.5748F, -73.4519F, 11.4446F, -7.0262F, 6.9787F, -7.4983F, -161.9427F, 3.4520F, 19.1677F, 23.8207F, 38.9733F, 15.3764F, -21.7743F, -43.1688F, 31.9400F, 52.7685F, -11.9674F, 20.1452F, -35.0128F, -59.7929F, -36.1783F, 73.7702F, 71.2205F, -83.5945F, 115.1128F, 46.5742F, -28.7420F, 110.8292F, 0.6347F, 53.5489F, 14.3686F, 18.4025F, 71.1819F, 35.9728F, 45.7217F, 71.9726F, -20.7319F, 145.8423F, -8.1019F, -5.6290F, -13.8278F, 53.1928F, 152.8343F, 57.0881F, 50.3240F, -64.1728F, -11.0774F, 129.9089F, 36.0925F, 31.0887F, -32.6698F, 39.1693F, -52.3060F, -3.1405F, 84.8560F, -12.4226F, 1.0655F, -18.3673F, -58.9719F, 98.0129F, -83.8334F, 55.3139F, 35.7679F, -87.3652F, 121.2513F, -67.0447F, -107.5562F, 38.2622F, 62.0513F, 60.4638F, -69.1208F, 43.6854F, 20.7579F, 79.9694F, 10.7071F, 3.2196F, -93.6621F, 75.1450F, 66.1122F, 46.9324F, -124.5950F, -78.3322F, 41.3915F, 4.3229F, 13.8757F, -33.6575F, -92.7601F, 177.5551F, -42.5067F, -60.2164F, -63.5331F, 67.8862F, -21.5990F, -14.9811F, 12.6046F, -39.5598F, -30.2755F, -22.9980F, -80.2668F, -125.5028F, -37.7023F, 27.0213F, 31.0364F, -121.0989F, 17.0095F, 6.9604F, -72.1639F, 13.2205F, -45.0105F, -7.6587F, -57.9626F, -15.4159F, 79.2983F, -11.3128F, 60.2083F, -11.6157F, -61.5281F, 64.7932F, -17.6502F, -51.3289F, -123.9766F, -9.4275F, 141.7024F, -64.4806F, -80.0931F, -43.9064F, -86.7513F, 103.4672F, -12.6910F, -17.1597F, -58.5736F, 21.2452F, -75.2569F, -2.3195F, -14.7279F, -99.6098F, -65.8753F, -44.8940F, -103.7556F, 33.9613F, -73.7263F, -13.9038F, -66.1526F, -23.2670F, -33.9743F, -103.9167F, -170.2949F, -66.2644F, -26.4354F, -31.7233F, -108.7190F, 9.2282F, 14.7962F, -9.0340F, -7.5327F, -60.7032F, -100.1385F, 55.1481F, -23.7530F, -88.2969F, -220.5980F, -68.4569F, 27.6805F, 3.3643F, -11.1758F, -92.5898F, -201.1381F, 102.8789F }; const Float32 E_ROM_dico22_isf_36b[SIZE_BK22_36b * 4] = { -116.4826F, -2.3267F, 37.0276F, 11.9585F, -83.2536F, -34.0855F, -47.5833F, 101.8900F, 1.6666F, -19.3089F, 81.2133F, 5.5915F, -50.2199F, -43.0204F, 11.8773F, 45.9389F, -83.6736F, 100.7533F, 42.9626F, -91.7069F, -15.8879F, -6.8432F, -49.2481F, 46.8567F, 40.2748F, 25.3026F, 49.6150F, -14.6042F, 49.1020F, -13.9172F, -9.5624F, 9.9442F, -53.7549F, -26.0755F, -108.5515F, -72.7670F, -64.1594F, -75.7696F, -78.4742F, 30.5700F, -82.2540F, -34.1100F, -20.0480F, -86.1655F, -68.0474F, -31.0203F, -36.5615F, -15.3976F, 8.8102F, -2.3252F, -61.3614F, -93.8460F, 8.4465F, -43.1451F, -59.6402F, -26.4485F, 57.8873F, -1.8283F, -0.9150F, -58.1355F, -0.3760F, -52.6396F, -15.1757F, -69.7872F, 26.6552F, 140.6710F, -45.5320F, -5.9904F, 53.5205F, 18.1777F, -108.7393F, 57.1700F, 53.1281F, 101.4898F, 52.8254F, 25.2450F, 23.9310F, 45.2712F, -17.5932F, 37.8318F, 90.1549F, 147.8806F, 33.8829F, -46.8215F, 132.2255F, 69.0079F, -106.1068F, 1.3402F, 103.9284F, 60.8167F, 10.9874F, -26.8688F, 101.6619F, 32.7808F, -33.2101F, 33.7802F, -103.9522F, 60.0893F, -100.1459F, -71.1324F, -6.7456F, -25.3835F, -118.9063F, -2.2439F, -15.7859F, 68.4583F, -59.0835F, -70.2552F, -10.4160F, 10.4323F, -34.1781F, -24.5999F, 47.1747F, 44.4596F, -64.8288F, -183.2536F, 62.0332F, -25.7788F, -126.3596F, -90.0926F, 83.7341F, 59.4975F, -55.2472F, -82.6595F, 53.3482F, 14.1273F, -71.7379F, -20.0471F, -110.1113F, -92.4130F, 15.5809F, 3.7302F, -18.8013F, -91.7902F, -14.6105F, 98.1369F, -21.2096F, -126.2513F, 53.1438F, 11.3308F, -34.3197F, -67.9178F, 83.0592F, 77.2733F, -152.4262F, 38.6895F, -24.6967F, -146.6594F, 41.7355F, -66.1454F, -64.2312F, 165.7005F, 27.0772F, -43.2220F, 54.9943F, -65.1872F, 28.8899F, -50.2606F, 25.5035F, 56.2652F, -137.7163F, -80.7691F, -80.0014F, -42.7037F, -62.3651F, -150.7820F, -138.8149F, 38.1900F, -68.7802F, -192.5785F, -7.8749F, -55.9578F, -98.5983F, -168.6083F, -0.7398F, 84.2329F, -35.1656F, -67.9774F, -65.6374F, -160.6224F, 4.9446F, -110.8514F, -89.3759F, -62.4133F, -34.1288F, -108.8451F, 13.3702F, -98.1466F, -29.4614F, -102.8405F, -22.8325F, -16.4528F, 163.9105F, 20.5337F, -82.4577F, -139.6505F, 149.8660F, -13.6016F, -146.1693F, 154.5116F, 26.6673F, -89.2330F, 126.1283F, -0.6475F, 65.0738F, -119.9143F, 75.1351F, 75.9130F, 179.3039F, 128.5647F, -1.9070F, -129.8349F, 146.4228F, 30.7058F, -2.7357F, 122.1955F, 110.1199F, -48.4108F, 78.0568F, -35.8715F, 105.8916F, -63.1848F, -27.3019F, 70.1234F, -61.4940F, -116.2433F, -200.7709F, -120.8167F, 22.5673F, -63.6047F, -213.1464F, 7.0661F, 48.3577F, -141.9964F, 65.3628F, -93.1012F, 32.5991F, -160.4748F, -45.5903F, 37.6377F, 54.6730F, -43.7561F, -151.6335F, -243.7797F, 101.1397F, -52.0073F, -123.8756F, 16.0909F, 63.7439F, -50.8957F, -25.0308F, -130.5887F, 88.2969F, -64.3814F, -48.5324F, -43.0123F, -181.9705F, -24.0096F, 2.3863F, 89.5185F, -59.5915F, 80.1714F, -56.6992F, 94.5562F, -62.1659F, 18.9433F, 76.0160F, 57.8553F, -22.4665F, 10.7743F, 12.0918F, 108.9830F, -118.1671F, 72.3971F, 109.1443F, -1.3839F, -23.8459F, 76.9232F, 22.9444F, 33.4435F, -44.5975F, 47.9554F, 65.6020F, -20.3018F, 13.6440F, 14.2271F, 38.9794F, 49.0774F, -159.0490F, 40.0263F, -30.2347F, -15.6526F, -132.0447F, -0.4802F, -133.5965F, 61.0673F, -69.7882F, 40.8409F, -13.3128F, -38.0654F, -72.3667F, 32.7089F, -13.7936F, 42.2054F, -51.7645F, 41.9187F, -35.3954F, -139.3463F, -70.4106F, 21.2248F, -89.5260F, 9.2659F, -17.3511F, 18.5094F, 18.3073F, -71.0465F, -25.6477F, 4.9120F, 17.7504F, 1.3904F, -132.5788F, 97.9003F, 25.0501F, 88.4524F, -16.3421F, 39.3618F, -136.5657F, 107.5423F, -38.7664F, 155.3425F, 55.5880F, 47.1198F, 43.2628F, 4.6910F, -39.9914F, 101.5498F, 0.0830F, 197.2389F, 101.6377F, -36.9070F, 62.8279F, 111.5018F, -37.6259F, 87.5036F, -1.4618F, 80.2742F, 122.5196F, 12.8147F, 65.1409F, 54.2334F, 34.3093F, 79.7332F, -91.6271F, 123.5048F, -23.6092F, -9.5877F, -3.2208F, -58.6010F, -121.8443F, 78.4266F, -14.0112F, 114.0430F, 23.9902F, -40.4777F, -15.4729F, 68.1635F, -63.4068F, 16.5519F, -8.1780F, 157.1093F, -11.2800F, -137.0649F, 8.0606F, 59.4657F, -140.5838F, -36.3320F, 22.2676F, 74.5499F, 82.8755F, -76.6792F, 29.5054F, 61.7793F, -8.0867F, -27.0956F, -128.1797F, -72.1649F, 129.2723F, 46.4323F, -20.7709F, 111.3353F, 22.0263F, 131.4695F, -41.9162F, -9.2182F, 158.1064F, 11.2798F, -7.1545F, 53.6140F, 106.2812F, 108.0610F, -99.5471F, 8.6443F, 67.7713F, -74.7187F, 115.0857F, 125.6656F, 126.8208F, 118.1528F, 8.3489F, -10.6246F, 129.8214F, -69.4937F, 46.4587F, 5.2711F, 105.7244F, 50.4485F, -177.6754F, -70.1548F, 45.4547F, -74.5236F, -88.7724F, 24.0424F, -57.8465F, 204.7888F, -68.8890F, -112.1224F, 110.3182F, -61.1447F, -94.7905F, 5.0186F, 77.6790F, 167.9779F, -23.0125F, -19.1513F, 44.8958F, -142.4394F, 28.0225F, -67.2659F, -53.6584F, 36.2990F, -54.0239F, -49.3550F, 55.1522F, -32.8946F, 2.0792F, -48.4861F, 14.9542F, -7.9957F, -100.8337F, 121.3744F, 234.8044F, 83.3187F, 36.5393F, 50.8425F, -23.7400F, 196.1698F, -0.3059F, -61.1762F, 189.5078F, 122.4017F, 57.0232F, -28.8934F, 61.7134F, 134.6930F, 107.9555F, 52.8736F, 109.5032F, -22.1311F, 191.2912F, 98.4213F, 38.7853F, 16.9729F, 104.1509F, -28.9315F, 167.6925F, 40.9011F, 108.7356F, -8.7976F, 46.5837F, 36.6080F, -211.7768F, 190.5028F, 100.4753F, -45.0833F, -32.7791F, -95.3684F, -171.2339F, 186.7766F, -44.0395F, -212.9286F, 151.2602F, 39.5958F, -37.2152F, -119.5092F, 43.4460F, 194.5965F, 37.2023F, 64.8673F, 8.5289F, -117.5366F, 163.8890F, -5.9760F, -22.5312F, -30.3817F, 105.4272F, 11.3735F, 47.6228F, -110.1422F, 62.3479F, -93.6059F, 19.4353F, -14.9112F }; const Float32 E_ROM_dico23_isf_36b[SIZE_BK23_36b * 7] = { 31.6601F, -7.0021F, 26.7324F, -10.6919F, -47.7440F, -109.3316F, -1.6793F, 17.6152F, -69.1639F, 81.7745F, -11.6557F, -53.0002F, -28.8501F, 51.3155F, -17.3392F, 39.6296F, -29.4208F, -34.2716F, -18.7475F, -53.4279F, -21.0682F, -95.6211F, -11.0108F, 24.5639F, -6.9345F, -43.8606F, -40.3930F, 22.5841F, -30.9469F, -2.2484F, 85.8968F, -25.2118F, 44.4649F, -13.7549F, -19.6283F, 42.5807F, -25.3893F, 55.9790F, -44.6039F, 50.3451F, 29.5180F, 49.0040F, 64.7422F, 35.0105F, -24.0120F, -94.6131F, 72.4785F, -29.0560F, -16.8213F, -17.7762F, -36.1097F, 19.1423F, -88.8131F, 9.4121F, -60.6212F, 15.2182F, 26.1194F, 33.0214F, 38.6243F, -16.4898F, 20.5108F, -71.7754F, -109.7775F, 55.6133F, -47.5797F, 0.0746F, 8.1716F, -55.6639F, -5.8260F, -6.7666F, 86.9148F, 36.0665F, -8.0422F, -18.6522F, -31.9936F, -5.4779F, -65.2340F, 20.0656F, -14.5303F, -94.7449F, -11.7982F, -35.2031F, 6.9138F, -22.0461F, 20.9060F, 41.0458F, 29.0299F, 33.4933F, 27.0675F, 5.1646F, -39.4529F, 76.7175F, 28.2216F, -34.8562F, 16.7304F, 25.2291F, 7.4912F, 15.3906F, 47.1053F, 13.3625F, 50.9902F, -31.9588F, 9.8596F, 83.1329F, -61.0081F, 39.4355F, -39.6936F, -53.1235F, -8.1282F, 22.3882F, 83.7131F, 8.6440F, 13.9302F, -48.4179F, 80.1925F, 79.6573F, 22.8321F, -61.0888F, -32.5848F, 32.2601F, -45.5857F, 53.4300F, 53.4773F, 33.0895F, 45.4420F, 17.2865F, -36.0406F, -57.6566F, -26.6841F, 4.2674F, -39.8452F, -76.9236F, -85.9930F, -29.8696F, -72.1261F, -22.6802F, 51.6689F, -10.3407F, -71.6716F, 33.3209F, -2.6190F, -11.9459F, -0.7138F, 9.1651F, 80.0695F, -58.7987F, 3.7833F, -10.6521F, -14.2910F, -1.7854F, -6.9002F, 114.1547F, 51.0851F, 0.4936F, 45.5988F, -65.6262F, 3.5076F, -36.3037F, 31.3412F, -22.8916F, -48.6823F, -71.1623F, -95.4642F, 38.3287F, -9.4939F, 52.9002F, -8.4421F, 36.7283F, 86.2675F, 37.9505F, 41.2317F, 16.4269F, 16.7260F, -62.6682F, 32.6168F, 9.9181F, -25.0994F, -8.3770F, 2.2985F, 5.3157F, -6.0428F, 60.1555F, 49.0247F, 6.0545F, -54.7919F, 58.6261F, -3.9732F, -80.9565F, -44.3777F, 30.6734F, -24.5101F, -82.4513F, -27.4901F, -10.8146F, -84.7650F, 64.6334F, 18.0553F, 14.7350F, -8.7675F, 109.6707F, 51.4393F, -24.1075F, 42.7732F, 43.6601F, 21.1278F, -43.7223F, -36.3814F, 81.3688F, 10.3561F, 115.5857F, 44.7304F, 4.0203F, -57.4008F, 16.1462F, 84.4927F, 16.5958F, -107.7931F, 19.3887F, -44.8683F, -99.3061F, 65.1051F, 45.6203F, -0.6984F, 23.6828F, 6.4828F, 56.2769F, 13.3073F, -28.0424F, -72.7066F, -58.5212F, 106.1769F, -11.1674F, -25.7849F, -34.9574F, -36.9812F, -58.1843F, 50.2182F, 98.0044F, 47.6759F, 0.1786F, -19.4605F, -91.2611F, -35.5267F, 13.8815F, 10.2127F, -41.1350F, -39.8329F, -34.1829F, -47.4437F, -91.9939F, -2.6788F, -4.2821F, -79.6033F, 42.6213F, 2.0653F, -74.4526F, 41.0602F, -5.7905F, 63.6539F, -31.4071F, 12.4383F, -9.2647F, -81.5461F, 16.0430F, 114.6936F, 27.3863F, -41.2719F, -36.6253F, -79.4997F, -46.2467F, 46.8034F, -19.4146F, -14.6126F, -31.9554F, -93.9975F, 17.8233F, -51.0152F, -11.4389F, 58.4455F, -21.6241F, 12.9670F, 60.7166F, 46.9564F, -34.6928F, -3.1553F, 2.7762F, 24.2978F, 83.1108F, 31.8670F, 23.6533F, 6.8663F, -63.0785F, 56.1031F, 59.2073F, 11.6877F, 51.3190F, 25.3083F, -33.9761F, -99.5482F, -6.6294F, -41.7488F, -3.1041F, 33.3329F, -24.8851F, 20.0947F, -63.3399F, 87.2565F, -20.6208F, -52.2549F, 102.0059F, 26.9280F, -22.0208F, 85.2782F, 28.3108F, -43.2782F, 0.8584F, 60.5987F, -44.2357F, -33.9700F, 19.1247F, 33.1631F, -10.8275F, -63.5371F, 16.2471F, -0.2828F, -76.6458F, 2.8322F, 15.2373F, -95.8412F, 5.5912F, -53.4989F, -30.8518F, 4.1365F, -62.3116F, 79.0018F, -114.5611F, -36.8596F, 12.7812F, 81.1609F, 39.2434F, 21.9162F, -17.2064F, 127.1804F, -30.4279F, -15.8549F, 90.5057F, 4.9324F, -55.6202F, 88.7264F, 31.2457F, -6.4338F, -33.9992F, 78.4675F, 12.7460F, -51.8920F, 5.7002F, -71.3454F, -22.6305F, -75.0886F, -18.4430F, 71.6854F, -49.9613F, 51.9112F, 38.5919F, -80.1990F, 4.2373F, -60.6613F, 30.4453F, 20.4006F, 28.0162F, 55.1546F, -96.2887F, 10.3433F, 38.5883F, 59.1444F, 23.2247F, 45.0000F, -24.9305F, -30.9055F, -18.2692F, -6.1201F, -5.6460F, 2.1550F, 18.2502F, -16.8166F, -28.0966F, -69.3654F, -10.5762F, 63.4193F, 43.8444F, 16.6643F, -67.9380F, -68.3269F, 93.1501F, 72.8030F, 27.6125F, -21.1484F, -73.4926F, -29.7929F, -88.0045F, 91.0304F, 15.1885F, -15.1144F, -61.6391F, 47.5526F, 17.2017F, -10.0973F, 16.8435F, 32.7608F, 50.6231F, -36.3173F, -19.8196F, 8.7833F, 1.1920F, 35.7643F, -58.4480F, 53.1925F, -71.1458F, -22.3426F, 37.8118F, -51.2779F, 69.9477F, -30.3236F, 31.2621F, 35.5419F, -64.6025F, 35.1224F, -0.6572F, 57.9364F, 5.6749F, 50.6782F, 25.3456F, 68.4492F, 45.6955F, -53.8176F, 44.6419F, -53.4407F, 51.5645F, 1.3456F, -4.0462F, -72.5604F, 54.6610F, -1.6150F, -14.3009F, 99.1775F, -24.2467F, 36.0557F, -42.7052F }; /* * isf codebooks: split-by-5 VQ * * codebook vector dimension number of vectors * ~~~~~~~~ ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ * 1 2 64 * 2 3 64 * 3 3 64 * 4 4 32 * 5 4 32 */ /* * 1st split: isf0 to isf1 */ const Float32 E_ROM_dico1_isf_noise[SIZE_BK_NOISE1 * 2] = { -105.0619F, -262.8448F, -86.6322F, -209.7320F, -91.1931F, -168.0481F, -53.8753F, -176.1473F, -82.7923F, -129.2635F, -75.0845F, -93.9859F, -33.9476F, -90.3333F, -74.4463F, -50.0451F, -27.3422F, -41.3458F, -64.0658F, -2.5361F, 28.8179F, -70.0786F, 10.5059F, -12.8463F, -39.9581F, 28.7359F, -63.4034F, 44.7503F, -36.8732F, 67.0368F, -2.3563F, 50.6058F, -55.9412F, 91.2822F, 5.5577F, 85.1171F, -25.2586F, 105.6009F, 34.3216F, 71.1726F, -48.3043F, 133.1605F, -17.0366F, 148.8321F, 14.8305F, 130.6908F, 45.5592F, 106.8464F, -43.7865F, 177.4889F, 28.9675F, 168.2081F, -1.7812F, 190.4731F, 68.4806F, 149.8876F, -32.5396F, 218.9960F, 47.8438F, 206.6539F, 8.1960F, 234.8430F, 89.3668F, 188.0221F, 90.4035F, 118.3064F, 88.4263F, 237.5410F, 117.3136F, 145.4498F, 82.0645F, 73.1093F, 119.3943F, 103.4796F, 128.2321F, 184.8528F, 149.1563F, 129.2199F, 144.9058F, 51.5776F, 54.4305F, 22.6608F, 142.5451F, 8.2812F, 97.4966F, -31.8767F, 173.0963F, 84.9898F, 188.5170F, 42.9719F, 166.5772F, 162.2136F, 226.1740F, 86.5496F, 202.2992F, 129.9512F, 223.9365F, 175.1483F, 177.6235F, 206.6174F, 267.4435F, 128.4469F, 129.8694F, 226.5438F, 232.5047F, 231.7147F, 182.8960F, 252.1132F, 297.7026F, 201.9668F, 127.2108F, 277.0716F, 189.5906F, 309.6084F, 50.8926F, 267.2207F, 262.1367F, 287.8791F, 138.4480F, 342.2196F, 34.3804F, 314.8025F, -25.4771F, 275.9066F, -13.5804F, 397.0122F, 103.9035F, 438.8237F }; /* * 2nd split: isf2 to isf4 */ const Float32 E_ROM_dico2_isf_noise[SIZE_BK_NOISE2 * 3] = { -322.0252F, -345.3659F, -370.7835F, -314.5226F, -178.1928F, -163.4712F, -172.6074F, -171.2812F, -211.3224F, -84.6538F, -225.6710F, -309.6982F, -65.7865F, -173.3148F, -227.1618F, -112.2154F, -192.0593F, -106.9376F, -215.4487F, -115.9810F, -117.3159F, -63.6069F, -129.9179F, -139.6890F, -144.6460F, -90.4563F, -90.4457F, -68.4568F, -140.0307F, -62.0772F, -148.8729F, -8.2807F, -139.6018F, -71.8488F, -61.9658F, -63.2677F, -20.5518F, -74.4279F, -109.2530F, 7.0237F, -104.2936F, -83.9866F, -53.7369F, 23.9918F, -110.5212F, 27.5927F, -37.1603F, -114.8537F, 5.1437F, -60.8316F, -213.2375F, -0.0302F, -32.5161F, -30.9893F, 17.0532F, 37.8947F, -123.4512F, 69.4656F, -20.4364F, -83.2673F, 86.8486F, -101.9140F, -164.6497F, 92.7595F, -46.0582F, -17.0665F, 55.0807F, 56.5797F, -51.6089F, 141.9268F, 31.5952F, -111.9348F, 83.1350F, 25.3995F, 13.2634F, -41.6305F, 36.7624F, -1.8806F, 35.5619F, -11.1360F, 49.0468F, -138.6944F, 20.1165F, -16.0470F, -85.7227F, -29.5173F, 56.5419F, -24.5306F, 39.2035F, 95.3233F, -280.8913F, 17.3520F, 10.4723F, -223.4287F, -48.5814F, 60.3781F, -165.0790F, 52.0898F, 122.9863F, -358.1462F, 27.5800F, 87.6394F, -104.6460F, 124.2969F, 51.2676F, -36.4609F, -74.1586F, 163.9110F, -38.0255F, 47.6372F, 191.7725F, -30.7896F, 123.7246F, 138.8302F, 50.7064F, 39.0454F, 126.9589F, 33.4334F, -114.5499F, 82.0810F, 52.0289F, 100.6551F, 62.9260F, 68.9398F, -28.6776F, 181.7511F, 76.3353F, 117.0400F, 150.0834F, 135.9951F, 8.5581F, 86.5077F, 146.9219F, 71.3024F, 159.6375F, 147.3144F, 111.7858F, 78.8838F, 94.6612F, 83.2958F, 257.4856F, 100.5727F, 220.5308F, 96.9196F, 134.4751F, 159.3021F, -29.6067F, 158.3509F, 171.9108F, 198.9399F, 238.9283F, 150.3837F, 148.0492F, 209.2346F, 237.2747F, 84.4977F, -21.9723F, 227.3437F, 75.1847F, 39.1823F, 202.0239F, 221.5619F, -142.6753F, 174.8218F, 173.9311F, 284.1931F, 135.5243F, 4.0420F, 197.3545F, 139.2970F, 296.6173F, 248.5921F, 227.1523F, 257.1579F, 130.8344F, 201.7665F, 332.6679F, 147.8451F, 316.0691F, 223.3704F, -76.1983F, 342.8470F, 323.9619F, 206.5931F, 276.1481F, 385.6192F, 358.4664F, 283.4258F, 153.2502F, 488.2212F, 389.4155F, 415.1465F }; /* * 3rd split: isf5 to isf7 */ const Float32 E_ROM_dico3_isf_noise[SIZE_BK_NOISE3 * 3] = { -314.4522F, -327.3454F, -302.2017F, -203.9117F, -244.9068F, -323.6309F, -186.2536F, -189.6962F, -235.4297F, -115.3995F, -187.7246F, -247.4612F, -142.8871F, -150.1942F, -153.3509F, -72.7072F, -161.6552F, -154.8560F, -92.6058F, -153.8863F, -41.3953F, -98.5994F, -78.7129F, -107.5332F, -23.9335F, -69.1898F, -172.7805F, -32.7960F, -77.3107F, -77.6193F, -69.7610F, -48.7327F, -12.2728F, -28.2008F, -18.3660F, -63.7045F, -116.3960F, -85.9584F, 84.0164F, -24.9241F, -65.7832F, 98.1712F, -51.8131F, 60.9599F, -23.0835F, -11.5386F, -0.7831F, 49.5084F, 20.9367F, 25.8838F, -24.0191F, -91.0503F, 8.0161F, 98.1430F, 81.8089F, -19.4694F, 12.5661F, 12.6976F, 75.6776F, 53.0320F, -45.8943F, -7.2062F, 185.7293F, 78.8625F, 17.9396F, 120.6767F, 99.9111F, 72.2135F, 20.5674F, 13.7143F, 77.9979F, 152.4088F, 78.0738F, 102.8484F, 94.6295F, -84.5040F, 118.1050F, 114.7064F, 50.0596F, 139.6647F, -0.1577F, 7.5966F, 168.3675F, 112.1363F, 87.3316F, 174.4695F, 109.2434F, 143.4298F, 64.6162F, 83.1959F, 155.2307F, 122.7478F, 124.7551F, 149.4719F, 147.9446F, 29.2261F, 108.3426F, 127.0695F, 180.3353F, 153.8867F, 197.0929F, 130.5922F, 98.1956F, 38.2729F, -83.1688F, 175.9048F, 59.9165F, 174.8273F, 220.7233F, 88.4354F, 29.6527F, 183.5505F, 149.7702F, 195.9197F, 248.2375F, 152.2900F, 108.7161F, 92.6034F, 52.6123F, 242.1773F, 133.7155F, 156.6441F, 253.6524F, 129.4868F, 215.2826F, 202.4702F, 50.8526F, 163.2149F, 231.3041F, 207.4225F, 119.3517F, 287.7008F, 284.9414F, 152.0429F, 226.6699F, 194.1092F, 217.5607F, 272.9373F, 115.7381F, 149.7147F, 341.2299F, 110.4872F, 243.8135F, 296.4818F, 49.2583F, 242.9759F, 185.7527F, 218.4281F, 232.2570F, 184.3956F, 149.3219F, 300.8763F, 240.4531F, 280.7402F, 239.3506F, 291.1599F, 210.7589F, 249.5308F, 362.4219F, 201.8519F, 322.7530F, 312.7221F, 267.0336F, 316.7373F, 236.0985F, 293.8933F, 307.2101F, 334.8007F, 364.5740F, 258.0872F, 136.8430F, 271.0491F, 175.6599F, 414.3537F, 219.3663F, 355.8581F, 410.6574F, 321.8781F, 317.4617F, 431.4073F, 295.9753F, 408.9221F, 344.4007F, 445.2552F, 358.3636F, 347.1212F, 405.7584F, 486.9081F, 556.9660F, 579.1823F, 650.5953F, 732.6415F }; /* * 4th split: isf8 to isf11 */ const Float32 E_ROM_dico4_isf_noise[SIZE_BK_NOISE4 * 4] = { -303.1361F, -333.7803F, -347.8725F, -359.4826F, -215.7523F, -238.3714F, -259.0660F, -289.4405F, -125.2913F, -144.5697F, -186.1030F, -220.5702F, 107.0201F, -62.5400F, -178.2959F, 78.3558F, 103.6377F, 26.1626F, -62.5396F, -119.5691F, -2.9518F, -82.1288F, 30.9020F, 106.1641F, 63.5315F, 92.0127F, 120.0751F, 120.2205F, 225.8191F, 123.6829F, 24.8449F, 116.4136F, -3.5121F, 76.7992F, 133.5771F, 242.3746F, 133.9970F, 90.5385F, 122.6116F, 242.8362F, 67.7067F, 58.1366F, 214.2467F, 205.7587F, 139.2159F, 144.6370F, 188.0780F, 146.8699F, 52.7259F, 173.3530F, 190.5093F, 217.0651F, 152.5843F, 183.9790F, 190.4016F, 255.0127F, 89.0815F, 165.5783F, 224.8295F, 325.9805F, 164.7109F, 145.4724F, 282.2096F, 266.3416F, 115.0926F, 262.9259F, 270.8098F, 248.1893F, 210.4561F, 232.8534F, 230.5395F, 175.4710F, 185.5563F, 241.3006F, 257.2568F, 319.6433F, 287.0131F, 201.7823F, 191.6938F, 262.7153F, 234.9706F, 135.0743F, 100.3842F, 342.4814F, 244.1460F, 248.1535F, 331.5106F, 281.3059F, 283.8415F, 319.6996F, 272.8347F, 232.3501F, 255.2254F, 187.9562F, 269.5668F, 445.0594F, 318.1439F, 297.7580F, 274.9042F, 354.5264F, 198.0688F, 291.9682F, 350.7645F, 365.4872F, 331.2469F, 333.9341F, 361.1275F, 306.5865F, 252.3140F, 405.2271F, 344.4444F, 310.3618F, 301.5996F, 329.9839F, 399.8752F, 449.5998F, 442.5639F, 384.1796F, 319.3500F, 359.8945F, 367.3365F, 417.2813F, 488.9795F, 508.7549F, 620.4818F, 690.0919F, 671.0975F, 590.9387F }; /* * 5th split: isf12 to isf15 */ const Float32 E_ROM_dico5_isf_noise[SIZE_BK_NOISE5 * 4] = { -316.2941F, -343.3920F, -368.9643F, -99.0392F, 97.0450F, 71.7080F, 262.1754F, 50.0767F, 112.4468F, 274.7287F, 358.7211F, 38.6232F, 257.1795F, 217.8952F, 258.6022F, 85.4104F, 215.6079F, 228.7031F, 355.6118F, 81.4276F, 218.4167F, 314.1638F, 296.3636F, 46.5526F, 236.5851F, 302.2603F, 359.7074F, -54.3647F, 305.5962F, 297.4161F, 292.2765F, 81.3061F, 295.4005F, 276.4861F, 384.1555F, 21.9038F, 212.3865F, 337.6641F, 394.4713F, 59.4888F, 287.8841F, 272.8244F, 385.4754F, 116.6899F, 301.1416F, 360.9641F, 343.2708F, 40.2882F, 209.5407F, 306.5670F, 375.3650F, 158.1632F, 260.4655F, 357.6203F, 312.8495F, 128.1323F, 288.3843F, 275.2455F, 301.9735F, 171.2988F, 321.4736F, 340.3829F, 387.3967F, 138.5811F, 250.1021F, 392.3276F, 410.9932F, 144.0109F, 282.6727F, 320.9480F, 370.8150F, 233.3823F, 161.9622F, 255.8086F, 284.8333F, 188.2323F, 393.9827F, 349.8717F, 309.8297F, 141.6719F, 354.6675F, 313.7792F, 268.4562F, -9.8681F, 396.7580F, 327.4283F, 395.0635F, 73.8789F, 369.8889F, 434.5653F, 367.9579F, 86.8706F, 356.9169F, 409.7761F, 383.1727F, 205.7493F, 373.4236F, 385.5478F, 394.8253F, -47.0644F, 305.1456F, 409.5952F, 437.7072F, 36.1164F, 460.1152F, 411.4012F, 345.2657F, 18.4203F, 438.6750F, 413.5906F, 461.8582F, 46.2207F, 364.6111F, 379.8415F, 498.6693F, 139.3899F, 433.1401F, 358.6805F, 429.9292F, 196.6537F, 405.9484F, 502.2995F, 476.5874F, 123.6977F, 527.5430F, 471.6736F, 394.4862F, 127.2615F }; /* * Hamming_cos window for LPC analysis. */ const Float32 E_ROM_hamming_cos[L_WINDOW] = { 0.0800000F, 0.0800348F, 0.0801391F, 0.0803129F, 0.0805563F, 0.0808691F, 0.0812513F, 0.0817028F, 0.0822237F, 0.0828138F, 0.0834730F, 0.0842012F, 0.0849983F, 0.0858642F, 0.0867987F, 0.0878018F, 0.0888733F, 0.0900129F, 0.0912206F, 0.0924962F, 0.0938394F, 0.0952500F, 0.0967279F, 0.0982728F, 0.0998845F, 0.101563F, 0.103307F, 0.105118F, 0.106994F, 0.108936F, 0.110943F, 0.113014F, 0.115151F, 0.117351F, 0.119616F, 0.121944F, 0.124335F, 0.126789F, 0.129306F, 0.131884F, 0.134525F, 0.137226F, 0.139989F, 0.142812F, 0.145695F, 0.148638F, 0.151639F, 0.154700F, 0.157819F, 0.160995F, 0.164229F, 0.167520F, 0.170867F, 0.174270F, 0.177728F, 0.181241F, 0.184808F, 0.188429F, 0.192103F, 0.195829F, 0.199608F, 0.203438F, 0.207319F, 0.211250F, 0.215231F, 0.219261F, 0.223340F, 0.227466F, 0.231640F, 0.235860F, 0.240126F, 0.244438F, 0.248794F, 0.253195F, 0.257638F, 0.262125F, 0.266653F, 0.271223F, 0.275833F, 0.280483F, 0.285173F, 0.289901F, 0.294667F, 0.299470F, 0.304309F, 0.309184F, 0.314094F, 0.319038F, 0.324015F, 0.329025F, 0.334067F, 0.339140F, 0.344244F, 0.349377F, 0.354538F, 0.359728F, 0.364946F, 0.370189F, 0.375458F, 0.380753F, 0.386071F, 0.391412F, 0.396776F, 0.402162F, 0.407568F, 0.412995F, 0.418441F, 0.423905F, 0.429386F, 0.434885F, 0.440399F, 0.445928F, 0.451472F, 0.457029F, 0.462598F, 0.468179F, 0.473771F, 0.479373F, 0.484984F, 0.490604F, 0.496231F, 0.501865F, 0.507504F, 0.513148F, 0.518797F, 0.524448F, 0.530102F, 0.535757F, 0.541413F, 0.547069F, 0.552724F, 0.558377F, 0.564027F, 0.569673F, 0.575315F, 0.580952F, 0.586582F, 0.592205F, 0.597821F, 0.603428F, 0.609025F, 0.614611F, 0.620187F, 0.625750F, 0.631300F, 0.636837F, 0.642359F, 0.647865F, 0.653355F, 0.658828F, 0.664283F, 0.669719F, 0.675136F, 0.680532F, 0.685907F, 0.691260F, 0.696590F, 0.701896F, 0.707178F, 0.712435F, 0.717665F, 0.722869F, 0.728045F, 0.733192F, 0.738311F, 0.743399F, 0.748457F, 0.753483F, 0.758477F, 0.763438F, 0.768365F, 0.773257F, 0.778115F, 0.782936F, 0.787720F, 0.792467F, 0.797176F, 0.801846F, 0.806477F, 0.811067F, 0.815616F, 0.820124F, 0.824589F, 0.829011F, 0.833389F, 0.837723F, 0.842012F, 0.846256F, 0.850453F, 0.854603F, 0.858706F, 0.862760F, 0.866766F, 0.870722F, 0.874628F, 0.878484F, 0.882288F, 0.886041F, 0.889741F, 0.893389F, 0.896983F, 0.900523F, 0.904009F, 0.907439F, 0.910814F, 0.914133F, 0.917395F, 0.920601F, 0.923748F, 0.926838F, 0.929869F, 0.932842F, 0.935755F, 0.938608F, 0.941401F, 0.944133F, 0.946804F, 0.949413F, 0.951961F, 0.954446F, 0.956869F, 0.959229F, 0.961525F, 0.963758F, 0.965926F, 0.968030F, 0.970070F, 0.972044F, 0.973953F, 0.975796F, 0.977574F, 0.979285F, 0.980930F, 0.982509F, 0.984020F, 0.985464F, 0.986841F, 0.988151F, 0.989392F, 0.990566F, 0.991671F, 0.992709F, 0.993678F, 0.994578F, 0.995409F, 0.996172F, 0.996866F, 0.997490F, 0.998046F, 0.998532F, 0.998949F, 0.999296F, 0.999574F, 0.999783F, 0.999922F, 0.999991F, 1.00000F, 0.999924F, 0.999698F, 0.999320F, 0.998791F, 0.998111F, 0.997280F, 0.996298F, 0.995166F, 0.993883F, 0.992450F, 0.990867F, 0.989134F, 0.987252F, 0.985220F, 0.983039F, 0.980710F, 0.978233F, 0.975607F, 0.972834F, 0.969914F, 0.966848F, 0.963635F, 0.960277F, 0.956773F, 0.953125F, 0.949332F, 0.945396F, 0.941317F, 0.937096F, 0.932733F, 0.928229F, 0.923585F, 0.918801F, 0.913879F, 0.908818F, 0.903619F, 0.898284F, 0.892814F, 0.887208F, 0.881468F, 0.875595F, 0.869589F, 0.863452F, 0.857185F, 0.850788F, 0.844262F, 0.837609F, 0.830829F, 0.823923F, 0.816893F, 0.809739F, 0.802463F, 0.795066F, 0.787548F, 0.779911F, 0.772157F, 0.764285F, 0.756298F, 0.748197F, 0.739983F, 0.731657F, 0.723220F, 0.714674F, 0.706019F, 0.697258F, 0.688392F, 0.679421F, 0.670348F, 0.661174F, 0.651899F, 0.642526F, 0.633056F, 0.623490F, 0.613830F, 0.604077F, 0.594233F, 0.584299F, 0.574276F, 0.564167F, 0.553972F, 0.543694F, 0.533333F, 0.522892F, 0.512372F, 0.501774F, 0.491101F, 0.480353F, 0.469533F, 0.458641F, 0.447680F, 0.436652F, 0.425558F, 0.414399F, 0.403177F, 0.391895F, 0.380553F, 0.369154F, 0.357699F, 0.346190F, 0.334629F, 0.323017F, 0.311356F, 0.299648F, 0.287895F, 0.276098F, 0.264260F, 0.252381F, 0.240465F, 0.228512F, 0.216524F, 0.204504F, 0.192453F, 0.180373F, 0.168265F, 0.156132F, 0.143976F, 0.131797F, 0.119599F, 0.107383F, 0.0951502F, 0.0829032F, 0.0706437F, 0.0583736F, 0.0460946F, 0.0338087F, 0.0215176F, 0.00922329F }; /* * Quantization table for VQ of pitch and innovation gains. */ const Float32 E_ROM_qua_gain6b[NB_QUA_GAIN6B * 2] = { 0.095577F, 0.650507F, 0.096232F, 1.737050F, 0.187418F, 3.168846F, 0.255896F, 4.962348F, 0.274392F, 1.237365F, 0.306340F, 2.191559F, 0.340913F, 7.624112F, 0.349443F, 0.694540F, 0.393850F, 0.283414F, 0.410411F, 3.335519F, 0.467326F, 1.722400F, 0.492699F, 1.024880F, 0.502447F, 2.596945F, 0.538748F, 4.284797F, 0.594507F, 1.400231F, 0.601562F, 0.715119F, 0.615667F, 6.097708F, 0.625075F, 2.174328F, 0.662782F, 3.231284F, 0.690967F, 1.751661F, 0.696845F, 0.878992F, 0.710639F, 1.185743F, 0.715220F, 0.482280F, 0.751490F, 2.486668F, 0.764345F, 4.108078F, 0.767472F, 12.8F, 0.769099F, 1.658386F, 0.803928F, 0.792686F, 0.810832F, 1.183175F, 0.818967F, 2.972155F, 0.821480F, 6.255056F, 0.833469F, 1.761157F, 0.861276F, 2.207579F, 0.863275F, 0.599961F, 0.880429F, 0.913681F, 0.880816F, 3.532393F, 0.881643F, 1.383632F, 0.892825F, 4.900598F, 0.906974F, 8.542764F, 0.925368F, 1.772085F, 0.928281F, 2.841080F, 0.933752F, 1.101603F, 0.947124F, 2.305683F, 0.956012F, 0.517399F, 0.961870F, 3.892433F, 0.972823F, 5.841643F, 0.977796F, 1.463091F, 0.981803F, 0.833284F, 1.008362F, 2.077002F, 1.011696F, 3.039251F, 1.031157F, 1.162086F, 1.031888F, 0.332692F, 1.050599F, 4.104371F, 1.074819F, 1.668828F, 1.092217F, 2.572842F, 1.108887F, 5.736302F, 1.112667F, 0.769072F, 1.135654F, 15.9999F, 1.143096F, 10.587959F, 1.168006F, 1.241697F, 1.185414F, 3.211269F, 1.186919F, 2.000422F, 1.187154F, 4.421983F, 1.243327F, 7.268204F }; const Float32 E_ROM_qua_gain7b[NB_QUA_GAIN7B * 2] = { 0.012445F, 0.215546F, 0.028326F, 0.965442F, 0.053042F, 0.525819F, 0.065409F, 1.495322F, 0.078212F, 2.323725F, 0.100504F, 0.751276F, 0.112617F, 3.427530F, 0.113124F, 0.309583F, 0.121763F, 1.140685F, 0.143515F, 7.519609F, 0.162430F, 0.568752F, 0.164940F, 1.904113F, 0.165429F, 4.947562F, 0.194985F, 0.855463F, 0.213527F, 1.281019F, 0.223544F, 0.414672F, 0.243135F, 2.781766F, 0.257180F, 1.659565F, 0.269488F, 0.636749F, 0.286539F, 1.003938F, 0.328124F, 2.225436F, 0.328761F, 0.330278F, 0.336807F, 11.500983F, 0.339794F, 3.805726F, 0.344454F, 1.494626F, 0.346165F, 0.738748F, 0.363605F, 1.141454F, 0.398729F, 0.517614F, 0.415276F, 2.928666F, 0.416282F, 0.862935F, 0.423421F, 1.873310F, 0.444151F, 0.202244F, 0.445842F, 1.301113F, 0.455671F, 5.519512F, 0.484764F, 0.387607F, 0.488696F, 0.967884F, 0.488730F, 0.666771F, 0.508189F, 1.516224F, 0.508792F, 2.348662F, 0.531504F, 3.883870F, 0.548649F, 1.112861F, 0.551182F, 0.514986F, 0.564397F, 1.742030F, 0.566598F, 0.796454F, 0.589255F, 3.081743F, 0.598816F, 1.271936F, 0.617654F, 0.333501F, 0.619073F, 2.040522F, 0.625282F, 0.950244F, 0.630798F, 0.594883F, 0.638918F, 4.863197F, 0.650102F, 1.464846F, 0.668412F, 0.747138F, 0.669490F, 2.583027F, 0.683757F, 1.125479F, 0.691216F, 1.739274F, 0.718441F, 3.297789F, 0.722608F, 0.902743F, 0.728827F, 2.194941F, 0.729586F, 0.633849F, 0.730907F, 7.432957F, 0.731017F, 0.431076F, 0.731543F, 1.387847F, 0.759183F, 1.045210F, 0.768606F, 1.789648F, 0.771245F, 4.085637F, 0.772613F, 0.778145F, 0.786483F, 1.283204F, 0.792467F, 2.412891F, 0.802393F, 0.544588F, 0.807156F, 0.255978F, 0.814280F, 1.544409F, 0.817839F, 0.938798F, 0.826959F, 2.910633F, 0.830453F, 0.684066F, 0.833431F, 1.171532F, 0.841208F, 1.908628F, 0.846440F, 5.333522F, 0.868280F, 0.841519F, 0.868662F, 1.435230F, 0.871449F, 3.675784F, 0.881317F, 2.245058F, 0.882020F, 0.480249F, 0.882476F, 1.105804F, 0.902856F, 0.684850F, 0.904419F, 1.682113F, 0.909384F, 2.787801F, 0.916558F, 7.500981F, 0.918444F, 0.950341F, 0.919721F, 1.296319F, 0.940272F, 4.682978F, 0.940273F, 1.991736F, 0.950291F, 3.507281F, 0.957455F, 1.116284F, 0.957723F, 0.793034F, 0.958217F, 1.497824F, 0.962628F, 2.514156F, 0.968507F, 0.588605F, 0.974739F, 0.339933F, 0.991738F, 1.750201F, 0.997210F, 0.936131F, 1.002422F, 1.250008F, 1.006040F, 2.167232F, 1.008848F, 3.129940F, 1.014404F, 5.842819F, 1.027798F, 4.287319F, 1.039404F, 1.489295F, 1.039628F, 8.947958F, 1.043214F, 0.765733F, 1.045089F, 2.537806F, 1.058994F, 1.031496F, 1.060415F, 0.478612F, 1.072132F, 12.8F, 1.074778F, 1.910049F, 1.076570F, 15.9999F, 1.107853F, 3.843067F, 1.110673F, 1.228576F, 1.110969F, 2.758471F, 1.140058F, 1.603077F, 1.155384F, 0.668935F, 1.176229F, 6.717108F, 1.179008F, 2.011940F, 1.187735F, 0.963552F, 1.199569F, 4.891432F, 1.206311F, 3.316329F, 1.215323F, 2.507536F, 1.223150F, 1.387102F, 1.296012F, 9.684225F }; /* * 1/4 resolution interpolation filter (-3 dB at 0.791*fs/2) */ const Float32 E_ROM_inter4_1[UP_SAMP * L_INTERPOL1 + 1] = { /* cut-off frequency at 0.9*fs/2 */ 0.900000F, 0.818959F, 0.604850F, 0.331379F, 0.083958F, -0.075795F, -0.130717F, -0.105685F, -0.046774F, 0.004467F, 0.027789F, 0.025642F, 0.012571F, 0.001927F, -0.001571F, -0.000753F, 0.000000f }; const Word16 E_ROM_inter4_2[UP_SAMP * 2 * L_INTERPOL2] = { 0, 1, 2, 1, -2, -7, -10, -7, 4, 19, 28, 22, -2, -33, -55, -49, -10, 47, 91, 92, 38, -52, -133, -153, -88, 43, 175, 231, 165, -9, -209, -325, -275, -60, 226, 431, 424, 175, -213, -544, -619, -355, 153, 656, 871, 626, -16, -762, -1207, -1044, -249, 853, 1699, 1749, 780, -923, -2598, -3267, -2147, 968, 5531, 10359, 14031, 15401, 14031, 10359, 5531, 968, -2147, -3267, -2598, -923, 780, 1749, 1699, 853, -249, -1044, -1207, -762, -16, 626, 871, 656, 153, -355, -619, -544, -213, 175, 424, 431, 226, -60, -275, -325, -209, -9, 165, 231, 175, 43, -88, -153, -133, -52, 38, 92, 91, 47, -10, -49, -55, -33, -2, 22, 28, 19, 4, -7, -10, -7, -2, 1, 2, 1, 0, 0 }; /* * High band gain table for 23.85 kbit/s mode * For synthesis of signal at 16kHz with HF extension. */ const Float32 E_ROM_hp_gain[16] = { 0.2212F, 0.2852F, 0.3416F, 0.3954F, 0.4532F, 0.5114F, 0.5691F, 0.6265F, 0.6842F, 0.7450F, 0.8173F, 0.9060F, 1.0236F, 1.1996F, 1.4825F, 1.9976F }; /* * isp and isf tables for initialization */ const Word16 E_ROM_isp[M] = { 32138, 30274, 27246, 23170, 18205, 12540, 6393, 0, -6393, -12540, -18205, -23170, -27246, -30274, -32138, 1475 }; const Float32 E_ROM_isf[M] = { 400.0, 800.0, 1200.0, 1600.0, 2000.0, 2400.0, 2800.0, 3200.0, 3600.0, 4000.0, 4400.0, 4800.0, 5200.0, 5600.0, 6000.0, 1500.0 }; /* * Table of lag_window for autocorrelation. * noise floor = 1.0001 = (0.9999 on r[1] ..r[16]) * Bandwidth expansion = 60 Hz * Sampling frequency = 12800 Hz */ const Float32 E_ROM_lag_window[M] = { /*1.00000000 (not stored)*/ 0.99946642F, 0.99816680F, 0.99600452F, 0.99298513F, 0.98911655F, 0.98440880F, 0.97887397F, 0.97252619F, 0.96538186F, 0.95745903F, 0.94877797F, 0.93936038F, 0.92922986F, 0.91841155F, 0.90693212F, 0.89481968F }; /* * means of ISFs */ const Word16 E_ROM_mean_isf[ORDER] = { 738, 1326, 2336, 3578, 4596, 5662, 6711, 7730, 8750, 9753, 10705, 11728, 12833, 13971, 15043, 4037 }; const Float32 E_ROM_f_mean_isf[ORDER] = { 288.411774F, 518.149414F, 912.352051F, 1397.743652F, 1795.418823F, 2211.536133F, 2621.461182F, 3019.680176F, 3417.989746F, 3809.700928F, 4181.547363F, 4581.064941F, 5012.819824F, 5457.521484F, 5876.145020F, 1576.906494F }; /* ISF mean for comfort noise */ const Float32 E_ROM_mean_isf_noise[16] = { 186.625259F, 429.613403F, 864.525085F, 1276.010254F, 1648.228394F, 2039.998535F, 2420.943115F, 2828.022461F, 3214.584961F, 3575.200195F, 3944.685303F, 4338.971191F, 4743.657227F, 5149.993164F, 5533.081055F, 1485.457031F }; /* * Upsample FIR filter coefficients. * 1/5 resolution interpolation filter (in Q14) * -1.5dB @ 6kHz, -6dB @ 6.4kHz, -10dB @ 6.6kHz, -20dB @ 6.9kHz, -25dB @ 7kHz, -55dB @ 8kHz */ const Word16 E_ROM_fir_up[120] = { -1, -4, -7, -6, 0, 12, 24, 30, 23, 0, -33, -62, -73, -52, 0, 68, 124, 139, 96, 0, -119, -213, -235, -160, 0, 191, 338, 368, 247, 0, -291, -510, -552, -369, 0, 430, 752, 812, 542, 0, -634, -1111, -1204, -809, 0, 963, 1708, 1881, 1288, 0, -1616, -2974, -3432, -2496, 0, 3792, 8219, 12368, 15317, 16384, 15317, 12368, 8219, 3792, 0, -2496, -3432, -2974, -1616, 0, 1288, 1881, 1708, 963, 0, -809, -1204, -1111, -634, 0, 542, 812, 752, 430, 0, -369, -552, -510, -291, 0, 247, 368, 338, 191, 0, -160, -235, -213, -119, 0, 96, 139, 124, 68, 0, -52, -73, -62, -33, 0, 23, 30, 24, 12, 0, -6, -7, -4, -1, 0 }; /* * Downsample FIR filter coefficients (x4/5) */ const Word16 E_ROM_fir_down[120] = { -1, -3, -6, -5, 0, 9, 19, 24, 18, 0, -26, -50, -58, -41, 0, 54, 99, 111, 77, 0, -95, -170, -188, -128, 0, 153, 270, 294, 198, 0, -233, -408, -441, -295, 0, 344, 601, 649, 434, 0, -507, -888, -964, -647, 0, 770, 1366, 1505, 1030, 0, -1293, -2379, -2746, -1997, 0, 3034, 6575, 9894, 12254, 13107, 12254, 9894, 6575, 3034, 0, -1997, -2746, -2379, -1293, 0, 1030, 1505, 1366, 770, 0, -647, -964, -888, -507, 0, 434, 649, 601, 344, 0, -295, -441, -408, -233, 0, 198, 294, 270, 153, 0, -128, -188, -170, -95, 0, 77, 111, 99, 54, 0, -41, -58, -50, -26, 0, 18, 24, 19, 9, 0, -5, -6, -3, -1, 0 }; /* 16-byte align end */ /* weighting of the correlation function in open loop LTP search */ const Float32 E_ROM_corrweight[199]= { 0.32872895427062F, 0.32940279686838F, 0.33008397607000F, 0.33077263774882F, 0.33146893201434F, 0.33217301337469F, 0.33288504090694F, 0.33360517843561F, 0.33433359471985F, 0.33507046364991F, 0.33581596445331F, 0.33657028191132F, 0.33733360658650F, 0.33810613506181F, 0.33888807019203F, 0.33967962136837F, 0.34048100479698F, 0.34129244379225F, 0.34211416908597F, 0.34294641915312F, 0.34378944055574F, 0.34464348830569F, 0.34550882624786F, 0.34638572746505F, 0.34727447470606F, 0.34817536083854F, 0.34908868932841F, 0.35001477474762F, 0.35095394331240F, 0.35190653345404F, 0.35287289642476F, 0.35385339694105F, 0.35484841386753F, 0.35585834094415F, 0.35688358756025F, 0.35792457957894F, 0.35898176021598F, 0.36005559097716F, 0.36114655265930F, 0.36225514641972F, 0.36338189491998F, 0.36452734355021F, 0.36569206174066F, 0.36687664436818F, 0.36808171326584F, 0.36930791884477F, 0.37055594183846F, 0.37182649518049F, 0.37312032602824F, 0.37443821794611F, 0.37578099326358F, 0.37714951562500F, 0.37854469274995F, 0.37996747942529F, 0.38141888075233F, 0.38289995567554F, 0.38441182082240F, 0.38595565468744F, 0.38753270219810F, 0.38914427970450F, 0.39079178044081F, 0.39247668051248F, 0.39420054547049F, 0.39596503754272F, 0.39777192360213F, 0.39962308396279F, 0.40152052210853F, 0.40346637547426F, 0.40546292741845F, 0.40751262054712F, 0.40961807157476F, 0.41178208793838F, 0.41400768641652F, 0.41629811404829F, 0.41865687169900F, 0.42108774068111F, 0.42359481291430F, 0.42618252519967F, 0.42885569829436F, 0.43161958160963F, 0.43447990452326F, 0.43744293550645F, 0.44051555052483F, 0.44370531250000F, 0.44702056402976F, 0.45047053608887F, 0.45406547610287F, 0.45781679965235F, 0.46173727119116F, 0.46584122063850F, 0.47014480466210F, 0.47466632408736F, 0.47942661240838F, 0.48444951522162F, 0.49000000000000F, 0.50000000000000F, 0.50000000000000F, 0.50000000000000F, 0.50000000000000F, 0.50000000000000F, 0.50000000000000F, 0.50000000000000F, 0.49000000000000F, 0.48444951522162F, 0.47942661240838F, 0.47466632408736F, 0.47014480466210F, 0.46584122063850F, 0.46173727119116F, 0.45781679965235F, 0.45406547610287F, 0.45047053608887F, 0.44702056402976F, 0.44370531250000F, 0.44051555052483F, 0.43744293550645F, 0.43447990452326F, 0.43161958160963F, 0.42885569829436F, 0.42618252519967F, 0.42359481291430F, 0.42108774068111F, 0.41865687169900F, 0.41629811404829F, 0.41400768641652F, 0.41178208793838F, 0.40961807157476F, 0.40751262054712F, 0.40546292741845F, 0.40346637547426F, 0.40152052210853F, 0.39962308396279F, 0.39777192360213F, 0.39596503754272F, 0.39420054547049F, 0.39247668051248F, 0.39079178044081F, 0.38914427970450F, 0.38753270219810F, 0.38595565468744F, 0.38441182082240F, 0.38289995567554F, 0.38141888075233F, 0.37996747942529F, 0.37854469274995F, 0.37714951562500F, 0.37578099326358F, 0.37443821794611F, 0.37312032602824F, 0.37182649518049F, 0.37055594183846F, 0.36930791884477F, 0.36808171326584F, 0.36687664436818F, 0.36569206174066F, 0.36452734355021F, 0.36338189491998F, 0.36225514641972F, 0.36114655265930F, 0.36005559097716F, 0.35898176021598F, 0.35792457957894F, 0.35688358756025F, 0.35585834094415F, 0.35484841386753F, 0.35385339694105F, 0.35287289642476F, 0.35190653345404F, 0.35095394331240F, 0.35001477474762F, 0.34908868932841F, 0.34817536083854F, 0.34727447470606F, 0.34638572746505F, 0.34550882624786F, 0.34464348830569F, 0.34378944055574F, 0.34294641915312F, 0.34211416908597F, 0.34129244379225F, 0.34048100479698F, 0.33967962136837F, 0.33888807019203F, 0.33810613506181F, 0.33733360658650F, 0.33657028191132F, 0.33581596445331F, 0.33507046364991F, 0.33433359471985F, 0.33360517843561F, 0.33288504090694F, 0.33217301337469F, 0.33146893201434F, 0.33077263774882F, 0.33008397607000F, 0.32940279686838F, 0.32872895427062F, 0.32806230648432F, 0.32740271564992F }; const UWord8 E_ROM_tipos[36] = { 0, 1, 2, 3, /* starting point &ipos[0], 1st iter */ 1, 2, 3, 0, /* starting point &ipos[4], 2nd iter */ 2, 3, 0, 1, /* starting point &ipos[8], 3rd iter */ 3, 0, 1, 2, /* starting point &ipos[12], 4th iter */ 0, 1, 2, 3, 1, 2, 3, 0, 2, 3, 0, 1, 3, 0, 1, 2, 0, 1, 2, 3 /* end point for 24 pulses &ipos[35], 4th iter */ }; /* * Chebyshev polynomial grid points * * grid[0] = 1.0; * grid[grid_points + 1] = -1.0; * for (i = 1; i < grid_points; i++) * grid[i] = cos((6.283185307*i)/(2.0*grid_points)); * */ const Float32 E_ROM_grid[101] = { 1.00000F, 0.999507F, 0.998027F, 0.995562F, 0.992115F, 0.987688F, 0.982287F, 0.975917F, 0.968583F, 0.960294F, 0.951057F, 0.940881F, 0.929776F, 0.917755F, 0.904827F, 0.891007F, 0.876307F, 0.860742F, 0.844328F, 0.827081F, 0.809017F, 0.790155F, 0.770513F, 0.750111F, 0.728969F, 0.707107F, 0.684547F, 0.661312F, 0.637424F, 0.612907F, 0.587785F, 0.562083F, 0.535827F, 0.509041F, 0.481754F, 0.453990F, 0.425779F, 0.397148F, 0.368124F, 0.338738F, 0.309017F, 0.278991F, 0.248690F, 0.218143F, 0.187381F, 0.156434F, 0.125333F, 0.0941082F, 0.0627904F, 0.0314107F, -8.09643e-008F, -0.0314108F, -0.0627906F, -0.0941084F, -0.125333F, -0.156435F, -0.187381F, -0.218143F, -0.248690F, -0.278991F, -0.309017F, -0.338738F, -0.368125F, -0.397148F, -0.425779F, -0.453991F, -0.481754F, -0.509041F, -0.535827F, -0.562083F, -0.587785F, -0.612907F, -0.637424F, -0.661312F, -0.684547F, -0.707107F, -0.728969F, -0.750111F, -0.770513F, -0.790155F, -0.809017F, -0.827081F, -0.844328F, -0.860742F, -0.876307F, -0.891007F, -0.904827F, -0.917755F, -0.929777F, -0.940881F, -0.951057F, -0.960294F, -0.968583F, -0.975917F, -0.982287F, -0.987688F, -0.992115F, -0.995562F, -0.998027F, -0.999507F, -1.00000F }; /* * Bandpass FIR filter coefficients for higher band generation (gain=4.0) */ const Float32 E_ROM_fir_6k_7k[31] = { -0.001005F, 0.001428F, 0.000965F, -0.000863F, -0.011296F, 0.034231F, -0.043397F, -0.000000F, 0.115906F, -0.271028F, 0.376868F, -0.335243F, 0.108276F, 0.237003F, -0.549363F, 0.675000F, -0.549363F, 0.237003F, 0.108276F, -0.335243F, 0.376868F, -0.271028F, 0.115906F, -0.000000F, -0.043397F, 0.034231F, -0.011296F, -0.000863F, 0.000965F, 0.001428F, -0.001005F }; /* * LTP gain & fixed codebook gain consealement */ /* attenuation factors for codebook gain in lost frames */ const Word16 E_ROM_cdown_unusable[7] = {32767, 16384, 8192, 8192, 8192, 4915, 3277}; const Word16 E_ROM_cdown_usable[7] = {32767, 32113, 32113, 32113, 32113, 32113, 22938}; /* attenuation factors for adaptive codebook gain in lost frames */ const Word16 E_ROM_pdown_unusable[7] = {32767, 31130, 29491, 24576, 7537, 1638, 328}; /* attenuation factors for adaptive codebook gain in bad frames */ const Word16 E_ROM_pdown_usable[7] = {32767, 32113, 31457, 24576, 7537, 1638, 328}; /* FIR filter coefficients (interpol) */ const Float32 E_ROM_fir_ipol[61] = { 0.999980F, 0.934870F, 0.754870F, 0.501632F, 0.231474F, -0.000000F, -0.152337F, -0.209502F, -0.181536F, -0.098630F, 0.000000F, 0.078607F, 0.114831F, 0.104252F, 0.058760F, -0.000000F, -0.049374F, -0.073516F, -0.067781F, -0.038681F, 0.000000F, 0.033082F, 0.049550F, 0.045881F, 0.026258F, -0.000000F, -0.022499F, -0.033672F, -0.031122F, -0.017761F, 0.000000F, 0.015088F, 0.022452F, 0.020614F, 0.011674F, -0.000000F, -0.009736F, -0.014331F, -0.012999F, -0.007264F, 0.000000F, 0.005872F, 0.008488F, 0.007546F, 0.004123F, -0.000000F, -0.003163F, -0.004431F, -0.003804F, -0.001997F, 0.000000F, 0.001388F, 0.001829F, 0.001459F, 0.000702F, -0.000000F, -0.000383F, -0.000424F, -0.000267F, -0.000091F, 0.000000F }; /* * LPC interpolation coef */ const Float32 E_ROM_f_interpol_frac[NB_SUBFR] = {0.45F, 0.8F, 0.96F, 1.0F}; /* * LPC interpolation coef in Q15 */ const Word16 E_ROM_interpol_frac[NB_SUBFR] = {14746, 26214, 31457, 32767}; /* * Math tables */ /* table used in power of two computation */ const Word16 E_ROM_pow2[33] = { 16384, 16743, 17109, 17484, 17867, 18258, 18658, 19066, 19484, 19911, 20347, 20792, 21247, 21713, 22188, 22674, 23170, 23678, 24196, 24726, 25268, 25821, 26386, 26964, 27554, 28158, 28774, 29405, 30048, 30706, 31379, 32066, 32767 }; /* table used in inverse square root computation */ const Word16 E_ROM_isqrt[49] = { 32767, 31790, 30894, 30070, 29309, 28602, 27945, 27330, 26755, 26214, 25705, 25225, 24770, 24339, 23930, 23541, 23170, 22817, 22479, 22155, 21845, 21548, 21263, 20988, 20724, 20470, 20225, 19988, 19760, 19539, 19326, 19119, 18919, 18725, 18536, 18354, 18176, 18004, 17837, 17674, 17515, 17361, 17211, 17064, 16921, 16782, 16646, 16514, 16384 }; /* table used in logarithm computation */ const Word16 E_ROM_log2[33] = { 0, 1455, 2866, 4236, 5568, 6863, 8124, 9352, 10549, 11716, 12855, 13967, 15054, 16117, 17156, 18172, 19167, 20142, 21097, 22033, 22951, 23852, 24735, 25603, 26455, 27291, 28113, 28922, 29716, 30497, 31266, 32023, 32767 }; /* table of cos(x) in Q15 */ const Word16 E_ROM_cos[129] = { 32767, 32758, 32729, 32679, 32610, 32522, 32413, 32286, 32138, 31972, 31786, 31581, 31357, 31114, 30853, 30572, 30274, 29957, 29622, 29269, 28899, 28511, 28106, 27684, 27246, 26791, 26320, 25833, 25330, 24812, 24279, 23732, 23170, 22595, 22006, 21403, 20788, 20160, 19520, 18868, 18205, 17531, 16846, 16151, 15447, 14733, 14010, 13279, 12540, 11793, 11039, 10279, 9512, 8740, 7962, 7180, 6393, 5602, 4808, 4011, 3212, 2411, 1608, 804, 0, -804, -1608, -2411, -3212, -4011, -4808, -5602, -6393, -7180, -7962, -8740, -9512, -10279, -11039, -11793, -12540, -13279, -14010, -14733, -15447, -16151, -16846, -17531, -18205, -18868, -19520, -20160, -20788, -21403, -22006, -22595, -23170, -23732, -24279, -24812, -25330, -25833, -26320, -26791, -27246, -27684, -28106, -28511, -28899, -29269, -29622, -29957, -30274, -30572, -30853, -31114, -31357, -31581, -31786, -31972, -32138, -32286, -32413, -32522, -32610, -32679, -32729, -32758, -32768 }; /* * excitation energy adjustment depending on speech coder mode used */ const Float32 E_ROM_en_adjust[9] = { -1.7969F, /* mode0 = 7k : -5.4dB */ -1.3984F, /* mode1 = 9k : -4.2dB */ -1.1016F, /* mode2 = 12k : -3.3dB */ -1.0000F, /* mode3 = 14k : -3.0dB */ -0.9531F, /* mode4 = 16k : -2.85dB */ -0.8984F, /* mode5 = 18k : -2.7dB */ -0.8984F, /* mode6 = 20k : -2.7dB */ -0.8984F, /* mode7 = 23k : -2.7dB */ -0.8984F /* mode8 = 24k : -2.7dB */ }; h323plus/plugins/audio/G.722.2/AMR-WB/enc_if.c0000644000175000017500000004414711341106231017046 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #include #include #include "typedef.h" #include "enc_if.h" #include "if_rom.h" #include "enc.h" #define L_FRAME16k 320 /* Frame size at 16kHz */ #define EHF_MASK (Word32)0x0008 /* homing frame pattern */ #define MODE_7k 0 #define MODE_9k 1 #define MODE_12k 2 #define MODE_14k 3 #define MODE_16k 4 #define MODE_18k 5 #define MODE_20k 6 #define MODE_23k 7 #define MODE_24k 8 #define MRDTX 9 #define MRNO_DATA 15 /* number of bits */ #define HEADER_SIZE 6 /* real size + 1 */ #define T_NBBITS_7k (NBBITS_7k + HEADER_SIZE) #define T_NBBITS_9k (NBBITS_9k + HEADER_SIZE) #define T_NBBITS_12k (NBBITS_12k + HEADER_SIZE) #define T_NBBITS_14k (NBBITS_14k + HEADER_SIZE) #define T_NBBITS_16k (NBBITS_16k + HEADER_SIZE) #define T_NBBITS_18k (NBBITS_18k + HEADER_SIZE) #define T_NBBITS_20k (NBBITS_20k + HEADER_SIZE) #define T_NBBITS_23k (NBBITS_23k + HEADER_SIZE) #define T_NBBITS_24k (NBBITS_24k + HEADER_SIZE) #define T_NBBITS_SID (NBBITS_SID + HEADER_SIZE) typedef struct { Word16 sid_update_counter; /* Number of frames since last SID */ Word16 sid_handover_debt; /* Number of extra SID_UPD frames to schedule */ Word16 prev_ft; /* Type of the previous frame */ void *encoder_state; /* Points encoder state structure */ } WB_enc_if_state; extern const Word16 mode_7k[]; extern const Word16 mode_9k[]; extern const Word16 mode_12k[]; extern const Word16 mode_14k[]; extern const Word16 mode_16k[]; extern const Word16 mode_18k[]; extern const Word16 mode_20k[]; extern const Word16 mode_23k[]; extern const Word16 mode_24k[]; extern const Word16 mode_DTX[]; extern const UWord8 block_size[]; extern const Word16 nb_of_param[]; extern const Word16 dfh_M7k[]; extern const Word16 dfh_M9k[]; extern const Word16 dfh_M12k[]; extern const Word16 dfh_M14k[]; extern const Word16 dfh_M16k[]; extern const Word16 dfh_M18k[]; extern const Word16 dfh_M20k[]; extern const Word16 dfh_M23k[]; extern const Word16 dfh_M24k[]; /* overall table with the parameters of the decoder homing frames for all modes */ const Word16 *dhf[10]; /* * E_IF_homing_frame_test * * * Parameters: * input_frame I: input speech frame * * Function: * Check 320 input samples for matching EHF_MASK * * Returns: * If homing frame */ Word16 E_IF_homing_frame_test(Word16 input_frame[]) { Word32 i, j = 0; for (i = 0; i < L_FRAME16k; i++) { j = input_frame[i] ^ EHF_MASK; if (j) { break; } } return (Word16) (!j); } /* * E_IF_homing_coding * * * Parameters: * parms I/O: pointer to parameter vector * mode I: speech mode * * Function: * Copy decoder homing frame from memory to parameter vector * * Returns: * void */ void E_IF_homing_coding(Word16 *parms, Word16 mode) { memcpy(parms, dhf[mode], nb_of_param[mode] * sizeof(Word16)); } #ifdef IF2 /* * E_IF_if2_conversion * * * Parameters: * mode I: Mode * param I: encoder output * stream O: packed octets (TS26.201) * frame_type I: TX frame type * dtx I: speech mode for mode MRDTX * * Function: * Packing one frame of encoded parameters to AMR-WB IF2 * * Returns: * number of octets */ static int E_IF_if2_conversion(Word16 mode, Word16 *param, UWord8 *stream, Word16 frame_type, Word16 speech_mode) { Word32 j = 0; Word16 const *mask; memset(stream, 0, block_size[mode]); switch(mode) { case MRNO_DATA: *stream = 0xF8; j = 8; break; case MODE_7k: mask = mode_7k; *stream = 0x2; /* frame_type = 0, fqi = 1 */ for (j = HEADER_SIZE; j < T_NBBITS_7k; j++) { if (param[*mask] & *(mask + 1)) { *stream += 0x1; } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } while (j % 8) { *stream <<= 1; j++; } break; case MODE_9k: mask = mode_9k; *stream = 0x6; /* frame_type = 1, fqi = 1 */ for (j = HEADER_SIZE; j < T_NBBITS_9k; j++) { if (param[*mask] & *(mask + 1)) { *stream += 0x1; } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } while (j % 8) { *stream <<= 1; j++; } break; case MODE_12k: mask = mode_12k; *stream = 0xA; /* frame_type = 2, fqi = 1 */ for (j = HEADER_SIZE; j < T_NBBITS_12k; j++) { if (param[*mask] & *(mask + 1)) { *stream += 0x1; } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } while (j % 8) { *stream <<= 1; j++; } break; case MODE_14k: mask = mode_14k; *stream = 0xE; /* frame_type = 3, fqi = 1 */ for ( j = HEADER_SIZE; j < T_NBBITS_14k; j++ ) { if (param[*mask] & *(mask + 1)) { *stream += 0x1; } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } while (j % 8) { *stream <<= 1; j++; } break; case MODE_16k: mask = mode_16k; *stream = 0x12; /* frame_type = 4, fqi = 1 */ for (j = HEADER_SIZE; j < T_NBBITS_16k; j++) { if (param[*mask] & *(mask + 1)) { *stream += 0x1; } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } while (j % 8) { *stream <<= 1; j++; } break; case MODE_18k: mask = mode_18k; *stream = 0x16; /* frame_type = 5, fqi = 1 */ for (j = HEADER_SIZE; j < T_NBBITS_18k; j++) { if (param[*mask] & *(mask + 1)) { *stream += 0x1; } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } while (j % 8) { *stream <<= 1; j++; } break; case MODE_20k: mask = mode_20k; *stream = 0x1A; /* frame_type = 6, fqi = 1 */ for (j = HEADER_SIZE; j < T_NBBITS_20k; j++) { if (param[*mask] & *( mask + 1)) { *stream += 0x1; } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } while (j % 8) { *stream <<= 1; j++; } break; case MODE_23k: mask = mode_23k; *stream = 0x1E; /* frame_type = 7, fqi = 1 */ for (j = HEADER_SIZE; j < T_NBBITS_23k; j++) { if (param[*mask] & *( mask + 1)) { *stream += 0x1; } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } while (j % 8) { *stream <<= 1; j++; } break; case MODE_24k: mask = mode_24k; *stream = 0x22; /* frame_type = 8, fqi = 1 */ for (j = HEADER_SIZE; j < T_NBBITS_24k; j++) { if (param[*mask] & *( mask + 1)) { *stream += 0x1; } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } while (j % 8) { *stream <<= 1; j++; } break; case MRDTX: mask = mode_DTX; *stream = 0x26; /* frame_type = 9, fqi = 1 */ for ( j = HEADER_SIZE; j < T_NBBITS_SID; j++ ) { if (param[*mask] & *(mask + 1)) { *stream += 0x1; } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } /* sid type */ if (frame_type == TX_SID_UPDATE) { /* sid update */ *stream += 0x1; } /* speech mode indicator */ *stream <<= 4; *stream = (UWord8)(*stream + speech_mode); /* bit stuffing */ *stream <<= 3; j = 48; break; default: break; } return j/8; } #else /* * E_IF_mms_conversion * * * Parameters: * mode I: Mode * param I: encoder output * stream O: packed octets (RFC 3267, section 5.3) * frame_type I: TX frame type * dtx I: speech mode for mode MRDTX * * Function: * Packing one frame of encoded parameters to AMR-WB MMS format * * Returns: * number of octets */ static int E_IF_mms_conversion(Word16 mode, Word16 *param, UWord8 *stream, Word16 frame_type, Word16 speech_mode) { Word32 j = 0; Word16 const *mask; memset(stream, 0, block_size[mode]); switch(mode) { case MRNO_DATA: *stream = 0x7C; j = 0; break; case MODE_7k: mask = mode_7k; *stream = 0x04; /* frame_type = 0, fqi = 1 */ stream++; for (j = 1; j <= NBBITS_7k; j++) { if (param[*mask] & *(mask + 1)) { *stream += 0x1; } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } while (j % 8) { *stream <<= 1; j++; } break; case MODE_9k: mask = mode_9k; *stream = 0x0C; /* frame_type = 1, fqi = 1 */ stream++; for (j = 1; j <= NBBITS_9k; j++) { if (param[*mask] & *(mask + 1)) { *stream += 0x1; } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } while (j % 8) { *stream <<= 1; j++; } break; case MODE_12k: mask = mode_12k; *stream = 0x14; /* frame_type = 2, fqi = 1 */ stream++; for (j = 1; j <= NBBITS_12k; j++) { if (param[*mask] & *(mask + 1)) { *stream += 0x1; } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } while (j % 8) { *stream <<= 1; j++; } break; case MODE_14k: mask = mode_14k; *stream = 0x1C; /* frame_type = 3, fqi = 1 */ stream++; for ( j = 1; j <= NBBITS_14k; j++ ) { if (param[*mask] & *(mask + 1)) { *stream += 0x1; } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } while (j % 8) { *stream <<= 1; j++; } break; case MODE_16k: mask = mode_16k; *stream = 0x24; /* frame_type = 4, fqi = 1 */ stream++; for (j = 1; j <= NBBITS_16k; j++) { if (param[*mask] & *(mask + 1)) { *stream += 0x1; } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } while (j % 8) { *stream <<= 1; j++; } break; case MODE_18k: mask = mode_18k; *stream = 0x2C; /* frame_type = 5, fqi = 1 */ stream++; for (j = 1; j <= NBBITS_18k; j++) { if (param[*mask] & *(mask + 1)) { *stream += 0x1; } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } while (j % 8) { *stream <<= 1; j++; } break; case MODE_20k: mask = mode_20k; *stream = 0x34; /* frame_type = 6, fqi = 1 */ stream++; for (j = 1; j <= NBBITS_20k; j++) { if (param[*mask] & *( mask + 1)) { *stream += 0x1; } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } while (j % 8) { *stream <<= 1; j++; } break; case MODE_23k: mask = mode_23k; *stream = 0x3C; /* frame_type = 7, fqi = 1 */ stream++; for (j = 1; j <= NBBITS_23k; j++) { if (param[*mask] & *( mask + 1)) { *stream += 0x1; } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } while (j % 8) { *stream <<= 1; j++; } break; case MODE_24k: mask = mode_24k; *stream = 0x44; /* frame_type = 8, fqi = 1 */ stream++; for (j = 1; j <= NBBITS_24k; j++) { if (param[*mask] & *( mask + 1)) { *stream += 0x1; } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } while (j % 8) { *stream <<= 1; j++; } break; case MRDTX: mask = mode_DTX; *stream = 0x4C; /* frame_type = 9, fqi = 1 */ stream++; for ( j = 1; j <= NBBITS_SID; j++ ) { if (param[*mask] & *(mask + 1)) { *stream += 0x1; } mask += 2; if (j % 8) { *stream <<= 1; } else { stream++; } } /* sid type */ if (frame_type == TX_SID_UPDATE) { /* sid update */ *stream += 0x1; } /* speech mode indicator */ *stream <<= 4; *stream = (UWord8)(*stream + speech_mode); j = 40; break; default: break; } return j/8 + 1; } #endif /* * E_IF_sid_sync_reset * * Parameters: * st O: state structure * * Function: * Initializes state memory * * Returns: * void */ static void E_IF_sid_sync_reset(WB_enc_if_state *st) { st->sid_update_counter = 3; st->sid_handover_debt = 0; st->prev_ft = TX_SPEECH; } /* * E_IF_encode * * * Parameters: * st I: pointer to state structure * mode I: Speech Mode * speech I: Input speech * serial O: Output octet structure IF2 or 16-bit serial stream * dtx I: use DTX * * Function: * Encoding and packing one frame of speech * * Returns: * number of octets */ int E_IF_encode(void *st, Word16 req_mode, Word16 *speech, UWord8 *serial, Word16 dtx) { Word16 prms[NB_PARM_MAX]; Word32 i; Word16 frame_type, mode, reset_flag; WB_enc_if_state *s; s = (WB_enc_if_state *)st; mode = req_mode; /* check for homing frame */ reset_flag = E_IF_homing_frame_test(speech); if (!reset_flag) { for (i = 0; i < L_FRAME16k; i++) /* Delete the 2 LSBs (14-bit input) */ { speech[i] = (Word16) (speech[i] & 0xfffC); } E_MAIN_encode(&mode, speech, prms, s->encoder_state, dtx); if (mode == MRDTX) { s->sid_update_counter--; if (s->prev_ft == TX_SPEECH) { frame_type = TX_SID_FIRST; s->sid_update_counter = 3; } else { if ((s->sid_handover_debt > 0) && (s->sid_update_counter > 2)) { /* * ensure extra updates are * properly delayed after a possible SID_FIRST */ frame_type = TX_SID_UPDATE; s->sid_handover_debt--; } else { if (s->sid_update_counter == 0) { frame_type = TX_SID_UPDATE; s->sid_update_counter = 8; } else { frame_type = TX_NO_DATA; mode = MRNO_DATA; } } } } else { s->sid_update_counter = 8; frame_type = TX_SPEECH; } s->prev_ft = frame_type; } /* perform homing if homing frame was detected at encoder input */ else { E_MAIN_reset(s->encoder_state, 1); E_IF_sid_sync_reset(s); E_IF_homing_coding(prms, mode); frame_type = TX_SPEECH; } #ifdef IF2 return E_IF_if2_conversion(mode, prms, serial, frame_type, req_mode); #else return E_IF_mms_conversion(mode, prms, serial, frame_type, req_mode); #endif } /* * E_IF_init * * Parameters: * none * * Function: * Allocates state memory and initializes state memory * * Returns: * pointer to encoder interface structure */ void *E_IF_init(void) { WB_enc_if_state * s; /* allocate memory */ if ((s = (WB_enc_if_state *)malloc(sizeof(WB_enc_if_state))) == NULL) { return NULL; } E_MAIN_init(&(s->encoder_state)); if (s->encoder_state == NULL) { free(s); return NULL; } E_IF_sid_sync_reset(s); return s; } /* * E_IF_exit * * Parameters: * state I: state structure * * Function: * The memory used for state memory is freed * * Returns: * Void */ void E_IF_exit(void *state) { WB_enc_if_state *s; s = (WB_enc_if_state *)state; /* free memory */ E_MAIN_close(&s->encoder_state); free(s); state = NULL; } h323plus/plugins/audio/G.722.2/AMR-WB/dec.h0000644000175000017500000000077111341106231016356 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #ifndef DEC_H #define DEC_H #include "typedef.h" void D_MAIN_reset(void *st, Word16 reset_all); Word32 D_MAIN_init(void **spd_state); void D_MAIN_close(void **spd_state); Word32 D_MAIN_decode(Word16 mode, Word16 prms[], Word16 synth16k[], void *spd_state, UWord8 frame_type); #endif h323plus/plugins/audio/G.722.2/AMR-WB/dec_acelp.h0000644000175000017500000000102711341106231017515 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #ifndef DEC_ACELP_H #define DEC_ACELP_H #include "typedef.h" void D_ACELP_decode_2t(Word16 index, Word16 code[]); void D_ACELP_decode_4t(Word16 index[], Word16 nbbits, Word16 code[]); void D_ACELP_phase_dispersion(Word16 gain_code, Word16 gain_pit, Word16 code[], Word16 mode, Word16 disp_mem[]); #endif h323plus/plugins/audio/G.722.2/AMR-WB/dec_gain.c0000644000175000017500000004755511341106231017362 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #include #include "typedef.h" #include "dec_util.h" #define L_SUBFR 64 /* Subframe size */ #define L_LTPHIST 5 #define ONE_PER_3 10923 #define ONE_PER_LTPHIST 6554 #define UP_SAMP 4 #define L_INTERPOL2 16 extern const Word16 D_ROM_inter4_2[]; extern const Word16 D_ROM_pdown_unusable[]; extern const Word16 D_ROM_pdown_usable[]; extern const Word16 D_ROM_cdown_unusable[]; extern const Word16 D_ROM_cdown_usable[]; extern const Word16 D_ROM_qua_gain6b[]; extern const Word16 D_ROM_qua_gain7b[]; /* * D_GAIN_init * * Parameters: * mem O: static memory * * Function: * Initialisation of 2nd order quantiser energy predictor. * * Returns: * void */ void D_GAIN_init(Word16 *mem) { /* 4nd order quantizer energy predictor (init to -14.0 in Q10) */ mem[0] = -14336; /* past_qua_en[0] */ mem[1] = -14336; /* past_qua_en[1] */ mem[2] = -14336; /* past_qua_en[2] */ mem[3] = -14336; /* past_qua_en[3] */ /* * mem[4] = 0; past_gain_pit * mem[5] = 0; past_gain_code * mem[6] = 0; prev_gc * mem[7 - 11] = 0; pbuf[i] * mem[12 - 16] = 0; gbuf[i] * mem[17 - 21] = 0; pbuf2[i] */ memset(&mem[4], 0, 18 * sizeof(Word16)); mem[22] = 21845; /* seed */ return; } /* * D_GAIN_median * * Parameters: * buf I: previous gains * * Function: * Median of gains * * Returns: * median of 5 previous gains */ static Word16 D_GAIN_median(Word16 x[]) { Word16 x1, x2, x3, x4, x5; Word16 tmp; x1 = x[ - 2]; x2 = x[ - 1]; x3 = x[0]; x4 = x[1]; x5 = x[2]; if(x2 < x1) { tmp = x1; x1 = x2; x2 = tmp; } if(x3 < x1) { tmp = x1; x1 = x3; x3 = tmp; } if(x4 < x1) { tmp = x1; x1 = x4; x4 = tmp; } if(x5 < x1) { x5 = x1; } if(x3 < x2) { tmp = x2; x2 = x3; x3 = tmp; } if(x4 < x2) { tmp = x2; x2 = x4; x4 = tmp; } if(x5 < x2) { x5 = x2; } if(x4 < x3) { x3 = x4; } if(x5 < x3) { x3 = x5; } return(x3); } /* * D_GAIN_decode * * Parameters: * index I: Quantization index * nbits I: number of bits (6 or 7) * code I: Innovative code vector * L_subfr I: Subframe size * gain_pit O: (Q14) Quantized pitch gain * gain_code O: (Q16) Quantized codebook gain * bfi I: Bad frame indicator * prev_bfi I: Previous BF indicator * state I: State of BFH * unusable_frame I: UF indicator * vad_hist I: number of non-speech frames * mem I/O: static memory (4 words) * * * Function: * Decoding of pitch and codebook gains * * Returns: * void */ void D_GAIN_decode(Word16 index, Word16 nbits, Word16 code[], Word16 *gain_pit, Word32 *gain_cod, Word16 bfi, Word16 prev_bfi, Word16 state, Word16 unusable_frame, Word16 vad_hist, Word16 *mem) { Word32 gcode0, qua_ener, L_tmp; const Word16 * p; Word16 *past_gain_pit, *past_gain_code, *past_qua_en, *prev_gc; Word16 *gbuf, *pbuf, *pbuf2; Word16 i, tmp, exp, frac, exp_gcode0, gcode_inov; Word16 g_code; past_qua_en = mem; past_gain_pit = mem + 4; past_gain_code = mem + 5; prev_gc = mem + 6; pbuf = mem + 7; gbuf = mem + 12; pbuf2 = mem + 17; /* * Find energy of code and compute: * * L_tmp = 1.0 / sqrt(energy of code/ L_subfr) */ L_tmp = D_UTIL_dot_product12(code, code, L_SUBFR, &exp); exp = (Word16)(exp - (18 + 6)); /* exp: -18 (code in Q9), -6 (/L_subfr) */ D_UTIL_normalised_inverse_sqrt(&L_tmp, &exp); if(exp > 3) { L_tmp <<= (exp - 3); } else { L_tmp >>= (3 - exp); } gcode_inov = (Word16)(L_tmp >>16); /* g_code_inov in Q12 */ /* * Case of erasure. */ if(bfi != 0) { tmp = D_GAIN_median(&pbuf[2]); *past_gain_pit = tmp; if(*past_gain_pit > 15565) { *past_gain_pit = 15565; /* 0.95 in Q14 */ } if(unusable_frame != 0) { *gain_pit = (Word16)((D_ROM_pdown_unusable[state] * *past_gain_pit) >> 15); } else { *gain_pit = (Word16)((D_ROM_pdown_usable[state] * *past_gain_pit) >> 15); } tmp = D_GAIN_median(&gbuf[2]); if(vad_hist > 2) { *past_gain_code = tmp; } else { if(unusable_frame != 0) { *past_gain_code = (Word16)((D_ROM_cdown_unusable[state] * tmp) >> 15); } else { *past_gain_code = (Word16)((D_ROM_cdown_usable[state] * tmp) >> 15); } } /* update table of past quantized energies */ L_tmp = past_qua_en[0] + past_qua_en[1]+ past_qua_en[2] + past_qua_en[3]; qua_ener = L_tmp >> 2; qua_ener = qua_ener - 3072; /* -3 in Q10 */ if(qua_ener < - 14336) { qua_ener = -14336; /* -14 in Q10 */ } past_qua_en[3] = past_qua_en[2]; past_qua_en[2] = past_qua_en[1]; past_qua_en[1] = past_qua_en[0]; past_qua_en[0] = (Word16)qua_ener; for(i = 1; i < 5; i++) { gbuf[i - 1] = gbuf[i]; } gbuf[4] = *past_gain_code; for(i = 1; i < 5; i++) { pbuf[i - 1] = pbuf[i]; } pbuf[4] = *past_gain_pit; /* adjust gain according to energy of code */ /* past_gain_code(Q3) * gcode_inov(Q12) => Q16 */ *gain_cod = (*past_gain_code * gcode_inov) << 1; return; } /* * Compute gcode0. * = Sum(i=0,1) pred[i]*past_qua_en[i] + mean_ener - ener_code */ /* MEAN_ENER in Q24 = 0x1e000000 */ /* MA prediction coeff = {0.5, 0.4, 0.3, 0.2} in Q13 */ L_tmp = 0xF000000 + (4096 * past_qua_en[0]); /* Q13*Q10 -> Q24 */ L_tmp = L_tmp + (3277 * past_qua_en[1]); /* Q13*Q10 -> Q24 */ L_tmp = L_tmp + (2458 * past_qua_en[2]); /* Q13*Q10 -> Q24 */ L_tmp = L_tmp + (1638 * past_qua_en[3]); /* Q13*Q10 -> Q24 */ gcode0 = L_tmp >> 15; /* From Q24 to Q8 */ /* * gcode0 = pow(10.0, gcode0/20) * = pow(2, 3.321928*gcode0/20) * = pow(2, 0.166096*gcode0) */ L_tmp = (gcode0 * 5443) >> 7; /* *0.166096 in Q15 -> Q24, From Q24 to Q16 */ D_UTIL_l_extract(L_tmp, &exp_gcode0, &frac); /* Extract exponant of gcode0 */ gcode0 = D_UTIL_pow2(14, frac); /* Put 14 as exponant so that */ /* * output of Pow2() will be: * 16384 < Pow2() <= 32767 */ exp_gcode0 = (Word16)(exp_gcode0 - 14); /* Read the quantized gains */ if(nbits == 6) { p = &D_ROM_qua_gain6b[(index << 1)]; } else { p = &D_ROM_qua_gain7b[(index << 1)]; } *gain_pit = *p++; /* selected pitch gain in Q14 */ g_code = *p++; /* selected code gain in Q11 */ L_tmp = g_code * gcode0; exp_gcode0 += 5; if(exp_gcode0 >= 0) { *gain_cod = L_tmp << exp_gcode0; /* gain of code in Q16 */ } else { *gain_cod = L_tmp >> -exp_gcode0; /* gain of code in Q16 */ } if(prev_bfi == 1) { L_tmp = (*prev_gc * 5120) << 1; /* prev_gc(Q3) * 1.25(Q12) = Q16 */ /* if((*gain_cod > ((*prev_gc) * 1.25)) && (*gain_cod > 100.0)) */ if((*gain_cod > L_tmp) & (*gain_cod > 6553600)) { *gain_cod = L_tmp; } } /* keep past gain code in Q3 for frame erasure (can saturate) */ L_tmp = (*gain_cod + 0x1000) >> 13; if(L_tmp < 32768) { *past_gain_code = (Word16)L_tmp; } else { *past_gain_code = 32767; } *past_gain_pit = *gain_pit; *prev_gc = *past_gain_code; for(i = 1; i < 5; i++) { gbuf[i - 1] = gbuf[i]; } gbuf[4] = *past_gain_code; for(i = 1; i < 5; i++) { pbuf[i - 1] = pbuf[i]; } pbuf[4] = *past_gain_pit; for(i = 1; i < 5; i++) { pbuf2[i - 1] = pbuf2[i]; } pbuf2[4] = *past_gain_pit; /* adjust gain according to energy of code */ D_UTIL_l_extract(*gain_cod, &exp, &frac); L_tmp = D_UTIL_mpy_32_16(exp, frac, gcode_inov); if(L_tmp < 0xFFFFFFF) { *gain_cod = (L_tmp << 3); /* gcode_inov in Q12 */ } else { *gain_cod = 0x7FFFFFFF; } /* * qua_ener = 20*log10(g_code) * = 6.0206*log2(g_code) * = 6.0206*(log2(g_codeQ11) - 11) */ L_tmp = (Word32)(g_code); D_UTIL_log2(L_tmp, &exp, &frac); exp = (Word16)(exp - 11); L_tmp = D_UTIL_mpy_32_16(exp, frac, 24660); /* x 6.0206 in Q12 */ qua_ener = L_tmp >>3; /* result in Q10 */ /* update table of past quantized energies */ past_qua_en[3] = past_qua_en[2]; past_qua_en[2] = past_qua_en[1]; past_qua_en[1] = past_qua_en[0]; past_qua_en[0] = (Word16)qua_ener; return; } /* * D_GAIN_adaptive_control * * Parameters: * sig_in I: postfilter input signal * sig_out I/O: postfilter output signal * l_trm I: subframe size * * Function: * Adaptive gain control is used to compensate for * the gain difference between the non-emphasized excitation and * emphasized excitation. * * Returns: * void */ void D_GAIN_adaptive_control(Word16 *sig_in, Word16 *sig_out, Word16 l_trm) { Word32 s, temp, i, exp; Word32 gain_in, gain_out, g0; /* calculate gain_out with exponent */ temp = sig_out[0] >> 2; s = temp * temp; for(i = 1; i < l_trm; i++) { temp = sig_out[i] >> 2; s += temp * temp; } s <<= 1; if(s == 0) { return; } exp = (D_UTIL_norm_l(s) - 1); if(exp >= 0) { gain_out = ((s << exp) + 0x8000) >> 16; } else { gain_out = ((s >> -exp) + 0x8000) >> 16; } /* calculate gain_in with exponent */ temp = sig_in[0] >> 2; s = temp * temp; for(i = 1; i < l_trm; i++) { temp = sig_in[i] >> 2; s += temp * temp; } s <<= 1; if(s == 0) { g0 = 0; } else { i = D_UTIL_norm_l(s); s = ((s << i) + 0x8000) >> 16; if((s < 32768) & (s > 0)) { gain_in = s; } else { gain_in = 32767; } exp = exp - i; /* * g0 = sqrt(gain_in/gain_out) */ s = (gain_out << 15) / gain_in; s = s << (7 - exp); /* s = gain_out / gain_in */ s = D_UTIL_inverse_sqrt(s); g0 = ((s << 9) + 0x8000) >> 16; } /* sig_out(n) = gain(n) sig_out(n) */ for(i = 0; i < l_trm; i++) { s = (sig_out[i] * g0) >> 13; sig_out[i] = D_UTIL_saturate(s); } return; } /* * D_GAIN_insert_lag * * Parameters: * array I/O: pitch lag history * n I: history size * x I: lag value * * Function: * Insert lag into correct location * * Returns: * void */ static void D_GAIN_insert_lag(Word16 array[], Word32 n, Word16 x) { Word32 i; for(i = n - 1; i >= 0; i--) { if(x < array[i]) { array[i + 1] = array[i]; } else { break; } } array[i + 1] = x; } /* * D_GAIN_sort_lag * * Parameters: * array I/O: pitch lag history * n I: history size * * Function: * Sorting of the lag history * * Returns: * void */ static void D_GAIN_sort_lag(Word16 array[], Word16 n) { Word32 i; for(i = 0; i < n; i++) { D_GAIN_insert_lag(array, i, array[i]); } } /* * D_GAIN_lag_concealment_init * * Parameters: * lag_hist O: pitch lag history * * Function: * Initialise lag history to 64 * * Returns: * void */ void D_GAIN_lag_concealment_init(Word16 lag_hist[]) { Word32 i; for(i = 0; i < L_LTPHIST; i++) { lag_hist[i] = 64; } } /* * D_GAIN_lag_concealment * * Parameters: * gain_hist I: gain history * lag_hist I: pitch lag history * T0 O: current lag * old_T0 I: previous lag * seed I/O: seed for random * unusable_frame I: lost frame * * Function: * Concealment of LTP lags during bad frames * * Returns: * void */ void D_GAIN_lag_concealment(Word16 gain_hist[], Word16 lag_hist[], Word32 *T0, Word16 *old_T0, Word16 *seed, Word16 unusable_frame) { Word32 i, lagDif, tmp, tmp2, D2, meanLag = 0; Word16 lag_hist2[L_LTPHIST] = {0}; Word16 maxLag, minLag, lastLag; Word16 minGain, lastGain, secLastGain; Word16 D; /* * Is lag index such that it can be aplied directly * or does it has to be subtituted */ lastGain = gain_hist[4]; secLastGain = gain_hist[3]; lastLag = lag_hist[0]; /* SMALLEST history lag */ minLag = lag_hist[0]; for(i = 1; i < L_LTPHIST; i++) { if(lag_hist[i] < minLag) { minLag = lag_hist[i]; } } /* BIGGEST history lag */ maxLag = lag_hist[0]; for(i = 1; i < L_LTPHIST; i++) { if(lag_hist[i] > maxLag) { maxLag = lag_hist[i]; } } /* SMALLEST history gain */ minGain = gain_hist[0]; for(i = 1; i < L_LTPHIST; i++) { if(gain_hist[i] < minGain) { minGain = gain_hist[i]; } } /* Difference between MAX and MIN lag */ lagDif = maxLag - minLag; if(unusable_frame != 0) { /* * LTP-lag for RX_SPEECH_LOST * Recognition of the LTP-history */ if((minGain > 8192) & (lagDif < 10)) { *T0 = *old_T0; } else if((lastGain > 8192) && (secLastGain > 8192)) { *T0 = lag_hist[0]; } else { /* * SORT * The sorting of the lag history */ for(i = 0; i < L_LTPHIST; i++) { lag_hist2[i] = lag_hist[i]; } D_GAIN_sort_lag(lag_hist2, 5); /* * Lag is weighted towards bigger lags * and random variation is added */ lagDif = (lag_hist2[4] - lag_hist2[2]); if(lagDif > 40) { lagDif = 40; } D = D_UTIL_random(seed); /* D={-1, ...,1} */ /* D2={-lagDif/2..lagDif/2} */ tmp = lagDif >> 1; D2 = (tmp * D) >> 15; tmp = (lag_hist2[2] + lag_hist2[3]) + lag_hist2[4]; *T0 = ((tmp * ONE_PER_3) >> 15) + D2; } /* New lag is not allowed to be bigger or smaller than last lag values */ if(*T0 > maxLag) { *T0 = maxLag; } if(*T0 < minLag) { *T0 = minLag; } } else { /* * LTP-lag for RX_BAD_FRAME * MEAN lag */ meanLag = 0; for(i = 0; i < L_LTPHIST; i++) { meanLag = meanLag + lag_hist[i]; } meanLag = (meanLag * ONE_PER_LTPHIST) >> 15; tmp = *T0 - maxLag; tmp2 = *T0 - lastLag; if((lagDif < 10) & (*T0 > (minLag - 5)) & (tmp < 5)) { *T0 = *T0; } else if((lastGain > 8192) & (secLastGain > 8192) & ((tmp2 > - 10) & (tmp2 < 10))) { *T0 = *T0; } else if((minGain < 6554) & (lastGain == minGain) & ((*T0 > minLag) & (*T0 < maxLag))) { *T0 = *T0; } else if((lagDif < 70) & (*T0 > minLag) & (*T0 < maxLag)) { *T0 = *T0; } else if((*T0 > meanLag) & (*T0 < maxLag)) { *T0 = *T0; } else { if((minGain > 8192) & (lagDif < 10)) { *T0 = lag_hist[0]; } else if((lastGain > 8192) & (secLastGain > 8192)) { *T0 = lag_hist[0]; } else { /* * SORT * The sorting of the lag history */ for(i = 0; i < L_LTPHIST; i++) { lag_hist2[i] = lag_hist[i]; } D_GAIN_sort_lag(lag_hist2, 5); /* * Lag is weighted towards bigger lags * and random variation is added */ lagDif = lag_hist2[4] - lag_hist2[2]; if(lagDif > 40) { lagDif = 40; } D = D_UTIL_random(seed); /* D={-1,.., 1} */ /* D2={-lagDif/2..lagDif/2} */ tmp = lagDif >> 1; D2 = (tmp * D) >> 15; tmp = (lag_hist2[2] + lag_hist2[3]) + lag_hist2[4]; *T0 = ((tmp * ONE_PER_3) >> 15) + D2; } /* * New lag is not allowed to be bigger or * smaller than last lag values */ if(*T0 > maxLag) { *T0 = maxLag; } if(*T0 < minLag) { *T0 = minLag; } } } } /* * D_GAIN_adaptive_codebook_excitation * * Parameters: * exc I/O: excitation buffer * T0 I: integer pitch lag * frac I: fraction of lag * * Function: * Compute the result of Word32 term prediction with fractional * interpolation of resolution 1/4. * * Returns: * interpolated signal (adaptive codebook excitation) */ void D_GAIN_adaptive_codebook_excitation(Word16 exc[], Word32 T0, Word32 frac) { Word32 i, j, k, sum; Word16 *x; x = &exc[ - T0]; frac = -(frac); if(frac < 0) { frac = (frac + UP_SAMP); x--; } x = x - L_INTERPOL2 + 1; for(j = 0; j < L_SUBFR + 1; j++) { sum = 0L; for(i = 0, k = ((UP_SAMP - 1) - frac); i < 2 * L_INTERPOL2; i++, k += UP_SAMP) { sum += x[i] * D_ROM_inter4_2[k]; } sum = (sum + 0x2000) >> 14; exc[j] = D_UTIL_saturate(sum); x++; } return; } /* * D_GAIN_pitch_sharpening * * Parameters: * x I/O: impulse response (or algebraic code) * pit_lag I: pitch lag * sharp I: (Q15) pitch sharpening factor * * Function: * Performs Pitch sharpening routine for one subframe. * * Returns: * void */ void D_GAIN_pitch_sharpening(Word16 *x, Word32 pit_lag, Word16 sharp) { Word32 i; Word32 tmp; for(i = pit_lag; i < L_SUBFR; i++) { tmp = x[i] << 15; tmp += x[i - pit_lag] * sharp; x[i] = (Word16)((tmp + 0x4000) >> 15); } return; } /* * D_GAIN_find_voice_factor * * Parameters: * exc I: pitch excitation * Q_exc I: exc format * gain_pit I: (Q14) gain of pitch * code I: (Q9) fixed codebook excitation * gain_code I: (Q0) gain of code * L_subfr I: subframe length * * Function: * Find the voicing factor. * * Returns: * (Q15) 1=voice to -1=unvoiced */ Word16 D_GAIN_find_voice_factor(Word16 exc[], Word16 Q_exc, Word16 gain_pit, Word16 code[], Word16 gain_code, Word16 L_subfr) { Word32 tmp, ener1, ener2, i; Word16 exp, exp1, exp2; ener1 = (D_UTIL_dot_product12(exc, exc, L_subfr, &exp1)) >> 16; exp1 = (Word16)(exp1 - (Q_exc + Q_exc)); tmp = (gain_pit * gain_pit) << 1; exp = D_UTIL_norm_l(tmp); tmp = (tmp << exp) >> 16; ener1 = (ener1 * tmp) >> 15; exp1 = (Word16)((exp1 - exp) - 10); /* 10 -> gain_pit Q14 to Q9 */ ener2 = D_UTIL_dot_product12(code, code, L_subfr, &exp2) >> 16; exp = D_UTIL_norm_s(gain_code); tmp = gain_code << exp; tmp = (tmp * tmp) >> 15; ener2 = (ener2 * tmp) >> 15; exp2 = (Word16)(exp2 - (exp << 1)); i = exp1 - exp2; if(i >= 0) { ener1 = ener1 >> 1; ener2 = ener2 >> (i + 1); } else if(i > (-16)) { ener1 = ener1 >> (1 - i); ener2 = ener2 >> 1; } else { ener1 = 0; ener2 = ener2 >> 1; } tmp = ener1 - ener2; ener1 = (ener1 + ener2) + 1; tmp = (tmp << 15) / ener1; return((Word16)tmp); } h323plus/plugins/audio/G.722.2/AMR-WB/enc_main.c0000644000175000017500000012044611341106231017371 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #include #include #include #include #include #include #include "enc_dtx.h" #include "enc_acelp.h" #include "enc_lpc.h" #include "enc_main.h" #include "enc_gain.h" #include "enc_util.h" #ifdef WIN32 #pragma warning( disable : 4310) #endif #include "typedef.h" #define MAX_16 (Word16)0x7fff #define MIN_16 (Word16)0x8000 #define Q_MAX 8 /* scaling max for signal */ #define PREEMPH_FAC 0.68F /* preemphasis factor */ #define GAMMA1 0.92F /* Weighting factor (numerator) */ #define TILT_FAC 0.68F /* tilt factor (denominator) */ #define PIT_MIN 34 /* Minimum pitch lag with resolution 1/4 */ #define PIT_FR2 128 /* Minimum pitch lag with resolution 1/2 */ #define PIT_FR1_9b 160 /* Minimum pitch lag with resolution 1 */ #define PIT_FR1_8b 92 /* Minimum pitch lag with resolution 1 */ #define PIT_MAX 231 /* Maximum pitch lag */ #define L_INTERPOL (16+1) /* Length of filter for interpolation */ #define L_FRAME16k 320 /* Frame size at 16kHz */ #define L_SUBFR 64 /* Subframe size */ #define NB_SUBFR 4 /* Number of subframe per frame */ #define L_FILT 12 /* Delay of up-sampling filter */ #define L_NEXT 64 /* Overhead in LP analysis */ #define MODE_7k 0 /* modes */ #define MODE_9k 1 #define MODE_12k 2 #define MODE_14k 3 #define MODE_16k 4 #define MODE_18k 5 #define MODE_20k 6 #define MODE_23k 7 #define MODE_24k 8 #define MRDTX 9 extern const Word16 E_ROM_isp[]; extern const Word16 E_ROM_isf[]; extern const Word16 E_ROM_interpol_frac[]; /* * E_MAIN_reset * * Parameters: * st I/O: pointer to state structure * reset_all I: perform full reset * * Function: * Initialisation of variables for the coder section. * * * Returns: * void */ void E_MAIN_reset(void *st, Word16 reset_all) { Word32 i; Coder_State *cod_state; cod_state = (Coder_State *) st; memset(cod_state->mem_exc, 0, (PIT_MAX + L_INTERPOL) * sizeof(Word16)); memset(cod_state->mem_isf_q, 0, M * sizeof(Word16)); memset(cod_state->mem_syn, 0, M * sizeof(Float32)); cod_state->mem_w0 = 0.0F; cod_state->mem_tilt_code = 0; cod_state->mem_first_frame = 1; E_GAIN_clip_init(cod_state->mem_gp_clip); cod_state->mem_gc_threshold = 0.0F; if (reset_all != 0) { /* Set static vectors to zero */ memset(cod_state->mem_speech, 0, (L_TOTAL - L_FRAME) * sizeof(Float32)); memset(cod_state->mem_wsp, 0, (PIT_MAX / OPL_DECIM) * sizeof(Float32)); memset(cod_state->mem_decim2, 0, 3 * sizeof(Float32)); /* routines initialization */ memset(cod_state->mem_decim, 0, 2 * L_FILT16k * sizeof(Float32)); memset(cod_state->mem_sig_in, 0, 4 * sizeof(Float32)); E_ACELP_Gain2_Q_init(cod_state->mem_gain_q); memset(cod_state->mem_hf_wsp, 0, 8 * sizeof(Float32)); /* isp initialization */ for (i = 0; i < M - 1; i++) { cod_state->mem_isp[i] = (Float32)cos(3.141592654 * (Float32)(i + 1) / (Float32)M); } cod_state->mem_isp[M - 1] = 0.045F; memcpy(cod_state->mem_isp_q, E_ROM_isp, M * sizeof(Word16)); /* variable initialization */ cod_state->mem_preemph = 0.0F; cod_state->mem_wsp_df = 0.0F; cod_state->mem_q = Q_MAX; cod_state->mem_subfr_q[3] = Q_MAX; cod_state->mem_subfr_q[2] = Q_MAX; cod_state->mem_subfr_q[1] = Q_MAX; cod_state->mem_subfr_q[0] = Q_MAX; cod_state->mem_ada_w = 0.0F; cod_state->mem_ol_gain = 0.0F; cod_state->mem_ol_wght_flg = 0; for (i = 0; i < 5; i++) { cod_state->mem_ol_lag[i] = 40; } cod_state->mem_T0_med = 40; memset(cod_state->mem_hp_wsp, 0, ( ( L_FRAME / 2 ) / OPL_DECIM + ( PIT_MAX / OPL_DECIM ) ) * sizeof(Float32) ); memset(cod_state->mem_syn_hf, 0, M * sizeof(Float32)); memset(cod_state->mem_syn2, 0, M * sizeof(Float32)); memset(cod_state->mem_hp400, 0, 4 * sizeof(Float32)); memset(cod_state->mem_sig_out, 0, 4 * sizeof(Float32)); memset(cod_state->mem_hf, 0, 2 * L_FILT16k * sizeof(Float32)); memset(cod_state->mem_hf2, 0, 2 * L_FILT16k * sizeof(Float32)); memset(cod_state->mem_hf3, 0, 2 * L_FILT16k * sizeof(Float32)); memcpy(cod_state->mem_isf, E_ROM_isf, M * sizeof(Float32)); cod_state->mem_deemph = 0.0F; cod_state->mem_seed = 21845; cod_state->mem_gain_alpha = 1.0F; cod_state->mem_vad_hist = 0; E_DTX_reset(cod_state->dtx_encSt); E_DTX_vad_reset(cod_state->vadSt); } } /* * E_MAIN_init * * Parameters: * spe_state I/O: pointer to state structure * * Function: * Initialisation of variables for the coder section. * Memory allocation. * * Returns: * void */ Word16 E_MAIN_init(void **spe_state) { Coder_State *st; *spe_state = NULL; /* allocate memory */ if ((st = (Coder_State *) malloc(sizeof(Coder_State))) == NULL) { return(-1); } st->vadSt = NULL; st->dtx_encSt = NULL; E_DTX_init(&(st->dtx_encSt)); E_DTX_vad_init(&(st->vadSt)); E_MAIN_reset((void *) st, 1); *spe_state = (void*)st; return(0); } /* * E_MAIN_close * * * Parameters: * spe_state I: pointer to state structure * * Function: * Free coder memory. * * * Returns: * void */ void E_MAIN_close(void **spe_state) { E_DTX_exit(&( ( (Coder_State *)(*spe_state) )->dtx_encSt)); E_DTX_vad_exit(&( ( (Coder_State *) (*spe_state) )->vadSt)); free(*spe_state); return; } /* * E_MAIN_parm_store * * Parameters: * value I: parameter value * prms O: output parameters * * Function: * Store parameter values * * Returns: * void */ static void E_MAIN_parm_store(Word32 value, Word16 **prms) { **prms = (Word16)value; (*prms)++; return; } /* * E_MAIN_encode * * Parameters: * mode I: used mode * input_sp I: 320 new speech samples (at 16 kHz) * prms O: output parameters * spe_state B: state structure * allow_dtx I: DTX ON/OFF * * Function: * Main coder routine. * * Returns: * void */ Word16 E_MAIN_encode(Word16 * mode, Word16 speech16k[], Word16 prms[], void *spe_state, Word16 allow_dtx) { /* Float32 */ Float32 f_speech16k[L_FRAME16k]; /* Speech vector */ Float32 f_old_exc[(L_FRAME + 1) + PIT_MAX + L_INTERPOL]; /* Excitation vector */ Float32 f_exc2[L_FRAME]; /* excitation vector */ Float32 error[M + L_SUBFR]; /* error of quantization */ Float32 A[NB_SUBFR * (M + 1)]; /* A(z) unquantized for the 4 subframes */ Float32 Aq[NB_SUBFR * (M + 1)]; /* A(z) quantized for the 4 subframes */ Float32 xn[L_SUBFR]; /* Target vector for pitch search */ Float32 xn2[L_SUBFR]; /* Target vector for codebook search */ Float32 dn[L_SUBFR]; /* Correlation between xn2 and h1 */ Float32 cn[L_SUBFR]; /* Target vector in residual domain */ Float32 h1[L_SUBFR]; /* Impulse response vector */ Float32 f_code[L_SUBFR]; /* Fixed codebook excitation */ Float32 y1[L_SUBFR]; /* Filtered adaptive excitation */ Float32 y2[L_SUBFR]; /* Filtered adaptive excitation */ Float32 synth[L_SUBFR]; /* 12.8kHz synthesis vector */ Float32 r[M + 1]; /* Autocorrelations of windowed speech */ Float32 Ap[M + 1]; /* A(z) with spectral expansion */ Float32 ispnew[M]; /* immittance spectral pairs at 4nd sfr */ Float32 isf[M]; /* ISF (frequency domain) at 4nd sfr */ Float32 g_coeff[5], g_coeff2[2]; /* Correlations */ Float32 gain_pit; Float32 f_tmp, gain1, gain2; Float32 stab_fac = 0.0F, fac; Float32 *new_speech, *speech; /* Speech vector */ Float32 *wsp; /* Weighted speech vector */ Float32 *f_exc; /* Excitation vector */ Float32 *p_A, *p_Aq; /* ptr to A(z) for the 4 subframes */ Float32 *f_pt_tmp; /* Word32 */ Word32 indice[8]; /* quantization indices */ Word32 vad_flag, clip_gain; Word32 T_op, T_op2, T0, T0_frac; Word32 T0_min, T0_max; Word32 voice_fac, Q_new = 0; Word32 L_gain_code, l_tmp; Word32 i, i_subfr, pit_flag; /* Word16 */ Word16 exc2[L_FRAME]; /* excitation vector */ Word16 s_Aq[NB_SUBFR * (M + 1)]; /* A(z) quantized for the 4 subframes */ Word16 s_code[L_SUBFR]; /* Fixed codebook excitation */ Word16 ispnew_q[M]; /* quantized ISPs at 4nd subframe */ Word16 isfq[M]; /* quantized ISPs */ Word16 select, codec_mode; Word16 index; Word16 s_gain_pit, gain_code; Word16 s_tmp, s_max; Word16 corr_gain; Word16 *exc; /* Excitation vector */ /* Other */ Coder_State *st; /* Coder states */ st = (Coder_State *)spe_state; codec_mode = *mode; /* * Initialize pointers to speech vector. * * * |-------|-------|-------|-------|-------|-------| * past sp sf1 sf2 sf3 sf4 L_NEXT * <------- Total speech buffer (L_TOTAL) ------> * old_speech * <------- LPC analysis window (L_WINDOW) ------> * <-- present frame (L_FRAME) ----> * | <----- new speech (L_FRAME) ----> * | | * speech | * new_speech */ new_speech = st->mem_speech + L_TOTAL - L_FRAME - L_FILT; /* New speech */ speech = st->mem_speech + L_TOTAL - L_FRAME - L_NEXT; /* Present frame */ exc = st->mem_exc + PIT_MAX + L_INTERPOL; f_exc = f_old_exc + PIT_MAX + L_INTERPOL; wsp = st->mem_wsp + (PIT_MAX / OPL_DECIM); for(i = 0; i < L_FRAME16k; i++) { f_speech16k[i] = (Float32)speech16k[i]; } Q_new = -st->mem_q; for(i = 0; i < (PIT_MAX + L_INTERPOL); i++) { f_old_exc[i] = (Float32)(st->mem_exc[i] * pow(2, Q_new)); } /* * Down sampling signal from 16kHz to 12.8kHz */ E_UTIL_decim_12k8(f_speech16k, L_FRAME16k, new_speech, st->mem_decim); /* decimate with zero-padding to avoid delay of filter */ memcpy(f_code, st->mem_decim, 2 * L_FILT16k * sizeof(Float32)); memset(error, 0, L_FILT16k * sizeof(Float32)); E_UTIL_decim_12k8(error, L_FILT16k, new_speech + L_FRAME, f_code); /* * Perform 50Hz HP filtering of input signal. * Perform fixed preemphasis through 1 - g z^-1 */ E_UTIL_hp50_12k8(new_speech, L_FRAME, st->mem_sig_in); memcpy(f_code, st->mem_sig_in, 4 * sizeof(Float32) ); E_UTIL_hp50_12k8(new_speech + L_FRAME, L_FILT, f_code); E_UTIL_f_preemph(new_speech, PREEMPH_FAC, L_FRAME, &(st->mem_preemph)); /* last L_FILT samples for autocorrelation window */ f_tmp = st->mem_preemph; E_UTIL_f_preemph(new_speech + L_FRAME, PREEMPH_FAC, L_FILT, &f_tmp); /* * Call VAD * Preemphesis scale down signal in low frequency and keep dynamic in HF. * Vad work slightly in futur (new_speech = speech + L_NEXT - L_FILT). */ vad_flag = E_DTX_vad(st->vadSt, new_speech); if (vad_flag == 0) { st->mem_vad_hist = 1; } else { st->mem_vad_hist = 0; } /* DTX processing */ if (allow_dtx) { /* Note that mode may change here */ E_DTX_tx_handler(st->dtx_encSt, vad_flag, mode); } else { E_DTX_reset(st->dtx_encSt); } if(*mode != MRDTX) { E_MAIN_parm_store(vad_flag, &prms); } /* * Perform LPC analysis * -------------------- * - autocorrelation + lag windowing * - Levinson-durbin algorithm to find a[] * - convert a[] to isp[] * - convert isp[] to isf[] for quantization * - quantize and code the isf[] * - convert isf[] to isp[] for interpolation * - find the interpolated isps and convert to a[] for the 4 subframes */ /* LP analysis centered at 3nd subframe */ E_UTIL_autocorr(st->mem_speech, r); E_LPC_lag_wind(r + 1, M); /* Lag windowing */ E_LPC_lev_dur(A, r, M); E_LPC_a_isp_conversion(A, ispnew, st->mem_isp, M); /* From A(z) to isp */ /* Find the interpolated isps and convert to a[] for all subframes */ E_LPC_f_int_isp_find(st->mem_isp, ispnew, A, NB_SUBFR, M); /* update isp memory for the next frame */ memcpy(st->mem_isp, ispnew, M * sizeof(Float32)); /* Convert isps to frequency domain 0..6400 */ E_LPC_isp_isf_conversion(ispnew, isf, M); /* check resonance for pitch clipping algorithm */ E_GAIN_clip_isf_test(isf, st->mem_gp_clip); /* * Perform PITCH_OL analysis * ------------------------- * - Find the residual res[] for the whole speech frame * - Find the weighted input speech wsp[] for the whole speech frame * - Find the 2 open-loop pitch estimate * - Set the range for searching closed-loop pitch in 1st subframe */ p_A = A; for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR) { E_LPC_a_weight(p_A, Ap, GAMMA1, M); E_UTIL_residu(Ap, &speech[i_subfr], &wsp[i_subfr], L_SUBFR); p_A += (M + 1); } E_UTIL_deemph(wsp, TILT_FAC, L_FRAME, &(st->mem_wsp_df)); /* decimation of wsp[] to search pitch in LF and to reduce complexity */ E_GAIN_lp_decim2(wsp, L_FRAME, st->mem_decim2); /* Find open loop pitch lag for whole speech frame */ if (*mode == MODE_7k) { /* Find open loop pitch lag for whole speech frame */ T_op = E_GAIN_open_loop_search(wsp, PIT_MIN / OPL_DECIM, PIT_MAX / OPL_DECIM, L_FRAME / OPL_DECIM, st->mem_T0_med, &(st->mem_ol_gain), st->mem_hf_wsp, st->mem_hp_wsp, st->mem_ol_wght_flg); } else { /* Find open loop pitch lag for first 1/2 frame */ T_op = E_GAIN_open_loop_search(wsp, PIT_MIN / OPL_DECIM, PIT_MAX / OPL_DECIM, (L_FRAME / 2) / OPL_DECIM, st->mem_T0_med, &(st->mem_ol_gain), st->mem_hf_wsp, st->mem_hp_wsp, st->mem_ol_wght_flg); } if (st->mem_ol_gain > 0.6) { st->mem_T0_med = E_GAIN_olag_median(T_op, st->mem_ol_lag); st->mem_ada_w = 1.0F; } else { st->mem_ada_w = st->mem_ada_w * 0.9F; } if (st->mem_ada_w < 0.8) { st->mem_ol_wght_flg = 0; } else { st->mem_ol_wght_flg = 1; } E_DTX_pitch_tone_detection(st->vadSt, st->mem_ol_gain); T_op *= OPL_DECIM; if (*mode != MODE_7k) { /* Find open loop pitch lag for second 1/2 frame */ T_op2 = E_GAIN_open_loop_search(wsp + ((L_FRAME / 2) / OPL_DECIM), PIT_MIN / OPL_DECIM, PIT_MAX / OPL_DECIM, (L_FRAME / 2) / OPL_DECIM, st->mem_T0_med, &st->mem_ol_gain, st->mem_hf_wsp, st->mem_hp_wsp, st->mem_ol_wght_flg); if (st->mem_ol_gain > 0.6) { st->mem_T0_med = E_GAIN_olag_median(T_op2, st->mem_ol_lag); st->mem_ada_w = 1.0F; } else { st->mem_ada_w = st->mem_ada_w * 0.9F; } if (st->mem_ada_w < 0.8) { st->mem_ol_wght_flg = 0; } else { st->mem_ol_wght_flg = 1; } E_DTX_pitch_tone_detection(st->vadSt, st->mem_ol_gain); T_op2 *= OPL_DECIM; } else { T_op2 = T_op; } /* * DTX-CNG */ if(*mode == MRDTX) { /* Buffer isf's and energy */ E_UTIL_residu(&A[3 * (M + 1)], speech, f_exc, L_FRAME); f_tmp = 0.0; for(i = 0; i < L_FRAME; i++) { f_tmp += f_exc[i] * f_exc[i]; } E_DTX_buffer(st->dtx_encSt, isf, f_tmp, codec_mode); /* Quantize and code the isfs */ E_DTX_exe(st->dtx_encSt, f_exc2, &prms); /* reset speech coder memories */ E_MAIN_reset(st, 0); /* * Update signal for next frame. * -> save past of speech[] and wsp[]. */ memcpy(st->mem_speech, &st->mem_speech[L_FRAME], (L_TOTAL - L_FRAME) * sizeof(Float32)); memcpy(st->mem_wsp, &st->mem_wsp[L_FRAME / OPL_DECIM], (PIT_MAX / OPL_DECIM) * sizeof(Float32)); return(0); } /* * ACELP */ /* Quantize and code the isfs */ if (*mode <= MODE_7k) { E_LPC_isf_2s3s_quantise(isf, isfq, st->mem_isf_q, indice, 4); E_MAIN_parm_store((Word16)indice[0], &prms); E_MAIN_parm_store((Word16)indice[1], &prms); E_MAIN_parm_store((Word16)indice[2], &prms); E_MAIN_parm_store((Word16)indice[3], &prms); E_MAIN_parm_store((Word16)indice[4], &prms); } else { E_LPC_isf_2s5s_quantise(isf, isfq, st->mem_isf_q, indice, 4); E_MAIN_parm_store((Word16)indice[0], &prms); E_MAIN_parm_store((Word16)indice[1], &prms); E_MAIN_parm_store((Word16)indice[2], &prms); E_MAIN_parm_store((Word16)indice[3], &prms); E_MAIN_parm_store((Word16)indice[4], &prms); E_MAIN_parm_store((Word16)indice[5], &prms); E_MAIN_parm_store((Word16)indice[6], &prms); } /* Convert isfs to the cosine domain */ E_LPC_isf_isp_conversion(isfq, ispnew_q, M); if (*mode == MODE_24k) { /* Check stability on isf : distance between old isf and current isf */ f_tmp = 0.0F; f_pt_tmp = st->mem_isf; for (i=0; i < M - 1; i++) { f_tmp += (isf[i] - f_pt_tmp[i]) * (isf[i] - f_pt_tmp[i]); } stab_fac = (Float32)(1.25F - (f_tmp / 400000.0F)); if (stab_fac > 1.0F) { stab_fac = 1.0F; } if (stab_fac < 0.0F) { stab_fac = 0.0F; } memcpy(f_pt_tmp, isf, M * sizeof(Float32)); } if (st->mem_first_frame == 1) { st->mem_first_frame = 0; memcpy(st->mem_isp_q, ispnew_q, M * sizeof(Word16)); } /* Find the interpolated isps and convert to a[] for all subframes */ E_LPC_int_isp_find(st->mem_isp_q, ispnew_q, E_ROM_interpol_frac, s_Aq); for (i = 0; i < (NB_SUBFR * (M + 1)); i++) { Aq[i] = s_Aq[i] * 0.000244140625F; /* 1/4096 */ } /* update isp memory for the next frame */ memcpy(st->mem_isp_q, ispnew_q, M * sizeof(Word16)); /* * Find the best interpolation for quantized ISPs */ p_Aq = Aq; for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR) { E_UTIL_residu(p_Aq, &speech[i_subfr], &f_exc[i_subfr], L_SUBFR); p_Aq += (M + 1); } /* Buffer isf's and energy for dtx on non-speech frame */ if(vad_flag == 0) { f_tmp = 0.0F; for(i = 0; i < L_FRAME; i++) { f_tmp += f_exc[i] * f_exc[i]; } E_DTX_buffer(st->dtx_encSt, isf, f_tmp, codec_mode); } /* range for closed loop pitch search in 1st subframe */ T0_min = T_op - 8; if (T0_min < PIT_MIN) { T0_min = PIT_MIN; } T0_max = T0_min + 15; if (T0_max > PIT_MAX) { T0_max = PIT_MAX; T0_min = T0_max - 15; } /* * Loop for every subframe in the analysis frame * --------------------------------------------- * To find the pitch and innovation parameters. The subframe size is * L_SUBFR and the loop is repeated L_FRAME/L_SUBFR times. * - compute the target signal for pitch search * - compute impulse response of weighted synthesis filter (h1[]) * - find the closed-loop pitch parameters * - encode the pitch dealy * - find 2 lt prediction (with / without LP filter for lt pred) * - find 2 pitch gains and choose the best lt prediction. * - find target vector for codebook search * - update the impulse response h1[] for codebook search * - correlation between target vector and impulse response * - codebook search and encoding * - VQ of pitch and codebook gains * - find voicing factor and tilt of code for next subframe. * - update states of weighting filter * - find excitation and synthesis speech */ p_A = A; p_Aq = Aq; for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR) { pit_flag = i_subfr; if ((i_subfr == (2 * L_SUBFR)) & (*mode > MODE_7k)) { pit_flag = 0; /* range for closed loop pitch search in 3rd subframe */ T0_min = T_op2 - 8; if (T0_min < PIT_MIN) { T0_min = PIT_MIN; } T0_max = T0_min + 15; if (T0_max > PIT_MAX) { T0_max = PIT_MAX; T0_min = T0_max - 15; } } /* * * Find the target vector for pitch search: * --------------------------------------- * * |------| res[n] * speech[n]---| A(z) |-------- * |------| | |--------| error[n] |------| * zero -- (-)--| 1/A(z) |-----------| W(z) |-- target * exc |--------| |------| * * Instead of subtracting the zero-input response of filters from * the weighted input speech, the above configuration is used to * compute the target vector. * */ for (i = 0; i < M; i++) { error[i] = (Float32)(speech[i + i_subfr - 16] - st->mem_syn[i]); } E_UTIL_residu(p_Aq, &speech[i_subfr], &f_exc[i_subfr], L_SUBFR); E_UTIL_synthesis(p_Aq, &f_exc[i_subfr], error + M, L_SUBFR, error, 0); E_LPC_a_weight(p_A, Ap, GAMMA1, M); E_UTIL_residu(Ap, error + M, xn, L_SUBFR); E_UTIL_deemph(xn, TILT_FAC, L_SUBFR, &(st->mem_w0)); /* * Find target in residual domain (cn[]) for innovation search. */ /* first half: xn[] --> cn[] */ memset(f_code, 0, M * sizeof(Float32)); memcpy(f_code + M, xn, (L_SUBFR / 2) * sizeof(Float32)); f_tmp = 0.0F; E_UTIL_f_preemph(f_code + M, TILT_FAC, L_SUBFR / 2, &f_tmp); E_LPC_a_weight(p_A, Ap, GAMMA1, M); E_UTIL_synthesis(Ap, f_code + M, f_code + M, L_SUBFR / 2, f_code, 0); E_UTIL_residu(p_Aq, f_code + M, cn, L_SUBFR / 2); /* second half: res[] --> cn[] (approximated and faster) */ for(i = (L_SUBFR / 2); i < L_SUBFR; i++) { cn[i] = f_exc[i_subfr + i]; } /* * Compute impulse response, h1[], of weighted synthesis filter */ E_LPC_a_weight(p_A, Ap, GAMMA1, M); memset(h1, 0, L_SUBFR * sizeof(Float32)); memcpy(h1, Ap, (M + 1) * sizeof(Float32)); E_UTIL_synthesis(p_Aq, h1, h1, L_SUBFR, h1 + (M + 1), 0); f_tmp = 0.0; E_UTIL_deemph(h1, TILT_FAC, L_SUBFR, &f_tmp); /* * Closed-loop fractional pitch search */ /* find closed loop fractional pitch lag */ if (*mode <= MODE_9k) { T0 = E_GAIN_closed_loop_search(&f_exc[i_subfr], xn, h1, T0_min, T0_max, &T0_frac, pit_flag, PIT_MIN, PIT_FR1_8b); /* encode pitch lag */ if (pit_flag == 0) /* if 1st/3rd subframe */ { /* * The pitch range for the 1st/3rd subframe is encoded with * 8 bits and is divided as follows: * PIT_MIN to PIT_FR1-1 resolution 1/2 (frac = 0 or 2) * PIT_FR1 to PIT_MAX resolution 1 (frac = 0) */ if (T0 < PIT_FR1_8b) { index = (Word16)(T0 * 2 + (T0_frac >> 1) - (PIT_MIN * 2)); } else { index = (Word16)(T0 - PIT_FR1_8b + ((PIT_FR1_8b - PIT_MIN) * 2)); } E_MAIN_parm_store(index, &prms); /* find T0_min and T0_max for subframe 2 and 4 */ T0_min = T0 - 8; if (T0_min < PIT_MIN) { T0_min = PIT_MIN; } T0_max = T0_min + 15; if (T0_max > PIT_MAX) { T0_max = PIT_MAX; T0_min = T0_max - 15; } } else /* if subframe 2 or 4 */ { /* * The pitch range for subframe 2 or 4 is encoded with 6 bits: * T0_min to T0_max resolution 1/2 (frac = 0 or 2) */ i = T0 - T0_min; index = (Word16)(i * 2 + (T0_frac >> 1)); E_MAIN_parm_store(index, &prms); } } else { T0 = E_GAIN_closed_loop_search(&f_exc[i_subfr], xn, h1, T0_min, T0_max, &T0_frac, pit_flag, PIT_FR2, PIT_FR1_9b); /* encode pitch lag */ if (pit_flag == 0) /* if 1st/3rd subframe */ { /* * The pitch range for the 1st/3rd subframe is encoded with * 9 bits and is divided as follows: * PIT_MIN to PIT_FR2-1 resolution 1/4 (frac = 0,1,2 or 3) * PIT_FR2 to PIT_FR1-1 resolution 1/2 (frac = 0 or 2) * PIT_FR1 to PIT_MAX resolution 1 (frac = 0) */ if (T0 < PIT_FR2) { index = (Word16)(T0 * 4 + T0_frac - (PIT_MIN * 4)); } else if (T0 < PIT_FR1_9b) { index = (Word16)(T0 * 2 + (T0_frac >> 1) - (PIT_FR2 * 2) + ((PIT_FR2 - PIT_MIN) * 4)); } else { index = (Word16)(T0 - PIT_FR1_9b + ((PIT_FR2 - PIT_MIN) * 4) + ((PIT_FR1_9b - PIT_FR2) * 2)); } E_MAIN_parm_store(index, &prms); /* find T0_min and T0_max for subframe 2 and 4 */ T0_min = T0 - 8; if (T0_min < PIT_MIN) { T0_min = PIT_MIN; } T0_max = T0_min + 15; if (T0_max > PIT_MAX) { T0_max = PIT_MAX; T0_min = T0_max - 15; } } else /* if subframe 2 or 4 */ { /* * The pitch range for subframe 2 or 4 is encoded with 6 bits: * T0_min to T0_max resolution 1/4 (frac = 0,1,2 or 3) */ i = T0 - T0_min; index = (Word16)(i * 4 + T0_frac); E_MAIN_parm_store(index, &prms); } } /* * Gain clipping test to avoid unstable synthesis on frame erasure */ clip_gain = E_GAIN_clip_test(st->mem_gp_clip); /* * - find unity gain pitch excitation (adaptive codebook entry) * with fractional interpolation. * - find filtered pitch exc. y1[]=exc[] convolved with h1[]) * - compute pitch gain1 */ /* find pitch exitation */ E_GAIN_adaptive_codebook_excitation(&exc[i_subfr], (Word16)T0, T0_frac, L_SUBFR + 1); if(*mode > MODE_9k) { E_UTIL_convolve(&exc[i_subfr], st->mem_q, h1, y1); gain1 = E_ACELP_xy1_corr(xn, y1, g_coeff); /* clip gain if necessary to avoid problem at decoder */ if (clip_gain && (gain1 > 0.95)) { gain1 = 0.95f; } /* find energy of new target xn2[] */ E_ACELP_codebook_target_update(xn, dn, y1, gain1); } else { gain1 = 0.0F; } /* * - find pitch excitation filtered by 1st order LP filter. * - find filtered pitch exc. y2[]=exc[] convolved with h1[]) * - compute pitch gain2 */ /* find pitch excitation with lp filter */ for (i = 0; i < L_SUBFR; i++) { l_tmp = 5898 * exc[i - 1 + i_subfr]; l_tmp += 20972 * exc[i + i_subfr]; l_tmp += 5898 * exc[i + 1 + i_subfr]; s_code[i] = (Word16)((l_tmp + 0x4000) >> 15); } E_UTIL_convolve(s_code, st->mem_q, h1, y2); gain2 = E_ACELP_xy1_corr(xn, y2, g_coeff2); /* clip gain if necessary to avoid problem at decoder */ if (clip_gain && (gain2 > 0.95)) { gain2 = 0.95F; } /* find energy of new target xn2[] */ E_ACELP_codebook_target_update(xn, xn2, y2, gain2); /* * use the best prediction (minimise quadratic error). */ select = 0; if (*mode > MODE_9k) { f_tmp = 0.0; for (i = 0; i < L_SUBFR; i++) { f_tmp += dn[i] * dn[i]; f_tmp -= xn2[i] * xn2[i]; } if (f_tmp < 0.1) { select = 1; } E_MAIN_parm_store(select, &prms); } if (select == 0) { /* use the lp filter for pitch excitation prediction */ memcpy(&exc[i_subfr], s_code, L_SUBFR * sizeof(Word16)); memcpy(y1, y2, L_SUBFR * sizeof(Float32)); gain_pit = gain2; g_coeff[0] = g_coeff2[0]; g_coeff[1] = g_coeff2[1]; } else { /* no filter used for pitch excitation prediction */ gain_pit = gain1; memcpy(xn2, dn, L_SUBFR * sizeof(Float32)); /* target vector for codebook search */ } /* * - update target vector for codebook search * - scaling of cn[] to limit dynamic at 12 bits */ for (i = 0; i < L_SUBFR; i ++) { cn[i] = (Float32)(cn[i] - gain_pit * exc[i_subfr + i] * pow(2, Q_new)); } /* * - include fixed-gain pitch contribution into impulse resp. h1[] */ f_tmp = 0.0F; E_UTIL_f_preemph(h1, (Float32)(st->mem_tilt_code / 32768.0), L_SUBFR, &f_tmp); if (T0_frac > 2) { T0++; } E_GAIN_f_pitch_sharpening(h1, T0); /* * - Correlation between target xn2[] and impulse response h1[] * - Innovative codebook search */ E_ACELP_xh_corr(xn2, dn, h1); switch(*mode) { case MODE_7k: E_ACELP_2t(dn, cn, h1, s_code, y2, indice); E_MAIN_parm_store((Word16)indice[0], &prms); break; case MODE_9k: E_ACELP_4t(dn, cn, h1, s_code, y2, 20, *mode, indice); E_MAIN_parm_store((Word16)indice[0], &prms); E_MAIN_parm_store((Word16)indice[1], &prms); E_MAIN_parm_store((Word16)indice[2], &prms); E_MAIN_parm_store((Word16)indice[3], &prms); break; case MODE_12k: E_ACELP_4t(dn, cn, h1, s_code, y2, 36, *mode, indice); E_MAIN_parm_store((Word16)indice[0], &prms); E_MAIN_parm_store((Word16)indice[1], &prms); E_MAIN_parm_store((Word16)indice[2], &prms); E_MAIN_parm_store((Word16)indice[3], &prms); break; case MODE_14k: E_ACELP_4t(dn, cn, h1, s_code, y2, 44, *mode, indice); E_MAIN_parm_store((Word16)indice[0], &prms); E_MAIN_parm_store((Word16)indice[1], &prms); E_MAIN_parm_store((Word16)indice[2], &prms); E_MAIN_parm_store((Word16)indice[3], &prms); break; case MODE_16k: E_ACELP_4t(dn, cn, h1, s_code, y2, 52, *mode, indice); E_MAIN_parm_store((Word16)indice[0], &prms); E_MAIN_parm_store((Word16)indice[1], &prms); E_MAIN_parm_store((Word16)indice[2], &prms); E_MAIN_parm_store((Word16)indice[3], &prms); break; case MODE_18k: E_ACELP_4t(dn, cn, h1, s_code, y2, 64, *mode, indice); E_MAIN_parm_store((Word16)indice[0], &prms); E_MAIN_parm_store((Word16)indice[1], &prms); E_MAIN_parm_store((Word16)indice[2], &prms); E_MAIN_parm_store((Word16)indice[3], &prms); E_MAIN_parm_store((Word16)indice[4], &prms); E_MAIN_parm_store((Word16)indice[5], &prms); E_MAIN_parm_store((Word16)indice[6], &prms); E_MAIN_parm_store((Word16)indice[7], &prms); break; case MODE_20k: E_ACELP_4t(dn, cn, h1, s_code, y2, 72, *mode, indice); E_MAIN_parm_store((Word16)indice[0], &prms); E_MAIN_parm_store((Word16)indice[1], &prms); E_MAIN_parm_store((Word16)indice[2], &prms); E_MAIN_parm_store((Word16)indice[3], &prms); E_MAIN_parm_store((Word16)indice[4], &prms); E_MAIN_parm_store((Word16)indice[5], &prms); E_MAIN_parm_store((Word16)indice[6], &prms); E_MAIN_parm_store((Word16)indice[7], &prms); break; case MODE_23k: case MODE_24k: E_ACELP_4t(dn, cn, h1, s_code, y2, 88, *mode, indice); E_MAIN_parm_store((Word16)indice[0], &prms); E_MAIN_parm_store((Word16)indice[1], &prms); E_MAIN_parm_store((Word16)indice[2], &prms); E_MAIN_parm_store((Word16)indice[3], &prms); E_MAIN_parm_store((Word16)indice[4], &prms); E_MAIN_parm_store((Word16)indice[5], &prms); E_MAIN_parm_store((Word16)indice[6], &prms); E_MAIN_parm_store((Word16)indice[7], &prms); break; default: return -1; } /* * - Add the fixed-gain pitch contribution to code[]. */ s_tmp = 0; E_UTIL_preemph(s_code, st->mem_tilt_code, L_SUBFR, &s_tmp); E_GAIN_pitch_sharpening(s_code, (Word16)T0); E_ACELP_xy2_corr(xn, y1, y2, g_coeff); /* * - Compute the fixed codebook gain * - quantize fixed codebook gain */ if (*mode <= MODE_9k) { index = (Word16)E_ACELP_gains_quantise(s_code, 6, gain_pit, &s_gain_pit, &L_gain_code, g_coeff, clip_gain, st->mem_gain_q); E_MAIN_parm_store(index, &prms); } else { index = (Word16)E_ACELP_gains_quantise(s_code, 7, gain_pit, &s_gain_pit, &L_gain_code, g_coeff, clip_gain, st->mem_gain_q); E_MAIN_parm_store(index, &prms); } /* find best scaling to perform on excitation (Q_new) */ s_tmp = st->mem_subfr_q[0]; for (i = 1; i < 4; i++) { if (st->mem_subfr_q[i] < s_tmp) { s_tmp = st->mem_subfr_q[i]; } } /* limit scaling (Q_new) to Q_MAX */ if (s_tmp > Q_MAX) { s_tmp = Q_MAX; } Q_new = 0; l_tmp = L_gain_code; /* L_gain_code in Q16 */ while ((l_tmp < 0x08000000L) && (Q_new < s_tmp)) { l_tmp = (l_tmp << 1); Q_new = Q_new + 1; } if (l_tmp < 0x7FFF7FFF) { /* scaled gain_code with Qnew */ gain_code = (Word16)((l_tmp + 0x8000) >> 16); } else { gain_code = 32767; } if (Q_new > st->mem_q) { E_UTIL_signal_up_scale(exc + i_subfr - (PIT_MAX + L_INTERPOL), (Word16)(Q_new - st->mem_q)); } else { E_UTIL_signal_down_scale(exc + i_subfr - (PIT_MAX + L_INTERPOL), PIT_MAX + L_INTERPOL + L_SUBFR, (Word16)(st->mem_q - Q_new)); } st->mem_q = (Word16)Q_new; /* test quantized gain of pitch for pitch clipping algorithm */ E_GAIN_clip_pit_test((Float32)(s_gain_pit * pow(2, -14)), st->mem_gp_clip); /* * Update parameters for the next subframe. * - tilt of code: 0.0 (unvoiced) to 0.5 (voiced) */ /* find voice factor in Q15 (1=voiced, -1=unvoiced) */ memcpy(exc2, &exc[i_subfr], L_SUBFR * sizeof(Word16)); E_UTIL_signal_down_scale(exc2, L_SUBFR, 3); voice_fac = E_GAIN_voice_factor(exc2, -3, s_gain_pit, s_code, gain_code); /* tilt of code for next subframe: 0.5=voiced, 0=unvoiced */ st->mem_tilt_code = (Word16)((voice_fac >> 2) + 8192); /* * - Update filter's memory "mem_w0" for finding the * target vector in the next subframe. * - Find the total excitation * - Find synthesis speech to update mem_syn[]. */ memcpy(exc2, &exc[i_subfr], L_SUBFR * sizeof(Word16)); st->mem_w0 = (Float32)((xn[L_SUBFR - 1] - ((s_gain_pit / 16384.0F) * y1[L_SUBFR - 1])) - (gain_code * pow(2, -st->mem_q) * y2[L_SUBFR - 1])); if (*mode == MODE_24k) { Q_new = -st->mem_q; for (i = 0; i < L_SUBFR; i++) { f_exc2[i_subfr + i] = (Float32)(exc[i_subfr + i] * pow(2, Q_new) * (s_gain_pit / 16384.0F)); } } s_max = 1; for (i = 0; i < L_SUBFR; i++) { /* code in Q9, gain_pit in Q14 */ l_tmp = gain_code * s_code[i]; l_tmp = l_tmp << 5; l_tmp += exc[i + i_subfr] * s_gain_pit; /* gain_pit Q14 */ l_tmp = (l_tmp + 0x2000) >> 14; if ((l_tmp > MIN_16) & (l_tmp < 32768)) { exc[i + i_subfr] = (Word16)l_tmp; s_tmp = (Word16)abs(l_tmp); if (s_tmp > s_max) { s_max = s_tmp; } } else if (l_tmp > MAX_16) { exc[i + i_subfr] = MAX_16; s_max = MAX_16; } else { exc[i + i_subfr] = MIN_16; s_max = MAX_16; } } /* tmp = scaling possible according to max value of excitation */ s_tmp = (Word16)((E_UTIL_norm_s(s_max) + st->mem_q) - 1); st->mem_subfr_q[3] = st->mem_subfr_q[2]; st->mem_subfr_q[2] = st->mem_subfr_q[1]; st->mem_subfr_q[1] = st->mem_subfr_q[0]; st->mem_subfr_q[0] = s_tmp; Q_new = -st->mem_q; for (i = 0; i < L_SUBFR; i++) { f_exc[i + i_subfr] = (Float32)(exc[i + i_subfr] * pow(2, Q_new)); } E_UTIL_synthesis(p_Aq, &f_exc[i_subfr], synth, L_SUBFR, st->mem_syn, 1); if(*mode >= MODE_24k) { /* * noise enhancer * -------------- * - Enhance excitation on noise. (modify gain of code) * If signal is noisy and LPC filter is stable, move gain * of code 1.5 dB toward gain of code threshold. * This decrease by 3 dB noise energy variation. */ /* 1=unvoiced, 0=voiced */ f_tmp = (Float32)(0.5 * (1.0 - (voice_fac / 32768.0))); fac = stab_fac * f_tmp; f_tmp = (Float32)(gain_code * pow(2, -st->mem_q)); if(f_tmp < st->mem_gc_threshold) { f_tmp = (Float32)(f_tmp * 1.19); if(f_tmp > st->mem_gc_threshold) { f_tmp = st->mem_gc_threshold; } } else { f_tmp = (Float32)(f_tmp / 1.19); if(f_tmp < st->mem_gc_threshold) { f_tmp = st->mem_gc_threshold; } } st->mem_gc_threshold = f_tmp; f_tmp = (Float32)(((fac * f_tmp) + ((1.0 - fac) * (gain_code * pow(2, -st->mem_q)))) * 0.001953125F); for(i = 0; i < L_SUBFR; i++) { f_code[i] = (Float32)(s_code[i] * f_tmp); } /* * pitch enhancer * -------------- * - Enhance excitation on voice. (HP filtering of code) * On voiced signal, filtering of code by a smooth fir HP * filter to decrease energy of code in low frequency. */ /* 0.25=voiced, 0=unvoiced */ f_tmp = (Float32)(0.125F * (1.0F + (voice_fac / 32768.0))); f_exc2[i_subfr] += f_code[0] - (f_tmp * f_code[1]); for(i = 1; i < L_SUBFR - 1; i++) { f_exc2[i + i_subfr] += f_code[i] - (f_tmp * f_code[i - 1]) - (f_tmp * f_code[i + 1]); } f_exc2[i_subfr + L_SUBFR - 1] += f_code[L_SUBFR - 1] - (f_tmp * f_code[L_SUBFR - 2]); corr_gain = (Word16)E_UTIL_enc_synthesis(p_Aq, &f_exc2[i_subfr], &f_speech16k[i_subfr * 5 /4], st); E_MAIN_parm_store(corr_gain, &prms); } p_A += (M + 1); p_Aq += (M + 1); } /* end of subframe loop */ /* * Update signal for next frame. * -> save past of speech[], wsp[] and exc[]. */ memmove(st->mem_speech, &st->mem_speech[L_FRAME], (L_TOTAL - L_FRAME) * sizeof(Float32)); memmove(st->mem_wsp, &st->mem_wsp[L_FRAME / OPL_DECIM], (PIT_MAX / OPL_DECIM) * sizeof(Float32)); memmove(st->mem_exc, &st->mem_exc[L_FRAME], (PIT_MAX + L_INTERPOL) * sizeof(Word16)); return 0; } h323plus/plugins/audio/G.722.2/AMR-WB/dec_if.h0000644000175000017500000000112011341106231017021 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #ifndef DEC_IF_H #define DEC_IF_H #include "typedef.h" #define NB_SERIAL_MAX 61 /* max serial size */ #define L_FRAME16k 320 /* Frame size at 16kHz */ #define _good_frame 0 #define _bad_frame 1 #define _lost_frame 2 #define _no_frame 3 void D_IF_decode(void *st, UWord8 *bits, Word16 *synth, Word32 bfi); void * D_IF_init(void); void D_IF_exit(void *state); #endif h323plus/plugins/audio/G.722.2/AMR-WB/enc_lpc.c0000644000175000017500000007244211341106231017225 0ustar markmark/* *=================================================================== * 3GPP AMR Wideband Floating-point Speech Codec *=================================================================== */ #include #include #include "typedef.h" #include "enc_util.h" #define ORDER 16 /* order of linear prediction filter */ #define ISF_GAP 128 /* 50 */ #define M 16 #define M16k 20 /* Order of LP filter */ #define MP1 (M+1) #define NC16k (M16k / 2) #define MU 10923 /* Prediction factor (1.0/3.0) in Q15 */ #define F_MU (1.0 / 3.0) /* prediction factor */ #define N_SURV_MAX 4 /* 4 survivors max */ #ifndef PI #define PI 3.141592654 #endif /* isp_isf_conversion */ #define SCALE1 (6400.0/PI) /* chebyshev */ #define NO_ITER 4 /* no of iterations for tracking the root */ #define NO_POINTS 100 #define SIZE_BK1 256 #define SIZE_BK2 256 #define SIZE_BK21 64 #define SIZE_BK22 128 #define SIZE_BK23 128 #define SIZE_BK24 32 #define SIZE_BK25 32 #define SIZE_BK21_36b 128 #define SIZE_BK22_36b 128 #define SIZE_BK23_36b 64 #define SIZE_BK_NOISE1 64 #define SIZE_BK_NOISE2 64 #define SIZE_BK_NOISE3 64 #define SIZE_BK_NOISE4 32 #define SIZE_BK_NOISE5 32 extern const Word16 E_ROM_mean_isf[]; extern const Word16 E_ROM_cos[]; extern const Float32 E_ROM_dico1_isf[]; extern const Float32 E_ROM_dico2_isf[]; extern const Float32 E_ROM_dico21_isf[]; extern const Float32 E_ROM_dico22_isf[]; extern const Float32 E_ROM_dico23_isf[]; extern const Float32 E_ROM_dico24_isf[]; extern const Float32 E_ROM_dico25_isf[]; extern const Float32 E_ROM_dico21_isf_36b[]; extern const Float32 E_ROM_dico22_isf_36b[]; extern const Float32 E_ROM_dico23_isf_36b[]; extern const Float32 E_ROM_f_mean_isf[]; extern const Float32 E_ROM_lag_window[]; extern const Float32 E_ROM_grid[]; extern const Float32 E_ROM_f_interpol_frac[]; /* * E_LPC_isf_reorder * * Parameters: * isf I/O: vector of isfs * min_dist I: quantized ISFs (in frequency domain) * n I: LPC order * * Function: * To make sure that the isfs are properly order and to keep a certain * minimum distance between consecutive isfs. * * Returns: * void */ static void E_LPC_isf_reorder(Word16 *isf, Word16 min_dist, Word16 n) { Word32 i, isf_min; isf_min = min_dist; for (i = 0; i < n - 1; i++) { if (isf[i] < isf_min) { isf[i] = (Word16)isf_min; } isf_min = isf[i] + min_dist; } return; } /* * E_LPC_isp_pol_get * * Parameters: * isp I: Immitance spectral pairs (cosine domaine) * f O: the coefficients of F1 or F2 * n I: no of coefficients (m/2) * k16 I: 16k flag * * Function: * Find the polynomial F1(z) or F2(z) from the ISPs. * This is performed by expanding the product polynomials: * * F1(z) = product ( 1 - 2 isp_i z^-1 + z^-2 ) * i=0,2,4,6,8 * F2(z) = product ( 1 - 2 isp_i z^-1 + z^-2 ) * i=1,3,5,7 * * where isp_i are the ISPs in the cosine domain. * * Returns: * void */ static void E_LPC_isp_pol_get(Word16 *isp, Word32 *f, Word32 n, Word16 k16) { Word32 i, j, t0, s1, s2; Word16 hi, lo; s1 = 8388608; s2 = 512; if(k16) { s1 >>= 2; s2 >>= 2; } /* All computation in Q23 */ f[0] = s1; /* f[0] = 1.0; in Q23 */ f[1] = isp[0] * (-s2); /* f[1] = -2.0*isp[0] in Q23 */ f += 2; /* Advance f pointer */ isp += 2; /* Advance isp pointer */ for(i = 2; i <= n; i++) { *f = f[ - 2]; for(j = 1; j < i; j++, f--) { E_UTIL_l_extract(f[- 1], &hi, &lo); t0 = E_UTIL_mpy_32_16(hi, lo, *isp); /* t0 = f[-1] * isp */ t0 = (t0 << 1); *f = (*f - t0); /* *f -= t0 */ *f = (*f + f[ - 2]); /* *f += f[-2] */ } *f = *f - (*isp * s2); /* *f -= isp << 8 */ f += i; /* Advance f pointer */ isp += 2; /* Advance isp pointer */ } return; } static void E_LPC_f_isp_pol_get(Float32 isp[], Float32 f[], Word32 n) { Float32 b; Word32 i, j; f[0] = 1; b = (Float32)(-2.0 * *isp); f[1] = b; for (i = 2; i <= n; i++) { isp += 2; b = (Float32)(-2.0 * *isp); f[i] = (Float32)(b * f[i - 1] + 2.0 * f[i - 2]); for (j = i - 1; j > 1; j--) { f[j] += b * f[j - 1] + f[j - 2]; } f[1] += b; } return; } /* * E_LPC_isp_a_conversion * * Parameters: * isp I: (Q15) Immittance spectral pairs * a O: (Q12) Predictor coefficients (order = M) * m I: order of LP filter * * Function: * Convert ISPs to predictor coefficients a[] * * Returns: * void */ void E_LPC_isp_a_conversion(Word16 isp[], Word16 a[], Word16 m) { Word32 f1[NC16k + 1], f2[NC16k]; Word32 i, j, nc, t0; Word16 hi, lo; nc = m >> 1; if (nc > 8) { E_LPC_isp_pol_get(&isp[0], f1, nc, 1); for (i = 0; i <= nc; i++) { f1[i] = (f1[i] << 2); } } else { E_LPC_isp_pol_get(&isp[0], f1, nc, 0); } if (nc > 8) { E_LPC_isp_pol_get(&isp[1], f2, nc - 1, 1); for (i = 0; i <= nc - 1; i++) { f2[i] = (f2[i] << 2); } } else { E_LPC_isp_pol_get(&isp[1], f2, nc - 1, 0); } /* Multiply F2(z) by (1 - z^-2) */ for (i = (nc - 1); i > 1; i--) { f2[i] = f2[i] - f2[i - 2]; /* f2[i] -= f2[i-2]; */ } /* Scale F1(z) by (1+isp[m-1]) and F2(z) by (1-isp[m-1]) */ for (i = 0; i < nc; i++) { /* f1[i] *= (1.0 + isp[M-1]); */ E_UTIL_l_extract(f1[i], &hi, &lo); t0 = E_UTIL_mpy_32_16(hi, lo, isp[m - 1]); f1[i] = f1[i] + t0; /* f2[i] *= (1.0 - isp[M-1]); */ E_UTIL_l_extract(f2[i], &hi, &lo); t0 = E_UTIL_mpy_32_16(hi, lo, isp[m - 1]); f2[i] = f2[i] - t0; } /* * A(z) = (F1(z)+F2(z))/2 * F1(z) is symmetric and F2(z) is antisymmetric */ /* a[0] = 1.0; */ a[0] = 4096; for (i = 1, j = (m - 1); i < nc; i++, j--) { /* a[i] = 0.5*(f1[i] + f2[i]); */ t0 = f1[i] + f2[i]; /* f1[i] + f2[i] */ a[i] = (Word16)((t0 + 0x800) >> 12); /* from Q23 to Q12 and * 0.5 */ /* a[j] = 0.5*(f1[i] - f2[i]); */ t0 = (f1[i] - f2[i]); /* f1[i] - f2[i] */ a[j] = (Word16)((t0 + 0x800) >> 12); /* from Q23 to Q12 and * 0.5 */ } /* a[NC] = 0.5*f1[NC]*(1.0 + isp[M-1]); */ E_UTIL_l_extract(f1[nc], &hi, &lo); t0 = E_UTIL_mpy_32_16(hi, lo, isp[m - 1]); t0 = (f1[nc] + t0); a[nc] = (Word16)((t0 + 0x800) >> 12); /* from Q23 to Q12 and * 0.5 */ /* a[m] = isp[m-1]; */ a[m] = (Word16)((isp[m - 1] + 0x4) >> 3); /* from Q15 to Q12 */ return; } void E_LPC_f_isp_a_conversion(Float32 *isp, Float32 *a, Word32 m) { Float32 f1[(M16k / 2) + 1], f2[M16k / 2]; Word32 i, j, nc; nc = m / 2; /* * Find the polynomials F1(z) and F2(z) */ E_LPC_f_isp_pol_get(&isp[0], f1, nc); E_LPC_f_isp_pol_get(&isp[1], f2, nc-1); /* * Multiply F2(z) by (1 - z^-2) */ for (i = (nc - 1); i > 1; i--) { f2[i] -= f2[i - 2]; } /* * Scale F1(z) by (1+isp[m-1]) and F2(z) by (1-isp[m-1]) */ for (i = 0; i < nc; i++) { f1[i] *= (Float32)(1.0 + isp[m - 1]); f2[i] *= (Float32)(1.0 - isp[m - 1]); } /* * A(z) = (F1(z)+F2(z))/2 * F1(z) is symmetric and F2(z) is antisymmetric */ a[0] = 1.0; for (i = 1, j = m - 1; i < nc; i++, j--) { a[i] = (Float32)(0.5 * (f1[i] + f2[i])); a[j] = (Float32)(0.5 * (f1[i] - f2[i])); } a[nc] = (Float32)(0.5 * f1[nc] * (1.0 + isp[m - 1])); a[m] = isp[m - 1]; return; } /* * E_LPC_int_isp_find * * Parameters: * isp_old I: isps from past frame * isp_new I: isps from present frame * frac I: (Q15) fraction for 3 first subfr * Az O: LP coefficients in 4 subframes * * Function: * Find the Word32erpolated ISP parameters for all subframes. * * Returns: * void */ void E_LPC_int_isp_find(Word16 isp_old[], Word16 isp_new[], const Word16 frac[], Word16 Az[]) { Word32 i, k, fac_old, fac_new, tmp; Word16 isp[M]; for (k = 0; k < 3; k++) { fac_new = frac[k]; fac_old = ((32767 - fac_new) + 1); /* 1.0 - fac_new */ for (i = 0; i < M; i++) { tmp = isp_old[i] * fac_old; tmp += (isp_new[i] * fac_new); isp[i] = (Word16)((tmp + 0x4000) >> 15); } E_LPC_isp_a_conversion(isp, Az, M); Az += MP1; } /* 4th subframe: isp_new (frac=1.0) */ E_LPC_isp_a_conversion(isp_new, Az, M); return; } void E_LPC_f_int_isp_find(Float32 isp_old[], Float32 isp_new[], Float32 a[], Word32 nb_subfr, Word32 m) { Float32 isp[M], fnew, fold; Float32 *p_a; Word32 i, k; p_a = a; for (k = 0; k < nb_subfr; k++) { fnew = E_ROM_f_interpol_frac[k]; fold = (Float32)(1.0 - fnew); for (i = 0; i < m; i++) { isp[i] = isp_old[i] * fold + isp_new[i] * fnew; } E_LPC_f_isp_a_conversion(isp, p_a, m); p_a += (m + 1); } return; } /* * E_LPC_a_weight * * Parameters: * a I: LP filter coefficients * ap O: weighted LP filter coefficients * gamma I: weighting factor * m I: order of LP filter * * Function: * Weighting of LP filter coefficients, ap[i] = a[i] * (gamma^i). * * Returns: * void */ void E_LPC_a_weight(Float32 *a, Float32 *ap, Float32 gamma, Word32 m) { Float32 f; Word32 i; ap[0] = a[0]; f = gamma; for (i = 1; i <= m; i++) { ap[i] = f*a[i]; f *= gamma; } return; } /* * E_LPC_isf_2s3s_decode * * Parameters: * indice I: quantisation indices * isf_q O: quantised ISFs in the cosine domain * past_isfq I/O: past ISF quantizer * * Function: * Decoding of ISF parameters. * * Returns: * void */ static void E_LPC_isf_2s3s_decode(Word32 *indice, Word16 *isf_q, Word16 *past_isfq) { Word32 i; Word16 tmp; for(i = 0; i < 9; i++) { isf_q[i] = (Word16)((E_ROM_dico1_isf[indice[0] * 9 + i] * 2.56F) + 0.5F); } for(i = 0; i < 7; i++) { isf_q[i + 9] = (Word16)((E_ROM_dico2_isf[indice[1] * 7 + i] * 2.56F) + 0.5F); } for(i = 0; i < 5; i++) { isf_q[i] = (Word16)(isf_q[i] + (Word16)((E_ROM_dico21_isf_36b[indice[2] * 5 + i] * 2.56F) + 0.5F)); } for(i = 0; i < 4; i++) { isf_q[i + 5] = (Word16)(isf_q[i + 5] + (Word32)((E_ROM_dico22_isf_36b[indice[3] * 4 + i] * 2.56F) + 0.5F)); } for(i = 0; i < 7; i++) { isf_q[i + 9] = (Word16)(isf_q[i + 9] + (Word32)((E_ROM_dico23_isf_36b[indice[4] * 7 + i] * 2.56F) + 0.5F)); } for(i = 0; i < ORDER; i++) { tmp = isf_q[i]; isf_q[i] = (Word16)(tmp + E_ROM_mean_isf[i]); isf_q[i] = (Word16)(isf_q[i] + ((MU * past_isfq[i]) >> 15)); past_isfq[i] = tmp; } E_LPC_isf_reorder(isf_q, ISF_GAP, ORDER); return; } /* * E_LPC_isf_2s5s_decode * * Parameters: * indice I: quantization indices * isf_q O: quantized ISFs in the cosine domain * past_isfq I/O: past ISF quantizer * isfold I: past quantized ISF * isf_buf I: isf buffer * bfi I: Bad frame indicator * enc_dec I: * * Function: * Decoding of ISF parameters. * * Returns: * void */ void E_LPC_isf_2s5s_decode(Word32 *indice, Word16 *isf_q, Word16 *past_isfq) { Word32 i; Word16 tmp; for (i = 0; i < 9; i++) { isf_q[i] = (Word16)((E_ROM_dico1_isf[indice[0] * 9 + i] * 2.56F) + 0.5F); } for (i = 0; i < 7; i++) { isf_q[i + 9] = (Word16)((E_ROM_dico2_isf[indice[1] * 7 + i] * 2.56F) + 0.5F); } for (i = 0; i < 3; i++) { isf_q[i] = (Word16)(isf_q[i] + (Word32)((E_ROM_dico21_isf[indice[2] * 3 + i] * 2.56F) + 0.5F)); } for (i = 0; i < 3; i++) { isf_q[i + 3] = (Word16)(isf_q[i + 3] + (Word32)((E_ROM_dico22_isf[indice[3] * 3 + i] * 2.56F) + 0.5F)); } for (i = 0; i < 3; i++) { isf_q[i + 6] = (Word16)(isf_q[i + 6] + (Word32)((E_ROM_dico23_isf[indice[4] * 3 + i] * 2.56F) + 0.5F)); } for (i = 0; i < 3; i++) { isf_q[i + 9] = (Word16)(isf_q[i + 9] + (Word32)((E_ROM_dico24_isf[indice[5] * 3 + i] * 2.56F) + 0.5F)); } for (i = 0; i < 4; i++) { isf_q[i + 12] = (Word16)(isf_q[i + 12] + (Word32)((E_ROM_dico25_isf[indice[6] * 4 + i] * 2.56F) + 0.5F)); } for (i = 0; i < ORDER; i++) { tmp = isf_q[i]; isf_q[i] = (Word16)(tmp + E_ROM_mean_isf[i]); isf_q[i] = (Word16)(isf_q[i] + ((MU * past_isfq[i]) >> 15)); past_isfq[i] = tmp; } E_LPC_isf_reorder(isf_q, ISF_GAP, ORDER); return; } /* * E_LPC_isf_isp_conversion * * Parameters: * isp O: (Q15) isp[m] (range: -1<=val<1) * isf I: (Q15) isf[m] normalized (range: 0.0 <= val <= 0.5) * m I: LPC order * * Function: * Transformation isf to isp * * ISP are immitance spectral pair in cosine domain (-1 to 1). * ISF are immitance spectral pair in frequency domain (0 to 6400). * Returns: * void */ void E_LPC_isf_isp_conversion(Word16 isf[], Word16 isp[], Word16 m) { Word32 i, ind, offset, tmp; for (i = 0; i < m - 1; i++) { isp[i] = isf[i]; } isp[m - 1] = (Word16)(isf[m - 1] << 1); for (i = 0; i < m; i++) { ind = isp[i] >> 7; /* ind = b7-b15 of isf[i] */ offset = isp[i] & 0x007f; /* offset = b0-b6 of isf[i] */ /* isp[i] = table[ind]+ ((table[ind+1]-table[ind])*offset) / 128 */ tmp = ((E_ROM_cos[ind + 1] - E_ROM_cos[ind]) * offset) << 1; isp[i] = (Word16)(E_ROM_cos[ind] + (tmp >> 8)); } return; } /* * E_LPC_chebyshev * * Parameters: * x I: value of evaluation; x=cos(freq) * f I: coefficients of sum or diff polynomial * n I: order of polynomial * * Function: * Evaluates the Chebyshev polynomial series * * The polynomial order is n = m/2 (m is the prediction order) * The polynomial is given by * C(x) = f(0)T_n(x) + f(1)T_n-1(x) + ... +f(n-1)T_1(x) + f(n)/2 * * Returns: * the value of the polynomial C(x) */ static Float32 E_LPC_chebyshev(Float32 x, Float32 *f, Word32 n) { Float32 b1, b2, b0, x2; Word32 i; /* for the special case of 10th order */ /* filter (n=5) */ x2 = 2.0F * x; /* x2 = 2.0*x; */ b2 = f[0]; /* b2 = f[0]; */ b1 = x2 * b2 + f[1]; /* b1 = x2*b2 + f[1]; */ for (i = 2; i < n; i++) { b0 = x2 * b1 - b2 + f[i]; /* b0 = x2 * b1 - 1. + f[2]; */ b2 = b1; /* b2 = x2 * b0 - b1 + f[3]; */ b1 = b0; /* b1 = x2 * b2 - b0 + f[4]; */ } return (x * b1 - b2 + 0.5F * f[n]); /* return (x*b1 - b2 + 0.5*f[5]); */ } /* * E_LPC_isf_sub_vq * * Parameters: * x I/O: unquantised / quantised ISF * dico I: codebook * dim I: dimension of vector * dico_size I: codebook size * distance O: minimum distance * * Function: * Quantization of a subvector of size 2 in Split-VQ of ISFs * * Returns: * quantisation index */ Word16 E_LPC_isf_sub_vq(Float32 *x, const Float32 *E_ROM_dico, Word32 dim, Word32 E_ROM_dico_size, Float32 *distance) { Float32 dist_min, dist, temp; const Float32 *p_E_ROM_dico; Word32 i, j, index = 0; dist_min = 1.0e30f; p_E_ROM_dico = E_ROM_dico; for (i = 0; i < E_ROM_dico_size; i++) { dist = x[0] - *p_E_ROM_dico++; dist *= dist; for (j = 1; j < dim; j++) { temp = x[j] - *p_E_ROM_dico++; dist += temp * temp; } if (dist < dist_min) { dist_min = dist; index = i; } } *distance = dist_min; /* Reading the selected vector */ memcpy(x, &E_ROM_dico[index * dim], dim * sizeof(Float32)); return (Word16)index; } /* * E_LPC_lag_wind * * Parameters: * r I/O: autocorrelations vector * m I: window lenght * * Function: * Lag windowing of the autocorrelations. * * Returns: * void */ void E_LPC_lag_wind(Float32 r[], Word32 m) { Word32 i; for (i = 0; i < m; i++) { r[i] *= E_ROM_lag_window[i]; } return; } /* * E_LPC_lev_dur * * Parameters: * r_h I: vector of autocorrelations (msb) * r_l I: vector of autocorrelations (lsb) * A O: LP coefficients (a[0] = 1.0) (m = 16) * rc O: reflection coefficients * mem I/O: static memory * * Function: * Wiener-Levinson-Durbin algorithm to compute * the LPC parameters from the autocorrelations of speech. * * Returns: * void */ void E_LPC_lev_dur(Float32 *a, Float32 *r, Word32 m) { Float32 buf[M]; Float32 *rc; /* reflection coefficients 0,...,m-1 */ Float32 s, at, err; Word32 i, j, l; rc = &buf[0]; rc[0] = (-r[1]) / r[0]; a[0] = 1.0F; a[1] = rc[0]; err = r[0] + r[1] * rc[0]; for (i = 2; i <= m; i++) { s = 0.0F; for (j = 0; j < i; j++) { s += r[i - j] * a[j]; } rc[i - 1]= (-s) / (err); for (j = 1; j <= (i >> 1); j++) { l = i - j; at = a[j] + rc[i - 1] * a[l]; a[l] += rc[i - 1] * a[j]; a[j] = at; } a[i] = rc[i - 1]; err += rc[i - 1] * s; if (err <= 0.0F) { err = 0.01F; } } return; } /* * E_LPC_a_isp_conversion * * Parameters: * a I: LP filter coefficients * isp O: Immittance spectral pairs * old_isp I: ISP vector from past frame * * Function: * Compute the ISPs from the LPC coefficients a[] using Chebyshev * polynomials. The found ISPs are in the cosine domain with values * in the range from 1 down to -1. * The table E_ROM_grid[] contains the polongs (in the cosine domain) at * which the polynomials are evaluated. * * The ISPs are the roots of the two polynomials F1(z) and F2(z) * defined as * F1(z) = A(z) + z^-m A(z^-1) * and F2(z) = A(z) - z^-m A(z^-1) * * for a even order m=2n, F1(z) has 5 conjugate roots on the unit circle * and F2(z) has 4 conjugate roots on the unit circle in addition to two * roots at 0 and pi. * * For a 10th order LP analysis, F1(z) and F2(z) can be written as * * F1(z) = (1 + a[10]) PRODUCT (1 - 2 cos(w_i) z^-1 + z^-2 ) * i=0,2,4,6,8 * * F2(z) = (1 - a[10]) (1 - z^-2) PRODUCT (1 - 2 cos(w_i) z^-1 + z^-2 ) * i=1,3,5,7 * * The ISPs are the M-1 frequencies w_i, i=0...M-2 plus the last * predictor coefficient a[M]. * * Returns: * void */ void E_LPC_a_isp_conversion(Float32 *a, Float32 *isp, Float32 *old_isp, Word32 m) { Float32 f1[(M >> 1) + 1], f2[M >> 1]; Float32 *pf; Float32 xlow, ylow, xhigh, yhigh, xmid, ymid, xint; Word32 j, i, nf, ip, order, nc; nc = m >> 1; /* * find the sum and diff polynomials F1(z) and F2(z) * F1(z) = [A(z) + z^m A(z^-1)] * F2(z) = [A(z) - z^m A(z^-1)]/(1-z^-2) */ for (i=0; i < nc; i++) { f1[i] = a[i] + a[m - i]; f2[i] = a[i] - a[m - i]; } f1[nc] = 2.0F * a[nc]; /* divide by (1 - z^-2) */ for (i = 2; i < nc; i++) { f2[i] += f2[i - 2]; } /* * Find the ISPs (roots of F1(z) and F2(z) ) using the * Chebyshev polynomial evaluation. * The roots of F1(z) and F2(z) are alternatively searched. * We start by finding the first root of F1(z) then we switch * to F2(z) then back to F1(z) and so on until all roots are found. * * - Evaluate Chebyshev pol. at E_ROM_grid polongs and check for sign change. * - If sign change track the root by subdividing the Word32erval * 4 times and ckecking sign change. */ nf=0; /* number of found frequencies */ ip=0; /* flag to first polynomial */ pf = f1; /* start with F1(z) */ order = nc; xlow = E_ROM_grid[0]; ylow = E_LPC_chebyshev(xlow, pf, nc); j = 0; while ( (nf < m - 1) && (j < NO_POINTS) ) { j++; xhigh = xlow; yhigh = ylow; xlow = E_ROM_grid[j]; ylow = E_LPC_chebyshev(xlow, pf, order); if (ylow * yhigh <= 0.0F) /* if sign change new root exists */ { j--; /* divide the Word32erval of sign change by NO_ITER */ for (i = 0; i < NO_ITER; i++) { xmid = 0.5F * (xlow + xhigh); ymid = E_LPC_chebyshev(xmid, pf, order); if (ylow * ymid <= 0.0F) { yhigh = ymid; xhigh = xmid; } else { ylow = ymid; xlow = xmid; } } /* linear interpolation for evaluating the root */ xint = xlow - ylow * (xhigh - xlow) / (yhigh - ylow); isp[nf] = xint; /* new root */ nf++; ip = 1 - ip; /* flag to other polynomial */ pf = ip ? f2 : f1; /* pointer to other polynomial */ order = ip ? (nc - 1) : nc; /* order of other polynomial */ xlow = xint; ylow = E_LPC_chebyshev(xlow, pf, order); } } isp[m - 1] = a[m]; /* * Check if m-1 roots found * if not use the ISPs from previous frame */ if (nf < m - 1) { for(i = 0; i < m; i++) { isp[i] = old_isp[i]; } } return; } /* * E_LPC_isp_isf_conversion * * Parameters: * isp I: isp[m] (range: -1 <= val < 1) (Q15) * isf O: isf[m] normalized (range: 0 <= val <= 6400) * m I: LPC order * * Function: * Transformation isp to isf * * ISP are immitance spectral pair in cosine domain (-1 to 1). * ISF are immitance spectral pair in frequency domain (0 to 6400). * Returns: * energy of prediction error */ void E_LPC_isp_isf_conversion(Float32 isp[], Float32 isf[], Word32 m) { Word32 i; /* convert ISPs to frequency domain 0..6400 */ for(i = 0; i < (m - 1); i++) { isf[i] = (Float32)(acos(isp[i]) * SCALE1); } isf[m - 1] = (Float32)(acos(isp[m - 1]) * SCALE1 * 0.5F); return; } /* * E_LPC_stage1_isf_vq * * Parameters: * x I: ISF residual vector * dico I: quantisation codebook * dim I: dimension of vector * dico_size I: size of quantization codebook * index O: indices of survivors * surv I: number of survivor * * Function: * 1st stage VQ with split-by-2. * * Returns: * void */ static void E_LPC_stage1_isf_vq(Float32 *x, const Float32 *E_ROM_dico, Word32 dim, Word32 E_ROM_dico_size, Word32 *index, Word32 surv) { Float32 dist_min[N_SURV_MAX]; Float32 dist, temp1, temp2; const Float32 *p_E_ROM_dico; Word32 i, j, k, l; for (i = 0; i < surv; i++) { dist_min[i] = 1.0e30F; } for (i = 0; i < surv; i++) { index[i] = i; } p_E_ROM_dico = E_ROM_dico; for (i = 0; i < E_ROM_dico_size; i++) { dist = x[0] - *p_E_ROM_dico++; dist *= dist; for (j = 1; j < dim; j += 2) { temp1 = x[j] - *p_E_ROM_dico++; temp2 = x[j + 1] - *p_E_ROM_dico++; dist += temp1 * temp1 + temp2 * temp2; } for (k = 0; k < surv; k++) { if (dist < dist_min[k]) { for (l = surv - 1; l > k; l--) { dist_min[l] = dist_min[l - 1]; index[l] = index[l - 1]; } dist_min[k] = dist; index[k] = i; break; } } } return; } /* * E_LPC_isf_2s3s_quantise * * Parameters: * isf1 I: ISF in the frequency domain (0..6400) * isf_q O: quantized ISF * past_isfq I/O: past ISF quantizer * indice O: quantisation indices (5 words) * nb_surv I: number of survivor (1, 2, 3 or 4) * * Function: * Quantization of isf parameters with prediction. (36 bits) * * The isf vector is quantized using two-stage VQ with split-by-2 in * 1st stage and split-by-3 in the second stage. * Returns: * void */ void E_LPC_isf_2s3s_quantise(Float32 *isf1, Word16 *isf_q, Word16 *past_isfq, Word32 *indice, Word32 nb_surv) { Float32 isf[ORDER], isf_stage2[ORDER]; Float32 temp, min_err, distance; Word32 surv1[N_SURV_MAX]; /* indices of survivors from 1st stage */ Word32 tmp_ind[5]; Word32 i, k; for (i = 0; i < ORDER; i++) { isf[i] = (Float32)((isf1[i] - E_ROM_f_mean_isf[i]) - F_MU * past_isfq[i] * 0.390625F); } E_LPC_stage1_isf_vq(&isf[0], E_ROM_dico1_isf, 9, SIZE_BK1, surv1, nb_surv); distance = 1.0e30F; for (k = 0; k < nb_surv; k++) { for (i = 0; i < 9; i++) { isf_stage2[i] = isf[i] - E_ROM_dico1_isf[i + surv1[k] * 9]; } tmp_ind[0] = E_LPC_isf_sub_vq(&isf_stage2[0], E_ROM_dico21_isf_36b, 5, SIZE_BK21_36b, &min_err); temp = min_err; tmp_ind[1] = E_LPC_isf_sub_vq(&isf_stage2[5], E_ROM_dico22_isf_36b, 4, SIZE_BK22_36b, &min_err); temp += min_err; if (temp < distance) { distance = temp; indice[0] = surv1[k]; for (i = 0; i < 2; i++) { indice[i + 2] = tmp_ind[i]; } } } E_LPC_stage1_isf_vq(&isf[9], E_ROM_dico2_isf, 7, SIZE_BK2, surv1, nb_surv); distance = 1.0e30F; for (k = 0; k < nb_surv; k++) { for (i = 0; i < 7; i++) { isf_stage2[i] = isf[9 + i] - E_ROM_dico2_isf[i + surv1[k] * 7]; } tmp_ind[0] = E_LPC_isf_sub_vq(&isf_stage2[0], E_ROM_dico23_isf_36b, 7, SIZE_BK23_36b, &min_err); temp = min_err; if (temp < distance) { distance = temp; indice[1] = surv1[k]; indice[4]= tmp_ind[0]; } } /* decoding the ISF */ E_LPC_isf_2s3s_decode(indice, isf_q, past_isfq); return; } /* * E_LPC_isf_2s5s_quantise * * Parameters: * isf1 I: ISF in the frequency domain (0..6400) * isf_q O: quantized ISF * past_isfq I/O: past ISF quantizer * indice O: quantisation indices (5 words) * nb_surv I: number of survivor (1, 2, 3 or 4) * * Function: * Quantization of isf parameters with prediction. (46 bits) * * The isf vector is quantized using two-stage VQ with split-by-2 in * 1st stage and split-by-5 in the second stage. * Returns: * void */ void E_LPC_isf_2s5s_quantise(Float32 *isf1, Word16 *isf_q, Word16 *past_isfq, Word32 *indice, Word32 nb_surv) { Float32 isf[ORDER], isf_stage2[ORDER]; Float32 temp, min_err, distance; Word32 surv1[N_SURV_MAX]; /* indices of survivors from 1st stage */ Word32 tmp_ind[5]; Word32 i, k; for (i=0; i #include #include #include "typedef.h" #include "enc_util.h" #define L_SUBFR 64 #define NB_PULSE_MAX 24 #define NPMAXPT ((NB_PULSE_MAX + 4 - 1) / 4) #define NB_QUA_GAIN7B 128 /* Number of quantization level */ #define MODE_23k 7 extern const UWord8 E_ROM_tipos[]; extern const Float32 E_ROM_qua_gain6b[]; extern const Float32 E_ROM_qua_gain7b[]; /* * E_ACELP_Gain2_Q_init * * Parameters: * mem O: static memory * * Function: * Initializes state memory * * Returns: * void */ void E_ACELP_Gain2_Q_init(Word16 *mem) { Word32 i; /* 2nd order quantizer energy predictor */ for (i = 0; i < 4; i++) { mem[i] = -14336; /* past_qua_en[i] */ } return; } /* * E_ACELP_xy1_corr * * Parameters: * xn I: target signal * y1 I: filtered adaptive codebook excitation * g_coeff O: correlations and -2 * * Function: * Find the correlations between the target xn[] and the filtered adaptive * codebook excitation y1[]. ( and -2 ) * Subframe size = L_SUBFR * * Returns: * pitch gain (0 ... 1.2F) (Q14) */ Float32 E_ACELP_xy1_corr(Float32 xn[], Float32 y1[], Float32 g_corr[]) { Float32 gain; Float32 t0, t1; Word32 i; t0 = xn[0] * y1[0]; t1 = y1[0] * y1[0]; for (i = 1; i < L_SUBFR; i += 7) { t0 += xn[i] * y1[i]; t1 += y1[i] * y1[i]; t0 += xn[i + 1] * y1[i + 1]; t1 += y1[i + 1] * y1[i + 1]; t0 += xn[i + 2] * y1[i + 2]; t1 += y1[i + 2] * y1[i + 2]; t0 += xn[i + 3] * y1[i + 3]; t1 += y1[i + 3] * y1[i + 3]; t0 += xn[i + 4] * y1[i + 4]; t1 += y1[i + 4] * y1[i + 4]; t0 += xn[i + 5] * y1[i + 5]; t1 += y1[i + 5] * y1[i + 5]; t0 += xn[i + 6] * y1[i + 6]; t1 += y1[i + 6] * y1[i + 6]; } g_corr[0] = t1; g_corr[1] = -2.0F * t0 + 0.01F; /* find pitch gain and bound it by [0,1.2F] */ if (t1) { gain = t0 / t1; } else { gain = 1.0F; } if (gain < 0.0) { gain = 0.0; } else if (gain > 1.2F) { gain = 1.2F; } return gain; } /* * E_ACELP_xy2_corr * * Parameters: * xn I: target signal * y1 I: filtered adaptive codebook excitation * y2 I: filtered fixed codebook excitation * g_corr O: correlations , -2, 2 * L_subfr I: subframe size * * Function: * Find the correlations between the target xn[], the filtered adaptive * codebook exc. y1[], and the filtered fixed codebook innovation y2[]. * ( , -2 and 2 ) * Subrame size = L_SUBFR * * Returns: * pitch gain (0 ... 1.2F) */ void E_ACELP_xy2_corr(Float32 xn[], Float32 y1[], Float32 y2[], Float32 g_corr[]) { Float32 temp1, temp2, temp3; Word32 i; temp1 = 0.01F + y2[0] * y2[0]; temp2 = 0.01F + xn[0] * y2[0]; temp3 = 0.01F + y1[0] * y2[0]; temp1 += y2[1] * y2[1]; temp2 += xn[1] * y2[1]; temp3 += y1[1] * y2[1]; temp1 += y2[2] * y2[2]; temp2 += xn[2] * y2[2]; temp3 += y1[2] * y2[2]; temp1 += y2[3] * y2[3]; temp2 += xn[3] * y2[3]; temp3 += y1[3] * y2[3]; for (i = 4; i < L_SUBFR; i += 6) { temp1 += y2[i] * y2[i]; temp2 += xn[i] * y2[i]; temp3 += y1[i] * y2[i]; temp1 += y2[i + 1] * y2[i + 1]; temp2 += xn[i + 1] * y2[i + 1]; temp3 += y1[i + 1] * y2[i + 1]; temp1 += y2[i + 2] * y2[i + 2]; temp2 += xn[i + 2] * y2[i + 2]; temp3 += y1[i + 2] * y2[i + 2]; temp1 += y2[i + 3] * y2[i + 3]; temp2 += xn[i + 3] * y2[i + 3]; temp3 += y1[i + 3] * y2[i + 3]; temp1 += y2[i + 4] * y2[i + 4]; temp2 += xn[i + 4] * y2[i + 4]; temp3 += y1[i + 4] * y2[i + 4]; temp1 += y2[i + 5] * y2[i + 5]; temp2 += xn[i + 5] * y2[i + 5]; temp3 += y1[i + 5] * y2[i + 5]; } g_corr[2] = temp1; g_corr[3] = -2.0F * temp2; g_corr[4] = 2.0F * temp3; return; } /* * E_ACELP_xh_corr * * Parameters: * h I: impulse response (of weighted synthesis filter) (Q12) * x I: target signal (Q0) * y O: correlation between x[] and h[] * * Function: * Compute the correlation between the target signal and the impulse * response of the weighted synthesis filter. * * y[i]=sum(j=i,l-1) x[j]*h[j-i], i=0,l-1 * * Vector size is L_SUBFR * * Returns: * void */ void E_ACELP_xh_corr(Float32 *x, Float32 *y, Float32 *h) { Word32 i, j; Float32 s; for (i = 0; i < L_SUBFR; i++) { s = 0.0F; for (j = i; j < L_SUBFR ; j++) { s += x[j] * h[j - i]; } y[i] = s; } return; } /* * E_ACELP_codebook_target_update * * Parameters: * x I: old target (for pitch search) (Q0) * x2 O: new target (for codebook search) (Q0) * y I: filtered adaptive codebook vector (Q0) * gain I: adaptive codebook gain (Q14) * * Function: * Update the target vector for codebook search. * Subframe size = L_SUBFR * Returns: * void */ void E_ACELP_codebook_target_update(Float32 *x, Float32 *x2, Float32 *y, Float32 gain) { Word32 i; for (i = 0; i < L_SUBFR; i ++) { x2[i] = x[i] - gain * y[i]; } } /* * E_ACELP_h_vec_corr? * * Parameters: * h I: scaled impulse response * vec I: vector to correlate with h[] * track I: track to use * sign I: sign vector * rrixix I: correlation of h[x] with h[x] * cor O: result of correlation (16 elements) * * Function: * Calculate the correlations of h[] with vec[] for the specified track * * Returns: * void */ static void E_ACELP_h_vec_corr1(Float32 h[], Float32 vec[], UWord8 track, Float32 sign[], Float32 (*rrixix)[16], Float32 cor[], Word32 dn2_pos[], Word32 nb_pulse) { Word32 i, j, dn; Word32 *dn2; Float32 *p0; Float32 s; dn2 = &dn2_pos[track * 8]; p0 = rrixix[track]; for (i = 0; i < nb_pulse; i++) { dn = dn2[i]; s = 0.0F; for (j = 0; j < (L_SUBFR - dn); j++) { s += h[j] * vec[dn + j]; } cor[dn >> 2] = sign[dn] * s + p0[dn >> 2]; } return; } static void E_ACELP_h_vec_corr2(Float32 h[], Float32 vec[], UWord8 track, Float32 sign[], Float32 (*rrixix)[16], Float32 cor[]) { Word32 i, j; Float32 *p0; Float32 s; p0 = rrixix[track]; for (i = 0; i < 16; i++) { s = 0.0F; for (j = 0; j < L_SUBFR - track; j++) { s += h[j] * vec[track + j]; } cor[i] = s * sign[track] + p0[i]; track += 4; } return; } /* * E_ACELP_2pulse_search * * Parameters: * nb_pos_ix I: nb of pos for pulse 1 (1..8) * track_x I: track of pulse 1 * track_y I: track of pulse 2 * ps I/O: correlation of all fixed pulses * alp I/O: energy of all fixed pulses * ix O: position of pulse 1 * iy O: position of pulse 2 * dn I: corr. between target and h[] * dn2 I: vector of selected positions * cor_x I: corr. of pulse 1 with fixed pulses * cor_y I: corr. of pulse 2 with fixed pulses * rrixiy I: corr. of pulse 1 with pulse 2 * * Function: * Find the best positions of 2 pulses in a subframe * * Returns: * void */ static void E_ACELP_2pulse_search(Word32 nb_pos_ix, UWord8 track_x, UWord8 track_y, Float32 *ps, Float32 *alp, Word32 *ix, Word32 *iy, Float32 dn[], Word32 *dn2, Float32 cor_x[], Float32 cor_y[], Float32 (*rrixiy)[256]) { Word32 x, x2, y, x_save = 0, y_save = 0, i, *pos_x; Float32 ps0, alp0; Float32 ps1, ps2, sq, sqk; Float32 alp1, alp2, alpk; Float32 *p1, *p2; Float32 s; /* eight dn2 max positions per track */ pos_x = &dn2[track_x << 3]; /* save these to limit memory searches */ ps0 = *ps; alp0 = *alp; sqk = -1.0F; alpk = 1.0F; /* loop track 1 */ for (i = 0; i < nb_pos_ix; i++) { x = pos_x[i]; x2 = x >> 2; /* dn[x] has only nb_pos_ix positions saved */ ps1 = ps0 + dn[x]; alp1 = alp0 + cor_x[x2]; p1 = cor_y; p2 = &rrixiy[track_x][x2 << 4]; for (y = track_y; y < L_SUBFR; y += 4) { ps2 = ps1 + dn[y]; alp2 = alp1 + (*p1++) + (*p2++); sq = ps2 * ps2; s = (alpk * sq) - (sqk * alp2); if (s > 0.0F) { sqk = sq; alpk = alp2; y_save = y; x_save = x; } } } *ps = ps0 + dn[x_save] + dn[y_save]; *alp = alpk; *ix = x_save; *iy = y_save; return; } /* * E_ACELP_quant_1p_N1 * * Parameters: * pos I: position of the pulse * N I: number of bits for position * * Function: * Quantization of 1 pulse with N+1 bits * * Returns: * return N+1 bits */ static Word32 E_ACELP_quant_1p_N1(Word32 pos, Word32 N) { Word32 mask; Word32 index; mask = ((1< 2 pulses in a frame of 64 samples. * * All pulses can have two (2) possible amplitudes: +1 or -1. * Each pulse can have 32 possible positions. * * Returns: * void */ void E_ACELP_2t(Float32 dn[], Float32 cn[], Float32 H[], Word16 code[], Float32 y[], Word32 *index) { Word32 i, j, k, i0, i1, ix, iy, pos = 0, pos2; Float32 ps, psk, ps1, ps2, alpk, alp1, alp2, sq; Float32 s, cor, alp, val; Float32 *p0, *p1, *p2, *psign; Float32 *h, *h_inv, *ptr_h1, *ptr_h2, *ptr_hf; static Float32 sign[L_SUBFR], vec[L_SUBFR], dn2[L_SUBFR]; static Float32 h_buf[4 * L_SUBFR]; static Float32 rrixix[2][32]; static Float32 rrixiy[1024]; /* * Find sign for each pulse position. */ alp = 2.0; /* calculate energy for normalization of cn[] and dn[] */ val = 1.0; cor = 1.0; for(i = 0; i < L_SUBFR; i++) { val += cn[i] * cn[i]; } for(i = 0; i < L_SUBFR; i++) { cor += dn[i] * dn[i]; } s = (Float32)sqrt(cor / val); for(i = 0; i < 2; i++) { for(j = i; j < L_SUBFR; j += 2) { val = dn[j]; cor = (s * cn[j]) + (alp * val); if(cor >= 0.0) { sign[j] = 1.0; vec[j] = -1.0; } else { sign[j] = -1.0; vec[j] = 1.0; val = -val; cor = -cor; } dn[j] = val; /* modify dn[] according to the fixed sign */ dn2[j] = cor; } } /* * Select 16 position per track according to dn2[]. */ for(i = 0; i < 2; i++) { for(k = 0; k < 16; k++) { ps = -1; for(j = i; j < L_SUBFR; j += 2) { if(dn2[j] > ps) { ps = dn2[j]; pos = j; } } dn2[pos] = (Float32)k - 16; /* dn2 < 0 when position is selected */ } } /* * Compute h_inv[i]. */ h = h_buf; h_inv = h_buf + (2 * L_SUBFR); for(i = 0; i < L_SUBFR; i++) { *h++ = 0.0F; *h_inv++ = 0.0F; } for(i = 0; i < L_SUBFR; i++) { h[i] = H[i]; h_inv[i] = -h[i]; } /* * Compute rrixix[][] needed for the codebook search. */ /* Init pointers to last position of rrixix[] */ p0 = &rrixix[0][32 - 1]; p1 = &rrixix[1][32 - 1]; ptr_h1 = h; cor = 0.0F; for(i = 0; i < 32; i++) { cor += (*ptr_h1) * (*ptr_h1); ptr_h1++; *p1-- = cor * 0.5F; cor += (*ptr_h1) * (*ptr_h1); ptr_h1++; *p0-- = cor * 0.5F; } /* * Compute rrixiy[][] needed for the codebook search. */ pos = 1024 - 1; pos2 = 1024 - 2; ptr_hf = h + 1; for(k = 0; k < 32; k++) { p1 = &rrixiy[pos]; p0 = &rrixiy[pos2]; cor = 0.0; ptr_h1 = h; ptr_h2 = ptr_hf; for(i = k + 1; i < 32; i++) { cor += (*ptr_h1) * (*ptr_h2); ptr_h1++; ptr_h2++; *p1 = cor; cor += (*ptr_h1) * (*ptr_h2); ptr_h1++; ptr_h2++; *p0 = cor; p1 -= (32 + 1); p0 -= (32 + 1); } cor += (*ptr_h1) * (*ptr_h2); ptr_h1++; ptr_h2++; *p1 = cor; pos -= 32; pos2--; ptr_hf += 2; } /* * Modification of rrixiy[][] to take signs into account. */ p0 = rrixiy; for(i = 0; i < L_SUBFR; i += 2) { psign = sign; if(psign[i] < 0.0) { psign = vec; } for(j = 1; j < L_SUBFR; j += 2) { *p0 = *p0 * psign[j]; p0++; } } /* * search 2 pulses: * --------------- * 32 pos x 32 pos = 1024 tests (all combinations are tested) */ p0 = rrixix[0]; p1 = rrixix[1]; p2 = rrixiy; psk = -1.0; alpk = 1.0; ix = 0; iy = 1; for(i0 = 0; i0 < L_SUBFR; i0 += 2) { ps1 = dn[i0]; alp1 = (*p0++); pos = -1; for(i1 = 1; i1 < L_SUBFR; i1 += 2) { ps2 = ps1 + dn[i1]; alp2 = alp1 + (*p1++) + (*p2++); sq = ps2 * ps2; s = (alpk * sq) - (psk * alp2); if(s > 0.0) { psk = sq; alpk = alp2; pos = i1; } } p1 -= 32; if(pos >= 0) { ix = i0; iy = pos; } } /* * Build the codeword, the filtered codeword and index of codevector. */ memset(code, 0, L_SUBFR * sizeof(Word16)); i0 = ix / 2; /* pos of pulse 1 (0..31) */ i1 = iy / 2; /* pos of pulse 2 (0..31) */ if(sign[ix] > 0.0) { code[ix] = 512; p0 = h - ix; } else { code[ix] = -512; i0 += 32; p0 = h_inv - ix; } if(sign[iy] > 0.0) { code[iy] = 512; p1 = h - iy; } else { code[iy] = -512; i1 += 32; p1 = h_inv - iy; } *index = (i0 << 6) + i1; for(i = 0; i < L_SUBFR; i++) { y[i] = (*p0++) + (*p1++); } return; } /* * E_ACELP_4t * * Parameters: * dn I: corr. between target and h[]. * cn I: residual after Word32 term prediction * H I: impulse response of weighted synthesis filter (Q12) * code O: algebraic (fixed) codebook excitation (Q9) * y O: filtered fixed codebook excitation (Q9) * nbbits I: 20, 36, 44, 52, 64, 72 or 88 bits * mode I: speech mode * _index O: index * * Function: * 20, 36, 44, 52, 64, 72, 88 bits algebraic codebook. * 4 tracks x 16 positions per track = 64 samples. * * 20 bits 5 + 5 + 5 + 5 --> 4 pulses in a frame of 64 samples. * 36 bits 9 + 9 + 9 + 9 --> 8 pulses in a frame of 64 samples. * 44 bits 13 + 9 + 13 + 9 --> 10 pulses in a frame of 64 samples. * 52 bits 13 + 13 + 13 + 13 --> 12 pulses in a frame of 64 samples. * 64 bits 2 + 2 + 2 + 2 + 14 + 14 + 14 + 14 --> * 16 pulses in a frame of 64 samples. * 72 bits 10 + 2 + 10 + 2 + 10 + 14 + 10 + 14 --> * 18 pulses in a frame of 64 samples. * 88 bits 11 + 11 + 11 + 11 + 11 + 11 + 11 + 11 --> * 24 pulses in a frame of 64 samples. * * All pulses can have two (2) possible amplitudes: +1 or -1. * Each pulse can sixteen (16) possible positions. * * Returns: * void */ void E_ACELP_4t(Float32 dn[], Float32 cn[], Float32 H[], Word16 code[], Float32 y[], Word32 nbbits, Word16 mode, Word32 _index[]) { Float32 sign[L_SUBFR], vec[L_SUBFR]; Float32 cor_x[16], cor_y[16], h_buf[4 * L_SUBFR]; Float32 rrixix[4][16]; Float32 rrixiy[4][256]; Float32 dn2[L_SUBFR]; Word32 ind[NPMAXPT*4]; Word32 codvec[NB_PULSE_MAX]; Word32 nbpos[10]; Word32 pos_max[4]; Word32 dn2_pos[8 * 4]; UWord8 ipos[NB_PULSE_MAX]; Word32 i, j, k, st, pos = 0, index, track, nb_pulse = 0, nbiter = 4; Word32 L_index; Float32 psk, ps, alpk, alp = 0.0F; Float32 val; Float32 s, cor; Float32 *p0, *p1, *p2, *p3, *psign; Float32 *h, *h_inv, *ptr_h1, *ptr_h2, *ptr_hf; switch (nbbits) { case 20: /* 20 bits, 4 pulses, 4 tracks */ nbiter = 4; /* 4x16x16=1024 loop */ alp = 2.0; nb_pulse = 4; nbpos[0] = 4; nbpos[1] = 8; break; case 36: /* 36 bits, 8 pulses, 4 tracks */ nbiter = 4; /* 4x20x16=1280 loop */ alp = 1.0; /* coeff for sign setting */ nb_pulse = 8; nbpos[0] = 4; nbpos[1] = 8; nbpos[2] = 8; break; case 44: /* 44 bits, 10 pulses, 4 tracks */ nbiter = 4; /* 4x26x16=1664 loop */ alp = 1.0; nb_pulse = 10; nbpos[0] = 4; nbpos[1] = 6; nbpos[2] = 8; nbpos[3] = 8; break; case 52: /* 52 bits, 12 pulses, 4 tracks */ nbiter = 4; /* 4x26x16=1664 loop */ alp = 1.0; nb_pulse = 12; nbpos[0] = 4; nbpos[1] = 6; nbpos[2] = 8; nbpos[3] = 8; break; case 64: /* 64 bits, 16 pulses, 4 tracks */ nbiter = 3; /* 3x36x16=1728 loop */ alp = 0.8F; nb_pulse = 16; nbpos[0] = 4; nbpos[1] = 4; nbpos[2] = 6; nbpos[3] = 6; nbpos[4] = 8; nbpos[5] = 8; break; case 72: /* 72 bits, 18 pulses, 4 tracks */ nbiter = 3; /* 3x35x16=1680 loop */ alp = 0.75F; nb_pulse = 18; nbpos[0] = 2; nbpos[1] = 3; nbpos[2] = 4; nbpos[3] = 5; nbpos[4] = 6; nbpos[5] = 7; nbpos[6] = 8; break; case 88: /* 88 bits, 24 pulses, 4 tracks */ if (mode > MODE_23k) { nbiter = 1; } else { nbiter = 2; /* 2x53x16=1696 loop */ } alp = 0.5; nb_pulse = 24; nbpos[0] = 2; nbpos[1] = 2; nbpos[2] = 3; nbpos[3] = 4; nbpos[4] = 5; nbpos[5] = 6; nbpos[6] = 7; nbpos[7] = 8; nbpos[8] = 8; nbpos[9] = 8; break; } /* * Find sign for each pulse position. */ /* calculate energy for normalization of cn[] and dn[] */ val = (cn[0] * cn[0]) + 1.0F; cor = (dn[0] * dn[0]) + 1.0F; for (i = 1; i < L_SUBFR; i += 7) { val += (cn[i] * cn[i]); cor += (dn[i] * dn[i]); val += (cn[i + 1] * cn[i + 1]); cor += (dn[i + 1] * dn[i + 1]); val += (cn[i + 2] * cn[i + 2]); cor += (dn[i + 2] * dn[i + 2]); val += (cn[i + 3] * cn[i + 3]); cor += (dn[i + 3] * dn[i + 3]); val += (cn[i + 4] * cn[i + 4]); cor += (dn[i + 4] * dn[i + 4]); val += (cn[i + 5] * cn[i + 5]); cor += (dn[i + 5] * dn[i + 5]); val += (cn[i + 6] * cn[i + 6]); cor += (dn[i + 6] * dn[i + 6]); } s = (Float32)sqrt(cor / val); for (j = 0; j < L_SUBFR; j++) { cor = (s * cn[j]) + (alp * dn[j]); if (cor >= 0.0F) { sign[j] = 1.0F; vec[j] = -1.0F; dn2[j] = cor; /* dn2[] = mix of dn[] and cn[] */ } else { sign[j] = -1.0F; vec[j] = 1.0F; dn[j] = -dn[j]; /* modify dn[] according to the fixed sign */ dn2[j] = -cor; /* dn2[] = mix of dn[] and cn[] */ } } /* * Select 8 position per track according to dn2[]. */ for (i = 0; i < 4; i++) { for (k = 0; k < 8; k++) { ps = -1; for (j = i; j < L_SUBFR; j += 4) { if (dn2[j] > ps) { ps = dn2[j]; pos = j; } } dn2[pos] = (Float32)k - 8; /* dn2 < 0 when position is selected */ dn2_pos[i * 8 + k] = pos; } pos_max[i] = dn2_pos[i * 8]; } /* * Compute h_inv[i]. */ memset(h_buf, 0, L_SUBFR * sizeof(Float32)); memset(h_buf + (2 * L_SUBFR), 0, L_SUBFR * sizeof(Float32)); h = h_buf + L_SUBFR; h_inv = h_buf + (3 * L_SUBFR); memcpy(h, H, L_SUBFR * sizeof(Float32)); h_inv[0] = -h[0]; h_inv[1] = -h[1]; h_inv[2] = -h[2]; h_inv[3] = -h[3]; for(i = 4; i < L_SUBFR; i += 6) { h_inv[i] = -h[i]; h_inv[i + 1] = -h[i + 1]; h_inv[i + 2] = -h[i + 2]; h_inv[i + 3] = -h[i + 3]; h_inv[i + 4] = -h[i + 4]; h_inv[i + 5] = -h[i + 5]; } /* * Compute rrixix[][] needed for the codebook search. */ /* storage order --> i3i3, i2i2, i1i1, i0i0 */ /* Init pointers to last position of rrixix[] */ p0 = &rrixix[0][16 - 1]; p1 = &rrixix[1][16 - 1]; p2 = &rrixix[2][16 - 1]; p3 = &rrixix[3][16 - 1]; ptr_h1 = h; cor = 0.0F; for(i = 0; i < 16; i++) { cor += (*ptr_h1) * (*ptr_h1); ptr_h1++; *p3-- = cor * 0.5F; cor += (*ptr_h1) * (*ptr_h1); ptr_h1++; *p2-- = cor * 0.5F; cor += (*ptr_h1) * (*ptr_h1); ptr_h1++; *p1-- = cor * 0.5F; cor += (*ptr_h1) * (*ptr_h1); ptr_h1++; *p0-- = cor * 0.5F; } /* * Compute rrixiy[][] needed for the codebook search. */ /* storage order --> i2i3, i1i2, i0i1, i3i0 */ pos = 256 - 1; ptr_hf = h + 1; for(k = 0; k < 16; k++) { p3 = &rrixiy[2][pos]; p2 = &rrixiy[1][pos]; p1 = &rrixiy[0][pos]; p0 = &rrixiy[3][pos - 16]; cor = 0.0F; ptr_h1 = h; ptr_h2 = ptr_hf; for(i = k + 1; i < 16; i++) { cor += (*ptr_h1) * (*ptr_h2); ptr_h1++; ptr_h2++; *p3 = cor; cor += (*ptr_h1) * (*ptr_h2); ptr_h1++; ptr_h2++; *p2 = cor; cor += (*ptr_h1) * (*ptr_h2); ptr_h1++; ptr_h2++; *p1 = cor; cor += (*ptr_h1) * (*ptr_h2); ptr_h1++; ptr_h2++; *p0 = cor; p3 -= (16 + 1); p2 -= (16 + 1); p1 -= (16 + 1); p0 -= (16 + 1); } cor += (*ptr_h1) * (*ptr_h2); ptr_h1++; ptr_h2++; *p3 = cor; cor += (*ptr_h1) * (*ptr_h2); ptr_h1++; ptr_h2++; *p2 = cor; cor += (*ptr_h1) * (*ptr_h2); ptr_h1++; ptr_h2++; *p1 = cor; pos -= 16; ptr_hf += 4; } /* storage order --> i3i0, i2i3, i1i2, i0i1 */ pos = 256 - 1; ptr_hf = h + 3; for(k = 0; k < 16; k++) { p3 = &rrixiy[3][pos]; p2 = &rrixiy[2][pos - 1]; p1 = &rrixiy[1][pos - 1]; p0 = &rrixiy[0][pos - 1]; cor = 0.0F; ptr_h1 = h; ptr_h2 = ptr_hf; for(i= k + 1; i < 16; i++ ) { cor += (*ptr_h1) * (*ptr_h2); ptr_h1++; ptr_h2++; *p3 = cor; cor += (*ptr_h1) * (*ptr_h2); ptr_h1++; ptr_h2++; *p2 = cor; cor += (*ptr_h1) * (*ptr_h2); ptr_h1++; ptr_h2++; *p1 = cor; cor += (*ptr_h1) * (*ptr_h2); ptr_h1++; ptr_h2++; *p0 = cor; p3 -= (16 + 1); p2 -= (16 + 1); p1 -= (16 + 1); p0 -= (16 + 1); } cor += (*ptr_h1) * (*ptr_h2); ptr_h1++; ptr_h2++; *p3 = cor; pos--; ptr_hf += 4; } /* * Modification of rrixiy[][] to take signs into account. */ p0 = &rrixiy[0][0]; for (k = 0; k < 4; k++) { for(i = k; i < L_SUBFR; i += 4) { psign = sign; if (psign[i] < 0.0F) { psign = vec; } j = (k + 1) % 4; p0[0] = p0[0] * psign[j]; p0[1] = p0[1] * psign[j + 4]; p0[2] = p0[2] * psign[j + 8]; p0[3] = p0[3] * psign[j + 12]; p0[4] = p0[4] * psign[j + 16]; p0[5] = p0[5] * psign[j + 20]; p0[6] = p0[6] * psign[j + 24]; p0[7] = p0[7] * psign[j + 28]; p0[8] = p0[8] * psign[j + 32]; p0[9] = p0[9] * psign[j + 36]; p0[10] = p0[10] * psign[j + 40]; p0[11] = p0[11] * psign[j + 44]; p0[12] = p0[12] * psign[j + 48]; p0[13] = p0[13] * psign[j + 52]; p0[14] = p0[14] * psign[j + 56]; p0[15] = p0[15] * psign[j + 60]; p0 += 16; } } /* * Deep first search: * ------------------ * 20 bits (4p): 4 iter x ((4x16)+(8x16)) = 768 tests * 36 bits (8p): 4 iter x ((1x1)+(4x16)+(8x16)+(8x16)) = 1280 tests * 52 bits (12p): 3 iter x ((1x1)+(1x1)+(4x16)+(6x16) * +(8x16)+(8x16)) = 1248 tests * 64 bits (16p): 2 iter x ((1x1)+(1x1)+(4x16)+(6x16) * +(6x16)+(8x16)+(8x16)+(8x16)) = 1280 tests */ psk = -1.0; alpk = 1.0; for (k = 0; k < nbiter; k++) { for (i = 0; i < nb_pulse - (nb_pulse % 3); i += 3) { ipos[i] = E_ROM_tipos[(k * 4) + i]; ipos[i + 1] = E_ROM_tipos[(k * 4) + i + 1]; ipos[i + 2] = E_ROM_tipos[(k * 4) + i + 2]; } for (; i < nb_pulse; i ++) { ipos[i] = E_ROM_tipos[(k * 4) + i]; } if (nbbits == 20) { pos = 0; ps = 0.0F; alp = 0.0F; memset(vec, 0, L_SUBFR * sizeof(Float32)); } else if ((nbbits == 36) | (nbbits == 44)) { /* first stage: fix 2 pulses */ pos = 2; ind[0] = pos_max[ipos[0]]; ind[1] = pos_max[ipos[1]]; ps = dn[ind[0]] + dn[ind[1]]; alp = rrixix[ipos[0]][ind[0] >> 2] + rrixix[ipos[1]][ind[1] >> 2] + rrixiy[ipos[0]][((ind[0] >> 2) << 4) + (ind[1] >> 2)]; if (sign[ind[0]] < 0.0) { p0 = h_inv - ind[0]; } else { p0 = h - ind[0]; } if (sign[ind[1]] < 0.0) { p1 = h_inv - ind[1]; } else { p1 = h - ind[1]; } vec[0] = p0[0] + p1[0]; vec[1] = p0[1] + p1[1]; vec[2] = p0[2] + p1[2]; vec[3] = p0[3] + p1[3]; for (i = 4; i < L_SUBFR; i += 6) { vec[i] = p0[i] + p1[i]; vec[i + 1] = p0[i + 1] + p1[i + 1]; vec[i + 2] = p0[i + 2] + p1[i + 2]; vec[i + 3] = p0[i + 3] + p1[i + 3]; vec[i + 4] = p0[i + 4] + p1[i + 4]; vec[i + 5] = p0[i + 5] + p1[i + 5]; } if (nbbits == 44) { ipos[8] = 0; ipos[9] = 1; } } else { /* first stage: fix 4 pulses */ pos = 4; ind[0] = pos_max[ipos[0]]; ind[1] = pos_max[ipos[1]]; ind[2] = pos_max[ipos[2]]; ind[3] = pos_max[ipos[3]]; ps = dn[ind[0]] + dn[ind[1]] + dn[ind[2]] + dn[ind[3]]; p0 = h - ind[0]; if (sign[ind[0]] < 0.0) { p0 = h_inv - ind[0]; } p1 = h - ind[1]; if (sign[ind[1]] < 0.0) { p1 = h_inv - ind[1]; } p2 = h - ind[2]; if (sign[ind[2]] < 0.0) { p2 = h_inv - ind[2]; } p3 = h - ind[3]; if (sign[ind[3]] < 0.0) { p3 = h_inv - ind[3]; } vec[0] = p0[0] + p1[0] + p2[0] + p3[0]; for (i = 1; i < L_SUBFR; i += 3) { vec[i] = p0[i] + p1[i] + p2[i] + p3[i]; vec[i + 1] = p0[i + 1] + p1[i + 1] + p2[i + 1] + p3[i + 1]; vec[i + 2] = p0[i + 2] + p1[i + 2] + p2[i + 2] + p3[i + 2]; } alp = 0.0F; alp += vec[0] * vec[0] + vec[1] * vec[1]; alp += vec[2] * vec[2] + vec[3] * vec[3]; for (i = 4; i < L_SUBFR; i += 6) { alp += vec[i] * vec[i]; alp += vec[i + 1] * vec[i + 1]; alp += vec[i + 2] * vec[i + 2]; alp += vec[i + 3] * vec[i + 3]; alp += vec[i + 4] * vec[i + 4]; alp += vec[i + 5] * vec[i + 5]; } alp *= 0.5F; if (nbbits == 72) { ipos[16] = 0; ipos[17] = 1; } } /* other stages of 2 pulses */ for (j = pos, st = 0; j < nb_pulse; j += 2, st++) { /* * Calculate correlation of all possible positions * of the next 2 pulses with previous fixed pulses. * Each pulse can have 16 possible positions. */ E_ACELP_h_vec_corr1(h, vec, ipos[j], sign, rrixix, cor_x, dn2_pos, nbpos[st]); E_ACELP_h_vec_corr2(h, vec, ipos[j + 1], sign, rrixix, cor_y); /* * Find best positions of 2 pulses. */ E_ACELP_2pulse_search(nbpos[st], ipos[j], ipos[j + 1], &ps, &alp, &ind[j], &ind[j+1], dn, dn2_pos, cor_x, cor_y, rrixiy); if (j < (nb_pulse - 2)) { p0 = h - ind[j]; if (sign[ind[j]] < 0.0) { p0 = h_inv - ind[j]; } p1 = h - ind[j + 1]; if (sign[ind[j + 1]] < 0.0) { p1 = h_inv - ind[j + 1]; } vec[0] += p0[0] + p1[0]; vec[1] += p0[1] + p1[1]; vec[2] += p0[2] + p1[2]; vec[3] += p0[3] + p1[3]; for (i = 4; i < L_SUBFR; i += 6) { vec[i] += p0[i] + p1[i]; vec[i + 1] += p0[i + 1] + p1[i + 1]; vec[i + 2] += p0[i + 2] + p1[i + 2]; vec[i + 3] += p0[i + 3] + p1[i + 3]; vec[i + 4] += p0[i + 4] + p1[i + 4]; vec[i + 5] += p0[i + 5] + p1[i + 5]; } } } /* memorise the best codevector */ ps = ps * ps; s = (alpk * ps) - (psk * alp); if (s > 0.0F) { psk = ps; alpk = alp; memcpy(codvec, ind, nb_pulse * sizeof(Word32)); } } /* * Build the codeword, the filtered codeword and index of codevector. */ memset(code, 0, L_SUBFR * sizeof(Word16)); memset(y, 0, L_SUBFR * sizeof(Float32)); memset(ind, 0xffffffff, NPMAXPT * 4 * sizeof(Word32)); for (k = 0; k < nb_pulse; k++) { i = codvec[k]; /* read pulse position */ val = sign[i]; /* read sign */ index = i / 4; /* pos of pulse (0..15) */ track = i % 4; if (val > 0) { code[i] += 512; codvec[k] += (2 * L_SUBFR); } else { code[i] -= 512; index += 16; } i = track * NPMAXPT; while (ind[i] >= 0) { i++; } ind[i] = index; p0 = h_inv - codvec[k]; y[0] += p0[0]; for(i = 1; i < L_SUBFR; i += 3) { y[i] += p0[i]; y[i + 1] += p0[i + 1]; y[i + 2] += p0[i + 2]; } } if (nbbits == 20) { for (track = 0; track < 4; track++) { k = track * NPMAXPT; _index[track] = E_ACELP_quant_1p_N1(ind[k], 4); } } else if (nbbits == 36) { for (track = 0; track < 4; track++) { k = track * NPMAXPT; _index[track] = E_ACELP_quant_2p_2N1(ind[k], ind[k + 1], 4); } } else if (nbbits == 44) { for (track = 0; track < (4 - 2); track++) { k = track * NPMAXPT; _index[track] = E_ACELP_quant_3p_3N1(ind[k], ind[k + 1], ind[k + 2], 4); } for (track = 2; track < 4; track++) { k = track * NPMAXPT; _index[track] = E_ACELP_quant_2p_2N1(ind[k], ind[k + 1], 4); } } else if (nbbits == 52) { for (track = 0; track < 4; track++) { k = track*NPMAXPT; _index[track] = E_ACELP_quant_3p_3N1(ind[k], ind[k + 1], ind[k + 2], 4); } } else if (nbbits == 64) { for (track = 0; track < 4; track++) { k = track * NPMAXPT; L_index = E_ACELP_quant_4p_4N(&ind[k], 4); _index[track] = ((L_index >> 14) & 3); _index[track + 4] = (L_index & 0x3FFF); } } else if (nbbits == 72) { for (track=0; track< (4 - 2); track++) { k = track * NPMAXPT; L_index = E_ACELP_quant_5p_5N(&ind[k], 4); _index[track] = ((L_index >> 10) & 0x03FF); _index[track + 4] = (L_index & 0x03FF); } for (track = 2; track < 4; track++) { k = track * NPMAXPT; L_index = E_ACELP_quant_4p_4N(&ind[k], 4); _index[track] = ((L_index >> 14) & 3); _index[track + 4] = (L_index & 0x3FFF); } } else if (nbbits == 88) { for (track = 0; track < 4; track++) { k = track * NPMAXPT; L_index = E_ACELP_quant_6p_6N_2(&ind[k], 4); _index[track] = ((L_index >> 11) & 0x07FF); _index[track + 4] = (L_index & 0x07FF); } } return; } /* * E_ACELP_gains_quantise * * Parameters: * code I: Innovative code vector * nbits I: number of bits (6 or 7) * gain_pit I/O: Pitch gain / Quantized pitch gain * gain_code O: Quantized codebook gain * coeff O: correlations * , -2, , -2, 2 * gp_clip I: gain pitch clipping flag (1 = clipping) * mem I/O: static memory * * Function: * Quantization of pitch and codebook gains. * MA prediction is performed on the innovation energy * (in dB with mean removed). * An initial predicted gain, g_0, is first determined and the correction * factor alpha = gain / g_0 is quantized. * The pitch gain and the correction factor are vector quantized and the * mean-squared weighted error criterion is used in the quantizer search. * Subrame size is L_SUBFR * * Returns: * index of quantizer */ Word32 E_ACELP_gains_quantise(Word16 code[], Word32 nbits, Float32 f_gain_pit, Word16 *gain_pit, Word32 *gain_code, Float32 *coeff, Word32 gp_clip, Word16 *past_qua_en) { Word32 i, j, indice = 0, min_ind, size, L_tmp, gcode_inov, L_gcode0; Word32 exp; Float32 gcode0; Float32 dist, dist_min, g_pitch, g_code, ener_code, pred_code; Float32 coef0, coef1, coef2, coef3, coef4; const Float32 *t_qua_gain, *p; Word16 s_exp, s_gcode0, exp_gcode0, frac; /* * Find the initial quantization pitch index * Set gains search range */ if (nbits == 6) { t_qua_gain = E_ROM_qua_gain6b; min_ind = 0; size = 64; if (gp_clip == 1) { size -= 16; /* limit gain pitch to 1.0 */ } } else { t_qua_gain = E_ROM_qua_gain7b; p = E_ROM_qua_gain7b + 64; /* pt at 1/4th of table */ j = NB_QUA_GAIN7B - 64; if (gp_clip == 1) { j -= 27; /* limit gain pitch to 1.0 */ } min_ind = 0; g_pitch = f_gain_pit; for (i = 0; i < j; i++, p += 2) { if (g_pitch > *p) { min_ind++; } } size = 64; } /* innovation energy */ L_tmp = E_UTIL_dot_product12(code, code, L_SUBFR, &exp); ener_code = (Float32)(L_tmp * pow(2, (exp - 31) - 18)); ener_code = (Float32)(10.0F * log10(ener_code * 0.015625F)); /* exp: -18 (code in Q9), -6 (/L_subfr) */ s_exp = (Word16)(exp - (18 + 6)); E_UTIL_normalised_inverse_sqrt(&L_tmp, &s_exp); if (s_exp > 3) { L_tmp <<= (s_exp - 3); } else { L_tmp >>= (3 - s_exp); } gcode_inov = (Word16)(L_tmp >> 16); /* g_code_inov in Q12 */ /* * Compute gcode0. * = Sum(i=0,1) pred[i] * past_qua_en[i] + mean_ener - ener_code */ /* MEAN_ENER in Q24 = 0x1e000000 */ /* MA prediction coeff = {0.5, 0.4, 0.3, 0.2} in Q13 */ L_tmp = 0xF000000 + 4096 * past_qua_en[0]; /* Q13 * Q10 -> Q24 */ L_tmp = L_tmp + 3277 * past_qua_en[1]; /* Q13 * Q10 -> Q24 */ L_tmp = L_tmp + 2458 * past_qua_en[2]; /* Q13 * Q10 -> Q24 */ L_tmp = L_tmp + 1638 * past_qua_en[3]; /* Q13 * Q10 -> Q24 */ L_gcode0 = L_tmp >> 15; /* From Q24 to Q8 */ pred_code = (Float32)(L_gcode0 * pow(2, -8)); /* * gcode0 = pow(10.0, gcode0/20) * = pow(2, 3.321928*gcode0/20) * = pow(2, 0.166096*gcode0) */ L_tmp = (L_gcode0 * 5443) >> 7; /* *0.166096 in Q15 -> Q24, From Q24 to Q16 */ E_UTIL_l_extract(L_tmp, &exp_gcode0, &frac); /* Extract exponant of gcode0 */ s_gcode0 = (Word16)(E_UTIL_pow2(14, frac)); /* Put 14 as exponant so that */ /* * output of Pow2() will be: * 16384 < Pow2() <= 32767 */ exp_gcode0 = (Word16)(exp_gcode0 - 14); /* Search for best quantizer */ gcode0 = pred_code - ener_code; gcode0 = (Float32)pow(10.0, gcode0 * 0.05F); /* predicted gain */ dist_min = FLT_MAX; p = t_qua_gain + min_ind * 2; coef0 = coeff[0]; coef1 = coeff[1]; coef2 = coeff[2]; coef3 = coeff[3]; coef4 = coeff[4]; for (i = 0; i < size; i++) { g_pitch = *p++; /* pitch gain */ g_code = gcode0 * *p++; /* codebook gain */ dist = g_pitch * g_pitch * coef0 + g_pitch * coef1 + g_code * g_code * coef2 + g_code * coef3 + g_pitch * g_code * coef4; if (dist < dist_min) { dist_min = dist; indice = i; } } indice += min_ind; *gain_pit = (Word16)floor(t_qua_gain[indice * 2] * (1 << 14) + 0.5F); L_tmp = (Word32)floor(t_qua_gain[indice * 2 + 1] * (1 << 11) + 0.5F); L_tmp = E_UTIL_saturate(L_tmp); L_tmp *= s_gcode0; exp_gcode0 += 5; if (exp_gcode0 >= 0) { *gain_code = L_tmp << exp_gcode0; /* gain of code in Q16 */ } else { *gain_code = L_tmp >> -exp_gcode0; /* gain of code in Q16 */ } /* adjust gain according to energy of code */ E_UTIL_l_extract((Word32)*gain_code, &s_exp, &frac); L_tmp = E_UTIL_mpy_32_16(s_exp, frac, (Word16)gcode_inov); if (L_tmp < 0xFFFFFFF) { *gain_code = L_tmp << 3; /* gcode_inov in Q12 */ } else { *gain_code = 0x7FFFFFFF; } /* * qua_ener = 20*log10(g_code) * = 6.0206*log2(g_code) * = 6.0206*(log2(g_codeQ11) - 11) */ L_tmp = (Word32)floor(t_qua_gain[indice * 2 + 1] * (1 << 11) + 0.5F); L_tmp = E_UTIL_saturate(L_tmp); E_UTIL_log2_32(L_tmp, &s_exp, &frac); s_exp = (Word16)(s_exp - 11); L_tmp = E_UTIL_mpy_32_16(s_exp, frac, 24660); /* x 6.0206 in Q12 */ /* update table of past quantized energies */ past_qua_en[3] = past_qua_en[2]; past_qua_en[2] = past_qua_en[1]; past_qua_en[1] = past_qua_en[0]; past_qua_en[0] = (Word16)(L_tmp >> 3); /* result in Q10 */ return indice; } h323plus/plugins/audio/G.722.2/G.722.2_2005.vcproj0000644000175000017500000001574311341106231017264 0ustar markmark h323plus/plugins/audio/G.722.2/G.722.2_2008.vcproj0000644000175000017500000001612511341106231017262 0ustar markmark h323plus/plugins/audio/VoiceAgeG729/0000755000175000017500000000000011341106247015723 5ustar markmarkh323plus/plugins/audio/VoiceAgeG729/g729codec.c0000644000175000017500000005233711341106247017567 0ustar markmark/* * Voice Age G.729A codec for OpenH323/OPAL * * Copyright (C) 2004 Post Increment, All Rights Reserved * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Post Increment * * Contributor(s): ______________________________________. * * $Revision: 1.1 $ * $Author: shorne $ * $Date: 2010/02/24 02:19:19 $ */ #include #include #include #ifdef _WIN32_WCE #include "va_g729_ARM/typedef.h" #include "va_g729_ARM/g729ab_if.h" #define SUPPORT_VAD 0 #else // _WIN32_WCE #include "va_g729/va_g729.h" #define SUPPORT_VAD 0 // All of PWLib/OpenH323 use MSVCRT.LIB or MSVCRTD.LIB, but vag729a.lib uses // libcmt.lib, so we need to tell the linker to ignore it, can't have two // Run Time libraries! #pragma comment(linker, "/NODEFAULTLIB:libcmt.lib") static int encoderInUse = 0; static int decoderInUse = 0; #endif // _WIN32_WCE #define SAMPLES_PER_FRAME 80 #define BYTES_PER_FRAME 10 #define MICROSECONDSPERFRAME 10000 #define BITS_PER_SECOND 8000 #define MY_VERSION PLUGIN_CODEC_VERSION_OPTIONS static struct PluginCodec_information licenseInfo = { 1073619586, // timestamp = Fri 09 Jan 2004 03:39:46 AM UTC = "Craig Southeren, Post Increment", // source code author "1.0", // source code version "craigs@postincrement.com", // source code email "http://www.postincrement.com", // source code URL "Copyright (C) 2004 by Post Increment, All Rights Reserved", // source code copyright "MPL 1.0", // source code license PluginCodec_License_MPL, // source code license "G.729A", // codec description "VoiceAge Corporation", // codec author NULL, // codec version NULL, // codec email "http://www.voiceage.com", // codec URL "Copyright (C) 1995-2001 VoiceAge Corporation. All Rights Reserved", // codec copyright information "NULL", // codec license PluginCodec_License_ResearchAndDevelopmentUseOnly // codec license code }; static const char L16Desc[] = { "L16" }; static const char g729Descr[] = { "VoiceAge G729" }; static const char g729ADescr[] = { "VoiceAge G729A" }; static const char g729MediaFmt[] = { "G.729" }; static const char g729AMediaFmt[] = { "G.729A" }; #if SUPPORT_VAD static const char g729BMediaFmt[] = { "G.729B" }; static const char g729ABMediaFmt[] = { "G.729A/B" }; #endif static const char ianaName[] = { "G729" }; #define IANACODE 18 static const char VADStr[] = "VAD"; static struct PluginCodec_Option const NoVADOption = { PluginCodec_EnumOption, // PluginCodec_OptionTypes VADStr, // Generic (human readable) option name 0, // Read Only flag PluginCodec_MinMerge, // Merge mode "no", // Initial value "annexb", // SIP/SDP FMTP name "yes", // SIP/SDP FMTP default value (option not included in FMTP if have this value) 0, // H.245 generic capability code and bit mask "no:yes" // Enum values }; static struct PluginCodec_Option const * const NoVADOptionTable[] = { &NoVADOption, NULL }; #if SUPPORT_VAD static struct PluginCodec_Option const VADOption = { PluginCodec_EnumOption, // PluginCodec_OptionTypes VADStr, // Generic (human readable) option name 0, // Read Only flag PluginCodec_MinMerge, // Merge mode "yes", // Initial value "annexb", // SIP/SDP FMTP name "yes", // SIP/SDP FMTP default value (option not included in FMTP if have this value) 0, // H.245 generic capability code and bit mask "no:yes" // Enum values, single string of value separated by colons }; static struct PluginCodec_Option const * const VADOptionTable[] = { &VADOption, NULL }; #endif ///////////////////////////////////////////////////////////////////////////// static void * create_encoder(const struct PluginCodec_Definition * codec) { #ifdef _WIN32_WCE void * context = malloc(E_IF_g729ab_queryBlockSize()); if (context == NULL) return NULL; if (E_IF_g729ab_init(context) == 0) return context; free(context); return NULL; #else if (encoderInUse) return NULL; va_g729a_init_encoder(); encoderInUse = 1; return (void *)1; #endif } static int codec_encoder(const struct PluginCodec_Definition * codec, void * context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { if (*fromLen < SAMPLES_PER_FRAME*2 || *toLen < BYTES_PER_FRAME) return 0; #ifdef _WIN32_WCE { UWord8 buffer[BYTES_PER_FRAME+1]; if (E_IF_g729ab_encode(context, (Word16 *)from, buffer, toLen, 0) != 0) return 0; memcpy(to, &buffer[1], BYTES_PER_FRAME); } #else va_g729a_encoder((short *)from, (unsigned char *)to); #endif *fromLen = SAMPLES_PER_FRAME*2; *toLen = BYTES_PER_FRAME; return 1; } static void destroy_encoder(const struct PluginCodec_Definition * codec, void * context) { #ifdef _WIN32_WCE free(context); #else encoderInUse = 0; #endif } static void * create_decoder(const struct PluginCodec_Definition * codec) { #ifdef _WIN32_WCE void * context = malloc(D_IF_g729ab_queryBlockSize()); if (context == NULL) return NULL; if (D_IF_g729ab_init(context) == 0) return context; free(context); return NULL; #else if (decoderInUse) return NULL; decoderInUse = 1; va_g729a_init_decoder(); return (void *)1; #endif } static int codec_decoder(const struct PluginCodec_Definition * codec, void * context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { if (*fromLen < BYTES_PER_FRAME || *toLen < SAMPLES_PER_FRAME*2) return 0; #ifdef _WIN32_WCE { UWord8 buffer[BYTES_PER_FRAME+1]; buffer[0] = 2; memcpy(&buffer[1], from, BYTES_PER_FRAME); if (D_IF_g729ab_decode(context, buffer, (Word16 *)to, 0) != 0) return 0; } #else va_g729a_decoder((unsigned char *)from, (short *)to, 0); #endif *fromLen = BYTES_PER_FRAME; *toLen = SAMPLES_PER_FRAME*2; return 1; } static void destroy_decoder(const struct PluginCodec_Definition * codec, void * context) { #ifdef _WIN32_WCE free(context); #else decoderInUse = 0; #endif } static int get_codec_options(const struct PluginCodec_Definition * defn, void * context, const char * name, void * parm, unsigned * parmLen) { if (parm == NULL || parmLen == NULL || *parmLen != sizeof(struct PluginCodec_Option **)) return 0; *(struct PluginCodec_Option const * const * *)parm = NoVADOptionTable; //defn->userData; return 1; } #if SUPPORT_VAD static int set_codec_options(const struct PluginCodec_Definition * defn, void * context, const char * name, void * parm, unsigned * parmLen) { const char * const * option; int vad; if (context == NULL || parm == NULL || parmLen == NULL || *parmLen != sizeof(const char **)) return 0; for (option = (const char * const *)parm; *option != NULL; option += 2) { if (_stricmp(option[0], VADStr) == 0) vad = atoi(option[1]) != 0; } return 1; } #endif ///////////////////////////////////////////////////////////////////////////// static struct PluginCodec_ControlDefn controlDefn[] = { { PLUGINCODEC_CONTROL_GET_CODEC_OPTIONS, get_codec_options }, #if SUPPORT_VAD { PLUGINCODEC_CONTROL_SET_CODEC_OPTIONS, set_codec_options }, #endif { NULL } }; static struct PluginCodec_Definition CodecDefn[] = { #if SUPPORT_VAD { // encoder MY_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeExplicit, // explicit RTP type g729Descr, // text decription L16Desc, g729BMediaFmt, VADOptionTable, // user data 8000, // samples per second BITS_PER_SECOND, // raw bits per second MICROSECONDSPERFRAME, // microseconds per frame SAMPLES_PER_FRAME, // samples per frame 10, // bytes per frame 6, // recommended number of frames per packet 24, // maximum number of frames per packet IANACODE, // IANA RTP payload code ianaName, // RTP Payload name create_encoder, // create codec function destroy_encoder, // destroy codec codec_encoder, // encode/decode controlDefn, // codec controls PluginCodec_H323AudioCodec_g729, // h323CapabilityType NULL // h323CapabilityData }, { // decoder MY_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeExplicit, // explicit RTP type g729Descr, // text decription g729BMediaFmt, L16Desc, VADOptionTable, // user data 8000, // samples per second BITS_PER_SECOND, // raw bits per second MICROSECONDSPERFRAME, // microseconds per frame SAMPLES_PER_FRAME, // samples per frame BYTES_PER_FRAME, // bytes per frame 6, // recommended number of frames per packet 24, // maximum number of frames per packet IANACODE, // IANA RTP payload code ianaName, // RTP Payload name create_decoder, // create codec function destroy_decoder, // destroy codec codec_decoder, // encode/decode controlDefn, // codec controls PluginCodec_H323AudioCodec_g729, // h323CapabilityType NULL // h323CapabilityData }, { // encoder MY_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeExplicit, // explicit RTP type g729ADescr, // text decription L16Desc, g729ABMediaFmt, VADOptionTable, // user data 8000, // samples per second BITS_PER_SECOND, // raw bits per second MICROSECONDSPERFRAME, // microseconds per frame SAMPLES_PER_FRAME, // samples per frame BYTES_PER_FRAME, // bytes per frame 6, // recommended number of frames per packet 24, // maximum number of frames per packet IANACODE, // IANA RTP payload code ianaName, // RTP Payload name create_encoder, // create codec function destroy_encoder, // destroy codec codec_encoder, // encode/decode controlDefn, // codec controls PluginCodec_H323AudioCodec_g729AnnexA, // h323CapabilityType NULL // h323CapabilityData }, { // decoder MY_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeExplicit, // explicit RTP type g729ADescr, // text decription g729ABMediaFmt, L16Desc, VADOptionTable, // user data 8000, // samples per second BITS_PER_SECOND, // raw bits per second MICROSECONDSPERFRAME, // microseconds per frame SAMPLES_PER_FRAME, // samples per frame BYTES_PER_FRAME, // bytes per frame 6, // recommended number of frames per packet 24, // maximum number of frames per packet IANACODE, // IANA RTP payload code ianaName, // RTP Payload name create_decoder, // create codec function destroy_decoder, // destroy codec codec_decoder, // encode/decode controlDefn, // codec controls PluginCodec_H323AudioCodec_g729AnnexA, // h323CapabilityType NULL // h323CapabilityData }, #endif { // encoder MY_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeExplicit, // explicit RTP type g729Descr, // text decription L16Desc, g729MediaFmt, NoVADOptionTable, // user data 8000, // samples per second BITS_PER_SECOND, // raw bits per second MICROSECONDSPERFRAME, // microseconds per frame SAMPLES_PER_FRAME, // samples per frame 10, // bytes per frame 6, // recommended number of frames per packet 24, // maximum number of frames per packet IANACODE, // IANA RTP payload code ianaName, // RTP Payload name create_encoder, // create codec function destroy_encoder, // destroy codec codec_encoder, // encode/decode controlDefn, // codec controls PluginCodec_H323AudioCodec_g729, // h323CapabilityType NULL // h323CapabilityData }, { // decoder MY_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeExplicit, // explicit RTP type g729Descr, // text decription g729MediaFmt, L16Desc, NoVADOptionTable, // user data 8000, // samples per second BITS_PER_SECOND, // raw bits per second MICROSECONDSPERFRAME, // microseconds per frame SAMPLES_PER_FRAME, // samples per frame BYTES_PER_FRAME, // bytes per frame 6, // recommended number of frames per packet 24, // maximum number of frames per packet IANACODE, // IANA RTP payload code ianaName, // RTP Payload name create_decoder, // create codec function destroy_decoder, // destroy codec codec_decoder, // encode/decode controlDefn, // codec controls PluginCodec_H323AudioCodec_g729, // h323CapabilityType NULL // h323CapabilityData }, { // encoder MY_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeExplicit, // explicit RTP type g729ADescr, // text decription L16Desc, g729AMediaFmt, NoVADOptionTable, // user data 8000, // samples per second BITS_PER_SECOND, // raw bits per second MICROSECONDSPERFRAME, // microseconds per frame SAMPLES_PER_FRAME, // samples per frame BYTES_PER_FRAME, // bytes per frame 6, // recommended number of frames per packet 24, // maximum number of frames per packet IANACODE, // IANA RTP payload code ianaName, // RTP Payload name create_encoder, // create codec function destroy_encoder, // destroy codec codec_encoder, // encode/decode controlDefn, // codec controls PluginCodec_H323AudioCodec_g729AnnexA, // h323CapabilityType NULL // h323CapabilityData }, { // decoder MY_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeExplicit, // explicit RTP type g729ADescr, // text decription g729AMediaFmt, L16Desc, NoVADOptionTable, // user data 8000, // samples per second BITS_PER_SECOND, // raw bits per second MICROSECONDSPERFRAME, // microseconds per frame SAMPLES_PER_FRAME, // samples per frame BYTES_PER_FRAME, // bytes per frame 6, // recommended number of frames per packet 24, // maximum number of frames per packet IANACODE, // IANA RTP payload code ianaName, // RTP Payload name create_decoder, // create codec function destroy_decoder, // destroy codec codec_decoder, // encode/decode controlDefn, // codec controls PluginCodec_H323AudioCodec_g729AnnexA, // h323CapabilityType NULL // h323CapabilityData } }; PLUGIN_CODEC_IMPLEMENT_ALL(VoiceAgeG729, CodecDefn, MY_VERSION) ///////////////////////////////////////////////////////////////////////////// h323plus/plugins/audio/VoiceAgeG729/README.txt0000644000175000017500000000324111341106247017421 0ustar markmarkREADME for Voice Age G.729 Codec ================================ Robert Jongbloed, Post Increment Contents ======== 1. INTRODUCTION 2. BUILDING WITH WINDOWS 3. LICENSING 1. INTRODUCTION =============== This directory contains the files needed to use the Voice Age G.729 codec with OPAL. This codec is only available under Windows, although theoretically is would be possible to load the appropriate DLLs under Linux using one of the emulation packages available. 2. BUILDING WITH WINDOWS ======================== 1. Obtain the actual codec libraries from http://www.voiceage.com/freecodecs.php 2. Unpack into the "va_g729" directory within this directory 3. Ensure that this directory contains at least the followint: va_g729a.h va_g729a.lib 4. Add VoiceAgeG729.vcproj to your solution file and compile. 2. BUILDING WITH WINDOWS MOBILE =============================== 1. You will have to purchase the codec from Void Age, this one isn't free! 2. Unpack into the "va_g729_AMR" directory within this directory 3. Ensure that this directory contains at least the followint: g729ab_if.h typedef.h g729ab.lib 4. Add VoiceAgeG729.vcproj to your solution file and compile. 3. LICENSING ============ You must obtain and license the Voice Age codec from that company. This code is supplied solely for evaluation and research purposes. The provision of this code by Post Increment to any entity does not constitute the supply of a license to that entity to use, modify or distribute the code in any form, nor does it indemnify the entity against any legal actions that may arise from use of this code in any way. h323plus/plugins/audio/VoiceAgeG729/VoiceAgeG729_2008.vcproj0000644000175000017500000001223711341106247021661 0ustar markmark h323plus/plugins/audio/VoiceAgeG729/VoiceAgeG729.vcproj0000644000175000017500000001072611341106247021211 0ustar markmark h323plus/plugins/audio/VoiceAgeG729/VoiceAgeG729_2005.vcproj0000644000175000017500000003231511341106247021655 0ustar markmark h323plus/plugins/audio/VoiceAgeG729/VoiceAgeG729.dsp0000644000175000017500000001061411341106247020470 0ustar markmark# Microsoft Developer Studio Project File - Name="VoiceAgeG729" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=VoiceAgeG729 - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "VoiceAgeG729.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "VoiceAgeG729.mak" CFG="VoiceAgeG729 - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "VoiceAgeG729 - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "VoiceAgeG729 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "VoiceAgeG729 - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "..\..\Release" # PROP Intermediate_Dir "..\..\Release\VoiceAgeG729" # PROP Ignore_Export_Lib 1 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "VOICEAGEG729_EXPORTS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_CODEC_DLL_EXPORTS" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "NDEBUG" # ADD RSC /l 0xc09 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 va_g729/va_g729a.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:"./Release/VoiceAgeG729_pwplugin.pdb" /machine:I386 /out:"../../Release/VoiceAgeG729_pwplugin.dll" /implib:"..\..\Release\VoiceAgeG729/VoiceAgeG729.lib" # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "VoiceAgeG729 - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "..\..\Debug" # PROP Intermediate_Dir "..\..\Debug\VoiceAgeG729" # PROP Ignore_Export_Lib 1 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "VOICEAGEG729_EXPORTS" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_CODEC_DLL_EXPORTS" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "_DEBUG" # ADD RSC /l 0xc09 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 va_g729/va_g729a.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /debug /machine:I386 /out:"../../Debug/VoiceAgeG729_pwplugin.dll" /implib:"..\..\Debug\VoiceAgeG729/VoiceAgeG729.lib" /pdbtype:sept # SUBTRACT LINK32 /pdb:none !ENDIF # Begin Target # Name "VoiceAgeG729 - Win32 Release" # Name "VoiceAgeG729 - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\g729codec.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project h323plus/plugins/audio/LPC_10/0000755000175000017500000000000011341106232014600 5ustar markmarkh323plus/plugins/audio/LPC_10/README0000644000175000017500000000442411341106232015464 0ustar markmarkSun Jul 7 15:35:44 CDT 1996 Andy Fingerhut (jaf@arl.wustl.edu) Before you can make any of the programs in this directory, you must change to the lpc10 directory and make the LPC-10 library. See the README file there, and be especially sure to read the notes there about possible modifications you will need to make to the file lpc10.h in this directory. I've made up a Unix makefile for the programs nuke and unnuke, called makefile.unx. I don't know how to create a makefile for Microsoft C. Feel free to send me one if you create one that works. The files in this directory are just some simple main programs that call the routines create_lpc10_encoder_state(), lpc10_encode(), create_lpc10_decoder_state(), and lpc10_decode(). Those four routines are defined in source files within the subdirectory lpc10, and are all that any application ever needs to use to compress and decompress speech with the LPC-10 coder. The main programs in this directory are just intended as examples of how to use these routines. Optionally, an application could also use the routines init_lpc10_encoder_state() or init_lpc10_decoder_state() to reinitialize a state struct that was created by one of the create functions mentioned above. This could be useful between talk spurts, for example, to flush out any possible remaining garbage state that could occur because some data was lost. This shouldn't be necessary, since any old bad state should be flushed out or decay within a few frame times anyway (frame time = 22.5 ms). I have heard lost packets (or maybe they were garbled?) produce interesting audio artifacts in the application Nautilus. Tue Aug 20 15:49:04 CDT 1996 Andy Fingerhut (jaf@arl.wustl.edu) I have just completed making many changes to the C source code that allow multiple audio streams to be compressed or decompressed in an interleaved fashion. This is useful, for example, for some Internet MBONE audio tools that can receive compressed audio from multiple sources simultaneously. See one or more of the following demonstration programs for examples of the calling sequence: nuke - compressing one audio stream nuke2 - compressing two audio streams, alternating one frame from each unnuke - decompressing one audio stream unnuke2 - decompressing two audio streams, alternating one frame from each h323plus/plugins/audio/LPC_10/Makefile.in0000644000175000017500000000746211341106232016656 0ustar markmark# # Makefile for LPC-10 # # Copyright (C) 2004 Post Increment, All Rights Reserved # # The contents of this file are subject to the Mozilla Public License # Version 1.0 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is Open H323 library. # # The Initial Developer of the Original Code is Post Increment # # Contributor(s): ______________________________________. # # $Log: Makefile.in,v $ # Revision 1.1 2010/02/24 02:19:06 shorne # First commit of h323plus mirror # # Revision 1.4 2007/04/19 06:09:03 csoutheren # Fixed plugin build system to use better detection for OSX # Resolved 1636262 - Fix for audio plugins for OSX # # Revision 1.3 2006/08/10 04:10:20 csoutheren # Applied 1537305 - fixed build problems on 64 bit machines # Thanks to Stanislav Brabec # # Revision 1.2 2006/08/01 13:06:49 rjongbloed # Added a raft of unvalidated audio codecs from OpenH323 tree # # Revision 1.1.2.1 2006/07/22 13:42:49 rjongbloed # Added more plug ins # # Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed # Imported all the audio codec plug ins from OpenH323 # # Revision 1.3 2004/08/22 04:20:19 csoutheren # Added -fPIC to build commands to fix problems on 64 bit platforms # Thanks to Klaus Kaempf # # Revision 1.2 2004/06/24 23:33:17 csoutheren # Changed Makefiles to ensure all plugins have correct suffix # # Revision 1.1 2004/05/04 11:32:37 csoutheren # Added LPC10 codec # # AC_PLUGIN_DIR=@AC_PLUGIN_DIR@ prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ target_os=@target_os@ SONAME = lpc10 SRCDIR = ./src OBJDIR = ./obj PLUGINDIR=../.. CC =@CC@ CFLAGS =@CFLAGS@ CXX =@CXX@ LDSO =@LDSO@ PLUGINEXT =@PLUGINEXT@ STDCCFLAGS =@STDCCFLAGS@ LDFLAGS =@LDFLAGS@ EXTRACFLAGS =-I$(PLUGINDIR) HEADER_FILES += $(LPC10_INCDIR)/lpc10.h SRCS += lpc_10_codec.c \ $(SRCDIR)/f2clib.c \ $(SRCDIR)/analys.c \ $(SRCDIR)/bsynz.c \ $(SRCDIR)/chanwr.c \ $(SRCDIR)/dcbias.c \ $(SRCDIR)/decode_.c \ $(SRCDIR)/deemp.c \ $(SRCDIR)/difmag.c \ $(SRCDIR)/dyptrk.c \ $(SRCDIR)/encode_.c \ $(SRCDIR)/energy.c \ $(SRCDIR)/ham84.c \ $(SRCDIR)/hp100.c \ $(SRCDIR)/invert.c \ $(SRCDIR)/irc2pc.c \ $(SRCDIR)/ivfilt.c \ $(SRCDIR)/lpcdec.c \ $(SRCDIR)/lpcenc.c \ $(SRCDIR)/lpcini.c \ $(SRCDIR)/lpfilt.c \ $(SRCDIR)/median.c \ $(SRCDIR)/mload.c \ $(SRCDIR)/onset.c \ $(SRCDIR)/pitsyn.c \ $(SRCDIR)/placea.c \ $(SRCDIR)/placev.c \ $(SRCDIR)/preemp.c \ $(SRCDIR)/prepro.c \ $(SRCDIR)/random.c \ $(SRCDIR)/rcchk.c \ $(SRCDIR)/synths.c \ $(SRCDIR)/tbdm.c \ $(SRCDIR)/voicin.c \ $(SRCDIR)/vparms.c \ vpath %.o $(OBJDIR) vpath %.c $(SRCDIR) ifeq ($(VERBOSE),) Q_CC = @echo [CC] `echo $< | sed s^@OPALDIR@/^^` ; Q_LD = @echo [LD] `echo $(PLUGIN) | sed s^@OPALDIR@/^^` ; endif $(OBJDIR)/%.o : %.c @mkdir -p $(OBJDIR) >/dev/null 2>&1 $(Q_CC)$(CC) -I. -I../../../include -I./src $(STDCCFLAGS) $(EXTRACFLAGS) $(CFLAGS) -c $< -o $@ PLUGIN = ./lpc10_audio_pwplugin.$(PLUGINEXT) OBJECTS = $(addprefix $(OBJDIR)/,$(patsubst %.c,%.o,$(notdir $(SRCS)))) $(PLUGIN): $(OBJECTS) ifeq (solaris,$(findstring solaris,$(target_os))) $(Q_LD)$(CC) $(LDSO) $@ -o $@ $^ $(EXTRALIBS) else $(Q_LD)$(CC) $(LDSO) -o $@ $^ $(EXTRALIBS) endif install: mkdir -p $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR) install $(PLUGIN) $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR) uninstall: rm -f $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR)/$(PLUGIN) clean: rm -f $(OBJECTS) $(PLUGIN) ########################################### h323plus/plugins/audio/LPC_10/LPC_10_2005.vcproj0000644000175000017500000007202311341106232017415 0ustar markmark h323plus/plugins/audio/LPC_10/LPC_10.vcproj0000644000175000017500000006671211341106232016757 0ustar markmark h323plus/plugins/audio/LPC_10/lpc10.h0000644000175000017500000001471511341106232015700 0ustar markmark/* $Log: lpc10.h,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:49 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 13:42:49 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:30:49 csoutheren Initial version Revision 1.1 2000/06/05 04:45:11 robertj Added LPC-10 2400bps codec * Revision 1.1 1996/08/19 22:47:31 jaf * Initial revision * */ #ifndef __LPC10_H__ #define __LPC10_H__ #define LPC10_SAMPLES_PER_FRAME 180 #define LPC10_BITS_IN_COMPRESSED_FRAME 54 typedef short INT16; typedef int INT32; /* The initial values for every member of this structure is 0, except where noted in comments. */ /* These two lines are copied from f2c.h. There should be a more elegant way of doing this than having the same declarations in two files. */ typedef float real; typedef INT32 integer; typedef INT32 logical; typedef INT16 shortint; struct lpc10_encoder_state { /* State used only by function hp100 */ real z11; real z21; real z12; real z22; /* State used by function analys */ real inbuf[540], pebuf[540]; real lpbuf[696], ivbuf[312]; real bias; integer osbuf[10]; /* no initial value necessary */ integer osptr; /* initial value 1 */ integer obound[3]; integer vwin[6] /* was [2][3] */; /* initial value vwin[4] = 307; vwin[5] = 462; */ integer awin[6] /* was [2][3] */; /* initial value awin[4] = 307; awin[5] = 462; */ integer voibuf[8] /* was [2][4] */; real rmsbuf[3]; real rcbuf[30] /* was [10][3] */; real zpre; /* State used by function onset */ real n; real d__; /* initial value 1.f */ real fpc; /* no initial value necessary */ real l2buf[16]; real l2sum1; integer l2ptr1; /* initial value 1 */ integer l2ptr2; /* initial value 9 */ integer lasti; /* no initial value necessary */ logical hyst; /* initial value FALSE_ */ /* State used by function voicin */ real dither; /* initial value 20.f */ real snr; real maxmin; real voice[6] /* was [2][3] */; /* initial value is probably unnecessary */ integer lbve, lbue, fbve, fbue; integer ofbue, sfbue; integer olbue, slbue; /* Initial values: lbve = 3000; fbve = 3000; fbue = 187; ofbue = 187; sfbue = 187; lbue = 93; olbue = 93; slbue = 93; snr = (real) (fbve / fbue << 6); */ /* State used by function dyptrk */ real s[60]; integer p[120] /* was [60][2] */; integer ipoint; real alphax; /* State used by function chanwr */ integer isync; }; struct lpc10_decoder_state { /* State used by function decode */ integer iptold; /* initial value 60 */ logical first; /* initial value TRUE_ */ integer ivp2h; integer iovoic; integer iavgp; /* initial value 60 */ integer erate; integer drc[30] /* was [3][10] */; integer dpit[3]; integer drms[3]; /* State used by function synths */ real buf[360]; integer buflen; /* initial value 180 */ /* State used by function pitsyn */ integer ivoico; /* no initial value necessary as long as first_pitsyn is initially TRUE_ */ integer ipito; /* no initial value necessary as long as first_pitsyn is initially TRUE_ */ real rmso; /* initial value 1.f */ real rco[10]; /* no initial value necessary as long as first_pitsyn is initially TRUE_ */ integer jsamp; /* no initial value necessary as long as first_pitsyn is initially TRUE_ */ logical first_pitsyn; /* initial value TRUE_ */ /* State used by function bsynz */ integer ipo; real exc[166]; real exc2[166]; real lpi1; real lpi2; real lpi3; real hpi1; real hpi2; real hpi3; real rmso_bsynz; /* State used by function random */ integer j; /* initial value 2 */ integer k; /* initial value 5 */ shortint y[5]; /* initial value { -21161,-8478,30892,-10216,16950 } */ /* State used by function deemp */ real dei1; real dei2; real deo1; real deo2; real deo3; }; /* Calling sequence: Call create_lpc10_encoder_state(), which returns a pointer to an already initialized lpc10_encoder_state structure. lpc10_encode reads indices 0 through (LPC10_SAMPLES_PER_FRAME-1) of array speech[], and writes indices 0 through (LPC10_BITS_IN_COMPRESSED_FRAME-1) of array bits[], and both reads and writes the lpc10_encoder_state structure contents. The lpc10_encoder_state structure should *not* be initialized for every frame of encoded speech. Once at the beginning of execution, done automatically for you by create_lpc10_encoder_state(), is enough. init_lpc10_encoder_state() reinitializes the lpc10_encoder_state structure. This might be useful if you are finished processing one sound sample, and want to reuse the same lpc10_encoder_state structure to process another sound sample. There might be other uses as well. Note that the comments in the lpc10/lpcenc.c file imply that indices 1 through 180 of array speech[] are read. These comments were written for the Fortran version of the code, before it was automatically converted to C by the conversion program f2c. f2c seems to use the convention that the pointers to arrays passed as function arguments point to the first index used in the Fortran code, whatever index that might be (usually 1), and then it modifies the pointer inside of the function, like so: if (speech) { --speech; } So that the code can access the first value at index 1 and the last at index 180. This makes the translated C code "closer" to the original Fortran code. The calling sequence for the decoder is similar to the encoder. The only significant difference is that the array bits[] is read (indices 0 through (LPC10_BITS_IN_COMPRESSED_FRAME-1)), and the array speech[] is written (indices 0 through (LPC10_SAMPLES_PER_FRAME-1)). */ struct lpc10_encoder_state * create_lpc10_encoder_state (); void init_lpc10_encoder_state (struct lpc10_encoder_state *st); int lpc10_encode (real *speech, INT32 *bits, struct lpc10_encoder_state *st); struct lpc10_decoder_state * create_lpc10_decoder_state (); void init_lpc10_decoder_state (struct lpc10_decoder_state *st); int lpc10_decode (INT32 *bits, real *speech, struct lpc10_decoder_state *st); #endif /* __LPC10_H__ */ h323plus/plugins/audio/LPC_10/lpc_10_codec.c0000644000175000017500000002322011341106232017156 0ustar markmark/* * LPC 10 Plugin codec for OpenH323/OPAL * * Copyright (C) 2004 Post Increment, All Rights Reserved * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Post Increment * * Contributor(s): ______________________________________. * * $Revision: 1.1 $ * $Author: shorne $ * $Date: 2010/02/24 02:19:06 $ */ #define _CRT_NONSTDC_NO_DEPRECATE 1 #define _CRT_SECURE_NO_WARNINGS 1 #include #include #include #ifndef PLUGIN_CODEC_DLL_EXPORTS #include "plugin-config.h" #endif #include #include "lpc10.h" enum { SamplesPerFrame = 180, // 22.5 milliseconds BitsPerFrame = 54, // Encoded size BytesPerFrame = (BitsPerFrame+7)/8, BitsPerSecond = 2400 }; #define SampleValueScale 32768.0 #define MaxSampleValue 32767.0 #define MinSampleValue -32767.0 #define PREF_FRAMES_PER_PACKET 4 #define MAX_FRAMES_PER_PACKET 7 ///////////////////////////////////////////////////////////////////////////// static void * create_encoder(const struct PluginCodec_Definition * codec) { struct lpc10_encoder_state * encoder = (struct lpc10_encoder_state *)malloc((unsigned)sizeof(struct lpc10_encoder_state)); init_lpc10_encoder_state(encoder); return encoder; } static int codec_encoder(const struct PluginCodec_Definition * codec, void * context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { int i; INT32 bits[BitsPerFrame]; real speech[SamplesPerFrame]; unsigned char * buffer = (unsigned char *)to; const short * sampleBuffer = (const short *)from; if ((*fromLen)/2 != SamplesPerFrame || *toLen < BytesPerFrame) return 0; for (i = 0; i < SamplesPerFrame; i++) speech[i] = (real)(sampleBuffer[i]/SampleValueScale); lpc10_encode(speech, bits, (struct lpc10_encoder_state *)context); memset(to, 0, BytesPerFrame); for (i = 0; i < BitsPerFrame; i++) { if (bits[i]) buffer[i>>3] |= 1 << (i&7); } *toLen = BytesPerFrame; return 1; } static void destroy_encoder(const struct PluginCodec_Definition * codec, void * context) { free((struct lpc10_encoder_state *)context); } static void * create_decoder(const struct PluginCodec_Definition * codec) { struct lpc10_decoder_state * decoder = (struct lpc10_decoder_state *)malloc((unsigned)sizeof(struct lpc10_decoder_state)); init_lpc10_decoder_state(decoder); return decoder; } static int codec_decoder(const struct PluginCodec_Definition * codec, void * context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { int i; INT32 bits[BitsPerFrame]; real speech[SamplesPerFrame]; short * sampleBuffer = (short *)to; const unsigned char * buffer = (const unsigned char *)from; if (*fromLen < BytesPerFrame || *toLen < SamplesPerFrame*2) return 0; for (i = 0; i < BitsPerFrame; i++) bits[i] = (buffer[i>>3]&(1<<(i&7))) != 0; lpc10_decode(bits, speech, (struct lpc10_decoder_state *)context); for (i = 0; i < SamplesPerFrame; i++) { real sample = (real)(speech[i]*SampleValueScale); if (sample < MinSampleValue) sample = MinSampleValue; else if (sample > MaxSampleValue) sample = MaxSampleValue; sampleBuffer[i] = (short)sample; } *toLen = SamplesPerFrame*2; return 1; } static void destroy_decoder(const struct PluginCodec_Definition * codec, void * context) { free((struct lpc10_decoder_state *)context); } ///////////////////////////////////////////////////////////////////////////// #define EQUIVALENCE_COUNTRY_CODE 9 #define EQUIVALENCE_EXTENSION_CODE 0 #define EQUIVALENCE_MANUFACTURER_CODE 61 static const char lpc10CapStr[] = { "LPC-10" }; static struct PluginCodec_H323NonStandardCodecData lpc10Cap = { NULL, EQUIVALENCE_COUNTRY_CODE, EQUIVALENCE_EXTENSION_CODE, EQUIVALENCE_MANUFACTURER_CODE, lpc10CapStr, sizeof(lpc10CapStr)-1, NULL }; static struct PluginCodec_information licenseInfo = { 1083666706, // timestamp = Tue 04 May 2004 10:31:46 AM UTC = "Craig Southeren, Post Increment", // source code author "1.0", // source code version "craigs@postincrement.com", // source code email "http://www.postincrement.com", // source code URL "Copyright (C) 2004 by Post Increment, All Rights Reserved", // source code copyright "MPL 1.0", // source code license PluginCodec_License_MPL, // source code license "LPC-10", // codec description "Andy Fingerhut", // codec author NULL, // codec version "jaf@arl.wustl.edu", // codec email NULL, // codec URL NULL, // codec copyright information NULL, // codec license PluginCodec_Licence_None // codec license code }; static const char L16Desc[] = { "L16" }; static const char lpc10[] = { "LPC-10" }; static const char sdpLPC10[] = { "lpc10" }; static struct PluginCodec_Definition lpc10CodecDefn[2] = { { // encoder PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic, // dynamic RTP type lpc10, // text decription L16Desc, // source format lpc10, // destination format (void *)NULL, // user data 8000, // samples per second BitsPerSecond, // raw bits per second 22500, // nanoseconds per frame SamplesPerFrame, // samples per frame BytesPerFrame, // bytes per frame PREF_FRAMES_PER_PACKET, // recommended number of frames per packet MAX_FRAMES_PER_PACKET, // maximum number of frames per packe 0, // IANA RTP payload code sdpLPC10, // RTP payload name create_encoder, // create codec function destroy_encoder, // destroy codec codec_encoder, // encode/decode NULL, // codec controls PluginCodec_H323Codec_nonStandard, // h323CapabilityType &lpc10Cap // h323CapabilityData }, { // decoder PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic, // dynamic RTP type lpc10, // text decription lpc10, // source format L16Desc, // destination format (const void *)NULL, // user data 8000, // samples per second BitsPerSecond, // raw bits per second 22500, // nanoseconds per frame SamplesPerFrame, // samples per frame BytesPerFrame, // bytes per frame PREF_FRAMES_PER_PACKET, // recommended number of frames per packet MAX_FRAMES_PER_PACKET, // maximum number of frames per packe 0, // IANA RTP payload code sdpLPC10, // RTP payload name create_decoder, // create codec function destroy_decoder, // destroy codec codec_decoder, // encode/decode NULL, // codec controls PluginCodec_H323Codec_nonStandard, // h323CapabilityType &lpc10Cap // h323CapabilityData } }; PLUGIN_CODEC_IMPLEMENT_ALL(LPC 10, lpc10CodecDefn, PLUGIN_CODEC_VERSION) ///////////////////////////////////////////////////////////////////////////// h323plus/plugins/audio/LPC_10/src/0000755000175000017500000000000011341106232015367 5ustar markmarkh323plus/plugins/audio/LPC_10/src/README0000644000175000017500000000777211341106232016264 0ustar markmarkTue Aug 20 16:19:51 CDT 1996 Andy Fingerhut (jaf@arl.wustl.edu) In release 1.4, there are quite a few hand modifications to the C code that was automatically created from the Fortran code with f2c. They are all summarized in change log comments at the beginning of the changed files. All of the original files from f2c were checked in to RCS before modification, so it is possible to see exactly what changes were made, for the extremely curious. That precaution was also for my benefit, in case I ever recompile the Fortran sources, and want to make similar changes to that new C source code. Below is the README file for this directory included with the 1.3 release of the LPC-10 package. A few parts of it are a little out of date, but it is correct for the most part. Sun Jul 7 15:30:31 CDT 1996 Andy Fingerhut (jaf@arl.wustl.edu) To create the LPC-10 library, copy the appropriate makefile to the proper name for easy use, e.g., for Unix, copy makefile.unx to the file "Makefile". The file makefile.dos has been used with some version of the 'nmake' utility that comes with the Microsoft C compiler (the same one used for Nautilus v1.5a, which I believe specifies Microsoft C version 7.0 or later). Then edit the file lpc10.h in the directory above. It should already be set up to work properly on any Unix compiler for which "int" is 32 bits and "short" is 16 bits, and under the Microsoft C compiler configured so that "long" is 32 bits and "int" is 16 bits. There must be a typedef for the two types INT32 and INT16 in that file. You should choose types that compile to those sizes using your compiler, because there are places in the LPC-10 code that expect INT16's to have exactly 16 bits (at least, I *think* they must be no larger), and INT32's to have exactly 32 bits. A few notes on how these files were created ------------------------------------------- (This section is mostly for my benefit, so I can remember what I did. You don't need to read it if you just want to use this package. It might be useful to read it if you change the Fortran sources and want to recreate a usable library of C sources. -- Andy) These C sources were created automatically from the Fortran sources using f2c, for the most part. Listed below are the extra modifications that were made after this automatic conversion. Many of them were made so that it was not necessary to install f2c in order to use this LPC-10 coder. 1. Put all of those files that were necessary for only the coder, rather than an application that uses the coder, into this subdirectory called lpc10. 2. Copied f2c.h from the f2c distribution into this subdirectory. Some modifications were made to the "typedef" statements in this file, to explicitly indicate the sizes (in bits) that different integer types should be. The types INT32 and INT16 must be defined in a file called lpc10.h in the directory above. Created the file f2clib.c, containing only the functions pow_ii(), r_sign(), and i_nint() from the f2c library. 3. The f2c output originally had a file called contrl_com.c, that defined a small structure containing a few variables that were used in many different functions of the LPC10 code. Every file containing functions that used it defined it as "extern", while contrl_com.c actually allocated storage for the structure. Bill Dorsey, one of the lead developers of Nautilus, said that the Microsoft C compiler had problems either compiling this file, or linking it with all of the other compiled files, so he just eliminated that file and removed the "extern" keyword from the one of the files that declared it that way. The file chosen (arbitrarily) was analys.c. 4. Copied the makefiles for Unix and Microsoft C from the Nautilus v1.5a distribution into the lpc10 directory. Modified them to take out references to Nautilus. These makefiles don't create an executable, but a library of compiled functions called liblpc10.a (Unix) or LPC10.LIB (DOS). This library can be used when linking an executable that calls the functions lpcini_(), lpcenc_(), and lpcdec_(). h323plus/plugins/audio/LPC_10/src/makefile.unx0000644000175000017500000000274611341106232017711 0ustar markmark# # Makefile for LPC-10 speech coder library (unix) # # default C compiler CC= gcc # # These definitions for CFLAGS and LIB_TARGET_DIR are used when one # runs make in the lpc10 directory, without environment variables that # override them. When make is run in this directory from a makefile # for an application that uses the LPC10 coder, there are environment # variables set for CFLAGS and LIB_TARGET_DIR that override these # definitions. # LIB_TARGET_DIR = .. # # -I$(LIB_TARGET_DIR) option needed so that #include "machine.h" # directives can find the machine.h file. # WARNINGS = -Wunused -Wswitch -Wformat -Wchar-subscripts CFLAGS = -O -I$(LIB_TARGET_DIR) $(WARNINGS) LIB = $(LIB_TARGET_DIR)/liblpc10.a .PHONY: all clean all: $(LIB) ranlib $(LIB) $(LIB): $(LIB)(f2clib.o) \ $(LIB)(analys.o) \ $(LIB)(bsynz.o) \ $(LIB)(chanwr.o) \ $(LIB)(dcbias.o) \ $(LIB)(decode.o) \ $(LIB)(deemp.o) \ $(LIB)(difmag.o) \ $(LIB)(dyptrk.o) \ $(LIB)(encode.o) \ $(LIB)(energy.o) \ $(LIB)(ham84.o) \ $(LIB)(hp100.o) \ $(LIB)(invert.o) \ $(LIB)(irc2pc.o) \ $(LIB)(ivfilt.o) \ $(LIB)(lpcdec.o) \ $(LIB)(lpcenc.o) \ $(LIB)(lpcini.o) \ $(LIB)(lpfilt.o) \ $(LIB)(median.o) \ $(LIB)(mload.o) \ $(LIB)(onset.o) \ $(LIB)(pitsyn.o) \ $(LIB)(placea.o) \ $(LIB)(placev.o) \ $(LIB)(preemp.o) \ $(LIB)(prepro.o) \ $(LIB)(random.o) \ $(LIB)(rcchk.o) \ $(LIB)(synths.o) \ $(LIB)(tbdm.o) \ $(LIB)(voicin.o) \ $(LIB)(vparms.o) clean: -rm -f *.o h323plus/plugins/audio/LPC_10/src/lpcini.c0000644000175000017500000003350611341106232017020 0ustar markmark/* $Log: lpcini.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:50 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:17 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:43 csoutheren Initial version Revision 1.3 2002/10/10 05:29:04 robertj Removed non-ansi-C comments to maximise portability, thanks Martijn Roest Revision 1.2 2001/02/24 14:00:10 rogerh Select the correct header file for malloc (stdlib.h or malloc.h) Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.2 1996/08/20 20:35:41 jaf * Added functions for allocating and initializing lpc10_encoder_state * and lpc10_decoder_state structures. * * Revision 1.1 1996/08/19 22:31:40 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int lpcini_(void); /* comlen contrl_ 12 */ /*:ref: initlpcenc_ 14 0 */ /*:ref: initlpcdec_ 14 0 */ #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" #if defined(_WIN32) || defined(_WIN32_WCE) #ifdef _MSC_VER #include #endif #else extern void * malloc(); #endif /* Common Block Declarations */ struct { integer order, lframe; logical corrp; } contrl_; #define contrl_1 contrl_ /* ***************************************************************** */ /* $Log: lpcini.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:50 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:17 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.3 2002/10/10 05:29:04 robertj /* Removed non-ansi-C comments to maximise portability, thanks Martijn Roest /* /* Revision 1.2 2001/02/24 14:00:10 rogerh /* Select the correct header file for malloc (stdlib.h or malloc.h) /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:35:41 jaf * Added functions for allocating and initializing lpc10_encoder_state * and lpc10_decoder_state structures. * * Revision 1.1 1996/08/19 22:31:40 jaf * Initial revision * */ /* Revision 1.1 1996/03/28 00:04:05 jaf */ /* Initial revision */ /* ***************************************************************** */ /* Initialize COMMON block variables used by LPC-10 encoder and decoder, */ /* and call initialization routines for both of them. */ /* Subroutine */ int lpcini_(void) { /* $Log: lpcini.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:50 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:17 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.3 2002/10/10 05:29:04 robertj /* Removed non-ansi-C comments to maximise portability, thanks Martijn Roest /* /* Revision 1.2 2001/02/24 14:00:10 rogerh /* Select the correct header file for malloc (stdlib.h or malloc.h) /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:35:41 jaf * Added functions for allocating and initializing lpc10_encoder_state * and lpc10_decoder_state structures. * * Revision 1.1 1996/08/19 22:31:40 jaf * Initial revision * */ /* Revision 1.3 1996/03/29 22:03:47 jaf */ /* Removed definitions for any constants that were no longer used. */ /* Revision 1.2 1996/03/26 19:34:33 jaf */ /* Added comments indicating which constants are not needed in an */ /* application that uses the LPC-10 coder. */ /* Revision 1.1 1996/02/07 14:43:51 jaf */ /* Initial revision */ /* LPC Configuration parameters: */ /* Frame size, Prediction order, Pitch period */ /* $Log: lpcini.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:50 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:17 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.3 2002/10/10 05:29:04 robertj /* Removed non-ansi-C comments to maximise portability, thanks Martijn Roest /* /* Revision 1.2 2001/02/24 14:00:10 rogerh /* Select the correct header file for malloc (stdlib.h or malloc.h) /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:35:41 jaf * Added functions for allocating and initializing lpc10_encoder_state * and lpc10_decoder_state structures. * * Revision 1.1 1996/08/19 22:31:40 jaf * Initial revision * */ /* Revision 1.3 1996/03/29 22:05:55 jaf */ /* Commented out the common block variables that are not needed by the */ /* embedded version. */ /* Revision 1.2 1996/03/26 19:34:50 jaf */ /* Added comments indicating which constants are not needed in an */ /* application that uses the LPC-10 coder. */ /* Revision 1.1 1996/02/07 14:44:09 jaf */ /* Initial revision */ /* LPC Processing control variables: */ /* *** Read-only: initialized in setup */ /* Files for Speech, Parameter, and Bitstream Input & Output, */ /* and message and debug outputs. */ /* Here are the only files which use these variables: */ /* lpcsim.f setup.f trans.f error.f vqsetup.f */ /* Many files which use fdebug are not listed, since it is only used in */ /* those other files conditionally, to print trace statements. */ /* integer fsi, fso, fpi, fpo, fbi, fbo, pbin, fmsg, fdebug */ /* LPC order, Frame size, Quantization rate, Bits per frame, */ /* Error correction */ /* Subroutine SETUP is the only place where order is assigned a value, */ /* and that value is 10. It could increase efficiency 1% or so to */ /* declare order as a constant (i.e., a Fortran PARAMETER) instead of as */ /* a variable in a COMMON block, since it is used in many places in the */ /* core of the coding and decoding routines. Actually, I take that back. */ /* At least when compiling with f2c, the upper bound of DO loops is */ /* stored in a local variable before the DO loop begins, and then that is */ /* compared against on each iteration. */ /* Similarly for lframe, which is given a value of MAXFRM in SETUP. */ /* Similarly for quant, which is given a value of 2400 in SETUP. quant */ /* is used in only a few places, and never in the core coding and */ /* decoding routines, so it could be eliminated entirely. */ /* nbits is similar to quant, and is given a value of 54 in SETUP. */ /* corrp is given a value of .TRUE. in SETUP, and is only used in the */ /* subroutines ENCODE and DECODE. It doesn't affect the speed of the */ /* coder significantly whether it is .TRUE. or .FALSE., or whether it is */ /* a constant or a variable, since it is only examined once per frame. */ /* Leaving it as a variable that is set to .TRUE. seems like a good */ /* idea, since it does enable some error-correction capability for */ /* unvoiced frames, with no change in the coding rate, and no noticeable */ /* quality difference in the decoded speech. */ /* integer quant, nbits */ /* *** Read/write: variables for debugging, not needed for LPC algorithm */ /* Current frame, Unstable frames, Output clip count, Max onset buffer, */ /* Debug listing detail level, Line count on listing page */ /* nframe is not needed for an embedded LPC10 at all. */ /* nunsfm is initialized to 0 in SETUP, and incremented in subroutine */ /* ERROR, which is only called from RCCHK. When LPC10 is embedded into */ /* an application, I would recommend removing the call to ERROR in RCCHK, */ /* and remove ERROR and nunsfm completely. */ /* iclip is initialized to 0 in SETUP, and incremented in entry SWRITE in */ /* sread.f. When LPC10 is embedded into an application, one might want */ /* to cause it to be incremented in a routine that takes the output of */ /* SYNTHS and sends it to an audio device. It could be optionally */ /* displayed, for those that might want to know what it is. */ /* maxosp is never initialized to 0 in SETUP, although it probably should */ /* be, and it is updated in subroutine ANALYS. I doubt that its value */ /* would be of much interest to an application in which LPC10 is */ /* embedded. */ /* listl and lincnt are not needed for an embedded LPC10 at all. */ /* integer nframe, nunsfm, iclip, maxosp, listl, lincnt */ /* common /contrl/ fsi, fso, fpi, fpo, fbi, fbo, pbin, fmsg, fdebug */ /* common /contrl/ quant, nbits */ /* common /contrl/ nframe, nunsfm, iclip, maxosp, listl, lincnt */ contrl_1.order = 10; contrl_1.lframe = 180; contrl_1.corrp = TRUE_; return 0; } /* lpcini_ */ /* Allocate memory for, and initialize, the state that needs to be kept from encoding one frame to the next for a single LPC-10-compressed audio stream. Return 0 if malloc fails, otherwise return pointer to new structure. */ struct lpc10_encoder_state * create_lpc10_encoder_state() { struct lpc10_encoder_state *st; st = (struct lpc10_encoder_state *) malloc((unsigned) sizeof (struct lpc10_encoder_state)); if (st != 0) { init_lpc10_encoder_state(st); } return (st); } void init_lpc10_encoder_state(struct lpc10_encoder_state *st) { int i; lpcini_(); /* State used only by function hp100 */ st->z11 = 0.0f; st->z21 = 0.0f; st->z12 = 0.0f; st->z22 = 0.0f; /* State used by function analys */ for (i = 0; i < 540; i++) { st->inbuf[i] = 0.0f; st->pebuf[i] = 0.0f; } for (i = 0; i < 696; i++) { st->lpbuf[i] = 0.0f; } for (i = 0; i < 312; i++) { st->ivbuf[i] = 0.0f; } st->bias = 0.0f; /* integer osbuf[10]; /* no initial value necessary */ st->osptr = 1; for (i = 0; i < 3; i++) { st->obound[i] = 0; } st->vwin[4] = 307; st->vwin[5] = 462; st->awin[4] = 307; st->awin[5] = 462; for (i = 0; i < 8; i++) { st->voibuf[i] = 0; } for (i = 0; i < 3; i++) { st->rmsbuf[i] = 0.0f; } for (i = 0; i < 30; i++) { st->rcbuf[i] = 0.0f; } st->zpre = 0.0f; /* State used by function onset */ st->n = 0.0f; st->d__ = 1.0f; /* real fpc; /* no initial value necessary */ for (i = 0; i < 16; i++) { st->l2buf[i] = 0.0f; } st->l2sum1 = 0.0f; st->l2ptr1 = 1; st->l2ptr2 = 9; /* integer lasti; /* no initial value necessary */ st->hyst = FALSE_; /* State used by function voicin */ st->dither = 20.0f; st->maxmin = 0.0f; for (i = 0; i < 6; i++) { st->voice[i] = 0.0f; } st->lbve = 3000; st->fbve = 3000; st->fbue = 187; st->ofbue = 187; st->sfbue = 187; st->lbue = 93; st->olbue = 93; st->slbue = 93; st->snr = (real) (st->fbve / st->fbue << 6); /* State used by function dyptrk */ for (i = 0; i < 60; i++) { st->s[i] = 0.0f; } for (i = 0; i < 120; i++) { st->p[i] = 0; } st->ipoint = 0; st->alphax = 0.0f; /* State used by function chanwr */ st->isync = 0; } /* Allocate memory for, and initialize, the state that needs to be kept from decoding one frame to the next for a single LPC-10-compressed audio stream. Return 0 if malloc fails, otherwise return pointer to new structure. */ struct lpc10_decoder_state * create_lpc10_decoder_state() { struct lpc10_decoder_state *st; st = (struct lpc10_decoder_state *) malloc((unsigned) sizeof (struct lpc10_decoder_state)); if (st != 0) { init_lpc10_decoder_state(st); } return (st); } void init_lpc10_decoder_state(struct lpc10_decoder_state *st) { int i; lpcini_(); /* State used by function decode */ st->iptold = 60; st->first = TRUE_; st->ivp2h = 0; st->iovoic = 0; st->iavgp = 60; st->erate = 0; for (i = 0; i < 30; i++) { st->drc[i] = 0; } for (i = 0; i < 3; i++) { st->dpit[i] = 0; st->drms[i] = 0; } /* State used by function synths */ for (i = 0; i < 360; i++) { st->buf[i] = 0.0f; } st->buflen = 180; /* State used by function pitsyn */ /* ivoico; /* no initial value necessary as long as first_pitsyn is initially TRUE_ */ /* ipito; /* no initial value necessary as long as first_pitsyn is initially TRUE_ */ st->rmso = 1.0f; /* rco[10]; /* no initial value necessary as long as first_pitsyn is initially TRUE_ */ /* integer jsamp; /* no initial value necessary as long as first_pitsyn is initially TRUE_ */ st->first_pitsyn = TRUE_; /* State used by function bsynz */ st->ipo = 0; for (i = 0; i < 166; i++) { st->exc[i] = 0.0f; st->exc2[i] = 0.0f; } st->lpi1 = 0.0f; st->lpi2 = 0.0f; st->lpi3 = 0.0f; st->hpi1 = 0.0f; st->hpi2 = 0.0f; st->hpi3 = 0.0f; st->rmso_bsynz = 0.0f; /* State used by function random */ st->j = 2; st->k = 5; st->y[0] = (shortint) -21161; st->y[1] = (shortint) -8478; st->y[2] = (shortint) 30892; st->y[3] = (shortint) -10216; st->y[4] = (shortint) 16950; /* State used by function deemp */ st->dei1 = 0.0f; st->dei2 = 0.0f; st->deo1 = 0.0f; st->deo2 = 0.0f; st->deo3 = 0.0f; } h323plus/plugins/audio/LPC_10/src/lpcdec.c0000644000175000017500000002604211341106232016771 0ustar markmark/* $Log: lpcdec.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:50 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:17 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:43 csoutheren Initial version Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.2 1996/08/20 20:30:11 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Changed name of function from lpcenc_ to lpc10_encode, simply to make * all lpc10 functions have more consistent naming with each other. * * Revision 1.1 1996/08/19 22:31:48 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int lpcdec_(integer *bits, real *speech); extern int initlpcdec_(void); /* comlen contrl_ 12 */ /*:ref: chanrd_ 14 5 4 4 4 4 4 */ /*:ref: decode_ 14 7 4 4 4 4 4 6 6 */ /*:ref: synths_ 14 6 4 4 6 6 6 4 */ /*:ref: initdecode_ 14 0 */ /*:ref: initsynths_ 14 0 */ #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* Common Block Declarations */ extern struct { integer order, lframe; logical corrp; } contrl_; #define contrl_1 contrl_ /* Table of constant values */ static integer c__10 = 10; /* ***************************************************************** */ /* $Log: lpcdec.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:50 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:17 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:30:11 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Changed name of function from lpcenc_ to lpc10_encode, simply to make * all lpc10 functions have more consistent naming with each other. * * Revision 1.1 1996/08/19 22:31:48 jaf * Initial revision * */ /* Revision 1.1 1996/03/28 00:03:00 jaf */ /* Initial revision */ /* ***************************************************************** */ /* Decode 54 bits to one frame of 180 speech samples. */ /* Input: */ /* BITS - 54 encoded bits, stored 1 per array element. */ /* Indices 1 through 53 read (SYNC bit ignored). */ /* Output: */ /* SPEECH - Speech encoded as real values in the range [-1,+1]. */ /* Indices 1 through 180 written. */ /* This subroutine maintains local state from one call to the next. If */ /* you want to switch to using a new audio stream for this filter, or */ /* reinitialize its state for any other reason, call the ENTRY */ /* INITLPCDEC. */ /* Subroutine */ int lpc10_decode(integer *bits, real *speech, struct lpc10_decoder_state *st) { integer irms, voice[2], pitch, ipitv; extern /* Subroutine */ int decode_(integer *, integer *, integer *, integer *, integer *, real *, real *, struct lpc10_decoder_state *); real rc[10]; extern /* Subroutine */ int chanrd_(integer *, integer *, integer *, integer *, integer *), synths_(integer *, integer *, real *, real *, real *, integer *, struct lpc10_decoder_state *); integer irc[10], len; real rms; /* $Log: lpcdec.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:50 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:17 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:30:11 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Changed name of function from lpcenc_ to lpc10_encode, simply to make * all lpc10 functions have more consistent naming with each other. * * Revision 1.1 1996/08/19 22:31:48 jaf * Initial revision * */ /* Revision 1.3 1996/03/29 22:03:47 jaf */ /* Removed definitions for any constants that were no longer used. */ /* Revision 1.2 1996/03/26 19:34:33 jaf */ /* Added comments indicating which constants are not needed in an */ /* application that uses the LPC-10 coder. */ /* Revision 1.1 1996/02/07 14:43:51 jaf */ /* Initial revision */ /* LPC Configuration parameters: */ /* Frame size, Prediction order, Pitch period */ /* Arguments */ /* $Log: lpcdec.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:50 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:17 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:30:11 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Changed name of function from lpcenc_ to lpc10_encode, simply to make * all lpc10 functions have more consistent naming with each other. * * Revision 1.1 1996/08/19 22:31:48 jaf * Initial revision * */ /* Revision 1.3 1996/03/29 22:05:55 jaf */ /* Commented out the common block variables that are not needed by the */ /* embedded version. */ /* Revision 1.2 1996/03/26 19:34:50 jaf */ /* Added comments indicating which constants are not needed in an */ /* application that uses the LPC-10 coder. */ /* Revision 1.1 1996/02/07 14:44:09 jaf */ /* Initial revision */ /* LPC Processing control variables: */ /* *** Read-only: initialized in setup */ /* Files for Speech, Parameter, and Bitstream Input & Output, */ /* and message and debug outputs. */ /* Here are the only files which use these variables: */ /* lpcsim.f setup.f trans.f error.f vqsetup.f */ /* Many files which use fdebug are not listed, since it is only used in */ /* those other files conditionally, to print trace statements. */ /* integer fsi, fso, fpi, fpo, fbi, fbo, pbin, fmsg, fdebug */ /* LPC order, Frame size, Quantization rate, Bits per frame, */ /* Error correction */ /* Subroutine SETUP is the only place where order is assigned a value, */ /* and that value is 10. It could increase efficiency 1% or so to */ /* declare order as a constant (i.e., a Fortran PARAMETER) instead of as */ /* a variable in a COMMON block, since it is used in many places in the */ /* core of the coding and decoding routines. Actually, I take that back. */ /* At least when compiling with f2c, the upper bound of DO loops is */ /* stored in a local variable before the DO loop begins, and then that is */ /* compared against on each iteration. */ /* Similarly for lframe, which is given a value of MAXFRM in SETUP. */ /* Similarly for quant, which is given a value of 2400 in SETUP. quant */ /* is used in only a few places, and never in the core coding and */ /* decoding routines, so it could be eliminated entirely. */ /* nbits is similar to quant, and is given a value of 54 in SETUP. */ /* corrp is given a value of .TRUE. in SETUP, and is only used in the */ /* subroutines ENCODE and DECODE. It doesn't affect the speed of the */ /* coder significantly whether it is .TRUE. or .FALSE., or whether it is */ /* a constant or a variable, since it is only examined once per frame. */ /* Leaving it as a variable that is set to .TRUE. seems like a good */ /* idea, since it does enable some error-correction capability for */ /* unvoiced frames, with no change in the coding rate, and no noticeable */ /* quality difference in the decoded speech. */ /* integer quant, nbits */ /* *** Read/write: variables for debugging, not needed for LPC algorithm */ /* Current frame, Unstable frames, Output clip count, Max onset buffer, */ /* Debug listing detail level, Line count on listing page */ /* nframe is not needed for an embedded LPC10 at all. */ /* nunsfm is initialized to 0 in SETUP, and incremented in subroutine */ /* ERROR, which is only called from RCCHK. When LPC10 is embedded into */ /* an application, I would recommend removing the call to ERROR in RCCHK, */ /* and remove ERROR and nunsfm completely. */ /* iclip is initialized to 0 in SETUP, and incremented in entry SWRITE in */ /* sread.f. When LPC10 is embedded into an application, one might want */ /* to cause it to be incremented in a routine that takes the output of */ /* SYNTHS and sends it to an audio device. It could be optionally */ /* displayed, for those that might want to know what it is. */ /* maxosp is never initialized to 0 in SETUP, although it probably should */ /* be, and it is updated in subroutine ANALYS. I doubt that its value */ /* would be of much interest to an application in which LPC10 is */ /* embedded. */ /* listl and lincnt are not needed for an embedded LPC10 at all. */ /* integer nframe, nunsfm, iclip, maxosp, listl, lincnt */ /* common /contrl/ fsi, fso, fpi, fpo, fbi, fbo, pbin, fmsg, fdebug */ /* common /contrl/ quant, nbits */ /* common /contrl/ nframe, nunsfm, iclip, maxosp, listl, lincnt */ /* Local variables that need not be saved */ /* Uncoded speech parameters */ /* Coded speech parameters */ /* Others */ /* Local state */ /* None */ /* Parameter adjustments */ if (bits) { --bits; } if (speech) { --speech; } /* Function Body */ chanrd_(&c__10, &ipitv, &irms, irc, &bits[1]); decode_(&ipitv, &irms, irc, voice, &pitch, &rms, rc, st); synths_(voice, &pitch, &rms, rc, &speech[1], &len, st); return 0; } /* lpcdec_ */ h323plus/plugins/audio/LPC_10/src/dyptrk.c0000644000175000017500000003324711341106232017061 0ustar markmark/* $Log: dyptrk.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:49 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:15 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:42 csoutheren Initial version Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.2 1996/08/20 20:25:29 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Revision 1.1 1996/08/19 22:32:26 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int dyptrk_(real *amdf, integer *ltau, integer *minptr, integer *voice, integer *pitch, integer *midx, struct lpc10_encoder_state *st); /* comlen contrl_ 12 */ #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* Common Block Declarations */ extern struct { integer order, lframe; logical corrp; } contrl_; #define contrl_1 contrl_ /* ********************************************************************* */ /* DYPTRK Version 52 */ /* $Log: dyptrk.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:49 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:15 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:42 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:25:29 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Revision 1.1 1996/08/19 22:32:26 jaf * Initial revision * */ /* Revision 1.5 1996/03/26 19:35:35 jaf */ /* Commented out trace statements. */ /* Revision 1.4 1996/03/19 18:03:22 jaf */ /* Replaced the initialization "DATA P/60*DEPTH*0/" with "DATA P/120*0/", */ /* because apparently Fortran (or at least f2c) can't handle expressions */ /* like that. */ /* Revision 1.3 1996/03/19 17:38:32 jaf */ /* Added comments about the local variables that should be saved from one */ /* invocation to the next. None of them were given initial values in the */ /* original code, but from my testing, it appears that initializing them */ /* all to 0 works. */ /* Added entry INITDYPTRK to reinitialize these local variables. */ /* Revision 1.2 1996/03/13 16:32:17 jaf */ /* Comments added explaining which of the local variables of this */ /* subroutine need to be saved from one invocation to the next, and which */ /* do not. */ /* WARNING! Some of them that should are never given initial values in */ /* this code. Hopefully, Fortran 77 defines initial values for them, but */ /* even so, giving them explicit initial values is preferable. */ /* Revision 1.1 1996/02/07 14:45:14 jaf */ /* Initial revision */ /* ********************************************************************* */ /* Dynamic Pitch Tracker */ /* Input: */ /* AMDF - Average Magnitude Difference Function array */ /* Indices 1 through LTAU read, and MINPTR */ /* LTAU - Number of lags in AMDF */ /* MINPTR - Location of minimum AMDF value */ /* VOICE - Voicing decision */ /* Output: */ /* PITCH - Smoothed pitch value, 2 frames delayed */ /* MIDX - Initial estimate of current frame pitch */ /* Compile time constant: */ /* DEPTH - Number of frames to trace back */ /* This subroutine maintains local state from one call to the next. If */ /* you want to switch to using a new audio stream for this filter, or */ /* reinitialize its state for any other reason, call the ENTRY */ /* INITDYPTRK. */ /* Subroutine */ int dyptrk_(real *amdf, integer *ltau, integer * minptr, integer *voice, integer *pitch, integer *midx, struct lpc10_encoder_state *st) { /* Initialized data */ real *s; integer *p; integer *ipoint; real *alphax; /* System generated locals */ integer i__1; /* Local variables */ integer pbar; real sbar; integer path[2], iptr, i__, j; real alpha, minsc, maxsc; /* Arguments */ /* $Log: dyptrk.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:49 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:15 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:42 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:25:29 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Revision 1.1 1996/08/19 22:32:26 jaf * Initial revision * */ /* Revision 1.3 1996/03/29 22:05:55 jaf */ /* Commented out the common block variables that are not needed by the */ /* embedded version. */ /* Revision 1.2 1996/03/26 19:34:50 jaf */ /* Added comments indicating which constants are not needed in an */ /* application that uses the LPC-10 coder. */ /* Revision 1.1 1996/02/07 14:44:09 jaf */ /* Initial revision */ /* LPC Processing control variables: */ /* *** Read-only: initialized in setup */ /* Files for Speech, Parameter, and Bitstream Input & Output, */ /* and message and debug outputs. */ /* Here are the only files which use these variables: */ /* lpcsim.f setup.f trans.f error.f vqsetup.f */ /* Many files which use fdebug are not listed, since it is only used in */ /* those other files conditionally, to print trace statements. */ /* integer fsi, fso, fpi, fpo, fbi, fbo, pbin, fmsg, fdebug */ /* LPC order, Frame size, Quantization rate, Bits per frame, */ /* Error correction */ /* Subroutine SETUP is the only place where order is assigned a value, */ /* and that value is 10. It could increase efficiency 1% or so to */ /* declare order as a constant (i.e., a Fortran PARAMETER) instead of as */ /* a variable in a COMMON block, since it is used in many places in the */ /* core of the coding and decoding routines. Actually, I take that back. */ /* At least when compiling with f2c, the upper bound of DO loops is */ /* stored in a local variable before the DO loop begins, and then that is */ /* compared against on each iteration. */ /* Similarly for lframe, which is given a value of MAXFRM in SETUP. */ /* Similarly for quant, which is given a value of 2400 in SETUP. quant */ /* is used in only a few places, and never in the core coding and */ /* decoding routines, so it could be eliminated entirely. */ /* nbits is similar to quant, and is given a value of 54 in SETUP. */ /* corrp is given a value of .TRUE. in SETUP, and is only used in the */ /* subroutines ENCODE and DECODE. It doesn't affect the speed of the */ /* coder significantly whether it is .TRUE. or .FALSE., or whether it is */ /* a constant or a variable, since it is only examined once per frame. */ /* Leaving it as a variable that is set to .TRUE. seems like a good */ /* idea, since it does enable some error-correction capability for */ /* unvoiced frames, with no change in the coding rate, and no noticeable */ /* quality difference in the decoded speech. */ /* integer quant, nbits */ /* *** Read/write: variables for debugging, not needed for LPC algorithm */ /* Current frame, Unstable frames, Output clip count, Max onset buffer, */ /* Debug listing detail level, Line count on listing page */ /* nframe is not needed for an embedded LPC10 at all. */ /* nunsfm is initialized to 0 in SETUP, and incremented in subroutine */ /* ERROR, which is only called from RCCHK. When LPC10 is embedded into */ /* an application, I would recommend removing the call to ERROR in RCCHK, */ /* and remove ERROR and nunsfm completely. */ /* iclip is initialized to 0 in SETUP, and incremented in entry SWRITE in */ /* sread.f. When LPC10 is embedded into an application, one might want */ /* to cause it to be incremented in a routine that takes the output of */ /* SYNTHS and sends it to an audio device. It could be optionally */ /* displayed, for those that might want to know what it is. */ /* maxosp is never initialized to 0 in SETUP, although it probably should */ /* be, and it is updated in subroutine ANALYS. I doubt that its value */ /* would be of much interest to an application in which LPC10 is */ /* embedded. */ /* listl and lincnt are not needed for an embedded LPC10 at all. */ /* integer nframe, nunsfm, iclip, maxosp, listl, lincnt */ /* common /contrl/ fsi, fso, fpi, fpo, fbi, fbo, pbin, fmsg, fdebug */ /* common /contrl/ quant, nbits */ /* common /contrl/ nframe, nunsfm, iclip, maxosp, listl, lincnt */ /* Parameters/constants */ /* Local variables that need not be saved */ /* Note that PATH is only used for debugging purposes, and can be */ /* removed. */ /* Local state */ /* It would be a bit more "general" to define S(LTAU), if Fortran */ /* allows the argument of a function to be used as the dimension of */ /* a local array variable. */ /* IPOINT is always in the range 0 to DEPTH-1. */ /* WARNING! */ /* In the original version of this subroutine, IPOINT, ALPHAX, */ /* every element of S, and potentially any element of P with the */ /* second index value .NE. IPTR were read without being given */ /* initial values (all indices of P with second index equal to */ /* IPTR are all written before being read in this subroutine). */ /* From examining the code carefully, it appears that all of these */ /* should be saved from one invocation to the next. */ /* I've run lpcsim with the "-l 6" option to see all of the */ /* debugging information that is printed out by this subroutine */ /* below, and it appears that S, P, IPOINT, and ALPHAX are all */ /* initialized to 0 (these initial values would likely be different */ /* on different platforms, compilers, etc.). Given that the output */ /* of the coder sounds reasonable, I'm going to initialize these */ /* variables to 0 explicitly. */ s = &(st->s[0]); p = &(st->p[0]); ipoint = &(st->ipoint); alphax = &(st->alphax); /* Parameter adjustments */ if (amdf) { --amdf; } /* Function Body */ /* Calculate the confidence factor ALPHA, used as a threshold slope in */ /* SEESAW. If unvoiced, set high slope so that every point in P array */ /* is marked as a potential pitch frequency. A scaled up version (ALPHAX )*/ /* is used to maintain arithmetic precision. */ if (*voice == 1) { *alphax = *alphax * .75f + amdf[*minptr] / 2.f; } else { *alphax *= .984375f; } alpha = *alphax / 16; if (*voice == 0 && *alphax < 128.f) { alpha = 8.f; } /* SEESAW: Construct a pitch pointer array and intermediate winner functio n*/ /* Left to right pass: */ iptr = *ipoint + 1; p[iptr * 60 - 60] = 1; i__ = 1; pbar = 1; sbar = s[0]; i__1 = *ltau; for (i__ = 1; i__ <= i__1; ++i__) { sbar += alpha; if (sbar < s[i__ - 1]) { s[i__ - 1] = sbar; p[i__ + iptr * 60 - 61] = pbar; } else { sbar = s[i__ - 1]; p[i__ + iptr * 60 - 61] = i__; pbar = i__; } } /* Right to left pass: */ i__ = pbar - 1; sbar = s[i__]; while(i__ >= 1) { sbar += alpha; if (sbar < s[i__ - 1]) { s[i__ - 1] = sbar; p[i__ + iptr * 60 - 61] = pbar; } else { pbar = p[i__ + iptr * 60 - 61]; i__ = pbar; sbar = s[i__ - 1]; } --i__; } /* Update S using AMDF */ /* Find maximum, minimum, and location of minimum */ s[0] += amdf[1] / 2; minsc = s[0]; maxsc = minsc; *midx = 1; i__1 = *ltau; for (i__ = 2; i__ <= i__1; ++i__) { s[i__ - 1] += amdf[i__] / 2; if (s[i__ - 1] > maxsc) { maxsc = s[i__ - 1]; } if (s[i__ - 1] < minsc) { *midx = i__; minsc = s[i__ - 1]; } } /* Subtract MINSC from S to prevent overflow */ i__1 = *ltau; for (i__ = 1; i__ <= i__1; ++i__) { s[i__ - 1] -= minsc; } maxsc -= minsc; /* Use higher octave pitch if significant null there */ j = 0; for (i__ = 20; i__ <= 40; i__ += 10) { if (*midx > i__) { if (s[*midx - i__ - 1] < maxsc / 4) { j = i__; } } } *midx -= j; /* TRACE: look back two frames to find minimum cost pitch estimate */ j = *ipoint; *pitch = *midx; for (i__ = 1; i__ <= 2; ++i__) { j = j % 2 + 1; *pitch = p[*pitch + j * 60 - 61]; path[i__ - 1] = *pitch; } /* The following statement subtracts one from IPOINT, mod DEPTH. I */ /* think the author chose to add DEPTH-1, instead of subtracting 1, */ /* because then it will work even if MOD doesn't work as desired on */ /* negative arguments. */ *ipoint = (*ipoint + 1) % 2; return 0; } /* dyptrk_ */ h323plus/plugins/audio/LPC_10/src/median.c0000644000175000017500000000455411341106232017000 0ustar markmark/* $Log: median.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:50 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:18 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:43 csoutheren Initial version Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.1 1996/08/19 22:31:31 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern integer median_(integer *d1, integer *d2, integer *d3); #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* ********************************************************************* */ /* MEDIAN Version 45G */ /* $Log: median.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:50 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:18 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.1 1996/08/19 22:31:31 jaf * Initial revision * */ /* Revision 1.2 1996/03/14 22:30:22 jaf */ /* Just rearranged the comments and local variable declarations a bit. */ /* Revision 1.1 1996/02/07 14:47:53 jaf */ /* Initial revision */ /* ********************************************************************* */ /* Find median of three values */ /* Input: */ /* D1,D2,D3 - Three input values */ /* Output: */ /* MEDIAN - Median value */ integer median_(integer *d1, integer *d2, integer *d3) { /* System generated locals */ integer ret_val; /* Arguments */ ret_val = *d2; if (*d2 > *d1 && *d2 > *d3) { ret_val = *d1; if (*d3 > *d1) { ret_val = *d3; } } else if (*d2 < *d1 && *d2 < *d3) { ret_val = *d1; if (*d3 < *d1) { ret_val = *d3; } } return ret_val; } /* median_ */ h323plus/plugins/audio/LPC_10/src/difmag.c0000644000175000017500000000775011341106232016773 0ustar markmark/* $Log: difmag.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:49 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:14 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:42 csoutheren Initial version Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.1 1996/08/19 22:32:31 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int difmag_(real *speech, integer *lpita, integer *tau, integer *ltau, integer *maxlag, real *amdf, integer *minptr, integer *maxptr); #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* ********************************************************************** */ /* DIFMAG Version 49 */ /* $Log: difmag.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:49 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:14 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:42 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.1 1996/08/19 22:32:31 jaf * Initial revision * */ /* Revision 1.3 1996/03/15 23:09:39 jaf */ /* Just added a few comments about which array indices of the arguments */ /* are used, and mentioning that this subroutine has no local state. */ /* Revision 1.2 1996/03/13 14:41:31 jaf */ /* Comments added explaining that none of the local variables of this */ /* subroutine need to be saved from one invocation to the next. */ /* Revision 1.1 1996/02/07 14:45:04 jaf */ /* Initial revision */ /* ********************************************************************* */ /* Compute Average Magnitude Difference Function */ /* Inputs: */ /* SPEECH - Low pass filtered speech */ /* Indices MIN_N1 through MAX_N1+LPITA-1 are read, where */ /* MIN_N1 = (MAXLAG - MAX_TAU)/2+1 MAX_TAU = max of TAU(I) for I=1,LTAU */ /* MAX_N1 = (MAXLAG - MIN_TAU)/2+1 MIN_TAU = min of TAU(I) for I=1,LTAU */ /* LPITA - Length of speech buffer */ /* TAU - Table of lags */ /* Indices 1 through LTAU read. */ /* LTAU - Number of lag values to compute */ /* MAXLAG - Maximum possible lag value */ /* Outputs: */ /* (All of these outputs are also read, but only after being written.) */ /* AMDF - Average Magnitude Difference for each lag in TAU */ /* Indices 1 through LTAU written */ /* MINPTR - Index of minimum AMDF value */ /* MAXPTR - Index of maximum AMDF value */ /* This subroutine has no local state. */ /* Subroutine */ int difmag_(real *speech, integer *lpita, integer *tau, integer *ltau, integer *maxlag, real *amdf, integer *minptr, integer * maxptr) { /* System generated locals */ integer i__1, i__2; real r__1; /* Local variables */ integer i__, j, n1, n2; real sum; /* Arguments */ /* Local variables that need not be saved */ /* Local state */ /* None */ /* Parameter adjustments */ --amdf; --tau; --speech; /* Function Body */ *minptr = 1; *maxptr = 1; i__1 = *ltau; for (i__ = 1; i__ <= i__1; ++i__) { n1 = (*maxlag - tau[i__]) / 2 + 1; n2 = n1 + *lpita - 1; sum = 0.f; i__2 = n2; for (j = n1; j <= i__2; j += 4) { sum += (r__1 = speech[j] - speech[j + tau[i__]], abs(r__1)); } amdf[i__] = sum; if (amdf[i__] < amdf[*minptr]) { *minptr = i__; } if (amdf[i__] > amdf[*maxptr]) { *maxptr = i__; } } return 0; } /* difmag_ */ h323plus/plugins/audio/LPC_10/src/irc2pc.c0000644000175000017500000001170211341106232016716 0ustar markmark/* $Log: irc2pc.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:50 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:16 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:43 csoutheren Initial version Revision 1.2 2002/02/15 03:57:55 yurik Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.1 1996/08/19 22:31:56 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int irc2pc_(real *rc, real *pc, integer *order, real *gprime, real *g2pass); #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* ***************************************************************** */ /* IRC2PC Version 48 */ /* $Log: irc2pc.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:50 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:16 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.2 2002/02/15 03:57:55 yurik /* Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.1 1996/08/19 22:31:56 jaf * Initial revision * */ /* Revision 1.3 1996/03/20 15:47:19 jaf */ /* Added comments about which indices of array arguments are read or */ /* written. */ /* Revision 1.2 1996/03/14 16:59:04 jaf */ /* Comments added explaining that none of the local variables of this */ /* subroutine need to be saved from one invocation to the next. */ /* Revision 1.1 1996/02/07 14:47:27 jaf */ /* Initial revision */ /* ***************************************************************** */ /* Convert Reflection Coefficients to Predictor Coeficients */ /* Inputs: */ /* RC - Reflection coefficients */ /* Indices 1 through ORDER read. */ /* ORDER - Number of RC's */ /* GPRIME - Excitation modification gain */ /* Outputs: */ /* PC - Predictor coefficients */ /* Indices 1 through ORDER written. */ /* Indices 1 through ORDER-1 are read after being written. */ /* G2PASS - Excitation modification sharpening factor */ /* This subroutine has no local state. */ /* Subroutine */ int irc2pc_(real *rc, real *pc, integer *order, real *gprime, real *g2pass) { /* System generated locals */ integer i__1, i__2; /* Builtin functions */ double sqrt(doublereal); /* Local variables */ real temp[10]; integer i__, j; /* Arguments */ /* $Log: irc2pc.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:50 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:16 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.2 2002/02/15 03:57:55 yurik /* Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.1 1996/08/19 22:31:56 jaf * Initial revision * */ /* Revision 1.3 1996/03/29 22:03:47 jaf */ /* Removed definitions for any constants that were no longer used. */ /* Revision 1.2 1996/03/26 19:34:33 jaf */ /* Added comments indicating which constants are not needed in an */ /* application that uses the LPC-10 coder. */ /* Revision 1.1 1996/02/07 14:43:51 jaf */ /* Initial revision */ /* LPC Configuration parameters: */ /* Frame size, Prediction order, Pitch period */ /* Local variables that need not be saved */ /* Parameter adjustments */ --pc; --rc; /* Function Body */ *g2pass = 1.f; i__1 = *order; for (i__ = 1; i__ <= i__1; ++i__) { *g2pass *= 1.f - rc[i__] * rc[i__]; } *g2pass = (real)(*gprime * sqrt(*g2pass)); pc[1] = rc[1]; i__1 = *order; for (i__ = 2; i__ <= i__1; ++i__) { i__2 = i__ - 1; for (j = 1; j <= i__2; ++j) { temp[j - 1] = pc[j] - rc[i__] * pc[i__ - j]; } i__2 = i__ - 1; for (j = 1; j <= i__2; ++j) { pc[j] = temp[j - 1]; } pc[i__] = rc[i__]; } return 0; } /* irc2pc_ */ h323plus/plugins/audio/LPC_10/src/ham84.c0000644000175000017500000000755511341106232016470 0ustar markmark/* $Log: ham84.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:50 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:16 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:42 csoutheren Initial version Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.1 1996/08/19 22:32:07 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int ham84_(integer *input, integer *output, integer *errcnt); #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* ***************************************************************** */ /* HAM84 Version 45G */ /* $Log: ham84.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:50 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:16 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:42 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.1 1996/08/19 22:32:07 jaf * Initial revision * */ /* Revision 1.3 1996/03/21 15:26:00 jaf */ /* Put comment header in standard form. */ /* Revision 1.2 1996/03/13 22:00:13 jaf */ /* Comments added explaining that none of the local variables of this */ /* subroutine need to be saved from one invocation to the next. */ /* Revision 1.1 1996/02/07 14:47:04 jaf */ /* Initial revision */ /* ***************************************************************** */ /* Hamming 8,4 Decoder - can correct 1 out of seven bits */ /* and can detect up to two errors. */ /* Input: */ /* INPUT - Seven bit data word, 4 bits parameter and */ /* 4 bits parity information */ /* Input/Output: */ /* ERRCNT - Sums errors detected by Hamming code */ /* Output: */ /* OUTPUT - 4 corrected parameter bits */ /* This subroutine is entered with an eight bit word in INPUT. The 8th */ /* bit is parity and is stripped off. The remaining 7 bits address the */ /* hamming 8,4 table and the output OUTPUT from the table gives the 4 */ /* bits of corrected data. If bit 4 is set, no error was detected. */ /* ERRCNT is the number of errors counted. */ /* This subroutine has no local state. */ /* Subroutine */ int ham84_(integer *input, integer *output, integer *errcnt) { /* Initialized data */ static integer dactab[128] = { 16,0,0,3,0,5,14,7,0,9,14,11,14,13,30,14,0, 9,2,7,4,7,7,23,9,25,10,9,12,9,14,7,0,5,2,11,5,21,6,5,8,11,11,27, 12,5,14,11,2,1,18,2,12,5,2,7,12,9,2,11,28,12,12,15,0,3,3,19,4,13, 6,3,8,13,10,3,13,29,14,13,4,1,10,3,20,4,4,7,10,9,26,10,4,13,10,15, 8,1,6,3,6,5,22,6,24,8,8,11,8,13,6,15,1,17,2,1,4,1,6,15,8,1,10,15, 12,15,15,31 }; integer i__, j, parity; /* Arguments */ /* Parameters/constants */ /* Local variables that need not be saved */ /* Determine parity of input word */ parity = *input & 255; parity ^= parity / 16; parity ^= parity / 4; parity ^= parity / 2; parity &= 1; i__ = dactab[*input & 127]; *output = i__ & 15; j = i__ & 16; if (j != 0) { /* No errors detected in seven bits */ if (parity != 0) { ++(*errcnt); } } else { /* One or two errors detected */ ++(*errcnt); if (parity == 0) { /* Two errors detected */ ++(*errcnt); *output = -1; } } return 0; } /* ham84_ */ h323plus/plugins/audio/LPC_10/src/Makefile0000644000175000017500000000270011341106232017026 0ustar markmark# # Makefile for LPC-10 speech coder library (unix) # # default C compiler CC= gcc # # These definitions for CFLAGS and LIB_TARGET_DIR are used when one # runs make in the lpc10 directory, without environment variables that # override them. When make is run in this directory from a makefile # for an application that uses the LPC10 coder, there are environment # variables set for CFLAGS and LIB_TARGET_DIR that override these # definitions. # LIB_TARGET_DIR = .. # # -I$(LIB_TARGET_DIR) option needed so that #include "machine.h" # directives can find the machine.h file. # WARNINGS = -Wall CFLAGS = -O3 -I$(LIB_TARGET_DIR) $(WARNINGS) LIB = $(LIB_TARGET_DIR)/liblpc10.a .PHONY: all clean all: $(LIB) ranlib $(LIB) $(LIB): $(LIB)(f2clib.o) \ $(LIB)(analys.o) \ $(LIB)(bsynz.o) \ $(LIB)(chanwr.o) \ $(LIB)(dcbias.o) \ $(LIB)(decode.o) \ $(LIB)(deemp.o) \ $(LIB)(difmag.o) \ $(LIB)(dyptrk.o) \ $(LIB)(encode.o) \ $(LIB)(energy.o) \ $(LIB)(ham84.o) \ $(LIB)(hp100.o) \ $(LIB)(invert.o) \ $(LIB)(irc2pc.o) \ $(LIB)(ivfilt.o) \ $(LIB)(lpcdec.o) \ $(LIB)(lpcenc.o) \ $(LIB)(lpcini.o) \ $(LIB)(lpfilt.o) \ $(LIB)(median.o) \ $(LIB)(mload.o) \ $(LIB)(onset.o) \ $(LIB)(pitsyn.o) \ $(LIB)(placea.o) \ $(LIB)(placev.o) \ $(LIB)(preemp.o) \ $(LIB)(prepro.o) \ $(LIB)(random.o) \ $(LIB)(rcchk.o) \ $(LIB)(synths.o) \ $(LIB)(tbdm.o) \ $(LIB)(voicin.o) \ $(LIB)(vparms.o) clean: -rm -f *.o h323plus/plugins/audio/LPC_10/src/decode_.c0000644000175000017500000005235111341106232017123 0ustar markmark/* $Log: decode_.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:49 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:14 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:42 csoutheren Initial version Revision 1.2 2002/02/15 03:57:55 yurik Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.2 1996/08/20 20:22:39 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_decoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_decoder_state(). * * Revision 1.1 1996/08/19 22:32:38 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int decode_(integer *ipitv, integer *irms, integer *irc, integer *voice, integer *pitch, real *rms, real *rc, struct lpc10_decoder_state *st); /* comlen contrl_ 12 */ /*:ref: ham84_ 14 3 4 4 4 */ /*:ref: median_ 4 3 4 4 4 */ #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* Common Block Declarations */ extern struct { integer order, lframe; logical corrp; } contrl_; #define contrl_1 contrl_ /* Table of constant values */ static integer c__2 = 2; /* ***************************************************************** */ /* DECODE Version 54 */ /* $Log: decode_.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:49 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:14 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:42 csoutheren /* Initial version /* /* Revision 1.2 2002/02/15 03:57:55 yurik /* Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:22:39 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_decoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_decoder_state(). * * Revision 1.1 1996/08/19 22:32:38 jaf * Initial revision * */ /* Revision 1.5 1996/05/23 20:06:03 jaf */ /* Assigned PITCH a "default" value on the first call, since otherwise it */ /* would be left uninitialized. */ /* Revision 1.4 1996/03/26 19:35:18 jaf */ /* Commented out trace statements. */ /* Revision 1.3 1996/03/21 21:10:50 jaf */ /* Added entry INITDECODE to reinitialize the local state of subroutine */ /* DECODE. */ /* Revision 1.2 1996/03/21 21:04:50 jaf */ /* Determined which local variables should be saved from one invocation */ /* to the next, and guessed initial values for some that should have been */ /* saved, but weren't given initial values. Many of the arrays are */ /* "constants", and many local variables are only used if the "global" */ /* variable CORRP is .TRUE. */ /* Added comments explaining which indices of array arguments are read or */ /* written. */ /* Revision 1.1 1996/02/12 03:21:10 jaf */ /* Initial revision */ /* ***************************************************************** */ /* This subroutine provides error correction and decoding */ /* for all LPC parameters */ /* Input: */ /* IPITV - Index value of pitch */ /* IRMS - Coded Energy */ /* CORRP - Error correction: */ /* If FALSE, parameters are decoded directly with no delay. If TRUE, */ /* most important parameter bits are protected by Hamming code and */ /* median smoothed. This requires an additional frame of delay. */ /* Input/Output: */ /* IRC - Coded Reflection Coefficients */ /* Indices 1 through ORDER always read, then written. */ /* Output: */ /* VOICE - Half frame voicing decisions */ /* Indices 1 through 2 written. */ /* PITCH - Decoded pitch */ /* RMS - Energy */ /* RC - Reflection coefficients */ /* Indices 1 through ORDER written. */ /* NOTE: Zero RC's should be done more directly, but this would affect */ /* coded parameter printout. */ /* This subroutine maintains local state from one call to the next. If */ /* you want to switch to using a new audio stream for this filter, or */ /* reinitialize its state for any other reason, call the ENTRY */ /* INITDECODE. */ /* Subroutine */ int decode_(integer *ipitv, integer *irms, integer *irc, integer *voice, integer *pitch, real *rms, real *rc, struct lpc10_decoder_state *st) { /* Initialized data */ logical *first; static integer ethrs = 2048; static integer ethrs1 = 128; static integer ethrs2 = 1024; static integer ethrs3 = 2048; static integer ivtab[32] = { 24960,24960,24960,24960,25480,25480,25483, 25480,16640,1560,1560,1560,16640,1816,1563,1560,24960,24960,24859, 24856,26001,25881,25915,25913,1560,1560,7800,3640,1561,1561,3643, 3641 }; static real corth[32] /* was [4][8] */ = { 32767.f,10.f,5.f,0.f, 32767.f,8.f,4.f,0.f,32.f,6.4f,3.2f,0.f,32.f,6.4f,3.2f,0.f,32.f, 11.2f,6.4f,0.f,32.f,11.2f,6.4f,0.f,16.f,5.6f,3.2f,0.f,16.f,5.6f, 3.2f,0.f }; static integer detau[128] = { 0,0,0,3,0,3,3,31,0,3,3,21,3,3,29,30,0,3,3, 20,3,25,27,26,3,23,58,22,3,24,28,3,0,3,3,3,3,39,33,32,3,37,35,36, 3,38,34,3,3,42,46,44,50,40,48,3,54,3,56,3,52,3,3,1,0,3,3,108,3,78, 100,104,3,84,92,88,156,80,96,3,3,74,70,72,66,76,68,3,62,3,60,3,64, 3,3,1,3,116,132,112,148,152,3,3,140,3,136,3,144,3,3,1,124,120,128, 3,3,3,3,1,3,3,3,1,3,1,1,1 }; static integer rmst[64] = { 1024,936,856,784,718,656,600,550,502,460,420, 384,352,328,294,270,246,226,206,188,172,158,144,132,120,110,102, 92,84,78,70,64,60,54,50,46,42,38,34,32,30,26,24,22,20,18,17,16,15, 14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 }; static integer detab7[32] = { 4,11,18,25,32,39,46,53,60,66,72,77,82,87,92, 96,101,104,108,111,114,115,117,119,121,122,123,124,125,126,127, 127 }; static real descl[8] = { .6953f,.625f,.5781f,.5469f,.5312f,.5391f,.4688f, .3828f }; integer *ivp2h; static integer deadd[8] = { 1152,-2816,-1536,-3584,-1280,-2432,768,-1920 } ; static integer qb[8] = { 511,511,1023,1023,1023,1023,2047,4095 }; static integer nbit[10] = { 8,8,5,5,4,4,4,4,3,2 }; static integer zrc[10] = { 0,0,0,0,0,3,0,2,0,0 }; static integer bit[5] = { 2,4,8,16,32 }; integer *iovoic; integer *iavgp; integer *iptold; integer *erate; integer *drc; integer *dpit; integer *drms; /* System generated locals */ integer i__1, i__2; /* Builtin functions */ integer pow_ii(integer *, integer *); /* Local variables */ extern /* Subroutine */ int ham84_(integer *, integer *, integer *); integer ipit, iout, i__, icorf, index, ivoic, ixcor, i1, i2, i4; extern integer median_(integer *, integer *, integer *); integer ishift, errcnt, lsb; /* $Log: decode_.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:49 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:14 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:42 csoutheren /* Initial version /* /* Revision 1.2 2002/02/15 03:57:55 yurik /* Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:22:39 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_decoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_decoder_state(). * * Revision 1.1 1996/08/19 22:32:38 jaf * Initial revision * */ /* Revision 1.3 1996/03/29 22:03:47 jaf */ /* Removed definitions for any constants that were no longer used. */ /* Revision 1.2 1996/03/26 19:34:33 jaf */ /* Added comments indicating which constants are not needed in an */ /* application that uses the LPC-10 coder. */ /* Revision 1.1 1996/02/07 14:43:51 jaf */ /* Initial revision */ /* LPC Configuration parameters: */ /* Frame size, Prediction order, Pitch period */ /* Arguments */ /* $Log: decode_.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:49 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:14 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:42 csoutheren /* Initial version /* /* Revision 1.2 2002/02/15 03:57:55 yurik /* Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:22:39 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_decoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_decoder_state(). * * Revision 1.1 1996/08/19 22:32:38 jaf * Initial revision * */ /* Revision 1.3 1996/03/29 22:05:55 jaf */ /* Commented out the common block variables that are not needed by the */ /* embedded version. */ /* Revision 1.2 1996/03/26 19:34:50 jaf */ /* Added comments indicating which constants are not needed in an */ /* application that uses the LPC-10 coder. */ /* Revision 1.1 1996/02/07 14:44:09 jaf */ /* Initial revision */ /* LPC Processing control variables: */ /* *** Read-only: initialized in setup */ /* Files for Speech, Parameter, and Bitstream Input & Output, */ /* and message and debug outputs. */ /* Here are the only files which use these variables: */ /* lpcsim.f setup.f trans.f error.f vqsetup.f */ /* Many files which use fdebug are not listed, since it is only used in */ /* those other files conditionally, to print trace statements. */ /* integer fsi, fso, fpi, fpo, fbi, fbo, pbin, fmsg, fdebug */ /* LPC order, Frame size, Quantization rate, Bits per frame, */ /* Error correction */ /* Subroutine SETUP is the only place where order is assigned a value, */ /* and that value is 10. It could increase efficiency 1% or so to */ /* declare order as a constant (i.e., a Fortran PARAMETER) instead of as */ /* a variable in a COMMON block, since it is used in many places in the */ /* core of the coding and decoding routines. Actually, I take that back. */ /* At least when compiling with f2c, the upper bound of DO loops is */ /* stored in a local variable before the DO loop begins, and then that is */ /* compared against on each iteration. */ /* Similarly for lframe, which is given a value of MAXFRM in SETUP. */ /* Similarly for quant, which is given a value of 2400 in SETUP. quant */ /* is used in only a few places, and never in the core coding and */ /* decoding routines, so it could be eliminated entirely. */ /* nbits is similar to quant, and is given a value of 54 in SETUP. */ /* corrp is given a value of .TRUE. in SETUP, and is only used in the */ /* subroutines ENCODE and DECODE. It doesn't affect the speed of the */ /* coder significantly whether it is .TRUE. or .FALSE., or whether it is */ /* a constant or a variable, since it is only examined once per frame. */ /* Leaving it as a variable that is set to .TRUE. seems like a good */ /* idea, since it does enable some error-correction capability for */ /* unvoiced frames, with no change in the coding rate, and no noticeable */ /* quality difference in the decoded speech. */ /* integer quant, nbits */ /* *** Read/write: variables for debugging, not needed for LPC algorithm */ /* Current frame, Unstable frames, Output clip count, Max onset buffer, */ /* Debug listing detail level, Line count on listing page */ /* nframe is not needed for an embedded LPC10 at all. */ /* nunsfm is initialized to 0 in SETUP, and incremented in subroutine */ /* ERROR, which is only called from RCCHK. When LPC10 is embedded into */ /* an application, I would recommend removing the call to ERROR in RCCHK, */ /* and remove ERROR and nunsfm completely. */ /* iclip is initialized to 0 in SETUP, and incremented in entry SWRITE in */ /* sread.f. When LPC10 is embedded into an application, one might want */ /* to cause it to be incremented in a routine that takes the output of */ /* SYNTHS and sends it to an audio device. It could be optionally */ /* displayed, for those that might want to know what it is. */ /* maxosp is never initialized to 0 in SETUP, although it probably should */ /* be, and it is updated in subroutine ANALYS. I doubt that its value */ /* would be of much interest to an application in which LPC10 is */ /* embedded. */ /* listl and lincnt are not needed for an embedded LPC10 at all. */ /* integer nframe, nunsfm, iclip, maxosp, listl, lincnt */ /* common /contrl/ fsi, fso, fpi, fpo, fbi, fbo, pbin, fmsg, fdebug */ /* common /contrl/ quant, nbits */ /* common /contrl/ nframe, nunsfm, iclip, maxosp, listl, lincnt */ /* Function return value definitions */ /* Parameters/constants */ /* The variables below that are not Fortran PARAMETER's are */ /* initialized with DATA statements, and then never modified. */ /* The following are used regardless of CORRP's value. */ /* DETAU, NBIT, QB, DEADD, DETAB7, RMST, DESCL */ /* The following are used only if CORRP is .TRUE. */ /* ETHRS, ETHRS1, ETHRS2, ETHRS3, IVTAB, BIT, CORTH, ZRC */ /* Local variables that need not be saved */ /* The following are used regardless of CORRP's value */ /* The following are used only if CORRP is .TRUE. */ /* Local state */ /* The following are used regardless of CORRP's value */ /* The following are used only if CORRP is .TRUE. */ /* I am guessing the initial values for IVP2H, IOVOIC, DRC, DPIT, */ /* and DRMS. They should be checked to see if they are reasonable. */ /* I'm also guessing for ERATE, but I think 0 is the right initial */ /* value. */ /* Parameter adjustments */ if (irc) { --irc; } if (voice) { --voice; } if (rc) { --rc; } /* Function Body */ iptold = &(st->iptold); first = &(st->first); ivp2h = &(st->ivp2h); iovoic = &(st->iovoic); iavgp = &(st->iavgp); erate = &(st->erate); drc = &(st->drc[0]); dpit = &(st->dpit[0]); drms = &(st->drms[0]); /* DATA statements for "constants" defined above. */ /* IF (LISTL.GE.3) WRITE(FDEBUG,800) IPITV,IRMS,(IRC(J),J=1,ORDER) */ /* 800 FORMAT(1X,' <>',T32,6X,I6,I5,T50,10I8) */ /* If no error correction, do pitch and voicing then jump to decode */ i4 = detau[*ipitv]; if (! contrl_1.corrp) { voice[1] = 1; voice[2] = 1; if (*ipitv <= 1) { voice[1] = 0; } if (*ipitv == 0 || *ipitv == 2) { voice[2] = 0; } *pitch = i4; if (*pitch <= 4) { *pitch = *iptold; } if (voice[1] == 1 && voice[2] == 1) { *iptold = *pitch; } if (voice[1] != voice[2]) { *pitch = *iptold; } goto L900; } /* Do error correction pitch and voicing */ if (i4 > 4) { dpit[0] = i4; ivoic = 2; *iavgp = (*iavgp * 15 + i4 + 8) / 16; } else { ivoic = i4; dpit[0] = *iavgp; } drms[0] = *irms; i__1 = contrl_1.order; for (i__ = 1; i__ <= i__1; ++i__) { drc[i__ * 3 - 3] = irc[i__]; } /* Determine index to IVTAB from V/UV decision */ /* If error rate is high then use alternate table */ index = (*ivp2h << 4) + (*iovoic << 2) + ivoic + 1; i1 = ivtab[index - 1]; ipit = i1 & 3; icorf = i1 / 8; if (*erate < ethrs) { icorf /= 64; } /* Determine error rate: 4=high 1=low */ ixcor = 4; if (*erate < ethrs3) { ixcor = 3; } if (*erate < ethrs2) { ixcor = 2; } if (*erate < ethrs1) { ixcor = 1; } /* Voice/unvoice decision determined from bits 0 and 1 of IVTAB */ voice[1] = icorf / 2 & 1; voice[2] = icorf & 1; /* Skip decoding on first frame because present data not yet available */ if (*first) { *first = FALSE_; /* Assign PITCH a "default" value on the first call, since */ /* otherwise it would be left uninitialized. The two lines */ /* below were copied from above, since it seemed like a */ /* reasonable thing to do for the first call. */ *pitch = i4; if (*pitch <= 4) { *pitch = *iptold; } goto L500; } /* If bit 4 of ICORF is set then correct RMS and RC(1) - RC(4). */ /* Determine error rate and correct errors using a Hamming 8,4 code */ /* during transition or unvoiced frame. If IOUT is negative, */ /* more than 1 error occurred, use previous frame's parameters. */ if ((icorf & bit[3]) != 0) { errcnt = 0; lsb = drms[1] & 1; index = (drc[22] << 4) + drms[1] / 2; ham84_(&index, &iout, &errcnt); drms[1] = drms[2]; if (iout >= 0) { drms[1] = (iout << 1) + lsb; } for (i__ = 1; i__ <= 4; ++i__) { if (i__ == 1) { i1 = ((drc[25] & 7) << 1) + (drc[28] & 1); } else { i1 = drc[(9 - i__) * 3 - 2] & 15; } i2 = drc[(5 - i__) * 3 - 2] & 31; lsb = i2 & 1; index = (i1 << 4) + i2 / 2; ham84_(&index, &iout, &errcnt); if (iout >= 0) { iout = (iout << 1) + lsb; if ((iout & 16) == 16) { iout += -32; } } else { iout = drc[(5 - i__) * 3 - 1]; } drc[(5 - i__) * 3 - 2] = iout; } /* Determine error rate */ *erate = (integer)(*erate * .96875f + errcnt * 102); } /* Get unsmoothed RMS, RC's, and PITCH */ *irms = drms[1]; i__1 = contrl_1.order; for (i__ = 1; i__ <= i__1; ++i__) { irc[i__] = drc[i__ * 3 - 2]; } if (ipit == 1) { dpit[1] = dpit[2]; } if (ipit == 3) { dpit[1] = dpit[0]; } *pitch = dpit[1]; /* If bit 2 of ICORF is set then smooth RMS and RC's, */ if ((icorf & bit[1]) != 0) { if ((i__1 = drms[1] - drms[0], (real) abs(i__1)) >= corth[ixcor + 3] && (i__2 = drms[1] - drms[2], (real) abs(i__2)) >= corth[ ixcor + 3]) { *irms = median_(&drms[2], &drms[1], drms); } for (i__ = 1; i__ <= 6; ++i__) { if ((i__1 = drc[i__ * 3 - 2] - drc[i__ * 3 - 3], (real) abs(i__1)) >= corth[ixcor + (i__ + (2 << 2)) - 5] && (i__2 = drc[i__ * 3 - 2] - drc[i__ * 3 - 1], (real) abs(i__2)) >= corth[ ixcor + (i__ + (2 << 2)) - 5]) { irc[i__] = median_(&drc[i__ * 3 - 1], &drc[i__ * 3 - 2], &drc[ i__ * 3 - 3]); } } } /* If bit 3 of ICORF is set then smooth pitch */ if ((icorf & bit[2]) != 0) { if ((i__1 = dpit[1] - dpit[0], (real) abs(i__1)) >= corth[ixcor - 1] && (i__2 = dpit[1] - dpit[2], (real) abs(i__2)) >= corth[ ixcor - 1]) { *pitch = median_(&dpit[2], &dpit[1], dpit); } } /* If bit 5 of ICORF is set then RC(5) - RC(10) are loaded with */ /* values so that after quantization bias is removed in decode */ /* the values will be zero. */ L500: if ((icorf & bit[4]) != 0) { i__1 = contrl_1.order; for (i__ = 5; i__ <= i__1; ++i__) { irc[i__] = zrc[i__ - 1]; } } /* House keeping - one frame delay */ *iovoic = ivoic; *ivp2h = voice[2]; dpit[2] = dpit[1]; dpit[1] = dpit[0]; drms[2] = drms[1]; drms[1] = drms[0]; i__1 = contrl_1.order; for (i__ = 1; i__ <= i__1; ++i__) { drc[i__ * 3 - 1] = drc[i__ * 3 - 2]; drc[i__ * 3 - 2] = drc[i__ * 3 - 3]; } L900: /* IF (LISTL.GE.3)WRITE(FDEBUG,801)VOICE,PITCH,IRMS,(IRC(J),J=1,ORDER) */ /* 801 FORMAT(1X,'<>',T32,2I3,I6,I5,T50,10I8) */ /* Decode RMS */ *irms = rmst[(31 - *irms) * 2]; /* Decode RC(1) and RC(2) from log-area-ratios */ /* Protect from illegal coded value (-16) caused by bit errors */ for (i__ = 1; i__ <= 2; ++i__) { i2 = irc[i__]; i1 = 0; if (i2 < 0) { i1 = 1; i2 = -i2; if (i2 > 15) { i2 = 0; } } i2 = detab7[i2 * 2]; if (i1 == 1) { i2 = -i2; } ishift = 15 - nbit[i__ - 1]; irc[i__] = i2 * pow_ii(&c__2, &ishift); } /* Decode RC(3)-RC(10) to sign plus 14 bits */ i__1 = contrl_1.order; for (i__ = 3; i__ <= i__1; ++i__) { i2 = irc[i__]; ishift = 15 - nbit[i__ - 1]; i2 *= pow_ii(&c__2, &ishift); i2 += qb[i__ - 3]; irc[i__] = (integer)(i2 * descl[i__ - 3] + deadd[i__ - 3]); } /* IF (LISTL.GE.3) WRITE(FDEBUG,811) IRMS, (IRC(I),I=1,ORDER) */ /* 811 FORMAT(1X,'<>',T45,I4,1X,10I8) */ /* Scale RMS and RC's to reals */ *rms = (real) (*irms); i__1 = contrl_1.order; for (i__ = 1; i__ <= i__1; ++i__) { rc[i__] = irc[i__] / 16384.f; } return 0; } /* decode_ */ h323plus/plugins/audio/LPC_10/src/dcbias.c0000644000175000017500000000577011341106232016771 0ustar markmark/* $Log: dcbias.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:49 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:14 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:42 csoutheren Initial version Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.1 1996/08/19 22:40:23 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int dcbias_(integer *len, real *speech, real *sigout); #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* ********************************************************************* */ /* DCBIAS Version 50 */ /* $Log: dcbias.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:49 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:14 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:42 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.1 1996/08/19 22:40:23 jaf * Initial revision * */ /* Revision 1.3 1996/03/18 21:19:22 jaf */ /* Just added a few comments about which array indices of the arguments */ /* are used, and mentioning that this subroutine has no local state. */ /* Revision 1.2 1996/03/13 16:44:53 jaf */ /* Comments added explaining that none of the local variables of this */ /* subroutine need to be saved from one invocation to the next. */ /* Revision 1.1 1996/02/07 14:44:21 jaf */ /* Initial revision */ /* ********************************************************************* */ /* Calculate and remove DC bias from buffer. */ /* Input: */ /* LEN - Length of speech buffers */ /* SPEECH - Input speech buffer */ /* Indices 1 through LEN read. */ /* Output: */ /* SIGOUT - Output speech buffer */ /* Indices 1 through LEN written */ /* This subroutine has no local state. */ /* Subroutine */ int dcbias_(integer *len, real *speech, real *sigout) { /* System generated locals */ integer i__1; /* Local variables */ real bias; integer i__; /* Arguments */ /* Local variables that need not be saved */ /* Parameter adjustments */ --sigout; --speech; /* Function Body */ bias = 0.f; i__1 = *len; for (i__ = 1; i__ <= i__1; ++i__) { bias += speech[i__]; } bias /= *len; i__1 = *len; for (i__ = 1; i__ <= i__1; ++i__) { sigout[i__] = speech[i__] - bias; } return 0; } /* dcbias_ */ h323plus/plugins/audio/LPC_10/src/lpcenc.c0000644000175000017500000001420411341106232017000 0ustar markmark/* $Log: lpcenc.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:50 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:17 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:43 csoutheren Initial version Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.2 1996/08/20 20:31:21 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Changed name of function from lpcenc_ to lpc10_encode, simply to make * all lpc10 functions have more consistent naming with each other. * * Revision 1.1 1996/08/19 22:31:44 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int lpcenc_(real *speech, integer *bits); extern int initlpcenc_(void); /*:ref: prepro_ 14 2 6 4 */ /*:ref: analys_ 14 5 6 4 4 6 6 */ /*:ref: encode_ 14 7 4 4 6 6 4 4 4 */ /*:ref: chanwr_ 14 5 4 4 4 4 4 */ /*:ref: initprepro_ 14 0 */ /*:ref: initanalys_ 14 0 */ #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* Table of constant values */ static integer c__180 = 180; static integer c__10 = 10; /* ***************************************************************** */ /* $Log: lpcenc.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:50 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:17 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:31:21 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Changed name of function from lpcenc_ to lpc10_encode, simply to make * all lpc10 functions have more consistent naming with each other. * * Revision 1.1 1996/08/19 22:31:44 jaf * Initial revision * */ /* Revision 1.2 1996/03/28 00:01:22 jaf */ /* Commented out some trace statements. */ /* Revision 1.1 1996/03/28 00:00:27 jaf */ /* Initial revision */ /* ***************************************************************** */ /* Encode one frame of 180 speech samples to 54 bits. */ /* Input: */ /* SPEECH - Speech encoded as real values in the range [-1,+1]. */ /* Indices 1 through 180 read, and modified (by PREPRO). */ /* Output: */ /* BITS - 54 encoded bits, stored 1 per array element. */ /* Indices 1 through 54 written. */ /* This subroutine maintains local state from one call to the next. If */ /* you want to switch to using a new audio stream for this filter, or */ /* reinitialize its state for any other reason, call the ENTRY */ /* INITLPCENC. */ /* Subroutine */ int lpc10_encode(real *speech, integer *bits, struct lpc10_encoder_state *st) { integer irms, voice[2], pitch, ipitv; real rc[10]; extern /* Subroutine */ int encode_(integer *, integer *, real *, real *, integer *, integer *, integer *), chanwr_(integer *, integer *, integer *, integer *, integer *, struct lpc10_encoder_state *), analys_(real *, integer *, integer *, real *, real *, struct lpc10_encoder_state *), prepro_(real *, integer *, struct lpc10_encoder_state *); integer irc[10]; real rms; /* Arguments */ /* $Log: lpcenc.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:50 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:17 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:31:21 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Changed name of function from lpcenc_ to lpc10_encode, simply to make * all lpc10 functions have more consistent naming with each other. * * Revision 1.1 1996/08/19 22:31:44 jaf * Initial revision * */ /* Revision 1.3 1996/03/29 22:03:47 jaf */ /* Removed definitions for any constants that were no longer used. */ /* Revision 1.2 1996/03/26 19:34:33 jaf */ /* Added comments indicating which constants are not needed in an */ /* application that uses the LPC-10 coder. */ /* Revision 1.1 1996/02/07 14:43:51 jaf */ /* Initial revision */ /* LPC Configuration parameters: */ /* Frame size, Prediction order, Pitch period */ /* Local variables that need not be saved */ /* Uncoded speech parameters */ /* Coded speech parameters */ /* Local state */ /* None */ /* Parameter adjustments */ if (speech) { --speech; } if (bits) { --bits; } /* Function Body */ prepro_(&speech[1], &c__180, st); analys_(&speech[1], voice, &pitch, &rms, rc, st); encode_(voice, &pitch, &rms, rc, &ipitv, &irms, irc); chanwr_(&c__10, &ipitv, &irms, irc, &bits[1], st); return 0; } /* lpcenc_ */ h323plus/plugins/audio/LPC_10/src/vparms.c0000644000175000017500000002240011341106232017041 0ustar markmark/* $Log: vparms.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:51 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:19 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:58 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:43 csoutheren Initial version Revision 1.2 2002/02/15 03:57:55 yurik Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.1 1996/08/19 22:30:04 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int vparms_(integer *vwin, real *inbuf, real *lpbuf, integer *buflim, integer *half, real *dither, integer *mintau, integer *zc, integer *lbe, integer *fbe, real *qs, real *rc1, real *ar_b__, real *ar_f__); #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* Table of constant values */ static real c_b2 = 1.f; /* ********************************************************************* */ /* VPARMS Version 50 */ /* $Log: vparms.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:51 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:19 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:58 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.2 2002/02/15 03:57:55 yurik /* Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.1 1996/08/19 22:30:04 jaf * Initial revision * */ /* Revision 1.6 1996/03/29 18:01:16 jaf */ /* Added some more comments about the range of INBUF and LPBUF that can */ /* be read. Note that it is possible for index VWIN(2)+1 to be read from */ /* INBUF, which might be outside of its defined range, although that will */ /* require more careful checking. */ /* Revision 1.5 1996/03/19 00:02:02 jaf */ /* I just noticed that the argument DITHER is modified inside of this */ /* subroutine. Comments were added explaining the possible final values. */ /* Revision 1.4 1996/03/18 22:22:59 jaf */ /* Finishing the job I said I did with the last check-in comments. */ /* Revision 1.3 1996/03/18 22:22:17 jaf */ /* Just added a few comments about which array indices of the arguments */ /* are used, and mentioning that this subroutine has no local state. */ /* Revision 1.2 1996/03/13 15:02:58 jaf */ /* Comments added explaining that none of the local variables of this */ /* subroutine need to be saved from one invocation to the next. */ /* Revision 1.1 1996/02/07 14:50:42 jaf */ /* Initial revision */ /* ********************************************************************* */ /* Calculate voicing parameters: */ /* Input: */ /* VWIN - Voicing window limits */ /* Indices 1 through 2 read. */ /* INBUF - Input speech buffer */ /* Indices START-1 through STOP read, */ /* where START and STOP are defined in the code (only written once). */ /* Note that STOP can be as large as VWIN(2)+1 ! */ /* LPBUF - Low pass filtered speech */ /* Indices START-MINTAU through STOP+MINTAU read, */ /* where START and STOP are defined in the code (only written once). */ /* BUFLIM - Array bounds for INBUF and LPBUF */ /* Indices 1 through 4 read. */ /* HALF - Half frame (1 or 2) */ /* MINTAU - Lag corresponding to minimum AMDF value (pitch estimate) */ /* Input/Output: */ /* DITHER - Zero crossing threshold */ /* The resulting value might be the negation of the input */ /* value. It might always be the same as the input value, */ /* if the DO loop below always executes an even number of times. */ /* Output: (all of them are written on every call) */ /* ZC - Zero crossing rate */ /* LBE - Low band energy (sum of magnitudes - SM) */ /* FBE - Full band energy (SM) */ /* QS - Ratio of 6 dB/oct preemphasized energy to full band energy */ /* RC1 - First reflection coefficient */ /* AR_B - Product of the causal forward and reverse pitch */ /* prediction gains */ /* AR_F - Product of the noncausal forward and reverse pitch */ /* prediction gains */ /* Internal: */ /* OLDSGN - Previous sign of dithered signal */ /* VLEN - Length of voicing window */ /* START - Lower address of current half of voicing window */ /* STOP - Upper address of current half of voicing window */ /* E_0 - Energy of LPF speech (sum of squares - SS) */ /* E_B - Energy of LPF speech backward one pitch period (SS) */ /* E_F - Energy of LPF speech forward one pitch period (SS) */ /* R_B - Autocovariance of LPF speech backward one pitch period */ /* R_F - Autocovariance of LPF speech forward one pitch period */ /* LP_RMS - Energy of LPF speech (sum of magnitudes - SM) */ /* AP_RMS - Energy of all-pass speech (SM) */ /* E_PRE - Energy of 6dB preemphasized speech (SM) */ /* E0AP - Energy of all-pass speech (SS) */ /* This subroutine has no local state. */ /* Subroutine */ int vparms_(integer *vwin, real *inbuf, real *lpbuf, integer *buflim, integer *half, real *dither, integer *mintau, integer *zc, integer *lbe, integer *fbe, real *qs, real *rc1, real *ar_b__, real * ar_f__) { /* System generated locals */ integer inbuf_offset, lpbuf_offset, i__1; real r__1, r__2; /* Builtin functions */ double r_sign(real *, real *); integer i_nint(real *); /* Local variables */ integer vlen, stop, i__; real e_pre__; integer start; real ap_rms__, e_0__, oldsgn, lp_rms__, e_b__, e_f__, r_b__, r_f__, e0ap; /* Arguments */ /* Local variables that need not be saved */ /* Calculate zero crossings (ZC) and several energy and correlation */ /* measures on low band and full band speech. Each measure is taken */ /* over either the first or the second half of the voicing window, */ /* depending on the variable HALF. */ /* Parameter adjustments */ --vwin; --buflim; lpbuf_offset = buflim[3]; lpbuf -= lpbuf_offset; inbuf_offset = buflim[1]; inbuf -= inbuf_offset; /* Function Body */ lp_rms__ = 0.f; ap_rms__ = 0.f; e_pre__ = 0.f; e0ap = 0.f; *rc1 = 0.f; e_0__ = 0.f; e_b__ = 0.f; e_f__ = 0.f; r_f__ = 0.f; r_b__ = 0.f; *zc = 0; vlen = vwin[2] - vwin[1] + 1; start = vwin[1] + (*half - 1) * vlen / 2 + 1; stop = start + vlen / 2 - 1; /* I'll use the symbol HVL in the table below to represent the value */ /* VLEN/2. Note that if VLEN is odd, then HVL should be rounded down, */ /* i.e., HVL = (VLEN-1)/2. */ /* HALF START STOP */ /* 1 VWIN(1)+1 VWIN(1)+HVL */ /* 2 VWIN(1)+HVL+1 VWIN(1)+2*HVL */ /* Note that if VLEN is even and HALF is 2, then STOP will be */ /* VWIN(1)+VLEN = VWIN(2)+1. That could be bad, if that index of INBUF */ /* is undefined. */ r__1 = inbuf[start - 1] - *dither; oldsgn = (real)r_sign(&c_b2, &r__1); i__1 = stop; for (i__ = start; i__ <= i__1; ++i__) { lp_rms__ += (r__1 = lpbuf[i__], abs(r__1)); ap_rms__ += (r__1 = inbuf[i__], abs(r__1)); e_pre__ += (r__1 = inbuf[i__] - inbuf[i__ - 1], abs(r__1)); /* Computing 2nd power */ r__1 = inbuf[i__]; e0ap += r__1 * r__1; *rc1 += inbuf[i__] * inbuf[i__ - 1]; /* Computing 2nd power */ r__1 = lpbuf[i__]; e_0__ += r__1 * r__1; /* Computing 2nd power */ r__1 = lpbuf[i__ - *mintau]; e_b__ += r__1 * r__1; /* Computing 2nd power */ r__1 = lpbuf[i__ + *mintau]; e_f__ += r__1 * r__1; r_f__ += lpbuf[i__] * lpbuf[i__ + *mintau]; r_b__ += lpbuf[i__] * lpbuf[i__ - *mintau]; r__1 = inbuf[i__] + *dither; if (r_sign(&c_b2, &r__1) != oldsgn) { ++(*zc); oldsgn = -oldsgn; } *dither = -(*dither); } /* Normalized short-term autocovariance coefficient at unit sample delay */ *rc1 /= max(e0ap,1.f); /* Ratio of the energy of the first difference signal (6 dB/oct preemphas is)*/ /* to the energy of the full band signal */ /* Computing MAX */ r__1 = ap_rms__ * 2.f; *qs = e_pre__ / max(r__1,1.f); /* aR_b is the product of the forward and reverse prediction gains, */ /* looking backward in time (the causal case). */ *ar_b__ = r_b__ / max(e_b__,1.f) * (r_b__ / max(e_0__,1.f)); /* aR_f is the same as aR_b, but looking forward in time (non causal case ).*/ *ar_f__ = r_f__ / max(e_f__,1.f) * (r_f__ / max(e_0__,1.f)); /* Normalize ZC, LBE, and FBE to old fixed window length of 180. */ /* (The fraction 90/VLEN has a range of .58 to 1) */ r__2 = (real) (*zc << 1); r__1 = r__2 * (90.f / vlen); *zc = i_nint(&r__1); /* Computing MIN */ r__1 = lp_rms__ / 4 * (90.f / vlen); i__1 = i_nint(&r__1); *lbe = min(i__1,32767); /* Computing MIN */ r__1 = ap_rms__ / 4 * (90.f / vlen); i__1 = i_nint(&r__1); *fbe = min(i__1,32767); return 0; } /* vparms_ */ h323plus/plugins/audio/LPC_10/src/voicin.c0000644000175000017500000007217111341106232017032 0ustar markmark/* $Log: voicin.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:51 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:19 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:58 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:43 csoutheren Initial version Revision 1.2 2002/02/15 03:57:55 yurik Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.2 1996/08/20 20:45:00 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Revision 1.1 1996/08/19 22:30:14 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int voicin_(integer *vwin, real *inbuf, real *lpbuf, integer *buflim, integer *half, real *minamd, real *maxamd, integer *mintau, real *ivrc, integer *obound, integer *voibuf, integer *af, struct lpc10_encoder_state *st); /* comlen contrl_ 12 */ /*:ref: vparms_ 14 14 4 6 6 4 4 6 4 4 4 4 6 6 6 6 */ #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* Common Block Declarations */ extern struct { integer order, lframe; logical corrp; } contrl_; #define contrl_1 contrl_ /****************************************************************************/ /* VOICIN Version 52 */ /* $Log: voicin.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:51 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:19 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:58 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.2 2002/02/15 03:57:55 yurik /* Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:45:00 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Revision 1.1 1996/08/19 22:30:14 jaf * Initial revision * */ /* Revision 1.10 1996/03/29 17:59:14 jaf */ /* Avoided using VALUE(9), although it shouldn't affect the function of */ /* the code at all, because it was always multiplied by VDC(9,SNRL), */ /* which is 0 for all values of SNRL. Still, if VALUE(9) had an initial */ /* value of IEEE NaN, it might cause trouble (I don't know how IEEE */ /* defines Nan * 0. It should either be NaN or 0.) */ /* Revision 1.9 1996/03/29 17:54:46 jaf */ /* Added a few comments about the accesses made to argument array VOIBUF */ /* and the local saved array VOICE. */ /* Revision 1.8 1996/03/27 18:19:54 jaf */ /* Added an assignment to VSTATE that does not affect the function of the */ /* program at all. The only reason I put it in was so that the tracing */ /* statements at the end, when enabled, will print a consistent value for */ /* VSTATE when HALF .EQ. 1, rather than a garbage value that could change */ /* from one call to the next. */ /* Revision 1.7 1996/03/26 20:00:06 jaf */ /* Removed the inclusion of the file "vcomm.fh", and put its contents */ /* into this file. It was included nowhere else but here. */ /* Revision 1.6 1996/03/26 19:38:09 jaf */ /* Commented out trace statements. */ /* Revision 1.5 1996/03/19 20:43:45 jaf */ /* Added comments about which indices of OBOUND and VOIBUF can be */ /* accessed, and whether they are read or written. VOIBUF is fairly */ /* messy. */ /* Revision 1.4 1996/03/19 15:00:58 jaf */ /* Moved the DATA statements for the *VDC* variables later, as it is */ /* apparently illegal to have DATA statements before local variable */ /* declarations. */ /* Revision 1.3 1996/03/19 00:10:49 jaf */ /* Heavily commented the local variables that are saved from one */ /* invocation to the next, and how the local variable FIRST is used to */ /* avoid the need to assign most of them initial values with DATA */ /* statements. */ /* A few should be initialized, but aren't. I've guessed initial values */ /* for two of these, SFBUE and SLBUE, and I've convinced myself that for */ /* VOICE, the effects of uninitialized values will die out after 2 or 3 */ /* frame times. It would still be good to choose initial values for */ /* these, but I don't know what reasonable values would be (0 comes to */ /* mind). */ /* Revision 1.2 1996/03/13 16:09:28 jaf */ /* Comments added explaining which of the local variables of this */ /* subroutine need to be saved from one invocation to the next, and which */ /* do not. */ /* WARNING! Some of them that should are never given initial values in */ /* this code. Hopefully, Fortran 77 defines initial values for them, but */ /* even so, giving them explicit initial values is preferable. */ /* WARNING! VALUE(9) is used, but never assigned a value. It should */ /* probably be eliminated from the code. */ /* Revision 1.1 1996/02/07 14:50:28 jaf */ /* Initial revision */ /****************************************************************************/ /* Voicing Detection (VOICIN) makes voicing decisions for each half */ /* frame of input speech. Tentative voicing decisions are made two frames*/ /* in the future (2F) for each half frame. These decisions are carried */ /* through one frame in the future (1F) to the present (P) frame where */ /* they are examined and smoothed, resulting in the final voicing */ /* decisions for each half frame. */ /* The voicing parameter (signal measurement) column vector (VALUE) */ /* is based on a rectangular window of speech samples determined by the */ /* window placement algorithm. The voicing parameter vector contains the*/ /* AMDF windowed maximum-to-minimum ratio, the zero crossing rate, energy*/ /* measures, reflection coefficients, and prediction gains. The voicing */ /* window is placed to avoid contamination of the voicing parameter vector*/ /* with speech onsets. */ /* The input signal is then classified as unvoiced (including */ /* silence) or voiced. This decision is made by a linear discriminant */ /* function consisting of a dot product of the voicing decision */ /* coefficient (VDC) row vector with the measurement column vector */ /* (VALUE). The VDC vector is 2-dimensional, each row vector is optimized*/ /* for a particular signal-to-noise ratio (SNR). So, before the dot */ /* product is performed, the SNR is estimated to select the appropriate */ /* VDC vector. */ /* The smoothing algorithm is a modified median smoother. The */ /* voicing discriminant function is used by the smoother to determine how*/ /* strongly voiced or unvoiced a signal is. The smoothing is further */ /* modified if a speech onset and a voicing decision transition occur */ /* within one half frame. In this case, the voicing decision transition */ /* is extended to the speech onset. For transmission purposes, there are*/ /* constraints on the duration and transition of voicing decisions. The */ /* smoother takes these constraints into account. */ /* Finally, the energy estimates are updated along with the dither */ /* threshold used to calculate the zero crossing rate (ZC). */ /* Inputs: */ /* VWIN - Voicing window limits */ /* The indices read of arrays VWIN, INBUF, LPBUF, and BUFLIM */ /* are the same as those read by subroutine VPARMS. */ /* INBUF - Input speech buffer */ /* LPBUF - Low-pass filtered speech buffer */ /* BUFLIM - INBUF and LPBUF limits */ /* HALF - Present analysis half frame number */ /* MINAMD - Minimum value of the AMDF */ /* MAXAMD - Maximum value of the AMDF */ /* MINTAU - Pointer to the lag of the minimum AMDF value */ /* IVRC(2) - Inverse filter's RC's */ /* Only index 2 of array IVRC read under normal operation. */ /* (Index 1 is also read when debugging is turned on.) */ /* OBOUND - Onset boundary descriptions */ /* Indices 1 through 3 read if (HALF .NE. 1), otherwise untouched. */ /* AF - The analysis frame number */ /* Output: */ /* VOIBUF(2,0:AF) - Buffer of voicing decisions */ /* Index (HALF,3) written. */ /* If (HALF .EQ. 1), skip down to "Read (HALF,3)" below. */ /* Indices (1,2), (2,1), (1,2), and (2,2) read. */ /* One of the following is then done: */ /* read (1,3) and possibly write (1,2) */ /* read (1,3) and write (1,2) or (2,2) */ /* write (2,1) */ /* write (2,1) or (1,2) */ /* read (1,0) and (1,3) and then write (2,2) or (1,1) */ /* no reads or writes on VOIBUF */ /* Finally, read (HALF,3) */ /* Internal: */ /* QS - Ratio of preemphasized to full-band energies */ /* RC1 - First reflection coefficient */ /* AR_B - Product of the causal forward and reverse pitch prediction gain s*/ /* AR_F - Product of the noncausal forward and rev. pitch prediction gain s*/ /* ZC - Zero crossing rate */ /* DITHER - Zero crossing threshold level */ /* MAXMIN - AMDF's 1 octave windowed maximum-to-minimum ratio */ /* MINPTR - Location of minimum AMDF value */ /* NVDC - Number of elements in each VDC vector */ /* NVDCL - Number of VDC vectors */ /* VDCL - SNR values corresponding to the set of VDC's */ /* VDC - 2-D voicing decision coefficient vector */ /* VALUE(9) - Voicing Parameters */ /* VOICE(2,3)- History of LDA results */ /* On every call when (HALF .EQ. 1), VOICE(*,I+1) is */ /* shifted back to VOICE(*,I), for I=1,2. */ /* VOICE(HALF,3) is written on every call. */ /* Depending on several conditions, one or more of */ /* (1,1), (1,2), (2,1), and (2,2) might then be read. */ /* LBE - Ratio of low-band instantaneous to average energies */ /* FBE - Ratio of full-band instantaneous to average energies */ /* LBVE - Low band voiced energy */ /* LBUE - Low band unvoiced energy */ /* FBVE - Full band voiced energy */ /* FBUE - Full band unvoiced energy */ /* OFBUE - Previous full-band unvoiced energy */ /* OLBUE - Previous low-band unvoiced energy */ /* REF - Reference energy for initialization and DITHER threshold */ /* SNR - Estimate of signal-to-noise ratio */ /* SNR2 - Estimate of low-band signal-to-noise ratio */ /* SNRL - SNR level number */ /* OT - Onset transition present */ /* VSTATE - Decimal interpretation of binary voicing classifications */ /* FIRST - First call flag */ /* This subroutine maintains local state from one call to the next. If */ /* you want to switch to using a new audio stream for this filter, or */ /* reinitialize its state for any other reason, call the ENTRY */ /* INITVOICIN. */ /* Subroutine */ int voicin_(integer *vwin, real *inbuf, real * lpbuf, integer *buflim, integer *half, real *minamd, real *maxamd, integer *mintau, real *ivrc, integer *obound, integer *voibuf, integer *af, struct lpc10_encoder_state *st) { /* Initialized data */ real *dither; static real vdc[100] /* was [10][10] */ = { 0.f,1714.f,-110.f, 334.f,-4096.f,-654.f,3752.f,3769.f,0.f,1181.f,0.f,874.f,-97.f, 300.f,-4096.f,-1021.f,2451.f,2527.f,0.f,-500.f,0.f,510.f,-70.f, 250.f,-4096.f,-1270.f,2194.f,2491.f,0.f,-1500.f,0.f,500.f,-10.f, 200.f,-4096.f,-1300.f,2e3f,2e3f,0.f,-2e3f,0.f,500.f,0.f,0.f, -4096.f,-1300.f,2e3f,2e3f,0.f,-2500.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f, 0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f, 0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f, 0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f }; static integer nvdcl = 5; static real vdcl[10] = { 600.f,450.f,300.f,200.f,0.f,0.f,0.f,0.f,0.f,0.f } ; /* System generated locals */ integer inbuf_offset, lpbuf_offset, i__1, i__2; real r__1, r__2; /* Builtin functions */ integer i_nint(real *); double sqrt(doublereal); /* Local variables */ real ar_b__, ar_f__; integer *lbve, *lbue, *fbve, *fbue; integer snrl, i__; integer *ofbue, *sfbue; real *voice; integer *olbue, *slbue; real value[9]; integer zc; logical ot; real qs; real *maxmin; integer vstate; real rc1; extern /* Subroutine */ int vparms_(integer *, real *, real *, integer *, integer *, real *, integer *, integer *, integer *, integer *, real *, real *, real *, real *); integer fbe, lbe; real *snr; real snr2; /* Global Variables: */ /* Arguments */ /* $Log: voicin.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:51 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:19 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:58 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.2 2002/02/15 03:57:55 yurik /* Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:45:00 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Revision 1.1 1996/08/19 22:30:14 jaf * Initial revision * */ /* Revision 1.3 1996/03/29 22:05:55 jaf */ /* Commented out the common block variables that are not needed by the */ /* embedded version. */ /* Revision 1.2 1996/03/26 19:34:50 jaf */ /* Added comments indicating which constants are not needed in an */ /* application that uses the LPC-10 coder. */ /* Revision 1.1 1996/02/07 14:44:09 jaf */ /* Initial revision */ /* LPC Processing control variables: */ /* *** Read-only: initialized in setup */ /* Files for Speech, Parameter, and Bitstream Input & Output, */ /* and message and debug outputs. */ /* Here are the only files which use these variables: */ /* lpcsim.f setup.f trans.f error.f vqsetup.f */ /* Many files which use fdebug are not listed, since it is only used in */ /* those other files conditionally, to print trace statements. */ /* integer fsi, fso, fpi, fpo, fbi, fbo, pbin, fmsg, fdebug */ /* LPC order, Frame size, Quantization rate, Bits per frame, */ /* Error correction */ /* Subroutine SETUP is the only place where order is assigned a value, */ /* and that value is 10. It could increase efficiency 1% or so to */ /* declare order as a constant (i.e., a Fortran PARAMETER) instead of as */ /* a variable in a COMMON block, since it is used in many places in the */ /* core of the coding and decoding routines. Actually, I take that back. */ /* At least when compiling with f2c, the upper bound of DO loops is */ /* stored in a local variable before the DO loop begins, and then that is */ /* compared against on each iteration. */ /* Similarly for lframe, which is given a value of MAXFRM in SETUP. */ /* Similarly for quant, which is given a value of 2400 in SETUP. quant */ /* is used in only a few places, and never in the core coding and */ /* decoding routines, so it could be eliminated entirely. */ /* nbits is similar to quant, and is given a value of 54 in SETUP. */ /* corrp is given a value of .TRUE. in SETUP, and is only used in the */ /* subroutines ENCODE and DECODE. It doesn't affect the speed of the */ /* coder significantly whether it is .TRUE. or .FALSE., or whether it is */ /* a constant or a variable, since it is only examined once per frame. */ /* Leaving it as a variable that is set to .TRUE. seems like a good */ /* idea, since it does enable some error-correction capability for */ /* unvoiced frames, with no change in the coding rate, and no noticeable */ /* quality difference in the decoded speech. */ /* integer quant, nbits */ /* *** Read/write: variables for debugging, not needed for LPC algorithm */ /* Current frame, Unstable frames, Output clip count, Max onset buffer, */ /* Debug listing detail level, Line count on listing page */ /* nframe is not needed for an embedded LPC10 at all. */ /* nunsfm is initialized to 0 in SETUP, and incremented in subroutine */ /* ERROR, which is only called from RCCHK. When LPC10 is embedded into */ /* an application, I would recommend removing the call to ERROR in RCCHK, */ /* and remove ERROR and nunsfm completely. */ /* iclip is initialized to 0 in SETUP, and incremented in entry SWRITE in */ /* sread.f. When LPC10 is embedded into an application, one might want */ /* to cause it to be incremented in a routine that takes the output of */ /* SYNTHS and sends it to an audio device. It could be optionally */ /* displayed, for those that might want to know what it is. */ /* maxosp is never initialized to 0 in SETUP, although it probably should */ /* be, and it is updated in subroutine ANALYS. I doubt that its value */ /* would be of much interest to an application in which LPC10 is */ /* embedded. */ /* listl and lincnt are not needed for an embedded LPC10 at all. */ /* integer nframe, nunsfm, iclip, maxosp, listl, lincnt */ /* common /contrl/ fsi, fso, fpi, fpo, fbi, fbo, pbin, fmsg, fdebug */ /* common /contrl/ quant, nbits */ /* common /contrl/ nframe, nunsfm, iclip, maxosp, listl, lincnt */ /* Parameters/constants */ /* Voicing coefficient and Linear Discriminant Analysis variables: */ /* Max number of VDC's and VDC levels */ /* The following are not Fortran PARAMETER's, but they are */ /* initialized with DATA statements, and never modified. */ /* Actual number of VDC's and levels */ /* Local variables that need not be saved */ /* Note: */ /* VALUE(1) through VALUE(8) are assigned values, but VALUE(9) */ /* never is. Yet VALUE(9) is read in the loop that begins "DO I = */ /* 1, 9" below. I believe that this doesn't cause any problems in */ /* this subroutine, because all VDC(9,*) array elements are 0, and */ /* this is what is multiplied by VALUE(9) in all cases. Still, it */ /* would save a multiplication to change the loop to "DO I = 1, 8". */ /* Local state */ /* WARNING! */ /* VOICE, SFBUE, and SLBUE should be saved from one invocation to */ /* the next, but they are never given an initial value. */ /* Does Fortran 77 specify some default initial value, like 0, or */ /* is it undefined? If it is undefined, then this code should be */ /* corrected to specify an initial value. */ /* For VOICE, note that it is "shifted" in the statement that */ /* begins "IF (HALF .EQ. 1) THEN" below. Also, uninitialized */ /* values in the VOICE array can only affect entries in the VOIBUF */ /* array that are for the same frame, or for an older frame. Thus */ /* the effects of uninitialized values in VOICE cannot linger on */ /* for more than 2 or 3 frame times. */ /* For SFBUE and SLBUE, the effects of uninitialized values can */ /* linger on for many frame times, because their previous values */ /* are exponentially decayed. Thus it is more important to choose */ /* initial values for these variables. I would guess that a */ /* reasonable initial value for SFBUE is REF/16, the same as used */ /* for FBUE and OFBUE. Similarly, SLBUE can be initialized to */ /* REF/32, the same as for LBUE and OLBUE. */ /* These guessed initial values should be validated by re-running */ /* the modified program on some audio samples. */ /* Declare and initialize filters: */ dither = (&st->dither); snr = (&st->snr); maxmin = (&st->maxmin); voice = (&st->voice[0]); lbve = (&st->lbve); lbue = (&st->lbue); fbve = (&st->fbve); fbue = (&st->fbue); ofbue = (&st->ofbue); olbue = (&st->olbue); sfbue = (&st->sfbue); slbue = (&st->slbue); /* Parameter adjustments */ if (vwin) { --vwin; } if (buflim) { --buflim; } if (inbuf) { inbuf_offset = buflim[1]; inbuf -= inbuf_offset; } if (lpbuf) { lpbuf_offset = buflim[3]; lpbuf -= lpbuf_offset; } if (ivrc) { --ivrc; } if (obound) { --obound; } if (voibuf) { --voibuf; } /* Function Body */ /* The following variables are saved from one invocation to the */ /* next, but are not initialized with DATA statements. This is */ /* acceptable, because FIRST is initialized ot .TRUE., and the */ /* first time that this subroutine is then called, they are all */ /* given initial values. */ /* SNR */ /* LBVE, LBUE, FBVE, FBUE, OFBUE, OLBUE */ /* MAXMIN is initialized on the first call, assuming that HALF */ /* .EQ. 1 on first call. This is how ANALYS calls this subroutine. */ /* Voicing Decision Parameter vector (* denotes zero coefficient): */ /* * MAXMIN */ /* LBE/LBVE */ /* ZC */ /* RC1 */ /* QS */ /* IVRC2 */ /* aR_B */ /* aR_F */ /* * LOG(LBE/LBVE) */ /* Define 2-D voicing decision coefficient vector according to the voicin g*/ /* parameter order above. Each row (VDC vector) is optimized for a speci fic*/ /* SNR. The last element of the vector is the constant. */ /* E ZC RC1 Qs IVRC2 aRb aRf c */ /* The VOICE array contains the result of the linear discriminant functio n*/ /* (analog values). The VOIBUF array contains the hard-limited binary */ /* voicing decisions. The VOICE and VOIBUF arrays, according to FORTRAN */ /* memory allocation, are addressed as: */ /* (half-frame number, future-frame number) */ /* | Past | Present | Future1 | Future2 | */ /* | 1,0 | 2,0 | 1,1 | 2,1 | 1,2 | 2,2 | 1,3 | 2,3 | ---> time */ /* Update linear discriminant function history each frame: */ if (*half == 1) { voice[0] = voice[2]; voice[1] = voice[3]; voice[2] = voice[4]; voice[3] = voice[5]; *maxmin = *maxamd / max(*minamd,1.f); } /* Calculate voicing parameters twice per frame: */ vparms_(&vwin[1], &inbuf[inbuf_offset], &lpbuf[lpbuf_offset], &buflim[1], half, dither, mintau, &zc, &lbe, &fbe, &qs, &rc1, &ar_b__, & ar_f__); /* Estimate signal-to-noise ratio to select the appropriate VDC vector. */ /* The SNR is estimated as the running average of the ratio of the */ /* running average full-band voiced energy to the running average */ /* full-band unvoiced energy. SNR filter has gain of 63. */ r__1 = (*snr + *fbve / (real) max(*fbue,1)) * 63 / 64.f; *snr = (real) i_nint(&r__1); snr2 = *snr * *fbue / max(*lbue,1); /* Quantize SNR to SNRL according to VDCL thresholds. */ snrl = 1; i__1 = nvdcl - 1; for (snrl = 1; snrl <= i__1; ++snrl) { if (snr2 > vdcl[snrl - 1]) { goto L69; } } /* (Note: SNRL = NVDCL here) */ L69: /* Linear discriminant voicing parameters: */ value[0] = *maxmin; value[1] = (real) lbe / max(*lbve,1); value[2] = (real) zc; value[3] = rc1; value[4] = qs; value[5] = ivrc[2]; value[6] = ar_b__; value[7] = ar_f__; /* Evaluation of linear discriminant function: */ voice[*half + 3] = vdc[snrl * 10 - 1]; for (i__ = 1; i__ <= 8; ++i__) { voice[*half + 3] += vdc[i__ + snrl * 10 - 11] * value[i__ - 1]; } /* Classify as voiced if discriminant > 0, otherwise unvoiced */ /* Voicing decision for current half-frame: 1 = Voiced; 0 = Unvoiced */ if (voice[*half + 3] > 0.f) { voibuf[*half + 6] = 1; } else { voibuf[*half + 6] = 0; } /* Skip voicing decision smoothing in first half-frame: */ /* Give a value to VSTATE, so that trace statements below will print */ /* a consistent value from one call to the next when HALF .EQ. 1. */ /* The value of VSTATE is not used for any other purpose when this is */ /* true. */ vstate = -1; if (*half == 1) { goto L99; } /* Voicing decision smoothing rules (override of linear combination): */ /* Unvoiced half-frames: At least two in a row. */ /* -------------------- */ /* Voiced half-frames: At least two in a row in one frame. */ /* ------------------- Otherwise at least three in a row. */ /* (Due to the way transition frames are encoded) */ /* In many cases, the discriminant function determines how to smooth. */ /* In the following chart, the decisions marked with a * may be overridden .*/ /* Voicing override of transitions at onsets: */ /* If a V/UV or UV/V voicing decision transition occurs within one-half */ /* frame of an onset bounding a voicing window, then the transition is */ /* moved to occur at the onset. */ /* P 1F */ /* ----- ----- */ /* 0 0 0 0 */ /* 0 0 0* 1 (If there is an onset there) */ /* 0 0 1* 0* (Based on 2F and discriminant distance) */ /* 0 0 1 1 */ /* 0 1* 0 0 (Always) */ /* 0 1* 0* 1 (Based on discriminant distance) */ /* 0* 1 1 0* (Based on past, 2F, and discriminant distance) */ /* 0 1* 1 1 (If there is an onset there) */ /* 1 0* 0 0 (If there is an onset there) */ /* 1 0 0 1 */ /* 1 0* 1* 0 (Based on discriminant distance) */ /* 1 0* 1 1 (Always) */ /* 1 1 0 0 */ /* 1 1 0* 1* (Based on 2F and discriminant distance) */ /* 1 1 1* 0 (If there is an onset there) */ /* 1 1 1 1 */ /* Determine if there is an onset transition between P and 1F. */ /* OT (Onset Transition) is true if there is an onset between */ /* P and 1F but not after 1F. */ ot = ((obound[1] & 2) != 0 || obound[2] == 1) && (obound[3] & 1) == 0; /* Multi-way dispatch on voicing decision history: */ vstate = (voibuf[3] << 3) + (voibuf[4] << 2) + (voibuf[5] << 1) + voibuf[ 6]; switch (vstate + 1) { case 1: goto L99; case 2: goto L1; case 3: goto L2; case 4: goto L99; case 5: goto L4; case 6: goto L5; case 7: goto L6; case 8: goto L7; case 9: goto L8; case 10: goto L99; case 11: goto L10; case 12: goto L11; case 13: goto L99; case 14: goto L13; case 15: goto L14; case 16: goto L99; } L1: if (ot && voibuf[7] == 1) { voibuf[5] = 1; } goto L99; L2: if (voibuf[7] == 0 || voice[2] < -voice[3]) { voibuf[5] = 0; } else { voibuf[6] = 1; } goto L99; L4: voibuf[4] = 0; goto L99; L5: if (voice[1] < -voice[2]) { voibuf[4] = 0; } else { voibuf[5] = 1; } goto L99; /* VOIBUF(2,0) must be 0 */ L6: if (voibuf[1] == 1 || voibuf[7] == 1 || voice[3] > voice[0]) { voibuf[6] = 1; } else { voibuf[3] = 1; } goto L99; L7: if (ot) { voibuf[4] = 0; } goto L99; L8: if (ot) { voibuf[4] = 1; } goto L99; L10: if (voice[2] < -voice[1]) { voibuf[5] = 0; } else { voibuf[4] = 1; } goto L99; L11: voibuf[4] = 1; goto L99; L13: if (voibuf[7] == 0 && voice[3] < -voice[2]) { voibuf[6] = 0; } else { voibuf[5] = 1; } goto L99; L14: if (ot && voibuf[7] == 0) { voibuf[5] = 0; } /* GOTO 99 */ L99: /* Now update parameters: */ /* ---------------------- */ /* During unvoiced half-frames, update the low band and full band unvoice d*/ /* energy estimates (LBUE and FBUE) and also the zero crossing */ /* threshold (DITHER). (The input to the unvoiced energy filters is */ /* restricted to be less than 10dB above the previous inputs of the */ /* filters.) */ /* During voiced half-frames, update the low-pass (LBVE) and all-pass */ /* (FBVE) voiced energy estimates. */ if (voibuf[*half + 6] == 0) { /* Computing MIN */ i__1 = fbe, i__2 = *ofbue * 3; r__1 = (*sfbue * 63 + (min(i__1,i__2) << 3)) / 64.f; *sfbue = i_nint(&r__1); *fbue = *sfbue / 8; *ofbue = fbe; /* Computing MIN */ i__1 = lbe, i__2 = *olbue * 3; r__1 = (*slbue * 63 + (min(i__1,i__2) << 3)) / 64.f; *slbue = i_nint(&r__1); *lbue = *slbue / 8; *olbue = lbe; } else { r__1 = (*lbve * 63 + lbe) / 64.f; *lbve = i_nint(&r__1); r__1 = (*fbve * 63 + fbe) / 64.f; *fbve = i_nint(&r__1); } /* Set dither threshold to yield proper zero crossing rates in the */ /* presence of low frequency noise and low level signal input. */ /* NOTE: The divisor is a function of REF, the expected energies. */ /* Computing MIN */ /* Computing MAX */ r__2 = (real)(sqrt((real) (*lbue * *lbve)) * 64 / 3000); r__1 = max(r__2,1.f); *dither = min(r__1,20.f); /* Voicing decisions are returned in VOIBUF. */ return 0; } /* voicin_ */ h323plus/plugins/audio/LPC_10/src/chanwr.c0000644000175000017500000001730711341106232017025 0ustar markmark/* $Log: chanwr.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:49 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:14 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:42 csoutheren Initial version Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.2 1996/08/20 20:20:24 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Revision 1.1 1996/08/19 22:40:31 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int chanwr_(integer *order, integer *ipitv, integer *irms, integer *irc, integer *ibits, struct lpc10_encoder_state *st); extern int chanrd_(integer *order, integer *ipitv, integer *irms, integer *irc, integer *ibits); #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* *********************************************************************** */ /* CHANL Version 49 */ /* $Log: chanwr.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:49 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:14 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:42 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:20:24 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Revision 1.1 1996/08/19 22:40:31 jaf * Initial revision * */ /* Revision 1.3 1996/03/21 15:14:57 jaf */ /* Added comments about which indices of argument arrays are read or */ /* written, and about the one bit of local state in CHANWR. CHANRD */ /* has no local state. */ /* Revision 1.2 1996/03/13 18:55:10 jaf */ /* Comments added explaining which of the local variables of this */ /* subroutine need to be saved from one invocation to the next, and which */ /* do not. */ /* Revision 1.1 1996/02/07 14:43:31 jaf */ /* Initial revision */ /* *********************************************************************** */ /* CHANWR: */ /* Place quantized parameters into bitstream */ /* Input: */ /* ORDER - Number of reflection coefficients (not really variable) */ /* IPITV - Quantized pitch/voicing parameter */ /* IRMS - Quantized energy parameter */ /* IRC - Quantized reflection coefficients */ /* Indices 1 through ORDER read. */ /* Output: */ /* IBITS - Serial bitstream */ /* Indices 1 through 54 written. */ /* Bit 54, the SYNC bit, alternates from one call to the next. */ /* Subroutine CHANWR maintains one bit of local state from one call to */ /* the next, in the variable ISYNC. I believe that this one bit is only */ /* intended to allow a receiver to resynchronize its interpretation of */ /* the bit stream, by looking for which of the 54 bits alternates every */ /* frame time. This is just a simple framing mechanism that is not */ /* useful when other, higher overhead framing mechanisms are used to */ /* transmit the coded frames. */ /* I'm not going to make an entry to reinitialize this bit, since it */ /* doesn't help a receiver much to know whether the first sync bit is a 0 */ /* or a 1. It needs to examine several frames in sequence to have */ /* reasonably good assurance that its framing is correct. */ /* CHANRD: */ /* Reconstruct parameters from bitstream */ /* Input: */ /* ORDER - Number of reflection coefficients (not really variable) */ /* IBITS - Serial bitstream */ /* Indices 1 through 53 read (SYNC bit is ignored). */ /* Output: */ /* IPITV - Quantized pitch/voicing parameter */ /* IRMS - Quantized energy parameter */ /* IRC - Quantized reflection coefficients */ /* Indices 1 through ORDER written */ /* Entry CHANRD has no local state. */ /* IBITS is 54 bits of LPC data ordered as follows: */ /* R1-0, R2-0, R3-0, P-0, A-0, */ /* R1-1, R2-1, R3-1, P-1, A-1, */ /* R1-2, R4-0, R3-2, A-2, P-2, R4-1, */ /* R1-3, R2-2, R3-3, R4-2, A-3, */ /* R1-4, R2-3, R3-4, R4-3, A-4, */ /* P-3, R2-4, R7-0, R8-0, P-4, R4-4, */ /* R5-0, R6-0, R7-1,R10-0, R8-1, */ /* R5-1, R6-1, R7-2, R9-0, P-5, */ /* R5-2, R6-2,R10-1, R8-2, P-6, R9-1, */ /* R5-3, R6-3, R7-3, R9-2, R8-3, SYNC */ /* Subroutine */ int chanwr_0_(int n__, integer *order, integer *ipitv, integer *irms, integer *irc, integer *ibits, struct lpc10_encoder_state *st) { /* Initialized data */ integer *isync; static integer bit[10] = { 2,4,8,8,8,8,16,16,16,16 }; static integer iblist[53] = { 13,12,11,1,2,13,12,11,1,2,13,10,11,2,1,10, 13,12,11,10,2,13,12,11,10,2,1,12,7,6,1,10,9,8,7,4,6,9,8,7,5,1,9,8, 4,6,1,5,9,8,7,5,6 }; /* System generated locals */ integer i__1; /* Local variables */ integer itab[13], i__; /* Arguments */ /* Parameters/constants */ /* These arrays are not Fortran PARAMETER's, but they are defined */ /* by DATA statements below, and their contents are never altered. */ /* Local variables that need not be saved */ /* Local state */ /* ISYNC is only used by CHANWR, not by ENTRY CHANRD. */ /* Parameter adjustments */ --irc; --ibits; /* Function Body */ switch(n__) { case 1: goto L_chanrd; } isync = &(st->isync); /* *********************************************************************** */ /* Place quantized parameters into bitstream */ /* *********************************************************************** */ /* Place parameters into ITAB */ itab[0] = *ipitv; itab[1] = *irms; itab[2] = 0; i__1 = *order; for (i__ = 1; i__ <= i__1; ++i__) { itab[i__ + 2] = irc[*order + 1 - i__] & 32767; } /* Put 54 bits into IBITS array */ for (i__ = 1; i__ <= 53; ++i__) { ibits[i__] = itab[iblist[i__ - 1] - 1] & 1; itab[iblist[i__ - 1] - 1] /= 2; } ibits[54] = *isync & 1; *isync = 1 - *isync; return 0; /* *********************************************************************** */ /* Reconstruct parameters from bitstream */ /* *********************************************************************** */ L_chanrd: /* Reconstruct ITAB */ for (i__ = 1; i__ <= 13; ++i__) { itab[i__ - 1] = 0; } for (i__ = 1; i__ <= 53; ++i__) { itab[iblist[54 - i__ - 1] - 1] = (itab[iblist[54 - i__ - 1] - 1] << 1) + ibits[54 - i__]; } /* Sign extend RC's */ i__1 = *order; for (i__ = 1; i__ <= i__1; ++i__) { if ((itab[i__ + 2] & bit[i__ - 1]) != 0) { itab[i__ + 2] -= bit[i__ - 1] << 1; } } /* Restore variables */ *ipitv = itab[0]; *irms = itab[1]; i__1 = *order; for (i__ = 1; i__ <= i__1; ++i__) { irc[i__] = itab[*order + 4 - i__ - 1]; } return 0; } /* chanwr_ */ /* Subroutine */ int chanwr_(integer *order, integer *ipitv, integer *irms, integer *irc, integer *ibits, struct lpc10_encoder_state *st) { return chanwr_0_(0, order, ipitv, irms, irc, ibits, st); } /* Subroutine */ int chanrd_(integer *order, integer *ipitv, integer *irms, integer *irc, integer *ibits) { return chanwr_0_(1, order, ipitv, irms, irc, ibits, 0); } h323plus/plugins/audio/LPC_10/src/preemp.c0000644000175000017500000001077611341106232017036 0ustar markmark/* $Log: preemp.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:51 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:18 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:58 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:43 csoutheren Initial version Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.1 1996/08/19 22:30:58 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int preemp_(real *inbuf, real *pebuf, integer *nsamp, real *coef, real *z__); #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* ******************************************************************* */ /* PREEMP Version 55 */ /* $Log: preemp.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:51 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:18 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:58 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.1 1996/08/19 22:30:58 jaf * Initial revision * */ /* Revision 1.3 1996/03/14 23:16:29 jaf */ /* Just added a few comments about which array indices of the arguments */ /* are used, and mentioning that this subroutine has no local state. */ /* Revision 1.2 1996/03/11 23:23:34 jaf */ /* Added a bunch of comments to an otherwise simple subroutine. */ /* Revision 1.1 1996/02/07 14:48:48 jaf */ /* Initial revision */ /* ******************************************************************* */ /* Preemphasize speech with a single-zero filter. */ /* (When coef = .9375, preemphasis is as in LPC43.) */ /* Inputs: */ /* NSAMP - Number of samples to filter */ /* INBUF - Input speech buffer */ /* Indices 1 through NSAMP are read. */ /* COEF - Preemphasis coefficient */ /* Input/Output: */ /* Z - Filter state */ /* Output: */ /* PEBUF - Preemphasized speech buffer (can be equal to INBUF) */ /* Indices 1 through NSAMP are modified. */ /* This subroutine has no local state. */ /* Subroutine */ int preemp_(real *inbuf, real *pebuf, integer *nsamp, real * coef, real *z__) { /* System generated locals */ integer i__1; /* Local variables */ real temp; integer i__; /* Arguments */ /* Local variables */ /* None of these need to have their values saved from one */ /* invocation to the next. */ /* Logically, this subroutine computes the output sequence */ /* pebuf(1:nsamp) defined by: */ /* pebuf(i) = inbuf(i) - coef * inbuf(i-1) */ /* where inbuf(0) is defined by the value of z given as input to */ /* this subroutine. */ /* What is this filter's frequency response and phase response? */ /* Why is this filter applied to the speech? */ /* Could it be more efficient to apply multiple filters */ /* simultaneously, by combining them into one equivalent filter? */ /* Are there ever cases when "factoring" one high-order filter into */ /* multiple smaller-order filter actually reduces the number of */ /* arithmetic operations needed to perform them? */ /* When I first read this subroutine, I didn't understand why the */ /* variable temp was used. It seemed that the statements in the do */ /* loop could be replaced with the following: */ /* pebuf(i) = inbuf(i) - coef * z */ /* z = inbuf(i) */ /* The reason for temp is so that even if pebuf and inbuf are the */ /* same arrays in memory (i.e., they are aliased), then this */ /* subroutine will still work correctly. I didn't realize this */ /* until seeing the comment after PEBUF above that says "(can be */ /* equal to INBUF)". */ /* Parameter adjustments */ --pebuf; --inbuf; /* Function Body */ i__1 = *nsamp; for (i__ = 1; i__ <= i__1; ++i__) { temp = inbuf[i__] - *coef * *z__; *z__ = inbuf[i__]; pebuf[i__] = temp; /* L10: */ } return 0; } /* preemp_ */ h323plus/plugins/audio/LPC_10/src/onset.c0000644000175000017500000002671311341106232016674 0ustar markmark/* $Log: onset.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:51 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:18 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:43 csoutheren Initial version Revision 1.2 2002/02/15 03:57:55 yurik Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.2 1996/08/20 20:37:55 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Revision 1.1 1996/08/19 22:31:18 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int onset_(real *pebuf, integer *osbuf, integer *osptr, integer *oslen, integer *sbufl, integer *sbufh, integer *lframe, struct lpc10_encoder_state *st); #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* Table of constant values */ static real c_b2 = 1.f; /* ****************************************************************** */ /* ONSET Version 49 */ /* $Log: onset.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:51 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:18 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.2 2002/02/15 03:57:55 yurik /* Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:37:55 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Revision 1.1 1996/08/19 22:31:18 jaf * Initial revision * */ /* Revision 1.5 1996/03/15 16:41:01 jaf */ /* Just rearranged INITONSET assignment orders to be consistent with */ /* order of DATA statements in ONSET. */ /* Revision 1.4 1996/03/15 15:48:27 jaf */ /* Changed some comments, and only reordered the DATA statements (their */ /* meaning wasn't changed). */ /* Revision 1.3 1996/03/14 23:53:06 jaf */ /* Added an entry INITONSET that reinitializes the local state variables */ /* of subroutine ONSET. */ /* Rearranged quite a few comments, adding more explaining which */ /* arguments were inputs, and how the modified ones can be changed. */ /* Revision 1.2 1996/03/12 23:53:00 jaf */ /* Lots of comments added about the local state of this subroutine that */ /* must be saved from one invocation to the next. */ /* One constant 180 replaced with LFRAME, which should be "more general", */ /* even though it would probably require many more changes than this to */ /* get this coder to work for other frame sizes. */ /* Revision 1.1 1996/02/07 14:48:09 jaf */ /* Initial revision */ /* ****************************************************************** */ /* Floating point version */ /* Detection of onsets in (or slightly preceding) the futuremost frame */ /* of speech. */ /* Input: */ /* PEBUF(SBUFL:SBUFH) - Preemphasized speech */ /* Indices SBUFH-LFRAME through SBUFH are read. */ /* OSLEN - Maximum number of onsets that can be stored in OSBUF. */ /* SBUFL, SBUFH - Range of PEBUF */ /* LFRAME - length of a frame, in samples */ /* Input/Output: */ /* OSBUF(OSLEN) - Buffer which holds sorted indexes of onsets */ /* Indices A through B are modified, where A */ /* is the original value of OSPTR, and B is the final */ /* value of OSPTR-1. B is at most OSLEN. */ /* OSPTR - Free pointer into OSBUF */ /* Initial value should be .LE. OSLEN+1. */ /* If so, final value grows by one for each new onset */ /* found, and final value will be .LE. OSLEN+1. */ /* This subroutine maintains local state from one call to the next. If */ /* you want to switch to using a new audio stream for this subroutine, or */ /* reinitialize its state for any other reason, call the ENTRY INITONSET. */ /* Subroutine */ int onset_(real *pebuf, integer *osbuf, integer * osptr, integer *oslen, integer *sbufl, integer *sbufh, integer * lframe, struct lpc10_encoder_state *st) { /* Initialized data */ real *n; real *d__; real *l2buf; real *l2sum1; integer *l2ptr1; integer *l2ptr2; logical *hyst; /* System generated locals */ integer pebuf_offset, i__1; real r__1; /* Builtin functions */ double r_sign(real *, real *); /* Local variables */ integer i__; integer *lasti; real l2sum2; real *fpc; /* Arguments */ /* $Log: onset.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:51 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:18 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.2 2002/02/15 03:57:55 yurik /* Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:37:55 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Revision 1.1 1996/08/19 22:31:18 jaf * Initial revision * */ /* Revision 1.3 1996/03/29 22:03:47 jaf */ /* Removed definitions for any constants that were no longer used. */ /* Revision 1.2 1996/03/26 19:34:33 jaf */ /* Added comments indicating which constants are not needed in an */ /* application that uses the LPC-10 coder. */ /* Revision 1.1 1996/02/07 14:43:51 jaf */ /* Initial revision */ /* LPC Configuration parameters: */ /* Frame size, Prediction order, Pitch period */ /* Parameters/constants */ /* Parameters for onset detection algorithm: */ /* L2 Threshold for filtered slope of FPC (function of L2WID!) */ /* L2LAG Lag due to both filters which compute filtered slope of FPC */ /* L2WID Width of the filter which computes the slope of FPC */ /* OSHYST The number of samples of slope(FPC) which must be below */ /* the threshold before a new onset may be declared. */ /* Local variables that need not be saved */ /* Local state */ /* Variables */ /* N, D Numerator and denominator of prediction filters */ /* FPC Current prediction coefs */ /* L2BUF, L2SUM1, L2SUM2 State of slope filter */ /* The only "significant" change I've made is to change L2SUM2 out */ /* of the list of local variables that need to be saved, since it */ /* didn't need to be. */ /* L2SUM1 need not be, but avoiding saving it would require a small */ /* change to the body of the code. See comments below for an */ /* example of how the code could be changed to avoid saving L2SUM1. */ /* FPC and LASTI are saved from one invocation to the next, but */ /* they are not given initial values. This is acceptable, because */ /* FPC will be assigned a value the first time that this function */ /* is called after D is initialized to 1, since the formula to */ /* change D will not change it to 0 in one step, and the IF (D */ /* .NE. 0) statement will execute its THEN part, initializing FPC. */ /* LASTI's value will not be used until HYST is .TRUE., and */ /* whenever HYST is changed from its initial value of .FALSE., */ /* LASTI is assigned a value. */ /* In a C version of this coder, it would be nice if all of these */ /* saved things, in this and all other subroutines, could be stored */ /* in a single struct lpc10_coder_state_t, initialized with a call */ /* to a function like lpc10_init(&lpc10_coder_state). In this way, */ /* a program that used these functions could conveniently alternate */ /* coding more than one distinct audio stream. */ n = &(st->n); d__ = &(st->d__); fpc = &(st->fpc); l2buf = &(st->l2buf[0]); l2sum1 = &(st->l2sum1); l2ptr1 = &(st->l2ptr1); l2ptr2 = &(st->l2ptr2); lasti = &(st->lasti); hyst = &(st->hyst); /* Parameter adjustments */ if (osbuf) { --osbuf; } if (pebuf) { pebuf_offset = *sbufl; pebuf -= pebuf_offset; } /* Function Body */ /* The following line subtracted a hard-coded "180" from LASTI, */ /* instead of using a variable like LFRAME or a constant like */ /* MAXFRM. I changed it to LFRAME, for "generality". */ if (*hyst) { *lasti -= *lframe; } i__1 = *sbufh; for (i__ = *sbufh - *lframe + 1; i__ <= i__1; ++i__) { /* Compute FPC; Use old FPC on divide by zero; Clamp FPC to +/- 1. */ *n = (pebuf[i__] * pebuf[i__ - 1] + (*n) * 63.f) / 64.f; /* Computing 2nd power */ r__1 = pebuf[i__ - 1]; *d__ = (r__1 * r__1 + (*d__) * 63.f) / 64.f; if ((*d__) != 0.f) { if (abs(*n) > (*d__)) { *fpc = (real)r_sign(&c_b2, n); } else { *fpc = (*n) / (*d__); } } /* Filter FPC */ /* In order to allow L2SUM1 not to be saved from one invocation of */ /* this subroutine to the next, one could change the sequence of */ /* assignments below, up to the IF statement, to the following. In */ /* addition, the initial value of L2PTR2 should be changed to */ /* L2WID/2 instead of L2WID/2+1. */ /* L2SUM1 = L2BUF(L2PTR2) */ /* L2PTR2 = MOD(L2PTR2,L2WID)+1 */ /* L2SUM1 = L2SUM1 - L2BUF(L2PTR2) + FPC */ /* L2BUF(L2PTR2) = L2SUM1 */ /* * The following lines didn't change from the original: */ /* L2SUM2 = L2BUF(L2PTR1) */ /* L2BUF(L2PTR1) = FPC */ /* L2PTR1 = MOD(L2PTR1,L2WID)+1 */ l2sum2 = l2buf[*l2ptr1 - 1]; *l2sum1 = *l2sum1 - l2buf[*l2ptr2 - 1] + *fpc; l2buf[*l2ptr2 - 1] = *l2sum1; l2buf[*l2ptr1 - 1] = *fpc; *l2ptr1 = *l2ptr1 % 16 + 1; *l2ptr2 = *l2ptr2 % 16 + 1; if ((r__1 = *l2sum1 - l2sum2, abs(r__1)) > 1.7f) { if (! (*hyst)) { /* Ignore if buffer full */ if (*osptr <= *oslen) { osbuf[*osptr] = i__ - 9; ++(*osptr); } *hyst = TRUE_; } *lasti = i__; /* After one onset detection, at least OSHYST sample times m ust go */ /* by before another is allowed to occur. */ } else if ((*hyst) && i__ - *lasti >= 10) { *hyst = FALSE_; } } return 0; } /* onset_ */ h323plus/plugins/audio/LPC_10/src/synths.c0000644000175000017500000003652411341106232017075 0ustar markmark/* $Log: synths.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:51 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:19 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:58 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:43 csoutheren Initial version Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.2 1996/08/20 20:42:59 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_decoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_decoder_state(). * * Revision 1.1 1996/08/19 22:30:33 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int synths_(integer *voice, integer *pitch, real *rms, real *rc, real *speech, integer *k, struct lpc10_decoder_state *st); /* comlen contrl_ 12 */ /*:ref: pitsyn_ 14 12 4 4 4 6 6 4 4 4 6 6 4 6 */ /*:ref: irc2pc_ 14 5 6 6 4 6 6 */ /*:ref: bsynz_ 14 7 6 4 4 6 6 6 6 */ /*:ref: deemp_ 14 2 6 4 */ /*:ref: initpitsyn_ 14 0 */ /*:ref: initbsynz_ 14 0 */ /*:ref: initdeemp_ 14 0 */ #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* Common Block Declarations */ extern struct { integer order, lframe; logical corrp; } contrl_; #define contrl_1 contrl_ /* Table of constant values */ static real c_b2 = .7f; /* ***************************************************************** */ /* SYNTHS Version 54 */ /* $Log: synths.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:51 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:19 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:58 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:42:59 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_decoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_decoder_state(). * * Revision 1.1 1996/08/19 22:30:33 jaf * Initial revision * */ /* Revision 1.5 1996/03/26 19:31:58 jaf */ /* Commented out trace statements. */ /* Revision 1.4 1996/03/25 19:41:01 jaf */ /* Changed so that MAXFRM samples are always returned in the output array */ /* SPEECH. */ /* This required delaying the returned samples by MAXFRM sample times, */ /* and remembering any "left over" samples returned by PITSYN from one */ /* call of SYNTHS to the next. */ /* Changed size of SPEECH from 2*MAXFRM to MAXFRM. Removed local */ /* variable SOUT. Added local state variables BUF and BUFLEN. */ /* Revision 1.3 1996/03/25 19:20:10 jaf */ /* Added comments about the range of possible return values for argument */ /* K, and increased the size of the arrays filled in by PITSYN from 11 to */ /* 16, as has been already done inside of PITSYN. */ /* Revision 1.2 1996/03/22 00:18:18 jaf */ /* Added comments explaining meanings of input and output parameters, and */ /* indicating which array indices can be read or written. */ /* Added entry INITSYNTHS, which does nothing except call the */ /* corresponding initialization entries for subroutines PITSYN, BSYNZ, */ /* and DEEMP. */ /* Revision 1.1 1996/02/07 14:49:44 jaf */ /* Initial revision */ /* ***************************************************************** */ /* The note below is from the distributed version of the LPC10 coder. */ /* The version of the code below has been modified so that SYNTHS always */ /* has a constant frame length output of MAXFRM. */ /* Also, BSYNZ and DEEMP need not be modified to work on variable */ /* positions within an array. It is only necessary to pass the first */ /* index desired as the array argument. What actually gets passed is the */ /* address of that array position, which the subroutine treats as the */ /* first index of the array. */ /* This technique is used in subroutine ANALYS when calling PREEMP, so it */ /* appears that multiple people wrote different parts of this LPC10 code, */ /* and that they didn't necessarily have equivalent knowledge of Fortran */ /* (not surprising). */ /* NOTE: There is excessive buffering here, BSYNZ and DEEMP should be */ /* changed to operate on variable positions within SOUT. Also, */ /* the output length parameter is bogus, and PITSYN should be */ /* rewritten to allow a constant frame length output. */ /* Input: */ /* VOICE - Half frame voicing decisions */ /* Indices 1 through 2 read. */ /* Input/Output: */ /* PITCH - Pitch */ /* PITCH is restricted to range 20 to 156, inclusive, */ /* before calling subroutine PITSYN, and then PITSYN */ /* can modify it further under some conditions. */ /* RMS - Energy */ /* Only use is for debugging, and passed to PITSYN. */ /* See comments there for how it can be modified. */ /* RC - Reflection coefficients */ /* Indices 1 through ORDER restricted to range -.99 to .99, */ /* before calling subroutine PITSYN, and then PITSYN */ /* can modify it further under some conditions. */ /* Output: */ /* SPEECH - Synthesized speech samples. */ /* Indices 1 through the final value of K are written. */ /* K - Number of samples placed into array SPEECH. */ /* This is always MAXFRM. */ /* Subroutine */ int synths_(integer *voice, integer *pitch, real * rms, real *rc, real *speech, integer *k, struct lpc10_decoder_state *st) { /* Initialized data */ real *buf; integer *buflen; /* System generated locals */ integer i__1; real r__1, r__2; /* Local variables */ real rmsi[16]; integer nout, ivuv[16], i__, j; extern /* Subroutine */ int deemp_(real *, integer *, struct lpc10_decoder_state *); real ratio; integer ipiti[16]; extern /* Subroutine */ bsynz_(real *, integer *, integer *, real *, real *, real *, real *, struct lpc10_decoder_state *), irc2pc_(real *, real * , integer *, real *, real *); real g2pass; real pc[10]; extern /* Subroutine */ int pitsyn_(integer *, integer *, integer *, real *, real *, integer *, integer *, integer *, real *, real *, integer *, real *, struct lpc10_decoder_state *); real rci[160] /* was [10][16] */; /* $Log: synths.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:51 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:19 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:58 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:42:59 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_decoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_decoder_state(). * * Revision 1.1 1996/08/19 22:30:33 jaf * Initial revision * */ /* Revision 1.3 1996/03/29 22:03:47 jaf */ /* Removed definitions for any constants that were no longer used. */ /* Revision 1.2 1996/03/26 19:34:33 jaf */ /* Added comments indicating which constants are not needed in an */ /* application that uses the LPC-10 coder. */ /* Revision 1.1 1996/02/07 14:43:51 jaf */ /* Initial revision */ /* LPC Configuration parameters: */ /* Frame size, Prediction order, Pitch period */ /* Arguments */ /* $Log: synths.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:51 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:19 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:58 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:42:59 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_decoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_decoder_state(). * * Revision 1.1 1996/08/19 22:30:33 jaf * Initial revision * */ /* Revision 1.3 1996/03/29 22:05:55 jaf */ /* Commented out the common block variables that are not needed by the */ /* embedded version. */ /* Revision 1.2 1996/03/26 19:34:50 jaf */ /* Added comments indicating which constants are not needed in an */ /* application that uses the LPC-10 coder. */ /* Revision 1.1 1996/02/07 14:44:09 jaf */ /* Initial revision */ /* LPC Processing control variables: */ /* *** Read-only: initialized in setup */ /* Files for Speech, Parameter, and Bitstream Input & Output, */ /* and message and debug outputs. */ /* Here are the only files which use these variables: */ /* lpcsim.f setup.f trans.f error.f vqsetup.f */ /* Many files which use fdebug are not listed, since it is only used in */ /* those other files conditionally, to print trace statements. */ /* integer fsi, fso, fpi, fpo, fbi, fbo, pbin, fmsg, fdebug */ /* LPC order, Frame size, Quantization rate, Bits per frame, */ /* Error correction */ /* Subroutine SETUP is the only place where order is assigned a value, */ /* and that value is 10. It could increase efficiency 1% or so to */ /* declare order as a constant (i.e., a Fortran PARAMETER) instead of as */ /* a variable in a COMMON block, since it is used in many places in the */ /* core of the coding and decoding routines. Actually, I take that back. */ /* At least when compiling with f2c, the upper bound of DO loops is */ /* stored in a local variable before the DO loop begins, and then that is */ /* compared against on each iteration. */ /* Similarly for lframe, which is given a value of MAXFRM in SETUP. */ /* Similarly for quant, which is given a value of 2400 in SETUP. quant */ /* is used in only a few places, and never in the core coding and */ /* decoding routines, so it could be eliminated entirely. */ /* nbits is similar to quant, and is given a value of 54 in SETUP. */ /* corrp is given a value of .TRUE. in SETUP, and is only used in the */ /* subroutines ENCODE and DECODE. It doesn't affect the speed of the */ /* coder significantly whether it is .TRUE. or .FALSE., or whether it is */ /* a constant or a variable, since it is only examined once per frame. */ /* Leaving it as a variable that is set to .TRUE. seems like a good */ /* idea, since it does enable some error-correction capability for */ /* unvoiced frames, with no change in the coding rate, and no noticeable */ /* quality difference in the decoded speech. */ /* integer quant, nbits */ /* *** Read/write: variables for debugging, not needed for LPC algorithm */ /* Current frame, Unstable frames, Output clip count, Max onset buffer, */ /* Debug listing detail level, Line count on listing page */ /* nframe is not needed for an embedded LPC10 at all. */ /* nunsfm is initialized to 0 in SETUP, and incremented in subroutine */ /* ERROR, which is only called from RCCHK. When LPC10 is embedded into */ /* an application, I would recommend removing the call to ERROR in RCCHK, */ /* and remove ERROR and nunsfm completely. */ /* iclip is initialized to 0 in SETUP, and incremented in entry SWRITE in */ /* sread.f. When LPC10 is embedded into an application, one might want */ /* to cause it to be incremented in a routine that takes the output of */ /* SYNTHS and sends it to an audio device. It could be optionally */ /* displayed, for those that might want to know what it is. */ /* maxosp is never initialized to 0 in SETUP, although it probably should */ /* be, and it is updated in subroutine ANALYS. I doubt that its value */ /* would be of much interest to an application in which LPC10 is */ /* embedded. */ /* listl and lincnt are not needed for an embedded LPC10 at all. */ /* integer nframe, nunsfm, iclip, maxosp, listl, lincnt */ /* common /contrl/ fsi, fso, fpi, fpo, fbi, fbo, pbin, fmsg, fdebug */ /* common /contrl/ quant, nbits */ /* common /contrl/ nframe, nunsfm, iclip, maxosp, listl, lincnt */ /* Parameters/constants */ /* Local variables that need not be saved */ /* Local state */ /* BUF is a buffer of speech samples that would have been returned */ /* by the older version of SYNTHS, but the newer version doesn't, */ /* so that the newer version can always return MAXFRM samples on */ /* every call. This has the effect of delaying the return of */ /* samples for one additional frame time. */ /* Indices 1 through BUFLEN contain samples that are left over from */ /* the last call to SYNTHS. Given the way that PITSYN works, */ /* BUFLEN should always be in the range MAXFRM-MAXPIT+1 through */ /* MAXFRM, inclusive, after a call to SYNTHS is complete. */ /* On the first call to SYNTHS (or the first call after */ /* reinitializing with the entry INITSYNTHS), BUFLEN is MAXFRM, and */ /* a frame of silence is always returned. */ /* Parameter adjustments */ if (voice) { --voice; } if (rc) { --rc; } if (speech) { --speech; } /* Function Body */ buf = &(st->buf[0]); buflen = &(st->buflen); /* Computing MAX */ i__1 = min(*pitch,156); *pitch = max(i__1,20); i__1 = contrl_1.order; for (i__ = 1; i__ <= i__1; ++i__) { /* Computing MAX */ /* Computing MIN */ r__2 = rc[i__]; r__1 = min(r__2,.99f); rc[i__] = max(r__1,-.99f); } pitsyn_(&contrl_1.order, &voice[1], pitch, rms, &rc[1], &contrl_1.lframe, ivuv, ipiti, rmsi, rci, &nout, &ratio, st); if (nout > 0) { i__1 = nout; for (j = 1; j <= i__1; ++j) { /* Add synthesized speech for pitch period J to the en d of */ /* BUF. */ irc2pc_(&rci[j * 10 - 10], pc, &contrl_1.order, &c_b2, &g2pass); bsynz_(pc, &ipiti[j - 1], &ivuv[j - 1], &buf[*buflen], &rmsi[j - 1] , &ratio, &g2pass, st); deemp_(&buf[*buflen], &ipiti[j - 1], st); *buflen += ipiti[j - 1]; } /* Copy first MAXFRM samples from BUF to output array SPEECH */ /* (scaling them), and then remove them from the beginning of */ /* BUF. */ for (i__ = 1; i__ <= 180; ++i__) { speech[i__] = buf[i__ - 1] / 4096.f; } *k = 180; *buflen += -180; i__1 = *buflen; for (i__ = 1; i__ <= i__1; ++i__) { buf[i__ - 1] = buf[i__ + 179]; } } return 0; } /* synths_ */ h323plus/plugins/audio/LPC_10/src/invert.c0000644000175000017500000001436611341106232017054 0ustar markmark/* $Log: invert.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:50 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:16 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:42 csoutheren Initial version Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.1 1996/08/19 22:32:00 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int invert_(integer *order, real *phi, real *psi, real *rc); #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* **************************************************************** */ /* INVERT Version 45G */ /* $Log: invert.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:50 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:16 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:42 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.1 1996/08/19 22:32:00 jaf * Initial revision * */ /* Revision 1.3 1996/03/18 20:52:47 jaf */ /* Just added a few comments about which array indices of the arguments */ /* are used, and mentioning that this subroutine has no local state. */ /* Revision 1.2 1996/03/13 16:51:32 jaf */ /* Comments added explaining that none of the local variables of this */ /* subroutine need to be saved from one invocation to the next. */ /* Eliminated a comment from the original, describing a local array X */ /* that appeared nowhere in the code. */ /* Revision 1.1 1996/02/07 14:47:20 jaf */ /* Initial revision */ /* **************************************************************** */ /* Invert a covariance matrix using Choleski decomposition method. */ /* Input: */ /* ORDER - Analysis order */ /* PHI(ORDER,ORDER) - Covariance matrix */ /* Indices (I,J) read, where ORDER .GE. I .GE. J .GE. 1.*/ /* All other indices untouched. */ /* PSI(ORDER) - Column vector to be predicted */ /* Indices 1 through ORDER read. */ /* Output: */ /* RC(ORDER) - Pseudo reflection coefficients */ /* Indices 1 through ORDER written, and then possibly read. */ /* Internal: */ /* V(ORDER,ORDER) - Temporary matrix */ /* Same indices written as read from PHI. */ /* Many indices may be read and written again after */ /* initially being copied from PHI, but all indices */ /* are written before being read. */ /* NOTE: Temporary matrix V is not needed and may be replaced */ /* by PHI if the original PHI values do not need to be preserved. */ /* Subroutine */ int invert_(integer *order, real *phi, real *psi, real *rc) { /* System generated locals */ integer phi_dim1, phi_offset, i__1, i__2, i__3; real r__1, r__2; /* Local variables */ real save; integer i__, j, k; real v[100] /* was [10][10] */; /* Arguments */ /* $Log: invert.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:50 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:16 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:42 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.1 1996/08/19 22:32:00 jaf * Initial revision * */ /* Revision 1.3 1996/03/29 22:03:47 jaf */ /* Removed definitions for any constants that were no longer used. */ /* Revision 1.2 1996/03/26 19:34:33 jaf */ /* Added comments indicating which constants are not needed in an */ /* application that uses the LPC-10 coder. */ /* Revision 1.1 1996/02/07 14:43:51 jaf */ /* Initial revision */ /* LPC Configuration parameters: */ /* Frame size, Prediction order, Pitch period */ /* Parameters/constants */ /* Local variables that need not be saved */ /* Decompose PHI into V * D * V' where V is a triangular matrix whose */ /* main diagonal elements are all 1, V' is the transpose of V, and */ /* D is a vector. Here D(n) is stored in location V(n,n). */ /* Parameter adjustments */ --rc; --psi; phi_dim1 = *order; phi_offset = phi_dim1 + 1; phi -= phi_offset; /* Function Body */ i__1 = *order; for (j = 1; j <= i__1; ++j) { i__2 = *order; for (i__ = j; i__ <= i__2; ++i__) { v[i__ + j * 10 - 11] = phi[i__ + j * phi_dim1]; } i__2 = j - 1; for (k = 1; k <= i__2; ++k) { save = v[j + k * 10 - 11] * v[k + k * 10 - 11]; i__3 = *order; for (i__ = j; i__ <= i__3; ++i__) { v[i__ + j * 10 - 11] -= v[i__ + k * 10 - 11] * save; } } /* Compute intermediate results, which are similar to RC's */ if ((r__1 = v[j + j * 10 - 11], abs(r__1)) < 1e-10f) { goto L100; } rc[j] = psi[j]; i__2 = j - 1; for (k = 1; k <= i__2; ++k) { rc[j] -= rc[k] * v[j + k * 10 - 11]; } v[j + j * 10 - 11] = 1.f / v[j + j * 10 - 11]; rc[j] *= v[j + j * 10 - 11]; /* Computing MAX */ /* Computing MIN */ r__2 = rc[j]; r__1 = min(r__2,.999f); rc[j] = max(r__1,-.999f); } return 0; /* Zero out higher order RC's if algorithm terminated early */ L100: i__1 = *order; for (i__ = j; i__ <= i__1; ++i__) { rc[i__] = 0.f; } /* Back substitute for PC's (if needed) */ /* 110 DO J = ORDER,1,-1 */ /* PC(J) = RC(J) */ /* DO I = 1,J-1 */ /* PC(J) = PC(J) - PC(I)*V(J,I) */ /* END DO */ /* END DO */ return 0; } /* invert_ */ h323plus/plugins/audio/LPC_10/src/rcchk.c0000644000175000017500000000654511341106232016637 0ustar markmark/* $Log: rcchk.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:51 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:19 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:58 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:43 csoutheren Initial version Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.1 1996/08/19 22:30:41 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int rcchk_(integer *order, real *rc1f, real *rc2f); #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* ********************************************************************* */ /* RCCHK Version 45G */ /* $Log: rcchk.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:51 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:19 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:58 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.1 1996/08/19 22:30:41 jaf * Initial revision * */ /* Revision 1.4 1996/03/27 18:13:47 jaf */ /* Commented out a call to subroutine ERROR. */ /* Revision 1.3 1996/03/18 15:48:53 jaf */ /* Just added a few comments about which array indices of the arguments */ /* are used, and mentioning that this subroutine has no local state. */ /* Revision 1.2 1996/03/13 16:55:22 jaf */ /* Comments added explaining that none of the local variables of this */ /* subroutine need to be saved from one invocation to the next. */ /* Revision 1.1 1996/02/07 14:49:08 jaf */ /* Initial revision */ /* ********************************************************************* */ /* Check RC's, repeat previous frame's RC's if unstable */ /* Input: */ /* ORDER - Number of RC's */ /* RC1F - Previous frame's RC's */ /* Indices 1 through ORDER may be read. */ /* Input/Output: */ /* RC2F - Present frame's RC's */ /* Indices 1 through ORDER may be read, and written. */ /* This subroutine has no local state. */ /* Subroutine */ int rcchk_(integer *order, real *rc1f, real *rc2f) { /* System generated locals */ integer i__1; real r__1; /* Local variables */ integer i__; /* Arguments */ /* Local variables that need not be saved */ /* Parameter adjustments */ --rc2f; --rc1f; /* Function Body */ i__1 = *order; for (i__ = 1; i__ <= i__1; ++i__) { if ((r__1 = rc2f[i__], abs(r__1)) > .99f) { goto L10; } } return 0; /* Note: In version embedded in other software, all calls to ERROR */ /* should probably be removed. */ L10: /* This call to ERROR is only needed for debugging purposes. */ /* CALL ERROR('RCCHK',2,I) */ i__1 = *order; for (i__ = 1; i__ <= i__1; ++i__) { rc2f[i__] = rc1f[i__]; } return 0; } /* rcchk_ */ h323plus/plugins/audio/LPC_10/src/pitsyn.c0000644000175000017500000004523311341106232017070 0ustar markmark/* $Log: pitsyn.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:51 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:18 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:43 csoutheren Initial version Revision 1.2 2002/02/15 03:57:55 yurik Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.2 1996/08/20 20:40:12 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_decoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_decoder_state(). * * Revision 1.1 1996/08/19 22:31:12 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int pitsyn_(integer *order, integer *voice, integer *pitch, real *rms, real *rc, integer *lframe, integer *ivuv, integer *ipiti, real *rmsi, real *rci, integer *nout, real *ratio, struct lpc10_decoder_state *st); #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* ***************************************************************** */ /* PITSYN Version 53 */ /* $Log: pitsyn.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:51 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:18 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.2 2002/02/15 03:57:55 yurik /* Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:40:12 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_decoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_decoder_state(). * * Revision 1.1 1996/08/19 22:31:12 jaf * Initial revision * */ /* Revision 1.2 1996/03/25 18:49:07 jaf */ /* Added commments about which indices of array arguments are read or */ /* written. */ /* Rearranged local variable declarations to indicate which need to be */ /* saved from one invocation to the next. Added entry INITPITSYN to */ /* reinitialize local state variables, if desired. */ /* Added lots of comments about proving that the maximum number of pitch */ /* periods (NOUT) that can be returned is 16. The call to STOP that */ /* could happen if NOUT got too large was removed as a result. */ /* Also proved that the total number of samples returned from N calls, */ /* each with identical values of LFRAME, will always be in the range */ /* N*LFRAME-MAXPIT+1 to N*LFRAME. */ /* Revision 1.1 1996/02/07 14:48:18 jaf */ /* Initial revision */ /* ***************************************************************** */ /* Synthesize a single pitch epoch */ /* Input: */ /* ORDER - Synthesis order (number of RC's) */ /* VOICE - Half frame voicing decisions */ /* Indices 1 through 2 read. */ /* LFRAME - Length of speech buffer */ /* Input/Output: */ /* PITCH - Pitch */ /* This value should be in the range MINPIT (20) to MAXPIT */ /* (156), inclusive. */ /* PITCH can be modified under some conditions. */ /* RMS - Energy (can be modified) */ /* RMS is changed to 1 if the value passed in is less than 1. */ /* RC - Reflection coefficients */ /* Indices 1 through ORDER can be temporarily overwritten with */ /* RCO, and then replaced with original values, under some */ /* conditions. */ /* Output: */ /* IVUV - Pitch epoch voicing decisions */ /* Indices (I) of IVUV, IPITI, and RMSI are written, */ /* and indices (J,I) of RCI are written, */ /* where I ranges from 1 to NOUT, and J ranges from 1 to ORDER. */ /* IPITI - Pitch epoch length */ /* RMSI - Pitch epoch energy */ /* RCI - Pitch epoch RC's */ /* NOUT - Number of pitch periods in this frame */ /* This is at least 0, at least 1 if MAXPIT .LT. LFRAME (this */ /* is currently true on every call), and can never be more than */ /* (LFRAME+MAXPIT-1)/PITCH, which is currently 16 with */ /* LFRAME=180, MAXPIT=156, and PITCH .GE. 20, as SYNTHS */ /* guarantees when it calls this subroutine. */ /* RATIO - Previous to present energy ratio */ /* Always assigned a value. */ /* Subroutine */ int pitsyn_(integer *order, integer *voice, integer *pitch, real *rms, real *rc, integer *lframe, integer *ivuv, integer *ipiti, real *rmsi, real *rci, integer *nout, real *ratio, struct lpc10_decoder_state *st) { /* Initialized data */ real *rmso; logical *first; /* System generated locals */ integer rci_dim1, rci_offset, i__1, i__2; real r__1; /* Builtin functions */ double log(doublereal), exp(doublereal); /* Local variables */ real alrn, alro, yarc[10], prop; integer i__, j, vflag, jused, lsamp; integer *jsamp; real slope; integer *ipito; real uvpit; integer ip, nl, ivoice; integer *ivoico; integer istart; real *rco; real xxy; /* Arguments */ /* $Log: pitsyn.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:51 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:18 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.2 2002/02/15 03:57:55 yurik /* Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:40:12 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_decoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_decoder_state(). * * Revision 1.1 1996/08/19 22:31:12 jaf * Initial revision * */ /* Revision 1.3 1996/03/29 22:03:47 jaf */ /* Removed definitions for any constants that were no longer used. */ /* Revision 1.2 1996/03/26 19:34:33 jaf */ /* Added comments indicating which constants are not needed in an */ /* application that uses the LPC-10 coder. */ /* Revision 1.1 1996/02/07 14:43:51 jaf */ /* Initial revision */ /* LPC Configuration parameters: */ /* Frame size, Prediction order, Pitch period */ /* Local variables that need not be saved */ /* LSAMP is initialized in the IF (FIRST) THEN clause, but it is */ /* not used the first time through, and it is given a value before */ /* use whenever FIRST is .FALSE., so it appears unnecessary to */ /* assign it a value when FIRST is .TRUE. */ /* Local state */ /* FIRST - .TRUE. only on first call to PITSYN. */ /* IVOICO - Previous VOICE(2) value. */ /* IPITO - Previous PITCH value. */ /* RMSO - Previous RMS value. */ /* RCO - Previous RC values. */ /* JSAMP - If this routine is called N times with identical values of */ /* LFRAME, then the total length of all pitch periods returned */ /* is always N*LFRAME-JSAMP, and JSAMP is always in the range 0 */ /* to MAXPIT-1 (see below for why this is so). Thus JSAMP is */ /* the number of samples "left over" from the previous call to */ /* PITSYN, that haven't been "used" in a pitch period returned */ /* from this subroutine. Every time this subroutine is called, */ /* it returns pitch periods with a total length of at most */ /* LFRAME+JSAMP. */ /* IVOICO, IPITO, RCO, and JSAMP need not be assigned an initial value */ /* with a DATA statement, because they are always initialized on the */ /* first call to PITSYN. */ /* FIRST and RMSO should be initialized with DATA statements, because */ /* even on the first call, they are used before being initialized. */ /* Parameter adjustments */ if (rc) { --rc; } if (rci) { rci_dim1 = *order; rci_offset = rci_dim1 + 1; rci -= rci_offset; } if (voice) { --voice; } if (ivuv) { --ivuv; } if (ipiti) { --ipiti; } if (rmsi) { --rmsi; } /* Function Body */ ivoico = &(st->ivoico); ipito = &(st->ipito); rmso = &(st->rmso); rco = &(st->rco[0]); jsamp = &(st->jsamp); first = &(st->first_pitsyn); if (*rms < 1.f) { *rms = 1.f; } if (*rmso < 1.f) { *rmso = 1.f; } uvpit = 0.f; *ratio = *rms / (*rmso + 8.f); if (*first) { lsamp = 0; ivoice = voice[2]; if (ivoice == 0) { *pitch = *lframe / 4; } *nout = *lframe / *pitch; *jsamp = *lframe - *nout * *pitch; /* SYNTHS only calls this subroutine with PITCH in the range 20 */ /* to 156. LFRAME = MAXFRM = 180, so NOUT is somewhere in th e */ /* range 1 to 9. */ /* JSAMP is "LFRAME mod PITCH", so it is in the range 0 to */ /* (PITCH-1), or 0 to MAXPIT-1=155, after the first call. */ i__1 = *nout; for (i__ = 1; i__ <= i__1; ++i__) { i__2 = *order; for (j = 1; j <= i__2; ++j) { rci[j + i__ * rci_dim1] = rc[j]; } ivuv[i__] = ivoice; ipiti[i__] = *pitch; rmsi[i__] = *rms; } *first = FALSE_; } else { vflag = 0; lsamp = *lframe + *jsamp; slope = (*pitch - *ipito) / (real) lsamp; *nout = 0; jused = 0; istart = 1; if (voice[1] == *ivoico && voice[2] == voice[1]) { if (voice[2] == 0) { /* SSUV - - 0 , 0 , 0 */ *pitch = *lframe / 4; *ipito = *pitch; if (*ratio > 8.f) { *rmso = *rms; } } /* SSVC - - 1 , 1 , 1 */ slope = (*pitch - *ipito) / (real) lsamp; ivoice = voice[2]; } else { if (*ivoico != 1) { if (*ivoico == voice[1]) { /* UV2VC2 - - 0 , 0 , 1 */ nl = lsamp - *lframe / 4; } else { /* UV2VC1 - - 0 , 1 , 1 */ nl = lsamp - *lframe * 3 / 4; } ipiti[1] = nl / 2; ipiti[2] = nl - ipiti[1]; ivuv[1] = 0; ivuv[2] = 0; rmsi[1] = *rmso; rmsi[2] = *rmso; i__1 = *order; for (i__ = 1; i__ <= i__1; ++i__) { rci[i__ + rci_dim1] = rco[i__ - 1]; rci[i__ + (rci_dim1 << 1)] = rco[i__ - 1]; rco[i__ - 1] = rc[i__]; } slope = 0.f; *nout = 2; *ipito = *pitch; jused = nl; istart = nl + 1; ivoice = 1; } else { if (*ivoico != voice[1]) { /* VC2UV1 - - 1 , 0 , 0 */ lsamp = *lframe / 4 + *jsamp; } else { /* VC2UV2 - - 1 , 1 , 0 */ lsamp = *lframe * 3 / 4 + *jsamp; } i__1 = *order; for (i__ = 1; i__ <= i__1; ++i__) { yarc[i__ - 1] = rc[i__]; rc[i__] = rco[i__ - 1]; } ivoice = 1; slope = 0.f; vflag = 1; } } /* Here is the value of most variables that are used below, depending on */ /* the values of IVOICO, VOICE(1), and VOICE(2). VOICE(1) and VOICE(2 ) */ /* are input arguments, and IVOICO is the value of VOICE(2) on the */ /* previous call (see notes for the IF (NOUT .NE. 0) statement near th e */ /* end). Each of these three values is either 0 or 1. These three */ /* values below are given as 3-bit long strings, in the order IVOICO, */ /* VOICE(1), and VOICE(2). It appears that the code above assumes tha t */ /* the bit sequences 010 and 101 never occur, but I wonder whether a */ /* large enough number of bit errors in the channel could cause such a */ /* thing to happen, and if so, could that cause NOUT to ever go over 1 1? */ /* Note that all of the 180 values in the table are really LFRAME, but */ /* 180 has fewer characters, and it makes the table a little more */ /* concrete. If LFRAME is ever changed, keep this in mind. Similarly , */ /* 135's are 3*LFRAME/4, and 45's are LFRAME/4. If LFRAME is not a */ /* multiple of 4, then the 135 for NL-JSAMP is actually LFRAME-LFRAME/ 4, */ /* and the 45 for NL-JSAMP is actually LFRAME-3*LFRAME/4. */ /* Note that LSAMP-JSAMP is given as the variable. This was just for */ /* brevity, to avoid adding "+JSAMP" to all of the column entries. */ /* Similarly for NL-JSAMP. */ /* Variable | 000 001 011,010 111 110 100,101 */ /* ------------+-------------------------------------------------- */ /* ISTART | 1 NL+1 NL+1 1 1 1 */ /* LSAMP-JSAMP | 180 180 180 180 135 45 */ /* IPITO | 45 PITCH PITCH oldPITCH oldPITCH oldPITCH */ /* SLOPE | 0 0 0 seebelow 0 0 */ /* JUSED | 0 NL NL 0 0 0 */ /* PITCH | 45 PITCH PITCH PITCH PITCH PITCH */ /* NL-JSAMP | -- 135 45 -- -- -- */ /* VFLAG | 0 0 0 0 1 1 */ /* NOUT | 0 2 2 0 0 0 */ /* IVOICE | 0 1 1 1 1 1 */ /* while_loop | once once once once twice twice */ /* ISTART | -- -- -- -- JUSED+1 JUSED+1 */ /* LSAMP-JSAMP | -- -- -- -- 180 180 */ /* IPITO | -- -- -- -- oldPITCH oldPITCH */ /* SLOPE | -- -- -- -- 0 0 */ /* JUSED | -- -- -- -- ?? ?? */ /* PITCH | -- -- -- -- PITCH PITCH */ /* NL-JSAMP | -- -- -- -- -- -- */ /* VFLAG | -- -- -- -- 0 0 */ /* NOUT | -- -- -- -- ?? ?? */ /* IVOICE | -- -- -- -- 0 0 */ /* UVPIT is always 0.0 on the first pass through the DO WHILE (.TRUE.) */ /* loop below. */ /* The only possible non-0 value of SLOPE (in column 111) is */ /* (PITCH-IPITO)/FLOAT(LSAMP) */ /* Column 101 is identical to 100. Any good properties we can prove */ /* for 100 will also hold for 101. Similarly for 010 and 011. */ /* SYNTHS calls this subroutine with PITCH restricted to the range 20 to */ /* 156. IPITO is similarly restricted to this range, after the first */ /* call. IP below is also restricted to this range, given the */ /* definitions of IPITO, SLOPE, UVPIT, and that I is in the range ISTA RT */ /* to LSAMP. */ while(TRUE_) { /* JUSED is the total length of all pitch periods curr ently */ /* in the output arrays, in samples. */ /* An invariant of the DO I = ISTART,LSAMP loop below, under */ /* the condition that IP is always in the range 1 thro ugh */ /* MAXPIT, is: */ /* (I - MAXPIT) .LE. JUSED .LE. (I-1) */ /* Note that the final value of I is LSAMP+1, so that after */ /* the DO loop is complete, we know: */ /* (LSAMP - MAXPIT + 1) .LE. JUSED .LE. LSAMP */ i__1 = lsamp; for (i__ = istart; i__ <= i__1; ++i__) { r__1 = *ipito + slope * i__; ip = (integer)(r__1 + .5f); if (uvpit != 0.f) { ip = (integer)uvpit; } if (ip <= i__ - jused) { ++(*nout); /* The following check is no longer nece ssary, now that */ /* we can prove that NOUT will never go over 16. */ /* IF (NOUT .GT. 16) STOP 'PITSYN: too many epochs' */ ipiti[*nout] = ip; *pitch = ip; ivuv[*nout] = ivoice; jused += ip; prop = (jused - ip / 2) / (real) lsamp; i__2 = *order; for (j = 1; j <= i__2; ++j) { alro = (real)log((rco[j - 1] + 1) / (1 - rco[j - 1])); alrn = (real)log((rc[j] + 1) / (1 - rc[j])); xxy = alro + prop * (alrn - alro); xxy = (real)exp(xxy); rci[j + *nout * rci_dim1] = (xxy - 1) / (xxy + 1); } rmsi[*nout] = (real)(log(*rmso) + prop * (log(*rms) - log(*rmso))); rmsi[*nout] = (real)exp(rmsi[*nout]); } } if (vflag != 1) { goto L100; } /* I want to prove what range UVPIT must lie in after the */ /* assignments to it below. To do this, I must determ ine */ /* what range (LSAMP-ISTART) must lie in, after the */ /* assignments to ISTART and LSAMP below. */ /* Let oldLSAMP be the value of LSAMP at this point in the */ /* execution. This is 135+JSAMP in state 110, or 45+J SAMP in */ /* states 100 or 101. */ /* Given the loop invariant on JUSED above, we know th at: */ /* (oldLSAMP - MAXPIT + 1) .LE. JUSED .LE. oldLSAMP */ /* ISTART is one more than this. */ /* Let newLSAMP be the value assigned to LSAMP below. This */ /* is 180+JSAMP. Thus (newLSAMP-oldLSAMP) is either 4 5 or */ /* 135, depending on the state. */ /* Thus, the range of newLSAMP-ISTART is: */ /* (newLSAMP-(oldLSAMP+1)) .LE. newLSAMP-ISTART */ /* .LE. (newLSAMP-(oldLSAMP - MAXPIT + 2)) */ /* or: */ /* 46 .LE. newLSAMP-ISTART .LE. 133+MAXPIT .EQ. 289 */ /* Therefore, UVPIT is in the range 23 to 144 after th e first */ /* assignment to UVPIT below, and after the conditiona l */ /* assignment, it is in the range 23 to 90. */ /* The important thing is that it is in the range 20 t o 156, */ /* so that in the loop above, IP is always in this ran ge. */ vflag = 0; istart = jused + 1; lsamp = *lframe + *jsamp; slope = 0.f; ivoice = 0; uvpit = (real) ((lsamp - istart) / 2); if (uvpit > 90.f) { uvpit /= 2; } *rmso = *rms; i__1 = *order; for (i__ = 1; i__ <= i__1; ++i__) { rc[i__] = yarc[i__ - 1]; rco[i__ - 1] = yarc[i__ - 1]; } } L100: *jsamp = lsamp - jused; } /* Given that the maximum pitch period MAXPIT .LT. LFRAME (this is */ /* currently true on every call, since SYNTHS always sets */ /* LFRAME=180), NOUT will always be .GE. 1 at this point. */ if (*nout != 0) { *ivoico = voice[2]; *ipito = *pitch; *rmso = *rms; i__1 = *order; for (i__ = 1; i__ <= i__1; ++i__) { rco[i__ - 1] = rc[i__]; } } return 0; } /* pitsyn_ */ h323plus/plugins/audio/LPC_10/src/ivfilt.c0000644000175000017500000001015711341106232017034 0ustar markmark/* $Log: ivfilt.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:50 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:16 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:43 csoutheren Initial version Revision 1.2 2002/02/15 03:57:55 yurik Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.1 1996/08/19 22:31:53 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int ivfilt_(real *lpbuf, real *ivbuf, integer *len, integer *nsamp, real *ivrc); #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* ********************************************************************* */ /* IVFILT Version 48 */ /* $Log: ivfilt.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:50 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:16 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.2 2002/02/15 03:57:55 yurik /* Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.1 1996/08/19 22:31:53 jaf * Initial revision * */ /* Revision 1.3 1996/03/15 21:36:29 jaf */ /* Just added a few comments about which array indices of the arguments */ /* are used, and mentioning that this subroutine has no local state. */ /* Revision 1.2 1996/03/13 00:01:00 jaf */ /* Comments added explaining that none of the local variables of this */ /* subroutine need to be saved from one invocation to the next. */ /* Revision 1.1 1996/02/07 14:47:34 jaf */ /* Initial revision */ /* ********************************************************************* */ /* 2nd order inverse filter, speech is decimated 4:1 */ /* Input: */ /* LEN - Length of speech buffers */ /* NSAMP - Number of samples to filter */ /* LPBUF - Low pass filtered speech buffer */ /* Indices LEN-NSAMP-7 through LEN read. */ /* Output: */ /* IVBUF - Inverse filtered speech buffer */ /* Indices LEN-NSAMP+1 through LEN written. */ /* IVRC - Inverse filter reflection coefficients (for voicing) */ /* Indices 1 and 2 both written (also read, but only after writing). */ /* This subroutine has no local state. */ /* Subroutine */ int ivfilt_(real *lpbuf, real *ivbuf, integer *len, integer * nsamp, real *ivrc) { /* System generated locals */ integer i__1; /* Local variables */ integer i__, j, k; real r__[3], pc1, pc2; /* Arguments */ /* Local variables that need not be saved */ /* Local state */ /* None */ /* Calculate Autocorrelations */ /* Parameter adjustments */ --ivbuf; --lpbuf; --ivrc; /* Function Body */ for (i__ = 1; i__ <= 3; ++i__) { r__[i__ - 1] = 0.f; k = i__ - (1 << 2); i__1 = *len; for (j = (i__ << 2) + *len - *nsamp; j <= i__1; j += 2) { r__[i__ - 1] += lpbuf[j] * lpbuf[j - k]; } } /* Calculate predictor coefficients */ pc1 = 0.f; pc2 = 0.f; ivrc[1] = 0.f; ivrc[2] = 0.f; if (r__[0] > 1e-10f) { ivrc[1] = r__[1] / r__[0]; ivrc[2] = (r__[2] - ivrc[1] * r__[1]) / (r__[0] - ivrc[1] * r__[1]); pc1 = ivrc[1] - ivrc[1] * ivrc[2]; pc2 = ivrc[2]; } /* Inverse filter LPBUF into IVBUF */ i__1 = *len; for (i__ = *len + 1 - *nsamp; i__ <= i__1; ++i__) { ivbuf[i__] = lpbuf[i__] - pc1 * lpbuf[i__ - 4] - pc2 * lpbuf[i__ - 8]; } return 0; } /* ivfilt_ */ h323plus/plugins/audio/LPC_10/src/random.c0000644000175000017500000000725711341106232017026 0ustar markmark/* $Log: random.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:51 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:19 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:58 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:43 csoutheren Initial version Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.2 1996/08/20 20:41:32 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_decoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_decoder_state(). * * Revision 1.1 1996/08/19 22:30:49 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern integer random_(struct lpc10_decoder_state *st); #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* ********************************************************************** */ /* RANDOM Version 49 */ /* $Log: random.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:51 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:19 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:58 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:41:32 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_decoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_decoder_state(). * * Revision 1.1 1996/08/19 22:30:49 jaf * Initial revision * */ /* Revision 1.3 1996/03/20 16:13:54 jaf */ /* Rearranged comments a little bit, and added comments explaining that */ /* even though there is local state here, there is no need to create an */ /* ENTRY for reinitializing it. */ /* Revision 1.2 1996/03/14 22:25:29 jaf */ /* Just rearranged the comments and local variable declarations a bit. */ /* Revision 1.1 1996/02/07 14:49:01 jaf */ /* Initial revision */ /* ********************************************************************* */ /* Pseudo random number generator based on Knuth, Vol 2, p. 27. */ /* Function Return: */ /* RANDOM - Integer variable, uniformly distributed over -32768 to 32767 */ /* This subroutine maintains local state from one call to the next. */ /* In the context of the LPC10 coder, there is no reason to reinitialize */ /* this local state when switching between audio streams, because its */ /* results are only used to generate noise for unvoiced frames. */ integer random_(struct lpc10_decoder_state *st) { /* Initialized data */ integer *j; integer *k; shortint *y; /* System generated locals */ integer ret_val; /* Parameters/constants */ /* Local state */ /* The following is a 16 bit 2's complement addition, */ /* with overflow checking disabled */ j = &(st->j); k = &(st->k); y = &(st->y[0]); y[*k - 1] += y[*j - 1]; ret_val = y[*k - 1]; --(*k); if (*k <= 0) { *k = 5; } --(*j); if (*j <= 0) { *j = 5; } return ret_val; } /* random_ */ h323plus/plugins/audio/LPC_10/src/hp100.c0000644000175000017500000001174311341106232016371 0ustar markmark/* $Log: hp100.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:50 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:16 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:42 csoutheren Initial version Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.2 1996/08/20 20:28:05 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Revision 1.1 1996/08/19 22:32:04 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int hp100_(real *speech, integer *start, integer *end, struct lpc10_encoder_state *st); extern int inithp100_(void); #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* ********************************************************************* */ /* HP100 Version 55 */ /* $Log: hp100.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:50 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:16 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:42 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:28:05 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Revision 1.1 1996/08/19 22:32:04 jaf * Initial revision * */ /* Revision 1.6 1996/03/15 16:45:25 jaf */ /* Rearranged a few comments. */ /* Revision 1.5 1996/03/14 23:20:54 jaf */ /* Added comments about when INITHP100 should be used. */ /* Revision 1.4 1996/03/14 23:08:08 jaf */ /* Added an entry named INITHP100 that initializes the local state of */ /* subroutine HP100. */ /* Revision 1.3 1996/03/14 22:09:20 jaf */ /* Comments added explaining which of the local variables of this */ /* subroutine need to be saved from one invocation to the next, and which */ /* do not. */ /* Revision 1.2 1996/02/12 15:05:54 jaf */ /* Added lots of comments explaining why I changed one line, which was a */ /* declaration with initializations. */ /* Revision 1.1 1996/02/07 14:47:12 jaf */ /* Initial revision */ /* ********************************************************************* */ /* 100 Hz High Pass Filter */ /* Jan 92 - corrected typo (1.937148 to 1.935715), */ /* rounded coefficients to 7 places, */ /* corrected and merged gain (.97466**4), */ /* merged numerator into first two sections. */ /* Input: */ /* start, end - Range of samples to filter */ /* Input/Output: */ /* speech(end) - Speech data. */ /* Indices start through end are read and modified. */ /* This subroutine maintains local state from one call to the next. If */ /* you want to switch to using a new audio stream for this filter, or */ /* reinitialize its state for any other reason, call the ENTRY */ /* INITHP100. */ /* Subroutine */ int hp100_(real *speech, integer *start, integer *end, struct lpc10_encoder_state *st) { /* Temporary local copies of variables in lpc10_encoder_state. I've only created these because it might cause the loop below to execute a bit faster to access local variables, rather than variables in the lpc10_encoder_state structure. It is just a guess that it will be faster. */ real z11; real z21; real z12; real z22; /* System generated locals */ integer i__1; /* Local variables */ integer i__; real si, err; /* Arguments */ /* Local variables that need not be saved */ /* Local state */ /* Parameter adjustments */ if (speech) { --speech; } /* Function Body */ z11 = st->z11; z21 = st->z21; z12 = st->z12; z22 = st->z22; i__1 = *end; for (i__ = *start; i__ <= i__1; ++i__) { si = speech[i__]; err = si + z11 * 1.859076f - z21 * .8648249f; si = err - z11 * 2.f + z21; z21 = z11; z11 = err; err = si + z12 * 1.935715f - z22 * .9417004f; si = err - z12 * 2.f + z22; z22 = z12; z12 = err; speech[i__] = si * .902428f; } st->z11 = z11; st->z21 = z21; st->z12 = z12; st->z22 = z22; return 0; } /* hp100_ */ h323plus/plugins/audio/LPC_10/src/encode_.c0000644000175000017500000003267411341106232017143 0ustar markmark/* $Log: encode_.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:50 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:15 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:42 csoutheren Initial version Revision 1.2 2002/02/15 03:57:55 yurik Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.1 1996/08/19 22:32:21 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int encode_(integer *voice, integer *pitch, real *rms, real *rc, integer *ipitch, integer *irms, integer *irc); /* comlen contrl_ 12 */ #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* Common Block Declarations */ extern struct { integer order, lframe; logical corrp; } contrl_; #define contrl_1 contrl_ /* Table of constant values */ static integer c__2 = 2; /* ***************************************************************** */ /* ENCODE Version 54 */ /* $Log: encode_.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:50 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:15 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:42 csoutheren /* Initial version /* /* Revision 1.2 2002/02/15 03:57:55 yurik /* Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.1 1996/08/19 22:32:21 jaf * Initial revision * */ /* Revision 1.5 1996/03/26 19:35:50 jaf */ /* Commented out trace statements. */ /* Revision 1.4 1996/03/21 00:26:29 jaf */ /* Added the comment that this subroutine has no local state. */ /* In the last check-in, I forgot to mention that I had added comments */ /* explaining which indices of array arguments are read or written. */ /* Revision 1.3 1996/03/21 00:22:39 jaf */ /* Added comments explaining that all local arrays are effectively */ /* constants. */ /* Revision 1.2 1996/03/13 18:48:33 jaf */ /* Comments added explaining that none of the local variables of this */ /* subroutine need to be saved from one invocation to the next. */ /* Revision 1.1 1996/02/07 14:45:29 jaf */ /* Initial revision */ /* ***************************************************************** */ /* Quantize LPC parameters for transmission */ /* INPUTS: */ /* VOICE - Half frame voicing decisions */ /* Indices 1 through 2 read. */ /* PITCH - Pitch */ /* RMS - Energy */ /* RC - Reflection coefficients */ /* Indices 1 through ORDER read. */ /* CORRP - Error Correction: TRUE = yes, FALSE = none */ /* (this is defined in file control.fh) */ /* OUTPUTS: */ /* IPITCH - Coded pitch and voicing */ /* IRMS - Quantized energy */ /* IRC - Quantized reflection coefficients */ /* Indices 1 through MAX(ORDER,2) written. */ /* If CORRP is .TRUE., then indices 1 through 10 written */ /* for unvoiced frames. */ /* This subroutine has no local state. */ /* Subroutine */ int encode_(integer *voice, integer *pitch, real *rms, real * rc, integer *ipitch, integer *irms, integer *irc) { /* Initialized data */ static integer enctab[16] = { 0,7,11,12,13,10,6,1,14,9,5,2,3,4,8,15 }; static integer entau[60] = { 19,11,27,25,29,21,23,22,30,14,15,7,39,38,46, 42,43,41,45,37,53,49,51,50,54,52,60,56,58,26,90,88,92,84,86,82,83, 81,85,69,77,73,75,74,78,70,71,67,99,97,113,112,114,98,106,104,108, 100,101,76 }; static integer enadd[8] = { 1920,-768,2432,1280,3584,1536,2816,-1152 }; static real enscl[8] = { .0204f,.0167f,.0145f,.0147f,.0143f,.0135f,.0125f, .0112f }; static integer enbits[8] = { 6,5,4,4,4,4,3,3 }; static integer entab6[64] = { 0,0,0,0,0,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3, 3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,8,8,8,8,9,9, 9,10,10,11,11,12,13,14,15 }; static integer rmst[64] = { 1024,936,856,784,718,656,600,550,502,460,420, 384,352,328,294,270,246,226,206,188,172,158,144,132,120,110,102, 92,84,78,70,64,60,54,50,46,42,38,34,32,30,26,24,22,20,18,17,16,15, 14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 }; /* System generated locals */ integer i__1, i__2; /* Builtin functions */ integer pow_ii(integer *, integer *); /* Local variables */ integer idel, nbit, i__, j, i2, i3, mrk; /* $Log: encode_.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:50 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:15 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:42 csoutheren /* Initial version /* /* Revision 1.2 2002/02/15 03:57:55 yurik /* Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.1 1996/08/19 22:32:21 jaf * Initial revision * */ /* Revision 1.3 1996/03/29 22:03:47 jaf */ /* Removed definitions for any constants that were no longer used. */ /* Revision 1.2 1996/03/26 19:34:33 jaf */ /* Added comments indicating which constants are not needed in an */ /* application that uses the LPC-10 coder. */ /* Revision 1.1 1996/02/07 14:43:51 jaf */ /* Initial revision */ /* LPC Configuration parameters: */ /* Frame size, Prediction order, Pitch period */ /* Arguments */ /* $Log: encode_.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:50 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:15 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:42 csoutheren /* Initial version /* /* Revision 1.2 2002/02/15 03:57:55 yurik /* Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.1 1996/08/19 22:32:21 jaf * Initial revision * */ /* Revision 1.3 1996/03/29 22:05:55 jaf */ /* Commented out the common block variables that are not needed by the */ /* embedded version. */ /* Revision 1.2 1996/03/26 19:34:50 jaf */ /* Added comments indicating which constants are not needed in an */ /* application that uses the LPC-10 coder. */ /* Revision 1.1 1996/02/07 14:44:09 jaf */ /* Initial revision */ /* LPC Processing control variables: */ /* *** Read-only: initialized in setup */ /* Files for Speech, Parameter, and Bitstream Input & Output, */ /* and message and debug outputs. */ /* Here are the only files which use these variables: */ /* lpcsim.f setup.f trans.f error.f vqsetup.f */ /* Many files which use fdebug are not listed, since it is only used in */ /* those other files conditionally, to print trace statements. */ /* integer fsi, fso, fpi, fpo, fbi, fbo, pbin, fmsg, fdebug */ /* LPC order, Frame size, Quantization rate, Bits per frame, */ /* Error correction */ /* Subroutine SETUP is the only place where order is assigned a value, */ /* and that value is 10. It could increase efficiency 1% or so to */ /* declare order as a constant (i.e., a Fortran PARAMETER) instead of as */ /* a variable in a COMMON block, since it is used in many places in the */ /* core of the coding and decoding routines. Actually, I take that back. */ /* At least when compiling with f2c, the upper bound of DO loops is */ /* stored in a local variable before the DO loop begins, and then that is */ /* compared against on each iteration. */ /* Similarly for lframe, which is given a value of MAXFRM in SETUP. */ /* Similarly for quant, which is given a value of 2400 in SETUP. quant */ /* is used in only a few places, and never in the core coding and */ /* decoding routines, so it could be eliminated entirely. */ /* nbits is similar to quant, and is given a value of 54 in SETUP. */ /* corrp is given a value of .TRUE. in SETUP, and is only used in the */ /* subroutines ENCODE and DECODE. It doesn't affect the speed of the */ /* coder significantly whether it is .TRUE. or .FALSE., or whether it is */ /* a constant or a variable, since it is only examined once per frame. */ /* Leaving it as a variable that is set to .TRUE. seems like a good */ /* idea, since it does enable some error-correction capability for */ /* unvoiced frames, with no change in the coding rate, and no noticeable */ /* quality difference in the decoded speech. */ /* integer quant, nbits */ /* *** Read/write: variables for debugging, not needed for LPC algorithm */ /* Current frame, Unstable frames, Output clip count, Max onset buffer, */ /* Debug listing detail level, Line count on listing page */ /* nframe is not needed for an embedded LPC10 at all. */ /* nunsfm is initialized to 0 in SETUP, and incremented in subroutine */ /* ERROR, which is only called from RCCHK. When LPC10 is embedded into */ /* an application, I would recommend removing the call to ERROR in RCCHK, */ /* and remove ERROR and nunsfm completely. */ /* iclip is initialized to 0 in SETUP, and incremented in entry SWRITE in */ /* sread.f. When LPC10 is embedded into an application, one might want */ /* to cause it to be incremented in a routine that takes the output of */ /* SYNTHS and sends it to an audio device. It could be optionally */ /* displayed, for those that might want to know what it is. */ /* maxosp is never initialized to 0 in SETUP, although it probably should */ /* be, and it is updated in subroutine ANALYS. I doubt that its value */ /* would be of much interest to an application in which LPC10 is */ /* embedded. */ /* listl and lincnt are not needed for an embedded LPC10 at all. */ /* integer nframe, nunsfm, iclip, maxosp, listl, lincnt */ /* common /contrl/ fsi, fso, fpi, fpo, fbi, fbo, pbin, fmsg, fdebug */ /* common /contrl/ quant, nbits */ /* common /contrl/ nframe, nunsfm, iclip, maxosp, listl, lincnt */ /* Parameters/constants */ /* These arrays are not Fortran PARAMETER's, but they are defined */ /* by DATA statements below, and their contents are never altered. */ /* Local variables that need not be saved */ /* Parameter adjustments */ --irc; --rc; --voice; /* Function Body */ /* Scale RMS and RC's to integers */ *irms = (integer)*rms; i__1 = contrl_1.order; for (i__ = 1; i__ <= i__1; ++i__) { irc[i__] = (integer)(rc[i__] * 32768.f); } /* IF(LISTL.GE.3)WRITE(FDEBUG,800)VOICE,PITCH,IRMS,(IRC(I),I=1,ORDER) */ /* 800 FORMAT(1X,/,' <>',T32,2I3,I6,I5,T50,10I8) */ /* Encode pitch and voicing */ if (voice[1] != 0 && voice[2] != 0) { *ipitch = entau[*pitch - 1]; } else { if (contrl_1.corrp) { *ipitch = 0; if (voice[1] != voice[2]) { *ipitch = 127; } } else { *ipitch = (voice[1] << 1) + voice[2]; } } /* Encode RMS by binary table search */ j = 32; idel = 16; *irms = min(*irms,1023); while(idel > 0) { if (*irms > rmst[j - 1]) { j -= idel; } if (*irms < rmst[j - 1]) { j += idel; } idel /= 2; } if (*irms > rmst[j - 1]) { --j; } *irms = 31 - j / 2; /* Encode RC(1) and (2) as log-area-ratios */ for (i__ = 1; i__ <= 2; ++i__) { i2 = irc[i__]; mrk = 0; if (i2 < 0) { i2 = -i2; mrk = 1; } i2 /= 512; i2 = min(i2,63); i2 = entab6[i2]; if (mrk != 0) { i2 = -i2; } irc[i__] = i2; } /* Encode RC(3) - (10) linearly, remove bias then scale */ i__1 = contrl_1.order; for (i__ = 3; i__ <= i__1; ++i__) { i2 = irc[i__] / 2; i2 = (integer)((i2 + enadd[contrl_1.order + 1 - i__ - 1]) * enscl[ contrl_1.order + 1 - i__ - 1]); /* Computing MIN */ i__2 = max(i2,-127); i2 = min(i__2,127); nbit = enbits[contrl_1.order + 1 - i__ - 1]; i3 = 0; if (i2 < 0) { i3 = -1; } i2 /= pow_ii(&c__2, &nbit); if (i3 == -1) { --i2; } irc[i__] = i2; } /* Protect the most significant bits of the most */ /* important parameters during non-voiced frames. */ /* RC(1) - RC(4) are protected using 20 parity bits */ /* replacing RC(5) - RC(10). */ if (contrl_1.corrp) { if (*ipitch == 0 || *ipitch == 127) { irc[5] = enctab[(irc[1] & 30) / 2]; irc[6] = enctab[(irc[2] & 30) / 2]; irc[7] = enctab[(irc[3] & 30) / 2]; irc[8] = enctab[(*irms & 30) / 2]; irc[9] = enctab[(irc[4] & 30) / 2] / 2; irc[10] = enctab[(irc[4] & 30) / 2] & 1; } } /* IF(LISTL.GE.3)WRITE(FDEBUG,801)VOICE,IPITCH,IRMS,(IRC(J),J=1,ORDER) */ /* 801 FORMAT(1X,'<>',T32,2I3,I6,I5,T50,10I8) */ return 0; } /* encode_ */ h323plus/plugins/audio/LPC_10/src/makefile.dos0000644000175000017500000000747411341106232017667 0ustar markmark# # Makefile for LPC10 coder library (MSDOS -- Microsoft C) # CC = cl OBJS_EXT = CFLAGS = /nologo /W2 /I.. /AL /Ox /Gs ANALYS_DEP = f2c.h BSYNZ_DEP = f2c.h CHANWR_DEP = f2c.h DCBIAS_DEP = f2c.h DECODE_DEP = f2c.h DEEMP_DEP = f2c.h DIFMAG_DEP = f2c.h DYPTRK_DEP = f2c.h ENCODE_DEP = f2c.h ENERGY_DEP = f2c.h F2CLIB_DEP = f2c.h HAM84_DEP = f2c.h HP100_DEP = f2c.h INVERT_DEP = f2c.h IRC2PC_DEP = f2c.h IVFILT_DEP = f2c.h LPCDEC_DEP = f2c.h LPCENC_DEP = f2c.h LPCINI_DEP = f2c.h LPFILT_DEP = f2c.h MEDIAN_DEP = f2c.h MLOAD_DEP = f2c.h ONSET_DEP = f2c.h PITSYN_DEP = f2c.h PLACEA_DEP = f2c.h PLACEV_DEP = f2c.h PREEMP_DEP = f2c.h PREPRO_DEP = f2c.h RANDOM_DEP = f2c.h RCCHK_DEP = f2c.h SYNTHS_DEP = f2c.h TBDM_DEP = f2c.h VOICIN_DEP = f2c.h VPARMS_DEP = f2c.h all: LPC10.LIB ANALYS.OBJ: ANALYS.C $(ANALYS_DEP) $(CC) $(CFLAGS) /c ANALYS.C BSYNZ.OBJ: BSYNZ.C $(BSYNZ_DEP) $(CC) $(CFLAGS) /c BSYNZ.C CHANWR.OBJ: CHANWR.C $(CHANWR_DEP) $(CC) $(CFLAGS) /c CHANWR.C DCBIAS.OBJ: DCBIAS.C $(DCBIAS_DEP) $(CC) $(CFLAGS) /c DCBIAS.C DECODE.OBJ: DECODE.C $(DECODE_DEP) $(CC) $(CFLAGS) /c DECODE.C DEEMP.OBJ: DEEMP.C $(DEEMP_DEP) $(CC) $(CFLAGS) /c DEEMP.C DIFMAG.OBJ: DIFMAG.C $(DIFMAG_DEP) $(CC) $(CFLAGS) /c DIFMAG.C DYPTRK.OBJ: DYPTRK.C $(DYPTRK_DEP) $(CC) $(CFLAGS) /c DYPTRK.C ENCODE.OBJ: ENCODE.C $(ENCODE_DEP) $(CC) $(CFLAGS) /c ENCODE.C ENERGY.OBJ: ENERGY.C $(ENERGY_DEP) $(CC) $(CFLAGS) /c ENERGY.C F2CLIB.OBJ: F2CLIB.C $(F2CLIB_DEP) $(CC) $(CFLAGS) /c F2CLIB.C HAM84.OBJ: HAM84.C $(HAM84_DEP) $(CC) $(CFLAGS) /c HAM84.C HP100.OBJ: HP100.C $(HP100_DEP) $(CC) $(CFLAGS) /c HP100.C INVERT.OBJ: INVERT.C $(INVERT_DEP) $(CC) $(CFLAGS) /c INVERT.C IRC2PC.OBJ: IRC2PC.C $(IRC2PC_DEP) $(CC) $(CFLAGS) /c IRC2PC.C IVFILT.OBJ: IVFILT.C $(IVFILT_DEP) $(CC) $(CFLAGS) /c IVFILT.C LPCDEC.OBJ: LPCDEC.C $(LPCDEC_DEP) $(CC) $(CFLAGS) /c LPCDEC.C LPCENC.OBJ: LPCENC.C $(LPCENC_DEP) $(CC) $(CFLAGS) /c LPCENC.C LPCINI.OBJ: LPCINI.C $(LPCINI_DEP) $(CC) $(CFLAGS) /c LPCINI.C LPFILT.OBJ: LPFILT.C $(LPFILT_DEP) $(CC) $(CFLAGS) /c LPFILT.C MEDIAN.OBJ: MEDIAN.C $(MEDIAN_DEP) $(CC) $(CFLAGS) /c MEDIAN.C MLOAD.OBJ: MLOAD.C $(MLOAD_DEP) $(CC) $(CFLAGS) /c MLOAD.C ONSET.OBJ: ONSET.C $(ONSET_DEP) $(CC) $(CFLAGS) /c ONSET.C PITSYN.OBJ: PITSYN.C $(PITSYN_DEP) $(CC) $(CFLAGS) /c PITSYN.C PLACEA.OBJ: PLACEA.C $(PLACEA_DEP) $(CC) $(CFLAGS) /c PLACEA.C PLACEV.OBJ: PLACEV.C $(PLACEV_DEP) $(CC) $(CFLAGS) /c PLACEV.C PREEMP.OBJ: PREEMP.C $(PREEMP_DEP) $(CC) $(CFLAGS) /c PREEMP.C PREPRO.OBJ: PREPRO.C $(PREPRO_DEP) $(CC) $(CFLAGS) /c PREPRO.C RANDOM.OBJ: RANDOM.C $(RANDOM_DEP) $(CC) $(CFLAGS) /c RANDOM.C RCCHK.OBJ: RCCHK.C $(RCCHK_DEP) $(CC) $(CFLAGS) /c RCCHK.C SYNTHS.OBJ: SYNTHS.C $(SYNTHS_DEP) $(CC) $(CFLAGS) /c SYNTHS.C TBDM.OBJ: TBDM.C $(TBDM_DEP) $(CC) $(CFLAGS) /c TBDM.C VOICIN.OBJ: VOICIN.C $(VOICIN_DEP) $(CC) $(CFLAGS) /c VOICIN.C VPARMS.OBJ: VPARMS.C $(VPARMS_DEP) $(CC) $(CFLAGS) /c VPARMS.C LPC10.LIB:: ANALYS.OBJ BSYNZ.OBJ CHANWR.OBJ DCBIAS.OBJ DECODE.OBJ \ DEEMP.OBJ DIFMAG.OBJ DYPTRK.OBJ ENCODE.OBJ ENERGY.OBJ F2CLIB.OBJ HAM84.OBJ HP100.OBJ \ INVERT.OBJ IRC2PC.OBJ IVFILT.OBJ LPCDEC.OBJ LPCENC.OBJ LPCINI.OBJ LPFILT.OBJ MEDIAN.OBJ \ MLOAD.OBJ ONSET.OBJ PITSYN.OBJ PLACEA.OBJ PLACEV.OBJ PREEMP.OBJ PREPRO.OBJ RANDOM.OBJ \ RCCHK.OBJ SYNTHS.OBJ TBDM.OBJ VOICIN.OBJ VPARMS.OBJ $(OBJS_EXT) echo >NUL @<ipo); exc = &(st->exc[0]); exc2 = &(st->exc2[0]); lpi1 = &(st->lpi1); lpi2 = &(st->lpi2); lpi3 = &(st->lpi3); hpi1 = &(st->hpi1); hpi2 = &(st->hpi2); hpi3 = &(st->hpi3); rmso = &(st->rmso_bsynz); /* MAXPIT+MAXORD=166 */ /* Calculate history scale factor XY and scale filter state */ /* Computing MIN */ r__1 = *rmso / (*rms + 1e-6f); xy = min(r__1,8.f); *rmso = *rms; i__1 = contrl_1.order; for (i__ = 1; i__ <= i__1; ++i__) { exc2[i__ - 1] = exc2[*ipo + i__ - 1] * xy; } *ipo = *ip; if (*iv == 0) { /* Generate white noise for unvoiced */ i__1 = *ip; for (i__ = 1; i__ <= i__1; ++i__) { exc[contrl_1.order + i__ - 1] = (real) (random_(st) / 64); } /* Impulse doublet excitation for plosives */ /* (RANDOM()+32768) is in the range 0 to 2**16-1. Therefore the */ /* following expression should be evaluated using integers with at */ /* least 32 bits (16 isn't enough), and PX should be in the rang e */ /* ORDER+1+0 through ORDER+1+(IP-2) .EQ. ORDER+IP-1. */ px = (random_(st) + 32768) * (*ip - 1) / 65536 + contrl_1.order + 1; r__1 = *ratio / 4 * 1.f; pulse = r__1 * 342; if (pulse > 2e3f) { pulse = 2e3f; } exc[px - 1] += pulse; exc[px] -= pulse; /* Load voiced excitation */ } else { sscale = (real)sqrt((real) (*ip)) / 6.928f; i__1 = *ip; for (i__ = 1; i__ <= i__1; ++i__) { exc[contrl_1.order + i__ - 1] = 0.f; if (i__ <= 25) { exc[contrl_1.order + i__ - 1] = sscale * kexc[i__ - 1]; } lpi0 = exc[contrl_1.order + i__ - 1]; r__2 = exc[contrl_1.order + i__ - 1] * .125f + *lpi1 * .75f; r__1 = r__2 + *lpi2 * .125f; exc[contrl_1.order + i__ - 1] = r__1 + *lpi3 * 0.f; *lpi3 = *lpi2; *lpi2 = *lpi1; *lpi1 = lpi0; } i__1 = *ip; for (i__ = 1; i__ <= i__1; ++i__) { noise[contrl_1.order + i__ - 1] = random_(st) * 1.f / 64; hpi0 = noise[contrl_1.order + i__ - 1]; r__2 = noise[contrl_1.order + i__ - 1] * -.125f + *hpi1 * .25f; r__1 = r__2 + *hpi2 * -.125f; noise[contrl_1.order + i__ - 1] = r__1 + *hpi3 * 0.f; *hpi3 = *hpi2; *hpi2 = *hpi1; *hpi1 = hpi0; } i__1 = *ip; for (i__ = 1; i__ <= i__1; ++i__) { exc[contrl_1.order + i__ - 1] += noise[contrl_1.order + i__ - 1]; } } /* Synthesis filters: */ /* Modify the excitation with all-zero filter 1 + G*SUM */ xssq = 0.f; i__1 = *ip; for (i__ = 1; i__ <= i__1; ++i__) { k = contrl_1.order + i__; sum = 0.f; i__2 = contrl_1.order; for (j = 1; j <= i__2; ++j) { sum += coef[j] * exc[k - j - 1]; } sum *= *g2pass; exc2[k - 1] = sum + exc[k - 1]; } /* Synthesize using the all pole filter 1 / (1 - SUM) */ i__1 = *ip; for (i__ = 1; i__ <= i__1; ++i__) { k = contrl_1.order + i__; sum = 0.f; i__2 = contrl_1.order; for (j = 1; j <= i__2; ++j) { sum += coef[j] * exc2[k - j - 1]; } exc2[k - 1] = sum + exc2[k - 1]; xssq += exc2[k - 1] * exc2[k - 1]; } /* Save filter history for next epoch */ i__1 = contrl_1.order; for (i__ = 1; i__ <= i__1; ++i__) { exc[i__ - 1] = exc[*ip + i__ - 1]; exc2[i__ - 1] = exc2[*ip + i__ - 1]; } /* Apply gain to match RMS */ r__1 = *rms * *rms; ssq = r__1 * *ip; gain = (real)sqrt(ssq / xssq); i__1 = *ip; for (i__ = 1; i__ <= i__1; ++i__) { sout[i__] = gain * exc2[contrl_1.order + i__ - 1]; } return 0; } /* bsynz_ */ h323plus/plugins/audio/LPC_10/src/deemp.c0000644000175000017500000001077711341106232016641 0ustar markmark/* $Log: deemp.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:49 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:14 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:42 csoutheren Initial version Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.2 1996/08/20 20:23:46 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_decoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_decoder_state(). * * Revision 1.1 1996/08/19 22:32:34 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int deemp_(real *x, integer *n, struct lpc10_decoder_state *st); #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* ***************************************************************** */ /* DEEMP Version 48 */ /* $Log: deemp.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:49 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:14 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:42 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:23:46 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_decoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_decoder_state(). * * Revision 1.1 1996/08/19 22:32:34 jaf * Initial revision * */ /* Revision 1.3 1996/03/20 15:54:37 jaf */ /* Added comments about which indices of array arguments are read or */ /* written. */ /* Added entry INITDEEMP to reinitialize the local state variables, if */ /* desired. */ /* Revision 1.2 1996/03/14 22:11:13 jaf */ /* Comments added explaining which of the local variables of this */ /* subroutine need to be saved from one invocation to the next, and which */ /* do not. */ /* Revision 1.1 1996/02/07 14:44:53 jaf */ /* Initial revision */ /* ***************************************************************** */ /* De-Emphasize output speech with 1 / ( 1 - .75z**-1 ) */ /* cascaded with 200 Hz high pass filter */ /* ( 1 - 1.9998z**-1 + z**-2 ) / ( 1 - 1.75z**-1 + .78z**-2 ) */ /* WARNING! The coefficients above may be out of date with the code */ /* below. Either that, or some kind of transformation was performed */ /* on the coefficients above to create the code below. */ /* Input: */ /* N - Number of samples */ /* Input/Output: */ /* X - Speech */ /* Indices 1 through N are read before being written. */ /* This subroutine maintains local state from one call to the next. If */ /* you want to switch to using a new audio stream for this filter, or */ /* reinitialize its state for any other reason, call the ENTRY */ /* INITDEEMP. */ /* Subroutine */ int deemp_(real *x, integer *n, struct lpc10_decoder_state *st) { /* Initialized data */ real *dei1; real *dei2; real *deo1; real *deo2; real *deo3; /* System generated locals */ integer i__1; real r__1; /* Local variables */ integer k; real dei0; /* Arguments */ /* Local variables that need not be saved */ /* Local state */ /* All of the locals saved below were not given explicit initial */ /* values in the original code. I think 0 is a safe choice. */ /* Parameter adjustments */ if (x) { --x; } /* Function Body */ dei1 = &(st->dei1); dei2 = &(st->dei2); deo1 = &(st->deo1); deo2 = &(st->deo2); deo3 = &(st->deo3); i__1 = *n; for (k = 1; k <= i__1; ++k) { dei0 = x[k]; r__1 = x[k] - *dei1 * 1.9998f + *dei2; x[k] = r__1 + *deo1 * 2.5f - *deo2 * 2.0925f + *deo3 * .585f; *dei2 = *dei1; *dei1 = dei0; *deo3 = *deo2; *deo2 = *deo1; *deo1 = x[k]; } return 0; } /* deemp_ */ h323plus/plugins/audio/LPC_10/src/energy.c0000644000175000017500000000622611341106232017032 0ustar markmark/* $Log: energy.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:50 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:15 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:42 csoutheren Initial version Revision 1.2 2002/02/15 03:57:55 yurik Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.1 1996/08/19 22:32:17 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int energy_(integer *len, real *speech, real *rms); #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* ********************************************************************* */ /* ENERGY Version 50 */ /* $Log: energy.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:50 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:15 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:42 csoutheren /* Initial version /* /* Revision 1.2 2002/02/15 03:57:55 yurik /* Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.1 1996/08/19 22:32:17 jaf * Initial revision * */ /* Revision 1.3 1996/03/18 21:17:41 jaf */ /* Just added a few comments about which array indices of the arguments */ /* are used, and mentioning that this subroutine has no local state. */ /* Revision 1.2 1996/03/13 16:46:02 jaf */ /* Comments added explaining that none of the local variables of this */ /* subroutine need to be saved from one invocation to the next. */ /* Revision 1.1 1996/02/07 14:45:40 jaf */ /* Initial revision */ /* ********************************************************************* */ /* Compute RMS energy. */ /* Input: */ /* LEN - Length of speech buffer */ /* SPEECH - Speech buffer */ /* Indices 1 through LEN read. */ /* Output: */ /* RMS - Root Mean Square energy */ /* This subroutine has no local state. */ /* Subroutine */ int energy_(integer *len, real *speech, real *rms) { /* System generated locals */ integer i__1; /* Builtin functions */ double sqrt(doublereal); /* Local variables */ integer i__; /* Arguments */ /* Local variables that need not be saved */ /* Parameter adjustments */ --speech; /* Function Body */ *rms = 0.f; i__1 = *len; for (i__ = 1; i__ <= i__1; ++i__) { *rms += speech[i__] * speech[i__]; } *rms = (real)sqrt(*rms / *len); return 0; } /* energy_ */ h323plus/plugins/audio/LPC_10/src/mload.c0000644000175000017500000001273611341106232016640 0ustar markmark/* $Log: mload.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:50 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:18 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:43 csoutheren Initial version Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.1 1996/08/19 22:31:25 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int mload_(integer *order, integer *awins, integer *awinf, real *speech, real *phi, real *psi); #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* ***************************************************************** */ /* MLOAD Version 48 */ /* $Log: mload.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:50 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:18 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.1 1996/08/19 22:31:25 jaf * Initial revision * */ /* Revision 1.5 1996/03/27 23:59:51 jaf */ /* Added some more accurate comments about which indices of the argument */ /* array SPEECH are read. I thought that this might be the cause of a */ /* problem I've been having, but it isn't. */ /* Revision 1.4 1996/03/26 19:16:53 jaf */ /* Commented out the code at the end that copied the lower triangular */ /* half of PHI into the upper triangular half (making the resulting */ /* matrix symmetric). The upper triangular half was never used by later */ /* code in subroutine ANALYS. */ /* Revision 1.3 1996/03/18 21:16:00 jaf */ /* Just added a few comments about which array indices of the arguments */ /* are used, and mentioning that this subroutine has no local state. */ /* Revision 1.2 1996/03/13 16:47:41 jaf */ /* Comments added explaining that none of the local variables of this */ /* subroutine need to be saved from one invocation to the next. */ /* Revision 1.1 1996/02/07 14:48:01 jaf */ /* Initial revision */ /* ***************************************************************** */ /* Load a covariance matrix. */ /* Input: */ /* ORDER - Analysis order */ /* AWINS - Analysis window start */ /* AWINF - Analysis window finish */ /* SPEECH(AWINF) - Speech buffer */ /* Indices MIN(AWINS, AWINF-(ORDER-1)) through */ /* MAX(AWINF, AWINS+(ORDER-1)) read. */ /* As long as (AWINF-AWINS) .GE. (ORDER-1), */ /* this is just indices AWINS through AWINF. */ /* Output: */ /* PHI(ORDER,ORDER) - Covariance matrix */ /* Lower triangular half and diagonal written, and read.*/ /* Upper triangular half untouched. */ /* PSI(ORDER) - Prediction vector */ /* Indices 1 through ORDER written, */ /* and most are read after that. */ /* This subroutine has no local state. */ /* Subroutine */ int mload_(integer *order, integer *awins, integer *awinf, real *speech, real *phi, real *psi) { /* System generated locals */ integer phi_dim1, phi_offset, i__1, i__2; /* Local variables */ integer c__, i__, r__, start; /* Arguments */ /* Local variables that need not be saved */ /* Load first column of triangular covariance matrix PHI */ /* Parameter adjustments */ --psi; phi_dim1 = *order; phi_offset = phi_dim1 + 1; phi -= phi_offset; --speech; /* Function Body */ start = *awins + *order; i__1 = *order; for (r__ = 1; r__ <= i__1; ++r__) { phi[r__ + phi_dim1] = 0.f; i__2 = *awinf; for (i__ = start; i__ <= i__2; ++i__) { phi[r__ + phi_dim1] += speech[i__ - 1] * speech[i__ - r__]; } } /* Load last element of vector PSI */ psi[*order] = 0.f; i__1 = *awinf; for (i__ = start; i__ <= i__1; ++i__) { psi[*order] += speech[i__] * speech[i__ - *order]; } /* End correct to get additional columns of PHI */ i__1 = *order; for (r__ = 2; r__ <= i__1; ++r__) { i__2 = r__; for (c__ = 2; c__ <= i__2; ++c__) { phi[r__ + c__ * phi_dim1] = phi[r__ - 1 + (c__ - 1) * phi_dim1] - speech[*awinf + 1 - r__] * speech[*awinf + 1 - c__] + speech[start - r__] * speech[start - c__]; } } /* End correct to get additional elements of PSI */ i__1 = *order - 1; for (c__ = 1; c__ <= i__1; ++c__) { psi[c__] = phi[c__ + 1 + phi_dim1] - speech[start - 1] * speech[start - 1 - c__] + speech[*awinf] * speech[*awinf - c__]; } /* Copy lower triangular section into upper (why bother?) */ /* I'm commenting this out, since the upper triangular half of PHI */ /* is never used by later code, unless a sufficiently high level of */ /* tracing is turned on. */ /* DO R = 1,ORDER */ /* DO C = 1,R-1 */ /* PHI(C,R) = PHI(R,C) */ /* END DO */ /* END DO */ return 0; } /* mload_ */ h323plus/plugins/audio/LPC_10/src/tbdm.c0000644000175000017500000001444311341106232016467 0ustar markmark/* $Log: tbdm.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:51 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:19 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:58 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:43 csoutheren Initial version Revision 1.2 2002/02/15 03:57:55 yurik Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.1 1996/08/19 22:30:26 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int tbdm_(real *speech, integer *lpita, integer *tau, integer *ltau, real *amdf, integer *minptr, integer *maxptr, integer *mintau); /*:ref: difmag_ 14 8 6 4 4 4 4 6 4 4 */ #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* ********************************************************************** */ /* TBDM Version 49 */ /* $Log: tbdm.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:51 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:19 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:58 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.2 2002/02/15 03:57:55 yurik /* Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.1 1996/08/19 22:30:26 jaf * Initial revision * */ /* Revision 1.3 1996/03/18 22:14:00 jaf */ /* Just added a few comments about which array indices of the arguments */ /* are used, and mentioning that this subroutine has no local state. */ /* Revision 1.2 1996/03/13 14:48:37 jaf */ /* Comments added explaining that none of the local variables of this */ /* subroutine need to be saved from one invocation to the next. */ /* Revision 1.1 1996/02/07 14:49:54 jaf */ /* Initial revision */ /* ********************************************************************* */ /*TURBO DIFMAG: Compute High Resolution Average Magnitude Difference Function */ /* Note: There are several constants in here that appear to depend on a */ /* particular TAU table. That's not a problem for the LPC10 coder, but */ /* watch out if you change the contents of TAU in the subroutine ANALYS. */ /* Input: */ /* SPEECH - Low pass filtered speech */ /* Indices 1 through MAX+LPITA-1 are read, where: */ /* MAX = (TAU(LTAU)-TAU(1))/2+1 */ /* (If TAU(1) .LT. 39, then larger indices could be read */ /* by the last call to DIFMAG below.) */ /* LPITA - Length of speech buffer */ /* TAU - Table of lags, sorted in increasing order. */ /* Indices 1 through LTAU read. */ /* LTAU - Number of lag values to compute */ /* Output: */ /* AMDF - Average Magnitude Difference for each lag in TAU */ /* Indices 1 through LTAU written, and several might then be read.*/ /* MINPTR - Index of minimum AMDF value */ /* MAXPTR - Index of maximum AMDF value within +/- 1/2 octave of min */ /* MINTAU - Lag corresponding to minimum AMDF value */ /* This subroutine has no local state. */ /* Subroutine */ int tbdm_(real *speech, integer *lpita, integer *tau, integer *ltau, real *amdf, integer *minptr, integer *maxptr, integer * mintau) { /* System generated locals */ integer i__1, i__2, i__3, i__4; /* Local variables */ real amdf2[6]; integer minp2, ltau2, maxp2, i__; extern /* Subroutine */ int difmag_(real *, integer *, integer *, integer *, integer *, real *, integer *, integer *); integer minamd, ptr, tau2[6]; /* Arguments */ /* REAL SPEECH(LPITA+TAU(LTAU)), AMDF(LTAU) */ /* Stupid TOAST doesn't understand expressions */ /* Local variables that need not be saved */ /* Local state */ /* None */ /* Compute full AMDF using log spaced lags, find coarse minimum */ /* Parameter adjustments */ --speech; --amdf; --tau; /* Function Body */ difmag_(&speech[1], lpita, &tau[1], ltau, &tau[*ltau], &amdf[1], minptr, maxptr); *mintau = tau[*minptr]; minamd = (integer)amdf[*minptr]; /* Build table containing all lags within +/- 3 of the AMDF minimum */ /* excluding all that have already been computed */ ltau2 = 0; ptr = *minptr - 2; /* Computing MAX */ i__1 = *mintau - 3; /* Computing MIN */ i__3 = *mintau + 3, i__4 = tau[*ltau] - 1; i__2 = min(i__3,i__4); for (i__ = max(i__1,41); i__ <= i__2; ++i__) { while(tau[ptr] < i__) { ++ptr; } if (tau[ptr] != i__) { ++ltau2; tau2[ltau2 - 1] = i__; } } /* Compute AMDF of the new lags, if there are any, and choose one */ /* if it is better than the coarse minimum */ if (ltau2 > 0) { difmag_(&speech[1], lpita, tau2, <au2, &tau[*ltau], amdf2, &minp2, & maxp2); if (amdf2[minp2 - 1] < (real) minamd) { *mintau = tau2[minp2 - 1]; minamd = (integer)amdf2[minp2 - 1]; } } /* Check one octave up, if there are any lags not yet computed */ if (*mintau >= 80) { i__ = *mintau / 2; if ((i__ & 1) == 0) { ltau2 = 2; tau2[0] = i__ - 1; tau2[1] = i__ + 1; } else { ltau2 = 1; tau2[0] = i__; } difmag_(&speech[1], lpita, tau2, <au2, &tau[*ltau], amdf2, &minp2, & maxp2); if (amdf2[minp2 - 1] < (real) minamd) { *mintau = tau2[minp2 - 1]; minamd = (integer)amdf2[minp2 - 1]; *minptr += -20; } } /* Force minimum of the AMDF array to the high resolution minimum */ amdf[*minptr] = (real) minamd; /* Find maximum of AMDF within 1/2 octave of minimum */ /* Computing MAX */ i__2 = *minptr - 5; *maxptr = max(i__2,1); /* Computing MIN */ i__1 = *minptr + 5; i__2 = min(i__1,*ltau); for (i__ = *maxptr + 1; i__ <= i__2; ++i__) { if (amdf[i__] > amdf[*maxptr]) { *maxptr = i__; } } return 0; } /* tbdm_ */ h323plus/plugins/audio/LPC_10/src/placea.c0000644000175000017500000002055511341106232016767 0ustar markmark/* $Log: placea.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:51 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:18 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:43 csoutheren Initial version Revision 1.2 2001/10/16 21:21:14 yurik Removed warnings on Windows CE. Submitted by Jehan Bing, jehan@bravobrava.com Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.1 1996/08/19 22:31:07 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int placea_(integer *ipitch, integer *voibuf, integer *obound, integer *af, integer *vwin, integer *awin, integer *ewin, integer *lframe, integer *maxwin); #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* *********************************************************************** */ /* PLACEA Version 48 */ /* $Log: placea.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:51 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:18 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.2 2001/10/16 21:21:14 yurik /* Removed warnings on Windows CE. Submitted by Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.1 1996/08/19 22:31:07 jaf * Initial revision * */ /* Revision 1.5 1996/03/19 20:41:55 jaf */ /* Added some conditions satisfied by the output values in EWIN. */ /* Revision 1.4 1996/03/19 20:24:17 jaf */ /* Added some conditions satisfied by the output values in AWIN. */ /* Revision 1.3 1996/03/18 21:40:04 jaf */ /* Just added a few comments about which array indices of the arguments */ /* are used, and mentioning that this subroutine has no local state. */ /* Revision 1.2 1996/03/13 16:43:09 jaf */ /* Comments added explaining that none of the local variables of this */ /* subroutine need to be saved from one invocation to the next. */ /* Revision 1.1 1996/02/07 14:48:31 jaf */ /* Initial revision */ /* *********************************************************************** */ /* Input: */ /* IPITCH */ /* VOIBUF */ /* Indices (2,AF-2), (1,AF-1), (2,AF-1), (1,AF), and (2,AF) read.*/ /* All other indices untouched. */ /* OBOUND */ /* AF */ /* VWIN */ /* Indices (1,AF) and (2,AF) read. */ /* All other indices untouched. */ /* LFRAME */ /* MAXWIN */ /* Input/Output: */ /* AWIN */ /* Index (1,AF-1) read. */ /* Indices (1,AF) and (2,AF) written, and then read. */ /* All other indices untouched. */ /* In all cases (except possibly one), the final values will */ /* satisfy the condition: AWIN(2,AF)-AWIN(1,AF)+1 = MAXWIN. */ /* In that other case, */ /* AWIN(1,AF)=VWIN(1,AF) and AWIN(2,AF)=VWIN(2,AF). */ /* Output: */ /* EWIN */ /* Indices (1,AF) and (2,AF) written. */ /* All other indices untouched. */ /* In all cases, the final values will satisfy the condition: */ /* AWIN(1,AF) .LE. EWIN(1,AF) .LE. EWIN(2,AF) .LE. AWIN(2,AF) */ /* In other words, the energy window is a sub-window of */ /* the analysis window. */ /* This subroutine has no local state. */ /* Subroutine */ int placea_(integer *ipitch, integer *voibuf, integer * obound, integer *af, integer *vwin, integer *awin, integer *ewin, integer *lframe, integer *maxwin) { /* System generated locals */ real r__1; /* Builtin functions */ integer i_nint(real *); /* Local variables */ logical allv, winv; integer i__, j, k, l, hrange; logical ephase; integer lrange; /* Arguments */ /* Local variables that need not be saved */ /* Parameter adjustments */ ewin -= 3; awin -= 3; vwin -= 3; --voibuf; /* Function Body */ lrange = (*af - 2) * *lframe + 1; hrange = *af * *lframe; /* Place the Analysis window based on the voicing window */ /* placement, onsets, tentative voicing decision, and pitch. */ /* Case 1: Sustained Voiced Speech */ /* If the five most recent voicing decisions are */ /* voiced, then the window is placed phase-synchronously with the */ /* previous window, as close to the present voicing window if possible. */ /* If onsets bound the voicing window, then preference is given to */ /* a phase-synchronous placement which does not overlap these onsets. */ /* Case 2: Voiced Transition */ /* If at least one voicing decision in AF is voicied, and there are no */ /* onsets, then the window is placed as in case 1. */ /* Case 3: Unvoiced Speech or Onsets */ /* If both voicing decisions in AF are unvoiced, or there are onsets, */ /* then the window is placed coincident with the voicing window. */ /* Note: During phase-synchronous placement of windows, the length */ /* is not altered from MAXWIN, since this would defeat the purpose */ /* of phase-synchronous placement. */ /* Check for case 1 and case 2 */ allv = voibuf[((*af - 2) << 1) + 2] == 1; allv = allv && voibuf[((*af - 1) << 1) + 1] == 1; allv = allv && voibuf[((*af - 1) << 1) + 2] == 1; allv = allv && voibuf[(*af << 1) + 1] == 1; allv = allv && voibuf[(*af << 1) + 2] == 1; winv = voibuf[(*af << 1) + 1] == 1 || voibuf[(*af << 1) + 2] == 1; if (allv || winv && *obound == 0) { /* APHASE: Phase synchronous window placement. */ /* Get minimum lower index of the window. */ i__ = (lrange + *ipitch - 1 - awin[((*af - 1) << 1) + 1]) / *ipitch; i__ *= *ipitch; i__ += awin[((*af - 1) << 1) + 1]; /* L = the actual length of this frame's analysis window. */ l = *maxwin; /* Calculate the location where a perfectly centered window would star t. */ k = (vwin[(*af << 1) + 1] + vwin[(*af << 1) + 2] + 1 - l) / 2; /* Choose the actual location to be the pitch multiple closest to this . */ r__1 = (real) (k - i__) / *ipitch; awin[(*af << 1) + 1] = i__ + i_nint(&r__1) * *ipitch; awin[(*af << 1) + 2] = awin[(*af << 1) + 1] + l - 1; /* If there is an onset bounding the right of the voicing window and t he */ /* analysis window overlaps that, then move the analysis window backwa rd */ /* to avoid this onset. */ if (*obound >= 2 && awin[(*af << 1) + 2] > vwin[(*af << 1) + 2]) { awin[(*af << 1) + 1] -= *ipitch; awin[(*af << 1) + 2] -= *ipitch; } /* Similarly for the left of the voicing window. */ if ((*obound == 1 || *obound == 3) && awin[(*af << 1) + 1] < vwin[(* af << 1) + 1]) { awin[(*af << 1) + 1] += *ipitch; awin[(*af << 1) + 2] += *ipitch; } /* If this placement puts the analysis window above HRANGE, then */ /* move it backward an integer number of pitch periods. */ while(awin[(*af << 1) + 2] > hrange) { awin[(*af << 1) + 1] -= *ipitch; awin[(*af << 1) + 2] -= *ipitch; } /* Similarly if the placement puts the analysis window below LRANGE. */ while(awin[(*af << 1) + 1] < lrange) { awin[(*af << 1) + 1] += *ipitch; awin[(*af << 1) + 2] += *ipitch; } /* Make Energy window be phase-synchronous. */ ephase = TRUE_; /* Case 3 */ } else { awin[(*af << 1) + 1] = vwin[(*af << 1) + 1]; awin[(*af << 1) + 2] = vwin[(*af << 1) + 2]; ephase = FALSE_; } /* RMS is computed over an integer number of pitch periods in the analysis */ /*window. When it is not placed phase-synchronously, it is placed as clos e*/ /* as possible to onsets. */ j = (awin[(*af << 1) + 2] - awin[(*af << 1) + 1] + 1) / *ipitch * *ipitch; if (j == 0 || ! winv) { ewin[(*af << 1) + 1] = vwin[(*af << 1) + 1]; ewin[(*af << 1) + 2] = vwin[(*af << 1) + 2]; } else if (! ephase && *obound == 2) { ewin[(*af << 1) + 1] = awin[(*af << 1) + 2] - j + 1; ewin[(*af << 1) + 2] = awin[(*af << 1) + 2]; } else { ewin[(*af << 1) + 1] = awin[(*af << 1) + 1]; ewin[(*af << 1) + 2] = awin[(*af << 1) + 1] + j - 1; } return 0; } /* placea_ */ h323plus/plugins/audio/LPC_10/src/prepro.c0000644000175000017500000000716011341106232017046 0ustar markmark/* $Log: prepro.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:51 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:19 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:58 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:43 csoutheren Initial version Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.2 1996/08/20 20:40:51 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Revision 1.1 1996/08/19 22:30:54 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int prepro_(real *speech, integer *length, struct lpc10_encoder_state *st) /*:ref: hp100_ 14 3 6 4 4 */ /*:ref: inithp100_ 14 0 */ #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* Table of constant values */ static integer c__1 = 1; /* ********************************************************************* */ /* PREPRO Version 48 */ /* $Log: prepro.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:51 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:19 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:58 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:40:51 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Revision 1.1 1996/08/19 22:30:54 jaf * Initial revision * */ /* Revision 1.3 1996/03/14 23:22:56 jaf */ /* Added comments about when INITPREPRO should be used. */ /* Revision 1.2 1996/03/14 23:09:27 jaf */ /* Added an entry named INITPREPRO that initializes the local state of */ /* this subroutine, and those it calls (if any). */ /* Revision 1.1 1996/02/07 14:48:54 jaf */ /* Initial revision */ /* ********************************************************************* */ /* Pre-process input speech: */ /* Inputs: */ /* LENGTH - Number of SPEECH samples */ /* Input/Output: */ /* SPEECH(LENGTH) - Speech data. */ /* Indices 1 through LENGTH are read and modified. */ /* This subroutine has no local state maintained from one call to the */ /* next, but HP100 does. If you want to switch to using a new audio */ /* stream for this filter, or reinitialize its state for any other */ /* reason, call the ENTRY INITPREPRO. */ /* Subroutine */ int prepro_(real *speech, integer *length, struct lpc10_encoder_state *st) { extern /* Subroutine */ int hp100_(real *, integer *, integer *, struct lpc10_encoder_state *); /* Arguments */ /* High Pass Filter at 100 Hz */ /* Parameter adjustments */ if (speech) { --speech; } /* Function Body */ hp100_(&speech[1], &c__1, length, st); return 0; } /* prepro_ */ h323plus/plugins/audio/LPC_10/src/placev.c0000644000175000017500000002165011341106232017011 0ustar markmark/* $Log: placev.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:51 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:18 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:43 csoutheren Initial version Revision 1.2 2001/10/16 21:21:14 yurik Removed warnings on Windows CE. Submitted by Jehan Bing, jehan@bravobrava.com Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.1 1996/08/19 22:31:02 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int placev_(integer *osbuf, integer *osptr, integer *oslen, integer *obound, integer *vwin, integer *af, integer *lframe, integer *minwin, integer *maxwin, integer *dvwinl, integer *dvwinh); #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* ****************************************************************** */ /* PLACEV Version 48 */ /* $Log: placev.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:51 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:18 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:43 csoutheren /* Initial version /* /* Revision 1.2 2001/10/16 21:21:14 yurik /* Removed warnings on Windows CE. Submitted by Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.1 1996/08/19 22:31:02 jaf * Initial revision * */ /* Revision 1.6 1996/03/19 20:42:19 jaf */ /* Added some conditions satisfied by the output values in VWIN. */ /* Revision 1.5 1996/03/19 18:37:56 jaf */ /* Strengthened the specification of which indices of VWIN are read and */ /* written. */ /* Revision 1.4 1996/03/15 16:38:33 jaf */ /* One tiny comment added. */ /* Revision 1.3 1996/03/15 16:36:13 jaf */ /* Added comments giving In/Out status of arguments. */ /* Revision 1.2 1996/03/12 23:56:01 jaf */ /* Comments added explaining that none of the local variables of this */ /* subroutine need to be saved from one invocation to the next. */ /* Revision 1.1 1996/02/07 14:48:39 jaf */ /* Initial revision */ /* ****************************************************************** */ /* Input: */ /* OSBUF Buffer which holds sorted indexes of onsets */ /* I believe that only indices 1 through OSPTR-1 can be read. */ /* OSLEN */ /* OSPTR Free pointer into OSBUF */ /* AF */ /* LFRAME */ /* MINWIN */ /* MAXWIN */ /* DVWINL */ /* DVWINH (This argument is never used. Should it be?) */ /* Input/Output: */ /* VWIN Buffer of Voicing Window Positions (Modified) */ /* Index (2,AF-1) is read. */ /* Indices (1,AF) and (2,AF) are written, */ /* and then possibly read. */ /* All other indices are unused. */ /* In all cases, the final values will satsify the condition:*/ /* VWIN(2,AF)-VWIN(1,AF)+1 .LE. MAXWIN */ /* I'm not certain yet, but they may also satisfy: */ /* MINWIN .LE. VWIN(2,AF)-VWIN(1,AF)+1 */ /* Output: */ /* OBOUND This variable is set by this procedure and used */ /* in placing analysis windows (PLACEA). Bit 1 */ /* indicates whether an onset bounds the left side */ /* of the voicing window, and bit 2 indicates whether */ /* an onset bounds the right side of the voicing window. */ /* This subroutine has no local state. */ /* Subroutine */ int placev_(integer *osbuf, integer *osptr, integer *oslen, integer *obound, integer *vwin, integer *af, integer *lframe, integer *minwin, integer *maxwin, integer *dvwinl, integer *dvwinh) { /* System generated locals */ integer i__1, i__2; /* Local variables */ logical crit; integer i__, q, osptr1, hrange, lrange; /* Arguments */ /* Local variables that need not be saved */ /* Variables */ /* LRANGE, HRANGE Range in which window is placed */ /* OSPTR1 OSPTR excluding samples in 3F */ /* Local state */ /* None */ /* Voicing Window Placement */ /* __________________ __________________ ______________ */ /* | | | */ /* | 1F | 2F | 3F ... */ /* |__________________|__________________|______________ */ /* Previous | */ /* Window | */ /* ...________| */ /* | | */ /* ------>| This window's placement range |<------ */ /* | | */ /* There are three cases. Note that these are different from those */ /* given in the LPC-10e phase 1 report. */ /* 1. If there are no onsets in this range, then the voicing window */ /* is centered in the pitch window. If such a placement is not within */ /* the window's placement range, then the window is placed in the left- */ /* most portion of the placement range. Its length is always MAXWIN. */ /* 2. If the first onset is in 2F and there is sufficient room to place */ /* the window immediately before this onset, then the window is placed */ /* there, and its length is set to the maximum possible under these */ /* constraints. */ /* "Critical Region Exception": If there is another onset in 2F */ /* such that a window can be placed between the two onsets, the */ /* window is placed there (ie, as in case 3). */ /* 3. Otherwise, the window is placed immediately after the onset. The */ /* window's length */ /* is the longest length that can fit in the range under these constraint s,*/ /* except that the window may be shortened even further to avoid overlapp ing*/ /* other onsets in the placement range. In any case, the window's length */ /* is at least MINWIN. */ /* Note that the values of MINWIN and LFRAME must be chosen such */ /* that case 2 = false implies case 3 = true. This means that */ /* MINWIN <= LFRAME/2. If this were not the case, then a fourth case */ /* would have to be added for when the window cannot fit either before */ /* or after the onset. */ /* Note also that onsets which weren't in 2F last time may be in 1F this */ /* time, due to the filter delays in computing onsets. The result is tha t*/ /* occasionally a voicing window will overlap that onset. The only way */ /* to circumvent this problem is to add more delay in processing input */ /* speech. In the trade-off between delay and window-placement, window */ /* placement lost. */ /* Compute the placement range */ /* Parameter adjustments */ --osbuf; vwin -= 3; /* Function Body */ /* Computing MAX */ i__1 = vwin[((*af - 1) << 1) + 2] + 1, i__2 = (*af - 2) * *lframe + 1; lrange = max(i__1,i__2); hrange = *af * *lframe; /* Compute OSPTR1, so the following code only looks at relevant onsets. */ for (osptr1 = *osptr - 1; osptr1 >= 1; --osptr1) { if (osbuf[osptr1] <= hrange) { goto L90; } } L90: ++osptr1; /* Check for case 1 first (fast case): */ if (osptr1 <= 1 || osbuf[osptr1 - 1] < lrange) { /* Computing MAX */ i__1 = vwin[((*af - 1) << 1) + 2] + 1; vwin[(*af << 1) + 1] = max(i__1,*dvwinl); vwin[(*af << 1) + 2] = vwin[(*af << 1) + 1] + *maxwin - 1; *obound = 0; } else { /* Search backward in OSBUF for first onset in range. */ /* This code relies on the above check being performed first. */ for (q = osptr1 - 1; q >= 1; --q) { if (osbuf[q] < lrange) { goto L100; } } L100: ++q; /* Check for case 2 (placement before onset): */ /* Check for critical region exception: */ i__1 = osptr1 - 1; for (i__ = q + 1; i__ <= i__1; ++i__) { if (osbuf[i__] - osbuf[q] >= *minwin) { crit = TRUE_; goto L105; } } crit = FALSE_; L105: /* Computing MAX */ i__1 = (*af - 1) * *lframe, i__2 = lrange + *minwin - 1; if (! crit && osbuf[q] > max(i__1,i__2)) { vwin[(*af << 1) + 2] = osbuf[q] - 1; /* Computing MAX */ i__1 = lrange, i__2 = vwin[(*af << 1) + 2] - *maxwin + 1; vwin[(*af << 1) + 1] = max(i__1,i__2); *obound = 2; /* Case 3 (placement after onset) */ } else { vwin[(*af << 1) + 1] = osbuf[q]; L110: ++q; if (q >= osptr1) { goto L120; } if (osbuf[q] > vwin[(*af << 1) + 1] + *maxwin) { goto L120; } if (osbuf[q] < vwin[(*af << 1) + 1] + *minwin) { goto L110; } vwin[(*af << 1) + 2] = osbuf[q] - 1; *obound = 3; return 0; L120: /* Computing MIN */ i__1 = vwin[(*af << 1) + 1] + *maxwin - 1; vwin[(*af << 1) + 2] = min(i__1,hrange); *obound = 1; } } return 0; } /* placev_ */ h323plus/plugins/audio/LPC_10/src/analys.c0000644000175000017500000006156411341106232017036 0ustar markmark/* $Log: analys.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:49 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:13 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:42 csoutheren Initial version Revision 1.2 2002/02/15 03:57:55 yurik Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.2 1996/08/20 20:16:01 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Revision 1.1 1996/08/19 22:29:08 jaf * Initial revision * */ #ifdef P_R_O_T_O_T_Y_P_E_S extern int analys_(real *speech, integer *voice, integer *pitch, real *rms, real *rc, struct lpc10_encoder_state *st); /* comlen contrl_ 12 */ /*:ref: preemp_ 14 5 6 6 4 6 6 */ /*:ref: onset_ 14 7 6 4 4 4 4 4 4 */ /*:ref: placev_ 14 11 4 4 4 4 4 4 4 4 4 4 4 */ /*:ref: lpfilt_ 14 4 6 6 4 4 */ /*:ref: ivfilt_ 14 5 6 6 4 4 6 */ /*:ref: tbdm_ 14 8 6 4 4 4 6 4 4 4 */ /*:ref: voicin_ 14 12 4 6 6 4 4 6 6 4 6 4 4 4 */ /*:ref: dyptrk_ 14 6 6 4 4 4 4 4 */ /*:ref: placea_ 14 9 4 4 4 4 4 4 4 4 4 */ /*:ref: dcbias_ 14 3 4 6 6 */ /*:ref: energy_ 14 3 4 6 6 */ /*:ref: mload_ 14 6 4 4 4 6 6 6 */ /*:ref: invert_ 14 4 4 6 6 6 */ /*:ref: rcchk_ 14 3 4 6 6 */ /*:ref: initonset_ 14 0 */ /*:ref: initvoicin_ 14 0 */ /*:ref: initdyptrk_ 14 0 */ /* Rerunning f2c -P may change prototypes or declarations. */ #endif /* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* Common Block Declarations */ extern struct { integer order, lframe; logical corrp; } contrl_; #define contrl_1 contrl_ /* Table of constant values */ static integer c__10 = 10; static integer c__181 = 181; static integer c__720 = 720; static integer c__3 = 3; static integer c__90 = 90; static integer c__156 = 156; static integer c__307 = 307; static integer c__462 = 462; static integer c__312 = 312; static integer c__60 = 60; static integer c__1 = 1; /* ****************************************************************** */ /* ANALYS Version 55 */ /* $Log: analys.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:49 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:13 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:42 csoutheren /* Initial version /* /* Revision 1.2 2002/02/15 03:57:55 yurik /* Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:16:01 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Revision 1.1 1996/08/19 22:29:08 jaf * Initial revision * */ /* Revision 1.9 1996/05/23 19:41:07 jaf */ /* Commented out some unnecessary lines that were reading uninitialized */ /* values. */ /* Revision 1.8 1996/03/27 23:57:55 jaf */ /* Added some comments about which indices of the local buffers INBUF, */ /* LPBUF, etc., get read or modified by some of the subroutine calls. I */ /* just did this while trying to figure out the discrepancy between the */ /* embedded code compiled with all local variables implicitly saved, and */ /* without. */ /* I added some debugging write statements in hopes of finding a problem. */ /* None of them ever printed anything while running with the long input */ /* speech file dam9.spd provided in the distribution. */ /* Revision 1.7 1996/03/27 18:06:20 jaf */ /* Commented out access to MAXOSP, which is just a debugging variable */ /* that was defined in the COMMON block CONTRL in contrl.fh. */ /* Revision 1.6 1996/03/26 19:31:33 jaf */ /* Commented out trace statements. */ /* Revision 1.5 1996/03/21 15:19:35 jaf */ /* Added comments for ENTRY PITDEC. */ /* Revision 1.4 1996/03/19 20:54:27 jaf */ /* Added a line to INITANALYS. See comments there. */ /* Revision 1.3 1996/03/19 20:52:49 jaf */ /* Rearranged the order of the local variables quite a bit, to separate */ /* them into groups of "constants", "locals that don't need to be saved */ /* from one call to the next", and "local that do need to be saved from */ /* one call to the next". */ /* Several locals in the last set should have been given initial values, */ /* but weren't. I gave them all initial values of 0. */ /* Added a separate ENTRY INITANALYS that initializes all local state */ /* that should be, and also calls the corresponding entries of the */ /* subroutines called by ANALYS that also have local state. */ /* There used to be DATA statements in ANALYS. I got rid of most of */ /* them, and added a local logical variable FIRST that calls the entry */ /* INITANALYS on the first call to ANALYS. This is just so that one need */ /* not remember to call INITANALYS first in order for the state to be */ /* initialized. */ /* Revision 1.2 1996/03/11 23:29:32 jaf */ /* Added several comments with my own personal questions about the */ /* Fortran 77 meaning of the parameters passed to the subroutine PREEMP. */ /* Revision 1.1 1996/02/07 14:42:29 jaf */ /* Initial revision */ /* ****************************************************************** */ /* SUBROUTINE ANALYS */ /* Input: */ /* SPEECH */ /* Indices 1 through LFRAME read. */ /* Output: */ /* VOICE */ /* Indices 1 through 2 written. */ /* PITCH */ /* Written in subroutine DYPTRK, and then perhaps read and written */ /* some more. */ /* RMS */ /* Written. */ /* RC */ /* Indices 1 through ORDER written (ORDER defined in contrl.fh). */ /* This subroutine maintains local state from one call to the next. If */ /* you want to switch to using a new audio stream for this filter, or */ /* reinitialize its state for any other reason, call the ENTRY */ /* INITANALYS. */ /* ENTRY PITDEC */ /* Input: */ /* PITCH - Encoded pitch index */ /* Output: */ /* PTAU - Decoded pitch period */ /* This entry has no local state. It accesses a "constant" array */ /* declared in ANALYS. */ /* Subroutine */ int analys_(real *speech, integer *voice, integer *pitch, real *rms, real *rc, struct lpc10_encoder_state *st) { /* Initialized data */ static integer tau[60] = { 20,21,22,23,24,25,26,27,28,29,30,31,32,33,34, 35,36,37,38,39,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72, 74,76,78,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136, 140,144,148,152,156 }; static integer buflim[4] = { 181,720,25,720 }; static real precoef = .9375f; /* System generated locals */ integer i__1; /* Local variables */ real amdf[60]; integer half; real abuf[156]; real *bias; extern /* Subroutine */ int tbdm_(real *, integer *, integer *, integer *, real *, integer *, integer *, integer *); integer *awin; integer midx, ewin[6] /* was [2][3] */; real ivrc[2], temp; real *zpre; integer *vwin; integer i__, j, lanal; extern /* Subroutine */ int rcchk_(integer *, real *, real *), mload_( integer *, integer *, integer *, real *, real *, real *); real *inbuf, *pebuf; real *lpbuf, *ivbuf; real *rcbuf; integer *osbuf; extern /* Subroutine */ int onset_(real *, integer *, integer *, integer * , integer *, integer *, integer *, struct lpc10_encoder_state *); integer *osptr; extern /* Subroutine */ placea_(integer *, integer * , integer *, integer *, integer *, integer *, integer *, integer * , integer *), dcbias_(integer *, real *, real *), placev_(integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *); integer ipitch; integer *obound; extern /* Subroutine */ int preemp_(real *, real *, integer *, real *, real *), voicin_(integer *, real *, real *, integer *, integer *, real *, real *, integer *, real *, integer *, integer *, integer *, struct lpc10_encoder_state *); integer *voibuf; integer mintau; real *rmsbuf; extern /* Subroutine */ int lpfilt_(real *, real *, integer *, integer *), ivfilt_(real *, real *, integer *, integer *, real *), energy_( integer *, real *, real *), invert_(integer *, real *, real *, real *); integer minptr, maxptr; extern /* Subroutine */ int dyptrk_(real *, integer *, integer *, integer *, integer *, integer *, struct lpc10_encoder_state *); real phi[100] /* was [10][10] */, psi[10]; /* $Log: analys.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:49 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:13 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:42 csoutheren /* Initial version /* /* Revision 1.2 2002/02/15 03:57:55 yurik /* Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:16:01 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Revision 1.1 1996/08/19 22:29:08 jaf * Initial revision * */ /* Revision 1.3 1996/03/29 22:03:47 jaf */ /* Removed definitions for any constants that were no longer used. */ /* Revision 1.2 1996/03/26 19:34:33 jaf */ /* Added comments indicating which constants are not needed in an */ /* application that uses the LPC-10 coder. */ /* Revision 1.1 1996/02/07 14:43:51 jaf */ /* Initial revision */ /* LPC Configuration parameters: */ /* Frame size, Prediction order, Pitch period */ /* Arguments to ANALYS */ /* $Log: analys.c,v $co: warning: `/* $Log' is obsolescent; use ` * $Log'. * Revision 1.1 2010/02/24 02:19:06 shorne * First commit of h323plus mirror * /* Revision 1.2 2006/08/01 13:06:49 rjongbloed /* Added a raft of unvalidated audio codecs from OpenH323 tree /* /* Revision 1.1.2.1 2006/07/22 14:03:13 rjongbloed /* Added more plug ins /* /* Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed /* Imported all the audio codec plug ins from OpenH323 /* /* Revision 1.1 2004/05/04 11:16:42 csoutheren /* Initial version /* /* Revision 1.2 2002/02/15 03:57:55 yurik /* Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com /* /* Revision 1.1 2000/06/05 04:45:12 robertj /* Added LPC-10 2400bps codec /* * Revision 1.2 1996/08/20 20:16:01 jaf * Removed all static local variables that were SAVE'd in the Fortran * code, and put them in struct lpc10_encoder_state that is passed as an * argument. * * Removed init function, since all initialization is now done in * init_lpc10_encoder_state(). * * Revision 1.1 1996/08/19 22:29:08 jaf * Initial revision * */ /* Revision 1.3 1996/03/29 22:05:55 jaf */ /* Commented out the common block variables that are not needed by the */ /* embedded version. */ /* Revision 1.2 1996/03/26 19:34:50 jaf */ /* Added comments indicating which constants are not needed in an */ /* application that uses the LPC-10 coder. */ /* Revision 1.1 1996/02/07 14:44:09 jaf */ /* Initial revision */ /* LPC Processing control variables: */ /* *** Read-only: initialized in setup */ /* Files for Speech, Parameter, and Bitstream Input & Output, */ /* and message and debug outputs. */ /* Here are the only files which use these variables: */ /* lpcsim.f setup.f trans.f error.f vqsetup.f */ /* Many files which use fdebug are not listed, since it is only used in */ /* those other files conditionally, to print trace statements. */ /* integer fsi, fso, fpi, fpo, fbi, fbo, pbin, fmsg, fdebug */ /* LPC order, Frame size, Quantization rate, Bits per frame, */ /* Error correction */ /* Subroutine SETUP is the only place where order is assigned a value, */ /* and that value is 10. It could increase efficiency 1% or so to */ /* declare order as a constant (i.e., a Fortran PARAMETER) instead of as */ /* a variable in a COMMON block, since it is used in many places in the */ /* core of the coding and decoding routines. Actually, I take that back. */ /* At least when compiling with f2c, the upper bound of DO loops is */ /* stored in a local variable before the DO loop begins, and then that is */ /* compared against on each iteration. */ /* Similarly for lframe, which is given a value of MAXFRM in SETUP. */ /* Similarly for quant, which is given a value of 2400 in SETUP. quant */ /* is used in only a few places, and never in the core coding and */ /* decoding routines, so it could be eliminated entirely. */ /* nbits is similar to quant, and is given a value of 54 in SETUP. */ /* corrp is given a value of .TRUE. in SETUP, and is only used in the */ /* subroutines ENCODE and DECODE. It doesn't affect the speed of the */ /* coder significantly whether it is .TRUE. or .FALSE., or whether it is */ /* a constant or a variable, since it is only examined once per frame. */ /* Leaving it as a variable that is set to .TRUE. seems like a good */ /* idea, since it does enable some error-correction capability for */ /* unvoiced frames, with no change in the coding rate, and no noticeable */ /* quality difference in the decoded speech. */ /* integer quant, nbits */ /* *** Read/write: variables for debugging, not needed for LPC algorithm */ /* Current frame, Unstable frames, Output clip count, Max onset buffer, */ /* Debug listing detail level, Line count on listing page */ /* nframe is not needed for an embedded LPC10 at all. */ /* nunsfm is initialized to 0 in SETUP, and incremented in subroutine */ /* ERROR, which is only called from RCCHK. When LPC10 is embedded into */ /* an application, I would recommend removing the call to ERROR in RCCHK, */ /* and remove ERROR and nunsfm completely. */ /* iclip is initialized to 0 in SETUP, and incremented in entry SWRITE in */ /* sread.f. When LPC10 is embedded into an application, one might want */ /* to cause it to be incremented in a routine that takes the output of */ /* SYNTHS and sends it to an audio device. It could be optionally */ /* displayed, for those that might want to know what it is. */ /* maxosp is never initialized to 0 in SETUP, although it probably should */ /* be, and it is updated in subroutine ANALYS. I doubt that its value */ /* would be of much interest to an application in which LPC10 is */ /* embedded. */ /* listl and lincnt are not needed for an embedded LPC10 at all. */ /* integer nframe, nunsfm, iclip, maxosp, listl, lincnt */ /* common /contrl/ fsi, fso, fpi, fpo, fbi, fbo, pbin, fmsg, fdebug */ /* common /contrl/ quant, nbits */ /* common /contrl/ nframe, nunsfm, iclip, maxosp, listl, lincnt */ /* Arguments to entry PITDEC (below) */ /* Parameters/constants */ /* Constants */ /* NF = Number of frames */ /* AF = Frame in which analysis is done */ /* OSLEN = Length of the onset buffer */ /* LTAU = Number of pitch lags */ /* SBUFL, SBUFH = Start and end index of speech buffers */ /* LBUFL, LBUFH = Start and end index of LPF speech buffer */ /* MINWIN, MAXWIN = Min and Max length of voicing (and analysis) windows */ /* PWLEN, PWINH, PWINL = Length, upper and lower limits of pitch window */ /* DVWINL, DVWINH = Default lower and upper limits of voicing window */ /* The tables TAU and BUFLIM, and the variable PRECOEF, are not */ /* Fortran PARAMETER's, but they are initialized with DATA */ /* statements, and never modified. Thus, they need not have SAVE */ /* statements for them to keep their values from one invocation to */ /* the next. */ /* Local variables that need not be saved */ /* Local state */ /* Data Buffers */ /* INBUF Raw speech (with DC bias removed each frame) */ /* PEBUF Preemphasized speech */ /* LPBUF Low pass speech buffer */ /* IVBUF Inverse filtered speech */ /* OSBUF Indexes of onsets in speech buffers */ /* VWIN Voicing window indices */ /* AWIN Analysis window indices */ /* EWIN Energy window indices */ /* VOIBUF Voicing decisions on windows in VWIN */ /* RMSBUF RMS energy */ /* RCBUF Reflection Coefficients */ /* Pitch is handled separately from the above parameters. */ /* The following variables deal with pitch: */ /* MIDX Encoded initial pitch estimate for analysis frame */ /* IPITCH Initial pitch computed for frame AF (decoded from MIDX) */ /* PITCH The encoded pitch value (index into TAU) for the present */ /* frame (delayed and smoothed by Dyptrack) */ /* Parameter adjustments */ if (speech) { --speech; } if (voice) { --voice; } if (rc) { --rc; } /* Function Body */ /* Calculations are done on future frame due to requirements */ /* of the pitch tracker. Delay RMS and RC's 2 frames to give */ /* current frame parameters on return. */ /* Update all buffers */ inbuf = &(st->inbuf[0]); pebuf = &(st->pebuf[0]); lpbuf = &(st->lpbuf[0]); ivbuf = &(st->ivbuf[0]); bias = &(st->bias); osbuf = &(st->osbuf[0]); osptr = &(st->osptr); obound = &(st->obound[0]); vwin = &(st->vwin[0]); awin = &(st->awin[0]); voibuf = &(st->voibuf[0]); rmsbuf = &(st->rmsbuf[0]); rcbuf = &(st->rcbuf[0]); zpre = &(st->zpre); i__1 = 720 - contrl_1.lframe; for (i__ = 181; i__ <= i__1; ++i__) { inbuf[i__ - 181] = inbuf[contrl_1.lframe + i__ - 181]; pebuf[i__ - 181] = pebuf[contrl_1.lframe + i__ - 181]; } i__1 = 540 - contrl_1.lframe; for (i__ = 229; i__ <= i__1; ++i__) { ivbuf[i__ - 229] = ivbuf[contrl_1.lframe + i__ - 229]; } i__1 = 720 - contrl_1.lframe; for (i__ = 25; i__ <= i__1; ++i__) { lpbuf[i__ - 25] = lpbuf[contrl_1.lframe + i__ - 25]; } j = 1; i__1 = (*osptr) - 1; for (i__ = 1; i__ <= i__1; ++i__) { if (osbuf[i__ - 1] > contrl_1.lframe) { osbuf[j - 1] = osbuf[i__ - 1] - contrl_1.lframe; ++j; } } *osptr = j; voibuf[0] = voibuf[2]; voibuf[1] = voibuf[3]; for (i__ = 1; i__ <= 2; ++i__) { vwin[(i__ << 1) - 2] = vwin[(i__ + (1 << 1)) - 2] - contrl_1.lframe; vwin[(i__ << 1) - 1] = vwin[(i__ + (1 << 1)) - 1] - contrl_1.lframe; awin[(i__ << 1) - 2] = awin[(i__ + (1 << 1)) - 2] - contrl_1.lframe; awin[(i__ << 1) - 1] = awin[(i__ + (1 << 1)) - 1] - contrl_1.lframe; /* EWIN(*,J) is unused for J .NE. AF, so the following shift is */ /* unnecessary. It also causes error messages when the C versio n */ /* of the code created from this by f2c is run with Purify. It */ /* correctly complains that uninitialized memory is being read. */ /* EWIN(1,I) = EWIN(1,I+1) - LFRAME */ /* EWIN(2,I) = EWIN(2,I+1) - LFRAME */ obound[i__ - 1] = obound[i__]; voibuf[i__ * 2] = voibuf[(i__ + 1) * 2]; voibuf[(i__ << 1) + 1] = voibuf[(i__ + (1 << 1)) + 1]; rmsbuf[i__ - 1] = rmsbuf[i__]; i__1 = contrl_1.order; for (j = 1; j <= i__1; ++j) { rcbuf[j + i__ * 10 - 11] = rcbuf[j + (i__ + 1) * 10 - 11]; } } /* Copy input speech, scale to sign+12 bit integers */ /* Remove long term DC bias. */ /* If the average value in the frame was over 1/4096 (after current */ /* BIAS correction), then subtract that much more from samples in */ /* next frame. If the average value in the frame was under */ /* -1/4096, add 1/4096 more to samples in next frame. In all other */ /* cases, keep BIAS the same. */ temp = 0.f; i__1 = contrl_1.lframe; for (i__ = 1; i__ <= i__1; ++i__) { inbuf[720 - contrl_1.lframe + i__ - 181] = speech[i__] * 4096.f - (*bias); temp += inbuf[720 - contrl_1.lframe + i__ - 181]; } if (temp > (real) contrl_1.lframe) { *bias += 1; } if (temp < (real) (-contrl_1.lframe)) { *bias += -1; } /* Place Voicing Window */ i__ = 721 - contrl_1.lframe; preemp_(&inbuf[i__ - 181], &pebuf[i__ - 181], &contrl_1.lframe, &precoef, zpre); onset_(pebuf, osbuf, osptr, &c__10, &c__181, &c__720, &contrl_1.lframe, st); /* MAXOSP is just a debugging variable. */ /* MAXOSP = MAX( MAXOSP, OSPTR ) */ placev_(osbuf, osptr, &c__10, &obound[2], vwin, &c__3, &contrl_1.lframe, &c__90, &c__156, &c__307, &c__462); /* The Pitch Extraction algorithm estimates the pitch for a frame */ /* of speech by locating the minimum of the average magnitude difference */ /* function (AMDF). The AMDF operates on low-pass, inverse filtered */ /* speech. (The low-pass filter is an 800 Hz, 19 tap, equiripple, FIR */ /* filter and the inverse filter is a 2nd-order LPC filter.) The pitch */ /* estimate is later refined by dynamic programming (DYPTRK). However, */ /* since some of DYPTRK's parameters are a function of the voicing */ /* decisions, a voicing decision must precede the final pitch estimation. */ /* See subroutines LPFILT, IVFILT, and TBDM. */ /* LPFILT reads indices LBUFH-LFRAME-29 = 511 through LBUFH = 720 */ /* of INBUF, and writes indices LBUFH+1-LFRAME = 541 through LBUFH */ /* = 720 of LPBUF. */ lpfilt_(&inbuf[228], &lpbuf[384], &c__312, &contrl_1.lframe); /* IVFILT reads indices (PWINH-LFRAME-7) = 353 through PWINH = 540 */ /* of LPBUF, and writes indices (PWINH-LFRAME+1) = 361 through */ /* PWINH = 540 of IVBUF. */ ivfilt_(&lpbuf[204], ivbuf, &c__312, &contrl_1.lframe, ivrc); /* TBDM reads indices PWINL = 229 through */ /* (PWINL-1)+MAXWIN+(TAU(LTAU)-TAU(1))/2 = 452 of IVBUF, and writes */ /* indices 1 through LTAU = 60 of AMDF. */ tbdm_(ivbuf, &c__156, tau, &c__60, amdf, &minptr, &maxptr, &mintau); /* Voicing decisions are made for each half frame of input speech. */ /* An initial voicing classification is made for each half of the */ /* analysis frame, and the voicing decisions for the present frame */ /* are finalized. See subroutine VOICIN. */ /* The voicing detector (VOICIN) classifies the input signal as */ /* unvoiced (including silence) or voiced using the AMDF windowed */ /* maximum-to-minimum ratio, the zero crossing rate, energy measures, */ /* reflection coefficients, and prediction gains. */ /* The pitch and voicing rules apply smoothing and isolated */ /* corrections to the pitch and voicing estimates and, in the process, */ /* introduce two frames of delay into the corrected pitch estimates and */ /* voicing decisions. */ for (half = 1; half <= 2; ++half) { voicin_(&vwin[4], inbuf, lpbuf, buflim, &half, &amdf[minptr - 1], & amdf[maxptr - 1], &mintau, ivrc, obound, voibuf, &c__3, st); } /* Find the minimum cost pitch decision over several frames */ /* given the current voicing decision and the AMDF array */ dyptrk_(amdf, &c__60, &minptr, &voibuf[7], pitch, &midx, st); ipitch = tau[midx - 1]; /* Place spectrum analysis and energy windows */ placea_(&ipitch, voibuf, &obound[2], &c__3, vwin, awin, ewin, & contrl_1.lframe, &c__156); /* Remove short term DC bias over the analysis window, Put result in ABUF */ lanal = awin[5] + 1 - awin[4]; dcbias_(&lanal, &pebuf[awin[4] - 181], abuf); /* ABUF(1:LANAL) is now defined. It is equal to */ /* PEBUF(AWIN(1,AF):AWIN(2,AF)) corrected for short term DC bias. */ /* Compute RMS over integer number of pitch periods within the */ /* analysis window. */ /* Note that in a hardware implementation this computation may be */ /* simplified by using diagonal elements of PHI computed by MLOAD. */ i__1 = ewin[5] - ewin[4] + 1; energy_(&i__1, &abuf[ewin[4] - awin[4]], &rmsbuf[2]); /* Matrix load and invert, check RC's for stability */ mload_(&contrl_1.order, &c__1, &lanal, abuf, phi, psi); invert_(&contrl_1.order, phi, psi, &rcbuf[20]); rcchk_(&contrl_1.order, &rcbuf[10], &rcbuf[20]); /* Set return parameters */ voice[1] = voibuf[2]; voice[2] = voibuf[3]; *rms = rmsbuf[0]; i__1 = contrl_1.order; for (i__ = 1; i__ <= i__1; ++i__) { rc[i__] = rcbuf[i__ - 1]; } return 0; } /* analys_ */ h323plus/plugins/audio/LPC_10/src/f2c.h0000644000175000017500000001304411341106232016214 0ustar markmark/* $Log: f2c.h,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:50 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:16 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/05/04 11:16:42 csoutheren Initial version Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.2 1996/08/20 20:26:28 jaf * Any typedef defining a type that was used in lpc10_encoder_state or * lpc10_decoder_state struct's was commented out here and added to * lpc10.h. * * Revision 1.1 1996/08/19 22:32:13 jaf * Initial revision * */ /* * f2c.h * * SCCS ID: @(#)f2c.h 1.2 96/05/19 */ /* f2c.h -- Standard Fortran to C header file */ /** barf [ba:rf] 2. "He suggested using FORTRAN, and everybody barfed." - From The Shogakukan DICTIONARY OF NEW ENGLISH (Second edition) */ #ifndef F2C_INCLUDE #define F2C_INCLUDE #include "lpc10.h" /*typedef long int integer;*/ /*typedef INT32 integer;*/ /*typedef short int shortint;*/ /*typedef INT16 shortint;*/ /*typedef float real;*/ /* doublereal only used for function arguments to sqrt, exp, etc. */ typedef double doublereal; /* 32 bits seems wasteful, but there really aren't that many logical * variables around, and making them 32 bits could avoid word * alignment problems, perhaps. */ /*typedef long int logical;*/ /*typedef INT32 logical;*/ /* The following types are not used in the translated C code for the * LPC-10 coder, but they might be needed by the definitions down * below, so they don't cause compilation errors. */ typedef char *address; typedef struct { real r, i; } complex; typedef struct { doublereal r, i; } doublecomplex; typedef short int shortlogical; typedef char logical1; typedef char integer1; /* typedef long long longint; */ /* system-dependent */ #define TRUE_ (1) #define FALSE_ (0) /* Extern is for use with -E */ #ifndef Extern #define Extern extern #endif /* I/O stuff */ #ifdef f2c_i2 /* for -i2 */ typedef short flag; typedef short ftnlen; typedef short ftnint; #else typedef long int flag; typedef long int ftnlen; typedef long int ftnint; #endif /*external read, write*/ typedef struct { flag cierr; ftnint ciunit; flag ciend; char *cifmt; ftnint cirec; } cilist; /*internal read, write*/ typedef struct { flag icierr; char *iciunit; flag iciend; char *icifmt; ftnint icirlen; ftnint icirnum; } icilist; /*open*/ typedef struct { flag oerr; ftnint ounit; char *ofnm; ftnlen ofnmlen; char *osta; char *oacc; char *ofm; ftnint orl; char *oblnk; } olist; /*close*/ typedef struct { flag cerr; ftnint cunit; char *csta; } cllist; /*rewind, backspace, endfile*/ typedef struct { flag aerr; ftnint aunit; } alist; /* inquire */ typedef struct { flag inerr; ftnint inunit; char *infile; ftnlen infilen; ftnint *inex; /*parameters in standard's order*/ ftnint *inopen; ftnint *innum; ftnint *innamed; char *inname; ftnlen innamlen; char *inacc; ftnlen inacclen; char *inseq; ftnlen inseqlen; char *indir; ftnlen indirlen; char *infmt; ftnlen infmtlen; char *inform; ftnint informlen; char *inunf; ftnlen inunflen; ftnint *inrecl; ftnint *innrec; char *inblank; ftnlen inblanklen; } inlist; #define VOID void union Multitype { /* for multiple entry points */ integer1 g; shortint h; integer i; /* longint j; */ real r; doublereal d; complex c; doublecomplex z; }; typedef union Multitype Multitype; /*typedef long int Long;*/ /* No longer used; formerly in Namelist */ struct Vardesc { /* for Namelist */ char *name; char *addr; ftnlen *dims; int type; }; typedef struct Vardesc Vardesc; struct Namelist { char *name; Vardesc **vars; int nvars; }; typedef struct Namelist Namelist; #define abs(x) ((x) >= 0 ? (x) : -(x)) #define dabs(x) (doublereal)abs(x) #define min(a,b) ((a) <= (b) ? (a) : (b)) #define max(a,b) ((a) >= (b) ? (a) : (b)) #define dmin(a,b) (doublereal)min(a,b) #define dmax(a,b) (doublereal)max(a,b) /* procedure parameter types for -A and -C++ */ #define F2C_proc_par_types 1 #ifdef __cplusplus typedef int /* Unknown procedure type */ (*U_fp)(...); typedef shortint (*J_fp)(...); typedef integer (*I_fp)(...); typedef real (*R_fp)(...); typedef doublereal (*D_fp)(...), (*E_fp)(...); typedef /* Complex */ VOID (*C_fp)(...); typedef /* Double Complex */ VOID (*Z_fp)(...); typedef logical (*L_fp)(...); typedef shortlogical (*K_fp)(...); typedef /* Character */ VOID (*H_fp)(...); typedef /* Subroutine */ int (*S_fp)(...); #else typedef int /* Unknown procedure type */ (*U_fp)(); typedef shortint (*J_fp)(); typedef integer (*I_fp)(); typedef real (*R_fp)(); typedef doublereal (*D_fp)(), (*E_fp)(); typedef /* Complex */ VOID (*C_fp)(); typedef /* Double Complex */ VOID (*Z_fp)(); typedef logical (*L_fp)(); typedef shortlogical (*K_fp)(); typedef /* Character */ VOID (*H_fp)(); typedef /* Subroutine */ int (*S_fp)(); #endif /* E_fp is for real functions when -R is not specified */ typedef VOID C_f; /* complex function */ typedef VOID H_f; /* character function */ typedef VOID Z_f; /* double complex function */ typedef doublereal E_f; /* real function with -R not specified */ /* undef any lower-case symbols that your C compiler predefines, e.g.: */ #ifndef Skip_f2c_Undefs #undef cray #undef gcos #undef mc68010 #undef mc68020 #undef mips #undef pdp11 #undef sgi #undef sparc #undef sun #undef sun2 #undef sun3 #undef sun4 #undef u370 #undef u3b #undef u3b2 #undef u3b5 #undef unix #undef vax #endif #endif h323plus/plugins/audio/LPC_10/src/f2clib.c0000644000175000017500000000333011341106232016673 0ustar markmark/* $Log: f2clib.c,v $ Revision 1.1 2010/02/24 02:19:06 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:50 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 14:03:16 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.2 2004/05/05 13:25:38 rjongbloed Fixed clearly incorrect code (dived by zero) found with an MSVC warning Revision 1.1 2004/05/04 11:16:42 csoutheren Initial version Revision 1.3 2004/02/17 09:21:45 csoutheren Fix for GM bug 134591 Revision 1.2 2002/02/15 03:57:55 yurik Warnings removed during compilation, patch courtesy of Jehan Bing, jehan@bravobrava.com Revision 1.1 2000/06/05 04:45:12 robertj Added LPC-10 2400bps codec * Revision 1.1 1996/08/19 22:32:10 jaf * Initial revision * */ /* * f2clib.c * * SCCS ID: @(#)f2clib.c 1.2 96/05/19 */ #include "f2c.h" #ifdef KR_headers integer pow_ii(ap, bp) integer *ap, *bp; #else integer pow_ii(integer *ap, integer *bp) #endif { integer pow, x, n; unsigned long u; x = *ap; n = *bp; if (n <= 0) { if (n == 0 || x == 1) return 1; if (x != -1) return x != 0 ? 1/x : 0; n = -n; } u = n; for(pow = 1; ; ) { if(u & 01) pow *= x; if(u >>= 1) x *= x; else break; } return(pow); } #ifdef KR_headers double r_sign(a,b) real *a, *b; #else double r_sign(real *a, real *b) #endif { double x; x = (*a >= 0 ? *a : - *a); return( *b >= 0 ? x : -x); } #ifdef KR_headers double floor(); integer i_nint(x) real *x; #else #undef abs #include "math.h" integer i_nint(real *x) #endif { return (integer)( (*x)>=0 ? floor(*x + .5) : -(floor(.5 - *x)) ); } h323plus/plugins/audio/LPC_10/LPC_10_2008.vcproj0000644000175000017500000007212411341106232017422 0ustar markmark h323plus/plugins/audio/LPC_10/LPC_10.dsp0000644000175000017500000002521611341106232016234 0ustar markmark# Microsoft Developer Studio Project File - Name="LPC_10" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=LPC_10 - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "LPC_10.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "LPC_10.mak" CFG="LPC_10 - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "LPC_10 - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "LPC_10 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "LPC_10 - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "..\..\Release" # PROP Intermediate_Dir "..\..\Release\LPC_10" # PROP Ignore_Export_Lib 1 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LPC_10_EXPORTS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_CODEC_DLL_EXPORTS" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "NDEBUG" # ADD RSC /l 0xc09 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /machine:I386 /out:"../../Release/LPC_10_pwplugin.dll" /implib:"..\..\Release\LPC_10/LPC_10.lib" !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "..\..\Debug" # PROP Intermediate_Dir "..\..\Debug\LPC_10" # PROP Ignore_Export_Lib 1 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LPC_10_EXPORTS" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_CODEC_DLL_EXPORTS" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "_DEBUG" # ADD RSC /l 0xc09 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /debug /machine:I386 /out:"../../Debug/LPC_10_pwplugin.dll" /implib:"..\..\Debug\LPC_10/LPC_10.lib" /pdbtype:sept # SUBTRACT LINK32 /pdb:none !ENDIF # Begin Target # Name "LPC_10 - Win32 Release" # Name "LPC_10 - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\lpc_10_codec.c # End Source File # End Group # Begin Group "LPC" # PROP Default_Filter "" # Begin Source File SOURCE=.\src\analys.c # ADD CPP /I "." # End Source File # Begin Source File SOURCE=.\src\bsynz.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\chanwr.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\dcbias.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\decode_.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\deemp.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\difmag.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\dyptrk.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\encode_.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\energy.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\f2clib.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\ham84.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\hp100.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\invert.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\irc2pc.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\ivfilt.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\lpcdec.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\lpcenc.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\lpcini.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\lpfilt.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\median.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\mload.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\onset.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\pitsyn.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\placea.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\placev.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\preemp.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\prepro.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\random.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\rcchk.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\synths.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\tbdm.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\voicin.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # Begin Source File SOURCE=.\src\vparms.c !IF "$(CFG)" == "LPC_10 - Win32 Release" # ADD CPP /I "." !ELSEIF "$(CFG)" == "LPC_10 - Win32 Debug" # ADD CPP /I ".." /I "." !ENDIF # End Source File # End Group # End Target # End Project h323plus/plugins/audio/EasyCodec/0000755000175000017500000000000011341106231015520 5ustar markmarkh323plus/plugins/audio/EasyCodec/g722codec.h0000644000175000017500000000631211341106231017352 0ustar markmark/* g722codec.h * * Easy G722 codec for OpenH323/OPAL * * Copyright (c) 2004 ISVO (Asia) Pte Ltd. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * Portions of this Code as Copyright Imtelephone.com. All rights reserved. * * The Original Code is derived from and used in conjunction with the * OpenH323/OPAL Project (www.openh323.org/) * * The Initial Developer of the Original Code is ISVO (Asia) Pte Ltd. * * * Contributor(s): ______________________________________. * * $Revision: 1.1 $ * $Author: shorne $ * $Date: 2010/02/24 02:19:05 $ */ #include "easycodecs.h" #include "EasyG722/EasyG722.h" ///////////////////////////////////////////////////////////////////////////// //#define Ecodec EasyG722 static const char EasyG722_Desc[] = { "Easy G722" }; // text decription static const char EasyG722_L16Desc[]= { "L16" }; // source format static const char EasyG722_MediaFmt[] = { "G.722-64k[e]" }; // destination format static unsigned int EasyG722_SamplePerSec = 16000; // samples per second static unsigned int EasyG722_BitsPerSec = 64000; // raw bits per second static unsigned int EasyG722_NsPerFrame = 10000; // nanoseconds per frame static unsigned int EasyG722_SamplesPerFrame = L_G722_FRAME; // samples per frame static unsigned int EasyG722_BytesPerFrame = L_G722_FRAME_COMPRESSED; // Bytes per frame Compressed static unsigned int EasyG722_RecFramesPerPacket = 1; //rec number of frames per packet static unsigned int EasyG722_MaxFramesPerPacket = 1; // max number of frames per packet #define EasyG722_IANACode 9 // IANA RTP payload code static const char EasyG722_IANAName[] = { "G722" }; // RTP payload name static unsigned char EasyG722_CapType = PluginCodec_H323AudioCodec_g722_64k; // h323CapabilityType class G722_EasyCodec : public EasyCodec { public: unsigned long init_encoder() { return EasyG722_init_encoder();} bool encoder(unsigned long hEncoder, short *speech, unsigned char *bitstream) { return EasyG722_encoder(hEncoder, speech, bitstream);} bool release_encoder(unsigned long hEncoder) { return EasyG722_release_encoder(hEncoder);} unsigned long init_decoder() { return EasyG722_init_decoder();} bool decoder(unsigned long hDecoder, unsigned char *bitstream, short *synth_short) { return EasyG722_decoder(hDecoder, bitstream, synth_short);} bool release_decoder(unsigned long hDecoder) { return EasyG722_release_decoder(hDecoder);} }; #pragma data_seg(".G722_SHARED") // Define the Segment #pragma comment(lib,"EasyG722/EasyG722.lib") // load Library into shared Memory static G722_EasyCodec * m_G722codec = NULL; // specify the data and initialise at Instantiation #pragma data_seg() #pragma comment(linker, "/section:.G722_SHARED,rws") // link it h323plus/plugins/audio/EasyCodec/EasyG729A_2008.vcproj0000644000175000017500000001243411341106231020775 0ustar markmark h323plus/plugins/audio/EasyCodec/easycodecs.h0000644000175000017500000001722411341106231020021 0ustar markmark/* * * Easy codecs for OpenH323/OPAL * * Copyright (c) 2004 ISVO (Asia) Pte Ltd. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * Portions of this Code as Copyright Imtelephone.com. All rights reserved. * * The Original Code is derived from and used in conjunction with the * OpenH323/OPAL Project (www.openh323.org/) * * The Initial Developer of the Original Code is ISVO (Asia) Pte Ltd. * * * Contributor(s): ______________________________________. * * $Revision: 1.1 $ * $Author: shorne $ * $Date: 2010/02/24 02:19:05 $ */ #include #include #if _MSC_VER > 1000 #pragma once #endif // All of PWLib/OpenH323 use MSVCRT.LIB or MSVCRTD.LIB, but EasyCodecs use // libc.lib, so we need to tell the linker to ignore it, can't have two // Run Time libraries! #pragma comment(linker, "/NODEFAULTLIB:libc.lib") //////////////////////////////////////////////////////////////////////////// // Definitions. enum { Plugin_EasyG722 =1, Plugin_EasyG729A =2, Plugin_EasyG728 =3, Plugin_EasyG7231_63 =4 }; //////////////////////////////////////////////////////////////////////////// // Information static struct PluginCodec_information licenseInfo = { 1192510548, // timestamp = Tue 16 Oct 2007 04:55:48 AM UTC "Simon Horne ISVO(Asia) Pte Ltd", // source code author "1.0", // source code version "shorne@isvo.net", // source code email "http://www.isvo.net", // source code URL "Copyright (C) 2005 by ISVO (Asia), All Rights Reserved", // source code copyright "MPL 1.0", // source code license PluginCodec_License_MPL, // source code license "Easy Codecs", // codec description "imtelephone.com", // codec author NULL, // codec version NULL, // codec email "http://www.imtelephone.com", // codec URL "Copyright (C) 2003-2004 imtelephone.com", // codec copyright information "NULL", // codec license PluginCodec_License_ResearchAndDevelopmentUseOnly // codec license code }; // Codec Information Template #define DECLARE_EASY_PARAM(prefix) \ { \ /* encoder */ \ PLUGIN_CODEC_VERSION_WIDEBAND, /* codec API version */ \ &licenseInfo, /* license information */ \ PluginCodec_MediaTypeAudio | /* audio codec */ \ PluginCodec_InputTypeRaw | /* raw input data */ \ PluginCodec_OutputTypeRaw | /* raw output data */ \ PluginCodec_RTPTypeExplicit, /* dynamic RTP type */ \ prefix##_Desc, /* text decription */ \ prefix##_L16Desc, /* source format */ \ prefix##_MediaFmt, /* destination format */ \ (void*)Plugin_##prefix, /* user data */ \ prefix##_SamplePerSec, /* samples per second */ \ prefix##_BitsPerSec, /* raw bits per second */ \ prefix##_NsPerFrame, /* nanoseconds per frame */ \ prefix##_SamplesPerFrame, /* samples per frame */ \ prefix##_BytesPerFrame, /* bytes per frame */ \ prefix##_RecFramesPerPacket, /* recommended number of frames per packet */ \ prefix##_MaxFramesPerPacket, /* maximum number of frames per packet */ \ prefix##_IANACode, /* IANA RTP payload code */ \ prefix##_IANAName, /* RTP payload name */ \ create_encoder, /* create codec function */ \ destroy_encoder, /* destroy codec */ \ codec_encoder, /* encode/decode */ \ NULL, /* codec controls */ \ prefix##_CapType, /* h323CapabilityType */ \ NULL /* h323CapabilityData */ \ }, \ { \ /* decoder */ \ PLUGIN_CODEC_VERSION_WIDEBAND, /* codec API version */ \ &licenseInfo, /* license information */ \ PluginCodec_MediaTypeAudio | /* audio codec */ \ PluginCodec_InputTypeRaw | /* raw input data */ \ PluginCodec_OutputTypeRaw | /* raw output data */ \ PluginCodec_RTPTypeExplicit, /* dynamic RTP type */ \ prefix##_Desc, /* text decription */ \ prefix##_MediaFmt, /* source format */ \ prefix##_L16Desc, /* destination format */ \ (void*)Plugin_##prefix, /* user data */ \ prefix##_SamplePerSec, /* samples per second */ \ prefix##_BitsPerSec, /* raw bits per second */ \ prefix##_NsPerFrame, /* nanoseconds per frame */ \ prefix##_SamplesPerFrame, /* samples per frame */ \ prefix##_BytesPerFrame, /* bytes per frame */ \ prefix##_RecFramesPerPacket, /* recommended number of frames per packet */ \ prefix##_MaxFramesPerPacket, /* maximum number of frames per packet */ \ prefix##_IANACode, /* IANA RTP payload code */ \ prefix##_IANAName, /* RTP payload name */ \ create_decoder, /* create codec function */ \ destroy_decoder, /* destroy codec */ \ codec_decoder, /* encode/decode */ \ NULL, /* codec controls */ \ prefix##_CapType, /* h323CapabilityType */ \ NULL /* h323CapabilityData */ \ } \ //////////////////////////////////////////////////////////////////////////////////////////// // Base Codec class to build Single instances of the Easy Libraries class EasyCodec { public: /// Contructor/Deconstructor EasyCodec() { }; ~EasyCodec() { }; /// Single Instance Plugin Calls (not threadsafe) unsigned long init_enc() { unsigned long ret = init_encoder(); return ret; }; bool enc(unsigned long hEncoder, short *speech, unsigned char *bitstream) { bool ret = encoder(hEncoder, speech, bitstream); return ret; }; bool release_enc(unsigned long hEncoder) { bool ret = release_encoder(hEncoder); return ret; }; unsigned long init_dec() { unsigned long ret = init_decoder(); return ret; }; bool dec(unsigned long hDecoder, unsigned char *bitstream, short *synth_short) { bool ret = decoder(hDecoder, bitstream, synth_short); return ret; }; bool release_dec(unsigned long hDecoder) { bool ret = release_decoder(hDecoder); return ret; }; /// Thread Safe Single Instance Codec calls virtual unsigned long init_encoder() =0; virtual bool encoder(unsigned long hEncoder, short *speech, unsigned char *bitstream) =0; virtual bool release_encoder(unsigned long hEncoder) =0; virtual unsigned long init_decoder() =0; virtual bool decoder(unsigned long hDecoder, unsigned char *bitstream, short *synth_short) =0; virtual bool release_decoder(unsigned long hDecoder) =0; }; // Session information to pass back with coder handle and reference Easy Library instance struct EasySession { EasyCodec * easy; unsigned long hEcoder; unsigned long hDcoder; }; h323plus/plugins/audio/EasyCodec/EasyCodecs.dsw0000644000175000017500000000203311341106231020257 0ustar markmarkMicrosoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "EasyG722"=.\EasyG722.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Project: "EasyG7231"=.\EasyG7231.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Project: "EasyG728"=.\EasyG728.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Project: "EasyG729A"=.\EasyG729A.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### h323plus/plugins/audio/EasyCodec/EasyG728_2005.vcproj0000644000175000017500000001231711341106231020670 0ustar markmark h323plus/plugins/audio/EasyCodec/EasyG729A_2005.vcproj0000644000175000017500000001233311341106231020770 0ustar markmark h323plus/plugins/audio/EasyCodec/EasyG728_2008.vcproj0000644000175000017500000001242011341106231020666 0ustar markmark h323plus/plugins/audio/EasyCodec/g7231codec.h0000644000175000017500000000710411341106231017434 0ustar markmark/* g7231codec.h * * Easy G7231 codec for OpenH323/OPAL * * Copyright (c) 2004 ISVO (Asia) Pte Ltd. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * Portions of this Code as Copyright Imtelephone.com. All rights reserved. * * The Original Code is derived from and used in conjunction with the * OpenH323/OPAL Project (www.openh323.org/) * * The Initial Developer of the Original Code is ISVO (Asia) Pte Ltd. * * * Contributor(s): ______________________________________. * * $Revision: 1.1 $ * $Author: shorne $ * $Date: 2010/02/24 02:19:05 $ */ #include "easycodecs.h" #include "EasyG7231/EasyG7231.h" ///////////////////////////////////////////////////////////////////////////// //#define Ecodec EasyG7231 static const char EasyG7231_63_Desc[] = { "Easy G7231-6.3" }; // text decription static const char EasyG7231_63_L16Desc[]= { "L16" }; // source format static const char EasyG7231_63_MediaFmt[] = { "G.7231-6.3k[e]" }; // destination format static unsigned int EasyG7231_63_SamplePerSec = 8000; // samples per second static unsigned int EasyG7231_63_BitsPerSec = 6300; // raw bits per second static unsigned int EasyG7231_63_NsPerFrame = 30000; // nanoseconds per frame static unsigned int EasyG7231_63_SamplesPerFrame = L_G7231_FRAME; // samples per frame static unsigned int EasyG7231_63_BytesPerFrame = L_G7231_FRAME_COMPRESSED_64; // Bytes per frame static unsigned int EasyG7231_63_RecFramesPerPacket = 1; //rec number of frames per packet static unsigned int EasyG7231_63_MaxFramesPerPacket = 1; // max number of frames per packet #define EasyG7231_63_IANACode 4 // IANA RTP payload code static const char EasyG7231_63_IANAName[] = { "G723" }; // RTP payload name static unsigned char EasyG7231_63_CapType = PluginCodec_H323AudioCodec_g7231; // h323CapabilityType // Base Class class G7231_EasyCodec : public EasyCodec { public: virtual unsigned long init_encoder() { return EasyG7231_init_encoder(Is63);} virtual bool encoder(unsigned long hEncoder, short *speech, unsigned char *bitstream) { return EasyG7231_encoder(hEncoder, speech, bitstream);} virtual bool release_encoder(unsigned long hEncoder) { return EasyG7231_release_encoder(hEncoder);} virtual unsigned long init_decoder() { return EasyG7231_init_decoder(Is63);} virtual bool decoder(unsigned long hDecoder, unsigned char *bitstream, short *synth_short) { return EasyG7231_decoder(hDecoder, bitstream, synth_short);} virtual bool release_decoder(unsigned long hDecoder) { return EasyG7231_release_decoder(hDecoder);} protected: bool Is63; }; // Derived classes class G7231_53_EasyCodec : public G7231_EasyCodec { public: G7231_53_EasyCodec() { Is63 = false; }; }; class G7231_63_EasyCodec : public G7231_EasyCodec { public: G7231_63_EasyCodec() { Is63 = true; }; }; #pragma data_seg(".G7231_SHARED") // define the segment #pragma comment(lib,"EasyG7231/EasyG7231.lib") static G7231_63_EasyCodec * m_G7231_63_codec = NULL; // specify the data and initialise at Instantiation #pragma data_seg() #pragma comment(linker, "/section:.G7231_SHARED,rws") // Link the segmenth323plus/plugins/audio/EasyCodec/EasyG729A.dsp0000644000175000017500000001066611341106231017614 0ustar markmark# Microsoft Developer Studio Project File - Name="EasyG729A" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=EasyG729A - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "EasyG729A.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "EasyG729A.mak" CFG="EasyG729A - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "EasyG729A - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "EasyG729A - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "EasyG729A - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Compile" # PROP Ignore_Export_Lib 1 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EasyG729A_EXPORTS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_CODEC_DLL_EXPORTS" /D "HAS_EASYG729A" /FD /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "NDEBUG" # ADD RSC /l 0xc09 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:"./Release/EasyG729A.pdb" /machine:I386 /out:"Release/EasyG729A_pwplugin.dll" /implib:"./Release/EasyG729A.lib" # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "EasyG729A - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "../Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 1 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EasyG729A_EXPORTS" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_CODEC_DLL_EXPORTS" /D "HAS_EASYG729A" /FD /GZ /c # SUBTRACT CPP /YX # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "_DEBUG" # ADD RSC /l 0xc09 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 ptclib.lib ptlibs.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:"../../Debug/EasyG729A.pdb" /debug /machine:I386 /out:"Debug/EasyG729A_pwplugin.dll" /implib:"./Debug/EasyG729A.lib" /pdbtype:sept # SUBTRACT LINK32 /pdb:none !ENDIF # Begin Target # Name "EasyG729A - Win32 Release" # Name "EasyG729A - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\easycodecs.cxx # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\easycodecs.h # End Source File # Begin Source File SOURCE=.\g729Acodec.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project h323plus/plugins/audio/EasyCodec/EasyG7231_2008.vcproj0000644000175000017500000001243711341106231020752 0ustar markmark h323plus/plugins/audio/EasyCodec/ReadMe.txt0000644000175000017500000000110211341106231017410 0ustar markmark++++++++++++++++++++++++++++++++++++++++++++++ Instructions on compiling the Easy Codecs ++++++++++++++++++++++++++++++++++++++++++++++ Warning: These Codecs (except G7231) have frame rates of 10ms For proper audio make sure the sound buffer size in your Application is set to a minimum of 5 otherwise you will have poor audio. 1. Download the codec files from www.ImTelephone.com and install them in the following subdirectories. Easy/EasyG722 Easy/EasyG7231 Easy/EasyG728 Easy/EasyG729A 2. Open EasyCodecs.dsw select batch build and build the appropriate plugins. h323plus/plugins/audio/EasyCodec/g728codec.h0000644000175000017500000000623411341106231017363 0ustar markmark/* g728codec.h * * Easy G728 codec for OpenH323/OPAL * * Copyright (c) 2004 ISVO (Asia) Pte Ltd. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * Portions of this Code as Copyright Imtelephone.com. All rights reserved. * * The Original Code is derived from and used in conjunction with the * OpenH323/OPAL Project (www.openh323.org/) * * The Initial Developer of the Original Code is ISVO (Asia) Pte Ltd. * * * Contributor(s): ______________________________________. * * $Revision: 1.1 $ * $Author: shorne $ * $Date: 2010/02/24 02:19:05 $ */ #include "easycodecs.h" #include "EasyG728/EasyG728.h" ///////////////////////////////////////////////////////////////////////////// //#define Ecodec EasyG728 static const char EasyG728_Desc[] = { "Easy G728" }; // text decription static const char EasyG728_L16Desc[]= { "L16" }; // source format static const char EasyG728_MediaFmt[] = { "G.728-16k[e]" }; // destination format static unsigned int EasyG728_SamplePerSec = 8000; // samples per second static unsigned int EasyG728_BitsPerSec = 16000; // raw bits per second static unsigned int EasyG728_NsPerFrame = 10000; // nanoseconds per frame static unsigned int EasyG728_SamplesPerFrame = L_G728_FRAME; // samples per frame static unsigned int EasyG728_BytesPerFrame = L_G728_FRAME_COMPRESSED; // Bytes per frame static unsigned int EasyG728_RecFramesPerPacket = 1; //rec number of frames per packet static unsigned int EasyG728_MaxFramesPerPacket = 1; // max number of frames per packet #define EasyG728_IANACode 15 // IANA RTP payload code static const char EasyG728_IANAName[] = { "G728" }; // RTP payload name static unsigned char EasyG728_CapType = PluginCodec_H323AudioCodec_g728; // h323CapabilityType class G728_EasyCodec : public EasyCodec { public: unsigned long init_encoder() { return EasyG728_init_encoder();} bool encoder(unsigned long hEncoder, short *speech, unsigned char *bitstream) { return EasyG728_encoder(hEncoder, speech, bitstream);} bool release_encoder(unsigned long hEncoder) { return EasyG728_release_encoder(hEncoder);} unsigned long init_decoder() { return EasyG728_init_decoder();} bool decoder(unsigned long hDecoder, unsigned char *bitstream, short *synth_short) { return EasyG728_decoder(hDecoder, bitstream, synth_short);} bool release_decoder(unsigned long hDecoder) { return EasyG728_release_decoder(hDecoder);} }; #pragma data_seg(".G728_SHARED") // define the segment #pragma comment(lib,"EasyG728/EasyG728.lib") static G728_EasyCodec * m_G728codec = NULL; // specify the data and initialise at Instantiation #pragma data_seg() #pragma comment(linker, "/section:.G728_SHARED,rws") // Link the segment h323plus/plugins/audio/EasyCodec/easycodecs.cxx0000644000175000017500000001333411341106231020372 0ustar markmark/* * * Easy codecs for OpenH323/OPAL * * Copyright (c) 2004 ISVO (Asia) Pte Ltd. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * Portions of this Code as Copyright Imtelephone.com. All rights reserved. * * The Original Code is derived from and used in conjunction with the * OpenH323/OPAL Project (www.openh323.org/) * * The Initial Developer of the Original Code is ISVO (Asia) Pte Ltd. * * * Contributor(s): ______________________________________. * * $Revision: 1.1 $ * $Author: shorne $ * $Date: 2010/02/24 02:19:05 $ */ /* #define HAS_EASYG722 1 #define HAS_EASYG729A 1 #define HAS_EASYG728 1 #define HAS_EASYG7231 1 */ #ifdef HAS_EASYG722 #include "g722codec.h" #endif #ifdef HAS_EASYG729A #include "g729Acodec.h" #endif #ifdef HAS_EASYG728 #include "g728codec.h" #endif #ifdef HAS_EASYG7231 #include "g7231codec.h" #endif #define Ecodec EasyCodecs /////////////////////////////////////////////////////////////////////////////////////////////// static void * create_encoder(const struct PluginCodec_Definition * codec) { struct EasySession * session = new EasySession; switch ((int)codec->userData) { case Plugin_EasyG722: #ifdef HAS_EASYG722 if (m_G722codec == NULL) m_G722codec = new G722_EasyCodec(); session->easy = m_G722codec; #endif break; case Plugin_EasyG729A: #ifdef HAS_EASYG729A if (m_G729Acodec == NULL) m_G729Acodec = new G729A_EasyCodec(); session->easy = m_G729Acodec; #endif break; case Plugin_EasyG728: #ifdef HAS_EASYG728 if (m_G728codec == NULL) m_G728codec = new G728_EasyCodec(); session->easy = m_G728codec; #endif break; case Plugin_EasyG7231_63: #ifdef HAS_EASYG7231 if (m_G7231_63_codec == NULL) m_G7231_63_codec = new G7231_63_EasyCodec(); session->easy = m_G7231_63_codec; #endif break; } session->hEcoder = session->easy->init_enc(); return session; } static int codec_encoder(const struct PluginCodec_Definition * codec, void * context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { struct EasySession * session = (EasySession *)context; if (*fromLen != codec->parm.audio.samplesPerFrame*2) return 0; session->easy->enc(session->hEcoder, (short *)from, (unsigned char *)to); *toLen = codec->parm.audio.bytesPerFrame; *fromLen = codec->parm.audio.samplesPerFrame*2; return 1; } static void destroy_encoder(const struct PluginCodec_Definition * codec, void * context) { struct EasySession * session = (EasySession *)context; session->easy->release_enc(session->hEcoder); } static void * create_decoder(const struct PluginCodec_Definition * codec) { struct EasySession * session = new EasySession; switch ((int)codec->userData) { case Plugin_EasyG722: #ifdef HAS_EASYG722 if (m_G722codec == NULL) m_G722codec = new G722_EasyCodec(); session->easy = m_G722codec; #endif break; case Plugin_EasyG729A: #ifdef HAS_EASYG729A if (m_G729Acodec == NULL) m_G729Acodec = new G729A_EasyCodec(); session->easy = m_G729Acodec; #endif break; case Plugin_EasyG728: #ifdef HAS_EASYG728 if (m_G728codec == NULL) m_G728codec = new G728_EasyCodec(); session->easy = m_G728codec; #endif break; case Plugin_EasyG7231_63: #ifdef HAS_EASYG7231 if (m_G7231_63_codec == NULL) m_G7231_63_codec = new G7231_63_EasyCodec(); session->easy = m_G7231_63_codec; #endif break; } session->hDcoder = session->easy->init_dec(); return session; } static int codec_decoder(const struct PluginCodec_Definition * codec, void * context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { struct EasySession * session = (EasySession *)context; if (*fromLen != codec->parm.audio.bytesPerFrame) return 0; session->easy->dec(session->hDcoder,(unsigned char *)from, (short *)to); *toLen = codec->parm.audio.samplesPerFrame*2; *fromLen = codec->parm.audio.bytesPerFrame; return 1; } static void destroy_decoder(const struct PluginCodec_Definition * codec, void * context) { struct EasySession * session = (EasySession *)context; session->easy->release_dec(session->hDcoder); } /////////////////////////////////////////////////////////////////////////////////////////////// static struct PluginCodec_Definition EasyCodecDefn[] = { #ifdef HAS_EASYG722 DECLARE_EASY_PARAM(EasyG722), #endif #ifdef HAS_EASYG729A DECLARE_EASY_PARAM(EasyG729A), #endif #ifdef HAS_EASYG728 DECLARE_EASY_PARAM(EasyG728), #endif #ifdef HAS_EASYG7231 DECLARE_EASY_PARAM(EasyG7231_63) #endif }; extern "C" { PLUGIN_CODEC_IMPLEMENT_ALL(EasyCodec, EasyCodecDefn, PLUGIN_CODEC_VERSION) }; h323plus/plugins/audio/EasyCodec/EasyG722.dsp0000644000175000017500000001063511341106231017500 0ustar markmark# Microsoft Developer Studio Project File - Name="EasyG722" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=EasyG722 - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "EasyG722.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "EasyG722.mak" CFG="EasyG722 - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "EasyG722 - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "EasyG722 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "EasyG722 - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Compile" # PROP Ignore_Export_Lib 1 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EasyG722_EXPORTS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_CODEC_DLL_EXPORTS" /D "HAS_EASYG722" /FD /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "NDEBUG" # ADD RSC /l 0xc09 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:"./Release/EasyG722.pdb" /machine:I386 /out:"Release/EasyG722_pwplugin.dll" /implib:"./Release/EasyG722.lib" # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "EasyG722 - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "../Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 1 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EasyG722_EXPORTS" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_CODEC_DLL_EXPORTS" /D "HAS_EASYG722" /YX"EasyG722.h" /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "_DEBUG" # ADD RSC /l 0xc09 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 ptclib.lib ptlibs.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:"../../Debug/EasyG722.pdb" /debug /machine:I386 /out:"Debug/EasyG722_pwplugin.dll" /implib:"./Debug/EasyG722.lib" /pdbtype:sept # SUBTRACT LINK32 /pdb:none !ENDIF # Begin Target # Name "EasyG722 - Win32 Release" # Name "EasyG722 - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\easycodecs.cxx # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\easycodecs.h # End Source File # Begin Source File SOURCE=.\g722codec.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project h323plus/plugins/audio/EasyCodec/g729Acodec.h0000644000175000017500000000630311341106231017462 0ustar markmark/* g729Acodec.h * * Easy G729A codec for OpenH323/OPAL * * Copyright (c) 2004 ISVO (Asia) Pte Ltd. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * Portions of this Code as Copyright Imtelephone.com. All rights reserved. * * The Original Code is derived from and used in conjunction with the * OpenH323/OPAL Project (www.openh323.org/) * * The Initial Developer of the Original Code is ISVO (Asia) Pte Ltd. * * * Contributor(s): ______________________________________. * * $Revision: 1.1 $ * $Author: shorne $ * $Date: 2010/02/24 02:19:05 $ */ #include "easycodecs.h" #include "EasyG729A/EasyG729A.h" ///////////////////////////////////////////////////////////////////////////// //#define Ecodec EasyG729A static const char EasyG729A_Desc[] = { "Easy G729A" }; // text decription static const char EasyG729A_L16Desc[]= { "L16" }; // source format static const char EasyG729A_MediaFmt[] = { "G.729A-8k[e]" }; // destination format static unsigned int EasyG729A_SamplePerSec = 8000; // samples per second static unsigned int EasyG729A_BitsPerSec = 8000; // raw bits per second static unsigned int EasyG729A_NsPerFrame = 10000; // nanoseconds per frame static unsigned int EasyG729A_SamplesPerFrame = L_G729A_FRAME; // samples per frame static unsigned int EasyG729A_BytesPerFrame = L_G729A_FRAME_COMPRESSED; // Bytes per frame static unsigned int EasyG729A_RecFramesPerPacket = 1; //rec number of frames per packet static unsigned int EasyG729A_MaxFramesPerPacket = 1; // max number of frames per packet #define EasyG729A_IANACode 18 // IANA RTP payload code static const char EasyG729A_IANAName[] = { "G729A" }; // RTP payload name static unsigned char EasyG729A_CapType = PluginCodec_H323AudioCodec_g729AnnexA; // h323CapabilityType class G729A_EasyCodec : public EasyCodec { public: unsigned long init_encoder() { return EasyG729A_init_encoder();} bool encoder(unsigned long hEncoder, short *speech, unsigned char *bitstream) { return EasyG729A_encoder(hEncoder, speech, bitstream);} bool release_encoder(unsigned long hEncoder) { return EasyG729A_release_encoder(hEncoder);} unsigned long init_decoder() { return EasyG729A_init_decoder();} bool decoder(unsigned long hDecoder, unsigned char *bitstream, short *synth_short) { return EasyG729A_decoder(hDecoder, bitstream, synth_short);} bool release_decoder(unsigned long hDecoder) { return EasyG729A_release_decoder(hDecoder);} }; #pragma data_seg(".G729A_SHARED") // define the segment #pragma comment(lib,"EasyG729A/EasyG729A.lib") static G729A_EasyCodec * m_G729Acodec = NULL; // specify the data and initialise at Instantiation #pragma data_seg() #pragma comment(linker, "/section:.G729A_SHARED,rws") // Link the segmenth323plus/plugins/audio/EasyCodec/EasyG7231.dsp0000644000175000017500000001066411341106231017564 0ustar markmark# Microsoft Developer Studio Project File - Name="EasyG7231" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=EasyG7231 - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "EasyG7231.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "EasyG7231.mak" CFG="EasyG7231 - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "EasyG7231 - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "EasyG7231 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "EasyG7231 - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Compile" # PROP Ignore_Export_Lib 1 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EasyG7231_EXPORTS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_CODEC_DLL_EXPORTS" /D "HAS_EASYG7231" /FD /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "NDEBUG" # ADD RSC /l 0xc09 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:"./Release/EasyG7231.pdb" /machine:I386 /out:"Release/EasyG7231_pwplugin.dll" /implib:"./Release/EasyG7231.lib" # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "EasyG7231 - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "../Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 1 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EasyG7231_EXPORTS" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_CODEC_DLL_EXPORTS" /D "HAS_EASYG7231" /YX"EasyG7231.h" /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "_DEBUG" # ADD RSC /l 0xc09 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 ptclib.lib ptlibs.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:"../../Debug/EasyG7231.pdb" /debug /machine:I386 /out:"Debug/EasyG7231_pwplugin.dll" /implib:"./Debug/EasyG7231.lib" /pdbtype:sept # SUBTRACT LINK32 /pdb:none !ENDIF # Begin Target # Name "EasyG7231 - Win32 Release" # Name "EasyG7231 - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\easycodecs.cxx # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\easycodecs.h # End Source File # Begin Source File SOURCE=.\g7231codec.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project h323plus/plugins/audio/EasyCodec/EasyG728.dsp0000644000175000017500000001063511341106231017506 0ustar markmark# Microsoft Developer Studio Project File - Name="EasyG728" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=EasyG728 - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "EasyG728.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "EasyG728.mak" CFG="EasyG728 - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "EasyG728 - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "EasyG728 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "EasyG728 - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Compile" # PROP Ignore_Export_Lib 1 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EasyG728_EXPORTS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_CODEC_DLL_EXPORTS" /D "HAS_EASYG728" /FD /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "NDEBUG" # ADD RSC /l 0xc09 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:"./Release/EasyG728.pdb" /machine:I386 /out:"Release/EasyG728_pwplugin.dll" /implib:"./Release/EasyG728.lib" # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "EasyG728 - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "../Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 1 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EasyG728_EXPORTS" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_CODEC_DLL_EXPORTS" /D "HAS_EASYG728" /YX"EasyG728.h" /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "_DEBUG" # ADD RSC /l 0xc09 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 ptclib.lib ptlibs.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:"../../Debug/EasyG728.pdb" /debug /machine:I386 /out:"Debug/EasyG728_pwplugin.dll" /implib:"./Debug/EasyG728.lib" /pdbtype:sept # SUBTRACT LINK32 /pdb:none !ENDIF # Begin Target # Name "EasyG728 - Win32 Release" # Name "EasyG728 - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\easycodecs.cxx # End Source File # Begin Source File SOURCE=.\easycodecs.h # End Source File # Begin Source File SOURCE=.\g728codec.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project h323plus/plugins/audio/EasyCodec/EasyG7231_2005.vcproj0000644000175000017500000001233611341106231020745 0ustar markmark h323plus/plugins/audio/Speex/0000755000175000017500000000000011341106241014746 5ustar markmarkh323plus/plugins/audio/Speex/README0000644000175000017500000000130011341106241015620 0ustar markmarkSee INSTALL file for instruction on how to install Speex. The Speex project aims to build an open-source patent-free voice codec. Unlike other codecs like MP3 and Ogg Vorbis, Speex is specially designed for compressing voice at low bit-rates for applications such as voice over IP (VoIP). In some sense, it is meant to be complementary to the Ogg Vorbis codec. Although we aim at providing a patent-free codec, we strongly suggest you have a look at patent issues if you are thinking about using Speex commercially. The speech coding field is a real patent minefield and the scope and enforceability of all these patents is sometimes unclear, not to mention that each country has different laws. h323plus/plugins/audio/Speex/Makefile.in0000644000175000017500000001251611341106241017020 0ustar markmark# # Makefile for Speex Codec Plugin # # Copyright (C) 2004 Post Increment, All Rights Reserved # # The contents of this file are subject to the Mozilla Public License # Version 1.0 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is Open H323 library. # # The Initial Developer of the Original Code is Post Increment # # Contributor(s): ______________________________________. # # $Log: Makefile.in,v $ # Revision 1.1 2010/02/24 02:19:13 shorne # First commit of h323plus mirror # # Revision 1.5 2007/04/19 06:09:03 csoutheren # Fixed plugin build system to use better detection for OSX # Resolved 1636262 - Fix for audio plugins for OSX # # Revision 1.4 2007/03/01 09:16:21 dereksmithies # Make certain it optimises the code when building the Speex codec # # Revision 1.3 2006/08/24 02:20:35 csoutheren # Fixed compile problems on Linux # # Revision 1.2 2006/07/31 09:09:17 csoutheren # Checkin of validated codec used during development # # Revision 1.1.2.1 2006/04/06 01:20:05 csoutheren # Ported audio codec plugins from OpenH323 to OPAL # # Revision 1.5 2004/09/09 00:25:34 csoutheren # Fixed Speex plugin on x64 systems thanks to Andrew Walrond. I know other # have submitted this fix too - my apolgies for not including your names # # Revision 1.4 2004/08/22 04:20:19 csoutheren # Added -fPIC to build commands to fix problems on 64 bit platforms # Thanks to Klaus Kaempf # # Revision 1.3 2004/06/24 23:33:17 csoutheren # Changed Makefiles to ensure all plugins have correct suffix # # Revision 1.2 2004/05/03 11:08:30 csoutheren # Modified to allow plugins to be created on various platforms # # Revision 1.1 2004/04/29 14:48:00 csoutheren # Reconfigured plugin makefiles per suggestions from Damien Sandras # Changed install targets to use $(INSTALL) # # Revision 1.4 2004/04/27 09:59:27 csoutheren # Updated codec specific Makefiles # # Revision 1.3 2004/04/09 12:24:18 csoutheren # Renamed h323plugin.h to opalplugin.h, and modified everything else # as required # # Revision 1.2 2004/04/04 12:57:49 csoutheren # Updated Makefiles and fixed Linux problems # # AC_PLUGIN_DIR=@AC_PLUGIN_DIR@ prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ target_os=@target_os@ SRCDIR = ./libspeex PLUGINDIR=../.. SONAME = speexcodec CC =@CC@ CFLAGS =@CFLAGS@ CXXFLAGS =@CXXFLAGS@ CXX =@CXX@ LDSO =@LDSO@ PLUGINEXT =@PLUGINEXT@ STDCCFLAGS =@STDCCFLAGS@ LDFLAGS =@LDFLAGS@ SPEEX_CFLAGS =@SPEEX_CFLAGS@ SPEEX_LIBS =@SPEEX_LIBS@ SPEEX_SYSTEM=@SPEEX_SYSTEM@ SRCS = speexcodec.cxx ifeq ($(SPEEX_SYSTEM),no) SRCS += $(SRCDIR)/bits.c \ $(SRCDIR)/cb_search.c \ $(SRCDIR)/exc_10_16_table.c \ $(SRCDIR)/exc_10_32_table.c \ $(SRCDIR)/exc_20_32_table.c \ $(SRCDIR)/exc_5_256_table.c \ $(SRCDIR)/exc_5_64_table.c \ $(SRCDIR)/exc_8_128_table.c \ $(SRCDIR)/fftwrap.c \ $(SRCDIR)/filters.c \ $(SRCDIR)/gain_table.c \ $(SRCDIR)/gain_table_lbr.c \ $(SRCDIR)/hexc_10_32_table.c \ $(SRCDIR)/hexc_table.c \ $(SRCDIR)/high_lsp_tables.c \ $(SRCDIR)/kiss_fft.c \ $(SRCDIR)/kiss_fftr.c \ $(SRCDIR)/lbr_48k_tables.c \ $(SRCDIR)/lpc.c \ $(SRCDIR)/lsp.c \ $(SRCDIR)/lsp_tables_nb.c \ $(SRCDIR)/ltp.c \ $(SRCDIR)/math_approx.c \ $(SRCDIR)/mdf.c \ $(SRCDIR)/medfilter.c \ $(SRCDIR)/misc.c \ $(SRCDIR)/modes.c \ $(SRCDIR)/nb_celp.c \ $(SRCDIR)/pcm_wrapper.c \ $(SRCDIR)/quant_lsp.c \ $(SRCDIR)/sb_celp.c \ $(SRCDIR)/smallft.c \ $(SRCDIR)/speex.c \ $(SRCDIR)/speex_callbacks.c \ $(SRCDIR)/speex_header.c \ $(SRCDIR)/speex_preprocess.c \ $(SRCDIR)/vbr.c \ $(SRCDIR)/vorbis_psy.c \ $(SRCDIR)/vq.c \ EXTRACCFLAGS = -I$(PLUGINDIR) EXTRALIBS = else EXTRACCFLAGS = $(SPEEX_CFLAGS) -I$(PLUGINDIR) EXTRALIBS = $(SPEEX_LIBS) endif OBJDIR = ./obj ifeq ($(VERBOSE),) Q_CC = @echo [CC] `echo $< | sed s^@OPALDIR@/^^` ; Q_LD = @echo [LD] `echo $(PLUGIN) | sed s^@OPALDIR@/^^` ; endif vpath %.o $(OBJDIR) vpath %.c $(SRCDIR) vpath %.cxx $(SRCDIR) $(OBJDIR)/%.o : %.c @mkdir -p $(OBJDIR) >/dev/null 2>&1 $(Q_CC)$(CC) -c $(STDCCFLAGS) $(EXTRACCFLAGS) $(CFLAGS) -o $@ $< $(OBJDIR)/%.o : %.cxx @mkdir -p $(OBJDIR) >/dev/null 2>&1 $(Q_LD)$(CXX) -c -I../../../include $(STDCCFLAGS) $(CXXFLAGS) $(EXTRACCFLAGS) -o $@ $< PLUGIN = ./speex_audio_pwplugin.$(PLUGINEXT) OBJECTS = $(addprefix $(OBJDIR)/,$(patsubst %.cxx,%.o,$(patsubst %.c,%.o,$(notdir $(SRCS))))) $(PLUGIN): $(OBJECTS) ifeq (solaris,$(findstring solaris,$(target_os))) $(Q_LD)$(CXX) $(LDSO) $@ -o $@ $^ $(EXTRALIBS) else $(Q_LD)$(CXX) $(LDSO) -o $@ $^ $(EXTRALIBS) endif install: mkdir -p $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR) install $(PLUGIN) $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR) uninstall: rm -f $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR)/$(PLUGIN) clean: rm -f $(OBJECTS) $(PLUGIN) ########################################### h323plus/plugins/audio/Speex/libspeex/0000755000175000017500000000000011341106241016561 5ustar markmarkh323plus/plugins/audio/Speex/libspeex/lsp.c0000644000175000017500000003647111341106241017536 0ustar markmark/*---------------------------------------------------------------------------*\ Original copyright FILE........: AKSLSPD.C TYPE........: Turbo C COMPANY.....: Voicetronix AUTHOR......: David Rowe DATE CREATED: 24/2/93 Heavily modified by Jean-Marc Valin (fixed-point, optimizations, additional functions, ...) This file contains functions for converting Linear Prediction Coefficients (LPC) to Line Spectral Pair (LSP) and back. Note that the LSP coefficients are not in radians format but in the x domain of the unit circle. Speex License: Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "lsp.h" #include "stack_alloc.h" #include "math_approx.h" #ifndef M_PI #define M_PI 3.14159265358979323846 /* pi */ #endif #ifndef NULL #define NULL 0 #endif #ifdef FIXED_POINT #define FREQ_SCALE 16384 /*#define ANGLE2X(a) (32768*cos(((a)/8192.)))*/ #define ANGLE2X(a) (SHL16(spx_cos(a),2)) /*#define X2ANGLE(x) (acos(.00006103515625*(x))*LSP_SCALING)*/ #define X2ANGLE(x) (spx_acos(x)) #else /*#define C1 0.99940307 #define C2 -0.49558072 #define C3 0.03679168*/ #define FREQ_SCALE 1. #define ANGLE2X(a) (spx_cos(a)) #define X2ANGLE(x) (acos(x)) #endif /*---------------------------------------------------------------------------*\ FUNCTION....: cheb_poly_eva() AUTHOR......: David Rowe DATE CREATED: 24/2/93 This function evaluates a series of Chebyshev polynomials \*---------------------------------------------------------------------------*/ #ifdef FIXED_POINT static inline spx_word32_t cheb_poly_eva(spx_word32_t *coef,spx_word16_t x,int m,char *stack) /* float coef[] coefficients of the polynomial to be evaluated */ /* float x the point where polynomial is to be evaluated */ /* int m order of the polynomial */ { int i; VARDECL(spx_word16_t *T); spx_word32_t sum; int m2=m>>1; VARDECL(spx_word16_t *coefn); /*Prevents overflows*/ if (x>16383) x = 16383; if (x<-16383) x = -16383; /* Allocate memory for Chebyshev series formulation */ ALLOC(T, m2+1, spx_word16_t); ALLOC(coefn, m2+1, spx_word16_t); for (i=0;i>1; /* Allocate memory for Chebyshev series formulation */ ALLOC(T, m2+1, float); /* Initialise values */ T[0]=1; T[1]=x; /* Evaluate Chebyshev series formulation using iterative approach */ /* Evaluate polynomial and return value also free memory space */ sum = coef[m2] + coef[m2-1]*x; x *= 2; for(i=2;i<=m2;i++) { T[i] = x*T[i-1] - T[i-2]; sum += coef[m2-i] * T[i]; } return sum; } #endif /*---------------------------------------------------------------------------*\ FUNCTION....: lpc_to_lsp() AUTHOR......: David Rowe DATE CREATED: 24/2/93 This function converts LPC coefficients to LSP coefficients. \*---------------------------------------------------------------------------*/ #ifdef FIXED_POINT #define SIGN_CHANGE(a,b) (((a)&0x70000000)^((b)&0x70000000)||(b==0)) #else #define SIGN_CHANGE(a,b) (((a)*(b))<0.0) #endif int lpc_to_lsp (spx_coef_t *a,int lpcrdr,spx_lsp_t *freq,int nb,spx_word16_t delta, char *stack) /* float *a lpc coefficients */ /* int lpcrdr order of LPC coefficients (10) */ /* float *freq LSP frequencies in the x domain */ /* int nb number of sub-intervals (4) */ /* float delta grid spacing interval (0.02) */ { spx_word16_t temp_xr,xl,xr,xm=0; spx_word32_t psuml,psumr,psumm,temp_psumr/*,temp_qsumr*/; int i,j,m,flag,k; VARDECL(spx_word32_t *Q); /* ptrs for memory allocation */ VARDECL(spx_word32_t *P); spx_word32_t *px; /* ptrs of respective P'(z) & Q'(z) */ spx_word32_t *qx; spx_word32_t *p; spx_word32_t *q; spx_word32_t *pt; /* ptr used for cheb_poly_eval() whether P' or Q' */ int roots=0; /* DR 8/2/94: number of roots found */ flag = 1; /* program is searching for a root when, 1 else has found one */ m = lpcrdr/2; /* order of P'(z) & Q'(z) polynomials */ /* Allocate memory space for polynomials */ ALLOC(Q, (m+1), spx_word32_t); ALLOC(P, (m+1), spx_word32_t); /* determine P'(z)'s and Q'(z)'s coefficients where P'(z) = P(z)/(1 + z^(-1)) and Q'(z) = Q(z)/(1-z^(-1)) */ px = P; /* initialise ptrs */ qx = Q; p = px; q = qx; #ifdef FIXED_POINT *px++ = LPC_SCALING; *qx++ = LPC_SCALING; for(i=0;i=32768) speex_warning_int("px", *px); if (fabs(*qx)>=32768) speex_warning_int("qx", *qx);*/ *px = PSHR32(*px,2); *qx = PSHR32(*qx,2); px++; qx++; } /* The reason for this lies in the way cheb_poly_eva() is implemented for fixed-point */ P[m] = PSHR32(P[m],3); Q[m] = PSHR32(Q[m],3); #else *px++ = LPC_SCALING; *qx++ = LPC_SCALING; for(i=0;i= -FREQ_SCALE)){ spx_word16_t dd; /* Modified by JMV to provide smaller steps around x=+-1 */ #ifdef FIXED_POINT dd = MULT16_16_Q15(delta,SUB16(FREQ_SCALE, MULT16_16_Q14(MULT16_16_Q14(xl,xl),14000))); if (psuml<512 && psuml>-512) dd = PSHR16(dd,1); #else dd=delta*(1-.9*xl*xl); if (fabs(psuml)<.2) dd *= .5; #endif xr = SUB16(xl, dd); /* interval spacing */ psumr = cheb_poly_eva(pt,xr,lpcrdr,stack);/* poly(xl-delta_x) */ temp_psumr = psumr; temp_xr = xr; /* if no sign change increment xr and re-evaluate poly(xr). Repeat til sign change. if a sign change has occurred the interval is bisected and then checked again for a sign change which determines in which interval the zero lies in. If there is no sign change between poly(xm) and poly(xl) set interval between xm and xr else set interval between xl and xr and repeat till root is located within the specified limits */ if(SIGN_CHANGE(psumr,psuml)) { roots++; psumm=psuml; for(k=0;k<=nb;k++){ #ifdef FIXED_POINT xm = ADD16(PSHR16(xl,1),PSHR16(xr,1)); /* bisect the interval */ #else xm = .5*(xl+xr); /* bisect the interval */ #endif psumm=cheb_poly_eva(pt,xm,lpcrdr,stack); /*if(psumm*psuml>0.)*/ if(!SIGN_CHANGE(psumm,psuml)) { psuml=psumm; xl=xm; } else { psumr=psumm; xr=xm; } } /* once zero is found, reset initial interval to xr */ freq[j] = X2ANGLE(xm); xl = xm; flag = 0; /* reset flag for next search */ } else{ psuml=temp_psumr; xl=temp_xr; } } } return(roots); } /*---------------------------------------------------------------------------*\ FUNCTION....: lsp_to_lpc() AUTHOR......: David Rowe DATE CREATED: 24/2/93 lsp_to_lpc: This function converts LSP coefficients to LPC coefficients. \*---------------------------------------------------------------------------*/ #ifdef FIXED_POINT void lsp_to_lpc(spx_lsp_t *freq,spx_coef_t *ak,int lpcrdr, char *stack) /* float *freq array of LSP frequencies in the x domain */ /* float *ak array of LPC coefficients */ /* int lpcrdr order of LPC coefficients */ { int i,j; spx_word32_t xout1,xout2,xin1,xin2; VARDECL(spx_word32_t *Wp); spx_word32_t *pw,*n1,*n2,*n3,*n4=NULL; VARDECL(spx_word16_t *freqn); int m = lpcrdr>>1; ALLOC(freqn, lpcrdr, spx_word16_t); for (i=0;i0) { if (xout1 + xout2>SHL32(EXTEND32(32766),8)) ak[j-1] = 32767; else if (xout1 + xout2 < -SHL32(EXTEND32(32766),8)) ak[j-1] = -32767; else ak[j-1] = EXTRACT16(PSHR32(ADD32(xout1,xout2),8)); } else {/*speex_warning_int("ak[0] = ", EXTRACT16(PSHR32(ADD32(xout1,xout2),8)));*/} *(n4+1) = xin1; *(n4+2) = xin2; xin1 = 0; xin2 = 0; } } #else void lsp_to_lpc(spx_lsp_t *freq,spx_coef_t *ak,int lpcrdr, char *stack) /* float *freq array of LSP frequencies in the x domain */ /* float *ak array of LPC coefficients */ /* int lpcrdr order of LPC coefficients */ { int i,j; float xout1,xout2,xin1,xin2; VARDECL(float *Wp); float *pw,*n1,*n2,*n3,*n4=NULL; VARDECL(float *x_freq); int m = lpcrdr>>1; ALLOC(Wp, 4*m+2, float); pw = Wp; /* initialise contents of array */ for(i=0;i<=4*m+1;i++){ /* set contents of buffer to 0 */ *pw++ = 0.0; } /* Set pointers up */ pw = Wp; xin1 = 1.0; xin2 = 1.0; ALLOC(x_freq, lpcrdr, float); for (i=0;i0) ak[j-1] = (xout1 + xout2)*0.5f; *(n4+1) = xin1; *(n4+2) = xin2; xin1 = 0.0; xin2 = 0.0; } } #endif #ifdef FIXED_POINT /*Makes sure the LSPs are stable*/ void lsp_enforce_margin(spx_lsp_t *lsp, int len, spx_word16_t margin) { int i; spx_word16_t m = margin; spx_word16_t m2 = 25736-margin; if (lsp[0]m2) lsp[len-1]=m2; for (i=1;ilsp[i+1]-m) lsp[i]= SHR16(lsp[i],1) + SHR16(lsp[i+1]-m,1); } } void lsp_interpolate(spx_lsp_t *old_lsp, spx_lsp_t *new_lsp, spx_lsp_t *interp_lsp, int len, int subframe, int nb_subframes) { int i; spx_word16_t tmp = DIV32_16(SHL32(EXTEND32(1 + subframe),14),nb_subframes); spx_word16_t tmp2 = 16384-tmp; for (i=0;iLSP_SCALING*(M_PI-margin)) lsp[len-1]=LSP_SCALING*(M_PI-margin); for (i=1;ilsp[i+1]-LSP_SCALING*margin) lsp[i]= .5f* (lsp[i] + lsp[i+1]-LSP_SCALING*margin); } } void lsp_interpolate(spx_lsp_t *old_lsp, spx_lsp_t *new_lsp, spx_lsp_t *interp_lsp, int len, int subframe, int nb_subframes) { int i; float tmp = (1.0f + subframe)/nb_subframes; for (i=0;i #include #include #include #ifdef __cplusplus extern "C" { #endif /* ATTENTION! If you would like a : -- a utility that will handle the caching of fft objects -- real-only (no imaginary time component ) FFT -- a multi-dimensional FFT -- a command-line utility to perform ffts -- a command-line utility to perform fast-convolution filtering Then see kfc.h kiss_fftr.h kiss_fftnd.h fftutil.c kiss_fastfir.c in the tools/ directory. */ #ifdef USE_SIMD # include # define kiss_fft_scalar __m128 #define KISS_FFT_MALLOC(nbytes) memalign(16,nbytes) #else #define KISS_FFT_MALLOC malloc #endif #ifdef FIXED_POINT #include # define kiss_fft_scalar int16_t #else # ifndef kiss_fft_scalar /* default is float */ # define kiss_fft_scalar float # endif #endif typedef struct { kiss_fft_scalar r; kiss_fft_scalar i; }kiss_fft_cpx; typedef struct kiss_fft_state* kiss_fft_cfg; /* * kiss_fft_alloc * * Initialize a FFT (or IFFT) algorithm's cfg/state buffer. * * typical usage: kiss_fft_cfg mycfg=kiss_fft_alloc(1024,0,NULL,NULL); * * The return value from fft_alloc is a cfg buffer used internally * by the fft routine or NULL. * * If lenmem is NULL, then kiss_fft_alloc will allocate a cfg buffer using malloc. * The returned value should be free()d when done to avoid memory leaks. * * The state can be placed in a user supplied buffer 'mem': * If lenmem is not NULL and mem is not NULL and *lenmem is large enough, * then the function places the cfg in mem and the size used in *lenmem * and returns mem. * * If lenmem is not NULL and ( mem is NULL or *lenmem is not large enough), * then the function returns NULL and places the minimum cfg * buffer size in *lenmem. * */ kiss_fft_cfg kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem); /* * kiss_fft(cfg,in_out_buf) * * Perform an FFT on a complex input buffer. * for a forward FFT, * fin should be f[0] , f[1] , ... ,f[nfft-1] * fout will be F[0] , F[1] , ... ,F[nfft-1] * Note that each element is complex and can be accessed like f[k].r and f[k].i * */ void kiss_fft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout); /* A more generic version of the above function. It reads its input from every Nth sample. * */ void kiss_fft_stride(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int fin_stride); /* If kiss_fft_alloc allocated a buffer, it is one contiguous buffer and can be simply free()d when no longer needed*/ #define kiss_fft_free free /* Cleans up some memory that gets managed internally. Not necessary to call, but it might clean up your compiler output to call this before you exit. */ void kiss_fft_cleanup(void); #ifdef __cplusplus } #endif #endif h323plus/plugins/audio/Speex/libspeex/kiss_fftr.c0000644000175000017500000001366611341106241020733 0ustar markmark/* Copyright (c) 2003-2004, Mark Borgerding All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef _WIN32 #pragma warning(disable:4244) #pragma warning(disable:4127) #endif #include "kiss_fftr.h" #include "_kiss_fft_guts.h" struct kiss_fftr_state{ kiss_fft_cfg substate; kiss_fft_cpx * tmpbuf; kiss_fft_cpx * super_twiddles; #ifdef USE_SIMD long pad; #endif }; kiss_fftr_cfg kiss_fftr_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem) { int i; kiss_fftr_cfg st = NULL; size_t subsize, memneeded; if (nfft & 1) { fprintf(stderr,"Real FFT optimization must be even.\n"); return NULL; } nfft >>= 1; kiss_fft_alloc (nfft, inverse_fft, NULL, &subsize); memneeded = sizeof(struct kiss_fftr_state) + subsize + sizeof(kiss_fft_cpx) * ( nfft * 2); if (lenmem == NULL) { st = (kiss_fftr_cfg) KISS_FFT_MALLOC (memneeded); } else { if (*lenmem >= memneeded) st = (kiss_fftr_cfg) mem; *lenmem = memneeded; } if (!st) return NULL; st->substate = (kiss_fft_cfg) (st + 1); /*just beyond kiss_fftr_state struct */ st->tmpbuf = (kiss_fft_cpx *) (((char *) st->substate) + subsize); st->super_twiddles = st->tmpbuf + nfft; kiss_fft_alloc(nfft, inverse_fft, st->substate, &subsize); for (i = 0; i < nfft; ++i) { double phase = -3.14159265358979323846264338327 * ((double) i / nfft + .5); if (inverse_fft) phase *= -1; kf_cexp (st->super_twiddles+i,phase); } return st; } void kiss_fftr(kiss_fftr_cfg st,const kiss_fft_scalar *timedata,kiss_fft_cpx *freqdata) { /* input buffer timedata is stored row-wise */ int k,ncfft; kiss_fft_cpx fpnk,fpk,f1k,f2k,tw,tdc; if ( st->substate->inverse) { fprintf(stderr,"kiss fft usage error: improper alloc\n"); exit(1); } ncfft = st->substate->nfft; /*perform the parallel fft of two real signals packed in real,imag*/ kiss_fft( st->substate , (const kiss_fft_cpx*)timedata, st->tmpbuf ); /* The real part of the DC element of the frequency spectrum in st->tmpbuf * contains the sum of the even-numbered elements of the input time sequence * The imag part is the sum of the odd-numbered elements * * The sum of tdc.r and tdc.i is the sum of the input time sequence. * yielding DC of input time sequence * The difference of tdc.r - tdc.i is the sum of the input (dot product) [1,-1,1,-1... * yielding Nyquist bin of input time sequence */ tdc.r = st->tmpbuf[0].r; tdc.i = st->tmpbuf[0].i; C_FIXDIV(tdc,2); CHECK_OVERFLOW_OP(tdc.r ,+, tdc.i); CHECK_OVERFLOW_OP(tdc.r ,-, tdc.i); freqdata[0].r = tdc.r + tdc.i; freqdata[ncfft].r = tdc.r - tdc.i; #ifdef USE_SIMD freqdata[ncfft].i = freqdata[0].i = _mm_set1_ps(0); #else freqdata[ncfft].i = freqdata[0].i = 0; #endif for ( k=1;k <= ncfft/2 ; ++k ) { fpk = st->tmpbuf[k]; fpnk.r = st->tmpbuf[ncfft-k].r; fpnk.i = - st->tmpbuf[ncfft-k].i; C_FIXDIV(fpk,2); C_FIXDIV(fpnk,2); C_ADD( f1k, fpk , fpnk ); C_SUB( f2k, fpk , fpnk ); C_MUL( tw , f2k , st->super_twiddles[k]); freqdata[k].r = HALF_OF(f1k.r + tw.r); freqdata[k].i = HALF_OF(f1k.i + tw.i); freqdata[ncfft-k].r = HALF_OF(f1k.r - tw.r); freqdata[ncfft-k].i = HALF_OF(tw.i - f1k.i); } } void kiss_fftri(kiss_fftr_cfg st,const kiss_fft_cpx *freqdata,kiss_fft_scalar *timedata) { /* input buffer timedata is stored row-wise */ int k, ncfft; if (st->substate->inverse == 0) { fprintf (stderr, "kiss fft usage error: improper alloc\n"); exit (1); } ncfft = st->substate->nfft; st->tmpbuf[0].r = freqdata[0].r + freqdata[ncfft].r; st->tmpbuf[0].i = freqdata[0].r - freqdata[ncfft].r; /*C_FIXDIV(st->tmpbuf[0],2);*/ for (k = 1; k <= ncfft / 2; ++k) { kiss_fft_cpx fk, fnkc, fek, fok, tmp; fk = freqdata[k]; fnkc.r = freqdata[ncfft - k].r; fnkc.i = -freqdata[ncfft - k].i; /*C_FIXDIV( fk , 2 ); C_FIXDIV( fnkc , 2 );*/ C_ADD (fek, fk, fnkc); C_SUB (tmp, fk, fnkc); C_MUL (fok, tmp, st->super_twiddles[k]); C_ADD (st->tmpbuf[k], fek, fok); C_SUB (st->tmpbuf[ncfft - k], fek, fok); #ifdef USE_SIMD st->tmpbuf[ncfft - k].i *= _mm_set1_ps(-1.0); #else st->tmpbuf[ncfft - k].i *= -1; #endif } kiss_fft (st->substate, st->tmpbuf, (kiss_fft_cpx *) timedata); } h323plus/plugins/audio/Speex/libspeex/Makefile.in0000644000175000017500000004761611341106241020644 0ustar markmark# Makefile.in generated by automake 1.8.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Disable automatic dependency tracking if using other tools than gcc and gmake #AUTOMAKE_OPTIONS = no-dependencies SOURCES = $(libspeex_la_SOURCES) srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ subdir = libspeex DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(libdir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) libspeex_la_LIBADD = am_libspeex_la_OBJECTS = nb_celp.lo sb_celp.lo lpc.lo ltp.lo lsp.lo \ quant_lsp.lo lsp_tables_nb.lo gain_table.lo gain_table_lbr.lo \ cb_search.lo filters.lo bits.lo modes.lo speex.lo vq.lo \ high_lsp_tables.lo vbr.lo hexc_table.lo exc_5_256_table.lo \ exc_5_64_table.lo exc_8_128_table.lo exc_10_32_table.lo \ exc_10_16_table.lo exc_20_32_table.lo hexc_10_32_table.lo \ misc.lo speex_header.lo speex_callbacks.lo math_approx.lo \ stereo.lo preprocess.lo smallft.lo lbr_48k_tables.lo jitter.lo \ mdf.lo libspeex_la_OBJECTS = $(am_libspeex_la_OBJECTS) DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/bits.Plo ./$(DEPDIR)/cb_search.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/exc_10_16_table.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/exc_10_32_table.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/exc_20_32_table.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/exc_5_256_table.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/exc_5_64_table.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/exc_8_128_table.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/filters.Plo ./$(DEPDIR)/gain_table.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/gain_table_lbr.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/hexc_10_32_table.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/hexc_table.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/high_lsp_tables.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/jitter.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/lbr_48k_tables.Plo ./$(DEPDIR)/lpc.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/lsp.Plo ./$(DEPDIR)/lsp_tables_nb.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/ltp.Plo ./$(DEPDIR)/math_approx.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/mdf.Plo ./$(DEPDIR)/misc.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/modes.Plo ./$(DEPDIR)/nb_celp.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/preprocess.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/quant_lsp.Plo ./$(DEPDIR)/sb_celp.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/smallft.Plo ./$(DEPDIR)/speex.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/speex_callbacks.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/speex_header.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/stereo.Plo ./$(DEPDIR)/vbr.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vq.Plo COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libspeex_la_SOURCES) DIST_SOURCES = $(libspeex_la_SOURCES) HEADERS = $(noinst_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ OGG_CFLAGS = @OGG_CFLAGS@ OGG_LIBS = @OGG_LIBS@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIZE16 = @SIZE16@ SIZE32 = @SIZE32@ SPEEX_LT_AGE = @SPEEX_LT_AGE@ SPEEX_LT_CURRENT = @SPEEX_LT_CURRENT@ SPEEX_LT_REVISION = @SPEEX_LT_REVISION@ SPEEX_VERSION = @SPEEX_VERSION@ STRIP = @STRIP@ VERSION = @VERSION@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ src = @src@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ EXTRA_DIST = testenc.c testenc_wb.c testenc_uwb.c testdenoise.c testecho.c INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include -I$(top_builddir) @OGG_CFLAGS@ lib_LTLIBRARIES = libspeex.la # Sources for compilation in the library libspeex_la_SOURCES = nb_celp.c \ sb_celp.c \ lpc.c \ ltp.c \ lsp.c \ quant_lsp.c \ lsp_tables_nb.c \ gain_table.c \ gain_table_lbr.c \ cb_search.c \ filters.c \ bits.c \ modes.c \ speex.c \ vq.c \ high_lsp_tables.c \ vbr.c \ hexc_table.c \ exc_5_256_table.c \ exc_5_64_table.c \ exc_8_128_table.c \ exc_10_32_table.c \ exc_10_16_table.c \ exc_20_32_table.c \ hexc_10_32_table.c \ misc.c \ speex_header.c \ speex_callbacks.c \ math_approx.c \ stereo.c \ preprocess.c \ smallft.c \ lbr_48k_tables.c \ jitter.c \ mdf.c noinst_HEADERS = lsp.h \ nb_celp.h \ lpc.h \ lpc_bfin.h \ ltp.h \ quant_lsp.h \ cb_search.h \ filters.h \ stack_alloc.h \ vq.h \ vq_sse.h \ vq_arm4.h \ vq_bfin.h \ modes.h \ sb_celp.h \ vbr.h \ misc.h \ misc_bfin.h \ ltp_sse.h \ ltp_arm4.h \ ltp_bfin.h \ filters_sse.h \ filters_arm4.h \ filters_bfin.h \ math_approx.h \ smallft.h \ arch.h \ fixed_arm4.h \ fixed_arm5e.h \ fixed_bfin.h \ fixed_debug.h \ fixed_generic.h \ cb_search_sse.h \ cb_search_arm4.h \ cb_search_bfin.h libspeex_la_LDFLAGS = -version-info @SPEEX_LT_CURRENT@:@SPEEX_LT_REVISION@:@SPEEX_LT_AGE@ all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libspeex/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu libspeex/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libspeex.la: $(libspeex_la_OBJECTS) $(libspeex_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libspeex_la_LDFLAGS) $(libspeex_la_OBJECTS) $(libspeex_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bits.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cb_search.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exc_10_16_table.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exc_10_32_table.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exc_20_32_table.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exc_5_256_table.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exc_5_64_table.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exc_8_128_table.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filters.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gain_table.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gain_table_lbr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hexc_10_32_table.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hexc_table.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/high_lsp_tables.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jitter.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lbr_48k_tables.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lpc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lsp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lsp_tables_nb.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ltp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/math_approx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mdf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/modes.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nb_celp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/preprocess.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quant_lsp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sb_celp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smallft.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/speex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/speex_callbacks.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/speex_header.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stereo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vbr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vq.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-libLTLIBRARIES install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-info install-info-am \ install-libLTLIBRARIES install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-info-am \ uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: h323plus/plugins/audio/Speex/libspeex/exc_20_32_table.c0000644000175000017500000000676711341106241021500 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin File: exc_20_32_table.c Codebook for excitation in narrowband CELP mode (2000 bps) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ const signed char exc_20_32_table[640] = { 12,32,25,46,36,33,9,14,-3,6,1,-8,0,-10,-5,-7,-7,-7,-5,-5, 31,-27,24,-32,-4,10,-11,21,-3,19,23,-9,22,24,-10,-1,-10,-13,-7,-11, 42,-33,31,19,-8,0,-10,-16,1,-21,-17,10,-8,14,8,4,11,-2,5,-2, -33,11,-16,33,11,-4,9,-4,11,2,6,-5,8,-5,11,-4,-6,26,-36,-16, 0,4,-2,-8,12,6,-1,34,-46,-22,9,9,21,9,5,-66,-5,26,2,10, 13,2,19,9,12,-81,3,13,13,0,-14,22,-35,6,-7,-4,6,-6,10,-6, -31,38,-33,0,-10,-11,5,-12,12,-17,5,0,-6,13,-9,10,8,25,33,2, -12,8,-6,10,-2,21,7,17,43,5,11,-7,-9,-20,-36,-20,-23,-4,-4,-3, 27,-9,-9,-49,-39,-38,-11,-9,6,5,23,25,5,3,3,4,1,2,-3,-1, 87,39,17,-21,-9,-19,-9,-15,-13,-14,-17,-11,-10,-11,-8,-6,-1,-3,-3,-1, -54,-34,-27,-8,-11,-4,-5,0,0,4,8,6,9,7,9,7,6,5,5,5, 48,10,19,-10,12,-1,9,-3,2,5,-3,2,-2,-2,0,-2,-26,6,9,-7, -16,-9,2,7,7,-5,-43,11,22,-11,-9,34,37,-15,-13,-6,1,-1,1,1, -64,56,52,-11,-27,5,4,3,1,2,1,3,-1,-4,-4,-10,-7,-4,-4,2, -1,-7,-7,-12,-10,-15,-9,-5,-5,-11,-16,-13,6,16,4,-13,-16,-10,-4,2, -47,-13,25,47,19,-14,-20,-8,-17,0,-3,-13,1,6,-17,-14,15,1,10,6, -24,0,-10,19,-69,-8,14,49,17,-5,33,-29,3,-4,0,2,-8,5,-6,2, 120,-56,-12,-47,23,-9,6,-5,1,2,-5,1,-10,4,-1,-1,4,-1,0,-3, 30,-52,-67,30,22,11,-1,-4,3,0,7,2,0,1,-10,-4,-8,-13,5,1, 1,-1,5,13,-9,-3,-10,-62,22,48,-4,-6,2,3,5,1,1,4,1,13, 3,-20,10,-9,13,-2,-4,9,-20,44,-1,20,-32,-67,19,0,28,11,8,2, -11,15,-19,-53,31,2,34,10,6,-4,-58,8,10,13,14,1,12,2,0,0, -128,37,-8,44,-9,26,-3,18,2,6,11,-1,9,1,5,3,0,1,1,2, 12,3,-2,-3,7,25,9,18,-6,-37,3,-8,-16,3,-10,-7,17,-34,-44,11, 17,-15,-3,-16,-1,-13,11,-46,-65,-2,8,13,2,4,4,5,15,5,9,6, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -9,19,-12,12,-28,38,29,-1,12,2,5,23,-10,3,4,-15,21,-4,3,3, 6,17,-9,-4,-8,-20,26,5,-10,6,1,-19,18,-15,-12,47,-6,-2,-7,-9, -1,-17,-2,-2,-14,30,-14,2,-7,-4,-1,-12,11,-25,16,-3,-12,11,-7,7, -17,1,19,-28,31,-7,-10,7,-10,3,12,5,-16,6,24,41,-29,-54,0,1, 7,-1,5,-6,13,10,-4,-8,8,-9,-27,-53,-38,-1,10,19,17,16,12,12, 0,3,-7,-4,13,12,-31,-14,6,-5,3,5,17,43,50,25,10,1,-6,-2}; h323plus/plugins/audio/Speex/libspeex/testecho.c0000644000175000017500000000221311341106241020541 0ustar markmark#ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #include "speex_echo.h" #include "speex_preprocess.h" #define NN 160 int main(int argc, char **argv) { int echo_fd, ref_fd, e_fd; spx_int32_t noise[NN+1]; short echo_buf[NN], ref_buf[NN], e_buf[NN]; SpeexEchoState *st; SpeexPreprocessState *den; if (argc != 4) { fprintf (stderr, "testecho mic_signal.sw speaker_signal.sw output.sw\n"); exit(1); } echo_fd = open (argv[2], O_RDONLY); ref_fd = open (argv[1], O_RDONLY); e_fd = open (argv[3], O_WRONLY | O_CREAT | O_TRUNC, 0644); st = speex_echo_state_init(NN, 8*NN); den = speex_preprocess_state_init(NN, 8000); while (read(ref_fd, ref_buf, NN*2)) { read(echo_fd, echo_buf, NN*2); speex_echo_cancel(st, ref_buf, echo_buf, e_buf, noise); /*speex_preprocess(den, e_buf, noise);*/ write(e_fd, e_buf, NN*2); } speex_echo_state_destroy(st); speex_preprocess_state_destroy(den); close(e_fd); close(echo_fd); close(ref_fd); return 0; } h323plus/plugins/audio/Speex/libspeex/ltp_sse.h0000644000175000017500000000622411341106241020407 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin */ /** @file ltp_sse.h @brief Long-Term Prediction functions (SSE version) */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #define OVERRIDE_INNER_PROD static float inner_prod(const float *a, const float *b, int len) { int i; float ret; __m128 sum = _mm_setzero_ps(); for (i=0;i<(len>>2);i+=2) { sum = _mm_add_ps(sum, _mm_mul_ps(_mm_loadu_ps(a+0), _mm_loadu_ps(b+0))); sum = _mm_add_ps(sum, _mm_mul_ps(_mm_loadu_ps(a+4), _mm_loadu_ps(b+4))); a += 8; b += 8; } sum = _mm_add_ps(sum, _mm_movehl_ps(sum, sum)); sum = _mm_add_ss(sum, _mm_shuffle_ps(sum, sum, 0x55)); _mm_store_ss(&ret, sum); return ret; } #define OVERRIDE_PITCH_XCORR static void pitch_xcorr(const float *_x, const float *_y, float *corr, int len, int nb_pitch, char *stack) { int i, offset; VARDECL(__m128 *x); VARDECL(__m128 *y); int N, L; N = len>>2; L = nb_pitch>>2; ALLOC(x, N, __m128); ALLOC(y, N+L, __m128); for (i=0;i0 ? g[0] : -SHR16(g[0],1)) + (g[2]>0 ? g[2] : -SHR16(g[2],1))) #else #define gain_3tap_to_1tap(g) (ABS(g[1]) + (g[0]>0 ? g[0] : -.5*g[0]) + (g[2]>0 ? g[2] : -.5*g[2])) #endif void open_loop_nbest_pitch(spx_sig_t *sw, int start, int end, int len, int *pitch, spx_word16_t *gain, int N, char *stack); /** Finds the best quantized 3-tap pitch predictor by analysis by synthesis */ int pitch_search_3tap( spx_sig_t target[], /* Target vector */ spx_sig_t *sw, spx_coef_t ak[], /* LPCs for this subframe */ spx_coef_t awk1[], /* Weighted LPCs #1 for this subframe */ spx_coef_t awk2[], /* Weighted LPCs #2 for this subframe */ spx_sig_t exc[], /* Overlapping codebook */ const void *par, int start, /* Smallest pitch value allowed */ int end, /* Largest pitch value allowed */ spx_word16_t pitch_coef, /* Voicing (pitch) coefficient */ int p, /* Number of LPC coeffs */ int nsf, /* Number of samples in subframe */ SpeexBits *bits, char *stack, spx_sig_t *exc2, spx_word16_t *r, int complexity, int cdbk_offset, int plc_tuning ); /*Unquantize adaptive codebook and update pitch contribution*/ void pitch_unquant_3tap( spx_sig_t exc[], /* Excitation */ int start, /* Smallest pitch value allowed */ int end, /* Largest pitch value allowed */ spx_word16_t pitch_coef, /* Voicing (pitch) coefficient */ const void *par, int nsf, /* Number of samples in subframe */ int *pitch_val, spx_word16_t *gain_val, SpeexBits *bits, char *stack, int lost, int subframe_offset, spx_word16_t last_pitch_gain, int cdbk_offset ); /** Forced pitch delay and gain */ int forced_pitch_quant( spx_sig_t target[], /* Target vector */ spx_sig_t *sw, spx_coef_t ak[], /* LPCs for this subframe */ spx_coef_t awk1[], /* Weighted LPCs #1 for this subframe */ spx_coef_t awk2[], /* Weighted LPCs #2 for this subframe */ spx_sig_t exc[], /* Excitation */ const void *par, int start, /* Smallest pitch value allowed */ int end, /* Largest pitch value allowed */ spx_word16_t pitch_coef, /* Voicing (pitch) coefficient */ int p, /* Number of LPC coeffs */ int nsf, /* Number of samples in subframe */ SpeexBits *bits, char *stack, spx_sig_t *exc2, spx_word16_t *r, int complexity, int cdbk_offset, int plc_tuning ); /** Unquantize forced pitch delay and gain */ void forced_pitch_unquant( spx_sig_t exc[], /* Excitation */ int start, /* Smallest pitch value allowed */ int end, /* Largest pitch value allowed */ spx_word16_t pitch_coef, /* Voicing (pitch) coefficient */ const void *par, int nsf, /* Number of samples in subframe */ int *pitch_val, spx_word16_t *gain_val, SpeexBits *bits, char *stack, int lost, int subframe_offset, spx_word16_t last_pitch_gain, int cdbk_offset ); h323plus/plugins/audio/Speex/libspeex/_kiss_fft_guts.h0000644000175000017500000001203611341106241021745 0ustar markmark/* Copyright (c) 2003-2004, Mark Borgerding All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* kiss_fft.h defines kiss_fft_scalar as either short or a float type and defines typedef struct { kiss_fft_scalar r; kiss_fft_scalar i; }kiss_fft_cpx; */ #include "kiss_fft.h" #include #define MAXFACTORS 32 /* e.g. an fft of length 128 has 4 factors as far as kissfft is concerned 4*4*4*2 */ struct kiss_fft_state{ int nfft; int inverse; int factors[2*MAXFACTORS]; kiss_fft_cpx twiddles[1]; }; /* Explanation of macros dealing with complex math: C_MUL(m,a,b) : m = a*b C_FIXDIV( c , div ) : if a fixed point impl., c /= div. noop otherwise C_SUB( res, a,b) : res = a - b C_SUBFROM( res , a) : res -= a C_ADDTO( res , a) : res += a * */ #ifdef FIXED_POINT # define FRACBITS 15 # define SAMPPROD int32_t #define SAMP_MAX 32767 #define SAMP_MIN -SAMP_MAX #if defined(CHECK_OVERFLOW) # define CHECK_OVERFLOW_OP(a,op,b) \ if ( (SAMPPROD)(a) op (SAMPPROD)(b) > SAMP_MAX || (SAMPPROD)(a) op (SAMPPROD)(b) < SAMP_MIN ) { \ fprintf(stderr,"WARNING:overflow @ " __FILE__ "(%d): (%d " #op" %d) = %ld\n",__LINE__,(a),(b),(SAMPPROD)(a) op (SAMPPROD)(b) ); } #endif # define smul(a,b) ( (SAMPPROD)(a)*(b) ) # define sround( x ) (kiss_fft_scalar)( ( (x) + (1<<(FRACBITS-1)) ) >> FRACBITS ) # define S_MUL(a,b) sround( smul(a,b) ) # define C_MUL(m,a,b) \ do{ (m).r = sround( smul((a).r,(b).r) - smul((a).i,(b).i) ); \ (m).i = sround( smul((a).r,(b).i) + smul((a).i,(b).r) ); }while(0) # define DIVSCALAR(x,k) \ (x) = sround( smul( x, SAMP_MAX/k ) ) # define C_FIXDIV(c,div) \ do { DIVSCALAR( (c).r , div); \ DIVSCALAR( (c).i , div); }while (0) # define C_MULBYSCALAR( c, s ) \ do{ (c).r = sround( smul( (c).r , s ) ) ;\ (c).i = sround( smul( (c).i , s ) ) ; }while(0) #else /* not FIXED_POINT*/ # define S_MUL(a,b) ( (a)*(b) ) #define C_MUL(m,a,b) \ do{ (m).r = (a).r*(b).r - (a).i*(b).i;\ (m).i = (a).r*(b).i + (a).i*(b).r; }while(0) # define C_FIXDIV(c,div) /* NOOP */ # define C_MULBYSCALAR( c, s ) \ do{ (c).r *= (s);\ (c).i *= (s); }while(0) #endif #ifndef CHECK_OVERFLOW_OP # define CHECK_OVERFLOW_OP(a,op,b) /* noop */ #endif #define C_ADD( res, a,b)\ do { \ CHECK_OVERFLOW_OP((a).r,+,(b).r)\ CHECK_OVERFLOW_OP((a).i,+,(b).i)\ (res).r=(a).r+(b).r; (res).i=(a).i+(b).i; \ }while(0) #define C_SUB( res, a,b)\ do { \ CHECK_OVERFLOW_OP((a).r,-,(b).r)\ CHECK_OVERFLOW_OP((a).i,-,(b).i)\ (res).r=(a).r-(b).r; (res).i=(a).i-(b).i; \ }while(0) #define C_ADDTO( res , a)\ do { \ CHECK_OVERFLOW_OP((res).r,+,(a).r)\ CHECK_OVERFLOW_OP((res).i,+,(a).i)\ (res).r += (a).r; (res).i += (a).i;\ }while(0) #define C_SUBFROM( res , a)\ do {\ CHECK_OVERFLOW_OP((res).r,-,(a).r)\ CHECK_OVERFLOW_OP((res).i,-,(a).i)\ (res).r -= (a).r; (res).i -= (a).i; \ }while(0) #ifdef FIXED_POINT # define KISS_FFT_COS(phase) floor(.5+SAMP_MAX * cos (phase)) # define KISS_FFT_SIN(phase) floor(.5+SAMP_MAX * sin (phase)) # define HALF_OF(x) ((x)>>1) #elif defined(USE_SIMD) # define KISS_FFT_COS(phase) _mm_set1_ps( cos(phase) ) # define KISS_FFT_SIN(phase) _mm_set1_ps( sin(phase) ) # define HALF_OF(x) ((x)*_mm_set1_ps(.5)) #else # define KISS_FFT_COS(phase) (kiss_fft_scalar) cos(phase) # define KISS_FFT_SIN(phase) (kiss_fft_scalar) sin(phase) # define HALF_OF(x) ((x)*.5) #endif #define kf_cexp(x,phase) \ do{ \ (x)->r = KISS_FFT_COS(phase);\ (x)->i = KISS_FFT_SIN(phase);\ }while(0) /* a debugging function */ #define pcpx(c)\ fprintf(stderr,"%g + %gi\n",(double)((c)->r),(double)((c)->i) ) h323plus/plugins/audio/Speex/libspeex/vbr.c0000644000175000017500000002043311341106241017520 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin File: vbr.c VBR-related routines Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "vbr.h" #include #define sqr(x) ((x)*(x)) #define MIN_ENERGY 6000 #define NOISE_POW .3 const float vbr_nb_thresh[9][11]={ {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0}, /* CNG */ { 3.5, 2.5, 2.0, 1.2, 0.5, 0.0, -0.5, -0.7, -0.8, -0.9, -1.0}, /* 2 kbps */ {10.0, 6.5, 5.2, 4.5, 3.9, 3.5, 3.0, 2.5, 2.3, 1.8, 1.0}, /* 6 kbps */ {11.0, 8.8, 7.5, 6.5, 5.0, 3.9, 3.9, 3.9, 3.5, 3.0, 1.0}, /* 8 kbps */ {11.0, 11.0, 9.9, 9.0, 8.0, 7.0, 6.5, 6.0, 5.0, 4.0, 2.0}, /* 11 kbps */ {11.0, 11.0, 11.0, 11.0, 9.5, 9.0, 8.0, 7.0, 6.5, 5.0, 3.0}, /* 15 kbps */ {11.0, 11.0, 11.0, 11.0, 11.0, 11.0, 9.5, 8.5, 8.0, 6.5, 4.0}, /* 18 kbps */ {11.0, 11.0, 11.0, 11.0, 11.0, 11.0, 11.0, 11.0, 9.8, 7.5, 5.5}, /* 24 kbps */ { 8.0, 5.0, 3.7, 3.0, 2.5, 2.0, 1.8, 1.5, 1.0, 0.0, 0.0} /* 4 kbps */ }; const float vbr_hb_thresh[5][11]={ {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0}, /* silence */ {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0}, /* 2 kbps */ {11.0, 11.0, 9.5, 8.5, 7.5, 6.0, 5.0, 3.9, 3.0, 2.0, 1.0}, /* 6 kbps */ {11.0, 11.0, 11.0, 11.0, 11.0, 9.5, 8.7, 7.8, 7.0, 6.5, 4.0}, /* 10 kbps */ {11.0, 11.0, 11.0, 11.0, 11.0, 11.0, 11.0, 11.0, 9.8, 7.5, 5.5} /* 18 kbps */ }; const float vbr_uhb_thresh[2][11]={ {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0}, /* silence */ { 3.9, 2.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0} /* 2 kbps */ }; void vbr_init(VBRState *vbr) { int i; vbr->average_energy=0; vbr->last_energy=1; vbr->accum_sum=0; vbr->energy_alpha=.1; vbr->soft_pitch=0; vbr->last_pitch_coef=0; vbr->last_quality=0; vbr->noise_accum = .05*pow(MIN_ENERGY, NOISE_POW); vbr->noise_accum_count=.05; vbr->noise_level=vbr->noise_accum/vbr->noise_accum_count; vbr->consec_noise=0; for (i=0;ilast_log_energy[i] = log(MIN_ENERGY); } /* This function should analyse the signal and decide how critical the coding error will be perceptually. The following factors should be taken into account: -Attacks (positive energy derivative) should be coded with more bits -Stationary voiced segments should receive more bits -Segments with (very) low absolute energy should receive less bits (maybe only shaped noise?) -DTX for near-zero energy? -Stationary fricative segments should have less bits -Temporal masking: when energy slope is decreasing, decrease the bit-rate -Decrease bit-rate for males (low pitch)? -(wideband only) less bits in the high-band when signal is very non-stationary (harder to notice high-frequency noise)??? */ float vbr_analysis(VBRState *vbr, spx_word16_t *sig, int len, int pitch, float pitch_coef) { int i; float ener=0, ener1=0, ener2=0; float qual=7; int va; float log_energy; float non_st=0; float voicing; float pow_ener; for (i=0;i>1;i++) ener1 += ((float)sig[i])*sig[i]; for (i=len>>1;ilast_log_energy[i]); non_st = non_st/(30*VBR_MEMORY_SIZE); if (non_st>1) non_st=1; voicing = 3*(pitch_coef-.4)*fabs(pitch_coef-.4); vbr->average_energy = (1-vbr->energy_alpha)*vbr->average_energy + vbr->energy_alpha*ener; vbr->noise_level=vbr->noise_accum/vbr->noise_accum_count; pow_ener = pow(ener,NOISE_POW); if (vbr->noise_accum_count<.06 && ener>MIN_ENERGY) vbr->noise_accum = .05*pow_ener; if ((voicing<.3 && non_st < .2 && pow_ener < 1.2*vbr->noise_level) || (voicing<.3 && non_st < .05 && pow_ener < 1.5*vbr->noise_level) || (voicing<.4 && non_st < .05 && pow_ener < 1.2*vbr->noise_level) || (voicing<0 && non_st < .05)) { float tmp; va = 0; vbr->consec_noise++; if (pow_ener > 3*vbr->noise_level) tmp = 3*vbr->noise_level; else tmp = pow_ener; if (vbr->consec_noise>=4) { vbr->noise_accum = .95*vbr->noise_accum + .05*tmp; vbr->noise_accum_count = .95*vbr->noise_accum_count + .05; } } else { va = 1; vbr->consec_noise=0; } if (pow_ener < vbr->noise_level && ener>MIN_ENERGY) { vbr->noise_accum = .95*vbr->noise_accum + .05*pow_ener; vbr->noise_accum_count = .95*vbr->noise_accum_count + .05; } /* Checking for very low absolute energy */ if (ener < 30000) { qual -= .7; if (ener < 10000) qual-=.7; if (ener < 3000) qual-=.7; } else { float short_diff, long_diff; short_diff = log((ener+1)/(1+vbr->last_energy)); long_diff = log((ener+1)/(1+vbr->average_energy)); /*fprintf (stderr, "%f %f\n", short_diff, long_diff);*/ if (long_diff<-5) long_diff=-5; if (long_diff>2) long_diff=2; if (long_diff>0) qual += .6*long_diff; if (long_diff<0) qual += .5*long_diff; if (short_diff>0) { if (short_diff>5) short_diff=5; qual += .5*short_diff; } /* Checking for energy increases */ if (ener2 > 1.6*ener1) qual += .5; } vbr->last_energy = ener; vbr->soft_pitch = .6*vbr->soft_pitch + .4*pitch_coef; qual += 2.2*((pitch_coef-.4) + (vbr->soft_pitch-.4)); if (qual < vbr->last_quality) qual = .5*qual + .5*vbr->last_quality; if (qual<4) qual=4; if (qual>10) qual=10; /* if (vbr->consec_noise>=2) qual-=1.3; if (vbr->consec_noise>=5) qual-=1.3; if (vbr->consec_noise>=12) qual-=1.3; */ if (vbr->consec_noise>=3) qual=4; if (vbr->consec_noise) qual -= 1.0 * (log(3.0 + vbr->consec_noise)-log(3)); if (qual<0) qual=0; if (ener<60000) { if (vbr->consec_noise>2) qual-=0.5*(log(3.0 + vbr->consec_noise)-log(3)); if (ener<10000&&vbr->consec_noise>2) qual-=0.5*(log(3.0 + vbr->consec_noise)-log(3)); if (qual<0) qual=0; qual += .3*log(ener/60000.0); } if (qual<-1) qual=-1; /*printf ("%f %f %f %f %d\n", qual, voicing, non_st, pow_ener/(.01+vbr->noise_level), va);*/ vbr->last_pitch_coef = pitch_coef; vbr->last_quality = qual; for (i=VBR_MEMORY_SIZE-1;i>0;i--) vbr->last_log_energy[i] = vbr->last_log_energy[i-1]; vbr->last_log_energy[0] = log_energy; /*printf ("VBR: %f %f %f %d %f\n", (float)(log_energy-log(vbr->average_energy+MIN_ENERGY)), non_st, voicing, va, vbr->noise_level);*/ return qual; } void vbr_destroy(VBRState *vbr) { } h323plus/plugins/audio/Speex/libspeex/speex_callbacks.h0000644000175000017500000001077411341106241022066 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin*/ /** @file speex_callbacks.h @brief Describes callback handling and in-band signalling */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef SPEEX_CALLBACKS_H #define SPEEX_CALLBACKS_H #include "speex.h" #ifdef __cplusplus extern "C" { #endif /** Total number of callbacks */ #define SPEEX_MAX_CALLBACKS 16 /* Describes all the in-band requests */ /*These are 1-bit requests*/ /** Request for perceptual enhancement (1 for on, 0 for off) */ #define SPEEX_INBAND_ENH_REQUEST 0 /** Reserved */ #define SPEEX_INBAND_RESERVED1 1 /*These are 4-bit requests*/ /** Request for a mode change */ #define SPEEX_INBAND_MODE_REQUEST 2 /** Request for a low mode change */ #define SPEEX_INBAND_LOW_MODE_REQUEST 3 /** Request for a high mode change */ #define SPEEX_INBAND_HIGH_MODE_REQUEST 4 /** Request for VBR (1 on, 0 off) */ #define SPEEX_INBAND_VBR_QUALITY_REQUEST 5 /** Request to be sent acknowledge */ #define SPEEX_INBAND_ACKNOWLEDGE_REQUEST 6 /** Request for VBR (1 for on, 0 for off) */ #define SPEEX_INBAND_VBR_REQUEST 7 /*These are 8-bit requests*/ /** Send a character in-band */ #define SPEEX_INBAND_CHAR 8 /** Intensity stereo information */ #define SPEEX_INBAND_STEREO 9 /*These are 16-bit requests*/ /** Transmit max bit-rate allowed */ #define SPEEX_INBAND_MAX_BITRATE 10 /*These are 32-bit requests*/ /** Acknowledge packet reception */ #define SPEEX_INBAND_ACKNOWLEDGE 12 /** Callback function type */ typedef int (*speex_callback_func)(SpeexBits *bits, void *state, void *data); /** Callback information */ typedef struct SpeexCallback { int callback_id; /**< ID associated to the callback */ speex_callback_func func; /**< Callback handler function */ void *data; /**< Data that will be sent to the handler */ void *reserved1; /**< Reserved for future use */ int reserved2; /**< Reserved for future use */ } SpeexCallback; /** Handle in-band request */ int speex_inband_handler(SpeexBits *bits, SpeexCallback *callback_list, void *state); /** Standard handler for mode request (change mode, no questions asked) */ int speex_std_mode_request_handler(SpeexBits *bits, void *state, void *data); /** Standard handler for high mode request (change high mode, no questions asked) */ int speex_std_high_mode_request_handler(SpeexBits *bits, void *state, void *data); /** Standard handler for in-band characters (write to stderr) */ int speex_std_char_handler(SpeexBits *bits, void *state, void *data); /** Default handler for user-defined requests: in this case, just ignore */ int speex_default_user_handler(SpeexBits *bits, void *state, void *data); int speex_std_low_mode_request_handler(SpeexBits *bits, void *state, void *data); int speex_std_vbr_request_handler(SpeexBits *bits, void *state, void *data); int speex_std_enh_request_handler(SpeexBits *bits, void *state, void *data); int speex_std_vbr_quality_request_handler(SpeexBits *bits, void *state, void *data); #ifdef __cplusplus } #endif #endif h323plus/plugins/audio/Speex/libspeex/bits.c0000644000175000017500000002270111341106241017670 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin File: speex_bits.c Handles bit packing/unpacking Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "speex_bits.h" #include "misc.h" /* Maximum size of the bit-stream (for fixed-size allocation) */ #ifndef MAX_CHARS_PER_FRAME #define MAX_CHARS_PER_FRAME (2000/BYTES_PER_CHAR) #endif void speex_bits_init(SpeexBits *bits) { bits->chars = (char*)speex_alloc(MAX_CHARS_PER_FRAME); if (!bits->chars) return; bits->buf_size = MAX_CHARS_PER_FRAME; bits->owner=1; speex_bits_reset(bits); } void speex_bits_init_buffer(SpeexBits *bits, void *buff, int buf_size) { bits->chars = (char*)buff; bits->buf_size = buf_size; bits->owner=0; speex_bits_reset(bits); } void speex_bits_destroy(SpeexBits *bits) { if (bits->owner) speex_free(bits->chars); /* Will do something once the allocation is dynamic */ } void speex_bits_reset(SpeexBits *bits) { bits->chars[0]=0; bits->nbBits=0; bits->charPtr=0; bits->bitPtr=0; bits->overflow=0; } void speex_bits_rewind(SpeexBits *bits) { bits->charPtr=0; bits->bitPtr=0; bits->overflow=0; } void speex_bits_read_from(SpeexBits *bits, char *chars, int len) { int i; if (len > bits->buf_size) { speex_warning_int("Packet is larger than allocated buffer: ", len); if (bits->owner) { char *tmp = (char*)speex_realloc(bits->chars, len); if (tmp) { bits->buf_size=len; bits->chars=tmp; } else { len=bits->buf_size; speex_warning("Could not resize input buffer: truncating input"); } } else { speex_warning("Do not own input buffer: truncating input"); len=bits->buf_size; } } for (i=0;ichars[i]=chars[i]; bits->nbBits=len<<3; bits->charPtr=0; bits->bitPtr=0; bits->overflow=0; } static void speex_bits_flush(SpeexBits *bits) { int i; int nchars = ((bits->nbBits+BITS_PER_CHAR-1)>>LOG2_BITS_PER_CHAR); if (bits->charPtr>0) { for (i=bits->charPtr;ichars[i-bits->charPtr]=bits->chars[i]; } bits->nbBits -= bits->charPtr<charPtr=0; } void speex_bits_read_whole_bytes(SpeexBits *bits, char *chars, int nbytes) { int i,pos; int nchars = nbytes/BYTES_PER_CHAR; if (((bits->nbBits+BITS_PER_CHAR-1)>>LOG2_BITS_PER_CHAR)+nchars > bits->buf_size) { /* Packet is larger than allocated buffer */ if (bits->owner) { char *tmp = (char*)speex_realloc(bits->chars, (bits->nbBits>>LOG2_BITS_PER_CHAR)+nchars+1); if (tmp) { bits->buf_size=(bits->nbBits>>LOG2_BITS_PER_CHAR)+nchars+1; bits->chars=tmp; } else { nchars=bits->buf_size-(bits->nbBits>>LOG2_BITS_PER_CHAR)-1; speex_warning("Could not resize input buffer: truncating input"); } } else { speex_warning("Do not own input buffer: truncating input"); nchars=bits->buf_size; } } speex_bits_flush(bits); pos=bits->nbBits>>LOG2_BITS_PER_CHAR; for (i=0;ichars[pos+i]=chars[i]; bits->nbBits+=nchars<bitPtr; charPtr=bits->charPtr; nbBits=bits->nbBits; speex_bits_insert_terminator(bits); bits->bitPtr=bitPtr; bits->charPtr=charPtr; bits->nbBits=nbBits; if (max_nchars > ((bits->nbBits+BITS_PER_CHAR-1)>>LOG2_BITS_PER_CHAR)) max_nchars = ((bits->nbBits+BITS_PER_CHAR-1)>>LOG2_BITS_PER_CHAR); #if BYTES_PER_CHAR==1 #define HTOLS(A) (A) #else #define HTOLS(A) ((((A) >> 8)&0xff)|(((A) & 0xff)<<8)) #endif for (i=0;ichars[i]); return max_nchars*BYTES_PER_CHAR; } int speex_bits_write_whole_bytes(SpeexBits *bits, char *chars, int max_nbytes) { int max_nchars = max_nbytes/BYTES_PER_CHAR; int i; if (max_nchars > ((bits->nbBits)>>LOG2_BITS_PER_CHAR)) max_nchars = ((bits->nbBits)>>LOG2_BITS_PER_CHAR); for (i=0;ichars[i]; if (bits->bitPtr>0) bits->chars[0]=bits->chars[max_nchars]; else bits->chars[0]=0; for (i=1;i<((bits->nbBits)>>LOG2_BITS_PER_CHAR)+1;i++) bits->chars[i]=0; bits->charPtr=0; bits->nbBits &= (BITS_PER_CHAR-1); return max_nchars*BYTES_PER_CHAR; } void speex_bits_pack(SpeexBits *bits, int data, int nbBits) { unsigned int d=data; if (bits->charPtr+((nbBits+bits->bitPtr)>>LOG2_BITS_PER_CHAR) >= bits->buf_size) { speex_warning("Buffer too small to pack bits"); if (bits->owner) { int new_nchars = ((bits->buf_size+5)*3)>>1; char *tmp = (char*)speex_realloc(bits->chars, new_nchars); if (tmp) { speex_memset_bytes(tmp, 0, new_nchars); bits->buf_size=new_nchars; bits->chars=tmp; } else { speex_warning("Could not resize input buffer: not packing"); return; } } else { speex_warning("Do not own input buffer: not packing"); return; } } while(nbBits) { int bit; bit = (d>>(nbBits-1))&1; bits->chars[bits->charPtr] |= bit<<(BITS_PER_CHAR-1-bits->bitPtr); bits->bitPtr++; if (bits->bitPtr==BITS_PER_CHAR) { bits->bitPtr=0; bits->charPtr++; bits->chars[bits->charPtr] = 0; } bits->nbBits++; nbBits--; } } int speex_bits_unpack_signed(SpeexBits *bits, int nbBits) { unsigned int d=speex_bits_unpack_unsigned(bits,nbBits); /* If number is negative */ if (d>>(nbBits-1)) { d |= (-1)<charPtr<bitPtr+nbBits>bits->nbBits) bits->overflow=1; if (bits->overflow) return 0; while(nbBits) { d<<=1; d |= (bits->chars[bits->charPtr]>>(BITS_PER_CHAR-1 - bits->bitPtr))&1; bits->bitPtr++; if (bits->bitPtr==BITS_PER_CHAR) { bits->bitPtr=0; bits->charPtr++; } nbBits--; } return d; } unsigned int speex_bits_peek_unsigned(SpeexBits *bits, int nbBits) { unsigned int d=0; int bitPtr, charPtr; char *chars; if ((bits->charPtr<bitPtr+nbBits>bits->nbBits) bits->overflow=1; if (bits->overflow) return 0; bitPtr=bits->bitPtr; charPtr=bits->charPtr; chars = bits->chars; while(nbBits) { d<<=1; d |= (chars[charPtr]>>(BITS_PER_CHAR-1 - bitPtr))&1; bitPtr++; if (bitPtr==BITS_PER_CHAR) { bitPtr=0; charPtr++; } nbBits--; } return d; } int speex_bits_peek(SpeexBits *bits) { if ((bits->charPtr<bitPtr+1>bits->nbBits) bits->overflow=1; if (bits->overflow) return 0; return (bits->chars[bits->charPtr]>>(BITS_PER_CHAR-1 - bits->bitPtr))&1; } void speex_bits_advance(SpeexBits *bits, int n) { if (((bits->charPtr<bitPtr+n>bits->nbBits) || bits->overflow){ bits->overflow=1; return; } bits->charPtr += (bits->bitPtr+n) >> LOG2_BITS_PER_CHAR; /* divide by BITS_PER_CHAR */ bits->bitPtr = (bits->bitPtr+n) & (BITS_PER_CHAR-1); /* modulo by BITS_PER_CHAR */ } int speex_bits_remaining(SpeexBits *bits) { if (bits->overflow) return -1; else return bits->nbBits-((bits->charPtr<bitPtr); } int speex_bits_nbytes(SpeexBits *bits) { return ((bits->nbBits+BITS_PER_CHAR-1)>>LOG2_BITS_PER_CHAR); } void speex_bits_insert_terminator(SpeexBits *bits) { if (bits->bitPtr) speex_bits_pack(bits, 0, 1); while (bits->bitPtr) speex_bits_pack(bits, 1, 1); } h323plus/plugins/audio/Speex/libspeex/speex.h0000644000175000017500000003155711341106241020071 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin*/ /** @file speex.h @brief Describes the different modes of the codec */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef SPEEX_H #define SPEEX_H #include "speex_bits.h" #include "speex_types.h" #ifdef __cplusplus extern "C" { #endif /* Values allowed for *ctl() requests */ /** Set enhancement on/off (decoder only) */ #define SPEEX_SET_ENH 0 /** Get enhancement state (decoder only) */ #define SPEEX_GET_ENH 1 /*Would be SPEEX_SET_FRAME_SIZE, but it's (currently) invalid*/ /** Obtain frame size used by encoder/decoder */ #define SPEEX_GET_FRAME_SIZE 3 /** Set quality value */ #define SPEEX_SET_QUALITY 4 /** Get current quality setting */ /* #define SPEEX_GET_QUALITY 5 -- Doesn't make much sense, does it? */ /** Set sub-mode to use */ #define SPEEX_SET_MODE 6 /** Get current sub-mode in use */ #define SPEEX_GET_MODE 7 /** Set low-band sub-mode to use (wideband only)*/ #define SPEEX_SET_LOW_MODE 8 /** Get current low-band mode in use (wideband only)*/ #define SPEEX_GET_LOW_MODE 9 /** Set high-band sub-mode to use (wideband only)*/ #define SPEEX_SET_HIGH_MODE 10 /** Get current high-band mode in use (wideband only)*/ #define SPEEX_GET_HIGH_MODE 11 /** Set VBR on (1) or off (0) */ #define SPEEX_SET_VBR 12 /** Get VBR status (1 for on, 0 for off) */ #define SPEEX_GET_VBR 13 /** Set quality value for VBR encoding (0-10) */ #define SPEEX_SET_VBR_QUALITY 14 /** Get current quality value for VBR encoding (0-10) */ #define SPEEX_GET_VBR_QUALITY 15 /** Set complexity of the encoder (0-10) */ #define SPEEX_SET_COMPLEXITY 16 /** Get current complexity of the encoder (0-10) */ #define SPEEX_GET_COMPLEXITY 17 /** Set bit-rate used by the encoder (or lower) */ #define SPEEX_SET_BITRATE 18 /** Get current bit-rate used by the encoder or decoder */ #define SPEEX_GET_BITRATE 19 /** Define a handler function for in-band Speex request*/ #define SPEEX_SET_HANDLER 20 /** Define a handler function for in-band user-defined request*/ #define SPEEX_SET_USER_HANDLER 22 /** Set sampling rate used in bit-rate computation */ #define SPEEX_SET_SAMPLING_RATE 24 /** Get sampling rate used in bit-rate computation */ #define SPEEX_GET_SAMPLING_RATE 25 /** Reset the encoder/decoder memories to zero*/ #define SPEEX_RESET_STATE 26 /** Get VBR info (mostly used internally) */ #define SPEEX_GET_RELATIVE_QUALITY 29 /** Set VAD status (1 for on, 0 for off) */ #define SPEEX_SET_VAD 30 /** Get VAD status (1 for on, 0 for off) */ #define SPEEX_GET_VAD 31 /** Set Average Bit-Rate (ABR) to n bits per seconds */ #define SPEEX_SET_ABR 32 /** Get Average Bit-Rate (ABR) setting (in bps) */ #define SPEEX_GET_ABR 33 /** Set DTX status (1 for on, 0 for off) */ #define SPEEX_SET_DTX 34 /** Get DTX status (1 for on, 0 for off) */ #define SPEEX_GET_DTX 35 /** Set submode encoding in each frame (1 for yes, 0 for no, setting to no breaks the standard) */ #define SPEEX_SET_SUBMODE_ENCODING 36 /** Get submode encoding in each frame */ #define SPEEX_GET_SUBMODE_ENCODING 37 /*#define SPEEX_SET_LOOKAHEAD 38*/ /** Returns the lookahead used by Speex */ #define SPEEX_GET_LOOKAHEAD 39 /** Sets tuning for packet-loss concealment (expected loss rate) */ #define SPEEX_SET_PLC_TUNING 40 /** Gets tuning for PLC */ #define SPEEX_GET_PLC_TUNING 41 /* Used internally, not to be used in applications */ /** Used internally*/ #define SPEEX_GET_PI_GAIN 100 /** Used internally*/ #define SPEEX_GET_EXC 101 /** Used internally*/ #define SPEEX_GET_INNOV 102 /** Used internally*/ #define SPEEX_GET_DTX_STATUS 103 /* Preserving compatibility:*/ /** Equivalent to SPEEX_SET_ENH */ #define SPEEX_SET_PF 0 /** Equivalent to SPEEX_GET_ENH */ #define SPEEX_GET_PF 1 /* Values allowed for mode queries */ /** Query the frame size of a mode */ #define SPEEX_MODE_FRAME_SIZE 0 /** Query the size of an encoded frame for a particular sub-mode */ #define SPEEX_SUBMODE_BITS_PER_FRAME 1 /** Get major Speex version */ #define SPEEX_LIB_GET_MAJOR_VERSION 1 /** Get minor Speex version */ #define SPEEX_LIB_GET_MINOR_VERSION 3 /** Get micro Speex version */ #define SPEEX_LIB_GET_MICRO_VERSION 5 /** Get extra Speex version */ #define SPEEX_LIB_GET_EXTRA_VERSION 7 /** Get Speex version string */ #define SPEEX_LIB_GET_VERSION_STRING 9 /*#define SPEEX_LIB_SET_ALLOC_FUNC 10 #define SPEEX_LIB_GET_ALLOC_FUNC 11 #define SPEEX_LIB_SET_FREE_FUNC 12 #define SPEEX_LIB_GET_FREE_FUNC 13 #define SPEEX_LIB_SET_WARNING_FUNC 14 #define SPEEX_LIB_GET_WARNING_FUNC 15 #define SPEEX_LIB_SET_ERROR_FUNC 16 #define SPEEX_LIB_GET_ERROR_FUNC 17 */ /** Number of defined modes in Speex */ #define SPEEX_NB_MODES 3 /** modeID for the defined narrowband mode */ #define SPEEX_MODEID_NB 0 /** modeID for the defined wideband mode */ #define SPEEX_MODEID_WB 1 /** modeID for the defined ultra-wideband mode */ #define SPEEX_MODEID_UWB 2 #ifdef EPIC_48K /** modeID for the Epic 48K mode */ #define SPEEX_MODEID_NB_48K 1000 #endif struct SpeexMode; /* Prototypes for mode function pointers */ /** Encoder state initialization function */ typedef void *(*encoder_init_func)(const struct SpeexMode *mode); /** Encoder state destruction function */ typedef void (*encoder_destroy_func)(void *st); /** Main encoding function */ typedef int (*encode_func)(void *state, void *in, SpeexBits *bits); /** Function for controlling the encoder options */ typedef int (*encoder_ctl_func)(void *state, int request, void *ptr); /** Decoder state initialization function */ typedef void *(*decoder_init_func)(const struct SpeexMode *mode); /** Decoder state destruction function */ typedef void (*decoder_destroy_func)(void *st); /** Main decoding function */ typedef int (*decode_func)(void *state, SpeexBits *bits, void *out); /** Function for controlling the decoder options */ typedef int (*decoder_ctl_func)(void *state, int request, void *ptr); /** Query function for a mode */ typedef int (*mode_query_func)(const void *mode, int request, void *ptr); /** Struct defining a Speex mode */ typedef struct SpeexMode { /** Pointer to the low-level mode data */ const void *mode; /** Pointer to the mode query function */ mode_query_func query; /** The name of the mode (you should not rely on this to identify the mode)*/ const char *modeName; /**ID of the mode*/ int modeID; /**Version number of the bitstream (incremented every time we break bitstream compatibility*/ int bitstream_version; /** Pointer to encoder initialization function */ encoder_init_func enc_init; /** Pointer to encoder destruction function */ encoder_destroy_func enc_destroy; /** Pointer to frame encoding function */ encode_func enc; /** Pointer to decoder initialization function */ decoder_init_func dec_init; /** Pointer to decoder destruction function */ decoder_destroy_func dec_destroy; /** Pointer to frame decoding function */ decode_func dec; /** ioctl-like requests for encoder */ encoder_ctl_func enc_ctl; /** ioctl-like requests for decoder */ decoder_ctl_func dec_ctl; } SpeexMode; /** * Returns a handle to a newly created Speex encoder state structure. For now, * the "mode" argument can be &nb_mode or &wb_mode . In the future, more modes * may be added. Note that for now if you have more than one channels to * encode, you need one state per channel. * * @param mode The mode to use (either speex_nb_mode or speex_wb.mode) * @return A newly created encoder */ void *speex_encoder_init(const SpeexMode *mode); /** Frees all resources associated to an existing Speex encoder state. * @param state Encoder state to be destroyed */ void speex_encoder_destroy(void *state); /** Uses an existing encoder state to encode one frame of speech pointed to by "in". The encoded bit-stream is saved in "bits". @param state Encoder state @param in Frame that will be encoded with a +-2^15 range @param bits Bit-stream where the data will be written @return 0 if frame needs not be transmitted (DTX only), 1 otherwise */ int speex_encode(void *state, float *in, SpeexBits *bits); /** Uses an existing encoder state to encode one frame of speech pointed to by "in". The encoded bit-stream is saved in "bits". @param state Encoder state @param in Frame that will be encoded with a +-2^15 range @param bits Bit-stream where the data will be written @return 0 if frame needs not be transmitted (DTX only), 1 otherwise */ int speex_encode_int(void *state, spx_int16_t *in, SpeexBits *bits); /** Used like the ioctl function to control the encoder parameters * * @param state Encoder state * @param request ioctl-type request (one of the SPEEX_* macros) * @param ptr Data exchanged to-from function * @return 0 if no error, -1 if request in unknown */ int speex_encoder_ctl(void *state, int request, void *ptr); /** Returns a handle to a newly created decoder state structure. For now, * the mode argument can be &nb_mode or &wb_mode . In the future, more modes * may be added. Note that for now if you have more than one channels to * decode, you need one state per channel. * * @param mode Speex mode (one of speex_nb_mode or speex_wb_mode) * @return A newly created decoder state */ void *speex_decoder_init(const SpeexMode *mode); /** Frees all resources associated to an existing decoder state. * * @param state State to be destroyed */ void speex_decoder_destroy(void *state); /** Uses an existing decoder state to decode one frame of speech from * bit-stream bits. The output speech is saved written to out. * * @param state Decoder state * @param bits Bit-stream from which to decode the frame (NULL if the packet was lost) * @param out Where to write the decoded frame * @return return status (0 for no error, -1 for end of stream, -2 corrupt stream) */ int speex_decode(void *state, SpeexBits *bits, float *out); /** Uses an existing decoder state to decode one frame of speech from * bit-stream bits. The output speech is saved written to out. * * @param state Decoder state * @param bits Bit-stream from which to decode the frame (NULL if the packet was lost) * @param out Where to write the decoded frame * @return return status (0 for no error, -1 for end of stream, -2 corrupt stream) */ int speex_decode_int(void *state, SpeexBits *bits, spx_int16_t *out); /** Used like the ioctl function to control the encoder parameters * * @param state Decoder state * @param request ioctl-type request (one of the SPEEX_* macros) * @param ptr Data exchanged to-from function * @return 0 if no error, -1 if request in unknown */ int speex_decoder_ctl(void *state, int request, void *ptr); /** Query function for mode information * * @param mode Speex mode * @param request ioctl-type request (one of the SPEEX_* macros) * @param ptr Data exchanged to-from function */ int speex_mode_query(const SpeexMode *mode, int request, void *ptr); /** Functions for controlling the behavior of libspeex * @param request ioctl-type request (one of the SPEEX_LIB_* macros) * @param ptr Data exchanged to-from function */ int speex_lib_ctl(int request, void *ptr); /** Default narrowband mode */ extern const SpeexMode speex_nb_mode; /** Default wideband mode */ extern const SpeexMode speex_wb_mode; /** Default "ultra-wideband" mode */ extern const SpeexMode speex_uwb_mode; #ifdef EPIC_48K /** 4.8 kbps narrowband mode */ extern const SpeexMode speex_nb_48k_mode; #endif /** List of all modes available */ extern const SpeexMode * const speex_mode_list[SPEEX_NB_MODES]; /** Obtain one of the modes available */ const SpeexMode * speex_lib_get_mode (int mode); #ifdef __cplusplus } #endif #endif h323plus/plugins/audio/Speex/libspeex/exc_5_64_table.c0000644000175000017500000000533111341106241021412 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin File: exc_5_64_table.c Codebook for excitation in narrowband CELP mode (9600 bps) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ const signed char exc_5_64_table[320]={ 1,5,-15,49,-66, -48,-4,50,-44,7, 37,16,-18,25,-26, -26,-15,19,19,-27, -47,28,57,5,-17, -32,-41,68,21,-2, 64,56,8,-16,-13, -26,-9,-16,11,6, -39,25,-19,22,-31, 20,-45,55,-43,10, -16,47,-40,40,-20, -51,3,-17,-14,-15, -24,53,-20,-46,46, 27,-68,32,3,-18, -5,9,-31,16,-9, -10,-1,-23,48,95, 47,25,-41,-32,-3, 15,-25,-55,36,41, -27,20,5,13,14, -22,5,2,-23,18, 46,-15,17,-18,-34, -5,-8,27,-55,73, 16,2,-1,-17,40, -78,33,0,2,19, 4,53,-16,-15,-16, -28,-3,-13,49,8, -7,-29,27,-13,32, 20,32,-61,16,14, 41,44,40,24,20, 7,4,48,-60,-77, 17,-6,-48,65,-15, 32,-30,-71,-10,-3, -6,10,-2,-7,-29, -56,67,-30,7,-5, 86,-6,-10,0,5, -31,60,34,-38,-3, 24,10,-2,30,23, 24,-41,12,70,-43, 15,-17,6,13,16, -13,8,30,-15,-8, 5,23,-34,-98,-4, -13,13,-48,-31,70, 12,31,25,24,-24, 26,-7,33,-16,8, 5,-11,-14,-8,-65, 13,10,-2,-9,0, -3,-68,5,35,7, 0,-31,-1,-17,-9, -9,16,-37,-18,-1, 69,-48,-28,22,-21, -11,5,49,55,23, -86,-36,16,2,13, 63,-51,30,-11,13, 24,-18,-6,14,-19, 1,41,9,-5,27, -36,-44,-34,-37,-21, -26,31,-39,15,43, 5,-8,29,20,-8, -20,-52,-28,-1,13, 26,-34,-10,-9,27, -8,8,27,-66,4, 12,-22,49,10,-77, 32,-18,3,-38,12, -3,-1,2,2,0}; h323plus/plugins/audio/Speex/libspeex/cb_search.c0000644000175000017500000004246711341106241020653 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin File: cb_search.c Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "cb_search.h" #include "filters.h" #include "stack_alloc.h" #include "vq.h" #include "misc.h" #ifdef _USE_SSE #include "cb_search_sse.h" #elif defined(ARM4_ASM) || defined(ARM5E_ASM) #include "cb_search_arm4.h" #elif defined(BFIN_ASM) #include "cb_search_bfin.h" #endif #ifndef OVERRIDE_COMPUTE_WEIGHTED_CODEBOOK static void compute_weighted_codebook(const signed char *shape_cb, const spx_word16_t *r, spx_word16_t *resp, spx_word16_t *resp2, spx_word32_t *E, int shape_cb_size, int subvect_size, char *stack) { int i, j, k; VARDECL(spx_word16_t *shape); ALLOC(shape, subvect_size, spx_word16_t); for (i=0;i10) N=10; if (N<1) N=1; params = (const split_cb_params *) par; subvect_size = params->subvect_size; nb_subvect = params->nb_subvect; shape_cb_size = 1<shape_bits; shape_cb = params->shape_cb; have_sign = params->have_sign; ALLOC(resp, shape_cb_size*subvect_size, spx_word16_t); #ifdef _USE_SSE ALLOC(resp2, (shape_cb_size*subvect_size)>>2, __m128); ALLOC(E, shape_cb_size>>2, __m128); #else resp2 = resp; ALLOC(E, shape_cb_size, spx_word32_t); #endif ALLOC(t, nsf, spx_word16_t); ALLOC(e, nsf, spx_sig_t); /* FIXME: make that adaptive? */ for (i=0;ishape_bits+have_sign); { int rind; spx_word16_t *res; spx_word16_t sign=1; rind = best_index; if (rind>=shape_cb_size) { sign=-1; rind-=shape_cb_size; } res = resp+rind*subvect_size; if (sign>0) for (m=0;m=shape_cb_size) { sign=-1; rind-=shape_cb_size; } q=subvect_size-m; #ifdef FIXED_POINT g=sign*shape_cb[rind*subvect_size+m]; target_update(t+subvect_size*(i+1), g, r+q, nsf-subvect_size*(i+1)); #else g=sign*0.03125*shape_cb[rind*subvect_size+m]; /*FIXME: I think that one too can be replaced by target_update */ for (n=subvect_size*(i+1);n10) N=10; if (N<1) N=1; if (N==1) { split_cb_search_shape_sign_N1(target,ak,awk1,awk2,par,p,nsf,exc,r,bits,stack,complexity,update_target); return; } ALLOC(ot2, N, spx_word16_t*); ALLOC(nt2, N, spx_word16_t*); ALLOC(oind, N, int*); ALLOC(nind, N, int*); params = (const split_cb_params *) par; subvect_size = params->subvect_size; nb_subvect = params->nb_subvect; shape_cb_size = 1<shape_bits; shape_cb = params->shape_cb; have_sign = params->have_sign; ALLOC(resp, shape_cb_size*subvect_size, spx_word16_t); #ifdef _USE_SSE ALLOC(resp2, (shape_cb_size*subvect_size)>>2, __m128); ALLOC(E, shape_cb_size>>2, __m128); #else resp2 = resp; ALLOC(E, shape_cb_size, spx_word32_t); #endif ALLOC(t, nsf, spx_word16_t); ALLOC(e, nsf, spx_sig_t); ALLOC(r2, nsf, spx_sig_t); ALLOC(ind, nb_subvect, int); ALLOC(tmp, 2*N*nsf, spx_word16_t); for (i=0;im;n--) { ndist[n] = ndist[n-1]; best_nind[n] = best_nind[n-1]; best_ntarget[n] = best_ntarget[n-1]; } ndist[m] = err; best_nind[n] = best_index[k]; best_ntarget[n] = j; break; } } } } if (i==0) break; } for (j=0;j=shape_cb_size) { sign=-1; rind-=shape_cb_size; } q=subvect_size-m; #ifdef FIXED_POINT g=sign*shape_cb[rind*subvect_size+m]; target_update(nt[j]+subvect_size*(i+1), g, r+q, nsf-subvect_size*(i+1)); #else g=sign*0.03125*shape_cb[rind*subvect_size+m]; /*FIXME: I think that one too can be replaced by target_update */ for (n=subvect_size*(i+1);nshape_bits+have_sign); } /* Put everything back together */ for (i=0;i=shape_cb_size) { sign=-1; rind-=shape_cb_size; } #ifdef FIXED_POINT if (sign==1) { for (j=0;jsubvect_size; nb_subvect = params->nb_subvect; shape_cb_size = 1<shape_bits; shape_cb = params->shape_cb; have_sign = params->have_sign; ALLOC(ind, nb_subvect, int); ALLOC(signs, nb_subvect, int); /* Decode codewords and gains */ for (i=0;ishape_bits); } /* Compute decoded excitation */ for (i=0;i #include #include /* psychoacoustic setup ********************************************/ static VorbisPsyInfo example_tuning = { .5,.5, 3,3,25, /*63 125 250 500 1k 2k 4k 8k 16k*/ // vorbis mode 4 style //{-32,-32,-32,-32,-28,-24,-22,-20,-20, -20, -20, -8, -6, -6, -6, -6, -6}, { -4, -6, -6, -6, -6, -6, -6, -6, -8, -8,-10,-10, -8, -6, -4, -4, -2}, { 0, 1, 2, 3, 4, 5, 5, 5, /* 7dB */ 6, 6, 6, 5, 4, 4, 4, 4, /* 15dB */ 4, 4, 5, 5, 5, 6, 6, 6, /* 23dB */ 7, 7, 7, 8, 8, 8, 9, 10, /* 31dB */ 11,12,13,14,15,16,17, 18, /* 39dB */ } }; /* there was no great place to put this.... */ #include static void _analysis_output(char *base,int i,float *v,int n,int bark,int dB){ int j; FILE *of; char buffer[80]; sprintf(buffer,"%s_%d.m",base,i); of=fopen(buffer,"w"); if(!of)perror("failed to open data dump file"); for(j=0;j> 16; if( lo>=0 ) break; hi = b[i] & 0xffff; tN = N[hi] + N[-lo]; tX = X[hi] - X[-lo]; tXX = XX[hi] + XX[-lo]; tY = Y[hi] + Y[-lo]; tXY = XY[hi] - XY[-lo]; A = tY * tXX - tX * tXY; B = tN * tXY - tX * tY; D = tN * tXX - tX * tX; R = (A + x * B) / D; if (R < 0.f) R = 0.f; noise[i] = R - offset; } for ( ;; i++, x += 1.f) { lo = b[i] >> 16; hi = b[i] & 0xffff; if(hi>=n)break; tN = N[hi] - N[lo]; tX = X[hi] - X[lo]; tXX = XX[hi] - XX[lo]; tY = Y[hi] - Y[lo]; tXY = XY[hi] - XY[lo]; A = tY * tXX - tX * tXY; B = tN * tXY - tX * tY; D = tN * tXX - tX * tX; R = (A + x * B) / D; if (R < 0.f) R = 0.f; noise[i] = R - offset; } for ( ; i < n; i++, x += 1.f) { R = (A + x * B) / D; if (R < 0.f) R = 0.f; noise[i] = R - offset; } if (fixed <= 0) return; for (i = 0, x = 0.f;; i++, x += 1.f) { hi = i + fixed / 2; lo = hi - fixed; if(lo>=0)break; tN = N[hi] + N[-lo]; tX = X[hi] - X[-lo]; tXX = XX[hi] + XX[-lo]; tY = Y[hi] + Y[-lo]; tXY = XY[hi] - XY[-lo]; A = tY * tXX - tX * tXY; B = tN * tXY - tX * tY; D = tN * tXX - tX * tX; R = (A + x * B) / D; if (R - offset < noise[i]) noise[i] = R - offset; } for ( ;; i++, x += 1.f) { hi = i + fixed / 2; lo = hi - fixed; if(hi>=n)break; tN = N[hi] - N[lo]; tX = X[hi] - X[lo]; tXX = XX[hi] - XX[lo]; tY = Y[hi] - Y[lo]; tXY = XY[hi] - XY[lo]; A = tY * tXX - tX * tXY; B = tN * tXY - tX * tY; D = tN * tXX - tX * tX; R = (A + x * B) / D; if (R - offset < noise[i]) noise[i] = R - offset; } for ( ; i < n; i++, x += 1.f) { R = (A + x * B) / D; if (R - offset < noise[i]) noise[i] = R - offset; } } static void _vp_noisemask(VorbisPsy *p, float *logfreq, float *logmask){ int i,n=p->n/2; float *work=alloca(n*sizeof(*work)); bark_noise_hybridmp(n,p->bark,logfreq,logmask, 140.,-1); for(i=0;ibark,work,logmask,0., p->vi->noisewindowfixed); for(i=0;i=NOISE_COMPAND_LEVELS)dB=NOISE_COMPAND_LEVELS-1; if(dB<0)dB=0; logmask[i]= work[i]+p->vi->noisecompand[dB]+p->noiseoffset[i]; } } VorbisPsy *vorbis_psy_init(int rate, int n) { long i,j,lo=-99,hi=1; VorbisPsy *p = speex_alloc(sizeof(VorbisPsy)); memset(p,0,sizeof(*p)); p->n = n; spx_drft_init(&p->lookup, n); p->bark = speex_alloc(n*sizeof(*p->bark)); p->rate=rate; p->vi = &example_tuning; /* BH4 window */ p->window = speex_alloc(sizeof(*p->window)*n); float a0 = .35875f; float a1 = .48829f; float a2 = .14128f; float a3 = .01168f; for(i=0;iwindow[i] = //a0 - a1*cos(2.*M_PI/n*(i+.5)) + a2*cos(4.*M_PI/n*(i+.5)) - a3*cos(6.*M_PI/n*(i+.5)); sin((i+.5)/n * M_PI)*sin((i+.5)/n * M_PI); /* bark scale lookups */ for(i=0;ivi->noisewindowlominvi->noisewindowlo);lo++); for(;hi<=n && (hivi->noisewindowhimin || toBARK(rate/(2*n)*hi)<(bark+p->vi->noisewindowhi));hi++); p->bark[i]=((lo-1)<<16)+(hi-1); } /* set up rolling noise median */ p->noiseoffset=speex_alloc(n*sizeof(*p->noiseoffset)); for(i=0;i=P_BANDS-1)halfoc=P_BANDS-1; inthalfoc=(int)halfoc; del=halfoc-inthalfoc; p->noiseoffset[i]= p->vi->noiseoff[inthalfoc]*(1.-del) + p->vi->noiseoff[inthalfoc+1]*del; } #if 0 _analysis_output_always("noiseoff0",ls,p->noiseoffset,n,1,0,0); #endif return p; } void vorbis_psy_destroy(VorbisPsy *p) { if(p){ spx_drft_clear(&p->lookup); if(p->bark) speex_free(p->bark); if(p->noiseoffset) speex_free(p->noiseoffset); if(p->window) speex_free(p->window); memset(p,0,sizeof(*p)); speex_free(p); } } void compute_curve(VorbisPsy *psy, float *audio, float *curve) { int i; float work[psy->n]; float scale=4.f/psy->n; float scale_dB; scale_dB=todB(scale); /* window the PCM data; use a BH4 window, not vorbis */ for(i=0;in;i++) work[i]=audio[i] * psy->window[i]; { static int seq=0; _analysis_output("win",seq,work,psy->n,0,0); seq++; } /* FFT yields more accurate tonal estimation (not phase sensitive) */ spx_drft_forward(&psy->lookup,work); /* magnitudes */ work[0]=scale_dB+todB(work[0]); for(i=1;in-1;i+=2){ float temp = work[i]*work[i] + work[i+1]*work[i+1]; work[(i+1)>>1] = scale_dB+.5f * todB(temp); } /* derive a noise curve */ _vp_noisemask(psy,work,curve); #define SIDE 12 for (i=0;in>>1)-i-1]=curve[(psy->n>>1)-SIDE]; } for(i=0;i<((psy->n)>>1);i++) //curve[i] = fromdB(.5*curve[i])*pow(1+i/12,.6); curve[i] = fromdB(1.2*curve[i]+.2*i); } /* Transform a masking curve (power spectrum) into a pole-zero filter */ void curve_to_lpc(VorbisPsy *psy, float *curve, float *awk1, float *awk2, int ord) { int i; float ac[psy->n]; int len = psy->n >> 1; for (i=0;i<2*len;i++) ac[i] = 0; for (i=1;ilookup, ac); _spx_lpc(awk1, ac, ord); #if 0 for (i=0;ilookup, ac); /* Compute (power) response of awk1 (all zero) */ ac[0] *= ac[0]; for (i=1;ilookup, ac); _spx_lpc(awk2, ac, ord); #endif } #if 0 #include #include #define ORDER 10 #define CURVE_SIZE 24 int main() { int i; float curve[CURVE_SIZE]; float awk1[ORDER], awk2[ORDER]; for (i=0;i #include "speex_callbacks.h" #include "vq.h" #include /*float e_ratio_quant[4] = {1, 1.26, 1.587, 2};*/ static const float e_ratio_quant[4] = {.25f, .315f, .397f, .5f}; void speex_encode_stereo(float *data, int frame_size, SpeexBits *bits) { int i, tmp; float e_left=0, e_right=0, e_tot=0; float balance, e_ratio; for (i=0;i0) speex_bits_pack(bits, 0, 1); else speex_bits_pack(bits, 1, 1); balance=floor(.5+fabs(balance)); if (balance>30) balance=31; speex_bits_pack(bits, (int)balance, 5); /*Quantize energy ratio*/ tmp=vq_index(&e_ratio, e_ratio_quant, 1, 4); speex_bits_pack(bits, tmp, 2); } void speex_encode_stereo_int(spx_int16_t *data, int frame_size, SpeexBits *bits) { int i, tmp; float e_left=0, e_right=0, e_tot=0; float balance, e_ratio; for (i=0;i0) speex_bits_pack(bits, 0, 1); else speex_bits_pack(bits, 1, 1); balance=floor(.5+fabs(balance)); if (balance>30) balance=31; speex_bits_pack(bits, (int)balance, 5); /*Quantize energy ratio*/ tmp=vq_index(&e_ratio, e_ratio_quant, 1, 4); speex_bits_pack(bits, tmp, 2); } void speex_decode_stereo(float *data, int frame_size, SpeexStereoState *stereo) { float balance, e_ratio; int i; float e_tot=0, e_left, e_right, e_sum; balance=stereo->balance; e_ratio=stereo->e_ratio; for (i=frame_size-1;i>=0;i--) { e_tot += ((float)data[i])*data[i]; } e_sum=e_tot/e_ratio; e_left = e_sum*balance / (1+balance); e_right = e_sum-e_left; e_left = sqrt(e_left/(e_tot+.01)); e_right = sqrt(e_right/(e_tot+.01)); for (i=frame_size-1;i>=0;i--) { float ftmp=data[i]; stereo->smooth_left = .98*stereo->smooth_left + .02*e_left; stereo->smooth_right = .98*stereo->smooth_right + .02*e_right; data[2*i] = stereo->smooth_left*ftmp; data[2*i+1] = stereo->smooth_right*ftmp; } } void speex_decode_stereo_int(spx_int16_t *data, int frame_size, SpeexStereoState *stereo) { float balance, e_ratio; int i; float e_tot=0, e_left, e_right, e_sum; balance=stereo->balance; e_ratio=stereo->e_ratio; for (i=frame_size-1;i>=0;i--) { e_tot += ((float)data[i])*data[i]; } e_sum=e_tot/e_ratio; e_left = e_sum*balance / (1+balance); e_right = e_sum-e_left; e_left = sqrt(e_left/(e_tot+.01)); e_right = sqrt(e_right/(e_tot+.01)); for (i=frame_size-1;i>=0;i--) { float ftmp=data[i]; stereo->smooth_left = .98*stereo->smooth_left + .02*e_left; stereo->smooth_right = .98*stereo->smooth_right + .02*e_right; data[2*i] = stereo->smooth_left*ftmp; data[2*i+1] = stereo->smooth_right*ftmp; } } int speex_std_stereo_request_handler(SpeexBits *bits, void *state, void *data) { SpeexStereoState *stereo; float sign=1; int tmp; stereo = (SpeexStereoState*)data; if (speex_bits_unpack_unsigned(bits, 1)) sign=-1; tmp = speex_bits_unpack_unsigned(bits, 5); stereo->balance = exp(sign*.25*tmp); tmp = speex_bits_unpack_unsigned(bits, 2); stereo->e_ratio = e_ratio_quant[tmp]; return 0; } h323plus/plugins/audio/Speex/libspeex/hexc_10_32_table.c0000644000175000017500000000564011341106241021634 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin File: hexc_10_32_table.c Codebook for high-band excitation in SB-CELP mode (4000 bps) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ const signed char hexc_10_32_table[320] = { -3, -2, -1, 0, -4, 5, 35, -40, -9, 13, -44, 5, -27, -1, -7, 6, -11, 7, -8, 7, 19, -14, 15, -4, 9, -10, 10, -8, 10, -9, -1, 1, 0, 0, 2, 5, -18, 22, -53, 50, 1, -23, 50, -36, 15, 3, -13, 14, -10, 6, 1, 5, -3, 4, -2, 5, -32, 25, 5, -2, -1, -4, 1, 11, -29, 26, -6, -15, 30, -18, 0, 15, -17, 40, -41, 3, 9, -2, -2, 3, -3, -1, -5, 2, 21, -6, -16, -21, 23, 2, 60, 15, 16, -16, -9, 14, 9, -1, 7, -9, 0, 1, 1, 0, -1, -6, 17, -28, 54, -45, -1, 1, -1, -6, -6, 2, 11, 26, -29, -2, 46, -21, 34, 12, -23, 32, -23, 16, -10, 3, 66, 19, -20, 24, 7, 11, -3, 0, -3, -1, -50, -46, 2, -18, -3, 4, -1, -2, 3, -3, -19, 41, -36, 9, 11, -24, 21, -16, 9, -3, -25, -3, 10, 18, -9, -2, -5, -1, -5, 6, -4, -3, 2, -26, 21, -19, 35, -15, 7, -13, 17, -19, 39, -43, 48, -31, 16, -9, 7, -2, -5, 3, -4, 9, -19, 27, -55, 63, -35, 10, 26, -44, -2, 9, 4, 1, -6, 8, -9, 5, -8, -1, -3, -16, 45, -42, 5, 15, -16, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16, 24, -55, 47, -38, 27, -19, 7, -3, 1, 16, 27, 20, -19, 18, 5, -7, 1, -5, 2, -6, 8, -22, 0, -3, -3, 8, -1, 7, -8, 1, -3, 5, 0, 17, -48, 58, -52, 29, -7, -2, 3, -10, 6, -26, 58, -31, 1, -6, 3, 93, -29, 39, 3, 17, 5, 6, -1, -1, -1, 27, 13, 10, 19, -7, -34, 12, 10, -4, 9, -76, 9, 8, -28, -2, -11, 2, -1, 3, 1, -83, 38, -39, 4, -16, -6, -2, -5, 5, -2, }; h323plus/plugins/audio/Speex/libspeex/math_approx.h0000644000175000017500000000355711341106241021266 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin */ /** @file math_approx.h @brief Various math approximation functions for Speex */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef MATH_APPROX_H #define MATH_APPROX_H #include "misc.h" spx_word16_t spx_cos(spx_word16_t x); #ifdef FIXED_POINT spx_word16_t spx_sqrt(spx_word32_t x); spx_word16_t spx_acos(spx_word16_t x); #else #define spx_sqrt sqrt #define spx_acos acos #endif #endif h323plus/plugins/audio/Speex/libspeex/testenc_wb.c0000644000175000017500000000676011341106241021073 0ustar markmark#ifdef HAVE_CONFIG_H #include "config.h" #endif #include "speex.h" #include #include #include "speex_callbacks.h" #ifdef FIXED_DEBUG extern long long spx_mips; #endif #define FRAME_SIZE 320 #include int main(int argc, char **argv) { char *inFile, *outFile, *bitsFile; FILE *fin, *fout, *fbits=NULL; short in_short[FRAME_SIZE]; short out_short[FRAME_SIZE]; float in_float[FRAME_SIZE]; float sigpow,errpow,snr, seg_snr=0; int snr_frames = 0; char cbits[200]; int nbBits; int i; void *st; void *dec; SpeexBits bits; int tmp; int bitCount=0; int skip_group_delay; SpeexCallback callback; sigpow = 0; errpow = 0; st = speex_encoder_init(&speex_wb_mode); dec = speex_decoder_init(&speex_wb_mode); callback.callback_id = SPEEX_INBAND_CHAR; callback.func = speex_std_char_handler; callback.data = stderr; speex_decoder_ctl(dec, SPEEX_SET_HANDLER, &callback); callback.callback_id = SPEEX_INBAND_MODE_REQUEST; callback.func = speex_std_mode_request_handler; callback.data = st; speex_decoder_ctl(dec, SPEEX_SET_HANDLER, &callback); tmp=0; speex_decoder_ctl(dec, SPEEX_SET_ENH, &tmp); tmp=0; speex_encoder_ctl(st, SPEEX_SET_VBR, &tmp); tmp=8; speex_encoder_ctl(st, SPEEX_SET_QUALITY, &tmp); tmp=2; speex_encoder_ctl(st, SPEEX_SET_COMPLEXITY, &tmp); tmp=3; speex_encoder_ctl(st, SPEEX_SET_HIGH_MODE, &tmp); tmp=6; speex_encoder_ctl(st, SPEEX_SET_LOW_MODE, &tmp); speex_mode_query(&speex_wb_mode, SPEEX_MODE_FRAME_SIZE, &tmp); fprintf (stderr, "frame size: %d\n", tmp); skip_group_delay = 223; if (argc != 4 && argc != 3) { fprintf (stderr, "Usage: encode [in file] [out file] [bits file]\nargc = %d", argc); exit(1); } inFile = argv[1]; fin = fopen(inFile, "r"); outFile = argv[2]; fout = fopen(outFile, "w+"); if (argc==4) { bitsFile = argv[3]; fbits = fopen(bitsFile, "w"); } speex_bits_init(&bits); while (!feof(fin)) { fread(in_short, sizeof(short), FRAME_SIZE, fin); if (feof(fin)) break; for (i=0;i>> 6;\n\t" "R0 = A0;\n\t" "%0 = R0;\n\t" : "=m" (sum) : "m" (x), "m" (y), "d" (len-1) : "P0", "P1", "P2", "R0", "R1", "A0", "I0", "I1", "L0", "L1", "R3" ); return sum; } #define OVERRIDE_PITCH_XCORR static void pitch_xcorr(const spx_word16_t *_x, const spx_word16_t *_y, spx_word32_t *corr, int len, int nb_pitch, char *stack) { corr += nb_pitch - 1; __asm__ __volatile__ ( "P2 = %0;\n\t" "I0 = P2;\n\t" /* x in I0 */ "B0 = P2;\n\t" /* x in B0 */ "R0 = %3;\n\t" /* len in R0 */ "P3 = %3;\n\t" "P3 += -2;\n\t" /* len in R0 */ "P4 = %4;\n\t" /* nb_pitch in R0 */ "R1 = R0 << 1;\n\t" /* number of bytes in x */ "L0 = R1;\n\t" "P0 = %1;\n\t" "P1 = %2;\n\t" "B1 = P1;\n\t" "L1 = 0;\n\t" /*Disable looping on I1*/ "r0 = [I0++];\n\t" "LOOP pitch%= LC0 = P4 >> 1;\n\t" "LOOP_BEGIN pitch%=;\n\t" "I1 = P0;\n\t" "A1 = A0 = 0;\n\t" "R1 = [I1++];\n\t" "LOOP inner_prod%= LC1 = P3 >> 1;\n\t" "LOOP_BEGIN inner_prod%=;\n\t" "A0 += R0.L*R1.L , A1 += R0.L*R1.H (is) || R1.L = W[I1++];\n\t" "A0 += R0.H*R1.H , A1 += R0.H*R1.L (is) || R1.H = W[I1++] || R0 = [I0++];\n\t" "LOOP_END inner_prod%=;\n\t" "A0 += R0.L*R1.L , A1 += R0.L*R1.H (is) || R1.L = W[I1++];\n\t" "A0 += R0.H*R1.H , A1 += R0.H*R1.L (is) || R0 = [I0++];\n\t" "A0 = A0 >>> 6;\n\t" "A1 = A1 >>> 6;\n\t" "R2 = A0, R3 = A1;\n\t" "[P1--] = r2;\n\t" "[P1--] = r3;\n\t" "P0 += 4;\n\t" "LOOP_END pitch%=;\n\t" "L0 = 0;\n\t" : : "m" (_x), "m" (_y), "m" (corr), "m" (len), "m" (nb_pitch) : "A0", "A1", "P0", "P1", "P2", "P3", "P4", "R0", "R1", "R2", "R3", "I0", "I1", "L0", "L1", "B0", "B1", "memory" ); } #define OVERRIDE_COMPUTE_PITCH_ERROR static inline spx_word32_t compute_pitch_error(spx_word32_t *C, spx_word16_t *g, spx_word16_t pitch_control) { spx_word32_t sum; __asm__ __volatile__ ( "A0 = A1 = 0;\n\t" "R0 = [%1++];\n\t" "R1.L = %2.L*%5.L (IS);\n\t" "R0 <<= 1;\n\t" "A0 += R1.L*R0.H (IS), A1 += R1.L*R0.L (M,IS) || R0 = [%1++];\n\t" "R1.L = %3.L*%5.L (IS);\n\t" "R0 <<= 1;\n\t" "A0 += R1.L*R0.H (IS), A1 += R1.L*R0.L (M,IS) || R0 = [%1++];\n\t" "R1.L = %4.L*%5.L (IS);\n\t" "R0 <<= 1;\n\t" "A0 += R1.L*R0.H (IS), A1 += R1.L*R0.L (M,IS) || R0 = [%1++];\n\t" "R1.L = %2.L*%3.L (IS);\n\t" "R0 <<= 1;\n\t" "A0 -= R1.L*R0.H (IS), A1 -= R1.L*R0.L (M,IS) || R0 = [%1++];\n\t" "R1.L = %4.L*%3.L (IS);\n\t" "R0 <<= 1;\n\t" "A0 -= R1.L*R0.H (IS), A1 -= R1.L*R0.L (M,IS) || R0 = [%1++];\n\t" "R1.L = %4.L*%2.L (IS);\n\t" "R0 <<= 1;\n\t" "A0 -= R1.L*R0.H (IS), A1 -= R1.L*R0.L (M,IS) || R0 = [%1++];\n\t" "R1.L = %2.L*%2.L (IS);\n\t" "R0 <<= 1;\n\t" "A0 -= R1.L*R0.H (IS), A1 -= R1.L*R0.L (M,IS) || R0 = [%1++];\n\t" "R1.L = %3.L*%3.L (IS);\n\t" "R0 <<= 1;\n\t" "A0 -= R1.L*R0.H (IS), A1 -= R1.L*R0.L (M,IS) || R0 = [%1++];\n\t" "R1.L = %4.L*%4.L (IS);\n\t" "R0 <<= 1;\n\t" "A0 -= R1.L*R0.H (IS), A1 -= R1.L*R0.L (M,IS);\n\t" "A1 = A1 >>> 16;\n\t" "A0 += A1;\n\t" "%0 = A0;\n\t" : "=&D" (sum), "=a" (C) : "d" (g[0]), "d" (g[1]), "d" (g[2]), "d" (pitch_control), "1" (C) : "R0", "R1", "R2", "A0" ); return sum; } h323plus/plugins/audio/Speex/libspeex/gain_table_lbr.c0000644000175000017500000000363011341106241021653 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin File: gain_table_lbr.c Codebook for 3-tap pitch prediction gain (32 entries) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ const signed char gain_cdbk_lbr[96] = { -32,-32,-32, -31,-58,-16, -41,-24,-43, -56,-22,-55, -13,33,-41, -4,-39,-9, -41,15,-12, -8,-15,-12, 1,2,-44, -22,-66,-42, -38,28,-23, -21,14,-37, 0,21,-50, -53,-71,-27, -37,-1,-19, -19,-5,-28, 6,65,-44, -33,-48,-33, -40,57,-14, -17,4,-45, -31,38,-33, -23,28,-40, -43,29,-12, -34,13,-23, -16,15,-27, -14,-82,-15, -31,25,-32, -21,5,-5, -47,-63,-51, -46,12,3, -28,-17,-29, -10,14,-40}; h323plus/plugins/audio/Speex/libspeex/exc_5_256_table.c0000644000175000017500000001372011341106241021476 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin File: exc_5_256_table.c Codebook for excitation in narrowband CELP mode (12800 bps) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ const signed char exc_5_256_table[1280] = { -8,-37,5,-43,5, 73,61,39,12,-3, -61,-32,2,42,30, -3,17,-27,9,34, 20,-1,-5,2,23, -7,-46,26,53,-47, 20,-2,-33,-89,-51, -64,27,11,15,-34, -5,-56,25,-9,-1, -29,1,40,67,-23, -16,16,33,19,7, 14,85,22,-10,-10, -12,-7,-1,52,89, 29,11,-20,-37,-46, -15,17,-24,-28,24, 2,1,0,23,-101, 23,14,-1,-23,-18, 9,5,-13,38,1, -28,-28,4,27,51, -26,34,-40,35,47, 54,38,-54,-26,-6, 42,-25,13,-30,-36, 18,41,-4,-33,23, -32,-7,-4,51,-3, 17,-52,56,-47,36, -2,-21,36,10,8, -33,31,19,9,-5, -40,10,-9,-21,19, 18,-78,-18,-5,0, -26,-36,-47,-51,-44, 18,40,27,-2,29, 49,-26,2,32,-54, 30,-73,54,3,-5, 36,22,53,10,-1, -84,-53,-29,-5,3, -44,53,-51,4,22, 71,-35,-1,33,-5, -27,-7,36,17,-23, -39,16,-9,-55,-15, -20,39,-35,6,-39, -14,18,48,-64,-17, -15,9,39,81,37, -68,37,47,-21,-6, -104,13,6,9,-2, 35,8,-23,18,42, 45,21,33,-5,-49, 9,-6,-43,-56,39, 2,-16,-25,87,1, -3,-9,17,-25,-11, -9,-1,10,2,-14, -14,4,-1,-10,28, -23,40,-32,26,-9, 26,4,-27,-23,3, 42,-60,1,49,-3, 27,10,-52,-40,-2, 18,45,-23,17,-44, 3,-3,17,-46,52, -40,-47,25,75,31, -49,53,30,-30,-32, -36,38,-6,-15,-16, 54,-27,-48,3,38, -29,-32,-22,-14,-4, -23,-13,32,-39,9, 8,-45,-13,34,-16, 49,40,32,31,28, 23,23,32,47,59, -68,8,62,44,25, -14,-24,-65,-16,36, 67,-25,-38,-21,4, -33,-2,42,5,-63, 40,11,26,-42,-23, -61,79,-31,23,-20, 10,-32,53,-25,-36, 10,-26,-5,3,0, -71,5,-10,-37,1, -24,21,-54,-17,1, -29,-25,-15,-27,32, 68,45,-16,-37,-18, -5,1,0,-77,71, -6,3,-20,71,-67, 29,-35,10,-30,19, 4,16,17,5,0, -14,19,2,28,26, 59,3,2,24,39, 55,-50,-45,-18,-17, 33,-35,14,-1,1, 8,87,-35,-29,0, -27,13,-7,23,-13, 37,-40,50,-35,14, 19,-7,-14,49,54, -5,22,-2,-29,-8, -27,38,13,27,48, 12,-41,-21,-15,28, 7,-16,-24,-19,-20, 11,-20,9,2,13, 23,-20,11,27,-27, 71,-69,8,2,-6, 22,12,16,16,9, -16,-8,-17,1,25, 1,40,-37,-33,66, 94,53,4,-22,-25, -41,-42,25,35,-16, -15,57,31,-29,-32, 21,16,-60,45,15, -1,7,57,-26,-47, -29,11,8,15,19, -105,-8,54,27,10, -17,6,-12,-1,-10, 4,0,23,-10,31, 13,11,10,12,-64, 23,-3,-8,-19,16, 52,24,-40,16,10, 40,5,9,0,-13, -7,-21,-8,-6,-7, -21,59,16,-53,18, -60,11,-47,14,-18, 25,-13,-24,4,-39, 16,-28,54,26,-67, 30,27,-20,-52,20, -12,55,12,18,-16, 39,-14,-6,-26,56, -88,-55,12,25,26, -37,6,75,0,-34, -81,54,-30,1,-7, 49,-23,-14,21,10, -62,-58,-57,-47,-34, 15,-4,34,-78,31, 25,-11,7,50,-10, 42,-63,14,-36,-4, 57,55,57,53,42, -42,-1,15,40,37, 15,25,-11,6,1, 31,-2,-6,-1,-7, -64,34,28,30,-1, 3,21,0,-88,-12, -56,25,-28,40,8, -28,-14,9,12,2, -6,-17,22,49,-6, -26,14,28,-20,4, -12,50,35,40,13, -38,-58,-29,17,30, 22,60,26,-54,-39, -12,58,-28,-63,10, -21,-8,-12,26,-62, 6,-10,-11,-22,-6, -7,4,1,18,2, -70,11,14,4,13, 19,-24,-34,24,67, 17,51,-21,13,23, 54,-30,48,1,-13, 80,26,-16,-2,13, -4,6,-30,29,-24, 73,-58,30,-27,20, -2,-21,41,45,30, -27,-3,-5,-18,-20, -49,-3,-35,10,42, -19,-67,-53,-11,9, 13,-15,-33,-51,-30, 15,7,25,-30,4, 28,-22,-34,54,-29, 39,-46,20,16,34, -4,47,75,1,-44, -55,-24,7,-1,9, -42,50,-8,-36,41, 68,0,-4,-10,-23, -15,-50,64,36,-9, -27,12,25,-38,-47, -37,32,-49,51,-36, 2,-4,69,-26,19, 7,45,67,46,13, -63,46,15,-47,4, -41,13,-6,5,-21, 37,26,-55,-7,33, -1,-28,10,-17,-64, -14,0,-36,-17,93, -3,-9,-66,44,-21, 3,-12,38,-6,-13, -12,19,13,43,-43, -10,-12,6,-5,9, -49,32,-5,2,4, 5,15,-16,10,-21, 8,-62,-8,64,8, 79,-1,-66,-49,-18, 5,40,-5,-30,-45, 1,-6,21,-32,93, -18,-30,-21,32,21, -18,22,8,5,-41, -54,80,22,-10,-7, -8,-23,-64,66,56, -14,-30,-41,-46,-14, -29,-37,27,-14,42, -2,-9,-29,34,14, 33,-14,22,4,10, 26,26,28,32,23, -72,-32,3,0,-14, 35,-42,-78,-32,6, 29,-18,-45,-5,7, -33,-45,-3,-22,-34, 8,-8,4,-51,-25, -9,59,-78,21,-5, -25,-48,66,-15,-17, -24,-49,-13,25,-23, -64,-6,40,-24,-19, -11,57,-33,-8,1, 10,-52,-54,28,39, 49,34,-11,-61,-41, -43,10,15,-15,51, 30,15,-51,32,-34, -2,-34,14,18,16, 1,1,-3,-3,1, 1,-18,6,16,48, 12,-5,-42,7,36, 48,7,-20,-10,7, 12,2,54,39,-38, 37,54,4,-11,-8, -46,-10,5,-10,-34, 46,-12,29,-37,39, 36,-11,24,56,17, 14,20,25,0,-25, -28,55,-7,-5,27, 3,9,-26,-8,6, -24,-10,-30,-31,-34, 18,4,22,21,40, -1,-29,-37,-8,-21, 92,-29,11,-3,11, 73,23,22,7,4, -44,-9,-11,21,-13, 11,9,-78,-1,47, 114,-12,-37,-19,-5, -11,-22,19,12,-30, 7,38,45,-21,-8, -9,55,-45,56,-21, 7,17,46,-57,-87, -6,27,31,31,7, -56,-12,46,21,-5, -12,36,3,3,-21, 43,19,12,-7,9, -14,0,-9,-33,-91, 7,26,3,-11,64, 83,-31,-46,25,2, 9,5,2,2,-1, 20,-17,10,-5,-27, -8,20,8,-19,16, -21,-13,-31,5,5, 42,24,9,34,-20, 28,-61,22,11,-39, 64,-20,-1,-30,-9, -20,24,-25,-24,-29, 22,-60,6,-5,41, -9,-87,14,34,15, -57,52,69,15,-3, -102,58,16,3,6, 60,-75,-32,26,7, -57,-27,-32,-24,-21, -29,-16,62,-46,31, 30,-27,-15,7,15}; h323plus/plugins/audio/Speex/libspeex/misc_bfin.h0000644000175000017500000000417711341106241020674 0ustar markmark/* Copyright (C) 2005 Analog Devices */ /** @file misc_bfin.h @author Jean-Marc Valin @brief Various compatibility routines for Speex (Blackfin version) */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #define OVERRIDE_SPEEX_MOVE void *speex_move (void *dest, void *src, int n) { __asm__ __volatile__ ( "L0 = 0;\n\t" "I0 = %0;\n\t" "R0 = [I0++];\n\t" "LOOP move%= LC0 = %2;\n\t" "LOOP_BEGIN move%=;\n\t" "[%1++] = R0 || R0 = [I0++];\n\t" "LOOP_END move%=;\n\t" "[%1++] = R0;\n\t" : "=a" (src), "=a" (dest) : "a" ((n>>2)-1), "0" (src), "1" (dest) : "R0", "I0", "L0", "memory" ); return dest; } h323plus/plugins/audio/Speex/libspeex/smallft.h0000644000175000017500000000272611341106241020403 0ustar markmark/******************************************************************** * * * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 * * by the XIPHOPHORUS Company http://www.xiph.org/ * * * ******************************************************************** function: fft transform last mod: $Id: smallft.h,v 1.1 2010/02/24 02:19:13 shorne Exp $ ********************************************************************/ /** @file smallft.h @brief Discrete Rotational Fourier Transform (DRFT) */ #ifndef _V_SMFT_H_ #define _V_SMFT_H_ #ifdef __cplusplus extern "C" { #endif /** Discrete Rotational Fourier Transform lookup */ struct drft_lookup{ int n; float *trigcache; int *splitcache; }; extern void spx_drft_forward(struct drft_lookup *l,float *data); extern void spx_drft_backward(struct drft_lookup *l,float *data); extern void spx_drft_init(struct drft_lookup *l,int n); extern void spx_drft_clear(struct drft_lookup *l); #ifdef __cplusplus } #endif #endif h323plus/plugins/audio/Speex/libspeex/arch.h0000644000175000017500000001216011341106241017647 0ustar markmark/* Copyright (C) 2003 Jean-Marc Valin */ /** @file arch.h @brief Various architecture definitions Speex */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef ARCH_H #define ARCH_H #include "speex_types.h" #define ABS(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute integer value. */ #define ABS16(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute 16-bit value. */ #define MAX16(a,b) ((a) > (b) ? (a) : (b)) /**< Maximum 16-bit value. */ #define ABS32(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute 32-bit value. */ #ifdef FIXED_POINT typedef spx_int16_t spx_word16_t; typedef spx_int32_t spx_word32_t; #ifdef _MSC_VER typedef __int64 spx_word64_t; #elif defined NO_LONGLONG typedef double spx_word64_t; #else typedef long long spx_word64_t; #endif typedef spx_word32_t spx_mem_t; typedef spx_word16_t spx_coef_t; typedef spx_word16_t spx_lsp_t; typedef spx_word32_t spx_sig_t; #define Q15ONE 32767 #define LPC_SCALING 8192 #define SIG_SCALING 16384 #define LSP_SCALING 8192. #define GAMMA_SCALING 32768. #define GAIN_SCALING 64 #define GAIN_SCALING_1 0.015625 #define LPC_SHIFT 13 #define LSP_SHIFT 13 #define SIG_SHIFT 14 #define VERY_SMALL 0 #define VERY_LARGE32 ((spx_word32_t)2147483647) #define VERY_LARGE16 ((spx_word16_t)32767) #ifdef FIXED_DEBUG #include "fixed_debug.h" #else #include "fixed_generic.h" #ifdef ARM5E_ASM #include "fixed_arm5e.h" #elif defined (ARM4_ASM) #include "fixed_arm4.h" #elif defined (ARM5E_ASM) #include "fixed_arm5e.h" #elif defined (BFIN_ASM) #include "fixed_bfin.h" #endif #endif #else typedef float spx_mem_t; typedef float spx_coef_t; typedef float spx_lsp_t; typedef float spx_sig_t; typedef float spx_word16_t; typedef float spx_word32_t; typedef float spx_word64_t; #define Q15ONE 1.0f #define LPC_SCALING 1.f #define SIG_SCALING 1.f #define LSP_SCALING 1.f #define GAMMA_SCALING 1.f #define GAIN_SCALING 1.f #define GAIN_SCALING_1 1.f #define LPC_SHIFT 0 #define LSP_SHIFT 0 #define SIG_SHIFT 0 #define VERY_SMALL 1e-15f #define VERY_LARGE32 1e15f #define VERY_LARGE16 1e15f #define QCONST16(x,bits) (x) #define QCONST32(x,bits) (x) #define NEG16(x) (-(x)) #define NEG32(x) (-(x)) #define EXTRACT16(x) (x) #define EXTEND32(x) (x) #define SHR16(a,shift) (a) #define SHL16(a,shift) (a) #define SHR32(a,shift) (a) #define SHL32(a,shift) (a) #define PSHR16(a,shift) (a) #define PSHR32(a,shift) (a) #define SATURATE16(x,a) (x) #define SATURATE32(x,a) (x) #define PSHR(a,shift) (a) #define SHR(a,shift) (a) #define SHL(a,shift) (a) #define SATURATE(x,a) (x) #define ADD16(a,b) ((a)+(b)) #define SUB16(a,b) ((a)-(b)) #define ADD32(a,b) ((a)+(b)) #define SUB32(a,b) ((a)-(b)) #define ADD64(a,b) ((a)+(b)) #define MULT16_16_16(a,b) ((a)*(b)) #define MULT16_16(a,b) ((spx_word32_t)(a)*(spx_word32_t)(b)) #define MAC16_16(c,a,b) ((c)+(spx_word32_t)(a)*(spx_word32_t)(b)) #define MULT16_32_Q11(a,b) ((a)*(b)) #define MULT16_32_Q13(a,b) ((a)*(b)) #define MULT16_32_Q14(a,b) ((a)*(b)) #define MULT16_32_Q15(a,b) ((a)*(b)) #define MAC16_32_Q11(c,a,b) ((c)+(a)*(b)) #define MAC16_32_Q15(c,a,b) ((c)+(a)*(b)) #define MAC16_16_Q11(c,a,b) ((c)+(a)*(b)) #define MAC16_16_Q13(c,a,b) ((c)+(a)*(b)) #define MULT16_16_Q11_32(a,b) ((a)*(b)) #define MULT16_16_Q13(a,b) ((a)*(b)) #define MULT16_16_Q14(a,b) ((a)*(b)) #define MULT16_16_Q15(a,b) ((a)*(b)) #define MULT16_16_P15(a,b) ((a)*(b)) #define DIV32_16(a,b) ((a)/(b)) #define DIV32(a,b) ((a)/(b)) #endif #ifdef CONFIG_TI_C55X /* 2 on TI C5x DSP */ #define BYTES_PER_CHAR 2 #define BITS_PER_CHAR 16 #define LOG2_BITS_PER_CHAR 4 #else #define BYTES_PER_CHAR 1 #define BITS_PER_CHAR 8 #define LOG2_BITS_PER_CHAR 3 #endif #endif h323plus/plugins/audio/Speex/libspeex/sb_celp.c0000644000175000017500000014005111341106241020335 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin File: sb_celp.c Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "sb_celp.h" #include "stdlib.h" #include "filters.h" #include "lpc.h" #include "lsp.h" #include "stack_alloc.h" #include "cb_search.h" #include "quant_lsp.h" #include "vq.h" #include "ltp.h" #include "misc.h" /* Default size for the encoder and decoder stack (can be changed at compile time). This does not apply when using variable-size arrays or alloca. */ #ifndef SB_ENC_STACK #define SB_ENC_STACK (10000*sizeof(spx_sig_t)) #endif #ifndef SB_DEC_STACK #define SB_DEC_STACK (6000*sizeof(spx_sig_t)) #endif #ifdef DISABLE_WIDEBAND void *sb_encoder_init(const SpeexMode *m) { speex_error("Wideband and Ultra-wideband are disabled"); return NULL; } void sb_encoder_destroy(void *state) { speex_error("Wideband and Ultra-wideband are disabled"); } int sb_encode(void *state, void *vin, SpeexBits *bits) { speex_error("Wideband and Ultra-wideband are disabled"); return -2; } void *sb_decoder_init(const SpeexMode *m) { speex_error("Wideband and Ultra-wideband are disabled"); return NULL; } void sb_decoder_destroy(void *state) { speex_error("Wideband and Ultra-wideband are disabled"); } int sb_decode(void *state, SpeexBits *bits, void *vout) { speex_error("Wideband and Ultra-wideband are disabled"); return -2; } int sb_encoder_ctl(void *state, int request, void *ptr) { speex_error("Wideband and Ultra-wideband are disabled"); return -2; } int sb_decoder_ctl(void *state, int request, void *ptr) { speex_error("Wideband and Ultra-wideband are disabled"); return -2; } #else #ifndef M_PI #define M_PI 3.14159265358979323846 /* pi */ #endif #define sqr(x) ((x)*(x)) #define SUBMODE(x) st->submodes[st->submodeID]->x #ifdef FIXED_POINT static const spx_word16_t gc_quant_bound[16] = {125, 164, 215, 282, 370, 484, 635, 832, 1090, 1428, 1871, 2452, 3213, 4210, 5516, 7228}; #define LSP_MARGIN 410 #define LSP_DELTA1 6553 #define LSP_DELTA2 1638 #else #define LSP_MARGIN .05 #define LSP_DELTA1 .2 #define LSP_DELTA2 .05 #endif #define QMF_ORDER 64 #ifdef FIXED_POINT static const spx_word16_t h0[64] = {2, -7, -7, 18, 15, -39, -25, 75, 35, -130, -41, 212, 38, -327, -17, 483, -32, -689, 124, 956, -283, -1307, 543, 1780, -973, -2467, 1733, 3633, -3339, -6409, 9059, 30153, 30153, 9059, -6409, -3339, 3633, 1733, -2467, -973, 1780, 543, -1307, -283, 956, 124, -689, -32, 483, -17, -327, 38, 212, -41, -130, 35, 75, -25, -39, 15, 18, -7, -7, 2}; static const spx_word16_t h1[64] = {2, 7, -7, -18, 15, 39, -25, -75, 35, 130, -41, -212, 38, 327, -17, -483, -32, 689, 124, -956, -283, 1307, 543, -1780, -973, 2467, 1733, -3633, -3339, 6409, 9059, -30153, 30153, -9059, -6409, 3339, 3633, -1733, -2467, 973, 1780, -543, -1307, 283, 956, -124, -689, 32, 483, 17, -327, -38, 212, 41, -130, -35, 75, 25, -39, -15, 18, 7, -7, -2}; #else static const float h0[64] = { 3.596189e-05, -0.0001123515, -0.0001104587, 0.0002790277, 0.0002298438, -0.0005953563, -0.0003823631, 0.00113826, 0.0005308539, -0.001986177, -0.0006243724, 0.003235877, 0.0005743159, -0.004989147, -0.0002584767, 0.007367171, -0.0004857935, -0.01050689, 0.001894714, 0.01459396, -0.004313674, -0.01994365, 0.00828756, 0.02716055, -0.01485397, -0.03764973, 0.026447, 0.05543245, -0.05095487, -0.09779096, 0.1382363, 0.4600981, 0.4600981, 0.1382363, -0.09779096, -0.05095487, 0.05543245, 0.026447, -0.03764973, -0.01485397, 0.02716055, 0.00828756, -0.01994365, -0.004313674, 0.01459396, 0.001894714, -0.01050689, -0.0004857935, 0.007367171, -0.0002584767, -0.004989147, 0.0005743159, 0.003235877, -0.0006243724, -0.001986177, 0.0005308539, 0.00113826, -0.0003823631, -0.0005953563, 0.0002298438, 0.0002790277, -0.0001104587, -0.0001123515, 3.596189e-05 }; static const float h1[64] = { 3.596189e-05, 0.0001123515, -0.0001104587, -0.0002790277, 0.0002298438, 0.0005953563, -0.0003823631, -0.00113826, 0.0005308539, 0.001986177, -0.0006243724, -0.003235877, 0.0005743159, 0.004989147, -0.0002584767, -0.007367171, -0.0004857935, 0.01050689, 0.001894714, -0.01459396, -0.004313674, 0.01994365, 0.00828756, -0.02716055, -0.01485397, 0.03764973, 0.026447, -0.05543245, -0.05095487, 0.09779096, 0.1382363, -0.4600981, 0.4600981, -0.1382363, -0.09779096, 0.05095487, 0.05543245, -0.026447, -0.03764973, 0.01485397, 0.02716055, -0.00828756, -0.01994365, 0.004313674, 0.01459396, -0.001894714, -0.01050689, 0.0004857935, 0.007367171, 0.0002584767, -0.004989147, -0.0005743159, 0.003235877, 0.0006243724, -0.001986177, -0.0005308539, 0.00113826, 0.0003823631, -0.0005953563, -0.0002298438, 0.0002790277, 0.0001104587, -0.0001123515, -3.596189e-05 }; #endif static void mix_and_saturate(spx_word32_t *x0, spx_word32_t *x1, spx_word16_t *out, int len) { int i; for (i=0;i32767) out[i] = 32767; else if (tmp<-32767) out[i] = -32767; else out[i] = tmp; } } void *sb_encoder_init(const SpeexMode *m) { int i; SBEncState *st; const SpeexSBMode *mode; st = (SBEncState*)speex_alloc(sizeof(SBEncState)); if (!st) return NULL; #if defined(VAR_ARRAYS) || defined (USE_ALLOCA) st->stack = NULL; #else st->stack = (char*)speex_alloc_scratch(SB_ENC_STACK); #endif st->mode = m; mode = (const SpeexSBMode*)m->mode; st->st_low = speex_encoder_init(mode->nb_mode); st->full_frame_size = 2*mode->frameSize; st->frame_size = mode->frameSize; st->subframeSize = mode->subframeSize; st->nbSubframes = mode->frameSize/mode->subframeSize; st->windowSize = st->frame_size*3/2; st->lpcSize=mode->lpcSize; st->bufSize=mode->bufSize; st->encode_submode = 1; st->submodes=mode->submodes; st->submodeSelect = st->submodeID=mode->defaultSubmode; i=9; speex_encoder_ctl(st->st_low, SPEEX_SET_QUALITY, &i); st->lag_factor = mode->lag_factor; st->lpc_floor = mode->lpc_floor; st->gamma1=mode->gamma1; st->gamma2=mode->gamma2; st->first=1; st->x0d=speex_alloc((st->frame_size)*sizeof(spx_sig_t)); st->x1d=speex_alloc((st->frame_size)*sizeof(spx_sig_t)); st->high=speex_alloc((st->full_frame_size)*sizeof(spx_sig_t)); st->y0=speex_alloc((st->full_frame_size)*sizeof(spx_sig_t)); st->y1=speex_alloc((st->full_frame_size)*sizeof(spx_sig_t)); st->h0_mem=speex_alloc((QMF_ORDER)*sizeof(spx_word16_t)); st->h1_mem=speex_alloc((QMF_ORDER)*sizeof(spx_word16_t)); st->g0_mem=speex_alloc((QMF_ORDER)*sizeof(spx_word32_t)); st->g1_mem=speex_alloc((QMF_ORDER)*sizeof(spx_word32_t)); st->excBuf=speex_alloc((st->bufSize)*sizeof(spx_sig_t)); st->exc = st->excBuf + st->bufSize - st->windowSize; st->res=speex_alloc((st->frame_size)*sizeof(spx_sig_t)); st->sw=speex_alloc((st->frame_size)*sizeof(spx_sig_t)); st->target=speex_alloc((st->frame_size)*sizeof(spx_sig_t)); /*Asymmetric "pseudo-Hamming" window*/ { int part1, part2; part1 = st->subframeSize*7/2; part2 = st->subframeSize*5/2; st->window = speex_alloc((st->windowSize)*sizeof(spx_word16_t)); for (i=0;iwindow[i]=(spx_word16_t)(SIG_SCALING*(.54-.46*cos(M_PI*i/part1))); for (i=0;iwindow[part1+i]=(spx_word16_t)(SIG_SCALING*(.54+.46*cos(M_PI*i/part2))); } st->lagWindow = speex_alloc((st->lpcSize+1)*sizeof(spx_word16_t)); for (i=0;ilpcSize+1;i++) st->lagWindow[i]=16384*exp(-.5*sqr(2*M_PI*st->lag_factor*i)); st->autocorr = speex_alloc((st->lpcSize+1)*sizeof(spx_word16_t)); st->lpc = speex_alloc(st->lpcSize*sizeof(spx_coef_t)); st->bw_lpc1 = speex_alloc(st->lpcSize*sizeof(spx_coef_t)); st->bw_lpc2 = speex_alloc(st->lpcSize*sizeof(spx_coef_t)); st->lsp = speex_alloc(st->lpcSize*sizeof(spx_lsp_t)); st->qlsp = speex_alloc(st->lpcSize*sizeof(spx_lsp_t)); st->old_lsp = speex_alloc(st->lpcSize*sizeof(spx_lsp_t)); st->old_qlsp = speex_alloc(st->lpcSize*sizeof(spx_lsp_t)); st->interp_lsp = speex_alloc(st->lpcSize*sizeof(spx_lsp_t)); st->interp_qlsp = speex_alloc(st->lpcSize*sizeof(spx_lsp_t)); st->interp_lpc = speex_alloc(st->lpcSize*sizeof(spx_coef_t)); st->interp_qlpc = speex_alloc(st->lpcSize*sizeof(spx_coef_t)); st->pi_gain = speex_alloc((st->nbSubframes)*sizeof(spx_word32_t)); st->mem_sp = speex_alloc((st->lpcSize)*sizeof(spx_mem_t)); st->mem_sp2 = speex_alloc((st->lpcSize)*sizeof(spx_mem_t)); st->mem_sw = speex_alloc((st->lpcSize)*sizeof(spx_mem_t)); st->vbr_quality = 8; st->vbr_enabled = 0; st->vad_enabled = 0; st->abr_enabled = 0; st->relative_quality=0; st->complexity=2; speex_encoder_ctl(st->st_low, SPEEX_GET_SAMPLING_RATE, &st->sampling_rate); st->sampling_rate*=2; #ifdef ENABLE_VALGRIND VALGRIND_MAKE_READABLE(st, (st->stack-(char*)st)); #endif return st; } void sb_encoder_destroy(void *state) { SBEncState *st=(SBEncState*)state; speex_encoder_destroy(st->st_low); #if !(defined(VAR_ARRAYS) || defined (USE_ALLOCA)) speex_free_scratch(st->stack); #endif speex_free(st->x0d); speex_free(st->x1d); speex_free(st->high); speex_free(st->y0); speex_free(st->y1); speex_free(st->h0_mem); speex_free(st->h1_mem); speex_free(st->g0_mem); speex_free(st->g1_mem); speex_free(st->excBuf); speex_free(st->res); speex_free(st->sw); speex_free(st->target); speex_free(st->window); speex_free(st->lagWindow); speex_free(st->autocorr); speex_free(st->lpc); speex_free(st->bw_lpc1); speex_free(st->bw_lpc2); speex_free(st->lsp); speex_free(st->qlsp); speex_free(st->old_lsp); speex_free(st->old_qlsp); speex_free(st->interp_lsp); speex_free(st->interp_qlsp); speex_free(st->interp_lpc); speex_free(st->interp_qlpc); speex_free(st->pi_gain); speex_free(st->mem_sp); speex_free(st->mem_sp2); speex_free(st->mem_sw); speex_free(st); } int sb_encode(void *state, void *vin, SpeexBits *bits) { SBEncState *st; int i, roots, sub; char *stack; VARDECL(spx_mem_t *mem); VARDECL(spx_sig_t *innov); VARDECL(spx_word16_t *syn_resp); VARDECL(spx_word32_t *low_pi_gain); VARDECL(spx_sig_t *low_exc); VARDECL(spx_sig_t *low_innov); const SpeexSBMode *mode; int dtx; spx_word16_t *in = vin; st = (SBEncState*)state; stack=st->stack; mode = (const SpeexSBMode*)(st->mode->mode); { VARDECL(spx_word16_t *low); ALLOC(low, st->frame_size, spx_word16_t); /* Compute the two sub-bands by filtering with h0 and h1*/ qmf_decomp(in, h0, st->x0d, st->x1d, st->full_frame_size, QMF_ORDER, st->h0_mem, stack); for (i=0;iframe_size;i++) low[i] = SATURATE(PSHR(st->x0d[i],SIG_SHIFT),32767); /* Encode the narrowband part*/ speex_encode_native(st->st_low, low, bits); for (i=0;iframe_size;i++) st->x0d[i] = SHL(low[i],SIG_SHIFT); } /* High-band buffering / sync with low band */ for (i=0;iwindowSize-st->frame_size;i++) st->high[i] = st->high[st->frame_size+i]; for (i=0;iframe_size;i++) st->high[st->windowSize-st->frame_size+i]=SATURATE(st->x1d[i],536854528); speex_move(st->excBuf, st->excBuf+st->frame_size, (st->bufSize-st->frame_size)*sizeof(spx_sig_t)); ALLOC(low_pi_gain, st->nbSubframes, spx_word32_t); ALLOC(low_exc, st->frame_size, spx_sig_t); ALLOC(low_innov, st->frame_size, spx_sig_t); speex_encoder_ctl(st->st_low, SPEEX_GET_PI_GAIN, low_pi_gain); speex_encoder_ctl(st->st_low, SPEEX_GET_EXC, low_exc); speex_encoder_ctl(st->st_low, SPEEX_GET_INNOV, low_innov); speex_encoder_ctl(st->st_low, SPEEX_GET_LOW_MODE, &dtx); if (dtx==0) dtx=1; else dtx=0; { VARDECL(spx_word16_t *w_sig); ALLOC(w_sig, st->windowSize, spx_word16_t); /* Window for analysis */ for (i=0;iwindowSize;i++) w_sig[i] = SHR(MULT16_16(SHR((spx_word32_t)(st->high[i]),SIG_SHIFT),st->window[i]),SIG_SHIFT); /* Compute auto-correlation */ _spx_autocorr(w_sig, st->autocorr, st->lpcSize+1, st->windowSize); } st->autocorr[0] = ADD16(st->autocorr[0],MULT16_16_Q15(st->autocorr[0],st->lpc_floor)); /* Noise floor in auto-correlation domain */ /* Lag windowing: equivalent to filtering in the power-spectrum domain */ for (i=0;ilpcSize+1;i++) st->autocorr[i] = MULT16_16_Q14(st->autocorr[i],st->lagWindow[i]); /* Levinson-Durbin */ _spx_lpc(st->lpc, st->autocorr, st->lpcSize); /* LPC to LSPs (x-domain) transform */ roots=lpc_to_lsp (st->lpc, st->lpcSize, st->lsp, 15, LSP_DELTA1, stack); if (roots!=st->lpcSize) { roots = lpc_to_lsp (st->lpc, st->lpcSize, st->lsp, 11, LSP_DELTA2, stack); if (roots!=st->lpcSize) { /*If we can't find all LSP's, do some damage control and use a flat filter*/ for (i=0;ilpcSize;i++) { st->lsp[i]=M_PI*((float)(i+1))/(st->lpcSize+1); } } } /* VBR code */ if ((st->vbr_enabled || st->vad_enabled) && !dtx) { float e_low=0, e_high=0; float ratio; if (st->abr_enabled) { float qual_change=0; if (st->abr_drift2 * st->abr_drift > 0) { /* Only adapt if long-term and short-term drift are the same sign */ qual_change = -.00001*st->abr_drift/(1+st->abr_count); if (qual_change>.1) qual_change=.1; if (qual_change<-.1) qual_change=-.1; } st->vbr_quality += qual_change; if (st->vbr_quality>10) st->vbr_quality=10; if (st->vbr_quality<0) st->vbr_quality=0; } /*FIXME: Are the two signals (low, high) in sync? */ e_low = compute_rms(st->x0d, st->frame_size); e_high = compute_rms(st->high, st->frame_size); ratio = 2*log((1+e_high)/(1+e_low)); speex_encoder_ctl(st->st_low, SPEEX_GET_RELATIVE_QUALITY, &st->relative_quality); if (ratio<-4) ratio=-4; if (ratio>2) ratio=2; /*if (ratio>-2)*/ if (st->vbr_enabled) { int modeid; modeid = mode->nb_modes-1; st->relative_quality+=1.0*(ratio+2); if (st->relative_quality<-1) st->relative_quality=-1; while (modeid) { int v1; float thresh; v1=(int)floor(st->vbr_quality); if (v1==10) thresh = mode->vbr_thresh[modeid][v1]; else thresh = (st->vbr_quality-v1) * mode->vbr_thresh[modeid][v1+1] + (1+v1-st->vbr_quality) * mode->vbr_thresh[modeid][v1]; if (st->relative_quality >= thresh) break; modeid--; } speex_encoder_ctl(state, SPEEX_SET_HIGH_MODE, &modeid); if (st->abr_enabled) { int bitrate; speex_encoder_ctl(state, SPEEX_GET_BITRATE, &bitrate); st->abr_drift+=(bitrate-st->abr_enabled); st->abr_drift2 = .95*st->abr_drift2 + .05*(bitrate-st->abr_enabled); st->abr_count += 1.0; } } else { /* VAD only */ int modeid; if (st->relative_quality<2.0) modeid=1; else modeid=st->submodeSelect; /*speex_encoder_ctl(state, SPEEX_SET_MODE, &mode);*/ st->submodeID=modeid; } /*fprintf (stderr, "%f %f\n", ratio, low_qual);*/ } if (st->encode_submode) { speex_bits_pack(bits, 1, 1); if (dtx) speex_bits_pack(bits, 0, SB_SUBMODE_BITS); else speex_bits_pack(bits, st->submodeID, SB_SUBMODE_BITS); } /* If null mode (no transmission), just set a couple things to zero*/ if (dtx || st->submodes[st->submodeID] == NULL) { for (i=0;iframe_size;i++) st->exc[i]=st->sw[i]=VERY_SMALL; for (i=0;ilpcSize;i++) st->mem_sw[i]=0; st->first=1; /* Final signal synthesis from excitation */ iir_mem2(st->exc, st->interp_qlpc, st->high, st->frame_size, st->lpcSize, st->mem_sp); #ifdef RESYNTH /* Reconstruct the original */ fir_mem_up(st->x0d, h0, st->y0, st->full_frame_size, QMF_ORDER, st->g0_mem, stack); fir_mem_up(st->high, h1, st->y1, st->full_frame_size, QMF_ORDER, st->g1_mem, stack); for (i=0;ifull_frame_size;i++) in[i]=SHR(st->y0[i]-st->y1[i], SIG_SHIFT-1); #endif if (dtx) return 0; else return 1; } /* LSP quantization */ SUBMODE(lsp_quant)(st->lsp, st->qlsp, st->lpcSize, bits); if (st->first) { for (i=0;ilpcSize;i++) st->old_lsp[i] = st->lsp[i]; for (i=0;ilpcSize;i++) st->old_qlsp[i] = st->qlsp[i]; } ALLOC(mem, st->lpcSize, spx_mem_t); ALLOC(syn_resp, st->subframeSize, spx_word16_t); ALLOC(innov, st->subframeSize, spx_sig_t); for (sub=0;subnbSubframes;sub++) { spx_sig_t *exc, *sp, *res, *target, *sw; spx_word16_t filter_ratio; int offset; spx_word32_t rl, rh; spx_word16_t eh=0; offset = st->subframeSize*sub; sp=st->high+offset; exc=st->exc+offset; res=st->res+offset; target=st->target+offset; sw=st->sw+offset; /* LSP interpolation (quantized and unquantized) */ lsp_interpolate(st->old_lsp, st->lsp, st->interp_lsp, st->lpcSize, sub, st->nbSubframes); lsp_interpolate(st->old_qlsp, st->qlsp, st->interp_qlsp, st->lpcSize, sub, st->nbSubframes); lsp_enforce_margin(st->interp_lsp, st->lpcSize, LSP_MARGIN); lsp_enforce_margin(st->interp_qlsp, st->lpcSize, LSP_MARGIN); lsp_to_lpc(st->interp_lsp, st->interp_lpc, st->lpcSize,stack); lsp_to_lpc(st->interp_qlsp, st->interp_qlpc, st->lpcSize, stack); bw_lpc(st->gamma1, st->interp_lpc, st->bw_lpc1, st->lpcSize); bw_lpc(st->gamma2, st->interp_lpc, st->bw_lpc2, st->lpcSize); /* Compute mid-band (4000 Hz for wideband) response of low-band and high-band filters */ st->pi_gain[sub]=LPC_SCALING; rh = LPC_SCALING; for (i=0;ilpcSize;i+=2) { rh += st->interp_qlpc[i+1] - st->interp_qlpc[i]; st->pi_gain[sub] += st->interp_qlpc[i] + st->interp_qlpc[i+1]; } rl = low_pi_gain[sub]; #ifdef FIXED_POINT filter_ratio=DIV32_16(SHL(rl+82,2),SHR(82+rh,5)); #else filter_ratio=(rl+.01)/(rh+.01); #endif /* Compute "real excitation" */ fir_mem2(sp, st->interp_qlpc, exc, st->subframeSize, st->lpcSize, st->mem_sp2); /* Compute energy of low-band and high-band excitation */ eh = compute_rms(exc, st->subframeSize); if (!SUBMODE(innovation_quant)) {/* 1 for spectral folding excitation, 0 for stochastic */ float g; spx_word16_t el; el = compute_rms(low_innov+offset, st->subframeSize); /* Gain to use if we want to use the low-band excitation for high-band */ g=eh/(.01+el); #if 0 { char *tmp_stack=stack; float *tmp_sig; float g2; ALLOC(tmp_sig, st->subframeSize, spx_sig_t); for (i=0;ilpcSize;i++) mem[i]=st->mem_sp[i]; iir_mem2(low_innov+offset, st->interp_qlpc, tmp_sig, st->subframeSize, st->lpcSize, mem); g2 = compute_rms(sp, st->subframeSize)/(.01+compute_rms(tmp_sig, st->subframeSize)); /*fprintf (stderr, "gains: %f %f\n", g, g2);*/ g = g2; stack = tmp_stack; } #endif #ifdef FIXED_POINT g *= filter_ratio/128.; #else g *= filter_ratio; #endif /*print_vec(&g, 1, "gain factor");*/ /* Gain quantization */ { int quant = (int) floor(.5 + 10 + 8.0 * log((g+.0001))); /*speex_warning_int("tata", quant);*/ if (quant<0) quant=0; if (quant>31) quant=31; speex_bits_pack(bits, quant, 5); } } else { spx_word16_t gc; spx_word32_t scale; spx_word16_t el; el = compute_rms(low_exc+offset, st->subframeSize); gc = DIV32_16(MULT16_16(filter_ratio,1+eh),1+el); /* This is a kludge that cleans up a historical bug */ if (st->subframeSize==80) gc *= 0.70711; /*printf ("%f %f %f %f\n", el, eh, filter_ratio, gc);*/ #ifdef FIXED_POINT { int qgc = scal_quant(gc, gc_quant_bound, 16); speex_bits_pack(bits, qgc, 4); gc = MULT16_32_Q15(28626,gc_quant_bound[qgc]); } #else { int qgc = (int)floor(.5+3.7*(log(gc)+0.15556)); if (qgc<0) qgc=0; if (qgc>15) qgc=15; speex_bits_pack(bits, qgc, 4); gc = exp((1/3.7)*qgc-0.15556); } #endif if (st->subframeSize==80) gc *= 1.4142; scale = SHL(MULT16_16(DIV32_16(SHL(gc,SIG_SHIFT-4),filter_ratio),(1+el)),4); compute_impulse_response(st->interp_qlpc, st->bw_lpc1, st->bw_lpc2, syn_resp, st->subframeSize, st->lpcSize, stack); /* Reset excitation */ for (i=0;isubframeSize;i++) exc[i]=VERY_SMALL; /* Compute zero response (ringing) of A(z/g1) / ( A(z/g2) * Aq(z) ) */ for (i=0;ilpcSize;i++) mem[i]=st->mem_sp[i]; iir_mem2(exc, st->interp_qlpc, exc, st->subframeSize, st->lpcSize, mem); for (i=0;ilpcSize;i++) mem[i]=st->mem_sw[i]; filter_mem2(exc, st->bw_lpc1, st->bw_lpc2, res, st->subframeSize, st->lpcSize, mem); /* Compute weighted signal */ for (i=0;ilpcSize;i++) mem[i]=st->mem_sw[i]; filter_mem2(sp, st->bw_lpc1, st->bw_lpc2, sw, st->subframeSize, st->lpcSize, mem); /* Compute target signal */ for (i=0;isubframeSize;i++) target[i]=sw[i]-res[i]; for (i=0;isubframeSize;i++) exc[i]=0; signal_div(target, target, scale, st->subframeSize); /* Reset excitation */ for (i=0;isubframeSize;i++) innov[i]=0; /*print_vec(target, st->subframeSize, "\ntarget");*/ SUBMODE(innovation_quant)(target, st->interp_qlpc, st->bw_lpc1, st->bw_lpc2, SUBMODE(innovation_params), st->lpcSize, st->subframeSize, innov, syn_resp, bits, stack, (st->complexity+1)>>1, SUBMODE(double_codebook)); /*print_vec(target, st->subframeSize, "after");*/ signal_mul(innov, innov, scale, st->subframeSize); for (i=0;isubframeSize;i++) exc[i] = ADD32(exc[i], innov[i]); if (SUBMODE(double_codebook)) { char *tmp_stack=stack; VARDECL(spx_sig_t *innov2); ALLOC(innov2, st->subframeSize, spx_sig_t); for (i=0;isubframeSize;i++) innov2[i]=0; for (i=0;isubframeSize;i++) target[i]*=2.5; SUBMODE(innovation_quant)(target, st->interp_qlpc, st->bw_lpc1, st->bw_lpc2, SUBMODE(innovation_params), st->lpcSize, st->subframeSize, innov2, syn_resp, bits, stack, (st->complexity+1)>>1, 0); for (i=0;isubframeSize;i++) innov2[i]*=scale*(1/2.5)/SIG_SCALING; for (i=0;isubframeSize;i++) exc[i] = ADD32(exc[i],innov2[i]); stack = tmp_stack; } } /*Keep the previous memory*/ for (i=0;ilpcSize;i++) mem[i]=st->mem_sp[i]; /* Final signal synthesis from excitation */ iir_mem2(exc, st->interp_qlpc, sp, st->subframeSize, st->lpcSize, st->mem_sp); /* Compute weighted signal again, from synthesized speech (not sure it's the right thing) */ filter_mem2(sp, st->bw_lpc1, st->bw_lpc2, sw, st->subframeSize, st->lpcSize, st->mem_sw); } #ifdef RESYNTH /* Reconstruct the original */ fir_mem_up(st->x0d, h0, st->y0, st->full_frame_size, QMF_ORDER, st->g0_mem, stack); fir_mem_up(st->high, h1, st->y1, st->full_frame_size, QMF_ORDER, st->g1_mem, stack); for (i=0;ifull_frame_size;i++) in[i]=SHR(st->y0[i]-st->y1[i], SIG_SHIFT-1); #endif for (i=0;ilpcSize;i++) st->old_lsp[i] = st->lsp[i]; for (i=0;ilpcSize;i++) st->old_qlsp[i] = st->qlsp[i]; st->first=0; return 1; } void *sb_decoder_init(const SpeexMode *m) { SBDecState *st; const SpeexSBMode *mode; st = (SBDecState*)speex_alloc(sizeof(SBDecState)); if (!st) return NULL; #if defined(VAR_ARRAYS) || defined (USE_ALLOCA) st->stack = NULL; #else st->stack = (char*)speex_alloc_scratch(SB_DEC_STACK); #endif st->mode = m; mode=(const SpeexSBMode*)m->mode; st->encode_submode = 1; st->st_low = speex_decoder_init(mode->nb_mode); st->full_frame_size = 2*mode->frameSize; st->frame_size = mode->frameSize; st->subframeSize = mode->subframeSize; st->nbSubframes = mode->frameSize/mode->subframeSize; st->lpcSize=mode->lpcSize; speex_decoder_ctl(st->st_low, SPEEX_GET_SAMPLING_RATE, &st->sampling_rate); st->sampling_rate*=2; st->submodes=mode->submodes; st->submodeID=mode->defaultSubmode; st->first=1; st->x0d=speex_alloc((st->frame_size)*sizeof(spx_sig_t)); st->x1d=speex_alloc((st->frame_size)*sizeof(spx_sig_t)); st->high=speex_alloc((st->full_frame_size)*sizeof(spx_sig_t)); st->y0=speex_alloc((st->full_frame_size)*sizeof(spx_sig_t)); st->y1=speex_alloc((st->full_frame_size)*sizeof(spx_sig_t)); st->g0_mem=speex_alloc((QMF_ORDER)*sizeof(spx_word32_t)); st->g1_mem=speex_alloc((QMF_ORDER)*sizeof(spx_word32_t)); st->exc=speex_alloc((st->frame_size)*sizeof(spx_sig_t)); st->qlsp = speex_alloc((st->lpcSize)*sizeof(spx_lsp_t)); st->old_qlsp = speex_alloc((st->lpcSize)*sizeof(spx_lsp_t)); st->interp_qlsp = speex_alloc(st->lpcSize*sizeof(spx_lsp_t)); st->interp_qlpc = speex_alloc(st->lpcSize*sizeof(spx_coef_t)); st->pi_gain = speex_alloc((st->nbSubframes)*sizeof(spx_word32_t)); st->mem_sp = speex_alloc((2*st->lpcSize)*sizeof(spx_mem_t)); st->lpc_enh_enabled=0; st->seed = 1000; #ifdef ENABLE_VALGRIND VALGRIND_MAKE_READABLE(st, (st->stack-(char*)st)); #endif return st; } void sb_decoder_destroy(void *state) { SBDecState *st; st = (SBDecState*)state; speex_decoder_destroy(st->st_low); #if !(defined(VAR_ARRAYS) || defined (USE_ALLOCA)) speex_free_scratch(st->stack); #endif speex_free(st->x0d); speex_free(st->x1d); speex_free(st->high); speex_free(st->y0); speex_free(st->y1); speex_free(st->g0_mem); speex_free(st->g1_mem); speex_free(st->exc); speex_free(st->qlsp); speex_free(st->old_qlsp); speex_free(st->interp_qlsp); speex_free(st->interp_qlpc); speex_free(st->pi_gain); speex_free(st->mem_sp); speex_free(state); } static void sb_decode_lost(SBDecState *st, spx_word16_t *out, int dtx, char *stack) { int i; VARDECL(spx_coef_t *awk1); VARDECL(spx_coef_t *awk2); VARDECL(spx_coef_t *awk3); int saved_modeid=0; if (dtx) { saved_modeid=st->submodeID; st->submodeID=1; } else { bw_lpc(GAMMA_SCALING*0.99, st->interp_qlpc, st->interp_qlpc, st->lpcSize); } st->first=1; ALLOC(awk1, st->lpcSize+1, spx_coef_t); ALLOC(awk2, st->lpcSize+1, spx_coef_t); ALLOC(awk3, st->lpcSize+1, spx_coef_t); if (st->lpc_enh_enabled) { spx_word16_t k1,k2,k3; if (st->submodes[st->submodeID] != NULL) { k1=SUBMODE(lpc_enh_k1); k2=SUBMODE(lpc_enh_k2); k3=SUBMODE(lpc_enh_k3); } else { k1=k2=.7*GAMMA_SCALING; k3 = 0; } bw_lpc(k1, st->interp_qlpc, awk1, st->lpcSize); bw_lpc(k2, st->interp_qlpc, awk2, st->lpcSize); bw_lpc(k3, st->interp_qlpc, awk3, st->lpcSize); /*fprintf (stderr, "%f %f %f\n", k1, k2, k3);*/ } /* Final signal synthesis from excitation */ if (!dtx) { spx_word16_t low_ener; low_ener = .9*compute_rms(st->exc, st->frame_size); for (i=0;iframe_size;i++) st->exc[i] = speex_rand(low_ener, &st->seed); } for (i=0;iframe_size;i++) st->high[i]=st->exc[i]; if (st->lpc_enh_enabled) { /* Use enhanced LPC filter */ filter_mem2(st->high, awk2, awk1, st->high, st->frame_size, st->lpcSize, st->mem_sp+st->lpcSize); filter_mem2(st->high, awk3, st->interp_qlpc, st->high, st->frame_size, st->lpcSize, st->mem_sp); } else { /* Use regular filter */ for (i=0;ilpcSize;i++) st->mem_sp[st->lpcSize+i] = 0; iir_mem2(st->high, st->interp_qlpc, st->high, st->frame_size, st->lpcSize, st->mem_sp); } /*iir_mem2(st->exc, st->interp_qlpc, st->high, st->frame_size, st->lpcSize, st->mem_sp);*/ /* Reconstruct the original */ fir_mem_up(st->x0d, h0, st->y0, st->full_frame_size, QMF_ORDER, st->g0_mem, stack); fir_mem_up(st->high, h1, st->y1, st->full_frame_size, QMF_ORDER, st->g1_mem, stack); mix_and_saturate(st->y0, st->y1, out, st->full_frame_size); if (dtx) { st->submodeID=saved_modeid; } return; } int sb_decode(void *state, SpeexBits *bits, void *vout) { int i, sub; SBDecState *st; int wideband; int ret; char *stack; VARDECL(spx_word32_t *low_pi_gain); VARDECL(spx_sig_t *low_exc); VARDECL(spx_sig_t *low_innov); VARDECL(spx_coef_t *awk1); VARDECL(spx_coef_t *awk2); VARDECL(spx_coef_t *awk3); int dtx; const SpeexSBMode *mode; spx_word16_t *out = vout; st = (SBDecState*)state; stack=st->stack; mode = (const SpeexSBMode*)(st->mode->mode); { VARDECL(spx_word16_t *low); ALLOC(low, st->frame_size, spx_word16_t); /* Decode the low-band */ ret = speex_decode_native(st->st_low, bits, low); for (i=0;iframe_size;i++) st->x0d[i] = SHL((spx_sig_t)low[i], SIG_SHIFT); } speex_decoder_ctl(st->st_low, SPEEX_GET_DTX_STATUS, &dtx); /* If error decoding the narrowband part, propagate error */ if (ret!=0) { return ret; } if (!bits) { sb_decode_lost(st, out, dtx, stack); return 0; } if (st->encode_submode) { /*Check "wideband bit"*/ if (speex_bits_remaining(bits)>0) wideband = speex_bits_peek(bits); else wideband = 0; if (wideband) { /*Regular wideband frame, read the submode*/ wideband = speex_bits_unpack_unsigned(bits, 1); st->submodeID = speex_bits_unpack_unsigned(bits, SB_SUBMODE_BITS); } else { /*Was a narrowband frame, set "null submode"*/ st->submodeID = 0; } if (st->submodeID != 0 && st->submodes[st->submodeID] == NULL) { speex_warning("Invalid mode encountered: corrupted stream?"); return -2; } } /* If null mode (no transmission), just set a couple things to zero*/ if (st->submodes[st->submodeID] == NULL) { if (dtx) { sb_decode_lost(st, out, 1, stack); return 0; } for (i=0;iframe_size;i++) st->exc[i]=VERY_SMALL; st->first=1; /* Final signal synthesis from excitation */ iir_mem2(st->exc, st->interp_qlpc, st->high, st->frame_size, st->lpcSize, st->mem_sp); fir_mem_up(st->x0d, h0, st->y0, st->full_frame_size, QMF_ORDER, st->g0_mem, stack); fir_mem_up(st->high, h1, st->y1, st->full_frame_size, QMF_ORDER, st->g1_mem, stack); mix_and_saturate(st->y0, st->y1, out, st->full_frame_size); return 0; } for (i=0;iframe_size;i++) st->exc[i]=0; ALLOC(low_pi_gain, st->nbSubframes, spx_word32_t); ALLOC(low_exc, st->frame_size, spx_sig_t); ALLOC(low_innov, st->frame_size, spx_sig_t); speex_decoder_ctl(st->st_low, SPEEX_GET_PI_GAIN, low_pi_gain); speex_decoder_ctl(st->st_low, SPEEX_GET_EXC, low_exc); speex_decoder_ctl(st->st_low, SPEEX_GET_INNOV, low_innov); SUBMODE(lsp_unquant)(st->qlsp, st->lpcSize, bits); if (st->first) { for (i=0;ilpcSize;i++) st->old_qlsp[i] = st->qlsp[i]; } ALLOC(awk1, st->lpcSize+1, spx_coef_t); ALLOC(awk2, st->lpcSize+1, spx_coef_t); ALLOC(awk3, st->lpcSize+1, spx_coef_t); for (sub=0;subnbSubframes;sub++) { spx_sig_t *exc, *sp; spx_word16_t filter_ratio; spx_word16_t el=0; int offset; spx_word32_t rl=0,rh=0; offset = st->subframeSize*sub; sp=st->high+offset; exc=st->exc+offset; /* LSP interpolation */ lsp_interpolate(st->old_qlsp, st->qlsp, st->interp_qlsp, st->lpcSize, sub, st->nbSubframes); lsp_enforce_margin(st->interp_qlsp, st->lpcSize, LSP_MARGIN); /* LSP to LPC */ lsp_to_lpc(st->interp_qlsp, st->interp_qlpc, st->lpcSize, stack); if (st->lpc_enh_enabled) { spx_word16_t k1,k2,k3; k1=SUBMODE(lpc_enh_k1); k2=SUBMODE(lpc_enh_k2); k3=SUBMODE(lpc_enh_k3); bw_lpc(k1, st->interp_qlpc, awk1, st->lpcSize); bw_lpc(k2, st->interp_qlpc, awk2, st->lpcSize); bw_lpc(k3, st->interp_qlpc, awk3, st->lpcSize); /*fprintf (stderr, "%f %f %f\n", k1, k2, k3);*/ } /* Calculate reponse ratio between the low and high filter in the middle of the band (4000 Hz) */ st->pi_gain[sub]=LPC_SCALING; rh = LPC_SCALING; for (i=0;ilpcSize;i+=2) { rh += st->interp_qlpc[i+1] - st->interp_qlpc[i]; st->pi_gain[sub] += st->interp_qlpc[i] + st->interp_qlpc[i+1]; } rl = low_pi_gain[sub]; #ifdef FIXED_POINT filter_ratio=DIV32_16(SHL(rl+82,2),SHR(82+rh,5)); #else filter_ratio=(rl+.01)/(rh+.01); #endif for (i=0;isubframeSize;i++) exc[i]=0; if (!SUBMODE(innovation_unquant)) { float g; int quant; quant = speex_bits_unpack_unsigned(bits, 5); g= exp(((float)quant-10)/8.0); #ifdef FIXED_POINT g /= filter_ratio/128.; #else g /= filter_ratio; #endif /* High-band excitation using the low-band excitation and a gain */ #if 0 for (i=0;isubframeSize;i++) exc[i]=mode->folding_gain*g*low_innov[offset+i]; #else { float tmp=1; /*static tmp1=0,tmp2=0; static int seed=1; el = compute_rms(low_innov+offset, st->subframeSize);*/ for (i=0;isubframeSize;i++) { float e=tmp*g*mode->folding_gain*low_innov[offset+i]; tmp *= -1; exc[i] = e; /*float r = speex_rand(g*el,&seed); exc[i] = .5*(r+tmp2 + e-tmp1); tmp1 = e; tmp2 = r;*/ } } /*speex_rand_vec(mode->folding_gain*g*el, exc, st->subframeSize);*/ #endif } else { spx_word16_t gc; spx_word32_t scale; int qgc = speex_bits_unpack_unsigned(bits, 4); el = compute_rms(low_exc+offset, st->subframeSize); #ifdef FIXED_POINT gc = MULT16_32_Q15(28626,gc_quant_bound[qgc]); #else gc = exp((1/3.7)*qgc-0.15556); #endif if (st->subframeSize==80) gc *= 1.4142; scale = SHL(MULT16_16(DIV32_16(SHL(gc,SIG_SHIFT-4),filter_ratio),(1+el)),4); SUBMODE(innovation_unquant)(exc, SUBMODE(innovation_params), st->subframeSize, bits, stack); signal_mul(exc,exc,scale,st->subframeSize); if (SUBMODE(double_codebook)) { char *tmp_stack=stack; VARDECL(spx_sig_t *innov2); ALLOC(innov2, st->subframeSize, spx_sig_t); for (i=0;isubframeSize;i++) innov2[i]=0; SUBMODE(innovation_unquant)(innov2, SUBMODE(innovation_params), st->subframeSize, bits, stack); for (i=0;isubframeSize;i++) innov2[i]*=scale/(float)SIG_SCALING*(1/2.5); for (i=0;isubframeSize;i++) exc[i] = ADD32(exc[i],innov2[i]); stack = tmp_stack; } } for (i=0;isubframeSize;i++) sp[i]=exc[i]; if (st->lpc_enh_enabled) { /* Use enhanced LPC filter */ filter_mem2(sp, awk2, awk1, sp, st->subframeSize, st->lpcSize, st->mem_sp+st->lpcSize); filter_mem2(sp, awk3, st->interp_qlpc, sp, st->subframeSize, st->lpcSize, st->mem_sp); } else { /* Use regular filter */ for (i=0;ilpcSize;i++) st->mem_sp[st->lpcSize+i] = 0; iir_mem2(sp, st->interp_qlpc, sp, st->subframeSize, st->lpcSize, st->mem_sp); } /*iir_mem2(exc, st->interp_qlpc, sp, st->subframeSize, st->lpcSize, st->mem_sp);*/ } fir_mem_up(st->x0d, h0, st->y0, st->full_frame_size, QMF_ORDER, st->g0_mem, stack); fir_mem_up(st->high, h1, st->y1, st->full_frame_size, QMF_ORDER, st->g1_mem, stack); mix_and_saturate(st->y0, st->y1, out, st->full_frame_size); for (i=0;ilpcSize;i++) st->old_qlsp[i] = st->qlsp[i]; st->first=0; return 0; } int sb_encoder_ctl(void *state, int request, void *ptr) { SBEncState *st; st=(SBEncState*)state; switch(request) { case SPEEX_GET_FRAME_SIZE: (*(int*)ptr) = st->full_frame_size; break; case SPEEX_SET_HIGH_MODE: st->submodeSelect = st->submodeID = (*(int*)ptr); break; case SPEEX_SET_LOW_MODE: speex_encoder_ctl(st->st_low, SPEEX_SET_LOW_MODE, ptr); break; case SPEEX_SET_DTX: speex_encoder_ctl(st->st_low, SPEEX_SET_DTX, ptr); break; case SPEEX_GET_DTX: speex_encoder_ctl(st->st_low, SPEEX_GET_DTX, ptr); break; case SPEEX_GET_LOW_MODE: speex_encoder_ctl(st->st_low, SPEEX_GET_LOW_MODE, ptr); break; case SPEEX_SET_MODE: speex_encoder_ctl(st, SPEEX_SET_QUALITY, ptr); break; case SPEEX_SET_VBR: st->vbr_enabled = (*(int*)ptr); speex_encoder_ctl(st->st_low, SPEEX_SET_VBR, ptr); break; case SPEEX_GET_VBR: (*(int*)ptr) = st->vbr_enabled; break; case SPEEX_SET_VAD: st->vad_enabled = (*(int*)ptr); speex_encoder_ctl(st->st_low, SPEEX_SET_VAD, ptr); break; case SPEEX_GET_VAD: (*(int*)ptr) = st->vad_enabled; break; case SPEEX_SET_VBR_QUALITY: { int q; float qual = (*(float*)ptr)+.6; st->vbr_quality = (*(float*)ptr); if (qual>10) qual=10; q=(int)floor(.5+*(float*)ptr); if (q>10) q=10; speex_encoder_ctl(st->st_low, SPEEX_SET_VBR_QUALITY, &qual); speex_encoder_ctl(state, SPEEX_SET_QUALITY, &q); break; } case SPEEX_GET_VBR_QUALITY: (*(float*)ptr) = st->vbr_quality; break; case SPEEX_SET_ABR: st->abr_enabled = (*(int*)ptr); st->vbr_enabled = 1; speex_encoder_ctl(st->st_low, SPEEX_SET_VBR, &st->vbr_enabled); { int i=10, rate, target; float vbr_qual; target = (*(int*)ptr); while (i>=0) { speex_encoder_ctl(st, SPEEX_SET_QUALITY, &i); speex_encoder_ctl(st, SPEEX_GET_BITRATE, &rate); if (rate <= target) break; i--; } vbr_qual=i; if (vbr_qual<0) vbr_qual=0; speex_encoder_ctl(st, SPEEX_SET_VBR_QUALITY, &vbr_qual); st->abr_count=0; st->abr_drift=0; st->abr_drift2=0; } break; case SPEEX_GET_ABR: (*(int*)ptr) = st->abr_enabled; break; case SPEEX_SET_QUALITY: { int nb_qual; int quality = (*(int*)ptr); if (quality < 0) quality = 0; if (quality > 10) quality = 10; st->submodeSelect = st->submodeID = ((const SpeexSBMode*)(st->mode->mode))->quality_map[quality]; nb_qual = ((const SpeexSBMode*)(st->mode->mode))->low_quality_map[quality]; speex_encoder_ctl(st->st_low, SPEEX_SET_MODE, &nb_qual); } break; case SPEEX_SET_COMPLEXITY: speex_encoder_ctl(st->st_low, SPEEX_SET_COMPLEXITY, ptr); st->complexity = (*(int*)ptr); if (st->complexity<1) st->complexity=1; break; case SPEEX_GET_COMPLEXITY: (*(int*)ptr) = st->complexity; break; case SPEEX_SET_BITRATE: { int i=10, rate, target; target = (*(int*)ptr); while (i>=0) { speex_encoder_ctl(st, SPEEX_SET_QUALITY, &i); speex_encoder_ctl(st, SPEEX_GET_BITRATE, &rate); if (rate <= target) break; i--; } } break; case SPEEX_GET_BITRATE: speex_encoder_ctl(st->st_low, request, ptr); /*fprintf (stderr, "before: %d\n", (*(int*)ptr));*/ if (st->submodes[st->submodeID]) (*(int*)ptr) += st->sampling_rate*SUBMODE(bits_per_frame)/st->full_frame_size; else (*(int*)ptr) += st->sampling_rate*(SB_SUBMODE_BITS+1)/st->full_frame_size; /*fprintf (stderr, "after: %d\n", (*(int*)ptr));*/ break; case SPEEX_SET_SAMPLING_RATE: { int tmp=(*(int*)ptr); st->sampling_rate = tmp; tmp>>=1; speex_encoder_ctl(st->st_low, SPEEX_SET_SAMPLING_RATE, &tmp); } break; case SPEEX_GET_SAMPLING_RATE: (*(int*)ptr)=st->sampling_rate; break; case SPEEX_RESET_STATE: { int i; st->first = 1; for (i=0;ilpcSize;i++) st->lsp[i]=(M_PI*((float)(i+1)))/(st->lpcSize+1); for (i=0;ilpcSize;i++) st->mem_sw[i]=st->mem_sp[i]=st->mem_sp2[i]=0; for (i=0;ibufSize;i++) st->excBuf[i]=0; for (i=0;ih0_mem[i]=st->h1_mem[i]=st->g0_mem[i]=st->g1_mem[i]=0; } break; case SPEEX_SET_SUBMODE_ENCODING: st->encode_submode = (*(int*)ptr); speex_encoder_ctl(st->st_low, SPEEX_SET_SUBMODE_ENCODING, &ptr); break; case SPEEX_GET_SUBMODE_ENCODING: (*(int*)ptr) = st->encode_submode; break; case SPEEX_GET_LOOKAHEAD: speex_encoder_ctl(st->st_low, SPEEX_GET_LOOKAHEAD, ptr); (*(int*)ptr) = 2*(*(int*)ptr) + QMF_ORDER - 1; break; case SPEEX_GET_PI_GAIN: { int i; spx_word32_t *g = (spx_word32_t*)ptr; for (i=0;inbSubframes;i++) g[i]=st->pi_gain[i]; } break; case SPEEX_GET_EXC: { int i; spx_sig_t *e = (spx_sig_t*)ptr; for (i=0;ifull_frame_size;i++) e[i]=0; for (i=0;iframe_size;i++) e[2*i]=2*st->exc[i]; } break; case SPEEX_GET_INNOV: { int i; spx_sig_t *e = (spx_sig_t*)ptr; for (i=0;ifull_frame_size;i++) e[i]=0; for (i=0;iframe_size;i++) e[2*i]=2*st->exc[i]; } break; case SPEEX_GET_RELATIVE_QUALITY: (*(float*)ptr)=st->relative_quality; break; default: speex_warning_int("Unknown nb_ctl request: ", request); return -1; } return 0; } int sb_decoder_ctl(void *state, int request, void *ptr) { SBDecState *st; st=(SBDecState*)state; switch(request) { case SPEEX_SET_HIGH_MODE: st->submodeID = (*(int*)ptr); break; case SPEEX_SET_LOW_MODE: speex_decoder_ctl(st->st_low, SPEEX_SET_LOW_MODE, ptr); break; case SPEEX_GET_LOW_MODE: speex_decoder_ctl(st->st_low, SPEEX_GET_LOW_MODE, ptr); break; case SPEEX_GET_FRAME_SIZE: (*(int*)ptr) = st->full_frame_size; break; case SPEEX_SET_ENH: speex_decoder_ctl(st->st_low, request, ptr); st->lpc_enh_enabled = *((int*)ptr); break; case SPEEX_GET_ENH: *((int*)ptr) = st->lpc_enh_enabled; break; case SPEEX_SET_MODE: case SPEEX_SET_QUALITY: { int nb_qual; int quality = (*(int*)ptr); if (quality < 0) quality = 0; if (quality > 10) quality = 10; st->submodeID = ((const SpeexSBMode*)(st->mode->mode))->quality_map[quality]; nb_qual = ((const SpeexSBMode*)(st->mode->mode))->low_quality_map[quality]; speex_decoder_ctl(st->st_low, SPEEX_SET_MODE, &nb_qual); } break; case SPEEX_GET_BITRATE: speex_decoder_ctl(st->st_low, request, ptr); if (st->submodes[st->submodeID]) (*(int*)ptr) += st->sampling_rate*SUBMODE(bits_per_frame)/st->full_frame_size; else (*(int*)ptr) += st->sampling_rate*(SB_SUBMODE_BITS+1)/st->full_frame_size; break; case SPEEX_SET_SAMPLING_RATE: { int tmp=(*(int*)ptr); st->sampling_rate = tmp; tmp>>=1; speex_decoder_ctl(st->st_low, SPEEX_SET_SAMPLING_RATE, &tmp); } break; case SPEEX_GET_SAMPLING_RATE: (*(int*)ptr)=st->sampling_rate; break; case SPEEX_SET_HANDLER: speex_decoder_ctl(st->st_low, SPEEX_SET_HANDLER, ptr); break; case SPEEX_SET_USER_HANDLER: speex_decoder_ctl(st->st_low, SPEEX_SET_USER_HANDLER, ptr); break; case SPEEX_RESET_STATE: { int i; for (i=0;i<2*st->lpcSize;i++) st->mem_sp[i]=0; for (i=0;ig0_mem[i]=st->g1_mem[i]=0; } break; case SPEEX_SET_SUBMODE_ENCODING: st->encode_submode = (*(int*)ptr); speex_decoder_ctl(st->st_low, SPEEX_SET_SUBMODE_ENCODING, &ptr); break; case SPEEX_GET_SUBMODE_ENCODING: (*(int*)ptr) = st->encode_submode; break; case SPEEX_GET_PI_GAIN: { int i; spx_word32_t *g = (spx_word32_t*)ptr; for (i=0;inbSubframes;i++) g[i]=st->pi_gain[i]; } break; case SPEEX_GET_EXC: { int i; spx_sig_t *e = (spx_sig_t*)ptr; for (i=0;ifull_frame_size;i++) e[i]=0; for (i=0;iframe_size;i++) e[2*i]=2*st->exc[i]; } break; case SPEEX_GET_INNOV: { int i; spx_sig_t *e = (spx_sig_t*)ptr; for (i=0;ifull_frame_size;i++) e[i]=0; for (i=0;iframe_size;i++) e[2*i]=2*st->exc[i]; } break; case SPEEX_GET_DTX_STATUS: speex_decoder_ctl(st->st_low, SPEEX_GET_DTX_STATUS, ptr); break; default: speex_warning_int("Unknown nb_ctl request: ", request); return -1; } return 0; } #endif h323plus/plugins/audio/Speex/libspeex/cb_search_arm4.h0000644000175000017500000001142111341106241021565 0ustar markmark/* Copyright (C) 2004 Jean-Marc Valin */ /** @file cb_search_arm4.h @brief Fixed codebook functions (ARM4 version) */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #define OVERRIDE_COMPUTE_WEIGHTED_CODEBOOK static void compute_weighted_codebook(const signed char *shape_cb, const spx_sig_t *r, spx_word16_t *resp, spx_word16_t *resp2, spx_word32_t *E, int shape_cb_size, int subvect_size, char *stack) { int i, j, k; //const signed char *shape; for (i=0;i static inline void _spx_mm_getr_ps (__m128 U, float *__Z, float *__Y, float *__X, float *__W) { union { float __a[4]; __m128 __v; } __u; __u.__v = U; *__Z = __u.__a[0]; *__Y = __u.__a[1]; *__X = __u.__a[2]; *__W = __u.__a[3]; } #define OVERRIDE_COMPUTE_WEIGHTED_CODEBOOK static void compute_weighted_codebook(const signed char *shape_cb, const spx_sig_t *_r, float *resp, __m128 *resp2, __m128 *E, int shape_cb_size, int subvect_size, char *stack) { int i, j, k; __m128 resj, EE; VARDECL(__m128 *r); VARDECL(__m128 *shape); ALLOC(r, subvect_size, __m128); ALLOC(shape, subvect_size, __m128); for(j=0;j>2] = EE; } } h323plus/plugins/audio/Speex/libspeex/vq.c0000644000175000017500000001074711341106241017364 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin File: vq.c Vector quantization Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "vq.h" #include "stack_alloc.h" #include "misc.h" #ifdef _USE_SSE #include #include "vq_sse.h" #elif defined(SHORTCUTS) && (defined(ARM4_ASM) || defined(ARM5E_ASM)) #include "vq_arm4.h" #elif defined(BFIN_ASM) #include "vq_bfin.h" #endif int scal_quant(spx_word16_t in, const spx_word16_t *boundary, int entries) { int i=0; while (iboundary[0]) { boundary++; i++; } return i; } int scal_quant32(spx_word32_t in, const spx_word32_t *boundary, int entries) { int i=0; while (iboundary[0]) { boundary++; i++; } return i; } /*Finds the index of the entry in a codebook that best matches the input*/ int vq_index(float *in, const float *codebook, int len, int entries) { int i,j; float min_dist=0; int best_index=0; for (i=0;i= 1) && (k > used || dist < best_dist[k-1]); k--) { best_dist[k]=best_dist[k-1]; nbest[k] = nbest[k-1]; } best_dist[k]=dist; nbest[k]=i; used++; } } } #endif #ifndef OVERRIDE_VQ_NBEST_SIGN /*Finds the indices of the n-best entries in a codebook with sign*/ void vq_nbest_sign(spx_word16_t *in, const spx_word16_t *codebook, int len, int entries, spx_word32_t *E, int N, int *nbest, spx_word32_t *best_dist, char *stack) { int i,j,k, sign, used; used=0; for (i=0;i0) { sign=0; dist=-dist; } else { sign=1; } #ifdef FIXED_POINT dist = ADD32(dist,SHR32(E[i],1)); #else dist = ADD32(dist,.5f*E[i]); #endif if (i= 1) && (k > used || dist < best_dist[k-1]); k--) { best_dist[k]=best_dist[k-1]; nbest[k] = nbest[k-1]; } best_dist[k]=dist; nbest[k]=i; used++; if (sign) nbest[k]+=entries; } } } #endif h323plus/plugins/audio/Speex/libspeex/fftwrap.c0000644000175000017500000001637711341106241020414 0ustar markmark/* Copyright (C) 2005 Jean-Marc Valin File: fftwrap.c Wrapper for various FFTs Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef _WIN32 #pragma warning(disable:4244) #endif /*#define USE_SMALLFT*/ #define USE_KISS_FFT #include "misc.h" #ifdef FIXED_POINT static int maximize_range(spx_word16_t *in, spx_word16_t *out, spx_word16_t bound, int len) { int i, shift; spx_word16_t max_val = 0; for (i=0;imax_val) max_val = in[i]; if (-in[i]>max_val) max_val = -in[i]; } shift=0; while (max_val <= (bound>>1) && max_val != 0) { max_val <<= 1; shift++; } for (i=0;i> shift; } } #endif #ifdef USE_SMALLFT #include "smallft.h" #include void *spx_fft_init(int size) { struct drft_lookup *table; table = speex_alloc(sizeof(struct drft_lookup)); spx_drft_init((struct drft_lookup *)table, size); return (void*)table; } void spx_fft_destroy(void *table) { spx_drft_clear(table); speex_free(table); } void spx_fft(void *table, float *in, float *out) { if (in==out) { int i; speex_warning("FFT should not be done in-place"); float scale = 1./((struct drft_lookup *)table)->n; for (i=0;i<((struct drft_lookup *)table)->n;i++) out[i] = scale*in[i]; } else { int i; float scale = 1./((struct drft_lookup *)table)->n; for (i=0;i<((struct drft_lookup *)table)->n;i++) out[i] = scale*in[i]; } spx_drft_forward((struct drft_lookup *)table, out); } void spx_ifft(void *table, float *in, float *out) { if (in==out) { int i; speex_warning("FFT should not be done in-place"); } else { int i; for (i=0;i<((struct drft_lookup *)table)->n;i++) out[i] = in[i]; } spx_drft_backward((struct drft_lookup *)table, out); } #elif defined(USE_KISS_FFT) #include "kiss_fftr.h" #include "kiss_fft.h" struct kiss_config { kiss_fftr_cfg forward; kiss_fftr_cfg backward; kiss_fft_cpx *freq_data; int N; }; void *spx_fft_init(int size) { struct kiss_config *table; table = speex_alloc(sizeof(struct kiss_config)); table->freq_data = speex_alloc(sizeof(kiss_fft_cpx)*((size>>1)+1)); table->forward = kiss_fftr_alloc(size,0,NULL,NULL); table->backward = kiss_fftr_alloc(size,1,NULL,NULL); table->N = size; return table; } void spx_fft_destroy(void *table) { struct kiss_config *t = (struct kiss_config *)table; kiss_fftr_free(t->forward); kiss_fftr_free(t->backward); speex_free(t->freq_data); speex_free(table); } #ifdef FIXED_POINT void spx_fft(void *table, spx_word16_t *in, spx_word16_t *out) { int i; int shift; struct kiss_config *t = (struct kiss_config *)table; shift = maximize_range(in, in, 32000, t->N); kiss_fftr(t->forward, in, t->freq_data); out[0] = t->freq_data[0].r; for (i=1;iN>>1;i++) { out[(i<<1)-1] = t->freq_data[i].r; out[(i<<1)] = t->freq_data[i].i; } out[(i<<1)-1] = t->freq_data[i].r; renorm_range(in, in, shift, t->N); renorm_range(out, out, shift, t->N); } #else void spx_fft(void *table, spx_word16_t *in, spx_word16_t *out) { int i; float scale; struct kiss_config *t = (struct kiss_config *)table; scale = 1./t->N; kiss_fftr(t->forward, in, t->freq_data); out[0] = scale*t->freq_data[0].r; for (i=1;iN>>1;i++) { out[(i<<1)-1] = scale*t->freq_data[i].r; out[(i<<1)] = scale*t->freq_data[i].i; } out[(i<<1)-1] = scale*t->freq_data[i].r; } #endif void spx_ifft(void *table, spx_word16_t *in, spx_word16_t *out) { int i; struct kiss_config *t = (struct kiss_config *)table; t->freq_data[0].r = in[0]; t->freq_data[0].i = 0; for (i=1;iN>>1;i++) { t->freq_data[i].r = in[(i<<1)-1]; t->freq_data[i].i = in[(i<<1)]; } t->freq_data[i].r = in[(i<<1)-1]; t->freq_data[i].i = 0; kiss_fftri(t->backward, t->freq_data, out); } #else #error No other FFT implemented #endif int fixed_point = 1; #ifdef FIXED_POINT #include "smallft.h" void spx_fft_float(void *table, float *in, float *out) { int i; #ifdef USE_SMALLFT int N = ((struct drft_lookup *)table)->n; #elif defined(USE_KISS_FFT) int N = ((struct kiss_config *)table)->N; #else #endif spx_word16_t _in[N]; spx_word16_t _out[N]; for (i=0;iN); float scale = 1./((struct kiss_config *)table)->N; for (i=0;i<((struct kiss_config *)table)->N;i++) out[i] = scale*in[i]; spx_drft_forward(&t, out); spx_drft_clear(&t); } } void spx_ifft_float(void *table, float *in, float *out) { int i; #ifdef USE_SMALLFT int N = ((struct drft_lookup *)table)->n; #elif defined(USE_KISS_FFT) int N = ((struct kiss_config *)table)->N; #else #endif spx_word16_t _in[N]; spx_word16_t _out[N]; for (i=0;iN); for (i=0;i<((struct kiss_config *)table)->N;i++) out[i] = in[i]; spx_drft_backward(&t, out); spx_drft_clear(&t); } } #else void spx_fft_float(void *table, float *in, float *out) { spx_fft(table, in, out); } void spx_ifft_float(void *table, float *in, float *out) { spx_ifft(table, in, out); } #endif h323plus/plugins/audio/Speex/libspeex/testdenoise.c0000644000175000017500000000177711341106241021267 0ustar markmark#ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #define NN 160 int main() { short in[NN]; int i; SpeexPreprocessState *st; int count=0; float f; st = speex_preprocess_state_init(NN, 8000); i=1; speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_DENOISE, &i); i=0; speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_AGC, &i); f=8000; speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_AGC_LEVEL, &f); i=0; speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_DEREVERB, &i); f=.4; speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_DEREVERB_DECAY, &f); f=.3; speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_DEREVERB_LEVEL, &f); while (1) { int vad; fread(in, sizeof(short), NN, stdin); if (feof(stdin)) break; vad = speex_preprocess(st, in, NULL); /*fprintf (stderr, "%d\n", vad);*/ fwrite(in, sizeof(short), NN, stdout); count++; } speex_preprocess_state_destroy(st); return 0; } h323plus/plugins/audio/Speex/libspeex/filters.c0000644000175000017500000003764211341106241020411 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin File: filters.c Various analysis/synthesis filters Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "filters.h" #include "stack_alloc.h" #include "misc.h" #include "math_approx.h" #include "ltp.h" #include #ifdef _USE_SSE #include "filters_sse.h" #elif defined (ARM4_ASM) || defined(ARM5E_ASM) #include "filters_arm4.h" #elif defined (BFIN_ASM) #include "filters_bfin.h" #endif void bw_lpc(spx_word16_t gamma, const spx_coef_t *lpc_in, spx_coef_t *lpc_out, int order) { int i; spx_word16_t tmp=gamma; for (i=0;i SHL32(EXTEND32(SIG_SCALING), 8)) { spx_word16_t scale_1; scale = PSHR32(scale, SIG_SHIFT); scale_1 = EXTRACT16(DIV32_16(SHL32(EXTEND32(SIG_SCALING),7),scale)); for (i=0;i max_val) max_val = tmp; } sig_shift=0; while (max_val>16383) { sig_shift++; max_val >>= 1; } for (i=0;i= max_val) max_val = tmp; } sig_shift=0; while (max_val>max_scale) { sig_shift++; max_val >>= 1; } for (i=0;i>1; for (i=0;ilast_pitch=0; mem->last_pitch_gain[0]=mem->last_pitch_gain[1]=mem->last_pitch_gain[2]=0; mem->smooth_gain=1; } #ifdef FIXED_POINT #define COMB_STEP 32767 #else #define COMB_STEP 1.0 #endif void comb_filter( spx_sig_t *exc, /*decoded excitation*/ spx_sig_t *new_exc, /*enhanced excitation*/ spx_coef_t *ak, /*LPC filter coefs*/ int p, /*LPC order*/ int nsf, /*sub-frame size*/ int pitch, /*pitch period*/ spx_word16_t *pitch_gain, /*pitch gain (3-tap)*/ spx_word16_t comb_gain, /*gain of comb filter*/ CombFilterMem *mem ) { int i; spx_word16_t exc_energy=0, new_exc_energy=0; spx_word16_t gain; spx_word16_t step; spx_word16_t fact; /*Compute excitation amplitude prior to enhancement*/ exc_energy = compute_rms(exc, nsf); /*for (i=0;ilast_pitch_gain); if (g > 166) comb_gain = MULT16_16_Q15(DIV32_16(SHL32(EXTEND32(165),15),g), comb_gain); if (g < 64) comb_gain = MULT16_16_Q15(SHL16(g, 9), comb_gain); } #else { float g=0; g = GAIN_SCALING_1*.5*(gain_3tap_to_1tap(pitch_gain)+gain_3tap_to_1tap(mem->last_pitch_gain)); if (g>1.3) comb_gain*=1.3/g; if (g<.5) comb_gain*=2.*g; } #endif step = DIV32(COMB_STEP, nsf); fact=0; /*Apply pitch comb-filter (filter out noise between pitch harmonics)*/ for (i=0;ilast_pitch_gain[0],7),exc[i-mem->last_pitch+1]) + MULT16_32_Q15(SHL16(mem->last_pitch_gain[1],7),exc[i-mem->last_pitch]) + MULT16_32_Q15(SHL16(mem->last_pitch_gain[2],7),exc[i-mem->last_pitch-1]),2); new_exc[i] = exc[i] + MULT16_32_Q15(comb_gain, ADD32(MULT16_32_Q15(fact,exc1), MULT16_32_Q15(SUB16(COMB_STEP,fact), exc2))); } mem->last_pitch_gain[0] = pitch_gain[0]; mem->last_pitch_gain[1] = pitch_gain[1]; mem->last_pitch_gain[2] = pitch_gain[2]; mem->last_pitch = pitch; /*Amplitude after enhancement*/ new_exc_energy = compute_rms(new_exc, nsf); if (exc_energy > new_exc_energy) exc_energy = new_exc_energy; gain = DIV32_16(SHL32(EXTEND32(exc_energy),15),ADD16(1,new_exc_energy)); #ifdef FIXED_POINT if (gain < 16384) gain = 16384; #else if (gain < .5) gain=.5; #endif #ifdef FIXED_POINT for (i=0;ismooth_gain = ADD16(MULT16_16_Q15(31457,mem->smooth_gain), MULT16_16_Q15(1311,gain)); new_exc[i] = MULT16_32_Q15(mem->smooth_gain, new_exc[i]); } #else for (i=0;ismooth_gain = .96*mem->smooth_gain + .04*gain; new_exc[i] *= mem->smooth_gain; } #endif } h323plus/plugins/audio/Speex/libspeex/high_lsp_tables.c0000644000175000017500000001207611341106241022062 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin File: high_lsp_tables.c Codebooks for high-band LSPs in SB-CELP mode Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ const signed char high_lsp_cdbk[512]={ 39,12,-14,-20,-29,-61,-67,-76, -32,-71,-67,68,77,46,34,5, -13,-48,-46,-72,-81,-84,-60,-58, -40,-28,82,93,68,45,29,3, -19,-47,-28,-43,-35,-30,-8,-13, -39,-91,-91,-123,-96,10,10,-6, -18,-55,-60,-91,-56,-36,-27,-16, -48,-75,40,28,-10,-28,35,9, 37,19,1,-20,-31,-41,-18,-25, -35,-68,-80,45,27,-1,47,13, 0,-29,-35,-57,-50,-79,-73,-38, -19,5,35,14,-10,-23,16,-8, 5,-24,-40,-62,-23,-27,-22,-16, -18,-46,-72,-77,43,21,33,1, -80,-70,-70,-64,-56,-52,-39,-33, -31,-38,-19,-19,-15,32,33,-2, 7,-15,-15,-24,-23,-33,-41,-56, -24,-57,5,89,64,41,27,5, -9,-47,-60,-97,-97,-124,-20,-9, -44,-73,31,29,-4,64,48,7, -35,-57,0,-3,-26,-47,-3,-6, -40,-76,-79,-48,12,81,55,10, 9,-24,-43,-73,-57,-69,16,5, -28,-53,18,29,20,0,-4,-11, 6,-13,23,7,-17,-35,-37,-37, -30,-68,-63,6,24,-9,-14,3, 21,-13,-27,-57,-49,-80,-24,-41, -5,-16,-5,1,45,25,12,-7, 3,-15,-6,-16,-15,-8,6,-13, -42,-81,-80,-87,14,1,-10,-3, -43,-69,-46,-24,-28,-29,36,6, -43,-56,-12,12,54,79,43,9, 54,22,2,8,-12,-43,-46,-52, -38,-69,-89,-5,75,38,33,5, -13,-53,-62,-87,-89,-113,-99,-55, -34,-37,62,55,33,16,21,-2, -17,-46,-29,-38,-38,-48,-39,-42, -36,-75,-72,-88,-48,-30,21,2, -15,-57,-64,-98,-84,-76,25,1, -46,-80,-12,18,-7,3,34,6, 38,31,23,4,-1,20,14,-15, -43,-78,-91,-24,14,-3,54,16, 0,-27,-28,-44,-56,-83,-92,-89, -3,34,56,41,36,22,20,-8, -7,-35,-42,-62,-49,3,12,-10, -50,-87,-96,-66,92,70,38,9, -70,-71,-62,-42,-39,-43,-11,-7, -50,-79,-58,-50,-31,32,31,-6, -4,-25,7,-17,-38,-70,-58,-27, -43,-83,-28,59,36,20,31,2, -27,-71,-80,-109,-98,-75,-33,-32, -31,-2,33,15,-6,43,33,-5, 0,-22,-10,-27,-34,-49,-11,-20, -41,-91,-100,-121,-39,57,41,10, -19,-50,-38,-59,-60,-70,-18,-20, -8,-31,-8,-15,1,-14,-26,-25, 33,21,32,17,1,-19,-19,-26, -58,-81,-35,-22,45,30,11,-11, 3,-26,-48,-87,-67,-83,-58,3, -1,-26,-20,44,10,25,39,5, -9,-35,-27,-38,7,10,4,-9, -42,-85,-102,-127,52,44,28,10, -47,-61,-40,-39,-17,-1,-10,-33, -42,-74,-48,21,-4,70,52,10}; const signed char high_lsp_cdbk2[512]={ -36,-62,6,-9,-10,-14,-56,23, 1,-26,23,-48,-17,12,8,-7, 23,29,-36,-28,-6,-29,-17,-5, 40,23,10,10,-46,-13,36,6, 4,-30,-29,62,32,-32,-1,22, -14,1,-4,-22,-45,2,54,4, -30,-57,-59,-12,27,-3,-31,8, -9,5,10,-14,32,66,19,9, 2,-25,-37,23,-15,18,-38,-31, 5,-9,-21,15,0,22,62,30, 15,-12,-14,-46,77,21,33,3, 34,29,-19,50,2,11,9,-38, -12,-37,62,1,-15,54,32,6, 2,-24,20,35,-21,2,19,24, -13,55,4,9,39,-19,30,-1, -21,73,54,33,8,18,3,15, 6,-19,-47,6,-3,-48,-50,1, 26,20,8,-23,-50,65,-14,-55, -17,-31,-37,-28,53,-1,-17,-53, 1,57,11,-8,-25,-30,-37,64, 5,-52,-45,15,23,31,15,14, -25,24,33,-2,-44,-56,-18,6, -21,-43,4,-12,17,-37,20,-10, 34,15,2,15,55,21,-11,-31, -6,46,25,16,-9,-25,-8,-62, 28,17,20,-32,-29,26,30,25, -19,2,-16,-17,26,-51,2,50, 42,19,-66,23,29,-2,3,19, -19,-37,32,15,6,30,-34,13, 11,-5,40,31,10,-42,4,-9, 26,-9,-70,17,-2,-23,20,-22, -55,51,-24,-31,22,-22,15,-13, 3,-10,-28,-16,56,4,-63,11, -18,-15,-18,-38,-35,16,-7,34, -1,-21,-49,-47,9,-37,7,8, 69,55,20,6,-33,-45,-10,-9, 6,-9,12,71,15,-3,-42,-7, -24,32,-35,-2,-42,-17,-5,0, -2,-33,-54,13,-12,-34,47,23, 19,55,7,-8,74,31,14,16, -23,-26,19,12,-18,-49,-28,-31, -20,2,-14,-20,-47,78,40,13, -23,-11,21,-6,18,1,47,5, 38,35,32,46,22,8,13,16, -14,18,51,19,40,39,11,-26, -1,-17,47,2,-53,-15,31,-22, 38,21,-15,-16,5,-33,53,15, -38,86,11,-3,-24,49,13,-4, -11,-18,28,20,-12,-27,-26,35, -25,-35,-3,-20,-61,30,10,-55, -12,-22,-52,-54,-14,19,-32,-12, 45,15,-8,-48,-9,11,-32,8, -16,-34,-13,51,18,38,-2,-32, -17,22,-2,-18,-28,-70,59,27, -28,-19,-10,-20,-9,-9,-8,-21, 21,-8,35,-2,45,-3,-9,12, 0,30,7,-39,43,27,-38,-91, 30,26,19,-55,-4,63,14,-17, 13,9,13,2,7,4,6,61, 72,-1,-17,29,-1,-22,-17,8, -28,-37,63,44,41,3,2,14, 9,-6,75,-8,-7,-12,-15,-12, 13,9,-4,30,-22,-65,15,0, -45,4,-4,1,5,22,11,23}; h323plus/plugins/audio/Speex/libspeex/fixed_generic.h0000644000175000017500000001122011341106241021521 0ustar markmark/* Copyright (C) 2003 Jean-Marc Valin */ /** @file fixed_generic.h @brief Generic fixed-point operations */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef FIXED_GENERIC_H #define FIXED_GENERIC_H #define QCONST16(x,bits) ((spx_word16_t)(.5+(x)*(1<<(bits)))) #define QCONST32(x,bits) ((spx_word32_t)(.5+(x)*(1<<(bits)))) #define NEG16(x) (-(x)) #define NEG32(x) (-(x)) #define EXTRACT16(x) ((spx_word16_t)x) #define EXTEND32(x) ((spx_word32_t)x) #define SHR16(a,shift) ((a) >> (shift)) #define SHL16(a,shift) ((a) << (shift)) #define SHR32(a,shift) ((a) >> (shift)) #define SHL32(a,shift) ((a) << (shift)) #define PSHR16(a,shift) (SHR16((a)+(1<<((shift)-1)),shift)) #define PSHR32(a,shift) (SHR32((a)+(1<<((shift)-1)),shift)) #define SATURATE16(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x))) #define SATURATE32(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x))) #define SHR(a,shift) ((a) >> (shift)) #define SHL(a,shift) ((spx_word32_t)(a) << (shift)) #define PSHR(a,shift) (SHR((a)+(1<<((shift)-1)),shift)) #define SATURATE(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x))) #define ADD16(a,b) ((spx_word16_t)((spx_word16_t)(a)+(spx_word16_t)(b))) #define SUB16(a,b) ((spx_word16_t)(a)-(spx_word16_t)(b)) #define ADD32(a,b) ((spx_word32_t)(a)+(spx_word32_t)(b)) #define SUB32(a,b) ((spx_word32_t)(a)-(spx_word32_t)(b)) #define ADD64(a,b) ((spx_word64_t)(a)+(spx_word64_t)(b)) /* result fits in 16 bits */ #define MULT16_16_16(a,b) ((((spx_word16_t)(a))*((spx_word16_t)(b)))) /* (spx_word32_t)(spx_word16_t) gives TI compiler a hint that it's 16x16->32 multiply */ #define MULT16_16(a,b) (((spx_word32_t)(spx_word16_t)(a))*((spx_word32_t)(spx_word16_t)(b))) #define MAC16_16(c,a,b) (ADD32((c),MULT16_16((a),(b)))) #define MULT16_32_Q12(a,b) ADD32(MULT16_16((a),SHR((b),12)), SHR(MULT16_16((a),((b)&0x00000fff)),12)) #define MULT16_32_Q13(a,b) ADD32(MULT16_16((a),SHR((b),13)), SHR(MULT16_16((a),((b)&0x00001fff)),13)) #define MULT16_32_Q14(a,b) ADD32(MULT16_16((a),SHR((b),14)), SHR(MULT16_16((a),((b)&0x00003fff)),14)) #define MULT16_32_Q11(a,b) ADD32(MULT16_16((a),SHR((b),11)), SHR(MULT16_16((a),((b)&0x000007ff)),11)) #define MAC16_32_Q11(c,a,b) ADD32(c,ADD32(MULT16_16((a),SHR((b),11)), SHR(MULT16_16((a),((b)&0x000007ff)),11))) #define MULT16_32_Q15(a,b) ADD32(MULT16_16((a),SHR((b),15)), SHR(MULT16_16((a),((b)&0x00007fff)),15)) #define MAC16_32_Q15(c,a,b) ADD32(c,ADD32(MULT16_16((a),SHR((b),15)), SHR(MULT16_16((a),((b)&0x00007fff)),15))) #define MAC16_16_Q11(c,a,b) (ADD32((c),SHR(MULT16_16((a),(b)),11))) #define MAC16_16_Q13(c,a,b) (ADD32((c),SHR(MULT16_16((a),(b)),13))) #define MULT16_16_Q11_32(a,b) (SHR(MULT16_16((a),(b)),11)) #define MULT16_16_Q13(a,b) (SHR(MULT16_16((a),(b)),13)) #define MULT16_16_Q14(a,b) (SHR(MULT16_16((a),(b)),14)) #define MULT16_16_Q15(a,b) (SHR(MULT16_16((a),(b)),15)) #define MULT16_16_P13(a,b) (SHR(ADD32(4096,MULT16_16((a),(b))),13)) #define MULT16_16_P14(a,b) (SHR(ADD32(8192,MULT16_16((a),(b))),14)) #define MULT16_16_P15(a,b) (SHR(ADD32(16384,MULT16_16((a),(b))),15)) #define MUL_16_32_R15(a,bh,bl) ADD32(MULT16_16((a),(bh)), SHR(MULT16_16((a),(bl)),15)) #define DIV32_16(a,b) ((spx_word16_t)(((spx_word32_t)(a))/((spx_word16_t)(b)))) #define DIV32(a,b) (((spx_word32_t)(a))/((spx_word32_t)(b))) #endif h323plus/plugins/audio/Speex/libspeex/lpc_bfin.h0000644000175000017500000001030511341106241020505 0ustar markmark/* Copyright (C) 2005 Analog Devices */ /** @file lpc_bfin.h @author Jean-Marc Valin @brief Functions for LPC (Linear Prediction Coefficients) analysis (Blackfin version) */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #define OVERRIDE_SPEEX_AUTOCORR void _spx_autocorr( const spx_word16_t *x, /* in: [0...n-1] samples x */ spx_word16_t *ac, /* out: [0...lag-1] ac values */ int lag, int n ) { spx_word32_t d; const spx_word16_t *xs; int i, j; spx_word32_t ac0=1; spx_word32_t ac32[11], *ac32top; int shift, ac_shift; ac32top = ac32+lag-1; int lag_1, N_lag; int nshift; lag_1 = lag-1; N_lag = n-lag_1; for (j=0;j> 1;\n\t" "LOOP_BEGIN pitch%=;\n\t" "I1 = P0;\n\t" "A1 = A0 = 0;\n\t" "R1 = [I1++];\n\t" "LOOP inner_prod%= LC1 = P3 >> 1;\n\t" "LOOP_BEGIN inner_prod%=;\n\t" "A0 += R0.L*R1.L , A1 += R0.L*R1.H (is) || R1.L = W[I1++];\n\t" "A0 += R0.H*R1.H , A1 += R0.H*R1.L (is) || R1.H = W[I1++] || R0 = [I0++];\n\t" "LOOP_END inner_prod%=;\n\t" "A0 = ASHIFT A0 by R4.L;\n\t" "A1 = ASHIFT A1 by R4.L;\n\t" "R2 = A0, R3 = A1;\n\t" "[P1--] = R2;\n\t" "[P1--] = R3;\n\t" "P0 += 4;\n\t" "LOOP_END pitch%=;\n\t" : : "m" (xs), "m" (x), "m" (ac32top), "m" (N_lag), "m" (lag_1), "m" (nshift) : "A0", "A1", "P0", "P1", "P2", "P3", "P4", "R0", "R1", "R2", "R3", "R4", "I0", "I1", "L0", "L1", "B0", "B1", "memory" ); d=0; for (j=0;j #include "smallft.h" #include "misc.h" static void drfti1(int n, float *wa, int *ifac){ static int ntryh[4] = { 4,2,3,5 }; static float tpi = 6.28318530717958648f; float arg,argh,argld,fi; int ntry=0,i,j=-1; int k1, l1, l2, ib; int ld, ii, ip, is, nq, nr; int ido, ipm, nfm1; int nl=n; int nf=0; L101: j++; if (j < 4) ntry=ntryh[j]; else ntry+=2; L104: nq=nl/ntry; nr=nl-ntry*nq; if (nr!=0) goto L101; nf++; ifac[nf+1]=ntry; nl=nq; if(ntry!=2)goto L107; if(nf==1)goto L107; for (i=1;i>1; ipp2=ip; idp2=ido; nbd=(ido-1)>>1; t0=l1*ido; t10=ip*ido; if(ido==1)goto L119; for(ik=0;ikl1){ for(j=1;j>1; ipp2=ip; ipph=(ip+1)>>1; if(idol1)goto L139; is= -ido-1; t1=0; for(j=1;jn==1)return; drftf1(l->n,data,l->trigcache,l->trigcache+l->n,l->splitcache); } void spx_drft_backward(struct drft_lookup *l,float *data){ if (l->n==1)return; drftb1(l->n,data,l->trigcache,l->trigcache+l->n,l->splitcache); } void spx_drft_init(struct drft_lookup *l,int n) { l->n=n; l->trigcache=(float*)speex_alloc(3*n*sizeof(*l->trigcache)); l->splitcache=(int*)speex_alloc(32*sizeof(*l->splitcache)); fdrffti(n, l->trigcache, l->splitcache); } void spx_drft_clear(struct drft_lookup *l) { if(l) { if(l->trigcache) speex_free(l->trigcache); if(l->splitcache) speex_free(l->splitcache); } } h323plus/plugins/audio/Speex/libspeex/speex_callbacks.c0000644000175000017500000001004011341106241022043 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin File speex_callbacks.c Callback handling and in-band signalling Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "speex_callbacks.h" #include "misc.h" int speex_inband_handler(SpeexBits *bits, SpeexCallback *callback_list, void *state) { int id; SpeexCallback *callback; /*speex_bits_advance(bits, 5);*/ id=speex_bits_unpack_unsigned(bits, 4); callback = callback_list+id; if (callback->func) { return callback->func(bits, state, callback->data); } else /*If callback is not registered, skip the right number of bits*/ { int adv; if (id<2) adv = 1; else if (id<8) adv = 4; else if (id<10) adv = 8; else if (id<12) adv = 16; else if (id<14) adv = 32; else adv = 64; speex_bits_advance(bits, adv); } return 0; } int speex_std_mode_request_handler(SpeexBits *bits, void *state, void *data) { int m; m = speex_bits_unpack_unsigned(bits, 4); speex_encoder_ctl(data, SPEEX_SET_MODE, &m); return 0; } int speex_std_low_mode_request_handler(SpeexBits *bits, void *state, void *data) { int m; m = speex_bits_unpack_unsigned(bits, 4); speex_encoder_ctl(data, SPEEX_SET_LOW_MODE, &m); return 0; } int speex_std_high_mode_request_handler(SpeexBits *bits, void *state, void *data) { int m; m = speex_bits_unpack_unsigned(bits, 4); speex_encoder_ctl(data, SPEEX_SET_HIGH_MODE, &m); return 0; } int speex_std_vbr_request_handler(SpeexBits *bits, void *state, void *data) { int vbr; vbr = speex_bits_unpack_unsigned(bits, 1); speex_encoder_ctl(data, SPEEX_SET_VBR, &vbr); return 0; } int speex_std_enh_request_handler(SpeexBits *bits, void *state, void *data) { int enh; enh = speex_bits_unpack_unsigned(bits, 1); speex_decoder_ctl(data, SPEEX_SET_ENH, &enh); return 0; } int speex_std_vbr_quality_request_handler(SpeexBits *bits, void *state, void *data) { int qual; qual = speex_bits_unpack_unsigned(bits, 4); speex_encoder_ctl(data, SPEEX_SET_VBR_QUALITY, &qual); return 0; } int speex_std_char_handler(SpeexBits *bits, void *state, void *data) { unsigned char ch; ch = speex_bits_unpack_unsigned(bits, 8); _speex_putc(ch, data); /*printf("speex_std_char_handler ch=%x\n", ch);*/ return 0; } /* Default handler for user callbacks: skip it */ int speex_default_user_handler(SpeexBits *bits, void *state, void *data) { int req_size = speex_bits_unpack_unsigned(bits, 4); speex_bits_advance(bits, 5+8*req_size); return 0; } h323plus/plugins/audio/Speex/libspeex/hexc_table.c0000644000175000017500000001362711341106241021034 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin File: hexc_table.c Codebook for high-band excitation in SB-CELP mode (8000 bps with sign) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ const signed char hexc_table[1024] = { -24, 21, -20, 5, -5, -7, 14, -10, 2, -27, 16, -20, 0, -32, 26, 19, 8, -11, -41, 31, 28, -27, -32, 34, 42, 34, -17, 22, -10, 13, -29, 18, -12, -26, -24, 11, 22, 5, -5, -5, 54, -68, -43, 57, -25, 24, 4, 4, 26, -8, -12, -17, 54, 30, -45, 1, 10, -15, 18, -41, 11, 68, -67, 37, -16, -24, -16, 38, -22, 6, -29, 30, 66, -27, 5, 7, -16, 13, 2, -12, -7, -3, -20, 36, 4, -28, 9, 3, 32, 48, 26, 39, 3, 0, 7, -21, -13, 5, -82, -7, 73, -20, 34, -9, -5, 1, -1, 10, -5, -10, -1, 9, 1, -9, 10, 0, -14, 11, -1, -2, -1, 11, 20, 96, -81, -22, -12, -9, -58, 9, 24, -30, 26, -35, 27, -12, 13, -18, 56, -59, 15, -7, 23, -15, -1, 6, -25, 14, -22, -20, 47, -11, 16, 2, 38, -23, -19, -30, -9, 40, -11, 5, 4, -6, 8, 26, -21, -11, 127, 4, 1, 6, -9, 2, -7, -2, -3, 7, -5, 10, -19, 7, -106, 91, -3, 9, -4, 21, -8, 26, -80, 8, 1, -2, -10, -17, -17, -27, 32, 71, 6, -29, 11, -23, 54, -38, 29, -22, 39, 87, -31, -12, -20, 3, -2, -2, 2, 20, 0, -1, -35, 27, 9, -6, -12, 3, -12, -6, 13, 1, 14, -22, -59, -15, -17, -25, 13, -7, 7, 3, 0, 1, -7, 6, -3, 61, -37, -23, -23, -29, 38, -31, 27, 1, -8, 2, -27, 23, -26, 36, -34, 5, 24, -24, -6, 7, 3, -59, 78, -62, 44, -16, 1, 6, 0, 17, 8, 45, 0, -110, 6, 14, -2, 32, -77, -56, 62, -3, 3, -13, 4, -16, 102, -15, -36, -1, 9, -113, 6, 23, 0, 9, 9, 5, -8, -1, -14, 5, -12, 121, -53, -27, -8, -9, 22, -13, 3, 2, -3, 1, -2, -71, 95, 38, -19, 15, -16, -5, 71, 10, 2, -32, -13, -5, 15, -1, -2, -14, -85, 30, 29, 6, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, -65, -56, -9, 18, 18, 23, -14, -2, 0, 12, -29, 26, -12, 1, 2, -12, -64, 90, -6, 4, 1, 5, -5, -110, -3, -31, 22, -29, 9, 0, 8, -40, -5, 21, -5, -5, 13, 10, -18, 40, 1, 35, -20, 30, -28, 11, -6, 19, 7, 14, 18, -64, 9, -6, 16, 51, 68, 8, 16, 12, -8, 0, -9, 20, -22, 25, 7, -4, -13, 41, -35, 93, -18, -54, 11, -1, 1, -9, 4, -66, 66, -31, 20, -22, 25, -23, 11, 10, 9, 19, 15, 11, -5, -31, -10, -23, -28, -6, -6, -3, -4, 5, 3, -28, 22, -11, -42, 25, -25, -16, 41, 34, 47, -6, 2, 42, -19, -22, 5, -39, 32, 6, -35, 22, 17, -30, 8, -26, -11, -11, 3, -12, 33, 33, -37, 21, -1, 6, -4, 3, 0, -5, 5, 12, -12, 57, 27, -61, -3, 20, -17, 2, 0, 4, 0, -2, -33, -58, 81, -23, 39, -10, -5, 2, 6, -7, 5, 4, -3, -2, -13, -23, -72, 107, 15, -5, 0, -7, -3, -6, 5, -4, 15, 47, 12, -31, 25, -16, 8, 22, -25, -62, -56, -18, 14, 28, 12, 2, -11, 74, -66, 41, -20, -7, 16, -20, 16, -8, 0, -16, 4, -19, 92, 12, -59, -14, -39, 49, -25, -16, 23, -27, 19, -3, -33, 19, 85, -29, 6, -7, -10, 16, -7, -12, 1, -6, 2, 4, -2, 64, 10, -25, 41, -2, -31, 15, 0, 110, 50, 69, 35, 28, 19, -10, 2, -43, -49, -56, -15, -16, 10, 3, 12, -1, -8, 1, 26, -12, -1, 7, -11, -27, 41, 25, 1, -11, -18, 22, -7, -1, -47, -8, 23, -3, -17, -7, 18, -125, 59, -5, 3, 18, 1, 2, 3, 27, -35, 65, -53, 50, -46, 37, -21, -28, 7, 14, -37, -5, -5, 12, 5, -8, 78, -19, 21, -6, -16, 8, -7, 5, 2, 7, 2, 10, -6, 12, -60, 44, 11, -36, -32, 31, 0, 2, -2, 2, 1, -3, 7, -10, 17, -21, 10, 6, -2, 19, -2, 59, -38, -86, 38, 8, -41, -30, -45, -33, 7, 15, 28, 29, -7, 24, -40, 7, 7, 5, -2, 9, 24, -23, -18, 6, -29, 30, 2, 28, 49, -11, -46, 10, 43, -13, -9, -1, -3, -7, -7, -17, -6, 97, -33, -21, 3, 5, 1, 12, -43, -8, 28, 7, -43, -7, 17, -20, 19, -1, 2, -13, 9, 54, 34, 9, -28, -11, -9, -17, 110, -59, 44, -26, 0, 3, -12, -47, 73, -34, -43, 38, -33, 16, -5, -46, -4, -6, -2, -25, 19, -29, 28, -13, 5, 14, 27, -40, -43, 4, 32, -13, -2, -35, -4, 112, -42, 9, -12, 37, -28, 17, 14, -19, 35, -39, 23, 3, -14, -1, -57, -5, 94, -9, 3, -39, 5, 30, -10, -32, 42, -13, -14, -97, -63, 30, -9, 1, -7, 12, 5, 20, 17, -9, -36, -30, 25, 47, -9, -15, 12, -22, 98, -8, -50, 15, -27, 21, -16, -11, 2, 12, -10, 10, -3, 33, 36, -96, 0, -17, 31, -9, 9, 3, -20, 13, -11, 8, -4, 10, -10, 9, 1, 112, -70, -27, 5, -21, 2, -57, -3, -29, 10, 19, -21, 21, -10, -66, -3, 91, -35, 30, -12, 0, -7, 59, -28, 26, 2, 14, -18, 1, 1, 11, 17, 20, -54, -59, 27, 4, 29, 32, 5, 19, 12, -4, 1, 7, -10, 5, -2, 10, 0, 23, -5, 28, -104, 46, 11, 16, 3, 29, 1, -8, -14, 1, 7, -50, 88, -62, 26, 8, -17, -14, 50, 0, 32, -12, -3, -27, 18, -8, -5, 8, 3, -20, -11, 37, -12, 9, 33, 46, -101, -1, -4, 1, 6, -1, 28, -42, -15, 16, 5, -1, -2, -55, 85, 38, -9, -4, 11, -2, -9, -6, 3, -20, -10, -77, 89, 24, -3, -104, -57, -26, -31, -20, -6, -9, 14, 20, -23, 46, -15, -31, 28, 1, -15, -2, 6, -2, 31, 45, -76, 23, -25, }; h323plus/plugins/audio/Speex/libspeex/misc.c0000644000175000017500000001251711341106241017666 0ustar markmark/* Copyright (C) 2002-2005 Jean-Marc Valin File: misc.c Various utility routines for Speex Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include "misc.h" #ifdef USER_MISC #include "user_misc.h" #endif #ifdef BFIN_ASM #include "misc_bfin.h" #endif #ifndef RELEASE void print_vec(float *vec, int len, char *name) { int i; printf ("%s ", name); for (i=0;i>24; ret += (i>>8)&0x0000ff00; ret += (i<<8)&0x00ff0000; ret += (i<<24); #endif return ret; } spx_uint32_t le_int(spx_uint32_t i) { spx_uint32_t ret=i; #ifdef WORDS_BIGENDIAN ret = i>>24; ret += (i>>8)&0x0000ff00; ret += (i<<8)&0x00ff0000; ret += (i<<24); #endif return ret; } #if BYTES_PER_CHAR == 2 void speex_memcpy_bytes(char *dst, char *src, int nbytes) { int i; int nchars = nbytes/BYTES_PER_CHAR; for (i=0;i16777216) { x>>=10; k+=5; } if (x>1048576) { x>>=6; k+=3; } if (x>262144) { x>>=4; k+=2; } if (x>32768) { x>>=2; k+=1; } if (x>16384) { x>>=2; k+=1; } #else while (x>16384) { x>>=2; k++; } #endif while (x<4096) { x<<=2; k--; } rt = ADD16(C0, MULT16_16_Q14(x, ADD16(C1, MULT16_16_Q14(x, ADD16(C2, MULT16_16_Q14(x, (C3))))))); if (k>0) rt <<= k; else rt >>= -k; rt >>=7; return rt; } /* log(x) ~= -2.18151 + 4.20592*x - 2.88938*x^2 + 0.86535*x^3 (for .5 < x < 1) */ #define A1 16469 #define A2 2242 #define A3 1486 spx_word16_t spx_acos(spx_word16_t x) { int s=0; spx_word16_t ret; spx_word16_t sq; if (x<0) { s=1; x = NEG16(x); } x = SUB16(16384,x); x = x >> 1; sq = MULT16_16_Q13(x, ADD16(A1, MULT16_16_Q13(x, ADD16(A2, MULT16_16_Q13(x, (A3)))))); ret = spx_sqrt(SHL32(EXTEND32(sq),13)); /*ret = spx_sqrt(67108864*(-1.6129e-04 + 2.0104e+00*f + 2.7373e-01*f*f + 1.8136e-01*f*f*f));*/ if (s) ret = SUB16(25736,ret); return ret; } #define K1 8192 #define K2 -4096 #define K3 340 #define K4 -10 spx_word16_t spx_cos(spx_word16_t x) { spx_word16_t x2; if (x<12868) { x2 = MULT16_16_P13(x,x); return ADD32(K1, MULT16_16_P13(x2, ADD32(K2, MULT16_16_P13(x2, ADD32(K3, MULT16_16_P13(K4, x2)))))); } else { x = SUB16(25736,x); x2 = MULT16_16_P13(x,x); return SUB32(-K1, MULT16_16_P13(x2, ADD32(K2, MULT16_16_P13(x2, ADD32(K3, MULT16_16_P13(K4, x2)))))); } } #else #ifndef M_PI #define M_PI 3.14159265358979323846 /* pi */ #endif #define C1 0.9999932946f #define C2 -0.4999124376f #define C3 0.0414877472f #define C4 -0.0012712095f #define SPX_PI_2 1.5707963268 spx_word16_t spx_cos(spx_word16_t x) { if (x #include "ltp.h" #include "stack_alloc.h" #include "filters.h" #include "speex_bits.h" #include "math_approx.h" #ifndef NULL #define NULL 0 #endif #ifdef _USE_SSE #include "ltp_sse.h" #elif defined (ARM4_ASM) || defined(ARM5E_ASM) #include "ltp_arm4.h" #elif defined (BFIN_ASM) #include "ltp_bfin.h" #endif #ifndef OVERRIDE_INNER_PROD static spx_word32_t inner_prod(const spx_word16_t *x, const spx_word16_t *y, int len) { spx_word32_t sum=0; len >>= 2; while(len--) { spx_word32_t part=0; part = MAC16_16(part,*x++,*y++); part = MAC16_16(part,*x++,*y++); part = MAC16_16(part,*x++,*y++); part = MAC16_16(part,*x++,*y++); /* HINT: If you had a 40-bit accumulator, you could shift only at the end */ sum = ADD32(sum,SHR32(part,6)); } return sum; } #endif #ifndef OVERRIDE_PITCH_XCORR #if 0 /* HINT: Enable this for machines with enough registers (i.e. not x86) */ static void pitch_xcorr(const spx_word16_t *_x, const spx_word16_t *_y, spx_word32_t *corr, int len, int nb_pitch, char *stack) { int i,j; for (i=0;i0) { if (SHR16(corr16[i-start],4)>ener16[i-start]) tmp = SHL32(EXTEND32(ener16[i-start]),14); else if (-SHR16(corr16[i-start],4)>ener16[i-start]) tmp = -SHL32(EXTEND32(ener16[i-start]),14); else tmp = SHL32(tmp,10); g = DIV32_16(tmp, 8+ener16[i-start]); score[i-start] = MULT16_16(corr16[i-start],g); } else { score[i-start] = 1; } } } #else for (i=start;i<=end;i++) { float g = corr[i-start]/(1+energy[i-start]); if (g>16) g = 16; else if (g<-16) g = -16; score[i-start] = g*corr[i-start]; } #endif /* Extract best scores */ for (i=start;i<=end;i++) { if (score[i-start]>best_score[N-1]) { for (j=0;j best_score[j]) { for (k=N-1;k>j;k--) { best_score[k]=best_score[k-1]; pitch[k]=pitch[k-1]; } best_score[j]=score[i-start]; pitch[j]=i; break; } } } } /* Compute open-loop gain */ if (gain) { for (j=0;jgain_bits; gain_cdbk = params->gain_cdbk + 3*gain_cdbk_size*cdbk_offset; ALLOC(tmp1, 3*nsf, spx_sig_t); ALLOC(tmp2, 3*nsf, spx_sig_t); x[0]=tmp1; x[1]=tmp1+nsf; x[2]=tmp1+2*nsf; e[0]=tmp2; e[1]=tmp2+nsf; e[2]=tmp2+2*nsf; for (i=2;i>=0;i--) { int pp=pitch+1-i; for (j=0;j max_val) max_val = tmp; } } for (i=0;i max_val) max_val = tmp; } sig_shift=0; while (max_val>16384) { sig_shift++; max_val >>= 1; } for (j=0;j<3;j++) { for (i=0;i 64) { gain_sum = SUB16(gain_sum, 64); if (gain_sum > 127) gain_sum = 127; #ifdef FIXED_POINT pitch_control = SUB16(64,EXTRACT16(PSHR32(MULT16_16(64,MULT16_16_16(plc_tuning, gain_sum)),10))); #else pitch_control = 64*(1.-.001*plc_tuning*gain_sum); #endif if (pitch_control < 0) pitch_control = 0; } sum = compute_pitch_error(C, g, pitch_control); if (sum>best_sum || i==0) { best_sum=sum; best_cdbk=i; } } #ifdef FIXED_POINT gain[0] = ADD16(32,(spx_word16_t)gain_cdbk[best_cdbk*3]); gain[1] = ADD16(32,(spx_word16_t)gain_cdbk[best_cdbk*3+1]); gain[2] = ADD16(32,(spx_word16_t)gain_cdbk[best_cdbk*3+2]); /*printf ("%d %d %d %d\n",gain[0],gain[1],gain[2], best_cdbk);*/ #else gain[0] = 0.015625*gain_cdbk[best_cdbk*3] + .5; gain[1] = 0.015625*gain_cdbk[best_cdbk*3+1]+ .5; gain[2] = 0.015625*gain_cdbk[best_cdbk*3+2]+ .5; #endif *cdbk_index=best_cdbk; } #ifdef FIXED_POINT for (i=0;i10) N=10; if (N<1) N=1; ALLOC(nbest, N, int); params = (const ltp_params*) par; if (endpitch_bits); speex_bits_pack(bits, 0, params->gain_bits); for (i=0;iend-start+1) N=end-start+1; if (end != start) open_loop_nbest_pitch(sw, start, end, nsf, nbest, NULL, N, stack); else nbest[0] = start; for (i=0;ipitch_bits); speex_bits_pack(bits, best_gain_index, params->gain_bits); /*printf ("encode pitch: %d %d\n", best_pitch, best_gain_index);*/ for (i=0;igain_bits; gain_cdbk = params->gain_cdbk + 3*gain_cdbk_size*cdbk_offset; pitch = speex_bits_unpack_unsigned(bits, params->pitch_bits); pitch += start; gain_index = speex_bits_unpack_unsigned(bits, params->gain_bits); /*printf ("decode pitch: %d %d\n", pitch, gain_index);*/ #ifdef FIXED_POINT gain[0] = ADD16(32,(spx_word16_t)gain_cdbk[gain_index*3]); gain[1] = ADD16(32,(spx_word16_t)gain_cdbk[gain_index*3+1]); gain[2] = ADD16(32,(spx_word16_t)gain_cdbk[gain_index*3+2]); #else gain[0] = 0.015625*gain_cdbk[gain_index*3]+.5; gain[1] = 0.015625*gain_cdbk[gain_index*3+1]+.5; gain[2] = 0.015625*gain_cdbk[gain_index*3+2]+.5; #endif if (count_lost && pitch > subframe_offset) { spx_word16_t gain_sum; if (1) { #ifdef FIXED_POINT spx_word16_t tmp = count_lost < 4 ? last_pitch_gain : SHR16(last_pitch_gain,1); if (tmp>62) tmp=62; #else spx_word16_t tmp = count_lost < 4 ? last_pitch_gain : 0.5 * last_pitch_gain; if (tmp>.95) tmp=.95; #endif gain_sum = gain_3tap_to_1tap(gain); if (gain_sum > tmp) { spx_word16_t fact = DIV32_16(SHL32(EXTEND32(tmp),14),gain_sum); for (i=0;i<3;i++) gain[i]=MULT16_16_Q14(fact,gain[i]); } } } *pitch_val = pitch; gain_val[0]=gain[0]; gain_val[1]=gain[1]; gain_val[2]=gain[2]; { spx_sig_t *e[3]; VARDECL(spx_sig_t *tmp2); ALLOC(tmp2, 3*nsf, spx_sig_t); e[0]=tmp2; e[1]=tmp2+nsf; e[2]=tmp2+2*nsf; for (i=0;i<3;i++) { int j; int pp=pitch+1-i; #if 0 for (j=0;jpp) tmp1=pp; for (j=0;jpp+pitch) tmp3=pp+pitch; for (j=tmp1;j.99) coef=.99; for (i=0;i.99) coef=.99; for (i=0;i>3) : "cc" ); return (sum1+sum2)>>1; } #define OVERRIDE_PITCH_XCORR static void pitch_xcorr(const spx_word16_t *_x, const spx_word16_t *_y, spx_word32_t *corr, int len, int nb_pitch, char *stack) { int i,j; for (i=0;i(b) ? (a) : (b)) #ifdef FIXED_POINT #define WEIGHT_SHIFT 11 #define NORMALIZE_SCALEDOWN 5 #define NORMALIZE_SCALEUP 3 #else #define WEIGHT_SHIFT 0 #endif #ifdef FIXED_POINT static const spx_float_t MAX_ALPHA = ((spx_float_t){16777, -21}); static const spx_float_t ALPHA0 = ((spx_float_t){26214, -19}); static const spx_float_t MIN_LEAK = ((spx_float_t){16777, -24}); #define TOP16(x) ((x)>>16) #else static const spx_float_t MAX_ALPHA = .008f; static const spx_float_t ALPHA0 = .05f; static const spx_float_t MIN_LEAK = .001f; #define TOP16(x) (x) #endif /** Speex echo cancellation state. */ struct SpeexEchoState_ { int frame_size; /**< Number of samples processed each time */ int window_size; int M; int cancel_count; int adapted; spx_int32_t sampling_rate; spx_word16_t spec_average; spx_word16_t beta0; spx_word16_t beta_max; spx_word32_t sum_adapt; spx_word16_t *e; spx_word16_t *x; spx_word16_t *X; spx_word16_t *d; spx_word16_t *y; spx_word16_t *last_y; spx_word32_t *Yps; spx_word16_t *Y; spx_word16_t *E; spx_word32_t *PHI; spx_word32_t *W; spx_word32_t *power; spx_float_t *power_1; spx_word32_t *Rf; spx_word32_t *Yf; spx_word32_t *Xf; spx_word32_t *Eh; spx_word32_t *Yh; spx_float_t Pey; spx_float_t Pyy; spx_word16_t *window; void *fft_table; spx_word16_t memX, memD, memE; spx_word16_t preemph; }; static spx_word32_t inner_prod(const spx_word16_t *x, const spx_word16_t *y, int len) { spx_word32_t sum=0; len >>= 2; while(len--) { spx_word32_t part=0; part = MAC16_16(part,*x++,*y++); part = MAC16_16(part,*x++,*y++); part = MAC16_16(part,*x++,*y++); part = MAC16_16(part,*x++,*y++); /* HINT: If you had a 40-bit accumulator, you could shift only at the end */ sum = ADD32(sum,SHR32(part,6)); } return sum; } /** Compute power spectrum of a half-complex (packed) vector */ static void power_spectrum(spx_word16_t *X, spx_word32_t *ps, int N) { int i, j; ps[0]=MULT16_16(X[0],X[0]); for (i=1,j=1;iframe_size = frame_size; st->window_size = 2*frame_size; N = st->window_size; M = st->M = (filter_length+st->frame_size-1)/frame_size; st->cancel_count=0; st->sum_adapt = 0; /* FIXME: Make that an init option (new API call?) */ st->sampling_rate = 8000; st->spec_average = DIV32_16(SHL32(st->frame_size, 15), st->sampling_rate); #ifdef FIXED_POINT st->beta0 = DIV32_16(SHL32(st->frame_size, 16), st->sampling_rate); st->beta_max = DIV32_16(SHL32(st->frame_size, 14), st->sampling_rate); #else st->beta0 = (2.0f*st->frame_size)/st->sampling_rate; st->beta_max = (.5f*st->frame_size)/st->sampling_rate; #endif st->fft_table = spx_fft_init(N); st->e = (spx_word16_t*)speex_alloc(N*sizeof(spx_word16_t)); st->x = (spx_word16_t*)speex_alloc(N*sizeof(spx_word16_t)); st->d = (spx_word16_t*)speex_alloc(N*sizeof(spx_word16_t)); st->y = (spx_word16_t*)speex_alloc(N*sizeof(spx_word16_t)); st->Yps = (spx_word32_t*)speex_alloc(N*sizeof(spx_word32_t)); st->last_y = (spx_word16_t*)speex_alloc(N*sizeof(spx_word16_t)); st->Yf = (spx_word32_t*)speex_alloc((st->frame_size+1)*sizeof(spx_word32_t)); st->Rf = (spx_word32_t*)speex_alloc((st->frame_size+1)*sizeof(spx_word32_t)); st->Xf = (spx_word32_t*)speex_alloc((st->frame_size+1)*sizeof(spx_word32_t)); st->Yh = (spx_word32_t*)speex_alloc((st->frame_size+1)*sizeof(spx_word32_t)); st->Eh = (spx_word32_t*)speex_alloc((st->frame_size+1)*sizeof(spx_word32_t)); st->X = (spx_word16_t*)speex_alloc(M*N*sizeof(spx_word16_t)); st->Y = (spx_word16_t*)speex_alloc(N*sizeof(spx_word16_t)); st->E = (spx_word16_t*)speex_alloc(N*sizeof(spx_word16_t)); st->W = (spx_word32_t*)speex_alloc(M*N*sizeof(spx_word32_t)); st->PHI = (spx_word32_t*)speex_alloc(M*N*sizeof(spx_word32_t)); st->power = (spx_word32_t*)speex_alloc((frame_size+1)*sizeof(spx_word32_t)); st->power_1 = (spx_float_t*)speex_alloc((frame_size+1)*sizeof(spx_float_t)); st->window = (spx_word16_t*)speex_alloc(N*sizeof(spx_word16_t)); #ifdef FIXED_POINT for (i=0;i>1;i++) { st->window[i] = (16383-SHL16(spx_cos(DIV32_16(MULT16_16(25736,i<<1),N)),1)); st->window[N-i-1] = st->window[i]; } #else for (i=0;iwindow[i] = .5-.5*cos(2*M_PI*i/N); #endif for (i=0;iW[i] = st->PHI[i] = 0; } st->memX=st->memD=st->memE=0; st->preemph = QCONST16(.9,15); st->adapted = 0; st->Pey = st->Pyy = FLOAT_ONE; return st; } /** Resets echo canceller state */ void speex_echo_state_reset(SpeexEchoState *st) { int i, M, N; st->cancel_count=0; N = st->window_size; M = st->M; for (i=0;iW[i] = 0; st->X[i] = 0; } for (i=0;i<=st->frame_size;i++) st->power[i] = 0; st->adapted = 0; st->sum_adapt = 0; st->Pey = st->Pyy = FLOAT_ONE; } /** Destroys an echo canceller state */ void speex_echo_state_destroy(SpeexEchoState *st) { spx_fft_destroy(st->fft_table); speex_free(st->e); speex_free(st->x); speex_free(st->d); speex_free(st->y); speex_free(st->last_y); speex_free(st->Yps); speex_free(st->Yf); speex_free(st->Rf); speex_free(st->Xf); speex_free(st->Yh); speex_free(st->Eh); speex_free(st->X); speex_free(st->Y); speex_free(st->E); speex_free(st->W); speex_free(st->PHI); speex_free(st->power); speex_free(st->power_1); speex_free(st->window); speex_free(st); } extern int fixed_point; /** Performs echo cancellation on a frame */ void speex_echo_cancel(SpeexEchoState *st, short *ref, short *echo, short *out, spx_int32_t *Yout) { int i,j; int N,M; spx_word32_t Syy,See; spx_word16_t leak_estimate; spx_word16_t ss, ss_1; spx_float_t Pey = FLOAT_ONE, Pyy=FLOAT_ONE; spx_float_t alpha, alpha_1; spx_word16_t RER; spx_word32_t tmp32; spx_word16_t M_1; N = st->window_size; M = st->M; st->cancel_count++; #ifdef FIXED_POINT ss=DIV32_16(11469,M); ss_1 = SUB16(32767,ss); M_1 = DIV32_16(32767,M); #else ss=.35/M; ss_1 = 1-ss; M_1 = 1.f/M; #endif /* Copy input data to buffer */ for (i=0;iframe_size;i++) { st->x[i] = st->x[i+st->frame_size]; st->x[i+st->frame_size] = SHL16(SUB16(echo[i], MULT16_16_P15(st->preemph, st->memX)),1); st->memX = echo[i]; st->d[i] = st->d[i+st->frame_size]; st->d[i+st->frame_size] = SHL16(SUB16(ref[i], MULT16_16_P15(st->preemph, st->memD)),1); st->memD = ref[i]; } /* Shift memory: this could be optimized eventually*/ for (i=0;iX[i]=st->X[i+N]; /* Convert x (echo input) to frequency domain */ spx_fft(st->fft_table, st->x, &st->X[(M-1)*N]); /* Compute filter response Y */ spectral_mul_accum(st->X, st->W, st->Y, N, M); spx_ifft(st->fft_table, st->Y, st->y); #if 1 spectral_mul_accum(st->X, st->PHI, st->Y, N, M); spx_ifft(st->fft_table, st->Y, st->e); #endif /* Compute error signal (for the output with de-emphasis) */ for (i=0;iframe_size;i++) { spx_word32_t tmp_out; #if 1 spx_word16_t y = MULT16_16_Q15(st->window[i+st->frame_size],st->e[i+st->frame_size]) + MULT16_16_Q15(st->window[i],st->y[i+st->frame_size]); tmp_out = SUB32(EXTEND32(st->d[i+st->frame_size]), EXTEND32(y)); #else tmp_out = SUB32(EXTEND32(st->d[i+st->frame_size]), EXTEND32(st->y[i+st->frame_size])); #endif tmp_out = PSHR32(tmp_out,1); /* Saturation */ if (tmp_out>32767) tmp_out = 32767; else if (tmp_out<-32768) tmp_out = -32768; tmp_out = ADD32(tmp_out, EXTEND32(MULT16_16_P15(st->preemph, st->memE))); out[i] = tmp_out; st->memE = tmp_out; } /* Compute error signal (filter update version) */ for (i=0;iframe_size;i++) { st->e[i] = 0; st->e[i+st->frame_size] = st->d[i+st->frame_size] - st->y[i+st->frame_size]; } /* Compute a bunch of correlations */ See = inner_prod(st->e+st->frame_size, st->e+st->frame_size, st->frame_size); See = ADD32(See, SHR32(10000,6)); Syy = inner_prod(st->y+st->frame_size, st->y+st->frame_size, st->frame_size); /* Convert error to frequency domain */ spx_fft(st->fft_table, st->e, st->E); for (i=0;iframe_size;i++) st->y[i] = 0; spx_fft(st->fft_table, st->y, st->Y); /* Compute power spectrum of echo (X), error (E) and filter response (Y) */ power_spectrum(st->E, st->Rf, N); power_spectrum(st->Y, st->Yf, N); power_spectrum(&st->X[(M-1)*N], st->Xf, N); /* Smooth echo energy estimate over time */ for (j=0;j<=st->frame_size;j++) st->power[j] = MULT16_32_Q15(ss_1,st->power[j]) + 1 + MULT16_32_Q15(ss,st->Xf[j]); /* Enable this to compute the power based only on the tail (would need to compute more efficiently to make this really useful */ if (0) { float scale2 = .5f/M; for (j=0;j<=st->frame_size;j++) st->power[j] = 0; for (i=0;iX[i*N], st->Xf, N); for (j=0;j<=st->frame_size;j++) st->power[j] += scale2*st->Xf[j]; } } /* Compute filtered spectra and (cross-)correlations */ for (j=st->frame_size;j>=0;j--) { spx_float_t Eh, Yh; Eh = PSEUDOFLOAT(st->Rf[j] - st->Eh[j]); Yh = PSEUDOFLOAT(st->Yf[j] - st->Yh[j]); Pey = FLOAT_ADD(Pey,FLOAT_MULT(Eh,Yh)); Pyy = FLOAT_ADD(Pyy,FLOAT_MULT(Yh,Yh)); #ifdef FIXED_POINT st->Eh[j] = MAC16_32_Q15(MULT16_32_Q15(SUB16(32767,st->spec_average),st->Eh[j]), st->spec_average, st->Rf[j]); st->Yh[j] = MAC16_32_Q15(MULT16_32_Q15(SUB16(32767,st->spec_average),st->Yh[j]), st->spec_average, st->Yf[j]); #else st->Eh[j] = (1-st->spec_average)*st->Eh[j] + st->spec_average*st->Rf[j]; st->Yh[j] = (1-st->spec_average)*st->Yh[j] + st->spec_average*st->Yf[j]; #endif } /* Compute correlation updatete rate */ tmp32 = MULT16_32_Q15(st->beta0,Syy); if (tmp32 > MULT16_32_Q15(st->beta_max,See)) tmp32 = MULT16_32_Q15(st->beta_max,See); alpha = FLOAT_DIV32(tmp32, See); alpha_1 = FLOAT_SUB(FLOAT_ONE, alpha); /* Update correlations (recursive average) */ st->Pey = FLOAT_ADD(FLOAT_MULT(alpha_1,st->Pey) , FLOAT_MULT(alpha,Pey)); st->Pyy = FLOAT_ADD(FLOAT_MULT(alpha_1,st->Pyy) , FLOAT_MULT(alpha,Pyy)); if (FLOAT_LT(st->Pyy, FLOAT_ONE)) st->Pyy = FLOAT_ONE; /* We don't really hope to get better than 33 dB (MIN_LEAK-3dB) attenuation anyway */ if (FLOAT_LT(st->Pey, FLOAT_MULT(MIN_LEAK,st->Pyy))) st->Pey = FLOAT_MULT(MIN_LEAK,st->Pyy); if (FLOAT_GT(st->Pey, st->Pyy)) st->Pey = st->Pyy; /* leak_estimate is the limear regression result */ leak_estimate = FLOAT_EXTRACT16(FLOAT_SHL(FLOAT_DIVU(st->Pey, st->Pyy),14)); if (leak_estimate > 16383) leak_estimate = 32767; else leak_estimate = SHL16(leak_estimate,1); /*printf ("%f\n", leak_estimate);*/ /* Compute Residual to Error Ratio */ #ifdef FIXED_POINT tmp32 = MULT16_32_Q15(leak_estimate,Syy); tmp32 = ADD32(tmp32, SHL32(tmp32,1)); if (tmp32 > SHR32(See,1)) tmp32 = SHR32(See,1); RER = FLOAT_EXTRACT16(FLOAT_SHL(FLOAT_DIV32(tmp32,See),15)); #else RER = 3.*MULT16_32_Q15(leak_estimate,Syy) / See; if (RER > .5) RER = .5; #endif /* We consider that the filter has had minimal adaptation if the following is true*/ if (!st->adapted && st->sum_adapt > QCONST32(1,15)) { st->adapted = 1; } if (st->adapted) { for (i=0;i<=st->frame_size;i++) { spx_word32_t r, e; /* Compute frequency-domain adaptation mask */ r = MULT16_32_Q15(leak_estimate,SHL32(st->Yf[i],3)); e = SHL32(st->Rf[i],3)+1; #ifdef FIXED_POINT if (r>SHR32(e,1)) r = SHR32(e,1); #else if (r>.5*e) r = .5*e; #endif r = MULT16_32_Q15(QCONST16(.8,15),r) + MULT16_32_Q15(QCONST16(.2,15),(spx_word32_t)(MULT16_32_Q15(RER,e))); /*st->power_1[i] = adapt_rate*r/(e*(1+st->power[i]));*/ st->power_1[i] = FLOAT_SHL(FLOAT_DIV32_FLOAT(MULT16_32_Q15(M_1,r),FLOAT_MUL32U(e,st->power[i]+10)),WEIGHT_SHIFT+16); } } else { spx_word32_t Sxx; spx_word16_t adapt_rate=0; Sxx = inner_prod(st->x+st->frame_size, st->x+st->frame_size, st->frame_size); /* Temporary adaption rate if filter is not adapted correctly */ tmp32 = MULT16_32_Q15(QCONST16(.15f, 15), Sxx); #ifdef FIXED_POINT if (Sxx > SHR32(See,2)) Sxx = SHR32(See,2); #else if (Sxx > .25*See) Sxx = .25*See; #endif adapt_rate = FLOAT_EXTRACT16(FLOAT_SHL(FLOAT_DIV32(MULT16_32_Q15(M_1,Sxx), See),15)); for (i=0;i<=st->frame_size;i++) st->power_1[i] = FLOAT_SHL(FLOAT_DIV32(EXTEND32(adapt_rate),ADD32(st->power[i],10)),WEIGHT_SHIFT+1); /* How much have we adapted so far? */ st->sum_adapt = ADD32(st->sum_adapt,adapt_rate); } /* Compute weight gradient */ for (j=0;jpower_1, &st->X[j*N], st->E, st->PHI+N*j, N); } /* Gradient descent */ for (i=0;iW[i] += st->PHI[i]; /* Old value of W in PHI */ st->PHI[i] = st->W[i] - st->PHI[i]; } /* Update weight to prevent circular convolution (MDF / AUMDF) */ for (j=0;jcancel_count%(M-1) == j) { #ifdef _WIN32 spx_word16_t * w = (spx_word16_t *)_alloca(N * sizeof(spx_word16_t)); #else spx_word16_t w[N]; #endif #ifdef FIXED_POINT spx_word16_t w2[N]; for (i=0;iW[j*N+i],NORMALIZE_SCALEDOWN+16); spx_ifft(st->fft_table, w2, w); for (i=0;iframe_size;i++) { w[i]=0; } for (i=st->frame_size;ifft_table, w, w2); /* The "-1" in the shift is a sort of kludge that trades less efficient update speed for decrease noise */ for (i=0;iW[j*N+i] -= SHL32(w2[i],16+NORMALIZE_SCALEDOWN-NORMALIZE_SCALEUP-1); #else spx_ifft(st->fft_table, &st->W[j*N], w); for (i=st->frame_size;ifft_table, w, &st->W[j*N]); #endif } } /* Compute spectrum of estimated echo for use in an echo post-filter (if necessary)*/ if (Yout) { spx_word16_t leak2; if (st->adapted) { /* If the filter is adapted, take the filtered echo */ for (i=0;iframe_size;i++) st->last_y[i] = st->last_y[st->frame_size+i]; for (i=0;iframe_size;i++) st->last_y[st->frame_size+i] = ref[i]-out[i]; } else { /* If filter isn't adapted yet, all we can do is take the echo signal directly */ for (i=0;ilast_y[i] = st->x[i]; } /* Apply hanning window (should pre-compute it)*/ for (i=0;iy[i] = MULT16_16_Q15(st->window[i],st->last_y[i]); /* Compute power spectrum of the echo */ spx_fft(st->fft_table, st->y, st->Y); power_spectrum(st->Y, st->Yps, N); #ifdef FIXED_POINT if (leak_estimate > 16383) leak2 = 32767; else leak2 = SHL16(leak_estimate, 1); #else if (leak_estimate>.5) leak2 = 1; else leak2 = 2*leak_estimate; #endif /* Estimate residual echo */ for (i=0;i<=st->frame_size;i++) Yout[i] = MULT16_32_Q15(leak2,st->Yps[i]); } } h323plus/plugins/audio/Speex/libspeex/testenc.c0000644000175000017500000000646211341106241020402 0ustar markmark#ifdef HAVE_CONFIG_H #include "config.h" #endif #include "speex.h" #include #include #include "speex_callbacks.h" #ifdef FIXED_DEBUG extern long long spx_mips; #endif #define FRAME_SIZE 160 #include int main(int argc, char **argv) { char *inFile, *outFile, *bitsFile; FILE *fin, *fout, *fbits=NULL; short in_short[FRAME_SIZE]; short out_short[FRAME_SIZE]; float sigpow,errpow,snr, seg_snr=0; int snr_frames = 0; char cbits[200]; int nbBits; int i; void *st; void *dec; SpeexBits bits; int tmp; int bitCount=0; int skip_group_delay; SpeexCallback callback; sigpow = 0; errpow = 0; st = speex_encoder_init(&speex_nb_mode); dec = speex_decoder_init(&speex_nb_mode); callback.callback_id = SPEEX_INBAND_CHAR; callback.func = speex_std_char_handler; callback.data = stderr; speex_decoder_ctl(dec, SPEEX_SET_HANDLER, &callback); callback.callback_id = SPEEX_INBAND_MODE_REQUEST; callback.func = speex_std_mode_request_handler; callback.data = st; speex_decoder_ctl(dec, SPEEX_SET_HANDLER, &callback); tmp=0; speex_decoder_ctl(dec, SPEEX_SET_ENH, &tmp); tmp=0; speex_encoder_ctl(st, SPEEX_SET_VBR, &tmp); tmp=8; speex_encoder_ctl(st, SPEEX_SET_QUALITY, &tmp); tmp=1; speex_encoder_ctl(st, SPEEX_SET_COMPLEXITY, &tmp); speex_mode_query(&speex_nb_mode, SPEEX_MODE_FRAME_SIZE, &tmp); fprintf (stderr, "frame size: %d\n", tmp); skip_group_delay = tmp / 2; if (argc != 4 && argc != 3) { fprintf (stderr, "Usage: encode [in file] [out file] [bits file]\nargc = %d", argc); exit(1); } inFile = argv[1]; fin = fopen(inFile, "r"); outFile = argv[2]; fout = fopen(outFile, "w+"); if (argc==4) { bitsFile = argv[3]; fbits = fopen(bitsFile, "w"); } speex_bits_init(&bits); while (!feof(fin)) { fread(in_short, sizeof(short), FRAME_SIZE, fin); if (feof(fin)) break; speex_bits_reset(&bits); speex_encode_int(st, in_short, &bits); nbBits = speex_bits_write(&bits, cbits, 200); bitCount+=bits.nbBits; if (argc==4) fwrite(cbits, 1, nbBits, fbits); speex_bits_rewind(&bits); speex_decode_int(dec, &bits, out_short); speex_bits_reset(&bits); fwrite(&out_short[skip_group_delay], sizeof(short), FRAME_SIZE-skip_group_delay, fout); skip_group_delay = 0; } fprintf (stderr, "Total encoded size: %d bits\n", bitCount); speex_encoder_destroy(st); speex_decoder_destroy(dec); speex_bits_destroy(&bits); rewind(fin); rewind(fout); while ( FRAME_SIZE == fread(in_short, sizeof(short), FRAME_SIZE, fin) && FRAME_SIZE == fread(out_short, sizeof(short), FRAME_SIZE,fout) ) { float s=0, e=0; for (i=0;i #ifndef NULL #define NULL 0 #endif #define MAX_IN_SAMPLES 640 const SpeexMode * const speex_mode_list[SPEEX_NB_MODES] = {&speex_nb_mode, &speex_wb_mode, &speex_uwb_mode}; /* Extern declarations for all codebooks we use here */ extern const signed char gain_cdbk_nb[]; extern const signed char gain_cdbk_lbr[]; extern const signed char hexc_table[]; extern const signed char exc_5_256_table[]; extern const signed char exc_5_64_table[]; extern const signed char exc_8_128_table[]; extern const signed char exc_10_32_table[]; extern const signed char exc_10_16_table[]; extern const signed char exc_20_32_table[]; extern const signed char hexc_10_32_table[]; /* Parameters for Long-Term Prediction (LTP)*/ static const ltp_params ltp_params_nb = { gain_cdbk_nb, 7, 7 }; /* Parameters for Long-Term Prediction (LTP)*/ static const ltp_params ltp_params_vlbr = { gain_cdbk_lbr, 5, 0 }; /* Parameters for Long-Term Prediction (LTP)*/ static const ltp_params ltp_params_lbr = { gain_cdbk_lbr, 5, 7 }; /* Parameters for Long-Term Prediction (LTP)*/ static const ltp_params ltp_params_med = { gain_cdbk_lbr, 5, 7 }; /* Split-VQ innovation parameters for very low bit-rate narrowband */ static const split_cb_params split_cb_nb_vlbr = { 10, /*subvect_size*/ 4, /*nb_subvect*/ exc_10_16_table, /*shape_cb*/ 4, /*shape_bits*/ 0, }; /* Split-VQ innovation parameters for very low bit-rate narrowband */ static const split_cb_params split_cb_nb_ulbr = { 20, /*subvect_size*/ 2, /*nb_subvect*/ exc_20_32_table, /*shape_cb*/ 5, /*shape_bits*/ 0, }; /* Split-VQ innovation parameters for low bit-rate narrowband */ static const split_cb_params split_cb_nb_lbr = { 10, /*subvect_size*/ 4, /*nb_subvect*/ exc_10_32_table, /*shape_cb*/ 5, /*shape_bits*/ 0, }; /* Split-VQ innovation parameters narrowband */ static const split_cb_params split_cb_nb = { 5, /*subvect_size*/ 8, /*nb_subvect*/ exc_5_64_table, /*shape_cb*/ 6, /*shape_bits*/ 0, }; /* Split-VQ innovation parameters narrowband */ static const split_cb_params split_cb_nb_med = { 8, /*subvect_size*/ 5, /*nb_subvect*/ exc_8_128_table, /*shape_cb*/ 7, /*shape_bits*/ 0, }; /* Split-VQ innovation for low-band wideband */ static const split_cb_params split_cb_sb = { 5, /*subvect_size*/ 8, /*nb_subvect*/ exc_5_256_table, /*shape_cb*/ 8, /*shape_bits*/ 0, }; #ifndef DISABLE_WIDEBAND /* Split-VQ innovation for high-band wideband */ static const split_cb_params split_cb_high = { 8, /*subvect_size*/ 5, /*nb_subvect*/ hexc_table, /*shape_cb*/ 7, /*shape_bits*/ 1, }; /* Split-VQ innovation for high-band wideband */ static const split_cb_params split_cb_high_lbr = { 10, /*subvect_size*/ 4, /*nb_subvect*/ hexc_10_32_table, /*shape_cb*/ 5, /*shape_bits*/ 0, }; #endif /* 2150 bps "vocoder-like" mode for comfort noise */ static const SpeexSubmode nb_submode1 = { 0, 1, 0, 0, /* LSP quantization */ lsp_quant_lbr, lsp_unquant_lbr, /* No pitch quantization */ forced_pitch_quant, forced_pitch_unquant, NULL, /* No innovation quantization (noise only) */ noise_codebook_quant, noise_codebook_unquant, NULL, #ifdef FIXED_POINT 22938, 22938, 0, -1, #else .7, .7, 0, -1, #endif 43 }; /* 3.95 kbps very low bit-rate mode */ static const SpeexSubmode nb_submode8 = { 0, 1, 0, 0, /*LSP quantization*/ lsp_quant_lbr, lsp_unquant_lbr, /*No pitch quantization*/ forced_pitch_quant, forced_pitch_unquant, NULL, /*Innovation quantization*/ split_cb_search_shape_sign, split_cb_shape_sign_unquant, &split_cb_nb_ulbr, #ifdef FIXED_POINT 22938, 16384, 11796, 21299, #else 0.7, 0.5, .36, .65, #endif 79 }; /* 5.95 kbps very low bit-rate mode */ static const SpeexSubmode nb_submode2 = { 0, 0, 0, 0, /*LSP quantization*/ lsp_quant_lbr, lsp_unquant_lbr, /*No pitch quantization*/ pitch_search_3tap, pitch_unquant_3tap, <p_params_vlbr, /*Innovation quantization*/ split_cb_search_shape_sign, split_cb_shape_sign_unquant, &split_cb_nb_vlbr, #ifdef FIXED_POINT 22938, 16384, 11796, 18022, #else 0.7, 0.5, .36, .55, #endif 119 }; /* 8 kbps low bit-rate mode */ static const SpeexSubmode nb_submode3 = { -1, 0, 1, 0, /*LSP quantization*/ lsp_quant_lbr, lsp_unquant_lbr, /*Pitch quantization*/ pitch_search_3tap, pitch_unquant_3tap, <p_params_lbr, /*Innovation quantization*/ split_cb_search_shape_sign, split_cb_shape_sign_unquant, &split_cb_nb_lbr, #ifdef FIXED_POINT 22938, 18022, 9830, 14746, #else 0.7, 0.55, .30, .45, #endif 160 }; /* 11 kbps medium bit-rate mode */ static const SpeexSubmode nb_submode4 = { -1, 0, 1, 0, /*LSP quantization*/ lsp_quant_lbr, lsp_unquant_lbr, /*Pitch quantization*/ pitch_search_3tap, pitch_unquant_3tap, <p_params_med, /*Innovation quantization*/ split_cb_search_shape_sign, split_cb_shape_sign_unquant, &split_cb_nb_med, #ifdef FIXED_POINT 22938, 20644, 5243, 11469, #else 0.7, 0.63, .16, .35, #endif 220 }; /* 15 kbps high bit-rate mode */ static const SpeexSubmode nb_submode5 = { -1, 0, 3, 0, /*LSP quantization*/ lsp_quant_nb, lsp_unquant_nb, /*Pitch quantization*/ pitch_search_3tap, pitch_unquant_3tap, <p_params_nb, /*Innovation quantization*/ split_cb_search_shape_sign, split_cb_shape_sign_unquant, &split_cb_nb, #ifdef FIXED_POINT 22938, 21299, 3932, 8192, #else 0.7, 0.65, .12, .25, #endif 300 }; /* 18.2 high bit-rate mode */ static const SpeexSubmode nb_submode6 = { -1, 0, 3, 0, /*LSP quantization*/ lsp_quant_nb, lsp_unquant_nb, /*Pitch quantization*/ pitch_search_3tap, pitch_unquant_3tap, <p_params_nb, /*Innovation quantization*/ split_cb_search_shape_sign, split_cb_shape_sign_unquant, &split_cb_sb, #ifdef FIXED_POINT 22282, 21299, 2294, 3277, #else 0.68, 0.65, .07, .1, #endif 364 }; /* 24.6 kbps high bit-rate mode */ static const SpeexSubmode nb_submode7 = { -1, 0, 3, 1, /*LSP quantization*/ lsp_quant_nb, lsp_unquant_nb, /*Pitch quantization*/ pitch_search_3tap, pitch_unquant_3tap, <p_params_nb, /*Innovation quantization*/ split_cb_search_shape_sign, split_cb_shape_sign_unquant, &split_cb_nb, #ifdef FIXED_POINT 21299, 21299, 0, -1, #else 0.65, 0.65, .0, -1, #endif 492 }; /* Default mode for narrowband */ static const SpeexNBMode nb_mode = { 160, /*frameSize*/ 40, /*subframeSize*/ 10, /*lpcSize*/ 17, /*pitchStart*/ 144, /*pitchEnd*/ #ifdef FIXED_POINT 29491, 19661, /* gamma1, gamma2 */ #else 0.9, 0.6, /* gamma1, gamma2 */ #endif .012, /*lag_factor*/ QCONST16(.0002,15), /*lpc_floor*/ #ifdef EPIC_48K 0, #endif {NULL, &nb_submode1, &nb_submode2, &nb_submode3, &nb_submode4, &nb_submode5, &nb_submode6, &nb_submode7, &nb_submode8, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, 5, {1, 8, 2, 3, 3, 4, 4, 5, 5, 6, 7} }; /* Default mode for narrowband */ const SpeexMode speex_nb_mode = { &nb_mode, nb_mode_query, "narrowband", 0, 4, &nb_encoder_init, &nb_encoder_destroy, &nb_encode, &nb_decoder_init, &nb_decoder_destroy, &nb_decode, &nb_encoder_ctl, &nb_decoder_ctl, }; /* Wideband part */ static const SpeexSubmode wb_submode1 = { 0, 0, 1, 0, /*LSP quantization*/ lsp_quant_high, lsp_unquant_high, /*Pitch quantization*/ NULL, NULL, NULL, /*No innovation quantization*/ NULL, NULL, NULL, #ifdef FIXED_POINT 24576, 24576, 0, -1, #else .75, .75, .0, -1, #endif 36 }; static const SpeexSubmode wb_submode2 = { 0, 0, 1, 0, /*LSP quantization*/ lsp_quant_high, lsp_unquant_high, /*Pitch quantization*/ NULL, NULL, NULL, /*Innovation quantization*/ split_cb_search_shape_sign, split_cb_shape_sign_unquant, #ifdef DISABLE_WIDEBAND NULL, #else &split_cb_high_lbr, #endif #ifdef FIXED_POINT 27853, 19661, 8192, -1, #else .85, .6, .25, -1, #endif 112 }; static const SpeexSubmode wb_submode3 = { 0, 0, 1, 0, /*LSP quantization*/ lsp_quant_high, lsp_unquant_high, /*Pitch quantization*/ NULL, NULL, NULL, /*Innovation quantization*/ split_cb_search_shape_sign, split_cb_shape_sign_unquant, #ifdef DISABLE_WIDEBAND NULL, #else &split_cb_high, #endif #ifdef FIXED_POINT 24576, 22938, 1638, -1, #else .75, .7, .05, -1, #endif 192 }; static const SpeexSubmode wb_submode4 = { 0, 0, 1, 1, /*LSP quantization*/ lsp_quant_high, lsp_unquant_high, /*Pitch quantization*/ NULL, NULL, NULL, /*Innovation quantization*/ split_cb_search_shape_sign, split_cb_shape_sign_unquant, #ifdef DISABLE_WIDEBAND NULL, #else &split_cb_high, #endif #ifdef FIXED_POINT 24576, 24576, 0, -1, #else .75, .75, .0, -1, #endif 352 }; /* Split-band wideband CELP mode*/ static const SpeexSBMode sb_wb_mode = { &speex_nb_mode, 160, /*frameSize*/ 40, /*subframeSize*/ 8, /*lpcSize*/ 640, /*bufSize*/ #ifdef FIXED_POINT 29491, 19661, /* gamma1, gamma2 */ #else 0.9, 0.6, /* gamma1, gamma2 */ #endif .001, /*lag_factor*/ QCONST16(.0001,15), /*lpc_floor*/ 0.9, {NULL, &wb_submode1, &wb_submode2, &wb_submode3, &wb_submode4, NULL, NULL, NULL}, 3, {1, 8, 2, 3, 4, 5, 5, 6, 6, 7, 7}, {1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 4}, vbr_hb_thresh, 5 }; const SpeexMode speex_wb_mode = { &sb_wb_mode, wb_mode_query, "wideband (sub-band CELP)", 1, 4, &sb_encoder_init, &sb_encoder_destroy, &sb_encode, &sb_decoder_init, &sb_decoder_destroy, &sb_decode, &sb_encoder_ctl, &sb_decoder_ctl, }; /* "Ultra-wideband" mode stuff */ /* Split-band "ultra-wideband" (32 kbps) CELP mode*/ static const SpeexSBMode sb_uwb_mode = { &speex_wb_mode, 320, /*frameSize*/ 80, /*subframeSize*/ 8, /*lpcSize*/ 1280, /*bufSize*/ #ifdef FIXED_POINT 29491, 19661, /* gamma1, gamma2 */ #else 0.9, 0.6, /* gamma1, gamma2 */ #endif .002, /*lag_factor*/ QCONST16(.0001,15), /*lpc_floor*/ 0.7, {NULL, &wb_submode1, NULL, NULL, NULL, NULL, NULL, NULL}, 1, {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, vbr_uhb_thresh, 2 }; const SpeexMode speex_uwb_mode = { &sb_uwb_mode, wb_mode_query, "ultra-wideband (sub-band CELP)", 2, 4, &sb_encoder_init, &sb_encoder_destroy, &sb_encode, &sb_decoder_init, &sb_decoder_destroy, &sb_decode, &sb_encoder_ctl, &sb_decoder_ctl, }; #ifdef EPIC_48K extern const signed char gain_cdbk_ulbr[]; extern const signed char exc_12_32_table[]; /* Parameters for Long-Term Prediction (LTP)*/ static const ltp_params ltp_params_48k = { gain_cdbk_ulbr, 3, 0 }; static const split_cb_params split_cb_nb_48k = { 12, /*subvect_size*/ 4, /*nb_subvect*/ exc_12_32_table, /*shape_cb*/ 5, /*shape_bits*/ 0, }; /* 4.8 kbps very low bit-rate mode */ static const SpeexSubmode nb_48k_submode = { 0, 0, 0, 0, /*LSP quantization*/ lsp_quant_48k, lsp_unquant_48k, /*No pitch quantization*/ pitch_search_3tap, pitch_unquant_3tap, <p_params_48k, /*Innovation quantization*/ split_cb_search_shape_sign, split_cb_shape_sign_unquant, &split_cb_nb_48k, #ifdef FIXED_POINT 22938, 16384, 11796, 18022, #else 0.7, 0.5, .36, .55, #endif 144 }; /* Special, non-standard 4.8 kbps mode */ static const SpeexNBMode nb_48k_mode = { 240, /*frameSize*/ 48, /*subframeSize*/ 10, /*lpcSize*/ 640, /*bufSize*/ 17, /*pitchStart*/ 144, /*pitchEnd*/ 0.9, /*gamma1*/ 0.6, /*gamma2*/ .01, /*lag_factor*/ QCONST16(.0003,15), /*lpc_floor*/ 1, {NULL, NULL, &nb_48k_submode, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, 2, {2,2,2,2,2,2,2,2,2,2,2} }; /* Default mode for narrowband */ const SpeexMode speex_nb_48k_mode = { &nb_48k_mode, nb_mode_query, "narrowband 4.8 kbps", 1000, 4, &nb_encoder_init, &nb_encoder_destroy, &nb_encode, &nb_decoder_init, &nb_decoder_destroy, &nb_decode, &nb_encoder_ctl, &nb_decoder_ctl, }; #endif int speex_mode_query(const SpeexMode *mode, int request, void *ptr) { return mode->query(mode->mode, request, ptr); } const SpeexMode * speex_lib_get_mode (int mode) { #ifdef EPIC_48K if (mode == SPEEX_MODEID_NB_48K) return &speex_nb_48k_mode; #endif if (mode < 0 || mode > SPEEX_NB_MODES) return NULL; return speex_mode_list[mode]; } h323plus/plugins/audio/Speex/libspeex/modes_noglobals.c0000644000175000017500000006372511341106241022111 0ustar markmark/* Copyright (C) 2004 CSIRO Australia File: modes_noglobals.c Hacked by Conrad Parker, based on modes.c: Copyright (C) 2002 Jean-Marc Valin Describes the different modes of the codec. This file differs from modes.c in that SpeexMode structures are dynamically allocated, rather than being statically defined. This introduces some minor API changes which are described in the file README.symbian in the top level of the Speex source distribution. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "modes.h" #include "ltp.h" #include "quant_lsp.h" #include "cb_search.h" #include "sb_celp.h" #include "nb_celp.h" #include "vbr.h" #include "misc.h" #include #include #ifndef NULL #define NULL 0 #endif /* Extern declarations for all codebooks we use here */ extern const signed char gain_cdbk_nb[]; extern const signed char gain_cdbk_lbr[]; extern const signed char hexc_table[]; extern const signed char exc_5_256_table[]; extern const signed char exc_5_64_table[]; extern const signed char exc_8_128_table[]; extern const signed char exc_10_32_table[]; extern const signed char exc_10_16_table[]; extern const signed char exc_20_32_table[]; extern const signed char hexc_10_32_table[]; static const ltp_params * speex_ltp_params_new (const signed char * gain_cdbk, int gain_bits, int pitch_bits) { ltp_params * params; params = (ltp_params *) speex_alloc (sizeof (ltp_params)); if (params == NULL) return NULL; params->gain_cdbk = gain_cdbk; params->gain_bits = gain_bits; params->pitch_bits = pitch_bits; return params; } static void speex_ltp_params_free (const ltp_params * params) { speex_free ((void *)params); } static const split_cb_params * speex_split_cb_params_new (int subvect_size, int nb_subvect, const signed char * shape_cb, int shape_bits, int have_sign) { split_cb_params * params; params = (split_cb_params *) speex_alloc (sizeof (split_cb_params)); if (params == NULL) return NULL; params->subvect_size = subvect_size; params->nb_subvect = nb_subvect; params->shape_cb = shape_cb; params->shape_bits = shape_bits; params->have_sign = have_sign; return params; } static void speex_split_cb_params_free (const split_cb_params * params) { speex_free ((void *)params); } static SpeexSubmode * speex_submode_new (int lbr_pitch, int forced_pitch_gain, int have_subframe_gain, int double_codebook, lsp_quant_func lsp_quant, lsp_unquant_func lsp_unquant, ltp_quant_func ltp_quant, ltp_unquant_func ltp_unquant, const void * ltp_params, innovation_quant_func innovation_quant, innovation_unquant_func innovation_unquant, const void * innovation_params, /*Synthesis filter enhancement*/ spx_word16_t lpc_enh_k1, /**< Enhancer constant */ spx_word16_t lpc_enh_k2, /**< Enhancer constant */ spx_word16_t lpc_enh_k3, /**< Enhancer constant */ spx_word16_t comb_gain, /**< Gain of enhancer comb filter */ int bits_per_frame /**< Number of bits per frame after encoding*/ ) { SpeexSubmode * submode; submode = (SpeexSubmode *) speex_alloc (sizeof (SpeexSubmode)); if (submode == NULL) return NULL; submode->lbr_pitch = lbr_pitch; submode->forced_pitch_gain = forced_pitch_gain; submode->have_subframe_gain = have_subframe_gain; submode->double_codebook = double_codebook; submode->lsp_quant = lsp_quant; submode->lsp_unquant = lsp_unquant; submode->ltp_quant = ltp_quant; submode->ltp_unquant = ltp_unquant; submode->ltp_params = ltp_params; submode->innovation_quant = innovation_quant; submode->innovation_unquant = innovation_unquant; submode->innovation_params = innovation_params; submode->lpc_enh_k1 = lpc_enh_k1; submode->lpc_enh_k2 = lpc_enh_k2; submode->lpc_enh_k3 = lpc_enh_k3; submode->comb_gain = comb_gain; submode->bits_per_frame = bits_per_frame; return submode; } static void speex_submode_free (const SpeexSubmode * submode) { if (submode->ltp_params) speex_ltp_params_free (submode->ltp_params); if (submode->innovation_params) speex_split_cb_params_free (submode->innovation_params); speex_free ((void *)submode); } static SpeexNBMode * nb_mode_new (int frameSize, int subframeSize, int lpcSize, int bufSize, int pitchStart, int pitchEnd, spx_word16_t gamma1, spx_word16_t gamma2, float lag_factor, float lpc_floor, #ifdef EPIC_48K int lbr48k, #endif const SpeexSubmode * submodes[], int defaultSubmode, int quality_map[]) { SpeexNBMode * nb_mode; nb_mode = (SpeexNBMode *) speex_alloc (sizeof (SpeexNBMode)); if (nb_mode == NULL) return NULL; nb_mode->frameSize = frameSize; nb_mode->subframeSize = subframeSize; nb_mode->lpcSize = lpcSize; nb_mode->bufSize = bufSize; nb_mode->pitchStart = pitchStart; nb_mode->pitchEnd = pitchEnd; nb_mode->gamma1 = gamma1; nb_mode->gamma2 = gamma2; nb_mode->lag_factor = lag_factor; nb_mode->lpc_floor = lpc_floor; #ifdef EPIC_48K nb_mode->lbr48k = lbr48k; #endif memcpy (nb_mode->submodes, submodes, sizeof (nb_mode->submodes)); nb_mode->defaultSubmode = defaultSubmode; memcpy (nb_mode->quality_map, quality_map, sizeof (nb_mode->quality_map)); return nb_mode; } static void nb_mode_free (const SpeexNBMode * nb_mode) { speex_free ((void *)nb_mode); } static SpeexSBMode * sb_mode_new ( const SpeexMode *nb_mode, /**< Embedded narrowband mode */ int frameSize, /**< Size of frames used for encoding */ int subframeSize, /**< Size of sub-frames used for encoding */ int lpcSize, /**< Order of LPC filter */ int bufSize, /**< Signal buffer size in encoder */ spx_word16_t gamma1, /**< Perceptual filter parameter #1 */ spx_word16_t gamma2, /**< Perceptual filter parameter #1 */ float lag_factor, /**< Lag-windowing parameter */ float lpc_floor, /**< Noise floor for LPC analysis */ float folding_gain, const SpeexSubmode *submodes[], /**< Sub-mode data for the mode */ int defaultSubmode, /**< Default sub-mode to use when encoding */ int low_quality_map[], /**< Mode corresponding to each quality setting */ int quality_map[], /**< Mode corresponding to each quality setting */ const float (*vbr_thresh)[11], int nb_modes ) { SpeexSBMode * sb_mode; sb_mode = (SpeexSBMode *) speex_alloc (sizeof (SpeexSBMode)); if (sb_mode == NULL) return NULL; sb_mode->nb_mode = nb_mode; sb_mode->frameSize = frameSize; sb_mode->subframeSize = subframeSize; sb_mode->lpcSize = lpcSize; sb_mode->bufSize = bufSize; sb_mode->gamma1 = gamma1; sb_mode->gamma2 = gamma2; sb_mode->lag_factor = lag_factor; sb_mode->lpc_floor = lpc_floor; sb_mode->folding_gain = folding_gain; memcpy (sb_mode->submodes, submodes, sizeof (sb_mode->submodes)); sb_mode->defaultSubmode = defaultSubmode; memcpy (sb_mode->low_quality_map, low_quality_map, sizeof (sb_mode->low_quality_map)); memcpy (sb_mode->quality_map, quality_map, sizeof (sb_mode->quality_map)); sb_mode->vbr_thresh = vbr_thresh; sb_mode->nb_modes = nb_modes; return sb_mode; } static void sb_mode_free (const SpeexSBMode * sb_mode) { int i; for (i = 0; i < SB_SUBMODES; i++) if (sb_mode->submodes[i]) speex_submode_free (sb_mode->submodes[i]); speex_free ((void *)sb_mode); } static SpeexMode * mode_new (const void * b_mode, mode_query_func query, char * modeName, int modeID, int bitstream_version, encoder_init_func enc_init, encoder_destroy_func enc_destroy, encode_func enc, decoder_init_func dec_init, decoder_destroy_func dec_destroy, decode_func dec, encoder_ctl_func enc_ctl, decoder_ctl_func dec_ctl) { SpeexMode * mode; mode = (SpeexMode *) speex_alloc (sizeof (SpeexMode)); if (mode == NULL) return NULL; mode->mode = b_mode; mode->query = query; mode->modeName = modeName; mode->modeID = modeID; mode->bitstream_version = bitstream_version; mode->enc_init = enc_init; mode->enc_destroy = enc_destroy; mode->enc = enc; mode->dec_init = dec_init; mode->dec_destroy = dec_destroy; mode->dec = dec; mode->enc_ctl = enc_ctl; mode->dec_ctl = dec_ctl; return mode; } /* Freeing each kind of created (SpeexMode *) is done separately below */ /* Parameters for Long-Term Prediction (LTP)*/ static const ltp_params * ltp_params_nb (void) { return speex_ltp_params_new ( gain_cdbk_nb, 7, 7 ); } /* Parameters for Long-Term Prediction (LTP)*/ static const ltp_params * ltp_params_vlbr (void) { return speex_ltp_params_new ( gain_cdbk_lbr, 5, 0 ); } /* Parameters for Long-Term Prediction (LTP)*/ static const ltp_params * ltp_params_lbr (void) { return speex_ltp_params_new ( gain_cdbk_lbr, 5, 7 ); } /* Parameters for Long-Term Prediction (LTP)*/ static const ltp_params * ltp_params_med (void) { return speex_ltp_params_new ( gain_cdbk_lbr, 5, 7 ); } /* Split-VQ innovation parameters for very low bit-rate narrowband */ static const split_cb_params * split_cb_nb_vlbr (void) { return speex_split_cb_params_new ( 10, /*subvect_size*/ 4, /*nb_subvect*/ exc_10_16_table, /*shape_cb*/ 4, /*shape_bits*/ 0 ); } /* Split-VQ innovation parameters for very low bit-rate narrowband */ static const split_cb_params * split_cb_nb_ulbr (void) { return speex_split_cb_params_new ( 20, /*subvect_size*/ 2, /*nb_subvect*/ exc_20_32_table, /*shape_cb*/ 5, /*shape_bits*/ 0 ); } /* Split-VQ innovation parameters for low bit-rate narrowband */ static const split_cb_params * split_cb_nb_lbr (void) { return speex_split_cb_params_new ( 10, /*subvect_size*/ 4, /*nb_subvect*/ exc_10_32_table, /*shape_cb*/ 5, /*shape_bits*/ 0 ); } /* Split-VQ innovation parameters narrowband */ static const split_cb_params * split_cb_nb (void) { return speex_split_cb_params_new ( 5, /*subvect_size*/ 8, /*nb_subvect*/ exc_5_64_table, /*shape_cb*/ 6, /*shape_bits*/ 0 ); } /* Split-VQ innovation parameters narrowband */ static const split_cb_params * split_cb_nb_med (void) { return speex_split_cb_params_new ( 8, /*subvect_size*/ 5, /*nb_subvect*/ exc_8_128_table, /*shape_cb*/ 7, /*shape_bits*/ 0 ); } /* Split-VQ innovation for low-band wideband */ static const split_cb_params * split_cb_sb (void) { return speex_split_cb_params_new ( 5, /*subvect_size*/ 8, /*nb_subvect*/ exc_5_256_table, /*shape_cb*/ 8, /*shape_bits*/ 0 ); } /* Split-VQ innovation for high-band wideband */ static const split_cb_params * split_cb_high (void) { return speex_split_cb_params_new ( 8, /*subvect_size*/ 5, /*nb_subvect*/ hexc_table, /*shape_cb*/ 7, /*shape_bits*/ 1 ); } /* Split-VQ innovation for high-band wideband */ static const split_cb_params * split_cb_high_lbr (void) { return speex_split_cb_params_new ( 10, /*subvect_size*/ 4, /*nb_subvect*/ hexc_10_32_table, /*shape_cb*/ 5, /*shape_bits*/ 0 ); } /* 2150 bps "vocoder-like" mode for comfort noise */ static const SpeexSubmode * nb_submode1 (void) { return speex_submode_new ( 0, 1, 0, 0, /* LSP quantization */ lsp_quant_lbr, lsp_unquant_lbr, /* No pitch quantization */ forced_pitch_quant, forced_pitch_unquant, NULL, /* No innovation quantization (noise only) */ noise_codebook_quant, noise_codebook_unquant, NULL, #ifdef FIXED_POINT 22938, 22938, 0, -1, #else .7, .7, 0, -1, #endif 43 ); } /* 3.95 kbps very low bit-rate mode */ static const SpeexSubmode * nb_submode8 (void) { const split_cb_params * params; params = split_cb_nb_ulbr(); if (params == NULL) return NULL; return speex_submode_new ( 0, 1, 0, 0, /*LSP quantization*/ lsp_quant_lbr, lsp_unquant_lbr, /*No pitch quantization*/ forced_pitch_quant, forced_pitch_unquant, NULL, /*Innovation quantization*/ split_cb_search_shape_sign, split_cb_shape_sign_unquant, params, #ifdef FIXED_POINT 22938, 16384, 11796, 21299, #else 0.7, 0.5, .36, .65, #endif 79 ); } /* 5.95 kbps very low bit-rate mode */ static const SpeexSubmode * nb_submode2 (void) { return speex_submode_new ( 0, 0, 0, 0, /*LSP quantization*/ lsp_quant_lbr, lsp_unquant_lbr, /*No pitch quantization*/ pitch_search_3tap, pitch_unquant_3tap, ltp_params_vlbr(), /*Innovation quantization*/ split_cb_search_shape_sign, split_cb_shape_sign_unquant, split_cb_nb_vlbr(), #ifdef FIXED_POINT 22938, 16384, 11796, 18022, #else 0.7, 0.5, .36, .55, #endif 119 ); } /* 8 kbps low bit-rate mode */ static const SpeexSubmode * nb_submode3 (void) { return speex_submode_new ( -1, 0, 1, 0, /*LSP quantization*/ lsp_quant_lbr, lsp_unquant_lbr, /*Pitch quantization*/ pitch_search_3tap, pitch_unquant_3tap, ltp_params_lbr(), /*Innovation quantization*/ split_cb_search_shape_sign, split_cb_shape_sign_unquant, split_cb_nb_lbr(), #ifdef FIXED_POINT 22938, 18022, 9830, 14746, #else 0.7, 0.55, .30, .45, #endif 160 ); } /* 11 kbps medium bit-rate mode */ static const SpeexSubmode * nb_submode4 (void) { return speex_submode_new ( -1, 0, 1, 0, /*LSP quantization*/ lsp_quant_lbr, lsp_unquant_lbr, /*Pitch quantization*/ pitch_search_3tap, pitch_unquant_3tap, ltp_params_med(), /*Innovation quantization*/ split_cb_search_shape_sign, split_cb_shape_sign_unquant, split_cb_nb_med(), #ifdef FIXED_POINT 22938, 20644, 5243, 11469, #else 0.7, 0.63, .16, .35, #endif 220 ); } /* 15 kbps high bit-rate mode */ static const SpeexSubmode * nb_submode5 (void) { return speex_submode_new ( -1, 0, 3, 0, /*LSP quantization*/ lsp_quant_nb, lsp_unquant_nb, /*Pitch quantization*/ pitch_search_3tap, pitch_unquant_3tap, ltp_params_nb(), /*Innovation quantization*/ split_cb_search_shape_sign, split_cb_shape_sign_unquant, split_cb_nb(), #ifdef FIXED_POINT 22938, 21299, 3932, 8192, #else 0.7, 0.65, .12, .25, #endif 300 ); } /* 18.2 high bit-rate mode */ static const SpeexSubmode * nb_submode6 (void) { return speex_submode_new ( -1, 0, 3, 0, /*LSP quantization*/ lsp_quant_nb, lsp_unquant_nb, /*Pitch quantization*/ pitch_search_3tap, pitch_unquant_3tap, ltp_params_nb(), /*Innovation quantization*/ split_cb_search_shape_sign, split_cb_shape_sign_unquant, split_cb_sb(), #ifdef FIXED_POINT 22282, 21299, 2294, 3277, #else 0.68, 0.65, .07, .1, #endif 364 ); } /* 24.6 kbps high bit-rate mode */ static const SpeexSubmode * nb_submode7 (void) { return speex_submode_new ( -1, 0, 3, 1, /*LSP quantization*/ lsp_quant_nb, lsp_unquant_nb, /*Pitch quantization*/ pitch_search_3tap, pitch_unquant_3tap, ltp_params_nb(), /*Innovation quantization*/ split_cb_search_shape_sign, split_cb_shape_sign_unquant, split_cb_nb(), #ifdef FIXED_POINT 21299, 21299, 0, -1, #else 0.65, 0.65, .0, -1, #endif 492 ); } /* Default mode for narrowband */ static const SpeexNBMode * nb_mode (void) { const SpeexSubmode ** submodes; int quality_map[11] = {1, 8, 2, 3, 3, 4, 4, 5, 5, 6, 7}; const SpeexNBMode * ret; submodes = (const SpeexSubmode **) speex_alloc (sizeof (SpeexSubmode *) * SB_SUBMODES); if (submodes == NULL) return NULL; memset (submodes, 0, sizeof (submodes)); if (!(submodes[1] = nb_submode1())) goto nb_1; if (!(submodes[2] = nb_submode2())) goto nb_2; if (!(submodes[3] = nb_submode3())) goto nb_3; if (!(submodes[4] = nb_submode4())) goto nb_4; if (!(submodes[5] = nb_submode5())) goto nb_5; if (!(submodes[6] = nb_submode6())) goto nb_6; if (!(submodes[7] = nb_submode7())) goto nb_7; if (!(submodes[8] = nb_submode8())) goto nb_8; ret = nb_mode_new ( 160, /*frameSize*/ 40, /*subframeSize*/ 10, /*lpcSize*/ 640, /*bufSize*/ 17, /*pitchStart*/ 144, /*pitchEnd*/ #ifdef FIXED_POINT 29491, 19661, /* gamma1, gamma2 */ #else 0.9, 0.6, /* gamma1, gamma2 */ #endif .012, /*lag_factor*/ 1.0002, /*lpc_floor*/ #ifdef EPIC_48K 0, #endif submodes, 5, quality_map ); if (ret == NULL) goto nb_8; /* If nb_mode_new() was successful, the references to submodes have been * copied into ret->submodes[], and it's safe to free submodes. */ speex_free ((void *)submodes); return ret; /* Cleanup on memory allocation errors */ nb_8: speex_submode_free (submodes[8]); nb_7: speex_submode_free (submodes[7]); nb_6: speex_submode_free (submodes[6]); nb_5: speex_submode_free (submodes[5]); nb_4: speex_submode_free (submodes[4]); nb_3: speex_submode_free (submodes[3]); nb_2: speex_submode_free (submodes[2]); nb_1: speex_submode_free (submodes[1]); speex_free ((void *)submodes); return NULL; } /* Default mode for narrowband */ static const SpeexMode * speex_nb_mode_new (void) { const SpeexNBMode * _nb_mode; _nb_mode = nb_mode(); if (_nb_mode == NULL) return NULL; return mode_new ( _nb_mode, nb_mode_query, "narrowband", 0, 4, &nb_encoder_init, &nb_encoder_destroy, &nb_encode, &nb_decoder_init, &nb_decoder_destroy, &nb_decode, &nb_encoder_ctl, &nb_decoder_ctl ); } static void speex_nb_mode_free (const SpeexMode * mode) { nb_mode_free ((SpeexNBMode *)mode->mode); speex_free ((void *)mode); } /* Wideband part */ static const SpeexSubmode * wb_submode1 (void) { return speex_submode_new ( 0, 0, 1, 0, /*LSP quantization*/ lsp_quant_high, lsp_unquant_high, /*Pitch quantization*/ NULL, NULL, NULL, /*No innovation quantization*/ NULL, NULL, NULL, #ifdef FIXED_POINT 24576, 24576, 0, -1, #else .75, .75, .0, -1, #endif 36 ); } static const SpeexSubmode * wb_submode2 (void) { return speex_submode_new ( 0, 0, 1, 0, /*LSP quantization*/ lsp_quant_high, lsp_unquant_high, /*Pitch quantization*/ NULL, NULL, NULL, /*Innovation quantization*/ split_cb_search_shape_sign, split_cb_shape_sign_unquant, split_cb_high_lbr(), #ifdef FIXED_POINT 27853, 19661, 8192, -1, #else .85, .6, .25, -1, #endif 112 ); } static const SpeexSubmode * wb_submode3 (void) { return speex_submode_new ( 0, 0, 1, 0, /*LSP quantization*/ lsp_quant_high, lsp_unquant_high, /*Pitch quantization*/ NULL, NULL, NULL, /*Innovation quantization*/ split_cb_search_shape_sign, split_cb_shape_sign_unquant, split_cb_high(), #ifdef FIXED_POINT 24576, 22938, 1638, -1, #else .75, .7, .05, -1, #endif 192 ); } static const SpeexSubmode * wb_submode4 (void) { return speex_submode_new ( 0, 0, 1, 1, /*LSP quantization*/ lsp_quant_high, lsp_unquant_high, /*Pitch quantization*/ NULL, NULL, NULL, /*Innovation quantization*/ split_cb_search_shape_sign, split_cb_shape_sign_unquant, split_cb_high(), #ifdef FIXED_POINT 24576, 24576, 0, -1, #else .75, .75, .0, -1, #endif 352 ); } /* Split-band wideband CELP mode*/ static const SpeexSBMode * sb_wb_mode (void) { const SpeexMode * nb_mode; const SpeexSubmode ** submodes; int low_quality_map[11] = {1, 8, 2, 3, 4, 5, 5, 6, 6, 7, 7}; int quality_map[11] = {1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 4}; SpeexSBMode * ret; nb_mode = speex_nb_mode_new (); if (nb_mode == NULL) return NULL; submodes = (const SpeexSubmode **) speex_alloc (sizeof (SpeexSubmode *) * SB_SUBMODES); if (submodes == NULL) return NULL; memset (submodes, 0, sizeof (submodes)); if (!(submodes[1] = wb_submode1())) goto sb_1; if (!(submodes[2] = wb_submode2())) goto sb_2; if (!(submodes[3] = wb_submode3())) goto sb_3; if (!(submodes[4] = wb_submode4())) goto sb_4; ret = sb_mode_new ( nb_mode, 160, /*frameSize*/ 40, /*subframeSize*/ 8, /*lpcSize*/ 640, /*bufSize*/ #ifdef FIXED_POINT 29491, 19661, /* gamma1, gamma2 */ #else 0.9, 0.6, /* gamma1, gamma2 */ #endif .001, /*lag_factor*/ 1.0001, /*lpc_floor*/ 0.9, submodes, 3, low_quality_map, quality_map, vbr_hb_thresh, 5 ); if (ret == NULL) goto sb_4; /* If sb_mode_new() was successful, the references to submodes have been * copied into ret->submodes[], and it's safe to free submodes. */ speex_free ((void *)submodes); return ret; /* Cleanup on memory allocation errors */ sb_4: speex_submode_free (submodes[4]); sb_3: speex_submode_free (submodes[3]); sb_2: speex_submode_free (submodes[2]); sb_1: speex_submode_free (submodes[1]); speex_free ((void *)submodes); return NULL; } static void sb_wb_mode_free (const SpeexSBMode * mode) { speex_nb_mode_free (mode->nb_mode); } static const SpeexMode * speex_wb_mode_new (void) { const SpeexSBMode * sb_mode; sb_mode = sb_wb_mode (); if (sb_mode == NULL) return NULL; return mode_new ( (const SpeexNBMode *)sb_mode, wb_mode_query, "wideband (sub-band CELP)", 1, 4, &sb_encoder_init, &sb_encoder_destroy, &sb_encode, &sb_decoder_init, &sb_decoder_destroy, &sb_decode, &sb_encoder_ctl, &sb_decoder_ctl ); } static void speex_wb_mode_free (const SpeexMode * mode) { sb_wb_mode_free (mode->mode); speex_free ((void *)mode); } /* "Ultra-wideband" mode stuff */ /* Split-band "ultra-wideband" (32 kbps) CELP mode*/ static const SpeexSBMode * sb_uwb_mode (void) { const SpeexSBMode * nb_mode; const SpeexSubmode ** submodes; int low_quality_map[11] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int quality_map[11] = {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; SpeexSBMode * ret; nb_mode = sb_wb_mode (); if (nb_mode == NULL) return NULL; submodes = (const SpeexSubmode **) speex_alloc (sizeof (SpeexSubmode *) * SB_SUBMODES); if (submodes == NULL) return NULL; memset (submodes, 0, sizeof (submodes)); if (!(submodes[1] = wb_submode1())) goto uwb_1; ret = sb_mode_new ( (const SpeexMode *)nb_mode, 320, /*frameSize*/ 80, /*subframeSize*/ 8, /*lpcSize*/ 1280, /*bufSize*/ #ifdef FIXED_POINT 29491, 19661, /* gamma1, gamma2 */ #else 0.9, 0.6, /* gamma1, gamma2 */ #endif .002, /*lag_factor*/ 1.0001, /*lpc_floor*/ 0.7, submodes, 1, low_quality_map, quality_map, vbr_uhb_thresh, 2 ); if (ret == NULL) goto uwb_1; /* If sb_mode_new() was successful, the references to submodes have been * copied into ret->submodes[], and it's safe to free submodes. */ speex_free ((void *)submodes); return ret; uwb_1: speex_submode_free (submodes[1]); speex_free ((void *)submodes); return NULL; } static void sb_uwb_mode_free (const SpeexSBMode * mode) { sb_wb_mode_free ((const SpeexSBMode *)mode->nb_mode); sb_mode_free (mode); } static const SpeexMode * speex_uwb_mode_new (void) { const SpeexSBMode * sb_mode; sb_mode = sb_uwb_mode(); if (sb_mode == NULL) return NULL; return mode_new ( sb_mode, wb_mode_query, "ultra-wideband (sub-band CELP)", 2, 4, &sb_encoder_init, &sb_encoder_destroy, &sb_encode, &sb_decoder_init, &sb_decoder_destroy, &sb_decode, &sb_encoder_ctl, &sb_decoder_ctl ); } static void speex_uwb_mode_free (const SpeexMode * mode) { sb_uwb_mode_free (mode->mode); speex_free ((void *)mode); } const SpeexMode * speex_mode_new (int modeID) { switch (modeID) { case 0: return speex_nb_mode_new(); break; case 1: return speex_wb_mode_new(); break; case 2: return speex_uwb_mode_new(); break; default: return NULL; } } void speex_mode_destroy (const SpeexMode * mode) { switch (mode->modeID) { case 0: speex_nb_mode_free(mode); break; case 1: speex_wb_mode_free(mode); break; case 2: speex_uwb_mode_free(mode); break; default: break; } } /** XXX: This is just a dummy global mode, as used by nb_celp.c */ const SpeexMode speex_wb_mode = { NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; int speex_mode_query(const SpeexMode *mode, int request, void *ptr) { if (mode == &speex_wb_mode && request == SPEEX_SUBMODE_BITS_PER_FRAME) { int * p = (int*)ptr; switch (*p) { case 0: *p = SB_SUBMODE_BITS+1; break; case 1: *p = 36; break; case 2: *p = 112; break; case 3: *p = 192; break; case 4: *p = 352; break; default: *p = -1; break; } return 0; } return mode->query(mode->mode, request, ptr); } h323plus/plugins/audio/Speex/libspeex/exc_8_128_table.c0000644000175000017500000001162011341106241021474 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin File: exc_8_128_table.c Codebook for excitation in narrowband CELP mode (7000 bps) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ const signed char exc_8_128_table[1024] = { -14,9,13,-32,2,-10,31,-10, -8,-8,6,-4,-1,10,-64,23, 6,20,13,6,8,-22,16,34, 7,42,-49,-28,5,26,4,-15, 41,34,41,32,33,24,23,14, 8,40,34,4,-24,-41,-19,-15, 13,-13,33,-54,24,27,-44,33, 27,-15,-15,24,-19,14,-36,14, -9,24,-12,-4,37,-5,16,-34, 5,10,33,-15,-54,-16,12,25, 12,1,2,0,3,-1,-4,-4, 11,2,-56,54,27,-20,13,-6, -46,-41,-33,-11,-5,7,12,14, -14,-5,8,20,6,3,4,-8, -5,-42,11,8,-14,25,-2,2, 13,11,-22,39,-9,9,5,-45, -9,7,-9,12,-7,34,-17,-102, 7,2,-42,18,35,-9,-34,11, -5,-2,3,22,46,-52,-25,-9, -94,8,11,-5,-5,-5,4,-7, -35,-7,54,5,-32,3,24,-9, -22,8,65,37,-1,-12,-23,-6, -9,-28,55,-33,14,-3,2,18, -60,41,-17,8,-16,17,-11,0, -11,29,-28,37,9,-53,33,-14, -9,7,-25,-7,-11,26,-32,-8, 24,-21,22,-19,19,-10,29,-14, 0,0,0,0,0,0,0,0, -5,-52,10,41,6,-30,-4,16, 32,22,-27,-22,32,-3,-28,-3, 3,-35,6,17,23,21,8,2, 4,-45,-17,14,23,-4,-31,-11, -3,14,1,19,-11,2,61,-8, 9,-12,7,-10,12,-3,-24,99, -48,23,50,-37,-5,-23,0,8, -14,35,-64,-5,46,-25,13,-1, -49,-19,-15,9,34,50,25,11, -6,-9,-16,-20,-32,-33,-32,-27, 10,-8,12,-15,56,-14,-32,33, 3,-9,1,65,-9,-9,-10,-2, -6,-23,9,17,3,-28,13,-32, 4,-2,-10,4,-16,76,12,-52, 6,13,33,-6,4,-14,-9,-3, 1,-15,-16,28,1,-15,11,16, 9,4,-21,-37,-40,-6,22,12, -15,-23,-14,-17,-16,-9,-10,-9, 13,-39,41,5,-9,16,-38,25, 46,-47,4,49,-14,17,-2,6, 18,5,-6,-33,-22,44,50,-2, 1,3,-6,7,7,-3,-21,38, -18,34,-14,-41,60,-13,6,16, -24,35,19,-13,-36,24,3,-17, -14,-10,36,44,-44,-29,-3,3, -54,-8,12,55,26,4,-2,-5, 2,-11,22,-23,2,22,1,-25, -39,66,-49,21,-8,-2,10,-14, -60,25,6,10,27,-25,16,5, -2,-9,26,-13,-20,58,-2,7, 52,-9,2,5,-4,-15,23,-1, -38,23,8,27,-6,0,-27,-7, 39,-10,-14,26,11,-45,-12,9, -5,34,4,-35,10,43,-22,-11, 56,-7,20,1,10,1,-26,9, 94,11,-27,-14,-13,1,-11,0, 14,-5,-6,-10,-4,-15,-8,-41, 21,-5,1,-28,-8,22,-9,33, -23,-4,-4,-12,39,4,-7,3, -60,80,8,-17,2,-6,12,-5, 1,9,15,27,31,30,27,23, 61,47,26,10,-5,-8,-12,-13, 5,-18,25,-15,-4,-15,-11,12, -2,-2,-16,-2,-6,24,12,11, -4,9,1,-9,14,-45,57,12, 20,-35,26,11,-64,32,-10,-10, 42,-4,-9,-16,32,24,7,10, 52,-11,-57,29,0,8,0,-6, 17,-17,-56,-40,7,20,18,12, -6,16,5,7,-1,9,1,10, 29,12,16,13,-2,23,7,9, -3,-4,-5,18,-64,13,55,-25, 9,-9,24,14,-25,15,-11,-40, -30,37,1,-19,22,-5,-31,13, -2,0,7,-4,16,-67,12,66, -36,24,-8,18,-15,-23,19,0, -45,-7,4,3,-13,13,35,5, 13,33,10,27,23,0,-7,-11, 43,-74,36,-12,2,5,-8,6, -33,11,-16,-14,-5,-7,-3,17, -34,27,-16,11,-9,15,33,-31, 8,-16,7,-6,-7,63,-55,-17, 11,-1,20,-46,34,-30,6,9, 19,28,-9,5,-24,-8,-23,-2, 31,-19,-16,-5,-15,-18,0,26, 18,37,-5,-15,-2,17,5,-27, 21,-33,44,12,-27,-9,17,11, 25,-21,-31,-7,13,33,-8,-25, -7,7,-10,4,-6,-9,48,-82, -23,-8,6,11,-23,3,-3,49, -29,25,31,4,14,16,9,-4, -18,10,-26,3,5,-44,-9,9, -47,-55,15,9,28,1,4,-3, 46,6,-6,-38,-29,-31,-15,-6, 3,0,14,-6,8,-54,-50,33, -5,1,-14,33,-48,26,-4,-5, -3,-5,-3,-5,-28,-22,77,55, -1,2,10,10,-9,-14,-66,-49, 11,-36,-6,-20,10,-10,16,12, 4,-1,-16,45,-44,-50,31,-2, 25,42,23,-32,-22,0,11,20, -40,-35,-40,-36,-32,-26,-21,-13, 52,-22,6,-24,-20,17,-5,-8, 36,-25,-11,21,-26,6,34,-8, 7,20,-3,5,-25,-8,18,-5, -9,-4,1,-9,20,20,39,48, -24,9,5,-65,22,29,4,3, -43,-11,32,-6,9,19,-27,-10, -47,-14,24,10,-7,-36,-7,-1, -4,-5,-5,16,53,25,-26,-29, -4,-12,45,-58,-34,33,-5,2, -1,27,-48,31,-15,22,-5,4, 7,7,-25,-3,11,-22,16,-12, 8,-3,7,-11,45,14,-73,-19, 56,-46,24,-20,28,-12,-2,-1, -36,-3,-33,19,-6,7,2,-15, 5,-31,-45,8,35,13,20,0, -9,48,-13,-43,-3,-13,2,-5, 72,-68,-27,2,1,-2,-7,5, 36,33,-40,-12,-4,-5,23,19}; h323plus/plugins/audio/Speex/libspeex/filters.h0000644000175000017500000000735011341106241020407 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin */ /** @file filters.h @brief Various analysis/synthesis filters */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef FILTERS_H #define FILTERS_H #include "misc.h" spx_word16_t compute_rms(const spx_sig_t *x, int len); void signal_mul(const spx_sig_t *x, spx_sig_t *y, spx_word32_t scale, int len); void signal_div(const spx_sig_t *x, spx_sig_t *y, spx_word32_t scale, int len); #ifdef FIXED_POINT int normalize16(const spx_sig_t *x, spx_word16_t *y, spx_sig_t max_scale, int len); #endif /** Combined filter memory. */ typedef struct { int last_pitch; spx_word16_t last_pitch_gain[3]; spx_word16_t smooth_gain; } CombFilterMem; void qmf_decomp(const spx_word16_t *xx, const spx_word16_t *aa, spx_sig_t *, spx_sig_t *y2, int N, int M, spx_word16_t *mem, char *stack); void fir_mem_up(const spx_sig_t *x, const spx_word16_t *a, spx_sig_t *y, int N, int M, spx_word32_t *mem, char *stack); void filter_mem2(const spx_sig_t *x, const spx_coef_t *num, const spx_coef_t *den, spx_sig_t *y, int N, int ord, spx_mem_t *mem); void fir_mem2(const spx_sig_t *x, const spx_coef_t *num, spx_sig_t *y, int N, int ord, spx_mem_t *mem); void iir_mem2(const spx_sig_t *x, const spx_coef_t *den, spx_sig_t *y, int N, int ord, spx_mem_t *mem); /* Apply bandwidth expansion on LPC coef */ void bw_lpc(spx_word16_t , const spx_coef_t *lpc_in, spx_coef_t *lpc_out, int order); void syn_percep_zero(const spx_sig_t *x, const spx_coef_t *ak, const spx_coef_t *awk1, const spx_coef_t *awk2, spx_sig_t *y, int N, int ord, char *stack); void residue_percep_zero(const spx_sig_t *xx, const spx_coef_t *ak, const spx_coef_t *awk1, const spx_coef_t *awk2, spx_sig_t *y, int N, int ord, char *stack); void compute_impulse_response(const spx_coef_t *ak, const spx_coef_t *awk1, const spx_coef_t *awk2, spx_word16_t *y, int N, int ord, char *stack); void comb_filter_mem_init (CombFilterMem *mem); void comb_filter( spx_sig_t *exc, /*decoded excitation*/ spx_sig_t *new_exc, /*enhanced excitation*/ spx_coef_t *ak, /*LPC filter coefs*/ int p, /*LPC order*/ int nsf, /*sub-frame size*/ int pitch, /*pitch period*/ spx_word16_t *pitch_gain, /*pitch gain (3-tap)*/ spx_word16_t comb_gain, /*gain of comb filter*/ CombFilterMem *mem ); #endif h323plus/plugins/audio/Speex/libspeex/medfilter.h0000644000175000017500000000355311341106241020713 0ustar markmark/* Copyright (C) 2004 Jean-Marc Valin */ /** @file medfilter.h @brief Median filter */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef MEDFILTER_H #define MEDFILTER_H /** Median filter. */ typedef struct { int N; int filled; int *ids; float *val; } MedianFilter; MedianFilter *median_filter_new(int N); void median_filter_update(MedianFilter *f, float val); float median_filter_get(MedianFilter *f); #endif h323plus/plugins/audio/Speex/libspeex/filters_bfin.h0000644000175000017500000003274111341106241021407 0ustar markmark/* Copyright (C) 2005 Analog Devices */ /** @file filters_bfin.h @brief Various analysis/synthesis filters (Blackfin version) */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #define OVERRIDE_NORMALIZE16 int normalize16(const spx_sig_t *x, spx_word16_t *y, spx_sig_t max_scale, int len) { spx_sig_t max_val=1; int sig_shift; __asm__ ( "%0 = 0;\n\t" "I0 = %1;\n\t" "L0 = 0;\n\t" "R1 = [I0++];\n\t" "LOOP norm_max%= LC0 = %2;\n\t" "LOOP_BEGIN norm_max%=;\n\t" "R2 = ABS R1 || R1 = [I0++];\n\t" "%0 = MAX(%0, R2);\n\t" "LOOP_END norm_max%=;\n\t" : "=&d" (max_val) : "a" (x), "a" (len) : "R1", "R2" ); sig_shift=0; while (max_val>max_scale) { sig_shift++; max_val >>= 1; } __asm__ __volatile__ ( "I0 = %0;\n\t" "L0 = 0;\n\t" "I1 = %1;\n\t" "L1 = 0;\n\t" "R0 = [I0++];\n\t" "LOOP norm_shift%= LC0 = %3 >> 1;\n\t" "LOOP_BEGIN norm_shift%=;\n\t" "R1 = ASHIFT R0 by %2.L || R2 = [I0++];\n\t" "R3 = ASHIFT R2 by %2.L || R0 = [I0++];\n\t" "R3 = PACK(R3.L, R1.L);\n\t" "[I1++] = R3;\n\t" "LOOP_END norm_shift%=;\n\t" : : "a" (x), "a" (y), "d" (-sig_shift), "a" (len) : "I0", "L0", "I1", "L1", "R0", "R1", "R2", "R3", "memory" ); return sig_shift; } #define OVERRIDE_FILTER_MEM2 void filter_mem2(const spx_sig_t *_x, const spx_coef_t *num, const spx_coef_t *den, spx_sig_t *_y, int N, int ord, spx_mem_t *mem) { spx_word32_t xy2[N+1]; spx_word32_t *xy = xy2+1; spx_word32_t numden_a[2*ord+2]; spx_word16_t *numden = (spx_word16_t*) numden_a; int i; for (i=0;i>> 13;\n\t" "W[%0] = R3.L;\n\t" "R0 <<= 1;\n\t" "R1 = R1 + R0;\n\t" "R1 >>>= 13;\n\t" "W[%1] = R1.L;\n\t" "LOOP_END samples%=;\n\t" : "=a" (ytmp2), "=a" (y) : "a" (awk2), "a" (ak), "d" (ord), "m" (N), "0" (ytmp2), "1" (y) : "A0", "A1", "R0", "R1", "R2", "R3", "I0", "I1", "I2", "I3", "L0", "L1", "L2", "L3", "A0", "A1" ); } #if 0 /* Equivalent C function for filter_mem2 and compute_impulse_response */ #define min(a,b) ((a)<(b) ? (a):(b)) void compute_impulse_response(const spx_coef_t *ak, const spx_coef_t *awk1, const spx_coef_t *awk2, spx_word16_t *y, int N, int ord, char *stack) { int i,j; VARDECL(spx_word16_t *ytmp); ALLOC(ytmp, N, spx_word16_t); y[0] = LPC_SCALING; for (i=0;i typedef _G_int64_t spx_int64_t; typedef _G_int32_t spx_int32_t; typedef _G_uint32_t spx_uint32_t; typedef _G_int16_t spx_int16_t; typedef _G_uint16_t spx_uint16_t; # elif defined(__MINGW32__) typedef short spx_int16_t; typedef unsigned short spx_uint16_t; typedef int spx_int32_t; typedef unsigned int spx_uint32_t; typedef long long spx_int64_t; typedef unsigned long long spx_uint64_t; # elif defined(__MWERKS__) typedef long long spx_int64_t; typedef int spx_int32_t; typedef unsigned int spx_uint32_t; typedef short spx_int16_t; typedef unsigned short spx_uint16_t; # else /* MSVC/Borland */ typedef __int64 spx_int64_t; typedef __int32 spx_int32_t; typedef unsigned __int32 spx_uint32_t; typedef __int16 spx_int16_t; typedef unsigned __int16 spx_uint16_t; # endif #elif defined(__MACOS__) # include typedef SInt16 spx_int16_t; typedef UInt16 spx_uint16_t; typedef SInt32 spx_int32_t; typedef UInt32 spx_uint32_t; typedef SInt64 spx_int64_t; #elif defined(__MACOSX__) /* MacOS X Framework build */ # include typedef int16_t spx_int16_t; typedef u_int16_t spx_uint16_t; typedef int32_t spx_int32_t; typedef u_int32_t spx_uint32_t; typedef int64_t spx_int64_t; #elif defined(__BEOS__) /* Be */ # include typedef int16_t spx_int16_t; typedef u_int16_t spx_uint16_t; typedef int32_t spx_int32_t; typedef u_int32_t spx_uint32_t; typedef int64_t spx_int64_t; #elif defined (__EMX__) /* OS/2 GCC */ typedef short spx_int16_t; typedef unsigned short spx_uint16_t; typedef int spx_int32_t; typedef unsigned int spx_uint32_t; typedef long long spx_int64_t; #elif defined (DJGPP) /* DJGPP */ typedef short spx_int16_t; typedef int spx_int32_t; typedef unsigned int spx_uint32_t; typedef long long spx_int64_t; #elif defined(R5900) /* PS2 EE */ typedef long spx_int64_t; typedef int spx_int32_t; typedef unsigned spx_uint32_t; typedef short spx_int16_t; #elif defined(__SYMBIAN32__) /* Symbian GCC */ typedef signed short spx_int16_t; typedef unsigned short spx_uint16_t; typedef signed int spx_int32_t; typedef unsigned int spx_uint32_t; typedef long long int spx_int64_t; #elif defined(CONFIG_TI_C54X) || defined (CONFIG_TI_C55X) typedef short spx_int16_t; typedef unsigned short spx_uint16_t; typedef long spx_int32_t; typedef unsigned long spx_uint32_t; #elif defined(CONFIG_TI_C5X) typedef short spx_int16_t; typedef unsigned short spx_uint16_t; typedef int spx_int32_t; typedef unsigned int spx_uint32_t; #else # include "speex_config_types.h" #endif #endif /* _SPEEX_TYPES_H */ h323plus/plugins/audio/Speex/libspeex/vq.h0000644000175000017500000000477511341106241017375 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin */ /** @file vq.h @brief Vector quantization */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef VQ_H #define VQ_H #include "misc.h" int scal_quant(spx_word16_t in, const spx_word16_t *boundary, int entries); int scal_quant32(spx_word32_t in, const spx_word32_t *boundary, int entries); int vq_index(float *in, const float *codebook, int len, int entries); #ifdef _USE_SSE #include void vq_nbest(spx_word16_t *in, const __m128 *codebook, int len, int entries, __m128 *E, int N, int *nbest, spx_word32_t *best_dist, char *stack); void vq_nbest_sign(spx_word16_t *in, const __m128 *codebook, int len, int entries, __m128 *E, int N, int *nbest, spx_word32_t *best_dist, char *stack); #else void vq_nbest(spx_word16_t *in, const spx_word16_t *codebook, int len, int entries, spx_word32_t *E, int N, int *nbest, spx_word32_t *best_dist, char *stack); void vq_nbest_sign(spx_word16_t *in, const spx_word16_t *codebook, int len, int entries, spx_word32_t *E, int N, int *nbest, spx_word32_t *best_dist, char *stack); #endif #endif h323plus/plugins/audio/Speex/libspeex/speex_preprocess.c0000644000175000017500000006765411341106241022340 0ustar markmark/* Copyright (C) 2003 Epic Games Written by Jean-Marc Valin File: preprocess.c Preprocessor with denoising based on the algorithm by Ephraim and Malah Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef _WIN32 #pragma warning(disable:4100) #pragma warning(disable:4244) #pragma warning(disable:4305) #endif #include #include "speex_preprocess.h" #include "misc.h" #include "smallft.h" #define max(a,b) ((a) > (b) ? (a) : (b)) #define min(a,b) ((a) < (b) ? (a) : (b)) #ifndef M_PI #define M_PI 3.14159263 #endif #define SQRT_M_PI_2 0.88623 #define LOUDNESS_EXP 2.5 #define NB_BANDS 8 #define SPEEX_PROB_START_DEFAULT 0.35f #define SPEEX_PROB_CONTINUE_DEFAULT 0.20f #define ZMIN .1 #define ZMAX .316 #define ZMIN_1 10 #define LOG_MIN_MAX_1 0.86859 static void conj_window(float *w, int len) { int i; for (i=0;i9.5) return 1+.1296/x; integer = floor(2*x); frac = 2*x-integer; ind = (int)integer; return ((1-frac)*table[ind] + frac*table[ind+1])/sqrt(x+.0001f); } static float qcurve(float x) { return 1.f/(1.f+.1f/(x*x)); } SpeexPreprocessState *speex_preprocess_state_init(int frame_size, int sampling_rate) { int i; int N, N3, N4; SpeexPreprocessState *st = (SpeexPreprocessState *)speex_alloc(sizeof(SpeexPreprocessState)); st->frame_size = frame_size; /* Round ps_size down to the nearest power of two */ #if 0 i=1; st->ps_size = st->frame_size; while(1) { if (st->ps_size & ~i) { st->ps_size &= ~i; i<<=1; } else { break; } } if (st->ps_size < 3*st->frame_size/4) st->ps_size = st->ps_size * 3 / 2; #else st->ps_size = st->frame_size; #endif N = st->ps_size; N3 = 2*N - st->frame_size; N4 = st->frame_size - N3; st->sampling_rate = sampling_rate; st->denoise_enabled = 1; st->agc_enabled = 0; st->agc_level = 8000; st->vad_enabled = 0; st->dereverb_enabled = 0; st->reverb_decay = .5; st->reverb_level = .2; st->speech_prob_start = SPEEX_PROB_START_DEFAULT; st->speech_prob_continue = SPEEX_PROB_CONTINUE_DEFAULT; st->frame = (float*)speex_alloc(2*N*sizeof(float)); st->ps = (float*)speex_alloc(N*sizeof(float)); st->gain2 = (float*)speex_alloc(N*sizeof(float)); st->window = (float*)speex_alloc(2*N*sizeof(float)); st->noise = (float*)speex_alloc(N*sizeof(float)); st->reverb_estimate = (float*)speex_alloc(N*sizeof(float)); st->old_ps = (float*)speex_alloc(N*sizeof(float)); st->gain = (float*)speex_alloc(N*sizeof(float)); st->prior = (float*)speex_alloc(N*sizeof(float)); st->post = (float*)speex_alloc(N*sizeof(float)); st->loudness_weight = (float*)speex_alloc(N*sizeof(float)); st->inbuf = (float*)speex_alloc(N3*sizeof(float)); st->outbuf = (float*)speex_alloc(N3*sizeof(float)); st->echo_noise = (float*)speex_alloc(N*sizeof(float)); st->S = (float*)speex_alloc(N*sizeof(float)); st->Smin = (float*)speex_alloc(N*sizeof(float)); st->Stmp = (float*)speex_alloc(N*sizeof(float)); st->update_prob = (float*)speex_alloc(N*sizeof(float)); st->zeta = (float*)speex_alloc(N*sizeof(float)); st->Zpeak = 0; st->Zlast = 0; st->noise_bands = (float*)speex_alloc(NB_BANDS*sizeof(float)); st->noise_bands2 = (float*)speex_alloc(NB_BANDS*sizeof(float)); st->speech_bands = (float*)speex_alloc(NB_BANDS*sizeof(float)); st->speech_bands2 = (float*)speex_alloc(NB_BANDS*sizeof(float)); st->noise_bandsN = st->speech_bandsN = 1; conj_window(st->window, 2*N3); for (i=2*N3;i<2*st->ps_size;i++) st->window[i]=1; if (N4>0) { for (i=N3-1;i>=0;i--) { st->window[i+N3+N4]=st->window[i+N3]; st->window[i+N3]=1; } } for (i=0;inoise[i]=1e4; st->reverb_estimate[i]=0.; st->old_ps[i]=1e4; st->gain[i]=1; st->post[i]=1; st->prior[i]=1; } for (i=0;iinbuf[i]=0; st->outbuf[i]=0; } for (i=0;iloudness_weight[i] = .35f-.35f*ff/16000.f+.73f*exp(-.5f*(ff-3800)*(ff-3800)/9e5f); if (st->loudness_weight[i]<.01f) st->loudness_weight[i]=.01f; st->loudness_weight[i] *= st->loudness_weight[i]; } st->speech_prob = 0; st->last_speech = 1000; st->loudness = pow(6000,LOUDNESS_EXP); st->loudness2 = 6000; st->nb_loudness_adapt = 0; st->fft_lookup = (struct drft_lookup*)speex_alloc(sizeof(struct drft_lookup)); spx_drft_init(st->fft_lookup,2*N); st->nb_adapt=0; st->consec_noise=0; st->nb_preprocess=0; return st; } void speex_preprocess_state_destroy(SpeexPreprocessState *st) { speex_free(st->frame); speex_free(st->ps); speex_free(st->gain2); speex_free(st->window); speex_free(st->noise); speex_free(st->reverb_estimate); speex_free(st->old_ps); speex_free(st->gain); speex_free(st->prior); speex_free(st->post); speex_free(st->loudness_weight); speex_free(st->echo_noise); speex_free(st->S); speex_free(st->Smin); speex_free(st->Stmp); speex_free(st->update_prob); speex_free(st->zeta); speex_free(st->noise_bands); speex_free(st->noise_bands2); speex_free(st->speech_bands); speex_free(st->speech_bands2); speex_free(st->inbuf); speex_free(st->outbuf); spx_drft_clear(st->fft_lookup); speex_free(st->fft_lookup); speex_free(st); } static void update_noise(SpeexPreprocessState *st, float *ps, spx_int32_t *echo) { int i; float beta; st->nb_adapt++; beta=1.0f/st->nb_adapt; if (beta < .05f) beta=.05f; if (!echo) { for (i=0;ips_size;i++) st->noise[i] = (1.f-beta)*st->noise[i] + beta*ps[i]; } else { for (i=0;ips_size;i++) st->noise[i] = (1.f-beta)*st->noise[i] + beta*max(1.f,ps[i]-st->frame_size*st->frame_size*4.0*echo[i]); #if 0 for (i=0;ips_size;i++) st->noise[i] = 0; #endif } } static int speex_compute_vad(SpeexPreprocessState *st, float *ps, float mean_prior, float mean_post) { int i, is_speech=0; int N = st->ps_size; float scale=.5f/N; /* FIXME: Clean this up a bit */ { float bands[NB_BANDS]; int j; float p0, p1; float tot_loudness=0; float x = sqrt(mean_post); for (i=5;ips[i] * st->loudness_weight[i]; } for (i=0;ispeech_prob + .01*(1-st->speech_prob); p1 *= .01*st->speech_prob + .99*(1-st->speech_prob); st->speech_prob = p0/(p1+p0); */ if (st->noise_bandsN < 50 || st->speech_bandsN < 50) { if (mean_post > 5.f) { float adapt = 1./st->speech_bandsN++; if (adapt<.005f) adapt = .005f; for (i=0;ispeech_bands[i] = (1.f-adapt)*st->speech_bands[i] + adapt*bands[i]; /*st->speech_bands2[i] = (1-adapt)*st->speech_bands2[i] + adapt*bands[i]*bands[i];*/ st->speech_bands2[i] = (1.f-adapt)*st->speech_bands2[i] + adapt*(bands[i]-st->speech_bands[i])*(bands[i]-st->speech_bands[i]); } } else { float adapt = 1./st->noise_bandsN++; if (adapt<.005f) adapt = .005f; for (i=0;inoise_bands[i] = (1.f-adapt)*st->noise_bands[i] + adapt*bands[i]; /*st->noise_bands2[i] = (1-adapt)*st->noise_bands2[i] + adapt*bands[i]*bands[i];*/ st->noise_bands2[i] = (1.f-adapt)*st->noise_bands2[i] + adapt*(bands[i]-st->noise_bands[i])*(bands[i]-st->noise_bands[i]); } } } p0=p1=1; for (i=0;inoise_bands2[i] - st->noise_bands[i]*st->noise_bands[i]; speech_var = 1.01*st->speech_bands2[i] - st->speech_bands[i]*st->speech_bands[i];*/ noise_var = st->noise_bands2[i]; speech_var = st->speech_bands2[i]; if (noise_var < .1f) noise_var = .1f; if (speech_var < .1f) speech_var = .1f; /*speech_var = sqrt(speech_var*noise_var); noise_var = speech_var;*/ if (speech_var < .05f*speech_var) noise_var = .05f*speech_var; if (speech_var < .05f*noise_var) speech_var = .05f*noise_var; if (bands[i] < st->noise_bands[i]) speech_var = noise_var; if (bands[i] > st->speech_bands[i]) noise_var = speech_var; speech_mean = st->speech_bands[i]; noise_mean = st->noise_bands[i]; if (noise_mean < speech_mean - 5.f) noise_mean = speech_mean - 5.f; tmp1 = exp(-.5f*(bands[i]-speech_mean)*(bands[i]-speech_mean)/speech_var)/sqrt(2.f*M_PI*speech_var); tmp2 = exp(-.5f*(bands[i]-noise_mean)*(bands[i]-noise_mean)/noise_var)/sqrt(2.f*M_PI*noise_var); /*fprintf (stderr, "%f ", (float)(p0/(.01+p0+p1)));*/ /*fprintf (stderr, "%f ", (float)(bands[i]));*/ pr = tmp1/(1e-25+tmp1+tmp2); /*if (bands[i] < st->noise_bands[i]) pr=.01; if (bands[i] > st->speech_bands[i] && pr < .995) pr=.995;*/ if (pr>.999f) pr=.999f; if (pr<.001f) pr=.001f; /*fprintf (stderr, "%f ", pr);*/ p0 *= pr; p1 *= (1-pr); } p0 = pow(p0,.2); p1 = pow(p1,.2); #if 1 p0 *= 2.f; p0=p0/(p1+p0); if (st->last_speech>20) { float tmp = sqrt(tot_loudness)/st->loudness2; tmp = 1.f-exp(-10.f*tmp); if (p0>tmp) p0=tmp; } p1=1-p0; #else if (sqrt(tot_loudness) < .6f*st->loudness2 && p0>15.f*p1) p0=15.f*p1; if (sqrt(tot_loudness) < .45f*st->loudness2 && p0>7.f*p1) p0=7.f*p1; if (sqrt(tot_loudness) < .3f*st->loudness2 && p0>3.f*p1) p0=3.f*p1; if (sqrt(tot_loudness) < .15f*st->loudness2 && p0>p1) p0=p1; /*fprintf (stderr, "%f %f ", (float)(sqrt(tot_loudness) /( .25*st->loudness2)), p0/(p1+p0));*/ #endif p0 *= .99f*st->speech_prob + .01f*(1-st->speech_prob); p1 *= .01f*st->speech_prob + .99f*(1-st->speech_prob); st->speech_prob = p0/(1e-25f+p1+p0); /*fprintf (stderr, "%f %f %f ", tot_loudness, st->loudness2, st->speech_prob);*/ if (st->speech_prob > st->speech_prob_start || (st->last_speech < 20 && st->speech_prob > st->speech_prob_continue)) { is_speech = 1; st->last_speech = 0; } else { st->last_speech++; if (st->last_speech<20) is_speech = 1; } if (st->noise_bandsN > 50 && st->speech_bandsN > 50) { if (mean_post > 5) { float adapt = 1./st->speech_bandsN++; if (adapt<.005f) adapt = .005f; for (i=0;ispeech_bands[i] = (1-adapt)*st->speech_bands[i] + adapt*bands[i]; /*st->speech_bands2[i] = (1-adapt)*st->speech_bands2[i] + adapt*bands[i]*bands[i];*/ st->speech_bands2[i] = (1-adapt)*st->speech_bands2[i] + adapt*(bands[i]-st->speech_bands[i])*(bands[i]-st->speech_bands[i]); } } else { float adapt = 1./st->noise_bandsN++; if (adapt<.005f) adapt = .005f; for (i=0;inoise_bands[i] = (1-adapt)*st->noise_bands[i] + adapt*bands[i]; /*st->noise_bands2[i] = (1-adapt)*st->noise_bands2[i] + adapt*bands[i]*bands[i];*/ st->noise_bands2[i] = (1-adapt)*st->noise_bands2[i] + adapt*(bands[i]-st->noise_bands[i])*(bands[i]-st->noise_bands[i]); } } } } return is_speech; } static void speex_compute_agc(SpeexPreprocessState *st, float mean_prior) { int i; int N = st->ps_size; float scale=.5f/N; float agc_gain; int freq_start, freq_end; float active_bands = 0; freq_start = (int)(300.0f*2*N/st->sampling_rate); freq_end = (int)(2000.0f*2*N/st->sampling_rate); for (i=freq_start;iS[i] > 20.f*st->Smin[i]+1000.f) active_bands+=1; } active_bands /= (freq_end-freq_start+1); if (active_bands > .2f) { float loudness=0.f; float rate, rate2=.2f; st->nb_loudness_adapt++; rate=2.0f/(1+st->nb_loudness_adapt); if (rate < .05f) rate = .05f; if (rate < .1f && pow(loudness, LOUDNESS_EXP) > st->loudness) rate = .1f; if (rate < .2f && pow(loudness, LOUDNESS_EXP) > 3.f*st->loudness) rate = .2f; if (rate < .4f && pow(loudness, LOUDNESS_EXP) > 10.f*st->loudness) rate = .4f; for (i=2;ips[i] * st->gain2[i] * st->gain2[i] * st->loudness_weight[i]; } loudness=sqrt(loudness); /*if (loudness < 2*pow(st->loudness, 1.0/LOUDNESS_EXP) && loudness*2 > pow(st->loudness, 1.0/LOUDNESS_EXP))*/ st->loudness = (1-rate)*st->loudness + (rate)*pow(loudness, LOUDNESS_EXP); st->loudness2 = (1-rate2)*st->loudness2 + rate2*pow(st->loudness, 1.0f/LOUDNESS_EXP); loudness = pow(st->loudness, 1.0f/LOUDNESS_EXP); /*fprintf (stderr, "%f %f %f\n", loudness, st->loudness2, rate);*/ } agc_gain = st->agc_level/st->loudness2; /*fprintf (stderr, "%f %f %f %f\n", active_bands, st->loudness, st->loudness2, agc_gain);*/ if (agc_gain>200) agc_gain = 200; for (i=0;igain2[i] *= agc_gain; } static void preprocess_analysis(SpeexPreprocessState *st, spx_int16_t *x) { int i; int N = st->ps_size; int N3 = 2*N - st->frame_size; int N4 = st->frame_size - N3; float *ps=st->ps; /* 'Build' input frame */ for (i=0;iframe[i]=st->inbuf[i]; for (i=0;iframe_size;i++) st->frame[N3+i]=x[i]; /* Update inbuf */ for (i=0;iinbuf[i]=x[N4+i]; /* Windowing */ for (i=0;i<2*N;i++) st->frame[i] *= st->window[i]; /* Perform FFT */ spx_drft_forward(st->fft_lookup, st->frame); /* Power spectrum */ ps[0]=1; for (i=1;iframe[2*i-1]*st->frame[2*i-1] + st->frame[2*i]*st->frame[2*i]; } static void update_noise_prob(SpeexPreprocessState *st) { int i; int N = st->ps_size; for (i=1;iS[i] = 100.f+ .8f*st->S[i] + .05f*st->ps[i-1]+.1f*st->ps[i]+.05f*st->ps[i+1]; if (st->nb_preprocess<1) { for (i=1;iSmin[i] = st->Stmp[i] = st->S[i]+100.f; } if (st->nb_preprocess%200==0) { for (i=1;iSmin[i] = min(st->Stmp[i], st->S[i]); st->Stmp[i] = st->S[i]; } } else { for (i=1;iSmin[i] = min(st->Smin[i], st->S[i]); st->Stmp[i] = min(st->Stmp[i], st->S[i]); } } for (i=1;iupdate_prob[i] *= .2f; if (st->S[i] > 2.5*st->Smin[i]) st->update_prob[i] += .8f; /*fprintf (stderr, "%f ", st->S[i]/st->Smin[i]);*/ /*fprintf (stderr, "%f ", st->update_prob[i]);*/ } } #define NOISE_OVERCOMPENS 1.4 int speex_preprocess(SpeexPreprocessState *st, spx_int16_t *x, spx_int32_t *echo) { int i; int is_speech=1; float mean_post=0; float mean_prior=0; int N = st->ps_size; int N3 = 2*N - st->frame_size; int N4 = st->frame_size - N3; float scale=.5f/N; float *ps=st->ps; float Zframe=0, Pframe; preprocess_analysis(st, x); update_noise_prob(st); st->nb_preprocess++; /* Noise estimation always updated for the 20 first times */ if (st->nb_adapt<10) { update_noise(st, ps, echo); } /* Deal with residual echo if provided */ if (echo) for (i=1;iecho_noise[i] = (.3f*st->echo_noise[i] + st->frame_size*st->frame_size*4.0*echo[i]); /* Compute a posteriori SNR */ for (i=1;inoise[i] + st->echo_noise[i] + st->reverb_estimate[i]; st->post[i] = ps[i]/tot_noise - 1.f; if (st->post[i]>100.f) st->post[i]=100.f; /*if (st->post[i]<0) st->post[i]=0;*/ mean_post+=st->post[i]; } mean_post /= N; if (mean_post<0.f) mean_post=0.f; /* Special case for first frame */ if (st->nb_adapt==1) for (i=1;iold_ps[i] = ps[i]; /* Compute a priori SNR */ { /* A priori update rate */ for (i=1;iprior[i]*st->prior[i]/((1+st->prior[i])*(1+st->prior[i])); float tot_noise = 1.f+ NOISE_OVERCOMPENS*st->noise[i] + st->echo_noise[i] + st->reverb_estimate[i]; /* A priori SNR update */ st->prior[i] = gamma*max(0.0f,st->post[i]) + (1.f-gamma)* (.8*st->gain[i]*st->gain[i]*st->old_ps[i]/tot_noise + .2*st->prior[i]); if (st->prior[i]>100.f) st->prior[i]=100.f; mean_prior+=st->prior[i]; } } mean_prior /= N; #if 0 for (i=0;iprior[i]); } fprintf (stderr, "\n"); #endif /*fprintf (stderr, "%f %f\n", mean_prior,mean_post);*/ if (st->nb_preprocess>=20) { int do_update = 0; float noise_ener=0, sig_ener=0; /* If SNR is low (both a priori and a posteriori), update the noise estimate*/ /*if (mean_prior<.23 && mean_post < .5)*/ if (mean_prior<.23f && mean_post < .5f) do_update = 1; for (i=1;inoise[i]; sig_ener += ps[i]; } if (noise_ener > 3.f*sig_ener) do_update = 1; /*do_update = 0;*/ if (do_update) { st->consec_noise++; } else { st->consec_noise=0; } } if (st->vad_enabled) is_speech = speex_compute_vad(st, ps, mean_prior, mean_post); if (st->consec_noise>=3) { update_noise(st, st->old_ps, echo); } else { for (i=1;iupdate_prob[i]<.5f/* || st->ps[i] < st->noise[i]*/) { if (echo) st->noise[i] = .95f*st->noise[i] + .05f*max(1.0f,st->ps[i]-st->frame_size*st->frame_size*4.0*echo[i]); else st->noise[i] = .95f*st->noise[i] + .05f*st->ps[i]; } } } for (i=1;izeta[i] = .7f*st->zeta[i] + .3f*st->prior[i]; } { int freq_start = (int)(300.0f*2.f*N/st->sampling_rate); int freq_end = (int)(2000.0f*2.f*N/st->sampling_rate); for (i=freq_start;izeta[i]; } Zframe /= (freq_end-freq_start); } st->Zlast = Zframe; Pframe = qcurve(Zframe); /*fprintf (stderr, "%f\n", Pframe);*/ /* Compute gain according to the Ephraim-Malah algorithm */ for (i=1;iprior[i]/(1.0001f+st->prior[i]); theta = (1.f+st->post[i])*prior_ratio; if (i==1 || i==N-1) zeta1 = st->zeta[i]; else zeta1 = .25f*st->zeta[i-1] + .5f*st->zeta[i] + .25f*st->zeta[i+1]; P1 = qcurve (zeta1); /* FIXME: add global prob (P2) */ q = 1-Pframe*P1; q = 1-P1; if (q>.95f) q=.95f; p=1.f/(1.f + (q/(1.f-q))*(1.f+st->prior[i])*exp(-theta)); /*p=1;*/ /* Optimal estimator for loudness domain */ MM = hypergeom_gain(theta); st->gain[i] = prior_ratio * MM; /*Put some (very arbitraty) limit on the gain*/ if (st->gain[i]>2.f) { st->gain[i]=2.f; } st->reverb_estimate[i] = st->reverb_decay*st->reverb_estimate[i] + st->reverb_decay*st->reverb_level*st->gain[i]*st->gain[i]*st->ps[i]; if (st->denoise_enabled) { st->gain2[i] = p*p*st->gain[i]; /*st->gain2[i]=(p*sqrt(st->gain[i])+.05*(1-p))*(p*sqrt(st->gain[i])+.05*(1-p));*/ /*st->gain2[i] = pow(st->gain[i], p) * pow(.2f,1.f-p);*/ } else { st->gain2[i]=1.f; } } st->gain2[0]=st->gain[0]=0.f; st->gain2[N-1]=st->gain[N-1]=0.f; /* for (i=30;igain[i] = st->gain2[i]*st->gain2[i] + (1-st->gain2[i])*.333*(.6*st->gain2[i-1]+st->gain2[i]+.6*st->gain2[i+1]+.4*st->gain2[i-2]+.4*st->gain2[i+2]); } for (i=30;igain2[i] = st->gain[i]; */ if (st->agc_enabled) speex_compute_agc(st, mean_prior); #if 0 if (!is_speech) { for (i=0;igain2[i] = 0; } #if 0 else { for (i=0;igain2[i] = 1; } #endif #endif /* Apply computed gain */ for (i=1;iframe[2*i-1] *= st->gain2[i]; st->frame[2*i] *= st->gain2[i]; } /* Get rid of the DC and very low frequencies */ st->frame[0]=0; st->frame[1]=0; st->frame[2]=0; /* Nyquist frequency is mostly useless too */ st->frame[2*N-1]=0; /* Inverse FFT with 1/N scaling */ spx_drft_backward(st->fft_lookup, st->frame); for (i=0;i<2*N;i++) st->frame[i] *= scale; { float max_sample=0; for (i=0;i<2*N;i++) if (fabs(st->frame[i])>max_sample) max_sample = fabs(st->frame[i]); if (max_sample>28000.f) { float damp = 28000.f/max_sample; for (i=0;i<2*N;i++) st->frame[i] *= damp; } } for (i=0;i<2*N;i++) st->frame[i] *= st->window[i]; /* Perform overlap and add */ for (i=0;ioutbuf[i] + st->frame[i]; for (i=0;iframe[N3+i]; /* Update outbuf */ for (i=0;ioutbuf[i] = st->frame[st->frame_size+i]; /* Save old power spectrum */ for (i=1;iold_ps[i] = ps[i]; return is_speech; } void speex_preprocess_estimate_update(SpeexPreprocessState *st, spx_int16_t *x, spx_int32_t *echo) { int i; int N = st->ps_size; int N3 = 2*N - st->frame_size; float *ps=st->ps; preprocess_analysis(st, x); update_noise_prob(st); st->nb_preprocess++; for (i=1;iupdate_prob[i]<.5f || st->ps[i] < st->noise[i]) { if (echo) st->noise[i] = .95f*st->noise[i] + .1f*max(1.0f,st->ps[i]-st->frame_size*st->frame_size*4.0*echo[i]); else st->noise[i] = .95f*st->noise[i] + .1f*st->ps[i]; } } for (i=0;ioutbuf[i] = x[st->frame_size-N3+i]*st->window[st->frame_size+i]; /* Save old power spectrum */ for (i=1;iold_ps[i] = ps[i]; for (i=1;ireverb_estimate[i] *= st->reverb_decay; } int speex_preprocess_ctl(SpeexPreprocessState *state, int request, void *ptr) { int i; SpeexPreprocessState *st; st=(SpeexPreprocessState*)state; switch(request) { case SPEEX_PREPROCESS_SET_DENOISE: st->denoise_enabled = (*(int*)ptr); break; case SPEEX_PREPROCESS_GET_DENOISE: (*(int*)ptr) = st->denoise_enabled; break; case SPEEX_PREPROCESS_SET_AGC: st->agc_enabled = (*(int*)ptr); break; case SPEEX_PREPROCESS_GET_AGC: (*(int*)ptr) = st->agc_enabled; break; case SPEEX_PREPROCESS_SET_AGC_LEVEL: st->agc_level = (*(float*)ptr); if (st->agc_level<1) st->agc_level=1; if (st->agc_level>32768) st->agc_level=32768; break; case SPEEX_PREPROCESS_GET_AGC_LEVEL: (*(float*)ptr) = st->agc_level; break; case SPEEX_PREPROCESS_SET_VAD: st->vad_enabled = (*(int*)ptr); break; case SPEEX_PREPROCESS_GET_VAD: (*(int*)ptr) = st->vad_enabled; break; case SPEEX_PREPROCESS_SET_DEREVERB: st->dereverb_enabled = (*(int*)ptr); for (i=0;ips_size;i++) st->reverb_estimate[i]=0; break; case SPEEX_PREPROCESS_GET_DEREVERB: (*(int*)ptr) = st->dereverb_enabled; break; case SPEEX_PREPROCESS_SET_DEREVERB_LEVEL: st->reverb_level = (*(float*)ptr); break; case SPEEX_PREPROCESS_GET_DEREVERB_LEVEL: (*(float*)ptr) = st->reverb_level; break; case SPEEX_PREPROCESS_SET_DEREVERB_DECAY: st->reverb_decay = (*(float*)ptr); break; case SPEEX_PREPROCESS_GET_DEREVERB_DECAY: (*(float*)ptr) = st->reverb_decay; break; case SPEEX_PREPROCESS_SET_PROB_START: st->speech_prob_start = (*(int*)ptr) / 100.0; if ( st->speech_prob_start > 1 || st->speech_prob_start < 0 ) st->speech_prob_start = SPEEX_PROB_START_DEFAULT; break; case SPEEX_PREPROCESS_GET_PROB_START: (*(int*)ptr) = st->speech_prob_start * 100; break; case SPEEX_PREPROCESS_SET_PROB_CONTINUE: st->speech_prob_continue = (*(int*)ptr) / 100.0; if ( st->speech_prob_continue > 1 || st->speech_prob_continue < 0 ) st->speech_prob_continue = SPEEX_PROB_CONTINUE_DEFAULT; break; case SPEEX_PREPROCESS_GET_PROB_CONTINUE: (*(int*)ptr) = st->speech_prob_continue * 100; break; default: speex_warning_int("Unknown speex_preprocess_ctl request: ", request); return -1; } return 0; } h323plus/plugins/audio/Speex/libspeex/kiss_fftr.h0000644000175000017500000000153211341106241020725 0ustar markmark#ifndef KISS_FTR_H #define KISS_FTR_H #include "kiss_fft.h" #ifdef __cplusplus extern "C" { #endif /* Real optimized version can save about 45% cpu time vs. complex fft of a real seq. */ typedef struct kiss_fftr_state *kiss_fftr_cfg; kiss_fftr_cfg kiss_fftr_alloc(int nfft,int inverse_fft,void * mem, size_t * lenmem); /* nfft must be even If you don't care to allocate space, use mem = lenmem = NULL */ void kiss_fftr(kiss_fftr_cfg cfg,const kiss_fft_scalar *timedata,kiss_fft_cpx *freqdata); /* input timedata has nfft scalar points output freqdata has nfft/2+1 complex points */ void kiss_fftri(kiss_fftr_cfg cfg,const kiss_fft_cpx *freqdata,kiss_fft_scalar *timedata); /* input freqdata has nfft/2+1 complex points output timedata has nfft scalar points */ #define kiss_fftr_free free #ifdef __cplusplus } #endif #endif h323plus/plugins/audio/Speex/libspeex/jitter.c0000644000175000017500000002402411341106241020230 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin File: speex_jitter.h Adaptive jitter buffer for Speex Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifndef NULL #define NULL 0 #endif #include "misc.h" #include "speex.h" #include "speex_bits.h" #include #include #define LATE_BINS 4 void speex_jitter_init(SpeexJitter *jitter, void *decoder, int sampling_rate) { int i; for (i=0;ilen[i]=-1; jitter->timestamp[i]=-1; } jitter->dec = decoder; speex_decoder_ctl(decoder, SPEEX_GET_FRAME_SIZE, &jitter->frame_size); jitter->frame_time = jitter->frame_size; speex_bits_init(&jitter->current_packet); jitter->valid_bits = 0; jitter->buffer_size = 4; jitter->pointer_timestamp = -jitter->frame_time * jitter->buffer_size; jitter->reset_state = 1; jitter->lost_count = 0; jitter->loss_rate = 0; } void speex_jitter_destroy(SpeexJitter *jitter) { speex_bits_destroy(&jitter->current_packet); } void speex_jitter_put(SpeexJitter *jitter, char *packet, int len, int timestamp) { int i,j; int arrival_margin; if (jitter->reset_state) { jitter->reset_state=0; jitter->pointer_timestamp = timestamp-jitter->frame_time * jitter->buffer_size; for (i=0;ishortterm_margin[i] = 0; jitter->longterm_margin[i] = 0; } for (i=0;ilen[i]=-1; jitter->timestamp[i]=-1; } fprintf(stderr, "reset to %d\n", timestamp); } /* Cleanup buffer (remove old packets that weren't played) */ for (i=0;itimestamp[i]pointer_timestamp) { jitter->len[i]=-1; /*if (jitter->timestamp[i] != -1) fprintf (stderr, "discarding %d %d\n", jitter->timestamp[i], jitter->pointer_timestamp);*/ } } /*Find an empty slot in the buffer*/ for (i=0;ilen[i]==-1) break; } /*fprintf(stderr, "%d %d %f\n", timestamp, jitter->pointer_timestamp, jitter->drift_average);*/ if (i==SPEEX_JITTER_MAX_BUFFER_SIZE) { int earliest=jitter->timestamp[0]; i=0; for (j=1;jtimestamp[j]timestamp[j]; i=j; } } /*fprintf (stderr, "Buffer is full, discarding earliest frame %d (currently at %d)\n", timestamp, jitter->pointer_timestamp);*/ /*No place left in the buffer*/ /*skip some frame(s) */ /*return;*/ } /* Copy packet in buffer */ if (len>SPEEX_JITTER_MAX_PACKET_SIZE) len=SPEEX_JITTER_MAX_PACKET_SIZE; for (j=0;jbuf[i][j]=packet[j]; jitter->timestamp[i]=timestamp; jitter->len[i]=len; /* Don't count late packets when adjusting the synchro (we're taking care of them elsewhere) */ /*if (timestamp <= jitter->pointer_timestamp) { fprintf (stderr, "frame for timestamp %d arrived too late (at time %d)\n", timestamp, jitter->pointer_timestamp); }*/ /* Adjust the buffer size depending on network conditions */ arrival_margin = (timestamp - jitter->pointer_timestamp - jitter->frame_time); if (arrival_margin >= -LATE_BINS*jitter->frame_time) { int int_margin; for (i=0;ishortterm_margin[i] *= .98; jitter->longterm_margin[i] *= .995; } int_margin = (arrival_margin + LATE_BINS*jitter->frame_time)/jitter->frame_time; if (int_margin>MAX_MARGIN-1) int_margin = MAX_MARGIN-1; if (int_margin>=0) { jitter->shortterm_margin[int_margin] += .02; jitter->longterm_margin[int_margin] += .005; } } /*fprintf (stderr, "margin : %d %d %f %f %f %f\n", arrival_margin, jitter->buffer_size, 100*jitter->loss_rate, 100*jitter->late_ratio, 100*jitter->ontime_ratio, 100*jitter->early_ratio);*/ } void speex_jitter_get(SpeexJitter *jitter, short *out, int *current_timestamp) { int i; int ret; float late_ratio_short; float late_ratio_long; float ontime_ratio_short; float ontime_ratio_long; float early_ratio_short; float early_ratio_long; late_ratio_short = 0; late_ratio_long = 0; for (i=0;ishortterm_margin[i]; late_ratio_long += jitter->longterm_margin[i]; } ontime_ratio_short = jitter->shortterm_margin[LATE_BINS]; ontime_ratio_long = jitter->longterm_margin[LATE_BINS]; early_ratio_short = early_ratio_long = 0; for (i=LATE_BINS+1;ishortterm_margin[i]; early_ratio_long += jitter->longterm_margin[i]; } if (0&&jitter->pointer_timestamp%1000==0) { fprintf (stderr, "%f %f %f %f %f %f\n", early_ratio_short, early_ratio_long, ontime_ratio_short, ontime_ratio_long, late_ratio_short, late_ratio_long); /*fprintf (stderr, "%f %f\n", early_ratio_short + ontime_ratio_short + late_ratio_short, early_ratio_long + ontime_ratio_long + late_ratio_long);*/ } if (late_ratio_short > .1 || late_ratio_long > .03) { jitter->shortterm_margin[MAX_MARGIN-1] += jitter->shortterm_margin[MAX_MARGIN-2]; jitter->longterm_margin[MAX_MARGIN-1] += jitter->longterm_margin[MAX_MARGIN-2]; for (i=MAX_MARGIN-2;i>=0;i--) { jitter->shortterm_margin[i+1] = jitter->shortterm_margin[i]; jitter->longterm_margin[i+1] = jitter->longterm_margin[i]; } jitter->shortterm_margin[0] = 0; jitter->longterm_margin[0] = 0; /*fprintf (stderr, "interpolate frame\n");*/ speex_decode_int(jitter->dec, NULL, out); if (current_timestamp) *current_timestamp = jitter->pointer_timestamp; return; } /* Increment timestamp */ jitter->pointer_timestamp += jitter->frame_time; if (late_ratio_short + ontime_ratio_short < .005 && late_ratio_long + ontime_ratio_long < .01 && early_ratio_short > .8) { jitter->shortterm_margin[0] += jitter->shortterm_margin[1]; jitter->longterm_margin[0] += jitter->longterm_margin[1]; for (i=1;ishortterm_margin[i] = jitter->shortterm_margin[i+1]; jitter->longterm_margin[i] = jitter->longterm_margin[i+1]; } jitter->shortterm_margin[MAX_MARGIN-1] = 0; jitter->longterm_margin[MAX_MARGIN-1] = 0; /*fprintf (stderr, "drop frame\n");*/ jitter->pointer_timestamp += jitter->frame_time; } if (current_timestamp) *current_timestamp = jitter->pointer_timestamp; /* Send zeros while we fill in the buffer */ if (jitter->pointer_timestamp<0) { for (i=0;iframe_size;i++) out[i]=0; return; } /* Search the buffer for a packet with the right timestamp */ for (i=0;ilen[i]!=-1 && jitter->timestamp[i]==jitter->pointer_timestamp) break; } if (i==SPEEX_JITTER_MAX_BUFFER_SIZE) { /* No packet found */ if (jitter->valid_bits) { /* Try decoding last received packet */ ret = speex_decode_int(jitter->dec, &jitter->current_packet, out); if (ret == 0) { jitter->lost_count = 0; return; } else { jitter->valid_bits = 0; } } /*fprintf (stderr, "lost/late frame %d\n", jitter->pointer_timestamp);*/ /*Packet is late or lost*/ speex_decode_int(jitter->dec, NULL, out); jitter->lost_count++; if (jitter->lost_count>=25) { jitter->lost_count = 0; jitter->reset_state = 1; speex_decoder_ctl(jitter->dec, SPEEX_RESET_STATE, NULL); } jitter->loss_rate = .999*jitter->loss_rate + .001; } else { jitter->lost_count = 0; /* Found the right packet */ speex_bits_read_from(&jitter->current_packet, jitter->buf[i], jitter->len[i]); jitter->len[i]=-1; /* Decode packet */ ret = speex_decode_int(jitter->dec, &jitter->current_packet, out); if (ret == 0) { jitter->valid_bits = 1; } else { /* Error while decoding */ for (i=0;iframe_size;i++) out[i]=0; } jitter->loss_rate = .999*jitter->loss_rate; } } int speex_jitter_get_pointer_timestamp(SpeexJitter *jitter) { return jitter->pointer_timestamp; } h323plus/plugins/audio/Speex/libspeex/kiss_fft.c0000644000175000017500000003077411341106241020550 0ustar markmark/* Copyright (c) 2003-2004, Mark Borgerding All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef _WIN32 #pragma warning(disable:4018) #pragma warning(disable:4127) #pragma warning(disable:4244) #endif #include "_kiss_fft_guts.h" #include "misc.h" /* The guts header contains all the multiplication and addition macros that are defined for fixed or floating point complex numbers. It also delares the kf_ internal functions. */ static kiss_fft_cpx *scratchbuf=NULL; static size_t nscratchbuf=0; static kiss_fft_cpx *tmpbuf=NULL; static size_t ntmpbuf=0; #define CHECKBUF(buf,nbuf,n) \ do { \ if ( nbuf < (size_t)(n) ) {\ free(buf); \ buf = (kiss_fft_cpx*)KISS_FFT_MALLOC(sizeof(kiss_fft_cpx)*(n)); \ nbuf = (size_t)(n); \ } \ }while(0) static void kf_bfly2( kiss_fft_cpx * Fout, const size_t fstride, const kiss_fft_cfg st, int m ) { kiss_fft_cpx * Fout2; kiss_fft_cpx * tw1 = st->twiddles; kiss_fft_cpx t; Fout2 = Fout + m; if (!st->inverse) { int i; kiss_fft_cpx *x=Fout; for (i=0;i<2*m;i++) { x[i].r = SHR(x[i].r,1); x[i].i = SHR(x[i].i,1); } } do{ C_MUL (t, *Fout2 , *tw1); tw1 += fstride; C_SUB( *Fout2 , *Fout , t ); C_ADDTO( *Fout , t ); ++Fout2; ++Fout; }while (--m); } static void kf_bfly4( kiss_fft_cpx * Fout, const size_t fstride, const kiss_fft_cfg st, const size_t m ) { kiss_fft_cpx *tw1,*tw2,*tw3; kiss_fft_cpx scratch[6]; size_t k=m; const size_t m2=2*m; const size_t m3=3*m; tw3 = tw2 = tw1 = st->twiddles; if (!st->inverse) { int i; kiss_fft_cpx *x=Fout; for (i=0;i<4*m;i++) { //C_FIXDIV(x[i],4); x[i].r = PSHR16(x[i].r,2); x[i].i = PSHR16(x[i].i,2); } } if (st->inverse) { do { C_MUL(scratch[0],Fout[m] , *tw1 ); C_MUL(scratch[1],Fout[m2] , *tw2 ); C_MUL(scratch[2],Fout[m3] , *tw3 ); C_SUB( scratch[5] , *Fout, scratch[1] ); C_ADDTO(*Fout, scratch[1]); C_ADD( scratch[3] , scratch[0] , scratch[2] ); C_SUB( scratch[4] , scratch[0] , scratch[2] ); C_SUB( Fout[m2], *Fout, scratch[3] ); tw1 += fstride; tw2 += fstride*2; tw3 += fstride*3; C_ADDTO( *Fout , scratch[3] ); Fout[m].r = scratch[5].r - scratch[4].i; Fout[m].i = scratch[5].i + scratch[4].r; Fout[m3].r = scratch[5].r + scratch[4].i; Fout[m3].i = scratch[5].i - scratch[4].r; ++Fout; } while(--k); } else { do { C_MUL(scratch[0],Fout[m] , *tw1 ); C_MUL(scratch[1],Fout[m2] , *tw2 ); C_MUL(scratch[2],Fout[m3] , *tw3 ); C_SUB( scratch[5] , *Fout, scratch[1] ); C_ADDTO(*Fout, scratch[1]); C_ADD( scratch[3] , scratch[0] , scratch[2] ); C_SUB( scratch[4] , scratch[0] , scratch[2] ); C_SUB( Fout[m2], *Fout, scratch[3] ); tw1 += fstride; tw2 += fstride*2; tw3 += fstride*3; C_ADDTO( *Fout , scratch[3] ); Fout[m].r = scratch[5].r + scratch[4].i; Fout[m].i = scratch[5].i - scratch[4].r; Fout[m3].r = scratch[5].r - scratch[4].i; Fout[m3].i = scratch[5].i + scratch[4].r; ++Fout; }while(--k); } } static void kf_bfly3( kiss_fft_cpx * Fout, const size_t fstride, const kiss_fft_cfg st, size_t m ) { size_t k=m; const size_t m2 = 2*m; kiss_fft_cpx *tw1,*tw2; kiss_fft_cpx scratch[5]; kiss_fft_cpx epi3; epi3 = st->twiddles[fstride*m]; tw1=tw2=st->twiddles; do{ if (!st->inverse) { C_FIXDIV(*Fout,3); C_FIXDIV(Fout[m],3); C_FIXDIV(Fout[m2],3); } C_MUL(scratch[1],Fout[m] , *tw1); C_MUL(scratch[2],Fout[m2] , *tw2); C_ADD(scratch[3],scratch[1],scratch[2]); C_SUB(scratch[0],scratch[1],scratch[2]); tw1 += fstride; tw2 += fstride*2; Fout[m].r = Fout->r - HALF_OF(scratch[3].r); Fout[m].i = Fout->i - HALF_OF(scratch[3].i); C_MULBYSCALAR( scratch[0] , epi3.i ); C_ADDTO(*Fout,scratch[3]); Fout[m2].r = Fout[m].r + scratch[0].i; Fout[m2].i = Fout[m].i - scratch[0].r; Fout[m].r -= scratch[0].i; Fout[m].i += scratch[0].r; ++Fout; }while(--k); } static void kf_bfly5( kiss_fft_cpx * Fout, const size_t fstride, const kiss_fft_cfg st, int m ) { kiss_fft_cpx *Fout0,*Fout1,*Fout2,*Fout3,*Fout4; int u; kiss_fft_cpx scratch[13]; kiss_fft_cpx * twiddles = st->twiddles; kiss_fft_cpx *tw; kiss_fft_cpx ya,yb; ya = twiddles[fstride*m]; yb = twiddles[fstride*2*m]; Fout0=Fout; Fout1=Fout0+m; Fout2=Fout0+2*m; Fout3=Fout0+3*m; Fout4=Fout0+4*m; tw=st->twiddles; for ( u=0; uinverse) { C_FIXDIV( *Fout0,5); C_FIXDIV( *Fout1,5); C_FIXDIV( *Fout2,5); C_FIXDIV( *Fout3,5); C_FIXDIV( *Fout4,5); } scratch[0] = *Fout0; C_MUL(scratch[1] ,*Fout1, tw[u*fstride]); C_MUL(scratch[2] ,*Fout2, tw[2*u*fstride]); C_MUL(scratch[3] ,*Fout3, tw[3*u*fstride]); C_MUL(scratch[4] ,*Fout4, tw[4*u*fstride]); C_ADD( scratch[7],scratch[1],scratch[4]); C_SUB( scratch[10],scratch[1],scratch[4]); C_ADD( scratch[8],scratch[2],scratch[3]); C_SUB( scratch[9],scratch[2],scratch[3]); Fout0->r += scratch[7].r + scratch[8].r; Fout0->i += scratch[7].i + scratch[8].i; scratch[5].r = scratch[0].r + S_MUL(scratch[7].r,ya.r) + S_MUL(scratch[8].r,yb.r); scratch[5].i = scratch[0].i + S_MUL(scratch[7].i,ya.r) + S_MUL(scratch[8].i,yb.r); scratch[6].r = S_MUL(scratch[10].i,ya.i) + S_MUL(scratch[9].i,yb.i); scratch[6].i = -S_MUL(scratch[10].r,ya.i) - S_MUL(scratch[9].r,yb.i); C_SUB(*Fout1,scratch[5],scratch[6]); C_ADD(*Fout4,scratch[5],scratch[6]); scratch[11].r = scratch[0].r + S_MUL(scratch[7].r,yb.r) + S_MUL(scratch[8].r,ya.r); scratch[11].i = scratch[0].i + S_MUL(scratch[7].i,yb.r) + S_MUL(scratch[8].i,ya.r); scratch[12].r = - S_MUL(scratch[10].i,yb.i) + S_MUL(scratch[9].i,ya.i); scratch[12].i = S_MUL(scratch[10].r,yb.i) - S_MUL(scratch[9].r,ya.i); C_ADD(*Fout2,scratch[11],scratch[12]); C_SUB(*Fout3,scratch[11],scratch[12]); ++Fout0;++Fout1;++Fout2;++Fout3;++Fout4; } } /* perform the butterfly for one stage of a mixed radix FFT */ static void kf_bfly_generic( kiss_fft_cpx * Fout, const size_t fstride, const kiss_fft_cfg st, int m, int p ) { int u,k,q1,q; kiss_fft_cpx * twiddles = st->twiddles; kiss_fft_cpx t; int Norig = st->nfft; CHECKBUF(scratchbuf,nscratchbuf,p); for ( u=0; uinverse) { C_FIXDIV(scratchbuf[q1],p); } k += m; } k=u; for ( q1=0 ; q1

=Norig) twidx-=Norig; C_MUL(t,scratchbuf[q] , twiddles[twidx] ); C_ADDTO( Fout[ k ] ,t); } k += m; } } } static void kf_work( kiss_fft_cpx * Fout, const kiss_fft_cpx * f, const size_t fstride, int in_stride, int * factors, const kiss_fft_cfg st ) { kiss_fft_cpx * Fout_beg=Fout; const int p=*factors++; /* the radix */ const int m=*factors++; /* stage's fft length/p */ const kiss_fft_cpx * Fout_end = Fout + p*m; if (m==1) { do{ *Fout = *f; f += fstride*in_stride; }while(++Fout != Fout_end ); }else{ do{ kf_work( Fout , f, fstride*p, in_stride, factors,st); f += fstride*in_stride; }while( (Fout += m) != Fout_end ); } Fout=Fout_beg; switch (p) { case 2: kf_bfly2(Fout,fstride,st,m); break; case 3: kf_bfly3(Fout,fstride,st,m); break; case 4: kf_bfly4(Fout,fstride,st,m); break; case 5: kf_bfly5(Fout,fstride,st,m); break; default: kf_bfly_generic(Fout,fstride,st,m,p); break; } } /* facbuf is populated by p1,m1,p2,m2, ... where p[i] * m[i] = m[i-1] m0 = n */ static void kf_factor(int n,int * facbuf) { int p=4; double floor_sqrt; floor_sqrt = floor( sqrt((double)n) ); /*factor out powers of 4, powers of 2, then any remaining primes */ do { while (n % p) { switch (p) { case 4: p = 2; break; case 2: p = 3; break; default: p += 2; break; } if (p > floor_sqrt) p = n; /* no more factors, skip to end */ } n /= p; *facbuf++ = p; *facbuf++ = n; } while (n > 1); } /* * * User-callable function to allocate all necessary storage space for the fft. * * The return value is a contiguous block of memory, allocated with malloc. As such, * It can be freed with free(), rather than a kiss_fft-specific function. * */ kiss_fft_cfg kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem ) { kiss_fft_cfg st=NULL; size_t memneeded = sizeof(struct kiss_fft_state) + sizeof(kiss_fft_cpx)*(nfft-1); /* twiddle factors*/ if ( lenmem==NULL ) { st = ( kiss_fft_cfg)KISS_FFT_MALLOC( memneeded ); }else{ if (mem != NULL && *lenmem >= memneeded) st = (kiss_fft_cfg)mem; *lenmem = memneeded; } if (st) { int i; st->nfft=nfft; st->inverse = inverse_fft; for (i=0;iinverse) phase *= -1; kf_cexp(st->twiddles+i, phase ); } kf_factor(nfft,st->factors); } return st; } void kiss_fft_stride(kiss_fft_cfg st,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int in_stride) { if (fin == fout) { CHECKBUF(tmpbuf,ntmpbuf,st->nfft); kf_work(tmpbuf,fin,1,in_stride, st->factors,st); memcpy(fout,tmpbuf,sizeof(kiss_fft_cpx)*st->nfft); }else{ kf_work( fout, fin, 1,in_stride, st->factors,st ); } } void kiss_fft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout) { kiss_fft_stride(cfg,fin,fout,1); } /* not really necessary to call, but if someone is doing in-place ffts, they may want to free the buffers from CHECKBUF */ void kiss_fft_cleanup(void) { free(scratchbuf); scratchbuf = NULL; nscratchbuf=0; free(tmpbuf); tmpbuf=NULL; ntmpbuf=0; } h323plus/plugins/audio/Speex/libspeex/cb_search_bfin.h0000644000175000017500000000742111341106241021645 0ustar markmark/* Copyright (C) 2005 Analog Devices */ /** @author Jean-Marc Valin @file cb_search_bfin.h @brief Fixed codebook functions (Blackfin version) */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #define OVERRIDE_COMPUTE_WEIGHTED_CODEBOOK void compute_weighted_codebook(const signed char *shape_cb, const spx_word16_t *r, spx_word16_t *resp, spx_word16_t *resp2, spx_word32_t *E, int shape_cb_size, int subvect_size, char *stack) { int i; for (i=0;i>>= 11;\n\t" "A1 += R0.L*R0.L (IS);\n\t" "W[P3++] = R0;\n\t" "P0 += 1;\n\t" "P2 += 2;\n\t" "LOOP_END outter%=;\n\t" "P4 = %4;\n\t" "R1 = A1;\n\t" "[P4] = R1;\n\t" : : "m" (subvect_size), "m" (shape_cb), "m" (r), "m" (resp), "m" (E) : "A0", "P0", "P1", "P2", "P3", "P4", "R0", "R1", "R2", "I0", "I1", "L0", "L1", "A0", "A1", "memory" ); shape_cb += subvect_size; resp += subvect_size; E++; } } #define OVERRIDE_TARGET_UPDATE static inline void target_update(spx_word16_t *t, spx_word16_t g, spx_word16_t *r, int len) { __asm__ __volatile__ ( "I0 = %0;\n\t" "I1 = %1;\n\t" "L0 = 0;\n\t" "L1 = 0;\n\t" "LOOP tupdate%= LC0 = %3;\n\t" "LOOP_BEGIN tupdate%=;\n\t" "R0.L = W[I0] || R1.L = W[I1++];\n\t" "R1 = (A1 = R1.L*%2.L) (IS);\n\t" "R1 >>>= 11;\n\t" "R0.L = R0.L - R1.L;\n\t" "W[I0++] = R0.L;\n\t" "LOOP_END tupdate%=;\n\t" : : "a" (t), "a" (r), "d" (g), "a" (len) : "R0", "R1", "A1", "I0", "I1", "L0", "L1" ); } h323plus/plugins/audio/Speex/libspeex/filters_arm4.h0000644000175000017500000003037611341106241021336 0ustar markmark/* Copyright (C) 2004 Jean-Marc Valin */ /** @file filters_arm4.h @brief Various analysis/synthesis filters (ARM4 version) */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #define OVERRIDE_NORMALIZE16 int normalize16(const spx_sig_t *x, spx_word16_t *y, int max_scale, int len) { int i; spx_sig_t max_val=1; int sig_shift; int dead1, dead2, dead3, dead4, dead5, dead6; __asm__ __volatile__ ( "\tmov %1, #1 \n" "\tmov %3, #0 \n" ".normalize16loop1%=: \n" "\tldr %4, [%0], #4 \n" "\tcmps %4, %1 \n" "\tmovgt %1, %4 \n" "\tcmps %4, %3 \n" "\tmovlt %3, %4 \n" "\tsubs %2, %2, #1 \n" "\tbne .normalize16loop1%=\n" "\trsb %3, %3, #0 \n" "\tcmp %1, %3 \n" "\tmovlt %1, %3 \n" : "=r" (dead1), "=r" (max_val), "=r" (dead3), "=r" (dead4), "=r" (dead5), "=r" (dead6) : "0" (x), "2" (len) : "cc"); sig_shift=0; while (max_val>max_scale) { sig_shift++; max_val >>= 1; } __asm__ __volatile__ ( ".normalize16loop%=: \n" "\tldr %4, [%0], #4 \n" "\tldr %5, [%0], #4 \n" "\tmov %4, %4, asr %3 \n" "\tstrh %4, [%1], #2 \n" "\tldr %4, [%0], #4 \n" "\tmov %5, %5, asr %3 \n" "\tstrh %5, [%1], #2 \n" "\tldr %5, [%0], #4 \n" "\tmov %4, %4, asr %3 \n" "\tstrh %4, [%1], #2 \n" "\tsubs %2, %2, #1 \n" "\tmov %5, %5, asr %3 \n" "\tstrh %5, [%1], #2 \n" "\tbge .normalize16loop%=\n" : "=r" (dead1), "=r" (dead2), "=r" (dead3), "=r" (dead4), "=r" (dead5), "=r" (dead6) : "0" (x), "1" (y), "2" (len>>2), "3" (sig_shift) : "cc", "memory"); return sig_shift; } #define OVERRIDE_FILTER_MEM2 void filter_mem2(const spx_sig_t *x, const spx_coef_t *num, const spx_coef_t *den, spx_sig_t *y, int N, int ord, spx_mem_t *mem) { int i,j; spx_sig_t xi,yi,nyi; for (i=0;i>= 1;\n\t" "A0 = %0;\n\t" "R0.L = W[%1++%7] || R1.L = W[I0++];\n\t" "LOOP vq_loop%= LC1 = %5;\n\t" "LOOP_BEGIN vq_loop%=;\n\t" "%0 = (A0 -= R0.L*R1.L) (IS) || R0.L = W[%1++%7] || R1.L = W[I0++];\n\t" "LOOP_END vq_loop%=;\n\t" "%0 = (A0 -= R0.L*R1.L) (IS);\n\t" "cc = %0 < %2;\n\t" "if cc %2 = %0;\n\t" "if cc %3 = R2;\n\t" "R2 += 1;\n\t" "LOOP_END entries_loop%=;\n\t" : "=&D" (dist), "=&a" (codebook), "=&d" (best_dist[0]), "=&d" (nbest[0]), "=&a" (E) : "a" (len-1), "a" (in), "a" (2), "d" (entries), "d" (len<<1), "1" (codebook), "4" (E), "2" (best_dist[0]), "3" (nbest[0]) : "R0", "R1", "R2", "I0", "L0", "B0", "A0", "cc", "memory" ); } } else { int i,k,used; used = 0; for (i=0;i>= 1;\n\t" "A0 = %0;\n\t" "I0 = %3;\n\t" "L0 = 0;\n\t" "R0.L = W[%1++%4] || R1.L = W[I0++];\n\t" "LOOP vq_loop%= LC0 = %2;\n\t" "LOOP_BEGIN vq_loop%=;\n\t" "%0 = (A0 -= R0.L*R1.L) (IS) || R0.L = W[%1++%4] || R1.L = W[I0++];\n\t" "LOOP_END vq_loop%=;\n\t" "%0 = (A0 -= R0.L*R1.L) (IS);\n\t" : "=D" (dist), "=a" (codebook) : "a" (len-1), "a" (in), "a" (2), "1" (codebook), "0" (E[i]) : "R0", "R1", "I0", "L0", "A0" ); if (i= 1) && (k > used || dist < best_dist[k-1]); k--) { best_dist[k]=best_dist[k-1]; nbest[k] = nbest[k-1]; } best_dist[k]=dist; nbest[k]=i; used++; } } } } h323plus/plugins/audio/Speex/libspeex/speex.c0000644000175000017500000001543611341106241020062 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin File: speex.c Basic Speex functions Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "modes.h" #include #ifndef NULL #define NULL 0 #endif #define MAX_IN_SAMPLES 640 void *speex_encoder_init(const SpeexMode *mode) { return mode->enc_init(mode); } void *speex_decoder_init(const SpeexMode *mode) { return mode->dec_init(mode); } void speex_encoder_destroy(void *state) { (*((SpeexMode**)state))->enc_destroy(state); } void speex_decoder_destroy(void *state) { (*((SpeexMode**)state))->dec_destroy(state); } int speex_encode_native(void *state, spx_word16_t *in, SpeexBits *bits) { return (*((SpeexMode**)state))->enc(state, in, bits); } int speex_decode_native(void *state, SpeexBits *bits, spx_word16_t *out) { return (*((SpeexMode**)state))->dec(state, bits, out); } #ifdef FIXED_POINT int speex_encode(void *state, float *in, SpeexBits *bits) { int i; int N; spx_int16_t short_in[MAX_IN_SAMPLES]; speex_encoder_ctl(state, SPEEX_GET_FRAME_SIZE, &N); for (i=0;i32767.f) short_in[i] = 32767; else if (in[i]<-32768.f) short_in[i] = -32768; else short_in[i] = (spx_int16_t)floor(.5+in[i]); } return (*((SpeexMode**)state))->enc(state, short_in, bits); } int speex_encode_int(void *state, spx_int16_t *in, SpeexBits *bits) { SpeexMode *mode; mode = *(SpeexMode**)state; return (mode)->enc(state, in, bits); } int speex_decode(void *state, SpeexBits *bits, float *out) { int i, ret; int N; spx_int16_t short_out[MAX_IN_SAMPLES]; speex_decoder_ctl(state, SPEEX_GET_FRAME_SIZE, &N); ret = (*((SpeexMode**)state))->dec(state, bits, short_out); for (i=0;idec(state, bits, out); } #else int speex_encode(void *state, float *in, SpeexBits *bits) { return (*((SpeexMode**)state))->enc(state, in, bits); } int speex_encode_int(void *state, spx_int16_t *in, SpeexBits *bits) { int i; int N; float float_in[MAX_IN_SAMPLES]; speex_encoder_ctl(state, SPEEX_GET_FRAME_SIZE, &N); for (i=0;ienc(state, float_in, bits); } int speex_decode(void *state, SpeexBits *bits, float *out) { return (*((SpeexMode**)state))->dec(state, bits, out); } int speex_decode_int(void *state, SpeexBits *bits, spx_int16_t *out) { int i; int N; float float_out[MAX_IN_SAMPLES]; int ret; speex_decoder_ctl(state, SPEEX_GET_FRAME_SIZE, &N); ret = (*((SpeexMode**)state))->dec(state, bits, float_out); for (i=0;i32767.f) out[i] = 32767; else if (float_out[i]<-32768.f) out[i] = -32768; else out[i] = (spx_int16_t)floor(.5+float_out[i]); } return ret; } #endif int speex_encoder_ctl(void *state, int request, void *ptr) { return (*((SpeexMode**)state))->enc_ctl(state, request, ptr); } int speex_decoder_ctl(void *state, int request, void *ptr) { return (*((SpeexMode**)state))->dec_ctl(state, request, ptr); } int nb_mode_query(const void *mode, int request, void *ptr) { const SpeexNBMode *m = (const SpeexNBMode*)mode; switch (request) { case SPEEX_MODE_FRAME_SIZE: *((int*)ptr)=m->frameSize; break; case SPEEX_SUBMODE_BITS_PER_FRAME: if (*((int*)ptr)==0) *((int*)ptr) = NB_SUBMODE_BITS+1; else if (m->submodes[*((int*)ptr)]==NULL) *((int*)ptr) = -1; else *((int*)ptr) = m->submodes[*((int*)ptr)]->bits_per_frame; break; default: speex_warning_int("Unknown nb_mode_query request: ", request); return -1; } return 0; } int wb_mode_query(const void *mode, int request, void *ptr) { const SpeexSBMode *m = (const SpeexSBMode*)mode; switch (request) { case SPEEX_MODE_FRAME_SIZE: *((int*)ptr)=2*m->frameSize; break; case SPEEX_SUBMODE_BITS_PER_FRAME: if (*((int*)ptr)==0) *((int*)ptr) = SB_SUBMODE_BITS+1; else if (m->submodes[*((int*)ptr)]==NULL) *((int*)ptr) = -1; else *((int*)ptr) = m->submodes[*((int*)ptr)]->bits_per_frame; break; default: speex_warning_int("Unknown wb_mode_query request: ", request); return -1; } return 0; } int speex_lib_ctl(int request, void *ptr) { switch (request) { case SPEEX_LIB_GET_MAJOR_VERSION: *((int*)ptr) = SPEEX_MAJOR_VERSION; break; case SPEEX_LIB_GET_MINOR_VERSION: *((int*)ptr) = SPEEX_MINOR_VERSION; break; case SPEEX_LIB_GET_MICRO_VERSION: *((int*)ptr) = SPEEX_MICRO_VERSION; break; case SPEEX_LIB_GET_EXTRA_VERSION: *((const char**)ptr) = SPEEX_EXTRA_VERSION; break; case SPEEX_LIB_GET_VERSION_STRING: *((const char**)ptr) = SPEEX_VERSION; break; /*case SPEEX_LIB_SET_ALLOC_FUNC: break; case SPEEX_LIB_GET_ALLOC_FUNC: break; case SPEEX_LIB_SET_FREE_FUNC: break; case SPEEX_LIB_GET_FREE_FUNC: break;*/ default: speex_warning_int("Unknown wb_mode_query request: ", request); return -1; } return 0; } h323plus/plugins/audio/Speex/libspeex/nb_celp.c0000644000175000017500000017362711341106241020347 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin File: nb_celp.c Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "nb_celp.h" #include "lpc.h" #include "lsp.h" #include "ltp.h" #include "quant_lsp.h" #include "cb_search.h" #include "filters.h" #include "stack_alloc.h" #include "vq.h" #include "speex_bits.h" #include "vbr.h" #include "misc.h" #include "speex_callbacks.h" #ifdef VORBIS_PSYCHO #include "vorbis_psy.h" #endif #ifndef M_PI #define M_PI 3.14159265358979323846 /* pi */ #endif #ifndef NULL #define NULL 0 #endif #define SUBMODE(x) st->submodes[st->submodeID]->x /* Default size for the encoder and decoder stack (can be changed at compile time). This does not apply when using variable-size arrays or alloca. */ #ifndef NB_ENC_STACK #define NB_ENC_STACK (8000*sizeof(spx_sig_t)) #endif #ifndef NB_DEC_STACK #define NB_DEC_STACK (4000*sizeof(spx_sig_t)) #endif #ifdef FIXED_POINT const spx_word32_t ol_gain_table[32]={18900, 25150, 33468, 44536, 59265, 78865, 104946, 139653, 185838, 247297, 329081, 437913, 582736, 775454, 1031906, 1373169, 1827293, 2431601, 3235761, 4305867, 5729870, 7624808, 10146425, 13501971, 17967238, 23909222, 31816294, 42338330, 56340132, 74972501, 99766822, 132760927}; const spx_word16_t exc_gain_quant_scal3_bound[7]={1841, 3883, 6051, 8062, 10444, 13580, 18560}; const spx_word16_t exc_gain_quant_scal3[8]={1002, 2680, 5086, 7016, 9108, 11781, 15380, 21740}; const spx_word16_t exc_gain_quant_scal1_bound[1]={14385}; const spx_word16_t exc_gain_quant_scal1[2]={11546, 17224}; #define LSP_MARGIN 16 #define LSP_DELTA1 6553 #define LSP_DELTA2 1638 #else const float exc_gain_quant_scal3_bound[7]={0.112338, 0.236980, 0.369316, 0.492054, 0.637471, 0.828874, 1.132784}; const float exc_gain_quant_scal3[8]={0.061130, 0.163546, 0.310413, 0.428220, 0.555887, 0.719055, 0.938694, 1.326874}; const float exc_gain_quant_scal1_bound[1]={0.87798}; const float exc_gain_quant_scal1[2]={0.70469, 1.05127}; #define LSP_MARGIN .002 #define LSP_DELTA1 .2 #define LSP_DELTA2 .05 #endif #ifdef VORBIS_PSYCHO #define EXTRA_BUFFER 100 #else #define EXTRA_BUFFER 0 #endif #define sqr(x) ((x)*(x)) void *nb_encoder_init(const SpeexMode *m) { EncState *st; const SpeexNBMode *mode; int i; mode=(const SpeexNBMode *)m->mode; st = (EncState*)speex_alloc(sizeof(EncState)); if (!st) return NULL; #if defined(VAR_ARRAYS) || defined (USE_ALLOCA) st->stack = NULL; #else st->stack = (char*)speex_alloc_scratch(NB_ENC_STACK); #endif st->mode=m; st->frameSize = mode->frameSize; st->windowSize = st->frameSize*3/2; st->nbSubframes=mode->frameSize/mode->subframeSize; st->subframeSize=mode->subframeSize; st->lpcSize = mode->lpcSize; st->gamma1=mode->gamma1; st->gamma2=mode->gamma2; st->min_pitch=mode->pitchStart; st->max_pitch=mode->pitchEnd; st->lag_factor=mode->lag_factor; st->lpc_floor = mode->lpc_floor; st->submodes=mode->submodes; st->submodeID=st->submodeSelect=mode->defaultSubmode; st->bounded_pitch = 1; st->encode_submode = 1; #ifdef EPIC_48K st->lbr_48k=mode->lbr48k; #endif #ifdef VORBIS_PSYCHO st->psy = vorbis_psy_init(8000, 256); st->curve = speex_alloc(128*sizeof(float)); st->old_curve = speex_alloc(128*sizeof(float)); #endif /* Allocating input buffer */ st->inBuf = speex_alloc((st->windowSize+EXTRA_BUFFER)*sizeof(spx_sig_t)); st->frame = st->inBuf+EXTRA_BUFFER; /* Allocating excitation buffer */ st->excBuf = speex_alloc((mode->frameSize+mode->pitchEnd+1)*sizeof(spx_sig_t)); st->exc = st->excBuf + mode->pitchEnd + 1; st->swBuf = speex_alloc((mode->frameSize+mode->pitchEnd+1)*sizeof(spx_sig_t)); st->sw = st->swBuf + mode->pitchEnd + 1; st->innov = speex_alloc((st->frameSize)*sizeof(spx_sig_t)); /* Asymmetric "pseudo-Hamming" window */ { int part1, part2; part1=st->frameSize - (st->subframeSize>>1); part2=(st->frameSize>>1) + (st->subframeSize>>1); st->window = speex_alloc((st->windowSize)*sizeof(spx_word16_t)); for (i=0;iwindow[i]=(spx_word16_t)(SIG_SCALING*(.54-.46*cos(M_PI*i/part1))); for (i=0;iwindow[part1+i]=(spx_word16_t)(SIG_SCALING*(.54+.46*cos(M_PI*i/part2))); } /* Create the window for autocorrelation (lag-windowing) */ st->lagWindow = speex_alloc((st->lpcSize+1)*sizeof(spx_word16_t)); for (i=0;ilpcSize+1;i++) st->lagWindow[i]=16384*exp(-.5*sqr(2*M_PI*st->lag_factor*i)); st->autocorr = speex_alloc((st->lpcSize+1)*sizeof(spx_word16_t)); st->lpc = speex_alloc((st->lpcSize)*sizeof(spx_coef_t)); st->interp_lpc = speex_alloc((st->lpcSize)*sizeof(spx_coef_t)); st->interp_qlpc = speex_alloc((st->lpcSize)*sizeof(spx_coef_t)); st->bw_lpc1 = speex_alloc((st->lpcSize)*sizeof(spx_coef_t)); st->bw_lpc2 = speex_alloc((st->lpcSize)*sizeof(spx_coef_t)); st->lsp = speex_alloc((st->lpcSize)*sizeof(spx_lsp_t)); st->qlsp = speex_alloc((st->lpcSize)*sizeof(spx_lsp_t)); st->old_lsp = speex_alloc((st->lpcSize)*sizeof(spx_lsp_t)); st->old_qlsp = speex_alloc((st->lpcSize)*sizeof(spx_lsp_t)); st->interp_lsp = speex_alloc((st->lpcSize)*sizeof(spx_lsp_t)); st->interp_qlsp = speex_alloc((st->lpcSize)*sizeof(spx_lsp_t)); st->first = 1; for (i=0;ilpcSize;i++) { st->lsp[i]=LSP_SCALING*(M_PI*((float)(i+1)))/(st->lpcSize+1); } st->mem_sp = speex_alloc((st->lpcSize)*sizeof(spx_mem_t)); st->mem_sw = speex_alloc((st->lpcSize)*sizeof(spx_mem_t)); st->mem_sw_whole = speex_alloc((st->lpcSize)*sizeof(spx_mem_t)); st->mem_exc = speex_alloc((st->lpcSize)*sizeof(spx_mem_t)); st->pi_gain = speex_alloc((st->nbSubframes)*sizeof(spx_word32_t)); st->pitch = speex_alloc((st->nbSubframes)*sizeof(int)); st->vbr = speex_alloc(sizeof(VBRState)); vbr_init(st->vbr); st->vbr_quality = 8; st->vbr_enabled = 0; st->vad_enabled = 0; st->dtx_enabled = 0; st->abr_enabled = 0; st->abr_drift = 0; st->plc_tuning = 2; st->complexity=2; st->sampling_rate=8000; st->dtx_count=0; #ifdef ENABLE_VALGRIND VALGRIND_MAKE_READABLE(st, (st->stack-(char*)st)); #endif return st; } void nb_encoder_destroy(void *state) { EncState *st=(EncState *)state; /* Free all allocated memory */ #if !(defined(VAR_ARRAYS) || defined (USE_ALLOCA)) speex_free_scratch(st->stack); #endif speex_free (st->inBuf); speex_free (st->excBuf); speex_free (st->innov); speex_free (st->interp_qlpc); speex_free (st->qlsp); speex_free (st->old_qlsp); speex_free (st->interp_qlsp); speex_free (st->swBuf); speex_free (st->window); speex_free (st->lagWindow); speex_free (st->autocorr); speex_free (st->lpc); speex_free (st->lsp); speex_free (st->interp_lpc); speex_free (st->bw_lpc1); speex_free (st->bw_lpc2); speex_free (st->old_lsp); speex_free (st->interp_lsp); speex_free (st->mem_sp); speex_free (st->mem_sw); speex_free (st->mem_sw_whole); speex_free (st->mem_exc); speex_free (st->pi_gain); speex_free (st->pitch); vbr_destroy(st->vbr); speex_free (st->vbr); #ifdef VORBIS_PSYCHO vorbis_psy_destroy(st->psy); speex_free (st->curve); speex_free (st->old_curve); #endif /*Free state memory... should be last*/ speex_free(st); } int nb_encode(void *state, void *vin, SpeexBits *bits) { EncState *st; int i, sub, roots; int ol_pitch; spx_word16_t ol_pitch_coef; spx_word32_t ol_gain; VARDECL(spx_sig_t *res); VARDECL(spx_sig_t *target); VARDECL(spx_mem_t *mem); char *stack; VARDECL(spx_word16_t *syn_resp); VARDECL(spx_sig_t *real_exc); #ifdef EPIC_48K int pitch_half[2]; int ol_pitch_id=0; #endif spx_word16_t *in = vin; st=(EncState *)state; stack=st->stack; /* Copy new data in input buffer */ speex_move(st->inBuf, st->inBuf+st->frameSize, (EXTRA_BUFFER+st->windowSize-st->frameSize)*sizeof(spx_sig_t)); for (i=0;iframeSize;i++) st->inBuf[st->windowSize-st->frameSize+i+EXTRA_BUFFER] = SHL32(EXTEND32(in[i]), SIG_SHIFT); /* Move signals 1 frame towards the past */ speex_move(st->excBuf, st->excBuf+st->frameSize, (st->max_pitch+1)*sizeof(spx_sig_t)); speex_move(st->swBuf, st->swBuf+st->frameSize, (st->max_pitch+1)*sizeof(spx_sig_t)); { VARDECL(spx_word16_t *w_sig); ALLOC(w_sig, st->windowSize, spx_word16_t); /* Window for analysis */ for (i=0;iwindowSize;i++) w_sig[i] = EXTRACT16(SHR32(MULT16_16(EXTRACT16(SHR32(st->frame[i],SIG_SHIFT)),st->window[i]),SIG_SHIFT)); /* Compute auto-correlation */ _spx_autocorr(w_sig, st->autocorr, st->lpcSize+1, st->windowSize); } st->autocorr[0] = ADD16(st->autocorr[0],MULT16_16_Q15(st->autocorr[0],st->lpc_floor)); /* Noise floor in auto-correlation domain */ /* Lag windowing: equivalent to filtering in the power-spectrum domain */ for (i=0;ilpcSize+1;i++) st->autocorr[i] = MULT16_16_Q14(st->autocorr[i],st->lagWindow[i]); /* Levinson-Durbin */ _spx_lpc(st->lpc, st->autocorr, st->lpcSize); /* LPC to LSPs (x-domain) transform */ roots=lpc_to_lsp (st->lpc, st->lpcSize, st->lsp, 15, LSP_DELTA1, stack); /* Check if we found all the roots */ if (roots!=st->lpcSize) { /* Search again if we can afford it */ if (st->complexity>1) roots = lpc_to_lsp (st->lpc, st->lpcSize, st->lsp, 11, LSP_DELTA2, stack); if (roots!=st->lpcSize) { /*If we can't find all LSP's, do some damage control and use previous filter*/ for (i=0;ilpcSize;i++) { st->lsp[i]=st->old_lsp[i]; } } } /* Whole frame analysis (open-loop estimation of pitch and excitation gain) */ { if (st->first) for (i=0;ilpcSize;i++) st->interp_lsp[i] = st->lsp[i]; else lsp_interpolate(st->old_lsp, st->lsp, st->interp_lsp, st->lpcSize, st->nbSubframes, st->nbSubframes<<1); lsp_enforce_margin(st->interp_lsp, st->lpcSize, LSP_MARGIN); /* Compute interpolated LPCs (unquantized) for whole frame*/ lsp_to_lpc(st->interp_lsp, st->interp_lpc, st->lpcSize,stack); /*Open-loop pitch*/ if (!st->submodes[st->submodeID] || st->vbr_enabled || st->vad_enabled || SUBMODE(forced_pitch_gain) || SUBMODE(lbr_pitch) != -1) { int nol_pitch[6]; spx_word16_t nol_pitch_coef[6]; bw_lpc(st->gamma1, st->interp_lpc, st->bw_lpc1, st->lpcSize); bw_lpc(st->gamma2, st->interp_lpc, st->bw_lpc2, st->lpcSize); filter_mem2(st->frame, st->bw_lpc1, st->bw_lpc2, st->sw, st->frameSize, st->lpcSize, st->mem_sw_whole); open_loop_nbest_pitch(st->sw, st->min_pitch, st->max_pitch, st->frameSize, nol_pitch, nol_pitch_coef, 6, stack); ol_pitch=nol_pitch[0]; ol_pitch_coef = nol_pitch_coef[0]; /*Try to remove pitch multiples*/ for (i=1;i<6;i++) { #ifdef FIXED_POINT if ((nol_pitch_coef[i]>MULT16_16_Q15(nol_pitch_coef[0],27853)) && #else if ((nol_pitch_coef[i]>.85*nol_pitch_coef[0]) && #endif (ABS(2*nol_pitch[i]-ol_pitch)<=2 || ABS(3*nol_pitch[i]-ol_pitch)<=3 || ABS(4*nol_pitch[i]-ol_pitch)<=4 || ABS(5*nol_pitch[i]-ol_pitch)<=5)) { /*ol_pitch_coef=nol_pitch_coef[i];*/ ol_pitch = nol_pitch[i]; } } /*if (ol_pitch>50) ol_pitch/=2;*/ /*ol_pitch_coef = sqrt(ol_pitch_coef);*/ #ifdef EPIC_48K if (st->lbr_48k) { if (ol_pitch < st->min_pitch+2) ol_pitch = st->min_pitch+2; if (ol_pitch > st->max_pitch-2) ol_pitch = st->max_pitch-2; open_loop_nbest_pitch(st->sw, ol_pitch-2, ol_pitch+2, st->frameSize>>1, &pitch_half[0], nol_pitch_coef, 1, stack); open_loop_nbest_pitch(st->sw+(st->frameSize>>1), pitch_half[0]-1, pitch_half[0]+2, st->frameSize>>1, &pitch_half[1], nol_pitch_coef, 1, stack); } #endif } else { ol_pitch=0; ol_pitch_coef=0; } /*Compute "real" excitation*/ fir_mem2(st->frame, st->interp_lpc, st->exc, st->frameSize, st->lpcSize, st->mem_exc); /* Compute open-loop excitation gain */ #ifdef EPIC_48K if (st->lbr_48k) { float ol1=0,ol2=0; float ol_gain2; ol1 = compute_rms(st->exc, st->frameSize>>1); ol2 = compute_rms(st->exc+(st->frameSize>>1), st->frameSize>>1); ol1 *= ol1*(st->frameSize>>1); ol2 *= ol2*(st->frameSize>>1); ol_gain2=ol1; if (ol2>ol1) ol_gain2=ol2; ol_gain2 = sqrt(2*ol_gain2*(ol1+ol2))*1.3*(1-.5*GAIN_SCALING_1*GAIN_SCALING_1*ol_pitch_coef*ol_pitch_coef); ol_gain=SHR(sqrt(1+ol_gain2/st->frameSize),SIG_SHIFT); } else { #endif ol_gain = SHL32(EXTEND32(compute_rms(st->exc, st->frameSize)),SIG_SHIFT); #ifdef EPIC_48K } #endif } #ifdef VORBIS_PSYCHO compute_curve(st->psy, st->frame-16, st->curve); /*print_vec(st->curve, 128, "curve");*/ if (st->first) for (i=0;i<128;i++) st->old_curve[i] = st->curve[i]; #endif /*VBR stuff*/ if (st->vbr && (st->vbr_enabled||st->vad_enabled)) { float lsp_dist=0; for (i=0;ilpcSize;i++) lsp_dist += (st->old_lsp[i] - st->lsp[i])*(st->old_lsp[i] - st->lsp[i]); lsp_dist /= LSP_SCALING*LSP_SCALING; if (st->abr_enabled) { float qual_change=0; if (st->abr_drift2 * st->abr_drift > 0) { /* Only adapt if long-term and short-term drift are the same sign */ qual_change = -.00001*st->abr_drift/(1+st->abr_count); if (qual_change>.05) qual_change=.05; if (qual_change<-.05) qual_change=-.05; } st->vbr_quality += qual_change; if (st->vbr_quality>10) st->vbr_quality=10; if (st->vbr_quality<0) st->vbr_quality=0; } st->relative_quality = vbr_analysis(st->vbr, in, st->frameSize, ol_pitch, GAIN_SCALING_1*ol_pitch_coef); /*if (delta_qual<0)*/ /* delta_qual*=.1*(3+st->vbr_quality);*/ if (st->vbr_enabled) { int mode; int choice=0; float min_diff=100; mode = 8; while (mode) { int v1; float thresh; v1=(int)floor(st->vbr_quality); if (v1==10) thresh = vbr_nb_thresh[mode][v1]; else thresh = (st->vbr_quality-v1)*vbr_nb_thresh[mode][v1+1] + (1+v1-st->vbr_quality)*vbr_nb_thresh[mode][v1]; if (st->relative_quality > thresh && st->relative_quality-threshrelative_quality-thresh; } mode--; } mode=choice; if (mode==0) { if (st->dtx_count==0 || lsp_dist>.05 || !st->dtx_enabled || st->dtx_count>20) { mode=1; st->dtx_count=1; } else { mode=0; st->dtx_count++; } } else { st->dtx_count=0; } speex_encoder_ctl(state, SPEEX_SET_MODE, &mode); if (st->abr_enabled) { int bitrate; speex_encoder_ctl(state, SPEEX_GET_BITRATE, &bitrate); st->abr_drift+=(bitrate-st->abr_enabled); st->abr_drift2 = .95*st->abr_drift2 + .05*(bitrate-st->abr_enabled); st->abr_count += 1.0; } } else { /*VAD only case*/ int mode; if (st->relative_quality<2) { if (st->dtx_count==0 || lsp_dist>.05 || !st->dtx_enabled || st->dtx_count>20) { st->dtx_count=1; mode=1; } else { mode=0; st->dtx_count++; } } else { st->dtx_count = 0; mode=st->submodeSelect; } /*speex_encoder_ctl(state, SPEEX_SET_MODE, &mode);*/ st->submodeID=mode; } } else { st->relative_quality = -1; } if (st->encode_submode) { #ifdef EPIC_48K if (!st->lbr_48k) { #endif /* First, transmit a zero for narrowband */ speex_bits_pack(bits, 0, 1); /* Transmit the sub-mode we use for this frame */ speex_bits_pack(bits, st->submodeID, NB_SUBMODE_BITS); #ifdef EPIC_48K } #endif } /* If null mode (no transmission), just set a couple things to zero*/ if (st->submodes[st->submodeID] == NULL) { for (i=0;iframeSize;i++) st->exc[i]=st->sw[i]=VERY_SMALL; for (i=0;ilpcSize;i++) st->mem_sw[i]=0; st->first=1; st->bounded_pitch = 1; /* Final signal synthesis from excitation */ iir_mem2(st->exc, st->interp_qlpc, st->frame, st->frameSize, st->lpcSize, st->mem_sp); #ifdef RESYNTH for (i=0;iframeSize;i++) in[i]=st->frame[i]; #endif return 0; } /* LSP Quantization */ if (st->first) { for (i=0;ilpcSize;i++) st->old_lsp[i] = st->lsp[i]; } /*Quantize LSPs*/ #if 1 /*0 for unquantized*/ SUBMODE(lsp_quant)(st->lsp, st->qlsp, st->lpcSize, bits); #else for (i=0;ilpcSize;i++) st->qlsp[i]=st->lsp[i]; #endif #ifdef EPIC_48K if (st->lbr_48k) { speex_bits_pack(bits, pitch_half[0]-st->min_pitch, 7); speex_bits_pack(bits, pitch_half[1]-pitch_half[0]+1, 2); { int quant = (int)floor(.5+7.4*GAIN_SCALING_1*ol_pitch_coef); if (quant>7) quant=7; if (quant<0) quant=0; ol_pitch_id=quant; speex_bits_pack(bits, quant, 3); ol_pitch_coef=GAIN_SCALING*0.13514*quant; } { int qe = (int)(floor(.5+2.1*log(ol_gain*1.0/SIG_SCALING)))-2; if (qe<0) qe=0; if (qe>15) qe=15; ol_gain = exp((qe+2)/2.1)*SIG_SCALING; speex_bits_pack(bits, qe, 4); } } else { #endif /*If we use low bit-rate pitch mode, transmit open-loop pitch*/ if (SUBMODE(lbr_pitch)!=-1) { speex_bits_pack(bits, ol_pitch-st->min_pitch, 7); } if (SUBMODE(forced_pitch_gain)) { int quant; quant = (int)floor(.5+15*ol_pitch_coef*GAIN_SCALING_1); if (quant>15) quant=15; if (quant<0) quant=0; speex_bits_pack(bits, quant, 4); ol_pitch_coef=GAIN_SCALING*0.066667*quant; } /*Quantize and transmit open-loop excitation gain*/ #ifdef FIXED_POINT { int qe = scal_quant32(ol_gain, ol_gain_table, 32); /*ol_gain = exp(qe/3.5)*SIG_SCALING;*/ ol_gain = MULT16_32_Q15(28406,ol_gain_table[qe]); speex_bits_pack(bits, qe, 5); } #else { int qe = (int)(floor(.5+3.5*log(ol_gain*1.0/SIG_SCALING))); if (qe<0) qe=0; if (qe>31) qe=31; ol_gain = exp(qe/3.5)*SIG_SCALING; speex_bits_pack(bits, qe, 5); } #endif #ifdef EPIC_48K } #endif /* Special case for first frame */ if (st->first) { for (i=0;ilpcSize;i++) st->old_qlsp[i] = st->qlsp[i]; } /* Filter response */ ALLOC(res, st->subframeSize, spx_sig_t); /* Target signal */ ALLOC(target, st->subframeSize, spx_sig_t); ALLOC(syn_resp, st->subframeSize, spx_word16_t); ALLOC(real_exc, st->subframeSize, spx_sig_t); ALLOC(mem, st->lpcSize, spx_mem_t); /* Loop on sub-frames */ for (sub=0;subnbSubframes;sub++) { int offset; spx_sig_t *sp, *sw, *exc; int pitch; int response_bound = st->subframeSize; #ifdef EPIC_48K if (st->lbr_48k) { if (sub*2 < st->nbSubframes) ol_pitch = pitch_half[0]; else ol_pitch = pitch_half[1]; } #endif /* Offset relative to start of frame */ offset = st->subframeSize*sub; /* Original signal */ sp=st->frame+offset; /* Excitation */ exc=st->exc+offset; /* Weighted signal */ sw=st->sw+offset; /* LSP interpolation (quantized and unquantized) */ lsp_interpolate(st->old_lsp, st->lsp, st->interp_lsp, st->lpcSize, sub, st->nbSubframes); lsp_interpolate(st->old_qlsp, st->qlsp, st->interp_qlsp, st->lpcSize, sub, st->nbSubframes); /* Make sure the filters are stable */ lsp_enforce_margin(st->interp_lsp, st->lpcSize, LSP_MARGIN); lsp_enforce_margin(st->interp_qlsp, st->lpcSize, LSP_MARGIN); /* Compute interpolated LPCs (quantized and unquantized) */ lsp_to_lpc(st->interp_lsp, st->interp_lpc, st->lpcSize,stack); lsp_to_lpc(st->interp_qlsp, st->interp_qlpc, st->lpcSize, stack); /* Compute analysis filter gain at w=pi (for use in SB-CELP) */ { spx_word32_t pi_g=LPC_SCALING; for (i=0;ilpcSize;i+=2) { /*pi_g += -st->interp_qlpc[i] + st->interp_qlpc[i+1];*/ pi_g = ADD32(pi_g, SUB32(st->interp_qlpc[i+1],st->interp_qlpc[i])); } st->pi_gain[sub] = pi_g; } #ifdef VORBIS_PSYCHO { float curr_curve[128]; float fact = ((float)sub+1.0f)/st->nbSubframes; for (i=0;i<128;i++) curr_curve[i] = (1.0f-fact)*st->old_curve[i] + fact*st->curve[i]; curve_to_lpc(st->psy, curr_curve, st->bw_lpc1, st->bw_lpc2, 10); } #else /* Compute bandwidth-expanded (unquantized) LPCs for perceptual weighting */ bw_lpc(st->gamma1, st->interp_lpc, st->bw_lpc1, st->lpcSize); if (st->gamma2>=0) bw_lpc(st->gamma2, st->interp_lpc, st->bw_lpc2, st->lpcSize); else { st->bw_lpc2[0]=1; for (i=1;i<=st->lpcSize;i++) st->bw_lpc2[i]=0; } /*print_vec(st->bw_lpc1, 10, "bw_lpc");*/ #endif for (i=0;isubframeSize;i++) real_exc[i] = exc[i]; if (st->complexity==0) response_bound >>= 1; compute_impulse_response(st->interp_qlpc, st->bw_lpc1, st->bw_lpc2, syn_resp, response_bound, st->lpcSize, stack); for (i=response_bound;isubframeSize;i++) syn_resp[i]=VERY_SMALL; /* Reset excitation */ for (i=0;isubframeSize;i++) exc[i]=VERY_SMALL; /* Compute zero response of A(z/g1) / ( A(z/g2) * A(z) ) */ for (i=0;ilpcSize;i++) mem[i]=st->mem_sp[i]; #ifdef SHORTCUTS2 iir_mem2(exc, st->interp_qlpc, exc, response_bound, st->lpcSize, mem); for (i=0;ilpcSize;i++) mem[i]=st->mem_sw[i]; filter_mem2(exc, st->bw_lpc1, st->bw_lpc2, res, response_bound, st->lpcSize, mem); for (i=response_bound;isubframeSize;i++) res[i]=0; #else iir_mem2(exc, st->interp_qlpc, exc, st->subframeSize, st->lpcSize, mem); for (i=0;ilpcSize;i++) mem[i]=st->mem_sw[i]; filter_mem2(exc, st->bw_lpc1, st->bw_lpc2, res, st->subframeSize, st->lpcSize, mem); #endif /* Compute weighted signal */ for (i=0;ilpcSize;i++) mem[i]=st->mem_sw[i]; filter_mem2(sp, st->bw_lpc1, st->bw_lpc2, sw, st->subframeSize, st->lpcSize, mem); if (st->complexity==0) for (i=0;ilpcSize;i++) st->mem_sw[i]=mem[i]; /* Compute target signal */ for (i=0;isubframeSize;i++) target[i]=sw[i]-res[i]; for (i=0;isubframeSize;i++) exc[i]=0; /* If we have a long-term predictor (otherwise, something's wrong) */ if (SUBMODE(ltp_quant)) { int pit_min, pit_max; /* Long-term prediction */ if (SUBMODE(lbr_pitch) != -1) { /* Low bit-rate pitch handling */ int margin; margin = SUBMODE(lbr_pitch); if (margin) { if (ol_pitch < st->min_pitch+margin-1) ol_pitch=st->min_pitch+margin-1; if (ol_pitch > st->max_pitch-margin) ol_pitch=st->max_pitch-margin; pit_min = ol_pitch-margin+1; pit_max = ol_pitch+margin; } else { pit_min=pit_max=ol_pitch; } } else { pit_min = st->min_pitch; pit_max = st->max_pitch; } /* Force pitch to use only the current frame if needed */ if (st->bounded_pitch && pit_max>offset) pit_max=offset; #ifdef EPIC_48K if (st->lbr_48k) { pitch = SUBMODE(ltp_quant)(target, sw, st->interp_qlpc, st->bw_lpc1, st->bw_lpc2, exc, SUBMODE(ltp_params), pit_min, pit_max, ol_pitch_coef, st->lpcSize, st->subframeSize, bits, stack, exc, syn_resp, st->complexity, ol_pitch_id, st->plc_tuning); } else { #endif /* Perform pitch search */ pitch = SUBMODE(ltp_quant)(target, sw, st->interp_qlpc, st->bw_lpc1, st->bw_lpc2, exc, SUBMODE(ltp_params), pit_min, pit_max, ol_pitch_coef, st->lpcSize, st->subframeSize, bits, stack, exc, syn_resp, st->complexity, 0, st->plc_tuning); #ifdef EPIC_48K } #endif st->pitch[sub]=pitch; } else { speex_error ("No pitch prediction, what's wrong"); } /* Quantization of innovation */ { spx_sig_t *innov; spx_word32_t ener=0; spx_word16_t fine_gain; innov = st->innov+sub*st->subframeSize; for (i=0;isubframeSize;i++) innov[i]=0; for (i=0;isubframeSize;i++) real_exc[i] = SUB32(real_exc[i], exc[i]); ener = SHL32(EXTEND32(compute_rms(real_exc, st->subframeSize)),SIG_SHIFT); /*FIXME: Should use DIV32_16 and make sure result fits in 16 bits */ #ifdef FIXED_POINT { spx_word32_t f = DIV32(ener,PSHR32(ol_gain,SIG_SHIFT)); if (f<=32767) fine_gain = f; else fine_gain = 32767; } #else fine_gain = DIV32_16(ener,PSHR32(ol_gain,SIG_SHIFT)); #endif /* Calculate gain correction for the sub-frame (if any) */ if (SUBMODE(have_subframe_gain)) { int qe; if (SUBMODE(have_subframe_gain)==3) { qe = scal_quant(fine_gain, exc_gain_quant_scal3_bound, 8); speex_bits_pack(bits, qe, 3); ener=MULT16_32_Q14(exc_gain_quant_scal3[qe],ol_gain); } else { qe = scal_quant(fine_gain, exc_gain_quant_scal1_bound, 2); speex_bits_pack(bits, qe, 1); ener=MULT16_32_Q14(exc_gain_quant_scal1[qe],ol_gain); } } else { ener=ol_gain; } /*printf ("%f %f\n", ener, ol_gain);*/ /* Normalize innovation */ signal_div(target, target, ener, st->subframeSize); /* Quantize innovation */ if (SUBMODE(innovation_quant)) { /* Codebook search */ SUBMODE(innovation_quant)(target, st->interp_qlpc, st->bw_lpc1, st->bw_lpc2, SUBMODE(innovation_params), st->lpcSize, st->subframeSize, innov, syn_resp, bits, stack, st->complexity, SUBMODE(double_codebook)); /* De-normalize innovation and update excitation */ signal_mul(innov, innov, ener, st->subframeSize); for (i=0;isubframeSize;i++) exc[i] = ADD32(exc[i],innov[i]); } else { speex_error("No fixed codebook"); } /* In some (rare) modes, we do a second search (more bits) to reduce noise even more */ if (SUBMODE(double_codebook)) { char *tmp_stack=stack; VARDECL(spx_sig_t *innov2); ALLOC(innov2, st->subframeSize, spx_sig_t); for (i=0;isubframeSize;i++) innov2[i]=0; for (i=0;isubframeSize;i++) target[i]*=2.2; SUBMODE(innovation_quant)(target, st->interp_qlpc, st->bw_lpc1, st->bw_lpc2, SUBMODE(innovation_params), st->lpcSize, st->subframeSize, innov2, syn_resp, bits, stack, st->complexity, 0); signal_mul(innov2, innov2, (spx_word32_t) (ener*(1.f/2.2f)), st->subframeSize); for (i=0;isubframeSize;i++) exc[i] = ADD32(exc[i],innov2[i]); stack = tmp_stack; } } /* Final signal synthesis from excitation */ iir_mem2(exc, st->interp_qlpc, sp, st->subframeSize, st->lpcSize, st->mem_sp); /* Compute weighted signal again, from synthesized speech (not sure it's the right thing) */ if (st->complexity!=0) filter_mem2(sp, st->bw_lpc1, st->bw_lpc2, sw, st->subframeSize, st->lpcSize, st->mem_sw); } /* Store the LSPs for interpolation in the next frame */ if (st->submodeID>=1) { for (i=0;ilpcSize;i++) st->old_lsp[i] = st->lsp[i]; for (i=0;ilpcSize;i++) st->old_qlsp[i] = st->qlsp[i]; } #ifdef VORBIS_PSYCHO if (st->submodeID>=1) { for (i=0;i<128;i++) st->old_curve[i] = st->curve[i]; } #endif if (st->submodeID==1) { if (st->dtx_count) speex_bits_pack(bits, 15, 4); else speex_bits_pack(bits, 0, 4); } /* The next frame will not be the first (Duh!) */ st->first = 0; #ifdef RESYNTH /* Replace input by synthesized speech */ for (i=0;iframeSize;i++) { spx_word32_t sig = PSHR32(st->frame[i],SIG_SHIFT); if (sig>32767) sig = 32767; if (sig<-32767) sig = -32767; in[i]=sig; } #endif if (SUBMODE(innovation_quant) == noise_codebook_quant || st->submodeID==0) st->bounded_pitch = 1; else st->bounded_pitch = 0; return 1; } void *nb_decoder_init(const SpeexMode *m) { DecState *st; const SpeexNBMode *mode; int i; mode=(const SpeexNBMode*)m->mode; st = (DecState *)speex_alloc(sizeof(DecState)); if (!st) return NULL; #if defined(VAR_ARRAYS) || defined (USE_ALLOCA) st->stack = NULL; #else st->stack = (char*)speex_alloc_scratch(NB_DEC_STACK); #endif st->mode=m; st->encode_submode = 1; #ifdef EPIC_48K st->lbr_48k=mode->lbr48k; #endif st->first=1; /* Codec parameters, should eventually have several "modes"*/ st->frameSize = mode->frameSize; st->nbSubframes=mode->frameSize/mode->subframeSize; st->subframeSize=mode->subframeSize; st->lpcSize = mode->lpcSize; st->min_pitch=mode->pitchStart; st->max_pitch=mode->pitchEnd; st->submodes=mode->submodes; st->submodeID=mode->defaultSubmode; st->lpc_enh_enabled=0; st->inBuf = speex_alloc((st->frameSize)*sizeof(spx_sig_t)); st->frame = st->inBuf; st->excBuf = speex_alloc((st->frameSize + st->max_pitch + 1)*sizeof(spx_sig_t)); st->exc = st->excBuf + st->max_pitch + 1; for (i=0;iframeSize;i++) st->inBuf[i]=0; for (i=0;iframeSize + st->max_pitch + 1;i++) st->excBuf[i]=0; st->innov = speex_alloc((st->frameSize)*sizeof(spx_sig_t)); st->interp_qlpc = speex_alloc(st->lpcSize*sizeof(spx_coef_t)); st->qlsp = speex_alloc(st->lpcSize*sizeof(spx_lsp_t)); st->old_qlsp = speex_alloc(st->lpcSize*sizeof(spx_lsp_t)); st->interp_qlsp = speex_alloc(st->lpcSize*sizeof(spx_lsp_t)); st->mem_sp = speex_alloc((5*st->lpcSize)*sizeof(spx_mem_t)); st->comb_mem = speex_alloc(sizeof(CombFilterMem)); comb_filter_mem_init (st->comb_mem); st->pi_gain = speex_alloc((st->nbSubframes)*sizeof(spx_word32_t)); st->last_pitch = 40; st->count_lost=0; st->pitch_gain_buf[0] = st->pitch_gain_buf[1] = st->pitch_gain_buf[2] = 0; st->pitch_gain_buf_idx = 0; st->seed = 1000; st->sampling_rate=8000; st->last_ol_gain = 0; st->user_callback.func = &speex_default_user_handler; st->user_callback.data = NULL; for (i=0;i<16;i++) st->speex_callbacks[i].func = NULL; st->voc_m1=st->voc_m2=st->voc_mean=0; st->voc_offset=0; st->dtx_enabled=0; #ifdef ENABLE_VALGRIND VALGRIND_MAKE_READABLE(st, (st->stack-(char*)st)); #endif return st; } void nb_decoder_destroy(void *state) { DecState *st; st=(DecState*)state; #if !(defined(VAR_ARRAYS) || defined (USE_ALLOCA)) speex_free_scratch(st->stack); #endif speex_free (st->inBuf); speex_free (st->excBuf); speex_free (st->innov); speex_free (st->interp_qlpc); speex_free (st->qlsp); speex_free (st->old_qlsp); speex_free (st->interp_qlsp); speex_free (st->mem_sp); speex_free (st->comb_mem); speex_free (st->pi_gain); speex_free(state); } #define median3(a, b, c) ((a) < (b) ? ((b) < (c) ? (b) : ((a) < (c) ? (c) : (a))) : ((c) < (b) ? (b) : ((c) < (a) ? (c) : (a)))) #ifdef FIXED_POINT const spx_word16_t attenuation[10] = {32767, 31483, 27923, 22861, 17278, 12055, 7764, 4616, 2533, 1283}; #else const spx_word16_t attenuation[10] = {1., 0.961, 0.852, 0.698, 0.527, 0.368, 0.237, 0.141, 0.077, 0.039}; #endif static void nb_decode_lost(DecState *st, spx_word16_t *out, char *stack) { int i, sub; int pitch_val; VARDECL(spx_coef_t *awk1); VARDECL(spx_coef_t *awk2); VARDECL(spx_coef_t *awk3); spx_word16_t pitch_gain; spx_word16_t fact; spx_word16_t gain_med; spx_word16_t innov_gain; if (st->count_lost<10) fact = attenuation[st->count_lost]; else fact = 0; gain_med = median3(st->pitch_gain_buf[0], st->pitch_gain_buf[1], st->pitch_gain_buf[2]); if (gain_med < st->last_pitch_gain) st->last_pitch_gain = gain_med; #ifdef FIXED_POINT pitch_gain = st->last_pitch_gain; if (pitch_gain>54) pitch_gain = 54; pitch_gain = SHL(pitch_gain, 9); #else pitch_gain = GAIN_SCALING_1*st->last_pitch_gain; if (pitch_gain>.85) pitch_gain=.85; #endif pitch_gain = MULT16_16_Q15(fact,pitch_gain) + VERY_SMALL; /* Shift all buffers by one frame */ /*speex_move(st->inBuf, st->inBuf+st->frameSize, (st->bufSize-st->frameSize)*sizeof(spx_sig_t));*/ speex_move(st->excBuf, st->excBuf+st->frameSize, (st->max_pitch + 1)*sizeof(spx_sig_t)); ALLOC(awk1, (st->lpcSize+1), spx_coef_t); ALLOC(awk2, (st->lpcSize+1), spx_coef_t); ALLOC(awk3, (st->lpcSize+1), spx_coef_t); for (sub=0;subnbSubframes;sub++) { int offset; spx_sig_t *sp, *exc; /* Offset relative to start of frame */ offset = st->subframeSize*sub; /* Original signal */ sp=st->frame+offset; /* Excitation */ exc=st->exc+offset; /* Excitation after post-filter*/ /* Calculate perceptually enhanced LPC filter */ if (st->lpc_enh_enabled) { spx_word16_t k1,k2,k3; if (st->submodes[st->submodeID] != NULL) { k1=SUBMODE(lpc_enh_k1); k2=SUBMODE(lpc_enh_k2); k3=SUBMODE(lpc_enh_k3); } else { k1=k2=.7*GAMMA_SCALING; k3=.0; } bw_lpc(k1, st->interp_qlpc, awk1, st->lpcSize); bw_lpc(k2, st->interp_qlpc, awk2, st->lpcSize); bw_lpc(k3, st->interp_qlpc, awk3, st->lpcSize); } /* Make up a plausible excitation */ /* FIXME: THIS CAN BE IMPROVED */ /*if (pitch_gain>.95) pitch_gain=.95;*/ innov_gain = compute_rms(st->innov, st->frameSize); pitch_val = st->last_pitch + SHR32((spx_int32_t)speex_rand(1+st->count_lost, &st->seed),SIG_SHIFT); if (pitch_val > st->max_pitch) pitch_val = st->max_pitch; if (pitch_val < st->min_pitch) pitch_val = st->min_pitch; for (i=0;isubframeSize;i++) { exc[i]= MULT16_32_Q15(pitch_gain, (exc[i-pitch_val]+VERY_SMALL)) + MULT16_32_Q15(fact, MULT16_32_Q15(SHL(Q15ONE,15)-SHL(MULT16_16(pitch_gain,pitch_gain),1),speex_rand(innov_gain, &st->seed))); } for (i=0;isubframeSize;i++) sp[i]=exc[i]; /* Signal synthesis */ if (st->lpc_enh_enabled) { filter_mem2(sp, awk2, awk1, sp, st->subframeSize, st->lpcSize, st->mem_sp+st->lpcSize); filter_mem2(sp, awk3, st->interp_qlpc, sp, st->subframeSize, st->lpcSize, st->mem_sp); } else { for (i=0;ilpcSize;i++) st->mem_sp[st->lpcSize+i] = 0; iir_mem2(sp, st->interp_qlpc, sp, st->subframeSize, st->lpcSize, st->mem_sp); } } for (i=0;iframeSize;i++) { spx_word32_t sig = PSHR32(st->frame[i],SIG_SHIFT); if (sig>32767) sig = 32767; if (sig<-32767) sig = -32767; out[i]=sig; } st->first = 0; st->count_lost++; st->pitch_gain_buf[st->pitch_gain_buf_idx++] = PSHR(pitch_gain,9); if (st->pitch_gain_buf_idx > 2) /* rollover */ st->pitch_gain_buf_idx = 0; } int nb_decode(void *state, SpeexBits *bits, void *vout) { DecState *st; int i, sub; int pitch; spx_word16_t pitch_gain[3]; spx_word32_t ol_gain=0; int ol_pitch=0; spx_word16_t ol_pitch_coef=0; int best_pitch=40; spx_word16_t best_pitch_gain=0; int wideband; int m; char *stack; VARDECL(spx_coef_t *awk1); VARDECL(spx_coef_t *awk2); VARDECL(spx_coef_t *awk3); spx_word16_t pitch_average=0; #ifdef EPIC_48K int pitch_half[2]; int ol_pitch_id=0; #endif spx_word16_t *out = vout; st=(DecState*)state; stack=st->stack; if (st->encode_submode) { #ifdef EPIC_48K if (!st->lbr_48k) { #endif /* Check if we're in DTX mode*/ if (!bits && st->dtx_enabled) { st->submodeID=0; } else { /* If bits is NULL, consider the packet to be lost (what could we do anyway) */ if (!bits) { nb_decode_lost(st, out, stack); return 0; } /* Search for next narrowband block (handle requests, skip wideband blocks) */ do { if (speex_bits_remaining(bits)<5) return -1; wideband = speex_bits_unpack_unsigned(bits, 1); if (wideband) /* Skip wideband block (for compatibility) */ { int submode; int advance; advance = submode = speex_bits_unpack_unsigned(bits, SB_SUBMODE_BITS); speex_mode_query(&speex_wb_mode, SPEEX_SUBMODE_BITS_PER_FRAME, &advance); if (advance < 0) { speex_warning ("Invalid wideband mode encountered. Corrupted stream?"); return -2; } advance -= (SB_SUBMODE_BITS+1); speex_bits_advance(bits, advance); if (speex_bits_remaining(bits)<5) return -1; wideband = speex_bits_unpack_unsigned(bits, 1); if (wideband) { advance = submode = speex_bits_unpack_unsigned(bits, SB_SUBMODE_BITS); speex_mode_query(&speex_wb_mode, SPEEX_SUBMODE_BITS_PER_FRAME, &advance); if (advance < 0) { speex_warning ("Invalid wideband mode encountered: corrupted stream?"); return -2; } advance -= (SB_SUBMODE_BITS+1); speex_bits_advance(bits, advance); wideband = speex_bits_unpack_unsigned(bits, 1); if (wideband) { speex_warning ("More than two wideband layers found: corrupted stream?"); return -2; } } } if (speex_bits_remaining(bits)<4) return -1; /* FIXME: Check for overflow */ m = speex_bits_unpack_unsigned(bits, 4); if (m==15) /* We found a terminator */ { return -1; } else if (m==14) /* Speex in-band request */ { int ret = speex_inband_handler(bits, st->speex_callbacks, state); if (ret) return ret; } else if (m==13) /* User in-band request */ { int ret = st->user_callback.func(bits, state, st->user_callback.data); if (ret) return ret; } else if (m>8) /* Invalid mode */ { speex_warning("Invalid mode encountered: corrupted stream?"); return -2; } } while (m>8); /* Get the sub-mode that was used */ st->submodeID = m; } #ifdef EPIC_48K } #endif } /* Shift all buffers by one frame */ speex_move(st->excBuf, st->excBuf+st->frameSize, (st->max_pitch + 1)*sizeof(spx_sig_t)); /* If null mode (no transmission), just set a couple things to zero*/ if (st->submodes[st->submodeID] == NULL) { VARDECL(spx_coef_t *lpc); ALLOC(lpc, st->lpcSize, spx_coef_t); bw_lpc(GAMMA_SCALING*.93, st->interp_qlpc, lpc, st->lpcSize); { float innov_gain=0; float pgain=GAIN_SCALING_1*st->last_pitch_gain; if (pgain>.6) pgain=.6; innov_gain = compute_rms(st->innov, st->frameSize); for (i=0;iframeSize;i++) st->exc[i]=VERY_SMALL; speex_rand_vec(innov_gain, st->exc, st->frameSize); } st->first=1; /* Final signal synthesis from excitation */ iir_mem2(st->exc, lpc, st->frame, st->frameSize, st->lpcSize, st->mem_sp); for (i=0;iframeSize;i++) { spx_word32_t sig = PSHR32(st->frame[i],SIG_SHIFT); if (sig>32767) sig = 32767; if (sig<-32767) sig = -32767; out[i]=sig; } st->count_lost=0; return 0; } /* Unquantize LSPs */ SUBMODE(lsp_unquant)(st->qlsp, st->lpcSize, bits); /*Damp memory if a frame was lost and the LSP changed too much*/ if (st->count_lost) { spx_word16_t fact; spx_word32_t lsp_dist=0; for (i=0;ilpcSize;i++) lsp_dist = ADD32(lsp_dist, EXTEND32(ABS(st->old_qlsp[i] - st->qlsp[i]))); #ifdef FIXED_POINT fact = SHR16(19661,SHR32(lsp_dist,LSP_SHIFT+2)); #else fact = .6*exp(-.2*lsp_dist); #endif for (i=0;i<2*st->lpcSize;i++) st->mem_sp[i] = MULT16_32_Q15(fact,st->mem_sp[i]); } /* Handle first frame and lost-packet case */ if (st->first || st->count_lost) { for (i=0;ilpcSize;i++) st->old_qlsp[i] = st->qlsp[i]; } #ifdef EPIC_48K if (st->lbr_48k) { pitch_half[0] = st->min_pitch+speex_bits_unpack_unsigned(bits, 7); pitch_half[1] = pitch_half[0]+speex_bits_unpack_unsigned(bits, 2)-1; ol_pitch_id = speex_bits_unpack_unsigned(bits, 3); ol_pitch_coef=GAIN_SCALING*0.13514*ol_pitch_id; { int qe; qe = speex_bits_unpack_unsigned(bits, 4); ol_gain = SIG_SCALING*exp((qe+2)/2.1),SIG_SHIFT; } } else { #endif /* Get open-loop pitch estimation for low bit-rate pitch coding */ if (SUBMODE(lbr_pitch)!=-1) { ol_pitch = st->min_pitch+speex_bits_unpack_unsigned(bits, 7); } if (SUBMODE(forced_pitch_gain)) { int quant; quant = speex_bits_unpack_unsigned(bits, 4); ol_pitch_coef=GAIN_SCALING*0.066667*quant; } /* Get global excitation gain */ { int qe; qe = speex_bits_unpack_unsigned(bits, 5); #ifdef FIXED_POINT ol_gain = MULT16_32_Q15(28406,ol_gain_table[qe]); #else ol_gain = SIG_SCALING*exp(qe/3.5); #endif } #ifdef EPIC_48K } #endif ALLOC(awk1, st->lpcSize+1, spx_coef_t); ALLOC(awk2, st->lpcSize+1, spx_coef_t); ALLOC(awk3, st->lpcSize+1, spx_coef_t); if (st->submodeID==1) { int extra; extra = speex_bits_unpack_unsigned(bits, 4); if (extra==15) st->dtx_enabled=1; else st->dtx_enabled=0; } if (st->submodeID>1) st->dtx_enabled=0; /*Loop on subframes */ for (sub=0;subnbSubframes;sub++) { int offset; spx_sig_t *sp, *exc; spx_word16_t tmp; #ifdef EPIC_48K if (st->lbr_48k) { if (sub*2 < st->nbSubframes) ol_pitch = pitch_half[0]; else ol_pitch = pitch_half[1]; } #endif /* Offset relative to start of frame */ offset = st->subframeSize*sub; /* Original signal */ sp=st->frame+offset; /* Excitation */ exc=st->exc+offset; /* Excitation after post-filter*/ /* LSP interpolation (quantized and unquantized) */ lsp_interpolate(st->old_qlsp, st->qlsp, st->interp_qlsp, st->lpcSize, sub, st->nbSubframes); /* Make sure the LSP's are stable */ lsp_enforce_margin(st->interp_qlsp, st->lpcSize, LSP_MARGIN); /* Compute interpolated LPCs (unquantized) */ lsp_to_lpc(st->interp_qlsp, st->interp_qlpc, st->lpcSize, stack); /* Compute enhanced synthesis filter */ if (st->lpc_enh_enabled) { bw_lpc(SUBMODE(lpc_enh_k1), st->interp_qlpc, awk1, st->lpcSize); bw_lpc(SUBMODE(lpc_enh_k2), st->interp_qlpc, awk2, st->lpcSize); bw_lpc(SUBMODE(lpc_enh_k3), st->interp_qlpc, awk3, st->lpcSize); } /* Compute analysis filter at w=pi */ { spx_word32_t pi_g=LPC_SCALING; for (i=0;ilpcSize;i+=2) { /*pi_g += -st->interp_qlpc[i] + st->interp_qlpc[i+1];*/ pi_g = ADD32(pi_g, SUB32(st->interp_qlpc[i+1],st->interp_qlpc[i])); } st->pi_gain[sub] = pi_g; } /* Reset excitation */ for (i=0;isubframeSize;i++) exc[i]=0; /*Adaptive codebook contribution*/ if (SUBMODE(ltp_unquant)) { int pit_min, pit_max; /* Handle pitch constraints if any */ if (SUBMODE(lbr_pitch) != -1) { int margin; margin = SUBMODE(lbr_pitch); if (margin) { /* GT - need optimization? if (ol_pitch < st->min_pitch+margin-1) ol_pitch=st->min_pitch+margin-1; if (ol_pitch > st->max_pitch-margin) ol_pitch=st->max_pitch-margin; pit_min = ol_pitch-margin+1; pit_max = ol_pitch+margin; */ pit_min = ol_pitch-margin+1; if (pit_min < st->min_pitch) pit_min = st->min_pitch; pit_max = ol_pitch+margin; if (pit_max > st->max_pitch) pit_max = st->max_pitch; } else { pit_min = pit_max = ol_pitch; } } else { pit_min = st->min_pitch; pit_max = st->max_pitch; } #ifdef EPIC_48K if (st->lbr_48k) { SUBMODE(ltp_unquant)(exc, pit_min, pit_max, ol_pitch_coef, SUBMODE(ltp_params), st->subframeSize, &pitch, &pitch_gain[0], bits, stack, st->count_lost, offset, st->last_pitch_gain, ol_pitch_id); } else { #endif SUBMODE(ltp_unquant)(exc, pit_min, pit_max, ol_pitch_coef, SUBMODE(ltp_params), st->subframeSize, &pitch, &pitch_gain[0], bits, stack, st->count_lost, offset, st->last_pitch_gain, 0); #ifdef EPIC_48K } #endif /* If we had lost frames, check energy of last received frame */ if (st->count_lost && ol_gain < st->last_ol_gain) { /*float fact = (float)ol_gain/(st->last_ol_gain+1); for (i=0;isubframeSize;i++) exc[i]*=fact;*/ spx_word16_t fact = DIV32_16(SHL32(EXTEND32(ol_gain),15),st->last_ol_gain+1); for (i=0;isubframeSize;i++) exc[i] = MULT16_32_Q15(fact, exc[i]); } tmp = gain_3tap_to_1tap(pitch_gain); pitch_average += tmp; if (tmp>best_pitch_gain) { best_pitch = pitch; best_pitch_gain = tmp; } } else { speex_error("No pitch prediction, what's wrong"); } /* Unquantize the innovation */ { int q_energy; spx_word32_t ener; spx_sig_t *innov; innov = st->innov+sub*st->subframeSize; for (i=0;isubframeSize;i++) innov[i]=0; /* Decode sub-frame gain correction */ if (SUBMODE(have_subframe_gain)==3) { q_energy = speex_bits_unpack_unsigned(bits, 3); ener = MULT16_32_Q14(exc_gain_quant_scal3[q_energy],ol_gain); } else if (SUBMODE(have_subframe_gain)==1) { q_energy = speex_bits_unpack_unsigned(bits, 1); ener = MULT16_32_Q14(exc_gain_quant_scal1[q_energy],ol_gain); } else { ener = ol_gain; } if (SUBMODE(innovation_unquant)) { /*Fixed codebook contribution*/ SUBMODE(innovation_unquant)(innov, SUBMODE(innovation_params), st->subframeSize, bits, stack); } else { speex_error("No fixed codebook"); } /* De-normalize innovation and update excitation */ #ifdef FIXED_POINT signal_mul(innov, innov, ener, st->subframeSize); #else signal_mul(innov, innov, ener, st->subframeSize); #endif /*Vocoder mode*/ if (st->submodeID==1) { float g=ol_pitch_coef*GAIN_SCALING_1; for (i=0;isubframeSize;i++) exc[i]=0; while (st->voc_offsetsubframeSize) { if (st->voc_offset>=0) exc[st->voc_offset]=SIG_SCALING*sqrt(1.0*ol_pitch); st->voc_offset+=ol_pitch; } st->voc_offset -= st->subframeSize; g=.5+2*(g-.6); if (g<0) g=0; if (g>1) g=1; for (i=0;isubframeSize;i++) { float exci=exc[i]; exc[i]=.8*g*exc[i]*ol_gain/SIG_SCALING + .6*g*st->voc_m1*ol_gain/SIG_SCALING + .5*g*innov[i] - .5*g*st->voc_m2 + (1-g)*innov[i]; st->voc_m1 = exci; st->voc_m2=innov[i]; st->voc_mean = .95*st->voc_mean + .05*exc[i]; exc[i]-=st->voc_mean; } } else { for (i=0;isubframeSize;i++) exc[i]=ADD32(exc[i],innov[i]); /*print_vec(exc, 40, "innov");*/ } /* Decode second codebook (only for some modes) */ if (SUBMODE(double_codebook)) { char *tmp_stack=stack; VARDECL(spx_sig_t *innov2); ALLOC(innov2, st->subframeSize, spx_sig_t); for (i=0;isubframeSize;i++) innov2[i]=0; SUBMODE(innovation_unquant)(innov2, SUBMODE(innovation_params), st->subframeSize, bits, stack); signal_mul(innov2, innov2, (spx_word32_t) (ener*(1/2.2)), st->subframeSize); for (i=0;isubframeSize;i++) exc[i] = ADD32(exc[i],innov2[i]); stack = tmp_stack; } } /* If the last packet was lost, re-scale the excitation to obtain the same energy as encoded in ol_gain */ if (st->count_lost) { spx_word16_t exc_ener; spx_word32_t gain32; spx_word16_t gain; exc_ener = compute_rms (exc, st->subframeSize); gain32 = DIV32(ol_gain, ADD16(exc_ener,1)); #ifdef FIXED_POINT if (gain32 > 32768) gain32 = 32768; gain = EXTRACT16(gain32); #else if (gain32 > 2) gain32=2; gain = gain32; #endif for (i=0;isubframeSize;i++) exc[i] = MULT16_32_Q14(gain, exc[i]); } for (i=0;isubframeSize;i++) sp[i]=exc[i]; /* Signal synthesis */ if (st->lpc_enh_enabled && SUBMODE(comb_gain)>0) comb_filter(exc, sp, st->interp_qlpc, st->lpcSize, st->subframeSize, pitch, pitch_gain, SUBMODE(comb_gain), st->comb_mem); if (st->lpc_enh_enabled) { /* Use enhanced LPC filter */ filter_mem2(sp, awk2, awk1, sp, st->subframeSize, st->lpcSize, st->mem_sp+st->lpcSize); filter_mem2(sp, awk3, st->interp_qlpc, sp, st->subframeSize, st->lpcSize, st->mem_sp); } else { /* Use regular filter */ for (i=0;ilpcSize;i++) st->mem_sp[st->lpcSize+i] = 0; iir_mem2(sp, st->interp_qlpc, sp, st->subframeSize, st->lpcSize, st->mem_sp); } } /*Copy output signal*/ for (i=0;iframeSize;i++) { spx_word32_t sig = PSHR32(st->frame[i],SIG_SHIFT); if (sig>32767) sig = 32767; if (sig<-32767) sig = -32767; out[i]=sig; } /*for (i=0;iframeSize;i++) printf ("%d\n", (int)st->frame[i]);*/ /* Store the LSPs for interpolation in the next frame */ for (i=0;ilpcSize;i++) st->old_qlsp[i] = st->qlsp[i]; /* The next frame will not be the first (Duh!) */ st->first = 0; st->count_lost=0; st->last_pitch = best_pitch; #ifdef FIXED_POINT st->last_pitch_gain = PSHR16(pitch_average,2); #else st->last_pitch_gain = .25*pitch_average; #endif st->pitch_gain_buf[st->pitch_gain_buf_idx++] = st->last_pitch_gain; if (st->pitch_gain_buf_idx > 2) /* rollover */ st->pitch_gain_buf_idx = 0; st->last_ol_gain = ol_gain; return 0; } int nb_encoder_ctl(void *state, int request, void *ptr) { EncState *st; st=(EncState*)state; switch(request) { case SPEEX_GET_FRAME_SIZE: (*(int*)ptr) = st->frameSize; break; case SPEEX_SET_LOW_MODE: case SPEEX_SET_MODE: st->submodeSelect = st->submodeID = (*(int*)ptr); break; case SPEEX_GET_LOW_MODE: case SPEEX_GET_MODE: (*(int*)ptr) = st->submodeID; break; case SPEEX_SET_VBR: st->vbr_enabled = (*(int*)ptr); break; case SPEEX_GET_VBR: (*(int*)ptr) = st->vbr_enabled; break; case SPEEX_SET_VAD: st->vad_enabled = (*(int*)ptr); break; case SPEEX_GET_VAD: (*(int*)ptr) = st->vad_enabled; break; case SPEEX_SET_DTX: st->dtx_enabled = (*(int*)ptr); break; case SPEEX_GET_DTX: (*(int*)ptr) = st->dtx_enabled; break; case SPEEX_SET_ABR: st->abr_enabled = (*(int*)ptr); st->vbr_enabled = 1; { int i=10, rate, target; float vbr_qual; target = (*(int*)ptr); while (i>=0) { speex_encoder_ctl(st, SPEEX_SET_QUALITY, &i); speex_encoder_ctl(st, SPEEX_GET_BITRATE, &rate); if (rate <= target) break; i--; } vbr_qual=i; if (vbr_qual<0) vbr_qual=0; speex_encoder_ctl(st, SPEEX_SET_VBR_QUALITY, &vbr_qual); st->abr_count=0; st->abr_drift=0; st->abr_drift2=0; } break; case SPEEX_GET_ABR: (*(int*)ptr) = st->abr_enabled; break; case SPEEX_SET_VBR_QUALITY: st->vbr_quality = (*(float*)ptr); break; case SPEEX_GET_VBR_QUALITY: (*(float*)ptr) = st->vbr_quality; break; case SPEEX_SET_QUALITY: { int quality = (*(int*)ptr); if (quality < 0) quality = 0; if (quality > 10) quality = 10; st->submodeSelect = st->submodeID = ((const SpeexNBMode*)(st->mode->mode))->quality_map[quality]; } break; case SPEEX_SET_COMPLEXITY: st->complexity = (*(int*)ptr); if (st->complexity<0) st->complexity=0; break; case SPEEX_GET_COMPLEXITY: (*(int*)ptr) = st->complexity; break; case SPEEX_SET_BITRATE: { int i=10, rate, target; target = (*(int*)ptr); while (i>=0) { speex_encoder_ctl(st, SPEEX_SET_QUALITY, &i); speex_encoder_ctl(st, SPEEX_GET_BITRATE, &rate); if (rate <= target) break; i--; } } break; case SPEEX_GET_BITRATE: if (st->submodes[st->submodeID]) (*(int*)ptr) = st->sampling_rate*SUBMODE(bits_per_frame)/st->frameSize; else (*(int*)ptr) = st->sampling_rate*(NB_SUBMODE_BITS+1)/st->frameSize; break; case SPEEX_SET_SAMPLING_RATE: st->sampling_rate = (*(int*)ptr); break; case SPEEX_GET_SAMPLING_RATE: (*(int*)ptr)=st->sampling_rate; break; case SPEEX_RESET_STATE: { int i; st->bounded_pitch = 1; st->first = 1; for (i=0;ilpcSize;i++) st->lsp[i]=(M_PI*((float)(i+1)))/(st->lpcSize+1); for (i=0;ilpcSize;i++) st->mem_sw[i]=st->mem_sw_whole[i]=st->mem_sp[i]=st->mem_exc[i]=0; for (i=0;iframeSize+st->max_pitch+1;i++) st->excBuf[i]=st->swBuf[i]=0; for (i=0;iwindowSize;i++) st->inBuf[i]=0; } break; case SPEEX_SET_SUBMODE_ENCODING: st->encode_submode = (*(int*)ptr); break; case SPEEX_GET_SUBMODE_ENCODING: (*(int*)ptr) = st->encode_submode; break; case SPEEX_GET_LOOKAHEAD: (*(int*)ptr)=(st->windowSize-st->frameSize); break; case SPEEX_SET_PLC_TUNING: st->plc_tuning = (*(int*)ptr); if (st->plc_tuning>100) st->plc_tuning=100; break; case SPEEX_GET_PLC_TUNING: (*(int*)ptr)=(st->plc_tuning); break; case SPEEX_GET_PI_GAIN: { int i; spx_word32_t *g = (spx_word32_t*)ptr; for (i=0;inbSubframes;i++) g[i]=st->pi_gain[i]; } break; case SPEEX_GET_EXC: { int i; spx_sig_t *e = (spx_sig_t*)ptr; for (i=0;iframeSize;i++) e[i]=st->exc[i]; } break; case SPEEX_GET_INNOV: { int i; spx_sig_t *e = (spx_sig_t*)ptr; for (i=0;iframeSize;i++) e[i]=st->innov[i]; } break; case SPEEX_GET_RELATIVE_QUALITY: (*(float*)ptr)=st->relative_quality; break; default: speex_warning_int("Unknown nb_ctl request: ", request); return -1; } return 0; } int nb_decoder_ctl(void *state, int request, void *ptr) { DecState *st; st=(DecState*)state; switch(request) { case SPEEX_SET_LOW_MODE: case SPEEX_SET_MODE: st->submodeID = (*(int*)ptr); break; case SPEEX_GET_LOW_MODE: case SPEEX_GET_MODE: (*(int*)ptr) = st->submodeID; break; case SPEEX_SET_ENH: st->lpc_enh_enabled = *((int*)ptr); break; case SPEEX_GET_ENH: *((int*)ptr) = st->lpc_enh_enabled; break; case SPEEX_GET_FRAME_SIZE: (*(int*)ptr) = st->frameSize; break; case SPEEX_GET_BITRATE: if (st->submodes[st->submodeID]) (*(int*)ptr) = st->sampling_rate*SUBMODE(bits_per_frame)/st->frameSize; else (*(int*)ptr) = st->sampling_rate*(NB_SUBMODE_BITS+1)/st->frameSize; break; case SPEEX_SET_SAMPLING_RATE: st->sampling_rate = (*(int*)ptr); break; case SPEEX_GET_SAMPLING_RATE: (*(int*)ptr)=st->sampling_rate; break; case SPEEX_SET_HANDLER: { SpeexCallback *c = (SpeexCallback*)ptr; st->speex_callbacks[c->callback_id].func=c->func; st->speex_callbacks[c->callback_id].data=c->data; st->speex_callbacks[c->callback_id].callback_id=c->callback_id; } break; case SPEEX_SET_USER_HANDLER: { SpeexCallback *c = (SpeexCallback*)ptr; st->user_callback.func=c->func; st->user_callback.data=c->data; st->user_callback.callback_id=c->callback_id; } break; case SPEEX_RESET_STATE: { int i; for (i=0;i<2*st->lpcSize;i++) st->mem_sp[i]=0; for (i=0;iframeSize + st->max_pitch + 1;i++) st->excBuf[i]=0; for (i=0;iframeSize;i++) st->inBuf[i] = 0; } break; case SPEEX_SET_SUBMODE_ENCODING: st->encode_submode = (*(int*)ptr); break; case SPEEX_GET_SUBMODE_ENCODING: (*(int*)ptr) = st->encode_submode; break; case SPEEX_GET_PI_GAIN: { int i; spx_word32_t *g = (spx_word32_t*)ptr; for (i=0;inbSubframes;i++) g[i]=st->pi_gain[i]; } break; case SPEEX_GET_EXC: { int i; spx_sig_t *e = (spx_sig_t*)ptr; for (i=0;iframeSize;i++) e[i]=st->exc[i]; } break; case SPEEX_GET_INNOV: { int i; spx_sig_t *e = (spx_sig_t*)ptr; for (i=0;iframeSize;i++) e[i]=st->innov[i]; } break; case SPEEX_GET_DTX_STATUS: *((int*)ptr) = st->dtx_enabled; break; default: speex_warning_int("Unknown nb_ctl request: ", request); return -1; } return 0; } h323plus/plugins/audio/Speex/libspeex/vq_sse.h0000644000175000017500000000725711341106241020245 0ustar markmark/* Copyright (C) 2004 Jean-Marc Valin */ /** @file vq_sse.h @brief SSE-optimized vq routine */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #define OVERRIDE_VQ_NBEST void vq_nbest(spx_word16_t *_in, const __m128 *codebook, int len, int entries, __m128 *E, int N, int *nbest, spx_word32_t *best_dist, char *stack) { int i,j,k,used; VARDECL(float *dist); VARDECL(__m128 *in); __m128 half; used = 0; ALLOC(dist, entries, float); half = _mm_set_ps1(.5f); ALLOC(in, len, __m128); for (i=0;i>2;i++) { __m128 d = _mm_mul_ps(E[i], half); for (j=0;j= 1) && (k > used || dist[i] < best_dist[k-1]); k--) { best_dist[k]=best_dist[k-1]; nbest[k] = nbest[k-1]; } best_dist[k]=dist[i]; nbest[k]=i; used++; } } } #define OVERRIDE_VQ_NBEST_SIGN void vq_nbest_sign(spx_word16_t *_in, const __m128 *codebook, int len, int entries, __m128 *E, int N, int *nbest, spx_word32_t *best_dist, char *stack) { int i,j,k,used; VARDECL(float *dist); VARDECL(__m128 *in); __m128 half; used = 0; ALLOC(dist, entries, float); half = _mm_set_ps1(.5f); ALLOC(in, len, __m128); for (i=0;i>2;i++) { __m128 d = _mm_setzero_ps(); for (j=0;j0) { sign=0; dist[i]=-dist[i]; } else { sign=1; } dist[i] += .5f*((float*)E)[i]; if (i= 1) && (k > used || dist[i] < best_dist[k-1]); k--) { best_dist[k]=best_dist[k-1]; nbest[k] = nbest[k-1]; } best_dist[k]=dist[i]; nbest[k]=i; used++; if (sign) nbest[k]+=entries; } } } h323plus/plugins/audio/Speex/libspeex/medfilter.c0000644000175000017500000000552711341106241020711 0ustar markmark/* Copyright (C) 2004 Jean-Marc Valin File medfilter.c Median filter Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "medfilter.h" #include "misc.h" MedianFilter *median_filter_new(int N) { MedianFilter *f = speex_alloc(sizeof(MedianFilter)); f->N = N; f->ids = speex_alloc(sizeof(int)*N); f->val = speex_alloc(sizeof(float)*N); f->filled = 0; return f; } void median_filter_update(MedianFilter *f, float val) { int i=0; int insert = 0; while (insertfilled && f->val[insert] < val) { insert++; } if (f->filled == f->N) { int remove; for (remove=0;removeN;remove++) if (f->ids[remove] == 0) break; if (insert>remove) insert--; if (insert > remove) { for (i=remove;ival[i] = f->val[i+1]; f->ids[i] = f->ids[i+1]; } } else if (insert < remove) { for (i=remove;i>insert;i--) { f->val[i] = f->val[i-1]; f->ids[i] = f->ids[i-1]; } } for (i=0;ifilled;i++) f->ids[i]--; } else { for (i=f->filled;i>insert;i--) { f->val[i] = f->val[i-1]; f->ids[i] = f->ids[i-1]; } f->filled++; } f->val[insert]=val; f->ids[insert]=f->filled-1; } float median_filter_get(MedianFilter *f) { return f->val[f->filled>>1]; } h323plus/plugins/audio/Speex/libspeex/Makefile.am0000644000175000017500000000275011341106241020621 0ustar markmark# Disable automatic dependency tracking if using other tools than gcc and gmake #AUTOMAKE_OPTIONS = no-dependencies EXTRA_DIST=testenc.c testenc_wb.c testenc_uwb.c testdenoise.c testecho.c INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include -I$(top_builddir) @OGG_CFLAGS@ lib_LTLIBRARIES = libspeex.la # Sources for compilation in the library libspeex_la_SOURCES = nb_celp.c \ sb_celp.c \ lpc.c \ ltp.c \ lsp.c \ quant_lsp.c \ lsp_tables_nb.c \ gain_table.c \ gain_table_lbr.c \ cb_search.c \ filters.c \ bits.c \ modes.c \ speex.c \ vq.c \ high_lsp_tables.c \ vbr.c \ hexc_table.c \ exc_5_256_table.c \ exc_5_64_table.c \ exc_8_128_table.c \ exc_10_32_table.c \ exc_10_16_table.c \ exc_20_32_table.c \ hexc_10_32_table.c \ misc.c \ speex_header.c \ speex_callbacks.c \ math_approx.c \ stereo.c \ preprocess.c \ smallft.c \ lbr_48k_tables.c \ jitter.c \ mdf.c noinst_HEADERS = lsp.h \ nb_celp.h \ lpc.h \ lpc_bfin.h \ ltp.h \ quant_lsp.h \ cb_search.h \ filters.h \ stack_alloc.h \ vq.h \ vq_sse.h \ vq_arm4.h \ vq_bfin.h \ modes.h \ sb_celp.h \ vbr.h \ misc.h \ misc_bfin.h \ ltp_sse.h \ ltp_arm4.h \ ltp_bfin.h \ filters_sse.h \ filters_arm4.h \ filters_bfin.h \ math_approx.h \ smallft.h \ arch.h \ fixed_arm4.h \ fixed_arm5e.h \ fixed_bfin.h \ fixed_debug.h \ fixed_generic.h \ cb_search_sse.h \ cb_search_arm4.h \ cb_search_bfin.h libspeex_la_LDFLAGS = -version-info @SPEEX_LT_CURRENT@:@SPEEX_LT_REVISION@:@SPEEX_LT_AGE@ h323plus/plugins/audio/Speex/libspeex/pcm_wrapper.c0000644000175000017500000001104211341106241021242 0ustar markmark/* Copyright (C) 2005 Jean-Marc Valin */ /** @file pcm_wrapper.c @brief PCM encoding wrapped as a Speex mode */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "pcm_wrapper.h" #include "misc.h" typedef struct { const SpeexMode *mode; int frame_size; int format; } PCMState; /** Initializes encoder state*/ static void *pcm_encoder_init(const SpeexMode *m) { PCMState *st = (PCMState*)speex_alloc(sizeof(PCMState)); st->mode = m; st->frame_size = 64; } /** De-allocates encoder state resources*/ static void pcm_encoder_destroy(void *state) { speex_free(state); } /** Encodes one frame*/ static int pcm_encode(void *state, void *vin, SpeexBits *bits) { int i; PCMState *st = (PCMState*)state; spx_word16_t *in = vin; for (i=0;iframe_size;i++) { spx_int16_t x; x = in[i]; speex_bits_pack(bits, x, 16); } } /** Initializes decoder state*/ static void *pcm_decoder_init(const SpeexMode *m) { PCMState *st = (PCMState*)speex_alloc(sizeof(PCMState)); st->mode = m; st->frame_size = 64; } /** De-allocates decoder state resources*/ static void pcm_decoder_destroy(void *state) { speex_free(state); } /** Decodes one frame*/ static int pcm_decode(void *state, SpeexBits *bits, void *vout) { int i; PCMState *st = (PCMState*)state; spx_word16_t *out = vout; for (i=0;iframe_size;i++) { spx_int16_t x; x = speex_bits_unpack_signed(bits, 16); out[i] = x; } } /** ioctl-like function for controlling a narrowband encoder */ static int pcm_encoder_ctl(void *state, int request, void *ptr) { PCMState *st; st=(PCMState*)state; switch(request) { case PCM_SET_FRAME_SIZE: st->frame_size = (*(int*)ptr); break; case PCM_GET_FRAME_SIZE: (*(int*)ptr) = st->frame_size; break; default: speex_warning_int("Unknown nb_ctl request: ", request); return -1; } } /** ioctl-like function for controlling a narrowband decoder */ static int pcm_decoder_ctl(void *state, int request, void *ptr) { PCMState *st; st=(PCMState*)state; switch(request) { case PCM_SET_FRAME_SIZE: st->frame_size = (*(int*)ptr); break; case PCM_GET_FRAME_SIZE: (*(int*)ptr) = st->frame_size; break; default: speex_warning_int("Unknown nb_ctl request: ", request); return -1; } } typedef struct { int dummy; } PCMMode; static PCMMode pcmmode; int pcm_mode_query(const void *mode, int request, void *ptr) { const PCMMode *m = (const PCMMode*)mode; switch (request) { default: speex_warning_int("Unknown nb_mode_query request: ", request); return -1; } return 0; } /* Default mode for narrowband */ const SpeexMode pcm_wrapper_mode = { &pcmmode, pcm_mode_query, "PCM", 0, 4, &pcm_encoder_init, &pcm_encoder_destroy, &pcm_encode, &pcm_decoder_init, &pcm_decoder_destroy, &pcm_decode, &pcm_encoder_ctl, &pcm_decoder_ctl, }; const SpeexMode *speex_pcm_wrapper = &pcm_wrapper_mode; h323plus/plugins/audio/Speex/libspeex/pcm_wrapper.h0000644000175000017500000000364511341106241021261 0ustar markmark/* Copyright (C) 2005 Jean-Marc Valin */ /** @file pcm_wrapper.h @brief PCM encoding wrapped as a Speex mode */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef PCM_WRAPPER_H #define PCM_WRAPPER_H #include "speex.h" #ifdef __cplusplus extern "C" { #endif #define PCM_SET_FRAME_SIZE 2 #define PCM_GET_FRAME_SIZE 3 #define PCM_SET_FORMAT 2000 #define PCM_GET_FORMAT 2001 /** PCM wrapper mode */ extern const SpeexMode *speex_pcm_wrapper; #ifdef __cplusplus } #endif #endif h323plus/plugins/audio/Speex/libspeex/vorbis_psy.h0000644000175000017500000000632611341106241021140 0ustar markmark/* Copyright (C) 2005 Jean-Marc Valin, CSIRO, Christopher Montgomery File: vorbis_psy.h Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef VORBIS_PSY_H #define VORBIS_PSY_H #ifdef VORBIS_PSYCHO #include "smallft.h" #define P_BANDS 17 /* 62Hz to 16kHz */ #define NOISE_COMPAND_LEVELS 40 #define todB(x) ((x)==0?-400.f:log((x)*(x))*4.34294480f) #define fromdB(x) (exp((x)*.11512925f)) /* The bark scale equations are approximations, since the original table was somewhat hand rolled. The below are chosen to have the best possible fit to the rolled tables, thus their somewhat odd appearance (these are more accurate and over a longer range than the oft-quoted bark equations found in the texts I have). The approximations are valid from 0 - 30kHz (nyquist) or so. all f in Hz, z in Bark */ #define toBARK(n) (13.1f*atan(.00074f*(n))+2.24f*atan((n)*(n)*1.85e-8f)+1e-4f*(n)) #define fromBARK(z) (102.f*(z)-2.f*pow(z,2.f)+.4f*pow(z,3.f)+pow(1.46f,z)-1.f) /* Frequency to octave. We arbitrarily declare 63.5 Hz to be octave 0.0 */ #define toOC(n) (log(n)*1.442695f-5.965784f) #define fromOC(o) (exp(((o)+5.965784f)*.693147f)) typedef struct { float noisewindowlo; float noisewindowhi; int noisewindowlomin; int noisewindowhimin; int noisewindowfixed; float noiseoff[P_BANDS]; float noisecompand[NOISE_COMPAND_LEVELS]; } VorbisPsyInfo; typedef struct { int n; int rate; struct drft_lookup lookup; VorbisPsyInfo *vi; float *window; float *noiseoffset; long *bark; } VorbisPsy; VorbisPsy *vorbis_psy_init(int rate, int size); void vorbis_psy_destroy(VorbisPsy *psy); void compute_curve(VorbisPsy *psy, float *audio, float *curve); void curve_to_lpc(VorbisPsy *psy, float *curve, float *awk1, float *awk2, int ord); #endif #endif h323plus/plugins/audio/Speex/libspeex/lpc.h0000644000175000017500000000413611341106241017514 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin */ /** @file lpc.h @brief Functions for LPC (Linear Prediction Coefficients) analysis */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef LPC_H #define LPC_H #include "misc.h" void _spx_autocorr( const spx_word16_t * x, /* in: [0...n-1] samples x */ spx_word16_t *ac, /* out: [0...lag-1] ac values */ int lag, int n); spx_word32_t /* returns minimum mean square error */ _spx_lpc( spx_coef_t * lpc, /* [0...p-1] LPC coefficients */ const spx_word16_t * ac, /* in: [0...p] autocorrelation values */ int p ); #endif h323plus/plugins/audio/Speex/libspeex/testenc_uwb.c0000644000175000017500000000656011341106241021256 0ustar markmark#ifdef HAVE_CONFIG_H #include "config.h" #endif #include "speex.h" #include #include #include "speex_callbacks.h" #ifdef FIXED_DEBUG extern long long spx_mips; #endif #define FRAME_SIZE 640 #include int main(int argc, char **argv) { char *inFile, *outFile, *bitsFile; FILE *fin, *fout, *fbits=NULL; short in_short[FRAME_SIZE]; short out_short[FRAME_SIZE]; float in_float[FRAME_SIZE]; float sigpow,errpow,snr, seg_snr=0; int snr_frames = 0; char cbits[200]; int nbBits; int i; void *st; void *dec; SpeexBits bits; int tmp; int bitCount=0; int skip_group_delay; SpeexCallback callback; sigpow = 0; errpow = 0; st = speex_encoder_init(&speex_uwb_mode); dec = speex_decoder_init(&speex_uwb_mode); callback.callback_id = SPEEX_INBAND_CHAR; callback.func = speex_std_char_handler; callback.data = stderr; speex_decoder_ctl(dec, SPEEX_SET_HANDLER, &callback); callback.callback_id = SPEEX_INBAND_MODE_REQUEST; callback.func = speex_std_mode_request_handler; callback.data = st; speex_decoder_ctl(dec, SPEEX_SET_HANDLER, &callback); tmp=0; speex_decoder_ctl(dec, SPEEX_SET_ENH, &tmp); tmp=0; speex_encoder_ctl(st, SPEEX_SET_VBR, &tmp); tmp=7; speex_encoder_ctl(st, SPEEX_SET_QUALITY, &tmp); tmp=1; speex_encoder_ctl(st, SPEEX_SET_COMPLEXITY, &tmp); speex_mode_query(&speex_nb_mode, SPEEX_MODE_FRAME_SIZE, &tmp); fprintf (stderr, "frame size: %d\n", tmp); skip_group_delay = 509; if (argc != 4 && argc != 3) { fprintf (stderr, "Usage: encode [in file] [out file] [bits file]\nargc = %d", argc); exit(1); } inFile = argv[1]; fin = fopen(inFile, "r"); outFile = argv[2]; fout = fopen(outFile, "w+"); if (argc==4) { bitsFile = argv[3]; fbits = fopen(bitsFile, "w"); } speex_bits_init(&bits); while (!feof(fin)) { fread(in_short, sizeof(short), FRAME_SIZE, fin); if (feof(fin)) break; for (i=0;i>1; j++) { spx_word16_t tmp = lpc[j]; lpc[j] = MAC16_16_Q13(lpc[j],r,lpc[i-1-j]); lpc[i-1-j] = MAC16_16_Q13(lpc[i-1-j],r,tmp); } if (i & 1) lpc[j] = MAC16_16_Q13(lpc[j],lpc[j],r); error = SUB16(error,MULT16_16_Q13(r,MULT16_16_Q13(error,r))); } return error; } #ifdef FIXED_POINT /* Compute the autocorrelation * ,--, * ac(i) = > x(n) * x(n-i) for all n * `--' * for lags between 0 and lag-1, and x == 0 outside 0...n-1 */ #ifndef OVERRIDE_SPEEX_AUTOCORR void _spx_autocorr( const spx_word16_t *x, /* in: [0...n-1] samples x */ spx_word16_t *ac, /* out: [0...lag-1] ac values */ int lag, int n ) { spx_word32_t d; int i, j; spx_word32_t ac0=1; int shift, ac_shift; for (j=0;j x(n) * x(n-i) for all n * `--' * for lags between 0 and lag-1, and x == 0 outside 0...n-1 */ void _spx_autocorr( const spx_word16_t *x, /* in: [0...n-1] samples x */ float *ac, /* out: [0...lag-1] ac values */ int lag, int n ) { float d; int i; while (lag--) { for (i = lag, d = 0; i < n; i++) d += x[i] * x[i-lag]; ac[lag] = d; } ac[0] += 10; } #endif h323plus/plugins/audio/Speex/libspeex/lsp_tables_nb.c0000644000175000017500000002017311341106241021537 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin File: lsp_tables_nb.c Codebooks for LSPs in narrowband CELP mode Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ const signed char cdbk_nb[640]={ 30,19,38,34,40,32,46,43,58,43, 5,-18,-25,-40,-33,-55,-52,20,34,28, -20,-63,-97,-92,61,53,47,49,53,75, -14,-53,-77,-79,0,-3,-5,19,22,26, -9,-53,-55,66,90,72,85,68,74,52, -4,-41,-58,-31,-18,-31,27,32,30,18, 24,3,8,5,-12,-3,26,28,74,63, -2,-39,-67,-77,-106,-74,59,59,73,65, 44,40,71,72,82,83,98,88,89,60, -6,-31,-47,-48,-13,-39,-9,7,2,79, -1,-39,-60,-17,87,81,65,50,45,19, -21,-67,-91,-87,-41,-50,7,18,39,74, 10,-31,-28,39,24,13,23,5,56,45, 29,10,-5,-13,-11,-35,-18,-8,-10,-8, -25,-71,-77,-21,2,16,50,63,87,87, 5,-32,-40,-51,-68,0,12,6,54,34, 5,-12,32,52,68,64,69,59,65,45, 14,-16,-31,-40,-65,-67,41,49,47,37, -11,-52,-75,-84,-4,57,48,42,42,33, -11,-51,-68,-6,13,0,8,-8,26,32, -23,-53,0,36,56,76,97,105,111,97, -1,-28,-39,-40,-43,-54,-44,-40,-18,35, 16,-20,-19,-28,-42,29,47,38,74,45, 3,-29,-48,-62,-80,-104,-33,56,59,59, 10,17,46,72,84,101,117,123,123,106, -7,-33,-49,-51,-70,-67,-27,-31,70,67, -16,-62,-85,-20,82,71,86,80,85,74, -19,-58,-75,-45,-29,-33,-18,-25,45,57, -12,-42,-5,12,28,36,52,64,81,82, 13,-9,-27,-28,22,3,2,22,26,6, -6,-44,-51,2,15,10,48,43,49,34, -19,-62,-84,-89,-102,-24,8,17,61,68, 39,24,23,19,16,-5,12,15,27,15, -8,-44,-49,-60,-18,-32,-28,52,54,62, -8,-48,-77,-70,66,101,83,63,61,37, -12,-50,-75,-64,33,17,13,25,15,77, 1,-42,-29,72,64,46,49,31,61,44, -8,-47,-54,-46,-30,19,20,-1,-16,0, 16,-12,-18,-9,-26,-27,-10,-22,53,45, -10,-47,-75,-82,-105,-109,8,25,49,77, 50,65,114,117,124,118,115,96,90,61, -9,-45,-63,-60,-75,-57,8,11,20,29, 0,-35,-49,-43,40,47,35,40,55,38, -24,-76,-103,-112,-27,3,23,34,52,75, 8,-29,-43,12,63,38,35,29,24,8, 25,11,1,-15,-18,-43,-7,37,40,21, -20,-56,-19,-19,-4,-2,11,29,51,63, -2,-44,-62,-75,-89,30,57,51,74,51, 50,46,68,64,65,52,63,55,65,43, 18,-9,-26,-35,-55,-69,3,6,8,17, -15,-61,-86,-97,1,86,93,74,78,67, -1,-38,-66,-48,48,39,29,25,17,-1, 13,13,29,39,50,51,69,82,97,98, -2,-36,-46,-27,-16,-30,-13,-4,-7,-4, 25,-5,-11,-6,-25,-21,33,12,31,29, -8,-38,-52,-63,-68,-89,-33,-1,10,74, -2,-15,59,91,105,105,101,87,84,62, -7,-33,-50,-35,-54,-47,25,17,82,81, -13,-56,-83,21,58,31,42,25,72,65, -24,-66,-91,-56,9,-2,21,10,69,75, 2,-24,11,22,25,28,38,34,48,33, 7,-29,-26,17,15,-1,14,0,-2,0, -6,-41,-67,6,-2,-9,19,2,85,74, -22,-67,-84,-71,-50,3,11,-9,2,62}; const signed char cdbk_nb_low1[320]={ -34,-52,-15,45,2, 23,21,52,24,-33, -9,-1,9,-44,-41, -13,-17,44,22,-17, -6,-4,-1,22,38, 26,16,2,50,27, -35,-34,-9,-41,6, 0,-16,-34,51,8, -14,-31,-49,15,-33, 45,49,33,-11,-37, -62,-54,45,11,-5, -72,11,-1,-12,-11, 24,27,-11,-43,46, 43,33,-12,-9,-1, 1,-4,-23,-57,-71, 11,8,16,17,-8, -20,-31,-41,53,48, -16,3,65,-24,-8, -23,-32,-37,-32,-49, -10,-17,6,38,5, -9,-17,-46,8,52, 3,6,45,40,39, -7,-6,-34,-74,31, 8,1,-16,43,68, -11,-19,-31,4,6, 0,-6,-17,-16,-38, -16,-30,2,9,-39, -16,-1,43,-10,48, 3,3,-16,-31,-3, 62,68,43,13,3, -10,8,20,-56,12, 12,-2,-18,22,-15, -40,-36,1,7,41, 0,1,46,-6,-62, -4,-12,-2,-11,-83, -13,-2,91,33,-10, 0,4,-11,-16,79, 32,37,14,9,51, -21,-28,-56,-34,0, 21,9,-26,11,28, -42,-54,-23,-2,-15, 31,30,8,-39,-66, -39,-36,31,-28,-40, -46,35,40,22,24, 33,48,23,-34,14, 40,32,17,27,-3, 25,26,-13,-61,-17, 11,4,31,60,-6, -26,-41,-64,13,16, -26,54,31,-11,-23, -9,-11,-34,-71,-21, -34,-35,55,50,29, -22,-27,-50,-38,57, 33,42,57,48,26, 11,0,-49,-31,26, -4,-14,5,78,37, 17,0,-49,-12,-23, 26,14,2,2,-43, -17,-12,10,-8,-4, 8,18,12,-6,20, -12,-6,-13,-25,34, 15,40,49,7,8, 13,20,20,-19,-22, -2,-8,2,51,-51}; const signed char cdbk_nb_low2[320]={ -6,53,-21,-24,4, 26,17,-4,-37,25, 17,-36,-13,31,3, -6,27,15,-10,31, 28,26,-10,-10,-40, 16,-7,15,13,41, -9,0,-4,50,-6, -7,14,38,22,0, -48,2,1,-13,-19, 32,-3,-60,11,-17, -1,-24,-34,-1,35, -5,-27,28,44,13, 25,15,42,-11,15, 51,35,-36,20,8, -4,-12,-29,19,-47, 49,-15,-4,16,-29, -39,14,-30,4,25, -9,-5,-51,-14,-3, -40,-32,38,5,-9, -8,-4,-1,-22,71, -3,14,26,-18,-22, 24,-41,-25,-24,6, 23,19,-10,39,-26, -27,65,45,2,-7, -26,-8,22,-12,16, 15,16,-35,-5,33, -21,-8,0,23,33, 34,6,21,36,6, -7,-22,8,-37,-14, 31,38,11,-4,-3, -39,-32,-8,32,-23, -6,-12,16,20,-28, -4,23,13,-52,-1, 22,6,-33,-40,-6, 4,-62,13,5,-26, 35,39,11,2,57, -11,9,-20,-28,-33, 52,-5,-6,-2,22, -14,-16,-48,35,1, -58,20,13,33,-1, -74,56,-18,-22,-31, 12,6,-14,4,-2, -9,-47,10,-3,29, -17,-5,61,14,47, -12,2,72,-39,-17, 92,64,-53,-51,-15, -30,-38,-41,-29,-28, 27,9,36,9,-35, -42,81,-21,20,25, -16,-5,-17,-35,21, 15,-28,48,2,-2, 9,-19,29,-40,30, -18,-18,18,-16,-57, 15,-20,-12,-15,-37, -15,33,-39,21,-22, -13,35,11,13,-38, -63,29,23,-27,32, 18,3,-26,42,33, -64,-66,-17,16,56, 2,36,3,31,21, -41,-39,8,-57,14, 37,-2,19,-36,-19, -23,-29,-16,1,-3, -8,-10,31,64,-65}; const signed char cdbk_nb_high1[320]={ -26,-8,29,21,4, 19,-39,33,-7,-36, 56,54,48,40,29, -4,-24,-42,-66,-43, -60,19,-2,37,41, -10,-37,-60,-64,18, -22,77,73,40,25, 4,19,-19,-66,-2, 11,5,21,14,26, -25,-86,-4,18,1, 26,-37,10,37,-1, 24,-12,-59,-11,20, -6,34,-16,-16,42, 19,-28,-51,53,32, 4,10,62,21,-12, -34,27,4,-48,-48, -50,-49,31,-7,-21, -42,-25,-4,-43,-22, 59,2,27,12,-9, -6,-16,-8,-32,-58, -16,-29,-5,41,23, -30,-33,-46,-13,-10, -38,52,52,1,-17, -9,10,26,-25,-6, 33,-20,53,55,25, -32,-5,-42,23,21, 66,5,-28,20,9, 75,29,-7,-42,-39, 15,3,-23,21,6, 11,1,-29,14,63, 10,54,26,-24,-51, -49,7,-23,-51,15, -66,1,60,25,10, 0,-30,-4,-15,17, 19,59,40,4,-5, 33,6,-22,-58,-70, -5,23,-6,60,44, -29,-16,-47,-29,52, -19,50,28,16,35, 31,36,0,-21,6, 21,27,22,42,7, -66,-40,-8,7,19, 46,0,-4,60,36, 45,-7,-29,-6,-32, -39,2,6,-9,33, 20,-51,-34,18,-6, 19,6,11,5,-19, -29,-2,42,-11,-45, -21,-55,57,37,2, -14,-67,-16,-27,-38, 69,48,19,2,-17, 20,-20,-16,-34,-17, -25,-61,10,73,45, 16,-40,-64,-17,-29, -22,56,17,-39,8, -11,8,-25,-18,-13, -19,8,54,57,36, -17,-26,-4,6,-21, 40,42,-4,20,31, 53,10,-34,-53,31, -17,35,0,15,-6, -20,-63,-73,22,25, 29,17,8,-29,-39, -69,18,15,-15,-5}; const signed char cdbk_nb_high2[320]={ 11,47,16,-9,-46, -32,26,-64,34,-5, 38,-7,47,20,2, -73,-99,-3,-45,20, 70,-52,15,-6,-7, -82,31,21,47,51, 39,-3,9,0,-41, -7,-15,-54,2,0, 27,-31,9,-45,-22, -38,-24,-24,8,-33, 23,5,50,-36,-17, -18,-51,-2,13,19, 43,12,-15,-12,61, 38,38,7,13,0, 6,-1,3,62,9, 27,22,-33,38,-35, -9,30,-43,-9,-32, -1,4,-4,1,-5, -11,-8,38,31,11, -10,-42,-21,-37,1, 43,15,-13,-35,-19, -18,15,23,-26,59, 1,-21,53,8,-41, -50,-14,-28,4,21, 25,-28,-40,5,-40, -41,4,51,-33,-8, -8,1,17,-60,12, 25,-41,17,34,43, 19,45,7,-37,24, -15,56,-2,35,-10, 48,4,-47,-2,5, -5,-54,5,-3,-33, -10,30,-2,-44,-24, -38,9,-9,42,4, 6,-56,44,-16,9, -40,-26,18,-20,10, 28,-41,-21,-4,13, -18,32,-30,-3,37, 15,22,28,50,-40, 3,-29,-64,7,51, -19,-11,17,-27,-40, -64,24,-12,-7,-27, 3,37,48,-1,2, -9,-38,-34,46,1, 27,-6,19,-13,26, 10,34,20,25,40, 50,-6,-7,30,9, -24,0,-23,71,-61, 22,58,-34,-4,2, -49,-33,25,30,-8, -6,-16,77,2,38, -8,-35,-6,-30,56, 78,31,33,-20,13, -39,20,22,4,21, -8,4,-6,10,-83, -41,9,-25,-43,15, -7,-12,-34,-39,-37, -33,19,30,16,-33, 42,-25,25,-68,44, -15,-11,-4,23,50, 14,4,-39,-43,20, -30,60,9,-20,7, 16,19,-33,37,29, 16,-35,7,38,-27}; h323plus/plugins/audio/Speex/libspeex/exc_10_32_table.c0000644000175000017500000000513511341106241021463 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin File: exc_10_32_table.c Codebook for excitation in narrowband CELP mode (4000 bps) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ const signed char exc_10_32_table[320] = { 7,17,17,27,25,22,12,4,-3,0, 28,-36,39,-24,-15,3,-9,15,-5,10, 31,-28,11,31,-21,9,-11,-11,-2,-7, -25,14,-22,31,4,-14,19,-12,14,-5, 4,-7,4,-5,9,0,-2,42,-47,-16, 1,8,0,9,23,-57,0,28,-11,6, -31,55,-45,3,-5,4,2,-2,4,-7, -3,6,-2,7,-3,12,5,8,54,-10, 8,-7,-8,-24,-25,-27,-14,-5,8,5, 44,23,5,-9,-11,-11,-13,-9,-12,-8, -29,-8,-22,6,-15,3,-12,-1,-5,-3, 34,-1,29,-16,17,-4,12,2,1,4, -2,-4,2,-1,11,-3,-52,28,30,-9, -32,25,44,-20,-24,4,6,-1,0,0, 0,0,0,0,0,0,0,0,0,0, -25,-10,22,29,13,-13,-22,-13,-4,0, -4,-16,10,15,-36,-24,28,25,-1,-3, 66,-33,-11,-15,6,0,3,4,-2,5, 24,-20,-47,29,19,-2,-4,-1,0,-1, -2,3,1,8,-11,5,5,-57,28,28, 0,-16,4,-4,12,-6,-1,2,-20,61, -9,24,-22,-42,29,6,17,8,4,2, -65,15,8,10,5,6,5,3,2,-2, -3,5,-9,4,-5,23,13,23,-3,-63, 3,-5,-4,-6,0,-3,23,-36,-46,9, 5,5,8,4,9,-5,1,-3,10,1, -6,10,-11,24,-47,31,22,-12,14,-10, 6,11,-7,-7,7,-31,51,-12,-6,7, 6,-17,9,-11,-20,52,-19,3,-6,-6, -8,-5,23,-41,37,1,-21,10,-14,8, 7,5,-15,-15,23,39,-26,-33,7,2, -32,-30,-21,-8,4,12,17,15,14,11}; h323plus/plugins/audio/Speex/libspeex/speex_header.c0000644000175000017500000001215311341106241021363 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin File: speex_header.c Describes the Speex header Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "misc.h" #include "speex_header.h" #include "speex.h" #ifndef NULL #define NULL 0 #endif #define ENDIAN_SWITCH(x) {x=le_int(x);} /* typedef struct SpeexHeader { char speex_string[8]; char speex_version[SPEEX_HEADER_VERSION_LENGTH]; int speex_version_id; int header_size; int rate; int mode; int mode_bitstream_version; int nb_channels; int bitrate; int frame_size; int vbr; int frames_per_packet; int extra_headers; int reserved1; int reserved2; } SpeexHeader; */ void speex_init_header(SpeexHeader *header, int rate, int nb_channels, const SpeexMode *m) { int i; const char *h="Speex "; /* strncpy(header->speex_string, "Speex ", 8); strncpy(header->speex_version, SPEEX_VERSION, SPEEX_HEADER_VERSION_LENGTH-1); header->speex_version[SPEEX_HEADER_VERSION_LENGTH-1]=0; */ for (i=0;i<8;i++) header->speex_string[i]=h[i]; for (i=0;ispeex_version[i]=SPEEX_VERSION[i]; for (;ispeex_version[i]=0; header->speex_version_id = 1; header->header_size = sizeof(SpeexHeader); header->rate = rate; header->mode = m->modeID; header->mode_bitstream_version = m->bitstream_version; if (m->modeID<0) speex_warning("This mode is meant to be used alone"); header->nb_channels = nb_channels; header->bitrate = -1; speex_mode_query(m, SPEEX_MODE_FRAME_SIZE, &header->frame_size); header->vbr = 0; header->frames_per_packet = 0; header->extra_headers = 0; header->reserved1 = 0; header->reserved2 = 0; } char *speex_header_to_packet(SpeexHeader *header, int *size) { SpeexHeader *le_header; le_header = (SpeexHeader*)speex_alloc(sizeof(SpeexHeader)); speex_move(le_header, header, sizeof(SpeexHeader)); /*Make sure everything is now little-endian*/ ENDIAN_SWITCH(le_header->speex_version_id); ENDIAN_SWITCH(le_header->header_size); ENDIAN_SWITCH(le_header->rate); ENDIAN_SWITCH(le_header->mode); ENDIAN_SWITCH(le_header->mode_bitstream_version); ENDIAN_SWITCH(le_header->nb_channels); ENDIAN_SWITCH(le_header->bitrate); ENDIAN_SWITCH(le_header->frame_size); ENDIAN_SWITCH(le_header->vbr); ENDIAN_SWITCH(le_header->frames_per_packet); ENDIAN_SWITCH(le_header->extra_headers); *size = sizeof(SpeexHeader); return (char *)le_header; } SpeexHeader *speex_packet_to_header(char *packet, int size) { int i; SpeexHeader *le_header; const char *h = "Speex "; for (i=0;i<8;i++) if (packet[i]!=h[i]) { speex_warning ("This doesn't look like a Speex file"); return NULL; } /*FIXME: Do we allow larger headers?*/ if (size < (int)sizeof(SpeexHeader)) { speex_warning("Speex header too small"); return NULL; } le_header = (SpeexHeader*)speex_alloc(sizeof(SpeexHeader)); speex_move(le_header, packet, sizeof(SpeexHeader)); /*Make sure everything is converted correctly from little-endian*/ ENDIAN_SWITCH(le_header->speex_version_id); ENDIAN_SWITCH(le_header->header_size); ENDIAN_SWITCH(le_header->rate); ENDIAN_SWITCH(le_header->mode); ENDIAN_SWITCH(le_header->mode_bitstream_version); ENDIAN_SWITCH(le_header->nb_channels); ENDIAN_SWITCH(le_header->bitrate); ENDIAN_SWITCH(le_header->frame_size); ENDIAN_SWITCH(le_header->vbr); ENDIAN_SWITCH(le_header->frames_per_packet); ENDIAN_SWITCH(le_header->extra_headers); return le_header; } h323plus/plugins/audio/Speex/libspeex/quant_lsp.c0000644000175000017500000002550711341106241020744 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin File: quant_lsp.c LSP vector quantization Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "quant_lsp.h" #include #ifndef M_PI #define M_PI 3.14159265358979323846 #endif #include "misc.h" #ifdef FIXED_POINT #define LSP_LINEAR(i) (SHL16(i+1,11)) #define LSP_LINEAR_HIGH(i) (ADD16(MULT16_16_16(i,2560),6144)) #define LSP_DIV_256(x) (SHL16((spx_word16_t)x, 5)) #define LSP_DIV_512(x) (SHL16((spx_word16_t)x, 4)) #define LSP_DIV_1024(x) (SHL16((spx_word16_t)x, 3)) #define LSP_PI 25736 #else #define LSP_LINEAR(i) (.25*(i)+.25) #define LSP_LINEAR_HIGH(i) (.3125*(i)+.75) #define LSP_SCALE 256. #define LSP_DIV_256(x) (0.0039062*(x)) #define LSP_DIV_512(x) (0.0019531*(x)) #define LSP_DIV_1024(x) (0.00097656*(x)) #define LSP_PI M_PI #endif static void compute_quant_weights(spx_lsp_t *qlsp, spx_word16_t *quant_weight, int order) { int i; spx_word16_t tmp1, tmp2; for (i=0;i tmp2 ? tmp1 : tmp2; }*/ for (i=0;i>> 16;\n\t" "R1 = (A1 += %2.L*%1.H) (IS);\n\t" "%0 = R1;\n\t" : "=&d" (res), "=&d" (b) : "d" (a), "1" (b) : "A1", "R1" ); return res; } #undef MAC16_32_Q15 static inline spx_word32_t MAC16_32_Q15(spx_word32_t c, spx_word16_t a, spx_word32_t b) { spx_word32_t res; __asm__ ( "%1 <<= 1;\n\t" "A1 = %2.L*%1.L (M,IS);\n\t" "A1 = A1 >>> 16;\n\t" "R1 = (A1 += %2.L*%1.H) (IS);\n\t" "%0 = R1 + %4;\n\t" : "=&d" (res), "=&d" (b) : "d" (a), "1" (b), "d" (c) : "A1", "R1" ); return res; } #undef MULT16_32_Q14 static inline spx_word32_t MULT16_32_Q14(spx_word16_t a, spx_word32_t b) { spx_word32_t res; __asm__ ( "%2 <<= 2;\n\t" "A1 = %1.L*%2.L (M,IS);\n\t" "A1 = A1 >>> 16;\n\t" "R1 = (A1 += %1.L*%2.H) (IS);\n\t" "%0 = R1;\n\t" : "=d" (res), "=d" (a), "=d" (b) : "1" (a), "2" (b) : "A1", "R1" ); return res; } #undef MAC16_32_Q14 static inline spx_word32_t MAC16_32_Q14(spx_word32_t c, spx_word16_t a, spx_word32_t b) { spx_word32_t res; __asm__ ( "%1 <<= 2;\n\t" "A1 = %2.L*%1.L (M,IS);\n\t" "A1 = A1 >>> 16;\n\t" "R1 = (A1 += %2.L*%1.H) (IS);\n\t" "%0 = R1 + %4;\n\t" : "=&d" (res), "=&d" (b) : "d" (a), "1" (b), "d" (c) : "A1", "R1" ); return res; } #endif h323plus/plugins/audio/Speex/libspeex/speex_echo.h0000644000175000017500000000416311341106241021060 0ustar markmark/* Copyright (C) Jean-Marc Valin */ /** @file speex_echo.h @brief Echo cancellation */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef SPEEX_ECHO_H #define SPEEX_ECHO_H #include "misc.h" #ifdef __cplusplus extern "C" { #endif /*struct drft_lookup;*/ struct SpeexEchoState_; typedef struct SpeexEchoState_ SpeexEchoState; /** Creates a new echo canceller state */ SpeexEchoState *speex_echo_state_init(int frame_size, int filter_length); /** Destroys an echo canceller state */ void speex_echo_state_destroy(SpeexEchoState *st); /** Performs echo cancellation a frame */ void speex_echo_cancel(SpeexEchoState *st, short *ref, short *echo, short *out, spx_int32_t *Y); /** Reset the echo canceller state */ void speex_echo_state_reset(SpeexEchoState *st); #ifdef __cplusplus } #endif #endif h323plus/plugins/audio/Speex/libspeex/pseudofloat.h0000644000175000017500000001576311341106241021273 0ustar markmark/* Copyright (C) 2005 Jean-Marc Valin */ /** @file pseudofloat.h @brief Pseudo-floating point */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef PSEUDOFLOAT_H #define PSEUDOFLOAT_H #include "misc.h" #include #ifdef FIXED_POINT typedef struct { spx_int16_t m; spx_int16_t e; } spx_float_t; #define FLOAT_ZERO ((spx_float_t){0,0}) #define FLOAT_ONE ((spx_float_t){16384,-14}) #define FLOAT_HALF ((spx_float_t){16384,-15}) #define MIN(a,b) ((a)<(b)?(a):(b)) static inline spx_float_t PSEUDOFLOAT(spx_int32_t x) { int e=0; int sign=0; if (x<0) { sign = 1; x = -x; } if (x==0) return (spx_float_t) {0,0}; while (x>32767) { x >>= 1; /*x *= .5;*/ e++; } while (x<16383) { x <<= 1; /*x *= 2;*/ e--; } if (sign) return (spx_float_t) {-x,e}; else return (spx_float_t) {x,e}; } static inline float REALFLOAT(spx_float_t a) { return a.m * pow(2,a.e); } static spx_float_t FLOAT_ADD(spx_float_t a, spx_float_t b) { if (a.m==0) return b; else if (b.m==0) return a; spx_float_t r = (a).e > (b).e ? (spx_float_t) {((a).m>>1) + ((b).m>>MIN(15,(a).e-(b).e+1)),(a).e+1} : (spx_float_t) {((b).m>>1) + ((a).m>>MIN(15,(b).e-(a).e+1)),(b).e+1}; if (r.m>0) { if (r.m<16384) { r.m<<=1; r.e-=1; } } else { if (r.m>-16384) { r.m<<=1; r.e-=1; } } /*printf ("%f + %f = %f\n", REALFLOAT(a), REALFLOAT(b), REALFLOAT(r));*/ return r; } static spx_float_t FLOAT_SUB(spx_float_t a, spx_float_t b) { if (a.m==0) return b; else if (b.m==0) return a; spx_float_t r = (a).e > (b).e ? (spx_float_t) {((a).m>>1) - ((b).m>>MIN(15,(a).e-(b).e+1)),(a).e+1} : (spx_float_t) {((a).m>>MIN(15,(b).e-(a).e+1)) - ((b).m>>1) ,(b).e+1}; if (r.m>0) { if (r.m<16384) { r.m<<=1; r.e-=1; } } else { if (r.m>-16384) { r.m<<=1; r.e-=1; } } /*printf ("%f + %f = %f\n", REALFLOAT(a), REALFLOAT(b), REALFLOAT(r));*/ return r; } static inline int FLOAT_LT(spx_float_t a, spx_float_t b) { if (a.m==0) return b.m<0; else if (b.m==0) return a.m>0; if ((a).e > (b).e) return ((a).m>>1) < ((b).m>>MIN(15,(a).e-(b).e+1)); else return ((b).m>>1) > ((a).m>>MIN(15,(b).e-(a).e+1)); } static inline int FLOAT_GT(spx_float_t a, spx_float_t b) { return FLOAT_LT(b,a); } static inline spx_float_t FLOAT_MULT(spx_float_t a, spx_float_t b) { spx_float_t r = (spx_float_t) {(spx_int16_t)((spx_int32_t)(a).m*(b).m>>15), (a).e+(b).e+15}; if (r.m>0) { if (r.m<16384) { r.m<<=1; r.e-=1; } } else { if (r.m>-16384) { r.m<<=1; r.e-=1; } } /*printf ("%f * %f = %f\n", REALFLOAT(a), REALFLOAT(b), REALFLOAT(r));*/ return r; } static inline spx_float_t FLOAT_SHR(spx_float_t a, int b) { return (spx_float_t) {a.m,a.e-b}; } static inline spx_float_t FLOAT_SHL(spx_float_t a, int b) { return (spx_float_t) {a.m,a.e+b}; } static inline spx_int16_t FLOAT_EXTRACT16(spx_float_t a) { if (a.e<0) return (a.m+(1<<(-a.e-1)))>>-a.e; else return a.m<>-a.e; else return ((spx_int32_t)a.m)<32767) { a >>= 1; e++; } while (a<16384) { a <<= 1; e--; } while (b>32767) { b >>= 1; e++; } while (b<16384) { b <<= 1; e--; } return (spx_float_t) {MULT16_16_Q15(a,b),e+15}; } static inline spx_float_t FLOAT_DIV32_FLOAT(spx_word32_t a, spx_float_t b) { int e=0; /* FIXME: Handle the sign */ if (a==0) return (spx_float_t) {0,0}; while (a=SHL32(b.m-1,15)) { a >>= 1; e++; } return (spx_float_t) {DIV32_16(a,b.m),e-b.e}; } static inline spx_float_t FLOAT_DIV32(spx_word32_t a, spx_word32_t b) { int e=0; /* FIXME: Handle the sign */ if (a==0) return (spx_float_t) {0,0}; while (b>32767) { b >>= 1; e--; } while (a=SHL32(b-1,15)) { a >>= 1; e++; } return (spx_float_t) {DIV32_16(a,b),e}; } static inline spx_float_t FLOAT_DIVU(spx_float_t a, spx_float_t b) { int e=0; spx_int32_t num; num = a.m; while (a.m >= b.m) { e++; a.m >>= 1; } num = num << (15-e); return (spx_float_t) {DIV32_16(num,b.m),a.e-b.e-15+e}; } #else #define spx_float_t float #define FLOAT_ZERO 0.f #define FLOAT_ONE 1.f #define FLOAT_HALF 0.5f #define PSEUDOFLOAT(x) (x) #define FLOAT_MULT(a,b) ((a)*(b)) #define FLOAT_MUL32(a,b) ((a)*(b)) #define FLOAT_DIV32(a,b) ((a)/(b)) #define FLOAT_EXTRACT16(a) (a) #define FLOAT_ADD(a,b) ((a)+(b)) #define FLOAT_SUB(a,b) ((a)-(b)) #define REALFLOAT(x) (x) #define FLOAT_DIV32_FLOAT(a,b) ((a)/(b)) #define FLOAT_MUL32U(a,b) ((a)*(b)) #define FLOAT_SHL(a,b) (a) #define FLOAT_LT(a,b) ((a)<(b)) #define FLOAT_GT(a,b) ((a)>(b)) #define FLOAT_DIVU(a,b) ((a)/(b)) #endif #endif h323plus/plugins/audio/Speex/libspeex/speex_preprocess.h0000644000175000017500000001377511341106241022340 0ustar markmark/* Copyright (C) 2003 Epic Games Written by Jean-Marc Valin */ /** @file speex_preprocess.h @brief Speex preprocessor */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef SPEEX_PREPROCESS_H #define SPEEX_PREPROCESS_H #include "speex_types.h" #ifdef __cplusplus extern "C" { #endif struct drft_lookup; /** Speex pre-processor state. */ typedef struct SpeexPreprocessState { int frame_size; /**< Number of samples processed each time */ int ps_size; /**< Number of points in the power spectrum */ int sampling_rate; /**< Sampling rate of the input/output */ /* parameters */ int denoise_enabled; int agc_enabled; float agc_level; int vad_enabled; int dereverb_enabled; float reverb_decay; float reverb_level; float speech_prob_start; float speech_prob_continue; float *frame; /**< Processing frame (2*ps_size) */ float *ps; /**< Current power spectrum */ float *gain2; /**< Adjusted gains */ float *window; /**< Analysis/Synthesis window */ float *noise; /**< Noise estimate */ float *reverb_estimate; /**< Estimate of reverb energy */ float *old_ps; /**< Power spectrum for last frame */ float *gain; /**< Ephraim Malah gain */ float *prior; /**< A-priori SNR */ float *post; /**< A-posteriori SNR */ float *S; /**< Smoothed power spectrum */ float *Smin; /**< See Cohen paper */ float *Stmp; /**< See Cohen paper */ float *update_prob; /**< Propability of speech presence for noise update */ float *zeta; /**< Smoothed a priori SNR */ float Zpeak; float Zlast; float *loudness_weight; /**< Perceptual loudness curve */ float *echo_noise; float *noise_bands; float *noise_bands2; int noise_bandsN; float *speech_bands; float *speech_bands2; int speech_bandsN; float *inbuf; /**< Input buffer (overlapped analysis) */ float *outbuf; /**< Output buffer (for overlap and add) */ float speech_prob; int last_speech; float loudness; /**< loudness estimate */ float loudness2; /**< loudness estimate */ int nb_adapt; /**< Number of frames used for adaptation so far */ int nb_loudness_adapt; /**< Number of frames used for loudness adaptation so far */ int consec_noise; /**< Number of consecutive noise frames */ int nb_preprocess; /**< Number of frames processed so far */ struct drft_lookup *fft_lookup; /**< Lookup table for the FFT */ } SpeexPreprocessState; /** Creates a new preprocessing state */ SpeexPreprocessState *speex_preprocess_state_init(int frame_size, int sampling_rate); /** Destroys a denoising state */ void speex_preprocess_state_destroy(SpeexPreprocessState *st); /** Preprocess a frame */ int speex_preprocess(SpeexPreprocessState *st, spx_int16_t *x, spx_int32_t *echo); /** Preprocess a frame */ void speex_preprocess_estimate_update(SpeexPreprocessState *st, spx_int16_t *x, spx_int32_t *echo); /** Used like the ioctl function to control the preprocessor parameters */ int speex_preprocess_ctl(SpeexPreprocessState *st, int request, void *ptr); /** Set preprocessor denoiser state */ #define SPEEX_PREPROCESS_SET_DENOISE 0 /** Get preprocessor denoiser state */ #define SPEEX_PREPROCESS_GET_DENOISE 1 /** Set preprocessor Automatic Gain Control state */ #define SPEEX_PREPROCESS_SET_AGC 2 /** Get preprocessor Automatic Gain Control state */ #define SPEEX_PREPROCESS_GET_AGC 3 /** Set preprocessor Voice Activity Detection state */ #define SPEEX_PREPROCESS_SET_VAD 4 /** Get preprocessor Voice Activity Detection state */ #define SPEEX_PREPROCESS_GET_VAD 5 /** Set preprocessor Automatic Gain Control level */ #define SPEEX_PREPROCESS_SET_AGC_LEVEL 6 /** Get preprocessor Automatic Gain Control level */ #define SPEEX_PREPROCESS_GET_AGC_LEVEL 7 /** Set preprocessor dereverb state */ #define SPEEX_PREPROCESS_SET_DEREVERB 8 /** Get preprocessor dereverb state */ #define SPEEX_PREPROCESS_GET_DEREVERB 9 /** Set preprocessor dereverb level */ #define SPEEX_PREPROCESS_SET_DEREVERB_LEVEL 10 /** Get preprocessor dereverb level */ #define SPEEX_PREPROCESS_GET_DEREVERB_LEVEL 11 /** Set preprocessor dereverb decay */ #define SPEEX_PREPROCESS_SET_DEREVERB_DECAY 12 /** Get preprocessor dereverb decay */ #define SPEEX_PREPROCESS_GET_DEREVERB_DECAY 13 #define SPEEX_PREPROCESS_SET_PROB_START 14 #define SPEEX_PREPROCESS_GET_PROB_START 15 #define SPEEX_PREPROCESS_SET_PROB_CONTINUE 16 #define SPEEX_PREPROCESS_GET_PROB_CONTINUE 17 #ifdef __cplusplus } #endif #endif h323plus/plugins/audio/Speex/libspeex/fixed_arm4.h0000644000175000017500000001065611341106241020764 0ustar markmark/* Copyright (C) 2004 Jean-Marc Valin */ /** @file fixed_arm4.h @brief ARM4 fixed-point operations */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef FIXED_ARM4_H #define FIXED_ARM4_H #undef MULT16_32_Q14 static inline spx_word32_t MULT16_32_Q14(spx_word16_t x, spx_word32_t y) { int res; int dummy; asm ( "smull %0,%1,%2,%3 \n\t" "mov %0, %0, lsr #14 \n\t" "add %0, %0, %1, lsl #18 \n\t" : "=&r"(res), "=&r" (dummy) : "r"(y),"r"((int)x)); return(res); } #undef MULT16_32_Q15 static inline spx_word32_t MULT16_32_Q15(spx_word16_t x, spx_word32_t y) { int res; int dummy; asm ( "smull %0,%1,%2,%3 \n\t" "mov %0, %0, lsr #15 \n\t" "add %0, %0, %1, lsl #17 \n\t" : "=&r"(res), "=&r" (dummy) : "r"(y),"r"((int)x)); return(res); } #undef DIV32_16 static inline short DIV32_16(int a, int b) { int res=0; int dead1, dead2, dead3, dead4, dead5; __asm__ __volatile__ ( "\teor %5, %0, %1\n" "\tmovs %4, %0\n" "\trsbmi %0, %0, #0 \n" "\tmovs %4, %1\n" "\trsbmi %1, %1, #0 \n" "\tmov %4, #1\n" "\tsubs %3, %0, %1, asl #14 \n" "\tmovpl %0, %3 \n" "\torrpl %2, %2, %4, asl #14 \n" "\tsubs %3, %0, %1, asl #13 \n" "\tmovpl %0, %3 \n" "\torrpl %2, %2, %4, asl #13 \n" "\tsubs %3, %0, %1, asl #12 \n" "\tmovpl %0, %3 \n" "\torrpl %2, %2, %4, asl #12 \n" "\tsubs %3, %0, %1, asl #11 \n" "\tmovpl %0, %3 \n" "\torrpl %2, %2, %4, asl #11 \n" "\tsubs %3, %0, %1, asl #10 \n" "\tmovpl %0, %3 \n" "\torrpl %2, %2, %4, asl #10 \n" "\tsubs %3, %0, %1, asl #9 \n" "\tmovpl %0, %3 \n" "\torrpl %2, %2, %4, asl #9 \n" "\tsubs %3, %0, %1, asl #8 \n" "\tmovpl %0, %3 \n" "\torrpl %2, %2, %4, asl #8 \n" "\tsubs %3, %0, %1, asl #7 \n" "\tmovpl %0, %3 \n" "\torrpl %2, %2, %4, asl #7 \n" "\tsubs %3, %0, %1, asl #6 \n" "\tmovpl %0, %3 \n" "\torrpl %2, %2, %4, asl #6 \n" "\tsubs %3, %0, %1, asl #5 \n" "\tmovpl %0, %3 \n" "\torrpl %2, %2, %4, asl #5 \n" "\tsubs %3, %0, %1, asl #4 \n" "\tmovpl %0, %3 \n" "\torrpl %2, %2, %4, asl #4 \n" "\tsubs %3, %0, %1, asl #3 \n" "\tmovpl %0, %3 \n" "\torrpl %2, %2, %4, asl #3 \n" "\tsubs %3, %0, %1, asl #2 \n" "\tmovpl %0, %3 \n" "\torrpl %2, %2, %4, asl #2 \n" "\tsubs %3, %0, %1, asl #1 \n" "\tmovpl %0, %3 \n" "\torrpl %2, %2, %4, asl #1 \n" "\tsubs %3, %0, %1 \n" "\tmovpl %0, %3 \n" "\torrpl %2, %2, %4 \n" "\tmovs %5, %5, lsr #31 \n" "\trsbne %2, %2, #0 \n" : "=r" (dead1), "=r" (dead2), "=r" (res), "=r" (dead3), "=r" (dead4), "=r" (dead5) : "0" (a), "1" (b), "2" (res) : "cc" ); return res; } #endif h323plus/plugins/audio/Speex/libspeex/stack_alloc.h0000644000175000017500000000714511341106241021220 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin */ /** @file stack_alloc.h @brief Temporary memory allocation on stack */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef STACK_ALLOC_H #define STACK_ALLOC_H #ifdef USE_ALLOCA #include #endif /** * @def ALIGN(stack, size) * * Aligns the stack to a 'size' boundary * * @param stack Stack * @param size New size boundary */ /** * @def PUSH(stack, size, type) * * Allocates 'size' elements of type 'type' on the stack * * @param stack Stack * @param size Number of elements * @param type Type of element */ /** * @def PUSHS(stack, type) * * Allocates a struct stack * * @param stack Stack * @param type Struct type */ /** * @def VARDECL(var) * * Declare variable on stack * * @param var Variable to declare */ /** * @def ALLOC(var, size, type) * * Allocate 'size' elements of 'type' on stack * * @param var Name of variable to allocate * @param size Number of elements * @param type Type of element */ #ifdef ENABLE_VALGRIND #include #define ALIGN(stack, size) ((stack) += ((size) - (long)(stack)) & ((size) - 1)) #define PUSH(stack, size, type) (VALGRIND_MAKE_NOACCESS(stack, 1000),ALIGN((stack),sizeof(type)),VALGRIND_MAKE_WRITABLE(stack, ((size)*sizeof(type))),(stack)+=((size)*sizeof(type)),(type*)((stack)-((size)*sizeof(type)))) #define PUSHS(stack, type) (VALGRIND_MAKE_NOACCESS(stack, 1000),ALIGN((stack),sizeof(long)),VALGRIND_MAKE_WRITABLE(stack, (sizeof(type))),(stack)+=(sizeof(type)),(type*)((stack)-(sizeof(type)))) #else #define ALIGN(stack, size) ((stack) += ((size) - (long)(stack)) & ((size) - 1)) #define PUSH(stack, size, type) (ALIGN((stack),sizeof(type)),(stack)+=((size)*sizeof(type)),(type*)((stack)-((size)*sizeof(type)))) #define PUSHS(stack, type) (ALIGN((stack),sizeof(long)),(stack)+=(sizeof(type)),(type*)((stack)-(sizeof(type)))) #endif #if defined(VAR_ARRAYS) #define VARDECL(var) #define ALLOC(var, size, type) type var[size] #elif defined(USE_ALLOCA) #define VARDECL(var) var #define ALLOC(var, size, type) var = alloca(sizeof(type)*size) #else #define VARDECL(var) var #define ALLOC(var, size, type) var = PUSH(stack, size, type) #endif #endif h323plus/plugins/audio/Speex/libspeex/filters_sse.h0000644000175000017500000002324011341106241021255 0ustar markmark/* Copyright (C) 2002 Jean-Marc Valin */ /** @file filters_sse.h @brief Various analysis/synthesis filters (SSE version) */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include void filter_mem2_10(const float *x, const float *_num, const float *_den, float *y, int N, int ord, float *_mem) { __m128 num[3], den[3], mem[3]; int i; /* Copy numerator, denominator and memory to aligned xmm */ for (i=0;i<2;i++) { mem[i] = _mm_loadu_ps(_mem+4*i); num[i] = _mm_loadu_ps(_num+4*i); den[i] = _mm_loadu_ps(_den+4*i); } mem[2] = _mm_setr_ps(_mem[8], _mem[9], 0, 0); num[2] = _mm_setr_ps(_num[8], _num[9], 0, 0); den[2] = _mm_setr_ps(_den[8], _den[9], 0, 0); for (i=0;i extern long long spx_mips; #define MIPS_INC spx_mips++, #define QCONST16(x,bits) ((spx_word16_t)((x)*(1<<(bits))+(1<<((bits)-1)))) #define QCONST32(x,bits) ((spx_word32_t)((x)*(1<<(bits))+(1<<((bits)-1)))) #define VERIFY_SHORT(x) ((x)<=32767&&(x)>=-32768) #define VERIFY_INT(x) ((x)<=2147483647LL&&(x)>=-2147483648LL) static inline short NEG16(int x) { int res; if (!VERIFY_SHORT(x)) { fprintf (stderr, "NEG16: input is not short: %d\n", (int)x); } res = -x; if (!VERIFY_SHORT(res)) fprintf (stderr, "NEG16: output is not short: %d\n", (int)res); spx_mips++; return res; } static inline int NEG32(long long x) { long long res; if (!VERIFY_INT(x)) { fprintf (stderr, "NEG16: input is not int: %d\n", (int)x); } res = -x; if (!VERIFY_INT(res)) fprintf (stderr, "NEG16: output is not int: %d\n", (int)res); spx_mips++; return res; } static inline short EXTRACT16(int x) { int res; if (!VERIFY_SHORT(x)) { fprintf (stderr, "EXTRACT16: input is not short: %d\n", x); } res = x; spx_mips++; return res; } static inline int EXTEND32(int x) { int res; if (!VERIFY_SHORT(x)) { fprintf (stderr, "EXTRACT16: input is not short: %d\n", x); } res = x; spx_mips++; return res; } static inline short SHR16(int a, int shift) { int res; if (!VERIFY_SHORT(a) || !VERIFY_SHORT(shift)) { fprintf (stderr, "SHR16: inputs are not short: %d %d\n", a, shift); } res = a>>shift; if (!VERIFY_SHORT(res)) fprintf (stderr, "SHR16: output is not short: %d\n", res); spx_mips++; return res; } static inline short SHL16(int a, int shift) { int res; if (!VERIFY_SHORT(a) || !VERIFY_SHORT(shift)) { fprintf (stderr, "SHR16: inputs are not short: %d %d\n", a, shift); } res = a<>shift; if (!VERIFY_INT(res)) fprintf (stderr, "SHR32: output is not int: %d\n", (int)res); spx_mips++; return res; } static inline int SHL32(long long a, int shift) { long long res; if (!VERIFY_INT(a) || !VERIFY_SHORT(shift)) { fprintf (stderr, "SHR32: inputs are not int: %d %d\n", (int)a, shift); } res = a<(a) ? (a) : (x)<-(a) ? -(a) : (x))) #define SATURATE32(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x))) #define SHR(a,shift) ((a) >> (shift)) #define SHL(a,shift) ((a) << (shift)) static inline short ADD16(int a, int b) { int res; if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b)) { fprintf (stderr, "ADD16: inputs are not short: %d %d\n", a, b); } res = a+b; if (!VERIFY_SHORT(res)) fprintf (stderr, "ADD16: output is not short: %d\n", res); spx_mips++; return res; } static inline short SUB16(int a, int b) { int res; if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b)) { fprintf (stderr, "SUB16: inputs are not short: %d %d\n", a, b); } res = a-b; if (!VERIFY_SHORT(res)) fprintf (stderr, "SUB16: output is not short: %d\n", res); spx_mips++; return res; } static inline int ADD32(long long a, long long b) { long long res; if (!VERIFY_INT(a) || !VERIFY_INT(b)) { fprintf (stderr, "ADD32: inputs are not int: %d %d\n", (int)a, (int)b); } res = a+b; if (!VERIFY_INT(res)) fprintf (stderr, "ADD32: output is not int: %d\n", (int)res); spx_mips++; return res; } static inline int SUB32(long long a, long long b) { long long res; if (!VERIFY_INT(a) || !VERIFY_INT(b)) { fprintf (stderr, "SUB32: inputs are not int: %d %d\n", (int)a, (int)b); } res = a-b; if (!VERIFY_INT(res)) fprintf (stderr, "SUB32: output is not int: %d\n", (int)res); spx_mips++; return res; } #define ADD64(a,b) (MIPS_INC(a)+(b)) #define PSHR(a,shift) (SHR((a)+(1<<((shift)-1)),shift)) /* result fits in 16 bits */ static inline short MULT16_16_16(int a, int b) { int res; if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b)) { fprintf (stderr, "MULT16_16_16: inputs are not short: %d %d\n", a, b); } res = a*b; if (!VERIFY_SHORT(res)) fprintf (stderr, "MULT16_16_16: output is not short: %d\n", res); spx_mips++; return res; } static inline int MULT16_16(int a, int b) { long long res; if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b)) { fprintf (stderr, "MULT16_16: inputs are not short: %d %d\n", a, b); } res = ((long long)a)*b; if (!VERIFY_INT(res)) fprintf (stderr, "MULT16_16: output is not int: %d\n", (int)res); spx_mips++; return res; } #define MAC16_16(c,a,b) (spx_mips--,ADD32((c),MULT16_16((a),(b)))) #define MAC16_16_Q11(c,a,b) (ADD16((c),EXTRACT16(SHR32(MULT16_16((a),(b)),11)))) #define MAC16_16_Q13(c,a,b) (ADD16((c),EXTRACT16(SHR32(MULT16_16((a),(b)),13)))) static inline int MULT16_32_QX(int a, long long b, int Q) { long long res; if (!VERIFY_SHORT(a) || !VERIFY_INT(b)) { fprintf (stderr, "MULT16_32_Q%d: inputs are not short+int: %d %d\n", Q, (int)a, (int)b); } res = (((long long)a)*(long long)b) >> Q; if (!VERIFY_INT(res)) fprintf (stderr, "MULT16_32_Q%d: output is not int: %d*%d=%d\n", Q, (int)a, (int)b,(int)res); spx_mips+=5; return res; } #define MULT16_32_Q11(a,b) MULT16_32_QX(a,b,11) #define MAC16_32_Q11(c,a,b) ADD32((c),MULT16_32_Q11((a),(b))) #define MULT16_32_Q12(a,b) MULT16_32_QX(a,b,12) #define MULT16_32_Q13(a,b) MULT16_32_QX(a,b,13) #define MULT16_32_Q14(a,b) MULT16_32_QX(a,b,14) #define MULT16_32_Q15(a,b) MULT16_32_QX(a,b,15) #define MAC16_32_Q15(c,a,b) ADD32((c),MULT16_32_Q15((a),(b))) static inline int SATURATE(int a, int b) { if (a>b) a=b; if (a<-b) a = -b; return a; } static inline int MULT16_16_Q11_32(int a, int b) { long long res; if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b)) { fprintf (stderr, "MULT16_16_Q11: inputs are not short: %d %d\n", a, b); } res = ((long long)a)*b; res >>= 11; if (!VERIFY_INT(res)) fprintf (stderr, "MULT16_16_Q11: output is not short: %d*%d=%d\n", (int)a, (int)b, (int)res); spx_mips+=3; return res; } static inline short MULT16_16_Q13(int a, int b) { long long res; if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b)) { fprintf (stderr, "MULT16_16_Q13: inputs are not short: %d %d\n", a, b); } res = ((long long)a)*b; res >>= 13; if (!VERIFY_SHORT(res)) fprintf (stderr, "MULT16_16_Q13: output is not short: %d*%d=%d\n", a, b, (int)res); spx_mips+=3; return res; } static inline short MULT16_16_Q14(int a, int b) { long long res; if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b)) { fprintf (stderr, "MULT16_16_Q14: inputs are not short: %d %d\n", a, b); } res = ((long long)a)*b; res >>= 14; if (!VERIFY_SHORT(res)) fprintf (stderr, "MULT16_16_Q14: output is not short: %d\n", (int)res); spx_mips+=3; return res; } static inline short MULT16_16_Q15(int a, int b) { long long res; if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b)) { fprintf (stderr, "MULT16_16_Q15: inputs are not short: %d %d\n", a, b); } res = ((long long)a)*b; res >>= 15; if (!VERIFY_SHORT(res)) fprintf (stderr, "MULT16_16_Q15: output is not short: %d\n", (int)res); spx_mips+=3; return res; } static inline short MULT16_16_P13(int a, int b) { long long res; if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b)) { fprintf (stderr, "MULT16_16_P13: inputs are not short: %d %d\n", a, b); } res = ((long long)a)*b; res += 4096; if (!VERIFY_INT(res)) fprintf (stderr, "MULT16_16_P13: overflow: %d*%d=%d\n", a, b, (int)res); res >>= 13; if (!VERIFY_SHORT(res)) fprintf (stderr, "MULT16_16_P13: output is not short: %d*%d=%d\n", a, b, (int)res); spx_mips+=4; return res; } static inline short MULT16_16_P14(int a, int b) { long long res; if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b)) { fprintf (stderr, "MULT16_16_P14: inputs are not short: %d %d\n", a, b); } res = ((long long)a)*b; res += 8192; if (!VERIFY_INT(res)) fprintf (stderr, "MULT16_16_P14: overflow: %d*%d=%d\n", a, b, (int)res); res >>= 14; if (!VERIFY_SHORT(res)) fprintf (stderr, "MULT16_16_P14: output is not short: %d*%d=%d\n", a, b, (int)res); spx_mips+=4; return res; } static inline short MULT16_16_P15(int a, int b) { long long res; if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b)) { fprintf (stderr, "MULT16_16_P15: inputs are not short: %d %d\n", a, b); } res = ((long long)a)*b; res += 16384; if (!VERIFY_INT(res)) fprintf (stderr, "MULT16_16_P15: overflow: %d*%d=%d\n", a, b, (int)res); res >>= 15; if (!VERIFY_SHORT(res)) fprintf (stderr, "MULT16_16_P15: output is not short: %d*%d=%d\n", a, b, (int)res); spx_mips+=4; return res; } static inline int DIV32_16(long long a, long long b) { long long res; if (b==0) { fprintf(stderr, "DIV32_16: divide by zero: %d/%d\n", (int)a, (int)b); return 0; } if (!VERIFY_INT(a) || !VERIFY_SHORT(b)) { fprintf (stderr, "DIV32_16: inputs are not int/short: %d %d\n", (int)a, (int)b); } res = a/b; if (!VERIFY_SHORT(res)) { fprintf (stderr, "DIV32_16: output is not short: %d / %d = %d\n", (int)a,(int)b,(int)res); if (res>32767) res = 32767; if (res<-32768) res = -32768; } spx_mips+=20; return res; } static inline int DIV32(long long a, long long b) { long long res; if (b==0) { fprintf(stderr, "DIV32: divide by zero: %d/%d\n", (int)a, (int)b); return 0; } if (!VERIFY_INT(a) || !VERIFY_INT(b)) { fprintf (stderr, "DIV32: inputs are not int/short: %d %d\n", (int)a, (int)b); } res = a/b; if (!VERIFY_INT(res)) fprintf (stderr, "DIV32: output is not int: %d\n", (int)res); spx_mips+=36; return res; } #endif h323plus/plugins/audio/Speex/speexcodec.cxx0000644000175000017500000011157411341106241017625 0ustar markmark/* * Speex Plugin codec for OpenH323/OPAL * * Copyright (C) 2004 Post Increment, All Rights Reserved * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Post Increment * * Contributor(s): ______________________________________. * * $Revision: 1.1 $ * $Author: shorne $ * $Date: 2010/02/24 02:19:13 $ */ #define _CRT_NONSTDC_NO_DEPRECATE 1 #define _CRT_SECURE_NO_WARNINGS 1 #include #include #include #ifndef PLUGIN_CODEC_DLL_EXPORTS #include "plugin-config.h" #endif #include #if defined(_WIN32) || defined(_WIN32_WCE) #define STRCMPI _strcmpi #else #define STRCMPI strcasecmp #endif extern "C" { #include "libspeex/speex.h" } #define NARROW_SAMPLES_PER_FRAME 160 #define WIDE_SAMPLES_PER_FRAME 320 #define NS_PER_FRAME 20000 const float MaxSampleValue = 32767.0; const float MinSampleValue = -32767.0; struct PluginSpeexContext { SpeexBits speexBits; void * coderState; unsigned encoderFrameSize; }; static int Speex_Bits_Per_Second(int mode, int sampleRate) { void *tmp_coder_state; int bitrate; if (sampleRate == 8000) tmp_coder_state = speex_encoder_init(&speex_nb_mode); else tmp_coder_state = speex_encoder_init(&speex_wb_mode); speex_encoder_ctl(tmp_coder_state, SPEEX_SET_MODE, &mode); speex_encoder_ctl(tmp_coder_state, SPEEX_GET_BITRATE, &bitrate); speex_encoder_destroy(tmp_coder_state); return bitrate; } static int Speex_Bytes_Per_Frame(int mode, int sampleRate) { int bits_per_frame = Speex_Bits_Per_Second(mode, sampleRate) / 50; // (20ms frame size) return ((bits_per_frame+7)/8); // round up } ///////////////////////////////////////////////////////////////////////////// static void * create_encoder(const struct PluginCodec_Definition * codec) { int mode = (int)(long)(codec->userData); struct PluginSpeexContext * context = new PluginSpeexContext; if (codec->sampleRate == 16000) context->coderState = speex_encoder_init(&speex_wb_mode); else context->coderState = speex_encoder_init(&speex_nb_mode); speex_encoder_ctl(context->coderState, SPEEX_GET_FRAME_SIZE, &context->encoderFrameSize); speex_encoder_ctl(context->coderState, SPEEX_SET_QUALITY, &mode); return context; } static int codec_encoder(const struct PluginCodec_Definition * codec, void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { PluginSpeexContext * context = (PluginSpeexContext *)_context; speex_bits_init(&context->speexBits); short * sampleBuffer = (short *)from; // encode PCM data in sampleBuffer to buffer int i = 0; int frameLen = codec->parm.audio.samplesPerFrame*2; while ((*fromLen >= ((i+1)*frameLen)) && (((i+1)*codec->parm.audio.bytesPerFrame) <= *toLen) ) { speex_encode_int(context->coderState, sampleBuffer + i*codec->parm.audio.samplesPerFrame, &context->speexBits); ++i; } *fromLen = i*frameLen; // add in terminator speex_bits_insert_terminator(&context->speexBits); // finish writing the data *toLen = speex_bits_write(&context->speexBits, (char *)to, *toLen); speex_bits_destroy(&context->speexBits); return 1; } static void destroy_encoder(const struct PluginCodec_Definition * codec, void * _context) { PluginSpeexContext * context = (PluginSpeexContext *)_context; speex_encoder_destroy(context->coderState); free(context); } static void * create_decoder(const struct PluginCodec_Definition * codec) { int tmp = 1; PluginSpeexContext * context = new PluginSpeexContext; if (codec->sampleRate == 16000) context->coderState = speex_decoder_init(&speex_wb_mode); else context->coderState = speex_decoder_init(&speex_nb_mode); speex_decoder_ctl(context->coderState, SPEEX_SET_ENH, &tmp); return context; } static int codec_decoder(const struct PluginCodec_Definition * codec, void * _context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * flag) { struct PluginSpeexContext * context = (struct PluginSpeexContext *)_context; short * sampleBuffer = (short *)to; speex_bits_init(&context->speexBits); if (*toLen < codec->parm.audio.samplesPerFrame*2) { speex_bits_destroy(&context->speexBits); return 0; } int status = 0; // if this is a packet loss concealment frame, generate interpolated data // else decode the real data if (*flag & PluginCodec_CoderSilenceFrame) { status = speex_decode_int(context->coderState, NULL, sampleBuffer); } else { speex_bits_read_from(&context->speexBits, (char *)from, *fromLen); int i = 0; while (((i+1)*codec->parm.audio.samplesPerFrame*2) <= *toLen) { int stat = speex_decode_int(context->coderState, &context->speexBits, sampleBuffer + i*codec->parm.audio.samplesPerFrame); if (stat == -1 || stat == -2 || speex_bits_remaining(&context->speexBits) < 0) break; ++i; } *toLen = i*codec->parm.audio.samplesPerFrame*2; } speex_bits_destroy(&context->speexBits); return 1; } static void destroy_decoder(const struct PluginCodec_Definition * codec, void * _context) { struct PluginSpeexContext * context = (struct PluginSpeexContext *)_context; //speex_bits_destroy(&context->speexBits); // speex_decoder_destroy does this speex_decoder_destroy(context->coderState); free(context); } static int encoder_get_options( const PluginCodec_Definition * , void * context , const char * , void * parm , unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(char **)) return 0; const char ***options = (const char ***)parm; return 0; } static int valid_for_sip( const PluginCodec_Definition * , void * context , const char * , void * parm , unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(char *)) return 0; return (STRCMPI((const char *)parm, "sip") == 0) ? 1 : 0; } static int valid_for_h323( const PluginCodec_Definition * , void * , const char * , void * parm , unsigned * parmLen) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(char *)) return 0; return (STRCMPI((const char *)parm, "h.323") == 0 || STRCMPI((const char *)parm, "h323") == 0) ? 1 : 0; } static const char * default_narrow_sip_options[][3] = { { "fmtp", "sr=8000,mode=any" , "s" }, { NULL, NULL, NULL } }; static const char * default_wide_sip_options[][3] = { { "fmtp", "sr=16000,mode=any" , "s" }, { NULL, NULL, NULL } }; static int get_codec_options(void * context, void * parm, unsigned * parmLen, const char ** default_parms) { if (parmLen == NULL || parm == NULL || *parmLen != sizeof(char **)) return 0; const char ***options = (const char ***)parm; if (context == NULL) { *options = default_parms; return 1; } return 0; } static int coder_get_sip_options( const PluginCodec_Definition * codec, void * context , const char * , void * parm , unsigned * parmLen) { if (codec->sampleRate == 8000) return get_codec_options(context, parm, parmLen, &default_narrow_sip_options[0][0]); else return get_codec_options(context, parm, parmLen, &default_wide_sip_options[0][0]); } static int encoder_set_vbr( const PluginCodec_Definition * codec, void * _context, const char * , void * parm, unsigned * parmLen) { if (_context == NULL || parmLen == NULL || *parmLen != sizeof(int)) return -1; struct PluginSpeexContext * context = (struct PluginSpeexContext *)_context; return speex_encoder_ctl(context->coderState, SPEEX_SET_VBR, parm); } static int decoder_set_vbr( const PluginCodec_Definition * codec, void * _context, const char * , void * parm, unsigned * parmLen) { if (_context == NULL || parmLen == NULL || *parmLen != sizeof(int)) return -1; struct PluginSpeexContext * context = (struct PluginSpeexContext *)_context; return speex_decoder_ctl(context->coderState, SPEEX_SET_VBR, parm); } static PluginCodec_ControlDefn sipDecoderControls[] = { { "valid_for_protocol", valid_for_sip }, { "get_codec_options", coder_get_sip_options }, { "set_vbr", decoder_set_vbr }, { NULL } }; static PluginCodec_ControlDefn h323DecoderControls[] = { { "valid_for_protocol", valid_for_h323 }, { "set_vbr", decoder_set_vbr }, { NULL } }; static PluginCodec_ControlDefn sipEncoderControls[] = { { "valid_for_protocol", valid_for_sip }, { "get_codec_options", coder_get_sip_options }, { "set_vbr", encoder_set_vbr }, { NULL } }; static PluginCodec_ControlDefn h323EncoderControls[] = { { "valid_for_protocol", valid_for_h323 }, { "set_vbr", encoder_set_vbr }, { NULL } }; ///////////////////////////////////////////////////////////////////////////// static struct PluginCodec_information licenseInfo = { //1081075346, // Sun 04 Apr 2004 10:42:26 AM UTC //1087351735, // Wed 16 Jun 2004 02:08:55 AM UTC //1101695533, // Mon 29 Nov 2004 12:32:13 PM EST 1156040055, //Sun 20 Aug 2006 02:14:15 AM UTC "Craig Southeren, Post Increment", // source code author "3.2", // source code version "craigs@postincrement.com", // source code email "http://www.postincrement.com", // source code URL "Copyright (C) 2004 by Post Increment, All Rights Reserved", // source code copyright "MPL 1.0", // source code license PluginCodec_License_MPL, // source code license "Speex", // codec description "Jean-Marc Valin, Xiph Foundation.", // codec author "1.1.11.1", // codec version "jean-marc.valin@hermes.usherb.ca", // codec email "http://www.speex.org", // codec URL "(C) 2003 Xiph.Org Foundation, All Rights Reserved", // codec copyright information "Xiph BSD license", // codec license PluginCodec_License_BSD // codec license code }; static const char L16Desc[] = { "L16" }; static const char sdpSpeex[] = { "Speex" }; #define EQUIVALENCE_COUNTRY_CODE 9 #define EQUIVALENCE_EXTENSION_CODE 0 #define EQUIVALENCE_MANUFACTURER_CODE 61 #define MICROSOFT_COUNTRY_CODE 181 #define MICROSOFT_T35EXTENSION 0 #define MICROSOFT_MANUFACTURER 21324 #define XIPH_COUNTRY_CODE 0xB5 #define XIPH_EXTENSION_CODE 0x00 #define XIPH_MANUFACTURER_CODE 0x0026 static const unsigned char speexWNarrow8kHdr[] = { 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // WAVEFORMATEX 0x09, 0xa1, // WORD wFormatTag; format type 0x01, 0x00, // WORD nChannels; number of channels (i.e. mono, stereo...) 0x40, 0x1f, 0x00, 0x00, // DWORD nSamplesPerSec; sample rate 0xe8, 0x03, 0x00, 0x00, // DWORD nAvgBytesPerSec; for buffer estimation 0x14, 0x00, // WORD nBlockAlign; block size of data 0x10, 0x00, // WORD wBitsPerSample; Number of bits per sample of mono data 0x0e, 0x00, // WORD cbSize; The count in bytes of the size of extra information // Speex additional information 0x00, 0x01, // SPEEXWAVEFORMAT_VERSION 0x01, 0x00, // nFramesPerBlock 0x03, 0x00, // nQuality 0x00, 0x00, // nMode 0xf4, 0x01, // nVbrQuality 0x03, 0x00, // nComplexity 0x00, 0x00, // nFlags // unknown 0x00, 0x00 }; //////////////////////////////////////////////////////////////////////////////////////////////// #define CREATE_IETFSPEEX_CAP_DATA(desc, suffix, ordinal, rate) \ static const char ietfSpeex##suffix[] = "SpeexIETF" #desc; \ static const char ietfSpeex##suffix##Str[] = "speex sr=" #rate ";mode=" #ordinal ";vbr=off;cng=off"; \ static struct PluginCodec_H323NonStandardCodecData ietfSpeex##suffix##Cap = \ { \ NULL, \ XIPH_COUNTRY_CODE, XIPH_EXTENSION_CODE, XIPH_MANUFACTURER_CODE, \ (const unsigned char *)ietfSpeex##suffix##Str, sizeof(ietfSpeex##suffix##Str)-1, \ NULL \ }; \ //////////////////////////////////////////////////////////////////////////////////////////////// #define CREATE_NARROW_SPEEX_CAP_DATA(desc, suffix, ordinal) \ static const char speex##suffix[] = "Speex" #desc; \ static const char speex##suffix##Str[] = "Speex bs4 Narrow" #ordinal; \ static struct PluginCodec_H323NonStandardCodecData speex##suffix##Cap = \ { \ NULL, \ EQUIVALENCE_COUNTRY_CODE, EQUIVALENCE_EXTENSION_CODE, EQUIVALENCE_MANUFACTURER_CODE, \ (const unsigned char *)speex##suffix##Str, sizeof(speex##suffix##Str)-1, \ NULL \ }; \ CREATE_IETFSPEEX_CAP_DATA(desc, suffix, ordinal, 8000) \ #define DECLARE_H323_NARROW_SPEEX_CODEC(prefix, suffix, ordinal, bitsPerFrame) \ /* Original OpenH323 capability */ \ { \ /* encoder */ \ PLUGIN_CODEC_VERSION, /* codec API version */ \ &licenseInfo, /* license information */ \ PluginCodec_MediaTypeAudio | /* audio codec */ \ PluginCodec_InputTypeRaw | /* raw input data */ \ PluginCodec_OutputTypeRaw | /* raw output data */ \ PluginCodec_RTPTypeShared | /* share RTP code */ \ PluginCodec_RTPTypeDynamic | /* dynamic RTP type */ \ PluginCodec_DecodeSilence, /* can encode silence frames */ \ prefix##suffix, /* text decription */ \ L16Desc, /* source format */ \ prefix##suffix, /* destination format */ \ (void *)ordinal, /* user data */ \ 8000, /* samples per second */ \ bitsPerFrame*50, /* raw bits per second */ \ NS_PER_FRAME, /* nanoseconds per frame */ \ {{ \ NARROW_SAMPLES_PER_FRAME, /* samples per frame */ \ (bitsPerFrame + 7) / 8, /* bytes per frame */ \ 1, /* recommended number of frames per packet */ \ 1, /* maximum number of frames per packet */ \ }}, \ 0, /* IANA RTP payload code */ \ sdpSpeex, /* RTP payload name (used to reduce payload code usage) */ \ create_encoder, /* create codec function */ \ destroy_encoder, /* destroy codec */ \ codec_encoder, /* encode/decode */ \ h323EncoderControls, /* codec controls */ \ PluginCodec_H323Codec_nonStandard, /* h323CapabilityType */ \ &prefix##suffix##Cap /* h323CapabilityData */ \ }, \ { \ /* decoder */ \ PLUGIN_CODEC_VERSION, /* codec API version */ \ &licenseInfo, /* license information */ \ PluginCodec_MediaTypeAudio | /* audio codec */ \ PluginCodec_InputTypeRaw | /* raw input data */ \ PluginCodec_OutputTypeRaw | /* raw output data */ \ PluginCodec_RTPTypeShared | /* share RTP code */ \ PluginCodec_RTPTypeDynamic | /* dynamic RTP type */ \ PluginCodec_DecodeSilence, /* can encode silence frames */ \ prefix##suffix, /* text decription */ \ prefix##suffix, /* source format */ \ L16Desc, /* destination format */ \ (void *)ordinal, /* user data */ \ 8000, /* samples per second */ \ bitsPerFrame*50, /* raw bits per second */ \ NS_PER_FRAME, /* nanoseconds per frame */ \ {{ \ NARROW_SAMPLES_PER_FRAME, /* samples per frame */ \ (bitsPerFrame+7)/8, /* bytes per frame */ \ 1, /* recommended number of frames per packet */ \ 1, /* maximum number of frames per packet */ \ }}, \ 0, /* IANA RTP payload code */ \ sdpSpeex, /* RTP payload name (used to reduce payload code usage) */ \ create_decoder, /* create codec function */ \ destroy_decoder, /* destroy codec */ \ codec_decoder, /* encode/decode */ \ h323DecoderControls, /* codec controls */ \ PluginCodec_H323Codec_nonStandard, /* h323CapabilityType */ \ &prefix##suffix##Cap /* h323CapabilityData */ \ } \ CREATE_NARROW_SPEEX_CAP_DATA(Narrow-5.95k, Narrow5k95, 2) CREATE_NARROW_SPEEX_CAP_DATA(Narrow-8k, Narrow8k, 3) CREATE_NARROW_SPEEX_CAP_DATA(Narrow-11k, Narrow11k, 4) CREATE_NARROW_SPEEX_CAP_DATA(Narrow-15k, Narrow15k, 5) CREATE_NARROW_SPEEX_CAP_DATA(Narrow-18.2k, Narrow18k2, 6) CREATE_NARROW_SPEEX_CAP_DATA(Narrow-24.6k, Narrow24k6, 7) //////////////////////////////////////////////////////////////////////////////////////////////// #define CREATE_WIDE_SPEEX_CAP_DATA(desc, suffix, ordinal) \ static const char speex##suffix[] = "Speex" #desc; \ static const char speex##suffix##Str[] = "Speex bs4 Wide" #ordinal; \ static struct PluginCodec_H323NonStandardCodecData speex##suffix##Cap = \ { \ NULL, \ EQUIVALENCE_COUNTRY_CODE, EQUIVALENCE_EXTENSION_CODE, EQUIVALENCE_MANUFACTURER_CODE, \ (const unsigned char *)speex##suffix##Str, sizeof(speex##suffix##Str)-1, \ NULL \ }; \ CREATE_IETFSPEEX_CAP_DATA(desc, suffix, ordinal, 16000) #define DECLARE_H323_WIDE_SPEEX_CODEC(prefix, suffix, ordinal, bitsPerFrame) \ /* Original OpenH323 capability */ \ { \ /* encoder */ \ PLUGIN_CODEC_VERSION, /* codec API version */ \ &licenseInfo, /* license information */ \ PluginCodec_MediaTypeAudio | /* audio codec */ \ PluginCodec_InputTypeRaw | /* raw input data */ \ PluginCodec_OutputTypeRaw | /* raw output data */ \ PluginCodec_RTPTypeShared | /* share RTP code */ \ PluginCodec_RTPTypeDynamic | /* dynamic RTP type */ \ PluginCodec_DecodeSilence, /* can encode silence frames */ \ prefix##suffix, /* text decription */ \ L16Desc, /* source format */ \ prefix##suffix, /* destination format */ \ (void *)ordinal, /* user data */ \ 16000, /* samples per second */ \ bitsPerFrame*50, /* raw bits per second */ \ NS_PER_FRAME, /* nanoseconds per frame */ \ {{ \ WIDE_SAMPLES_PER_FRAME, /* samples per frame */ \ (bitsPerFrame+7)/8, /* bytes per frame */ \ 1, /* recommended number of frames per packet */ \ 1, /* maximum number of frames per packet */ \ }}, \ 0, /* IANA RTP payload code */ \ sdpSpeex, /* RTP payload name (used to reduce payload code usage) */ \ create_encoder, /* create codec function */ \ destroy_encoder, /* destroy codec */ \ codec_encoder, /* encode/decode */ \ h323EncoderControls, /* codec controls */ \ PluginCodec_H323Codec_nonStandard, /* h323CapabilityType */ \ &prefix##suffix##Cap /* h323CapabilityData */ \ }, \ { \ /* decoder */ \ PLUGIN_CODEC_VERSION, /* codec API version */ \ &licenseInfo, /* license information */ \ PluginCodec_MediaTypeAudio | /* audio codec */ \ PluginCodec_InputTypeRaw | /* raw input data */ \ PluginCodec_OutputTypeRaw | /* raw output data */ \ PluginCodec_RTPTypeShared | /* share RTP code */ \ PluginCodec_RTPTypeDynamic | /* dynamic RTP type */ \ PluginCodec_DecodeSilence, /* can encode silence frames */ \ prefix##suffix, /* text decription */ \ prefix##suffix, /* source format */ \ L16Desc, /* destination format */ \ (void *)ordinal, /* user data */ \ 16000, /* samples per second */ \ bitsPerFrame*50, /* raw bits per second */ \ NS_PER_FRAME, /* nanoseconds per frame */ \ {{ \ WIDE_SAMPLES_PER_FRAME, /* samples per frame */ \ (bitsPerFrame+7)/8, /* bytes per frame */ \ 1, /* recommended number of frames per packet */ \ 1, /* maximum number of frames per packet */ \ }}, \ 0, /* IANA RTP payload code */ \ sdpSpeex, /* RTP payload name (used to reduce payload code usage) */ \ create_decoder, /* create codec function */ \ destroy_decoder, /* destroy codec */ \ codec_decoder, /* encode/decode */ \ h323DecoderControls, /* codec controls */ \ PluginCodec_H323Codec_nonStandard, /* h323CapabilityType */ \ &prefix##suffix##Cap /* h323CapabilityData */ \ } \ //CREATE_WIDE_SPEEX_CAP_DATA(Wide-11.55k, Wide11k5, 2) //CREATE_WIDE_SPEEX_CAP_DATA(Wide-17.6k, Wide17k6, 3) //CREATE_WIDE_SPEEX_CAP_DATA(Wide-28.6k, Wide28k6, 4) CREATE_WIDE_SPEEX_CAP_DATA(Wide-20.6k, Wide20k6, 6) //////////////////////////////////////////////////////////////////////////////////////////////// #define CREATE_NARROW_SPEEXW_CAP_DATA(desc, suffix, ordinal) \ static const char speexW##suffix[] = "SpeexW" #desc; \ static struct PluginCodec_H323NonStandardCodecData speexW##suffix##Cap = \ { \ NULL, \ MICROSOFT_COUNTRY_CODE, MICROSOFT_T35EXTENSION, MICROSOFT_MANUFACTURER, \ speexW##suffix##Hdr, sizeof(speexW##suffix##Hdr), \ NULL \ }; \ #define DECLARE_H323_NARROW_SPEEXW_CODEC(suffix, ordinal, bitsPerFrame) \ /* SpeexW OpenH323 capability */ \ { \ /* encoder */ \ PLUGIN_CODEC_VERSION, /* codec API version */ \ &licenseInfo, /* license information */ \ PluginCodec_MediaTypeAudio | /* audio codec */ \ PluginCodec_InputTypeRaw | /* raw input data */ \ PluginCodec_OutputTypeRaw | /* raw output data */ \ PluginCodec_RTPTypeShared | /* share RTP code */ \ PluginCodec_RTPTypeDynamic | /* dynamic RTP type */ \ PluginCodec_DecodeSilence, /* can encode silence frames */ \ speexW##suffix, /* text decription */ \ L16Desc, /* source format */ \ speexW##suffix, /* destination format */ \ (void *)ordinal, /* user data */ \ 8000, /* samples per second */ \ bitsPerFrame*50, /* raw bits per second */ \ NS_PER_FRAME, /* nanoseconds per frame */ \ {{ \ NARROW_SAMPLES_PER_FRAME, /* samples per frame */ \ (bitsPerFrame+7)/8, /* bytes per frame */ \ 1, /* recommended number of frames per packet */ \ 1, /* maximum number of frames per packet */ \ }}, \ 0, /* IANA RTP payload code */ \ sdpSpeex, /* RTP payload name (used to reduce payload code usage) */ \ create_encoder, /* create codec function */ \ destroy_encoder, /* destroy codec */ \ codec_encoder, /* encode/decode */ \ h323EncoderControls, /* codec controls */ \ PluginCodec_H323Codec_nonStandard, /* h323CapabilityType */ \ &speexW##suffix##Cap /* h323CapabilityData */ \ }, \ { \ /* decoder */ \ PLUGIN_CODEC_VERSION, /* codec API version */ \ &licenseInfo, /* license information */ \ PluginCodec_MediaTypeAudio | /* audio codec */ \ PluginCodec_InputTypeRaw | /* raw input data */ \ PluginCodec_OutputTypeRaw | /* raw output data */ \ PluginCodec_RTPTypeShared | /* share RTP code */ \ PluginCodec_RTPTypeDynamic, /* dynamic RTP type */ \ speexW##suffix, /* text decription */ \ speexW##suffix, /* source format */ \ L16Desc, /* destination format */ \ (void *)ordinal, /* user data */ \ 8000, /* samples per second */ \ bitsPerFrame*50, /* raw bits per second */ \ NS_PER_FRAME, /* nanoseconds per frame */ \ {{ \ NARROW_SAMPLES_PER_FRAME, /* samples per frame */ \ (bitsPerFrame+7)/8, /* bytes per frame */ \ 1, /* recommended number of frames per packet */ \ 1, /* maximum number of frames per packet */ \ }}, \ 0, /* IANA RTP payload code */ \ sdpSpeex, /* RTP payload name (used to reduce payload code usage) */ \ create_decoder, /* create codec function */ \ destroy_decoder, /* destroy codec */ \ codec_decoder, /* encode/decode */ \ h323DecoderControls, /* codec controls */ \ PluginCodec_H323Codec_nonStandard, /* h323CapabilityType */ \ &speexW##suffix##Cap /* h323CapabilityData */ \ } \ CREATE_NARROW_SPEEXW_CAP_DATA(Narrow-8k, Narrow8k, 3) //////////////////////////////////////////////////////////////////////////////////////////////// #define DECLARE_SIP_SPEEX_CODEC(name, clockRate, suffix, ordinal, bitsPerFrame, samplesPerFrame) \ { \ /* encoder */ \ PLUGIN_CODEC_VERSION, /* codec API version */ \ &licenseInfo, /* license information */ \ PluginCodec_MediaTypeAudio | /* audio codec */ \ PluginCodec_InputTypeRaw | /* raw input data */ \ PluginCodec_OutputTypeRaw | /* raw output data */ \ PluginCodec_RTPTypeShared | /* share RTP code */ \ PluginCodec_RTPTypeDynamic | /* dynamic RTP type */ \ PluginCodec_DecodeSilence, /* can encode silence frames */ \ name, /* text decription */ \ L16Desc, /* source format */ \ name, /* destination format */ \ (void *)ordinal, /* user data */ \ clockRate, /* samples per second */ \ bitsPerFrame*50, /* raw bits per second */ \ NS_PER_FRAME, /* nanoseconds per frame */ \ {{ \ samplesPerFrame, /* samples per frame */ \ (bitsPerFrame + 7) / 8, /* bytes per frame */ \ 1, /* recommended number of frames per packet */ \ 1, /* maximum number of frames per packet */ \ }}, \ 0, /* IANA RTP payload code */ \ sdpSpeex, /* RTP payload name */ \ create_encoder, /* create codec function */ \ destroy_encoder, /* destroy codec */ \ codec_encoder, /* encode/decode */ \ sipEncoderControls, /* codec controls */ \ PluginCodec_H323Codec_NoH323, /* h323CapabilityType */ \ NULL /* h323CapabilityData */ \ }, \ { \ /* decoder */ \ PLUGIN_CODEC_VERSION, /* codec API version */ \ &licenseInfo, /* license information */ \ PluginCodec_MediaTypeAudio | /* audio codec */ \ PluginCodec_InputTypeRaw | /* raw input data */ \ PluginCodec_OutputTypeRaw | /* raw output data */ \ PluginCodec_RTPTypeShared | /* share RTP code */ \ PluginCodec_RTPTypeDynamic | /* dynamic RTP type */ \ PluginCodec_DecodeSilence, /* can encode silence frames */ \ name, /* text decription */ \ name, /* source format */ \ L16Desc, /* destination format */ \ (void *)ordinal, /* user data */ \ clockRate, /* samples per second */ \ bitsPerFrame*50, /* raw bits per second */ \ NS_PER_FRAME, /* nanoseconds per frame */ \ {{ \ samplesPerFrame, /* samples per frame */ \ (bitsPerFrame+7)/8, /* bytes per frame */ \ 1, /* recommended number of frames per packet */ \ 1, /* maximum number of frames per packet */ \ }}, \ 0, /* IANA RTP payload code */ \ sdpSpeex, /* RTP payload name */ \ create_decoder, /* create codec function */ \ destroy_decoder, /* destroy codec */ \ codec_decoder, /* encode/decode */ \ sipDecoderControls, /* codec controls */ \ PluginCodec_H323Codec_NoH323, /* h323CapabilityType */ \ NULL /* h323CapabilityData */ \ } \ //////////////////////////////////////////////////////////////////////////////////////////////// #define NARROW_BITSPERFRAME_MODE2 (Speex_Bits_Per_Second(2, 8000)/50) // 119 // 5950 #define NARROW_BITSPERFRAME_MODE3 (Speex_Bits_Per_Second(3, 8000)/50) // 160 // 8000 #define NARROW_BITSPERFRAME_MODE4 (Speex_Bits_Per_Second(4, 8000)/50) // 220 // 11000 #define NARROW_BITSPERFRAME_MODE5 (Speex_Bits_Per_Second(5, 8000)/50) // 300 // 15000 #define NARROW_BITSPERFRAME_MODE6 (Speex_Bits_Per_Second(6, 8000)/50) // 364 // 18200 #define NARROW_BITSPERFRAME_MODE7 (Speex_Bits_Per_Second(7, 8000)/50) // 492 // 26400 //#define WIDE_BITSPERFRAME_MODE2 ((Speex_Bytes_Per_Frame(2, 16000)/50) // NARROW_BITSPERFRAME_MODE2 + 112) // 11550 //#define WIDE_BITSPERFRAME_MODE3 ((Speex_Bytes_Per_Frame(3, 16000)/50) // 17600 //#define WIDE_BITSPERFRAME_MODE4 ((Speex_Bytes_Per_Frame(4, 16000)/50) // 28600 //#define WIDE_BITSPERFRAME_MODE5 ((Speex_Bytes_Per_Frame(5, 16000)/50) // 28600 #define WIDE_BITSPERFRAME_MODE6 (Speex_Bits_Per_Second(6, 16000)/50) // 20600 static struct PluginCodec_Definition ver1SpeexCodecDefn[] = { #ifdef INCLUDE_DEPRECATED_SPEEX_CODECS DECLARE_H323_NARROW_SPEEX_CODEC(speex, Narrow5k95, 2, NARROW_BITSPERFRAME_MODE2), DECLARE_H323_NARROW_SPEEX_CODEC(speex, Narrow8k, 3, NARROW_BITSPERFRAME_MODE3), DECLARE_H323_NARROW_SPEEX_CODEC(speex, Narrow11k, 4, NARROW_BITSPERFRAME_MODE4), DECLARE_H323_NARROW_SPEEX_CODEC(speex, Narrow15k, 5, NARROW_BITSPERFRAME_MODE5), DECLARE_H323_NARROW_SPEEX_CODEC(speex, Narrow18k2, 6, NARROW_BITSPERFRAME_MODE6), DECLARE_H323_NARROW_SPEEX_CODEC(speex, Narrow24k6, 7, NARROW_BITSPERFRAME_MODE7), #endif DECLARE_H323_NARROW_SPEEX_CODEC(ietfSpeex, Narrow5k95, 2, NARROW_BITSPERFRAME_MODE2), DECLARE_H323_NARROW_SPEEX_CODEC(ietfSpeex, Narrow8k, 3, NARROW_BITSPERFRAME_MODE3), DECLARE_H323_NARROW_SPEEX_CODEC(ietfSpeex, Narrow11k, 4, NARROW_BITSPERFRAME_MODE4), DECLARE_H323_NARROW_SPEEX_CODEC(ietfSpeex, Narrow15k, 5, NARROW_BITSPERFRAME_MODE5), DECLARE_H323_NARROW_SPEEX_CODEC(ietfSpeex, Narrow18k2, 6, NARROW_BITSPERFRAME_MODE6), DECLARE_H323_NARROW_SPEEX_CODEC(ietfSpeex, Narrow24k6, 7, NARROW_BITSPERFRAME_MODE7), //DECLARE_SPEEXW_CODEC(Narrow5k95, 2), // does not work DECLARE_H323_NARROW_SPEEXW_CODEC(Narrow8k, 3, NARROW_BITSPERFRAME_MODE3), //DECLARE_SPEEX_CODEC(Narrow11k, 4), // does not work //DECLARE_SPEEX_CODEC(Narrow15k, 5), // does not work //DECLARE_SPEEX_CODEC(Narrow18k2, 6), // does not work //DECLARE_SPEEX_CODEC(Narrow24k6, 7) // does not work }; #define NUM_VER1_DEFNS (sizeof(ver1SpeexCodecDefn) / sizeof(struct PluginCodec_Definition)) static struct PluginCodec_Definition ver2SpeexCodecDefn[] = { #ifdef INCLUDE_DEPRECATED_SPEEX_CODECS DECLARE_H323_NARROW_SPEEX_CODEC(speex, Narrow5k95, 2, NARROW_BITSPERFRAME_MODE2), DECLARE_H323_NARROW_SPEEX_CODEC(speex, Narrow8k, 3, NARROW_BITSPERFRAME_MODE3), DECLARE_H323_NARROW_SPEEX_CODEC(speex, Narrow11k, 4, NARROW_BITSPERFRAME_MODE4), DECLARE_H323_NARROW_SPEEX_CODEC(speex, Narrow15k, 5, NARROW_BITSPERFRAME_MODE5), DECLARE_H323_NARROW_SPEEX_CODEC(speex, Narrow18k2, 6, NARROW_BITSPERFRAME_MODE6), DECLARE_H323_NARROW_SPEEX_CODEC(speex, Narrow24k6, 7, NARROW_BITSPERFRAME_MODE7), #endif DECLARE_H323_NARROW_SPEEX_CODEC(ietfSpeex, Narrow5k95, 2, NARROW_BITSPERFRAME_MODE2), DECLARE_H323_NARROW_SPEEX_CODEC(ietfSpeex, Narrow8k, 3, NARROW_BITSPERFRAME_MODE3), DECLARE_H323_NARROW_SPEEX_CODEC(ietfSpeex, Narrow11k, 4, NARROW_BITSPERFRAME_MODE4), DECLARE_H323_NARROW_SPEEX_CODEC(ietfSpeex, Narrow15k, 5, NARROW_BITSPERFRAME_MODE5), DECLARE_H323_NARROW_SPEEX_CODEC(ietfSpeex, Narrow18k2, 6, NARROW_BITSPERFRAME_MODE6), DECLARE_H323_NARROW_SPEEX_CODEC(ietfSpeex, Narrow24k6, 7, NARROW_BITSPERFRAME_MODE7), //DECLARE_H323_WIDE_SPEEX_CODEC(ietfSpeex, Wide11k5, 2, WIDE_BITSPERFRAME_MODE2), //DECLARE_H323_WIDE_SPEEX_CODEC(ietfSpeex, Wide17k6, 3, WIDE_BITSPERFRAME_MODE3), //DECLARE_H323_WIDE_SPEEX_CODEC(ietfSpeex, Wide28k6, 4, WIDE_BITSPERFRAME_MODE4), //DECLARE_H323_WIDE_SPEEX_CODEC(ietfSpeex, Wide28k6, 5, WIDE_BITSPERFRAME_MODE6), DECLARE_H323_WIDE_SPEEX_CODEC(ietfSpeex, Wide20k6, 6, WIDE_BITSPERFRAME_MODE6), //DECLARE_SPEEXW_CODEC(Narrow5k95, 2), // does not work DECLARE_H323_NARROW_SPEEXW_CODEC(Narrow8k, 3, NARROW_BITSPERFRAME_MODE3), //DECLARE_SPEEX_CODEC(Narrow11k, 4), // does not work //DECLARE_SPEEX_CODEC(Narrow15k, 5), // does not work //DECLARE_SPEEX_CODEC(Narrow18k2, 6), // does not work //DECLARE_SPEEX_CODEC(Narrow24k6, 7) // does not work DECLARE_H323_WIDE_SPEEX_CODEC(speex, Wide20k6, 6, WIDE_BITSPERFRAME_MODE6), #ifdef INCLUDE_DEPRECATED_SPEEX_CODECS DECLARE_H323_WIDE_SPEEX_CODEC(speex, Wide11k5, 2, WIDE_BITSPERFRAME_MODE2), DECLARE_H323_WIDE_SPEEX_CODEC(speex, Wide17k6, 3, WIDE_BITSPERFRAME_MODE3), DECLARE_H323_WIDE_SPEEX_CODEC(speex, Wide28k6, 4, WIDE_BITSPERFRAME_MODE4), #endif DECLARE_SIP_SPEEX_CODEC("SpeexNB", 8000, Narrow8k, 3, NARROW_BITSPERFRAME_MODE3, NARROW_SAMPLES_PER_FRAME), DECLARE_SIP_SPEEX_CODEC("SpeexWB", 16000, Wide20k6, 6, WIDE_BITSPERFRAME_MODE6, WIDE_SAMPLES_PER_FRAME) }; #define NUM_VER2_DEFNS (sizeof(ver2SpeexCodecDefn) / sizeof(struct PluginCodec_Definition)) ///////////////////////////////////////////////////////////////////////////// extern "C" { PLUGIN_CODEC_IMPLEMENT(Speex) void OutputInfo(int mode, int rate) { int bps = Speex_Bits_Per_Second(mode, rate); //printf("mode = %i, rate = %i, bps = %i\n", mode, rate, bps); } PLUGIN_CODEC_DLL_API struct PluginCodec_Definition * PLUGIN_CODEC_GET_CODEC_FN(unsigned * count, unsigned version) { OutputInfo(2, 8000); OutputInfo(3, 8000); OutputInfo(4, 8000); OutputInfo(6, 16000); if (version == 1) { *count = NUM_VER1_DEFNS; return ver1SpeexCodecDefn; } else { *count = NUM_VER2_DEFNS; return ver2SpeexCodecDefn; } } }; h323plus/plugins/audio/Speex/Speex.vcproj0000644000175000017500000005215211341106241017264 0ustar markmark h323plus/plugins/audio/Speex/AUTHORS0000644000175000017500000000071511341106241016021 0ustar markmarkJean-Marc Valin All the code except the following David Rowe via VoiceTronix lsp.c lsp.h Also ideas and feedback John Francis Edwards: wave_out.[ch], some #ifdefs for windows port and MSVC project files Atsuhiko Yamanaka : Patch to speexenc.c to add Vorbis comment format Radim Kolar : Patch to speexenc.c for supporting more input formats h323plus/plugins/audio/Speex/Speex_2008.vcproj0000644000175000017500000005612611341106241017742 0ustar markmark h323plus/plugins/audio/Speex/PART_OF_SPEEX0000644000175000017500000000025011341106241016764 0ustar markmarkThe Speex codec is part of the Speex Library by Jean-Marc Valin http://www.speex.org The Speex codec was imported from Speex 1.0. h323plus/plugins/audio/Speex/Speex_2005.vcproj0000644000175000017500000005642011341106241017734 0ustar markmark h323plus/plugins/audio/Speex/COPYING0000644000175000017500000000262111341106241016002 0ustar markmarkRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. h323plus/plugins/audio/Speex/Speex.dsp0000644000175000017500000001464011341106241016547 0ustar markmark# Microsoft Developer Studio Project File - Name="Speex" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=Speex - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "Speex.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "Speex.mak" CFG="Speex - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "Speex - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "Speex - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "Speex - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "..\..\Release" # PROP Intermediate_Dir "..\..\Release\Speex" # PROP Ignore_Export_Lib 1 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SPEEX_EXPORTS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GR /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_CODEC_DLL_EXPORTS" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "NDEBUG" # ADD RSC /l 0xc09 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /machine:I386 /out:"../../Release/speex_pwplugin.dll" /implib:"..\..\Release\Speex/speexcodec.lib" !ELSEIF "$(CFG)" == "Speex - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "..\..\Debug" # PROP Intermediate_Dir "..\..\Debug\Speex" # PROP Ignore_Export_Lib 1 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SPEEX_EXPORTS" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GR /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_CODEC_DLL_EXPORTS" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "_DEBUG" # ADD RSC /l 0xc09 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /debug /machine:I386 /out:"../../Debug/speex_pwplugin.dll" /implib:"..\..\Debug\Speex/speexcodec.lib" /pdbtype:sept # SUBTRACT LINK32 /pdb:none !ENDIF # Begin Target # Name "Speex - Win32 Release" # Name "Speex - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\speexcodec.cxx # ADD CPP /W1 # End Source File # End Group # Begin Group "Speex" # PROP Default_Filter "" # Begin Source File SOURCE=.\libspeex\bits.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\cb_search.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\exc_10_16_table.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\exc_10_32_table.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\exc_20_32_table.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\exc_5_256_table.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\exc_5_64_table.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\exc_8_128_table.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\filters.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\gain_table.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\gain_table_lbr.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\hexc_10_32_table.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\hexc_table.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\high_lsp_tables.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\lpc.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\lsp.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\lsp_tables_nb.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\ltp.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\math_approx.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\misc.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\modes.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\nb_celp.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\quant_lsp.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\sb_celp.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\speex_callbacks.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\speex_header.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\stereo.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\vbr.c # ADD CPP /W1 # End Source File # Begin Source File SOURCE=.\libspeex\vq.c # ADD CPP /W1 # End Source File # End Group # End Target # End Project h323plus/plugins/audio/G7231ACM/0000755000175000017500000000000011341106231014705 5ustar markmarkh323plus/plugins/audio/G7231ACM/README.txt0000644000175000017500000000505211341106231016405 0ustar markmarkREADME for Microsoft ACM G.723.1 Codec ====================================== Craig Southeren, Post Increment 23 December 2003 Contents ======== 1. INTRODUCTION 2. BUILDING WITH WINDOWS 3. BUILDING WITH LINUX 4. PERFORMANCE 5. LICENSING 1. INTRODUCTION =============== This directory contains the files needed to use the Microsoft ACM G.723.1 codec with OpenH323. For obvious reasons, this codec is only available under Windows, although theoretically is would be possible to load the appropriate DLLs under Linux using one of the emulation packages available. 2. BUILDING WITH WINDOWS ======================== 1. Put the files is in the enclosed ZIP file into a subdirectory within the OpenH323 source tree called: openh323/src/acmcodec 2. Create acmcodec.lib by opening the MSVC project file acmcodec.dsp and compiling. Make sure the release and debug versions are created (if required). 3. Ensure that the user program include the acmcodec.h file as follows: #include "..\src\acmcodec\acmcodec.h" 4. Ensure that the correct G.723.1 capabilities are included, using a line like the following: SetCapability(0, 0, new H323_ACMG7231Capability); 5. Ensure that the user program is linked with the correct acmcodec.lib file. openh323/src/acmcodec/debug/acmcodec.lib or openh323/src/acmcodec/release/acmcodec.lib 3. PERFORMANCE ============== The Microsoft codec is capable of quite good performance on very modest hardware. No known problems are outstanding - this codec just works/ 4. LICENSING ============ The use of Microsoft codecs by programs other than NetMeeting has not been explicitly authorised or prohibited by Microsoft. This code is supplied solely for evaluation and research purposes. The provision of this code by Post Increment to any entity does not constitute the supply of a license to that entity to use, modify or distribute the code in any form, nor does it indemnify the entity against any legal actions that may arise from use of this code in any way. ---------------------------------------------------------------------- $Log: README.txt,v $ Revision 1.1 2010/02/24 02:19:05 shorne First commit of h323plus mirror Revision 1.2 2006/08/01 13:06:47 rjongbloed Added a raft of unvalidated audio codecs from OpenH323 tree Revision 1.1.2.1 2006/07/22 13:42:48 rjongbloed Added more plug ins Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed Imported all the audio codec plug ins from OpenH323 Revision 1.1 2004/01/06 07:04:15 craigs Initial version h323plus/plugins/audio/G7231ACM/g7231acm.cxx0000644000175000017500000004644211341106231016667 0ustar markmark#include #include #include #include #pragma comment(lib, "msacm32.lib") class WaveFormat { public: WaveFormat() { size = 0; waveFormat = NULL; } WaveFormat(const WaveFormat & fmt) { size = fmt.size; waveFormat = (WAVEFORMATEX *)malloc(size); memcpy(waveFormat, fmt.waveFormat, size); } ~WaveFormat() { if (waveFormat != NULL) free(waveFormat); } WaveFormat & operator=(const WaveFormat & fmt) { if (this == &fmt) return *this; if (waveFormat != NULL) free(waveFormat); size = fmt.size; waveFormat = (WAVEFORMATEX *)malloc(size); memcpy(waveFormat, fmt.waveFormat, size); return *this; } void SetFormat(unsigned numChannels, unsigned sampleRate, unsigned bitsPerSample) { if (waveFormat != NULL) free(waveFormat); size = sizeof(WAVEFORMATEX); waveFormat = (WAVEFORMATEX *)malloc(sizeof(WAVEFORMATEX)); waveFormat->wFormatTag = WAVE_FORMAT_PCM; waveFormat->nChannels = (WORD)numChannels; waveFormat->nSamplesPerSec = sampleRate; waveFormat->wBitsPerSample = (WORD)bitsPerSample; waveFormat->nBlockAlign = (WORD)(numChannels*(bitsPerSample+7)/8); waveFormat->nAvgBytesPerSec = waveFormat->nSamplesPerSec*waveFormat->nBlockAlign; waveFormat->cbSize = 0; } void SetFormat(const void * data, unsigned size) { SetSize(size); memcpy(waveFormat, data, size); } bool SetSize(unsigned sz) { if (waveFormat != NULL) free(waveFormat); size = sz; if (sz == 0) waveFormat = NULL; else { if (sz < sizeof(WAVEFORMATEX)) sz = sizeof(WAVEFORMATEX); waveFormat = (WAVEFORMATEX *)calloc(sz, 1); waveFormat->cbSize = (WORD)(sz - sizeof(WAVEFORMATEX)); } return waveFormat != NULL; } unsigned GetSize() const { return size; } void * GetPointer() const { return waveFormat; } WAVEFORMATEX * operator->() const { return waveFormat; } WAVEFORMATEX & operator *() const { return *waveFormat; } operator WAVEFORMATEX *() const { return waveFormat; } protected: unsigned size; WAVEFORMATEX * waveFormat; }; ///////////////////////////////////////////////////////////////////////////// static const struct { WAVEFORMATEX wf; BYTE extra[10]; } g7231format = { { 66, 1, 8000, 800, 24, 0, 10 }, { 2, 0, 0xce, 0x9a, 0x32, 0xf7, 0xa2, 0xae, 0xde, 0xac } }; static const unsigned G7231PacketSizes[4] = { 24, 20, 4, 1 }; ///////////////////////////////////////////////////////////////////////////// static void * create_encoder(const struct PluginCodec_Definition *) { WaveFormat srcFormat; srcFormat.SetFormat(1, 8000, 16); WaveFormat dstFormat; dstFormat.SetFormat(&g7231format, sizeof(g7231format)); HACMSTREAM hStream; MMRESULT result = acmStreamOpen(&hStream, NULL, // driver srcFormat, // source format dstFormat, // destination format NULL, // no filter NULL, // no callback 0, // instance data (not used) 0); // flags if (result != 0) return NULL; return (void *)hStream; } static int codec_encoder(const struct PluginCodec_Definition * /*defn*/, void * context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * /*flag*/) { HACMSTREAM hStream = (HACMSTREAM)context; if (hStream == NULL) return false; ACMSTREAMHEADER header; memset(&header, 0, sizeof(header)); header.cbStruct = sizeof(header); header.pbSrc = (unsigned char *)from; header.cbSrcLength = *fromLen; header.pbDst = (unsigned char *)to; header.cbDstLength = *toLen; // prep the header MMRESULT result = acmStreamPrepareHeader(hStream, &header, 0); if (result != 0) { //PTRACE(1, "Codec\tError in encode acmStreamPrepareHeader: error=" << result); return false; } result = acmStreamConvert(hStream, &header, 0); if (result != 0) { //PTRACE(1, "Codec\tError in encode acmStreamConvert: error=" << result); return false; } *fromLen = 240*2; *toLen = G7231PacketSizes[((unsigned char *)to)[0]&3]; return true; } static void destroy_encoder(const struct PluginCodec_Definition * /*defn*/, void * context) { HACMSTREAM hStream = (HACMSTREAM)context; if (hStream != NULL) acmStreamClose(hStream, 0); } ///////////////////////////////////////////////////////////////////////////// static void * create_decoder(const struct PluginCodec_Definition * /*defn*/) { WaveFormat srcFormat; srcFormat.SetFormat(&g7231format, sizeof(g7231format)); WaveFormat dstFormat; dstFormat.SetFormat(1, 8000, 16); HACMSTREAM hStream; MMRESULT result = acmStreamOpen(&hStream, NULL, // driver srcFormat, // source format dstFormat, // destination format NULL, // no filter NULL, // no callback 0, // instance data (not used) 0); // flags if (result != 0) return NULL; return (void *)hStream; } static int codec_decoder(const struct PluginCodec_Definition * /*defn*/, void * context, const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned int * /*flag*/) { HACMSTREAM hStream = (HACMSTREAM)context; if (hStream == NULL) return false; unsigned frameSize = G7231PacketSizes[((unsigned char *)from)[0]&3]; ACMSTREAMHEADER header; memset(&header, 0, sizeof(header)); header.cbStruct = sizeof(header); header.pbDst = (unsigned char *)to; header.cbDstLength = *toLen; header.pbSrc = (BYTE *)from; header.cbSrcLength = 24; // Must always be 24 regardless of the actual size BYTE frameBuffer[24]; if (frameSize < 24) { // Copy to another buffer in case buffer being provided isn't actually 24 bytes long memcpy(frameBuffer, from, frameSize); header.pbSrc = frameBuffer; } // prep the header MMRESULT result = acmStreamPrepareHeader(hStream, &header, 0); if (result != 0) { //PTRACE(1, "Codec\tError in decode acmStreamPrepareHeader: error=" << result); return false; } result = acmStreamConvert(hStream, &header, 0); if (result != 0) { //PTRACE(1, "Codec\tError in decode acmStreamConvert: error=" << result); return false; } *fromLen = frameSize; *toLen = 240*2; return true; } static void destroy_decoder(const struct PluginCodec_Definition * /*defn*/, void * context) { HACMSTREAM hStream = (HACMSTREAM)context; if (hStream != NULL) acmStreamClose(hStream, 0); } ///////////////////////////////////////////////////////////////////////////// static struct PluginCodec_information licenseInfo = { 1073357308, // timestamp = Tue 06 Jan 2004 02:48:28 AM UTC "Craig Southeren, Post Increment", // source code author "$Ver$", // source code version "craigs@postincrement.com", // source code email "http://www.postincrement.com", // source code URL "Copyright (C) 2004 by Post Increment, All Rights Reserved", // source code copyright "MPL 1.0", // source code license PluginCodec_License_MPL, // source code license "G.723.1", // codec description "Microsoft Corp.", // codec author NULL, // codec version NULL, // codec email NULL, // codec URL NULL, // codec copyright information NULL, // codec license PluginCodec_License_RoyaltiesRequired // codec license code }; static const char L16Desc[] = { "L16" }; static const char G7231Desc[] = { "G.723.1" }; static const char CiscoG7231A[] = { "Cisco G.7231A" }; static const char CiscoG7231AR[] = { "Cisco G.7231AR" }; static const char G7231ar[] = { "G7231ar" }; static const char ianaName[] = { "G723" }; static const int ianaCode = 4; static struct PluginCodec_H323NonStandardCodecData g7231arCap = { NULL, // object ID 181, // T35 country code 0, // T35 extension code 18, // T35 manufacturer code (const unsigned char *)G7231ar, // data sizeof(G7231ar)-1, // data length NULL // capability match function }; static PluginCodec_Definition g7231CodecDefn[] = { { // G.723.1 encoder PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeExplicit, // explicit RTP type G7231Desc, // text decription L16Desc, // source format G7231Desc, // destination format NULL, // user data 8000, // samples per second 6300, // raw bits per second 30000, // nanoseconds per frame 240, // samples per frame 24, // bytes per frame 1, // recommended number of frames per packet 4, // maximum number of frames per packet ianaCode, // IANA RTP payload code ianaName, // use standard IANA payload name for SDP create_encoder, // create codec function destroy_encoder, // destroy codec codec_encoder, // encode/decode NULL, // codec controls PluginCodec_H323AudioCodec_g7231, // h323CapabilityType 0, // h323CapabilityData (silence supression) }, { // G.723.1 decoder PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeExplicit, // explicit RTP type G7231Desc, // text decription G7231Desc, // source format L16Desc, // destination format NULL, // user data 8000, // samples per second 6300, // raw bits per second 30000, // nanoseconds per frame 240, // samples per frame 24, // bytes per frame 1, // recommended number of frames per packet 4, // maximum number of frames per packet ianaCode, // IANA RTP payload code ianaName, // use standard IANA payload name for SDP create_decoder, // create codec function destroy_decoder, // destroy codec codec_decoder, // encode/decode NULL, // codec controls PluginCodec_H323AudioCodec_g7231, // h323CapabilityType 0, // h323CapabilityData (silence supression) }, { // Cisco g7231a encoder PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeExplicit, // explicit RTP type CiscoG7231A, // text decription L16Desc, // source format CiscoG7231A, // destination format NULL, // user data 8000, // samples per second 6300, // raw bits per second 30000, // nanoseconds per frame 240, // samples per frame 24, // bytes per frame 1, // recommended number of frames per packet 4, // maximum number of frames per packet ianaCode, // IANA RTP payload code NULL, // No IANA payload name for SDP create_encoder, // create codec function destroy_encoder, // destroy codec codec_encoder, // encode/decode NULL, // codec controls PluginCodec_H323AudioCodec_g7231, // h323CapabilityType (void *)1, // h323CapabilityData (silence supression) }, { // Cisco g7231a decoder PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeExplicit, // explicit RTP type CiscoG7231A, // text decription CiscoG7231A, // source format L16Desc, // destination format NULL, // user data 8000, // samples per second 6300, // raw bits per second 30000, // nanoseconds per frame 240, // samples per frame 24, // bytes per frame 1, // recommended number of frames per packet 4, // maximum number of frames per packet ianaCode, // IANA RTP payload code NULL, // No IANA payload name for SDP create_decoder, // create codec function destroy_decoder, // destroy codec codec_decoder, // encode/decode NULL, // codec controls PluginCodec_H323AudioCodec_g7231, // h323CapabilityType (void *)1, // h323CapabilityData (silence supression) }, { // Cisco g7231ar encoder PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeExplicit, // explicit RTP type CiscoG7231AR, // text decription L16Desc, // source format CiscoG7231AR, // destination format NULL, // user data 8000, // samples per second 6300, // raw bits per second 30000, // nanoseconds per frame 240, // samples per frame 24, // bytes per frame 1, // recommended number of frames per packet 4, // maximum number of frames per packet ianaCode, // IANA RTP payload code NULL, // No IANA payload name for SDP create_encoder, // create codec function destroy_encoder, // destroy codec codec_encoder, // encode/decode NULL, // codec controls PluginCodec_H323Codec_nonStandard, // h323CapabilityType &g7231arCap // h323CapabilityData }, { // Cisco g7231ar decoder PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudio | // audio codec PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeExplicit, // explicit RTP type CiscoG7231AR, // text decription CiscoG7231AR, // source format L16Desc, // destination format NULL, // user data 8000, // samples per second 6300, // raw bits per second 30000, // nanoseconds per frame 240, // samples per frame 24, // bytes per frame 1, // recommended number of frames per packet 4, // maximum number of frames per packet ianaCode, // IANA RTP payload code NULL, // No IANA payload name for SDP create_decoder, // create codec function destroy_decoder, // destroy codec codec_decoder, // encode/decode NULL, // codec controls PluginCodec_H323Codec_nonStandard, // h323CapabilityType &g7231arCap // h323CapabilityData }, }; #define NUM_DEFNS (sizeof(g7231CodecDefn) / sizeof(PluginCodec_Definition)) ///////////////////////////////////////////////////////////////////////////// extern "C" { PLUGIN_CODEC_IMPLEMENT(G7231_ACM) PLUGIN_CODEC_DLL_API PluginCodec_Definition * PLUGIN_CODEC_GET_CODEC_FN(unsigned * count, unsigned /*version*/) { *count = NUM_DEFNS; return g7231CodecDefn; } }; h323plus/plugins/audio/G7231ACM/g7231acm.dsp0000644000175000017500000001015511341106231016643 0ustar markmark# Microsoft Developer Studio Project File - Name="g7231acm" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=g7231acm - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "g7231acm.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "g7231acm.mak" CFG="g7231acm - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "g7231acm - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "g7231acm - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "g7231acm - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "g7231acm___Win32_Release" # PROP BASE Intermediate_Dir "g7231acm___Win32_Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "..\Release" # PROP Intermediate_Dir "Release" # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "G7231ACM_EXPORTS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_CODEC_DLL_EXPORTS" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "NDEBUG" # ADD RSC /l 0xc09 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 !ELSEIF "$(CFG)" == "g7231acm - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "g7231acm___Win32_Debug" # PROP BASE Intermediate_Dir "g7231acm___Win32_Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "..\Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "G7231ACM_EXPORTS" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_CODEC_DLL_EXPORTS" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "_DEBUG" # ADD RSC /l 0xc09 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept !ENDIF # Begin Target # Name "g7231acm - Win32 Release" # Name "g7231acm - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\g7231acm.cxx !IF "$(CFG)" == "g7231acm - Win32 Release" !ELSEIF "$(CFG)" == "g7231acm - Win32 Debug" # SUBTRACT CPP /YX !ENDIF # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project h323plus/plugins/audio/G7231ACM/g7231acm.vcproj0000644000175000017500000001067011341106231017362 0ustar markmark h323plus/plugins/audio/G726/0000755000175000017500000000000011341106231014306 5ustar markmarkh323plus/plugins/audio/G726/Makefile.in0000644000175000017500000000625611341106231016364 0ustar markmark# # Makefile for G.726 codec plugin # # Copyright (C) 2004 Post Increment, All Rights Reserved # # The contents of this file are subject to the Mozilla Public License # Version 1.0 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is Open H323 library. # # The Initial Developer of the Original Code is Post Increment # # Contributor(s): ______________________________________. # # $Log: Makefile.in,v $ # Revision 1.1 2010/02/24 02:19:05 shorne # First commit of h323plus mirror # # Revision 1.4 2007/09/05 11:52:56 csoutheren # Fix compilation on MacOSX # # Revision 1.3 2007/04/19 06:09:03 csoutheren # Fixed plugin build system to use better detection for OSX # Resolved 1636262 - Fix for audio plugins for OSX # # Revision 1.2 2006/08/01 13:06:48 rjongbloed # Added a raft of unvalidated audio codecs from OpenH323 tree # # Revision 1.1.2.1 2006/07/22 13:42:48 rjongbloed # Added more plug ins # # Revision 1.1.2.1 2006/05/08 13:49:57 rjongbloed # Imported all the audio codec plug ins from OpenH323 # # Revision 1.4 2006/02/09 23:43:22 csoutheren # Removed lines included incorrectly via copy and paste # # Revision 1.3 2004/08/22 04:20:17 csoutheren # Added -fPIC to build commands to fix problems on 64 bit platforms # Thanks to Klaus Kaempf # # Revision 1.2 2004/06/24 23:33:16 csoutheren # Changed Makefiles to ensure all plugins have correct suffix # # Revision 1.1 2004/05/10 11:28:57 csoutheren # Added G.726 plugin # # AC_PLUGIN_DIR=@AC_PLUGIN_DIR@ prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ target_os=@target_os@ SONAME = g726 STDCCFLAGS += @STDCCFLAGS@ -fPIC SRCDIR = ./g726 OBJDIR = ./obj PLUGINDIR=../.. CC =@CC@ CFLAGS =@CFLAGS@ CXX =@CXX@ LDSO =@LDSO@ PLUGINEXT =@PLUGINEXT@ STDCCFLAGS =@STDCCFLAGS@ LDFLAGS =@LDFLAGS@ EXTRACFLAGS =-I$(PLUGINDIR) SRCS += g726codec.c \ g711.c \ $(SRCDIR)/g726_16.c \ $(SRCDIR)/g726_24.c \ $(SRCDIR)/g726_32.c \ $(SRCDIR)/g726_40.c \ $(SRCDIR)/g72x.c vpath %.o $(OBJDIR) vpath %.c $(SRCDIR) ifeq ($(VERBOSE),) Q_CC = @echo [CC] `echo $< | sed s^@OPALDIR@/^^` ; Q_LD = @echo [LD] `echo $(PLUGIN) | sed s^@OPALDIR@/^^` ; endif $(OBJDIR)/%.o : %.c @mkdir -p $(OBJDIR) >/dev/null 2>&1 $(Q_CC)$(CC) -I../../../include -I./g726 $(STDCCFLAGS) $(OPTCCFLAGS) $(EXTRACFLAGS) $(CFLAGS) -c $< -o $@ PLUGIN = ./g726_audio_pwplugin.$(PLUGINEXT) OBJECTS = $(addprefix $(OBJDIR)/,$(patsubst %.c,%.o,$(notdir $(SRCS)))) $(PLUGIN): $(OBJECTS) ifeq (solaris,$(findstring solaris,$(target_os))) $(Q_LD)$(CC) $(LDSO) $@ -o $@ $^ $(EXTRALIBS) else $(Q_LD)$(CC) $(LDSO) -o $@ $^ $(EXTRALIBS) endif install: mkdir -p $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR) install $(PLUGIN) $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR) uninstall: rm -f $(DESTDIR)$(libdir)/$(AC_PLUGIN_DIR)/$(PLUGIN) clean: rm -f $(OBJECTS) $(PLUGIN) ########################################### h323plus/plugins/audio/G726/G726.dsp0000644000175000017500000001132311341106231015443 0ustar markmark# Microsoft Developer Studio Project File - Name="G726" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=G726 - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "G726.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "G726.mak" CFG="G726 - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "G726 - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "G726 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "G726 - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "..\..\Release" # PROP Intermediate_Dir "..\..\Release\G726" # PROP Ignore_Export_Lib 1 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "G726_EXPORTS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_CODEC_DLL_EXPORTS" /D "G726_EXPORTS" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "NDEBUG" # ADD RSC /l 0xc09 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /machine:I386 /out:"../../Release/g726_pwplugin.dll" /implib:"..\..\Release\G726\g726codec_pwplugin.lib" !ELSEIF "$(CFG)" == "G726 - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "..\..\Debug" # PROP Intermediate_Dir "..\..\Debug\G726" # PROP Ignore_Export_Lib 1 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "G726_EXPORTS" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_CODEC_DLL_EXPORTS" /D "G726_EXPORTS" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "_DEBUG" # ADD RSC /l 0xc09 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /debug /machine:I386 /out:"..\..\Debug\g726_pwplugin.dll" /implib:"..\..\Debug\G726\g726codec_pwplugin.lib" /pdbtype:sept # SUBTRACT LINK32 /pdb:none !ENDIF # Begin Target # Name "G726 - Win32 Release" # Name "G726 - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\g711.c # End Source File # Begin Source File SOURCE=.\g726codec.c !IF "$(CFG)" == "G726 - Win32 Release" # PROP Intermediate_Dir "..\..\Release\G726" !ELSEIF "$(CFG)" == "G726 - Win32 Debug" # PROP Intermediate_Dir "..\..\Debug\G726" !ENDIF # End Source File # End Group # Begin Group "G.726" # PROP Default_Filter "" # Begin Source File SOURCE=.\g726\g726_16.c # End Source File # Begin Source File SOURCE=.\g726\g726_24.c # End Source File # Begin Source File SOURCE=.\g726\g726_32.c # End Source File # Begin Source File SOURCE=.\g726\g726_40.c # End Source File # Begin Source File SOURCE=.\g726\g72x.c # End Source File # Begin Source File SOURCE=.\g726\g72x.h # End Source File # Begin Source File SOURCE=.\g726\private.h # End Source File # End Group # End Target # End Project h323plus/plugins/audio/G726/G726.vcproj0000644000175000017500000001651311341106231016166 0ustar markmark h323plus/plugins/audio/G726/G726_2008.vcproj0000644000175000017500000002003011341106231016624 0ustar markmark h323plus/plugins/audio/G726/g711.c0000644000175000017500000002036511341106231015137 0ustar markmark/* * This source code is a product of Sun Microsystems, Inc. and is provided * for unrestricted use. Users may copy or modify this source code without * charge. * * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. * * Sun source code is provided with no support and without any obligation on * the part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. * * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE * OR ANY PART THEREOF. * * In no event will Sun Microsystems, Inc. be liable for any lost revenue * or profits or other special, indirect and consequential damages, even if * Sun has been advised of the possibility of such damages. * * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 */ /* * g711.c * * u-law, A-law and linear PCM conversions. */ /* * December 30, 1994: * Functions linear2alaw, linear2ulaw have been updated to correctly * convert unquantized 16 bit values. * Tables for direct u- to A-law and A- to u-law conversions have been * corrected. * Borge Lindberg, Center for PersonKommunikation, Aalborg University. * bli@cpk.auc.dk * */ #define SIGN_BIT (0x80) /* Sign bit for a A-law byte. */ #define QUANT_MASK (0xf) /* Quantization field mask. */ #define NSEGS (8) /* Number of A-law segments. */ #define SEG_SHIFT (4) /* Left shift for segment number. */ #define SEG_MASK (0x70) /* Segment field mask. */ static int seg_aend[8] = {0x1F, 0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF, 0xFFF}; static int seg_uend[8] = {0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF, 0xFFF, 0x1FFF}; /* copy from CCITT G.711 specifications */ unsigned char u2a[128] = { /* u- to A-law conversions */ 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, /* corrected: 81, 82, 83, 84, 85, 86, 87, 88, should be: */ 80, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128}; unsigned char a2u[128] = { /* A- to u-law conversions */ 1, 3, 5, 7, 9, 11, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 48, 49, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 64, 65, 66, 67, 68, 69, 70, 71, 72, /* corrected: 73, 74, 75, 76, 77, 78, 79, 79, should be: */ 73, 74, 75, 76, 77, 78, 79, 80, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127}; static int search( int val, /* changed from "short" *drago* */ int * table, int size) /* changed from "short" *drago* */ { int i; /* changed from "short" *drago* */ for (i = 0; i < size; i++) { if (val <= *table++) return (i); } return (size); } /* * linear2alaw() - Convert a 16-bit linear PCM value to 8-bit A-law * * linear2alaw() accepts an 16-bit integer and encodes it as A-law data. * * Linear Input Code Compressed Code * ------------------------ --------------- * 0000000wxyza 000wxyz * 0000001wxyza 001wxyz * 000001wxyzab 010wxyz * 00001wxyzabc 011wxyz * 0001wxyzabcd 100wxyz * 001wxyzabcde 101wxyz * 01wxyzabcdef 110wxyz * 1wxyzabcdefg 111wxyz * * For further information see John C. Bellamy's Digital Telephony, 1982, * John Wiley & Sons, pps 98-111 and 472-476. */ int linear2alaw(int pcm_val) /* 2's complement (16-bit range) */ /* changed from "short" *drago* */ { int mask; /* changed from "short" *drago* */ int seg; /* changed from "short" *drago* */ int aval; pcm_val = pcm_val >> 3; if (pcm_val >= 0) { mask = 0xD5; /* sign (7th) bit = 1 */ } else { mask = 0x55; /* sign bit = 0 */ pcm_val = -pcm_val - 1; } /* Convert the scaled magnitude to segment number. */ seg = search(pcm_val, seg_aend, 8); /* Combine the sign, segment, and quantization bits. */ if (seg >= 8) /* out of range, return maximum value. */ return (0x7F ^ mask); else { aval = seg << SEG_SHIFT; if (seg < 2) aval |= (pcm_val >> 1) & QUANT_MASK; else aval |= (pcm_val >> seg) & QUANT_MASK; return (aval ^ mask); } } /* * alaw2linear() - Convert an A-law value to 16-bit linear PCM * */ int alaw2linear(int a_val) { int t; /* changed from "short" *drago* */ int seg; /* changed from "short" *drago* */ a_val ^= 0x55; t = (a_val & QUANT_MASK) << 4; seg = ((unsigned)a_val & SEG_MASK) >> SEG_SHIFT; switch (seg) { case 0: t += 8; break; case 1: t += 0x108; break; default: t += 0x108; t <<= seg - 1; } return ((a_val & SIGN_BIT) ? t : -t); } #define BIAS (0x84) /* Bias for linear code. */ #define CLIP 8159 /* * linear2ulaw() - Convert a linear PCM value to u-law * * In order to simplify the encoding process, the original linear magnitude * is biased by adding 33 which shifts the encoding range from (0 - 8158) to * (33 - 8191). The result can be seen in the following encoding table: * * Biased Linear Input Code Compressed Code * ------------------------ --------------- * 00000001wxyza 000wxyz * 0000001wxyzab 001wxyz * 000001wxyzabc 010wxyz * 00001wxyzabcd 011wxyz * 0001wxyzabcde 100wxyz * 001wxyzabcdef 101wxyz * 01wxyzabcdefg 110wxyz * 1wxyzabcdefgh 111wxyz * * Each biased linear code has a leading 1 which identifies the segment * number. The value of the segment number is equal to 7 minus the number * of leading 0's. The quantization interval is directly available as the * four bits wxyz. * The trailing bits (a - h) are ignored. * * Ordinarily the complement of the resulting code word is used for * transmission, and so the code word is complemented before it is returned. * * For further information see John C. Bellamy's Digital Telephony, 1982, * John Wiley & Sons, pps 98-111 and 472-476. */ int linear2ulaw( int pcm_val) /* 2's complement (16-bit range) */ { int mask; int seg; int uval; /* Get the sign and the magnitude of the value. */ pcm_val = pcm_val >> 2; if (pcm_val < 0) { pcm_val = -pcm_val; mask = 0x7F; } else { mask = 0xFF; } if ( pcm_val > CLIP ) pcm_val = CLIP; /* clip the magnitude */ pcm_val += (BIAS >> 2); /* Convert the scaled magnitude to segment number. */ seg = search(pcm_val, seg_uend, 8); /* * Combine the sign, segment, quantization bits; * and complement the code word. */ if (seg >= 8) /* out of range, return maximum value. */ return (0x7F ^ mask); else { uval = (seg << 4) | ((pcm_val >> (seg + 1)) & 0xF); return (uval ^ mask); } } /* * ulaw2linear() - Convert a u-law value to 16-bit linear PCM * * First, a biased linear code is derived from the code word. An unbiased * output can then be obtained by subtracting 33 from the biased code. * * Note that this function expects to be passed the complement of the * original code word. This is in keeping with ISDN conventions. */ int ulaw2linear( int u_val) { int t; /* Complement to obtain normal u-law value. */ u_val = ~u_val; /* * Extract and bias the quantization bits. Then * shift up by the segment number and subtract out the bias. */ t = ((u_val & QUANT_MASK) << 3) + BIAS; t <<= (u_val & SEG_MASK) >> SEG_SHIFT; return ((u_val & SIGN_BIT) ? (BIAS - t) : (t - BIAS)); } #if 0 /* A-law to u-law conversion */ static int alaw2ulaw (int aval) { aval &= 0xff; return ((aval & 0x80) ? (0xFF ^ a2u[aval ^ 0xD5]) : (0x7F ^ a2u[aval ^ 0x55])); } /* u-law to A-law conversion */ static int ulaw2alaw (int uval) { uval &= 0xff; return ((uval & 0x80) ? (0xD5 ^ (u2a[0xFF ^ uval] - 1)) : (0x55 ^ (u2a[0x7F ^ uval] - 1))); } #endif h323plus/plugins/audio/G726/G726_2005.vcproj0000644000175000017500000002033011341106231016624 0ustar markmark h323plus/plugins/audio/G726/g726codec.c0000644000175000017500000004651611341106231016151 0ustar markmark/* * G.726 plugin codec for OpenH323/OPAL * * Copyright (C) 2004 Post Increment, All Rights Reserved * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Post Increment * * Contributor(s): ______________________________________. * * $Revision: 1.1 $ * $Author: shorne $ * $Date: 2010/02/24 02:19:05 $ */ #define _CRT_NONSTDC_NO_DEPRECATE 1 #define _CRT_SECURE_NO_WARNINGS 1 #include #include #include #ifndef PLUGIN_CODEC_DLL_EXPORTS #include "plugin-config.h" #endif #include #include "g726/g72x.h" #define SAMPLES_PER_FRAME 8 #define MAX_FRAMES_PER_PACKET 240 // Really milliseconds #define PREF_FRAMES_PER_PACKET 30 // Really milliseconds #define PAYLOAD_CODE 96 // used to be 2, now uses dynamic payload type (RFC 3551) ///////////////////////////////////////////////////////////////////////////// static void * create_codec(const struct PluginCodec_Definition * codec) { struct g726_state_s * g726 = malloc(sizeof (struct g726_state_s)); g726_init_state(g726); return g726; } static void destroy_codec(const struct PluginCodec_Definition * codec, void * context) { free(context); } ///////////////////////////////////////////////////////////////////////////// #define define_coder(dir, bps) \ static int dir##coder_##bps(const struct PluginCodec_Definition * codec, \ void * context, \ const void * from, \ unsigned * fromLen, \ void * to, \ unsigned * toLen, \ unsigned int * flag) \ { \ *(int *)to = g726_##bps##_##dir##coder(*(int *)from, AUDIO_ENCODING_LINEAR, (struct g726_state_s *)context); \ return 1; \ } define_coder(en, 40) define_coder(de, 40) define_coder(en, 32) define_coder(de, 32) define_coder(en, 24) define_coder(de, 24) define_coder(en, 16) define_coder(de, 16) ///////////////////////////////////////////////////////////////////////////// static struct PluginCodec_information licenseInfo = { 1084181196, // timestamp = Mon 10 May 2004 09:26:36 AM UTC "Craig Southeren, Post Increment", // source code author "1.0", // source code version "craigs@postincrement.com", // source code email "http://www.postincrement.com", // source code URL "Copyright (C) 2004 by Post Increment, All Rights Reserved", // source code copyright "MPL 1.0", // source code license PluginCodec_License_MPL, // source code license "CCITT Recommendation G.721", // codec description "Sun Microsystems, Inc.", // codec author NULL, // codec version NULL, // codec email NULL, // codec URL "This source code is a product of Sun Microsystems, Inc. and is provided\n" "for unrestricted use. Users may copy or modify this source code without charge", // codec copyright information NULL, // codec license PluginCodec_Licence_None // codec license code }; ///////////////////////////////////////////////////////////////////////////// static const char L16Desc[] = { "L16" }; static const char sdpG726_16[] = { "G726-16" }; static const char sdpG726_24[] = { "G726-24" }; static const char sdpG726_32[] = { "G726-32" }; static const char sdpG726_40[] = { "G726-40" }; static const char g726_40[] = "G.726-40k"; static const char g726_32[] = "G.726-32k"; static const char g726_24[] = "G.726-24k"; static const char g726_16[] = "G.726-16k"; ///////////////////////////////////////////////////////////////////////////// #define EQUIVALENCE_COUNTRY_CODE 9 #define EQUIVALENCE_EXTENSION_CODE 0 #define EQUIVALENCE_MANUFACTURER_CODE 61 static struct PluginCodec_H323NonStandardCodecData g726_40_Cap = { NULL, EQUIVALENCE_COUNTRY_CODE, EQUIVALENCE_EXTENSION_CODE, EQUIVALENCE_MANUFACTURER_CODE, (const unsigned char *)g726_40, sizeof(g726_40)-1, NULL }; static struct PluginCodec_H323NonStandardCodecData g726_32_Cap = { NULL, EQUIVALENCE_COUNTRY_CODE, EQUIVALENCE_EXTENSION_CODE, EQUIVALENCE_MANUFACTURER_CODE, (const unsigned char *)g726_32, sizeof(g726_32)-1, NULL }; static struct PluginCodec_H323NonStandardCodecData g726_24_Cap = { NULL, EQUIVALENCE_COUNTRY_CODE, EQUIVALENCE_EXTENSION_CODE, EQUIVALENCE_MANUFACTURER_CODE, (const unsigned char *)g726_24, sizeof(g726_24)-1, NULL }; static struct PluginCodec_H323NonStandardCodecData g726_16_Cap = { NULL, EQUIVALENCE_COUNTRY_CODE, EQUIVALENCE_EXTENSION_CODE, EQUIVALENCE_MANUFACTURER_CODE, (const unsigned char *)g726_16, sizeof(g726_16)-1, NULL }; static struct PluginCodec_Definition g726CodecDefn[] = { { // encoder 40k PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudioStreamed | // audio codec (5 << PluginCodec_BitsPerSamplePos) | // bits per sample PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic, // dynamic RTP type g726_40, // text decription L16Desc, // source format g726_40, // destination format 0, // user data 8000, // samples per second 40000, // raw bits per second 1000, // nanoseconds per frame {{ SAMPLES_PER_FRAME, // samples per frame 5, // bytes per frame PREF_FRAMES_PER_PACKET, // recommended number of frames per packet MAX_FRAMES_PER_PACKET, // maximum number of frames per packe }}, PAYLOAD_CODE, // IANA RTP payload code sdpG726_40, // RTP payload name create_codec, // create codec function destroy_codec, // destroy codec encoder_40, // encode/decode NULL, // codec controls PluginCodec_H323Codec_nonStandard, // h323CapabilityType &g726_40_Cap // h323CapabilityData }, { // decoder 40k PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudioStreamed | // audio codec (5 << PluginCodec_BitsPerSamplePos) | // bits per sample PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic, // dynamic RTP type g726_40, // text decription g726_40, // source format L16Desc, // destination format 0, // user data 8000, // samples per second 40000, // raw bits per second 1000, // nanoseconds per frame {{ SAMPLES_PER_FRAME, // samples per frame 5, // bytes per frame PREF_FRAMES_PER_PACKET, // recommended number of frames per packet MAX_FRAMES_PER_PACKET, // maximum number of frames per packe }}, PAYLOAD_CODE, // IANA RTP payload code sdpG726_40, // RTP payload name create_codec, // create codec function destroy_codec, // destroy codec decoder_40, // encode/decode NULL, // codec controls PluginCodec_H323Codec_nonStandard, // h323CapabilityType &g726_40_Cap // h323CapabilityData }, //////////////////////////////////// { // encoder 32k PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudioStreamed | // audio codec (4 << PluginCodec_BitsPerSamplePos) | // bits per sample PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic, // dynamic RTP type g726_32, // text decription L16Desc, // source format g726_32, // destination format 0, // user data 8000, // samples per second 32000, // raw bits per second 1000, // nanoseconds per frame SAMPLES_PER_FRAME, // samples per frame 4, // bytes per frame PREF_FRAMES_PER_PACKET, // recommended number of frames per packet MAX_FRAMES_PER_PACKET, // maximum number of frames per packe PAYLOAD_CODE, // IANA RTP payload code sdpG726_32, // RTP payload name create_codec, // create codec function destroy_codec, // destroy codec encoder_32, // encode/decode NULL, // codec controls PluginCodec_H323Codec_nonStandard, // h323CapabilityType &g726_32_Cap // h323CapabilityData }, { // decoder 32k PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudioStreamed | // audio codec (4 << PluginCodec_BitsPerSamplePos) | // bits per sample PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic, // dynamic RTP type g726_32, // text decription g726_32, // source format L16Desc, // destination format 0, // user data 8000, // samples per second 32000, // raw bits per second 1000, // nanoseconds per frame SAMPLES_PER_FRAME, // samples per frame 4, // bytes per frame PREF_FRAMES_PER_PACKET, // recommended number of frames per packet MAX_FRAMES_PER_PACKET, // maximum number of frames per packe PAYLOAD_CODE, // IANA RTP payload code sdpG726_32, // RTP payload name create_codec, // create codec function destroy_codec, // destroy codec decoder_32, // encode/decode NULL, // codec controls PluginCodec_H323Codec_nonStandard, // h323CapabilityType &g726_32_Cap // h323CapabilityData }, //////////////////////////////////// { // encoder 24k PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudioStreamed | // audio codec (3 << PluginCodec_BitsPerSamplePos) | // bits per sample PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic, // dynamic RTP type g726_24, // text decription L16Desc, // source format g726_24, // destination format 0, // user data 8000, // samples per second 24000, // raw bits per second 1000, // nanoseconds per frame SAMPLES_PER_FRAME, // samples per frame 3, // bytes per frame PREF_FRAMES_PER_PACKET, // recommended number of frames per packet MAX_FRAMES_PER_PACKET, // maximum number of frames per packe PAYLOAD_CODE, // IANA RTP payload code sdpG726_24, // RTP payload name create_codec, // create codec function destroy_codec, // destroy codec encoder_24, // encode/decode NULL, // codec controls PluginCodec_H323Codec_nonStandard, // h323CapabilityType &g726_24_Cap // h323CapabilityData }, { // decoder 24k PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudioStreamed | // audio codec (3 << PluginCodec_BitsPerSamplePos) | // bits per sample PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic, // dynamic RTP type g726_24, // text decription g726_24, // source format L16Desc, // destination format 0, // user data 8000, // samples per second 24000, // raw bits per second 1000, // nanoseconds per frame SAMPLES_PER_FRAME, // samples per frame 3, // bytes per frame PREF_FRAMES_PER_PACKET, // recommended number of frames per packet MAX_FRAMES_PER_PACKET, // maximum number of frames per packe PAYLOAD_CODE, // IANA RTP payload code sdpG726_32, // RTP payload name create_codec, // create codec function destroy_codec, // destroy codec decoder_24, // encode/decode NULL, // codec controls PluginCodec_H323Codec_nonStandard, // h323CapabilityType &g726_24_Cap // h323CapabilityData }, //////////////////////////////////// { // encoder 16k PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudioStreamed | // audio codec (2 << PluginCodec_BitsPerSamplePos) | // bits per sample PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic, // dynamic RTP type g726_16, // text decription L16Desc, // source format g726_16, // destination format 0, // user data 8000, // samples per second 16000, // raw bits per second 1000, // nanoseconds per frame SAMPLES_PER_FRAME, // samples per frame 2, // bytes per frame PREF_FRAMES_PER_PACKET, // recommended number of frames per packet MAX_FRAMES_PER_PACKET, // maximum number of frames per packe PAYLOAD_CODE, // IANA RTP payload code sdpG726_16, // RTP payload name create_codec, // create codec function destroy_codec, // destroy codec encoder_16, // encode/decode NULL, // codec controls PluginCodec_H323Codec_nonStandard, // h323CapabilityType &g726_16_Cap // h323CapabilityData }, { // decoder 16k PLUGIN_CODEC_VERSION, // codec API version &licenseInfo, // license information PluginCodec_MediaTypeAudioStreamed | // audio codec (2 << PluginCodec_BitsPerSamplePos) | // bits per sample PluginCodec_InputTypeRaw | // raw input data PluginCodec_OutputTypeRaw | // raw output data PluginCodec_RTPTypeDynamic, // dynamic RTP type g726_16, // text decription g726_16, // source format L16Desc, // destination format 0, // user data 8000, // samples per second 16000, // raw bits per second 1000, // nanoseconds per frame SAMPLES_PER_FRAME, // samples per frame 2, // bytes per frame PREF_FRAMES_PER_PACKET, // recommended number of frames per packet MAX_FRAMES_PER_PACKET, // maximum number of frames per packe PAYLOAD_CODE, // IANA RTP payload code sdpG726_16, // RTP payload name create_codec, // create codec function destroy_codec, // destroy codec decoder_16, // encode/decode NULL, // codec controls PluginCodec_H323Codec_nonStandard, // h323CapabilityType &g726_16_Cap // h323CapabilityData } }; PLUGIN_CODEC_IMPLEMENT_ALL(G726, g726CodecDefn, PLUGIN_CODEC_VERSION) ///////////////////////////////////////////////////////////////////////////// h323plus/plugins/audio/G726/g726/0000755000175000017500000000000011341106231014773 5ustar markmarkh323plus/plugins/audio/G726/g726/private.h0000644000175000017500000000301111341106231016611 0ustar markmark/** * * $Revision: 1.1 $ * $Author: shorne $ * $Date: 2010/02/24 02:19:05 $ */ #if !defined G726_PRIVATE #define G726_PRIVATE int linear2ulaw(int pcm_val); int ulaw2linear(int u_val); int linear2alaw(int pcm_val); int alaw2linear(int u_val); static int fmult(int an, int srn); int predictor_zero( g726_state *state_ptr); int predictor_pole( g726_state *state_ptr); int step_size( g726_state *state_ptr); int quantize( int d, /* Raw difference signal sample */ int y, /* Step size multiplier */ int * table, /* quantization table */ int size); /* table size of short integers */ int reconstruct( int sign, /* 0 for non-negative value */ int dqln, /* G.72x codeword */ int y); /* Step size multiplier */ void update( int code_size, /* distinguish 723_40 with others */ int y, /* quantizer step size */ int wi, /* scale factor multiplier */ int fi, /* for long/short term energies */ int dq, /* quantized prediction difference */ int sr, /* reconstructed signal */ int dqsez, /* difference from 2-pole predictor */ g726_state *state_ptr); /* coder state pointer */ int tandem_adjust_alaw( int sr, /* decoder output linear PCM sample */ int se, /* predictor estimate sample */ int y, /* quantizer step size */ int i, /* decoder input code */ int sign, int * qtab); int tandem_adjust_ulaw( int sr, /* decoder output linear PCM sample */ int se, /* predictor estimate sample */ int y, /* quantizer step size */ int i, /* decoder input code */ int sign, int * qtab); #endif // G726_PRIVATE h323plus/plugins/audio/G726/g726/g72x.c0000644000175000017500000003410311341106231015727 0ustar markmark/* * This source code is a product of Sun Microsystems, Inc. and is provided * for unrestricted use. Users may copy or modify this source code without * charge. * * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. * * Sun source code is provided with no support and without any obligation on * the part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. * * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE * OR ANY PART THEREOF. * * In no event will Sun Microsystems, Inc. be liable for any lost revenue * or profits or other special, indirect and consequential damages, even if * Sun has been advised of the possibility of such damages. * * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 */ /* * $Revision: 1.1 $ * $Author: shorne $ * $Date: 2010/02/24 02:19:05 $ */ #include "g72x.h" #include "private.h" static int power2[15] = {1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80, 0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000, 0x4000}; #ifndef abs #define abs(n) ((n)<0 ? -(n) : (n)) #endif /* * quan() * * quantizes the input val against the table of size short integers. * It returns i if table[i - 1] <= val < table[i]. * * Using linear search for simple coding. */ static int quan( int val, int * table, int size) { int i; for (i = 0; i < size; i++) if (val < *table++) break; return (i); } /* * fmult() * * returns the integer product of the 14-bit integer "an" and * "floating point" representation (4-bit exponent, 6-bit mantessa) "srn". */ static int fmult( int an, int srn) { int anmag; int anexp; int anmant; int wanexp; int wanmant; int retval; anmag = (an > 0) ? an : ((-an) & 0x1FFF); anexp = quan(anmag, power2, 15) - 6; anmant = (anmag == 0) ? 32 : (anexp >= 0) ? anmag >> anexp : anmag << -anexp; wanexp = anexp + ((srn >> 6) & 0xF) - 13; wanmant = (anmant * (srn & 077) + 0x30) >> 4; retval = (wanexp >= 0) ? ((wanmant << wanexp) & 0x7FFF) : (wanmant >> -wanexp); return (((an ^ srn) < 0) ? -retval : retval); } /* * g72x_init_state() * * This routine initializes and/or resets the g72x_state structure * pointed to by 'state_ptr'. * All the initial state values are specified in the CCITT G.721 document. */ void g726_init_state( g726_state *state_ptr) { int cnta; state_ptr->yl = 34816; state_ptr->yu = 544; state_ptr->dms = 0; state_ptr->dml = 0; state_ptr->ap = 0; for (cnta = 0; cnta < 2; cnta++) { state_ptr->a[cnta] = 0; state_ptr->pk[cnta] = 0; state_ptr->sr[cnta] = 32; } for (cnta = 0; cnta < 6; cnta++) { state_ptr->b[cnta] = 0; state_ptr->dq[cnta] = 32; } state_ptr->td = 0; } /* * predictor_zero() * * computes the estimated signal from 6-zero predictor. * */ int predictor_zero( g726_state *state_ptr) { int i; int sezi; sezi = fmult(state_ptr->b[0] >> 2, state_ptr->dq[0]); for (i = 1; i < 6; i++) /* ACCUM */ sezi += fmult(state_ptr->b[i] >> 2, state_ptr->dq[i]); return (sezi); } /* * predictor_pole() * * computes the estimated signal from 2-pole predictor. * */ int predictor_pole( g726_state *state_ptr) { return (fmult(state_ptr->a[1] >> 2, state_ptr->sr[1]) + fmult(state_ptr->a[0] >> 2, state_ptr->sr[0])); } /* * step_size() * * computes the quantization step size of the adaptive quantizer. * */ int step_size( g726_state *state_ptr) { int y; int dif; int al; if (state_ptr->ap >= 256) return (state_ptr->yu); else { y = state_ptr->yl >> 6; dif = state_ptr->yu - y; al = state_ptr->ap >> 2; if (dif > 0) y += (dif * al) >> 6; else if (dif < 0) y += (dif * al + 0x3F) >> 6; return (y); } } /* * quantize() * * Given a raw sample, 'd', of the difference signal and a * quantization step size scale factor, 'y', this routine returns the * ADPCM codeword to which that sample gets quantized. The step * size scale factor division operation is done in the log base 2 domain * as a subtraction. */ int quantize( int d, /* Raw difference signal sample */ int y, /* Step size multiplier */ int * table, /* quantization table */ int size) /* table size of integers */ { int dqm; /* Magnitude of 'd' */ int exp; /* Integer part of base 2 log of 'd' */ int mant; /* Fractional part of base 2 log */ int dl; /* Log of magnitude of 'd' */ int dln; /* Step size scale factor normalized log */ int i; /* * LOG * * Compute base 2 log of 'd', and store in 'dl'. */ dqm = abs(d); exp = quan(dqm >> 1, power2, 15); mant = ((dqm << 7) >> exp) & 0x7F; /* Fractional portion. */ dl = (exp << 7) + mant; /* * SUBTB * * "Divide" by step size multiplier. */ dln = dl - (y >> 2); /* * QUAN * * Obtain codword i for 'd'. */ i = quan(dln, table, size); if (d < 0) /* take 1's complement of i */ return ((size << 1) + 1 - i); else if (i == 0) /* take 1's complement of 0 */ return ((size << 1) + 1); /* new in 1988 */ else return (i); } /* * reconstruct() * * Returns reconstructed difference signal 'dq' obtained from * codeword 'i' and quantization step size scale factor 'y'. * Multiplication is performed in log base 2 domain as addition. */ int reconstruct( int sign, /* 0 for non-negative value */ int dqln, /* G.72x codeword */ int y) /* Step size multiplier */ { int dql; /* Log of 'dq' magnitude */ int dex; /* Integer part of log */ int dqt; int dq; /* Reconstructed difference signal sample */ dql = dqln + (y >> 2); /* ADDA */ if (dql < 0) { return ((sign) ? -0x8000 : 0); } else { /* ANTILOG */ dex = (dql >> 7) & 15; dqt = 128 + (dql & 127); dq = (short)((dqt << 7) >> (14 - dex)); return ((sign) ? (dq - 0x8000) : dq); } } /* * update() * * updates the state variables for each output code */ void update( int code_size, /* distinguish 723_40 with others */ int y, /* quantizer step size */ int wi, /* scale factor multiplier */ int fi, /* for long/short term energies */ int dq, /* quantized prediction difference */ int sr, /* reconstructed signal */ int dqsez, /* difference from 2-pole predictor */ g726_state *state_ptr) /* coder state pointer */ { int cnt; int mag, exp; /* Adaptive predictor, FLOAT A */ int a2p; /* LIMC */ int a1ul; /* UPA1 */ int pks1; /* UPA2 */ int fa1; int tr; /* tone/transition detector */ int ylint, thr2, dqthr; int ylfrac, thr1; int pk0; pk0 = (dqsez < 0) ? 1 : 0; /* needed in updating predictor poles */ mag = dq & 0x7FFF; /* prediction difference magnitude */ /* TRANS */ ylint = state_ptr->yl >> 15; /* exponent part of yl */ ylfrac = (state_ptr->yl >> 10) & 0x1F; /* fractional part of yl */ thr1 = (32 + ylfrac) << ylint; /* threshold */ thr2 = (ylint > 9) ? 31 << 10 : thr1; /* limit thr2 to 31 << 10 */ dqthr = (thr2 + (thr2 >> 1)) >> 1; /* dqthr = 0.75 * thr2 */ if (state_ptr->td == 0) /* signal supposed voice */ tr = 0; else if (mag <= dqthr) /* supposed data, but small mag */ tr = 0; /* treated as voice */ else /* signal is data (modem) */ tr = 1; /* * Quantizer scale factor adaptation. */ /* FUNCTW & FILTD & DELAY */ /* update non-steady state step size multiplier */ state_ptr->yu = y + ((wi - y) >> 5); /* LIMB */ if (state_ptr->yu < 544) /* 544 <= yu <= 5120 */ state_ptr->yu = 544; else if (state_ptr->yu > 5120) state_ptr->yu = 5120; /* FILTE & DELAY */ /* update steady state step size multiplier */ state_ptr->yl += state_ptr->yu + ((-state_ptr->yl) >> 6); /* * Adaptive predictor coefficients. */ if (tr == 1) { /* reset a's and b's for modem signal */ state_ptr->a[0] = 0; state_ptr->a[1] = 0; state_ptr->b[0] = 0; state_ptr->b[1] = 0; state_ptr->b[2] = 0; state_ptr->b[3] = 0; state_ptr->b[4] = 0; state_ptr->b[5] = 0; a2p = 0 ; } else { /* update a's and b's */ pks1 = pk0 ^ state_ptr->pk[0]; /* UPA2 */ /* update predictor pole a[1] */ a2p = state_ptr->a[1] - (state_ptr->a[1] >> 7); if (dqsez != 0) { fa1 = (pks1) ? state_ptr->a[0] : -state_ptr->a[0]; if (fa1 < -8191) /* a2p = function of fa1 */ a2p -= 0x100; else if (fa1 > 8191) a2p += 0xFF; else a2p += fa1 >> 5; if (pk0 ^ state_ptr->pk[1]) /* LIMC */ if (a2p <= -12160) a2p = -12288; else if (a2p >= 12416) a2p = 12288; else a2p -= 0x80; else if (a2p <= -12416) a2p = -12288; else if (a2p >= 12160) a2p = 12288; else a2p += 0x80; } /* TRIGB & DELAY */ state_ptr->a[1] = a2p; /* UPA1 */ /* update predictor pole a[0] */ state_ptr->a[0] -= state_ptr->a[0] >> 8; if (dqsez != 0) { if (pks1 == 0) state_ptr->a[0] += 192; else state_ptr->a[0] -= 192; } /* LIMD */ a1ul = 15360 - a2p; if (state_ptr->a[0] < -a1ul) state_ptr->a[0] = -a1ul; else if (state_ptr->a[0] > a1ul) state_ptr->a[0] = a1ul; /* UPB : update predictor zeros b[6] */ for (cnt = 0; cnt < 6; cnt++) { if (code_size == 5) /* for 40Kbps G.723 */ state_ptr->b[cnt] -= state_ptr->b[cnt] >> 9; else /* for G.721 and 24Kbps G.723 */ state_ptr->b[cnt] -= state_ptr->b[cnt] >> 8; if (dq & 0x7FFF) { /* XOR */ if ((dq ^ state_ptr->dq[cnt]) >= 0) state_ptr->b[cnt] += 128; else state_ptr->b[cnt] -= 128; } } } for (cnt = 5; cnt > 0; cnt--) state_ptr->dq[cnt] = state_ptr->dq[cnt-1]; /* FLOAT A : convert dq[0] to 4-bit exp, 6-bit mantissa f.p. */ if (mag == 0) { state_ptr->dq[0] = (dq >= 0) ? 0x20 : 0xFC20; } else { exp = quan(mag, power2, 15); state_ptr->dq[0] = (short)((dq >= 0) ? (exp << 6) + ((mag << 6) >> exp) : (exp << 6) + ((mag << 6) >> exp) - 0x400); } state_ptr->sr[1] = state_ptr->sr[0]; /* FLOAT B : convert sr to 4-bit exp., 6-bit mantissa f.p. */ if (sr == 0) { state_ptr->sr[0] = 0x20; } else if (sr > 0) { exp = quan(sr, power2, 15); state_ptr->sr[0] = (exp << 6) + ((sr << 6) >> exp); } else if (sr > -32768) { mag = -sr; exp = quan(mag, power2, 15); state_ptr->sr[0] = (exp << 6) + ((mag << 6) >> exp) - 0x400; } else state_ptr->sr[0] = 0xFC20; /* DELAY A */ state_ptr->pk[1] = state_ptr->pk[0]; state_ptr->pk[0] = pk0; /* TONE */ if (tr == 1) /* this sample has been treated as data */ state_ptr->td = 0; /* next one will be treated as voice */ else if (a2p < -11776) /* small sample-to-sample correlation */ state_ptr->td = 1; /* signal may be data */ else /* signal is voice */ state_ptr->td = 0; /* * Adaptation speed control. */ state_ptr->dms += (fi - state_ptr->dms) >> 5; /* FILTA */ state_ptr->dml += (((fi << 2) - state_ptr->dml) >> 7); /* FILTB */ if (tr == 1) state_ptr->ap = 256; else if (y < 1536) /* SUBTC */ state_ptr->ap += (0x200 - state_ptr->ap) >> 4; else if (state_ptr->td == 1) state_ptr->ap += (0x200 - state_ptr->ap) >> 4; else if (abs((state_ptr->dms << 2) - state_ptr->dml) >= (state_ptr->dml >> 3)) state_ptr->ap += (0x200 - state_ptr->ap) >> 4; else state_ptr->ap += (-state_ptr->ap) >> 4; } /* * tandem_adjust(sr, se, y, i, sign) * * At the end of ADPCM decoding, it simulates an encoder which may be receiving * the output of this decoder as a tandem process. If the output of the * simulated encoder differs from the input to this decoder, the decoder output * is adjusted by one level of A-law or u-law codes. * * Input: * sr decoder output linear PCM sample, * se predictor estimate sample, * y quantizer step size, * i decoder input code, * sign sign bit of code i * * Return: * adjusted A-law or u-law compressed sample. */ int tandem_adjust_alaw( int sr, /* decoder output linear PCM sample */ int se, /* predictor estimate sample */ int y, /* quantizer step size */ int i, /* decoder input code */ int sign, int * qtab) { int sp; /* A-law compressed 8-bit code */ int dx; /* prediction error */ int id; /* quantized prediction error */ int sd; /* adjusted A-law decoded sample value */ int im; /* biased magnitude of i */ int imx; /* biased magnitude of id */ if (sr <= -32768) sr = -1; sp = linear2alaw((sr >> 1) << 3); /* short to A-law compression */ dx = (alaw2linear(sp) >> 2) - se; /* 16-bit prediction error */ id = quantize(dx, y, qtab, sign - 1); if (id == i) { /* no adjustment on sp */ return (sp); } else { /* sp adjustment needed */ /* ADPCM codes : 8, 9, ... F, 0, 1, ... , 6, 7 */ im = i ^ sign; /* 2's complement to biased unsigned */ imx = id ^ sign; if (imx > im) { /* sp adjusted to next lower value */ if (sp & 0x80) { sd = (sp == 0xD5) ? 0x55 : ((sp ^ 0x55) - 1) ^ 0x55; } else { sd = (sp == 0x2A) ? 0x2A : ((sp ^ 0x55) + 1) ^ 0x55; } } else { /* sp adjusted to next higher value */ if (sp & 0x80) sd = (sp == 0xAA) ? 0xAA : ((sp ^ 0x55) + 1) ^ 0x55; else sd = (sp == 0x55) ? 0xD5 : ((sp ^ 0x55) - 1) ^ 0x55; } return (sd); } } int tandem_adjust_ulaw( int sr, /* decoder output linear PCM sample */ int se, /* predictor estimate sample */ int y, /* quantizer step size */ int i, /* decoder input code */ int sign, int * qtab) { int sp; /* u-law compressed 8-bit code */ int dx; /* prediction error */ int id; /* quantized prediction error */ int sd; /* adjusted u-law decoded sample value */ int im; /* biased magnitude of i */ int imx; /* biased magnitude of id */ if (sr <= -32768) sr = 0; sp = linear2ulaw(sr << 2); /* short to u-law compression */ dx = (ulaw2linear(sp) >> 2) - se; /* 16-bit prediction error */ id = quantize(dx, y, qtab, sign - 1); if (id == i) { return (sp); } else { /* ADPCM codes : 8, 9, ... F, 0, 1, ... , 6, 7 */ im = i ^ sign; /* 2's complement to biased unsigned */ imx = id ^ sign; if (imx > im) { /* sp adjusted to next lower value */ if (sp & 0x80) sd = (sp == 0xFF) ? 0x7E : sp + 1; else sd = (sp == 0) ? 0 : sp - 1; } else { /* sp adjusted to next higher value */ if (sp & 0x80) sd = (sp == 0x80) ? 0x80 : sp - 1; else sd = (sp == 0x7F) ? 0xFE : sp + 1; } return (sd); } } /* Allocate and Init. codec struct */ h323plus/plugins/audio/G726/g726/g726_16.c0000644000175000017500000001375411341106231016144 0ustar markmark/* * This source code is a product of Sun Microsystems, Inc. and is provided * for unrestricted use. Users may copy or modify this source code without * charge. * * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. * * Sun source code is provided with no support and without any obligation on * the part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. * * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE * OR ANY PART THEREOF. * * In no event will Sun Microsystems, Inc. be liable for any lost revenue * or profits or other special, indirect and consequential damages, even if * Sun has been advised of the possibility of such damages. * * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 */ /* 16kbps version created, used 24kbps code and changing as little as possible. * G.726 specs are available from ITU's gopher or WWW site (http://www.itu.ch) * If any errors are found, please contact me at mrand@tamu.edu * -Marc Randolph */ /* * g726_16.c * * Description: * * g723_16_encoder(), g723_16_decoder() * * These routines comprise an implementation of the CCITT G.726 16 Kbps * ADPCM coding algorithm. Essentially, this implementation is identical to * the bit level description except for a few deviations which take advantage * of workstation attributes, such as hardware 2's complement arithmetic. * * The ITU-T G.726 coder is an adaptive differential pulse code modulation * (ADPCM) waveform coding algorithm, suitable for coding of digitized * telephone bandwidth (0.3-3.4 kHz) speech or audio signals sampled at 8 kHz. * This coder operates on a sample-by-sample basis. Input samples may be * represented in linear PCM or companded 8-bit G.711 (m-law/A-law) formats * (i.e., 64 kbps). For 32 kbps operation, each sample is converted into a * 4-bit quantized difference signal resulting in a compression ratio of * 2:1 over the G.711 format. For 24 kbps 40 kbps operation, the quantized * difference signal is 3 bits and 5 bits, respectively. * * $Revision: 1.1 $ * $Author: shorne $ * $Date: 2010/02/24 02:19:05 $ */ #include "g72x.h" #include "private.h" /* * Maps G.723_16 code word to reconstructed scale factor normalized log * magnitude values. Comes from Table 11/G.726 */ static short _dqlntab[4] = { 116, 365, 365, 116}; /* Maps G.723_16 code word to log of scale factor multiplier. * * _witab[4] is actually {-22 , 439, 439, -22}, but FILTD wants it * as WI << 5 (multiplied by 32), so we'll do that here */ static short _witab[4] = {-704, 14048, 14048, -704}; /* * Maps G.723_16 code words to a set of values whose long and short * term averages are computed and then compared to give an indication * how stationary (steady state) the signal is. */ /* Comes from FUNCTF */ static short _fitab[4] = {0, 0xE00, 0xE00, 0}; /* Comes from quantizer decision level tables (Table 7/G.726) */ static int qtab_723_16[1] = {261}; /* * g723_16_encoder() * * Encodes a linear PCM, A-law or u-law input sample and returns its 2-bit code. * Returns -1 if invalid input coding value. */ int g726_16_encoder( int sl, int in_coding, g726_state *state_ptr) { int sezi; int sez; /* ACCUM */ int sei; int se; int d; /* SUBTA */ int y; /* MIX */ int i; int dq; int sr; /* ADDB */ int dqsez; /* ADDC */ switch (in_coding) { /* linearize input sample to 14-bit PCM */ case AUDIO_ENCODING_ALAW: sl = alaw2linear(sl) >> 2; break; case AUDIO_ENCODING_ULAW: sl = ulaw2linear(sl) >> 2; break; case AUDIO_ENCODING_LINEAR: sl >>= 2; /* sl of 14-bit dynamic range */ break; default: return (-1); } sezi = predictor_zero(state_ptr); sez = sezi >> 1; sei = sezi + predictor_pole(state_ptr); se = sei >> 1; /* se = estimated signal */ d = sl - se; /* d = estimation diff. */ /* quantize prediction difference d */ y = step_size(state_ptr); /* quantizer step size */ i = quantize(d, y, qtab_723_16, 1); /* i = ADPCM code */ /* Since quantize() only produces a three level output * (1, 2, or 3), we must create the fourth one on our own */ if (i == 3) /* i code for the zero region */ if ((d & 0x8000) == 0) /* If d > 0, i=3 isn't right... */ i = 0; dq = reconstruct(i & 2, _dqlntab[i], y); /* quantized diff. */ sr = (dq < 0) ? se - (dq & 0x3FFF) : se + dq; /* reconstructed signal */ dqsez = sr + sez - se; /* pole prediction diff. */ update(2, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr); return (i); } /* * g723_16_decoder() * * Decodes a 2-bit CCITT G.723_16 ADPCM code and returns * the resulting 16-bit linear PCM, A-law or u-law sample value. * -1 is returned if the output coding is unknown. */ int g726_16_decoder( int i, int out_coding, g726_state *state_ptr) { int sezi; int sez; /* ACCUM */ int sei; int se; int y; /* MIX */ int dq; int sr; /* ADDB */ int dqsez; i &= 0x03; /* mask to get proper bits */ sezi = predictor_zero(state_ptr); sez = sezi >> 1; sei = sezi + predictor_pole(state_ptr); se = sei >> 1; /* se = estimated signal */ y = step_size(state_ptr); /* adaptive quantizer step size */ dq = reconstruct(i & 0x02, _dqlntab[i], y); /* unquantize pred diff */ sr = (dq < 0) ? (se - (dq & 0x3FFF)) : (se + dq); /* reconst. signal */ dqsez = sr - se + sez; /* pole prediction diff. */ update(2, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr); switch (out_coding) { case AUDIO_ENCODING_ALAW: return (tandem_adjust_alaw(sr, se, y, i, 2, qtab_723_16)); case AUDIO_ENCODING_ULAW: return (tandem_adjust_ulaw(sr, se, y, i, 2, qtab_723_16)); case AUDIO_ENCODING_LINEAR: return (sr << 2); /* sr was of 14-bit dynamic range */ default: return (-1); } } h323plus/plugins/audio/G726/g726/g726_32.c0000644000175000017500000001405711341106231016137 0ustar markmark/* * This source code is a product of Sun Microsystems, Inc. and is provided * for unrestricted use. Users may copy or modify this source code without * charge. * * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. * * Sun source code is provided with no support and without any obligation on * the part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. * * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE * OR ANY PART THEREOF. * * In no event will Sun Microsystems, Inc. be liable for any lost revenue * or profits or other special, indirect and consequential damages, even if * Sun has been advised of the possibility of such damages. * * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 */ /* * g726_32.c * * Description: * * g721_encoder(), g721_decoder() * * These routines comprise an implementation of the CCITT G.721 ADPCM * coding algorithm. Essentially, this implementation is identical to * the bit level description except for a few deviations which * take advantage of work station attributes, such as hardware 2's * complement arithmetic and large memory. Specifically, certain time * consuming operations such as multiplications are replaced * with lookup tables and software 2's complement operations are * replaced with hardware 2's complement. * * The deviation from the bit level specification (lookup tables) * preserves the bit level performance specifications. * * As outlined in the G.721 Recommendation, the algorithm is broken * down into modules. Each section of code below is preceded by * the name of the module which it is implementing. * * The ITU-T G.726 coder is an adaptive differential pulse code modulation * (ADPCM) waveform coding algorithm, suitable for coding of digitized * telephone bandwidth (0.3-3.4 kHz) speech or audio signals sampled at 8 kHz. * This coder operates on a sample-by-sample basis. Input samples may be * represented in linear PCM or companded 8-bit G.711 (m-law/A-law) formats * (i.e., 64 kbps). For 32 kbps operation, each sample is converted into a * 4-bit quantized difference signal resulting in a compression ratio of * 2:1 over the G.711 format. For 24 kbps 40 kbps operation, the quantized * difference signal is 3 bits and 5 bits, respectively. * * $Revision: 1.1 $ * $Author: shorne $ * $Date: 2010/02/24 02:19:05 $ */ #include "g72x.h" #include "private.h" static int qtab_721[7] = {-124, 80, 178, 246, 300, 349, 400}; /* * Maps G.721 code word to reconstructed scale factor normalized log * magnitude values. */ static short _dqlntab[16] = {-2048, 4, 135, 213, 273, 323, 373, 425, 425, 373, 323, 273, 213, 135, 4, -2048}; /* Maps G.721 code word to log of scale factor multiplier. */ static short _witab[16] = {-12, 18, 41, 64, 112, 198, 355, 1122, 1122, 355, 198, 112, 64, 41, 18, -12}; /* * Maps G.721 code words to a set of values whose long and short * term averages are computed and then compared to give an indication * how stationary (steady state) the signal is. */ static short _fitab[16] = {0, 0, 0, 0x200, 0x200, 0x200, 0x600, 0xE00, 0xE00, 0x600, 0x200, 0x200, 0x200, 0, 0, 0}; /* * g721_encoder() * * Encodes the input vale of linear PCM, A-law or u-law data sl and returns * the resulting code. -1 is returned for unknown input coding value. */ int g726_32_encoder( int sl, int in_coding, g726_state *state_ptr) { int sezi; int sez; /* ACCUM */ int se; int d; /* SUBTA */ int y; /* MIX */ int i; int dq; int sr; /* ADDB */ int dqsez; /* ADDC */ switch (in_coding) { /* linearize input sample to 14-bit PCM */ case AUDIO_ENCODING_ALAW: sl = alaw2linear(sl) >> 2; break; case AUDIO_ENCODING_ULAW: sl = ulaw2linear(sl) >> 2; break; case AUDIO_ENCODING_LINEAR: sl >>= 2; /* 14-bit dynamic range */ break; default: return (-1); } sezi = predictor_zero(state_ptr); sez = sezi >> 1; se = (sezi + predictor_pole(state_ptr)) >> 1; /* estimated signal */ d = sl - se; /* estimation difference */ /* quantize the prediction difference */ y = step_size(state_ptr); /* quantizer step size */ i = quantize(d, y, qtab_721, 7); /* i = ADPCM code */ dq = reconstruct(i & 8, _dqlntab[i], y); /* quantized est diff */ sr = (dq < 0) ? se - (dq & 0x3FFF) : se + dq; /* reconst. signal */ dqsez = sr + sez - se; /* pole prediction diff. */ update(4, y, _witab[i] << 5, _fitab[i], dq, sr, dqsez, state_ptr); return (i); } /* * g721_decoder() * * Description: * * Decodes a 4-bit code of G.721 encoded data of i and * returns the resulting linear PCM, A-law or u-law value. * return -1 for unknown out_coding value. */ int g726_32_decoder( int i, int out_coding, g726_state *state_ptr) { int sezi; int sez; /* ACCUM */ int sei; int se; int y; /* MIX */ int dq; int sr; /* ADDB */ int dqsez; long lino; i &= 0x0f; /* mask to get proper bits */ sezi = predictor_zero(state_ptr); sez = sezi >> 1; sei = sezi + predictor_pole(state_ptr); se = sei >> 1; /* se = estimated signal */ y = step_size(state_ptr); /* dynamic quantizer step size */ dq = reconstruct(i & 0x08, _dqlntab[i], y); /* quantized diff. */ sr = (dq < 0) ? (se - (dq & 0x3FFF)) : se + dq; /* reconst. signal */ dqsez = sr - se + sez; /* pole prediction diff. */ update(4, y, _witab[i] << 5, _fitab[i], dq, sr, dqsez, state_ptr); switch (out_coding) { case AUDIO_ENCODING_ALAW: return (tandem_adjust_alaw(sr, se, y, i, 8, qtab_721)); case AUDIO_ENCODING_ULAW: return (tandem_adjust_ulaw(sr, se, y, i, 8, qtab_721)); case AUDIO_ENCODING_LINEAR: lino = (long)sr << 2; /* this seems to overflow a short*/ lino = lino > 32767 ? 32767 : lino; lino = lino < -32768 ? -32768 : lino; return lino;//(sr << 2); /* sr was 14-bit dynamic range */ default: return (-1); } } h323plus/plugins/audio/G726/g726/g72x.h0000644000175000017500000000662611341106231015745 0ustar markmark/* * This source code is a product of Sun Microsystems, Inc. and is provided * for unrestricted use. Users may copy or modify this source code without * charge. * * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. * * Sun source code is provided with no support and without any obligation on * the part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. * * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE * OR ANY PART THEREOF. * * In no event will Sun Microsystems, Inc. be liable for any lost revenue * or profits or other special, indirect and consequential damages, even if * Sun has been advised of the possibility of such damages. * * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 */ /* * g72x.h * * Header file for CCITT conversion routines. * */ #ifndef _G72X_H #define _G72X_H #define AUDIO_ENCODING_ULAW (1) /* ISDN u-law */ #define AUDIO_ENCODING_ALAW (2) /* ISDN A-law */ #define AUDIO_ENCODING_LINEAR (3) /* PCM 2's-complement (0-center) */ /* * The following is the definition of the state structure * used by the G.721/G.723 encoder and decoder to preserve their internal * state between successive calls. The meanings of the majority * of the state structure fields are explained in detail in the * CCITT Recommendation G.721. The field names are essentially indentical * to variable names in the bit level description of the coding algorithm * included in this Recommendation. */ typedef struct g726_state_s { long yl; /* Locked or steady state step size multiplier. */ int yu; /* Unlocked or non-steady state step size multiplier. */ int dms; /* Short term energy estimate. */ int dml; /* Long term energy estimate. */ int ap; /* Linear weighting coefficient of 'yl' and 'yu'. */ int a[2]; /* Coefficients of pole portion of prediction filter. */ int b[6]; /* Coefficients of zero portion of prediction filter. */ int pk[2]; /* Signs of previous two samples of a partially * reconstructed signal. */ short dq[6];/* int here fails in newupdate on encode! * Previous 6 samples of the quantized difference * signal represented in an internal floating point * format. */ int sr[2]; /* Previous 2 samples of the quantized difference * signal represented in an internal floating point * format. */ int td; /* delayed tone detect, new in 1988 version */ } g726_state; /* External function definitions. */ void g726_init_state( g726_state *); int g726_32_encoder( int sample, int in_coding, g726_state *state_ptr); int g726_32_decoder( int code, int out_coding, g726_state *state_ptr); int g726_16_encoder( int sample, int in_coding, g726_state *state_ptr); int g726_16_decoder( int code, int out_coding, g726_state *state_ptr); int g726_24_encoder( int sample, int in_coding, g726_state *state_ptr); int g726_24_decoder( int code, int out_coding, g726_state *state_ptr); int g726_40_encoder( int sample, int in_coding, g726_state *state_ptr); int g726_40_decoder( int code, int out_coding, g726_state *state_ptr); #endif /* !_G72X_H */ h323plus/plugins/audio/G726/g726/g726_40.c0000644000175000017500000001422511341106231016133 0ustar markmark/* * This source code is a product of Sun Microsystems, Inc. and is provided * for unrestricted use. Users may copy or modify this source code without * charge. * * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. * * Sun source code is provided with no support and without any obligation on * the part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. * * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE * OR ANY PART THEREOF. * * In no event will Sun Microsystems, Inc. be liable for any lost revenue * or profits or other special, indirect and consequential damages, even if * Sun has been advised of the possibility of such damages. * * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 */ /* * g726_40.c * * Description: * * g723_40_encoder(), g723_40_decoder() * * These routines comprise an implementation of the CCITT G.723 40Kbps * ADPCM coding algorithm. Essentially, this implementation is identical to * the bit level description except for a few deviations which * take advantage of workstation attributes, such as hardware 2's * complement arithmetic. * * The deviation from the bit level specification (lookup tables), * preserves the bit level performance specifications. * * As outlined in the G.723 Recommendation, the algorithm is broken * down into modules. Each section of code below is preceded by * the name of the module which it is implementing. * * The ITU-T G.726 coder is an adaptive differential pulse code modulation * (ADPCM) waveform coding algorithm, suitable for coding of digitized * telephone bandwidth (0.3-3.4 kHz) speech or audio signals sampled at 8 kHz. * This coder operates on a sample-by-sample basis. Input samples may be * represented in linear PCM or companded 8-bit G.711 (m-law/A-law) formats * (i.e., 64 kbps). For 32 kbps operation, each sample is converted into a * 4-bit quantized difference signal resulting in a compression ratio of * 2:1 over the G.711 format. For 24 kbps 40 kbps operation, the quantized * difference signal is 3 bits and 5 bits, respectively. * * $Revision: 1.1 $ * $Author: shorne $ * $Date: 2010/02/24 02:19:05 $ */ #include "g72x.h" #include "private.h" /* * Maps G.723_40 code word to ructeconstructed scale factor normalized log * magnitude values. */ static short _dqlntab[32] = {-2048, -66, 28, 104, 169, 224, 274, 318, 358, 395, 429, 459, 488, 514, 539, 566, 566, 539, 514, 488, 459, 429, 395, 358, 318, 274, 224, 169, 104, 28, -66, -2048}; /* Maps G.723_40 code word to log of scale factor multiplier. */ static short _witab[32] = {448, 448, 768, 1248, 1280, 1312, 1856, 3200, 4512, 5728, 7008, 8960, 11456, 14080, 16928, 22272, 22272, 16928, 14080, 11456, 8960, 7008, 5728, 4512, 3200, 1856, 1312, 1280, 1248, 768, 448, 448}; /* * Maps G.723_40 code words to a set of values whose long and short * term averages are computed and then compared to give an indication * how stationary (steady state) the signal is. */ static short _fitab[32] = {0, 0, 0, 0, 0, 0x200, 0x200, 0x200, 0x200, 0x200, 0x400, 0x600, 0x800, 0xA00, 0xC00, 0xC00, 0xC00, 0xC00, 0xA00, 0x800, 0x600, 0x400, 0x200, 0x200, 0x200, 0x200, 0x200, 0, 0, 0, 0, 0}; static int qtab_723_40[15] = {-122, -16, 68, 139, 198, 250, 298, 339, 378, 413, 445, 475, 502, 528, 553}; /* * g723_40_encoder() * * Encodes a 16-bit linear PCM, A-law or u-law input sample and returns * the resulting 5-bit CCITT G.723 40Kbps code. * Returns -1 if the input coding value is invalid. */ int g726_40_encoder( int sl, int in_coding, g726_state *state_ptr) { int sezi; int sez; /* ACCUM */ int sei; int se; int d; /* SUBTA */ int y; /* MIX */ int i; int dq; int sr; /* ADDB */ int dqsez; /* ADDC */ switch (in_coding) { /* linearize input sample to 14-bit PCM */ case AUDIO_ENCODING_ALAW: sl = alaw2linear(sl) >> 2; break; case AUDIO_ENCODING_ULAW: sl = ulaw2linear(sl) >> 2; break; case AUDIO_ENCODING_LINEAR: sl >>= 2; /* sl of 14-bit dynamic range */ break; default: return (-1); } sezi = predictor_zero(state_ptr); sez = sezi >> 1; sei = sezi + predictor_pole(state_ptr); se = sei >> 1; /* se = estimated signal */ d = sl - se; /* d = estimation difference */ /* quantize prediction difference */ y = step_size(state_ptr); /* adaptive quantizer step size */ i = quantize(d, y, qtab_723_40, 15); /* i = ADPCM code */ dq = reconstruct(i & 0x10, _dqlntab[i], y); /* quantized diff */ sr = (dq < 0) ? se - (dq & 0x7FFF) : se + dq; /* reconstructed signal */ dqsez = sr + sez - se; /* dqsez = pole prediction diff. */ update(5, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr); return (i); } /* * g723_40_decoder() * * Decodes a 5-bit CCITT G.723 40Kbps code and returns * the resulting 16-bit linear PCM, A-law or u-law sample value. * -1 is returned if the output coding is unknown. */ int g726_40_decoder( int i, int out_coding, g726_state *state_ptr) { int sezi; int sez; /* ACCUM */ int sei; int se; int y; /* MIX */ int dq; int sr; /* ADDB */ int dqsez; i &= 0x1f; /* mask to get proper bits */ sezi = predictor_zero(state_ptr); sez = sezi >> 1; sei = sezi + predictor_pole(state_ptr); se = sei >> 1; /* se = estimated signal */ y = step_size(state_ptr); /* adaptive quantizer step size */ dq = reconstruct(i & 0x10, _dqlntab[i], y); /* estimation diff. */ sr = (dq < 0) ? (se - (dq & 0x7FFF)) : (se + dq); /* reconst. signal */ dqsez = sr - se + sez; /* pole prediction diff. */ update(5, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr); switch (out_coding) { case AUDIO_ENCODING_ALAW: return (tandem_adjust_alaw(sr, se, y, i, 0x10, qtab_723_40)); case AUDIO_ENCODING_ULAW: return (tandem_adjust_ulaw(sr, se, y, i, 0x10, qtab_723_40)); case AUDIO_ENCODING_LINEAR: return (sr << 2); /* sr was of 14-bit dynamic range */ default: return (-1); } } h323plus/plugins/audio/G726/g726/g726_24.c0000644000175000017500000001243511341106231016136 0ustar markmark/* * This source code is a product of Sun Microsystems, Inc. and is provided * for unrestricted use. Users may copy or modify this source code without * charge. * * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. * * Sun source code is provided with no support and without any obligation on * the part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. * * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE * OR ANY PART THEREOF. * * In no event will Sun Microsystems, Inc. be liable for any lost revenue * or profits or other special, indirect and consequential damages, even if * Sun has been advised of the possibility of such damages. * * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 */ /* * g726_24.c * * Description: * * g723_24_encoder(), g723_24_decoder() * * These routines comprise an implementation of the CCITT G.723 24 Kbps * ADPCM coding algorithm. Essentially, this implementation is identical to * the bit level description except for a few deviations which take advantage * of workstation attributes, such as hardware 2's complement arithmetic. * * The ITU-T G.726 coder is an adaptive differential pulse code modulation * (ADPCM) waveform coding algorithm, suitable for coding of digitized * telephone bandwidth (0.3-3.4 kHz) speech or audio signals sampled at 8 kHz. * This coder operates on a sample-by-sample basis. Input samples may be * represented in linear PCM or companded 8-bit G.711 (m-law/A-law) formats * (i.e., 64 kbps). For 32 kbps operation, each sample is converted into a * 4-bit quantized difference signal resulting in a compression ratio of * 2:1 over the G.711 format. For 24 kbps 40 kbps operation, the quantized * difference signal is 3 bits and 5 bits, respectively. * * $Revision: 1.1 $ * $Author: shorne $ * $Date: 2010/02/24 02:19:05 $ */ #include "g72x.h" #include "private.h" /* * Maps G.723_24 code word to reconstructed scale factor normalized log * magnitude values. */ static short _dqlntab[8] = {-2048, 135, 273, 373, 373, 273, 135, -2048}; /* Maps G.723_24 code word to log of scale factor multiplier. */ static short _witab[8] = {-128, 960, 4384, 18624, 18624, 4384, 960, -128}; /* * Maps G.723_24 code words to a set of values whose long and short * term averages are computed and then compared to give an indication * how stationary (steady state) the signal is. */ static short _fitab[8] = {0, 0x200, 0x400, 0xE00, 0xE00, 0x400, 0x200, 0}; static int qtab_723_24[3] = {8, 218, 331}; /* * g723_24_encoder() * * Encodes a linear PCM, A-law or u-law input sample and returns its 3-bit code. * Returns -1 if invalid input coding value. */ int g726_24_encoder( int sl, int in_coding, g726_state *state_ptr) { int sezi; int sei; int sez; /* ACCUM */ int se; int d; /* SUBTA */ int y; /* MIX */ int i; int dq; int sr; /* ADDB */ int dqsez; /* ADDC */ switch (in_coding) { /* linearize input sample to 14-bit PCM */ case AUDIO_ENCODING_ALAW: sl = alaw2linear(sl) >> 2; break; case AUDIO_ENCODING_ULAW: sl = ulaw2linear(sl) >> 2; break; case AUDIO_ENCODING_LINEAR: sl >>= 2; /* sl of 14-bit dynamic range */ break; default: return (-1); } sezi = predictor_zero(state_ptr); sez = sezi >> 1; sei = sezi + predictor_pole(state_ptr); se = sei >> 1; /* se = estimated signal */ d = sl - se; /* d = estimation diff. */ /* quantize prediction difference d */ y = step_size(state_ptr); /* quantizer step size */ i = quantize(d, y, qtab_723_24, 3); /* i = ADPCM code */ dq = reconstruct(i & 4, _dqlntab[i], y); /* quantized diff. */ sr = (dq < 0) ? se - (dq & 0x3FFF) : se + dq; /* reconstructed signal */ dqsez = sr + sez - se; /* pole prediction diff. */ update(3, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr); return (i); } /* * g723_24_decoder() * * Decodes a 3-bit CCITT G.723_24 ADPCM code and returns * the resulting 16-bit linear PCM, A-law or u-law sample value. * -1 is returned if the output coding is unknown. */ int g726_24_decoder( int i, int out_coding, g726_state *state_ptr) { int sezi; int sez; /* ACCUM */ int sei; int se; int y; /* MIX */ int dq; int sr; /* ADDB */ int dqsez; i &= 0x07; /* mask to get proper bits */ sezi = predictor_zero(state_ptr); sez = sezi >> 1; sei = sezi + predictor_pole(state_ptr); se = sei >> 1; /* se = estimated signal */ y = step_size(state_ptr); /* adaptive quantizer step size */ dq = reconstruct(i & 0x04, _dqlntab[i], y); /* unquantize pred diff */ sr = (dq < 0) ? (se - (dq & 0x3FFF)) : (se + dq); /* reconst. signal */ dqsez = sr - se + sez; /* pole prediction diff. */ update(3, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr); switch (out_coding) { case AUDIO_ENCODING_ALAW: return (tandem_adjust_alaw(sr, se, y, i, 4, qtab_723_24)); case AUDIO_ENCODING_ULAW: return (tandem_adjust_ulaw(sr, se, y, i, 4, qtab_723_24)); case AUDIO_ENCODING_LINEAR: return (sr << 2); /* sr was of 14-bit dynamic range */ default: return (-1); } } h323plus/version.h0000644000175000017500000000177511672617214012766 0ustar markmark/* * version.h * * Version number header file for H323Plus. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * */ #ifndef _H323PLUS_VERSION_H #define _H323PLUS_VERSION_H /* WARNING: You MUST NOT add any comments to the #defines which follow or add extra commented out #defines as this will confuse the parser which extracts the version numbers */ #define MAJOR_VERSION 1 #define MINOR_VERSION 24 #define BUILD_TYPE ReleaseCode #define BUILD_NUMBER 0 #endif // _H323PLUS_VERSION_H // End of File /////////////////////////////////////////////////////////////// h323plus/h323plus_cfg.dxy0000644000175000017500000011542111333340455014044 0ustar markmark# Doxyfile 1.2.18 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # General configuration options #--------------------------------------------------------------------------- # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = H323Plus # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = 1.22.0 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = . # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, # Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en # (Japanese with english messages), Korean, Norwegian, Polish, Portuguese, # Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish and Ukrainian. OUTPUT_LANGUAGE = English # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these class will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = YES # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited # members of a class in the documentation of that class as if those members were # ordinary class members. Constructors, destructors and assignment operators of # the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. It is allowed to use relative paths in the argument list. STRIP_FROM_PATH = # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower case letters. If set to YES upper case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # users are adviced to set this option to NO. CASE_SENSE_NAMES = YES # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like the Qt-style comments (thus requiring an # explict @brief command for a brief description. JAVADOC_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the DETAILS_AT_TOP tag is set to YES then Doxygen # will output the detailed description near the top, like JavaDoc. # If set to NO, the detailed description appears after the member # documentation. DETAILS_AT_TOP = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # reimplements. INHERIT_DOCS = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consist of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. # For instance some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources # only. Doxygen will then generate output that is more tailored for Java. # For instance namespaces will be presented as packages, qualified scopes # will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = ./h323plus.dxy ./include # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp # *.h++ *.idl *.odl FILE_PATTERNS = # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories # that are symbolic links (a Unix filesystem feature) are excluded from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. EXCLUDE_PATTERNS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. INPUT_FILTER = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output dir. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non empty doxygen will try to run # the html help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the Html help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript and frames is required (for instance Mozilla, Netscape 4.0+, # or Internet explorer 4.0+). Note that for large projects the tree generation # can take a very long time. In such cases it is better to disable this feature. # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimised for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assigments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_XML = NO # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_PREDEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. PREDEFINED = DOCPLUSLUS DOC_PLUS_PLUS \ P_VIDEO H323_VIDEO H323_AUDIO_CODECS H323_AEC H323_T38 H323_T120 H323_H224 H323_H230 H323_H239 H323_H248 H323_H249 H323_H341 H323_H350 H323_H450 H323_H460 H323_H4609 H323_H46018 H323_H46023 H323_H460P H323_H501 H323_GNUGK H323_FILE # If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse the # parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::addtions related to external references #--------------------------------------------------------------------------- # The TAGFILES tag can be used to specify one or more tagfiles. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or # super classes. Setting the tag to NO turns the diagrams off. Note that this # option is superceded by the HAVE_DOT option below. This is only a fallback. It is # recommended to install and use dot, since it yield more powerful graphs. CLASS_DIAGRAMS = YES # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found on the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_WIDTH = 1024 # The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_HEIGHT = 1024 # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermedate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::addtions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO # The CGI_NAME tag should be the name of the CGI script that # starts the search engine (doxysearch) with the correct parameters. # A script with this name will be generated by doxygen. CGI_NAME = search.cgi # The CGI_URL tag should be the absolute URL to the directory where the # cgi binaries are located. See the documentation of your http daemon for # details. CGI_URL = # The DOC_URL tag should be the absolute URL to the directory where the # documentation is located. If left blank the absolute path to the # documentation, with file:// prepended to it, will be used. DOC_URL = # The DOC_ABSPATH tag should be the absolute path to the directory where the # documentation is located. If left blank the directory on the local machine # will be used. DOC_ABSPATH = # The BIN_ABSPATH tag must point to the directory where the doxysearch binary # is installed. BIN_ABSPATH = /usr/local/bin/ # The EXT_DOC_PATHS tag can be used to specify one or more paths to # documentation generated for other projects. This allows doxysearch to search # the documentation for these projects as well. EXT_DOC_PATHS = h323plus/h323plus_2008.sln0000644000175000017500000000466611712004251013666 0ustar markmarkMicrosoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "h323plus", "h323plus_2008.vcproj", "{71C46EAF-48C9-47BA-9532-27B51744548D}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simpleplus", "samples\simple\simple_2008.vcproj", "{AC8B99A3-6DEA-48B0-A6A6-31A982FAAD0A}" ProjectSection(ProjectDependencies) = postProject {71C46EAF-48C9-47BA-9532-27B51744548D} = {71C46EAF-48C9-47BA-9532-27B51744548D} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PTLib Static", "..\ptlib\src\ptlib\msos\Console_2008.vcproj", "{D11E1C9D-406C-4D7C-8F37-913C0BFD9E0D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 No Trace|Win32 = No Trace|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {71C46EAF-48C9-47BA-9532-27B51744548D}.Debug|Win32.ActiveCfg = Debug|Win32 {71C46EAF-48C9-47BA-9532-27B51744548D}.Debug|Win32.Build.0 = Debug|Win32 {71C46EAF-48C9-47BA-9532-27B51744548D}.No Trace|Win32.ActiveCfg = No Trace|Win32 {71C46EAF-48C9-47BA-9532-27B51744548D}.No Trace|Win32.Build.0 = No Trace|Win32 {71C46EAF-48C9-47BA-9532-27B51744548D}.Release|Win32.ActiveCfg = Release|Win32 {71C46EAF-48C9-47BA-9532-27B51744548D}.Release|Win32.Build.0 = Release|Win32 {AC8B99A3-6DEA-48B0-A6A6-31A982FAAD0A}.Debug|Win32.ActiveCfg = Debug|Win32 {AC8B99A3-6DEA-48B0-A6A6-31A982FAAD0A}.Debug|Win32.Build.0 = Debug|Win32 {AC8B99A3-6DEA-48B0-A6A6-31A982FAAD0A}.No Trace|Win32.ActiveCfg = No Trace|Win32 {AC8B99A3-6DEA-48B0-A6A6-31A982FAAD0A}.No Trace|Win32.Build.0 = No Trace|Win32 {AC8B99A3-6DEA-48B0-A6A6-31A982FAAD0A}.Release|Win32.ActiveCfg = Release|Win32 {AC8B99A3-6DEA-48B0-A6A6-31A982FAAD0A}.Release|Win32.Build.0 = Release|Win32 {D11E1C9D-406C-4D7C-8F37-913C0BFD9E0D}.Debug|Win32.ActiveCfg = Debug|Win32 {D11E1C9D-406C-4D7C-8F37-913C0BFD9E0D}.Debug|Win32.Build.0 = Debug|Win32 {D11E1C9D-406C-4D7C-8F37-913C0BFD9E0D}.No Trace|Win32.ActiveCfg = No Trace|Win32 {D11E1C9D-406C-4D7C-8F37-913C0BFD9E0D}.No Trace|Win32.Build.0 = No Trace|Win32 {D11E1C9D-406C-4D7C-8F37-913C0BFD9E0D}.Release|Win32.ActiveCfg = Release|Win32 {D11E1C9D-406C-4D7C-8F37-913C0BFD9E0D}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal h323plus/configure0000755000175000017500000052137411635040441013030 0ustar markmark#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.68. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="include/h323.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" enable_option_checking=no ac_subst_vars='LTLIBOBJS LIBOBJS subdirs INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM ENDLDLIBS LDLIBS STDCCFLAGS H323_FILE H323_GNUGK H323_T120 H323_T38 H323_H501 H323_H460P H323_H46023 H323_H46019M H323_H46018 H323_H46017 H323_H4609 H323_H460 H323_H450 H323_H350 H323_H341 H323_H249 H323_H248 H323_H239 H323_H235 H323_H230 H323_H224 NOVIDEO NOAUDIOCODECS NOTRACE PTLIBDIR PTLIB_CONFIG OPENH323_VERSION BUILD_NUMBER MINOR_VERSION MAJOR_VERSION LIBDIR INSTALLPREFIX OPENH323DIR EGREP GREP CPP ac_ct_CC CFLAGS CC OBJEXT EXEEXT ac_ct_CXX CPPFLAGS LDFLAGS CXXFLAGS CXX target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_versioncheck enable_minsize enable_asntracing enable_audio enable_embeddedgsm enable_video enable_h224 enable_h230 enable_h235 enable_h239 enable_h248 enable_h249 enable_h341 enable_h350 enable_h450 enable_h460 enable_h4609 enable_h46017 enable_h46018 enable_h46019m enable_h46023 enable_h460p enable_h501 enable_t38 enable_t120 enable_gnugk enable_file ' ac_precious_vars='build_alias host_alias target_alias CXX CXXFLAGS LDFLAGS LIBS CPPFLAGS CCC CC CFLAGS CPP' ac_subdirs_all='plugins' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-versioncheck disable PTLib version check --enable-minsize minimise the size of the lib by disabling least used options --disable-asntracing disable ASN tracing --disable-audio disable audio codecs --enable-embeddedgsm embed GSM codec via static linking --disable-video disable video functions --disable-h224 disable H.224 --disable-h230 disable H.230 --disable-h235 disable H.235.6 --disable-h239 disable H.239 --disable-h248 enable H.248 --disable-h249 disable H.249 --disable-h341 disable H.341 --disable-h350 disable H.350 --disable-h450 disable H.450 --disable-h460 disable H.460 --disable-h4609 disable H.460.9 --disable-h46017 disable H.460.17 --disable-h46018 disable H.460.18/.19 --disable-h46019m disable H.460.19 RTP multiplexing --disable-h46023 disable H.460.23/.24 --disable-h460p disable H.460 Presence --disable-h501 disable H.501 --disable-t38 disable T.38 --disable-t120 disable T.120 --disable-gnugk disable GnuGk NAT --disable-file disable File Transfer Some influential environment variables: CXX C++ compiler command CXXFLAGS C++ compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CC C compiler command CFLAGS C compiler flags CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 $as_echo_n "checking whether the C++ compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C++ compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 $as_echo_n "checking for C++ compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi REQUIRED_PTLIB_MAJOR=2 REQUIRED_PTLIB_MINOR=6 REQUIRED_PTLIB_BUILD=4 OPENH323DIR=`pwd` if test "x$prefix" = "xNONE"; then INSTALLPREFIX="/usr/local" else INSTALLPREFIX="${prefix}" fi LIBDIR="${libdir}" MAJOR_VERSION=`cat ${OPENH323DIR}/version.h | grep MAJOR_VERSION | cut -f3 -d' '` MINOR_VERSION=`cat ${OPENH323DIR}/version.h | grep MINOR_VERSION | cut -f3 -d' '` BUILD_NUMBER=`cat ${OPENH323DIR}/version.h | grep BUILD_NUMBER | cut -f3 -d' '` OPENH323_VERSION="${MAJOR_VERSION}.${MINOR_VERSION}.${BUILD_NUMBER}" MAJOR_VERSION=$MAJOR_VERSION MINOR_VERSION=$MINOR_VERSION BUILD_NUMBER=$BUILD_NUMBER echo "OpenH323 version is ${OPENH323_VERSION}" cat >>confdefs.h <<_ACEOF #define OPENH323_MAJOR ${MAJOR_VERSION} _ACEOF cat >>confdefs.h <<_ACEOF #define OPENH323_MINOR ${MINOR_VERSION} _ACEOF cat >>confdefs.h <<_ACEOF #define OPENH323_BUILD ${BUILD_NUMBER} _ACEOF cat >>confdefs.h <<_ACEOF #define OPENH323_VERSION "$OPENH323_VERSION" _ACEOF if test "${PTLIBDIR:-unset}" != "unset" ; then # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done as_ac_Header=`$as_echo "ac_cv_header_${PTLIBDIR}/version.h" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "${PTLIBDIR}/version.h" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : HAS_PTLIB=1 fi fi if test "${HAS_PTLIB:-unset}" = "unset" ; then as_ac_Header=`$as_echo "ac_cv_header_${OPENH323DIR}/../ptlib/version.h" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "${OPENH323DIR}/../ptlib/version.h" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : HAS_PTLIB=1 fi if test "${HAS_PTLIB:-unset}" != "unset" ; then PTLIBDIR="${OPENH323DIR}/../ptlib" else as_ac_Header=`$as_echo "ac_cv_header_${HOME}/ptlib/version.h" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "${HOME}/ptlib/version.h" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : HAS_PTLIB=1 fi if test "${HAS_PTLIB:-unset}" != "unset" ; then PTLIBDIR="${HOME}/ptlib" else if test "${HAS_PTLIB:-unset}" = "unset" ; then # Extract the first word of "ptlib-config", so it can be a program name with args. set dummy ptlib-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PTLIB_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PTLIB_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PTLIB_CONFIG="$PTLIB_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /usr/local/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PTLIB_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PTLIB_CONFIG=$ac_cv_path_PTLIB_CONFIG if test -n "$PTLIB_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTLIB_CONFIG" >&5 $as_echo "$PTLIB_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else if test "${PTLIB_CONFIG:-unset}" = "unset" ; then # Extract the first word of "ptlib-config", so it can be a program name with args. set dummy ptlib-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PTLIB_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PTLIB_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PTLIB_CONFIG="$PTLIB_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /usr/share/ptlib/make/ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PTLIB_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PTLIB_CONFIG=$ac_cv_path_PTLIB_CONFIG if test -n "$PTLIB_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTLIB_CONFIG" >&5 $as_echo "$PTLIB_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else if test "${PTLIB_CONFIG:-unset}" = "unset" ; then # Extract the first word of "ptlib-config", so it can be a program name with args. set dummy ptlib-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PTLIB_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PTLIB_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PTLIB_CONFIG="$PTLIB_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /usr/share/ptlib/make/ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PTLIB_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PTLIB_CONFIG=$ac_cv_path_PTLIB_CONFIG if test -n "$PTLIB_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTLIB_CONFIG" >&5 $as_echo "$PTLIB_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi fi fi fi fi if test "${PTLIB_CONFIG:-unset}" != "unset" ; then PTLIBDIR=`$PTLIB_CONFIG --prefix` HAS_PTLIB=1 fi if test "${HAS_PTLIB:-unset}" = "unset" ; then echo "Cannot find ptlib - please install or set PTLIBDIR and try again" exit fi if test "x$PTLIBDIR" = "x/usr" -o "x$PTLIBDIR" = "x/usr/"; then PTLIBDIR="/usr/share/ptlib/" fi if test "x$PTLIBDIR" = "x/usr/local" -o "x$PTLIBDIR" = "x/usr/"; then PTLIBDIR="/usr/local/share/ptlib/" fi echo "PTLib prefix set to.... $PTLIBDIR" if test "${PTLIB_CONFIG:-unset}" != "unset" ; then PTVERSION=`$PTLIB_CONFIG --version` PT_MAJOR_VERSION=`echo $PTVERSION | cut -d'.' -f1` PT_MINOR_VERSION=`echo $PTVERSION | cut -d'.' -f2` PT_BUILD_NUMBER=`echo $PTVERSION | cut -d'.' -f3` else PT_MAJOR_VERSION=`cat ${PTLIBDIR}/version.h | grep MAJOR_VERSION | cut -f3 -d' '` PT_MINOR_VERSION=`cat ${PTLIBDIR}/version.h | grep MINOR_VERSION | cut -f3 -d' '` PT_BUILD_NUMBER=`cat ${PTLIBDIR}/version.h | grep BUILD_NUMBER | cut -f3 -d' '` PTVERSION="${PT_MAJOR_VERSION}.${PT_MINOR_VERSION}.${PT_BUILD_NUMBER}" fi # Check whether --enable-versioncheck was given. if test "${enable_versioncheck+set}" = set; then : enableval=$enable_versioncheck; PTLIB_VERSION_CHECK=$enableval fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking Checking PTLib version ${PTVERSION}" >&5 $as_echo_n "checking Checking PTLib version ${PTVERSION}... " >&6; } if test "${PTLIB_VERSION_CHECK}x" = "nox" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: check disabled" >&5 $as_echo "check disabled" >&6; } else if test $PT_MAJOR_VERSION -lt $REQUIRED_PTLIB_MAJOR ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: Major version less than required $REQUIRED_PTLIB_MAJOR" >&5 $as_echo "Major version less than required $REQUIRED_PTLIB_MAJOR" >&6; } exit 1 fi if test $PT_MAJOR_VERSION -eq $REQUIRED_PTLIB_MAJOR ; then if test $PT_MINOR_VERSION -lt $REQUIRED_PTLIB_MINOR ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: Minor version less than required $REQUIRED_PTLIB_MINOR" >&5 $as_echo "Minor version less than required $REQUIRED_PTLIB_MINOR" >&6; } exit 1 fi fi if test $PT_MAJOR_VERSION -eq $REQUIRED_PTLIB_MAJOR ; then if test $PT_MINOR_VERSION -eq $REQUIRED_PTLIB_MINOR ; then if test $PT_BUILD_NUMBER -lt $REQUIRED_PTLIB_BUILD ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: Build version less than required $REQUIRED_PTLIB_BUILD" >&5 $as_echo "Build version less than required $REQUIRED_PTLIB_BUILD" >&6; } exit 1 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Check whether --enable-minsize was given. if test "${enable_minsize+set}" = set; then : enableval=$enable_minsize; fi default_audio=yes default_video=yes default_asntracing=yes default_h450=yes default_h501=yes default_t38=yes default_h224=yes default_h230=yes default_h235=no default_h239=yes default_h248=yes default_h249=yes default_h341=yes default_h350=yes default_h460=yes default_h4609=yes default_h46017=no default_h46018=yes default_h46019m=no default_h46023=yes default_h460p=yes default_t120=yes default_gnugk=yes default_file=yes if test "${enable_minsize}x" = "yesx" ; then default_audio=yes default_video=yes default_asntracing=no default_h450=no default_h501=no default_t38=no default_h224=no default_h230=no default_h235=no default_h239=no default_h248=no default_h249=no default_h341=no default_h350=no default_h460=no default_h4609=no default_h46017=no default_h46018=no default_h46019m=no default_h46023=no default_hh460p=no default_t120=no default_gnugk=no default_file=no fi # Check whether --enable-asntracing was given. if test "${enable_asntracing+set}" = set; then : enableval=$enable_asntracing; fi if test "${enable_asntracing}z" = "z" ; then enable_asntracing=$default_asntracing fi if test "$enable_asntracing" = "no" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling ASN tracing" >&5 $as_echo "$as_me: Disabling ASN tracing" >&6;} NOTRACE=1 fi # Check whether --enable-audio was given. if test "${enable_audio+set}" = set; then : enableval=$enable_audio; fi if test "${enable_audio}z" = "z" ; then enable_audio=yes fi if test "$enable_audio" = "no" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling audio functions" >&5 $as_echo "$as_me: Disabling audio functions" >&6;} NOAUDIOCODECS=1 else $as_echo "#define H323_AUDIO_CODECS 1" >>confdefs.h # Check whether --enable-embeddedgsm was given. if test "${enable_embeddedgsm+set}" = set; then : enableval=$enable_embeddedgsm; EMBEDDED_GSM=$enableval fi if test "${EMBEDDED_GSM}x" != "x" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: Embedding GSM codec" >&5 $as_echo "$as_me: Embedding GSM codec" >&6;} LDFLAGS="$LDFLAGS -L${OPENH323DIR}/plugins/audio/GSM0610" ENDLDLIBS="$ENDLDLIBS -lgsm0610_audio_s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gsm_create in -lgsm" >&5 $as_echo_n "checking for gsm_create in -lgsm... " >&6; } if ${ac_cv_lib_gsm_gsm_create+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgsm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gsm_create (); int main () { return gsm_create (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gsm_gsm_create=yes else ac_cv_lib_gsm_gsm_create=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gsm_gsm_create" >&5 $as_echo "$ac_cv_lib_gsm_gsm_create" >&6; } if test "x$ac_cv_lib_gsm_gsm_create" = xyes; then : GSM=1 fi if test "x$GSM" != "x"; then ENDLDLIBS="$ENDLDLIBS -lgsm" fi $as_echo "#define H323_EMBEDDED_GSM 1" >>confdefs.h fi fi # Check whether --enable-video was given. if test "${enable_video+set}" = set; then : enableval=$enable_video; fi if test "${enable_video}z" = "z" ; then enable_video=$default_video fi if test "$enable_video" = "no" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling video functions" >&5 $as_echo "$as_me: Disabling video functions" >&6;} NOVIDEO=1 else $as_echo "#define H323_VIDEO 1" >>confdefs.h fi # Check whether --enable-h224 was given. if test "${enable_h224+set}" = set; then : enableval=$enable_h224; fi if test "${enable_h224}x" = "x" ; then enable_h224=$default_h224 fi if test "$enable_h224" = "yes" ; then H323_H224=1 $as_echo "#define H323_H224 1" >>confdefs.h else H323_H224= { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling H.224" >&5 $as_echo "$as_me: Disabling H.224" >&6;} fi # Check whether --enable-h230 was given. if test "${enable_h230+set}" = set; then : enableval=$enable_h230; fi if test "${enable_h230}x" = "x" ; then enable_h230=$default_h230 fi if test "$enable_h230" = "yes" ; then H323_H230=1 $as_echo "#define H323_H230 1" >>confdefs.h else H323_H230= { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling H.230" >&5 $as_echo "$as_me: Disabling H.230" >&6;} fi # Check whether --enable-h235 was given. if test "${enable_h235+set}" = set; then : enableval=$enable_h235; fi if test "${enable_h235}x" = "x" ; then enable_h235=$default_h235 fi if test "$enable_h235" = "yes" ; then H323_H235=1 $as_echo "#define H323_H235 1" >>confdefs.h else H323_H235= { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling H.235.6" >&5 $as_echo "$as_me: Disabling H.235.6" >&6;} fi # Check whether --enable-h239 was given. if test "${enable_h239+set}" = set; then : enableval=$enable_h239; fi if test "${enable_h239}x" = "x" ; then enable_h239=$default_h239 fi if test "$enable_h239" = "yes" ; then H323_H239=1 $as_echo "#define H323_H239 1" >>confdefs.h else H323_H239= { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling H.239" >&5 $as_echo "$as_me: Disabling H.239" >&6;} fi # Check whether --enable-h248 was given. if test "${enable_h248+set}" = set; then : enableval=$enable_h248; fi if test "${enable_h248}x" = "x" ; then enable_h248=$default_h248 fi if test "$enable_h248" = "yes" ; then H323_H248=1 $as_echo "#define H323_H248 1" >>confdefs.h else H323_H248= { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling H.248" >&5 $as_echo "$as_me: Disabling H.248" >&6;} fi # Check whether --enable-h249 was given. if test "${enable_h249+set}" = set; then : enableval=$enable_h249; fi if test "${enable_h249}x" = "x" ; then enable_h249=$default_h249 fi if test "$enable_h249" = "yes" ; then H323_H249=1 $as_echo "#define H323_H249 1" >>confdefs.h else H323_H249= { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling H.249" >&5 $as_echo "$as_me: Disabling H.249" >&6;} fi # Check whether --enable-h341 was given. if test "${enable_h341+set}" = set; then : enableval=$enable_h341; fi if test "${enable_h341}x" = "x" ; then enable_h341=$default_h341 fi if test "$enable_h341" = "yes" ; then H323_H341=1 $as_echo "#define H323_H341 1" >>confdefs.h else H323_H341= { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling H.341" >&5 $as_echo "$as_me: Disabling H.341" >&6;} fi # Check whether --enable-h350 was given. if test "${enable_h350+set}" = set; then : enableval=$enable_h350; fi if test "${enable_h350}x" = "x" ; then enable_h350=$default_h350 fi if test "$enable_h350" = "yes" ; then H323_H350=1 $as_echo "#define H323_H350 1" >>confdefs.h else H323_H350= { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling H.350" >&5 $as_echo "$as_me: Disabling H.350" >&6;} fi # Check whether --enable-h450 was given. if test "${enable_h450+set}" = set; then : enableval=$enable_h450; fi if test "${enable_h450}x" = "x" ; then enable_h450=$default_h450 fi if test "$enable_h450" = "yes" ; then H323_H450=1 $as_echo "#define H323_H450 1" >>confdefs.h else H323_H450= { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling H.450" >&5 $as_echo "$as_me: Disabling H.450" >&6;} fi # Check whether --enable-h460 was given. if test "${enable_h460+set}" = set; then : enableval=$enable_h460; fi if test "${enable_h460}x" = "x" ; then enable_h460=$default_h460 fi if test "$enable_h460" = "yes" ; then H323_H460=1 $as_echo "#define H323_H460 1" >>confdefs.h else H323_H460= { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling H.460" >&5 $as_echo "$as_me: Disabling H.460" >&6;} fi # Check whether --enable-h4609 was given. if test "${enable_h4609+set}" = set; then : enableval=$enable_h4609; fi if test "${enable_h4609}x" = "x" ; then enable_h4609=$default_h4609 fi if test "$enable_h4609" = "yes" ; then H323_h4609=1 $as_echo "#define H323_H4609 1" >>confdefs.h else H323_h4609= { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling H.460.9" >&5 $as_echo "$as_me: Disabling H.460.9" >&6;} fi # Check whether --enable-h46017 was given. if test "${enable_h46017+set}" = set; then : enableval=$enable_h46017; fi if test "${enable_h46017}x" = "x" ; then enable_h46017=$default_h46017 fi if test "$enable_h46017" = "yes" ; then H323_H46017=1 $as_echo "#define H323_H46017 1" >>confdefs.h else H323_H46017= { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling H.460.17" >&5 $as_echo "$as_me: Disabling H.460.17" >&6;} fi # Check whether --enable-h46018 was given. if test "${enable_h46018+set}" = set; then : enableval=$enable_h46018; fi if test "${enable_h46018}x" = "x" ; then enable_h46018=$default_h46018 fi if test "$enable_h46018" = "yes" ; then H323_H46018=1 $as_echo "#define H323_H46018 1" >>confdefs.h else H323_H46018= { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling H.460.18/.19" >&5 $as_echo "$as_me: Disabling H.460.18/.19" >&6;} fi # Check whether --enable-h46019m was given. if test "${enable_h46019m+set}" = set; then : enableval=$enable_h46019m; fi if test "${enable_h46019m}x" = "x" ; then enable_h46019m=$default_h46019m fi if test "$enable_h46019m" = "yes" ; then H323_H46019M=1 $as_echo "#define H323_H46019M 1" >>confdefs.h else H323_H46019M= { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling H.460.19 RTP multiplexing" >&5 $as_echo "$as_me: Disabling H.460.19 RTP multiplexing" >&6;} fi # Check whether --enable-h46023 was given. if test "${enable_h46023+set}" = set; then : enableval=$enable_h46023; fi if test "${enable_h46023}x" = "x" ; then enable_h46023=$default_h46023 fi if test "$enable_h46023" = "yes" ; then H323_H46023=1 $as_echo "#define H323_H46023 1" >>confdefs.h else H323_H46023= { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling H.460.23/.24" >&5 $as_echo "$as_me: Disabling H.460.23/.24" >&6;} fi # Check whether --enable-h460p was given. if test "${enable_h460p+set}" = set; then : enableval=$enable_h460p; fi if test "${enable_h460p}x" = "x" ; then enable_h460p=$default_h460p fi if test "$enable_h460p" = "yes" ; then H323_H460P=1 $as_echo "#define H323_H460P 1" >>confdefs.h else H323_H460P= { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling H.460 Presence" >&5 $as_echo "$as_me: Disabling H.460 Presence" >&6;} fi # Check whether --enable-h501 was given. if test "${enable_h501+set}" = set; then : enableval=$enable_h501; fi if test "${enable_h501}x" = "x" ; then enable_h501=$default_h501 fi if test "$enable_h501" = "yes" ; then H323_H501=1 $as_echo "#define H323_H501 1" >>confdefs.h else H323_H501= { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling H.501" >&5 $as_echo "$as_me: Disabling H.501" >&6;} fi # Check whether --enable-t38 was given. if test "${enable_t38+set}" = set; then : enableval=$enable_t38; fi if test "${enable_t38}x" = "x" ; then enable_t38=$default_t38 fi if test "$enable_t38" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling T.38" >&5 $as_echo "$as_me: Enabling T.38" >&6;} H323_T38=1 $as_echo "#define H323_T38 1" >>confdefs.h else H323_T38= { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling T.38" >&5 $as_echo "$as_me: Disabling T.38" >&6;} fi # Check whether --enable-t120 was given. if test "${enable_t120+set}" = set; then : enableval=$enable_t120; fi if test "${enable_t120}x" = "x" ; then enable_t120=$default_t120 fi if test "$enable_t120" = "no" ; then H323_T120= { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling T.120" >&5 $as_echo "$as_me: Disabling T.120" >&6;} else H323_T20=1 $as_echo "#define H323_T120 1" >>confdefs.h fi # Check whether --enable-gnugk was given. if test "${enable_gnugk+set}" = set; then : enableval=$enable_gnugk; fi if test "${enable_gnugk}x" = "x" ; then enable_gnugk=$default_gnugk fi if test "$enable_gnugk" = "yes" ; then H323_GNUGK=1 $as_echo "#define H323_GNUGK 1" >>confdefs.h else H323_GNUGK= { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling GnuGk NAT" >&5 $as_echo "$as_me: Disabling GnuGk NAT" >&6;} fi # Check whether --enable-file was given. if test "${enable_file+set}" = set; then : enableval=$enable_file; fi if test "${enable_file}x" = "x" ; then enable_file=$default_file fi if test "$enable_file" = "yes" ; then H323_FILE=1 $as_echo "#define H323_FILE 1" >>confdefs.h else H323_FILE= { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling File Transfer" >&5 $as_echo "$as_me: Disabling File Transfer" >&6;} fi ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' ac_config_files="$ac_config_files openh323u.mak" ac_config_files="$ac_config_files Makefile" ac_config_headers="$ac_config_headers include/openh323buildopts.h" subdirs="$subdirs plugins" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "openh323u.mak") CONFIG_FILES="$CONFIG_FILES openh323u.mak" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "include/openh323buildopts.h") CONFIG_HEADERS="$CONFIG_HEADERS include/openh323buildopts.h" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi # # CONFIG_SUBDIRS section. # if test "$no_recursion" != yes; then # Remove --cache-file, --srcdir, and --disable-option-checking arguments # so they do not pile up. ac_sub_configure_args= ac_prev= eval "set x $ac_configure_args" shift for ac_arg do if test -n "$ac_prev"; then ac_prev= continue fi case $ac_arg in -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ | --c=*) ;; --config-cache | -C) ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) ;; --disable-option-checking) ;; *) case $ac_arg in *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_sub_configure_args " '$ac_arg'" ;; esac done # Always prepend --prefix to ensure using the same prefix # in subdir configurations. ac_arg="--prefix=$prefix" case $ac_arg in *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args" # Pass --silent if test "$silent" = yes; then ac_sub_configure_args="--silent $ac_sub_configure_args" fi # Always prepend --disable-option-checking to silence warnings, since # different subdirs can have different --enable and --with options. ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args" ac_popdir=`pwd` for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue # Do not complain, so a configure script can configure whichever # parts of a large source tree are present. test -d "$srcdir/$ac_dir" || continue ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)" $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5 $as_echo "$ac_msg" >&6 as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" # Check for guested configure; otherwise get Cygnus style configure. if test -f "$ac_srcdir/configure.gnu"; then ac_sub_configure=$ac_srcdir/configure.gnu elif test -f "$ac_srcdir/configure"; then ac_sub_configure=$ac_srcdir/configure elif test -f "$ac_srcdir/configure.in"; then # This should be Cygnus configure. ac_sub_configure=$ac_aux_dir/configure else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5 $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} ac_sub_configure= fi # The recursion is here. if test -n "$ac_sub_configure"; then # Make the cache file name correct relative to the subdirectory. case $cache_file in [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; *) # Relative name. ac_sub_cache_file=$ac_top_build_prefix$cache_file ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 $as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} # The eval makes quoting arguments work. eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \ --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" || as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5 fi cd "$ac_popdir" done fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi if test "${OSTYPE:-unknown}" = "solaris"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for upad128_t" >&5 $as_echo_n "checking for upad128_t... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { upad128_t upad; upad._q = 0.0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : has_upad128_t=y fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test ${has_upad128_t} == "y"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define P_HAS_UPAD128_T 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi h323plus/mpl-1.0.htm0000644000175000017500000004730310655704647012732 0ustar markmarkMozilla Public License version 1.0

MOZILLA PUBLIC LICENSE
Version 1.0


1. Definitions.

    1.1. ``Contributor'' means each entity that creates or contributes to the creation of Modifications.

    1.2. ``Contributor Version'' means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor.

    1.3. ``Covered Code'' means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof.

    1.4. ``Electronic Distribution Mechanism'' means a mechanism generally accepted in the software development community for the electronic transfer of data.

    1.5. ``Executable'' means Covered Code in any form other than Source Code.

    1.6. ``Initial Developer'' means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A.

    1.7. ``Larger Work'' means a work which combines Covered Code or portions thereof with code not governed by the terms of this License.

    1.8. ``License'' means this document.

    1.9. ``Modifications'' means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is:

      A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications.

      B. Any new file that contains any part of the Original Code or previous Modifications.

    1.10. ``Original Code'' means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License.

    1.11. ``Source Code'' means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or a list of source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge.

    1.12. ``You'' means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, ``You'' includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, ``control'' means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of fifty percent (50%) or more of the outstanding shares or beneficial ownership of such entity.

2. Source Code License.
    2.1. The Initial Developer Grant.
    The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims:

      (a) to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, or as part of a Larger Work; and

      (b) under patents now or hereafter owned or controlled by Initial Developer, to make, have made, use and sell (``Utilize'') the Original Code (or portions thereof), but solely to the extent that any such patent is reasonably necessary to enable You to Utilize the Original Code (or portions thereof) and not to any greater extent that may be necessary to Utilize further Modifications or combinations.

    2.2. Contributor Grant.
    Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims:

      (a) to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code or as part of a Larger Work; and

      (b) under patents now or hereafter owned or controlled by Contributor, to Utilize the Contributor Version (or portions thereof), but solely to the extent that any such patent is reasonably necessary to enable You to Utilize the Contributor Version (or portions thereof), and not to any greater extent that may be necessary to Utilize further Modifications or combinations.

3. Distribution Obligations.
    3.1. Application of License.
    The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5.

    3.2. Availability of Source Code.
    Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party.

    3.3. Description of Modifications.
    You must cause all Covered Code to which you contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code.

    3.4. Intellectual Property Matters

      (a) Third Party Claims.
      If You have knowledge that a party claims an intellectual property right in particular functionality or code (or its utilization under this License), you must include a text file with the source code distribution titled ``LEGAL'' which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If you obtain such knowledge after You make Your Modification available as described in Section 3.2, You shall promptly modify the LEGAL file in all copies You make available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained.

      (b) Contributor APIs.
      If Your Modification is an application programming interface and You own or control patents which are reasonably necessary to implement that API, you must also include this information in the LEGAL file.

    3.5. Required Notices.
    You must duplicate the notice in Exhibit A in each file of the Source Code, and this License in any documentation for the Source Code, where You describe recipients' rights relating to Covered Code. If You created one or more Modification(s), You may add your name as a Contributor to the notice described in Exhibit A. If it is not possible to put such notice in a particular Source Code file due to its structure, then you must include such notice in a location (such as a relevant directory file) where a user would be likely to look for such a notice. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.

    3.6. Distribution of Executable Versions.
    You may distribute Covered Code in Executable form only if the requirements of Section 3.1-3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.

    3.7. Larger Works.
    You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code.

4. Inability to Comply Due to Statute or Regulation.

    If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it.

5. Application of this License.
    This License applies to code to which the Initial Developer has attached the notice in Exhibit A, and to related Covered Code.
6. Versions of the License.
    6.1. New Versions.
    Netscape Communications Corporation (``Netscape'') may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number.

    6.2. Effect of New Versions.
    Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Netscape. No one other than Netscape has the right to modify the terms applicable to Covered Code created under this License.

    6.3. Derivative Works.
    If you create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), you must (a) rename Your license so that the phrases ``Mozilla'', ``MOZILLAPL'', ``MOZPL'', ``Netscape'', ``NPL'' or any confusingly similar phrase do not appear anywhere in your license and (b) otherwise make it clear that your version of the license contains terms which differ from the Mozilla Public License and Netscape Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.)

7. DISCLAIMER OF WARRANTY.
    COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN ``AS IS'' BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
8. TERMINATION.
    This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
9. LIMITATION OF LIABILITY.
    UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THAT EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
10. U.S. GOVERNMENT END USERS.
    The Covered Code is a ``commercial item,'' as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of ``commercial computer software'' and ``commercial computer software documentation,'' as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein.
11. MISCELLANEOUS.
    This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in, the United States of America: (a) unless otherwise agreed in writing, all disputes relating to this License (excepting any dispute relating to intellectual property rights) shall be subject to final and binding arbitration, with the losing party paying all costs of arbitration; (b) any arbitration relating to this Agreement shall be held in Santa Clara County, California, under the auspices of JAMS/EndDispute; and (c) any litigation relating to this Agreement shall be subject to the jurisdiction of the Federal Courts of the Northern District of California, with venue lying in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License.
12. RESPONSIBILITY FOR CLAIMS.
    Except in cases where another Contributor has failed to comply with Section 3.4, You are responsible for damages arising, directly or indirectly, out of Your utilization of rights under this License, based on the number of copies of Covered Code you made available, the revenues you received from utilizing such rights, and other relevant factors. You agree to work with affected parties to distribute responsibility on an equitable basis.
EXHIBIT A.
    ``The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/

    Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.

    The Original Code is ______________________________________.

    The Initial Developer of the Original Code is ________________________. Portions created by ______________________ are Copyright (C) ______ _______________________. All Rights Reserved.

    Contributor(s): ______________________________________.''

h323plus/h323plus_2010.sln0000644000175000017500000000542311712004251013647 0ustar markmarkяЛП Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "h323plus", "h323plus_2010.vcxproj", "{71C46EAF-48C9-47BA-9532-27B51744548D}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simpleplus", "samples\simple\simple_2010.vcxproj", "{AC8B99A3-6DEA-48B0-A6A6-31A982FAAD0A}" ProjectSection(ProjectDependencies) = postProject {71C46EAF-48C9-47BA-9532-27B51744548D} = {71C46EAF-48C9-47BA-9532-27B51744548D} EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 No Trace|Win32 = No Trace|Win32 No Trace|x64 = No Trace|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {71C46EAF-48C9-47BA-9532-27B51744548D}.Debug|Win32.ActiveCfg = Debug|Win32 {71C46EAF-48C9-47BA-9532-27B51744548D}.Debug|Win32.Build.0 = Debug|Win32 {71C46EAF-48C9-47BA-9532-27B51744548D}.Debug|x64.ActiveCfg = Debug|x64 {71C46EAF-48C9-47BA-9532-27B51744548D}.Debug|x64.Build.0 = Debug|x64 {71C46EAF-48C9-47BA-9532-27B51744548D}.No Trace|Win32.ActiveCfg = No Trace|Win32 {71C46EAF-48C9-47BA-9532-27B51744548D}.No Trace|Win32.Build.0 = No Trace|Win32 {71C46EAF-48C9-47BA-9532-27B51744548D}.No Trace|x64.ActiveCfg = No Trace|x64 {71C46EAF-48C9-47BA-9532-27B51744548D}.No Trace|x64.Build.0 = No Trace|x64 {71C46EAF-48C9-47BA-9532-27B51744548D}.Release|Win32.ActiveCfg = Release|Win32 {71C46EAF-48C9-47BA-9532-27B51744548D}.Release|Win32.Build.0 = Release|Win32 {71C46EAF-48C9-47BA-9532-27B51744548D}.Release|x64.ActiveCfg = Release|x64 {71C46EAF-48C9-47BA-9532-27B51744548D}.Release|x64.Build.0 = Release|x64 {AC8B99A3-6DEA-48B0-A6A6-31A982FAAD0A}.Debug|Win32.ActiveCfg = Debug|Win32 {AC8B99A3-6DEA-48B0-A6A6-31A982FAAD0A}.Debug|Win32.Build.0 = Debug|Win32 {AC8B99A3-6DEA-48B0-A6A6-31A982FAAD0A}.Debug|x64.ActiveCfg = Debug|x64 {AC8B99A3-6DEA-48B0-A6A6-31A982FAAD0A}.Debug|x64.Build.0 = Debug|x64 {AC8B99A3-6DEA-48B0-A6A6-31A982FAAD0A}.No Trace|Win32.ActiveCfg = No Trace|Win32 {AC8B99A3-6DEA-48B0-A6A6-31A982FAAD0A}.No Trace|Win32.Build.0 = No Trace|Win32 {AC8B99A3-6DEA-48B0-A6A6-31A982FAAD0A}.No Trace|x64.ActiveCfg = No Trace|x64 {AC8B99A3-6DEA-48B0-A6A6-31A982FAAD0A}.No Trace|x64.Build.0 = No Trace|x64 {AC8B99A3-6DEA-48B0-A6A6-31A982FAAD0A}.Release|Win32.ActiveCfg = Release|Win32 {AC8B99A3-6DEA-48B0-A6A6-31A982FAAD0A}.Release|Win32.Build.0 = Release|Win32 {AC8B99A3-6DEA-48B0-A6A6-31A982FAAD0A}.Release|x64.ActiveCfg = Release|x64 {AC8B99A3-6DEA-48B0-A6A6-31A982FAAD0A}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal h323plus/h323plus.dxy0000644000175000017500000002116111325336317013225 0ustar markmark/*! \mainpage H323Plus \section contents Table of Contents \li \ref intro \li \ref arch \li \ref classes \li \ref history \section intro Introduction H323Plus is an Open Source class library for the development of applications using the H.323 protocol for multi-media communications over packet based networks. It continues the development of OpenH323 under the old API. It uses the PWLib library to provide platform independence, and makes extensive use of the C++ techniques of inheritance and polymorphism. This document is intended as reference guide, not a tutorial. For examples of using H323Plus, see the sample programs provided in the samples directory. A tutorial on using PWLib and OpenH323/H323Plus is also available at http://toncar.cz/openh323/tut/ . Last updated 19 January, 2010 Copyright (C) 1999-2003 Equivalence Pty Ltd, All right reserved Portions Copyright (C) 2004 Post Increment, All Rights Reserved \section arch Architecture The fundamental object in the ownership hierarchy is the H323Endpoint class. An application would typically have one instance of a descendant of this class. The application defined descendant would set up defaults for various H323 parameters (timeouts etc), the most important of which is the capability table which defines the codecs and channel types the application is capable of handling. Also created by the application in the H323Endpoint would be instances of one or more descendants of the H323Listener class. There is a descendant of this class for each protocol that is supported. For example H323ListenerIP would be for Internet use. Each listener spawns a thread that monitors its protocol and when a new incoming call is detected, creates an instance of a H323Transport class descendent. As for the H323Listener class, there is a descendent for each protocol supported, eg H323TransportIP. When the first PDU arrives on a H323Transport using the Q.931 and H.225 protocols, there is a call reference that identifies the connection that has been made. These connections are embodied by the H323Connection class, which contains all of the state information for a connection between H323 endpoints. The H323Endpoint instance keeps track of these active connections. If there is no connection for the call reference number already, a new one is created and H323 signalling negotiations begun. An application would often have the system create an instance of a descendant of the H323Connection class, rather than that class itself. This is so that any of a large number of virtual methods may be overridden. These virtual methods are "callback" functions by the library to allow the application to either obtain information or modify the behaviour at various phases of the protocol negotiations. For example, there is a callback for when an incoming call is in progress and the application user should be "alerted". This is highly application specific being anything from a simple audible beep to displaying a pop up window with bells and whistles. The H323Negotiator classes are used to maintain the state and functionality of each command or variable defined by the H.245 protocol. Their main reason for existence is actually to reduce the scope of the h225.h and h245.h files, which define many hundreds of classes. A user of the H323Connection class thus does not have to include all of these classes on every compilation unit. During some of the H.245 negotiations, logical channels may be created, both by the remote endpoint and by the local application. The H323Channel class descendants represents this. A typical use of one of these classes is to open a stream of encoded audio data. The H323Channel class would create a H323Codec using the H323Capability that was passed during the protocol negotiations. \section classes Class hierarchy H323Plus provides a rich class hierarchy that allows access to most of the functions requires for H.323 endponts. The list below is not intended an exhaustive list of the classes available (which is available here) but is good starting point for finding out more information on the various functions available \subsection endpoint Endpoint Classes \li H323EndPoint - implements a H.323 endpoint that can make or receive calls \li H323Connection - an instance of the class is created for each outgoing or incoming call \li H323Channel - the base class for all H.323 logical channels \li H323Codec - the base class for all codecs. See also H323AudioCode and H323VideoCodec \li H323SignalPDU - the base class for all H.323 Protocol Data Units (PDU) \li H323DataPDU - the base class for all H.323 Protocol Data Units (PDU) \li H323GatekeeperServer - implements a H.323 Gatekeeper, i.e. a server for H.225 RAS protocl \subsection daattypes Data types \li H225_AliasAddress - defines a H.225 aliasAddress object \li H323TransportAddress - defines a IPv4 or IPv6 transport address as a string \subsection h225 H.225 Protocol Classes These classes are created from the H.225 ASN definitions \li H225_Setup_UUIE \li H225_CallProceeding_UUIE \li H225_Connect_UUIE \li H225_Alerting_UUIE \li H225_Information_UUIE \li H225_ReleaseComplete_UUIE \li H225_Facility_UUIE \li H225_Progress_UUIE \li H225_Status_UUIE \li H225_StatusInquiry_UUIE \li H225_SetupAcknowledge_UUIE \li H225_Notify_UUIE \li H225_GatekeeperRequest, \li H225_GatekeeperConfirm, \li H225_GatekeeperReject, \li H225_RegistrationRequest, \li H225_RegistrationConfirm, \li H225_RegistrationReject, \li H225_UnregistrationRequest, \li H225_UnregistrationConfirm, \li H225_UnregistrationReject, \li H225_AdmissionRequest, \li H225_AdmissionConfirm, \li H225_AdmissionReject, \li H225_BandwidthRequest, \li H225_BandwidthConfirm, \li H225_BandwidthReject, \li H225_DisengageRequest, \li H225_DisengageConfirm, \li H225_DisengageReject, \li H225_LocationRequest, \li H225_LocationConfirm, \li H225_LocationReject, \li H225_InfoRequest, \li H225_InfoRequestResponse, \li H225_NonStandardMessage, \li H225_UnknownMessageResponse, \li H225_RequestInProgress, \li H225_ResourcesAvailableIndicate, \li H225_ResourcesAvailableConfirm, \li H225_InfoRequestAck, \li H225_InfoRequestNak, \li H225_ServiceControlIndication, \li H225_ServiceControlResponse, \subsection h245 H.245 Protocol Classes These classes are created from the H.245 ASN definitions \li H245_NonStandardMessage \li H245_MasterSlaveDetermination \li H245_TerminalCapabilitySet \li H245_OpenLogicalChannel \li H245_CloseLogicalChannel \li H245_RequestChannelClose \li H245_MultiplexEntrySend \li H245_RequestMultiplexEntry \li H245_RequestMode \li H245_RoundTripDelayRequest \li H245_MaintenanceLoopRequest \li H245_CommunicationModeRequest \li H245_ConferenceRequest \li H245_MultilinkRequest \li H245_LogicalChannelRateRequest \li H245_MasterSlaveDeterminationAck \li H245_MasterSlaveDeterminationReject \li H245_TerminalCapabilitySetAck \li H245_TerminalCapabilitySetReject \li H245_OpenLogicalChannelAck \li H245_OpenLogicalChannelReject \li H245_CloseLogicalChannelAck \li H245_RequestChannelCloseAck \li H245_RequestChannelCloseReject \li H245_MultiplexEntrySendAck \li H245_MultiplexEntrySendReject \li H245_RequestMultiplexEntryAck \li H245_RequestMultiplexEntryReject \li H245_RequestModeAck \li H245_RequestModeReject \li H245_RoundTripDelayResponse \li H245_MaintenanceLoopAck \li H245_MaintenanceLoopReject \li H245_CommunicationModeResponse \li H245_ConferenceResponse \li H245_MultilinkResponse \li H245_LogicalChannelRateAcknowledge \li H245_LogicalChannelRateReject \li H245_MaintenanceLoopOffCommand \li H245_SendTerminalCapabilitySet \li H245_EncryptionCommand \li H245_FlowControlCommand \li H245_EndSessionCommand \li H245_MiscellaneousCommand \li H245_CommunicationModeCommand \li H245_ConferenceCommand \li H245_H223MultiplexReconfiguration \li H245_NewATMVCCommand \li H245_MobileMultilinkReconfigurationCommand \li H245_FunctionNotUnderstood \li H245_MasterSlaveDeterminationRelease \li H245_TerminalCapabilitySetRelease \li H245_OpenLogicalChannelConfirm \li H245_RequestChannelCloseRelease \li H245_MultiplexEntrySendRelease \li H245_RequestMultiplexEntryRelease \li H245_RequestModeRelease \li H245_MiscellaneousIndication \li H245_JitterIndication \li H245_H223SkewIndication \li H245_NewATMVCIndication \li H245_UserInputIndication \li H245_H2250MaximumSkewIndication \li H245_MCLocationIndication \li H245_ConferenceIndication \li H245_VendorIdentification \li H245_FunctionNotSupported \li H245_MultilinkIndication \li H245_LogicalChannelRateRelease \li H245_FlowControlIndication \li H245_MobileMultilinkReconfigurationIndication \subsection history History \li 17 May 2004 - Converted from Doc++ to Doxygen format by Craig Southeren \li 19 January 2010 - Minor updates for H323Plus by Jan Willamowius */